From 88750007d7869f178f0ba528f41efd3b74c424cf Mon Sep 17 00:00:00 2001 From: "R. Steve McKown" Date: Thu, 20 May 2010 08:51:28 -0600 Subject: [PATCH] Imported binutils-2.20 Summary: Imported binutils-2.20 Keywords: Imported binutils-2.20 from http://ftp.uni-kl.de/pub/gnu/binutils/binutils-2.20.tar.bz2 into Git repository --- .cvsignore | 33 - COPYING.LIBGLOSS | 206 - COPYING.NEWLIB | 640 - ChangeLog | 1389 +- MAINTAINERS | 57 +- Makefile.def | 126 +- Makefile.in | 8253 +++- Makefile.tpl | 322 +- README-maintainer-mode | 13 +- bfd/ChangeLog | 6003 ++- bfd/ChangeLog-2007 | 3561 ++ bfd/ChangeLog-2008 | 3386 ++ bfd/Makefile.am | 1346 +- bfd/Makefile.in | 2012 +- bfd/acinclude.m4 | 2 + bfd/aclocal.m4 | 477 +- bfd/aix386-core.c | 2 +- bfd/aix5ppc-core.c | 13 +- bfd/aout-adobe.c | 3 +- bfd/aout-ns32k.c | 2 +- bfd/aout-sparcle.c | 2 +- bfd/aout-target.h | 5 +- bfd/aout-tic30.c | 5 +- bfd/aout0.c | 2 +- bfd/aout32.c | 3 +- bfd/aout64.c | 3 +- bfd/aoutx.h | 79 +- bfd/archive.c | 482 +- bfd/archive64.c | 6 +- bfd/archures.c | 44 +- bfd/bfd-in.h | 141 +- bfd/bfd-in2.h | 667 +- bfd/bfd.c | 250 +- bfd/bfd.m4 | 1 - bfd/bfdio.c | 115 +- bfd/bfdwin.c | 14 +- bfd/binary.c | 7 +- bfd/bout.c | 7 +- bfd/cache.c | 107 +- bfd/cf-i386lynx.c | 5 +- bfd/cf-sparclynx.c | 2 +- bfd/cisco-core.c | 2 +- bfd/coff-alpha.c | 21 +- bfd/coff-apollo.c | 4 +- bfd/coff-arm.c | 81 +- bfd/coff-aux.c | 7 +- bfd/coff-go32.c | 2 +- bfd/coff-h8300.c | 13 +- bfd/coff-h8500.c | 6 +- bfd/coff-i386.c | 6 +- bfd/coff-i860.c | 6 +- bfd/coff-i960.c | 17 +- bfd/coff-ia64.c | 11 +- bfd/coff-m68k.c | 6 +- bfd/coff-m88k.c | 7 +- bfd/coff-maxq.c | 6 +- bfd/coff-mcore.c | 32 +- bfd/coff-mips.c | 15 +- bfd/coff-or32.c | 7 +- bfd/coff-pmac.c | 2 +- bfd/coff-ppc.c | 44 +- bfd/coff-rs6000.c | 628 +- bfd/coff-sh.c | 24 +- bfd/coff-sparc.c | 4 +- bfd/coff-stgo32.c | 121 +- bfd/coff-svm68k.c | 2 +- bfd/coff-tic30.c | 6 +- bfd/coff-tic4x.c | 12 +- bfd/coff-tic54x.c | 7 +- bfd/coff-tic80.c | 7 +- bfd/coff-u68k.c | 2 +- bfd/coff-w65.c | 6 +- bfd/coff-we32k.c | 6 +- bfd/coff-x86_64.c | 11 +- bfd/coff-z80.c | 8 +- bfd/coff-z8k.c | 6 +- bfd/coff64-rs6000.c | 118 +- bfd/coffcode.h | 576 +- bfd/coffgen.c | 162 +- bfd/cofflink.c | 80 +- bfd/coffswap.h | 24 +- bfd/compress.c | 122 + bfd/config.bfd | 112 +- bfd/config.in | 69 +- bfd/configure | 21503 ++++----- bfd/configure.com | 210 +- bfd/configure.in | 231 +- bfd/cpu-alpha.c | 2 +- bfd/cpu-arc.c | 2 +- bfd/cpu-arm.c | 6 +- bfd/cpu-avr.c | 83 +- bfd/cpu-cr16c.c | 2 +- bfd/cpu-crx.c | 2 +- bfd/cpu-dlx.c | 2 +- bfd/cpu-fr30.c | 2 +- bfd/cpu-frv.c | 2 +- bfd/cpu-h8300.c | 2 +- bfd/cpu-hppa.c | 2 +- bfd/cpu-i386.c | 15 +- bfd/cpu-i860.c | 2 +- bfd/cpu-i960.c | 2 +- bfd/cpu-ia64-opc.c | 18 +- bfd/cpu-ia64.c | 2 +- bfd/cpu-ip2k.c | 2 +- bfd/cpu-iq2000.c | 2 +- bfd/cpu-l1om.c | 56 + bfd/cpu-lm32.c | 41 + bfd/cpu-m10200.c | 2 +- bfd/cpu-m10300.c | 2 +- bfd/cpu-m32c.c | 2 +- bfd/cpu-m32r.c | 2 +- bfd/cpu-m68hc11.c | 2 +- bfd/cpu-m68hc12.c | 2 +- bfd/cpu-m68k.c | 29 +- bfd/cpu-m88k.c | 2 +- bfd/cpu-mcore.c | 2 +- bfd/cpu-mep.c | 5 +- bfd/cpu-microblaze.c | 40 + bfd/cpu-mips.c | 16 +- bfd/cpu-mmix.c | 2 +- bfd/cpu-moxie.c | 40 + bfd/cpu-msp430.c | 2 +- bfd/cpu-openrisc.c | 2 +- bfd/cpu-or32.c | 2 +- bfd/cpu-pdp11.c | 2 +- bfd/cpu-pj.c | 3 +- bfd/{efi-app-x86_64.c => cpu-plugin.c} | 33 +- bfd/cpu-powerpc.c | 18 +- bfd/cpu-rs6000.c | 2 +- bfd/cpu-s390.c | 2 +- bfd/cpu-score.c | 68 +- bfd/cpu-sparc.c | 2 +- bfd/cpu-tic30.c | 2 +- bfd/cpu-tic4x.c | 2 +- bfd/cpu-tic54x.c | 2 +- bfd/cpu-tic80.c | 2 +- bfd/cpu-v850.c | 2 +- bfd/cpu-vax.c | 2 +- bfd/cpu-w65.c | 2 +- bfd/cpu-we32k.c | 2 +- bfd/cpu-xstormy16.c | 2 +- bfd/cpu-xtensa.c | 2 +- bfd/cpu-z8k.c | 2 +- bfd/demo64.c | 2 +- bfd/dep-in.sed | 14 +- bfd/doc/ChangeLog | 72 +- bfd/doc/Makefile.am | 32 +- bfd/doc/Makefile.in | 302 +- bfd/doc/archures.texi | 27 + bfd/doc/bfd.info | 3729 +- bfd/doc/bfd.texinfo | 10 +- bfd/doc/bfdint.texi | 6 +- bfd/doc/bfdio.texi | 13 + bfd/doc/bfdt.texi | 156 +- bfd/doc/bfdver.texi | 4 +- bfd/doc/chew.c | 37 +- bfd/doc/coffcode.texi | 79 +- bfd/doc/elf.texi | 13 - bfd/doc/fdl.texi | 442 +- bfd/doc/linker.texi | 39 +- bfd/doc/reloc.texi | 177 +- bfd/doc/section.texi | 80 +- bfd/doc/syms.texi | 60 +- bfd/doc/targets.texi | 8 +- bfd/dwarf1.c | 91 +- bfd/dwarf2.c | 810 +- bfd/ecoff.c | 130 +- bfd/ecofflink.c | 5 +- bfd/elf-attrs.c | 168 +- bfd/elf-bfd.h | 483 +- bfd/elf-eh-frame.c | 767 +- bfd/elf-hppa.h | 1172 +- bfd/elf-ifunc.c | 288 + bfd/elf-m10200.c | 2 +- bfd/elf-m10300.c | 1348 +- bfd/elf-strtab.c | 15 +- bfd/elf-vxworks.c | 150 +- bfd/elf-vxworks.h | 5 +- bfd/elf.c | 1833 +- bfd/elf32-arm.c | 5779 ++- bfd/elf32-avr.c | 86 +- bfd/elf32-bfin.c | 4490 +- bfd/elf32-cr16.c | 2069 +- bfd/elf32-cr16c.c | 6 +- bfd/elf32-cris.c | 1350 +- bfd/elf32-crx.c | 42 +- bfd/elf32-d10v.c | 9 +- bfd/elf32-dlx.c | 11 +- bfd/elf32-fr30.c | 27 +- bfd/elf32-frv.c | 53 +- bfd/elf32-h8300.c | 96 +- bfd/elf32-hppa.c | 188 +- bfd/elf32-hppa.h | 2 +- bfd/elf32-i370.c | 49 +- bfd/elf32-i386.c | 1854 +- bfd/elf32-iq2000.c | 62 +- bfd/elf32-lm32.c | 2899 ++ bfd/elf32-m32c.c | 52 +- bfd/elf32-m32r.c | 106 +- bfd/elf32-m68hc1x.c | 27 +- bfd/elf32-m68hc1x.h | 6 +- bfd/elf32-m68k.c | 2745 +- bfd/elf32-m88k.c | 2 +- bfd/elf32-mcore.c | 8 +- bfd/elf32-mep.c | 205 +- bfd/elf32-microblaze.c | 3059 ++ bfd/elf32-mips.c | 188 +- bfd/elf32-moxie.c | 393 + bfd/elf32-msp430.c | 6 +- bfd/elf32-mt.c | 8 +- bfd/elf32-openrisc.c | 10 +- bfd/elf32-ppc.c | 2958 +- bfd/elf32-ppc.h | 2 +- bfd/elf32-s390.c | 144 +- bfd/elf32-score.c | 2243 +- bfd/elf32-score.h | 152 + bfd/elf32-score7.c | 3947 ++ bfd/elf32-sh-relocs.h | 2 +- bfd/elf32-sh-symbian.c | 18 +- bfd/elf32-sh.c | 192 +- bfd/elf32-sh64-com.c | 2 +- bfd/elf32-sh64.c | 8 +- bfd/elf32-sh64.h | 2 +- bfd/elf32-sparc.c | 2 +- bfd/elf32-spu.c | 4622 +- bfd/elf32-spu.h | 97 +- bfd/elf32-v850.c | 14 +- bfd/elf32-vax.c | 177 +- bfd/elf32-xc16x.c | 4 +- bfd/elf32-xstormy16.c | 4 +- bfd/elf32-xtensa.c | 1582 +- bfd/elf32.c | 3 +- bfd/elf64-alpha.c | 108 +- bfd/elf64-hppa.c | 2410 +- bfd/elf64-hppa.h | 8 +- bfd/elf64-mips.c | 151 +- bfd/elf64-mmix.c | 19 +- bfd/elf64-ppc.c | 3239 +- bfd/elf64-ppc.h | 7 +- bfd/elf64-s390.c | 146 +- bfd/elf64-sh64.c | 70 +- bfd/elf64-sparc.c | 25 +- bfd/elf64-x86-64.c | 2065 +- bfd/elf64.c | 2 +- bfd/elfcode.h | 195 +- bfd/elfcore.h | 34 +- bfd/elflink.c | 2740 +- bfd/elfn32-mips.c | 120 +- bfd/elfxx-ia64.c | 1044 +- bfd/elfxx-mips.c | 4393 +- bfd/elfxx-mips.h | 21 +- bfd/elfxx-sparc.c | 184 +- bfd/elfxx-sparc.h | 6 +- bfd/elfxx-target.h | 55 +- bfd/epoc-pe-arm.c | 2 +- bfd/epoc-pei-arm.c | 2 +- bfd/format.c | 15 +- bfd/gen-aout.c | 2 +- bfd/hash.c | 58 +- bfd/host-aout.c | 2 +- bfd/hosts/alphavms.h | 16 +- bfd/hosts/delta68.h | 2 +- bfd/hosts/vaxbsd.h | 2 +- bfd/hosts/vaxlinux.h | 2 +- bfd/hp300bsd.c | 2 +- bfd/hp300hpux.c | 2 +- bfd/hpux-core.c | 5 +- bfd/i386bsd.c | 2 +- bfd/i386dynix.c | 2 +- bfd/i386freebsd.c | 3 +- bfd/i386linux.c | 12 +- bfd/i386lynx.c | 2 +- bfd/i386mach3.c | 2 +- bfd/i386msdos.c | 3 +- bfd/i386netbsd.c | 2 +- bfd/i386os9k.c | 3 +- bfd/ieee.c | 17 +- bfd/ihex.c | 18 +- bfd/init.c | 2 +- bfd/irix-core.c | 2 +- bfd/libaout.h | 34 +- bfd/libbfd-in.h | 8 +- bfd/libbfd.c | 70 +- bfd/libbfd.h | 101 +- bfd/libcoff-in.h | 22 +- bfd/libcoff.h | 40 +- bfd/libecoff.h | 10 +- bfd/libhppa.h | 2 +- bfd/libieee.h | 2 +- bfd/liboasys.h | 2 +- bfd/libpei.h | 29 +- bfd/libxcoff.h | 4 +- bfd/linker.c | 315 +- bfd/lynx-core.c | 2 +- bfd/m68k4knetbsd.c | 2 +- bfd/m68klinux.c | 12 +- bfd/m68knetbsd.c | 2 +- bfd/m88kmach3.c | 2 +- bfd/m88kopenbsd.c | 2 +- bfd/mach-o-i386.c | 293 + bfd/mach-o-target.c | 84 +- bfd/mach-o.c | 3115 +- bfd/mach-o.h | 543 +- bfd/makefile.vms | 62 +- bfd/merge.c | 39 +- bfd/mipsbsd.c | 2 +- bfd/mmo.c | 3 +- bfd/newsos3.c | 2 +- bfd/nlm-target.h | 3 +- bfd/nlm.c | 2 +- bfd/nlm32.c | 2 +- bfd/nlm64.c | 2 +- bfd/oasys.c | 11 +- bfd/opncls.c | 184 +- bfd/osf-core.c | 2 +- bfd/pc532-mach.c | 2 +- bfd/pdp11.c | 33 +- bfd/pe-arm-wince.c | 9 +- bfd/pe-arm.c | 2 +- bfd/pe-i386.c | 16 +- bfd/pe-mcore.c | 6 +- bfd/pe-mips.c | 13 +- bfd/pe-ppc.c | 7 +- bfd/pe-sh.c | 2 +- bfd/peXXigen.c | 370 +- bfd/pef.c | 9 +- bfd/pef.h | 4 +- bfd/pei-arm.c | 6 +- bfd/pei-i386.c | 19 +- bfd/{efi-app-ia64.c => pei-ia64.c} | 17 +- bfd/pei-mcore.c | 10 +- bfd/pei-mips.c | 6 +- bfd/pei-ppc.c | 10 +- bfd/pei-sh.c | 6 +- bfd/pei-x86_64.c | 480 +- bfd/peicode.h | 122 +- bfd/plugin.c | 494 + bfd/{efi-app-ia32.c => plugin.h} | 31 +- bfd/po/.cvsignore | 1 - bfd/po/Make-in | 3 +- bfd/po/SRC-POTFILES.in | 102 +- bfd/po/bfd.pot | 2580 +- bfd/po/es.gmo | Bin 87772 -> 109357 bytes bfd/po/es.po | 3424 +- bfd/po/fi.gmo | Bin 0 -> 111132 bytes bfd/po/fi.po | 4258 ++ bfd/po/id.gmo | Bin 0 -> 97793 bytes bfd/po/id.po | 3837 ++ bfd/po/ru.gmo | Bin 0 -> 128466 bytes bfd/po/ru.po | 3840 ++ bfd/po/vi.gmo | Bin 39617 -> 118338 bytes bfd/po/vi.po | 4260 +- bfd/ppcboot.c | 17 +- bfd/ptrace-core.c | 2 +- bfd/reloc.c | 285 +- bfd/reloc16.c | 10 +- bfd/rs6000-core.c | 82 +- bfd/section.c | 97 +- bfd/simple.c | 14 +- bfd/som.c | 107 +- bfd/som.h | 3 +- bfd/sparclinux.c | 12 +- bfd/sparcnetbsd.c | 2 +- bfd/srec.c | 66 +- bfd/stab-syms.c | 2 +- bfd/stabs.c | 20 +- bfd/sunos.c | 13 +- bfd/syms.c | 121 +- bfd/sysdep.h | 2 +- bfd/targets.c | 46 +- bfd/tekhex.c | 47 +- bfd/ticoff.h | 17 +- bfd/vax1knetbsd.c | 2 +- bfd/vaxbsd.c | 2 +- bfd/vaxnetbsd.c | 3 +- bfd/verilog.c | 377 + bfd/versados.c | 3 +- bfd/version.h | 2 +- bfd/vms-gsd.c | 347 +- bfd/vms-hdr.c | 1096 +- bfd/vms-misc.c | 517 +- bfd/vms-tir.c | 1567 +- bfd/vms.c | 828 +- bfd/vms.h | 635 +- bfd/warning.m4 | 10 + bfd/xcoff-target.h | 3 +- bfd/xcofflink.c | 3085 +- bfd/xsym.c | 14 +- bfd/xtensa-isa.c | 20 +- bfd/xtensa-modules.c | 4982 ++- binutils/BRANCHES | 2 + binutils/ChangeLog | 1379 +- binutils/ChangeLog-2007 | 1165 + binutils/ChangeLog-2008 | 874 + binutils/MAINTAINERS | 29 +- binutils/Makefile.am | 554 +- binutils/Makefile.in | 986 +- binutils/NEWS | 73 + binutils/README | 13 +- binutils/aclocal.m4 | 477 +- binutils/addr2line.c | 23 +- binutils/ar.c | 128 +- binutils/arlex.c | 110 +- binutils/arlex.l | 2 +- binutils/arparse.c | 8 +- binutils/arparse.h | 2 +- binutils/arparse.y | 2 +- binutils/arsup.c | 3 +- binutils/arsup.h | 2 +- binutils/bin2c.c | 27 +- binutils/binemul.c | 57 +- binutils/binemul.h | 9 +- binutils/bucomm.c | 75 +- binutils/bucomm.h | 8 +- binutils/budbg.h | 5 +- binutils/coffgrok.c | 2 +- binutils/coffgrok.h | 2 +- binutils/config.in | 49 +- binutils/configure | 14512 +++---- binutils/configure.com | 109 +- binutils/configure.in | 94 +- binutils/configure.tgt | 2 +- binutils/cxxfilt.c | 4 +- binutils/debug.c | 182 +- binutils/debug.h | 12 +- binutils/deflex.c | 108 +- binutils/defparse.c | 8 +- binutils/defparse.h | 2 +- binutils/defparse.y | 2 +- binutils/dep-in.sed | 13 +- binutils/dlltool.c | 1023 +- binutils/dlltool.h | 2 +- binutils/doc/Makefile.am | 21 - binutils/doc/Makefile.in | 356 +- binutils/doc/addr2line.1 | 30 +- binutils/doc/ar.1 | 61 +- binutils/doc/binutils.info | 1146 +- binutils/doc/binutils.texi | 535 +- binutils/doc/cxxfilt.man | 42 +- binutils/doc/dlltool.1 | 85 +- binutils/doc/fdl.texi | 442 +- binutils/doc/nlmconv.1 | 28 +- binutils/doc/nm.1 | 112 +- binutils/doc/objcopy.1 | 114 +- binutils/doc/objdump.1 | 254 +- binutils/doc/ranlib.1 | 33 +- binutils/doc/readelf.1 | 78 +- binutils/doc/size.1 | 33 +- binutils/doc/strings.1 | 35 +- binutils/doc/strip.1 | 40 +- binutils/doc/windmc.1 | 33 +- binutils/doc/windres.1 | 28 +- binutils/dwarf.c | 1956 +- binutils/dwarf.h | 22 +- binutils/embedspu.sh | 15 +- binutils/emul_aix.c | 33 +- binutils/emul_vanilla.c | 2 +- binutils/ieee.c | 77 +- binutils/makefile.vms | 74 + binutils/makefile.vms-in | 98 - binutils/mcparse.c | 6 +- binutils/mcparse.h | 2 +- binutils/nlmconv.c | 100 +- binutils/nlmconv.h | 2 +- binutils/nlmheader.c | 8 +- binutils/nlmheader.h | 2 +- binutils/nlmheader.y | 2 +- binutils/nm.c | 58 +- binutils/objcopy.c | 913 +- binutils/objdump.c | 530 +- binutils/po/.cvsignore | 1 - binutils/po/Make-in | 3 +- binutils/po/binutils.pot | 2684 +- binutils/po/da.gmo | Bin 80846 -> 67752 bytes binutils/po/da.po | 6835 +-- binutils/po/es.gmo | Bin 137588 -> 163294 bytes binutils/po/es.po | 3894 +- binutils/po/id.gmo | Bin 0 -> 146604 bytes binutils/po/id.po | 6248 +++ binutils/po/ru.gmo | Bin 130197 -> 173223 bytes binutils/po/ru.po | 4859 ++- binutils/po/sk.gmo | Bin 0 -> 149635 bytes binutils/po/sk.po | 6306 +++ binutils/po/sv.gmo | Bin 103077 -> 113208 bytes binutils/po/sv.po | 4694 +- binutils/po/vi.gmo | Bin 156541 -> 172787 bytes binutils/po/vi.po | 3532 +- binutils/prdbg.c | 38 +- binutils/ranlib.sh | 2 +- binutils/rclex.c | 26 +- binutils/rcparse.c | 1265 +- binutils/rcparse.h | 2 +- binutils/rcparse.y | 17 +- binutils/rdcoff.c | 2 +- binutils/rddbg.c | 9 +- binutils/readelf.c | 4841 ++- binutils/rename.c | 14 +- binutils/resbin.c | 2 +- binutils/rescoff.c | 11 +- binutils/resrc.c | 64 +- binutils/resres.c | 14 +- binutils/size.c | 19 +- binutils/srconv.c | 18 +- binutils/stabs.c | 74 +- binutils/strings.c | 136 +- binutils/sysdep.h | 43 +- binutils/sysdump.c | 18 +- binutils/sysinfo.c | 6 +- binutils/sysinfo.h | 2 +- binutils/syslex.c | 108 +- binutils/testsuite/ChangeLog | 242 + binutils/testsuite/binutils-all/ar.exp | 157 +- .../testsuite/binutils-all/arm/objdump.exp | 4 +- .../testsuite/binutils-all/arm/thumb2-cond.s | 12 +- .../testsuite/binutils-all/bfin/objdump.exp | 53 + .../binutils-all/bfin/unknown-mode.s | 8 + binutils/testsuite/binutils-all/copy-4.d | 9 + binutils/testsuite/binutils-all/dlltool.exp | 2 +- binutils/testsuite/binutils-all/dumptest.s | 2 + .../testsuite/binutils-all/dw2-compressed.S | 218 + binutils/testsuite/binutils-all/group-2.s | 8 + binutils/testsuite/binutils-all/group-3.s | 8 + binutils/testsuite/binutils-all/group-4.s | 6 + binutils/testsuite/binutils-all/group.s | 4 +- .../testsuite/binutils-all/hppa/objdump.exp | 2 +- .../binutils-all/localize-hidden-1.s | 24 +- .../binutils-all/localize-hidden-2.s | 2 +- .../testsuite/binutils-all/m68k/objdump.exp | 2 +- binutils/testsuite/binutils-all/nm.exp | 2 +- binutils/testsuite/binutils-all/objcopy.exp | 99 +- binutils/testsuite/binutils-all/objdump.W | 129 + binutils/testsuite/binutils-all/objdump.exp | 53 +- binutils/testsuite/binutils-all/objdump.s | 9 + binutils/testsuite/binutils-all/readelf.exp | 122 +- binutils/testsuite/binutils-all/readelf.ss | 2 +- binutils/testsuite/binutils-all/readelf.ss-64 | 2 +- .../testsuite/binutils-all/readelf.ss-mips | 2 +- .../testsuite/binutils-all/readelf.ss-tmips | 2 +- binutils/testsuite/binutils-all/readelf.wa | 24 + binutils/testsuite/binutils-all/size.exp | 3 +- binutils/testsuite/binutils-all/strip-10.d | 8 + binutils/testsuite/binutils-all/strip-4.d | 11 + binutils/testsuite/binutils-all/strip-5.d | 18 + binutils/testsuite/binutils-all/strip-6.d | 11 + binutils/testsuite/binutils-all/strip-7.d | 18 + binutils/testsuite/binutils-all/strip-8.d | 11 + binutils/testsuite/binutils-all/strip-9.d | 18 + .../testsuite/binutils-all/testranges-ia64.d | 15 + .../testsuite/binutils-all/testranges-ia64.s | 57 + binutils/testsuite/binutils-all/testranges.d | 15 + binutils/testsuite/binutils-all/testranges.s | 61 + binutils/testsuite/binutils-all/unique.s | 4 + .../testsuite/binutils-all/vax/objdump.exp | 2 +- .../testsuite/binutils-all/windres/msupdate | 2 +- .../binutils-all/windres/windres.exp | 20 +- binutils/testsuite/config/default.exp | 12 +- binutils/testsuite/config/hppa.sed | 2 +- binutils/testsuite/lib/utils-lib.exp | 19 +- binutils/unwind-ia64.c | 2 +- binutils/unwind-ia64.h | 2 +- binutils/version.c | 4 +- binutils/windmc.c | 47 +- binutils/windres.c | 83 +- binutils/winduni.c | 38 +- binutils/winduni.h | 2 +- binutils/wrstabs.c | 6 +- compile | 17 +- config-ml.in | 82 +- config.guess | 139 +- config.rpath | 8 +- config.sub | 118 +- config/ChangeLog | 261 + config/acinclude.m4 | 1277 - config/acx.m4 | 28 +- config/bootstrap-O1.mk | 1 + config/bootstrap-O3.mk | 1 + config/bootstrap-debug.mk | 2 + config/confsubdir.m4 | 127 - config/extensions.m4 | 79 + config/futex.m4 | 64 + config/lead-dot.m4 | 9 +- config/mh-armpic | 1 - config/mh-cygwin | 3 + config/mh-elfalphapic | 1 - config/mh-i370pic | 1 - config/mh-ia64pic | 1 - config/mh-m68kpic | 1 - config/mh-mingw | 6 + config/mh-pa | 4 + config/mh-pa-hpux10 | 4 + config/mh-papic | 1 - config/mh-ppc-aix | 13 +- config/mh-ppc-darwin | 3 +- config/mh-ppcpic | 1 - config/mh-s390pic | 1 - config/mh-sparcpic | 1 - config/mh-x86pic | 1 - config/mt-gnu | 2 +- config/mt-mips-elfoabi | 1 + config/mt-mips-gnu | 2 + config/mt-mips16-compat | 5 + config/mt-sde | 10 + config/mt-spu | 6 +- config/multi.m4 | 7 +- config/no-executables.m4 | 12 +- config/override.m4 | 274 + config/plugins.m4 | 11 + config/proginstall.m4 | 98 + config/tcl.m4 | 3246 ++ config/tls.m4 | 62 +- config/unwind_ipinfo.m4 | 47 +- config/warnings.m4 | 9 +- configure | 10108 +++-- configure.ac | 748 +- cpu/ChangeLog | 38 + cpu/cris.cpu | 18 +- cpu/frv.cpu | 18 +- cpu/frv.opc | 3 +- cpu/iq10.cpu | 2 +- cpu/iq2000.cpu | 2 +- cpu/iq2000.opc | 2 +- cpu/iq2000m.cpu | 2 +- cpu/lm32.cpu | 932 + cpu/lm32.opc | 235 + cpu/m32c.cpu | 2 +- cpu/m32c.opc | 4 +- cpu/m32r.cpu | 3 +- cpu/m32r.opc | 2 +- cpu/mt.cpu | 2 +- cpu/mt.opc | 4 +- cpu/sh.cpu | 2 +- cpu/sh.opc | 2 +- cpu/sh64-compact.cpu | 2 +- cpu/sh64-media.cpu | 2 +- cpu/simplify.inc | 74 +- cpu/xc16x.cpu | 2 +- cpu/xc16x.opc | 2 +- depcomp | 175 +- elfcpp/ChangeLog | 114 + elfcpp/README | 9 + elfcpp/arm.h | 204 + elfcpp/dwarf.h | 408 + elfcpp/elfcpp.h | 1796 + elfcpp/elfcpp_file.h | 686 + elfcpp/elfcpp_internal.h | 240 + elfcpp/elfcpp_swap.h | 435 + elfcpp/i386.h | 97 + elfcpp/powerpc.h | 191 + elfcpp/sparc.h | 169 + elfcpp/x86_64.h | 100 + etc/ChangeLog | 23 + etc/Makefile.in | 12 +- etc/add-log.el | 573 - etc/add-log.vi | 11 - etc/configure | 2929 +- etc/configure.in | 17 +- etc/configure.info | 120 +- etc/fdl.texi | 373 +- etc/make-stds.texi | 372 +- etc/standards.info | 2050 +- etc/standards.texi | 1083 +- gas/ChangeLog | 3124 +- gas/ChangeLog-0001 | 10 - gas/ChangeLog-0203 | 10 +- gas/ChangeLog-2005 | 33 +- gas/ChangeLog-2006 | 8 +- gas/ChangeLog-2007 | 2638 ++ gas/ChangeLog-2008 | 1877 + gas/Makefile.am | 1639 +- gas/Makefile.in | 3377 +- gas/NEWS | 56 + gas/acinclude.m4 | 38 + gas/aclocal.m4 | 476 +- gas/app.c | 66 +- gas/as.c | 57 +- gas/as.h | 49 +- gas/atof-generic.c | 4 +- gas/bfin-lex.c | 1051 +- gas/bfin-parse.c | 3422 +- gas/bfin-parse.h | 4 +- gas/bit_fix.h | 3 +- gas/cgen.c | 12 +- gas/cgen.h | 2 +- gas/cond.c | 2 +- gas/config.in | 75 +- gas/config/aout_gnu.h | 2 +- gas/config/atof-ieee.c | 125 +- gas/config/atof-vax.c | 8 +- gas/config/bfin-aux.h | 305 +- gas/config/bfin-defs.h | 37 +- gas/config/bfin-lex.l | 17 +- gas/config/bfin-parse.y | 618 +- gas/config/itbl-mips.h | 2 +- gas/config/m68k-parse.h | 14 +- gas/config/m68k-parse.y | 32 +- gas/config/obj-aout.c | 4 +- gas/config/obj-coff-seh.c | 1337 + gas/config/obj-coff-seh.h | 234 + gas/config/obj-coff.c | 106 +- gas/config/obj-coff.h | 24 +- gas/config/obj-ecoff.c | 4 +- gas/config/obj-elf.c | 277 +- gas/config/obj-elf.h | 8 +- gas/config/obj-evax.c | 454 +- gas/config/obj-evax.h | 36 +- gas/config/obj-fdpicelf.c | 1 + gas/config/obj-fdpicelf.h | 2 + gas/config/obj-macho.c | 57 + gas/config/obj-macho.h | 39 + gas/config/obj-multi.c | 2 +- gas/config/obj-multi.h | 2 +- gas/config/obj-som.c | 18 +- gas/config/tc-alpha.c | 1198 +- gas/config/tc-alpha.h | 16 +- gas/config/tc-arc.c | 184 +- gas/config/tc-arm.c | 4514 +- gas/config/tc-arm.h | 94 +- gas/config/tc-avr.c | 317 +- gas/config/tc-bfin.c | 1419 +- gas/config/tc-bfin.h | 22 +- gas/config/tc-cr16.c | 1020 +- gas/config/tc-cr16.h | 10 +- gas/config/tc-cris.c | 260 +- gas/config/tc-cris.h | 7 +- gas/config/tc-crx.c | 63 +- gas/config/tc-crx.h | 2 +- gas/config/tc-d10v.c | 52 +- gas/config/tc-d10v.h | 12 +- gas/config/tc-d30v.c | 54 +- gas/config/tc-d30v.h | 4 +- gas/config/tc-dlx.c | 84 +- gas/config/tc-fr30.c | 54 +- gas/config/tc-fr30.h | 10 +- gas/config/tc-frv.c | 256 +- gas/config/tc-frv.h | 20 +- gas/config/tc-generic.c | 2 +- gas/config/tc-generic.h | 3 +- gas/config/tc-h8300.c | 124 +- gas/config/tc-h8300.h | 4 +- gas/config/tc-hppa.c | 311 +- gas/config/tc-hppa.h | 41 +- gas/config/tc-i370.c | 130 +- gas/config/tc-i386-intel.c | 850 + gas/config/tc-i386.c | 12843 +++--- gas/config/tc-i386.h | 182 +- gas/config/tc-i860.c | 64 +- gas/config/tc-i860.h | 2 +- gas/config/tc-i960.c | 73 +- gas/config/tc-i960.h | 14 +- gas/config/tc-ia64.c | 1951 +- gas/config/tc-ia64.h | 71 +- gas/config/tc-ip2k.c | 66 +- gas/config/tc-ip2k.h | 4 +- gas/config/tc-iq2000.c | 61 +- gas/config/tc-lm32.c | 419 + gas/config/tc-lm32.h | 50 + gas/config/tc-m32c.c | 65 +- gas/config/tc-m32c.h | 27 +- gas/config/tc-m32r.c | 74 +- gas/config/tc-m32r.h | 4 +- gas/config/tc-m68851.h | 2 +- gas/config/tc-m68hc11.c | 98 +- gas/config/tc-m68k.c | 519 +- gas/config/tc-m68k.h | 2 +- gas/config/tc-maxq.c | 66 +- gas/config/tc-maxq.h | 2 +- gas/config/tc-mcore.c | 96 +- gas/config/tc-mep.c | 502 +- gas/config/tc-mep.h | 16 +- gas/config/tc-microblaze.c | 2370 + gas/config/tc-microblaze.h | 114 + gas/config/tc-mips.c | 1292 +- gas/config/tc-mips.h | 16 +- gas/config/tc-mmix.c | 131 +- gas/config/tc-mmix.h | 6 +- gas/config/tc-mn10200.c | 37 +- gas/config/tc-mn10300.c | 1142 +- gas/config/tc-mn10300.h | 40 +- gas/config/tc-moxie.c | 784 + gas/config/tc-moxie.h | 47 + gas/config/tc-msp430.c | 85 +- gas/config/tc-mt.c | 55 +- gas/config/tc-ns32k.c | 44 +- gas/config/tc-openrisc.c | 47 +- gas/config/tc-or32.c | 72 +- gas/config/tc-pdp11.c | 100 +- gas/config/tc-pj.c | 66 +- gas/config/tc-ppc.c | 966 +- gas/config/tc-ppc.h | 33 +- gas/config/tc-s390.c | 268 +- gas/config/tc-s390.h | 18 +- gas/config/tc-score.c | 9044 ++-- gas/config/tc-score.h | 11 +- gas/config/tc-score7.c | 6994 +++ gas/config/tc-sh.c | 92 +- gas/config/tc-sh.h | 25 +- gas/config/tc-sh64.c | 15 +- gas/config/tc-sh64.h | 11 +- gas/config/tc-sparc.c | 332 +- gas/config/tc-sparc.h | 24 +- gas/config/tc-spu.c | 281 +- gas/config/tc-spu.h | 8 +- gas/config/tc-tic30.c | 115 +- gas/config/tc-tic4x.c | 482 +- gas/config/tc-tic4x.h | 12 +- gas/config/tc-tic54x.c | 717 +- gas/config/tc-tic54x.h | 10 +- gas/config/tc-v850.c | 46 +- gas/config/tc-vax.c | 52 +- gas/config/tc-xc16x.c | 67 +- gas/config/tc-xstormy16.c | 64 +- gas/config/tc-xtensa.c | 1286 +- gas/config/tc-xtensa.h | 28 +- gas/config/tc-z80.c | 9 +- gas/config/tc-z80.h | 2 +- gas/config/tc-z8k.c | 64 +- gas/config/te-386bsd.h | 2 +- gas/config/te-armeabi.h | 6 +- gas/config/te-armlinuxeabi.h | 6 +- gas/config/te-freebsd.h | 2 +- gas/config/te-gnu.h | 2 +- gas/config/te-go32.h | 4 +- gas/config/te-hppa.h | 2 +- gas/config/te-irix.h | 2 +- gas/config/te-nbsd.h | 2 +- gas/config/te-netware.h | 2 +- gas/config/te-pep.h | 2 +- gas/config/te-solaris.h | 30 + gas/config/te-sparcaout.h | 2 +- gas/config/te-sun3.h | 2 +- gas/config/te-symbian.h | 2 +- gas/config/te-tmips.h | 2 +- gas/config/te-vms.c | 347 + gas/config/te-vms.h | 41 + gas/config/vax-inst.h | 3 +- gas/config/xtensa-istack.h | 18 +- gas/config/xtensa-relax.c | 44 +- gas/config/xtensa-relax.h | 16 +- gas/configure | 18704 ++++---- gas/configure.com | 264 + gas/configure.in | 68 +- gas/configure.tgt | 50 +- gas/debug.c | 2 +- gas/dep-in.sed | 13 +- gas/depend.c | 3 +- gas/doc/Makefile.am | 25 +- gas/doc/Makefile.in | 359 +- gas/doc/all.texi | 8 +- gas/doc/as.1 | 125 +- gas/doc/as.info | 6129 ++- gas/doc/as.texinfo | 860 +- gas/doc/asconfig.texi | 8 +- gas/doc/c-alpha.texi | 11 +- gas/doc/c-arc.texi | 4 +- gas/doc/c-arm.texi | 615 +- gas/doc/c-avr.texi | 60 +- gas/doc/c-bfin.texi | 70 +- gas/doc/c-cr16.texi | 14 +- gas/doc/c-h8300.texi | 16 +- gas/doc/c-i386.texi | 167 +- gas/doc/c-i960.texi | 2 +- gas/doc/c-lm32.texi | 215 + gas/doc/c-m32c.texi | 11 +- gas/doc/c-m32r.texi | 2 +- gas/doc/c-m68hc11.texi | 2 +- gas/doc/c-m68k.texi | 2 +- gas/doc/c-microblaze.texi | 74 + gas/doc/c-mips.texi | 83 +- gas/doc/c-mmix.texi | 2 +- gas/doc/c-msp430.texi | 2 +- gas/doc/c-pdp11.texi | 2 +- gas/doc/c-ppc.texi | 22 +- gas/doc/c-s390.texi | 864 + gas/doc/c-score.texi | 142 + gas/doc/c-sh.texi | 5 +- gas/doc/c-sh64.texi | 5 +- gas/doc/c-sparc.texi | 626 +- gas/doc/c-tic54x.texi | 2 +- gas/doc/c-v850.texi | 2 +- gas/doc/c-xtensa.texi | 17 +- gas/doc/fdl.texi | 443 +- gas/doc/internals.texi | 82 +- gas/dw2gencfi.c | 599 +- gas/dw2gencfi.h | 4 +- gas/dwarf2dbg.c | 506 +- gas/dwarf2dbg.h | 14 +- gas/ecoff.c | 10 +- gas/ecoff.h | 2 +- gas/ehopt.c | 100 +- gas/emul-target.h | 2 +- gas/emul.h | 2 +- gas/expr.c | 177 +- gas/expr.h | 3 +- gas/flonum-copy.c | 2 +- gas/flonum-konst.c | 2 +- gas/flonum.h | 2 +- gas/frags.c | 12 +- gas/hash.c | 33 +- gas/hash.h | 18 +- gas/input-file.c | 4 +- gas/input-scrub.c | 22 +- gas/itbl-lex.c | 108 +- gas/itbl-ops.c | 15 +- gas/itbl-ops.h | 3 +- gas/itbl-parse.c | 6 +- gas/itbl-parse.h | 2 +- gas/listing.c | 471 +- gas/listing.h | 11 +- gas/m68k-parse.c | 36 +- gas/macro.c | 22 +- gas/macro.h | 16 +- gas/makefile.vms | 61 + gas/messages.c | 8 +- gas/output-file.h | 2 +- gas/po/.cvsignore | 1 - gas/po/Make-in | 3 +- gas/po/POTFILES.in | 69 +- gas/po/es.gmo | Bin 305962 -> 403734 bytes gas/po/es.po | 13457 ++++-- gas/po/fr.gmo | Bin 288175 -> 228353 bytes gas/po/fr.po | 21291 +++++---- gas/po/gas.pot | 11753 +++-- gas/po/id.gmo | Bin 0 -> 362768 bytes gas/po/id.po | 15310 +++++++ gas/po/rw.gmo | Bin 438 -> 396 bytes gas/po/rw.po | 17475 +++++++- gas/po/tr.gmo | Bin 254790 -> 220920 bytes gas/po/tr.po | 21503 +++++---- gas/read.c | 398 +- gas/read.h | 5 +- gas/remap.c | 2 +- gas/sb.c | 4 +- gas/sb.h | 3 +- gas/stabs.c | 14 +- gas/struc-symbol.h | 2 +- gas/subsegs.c | 12 +- gas/subsegs.h | 2 +- gas/symbols.c | 108 +- gas/symbols.h | 2 +- gas/tc.h | 6 +- gas/testsuite/ChangeLog | 1736 +- gas/testsuite/ChangeLog-2005 | 8 +- gas/testsuite/ChangeLog-2007 | 1348 + gas/testsuite/ChangeLog-2008 | 1357 + gas/testsuite/ChangeLog-9303 | 24 + gas/testsuite/gas/all/align.d | 1 + gas/testsuite/gas/all/gas.exp | 91 +- gas/testsuite/gas/all/incbin.d | 1 + gas/testsuite/gas/all/itbl-test.c | 2 +- gas/testsuite/gas/all/p2425.s | 4 +- gas/testsuite/gas/all/string.d | 11 + gas/testsuite/gas/all/string.s | 11 + gas/testsuite/gas/all/test-example.c | 2 +- gas/testsuite/gas/all/test-gen.c | 2 +- gas/testsuite/gas/all/weakref1.s | 2 +- gas/testsuite/gas/arm/abs12.d | 2 +- gas/testsuite/gas/arm/adr-invalid.d | 2 + gas/testsuite/gas/arm/adr-invalid.l | 5 + gas/testsuite/gas/arm/adr-invalid.s | 12 + gas/testsuite/gas/arm/adrl.d | 18 +- gas/testsuite/gas/arm/align.d | 26 + gas/testsuite/gas/arm/align.s | 18 + gas/testsuite/gas/arm/align64.d | 69 + gas/testsuite/gas/arm/align64.s | 12 + gas/testsuite/gas/arm/arch4t-eabi.d | 39 + gas/testsuite/gas/arm/arch4t.d | 16 +- gas/testsuite/gas/arm/arch6zk.d | 13 +- gas/testsuite/gas/arm/arch6zk.s | 7 +- gas/testsuite/gas/arm/arch7.d | 6 +- gas/testsuite/gas/arm/archv6m.d | 18 + gas/testsuite/gas/arm/archv6m.s | 20 + gas/testsuite/gas/arm/archv6t2.d | 12 +- gas/testsuite/gas/arm/arm-it-auto-2.d | 15 + gas/testsuite/gas/arm/arm-it-auto-2.s | 8 + gas/testsuite/gas/arm/arm-it-auto-3.d | 15 + gas/testsuite/gas/arm/arm-it-auto-3.s | 10 + gas/testsuite/gas/arm/arm-it-auto.d | 81 + gas/testsuite/gas/arm/arm-it-auto.s | 110 + gas/testsuite/gas/arm/arm-it-bad-2.d | 4 + gas/testsuite/gas/arm/arm-it-bad-2.l | 3 + gas/testsuite/gas/arm/arm-it-bad-2.s | 9 + gas/testsuite/gas/arm/arm-it-bad-3.d | 3 + gas/testsuite/gas/arm/arm-it-bad-3.l | 3 + gas/testsuite/gas/arm/arm-it-bad-3.s | 6 + gas/testsuite/gas/arm/arm-it-bad.d | 3 + gas/testsuite/gas/arm/arm-it-bad.l | 3 + gas/testsuite/gas/arm/arm-it-bad.s | 10 + gas/testsuite/gas/arm/arm-it.d | 2 +- gas/testsuite/gas/arm/arm3.d | 2 +- gas/testsuite/gas/arm/arm7dm.d | 8 +- gas/testsuite/gas/arm/arm7t.d | 4 +- gas/testsuite/gas/arm/attr-cpu-directive.d | 14 + gas/testsuite/gas/arm/attr-cpu-directive.s | 1 + gas/testsuite/gas/arm/attr-default.d | 11 + gas/testsuite/gas/arm/attr-march-all.d | 14 + gas/testsuite/gas/arm/attr-march-armv1.d | 12 + gas/testsuite/gas/arm/attr-march-armv2.d | 12 + gas/testsuite/gas/arm/attr-march-armv2a.d | 12 + gas/testsuite/gas/arm/attr-march-armv2s.d | 12 + gas/testsuite/gas/arm/attr-march-armv3.d | 12 + gas/testsuite/gas/arm/attr-march-armv3m.d | 12 + gas/testsuite/gas/arm/attr-march-armv4.d | 12 + gas/testsuite/gas/arm/attr-march-armv4t.d | 13 + gas/testsuite/gas/arm/attr-march-armv4txm.d | 13 + gas/testsuite/gas/arm/attr-march-armv4xm.d | 12 + gas/testsuite/gas/arm/attr-march-armv5.d | 12 + gas/testsuite/gas/arm/attr-march-armv5t.d | 13 + gas/testsuite/gas/arm/attr-march-armv5te.d | 13 + gas/testsuite/gas/arm/attr-march-armv5tej.d | 13 + gas/testsuite/gas/arm/attr-march-armv5texp.d | 13 + gas/testsuite/gas/arm/attr-march-armv5txm.d | 13 + gas/testsuite/gas/arm/attr-march-armv6-m.d | 13 + gas/testsuite/gas/arm/attr-march-armv6.d | 13 + gas/testsuite/gas/arm/attr-march-armv6j.d | 13 + gas/testsuite/gas/arm/attr-march-armv6k.d | 13 + gas/testsuite/gas/arm/attr-march-armv6kt2.d | 13 + gas/testsuite/gas/arm/attr-march-armv6t2.d | 13 + gas/testsuite/gas/arm/attr-march-armv6z.d | 13 + gas/testsuite/gas/arm/attr-march-armv6zk.d | 13 + gas/testsuite/gas/arm/attr-march-armv6zkt2.d | 13 + gas/testsuite/gas/arm/attr-march-armv6zt2.d | 13 + gas/testsuite/gas/arm/attr-march-armv7-a.d | 14 + gas/testsuite/gas/arm/attr-march-armv7-m.d | 13 + gas/testsuite/gas/arm/attr-march-armv7-r.d | 14 + gas/testsuite/gas/arm/attr-march-armv7.d | 12 + gas/testsuite/gas/arm/attr-march-armv7a.d | 14 + gas/testsuite/gas/arm/attr-march-armv7m.d | 13 + gas/testsuite/gas/arm/attr-march-armv7r.d | 14 + gas/testsuite/gas/arm/attr-march-iwmmxt.d | 14 + gas/testsuite/gas/arm/attr-march-iwmmxt2.d | 14 + gas/testsuite/gas/arm/attr-march-xscale.d | 13 + gas/testsuite/gas/arm/attr-mcpu.d | 16 + gas/testsuite/gas/arm/attr-mfpu-arm1020e.d | 12 + gas/testsuite/gas/arm/attr-mfpu-arm1020t.d | 12 + gas/testsuite/gas/arm/attr-mfpu-arm1136jf-s.d | 12 + gas/testsuite/gas/arm/attr-mfpu-arm1136jfs.d | 12 + gas/testsuite/gas/arm/attr-mfpu-arm7500fe.d | 11 + gas/testsuite/gas/arm/attr-mfpu-fpa.d | 11 + gas/testsuite/gas/arm/attr-mfpu-fpa10.d | 11 + gas/testsuite/gas/arm/attr-mfpu-fpa11.d | 11 + gas/testsuite/gas/arm/attr-mfpu-fpe.d | 11 + gas/testsuite/gas/arm/attr-mfpu-fpe2.d | 11 + gas/testsuite/gas/arm/attr-mfpu-fpe3.d | 11 + gas/testsuite/gas/arm/attr-mfpu-maverick.d | 11 + gas/testsuite/gas/arm/attr-mfpu-neon-fp16.d | 14 + gas/testsuite/gas/arm/attr-mfpu-neon.d | 13 + gas/testsuite/gas/arm/attr-mfpu-softfpa.d | 11 + gas/testsuite/gas/arm/attr-mfpu-softvfp+vfp.d | 12 + gas/testsuite/gas/arm/attr-mfpu-softvfp.d | 11 + gas/testsuite/gas/arm/attr-mfpu-vfp.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfp10-r0.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfp10.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfp3.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfp9.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfpv2.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfpv3-d16.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfpv3.d | 12 + gas/testsuite/gas/arm/attr-mfpu-vfpxd.d | 12 + gas/testsuite/gas/arm/attr-order.d | 19 + gas/testsuite/gas/arm/attr-order.s | 9 + .../gas/arm/attr-override-cpu-directive.d | 12 + .../gas/arm/attr-override-cpu-directive.s | 5 + gas/testsuite/gas/arm/attr-override-mcpu.d | 13 + gas/testsuite/gas/arm/attr-override-mcpu.s | 2 + gas/testsuite/gas/arm/attr-syntax.d | 4 + gas/testsuite/gas/arm/attr-syntax.s | 6 + gas/testsuite/gas/arm/backslash-at.d | 18 +- gas/testsuite/gas/arm/bl-local-v4t.d | 19 + gas/testsuite/gas/arm/bl-local-v4t.s | 25 + gas/testsuite/gas/arm/blank.s | 1 + gas/testsuite/gas/arm/blx-local-thumb.l | 2 + gas/testsuite/gas/arm/blx-local.d | 34 +- gas/testsuite/gas/arm/blx-local.l | 3 + gas/testsuite/gas/arm/blx-local.s | 46 +- gas/testsuite/gas/arm/copro.d | 20 +- gas/testsuite/gas/arm/copro.s | 2 +- gas/testsuite/gas/arm/eabi_attr_1.d | 1 + gas/testsuite/gas/arm/el_segundo.d | 2 +- gas/testsuite/gas/arm/float.d | 20 +- gas/testsuite/gas/arm/fp-save.d | 9 + gas/testsuite/gas/arm/fp-save.s | 4 + gas/testsuite/gas/arm/fpa-mem.d | 12 +- .../gas/arm/group-reloc-alu-encoding-bad.d | 2 +- gas/testsuite/gas/arm/group-reloc-alu.d | 4 +- .../gas/arm/group-reloc-ldc-encoding-bad.d | 2 +- gas/testsuite/gas/arm/group-reloc-ldc.d | 722 +- .../gas/arm/group-reloc-ldr-encoding-bad.d | 2 +- gas/testsuite/gas/arm/group-reloc-ldr.d | 196 +- .../gas/arm/group-reloc-ldrs-encoding-bad.d | 2 +- gas/testsuite/gas/arm/group-reloc-ldrs.d | 244 +- gas/testsuite/gas/arm/half-prec-neon.d | 9 + gas/testsuite/gas/arm/half-prec-neon.s | 4 + gas/testsuite/gas/arm/half-prec-psyntax.d | 13 + gas/testsuite/gas/arm/half-prec-psyntax.s | 7 + gas/testsuite/gas/arm/half-prec-vfpv3.d | 71 + gas/testsuite/gas/arm/half-prec-vfpv3.s | 68 + gas/testsuite/gas/arm/immed.d | 10 +- gas/testsuite/gas/arm/insn-error-a.d | 6 + gas/testsuite/gas/arm/insn-error-a.l | 2 + gas/testsuite/gas/arm/insn-error-a.s | 6 + gas/testsuite/gas/arm/insn-error-t.d | 6 + gas/testsuite/gas/arm/insn-error-t.l | 2 + gas/testsuite/gas/arm/insn-error-t.s | 6 + gas/testsuite/gas/arm/inst-po-2.d | 4 + gas/testsuite/gas/arm/inst-po-2.l | 6 + gas/testsuite/gas/arm/inst-po-2.s | 16 + gas/testsuite/gas/arm/inst-po-3.d | 16 + gas/testsuite/gas/arm/inst-po-3.s | 17 + gas/testsuite/gas/arm/inst-po-be.d | 21 + gas/testsuite/gas/arm/inst-po.d | 19 + gas/testsuite/gas/arm/inst-po.s | 27 + gas/testsuite/gas/arm/inst.d | 40 +- gas/testsuite/gas/arm/iwmmxt.d | 8 +- gas/testsuite/gas/arm/iwmmxt2.d | 188 +- gas/testsuite/gas/arm/iwmmxt2.s | 5 + gas/testsuite/gas/arm/ldconst.d | 10 +- gas/testsuite/gas/arm/local_function.d | 2 +- gas/testsuite/gas/arm/macro1.d | 6 +- gas/testsuite/gas/arm/mapdir.d | 35 + gas/testsuite/gas/arm/mapdir.s | 23 + gas/testsuite/gas/arm/mapmisc.d | 95 + gas/testsuite/gas/arm/mapmisc.dat | 1 + gas/testsuite/gas/arm/mapmisc.s | 36 + gas/testsuite/gas/arm/mapping.d | 1 - gas/testsuite/gas/arm/mapping2.d | 19 + gas/testsuite/gas/arm/mapping2.s | 20 + gas/testsuite/gas/arm/mapping3.d | 16 + gas/testsuite/gas/arm/mapping3.s | 5 + gas/testsuite/gas/arm/mapping4.d | 15 + gas/testsuite/gas/arm/mapping4.s | 7 + gas/testsuite/gas/arm/mapsecs.d | 45 + gas/testsuite/gas/arm/mapsecs.s | 15 + gas/testsuite/gas/arm/mapshort-eabi.d | 13 +- gas/testsuite/gas/arm/mapshort-elf.d | 12 +- gas/testsuite/gas/arm/maverick.c | 2 +- gas/testsuite/gas/arm/maverick.d | 248 +- gas/testsuite/gas/arm/missing.d | 3 + gas/testsuite/gas/arm/missing.l | 3 + gas/testsuite/gas/arm/missing.s | 2 + gas/testsuite/gas/arm/movw-local.d | 16 + gas/testsuite/gas/arm/movw-local.s | 13 + gas/testsuite/gas/arm/mul-overlap.l | 1 + gas/testsuite/gas/arm/mul-overlap.s | 2 + gas/testsuite/gas/arm/neon-ldst-rm.d | 8 +- gas/testsuite/gas/arm/neon-omit.d | 4 +- gas/testsuite/gas/arm/offset.d | 6 +- gas/testsuite/gas/arm/pr9722.d | 10 + gas/testsuite/gas/arm/pr9722.s | 8 + gas/testsuite/gas/arm/reg-alias.d | 6 +- gas/testsuite/gas/arm/relax_load_align.d | 9 + gas/testsuite/gas/arm/relax_load_align.s | 12 + gas/testsuite/gas/arm/sp-pc-usage-t.d | 88 + gas/testsuite/gas/arm/sp-pc-usage-t.s | 130 + gas/testsuite/gas/arm/svc.d | 8 +- gas/testsuite/gas/arm/t16-bad.l | 8 + gas/testsuite/gas/arm/t16-bad.s | 9 + gas/testsuite/gas/arm/target-reloc-1.d | 15 + gas/testsuite/gas/arm/target-reloc-1.s | 3 + gas/testsuite/gas/arm/tcompat.d | 14 +- gas/testsuite/gas/arm/tcompat.s | 5 + gas/testsuite/gas/arm/tcompat2.d | 8 +- gas/testsuite/gas/arm/thumb-eabi.d | 165 + gas/testsuite/gas/arm/thumb-w-bad.d | 3 + gas/testsuite/gas/arm/thumb-w-bad.l | 3 + gas/testsuite/gas/arm/thumb-w-bad.s | 6 + gas/testsuite/gas/arm/thumb-w-good.d | 9 + gas/testsuite/gas/arm/thumb-w-good.s | 7 + gas/testsuite/gas/arm/thumb.d | 87 +- gas/testsuite/gas/arm/thumb1_unified.d | 10 +- gas/testsuite/gas/arm/thumb2_add.d | 14 +- gas/testsuite/gas/arm/thumb2_bad_reg.d | 3 + gas/testsuite/gas/arm/thumb2_bad_reg.l | 787 + gas/testsuite/gas/arm/thumb2_bad_reg.s | 975 + gas/testsuite/gas/arm/thumb2_invert.d | 2 + gas/testsuite/gas/arm/thumb2_invert.s | 2 + gas/testsuite/gas/arm/thumb2_it.d | 60 +- gas/testsuite/gas/arm/thumb2_it_auto.d | 62 + gas/testsuite/gas/arm/thumb2_it_bad.d | 1 + gas/testsuite/gas/arm/thumb2_it_bad.l | 2 +- gas/testsuite/gas/arm/thumb2_it_bad_auto.d | 4 + gas/testsuite/gas/arm/thumb2_mul-bad.d | 3 + gas/testsuite/gas/arm/thumb2_mul-bad.l | 8 + gas/testsuite/gas/arm/thumb2_mul-bad.s | 20 + gas/testsuite/gas/arm/thumb2_mul.d | 19 + gas/testsuite/gas/arm/thumb2_mul.s | 29 + gas/testsuite/gas/arm/thumb2_pool.d | 6 +- gas/testsuite/gas/arm/thumb2_relax.d | 106 +- gas/testsuite/gas/arm/thumb32.d | 443 +- gas/testsuite/gas/arm/thumb32.l | 8 +- gas/testsuite/gas/arm/thumb32.s | 21 + gas/testsuite/gas/arm/thumbv6.d | 8 +- gas/testsuite/gas/arm/thumbv6k.d | 8 +- gas/testsuite/gas/arm/tls.d | 4 +- gas/testsuite/gas/arm/tls_vxworks.d | 8 +- gas/testsuite/gas/arm/undefined.d | 2 +- gas/testsuite/gas/arm/unwind_vxworks.d | 2 +- gas/testsuite/gas/arm/v4bx.d | 10 + gas/testsuite/gas/arm/v4bx.s | 4 + gas/testsuite/gas/arm/vfp-neon-overlap.d | 8 +- gas/testsuite/gas/arm/vfp-neon-syntax.d | 322 +- gas/testsuite/gas/arm/vfp-neon-syntax_t2.d | 354 +- gas/testsuite/gas/arm/vfp1.d | 222 +- gas/testsuite/gas/arm/vfp1_t2.d | 216 +- gas/testsuite/gas/arm/vfp1xD.d | 488 +- gas/testsuite/gas/arm/vfp1xD_t2.d | 484 +- gas/testsuite/gas/arm/vfp2.d | 8 +- gas/testsuite/gas/arm/vfp2_t2.d | 8 +- gas/testsuite/gas/arm/vfpv3-32drs.d | 110 +- gas/testsuite/gas/arm/vfpv3-const-conv.d | 44 +- gas/testsuite/gas/arm/vfpv3-d16-bad.d | 4 + gas/testsuite/gas/arm/vfpv3-d16-bad.l | 53 + gas/testsuite/gas/arm/wince.d | 6 +- gas/testsuite/gas/arm/wince_inst.d | 112 +- gas/testsuite/gas/arm/xscale.d | 12 +- gas/testsuite/gas/bfin/arith_mode.d | 56 + gas/testsuite/gas/bfin/arith_mode.s | 72 + gas/testsuite/gas/bfin/arithmetic.d | 259 +- gas/testsuite/gas/bfin/arithmetic.s | 1 + gas/testsuite/gas/bfin/bfin.exp | 9 + gas/testsuite/gas/bfin/bit.d | 42 +- gas/testsuite/gas/bfin/bit2.d | 126 +- gas/testsuite/gas/bfin/bit2.s | 196 +- gas/testsuite/gas/bfin/cache2.s | 172 +- gas/testsuite/gas/bfin/control_code.d | 90 +- gas/testsuite/gas/bfin/control_code2.d | 338 +- gas/testsuite/gas/bfin/control_code2.s | 514 +- gas/testsuite/gas/bfin/error.exp | 10 + gas/testsuite/gas/bfin/event.d | 22 +- gas/testsuite/gas/bfin/event2.d | 32 +- gas/testsuite/gas/bfin/event2.s | 82 +- .../gas/bfin/expected_comparison_errors.l | 22 + .../gas/bfin/expected_comparison_errors.s | 21 + gas/testsuite/gas/bfin/expected_errors.l | 82 + gas/testsuite/gas/bfin/expected_errors.s | 102 + gas/testsuite/gas/bfin/expected_move_errors.l | 1 + gas/testsuite/gas/bfin/expected_move_errors.s | 1 + gas/testsuite/gas/bfin/flow.d | 136 +- gas/testsuite/gas/bfin/flow2.d | 172 +- gas/testsuite/gas/bfin/invalid_arith_mode.l | 23 + gas/testsuite/gas/bfin/invalid_arith_mode.s | 46 + gas/testsuite/gas/bfin/line_number.l | 3 + gas/testsuite/gas/bfin/line_number.s | 4 + gas/testsuite/gas/bfin/load.d | 172 +- gas/testsuite/gas/bfin/logical.d | 42 +- gas/testsuite/gas/bfin/logical2.d | 70 +- gas/testsuite/gas/bfin/logical2.s | 138 +- gas/testsuite/gas/bfin/loop.d | 7 + gas/testsuite/gas/bfin/loop.s | 5 + gas/testsuite/gas/bfin/loop2.d | 7 + gas/testsuite/gas/bfin/loop2.s | 5 + gas/testsuite/gas/bfin/loop3.d | 7 + gas/testsuite/gas/bfin/loop3.s | 5 + gas/testsuite/gas/bfin/misc.d | 9 + gas/testsuite/gas/bfin/misc.s | 6 + gas/testsuite/gas/bfin/move.d | 138 +- gas/testsuite/gas/bfin/move.s | 1 - gas/testsuite/gas/bfin/move2.d | 546 +- gas/testsuite/gas/bfin/move2.s | 1060 +- gas/testsuite/gas/bfin/parallel.d | 233 +- gas/testsuite/gas/bfin/parallel.s | 292 +- gas/testsuite/gas/bfin/parallel2.d | 140 +- gas/testsuite/gas/bfin/parallel2.s | 160 +- gas/testsuite/gas/bfin/parallel3.d | 152 +- gas/testsuite/gas/bfin/parallel3.s | 190 +- gas/testsuite/gas/bfin/parallel4.d | 60 +- gas/testsuite/gas/bfin/parallel4.s | 86 +- gas/testsuite/gas/bfin/parallel5.s | 4 + gas/testsuite/gas/bfin/reloc.d | 16 +- gas/testsuite/gas/bfin/resource_conflict.l | 11 + gas/testsuite/gas/bfin/resource_conflict.s | 14 + gas/testsuite/gas/bfin/shift.d | 112 +- gas/testsuite/gas/bfin/shift2.d | 268 +- gas/testsuite/gas/bfin/shift2.s | 580 +- gas/testsuite/gas/bfin/stack.d | 12 +- gas/testsuite/gas/bfin/stack2.d | 32 +- gas/testsuite/gas/bfin/stack2.s | 252 +- gas/testsuite/gas/bfin/store.d | 82 +- gas/testsuite/gas/bfin/vector.d | 136 +- gas/testsuite/gas/bfin/vector2.d | 908 +- gas/testsuite/gas/bfin/vector2.s | 1353 +- gas/testsuite/gas/bfin/video.d | 58 +- gas/testsuite/gas/bfin/video2.d | 276 +- gas/testsuite/gas/bfin/video2.s | 440 +- gas/testsuite/gas/cfi/cfi-alpha-1.d | 4 +- gas/testsuite/gas/cfi/cfi-alpha-3.d | 6 +- gas/testsuite/gas/cfi/cfi-arm-1.d | 2 +- gas/testsuite/gas/cfi/cfi-common-1.d | 11 +- gas/testsuite/gas/cfi/cfi-common-2.d | 4 +- gas/testsuite/gas/cfi/cfi-common-3.d | 2 +- gas/testsuite/gas/cfi/cfi-common-4.d | 2 +- gas/testsuite/gas/cfi/cfi-common-5.d | 4 +- gas/testsuite/gas/cfi/cfi-common-6.d | 12 +- gas/testsuite/gas/cfi/cfi-common-7.d | 22 + gas/testsuite/gas/cfi/cfi-common-7.s | 6 + gas/testsuite/gas/cfi/cfi-hppa-1.d | 23 +- gas/testsuite/gas/cfi/cfi-i386-2.d | 2 +- gas/testsuite/gas/cfi/cfi-i386.d | 120 +- gas/testsuite/gas/cfi/cfi-i386.s | 68 +- gas/testsuite/gas/cfi/cfi-m68k.d | 6 +- gas/testsuite/gas/cfi/cfi-mips-1.d | 4 +- gas/testsuite/gas/cfi/cfi-ppc-1.d | 2 +- gas/testsuite/gas/cfi/cfi-s390-1.d | 2 +- gas/testsuite/gas/cfi/cfi-s390x-1.d | 2 +- gas/testsuite/gas/cfi/cfi-sh-1.d | 4 +- gas/testsuite/gas/cfi/cfi-sparc-1.d | 4 +- gas/testsuite/gas/cfi/cfi-sparc64-1.d | 4 +- gas/testsuite/gas/cfi/cfi-x86_64.d | 170 +- gas/testsuite/gas/cfi/cfi-x86_64.s | 80 +- gas/testsuite/gas/cfi/cfi.exp | 58 +- gas/testsuite/gas/cr16/pic.exp | 6 + gas/testsuite/gas/cr16/pic1.d | 18 + gas/testsuite/gas/cr16/pic1.s | 23 + gas/testsuite/gas/cr16/pic2.d | 18 + gas/testsuite/gas/cr16/pic2.s | 23 + gas/testsuite/gas/cris/cris.exp | 2 +- gas/testsuite/gas/cris/rd-bcnst2-pic.d | 17 + gas/testsuite/gas/cris/rd-bcnst2.d | 17 + gas/testsuite/gas/cris/rd-bcnst2.s | 2 + gas/testsuite/gas/cris/rd-bkw4.d | 51 + gas/testsuite/gas/cris/rd-bkw4.s | 45 + gas/testsuite/gas/cris/rd-bkw4v32.d | 54 + gas/testsuite/gas/cris/rd-bkw5.d | 29 + gas/testsuite/gas/cris/rd-bkw5.s | 48 + gas/testsuite/gas/cris/rd-bkw5b.d | 4 + gas/testsuite/gas/cris/rd-bkw5bpic.d | 4 + gas/testsuite/gas/cris/rd-bkw5bv32.d | 4 + gas/testsuite/gas/cris/rd-bkw5bv32pic.d | 4 + gas/testsuite/gas/cris/rd-bkw5pic.d | 27 + gas/testsuite/gas/cris/rd-bkw5v32.d | 28 + gas/testsuite/gas/cris/rd-bkw5v32pic.d | 28 + gas/testsuite/gas/cris/rd-dtpoffd1.d | 17 + gas/testsuite/gas/cris/rd-dtpoffd1.s | 16 + gas/testsuite/gas/cris/rd-tls-1.d | 31 + gas/testsuite/gas/cris/rd-tls-1.s | 25 + gas/testsuite/gas/cris/rd-tls-2.d | 48 + gas/testsuite/gas/cris/rd-tls-2.s | 26 + gas/testsuite/gas/cris/tls-err-1.s | 18 + gas/testsuite/gas/cris/tls-err-2.s | 19 + gas/testsuite/gas/cris/tls-err-3.s | 14 + gas/testsuite/gas/d30v/serial2.l | 2 +- gas/testsuite/gas/elf/elf.exp | 60 +- gas/testsuite/gas/elf/file.d | 18 + gas/testsuite/gas/elf/file.s | 29 + gas/testsuite/gas/elf/ifunc-1.d | 8 + gas/testsuite/gas/elf/ifunc-1.s | 9 + gas/testsuite/gas/elf/section2.e-armeabi | 5 +- gas/testsuite/gas/elf/section2.e-armelf | 3 +- gas/testsuite/gas/elf/section5.l | 1 - gas/testsuite/gas/elf/section6.d | 13 + gas/testsuite/gas/elf/section6.s | 10 + gas/testsuite/gas/elf/section7.d | 21 + gas/testsuite/gas/elf/section7.s | 38 + gas/testsuite/gas/elf/symtab.d | 9 + gas/testsuite/gas/elf/symtab.s | 5 + gas/testsuite/gas/elf/type-noifunc.e | 5 + gas/testsuite/gas/elf/type-noifunc.s | 20 + gas/testsuite/gas/elf/type.e | 5 +- gas/testsuite/gas/elf/type.s | 19 + gas/testsuite/gas/h8300/h8300-coff.exp | 2 +- gas/testsuite/gas/h8300/h8300.exp | 2 + gas/testsuite/gas/h8300/pr3134.d | 11 + gas/testsuite/gas/h8300/pr3134.s | 7 + gas/testsuite/gas/hppa/basic/basic.exp | 2 +- gas/testsuite/gas/hppa/parse/parse.exp | 4 +- gas/testsuite/gas/hppa/reloc/reloc.exp | 3 +- gas/testsuite/gas/hppa/unsorted/unsorted.exp | 2 +- gas/testsuite/gas/i386/287.d | 12 + gas/testsuite/gas/i386/287.s | 10 + gas/testsuite/gas/i386/387.d | 17 + gas/testsuite/gas/i386/387.s | 11 + gas/testsuite/gas/i386/8087.d | 13 + gas/testsuite/gas/i386/8087.s | 11 + gas/testsuite/gas/i386/aes-intel.d | 34 + gas/testsuite/gas/i386/aes.d | 33 + gas/testsuite/gas/i386/aes.s | 30 + gas/testsuite/gas/i386/amd.d | 64 +- gas/testsuite/gas/i386/amd.s | 8 +- gas/testsuite/gas/i386/amdfam10.d | 16 +- gas/testsuite/gas/i386/amdfam10.s | 16 + gas/testsuite/gas/i386/arch-1.d | 15 + gas/testsuite/gas/i386/arch-1.s | 9 + gas/testsuite/gas/i386/arch-10-1.l | 94 + gas/testsuite/gas/i386/arch-10-1.s | 1 + gas/testsuite/gas/i386/arch-10-2.l | 93 + gas/testsuite/gas/i386/arch-10-2.s | 1 + gas/testsuite/gas/i386/arch-10-3.l | 89 + gas/testsuite/gas/i386/arch-10-3.s | 1 + gas/testsuite/gas/i386/arch-10-4.l | 87 + gas/testsuite/gas/i386/arch-10-4.s | 1 + gas/testsuite/gas/i386/arch-10.d | 38 + gas/testsuite/gas/i386/arch-10.s | 58 + gas/testsuite/gas/i386/arch-11.d | 11 + gas/testsuite/gas/i386/arch-11.s | 5 + gas/testsuite/gas/i386/arch-12.d | 11 + gas/testsuite/gas/i386/arch-12.s | 5 + gas/testsuite/gas/i386/arch-2.d | 15 + gas/testsuite/gas/i386/arch-2.s | 9 + gas/testsuite/gas/i386/arch-3.d | 15 + gas/testsuite/gas/i386/arch-3.s | 9 + gas/testsuite/gas/i386/arch-5.d | 11 + gas/testsuite/gas/i386/arch-5.s | 5 + gas/testsuite/gas/i386/arch-6.d | 11 + gas/testsuite/gas/i386/arch-6.s | 5 + gas/testsuite/gas/i386/arch-7.d | 11 + gas/testsuite/gas/i386/arch-7.s | 5 + gas/testsuite/gas/i386/arch-9.d | 10 + gas/testsuite/gas/i386/arch-9.s | 4 + gas/testsuite/gas/i386/arch-avx-1-1.l | 13 + gas/testsuite/gas/i386/arch-avx-1-1.s | 1 + gas/testsuite/gas/i386/arch-avx-1-2.l | 13 + gas/testsuite/gas/i386/arch-avx-1-2.s | 1 + gas/testsuite/gas/i386/arch-avx-1-3.l | 13 + gas/testsuite/gas/i386/arch-avx-1-3.s | 1 + gas/testsuite/gas/i386/arch-avx-1-4.l | 13 + gas/testsuite/gas/i386/arch-avx-1-4.s | 1 + gas/testsuite/gas/i386/arch-avx-1-5.l | 13 + gas/testsuite/gas/i386/arch-avx-1-5.s | 1 + gas/testsuite/gas/i386/arch-avx-1-6.l | 13 + gas/testsuite/gas/i386/arch-avx-1-6.s | 1 + gas/testsuite/gas/i386/arch-avx-1.d | 12 + gas/testsuite/gas/i386/arch-avx-1.s | 6 + gas/testsuite/gas/i386/att-regs.d | 51 + gas/testsuite/gas/i386/att-regs.s | 57 + gas/testsuite/gas/i386/avx-intel.d | 3145 ++ gas/testsuite/gas/i386/avx.d | 3144 ++ gas/testsuite/gas/i386/avx.s | 3395 ++ gas/testsuite/gas/i386/clmul-intel.d | 30 + gas/testsuite/gas/i386/clmul.d | 29 + gas/testsuite/gas/i386/clmul.s | 26 + gas/testsuite/gas/i386/compat-intel.d | 27 + gas/testsuite/gas/i386/compat.d | 26 + gas/testsuite/gas/i386/compat.s | 18 + gas/testsuite/gas/i386/ept-intel.d | 14 + gas/testsuite/gas/i386/ept.d | 13 + gas/testsuite/gas/i386/ept.s | 9 + gas/testsuite/gas/i386/equ.d | 1 - gas/testsuite/gas/i386/equ.e | 2 - gas/testsuite/gas/i386/equ.s | 2 +- gas/testsuite/gas/i386/fma-intel.d | 491 + gas/testsuite/gas/i386/fma.d | 490 + gas/testsuite/gas/i386/fma.s | 503 + gas/testsuite/gas/i386/fma4.d | 93 + gas/testsuite/gas/i386/fma4.s | 91 + gas/testsuite/gas/i386/i386.d | 66 + gas/testsuite/gas/i386/i386.exp | 148 +- gas/testsuite/gas/i386/i386.s | 70 + gas/testsuite/gas/i386/ifunc.d | 19 + gas/testsuite/gas/i386/ifunc.s | 14 + gas/testsuite/gas/i386/intel-expr.d | 13 + gas/testsuite/gas/i386/intel-expr.s | 40 + gas/testsuite/gas/i386/intel-regs.d | 51 + gas/testsuite/gas/i386/intel-regs.s | 57 + gas/testsuite/gas/i386/intel.d | 1306 +- gas/testsuite/gas/i386/intel.e | 16 +- gas/testsuite/gas/i386/intel.s | 101 +- gas/testsuite/gas/i386/intel16.d | 1 - gas/testsuite/gas/i386/intel16.e | 7 - gas/testsuite/gas/i386/intel16.s | 12 +- gas/testsuite/gas/i386/intelbad.l | 64 +- gas/testsuite/gas/i386/intelbad.s | 25 +- gas/testsuite/gas/i386/intelok.d | 93 +- gas/testsuite/gas/i386/intelok.e | 8 - gas/testsuite/gas/i386/intelok.s | 62 +- gas/testsuite/gas/i386/intelpic.d | 2 +- gas/testsuite/gas/i386/inval-avx.l | 21 + gas/testsuite/gas/i386/inval-avx.s | 11 + gas/testsuite/gas/i386/inval-ept.l | 33 + gas/testsuite/gas/i386/inval-ept.s | 17 + gas/testsuite/gas/i386/inval-equ-1.l | 14 + gas/testsuite/gas/i386/inval-equ-1.s | 7 + gas/testsuite/gas/i386/inval-equ-2.l | 19 + gas/testsuite/gas/i386/inval-equ-2.s | 8 + gas/testsuite/gas/i386/inval-movbe.l | 25 + gas/testsuite/gas/i386/inval-movbe.s | 13 + gas/testsuite/gas/i386/inval.l | 166 +- gas/testsuite/gas/i386/inval.s | 34 + gas/testsuite/gas/i386/jump.d | 51 +- gas/testsuite/gas/i386/jump.s | 17 +- gas/testsuite/gas/i386/jump16.d | 80 +- gas/testsuite/gas/i386/jump16.s | 17 +- gas/testsuite/gas/i386/katmai.d | 16 +- gas/testsuite/gas/i386/katmai.s | 4 - gas/testsuite/gas/i386/l1om-inval.l | 2 + gas/testsuite/gas/i386/l1om-inval.s | 2 + gas/testsuite/gas/i386/l1om.d | 259 + gas/testsuite/gas/i386/mem-intel.d | 41 + gas/testsuite/gas/i386/mem.d | 39 + gas/testsuite/gas/i386/mem.s | 39 + gas/testsuite/gas/i386/movbe-intel.d | 22 + gas/testsuite/gas/i386/movbe.d | 21 + gas/testsuite/gas/i386/movbe.s | 17 + gas/testsuite/gas/i386/no87-2.l | 19 + gas/testsuite/gas/i386/no87-2.s | 14 + gas/testsuite/gas/i386/no87.l | 25 + gas/testsuite/gas/i386/no87.s | 18 + gas/testsuite/gas/i386/nops-1-i386-i686.d | 22 +- gas/testsuite/gas/i386/nops-1-i386.d | 22 +- gas/testsuite/gas/i386/nops-1-i686.d | 210 +- gas/testsuite/gas/i386/nops-1.d | 23 +- gas/testsuite/gas/i386/nops-2-i386.d | 26 +- gas/testsuite/gas/i386/nops-2-merom.d | 26 +- gas/testsuite/gas/i386/nops-2.d | 27 +- gas/testsuite/gas/i386/nops-2.s | 2 +- gas/testsuite/gas/i386/nops-3-i386.d | 64 +- gas/testsuite/gas/i386/nops-3-i686.d | 4 +- gas/testsuite/gas/i386/nops-3.d | 65 +- gas/testsuite/gas/i386/nops-4-i386.d | 960 +- gas/testsuite/gas/i386/nops-4-i686.d | 276 +- gas/testsuite/gas/i386/nops-4.d | 960 +- gas/testsuite/gas/i386/nops-5-i686.d | 73 + gas/testsuite/gas/i386/nops-5.d | 71 + gas/testsuite/gas/i386/nops-5.s | 70 + gas/testsuite/gas/i386/nops.d | 67 +- gas/testsuite/gas/i386/nops.s | 45 +- gas/testsuite/gas/i386/nops16-1.d | 1312 +- gas/testsuite/gas/i386/opcode-intel.d | 17 +- gas/testsuite/gas/i386/opcode-suffix.d | 70 +- gas/testsuite/gas/i386/opcode.d | 6 +- gas/testsuite/gas/i386/opcode.s | 6 +- gas/testsuite/gas/i386/opts-intel.d | 273 + gas/testsuite/gas/i386/opts.d | 272 + gas/testsuite/gas/i386/opts.s | 289 + gas/testsuite/gas/i386/prefix.d | 5 +- gas/testsuite/gas/i386/prefix.s | 2 +- gas/testsuite/gas/i386/prescott.d | 4 +- gas/testsuite/gas/i386/prescott.s | 4 +- gas/testsuite/gas/i386/reg-intel.d | 47 + gas/testsuite/gas/i386/reg.d | 45 + gas/testsuite/gas/i386/reg.s | 44 + gas/testsuite/gas/i386/reloc.d | 10 +- gas/testsuite/gas/i386/reloc64.d | 2 + gas/testsuite/gas/i386/reloc64.l | 2 - gas/testsuite/gas/i386/reloc64.s | 6 +- gas/testsuite/gas/i386/rexw.d | 47 + gas/testsuite/gas/i386/rexw.s | 48 + gas/testsuite/gas/i386/sib-intel.d | 52 + gas/testsuite/gas/i386/sib.d | 52 +- gas/testsuite/gas/i386/sib.s | 52 +- gas/testsuite/gas/i386/simd-intel.d | 113 +- gas/testsuite/gas/i386/simd-suffix.d | 199 + gas/testsuite/gas/i386/simd.d | 113 +- gas/testsuite/gas/i386/simd.s | 119 +- gas/testsuite/gas/i386/smx.d | 10 + gas/testsuite/gas/i386/smx.s | 5 + gas/testsuite/gas/i386/sse-check-error.l | 40 + gas/testsuite/gas/i386/sse-check-error.s | 1 + gas/testsuite/gas/i386/sse-check-none.d | 16 + gas/testsuite/gas/i386/sse-check-none.s | 21 + gas/testsuite/gas/i386/sse-check-warn.d | 18 + gas/testsuite/gas/i386/sse-check-warn.e | 7 + gas/testsuite/gas/i386/sse-check.d | 16 + gas/testsuite/gas/i386/sse-check.s | 20 + gas/testsuite/gas/i386/sse-noavx.d | 65 + gas/testsuite/gas/i386/sse-noavx.s | 59 + gas/testsuite/gas/i386/sse2.d | 304 +- gas/testsuite/gas/i386/sse2.s | 14 +- gas/testsuite/gas/i386/sse2avx-opts-intel.d | 274 + gas/testsuite/gas/i386/sse2avx-opts.d | 274 + gas/testsuite/gas/i386/sse2avx.d | 1166 + gas/testsuite/gas/i386/sse2avx.s | 1325 + gas/testsuite/gas/i386/sse4_1-intel.d | 18 +- gas/testsuite/gas/i386/sse4_1.d | 18 +- gas/testsuite/gas/i386/sse4_1.s | 6 + gas/testsuite/gas/i386/string-bad.l | 17 + gas/testsuite/gas/i386/string-bad.s | 22 + gas/testsuite/gas/i386/string-ok.d | 80 + gas/testsuite/gas/i386/string-ok.e | 30 + gas/testsuite/gas/i386/string-ok.s | 93 + gas/testsuite/gas/i386/svme.s | 12 +- gas/testsuite/gas/i386/svme64.d | 16 +- gas/testsuite/gas/i386/tlsnopic.d | 6 +- gas/testsuite/gas/i386/x86-64-addr32.d | 6 +- gas/testsuite/gas/i386/x86-64-addr32.s | 2 +- gas/testsuite/gas/i386/x86-64-aes-intel.d | 35 + gas/testsuite/gas/i386/x86-64-aes.d | 34 + gas/testsuite/gas/i386/x86-64-aes.s | 30 + gas/testsuite/gas/i386/x86-64-amdfam10.d | 20 +- gas/testsuite/gas/i386/x86-64-amdfam10.s | 20 + gas/testsuite/gas/i386/x86-64-arch-1.d | 15 + gas/testsuite/gas/i386/x86-64-arch-1.s | 9 + gas/testsuite/gas/i386/x86-64-arch-2.d | 38 + gas/testsuite/gas/i386/x86-64-arch-2.s | 58 + gas/testsuite/gas/i386/x86-64-avx-intel.d | 3470 ++ .../gas/i386/x86-64-avx-swap-intel.d | 60 + gas/testsuite/gas/i386/x86-64-avx-swap.d | 59 + gas/testsuite/gas/i386/x86-64-avx-swap.s | 67 + gas/testsuite/gas/i386/x86-64-avx.d | 3469 ++ gas/testsuite/gas/i386/x86-64-avx.s | 3758 ++ gas/testsuite/gas/i386/x86-64-branch.d | 26 +- gas/testsuite/gas/i386/x86-64-branch.s | 18 + gas/testsuite/gas/i386/x86-64-clmul-intel.d | 31 + gas/testsuite/gas/i386/x86-64-clmul.d | 30 + gas/testsuite/gas/i386/x86-64-clmul.s | 26 + gas/testsuite/gas/i386/x86-64-ept-intel.d | 18 + gas/testsuite/gas/i386/x86-64-ept.d | 17 + gas/testsuite/gas/i386/x86-64-ept.s | 13 + gas/testsuite/gas/i386/x86-64-fma-intel.d | 491 + gas/testsuite/gas/i386/x86-64-fma.d | 490 + gas/testsuite/gas/i386/x86-64-fma.s | 503 + gas/testsuite/gas/i386/x86-64-fma4.d | 67 + gas/testsuite/gas/i386/x86-64-fma4.s | 64 + gas/testsuite/gas/i386/x86-64-ifunc.d | 20 + gas/testsuite/gas/i386/x86-64-intel64.d | 10 + gas/testsuite/gas/i386/x86-64-intel64.s | 7 + gas/testsuite/gas/i386/x86-64-inval-avx.l | 21 + gas/testsuite/gas/i386/x86-64-inval-avx.s | 11 + gas/testsuite/gas/i386/x86-64-inval-ept.l | 41 + gas/testsuite/gas/i386/x86-64-inval-ept.s | 21 + gas/testsuite/gas/i386/x86-64-inval-movbe.l | 29 + gas/testsuite/gas/i386/x86-64-inval-movbe.s | 15 + gas/testsuite/gas/i386/x86-64-inval.l | 202 +- gas/testsuite/gas/i386/x86-64-inval.s | 52 +- gas/testsuite/gas/i386/x86-64-mem-intel.d | 43 + gas/testsuite/gas/i386/x86-64-mem.d | 42 + gas/testsuite/gas/i386/x86-64-mem.s | 41 + gas/testsuite/gas/i386/x86-64-movbe-intel.d | 28 + gas/testsuite/gas/i386/x86-64-movbe.d | 27 + gas/testsuite/gas/i386/x86-64-movbe.s | 23 + gas/testsuite/gas/i386/x86-64-nops-1-nocona.d | 210 +- .../gas/i386/x86-64-nops-1-pentium.d | 247 + gas/testsuite/gas/i386/x86-64-nops-1.d | 211 +- gas/testsuite/gas/i386/x86-64-nops-2.d | 213 +- gas/testsuite/gas/i386/x86-64-nops-3.d | 5 +- gas/testsuite/gas/i386/x86-64-nops-4-core2.d | 276 +- gas/testsuite/gas/i386/x86-64-nops-4-k8.d | 276 +- gas/testsuite/gas/i386/x86-64-nops-4.d | 277 +- gas/testsuite/gas/i386/x86-64-nops-5-k8.d | 73 + gas/testsuite/gas/i386/x86-64-nops-5.d | 72 + gas/testsuite/gas/i386/x86-64-nops.d | 93 +- gas/testsuite/gas/i386/x86-64-nops.s | 45 +- .../gas/i386/x86-64-opcode-inval-intel.d | 50 + gas/testsuite/gas/i386/x86-64-opcode-inval.d | 49 + gas/testsuite/gas/i386/x86-64-opcode-inval.s | 26 + gas/testsuite/gas/i386/x86-64-opcode.d | 576 +- gas/testsuite/gas/i386/x86-64-opcode.s | 5 + gas/testsuite/gas/i386/x86-64-opts-intel.d | 327 + gas/testsuite/gas/i386/x86-64-opts.d | 326 + gas/testsuite/gas/i386/x86-64-opts.s | 343 + gas/testsuite/gas/i386/x86-64-prescott.d | 4 +- gas/testsuite/gas/i386/x86-64-prescott.s | 4 +- gas/testsuite/gas/i386/x86-64-reg-intel.d | 47 + gas/testsuite/gas/i386/x86-64-reg.d | 46 + gas/testsuite/gas/i386/x86-64-reg.s | 44 + gas/testsuite/gas/i386/x86-64-sib-intel.d | 66 + gas/testsuite/gas/i386/x86-64-sib.d | 65 + gas/testsuite/gas/i386/x86-64-sib.s | 61 + gas/testsuite/gas/i386/x86-64-simd-intel.d | 225 +- gas/testsuite/gas/i386/x86-64-simd-suffix.d | 247 + gas/testsuite/gas/i386/x86-64-simd.d | 229 +- gas/testsuite/gas/i386/x86-64-simd.s | 169 +- .../gas/i386/x86-64-sse-check-error.l | 40 + .../gas/i386/x86-64-sse-check-error.s | 1 + .../gas/i386/x86-64-sse-check-none.d | 17 + .../gas/i386/x86-64-sse-check-warn.d | 18 + gas/testsuite/gas/i386/x86-64-sse-check.d | 17 + gas/testsuite/gas/i386/x86-64-sse-noavx.d | 66 + gas/testsuite/gas/i386/x86-64-sse-noavx.s | 60 + .../gas/i386/x86-64-sse2avx-opts-intel.d | 328 + gas/testsuite/gas/i386/x86-64-sse2avx-opts.d | 328 + gas/testsuite/gas/i386/x86-64-sse2avx.d | 1224 + gas/testsuite/gas/i386/x86-64-sse2avx.s | 1411 + gas/testsuite/gas/i386/x86-64-sse4_1-intel.d | 22 +- gas/testsuite/gas/i386/x86-64-sse4_1.d | 216 +- gas/testsuite/gas/i386/x86-64-sse4_1.s | 6 + gas/testsuite/gas/i386/x86-64-w64-pcrel.d | 20 + gas/testsuite/gas/i386/x86-64-xsave-intel.d | 17 + gas/testsuite/gas/i386/x86-64-xsave.d | 15 + gas/testsuite/gas/i386/x86-64-xsave.s | 11 + gas/testsuite/gas/i386/x86_64.d | 394 +- gas/testsuite/gas/i386/x86_64.e | 9 - gas/testsuite/gas/i386/x86_64.s | 140 +- gas/testsuite/gas/i386/xsave-intel.d | 17 + gas/testsuite/gas/i386/xsave.d | 15 + gas/testsuite/gas/i386/xsave.s | 11 + gas/testsuite/gas/ia64/dv-raw-err.l | 498 +- gas/testsuite/gas/ia64/dv-raw-err.s | 23 + gas/testsuite/gas/ia64/dv-waw-err.l | 640 +- gas/testsuite/gas/ia64/dv-waw-err.s | 14 + gas/testsuite/gas/ia64/invalid-ar.l | 7 +- gas/testsuite/gas/ia64/invalid-ar.s | 1 + gas/testsuite/gas/ia64/regs.d | 4667 +- gas/testsuite/gas/ia64/regs.s | 7 +- gas/testsuite/gas/lm32/all.exp | 6 + gas/testsuite/gas/lm32/csr.d | 27 + gas/testsuite/gas/lm32/csr.s | 20 + gas/testsuite/gas/lm32/insn.d | 257 + gas/testsuite/gas/lm32/insn.s | 142 + gas/testsuite/gas/lns/lns-big-delta.d | 14 + gas/testsuite/gas/lns/lns-big-delta.s | 5 + gas/testsuite/gas/lns/lns-common-1-alt.d | 6 +- gas/testsuite/gas/lns/lns-common-1-ia64.s | 18 + gas/testsuite/gas/lns/lns-common-1.d | 4 +- gas/testsuite/gas/lns/lns-common-1.s | 10 + gas/testsuite/gas/lns/lns-duplicate.d | 10 + gas/testsuite/gas/lns/lns-duplicate.s | 5 + gas/testsuite/gas/lns/lns.exp | 12 +- gas/testsuite/gas/m68hc11/bug-1825.d | 1 + gas/testsuite/gas/m68hc11/indexed12.d | 4 +- gas/testsuite/gas/m68hc11/insns-dwarf2.d | 3 +- gas/testsuite/gas/m68hc11/lbranch-dwarf2.d | 1 + gas/testsuite/gas/m68hc11/opers12-dwarf2.d | 1 + gas/testsuite/gas/m68k/all.exp | 5 + gas/testsuite/gas/m68k/br-isaa.d | 4 +- gas/testsuite/gas/m68k/br-isab.d | 4 +- gas/testsuite/gas/m68k/br-isac.d | 15 +- gas/testsuite/gas/m68k/br-isac.s | 1 + gas/testsuite/gas/m68k/fido.d | 20 +- gas/testsuite/gas/m68k/fido.s | 4 + gas/testsuite/gas/m68k/mcf-movsr.d | 15 + gas/testsuite/gas/m68k/mcf-movsr.s | 13 + gas/testsuite/gas/m68k/tls-gd-3.d | 3 + gas/testsuite/gas/m68k/tls-gd-3.s | 20 + gas/testsuite/gas/macros/and.s | 2 +- gas/testsuite/gas/macros/exit.s | 8 + gas/testsuite/gas/macros/macros.exp | 6 + gas/testsuite/gas/macros/purge.s | 15 - gas/testsuite/gas/macros/semi.d | 1 + gas/testsuite/gas/macros/test1.d | 4 +- gas/testsuite/gas/macros/test1.s | 6 +- gas/testsuite/gas/maxq10/maxq10.exp | 9 +- gas/testsuite/gas/maxq20/maxq20.exp | 8 +- gas/testsuite/gas/mep/complex-relocs.exp | 14 +- gas/testsuite/gas/mep/relocs.d | 84 +- gas/testsuite/gas/mips/align.d | 4 + gas/testsuite/gas/mips/align.s | 7 + gas/testsuite/gas/mips/align2-el.d | 42 + gas/testsuite/gas/mips/align2.d | 41 + gas/testsuite/gas/mips/align2.s | 35 + gas/testsuite/gas/mips/at-1.d | 938 + gas/testsuite/gas/mips/at-1.s | 388 + gas/testsuite/gas/mips/at-2.l | 13 + gas/testsuite/gas/mips/at-2.s | 21 + gas/testsuite/gas/mips/beq.d | 24 +- gas/testsuite/gas/mips/bge.d | 48 +- gas/testsuite/gas/mips/bgeu.d | 42 +- gas/testsuite/gas/mips/blt.d | 48 +- gas/testsuite/gas/mips/bltu.d | 42 +- gas/testsuite/gas/mips/branch-misc-1.d | 1 + gas/testsuite/gas/mips/branch-misc-2-64.d | 1 + gas/testsuite/gas/mips/branch-misc-2.d | 1 + gas/testsuite/gas/mips/branch-misc-2pic-64.d | 3 +- gas/testsuite/gas/mips/branch-misc-2pic.d | 1 + gas/testsuite/gas/mips/branch-swap.d | 1 + gas/testsuite/gas/mips/call-nonpic-1.d | 16 + gas/testsuite/gas/mips/call-nonpic-1.s | 2 + gas/testsuite/gas/mips/cfi-n64-1.d | 9 + gas/testsuite/gas/mips/cfi-n64-1.s | 9 + gas/testsuite/gas/mips/cp0-names-r3000.d | 43 + gas/testsuite/gas/mips/cp0-names-r4000.d | 43 + gas/testsuite/gas/mips/dli.d | 1 + gas/testsuite/gas/mips/e32-rel2.d | 32 +- gas/testsuite/gas/mips/e32el-rel2.d | 28 +- gas/testsuite/gas/mips/elf-rel13-mips16.d | 17 + gas/testsuite/gas/mips/elf-rel13-mips16.s | 24 + gas/testsuite/gas/mips/elf-rel2.d | 24 +- gas/testsuite/gas/mips/elf-rel26.d | 2 +- gas/testsuite/gas/mips/elf-rel8-mips16.d | 38 + gas/testsuite/gas/mips/elf-rel8-mips16.s | 39 + gas/testsuite/gas/mips/elf-rel9-mips16.d | 70 + gas/testsuite/gas/mips/elf-rel9-mips16.s | 59 + gas/testsuite/gas/mips/elf-rel9.d | 28 +- gas/testsuite/gas/mips/elfel-rel2.d | 24 +- gas/testsuite/gas/mips/eret-1.d | 41 + gas/testsuite/gas/mips/eret-1.s | 27 + gas/testsuite/gas/mips/eret-2.d | 16 + gas/testsuite/gas/mips/eret-2.s | 9 + gas/testsuite/gas/mips/eret-3.d | 18 + gas/testsuite/gas/mips/eret-3.s | 14 + gas/testsuite/gas/mips/jal-svr4pic.d | 3 + gas/testsuite/gas/mips/jal-xgot.d | 3 + gas/testsuite/gas/mips/jalr.l | 8 + gas/testsuite/gas/mips/jalr.s | 16 + gas/testsuite/gas/mips/jalr2.d | 41 + gas/testsuite/gas/mips/jalr2.s | 15 + gas/testsuite/gas/mips/lb.d | 2 +- gas/testsuite/gas/mips/ld-ilocks-addr32.d | 1 + gas/testsuite/gas/mips/ldstla-32-shared.d | 2 +- gas/testsuite/gas/mips/ldstla-32.d | 2 +- gas/testsuite/gas/mips/loongson-2e.d | 150 + gas/testsuite/gas/mips/loongson-2e.s | 144 + gas/testsuite/gas/mips/loongson-2f.d | 150 + gas/testsuite/gas/mips/loongson-2f.s | 144 + gas/testsuite/gas/mips/mips-abi32-pic2.d | 3 + gas/testsuite/gas/mips/mips-abi32.d | 16 +- .../gas/mips/mips-double-float-flag.l | 3 + .../gas/mips/mips-double-float-flag.s | 17 + gas/testsuite/gas/mips/mips-gp32-fp32.d | 16 +- gas/testsuite/gas/mips/mips-gp32-fp64.d | 18 +- gas/testsuite/gas/mips/mips-gp64-fp32.d | 14 +- gas/testsuite/gas/mips/mips-gp64-fp64.d | 14 +- gas/testsuite/gas/mips/mips-hard-float-flag.l | 5 + gas/testsuite/gas/mips/mips-hard-float-flag.s | 17 + gas/testsuite/gas/mips/mips-macro-ill-nofp.l | 19 + gas/testsuite/gas/mips/mips-macro-ill-nofp.s | 32 + gas/testsuite/gas/mips/mips-macro-ill-sfp.l | 10 + gas/testsuite/gas/mips/mips-macro-ill-sfp.s | 19 + gas/testsuite/gas/mips/mips.exp | 107 +- gas/testsuite/gas/mips/mips1-fp.d | 12 + gas/testsuite/gas/mips/mips1-fp.l | 3 + gas/testsuite/gas/mips/mips1-fp.s | 7 + gas/testsuite/gas/mips/mips16-dwarf2-n32.d | 20 +- gas/testsuite/gas/mips/mips16-e.d | 6 +- gas/testsuite/gas/mips/mips16-hilo-match.d | 41 + gas/testsuite/gas/mips/mips16-hilo-match.s | 148 + gas/testsuite/gas/mips/mips16-intermix.d | 279 +- gas/testsuite/gas/mips/mips16-vis-1.d | 3 + gas/testsuite/gas/mips/mips16-vis-1.s | 7 + gas/testsuite/gas/mips/mips32-cp2.d | 35 + gas/testsuite/gas/mips/mips32-cp2.s | 39 + gas/testsuite/gas/mips/mips32-dsp.d | 2 +- gas/testsuite/gas/mips/mips32-dspr2.d | 2 +- gas/testsuite/gas/mips/mips32-mt.d | 2 +- gas/testsuite/gas/mips/mips32-sf32.d | 4 +- gas/testsuite/gas/mips/mips32-sf32.l | 8 + gas/testsuite/gas/mips/mips32-sync.d | 14 + gas/testsuite/gas/mips/mips32-sync.s | 10 + gas/testsuite/gas/mips/mips32.d | 81 +- gas/testsuite/gas/mips/mips32.s | 33 - gas/testsuite/gas/mips/mips32r2-cp2.d | 12 + gas/testsuite/gas/mips/mips32r2-cp2.s | 12 + gas/testsuite/gas/mips/mips32r2-fp32.d | 12 + gas/testsuite/gas/mips/mips32r2-fp32.l | 3 + gas/testsuite/gas/mips/mips32r2-fp32.s | 13 + gas/testsuite/gas/mips/mips32r2-ill-nofp.l | 13 + gas/testsuite/gas/mips/mips32r2-ill-nofp.s | 48 + gas/testsuite/gas/mips/mips32r2.d | 8 +- gas/testsuite/gas/mips/mips32r2.s | 16 +- gas/testsuite/gas/mips/mips4-fp.d | 48 + gas/testsuite/gas/mips/mips4-fp.l | 35 + gas/testsuite/gas/mips/mips4-fp.s | 44 + gas/testsuite/gas/mips/mips4.d | 49 +- gas/testsuite/gas/mips/mips4.s | 37 +- gas/testsuite/gas/mips/mips64-cp2.d | 16 + gas/testsuite/gas/mips/mips64-cp2.s | 17 + gas/testsuite/gas/mips/mips64-dsp.d | 2 +- gas/testsuite/gas/mips/mips64-mips3d-incl.d | 1 + gas/testsuite/gas/mips/mips64.d | 7 +- gas/testsuite/gas/mips/mips64.s | 10 - gas/testsuite/gas/mips/mipsel16-e.d | 6 +- gas/testsuite/gas/mips/octeon-ill.l | 45 + gas/testsuite/gas/mips/octeon-ill.s | 63 + gas/testsuite/gas/mips/octeon.d | 104 + gas/testsuite/gas/mips/octeon.s | 106 + gas/testsuite/gas/mips/odd-float.d | 10 + gas/testsuite/gas/mips/odd-float.s | 6 + gas/testsuite/gas/mips/sb1-ext-mdmx.d | 2 +- gas/testsuite/gas/mips/sb1-ext-ps.d | 2 +- gas/testsuite/gas/mips/smartmips.d | 2 +- gas/testsuite/gas/mips/tls-ill.l | 8 +- gas/testsuite/gas/mips/tmips16-e.d | 6 +- gas/testsuite/gas/mips/tmipsel16-e.d | 6 +- gas/testsuite/gas/mips/vr4130.d | 16 + gas/testsuite/gas/mips/vr4130.s | 3 +- gas/testsuite/gas/mips/xlr-ext.d | 20 + gas/testsuite/gas/mips/xlr-ext.s | 27 + gas/testsuite/gas/mmix/err-loc-10.s | 5 + gas/testsuite/gas/mmix/err-loc-9.s | 5 + gas/testsuite/gas/mmix/err-swym1.s | 15 + gas/testsuite/gas/mmix/loc-6.d | 10 + gas/testsuite/gas/mmix/loc-6.s | 5 + gas/testsuite/gas/mmix/loc-7.d | 11 + gas/testsuite/gas/mmix/loc-7.s | 7 + gas/testsuite/gas/mmix/mmix-err.exp | 2 +- gas/testsuite/gas/mmix/mmix-list.exp | 2 +- gas/testsuite/gas/mmix/mmix.exp | 2 +- gas/testsuite/gas/mmix/odd-1.d | 2 +- gas/testsuite/gas/mmix/swym-opreg1.d | 31 + gas/testsuite/gas/mmix/swym-opreg1.s | 24 + gas/testsuite/gas/mmix/swym-opreg2.d | 8 + gas/testsuite/gas/mmix/swym-opreg2.s | 1 + gas/testsuite/gas/mn10200/basic.exp | 2 +- gas/testsuite/gas/mn10300/am33-2.c | 2 +- gas/testsuite/gas/mn10300/basic.exp | 4 +- gas/testsuite/gas/mn10300/pr997.l | 20 + gas/testsuite/gas/mn10300/pr997.s | 5 + gas/testsuite/gas/mt/ms1-16-003.d | 2 +- gas/testsuite/gas/mt/relocs.d | 2 +- gas/testsuite/gas/pdp11/opcode.s | 2 +- gas/testsuite/gas/pe/aligncomm-a.d | 12 + gas/testsuite/gas/pe/aligncomm-a.s | 11 + gas/testsuite/gas/pe/aligncomm-b.d | 16 + gas/testsuite/gas/pe/aligncomm-b.s | 11 + gas/testsuite/gas/pe/aligncomm-c.d | 8 + gas/testsuite/gas/pe/aligncomm-c.s | 5 + gas/testsuite/gas/pe/aligncomm-d.d | 12 + gas/testsuite/gas/pe/aligncomm-d.s | 5 + gas/testsuite/gas/pe/pe.exp | 34 + gas/testsuite/gas/ppc/476.d | 492 + gas/testsuite/gas/ppc/476.s | 485 + gas/testsuite/gas/ppc/a2.d | 579 + gas/testsuite/gas/ppc/a2.s | 554 + gas/testsuite/gas/ppc/aix.exp | 4 +- gas/testsuite/gas/ppc/altivec_and_spe.d | 12 + gas/testsuite/gas/ppc/altivec_and_spe.s | 4 + gas/testsuite/gas/ppc/altivec_xcoff.d | 2 +- gas/testsuite/gas/ppc/altivec_xcoff.s | 1 - gas/testsuite/gas/ppc/altivec_xcoff64.s | 1 - gas/testsuite/gas/ppc/booke.d | 185 +- gas/testsuite/gas/ppc/booke.s | 122 +- gas/testsuite/gas/ppc/booke_xcoff.d | 31 +- gas/testsuite/gas/ppc/booke_xcoff.s | 6 +- gas/testsuite/gas/ppc/booke_xcoff64.d | 125 - gas/testsuite/gas/ppc/booke_xcoff64.s | 137 - gas/testsuite/gas/ppc/cell.d | 10 +- gas/testsuite/gas/ppc/cell.s | 7 + gas/testsuite/gas/ppc/common.d | 190 + gas/testsuite/gas/ppc/common.s | 182 + gas/testsuite/gas/ppc/e500mc.d | 57 + gas/testsuite/gas/ppc/e500mc.s | 50 + gas/testsuite/gas/ppc/power4_32.d | 46 + gas/testsuite/gas/ppc/power4_32.s | 39 + gas/testsuite/gas/ppc/power6.d | 73 + gas/testsuite/gas/ppc/power6.s | 68 + gas/testsuite/gas/ppc/power7.d | 113 + gas/testsuite/gas/ppc/power7.s | 104 + gas/testsuite/gas/ppc/ppc.exp | 15 +- gas/testsuite/gas/ppc/ppc750ps.d | 72 + gas/testsuite/gas/ppc/ppc750ps.s | 66 + gas/testsuite/gas/ppc/regnames.d | 8 + gas/testsuite/gas/ppc/regnames.s | 3 + gas/testsuite/gas/ppc/test1xcoff32.d | 14 +- gas/testsuite/gas/ppc/textalign-xcoff-001.d | 6 +- gas/testsuite/gas/ppc/textalign-xcoff-002.d | 4 +- gas/testsuite/gas/ppc/vsx.d | 168 + gas/testsuite/gas/ppc/vsx.s | 160 + gas/testsuite/gas/ppc/xcoff-branch-1-32.d | 61 + gas/testsuite/gas/ppc/xcoff-branch-1-64.d | 61 + gas/testsuite/gas/ppc/xcoff-branch-1.s | 40 + gas/testsuite/gas/s390/esa-g5.d | 81 +- gas/testsuite/gas/s390/esa-g5.s | 42 +- gas/testsuite/gas/s390/esa-z9-109.d | 1 + gas/testsuite/gas/s390/esa-z9-109.s | 3 + gas/testsuite/gas/s390/esa-z990.d | 2 + gas/testsuite/gas/s390/esa-z990.s | 1 + gas/testsuite/gas/s390/s390.exp | 1 + gas/testsuite/gas/s390/zarch-z10.d | 377 + gas/testsuite/gas/s390/zarch-z10.s | 370 + gas/testsuite/gas/s390/zarch-z9-109.d | 4 +- gas/testsuite/gas/s390/zarch-z9-109.s | 4 +- gas/testsuite/gas/s390/zarch-z9-ec.d | 16 +- gas/testsuite/gas/s390/zarch-z9-ec.s | 16 +- gas/testsuite/gas/s390/zarch-z900.d | 15 +- gas/testsuite/gas/s390/zarch-z900.s | 15 +- gas/testsuite/gas/s390/zarch-z990.d | 4 +- gas/testsuite/gas/s390/zarch-z990.s | 3 +- gas/testsuite/gas/score/arith_32-lt.d | 16 + gas/testsuite/gas/score/arith_32.d | 55 + gas/testsuite/gas/score/arith_32.s | 43 + gas/testsuite/gas/score/bit_32-lt.d | 17 + gas/testsuite/gas/score/bit_32.d | 69 + gas/testsuite/gas/score/bit_32.s | 43 + gas/testsuite/gas/score/branch_32-lt.d | 1652 + gas/testsuite/gas/score/branch_32.d | 578 + gas/testsuite/gas/score/branch_32.s | 181 + gas/testsuite/gas/score/cmp_32-lt.d | 12 + gas/testsuite/gas/score/cmp_32.d | 39 + gas/testsuite/gas/score/cmp_32.s | 33 + gas/testsuite/gas/score/load_store_32-lt.d | 19 + gas/testsuite/gas/score/load_store_32.d | 79 + gas/testsuite/gas/score/load_store_32.s | 71 + gas/testsuite/gas/score/logical_32-lt.d | 13 + gas/testsuite/gas/score/logical_32.d | 38 + gas/testsuite/gas/score/logical_32.s | 26 + gas/testsuite/gas/score/mv_32-lt.d | 10 + gas/testsuite/gas/score/mv_32.d | 22 + gas/testsuite/gas/score/mv_32.s | 18 + gas/testsuite/gas/score/relax_32.exp | 24 + gas/testsuite/gas/score/relaxation_macro.h | 32 + gas/testsuite/gas/score/shift_32-lt.d | 13 + gas/testsuite/gas/score/shift_32.d | 40 + gas/testsuite/gas/score/shift_32.s | 26 + gas/testsuite/gas/score/syscontrol_32-lt.d | 11 + gas/testsuite/gas/score/syscontrol_32.d | 21 + gas/testsuite/gas/score/syscontrol_32.s | 19 + gas/testsuite/gas/sh/arch/arch.exp | 10 +- gas/testsuite/gas/sh/arch/sh-dsp.s | 6 +- gas/testsuite/gas/sh/arch/sh.s | 6 +- gas/testsuite/gas/sh/arch/sh2.s | 6 +- .../gas/sh/arch/sh2a-nofpu-or-sh3-nommu.s | 6 +- .../sh/arch/sh2a-nofpu-or-sh4-nommu-nofpu.s | 6 +- gas/testsuite/gas/sh/arch/sh2a-nofpu.s | 6 +- gas/testsuite/gas/sh/arch/sh2a-or-sh3e.s | 6 +- gas/testsuite/gas/sh/arch/sh2a-or-sh4.s | 6 +- gas/testsuite/gas/sh/arch/sh2a.s | 6 +- gas/testsuite/gas/sh/arch/sh2e.s | 6 +- gas/testsuite/gas/sh/arch/sh3-dsp.s | 6 +- gas/testsuite/gas/sh/arch/sh3-nommu.s | 6 +- gas/testsuite/gas/sh/arch/sh3.s | 6 +- gas/testsuite/gas/sh/arch/sh3e.s | 6 +- gas/testsuite/gas/sh/arch/sh4-nofpu.s | 6 +- gas/testsuite/gas/sh/arch/sh4-nommu-nofpu.s | 6 +- gas/testsuite/gas/sh/arch/sh4.s | 6 +- gas/testsuite/gas/sh/arch/sh4a-nofpu.s | 6 +- gas/testsuite/gas/sh/arch/sh4a.s | 6 +- gas/testsuite/gas/sh/arch/sh4al-dsp.s | 6 +- gas/testsuite/gas/sh/basic.exp | 6 +- gas/testsuite/gas/sh/err-mova.s | 20 + gas/testsuite/gas/sh/err.exp | 2 +- gas/testsuite/gas/sh/sh64/eh-1.d | 14 + gas/testsuite/gas/sh/sh64/eh-1.s | 7 + gas/testsuite/gas/sh/sh64/sh64.exp | 2 +- gas/testsuite/gas/sh/sh64/syntax-1.s | 4 +- gas/testsuite/gas/sh/sign-extension.d | 11 + gas/testsuite/gas/sh/sign-extension.s | 3 + gas/testsuite/gas/sparc/gotop32.d | 15 + gas/testsuite/gas/sparc/gotop32.s | 9 + gas/testsuite/gas/sparc/gotop64.d | 15 + gas/testsuite/gas/sparc/gotop64.s | 9 + gas/testsuite/gas/sparc/pc2210.d | 13 + gas/testsuite/gas/sparc/pc2210.s | 6 + gas/testsuite/gas/sparc/sparc.exp | 11 +- gas/testsuite/gas/v850/basic.exp | 3 +- gas/testsuite/gas/xtensa/all.exp | 3 + gas/testsuite/gas/xtensa/err-pcrel.s | 6 + gas/testsuite/gas/xtensa/jlong.d | 18 + gas/testsuite/gas/xtensa/jlong.s | 7 + gas/testsuite/gas/xtensa/pcrel.d | 19 + gas/testsuite/gas/xtensa/pcrel.s | 9 + gas/testsuite/gas/xtensa/weak-call.d | 11 + gas/testsuite/gas/xtensa/weak-call.s | 8 + gas/testsuite/gas/xtensa/xtensa-err.exp | 30 + gas/testsuite/gas/z80/arith.d | 149 + gas/testsuite/gas/z80/arith.s | 162 + gas/testsuite/gas/z80/bit.d | 249 + gas/testsuite/gas/z80/bit.s | 245 + gas/testsuite/gas/z80/block.d | 25 + gas/testsuite/gas/z80/block.s | 23 + gas/testsuite/gas/z80/branch.d | 54 + gas/testsuite/gas/z80/branch.s | 57 + gas/testsuite/gas/z80/inout.d | 24 + gas/testsuite/gas/z80/inout.s | 23 + gas/testsuite/gas/z80/ld-group.d | 154 + gas/testsuite/gas/z80/ld-group.s | 169 + gas/testsuite/gas/z80/misc.d | 26 + gas/testsuite/gas/z80/misc.s | 26 + gas/testsuite/gas/z80/rotate.d | 86 + gas/testsuite/gas/z80/rotate.s | 81 + gas/testsuite/gas/z80/z80.exp | 16 + gas/testsuite/lib/gas-defs.exp | 165 +- gas/testsuite/lib/gas-dg.exp | 2 +- gas/testsuite/lib/run | 2 - gas/write.c | 148 +- gold/ChangeLog | 4653 ++ gold/Makefile.am | 248 + gold/Makefile.in | 1258 + gold/NEWS | 1 + gold/README | 63 + gold/TODO | 26 + gold/aclocal.m4 | 990 + gold/archive.cc | 950 + gold/archive.h | 357 + gold/arm.cc | 2487 ++ gold/binary.cc | 356 + gold/binary.h | 116 + gold/common.cc | 279 + gold/common.h | 69 + gold/compressed_output.cc | 150 + gold/compressed_output.h | 74 + gold/config.in | 228 + gold/configure | 8528 ++++ gold/configure.ac | 377 + gold/configure.tgt | 124 + gold/copy-relocs.cc | 244 + gold/copy-relocs.h | 155 + gold/cref.cc | 253 + gold/cref.h | 73 + gold/debug.h | 78 + gold/defstd.cc | 262 + gold/defstd.h | 36 + gold/descriptors.cc | 250 + gold/descriptors.h | 109 + gold/dirsearch.cc | 287 + gold/dirsearch.h | 83 + gold/dwarf_reader.cc | 946 + gold/dwarf_reader.h | 219 + gold/dynobj.cc | 1850 + gold/dynobj.h | 623 + gold/ehframe.cc | 1187 + gold/ehframe.h | 451 + gold/errors.cc | 388 + gold/errors.h | 132 + gold/expression.cc | 1144 + gold/ffsll.c | 48 + gold/fileread.cc | 933 + gold/fileread.h | 546 + gold/freebsd.h | 168 + gold/ftruncate.c | 92 + gold/gc.cc | 74 + gold/gc.h | 256 + gold/gold-threads.cc | 403 + gold/gold-threads.h | 223 + gold/gold.cc | 640 + gold/gold.h | 354 + gold/i386.cc | 2757 ++ gold/icf.cc | 697 + gold/icf.h | 144 + gold/incremental.cc | 720 + gold/incremental.h | 348 + gold/layout.cc | 4015 ++ gold/layout.h | 1179 + gold/main.cc | 282 + gold/mapfile.cc | 398 + gold/mapfile.h | 113 + gold/merge.cc | 647 + gold/merge.h | 486 + gold/mremap.c | 59 + gold/object.cc | 2460 ++ gold/object.h | 2044 + gold/options.cc | 1209 + gold/options.h | 1587 + gold/output.cc | 4363 ++ gold/output.h | 3716 ++ gold/parameters.cc | 194 + gold/parameters.h | 199 + gold/plugin.cc | 1059 + gold/plugin.h | 473 + gold/po/Make-in | 256 + gold/po/POTFILES.in | 79 + gold/po/es.gmo | Bin 0 -> 39889 bytes gold/po/es.po | 1867 + gold/po/gold.pot | 1866 + gold/po/id.gmo | Bin 0 -> 38664 bytes gold/po/id.po | 1867 + gold/powerpc.cc | 2025 + gold/pread.c | 42 + gold/readsyms.cc | 601 + gold/readsyms.h | 298 + gold/reduced_debug_output.cc | 425 + gold/reduced_debug_output.h | 140 + gold/reloc-types.h | 92 + gold/reloc.cc | 1579 + gold/reloc.h | 706 + gold/resolve.cc | 898 + gold/script-c.h | 519 + gold/script-sections.cc | 3513 ++ gold/script-sections.h | 260 + gold/script.cc | 2741 ++ gold/script.h | 441 + gold/sparc.cc | 3274 ++ gold/stringpool.cc | 550 + gold/stringpool.h | 382 + gold/symtab.cc | 3287 ++ gold/symtab.h | 1741 + gold/target-reloc.h | 653 + gold/target-select.cc | 124 + gold/target-select.h | 183 + gold/target.cc | 193 + gold/target.h | 579 + gold/testsuite/Makefile.am | 1303 + gold/testsuite/Makefile.in | 3141 ++ gold/testsuite/basic_test.cc | 318 + gold/testsuite/binary.in | 1 + gold/testsuite/binary_test.cc | 46 + gold/testsuite/binary_unittest.cc | 156 + gold/testsuite/common_test_1.c | 75 + gold/testsuite/constructor_test.cc | 90 + gold/testsuite/copy_test.cc | 43 + gold/testsuite/copy_test_1.cc | 23 + gold/testsuite/copy_test_2.cc | 23 + gold/testsuite/debug_msg.cc | 79 + gold/testsuite/debug_msg.sh | 95 + gold/testsuite/discard_locals_test.c | 40 + gold/testsuite/discard_locals_test.sh | 44 + gold/testsuite/dynamic_list.sh | 50 + gold/testsuite/dynamic_list.t | 11 + gold/testsuite/exception_test.h | 27 + gold/testsuite/exception_test_1.cc | 52 + gold/testsuite/exception_test_2.cc | 31 + gold/testsuite/exception_test_main.cc | 35 + gold/testsuite/exclude_libs_test.c | 14 + gold/testsuite/exclude_libs_test.sh | 63 + gold/testsuite/exclude_libs_test_1.c | 24 + gold/testsuite/exclude_libs_test_2.c | 24 + gold/testsuite/exclude_libs_test_3.c | 24 + gold/testsuite/gc_comdat_test.sh | 42 + gold/testsuite/gc_comdat_test_1.cc | 42 + gold/testsuite/gc_comdat_test_2.cc | 35 + gold/testsuite/gc_tls_test.cc | 32 + gold/testsuite/gc_tls_test.sh | 39 + gold/testsuite/hidden_test.sh | 66 + gold/testsuite/hidden_test_1.c | 41 + gold/testsuite/hidden_test_main.c | 61 + gold/testsuite/icf_keep_unique_test.cc | 39 + gold/testsuite/icf_keep_unique_test.sh | 39 + gold/testsuite/icf_safe_test.cc | 54 + gold/testsuite/icf_safe_test.sh | 50 + gold/testsuite/icf_test.cc | 51 + gold/testsuite/icf_test.sh | 40 + gold/testsuite/initpri1.c | 105 + gold/testsuite/justsyms.t | 31 + gold/testsuite/justsyms_1.cc | 54 + gold/testsuite/justsyms_2.cc | 27 + gold/testsuite/large.c | 59 + gold/testsuite/many_sections_test.cc | 51 + gold/testsuite/object_unittest.cc | 100 + gold/testsuite/odr_violation1.cc | 12 + gold/testsuite/odr_violation2.cc | 14 + gold/testsuite/plugin_test.c | 529 + gold/testsuite/plugin_test_1.sh | 59 + gold/testsuite/plugin_test_2.sh | 56 + gold/testsuite/plugin_test_3.sh | 59 + gold/testsuite/plugin_test_4.sh | 58 + gold/testsuite/protected_1.cc | 33 + gold/testsuite/protected_2.cc | 31 + gold/testsuite/protected_3.cc | 33 + gold/testsuite/protected_main_1.cc | 36 + gold/testsuite/protected_main_2.cc | 29 + gold/testsuite/protected_main_3.cc | 31 + gold/testsuite/relro_script_test.t | 52 + gold/testsuite/relro_test.cc | 156 + gold/testsuite/relro_test_main.cc | 33 + gold/testsuite/retain_symbols_file_test.sh | 54 + gold/testsuite/script_test_1.cc | 47 + gold/testsuite/script_test_1.t | 29 + gold/testsuite/script_test_2.cc | 74 + gold/testsuite/script_test_2.t | 68 + gold/testsuite/script_test_2a.cc | 24 + gold/testsuite/script_test_2b.cc | 24 + gold/testsuite/script_test_3.sh | 88 + gold/testsuite/script_test_3.t | 47 + gold/testsuite/script_test_4.sh | 41 + gold/testsuite/script_test_4.t | 40 + gold/testsuite/script_test_5.cc | 45 + gold/testsuite/script_test_5.sh | 43 + gold/testsuite/script_test_5.t | 40 + gold/testsuite/searched_file_test.cc | 36 + gold/testsuite/searched_file_test_lib.cc | 27 + gold/testsuite/split_i386.sh | 54 + gold/testsuite/split_i386_1.s | 33 + gold/testsuite/split_i386_2.s | 33 + gold/testsuite/split_i386_3.s | 22 + gold/testsuite/split_i386_4.s | 23 + gold/testsuite/split_i386_n.s | 12 + gold/testsuite/split_x86_64.sh | 54 + gold/testsuite/split_x86_64_1.s | 33 + gold/testsuite/split_x86_64_2.s | 33 + gold/testsuite/split_x86_64_3.s | 22 + gold/testsuite/split_x86_64_4.s | 23 + gold/testsuite/split_x86_64_n.s | 12 + gold/testsuite/test.cc | 107 + gold/testsuite/test.h | 145 + gold/testsuite/testfile.cc | 944 + gold/testsuite/testfile.h | 49 + gold/testsuite/testmain.cc | 40 + gold/testsuite/thin_archive_main.cc | 39 + gold/testsuite/thin_archive_test_1.cc | 37 + gold/testsuite/thin_archive_test_2.cc | 37 + gold/testsuite/thin_archive_test_3.cc | 37 + gold/testsuite/thin_archive_test_4.cc | 35 + gold/testsuite/tls_test.cc | 224 + gold/testsuite/tls_test.h | 56 + gold/testsuite/tls_test_c.c | 65 + gold/testsuite/tls_test_file2.cc | 30 + gold/testsuite/tls_test_main.cc | 175 + gold/testsuite/two_file_shared.sh | 30 + gold/testsuite/two_file_test.h | 78 + gold/testsuite/two_file_test_1.cc | 238 + gold/testsuite/two_file_test_1b.cc | 41 + gold/testsuite/two_file_test_2.cc | 145 + gold/testsuite/two_file_test_main.cc | 57 + gold/testsuite/undef_symbol.cc | 38 + gold/testsuite/undef_symbol.sh | 45 + gold/testsuite/undef_symbol_main.cc | 29 + gold/testsuite/ver_matching_def.cc | 73 + gold/testsuite/ver_matching_test.sh | 88 + gold/testsuite/ver_test.h | 43 + gold/testsuite/ver_test_1.cc | 33 + gold/testsuite/ver_test_1.sh | 30 + gold/testsuite/ver_test_10.script | 30 + gold/testsuite/ver_test_10.sh | 44 + gold/testsuite/ver_test_2.cc | 40 + gold/testsuite/ver_test_2.script | 31 + gold/testsuite/ver_test_2.sh | 45 + gold/testsuite/ver_test_3.cc | 33 + gold/testsuite/ver_test_4.cc | 64 + gold/testsuite/ver_test_4.script | 36 + gold/testsuite/ver_test_4.sh | 44 + gold/testsuite/ver_test_5.cc | 29 + gold/testsuite/ver_test_5.script | 31 + gold/testsuite/ver_test_5.sh | 44 + gold/testsuite/ver_test_6.c | 35 + gold/testsuite/ver_test_7.cc | 37 + gold/testsuite/ver_test_7.sh | 44 + gold/testsuite/ver_test_8.script | 26 + gold/testsuite/ver_test_9.cc | 50 + gold/testsuite/ver_test_main.cc | 74 + gold/testsuite/ver_test_main_2.cc | 32 + gold/testsuite/version_script.map | 35 + gold/testsuite/weak_alias_test_1.cc | 52 + gold/testsuite/weak_alias_test_2.cc | 41 + gold/testsuite/weak_alias_test_3.cc | 26 + gold/testsuite/weak_alias_test_4.cc | 68 + gold/testsuite/weak_alias_test_main.cc | 67 + gold/testsuite/weak_plt.sh | 28 + gold/testsuite/weak_plt_main.cc | 33 + gold/testsuite/weak_plt_shared.cc | 29 + gold/testsuite/weak_test.cc | 47 + gold/testsuite/weak_undef.h | 25 + gold/testsuite/weak_undef_file1.cc | 69 + gold/testsuite/weak_undef_file2.cc | 70 + gold/testsuite/weak_undef_test.cc | 89 + gold/tls.h | 81 + gold/token.h | 326 + gold/version.cc | 81 + gold/workqueue-internal.h | 109 + gold/workqueue-threads.cc | 198 + gold/workqueue.cc | 506 + gold/workqueue.h | 295 + gold/x86_64.cc | 2747 ++ gold/yyscript.y | 1026 + gprof/ChangeLog | 381 +- gprof/ChangeLog-2006 | 128 + gprof/ChangeLog-2007 | 245 + gprof/ChangeLog-2008 | 129 + gprof/Makefile.am | 229 +- gprof/Makefile.in | 803 +- gprof/aclocal.m4 | 464 +- gprof/alpha.c | 25 +- gprof/basic_blocks.c | 12 +- gprof/cg_arcs.c | 2 +- gprof/cg_dfn.c | 5 +- gprof/cg_print.c | 30 +- gprof/config.texi | 2 +- gprof/configure | 18748 ++++---- gprof/configure.in | 17 +- gprof/corefile.c | 261 +- gprof/corefile.h | 20 +- gprof/dep-in.sed | 14 +- gprof/fdl.texi | 506 + gprof/gconfig.in | 41 + gprof/gmon_io.c | 12 +- gprof/gmon_io.h | 21 +- gprof/gprof.1 | 87 +- gprof/gprof.c | 25 +- gprof/gprof.h | 4 + gprof/gprof.info | 489 +- gprof/gprof.texi | 403 +- gprof/hist.c | 6 +- gprof/mips.c | 21 +- gprof/po/.cvsignore | 1 - gprof/po/Make-in | 3 +- gprof/po/de.gmo | Bin 10462 -> 10545 bytes gprof/po/de.po | 138 +- gprof/po/es.gmo | Bin 10062 -> 10797 bytes gprof/po/es.po | 250 +- gprof/po/fi.gmo | Bin 10771 -> 11021 bytes gprof/po/fi.po | 146 +- gprof/po/fr.gmo | Bin 10062 -> 10838 bytes gprof/po/fr.po | 293 +- gprof/po/gprof.pot | 129 +- gprof/po/id.gmo | Bin 9735 -> 10387 bytes gprof/po/id.po | 295 +- gprof/po/ms.gmo | Bin 9757 -> 10360 bytes gprof/po/ms.po | 154 +- gprof/po/nl.gmo | Bin 0 -> 10712 bytes gprof/po/nl.po | 612 + gprof/po/ro.gmo | Bin 0 -> 9898 bytes gprof/po/ro.po | 548 + gprof/po/sv.gmo | Bin 10210 -> 10367 bytes gprof/po/sv.po | 245 +- gprof/po/vi.gmo | Bin 12329 -> 12435 bytes gprof/po/vi.po | 151 +- gprof/search_list.c | 2 +- gprof/source.c | 2 +- gprof/sparc.c | 19 +- gprof/sym_ids.c | 26 +- gprof/symtab.c | 10 +- gprof/tahoe.c | 31 +- gprof/utils.c | 2 +- gprof/vax.c | 31 +- include/ChangeLog | 348 +- include/ChangeLog-9103 | 2 +- include/alloca-conf.h | 60 +- include/ansidecl.h | 48 +- include/aout/ChangeLog | 12 + include/aout/ar.h | 24 +- include/aout/stab.def | 11 + include/bfdlink.h | 35 +- include/binary-io.h | 62 + include/coff/ChangeLog | 122 + include/coff/go32exe.h | 8 +- include/coff/internal.h | 32 +- include/coff/pe.h | 170 +- include/coff/symconst.h | 7 + include/coff/ti.h | 109 +- include/coff/xcoff.h | 84 +- include/demangle.h | 48 +- include/dis-asm.h | 35 +- include/{elf => }/dwarf2.h | 118 +- include/dyn-string.h | 15 +- include/elf/ChangeLog | 503 + include/elf/arm.h | 65 +- include/elf/avr.h | 6 +- include/elf/bfin.h | 90 +- include/elf/common.h | 205 +- include/elf/cr16.h | 6 + include/elf/cr16c.h | 6 +- include/elf/cris.h | 80 + include/elf/external.h | 17 +- include/elf/hppa.h | 6 +- include/elf/i386.h | 3 +- include/elf/ia64.h | 85 +- include/elf/internal.h | 54 +- include/elf/lm32.h | 56 + include/elf/m32r.h | 5 +- include/elf/m68k.h | 23 +- include/elf/mep.h | 14 +- include/elf/microblaze.h | 63 + include/elf/mips.h | 44 +- include/elf/mn10300.h | 35 +- include/elf/moxie.h | 32 + include/elf/ppc.h | 39 +- include/elf/ppc64.h | 17 +- include/elf/reloc-macros.h | 28 + include/elf/score.h | 19 +- include/elf/sh.h | 2 +- include/elf/sparc.h | 16 +- include/elf/spu.h | 3 +- include/elf/v850.h | 8 +- include/elf/vxworks.h | 33 + include/elf/x86-64.h | 5 +- include/elf/xtensa.h | 10 +- include/fibheap.h | 11 +- include/filenames.h | 8 + include/floatformat.h | 9 + include/fopen-vms.h | 12 +- include/gdb/ChangeLog | 29 + include/gdb/callback.h | 36 +- include/gdb/fileio.h | 22 +- include/gdb/remote-sim.h | 25 +- include/gdb/signals.h | 9 +- include/gdb/sim-arm.h | 22 +- include/gdb/sim-cr16.h | 106 + include/gdb/sim-d10v.h | 25 +- include/gdb/sim-frv.h | 22 +- include/gdb/sim-h8300.h | 25 +- include/gdb/sim-lm32.h | 76 + include/gdb/sim-m32c.h | 25 +- include/gdb/sim-ppc.h | 26 +- include/gdb/sim-sh.h | 26 +- include/hashtab.h | 6 +- include/libiberty.h | 16 +- include/md5.h | 8 + include/nlm/alpha-ext.h | 2 +- include/nlm/common.h | 2 +- include/nlm/external.h | 2 +- include/nlm/i386-ext.h | 2 +- include/nlm/internal.h | 2 +- include/nlm/ppc-ext.h | 2 +- include/nlm/sparc32-ext.h | 2 +- include/obstack.h | 4 +- include/opcode/ChangeLog | 222 + include/opcode/arm.h | 25 +- include/opcode/avr.h | 28 +- include/opcode/bfin.h | 15 +- include/opcode/cr16.h | 3 +- include/opcode/h8300.h | 127 +- include/opcode/hppa.h | 3 +- include/opcode/i386.h | 37 +- include/opcode/ia64.h | 5 +- include/opcode/mips.h | 168 +- include/opcode/moxie.h | 72 + include/opcode/ppc.h | 52 +- include/opcode/s390.h | 3 +- include/opcode/score-datadep.h | 227 +- include/opcode/score-inst.h | 313 +- include/opcode/tic30.h | 8 +- include/opcode/tic54x.h | 12 +- include/plugin-api.h | 261 + include/safe-ctype.h | 39 +- {ld => include}/sha1.h | 88 +- include/splay-tree.h | 9 +- include/xtensa-config.h | 38 +- include/xtensa-isa-internal.h | 6 +- include/xtensa-isa.h | 12 +- install-sh | 517 +- intl/ChangeLog | 34 + intl/Makefile.in | 33 +- intl/aclocal.m4 | 7 +- intl/config.h.in | 9 +- intl/configure | 7944 ++-- intl/configure.ac | 2 +- ld/ChangeLog | 1895 +- ld/ChangeLog-2004 | 2 +- ld/ChangeLog-2007 | 1187 + ld/ChangeLog-2008 | 1099 + ld/Makefile.am | 410 +- ld/Makefile.in | 1320 +- ld/NEWS | 86 + ld/aclocal.m4 | 477 +- ld/config.in | 49 +- ld/configdoc.texi | 1 + ld/configure | 20761 ++++----- ld/configure.host | 6 +- ld/configure.in | 65 +- ld/configure.tgt | 56 +- ld/deffile.h | 13 +- ld/deffilep.c | 2927 ++ ld/deffilep.h | 120 + ld/deffilep.y | 70 +- ld/dep-in.sed | 13 +- ld/emulparams/arcelf.sh | 1 + ld/emulparams/armelf.sh | 2 +- ld/emulparams/armelf_linux.sh | 4 +- ld/emulparams/armnto.sh | 2 +- ld/emulparams/avr1.sh | 1 + ld/emulparams/avr2.sh | 1 + ld/emulparams/avr25.sh | 12 + ld/emulparams/avr3.sh | 1 + ld/emulparams/avr31.sh | 12 + ld/emulparams/avr35.sh | 12 + ld/emulparams/avr4.sh | 1 + ld/emulparams/avr5.sh | 1 + ld/emulparams/avr51.sh | 12 + ld/emulparams/avr6.sh | 3 +- ld/emulparams/bfin.sh | 1 - ld/emulparams/criself.sh | 1 + ld/emulparams/crislinux.sh | 1 + ld/emulparams/elf32_i860.sh | 1 + ld/emulparams/elf32_i960.sh | 4 +- ld/emulparams/elf32_sparc.sh | 1 + ld/emulparams/elf32_spu.sh | 9 +- ld/emulparams/elf32am33lin.sh | 1 + ld/emulparams/elf32bfinfd.sh | 29 + ld/emulparams/elf32bmip.sh | 19 + ld/emulparams/elf32bmipn32-defs.sh | 19 + ld/emulparams/elf32cr16.sh | 1 + ld/emulparams/elf32fr30.sh | 1 + ld/emulparams/elf32ip2k.sh | 1 + ld/emulparams/elf32lm32.sh | 10 + ld/emulparams/elf32lm32fd.sh | 16 + ld/emulparams/elf32mb_linux.sh | 17 + ld/emulparams/elf32mcore.sh | 1 + ld/emulparams/elf32mep.sh | 2 +- ld/emulparams/elf32microblaze.sh | 23 + ld/emulparams/elf32moxie.sh | 8 + ld/emulparams/elf32openrisc.sh | 1 + ld/emulparams/elf32ppc.sh | 13 +- ld/emulparams/elf32ppccommon.sh | 1 + ld/emulparams/elf32ppcwindiss.sh | 1 + ld/emulparams/elf32vax.sh | 1 + ld/emulparams/elf32xtensa.sh | 1 + ld/emulparams/elf64_s390.sh | 1 + ld/emulparams/elf64_sparc.sh | 1 + ld/emulparams/elf64alpha.sh | 1 + ld/emulparams/elf64hppa.sh | 58 +- ld/emulparams/elf64mmix.sh | 8 +- ld/emulparams/elf64ppc.sh | 5 +- ld/emulparams/elf_i386.sh | 2 + ld/emulparams/elf_i386_be.sh | 1 + ld/emulparams/elf_i386_ldso.sh | 1 + ld/emulparams/elf_i386_vxworks.sh | 1 + ld/emulparams/elf_l1om.sh | 68 + ld/emulparams/elf_l1om_fbsd.sh | 3 + ld/emulparams/elf_s390.sh | 1 + ld/emulparams/elf_x86_64.sh | 2 + ld/emulparams/h8300elf.sh | 1 + ld/emulparams/hppa64linux.sh | 5 +- ld/emulparams/hppalinux.sh | 1 + ld/emulparams/i386lynx.sh | 1 + ld/emulparams/i386moss.sh | 1 + ld/emulparams/i386nto.sh | 1 + ld/emulparams/i386pe.sh | 1 + ld/emulparams/i386pe_posix.sh | 1 + ld/emulparams/i386pep.sh | 1 + ld/emulparams/m68kelf.sh | 5 +- ld/emulparams/mmo.sh | 1 + ld/emulparams/mn10200.sh | 1 + ld/emulparams/or32elf.sh | 1 + ld/emulparams/pjelf.sh | 1 + ld/emulparams/ppclynx.sh | 1 + ld/emulparams/scoreelf.sh | 16 +- ld/emulparams/shelf.sh | 1 + ld/emulparams/shelf32.sh | 1 + ld/emulparams/shelf_nbsd.sh | 2 +- ld/emulparams/shelf_nto.sh | 1 + ld/emulparams/shelf_vxworks.sh | 1 + ld/emulparams/shlelf32_linux.sh | 1 + ld/emulparams/shlelf_linux.sh | 3 +- ld/emulparams/shlelf_nto.sh | 1 + ld/emulparams/vxworks.sh | 19 + ld/emultempl/aix.em | 166 +- ld/emultempl/alphaelf.em | 25 +- ld/emultempl/armcoff.em | 12 +- ld/emultempl/armelf.em | 512 +- ld/emultempl/avrelf.em | 107 +- ld/emultempl/beos.em | 36 +- ld/emultempl/cr16elf.em | 118 +- ld/emultempl/crxelf.em | 4 +- ld/emultempl/elf-generic.em | 37 +- ld/emultempl/elf32.em | 353 +- ld/emultempl/genelf.em | 27 +- ld/emultempl/generic.em | 2 +- ld/emultempl/gld960.em | 5 +- ld/emultempl/hppaelf.em | 70 +- ld/emultempl/ia64elf.em | 6 +- ld/emultempl/irix.em | 5 +- ld/emultempl/linux.em | 5 +- ld/emultempl/lnk960.em | 6 +- ld/emultempl/m68hc1xelf.em | 45 +- ld/emultempl/m68kcoff.em | 13 +- ld/emultempl/m68kelf.em | 76 +- ld/emultempl/mipsecoff.em | 2 +- ld/emultempl/mipself.em | 205 +- ld/emultempl/mmix-elfnmmo.em | 20 +- ld/emultempl/mmixelf.em | 2 +- ld/emultempl/mmo.em | 31 +- ld/emultempl/needrelax.em | 2 +- ld/emultempl/pe.em | 485 +- ld/emultempl/pep.em | 468 +- ld/emultempl/ppc32elf.em | 101 +- ld/emultempl/ppc64elf.em | 194 +- ld/emultempl/scoreelf.em | 14 +- ld/emultempl/sh64elf.em | 61 +- ld/emultempl/spu_icache.S | 7 + ld/emultempl/spu_icache.o_c | 33 + ld/emultempl/spu_ovl.S | 645 +- ld/emultempl/spu_ovl.o | Bin 1432 -> 0 bytes ld/emultempl/spu_ovl.o_c | 101 + ld/emultempl/spuelf.em | 625 +- ld/emultempl/sunos.em | 39 +- ld/emultempl/ticoff.em | 4 +- ld/emultempl/vanilla.em | 6 +- ld/emultempl/vxworks.em | 8 +- ld/emultempl/xtensaelf.em | 24 +- ld/emultempl/z80.em | 4 +- ld/fdl.texi | 2 - ld/gen-doc.texi | 1 + ld/genscrba.sh | 16 + ld/genscripts.sh | 87 +- ld/ld.1 | 440 +- ld/ld.h | 64 +- ld/ld.info | 1730 +- ld/ld.texinfo | 856 +- ld/ldcref.c | 83 +- ld/ldctor.c | 28 +- ld/ldctor.h | 4 +- ld/ldemul.c | 44 +- ld/ldemul.h | 10 +- ld/ldexp.c | 410 +- ld/ldexp.h | 57 +- ld/ldfile.c | 201 +- ld/ldfile.h | 4 +- ld/ldgram.c | 3174 +- ld/ldgram.h | 358 +- ld/ldgram.y | 39 +- ld/ldint.texinfo | 11 +- ld/ldlang.c | 1925 +- ld/ldlang.h | 114 +- ld/ldlex.c | 2582 +- ld/ldlex.h | 2 +- ld/ldlex.l | 25 +- ld/ldmain.c | 219 +- ld/ldmain.h | 6 +- ld/ldmisc.c | 43 +- ld/ldmisc.h | 2 +- ld/ldver.c | 4 +- ld/ldver.h | 2 +- ld/ldwrite.c | 60 +- ld/ldwrite.h | 2 +- ld/lexsup.c | 133 +- ld/mri.c | 9 +- ld/mri.h | 2 +- ld/pe-dll.c | 566 +- ld/pe-dll.h | 15 +- ld/pep-dll.c | 8 +- ld/pep-dll.h | 14 +- ld/po/.cvsignore | 1 - ld/po/Make-in | 3 +- ld/po/POTFILES.in | 4 +- ld/po/es.gmo | Bin 48316 -> 55441 bytes ld/po/es.po | 1595 +- ld/po/fi.gmo | Bin 49107 -> 55207 bytes ld/po/fi.po | 1373 +- ld/po/fr.gmo | Bin 49474 -> 51807 bytes ld/po/fr.po | 1630 +- ld/po/id.gmo | Bin 0 -> 49548 bytes ld/po/id.po | 2019 + ld/po/ld.pot | 1106 +- ld/po/vi.gmo | Bin 55090 -> 59342 bytes ld/po/vi.po | 1315 +- ld/scripttempl/aix.sc | 2 +- ld/scripttempl/alpha.sc | 2 +- ld/scripttempl/armbpabi.sc | 6 +- ld/scripttempl/armcoff.sc | 2 +- ld/scripttempl/avr.sc | 8 +- ld/scripttempl/crisaout.sc | 2 +- ld/scripttempl/delta68.sc | 2 +- ld/scripttempl/ebmon29k.sc | 2 +- ld/scripttempl/elf.sc | 124 +- ld/scripttempl/elf32cr16.sc | 14 +- ld/scripttempl/elf32cr16c.sc | 33 +- ld/scripttempl/elf32crx.sc | 14 +- ld/scripttempl/elf32sh-symbian.sc | 4 +- ld/scripttempl/elf32xc16x.sc | 2 +- ld/scripttempl/elf32xc16xl.sc | 2 +- ld/scripttempl/elf32xc16xs.sc | 2 +- ld/scripttempl/elf64hppa.sc | 574 + ld/scripttempl/elf_chaos.sc | 2 +- ld/scripttempl/elfd10v.sc | 2 +- ld/scripttempl/elfi370.sc | 2 +- ld/scripttempl/elfm68hc11.sc | 2 +- ld/scripttempl/elfm68hc12.sc | 2 +- ld/scripttempl/elfmicroblaze.sc | 222 + ld/scripttempl/elfxtensa.sc | 65 +- ld/scripttempl/epocpe.sc | 3 +- ld/scripttempl/h8300.sc | 2 +- ld/scripttempl/h8300h.sc | 2 +- ld/scripttempl/h8300hn.sc | 2 +- ld/scripttempl/h8300s.sc | 2 +- ld/scripttempl/h8300sn.sc | 2 +- ld/scripttempl/h8300sx.sc | 2 +- ld/scripttempl/h8300sxn.sc | 2 +- ld/scripttempl/hppaelf.sc | 2 +- ld/scripttempl/i386beos.sc | 2 +- ld/scripttempl/i386coff.sc | 2 +- ld/scripttempl/i386go32.sc | 2 +- ld/scripttempl/ip2k.sc | 2 +- ld/scripttempl/iq2000.sc | 2 +- ld/scripttempl/m68kaux.sc | 2 +- ld/scripttempl/m68klynx.sc | 2 +- ld/scripttempl/m88kbcs.sc | 2 +- ld/scripttempl/maxqcoff.sc | 2 +- ld/scripttempl/mcorepe.sc | 3 +- ld/scripttempl/mep.sc | 6 +- ld/scripttempl/mips.sc | 2 +- ld/scripttempl/mmo.sc | 10 +- ld/scripttempl/moxie.sc | 52 + ld/scripttempl/pe.sc | 27 +- ld/scripttempl/pep.sc | 28 +- ld/scripttempl/ppcpe.sc | 3 +- ld/scripttempl/sa29200.sc | 2 +- ld/scripttempl/sparccoff.sc | 2 +- ld/scripttempl/sparclynx.sc | 2 +- ld/scripttempl/tic4xcoff.sc | 2 +- ld/scripttempl/tic54xcoff.sc | 2 +- ld/scripttempl/tic80coff.sc | 2 +- ld/scripttempl/v850.sc | 2 +- ld/scripttempl/xstormy16.sc | 2 +- ld/scripttempl/z8000.sc | 2 +- ld/sysdep.h | 2 +- ld/testsuite/ChangeLog | 1741 +- ld/testsuite/ChangeLog-2007 | 1206 + ld/testsuite/ChangeLog-2008 | 1010 + ld/testsuite/config/default.exp | 16 +- ld/testsuite/ld-alpha/alpha.exp | 2 +- ld/testsuite/ld-alpha/tlsbin.rd | 46 +- ld/testsuite/ld-alpha/tlsbinr.rd | 44 +- ld/testsuite/ld-alpha/tlspic.rd | 40 +- ld/testsuite/ld-arm/arch-v6.s | 4 + ld/testsuite/ld-arm/arch-v6k.s | 4 + ld/testsuite/ld-arm/arch-v6t2.s | 4 + ld/testsuite/ld-arm/arm-app-abs32.d | 4 +- ld/testsuite/ld-arm/arm-app-movw.s | 11 + ld/testsuite/ld-arm/arm-app.d | 4 +- ld/testsuite/ld-arm/arm-app.r | 2 +- ld/testsuite/ld-arm/arm-be8.d | 18 +- ld/testsuite/ld-arm/arm-call.d | 26 +- ld/testsuite/ld-arm/arm-elf.exp | 267 +- ld/testsuite/ld-arm/arm-lib-plt32.d | 4 +- ld/testsuite/ld-arm/arm-lib.d | 4 +- ld/testsuite/ld-arm/arm-movwt.d | 8 +- ld/testsuite/ld-arm/arm-pic-veneer.d | 6 +- ld/testsuite/ld-arm/arm-target2-abs.d | 2 +- ld/testsuite/ld-arm/arm-target2-got-rel.d | 4 +- ld/testsuite/ld-arm/arm-target2-rel.d | 2 +- ld/testsuite/ld-arm/arm-target2.s | 3 + ld/testsuite/ld-arm/arm.ld | 3 + ld/testsuite/ld-arm/armthumb-lib.d | 26 +- ld/testsuite/ld-arm/armv4-bx.d | 19 + ld/testsuite/ld-arm/armv4-bx.s | 8 + ld/testsuite/ld-arm/attr-merge-2.attr | 2 + ld/testsuite/ld-arm/attr-merge-3.attr | 31 + ld/testsuite/ld-arm/attr-merge-3a.s | 38 + ld/testsuite/ld-arm/attr-merge-3b.s | 38 + ld/testsuite/ld-arm/attr-merge-4.attr | 8 + ld/testsuite/ld-arm/attr-merge-4a.s | 7 + ld/testsuite/ld-arm/attr-merge-4b.s | 7 + ld/testsuite/ld-arm/attr-merge-5.attr | 5 + ld/testsuite/ld-arm/attr-merge-5.s | 1 + ld/testsuite/ld-arm/attr-merge-arch-1.attr | 6 + ld/testsuite/ld-arm/attr-merge-arch-2.attr | 7 + ld/testsuite/ld-arm/attr-merge-unknown-1.d | 5 + ld/testsuite/ld-arm/attr-merge-unknown-1.s | 3 + ld/testsuite/ld-arm/attr-merge-unknown-2.d | 14 + ld/testsuite/ld-arm/attr-merge-unknown-2.s | 3 + ld/testsuite/ld-arm/attr-merge-unknown-2r.d | 14 + ld/testsuite/ld-arm/attr-merge-unknown-3.d | 15 + ld/testsuite/ld-arm/attr-merge-wchar-0.s | 11 + .../ld-arm/attr-merge-wchar-00-nowarn.d | 21 + ld/testsuite/ld-arm/attr-merge-wchar-00.d | 21 + .../ld-arm/attr-merge-wchar-02-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-02.d | 22 + .../ld-arm/attr-merge-wchar-04-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-04.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-2.s | 11 + .../ld-arm/attr-merge-wchar-20-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-20.d | 22 + .../ld-arm/attr-merge-wchar-22-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-22.d | 22 + .../ld-arm/attr-merge-wchar-24-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-24.d | 5 + ld/testsuite/ld-arm/attr-merge-wchar-4.s | 11 + .../ld-arm/attr-merge-wchar-40-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-40.d | 22 + .../ld-arm/attr-merge-wchar-42-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-42.d | 5 + .../ld-arm/attr-merge-wchar-44-nowarn.d | 22 + ld/testsuite/ld-arm/attr-merge-wchar-44.d | 22 + ld/testsuite/ld-arm/attr-merge.attr | 2 + ld/testsuite/ld-arm/blank.s | 1 + ld/testsuite/ld-arm/callweak-2.d | 15 + ld/testsuite/ld-arm/callweak-2.s | 17 + ld/testsuite/ld-arm/callweak.d | 4 +- ld/testsuite/ld-arm/callweak.s | 1 + ld/testsuite/ld-arm/cortex-a8-arm-target.s | 9 + ld/testsuite/ld-arm/cortex-a8-far-1.s | 8 + ld/testsuite/ld-arm/cortex-a8-far-2.s | 20 + ld/testsuite/ld-arm/cortex-a8-far.d | 40 + ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d | 83 + .../ld-arm/cortex-a8-fix-b-rel-thumb.d | 80 + ld/testsuite/ld-arm/cortex-a8-fix-b-rel.s | 41 + ld/testsuite/ld-arm/cortex-a8-fix-b.d | 75 + ld/testsuite/ld-arm/cortex-a8-fix-b.s | 39 + .../ld-arm/cortex-a8-fix-bcc-rel-thumb.d | 82 + ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel.s | 38 + ld/testsuite/ld-arm/cortex-a8-fix-bcc.d | 77 + ld/testsuite/ld-arm/cortex-a8-fix-bcc.s | 39 + .../ld-arm/cortex-a8-fix-bl-rel-arm.d | 79 + .../ld-arm/cortex-a8-fix-bl-rel-thumb.d | 80 + ld/testsuite/ld-arm/cortex-a8-fix-bl-rel.s | 40 + ld/testsuite/ld-arm/cortex-a8-fix-bl.d | 75 + ld/testsuite/ld-arm/cortex-a8-fix-bl.s | 39 + .../ld-arm/cortex-a8-fix-blx-rel-arm.d | 79 + .../ld-arm/cortex-a8-fix-blx-rel-thumb.d | 80 + ld/testsuite/ld-arm/cortex-a8-fix-blx-rel.s | 38 + ld/testsuite/ld-arm/cortex-a8-fix-blx.d | 79 + ld/testsuite/ld-arm/cortex-a8-fix-blx.s | 44 + ld/testsuite/ld-arm/cortex-a8-fix-hdr.d | 24 + ld/testsuite/ld-arm/cortex-a8-fix-hdr.s | 14 + ld/testsuite/ld-arm/cortex-a8-fix-hdr.t | 10 + ld/testsuite/ld-arm/cortex-a8-thumb-target.s | 10 + ld/testsuite/ld-arm/discard-unwind.ld | 19 + .../ld-arm/farcall-arm-arm-pic-veneer.d | 17 + ld/testsuite/ld-arm/farcall-arm-arm.d | 15 + ld/testsuite/ld-arm/farcall-arm-arm.s | 20 + .../ld-arm/farcall-arm-thumb-blx-pic-veneer.d | 17 + ld/testsuite/ld-arm/farcall-arm-thumb-blx.d | 15 + .../ld-arm/farcall-arm-thumb-pic-veneer.d | 17 + ld/testsuite/ld-arm/farcall-arm-thumb.d | 17 + ld/testsuite/ld-arm/farcall-arm-thumb.s | 20 + ld/testsuite/ld-arm/farcall-group-limit.d | 21 + ld/testsuite/ld-arm/farcall-group-size2.d | 51 + ld/testsuite/ld-arm/farcall-group.d | 51 + ld/testsuite/ld-arm/farcall-group.s | 44 + ld/testsuite/ld-arm/farcall-group2.s | 7 + ld/testsuite/ld-arm/farcall-group3.s | 9 + ld/testsuite/ld-arm/farcall-group4.s | 13 + ld/testsuite/ld-arm/farcall-mix.d | 49 + ld/testsuite/ld-arm/farcall-mix.s | 46 + ld/testsuite/ld-arm/farcall-mix2.d | 53 + ld/testsuite/ld-arm/farcall-mix2.s | 51 + ld/testsuite/ld-arm/farcall-mixed-app-v5.d | 85 + ld/testsuite/ld-arm/farcall-mixed-app.d | 90 + ld/testsuite/ld-arm/farcall-mixed-app.r | 10 + ld/testsuite/ld-arm/farcall-mixed-app.s | 61 + ld/testsuite/ld-arm/farcall-mixed-app.sym | 17 + ld/testsuite/ld-arm/farcall-mixed-lib.d | 93 + ld/testsuite/ld-arm/farcall-mixed-lib.r | 8 + ld/testsuite/ld-arm/farcall-mixed-lib1.s | 35 + ld/testsuite/ld-arm/farcall-mixed-lib2.s | 19 + ld/testsuite/ld-arm/farcall-section.d | 5 + ld/testsuite/ld-arm/farcall-section.s | 20 + .../ld-arm/farcall-thumb-arm-blx-pic-veneer.d | 18 + ld/testsuite/ld-arm/farcall-thumb-arm-blx.d | 16 + .../ld-arm/farcall-thumb-arm-pic-veneer.d | 20 + ld/testsuite/ld-arm/farcall-thumb-arm-short.d | 17 + ld/testsuite/ld-arm/farcall-thumb-arm-short.s | 21 + ld/testsuite/ld-arm/farcall-thumb-arm.d | 19 + ld/testsuite/ld-arm/farcall-thumb-arm.s | 21 + .../farcall-thumb-thumb-blx-pic-veneer.d | 18 + ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d | 16 + .../ld-arm/farcall-thumb-thumb-m-pic-veneer.d | 22 + ld/testsuite/ld-arm/farcall-thumb-thumb-m.d | 21 + .../ld-arm/farcall-thumb-thumb-pic-veneer.d | 22 + ld/testsuite/ld-arm/farcall-thumb-thumb.d | 19 + ld/testsuite/ld-arm/farcall-thumb-thumb.s | 19 + ld/testsuite/ld-arm/group-relocs.d | 38 +- ld/testsuite/ld-arm/mixed-app-v5.d | 32 +- ld/testsuite/ld-arm/mixed-app.d | 34 +- ld/testsuite/ld-arm/mixed-app.sym | 4 +- ld/testsuite/ld-arm/mixed-lib.d | 26 +- ld/testsuite/ld-arm/movw-merge.d | 13 + ld/testsuite/ld-arm/movw-merge.s | 20 + ld/testsuite/ld-arm/movw-shared-1.d | 4 + ld/testsuite/ld-arm/movw-shared-1.s | 5 + ld/testsuite/ld-arm/movw-shared-2.d | 4 + ld/testsuite/ld-arm/movw-shared-2.s | 5 + ld/testsuite/ld-arm/movw-shared-3.d | 4 + ld/testsuite/ld-arm/movw-shared-3.s | 6 + ld/testsuite/ld-arm/movw-shared-4.d | 4 + ld/testsuite/ld-arm/movw-shared-4.s | 6 + ld/testsuite/ld-arm/symbian-seg1.d | 8 + ld/testsuite/ld-arm/symbian-seg1.s | 13 + ld/testsuite/ld-arm/thumb2-b-interwork.d | 16 + ld/testsuite/ld-arm/thumb2-b-interwork.s | 20 + .../ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d | 22 + ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.d | 21 +- ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad.s | 4 +- ld/testsuite/ld-arm/thumb2-bl-bad-noeabi.d | 22 + ld/testsuite/ld-arm/thumb2-bl-bad.d | 20 +- ld/testsuite/ld-arm/thumb2-bl-bad.s | 4 +- ld/testsuite/ld-arm/thumb2-bl-blx-interwork.d | 71 + ld/testsuite/ld-arm/thumb2-bl-blx-interwork.s | 87 + ld/testsuite/ld-arm/thumb2-bl-undefweak.d | 9 + ld/testsuite/ld-arm/thumb2-bl-undefweak.s | 10 + ld/testsuite/ld-arm/thumb2-bl-undefweak1.d | 9 + ld/testsuite/ld-arm/thumb2-bl-undefweak1.s | 9 + ld/testsuite/ld-arm/tls-app.d | 4 +- ld/testsuite/ld-arm/tls-lib.d | 4 +- ld/testsuite/ld-arm/unwind-1.d | 10 + ld/testsuite/ld-arm/unwind-1.s | 19 + ld/testsuite/ld-arm/unwind-2.d | 10 + ld/testsuite/ld-arm/unwind-2.s | 19 + ld/testsuite/ld-arm/unwind-3.d | 11 + ld/testsuite/ld-arm/unwind-3.s | 29 + ld/testsuite/ld-arm/unwind-4.d | 11 + ld/testsuite/ld-arm/unwind-4.s | 49 + ld/testsuite/ld-arm/unwind-5.d | 7 + ld/testsuite/ld-arm/unwind-5.s | 12 + ld/testsuite/ld-arm/use-thumb-lib.sym | 2 +- ld/testsuite/ld-arm/vfp11-fix-scalar.d | 4 +- ld/testsuite/ld-arm/vfp11-fix-vector.d | 4 +- ld/testsuite/ld-auto-import/auto-import.exp | 150 +- ld/testsuite/ld-auto-import/client.c | 7 +- ld/testsuite/ld-bootstrap/bootstrap.exp | 44 +- ld/testsuite/ld-cdtest/cdtest.exp | 2 +- ld/testsuite/ld-checks/checks.exp | 22 +- ld/testsuite/ld-cris/badgotr1.d | 2 +- ld/testsuite/ld-cris/cris.exp | 2 +- ld/testsuite/ld-cris/dso-1.s | 2 +- ld/testsuite/ld-cris/dso-1b.s | 4 + ld/testsuite/ld-cris/expalltst3 | 1 + ld/testsuite/ld-cris/expdref2.s | 11 + ld/testsuite/ld-cris/expdref3.s | 9 + ld/testsuite/ld-cris/expdref4.s | 7 + ld/testsuite/ld-cris/expdyn1w.s | 3 + ld/testsuite/ld-cris/expdyn2.s | 21 + ld/testsuite/ld-cris/got7.s | 21 + ld/testsuite/ld-cris/hidedsofns2468 | 1 + ld/testsuite/ld-cris/init.s | 6 + ld/testsuite/ld-cris/libdso-1.d | 2 +- ld/testsuite/ld-cris/libdso-10.d | 10 +- ld/testsuite/ld-cris/libdso-11.d | 2 +- ld/testsuite/ld-cris/libdso-12b.d | 50 + ld/testsuite/ld-cris/libdso-12c.d | 41 + ld/testsuite/ld-cris/libdso-13b.d | 23 + ld/testsuite/ld-cris/libdso-15.d | 24 + ld/testsuite/ld-cris/libdso-15b.d | 38 + ld/testsuite/ld-cris/libdso-1b.d | 15 + ld/testsuite/ld-cris/libdso-1c.d | 35 + ld/testsuite/ld-cris/libdso-1d.d | 36 + ld/testsuite/ld-cris/libdso-2.d | 2 +- ld/testsuite/ld-cris/pic-gc-72.d | 28 + ld/testsuite/ld-cris/pic-gc-72.s | 3 + ld/testsuite/ld-cris/pic-gc-73.d | 26 + ld/testsuite/ld-cris/pic-gc-73.s | 5 + ld/testsuite/ld-cris/pv32-1.d | 4 +- ld/testsuite/ld-cris/pv32.s | 2 +- ld/testsuite/ld-cris/start1.s | 2 +- ld/testsuite/ld-cris/tls-commx.s | 1 + ld/testsuite/ld-cris/tls-dso-dtpoffd2.d | 37 + ld/testsuite/ld-cris/tls-dso-dtpoffd4.d | 37 + ld/testsuite/ld-cris/tls-dso-x1x2-1.d | 16 + ld/testsuite/ld-cris/tls-dso-xz-1.d | 18 + ld/testsuite/ld-cris/tls-dtpoffdx.s | 2 + ld/testsuite/ld-cris/tls-dtprelm.s | 26 + ld/testsuite/ld-cris/tls-e-20.d | 71 + ld/testsuite/ld-cris/tls-e-20a.d | 110 + ld/testsuite/ld-cris/tls-e-21.d | 39 + ld/testsuite/ld-cris/tls-e-22.d | 39 + ld/testsuite/ld-cris/tls-e-23.d | 38 + ld/testsuite/ld-cris/tls-e-66.d | 37 + ld/testsuite/ld-cris/tls-e-80.d | 88 + ld/testsuite/ld-cris/tls-e-dtpoffd1.d | 32 + ld/testsuite/ld-cris/tls-e-dtpoffd3.d | 32 + ld/testsuite/ld-cris/tls-e-tpoffcomm1.d | 45 + ld/testsuite/ld-cris/tls-e-tpoffcomm1.s | 9 + ld/testsuite/ld-cris/tls-err-20x.d | 11 + ld/testsuite/ld-cris/tls-err-24.d | 7 + ld/testsuite/ld-cris/tls-err-25.d | 7 + ld/testsuite/ld-cris/tls-err-26.d | 8 + ld/testsuite/ld-cris/tls-err-27.d | 8 + ld/testsuite/ld-cris/tls-err-28.d | 7 + ld/testsuite/ld-cris/tls-err-29.d | 7 + ld/testsuite/ld-cris/tls-err-31.d | 6 + ld/testsuite/ld-cris/tls-err-33.d | 6 + ld/testsuite/ld-cris/tls-err-35.d | 7 + ld/testsuite/ld-cris/tls-err-37.d | 7 + ld/testsuite/ld-cris/tls-err-39.d | 7 + ld/testsuite/ld-cris/tls-err-40.d | 6 + ld/testsuite/ld-cris/tls-err-41.d | 7 + ld/testsuite/ld-cris/tls-err-43.d | 7 + ld/testsuite/ld-cris/tls-err-44.d | 8 + ld/testsuite/ld-cris/tls-err-45.d | 7 + ld/testsuite/ld-cris/tls-err-47.d | 7 + ld/testsuite/ld-cris/tls-err-48.d | 6 + ld/testsuite/ld-cris/tls-err-49.d | 7 + ld/testsuite/ld-cris/tls-err-51.d | 7 + ld/testsuite/ld-cris/tls-err-52.d | 8 + ld/testsuite/ld-cris/tls-err-53.d | 7 + ld/testsuite/ld-cris/tls-err-55.d | 6 + ld/testsuite/ld-cris/tls-err-55.s | 8 + ld/testsuite/ld-cris/tls-err-56.d | 7 + ld/testsuite/ld-cris/tls-err-56.s | 9 + ld/testsuite/ld-cris/tls-err-62.d | 7 + ld/testsuite/ld-cris/tls-err-62.s | 9 + ld/testsuite/ld-cris/tls-err-65.d | 7 + ld/testsuite/ld-cris/tls-err-67.d | 9 + ld/testsuite/ld-cris/tls-err-77.d | 7 + ld/testsuite/ld-cris/tls-gc-68.d | 33 + ld/testsuite/ld-cris/tls-gc-69.d | 34 + ld/testsuite/ld-cris/tls-gc-70.d | 34 + ld/testsuite/ld-cris/tls-gc-71.d | 32 + ld/testsuite/ld-cris/tls-gc-71.s | 2 + ld/testsuite/ld-cris/tls-gc-75.d | 36 + ld/testsuite/ld-cris/tls-gc-76.d | 38 + ld/testsuite/ld-cris/tls-gc-76.s | 23 + ld/testsuite/ld-cris/tls-gc-79.d | 34 + ld/testsuite/ld-cris/tls-gd-1.d | 54 + ld/testsuite/ld-cris/tls-gd-1.s | 8 + ld/testsuite/ld-cris/tls-gd-1h.d | 50 + ld/testsuite/ld-cris/tls-gd-2.d | 54 + ld/testsuite/ld-cris/tls-gd-2.s | 9 + ld/testsuite/ld-cris/tls-gd-2h.d | 50 + ld/testsuite/ld-cris/tls-gd-3.d | 39 + ld/testsuite/ld-cris/tls-gd-3.s | 8 + ld/testsuite/ld-cris/tls-gd-3h.d | 39 + ld/testsuite/ld-cris/tls-gdgotrelm.s | 28 + ld/testsuite/ld-cris/tls-global-74.d | 28 + ld/testsuite/ld-cris/tls-gottprelm.s | 28 + ld/testsuite/ld-cris/tls-hx.s | 8 + ld/testsuite/ld-cris/tls-hx1x2.s | 15 + ld/testsuite/ld-cris/tls-ie-10.d | 54 + ld/testsuite/ld-cris/tls-ie-10.s | 8 + ld/testsuite/ld-cris/tls-ie-11.d | 60 + ld/testsuite/ld-cris/tls-ie-11.s | 9 + ld/testsuite/ld-cris/tls-ie-78.d | 44 + ld/testsuite/ld-cris/tls-ie-8.d | 54 + ld/testsuite/ld-cris/tls-ie-8.s | 8 + ld/testsuite/ld-cris/tls-ie-8e.s | 8 + ld/testsuite/ld-cris/tls-ie-8e1.d | 42 + ld/testsuite/ld-cris/tls-ie-9.d | 60 + ld/testsuite/ld-cris/tls-ie-9.s | 9 + ld/testsuite/ld-cris/tls-js1.d | 32 + ld/testsuite/ld-cris/tls-ld-4.d | 50 + ld/testsuite/ld-cris/tls-ld-4.s | 8 + ld/testsuite/ld-cris/tls-ld-5.d | 51 + ld/testsuite/ld-cris/tls-ld-5.s | 10 + ld/testsuite/ld-cris/tls-ld-6.d | 50 + ld/testsuite/ld-cris/tls-ld-6.s | 8 + ld/testsuite/ld-cris/tls-ld-7.d | 51 + ld/testsuite/ld-cris/tls-ld-7.s | 9 + ld/testsuite/ld-cris/tls-ldgd-14.d | 71 + ld/testsuite/ld-cris/tls-ldgd-14.s | 8 + ld/testsuite/ld-cris/tls-ldgd-15.d | 72 + ld/testsuite/ld-cris/tls-ldgd-15.s | 9 + ld/testsuite/ld-cris/tls-ldgde-14.d | 61 + ld/testsuite/ld-cris/tls-ldgde-15.d | 61 + ld/testsuite/ld-cris/tls-ldgdex-14.d | 54 + ld/testsuite/ld-cris/tls-ldgdex-15.d | 54 + ld/testsuite/ld-cris/tls-ldgdx-14.d | 55 + ld/testsuite/ld-cris/tls-ldgdx-15.d | 56 + ld/testsuite/ld-cris/tls-le-12.d | 38 + ld/testsuite/ld-cris/tls-le-12.s | 8 + ld/testsuite/ld-cris/tls-le-12s.d | 38 + ld/testsuite/ld-cris/tls-le-12s.s | 8 + ld/testsuite/ld-cris/tls-le-13.d | 41 + ld/testsuite/ld-cris/tls-le-13.s | 9 + ld/testsuite/ld-cris/tls-le-13s.d | 40 + ld/testsuite/ld-cris/tls-le-13s.s | 9 + ld/testsuite/ld-cris/tls-legd-16.d | 59 + ld/testsuite/ld-cris/tls-legd-16.s | 8 + ld/testsuite/ld-cris/tls-legd-17.d | 58 + ld/testsuite/ld-cris/tls-legdx-16.d | 52 + ld/testsuite/ld-cris/tls-legdx-17.d | 54 + ld/testsuite/ld-cris/tls-leie-18.d | 47 + ld/testsuite/ld-cris/tls-leie-19.d | 58 + ld/testsuite/ld-cris/tls-leie-19.s | 8 + ld/testsuite/ld-cris/tls-local-54.d | 27 + ld/testsuite/ld-cris/tls-local-54.s | 3 + ld/testsuite/ld-cris/tls-local-57.d | 23 + ld/testsuite/ld-cris/tls-local-57.s | 3 + ld/testsuite/ld-cris/tls-local-58.d | 24 + ld/testsuite/ld-cris/tls-local-58.s | 4 + ld/testsuite/ld-cris/tls-local-59.d | 25 + ld/testsuite/ld-cris/tls-local-59.s | 6 + ld/testsuite/ld-cris/tls-local-60.d | 33 + ld/testsuite/ld-cris/tls-local-61.d | 32 + ld/testsuite/ld-cris/tls-local-63.d | 31 + ld/testsuite/ld-cris/tls-local-64.d | 37 + ld/testsuite/ld-cris/tls-ok-30.d | 29 + ld/testsuite/ld-cris/tls-ok-32.d | 23 + ld/testsuite/ld-cris/tls-ok-34.d | 28 + ld/testsuite/ld-cris/tls-ok-36.d | 16 + ld/testsuite/ld-cris/tls-tbss64.s | 7 + ld/testsuite/ld-cris/tls-tprelm.s | 26 + ld/testsuite/ld-cris/tls-und-38.d | 27 + ld/testsuite/ld-cris/tls-und-42.d | 26 + ld/testsuite/ld-cris/tls-und-46.d | 27 + ld/testsuite/ld-cris/tls-und-50.d | 26 + ld/testsuite/ld-cris/tls-x.s | 7 + ld/testsuite/ld-cris/tls-x1x2.s | 13 + ld/testsuite/ld-cris/tls-z.s | 7 + ld/testsuite/ld-cris/tls128.s | 8 + ld/testsuite/ld-cris/tls128g.s | 9 + ld/testsuite/ld-cris/undef1.d | 2 +- ld/testsuite/ld-cris/weakhid.s | 13 + ld/testsuite/ld-cris/weakhiddso.d | 31 + ld/testsuite/ld-cris/weakref3.d | 36 + ld/testsuite/ld-cris/weakref4.d | 32 + ld/testsuite/ld-crx/crx.exp | 2 +- ld/testsuite/ld-cygwin/exe-export.exp | 4 +- ld/testsuite/ld-cygwin/testexe.c | 17 +- ld/testsuite/ld-d10v/d10v.exp | 2 +- ld/testsuite/ld-discard/discard.exp | 2 +- ld/testsuite/ld-elf/binutils.exp | 44 +- ld/testsuite/ld-elf/comm1.c | 17 + ld/testsuite/ld-elf/commonpage2.d | 9 + ld/testsuite/ld-elf/eh-frame-hdr.d | 12 +- ld/testsuite/ld-elf/eh-group.exp | 72 + ld/testsuite/ld-elf/eh-group1.s | 6 + ld/testsuite/ld-elf/eh-group2.s | 15 + ld/testsuite/ld-elf/eh1.d | 10 +- ld/testsuite/ld-elf/eh2.d | 10 +- ld/testsuite/ld-elf/eh3.d | 10 +- ld/testsuite/ld-elf/eh4.d | 6 +- ld/testsuite/ld-elf/eh5.d | 59 +- ld/testsuite/ld-elf/eh5b.s | 6 + ld/testsuite/ld-elf/eh6.d | 17 + ld/testsuite/ld-elf/eh6.s | 17 + ld/testsuite/ld-elf/elf.exp | 16 +- ld/testsuite/ld-elf/empty2.d | 2 +- ld/testsuite/ld-elf/exclude.exp | 6 +- ld/testsuite/ld-elf/extract-symbol-1sec.d | 4 +- ld/testsuite/ld-elf/extract-symbol-1sym.d | 6 + ld/testsuite/ld-elf/flags1.d | 21 + ld/testsuite/ld-elf/flags1.ld | 12 + ld/testsuite/ld-elf/flags1.s | 5 + ld/testsuite/ld-elf/frame.exp | 2 +- ld/testsuite/ld-elf/func1.c | 2 + ld/testsuite/ld-elf/group4.d | 16 + ld/testsuite/ld-elf/group5.d | 16 + ld/testsuite/ld-elf/group6.d | 16 + ld/testsuite/ld-elf/group7.d | 28 + ld/testsuite/ld-elf/group8.s | 10 + ld/testsuite/ld-elf/group8a.d | 9 + ld/testsuite/ld-elf/group8b.d | 9 + ld/testsuite/ld-elf/group9.s | 15 + ld/testsuite/ld-elf/group9a.d | 10 + ld/testsuite/ld-elf/group9b.d | 14 + ld/testsuite/ld-elf/hash.d | 10 +- ld/testsuite/ld-elf/linkonce1.d | 2 +- ld/testsuite/ld-elf/linkonce2.d | 2 +- ld/testsuite/ld-elf/linkoncerdiff.d | 6 + ld/testsuite/ld-elf/linkoncerdiff1.s | 7 + ld/testsuite/ld-elf/linkoncerdiff2.s | 22 + ld/testsuite/ld-elf/lma.lnk | 6 + ld/testsuite/ld-elf/lma.s | 4 + ld/testsuite/ld-elf/loadaddr.t | 10 + ld/testsuite/ld-elf/loadaddr1.d | 2 +- ld/testsuite/ld-elf/loadaddr1.t | 8 +- ld/testsuite/ld-elf/loadaddr2.d | 2 +- ld/testsuite/ld-elf/loadaddr2.t | 8 +- ld/testsuite/ld-elf/maxpage4.d | 9 + ld/testsuite/ld-elf/maxpage4.t | 9 + ld/testsuite/ld-elf/merge.d | 8 +- ld/testsuite/ld-elf/noload-3.d | 7 + ld/testsuite/ld-elf/noload-3.s | 6 + ld/testsuite/ld-elf/noload-3.t | 7 + ld/testsuite/ld-elf/note-2.d | 15 + ld/testsuite/ld-elf/note-2.s | 8 + ld/testsuite/ld-elf/note-2.t | 13 + ld/testsuite/ld-elf/orphan3.d | 21 + ld/testsuite/ld-elf/orphan3a.s | 12 + ld/testsuite/ld-elf/orphan3b.s | 2 + ld/testsuite/ld-elf/orphan3c.s | 2 + ld/testsuite/ld-elf/orphan3d.s | 2 + ld/testsuite/ld-elf/orphan3e.s | 2 + ld/testsuite/ld-elf/orphan3f.s | 2 + ld/testsuite/ld-elf/pr9676-1.c | 15 + ld/testsuite/ld-elf/pr9676-2.c | 14 + ld/testsuite/ld-elf/pr9676-3.c | 7 + ld/testsuite/ld-elf/pr9676-4.c | 9 + ld/testsuite/ld-elf/pr9676.rd | 5 + ld/testsuite/ld-elf/pr9679-1.c | 5 + ld/testsuite/ld-elf/pr9679-2.c | 13 + ld/testsuite/ld-elf/pr9679.rd | 5 + ld/testsuite/ld-elf/relro1.s | 14 + ld/testsuite/ld-elf/relro2.s | 5 + .../sec-to-seg-script-adjoining-pages.t | 11 + .../ld-elf/sec-to-seg-script-disjoint-pages.t | 11 + .../ld-elf/sec-to-seg-script-same-page.t | 10 + ld/testsuite/ld-elf/sec-to-seg.exp | 97 + ld/testsuite/ld-elf/sec-to-seg1.s | 9 + ld/testsuite/ld-elf/sec-to-seg2.s | 13 + ld/testsuite/ld-elf/sec64k.exp | 31 +- ld/testsuite/ld-elf/seg.d | 21 + ld/testsuite/ld-elf/seg.s | 6 + ld/testsuite/ld-elf/seg.t | 16 + ld/testsuite/ld-elf/shared.exp | 40 +- ld/testsuite/ld-elf/stab.d | 5 +- ld/testsuite/ld-elf/symbol1ref.s | 2 +- ld/testsuite/ld-elf/symbol2ref.s | 2 +- ld/testsuite/ld-elf/textaddr1.d | 8 + ld/testsuite/ld-elf/textaddr2.d | 8 + ld/testsuite/ld-elf/tls_common.exp | 3 +- ld/testsuite/ld-elf/tls_gc.s | 16 + ld/testsuite/ld-elf/warn2.d | 2 +- ld/testsuite/ld-elfcomm/common1b.c | 6 +- ld/testsuite/ld-elfcomm/elfcomm.exp | 167 +- ld/testsuite/ld-elfcomm/sort-common.s | 6 + ld/testsuite/ld-elfvers/vers.exp | 10 +- ld/testsuite/ld-elfvsb/elfvsb.exp | 3 +- ld/testsuite/ld-elfweak/elfweak.exp | 2 +- ld/testsuite/ld-fastcall/fastcall.exp | 2 +- ld/testsuite/ld-gc/gc.c | 41 + ld/testsuite/ld-gc/gc.exp | 92 + ld/testsuite/ld-gc/noent.d | 3 + ld/testsuite/ld-gc/noent.s | 4 + ld/testsuite/ld-h8300/h8300.exp | 2 +- ld/testsuite/ld-i386/abs.d | 3 +- ld/testsuite/ld-i386/hidden1.d | 3 + ld/testsuite/ld-i386/hidden1.s | 9 + ld/testsuite/ld-i386/hidden2.d | 13 + ld/testsuite/ld-i386/hidden2.s | 9 + ld/testsuite/ld-i386/hidden3.d | 3 + ld/testsuite/ld-i386/hidden3.s | 8 + ld/testsuite/ld-i386/i386.exp | 72 +- ld/testsuite/ld-i386/protected1.d | 3 + ld/testsuite/ld-i386/protected1.s | 13 + ld/testsuite/ld-i386/protected2.d | 16 + ld/testsuite/ld-i386/protected2.s | 13 + ld/testsuite/ld-i386/protected3.d | 13 + ld/testsuite/ld-i386/protected3.s | 15 + ld/testsuite/ld-i386/tlsbin.dd | 368 +- ld/testsuite/ld-i386/tlsbin.rd | 46 +- ld/testsuite/ld-i386/tlsbindesc.dd | 4 +- ld/testsuite/ld-i386/tlsbindesc.rd | 40 +- ld/testsuite/ld-i386/tlsbinpic.s | 5 + ld/testsuite/ld-i386/tlsdesc.rd | 36 +- ld/testsuite/ld-i386/tlsgd1.dd | 16 + ld/testsuite/ld-i386/tlsgd1.s | 15 + ld/testsuite/ld-i386/tlsgd2.d | 4 + ld/testsuite/ld-i386/tlsgd2.s | 11 + ld/testsuite/ld-i386/tlsgdesc.rd | 34 +- ld/testsuite/ld-i386/tlsie1.dd | 18 + ld/testsuite/ld-i386/tlsie1.s | 16 + ld/testsuite/ld-i386/tlsie2.d | 4 + ld/testsuite/ld-i386/tlsie2.s | 12 + ld/testsuite/ld-i386/tlsie3.d | 4 + ld/testsuite/ld-i386/tlsie3.s | 12 + ld/testsuite/ld-i386/tlsie4.d | 4 + ld/testsuite/ld-i386/tlsie4.s | 12 + ld/testsuite/ld-i386/tlsie5.d | 4 + ld/testsuite/ld-i386/tlsie5.s | 12 + ld/testsuite/ld-i386/tlsld1.dd | 15 + ld/testsuite/ld-i386/tlsld1.s | 12 + ld/testsuite/ld-i386/tlsnopic.rd | 34 +- ld/testsuite/ld-i386/tlspic.rd | 38 +- ld/testsuite/ld-i386/tlspie1.d | 6 + ld/testsuite/ld-i386/tlspie1.s | 64 + ld/testsuite/ld-i386/vxworks1-lib.dd | 8 +- ld/testsuite/ld-i386/vxworks1-lib.rd | 10 +- ld/testsuite/ld-i386/vxworks1.dd | 8 +- ld/testsuite/ld-ia64/ia64.exp | 2 +- ld/testsuite/ld-ia64/line.exp | 57 + ld/testsuite/ld-ia64/tlsbin.rd | 46 +- ld/testsuite/ld-ia64/tlspic.rd | 44 +- ld/testsuite/ld-ia64/undefined.s | 152 + ld/testsuite/ld-ifunc/binutils.exp | 101 + ld/testsuite/ld-ifunc/ifunc-1-local-x86.d | 7 + ld/testsuite/ld-ifunc/ifunc-1-local-x86.s | 13 + ld/testsuite/ld-ifunc/ifunc-1-x86.d | 7 + ld/testsuite/ld-ifunc/ifunc-1-x86.s | 16 + ld/testsuite/ld-ifunc/ifunc-2-i386.d | 8 + ld/testsuite/ld-ifunc/ifunc-2-i386.s | 21 + ld/testsuite/ld-ifunc/ifunc-2-local-i386.d | 8 + ld/testsuite/ld-ifunc/ifunc-2-local-i386.s | 18 + ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.s | 17 + ld/testsuite/ld-ifunc/ifunc-2-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-2-x86-64.s | 17 + ld/testsuite/ld-ifunc/ifunc-3-x86.s | 16 + ld/testsuite/ld-ifunc/ifunc-3a-x86.d | 8 + ld/testsuite/ld-ifunc/ifunc-3b-x86.d | 8 + ld/testsuite/ld-ifunc/ifunc-4-local-x86.d | 7 + ld/testsuite/ld-ifunc/ifunc-4-local-x86.s | 18 + ld/testsuite/ld-ifunc/ifunc-4-x86.d | 7 + ld/testsuite/ld-ifunc/ifunc-4-x86.s | 19 + ld/testsuite/ld-ifunc/ifunc-5-i386.s | 23 + ld/testsuite/ld-ifunc/ifunc-5-local-i386.s | 22 + ld/testsuite/ld-ifunc/ifunc-5-local-x86-64.s | 18 + ld/testsuite/ld-ifunc/ifunc-5-x86-64.s | 19 + ld/testsuite/ld-ifunc/ifunc-5a-i386.d | 9 + ld/testsuite/ld-ifunc/ifunc-5a-local-i386.d | 9 + ld/testsuite/ld-ifunc/ifunc-5a-local-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-5a-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-5b-i386.d | 13 + ld/testsuite/ld-ifunc/ifunc-5b-local-i386.d | 9 + ld/testsuite/ld-ifunc/ifunc-5b-local-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d | 13 + ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d | 11 + ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d | 10 + ld/testsuite/ld-ifunc/ifunc-6-i386.s | 24 + ld/testsuite/ld-ifunc/ifunc-6-x86-64.s | 20 + ld/testsuite/ld-ifunc/ifunc-6a-i386.d | 9 + ld/testsuite/ld-ifunc/ifunc-6a-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-6b-i386.d | 13 + ld/testsuite/ld-ifunc/ifunc-6b-x86-64.d | 13 + ld/testsuite/ld-ifunc/ifunc-7-i386.s | 24 + ld/testsuite/ld-ifunc/ifunc-7-x86-64.s | 20 + ld/testsuite/ld-ifunc/ifunc-7a-i386.d | 9 + ld/testsuite/ld-ifunc/ifunc-7a-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-7b-i386.d | 9 + ld/testsuite/ld-ifunc/ifunc-7b-x86-64.d | 9 + ld/testsuite/ld-ifunc/ifunc-8-i386.d | 10 + ld/testsuite/ld-ifunc/ifunc-8-x86-64.d | 10 + ld/testsuite/ld-ifunc/ifunc-8a-i386.s | 16 + ld/testsuite/ld-ifunc/ifunc-8a-x86-64.s | 12 + ld/testsuite/ld-ifunc/ifunc-8b-i386.s | 7 + ld/testsuite/ld-ifunc/ifunc-8b-x86-64.s | 7 + ld/testsuite/ld-ifunc/ifunc-9-x86.d | 3 + ld/testsuite/ld-ifunc/ifunc-9-x86.s | 18 + ld/testsuite/ld-ifunc/ifunc.exp | 352 + ld/testsuite/ld-ifunc/lib.c | 39 + ld/testsuite/ld-ifunc/prog.c | 46 + ld/testsuite/ld-ifunc/test-1.c | 3 + ld/testsuite/ld-ifunc/test-2.c | 3 + ld/testsuite/ld-libs/lib-1.s | 2 +- ld/testsuite/ld-libs/lib-2.s | 2 +- ld/testsuite/ld-linkonce/linkonce.exp | 2 +- ld/testsuite/ld-m68hc11/m68hc11.exp | 2 +- ld/testsuite/ld-m68k/got-1.d | 19 + ld/testsuite/ld-m68k/got-1.s | 18 + .../ld-m68k/got-multigot-12-13-14-34-35-ok.d | 18 + ld/testsuite/ld-m68k/got-multigot-14-ok.d | 18 + ld/testsuite/ld-m68k/got-multigot-15-er.d | 3 + .../ld-m68k/got-negative-12-13-14-34-ok.d | 18 + .../ld-m68k/got-negative-12-13-14-35-er.d | 3 + ld/testsuite/ld-m68k/got-negative-14-ok.d | 18 + ld/testsuite/ld-m68k/got-negative-15-er.d | 3 + ld/testsuite/ld-m68k/got-single-12-ok.d | 18 + ld/testsuite/ld-m68k/got-single-13-er.d | 3 + .../ld-m68k/got-xgot-12-13-14-15-34-35-ok.d | 18 + ld/testsuite/ld-m68k/got-xgot-15-ok.d | 18 + ld/testsuite/ld-m68k/m68k-got.exp | 250 + ld/testsuite/ld-m68k/m68k.exp | 29 +- ld/testsuite/ld-m68k/tls-def-1.d | 4 + ld/testsuite/ld-m68k/tls-def-1.s | 9 + ld/testsuite/ld-m68k/tls-gd-1.d | 21 + ld/testsuite/ld-m68k/tls-gd-1.d2 | 5 + ld/testsuite/ld-m68k/tls-gd-1.d3 | 13 + ld/testsuite/ld-m68k/tls-gd-1.s | 16 + ld/testsuite/ld-m68k/tls-gd-2.d | 24 + ld/testsuite/ld-m68k/tls-gd-2.s | 24 + ld/testsuite/ld-m68k/tls-gd-ie-1.d | 25 + ld/testsuite/ld-m68k/tls-gd-ie-1.s | 23 + ld/testsuite/ld-m68k/tls-ie-1.d | 22 + ld/testsuite/ld-m68k/tls-ie-1.s | 20 + ld/testsuite/ld-m68k/tls-ld-1.d | 22 + ld/testsuite/ld-m68k/tls-ld-1.s | 21 + ld/testsuite/ld-m68k/tls-ld-2.d | 15 + ld/testsuite/ld-m68k/tls-ld-2.s | 19 + ld/testsuite/ld-m68k/tls-le-1.s | 20 + ld/testsuite/ld-m68k/tls-main-1.d | 15 + ld/testsuite/ld-m68k/tls-main-1.s | 19 + ld/testsuite/ld-m68k/tls-no-1.s | 18 + ld/testsuite/ld-maxq/maxq.exp | 2 +- ld/testsuite/ld-mips-elf/attr-gnu-4-04.d | 10 + ld/testsuite/ld-mips-elf/attr-gnu-4-05.d | 10 + ld/testsuite/ld-mips-elf/attr-gnu-4-14.d | 2 +- ld/testsuite/ld-mips-elf/attr-gnu-4-15.d | 11 + ld/testsuite/ld-mips-elf/attr-gnu-4-24.d | 6 + ld/testsuite/ld-mips-elf/attr-gnu-4-25.d | 11 + ld/testsuite/ld-mips-elf/attr-gnu-4-34.d | 6 + ld/testsuite/ld-mips-elf/attr-gnu-4-35.d | 11 + ld/testsuite/ld-mips-elf/attr-gnu-4-40.d | 10 + ld/testsuite/ld-mips-elf/attr-gnu-4-41.d | 2 +- ld/testsuite/ld-mips-elf/attr-gnu-4-42.d | 6 + ld/testsuite/ld-mips-elf/attr-gnu-4-43.d | 6 + ld/testsuite/ld-mips-elf/attr-gnu-4-44.d | 10 + ld/testsuite/ld-mips-elf/attr-gnu-4-45.d | 10 + ld/testsuite/ld-mips-elf/attr-gnu-4-5.s | 1 + ld/testsuite/ld-mips-elf/attr-gnu-4-51.d | 6 + ld/testsuite/ld-mips-elf/dyn-sec64.d | 30 + ld/testsuite/ld-mips-elf/dyn-sec64.ld | 23 + ld/testsuite/ld-mips-elf/dyn-sec64.s | 19 + ld/testsuite/ld-mips-elf/eh-frame1-n32.d | 97 +- ld/testsuite/ld-mips-elf/eh-frame1-n64.d | 123 +- ld/testsuite/ld-mips-elf/eh-frame2-n32.d | 93 +- ld/testsuite/ld-mips-elf/eh-frame2-n64.d | 115 +- ld/testsuite/ld-mips-elf/eh-frame3.d | 2 +- ld/testsuite/ld-mips-elf/eh-frame4.d | 2 +- ld/testsuite/ld-mips-elf/elf-rel-got-n32.d | 8 +- .../ld-mips-elf/elf-rel-got-n64-linux.d | 11 +- ld/testsuite/ld-mips-elf/elf-rel-got-n64.d | 3 +- ld/testsuite/ld-mips-elf/elf-rel-xgot-n32.d | 8 +- .../ld-mips-elf/elf-rel-xgot-n64-linux.d | 11 +- ld/testsuite/ld-mips-elf/elf-rel-xgot-n64.d | 3 +- ld/testsuite/ld-mips-elf/got-dump-1.d | 25 + ld/testsuite/ld-mips-elf/got-dump-1.ld | 19 + ld/testsuite/ld-mips-elf/got-dump-1.s | 22 + ld/testsuite/ld-mips-elf/got-dump-2.d | 25 + ld/testsuite/ld-mips-elf/got-dump-2.ld | 18 + ld/testsuite/ld-mips-elf/got-dump-2.s | 22 + ld/testsuite/ld-mips-elf/got-page-1.d | 10 + ld/testsuite/ld-mips-elf/got-page-1.ld | 31 + ld/testsuite/ld-mips-elf/got-page-1.s | 46 + ld/testsuite/ld-mips-elf/got-page-2.d | 11 + ld/testsuite/ld-mips-elf/got-page-2.s | 46 + ld/testsuite/ld-mips-elf/got-page-3.d | 26 + ld/testsuite/ld-mips-elf/got-page-3a.s | 58 + ld/testsuite/ld-mips-elf/got-page-3b.s | 11 + ld/testsuite/ld-mips-elf/got-page-3c.s | 11 + ld/testsuite/ld-mips-elf/got-vers-1.dd | 6 + ld/testsuite/ld-mips-elf/got-vers-1.rd | 6 + ld/testsuite/ld-mips-elf/got-vers-1.sd | 6 + ld/testsuite/ld-mips-elf/got-vers-1.ver | 1 + ld/testsuite/ld-mips-elf/got-vers-1a.s | 2 + ld/testsuite/ld-mips-elf/got-vers-1b.s | 7 + ld/testsuite/ld-mips-elf/mips-elf-flags.exp | 2 +- ld/testsuite/ld-mips-elf/mips-elf.exp | 245 +- ld/testsuite/ld-mips-elf/mips16-intermix.d | 12 +- .../ld-mips-elf/mips16-local-stubs-1.d | 31 +- ld/testsuite/ld-mips-elf/mips16-pic-1-dummy.s | 15 + ld/testsuite/ld-mips-elf/mips16-pic-1.dd | 1227 + ld/testsuite/ld-mips-elf/mips16-pic-1.gd | 57 + ld/testsuite/ld-mips-elf/mips16-pic-1.inc | 147 + ld/testsuite/ld-mips-elf/mips16-pic-1.ld | 22 + ld/testsuite/ld-mips-elf/mips16-pic-1a.s | 144 + ld/testsuite/ld-mips-elf/mips16-pic-1b.s | 19 + ld/testsuite/ld-mips-elf/mips16-pic-2.ad | 6 + ld/testsuite/ld-mips-elf/mips16-pic-2.dd | 208 + ld/testsuite/ld-mips-elf/mips16-pic-2.gd | 26 + ld/testsuite/ld-mips-elf/mips16-pic-2.nd | 10 + ld/testsuite/ld-mips-elf/mips16-pic-2.rd | 9 + ld/testsuite/ld-mips-elf/mips16-pic-2a.s | 63 + ld/testsuite/ld-mips-elf/mips16-pic-2b.s | 16 + ld/testsuite/ld-mips-elf/mips16-pic-3.dd | 265 + ld/testsuite/ld-mips-elf/mips16-pic-3.gd | 23 + ld/testsuite/ld-mips-elf/mips16-pic-3.inc | 59 + ld/testsuite/ld-mips-elf/mips16-pic-3.rd | 7 + ld/testsuite/ld-mips-elf/mips16-pic-3a.s | 59 + ld/testsuite/ld-mips-elf/mips16-pic-3b.s | 14 + ld/testsuite/ld-mips-elf/mips16-pic-4.ver | 8 + ld/testsuite/ld-mips-elf/mips16-pic-4a.dd | 23 + ld/testsuite/ld-mips-elf/mips16-pic-4a.gd | 13 + ld/testsuite/ld-mips-elf/mips16-pic-4a.nd | 10 + ld/testsuite/ld-mips-elf/mips16-pic-4a.s | 33 + ld/testsuite/ld-mips-elf/mips16-pic-4b.dd | 35 + ld/testsuite/ld-mips-elf/mips16-pic-4b.s | 15 + ld/testsuite/ld-mips-elf/mips16-pic-4c.s | 38 + ld/testsuite/ld-mips-elf/multi-got-1.d | 2 +- .../ld-mips-elf/multi-got-no-shared.d | 4 +- ld/testsuite/ld-mips-elf/no-shared-1-n32.d | 25 + ld/testsuite/ld-mips-elf/no-shared-1-n64.d | 26 + ld/testsuite/ld-mips-elf/no-shared-1-n64.s | 13 + ld/testsuite/ld-mips-elf/no-shared-1-o32.d | 24 + ld/testsuite/ld-mips-elf/no-shared-1-o32.s | 13 + ld/testsuite/ld-mips-elf/no-shared-1.ld | 11 + .../ld-mips-elf/pic-and-nonpic-1-rel.dd | 46 + .../ld-mips-elf/pic-and-nonpic-1-rel.nd | 5 + ld/testsuite/ld-mips-elf/pic-and-nonpic-1.dd | 46 + ld/testsuite/ld-mips-elf/pic-and-nonpic-1.ld | 9 + ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd | 9 + ld/testsuite/ld-mips-elf/pic-and-nonpic-1a.s | 31 + ld/testsuite/ld-mips-elf/pic-and-nonpic-1b.s | 9 + ld/testsuite/ld-mips-elf/pic-and-nonpic-2.d | 23 + ld/testsuite/ld-mips-elf/pic-and-nonpic-2a.s | 7 + ld/testsuite/ld-mips-elf/pic-and-nonpic-2b.s | 6 + .../ld-mips-elf/pic-and-nonpic-3-error.d | 5 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.dd | 39 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd | 18 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.ld | 23 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s | 29 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd | 20 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ad | 27 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.dd | 52 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd | 28 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ld | 35 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.nd | 9 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.pd | 5 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.rd | 4 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s | 22 + ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd | 27 + .../ld-mips-elf/pic-and-nonpic-4-error.d | 5 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4a.s | 22 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ad | 26 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.dd | 10 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.gd | 7 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ld | 33 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.nd | 12 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.rd | 7 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s | 13 + ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd | 27 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5a.s | 16 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ad | 32 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.dd | 34 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd | 26 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ld | 38 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.nd | 10 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.pd | 7 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.rd | 13 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s | 9 + ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd | 27 + .../ld-mips-elf/pic-and-nonpic-6-n32.ad | 27 + .../ld-mips-elf/pic-and-nonpic-6-n32.dd | 101 + .../ld-mips-elf/pic-and-nonpic-6-n32.gd | 32 + .../ld-mips-elf/pic-and-nonpic-6-n32.nd | 17 + .../ld-mips-elf/pic-and-nonpic-6-n32.pd | 6 + .../ld-mips-elf/pic-and-nonpic-6-n32.rd | 14 + .../ld-mips-elf/pic-and-nonpic-6-n32.sd | 27 + .../ld-mips-elf/pic-and-nonpic-6-n32a.s | 48 + .../ld-mips-elf/pic-and-nonpic-6-n32b.s | 39 + .../ld-mips-elf/pic-and-nonpic-6-n32c.s | 25 + .../ld-mips-elf/pic-and-nonpic-6-n64.ad | 27 + .../ld-mips-elf/pic-and-nonpic-6-n64.dd | 101 + .../ld-mips-elf/pic-and-nonpic-6-n64.gd | 32 + .../ld-mips-elf/pic-and-nonpic-6-n64.nd | 17 + .../ld-mips-elf/pic-and-nonpic-6-n64.pd | 7 + .../ld-mips-elf/pic-and-nonpic-6-n64.rd | 30 + .../ld-mips-elf/pic-and-nonpic-6-n64.sd | 25 + .../ld-mips-elf/pic-and-nonpic-6-n64a.s | 48 + .../ld-mips-elf/pic-and-nonpic-6-n64b.s | 39 + .../ld-mips-elf/pic-and-nonpic-6-n64c.s | 25 + .../ld-mips-elf/pic-and-nonpic-6-o32.ad | 27 + .../ld-mips-elf/pic-and-nonpic-6-o32.dd | 101 + .../ld-mips-elf/pic-and-nonpic-6-o32.gd | 32 + .../ld-mips-elf/pic-and-nonpic-6-o32.nd | 17 + .../ld-mips-elf/pic-and-nonpic-6-o32.pd | 6 + .../ld-mips-elf/pic-and-nonpic-6-o32.rd | 14 + .../ld-mips-elf/pic-and-nonpic-6-o32.sd | 27 + .../ld-mips-elf/pic-and-nonpic-6-o32a.s | 48 + .../ld-mips-elf/pic-and-nonpic-6-o32b.s | 37 + .../ld-mips-elf/pic-and-nonpic-6-o32c.s | 25 + ld/testsuite/ld-mips-elf/pic-and-nonpic-6.ld | 40 + .../ld-mips-elf/relax-jalr-n32-shared.d | 2 - .../ld-mips-elf/relax-jalr-n64-shared.d | 2 - ld/testsuite/ld-mips-elf/reloc-1-n32.d | 70 +- ld/testsuite/ld-mips-elf/reloc-1-n64.d | 70 +- ld/testsuite/ld-mips-elf/reloc-estimate-1.d | 18 + ld/testsuite/ld-mips-elf/reloc-estimate-1.ld | 29 + ld/testsuite/ld-mips-elf/reloc-estimate-1a.s | 6 + ld/testsuite/ld-mips-elf/reloc-estimate-1b.s | 7 + ld/testsuite/ld-mips-elf/tls-hidden2-got.d | 3 +- ld/testsuite/ld-mips-elf/tls-hidden2.d | 4 +- ld/testsuite/ld-mips-elf/tls-hidden3.d | 16 +- ld/testsuite/ld-mips-elf/tls-hidden3.got | 5 +- ld/testsuite/ld-mips-elf/tls-hidden3.ld | 5 +- ld/testsuite/ld-mips-elf/tls-hidden3.r | 10 +- ld/testsuite/ld-mips-elf/tls-hidden4.got | 7 +- ld/testsuite/ld-mips-elf/tls-hidden4.r | 16 +- ld/testsuite/ld-mips-elf/tls-multi-got-1.d | 12 +- ld/testsuite/ld-mips-elf/tls-multi-got-1.got | 46 +- ld/testsuite/ld-mips-elf/tls-multi-got-1.r | 14 +- ld/testsuite/ld-mips-elf/tlsbin-o32.d | 10 +- ld/testsuite/ld-mips-elf/tlsbin-o32.got | 6 +- ld/testsuite/ld-mips-elf/tlsdyn-o32-1.d | 36 +- ld/testsuite/ld-mips-elf/tlsdyn-o32-1.got | 19 +- ld/testsuite/ld-mips-elf/tlsdyn-o32-2.d | 32 +- ld/testsuite/ld-mips-elf/tlsdyn-o32-2.got | 19 +- ld/testsuite/ld-mips-elf/tlsdyn-o32-3.d | 32 +- ld/testsuite/ld-mips-elf/tlsdyn-o32-3.got | 19 +- ld/testsuite/ld-mips-elf/tlsdyn-o32.d | 20 +- ld/testsuite/ld-mips-elf/tlsdyn-o32.got | 19 +- .../ld-mips-elf/tlslib-o32-hidden.got | 12 +- ld/testsuite/ld-mips-elf/tlslib-o32-ver.got | 14 +- ld/testsuite/ld-mips-elf/tlslib-o32.d | 10 +- ld/testsuite/ld-mips-elf/tlslib-o32.got | 14 +- ld/testsuite/ld-mips-elf/vxworks1-static.d | 2 +- ld/testsuite/ld-mmix/loc10.d | 13 + ld/testsuite/ld-mmix/loc10.s | 1 + ld/testsuite/ld-mmix/loc10m.d | 10 + ld/testsuite/ld-mmix/loc8.d | 13 + ld/testsuite/ld-mmix/loc8.s | 3 + ld/testsuite/ld-mmix/loc8m.d | 10 + ld/testsuite/ld-mmix/loc9.d | 13 + ld/testsuite/ld-mmix/loc9.s | 3 + ld/testsuite/ld-mmix/loc9m.d | 14 + ld/testsuite/ld-mmix/mmix.exp | 2 +- ld/testsuite/ld-mmix/x.s | 9 +- ld/testsuite/ld-mmix/y.s | 6 +- ld/testsuite/ld-mmix/zeroeh.ld | 2 +- ld/testsuite/ld-mmix/zeroehelf.d | 2 +- ld/testsuite/ld-mmix/zeroehmmo.d | 2 +- ld/testsuite/ld-mn10300/i112045-1.d | 22 + ld/testsuite/ld-mn10300/i112045-1.s | 14 + ld/testsuite/ld-mn10300/i112045-2.d | 6 + ld/testsuite/ld-mn10300/i112045-2.s | 12 + ld/testsuite/ld-mn10300/i112045-3.d | 17 + ld/testsuite/ld-mn10300/i112045-3.s | 11 + ld/testsuite/ld-mn10300/i126256-1.c | 7 + ld/testsuite/ld-mn10300/i126256-2.c | 5 + ld/testsuite/ld-mn10300/i127740.d | 17 + ld/testsuite/ld-mn10300/i127740.s | 12 + ld/testsuite/ld-mn10300/i135409-1.d | 11 + ld/testsuite/ld-mn10300/i135409-1.s | 29 + ld/testsuite/ld-mn10300/i135409-2.d | 11 + ld/testsuite/ld-mn10300/i135409-2.s | 23 + ld/testsuite/ld-mn10300/i135409-3.d | 16 + ld/testsuite/ld-mn10300/i135409-3.s | 16 + ld/testsuite/ld-mn10300/i135409-4.d | 7 + ld/testsuite/ld-mn10300/i135409-4.s | 8 + ld/testsuite/ld-mn10300/i135409-4.t | 23 + ld/testsuite/ld-mn10300/i135409-5.d | 7 + ld/testsuite/ld-mn10300/i135409-5.s | 8 + ld/testsuite/ld-mn10300/i135409-5.t | 23 + ld/testsuite/ld-mn10300/i143317.d | 8 + ld/testsuite/ld-mn10300/i143317.s | 36 + ld/testsuite/ld-mn10300/i143317.t | 31 + ld/testsuite/ld-mn10300/i36434-2.s | 16 + ld/testsuite/ld-mn10300/i36434.d | 16 + ld/testsuite/ld-mn10300/i36434.s | 10 + ld/testsuite/ld-mn10300/mn10300.exp | 163 + ld/testsuite/ld-pe/aligncomm-1.c | 26 + ld/testsuite/ld-pe/aligncomm-2.c | 27 + ld/testsuite/ld-pe/aligncomm-3.c | 28 + ld/testsuite/ld-pe/aligncomm-4.c | 29 + ld/testsuite/ld-pe/aligncomm.d | 3 + ld/testsuite/ld-pe/export_dynamic_warning.d | 5 + ld/testsuite/ld-pe/export_dynamic_warning.s | 4 + ld/testsuite/ld-pe/exports.d | 4 + ld/testsuite/ld-pe/exports.s | 2 + ld/testsuite/ld-pe/exports64.d | 4 + ld/testsuite/ld-pe/image_size.d | 2 +- ld/testsuite/ld-pe/longsecn-1.d | 22 + ld/testsuite/ld-pe/longsecn-2.d | 21 + ld/testsuite/ld-pe/longsecn-3.d | 41 + ld/testsuite/ld-pe/longsecn-4.d | 41 + ld/testsuite/ld-pe/longsecn-5.d | 41 + ld/testsuite/ld-pe/longsecn.d | 22 + ld/testsuite/ld-pe/longsecn.s | 44 + ld/testsuite/ld-pe/non-c-lang-syms.d | 10 + ld/testsuite/ld-pe/non-c-lang-syms.s | 15 + ld/testsuite/ld-pe/orphan.d | 13 + ld/testsuite/ld-pe/orphana.s | 8 + ld/testsuite/ld-pe/orphanb.s | 2 + ld/testsuite/ld-pe/orphand.s | 2 + ld/testsuite/ld-pe/orphane.s | 2 + ld/testsuite/ld-pe/pe-compile.exp | 91 + ld/testsuite/ld-pe/{direct.exp => pe-run.exp} | 23 +- ld/testsuite/ld-pe/pe.exp | 124 +- ld/testsuite/ld-pe/vers-script-1.d | 153 + ld/testsuite/ld-pe/vers-script-1.ver | 5 + ld/testsuite/ld-pe/vers-script-2.d | 0 ld/testsuite/ld-pe/vers-script-2.ver | 5 + ld/testsuite/ld-pe/vers-script-3.d | 77 + ld/testsuite/ld-pe/vers-script-3.ver | 7 + ld/testsuite/ld-pe/vers-script-4.d | 77 + ld/testsuite/ld-pe/vers-script-4.ver | 10 + ld/testsuite/ld-pe/vers-script-dll.c | 156 + ld/testsuite/ld-pie/pie.exp | 13 +- ld/testsuite/ld-pie/start.d | 8 + ld/testsuite/ld-pie/start.s | 4 + ld/testsuite/ld-powerpc/aix-abs-branch-1.dd | 14 + ld/testsuite/ld-powerpc/aix-abs-branch-1.ex | 1 + ld/testsuite/ld-powerpc/aix-abs-branch-1.im | 1 + ld/testsuite/ld-powerpc/aix-abs-branch-1.nd | 3 + ld/testsuite/ld-powerpc/aix-abs-branch-1.s | 14 + ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex | 1 + ld/testsuite/ld-powerpc/aix-abs-reloc-1.im | 1 + ld/testsuite/ld-powerpc/aix-abs-reloc-1.nd | 3 + ld/testsuite/ld-powerpc/aix-abs-reloc-1.od | 7 + ld/testsuite/ld-powerpc/aix-abs-reloc-1.s | 4 + ld/testsuite/ld-powerpc/aix-core-sec-1.ex | 1 + ld/testsuite/ld-powerpc/aix-core-sec-1.hd | 11 + ld/testsuite/ld-powerpc/aix-core-sec-1.s | 5 + ld/testsuite/ld-powerpc/aix-core-sec-2.ex | 1 + ld/testsuite/ld-powerpc/aix-core-sec-2.hd | 11 + ld/testsuite/ld-powerpc/aix-core-sec-2.s | 5 + ld/testsuite/ld-powerpc/aix-core-sec-3.ex | 1 + ld/testsuite/ld-powerpc/aix-core-sec-3.hd | 11 + ld/testsuite/ld-powerpc/aix-core-sec-3.s | 1 + ld/testsuite/ld-powerpc/aix-export-1-all.dd | 11 + ld/testsuite/ld-powerpc/aix-export-1-full.dd | 21 + ld/testsuite/ld-powerpc/aix-export-1a.s | 14 + ld/testsuite/ld-powerpc/aix-export-1b.s | 9 + ld/testsuite/ld-powerpc/aix-export-2.nd | 1 + ld/testsuite/ld-powerpc/aix-export-2.s | 1 + ld/testsuite/ld-powerpc/aix-gc-1-32.dd | 67 + ld/testsuite/ld-powerpc/aix-gc-1-64.dd | 81 + ld/testsuite/ld-powerpc/aix-gc-1.ex | 1 + ld/testsuite/ld-powerpc/aix-gc-1.nd | 3 + ld/testsuite/ld-powerpc/aix-gc-1.s | 55 + ld/testsuite/ld-powerpc/aix-glink-1-32.d | 5 + ld/testsuite/ld-powerpc/aix-glink-1-32.dd | 44 + ld/testsuite/ld-powerpc/aix-glink-1-64.d | 5 + ld/testsuite/ld-powerpc/aix-glink-1-64.dd | 49 + ld/testsuite/ld-powerpc/aix-glink-1.ex | 2 + ld/testsuite/ld-powerpc/aix-glink-1.s | 21 + ld/testsuite/ld-powerpc/aix-glink-2-32.dd | 69 + ld/testsuite/ld-powerpc/aix-glink-2-64.dd | 73 + ld/testsuite/ld-powerpc/aix-glink-2a.ex | 9 + ld/testsuite/ld-powerpc/aix-glink-2a.s | 41 + ld/testsuite/ld-powerpc/aix-glink-2b.s | 12 + ld/testsuite/ld-powerpc/aix-glink-2c.ex | 6 + ld/testsuite/ld-powerpc/aix-glink-2c.s | 33 + ld/testsuite/ld-powerpc/aix-glink-2d.s | 12 + ld/testsuite/ld-powerpc/aix-glink-3-32.d | 5 + ld/testsuite/ld-powerpc/aix-glink-3-64.d | 5 + ld/testsuite/ld-powerpc/aix-glink-3.dd | 14 + ld/testsuite/ld-powerpc/aix-glink-3.s | 5 + ld/testsuite/ld-powerpc/aix-glink-3a.s | 10 + ld/testsuite/ld-powerpc/aix-glink-3b.s | 11 + ld/testsuite/ld-powerpc/aix-lineno-1.s | 25 + ld/testsuite/ld-powerpc/aix-lineno-1.txt | 8 + ld/testsuite/ld-powerpc/aix-lineno-1a.dd | 24 + ld/testsuite/ld-powerpc/aix-lineno-1a.nd | 8 + ld/testsuite/ld-powerpc/aix-lineno-1b.dd | 16 + ld/testsuite/ld-powerpc/aix-lineno-1b.nd | 3 + .../ld-powerpc/aix-no-dup-syms-1-dso.dnd | 4 + .../ld-powerpc/aix-no-dup-syms-1-dso.drd | 9 + .../ld-powerpc/aix-no-dup-syms-1-dso.nd | 8 + .../ld-powerpc/aix-no-dup-syms-1-dso.rd | 9 + .../ld-powerpc/aix-no-dup-syms-1-rel.nd | 8 + .../ld-powerpc/aix-no-dup-syms-1-rel.rd | 9 + ld/testsuite/ld-powerpc/aix-no-dup-syms-1.ex | 3 + ld/testsuite/ld-powerpc/aix-no-dup-syms-1.im | 1 + ld/testsuite/ld-powerpc/aix-no-dup-syms-1a.s | 9 + ld/testsuite/ld-powerpc/aix-no-dup-syms-1b.s | 9 + ld/testsuite/ld-powerpc/aix-rel-1.od | 22 + ld/testsuite/ld-powerpc/aix-rel-1.s | 5 + ld/testsuite/ld-powerpc/aix-toc-1-32.dd | 12 + ld/testsuite/ld-powerpc/aix-toc-1-64.dd | 12 + ld/testsuite/ld-powerpc/aix-toc-1.ex | 2 + ld/testsuite/ld-powerpc/aix-toc-1a.s | 23 + ld/testsuite/ld-powerpc/aix-toc-1b.s | 23 + ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd | 17 + ld/testsuite/ld-powerpc/aix-weak-1-dso.hd | 12 + ld/testsuite/ld-powerpc/aix-weak-1-dso.nd | 25 + ld/testsuite/ld-powerpc/aix-weak-1-gcdso.dnd | 17 + ld/testsuite/ld-powerpc/aix-weak-1-gcdso.hd | 12 + ld/testsuite/ld-powerpc/aix-weak-1-gcdso.nd | 22 + ld/testsuite/ld-powerpc/aix-weak-1-rel.hd | 12 + ld/testsuite/ld-powerpc/aix-weak-1-rel.nd | 25 + ld/testsuite/ld-powerpc/aix-weak-1.ex | 8 + ld/testsuite/ld-powerpc/aix-weak-1a.s | 24 + ld/testsuite/ld-powerpc/aix-weak-1b.s | 24 + ld/testsuite/ld-powerpc/aix-weak-2a.ex | 8 + ld/testsuite/ld-powerpc/aix-weak-2a.nd | 8 + ld/testsuite/ld-powerpc/aix-weak-2a.s | 21 + ld/testsuite/ld-powerpc/aix-weak-2b.nd | 8 + ld/testsuite/ld-powerpc/aix-weak-2b.s | 21 + ld/testsuite/ld-powerpc/aix-weak-2c.ex | 1 + ld/testsuite/ld-powerpc/aix-weak-2c.nd | 10 + ld/testsuite/ld-powerpc/aix-weak-2c.od | 13 + ld/testsuite/ld-powerpc/aix-weak-2c.s | 11 + ld/testsuite/ld-powerpc/aix-weak-3-32.d | 5 + ld/testsuite/ld-powerpc/aix-weak-3-32.dd | 24 + ld/testsuite/ld-powerpc/aix-weak-3-64.d | 5 + ld/testsuite/ld-powerpc/aix-weak-3-64.dd | 26 + ld/testsuite/ld-powerpc/aix-weak-3a.ex | 3 + ld/testsuite/ld-powerpc/aix-weak-3a.s | 8 + ld/testsuite/ld-powerpc/aix-weak-3b.ex | 1 + ld/testsuite/ld-powerpc/aix-weak-3b.s | 30 + ld/testsuite/ld-powerpc/aix52.exp | 260 + ld/testsuite/ld-powerpc/attr-gnu-12-1.s | 1 + ld/testsuite/ld-powerpc/attr-gnu-12-11.d | 10 + ld/testsuite/ld-powerpc/attr-gnu-12-2.s | 1 + ld/testsuite/ld-powerpc/attr-gnu-12-21.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-4-03.d | 10 + ld/testsuite/ld-powerpc/attr-gnu-4-13.d | 2 +- ld/testsuite/ld-powerpc/attr-gnu-4-14.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-4-23.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-4-24.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-4-31.d | 2 +- ld/testsuite/ld-powerpc/attr-gnu-4-32.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-4-33.d | 10 + ld/testsuite/ld-powerpc/attr-gnu-4-34.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-4-4.s | 1 + ld/testsuite/ld-powerpc/attr-gnu-4-41.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-8-1.s | 1 + ld/testsuite/ld-powerpc/attr-gnu-8-11.d | 10 + ld/testsuite/ld-powerpc/attr-gnu-8-2.s | 1 + ld/testsuite/ld-powerpc/attr-gnu-8-23.d | 6 + ld/testsuite/ld-powerpc/attr-gnu-8-3.s | 1 + ld/testsuite/ld-powerpc/attr-gnu-8-31.d | 10 + ld/testsuite/ld-powerpc/oldtlslib.s | 29 + ld/testsuite/ld-powerpc/powerpc.exp | 50 +- ld/testsuite/ld-powerpc/relax.d | 15 + ld/testsuite/ld-powerpc/relax.s | 6 + ld/testsuite/ld-powerpc/relaxr.d | 25 + ld/testsuite/ld-powerpc/relbrlt.d | 18 +- ld/testsuite/ld-powerpc/tlsexe.d | 25 +- ld/testsuite/ld-powerpc/tlsexe.g | 2 +- ld/testsuite/ld-powerpc/tlsexe.r | 50 +- ld/testsuite/ld-powerpc/tlsexe32.d | 4 +- ld/testsuite/ld-powerpc/tlsexe32.g | 2 +- ld/testsuite/ld-powerpc/tlsexe32.r | 44 +- ld/testsuite/ld-powerpc/tlsexetoc.d | 29 +- ld/testsuite/ld-powerpc/tlsexetoc.g | 2 +- ld/testsuite/ld-powerpc/tlsexetoc.r | 50 +- ld/testsuite/ld-powerpc/tlslib.s | 11 +- ld/testsuite/ld-powerpc/tlslib32.s | 4 +- ld/testsuite/ld-powerpc/tlsmark.d | 42 + ld/testsuite/ld-powerpc/tlsmark.s | 55 + ld/testsuite/ld-powerpc/tlsmark32.d | 29 + ld/testsuite/ld-powerpc/tlsmark32.s | 27 + ld/testsuite/ld-powerpc/tlsso.d | 35 +- ld/testsuite/ld-powerpc/tlsso.r | 46 +- ld/testsuite/ld-powerpc/tlsso32.d | 14 +- ld/testsuite/ld-powerpc/tlsso32.r | 36 +- ld/testsuite/ld-powerpc/tlstocso.d | 11 +- ld/testsuite/ld-powerpc/tlstocso.r | 42 +- ld/testsuite/ld-powerpc/vxworks-relax-2.rd | 11 + ld/testsuite/ld-powerpc/vxworks-relax-2.s | 14 + ld/testsuite/ld-powerpc/vxworks-relax.rd | 9 + ld/testsuite/ld-powerpc/vxworks-relax.s | 13 + ld/testsuite/ld-powerpc/vxworks1-lib.rd | 10 +- ld/testsuite/ld-powerpc/vxworks1.ld | 2 +- ld/testsuite/ld-powerpc/vxworks1.rd | 4 +- ld/testsuite/ld-s390/s390.exp | 2 +- ld/testsuite/ld-s390/tlsbin.rd | 40 +- ld/testsuite/ld-s390/tlsbin_64.rd | 40 +- ld/testsuite/ld-s390/tlspic.rd | 38 +- ld/testsuite/ld-s390/tlspic_64.rd | 38 +- ld/testsuite/ld-scripts/align.exp | 6 - ld/testsuite/ld-scripts/alignof.exp | 4 +- ld/testsuite/ld-scripts/assert.exp | 2 +- ld/testsuite/ld-scripts/crossref.exp | 23 +- ld/testsuite/ld-scripts/data.exp | 2 +- ld/testsuite/ld-scripts/default-script.exp | 4 +- ld/testsuite/ld-scripts/default-script.s | 1 + ld/testsuite/ld-scripts/default-script1.d | 2 +- ld/testsuite/ld-scripts/default-script2.d | 2 +- ld/testsuite/ld-scripts/default-script3.d | 2 +- ld/testsuite/ld-scripts/default-script4.d | 2 +- ld/testsuite/ld-scripts/defined.exp | 2 +- ld/testsuite/ld-scripts/defined.s | 2 +- ld/testsuite/ld-scripts/empty-address-1.d | 1 + ld/testsuite/ld-scripts/empty-address-2a.d | 1 + ld/testsuite/ld-scripts/empty-address-2b.d | 1 + ld/testsuite/ld-scripts/empty-address-3a.d | 1 + ld/testsuite/ld-scripts/empty-address-3b.d | 1 + ld/testsuite/ld-scripts/empty-address.exp | 6 +- ld/testsuite/ld-scripts/empty-aligned.d | 1 + ld/testsuite/ld-scripts/empty-orphan.exp | 7 +- ld/testsuite/ld-scripts/include-1.d | 13 + ld/testsuite/ld-scripts/include-1.t | 4 + ld/testsuite/ld-scripts/include-data.t | 4 + ld/testsuite/ld-scripts/include-mem.t | 5 + ld/testsuite/ld-scripts/include-ram.t | 1 + ld/testsuite/ld-scripts/include-sections.t | 5 + ld/testsuite/ld-scripts/include-subdata.t | 2 + ld/testsuite/ld-scripts/include.exp | 40 + ld/testsuite/ld-scripts/include.s | 5 + ld/testsuite/ld-scripts/map-address.d | 2 + ld/testsuite/ld-scripts/map-address.exp | 11 +- ld/testsuite/ld-scripts/map-address.t | 2 + ld/testsuite/ld-scripts/memory.t | 10 +- ld/testsuite/ld-scripts/overlay-size-map.d | 6 + ld/testsuite/ld-scripts/overlay-size.exp | 2 +- ld/testsuite/ld-scripts/overlay-size.t | 6 + ld/testsuite/ld-scripts/phdrs.exp | 8 +- ld/testsuite/ld-scripts/phdrs2.exp | 7 +- ld/testsuite/ld-scripts/provide.exp | 2 +- ld/testsuite/ld-scripts/region-alias-1.t | 7 + ld/testsuite/ld-scripts/region-alias-2.t | 6 + ld/testsuite/ld-scripts/region-alias-3.t | 6 + ld/testsuite/ld-scripts/region-alias-4.t | 6 + ld/testsuite/ld-scripts/rgn-at.exp | 33 + ld/testsuite/ld-scripts/rgn-at.s | 6 + ld/testsuite/ld-scripts/rgn-at1.d | 12 + ld/testsuite/ld-scripts/rgn-at1.t | 13 + ld/testsuite/ld-scripts/rgn-at2.d | 12 + ld/testsuite/ld-scripts/rgn-at2.t | 14 + ld/testsuite/ld-scripts/rgn-at3.d | 12 + ld/testsuite/ld-scripts/rgn-at3.t | 13 + ld/testsuite/ld-scripts/rgn-at4.d | 13 + ld/testsuite/ld-scripts/rgn-at4.t | 14 + ld/testsuite/ld-scripts/rgn-over.exp | 54 + ld/testsuite/ld-scripts/rgn-over.s | 9 + ld/testsuite/ld-scripts/rgn-over1.d | 35 + ld/testsuite/ld-scripts/rgn-over1.t | 13 + ld/testsuite/ld-scripts/rgn-over2.d | 35 + ld/testsuite/ld-scripts/rgn-over2.t | 14 + ld/testsuite/ld-scripts/rgn-over3.d | 36 + ld/testsuite/ld-scripts/rgn-over3.t | 15 + ld/testsuite/ld-scripts/rgn-over4.d | 36 + ld/testsuite/ld-scripts/rgn-over4.t | 14 + ld/testsuite/ld-scripts/rgn-over5.d | 36 + ld/testsuite/ld-scripts/rgn-over5.t | 14 + ld/testsuite/ld-scripts/rgn-over6.d | 36 + ld/testsuite/ld-scripts/rgn-over6.t | 14 + ld/testsuite/ld-scripts/rgn-over7.d | 36 + ld/testsuite/ld-scripts/rgn-over7.t | 14 + ld/testsuite/ld-scripts/rgn-over8-ok.d | 12 + ld/testsuite/ld-scripts/rgn-over8.s | 7 + ld/testsuite/ld-scripts/rgn-over8.t | 13 + ld/testsuite/ld-scripts/script.exp | 12 +- ld/testsuite/ld-scripts/size.exp | 2 +- ld/testsuite/ld-scripts/sizeof.exp | 2 +- ld/testsuite/ld-scripts/sort.exp | 2 +- ld/testsuite/ld-scripts/sort_b_a-1.d | 5 + ld/testsuite/ld-scripts/sort_b_a.d | 5 + ld/testsuite/ld-scripts/sort_b_a_a-1.d | 9 + ld/testsuite/ld-scripts/sort_b_a_a-2.d | 9 + ld/testsuite/ld-scripts/sort_b_a_a-3.d | 9 + ld/testsuite/ld-scripts/sort_b_a_n-1.d | 9 + ld/testsuite/ld-scripts/sort_b_a_n-2.d | 9 + ld/testsuite/ld-scripts/sort_b_a_n-3.d | 9 + ld/testsuite/ld-scripts/sort_b_n-1.d | 5 + ld/testsuite/ld-scripts/sort_b_n.d | 5 + ld/testsuite/ld-scripts/sort_b_n_a-1.d | 9 + ld/testsuite/ld-scripts/sort_b_n_a-2.d | 9 + ld/testsuite/ld-scripts/sort_b_n_a-3.d | 9 + ld/testsuite/ld-scripts/sort_b_n_n-1.d | 9 + ld/testsuite/ld-scripts/sort_b_n_n-2.d | 9 + ld/testsuite/ld-scripts/sort_b_n_n-3.d | 9 + ld/testsuite/ld-scripts/sort_no-1.d | 5 + ld/testsuite/ld-scripts/sort_no-2.d | 5 + ld/testsuite/ld-scripts/weak.exp | 9 +- ld/testsuite/ld-selective/sel-dump.exp | 8 +- ld/testsuite/ld-selective/selective.exp | 46 +- ld/testsuite/ld-sh/arch/arch.exp | 2 +- ld/testsuite/ld-sh/arch/arch_expected.txt | 50 +- ld/testsuite/ld-sh/arch/sh-dsp.s | 6 +- ld/testsuite/ld-sh/arch/sh.s | 6 +- ld/testsuite/ld-sh/arch/sh2.s | 6 +- .../ld-sh/arch/sh2a-nofpu-or-sh3-nommu.s | 6 +- .../arch/sh2a-nofpu-or-sh4-nommu-nofpu.s | 6 +- ld/testsuite/ld-sh/arch/sh2a-nofpu.s | 6 +- ld/testsuite/ld-sh/arch/sh2a-or-sh3e.s | 6 +- ld/testsuite/ld-sh/arch/sh2a-or-sh4.s | 6 +- ld/testsuite/ld-sh/arch/sh2a.s | 6 +- ld/testsuite/ld-sh/arch/sh2e.s | 6 +- ld/testsuite/ld-sh/arch/sh3-dsp.s | 6 +- ld/testsuite/ld-sh/arch/sh3-nommu.s | 6 +- ld/testsuite/ld-sh/arch/sh3.s | 6 +- ld/testsuite/ld-sh/arch/sh3e.s | 6 +- ld/testsuite/ld-sh/arch/sh4-nofpu.s | 6 +- ld/testsuite/ld-sh/arch/sh4-nommu-nofpu.s | 6 +- ld/testsuite/ld-sh/arch/sh4.s | 6 +- ld/testsuite/ld-sh/arch/sh4a-nofpu.s | 6 +- ld/testsuite/ld-sh/arch/sh4a.s | 6 +- ld/testsuite/ld-sh/arch/sh4al-dsp.s | 6 +- ld/testsuite/ld-sh/rd-sh.exp | 2 +- ld/testsuite/ld-sh/sh-vxworks.exp | 2 +- ld/testsuite/ld-sh/sh.exp | 2 +- ld/testsuite/ld-sh/sh64/crangerel1.rd | 1 + ld/testsuite/ld-sh/sh64/crangerel2.rd | 1 + ld/testsuite/ld-sh/sh64/rd-sh64.exp | 2 +- ld/testsuite/ld-sh/sh64/relax.exp | 2 +- ld/testsuite/ld-sh/sh64/reldl32.rd | 2 + ld/testsuite/ld-sh/sh64/reldl64.rd | 2 + ld/testsuite/ld-sh/sh64/relfail.exp | 2 +- ld/testsuite/ld-sh/sh64/sh64.exp | 2 +- ld/testsuite/ld-shared/main.c | 38 +- ld/testsuite/ld-shared/sh1.c | 6 - ld/testsuite/ld-shared/sh2.c | 8 + ld/testsuite/ld-shared/shared.exp | 2 +- ld/testsuite/ld-sparc/gotop32.dd | 28 + ld/testsuite/ld-sparc/gotop32.rd | 70 + ld/testsuite/ld-sparc/gotop32.s | 28 + ld/testsuite/ld-sparc/gotop32.sd | 10 + ld/testsuite/ld-sparc/gotop32.td | 12 + ld/testsuite/ld-sparc/gotop64.dd | 28 + ld/testsuite/ld-sparc/gotop64.rd | 70 + ld/testsuite/ld-sparc/gotop64.s | 28 + ld/testsuite/ld-sparc/gotop64.sd | 10 + ld/testsuite/ld-sparc/gotop64.td | 12 + ld/testsuite/ld-sparc/sparc.exp | 12 +- ld/testsuite/ld-sparc/tlssunbin32.rd | 34 +- ld/testsuite/ld-sparc/tlssunbin64.rd | 34 +- ld/testsuite/ld-sparc/tlssunnopic32.dd | 2 +- ld/testsuite/ld-sparc/tlssunnopic32.rd | 32 +- ld/testsuite/ld-sparc/tlssunnopic32.sd | 2 +- ld/testsuite/ld-sparc/tlssunnopic64.dd | 2 +- ld/testsuite/ld-sparc/tlssunnopic64.rd | 32 +- ld/testsuite/ld-sparc/tlssunnopic64.sd | 2 +- ld/testsuite/ld-sparc/tlssunpic32.rd | 38 +- ld/testsuite/ld-sparc/tlssunpic64.rd | 38 +- ld/testsuite/ld-spu/ear.s | 3 + ld/testsuite/ld-spu/embed.rd | 24 +- ld/testsuite/ld-spu/fixup.d | 20 + ld/testsuite/ld-spu/fixup.s | 24 + ld/testsuite/ld-spu/icache1.d | 193 + ld/testsuite/ld-spu/icache1.s | 111 + ld/testsuite/ld-spu/ovl.d | 205 +- ld/testsuite/ld-spu/ovl.lnk | 7 - ld/testsuite/ld-spu/ovl1.lnk | 9 + ld/testsuite/ld-spu/ovl2.d | 160 +- ld/testsuite/ld-spu/ovl2.lnk | 10 + ld/testsuite/ld-spu/ovl2.s | 17 + ld/testsuite/ld-spu/pic.d | 105 + ld/testsuite/ld-spu/pic.s | 68 + ld/testsuite/ld-spu/picdef.s | 5 + ld/testsuite/ld-srec/srec.exp | 55 +- ld/testsuite/ld-undefined/dummy.s | 2 + ld/testsuite/ld-undefined/entry-1.d | 8 + ld/testsuite/ld-undefined/entry-2.d | 8 + ld/testsuite/ld-undefined/entry-3.d | 9 + ld/testsuite/ld-undefined/entry-4.d | 9 + ld/testsuite/ld-undefined/entry-5.d | 8 + ld/testsuite/ld-undefined/entry-6.d | 8 + ld/testsuite/ld-undefined/entry.exp | 35 + ld/testsuite/ld-undefined/entry.s | 4 + ld/testsuite/ld-undefined/undefined.exp | 18 +- ld/testsuite/ld-undefined/weak-undef.exp | 7 +- ld/testsuite/ld-versados/versados.exp | 2 +- ld/testsuite/ld-vxworks/plt-mips1.d | 10 + ld/testsuite/ld-vxworks/plt-mips1.s | 1 + ld/testsuite/ld-vxworks/tls-1.d | 25 + ld/testsuite/ld-vxworks/tls-1.s | 19 + ld/testsuite/ld-vxworks/tls-2.d | 11 + ld/testsuite/ld-vxworks/tls-2.s | 19 + ld/testsuite/ld-vxworks/tls-3.d | 7 + ld/testsuite/ld-vxworks/tls-3.s | 34 + ld/testsuite/ld-x86-64/abs-l1om.d | 11 + ld/testsuite/ld-x86-64/dwarfreloc.exp | 86 + ld/testsuite/ld-x86-64/dwarfreloc.rd | 17 + ld/testsuite/ld-x86-64/dwarfreloc1.s | 101 + ld/testsuite/ld-x86-64/dwarfreloc2.s | 94 + ld/testsuite/ld-x86-64/hidden1.d | 3 + ld/testsuite/ld-x86-64/hidden1.s | 9 + ld/testsuite/ld-x86-64/hidden2.d | 13 + ld/testsuite/ld-x86-64/hidden2.s | 9 + ld/testsuite/ld-x86-64/hidden3.d | 3 + ld/testsuite/ld-x86-64/hidden3.s | 8 + ld/testsuite/ld-x86-64/line.exp | 57 + ld/testsuite/ld-x86-64/protected1.d | 3 + ld/testsuite/ld-x86-64/protected1.s | 13 + ld/testsuite/ld-x86-64/protected2-l1om.d | 17 + ld/testsuite/ld-x86-64/protected2.d | 16 + ld/testsuite/ld-x86-64/protected2.s | 13 + ld/testsuite/ld-x86-64/protected3-l1om.d | 16 + ld/testsuite/ld-x86-64/protected3.d | 13 + ld/testsuite/ld-x86-64/protected3.s | 15 + ld/testsuite/ld-x86-64/tlsbin.rd | 42 +- ld/testsuite/ld-x86-64/tlsbindesc.dd | 2 +- ld/testsuite/ld-x86-64/tlsbindesc.rd | 40 +- ld/testsuite/ld-x86-64/tlsdesc.rd | 40 +- ld/testsuite/ld-x86-64/tlsgd1.dd | 14 + ld/testsuite/ld-x86-64/tlsgd1.s | 15 + ld/testsuite/ld-x86-64/tlsgd2.d | 4 + ld/testsuite/ld-x86-64/tlsgd2.s | 5 + ld/testsuite/ld-x86-64/tlsgd3.d | 4 + ld/testsuite/ld-x86-64/tlsgd3.s | 11 + ld/testsuite/ld-x86-64/tlsgdesc.rd | 34 +- ld/testsuite/ld-x86-64/tlsie1.dd | 16 + ld/testsuite/ld-x86-64/tlsie1.s | 14 + ld/testsuite/ld-x86-64/tlsie2.d | 4 + ld/testsuite/ld-x86-64/tlsie2.s | 12 + ld/testsuite/ld-x86-64/tlsie3.d | 4 + ld/testsuite/ld-x86-64/tlsie3.s | 12 + ld/testsuite/ld-x86-64/tlsld1.dd | 13 + ld/testsuite/ld-x86-64/tlsld1.s | 12 + ld/testsuite/ld-x86-64/tlsle1.d | 6 + ld/testsuite/ld-x86-64/tlsle1.s | 11 + ld/testsuite/ld-x86-64/tlspic.rd | 40 +- ld/testsuite/ld-x86-64/tlspie1.d | 6 + ld/testsuite/ld-x86-64/tlspie1.s | 58 + ld/testsuite/ld-x86-64/undefined.s | 154 + ld/testsuite/ld-x86-64/x86-64.exp | 26 +- ld/testsuite/ld-xc16x/xc16x.exp | 2 +- ld/testsuite/ld-xstormy16/xstormy16.exp | 2 +- ld/testsuite/ld-xtensa/coalesce.exp | 4 +- ld/testsuite/ld-xtensa/lcall.exp | 4 +- ld/testsuite/ld-xtensa/tlsbin.dd | 65 + ld/testsuite/ld-xtensa/tlsbin.rd | 118 + ld/testsuite/ld-xtensa/tlsbin.s | 98 + ld/testsuite/ld-xtensa/tlsbin.sd | 14 + ld/testsuite/ld-xtensa/tlsbin.td | 14 + ld/testsuite/ld-xtensa/tlslib.s | 18 + ld/testsuite/ld-xtensa/tlspic.dd | 81 + ld/testsuite/ld-xtensa/tlspic.rd | 142 + ld/testsuite/ld-xtensa/tlspic.sd | 17 + ld/testsuite/ld-xtensa/tlspic.td | 16 + ld/testsuite/ld-xtensa/tlspic1.s | 120 + ld/testsuite/ld-xtensa/tlspic2.s | 12 + ld/testsuite/ld-xtensa/xtensa.exp | 54 + ld/testsuite/lib/ld-lib.exp | 437 +- libiberty/ChangeLog | 490 +- libiberty/Makefile.in | 263 +- libiberty/aclocal.m4 | 1 + libiberty/config.h-vms | 25 +- libiberty/config.in | 34 +- libiberty/configure | 12650 +++--- libiberty/configure.ac | 112 +- libiberty/configure.com | 38 + libiberty/cp-demangle.c | 703 +- libiberty/cp-demangle.h | 2 +- libiberty/cplus-dem.c | 41 +- libiberty/crc32.c | 180 + libiberty/fibheap.c | 10 +- libiberty/floatformat.c | 206 +- libiberty/functions.texi | 76 +- libiberty/hashtab.c | 10 +- libiberty/libiberty.texi | 2 +- libiberty/maint-tool | 4 +- libiberty/make-relative-prefix.c | 53 +- libiberty/make-temp-file.c | 106 +- libiberty/makefile.vms | 24 +- libiberty/md5.c | 3 +- libiberty/memmem.c | 70 + libiberty/mkstemps.c | 7 + libiberty/obstacks.texi | 16 +- libiberty/pex-common.c | 4 +- libiberty/pex-common.h | 12 +- libiberty/pex-djgpp.c | 42 +- libiberty/pex-msdos.c | 16 +- libiberty/pex-unix.c | 63 +- libiberty/pex-win32.c | 115 +- libiberty/pexecute.txh | 4 +- libiberty/regex.c | 26 +- {ld => libiberty}/sha1.c | 247 +- libiberty/snprintf.c | 16 +- libiberty/splay-tree.c | 4 +- libiberty/strsignal.c | 14 +- libiberty/testsuite/Makefile.in | 3 +- libiberty/testsuite/demangle-expected | 64 +- libiberty/testsuite/test-demangle.c | 10 +- libiberty/vmsbuild.com | 165 - libiberty/vsnprintf.c | 16 +- libiberty/xstrdup.c | 2 +- libtool.m4 | 990 +- ltgcc.m4 | 2 +- ltmain.sh | 10720 +++-- ltoptions.m4 | 172 +- ltsugar.m4 | 64 +- ltversion.m4 | 18 +- lt~obsolete.m4 | 9 +- md5.sum | 10283 +++++ missing | 104 +- mkinstalldirs | 8 +- opcodes/ChangeLog | 1478 +- opcodes/ChangeLog-2007 | 1863 + opcodes/ChangeLog-2008 | 1204 + opcodes/Makefile.am | 1034 +- opcodes/Makefile.in | 1541 +- opcodes/aclocal.m4 | 476 +- opcodes/alpha-dis.c | 2 +- opcodes/arc-dis.h | 2 +- opcodes/arc-opc.c | 2 +- opcodes/arm-dis.c | 1666 +- opcodes/avr-dis.c | 10 +- opcodes/bfin-dis.c | 1878 +- opcodes/cgen-asm.c | 2 +- opcodes/cgen-asm.in | 2 +- opcodes/cgen-dis.c | 2 +- opcodes/cgen-dis.in | 4 +- opcodes/cgen-ibld.in | 4 +- opcodes/cgen-opc.c | 7 +- opcodes/cgen.sh | 87 +- opcodes/config.in | 42 + opcodes/configure | 12651 +++--- opcodes/configure.com | 51 + opcodes/configure.in | 127 +- opcodes/cr16-dis.c | 17 +- opcodes/cr16-opc.c | 9 +- opcodes/cris-dis.c | 13 +- opcodes/cris-opc.c | 2 +- opcodes/crx-dis.c | 4 +- opcodes/crx-opc.c | 2 +- opcodes/d10v-opc.c | 2 +- opcodes/dep-in.sed | 12 +- opcodes/dis-buf.c | 2 +- opcodes/dis-init.c | 3 +- opcodes/disassemble.c | 24 +- opcodes/fr30-asm.c | 2 +- opcodes/fr30-desc.c | 2 +- opcodes/fr30-desc.h | 2 +- opcodes/fr30-dis.c | 4 +- opcodes/fr30-ibld.c | 4 +- opcodes/fr30-opc.c | 7 +- opcodes/fr30-opc.h | 2 +- opcodes/frv-asm.c | 2 +- opcodes/frv-desc.c | 2 +- opcodes/frv-desc.h | 2 +- opcodes/frv-dis.c | 4 +- opcodes/frv-ibld.c | 4 +- opcodes/frv-opc.c | 7 +- opcodes/frv-opc.h | 2 +- opcodes/h8500-opc.h | 2 +- opcodes/i386-dis.c | 10866 ++++- opcodes/i386-gen.c | 1097 +- opcodes/i386-init.h | 526 + opcodes/i386-opc.h | 679 +- opcodes/i386-opc.tbl | 3674 +- opcodes/i386-reg.tbl | 384 +- opcodes/i386-tbl.h | 36261 ++++++++++++++-- opcodes/i860-dis.c | 2 +- opcodes/i960-dis.c | 2 +- opcodes/ia64-asmtab.c | 1663 +- opcodes/ia64-asmtab.h | 2 +- opcodes/ia64-dis.c | 64 +- opcodes/ia64-gen.c | 99 +- opcodes/ia64-ic.tbl | 8 +- opcodes/ia64-opc-a.c | 2 +- opcodes/ia64-opc-b.c | 2 +- opcodes/ia64-opc-d.c | 3 +- opcodes/ia64-opc-f.c | 3 +- opcodes/ia64-opc-i.c | 2 +- opcodes/ia64-opc-m.c | 3 +- opcodes/ia64-opc-x.c | 2 +- opcodes/ia64-raw.tbl | 18 +- opcodes/ia64-waw.tbl | 6 +- opcodes/ip2k-asm.c | 2 +- opcodes/ip2k-desc.c | 2 +- opcodes/ip2k-desc.h | 2 +- opcodes/ip2k-dis.c | 4 +- opcodes/ip2k-ibld.c | 4 +- opcodes/ip2k-opc.c | 7 +- opcodes/ip2k-opc.h | 2 +- opcodes/iq2000-asm.c | 2 +- opcodes/iq2000-desc.c | 2 +- opcodes/iq2000-desc.h | 2 +- opcodes/iq2000-dis.c | 4 +- opcodes/iq2000-ibld.c | 4 +- opcodes/iq2000-opc.c | 7 +- opcodes/iq2000-opc.h | 2 +- opcodes/lm32-asm.c | 747 + opcodes/lm32-desc.c | 1183 + opcodes/lm32-desc.h | 246 + opcodes/lm32-dis.c | 576 + opcodes/lm32-ibld.c | 1061 + opcodes/lm32-opc.c | 879 + opcodes/lm32-opc.h | 105 + opcodes/lm32-opinst.c | 473 + opcodes/m10200-opc.c | 2 +- opcodes/m10300-opc.c | 2 +- opcodes/m32c-asm.c | 4 +- opcodes/m32c-desc.c | 2 +- opcodes/m32c-desc.h | 2 +- opcodes/m32c-dis.c | 4 +- opcodes/m32c-ibld.c | 4 +- opcodes/m32c-opc.c | 7 +- opcodes/m32c-opc.h | 2 +- opcodes/m32r-asm.c | 2 +- opcodes/m32r-desc.c | 2 +- opcodes/m32r-desc.h | 2 +- opcodes/m32r-dis.c | 4 +- opcodes/m32r-ibld.c | 4 +- opcodes/m32r-opc.c | 7 +- opcodes/m32r-opc.h | 2 +- opcodes/m32r-opinst.c | 2 +- opcodes/m68hc11-dis.c | 2 +- opcodes/m68hc11-opc.c | 2 +- opcodes/m68k-dis.c | 477 +- opcodes/m68k-opc.c | 16 +- opcodes/m88k-dis.c | 28 +- opcodes/makefile.vms | 38 +- opcodes/mcore-dis.c | 62 +- opcodes/mcore-opc.h | 2 +- opcodes/mep-asm.c | 356 +- opcodes/mep-desc.c | 5075 ++- opcodes/mep-desc.h | 143 +- opcodes/mep-dis.c | 486 +- opcodes/mep-ibld.c | 1403 +- opcodes/mep-opc.c | 4685 +- opcodes/mep-opc.h | 387 +- opcodes/microblaze-dis.c | 527 + opcodes/microblaze-opc.h | 409 + opcodes/microblaze-opcm.h | 139 + opcodes/mips-dis.c | 142 +- opcodes/mips-opc.c | 675 +- opcodes/mips16-opc.c | 3 +- opcodes/mmix-dis.c | 2 +- opcodes/mmix-opc.c | 2 +- opcodes/moxie-dis.c | 198 + opcodes/moxie-opc.c | 149 + opcodes/msp430-dis.c | 2 +- opcodes/mt-asm.c | 4 +- opcodes/mt-desc.c | 2 +- opcodes/mt-desc.h | 2 +- opcodes/mt-dis.c | 4 +- opcodes/mt-ibld.c | 4 +- opcodes/mt-opc.c | 7 +- opcodes/mt-opc.h | 2 +- opcodes/openrisc-asm.c | 2 +- opcodes/openrisc-desc.c | 2 +- opcodes/openrisc-desc.h | 2 +- opcodes/openrisc-dis.c | 4 +- opcodes/openrisc-ibld.c | 4 +- opcodes/openrisc-opc.c | 7 +- opcodes/openrisc-opc.h | 2 +- opcodes/opintl.h | 2 +- opcodes/or32-opc.c | 33 +- opcodes/pdp11-opc.c | 2 +- opcodes/pj-opc.c | 2 +- opcodes/po/.cvsignore | 1 - opcodes/po/Make-in | 3 +- opcodes/po/POTFILES.in | 29 +- opcodes/po/es.gmo | Bin 21084 -> 26049 bytes opcodes/po/es.po | 898 +- opcodes/po/fi.gmo | Bin 23236 -> 26801 bytes opcodes/po/fi.po | 509 +- opcodes/po/fr.gmo | Bin 16408 -> 25584 bytes opcodes/po/fr.po | 1138 +- opcodes/po/ga.gmo | Bin 22384 -> 24028 bytes opcodes/po/ga.po | 252 +- opcodes/po/id.gmo | Bin 8307 -> 23690 bytes opcodes/po/id.po | 1021 +- opcodes/po/nl.gmo | Bin 22221 -> 25505 bytes opcodes/po/nl.po | 446 +- opcodes/po/opcodes.pot | 407 +- opcodes/po/vi.gmo | Bin 24051 -> 27676 bytes opcodes/po/vi.po | 478 +- opcodes/ppc-dis.c | 328 +- opcodes/ppc-opc.c | 6410 +-- opcodes/s390-dis.c | 51 +- opcodes/s390-mkopc.c | 168 +- opcodes/s390-opc.c | 202 +- opcodes/s390-opc.txt | 285 +- opcodes/score-dis.c | 898 +- opcodes/score-opc.h | 462 +- opcodes/score7-dis.c | 971 + opcodes/sh-dis.c | 2 +- opcodes/sh64-opc.c | 2 +- opcodes/sh64-opc.h | 2 +- opcodes/sparc-dis.c | 5 +- opcodes/sparc-opc.c | 138 +- opcodes/sysdep.h | 6 +- opcodes/tic30-dis.c | 9 +- opcodes/tic54x-dis.c | 31 +- opcodes/tic54x-opc.c | 8 +- opcodes/tic80-opc.c | 18 +- opcodes/vax-dis.c | 47 +- opcodes/w65-opc.h | 2 +- opcodes/xc16x-asm.c | 2 +- opcodes/xc16x-desc.c | 2 +- opcodes/xc16x-desc.h | 2 +- opcodes/xc16x-dis.c | 4 +- opcodes/xc16x-ibld.c | 4 +- opcodes/xc16x-opc.c | 7 +- opcodes/xc16x-opc.h | 2 +- opcodes/xstormy16-asm.c | 2 +- opcodes/xstormy16-desc.c | 2 +- opcodes/xstormy16-desc.h | 2 +- opcodes/xstormy16-dis.c | 4 +- opcodes/xstormy16-ibld.c | 4 +- opcodes/xstormy16-opc.c | 7 +- opcodes/xstormy16-opc.h | 2 +- opcodes/xtensa-dis.c | 2 +- opcodes/z80-dis.c | 8 +- opcodes/z8k-dis.c | 2 +- opcodes/z8k-opc.h | 4 +- opcodes/z8kgen.c | 47 +- setup.com | 56 +- src-release | 12 +- texinfo/texinfo.tex | 4288 +- ylwrap | 19 +- 4353 files changed, 736527 insertions(+), 257251 deletions(-) delete mode 100644 .cvsignore delete mode 100644 COPYING.LIBGLOSS delete mode 100644 COPYING.NEWLIB create mode 100644 bfd/ChangeLog-2007 create mode 100644 bfd/ChangeLog-2008 create mode 100644 bfd/compress.c create mode 100644 bfd/cpu-l1om.c create mode 100644 bfd/cpu-lm32.c create mode 100644 bfd/cpu-microblaze.c create mode 100644 bfd/cpu-moxie.c rename bfd/{efi-app-x86_64.c => cpu-plugin.c} (64%) create mode 100644 bfd/elf-ifunc.c create mode 100644 bfd/elf32-lm32.c create mode 100644 bfd/elf32-microblaze.c create mode 100644 bfd/elf32-moxie.c create mode 100644 bfd/elf32-score.h create mode 100644 bfd/elf32-score7.c create mode 100644 bfd/mach-o-i386.c rename bfd/{efi-app-ia64.c => pei-ia64.c} (71%) create mode 100644 bfd/plugin.c rename bfd/{efi-app-ia32.c => plugin.h} (60%) delete mode 100644 bfd/po/.cvsignore create mode 100644 bfd/po/fi.gmo create mode 100644 bfd/po/fi.po create mode 100644 bfd/po/id.gmo create mode 100644 bfd/po/id.po create mode 100644 bfd/po/ru.gmo create mode 100644 bfd/po/ru.po create mode 100644 bfd/verilog.c create mode 100644 binutils/ChangeLog-2007 create mode 100644 binutils/ChangeLog-2008 create mode 100644 binutils/makefile.vms delete mode 100644 binutils/makefile.vms-in delete mode 100644 binutils/po/.cvsignore create mode 100644 binutils/po/id.gmo create mode 100644 binutils/po/id.po create mode 100644 binutils/po/sk.gmo create mode 100644 binutils/po/sk.po create mode 100644 binutils/testsuite/binutils-all/bfin/objdump.exp create mode 100644 binutils/testsuite/binutils-all/bfin/unknown-mode.s create mode 100644 binutils/testsuite/binutils-all/copy-4.d create mode 100644 binutils/testsuite/binutils-all/dumptest.s create mode 100644 binutils/testsuite/binutils-all/dw2-compressed.S create mode 100644 binutils/testsuite/binutils-all/group-2.s create mode 100644 binutils/testsuite/binutils-all/group-3.s create mode 100644 binutils/testsuite/binutils-all/group-4.s create mode 100644 binutils/testsuite/binutils-all/objdump.W create mode 100644 binutils/testsuite/binutils-all/objdump.s create mode 100644 binutils/testsuite/binutils-all/readelf.wa create mode 100644 binutils/testsuite/binutils-all/strip-10.d create mode 100644 binutils/testsuite/binutils-all/strip-4.d create mode 100644 binutils/testsuite/binutils-all/strip-5.d create mode 100644 binutils/testsuite/binutils-all/strip-6.d create mode 100644 binutils/testsuite/binutils-all/strip-7.d create mode 100644 binutils/testsuite/binutils-all/strip-8.d create mode 100644 binutils/testsuite/binutils-all/strip-9.d create mode 100644 binutils/testsuite/binutils-all/testranges-ia64.d create mode 100644 binutils/testsuite/binutils-all/testranges-ia64.s create mode 100644 binutils/testsuite/binutils-all/testranges.d create mode 100644 binutils/testsuite/binutils-all/testranges.s create mode 100644 binutils/testsuite/binutils-all/unique.s mode change 100644 => 100755 compile create mode 100644 config/bootstrap-O1.mk create mode 100644 config/bootstrap-O3.mk create mode 100644 config/bootstrap-debug.mk delete mode 100644 config/confsubdir.m4 create mode 100644 config/extensions.m4 create mode 100644 config/futex.m4 delete mode 100644 config/mh-armpic delete mode 100644 config/mh-elfalphapic delete mode 100644 config/mh-i370pic delete mode 100644 config/mh-ia64pic delete mode 100644 config/mh-m68kpic create mode 100644 config/mh-mingw create mode 100644 config/mh-pa create mode 100644 config/mh-pa-hpux10 delete mode 100644 config/mh-papic delete mode 100644 config/mh-ppcpic delete mode 100644 config/mh-s390pic delete mode 100644 config/mh-sparcpic delete mode 100644 config/mh-x86pic create mode 100644 config/mt-mips-elfoabi create mode 100644 config/mt-mips-gnu create mode 100644 config/mt-mips16-compat create mode 100644 config/mt-sde create mode 100644 config/override.m4 create mode 100644 config/plugins.m4 create mode 100644 config/proginstall.m4 create mode 100644 config/tcl.m4 create mode 100644 cpu/lm32.cpu create mode 100644 cpu/lm32.opc create mode 100644 elfcpp/ChangeLog create mode 100644 elfcpp/README create mode 100644 elfcpp/arm.h create mode 100644 elfcpp/dwarf.h create mode 100644 elfcpp/elfcpp.h create mode 100644 elfcpp/elfcpp_file.h create mode 100644 elfcpp/elfcpp_internal.h create mode 100644 elfcpp/elfcpp_swap.h create mode 100644 elfcpp/i386.h create mode 100644 elfcpp/powerpc.h create mode 100644 elfcpp/sparc.h create mode 100644 elfcpp/x86_64.h delete mode 100644 etc/add-log.el delete mode 100644 etc/add-log.vi create mode 100644 gas/ChangeLog-2007 create mode 100644 gas/ChangeLog-2008 create mode 100644 gas/config/obj-coff-seh.c create mode 100644 gas/config/obj-coff-seh.h create mode 100644 gas/config/obj-fdpicelf.c create mode 100644 gas/config/obj-fdpicelf.h create mode 100644 gas/config/obj-macho.c create mode 100644 gas/config/obj-macho.h create mode 100644 gas/config/tc-i386-intel.c create mode 100644 gas/config/tc-lm32.c create mode 100644 gas/config/tc-lm32.h create mode 100644 gas/config/tc-microblaze.c create mode 100644 gas/config/tc-microblaze.h create mode 100644 gas/config/tc-moxie.c create mode 100644 gas/config/tc-moxie.h create mode 100644 gas/config/tc-score7.c create mode 100644 gas/config/te-solaris.h create mode 100644 gas/config/te-vms.c create mode 100644 gas/config/te-vms.h create mode 100644 gas/configure.com create mode 100644 gas/doc/c-lm32.texi create mode 100644 gas/doc/c-microblaze.texi create mode 100644 gas/doc/c-s390.texi create mode 100644 gas/doc/c-score.texi create mode 100644 gas/makefile.vms delete mode 100644 gas/po/.cvsignore create mode 100644 gas/po/id.gmo create mode 100644 gas/po/id.po create mode 100644 gas/testsuite/ChangeLog-2007 create mode 100644 gas/testsuite/ChangeLog-2008 create mode 100644 gas/testsuite/gas/all/string.d create mode 100644 gas/testsuite/gas/all/string.s create mode 100644 gas/testsuite/gas/arm/adr-invalid.d create mode 100644 gas/testsuite/gas/arm/adr-invalid.l create mode 100644 gas/testsuite/gas/arm/adr-invalid.s create mode 100644 gas/testsuite/gas/arm/align.d create mode 100644 gas/testsuite/gas/arm/align.s create mode 100644 gas/testsuite/gas/arm/align64.d create mode 100644 gas/testsuite/gas/arm/align64.s create mode 100644 gas/testsuite/gas/arm/arch4t-eabi.d create mode 100644 gas/testsuite/gas/arm/archv6m.d create mode 100644 gas/testsuite/gas/arm/archv6m.s create mode 100644 gas/testsuite/gas/arm/arm-it-auto-2.d create mode 100644 gas/testsuite/gas/arm/arm-it-auto-2.s create mode 100644 gas/testsuite/gas/arm/arm-it-auto-3.d create mode 100644 gas/testsuite/gas/arm/arm-it-auto-3.s create mode 100644 gas/testsuite/gas/arm/arm-it-auto.d create mode 100644 gas/testsuite/gas/arm/arm-it-auto.s create mode 100644 gas/testsuite/gas/arm/arm-it-bad-2.d create mode 100644 gas/testsuite/gas/arm/arm-it-bad-2.l create mode 100644 gas/testsuite/gas/arm/arm-it-bad-2.s create mode 100644 gas/testsuite/gas/arm/arm-it-bad-3.d create mode 100644 gas/testsuite/gas/arm/arm-it-bad-3.l create mode 100644 gas/testsuite/gas/arm/arm-it-bad-3.s create mode 100644 gas/testsuite/gas/arm/arm-it-bad.d create mode 100644 gas/testsuite/gas/arm/arm-it-bad.l create mode 100644 gas/testsuite/gas/arm/arm-it-bad.s create mode 100644 gas/testsuite/gas/arm/attr-cpu-directive.d create mode 100644 gas/testsuite/gas/arm/attr-cpu-directive.s create mode 100644 gas/testsuite/gas/arm/attr-default.d create mode 100644 gas/testsuite/gas/arm/attr-march-all.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv1.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv2.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv2a.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv2s.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv3.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv3m.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv4.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv4t.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv4txm.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv4xm.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv5.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv5t.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv5te.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv5tej.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv5texp.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv5txm.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6-m.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6j.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6k.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6kt2.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6t2.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6z.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6zk.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6zkt2.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv6zt2.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7-a.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7-m.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7-r.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7a.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7m.d create mode 100644 gas/testsuite/gas/arm/attr-march-armv7r.d create mode 100644 gas/testsuite/gas/arm/attr-march-iwmmxt.d create mode 100644 gas/testsuite/gas/arm/attr-march-iwmmxt2.d create mode 100644 gas/testsuite/gas/arm/attr-march-xscale.d create mode 100644 gas/testsuite/gas/arm/attr-mcpu.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-arm1020e.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-arm1020t.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-arm1136jf-s.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-arm1136jfs.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-arm7500fe.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-fpa.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-fpa10.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-fpa11.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-fpe.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-fpe2.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-fpe3.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-maverick.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-neon-fp16.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-neon.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-softfpa.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-softvfp+vfp.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-softvfp.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfp.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfp10-r0.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfp10.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfp3.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfp9.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfpv2.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfpv3-d16.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfpv3.d create mode 100644 gas/testsuite/gas/arm/attr-mfpu-vfpxd.d create mode 100644 gas/testsuite/gas/arm/attr-order.d create mode 100644 gas/testsuite/gas/arm/attr-order.s create mode 100644 gas/testsuite/gas/arm/attr-override-cpu-directive.d create mode 100644 gas/testsuite/gas/arm/attr-override-cpu-directive.s create mode 100644 gas/testsuite/gas/arm/attr-override-mcpu.d create mode 100644 gas/testsuite/gas/arm/attr-override-mcpu.s create mode 100644 gas/testsuite/gas/arm/attr-syntax.d create mode 100644 gas/testsuite/gas/arm/attr-syntax.s create mode 100644 gas/testsuite/gas/arm/bl-local-v4t.d create mode 100644 gas/testsuite/gas/arm/bl-local-v4t.s create mode 100644 gas/testsuite/gas/arm/blank.s create mode 100644 gas/testsuite/gas/arm/blx-local-thumb.l create mode 100644 gas/testsuite/gas/arm/blx-local.l create mode 100644 gas/testsuite/gas/arm/fp-save.d create mode 100644 gas/testsuite/gas/arm/fp-save.s create mode 100644 gas/testsuite/gas/arm/half-prec-neon.d create mode 100644 gas/testsuite/gas/arm/half-prec-neon.s create mode 100644 gas/testsuite/gas/arm/half-prec-psyntax.d create mode 100644 gas/testsuite/gas/arm/half-prec-psyntax.s create mode 100644 gas/testsuite/gas/arm/half-prec-vfpv3.d create mode 100644 gas/testsuite/gas/arm/half-prec-vfpv3.s create mode 100644 gas/testsuite/gas/arm/insn-error-a.d create mode 100644 gas/testsuite/gas/arm/insn-error-a.l create mode 100644 gas/testsuite/gas/arm/insn-error-a.s create mode 100644 gas/testsuite/gas/arm/insn-error-t.d create mode 100644 gas/testsuite/gas/arm/insn-error-t.l create mode 100644 gas/testsuite/gas/arm/insn-error-t.s create mode 100644 gas/testsuite/gas/arm/inst-po-2.d create mode 100644 gas/testsuite/gas/arm/inst-po-2.l create mode 100644 gas/testsuite/gas/arm/inst-po-2.s create mode 100644 gas/testsuite/gas/arm/inst-po-3.d create mode 100644 gas/testsuite/gas/arm/inst-po-3.s create mode 100644 gas/testsuite/gas/arm/inst-po-be.d create mode 100644 gas/testsuite/gas/arm/inst-po.d create mode 100644 gas/testsuite/gas/arm/inst-po.s create mode 100644 gas/testsuite/gas/arm/mapdir.d create mode 100644 gas/testsuite/gas/arm/mapdir.s create mode 100644 gas/testsuite/gas/arm/mapmisc.d create mode 100644 gas/testsuite/gas/arm/mapmisc.dat create mode 100644 gas/testsuite/gas/arm/mapmisc.s create mode 100644 gas/testsuite/gas/arm/mapping2.d create mode 100644 gas/testsuite/gas/arm/mapping2.s create mode 100644 gas/testsuite/gas/arm/mapping3.d create mode 100644 gas/testsuite/gas/arm/mapping3.s create mode 100644 gas/testsuite/gas/arm/mapping4.d create mode 100644 gas/testsuite/gas/arm/mapping4.s create mode 100644 gas/testsuite/gas/arm/mapsecs.d create mode 100644 gas/testsuite/gas/arm/mapsecs.s create mode 100644 gas/testsuite/gas/arm/missing.d create mode 100644 gas/testsuite/gas/arm/missing.l create mode 100644 gas/testsuite/gas/arm/missing.s create mode 100644 gas/testsuite/gas/arm/movw-local.d create mode 100644 gas/testsuite/gas/arm/movw-local.s create mode 100644 gas/testsuite/gas/arm/pr9722.d create mode 100644 gas/testsuite/gas/arm/pr9722.s create mode 100644 gas/testsuite/gas/arm/relax_load_align.d create mode 100644 gas/testsuite/gas/arm/relax_load_align.s create mode 100644 gas/testsuite/gas/arm/sp-pc-usage-t.d create mode 100644 gas/testsuite/gas/arm/sp-pc-usage-t.s create mode 100644 gas/testsuite/gas/arm/target-reloc-1.d create mode 100644 gas/testsuite/gas/arm/target-reloc-1.s create mode 100644 gas/testsuite/gas/arm/thumb-eabi.d create mode 100644 gas/testsuite/gas/arm/thumb-w-bad.d create mode 100644 gas/testsuite/gas/arm/thumb-w-bad.l create mode 100644 gas/testsuite/gas/arm/thumb-w-bad.s create mode 100644 gas/testsuite/gas/arm/thumb-w-good.d create mode 100644 gas/testsuite/gas/arm/thumb-w-good.s create mode 100644 gas/testsuite/gas/arm/thumb2_bad_reg.d create mode 100644 gas/testsuite/gas/arm/thumb2_bad_reg.l create mode 100644 gas/testsuite/gas/arm/thumb2_bad_reg.s create mode 100644 gas/testsuite/gas/arm/thumb2_it_auto.d create mode 100644 gas/testsuite/gas/arm/thumb2_it_bad_auto.d create mode 100644 gas/testsuite/gas/arm/thumb2_mul-bad.d create mode 100644 gas/testsuite/gas/arm/thumb2_mul-bad.l create mode 100644 gas/testsuite/gas/arm/thumb2_mul-bad.s create mode 100644 gas/testsuite/gas/arm/thumb2_mul.d create mode 100644 gas/testsuite/gas/arm/thumb2_mul.s create mode 100644 gas/testsuite/gas/arm/v4bx.d create mode 100644 gas/testsuite/gas/arm/v4bx.s create mode 100644 gas/testsuite/gas/arm/vfpv3-d16-bad.d create mode 100644 gas/testsuite/gas/arm/vfpv3-d16-bad.l create mode 100644 gas/testsuite/gas/bfin/arith_mode.d create mode 100644 gas/testsuite/gas/bfin/arith_mode.s create mode 100644 gas/testsuite/gas/bfin/error.exp create mode 100644 gas/testsuite/gas/bfin/expected_comparison_errors.l create mode 100644 gas/testsuite/gas/bfin/expected_comparison_errors.s create mode 100644 gas/testsuite/gas/bfin/invalid_arith_mode.l create mode 100644 gas/testsuite/gas/bfin/invalid_arith_mode.s create mode 100644 gas/testsuite/gas/bfin/line_number.l create mode 100644 gas/testsuite/gas/bfin/line_number.s create mode 100644 gas/testsuite/gas/bfin/loop.d create mode 100644 gas/testsuite/gas/bfin/loop.s create mode 100644 gas/testsuite/gas/bfin/loop2.d create mode 100644 gas/testsuite/gas/bfin/loop2.s create mode 100644 gas/testsuite/gas/bfin/loop3.d create mode 100644 gas/testsuite/gas/bfin/loop3.s create mode 100644 gas/testsuite/gas/bfin/misc.d create mode 100644 gas/testsuite/gas/bfin/misc.s create mode 100644 gas/testsuite/gas/bfin/parallel5.s create mode 100644 gas/testsuite/gas/bfin/resource_conflict.l create mode 100644 gas/testsuite/gas/bfin/resource_conflict.s create mode 100644 gas/testsuite/gas/cfi/cfi-common-7.d create mode 100644 gas/testsuite/gas/cfi/cfi-common-7.s create mode 100644 gas/testsuite/gas/cr16/pic.exp create mode 100644 gas/testsuite/gas/cr16/pic1.d create mode 100644 gas/testsuite/gas/cr16/pic1.s create mode 100644 gas/testsuite/gas/cr16/pic2.d create mode 100644 gas/testsuite/gas/cr16/pic2.s create mode 100644 gas/testsuite/gas/cris/rd-bcnst2-pic.d create mode 100644 gas/testsuite/gas/cris/rd-bcnst2.d create mode 100644 gas/testsuite/gas/cris/rd-bcnst2.s create mode 100644 gas/testsuite/gas/cris/rd-bkw4.d create mode 100644 gas/testsuite/gas/cris/rd-bkw4.s create mode 100644 gas/testsuite/gas/cris/rd-bkw4v32.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5.s create mode 100644 gas/testsuite/gas/cris/rd-bkw5b.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5bpic.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5bv32.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5bv32pic.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5pic.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5v32.d create mode 100644 gas/testsuite/gas/cris/rd-bkw5v32pic.d create mode 100644 gas/testsuite/gas/cris/rd-dtpoffd1.d create mode 100644 gas/testsuite/gas/cris/rd-dtpoffd1.s create mode 100644 gas/testsuite/gas/cris/rd-tls-1.d create mode 100644 gas/testsuite/gas/cris/rd-tls-1.s create mode 100644 gas/testsuite/gas/cris/rd-tls-2.d create mode 100644 gas/testsuite/gas/cris/rd-tls-2.s create mode 100644 gas/testsuite/gas/cris/tls-err-1.s create mode 100644 gas/testsuite/gas/cris/tls-err-2.s create mode 100644 gas/testsuite/gas/cris/tls-err-3.s create mode 100644 gas/testsuite/gas/elf/file.d create mode 100644 gas/testsuite/gas/elf/file.s create mode 100644 gas/testsuite/gas/elf/ifunc-1.d create mode 100644 gas/testsuite/gas/elf/ifunc-1.s create mode 100644 gas/testsuite/gas/elf/section6.d create mode 100644 gas/testsuite/gas/elf/section6.s create mode 100644 gas/testsuite/gas/elf/section7.d create mode 100644 gas/testsuite/gas/elf/section7.s create mode 100644 gas/testsuite/gas/elf/symtab.d create mode 100644 gas/testsuite/gas/elf/symtab.s create mode 100644 gas/testsuite/gas/elf/type-noifunc.e create mode 100644 gas/testsuite/gas/elf/type-noifunc.s create mode 100644 gas/testsuite/gas/h8300/pr3134.d create mode 100644 gas/testsuite/gas/h8300/pr3134.s create mode 100644 gas/testsuite/gas/i386/287.d create mode 100644 gas/testsuite/gas/i386/287.s create mode 100644 gas/testsuite/gas/i386/387.d create mode 100644 gas/testsuite/gas/i386/387.s create mode 100644 gas/testsuite/gas/i386/8087.d create mode 100644 gas/testsuite/gas/i386/8087.s create mode 100644 gas/testsuite/gas/i386/aes-intel.d create mode 100644 gas/testsuite/gas/i386/aes.d create mode 100644 gas/testsuite/gas/i386/aes.s create mode 100644 gas/testsuite/gas/i386/arch-1.d create mode 100644 gas/testsuite/gas/i386/arch-1.s create mode 100644 gas/testsuite/gas/i386/arch-10-1.l create mode 100644 gas/testsuite/gas/i386/arch-10-1.s create mode 100644 gas/testsuite/gas/i386/arch-10-2.l create mode 100644 gas/testsuite/gas/i386/arch-10-2.s create mode 100644 gas/testsuite/gas/i386/arch-10-3.l create mode 100644 gas/testsuite/gas/i386/arch-10-3.s create mode 100644 gas/testsuite/gas/i386/arch-10-4.l create mode 100644 gas/testsuite/gas/i386/arch-10-4.s create mode 100644 gas/testsuite/gas/i386/arch-10.d create mode 100644 gas/testsuite/gas/i386/arch-10.s create mode 100644 gas/testsuite/gas/i386/arch-11.d create mode 100644 gas/testsuite/gas/i386/arch-11.s create mode 100644 gas/testsuite/gas/i386/arch-12.d create mode 100644 gas/testsuite/gas/i386/arch-12.s create mode 100644 gas/testsuite/gas/i386/arch-2.d create mode 100644 gas/testsuite/gas/i386/arch-2.s create mode 100644 gas/testsuite/gas/i386/arch-3.d create mode 100644 gas/testsuite/gas/i386/arch-3.s create mode 100644 gas/testsuite/gas/i386/arch-5.d create mode 100644 gas/testsuite/gas/i386/arch-5.s create mode 100644 gas/testsuite/gas/i386/arch-6.d create mode 100644 gas/testsuite/gas/i386/arch-6.s create mode 100644 gas/testsuite/gas/i386/arch-7.d create mode 100644 gas/testsuite/gas/i386/arch-7.s create mode 100644 gas/testsuite/gas/i386/arch-9.d create mode 100644 gas/testsuite/gas/i386/arch-9.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1-1.l create mode 100644 gas/testsuite/gas/i386/arch-avx-1-1.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1-2.l create mode 100644 gas/testsuite/gas/i386/arch-avx-1-2.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1-3.l create mode 100644 gas/testsuite/gas/i386/arch-avx-1-3.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1-4.l create mode 100644 gas/testsuite/gas/i386/arch-avx-1-4.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1-5.l create mode 100644 gas/testsuite/gas/i386/arch-avx-1-5.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1-6.l create mode 100644 gas/testsuite/gas/i386/arch-avx-1-6.s create mode 100644 gas/testsuite/gas/i386/arch-avx-1.d create mode 100644 gas/testsuite/gas/i386/arch-avx-1.s create mode 100644 gas/testsuite/gas/i386/att-regs.d create mode 100644 gas/testsuite/gas/i386/att-regs.s create mode 100644 gas/testsuite/gas/i386/avx-intel.d create mode 100644 gas/testsuite/gas/i386/avx.d create mode 100644 gas/testsuite/gas/i386/avx.s create mode 100644 gas/testsuite/gas/i386/clmul-intel.d create mode 100644 gas/testsuite/gas/i386/clmul.d create mode 100644 gas/testsuite/gas/i386/clmul.s create mode 100644 gas/testsuite/gas/i386/compat-intel.d create mode 100644 gas/testsuite/gas/i386/compat.d create mode 100644 gas/testsuite/gas/i386/compat.s create mode 100644 gas/testsuite/gas/i386/ept-intel.d create mode 100644 gas/testsuite/gas/i386/ept.d create mode 100644 gas/testsuite/gas/i386/ept.s delete mode 100644 gas/testsuite/gas/i386/equ.e create mode 100644 gas/testsuite/gas/i386/fma-intel.d create mode 100644 gas/testsuite/gas/i386/fma.d create mode 100644 gas/testsuite/gas/i386/fma.s create mode 100644 gas/testsuite/gas/i386/fma4.d create mode 100644 gas/testsuite/gas/i386/fma4.s create mode 100644 gas/testsuite/gas/i386/i386.d create mode 100644 gas/testsuite/gas/i386/i386.s create mode 100644 gas/testsuite/gas/i386/ifunc.d create mode 100644 gas/testsuite/gas/i386/ifunc.s create mode 100644 gas/testsuite/gas/i386/intel-expr.d create mode 100644 gas/testsuite/gas/i386/intel-expr.s create mode 100644 gas/testsuite/gas/i386/intel-regs.d create mode 100644 gas/testsuite/gas/i386/intel-regs.s delete mode 100644 gas/testsuite/gas/i386/intel16.e delete mode 100644 gas/testsuite/gas/i386/intelok.e create mode 100644 gas/testsuite/gas/i386/inval-avx.l create mode 100644 gas/testsuite/gas/i386/inval-avx.s create mode 100644 gas/testsuite/gas/i386/inval-ept.l create mode 100644 gas/testsuite/gas/i386/inval-ept.s create mode 100644 gas/testsuite/gas/i386/inval-equ-1.l create mode 100644 gas/testsuite/gas/i386/inval-equ-1.s create mode 100644 gas/testsuite/gas/i386/inval-equ-2.l create mode 100644 gas/testsuite/gas/i386/inval-equ-2.s create mode 100644 gas/testsuite/gas/i386/inval-movbe.l create mode 100644 gas/testsuite/gas/i386/inval-movbe.s create mode 100644 gas/testsuite/gas/i386/l1om-inval.l create mode 100644 gas/testsuite/gas/i386/l1om-inval.s create mode 100644 gas/testsuite/gas/i386/l1om.d create mode 100644 gas/testsuite/gas/i386/mem-intel.d create mode 100644 gas/testsuite/gas/i386/mem.d create mode 100644 gas/testsuite/gas/i386/mem.s create mode 100644 gas/testsuite/gas/i386/movbe-intel.d create mode 100644 gas/testsuite/gas/i386/movbe.d create mode 100644 gas/testsuite/gas/i386/movbe.s create mode 100644 gas/testsuite/gas/i386/no87-2.l create mode 100644 gas/testsuite/gas/i386/no87-2.s create mode 100644 gas/testsuite/gas/i386/no87.l create mode 100644 gas/testsuite/gas/i386/no87.s create mode 100644 gas/testsuite/gas/i386/nops-5-i686.d create mode 100644 gas/testsuite/gas/i386/nops-5.d create mode 100644 gas/testsuite/gas/i386/nops-5.s create mode 100644 gas/testsuite/gas/i386/opts-intel.d create mode 100644 gas/testsuite/gas/i386/opts.d create mode 100644 gas/testsuite/gas/i386/opts.s create mode 100644 gas/testsuite/gas/i386/reg-intel.d create mode 100644 gas/testsuite/gas/i386/reg.d create mode 100644 gas/testsuite/gas/i386/reg.s create mode 100644 gas/testsuite/gas/i386/rexw.d create mode 100644 gas/testsuite/gas/i386/rexw.s create mode 100644 gas/testsuite/gas/i386/sib-intel.d create mode 100644 gas/testsuite/gas/i386/simd-suffix.d create mode 100644 gas/testsuite/gas/i386/smx.d create mode 100644 gas/testsuite/gas/i386/smx.s create mode 100644 gas/testsuite/gas/i386/sse-check-error.l create mode 100644 gas/testsuite/gas/i386/sse-check-error.s create mode 100644 gas/testsuite/gas/i386/sse-check-none.d create mode 100644 gas/testsuite/gas/i386/sse-check-none.s create mode 100644 gas/testsuite/gas/i386/sse-check-warn.d create mode 100644 gas/testsuite/gas/i386/sse-check-warn.e create mode 100644 gas/testsuite/gas/i386/sse-check.d create mode 100644 gas/testsuite/gas/i386/sse-check.s create mode 100644 gas/testsuite/gas/i386/sse-noavx.d create mode 100644 gas/testsuite/gas/i386/sse-noavx.s create mode 100644 gas/testsuite/gas/i386/sse2avx-opts-intel.d create mode 100644 gas/testsuite/gas/i386/sse2avx-opts.d create mode 100644 gas/testsuite/gas/i386/sse2avx.d create mode 100644 gas/testsuite/gas/i386/sse2avx.s create mode 100644 gas/testsuite/gas/i386/string-bad.l create mode 100644 gas/testsuite/gas/i386/string-bad.s create mode 100644 gas/testsuite/gas/i386/string-ok.d create mode 100644 gas/testsuite/gas/i386/string-ok.e create mode 100644 gas/testsuite/gas/i386/string-ok.s create mode 100644 gas/testsuite/gas/i386/x86-64-aes-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-aes.d create mode 100644 gas/testsuite/gas/i386/x86-64-aes.s create mode 100644 gas/testsuite/gas/i386/x86-64-arch-1.d create mode 100644 gas/testsuite/gas/i386/x86-64-arch-1.s create mode 100644 gas/testsuite/gas/i386/x86-64-arch-2.d create mode 100644 gas/testsuite/gas/i386/x86-64-arch-2.s create mode 100644 gas/testsuite/gas/i386/x86-64-avx-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-avx-swap-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-avx-swap.d create mode 100644 gas/testsuite/gas/i386/x86-64-avx-swap.s create mode 100644 gas/testsuite/gas/i386/x86-64-avx.d create mode 100644 gas/testsuite/gas/i386/x86-64-avx.s create mode 100644 gas/testsuite/gas/i386/x86-64-clmul-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-clmul.d create mode 100644 gas/testsuite/gas/i386/x86-64-clmul.s create mode 100644 gas/testsuite/gas/i386/x86-64-ept-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-ept.d create mode 100644 gas/testsuite/gas/i386/x86-64-ept.s create mode 100644 gas/testsuite/gas/i386/x86-64-fma-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-fma.d create mode 100644 gas/testsuite/gas/i386/x86-64-fma.s create mode 100644 gas/testsuite/gas/i386/x86-64-fma4.d create mode 100644 gas/testsuite/gas/i386/x86-64-fma4.s create mode 100644 gas/testsuite/gas/i386/x86-64-ifunc.d create mode 100644 gas/testsuite/gas/i386/x86-64-intel64.d create mode 100644 gas/testsuite/gas/i386/x86-64-intel64.s create mode 100644 gas/testsuite/gas/i386/x86-64-inval-avx.l create mode 100644 gas/testsuite/gas/i386/x86-64-inval-avx.s create mode 100644 gas/testsuite/gas/i386/x86-64-inval-ept.l create mode 100644 gas/testsuite/gas/i386/x86-64-inval-ept.s create mode 100644 gas/testsuite/gas/i386/x86-64-inval-movbe.l create mode 100644 gas/testsuite/gas/i386/x86-64-inval-movbe.s create mode 100644 gas/testsuite/gas/i386/x86-64-mem-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-mem.d create mode 100644 gas/testsuite/gas/i386/x86-64-mem.s create mode 100644 gas/testsuite/gas/i386/x86-64-movbe-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-movbe.d create mode 100644 gas/testsuite/gas/i386/x86-64-movbe.s create mode 100644 gas/testsuite/gas/i386/x86-64-nops-1-pentium.d create mode 100644 gas/testsuite/gas/i386/x86-64-nops-5-k8.d create mode 100644 gas/testsuite/gas/i386/x86-64-nops-5.d create mode 100644 gas/testsuite/gas/i386/x86-64-opcode-inval-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-opcode-inval.d create mode 100644 gas/testsuite/gas/i386/x86-64-opcode-inval.s create mode 100644 gas/testsuite/gas/i386/x86-64-opts-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-opts.d create mode 100644 gas/testsuite/gas/i386/x86-64-opts.s create mode 100644 gas/testsuite/gas/i386/x86-64-reg-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-reg.d create mode 100644 gas/testsuite/gas/i386/x86-64-reg.s create mode 100644 gas/testsuite/gas/i386/x86-64-sib-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-sib.d create mode 100644 gas/testsuite/gas/i386/x86-64-sib.s create mode 100644 gas/testsuite/gas/i386/x86-64-simd-suffix.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse-check-error.l create mode 100644 gas/testsuite/gas/i386/x86-64-sse-check-error.s create mode 100644 gas/testsuite/gas/i386/x86-64-sse-check-none.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse-check-warn.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse-check.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse-noavx.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse-noavx.s create mode 100644 gas/testsuite/gas/i386/x86-64-sse2avx-opts-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse2avx-opts.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse2avx.d create mode 100644 gas/testsuite/gas/i386/x86-64-sse2avx.s create mode 100644 gas/testsuite/gas/i386/x86-64-w64-pcrel.d create mode 100644 gas/testsuite/gas/i386/x86-64-xsave-intel.d create mode 100644 gas/testsuite/gas/i386/x86-64-xsave.d create mode 100644 gas/testsuite/gas/i386/x86-64-xsave.s delete mode 100644 gas/testsuite/gas/i386/x86_64.e create mode 100644 gas/testsuite/gas/i386/xsave-intel.d create mode 100644 gas/testsuite/gas/i386/xsave.d create mode 100644 gas/testsuite/gas/i386/xsave.s create mode 100644 gas/testsuite/gas/lm32/all.exp create mode 100644 gas/testsuite/gas/lm32/csr.d create mode 100644 gas/testsuite/gas/lm32/csr.s create mode 100644 gas/testsuite/gas/lm32/insn.d create mode 100644 gas/testsuite/gas/lm32/insn.s create mode 100644 gas/testsuite/gas/lns/lns-big-delta.d create mode 100644 gas/testsuite/gas/lns/lns-big-delta.s create mode 100644 gas/testsuite/gas/lns/lns-common-1-ia64.s create mode 100644 gas/testsuite/gas/lns/lns-duplicate.d create mode 100644 gas/testsuite/gas/lns/lns-duplicate.s create mode 100644 gas/testsuite/gas/m68k/mcf-movsr.d create mode 100644 gas/testsuite/gas/m68k/mcf-movsr.s create mode 100644 gas/testsuite/gas/m68k/tls-gd-3.d create mode 100644 gas/testsuite/gas/m68k/tls-gd-3.s create mode 100644 gas/testsuite/gas/macros/exit.s create mode 100644 gas/testsuite/gas/mips/align.d create mode 100644 gas/testsuite/gas/mips/align.s create mode 100644 gas/testsuite/gas/mips/align2-el.d create mode 100644 gas/testsuite/gas/mips/align2.d create mode 100644 gas/testsuite/gas/mips/align2.s create mode 100644 gas/testsuite/gas/mips/at-1.d create mode 100644 gas/testsuite/gas/mips/at-1.s create mode 100644 gas/testsuite/gas/mips/at-2.l create mode 100644 gas/testsuite/gas/mips/at-2.s create mode 100644 gas/testsuite/gas/mips/call-nonpic-1.d create mode 100644 gas/testsuite/gas/mips/call-nonpic-1.s create mode 100644 gas/testsuite/gas/mips/cfi-n64-1.d create mode 100644 gas/testsuite/gas/mips/cfi-n64-1.s create mode 100644 gas/testsuite/gas/mips/cp0-names-r3000.d create mode 100644 gas/testsuite/gas/mips/cp0-names-r4000.d create mode 100644 gas/testsuite/gas/mips/elf-rel13-mips16.d create mode 100644 gas/testsuite/gas/mips/elf-rel13-mips16.s create mode 100644 gas/testsuite/gas/mips/elf-rel8-mips16.d create mode 100644 gas/testsuite/gas/mips/elf-rel8-mips16.s create mode 100644 gas/testsuite/gas/mips/elf-rel9-mips16.d create mode 100644 gas/testsuite/gas/mips/elf-rel9-mips16.s create mode 100644 gas/testsuite/gas/mips/eret-1.d create mode 100644 gas/testsuite/gas/mips/eret-1.s create mode 100644 gas/testsuite/gas/mips/eret-2.d create mode 100644 gas/testsuite/gas/mips/eret-2.s create mode 100644 gas/testsuite/gas/mips/eret-3.d create mode 100644 gas/testsuite/gas/mips/eret-3.s create mode 100644 gas/testsuite/gas/mips/jalr.l create mode 100644 gas/testsuite/gas/mips/jalr.s create mode 100644 gas/testsuite/gas/mips/jalr2.d create mode 100644 gas/testsuite/gas/mips/jalr2.s create mode 100644 gas/testsuite/gas/mips/loongson-2e.d create mode 100644 gas/testsuite/gas/mips/loongson-2e.s create mode 100644 gas/testsuite/gas/mips/loongson-2f.d create mode 100644 gas/testsuite/gas/mips/loongson-2f.s create mode 100644 gas/testsuite/gas/mips/mips-double-float-flag.l create mode 100644 gas/testsuite/gas/mips/mips-double-float-flag.s create mode 100644 gas/testsuite/gas/mips/mips-hard-float-flag.l create mode 100644 gas/testsuite/gas/mips/mips-hard-float-flag.s create mode 100644 gas/testsuite/gas/mips/mips-macro-ill-nofp.l create mode 100644 gas/testsuite/gas/mips/mips-macro-ill-nofp.s create mode 100644 gas/testsuite/gas/mips/mips-macro-ill-sfp.l create mode 100644 gas/testsuite/gas/mips/mips-macro-ill-sfp.s create mode 100644 gas/testsuite/gas/mips/mips1-fp.d create mode 100644 gas/testsuite/gas/mips/mips1-fp.l create mode 100644 gas/testsuite/gas/mips/mips1-fp.s create mode 100644 gas/testsuite/gas/mips/mips16-hilo-match.d create mode 100644 gas/testsuite/gas/mips/mips16-hilo-match.s create mode 100644 gas/testsuite/gas/mips/mips16-vis-1.d create mode 100644 gas/testsuite/gas/mips/mips16-vis-1.s create mode 100644 gas/testsuite/gas/mips/mips32-cp2.d create mode 100644 gas/testsuite/gas/mips/mips32-cp2.s create mode 100644 gas/testsuite/gas/mips/mips32-sf32.l create mode 100644 gas/testsuite/gas/mips/mips32-sync.d create mode 100644 gas/testsuite/gas/mips/mips32-sync.s create mode 100644 gas/testsuite/gas/mips/mips32r2-cp2.d create mode 100644 gas/testsuite/gas/mips/mips32r2-cp2.s create mode 100644 gas/testsuite/gas/mips/mips32r2-fp32.d create mode 100644 gas/testsuite/gas/mips/mips32r2-fp32.l create mode 100644 gas/testsuite/gas/mips/mips32r2-fp32.s create mode 100644 gas/testsuite/gas/mips/mips32r2-ill-nofp.l create mode 100644 gas/testsuite/gas/mips/mips32r2-ill-nofp.s create mode 100644 gas/testsuite/gas/mips/mips4-fp.d create mode 100644 gas/testsuite/gas/mips/mips4-fp.l create mode 100644 gas/testsuite/gas/mips/mips4-fp.s create mode 100644 gas/testsuite/gas/mips/mips64-cp2.d create mode 100644 gas/testsuite/gas/mips/mips64-cp2.s create mode 100644 gas/testsuite/gas/mips/octeon-ill.l create mode 100644 gas/testsuite/gas/mips/octeon-ill.s create mode 100644 gas/testsuite/gas/mips/octeon.d create mode 100644 gas/testsuite/gas/mips/octeon.s create mode 100644 gas/testsuite/gas/mips/odd-float.d create mode 100644 gas/testsuite/gas/mips/odd-float.s create mode 100644 gas/testsuite/gas/mips/xlr-ext.d create mode 100644 gas/testsuite/gas/mips/xlr-ext.s create mode 100644 gas/testsuite/gas/mmix/err-loc-10.s create mode 100644 gas/testsuite/gas/mmix/err-loc-9.s create mode 100644 gas/testsuite/gas/mmix/err-swym1.s create mode 100644 gas/testsuite/gas/mmix/loc-6.d create mode 100644 gas/testsuite/gas/mmix/loc-6.s create mode 100644 gas/testsuite/gas/mmix/loc-7.d create mode 100644 gas/testsuite/gas/mmix/loc-7.s create mode 100644 gas/testsuite/gas/mmix/swym-opreg1.d create mode 100644 gas/testsuite/gas/mmix/swym-opreg1.s create mode 100644 gas/testsuite/gas/mmix/swym-opreg2.d create mode 100644 gas/testsuite/gas/mmix/swym-opreg2.s create mode 100644 gas/testsuite/gas/mn10300/pr997.l create mode 100644 gas/testsuite/gas/mn10300/pr997.s create mode 100755 gas/testsuite/gas/pe/aligncomm-a.d create mode 100755 gas/testsuite/gas/pe/aligncomm-a.s create mode 100755 gas/testsuite/gas/pe/aligncomm-b.d create mode 100644 gas/testsuite/gas/pe/aligncomm-b.s create mode 100755 gas/testsuite/gas/pe/aligncomm-c.d create mode 100755 gas/testsuite/gas/pe/aligncomm-c.s create mode 100755 gas/testsuite/gas/pe/aligncomm-d.d create mode 100755 gas/testsuite/gas/pe/aligncomm-d.s create mode 100755 gas/testsuite/gas/pe/pe.exp create mode 100644 gas/testsuite/gas/ppc/476.d create mode 100644 gas/testsuite/gas/ppc/476.s create mode 100644 gas/testsuite/gas/ppc/a2.d create mode 100644 gas/testsuite/gas/ppc/a2.s create mode 100644 gas/testsuite/gas/ppc/altivec_and_spe.d create mode 100644 gas/testsuite/gas/ppc/altivec_and_spe.s delete mode 100644 gas/testsuite/gas/ppc/booke_xcoff64.d delete mode 100644 gas/testsuite/gas/ppc/booke_xcoff64.s create mode 100644 gas/testsuite/gas/ppc/common.d create mode 100644 gas/testsuite/gas/ppc/common.s create mode 100644 gas/testsuite/gas/ppc/e500mc.d create mode 100644 gas/testsuite/gas/ppc/e500mc.s create mode 100644 gas/testsuite/gas/ppc/power4_32.d create mode 100644 gas/testsuite/gas/ppc/power4_32.s create mode 100644 gas/testsuite/gas/ppc/power6.d create mode 100644 gas/testsuite/gas/ppc/power6.s create mode 100644 gas/testsuite/gas/ppc/power7.d create mode 100644 gas/testsuite/gas/ppc/power7.s create mode 100644 gas/testsuite/gas/ppc/ppc750ps.d create mode 100644 gas/testsuite/gas/ppc/ppc750ps.s create mode 100644 gas/testsuite/gas/ppc/regnames.d create mode 100644 gas/testsuite/gas/ppc/regnames.s create mode 100644 gas/testsuite/gas/ppc/vsx.d create mode 100644 gas/testsuite/gas/ppc/vsx.s create mode 100644 gas/testsuite/gas/ppc/xcoff-branch-1-32.d create mode 100644 gas/testsuite/gas/ppc/xcoff-branch-1-64.d create mode 100644 gas/testsuite/gas/ppc/xcoff-branch-1.s create mode 100644 gas/testsuite/gas/s390/zarch-z10.d create mode 100644 gas/testsuite/gas/s390/zarch-z10.s create mode 100644 gas/testsuite/gas/score/arith_32-lt.d create mode 100644 gas/testsuite/gas/score/arith_32.d create mode 100644 gas/testsuite/gas/score/arith_32.s create mode 100644 gas/testsuite/gas/score/bit_32-lt.d create mode 100644 gas/testsuite/gas/score/bit_32.d create mode 100644 gas/testsuite/gas/score/bit_32.s create mode 100644 gas/testsuite/gas/score/branch_32-lt.d create mode 100644 gas/testsuite/gas/score/branch_32.d create mode 100644 gas/testsuite/gas/score/branch_32.s create mode 100644 gas/testsuite/gas/score/cmp_32-lt.d create mode 100644 gas/testsuite/gas/score/cmp_32.d create mode 100644 gas/testsuite/gas/score/cmp_32.s create mode 100644 gas/testsuite/gas/score/load_store_32-lt.d create mode 100644 gas/testsuite/gas/score/load_store_32.d create mode 100644 gas/testsuite/gas/score/load_store_32.s create mode 100644 gas/testsuite/gas/score/logical_32-lt.d create mode 100644 gas/testsuite/gas/score/logical_32.d create mode 100644 gas/testsuite/gas/score/logical_32.s create mode 100644 gas/testsuite/gas/score/mv_32-lt.d create mode 100644 gas/testsuite/gas/score/mv_32.d create mode 100644 gas/testsuite/gas/score/mv_32.s create mode 100644 gas/testsuite/gas/score/relax_32.exp create mode 100644 gas/testsuite/gas/score/relaxation_macro.h create mode 100644 gas/testsuite/gas/score/shift_32-lt.d create mode 100644 gas/testsuite/gas/score/shift_32.d create mode 100644 gas/testsuite/gas/score/shift_32.s create mode 100644 gas/testsuite/gas/score/syscontrol_32-lt.d create mode 100644 gas/testsuite/gas/score/syscontrol_32.d create mode 100644 gas/testsuite/gas/score/syscontrol_32.s create mode 100644 gas/testsuite/gas/sh/err-mova.s create mode 100644 gas/testsuite/gas/sh/sh64/eh-1.d create mode 100644 gas/testsuite/gas/sh/sh64/eh-1.s create mode 100644 gas/testsuite/gas/sh/sign-extension.d create mode 100644 gas/testsuite/gas/sh/sign-extension.s create mode 100644 gas/testsuite/gas/sparc/gotop32.d create mode 100644 gas/testsuite/gas/sparc/gotop32.s create mode 100644 gas/testsuite/gas/sparc/gotop64.d create mode 100644 gas/testsuite/gas/sparc/gotop64.s create mode 100644 gas/testsuite/gas/sparc/pc2210.d create mode 100644 gas/testsuite/gas/sparc/pc2210.s create mode 100644 gas/testsuite/gas/xtensa/err-pcrel.s create mode 100644 gas/testsuite/gas/xtensa/jlong.d create mode 100644 gas/testsuite/gas/xtensa/jlong.s create mode 100644 gas/testsuite/gas/xtensa/pcrel.d create mode 100644 gas/testsuite/gas/xtensa/pcrel.s create mode 100644 gas/testsuite/gas/xtensa/weak-call.d create mode 100644 gas/testsuite/gas/xtensa/weak-call.s create mode 100644 gas/testsuite/gas/xtensa/xtensa-err.exp create mode 100644 gas/testsuite/gas/z80/arith.d create mode 100644 gas/testsuite/gas/z80/arith.s create mode 100644 gas/testsuite/gas/z80/bit.d create mode 100644 gas/testsuite/gas/z80/bit.s create mode 100644 gas/testsuite/gas/z80/block.d create mode 100644 gas/testsuite/gas/z80/block.s create mode 100644 gas/testsuite/gas/z80/branch.d create mode 100644 gas/testsuite/gas/z80/branch.s create mode 100644 gas/testsuite/gas/z80/inout.d create mode 100644 gas/testsuite/gas/z80/inout.s create mode 100644 gas/testsuite/gas/z80/ld-group.d create mode 100644 gas/testsuite/gas/z80/ld-group.s create mode 100644 gas/testsuite/gas/z80/misc.d create mode 100644 gas/testsuite/gas/z80/misc.s create mode 100644 gas/testsuite/gas/z80/rotate.d create mode 100644 gas/testsuite/gas/z80/rotate.s delete mode 100755 gas/testsuite/lib/run create mode 100644 gold/ChangeLog create mode 100644 gold/Makefile.am create mode 100644 gold/Makefile.in create mode 100644 gold/NEWS create mode 100644 gold/README create mode 100644 gold/TODO create mode 100644 gold/aclocal.m4 create mode 100644 gold/archive.cc create mode 100644 gold/archive.h create mode 100644 gold/arm.cc create mode 100644 gold/binary.cc create mode 100644 gold/binary.h create mode 100644 gold/common.cc create mode 100644 gold/common.h create mode 100644 gold/compressed_output.cc create mode 100644 gold/compressed_output.h create mode 100644 gold/config.in create mode 100755 gold/configure create mode 100644 gold/configure.ac create mode 100644 gold/configure.tgt create mode 100644 gold/copy-relocs.cc create mode 100644 gold/copy-relocs.h create mode 100644 gold/cref.cc create mode 100644 gold/cref.h create mode 100644 gold/debug.h create mode 100644 gold/defstd.cc create mode 100644 gold/defstd.h create mode 100644 gold/descriptors.cc create mode 100644 gold/descriptors.h create mode 100644 gold/dirsearch.cc create mode 100644 gold/dirsearch.h create mode 100644 gold/dwarf_reader.cc create mode 100644 gold/dwarf_reader.h create mode 100644 gold/dynobj.cc create mode 100644 gold/dynobj.h create mode 100644 gold/ehframe.cc create mode 100644 gold/ehframe.h create mode 100644 gold/errors.cc create mode 100644 gold/errors.h create mode 100644 gold/expression.cc create mode 100644 gold/ffsll.c create mode 100644 gold/fileread.cc create mode 100644 gold/fileread.h create mode 100644 gold/freebsd.h create mode 100644 gold/ftruncate.c create mode 100644 gold/gc.cc create mode 100644 gold/gc.h create mode 100644 gold/gold-threads.cc create mode 100644 gold/gold-threads.h create mode 100644 gold/gold.cc create mode 100644 gold/gold.h create mode 100644 gold/i386.cc create mode 100644 gold/icf.cc create mode 100644 gold/icf.h create mode 100644 gold/incremental.cc create mode 100644 gold/incremental.h create mode 100644 gold/layout.cc create mode 100644 gold/layout.h create mode 100644 gold/main.cc create mode 100644 gold/mapfile.cc create mode 100644 gold/mapfile.h create mode 100644 gold/merge.cc create mode 100644 gold/merge.h create mode 100644 gold/mremap.c create mode 100644 gold/object.cc create mode 100644 gold/object.h create mode 100644 gold/options.cc create mode 100644 gold/options.h create mode 100644 gold/output.cc create mode 100644 gold/output.h create mode 100644 gold/parameters.cc create mode 100644 gold/parameters.h create mode 100644 gold/plugin.cc create mode 100644 gold/plugin.h create mode 100644 gold/po/Make-in create mode 100644 gold/po/POTFILES.in create mode 100644 gold/po/es.gmo create mode 100644 gold/po/es.po create mode 100644 gold/po/gold.pot create mode 100644 gold/po/id.gmo create mode 100644 gold/po/id.po create mode 100644 gold/powerpc.cc create mode 100644 gold/pread.c create mode 100644 gold/readsyms.cc create mode 100644 gold/readsyms.h create mode 100644 gold/reduced_debug_output.cc create mode 100644 gold/reduced_debug_output.h create mode 100644 gold/reloc-types.h create mode 100644 gold/reloc.cc create mode 100644 gold/reloc.h create mode 100644 gold/resolve.cc create mode 100644 gold/script-c.h create mode 100644 gold/script-sections.cc create mode 100644 gold/script-sections.h create mode 100644 gold/script.cc create mode 100644 gold/script.h create mode 100644 gold/sparc.cc create mode 100644 gold/stringpool.cc create mode 100644 gold/stringpool.h create mode 100644 gold/symtab.cc create mode 100644 gold/symtab.h create mode 100644 gold/target-reloc.h create mode 100644 gold/target-select.cc create mode 100644 gold/target-select.h create mode 100644 gold/target.cc create mode 100644 gold/target.h create mode 100644 gold/testsuite/Makefile.am create mode 100644 gold/testsuite/Makefile.in create mode 100644 gold/testsuite/basic_test.cc create mode 100644 gold/testsuite/binary.in create mode 100644 gold/testsuite/binary_test.cc create mode 100644 gold/testsuite/binary_unittest.cc create mode 100644 gold/testsuite/common_test_1.c create mode 100644 gold/testsuite/constructor_test.cc create mode 100644 gold/testsuite/copy_test.cc create mode 100644 gold/testsuite/copy_test_1.cc create mode 100644 gold/testsuite/copy_test_2.cc create mode 100644 gold/testsuite/debug_msg.cc create mode 100755 gold/testsuite/debug_msg.sh create mode 100644 gold/testsuite/discard_locals_test.c create mode 100755 gold/testsuite/discard_locals_test.sh create mode 100755 gold/testsuite/dynamic_list.sh create mode 100644 gold/testsuite/dynamic_list.t create mode 100644 gold/testsuite/exception_test.h create mode 100644 gold/testsuite/exception_test_1.cc create mode 100644 gold/testsuite/exception_test_2.cc create mode 100644 gold/testsuite/exception_test_main.cc create mode 100644 gold/testsuite/exclude_libs_test.c create mode 100755 gold/testsuite/exclude_libs_test.sh create mode 100644 gold/testsuite/exclude_libs_test_1.c create mode 100644 gold/testsuite/exclude_libs_test_2.c create mode 100644 gold/testsuite/exclude_libs_test_3.c create mode 100755 gold/testsuite/gc_comdat_test.sh create mode 100644 gold/testsuite/gc_comdat_test_1.cc create mode 100644 gold/testsuite/gc_comdat_test_2.cc create mode 100644 gold/testsuite/gc_tls_test.cc create mode 100755 gold/testsuite/gc_tls_test.sh create mode 100755 gold/testsuite/hidden_test.sh create mode 100644 gold/testsuite/hidden_test_1.c create mode 100644 gold/testsuite/hidden_test_main.c create mode 100644 gold/testsuite/icf_keep_unique_test.cc create mode 100755 gold/testsuite/icf_keep_unique_test.sh create mode 100644 gold/testsuite/icf_safe_test.cc create mode 100755 gold/testsuite/icf_safe_test.sh create mode 100644 gold/testsuite/icf_test.cc create mode 100755 gold/testsuite/icf_test.sh create mode 100644 gold/testsuite/initpri1.c create mode 100644 gold/testsuite/justsyms.t create mode 100644 gold/testsuite/justsyms_1.cc create mode 100644 gold/testsuite/justsyms_2.cc create mode 100644 gold/testsuite/large.c create mode 100644 gold/testsuite/many_sections_test.cc create mode 100644 gold/testsuite/object_unittest.cc create mode 100644 gold/testsuite/odr_violation1.cc create mode 100644 gold/testsuite/odr_violation2.cc create mode 100644 gold/testsuite/plugin_test.c create mode 100755 gold/testsuite/plugin_test_1.sh create mode 100755 gold/testsuite/plugin_test_2.sh create mode 100755 gold/testsuite/plugin_test_3.sh create mode 100755 gold/testsuite/plugin_test_4.sh create mode 100644 gold/testsuite/protected_1.cc create mode 100644 gold/testsuite/protected_2.cc create mode 100644 gold/testsuite/protected_3.cc create mode 100644 gold/testsuite/protected_main_1.cc create mode 100644 gold/testsuite/protected_main_2.cc create mode 100644 gold/testsuite/protected_main_3.cc create mode 100644 gold/testsuite/relro_script_test.t create mode 100644 gold/testsuite/relro_test.cc create mode 100644 gold/testsuite/relro_test_main.cc create mode 100755 gold/testsuite/retain_symbols_file_test.sh create mode 100644 gold/testsuite/script_test_1.cc create mode 100644 gold/testsuite/script_test_1.t create mode 100644 gold/testsuite/script_test_2.cc create mode 100644 gold/testsuite/script_test_2.t create mode 100644 gold/testsuite/script_test_2a.cc create mode 100644 gold/testsuite/script_test_2b.cc create mode 100755 gold/testsuite/script_test_3.sh create mode 100644 gold/testsuite/script_test_3.t create mode 100755 gold/testsuite/script_test_4.sh create mode 100644 gold/testsuite/script_test_4.t create mode 100644 gold/testsuite/script_test_5.cc create mode 100755 gold/testsuite/script_test_5.sh create mode 100644 gold/testsuite/script_test_5.t create mode 100644 gold/testsuite/searched_file_test.cc create mode 100644 gold/testsuite/searched_file_test_lib.cc create mode 100755 gold/testsuite/split_i386.sh create mode 100644 gold/testsuite/split_i386_1.s create mode 100644 gold/testsuite/split_i386_2.s create mode 100644 gold/testsuite/split_i386_3.s create mode 100644 gold/testsuite/split_i386_4.s create mode 100644 gold/testsuite/split_i386_n.s create mode 100755 gold/testsuite/split_x86_64.sh create mode 100644 gold/testsuite/split_x86_64_1.s create mode 100644 gold/testsuite/split_x86_64_2.s create mode 100644 gold/testsuite/split_x86_64_3.s create mode 100644 gold/testsuite/split_x86_64_4.s create mode 100644 gold/testsuite/split_x86_64_n.s create mode 100644 gold/testsuite/test.cc create mode 100644 gold/testsuite/test.h create mode 100644 gold/testsuite/testfile.cc create mode 100644 gold/testsuite/testfile.h create mode 100644 gold/testsuite/testmain.cc create mode 100644 gold/testsuite/thin_archive_main.cc create mode 100644 gold/testsuite/thin_archive_test_1.cc create mode 100644 gold/testsuite/thin_archive_test_2.cc create mode 100644 gold/testsuite/thin_archive_test_3.cc create mode 100644 gold/testsuite/thin_archive_test_4.cc create mode 100644 gold/testsuite/tls_test.cc create mode 100644 gold/testsuite/tls_test.h create mode 100644 gold/testsuite/tls_test_c.c create mode 100644 gold/testsuite/tls_test_file2.cc create mode 100644 gold/testsuite/tls_test_main.cc create mode 100755 gold/testsuite/two_file_shared.sh create mode 100644 gold/testsuite/two_file_test.h create mode 100644 gold/testsuite/two_file_test_1.cc create mode 100644 gold/testsuite/two_file_test_1b.cc create mode 100644 gold/testsuite/two_file_test_2.cc create mode 100644 gold/testsuite/two_file_test_main.cc create mode 100644 gold/testsuite/undef_symbol.cc create mode 100755 gold/testsuite/undef_symbol.sh create mode 100644 gold/testsuite/undef_symbol_main.cc create mode 100644 gold/testsuite/ver_matching_def.cc create mode 100755 gold/testsuite/ver_matching_test.sh create mode 100644 gold/testsuite/ver_test.h create mode 100644 gold/testsuite/ver_test_1.cc create mode 100755 gold/testsuite/ver_test_1.sh create mode 100644 gold/testsuite/ver_test_10.script create mode 100755 gold/testsuite/ver_test_10.sh create mode 100644 gold/testsuite/ver_test_2.cc create mode 100644 gold/testsuite/ver_test_2.script create mode 100755 gold/testsuite/ver_test_2.sh create mode 100644 gold/testsuite/ver_test_3.cc create mode 100644 gold/testsuite/ver_test_4.cc create mode 100644 gold/testsuite/ver_test_4.script create mode 100755 gold/testsuite/ver_test_4.sh create mode 100644 gold/testsuite/ver_test_5.cc create mode 100644 gold/testsuite/ver_test_5.script create mode 100755 gold/testsuite/ver_test_5.sh create mode 100644 gold/testsuite/ver_test_6.c create mode 100644 gold/testsuite/ver_test_7.cc create mode 100755 gold/testsuite/ver_test_7.sh create mode 100644 gold/testsuite/ver_test_8.script create mode 100644 gold/testsuite/ver_test_9.cc create mode 100644 gold/testsuite/ver_test_main.cc create mode 100644 gold/testsuite/ver_test_main_2.cc create mode 100644 gold/testsuite/version_script.map create mode 100644 gold/testsuite/weak_alias_test_1.cc create mode 100644 gold/testsuite/weak_alias_test_2.cc create mode 100644 gold/testsuite/weak_alias_test_3.cc create mode 100644 gold/testsuite/weak_alias_test_4.cc create mode 100644 gold/testsuite/weak_alias_test_main.cc create mode 100755 gold/testsuite/weak_plt.sh create mode 100644 gold/testsuite/weak_plt_main.cc create mode 100644 gold/testsuite/weak_plt_shared.cc create mode 100644 gold/testsuite/weak_test.cc create mode 100644 gold/testsuite/weak_undef.h create mode 100644 gold/testsuite/weak_undef_file1.cc create mode 100644 gold/testsuite/weak_undef_file2.cc create mode 100644 gold/testsuite/weak_undef_test.cc create mode 100644 gold/tls.h create mode 100644 gold/token.h create mode 100644 gold/version.cc create mode 100644 gold/workqueue-internal.h create mode 100644 gold/workqueue-threads.cc create mode 100644 gold/workqueue.cc create mode 100644 gold/workqueue.h create mode 100644 gold/x86_64.cc create mode 100644 gold/yyscript.y create mode 100644 gprof/ChangeLog-2006 create mode 100644 gprof/ChangeLog-2007 create mode 100644 gprof/ChangeLog-2008 create mode 100644 gprof/fdl.texi delete mode 100644 gprof/po/.cvsignore create mode 100644 gprof/po/nl.gmo create mode 100644 gprof/po/nl.po create mode 100644 gprof/po/ro.gmo create mode 100644 gprof/po/ro.po create mode 100644 include/binary-io.h rename include/{elf => }/dwarf2.h (89%) create mode 100644 include/elf/lm32.h create mode 100644 include/elf/microblaze.h create mode 100644 include/elf/moxie.h create mode 100644 include/elf/vxworks.h create mode 100644 include/gdb/sim-cr16.h create mode 100644 include/gdb/sim-lm32.h create mode 100644 include/opcode/moxie.h create mode 100644 include/plugin-api.h rename {ld => include}/sha1.h (61%) create mode 100644 ld/ChangeLog-2007 create mode 100755 ld/ChangeLog-2008 create mode 100644 ld/deffilep.c create mode 100644 ld/deffilep.h create mode 100644 ld/emulparams/avr25.sh create mode 100644 ld/emulparams/avr31.sh create mode 100644 ld/emulparams/avr35.sh create mode 100644 ld/emulparams/avr51.sh create mode 100644 ld/emulparams/elf32lm32.sh create mode 100644 ld/emulparams/elf32lm32fd.sh create mode 100644 ld/emulparams/elf32mb_linux.sh create mode 100644 ld/emulparams/elf32microblaze.sh create mode 100644 ld/emulparams/elf32moxie.sh create mode 100644 ld/emulparams/elf_l1om.sh create mode 100644 ld/emulparams/elf_l1om_fbsd.sh create mode 100644 ld/emultempl/spu_icache.S create mode 100644 ld/emultempl/spu_icache.o_c delete mode 100644 ld/emultempl/spu_ovl.o create mode 100644 ld/emultempl/spu_ovl.o_c create mode 100644 ld/genscrba.sh delete mode 100644 ld/po/.cvsignore create mode 100644 ld/po/id.gmo create mode 100644 ld/po/id.po create mode 100644 ld/scripttempl/elf64hppa.sc create mode 100644 ld/scripttempl/elfmicroblaze.sc create mode 100644 ld/scripttempl/moxie.sc create mode 100644 ld/testsuite/ChangeLog-2007 create mode 100644 ld/testsuite/ChangeLog-2008 create mode 100644 ld/testsuite/ld-arm/arch-v6.s create mode 100644 ld/testsuite/ld-arm/arch-v6k.s create mode 100644 ld/testsuite/ld-arm/arch-v6t2.s create mode 100644 ld/testsuite/ld-arm/arm-app-movw.s create mode 100644 ld/testsuite/ld-arm/armv4-bx.d create mode 100644 ld/testsuite/ld-arm/armv4-bx.s create mode 100644 ld/testsuite/ld-arm/attr-merge-3.attr create mode 100644 ld/testsuite/ld-arm/attr-merge-3a.s create mode 100644 ld/testsuite/ld-arm/attr-merge-3b.s create mode 100644 ld/testsuite/ld-arm/attr-merge-4.attr create mode 100644 ld/testsuite/ld-arm/attr-merge-4a.s create mode 100644 ld/testsuite/ld-arm/attr-merge-4b.s create mode 100644 ld/testsuite/ld-arm/attr-merge-5.attr create mode 100644 ld/testsuite/ld-arm/attr-merge-5.s create mode 100644 ld/testsuite/ld-arm/attr-merge-arch-1.attr create mode 100644 ld/testsuite/ld-arm/attr-merge-arch-2.attr create mode 100644 ld/testsuite/ld-arm/attr-merge-unknown-1.d create mode 100644 ld/testsuite/ld-arm/attr-merge-unknown-1.s create mode 100644 ld/testsuite/ld-arm/attr-merge-unknown-2.d create mode 100644 ld/testsuite/ld-arm/attr-merge-unknown-2.s create mode 100644 ld/testsuite/ld-arm/attr-merge-unknown-2r.d create mode 100644 ld/testsuite/ld-arm/attr-merge-unknown-3.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-0.s create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-00-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-00.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-02-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-02.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-04-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-04.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-2.s create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-20-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-20.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-22-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-22.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-24-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-24.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-4.s create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-40-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-40.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-42-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-42.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-44-nowarn.d create mode 100644 ld/testsuite/ld-arm/attr-merge-wchar-44.d create mode 100644 ld/testsuite/ld-arm/blank.s create mode 100644 ld/testsuite/ld-arm/callweak-2.d create mode 100644 ld/testsuite/ld-arm/callweak-2.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-arm-target.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-far-1.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-far-2.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-far.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-b-rel-arm.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-b-rel-thumb.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-b-rel.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-b.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-b.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel-thumb.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bcc-rel.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bcc.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bcc.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-arm.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bl-rel-thumb.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bl-rel.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bl.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-bl.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-arm.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-blx-rel-thumb.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-blx-rel.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-blx.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-blx.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-hdr.d create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-hdr.s create mode 100644 ld/testsuite/ld-arm/cortex-a8-fix-hdr.t create mode 100644 ld/testsuite/ld-arm/cortex-a8-thumb-target.s create mode 100644 ld/testsuite/ld-arm/discard-unwind.ld create mode 100644 ld/testsuite/ld-arm/farcall-arm-arm-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-arm-arm.d create mode 100644 ld/testsuite/ld-arm/farcall-arm-arm.s create mode 100644 ld/testsuite/ld-arm/farcall-arm-thumb-blx-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-arm-thumb-blx.d create mode 100644 ld/testsuite/ld-arm/farcall-arm-thumb-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-arm-thumb.d create mode 100644 ld/testsuite/ld-arm/farcall-arm-thumb.s create mode 100644 ld/testsuite/ld-arm/farcall-group-limit.d create mode 100644 ld/testsuite/ld-arm/farcall-group-size2.d create mode 100644 ld/testsuite/ld-arm/farcall-group.d create mode 100644 ld/testsuite/ld-arm/farcall-group.s create mode 100644 ld/testsuite/ld-arm/farcall-group2.s create mode 100644 ld/testsuite/ld-arm/farcall-group3.s create mode 100644 ld/testsuite/ld-arm/farcall-group4.s create mode 100644 ld/testsuite/ld-arm/farcall-mix.d create mode 100644 ld/testsuite/ld-arm/farcall-mix.s create mode 100644 ld/testsuite/ld-arm/farcall-mix2.d create mode 100644 ld/testsuite/ld-arm/farcall-mix2.s create mode 100644 ld/testsuite/ld-arm/farcall-mixed-app-v5.d create mode 100644 ld/testsuite/ld-arm/farcall-mixed-app.d create mode 100644 ld/testsuite/ld-arm/farcall-mixed-app.r create mode 100644 ld/testsuite/ld-arm/farcall-mixed-app.s create mode 100644 ld/testsuite/ld-arm/farcall-mixed-app.sym create mode 100644 ld/testsuite/ld-arm/farcall-mixed-lib.d create mode 100644 ld/testsuite/ld-arm/farcall-mixed-lib.r create mode 100644 ld/testsuite/ld-arm/farcall-mixed-lib1.s create mode 100644 ld/testsuite/ld-arm/farcall-mixed-lib2.s create mode 100644 ld/testsuite/ld-arm/farcall-section.d create mode 100644 ld/testsuite/ld-arm/farcall-section.s create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm-blx-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm-blx.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm-short.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm-short.s create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-arm.s create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb-blx-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb-blx.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb-m-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb-m.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb-pic-veneer.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb.d create mode 100644 ld/testsuite/ld-arm/farcall-thumb-thumb.s create mode 100644 ld/testsuite/ld-arm/movw-merge.d create mode 100644 ld/testsuite/ld-arm/movw-merge.s create mode 100644 ld/testsuite/ld-arm/movw-shared-1.d create mode 100644 ld/testsuite/ld-arm/movw-shared-1.s create mode 100644 ld/testsuite/ld-arm/movw-shared-2.d create mode 100644 ld/testsuite/ld-arm/movw-shared-2.s create mode 100644 ld/testsuite/ld-arm/movw-shared-3.d create mode 100644 ld/testsuite/ld-arm/movw-shared-3.s create mode 100644 ld/testsuite/ld-arm/movw-shared-4.d create mode 100644 ld/testsuite/ld-arm/movw-shared-4.s create mode 100644 ld/testsuite/ld-arm/symbian-seg1.d create mode 100644 ld/testsuite/ld-arm/symbian-seg1.s create mode 100644 ld/testsuite/ld-arm/thumb2-b-interwork.d create mode 100644 ld/testsuite/ld-arm/thumb2-b-interwork.s create mode 100644 ld/testsuite/ld-arm/thumb2-bl-as-thumb1-bad-noeabi.d create mode 100644 ld/testsuite/ld-arm/thumb2-bl-bad-noeabi.d create mode 100644 ld/testsuite/ld-arm/thumb2-bl-blx-interwork.d create mode 100644 ld/testsuite/ld-arm/thumb2-bl-blx-interwork.s create mode 100644 ld/testsuite/ld-arm/thumb2-bl-undefweak.d create mode 100644 ld/testsuite/ld-arm/thumb2-bl-undefweak.s create mode 100644 ld/testsuite/ld-arm/thumb2-bl-undefweak1.d create mode 100644 ld/testsuite/ld-arm/thumb2-bl-undefweak1.s create mode 100644 ld/testsuite/ld-arm/unwind-1.d create mode 100644 ld/testsuite/ld-arm/unwind-1.s create mode 100644 ld/testsuite/ld-arm/unwind-2.d create mode 100644 ld/testsuite/ld-arm/unwind-2.s create mode 100644 ld/testsuite/ld-arm/unwind-3.d create mode 100644 ld/testsuite/ld-arm/unwind-3.s create mode 100644 ld/testsuite/ld-arm/unwind-4.d create mode 100644 ld/testsuite/ld-arm/unwind-4.s create mode 100644 ld/testsuite/ld-arm/unwind-5.d create mode 100644 ld/testsuite/ld-arm/unwind-5.s create mode 100644 ld/testsuite/ld-cris/dso-1b.s create mode 100644 ld/testsuite/ld-cris/expalltst3 create mode 100644 ld/testsuite/ld-cris/expdref2.s create mode 100644 ld/testsuite/ld-cris/expdref3.s create mode 100644 ld/testsuite/ld-cris/expdref4.s create mode 100644 ld/testsuite/ld-cris/expdyn1w.s create mode 100644 ld/testsuite/ld-cris/expdyn2.s create mode 100644 ld/testsuite/ld-cris/got7.s create mode 100644 ld/testsuite/ld-cris/hidedsofns2468 create mode 100644 ld/testsuite/ld-cris/init.s create mode 100644 ld/testsuite/ld-cris/libdso-12b.d create mode 100644 ld/testsuite/ld-cris/libdso-12c.d create mode 100644 ld/testsuite/ld-cris/libdso-13b.d create mode 100644 ld/testsuite/ld-cris/libdso-15.d create mode 100644 ld/testsuite/ld-cris/libdso-15b.d create mode 100644 ld/testsuite/ld-cris/libdso-1b.d create mode 100644 ld/testsuite/ld-cris/libdso-1c.d create mode 100644 ld/testsuite/ld-cris/libdso-1d.d create mode 100644 ld/testsuite/ld-cris/pic-gc-72.d create mode 100644 ld/testsuite/ld-cris/pic-gc-72.s create mode 100644 ld/testsuite/ld-cris/pic-gc-73.d create mode 100644 ld/testsuite/ld-cris/pic-gc-73.s create mode 100644 ld/testsuite/ld-cris/tls-commx.s create mode 100644 ld/testsuite/ld-cris/tls-dso-dtpoffd2.d create mode 100644 ld/testsuite/ld-cris/tls-dso-dtpoffd4.d create mode 100644 ld/testsuite/ld-cris/tls-dso-x1x2-1.d create mode 100644 ld/testsuite/ld-cris/tls-dso-xz-1.d create mode 100644 ld/testsuite/ld-cris/tls-dtpoffdx.s create mode 100644 ld/testsuite/ld-cris/tls-dtprelm.s create mode 100644 ld/testsuite/ld-cris/tls-e-20.d create mode 100644 ld/testsuite/ld-cris/tls-e-20a.d create mode 100644 ld/testsuite/ld-cris/tls-e-21.d create mode 100644 ld/testsuite/ld-cris/tls-e-22.d create mode 100644 ld/testsuite/ld-cris/tls-e-23.d create mode 100644 ld/testsuite/ld-cris/tls-e-66.d create mode 100644 ld/testsuite/ld-cris/tls-e-80.d create mode 100644 ld/testsuite/ld-cris/tls-e-dtpoffd1.d create mode 100644 ld/testsuite/ld-cris/tls-e-dtpoffd3.d create mode 100644 ld/testsuite/ld-cris/tls-e-tpoffcomm1.d create mode 100644 ld/testsuite/ld-cris/tls-e-tpoffcomm1.s create mode 100644 ld/testsuite/ld-cris/tls-err-20x.d create mode 100644 ld/testsuite/ld-cris/tls-err-24.d create mode 100644 ld/testsuite/ld-cris/tls-err-25.d create mode 100644 ld/testsuite/ld-cris/tls-err-26.d create mode 100644 ld/testsuite/ld-cris/tls-err-27.d create mode 100644 ld/testsuite/ld-cris/tls-err-28.d create mode 100644 ld/testsuite/ld-cris/tls-err-29.d create mode 100644 ld/testsuite/ld-cris/tls-err-31.d create mode 100644 ld/testsuite/ld-cris/tls-err-33.d create mode 100644 ld/testsuite/ld-cris/tls-err-35.d create mode 100644 ld/testsuite/ld-cris/tls-err-37.d create mode 100644 ld/testsuite/ld-cris/tls-err-39.d create mode 100644 ld/testsuite/ld-cris/tls-err-40.d create mode 100644 ld/testsuite/ld-cris/tls-err-41.d create mode 100644 ld/testsuite/ld-cris/tls-err-43.d create mode 100644 ld/testsuite/ld-cris/tls-err-44.d create mode 100644 ld/testsuite/ld-cris/tls-err-45.d create mode 100644 ld/testsuite/ld-cris/tls-err-47.d create mode 100644 ld/testsuite/ld-cris/tls-err-48.d create mode 100644 ld/testsuite/ld-cris/tls-err-49.d create mode 100644 ld/testsuite/ld-cris/tls-err-51.d create mode 100644 ld/testsuite/ld-cris/tls-err-52.d create mode 100644 ld/testsuite/ld-cris/tls-err-53.d create mode 100644 ld/testsuite/ld-cris/tls-err-55.d create mode 100644 ld/testsuite/ld-cris/tls-err-55.s create mode 100644 ld/testsuite/ld-cris/tls-err-56.d create mode 100644 ld/testsuite/ld-cris/tls-err-56.s create mode 100644 ld/testsuite/ld-cris/tls-err-62.d create mode 100644 ld/testsuite/ld-cris/tls-err-62.s create mode 100644 ld/testsuite/ld-cris/tls-err-65.d create mode 100644 ld/testsuite/ld-cris/tls-err-67.d create mode 100644 ld/testsuite/ld-cris/tls-err-77.d create mode 100644 ld/testsuite/ld-cris/tls-gc-68.d create mode 100644 ld/testsuite/ld-cris/tls-gc-69.d create mode 100644 ld/testsuite/ld-cris/tls-gc-70.d create mode 100644 ld/testsuite/ld-cris/tls-gc-71.d create mode 100644 ld/testsuite/ld-cris/tls-gc-71.s create mode 100644 ld/testsuite/ld-cris/tls-gc-75.d create mode 100644 ld/testsuite/ld-cris/tls-gc-76.d create mode 100644 ld/testsuite/ld-cris/tls-gc-76.s create mode 100644 ld/testsuite/ld-cris/tls-gc-79.d create mode 100644 ld/testsuite/ld-cris/tls-gd-1.d create mode 100644 ld/testsuite/ld-cris/tls-gd-1.s create mode 100644 ld/testsuite/ld-cris/tls-gd-1h.d create mode 100644 ld/testsuite/ld-cris/tls-gd-2.d create mode 100644 ld/testsuite/ld-cris/tls-gd-2.s create mode 100644 ld/testsuite/ld-cris/tls-gd-2h.d create mode 100644 ld/testsuite/ld-cris/tls-gd-3.d create mode 100644 ld/testsuite/ld-cris/tls-gd-3.s create mode 100644 ld/testsuite/ld-cris/tls-gd-3h.d create mode 100644 ld/testsuite/ld-cris/tls-gdgotrelm.s create mode 100644 ld/testsuite/ld-cris/tls-global-74.d create mode 100644 ld/testsuite/ld-cris/tls-gottprelm.s create mode 100644 ld/testsuite/ld-cris/tls-hx.s create mode 100644 ld/testsuite/ld-cris/tls-hx1x2.s create mode 100644 ld/testsuite/ld-cris/tls-ie-10.d create mode 100644 ld/testsuite/ld-cris/tls-ie-10.s create mode 100644 ld/testsuite/ld-cris/tls-ie-11.d create mode 100644 ld/testsuite/ld-cris/tls-ie-11.s create mode 100644 ld/testsuite/ld-cris/tls-ie-78.d create mode 100644 ld/testsuite/ld-cris/tls-ie-8.d create mode 100644 ld/testsuite/ld-cris/tls-ie-8.s create mode 100644 ld/testsuite/ld-cris/tls-ie-8e.s create mode 100644 ld/testsuite/ld-cris/tls-ie-8e1.d create mode 100644 ld/testsuite/ld-cris/tls-ie-9.d create mode 100644 ld/testsuite/ld-cris/tls-ie-9.s create mode 100644 ld/testsuite/ld-cris/tls-js1.d create mode 100644 ld/testsuite/ld-cris/tls-ld-4.d create mode 100644 ld/testsuite/ld-cris/tls-ld-4.s create mode 100644 ld/testsuite/ld-cris/tls-ld-5.d create mode 100644 ld/testsuite/ld-cris/tls-ld-5.s create mode 100644 ld/testsuite/ld-cris/tls-ld-6.d create mode 100644 ld/testsuite/ld-cris/tls-ld-6.s create mode 100644 ld/testsuite/ld-cris/tls-ld-7.d create mode 100644 ld/testsuite/ld-cris/tls-ld-7.s create mode 100644 ld/testsuite/ld-cris/tls-ldgd-14.d create mode 100644 ld/testsuite/ld-cris/tls-ldgd-14.s create mode 100644 ld/testsuite/ld-cris/tls-ldgd-15.d create mode 100644 ld/testsuite/ld-cris/tls-ldgd-15.s create mode 100644 ld/testsuite/ld-cris/tls-ldgde-14.d create mode 100644 ld/testsuite/ld-cris/tls-ldgde-15.d create mode 100644 ld/testsuite/ld-cris/tls-ldgdex-14.d create mode 100644 ld/testsuite/ld-cris/tls-ldgdex-15.d create mode 100644 ld/testsuite/ld-cris/tls-ldgdx-14.d create mode 100644 ld/testsuite/ld-cris/tls-ldgdx-15.d create mode 100644 ld/testsuite/ld-cris/tls-le-12.d create mode 100644 ld/testsuite/ld-cris/tls-le-12.s create mode 100644 ld/testsuite/ld-cris/tls-le-12s.d create mode 100644 ld/testsuite/ld-cris/tls-le-12s.s create mode 100644 ld/testsuite/ld-cris/tls-le-13.d create mode 100644 ld/testsuite/ld-cris/tls-le-13.s create mode 100644 ld/testsuite/ld-cris/tls-le-13s.d create mode 100644 ld/testsuite/ld-cris/tls-le-13s.s create mode 100644 ld/testsuite/ld-cris/tls-legd-16.d create mode 100644 ld/testsuite/ld-cris/tls-legd-16.s create mode 100644 ld/testsuite/ld-cris/tls-legd-17.d create mode 100644 ld/testsuite/ld-cris/tls-legdx-16.d create mode 100644 ld/testsuite/ld-cris/tls-legdx-17.d create mode 100644 ld/testsuite/ld-cris/tls-leie-18.d create mode 100644 ld/testsuite/ld-cris/tls-leie-19.d create mode 100644 ld/testsuite/ld-cris/tls-leie-19.s create mode 100644 ld/testsuite/ld-cris/tls-local-54.d create mode 100644 ld/testsuite/ld-cris/tls-local-54.s create mode 100644 ld/testsuite/ld-cris/tls-local-57.d create mode 100644 ld/testsuite/ld-cris/tls-local-57.s create mode 100644 ld/testsuite/ld-cris/tls-local-58.d create mode 100644 ld/testsuite/ld-cris/tls-local-58.s create mode 100644 ld/testsuite/ld-cris/tls-local-59.d create mode 100644 ld/testsuite/ld-cris/tls-local-59.s create mode 100644 ld/testsuite/ld-cris/tls-local-60.d create mode 100644 ld/testsuite/ld-cris/tls-local-61.d create mode 100644 ld/testsuite/ld-cris/tls-local-63.d create mode 100644 ld/testsuite/ld-cris/tls-local-64.d create mode 100644 ld/testsuite/ld-cris/tls-ok-30.d create mode 100644 ld/testsuite/ld-cris/tls-ok-32.d create mode 100644 ld/testsuite/ld-cris/tls-ok-34.d create mode 100644 ld/testsuite/ld-cris/tls-ok-36.d create mode 100644 ld/testsuite/ld-cris/tls-tbss64.s create mode 100644 ld/testsuite/ld-cris/tls-tprelm.s create mode 100644 ld/testsuite/ld-cris/tls-und-38.d create mode 100644 ld/testsuite/ld-cris/tls-und-42.d create mode 100644 ld/testsuite/ld-cris/tls-und-46.d create mode 100644 ld/testsuite/ld-cris/tls-und-50.d create mode 100644 ld/testsuite/ld-cris/tls-x.s create mode 100644 ld/testsuite/ld-cris/tls-x1x2.s create mode 100644 ld/testsuite/ld-cris/tls-z.s create mode 100644 ld/testsuite/ld-cris/tls128.s create mode 100644 ld/testsuite/ld-cris/tls128g.s create mode 100644 ld/testsuite/ld-cris/weakhid.s create mode 100644 ld/testsuite/ld-cris/weakhiddso.d create mode 100644 ld/testsuite/ld-cris/weakref3.d create mode 100644 ld/testsuite/ld-cris/weakref4.d create mode 100644 ld/testsuite/ld-elf/comm1.c create mode 100644 ld/testsuite/ld-elf/commonpage2.d create mode 100644 ld/testsuite/ld-elf/eh-group.exp create mode 100644 ld/testsuite/ld-elf/eh-group1.s create mode 100644 ld/testsuite/ld-elf/eh-group2.s create mode 100644 ld/testsuite/ld-elf/eh6.d create mode 100644 ld/testsuite/ld-elf/eh6.s create mode 100644 ld/testsuite/ld-elf/flags1.d create mode 100644 ld/testsuite/ld-elf/flags1.ld create mode 100644 ld/testsuite/ld-elf/flags1.s create mode 100644 ld/testsuite/ld-elf/func1.c create mode 100644 ld/testsuite/ld-elf/group4.d create mode 100644 ld/testsuite/ld-elf/group5.d create mode 100644 ld/testsuite/ld-elf/group6.d create mode 100644 ld/testsuite/ld-elf/group7.d create mode 100644 ld/testsuite/ld-elf/group8.s create mode 100644 ld/testsuite/ld-elf/group8a.d create mode 100644 ld/testsuite/ld-elf/group8b.d create mode 100644 ld/testsuite/ld-elf/group9.s create mode 100644 ld/testsuite/ld-elf/group9a.d create mode 100644 ld/testsuite/ld-elf/group9b.d create mode 100644 ld/testsuite/ld-elf/linkoncerdiff.d create mode 100644 ld/testsuite/ld-elf/linkoncerdiff1.s create mode 100644 ld/testsuite/ld-elf/linkoncerdiff2.s create mode 100644 ld/testsuite/ld-elf/lma.lnk create mode 100644 ld/testsuite/ld-elf/lma.s create mode 100644 ld/testsuite/ld-elf/loadaddr.t create mode 100644 ld/testsuite/ld-elf/maxpage4.d create mode 100644 ld/testsuite/ld-elf/maxpage4.t create mode 100644 ld/testsuite/ld-elf/noload-3.d create mode 100644 ld/testsuite/ld-elf/noload-3.s create mode 100644 ld/testsuite/ld-elf/noload-3.t create mode 100644 ld/testsuite/ld-elf/note-2.d create mode 100644 ld/testsuite/ld-elf/note-2.s create mode 100644 ld/testsuite/ld-elf/note-2.t create mode 100644 ld/testsuite/ld-elf/orphan3.d create mode 100644 ld/testsuite/ld-elf/orphan3a.s create mode 100644 ld/testsuite/ld-elf/orphan3b.s create mode 100644 ld/testsuite/ld-elf/orphan3c.s create mode 100644 ld/testsuite/ld-elf/orphan3d.s create mode 100644 ld/testsuite/ld-elf/orphan3e.s create mode 100644 ld/testsuite/ld-elf/orphan3f.s create mode 100644 ld/testsuite/ld-elf/pr9676-1.c create mode 100644 ld/testsuite/ld-elf/pr9676-2.c create mode 100644 ld/testsuite/ld-elf/pr9676-3.c create mode 100644 ld/testsuite/ld-elf/pr9676-4.c create mode 100644 ld/testsuite/ld-elf/pr9676.rd create mode 100644 ld/testsuite/ld-elf/pr9679-1.c create mode 100644 ld/testsuite/ld-elf/pr9679-2.c create mode 100644 ld/testsuite/ld-elf/pr9679.rd create mode 100644 ld/testsuite/ld-elf/relro1.s create mode 100644 ld/testsuite/ld-elf/relro2.s create mode 100644 ld/testsuite/ld-elf/sec-to-seg-script-adjoining-pages.t create mode 100644 ld/testsuite/ld-elf/sec-to-seg-script-disjoint-pages.t create mode 100644 ld/testsuite/ld-elf/sec-to-seg-script-same-page.t create mode 100644 ld/testsuite/ld-elf/sec-to-seg.exp create mode 100644 ld/testsuite/ld-elf/sec-to-seg1.s create mode 100644 ld/testsuite/ld-elf/sec-to-seg2.s create mode 100644 ld/testsuite/ld-elf/seg.d create mode 100644 ld/testsuite/ld-elf/seg.s create mode 100644 ld/testsuite/ld-elf/seg.t create mode 100644 ld/testsuite/ld-elf/textaddr1.d create mode 100644 ld/testsuite/ld-elf/textaddr2.d create mode 100644 ld/testsuite/ld-elf/tls_gc.s create mode 100644 ld/testsuite/ld-elfcomm/sort-common.s create mode 100644 ld/testsuite/ld-gc/gc.c create mode 100644 ld/testsuite/ld-gc/gc.exp create mode 100644 ld/testsuite/ld-gc/noent.d create mode 100644 ld/testsuite/ld-gc/noent.s create mode 100644 ld/testsuite/ld-i386/hidden1.d create mode 100644 ld/testsuite/ld-i386/hidden1.s create mode 100644 ld/testsuite/ld-i386/hidden2.d create mode 100644 ld/testsuite/ld-i386/hidden2.s create mode 100644 ld/testsuite/ld-i386/hidden3.d create mode 100644 ld/testsuite/ld-i386/hidden3.s create mode 100644 ld/testsuite/ld-i386/protected1.d create mode 100644 ld/testsuite/ld-i386/protected1.s create mode 100644 ld/testsuite/ld-i386/protected2.d create mode 100644 ld/testsuite/ld-i386/protected2.s create mode 100644 ld/testsuite/ld-i386/protected3.d create mode 100644 ld/testsuite/ld-i386/protected3.s create mode 100644 ld/testsuite/ld-i386/tlsgd1.dd create mode 100644 ld/testsuite/ld-i386/tlsgd1.s create mode 100644 ld/testsuite/ld-i386/tlsgd2.d create mode 100644 ld/testsuite/ld-i386/tlsgd2.s create mode 100644 ld/testsuite/ld-i386/tlsie1.dd create mode 100644 ld/testsuite/ld-i386/tlsie1.s create mode 100644 ld/testsuite/ld-i386/tlsie2.d create mode 100644 ld/testsuite/ld-i386/tlsie2.s create mode 100644 ld/testsuite/ld-i386/tlsie3.d create mode 100644 ld/testsuite/ld-i386/tlsie3.s create mode 100644 ld/testsuite/ld-i386/tlsie4.d create mode 100644 ld/testsuite/ld-i386/tlsie4.s create mode 100644 ld/testsuite/ld-i386/tlsie5.d create mode 100644 ld/testsuite/ld-i386/tlsie5.s create mode 100644 ld/testsuite/ld-i386/tlsld1.dd create mode 100644 ld/testsuite/ld-i386/tlsld1.s create mode 100644 ld/testsuite/ld-i386/tlspie1.d create mode 100644 ld/testsuite/ld-i386/tlspie1.s create mode 100644 ld/testsuite/ld-ia64/line.exp create mode 100644 ld/testsuite/ld-ia64/undefined.s create mode 100644 ld/testsuite/ld-ifunc/binutils.exp create mode 100644 ld/testsuite/ld-ifunc/ifunc-1-local-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-1-local-x86.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-1-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-1-x86.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-local-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-local-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-local-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-2-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-3-x86.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-3a-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-3b-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-4-local-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-4-local-x86.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-4-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-4-x86.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-5-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-5-local-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-5-local-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-5-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-5a-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5a-local-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5a-local-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5a-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5b-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5b-local-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5b-local-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5b-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5r-local-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-5r-local-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-6-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-6-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-6a-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-6a-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-6b-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-6b-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-7-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-7-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-7a-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-7a-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-7b-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-7b-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-8-i386.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-8-x86-64.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-8a-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-8a-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-8b-i386.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-8b-x86-64.s create mode 100644 ld/testsuite/ld-ifunc/ifunc-9-x86.d create mode 100644 ld/testsuite/ld-ifunc/ifunc-9-x86.s create mode 100644 ld/testsuite/ld-ifunc/ifunc.exp create mode 100644 ld/testsuite/ld-ifunc/lib.c create mode 100644 ld/testsuite/ld-ifunc/prog.c create mode 100644 ld/testsuite/ld-ifunc/test-1.c create mode 100644 ld/testsuite/ld-ifunc/test-2.c create mode 100644 ld/testsuite/ld-m68k/got-1.d create mode 100644 ld/testsuite/ld-m68k/got-1.s create mode 100644 ld/testsuite/ld-m68k/got-multigot-12-13-14-34-35-ok.d create mode 100644 ld/testsuite/ld-m68k/got-multigot-14-ok.d create mode 100644 ld/testsuite/ld-m68k/got-multigot-15-er.d create mode 100644 ld/testsuite/ld-m68k/got-negative-12-13-14-34-ok.d create mode 100644 ld/testsuite/ld-m68k/got-negative-12-13-14-35-er.d create mode 100644 ld/testsuite/ld-m68k/got-negative-14-ok.d create mode 100644 ld/testsuite/ld-m68k/got-negative-15-er.d create mode 100644 ld/testsuite/ld-m68k/got-single-12-ok.d create mode 100644 ld/testsuite/ld-m68k/got-single-13-er.d create mode 100644 ld/testsuite/ld-m68k/got-xgot-12-13-14-15-34-35-ok.d create mode 100644 ld/testsuite/ld-m68k/got-xgot-15-ok.d create mode 100644 ld/testsuite/ld-m68k/m68k-got.exp create mode 100644 ld/testsuite/ld-m68k/tls-def-1.d create mode 100644 ld/testsuite/ld-m68k/tls-def-1.s create mode 100644 ld/testsuite/ld-m68k/tls-gd-1.d create mode 100644 ld/testsuite/ld-m68k/tls-gd-1.d2 create mode 100644 ld/testsuite/ld-m68k/tls-gd-1.d3 create mode 100644 ld/testsuite/ld-m68k/tls-gd-1.s create mode 100644 ld/testsuite/ld-m68k/tls-gd-2.d create mode 100644 ld/testsuite/ld-m68k/tls-gd-2.s create mode 100644 ld/testsuite/ld-m68k/tls-gd-ie-1.d create mode 100644 ld/testsuite/ld-m68k/tls-gd-ie-1.s create mode 100644 ld/testsuite/ld-m68k/tls-ie-1.d create mode 100644 ld/testsuite/ld-m68k/tls-ie-1.s create mode 100644 ld/testsuite/ld-m68k/tls-ld-1.d create mode 100644 ld/testsuite/ld-m68k/tls-ld-1.s create mode 100644 ld/testsuite/ld-m68k/tls-ld-2.d create mode 100644 ld/testsuite/ld-m68k/tls-ld-2.s create mode 100644 ld/testsuite/ld-m68k/tls-le-1.s create mode 100644 ld/testsuite/ld-m68k/tls-main-1.d create mode 100644 ld/testsuite/ld-m68k/tls-main-1.s create mode 100644 ld/testsuite/ld-m68k/tls-no-1.s create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-04.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-05.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-15.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-24.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-25.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-34.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-35.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-40.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-42.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-43.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-44.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-45.d create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-5.s create mode 100644 ld/testsuite/ld-mips-elf/attr-gnu-4-51.d create mode 100644 ld/testsuite/ld-mips-elf/dyn-sec64.d create mode 100644 ld/testsuite/ld-mips-elf/dyn-sec64.ld create mode 100644 ld/testsuite/ld-mips-elf/dyn-sec64.s create mode 100644 ld/testsuite/ld-mips-elf/got-dump-1.d create mode 100644 ld/testsuite/ld-mips-elf/got-dump-1.ld create mode 100644 ld/testsuite/ld-mips-elf/got-dump-1.s create mode 100644 ld/testsuite/ld-mips-elf/got-dump-2.d create mode 100644 ld/testsuite/ld-mips-elf/got-dump-2.ld create mode 100644 ld/testsuite/ld-mips-elf/got-dump-2.s create mode 100644 ld/testsuite/ld-mips-elf/got-page-1.d create mode 100644 ld/testsuite/ld-mips-elf/got-page-1.ld create mode 100644 ld/testsuite/ld-mips-elf/got-page-1.s create mode 100644 ld/testsuite/ld-mips-elf/got-page-2.d create mode 100644 ld/testsuite/ld-mips-elf/got-page-2.s create mode 100644 ld/testsuite/ld-mips-elf/got-page-3.d create mode 100644 ld/testsuite/ld-mips-elf/got-page-3a.s create mode 100644 ld/testsuite/ld-mips-elf/got-page-3b.s create mode 100644 ld/testsuite/ld-mips-elf/got-page-3c.s create mode 100644 ld/testsuite/ld-mips-elf/got-vers-1.dd create mode 100644 ld/testsuite/ld-mips-elf/got-vers-1.rd create mode 100644 ld/testsuite/ld-mips-elf/got-vers-1.sd create mode 100644 ld/testsuite/ld-mips-elf/got-vers-1.ver create mode 100644 ld/testsuite/ld-mips-elf/got-vers-1a.s create mode 100644 ld/testsuite/ld-mips-elf/got-vers-1b.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1-dummy.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1.dd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1.gd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1.inc create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1.ld create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1a.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-1b.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2.ad create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2.dd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2.gd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2.nd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2.rd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2a.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-2b.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-3.dd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-3.gd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-3.inc create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-3.rd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-3a.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-3b.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4.ver create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4a.dd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4a.gd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4a.nd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4a.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4b.dd create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4b.s create mode 100644 ld/testsuite/ld-mips-elf/mips16-pic-4c.s create mode 100644 ld/testsuite/ld-mips-elf/no-shared-1-n32.d create mode 100644 ld/testsuite/ld-mips-elf/no-shared-1-n64.d create mode 100644 ld/testsuite/ld-mips-elf/no-shared-1-n64.s create mode 100644 ld/testsuite/ld-mips-elf/no-shared-1-o32.d create mode 100644 ld/testsuite/ld-mips-elf/no-shared-1-o32.s create mode 100644 ld/testsuite/ld-mips-elf/no-shared-1.ld create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1-rel.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1.ld create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-1b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-2.d create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-2a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-2b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3-error.d create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.ld create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3a.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ad create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.ld create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.pd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.rd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-3b.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4-error.d create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ad create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.ld create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.rd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-4b.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ad create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.ld create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.pd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.rd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-5b.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.ad create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.pd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.rd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n32c.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.ad create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.pd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.rd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-n64c.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.ad create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.dd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.gd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.nd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.pd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.rd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32.sd create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32a.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32b.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6-o32c.s create mode 100644 ld/testsuite/ld-mips-elf/pic-and-nonpic-6.ld create mode 100644 ld/testsuite/ld-mips-elf/reloc-estimate-1.d create mode 100644 ld/testsuite/ld-mips-elf/reloc-estimate-1.ld create mode 100644 ld/testsuite/ld-mips-elf/reloc-estimate-1a.s create mode 100644 ld/testsuite/ld-mips-elf/reloc-estimate-1b.s create mode 100644 ld/testsuite/ld-mmix/loc10.d create mode 100644 ld/testsuite/ld-mmix/loc10.s create mode 100644 ld/testsuite/ld-mmix/loc10m.d create mode 100644 ld/testsuite/ld-mmix/loc8.d create mode 100644 ld/testsuite/ld-mmix/loc8.s create mode 100644 ld/testsuite/ld-mmix/loc8m.d create mode 100644 ld/testsuite/ld-mmix/loc9.d create mode 100644 ld/testsuite/ld-mmix/loc9.s create mode 100644 ld/testsuite/ld-mmix/loc9m.d create mode 100644 ld/testsuite/ld-mn10300/i112045-1.d create mode 100644 ld/testsuite/ld-mn10300/i112045-1.s create mode 100644 ld/testsuite/ld-mn10300/i112045-2.d create mode 100644 ld/testsuite/ld-mn10300/i112045-2.s create mode 100644 ld/testsuite/ld-mn10300/i112045-3.d create mode 100644 ld/testsuite/ld-mn10300/i112045-3.s create mode 100644 ld/testsuite/ld-mn10300/i126256-1.c create mode 100644 ld/testsuite/ld-mn10300/i126256-2.c create mode 100644 ld/testsuite/ld-mn10300/i127740.d create mode 100644 ld/testsuite/ld-mn10300/i127740.s create mode 100644 ld/testsuite/ld-mn10300/i135409-1.d create mode 100644 ld/testsuite/ld-mn10300/i135409-1.s create mode 100644 ld/testsuite/ld-mn10300/i135409-2.d create mode 100644 ld/testsuite/ld-mn10300/i135409-2.s create mode 100644 ld/testsuite/ld-mn10300/i135409-3.d create mode 100644 ld/testsuite/ld-mn10300/i135409-3.s create mode 100644 ld/testsuite/ld-mn10300/i135409-4.d create mode 100644 ld/testsuite/ld-mn10300/i135409-4.s create mode 100644 ld/testsuite/ld-mn10300/i135409-4.t create mode 100644 ld/testsuite/ld-mn10300/i135409-5.d create mode 100644 ld/testsuite/ld-mn10300/i135409-5.s create mode 100644 ld/testsuite/ld-mn10300/i135409-5.t create mode 100644 ld/testsuite/ld-mn10300/i143317.d create mode 100644 ld/testsuite/ld-mn10300/i143317.s create mode 100644 ld/testsuite/ld-mn10300/i143317.t create mode 100644 ld/testsuite/ld-mn10300/i36434-2.s create mode 100644 ld/testsuite/ld-mn10300/i36434.d create mode 100644 ld/testsuite/ld-mn10300/i36434.s create mode 100644 ld/testsuite/ld-mn10300/mn10300.exp create mode 100755 ld/testsuite/ld-pe/aligncomm-1.c create mode 100755 ld/testsuite/ld-pe/aligncomm-2.c create mode 100755 ld/testsuite/ld-pe/aligncomm-3.c create mode 100755 ld/testsuite/ld-pe/aligncomm-4.c create mode 100755 ld/testsuite/ld-pe/aligncomm.d create mode 100644 ld/testsuite/ld-pe/export_dynamic_warning.d create mode 100755 ld/testsuite/ld-pe/export_dynamic_warning.s create mode 100644 ld/testsuite/ld-pe/exports.d create mode 100644 ld/testsuite/ld-pe/exports.s create mode 100755 ld/testsuite/ld-pe/exports64.d create mode 100755 ld/testsuite/ld-pe/longsecn-1.d create mode 100755 ld/testsuite/ld-pe/longsecn-2.d create mode 100755 ld/testsuite/ld-pe/longsecn-3.d create mode 100755 ld/testsuite/ld-pe/longsecn-4.d create mode 100755 ld/testsuite/ld-pe/longsecn-5.d create mode 100755 ld/testsuite/ld-pe/longsecn.d create mode 100755 ld/testsuite/ld-pe/longsecn.s create mode 100755 ld/testsuite/ld-pe/non-c-lang-syms.d create mode 100755 ld/testsuite/ld-pe/non-c-lang-syms.s create mode 100644 ld/testsuite/ld-pe/orphan.d create mode 100644 ld/testsuite/ld-pe/orphana.s create mode 100644 ld/testsuite/ld-pe/orphanb.s create mode 100644 ld/testsuite/ld-pe/orphand.s create mode 100644 ld/testsuite/ld-pe/orphane.s create mode 100755 ld/testsuite/ld-pe/pe-compile.exp rename ld/testsuite/ld-pe/{direct.exp => pe-run.exp} (83%) mode change 100644 => 100755 create mode 100644 ld/testsuite/ld-pe/vers-script-1.d create mode 100755 ld/testsuite/ld-pe/vers-script-1.ver create mode 100644 ld/testsuite/ld-pe/vers-script-2.d create mode 100755 ld/testsuite/ld-pe/vers-script-2.ver create mode 100644 ld/testsuite/ld-pe/vers-script-3.d create mode 100755 ld/testsuite/ld-pe/vers-script-3.ver create mode 100644 ld/testsuite/ld-pe/vers-script-4.d create mode 100755 ld/testsuite/ld-pe/vers-script-4.ver create mode 100755 ld/testsuite/ld-pe/vers-script-dll.c create mode 100644 ld/testsuite/ld-pie/start.d create mode 100644 ld/testsuite/ld-pie/start.s create mode 100644 ld/testsuite/ld-powerpc/aix-abs-branch-1.dd create mode 100644 ld/testsuite/ld-powerpc/aix-abs-branch-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-abs-branch-1.im create mode 100644 ld/testsuite/ld-powerpc/aix-abs-branch-1.nd create mode 100644 ld/testsuite/ld-powerpc/aix-abs-branch-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-abs-reloc-1.im create mode 100644 ld/testsuite/ld-powerpc/aix-abs-reloc-1.nd create mode 100644 ld/testsuite/ld-powerpc/aix-abs-reloc-1.od create mode 100644 ld/testsuite/ld-powerpc/aix-abs-reloc-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-1.hd create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-2.ex create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-2.hd create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-2.s create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-3.ex create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-3.hd create mode 100644 ld/testsuite/ld-powerpc/aix-core-sec-3.s create mode 100644 ld/testsuite/ld-powerpc/aix-export-1-all.dd create mode 100644 ld/testsuite/ld-powerpc/aix-export-1-full.dd create mode 100644 ld/testsuite/ld-powerpc/aix-export-1a.s create mode 100644 ld/testsuite/ld-powerpc/aix-export-1b.s create mode 100644 ld/testsuite/ld-powerpc/aix-export-2.nd create mode 100644 ld/testsuite/ld-powerpc/aix-export-2.s create mode 100644 ld/testsuite/ld-powerpc/aix-gc-1-32.dd create mode 100644 ld/testsuite/ld-powerpc/aix-gc-1-64.dd create mode 100644 ld/testsuite/ld-powerpc/aix-gc-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-gc-1.nd create mode 100644 ld/testsuite/ld-powerpc/aix-gc-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-1-32.d create mode 100644 ld/testsuite/ld-powerpc/aix-glink-1-32.dd create mode 100644 ld/testsuite/ld-powerpc/aix-glink-1-64.d create mode 100644 ld/testsuite/ld-powerpc/aix-glink-1-64.dd create mode 100644 ld/testsuite/ld-powerpc/aix-glink-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-glink-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2-32.dd create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2-64.dd create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2a.ex create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2a.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2b.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2c.ex create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2c.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-2d.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-3-32.d create mode 100644 ld/testsuite/ld-powerpc/aix-glink-3-64.d create mode 100644 ld/testsuite/ld-powerpc/aix-glink-3.dd create mode 100644 ld/testsuite/ld-powerpc/aix-glink-3.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-3a.s create mode 100644 ld/testsuite/ld-powerpc/aix-glink-3b.s create mode 100644 ld/testsuite/ld-powerpc/aix-lineno-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-lineno-1.txt create mode 100644 ld/testsuite/ld-powerpc/aix-lineno-1a.dd create mode 100644 ld/testsuite/ld-powerpc/aix-lineno-1a.nd create mode 100644 ld/testsuite/ld-powerpc/aix-lineno-1b.dd create mode 100644 ld/testsuite/ld-powerpc/aix-lineno-1b.nd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.dnd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.drd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.nd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1-dso.rd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.nd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1-rel.rd create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1.im create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1a.s create mode 100644 ld/testsuite/ld-powerpc/aix-no-dup-syms-1b.s create mode 100644 ld/testsuite/ld-powerpc/aix-rel-1.od create mode 100644 ld/testsuite/ld-powerpc/aix-rel-1.s create mode 100644 ld/testsuite/ld-powerpc/aix-toc-1-32.dd create mode 100644 ld/testsuite/ld-powerpc/aix-toc-1-64.dd create mode 100644 ld/testsuite/ld-powerpc/aix-toc-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-toc-1a.s create mode 100644 ld/testsuite/ld-powerpc/aix-toc-1b.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-dso.dnd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-dso.hd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-dso.nd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-gcdso.dnd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-gcdso.hd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-gcdso.nd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-rel.hd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1-rel.nd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1.ex create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1a.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-1b.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2a.ex create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2a.nd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2a.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2b.nd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2b.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2c.ex create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2c.nd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2c.od create mode 100644 ld/testsuite/ld-powerpc/aix-weak-2c.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3-32.d create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3-32.dd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3-64.d create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3-64.dd create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3a.ex create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3a.s create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3b.ex create mode 100644 ld/testsuite/ld-powerpc/aix-weak-3b.s create mode 100644 ld/testsuite/ld-powerpc/aix52.exp create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-12-1.s create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-12-11.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-12-2.s create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-12-21.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-03.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-14.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-23.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-24.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-32.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-33.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-34.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-4.s create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-4-41.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-8-1.s create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-8-11.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-8-2.s create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-8-23.d create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-8-3.s create mode 100644 ld/testsuite/ld-powerpc/attr-gnu-8-31.d create mode 100644 ld/testsuite/ld-powerpc/oldtlslib.s create mode 100644 ld/testsuite/ld-powerpc/relax.d create mode 100644 ld/testsuite/ld-powerpc/relax.s create mode 100644 ld/testsuite/ld-powerpc/relaxr.d create mode 100644 ld/testsuite/ld-powerpc/tlsmark.d create mode 100644 ld/testsuite/ld-powerpc/tlsmark.s create mode 100644 ld/testsuite/ld-powerpc/tlsmark32.d create mode 100644 ld/testsuite/ld-powerpc/tlsmark32.s create mode 100644 ld/testsuite/ld-powerpc/vxworks-relax-2.rd create mode 100644 ld/testsuite/ld-powerpc/vxworks-relax-2.s create mode 100644 ld/testsuite/ld-powerpc/vxworks-relax.rd create mode 100644 ld/testsuite/ld-powerpc/vxworks-relax.s create mode 100644 ld/testsuite/ld-scripts/include-1.d create mode 100644 ld/testsuite/ld-scripts/include-1.t create mode 100644 ld/testsuite/ld-scripts/include-data.t create mode 100644 ld/testsuite/ld-scripts/include-mem.t create mode 100644 ld/testsuite/ld-scripts/include-ram.t create mode 100644 ld/testsuite/ld-scripts/include-sections.t create mode 100644 ld/testsuite/ld-scripts/include-subdata.t create mode 100644 ld/testsuite/ld-scripts/include.exp create mode 100644 ld/testsuite/ld-scripts/include.s create mode 100644 ld/testsuite/ld-scripts/region-alias-1.t create mode 100644 ld/testsuite/ld-scripts/region-alias-2.t create mode 100644 ld/testsuite/ld-scripts/region-alias-3.t create mode 100644 ld/testsuite/ld-scripts/region-alias-4.t create mode 100644 ld/testsuite/ld-scripts/rgn-at.exp create mode 100644 ld/testsuite/ld-scripts/rgn-at.s create mode 100644 ld/testsuite/ld-scripts/rgn-at1.d create mode 100644 ld/testsuite/ld-scripts/rgn-at1.t create mode 100644 ld/testsuite/ld-scripts/rgn-at2.d create mode 100644 ld/testsuite/ld-scripts/rgn-at2.t create mode 100644 ld/testsuite/ld-scripts/rgn-at3.d create mode 100644 ld/testsuite/ld-scripts/rgn-at3.t create mode 100644 ld/testsuite/ld-scripts/rgn-at4.d create mode 100644 ld/testsuite/ld-scripts/rgn-at4.t create mode 100644 ld/testsuite/ld-scripts/rgn-over.exp create mode 100644 ld/testsuite/ld-scripts/rgn-over.s create mode 100644 ld/testsuite/ld-scripts/rgn-over1.d create mode 100644 ld/testsuite/ld-scripts/rgn-over1.t create mode 100644 ld/testsuite/ld-scripts/rgn-over2.d create mode 100644 ld/testsuite/ld-scripts/rgn-over2.t create mode 100644 ld/testsuite/ld-scripts/rgn-over3.d create mode 100644 ld/testsuite/ld-scripts/rgn-over3.t create mode 100644 ld/testsuite/ld-scripts/rgn-over4.d create mode 100644 ld/testsuite/ld-scripts/rgn-over4.t create mode 100644 ld/testsuite/ld-scripts/rgn-over5.d create mode 100644 ld/testsuite/ld-scripts/rgn-over5.t create mode 100644 ld/testsuite/ld-scripts/rgn-over6.d create mode 100644 ld/testsuite/ld-scripts/rgn-over6.t create mode 100644 ld/testsuite/ld-scripts/rgn-over7.d create mode 100644 ld/testsuite/ld-scripts/rgn-over7.t create mode 100644 ld/testsuite/ld-scripts/rgn-over8-ok.d create mode 100644 ld/testsuite/ld-scripts/rgn-over8.s create mode 100644 ld/testsuite/ld-scripts/rgn-over8.t create mode 100644 ld/testsuite/ld-sparc/gotop32.dd create mode 100644 ld/testsuite/ld-sparc/gotop32.rd create mode 100644 ld/testsuite/ld-sparc/gotop32.s create mode 100644 ld/testsuite/ld-sparc/gotop32.sd create mode 100644 ld/testsuite/ld-sparc/gotop32.td create mode 100644 ld/testsuite/ld-sparc/gotop64.dd create mode 100644 ld/testsuite/ld-sparc/gotop64.rd create mode 100644 ld/testsuite/ld-sparc/gotop64.s create mode 100644 ld/testsuite/ld-sparc/gotop64.sd create mode 100644 ld/testsuite/ld-sparc/gotop64.td create mode 100644 ld/testsuite/ld-spu/fixup.d create mode 100644 ld/testsuite/ld-spu/fixup.s create mode 100644 ld/testsuite/ld-spu/icache1.d create mode 100644 ld/testsuite/ld-spu/icache1.s create mode 100644 ld/testsuite/ld-spu/ovl1.lnk create mode 100644 ld/testsuite/ld-spu/ovl2.lnk create mode 100644 ld/testsuite/ld-spu/pic.d create mode 100644 ld/testsuite/ld-spu/pic.s create mode 100644 ld/testsuite/ld-spu/picdef.s create mode 100644 ld/testsuite/ld-undefined/dummy.s create mode 100644 ld/testsuite/ld-undefined/entry-1.d create mode 100644 ld/testsuite/ld-undefined/entry-2.d create mode 100644 ld/testsuite/ld-undefined/entry-3.d create mode 100644 ld/testsuite/ld-undefined/entry-4.d create mode 100644 ld/testsuite/ld-undefined/entry-5.d create mode 100644 ld/testsuite/ld-undefined/entry-6.d create mode 100644 ld/testsuite/ld-undefined/entry.exp create mode 100644 ld/testsuite/ld-undefined/entry.s create mode 100644 ld/testsuite/ld-vxworks/plt-mips1.d create mode 100644 ld/testsuite/ld-vxworks/plt-mips1.s create mode 100644 ld/testsuite/ld-vxworks/tls-1.d create mode 100644 ld/testsuite/ld-vxworks/tls-1.s create mode 100644 ld/testsuite/ld-vxworks/tls-2.d create mode 100644 ld/testsuite/ld-vxworks/tls-2.s create mode 100644 ld/testsuite/ld-vxworks/tls-3.d create mode 100644 ld/testsuite/ld-vxworks/tls-3.s create mode 100644 ld/testsuite/ld-x86-64/abs-l1om.d create mode 100644 ld/testsuite/ld-x86-64/dwarfreloc.exp create mode 100644 ld/testsuite/ld-x86-64/dwarfreloc.rd create mode 100644 ld/testsuite/ld-x86-64/dwarfreloc1.s create mode 100644 ld/testsuite/ld-x86-64/dwarfreloc2.s create mode 100644 ld/testsuite/ld-x86-64/hidden1.d create mode 100644 ld/testsuite/ld-x86-64/hidden1.s create mode 100644 ld/testsuite/ld-x86-64/hidden2.d create mode 100644 ld/testsuite/ld-x86-64/hidden2.s create mode 100644 ld/testsuite/ld-x86-64/hidden3.d create mode 100644 ld/testsuite/ld-x86-64/hidden3.s create mode 100644 ld/testsuite/ld-x86-64/line.exp create mode 100644 ld/testsuite/ld-x86-64/protected1.d create mode 100644 ld/testsuite/ld-x86-64/protected1.s create mode 100644 ld/testsuite/ld-x86-64/protected2-l1om.d create mode 100644 ld/testsuite/ld-x86-64/protected2.d create mode 100644 ld/testsuite/ld-x86-64/protected2.s create mode 100644 ld/testsuite/ld-x86-64/protected3-l1om.d create mode 100644 ld/testsuite/ld-x86-64/protected3.d create mode 100644 ld/testsuite/ld-x86-64/protected3.s create mode 100644 ld/testsuite/ld-x86-64/tlsgd1.dd create mode 100644 ld/testsuite/ld-x86-64/tlsgd1.s create mode 100644 ld/testsuite/ld-x86-64/tlsgd2.d create mode 100644 ld/testsuite/ld-x86-64/tlsgd2.s create mode 100644 ld/testsuite/ld-x86-64/tlsgd3.d create mode 100644 ld/testsuite/ld-x86-64/tlsgd3.s create mode 100644 ld/testsuite/ld-x86-64/tlsie1.dd create mode 100644 ld/testsuite/ld-x86-64/tlsie1.s create mode 100644 ld/testsuite/ld-x86-64/tlsie2.d create mode 100644 ld/testsuite/ld-x86-64/tlsie2.s create mode 100644 ld/testsuite/ld-x86-64/tlsie3.d create mode 100644 ld/testsuite/ld-x86-64/tlsie3.s create mode 100644 ld/testsuite/ld-x86-64/tlsld1.dd create mode 100644 ld/testsuite/ld-x86-64/tlsld1.s create mode 100644 ld/testsuite/ld-x86-64/tlsle1.d create mode 100644 ld/testsuite/ld-x86-64/tlsle1.s create mode 100644 ld/testsuite/ld-x86-64/tlspie1.d create mode 100644 ld/testsuite/ld-x86-64/tlspie1.s create mode 100644 ld/testsuite/ld-x86-64/undefined.s create mode 100644 ld/testsuite/ld-xtensa/tlsbin.dd create mode 100644 ld/testsuite/ld-xtensa/tlsbin.rd create mode 100644 ld/testsuite/ld-xtensa/tlsbin.s create mode 100644 ld/testsuite/ld-xtensa/tlsbin.sd create mode 100644 ld/testsuite/ld-xtensa/tlsbin.td create mode 100644 ld/testsuite/ld-xtensa/tlslib.s create mode 100644 ld/testsuite/ld-xtensa/tlspic.dd create mode 100644 ld/testsuite/ld-xtensa/tlspic.rd create mode 100644 ld/testsuite/ld-xtensa/tlspic.sd create mode 100644 ld/testsuite/ld-xtensa/tlspic.td create mode 100644 ld/testsuite/ld-xtensa/tlspic1.s create mode 100644 ld/testsuite/ld-xtensa/tlspic2.s create mode 100644 ld/testsuite/ld-xtensa/xtensa.exp create mode 100644 libiberty/configure.com create mode 100644 libiberty/crc32.c create mode 100644 libiberty/memmem.c rename {ld => libiberty}/sha1.c (62%) delete mode 100644 libiberty/vmsbuild.com create mode 100644 md5.sum create mode 100644 opcodes/ChangeLog-2007 create mode 100644 opcodes/ChangeLog-2008 create mode 100644 opcodes/configure.com create mode 100644 opcodes/i386-init.h create mode 100644 opcodes/lm32-asm.c create mode 100644 opcodes/lm32-desc.c create mode 100644 opcodes/lm32-desc.h create mode 100644 opcodes/lm32-dis.c create mode 100644 opcodes/lm32-ibld.c create mode 100644 opcodes/lm32-opc.c create mode 100644 opcodes/lm32-opc.h create mode 100644 opcodes/lm32-opinst.c create mode 100644 opcodes/microblaze-dis.c create mode 100644 opcodes/microblaze-opc.h create mode 100644 opcodes/microblaze-opcm.h create mode 100644 opcodes/moxie-dis.c create mode 100644 opcodes/moxie-opc.c delete mode 100644 opcodes/po/.cvsignore create mode 100644 opcodes/score7-dis.c diff --git a/.cvsignore b/.cvsignore deleted file mode 100644 index 07be496..0000000 --- a/.cvsignore +++ /dev/null @@ -1,33 +0,0 @@ -*-all -*-co -*-dirs -*-done -*-install-info -*-src -*-stamp-* -*-tagged -blockit -cfg-paper.info -config.status -configure.aux -configure.cp -configure.cps -configure.dvi -configure.fn -configure.fns -configure.ky -configure.kys -configure.log -configure.pg -configure.pgs -configure.toc -configure.tp -configure.tps -configure.vr -configure.vrs -dir.info -Makefile -lost+found -update.out -update.sourceware -autom4te.cache diff --git a/COPYING.LIBGLOSS b/COPYING.LIBGLOSS deleted file mode 100644 index db0ab5e..0000000 --- a/COPYING.LIBGLOSS +++ /dev/null @@ -1,206 +0,0 @@ -The libgloss subdirectory is a collection of software from several sources. - -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: - -(1) Red Hat Incorporated - -Copyright (c) 1994-2006 Red Hat, Inc. All rights reserved. - -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. - -(2) University of California, Berkeley - -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: - - * 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. - -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. - -Redistribution and use in source and binary forms is permitted -provided that the above copyright notice and following paragraph are -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. - -(4) GPL (fr30 directory only) - -Copyright (C) 1998 Free Software Foundation, Inc. -Contributed by Cygnus Solutions. - -This file is part of GNU CC. - -GNU CC is free software; you can redistribute 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. - -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 51 Franklin Street, Fifth Floor, -Boston, MA 02110-1301, USA. - -(5) Advanced Micro Devices - -Copyright 1989, 1990 Advanced Micro Devices, Inc. - -This software is the property of Advanced Micro Devices, Inc (AMD) which -specifically grants the user the right to modify, use and distribute this -software provided this notice is not removed or altered. All other rights -are reserved by AMD. - -AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS -SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL -DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR -USE OF THIS SOFTWARE. - -So that all may benefit from your experience, please report any problems -or suggestions about this software to the 29K Technical Support Center at -800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or -0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118. - -Advanced Micro Devices, Inc. -29K Support Products -Mail Stop 573 -5900 E. Ben White Blvd. -Austin, TX 78741 -800-292-9263 - -(6) Array Technology Corporation and MIPS (mips/lsi33k-stub.h) - -COPYRIGHT (C) 1991, 1992 ARRAY TECHNOLOGY CORPORATION - All Rights Reserved - -This software is confidential information which is proprietary to and -a trade secret of ARRAY Technology Corporation. Use, duplication, or -disclosure is subject to the terms of a separate license agreement. - -Copyright 1985 by MIPS Computer Systems, Inc. - -(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. - -Permission to use, copy, modify and distribute this software is hereby -granted provided that (1) source code retains these copyright, permission, -and disclaimer notices, and (2) redistributions including binaries -reproduce the notices in supporting documentation, and (3) all advertising -materials mentioning features or use of this software display the following -acknowledgement: ``This product includes software developed by the -Computer Systems Laboratory at the University of Utah.'' - -THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS -IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF -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. - -(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. - -(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 -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 -used in advertising or publicity pertaining to distribution -of the software without specific, written prior permission. -Hewlett-Packard Company makes no representations about the -suitability of this software for any purpose. - -(10) Hans-Peter Nilsson - -Copyright (C) 2001 Hans-Peter Nilsson - -Permission to use, copy, modify, and distribute this software is -freely granted, provided that the above copyright notice, this notice -and the following disclaimer are preserved with no changes. - -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. - -(11) IBM Corp. spu processor (only spu-* targets) - -(C) Copyright IBM Corp. 2005, 2006 - -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. - * 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. - diff --git a/COPYING.NEWLIB b/COPYING.NEWLIB deleted file mode 100644 index 72721a3..0000000 --- a/COPYING.NEWLIB +++ /dev/null @@ -1,640 +0,0 @@ -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. Unless otherwise noted in the body of the source file(s), the following copyright -notices will apply to the contents of the newlib subdirectory: - -(1) Red Hat Incorporated - -Copyright (c) 1994-2006 Red Hat, Inc. All rights reserved. - -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. - -(2) University of California, Berkeley - -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: - - * 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. - -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. - -Copyright (c) 1991 by AT&T. - -Permission to use, copy, modify, and distribute this software for any -purpose without fee is hereby granted, provided that this entire notice -is included in all copies of any software which is or includes a copy -or modification of this software and in all copies of the supporting -documentation for such software. - -THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED -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. - -This software is the property of Advanced Micro Devices, Inc (AMD) which -specifically grants the user the right to modify, use and distribute this -software provided this notice is not removed or altered. All other rights -are reserved by AMD. - -AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS -SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL -DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR -USE OF THIS SOFTWARE. - -So that all may benefit from your experience, please report any problems -or suggestions about this software to the 29K Technical Support Center at -800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or -0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118. - -Advanced Micro Devices, Inc. -29K Support Products -Mail Stop 573 -5900 E. Ben White Blvd. -Austin, TX 78741 -800-292-9263 - -(5) C.W. Sandmann - -Copyright (C) 1993 C.W. Sandmann - -This file may be freely distributed as long as the author's name remains. - -(6) Eric Backus - -(C) Copyright 1992 Eric Backus - -This software may be used freely so long as this copyright notice is -left intact. There is no warrantee on this software. - -(7) 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. - -(8) 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 -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 -used in advertising or publicity pertaining to distribution -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 - -Copyright (C) 2001 Hans-Peter Nilsson - -Permission to use, copy, modify, and distribute this software is -freely granted, provided that the above copyright notice, this notice -and the following disclaimer are preserved with no changes. - -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. - -(10) Stephane Carrez (m68hc11-elf/m68hc12-elf targets only) - -Copyright (C) 1999, 2000, 2001, 2002 Stephane Carrez (stcarrez@nerim.fr) - -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. - -(11) Christopher G. Demetriou - -Copyright (c) 2001 Christopher G. Demetriou -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. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR 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. - -(12) SuperH, Inc. - -Copyright 2002 SuperH, Inc. All rights reserved - -This software is the property of SuperH, Inc (SuperH) which specifically -grants the user the right to modify, use and distribute this software -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, -INCIDENTAL OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING FROM -THE FURNISHING, PERFORMANCE, OR USE OF THIS SOFTWARE. - -So that all may benefit from your experience, please report any problems -or suggestions about this software to the SuperH Support Center via -e-mail at softwaresupport@superh.com . - -SuperH, Inc. -405 River Oaks Parkway -San Jose -CA 95134 -USA - -(13) Royal Institute of Technology - -Copyright (c) 1999 Kungliga Tekniska Högskolan -(Royal Institute of Technology, Stockholm, Sweden). -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 KTH 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 KTH AND ITS 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 KTH OR ITS 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. - -(14) Alexey Zelkin - -Copyright (c) 2000, 2001 Alexey Zelkin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -(15) Andrey A. Chernov - -Copyright (C) 1997 by Andrey A. Chernov, Moscow, Russia. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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. - -(16) FreeBSD - -Copyright (c) 1997-2002 FreeBSD Project. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -(17) S. L. Moshier - -Author: S. L. Moshier. - -Copyright (c) 1984,2000 S.L. Moshier - -Permission to use, copy, modify, and distribute this software for any -purpose without fee is hereby granted, provided that this entire notice -is included in all copies of any software which is or includes a copy -or modification of this software and in all copies of the supporting -documentation for such software. - -THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED -WARRANTY. IN PARTICULAR, THE AUTHOR MAKES NO REPRESENTATION -OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS -SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. - -(18) Citrus Project - -Copyright (c)1999 Citrus Project, -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -(19) Todd C. Miller - -Copyright (c) 1998 Todd C. Miller -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. The name of the author 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 ANY EXPRESS OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -THE AUTHOR 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. - -(20) DJ Delorie (i386) -Copyright (C) 1991 DJ Delorie -All rights reserved. - -Redistribution and use in source and binary forms is permitted -provided that the above copyright notice and following paragraph are -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. - -(21) Free Software Foundation LGPL License (*-linux* targets only) - - Copyright (C) 1990-1999, 2000, 2001 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Mark Kettenis , 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301 USA. - -(22) Xavier Leroy LGPL License (i[3456]86-*-linux* targets only) - -Copyright (C) 1996 Xavier Leroy (Xavier.Leroy@inria.fr) - -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 -GNU Library General Public License for more details. - -(23) Intel (i960) - -Copyright (c) 1993 Intel Corporation - -Intel hereby grants you permission to copy, modify, and distribute this -software and its documentation. Intel grants this permission provided -that the above copyright notice appears in all copies and that both the -copyright notice and this permission notice appear in supporting -documentation. In addition, Intel grants this permission provided that -you prominently mark as "not part of the original" any modifications -made to this software or documentation, and that the name of Intel -Corporation not be used in advertising or publicity pertaining to -distribution of the software or the documentation without specific, -written prior permission. - -Intel Corporation provides this AS IS, WITHOUT ANY WARRANTY, EXPRESS OR -IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY -OR FITNESS FOR A PARTICULAR PURPOSE. Intel makes no guarantee or -representations regarding the use of, or the results of the use of, -the software and documentation in terms of correctness, accuracy, -reliability, currentness, or otherwise; and you rely on the software, -documentation and results solely at your own risk. - -IN NO EVENT SHALL INTEL BE LIABLE FOR ANY LOSS OF USE, LOSS OF BUSINESS, -LOSS OF PROFITS, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES -OF ANY KIND. IN NO EVENT SHALL INTEL'S TOTAL LIABILITY EXCEED THE SUM -PAID TO INTEL FOR THE PRODUCT LICENSED HEREUNDER. - -(24) Hewlett-Packard (hppa targets only) - -(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 -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 -used in advertising or publicity pertaining to distribution -of the software without specific, written prior permission. -Hewlett-Packard Company makes no representations about the -suitability of this software for any purpose. - -(25) Henry Spencer (only *-linux targets) - -Copyright 1992, 1993, 1994 Henry Spencer. All rights reserved. -This software is not subject to any license of the American Telephone -and Telegraph Company or of the Regents of the University of California. - -Permission is granted to anyone to use this software for any purpose on -any computer system, and to alter it and redistribute it, subject -to the following restrictions: - -1. The author is not responsible for the consequences of use of this - software, no matter how awful, even if they arise from flaws in it. - -2. The origin of this software must not be misrepresented, either by - explicit claim or by omission. Since few users ever read sources, - credits must appear in the documentation. - -3. Altered versions must be plainly marked as such, and must not be - misrepresented as being the original software. Since few users - ever read sources, credits must appear in the documentation. - -4. This notice may not be removed or altered. - -(26) Mike Barcroft - -Copyright (c) 2001 Mike Barcroft -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -(27) Konstantin Chuguev (--enable-newlib-iconv) - -Copyright (c) 1999, 2000 - Konstantin Chuguev. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - - iconv (Charset Conversion Library) v2.0 - -(28) Artem Bityuckiy (--enable-newlib-iconv) - -Copyright (c) 2003, Artem B. Bityuckiy, SoftMine Corporation. -Rights transferred to Franklin Electronic Publishers. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - -(29) IBM, Sony, Toshiba (only spu-* targets) - - (C) Copyright 2001,2006, - International Business Machines Corporation, - Sony Computer Entertainment, Incorporated, - Toshiba Corporation, - - 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. - * 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. - - 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. - - diff --git a/ChangeLog b/ChangeLog index a829ac0..18148bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,1076 @@ +2009-10-06 Ian Lance Taylor + + * Makefile.def: check-gold depends upon all-gas. + * Makefile.in: Rebuild. + +2009-09-02 Paolo Bonzini + + * Makefile.tpl (AWK): Fix typo. + * Makefile.in: Regenerate. + +2009-09-02 Paolo Bonzini + + * configure.ac: Detect awk and sed. + * Makefile.def (flags_to_pass): Add AWK and SED. + * Makefile.tpl (AWK, SED): New. + (BASE_FLAGS_TO_PASS): Add AWK and SED. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2009-09-01 Tristan Gingold + + * setup.com: Ported to Itanium VMS. Can also build using DCL scripts. + Remove logical names. + +2009-08-31 Dave Korn + + * ltmain.sh (func_normal_abspath): New function. + (func_relative_path): Likewise. + (func_mode_help): Document new -bindir option for link mode. + (func_mode_link): Add new -bindir option, and use it to place + output DLL if specified. + +2009-08-24 Ralf Wildenhues + + * configure.ac (AC_PREREQ): Bump to 2.64. + +2009-08-22 Ralf Wildenhues + + * README-maintainer-mode: Point directly to upstream locations + for autoconf, automake, libtool, gettext, instead of copies on + sources.redhat.com. Document required versions. + * configure.ac: Do not substitute datarootdir, htmldir, + pdfdir, docdir. Do not process --with-datarootdir, + --with-htmldir, --with-pdfdir, --with-docdir. + * configure: Regenerate. + + * configure: Regenerate. + + * compile: Sync from Automake 1.11. + * depcomp: Likewise. + * install-sh: Likewise. + * missing: Likewise. + * mkinstalldirs: Likewise. + * ylwrap: Likewise. + +2009-08-19 Ralf Wildenhues + + * configure.ac: Call AC_DISABLE_OPTION_CHECKING. + (baseargs): Add --disable-option-checking. + * configure: Regenerate. + + * Makefile.def (configure-target-libiberty): Depend on + all-binutils and all-ld. + (configure-target-newlib): Likewise. + * Makefile.in: Regenerate. + +2009-08-19 Ralf Wildenhues + + Sync with GCC, merge: + + 2009-07-31 Christian Bruel + + * configure.ac (sh*-*-elf): Don't add target-libgloss to noconfigdirs. + * configure: Regenerate. + + 2009-07-06 Ian Lance Taylor + + * configure.ac: Add missing comma in AC_ARG_WITH(boot-libs). + * configure: Rebuild. + + 2009-06-26 Steve Ellcey + + PR bootstrap/40338 + * configure.ac (comparestring): Create new variable. + * Makefile.tpl (comparestring): Use to skip some comparisions. + * configure: Regenerate. + * Makefile.in: Regenerate. + + 2009-06-23 Ian Lance Taylor + + * configure.ac: Add --enable-build-with-cxx. When set, add c++ to + boot_languages. Only bootstrap target libraries listed in + target_libs for some boot language. Add --with-stage1-ldflags, + --with-stage1-libs, --with-boot-ldflags, --with-boot-libs. Remove + with_host_libstdcxx from ppllibs. Only add -fkeep-inline-functions + if not building with C++. + * Makefile.def: For target_module libstdc++-v3, set bootstrap=true. + * Makefile.tpl (STAGE1_LDFLAGS, STAGE1_LIBS): New variables. + (POSTSTAGE1_LDFLAGS, POSTSTAGE1_LIBS): New variables. + (HOST_EXPORTS): Add STAGE1_LDFLAGS to LDFLAGS. Export HOST_LIBS. + (POSTSTAGE1_HOST_EXPORTS): Set CXX and CXX_FOR_BUILD. Add + POSTSTAGE1_LDFLAGS to LDFLAGS. Export HOST_LIBS. + (POSTSTAGE1_FLAGS_TO_PASS): Likewise. + * configure, Makefile.in: Rebuild. + + 2009-06-08 Kaveh R. Ghazi + + * configure.ac: Detect MPC in default directory. + * configure: Regenerate. + + 2009-06-02 Richard Sandiford + + * configure.ac (powerpc-*-aix*, rs6000-*-aix*): Add target-newlib + to noconfdirs. + * configure: Regenerate. + + 2009-05-29 Kaveh R. Ghazi + + * Makefile.def: Add MPC support and dependencies. + * configure.ac: Likewise. Reorganize GMP/MPFR checks. + + * Makefile.in, configure: Regenerate. + + 2009-05-24 Nicolas Roche + + * Makefile.tpl (compare-target): Skip ./ada/*tools directories. + * Makefile.in: Regenerate. + + 2009-05-21 Dave Korn + + * configure.ac (cygwin noconfigdirs): Remove libgcj. + * configure: Regenerate. + + 2009-05-07 Dave Korn + + * configure.ac ($with_ppl): Default to no if not supplied. + ($with_cloog): Likewise. + configure: Regenerate. + + 2009-04-24 Kaveh R. Ghazi + + PR bootstrap/39739 + * configure.ac (extra_mpfr_configure_flags): Set and AC_SUBST. + * Makefile.def (module=mpfr): Use extra_mpfr_configure_flags. + + * configure, Makefile.in: Regenerate. + + 2009-04-14 Jakub Jelinek + + * configure.ac: Change copyright header to refer to version + 3 of the GNU General Public License and to point readers at the + COPYING3 file and the FSF's license web page. + * Makefile.def: Likewise. + * Makefile.tpl: Likewise. + * Makefile.in: Regenerate. + + 2009-04-09 Jack Howarth + + * configure.ac: Restore match for darwin9 or later. Use double + brackets since regeneration eats one pair. + * configure: Regenerate. + +2009-08-18 Christopher Faylor + + * MAINTAINERS: Perform some obvious fixups. + +2009-08-17 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2009-08-06 Michael Eager + + * configure.ac: Add Microblaze target. + * configure: Regenerate. + +2009-07-02 Tristan Gingold + + * configure.ac: Do not exclude gas for i386-*-darwin. + Add a case for x86_64-*-darwin. + * configure: Regenerate. + +2009-06-26 Doug Evans + + * Makefile.def (host_modules): Add cgen. + * Makefile.in: Regenerate. + * configure.ac (host_tools): Add cgen. + * configure: Regenerate. + +2009-06-17 Michael Eager + + * COPYING.LIBGLOSS: Add Xilinx license. + +2009-06-15 Ryan Mansfield + + * configure.ac: Define is_elf for QNX Neutrino targets. + * configure: Regenerate. + +2009-06-03 Jerome Guitton + Ralf Wildenhues + + * Makefile.tpl (all): Avoid a trailing backslash. + * Makefile.in: Regenerate. + +2009-06-03 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2009-06-02 Alexandre Oliva + + * Makefile.tpl ([+compare-target+]): Compare all stage + directories, rather than just gcc. + * Makefile.in: Rebuilt. + +2009-05-28 Doug Kwan + + * configure.ac: Support gold for target arm*-*-*. + * configure: Regenerate. + +2009-05-27 Alexandre Oliva + + * Makefile.tpl (all): Avoid harmless warning in make all when + gcc-bootstrap is enabled but stage_last does not exist. + * Makefile.in: Rebuilt. + +2009-05-25 Tristan Gingold + + * setup.com: Complete the file with configuration and build. + +2009-05-18 Alexandre Oliva + + PR other/40159 + * Makefile.tpl (all): Don't assume gcc-bootstrap and + gcc-no-bootstrap are mutually exclusive. + * Makefile.in: Rebuilt. + +2009-05-18 Alexandre Oliva + + PR other/40159 + * Makefile.tpl (all): Don't end with unconditional success. + * Makefile.in: Rebuilt. + +2009-05-12 Alexandre Oliva + + PR target/37137 + * Makefile.def (flags_to_pass): Remove redundant and incomplete + STAGE1_CFLAGS, STAGE2_CFLAGS, STAGE3_CFLAGS, and STAGE4_CFLAGS. + Add FLAGS_FOR_TARGET and BUILD_CONFIG. + (bootstrap_stage): Remove bootstrap-debug custom stages. Turn + stage_configureflags, stage_cflags and stage_libcflags into + explicit Makefile macros. + * Makefile.tpl (HOST_EXPORTS, EXTRA_HOST_FLAGS): Pass GCJ and + GFORTRAN. + (POSTSTAGE1_HOST_EXPORTS): Add XGCC_FLAGS_FOR_TARGET and TFLAGS to + CC. Set CC_FOR_BUILD from CC. + (BASE_TARGET_EXPORTS, RAW_CXX_TARGET_EXPORTS, + NORMAL_TARGET_EXPORTS): Move SYSROOT_CFLAGS_FOR_TARGET and + DEBUG_PREFIX_CFLAGS_FOR_TARGET from CFLAGS and CXXFLAGS to + XGCC_FLAGS_FOR_TARGET. Add it along with TFLAGS to CC, CXX, GCJ, + and GFORTRAN. + (TFLAGS, STAGE_CFLAGS, STAGE_TFLAGS, STAGE_CONFIGURE_FLAGS): New. + (_LIBCFLAGS): Renamed to _TFLAGS. + (do-compare-debug, do-compare3-debug): Drop. + (CC, GCC_FOR_TARGET, CXX_FOR_TARGET, RAW_CXX_FOR_TARGET, + GCJ_FOR_TARGET, GFORTRAN_FOR_TARGET): Remove FLAGS_FOR_TARGET. + (FLAGS_FOR_TARGET, SYSROOT_CFLAGS_FOR_TARGET, + DEBUG_PREFIX_CFLAGS_FOR_TARGET): Move down. + (XGCC_FLAGS_FOR_TARGET): New. + (BASE_FLAGS_TO_PASS): Pass STAGEid_CFLAGS, STAGEid_TFLAGS and TFLAGS. + (EXTRA_HOST_FLAGS): Pass GCJ and GFORTRAN. + (POSTSTAGE1_FLAGS_TO_PASS): Move SYSROOT_CFLAGS_FOR_TARGET and + DEBUG_PREFIX_CFLAGS_FOR_TARGET from CFLAGS, CXXFLAGS, LIBCFLAGS, + LIBCXXFLAGS to XGCC_FLAGS_FOR_TARGET. Add it along with TFLAGS + to CC, CXX, GCJ, and GFORTRAN. Pass XGCC_FLAGS_FOR_TARGET and + TFLAGS. + (BUILD_CONFIG): Include if requested. + (all): Set TFLAGS on bootstrap. + (configure-stageid-prefixmodule): Pass TFLAGS, adjust FLAGS. + (all-stageid-prefixmodule): Likewise. + (do-clean, distclean-stageid): Set TFLAGS. + (restrap): Fix whitespace. + * Makefile.in: Rebuilt. + +2009-04-25 Eric Botcazou + + * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS): Add GNATBIND. + (POSTSTAGE1_FLAGS_TO_PASS): Pick up exported value for GNATBIND. + * Makefile.in: Regenerate. + +2009-04-24 Eli Zaretskii + + * config.guess (pc:*:*:*): Return i586-pc-msdosdjgpp, for + consistency with config.sub. (Update from upstream sources.) + +2009-04-21 Joseph Myers + + * texinfo/texinfo.tex: Update to version 2009-03-28.05. + +2009-04-17 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2009-04-15 Anthony Green + + * configure.ac: Add moxie support. + * configure: Rebuilt. + +2009-04-09 Kaveh R. Ghazi + + * configure.ac: Bump minimum GMP/MPFR versions to 4.2 and 2.3.1. + * configure: Regenerate. + +2009-04-09 H.J. Lu + + PR gas/10039 + * configure.ac: Require texinfo 4.7. + * configure: Regenerated. + +2009-04-09 Steve Ellcey + + * Makefil.def (languages): New entries. + * Makefile.tpl (check-gcc-*): New generic target. + * Makefile.in: Regenerate. + +2009-03-27 Eli Zaretskii + + * djunpack.bat: Use ".." quoting in Sed command, for the sake of + Windows builds of Sed. + +2009-03-18 Tom Tromey + + * configure: Rebuild. + * configure.ac (host_libs): Add libiconv. + * Makefile.in: Rebuild. + * Makefile.def (host_modules): Add libiconv. + (configure-gdb, all-gdb): Depend on libiconv. + +2009-03-16 Tristan Gingold + + * configure.ac: Treat gdb as supported on x86_64-darwin. + * configure: Regenerate. + +2009-03-16 Joseph Myers + + Merge from GCC: + + 2009-03-16 Joseph Myers + + * configure.ac (--with-host-libstdcxx): New option. + * configure: Regenerate. + + 2009-01-29 Robert Millan + + * configure.ac: Recognize GNU/kOpenSolaris (*-*-kopensolaris*-gnu). + * configure: Regenerate. + + 2009-01-12 Sebastian Pop + + PR tree-optimization/38515 + * configure.ac (cloog-polylib): Removed. + (with_ppl, with_cloog): Test for "no". + * configure: Regenerated. + +2009-03-01 Ralf Wildenhues + + Backport from git Libtool: + + 2009-01-19 Robert Millan + Support GNU/kOpenSolaris. + * libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER) + (_LT_CHECK_MAGIC_METHOD, _LT_COMPILER_PIC, _LT_LINKER_SHLIBS) + (_LT_LANG_CXX_CONFIG) [kopensolaris*-gnu]: Recognize + GNU/kOpenSolaris. + +2009-02-05 Andreas Schwab + + * Makefile.tpl (stage_last): Define $r and $s before using + $(RECURSE_FLAGS_TO_PASS). + * Makefile.in: Regenerate + +2009-01-21 Jeff Johnston + + * COPYING.NEWLIB: Add ARM license. + +2009-01-16 Alan Modra + + * Makefile.def (configure-opcodes): Depend on configure-libiberty. + (all-opcodes): Depend on all-libiberty. + * Makefile.in: Regenerate. + +2009-01-15 Douglas B Rupp + + * configure.ac (ia64*-*-*vms*): Add case with no gdb or ld support. + * configure: Regenerate. + +2008-12-18 Ralf Wildenhues + + Backport link test fix from upstream Libtool: + + * libltdl.m4 (_LT_SYS_DYNAMIC_LINKER, _LT_LINKER_SHLIBS): + Add cache variables to tests that require the linker to work. + For shlibpath_overrides_runpath, this also changes the semantics + to let the result from the C compiler take precedence. + compiler take precedence. + +2008-12-02 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2008-12-17 Jeff Johnston + + * COPYING.NEWLIB: Updated. + * COPYING.LIBGLOSS: Ditto. + +2008-12-16 Paolo Bonzini + + Sync with GCC: + + 2008-12-12 Sebastian Pop + + * configure.ac (ppllibs): Add by default the lib flags. + * configure: Regenerate. + + 2008-12-04 Jack Howarth + + * configure.ac: Add double brackets on darwin[912]. + * configure: Regenerate. + + 2008-12-02 Jack Howarth + + * configure.ac: Expand to darwin10 and later. + * configure: Regenerate. + +2008-12-02 Andreas Schwab + + * Makefile.def: configure-target-boehm-gc depends on + all-target-libstdc++-v3. + * Makefile.in: Regenerate. + +2008-12-02 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2008-11-27 Joseph Myers + + Merge from GCC: + + 2007-12-02 Matthias Klose + + * config-ml.in: Remove 64bit configure tests. + + 2008-05-14 Rafael Espindola + + * config-ml.in: don't handle --enable-shared and --enable-static. + + 2008-09-02 Sebastian Pop + Tobias Grosser + Jan Sjodin + Harsha Jagasia + Dwarakanath Rajagopal + Konrad Trifunovic + Adrien Eliche + + Merge from graphite branch. + * configure: Regenerate. + * Makefile.in: Regenerate. + * configure.ac (host_libs): Add ppl and cloog. + Add checks for PPL and CLooG. + * Makefile.def (ppl, cloog): Added modules and dependences. + * Makefile.tpl (PPLLIBS, PPLINC, CLOOGLIBS, CLOOGINC): New. + (HOST_PPLLIBS, HOST_PPLINC, HOST_CLOOGLIBS, HOST_CLOOGINC): New. + + 2008-09-03 Richard Guenther + + * configure.ac: Always pass -DCLOOG_PPL_BACKEND to the + cloog test. + * configure: Re-generate. + + 2008-09-03 Sebastian Pop + + * configure.ac (--with-cloog-polylib): New. + (--disable-cloog-version-check): New. + (--disable-ppl-version-check): New. + * configure: Re-generate. + + 2008-09-05 Richard Guenther + + * configure.ac: Initialize clooglibs to -lcloog. + * configure: Re-generate. + + 2008-10-13 Kaveh R. Ghazi + + * configure.ac (MPFR check): Bump minimum version to 2.3.0 and + recommended version to 2.3.2. + + * configure: Regenerate. + + 2008-10-31 Ben Elliston + + * configure.ac (spu-*-*): Remove special case. + * configure: Regenerate. + + Complete comment text from GCC version of: + + 2008-08-31 Aaron W. LaFramboise + + * configure.ac (RPATH_ENVVAR): Use PATH on Windows. + (GCC_SHLIB_SUBDIR): New. + * Makefile.tpl (HOST_LIB_PATH_gcc): Use GCC_SHLIB_SUBDIR. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2008-11-27 Tristan Gingold + + * configure.ac: Build gdb for i?86-*-darwin* + * configure: Regenerated. + +2008-11-14 Daniel Jacobowitz + + PR bootstrap/38014 + PR bootstrap/37923 + + Revert: + + 2008-10-24 Daniel Jacobowitz + + * Makefile.tpl (HOST_EXPORTS): Correct CPPFLAGS typo. + * Makefile.in: Regenerated. + + 2008-10-22 Daniel Jacobowitz + + PR gdb/921 + PR gdb/1646 + PR gdb/2175 + PR gdb/2176 + + * Makefile.def (flags_to_pass): Add CPPFLAGS_FOR_BUILD and CPPFLAGS. + * Makefile.tpl (BUILD_EXPORTS): Set CPPFLAGS. + (EXTRA_BUILD_FLAGS): Correct typo. Pass CPPFLAGS. + (HOST_EXPORTS): Pass CPPFLAGS. + (CPPFLAGS_FOR_BUILD, CPPFLAGS, CPPFLAGS_FOR_TARGET): Define. + (LDFLAGS_FOR_TARGET): Initialize from configure script. + (EXTRA_TARGET_FLAGS): Set CPPFLAGS. + * Makefile.in, configure: Regenerated. + * configure.ac: Set CPPFLAGS_FOR_TARGET, LDFLAGS_FOR_TARGET, + and CPPFLAGS_FOR_BUILD. + +2008-10-29 Stefan Schulze Frielinghaus + + * configure.ac [spu-*-*]: Do not set skipdirs. + * configure: Re-generate. + +2008-10-24 Daniel Jacobowitz + + * Makefile.tpl (HOST_EXPORTS): Correct CPPFLAGS typo. + * Makefile.in: Regenerated. + +2008-10-22 Daniel Jacobowitz + + PR gdb/921 + PR gdb/1646 + PR gdb/2175 + PR gdb/2176 + + * Makefile.def (flags_to_pass): Add CPPFLAGS_FOR_BUILD and CPPFLAGS. + * Makefile.tpl (BUILD_EXPORTS): Set CPPFLAGS. + (EXTRA_BUILD_FLAGS): Correct typo. Pass CPPFLAGS. + (HOST_EXPORTS): Pass CPPFLAGS. + (CPPFLAGS_FOR_BUILD, CPPFLAGS, CPPFLAGS_FOR_TARGET): Define. + (LDFLAGS_FOR_TARGET): Initialize from configure script. + (EXTRA_TARGET_FLAGS): Set CPPFLAGS. + * Makefile.in, configure: Regenerated. + * configure.ac: Set CPPFLAGS_FOR_TARGET, LDFLAGS_FOR_TARGET, + and CPPFLAGS_FOR_BUILD. + +2008-09-29 Peter O'Gorman + + * libtool.m4: Update to libtool 2.2.6. + * lt~obsolete.m4: Update to libtool 2.2.6. + * ltmain.sh: Update to libtool 2.2.6. + * ltsugar.m4: Update to libtool 2.2.6. + * ltversion.m4: Update to libtool 2.2.6. + * ltoptions.m4: Update to libtool 2.2.6. + * ltgcc.m4: Update to match changes from libtool 2.2.6. + +2008-08-31 Aaron W. LaFramboise + + * configure.ac (RPATH_ENVVAR): Use PATH on Windows. + (GCC_SHLIB_SUBDIR): New. + * Makefile.tpl (HOST_LIB_PATH_gcc): Use GCC_SHLIB_SUBDIR. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2008-08-28 Tristan Gingold + + * configure.ac (powerpc-*-darwin*, i?86-*-darwin*,x86_64-*-darwin9): + Enable bfd, binutils and opcodes. + * configure: Regenerate. + +2008-08-16 Nicolas Roche + + * Makefile.tpl: Add BOOT_ADAFLAGS. + * Makefile.in: Regenerate. + +2008-08-16 Richard Sandiford + + * configure.ac (mips*-*-*linux*, mips*-*-gnu*): Use mt-mips-gnu. + * configure: Regenerate. + +2008-07-30 Paolo Bonzini + + Sync with gcc: + 2008-07-30 Paolo Bonzini + + * configure.ac: Add makefile fragments for hpux. + * Makefile.def (flags_to_pass): Add ADA_CFLAGS. + * Makefile.tpl (HOST_EXPORTS): Pass ADA_CFLAGS. + * configure: Regenerate. + * Makefile.in: Regenerate. + + 2008-06-17 Ralf Wildenhues + + * Makefile.tpl ($(srcdir)/configure): Update dependencies. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2008-06-18 Ian Lance Taylor + + * src-release (BINUTILS_SUPPORT_DIRS): Remove mkdep and depcomp. + + * src-release (BINUTILS_SUPPORT_DIRS): Add depcomp. + +2008-06-17 Ralf Wildenhues + + * configure: Regenerate. + +2008-06-16 Ralf Wildenhues + + * configure.ac: Set TOPLEVEL_CONFIGURE_ARGUMENTS early, when + "$@" is still intact with both Autoconf 2.59 and 2.62. + * configure: Regenerate. + +2008-06-16 Ralf Wildenhues + + * Makefile.tpl: Fix comment errors. + * Makefile.in: Regenerate. + +2008-06-13 Julian Brown + + * configure.ac (arm*-*-linux-gnueabi): Don't disable building + of libobjc for ARM EABI Linux. + * configure: Regenerate. + +2008-06-12 David S. Miller + David Edelsohn + + * configure.ac: Add powerpc*-*-* to gold supported targets. + * configure: Regenerate. + +2008-06-08 Joseph Myers + + PR tree-optimization/36218 + * Makefile.def (flags_to_pass): Add LDFLAGS_FOR_BUILD. + * Makefile.tpl (EXTRA_BUILD_FLAGS): Define. + (all prefix="build-"): Pass them to build-system sub-makes. + * Makefile.in: Regenerate. + +2008-05-16 Daniel Jacobowitz + + * src-release (DEVO_SUPPORT): Add ChangeLog, MAINTAINERS, + README-maintainer-mode, lt~obsolete.m4, ltgcc.m4, depcomp, + mkdep, and compile. Update comments. + (ETC_SUPPORT): Add ChangeLog and update comments. + +2008-05-11 Ian Lance Taylor + + * src-release (BINUTILS_SUPPORT_DIRS): Add elfcpp and gold. + +2008-04-18 Paolo Bonzini + + Sync with gcc: + 2008-04-18 Paolo Bonzini + + PR bootstrap/35457 + * configure.ac: Include override.m4. + * configure: Regenerate. + + 2008-04-18 Paolo Bonzini + + * Makefile.tpl (restrap): Call `make all' using double-colon rules. + * Makefile.in: Regenerate. + + 2008-04-11 Eric B. Weddington + + * configure.ac: Do not build libssp for the AVR. + * configure: Regenerate. + +2008-04-18 Nick Clifton + + * MAINTAINERS: Replace reference to configure.in with reference to + configure.ac. + +2008-04-18 M R Swami Reddy + + * configure.ac (cr16-*-*): Add case for cr16 target and include gdb + as nonconfigurable directories list. + * configure: Regenerate. + +2008-04-14 David S. Miller + + * configure.ac: Add sparc*-*-* to gold supported targets. + * configure: Regenerate. + +2008-04-14 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2008-04-12 Hans-Peter Nilsson + + * Makefile.tpl : Error early unless at least GNU make 3.80. + * Makefile.in: Regenerate. + +2008-04-07 Ian Lance Taylor + + * Makefile.def: check-gold depends upon all-binutils. + * Makefile.in: Regenerate. + +2008-04-04 Nick Clifton + + PR binutils/4334 + * configure.ac: Run ACX_CHECK_CYGWIN_CAT_WORKS for cygwin hosted + builds. + * configure: Regenerate. + +2008-04-04 NightStrike + + PR other/35151 + * configure.ac: Combine rules for mingw32 and mingw64. + * configure: Regenerate. + +2008-03-27 Paolo Bonzini + + * Makefile.tpl (PICFLAG, PICFLAG_FOR_TARGET): Remove. + * Makefile.in: Regenerate. + +2008-03-20 Ian Lance Taylor + + * configure.ac: Add support for --enable-gold. + * Makefile.def: Add gold as a directory like ld. + * configure, Makefile.in: Regenerate. + +2008-03-19 Andreas Krebbel + + * opcodes/s390-mkopc.c (s390_opcode_cpu_val): S390_OPCODE_Z10 added. + (s390_cond_extensions): Reduced extensions to the compare related. + (main): z10 cpu type option added. + (expandConditionalJump): Renamed to ... + (insertExpandedMnemonic): ... this. + + * opcodes/s390-opc.c: Re-group the operand format makros. + (INSTR_RIE_RRPU, INSTR_RIE_RRP0, INSTR_RIE_RUPI, + INSTR_RIE_R0PI, INSTR_RIE_RUPU, INSTR_RIE_R0PU, INSTR_RIE_R0IU, + INSTR_RIE_R0I0, INSTR_RIE_R0UU, INSTR_RIE_R0U0, + INSTR_RIE_RRUUU, INSTR_RIS_RURDI, INSTR_RIS_R0RDI, INSTR_RIS_RURDU, + INSTR_RIS_R0RDU, INSTR_RRF_U0RR, INSTR_RRF_00RR, INSTR_RRS_RRRDU, + INSTR_RRS_RRRD0, INSTR_RXY_URRD, INSTR_SIY_IRD, INSTR_SIL_RDI, + INSTR_SIL_RDU): New instruction formats added. + (MASK_RIE_RRPU, MASK_RIE_RRP0, MASK_RIE_RUPI, MASK_RIE_R0PI, + MASK_RIE_RUPU, MASK_RIE_R0PU, MASK_RIE_R0IU, MASK_RIE_R0I0, + MASK_RIE_R0UU, MASK_RIE_R0U0, MASK_RIE_RRUUU, MASK_RIS_RURDI, + MASK_RIS_R0RDI, MASK_RIS_RURDU, MASK_RIS_R0RDU, MASK_RRF_U0RR, + MASK_RRF_00RR, MASK_RRS_RRRDU, MASK_RRS_RRRD0, MASK_RXY_URRD, + MASK_SIY_IRD, MASK_SIL_RDI, MASK_SIL_RDU): New instruction format + masks added. + (s390_opformats): New formats added "ris", "rrs", "sil". + * opcodes/s390-opc.txt: Add the conditional jumps with the + extensions removed from automatic expansion in s390-mkopc.c manually. + (asi - trtre): Add new System z10 EC instructions. + * include/opcode/s390.h (s390_opcode_cpu_val): S390_OPCODE_Z10 added. + +2008-03-17 Ralf Wildenhues + + * configure.ac: m4_include config/proginstall.m4. + * configure: Regenerate. + +2008-03-16 Ralf Wildenhues + + Backport from upstream Libtool: + + 2007-10-12 Eric Blake + + Deal with Autoconf 2.62's semantic change in m4_append. + * ltsugar.m4 (lt_append): Replace broken versions of + m4_append. + (lt_if_append_uniq): Don't require separator to be overquoted, + and avoid broken m4_append. + (lt_dict_add): Fix typo. + * libtool.m4 (_LT_DECL): Don't overquote separator. + +2008-03-13 David Edelsohn + + * config.rpath: Add AIX 6 support. + +2008-03-13 Paolo Bonzini + + * Makefile.def (stageprofile). Remove -fprofile-generate + from stage_libcflags. + * Makefile.in: Regenerate. + +2008-03-13 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2008-03-06 Florian Krohm + + * s390-opc.c (INSTR_RSL_R0RD): Fix operands. + * s390-opc.txt (cmpsc): Duplicate entry removed. + (dxr, sqdr, sqer, cxfbr, cdfbr, cefbr, lzer, lzdr, lzxr, + cegbr, cdgbr, cxgbr, cegr, cdgr, cxgr, cxfr, cdfr, cefr, fixr, fidr, + fier, cu42, cu41): Fix operand format. + +2008-02-20 Paolo Bonzini + + PR bootstrap/32009 + PR bootstrap/32161 + + * configure.ac (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Compute here. + * configure: Regenerate. + + * Makefile.def: Define stage_libcflags for all bootstrap stages. + * Makefile.tpl (BOOT_LIBCFLAGS, STAGE2_LIBCFLAGS, STAGE3_LIBCFLAGS, + STAGE4_LIBCFLAGS): New. + (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Subst from autoconf, without + $(SYSROOT_CFLAGS_FOR_TARGET) and $(DEBUG_PREFIX_CFLAGS_FOR_TARGET). + (BASE_TARGET_EXPORTS): Append them here to C{,XX}FLAGS. + (EXTRA_TARGET_FLAGS): Append them here to {LIB,}C{,XX}FLAGS. + (configure-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags + for target modules. Don't export LIBCFLAGS. + (all-stage[+id+]-[+prefix+][+module+]): Pass stage_libcflags; pass + $(BASE_FLAGS_TO_PASS) where [+args+] was passed, and [+args+] after + the overridden CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET. + (invocations of `all'): Replace $(TARGET_FLAGS_TO_PASS) with + $(EXTRA_TARGET_FLAGS), $(FLAGS_TO_PASS) with $(EXTRA_HOST_FLAGS). + * Makefile.in: Regenerate. + +2008-02-16 Ralf Wildenhues + + PR libgcj/33085 + * libtool.m4 (_LT_COMPILER_PIC) [ mingw, cygwin ] : + Do not use -DDLL_EXPORT. Backport from upstream. + +2008-02-14 Nick Clifton + + Import this patch from gcc: + 2008-01-24 David Edelsohn + + * libtool.m4: Backport AIX 6 support from ToT Libtool. + +2008-02-02 Hans-Peter Nilsson + + * configure.ac: Enable fortran for cris-*-elf and crisv32-*-elf. + * configure: Regenerate. + +2008-01-31 Marc Gauthier + + * configure.ac (xtensa*-*-*): Recognize processor variants. + * configure: Regenerate. + +2008-01-30 Ralf Wildenhues + + PR bootstrap/34922 + * configure.ac (PARSE_ARGS): Push suitable setting of + ac_subdirs_all, for `./configure --help=recursive'. + Handle `+' in generic toplevel directory disabling. + * configure: Regenerate. + +2008-01-23 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2008-01-08 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2007-12-19 Jeff Johnston + + * COPYING.LIBGLOSS: Update default copyright. + +2007-12-19 Jeff Johnston + + * COPYING.NEWLIB: Update default copyright. + +2007-12-17 Kaveh R. Ghazi + + * configure.ac: Change required MPFR from 2.2.0 -> 2.2.1. + Change recommended MPFR from 2.2.1 > 2.3.0. + * configure: Regenerate. + +2007-12-13 Richard Sandiford + + * Makefile.tpl (CFLAGS_FOR_TARGET): Add -g. + (CXXFLAGS_FOR_TARGET): Add -O2 -g. + * Makefile.in: Regenerate. + +2007-12-10 Andreas Tobler + + * configure.ac: Enable libjava for x86_64-*-darwin9. + * configure: Regenerate. + +2007-12-05 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2007-11-28 Ralf Wildenhues + + * config-ml.in: Robustify against white space in absolute file + names. + + * config-ml.in (multi-clean): Substitute ${Makefile}. + Remove superfluous ${Makefile} in list. + +2007-10-23 Daniel Jacobowitz + + * Makefile.def (dependencies): Make configure-gdb depend on + all-intl. + * Makefile.in: Regenerated. + +2007-10-15 Patrick Mansfield + + * Makefile.def: To avoid problems running with parallel makes, + build newlib before libgloss so that target specific header + files are availble. + * Makefile.in: Regenerate. + +2007-10-11 Daniel Jacobowitz + + * Makefile.def (dependencies): Add all-gdb -> all-libdecnumber. + * Makefile.in: Regenerate. + +2007-10-11 Daniel Jacobowitz + + * src-release (GDB_SUPPORT_DIRS): Add libdecnumber. + * libdecnumber: New directory, imported from GCC. + +2007-10-08 Mike Frysinger + + * configure.ac (CFLAGS_FOR_BUILD, CXXFLAGS_FOR_BUILD, + LDFLAGS_FOR_BUILD): Default them to host flags only for $host = $build. + Set default CXXFLAGS_FOR_BUILD to CXXFLAGS, not CFLAGS. Set default + LDFLAGS_FOR_BUILD to LDFLAGS, not CFLAGS. + * configure: Regenerate. + +2007-10-01 Paolo Bonzini + + * Makefile.tpl (AR_FOR_BUILD, AS_FOR_BUILD, CXX_FOR_BUILD, + DLLTOOL_FOR_BUILD, GCJ_FOR_BUILD, GFORTRAN_FOR_BUILD, + LDFLAGS_FOR_BUILD, LD_FOR_BUILD, NM_FOR_BUILD, RANLIB_FOR_BUILD, + WINDMC_FOR_BUILD, WINDRES_FOR_BUILD): Use autoconf substitutions. + * configure.ac: Default them to host tools for $host = $build. + Subst them. + + * configure: Regenerate. + * Makefile.in: Regenerate. + +2007-09-20 Richard Sandiford + + * configure.ac (mipsisa*-*-elfoabi*): New stanza. + * configure: Regenerate. + +2007-09-19 Benjamin Kosnik + + * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Move libgomp before + libstdc++. + * Makefile.def: Add libgomp config as a maybe dependency for libstdc++. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2007-09-17 Andreas Schwab + + * configure.ac: Raise minimum makeinfo version to 4.6. + * configure: Regenerate. + 2007-09-15 Alan Modra * configure.ac: Correct makeinfo version check. * configure: Regenerate. -2007-08-29 M R Swami Reddy +2007-09-14 Richard Sandiford + + * configure.ac (mips*-sde-elf*): New stanza. Add target-libiberty + to $skipdirs and only disable gprof for newlib. Use the normal + mips*-elf* handling in other respects. + * configure: Regnerate. + +2007-09-12 David Daney + + * configure.ac: Remove mips64*-*-linux* noconfigdirs section, thus + enabling libgcj. + * configure: Regenerate. + +2007-09-12 Richard Guenther + + * configure.ac (--enable-stage1-checking): If neither --enable-checking + nor --disable-checking is provided also turn on yes and types + checking for stage1. + * configure: Re-generate. + +2007-09-11 Francois-Xavier Coudert + + PR target/33281 + * configure.ac: Use config/mh-mingw on mingw. + * configure: Regenerate. + +2007-09-10 Rask Ingemann Lambertsen + + PR other/32154 + * configure.ac: For libgloss targets, point the linker to the linker + script, startup code and simulator library. + * configure: Regenerate. + +2007-09-09 Andrew Haley + + * configure.ac (noconfigdirs): Remove target-libffi and + target-libjava. + +2007-08-29 Nick Clifton + + * config.sub, config.guess: Update from upstream sources. + +2007-08-21 Richard Guenther + + * configure.ac: Add types checking to stage1 checking flags. + * configure: Regenerate. + +2007-08-18 Paul Brook + Joseph Myers + + * Makefile.tpl (DEBUG_PREFIX_CFLAGS_FOR_TARGET): New. + (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Include it. + * Makefile.in: Regenerate. + * configure.ac (--with-debug-prefix-map): New. + * configure: Regenerate. + +2007-08-17 Richard Sandiford + Nigel Stephens - * config.sub: Add support for cr16 target. + * configure.ac (mips*-sde-elf*): New stanza. Use config/mt-sde + as target_makefile_frag. + * configure: Regenerate. + +2007-08-16 Alexandre Oliva + + * Makefile.def (STAGE2_CFLAGS, STAGE3_CFLAGS, STAGE4_CFLAGS): + Add to flags_to_pass. Adjust uses of BOOT_CFLAGS. + (bootstrap2-debug, bootstrap-debug): New bootstrap stages. + * Makefile.tpl (STAGE2_CFLAGS, STAGE3_CFLAGS, STAGE4_CFLAGS): New. + (do-compare, do-compare3, do-compare-debug): New. + ([+compare-target+]): Use them. + +2007-08-16 Alexandre Oliva + + * Makefile.def (STAGE2_CFLAGS, STAGE3_CFLAGS, STAGE4_CFLAGS): + Add to flags_to_pass. Adjust uses of BOOT_CFLAGS. + (bootstrap2-debug, bootstrap-debug): New bootstrap stages. + * Makefile.tpl (STAGE2_CFLAGS, STAGE3_CFLAGS, STAGE4_CFLAGS): New. + (do-compare, do-compare3, do-compare-debug): New. + ([+compare-target+]): Use them. + +2007-08-13 Ralf Wildenhues + Ben Elliston + + * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS, baseargs): Pass + --silent if $silent. + * configure: Regenerate. 2007-08-12 Daniel Jacobowitz @@ -35,11 +1100,11 @@ 2007-07-09 Kai Tietz - * Makefile.def: Add windmc tool to build. - * Makefile.tpl: Likewise. - * configure.ac: Likewise. - * Makefile.in: Regenerate. - * configure: Regenerate. + * Makefile.def: Add windmc tool to build. + * Makefile.tpl: Likewise. + * configure.ac: Likewise. + * Makefile.in: Regenerate. + * configure: Regenerate. 2007-07-05 H.J. Lu @@ -56,7 +1121,7 @@ * configure.ac (arm*-*-linux-gnueabi): Don't build libgloss if we're not building newlib. * configure: Regenerated. - + 2007-06-22 Daniel Jacobowitz * src-release (DEVO_SUPPORT): Correct typos. @@ -68,9 +1133,9 @@ 2007-06-14 Paolo Bonzini - * Makefile.tpl (cleanstrap): Don't delete the toplevel Makefile. - (distclean-stage[+id+]): Possibly delete stage_last. - * Makefile.in: Regenerate. + * Makefile.tpl (cleanstrap): Don't delete the toplevel Makefile. + (distclean-stage[+id+]): Possibly delete stage_last. + * Makefile.in: Regenerate. 2007-06-07 Ben Elliston @@ -86,9 +1151,9 @@ Sync with gcc: 2007-05-30 Jakub Jelinek - PR bootstrap/29382 - * configure.ac: Don't use -fkeep-inline-functions for GCC < 3.3.1. - * configure: Rebuilt. + PR bootstrap/29382 + * configure.ac: Don't use -fkeep-inline-functions for GCC < 3.3.1. + * configure: Rebuilt. 2007-06-01 Steve Ellcey @@ -194,9 +1259,9 @@ * configure: Rebuilt. 2007-02-17 Mark Mitchell - Nathan Sidwell - Vladimir Prus + Nathan Sidwell + Vladimir Prus * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Fix quoting. * configure: Regenerate. @@ -302,28 +1367,28 @@ 2007-01-11 Paolo Bonzini * configure.in: Change == to = in test command. - * configure: Regenerate. + * configure: Regenerate. 2007-01-11 Paolo Bonzini - Nick Clifton - Kaveh R. Ghazi - - * 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. + Nick Clifton + Kaveh R. Ghazi + + * 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 * configure.in: Try to link to functions only in mpfr 2.2.x - to improve robustness of configure tests. + to improve robustness of configure tests. * configure: Regenerate. 2007-01-08 Kai Tietz @@ -359,20 +1424,20 @@ Sync with gcc: 2006-12-29 Paolo Bonzini - * configure.in: Reorganize recognition of languages. Add - --enable-stage1-languages. Show supported languages for the chosen - target rather than all recognized languages. - * configure: Regenerate. + * 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 - * Makefile.tpl (GCC_STRAP_TARGETS, all-prebootstrap): Remove. - * Makefile.in: Regenerate. + * Makefile.tpl (GCC_STRAP_TARGETS, all-prebootstrap): Remove. + * Makefile.in: Regenerate. 2006-12-29 Kaveh R. Ghazi - * configure.in: Warn that MPFR 2.2.0 is buggy. - * configure: Regenerate. + * configure.in: Warn that MPFR 2.2.0 is buggy. + * configure: Regenerate. 2006-12-27 Ian Lance Taylor @@ -523,8 +1588,8 @@ * configure: Regenerate. 2006-08-15 Thiemo Seufer - Nigel Stephens - David Ung + Nigel Stephens + David Ung * config.sub: Add support for sde as alias of mipsisa32-sde-elf. @@ -533,10 +1598,10 @@ Sync from GCC: 2006-07-04 Eric Botcazou - 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. + 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 @@ -545,8 +1610,8 @@ 2006-07-18 Paolo Bonzini - * Makefile.tpl (configure-stageN-MODULE): Pass --with-build-libsubdir - for stages after the first. + * Makefile.tpl (configure-stageN-MODULE): Pass --with-build-libsubdir + for stages after the first. 2006-07-17 Jakub Jelinek @@ -624,7 +1689,7 @@ Sync from gcc: 2005-01-12 David Edelsohn - Andreas Schwab + Andreas Schwab PR bootstrap/18033 * config-ml.in: Eval option if surrounded by single quotes. @@ -761,15 +1826,15 @@ Sync with gcc: 2006-03-10 Aldy Hernandez - * configure.in: Handle --disable- generically. - * configure: Regenerate. + * configure.in: Handle --disable- generically. + * configure: Regenerate. 2006-02-21 Rafael Avila de Espindola - * Makefile.tpl (BUILD_CONFIGDIRS): Remove. - (TARGET_CONFIGDIRS): Remove. - * configure.in: Remove AC_SUBST(target_configdirs). - * Makefile.in, configure: Regenerated. + * Makefile.tpl (BUILD_CONFIGDIRS): Remove. + (TARGET_CONFIGDIRS): Remove. + * configure.in: Remove AC_SUBST(target_configdirs). + * Makefile.in, configure: Regenerated. 2006-03-01 H.J. Lu @@ -816,22 +1881,22 @@ 2006-01-31 Richard Guenther Paolo Bonzini - * 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. - * libgcc-math: New toplevel directory. + * 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. + * libgcc-math: New toplevel directory. 2006-01-18 Richard Henderson - Jakub Jelinek - Diego Novillo + Jakub Jelinek + Diego Novillo - * libgomp: New directory. - * Makefile.def: Add target_module libgomp. - * Makefile.in: Regenerate. - * configure.in (target_libraries): Add target-libgomp. - * configure: Regenerate. + * libgomp: New directory. + * Makefile.def: Add target_module libgomp. + * Makefile.in: Regenerate. + * configure.in (target_libraries): Add target-libgomp. + * configure: Regenerate. 2006-02-14 Paolo Bonzini Andreas Schwab @@ -861,37 +1926,37 @@ 2006-01-04 Paolo Bonzini - PR bootstrap/24252 - - * Makefile.def (flags_to_pass): Add STAGE1_CFLAGS and STAGE1_LANGUAGES. - * Makefile.tpl (OBJDUMP): New. - (EXTRA_HOST_FLAGS): Add it. - (EXTRA_GCC_FLAGS): Remove flags already specified in flags_to_pass. - - * Makefile.tpl (stage[+id+]-start, stage[+id+]-end): Do not try - to use symbolic links between directories. Avoid race conditions - or make them harmless. - * configure.in: Do not try to use symbolic links between directories. - - * Makefile.def (LEAN): Pass. - * Makefile.tpl (LEAN): Define. - (stage[+id+]-start): Accept that the previous directory does not - exist, if the bootstrap is lean. - (stage[+id+]-bubble): Invoke lean bootstrap commands after - stage[+id+]-start. Use a makefile variable and an `if' instead of a - configure substitution. - ([+compare-target+]): Likewise. - ([+bootstrap-target+]-lean): New. - * configure.in: Remove lean bootstrap support from here. + PR bootstrap/24252 - * Makefile.in: Regenerate. - * configure: Regenerate. + * Makefile.def (flags_to_pass): Add STAGE1_CFLAGS and STAGE1_LANGUAGES. + * Makefile.tpl (OBJDUMP): New. + (EXTRA_HOST_FLAGS): Add it. + (EXTRA_GCC_FLAGS): Remove flags already specified in flags_to_pass. + + * Makefile.tpl (stage[+id+]-start, stage[+id+]-end): Do not try + to use symbolic links between directories. Avoid race conditions + or make them harmless. + * configure.in: Do not try to use symbolic links between directories. + + * Makefile.def (LEAN): Pass. + * Makefile.tpl (LEAN): Define. + (stage[+id+]-start): Accept that the previous directory does not + exist, if the bootstrap is lean. + (stage[+id+]-bubble): Invoke lean bootstrap commands after + stage[+id+]-start. Use a makefile variable and an `if' instead of a + configure substitution. + ([+compare-target+]): Likewise. + ([+bootstrap-target+]-lean): New. + * configure.in: Remove lean bootstrap support from here. + + * Makefile.in: Regenerate. + * configure: Regenerate. 2006-01-02 Andreas Schwab - * configure.in: When reconfiguring remove Makefile in - all stage directories. - * configure: Regenerate. + * configure.in: When reconfiguring remove Makefile in + all stage directories. + * configure: Regenerate. 2005-12-27 Leif Ekblad @@ -905,14 +1970,14 @@ 2005-12-20 Paolo Bonzini - Revert Ada-related part of the previous change. + Revert Ada-related part of the previous change. - * Makefile.def (ADAFLAGS, BOOT_ADAFLAGS, ADAFLAGS_FOR_TARGET): - Do not pass. - * Makefile.tpl (BOOT_ADAFLAGS): Do not define. - * Makefile.in: Regenerate. - * configure.in: Do not include mt-ppc-aix target fragment. - * configure: Regenerate. + * Makefile.def (ADAFLAGS, BOOT_ADAFLAGS, ADAFLAGS_FOR_TARGET): + Do not pass. + * Makefile.tpl (BOOT_ADAFLAGS): Do not define. + * Makefile.in: Regenerate. + * configure.in: Do not include mt-ppc-aix target fragment. + * configure: Regenerate. 2005-12-19 Paolo Bonzini @@ -948,21 +2013,21 @@ 2005-12-14 Daniel Jacobowitz - * Makefile.tpl: Throughout the file, use : $(MAKE) along with - $(stage) and $(unstage). - (EXTRA_TARGET_FLAGS): Correct double-quoting. - (all): Remove stray semicolon. - (local-distclean): Don't handle multilib.tmp and multilib.out. - (install.all): Set $s for consistency. - (configure-[+prefix+][+module+]): Instead of [+deps+], handle - check_multilibs setting. Always make the install directory. - (configure-stage[+id+]-[+prefix+][+module+]): Likewise. - Correct @if/@endif. - (all-stage[+id+]-[+prefix+][+module+]): Correct @if/@endif. - ($(TARGET_SUBDIR)/[+module+]/multilib.out): Remove. - (stage[+id+]-start, stage[+id+]-end): Stage $(TARGET_SUBDIR). - (multilib.out): Remove. - * Makefile.in: Regenerated. + * Makefile.tpl: Throughout the file, use : $(MAKE) along with + $(stage) and $(unstage). + (EXTRA_TARGET_FLAGS): Correct double-quoting. + (all): Remove stray semicolon. + (local-distclean): Don't handle multilib.tmp and multilib.out. + (install.all): Set $s for consistency. + (configure-[+prefix+][+module+]): Instead of [+deps+], handle + check_multilibs setting. Always make the install directory. + (configure-stage[+id+]-[+prefix+][+module+]): Likewise. + Correct @if/@endif. + (all-stage[+id+]-[+prefix+][+module+]): Correct @if/@endif. + ($(TARGET_SUBDIR)/[+module+]/multilib.out): Remove. + (stage[+id+]-start, stage[+id+]-end): Stage $(TARGET_SUBDIR). + (multilib.out): Remove. + * Makefile.in: Regenerated. 2005-12-12 Nathan Sidwell @@ -986,46 +2051,46 @@ 2005-12-05 Paolo Bonzini - * configure.in (CONFIGURED_BISON, CONFIGURED_YACC, CONFIGURED_M4, - CONFIGURED_FLEX, CONFIGURED_LEX, CONFIGURED_MAKEINFO): Remove - "CONFIGURED_" from the AC_CHECK_PROGS invocation. Move below. - Find in-tree tools if available. - (EXPECT, RUNTEST, LIPO, STRIP): Find them and substitute them. - (CONFIGURED_*_FOR_TARGET): Don't set nor substitute. - (*_FOR_TARGET): Set them with GCC_TARGET_TOOL. - (COMPILER_*_FOR_TARGET): New. - * Makefile.tpl (HOST_EXPORTS): Add *_FOR_TARGET symbols that gcc needs. - (BASE_TARGET_EXPORTS): Use COMPILER_*_FOR_TARGET symbols. - (CONFIGURED_*, USUAL_*): Remove. - (BISON, YACC, FLEX, LEX, M4, MAKEINFO, EXPECT, RUNTEST, LIPO, - STRIP): Use autoconf substitutions. - (COMPILER_AS_FOR_TARGET, COMPILER_LD_FOR_TARGET, - COMPILER_NM_FOR_TARGET): New. - (EXTRA_HOST_FLAGS): Pass LIPO and STRIP. - - (all): Make all-host and all-target in parallel. - (do-[+make_target+], do-check, install, [+compare-target+]): Ensure - that $$r and $$s are set before invoking a recursive make. - (stage[+id+]-bubble): Likewise, and invoke the comparison at the end. - ([+bootstrap-target+]): Inline most of the `all' target. + * configure.in (CONFIGURED_BISON, CONFIGURED_YACC, CONFIGURED_M4, + CONFIGURED_FLEX, CONFIGURED_LEX, CONFIGURED_MAKEINFO): Remove + "CONFIGURED_" from the AC_CHECK_PROGS invocation. Move below. + Find in-tree tools if available. + (EXPECT, RUNTEST, LIPO, STRIP): Find them and substitute them. + (CONFIGURED_*_FOR_TARGET): Don't set nor substitute. + (*_FOR_TARGET): Set them with GCC_TARGET_TOOL. + (COMPILER_*_FOR_TARGET): New. + * Makefile.tpl (HOST_EXPORTS): Add *_FOR_TARGET symbols that gcc needs. + (BASE_TARGET_EXPORTS): Use COMPILER_*_FOR_TARGET symbols. + (CONFIGURED_*, USUAL_*): Remove. + (BISON, YACC, FLEX, LEX, M4, MAKEINFO, EXPECT, RUNTEST, LIPO, + STRIP): Use autoconf substitutions. + (COMPILER_AS_FOR_TARGET, COMPILER_LD_FOR_TARGET, + COMPILER_NM_FOR_TARGET): New. + (EXTRA_HOST_FLAGS): Pass LIPO and STRIP. + + (all): Make all-host and all-target in parallel. + (do-[+make_target+], do-check, install, [+compare-target+]): Ensure + that $$r and $$s are set before invoking a recursive make. + (stage[+id+]-bubble): Likewise, and invoke the comparison at the end. + ([+bootstrap-target+]): Inline most of the `all' target. 2005-11-29 Ben Elliston - * Makefile.tpl (clean-target-libgcc): Invoke clean-target-libgcc - from the gcc build directory. - * Makefile.in: Regenerate. + * Makefile.tpl (clean-target-libgcc): Invoke clean-target-libgcc + from the gcc build directory. + * Makefile.in: Regenerate. 2005-11-29 Ben Elliston - * Makefile.def: Add new libdecnumber host_module. Make all-gcc - depend on all-libdecnumber. - * configure.in (host_libs): Include libdecnumber. - * Makefile.in: Regenerate. - * configure: Likewise. + * Makefile.def: Add new libdecnumber host_module. Make all-gcc + depend on all-libdecnumber. + * configure.in (host_libs): Include libdecnumber. + * Makefile.in: Regenerate. + * configure: Likewise. 2005-11-21 Kean Johnston - * config.sub, config.guess: Sync from upstream sources. + * config.sub, config.guess: Sync from upstream sources. 2005-11-11 Daniel Jacobowitz @@ -1155,8 +2220,8 @@ 2005-08-20 Richard Earnshaw - * Makefile.def (libssp): Add to lang_env_dependencies. - * Makefile.in: Regenerate. + * Makefile.def (libssp): Add to lang_env_dependencies. + * Makefile.in: Regenerate. 2005-08-17 Christian Groessler @@ -1312,12 +2377,12 @@ accepted into the master sources.) 2005-06-02 Aldy Hernandez - Michael Snyder - Stan Cox + Michael Snyder + Stan Cox - * configure.in: Set noconfigdirs for ms1. + * configure.in: Set noconfigdirs for ms1. - * configure: Regenerate. + * configure: Regenerate. 2005-05-25 Paolo Bonzini @@ -1363,19 +2428,19 @@ 2005-04-22 Bernd Schmidt - * config.sub: Update from master copy. + * config.sub: Update from master copy. 2005-04-19 Hans-Peter Nilsson - * configure.in : New local variable - libgcj_ex_libffi. Have specific match for *-*-linux*. Separate - matches for "*-*-aout" and "*-*-elf". Don't disable libffi for - "*-*-elf" and "*-*-linux*". - * configure: Regenerate. + * configure.in : New local variable + libgcj_ex_libffi. Have specific match for *-*-linux*. Separate + matches for "*-*-aout" and "*-*-elf". Don't disable libffi for + "*-*-elf" and "*-*-linux*". + * configure: Regenerate. 2005-04-06 Paolo Bonzini - * Makefile.tpl (BUILD_CONFIGARGS): Include --with-build-subdir. + * Makefile.tpl (BUILD_CONFIGARGS): Include --with-build-subdir. (TARGET_CONFIGARGS): Include --with-target-subdir. (configure, all): New macros. Use them throughout. diff --git a/MAINTAINERS b/MAINTAINERS index 6c5f732..a471c90 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4,24 +4,26 @@ Please do not make ChangeLog entries. COPYING, COPYING.LIB, README http://gnu.org. -Makefile.*; configure; configure.in; src-release +Makefile.*; configure; configure.ac; src-release Any global maintainer can approve changes to these files, but they should be aware that they need to be kept in sync with their counterparts in the GCC repository. Also please notify the following of any committed patches: - binutils@sources.redhat.com - gdb-patches@sources.redhat.com + binutils@sourceware.org + gdb-patches@sourceware.org -bfd/; binutils/; gas/; gprof/; ld/; opcodes/; cpu/; BFD's part of include/ - binutils: http://sources.redhat.com/binutils/ - Patches to binutils@sources.redhat.com. +bfd/; binutils/; elfcpp/; gas/; gold/; gprof/; ld/; opcodes/; cpu/; +BFD's part of include/ + + binutils: http://sourceware.org/binutils/ + Patches to binutils@sourceware.org. Please notify the following of any interface changes: - gdb-patches@sources.redhat.com + gdb-patches@sourceware.org cgen/; cgen parts of opcodes/, sim/ & include/ - cgen: http://sources.redhat.com/cgen/ - Patches to cgen@sources.redhat.com + cgen: http://sourceware.org/cgen/ + Patches to cgen@sourceware.org May need separate opcodes/ or sim/ approval for commits of regenerated files there. @@ -33,15 +35,15 @@ config.guess; config.sub; readline/support/config.{sub,guess} in via a merge. When updating any of these files, please be sure to update all of them. Please notify the following of any committed patches: - binutils@sources.redhat.com - gdb-patches@sources.redhat.com + binutils@sourceware.org + gdb-patches@sourceware.org depcomp Send bug reports and patches to bug-automake@gnu.org. gdb/; readline/; sim/; GDB's part of include/ GDB: http://www.gnu.org/software/gdb/ - Patches to gdb-patches@sources.redhat.com. + Patches to gdb-patches@sourceware.org. See also gdb/MAINTAINERS and sim/MAINTAINERS. include/ @@ -57,6 +59,10 @@ intl/; config.rhost; libiberty/; libiberty's part of include/ merge. Otherwise, changes are automatically merged, usually within a day. +libdecnumber/ + See libiberty. The master copy of this directory is in the GCC + repository. + ltconfig; ltmain.sh; ltcf-*.sh libtool: http://www.gnu.org/software/libtool/ Changes need to be done in tandem with the official LIBTOOL @@ -75,12 +81,12 @@ symlink-tree See libiberty. newlib/; libgloss/ - http://sources.redhat.com/newlib/ - Patches to newlib@sources.redhat.com. + http://sourceware.org/newlib/ + Patches to newlib@sourceware.org. sid/; SID's part of cgen/ - sid: http://sources.redhat.com/sid/ - Patches to sid@sources.redhat.com + sid: http://sourceware.org/sid/ + Patches to sid@sourceware.org texinfo/texinfo.tex texinfo: http://ftp.gnu.org. @@ -89,14 +95,13 @@ texinfo/texinfo.tex Please not use GCC's texinfo. Please do not import texinfo. tcl/; tix/; itcl/; tk/; libgui/ - insight: http://sources.redhat.com/insight/ - Contact insight@sources.redhat.com. + insight: http://sourceware.org/insight/ + Contact insight@sourceware.org. winsup/ - cygwin: http://sources.redhat.com/cygwin - Patches to cygwin-patches@sources.redhat.com. - General discussion cygwin@sources.redhat.com. - See also winsup/MAINTAINERS. + cygwin: http://sourceware.org/cygwin + Patches to cygwin-patches@cygwin.com. + General discussion cygwin@cygwin.com. config-ml.in; makefile.vms; mkdep; setup.com; etc/; utils/; @@ -111,11 +116,9 @@ config/ counterparts in the GCC repository. modules file - Obviously changes to this file should not go through - overseers@sources.redhat.com. If you understand the file - format (or can cut-and-paste existing entries), modify it. If - it scares you, get someone who does understand it to help you. - Be prepared to fix it if you do break it. + If you understand the file format (or can cut-and-paste existing + entries), modify it. If it scares you, get someone who does + understand it to help you. Be prepared to fix it if you do break it. /* Local variables: */ /* change-log-default-name: "/dev/null" */ diff --git a/Makefile.def b/Makefile.def index c6d05d5..cc4032b 100644 --- a/Makefile.def +++ b/Makefile.def @@ -4,11 +4,12 @@ AutoGen definitions Makefile.tpl; // Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'. // This file was originally written by Nathanael Nerode. // -// Copyright 2002, 2003, 2004, 2005, 2006 Free Software Foundation +// Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +// 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 +// the Free Software Foundation; either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, @@ -17,8 +18,8 @@ AutoGen definitions Makefile.tpl; // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// along with this program; see the file COPYING3. If not see +// . // "missing" indicates that that module doesn't supply @@ -42,6 +43,7 @@ host_modules= { module= binutils; bootstrap=true; }; host_modules= { module= bison; no_check_cross= true; }; host_modules= { module= byacc; no_check_cross= true; }; host_modules= { module= bzip2; }; +host_modules= { module= cgen; }; host_modules= { module= dejagnu; }; host_modules= { module= diff; }; host_modules= { module= dosutils; no_check= true; }; @@ -64,11 +66,25 @@ host_modules= { module= gmp; lib_path=.libs; bootstrap=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'; + extra_configure_flags='--disable-shared @extra_mpfr_configure_flags@'; + no_install= true; + host="none-${host_vendor}-${host_os}"; + target="none-${host_vendor}-${host_os}"; }; +host_modules= { module= mpc; lib_path=.libs; bootstrap=true; + extra_configure_flags='--disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@'; + no_install= true; }; +host_modules= { module= ppl; lib_path=.libs; bootstrap=true; + extra_configure_flags='--disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/'; + no_install= true; + host="none-${host_vendor}-${host_os}"; + target="none-${host_vendor}-${host_os}"; }; +host_modules= { module= cloog; lib_path=.libs; bootstrap=true; + extra_configure_flags='--disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp'; no_install= true; host="none-${host_vendor}-${host_os}"; target="none-${host_vendor}-${host_os}"; }; host_modules= { module= gnuserv; }; +host_modules= { module= gold; bootstrap=true; }; host_modules= { module= gprof; }; host_modules= { module= gzip; }; host_modules= { module= hello; }; @@ -82,6 +98,14 @@ host_modules= { module= libcpp; bootstrap=true; }; host_modules= { module= libdecnumber; bootstrap=true; }; host_modules= { module= libgui; }; host_modules= { module= libiberty; bootstrap=true; }; +// We abuse missing to avoid installing anything for libiconv. +host_modules= { module= libiconv; + extra_configure_flags='--disable-shared'; + no_install= true; + missing= install-info; + missing= install-pdf; + missing= install-html; + missing= install-info; }; host_modules= { module= libtool; }; host_modules= { module= m4; }; host_modules= { module= make; }; @@ -118,7 +142,10 @@ host_modules= { module= libtermcap; no_check=true; host_modules= { module= utils; no_check=true; }; host_modules= { module= gnattools; }; -target_modules = { module= libstdc++-v3; lib_path=.libs; raw_cxx=true; }; +target_modules = { module= libstdc++-v3; + bootstrap=true; + lib_path=.libs; + raw_cxx=true; }; target_modules = { module= libmudflap; lib_path=.libs; }; target_modules = { module= libssp; lib_path=.libs; }; target_modules = { module= newlib; }; @@ -204,6 +231,7 @@ flags_to_pass = { flag= build_tooldir ; }; flags_to_pass = { flag= target_alias ; }; // Build tools +flags_to_pass = { flag= AWK ; }; flags_to_pass = { flag= BISON ; }; flags_to_pass = { flag= CC_FOR_BUILD ; }; flags_to_pass = { flag= CFLAGS_FOR_BUILD ; }; @@ -214,16 +242,19 @@ flags_to_pass = { flag= INSTALL ; }; flags_to_pass = { flag= INSTALL_DATA ; }; flags_to_pass = { flag= INSTALL_PROGRAM ; }; flags_to_pass = { flag= INSTALL_SCRIPT ; }; +flags_to_pass = { flag= LDFLAGS_FOR_BUILD ; }; flags_to_pass = { flag= LEX ; }; flags_to_pass = { flag= M4 ; }; flags_to_pass = { flag= MAKE ; }; flags_to_pass = { flag= RUNTEST ; }; flags_to_pass = { flag= RUNTESTFLAGS ; }; +flags_to_pass = { flag= SED ; }; flags_to_pass = { flag= SHELL ; }; flags_to_pass = { flag= YACC ; }; // Host tools flags_to_pass = { flag= ADAFLAGS ; optional=true ; }; +flags_to_pass = { flag= ADA_CFLAGS ; }; flags_to_pass = { flag= AR_FLAGS ; }; flags_to_pass = { flag= BOOT_ADAFLAGS ; optional=true ; }; flags_to_pass = { flag= BOOT_CFLAGS ; }; @@ -233,7 +264,6 @@ flags_to_pass = { flag= CXXFLAGS ; }; 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 ; }; @@ -248,6 +278,7 @@ flags_to_pass = { flag= CPPFLAGS_FOR_TARGET ; }; flags_to_pass = { flag= CXX_FOR_TARGET ; }; flags_to_pass = { flag= CXXFLAGS_FOR_TARGET ; }; flags_to_pass = { flag= DLLTOOL_FOR_TARGET ; }; +flags_to_pass = { flag= FLAGS_FOR_TARGET ; }; flags_to_pass = { flag= GCJ_FOR_TARGET ; }; flags_to_pass = { flag= GFORTRAN_FOR_TARGET ; }; flags_to_pass = { flag= LD_FOR_TARGET ; }; @@ -263,6 +294,7 @@ flags_to_pass = { flag= WINDRES_FOR_TARGET ; }; flags_to_pass = { flag= WINDMC_FOR_TARGET ; }; // Miscellaneous +flags_to_pass = { flag= BUILD_CONFIG ; }; flags_to_pass = { flag= LANGUAGES ; optional=true ; }; flags_to_pass = { flag= LEAN ; }; @@ -284,10 +316,14 @@ dependencies = { module=configure-gcc; on=configure-intl; }; dependencies = { module=configure-gcc; on=all-binutils; }; dependencies = { module=configure-gcc; on=all-gas; }; dependencies = { module=configure-gcc; on=all-ld; }; +dependencies = { module=configure-gcc; on=all-gold; }; 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-mpc; }; +dependencies = { module=all-gcc; on=all-ppl; }; +dependencies = { module=all-gcc; on=all-cloog; }; dependencies = { module=all-gcc; on=all-build-texinfo; }; dependencies = { module=all-gcc; on=all-build-bison; }; dependencies = { module=all-gcc; on=all-build-byacc; }; @@ -311,18 +347,26 @@ dependencies = { module=all-fixincludes; on=all-libiberty; }; dependencies = { module=all-gnattools; on=all-target-libada; }; dependencies = { module=configure-mpfr; on=all-gmp; }; +dependencies = { module=configure-mpc; on=all-mpfr; }; +dependencies = { module=configure-ppl; on=all-gmp; }; +dependencies = { module=configure-ppl; on=all-mpfr; }; +dependencies = { module=configure-cloog; on=all-ppl; }; // Host modules specific to gdb. -dependencies = { module=configure-gdb; on=configure-intl; }; +dependencies = { module=configure-gdb; on=all-intl; }; dependencies = { module=configure-gdb; on=configure-sim; }; dependencies = { module=configure-gdb; on=all-bfd; }; -dependencies = { module=all-gdb; on=all-intl; }; +// Depend on all-libiconv so that configure checks for iconv +// functions will work. +dependencies = { module=configure-gdb; on=all-libiconv; }; dependencies = { module=all-gdb; on=all-libiberty; }; +dependencies = { module=all-gdb; on=all-libiconv; }; dependencies = { module=all-gdb; on=all-opcodes; }; dependencies = { module=all-gdb; on=all-readline; }; dependencies = { module=all-gdb; on=all-build-bison; }; dependencies = { module=all-gdb; on=all-build-byacc; }; dependencies = { module=all-gdb; on=all-sim; }; +dependencies = { module=all-gdb; on=all-libdecnumber; }; dependencies = { module=configure-libgui; on=configure-tcl; }; dependencies = { module=configure-libgui; on=configure-tk; }; @@ -335,6 +379,8 @@ 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-opcodes; on=configure-libiberty; hard=true; }; +dependencies = { module=all-opcodes; on=all-libiberty; }; dependencies = { module=configure-binutils; on=configure-intl; }; dependencies = { module=all-binutils; on=all-libiberty; }; @@ -371,6 +417,14 @@ dependencies = { module=all-ld; on=all-build-bison; }; 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-gold; on=configure-intl; }; +dependencies = { module=all-gold; on=all-libiberty; }; +dependencies = { module=all-gold; on=all-intl; }; +dependencies = { module=all-gold; on=all-bfd; }; +dependencies = { module=all-gold; on=all-build-bison; }; +dependencies = { module=all-gold; on=all-build-byacc; }; +dependencies = { module=check-gold; on=all-binutils; }; +dependencies = { module=check-gold; on=all-gas; }; dependencies = { module=configure-opcodes; on=configure-intl; }; dependencies = { module=all-opcodes; on=all-bfd; }; @@ -467,6 +521,7 @@ lang_env_dependencies = { module=libgcc; no_gcc=true; no_c=true; }; lang_env_dependencies = { module=libiberty; no_c=true; }; dependencies = { module=configure-target-boehm-gc; on=configure-target-qthreads; }; +dependencies = { module=configure-target-boehm-gc; on=all-target-libstdc++-v3; }; dependencies = { module=configure-target-fastjar; on=configure-target-zlib; }; dependencies = { module=all-target-fastjar; on=all-target-zlib; }; dependencies = { module=all-target-fastjar; on=all-target-libiberty; }; @@ -483,6 +538,7 @@ 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; }; +dependencies = { module=configure-target-libstdc++-v3; on=configure-target-libgomp; }; // Target modules in the 'src' repository. lang_env_dependencies = { module=examples; }; @@ -491,47 +547,43 @@ lang_env_dependencies = { module=rda; }; lang_env_dependencies = { module=winsup; }; lang_env_dependencies = { module=qthreads; }; -dependencies = { module=all-target-libgloss; on=configure-target-newlib; }; +dependencies = { module=all-target-libgloss; on=all-target-newlib; }; dependencies = { module=all-target-winsup; on=all-target-libiberty; }; dependencies = { module=all-target-winsup; on=all-target-libtermcap; }; +dependencies = { module=configure-target-libiberty; on=all-binutils; }; +dependencies = { module=configure-target-libiberty; on=all-ld; }; +dependencies = { module=configure-target-newlib; on=all-binutils; }; +dependencies = { module=configure-target-newlib; on=all-ld; }; + +languages = { language=c; gcc-check-target=check-gcc; }; +languages = { language=c++; gcc-check-target=check-c++; + lib-check-target=check-target-libstdc++-v3; }; +languages = { language=fortran; gcc-check-target=check-fortran; + lib-check-target=check-target-libgfortran; }; +languages = { language=java; gcc-check-target=check-java; + lib-check-target=check-target-libjava; }; +languages = { language=ada; gcc-check-target=check-ada; + lib-check-target=check-target-libada; }; +languages = { language=objc; gcc-check-target=check-objc; + lib-check-target=check-target-libobjc; }; +languages = { language=obj-c++; gcc-check-target=check-obj-c++; }; // Toplevel bootstrap -bootstrap_stage = { - id=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. - stage_configure_flags='--disable-intermodule $(STAGE1_CHECKING) \ - --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"' ; - stage_cflags='$(STAGE1_CFLAGS)' ; }; +bootstrap_stage = { id=1 ; }; bootstrap_stage = { id=2 ; prev=1 ; - bootstrap_target=bootstrap2 ; - stage_configure_flags="@stage2_werror_flag@" ; - stage_cflags="$(BOOT_CFLAGS)" ; }; + bootstrap_target=bootstrap2 ; }; bootstrap_stage = { id=3 ; prev=2 ; lean=1 ; compare_target=compare ; bootstrap_target=bootstrap ; - cleanstrap_target=cleanstrap ; - stage_configure_flags="@stage2_werror_flag@" ; - stage_cflags="$(BOOT_CFLAGS)" ; }; + cleanstrap_target=cleanstrap ; }; bootstrap_stage = { id=4 ; prev=3 ; lean=2 ; compare_target=compare3 ; - bootstrap_target=bootstrap4 ; - stage_configure_flags="@stage2_werror_flag@" ; - stage_cflags="$(BOOT_CFLAGS)" ; }; + bootstrap_target=bootstrap4 ; }; bootstrap_stage = { - id=profile ; prev=1 ; - stage_configure_flags="@stage2_werror_flag@" ; - stage_cflags='$(BOOT_CFLAGS) -fprofile-generate' ; }; + id=profile ; prev=1 ; }; bootstrap_stage = { id=feedback ; prev=profile ; - bootstrap_target=profiledbootstrap ; - stage_configure_flags="@stage2_werror_flag@" ; - stage_cflags='$(BOOT_CFLAGS) -fprofile-use' ; }; + bootstrap_target=profiledbootstrap ; }; diff --git a/Makefile.in b/Makefile.in index f6fb2da..f6c54c2 100644 --- a/Makefile.in +++ b/Makefile.in @@ -3,11 +3,12 @@ # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# 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 +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -16,10 +17,18 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program; see the file COPYING3. If not see +# . # +# First, test for a proper version of make, but only where one is required. + +@if gcc +ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty. +$(error GNU make version 3.80 or newer is required.) +endif +@endif gcc + # ------------------------------- # Standard Autoconf-set variables # ------------------------------- @@ -97,12 +106,30 @@ GDB_NLM_DEPS = # the libraries. RPATH_ENVVAR = @RPATH_ENVVAR@ +# On targets where RPATH_ENVVAR is PATH, a subdirectory of the GCC build path +# is used instead of the directory itself to avoid including built +# executables in PATH. +GCC_SHLIB_SUBDIR = @GCC_SHLIB_SUBDIR@ + # Build programs are put under this directory. BUILD_SUBDIR = @build_subdir@ # This is set by the configure script to the arguments to use when configuring # directories built for the build system. BUILD_CONFIGARGS = @build_configargs@ --with-build-subdir="$(BUILD_SUBDIR)" +# Linker flags to use on the host, for stage1 or when not +# bootstrapping. +STAGE1_LDFLAGS = @stage1_ldflags@ + +# Libraries to use on the host, for stage1 or when not bootstrapping. +STAGE1_LIBS = @stage1_libs@ + +# Linker flags to use for stage2 and later. +POSTSTAGE1_LDFLAGS = @poststage1_ldflags@ + +# Libraries to use for stage2 and later. +POSTSTAGE1_LIBS = @poststage1_libs@ + # This is the list of variables to export in the environment when # configuring any subdirectory. It must also be exported whenever # recursing into a build directory in case that directory's Makefile @@ -113,6 +140,8 @@ BASE_EXPORTS = \ BISON="$(BISON)"; export BISON; \ YACC="$(YACC)"; export YACC; \ M4="$(M4)"; export M4; \ + SED="$(SED)"; export SED; \ + AWK="$(AWK)"; export AWK; \ MAKEINFO="$(MAKEINFO)"; export MAKEINFO; # This is the list of variables to export in the environment when @@ -136,6 +165,12 @@ BUILD_EXPORTS = \ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \ WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC; +# These variables must be set on the make command line for directories +# built for the build system to override those in BASE_FLAGS_TO_PASSS. +EXTRA_BUILD_FLAGS = \ + CFLAGS="$(CFLAGS_FOR_BUILD)" \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)" + # This is the list of directories to built for the host system. SUBDIRS = @configdirs@ # This is set by the configure script to the arguments to use when configuring @@ -150,16 +185,19 @@ HOST_SUBDIR = @host_subdir@ HOST_EXPORTS = \ $(BASE_EXPORTS) \ CC="$(CC)"; export CC; \ + ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \ CFLAGS="$(CFLAGS)"; export CFLAGS; \ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ CXX="$(CXX)"; export CXX; \ CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \ + GCJ="$(GCJ)"; export GCJ; \ + GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \ AR="$(AR)"; export AR; \ AS="$(AS)"; export AS; \ CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \ LD="$(LD)"; export LD; \ - LDFLAGS="$(LDFLAGS)"; export LDFLAGS; \ + LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \ NM="$(NM)"; export NM; \ RANLIB="$(RANLIB)"; export RANLIB; \ WINDRES="$(WINDRES)"; export WINDRES; \ @@ -174,8 +212,13 @@ HOST_EXPORTS = \ OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \ TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \ + HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \ GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ + PPLLIBS="$(HOST_PPLLIBS)"; export PPLLIBS; \ + PPLINC="$(HOST_PPLINC)"; export PPLINC; \ + CLOOGLIBS="$(HOST_CLOOGLIBS)"; export CLOOGLIBS; \ + CLOOGINC="$(HOST_CLOOGINC)"; export CLOOGINC; \ @if gcc-bootstrap $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ @endif gcc-bootstrap @@ -185,12 +228,19 @@ HOST_EXPORTS = \ POSTSTAGE1_HOST_EXPORTS = \ $(HOST_EXPORTS) \ CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \ - -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \ - 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; \ - LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS; + -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ \ + $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \ + CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \ + CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/g++$(exeext) \ + -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \ + -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \ + -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \ + -I$$r/$(srcdir)/libstdc++-v3/libsupc++ \ + -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; export CXX; \ + CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD; \ + GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \ + LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \ + HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS; # Target libraries are put under this directory: TARGET_SUBDIR = @target_subdir@ @@ -203,13 +253,13 @@ BASE_TARGET_EXPORTS = \ $(BASE_EXPORTS) \ AR="$(AR_FOR_TARGET)"; export AR; \ AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \ - CC="$(CC_FOR_TARGET)"; export CC; \ + CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ - GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \ - GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \ + GCJ="$(GCJ_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GCJ; \ + GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ @@ -225,16 +275,24 @@ BASE_TARGET_EXPORTS = \ RAW_CXX_TARGET_EXPORTS = \ $(BASE_TARGET_EXPORTS) \ CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \ - CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; + CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; NORMAL_TARGET_EXPORTS = \ $(BASE_TARGET_EXPORTS) \ - CXX="$(CXX_FOR_TARGET)"; export CXX; + CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; # Where to find GMP HOST_GMPLIBS = @gmplibs@ HOST_GMPINC = @gmpinc@ +# Where to find PPL +HOST_PPLLIBS = @ppllibs@ +HOST_PPLINC = @pplinc@ + +# Where to find CLOOG +HOST_CLOOGLIBS = @clooglibs@ +HOST_CLOOGINC = @clooginc@ + # ---------------------------------------------- # Programs producing files for the BUILD machine # ---------------------------------------------- @@ -251,10 +309,21 @@ PWD_COMMAND = $${PWDCMD-pwd} # compilers to use to create programs which must be run in the build # environment. +AR_FOR_BUILD = @AR_FOR_BUILD@ +AS_FOR_BUILD = @AS_FOR_BUILD@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ - -CXX_FOR_BUILD = $(CXX) +CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@ +GCJ_FOR_BUILD = @GCJ_FOR_BUILD@ +GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@ +LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ +LD_FOR_BUILD = @LD_FOR_BUILD@ +NM_FOR_BUILD = @NM_FOR_BUILD@ +RANLIB_FOR_BUILD = @RANLIB_FOR_BUILD@ +WINDMC_FOR_BUILD = @WINDMC_FOR_BUILD@ +WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@ # Special variables passed down in EXTRA_GCC_FLAGS. They are defined # here so that they can be overridden by Makefile fragments. @@ -265,7 +334,10 @@ BUILD_PREFIX_1 = @BUILD_PREFIX_1@ # here so that they can be overridden by Makefile fragments. BOOT_CFLAGS= -g -O2 BOOT_LDFLAGS= +BOOT_ADAFLAGS=-gnatpg -gnata +AWK = @AWK@ +SED = @SED@ BISON = @BISON@ YACC = @YACC@ FLEX = @FLEX@ @@ -308,7 +380,46 @@ LDFLAGS = @LDFLAGS@ LIBCFLAGS = $(CFLAGS) CXXFLAGS = @CXXFLAGS@ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates -PICFLAG = + +TFLAGS = + +# Defaults for all stages; some are overridden below. + +STAGE_CFLAGS = $(BOOT_CFLAGS) +STAGE_TFLAGS = $(TFLAGS) +STAGE_CONFIGURE_FLAGS=@stage2_werror_flag@ + + +# Defaults for stage 1; some are overridden below. +STAGE1_CFLAGS = $(STAGE_CFLAGS) +STAGE1_TFLAGS = $(STAGE_TFLAGS) +STAGE1_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage 2; some are overridden below. +STAGE2_CFLAGS = $(STAGE_CFLAGS) +STAGE2_TFLAGS = $(STAGE_TFLAGS) +STAGE2_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage 3; some are overridden below. +STAGE3_CFLAGS = $(STAGE_CFLAGS) +STAGE3_TFLAGS = $(STAGE_TFLAGS) +STAGE3_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage 4; some are overridden below. +STAGE4_CFLAGS = $(STAGE_CFLAGS) +STAGE4_TFLAGS = $(STAGE_TFLAGS) +STAGE4_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage profile; some are overridden below. +STAGEprofile_CFLAGS = $(STAGE_CFLAGS) +STAGEprofile_TFLAGS = $(STAGE_TFLAGS) +STAGEprofile_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + +# Defaults for stage feedback; some are overridden below. +STAGEfeedback_CFLAGS = $(STAGE_CFLAGS) +STAGEfeedback_TFLAGS = $(STAGE_TFLAGS) +STAGEfeedback_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) + # 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 @@ -316,29 +427,44 @@ PICFLAG = # 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_CFLAGS = @stage1_cflags@ STAGE1_CHECKING=@stage1_checking@ STAGE1_LANGUAGES=@stage1_languages@ +# * 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. +STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ + --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) + +STAGEfeedback_CFLAGS = $(STAGE3_CFLAGS) -fprofile-use +STAGEfeedback_TFLAGS = $(STAGE3_TFLAGS) + +do-compare = @do_compare@ +do-compare3 = $(do-compare) # ----------------------------------------------- # Programs producing files for the TARGET machine # ----------------------------------------------- -FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@ - AR_FOR_TARGET=@AR_FOR_TARGET@ AS_FOR_TARGET=@AS_FOR_TARGET@ -CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ $(FLAGS_FOR_TARGET) +CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ # If GCC_FOR_TARGET is not overriden on the command line, then this # variable is passed down to the gcc Makefile, where it is used to # build libgcc2.a. We define it here so that it can itself be # overridden on the command line. -GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ $(FLAGS_FOR_TARGET) -CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@ $(FLAGS_FOR_TARGET) -RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ $(FLAGS_FOR_TARGET) -GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@ $(FLAGS_FOR_TARGET) -GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ $(FLAGS_FOR_TARGET) +GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ +CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@ +RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ +GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@ +GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@ LD_FOR_TARGET=@LD_FOR_TARGET@ @@ -354,17 +480,18 @@ COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@ COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@ COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@ -# During gcc bootstrap, if we use some random cc for stage1 then -# CFLAGS will be just -g. We want to ensure that TARGET libraries -# (which we know are built with gcc) are built with optimizations so -# prepend -O2 when setting CFLAGS_FOR_TARGET. -CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) -SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@ -CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) +CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@ +CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@ + LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates LDFLAGS_FOR_TARGET = -PICFLAG_FOR_TARGET = + +FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@ +SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@ +DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@ + +XGCC_FLAGS_FOR_TARGET = $(FLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET) # ------------------------------------ # Miscellaneous targets and flag lists @@ -405,11 +532,11 @@ 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_gmp)$(HOST_LIB_PATH_mpfr) +HOST_LIB_PATH = $(HOST_LIB_PATH_bfd)$(HOST_LIB_PATH_opcodes)$(HOST_LIB_PATH_gmp)$(HOST_LIB_PATH_mpfr)$(HOST_LIB_PATH_mpc)$(HOST_LIB_PATH_ppl)$(HOST_LIB_PATH_cloog) # Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch @if gcc -HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc:$$r/$(HOST_SUBDIR)/prev-gcc: +HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR): @endif gcc @@ -433,6 +560,21 @@ HOST_LIB_PATH_mpfr = \ $$r/$(HOST_SUBDIR)/mpfr/.libs:$$r/$(HOST_SUBDIR)/prev-mpfr/.libs: @endif mpfr +@if mpc +HOST_LIB_PATH_mpc = \ + $$r/$(HOST_SUBDIR)/mpc/.libs:$$r/$(HOST_SUBDIR)/prev-mpc/.libs: +@endif mpc + +@if ppl +HOST_LIB_PATH_ppl = \ + $$r/$(HOST_SUBDIR)/ppl/.libs:$$r/$(HOST_SUBDIR)/prev-ppl/.libs: +@endif ppl + +@if cloog +HOST_LIB_PATH_cloog = \ + $$r/$(HOST_SUBDIR)/cloog/.libs:$$r/$(HOST_SUBDIR)/prev-cloog/.libs: +@endif cloog + # Flags to pass down to all sub-makes. BASE_FLAGS_TO_PASS = \ @@ -461,6 +603,7 @@ BASE_FLAGS_TO_PASS = \ "tooldir=$(tooldir)" \ "build_tooldir=$(build_tooldir)" \ "target_alias=$(target_alias)" \ + "AWK=$(AWK)" \ "BISON=$(BISON)" \ "CC_FOR_BUILD=$(CC_FOR_BUILD)" \ "CFLAGS_FOR_BUILD=$(CFLAGS_FOR_BUILD)" \ @@ -471,14 +614,17 @@ BASE_FLAGS_TO_PASS = \ "INSTALL_DATA=$(INSTALL_DATA)" \ "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \ "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \ + "LDFLAGS_FOR_BUILD=$(LDFLAGS_FOR_BUILD)" \ "LEX=$(LEX)" \ "M4=$(M4)" \ "MAKE=$(MAKE)" \ "RUNTEST=$(RUNTEST)" \ "RUNTESTFLAGS=$(RUNTESTFLAGS)" \ + "SED=$(SED)" \ "SHELL=$(SHELL)" \ "YACC=$(YACC)" \ "`echo 'ADAFLAGS=$(ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ + "ADA_CFLAGS=$(ADA_CFLAGS)" \ "AR_FLAGS=$(AR_FLAGS)" \ "`echo 'BOOT_ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ "BOOT_CFLAGS=$(BOOT_CFLAGS)" \ @@ -488,7 +634,6 @@ BASE_FLAGS_TO_PASS = \ "LDFLAGS=$(LDFLAGS)" \ "LIBCFLAGS=$(LIBCFLAGS)" \ "LIBCXXFLAGS=$(LIBCXXFLAGS)" \ - "STAGE1_CFLAGS=$(STAGE1_CFLAGS)" \ "STAGE1_CHECKING=$(STAGE1_CHECKING)" \ "STAGE1_LANGUAGES=$(STAGE1_LANGUAGES)" \ "GNATBIND=$(GNATBIND)" \ @@ -501,6 +646,7 @@ BASE_FLAGS_TO_PASS = \ "CXX_FOR_TARGET=$(CXX_FOR_TARGET)" \ "CXXFLAGS_FOR_TARGET=$(CXXFLAGS_FOR_TARGET)" \ "DLLTOOL_FOR_TARGET=$(DLLTOOL_FOR_TARGET)" \ + "FLAGS_FOR_TARGET=$(FLAGS_FOR_TARGET)" \ "GCJ_FOR_TARGET=$(GCJ_FOR_TARGET)" \ "GFORTRAN_FOR_TARGET=$(GFORTRAN_FOR_TARGET)" \ "LD_FOR_TARGET=$(LD_FOR_TARGET)" \ @@ -514,8 +660,22 @@ BASE_FLAGS_TO_PASS = \ "STRIP_FOR_TARGET=$(STRIP_FOR_TARGET)" \ "WINDRES_FOR_TARGET=$(WINDRES_FOR_TARGET)" \ "WINDMC_FOR_TARGET=$(WINDMC_FOR_TARGET)" \ + "BUILD_CONFIG=$(BUILD_CONFIG)" \ "`echo 'LANGUAGES=$(LANGUAGES)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \ "LEAN=$(LEAN)" \ + "STAGE1_CFLAGS=$(STAGE1_CFLAGS)" \ + "STAGE1_TFLAGS=$(STAGE1_TFLAGS)" \ + "STAGE2_CFLAGS=$(STAGE2_CFLAGS)" \ + "STAGE2_TFLAGS=$(STAGE2_TFLAGS)" \ + "STAGE3_CFLAGS=$(STAGE3_CFLAGS)" \ + "STAGE3_TFLAGS=$(STAGE3_TFLAGS)" \ + "STAGE4_CFLAGS=$(STAGE4_CFLAGS)" \ + "STAGE4_TFLAGS=$(STAGE4_TFLAGS)" \ + "STAGEprofile_CFLAGS=$(STAGEprofile_CFLAGS)" \ + "STAGEprofile_TFLAGS=$(STAGEprofile_TFLAGS)" \ + "STAGEfeedback_CFLAGS=$(STAGEfeedback_CFLAGS)" \ + "STAGEfeedback_TFLAGS=$(STAGEfeedback_TFLAGS)" \ + "TFLAGS=$(TFLAGS)" \ "CONFIG_SHELL=$(SHELL)" \ "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" @@ -530,6 +690,8 @@ EXTRA_HOST_FLAGS = \ 'CC=$(CC)' \ 'CXX=$(CXX)' \ 'DLLTOOL=$(DLLTOOL)' \ + 'GCJ=$(GCJ)' \ + 'GFORTRAN=$(GFORTRAN)' \ 'LD=$(LD)' \ 'LIPO=$(LIPO)' \ 'NM=$(NM)' \ @@ -557,22 +719,27 @@ X11_FLAGS_TO_PASS = \ POSTSTAGE1_FLAGS_TO_PASS = \ CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \ - GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind" \ - LDFLAGS="$(BOOT_LDFLAGS)" \ + CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \ + GNATBIND="$${GNATBIND}" \ + LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)" \ + HOST_LIBS="$(POSTSTAGE1_LIBS)" \ "`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 -# COMPILER_ prefixed variables are not passed down so we expand them here. +# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty, +# so we expand them here. EXTRA_TARGET_FLAGS = \ 'AR=$$(AR_FOR_TARGET)' \ 'AS=$(COMPILER_AS_FOR_TARGET)' \ - 'CC=$$(CC_FOR_TARGET)' \ + 'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'CFLAGS=$$(CFLAGS_FOR_TARGET)' \ - 'CXX=$$(CXX_FOR_TARGET)' \ + 'CXX=$$(CXX_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \ 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \ + 'GCJ=$$(GCJ_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'LD=$(COMPILER_LD_FOR_TARGET)' \ 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \ 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \ @@ -581,7 +748,9 @@ EXTRA_TARGET_FLAGS = \ 'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \ 'RANLIB=$$(RANLIB_FOR_TARGET)' \ 'WINDRES=$$(WINDRES_FOR_TARGET)' \ - 'WINDMC=$$(WINDMC_FOR_TARGET)' + 'WINDMC=$$(WINDMC_FOR_TARGET)' \ + 'XGCC_FLAGS_FOR_TARGET=$(XGCC_FLAGS_FOR_TARGET)' \ + "TFLAGS=$$TFLAGS" TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) @@ -601,6 +770,13 @@ EXTRA_GCC_FLAGS = \ GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS) +@if gcc +BUILD_CONFIG = +ifneq ($(BUILD_CONFIG),) +include $(foreach CONFIG, $(BUILD_CONFIG), $(srcdir)/config/$(CONFIG).mk) +endif +@endif gcc + .PHONY: configure-host configure-host: \ maybe-configure-ash \ @@ -613,6 +789,7 @@ configure-host: \ maybe-configure-bison \ maybe-configure-byacc \ maybe-configure-bzip2 \ + maybe-configure-cgen \ maybe-configure-dejagnu \ maybe-configure-diff \ maybe-configure-dosutils \ @@ -629,7 +806,11 @@ configure-host: \ maybe-configure-gettext \ maybe-configure-gmp \ maybe-configure-mpfr \ + maybe-configure-mpc \ + maybe-configure-ppl \ + maybe-configure-cloog \ maybe-configure-gnuserv \ + maybe-configure-gold \ maybe-configure-gprof \ maybe-configure-gzip \ maybe-configure-hello \ @@ -642,6 +823,7 @@ configure-host: \ maybe-configure-libdecnumber \ maybe-configure-libgui \ maybe-configure-libiberty \ + maybe-configure-libiconv \ maybe-configure-libtool \ maybe-configure-m4 \ maybe-configure-make \ @@ -709,11 +891,18 @@ all: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ +@if gcc-bootstrap if [ -f stage_last ]; then \ + TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_last)_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \ else \ - $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target; \ - fi +@endif gcc-bootstrap + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \ +@if gcc-bootstrap + ; \ + fi \ +@endif gcc-bootstrap + && : .PHONY: all-build @@ -743,6 +932,7 @@ all-host: maybe-all-binutils all-host: maybe-all-bison all-host: maybe-all-byacc all-host: maybe-all-bzip2 +all-host: maybe-all-cgen all-host: maybe-all-dejagnu all-host: maybe-all-diff all-host: maybe-all-dosutils @@ -767,7 +957,19 @@ all-host: maybe-all-gmp @if mpfr-no-bootstrap all-host: maybe-all-mpfr @endif mpfr-no-bootstrap +@if mpc-no-bootstrap +all-host: maybe-all-mpc +@endif mpc-no-bootstrap +@if ppl-no-bootstrap +all-host: maybe-all-ppl +@endif ppl-no-bootstrap +@if cloog-no-bootstrap +all-host: maybe-all-cloog +@endif cloog-no-bootstrap all-host: maybe-all-gnuserv +@if gold-no-bootstrap +all-host: maybe-all-gold +@endif gold-no-bootstrap all-host: maybe-all-gprof all-host: maybe-all-gzip all-host: maybe-all-hello @@ -790,6 +992,7 @@ all-host: maybe-all-libgui @if libiberty-no-bootstrap all-host: maybe-all-libiberty @endif libiberty-no-bootstrap +all-host: maybe-all-libiconv all-host: maybe-all-libtool all-host: maybe-all-m4 all-host: maybe-all-make @@ -826,7 +1029,9 @@ all-host: maybe-all-gnattools .PHONY: all-target +@if target-libstdc++-v3-no-bootstrap all-target: maybe-all-target-libstdc++-v3 +@endif target-libstdc++-v3-no-bootstrap all-target: maybe-all-target-libmudflap all-target: maybe-all-target-libssp all-target: maybe-all-target-newlib @@ -876,6 +1081,7 @@ info-host: maybe-info-binutils info-host: maybe-info-bison info-host: maybe-info-byacc info-host: maybe-info-bzip2 +info-host: maybe-info-cgen info-host: maybe-info-dejagnu info-host: maybe-info-diff info-host: maybe-info-dosutils @@ -892,7 +1098,11 @@ info-host: maybe-info-gawk info-host: maybe-info-gettext info-host: maybe-info-gmp info-host: maybe-info-mpfr +info-host: maybe-info-mpc +info-host: maybe-info-ppl +info-host: maybe-info-cloog info-host: maybe-info-gnuserv +info-host: maybe-info-gold info-host: maybe-info-gprof info-host: maybe-info-gzip info-host: maybe-info-hello @@ -905,6 +1115,7 @@ info-host: maybe-info-libcpp info-host: maybe-info-libdecnumber info-host: maybe-info-libgui info-host: maybe-info-libiberty +info-host: maybe-info-libiconv info-host: maybe-info-libtool info-host: maybe-info-m4 info-host: maybe-info-make @@ -982,6 +1193,7 @@ dvi-host: maybe-dvi-binutils dvi-host: maybe-dvi-bison dvi-host: maybe-dvi-byacc dvi-host: maybe-dvi-bzip2 +dvi-host: maybe-dvi-cgen dvi-host: maybe-dvi-dejagnu dvi-host: maybe-dvi-diff dvi-host: maybe-dvi-dosutils @@ -998,7 +1210,11 @@ dvi-host: maybe-dvi-gawk dvi-host: maybe-dvi-gettext dvi-host: maybe-dvi-gmp dvi-host: maybe-dvi-mpfr +dvi-host: maybe-dvi-mpc +dvi-host: maybe-dvi-ppl +dvi-host: maybe-dvi-cloog dvi-host: maybe-dvi-gnuserv +dvi-host: maybe-dvi-gold dvi-host: maybe-dvi-gprof dvi-host: maybe-dvi-gzip dvi-host: maybe-dvi-hello @@ -1011,6 +1227,7 @@ dvi-host: maybe-dvi-libcpp dvi-host: maybe-dvi-libdecnumber dvi-host: maybe-dvi-libgui dvi-host: maybe-dvi-libiberty +dvi-host: maybe-dvi-libiconv dvi-host: maybe-dvi-libtool dvi-host: maybe-dvi-m4 dvi-host: maybe-dvi-make @@ -1088,6 +1305,7 @@ pdf-host: maybe-pdf-binutils pdf-host: maybe-pdf-bison pdf-host: maybe-pdf-byacc pdf-host: maybe-pdf-bzip2 +pdf-host: maybe-pdf-cgen pdf-host: maybe-pdf-dejagnu pdf-host: maybe-pdf-diff pdf-host: maybe-pdf-dosutils @@ -1104,7 +1322,11 @@ pdf-host: maybe-pdf-gawk pdf-host: maybe-pdf-gettext pdf-host: maybe-pdf-gmp pdf-host: maybe-pdf-mpfr +pdf-host: maybe-pdf-mpc +pdf-host: maybe-pdf-ppl +pdf-host: maybe-pdf-cloog pdf-host: maybe-pdf-gnuserv +pdf-host: maybe-pdf-gold pdf-host: maybe-pdf-gprof pdf-host: maybe-pdf-gzip pdf-host: maybe-pdf-hello @@ -1117,6 +1339,7 @@ pdf-host: maybe-pdf-libcpp pdf-host: maybe-pdf-libdecnumber pdf-host: maybe-pdf-libgui pdf-host: maybe-pdf-libiberty +pdf-host: maybe-pdf-libiconv pdf-host: maybe-pdf-libtool pdf-host: maybe-pdf-m4 pdf-host: maybe-pdf-make @@ -1194,6 +1417,7 @@ html-host: maybe-html-binutils html-host: maybe-html-bison html-host: maybe-html-byacc html-host: maybe-html-bzip2 +html-host: maybe-html-cgen html-host: maybe-html-dejagnu html-host: maybe-html-diff html-host: maybe-html-dosutils @@ -1210,7 +1434,11 @@ html-host: maybe-html-gawk html-host: maybe-html-gettext html-host: maybe-html-gmp html-host: maybe-html-mpfr +html-host: maybe-html-mpc +html-host: maybe-html-ppl +html-host: maybe-html-cloog html-host: maybe-html-gnuserv +html-host: maybe-html-gold html-host: maybe-html-gprof html-host: maybe-html-gzip html-host: maybe-html-hello @@ -1223,6 +1451,7 @@ html-host: maybe-html-libcpp html-host: maybe-html-libdecnumber html-host: maybe-html-libgui html-host: maybe-html-libiberty +html-host: maybe-html-libiconv html-host: maybe-html-libtool html-host: maybe-html-m4 html-host: maybe-html-make @@ -1300,6 +1529,7 @@ TAGS-host: maybe-TAGS-binutils TAGS-host: maybe-TAGS-bison TAGS-host: maybe-TAGS-byacc TAGS-host: maybe-TAGS-bzip2 +TAGS-host: maybe-TAGS-cgen TAGS-host: maybe-TAGS-dejagnu TAGS-host: maybe-TAGS-diff TAGS-host: maybe-TAGS-dosutils @@ -1316,7 +1546,11 @@ TAGS-host: maybe-TAGS-gawk TAGS-host: maybe-TAGS-gettext TAGS-host: maybe-TAGS-gmp TAGS-host: maybe-TAGS-mpfr +TAGS-host: maybe-TAGS-mpc +TAGS-host: maybe-TAGS-ppl +TAGS-host: maybe-TAGS-cloog TAGS-host: maybe-TAGS-gnuserv +TAGS-host: maybe-TAGS-gold TAGS-host: maybe-TAGS-gprof TAGS-host: maybe-TAGS-gzip TAGS-host: maybe-TAGS-hello @@ -1329,6 +1563,7 @@ TAGS-host: maybe-TAGS-libcpp TAGS-host: maybe-TAGS-libdecnumber TAGS-host: maybe-TAGS-libgui TAGS-host: maybe-TAGS-libiberty +TAGS-host: maybe-TAGS-libiconv TAGS-host: maybe-TAGS-libtool TAGS-host: maybe-TAGS-m4 TAGS-host: maybe-TAGS-make @@ -1406,6 +1641,7 @@ install-info-host: maybe-install-info-binutils install-info-host: maybe-install-info-bison install-info-host: maybe-install-info-byacc install-info-host: maybe-install-info-bzip2 +install-info-host: maybe-install-info-cgen install-info-host: maybe-install-info-dejagnu install-info-host: maybe-install-info-diff install-info-host: maybe-install-info-dosutils @@ -1422,7 +1658,11 @@ 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-mpc +install-info-host: maybe-install-info-ppl +install-info-host: maybe-install-info-cloog install-info-host: maybe-install-info-gnuserv +install-info-host: maybe-install-info-gold install-info-host: maybe-install-info-gprof install-info-host: maybe-install-info-gzip install-info-host: maybe-install-info-hello @@ -1435,6 +1675,7 @@ install-info-host: maybe-install-info-libcpp install-info-host: maybe-install-info-libdecnumber install-info-host: maybe-install-info-libgui install-info-host: maybe-install-info-libiberty +install-info-host: maybe-install-info-libiconv install-info-host: maybe-install-info-libtool install-info-host: maybe-install-info-m4 install-info-host: maybe-install-info-make @@ -1512,6 +1753,7 @@ 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-cgen install-pdf-host: maybe-install-pdf-dejagnu install-pdf-host: maybe-install-pdf-diff install-pdf-host: maybe-install-pdf-dosutils @@ -1528,7 +1770,11 @@ 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-mpc +install-pdf-host: maybe-install-pdf-ppl +install-pdf-host: maybe-install-pdf-cloog install-pdf-host: maybe-install-pdf-gnuserv +install-pdf-host: maybe-install-pdf-gold install-pdf-host: maybe-install-pdf-gprof install-pdf-host: maybe-install-pdf-gzip install-pdf-host: maybe-install-pdf-hello @@ -1541,6 +1787,7 @@ 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-libiconv install-pdf-host: maybe-install-pdf-libtool install-pdf-host: maybe-install-pdf-m4 install-pdf-host: maybe-install-pdf-make @@ -1618,6 +1865,7 @@ install-html-host: maybe-install-html-binutils install-html-host: maybe-install-html-bison install-html-host: maybe-install-html-byacc install-html-host: maybe-install-html-bzip2 +install-html-host: maybe-install-html-cgen install-html-host: maybe-install-html-dejagnu install-html-host: maybe-install-html-diff install-html-host: maybe-install-html-dosutils @@ -1634,7 +1882,11 @@ 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-mpc +install-html-host: maybe-install-html-ppl +install-html-host: maybe-install-html-cloog install-html-host: maybe-install-html-gnuserv +install-html-host: maybe-install-html-gold install-html-host: maybe-install-html-gprof install-html-host: maybe-install-html-gzip install-html-host: maybe-install-html-hello @@ -1647,6 +1899,7 @@ install-html-host: maybe-install-html-libcpp install-html-host: maybe-install-html-libdecnumber install-html-host: maybe-install-html-libgui install-html-host: maybe-install-html-libiberty +install-html-host: maybe-install-html-libiconv install-html-host: maybe-install-html-libtool install-html-host: maybe-install-html-m4 install-html-host: maybe-install-html-make @@ -1724,6 +1977,7 @@ installcheck-host: maybe-installcheck-binutils installcheck-host: maybe-installcheck-bison installcheck-host: maybe-installcheck-byacc installcheck-host: maybe-installcheck-bzip2 +installcheck-host: maybe-installcheck-cgen installcheck-host: maybe-installcheck-dejagnu installcheck-host: maybe-installcheck-diff installcheck-host: maybe-installcheck-dosutils @@ -1740,7 +1994,11 @@ installcheck-host: maybe-installcheck-gawk installcheck-host: maybe-installcheck-gettext installcheck-host: maybe-installcheck-gmp installcheck-host: maybe-installcheck-mpfr +installcheck-host: maybe-installcheck-mpc +installcheck-host: maybe-installcheck-ppl +installcheck-host: maybe-installcheck-cloog installcheck-host: maybe-installcheck-gnuserv +installcheck-host: maybe-installcheck-gold installcheck-host: maybe-installcheck-gprof installcheck-host: maybe-installcheck-gzip installcheck-host: maybe-installcheck-hello @@ -1753,6 +2011,7 @@ installcheck-host: maybe-installcheck-libcpp installcheck-host: maybe-installcheck-libdecnumber installcheck-host: maybe-installcheck-libgui installcheck-host: maybe-installcheck-libiberty +installcheck-host: maybe-installcheck-libiconv installcheck-host: maybe-installcheck-libtool installcheck-host: maybe-installcheck-m4 installcheck-host: maybe-installcheck-make @@ -1830,6 +2089,7 @@ mostlyclean-host: maybe-mostlyclean-binutils mostlyclean-host: maybe-mostlyclean-bison mostlyclean-host: maybe-mostlyclean-byacc mostlyclean-host: maybe-mostlyclean-bzip2 +mostlyclean-host: maybe-mostlyclean-cgen mostlyclean-host: maybe-mostlyclean-dejagnu mostlyclean-host: maybe-mostlyclean-diff mostlyclean-host: maybe-mostlyclean-dosutils @@ -1846,7 +2106,11 @@ mostlyclean-host: maybe-mostlyclean-gawk mostlyclean-host: maybe-mostlyclean-gettext mostlyclean-host: maybe-mostlyclean-gmp mostlyclean-host: maybe-mostlyclean-mpfr +mostlyclean-host: maybe-mostlyclean-mpc +mostlyclean-host: maybe-mostlyclean-ppl +mostlyclean-host: maybe-mostlyclean-cloog mostlyclean-host: maybe-mostlyclean-gnuserv +mostlyclean-host: maybe-mostlyclean-gold mostlyclean-host: maybe-mostlyclean-gprof mostlyclean-host: maybe-mostlyclean-gzip mostlyclean-host: maybe-mostlyclean-hello @@ -1859,6 +2123,7 @@ mostlyclean-host: maybe-mostlyclean-libcpp mostlyclean-host: maybe-mostlyclean-libdecnumber mostlyclean-host: maybe-mostlyclean-libgui mostlyclean-host: maybe-mostlyclean-libiberty +mostlyclean-host: maybe-mostlyclean-libiconv mostlyclean-host: maybe-mostlyclean-libtool mostlyclean-host: maybe-mostlyclean-m4 mostlyclean-host: maybe-mostlyclean-make @@ -1936,6 +2201,7 @@ clean-host: maybe-clean-binutils clean-host: maybe-clean-bison clean-host: maybe-clean-byacc clean-host: maybe-clean-bzip2 +clean-host: maybe-clean-cgen clean-host: maybe-clean-dejagnu clean-host: maybe-clean-diff clean-host: maybe-clean-dosutils @@ -1952,7 +2218,11 @@ clean-host: maybe-clean-gawk clean-host: maybe-clean-gettext clean-host: maybe-clean-gmp clean-host: maybe-clean-mpfr +clean-host: maybe-clean-mpc +clean-host: maybe-clean-ppl +clean-host: maybe-clean-cloog clean-host: maybe-clean-gnuserv +clean-host: maybe-clean-gold clean-host: maybe-clean-gprof clean-host: maybe-clean-gzip clean-host: maybe-clean-hello @@ -1965,6 +2235,7 @@ clean-host: maybe-clean-libcpp clean-host: maybe-clean-libdecnumber clean-host: maybe-clean-libgui clean-host: maybe-clean-libiberty +clean-host: maybe-clean-libiconv clean-host: maybe-clean-libtool clean-host: maybe-clean-m4 clean-host: maybe-clean-make @@ -2042,6 +2313,7 @@ distclean-host: maybe-distclean-binutils distclean-host: maybe-distclean-bison distclean-host: maybe-distclean-byacc distclean-host: maybe-distclean-bzip2 +distclean-host: maybe-distclean-cgen distclean-host: maybe-distclean-dejagnu distclean-host: maybe-distclean-diff distclean-host: maybe-distclean-dosutils @@ -2058,7 +2330,11 @@ distclean-host: maybe-distclean-gawk distclean-host: maybe-distclean-gettext distclean-host: maybe-distclean-gmp distclean-host: maybe-distclean-mpfr +distclean-host: maybe-distclean-mpc +distclean-host: maybe-distclean-ppl +distclean-host: maybe-distclean-cloog distclean-host: maybe-distclean-gnuserv +distclean-host: maybe-distclean-gold distclean-host: maybe-distclean-gprof distclean-host: maybe-distclean-gzip distclean-host: maybe-distclean-hello @@ -2071,6 +2347,7 @@ distclean-host: maybe-distclean-libcpp distclean-host: maybe-distclean-libdecnumber distclean-host: maybe-distclean-libgui distclean-host: maybe-distclean-libiberty +distclean-host: maybe-distclean-libiconv distclean-host: maybe-distclean-libtool distclean-host: maybe-distclean-m4 distclean-host: maybe-distclean-make @@ -2148,6 +2425,7 @@ maintainer-clean-host: maybe-maintainer-clean-binutils maintainer-clean-host: maybe-maintainer-clean-bison maintainer-clean-host: maybe-maintainer-clean-byacc maintainer-clean-host: maybe-maintainer-clean-bzip2 +maintainer-clean-host: maybe-maintainer-clean-cgen maintainer-clean-host: maybe-maintainer-clean-dejagnu maintainer-clean-host: maybe-maintainer-clean-diff maintainer-clean-host: maybe-maintainer-clean-dosutils @@ -2164,7 +2442,11 @@ 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-mpc +maintainer-clean-host: maybe-maintainer-clean-ppl +maintainer-clean-host: maybe-maintainer-clean-cloog maintainer-clean-host: maybe-maintainer-clean-gnuserv +maintainer-clean-host: maybe-maintainer-clean-gold maintainer-clean-host: maybe-maintainer-clean-gprof maintainer-clean-host: maybe-maintainer-clean-gzip maintainer-clean-host: maybe-maintainer-clean-hello @@ -2177,6 +2459,7 @@ maintainer-clean-host: maybe-maintainer-clean-libcpp maintainer-clean-host: maybe-maintainer-clean-libdecnumber maintainer-clean-host: maybe-maintainer-clean-libgui maintainer-clean-host: maybe-maintainer-clean-libiberty +maintainer-clean-host: maybe-maintainer-clean-libiconv maintainer-clean-host: maybe-maintainer-clean-libtool maintainer-clean-host: maybe-maintainer-clean-m4 maintainer-clean-host: maybe-maintainer-clean-make @@ -2308,6 +2591,7 @@ check-host: \ maybe-check-bison \ maybe-check-byacc \ maybe-check-bzip2 \ + maybe-check-cgen \ maybe-check-dejagnu \ maybe-check-diff \ maybe-check-dosutils \ @@ -2324,7 +2608,11 @@ check-host: \ maybe-check-gettext \ maybe-check-gmp \ maybe-check-mpfr \ + maybe-check-mpc \ + maybe-check-ppl \ + maybe-check-cloog \ maybe-check-gnuserv \ + maybe-check-gold \ maybe-check-gprof \ maybe-check-gzip \ maybe-check-hello \ @@ -2337,6 +2625,7 @@ check-host: \ maybe-check-libdecnumber \ maybe-check-libgui \ maybe-check-libiberty \ + maybe-check-libiconv \ maybe-check-libtool \ maybe-check-m4 \ maybe-check-make \ @@ -2441,6 +2730,7 @@ install-host-nogcc: \ maybe-install-bison \ maybe-install-byacc \ maybe-install-bzip2 \ + maybe-install-cgen \ maybe-install-dejagnu \ maybe-install-diff \ maybe-install-dosutils \ @@ -2456,7 +2746,11 @@ install-host-nogcc: \ maybe-install-gettext \ maybe-install-gmp \ maybe-install-mpfr \ + maybe-install-mpc \ + maybe-install-ppl \ + maybe-install-cloog \ maybe-install-gnuserv \ + maybe-install-gold \ maybe-install-gprof \ maybe-install-gzip \ maybe-install-hello \ @@ -2469,6 +2763,7 @@ install-host-nogcc: \ maybe-install-libdecnumber \ maybe-install-libgui \ maybe-install-libiberty \ + maybe-install-libiconv \ maybe-install-libtool \ maybe-install-m4 \ maybe-install-make \ @@ -2513,6 +2808,7 @@ install-host: \ maybe-install-bison \ maybe-install-byacc \ maybe-install-bzip2 \ + maybe-install-cgen \ maybe-install-dejagnu \ maybe-install-diff \ maybe-install-dosutils \ @@ -2529,7 +2825,11 @@ install-host: \ maybe-install-gettext \ maybe-install-gmp \ maybe-install-mpfr \ + maybe-install-mpc \ + maybe-install-ppl \ + maybe-install-cloog \ maybe-install-gnuserv \ + maybe-install-gold \ maybe-install-gprof \ maybe-install-gzip \ maybe-install-hello \ @@ -2542,6 +2842,7 @@ install-host: \ maybe-install-libdecnumber \ maybe-install-libgui \ maybe-install-libiberty \ + maybe-install-libiconv \ maybe-install-libtool \ maybe-install-m4 \ maybe-install-make \ @@ -2710,7 +3011,8 @@ all-build-libiberty: configure-build-libiberty s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/libiberty && \ - $(MAKE) $(TARGET-build-libiberty)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-libiberty)) @endif build-libiberty @@ -2765,7 +3067,8 @@ all-build-bison: configure-build-bison s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/bison && \ - $(MAKE) $(TARGET-build-bison)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-bison)) @endif build-bison @@ -2820,7 +3123,8 @@ all-build-byacc: configure-build-byacc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/byacc && \ - $(MAKE) $(TARGET-build-byacc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-byacc)) @endif build-byacc @@ -2875,7 +3179,8 @@ all-build-flex: configure-build-flex s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/flex && \ - $(MAKE) $(TARGET-build-flex)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-flex)) @endif build-flex @@ -2930,7 +3235,8 @@ all-build-m4: configure-build-m4 s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/m4 && \ - $(MAKE) $(TARGET-build-m4)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-m4)) @endif build-m4 @@ -2985,7 +3291,8 @@ all-build-texinfo: configure-build-texinfo s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/texinfo && \ - $(MAKE) $(TARGET-build-texinfo)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-texinfo)) @endif build-texinfo @@ -3040,7 +3347,8 @@ all-build-fixincludes: configure-build-fixincludes s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(BUILD_EXPORTS) \ (cd $(BUILD_SUBDIR)/fixincludes && \ - $(MAKE) $(TARGET-build-fixincludes)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_BUILD_FLAGS) \ + $(TARGET-build-fixincludes)) @endif build-fixincludes @@ -3099,7 +3407,8 @@ all-ash: configure-ash s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/ash && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-ash)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-ash)) @endif ash @@ -3523,7 +3832,8 @@ all-autoconf: configure-autoconf s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/autoconf && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-autoconf)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-autoconf)) @endif autoconf @@ -3947,7 +4257,8 @@ all-automake: configure-automake s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/automake && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-automake)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-automake)) @endif automake @@ -4371,7 +4682,8 @@ all-bash: configure-bash s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/bash && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-bash)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-bash)) @endif bash @@ -4787,10 +5099,12 @@ configure-stage1-bfd: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/bfd ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \ cd $(HOST_SUBDIR)/bfd || exit 1; \ @@ -4804,8 +5118,7 @@ configure-stage1-bfd: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif bfd-bootstrap .PHONY: configure-stage2-bfd maybe-configure-stage2-bfd @@ -4817,11 +5130,13 @@ configure-stage2-bfd: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/bfd ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \ cd $(HOST_SUBDIR)/bfd || exit 1; \ @@ -4836,7 +5151,7 @@ configure-stage2-bfd: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif bfd-bootstrap .PHONY: configure-stage3-bfd maybe-configure-stage3-bfd @@ -4848,11 +5163,13 @@ configure-stage3-bfd: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/bfd ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \ cd $(HOST_SUBDIR)/bfd || exit 1; \ @@ -4867,7 +5184,7 @@ configure-stage3-bfd: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif bfd-bootstrap .PHONY: configure-stage4-bfd maybe-configure-stage4-bfd @@ -4879,11 +5196,13 @@ configure-stage4-bfd: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/bfd/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/bfd ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \ cd $(HOST_SUBDIR)/bfd || exit 1; \ @@ -4898,7 +5217,7 @@ configure-stage4-bfd: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif bfd-bootstrap .PHONY: configure-stageprofile-bfd maybe-configure-stageprofile-bfd @@ -4910,11 +5229,13 @@ configure-stageprofile-bfd: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/bfd ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \ cd $(HOST_SUBDIR)/bfd || exit 1; \ @@ -4929,7 +5250,7 @@ configure-stageprofile-bfd: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif bfd-bootstrap .PHONY: configure-stagefeedback-bfd maybe-configure-stagefeedback-bfd @@ -4941,11 +5262,13 @@ configure-stagefeedback-bfd: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/bfd ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/bfd ; \ cd $(HOST_SUBDIR)/bfd || exit 1; \ @@ -4960,7 +5283,7 @@ configure-stagefeedback-bfd: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif bfd-bootstrap @@ -4980,7 +5303,8 @@ all-bfd: configure-bfd s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-bfd)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-bfd)) @endif bfd @@ -4997,10 +5321,18 @@ all-stage1-bfd: configure-stage1-bfd @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-bfd) maybe-clean-stage1-bfd: clean-stage1-bfd @@ -5013,7 +5345,7 @@ clean-stage1-bfd: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif bfd-bootstrap @@ -5030,11 +5362,19 @@ all-stage2-bfd: configure-stage2-bfd @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-bfd) maybe-clean-stage2-bfd: clean-stage2-bfd @@ -5047,7 +5387,7 @@ clean-stage2-bfd: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif bfd-bootstrap @@ -5065,11 +5405,19 @@ all-stage3-bfd: configure-stage3-bfd @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-bfd) maybe-clean-stage3-bfd: clean-stage3-bfd @@ -5082,7 +5430,7 @@ clean-stage3-bfd: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif bfd-bootstrap @@ -5100,11 +5448,19 @@ all-stage4-bfd: configure-stage4-bfd @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-bfd) maybe-clean-stage4-bfd: clean-stage4-bfd @@ -5117,7 +5473,7 @@ clean-stage4-bfd: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif bfd-bootstrap @@ -5135,11 +5491,19 @@ all-stageprofile-bfd: configure-stageprofile-bfd @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-bfd) maybe-clean-stageprofile-bfd: clean-stageprofile-bfd @@ -5152,7 +5516,7 @@ clean-stageprofile-bfd: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif bfd-bootstrap @@ -5170,11 +5534,19 @@ all-stagefeedback-bfd: configure-stagefeedback-bfd @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-bfd) maybe-clean-stagefeedback-bfd: clean-stagefeedback-bfd @@ -5187,7 +5559,7 @@ clean-stagefeedback-bfd: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/bfd && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif bfd-bootstrap @@ -5593,10 +5965,12 @@ configure-stage1-opcodes: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/opcodes ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \ cd $(HOST_SUBDIR)/opcodes || exit 1; \ @@ -5610,8 +5984,7 @@ configure-stage1-opcodes: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif opcodes-bootstrap .PHONY: configure-stage2-opcodes maybe-configure-stage2-opcodes @@ -5623,11 +5996,13 @@ configure-stage2-opcodes: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/opcodes ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \ cd $(HOST_SUBDIR)/opcodes || exit 1; \ @@ -5642,7 +6017,7 @@ configure-stage2-opcodes: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif opcodes-bootstrap .PHONY: configure-stage3-opcodes maybe-configure-stage3-opcodes @@ -5654,11 +6029,13 @@ configure-stage3-opcodes: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/opcodes ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \ cd $(HOST_SUBDIR)/opcodes || exit 1; \ @@ -5673,7 +6050,7 @@ configure-stage3-opcodes: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif opcodes-bootstrap .PHONY: configure-stage4-opcodes maybe-configure-stage4-opcodes @@ -5685,11 +6062,13 @@ configure-stage4-opcodes: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/opcodes/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/opcodes ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \ cd $(HOST_SUBDIR)/opcodes || exit 1; \ @@ -5704,7 +6083,7 @@ configure-stage4-opcodes: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif opcodes-bootstrap .PHONY: configure-stageprofile-opcodes maybe-configure-stageprofile-opcodes @@ -5716,11 +6095,13 @@ configure-stageprofile-opcodes: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/opcodes ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \ cd $(HOST_SUBDIR)/opcodes || exit 1; \ @@ -5735,7 +6116,7 @@ configure-stageprofile-opcodes: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif opcodes-bootstrap .PHONY: configure-stagefeedback-opcodes maybe-configure-stagefeedback-opcodes @@ -5747,11 +6128,13 @@ configure-stagefeedback-opcodes: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/opcodes ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/opcodes ; \ cd $(HOST_SUBDIR)/opcodes || exit 1; \ @@ -5766,7 +6149,7 @@ configure-stagefeedback-opcodes: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif opcodes-bootstrap @@ -5786,7 +6169,8 @@ all-opcodes: configure-opcodes s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-opcodes)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-opcodes)) @endif opcodes @@ -5803,10 +6187,18 @@ all-stage1-opcodes: configure-stage1-opcodes @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-opcodes) maybe-clean-stage1-opcodes: clean-stage1-opcodes @@ -5819,7 +6211,7 @@ clean-stage1-opcodes: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif opcodes-bootstrap @@ -5836,11 +6228,19 @@ all-stage2-opcodes: configure-stage2-opcodes @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-opcodes) maybe-clean-stage2-opcodes: clean-stage2-opcodes @@ -5853,7 +6253,7 @@ clean-stage2-opcodes: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif opcodes-bootstrap @@ -5871,11 +6271,19 @@ all-stage3-opcodes: configure-stage3-opcodes @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-opcodes) maybe-clean-stage3-opcodes: clean-stage3-opcodes @@ -5888,7 +6296,7 @@ clean-stage3-opcodes: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif opcodes-bootstrap @@ -5906,11 +6314,19 @@ all-stage4-opcodes: configure-stage4-opcodes @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-opcodes) maybe-clean-stage4-opcodes: clean-stage4-opcodes @@ -5923,7 +6339,7 @@ clean-stage4-opcodes: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif opcodes-bootstrap @@ -5941,11 +6357,19 @@ all-stageprofile-opcodes: configure-stageprofile-opcodes @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-opcodes) maybe-clean-stageprofile-opcodes: clean-stageprofile-opcodes @@ -5958,7 +6382,7 @@ clean-stageprofile-opcodes: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif opcodes-bootstrap @@ -5976,11 +6400,19 @@ all-stagefeedback-opcodes: configure-stagefeedback-opcodes @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-opcodes) maybe-clean-stagefeedback-opcodes: clean-stagefeedback-opcodes @@ -5993,7 +6425,7 @@ clean-stagefeedback-opcodes: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/opcodes && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif opcodes-bootstrap @@ -6399,10 +6831,12 @@ configure-stage1-binutils: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/binutils ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \ cd $(HOST_SUBDIR)/binutils || exit 1; \ @@ -6416,8 +6850,7 @@ configure-stage1-binutils: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif binutils-bootstrap .PHONY: configure-stage2-binutils maybe-configure-stage2-binutils @@ -6429,11 +6862,13 @@ configure-stage2-binutils: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/binutils ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \ cd $(HOST_SUBDIR)/binutils || exit 1; \ @@ -6448,7 +6883,7 @@ configure-stage2-binutils: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif binutils-bootstrap .PHONY: configure-stage3-binutils maybe-configure-stage3-binutils @@ -6460,11 +6895,13 @@ configure-stage3-binutils: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/binutils ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \ cd $(HOST_SUBDIR)/binutils || exit 1; \ @@ -6479,7 +6916,7 @@ configure-stage3-binutils: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif binutils-bootstrap .PHONY: configure-stage4-binutils maybe-configure-stage4-binutils @@ -6491,11 +6928,13 @@ configure-stage4-binutils: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/binutils/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/binutils ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \ cd $(HOST_SUBDIR)/binutils || exit 1; \ @@ -6510,7 +6949,7 @@ configure-stage4-binutils: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif binutils-bootstrap .PHONY: configure-stageprofile-binutils maybe-configure-stageprofile-binutils @@ -6522,11 +6961,13 @@ configure-stageprofile-binutils: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/binutils ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \ cd $(HOST_SUBDIR)/binutils || exit 1; \ @@ -6541,7 +6982,7 @@ configure-stageprofile-binutils: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif binutils-bootstrap .PHONY: configure-stagefeedback-binutils maybe-configure-stagefeedback-binutils @@ -6553,11 +6994,13 @@ configure-stagefeedback-binutils: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/binutils ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/binutils ; \ cd $(HOST_SUBDIR)/binutils || exit 1; \ @@ -6572,7 +7015,7 @@ configure-stagefeedback-binutils: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif binutils-bootstrap @@ -6592,7 +7035,8 @@ all-binutils: configure-binutils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-binutils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-binutils)) @endif binutils @@ -6609,10 +7053,18 @@ all-stage1-binutils: configure-stage1-binutils @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-binutils) maybe-clean-stage1-binutils: clean-stage1-binutils @@ -6625,7 +7077,7 @@ clean-stage1-binutils: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif binutils-bootstrap @@ -6642,11 +7094,19 @@ all-stage2-binutils: configure-stage2-binutils @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-binutils) maybe-clean-stage2-binutils: clean-stage2-binutils @@ -6659,7 +7119,7 @@ clean-stage2-binutils: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif binutils-bootstrap @@ -6677,11 +7137,19 @@ all-stage3-binutils: configure-stage3-binutils @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-binutils) maybe-clean-stage3-binutils: clean-stage3-binutils @@ -6694,7 +7162,7 @@ clean-stage3-binutils: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif binutils-bootstrap @@ -6712,11 +7180,19 @@ all-stage4-binutils: configure-stage4-binutils @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-binutils) maybe-clean-stage4-binutils: clean-stage4-binutils @@ -6729,7 +7205,7 @@ clean-stage4-binutils: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif binutils-bootstrap @@ -6747,11 +7223,19 @@ all-stageprofile-binutils: configure-stageprofile-binutils @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-binutils) maybe-clean-stageprofile-binutils: clean-stageprofile-binutils @@ -6764,7 +7248,7 @@ clean-stageprofile-binutils: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif binutils-bootstrap @@ -6782,11 +7266,19 @@ all-stagefeedback-binutils: configure-stagefeedback-binutils @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-binutils) maybe-clean-stagefeedback-binutils: clean-stagefeedback-binutils @@ -6799,7 +7291,7 @@ clean-stagefeedback-binutils: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/binutils && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif binutils-bootstrap @@ -7213,7 +7705,8 @@ all-bison: configure-bison s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/bison && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-bison)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-bison)) @endif bison @@ -7640,7 +8133,8 @@ all-byacc: configure-byacc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/byacc && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-byacc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-byacc)) @endif byacc @@ -8067,7 +8561,8 @@ all-bzip2: configure-bzip2 s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/bzip2 && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-bzip2)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-bzip2)) @endif bzip2 @@ -8444,6 +8939,431 @@ maintainer-clean-bzip2: +.PHONY: configure-cgen maybe-configure-cgen +maybe-configure-cgen: +@if gcc-bootstrap +configure-cgen: stage_current +@endif gcc-bootstrap +@if cgen +maybe-configure-cgen: configure-cgen +configure-cgen: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/cgen/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cgen ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/cgen; \ + cd "$(HOST_SUBDIR)/cgen" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cgen/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cgen"; \ + libsrcdir="$$s/cgen"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + || exit 1 +@endif cgen + + + + + +.PHONY: all-cgen maybe-all-cgen +maybe-all-cgen: +@if gcc-bootstrap +all-cgen: stage_current +@endif gcc-bootstrap +@if cgen +TARGET-cgen=all +maybe-all-cgen: all-cgen +all-cgen: configure-cgen + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-cgen)) +@endif cgen + + + + +.PHONY: check-cgen maybe-check-cgen +maybe-check-cgen: +@if cgen +maybe-check-cgen: check-cgen + +check-cgen: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif cgen + +.PHONY: install-cgen maybe-install-cgen +maybe-install-cgen: +@if cgen +maybe-install-cgen: install-cgen + +install-cgen: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(FLAGS_TO_PASS) install) + +@endif cgen + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-cgen info-cgen +maybe-info-cgen: +@if cgen +maybe-info-cgen: info-cgen + +info-cgen: \ + configure-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-dvi-cgen dvi-cgen +maybe-dvi-cgen: +@if cgen +maybe-dvi-cgen: dvi-cgen + +dvi-cgen: \ + configure-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-pdf-cgen pdf-cgen +maybe-pdf-cgen: +@if cgen +maybe-pdf-cgen: pdf-cgen + +pdf-cgen: \ + configure-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-html-cgen html-cgen +maybe-html-cgen: +@if cgen +maybe-html-cgen: html-cgen + +html-cgen: \ + configure-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-TAGS-cgen TAGS-cgen +maybe-TAGS-cgen: +@if cgen +maybe-TAGS-cgen: TAGS-cgen + +TAGS-cgen: \ + configure-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-install-info-cgen install-info-cgen +maybe-install-info-cgen: +@if cgen +maybe-install-info-cgen: install-info-cgen + +install-info-cgen: \ + configure-cgen \ + info-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-install-pdf-cgen install-pdf-cgen +maybe-install-pdf-cgen: +@if cgen +maybe-install-pdf-cgen: install-pdf-cgen + +install-pdf-cgen: \ + configure-cgen \ + pdf-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-install-html-cgen install-html-cgen +maybe-install-html-cgen: +@if cgen +maybe-install-html-cgen: install-html-cgen + +install-html-cgen: \ + configure-cgen \ + html-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-installcheck-cgen installcheck-cgen +maybe-installcheck-cgen: +@if cgen +maybe-installcheck-cgen: installcheck-cgen + +installcheck-cgen: \ + configure-cgen + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-mostlyclean-cgen mostlyclean-cgen +maybe-mostlyclean-cgen: +@if cgen +maybe-mostlyclean-cgen: mostlyclean-cgen + +mostlyclean-cgen: + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-clean-cgen clean-cgen +maybe-clean-cgen: +@if cgen +maybe-clean-cgen: clean-cgen + +clean-cgen: + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-distclean-cgen distclean-cgen +maybe-distclean-cgen: +@if cgen +maybe-distclean-cgen: distclean-cgen + +distclean-cgen: + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif cgen + +.PHONY: maybe-maintainer-clean-cgen maintainer-clean-cgen +maybe-maintainer-clean-cgen: +@if cgen +maybe-maintainer-clean-cgen: maintainer-clean-cgen + +maintainer-clean-cgen: + @: $(MAKE); $(unstage) + @[ -f ./cgen/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 cgen" ; \ + (cd $(HOST_SUBDIR)/cgen && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif cgen + + + .PHONY: configure-dejagnu maybe-configure-dejagnu maybe-configure-dejagnu: @if gcc-bootstrap @@ -8491,7 +9411,8 @@ all-dejagnu: configure-dejagnu s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/dejagnu && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-dejagnu)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-dejagnu)) @endif dejagnu @@ -8915,7 +9836,8 @@ all-diff: configure-diff s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/diff && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-diff)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-diff)) @endif diff @@ -9339,7 +10261,8 @@ all-dosutils: configure-dosutils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/dosutils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-dosutils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-dosutils)) @endif dosutils @@ -9757,7 +10680,8 @@ all-etc: configure-etc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/etc && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-etc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-etc)) @endif etc @@ -10181,7 +11105,8 @@ all-fastjar: configure-fastjar s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/fastjar && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-fastjar)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-fastjar)) @endif fastjar @@ -10608,7 +11533,8 @@ all-fileutils: configure-fileutils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/fileutils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-fileutils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-fileutils)) @endif fileutils @@ -11032,7 +11958,8 @@ all-findutils: configure-findutils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/findutils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-findutils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-findutils)) @endif findutils @@ -11456,7 +12383,8 @@ all-find: configure-find s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/find && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-find)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-find)) @endif find @@ -11880,7 +12808,8 @@ all-fixincludes: configure-fixincludes s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/fixincludes && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-fixincludes)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-fixincludes)) @endif fixincludes @@ -12288,7 +13217,8 @@ all-flex: configure-flex s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/flex && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-flex)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-flex)) @endif flex @@ -12707,10 +13637,12 @@ configure-stage1-gas: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/gas ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \ cd $(HOST_SUBDIR)/gas || exit 1; \ @@ -12724,8 +13656,7 @@ configure-stage1-gas: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif gas-bootstrap .PHONY: configure-stage2-gas maybe-configure-stage2-gas @@ -12737,11 +13668,13 @@ configure-stage2-gas: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/gas ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \ cd $(HOST_SUBDIR)/gas || exit 1; \ @@ -12756,7 +13689,7 @@ configure-stage2-gas: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif gas-bootstrap .PHONY: configure-stage3-gas maybe-configure-stage3-gas @@ -12768,11 +13701,13 @@ configure-stage3-gas: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/gas ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \ cd $(HOST_SUBDIR)/gas || exit 1; \ @@ -12787,7 +13722,7 @@ configure-stage3-gas: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif gas-bootstrap .PHONY: configure-stage4-gas maybe-configure-stage4-gas @@ -12799,11 +13734,13 @@ configure-stage4-gas: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gas/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/gas ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \ cd $(HOST_SUBDIR)/gas || exit 1; \ @@ -12818,7 +13755,7 @@ configure-stage4-gas: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif gas-bootstrap .PHONY: configure-stageprofile-gas maybe-configure-stageprofile-gas @@ -12830,11 +13767,13 @@ configure-stageprofile-gas: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/gas ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \ cd $(HOST_SUBDIR)/gas || exit 1; \ @@ -12849,7 +13788,7 @@ configure-stageprofile-gas: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif gas-bootstrap .PHONY: configure-stagefeedback-gas maybe-configure-stagefeedback-gas @@ -12861,11 +13800,13 @@ configure-stagefeedback-gas: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/gas ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gas ; \ cd $(HOST_SUBDIR)/gas || exit 1; \ @@ -12880,7 +13821,7 @@ configure-stagefeedback-gas: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif gas-bootstrap @@ -12900,7 +13841,8 @@ all-gas: configure-gas s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gas)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gas)) @endif gas @@ -12917,10 +13859,18 @@ all-stage1-gas: configure-stage1-gas @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-gas) maybe-clean-stage1-gas: clean-stage1-gas @@ -12933,7 +13883,7 @@ clean-stage1-gas: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif gas-bootstrap @@ -12950,11 +13900,19 @@ all-stage2-gas: configure-stage2-gas @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-gas) maybe-clean-stage2-gas: clean-stage2-gas @@ -12967,7 +13925,7 @@ clean-stage2-gas: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gas-bootstrap @@ -12985,11 +13943,19 @@ all-stage3-gas: configure-stage3-gas @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-gas) maybe-clean-stage3-gas: clean-stage3-gas @@ -13002,7 +13968,7 @@ clean-stage3-gas: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gas-bootstrap @@ -13020,11 +13986,19 @@ all-stage4-gas: configure-stage4-gas @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-gas) maybe-clean-stage4-gas: clean-stage4-gas @@ -13037,7 +14011,7 @@ clean-stage4-gas: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gas-bootstrap @@ -13055,11 +14029,19 @@ all-stageprofile-gas: configure-stageprofile-gas @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-gas) maybe-clean-stageprofile-gas: clean-stageprofile-gas @@ -13072,7 +14054,7 @@ clean-stageprofile-gas: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gas-bootstrap @@ -13090,11 +14072,19 @@ all-stagefeedback-gas: configure-stagefeedback-gas @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-gas) maybe-clean-stagefeedback-gas: clean-stagefeedback-gas @@ -13107,7 +14097,7 @@ clean-stagefeedback-gas: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/gas && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gas-bootstrap @@ -13513,10 +14503,12 @@ configure-stage1-gcc: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/gcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \ cd $(HOST_SUBDIR)/gcc || exit 1; \ @@ -13530,8 +14522,7 @@ configure-stage1-gcc: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif gcc-bootstrap .PHONY: configure-stage2-gcc maybe-configure-stage2-gcc @@ -13543,11 +14534,13 @@ configure-stage2-gcc: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/gcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \ cd $(HOST_SUBDIR)/gcc || exit 1; \ @@ -13562,7 +14555,7 @@ configure-stage2-gcc: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif gcc-bootstrap .PHONY: configure-stage3-gcc maybe-configure-stage3-gcc @@ -13574,11 +14567,13 @@ configure-stage3-gcc: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/gcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \ cd $(HOST_SUBDIR)/gcc || exit 1; \ @@ -13593,7 +14588,7 @@ configure-stage3-gcc: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif gcc-bootstrap .PHONY: configure-stage4-gcc maybe-configure-stage4-gcc @@ -13605,11 +14600,13 @@ configure-stage4-gcc: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gcc/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/gcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \ cd $(HOST_SUBDIR)/gcc || exit 1; \ @@ -13624,7 +14621,7 @@ configure-stage4-gcc: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif gcc-bootstrap .PHONY: configure-stageprofile-gcc maybe-configure-stageprofile-gcc @@ -13636,11 +14633,13 @@ configure-stageprofile-gcc: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/gcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \ cd $(HOST_SUBDIR)/gcc || exit 1; \ @@ -13655,7 +14654,7 @@ configure-stageprofile-gcc: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif gcc-bootstrap .PHONY: configure-stagefeedback-gcc maybe-configure-stagefeedback-gcc @@ -13667,11 +14666,13 @@ configure-stagefeedback-gcc: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/gcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gcc ; \ cd $(HOST_SUBDIR)/gcc || exit 1; \ @@ -13686,7 +14687,7 @@ configure-stagefeedback-gcc: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif gcc-bootstrap @@ -13706,7 +14707,8 @@ all-gcc: configure-gcc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) $(TARGET-gcc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS) \ + $(TARGET-gcc)) @endif gcc @@ -13723,10 +14725,18 @@ all-stage1-gcc: configure-stage1-gcc @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" $(EXTRA_GCC_FLAGS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-gcc) maybe-clean-stage1-gcc: clean-stage1-gcc @@ -13739,7 +14749,7 @@ clean-stage1-gcc: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(EXTRA_GCC_FLAGS) clean @endif gcc-bootstrap @@ -13756,11 +14766,19 @@ all-stage2-gcc: configure-stage2-gcc @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-gcc) maybe-clean-stage2-gcc: clean-stage2-gcc @@ -13773,7 +14791,7 @@ clean-stage2-gcc: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ $(EXTRA_GCC_FLAGS) clean @endif gcc-bootstrap @@ -13791,11 +14809,19 @@ all-stage3-gcc: configure-stage3-gcc @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-gcc) maybe-clean-stage3-gcc: clean-stage3-gcc @@ -13808,7 +14834,7 @@ clean-stage3-gcc: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ $(EXTRA_GCC_FLAGS) clean @endif gcc-bootstrap @@ -13826,11 +14852,19 @@ all-stage4-gcc: configure-stage4-gcc @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-gcc) maybe-clean-stage4-gcc: clean-stage4-gcc @@ -13843,7 +14877,7 @@ clean-stage4-gcc: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ $(EXTRA_GCC_FLAGS) clean @endif gcc-bootstrap @@ -13861,11 +14895,19 @@ all-stageprofile-gcc: configure-stageprofile-gcc @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-gcc) maybe-clean-stageprofile-gcc: clean-stageprofile-gcc @@ -13878,7 +14920,7 @@ clean-stageprofile-gcc: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ $(EXTRA_GCC_FLAGS) clean @endif gcc-bootstrap @@ -13896,11 +14938,19 @@ all-stagefeedback-gcc: configure-stagefeedback-gcc @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) $(EXTRA_GCC_FLAGS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-gcc) maybe-clean-stagefeedback-gcc: clean-stagefeedback-gcc @@ -13913,7 +14963,7 @@ clean-stagefeedback-gcc: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/gcc && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ $(EXTRA_GCC_FLAGS) clean @endif gcc-bootstrap @@ -14327,7 +15377,8 @@ all-gawk: configure-gawk s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gawk && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gawk)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gawk)) @endif gawk @@ -14751,7 +15802,8 @@ all-gettext: configure-gettext s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gettext && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gettext)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gettext)) @endif gettext @@ -15167,10 +16219,12 @@ configure-stage1-gmp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/gmp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \ cd $(HOST_SUBDIR)/gmp || exit 1; \ @@ -15184,8 +16238,8 @@ configure-stage1-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 + $(STAGE1_CONFIGURE_FLAGS) \ + --disable-shared @endif gmp-bootstrap .PHONY: configure-stage2-gmp maybe-configure-stage2-gmp @@ -15197,11 +16251,13 @@ configure-stage2-gmp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/gmp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \ cd $(HOST_SUBDIR)/gmp || exit 1; \ @@ -15216,7 +16272,8 @@ configure-stage2-gmp: $(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 + $(STAGE2_CONFIGURE_FLAGS) \ + --disable-shared @endif gmp-bootstrap .PHONY: configure-stage3-gmp maybe-configure-stage3-gmp @@ -15228,11 +16285,13 @@ configure-stage3-gmp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/gmp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \ cd $(HOST_SUBDIR)/gmp || exit 1; \ @@ -15247,7 +16306,8 @@ configure-stage3-gmp: $(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 + $(STAGE3_CONFIGURE_FLAGS) \ + --disable-shared @endif gmp-bootstrap .PHONY: configure-stage4-gmp maybe-configure-stage4-gmp @@ -15259,11 +16319,13 @@ configure-stage4-gmp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/gmp/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/gmp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \ cd $(HOST_SUBDIR)/gmp || exit 1; \ @@ -15278,7 +16340,8 @@ configure-stage4-gmp: $(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 + $(STAGE4_CONFIGURE_FLAGS) \ + --disable-shared @endif gmp-bootstrap .PHONY: configure-stageprofile-gmp maybe-configure-stageprofile-gmp @@ -15290,11 +16353,13 @@ configure-stageprofile-gmp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/gmp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \ cd $(HOST_SUBDIR)/gmp || exit 1; \ @@ -15309,7 +16374,8 @@ configure-stageprofile-gmp: $(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 + $(STAGEprofile_CONFIGURE_FLAGS) \ + --disable-shared @endif gmp-bootstrap .PHONY: configure-stagefeedback-gmp maybe-configure-stagefeedback-gmp @@ -15321,11 +16387,13 @@ configure-stagefeedback-gmp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/gmp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gmp ; \ cd $(HOST_SUBDIR)/gmp || exit 1; \ @@ -15340,7 +16408,8 @@ configure-stagefeedback-gmp: $(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 + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --disable-shared @endif gmp-bootstrap @@ -15360,7 +16429,8 @@ all-gmp: configure-gmp s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gmp)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gmp)) @endif gmp @@ -15377,10 +16447,18 @@ all-stage1-gmp: configure-stage1-gmp @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-gmp) maybe-clean-stage1-gmp: clean-stage1-gmp @@ -15393,7 +16471,7 @@ clean-stage1-gmp: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif gmp-bootstrap @@ -15410,11 +16488,19 @@ all-stage2-gmp: configure-stage2-gmp @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-gmp) maybe-clean-stage2-gmp: clean-stage2-gmp @@ -15427,7 +16513,7 @@ clean-stage2-gmp: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gmp-bootstrap @@ -15445,11 +16531,19 @@ all-stage3-gmp: configure-stage3-gmp @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-gmp) maybe-clean-stage3-gmp: clean-stage3-gmp @@ -15462,7 +16556,7 @@ clean-stage3-gmp: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gmp-bootstrap @@ -15480,11 +16574,19 @@ all-stage4-gmp: configure-stage4-gmp @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-gmp) maybe-clean-stage4-gmp: clean-stage4-gmp @@ -15497,7 +16599,7 @@ clean-stage4-gmp: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gmp-bootstrap @@ -15515,11 +16617,19 @@ all-stageprofile-gmp: configure-stageprofile-gmp @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(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) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-gmp) maybe-clean-stageprofile-gmp: clean-stageprofile-gmp @@ -15532,7 +16642,7 @@ clean-stageprofile-gmp: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gmp-bootstrap @@ -15550,11 +16660,19 @@ all-stagefeedback-gmp: configure-stagefeedback-gmp @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(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) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-gmp) maybe-clean-stagefeedback-gmp: clean-stagefeedback-gmp @@ -15567,7 +16685,7 @@ clean-stagefeedback-gmp: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/gmp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif gmp-bootstrap @@ -15952,7 +17070,7 @@ configure-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 \ + --target=none-${host_vendor}-${host_os} $${srcdiroption} --disable-shared @extra_mpfr_configure_flags@ \ || exit 1 @endif mpfr @@ -15967,10 +17085,12 @@ configure-stage1-mpfr: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/mpfr ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \ cd $(HOST_SUBDIR)/mpfr || exit 1; \ @@ -15984,8 +17104,8 @@ configure-stage1-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 + $(STAGE1_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpfr_configure_flags@ @endif mpfr-bootstrap .PHONY: configure-stage2-mpfr maybe-configure-stage2-mpfr @@ -15997,11 +17117,13 @@ configure-stage2-mpfr: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/mpfr ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \ cd $(HOST_SUBDIR)/mpfr || exit 1; \ @@ -16016,7 +17138,8 @@ configure-stage2-mpfr: $(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 + $(STAGE2_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpfr_configure_flags@ @endif mpfr-bootstrap .PHONY: configure-stage3-mpfr maybe-configure-stage3-mpfr @@ -16028,11 +17151,13 @@ configure-stage3-mpfr: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/mpfr ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \ cd $(HOST_SUBDIR)/mpfr || exit 1; \ @@ -16047,7 +17172,8 @@ configure-stage3-mpfr: $(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 + $(STAGE3_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpfr_configure_flags@ @endif mpfr-bootstrap .PHONY: configure-stage4-mpfr maybe-configure-stage4-mpfr @@ -16059,11 +17185,13 @@ configure-stage4-mpfr: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/mpfr/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/mpfr ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \ cd $(HOST_SUBDIR)/mpfr || exit 1; \ @@ -16078,7 +17206,8 @@ configure-stage4-mpfr: $(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 + $(STAGE4_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpfr_configure_flags@ @endif mpfr-bootstrap .PHONY: configure-stageprofile-mpfr maybe-configure-stageprofile-mpfr @@ -16090,11 +17219,13 @@ configure-stageprofile-mpfr: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/mpfr ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \ cd $(HOST_SUBDIR)/mpfr || exit 1; \ @@ -16109,7 +17240,8 @@ configure-stageprofile-mpfr: $(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 + $(STAGEprofile_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpfr_configure_flags@ @endif mpfr-bootstrap .PHONY: configure-stagefeedback-mpfr maybe-configure-stagefeedback-mpfr @@ -16121,11 +17253,13 @@ configure-stagefeedback-mpfr: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/mpfr ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpfr ; \ cd $(HOST_SUBDIR)/mpfr || exit 1; \ @@ -16140,7 +17274,8 @@ configure-stagefeedback-mpfr: $(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 + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpfr_configure_flags@ @endif mpfr-bootstrap @@ -16160,7 +17295,8 @@ all-mpfr: configure-mpfr s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-mpfr)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-mpfr)) @endif mpfr @@ -16177,10 +17313,18 @@ all-stage1-mpfr: configure-stage1-mpfr @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-mpfr) maybe-clean-stage1-mpfr: clean-stage1-mpfr @@ -16193,7 +17337,7 @@ clean-stage1-mpfr: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif mpfr-bootstrap @@ -16210,11 +17354,19 @@ all-stage2-mpfr: configure-stage2-mpfr @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-mpfr) maybe-clean-stage2-mpfr: clean-stage2-mpfr @@ -16227,7 +17379,7 @@ clean-stage2-mpfr: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif mpfr-bootstrap @@ -16245,11 +17397,19 @@ all-stage3-mpfr: configure-stage3-mpfr @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-mpfr) maybe-clean-stage3-mpfr: clean-stage3-mpfr @@ -16262,7 +17422,7 @@ clean-stage3-mpfr: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif mpfr-bootstrap @@ -16280,11 +17440,19 @@ all-stage4-mpfr: configure-stage4-mpfr @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-mpfr) maybe-clean-stage4-mpfr: clean-stage4-mpfr @@ -16297,7 +17465,7 @@ clean-stage4-mpfr: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif mpfr-bootstrap @@ -16315,11 +17483,19 @@ all-stageprofile-mpfr: configure-stageprofile-mpfr @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(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) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-mpfr) maybe-clean-stageprofile-mpfr: clean-stageprofile-mpfr @@ -16332,7 +17508,7 @@ clean-stageprofile-mpfr: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif mpfr-bootstrap @@ -16350,11 +17526,19 @@ all-stagefeedback-mpfr: configure-stagefeedback-mpfr @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(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) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-mpfr) maybe-clean-stagefeedback-mpfr: clean-stagefeedback-mpfr @@ -16367,7 +17551,7 @@ clean-stagefeedback-mpfr: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/mpfr && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif mpfr-bootstrap @@ -16728,6 +17912,2604 @@ maintainer-clean-mpfr: +.PHONY: configure-mpc maybe-configure-mpc +maybe-configure-mpc: +@if gcc-bootstrap +configure-mpc: stage_current +@endif gcc-bootstrap +@if mpc +maybe-configure-mpc: configure-mpc +configure-mpc: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/mpc; \ + cd "$(HOST_SUBDIR)/mpc" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ \ + || exit 1 +@endif mpc + + + +.PHONY: configure-stage1-mpc maybe-configure-stage1-mpc +maybe-configure-stage1-mpc: +@if mpc-bootstrap +maybe-configure-stage1-mpc: configure-stage1-mpc +configure-stage1-mpc: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/mpc ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + cd $(HOST_SUBDIR)/mpc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + $(STAGE1_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ +@endif mpc-bootstrap + +.PHONY: configure-stage2-mpc maybe-configure-stage2-mpc +maybe-configure-stage2-mpc: +@if mpc-bootstrap +maybe-configure-stage2-mpc: configure-stage2-mpc +configure-stage2-mpc: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/mpc ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + cd $(HOST_SUBDIR)/mpc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ +@endif mpc-bootstrap + +.PHONY: configure-stage3-mpc maybe-configure-stage3-mpc +maybe-configure-stage3-mpc: +@if mpc-bootstrap +maybe-configure-stage3-mpc: configure-stage3-mpc +configure-stage3-mpc: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/mpc ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + cd $(HOST_SUBDIR)/mpc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ +@endif mpc-bootstrap + +.PHONY: configure-stage4-mpc maybe-configure-stage4-mpc +maybe-configure-stage4-mpc: +@if mpc-bootstrap +maybe-configure-stage4-mpc: configure-stage4-mpc +configure-stage4-mpc: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/mpc ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + cd $(HOST_SUBDIR)/mpc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ +@endif mpc-bootstrap + +.PHONY: configure-stageprofile-mpc maybe-configure-stageprofile-mpc +maybe-configure-stageprofile-mpc: +@if mpc-bootstrap +maybe-configure-stageprofile-mpc: configure-stageprofile-mpc +configure-stageprofile-mpc: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/mpc ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + cd $(HOST_SUBDIR)/mpc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ +@endif mpc-bootstrap + +.PHONY: configure-stagefeedback-mpc maybe-configure-stagefeedback-mpc +maybe-configure-stagefeedback-mpc: +@if mpc-bootstrap +maybe-configure-stagefeedback-mpc: configure-stagefeedback-mpc +configure-stagefeedback-mpc: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/mpc/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/mpc ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/mpc ; \ + cd $(HOST_SUBDIR)/mpc || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/mpc/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/mpc"; \ + libsrcdir="$$s/mpc"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --disable-shared @extra_mpc_gmp_configure_flags@ @extra_mpc_mpfr_configure_flags@ +@endif mpc-bootstrap + + + + + +.PHONY: all-mpc maybe-all-mpc +maybe-all-mpc: +@if gcc-bootstrap +all-mpc: stage_current +@endif gcc-bootstrap +@if mpc +TARGET-mpc=all +maybe-all-mpc: all-mpc +all-mpc: configure-mpc + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-mpc)) +@endif mpc + + + +.PHONY: all-stage1-mpc maybe-all-stage1-mpc +.PHONY: clean-stage1-mpc maybe-clean-stage1-mpc +maybe-all-stage1-mpc: +maybe-clean-stage1-mpc: +@if mpc-bootstrap +maybe-all-stage1-mpc: all-stage1-mpc +all-stage1: all-stage1-mpc +TARGET-stage1-mpc = $(TARGET-mpc) +all-stage1-mpc: configure-stage1-mpc + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-mpc) + +maybe-clean-stage1-mpc: clean-stage1-mpc +clean-stage1: clean-stage1-mpc +clean-stage1-mpc: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/mpc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-mpc/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + clean +@endif mpc-bootstrap + + +.PHONY: all-stage2-mpc maybe-all-stage2-mpc +.PHONY: clean-stage2-mpc maybe-clean-stage2-mpc +maybe-all-stage2-mpc: +maybe-clean-stage2-mpc: +@if mpc-bootstrap +maybe-all-stage2-mpc: all-stage2-mpc +all-stage2: all-stage2-mpc +TARGET-stage2-mpc = $(TARGET-mpc) +all-stage2-mpc: configure-stage2-mpc + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-mpc) + +maybe-clean-stage2-mpc: clean-stage2-mpc +clean-stage2: clean-stage2-mpc +clean-stage2-mpc: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/mpc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-mpc/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif mpc-bootstrap + + +.PHONY: all-stage3-mpc maybe-all-stage3-mpc +.PHONY: clean-stage3-mpc maybe-clean-stage3-mpc +maybe-all-stage3-mpc: +maybe-clean-stage3-mpc: +@if mpc-bootstrap +maybe-all-stage3-mpc: all-stage3-mpc +all-stage3: all-stage3-mpc +TARGET-stage3-mpc = $(TARGET-mpc) +all-stage3-mpc: configure-stage3-mpc + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-mpc) + +maybe-clean-stage3-mpc: clean-stage3-mpc +clean-stage3: clean-stage3-mpc +clean-stage3-mpc: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/mpc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-mpc/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif mpc-bootstrap + + +.PHONY: all-stage4-mpc maybe-all-stage4-mpc +.PHONY: clean-stage4-mpc maybe-clean-stage4-mpc +maybe-all-stage4-mpc: +maybe-clean-stage4-mpc: +@if mpc-bootstrap +maybe-all-stage4-mpc: all-stage4-mpc +all-stage4: all-stage4-mpc +TARGET-stage4-mpc = $(TARGET-mpc) +all-stage4-mpc: configure-stage4-mpc + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-mpc) + +maybe-clean-stage4-mpc: clean-stage4-mpc +clean-stage4: clean-stage4-mpc +clean-stage4-mpc: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/mpc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-mpc/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif mpc-bootstrap + + +.PHONY: all-stageprofile-mpc maybe-all-stageprofile-mpc +.PHONY: clean-stageprofile-mpc maybe-clean-stageprofile-mpc +maybe-all-stageprofile-mpc: +maybe-clean-stageprofile-mpc: +@if mpc-bootstrap +maybe-all-stageprofile-mpc: all-stageprofile-mpc +all-stageprofile: all-stageprofile-mpc +TARGET-stageprofile-mpc = $(TARGET-mpc) +all-stageprofile-mpc: configure-stageprofile-mpc + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-mpc) + +maybe-clean-stageprofile-mpc: clean-stageprofile-mpc +clean-stageprofile: clean-stageprofile-mpc +clean-stageprofile-mpc: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/mpc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-mpc/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif mpc-bootstrap + + +.PHONY: all-stagefeedback-mpc maybe-all-stagefeedback-mpc +.PHONY: clean-stagefeedback-mpc maybe-clean-stagefeedback-mpc +maybe-all-stagefeedback-mpc: +maybe-clean-stagefeedback-mpc: +@if mpc-bootstrap +maybe-all-stagefeedback-mpc: all-stagefeedback-mpc +all-stagefeedback: all-stagefeedback-mpc +TARGET-stagefeedback-mpc = $(TARGET-mpc) +all-stagefeedback-mpc: configure-stagefeedback-mpc + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-mpc) + +maybe-clean-stagefeedback-mpc: clean-stagefeedback-mpc +clean-stagefeedback: clean-stagefeedback-mpc +clean-stagefeedback-mpc: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/mpc/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-mpc/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif mpc-bootstrap + + + + + +.PHONY: check-mpc maybe-check-mpc +maybe-check-mpc: +@if mpc +maybe-check-mpc: check-mpc + +check-mpc: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif mpc + +.PHONY: install-mpc maybe-install-mpc +maybe-install-mpc: +@if mpc +maybe-install-mpc: install-mpc + +install-mpc: + +@endif mpc + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-mpc info-mpc +maybe-info-mpc: +@if mpc +maybe-info-mpc: info-mpc + +info-mpc: \ + configure-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-dvi-mpc dvi-mpc +maybe-dvi-mpc: +@if mpc +maybe-dvi-mpc: dvi-mpc + +dvi-mpc: \ + configure-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-pdf-mpc pdf-mpc +maybe-pdf-mpc: +@if mpc +maybe-pdf-mpc: pdf-mpc + +pdf-mpc: \ + configure-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-html-mpc html-mpc +maybe-html-mpc: +@if mpc +maybe-html-mpc: html-mpc + +html-mpc: \ + configure-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-TAGS-mpc TAGS-mpc +maybe-TAGS-mpc: +@if mpc +maybe-TAGS-mpc: TAGS-mpc + +TAGS-mpc: \ + configure-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-install-info-mpc install-info-mpc +maybe-install-info-mpc: +@if mpc +maybe-install-info-mpc: install-info-mpc + +install-info-mpc: \ + configure-mpc \ + info-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-install-pdf-mpc install-pdf-mpc +maybe-install-pdf-mpc: +@if mpc +maybe-install-pdf-mpc: install-pdf-mpc + +install-pdf-mpc: \ + configure-mpc \ + pdf-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-install-html-mpc install-html-mpc +maybe-install-html-mpc: +@if mpc +maybe-install-html-mpc: install-html-mpc + +install-html-mpc: \ + configure-mpc \ + html-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-installcheck-mpc installcheck-mpc +maybe-installcheck-mpc: +@if mpc +maybe-installcheck-mpc: installcheck-mpc + +installcheck-mpc: \ + configure-mpc + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-mostlyclean-mpc mostlyclean-mpc +maybe-mostlyclean-mpc: +@if mpc +maybe-mostlyclean-mpc: mostlyclean-mpc + +mostlyclean-mpc: + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-clean-mpc clean-mpc +maybe-clean-mpc: +@if mpc +maybe-clean-mpc: clean-mpc + +clean-mpc: + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-distclean-mpc distclean-mpc +maybe-distclean-mpc: +@if mpc +maybe-distclean-mpc: distclean-mpc + +distclean-mpc: + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif mpc + +.PHONY: maybe-maintainer-clean-mpc maintainer-clean-mpc +maybe-maintainer-clean-mpc: +@if mpc +maybe-maintainer-clean-mpc: maintainer-clean-mpc + +maintainer-clean-mpc: + @[ -f ./mpc/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 mpc" ; \ + (cd $(HOST_SUBDIR)/mpc && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif mpc + + + +.PHONY: configure-ppl maybe-configure-ppl +maybe-configure-ppl: +@if gcc-bootstrap +configure-ppl: stage_current +@endif gcc-bootstrap +@if ppl +maybe-configure-ppl: configure-ppl +configure-ppl: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/ppl; \ + cd "$(HOST_SUBDIR)/ppl" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \ + --target=none-${host_vendor}-${host_os} $${srcdiroption} --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ \ + || exit 1 +@endif ppl + + + +.PHONY: configure-stage1-ppl maybe-configure-stage1-ppl +maybe-configure-stage1-ppl: +@if ppl-bootstrap +maybe-configure-stage1-ppl: configure-stage1-ppl +configure-stage1-ppl: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/ppl ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + cd $(HOST_SUBDIR)/ppl || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \ + --target=none-${host_vendor}-${host_os} $${srcdiroption} \ + $(STAGE1_CONFIGURE_FLAGS) \ + --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ +@endif ppl-bootstrap + +.PHONY: configure-stage2-ppl maybe-configure-stage2-ppl +maybe-configure-stage2-ppl: +@if ppl-bootstrap +maybe-configure-stage2-ppl: configure-stage2-ppl +configure-stage2-ppl: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/ppl ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + cd $(HOST_SUBDIR)/ppl || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(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_CONFIGURE_FLAGS) \ + --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ +@endif ppl-bootstrap + +.PHONY: configure-stage3-ppl maybe-configure-stage3-ppl +maybe-configure-stage3-ppl: +@if ppl-bootstrap +maybe-configure-stage3-ppl: configure-stage3-ppl +configure-stage3-ppl: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/ppl ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + cd $(HOST_SUBDIR)/ppl || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(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) \ + $(STAGE3_CONFIGURE_FLAGS) \ + --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ +@endif ppl-bootstrap + +.PHONY: configure-stage4-ppl maybe-configure-stage4-ppl +maybe-configure-stage4-ppl: +@if ppl-bootstrap +maybe-configure-stage4-ppl: configure-stage4-ppl +configure-stage4-ppl: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/ppl ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + cd $(HOST_SUBDIR)/ppl || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(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) \ + $(STAGE4_CONFIGURE_FLAGS) \ + --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ +@endif ppl-bootstrap + +.PHONY: configure-stageprofile-ppl maybe-configure-stageprofile-ppl +maybe-configure-stageprofile-ppl: +@if ppl-bootstrap +maybe-configure-stageprofile-ppl: configure-stageprofile-ppl +configure-stageprofile-ppl: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/ppl ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + cd $(HOST_SUBDIR)/ppl || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(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) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ +@endif ppl-bootstrap + +.PHONY: configure-stagefeedback-ppl maybe-configure-stagefeedback-ppl +maybe-configure-stagefeedback-ppl: +@if ppl-bootstrap +maybe-configure-stagefeedback-ppl: configure-stagefeedback-ppl +configure-stagefeedback-ppl: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/ppl/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/ppl ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ppl ; \ + cd $(HOST_SUBDIR)/ppl || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/ppl/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/ppl"; \ + libsrcdir="$$s/ppl"; \ + $(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) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --disable-shared --with-libgmp-prefix=$$r/$(HOST_SUBDIR)/gmp/ --with-libgmpxx-prefix=$$r/$(HOST_SUBDIR)/gmp/ +@endif ppl-bootstrap + + + + + +.PHONY: all-ppl maybe-all-ppl +maybe-all-ppl: +@if gcc-bootstrap +all-ppl: stage_current +@endif gcc-bootstrap +@if ppl +TARGET-ppl=all +maybe-all-ppl: all-ppl +all-ppl: configure-ppl + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-ppl)) +@endif ppl + + + +.PHONY: all-stage1-ppl maybe-all-stage1-ppl +.PHONY: clean-stage1-ppl maybe-clean-stage1-ppl +maybe-all-stage1-ppl: +maybe-clean-stage1-ppl: +@if ppl-bootstrap +maybe-all-stage1-ppl: all-stage1-ppl +all-stage1: all-stage1-ppl +TARGET-stage1-ppl = $(TARGET-ppl) +all-stage1-ppl: configure-stage1-ppl + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-ppl) + +maybe-clean-stage1-ppl: clean-stage1-ppl +clean-stage1: clean-stage1-ppl +clean-stage1-ppl: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/ppl/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-ppl/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + clean +@endif ppl-bootstrap + + +.PHONY: all-stage2-ppl maybe-all-stage2-ppl +.PHONY: clean-stage2-ppl maybe-clean-stage2-ppl +maybe-all-stage2-ppl: +maybe-clean-stage2-ppl: +@if ppl-bootstrap +maybe-all-stage2-ppl: all-stage2-ppl +all-stage2: all-stage2-ppl +TARGET-stage2-ppl = $(TARGET-ppl) +all-stage2-ppl: configure-stage2-ppl + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-ppl) + +maybe-clean-stage2-ppl: clean-stage2-ppl +clean-stage2: clean-stage2-ppl +clean-stage2-ppl: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/ppl/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-ppl/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif ppl-bootstrap + + +.PHONY: all-stage3-ppl maybe-all-stage3-ppl +.PHONY: clean-stage3-ppl maybe-clean-stage3-ppl +maybe-all-stage3-ppl: +maybe-clean-stage3-ppl: +@if ppl-bootstrap +maybe-all-stage3-ppl: all-stage3-ppl +all-stage3: all-stage3-ppl +TARGET-stage3-ppl = $(TARGET-ppl) +all-stage3-ppl: configure-stage3-ppl + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-ppl) + +maybe-clean-stage3-ppl: clean-stage3-ppl +clean-stage3: clean-stage3-ppl +clean-stage3-ppl: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/ppl/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-ppl/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif ppl-bootstrap + + +.PHONY: all-stage4-ppl maybe-all-stage4-ppl +.PHONY: clean-stage4-ppl maybe-clean-stage4-ppl +maybe-all-stage4-ppl: +maybe-clean-stage4-ppl: +@if ppl-bootstrap +maybe-all-stage4-ppl: all-stage4-ppl +all-stage4: all-stage4-ppl +TARGET-stage4-ppl = $(TARGET-ppl) +all-stage4-ppl: configure-stage4-ppl + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-ppl) + +maybe-clean-stage4-ppl: clean-stage4-ppl +clean-stage4: clean-stage4-ppl +clean-stage4-ppl: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/ppl/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-ppl/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif ppl-bootstrap + + +.PHONY: all-stageprofile-ppl maybe-all-stageprofile-ppl +.PHONY: clean-stageprofile-ppl maybe-clean-stageprofile-ppl +maybe-all-stageprofile-ppl: +maybe-clean-stageprofile-ppl: +@if ppl-bootstrap +maybe-all-stageprofile-ppl: all-stageprofile-ppl +all-stageprofile: all-stageprofile-ppl +TARGET-stageprofile-ppl = $(TARGET-ppl) +all-stageprofile-ppl: configure-stageprofile-ppl + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-ppl) + +maybe-clean-stageprofile-ppl: clean-stageprofile-ppl +clean-stageprofile: clean-stageprofile-ppl +clean-stageprofile-ppl: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/ppl/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-ppl/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif ppl-bootstrap + + +.PHONY: all-stagefeedback-ppl maybe-all-stagefeedback-ppl +.PHONY: clean-stagefeedback-ppl maybe-clean-stagefeedback-ppl +maybe-all-stagefeedback-ppl: +maybe-clean-stagefeedback-ppl: +@if ppl-bootstrap +maybe-all-stagefeedback-ppl: all-stagefeedback-ppl +all-stagefeedback: all-stagefeedback-ppl +TARGET-stagefeedback-ppl = $(TARGET-ppl) +all-stagefeedback-ppl: configure-stagefeedback-ppl + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-ppl) + +maybe-clean-stagefeedback-ppl: clean-stagefeedback-ppl +clean-stagefeedback: clean-stagefeedback-ppl +clean-stagefeedback-ppl: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/ppl/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-ppl/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif ppl-bootstrap + + + + + +.PHONY: check-ppl maybe-check-ppl +maybe-check-ppl: +@if ppl +maybe-check-ppl: check-ppl + +check-ppl: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif ppl + +.PHONY: install-ppl maybe-install-ppl +maybe-install-ppl: +@if ppl +maybe-install-ppl: install-ppl + +install-ppl: + +@endif ppl + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-ppl info-ppl +maybe-info-ppl: +@if ppl +maybe-info-ppl: info-ppl + +info-ppl: \ + configure-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-dvi-ppl dvi-ppl +maybe-dvi-ppl: +@if ppl +maybe-dvi-ppl: dvi-ppl + +dvi-ppl: \ + configure-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-pdf-ppl pdf-ppl +maybe-pdf-ppl: +@if ppl +maybe-pdf-ppl: pdf-ppl + +pdf-ppl: \ + configure-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-html-ppl html-ppl +maybe-html-ppl: +@if ppl +maybe-html-ppl: html-ppl + +html-ppl: \ + configure-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-TAGS-ppl TAGS-ppl +maybe-TAGS-ppl: +@if ppl +maybe-TAGS-ppl: TAGS-ppl + +TAGS-ppl: \ + configure-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-install-info-ppl install-info-ppl +maybe-install-info-ppl: +@if ppl +maybe-install-info-ppl: install-info-ppl + +install-info-ppl: \ + configure-ppl \ + info-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-install-pdf-ppl install-pdf-ppl +maybe-install-pdf-ppl: +@if ppl +maybe-install-pdf-ppl: install-pdf-ppl + +install-pdf-ppl: \ + configure-ppl \ + pdf-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-install-html-ppl install-html-ppl +maybe-install-html-ppl: +@if ppl +maybe-install-html-ppl: install-html-ppl + +install-html-ppl: \ + configure-ppl \ + html-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-installcheck-ppl installcheck-ppl +maybe-installcheck-ppl: +@if ppl +maybe-installcheck-ppl: installcheck-ppl + +installcheck-ppl: \ + configure-ppl + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-mostlyclean-ppl mostlyclean-ppl +maybe-mostlyclean-ppl: +@if ppl +maybe-mostlyclean-ppl: mostlyclean-ppl + +mostlyclean-ppl: + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-clean-ppl clean-ppl +maybe-clean-ppl: +@if ppl +maybe-clean-ppl: clean-ppl + +clean-ppl: + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-distclean-ppl distclean-ppl +maybe-distclean-ppl: +@if ppl +maybe-distclean-ppl: distclean-ppl + +distclean-ppl: + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif ppl + +.PHONY: maybe-maintainer-clean-ppl maintainer-clean-ppl +maybe-maintainer-clean-ppl: +@if ppl +maybe-maintainer-clean-ppl: maintainer-clean-ppl + +maintainer-clean-ppl: + @[ -f ./ppl/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 ppl" ; \ + (cd $(HOST_SUBDIR)/ppl && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif ppl + + + +.PHONY: configure-cloog maybe-configure-cloog +maybe-configure-cloog: +@if gcc-bootstrap +configure-cloog: stage_current +@endif gcc-bootstrap +@if cloog +maybe-configure-cloog: configure-cloog +configure-cloog: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/cloog; \ + cd "$(HOST_SUBDIR)/cloog" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(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-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp \ + || exit 1 +@endif cloog + + + +.PHONY: configure-stage1-cloog maybe-configure-stage1-cloog +maybe-configure-stage1-cloog: +@if cloog-bootstrap +maybe-configure-stage1-cloog: configure-stage1-cloog +configure-stage1-cloog: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/cloog ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + cd $(HOST_SUBDIR)/cloog || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=none-${host_vendor}-${host_os} \ + --target=none-${host_vendor}-${host_os} $${srcdiroption} \ + $(STAGE1_CONFIGURE_FLAGS) \ + --disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp +@endif cloog-bootstrap + +.PHONY: configure-stage2-cloog maybe-configure-stage2-cloog +maybe-configure-stage2-cloog: +@if cloog-bootstrap +maybe-configure-stage2-cloog: configure-stage2-cloog +configure-stage2-cloog: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/cloog ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + cd $(HOST_SUBDIR)/cloog || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(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_CONFIGURE_FLAGS) \ + --disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp +@endif cloog-bootstrap + +.PHONY: configure-stage3-cloog maybe-configure-stage3-cloog +maybe-configure-stage3-cloog: +@if cloog-bootstrap +maybe-configure-stage3-cloog: configure-stage3-cloog +configure-stage3-cloog: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/cloog ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + cd $(HOST_SUBDIR)/cloog || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(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) \ + $(STAGE3_CONFIGURE_FLAGS) \ + --disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp +@endif cloog-bootstrap + +.PHONY: configure-stage4-cloog maybe-configure-stage4-cloog +maybe-configure-stage4-cloog: +@if cloog-bootstrap +maybe-configure-stage4-cloog: configure-stage4-cloog +configure-stage4-cloog: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/cloog ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + cd $(HOST_SUBDIR)/cloog || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(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) \ + $(STAGE4_CONFIGURE_FLAGS) \ + --disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp +@endif cloog-bootstrap + +.PHONY: configure-stageprofile-cloog maybe-configure-stageprofile-cloog +maybe-configure-stageprofile-cloog: +@if cloog-bootstrap +maybe-configure-stageprofile-cloog: configure-stageprofile-cloog +configure-stageprofile-cloog: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/cloog ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + cd $(HOST_SUBDIR)/cloog || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(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) \ + $(STAGEprofile_CONFIGURE_FLAGS) \ + --disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp +@endif cloog-bootstrap + +.PHONY: configure-stagefeedback-cloog maybe-configure-stagefeedback-cloog +maybe-configure-stagefeedback-cloog: +@if cloog-bootstrap +maybe-configure-stagefeedback-cloog: configure-stagefeedback-cloog +configure-stagefeedback-cloog: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/cloog/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/cloog ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/cloog ; \ + cd $(HOST_SUBDIR)/cloog || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/cloog/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/cloog"; \ + libsrcdir="$$s/cloog"; \ + $(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) \ + $(STAGEfeedback_CONFIGURE_FLAGS) \ + --disable-shared --with-gmp-library=$$r/$(HOST_SUBDIR)/gmp/.libs --with-gmp-include=$$r/$(HOST_SUBDIR)/gmp --with-ppl=$$r/$(HOST_SUBDIR)/ppl/ --with-bits=gmp +@endif cloog-bootstrap + + + + + +.PHONY: all-cloog maybe-all-cloog +maybe-all-cloog: +@if gcc-bootstrap +all-cloog: stage_current +@endif gcc-bootstrap +@if cloog +TARGET-cloog=all +maybe-all-cloog: all-cloog +all-cloog: configure-cloog + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-cloog)) +@endif cloog + + + +.PHONY: all-stage1-cloog maybe-all-stage1-cloog +.PHONY: clean-stage1-cloog maybe-clean-stage1-cloog +maybe-all-stage1-cloog: +maybe-clean-stage1-cloog: +@if cloog-bootstrap +maybe-all-stage1-cloog: all-stage1-cloog +all-stage1: all-stage1-cloog +TARGET-stage1-cloog = $(TARGET-cloog) +all-stage1-cloog: configure-stage1-cloog + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-cloog) + +maybe-clean-stage1-cloog: clean-stage1-cloog +clean-stage1: clean-stage1-cloog +clean-stage1-cloog: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/cloog/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-cloog/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + clean +@endif cloog-bootstrap + + +.PHONY: all-stage2-cloog maybe-all-stage2-cloog +.PHONY: clean-stage2-cloog maybe-clean-stage2-cloog +maybe-all-stage2-cloog: +maybe-clean-stage2-cloog: +@if cloog-bootstrap +maybe-all-stage2-cloog: all-stage2-cloog +all-stage2: all-stage2-cloog +TARGET-stage2-cloog = $(TARGET-cloog) +all-stage2-cloog: configure-stage2-cloog + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-cloog) + +maybe-clean-stage2-cloog: clean-stage2-cloog +clean-stage2: clean-stage2-cloog +clean-stage2-cloog: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/cloog/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-cloog/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif cloog-bootstrap + + +.PHONY: all-stage3-cloog maybe-all-stage3-cloog +.PHONY: clean-stage3-cloog maybe-clean-stage3-cloog +maybe-all-stage3-cloog: +maybe-clean-stage3-cloog: +@if cloog-bootstrap +maybe-all-stage3-cloog: all-stage3-cloog +all-stage3: all-stage3-cloog +TARGET-stage3-cloog = $(TARGET-cloog) +all-stage3-cloog: configure-stage3-cloog + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-cloog) + +maybe-clean-stage3-cloog: clean-stage3-cloog +clean-stage3: clean-stage3-cloog +clean-stage3-cloog: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/cloog/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-cloog/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif cloog-bootstrap + + +.PHONY: all-stage4-cloog maybe-all-stage4-cloog +.PHONY: clean-stage4-cloog maybe-clean-stage4-cloog +maybe-all-stage4-cloog: +maybe-clean-stage4-cloog: +@if cloog-bootstrap +maybe-all-stage4-cloog: all-stage4-cloog +all-stage4: all-stage4-cloog +TARGET-stage4-cloog = $(TARGET-cloog) +all-stage4-cloog: configure-stage4-cloog + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-cloog) + +maybe-clean-stage4-cloog: clean-stage4-cloog +clean-stage4: clean-stage4-cloog +clean-stage4-cloog: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/cloog/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-cloog/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif cloog-bootstrap + + +.PHONY: all-stageprofile-cloog maybe-all-stageprofile-cloog +.PHONY: clean-stageprofile-cloog maybe-clean-stageprofile-cloog +maybe-all-stageprofile-cloog: +maybe-clean-stageprofile-cloog: +@if cloog-bootstrap +maybe-all-stageprofile-cloog: all-stageprofile-cloog +all-stageprofile: all-stageprofile-cloog +TARGET-stageprofile-cloog = $(TARGET-cloog) +all-stageprofile-cloog: configure-stageprofile-cloog + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-cloog) + +maybe-clean-stageprofile-cloog: clean-stageprofile-cloog +clean-stageprofile: clean-stageprofile-cloog +clean-stageprofile-cloog: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/cloog/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-cloog/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif cloog-bootstrap + + +.PHONY: all-stagefeedback-cloog maybe-all-stagefeedback-cloog +.PHONY: clean-stagefeedback-cloog maybe-clean-stagefeedback-cloog +maybe-all-stagefeedback-cloog: +maybe-clean-stagefeedback-cloog: +@if cloog-bootstrap +maybe-all-stagefeedback-cloog: all-stagefeedback-cloog +all-stagefeedback: all-stagefeedback-cloog +TARGET-stagefeedback-cloog = $(TARGET-cloog) +all-stagefeedback-cloog: configure-stagefeedback-cloog + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-cloog) + +maybe-clean-stagefeedback-cloog: clean-stagefeedback-cloog +clean-stagefeedback: clean-stagefeedback-cloog +clean-stagefeedback-cloog: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/cloog/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-cloog/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif cloog-bootstrap + + + + + +.PHONY: check-cloog maybe-check-cloog +maybe-check-cloog: +@if cloog +maybe-check-cloog: check-cloog + +check-cloog: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif cloog + +.PHONY: install-cloog maybe-install-cloog +maybe-install-cloog: +@if cloog +maybe-install-cloog: install-cloog + +install-cloog: + +@endif cloog + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-cloog info-cloog +maybe-info-cloog: +@if cloog +maybe-info-cloog: info-cloog + +info-cloog: \ + configure-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-dvi-cloog dvi-cloog +maybe-dvi-cloog: +@if cloog +maybe-dvi-cloog: dvi-cloog + +dvi-cloog: \ + configure-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-pdf-cloog pdf-cloog +maybe-pdf-cloog: +@if cloog +maybe-pdf-cloog: pdf-cloog + +pdf-cloog: \ + configure-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-html-cloog html-cloog +maybe-html-cloog: +@if cloog +maybe-html-cloog: html-cloog + +html-cloog: \ + configure-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-TAGS-cloog TAGS-cloog +maybe-TAGS-cloog: +@if cloog +maybe-TAGS-cloog: TAGS-cloog + +TAGS-cloog: \ + configure-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-install-info-cloog install-info-cloog +maybe-install-info-cloog: +@if cloog +maybe-install-info-cloog: install-info-cloog + +install-info-cloog: \ + configure-cloog \ + info-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-install-pdf-cloog install-pdf-cloog +maybe-install-pdf-cloog: +@if cloog +maybe-install-pdf-cloog: install-pdf-cloog + +install-pdf-cloog: \ + configure-cloog \ + pdf-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-install-html-cloog install-html-cloog +maybe-install-html-cloog: +@if cloog +maybe-install-html-cloog: install-html-cloog + +install-html-cloog: \ + configure-cloog \ + html-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-installcheck-cloog installcheck-cloog +maybe-installcheck-cloog: +@if cloog +maybe-installcheck-cloog: installcheck-cloog + +installcheck-cloog: \ + configure-cloog + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-mostlyclean-cloog mostlyclean-cloog +maybe-mostlyclean-cloog: +@if cloog +maybe-mostlyclean-cloog: mostlyclean-cloog + +mostlyclean-cloog: + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-clean-cloog clean-cloog +maybe-clean-cloog: +@if cloog +maybe-clean-cloog: clean-cloog + +clean-cloog: + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-distclean-cloog distclean-cloog +maybe-distclean-cloog: +@if cloog +maybe-distclean-cloog: distclean-cloog + +distclean-cloog: + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif cloog + +.PHONY: maybe-maintainer-clean-cloog maintainer-clean-cloog +maybe-maintainer-clean-cloog: +@if cloog +maybe-maintainer-clean-cloog: maintainer-clean-cloog + +maintainer-clean-cloog: + @[ -f ./cloog/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 cloog" ; \ + (cd $(HOST_SUBDIR)/cloog && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif cloog + + + .PHONY: configure-gnuserv maybe-configure-gnuserv maybe-configure-gnuserv: @if gcc-bootstrap @@ -16739,97 +20521,976 @@ configure-gnuserv: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ - test ! -f $(HOST_SUBDIR)/gnuserv/Makefile || exit 0; \ - $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gnuserv ; \ + test ! -f $(HOST_SUBDIR)/gnuserv/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gnuserv ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/gnuserv; \ + cd "$(HOST_SUBDIR)/gnuserv" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gnuserv/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gnuserv"; \ + libsrcdir="$$s/gnuserv"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + || exit 1 +@endif 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 +all-gnuserv: configure-gnuserv + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gnuserv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gnuserv)) +@endif gnuserv + + + + +.PHONY: check-gnuserv maybe-check-gnuserv +maybe-check-gnuserv: +@if gnuserv +maybe-check-gnuserv: check-gnuserv + +check-gnuserv: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gnuserv && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif gnuserv + +.PHONY: install-gnuserv maybe-install-gnuserv +maybe-install-gnuserv: +@if gnuserv +maybe-install-gnuserv: install-gnuserv + +install-gnuserv: installdirs + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/gnuserv && \ + $(MAKE) $(FLAGS_TO_PASS) install) + +@endif gnuserv + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-gnuserv info-gnuserv +maybe-info-gnuserv: +@if gnuserv +maybe-info-gnuserv: info-gnuserv + +info-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 info 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}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-dvi-gnuserv dvi-gnuserv +maybe-dvi-gnuserv: +@if gnuserv +maybe-dvi-gnuserv: dvi-gnuserv + +dvi-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 dvi 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}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@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}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-html-gnuserv html-gnuserv +maybe-html-gnuserv: +@if gnuserv +maybe-html-gnuserv: html-gnuserv + +html-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 html 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}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-TAGS-gnuserv TAGS-gnuserv +maybe-TAGS-gnuserv: +@if gnuserv +maybe-TAGS-gnuserv: TAGS-gnuserv + +TAGS-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 TAGS 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}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-install-info-gnuserv install-info-gnuserv +maybe-install-info-gnuserv: +@if gnuserv +maybe-install-info-gnuserv: install-info-gnuserv + +install-info-gnuserv: \ + configure-gnuserv \ + info-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-info 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}" "WINDMC=$${WINDMC}" \ + install-info) \ + || exit 1 + +@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}" "WINDMC=$${WINDMC}" \ + install-pdf) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-install-html-gnuserv install-html-gnuserv +maybe-install-html-gnuserv: +@if gnuserv +maybe-install-html-gnuserv: install-html-gnuserv + +install-html-gnuserv: \ + configure-gnuserv \ + html-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-html 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}" "WINDMC=$${WINDMC}" \ + install-html) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-installcheck-gnuserv installcheck-gnuserv +maybe-installcheck-gnuserv: +@if gnuserv +maybe-installcheck-gnuserv: installcheck-gnuserv + +installcheck-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 installcheck 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}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-mostlyclean-gnuserv mostlyclean-gnuserv +maybe-mostlyclean-gnuserv: +@if gnuserv +maybe-mostlyclean-gnuserv: mostlyclean-gnuserv + +mostlyclean-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 mostlyclean 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}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-clean-gnuserv clean-gnuserv +maybe-clean-gnuserv: +@if gnuserv +maybe-clean-gnuserv: clean-gnuserv + +clean-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 clean 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}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-distclean-gnuserv distclean-gnuserv +maybe-distclean-gnuserv: +@if gnuserv +maybe-distclean-gnuserv: distclean-gnuserv + +distclean-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 distclean 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}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif gnuserv + +.PHONY: maybe-maintainer-clean-gnuserv maintainer-clean-gnuserv +maybe-maintainer-clean-gnuserv: +@if gnuserv +maybe-maintainer-clean-gnuserv: maintainer-clean-gnuserv + +maintainer-clean-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 maintainer-clean 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}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif gnuserv + + + +.PHONY: configure-gold maybe-configure-gold +maybe-configure-gold: +@if gcc-bootstrap +configure-gold: stage_current +@endif gcc-bootstrap +@if gold +maybe-configure-gold: configure-gold +configure-gold: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/gold; \ + cd "$(HOST_SUBDIR)/gold" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + || exit 1 +@endif gold + + + +.PHONY: configure-stage1-gold maybe-configure-stage1-gold +maybe-configure-stage1-gold: +@if gold-bootstrap +maybe-configure-stage1-gold: configure-stage1-gold +configure-stage1-gold: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(HOST_SUBDIR)/gold ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + cd $(HOST_SUBDIR)/gold || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + $(STAGE1_CONFIGURE_FLAGS) +@endif gold-bootstrap + +.PHONY: configure-stage2-gold maybe-configure-stage2-gold +maybe-configure-stage2-gold: +@if gold-bootstrap +maybe-configure-stage2-gold: configure-stage2-gold +configure-stage2-gold: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(HOST_SUBDIR)/gold ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + cd $(HOST_SUBDIR)/gold || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) +@endif gold-bootstrap + +.PHONY: configure-stage3-gold maybe-configure-stage3-gold +maybe-configure-stage3-gold: +@if gold-bootstrap +maybe-configure-stage3-gold: configure-stage3-gold +configure-stage3-gold: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ $(HOST_EXPORTS) \ - echo Configuring in $(HOST_SUBDIR)/gnuserv; \ - cd "$(HOST_SUBDIR)/gnuserv" || exit 1; \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(HOST_SUBDIR)/gold ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + cd $(HOST_SUBDIR)/gold || exit 1; \ case $(srcdir) in \ /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ - *) topdir=`echo $(HOST_SUBDIR)/gnuserv/ | \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ esac; \ - srcdiroption="--srcdir=$${topdir}/gnuserv"; \ - libsrcdir="$$s/gnuserv"; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ - --target=${target_alias} $${srcdiroption} \ - || exit 1 -@endif gnuserv + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) +@endif gold-bootstrap + +.PHONY: configure-stage4-gold maybe-configure-stage4-gold +maybe-configure-stage4-gold: +@if gold-bootstrap +maybe-configure-stage4-gold: configure-stage4-gold +configure-stage4-gold: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(HOST_SUBDIR)/gold ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + cd $(HOST_SUBDIR)/gold || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) +@endif gold-bootstrap + +.PHONY: configure-stageprofile-gold maybe-configure-stageprofile-gold +maybe-configure-stageprofile-gold: +@if gold-bootstrap +maybe-configure-stageprofile-gold: configure-stageprofile-gold +configure-stageprofile-gold: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(HOST_SUBDIR)/gold ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + cd $(HOST_SUBDIR)/gold || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) +@endif gold-bootstrap + +.PHONY: configure-stagefeedback-gold maybe-configure-stagefeedback-gold +maybe-configure-stagefeedback-gold: +@if gold-bootstrap +maybe-configure-stagefeedback-gold: configure-stagefeedback-gold +configure-stagefeedback-gold: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + test ! -f $(HOST_SUBDIR)/gold/Makefile || exit 0; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(HOST_SUBDIR)/gold ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/gold ; \ + cd $(HOST_SUBDIR)/gold || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/gold/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/gold"; \ + libsrcdir="$$s/gold"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) +@endif gold-bootstrap -.PHONY: all-gnuserv maybe-all-gnuserv -maybe-all-gnuserv: +.PHONY: all-gold maybe-all-gold +maybe-all-gold: @if gcc-bootstrap -all-gnuserv: stage_current +all-gold: stage_current @endif gcc-bootstrap -@if gnuserv -TARGET-gnuserv=all -maybe-all-gnuserv: all-gnuserv -all-gnuserv: configure-gnuserv - @: $(MAKE); $(unstage) +@if gold +TARGET-gold=all +maybe-all-gold: all-gold +all-gold: configure-gold @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ - (cd $(HOST_SUBDIR)/gnuserv && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gnuserv)) -@endif gnuserv + (cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gold)) +@endif gold +.PHONY: all-stage1-gold maybe-all-stage1-gold +.PHONY: clean-stage1-gold maybe-clean-stage1-gold +maybe-all-stage1-gold: +maybe-clean-stage1-gold: +@if gold-bootstrap +maybe-all-stage1-gold: all-stage1-gold +all-stage1: all-stage1-gold +TARGET-stage1-gold = $(TARGET-gold) +all-stage1-gold: configure-stage1-gold + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-gold) -.PHONY: check-gnuserv maybe-check-gnuserv -maybe-check-gnuserv: -@if gnuserv -maybe-check-gnuserv: check-gnuserv +maybe-clean-stage1-gold: clean-stage1-gold +clean-stage1: clean-stage1-gold +clean-stage1-gold: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(HOST_SUBDIR)/gold/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage1-gold/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + clean +@endif gold-bootstrap + + +.PHONY: all-stage2-gold maybe-all-stage2-gold +.PHONY: clean-stage2-gold maybe-clean-stage2-gold +maybe-all-stage2-gold: +maybe-clean-stage2-gold: +@if gold-bootstrap +maybe-all-stage2-gold: all-stage2-gold +all-stage2: all-stage2-gold +TARGET-stage2-gold = $(TARGET-gold) +all-stage2-gold: configure-stage2-gold + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-gold) + +maybe-clean-stage2-gold: clean-stage2-gold +clean-stage2: clean-stage2-gold +clean-stage2-gold: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(HOST_SUBDIR)/gold/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage2-gold/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif gold-bootstrap + + +.PHONY: all-stage3-gold maybe-all-stage3-gold +.PHONY: clean-stage3-gold maybe-clean-stage3-gold +maybe-all-stage3-gold: +maybe-clean-stage3-gold: +@if gold-bootstrap +maybe-all-stage3-gold: all-stage3-gold +all-stage3: all-stage3-gold +TARGET-stage3-gold = $(TARGET-gold) +all-stage3-gold: configure-stage3-gold + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-gold) + +maybe-clean-stage3-gold: clean-stage3-gold +clean-stage3: clean-stage3-gold +clean-stage3-gold: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(HOST_SUBDIR)/gold/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage3-gold/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif gold-bootstrap + + +.PHONY: all-stage4-gold maybe-all-stage4-gold +.PHONY: clean-stage4-gold maybe-clean-stage4-gold +maybe-all-stage4-gold: +maybe-clean-stage4-gold: +@if gold-bootstrap +maybe-all-stage4-gold: all-stage4-gold +all-stage4: all-stage4-gold +TARGET-stage4-gold = $(TARGET-gold) +all-stage4-gold: configure-stage4-gold + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-gold) + +maybe-clean-stage4-gold: clean-stage4-gold +clean-stage4: clean-stage4-gold +clean-stage4-gold: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(HOST_SUBDIR)/gold/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stage4-gold/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif gold-bootstrap + + +.PHONY: all-stageprofile-gold maybe-all-stageprofile-gold +.PHONY: clean-stageprofile-gold maybe-clean-stageprofile-gold +maybe-all-stageprofile-gold: +maybe-clean-stageprofile-gold: +@if gold-bootstrap +maybe-all-stageprofile-gold: all-stageprofile-gold +all-stageprofile: all-stageprofile-gold +TARGET-stageprofile-gold = $(TARGET-gold) +all-stageprofile-gold: configure-stageprofile-gold + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-gold) + +maybe-clean-stageprofile-gold: clean-stageprofile-gold +clean-stageprofile: clean-stageprofile-gold +clean-stageprofile-gold: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(HOST_SUBDIR)/gold/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stageprofile-gold/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif gold-bootstrap + + +.PHONY: all-stagefeedback-gold maybe-all-stagefeedback-gold +.PHONY: clean-stagefeedback-gold maybe-clean-stagefeedback-gold +maybe-all-stagefeedback-gold: +maybe-clean-stagefeedback-gold: +@if gold-bootstrap +maybe-all-stagefeedback-gold: all-stagefeedback-gold +all-stagefeedback: all-stagefeedback-gold +TARGET-stagefeedback-gold = $(TARGET-gold) +all-stagefeedback-gold: configure-stagefeedback-gold + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(HOST_EXPORTS) \ + $(POSTSTAGE1_HOST_EXPORTS) \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-gold) + +maybe-clean-stagefeedback-gold: clean-stagefeedback-gold +clean-stagefeedback: clean-stagefeedback-gold +clean-stagefeedback-gold: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(HOST_SUBDIR)/gold/Makefile ] || exit 0; \ + else \ + [ -f $(HOST_SUBDIR)/stagefeedback-gold/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(HOST_SUBDIR)/gold && \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ + $(POSTSTAGE1_FLAGS_TO_PASS) \ + clean +@endif gold-bootstrap -check-gnuserv: + + + + +.PHONY: check-gold maybe-check-gold +maybe-check-gold: +@if gold +maybe-check-gold: check-gold + +check-gold: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ - (cd $(HOST_SUBDIR)/gnuserv && \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(FLAGS_TO_PASS) check) -@endif gnuserv +@endif gold -.PHONY: install-gnuserv maybe-install-gnuserv -maybe-install-gnuserv: -@if gnuserv -maybe-install-gnuserv: install-gnuserv +.PHONY: install-gold maybe-install-gold +maybe-install-gold: +@if gold +maybe-install-gold: install-gold -install-gnuserv: installdirs +install-gold: installdirs @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ - (cd $(HOST_SUBDIR)/gnuserv && \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(FLAGS_TO_PASS) install) -@endif gnuserv +@endif gold # Other targets (info, dvi, pdf, etc.) -.PHONY: maybe-info-gnuserv info-gnuserv -maybe-info-gnuserv: -@if gnuserv -maybe-info-gnuserv: info-gnuserv +.PHONY: maybe-info-gold info-gold +maybe-info-gold: +@if gold +maybe-info-gold: info-gold -info-gnuserv: \ - configure-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +info-gold: \ + configure-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing info in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16837,25 +21498,24 @@ info-gnuserv: \ info) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-dvi-gnuserv dvi-gnuserv -maybe-dvi-gnuserv: -@if gnuserv -maybe-dvi-gnuserv: dvi-gnuserv +.PHONY: maybe-dvi-gold dvi-gold +maybe-dvi-gold: +@if gold +maybe-dvi-gold: dvi-gold -dvi-gnuserv: \ - configure-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +dvi-gold: \ + configure-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing dvi in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16863,25 +21523,24 @@ dvi-gnuserv: \ dvi) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-pdf-gnuserv pdf-gnuserv -maybe-pdf-gnuserv: -@if gnuserv -maybe-pdf-gnuserv: pdf-gnuserv +.PHONY: maybe-pdf-gold pdf-gold +maybe-pdf-gold: +@if gold +maybe-pdf-gold: pdf-gold -pdf-gnuserv: \ - configure-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +pdf-gold: \ + configure-gold + @[ -f ./gold/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 && \ + echo "Doing pdf in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16889,25 +21548,24 @@ pdf-gnuserv: \ pdf) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-html-gnuserv html-gnuserv -maybe-html-gnuserv: -@if gnuserv -maybe-html-gnuserv: html-gnuserv +.PHONY: maybe-html-gold html-gold +maybe-html-gold: +@if gold +maybe-html-gold: html-gold -html-gnuserv: \ - configure-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +html-gold: \ + configure-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing html in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16915,25 +21573,24 @@ html-gnuserv: \ html) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-TAGS-gnuserv TAGS-gnuserv -maybe-TAGS-gnuserv: -@if gnuserv -maybe-TAGS-gnuserv: TAGS-gnuserv +.PHONY: maybe-TAGS-gold TAGS-gold +maybe-TAGS-gold: +@if gold +maybe-TAGS-gold: TAGS-gold -TAGS-gnuserv: \ - configure-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +TAGS-gold: \ + configure-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing TAGS in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16941,26 +21598,25 @@ TAGS-gnuserv: \ TAGS) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-install-info-gnuserv install-info-gnuserv -maybe-install-info-gnuserv: -@if gnuserv -maybe-install-info-gnuserv: install-info-gnuserv +.PHONY: maybe-install-info-gold install-info-gold +maybe-install-info-gold: +@if gold +maybe-install-info-gold: install-info-gold -install-info-gnuserv: \ - configure-gnuserv \ - info-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +install-info-gold: \ + configure-gold \ + info-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing install-info in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16968,26 +21624,25 @@ install-info-gnuserv: \ install-info) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-install-pdf-gnuserv install-pdf-gnuserv -maybe-install-pdf-gnuserv: -@if gnuserv -maybe-install-pdf-gnuserv: install-pdf-gnuserv +.PHONY: maybe-install-pdf-gold install-pdf-gold +maybe-install-pdf-gold: +@if gold +maybe-install-pdf-gold: install-pdf-gold -install-pdf-gnuserv: \ - configure-gnuserv \ - pdf-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +install-pdf-gold: \ + configure-gold \ + pdf-gold + @[ -f ./gold/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 && \ + echo "Doing install-pdf in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -16995,26 +21650,25 @@ install-pdf-gnuserv: \ install-pdf) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-install-html-gnuserv install-html-gnuserv -maybe-install-html-gnuserv: -@if gnuserv -maybe-install-html-gnuserv: install-html-gnuserv +.PHONY: maybe-install-html-gold install-html-gold +maybe-install-html-gold: +@if gold +maybe-install-html-gold: install-html-gold -install-html-gnuserv: \ - configure-gnuserv \ - html-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +install-html-gold: \ + configure-gold \ + html-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing install-html in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -17022,25 +21676,24 @@ install-html-gnuserv: \ install-html) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-installcheck-gnuserv installcheck-gnuserv -maybe-installcheck-gnuserv: -@if gnuserv -maybe-installcheck-gnuserv: installcheck-gnuserv +.PHONY: maybe-installcheck-gold installcheck-gold +maybe-installcheck-gold: +@if gold +maybe-installcheck-gold: installcheck-gold -installcheck-gnuserv: \ - configure-gnuserv - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +installcheck-gold: \ + configure-gold + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing installcheck in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -17048,24 +21701,23 @@ installcheck-gnuserv: \ installcheck) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-mostlyclean-gnuserv mostlyclean-gnuserv -maybe-mostlyclean-gnuserv: -@if gnuserv -maybe-mostlyclean-gnuserv: mostlyclean-gnuserv +.PHONY: maybe-mostlyclean-gold mostlyclean-gold +maybe-mostlyclean-gold: +@if gold +maybe-mostlyclean-gold: mostlyclean-gold -mostlyclean-gnuserv: - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +mostlyclean-gold: + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing mostlyclean in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -17073,24 +21725,23 @@ mostlyclean-gnuserv: mostlyclean) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-clean-gnuserv clean-gnuserv -maybe-clean-gnuserv: -@if gnuserv -maybe-clean-gnuserv: clean-gnuserv +.PHONY: maybe-clean-gold clean-gold +maybe-clean-gold: +@if gold +maybe-clean-gold: clean-gold -clean-gnuserv: - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +clean-gold: + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing clean in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -17098,24 +21749,23 @@ clean-gnuserv: clean) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-distclean-gnuserv distclean-gnuserv -maybe-distclean-gnuserv: -@if gnuserv -maybe-distclean-gnuserv: distclean-gnuserv +.PHONY: maybe-distclean-gold distclean-gold +maybe-distclean-gold: +@if gold +maybe-distclean-gold: distclean-gold -distclean-gnuserv: - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +distclean-gold: + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing distclean in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -17123,24 +21773,23 @@ distclean-gnuserv: distclean) \ || exit 1 -@endif gnuserv +@endif gold -.PHONY: maybe-maintainer-clean-gnuserv maintainer-clean-gnuserv -maybe-maintainer-clean-gnuserv: -@if gnuserv -maybe-maintainer-clean-gnuserv: maintainer-clean-gnuserv +.PHONY: maybe-maintainer-clean-gold maintainer-clean-gold +maybe-maintainer-clean-gold: +@if gold +maybe-maintainer-clean-gold: maintainer-clean-gold -maintainer-clean-gnuserv: - @: $(MAKE); $(unstage) - @[ -f ./gnuserv/Makefile ] || exit 0; \ +maintainer-clean-gold: + @[ -f ./gold/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 gnuserv" ; \ - (cd $(HOST_SUBDIR)/gnuserv && \ + echo "Doing maintainer-clean in gold" ; \ + (cd $(HOST_SUBDIR)/gold && \ $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ "RANLIB=$${RANLIB}" \ @@ -17148,7 +21797,7 @@ maintainer-clean-gnuserv: maintainer-clean) \ || exit 1 -@endif gnuserv +@endif gold @@ -17199,7 +21848,8 @@ all-gprof: configure-gprof s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gprof && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gprof)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gprof)) @endif gprof @@ -17623,7 +22273,8 @@ all-gzip: configure-gzip s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gzip && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gzip)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gzip)) @endif gzip @@ -18047,7 +22698,8 @@ all-hello: configure-hello s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/hello && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-hello)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-hello)) @endif hello @@ -18471,7 +23123,8 @@ all-indent: configure-indent s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/indent && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-indent)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-indent)) @endif indent @@ -18887,10 +23540,12 @@ configure-stage1-intl: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/intl ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \ cd $(HOST_SUBDIR)/intl || exit 1; \ @@ -18904,8 +23559,7 @@ configure-stage1-intl: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif intl-bootstrap .PHONY: configure-stage2-intl maybe-configure-stage2-intl @@ -18917,11 +23571,13 @@ configure-stage2-intl: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/intl ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \ cd $(HOST_SUBDIR)/intl || exit 1; \ @@ -18936,7 +23592,7 @@ configure-stage2-intl: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif intl-bootstrap .PHONY: configure-stage3-intl maybe-configure-stage3-intl @@ -18948,11 +23604,13 @@ configure-stage3-intl: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/intl ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \ cd $(HOST_SUBDIR)/intl || exit 1; \ @@ -18967,7 +23625,7 @@ configure-stage3-intl: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif intl-bootstrap .PHONY: configure-stage4-intl maybe-configure-stage4-intl @@ -18979,11 +23637,13 @@ configure-stage4-intl: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/intl/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/intl ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \ cd $(HOST_SUBDIR)/intl || exit 1; \ @@ -18998,7 +23658,7 @@ configure-stage4-intl: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif intl-bootstrap .PHONY: configure-stageprofile-intl maybe-configure-stageprofile-intl @@ -19010,11 +23670,13 @@ configure-stageprofile-intl: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/intl ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \ cd $(HOST_SUBDIR)/intl || exit 1; \ @@ -19029,7 +23691,7 @@ configure-stageprofile-intl: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif intl-bootstrap .PHONY: configure-stagefeedback-intl maybe-configure-stagefeedback-intl @@ -19041,11 +23703,13 @@ configure-stagefeedback-intl: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/intl ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/intl ; \ cd $(HOST_SUBDIR)/intl || exit 1; \ @@ -19060,7 +23724,7 @@ configure-stagefeedback-intl: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif intl-bootstrap @@ -19080,7 +23744,8 @@ all-intl: configure-intl s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-intl)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-intl)) @endif intl @@ -19097,10 +23762,18 @@ all-stage1-intl: configure-stage1-intl @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-intl) maybe-clean-stage1-intl: clean-stage1-intl @@ -19113,7 +23786,7 @@ clean-stage1-intl: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif intl-bootstrap @@ -19130,11 +23803,19 @@ all-stage2-intl: configure-stage2-intl @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-intl) maybe-clean-stage2-intl: clean-stage2-intl @@ -19147,7 +23828,7 @@ clean-stage2-intl: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif intl-bootstrap @@ -19165,11 +23846,19 @@ all-stage3-intl: configure-stage3-intl @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-intl) maybe-clean-stage3-intl: clean-stage3-intl @@ -19182,7 +23871,7 @@ clean-stage3-intl: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif intl-bootstrap @@ -19200,11 +23889,19 @@ all-stage4-intl: configure-stage4-intl @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-intl) maybe-clean-stage4-intl: clean-stage4-intl @@ -19217,7 +23914,7 @@ clean-stage4-intl: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif intl-bootstrap @@ -19235,11 +23932,19 @@ all-stageprofile-intl: configure-stageprofile-intl @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-intl) maybe-clean-stageprofile-intl: clean-stageprofile-intl @@ -19252,7 +23957,7 @@ clean-stageprofile-intl: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif intl-bootstrap @@ -19270,11 +23975,19 @@ all-stagefeedback-intl: configure-stagefeedback-intl @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-intl) maybe-clean-stagefeedback-intl: clean-stagefeedback-intl @@ -19287,7 +24000,7 @@ clean-stagefeedback-intl: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/intl && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif intl-bootstrap @@ -19701,7 +24414,8 @@ all-tcl: configure-tcl s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/tcl && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-tcl)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-tcl)) @endif tcl @@ -20110,7 +24824,8 @@ all-itcl: configure-itcl s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/itcl && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-itcl)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-itcl)) @endif itcl @@ -20526,10 +25241,12 @@ configure-stage1-ld: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/ld ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \ cd $(HOST_SUBDIR)/ld || exit 1; \ @@ -20543,8 +25260,7 @@ configure-stage1-ld: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif ld-bootstrap .PHONY: configure-stage2-ld maybe-configure-stage2-ld @@ -20556,11 +25272,13 @@ configure-stage2-ld: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/ld ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \ cd $(HOST_SUBDIR)/ld || exit 1; \ @@ -20575,7 +25293,7 @@ configure-stage2-ld: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif ld-bootstrap .PHONY: configure-stage3-ld maybe-configure-stage3-ld @@ -20587,11 +25305,13 @@ configure-stage3-ld: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/ld ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \ cd $(HOST_SUBDIR)/ld || exit 1; \ @@ -20606,7 +25326,7 @@ configure-stage3-ld: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif ld-bootstrap .PHONY: configure-stage4-ld maybe-configure-stage4-ld @@ -20618,11 +25338,13 @@ configure-stage4-ld: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/ld/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/ld ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \ cd $(HOST_SUBDIR)/ld || exit 1; \ @@ -20637,7 +25359,7 @@ configure-stage4-ld: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif ld-bootstrap .PHONY: configure-stageprofile-ld maybe-configure-stageprofile-ld @@ -20649,11 +25371,13 @@ configure-stageprofile-ld: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/ld ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \ cd $(HOST_SUBDIR)/ld || exit 1; \ @@ -20668,7 +25392,7 @@ configure-stageprofile-ld: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif ld-bootstrap .PHONY: configure-stagefeedback-ld maybe-configure-stagefeedback-ld @@ -20680,11 +25404,13 @@ configure-stagefeedback-ld: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/ld ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/ld ; \ cd $(HOST_SUBDIR)/ld || exit 1; \ @@ -20699,7 +25425,7 @@ configure-stagefeedback-ld: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif ld-bootstrap @@ -20719,7 +25445,8 @@ all-ld: configure-ld s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-ld)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-ld)) @endif ld @@ -20736,10 +25463,18 @@ all-stage1-ld: configure-stage1-ld @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-ld) maybe-clean-stage1-ld: clean-stage1-ld @@ -20752,7 +25487,7 @@ clean-stage1-ld: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif ld-bootstrap @@ -20769,11 +25504,19 @@ all-stage2-ld: configure-stage2-ld @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-ld) maybe-clean-stage2-ld: clean-stage2-ld @@ -20786,7 +25529,7 @@ clean-stage2-ld: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif ld-bootstrap @@ -20804,11 +25547,19 @@ all-stage3-ld: configure-stage3-ld @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-ld) maybe-clean-stage3-ld: clean-stage3-ld @@ -20821,7 +25572,7 @@ clean-stage3-ld: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif ld-bootstrap @@ -20839,11 +25590,19 @@ all-stage4-ld: configure-stage4-ld @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-ld) maybe-clean-stage4-ld: clean-stage4-ld @@ -20856,7 +25615,7 @@ clean-stage4-ld: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif ld-bootstrap @@ -20874,11 +25633,19 @@ all-stageprofile-ld: configure-stageprofile-ld @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-ld) maybe-clean-stageprofile-ld: clean-stageprofile-ld @@ -20891,7 +25658,7 @@ clean-stageprofile-ld: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif ld-bootstrap @@ -20909,11 +25676,19 @@ all-stagefeedback-ld: configure-stagefeedback-ld @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-ld) maybe-clean-stagefeedback-ld: clean-stagefeedback-ld @@ -20926,7 +25701,7 @@ clean-stagefeedback-ld: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/ld && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif ld-bootstrap @@ -21332,10 +26107,12 @@ configure-stage1-libcpp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/libcpp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \ cd $(HOST_SUBDIR)/libcpp || exit 1; \ @@ -21349,8 +26126,7 @@ configure-stage1-libcpp: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif libcpp-bootstrap .PHONY: configure-stage2-libcpp maybe-configure-stage2-libcpp @@ -21362,11 +26138,13 @@ configure-stage2-libcpp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/libcpp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \ cd $(HOST_SUBDIR)/libcpp || exit 1; \ @@ -21381,7 +26159,7 @@ configure-stage2-libcpp: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif libcpp-bootstrap .PHONY: configure-stage3-libcpp maybe-configure-stage3-libcpp @@ -21393,11 +26171,13 @@ configure-stage3-libcpp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/libcpp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \ cd $(HOST_SUBDIR)/libcpp || exit 1; \ @@ -21412,7 +26192,7 @@ configure-stage3-libcpp: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif libcpp-bootstrap .PHONY: configure-stage4-libcpp maybe-configure-stage4-libcpp @@ -21424,11 +26204,13 @@ configure-stage4-libcpp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libcpp/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/libcpp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \ cd $(HOST_SUBDIR)/libcpp || exit 1; \ @@ -21443,7 +26225,7 @@ configure-stage4-libcpp: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif libcpp-bootstrap .PHONY: configure-stageprofile-libcpp maybe-configure-stageprofile-libcpp @@ -21455,11 +26237,13 @@ configure-stageprofile-libcpp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/libcpp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \ cd $(HOST_SUBDIR)/libcpp || exit 1; \ @@ -21474,7 +26258,7 @@ configure-stageprofile-libcpp: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif libcpp-bootstrap .PHONY: configure-stagefeedback-libcpp maybe-configure-stagefeedback-libcpp @@ -21486,11 +26270,13 @@ configure-stagefeedback-libcpp: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/libcpp ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libcpp ; \ cd $(HOST_SUBDIR)/libcpp || exit 1; \ @@ -21505,7 +26291,7 @@ configure-stagefeedback-libcpp: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif libcpp-bootstrap @@ -21525,7 +26311,8 @@ all-libcpp: configure-libcpp s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-libcpp)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libcpp)) @endif libcpp @@ -21542,10 +26329,18 @@ all-stage1-libcpp: configure-stage1-libcpp @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-libcpp) maybe-clean-stage1-libcpp: clean-stage1-libcpp @@ -21558,7 +26353,7 @@ clean-stage1-libcpp: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif libcpp-bootstrap @@ -21575,11 +26370,19 @@ all-stage2-libcpp: configure-stage2-libcpp @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-libcpp) maybe-clean-stage2-libcpp: clean-stage2-libcpp @@ -21592,7 +26395,7 @@ clean-stage2-libcpp: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libcpp-bootstrap @@ -21610,11 +26413,19 @@ all-stage3-libcpp: configure-stage3-libcpp @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-libcpp) maybe-clean-stage3-libcpp: clean-stage3-libcpp @@ -21627,7 +26438,7 @@ clean-stage3-libcpp: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libcpp-bootstrap @@ -21645,11 +26456,19 @@ all-stage4-libcpp: configure-stage4-libcpp @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-libcpp) maybe-clean-stage4-libcpp: clean-stage4-libcpp @@ -21662,7 +26481,7 @@ clean-stage4-libcpp: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libcpp-bootstrap @@ -21680,11 +26499,19 @@ all-stageprofile-libcpp: configure-stageprofile-libcpp @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-libcpp) maybe-clean-stageprofile-libcpp: clean-stageprofile-libcpp @@ -21697,7 +26524,7 @@ clean-stageprofile-libcpp: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libcpp-bootstrap @@ -21715,11 +26542,19 @@ all-stagefeedback-libcpp: configure-stagefeedback-libcpp @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-libcpp) maybe-clean-stagefeedback-libcpp: clean-stagefeedback-libcpp @@ -21732,7 +26567,7 @@ clean-stagefeedback-libcpp: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/libcpp && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libcpp-bootstrap @@ -22138,10 +26973,12 @@ configure-stage1-libdecnumber: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/libdecnumber ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \ cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ @@ -22155,8 +26992,7 @@ configure-stage1-libdecnumber: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif libdecnumber-bootstrap .PHONY: configure-stage2-libdecnumber maybe-configure-stage2-libdecnumber @@ -22168,11 +27004,13 @@ configure-stage2-libdecnumber: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/libdecnumber ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \ cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ @@ -22187,7 +27025,7 @@ configure-stage2-libdecnumber: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif libdecnumber-bootstrap .PHONY: configure-stage3-libdecnumber maybe-configure-stage3-libdecnumber @@ -22199,11 +27037,13 @@ configure-stage3-libdecnumber: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/libdecnumber ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \ cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ @@ -22218,7 +27058,7 @@ configure-stage3-libdecnumber: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif libdecnumber-bootstrap .PHONY: configure-stage4-libdecnumber maybe-configure-stage4-libdecnumber @@ -22230,11 +27070,13 @@ configure-stage4-libdecnumber: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libdecnumber/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/libdecnumber ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \ cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ @@ -22249,7 +27091,7 @@ configure-stage4-libdecnumber: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif libdecnumber-bootstrap .PHONY: configure-stageprofile-libdecnumber maybe-configure-stageprofile-libdecnumber @@ -22261,11 +27103,13 @@ configure-stageprofile-libdecnumber: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/libdecnumber ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \ cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ @@ -22280,7 +27124,7 @@ configure-stageprofile-libdecnumber: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif libdecnumber-bootstrap .PHONY: configure-stagefeedback-libdecnumber maybe-configure-stagefeedback-libdecnumber @@ -22292,11 +27136,13 @@ configure-stagefeedback-libdecnumber: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/libdecnumber ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libdecnumber ; \ cd $(HOST_SUBDIR)/libdecnumber || exit 1; \ @@ -22311,7 +27157,7 @@ configure-stagefeedback-libdecnumber: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif libdecnumber-bootstrap @@ -22331,7 +27177,8 @@ all-libdecnumber: configure-libdecnumber s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-libdecnumber)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libdecnumber)) @endif libdecnumber @@ -22348,10 +27195,18 @@ all-stage1-libdecnumber: configure-stage1-libdecnumber @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-libdecnumber) maybe-clean-stage1-libdecnumber: clean-stage1-libdecnumber @@ -22364,7 +27219,7 @@ clean-stage1-libdecnumber: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif libdecnumber-bootstrap @@ -22381,11 +27236,19 @@ all-stage2-libdecnumber: configure-stage2-libdecnumber @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-libdecnumber) maybe-clean-stage2-libdecnumber: clean-stage2-libdecnumber @@ -22398,7 +27261,7 @@ clean-stage2-libdecnumber: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libdecnumber-bootstrap @@ -22416,11 +27279,19 @@ all-stage3-libdecnumber: configure-stage3-libdecnumber @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-libdecnumber) maybe-clean-stage3-libdecnumber: clean-stage3-libdecnumber @@ -22433,7 +27304,7 @@ clean-stage3-libdecnumber: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libdecnumber-bootstrap @@ -22451,11 +27322,19 @@ all-stage4-libdecnumber: configure-stage4-libdecnumber @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-libdecnumber) maybe-clean-stage4-libdecnumber: clean-stage4-libdecnumber @@ -22468,7 +27347,7 @@ clean-stage4-libdecnumber: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libdecnumber-bootstrap @@ -22486,11 +27365,19 @@ all-stageprofile-libdecnumber: configure-stageprofile-libdecnumber @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-libdecnumber) maybe-clean-stageprofile-libdecnumber: clean-stageprofile-libdecnumber @@ -22503,7 +27390,7 @@ clean-stageprofile-libdecnumber: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libdecnumber-bootstrap @@ -22521,11 +27408,19 @@ all-stagefeedback-libdecnumber: configure-stagefeedback-libdecnumber @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-libdecnumber) maybe-clean-stagefeedback-libdecnumber: clean-stagefeedback-libdecnumber @@ -22538,7 +27433,7 @@ clean-stagefeedback-libdecnumber: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/libdecnumber && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libdecnumber-bootstrap @@ -22952,7 +27847,8 @@ all-libgui: configure-libgui s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/libgui && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-libgui)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libgui)) @endif libgui @@ -23368,10 +28264,12 @@ configure-stage1-libiberty: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/libiberty ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \ cd $(HOST_SUBDIR)/libiberty || exit 1; \ @@ -23385,8 +28283,7 @@ configure-stage1-libiberty: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif libiberty-bootstrap .PHONY: configure-stage2-libiberty maybe-configure-stage2-libiberty @@ -23398,11 +28295,13 @@ configure-stage2-libiberty: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/libiberty ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \ cd $(HOST_SUBDIR)/libiberty || exit 1; \ @@ -23417,7 +28316,7 @@ configure-stage2-libiberty: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif libiberty-bootstrap .PHONY: configure-stage3-libiberty maybe-configure-stage3-libiberty @@ -23429,11 +28328,13 @@ configure-stage3-libiberty: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/libiberty ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \ cd $(HOST_SUBDIR)/libiberty || exit 1; \ @@ -23448,7 +28349,7 @@ configure-stage3-libiberty: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif libiberty-bootstrap .PHONY: configure-stage4-libiberty maybe-configure-stage4-libiberty @@ -23460,11 +28361,13 @@ configure-stage4-libiberty: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/libiberty/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/libiberty ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \ cd $(HOST_SUBDIR)/libiberty || exit 1; \ @@ -23479,7 +28382,7 @@ configure-stage4-libiberty: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif libiberty-bootstrap .PHONY: configure-stageprofile-libiberty maybe-configure-stageprofile-libiberty @@ -23491,11 +28394,13 @@ configure-stageprofile-libiberty: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/libiberty ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \ cd $(HOST_SUBDIR)/libiberty || exit 1; \ @@ -23510,7 +28415,7 @@ configure-stageprofile-libiberty: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif libiberty-bootstrap .PHONY: configure-stagefeedback-libiberty maybe-configure-stagefeedback-libiberty @@ -23522,11 +28427,13 @@ configure-stagefeedback-libiberty: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/libiberty ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiberty ; \ cd $(HOST_SUBDIR)/libiberty || exit 1; \ @@ -23541,7 +28448,7 @@ configure-stagefeedback-libiberty: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif libiberty-bootstrap @@ -23561,7 +28468,8 @@ all-libiberty: configure-libiberty s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-libiberty)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libiberty)) @endif libiberty @@ -23578,10 +28486,18 @@ all-stage1-libiberty: configure-stage1-libiberty @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-libiberty) maybe-clean-stage1-libiberty: clean-stage1-libiberty @@ -23594,7 +28510,7 @@ clean-stage1-libiberty: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif libiberty-bootstrap @@ -23611,11 +28527,19 @@ all-stage2-libiberty: configure-stage2-libiberty @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-libiberty) maybe-clean-stage2-libiberty: clean-stage2-libiberty @@ -23628,7 +28552,7 @@ clean-stage2-libiberty: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libiberty-bootstrap @@ -23646,11 +28570,19 @@ all-stage3-libiberty: configure-stage3-libiberty @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-libiberty) maybe-clean-stage3-libiberty: clean-stage3-libiberty @@ -23663,7 +28595,7 @@ clean-stage3-libiberty: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libiberty-bootstrap @@ -23681,11 +28613,19 @@ all-stage4-libiberty: configure-stage4-libiberty @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-libiberty) maybe-clean-stage4-libiberty: clean-stage4-libiberty @@ -23698,7 +28638,7 @@ clean-stage4-libiberty: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libiberty-bootstrap @@ -23716,11 +28656,19 @@ all-stageprofile-libiberty: configure-stageprofile-libiberty @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-libiberty) maybe-clean-stageprofile-libiberty: clean-stageprofile-libiberty @@ -23733,7 +28681,7 @@ clean-stageprofile-libiberty: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libiberty-bootstrap @@ -23751,11 +28699,19 @@ all-stagefeedback-libiberty: configure-stagefeedback-libiberty @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-libiberty) maybe-clean-stagefeedback-libiberty: clean-stagefeedback-libiberty @@ -23768,7 +28724,7 @@ clean-stagefeedback-libiberty: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/libiberty && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif libiberty-bootstrap @@ -24135,6 +29091,374 @@ maintainer-clean-libiberty: +.PHONY: configure-libiconv maybe-configure-libiconv +maybe-configure-libiconv: +@if gcc-bootstrap +configure-libiconv: stage_current +@endif gcc-bootstrap +@if libiconv +maybe-configure-libiconv: configure-libiconv +configure-libiconv: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + test ! -f $(HOST_SUBDIR)/libiconv/Makefile || exit 0; \ + $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/libiconv ; \ + $(HOST_EXPORTS) \ + echo Configuring in $(HOST_SUBDIR)/libiconv; \ + cd "$(HOST_SUBDIR)/libiconv" || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(HOST_SUBDIR)/libiconv/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libiconv"; \ + libsrcdir="$$s/libiconv"; \ + $(SHELL) $${libsrcdir}/configure \ + $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ + --target=${target_alias} $${srcdiroption} --disable-shared \ + || exit 1 +@endif libiconv + + + + + +.PHONY: all-libiconv maybe-all-libiconv +maybe-all-libiconv: +@if gcc-bootstrap +all-libiconv: stage_current +@endif gcc-bootstrap +@if libiconv +TARGET-libiconv=all +maybe-all-libiconv: all-libiconv +all-libiconv: configure-libiconv + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libiconv)) +@endif libiconv + + + + +.PHONY: check-libiconv maybe-check-libiconv +maybe-check-libiconv: +@if libiconv +maybe-check-libiconv: check-libiconv + +check-libiconv: + @: $(MAKE); $(unstage) + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(FLAGS_TO_PASS) check) + +@endif libiconv + +.PHONY: install-libiconv maybe-install-libiconv +maybe-install-libiconv: +@if libiconv +maybe-install-libiconv: install-libiconv + +install-libiconv: + +@endif libiconv + +# Other targets (info, dvi, pdf, etc.) + +.PHONY: maybe-info-libiconv info-libiconv +maybe-info-libiconv: +@if libiconv +maybe-info-libiconv: info-libiconv + +info-libiconv: \ + configure-libiconv + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + info) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-dvi-libiconv dvi-libiconv +maybe-dvi-libiconv: +@if libiconv +maybe-dvi-libiconv: dvi-libiconv + +dvi-libiconv: \ + configure-libiconv + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + dvi) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-pdf-libiconv pdf-libiconv +maybe-pdf-libiconv: +@if libiconv +maybe-pdf-libiconv: pdf-libiconv + +pdf-libiconv: \ + configure-libiconv + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + pdf) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-html-libiconv html-libiconv +maybe-html-libiconv: +@if libiconv +maybe-html-libiconv: html-libiconv + +html-libiconv: \ + configure-libiconv + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + html) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-TAGS-libiconv TAGS-libiconv +maybe-TAGS-libiconv: +@if libiconv +maybe-TAGS-libiconv: TAGS-libiconv + +TAGS-libiconv: \ + configure-libiconv + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + TAGS) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-install-info-libiconv install-info-libiconv +maybe-install-info-libiconv: +@if libiconv +maybe-install-info-libiconv: install-info-libiconv + +# libiconv doesn't support install-info. +install-info-libiconv: + +@endif libiconv + +.PHONY: maybe-install-pdf-libiconv install-pdf-libiconv +maybe-install-pdf-libiconv: +@if libiconv +maybe-install-pdf-libiconv: install-pdf-libiconv + +# libiconv doesn't support install-pdf. +install-pdf-libiconv: + +@endif libiconv + +.PHONY: maybe-install-html-libiconv install-html-libiconv +maybe-install-html-libiconv: +@if libiconv +maybe-install-html-libiconv: install-html-libiconv + +# libiconv doesn't support install-html. +install-html-libiconv: + +@endif libiconv + +.PHONY: maybe-installcheck-libiconv installcheck-libiconv +maybe-installcheck-libiconv: +@if libiconv +maybe-installcheck-libiconv: installcheck-libiconv + +installcheck-libiconv: \ + configure-libiconv + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + installcheck) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-mostlyclean-libiconv mostlyclean-libiconv +maybe-mostlyclean-libiconv: +@if libiconv +maybe-mostlyclean-libiconv: mostlyclean-libiconv + +mostlyclean-libiconv: + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + mostlyclean) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-clean-libiconv clean-libiconv +maybe-clean-libiconv: +@if libiconv +maybe-clean-libiconv: clean-libiconv + +clean-libiconv: + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + clean) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-distclean-libiconv distclean-libiconv +maybe-distclean-libiconv: +@if libiconv +maybe-distclean-libiconv: distclean-libiconv + +distclean-libiconv: + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + distclean) \ + || exit 1 + +@endif libiconv + +.PHONY: maybe-maintainer-clean-libiconv maintainer-clean-libiconv +maybe-maintainer-clean-libiconv: +@if libiconv +maybe-maintainer-clean-libiconv: maintainer-clean-libiconv + +maintainer-clean-libiconv: + @: $(MAKE); $(unstage) + @[ -f ./libiconv/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 libiconv" ; \ + (cd $(HOST_SUBDIR)/libiconv && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \ + "CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \ + "RANLIB=$${RANLIB}" \ + "DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \ + maintainer-clean) \ + || exit 1 + +@endif libiconv + + + .PHONY: configure-libtool maybe-configure-libtool maybe-configure-libtool: @if gcc-bootstrap @@ -24182,7 +29506,8 @@ all-libtool: configure-libtool s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/libtool && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-libtool)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libtool)) @endif libtool @@ -24606,7 +29931,8 @@ all-m4: configure-m4 s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/m4 && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-m4)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-m4)) @endif m4 @@ -25030,7 +30356,8 @@ all-make: configure-make s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/make && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-make)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-make)) @endif make @@ -25454,7 +30781,8 @@ all-mmalloc: configure-mmalloc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/mmalloc && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-mmalloc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-mmalloc)) @endif mmalloc @@ -25872,7 +31200,8 @@ all-patch: configure-patch s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/patch && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-patch)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-patch)) @endif patch @@ -26296,7 +31625,8 @@ all-perl: configure-perl s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/perl && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-perl)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-perl)) @endif perl @@ -26720,7 +32050,8 @@ all-prms: configure-prms s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/prms && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-prms)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-prms)) @endif prms @@ -27144,7 +32475,8 @@ all-rcs: configure-rcs s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/rcs && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-rcs)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-rcs)) @endif rcs @@ -27568,7 +32900,8 @@ all-readline: configure-readline s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/readline && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-readline)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-readline)) @endif readline @@ -27992,7 +33325,8 @@ all-release: configure-release s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/release && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-release)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-release)) @endif release @@ -28404,7 +33738,8 @@ all-recode: configure-recode s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/recode && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-recode)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-recode)) @endif recode @@ -28828,7 +34163,8 @@ all-sed: configure-sed s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/sed && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-sed)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-sed)) @endif sed @@ -29252,7 +34588,8 @@ all-send-pr: configure-send-pr s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/send-pr && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-send-pr)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-send-pr)) @endif send-pr @@ -29676,7 +35013,8 @@ all-shellutils: configure-shellutils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/shellutils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-shellutils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-shellutils)) @endif shellutils @@ -30100,7 +35438,8 @@ all-sid: configure-sid s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/sid && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-sid)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-sid)) @endif sid @@ -30524,7 +35863,8 @@ all-sim: configure-sim s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/sim && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-sim)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-sim)) @endif sim @@ -30948,7 +36288,8 @@ all-tar: configure-tar s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/tar && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-tar)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-tar)) @endif tar @@ -31372,7 +36713,8 @@ all-texinfo: configure-texinfo s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/texinfo && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-texinfo)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-texinfo)) @endif texinfo @@ -31790,7 +37132,8 @@ all-textutils: configure-textutils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/textutils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-textutils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-textutils)) @endif textutils @@ -32214,7 +37557,8 @@ all-time: configure-time s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/time && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-time)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-time)) @endif time @@ -32638,7 +37982,8 @@ all-uudecode: configure-uudecode s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/uudecode && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-uudecode)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-uudecode)) @endif uudecode @@ -33062,7 +38407,8 @@ all-wdiff: configure-wdiff s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/wdiff && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-wdiff)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-wdiff)) @endif wdiff @@ -33486,7 +38832,8 @@ all-zip: configure-zip s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/zip && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-zip)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-zip)) @endif zip @@ -33905,10 +39252,12 @@ configure-stage1-zlib: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ $(HOST_EXPORTS) \ CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CXXFLAGS="$(STAGE1_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(HOST_SUBDIR)/zlib ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \ cd $(HOST_SUBDIR)/zlib || exit 1; \ @@ -33922,8 +39271,7 @@ configure-stage1-zlib: $(SHELL) $${libsrcdir}/configure \ $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ - \ - --disable-intermodule $(STAGE1_CHECKING) --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + $(STAGE1_CONFIGURE_FLAGS) @endif zlib-bootstrap .PHONY: configure-stage2-zlib maybe-configure-stage2-zlib @@ -33935,11 +39283,13 @@ configure-stage2-zlib: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE2_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE2_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE2_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(HOST_SUBDIR)/zlib ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \ cd $(HOST_SUBDIR)/zlib || exit 1; \ @@ -33954,7 +39304,7 @@ configure-stage2-zlib: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif zlib-bootstrap .PHONY: configure-stage3-zlib maybe-configure-stage3-zlib @@ -33966,11 +39316,13 @@ configure-stage3-zlib: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE3_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE3_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE3_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(HOST_SUBDIR)/zlib ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \ cd $(HOST_SUBDIR)/zlib || exit 1; \ @@ -33985,7 +39337,7 @@ configure-stage3-zlib: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif zlib-bootstrap .PHONY: configure-stage4-zlib maybe-configure-stage4-zlib @@ -33997,11 +39349,13 @@ configure-stage4-zlib: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ test ! -f $(HOST_SUBDIR)/zlib/Makefile || exit 0; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(STAGE4_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE4_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGE4_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(HOST_SUBDIR)/zlib ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \ cd $(HOST_SUBDIR)/zlib || exit 1; \ @@ -34016,7 +39370,7 @@ configure-stage4-zlib: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif zlib-bootstrap .PHONY: configure-stageprofile-zlib maybe-configure-stageprofile-zlib @@ -34028,11 +39382,13 @@ configure-stageprofile-zlib: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEprofile_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEprofile_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage profile in $(HOST_SUBDIR)/zlib ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \ cd $(HOST_SUBDIR)/zlib || exit 1; \ @@ -34047,7 +39403,7 @@ configure-stageprofile-zlib: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif zlib-bootstrap .PHONY: configure-stagefeedback-zlib maybe-configure-stagefeedback-zlib @@ -34059,11 +39415,13 @@ configure-stagefeedback-zlib: @$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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; \ + CFLAGS="$(STAGEfeedback_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)"; export CXXFLAGS; \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(HOST_SUBDIR)/zlib ; \ $(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)/zlib ; \ cd $(HOST_SUBDIR)/zlib || exit 1; \ @@ -34078,7 +39436,7 @@ configure-stagefeedback-zlib: $(HOST_CONFIGARGS) --build=${build_alias} --host=${host_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif zlib-bootstrap @@ -34098,7 +39456,8 @@ all-zlib: configure-zlib s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-zlib)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-zlib)) @endif zlib @@ -34115,10 +39474,18 @@ all-stage1-zlib: configure-stage1-zlib @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(HOST_EXPORTS) \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE1_CFLAGS)" \ + CXXFLAGS="$(STAGE1_CFLAGS)" \ + LIBCFLAGS="$(LIBCFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-zlib) maybe-clean-stage1-zlib: clean-stage1-zlib @@ -34131,7 +39498,7 @@ clean-stage1-zlib: $(MAKE) stage1-start; \ fi; \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ clean @endif zlib-bootstrap @@ -34148,11 +39515,19 @@ all-stage2-zlib: configure-stage2-zlib @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE2_CFLAGS)" \ + CXXFLAGS="$(STAGE2_CFLAGS)" \ + LIBCFLAGS="$(STAGE2_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-zlib) maybe-clean-stage2-zlib: clean-stage2-zlib @@ -34165,7 +39540,7 @@ clean-stage2-zlib: $(MAKE) stage2-start; \ fi; \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif zlib-bootstrap @@ -34183,11 +39558,19 @@ all-stage3-zlib: configure-stage3-zlib @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE3_CFLAGS)" \ + CXXFLAGS="$(STAGE3_CFLAGS)" \ + LIBCFLAGS="$(STAGE3_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-zlib) maybe-clean-stage3-zlib: clean-stage3-zlib @@ -34200,7 +39583,7 @@ clean-stage3-zlib: $(MAKE) stage3-start; \ fi; \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif zlib-bootstrap @@ -34218,11 +39601,19 @@ all-stage4-zlib: configure-stage4-zlib @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGE4_CFLAGS)" \ + CXXFLAGS="$(STAGE4_CFLAGS)" \ + LIBCFLAGS="$(STAGE4_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-zlib) maybe-clean-stage4-zlib: clean-stage4-zlib @@ -34235,7 +39626,7 @@ clean-stage4-zlib: $(MAKE) stage4-start; \ fi; \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif zlib-bootstrap @@ -34253,11 +39644,19 @@ all-stageprofile-zlib: configure-stageprofile-zlib @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEprofile_CFLAGS)" \ + CXXFLAGS="$(STAGEprofile_CFLAGS)" \ + LIBCFLAGS="$(STAGEprofile_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-zlib) maybe-clean-stageprofile-zlib: clean-stageprofile-zlib @@ -34270,7 +39669,7 @@ clean-stageprofile-zlib: $(MAKE) stageprofile-start; \ fi; \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif zlib-bootstrap @@ -34288,11 +39687,19 @@ all-stagefeedback-zlib: configure-stagefeedback-zlib @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(HOST_EXPORTS) \ $(POSTSTAGE1_HOST_EXPORTS) \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" $(POSTSTAGE1_FLAGS_TO_PASS) \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(STAGEfeedback_CFLAGS)" \ + CXXFLAGS="$(STAGEfeedback_CFLAGS)" \ + LIBCFLAGS="$(STAGEfeedback_CFLAGS)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_HOST_FLAGS) $(POSTSTAGE1_FLAGS_TO_PASS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-zlib) maybe-clean-stagefeedback-zlib: clean-stagefeedback-zlib @@ -34305,7 +39712,7 @@ clean-stagefeedback-zlib: $(MAKE) stagefeedback-start; \ fi; \ cd $(HOST_SUBDIR)/zlib && \ - $(MAKE) $(FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_HOST_FLAGS) \ $(POSTSTAGE1_FLAGS_TO_PASS) \ clean @endif zlib-bootstrap @@ -34707,7 +40114,8 @@ all-gdb: configure-gdb s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gdb && \ - $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) $(TARGET-gdb)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS) \ + $(TARGET-gdb)) @endif gdb @@ -35131,7 +40539,8 @@ all-expect: configure-expect s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/expect && \ - $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) $(TARGET-expect)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS) \ + $(TARGET-expect)) @endif expect @@ -35555,7 +40964,8 @@ all-guile: configure-guile s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/guile && \ - $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) $(TARGET-guile)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS) \ + $(TARGET-guile)) @endif guile @@ -35979,7 +41389,8 @@ all-tk: configure-tk s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/tk && \ - $(MAKE) $(FLAGS_TO_PASS) $(X11_FLAGS_TO_PASS) $(TARGET-tk)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(X11_FLAGS_TO_PASS) \ + $(TARGET-tk)) @endif tk @@ -36403,7 +41814,8 @@ all-libtermcap: configure-libtermcap s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/libtermcap && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-libtermcap)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-libtermcap)) @endif libtermcap @@ -36761,7 +42173,8 @@ all-utils: configure-utils s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/utils && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-utils)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-utils)) @endif utils @@ -37179,7 +42592,8 @@ all-gnattools: configure-gnattools s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(HOST_EXPORTS) \ (cd $(HOST_SUBDIR)/gnattools && \ - $(MAKE) $(FLAGS_TO_PASS) $(TARGET-gnattools)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) \ + $(TARGET-gnattools)) @endif gnattools @@ -37571,7 +42985,6 @@ configure-target-libstdc++-v3: stage_current @if target-libstdc++-v3 maybe-configure-target-libstdc++-v3: configure-target-libstdc++-v3 configure-target-libstdc++-v3: - @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ echo "Checking multilib configuration for libstdc++-v3..."; \ @@ -37608,6 +43021,276 @@ configure-target-libstdc++-v3: +.PHONY: configure-stage1-target-libstdc++-v3 maybe-configure-stage1-target-libstdc++-v3 +maybe-configure-stage1-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-configure-stage1-target-libstdc++-v3: configure-stage1-target-libstdc++-v3 +configure-stage1-target-libstdc++-v3: + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null ; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 1 in $(TARGET_SUBDIR)/libstdc++-v3 ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \ + libsrcdir="$$s/libstdc++-v3"; \ + $(SHELL) $${libsrcdir}/configure \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} $${srcdiroption} \ + $(STAGE1_CONFIGURE_FLAGS) +@endif target-libstdc++-v3-bootstrap + +.PHONY: configure-stage2-target-libstdc++-v3 maybe-configure-stage2-target-libstdc++-v3 +maybe-configure-stage2-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-configure-stage2-target-libstdc++-v3: configure-stage2-target-libstdc++-v3 +configure-stage2-target-libstdc++-v3: + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null ; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 2 in $(TARGET_SUBDIR)/libstdc++-v3 ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \ + libsrcdir="$$s/libstdc++-v3"; \ + $(SHELL) $${libsrcdir}/configure \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE2_CONFIGURE_FLAGS) +@endif target-libstdc++-v3-bootstrap + +.PHONY: configure-stage3-target-libstdc++-v3 maybe-configure-stage3-target-libstdc++-v3 +maybe-configure-stage3-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-configure-stage3-target-libstdc++-v3: configure-stage3-target-libstdc++-v3 +configure-stage3-target-libstdc++-v3: + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null ; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 3 in $(TARGET_SUBDIR)/libstdc++-v3 ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \ + libsrcdir="$$s/libstdc++-v3"; \ + $(SHELL) $${libsrcdir}/configure \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE3_CONFIGURE_FLAGS) +@endif target-libstdc++-v3-bootstrap + +.PHONY: configure-stage4-target-libstdc++-v3 maybe-configure-stage4-target-libstdc++-v3 +maybe-configure-stage4-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-configure-stage4-target-libstdc++-v3: configure-stage4-target-libstdc++-v3 +configure-stage4-target-libstdc++-v3: + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null ; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage 4 in $(TARGET_SUBDIR)/libstdc++-v3 ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \ + libsrcdir="$$s/libstdc++-v3"; \ + $(SHELL) $${libsrcdir}/configure \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGE4_CONFIGURE_FLAGS) +@endif target-libstdc++-v3-bootstrap + +.PHONY: configure-stageprofile-target-libstdc++-v3 maybe-configure-stageprofile-target-libstdc++-v3 +maybe-configure-stageprofile-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-configure-stageprofile-target-libstdc++-v3: configure-stageprofile-target-libstdc++-v3 +configure-stageprofile-target-libstdc++-v3: + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null ; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage profile in $(TARGET_SUBDIR)/libstdc++-v3 ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \ + libsrcdir="$$s/libstdc++-v3"; \ + $(SHELL) $${libsrcdir}/configure \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEprofile_CONFIGURE_FLAGS) +@endif target-libstdc++-v3-bootstrap + +.PHONY: configure-stagefeedback-target-libstdc++-v3 maybe-configure-stagefeedback-target-libstdc++-v3 +maybe-configure-stagefeedback-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-configure-stagefeedback-target-libstdc++-v3: configure-stagefeedback-target-libstdc++-v3 +configure-stagefeedback-target-libstdc++-v3: + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + echo "Checking multilib configuration for libstdc++-v3..."; \ + $(CC_FOR_TARGET) --print-multi-lib > $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp 2> /dev/null ; \ + if test -r $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + if cmp -s $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; then \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp; \ + else \ + rm -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile; \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + else \ + mv $(TARGET_SUBDIR)/libstdc++-v3/multilib.tmp $(TARGET_SUBDIR)/libstdc++-v3/multilib.out; \ + fi; \ + test ! -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile || exit 0; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ + echo Configuring stage feedback in $(TARGET_SUBDIR)/libstdc++-v3 ; \ + $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libstdc++-v3 ; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 || exit 1; \ + case $(srcdir) in \ + /* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \ + *) topdir=`echo $(TARGET_SUBDIR)/libstdc++-v3/ | \ + sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \ + esac; \ + srcdiroption="--srcdir=$${topdir}/libstdc++-v3"; \ + libsrcdir="$$s/libstdc++-v3"; \ + $(SHELL) $${libsrcdir}/configure \ + $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ + --target=${target_alias} $${srcdiroption} \ + --with-build-libsubdir=$(HOST_SUBDIR) \ + $(STAGEfeedback_CONFIGURE_FLAGS) +@endif target-libstdc++-v3-bootstrap + + + .PHONY: all-target-libstdc++-v3 maybe-all-target-libstdc++-v3 @@ -37619,16 +43302,274 @@ all-target-libstdc++-v3: stage_current TARGET-target-libstdc++-v3=all maybe-all-target-libstdc++-v3: all-target-libstdc++-v3 all-target-libstdc++-v3: configure-target-libstdc++-v3 - @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(RAW_CXX_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libstdc++-v3 && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' $(TARGET-target-libstdc++-v3)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + $(TARGET-target-libstdc++-v3)) @endif target-libstdc++-v3 +.PHONY: all-stage1-target-libstdc++-v3 maybe-all-stage1-target-libstdc++-v3 +.PHONY: clean-stage1-target-libstdc++-v3 maybe-clean-stage1-target-libstdc++-v3 +maybe-all-stage1-target-libstdc++-v3: +maybe-clean-stage1-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-all-stage1-target-libstdc++-v3: all-stage1-target-libstdc++-v3 +all-stage1: all-stage1-target-libstdc++-v3 +TARGET-stage1-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage1-target-libstdc++-v3: configure-stage1-target-libstdc++-v3 + @[ $(current_stage) = stage1 ] || $(MAKE) stage1-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE1_TFLAGS)" \ + $(TARGET-stage1-target-libstdc++-v3) + +maybe-clean-stage1-target-libstdc++-v3: clean-stage1-target-libstdc++-v3 +clean-stage1: clean-stage1-target-libstdc++-v3 +clean-stage1-target-libstdc++-v3: + @if [ $(current_stage) = stage1 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage1-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage1-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + clean +@endif target-libstdc++-v3-bootstrap + + +.PHONY: all-stage2-target-libstdc++-v3 maybe-all-stage2-target-libstdc++-v3 +.PHONY: clean-stage2-target-libstdc++-v3 maybe-clean-stage2-target-libstdc++-v3 +maybe-all-stage2-target-libstdc++-v3: +maybe-clean-stage2-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-all-stage2-target-libstdc++-v3: all-stage2-target-libstdc++-v3 +all-stage2: all-stage2-target-libstdc++-v3 +TARGET-stage2-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage2-target-libstdc++-v3: configure-stage2-target-libstdc++-v3 + @[ $(current_stage) = stage2 ] || $(MAKE) stage2-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE2_TFLAGS)" \ + $(TARGET-stage2-target-libstdc++-v3) + +maybe-clean-stage2-target-libstdc++-v3: clean-stage2-target-libstdc++-v3 +clean-stage2: clean-stage2-target-libstdc++-v3 +clean-stage2-target-libstdc++-v3: + @if [ $(current_stage) = stage2 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage2-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage2-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + \ + clean +@endif target-libstdc++-v3-bootstrap + + +.PHONY: all-stage3-target-libstdc++-v3 maybe-all-stage3-target-libstdc++-v3 +.PHONY: clean-stage3-target-libstdc++-v3 maybe-clean-stage3-target-libstdc++-v3 +maybe-all-stage3-target-libstdc++-v3: +maybe-clean-stage3-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-all-stage3-target-libstdc++-v3: all-stage3-target-libstdc++-v3 +all-stage3: all-stage3-target-libstdc++-v3 +TARGET-stage3-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage3-target-libstdc++-v3: configure-stage3-target-libstdc++-v3 + @[ $(current_stage) = stage3 ] || $(MAKE) stage3-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE3_TFLAGS)" \ + $(TARGET-stage3-target-libstdc++-v3) + +maybe-clean-stage3-target-libstdc++-v3: clean-stage3-target-libstdc++-v3 +clean-stage3: clean-stage3-target-libstdc++-v3 +clean-stage3-target-libstdc++-v3: + @if [ $(current_stage) = stage3 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage3-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage3-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + \ + clean +@endif target-libstdc++-v3-bootstrap + + +.PHONY: all-stage4-target-libstdc++-v3 maybe-all-stage4-target-libstdc++-v3 +.PHONY: clean-stage4-target-libstdc++-v3 maybe-clean-stage4-target-libstdc++-v3 +maybe-all-stage4-target-libstdc++-v3: +maybe-clean-stage4-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-all-stage4-target-libstdc++-v3: all-stage4-target-libstdc++-v3 +all-stage4: all-stage4-target-libstdc++-v3 +TARGET-stage4-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stage4-target-libstdc++-v3: configure-stage4-target-libstdc++-v3 + @[ $(current_stage) = stage4 ] || $(MAKE) stage4-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGE4_TFLAGS)" \ + $(TARGET-stage4-target-libstdc++-v3) + +maybe-clean-stage4-target-libstdc++-v3: clean-stage4-target-libstdc++-v3 +clean-stage4: clean-stage4-target-libstdc++-v3 +clean-stage4-target-libstdc++-v3: + @if [ $(current_stage) = stage4 ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stage4-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stage4-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + \ + clean +@endif target-libstdc++-v3-bootstrap + + +.PHONY: all-stageprofile-target-libstdc++-v3 maybe-all-stageprofile-target-libstdc++-v3 +.PHONY: clean-stageprofile-target-libstdc++-v3 maybe-clean-stageprofile-target-libstdc++-v3 +maybe-all-stageprofile-target-libstdc++-v3: +maybe-clean-stageprofile-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-all-stageprofile-target-libstdc++-v3: all-stageprofile-target-libstdc++-v3 +all-stageprofile: all-stageprofile-target-libstdc++-v3 +TARGET-stageprofile-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stageprofile-target-libstdc++-v3: configure-stageprofile-target-libstdc++-v3 + @[ $(current_stage) = stageprofile ] || $(MAKE) stageprofile-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ + $(TARGET-stageprofile-target-libstdc++-v3) + +maybe-clean-stageprofile-target-libstdc++-v3: clean-stageprofile-target-libstdc++-v3 +clean-stageprofile: clean-stageprofile-target-libstdc++-v3 +clean-stageprofile-target-libstdc++-v3: + @if [ $(current_stage) = stageprofile ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stageprofile-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stageprofile-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + \ + clean +@endif target-libstdc++-v3-bootstrap + + +.PHONY: all-stagefeedback-target-libstdc++-v3 maybe-all-stagefeedback-target-libstdc++-v3 +.PHONY: clean-stagefeedback-target-libstdc++-v3 maybe-clean-stagefeedback-target-libstdc++-v3 +maybe-all-stagefeedback-target-libstdc++-v3: +maybe-clean-stagefeedback-target-libstdc++-v3: +@if target-libstdc++-v3-bootstrap +maybe-all-stagefeedback-target-libstdc++-v3: all-stagefeedback-target-libstdc++-v3 +all-stagefeedback: all-stagefeedback-target-libstdc++-v3 +TARGET-stagefeedback-target-libstdc++-v3 = $(TARGET-target-libstdc++-v3) +all-stagefeedback-target-libstdc++-v3: configure-stagefeedback-target-libstdc++-v3 + @[ $(current_stage) = stagefeedback ] || $(MAKE) stagefeedback-start + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ + $(RAW_CXX_TARGET_EXPORTS) \ + \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ + $(TARGET-stagefeedback-target-libstdc++-v3) + +maybe-clean-stagefeedback-target-libstdc++-v3: clean-stagefeedback-target-libstdc++-v3 +clean-stagefeedback: clean-stagefeedback-target-libstdc++-v3 +clean-stagefeedback-target-libstdc++-v3: + @if [ $(current_stage) = stagefeedback ]; then \ + [ -f $(TARGET_SUBDIR)/libstdc++-v3/Makefile ] || exit 0; \ + else \ + [ -f $(TARGET_SUBDIR)/stagefeedback-libstdc++-v3/Makefile ] || exit 0; \ + $(MAKE) stagefeedback-start; \ + fi; \ + cd $(TARGET_SUBDIR)/libstdc++-v3 && \ + $(MAKE) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + \ + clean +@endif target-libstdc++-v3-bootstrap + + + + .PHONY: check-target-libstdc++-v3 maybe-check-target-libstdc++-v3 @@ -38065,7 +44006,8 @@ all-target-libmudflap: configure-target-libmudflap s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libmudflap && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libmudflap)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libmudflap)) @endif target-libmudflap @@ -38506,7 +44448,8 @@ all-target-libssp: configure-target-libssp s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libssp && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libssp)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libssp)) @endif target-libssp @@ -38947,7 +44890,8 @@ all-target-newlib: configure-target-newlib s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/newlib && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-newlib)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-newlib)) @endif target-newlib @@ -39380,6 +45324,7 @@ configure-stage1-target-libgcc: @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ 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 \ @@ -39394,8 +45339,9 @@ configure-stage1-target-libgcc: fi; \ test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ $(NORMAL_TARGET_EXPORTS) \ - CFLAGS="$(STAGE1_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(STAGE1_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ echo Configuring stage 1 in $(TARGET_SUBDIR)/libgcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \ cd $(TARGET_SUBDIR)/libgcc || exit 1; \ @@ -39409,8 +45355,7 @@ configure-stage1-target-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)" + $(STAGE1_CONFIGURE_FLAGS) @endif target-libgcc-bootstrap .PHONY: configure-stage2-target-libgcc maybe-configure-stage2-target-libgcc @@ -39422,6 +45367,7 @@ configure-stage2-target-libgcc: @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ 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 \ @@ -39437,8 +45383,9 @@ configure-stage2-target-libgcc: test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ $(NORMAL_TARGET_EXPORTS) \ \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ echo Configuring stage 2 in $(TARGET_SUBDIR)/libgcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \ cd $(TARGET_SUBDIR)/libgcc || exit 1; \ @@ -39453,7 +45400,7 @@ configure-stage2-target-libgcc: $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE2_CONFIGURE_FLAGS) @endif target-libgcc-bootstrap .PHONY: configure-stage3-target-libgcc maybe-configure-stage3-target-libgcc @@ -39465,6 +45412,7 @@ configure-stage3-target-libgcc: @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ 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 \ @@ -39480,8 +45428,9 @@ configure-stage3-target-libgcc: test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ $(NORMAL_TARGET_EXPORTS) \ \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ echo Configuring stage 3 in $(TARGET_SUBDIR)/libgcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \ cd $(TARGET_SUBDIR)/libgcc || exit 1; \ @@ -39496,7 +45445,7 @@ configure-stage3-target-libgcc: $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE3_CONFIGURE_FLAGS) @endif target-libgcc-bootstrap .PHONY: configure-stage4-target-libgcc maybe-configure-stage4-target-libgcc @@ -39508,6 +45457,7 @@ configure-stage4-target-libgcc: @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ 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 \ @@ -39523,8 +45473,9 @@ configure-stage4-target-libgcc: test ! -f $(TARGET_SUBDIR)/libgcc/Makefile || exit 0; \ $(NORMAL_TARGET_EXPORTS) \ \ - CFLAGS="$(BOOT_CFLAGS)"; export CFLAGS; \ - LIBCFLAGS="$(BOOT_CFLAGS)"; export LIBCFLAGS; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ echo Configuring stage 4 in $(TARGET_SUBDIR)/libgcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \ cd $(TARGET_SUBDIR)/libgcc || exit 1; \ @@ -39539,7 +45490,7 @@ configure-stage4-target-libgcc: $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGE4_CONFIGURE_FLAGS) @endif target-libgcc-bootstrap .PHONY: configure-stageprofile-target-libgcc maybe-configure-stageprofile-target-libgcc @@ -39551,6 +45502,7 @@ configure-stageprofile-target-libgcc: @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ 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 \ @@ -39566,8 +45518,9 @@ configure-stageprofile-target-libgcc: 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; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ echo Configuring stage profile in $(TARGET_SUBDIR)/libgcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \ cd $(TARGET_SUBDIR)/libgcc || exit 1; \ @@ -39582,7 +45535,7 @@ configure-stageprofile-target-libgcc: $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEprofile_CONFIGURE_FLAGS) @endif target-libgcc-bootstrap .PHONY: configure-stagefeedback-target-libgcc maybe-configure-stagefeedback-target-libgcc @@ -39594,6 +45547,7 @@ configure-stagefeedback-target-libgcc: @$(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ 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 \ @@ -39609,8 +45563,9 @@ configure-stagefeedback-target-libgcc: 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; \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS; \ echo Configuring stage feedback in $(TARGET_SUBDIR)/libgcc ; \ $(SHELL) $(srcdir)/mkinstalldirs $(TARGET_SUBDIR)/libgcc ; \ cd $(TARGET_SUBDIR)/libgcc || exit 1; \ @@ -39625,7 +45580,7 @@ configure-stagefeedback-target-libgcc: $(TARGET_CONFIGARGS) --build=${build_alias} --host=${target_alias} \ --target=${target_alias} $${srcdiroption} \ --with-build-libsubdir=$(HOST_SUBDIR) \ - @stage2_werror_flag@ + $(STAGEfeedback_CONFIGURE_FLAGS) @endif target-libgcc-bootstrap @@ -39645,7 +45600,8 @@ all-target-libgcc: configure-target-libgcc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libgcc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgcc)) @endif target-libgcc @@ -39662,10 +45618,18 @@ 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; \ + TFLAGS="$(STAGE1_TFLAGS)"; \ $(NORMAL_TARGET_EXPORTS) \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ - CFLAGS="$(STAGE1_CFLAGS)" LIBCFLAGS="$(STAGE1_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE1_TFLAGS)" \ $(TARGET-stage1-target-libgcc) maybe-clean-stage1-target-libgcc: clean-stage1-target-libgcc @@ -39678,7 +45642,7 @@ clean-stage1-target-libgcc: $(MAKE) stage1-start; \ fi; \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ clean @endif target-libgcc-bootstrap @@ -39695,11 +45659,19 @@ 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; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(NORMAL_TARGET_EXPORTS) \ \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE2_TFLAGS)" \ $(TARGET-stage2-target-libgcc) maybe-clean-stage2-target-libgcc: clean-stage2-target-libgcc @@ -39712,7 +45684,7 @@ clean-stage2-target-libgcc: $(MAKE) stage2-start; \ fi; \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ \ clean @endif target-libgcc-bootstrap @@ -39730,11 +45702,19 @@ 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; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(NORMAL_TARGET_EXPORTS) \ \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE3_TFLAGS)" \ $(TARGET-stage3-target-libgcc) maybe-clean-stage3-target-libgcc: clean-stage3-target-libgcc @@ -39747,7 +45727,7 @@ clean-stage3-target-libgcc: $(MAKE) stage3-start; \ fi; \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ \ clean @endif target-libgcc-bootstrap @@ -39765,11 +45745,19 @@ 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; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(NORMAL_TARGET_EXPORTS) \ \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS)" LIBCFLAGS="$(BOOT_CFLAGS)" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGE4_TFLAGS)" \ $(TARGET-stage4-target-libgcc) maybe-clean-stage4-target-libgcc: clean-stage4-target-libgcc @@ -39782,7 +45770,7 @@ clean-stage4-target-libgcc: $(MAKE) stage4-start; \ fi; \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ \ clean @endif target-libgcc-bootstrap @@ -39800,11 +45788,19 @@ 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; \ + TFLAGS="$(STAGEprofile_TFLAGS)"; \ $(NORMAL_TARGET_EXPORTS) \ \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-generate" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-generate" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEprofile_TFLAGS)" \ $(TARGET-stageprofile-target-libgcc) maybe-clean-stageprofile-target-libgcc: clean-stageprofile-target-libgcc @@ -39817,7 +45813,7 @@ clean-stageprofile-target-libgcc: $(MAKE) stageprofile-start; \ fi; \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ \ clean @endif target-libgcc-bootstrap @@ -39835,11 +45831,19 @@ 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; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(NORMAL_TARGET_EXPORTS) \ \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ - CFLAGS="$(BOOT_CFLAGS) -fprofile-use" LIBCFLAGS="$(BOOT_CFLAGS) -fprofile-use" \ + $(MAKE) $(BASE_FLAGS_TO_PASS) \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)" \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + $(EXTRA_TARGET_FLAGS) \ + TFLAGS="$(STAGEfeedback_TFLAGS)" \ $(TARGET-stagefeedback-target-libgcc) maybe-clean-stagefeedback-target-libgcc: clean-stagefeedback-target-libgcc @@ -39852,7 +45856,7 @@ clean-stagefeedback-target-libgcc: $(MAKE) stagefeedback-start; \ fi; \ cd $(TARGET_SUBDIR)/libgcc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) \ + $(MAKE) $(EXTRA_TARGET_FLAGS) \ \ clean @endif target-libgcc-bootstrap @@ -40291,7 +46295,8 @@ all-target-libgfortran: configure-target-libgfortran s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libgfortran && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libgfortran)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgfortran)) @endif target-libgfortran @@ -40732,7 +46737,8 @@ all-target-libobjc: configure-target-libobjc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libobjc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libobjc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libobjc)) @endif target-libobjc @@ -41173,7 +47179,8 @@ all-target-libtermcap: configure-target-libtermcap s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libtermcap && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libtermcap)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libtermcap)) @endif target-libtermcap @@ -41549,7 +47556,8 @@ all-target-winsup: configure-target-winsup s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/winsup && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-winsup)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-winsup)) @endif target-winsup @@ -41990,7 +47998,8 @@ all-target-libgloss: configure-target-libgloss s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libgloss && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libgloss)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgloss)) @endif target-libgloss @@ -42426,7 +48435,8 @@ all-target-libiberty: configure-target-libiberty s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libiberty && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libiberty)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libiberty)) @endif target-libiberty @@ -42867,7 +48877,8 @@ all-target-gperf: configure-target-gperf s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/gperf && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-gperf)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-gperf)) @endif target-gperf @@ -43308,7 +49319,8 @@ all-target-examples: configure-target-examples s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/examples && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-examples)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-examples)) @endif target-examples @@ -43739,7 +49751,8 @@ all-target-libffi: configure-target-libffi s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libffi && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libffi)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libffi)) @endif target-libffi @@ -44180,7 +50193,8 @@ all-target-libjava: configure-target-libjava s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(RAW_CXX_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libjava && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' $(TARGET-target-libjava)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' \ + $(TARGET-target-libjava)) @endif target-libjava @@ -44621,7 +50635,8 @@ all-target-zlib: configure-target-zlib s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/zlib && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-zlib)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-zlib)) @endif target-zlib @@ -45062,7 +51077,8 @@ all-target-boehm-gc: configure-target-boehm-gc s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/boehm-gc && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-boehm-gc)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-boehm-gc)) @endif target-boehm-gc @@ -45503,7 +51519,8 @@ all-target-qthreads: configure-target-qthreads s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/qthreads && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-qthreads)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-qthreads)) @endif target-qthreads @@ -45944,7 +51961,8 @@ all-target-rda: configure-target-rda s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/rda && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-rda)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-rda)) @endif target-rda @@ -46385,7 +52403,8 @@ all-target-libada: configure-target-libada s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libada && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libada)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libada)) @endif target-libada @@ -46826,7 +52845,8 @@ all-target-libgomp: configure-target-libgomp s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(NORMAL_TARGET_EXPORTS) \ (cd $(TARGET_SUBDIR)/libgomp && \ - $(MAKE) $(TARGET_FLAGS_TO_PASS) $(TARGET-target-libgomp)) + $(MAKE) $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) \ + $(TARGET-target-libgomp)) @endif target-libgomp @@ -47223,19 +53243,63 @@ cross: all-build all-gas all-ld @endif gcc-no-bootstrap @if gcc -.PHONY: check-gcc-c++ + +.PHONY: check-gcc-c check-c +check-gcc-c: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-gcc); +check-c: check-gcc-c + +.PHONY: check-gcc-c++ check-c++ check-gcc-c++: - @if [ -f ./gcc/Makefile ] ; then \ - r=`${PWD_COMMAND}`; export r; \ - s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ - $(HOST_EXPORTS) \ - (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \ - else \ - true; \ - fi + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); +check-c++: check-gcc-c++ check-target-libstdc++-v3 + +.PHONY: check-gcc-fortran check-fortran +check-gcc-fortran: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-fortran); +check-fortran: check-gcc-fortran check-target-libgfortran + +.PHONY: check-gcc-java check-java +check-gcc-java: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-java); +check-java: check-gcc-java check-target-libjava + +.PHONY: check-gcc-ada check-ada +check-gcc-ada: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-ada); +check-ada: check-gcc-ada check-target-libada + +.PHONY: check-gcc-objc check-objc +check-gcc-objc: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-objc); +check-objc: check-gcc-objc check-target-libobjc + +.PHONY: check-gcc-obj-c++ check-obj-c++ +check-gcc-obj-c++: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-obj-c++); +check-obj-c++: check-gcc-obj-c++ -.PHONY: check-c++ -check-c++: check-target-libstdc++-v3 check-gcc-c++ # Install the gcc headers files, but not the fixed include files, # which Cygnus is not allowed to distribute. This rule is very @@ -47352,6 +53416,26 @@ stage1-start:: mkdir stage1-mpfr; \ mv stage1-mpfr mpfr @endif mpfr +@if mpc + @cd $(HOST_SUBDIR); [ -d stage1-mpc ] || \ + mkdir stage1-mpc; \ + mv stage1-mpc mpc +@endif mpc +@if ppl + @cd $(HOST_SUBDIR); [ -d stage1-ppl ] || \ + mkdir stage1-ppl; \ + mv stage1-ppl ppl +@endif ppl +@if cloog + @cd $(HOST_SUBDIR); [ -d stage1-cloog ] || \ + mkdir stage1-cloog; \ + mv stage1-cloog cloog +@endif cloog +@if gold + @cd $(HOST_SUBDIR); [ -d stage1-gold ] || \ + mkdir stage1-gold; \ + mv stage1-gold gold +@endif gold @if intl @cd $(HOST_SUBDIR); [ -d stage1-intl ] || \ mkdir stage1-intl; \ @@ -47422,6 +53506,26 @@ stage1-end:: cd $(HOST_SUBDIR); mv mpfr stage1-mpfr ; \ fi @endif mpfr +@if mpc + @if test -d $(HOST_SUBDIR)/mpc ; then \ + cd $(HOST_SUBDIR); mv mpc stage1-mpc ; \ + fi +@endif mpc +@if ppl + @if test -d $(HOST_SUBDIR)/ppl ; then \ + cd $(HOST_SUBDIR); mv ppl stage1-ppl ; \ + fi +@endif ppl +@if cloog + @if test -d $(HOST_SUBDIR)/cloog ; then \ + cd $(HOST_SUBDIR); mv cloog stage1-cloog ; \ + fi +@endif cloog +@if gold + @if test -d $(HOST_SUBDIR)/gold ; then \ + cd $(HOST_SUBDIR); mv gold stage1-gold ; \ + fi +@endif gold @if intl @if test -d $(HOST_SUBDIR)/intl ; then \ cd $(HOST_SUBDIR); mv intl stage1-intl ; \ @@ -47459,7 +53563,7 @@ stage1-end:: # 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. +# reconfigured either. .PHONY: stage1-bubble stage1-bubble:: @r=`${PWD_COMMAND}`; export r; \ @@ -47542,6 +53646,30 @@ stage2-start:: mv stage2-mpfr mpfr ; \ mv stage1-mpfr prev-mpfr || test -f stage1-lean @endif mpfr +@if mpc + @cd $(HOST_SUBDIR); [ -d stage2-mpc ] || \ + mkdir stage2-mpc; \ + mv stage2-mpc mpc ; \ + mv stage1-mpc prev-mpc || test -f stage1-lean +@endif mpc +@if ppl + @cd $(HOST_SUBDIR); [ -d stage2-ppl ] || \ + mkdir stage2-ppl; \ + mv stage2-ppl ppl ; \ + mv stage1-ppl prev-ppl || test -f stage1-lean +@endif ppl +@if cloog + @cd $(HOST_SUBDIR); [ -d stage2-cloog ] || \ + mkdir stage2-cloog; \ + mv stage2-cloog cloog ; \ + mv stage1-cloog prev-cloog || test -f stage1-lean +@endif cloog +@if gold + @cd $(HOST_SUBDIR); [ -d stage2-gold ] || \ + mkdir stage2-gold; \ + mv stage2-gold gold ; \ + mv stage1-gold prev-gold || test -f stage1-lean +@endif gold @if intl @cd $(HOST_SUBDIR); [ -d stage2-intl ] || \ mkdir stage2-intl; \ @@ -47626,6 +53754,30 @@ stage2-end:: mv prev-mpfr stage1-mpfr ; : ; \ fi @endif mpfr +@if mpc + @if test -d $(HOST_SUBDIR)/mpc ; then \ + cd $(HOST_SUBDIR); mv mpc stage2-mpc ; \ + mv prev-mpc stage1-mpc ; : ; \ + fi +@endif mpc +@if ppl + @if test -d $(HOST_SUBDIR)/ppl ; then \ + cd $(HOST_SUBDIR); mv ppl stage2-ppl ; \ + mv prev-ppl stage1-ppl ; : ; \ + fi +@endif ppl +@if cloog + @if test -d $(HOST_SUBDIR)/cloog ; then \ + cd $(HOST_SUBDIR); mv cloog stage2-cloog ; \ + mv prev-cloog stage1-cloog ; : ; \ + fi +@endif cloog +@if gold + @if test -d $(HOST_SUBDIR)/gold ; then \ + cd $(HOST_SUBDIR); mv gold stage2-gold ; \ + mv prev-gold stage1-gold ; : ; \ + fi +@endif gold @if intl @if test -d $(HOST_SUBDIR)/intl ; then \ cd $(HOST_SUBDIR); mv intl stage2-intl ; \ @@ -47670,7 +53822,7 @@ stage2-end:: # 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. +# reconfigured either. .PHONY: stage2-bubble stage2-bubble:: stage1-bubble @r=`${PWD_COMMAND}`; export r; \ @@ -47700,6 +53852,7 @@ bootstrap2: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target bootstrap2-lean: @@ -47710,6 +53863,7 @@ bootstrap2-lean: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE2_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target @@ -47774,6 +53928,30 @@ stage3-start:: mv stage3-mpfr mpfr ; \ mv stage2-mpfr prev-mpfr || test -f stage2-lean @endif mpfr +@if mpc + @cd $(HOST_SUBDIR); [ -d stage3-mpc ] || \ + mkdir stage3-mpc; \ + mv stage3-mpc mpc ; \ + mv stage2-mpc prev-mpc || test -f stage2-lean +@endif mpc +@if ppl + @cd $(HOST_SUBDIR); [ -d stage3-ppl ] || \ + mkdir stage3-ppl; \ + mv stage3-ppl ppl ; \ + mv stage2-ppl prev-ppl || test -f stage2-lean +@endif ppl +@if cloog + @cd $(HOST_SUBDIR); [ -d stage3-cloog ] || \ + mkdir stage3-cloog; \ + mv stage3-cloog cloog ; \ + mv stage2-cloog prev-cloog || test -f stage2-lean +@endif cloog +@if gold + @cd $(HOST_SUBDIR); [ -d stage3-gold ] || \ + mkdir stage3-gold; \ + mv stage3-gold gold ; \ + mv stage2-gold prev-gold || test -f stage2-lean +@endif gold @if intl @cd $(HOST_SUBDIR); [ -d stage3-intl ] || \ mkdir stage3-intl; \ @@ -47858,6 +54036,30 @@ stage3-end:: mv prev-mpfr stage2-mpfr ; : ; \ fi @endif mpfr +@if mpc + @if test -d $(HOST_SUBDIR)/mpc ; then \ + cd $(HOST_SUBDIR); mv mpc stage3-mpc ; \ + mv prev-mpc stage2-mpc ; : ; \ + fi +@endif mpc +@if ppl + @if test -d $(HOST_SUBDIR)/ppl ; then \ + cd $(HOST_SUBDIR); mv ppl stage3-ppl ; \ + mv prev-ppl stage2-ppl ; : ; \ + fi +@endif ppl +@if cloog + @if test -d $(HOST_SUBDIR)/cloog ; then \ + cd $(HOST_SUBDIR); mv cloog stage3-cloog ; \ + mv prev-cloog stage2-cloog ; : ; \ + fi +@endif cloog +@if gold + @if test -d $(HOST_SUBDIR)/gold ; then \ + cd $(HOST_SUBDIR); mv gold stage3-gold ; \ + mv prev-gold stage2-gold ; : ; \ + fi +@endif gold @if intl @if test -d $(HOST_SUBDIR)/intl ; then \ cd $(HOST_SUBDIR); mv intl stage3-intl ; \ @@ -47902,7 +54104,7 @@ stage3-end:: # 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. +# reconfigured either. .PHONY: stage3-bubble stage3-bubble:: stage2-bubble @r=`${PWD_COMMAND}`; export r; \ @@ -47936,15 +54138,16 @@ compare: : $(MAKE); $(stage); \ rm -f .bad_compare ; \ echo Comparing stages 2 and 3 ; \ - cd stage3-gcc; \ - files=`find . -name "*$(objext)" -print` ; \ - cd .. ; \ + sed=`echo stage3 | sed 's,^stage,,;s,.,.,g'`; \ + files=`find stage3-* -name "*$(objext)" -print | \ + sed -n s,^stage$$sed-,,p` ; \ for file in $${files} ; do \ - f1=$$r/stage2-gcc/$$file; f2=$$r/stage3-gcc/$$file; \ - @do_compare@ > /dev/null 2>&1; \ + f1=$$r/stage2-$$file; f2=$$r/stage3-$$file; \ + if test ! -f $$f1; then continue; fi; \ + $(do-compare) > /dev/null 2>&1; \ if test $$? -eq 1; then \ case $$file in \ - ./cc*-checksum$(objext) | ./libgcc/* ) \ + @compare_exclusions@) \ echo warning: $$file differs ;; \ *) \ echo $$file differs >> .bad_compare ;; \ @@ -47975,6 +54178,7 @@ bootstrap: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target bootstrap-lean: @@ -47985,6 +54189,7 @@ bootstrap-lean: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target @@ -48006,6 +54211,7 @@ cleanstrap: do-distclean local-clean @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE3_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target @endif gcc-bootstrap @@ -48060,6 +54266,30 @@ stage4-start:: mv stage4-mpfr mpfr ; \ mv stage3-mpfr prev-mpfr || test -f stage3-lean @endif mpfr +@if mpc + @cd $(HOST_SUBDIR); [ -d stage4-mpc ] || \ + mkdir stage4-mpc; \ + mv stage4-mpc mpc ; \ + mv stage3-mpc prev-mpc || test -f stage3-lean +@endif mpc +@if ppl + @cd $(HOST_SUBDIR); [ -d stage4-ppl ] || \ + mkdir stage4-ppl; \ + mv stage4-ppl ppl ; \ + mv stage3-ppl prev-ppl || test -f stage3-lean +@endif ppl +@if cloog + @cd $(HOST_SUBDIR); [ -d stage4-cloog ] || \ + mkdir stage4-cloog; \ + mv stage4-cloog cloog ; \ + mv stage3-cloog prev-cloog || test -f stage3-lean +@endif cloog +@if gold + @cd $(HOST_SUBDIR); [ -d stage4-gold ] || \ + mkdir stage4-gold; \ + mv stage4-gold gold ; \ + mv stage3-gold prev-gold || test -f stage3-lean +@endif gold @if intl @cd $(HOST_SUBDIR); [ -d stage4-intl ] || \ mkdir stage4-intl; \ @@ -48144,6 +54374,30 @@ stage4-end:: mv prev-mpfr stage3-mpfr ; : ; \ fi @endif mpfr +@if mpc + @if test -d $(HOST_SUBDIR)/mpc ; then \ + cd $(HOST_SUBDIR); mv mpc stage4-mpc ; \ + mv prev-mpc stage3-mpc ; : ; \ + fi +@endif mpc +@if ppl + @if test -d $(HOST_SUBDIR)/ppl ; then \ + cd $(HOST_SUBDIR); mv ppl stage4-ppl ; \ + mv prev-ppl stage3-ppl ; : ; \ + fi +@endif ppl +@if cloog + @if test -d $(HOST_SUBDIR)/cloog ; then \ + cd $(HOST_SUBDIR); mv cloog stage4-cloog ; \ + mv prev-cloog stage3-cloog ; : ; \ + fi +@endif cloog +@if gold + @if test -d $(HOST_SUBDIR)/gold ; then \ + cd $(HOST_SUBDIR); mv gold stage4-gold ; \ + mv prev-gold stage3-gold ; : ; \ + fi +@endif gold @if intl @if test -d $(HOST_SUBDIR)/intl ; then \ cd $(HOST_SUBDIR); mv intl stage4-intl ; \ @@ -48188,7 +54442,7 @@ stage4-end:: # 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. +# reconfigured either. .PHONY: stage4-bubble stage4-bubble:: stage3-bubble @r=`${PWD_COMMAND}`; export r; \ @@ -48222,15 +54476,16 @@ compare3: : $(MAKE); $(stage); \ rm -f .bad_compare ; \ echo Comparing stages 3 and 4 ; \ - cd stage4-gcc; \ - files=`find . -name "*$(objext)" -print` ; \ - cd .. ; \ + sed=`echo stage4 | sed 's,^stage,,;s,.,.,g'`; \ + files=`find stage4-* -name "*$(objext)" -print | \ + sed -n s,^stage$$sed-,,p` ; \ for file in $${files} ; do \ - f1=$$r/stage3-gcc/$$file; f2=$$r/stage4-gcc/$$file; \ - @do_compare@ > /dev/null 2>&1; \ + f1=$$r/stage3-$$file; f2=$$r/stage4-$$file; \ + if test ! -f $$f1; then continue; fi; \ + $(do-compare3) > /dev/null 2>&1; \ if test $$? -eq 1; then \ case $$file in \ - ./cc*-checksum$(objext) | ./libgcc/* ) \ + @compare_exclusions@) \ echo warning: $$file differs ;; \ *) \ echo $$file differs >> .bad_compare ;; \ @@ -48261,6 +54516,7 @@ bootstrap4: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target bootstrap4-lean: @@ -48271,6 +54527,7 @@ bootstrap4-lean: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE4_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target @@ -48335,6 +54592,30 @@ stageprofile-start:: mv stageprofile-mpfr mpfr ; \ mv stage1-mpfr prev-mpfr || test -f stage1-lean @endif mpfr +@if mpc + @cd $(HOST_SUBDIR); [ -d stageprofile-mpc ] || \ + mkdir stageprofile-mpc; \ + mv stageprofile-mpc mpc ; \ + mv stage1-mpc prev-mpc || test -f stage1-lean +@endif mpc +@if ppl + @cd $(HOST_SUBDIR); [ -d stageprofile-ppl ] || \ + mkdir stageprofile-ppl; \ + mv stageprofile-ppl ppl ; \ + mv stage1-ppl prev-ppl || test -f stage1-lean +@endif ppl +@if cloog + @cd $(HOST_SUBDIR); [ -d stageprofile-cloog ] || \ + mkdir stageprofile-cloog; \ + mv stageprofile-cloog cloog ; \ + mv stage1-cloog prev-cloog || test -f stage1-lean +@endif cloog +@if gold + @cd $(HOST_SUBDIR); [ -d stageprofile-gold ] || \ + mkdir stageprofile-gold; \ + mv stageprofile-gold gold ; \ + mv stage1-gold prev-gold || test -f stage1-lean +@endif gold @if intl @cd $(HOST_SUBDIR); [ -d stageprofile-intl ] || \ mkdir stageprofile-intl; \ @@ -48419,6 +54700,30 @@ stageprofile-end:: mv prev-mpfr stage1-mpfr ; : ; \ fi @endif mpfr +@if mpc + @if test -d $(HOST_SUBDIR)/mpc ; then \ + cd $(HOST_SUBDIR); mv mpc stageprofile-mpc ; \ + mv prev-mpc stage1-mpc ; : ; \ + fi +@endif mpc +@if ppl + @if test -d $(HOST_SUBDIR)/ppl ; then \ + cd $(HOST_SUBDIR); mv ppl stageprofile-ppl ; \ + mv prev-ppl stage1-ppl ; : ; \ + fi +@endif ppl +@if cloog + @if test -d $(HOST_SUBDIR)/cloog ; then \ + cd $(HOST_SUBDIR); mv cloog stageprofile-cloog ; \ + mv prev-cloog stage1-cloog ; : ; \ + fi +@endif cloog +@if gold + @if test -d $(HOST_SUBDIR)/gold ; then \ + cd $(HOST_SUBDIR); mv gold stageprofile-gold ; \ + mv prev-gold stage1-gold ; : ; \ + fi +@endif gold @if intl @if test -d $(HOST_SUBDIR)/intl ; then \ cd $(HOST_SUBDIR); mv intl stageprofile-intl ; \ @@ -48463,7 +54768,7 @@ stageprofile-end:: # 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. +# reconfigured either. .PHONY: stageprofile-bubble stageprofile-bubble:: stage1-bubble @r=`${PWD_COMMAND}`; export r; \ @@ -48546,6 +54851,30 @@ stagefeedback-start:: mv stagefeedback-mpfr mpfr ; \ mv stageprofile-mpfr prev-mpfr || test -f stageprofile-lean @endif mpfr +@if mpc + @cd $(HOST_SUBDIR); [ -d stagefeedback-mpc ] || \ + mkdir stagefeedback-mpc; \ + mv stagefeedback-mpc mpc ; \ + mv stageprofile-mpc prev-mpc || test -f stageprofile-lean +@endif mpc +@if ppl + @cd $(HOST_SUBDIR); [ -d stagefeedback-ppl ] || \ + mkdir stagefeedback-ppl; \ + mv stagefeedback-ppl ppl ; \ + mv stageprofile-ppl prev-ppl || test -f stageprofile-lean +@endif ppl +@if cloog + @cd $(HOST_SUBDIR); [ -d stagefeedback-cloog ] || \ + mkdir stagefeedback-cloog; \ + mv stagefeedback-cloog cloog ; \ + mv stageprofile-cloog prev-cloog || test -f stageprofile-lean +@endif cloog +@if gold + @cd $(HOST_SUBDIR); [ -d stagefeedback-gold ] || \ + mkdir stagefeedback-gold; \ + mv stagefeedback-gold gold ; \ + mv stageprofile-gold prev-gold || test -f stageprofile-lean +@endif gold @if intl @cd $(HOST_SUBDIR); [ -d stagefeedback-intl ] || \ mkdir stagefeedback-intl; \ @@ -48630,6 +54959,30 @@ stagefeedback-end:: mv prev-mpfr stageprofile-mpfr ; : ; \ fi @endif mpfr +@if mpc + @if test -d $(HOST_SUBDIR)/mpc ; then \ + cd $(HOST_SUBDIR); mv mpc stagefeedback-mpc ; \ + mv prev-mpc stageprofile-mpc ; : ; \ + fi +@endif mpc +@if ppl + @if test -d $(HOST_SUBDIR)/ppl ; then \ + cd $(HOST_SUBDIR); mv ppl stagefeedback-ppl ; \ + mv prev-ppl stageprofile-ppl ; : ; \ + fi +@endif ppl +@if cloog + @if test -d $(HOST_SUBDIR)/cloog ; then \ + cd $(HOST_SUBDIR); mv cloog stagefeedback-cloog ; \ + mv prev-cloog stageprofile-cloog ; : ; \ + fi +@endif cloog +@if gold + @if test -d $(HOST_SUBDIR)/gold ; then \ + cd $(HOST_SUBDIR); mv gold stagefeedback-gold ; \ + mv prev-gold stageprofile-gold ; : ; \ + fi +@endif gold @if intl @if test -d $(HOST_SUBDIR)/intl ; then \ cd $(HOST_SUBDIR); mv intl stagefeedback-intl ; \ @@ -48674,7 +55027,7 @@ stagefeedback-end:: # 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. +# reconfigured either. .PHONY: stagefeedback-bubble stagefeedback-bubble:: stageprofile-bubble @r=`${PWD_COMMAND}`; export r; \ @@ -48704,6 +55057,7 @@ profiledbootstrap: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target profiledbootstrap-lean: @@ -48714,6 +55068,7 @@ profiledbootstrap-lean: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGEfeedback_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target @@ -48749,6 +55104,8 @@ do-distclean: distclean-stage1 # Provide a GCC build when we're building target libraries. This does # not work as a dependency, just as the minimum necessary to avoid errors. stage_last: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble # Same as unstage, but not phony and defaulting to stage1-start. We place @@ -48757,10 +55114,10 @@ stage_current: @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi .PHONY: restrap -restrap: +restrap:: @: $(MAKE); $(stage) - rm -rf stage1-$(TARGET_SUBDIR) stage2-* stage3-* stage4-* stageprofile-* stagefeedback-* - $(MAKE) $(RECURSE_FLAGS_TO_PASS) all + rm -rf stage1-$(TARGET_SUBDIR) stage2-* stage3-* stage4-* stageprofile-* stagefeedback-* +restrap:: all @endif gcc-bootstrap # -------------------------------------- @@ -48769,7 +55126,12 @@ restrap: # Generic dependencies for target modules on host stuff, especially gcc @if gcc-bootstrap -configure-target-libstdc++-v3: stage_last +configure-stage1-target-libstdc++-v3: maybe-all-stage1-gcc +configure-stage2-target-libstdc++-v3: maybe-all-stage2-gcc +configure-stage3-target-libstdc++-v3: maybe-all-stage3-gcc +configure-stage4-target-libstdc++-v3: maybe-all-stage4-gcc +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-gcc +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-gcc configure-target-libmudflap: stage_last configure-target-libssp: stage_last configure-target-newlib: stage_last @@ -48880,6 +55242,14 @@ configure-stage3-gcc: maybe-all-stage3-ld configure-stage4-gcc: maybe-all-stage4-ld configure-stageprofile-gcc: maybe-all-stageprofile-ld configure-stagefeedback-gcc: maybe-all-stagefeedback-ld +configure-gcc: maybe-all-gold + +configure-stage1-gcc: maybe-all-stage1-gold +configure-stage2-gcc: maybe-all-stage2-gold +configure-stage3-gcc: maybe-all-stage3-gold +configure-stage4-gcc: maybe-all-stage4-gold +configure-stageprofile-gcc: maybe-all-stageprofile-gold +configure-stagefeedback-gcc: maybe-all-stagefeedback-gold all-gcc: all-libiberty all-stage1-gcc: all-stage1-libiberty @@ -48912,6 +55282,30 @@ 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-mpc + +all-stage1-gcc: maybe-all-stage1-mpc +all-stage2-gcc: maybe-all-stage2-mpc +all-stage3-gcc: maybe-all-stage3-mpc +all-stage4-gcc: maybe-all-stage4-mpc +all-stageprofile-gcc: maybe-all-stageprofile-mpc +all-stagefeedback-gcc: maybe-all-stagefeedback-mpc +all-gcc: maybe-all-ppl + +all-stage1-gcc: maybe-all-stage1-ppl +all-stage2-gcc: maybe-all-stage2-ppl +all-stage3-gcc: maybe-all-stage3-ppl +all-stage4-gcc: maybe-all-stage4-ppl +all-stageprofile-gcc: maybe-all-stageprofile-ppl +all-stagefeedback-gcc: maybe-all-stagefeedback-ppl +all-gcc: maybe-all-cloog + +all-stage1-gcc: maybe-all-stage1-cloog +all-stage2-gcc: maybe-all-stage2-cloog +all-stage3-gcc: maybe-all-stage3-cloog +all-stage4-gcc: maybe-all-stage4-cloog +all-stageprofile-gcc: maybe-all-stageprofile-cloog +all-stagefeedback-gcc: maybe-all-stagefeedback-cloog all-gcc: maybe-all-build-texinfo all-stage1-gcc: maybe-all-build-texinfo @@ -49036,16 +55430,50 @@ 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-mpc: maybe-all-mpfr + +configure-stage1-mpc: maybe-all-stage1-mpfr +configure-stage2-mpc: maybe-all-stage2-mpfr +configure-stage3-mpc: maybe-all-stage3-mpfr +configure-stage4-mpc: maybe-all-stage4-mpfr +configure-stageprofile-mpc: maybe-all-stageprofile-mpfr +configure-stagefeedback-mpc: maybe-all-stagefeedback-mpfr +configure-ppl: maybe-all-gmp + +configure-stage1-ppl: maybe-all-stage1-gmp +configure-stage2-ppl: maybe-all-stage2-gmp +configure-stage3-ppl: maybe-all-stage3-gmp +configure-stage4-ppl: maybe-all-stage4-gmp +configure-stageprofile-ppl: maybe-all-stageprofile-gmp +configure-stagefeedback-ppl: maybe-all-stagefeedback-gmp +configure-ppl: maybe-all-mpfr + +configure-stage1-ppl: maybe-all-stage1-mpfr +configure-stage2-ppl: maybe-all-stage2-mpfr +configure-stage3-ppl: maybe-all-stage3-mpfr +configure-stage4-ppl: maybe-all-stage4-mpfr +configure-stageprofile-ppl: maybe-all-stageprofile-mpfr +configure-stagefeedback-ppl: maybe-all-stagefeedback-mpfr +configure-cloog: maybe-all-ppl + +configure-stage1-cloog: maybe-all-stage1-ppl +configure-stage2-cloog: maybe-all-stage2-ppl +configure-stage3-cloog: maybe-all-stage3-ppl +configure-stage4-cloog: maybe-all-stage4-ppl +configure-stageprofile-cloog: maybe-all-stageprofile-ppl +configure-stagefeedback-cloog: maybe-all-stagefeedback-ppl +configure-gdb: maybe-all-intl configure-gdb: maybe-configure-sim configure-gdb: maybe-all-bfd -all-gdb: maybe-all-intl +configure-gdb: maybe-all-libiconv all-gdb: maybe-all-libiberty +all-gdb: maybe-all-libiconv all-gdb: maybe-all-opcodes all-gdb: maybe-all-readline all-gdb: maybe-all-build-bison all-gdb: maybe-all-build-byacc all-gdb: maybe-all-sim +all-gdb: maybe-all-libdecnumber configure-libgui: maybe-configure-tcl configure-libgui: maybe-configure-tk all-libgui: maybe-all-tcl @@ -49083,6 +55511,22 @@ 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-opcodes: configure-libiberty + +configure-stage1-opcodes: configure-stage1-libiberty +configure-stage2-opcodes: configure-stage2-libiberty +configure-stage3-opcodes: configure-stage3-libiberty +configure-stage4-opcodes: configure-stage4-libiberty +configure-stageprofile-opcodes: configure-stageprofile-libiberty +configure-stagefeedback-opcodes: configure-stagefeedback-libiberty +all-opcodes: maybe-all-libiberty + +all-stage1-opcodes: maybe-all-stage1-libiberty +all-stage2-opcodes: maybe-all-stage2-libiberty +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 configure-binutils: maybe-configure-intl configure-stage1-binutils: maybe-configure-stage1-intl @@ -49258,6 +55702,70 @@ 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-gold: maybe-configure-intl + +configure-stage1-gold: maybe-configure-stage1-intl +configure-stage2-gold: maybe-configure-stage2-intl +configure-stage3-gold: maybe-configure-stage3-intl +configure-stage4-gold: maybe-configure-stage4-intl +configure-stageprofile-gold: maybe-configure-stageprofile-intl +configure-stagefeedback-gold: maybe-configure-stagefeedback-intl +all-gold: maybe-all-libiberty + +all-stage1-gold: maybe-all-stage1-libiberty +all-stage2-gold: maybe-all-stage2-libiberty +all-stage3-gold: maybe-all-stage3-libiberty +all-stage4-gold: maybe-all-stage4-libiberty +all-stageprofile-gold: maybe-all-stageprofile-libiberty +all-stagefeedback-gold: maybe-all-stagefeedback-libiberty +all-gold: maybe-all-intl + +all-stage1-gold: maybe-all-stage1-intl +all-stage2-gold: maybe-all-stage2-intl +all-stage3-gold: maybe-all-stage3-intl +all-stage4-gold: maybe-all-stage4-intl +all-stageprofile-gold: maybe-all-stageprofile-intl +all-stagefeedback-gold: maybe-all-stagefeedback-intl +all-gold: maybe-all-bfd + +all-stage1-gold: maybe-all-stage1-bfd +all-stage2-gold: maybe-all-stage2-bfd +all-stage3-gold: maybe-all-stage3-bfd +all-stage4-gold: maybe-all-stage4-bfd +all-stageprofile-gold: maybe-all-stageprofile-bfd +all-stagefeedback-gold: maybe-all-stagefeedback-bfd +all-gold: maybe-all-build-bison + +all-stage1-gold: maybe-all-build-bison +all-stage2-gold: maybe-all-build-bison +all-stage3-gold: maybe-all-build-bison +all-stage4-gold: maybe-all-build-bison +all-stageprofile-gold: maybe-all-build-bison +all-stagefeedback-gold: maybe-all-build-bison +all-gold: maybe-all-build-byacc + +all-stage1-gold: maybe-all-build-byacc +all-stage2-gold: maybe-all-build-byacc +all-stage3-gold: maybe-all-build-byacc +all-stage4-gold: maybe-all-build-byacc +all-stageprofile-gold: maybe-all-build-byacc +all-stagefeedback-gold: maybe-all-build-byacc +check-gold: maybe-all-binutils + +check-stage1-gold: maybe-all-stage1-binutils +check-stage2-gold: maybe-all-stage2-binutils +check-stage3-gold: maybe-all-stage3-binutils +check-stage4-gold: maybe-all-stage4-binutils +check-stageprofile-gold: maybe-all-stageprofile-binutils +check-stagefeedback-gold: maybe-all-stagefeedback-binutils +check-gold: maybe-all-gas + +check-stage1-gold: maybe-all-stage1-gas +check-stage2-gold: maybe-all-stage2-gas +check-stage3-gold: maybe-all-stage3-gas +check-stage4-gold: maybe-all-stage4-gas +check-stageprofile-gold: maybe-all-stageprofile-gas +check-stagefeedback-gold: maybe-all-stagefeedback-gas configure-opcodes: maybe-configure-intl configure-stage1-opcodes: maybe-configure-stage1-intl @@ -49355,6 +55863,7 @@ all-send-pr: maybe-all-prms all-tar: maybe-all-build-texinfo all-uudecode: maybe-all-build-texinfo configure-target-boehm-gc: maybe-configure-target-qthreads +configure-target-boehm-gc: maybe-all-target-libstdc++-v3 configure-target-fastjar: maybe-configure-target-zlib all-target-fastjar: maybe-all-target-zlib all-target-fastjar: maybe-all-target-libiberty @@ -49371,9 +55880,14 @@ 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 +configure-target-libstdc++-v3: maybe-configure-target-libgomp +all-target-libgloss: maybe-all-target-newlib all-target-winsup: maybe-all-target-libiberty all-target-winsup: maybe-all-target-libtermcap +configure-target-libiberty: maybe-all-binutils +configure-target-libiberty: maybe-all-ld +configure-target-newlib: maybe-all-binutils +configure-target-newlib: maybe-all-ld # Dependencies for target modules on other target modules are @@ -49382,6 +55896,12 @@ all-target-winsup: maybe-all-target-libtermcap @if gcc-bootstrap +configure-stage1-target-libstdc++-v3: maybe-all-stage1-target-libgcc +configure-stage2-target-libstdc++-v3: maybe-all-stage2-target-libgcc +configure-stage3-target-libstdc++-v3: maybe-all-stage3-target-libgcc +configure-stage4-target-libstdc++-v3: maybe-all-stage4-target-libgcc +configure-stageprofile-target-libstdc++-v3: maybe-all-stageprofile-target-libgcc +configure-stagefeedback-target-libstdc++-v3: maybe-all-stagefeedback-target-libgcc @endif gcc-bootstrap @if gcc-no-bootstrap @@ -49479,7 +55999,8 @@ config.status: configure # Rebuilding configure. AUTOCONF = autoconf -$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 +$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \ + $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 cd $(srcdir) && $(AUTOCONF) # ------------------------------ diff --git a/Makefile.tpl b/Makefile.tpl index b49001d..f12252b 100644 --- a/Makefile.tpl +++ b/Makefile.tpl @@ -6,11 +6,12 @@ in # # Makefile for directory with subdirs to build. # Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation +# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# 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 +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, @@ -19,10 +20,18 @@ in # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program; see the file COPYING3. If not see +# . # +# First, test for a proper version of make, but only where one is required. + +@if gcc +ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty. +$(error GNU make version 3.80 or newer is required.) +endif +@endif gcc + # ------------------------------- # Standard Autoconf-set variables # ------------------------------- @@ -100,12 +109,30 @@ GDB_NLM_DEPS = # the libraries. RPATH_ENVVAR = @RPATH_ENVVAR@ +# On targets where RPATH_ENVVAR is PATH, a subdirectory of the GCC build path +# is used instead of the directory itself to avoid including built +# executables in PATH. +GCC_SHLIB_SUBDIR = @GCC_SHLIB_SUBDIR@ + # Build programs are put under this directory. BUILD_SUBDIR = @build_subdir@ # This is set by the configure script to the arguments to use when configuring # directories built for the build system. BUILD_CONFIGARGS = @build_configargs@ --with-build-subdir="$(BUILD_SUBDIR)" +# Linker flags to use on the host, for stage1 or when not +# bootstrapping. +STAGE1_LDFLAGS = @stage1_ldflags@ + +# Libraries to use on the host, for stage1 or when not bootstrapping. +STAGE1_LIBS = @stage1_libs@ + +# Linker flags to use for stage2 and later. +POSTSTAGE1_LDFLAGS = @poststage1_ldflags@ + +# Libraries to use for stage2 and later. +POSTSTAGE1_LIBS = @poststage1_libs@ + # This is the list of variables to export in the environment when # configuring any subdirectory. It must also be exported whenever # recursing into a build directory in case that directory's Makefile @@ -116,6 +143,8 @@ BASE_EXPORTS = \ BISON="$(BISON)"; export BISON; \ YACC="$(YACC)"; export YACC; \ M4="$(M4)"; export M4; \ + SED="$(SED)"; export SED; \ + AWK="$(AWK)"; export AWK; \ MAKEINFO="$(MAKEINFO)"; export MAKEINFO; # This is the list of variables to export in the environment when @@ -139,6 +168,12 @@ BUILD_EXPORTS = \ WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \ WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC; +# These variables must be set on the make command line for directories +# built for the build system to override those in BASE_FLAGS_TO_PASSS. +EXTRA_BUILD_FLAGS = \ + CFLAGS="$(CFLAGS_FOR_BUILD)" \ + LDFLAGS="$(LDFLAGS_FOR_BUILD)" + # This is the list of directories to built for the host system. SUBDIRS = @configdirs@ # This is set by the configure script to the arguments to use when configuring @@ -153,16 +188,19 @@ HOST_SUBDIR = @host_subdir@ HOST_EXPORTS = \ $(BASE_EXPORTS) \ CC="$(CC)"; export CC; \ + ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \ CFLAGS="$(CFLAGS)"; export CFLAGS; \ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ CXX="$(CXX)"; export CXX; \ CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \ + GCJ="$(GCJ)"; export GCJ; \ + GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \ AR="$(AR)"; export AR; \ AS="$(AS)"; export AS; \ CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \ DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \ LD="$(LD)"; export LD; \ - LDFLAGS="$(LDFLAGS)"; export LDFLAGS; \ + LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \ NM="$(NM)"; export NM; \ RANLIB="$(RANLIB)"; export RANLIB; \ WINDRES="$(WINDRES)"; export WINDRES; \ @@ -177,8 +215,13 @@ HOST_EXPORTS = \ OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \ TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \ + HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \ GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \ GMPINC="$(HOST_GMPINC)"; export GMPINC; \ + PPLLIBS="$(HOST_PPLLIBS)"; export PPLLIBS; \ + PPLINC="$(HOST_PPLINC)"; export PPLINC; \ + CLOOGLIBS="$(HOST_CLOOGLIBS)"; export CLOOGLIBS; \ + CLOOGINC="$(HOST_CLOOGINC)"; export CLOOGINC; \ @if gcc-bootstrap $(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \ @endif gcc-bootstrap @@ -188,12 +231,19 @@ HOST_EXPORTS = \ POSTSTAGE1_HOST_EXPORTS = \ $(HOST_EXPORTS) \ CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \ - -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/"; export CC; \ - 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; \ - LDFLAGS="$(BOOT_LDFLAGS)"; export LDFLAGS; + -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ \ + $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \ + CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \ + CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/g++$(exeext) \ + -B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \ + -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \ + -I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \ + -I$$r/$(srcdir)/libstdc++-v3/libsupc++ \ + -L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs"; export CXX; \ + CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD; \ + GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \ + LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \ + HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS; # Target libraries are put under this directory: TARGET_SUBDIR = @target_subdir@ @@ -206,13 +256,13 @@ BASE_TARGET_EXPORTS = \ $(BASE_EXPORTS) \ AR="$(AR_FOR_TARGET)"; export AR; \ AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \ - CC="$(CC_FOR_TARGET)"; export CC; \ + CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \ CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \ CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \ CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ - GCJ="$(GCJ_FOR_TARGET)"; export GCJ; \ - GFORTRAN="$(GFORTRAN_FOR_TARGET)"; export GFORTRAN; \ + GCJ="$(GCJ_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GCJ; \ + GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \ DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \ LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \ LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \ @@ -228,16 +278,24 @@ BASE_TARGET_EXPORTS = \ RAW_CXX_TARGET_EXPORTS = \ $(BASE_TARGET_EXPORTS) \ CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \ - CXX="$(RAW_CXX_FOR_TARGET)"; export CXX; + CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; NORMAL_TARGET_EXPORTS = \ $(BASE_TARGET_EXPORTS) \ - CXX="$(CXX_FOR_TARGET)"; export CXX; + CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX; # Where to find GMP HOST_GMPLIBS = @gmplibs@ HOST_GMPINC = @gmpinc@ +# Where to find PPL +HOST_PPLLIBS = @ppllibs@ +HOST_PPLINC = @pplinc@ + +# Where to find CLOOG +HOST_CLOOGLIBS = @clooglibs@ +HOST_CLOOGINC = @clooginc@ + # ---------------------------------------------- # Programs producing files for the BUILD machine # ---------------------------------------------- @@ -254,10 +312,21 @@ PWD_COMMAND = $${PWDCMD-pwd} # compilers to use to create programs which must be run in the build # environment. +AR_FOR_BUILD = @AR_FOR_BUILD@ +AS_FOR_BUILD = @AS_FOR_BUILD@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ - -CXX_FOR_BUILD = $(CXX) +CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@ +CXX_FOR_BUILD = @CXX_FOR_BUILD@ +DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@ +GCJ_FOR_BUILD = @GCJ_FOR_BUILD@ +GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@ +LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ +LD_FOR_BUILD = @LD_FOR_BUILD@ +NM_FOR_BUILD = @NM_FOR_BUILD@ +RANLIB_FOR_BUILD = @RANLIB_FOR_BUILD@ +WINDMC_FOR_BUILD = @WINDMC_FOR_BUILD@ +WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@ # Special variables passed down in EXTRA_GCC_FLAGS. They are defined # here so that they can be overridden by Makefile fragments. @@ -268,7 +337,10 @@ BUILD_PREFIX_1 = @BUILD_PREFIX_1@ # here so that they can be overridden by Makefile fragments. BOOT_CFLAGS= -g -O2 BOOT_LDFLAGS= +BOOT_ADAFLAGS=-gnatpg -gnata +AWK = @AWK@ +SED = @SED@ BISON = @BISON@ YACC = @YACC@ FLEX = @FLEX@ @@ -311,7 +383,21 @@ LDFLAGS = @LDFLAGS@ LIBCFLAGS = $(CFLAGS) CXXFLAGS = @CXXFLAGS@ LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates -PICFLAG = + +TFLAGS = + +# Defaults for all stages; some are overridden below. + +STAGE_CFLAGS = $(BOOT_CFLAGS) +STAGE_TFLAGS = $(TFLAGS) +STAGE_CONFIGURE_FLAGS=@stage2_werror_flag@ + +[+ FOR bootstrap-stage +] +# Defaults for stage [+id+]; some are overridden below. +STAGE[+id+]_CFLAGS = $(STAGE_CFLAGS) +STAGE[+id+]_TFLAGS = $(STAGE_TFLAGS) +STAGE[+id+]_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS) +[+ ENDFOR bootstrap-stage +] # 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 @@ -319,29 +405,44 @@ PICFLAG = # 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_CFLAGS = @stage1_cflags@ STAGE1_CHECKING=@stage1_checking@ STAGE1_LANGUAGES=@stage1_languages@ +# * 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. +STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \ + --disable-coverage --enable-languages="$(STAGE1_LANGUAGES)" + +STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate +STAGEprofile_TFLAGS = $(STAGE2_TFLAGS) + +STAGEfeedback_CFLAGS = $(STAGE3_CFLAGS) -fprofile-use +STAGEfeedback_TFLAGS = $(STAGE3_TFLAGS) + +do-compare = @do_compare@ +do-compare3 = $(do-compare) # ----------------------------------------------- # Programs producing files for the TARGET machine # ----------------------------------------------- -FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@ - AR_FOR_TARGET=@AR_FOR_TARGET@ AS_FOR_TARGET=@AS_FOR_TARGET@ -CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ $(FLAGS_FOR_TARGET) +CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@ # If GCC_FOR_TARGET is not overriden on the command line, then this # variable is passed down to the gcc Makefile, where it is used to # build libgcc2.a. We define it here so that it can itself be # overridden on the command line. -GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ $(FLAGS_FOR_TARGET) -CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@ $(FLAGS_FOR_TARGET) -RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ $(FLAGS_FOR_TARGET) -GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@ $(FLAGS_FOR_TARGET) -GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ $(FLAGS_FOR_TARGET) +GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@ +CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@ +RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@ +GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@ +GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@ DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@ LD_FOR_TARGET=@LD_FOR_TARGET@ @@ -357,17 +458,18 @@ COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@ COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@ COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@ -# During gcc bootstrap, if we use some random cc for stage1 then -# CFLAGS will be just -g. We want to ensure that TARGET libraries -# (which we know are built with gcc) are built with optimizations so -# prepend -O2 when setting CFLAGS_FOR_TARGET. -CFLAGS_FOR_TARGET = -O2 $(CFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) -SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@ -CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) +CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@ +CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@ + LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET) LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates LDFLAGS_FOR_TARGET = -PICFLAG_FOR_TARGET = + +FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@ +SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@ +DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@ + +XGCC_FLAGS_FOR_TARGET = $(FLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET) # ------------------------------------ # Miscellaneous targets and flag lists @@ -404,7 +506,7 @@ HOST_LIB_PATH = [+ FOR host_modules +][+ # Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch @if gcc -HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc:$$r/$(HOST_SUBDIR)/prev-gcc: +HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR): @endif gcc [+ FOR host_modules +][+ IF lib_path +] @@ -418,7 +520,10 @@ HOST_LIB_PATH_[+module+] = \ # Flags to pass down to all sub-makes. BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass +][+ IF optional +] \ "`echo '[+flag+]=$([+flag+])' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"[+ ELSE optional +] \ - "[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +] \ + "[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +][+ FOR bootstrap-stage +] \ + "STAGE[+id+]_CFLAGS=$(STAGE[+id+]_CFLAGS)" \ + "STAGE[+id+]_TFLAGS=$(STAGE[+id+]_TFLAGS)"[+ ENDFOR bootstrap-stage +] \ + "TFLAGS=$(TFLAGS)" \ "CONFIG_SHELL=$(SHELL)" \ "MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)" @@ -433,6 +538,8 @@ EXTRA_HOST_FLAGS = \ 'CC=$(CC)' \ 'CXX=$(CXX)' \ 'DLLTOOL=$(DLLTOOL)' \ + 'GCJ=$(GCJ)' \ + 'GFORTRAN=$(GFORTRAN)' \ 'LD=$(LD)' \ 'LIPO=$(LIPO)' \ 'NM=$(NM)' \ @@ -460,22 +567,27 @@ X11_FLAGS_TO_PASS = \ POSTSTAGE1_FLAGS_TO_PASS = \ CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \ - GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind" \ - LDFLAGS="$(BOOT_LDFLAGS)" \ + CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \ + GNATBIND="$${GNATBIND}" \ + LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)" \ + HOST_LIBS="$(POSTSTAGE1_LIBS)" \ "`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 -# COMPILER_ prefixed variables are not passed down so we expand them here. +# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty, +# so we expand them here. EXTRA_TARGET_FLAGS = \ 'AR=$$(AR_FOR_TARGET)' \ 'AS=$(COMPILER_AS_FOR_TARGET)' \ - 'CC=$$(CC_FOR_TARGET)' \ + 'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'CFLAGS=$$(CFLAGS_FOR_TARGET)' \ - 'CXX=$$(CXX_FOR_TARGET)' \ + 'CXX=$$(CXX_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \ 'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \ + 'GCJ=$$(GCJ_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ + 'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \ 'LD=$(COMPILER_LD_FOR_TARGET)' \ 'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \ 'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \ @@ -484,7 +596,9 @@ EXTRA_TARGET_FLAGS = \ 'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \ 'RANLIB=$$(RANLIB_FOR_TARGET)' \ 'WINDRES=$$(WINDRES_FOR_TARGET)' \ - 'WINDMC=$$(WINDMC_FOR_TARGET)' + 'WINDMC=$$(WINDMC_FOR_TARGET)' \ + 'XGCC_FLAGS_FOR_TARGET=$(XGCC_FLAGS_FOR_TARGET)' \ + "TFLAGS=$$TFLAGS" TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS) @@ -504,6 +618,13 @@ EXTRA_GCC_FLAGS = \ GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS) +@if gcc +BUILD_CONFIG = +ifneq ($(BUILD_CONFIG),) +include $(foreach CONFIG, $(BUILD_CONFIG), $(srcdir)/config/$(CONFIG).mk) +endif +@endif gcc + .PHONY: configure-host configure-host: [+ FOR host_modules +] \ @@ -527,11 +648,18 @@ all: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ +@if gcc-bootstrap if [ -f stage_last ]; then \ + TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_last)_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \ else \ - $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target; \ - fi +@endif gcc-bootstrap + $(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \ +@if gcc-bootstrap + ; \ + fi \ +@endif gcc-bootstrap + && : .PHONY: all-build [+ FOR build_modules +] @@ -812,6 +940,7 @@ configure-stage[+id+]-[+prefix+][+module+]: @$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE[+id+]_TFLAGS)"; \ [+ IF check_multilibs +]echo "Checking multilib configuration for [+module+]..."; \ $(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null ; \ @@ -827,9 +956,14 @@ configure-stage[+id+]-[+prefix+][+module+]: fi; \ [+ 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; \ + [+poststage1_exports+][+ ENDIF prev +][+ IF prefix +] \ + CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;[+ ELSE prefix +] \ + CFLAGS="$(STAGE[+id+]_CFLAGS)"; export CFLAGS; \ + CXXFLAGS="$(STAGE[+id+]_CFLAGS)"; export CXXFLAGS;[+ IF prev +] \ + LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \ + LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+ ENDIF prefix +] \ echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \ $(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \ cd [+subdir+]/[+module+] || exit 1; \ @@ -842,9 +976,10 @@ configure-stage[+id+]-[+prefix+][+module+]: libsrcdir="$$s/[+module+]"; \ $(SHELL) $${libsrcdir}/configure \ [+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+] + --target=[+target_alias+] $${srcdiroption} [+ IF prev +]\ + --with-build-libsubdir=$(HOST_SUBDIR) [+ ENDIF prev +]\ + $(STAGE[+id+]_CONFIGURE_FLAGS)[+ IF extra_configure_flags +] \ + [+extra_configure_flags+][+ ENDIF extra_configure_flags +] @endif [+prefix+][+module+]-bootstrap [+ ENDFOR bootstrap_stage +] [+ ENDIF bootstrap +] @@ -866,7 +1001,8 @@ all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELS s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ [+exports+] \ (cd [+subdir+]/[+module+] && \ - $(MAKE) [+args+] [+extra_make_flags+] $(TARGET-[+prefix+][+module+])) + $(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+extra_make_flags+] \ + $(TARGET-[+prefix+][+module+])) @endif [+prefix+][+module+] [+ IF bootstrap +] @@ -883,13 +1019,25 @@ all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+] @[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE[+id+]_TFLAGS)"; \ [+exports+][+ IF prev +] \ [+poststage1_exports+][+ ENDIF prev +] \ cd [+subdir+]/[+module+] && \ - $(MAKE) [+args+] \ - CFLAGS="[+stage_cflags+]" LIBCFLAGS="[+stage_cflags+]" [+ + $(MAKE) $(BASE_FLAGS_TO_PASS)[+ IF prefix +] \ + CFLAGS="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"[+ ELSE prefix +] \ + CFLAGS="$(STAGE[+id+]_CFLAGS)" \ + CXXFLAGS="$(STAGE[+id+]_CFLAGS)"[+ IF prev +] \ + LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \ + LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \ + CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \ + CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \ + LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \ + [+args+] [+ IF prev +][+poststage1_args+][+ ENDIF prev +] [+extra_make_flags+] \ + TFLAGS="$(STAGE[+id+]_TFLAGS)" \ $(TARGET-stage[+id+]-[+prefix+][+module+]) maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+] @@ -920,7 +1068,8 @@ clean-stage[+id+]-[+prefix+][+module+]: target_alias=(get "target" "${target_alias}") args="$(BUILD_CONFIGARGS)" no-config-site=true +] -[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)" +] +[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)" + args="$(EXTRA_BUILD_FLAGS)" +] [+ ENDFOR build_module +] # -------------------------------------- @@ -937,7 +1086,7 @@ clean-stage[+id+]-[+prefix+][+module+]: [+ all prefix="" subdir="$(HOST_SUBDIR)" exports="$(HOST_EXPORTS)" poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)" - args="$(FLAGS_TO_PASS)" + args="$(EXTRA_HOST_FLAGS)" poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +] .PHONY: check-[+module+] maybe-check-[+module+] @@ -1035,7 +1184,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+] [+ all prefix="target-" subdir="$(TARGET_SUBDIR)" exports="$(RAW_CXX_TARGET_EXPORTS)" - args="$(TARGET_FLAGS_TO_PASS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +] + args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +] [+ ELSE +] [+ configure prefix="target-" subdir="$(TARGET_SUBDIR)" check_multilibs=true @@ -1046,7 +1195,7 @@ maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+] [+ all prefix="target-" subdir="$(TARGET_SUBDIR)" exports="$(NORMAL_TARGET_EXPORTS)" - args="$(TARGET_FLAGS_TO_PASS)" +] + args="$(EXTRA_TARGET_FLAGS)" +] [+ ENDIF +] .PHONY: check-target-[+module+] maybe-check-target-[+module+] @@ -1155,19 +1304,15 @@ cross: all-build all-gas all-ld @endif gcc-no-bootstrap @if gcc -.PHONY: check-gcc-c++ -check-gcc-c++: - @if [ -f ./gcc/Makefile ] ; then \ - r=`${PWD_COMMAND}`; export r; \ - s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ - $(HOST_EXPORTS) \ - (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) check-c++); \ - else \ - true; \ - fi - -.PHONY: check-c++ -check-c++: check-target-libstdc++-v3 check-gcc-c++ +[+ FOR languages +] +.PHONY: check-gcc-[+language+] check-[+language+] +check-gcc-[+language+]: + r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + $(HOST_EXPORTS) \ + (cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) [+gcc-check-target+]); +check-[+language+]: check-gcc-[+language+][+ IF lib-check-target +] [+ lib-check-target +][+ ENDIF lib-check-target +] +[+ ENDFOR languages +] # Install the gcc headers files, but not the fixed include files, # which Cygnus is not allowed to distribute. This rule is very @@ -1276,7 +1421,7 @@ stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +] # 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. +# reconfigured either. .PHONY: stage[+id+]-bubble stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +] @r=`${PWD_COMMAND}`; export r; \ @@ -1311,15 +1456,16 @@ do-clean: clean-stage[+id+] : $(MAKE); $(stage); \ rm -f .bad_compare ; \ echo Comparing stages [+prev+] and [+id+] ; \ - cd stage[+id+]-gcc; \ - files=`find . -name "*$(objext)" -print` ; \ - cd .. ; \ + sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \ + files=`find stage[+id+]-* -name "*$(objext)" -print | \ + sed -n s,^stage$$sed-,,p` ; \ for file in $${files} ; do \ - f1=$$r/stage[+prev+]-gcc/$$file; f2=$$r/stage[+id+]-gcc/$$file; \ - @do_compare@ > /dev/null 2>&1; \ + f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \ + if test ! -f $$f1; then continue; fi; \ + $(do-[+compare-target+]) > /dev/null 2>&1; \ if test $$? -eq 1; then \ case $$file in \ - ./cc*-checksum$(objext) | ./libgcc/* ) \ + @compare_exclusions@) \ echo warning: $$file differs ;; \ *) \ echo $$file differs >> .bad_compare ;; \ @@ -1350,6 +1496,7 @@ do-clean: clean-stage[+id+] @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE[+id+]_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target [+bootstrap-target+]-lean: @@ -1360,6 +1507,7 @@ do-clean: clean-stage[+id+] @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE[+id+]_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target [+ ENDIF bootstrap-target +] @@ -1382,6 +1530,7 @@ distclean-stage[+id+]:: @: $(MAKE); $(unstage) @r=`${PWD_COMMAND}`; export r; \ s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ + TFLAGS="$(STAGE[+id+]_TFLAGS)"; \ $(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target [+ ENDIF cleanstrap-target +] @endif gcc-bootstrap @@ -1407,6 +1556,8 @@ do-distclean: distclean-stage1 # Provide a GCC build when we're building target libraries. This does # not work as a dependency, just as the minimum necessary to avoid errors. stage_last: + @r=`${PWD_COMMAND}`; export r; \ + s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \ $(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble # Same as unstage, but not phony and defaulting to stage1-start. We place @@ -1415,11 +1566,11 @@ stage_current: @if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi .PHONY: restrap -restrap: +restrap:: @: $(MAKE); $(stage) - rm -rf stage1-$(TARGET_SUBDIR) [+ FOR bootstrap-stage +][+ IF prev - +]stage[+id+]-* [+ ENDIF prev +][+ ENDFOR bootstrap-stage +] - $(MAKE) $(RECURSE_FLAGS_TO_PASS) all + rm -rf stage1-$(TARGET_SUBDIR)[+ FOR bootstrap-stage +][+ IF prev + +] stage[+id+]-*[+ ENDIF prev +][+ ENDFOR bootstrap-stage +] +restrap:: all @endif gcc-bootstrap # -------------------------------------- @@ -1450,7 +1601,7 @@ configure-target-[+module+]: maybe-all-gcc[+ [+ ;; These Scheme functions build the bulk of the dependencies. ;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc", - ;; where "maybe-" is only included if HARD is true, and all-gcc + ;; where "maybe-" is only included if HARD is not true, and all-gcc ;; is taken from VAR-NAME. (define dep-target (lambda (module-kind var-name hard) (string-append @@ -1608,7 +1759,8 @@ config.status: configure # Rebuilding configure. AUTOCONF = autoconf -$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 +$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \ + $(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4 cd $(srcdir) && $(AUTOCONF) # ------------------------------ diff --git a/README-maintainer-mode b/README-maintainer-mode index 0115a1e..a350974 100644 --- a/README-maintainer-mode +++ b/README-maintainer-mode @@ -3,7 +3,18 @@ Note that if you configure with --enable-maintainer-mode, you will need special versions of automake, autoconf, libtool and gettext. You will -find the sources for these in ftp://sources.redhat.com/pub/binutils. +find the sources for these in the respective upstream directories: + + ftp://ftp.gnu.org/gnu/autoconf + ftp://ftp.gnu.org/gnu/automake + ftp://ftp.gnu.org/gnu/libtool + ftp://ftp.gnu.org/gnu/gettext + +The required versions of the tools for this tree are + autoconf 2.64 + automake 1.11 + libtool 2.2.6 + gettext 0.14.5 Note - "make distclean" does not work with maintainer mode enabled. The Makefiles in the some of the po/ subdirectories depend upon the diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b598401..316725d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,2391 +1,4470 @@ -2007-12-13 Matthias Klose +2009-10-16 Tristan Gingold - * configure.in: Bump version to 2.18.0 - * configure: Regenerate. + * configure.in: Bump version to 2.20 + * Makefile.am (RELEASE): Set. + * configure, Makefile.in: Regenerate. -2007-11-29 Nick Clifton +2009-10-16 Alan Modra - PR ld/5398 - * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Do not - complain if there is no glue bfd, just return. + PR binutils/10785 + * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Don't bfd_alloc + bim and bim->buffer. bfd_malloc instead. + * peicode.h (pe_ILF_build_a_bfd): Similarly. + (ILF_DATA_SIZE): Don't include bim. + * opncls.c (bfd_close): Test bim->buffer non-NULL before freeing. -2007-10-27 Daniel Jacobowitz +2009-10-06 Tristan Gingold - * elfxx-mips.c (mips_elf_sort_hash_table_f): Handle forced - local symbols specially. - (mips_elf_set_global_got_offset): Skip forced local symbols. + * configure.in: Bump version to 2.19.92 + * configure: Regenerate. -2007-10-25 Joseph Myers +2009-10-01 Dave Korn + + * cofflink.c (_bfd_coff_generic_relocate_section): Look for the aux + symbol for a weak undef in the auxbfd, not the input bfd. + +2009-10-01 Ulrich Weigand + + * elf32-spu.c (spu_elf_auto_overlay): Insert icache linker script + after .toe instead of before .text section. Set the LMA of all + overlay sections to their icache IA address. + (spu_elf_find_overlays): Determine icache set id without reference + to the LMA. + +2009-09-30 Tristan Gingold + + * configure.com: Use hosts/alphavms.h on both alpha and ia64 VMS. + +2009-09-24 Alan Modra + + PR binutils/10654 + * dwarf2.c (lookup_address_in_line_info_table): Remove workaround + for invalid location lists generated by gcc-2.95 and Intel 6.0 C++. + Remove "function" parm, adjust caller. + +2009-09-23 Jie Zhang + + * elf32-bfin.c (_bfinfdpic_size_got_plt): Make sure empty + .rel.plt and .plt sections are removed. + (elf32_bfinfdpic_size_dynamic_sections): Remove empty .dynbss + section. Remove the duplicated removing of empty .rel.plt + section. + +2009-09-21 Alan Modra + + * elf32-ppc.c (TLS_GET_ADDR_GLINK_SIZE): Define. + (ADD_3_12_2, BEQLR, CMPWI_11_0, LWZ_11_3, LWZ_12_3): Define. + (MR_0_3, MR_3_0): Define. + (struct ppc_elf_link_hash_table): Add no_tls_get_addr_opt. + (ppc_elf_select_plt_layout): Save emit_stub_syms param earlier. + (ppc_elf_tls_setup): Add no_tls_get_addr_opt param and save to hash + table. Check for presense of __tls_get_addr_opt + (allocate_dynrelocs): Increase glink entry size for __tls_get_addr. + (ppc_elf_size_dynamic_sections): Add DT_PPC_TLS_OPT tag. + (write_glink_stub): Add param p. + (ppc_elf_relocate_section): Adjust write_glink_stub call. + (ppc_elf_finish_dynamic_symbol): Emit special glink call stub for + __tls_get_addr. + * elf32-ppc.h (ppc_elf_tls_setup): Update prototype. + * elf64-ppc.c (struct ppc_link_hash_table): Add no_tls_get_addr_opt. + (ppc64_elf_tls_setup): Add no_tls_get_addr_opt param and save to hash + table. Check for presense of __tls_get_addr_opt. + (ppc64_elf_size_dynamic_sections): Add DT_PPC64_TLS_OPT tag. + (LD_R11_0R3, LD_R12_0R3, MR_R0_R3, CMPDI_R11_0, ADD_R3_R12_R13, + BEQLR, MR_R3_R0, MFLR_R11, STD_R11_0R1, BCTRL, LD_R11_0R1, + LD_R2_0R1, MTLR_R11): Define. + (build_tls_get_addr_stub): New function. + (ppc_build_one_stub): Call it. + (ppc_size_one_stub): Add extra size for __tls_get_addr stub. + (ppc64_elf_relocate_section): Don't change nop to ld 2,40(1) for + __tls_get_addr plt call. + * elf64-ppc.h (ppc64_elf_tls_setup): Update prototype. + +2009-09-18 Alan Modra + + PR ld/10406 + * elf32-ppc.c (ppc_elf_howto_raw): Make R_PPC_EMB_SDAI16 and + R_PPC_EMB_SDA2I16 complain_overflow_signed. + (create_sdata_sym): Pass info rather than htab. + Update all callers. Ensure symbols are hidden. + (ppc_elf_check_relocs): Allow SDAREL16 when shared. + (ppc_elf_size_dynamic_sections): When shared, equate _SDA_BASE_ to + _GLOBAL_OFFSET_TABLE_. + (elf_finish_pointer_linker_section): Don't assume that sdata base + symbol is always at 0x8000 offset. Don't subtract the addend here. + (is_static_defined): New function. + (ppc_elf_relocate_section): Verify symbol base used in SDA relocs + is statically defined. Clear addend for EMB_SDAI16 and EMB_SDA2I16 + relocs. Downgrade error on unexpected section for EMB_SDA2REL + reloc symbols to a warning. + +2009-09-18 Nick Clifton + + * po/es.po: Updated Spanish translation. + * po/vi.po: Updated Vietnamese translation. + +2009-09-18 Alan Modra + + * elf64-ppc.c (follow_link, elf_follow_link, ppc_follow_link): New + functions. Use throughout. + (ppc64_elf_copy_indirect_symbol): Set direct symbol "oh" field + from indirect symbol. + (lookup_fdh): Rename from get_fdh. Follow indirect sym links. + (add_symbol_adjust): Simplify. + (defined_code_entry, defined_func_desc): New functions. + (ppc64_elf_gc_keep): Follow indirect sym links. Use defined_code_entry. + (ppc64_elf_gc_mark_dynamic_ref): Use defined_func_desc and + defined_code_entry to follow indirect sym links. + (ppc64_elf_gc_mark_hook, func_desc_adjust): Likewise. + (ppc_type_of_stub): Follow indirect sym links. + (toc_adjusting_stub_needed): Likewise. + (ppc_build_one_stub): Likewise. Make undefined dot-symbols weak + rather than defining them at stub. + (ppc64_elf_relocate_section): Rewrite call test to avoid multiple + assignments in test. + +2009-09-14 Daniel Jacobowitz + + * elf32-arm.c (elf32_arm_final_link_relocate): Set sym_flags + for the mode of target PLT entries. + (allocate_dynrelocs): Only adjust symbol type if setting its + value. + +2009-09-14 Nick Clifton + + * po/fi.po: Updated Finnish translation. + +2009-09-11 Nick Clifton + + * po/bfd.pot: Updated by the Translation project. + +2009-09-11 Nick Clifton + + * rs6000-core.c (read_hdr): Fix typo in recent C++ compatibility + changes. + +2009-09-11 Jie Zhang + + * elf32-bfin.c (bfinfdpic_relocs_info_find): Just return + NULL if `ht' is NULL. + +2009-09-10 Tristan Gingold + + * configure.in: Bump version to 2.19.91 + * configure: Regenerate. - * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Do not add - PT_NULL header when not linking. +2009-09-09 Martin Thuresson + + Update sources to compile cleanly with -Wc++-compat: + * aoutx.h: Add casts. + * archive.c: Add casts. + * archive64.c: Add casts. + * archures.c: Add casts. + * bfd-in2.h: Regenerated. + * bfd.c: Add casts. (enum bfd_direction): Move out to top level. + * bfdio.c: Add casts. + * binary.c: Add casts. + * cache.c (cache_bseek,cache_bread_1,cache_bwrite): Updated + parameter to use enum value instead of int. + * coffcode.h: Add casts. + * coffgen.c: Add casts. + * cofflink.c: Add casts. + * compress.c: Add casts. + * dwarf1.c: Add casts. + * dwarf2.c: Add casts. (struct dwarf2_debug): Rename member bfd to + bfd_ptr. Update code to use new name. + * elf-attrs.c: Add casts. + * elf-bfd.h (elf_link_virtual_table_entry): Gives name to + anonymous struct. (union gotplt_union, struct + elf_link_virtual_table_entry): Move to top level. + * elf-eh-frame.c: Add casts. + * elf-strtab.c: Add casts. + * elf.c: Add casts. (_bfd_elm_make_Section_from_phdr): Change + argument name from typename to type_name. + * elf32-i386.c: Add casts. + * elf64-x86-64.c: Add casts. + * elfcode.h: Add casts. + * elfcore.h: Add casts. + * elflink.c: Add casts. + * format.c: Add casts. + * hash.c: Add casts. + * ihex.c: Add casts. + * libaout.h (enum aout_subformat, enum aout_magic): Move to top + level. + * libbfd.c: Add casts. + * linker.c: Add casts. + * merge.c: Add casts. + * opncls.c: Add casts. + * peXXigen.c: Add casts. + * peicode.h: Add casts. + * reloc.c: Add casts. + * section.c: Add casts. + * simple.c: Add casts. + * srec.c: Add casts. + * stabs.c: Add casts. + * syms.c: Add casts. + * targets.c: Add casts. + * tekhex.c: Add casts. + * verilog.c: Add casts. + +2009-09-09 Nick Clifton + + PR 10478: + * elf.c (bfd_section_from_shdr): Do not reject sparc binaries with + section headers containing sh_link values of SHN_BEFORE or + SHN_AFTER. + * elfcode.h (elf_object_p): Likewise. + +2009-09-09 Alan Modra + + * elf32-xtensa.c (elf_xtensa_relax_section): Delete -r check. + +2009-09-07 Tristan Gingold + + * po/bfd.pot: Regenerate + * po/SRC-POTFILES.in: Regenerate + +2009-09-07 Tristan Gingold + + * bfd.m4 (BFD_HAVE_TIME_TYPE_MEMBER, + BFD_HAVE_SYS_STAT_TYPE_MEMBER): Moved to gas/acinclude.m4 + * configure.in: Move tests for tm_gmtoff, st_mtim.tv_sec and + st_mtim.tv_nsec to gas/configure.in + (bfd_elf64_ia64_vms_vec): Remove vmsutil.lo + * configure: Regenerate. + * config.in: Regenerate. + * vmsutil.c: Moved to gas/config/te-vms.c + * vmsutil.h: Removed. + * Makefile.am (BFD32_BACKENDS_CFILES): Remove vmsutil.c + (BFD32_BACKENDS): Remove vmsutil.lo + * Makefile.in: Regenerate. -2007-10-25 Daniel Jacobowitz +2009-09-05 Martin Thuresson + + * coff-arm.c (coff_arm_relocate_section) + (record_thumb_to_arm_glue, bfd_arm_process_before_allocation): + Change member name class to symbol_class. + * coff-i960.c (coff_i960_relocate_section) Rename variable + class to class_val. Change member name class to symbol_class. + * coff-rs6000.c (_bfd_xcoff_swap_aux_in) + (_bfd_xcoff_swap_aux_out): Rename arguments class to in_class. + * coff-stgo32.c (adjust_aux_in_post) + (adjust_aux_out_pre, adjust_aux_out_post): Rename arguments class + to in_class. + * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in) + (_bfd_xcoff64_swap_aux_out): Rename arguments class to in_class. + * coffcode.h (coff_pointerize_aux_hook): Rename variable class + to n_sclass. + * coffgen.c (coff_write_symbol, coff_pointerize_aux): Rename + variables named class to n_sclass. (coff_write_symbols): Rename + variable class to sym_class. (bfd_coff_set_symbol_class): Rename + argument class to symbol_class. + * cofflink.c (_bfd_coff_link_hash_newfunc) + (coff_link_add_symbols, _bfd_coff_link_input_bfd) + (_bfd_coff_write_global_sym, _bfd_coff_generic_relocate_section): + Update code to use renamed members. + * coffswap.h (coff_swap_aux_in, coff_swap_aux_out): Rename + argument class to in_class. + * libcoff-in.h (struct coff_link_hash_entry, struct + coff_debug_merge_type) Renamed members class to symbol_class and + type_class. + * libcoff.h Regenerated. + * peXXigen.c: (_bfd_XXi_swap_aux_in, _bfd_XXi_swap_aux_out): + Rename argument class to in_class. + * pef.c (bfd_pef_parse_imported_symbol): Update code to use + renamed members. + * pef.h (struct bfd_pef_imported_symbol): Changed name of + member class to symbol_class. + +2009-09-04 Tristan Gingold + + * configure.in: Bump version to 2.19.90 + * configure: Regenerated. - * elf.c (assign_file_positions_for_load_sections): Trust - p_align_valid. - (copy_elf_program_header): Copy PT_NULL segments. +2009-09-04 Alan Modra -2007-09-14 Alan Modra + * elf32-spu.c (spu_elf_relocate_section): Correct 2009-07-24 logic. - * opncls.c (find_separate_debug_file): Ensure bfd_set_error has - been called on all error return paths. - (bfd_fill_in_gnu_debuglink_section): Use bfd_malloc, not malloc. - Clear padding after filename +2009-09-04 Jie Zhang -2007-09-14 Alan Modra + * elf32-bfin.c (elf32_bfinfdpic_create_dynamic_sections): Always + create .rela.bss. + (elf32_bfinfdpic_size_dynamic_sections): Set SEC_EXCLUDE flag + for empty .rela.bss and .rel.plt sections. - * format.c (bfd_check_format_matches): Record matching targets even - when "matching" is NULL to allow bfd_associated_vector matches. - Consolidate error return code. Consolidate ok return code. Always - restore original target and format on error. +2009-09-03 Adam Nemet -2007-08-28 Daniel Jacobowitz + * elfxx-mips.c (mips_elf_calculate_relocation): Don't relocate + R_MIPS_JALR unless symbol resolves locally. - * Makefile.am (RELEASE): Unset. - * Makefile.in: Regenerated. +2009-09-03 Adam Nemet -2007-08-28 Daniel Jacobowitz + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Don't set + has_static_relocs for R_MIPS_JALR. - * configure.in (VERSION): Update. - * Makefile.am (RELEASE): Set. - * configure, Makefile.in: Regenerated. +2009-09-03 Maciej W. Rozycki -2007-08-28 David Heine + * elf64-mips.c (mips_elf64_howto_table_rela): Add support for + R_MIPS_TLS_DTPMOD64 and R_MIPS_TLS_TPREL64, replacing the + respective stubs. - * elf32-xtensa.c (compute_ebb_actions): Update removed_bytes when - narrowing instructions. +2009-09-01 H.J. Lu -2007-08-28 Robert Sebastian Gerus + * elf64-x86-64.c (elf64_x86_64_finish_dynamic_symbol): Declare + plt earlier. - * config.bfd: Add support for i[3-7]86-*-dragonfly*. - * configure.in: Likewise. - * configure: Regenerate. +2009-09-01 Tristan Gingold -2007-08-25 Ulrich Weigand - Alan Modra + * makefile.vms: Ported to Itanium VMS. Remove useless variable and + dependencies. Reindent. + * configure.com: Ported to Itanium VMS. Now generates a build.com + to build without make. Add messages but make edit silent. + * hosts/alphavms.h: Add a prototype for stpcpy. + * vms.c: Add a missing include for Alpha VMS. + * elfxx-ia64.c (ELF_OSABI): Define for OpenVMS. - * elf.c (elfcore_grok_spu_note): New function. - (elfcore_read_notes): Call it. +2009-08-31 Jan Beulich -2007-08-20 Richard Sandiford + * elf-bfd.h (bfd_elf_get_default_section_type): Declare. + * elf.c (bfd_elf_get_default_section_type): New. + (elf_fake_sections): Use bfd_elf_get_default_section_type. - * elfxx-mips.c (mips_elf_link_hash_table): Add computed_got_sizes. - (mips_elf_record_global_got_symbol): Increment local_gotno for - each forced-local symbol. - (_bfd_mips_elf_check_relocs): Pass forced-local call symbols to - mips_elf_record_global_got_symbol for VxWorks too. - (_bfd_mips_elf_always_size_sections): Set computed_got_sizes - to true after computing the GOT size. - (_bfd_mips_elf_hide_symbol): Increase local_gotno whenever - got.offset == 1. Only adjust global_gotno if computed_got_sizes. - For VxWorks, add a local entry when hiding a symbol that needs a - plt but has not been marked as needing a global got entry. - (_bfd_mips_elf_link_hash_table_create): Set computed_got_sizes to - false. +2009-08-30 H.J. Lu -2007-08-20 Nick Clifton + * elf32-i386.c (elf_i386_finish_dynamic_symbol): Revert the + accidental checkin. + * elf64-x86-64.c (elf64_x86_64_finish_dynamic_symbol): Likwise. - * elflink.c (elf_fixup_link_order): Rewrite conversion of - s->alignment_power into an offset mask in order to avoid a gcc - error message. +2009-08-30 Alan Modra -2007-08-17 Alan Modra + PR ld/10569 + * bfd.c (bfd_emul_get_maxpagesize): Don't abort. + (bfd_emul_get_commonpagesize): Likewise. - * po/Make-in: Add --msgid-bugs-address to xgettext invocation. +2009-08-29 Martin Thuresson -2007-08-15 Alan Modra + * elf32-arm.c (struct stub_def): Rename member template to + template_sequence. (arm_build_one_stub, + find_stub_size_and_template, arm_size_one_stub, arm_map_one_stub): + Rename variable template to template_sequence. + * elfxx-ia64.c (elfNN_ia64_relax_br, elfNN_ia64_relax_brl): + Rename variable template to template_val. + * aoutx.h (NAME (aout, make_empty_symbol)): Rename variable + new to new_symbol. + * coffgen.c (coff_make_empty_symbol) + (coff_bfd_make_debug_symbol): Rename variable new to new_symbol. + * cpu-ia64-opc.c (ext_reg, ins_imms_scaled): Rename variable + new to new_insn. + * ecoff.c (_bfd_ecoff_make_empty_symbol): Rename variable new + to new_symbol. + * elf32-m68k.c (elf_m68k_get_got_entry_type): Rename argument + new to new_reloc. + * hash.c (bfd_hash_lookup): Rename variable new to new_string. + * ieee.c (ieee_make_empty_symbol): Rename variable new to + new_symbol. + * linker.c (bfd_new_link_order): Rename variable new to + new_lo. + * mach-o.c (bfd_mach_o_sizeof_headers): Rename variable new to + symbol. + * oasys.c (oasys_make_empty_symbol): Rename variable new to + new_symbol_type. + * pdp11.c (NAME (aout, make_empty_symbol)): Rename variable + new to new_symbol_type. + * plugin.c (bfd_plugin_make_empty_symbol): Rename variable new + to new_symbol. + * rs6000-core.c (CoreHdr, VmInfo): Rename union member new to + new_dump. + (read_hdr, rs6000coff_core_p) + (rs6000coff_core_file_matches_executable_p) + (rs6000coff_core_file_failing_command) + (rs6000coff_core_file_failing_signal): Updated function to use new + union member name. + * som.c (som_make_empty_symbol): Rename variable new to + new_symbol_type. + * syms.c (_bfd_generic_make_empty_symbol): Rename variable new + to new_symbol. + * tekhex.c (first_phase, tekhex_make_empty_symbol): Rename + variable new to new_symbol. + +2009-08-27 Ralf Wildenhues + + * acinclude.m4 (AM_INSTALL_LIBBFD): Call AM_SUBST_NOTMAKE for + bfdlibdir and bfdincludedir. + * Makefile.am (bfdlibdir, bfdincludedir): Move definition ... + [INSTALL_LIBBFD]: ... here, ... + [INSTALL_LIBBFD]: ... and empty overrides here. + [!INSTALL_LIBBFD]: (rpath_bfdlibdir): New variable. + [!INSTALL_LIBBFD] (libbfd_la_LDFLAGS): Use it. + * Makefile.in: Regenerate. + * configure: Regenerate. - * elf.c (elf_modify_segment_map): Add remove_empty_load param. - Don't remove empty PT_LOAD header if false. - (_bfd_elf_map_sections_to_segments): If user phdrs, pass false - to elf_modify_segment_map. - (assign_file_positions_for_load_sections): Pass false to - elf_modify_segment_map. +2009-08-26 Maxim Kuvyrkov -2007-08-15 Alan Modra + * elf32-m68k.c: Rewrite initialization of GOT entries for TLS + relocations. Rewrite output of dynamic TLS relocations. + (DTP_OFFSET, TP_OFFSET): New constants. + (dtpoff_base): Update. + (tpoff): Rename to tpoff_base, update. + (elf_m68k_init_got_entry_static, elf_m68k_init_got_entry_local_shared): + New functions. Move code from elf_m68k_relocate_section here. + (elf_m68k_relocate_section): Update. + (elf_m68k_finish_dynamic_symbol): Fix handling of local TLS symbols. - * elf64-ppc.c (ADDI_R12_R12, LD_R11_0R2, LD_R2_0R2): Define. - Update stub comments. - (build_plt_stub): Build two variants, one without "addis". - (ppc_build_one_stub): Build stubs without "addis" if possible. - (ppc_size_one_stub): Size new stubs. +2009-08-26 Maxim Kuvyrkov -2007-08-12 Daniel Jacobowitz + * elf32-m68k.c (elf_m68k_copy_indirect_symbol): Propagate + non_got_ref value. + (elf_m68k_check_relocs): Handle dynamic TLS relocations. + Handle non_got_ref field. + (elf_m68k_adjust_dynamic_symbol): Handle non_got_ref field. - * coffgen.c (coff_get_normalized_symtab): Correct cast. +2009-08-26 Alan Modra -2007-08-07 Nick Clifton + PR ld/10518 + * linker.c (bfd_find_version_for_sym): Revert warning. - * po/bfd.po: Updated template. - * po/BLD-POTFILES.in: Regenerate. +2009-08-26 Alan Modra -2007-08-07 Alan Modra + PR ld/10518 + * linker.c (bfd_find_version_for_sym): Override a "*" match by any + other wildcard match. Warn on multiple wildcard matches. - * elf.c: (_bfd_elf_make_section_from_phdr): Properly handle - bss segments. +2009-08-22 Ralf Wildenhues -2007-08-06 Daniel Jacobowitz + * Makefile.am (libbfd_la_LDFLAGS): Initialize early, to allow + appending. + [INSTALL_LIBBFD] (bfdlib_LTLIBRARIES, bfdinclude_HEADERS): Set + only in this condition. + [!INSTALL_LIBBFD] (noinst_LTLIBRARIES, libbfd_la_LDFLAGS): New, + to build but not install libbfd.la in this condition. + (install-bfdlibLTLIBRARIES, uninstall-bfdlibLTLIBRARIES) + (install_libbfd, install_libbfd): Remove. + * Makefile.in: Regenerate. + * doc/Makefile.am (AM_CPPFLAGS): Renamed from ... + (INCLUDES): ... this. + ($(MKDOC)): Adjust. + * doc/Makefile.in: Regenerate. - * Makefile.am (BUILD_HFILES): Clean bfd_stdint.h. - * Makefile.in: Regenerated. + * Makefile.am (AUTOMAKE_OPTIONS): Remove cygnus, instead use + no-dist and foreign. + (EXTRA_libbfd_la_SOURCES): New, list $(CFILES) to allow + dependency tracking to work for them. + (targets.lo, archures.lo, dwarf.lo): Rewrite to + use automake dependency tracking mechanism. + (MKDEP, DEP, DEP1, dep.sed, dep, dep-in, dep-am): Remove. + (mkdep section): Remove. + (BUILT_SOURCES): New, list $(BUILD_HFILES). + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in, po/bfd.pot: Regenerate. -2007-08-06 Daniel Jacobowitz + * Makefile.am (datarootdir, docdir, htmldor, pdfdir) + (install-pdf, install-pdf-recursive, install-html) + (install-html-recursive): Remove. + * Makefile.in: Regenerate. - * configure.in: Update version to 2.17.90. - * configure: Regenerated. + * Makefile.in: Regenerate. + * aclocal.m4: Likewise. + * config.in: Likewise. + * configure: Likewise. -2007-08-06 Daniel Jacobowitz +2009-08-21 Daniel Gutson - * po/bfd.pot: Regenerate. + * elf32-arm.c (arch_has_thumb2_nop): New function. + (arch_has_arm_nop): New function. + (elf32_arm_final_link_relocate): NOP opcodes changed. -2007-08-06 Paul Brook +2009-08-16 Doug Evans - * elf32-arm.c (elf32_arm_link_hash_entry): Add - plt_maybe_thumb_refcount. - (elf32_arm_link_hash_newfunc): Set plt_maybe_thumb_refcount. - (elf32_arm_copy_indirect_symbol): Ditto. - (elf32_arm_adjust_dynamic_symbol): Ditto. - (bfd_elf32_arm_process_before_allocation): Handle R_ARM_THM_JUMP24. - (arm_add_to_rel): Ditto. - (elf32_arm_final_link_relocate): Merge R_ARM_THM_JUMP24 with - R_ARM_THM_CALL. Handle R_ARM_THM_JUMP19 against a PLT stub. - (elf32_arm_gc_sweep_hook): Call check_use_blx. Update plt counts - for R_ARM_THM_JUMP24 and R_ARM_THM_JUMP19. - (elf32_arm_check_relocs): Update plt counts for R_ARM_THM_JUMP24 - and R_ARM_THM_JUMP19. - (allocate_dynrelocs): Use plt_maybe_thumb_refcount. - (elf32_arm_finish_dynamic_symbol): Ditto. - (elf32_arm_output_plt_map): Ditto. + * opncls.c (bfd_close): Until BFD_IN_MEMORY has an iovec, + at least don't leak memory. -2007-08-06 Daniel Jacobowitz +2009-08-13 DJ Delorie - * elf.c (rewrite_elf_program_header): Handle sections not sorted - by address. - (copy_elf_program_header): Likewise. + * elf32-m32c.c (m32c_elf_relax_delete_bytes): Adjust symbol sizes + if needed. -2007-08-04 H.J. Lu +2009-08-12 Nick Clifton - * elf-bfd.h (xvec_get_elf_backend_data): Add const. + * po/fi.po: Updated Finnish translation. - * elfcode.h (elf_object_p): Use xvec_get_elf_backend_data. - * elfcore.h (elf_core_file_p): Likewise. +2009-08-11 Bernd Schmidt -2007-08-02 H.J. Lu + Merge some FRV FDPIC changes into the Blackfin code. + * elf32-bfin.c (struct bfinfdpic_elf_link_hash_table): Add pointer to + summary reloc information. + (bfinfdpic_dynamic_got_plt_info): New. + (_bfin_create_got_section): Create the PLT section here. + (elf32_bfinfdpic_create_dynamic_sections): Not here. + (_bfinfdpic_count_nontls_entries): Move out of... + (_bfinfdpic_count_got_plt_entries): ... here. + (_bfinfdpic_count_relocs_fixups): Likewise. + (_bfinfdpic_reset_got_plt_entries): New. + (_bfinfdpic_size_got_plt): Move out of... + (elf32_bfinfdpic_size_dynamic_sections): ... here. + (bfinfdpic_relocate_section): Be careful not to call + _bfinfdpic_add_rofixup or _bfinfdpic_add_dyn_reloc for deleted relocs. + (bfinfdpic_check_discarded_relocs, bfinfdpic_elf_discard_info): + New functions. + (elf_backend_discard_info): Define for FD-PIC. - * coffcode.h (ALIGN_SET): Removed. - (ELIFALIGN_SET): Likewise. - (coff_set_alignment_hook): Handle IMAGE_SCN_ALIGN_128BYTES, - IMAGE_SCN_ALIGN_256BYTES, IMAGE_SCN_ALIGN_512BYTES, - IMAGE_SCN_ALIGN_1024BYTES, IMAGE_SCN_ALIGN_2048BYTES, - IMAGE_SCN_ALIGN_4096BYTES and IMAGE_SCN_ALIGN_8192BYTES. +2009-08-11 Alan Modra -2007-08-01 Michael Snyder + * elflink.c: Add FIXMEs for some places that require octets_per_byte + adjustments. + * elf-eh-frame.c: Likewise. + * merge.c: Likewise. - * vms-tir.c (new_section): Fix cut and paste error. +2009-08-11 Alan Modra - * aoutx.h (aout_link_add_symbols): Return if count is zero. + * configure.in: Remove elf-ifunc.lo from common ELF files. Add + to x86 and x86_64 configurations. + * configure: Regenerate. - * elf.c (bfd_elf_print_symbol): Macro dereferences pointer, so - pointer must be non-null. +2009-08-10 Jan Kratochvil -2007-08-01 Tristan Gingold + Stop using bfd_usrdata in libbfd. + * coff-stgo32.c (bfd_coff_go32stub): Remove. + (stub_bytes, comment): Replace STUBSIZE by GO32_STUBSIZE. + (adjust_filehdr_in_post): Declare the abfd parameter as unused. + Replace STUBSIZE by GO32_STUBSIZE. Save now the stub in + filehdr_dst->u.go32.stub. New comment with the reason. + (adjust_filehdr_out_pre): Replace STUBSIZE by GO32_STUBSIZE. + Substitute the removed macro bfd_coff_go32stub. + (adjust_filehdr_out_post, adjust_scnhdr_in_post, adjust_scnhdr_out_pre) + (adjust_scnhdr_out_post, adjust_aux_in_post, adjust_aux_out_pre) + (adjust_aux_out_post): Replace STUBSIZE by GO32_STUBSIZE. + (create_go32_stub, go32_stubbed_coff_bfd_copy_private_bfd_data): + Replace STUBSIZE by GO32_STUBSIZE. Substitute the removed macro + bfd_coff_go32stub. + * coffcode.h (coff_mkobject_hook): Initialize coff->go32stub. + * libcoff-in.h (coff_data_type): New field go32stub. + * libcoff.h: Regenerated. - * coffcode.h (coff_sort_func_alent): New function. - (coff_slurp_line_table): Sort line table if not already sorted. +2009-08-10 Jan Kratochvil -2007-08-01 Jakub Jelinek + Fix go32 stub preservation by objcopy. + * coff-stgo32.c (adjust_filehdr_in_post): Use bfd_malloc. + (go32_stubbed_coff_bfd_copy_private_bfd_data): Optionally allocate OBFD + go32stub. - * elf.c (_bfd_elf_map_sections_to_segments): Work around buggy - GCC 3.4.x warning. +2009-08-10 Nathan Sidwell -2007-08-01 Alan Modra + * elf32-arm.c (elf32_arm_size_stubs): Don't die on undefined local + symbols. + (elf32_arm_final_link_relocate): Treat local undefined symbols the + same as global undefined symbols. + (elf32_arm_relocate_section): Give an error for local undefined + non-weak symbols, unless the reloc will not use the symbol. - * aoutx.h (swap_ext_reloc_in): Set howto to NULL for unknown - r_type. - (swap_std_reloc_in): Likewise. - (aout_link_input_section_std): Likewise. Return with an error - on unexpected relocation type. - (aout_link_input_section_ext): Likewise. +2009-08-10 Nathan Sidwell -2007-08-01 Alan Modra + * elf32-ppc.c (shared_stub_entry, stub_entry): Use r12, not r11. + (ppc_elf_relax_section): Use symbol index to distinguish + relocatable stubs. - PR4694 - * aoutx.h (final_link): Write a zero in first word of - stringtab if no symbols rather than corrupting last byte - of text/data. +2009-08-10 Alan Modra -2007-07-31 Jakub Jelinek + * elf32-ppc.c (ppc_elf_relax_section): Ignore non-code sections. - * elf.c (get_program_header_size): Adjacent loadable .note* - sections need just one PT_NOTE segment. - (_bfd_elf_map_sections_to_segments): Likewise. +2009-08-10 Alan Modra -2007-07-30 Michael Snyder + * elflink.c (_bfd_elf_adjust_dynamic_symbol): Don't clear plt + info for STT_GNU_IFUNC. + * elf32-ppc.c (ppc_elf_check_relocs): Count a needed plt entry + on got refs in case the symbol turns out to be ifunc. + (ppc_elf_gc_sweep_hook): Similarly. + (ppc_elf_adjust_dynamic_symbol): Adjust assertion. + (allocate_dynrelocs): Don't specially allocate got relocs for ifunc. + (ppc_elf_size_dynamic_sections): Likewise. + (ppc_elf_relocate_section): Likewise. - * coffgen.c (_bfd_coff_read_internal_relocs): Revert change of - 2007-07-26. Buffer still in use, can't be freed. +2009-08-09 Bernd Schmidt -2007-07-27 Michael Snyder + From Mike Frysinger + * elf32-bfin.c (bfin_howto_table, bfin_reloc_map, bfin_check_relocs, + bfin_final_link_relocate, bfin_relocate_section, bfin_gc_sweep_hook, + _bfinfdpic_emit_got_relocs_plt_entries, bfinfdpic_relocate_section, + bfinfdpic_gc_sweep_hook, bfinfdpic_check_relocs, + bfin_finish_dynamic_symbol, bfd_bfin_elf32_create_embedded_relocs): + Adjust to match the renamed reloc definitions. - * cofflink.c (coff_link_add_symbols): Return if count is zero. +2009-08-08 Alan Modra - * coff-i386.c (coff_i386_rtype_to_howto): Off by one error. + PR 10494 + * elf.c (_bfd_elf_make_section_from_shdr): When setting up section + LMAs, use ELF_IS_SECTION_IN_SEGMENT to match sections with headers. - * aoutx.h (slurp_symbol_table): Return if count == 0. +2009-08-07 Tom Tromey - * coffgen.c (_bfd_coff_read_internal_relocs): Return if count is zero. + * elf32-microblaze.c (microblaze_elf_check_relocs): Avoid strict + aliasing error. - * elf32-i386.c (elf_i386_check_relocs): Check for null pointer. +2009-08-06 Michael Eager -2007-07-27 H.J. Lu + * Makefile.am: Add cpu-microblaze.{lo,c}, elf32-microblaze.{lo,c}. + * Makefile.in: Regenerate. + * archures.c: Add bfd_arch_microblaze. + * bfd-in2.h: Regenerate. + * config.bfd: Add microblaze target. + * configure.in: Add bfd_elf32_microblaze_vec target. + * configure: Regenerate. + * cpu-microblaze.c: New. + * elf32-microblaze.c: New. + * libbfd-in.h: Add prototype _bfd_dwarf2_fixup_section_debug_loc(). + * libbfd.h: Regenerate. + * reloc.c: Add MICROBLAZE relocations. + * section.c: Add struct relax_table and relax_count to section. + * targets.c: Add bfd_elf32_microblaze_vec. - * config.bfd (x86_64-*-mingw*): Don't include x86_64coff_vec. +2009-08-06 Jakub Jelinek + Alan Modra -2007-07-26 Michael Snyder + PR binutils/10492 + * elf.c (sym_is_global): Return true even for BSF_GNU_UNIQUE + symbols. + * elf32-mips.c (mips_elf_sym_is_global): Likewise. + * elfn32-mips.c (mips_elf_sym_is_global): Likewise. - * coff-i386.c (coff_i386_rtype_to_howto): Guard against null. +2009-08-06 Nathan Sidwell - * linker.c (bfd_section_already_linked_table_insert): Change - return type from void to boolean. Return FALSE on failure. - (_bfd_generic_section_already_linked): Test return value of - bfd_section_already_linked_table_insert, call fatal on error. + * elf32-arm.c (elf32_arm_size_stubs): Call layout_sections_again + at least once when fixing cortex-a8. - * elflink.c (_bfd_elf_section_already_linked): Test return value - of bfd_section_already_linked_table_insert, call fatal on error. +2009-08-05 Chao-ying Fu - * libbfd-in.h (bfd_section_already_linked_table_insert): Update - return type to bfd_boolean. + * elf32-mips.c (mips_reloc_map): Add BFD_RELOC_MIPS_JALR. + * elfxx-mips.c (JAL_TO_BAL_P): New define to transform JAL to BAL + for CPUs. It is true for RM9000. + (JALR_TO_BAL_P): New define to transform JALR to BAL. It is true + for all CPUs. + (mips_elf_perform_relocation): Use JAL_TO_BAL_P and JALR_TO_BAL_P + to guard the transformation. - * libbfd.h: Regenerate. +2009-08-05 Trevor Smigiel -2007-07-26 Adam Nemet + * elf32-spu.h (spu_elf_params): Add member emit_fixups. + (spu_elf_size_sections): Declare prototype. + * elf32-spu.c (spu_link_hash_table): Add member sfixup. + (FIXUP_RECORD_SIZE, FIXUP_GET, FIXUP_PUT): New macros. + (spu_elf_emit_fixup): New function. + (spu_elf_relocate_section): Emit fixup for each SPU_ADDR32. + (spu_elf_size_sections): New function. - * archive.c (do_slurp_bsd_armap, do_slurp_coff_armap, - bfd_slurp_armap): Improve function comment. +2009-08-05 Nathan Sidwell -2007-07-26 Michael Snyder + * elf32-arm.c (elf32_arm_stub_type): Add arm_stub_a8_veneer_lwm. + (arm_build_one_stub): Build a8 veneers as a separate pass. + (cortex_a8_erratum_scan): Add prev_num_a8_fixes and stub_changed_p + parameters. Use them to check if we create a different a8 fixup + than the previous pass. + (elf32_arm_size_stubs): Move scope of stub_changed and + prev_num_a8_fixes into main loop. + (elf32_arm_build_stubs): Build a8 veneers in a second pass. - * linker.c (already_linked_newfunc): Check for NULL return from - bfd_hash_allocate. +2009-08-04 Alan Modra - * coffgen.c (fixup_symbol_value): Guard against null; - bfd_is_com_section will dereference the section pointer. + * elf32-ppc.c (ppc_elf_relax_section): Correct conditions under + which find_plt_ent is called. Delete redundant code. - * syms.c (bfd_decode_symclass): Guard against NULL, since - bfd_is_com_section dereferences the pointer. +2009-08-03 H.J. Lu - * srec.c (srec_scan): Check for EOF (critical because return value - will be used as array index). + PR binutils/10363 + * elf.c (bfd_elf_string_from_elf_section): Return NULL on + invalid string offset. + +2009-08-03 H.J. Lu + + PR ld/10433 + * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Set got + to htab->init_got_offset and plt to htab->init_plt_offset + when discarding space for dynamic relocations. + +2009-08-03 Alan Modra + + * elf32-ppc.c (struct plt_entry): Revise comments. + (ppc_elf_check_relocs): Don't create needless plt_entry info + for non-pie executables. Don't test info->pie when info->shared + already covers that case. + (ppc_elf_gc_sweep_hook): Adjust for above change. + (add_stub_sym): Don't test info->pie when info->shared tested. + (allocate_dynrelocs, ppc_elf_size_dynamic_sections): Likewise. + (write_glink_stub, ppc_elf_finish_dynamic_symbol): Likewise. + (ppc_elf_relax_section): Adjust find_plt_ent arguments. + (ppc_elf_relocate_section): Likewise. + +2009-08-03 Alan Modra + + * elf32-ppc.c (ppc_elf_check_relocs): Always add a plt ref count + for local ifunc symbols in non-pie executables, regardless of + reloc type. Don't specially create ifunc dyn relocs. Tidy ifunc + code so that it's obvious that we only do anything special for + local ifunc syms. + (ppc_elf_gc_sweep_hook): Adjust to suit check_relocs changes. + (allocate_dynrelocs): Correct comment for syms defined in plt. + Don't specially allocate ifunc dyn relocs. + (ppc_elf_relax_section): Relax branches to ifunc plt entries too. + (ppc_elf_relocate_section): Set "relocation" value for ifunc + syms in non-pie executables. No specially allocated dyn relocs + for ifunc to write. Allow for local sym on R_PPC_RELAX32_PLT. + (ppc_elf_finish_dynamic_symbol): Set value of ifunc symbols in + a non-pie executable. + +2009-08-02 H.J. Lu + Jakub Jelinek + + PR ld/6443 + * elf32-i386.c (elf_i386_tls_transition): Check executable + instead of shared for TLS when building PIE. + (elf_i386_check_relocs): Likewise. + (elf_i386_allocate_dynrelocs): Likewise. + (elf_i386_relocate_section): Likewise. + + * elf64-x86-64.c (elf64_x86_64_tls_transition): Check executable + instead of shared for TLS when building PIE. + (elf64_x86_64_check_relocs): Likewise. + (elf64_x86_64_allocate_dynrelocs): Likewise. + (elf64_x86_64_relocate_section): Likewise. + +2009-07-31 Anthony Green + + * config.bfd (targ_cpu): Add moxie-uclinux support. + +2009-07-31 Hans-Peter Nilsson + + * linker.c (fix_syms): Consider SEC_LOAD when choosing section. + +2009-07-30 Alan Modra + + * elf32-ppc.c (ppc_elf_check_relocs): Always set up sections + used by indirect function support. Count dynamic relocs for + ifunc syms. + (ppc_elf_adjust_dynamic_symbol): Tweak for ifunc. + (allocate_dynrelocs): Allocate all non-dynamic ifunc plt entries + in iplt and their relocs in reliplt. Don't make ifunc syms + dynamic. Allocate got entry relocs for non-dynamic ifunc in + reliplt. Handle other dynamic relocs for ifunc. + (ppc_elf_size_dynamic_sections): Alloc dyn relocs for static + ifunc in reliplt, likewise relocs for got against local ifunc. + Typo fix on reliplt size adjust. + (ppc_elf_relocate_section): Don't use plt scheme of allocating + relocs 1-1 with entries for iplt, instead just add using + reloc_count. Write got relocs and dyn relocs for ifunc to reliplt. + Error on invalid ifunc dyn relocs. + (ppc_elf_finish_dynamic_symbol): Adjust for non-dynamic ifunc plt + in iplt/reliplt. + * elf64-ppc.c (ppc64_elf_howto_raw): Add R_PPC64_JMP_IREL, + R_PPC64_REL16, R_PPC64_REL16_LO, R_PPC64_REL16_HI, R_PPC64_REL16_HA. + (ppc64_elf_reloc_type_lookup): Handle new relocs. + (ppc64_elf_check_relocs): Likewise. Count dyn relocs for ifunc. + (allocate_dynrelocs): As for elf32-ppc.c above. + (ppc64_elf_size_dynamic_sections): Likewise. + (ppc_build_one_stub): Put non-dynamic ifunc plt call stubs in iplt, + and their relocs in reliplt. Use R_PPC64_JMP_IREL. + (ppc_size_one_stub): Similarly. + (ppc64_elf_relocate_section): As for elf32-ppc.c above. Handle new + relocs too. + (ppc64_elf_finish_dynamic_symbol): As for elf32-ppc.c above. - * coffgen.c (_bfd_coff_read_internal_relocs): If internal_relocs - are not to be cached, free the temporary buffer. +2009-07-29 Hans-Peter Nilsson - * aoutx.h (slurp_reloc_table): Return TRUE if reloc_size == zero - or count == zero. + * elf64-mmix.c (mmix_elf_relax_section): Revert 2009-05-27 + change. Add note to head comment. - * tekhex.c (first_phase): Check return value for null. +2009-07-28 Jan Beulich - * elf.c (_bfd_elf_get_synthetic_symtab): Remove meaningless - pointer increment. + * archive.c (get_extended_arelt_filename): Remove redundant + range check on index. -2007-07-26 Alan Modra +2009-07-27 Doug Kwan - * elflink.c (_bfd_elf_fix_symbol_flags): Remove unnecessary - check on dynobj. Remove bed shadow. + * elf32-arm.c (stub_hash_newfunc): Initialize field output_name. - * srec.c (srec_get_section_contents): Return immediately on - count zero. Check that offset and count are within section. - * libbfd.c (_bfd_generic_get_section_contents): Check that - offset + count does not overflow. +2009-07-27 H.J. Lu - * srec.c (srec_canonicalize_symtab): Don't alloc when symcount - is zero. Correct return value on error. - * mmo.c (mmo_canonicalize_symtab): Likewise. - * binary.c (binary_canonicalize_symtab) Correct return on error. + * archures.c bfd_*_arch): Sorted. + (bfd_archures_list): Likewise. -2007-07-26 Thiemo Seufer +2009-07-27 M R Swami Reddy - * bfd.c (_bfd_set_gp_value): Use abort instead of BFD_FAIL. + * elf32-cr16.c (elf_cr16_final_link_relocate): Add code to handle + to R_cr16_NUM32 relocation. -2007-07-26 Alan Modra +2009-07-26 Michael Eager - * reloc.c (bfd_generic_get_relocated_section_contents): Avoid - bfd_canonicalize_reloc call when bfd_get_reloc_upper_bound - says there are no relocs. + * archures.c: Add bfd_mach_ppc_405 + * bfd-in2.h: Same. -2007-07-26 Doug Kwan +2009-07-25 H.J. Lu - Speed up bfd_dwarf2_find_line. - * dwarf2.c (struct dwarf2_debug): Add new fields to support function - and variable info hash tables. Add last_comp_unit, info_hash_count, - funcinfo_hash_table, varinfo_hash_table, hash_units_head. - (struct comp_unit): Add prev_unit, cached. - (struct info_list_node, struct info_hash_entry, - struct info_hash_table): New. - (info_hash_table_newfunc, create_info_hash_table, - insert_info_hash_table, lookup_info_hash_table): New functions - implementing function and variable info hash tables. - (scan_unit_for_symbols): Add checks to make sure hash tables are - consistent with compilation units. - (comp_unit_maybe_decode_line_info): New function. - (comp_unit_find_line): Use comp_unit_maybe_decode_line_info. - (reverse_funcinfo_list, reverse_varinfo_list, comp_unit_hash_info, - info_hash_lookup_funcinfo, info_hash_lookup_varinfo, - stash_maybe_update_info_hash_table, stash_verify_info_hash_table, - stash_maybe_enable_info_hash_tables, stash_find_line_fast): New - functions. Make use of info hash tables to speed up - bfd_dwarf2_find_line. - (find_line): Use hash table for faster lookup if it is turned on. - Also add code to maintain bi-directional link in comp units. + * cpu-i386.c (bfd_x86_64_arch): Fix comment typos. + * cpu-l1om.c (bfd_l1om_arch): Likewise. -2007-07-25 Michael Snyder +2009-07-25 H.J. Lu - * coffgen.c (_bfd_coff_get_external_symbols): Nothing to be done - if size == 0; return and avoid possible null pointer issues. + * archures.c (bfd_architecture): Add bfd_arch_l1om. + (bfd_l1om_arch): New. + (bfd_archures_list): Add &bfd_l1om_arch. + * bfd-in2.h: Regenerated. -2007-07-25 Alan Modra + * config.bfd (targ64_selvecs): Add bfd_elf64_l1om_vec if + bfd_elf64_x86_64_vec is supported. Add bfd_elf64_l1om_freebsd_vec + if bfd_elf64_x86_64_freebsd_vec is supported. + (targ_selvecs): Likewise. - * linker.c (generic_link_add_symbol_list): Warning fix. + * configure.in: Support bfd_elf64_l1om_vec and + bfd_elf64_l1om_freebsd_vec. + * configure: Regenerated. -2007-07-24 Michael Snyder + * cpu-l1om.c: New. - * opncls.c (bfd_make_writable): Check return from bfd_malloc. + * elf64-x86-64.c (elf64_l1om_elf_object_p): New. + (bfd_elf64_l1om_vec): Likewise. + (bfd_elf64_l1om_freebsd_vec): Likewise. - * elflink.c (bfd_elf_final_link): Avoid redundant frees -- return - on bfd_malloc error rather than goto error_return. + * Makefile.am (ALL_MACHINES): Add cpu-l1om.lo. + (ALL_MACHINES_CFILES): Add cpu-l1om.c. + * Makefile.in: Regenerated. -2007-07-24 Alan Modra + * targets.c (bfd_elf64_l1om_vec): New. + (bfd_elf64_l1om_freebsd_vec): Likewise. + (_bfd_target_vector): Add bfd_elf64_l1om_vec and + bfd_elf64_l1om_freebsd_vec. - * elflink.c (_bfd_elf_link_just_syms, merge_sections_remove_hook, - _bfd_elf_merge_sections, _bfd_elf_link_hash_newfunc, - _bfd_elf_link_hash_copy_indirect, _bfd_elf_link_hash_hide_symbol, - _bfd_elf_link_hash_table_init, _bfd_elf_link_hash_table_create, - bfd_elf_set_dt_needed_name, bfd_elf_get_dyn_lib_class, - bfd_elf_set_dyn_lib_class, bfd_elf_get_needed_list, - bfd_elf_get_runpath_list, bfd_elf_get_dt_soname, - bfd_elf_get_bfd_needed_list, struct elf_symbuf_symbol, - struct elf_symbuf_head, struct elf_symbol, elf_sort_elf_symbol, - elf_sym_name_compare, elf_create_symbuf, - bfd_elf_match_symbols_in_sections, - _bfd_elf_match_sections_by_type): Move to here.. - * elf.c: ..from here. +2009-07-24 Trevor Smigiel + Alan Modra -2007-07-23 Richard Sandiford + * reloc.c (BFD_RELOC_SPU_ADD_PIC): Define. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + * elf32-spu.c (elf_howto_table): Add entries SPU_ADD_PIC. + (spu_elf_bfd_to_reloc_type): Handle SPU_ADD_PIC. + (spu_elf_relocate_section): Patch instructions marked by SPU_ADD_PIC. + +2009-07-23 H.J. Lu + + PR ld/10434 + * elf64-x86-64.c (elf64_x86_64_check_relocs): Check executable + instead of shared for R_X86_64_TPOFF32. + (elf64_x86_64_relocate_section): Likewise. + +2009-07-23 Ulrich Drepper + + * elf-bfd.h (struct elf_link_hash_entry): Add unique_global field. + * elf.c (swap_out_syms): Set binding to STB_GNU_UNIQUE for symbols + with the BSF_GNU_UNIQUE flag bit set. + * elfcode.h (elf_slurp_symbol_table): Set the BSF_GNU_UNIQUE flag + for symbols with STB_GNU_UNIQUE binding. + * elflink.c (_bfd_elf_merge_symbol): Set unique_global for symbols + with the STB_GNU_UNIQUE binding. + (elf_link_add_object_symbols): Set the BSF_GNU_UNIQUE flag for + symbols with STB_GNU_UNIQUE binding. Set STB_GNU_UNIQUE for + symbols with the unique_global field set. + (elf_link_output_extsym): Set unique_global field for symbols with + the STB_GNU_UNIQUE binding. + * syms.c (struct bfd_symbol): Define BSF_GNU_UNIQUE flag bit. + (bfd_print_symbol_vandf): Print a 'u' character for BSF_GNU_UNIQUE + symbols. + (bfd_decode_symclass): Return a 'u' character for BSF_GNU_UNIQUE + symbols. + * bfd-in2.h: Regenerate. - * elflink.c (_bfd_elf_fix_symbol_flags): Only assert the type - of weakdef->root.type if weakdef has no regular definition. +2009-07-22 H.J. Lu -2007-07-22 Adam Nemet + * elflink.c (elf_link_output_extsym): Revert the last change. - * elfxx-mips.c (struct mips_elf_link_hash_table): Add new field - small_data_overflow_reported. - (_bfd_mips_elf_link_hash_table_create): Initialize it. - (_bfd_mips_elf_relocate_section) : Report - small-data section overflow. +2009-07-22 H.J. Lu -2007-07-19 Doug Kwan + PR ld/10433 + * elflink.c (elf_link_output_extsym): Special case ifunc syms + when ref_regular, not def_regular. - PR binutils/4797 - * dwarf2.c: (find_line) Do not dereference functionname_ptr if - do_line is true. +2009-07-21 H.J. Lu -2007-07-18 Bob Wilson + PR ld/10426 + * elflink.c (elf_link_add_object_symbols): Turn an IFUNC symbol + from a DSO into a normal FUNC symbol. + (elf_link_output_extsym): Turn an undefined IFUNC symbol into + a normal FUNC symbol. - * elf32-xtensa.c (xtensa_callback_required_dependence): Ignore - non-ELF sections. +2009-07-17 Chao-ying Fu -2007-07-18 Bob Wilson + * elfxx-mips.c (LOAD_INTERLOCKS_P): New define. + (_bfd_mips_elf_size_dynamic_sections): For CPUs without load + interlocking, the last PLT entry needs a nop in the branch delay slot. + (_bfd_mips_elf_finish_dynamic_symbol): For CPUs with load itnerlocking, + output the last two PLT entries in reverse order. - * elf32-xtensa.c (elf_xtensa_finish_dynamic_sections): Get section - vma and size for dynamic tags from the output sections. +2009-07-16 H.J. Lu -2007-07-18 Alan Modra + * elf32-i386.c (elf_i386_relocate_section): Don't get local + STT_GNU_IFUNC symbol for relocatable link. + * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise. - * elf-bfd.h (struct sym_sec_cache): Delete "sec". Add "shndx". - * elf.c (bfd_section_from_r_symndx): Don't cache bfd section of - symbol. Instead cache ELF section index. Remove redundant - checks of st_shndx. +2009-07-10 H.J. Lu -2007-07-15 Mike Frysinger + * bfdio.c (bfd_iovec): Add comments for bmmap. + * bfd-in2.h: Regenerated. - * trad-core.c (NBPG): If not defined, set to getpagesize(). +2009-07-10 H.J. Lu -2007-07-13 Roland McGrath + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerated. - * elf-bfd.h (struct elf_obj_tdata): Revert last change. - Add after_write_object_contents, after_write_object_contents_info. - * elf.c (_bfd_elf_write_object_contents): Revert last change. - Instead, call after_write_object_contents if set. +2009-07-10 Doug Kwan -2007-07-12 Kai Tietz + * elf32-arm.c (stub_hash_newfunc): Initialize fields + target_addend and orig_insn. - * bfd-in.h: (BFD_HOST_64BIT_LONG_LONG): New. - (BFD_HOSTPTR_T): Host pointer type for casting a - pointer to an integer type. - (bfd_hostptr_t): The typedef of BFD_HOSTPTR_T. - (sprintf_vma, fprintf_vma): Add support for long long prints. - * bfd-in2.h: Regenerate. - * configure.in: (BFD_HOST_64BIT_LONG_LONG): New. - (BFD_HOSTPTR_T): Host pointer type for casting a - pointer to an integer type. Default is "unsigned long". - (AC_CHECK_SIZEOF(void *)): New. - (host64): Set it if the pointer size is 8. - * configure: Regenerate. - * config.in: Add macro SIZEOF_VOID_P. - * coffcode.h: Replace host ptr type assuming "long" with - bfd_hostptr_t type. - * coffgen.c: Likewise. - * elf-eh-frame.c: Likewise. - * peicode.h: Likewise. +2009-07-10 Tom Tromey -2007-07-10 H.J. Lu + * Makefile.am (dwarf2.lo): Use dwarf2.h, not elf/dwarf2.h. + (elf-eh-frame.lo): Likewise. + (elf32-bfin.lo): Likewise. + (elf32-frv.lo): Likewise. + (elf32-xc16x.lo): Likewise. + * Makefile.in: Rebuild. + * dwarf2.c: Included dwarf.h, not elf/dwarf2.h. + * elf-eh-frame.c: Likewise. + * elf32-bfin.c: Likewise. + * elf32-frv.c: Likewise. + * elf32-xc16x.c: Likewise. + +2009-07-10 Julian Brown + + * elf32-arm.c (arm_build_one_stub): Use the hash entry of the + symbol a stub entry is derived from, not the entry for the stub + itself, in call to elf32_arm_final_link_relocate. + +2009-07-10 H.J. Lu + + * elf.c (_bfd_elf_get_synthetic_symtab): Remove leading zeros + when reporting addends. + +2009-07-10 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Do set up soft-icache manager + data even when no stubs. + (spu_elf_place_overlay_data, spu_elf_build_stubs): Adjust. + +2009-07-10 Alan Modra + + * elf32-ppc.c (ppc_elf_howto_raw): Add R_PPC_IRELATIVE. + (ppc_elf_get_synthetic_symtab): Report addend. + (PLT_IFUNC): Define. + (struct ppc_elf_link_hash_table): Add iplt and reliplt. + (ppc_elf_create_glink): New function. + (ppc_elf_create_dynamic_sections): Use it. + (ppc_elf_add_symbol_hook): Set has_ifunc_symbols. + (update_local_sym_info): Allocate space for local_plt array. + Don't bump local_got_refcounts for PLT_IFUNC. Return local_plt + entry pointer. + (is_branch_reloc): New function. + (ppc_elf_check_relocs): Handle STT_GNU_IFUNC symbols. + (ppc_elf_gc_sweep_hook): Likewise. + (ppc_elf_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (ppc_elf_size_dynamic_sections): Likewise. + (ppc_elf_relocate_section): Likewise. + (branch_reloc_hash_match): Use is_branch_reloc. + (ppc_elf_tls_optimize): Adjust for local_plt. + (write_glink_stub): New function, extracted from.. + (ppc_elf_finish_dynamic_symbol): ..here. Handle STT_GNU_IFUNC. + (ppc_elf_finish_dynamic_sections): Only write plt resolver and + branch table when dynamic. + (elf_backend_post_process_headers): Define. + * elf64-ppc.c (elf_backend_post_process_headers): Define. + (ppc64_elf_howto_raw): Add R_PPC64_IRELATIVE. + (ppc64_elf_get_synthetic_symtab): Report addend. + (struct ppc_stub_hash_entry): Add plt_ent. + (PLT_IFUNC): Define. + (struct ppc_link_hash_table): Add iplt and reliplt. + (create_linkage_sections): Make .iplt and .rela.iplt sections. + (ppc64_elf_add_symbol_hook): Set has_ifunc_symbols. + (update_local_sym_info): Allocate space for local_plt array. + Don't bump local_got_ents for PLT_IFUNC. Return local_plt + entry pointer. + (update_plt_info): Pass pointer to plt_entry rather than sym hash, + and don't change hash flags here. + (is_branch_reloc): New function. + (ppc64_elf_check_relocs): Handle STT_GNU_IFUNC. + (ppc64_elf_gc_sweep_hook): Likewise. + (ppc64_elf_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (ppc64_elf_size_dynamic_sections): Likewise. + (ppc_build_one_stub, ppc_size_one_stub): Likewise. + (ppc64_elf_size_stubs): Likewise. + (ppc64_elf_relocate_section): Likewise. + (get_sym_h): Adjust for local_plt. + (branch_reloc_hash_match): Use is_branch_reloc. + (ppc_type_of_stub): Pass plt_entry pointer and handle ifunc. + (ppc64_elf_toc): Ignore SEC_EXCLUDE sections. + +2009-07-10 Alan Modra + + * elf.c (_bfd_elf_get_synthetic_symtab): Report addends. + +2009-07-10 Alan Modra + + * elf-bfd.h (struct elf_link_hash_entry): Clarify ref_regular + and ref_regular_nonweak comment. + * elflink.c (elf_link_output_extsym): Special case ifunc syms + when def_regular, not ref_regular. + (elf_link_add_object_symbols): Don't set needs_plt on ifunc syms,.. + * elf32-i386.c (elf_i386_check_relocs): ..set it here instead.. + * elf64-x86-64.c (elf64_x86_64_check_relocs): ..and here. + +2009-07-09 Alan Modra + + * elf32-spu.c (mark_functions_via_relocs): Init broken_cycle field + of malloc'd struct call_info. + (pasted_function): Likewise, priority too. + +2009-07-07 Alan Modra + + * elf32-spu.c (spu_elf_auto_overlay): Take into account section + alignment when packing sections into overlays. + +2009-07-03 Cary Coutant + + * dwarf2.c (decode_line_info): Ignore DW_LNE_set_discriminator. + +2009-07-03 Dave Korn + + * coffcode.h (sec_to_styp_flags): Partially revert (functional + changes only) earlier patch:- + +2009-06-25 Kai Tietz + + * coffcode.h (sec_to_styp_flags): Set discardable for .reloc and + give .debug and .reloc data characteristics. + (DOT_RELOC): New define for .reloc section string. + (coff_write_object_contents): Use DOT_RELOC instead of string. + +2009-07-02 Tom Tromey + + * aoutx.h (aout_get_external_symbols): Declare 'amt' locally. + * bfdwin.c (bfd_free_window): Cast to unsigned long. + +2009-07-01 Nick Clifton + + * elf-m10300.c: Remove trailing white space. + * reloc.c: Likewise. + +2009-07-01 Douglas B Rupp + + * bfd.m4 (BFD_HAVE_TIME_TYPE_MEMBER, + BFD_HAVE_SYS_STAT_TYPE_MEMBER): New config functions. + * configure.in: Use them. + * configure: Regenerate. + * config.in: Regenerate. + * vmsutil.c: Include sysdep.h, remove ansidecl.h. + #define _BSD_SOURCE. Add comments. + (vms_file_stats_name): Calculate creation date based on available + runtime data. Return 1 for version instead of 0. + +2009-07-01 Nick Clifton + + PR 10072 + * elf32-arm.c (elf32_arm_final_link_relocate): Add code to handle + to R_ARM_THM_PC8 relocation. + +2009-06-29 Nick Clifton + + * elf-m10300.c (mn10300_elf_relax_section): Allow for the + different uses of the relocations addend when a symbol is in a + merged section. + +2009-06-27 H.J. Lu + + PR ld/10337 + * elf.c (bfd_section_from_shdr): Don't change sh_link for + SHT_REL/SHT_RELA sections on executable nor shared library. + Treat SHT_REL/SHT_RELA sections with sh_link set to SHN_UNDEF + as a normal section. + +2009-06-25 Nick Clifton + + * elf-m10300.c (mn10300_elf_relax_section): Handle non-section + symbols with SEC_MERGE flag. + +2009-06-25 Kai Tietz + + * coffcode.h (sec_to_styp_flags): Set discardable for .reloc and + give .debug and .reloc data characteristics. + (DOT_RELOC): New define for .reloc section string. + (coff_write_object_contents): Use DOT_RELOC instead of string. + +2009-06-25 Tristan Gingold + + * mach-o-target.c (bfd_mach_o_get_dynamic_symtab_upper_bound) + (bfd_mach_o_canonicalize_dynamic_symtab) + (bfd_mach_o_get_synthetic_symtab): Defines. + (TARGET_NAME_BACKEND): Add bfd_mach_o_print_thread entry. + (TARGET_NAME): Use Mach-O specific functions for dynamic. + + * mach-o-i386.c (bfd_mach_o_i386_swap_reloc_in): Fix howto indexes + for scattered relocations. + (bfd_mach_o_i386_print_thread): New function. + (bfd_mach_o_print_thread): Define. + + * mach-o.c (text_section_names_xlat): Add an entry for __const. + (bfd_mach_o_canonicalize_one_reloc, bfd_mach_o_canonicalize_relocs): + New functions extracted from ... + (bfd_mach_o_canonicalize_reloc): ... This. Simplified. + (bfd_mach_o_get_dynamic_reloc_upper_bound): New function. + (bfd_mach_o_canonicalize_dynamic_reloc): New function. + (bfd_mach_o_i386_flavour_string): Adjusted after enum renaming. + (bfd_mach_o_ppc_flavour_string): Reindentation. Add 64 bits cases. + (bfd_mach_o_scan_read_dylinker): Do not create a section anymore. + Set name_str field. + (bfd_mach_o_scan_read_dylib): Ditto. + (bfd_mach_o_scan_read_thread): Set mdata at declaration. Add comments, + reindent. + (bfd_mach_o_scan_read_dysymtab): Set mdata at declaration. Correctly + decode isym and flags on little endian targets. Set dysymtab field. + (bfd_mach_o_scan_start_address): Adjust for enum names. + (bfd_mach_o_lookup_section): Do not look for segments anymore. + (bfd_mach_o_print_section): Display bfd section name. + (bfd_mach_o_print_segment): Display none if no name. + (bfd_mach_o_print_dysymtab): Display next index for local, external + and undefined symbols. + (bfd_mach_o_bfd_print_private_bfd_data): Adjust code by using name_str. + Display dylinker name. Display thread and unixthread commands content. + (bfd_mach_o_print_thread): New macro. + + * mach-o.h (bfd_mach_o_mach_header_magic): Align numbers. + (bfd_mach_o_ppc_thread_flavour): Ditto. + (bfd_mach_o_i386_thread_flavour): Ditto. + (BFD_MACH_O_PPC_THREAD_STATE_NONE): New enum. + (BFD_MACH_O_x86_THREAD_STATE_NONE): Replaces + BFD_MACH_O_THREAD_STATE_NONE. + (bfd_mach_o_segment_command): Remove segment field. + (bfd_mach_o_thread_flavour): Field offset is now unsigned long. + (bfd_mach_o_dylinker_command): Remove section field, add name_str. + (bfd_mach_o_prebound_dylib_command): Ditto. + (bfd_mach_o_dylib_command): Ditto. + (bfd_mach_o_prebound_dylib_command): Remove section field. + (mach_o_data_struct): Add dysymtab field. + (bfd_mach_o_backend_data): Add _bfd_mach_o_print_thread field. + (bfd_mach_o_get_reloc_upper_bound, bfd_mach_o_canonicalize_reloc) + (bfd_mach_o_build_commands): Remove parameter names and attributes. + (bfd_mach_o_get_dynamic_reloc_upper_bound) + (bfd_mach_o_canonicalize_dynamic_reloc): New prototypes. + +2009-06-25 Rafael Avila de Espindola + + * plugin.c (load_plugin): Use stat and S_ISREG instead of the d_type + field of struct dirent. + +2009-06-23 Tristan Gingold + + * vms.c (vms_get_synthetic_symtab): Remove duplicate definition + of this macro. Fix indentation. + +2009-06-22 Christophe Lyon + + * elf32-arm.c (elf32_arm_size_stubs): Use PLT address as + destination for defined dynamic symbols when deciding whether to + insert a stub or not. + (allocate_dynrelocs): Make sure functions are not marked as Thumb + when actually accessed through a PLT, even when generating a + shared lib. + +2009-06-22 Tristan Gingold + + * mach-o.c (bfd_mach_o_canonicalize_reloc): Append a sentinel to + the relocs array. + +2009-06-22 Alan Modra + + * elf32-ppc.c (ppc_elf_check_relocs): Handle R_PPC_RELAX* in switch. + * elf32-v850.c (v850_elf_relocate_section): Warning fix. + +2009-06-22 Alan Modra + + * elf64-ppc.c (ppc64_elf_edit_opd): Avoid gcc warning. + +2009-06-19 H.J. Lu + + * elflink.c (elf_link_add_object_symbols): Avoid warning + from -Wjump-misses-init in gcc 4.5.0. + +2009-06-19 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Properly check local + symbol on error. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + +2009-06-19 H.J. Lu + + * elf32-i386.c (elf_i386_tls_transition): Add a parameter, + r_symndx. Report local symbol name on error. + (elf_i386_check_relocs): Updated. Report local symbol name on + error. + (elf_i386_gc_sweep_hook): Updated. + (elf_i386_relocate_section): Likewise. + + * elf64-x86-64.c (elf64_x86_64_tls_transition): Add a parameter, + r_symndx. Report local symbol name on error. + (elf64_x86_64_check_relocs): Updated. Report local symbol name + on error. + (elf64_x86_64_gc_sweep_hook): Updated. + (elf64_x86_64_relocate_section): Likewise. + +2009-06-19 Tristan Gingold + + * mach-o.c (bfd_mach_o_print_private_header): Fix format character. + +2009-06-19 Tristan Gingold + + * mach-o.c (bfd_mach_o_scan_read_symtab_symbols): Add prototype. + (bfd_mach_o_version): Use bfd_mach_o_get_data instead of direct access. + (bfd_mach_o_valid): Ditto. + (bfd_mach_o_wide_p): Ditto. + (bfd_mach_o_canonicalize_reloc): Ditto. + (bfd_mach_o_build_commands): Ditto. + (bfd_mach_o_scan_read_thread): Ditto. + (bfd_mach_o_flatten_sections): Ditto. + (bfd_mach_o_scan_start_address): Ditto. + (bfd_mach_o_lookup_section): Ditto. + (bfd_mach_o_core_fetch_environment): Ditto. + (bfd_mach_o_write_contents): Ditto. Handle reexport_dylib. + (bfd_mach_o_scan_write_relocs): Adjust for bfd_mach_o_get_data. + (bfd_mach_o_scan_write_symtab): Ditto. + Use macros instead of hard-coded values. + (bfd_mach_o_scan_read_symtab_symbol): Make the function static. + Use bfd_mach_o_get_data instead of direct access. Use macros + instead of hard-coded values. + (bfd_mach_o_scan_read_symtab_strtab): Make the function static. + Remove sym argument and get section from mdata. + Move code into the else branch. + (bfd_mach_o_scan_read_symtab_symbols): Make the function static. + Remove sym argument and get section from mdata. Adjust code. + (bfd_mach_o_scan_read_dylib): Move assertion into the created + switch (which replaces consecutive if statements). + (bfd_mach_o_scan_read_dysymtab): Rename seg to cmd. Load + module table, table of content, indirect symbols and external + referenced symbols. + (bfd_mach_o_scan_read_symtab): Renames seg to symtab. Set symtab + field. + (bfd_mach_o_scan_read_linkedit): New function. + (bfd_mach_o_scan_read_str): Ditto. + (bfd_mach_o_count_symbols): Simplify the code by using the symtab + field of mdata. + (bfd_mach_o_get_symtab_upper_bound): Remove check as + bfd_mach_o_count_symbols never returns an error. + (bfd_mach_o_canonicalize_symtab): Simplify the code by using the + symtab field (there might be only one symtab). + (bfd_mach_o_scan_read_command): Handle reexported dylib. + Handle sub frameworks, sub umbrella, sub library and sub client. + Read code signature and segment split info commands. + (bfd_mach_o_scan): Reindent. + (bfd_mach_o_xlat_name): New type. + (bfd_mach_o_print_flags): New function. + (bfd_mach_o_get_name): Ditto. + (bfd_mach_o_cpu_name): New variable. + (bfd_mach_o_filetype_name, bfd_mach_o_header_flags_name) + (bfd_mach_o_section_type_name) + (bfd_mach_o_section_attribute_name) + (bfd_mach_o_load_command_name): New variables. + (bfd_mach_o_print_private_header): New function. + (bfd_mach_o_print_section_map): New function extracted from + bfd_mach_o_print_private_bfd_data. + (bfd_mach_o_print_section): Ditto. Print more infos. + (bfd_mach_o_print_segment): Ditto. + (bfd_mach_o_print_dysymtab): Ditto. + (bfd_mach_o_bfd_print_private_bfd_data): Reworked. Handle + load weak dylib, reexport dylib and id dylib. + Handle code signature and segment_split info. + Handle sub frameworks, sub umbrella, sub library and sub client. + (bfd_mach_o_section_get_nbr_indirect): New function. + + * mach-o.h (BFD_MACH_O_REFERENCE_MASK): New macro. Add comment. + (bfd_mach_o_header_flags): New enum to define header flags. + (bfd_mach_o_section_attribute): New enum to replace ... + (BFD_MACH_O_S_ATTR_LOC_RELOC, BFD_MACH_O_S_ATTR_EXT_RELOC, + BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS, BFD_MACH_O_S_ATTR_DEBUG, + BFD_MACH_O_S_SELF_MODIFYING_CODE, BFD_MACH_O_S_ATTR_LIVE_SUPPORT, + BFD_MACH_O_S_ATTR_NO_DEAD_STRIP, BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS, + BFD_MACH_O_S_ATTR_NO_TOC, BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS): ... + these removed macros. + (BFD_MACH_O_NLIST_SIZE, BFD_MACH_O_NLIST_64_SIZE): New macros. + (bfd_mach_o_dylib_module): New type. + (BFD_MACH_O_DYLIB_MODULE_SIZE, BFD_MACH_O_DYLIB_MODULE_64_SIZE): New + macros. + (bfd_mach_o_dylib_table_of_content): New type. + (BFD_MACH_O_TABLE_OF_CONTENT_SIZE): New macro. + (bfd_mach_o_dylib_reference): New type. + (BFD_MACH_O_REFERENCE_SIZE): New macro. + (bfd_mach_o_dysymtab_command): Add fields for loaded and decoded + modules, toc, references and indirect syms. + (BFD_MACH_O_INDIRECT_SYMBOL_SIZE): New macro. + (bfd_mach_o_dylinker_command): Remove cmd and cmdsize fields (were + unused). Add comment. + (bfd_mach_o_dylib_command): Ditto. + (bfd_mach_o_prebound_dylib_command): Ditto. + (bfd_mach_o_linkedit_command): New type. + (bfd_mach_o_str_command): New type. + (bfd_mach_o_load_command): Add linkedit and str fields. + (mach_o_data_struct): Add symtab field. + (bfd_get_mach_o_data): Renamed to ... + (bfd_mach_o_get_data): ... this new macro. + (bfd_mach_o_scan_read_symtab_symbol, + bfd_mach_o_scan_read_symtab_strtab, + bfd_mach_o_scan_read_symtab_symbols): Prototypes removed. + + * mach-o-i386.c (bfd_mach_o_i386_mkobject): Use bfd_mach_o_get_data + instead of direct access. + +2009-06-19 Alan Modra + + * elf32-ppc.c (ppc_elf_check_relocs): Allow local symbols for + R_PPC_PLTREL24 relocs. + (ppc_elf_relocate_section): Likewise. + +2009-06-19 Alan Modra + + * elf32-ppc.c (find_plt_ent): Pass pointer to plist rather than + pointer to sym hash. Update all uses. + (update_plt_info): Likewise. Don't check addend here. + +2009-06-18 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Remove isymbuf and use + bfd_sym_from_r_symndx. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + +2009-06-18 Alan Modra + + * elf-bfd.h (struct sym_sec_cache): Delete. + (struct sym_cache): New. + (bfd_section_from_r_symndx): Delete prototype. + (bfd_sym_from_r_symndx): Define prototype. + * elf.c (bfd_section_from_r_symndx): Delete, replace with.. + (bfd_sym_from_r_symndx): ..new function. + * elf32-arm.c: Update all uses of struct sym_sec_cache and + bfd_section_from_r_symndx to new struct and function. + * elf32-bfin.c: Likewise. + * elf32-hppa.c: Likewise. + * elf32-i386.c: Likewise. + * elf32-m32r.c: Likewise. + * elf32-m68hc1x.c: Likewise. + * elf32-m68hc1x.h: Likewise. + * elf32-m68k.c: Likewise. + * elf32-ppc.c: Likewise. + * elf32-s390.c: Likewise. + * elf32-sh.c: Likewise. + * elf64-ppc.c: Likewise. + * elf64-s390.c: Likewise. + * elf64-x86-64.c: Likewise. + * elfxx-sparc.c: Likewise. + * elfxx-sparc.h: Likewise. + +2009-06-18 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Cache or free isymbuf. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + +2009-06-18 Nick Clifton + + * elflink.c (elf_link_sort_relocs): Return early if there are no + relocs to sort. + +2009-06-18 Dave Korn + + Merge cegcc and mingw32ce target name changes from + CeGCC project: + + 2007-12-25 Pedro Alves + + * config.bfd: Add arm*-*-cegcc* target. + + 2007-12-17 Pedro Alves + + * config.bfd: Add arm-*-mingw32ce* target. + +2009-06-17 H.J. Lu + + * elf-bfd.h (_bfd_elf_allocate_ifunc_dyn_relocs): New. + * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Likewise. + * elf32-i386.c (elf_i386_allocate_dynrelocs): Use it. + * elf64-x86-64.c (elf64_x86_64_allocate_dynrelocs): Likewise. + +2009-06-17 H.J. Lu + + * elf-bfd.h (_bfd_elf_create_ifunc_dyn_reloc): New. + * elf-ifunc.c (_bfd_elf_create_ifunc_dyn_reloc): Likewise. + * elf32-i386.c (elf_i386_check_relocs): Use it. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + +2009-06-17 H.J. Lu + + * elf-bfd.h (elf_dyn_relocs): New. + + * elf32-i386.c (elf_i386_dyn_relocs): Removed. + (elf_i386_link_hash_entry): Replace elf_i386_dyn_relocs with + elf_dyn_relocs. + (elf_i386_copy_indirect_symbol): Likewise. + (elf_i386_check_relocs): Likewise. + (elf_i386_gc_sweep_hook): Likewise. + (elf_i386_allocate_dynrelocs): Likewise. + (elf_i386_readonly_dynrelocs): Likewise. + (elf_i386_size_dynamic_sections): Likewise. - * Makefile.in: Regenerated. + * elf64-x86-64.c (elf64_x86_64_dyn_relocs): Removed. + (elf64_x86_64_link_hash_entry): Replace elf64_x86_64_dyn_relocs + with elf_dyn_relocs. + (elf64_x86_64_copy_indirect_symbol): Updated. + (elf64_x86_64_check_relocs): Likewise. + (elf64_x86_64_gc_sweep_hook): Likewise. + (elf64_x86_64_adjust_dynamic_symbol): Likewise. + (elf64_x86_64_allocate_dynrelocs): Likewise. + (elf64_x86_64_readonly_dynrelocs): Likewise. + (elf64_x86_64_size_dynamic_sections): Likewise. + +2009-06-17 H.J. Lu + + * elf32-arm.c (create_got_section): Get existing .rela.got + section. + * elf32-hppa.c (elf32_hppa_create_dynamic_sections): Likewise. + * elf32-lm32.c (create_got_section): Likewise. + * elf32-m32r.c (create_got_section): Likewise. + * elf32-ppc.c (ppc_elf_create_got): Likewise. + * elf32-s390.c (create_got_section): Likewise. + * elf32-sh.c (create_got_section): Likewise. + * elf32-xtensa.c (elf_xtensa_create_dynamic_sections): Likewise. + * elf64-s390.c (create_got_section): Likewise. + * elfxx-sparc.c (create_got_section): Likewise. + + * elflink.c (_bfd_elf_create_got_section): Properly initialize + the GOT size. + +2009-06-16 H.J. Lu + + * elf-bfd.h (ELF_LOCAL_SYMBOL_HASH): New. + + * elf32-i386.c (elf_i386_local_hash): Removed. + (elf_i386_local_htab_hash): Use ELF_LOCAL_SYMBOL_HASH. + (elf_i386_get_local_sym_hash): Likewise. -2007-07-10 H.J. Lu + * elf64-x86-64.c (elf64_x86_64_local_hash): Removed. + (elf64_x86_64_local_htab_hash): Use ELF_LOCAL_SYMBOL_HASH. + (elf64_x86_64_get_local_sym_hash): Likewise. + * elfxx-ia64.c (elfNN_ia64_local_htab_hash): Likewise. + (get_local_sym_hash): Likewise. - PR binutils/4756 - * simple.c (bfd_simple_get_relocated_section_content): Don't - apply relocation on executable and shared library. +2009-06-16 H.J. Lu -2007-07-10 Nathan Sidwell + * elfxx-ia64.c (elfNN_ia64_link_hash_table): Remove got_sec, + rel_got_sec and plt_sec. + (elfNN_ia64_relax_section): Updated. + (elfNN_ia64_create_dynamic_sections): Likewise. + (get_got): Likewise. + (allocate_dynrel_entries): Likewise. + (elfNN_ia64_size_dynamic_sections): Likewise. + (set_got_entry): Likewise. + (elfNN_ia64_choose_gp): Likewise. + (elfNN_ia64_relocate_section): Likewise. + (elfNN_ia64_finish_dynamic_symbol): Likewise. + (elfNN_ia64_finish_dynamic_sections): Likewise. - * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't eliminate - copy relocs on vxworks. +2009-06-16 Ulrich Weigand -2007-07-10 Alan Modra + * elf32-spu.c (needs_ovl_stub): Respect .brinfo lrlive bits + also for calls. - * elf32-arm.c (elf32_arm_size_info): Init checksum_contents field. - * elf64-alpha.c (alpha_elf_size_info): Likewise. - * elf64-hppa.c (hppa64_elf_size_info): Likewise. - * elf64-mips.c (mips_elf64_size_info): Likewise. - * elf64-s390.c (s390_elf64_size_info): Likewise. - * elf64-sparc.c (elf64_sparc_size_info): Likewise. +2009-06-16 H.J. Lu -2007-07-09 H.J. Lu + * configure.in (elf): Add elf-ifunc.lo. - * elflink.c (bfd_elf_record_link_assignment): Handle indirect - symbol. - (_bfd_elf_merge_symbol): Properly update normal symbol when - overriding the versioned symbol from a dynamic library. - -2007-07-09 Roland McGrath - - * elf-bfd.h (struct elf_obj_tdata): Add members - emit_note_gnu_build_id and note_gnu_build_id_sec. - * elf.c (_bfd_id_note_section_size): New global function. - (read_hex, _bfd_elf_write_build_id_section): New static functions. - (_bfd_elf_write_object_contents): Call _bfd_elf_write_build_id_section - if emit_note_gnu_build_id is set. - * Makefile.am (elf.lo): Update dependencies. - - * elf-bfd.h (struct elf_size_info): Add checksum_contents hook. - (bfd_elf32_checksum_contents, bfd_elf64_checksum_contents): Declare. - * elfcode.h (elf_checksum_contents): New macro and function. - (NAME(_bfd_elf,size_info)): Initialize checksum_contents hook. - -2007-07-06 Michael Snyder - - * elflink.c (elf_link_add_object_symbols): Return via - error_free_vers on "notice" failure. - -2007-07-04 H.J. Lu - - * peicode.h (pe_bfd_object_p): Don't check PE vs. EFI target - if arch is unknown. - -2007-07-04 Nick Clifton - - Import this patch from an internal tree: - - 2001-07-17 Richard Henderson - - * elf32-mep.c (mep_final_link_relocate) [R_MEP_HI16S]: Correctly - compensate for high bit set in R_MEP_LOW16. - -2007-07-03 Joseph Myers - - * elf32-arm.c (elf32_arm_merge_eabi_attributes): Copy type from - input attributes if value has been copied. - -2007-07-03 Nick Clifton - - * COPYING: Replace with GPLv3 text. - * aix386-core.c: Update copyright notice to refer to GPLv3. - * aix5ppc-core.c, aout0.c, aout32.c, aout64.c, aout-adobe.c, - aout-arm.c, aout-cris.c, aoutf1.h, aout-ns32k.c, aout-sparcle.c, - aout-target.h, aout-tic30.c, aoutx.h, archive64.c, archive.c, - archures.c, armnetbsd.c, bfd.c, bfd-in.h, bfdio.c, bfdwin.c, - binary.c, bout.c, cache.c, cf-i386lynx.c, cf-sparclynx.c, - cisco-core.c, coff64-rs6000.c, coff-alpha.c, coff-apollo.c, - coff-arm.c, coff-aux.c, coffcode.h, coffgen.c, coff-go32.c, - coff-h8300.c, coff-h8500.c, coff-i386.c, coff-i860.c, coff-i960.c, - coff-ia64.c, cofflink.c, coff-m68k.c, coff-m88k.c, coff-maxq.c, - coff-mcore.c, coff-mips.c, coff-or32.c, coff-pmac.c, coff-ppc.c, - coff-rs6000.c, coff-sh.c, coff-sparc.c, coff-stgo32.c, - coff-svm68k.c, coffswap.h, coff-tic30.c, coff-tic4x.c, - coff-tic54x.c, coff-tic80.c, coff-u68k.c, coff-w65.c, - coff-we32k.c, coff-x86_64.c, coff-z80.c, coff-z8k.c, corefile.c, - cpu-alpha.c, cpu-arc.c, cpu-arm.c, cpu-avr.c, cpu-bfin.c, - cpu-cr16.c, cpu-cr16c.c, cpu-cris.c, cpu-crx.c, cpu-d10v.c, - cpu-d30v.c, cpu-dlx.c, cpu-fr30.c, cpu-frv.c, cpu-h8300.c, - cpu-h8500.c, cpu-hppa.c, cpu-i370.c, cpu-i386.c, cpu-i860.c, - cpu-i960.c, cpu-ia64.c, cpu-ia64-opc.c, cpu-ip2k.c, cpu-iq2000.c, - cpu-m10200.c, cpu-m10300.c, cpu-m32c.c, cpu-m32r.c, cpu-m68hc11.c, - cpu-m68hc12.c, cpu-m68k.c, cpu-m88k.c, cpu-maxq.c, cpu-mcore.c, - cpu-mep.c, cpu-mips.c, cpu-mmix.c, cpu-msp430.c, cpu-mt.c, - cpu-ns32k.c, cpu-openrisc.c, cpu-or32.c, cpu-pdp11.c, 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, - cpu-tic80.c, cpu-v850.c, cpu-vax.c, cpu-w65.c, cpu-we32k.c, - cpu-xc16x.c, cpu-xstormy16.c, cpu-xtensa.c, cpu-z80.c, cpu-z8k.c, - demo64.c, doc/chew.c, dwarf1.c, dwarf2.c, ecoff.c, 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-avr.h, elf32-bfin.c, elf32.c, elf32-cr16.c, elf32-cr16c.c, - elf32-cris.c, elf32-crx.c, elf32-d10v.c, elf32-d30v.c, - elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, - elf32-h8300.c, elf32-hppa.c, elf32-hppa.h, elf32-i370.c, - elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, - elf32-iq2000.c, elf32-m32c.c, elf32-m32r.c, elf32-m68hc11.c, - elf32-m68hc12.c, elf32-m68hc1x.c, elf32-m68hc1x.h, elf32-m68k.c, - elf32-m88k.c, elf32-mcore.c, elf32-mep.c, elf32-mips.c, - elf32-msp430.c, elf32-mt.c, elf32-openrisc.c, elf32-or32.c, - elf32-pj.c, elf32-ppc.c, elf32-ppc.h, elf32-s390.c, elf32-score.c, - elf32-sh64.c, elf32-sh64-com.c, elf32-sh64.h, elf32-sh.c, - elf32-sh-symbian.c, elf32-sparc.c, elf32-spu.c, elf32-spu.h, - elf32-v850.c, elf32-vax.c, elf32-xc16x.c, elf32-xstormy16.c, - elf32-xtensa.c, elf64-alpha.c, elf64.c, elf64-gen.c, elf64-hppa.c, - elf64-hppa.h, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, - elf64-ppc.h, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, - elf64-x86-64.c, elf-attrs.c, elf-bfd.h, elf.c, elfcode.h, - elfcore.h, elf-eh-frame.c, elf-hppa.h, elflink.c, elf-m10200.c, - elf-m10300.c, elfn32-mips.c, elf-strtab.c, elf-vxworks.c, - elf-vxworks.h, elfxx-ia64.c, elfxx-mips.c, elfxx-mips.h, - elfxx-sparc.c, elfxx-sparc.h, elfxx-target.h, epoc-pe-arm.c, - epoc-pei-arm.c, format.c, freebsd.h, gen-aout.c, genlink.h, - hash.c, host-aout.c, hosts/alphavms.h, hp300bsd.c, hp300hpux.c, - hppabsd-core.c, hpux-core.c, i386aout.c, i386bsd.c, i386dynix.c, - i386freebsd.c, i386linux.c, i386lynx.c, i386mach3.c, i386msdos.c, - i386netbsd.c, i386os9k.c, ieee.c, ihex.c, init.c, irix-core.c, - libaout.h, libbfd.c, libbfd-in.h, libcoff-in.h, libecoff.h, - libhppa.h, libieee.h, libnlm.h, liboasys.h, libpei.h, libxcoff.h, - linker.c, lynx-core.c, m68k4knetbsd.c, m68klinux.c, m68knetbsd.c, - m88kmach3.c, m88kopenbsd.c, mach-o.c, mach-o.h, mach-o-target.c, - mep-relocs.pl, merge.c, mipsbsd.c, mmo.c, netbsd-core.c, netbsd.h, - newsos3.c, nlm32-alpha.c, nlm32.c, nlm32-i386.c, nlm32-ppc.c, - nlm32-sparc.c, nlm64.c, nlm.c, nlmcode.h, nlmswap.h, nlm-target.h, - ns32k.h, ns32knetbsd.c, oasys.c, opncls.c, 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, peXXigen.c, ppcboot.c, ptrace-core.c, reloc16.c, - reloc.c, riscix.c, rs6000-core.c, sco5-core.c, section.c, - simple.c, som.c, som.h, sparclinux.c, sparclynx.c, sparcnetbsd.c, - srec.c, stabs.c, stab-syms.c, stamp-h.in, sunos.c, syms.c, - sysdep.h, targets.c, targmatch.sed, tekhex.c, ticoff.h, - trad-core.c, vax1knetbsd.c, vaxbsd.c, vaxnetbsd.c, versados.c, - vms.c, vms-gsd.c, vms.h, vms-hdr.c, vms-misc.c, vms-tir.c, - xcofflink.c, xcoff-target.h, xsym.c, xsym.h, xtensa-isa.c, - xtensa-modules.c: Likewise. - * elf32-sh-relocs.h: Add copyright notice. - * hosts/alphalinux.h, hosts/decstation.h, hosts/delta68.h, - hosts/dpx2.h, hosts/hp300bsd.h, hosts/i386bsd.h, - hosts/i386linux.h, hosts/i386mach3.h, hosts/i386sco.h, - hosts/i860mach3.h, hosts/m68kaux.h, hosts/m68klinux.h, - hosts/m88kmach3.h, hosts/mipsbsd.h, hosts/mipsmach3.h, - hosts/news.h, hosts/news-mips.h, hosts/pc532mach.h, - hosts/riscos.h, hosts/symmetry.h, hosts/tahoe.h, hosts/vaxbsd.h, - hosts/vaxlinux.h, hosts/vaxult2.h, hosts/vaxult.h: Likewise. - * bfd-in2.h, libbfd.h, libcoff.h: Regenerate. - -2007-07-02 Joseph Myers - - * 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. - -2007-07-02 Alan Modra + * configure: Regenerated. + * Makefile.in: Likewise. - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * config.in: Regenerate. - * po/SRC-POTFILES.in: Regenerate. - * po/bfd.pot: Regenerate. + * elf-bfd.h (elf_link_hash_table): Add sgot, sgotplt, + srelgot, splt, srelplt, igotplt, iplt, irelplt and irelifunc. + + * elf32-i386.c (elf_i386_link_hash_table): Remove sgot, + sgotplt, srelgot, splt, srelplt, igotplt, iplt, irelplt and + irelifunc. + (elf_i386_link_hash_table_create): Likewise. + (elf_i386_create_dynamic_sections): Likewise. + (elf_i386_check_relocs): Likewise. + (elf_i386_allocate_dynrelocs): Likewise. + (elf_i386_size_dynamic_sections): Likewise. + (elf_i386_relocate_section): Likewise. + (elf_i386_finish_dynamic_symbol): Likewise. + (elf_i386_finish_dynamic_sections): Likewise. + (elf_i386_create_got_section): Removed. + + * elf64-x86-64.c (elf64_x86_64_link_hash_table): Remove sgot, + sgotplt, srelgot, splt, srelplt, igotplt, iplt, irelplt and + irelifunc. + (elf64_x86_64_compute_jump_table_size): Updated. + (elf64_x86_64_link_hash_table_create): Likewise. + (elf64_x86_64_create_dynamic_sections): Likewise. + (elf64_x86_64_check_relocs): Likewise. + (elf64_x86_64_allocate_dynrelocs): Likewise. + (elf64_x86_64_size_dynamic_sections): Likewise. + (elf64_x86_64_relocate_section): Likewise. + (elf64_x86_64_finish_dynamic_symbol): Likewise. + (elf64_x86_64_finish_dynamic_sections): Likewise. + (elf64_x86_64_create_got_section): Removed. + + * elflink.c (_bfd_elf_create_got_section): Use log_file_align + for pointer alignment. Set up section pointers. + (_bfd_elf_create_dynamic_sections): Likewise. + (_bfd_elf_create_ifunc_sections): Moved to ... + * elf-ifunc.c: Here. New. + + * Makefile.am (BFD32_BACKENDS): Add elf-ifunc.lo. + (BFD32_BACKENDS_CFILES): Add elf-ifunc.c. + Run "make dep-am". -2007-07-02 Alan Modra +2009-06-16 Doug Kwan - * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Tidy - symsec != NULL tests. + * elf32-arm.c (cortex_a8_erratum_scan): Change type of offset + to bfd_signed_vma. Cast constant operands which are used in + offset related expressions to bfd_signed_vma type as appropriate. -2007-07-02 Alan Modra +2009-06-16 Maciej W. Rozycki - PR 4712 - * elf.c (assign_file_positions_for_load_sections): Adjust lma - by p_vaddr_offset. + * elf32-vax.c (elf_vax_plt_sym_val): New function. + (elf_backend_plt_sym_val): Define. -2007-06-30 H.J. Lu +2009-06-16 Maciej W. Rozycki - * aclocal.m4: Regenerated. - * Makefile.in: Likewise. + * elf32-vax.c (elf_vax_reloc_type_class): New function. + (elf_backend_reloc_type_class): Define. -2007-06-29 Joseph Myers +2009-06-16 Maciej W. Rozycki - * elf32-ppc.c (ppc_elf_merge_obj_attributes): New. - (ppc_elf_merge_private_bfd_data): Call it. + * elf32-vax.c (elf_vax_relocate_section): For symbol references + from an executable to a shared library treat R_VAX_PC32 + relocations as R_VAX_PLT32 ones. -2007-06-29 Joseph Myers +2009-06-16 Maciej W. Rozycki - * elfxx-mips.c (mips_elf_merge_obj_attributes): New. - (_bfd_mips_elf_merge_private_bfd_data): Call it. + * elf32-vax.c (elf_vax_instantiate_got_entries): Skip local + symbols in GOT space calculation. + (elf_vax_relocate_section): Adjust accordingly. -2007-06-29 Joseph Myers +2009-06-16 Maciej W. Rozycki - * 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 - - * 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 - - * bfd.c (bfd_demangle): Plug memory leak (Coverity). - -2007-06-29 M R Swami Reddy - - * 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. + * elf32-vax.c (elf_vax_plt_entry): Set the entry mask to + include . -2007-06-29 Alan Modra +2009-06-16 Maciej W. Rozycki - * 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. + * elf32-vax.c (elf_vax_check_relocs): Handle the visibility + attribute. + (elf_vax_relocate_section): Likewise. -2007-06-29 Nathan Froyd +2009-06-15 H.J. Lu - * elf32-ppc.c (ppc_elf_info_to_howto): Check for invalid relocation - types. + * elf32-i386.c (elf_i386_allocate_dynrelocs): Update comments. + * elf64-x86-64.c (elf64_x86_64_allocate_dynrelocs): Likewise. -2007-06-29 Alan Modra +2009-06-15 H.J. Lu - * elf32-spu.c (spu_elf_fake_sections): New function. - (elf_backend_fake_sections): Define. + * elf32-i386.c (elf_i386_check_relocs): Reformat. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. -2007-06-29 Alan Modra +2009-06-15 H.J. Lu - * elf.c (assign_file_positions_for_load_sections): Use elf - section header sh_size rather than bfd section size, simplifying - .tbss handling. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerated. -2007-06-29 Alan Modra +2009-06-15 H.J. Lu - 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. + * elf32-i386.c (elf_i386_allocate_dynrelocs): Fix a typo. + * elf64-x86-64.c (elf64_x86_64_allocate_dynrelocs): Likewise. -2007-06-27 Alan Modra +2009-06-15 Nick Clifton - * 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. + * po/ru.po: New Russian translation. + * configure.in (ALL_LINGUAS): Add ru. + * configure: Regenerate. - * elf32-ppc.c (ppc_elf_select_plt_layout): Properly iterate over - input bfds. - * elf32-spu.c (spu_elf_create_sections): Likewise. +2009-06-14 H.J. Lu -2007-06-26 H.J. Lu + * elf32-i386.c: Remove duplicated comments. - * dwarf2.c (find_line): New. Contains the duplicated code from: - (_bfd_dwarf2_find_nearest_line): Use it. - (_bfd_dwarf2_find_line): Use it. +2009-06-14 H.J. Lu -2007-06-26 Joseph Myers + PR ld/10270 + * elf32-i386.c (elf_i386_allocate_dynrelocs): Disallow + dynamic IFUNC pointer in non-shared object. Use .got.plt + for IFUNC definition in PIE. + (elf_i386_allocate_dynrelocs): Resolve IFUNC definition in + PIE locally. - * elf32-arm.c (copy_eabi_attributes): Copy type of attributes. + * elf64-x86-64.c (elf64_x86_64_allocate_dynrelocs): Disallow + dynamic IFUNC pointer in non-shared object. Use .got.plt + for IFUNC definition in PIE. + (elf64_x86_64_relocate_section): Resolve IFUNC definition in + PIE locally. -2007-06-25 Richard Sandiford +2009-06-13 H.J. Lu - * elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs - to be used for calls from MIPS16 code. + * elf32-i386.c (elf_i386_check_relocs): Properly report + local symbol for unhandled relocation against STT_GNU_IFUNC + symbol. + (elf_i386_relocate_section): Likewise. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + (elf64_x86_64_relocate_section): Likewise. + +2009-06-13 H.J. Lu + + PR ld/10269 + * elf32-i386.c: Include "objalloc.h" and "hashtab.h". + (elf_i386_link_hash_table): Add loc_hash_table and + loc_hash_memory. + (elf_i386_local_hash): New. + (elf_i386_local_htab_hash): Likewise. + (elf_i386_local_htab_eq): Likewise. + (elf_i386_get_local_sym_hash): Likewise. + (elf_i386_link_hash_table_free): Likewise. + (elf_i386_allocate_local_dynrelocs): Likewise. + (elf_i386_finish_local_dynamic_symbol): Likewise. + (bfd_elf64_bfd_link_hash_table_free): Likewise. + (elf_i386_link_hash_table_create): Create loc_hash_table and + loc_hash_memory. + (elf_i386_check_relocs): Handle local STT_GNU_IFUNC symbols. + (elf_i386_size_dynamic_sections): Likewise. + (elf_i386_relocate_section): Likewise. + (elf_i386_finish_dynamic_sections): Likewise. + (elf_i386_finish_dynamic_symbol): Check _DYNAMIC only if sym + isn't NULL. + + * elf64-x86-64.c: Include "objalloc.h" and "hashtab.h". + (elf64_x86_64_link_hash_table): Add loc_hash_table and + loc_hash_memory. + (elf64_x86_64_local_hash): New. + (elf64_x86_64_local_htab_hash): Likewise. + (elf64_x86_64_local_htab_eq): Likewise. + (elf64_x86_64_get_local_sym_hash): Likewise. + (elf64_x86_64_link_hash_table_free): Likewise. + (elf64_x86_64_allocate_local_dynrelocs): Likewise. + (elf64_x86_64_finish_local_dynamic_symbol): Likewise. + (bfd_elf64_bfd_link_hash_table_free): Likewise. + (elf64_x86_64_link_hash_table_create): Create loc_hash_table + and loc_hash_memory. + (elf64_x86_64_check_relocs): Handle local STT_GNU_IFUNC + symbols. + (elf64_x86_64_size_dynamic_sections): Likewise. + (elf64_x86_64_relocate_section): Likewise. + (elf64_x86_64_finish_dynamic_sections): Likewise. + (elf64_x86_64_finish_dynamic_symbol): Check _DYNAMIC only if + sym isn't NULL. + +2009-06-10 Philip Blundell + + * elf32-arm.c (elf32_arm_fix_exidx_coverage): Avoid crash if + elf_sec->this_hdr == NULL. + +2009-06-12 Tristan Gingold + + * reloc.c: Add BFD_RELOC_MACH_O_SECTDIFF and BFD_RELOC_MACH_O_PAIR. + * bfd-in2.h: Regenerated. + * libbfd.h: Regenerated. + + * mach-o.c (FILE_ALIGN): New macro. + (bfd_mach_o_canonicalize_symtab): Adjust for bfd_mach_o_asymbol. + (bfd_mach_o_print_symbol): Ditto. + (bfd_mach_o_scan_write_thread): Adjust type of variable offset. + (bfd_mach_o_get_reloc_upper_bound): New function. + (bfd_mach_o_canonicalize_reloc): Ditto. + (bfd_mach_o_scan_write_relocs): Ditto. + (bfd_mach_o_scan_write_section_32): Remove offset argument. + (bfd_mach_o_scan_write_section_64): Ditto. + (bfd_mach_o_scan_write_segment_32): Write relocs. Fix size of data + written for load command. Do not compute section file offset. + (bfd_mach_o_scan_write_segment_64): Ditto. + (bfd_mach_o_scan_write_symtab): Compute file offset first. + Adjust for bfd_mach_o_asymbol. Move code to convert from BFD to + Mach-O to ... + (bfd_mach_o_mangle_symbols): ... this new function. + (bfd_mach_o_write_contents): Be sure to have load commands built. + Call bfd_mach_o_mangle_symbols. + (bfd_mach_o_build_commands): Adjust for filelen field. + Use FILE_ALIGN macro. Clear section file offset if section is empty. + Do not set symtab file offset anymore here. + (bfd_mach_o_make_empty_symbol): Allocate a bfd_mach_o_asymbol. + (bfd_mach_o_make_bfd_section): Set SEC_RELOC if has reloc. + Set reloc_count and rel_filepos section fields. + (bfd_mach_o_scan_read_section_32): Type of argument offset is now + unsigned int. + (bfd_mach_o_scan_read_section_64): Ditto. + (bfd_mach_o_scan_read_section): Ditto. + (bfd_mach_o_scan_read_symtab_symbol): Typr of argument s is now + bfd_mach_o_asymbol. Use unsigned int for file offset type. + (bfd_mach_o_scan_read_symtab_symbol): Adjust for bfd_mach_o_asymbol. + Handle weak-ref symbols. + (bfd_mach_o_scan_read_symtab_symbols): Adjust for bfd_mach_o_asymbol. + (bfd_mach_o_scan_read_dysymtab_symbol): Ditto. + (bfd_mach_o_scan): Remove assignment to removed field. + (bfd_mach_o_mkobject_init): Ditto. + (bfd_mach_o_bfd_print_private_bfd_data): Adjust printf formatter. + (bfd_mach_o_bfd_reloc_type_lookup): New macro. + (bfd_mach_o_bfd_reloc_name_lookup): Ditto. + (bfd_mach_o_swap_reloc_in): Ditto. + (bfd_mach_o_swap_reloc_out): Ditto. + + * mach-o.h (BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_NON_LAZY) + (BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_LAZY) + (BFD_MACH_O_REFERENCE_FLAG_DEFINED) + (BFD_MACH_O_REFERENCE_FLAG_PRIVATE_DEFINED) + (BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY) + (BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY) + (BFD_MACH_O_REFERENCED_DYNAMICALLY, BFD_MACH_O_N_DESC_DISCARDED) + (BFD_MACH_O_N_NO_DEAD_STRIP, BFD_MACH_O_N_WEAK_REF) + (BFD_MACH_O_N_WEAK_DEF): New macros. + Add comments. + (bfd_mach_o_section_type): Add new enumeration values. + (BFD_MACH_O_S_SELF_MODIFYING_CODE) + (BFD_MACH_O_S_ATTR_LIVE_SUPPORT) + (BFD_MACH_O_S_ATTR_NO_DEAD_STRIP) + (BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS, BFD_MACH_O_S_ATTR_NO_TOC): New + macros. + (BFD_MACH_O_GENERIC_RELOC_VANILLA) + (BFD_MACH_O_GENERIC_RELOC_PAIR) + (BFD_MACH_O_GENERIC_RELOC_SECTDIFF) + (BFD_MACH_O_GENERIC_RELOC_PB_LA_PTR) + (BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF): Ditto. + (BFD_MACH_O_RELENT_SIZE): Ditto. + (BFD_MACH_O_R_PCREL, BFD_MACH_O_GET_R_LENGTH) + (BFD_MACH_O_R_EXTERN, BFD_MACH_O_GET_R_TYPE) + (BFD_MACH_O_GET_R_SYMBOLNUM, BFD_MACH_O_SET_R_LENGTH) + (BFD_MACH_O_SET_R_TYPE, BFD_MACH_O_SET_R_SYMBOLNUM): Ditto. + (BFD_MACH_O_SR_SCATTERED, BFD_MACH_O_SR_PCREL) + (BFD_MACH_O_GET_SR_LENGTH, BFD_MACH_O_GET_SR_TYPE) + (BFD_MACH_O_GET_SR_ADDRESS, BFD_MACH_O_SET_SR_LENGTH) + (BFD_MACH_O_SET_SR_TYPE, BFD_MACH_O_SET_SR_ADDRESS): Ditto. + (bfd_mach_o_reloc_info): New struct. + (bfd_mach_o_asymbol): New struct. + (bfd_mach_o_symtab_command): The symbols field is now of type + bfd_mach_o_asymbol. + (bfd_mach_o_load_command): The offset and len fields are now of type + unsigned int. + (mach_o_data_struct): Remove symbols, nsymbols and ibfd fields. + Add a filelen field. Add comments. + (bfd_mach_o_backend_data): New struct. + (bfd_mach_o_get_backend_data): New macro. + (bfd_mach_o_scan_read_symtab_symbol): Parameter symbol now of type + bfd_mach_o_asymbol. + (bfd_mach_o_scan_read_dysymtab_symbol): Ditto. + (bfd_mach_o_get_reloc_upper_bound): New prototype. + (bfd_mach_o_canonicalize_reloc): Ditto. + + * mach-o-target.c (bfd_mach_o_bfd_is_local_label_name): Remove + duplicated macro. Now defined to _bfd_generic_is_local_label. + (TARGET_NAME_BACKEND): New macro... + (TARGET_NAME_BACKEND): ... used to name a new variable. + (TARGET_NAME): Define relocs table using bfd_mach_o, reference + Mach-O backend data. + + * mach-o-i386.c (i386_howto_table): New variable. + (bfd_mach_o_i386_swap_reloc_in): New function. + (bfd_mach_o_i386_swap_reloc_out): Ditto. + (bfd_mach_o_i386_bfd_reloc_type_lookup): Ditto. + (bfd_mach_o_i386_bfd_reloc_name_lookup): Ditto. + (bfd_mach_o_swap_reloc_in, bfd_mach_o_swap_reloc_out): New macros. + (bfd_mach_o_bfd_reloc_type_lookup) + (bfd_mach_o_bfd_reloc_name_lookup): Ditto. + +2009-06-11 Eric Paris + Nick Clifton -2007-06-23 Andreas Schwab + * opncls.c (_maybe_make_executable): New function. Gives execute + permission to an executable bfd that was opened for writing + provided that it is a regular file. Replaces common code found in... + (bfd_close): here and ... + (bfd_close_all_done): here. + +2009-06-11 Anthony Green + + * reloc.c: Add BFD_RELOC_MOXIE_10_PCREL. + * bfd-in2.h: Rebuilt. + * libbfd.h: Rebuilt. + * elf32-moxie.c (moxie_elf_howto_table): Add R_MOXIE_PCREL10 + relocation support. + (moxie_reloc_map): Ditto. + Clean up copyright notice. + +2009-06-10 Paul Pluzhnikov + + * bfd-in2.h: bfd_mmap prototype. + * bfdio.c (bfd_mmap): New function. + * libbfd.h (bfd_iovec): Add bmmap. + * cache.c (cache_bmmap): New function. + (cache_iovec): Initialize bmmap member. + * opencls.c (opncls_bmmap): New function. + (opncls_iovec): Initialize bmmap member. + +2009-06-09 Tristan Gingold + + * mach-o.h (bfd_mach_o_symtab_command): Remove stabs_segment + and stabstr_segment fields. + (mach_o_be_vec, mach_o_le_vec): Removed + (bfd_mach_o_version): New prototype. + + * mach-o.c (bfd_mach_o_version): Make this function public. + (mach_o_wide_p): New function. + (bfd_mach_o_wide_p): Ditto. + (bfd_mach_o_convert_section_name_to_bfd): Add prefix only for + weird names. + (bfd_mach_o_convert_section_name_to_mach_o): Fix typo in comment. + Search in the list only if the name starts with a dot. + (bfd_mach_o_write_header): Use mach_o_wide_p instead of hard-coded + test. Check bfd_seek status. + (bfd_mach_o_scan_write_thread): Check bfd_seek status. + (bfd_mach_o_scan_write_section_32): Ditto. + (bfd_mach_o_scan_write_section_64): Ditto. + (bfd_mach_o_scan_write_section): Removed. + (bfd_mach_o_scan_write_segment): Split into ... + (bfd_mach_o_scan_write_segment_32): ... this and ... + (bfd_mach_o_scan_write_segment_64): ... this. Check bfd_seek status. + (bfd_mach_o_scan_write_symtab_symbols): Moved into ... + (bfd_mach_o_scan_write_symtab): ... this. Write symtab from BFD + symbol table. Now returns a boolean. + (bfd_mach_o_write_contents): Set filetype. Check bfd_seek status. + Adjust for status type. + (bfd_mach_o_build_commands): Use mach_o_wide_p instead of hard-coded + test. Write symbol table. Numbers the sections. + (bfd_mach_o_read_header): Check bfd_seek status. + Use mach_o_wide_p instead of hard-coded test. + (bfd_mach_o_scan_read_section_32): Check bfd_seek status. + (bfd_mach_o_scan_read_section_64): Ditto. + (bfd_mach_o_scan_read_symtab_symbol): Ditto. Check bfd_seek status. + Use BFD_MACH_O_N_TYPE instead of hard-coded value. Correctly + handled common symbols. + (bfd_mach_o_scan_read_symtab_strtab): Check bfd_seek status. + (bfd_mach_o_scan_read_dysymtab_symbol): Ditto. + (bfd_mach_o_scan_read_dylinker): Ditto. + (bfd_mach_o_scan_read_dylib): Ditto. + (bfd_mach_o_scan_read_thread): Ditto. + (bfd_mach_o_scan_read_symtab): Ditto. + Do not create a section for the stabs. + (bfd_mach_o_scan_read_uuid): Check bfd_seek status. + (bfd_mach_o_scan_read_segment): Ditto. + (bfd_mach_o_scan_read_command): Ditto. + (bfd_mach_o_scan_start_address): Ditto. + (bfd_mach_o_scan): Use mach_o_wide_p instead of hard-coded test. + (bfd_mach_o_archive_p): Check bfd_seek status. + (bfd_mach_o_core_fetch_environment): Ditto. + + * mach-o-i386.c (bfd_mach_o_i386_mkobject): Don't set filetype. + +2009-06-06 H.J. Lu + + * elf32-i386.c (elf_i386_link_hash_table): Add irelifunc. + (elf_i386_link_hash_table_create): Initialize irelifunc. + (elf_i386_check_relocs): Updated. Set up irelifunc for + shared objects. + (elf_i386_allocate_dynrelocs): Use irelifunc for dynamic + relocation for non-GOT reference of STT_GNU_IFUNC symbol in + shared objects. + (elf_i386_relocate_section): Likewise. + + * elf64-x86-64.c (elf64_x86_64_link_hash_table): Add irelifunc. + (elf64_x86_64_link_hash_table_create): Initialize irelifunc. + (elf64_x86_64_check_relocs): Updated. Set up irelifunc for + shared objects. + (elf64_x86_64_allocate_dynrelocs): Use irelifunc for dynamic + relocation for non-GOT reference of STT_GNU_IFUNC symbol in + shared objects. + (elf64_x86_64_relocate_section): Likewise. + + * elf-bfd.h (_bfd_elf_create_static_ifunc_sections): Renamed to + ... + (_bfd_elf_create_ifunc_sections): This. + + * elflink.c (_bfd_elf_create_static_ifunc_sections): Renamed to + ... + (_bfd_elf_create_ifunc_sections): This. Create .rel[a].ifunc + for shared objects. + +2009-06-06 H.J. Lu + + * elf32-i386.c (elf_i386_check_relocs): Make room for dynamic + relocation for R_386_32 against STT_GNU_IFUNC symbol when + building shared object. Check info->executable instead of + !info->shared when setting non_got_ref. + (elf_i386_allocate_dynrelocs): Allocate dynamic relocation + for non-GOT reference of STT_GNU_IFUNC symbol in shared + object. Allocate GOT relocation agsinst STT_GNU_IFUNC + symbol if needed. + (elf_i386_relocate_section): Output dynamic relocation for + R_386_32 against STT_GNU_IFUNC symbol to get the real + function address when building shared object. + (elf_i386_finish_dynamic_symbol): Output R_386_GLOB_DAT + relocation for STT_GNU_IFUNC symbol in shared object. + + * elf64-x86-64.c (elf64_x86_64_check_relocs): Make room for + dynamic relocation for R_X86_64_64 against STT_GNU_IFUNC + symbol when building shared object. Check info->executable + instead of !info->shared when setting non_got_ref. + (elf64_x86_64_allocate_dynrelocs): Allocate dynamic relocation + for non-GOT reference of STT_GNU_IFUNC symbol in shared + library. Allocate GOT relocation agsinst STT_GNU_IFUNC symbol + if needed. + (elf64_x86_64_relocate_section): Output dynamic relocation + for R_X86_64_64 against STT_GNU_IFUNC symbol to get the real + function address when building shared object. + (elf64_x86_64_finish_dynamic_symbol): Output R_X86_64_GLOB_DAT + relocation for STT_GNU_IFUNC symbol in shared object. + +2009-06-06 Jan Kratochvil - * configure.in (--with-separate-debug-dir): New option. - * configure: Regenerate. - * Makefile.am (dwarf2.lo): Add rule to pass DEBUGDIR. + * Makefile.am: Run "make dep-am". + (BFD32_BACKENDS): Add mach-o-i386.lo. + (BFD32_BACKENDS_CFILES): Add mach-o-i386.c. * 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 - - * 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 - - 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 - - * 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 - - * Makefile.am (ACLOCAL_AMFLAGS): Add -I . -I ../config. - - * acinclude.m4: Don't include m4 files. Remove libtool - kludge. - - * Makefile.in: Regenerated. - * aclocal.m4: Likewise. - * configure: Likewise. - -2007-06-11 Sterling Augustine - Bob Wilson - * 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. - -2007-05-31 Richard Sandiford +2009-06-06 Alan Modra + + * elf32-spu.c (spu_elf_relocate_section): Match overlay number + when looking for soft-icache stubs. + +2009-06-05 Tristan Gingold + + * mach-o.h: Update copyright year. + (bfd_mach_o_mach_header_magic): New enum. + (bfd_mach_o_cpu_subtype): Now an enum. + (BFD_MACH_O_HEADER_SIZE, BFD_MACH_O_HEADER_64_SIZE): New macros. + (BFD_MACH_O_SECTION_SIZE, BFD_MACH_O_SECTION_64_SIZE): Ditto. + (BFD_MACH_O_LC_SEGMENT_SIZE, BFD_MACH_O_LC_SEGMENT_64_SIZE): Ditto. + (bfd_mach_o_load_command): Field type_required is now a boolean. + Reindent prototypes. + (bfd_mach_o_object_p, bfd_mach_o_core_p): Remove. + (bfd_mach_o_bfd_copy_private_symbol_data): Add a prototype. + (bfd_mach_o_bfd_copy_private_section_data): Ditto. + (bfd_mach_o_bfd_copy_private_bfd_data): Ditto. + (bfd_mach_o_get_symtab_upper_bound): Ditto. + (bfd_mach_o_canonicalize_symtab): Ditto. + (bfd_mach_o_get_symbol_info): Ditto. + (bfd_mach_o_print_symbol): Ditto. + (bfd_mach_o_bfd_print_private_bfd_data): Ditto. + (bfd_mach_o_make_empty_symbol): Ditto. + (bfd_mach_o_write_contents): Ditto. + + * mach-o.c (bfd_mach_o_object_p, bfd_mach_o_core_p, + bfd_mach_o_mkobject): Defines. + (bfd_mach_o_valid): Returns FALSE/TRUE instead of 0/1. + Do not check with target vector but with flavour. + (struct mach_o_section_name_xlat): New declaration. + (dwarf_section_names_xlat): Ditto. + (text_section_names_xlat): Ditto. + (data_section_names_xlat): Ditto. + (struct mach_o_segment_name_xlat): Ditto. + (segsec_names_xlat): Ditto. + (bfd_mach_o_convert_section_name_to_bfd): New function. + (bfd_mach_o_convert_section_name_to_mach_o): Ditto. + (bfd_mach_o_bfd_copy_private_symbol_data): Make it public. + (bfd_mach_o_bfd_copy_private_section_data): Ditto. + (bfd_mach_o_bfd_copy_private_bfd_data): Ditto. + Accept any input and output flavour. Do not share private data + anymore. + (bfd_mach_o_count_symbols): Add a comment. + (bfd_mach_o_get_symtab_upper_bound): Make it public. + (bfd_mach_o_canonicalize_symtab): Ditto. + (bfd_mach_o_get_symbol_info): Ditto. + (bfd_mach_o_print_symbol): Ditto. + (bfd_mach_o_write_header): Now returns a boolean instead of an int. + Use constants instead of hard-coded values. + (bfd_mach_o_scan_write_section_32): Use constants instead of hard-coded + values. + (bfd_mach_o_scan_write_section_64): Ditto. + (bfd_mach_o_scan_write_segment): Ditto. + Do not copy sections anymore. + (bfd_mach_o_write_contents): Make it public. + Remove dead code. Rewrite typeflag assignment. + (bfd_mach_o_build_commands): New function. + (bfd_mach_o_set_section_contents): Ditto. + (bfd_mach_o_make_empty_symbol): Make it public. + (bfd_mach_o_read_header): Make it static. + Convert to bfd_boolean. + Use constants instead of hard-coded values. + (bfd_mach_o_make_bfd_section): Call + bfd_mach_o_convert_section_name_to_bfd to create name. + (bfd_mach_o_scan_read_section_32): Use constants instead of hard-coded + values. + (bfd_mach_o_scan_read_section_64): Ditto. + (bfd_mach_o_scan_read_segment): Do not create a bfd section for + a segment anymore. Use constants instead of hard-coded values. + (bfd_mach_o_scan_read_command): Fix style. + (bfd_mach_o_scan): Use constants instead of hard-coded values. + Get rid of BFD_IO_FUNCS. + (bfd_mach_o_mkobject_init): Renamed from bfd_mach_o_mkobject. + (bfd_mach_o_header_p): Created from bfd_mach_o_object_p. + (bfd_mach_o_gen_object_p): New function, replaces bfd_mach_o_object_p. + (bfd_mach_o_object_p): Removed. + (bfd_mach_o_gen_core_p): New function, replaces ... + (bfd_mach_o_core_p): ... deleted. + (bfd_mach_o_bfd_print_private_bfd_data): Make it public. + + * mach-o-i386.c: New file. + * config.bfd: Use mach_o_i386_vec as targ_defvec for ix86-darwin. + * configure.in (TDEFINES): Add mach_o_i386_vec. + * configure: Regenerated. + * targets.c: Add mach_o_i386_vec. + + * mach-o.c: Update copyright years. + (BFD_IO_FUNCS): Remove (was not used). + (bfd_mach_o_mkarchive, bfd_mach_o_read_ar_hdr, bfd_mach_o_slurp_armap + bfd_mach_o_slurp_extended_name_table, + bfd_mach_o_construct_extended_name_table, + bfd_mach_o_truncate_arname, bfd_mach_o_write_armap, + bfd_mach_o_get_elt_at_index, bfd_mach_o_generic_stat_arch_elt, + bfd_mach_o_update_armap_timestamp, bfd_mach_o_close_and_cleanup, + bfd_mach_o_bfd_free_cached_info, bfd_mach_o_new_section_hook, + bfd_mach_o_get_section_contents_in_window, + bfd_mach_o_bfd_is_local_label_name, + bfd_mach_o_bfd_is_target_special_symbol, + bfd_mach_o_bfd_is_local_label_name, bfd_mach_o_get_lineno, + bfd_mach_o_find_nearest_line, bfd_mach_o_find_inliner_info, + bfd_mach_o_bfd_make_debug_symbol, bfd_mach_o_read_minisymbols, + bfd_mach_o_minisymbol_to_symbol, + bfd_mach_o_bfd_get_relocated_section_contents, + bfd_mach_o_bfd_relax_section, bfd_mach_o_bfd_link_hash_table_create, + bfd_mach_o_bfd_link_hash_table_free, bfd_mach_o_bfd_link_add_symbols, + bfd_mach_o_bfd_link_just_syms, bfd_mach_o_bfd_final_link, + bfd_mach_o_bfd_link_split_section, bfd_mach_o_set_arch_mach, + bfd_mach_o_bfd_merge_private_bfd_data, + bfd_mach_o_bfd_set_private_flags, bfd_mach_o_get_section_contents, + bfd_mach_o_bfd_gc_sections, bfd_mach_o_bfd_merge_sections, + bfd_mach_o_bfd_is_group_section, bfd_mach_o_bfd_discard_group, + bfd_mach_o_section_already_linked, bfd_mach_o_bfd_define_common_symbol, + bfd_mach_o_bfd_copy_private_header_data, + bfd_mach_o_core_file_matches_executable_p): Move these defines ... + * mach-o-target.c: ... here. + Update copyright years. + +2009-06-04 Alan Modra + + * dep-in.sed: Don't use \n in replacement part of s command. + * Makefile.am (DEP1): LC_ALL for uniq. + Run "make dep-am". + * Makefile.in: Regenerate. - * 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. +2009-06-03 H.J. Lu -2007-06-01 Alan Modra + * elf32-i386.c (elf_i386_allocate_dynrelocs): Remove check of + h->plt.refcount > 0 on STT_GNU_IFUNC symbol. + * elf64-x86-64.c (elf64_x86_64_allocate_dynrelocs): Likewise. - * simple.c (bfd_simple_get_relocated_section_contents): Init - input_bfds_tail. +2009-06-03 H.J. Lu -2007-05-30 Alan Modra + * elf32-i386.c (elf_i386_allocate_dynrelocs): Allocate + GOT entry for STT_GNU_IFUNC symbol with pointer equality. + (elf_i386_relocate_section): Adjust R_386_GOT32 relocation + against STT_GNU_IFUNC symbols for static executables. + (elf_i386_finish_dynamic_symbol): Load GOT entry with + PLT entry for STT_GNU_IFUNC symbol with pointer equality. - * 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. + * elf64-x86-64.c (elf64_x86_64_allocate_dynrelocs): Allocate + GOT entry for STT_GNU_IFUNC symbol with pointer equality. + (elf64_x86_64_finish_dynamic_symbol): Load GOT entry with + PLT entry for STT_GNU_IFUNC symbol with pointer equality. - * 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. +2009-06-02 Richard Sandiford -2007-05-25 Eric Christopher + * coff-rs6000.c (xcoff_ppc_relocate_section): Allow undefined + symbols to be left unimported when linking statically. + * xcofflink.c (xcoff_link_add_symbols): Ignore global linkage + code when linking statically. - * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): - Check that sym_sec isn't NULL before accessing. +2009-06-02 H.J. Lu -2007-05-24 Steve Ellcey + * elf32-i386.c (elf_i386_check_relocs): Increment + got.refcount for R_386_GOT32/R_386_GOTOFF relocations + against STT_GNU_IFUNC symbol. + (elf_i386_allocate_dynrelocs): Set got.refcount to 0 if + local STT_GNU_IFUNC definition is used. + (elf_i386_relocate_section): Handle got.offset != -1 for + R_386_GOT32/R_386_GOTOFF relocations against STT_GNU_IFUNC + symbol. - * Makefile.in: Regnerate. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Increment + got.refcount for R_X86_64_GOTPCREL/R_X86_64_GOTPCREL64 + relocations against STT_GNU_IFUNC symbol. + (elf64_x86_64_allocate_dynrelocs): Set got.refcount to 0 if + local STT_GNU_IFUNC definition is used. + (elf64_x86_64_relocate_section): Handle got.offset != -1 + for R_X86_64_GOTPCREL/R_X86_64_GOTPCREL64 relocations against + STT_GNU_IFUNC symbol. + +2009-06-01 H.J. Lu + + PR ld/10205 + * elf32-i386.c (elf_howto_table): Add R_386_IRELATIVE. + (elf_i386_reloc_type_lookup): Likewise. + (R_386_tls): Removed. + (R_386_irelative): New. + (R_386_vt_offset): Updated. + (elf_i386_rtype_to_howto): Likewise. + (elf_i386_link_hash_table): Add igotplt, iplt and irelplt. + (elf_i386_link_hash_table_create): Initialize igotplt, + iplt and irelplt. + (elf_i386_check_relocs): Handle STT_GNU_IFUNC symbol first. + (elf_i386_adjust_dynamic_symbol): Likewise. + (elf_i386_allocate_dynrelocs): Likewise. + (elf_i386_relocate_section): Likewise. + (elf_i386_size_dynamic_sections): Set up .iplt and .igot.plt + sections. + (elf_i386_finish_dynamic_symbol): When building a static + executable, use .iplt, .igot.plt and .rel.iplt sections for + STT_GNU_IFUNC symbols. Generate R_386_IRELATIVE relocation for + locally defined STT_GNU_IFUNC symbol. + + * elf64-x86-64.c (x86_64_elf_howto): Add R_X86_64_IRELATIVE. + (x86_64_reloc_map): Likewise. + (R_X86_64_standard): Updated. + (elf64_x86_64_link_hash_table): Add igotplt, iplt and irelplt. + (elf64_x86_64_link_hash_table_create): Initialize igotplt, + iplt and irelplt. + (elf64_x86_64_check_relocs): Handle STT_GNU_IFUNC symbol first. + (elf64_x86_64_adjust_dynamic_symbol): Likewise. + (elf64_x86_64_allocate_dynrelocs): Likewise. + (elf64_x86_64_relocate_section): Likewise. + (elf64_x86_64_size_dynamic_sections): Set up .iplt and .igot.plt + sections. + (elf64_x86_64_finish_dynamic_symbol): When building a static + executable, use .iplt, .igot.plt and .rela.iplt sections for + STT_GNU_IFUNC symbols. Generate R_X86_64_IRELATIVE relocation + for locally defined STT_GNU_IFUNC symbol. + + * reloc.c (BFD_RELOC_386_IRELATIVE): New. + (BFD_RELOC_X86_64_IRELATIVE): Likewise. + + * bfd-in2.h: Regenerated. + * libbfd.h: Likewise. + +2009-06-01 H.J. Lu + + * elf-bfd.h (struct bfd_elf_section_data): Remove indirect_relocs. + (_bfd_elf_make_ifunc_reloc_section): Removed. + (_bfd_elf_is_ifunc_symbol): Likewise. + (_bfd_elf_create_static_ifunc_sections): New. + + * elflink.c (_bfd_elf_adjust_dynamic_symbol): Move STT_GNU_IFUNC + symbol check to ... + (elf_link_add_object_symbols): Here. + (_bfd_elf_link_hash_hide_symbol): Don't clean plt on + STT_GNU_IFUNC symbol. + (elf_link_output_extsym): Call elf_backend_finish_dynamic_symbol + if a STT_GNU_IFUNC symbol is referenced in a non-shared object. + (IFUNC_INFIX): Removed. + (get_ifunc_reloc_section_name): Likewise. + (_bfd_elf_make_ifunc_reloc_section): Likewise. + (_bfd_elf_is_ifunc_symbol): Likewise. + (_bfd_elf_create_static_ifunc_sections): New. + +2009-05-29 H.J. Lu + + * elf32-i386.c (link_hash_newfunc): Add elf_i386_ prefix. + (create_got_section): Likewise. + (allocate_dynrelocs): Likewise. + (readonly_dynrelocs): Likewise. + (set_tls_module_base): Likewise. + (dtpoff_base): Likewise. + (tpoff): Likewise. + (elf_i386_link_hash_table_create): Updated. + (elf_i386_create_dynamic_sections): Likewise. + (elf_i386_check_relocs): Likewise. + (elf_i386_size_dynamic_sections): Likewise. + (elf_i386_relocate_section): Likewise. + + * elf64-x86-64.c (link_hash_newfunc): Add elf64_x86_64_ prefix. + (create_got_section): Likewise. + (allocate_dynrelocs): Likewise. + (readonly_dynrelocs): Likewise. + (set_tls_module_base): Likewise. + (dtpoff_base): Likewise. + (tpoff): Likewise. + (elf64_x86_64_link_hash_table_create): Updated. + (elf64_x86_64_create_dynamic_sections): Likewise. + (elf64_x86_64_check_relocs): Likewise. + (elf64_x86_64_size_dynamic_sections): Likewise. + (elf64_x86_64_relocate_section): Likewise. + +2009-05-28 Nick Clifton + + * targets.c (_bfd_target_vector): Only include plugin target in + all-targets build if BFD_SUPPORTS_PLUGINS is non-zero. + +2009-05-28 Ulrich Weigand + + * elf32-spu.c (struct call_info): New member broken_cycle. + (remove_cycle): Instead of physically removing call_info structures + to break call graph cycles, mark them using the broken_cycle flag. + (mark_overlay_section): Respect broken_cycle flag. + (unmark_overlay_section): Likewise. + (collect_lib_sections): Likewise. + (collect_overlays): Likewise. + (sum_stack): Likewise. + +2009-05-28 Ulrich Weigand + + * elf32-spu.c (insert_callee): Accumulate incoming callee->count. + (mark_functions_via_relocs): Initialize callee->count to 1. + (pasted_function): Likewise. + (spu_elf_auto_overlay): Honor call counts when determining number + of stubs required in software i-cache mode. + +2009-05-27 Rafael Avila de Espindola + + * plugin.c (program_name): Remove. + (plugin_program_name): New. + (bfd_plugin_set_program_name): New. + (try_load_plugin): Use plugin_program_name. + * plugin.h (bfd_plugin_set_program_name): New. + +2009-05-27 Rafael Avila de Espindola + + * aclocal.m4: Include ../config/plugins.m4. + * configure.in: Use AC_PLUGINS. * configure: Regenerate. - * aclocal.m4: Regenerate. + * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. -2007-05-22 Paul Brook +2009-05-27 Nathan Sidwell - * 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. + * elf32-ppc.c (ppc_elf_relax_section): Work with a partial + link. + * bout.c (b_out_bfd_relax_section): Reject relocatable links. + * elf32-m10300.c (mn10300_elf_relax_section): Likewise. + * elf32-avr.c (elf32_avr_relax_section): Likewise. + * elf32-frv.c (elf32_avr_relax_section): Likewise. + * elf32-xtensa.c (elf_xtensa_relax_section): Likewise. + * elf64-mmix.c (mmix_elf_relax_section): Likewise. + * elfxx-ia64.c (elfNN_ia64_relax_section): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_relax_section): Likewise. + * reloc.c (bfd_generic_relax_section): Likewise. + * reloc16.c (bfd_coff_reloc16_relax_section): Likewise. + * vms.c (vms_bfd_relax_section): Likewise. -2007-05-18 Paul Brook +2009-05-26 H.J. Lu - * 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. + * elf-bfd.h (_bfd_elf_is_ifunc_symbol): New. -2007-05-16 H.J. Lu - Alan Modra + * elf32-i386.c (is_indirect_symbol): Renamed to ... + * elflink.c (_bfd_elf_is_ifunc_symbol): This. - * elflink.c (_bfd_elf_adjust_dynamic_copy): Align dynamic bss - section to the minimum alignment. + * elf32-i386.c (allocate_dynrelocs): Updated. + (elf_i386_relocate_section): Likewise. + * elf64-x86-64.c (allocate_dynrelocs): Likewise. + (elf64_x86_64_relocate_section): Likewise. -2007-05-15 H.J. Lu - Alan Modra + * elf64-x86-64.c (is_indirect_symbol): Removed. - 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 - - * 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 - - * elf32-arm.c (elf32_arm_final_link_relocate): Correctly - handle the Thumb-2 JUMP19 relocation. - -2007-05-15 Alan Modra - - 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 +2009-05-26 Nick Clifton - * elf.c (bfd_elf_string_from_elf_section): Return NULL on - invalid shstrndx. - (bfd_elf_get_str_section): Likewise. - -2007-05-12 Alan Modra - - 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 - - * elf32-spu.c (elf_howto_table): Add howto for R_SPU_ADDR16X. - -2007-05-11 Alan Modra - - * 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 - - * 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. + * po/id.po: Updated Indonesian translation. -2007-05-10 Richard Sandiford +2009-05-26 Rafael Avila de Espindola - * 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. + * Makefile.am: Run "make dep-am". + (AM_CPPFLAGS): New. + (LIBDL): New. + (ALL_MACHINES): Add cpu-plugin.lo. + (ALL_MACHINES_CFILES): Add cpu-plugin.c. + (BFD32_BACKENDS): Add plugin.lo. + (BFD32_BACKENDS_CFILES): Add plugin.c. + (libbfd_la_LIBADD): Add LIBDL + * archures.c (bfd_architecture): Add bfd_arch_plugin. + (bfd_plugin_arch): Declare. + * bfd-in.h (BFD_SUPPORTS_PLUGINS): New. + * bfd.c (bfd): Add plugin_data. + * config.bfd: Handle the plugin target. + * configure.in: Check for --enable-plugins. + (LT_INIT): Use the dlopen option. + * cpu-plugin.c: New. + * plugin.c: New. + * plugin.h: New. + * targets.c (plugin_vec): Declare. + (_bfd_target_vector): Add plugin_vec. + * Makefile.in: Regenerate. + * bfd-in2.h: Regenerate. + * configure: Regenerate. -2007-05-11 Alan Modra +2009-05-26 Alan Modra - 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. + * dep-in.sed: Don't modify .o to .lo here. Output one filename + per line with all lines having continuation backslash. Prefix + first line with "A", following lines with "B". + * Makefile.am (DEP): Don't use dep.sed here. + (DEP1): Run $MKDEP on single files, modify .o to .lo here. Use + dep.sed here on dependencies, sort and uniq. + * Makefile.in: Regenerate. -2007-05-10 Richard Sandiford +2009-05-25 Tristan Gingold + + * makefile.vms: Add verilog.obj to object list OBJS. + +2009-05-24 Alan Modra + + * bfdio.c (bfd_seek): Formatting. Ensure newly allocated memory + for BFD_IN_MEMORY is cleared. + (bfd_bwrite): Zero excess memory allocated. + +2009-05-22 Julian Brown + + * elf32-arm.c (THUMB16_BCOND_INSN, THUMB32_INSN, THUMB32_B_INSN): New + macros. + (elf32_arm_stub_a8_veneer_b_cond, elf32_arm_stub_a8_veneer_b) + (elf32_arm_stub_a8_veneer_blx): New stub sequences. + (elf32_arm_stub_type): Add arm_stub_a8_veneer_b_cond, + arm_stub_a8_veneer_b and arm_stub_a8_veneer_blx. + (elf32_arm_stub_hash_entry): Add target_addend, orig_insn fields. + (a8_erratum_fix, a8_erratum_reloc): New structs. + (elf32_arm_link_hash_table): Add a8_erratum_fixes, + num_a8_erratum_fixes, fix_cortex_a8 fields. + (elf32_arm_link_hash_table_create): Zero fix_cortex_a8. + (elf32_arm_add_stub): Split into two parts, creating... + (elf32_arm_create_or_find_stub_sec): New function. + (elf32_arm_final_link_relocate): Add forward declaration. + (arm_build_one_stub): Add support for THUMB32_TYPE, Thumb-2 + relocations, multiple relocations per stub. + (find_stub_size_and_template): New (using parts of arm_size_one_stub). + (arm_size_one_stub): Use find_stub_size_and_template. + (a8_reloc_compare): New. + (find_thumb_glue): Add forward declaration. + (cortex_a8_erratum_scan): New. + (elf32_arm_size_stubs): Add Cortex-A8 erratum workaround support. + (bfd_elf32_arm_set_cortex_a8_fix): New. + (bfd_elf32_arm_set_target_relocs): Add fix_cortex_a8 argument. + (arm_map_one_stub): Add THUMB32_TYPE support. + (a8_branch_to_stub_data): New. + (make_branch_to_a8_stub): New. + (elf32_arm_write_section): Add Cortex-A8 erratum workaround support. + * bfd-in.h (bfd_elf32_arm_set_cortex_a8_fix): New. + (bfd_elf32_arm_set_target_relocs): Add argument for controlling + Cortex-A8 erratum workaround. + * bfd-in2.h: Regenerate. - * 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. +2009-05-22 Alan Modra -2007-05-10 Jakub Jelinek + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. - * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't do copyreloc - processing if symbol is defined in the executable. +2009-05-21 Alan Modra -2007-05-10 Alexandre Oliva + * elflink.c (elf_link_input_bfd): Correct *pindex change in last + commit. - * elf32-frv.c (_frvfdpic_check_discarded_relocs): New. - (frvfdpic_elf_discard_info): New. - (elf_backend_discard_info): Define for FDPIC. +2009-05-21 Alan Modra -2007-05-09 Mark Shinwell + * elf-bfd.h (struct elf_backend_data + ): Return an int. + * elf64-ppc.c (ppc64_elf_output_symbol_hook): Return 2 to drop + symbols on deleted .opd entries. + * elflink.c (elf_link_output_sym): Return without outputting sym + if output_symbol_hook returns 2. + (elf_link_output_extsym): Don't assign h->indx when symbol discarded. + Abort if we must not discard sym. + (elf_link_input_bfd): Similarly, don't set finfo->indices for + local syms. + (bfd_elf_final_link): Adjust elf_link_output_sym calls. + * elf-vxworks.c (elf_vxworks_link_output_symbol_hook): Adjust for + elf_backend_link_output_symbol_hook return type change. + * elf32-arm.c (output_arch_syminfo): Likewise. + (elf32_arm_output_map_sym, elf32_arm_output_stub_sym): Likewise. + (elf32_arm_output_arch_local_syms): Likewise. + * elf32-cr16c.c (elf32_cr16c_link_output_symbol_hook): Likewise. + * elf32-score.c (s3_bfd_score_elf_link_output_symbol_hook): Likewise. + (bfd_score_elf_link_output_symbol_hook): Likewise. + * elf32-score.h (s7_bfd_score_elf_link_output_symbol_hook): Likewise. + * elf32-score7.c (s7_bfd_score_elf_link_output_symbol_hook): Likewise. + * elf32-sh64.c (sh64_elf_link_output_symbol_hook): Likewise. + * elf32-spu.c (spu_elf_output_symbol_hook): Likewise. + * elf32-v850.c (v850_elf_link_output_symbol_hook): Likewise. + * elf64-hppa.c (elf64_hppa_link_output_symbol_hook): Likewise. + * elf64-mmix.c (mmix_elf_link_output_symbol_hook): Likewise. + * elf64-sh64.c (sh64_elf64_link_output_symbol_hook): Likewise. + * elf64-sparc.c (elf64_sparc_output_arch_syms): Likewise. + * elfxx-mips.c (_bfd_mips_elf_link_output_symbol_hook): Likewise. + * elfxx-mips.h (_bfd_mips_elf_link_output_symbol_hook): Likewise. - * 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. +2009-05-21 Alan Modra -2007-05-08 Alexandre Oliva + * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't segfault on + out of range .opd symbols. - * elf32-frv.c (elf32_frv_relocate_section): Discard dynamic relocs - for which _bfd_elf_section_offset returns -1. +2009-05-21 Dave Korn -2007-05-08 Alan Modra + * coffgen.c (coff_print_symbol): Use bfd_fprintf_vma, not + fprintf_vma directly. + * peXXigen.c (pe_print_edata): Likewise. + (pe_print_pdata): Likewise. + (_bfd_XX_print_ce_compressed_pdata): Likewise. + (_bfd_XX_print_private_bfd_data_common): Likewise. - * elf32-spu.c (spu_elf_size_stubs): Use "void *" for psyms. - (mark_functions_via_relocs): Likewise. +2009-05-19 Dave Korn -2007-05-07 Alan Modra + * cofflink.c (process_embedded_commands): Ignore "-aligncomm". - * 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. +2009-05-15 Andrew Stubbs + Paul Brook -2007-05-07 Alan Modra + * elf32-arm.c (elf32_arm_fix_exidx_coverage): Don't attempt to + fix discarded sections. - * 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. +2009-05-14 Ulrich Weigand -2007-05-07 Alan Modra + * elf32-spu.c (mark_overlay_section): Move .init and .fini + sections into the software icache. - * elf.c (assign_file_positions_for_load_sections): Don't check - core segment. +2009-05-14 Ulrich Weigand -2007-05-04 H.J. Lu + * elf32-spu.c (build_stub): Always build "compact" sofware + i-cache stubs. - * elflink.c (elf_link_sort_relocs): Return if both .rela.dyn - and .rel.dyn aren't present. +2009-05-14 Ulrich Weigand -2007-05-04 Nick Clifton + * elf32-spu.c (struct spu_link_hash_table): Add fromelem_size_log2. + (spu_elf_setup): Initialize it. + (spu_elf_size_stubs): Move .ovtab into .bss for software i-cache. + Update to new-sytle cache manager data structures. + (spu_elf_build_stubs): Generate new-style cache manager data + structures and symbols. + (spu_elf_auto_overlay): Update size computation. - * 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. +2009-05-14 Ulrich Weigand -2007-05-03 Sandra Loosemore + * elf32-spu.c (spu_elf_modify_segment_map): Move all PF_OVERLAY + segments first amongst the program headers. - * elf32-arm.c (allocate_dynrelocs): Fix typo in comment. +2009-05-14 Ulrich Weigand -2007-05-03 Vincent Riviere - Nick Clifton + * elf32-spu.c (spu_elf_relocate_section): Only encode overlay index + into addresses for relocation types that look at high bits. Remove + special handling of relocation overflow warnings. - 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 - - * 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. - -2007-04-30 Alan Modra - - * 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. +2009-05-14 Ulrich Weigand -2007-04-28 Sergey Rogozhkin + * elf32-spu.c (mark_functions_via_relocs): Handle cycles in the + control flow graph between fragments of a function. - * elfxx-mips.c (mips_elf_create_dynamic_relocation): Don't access - memory which we might not own. +2009-05-14 Ulrich Weigand -2007-04-27 Bob Wilson + * elf32-spu.c (spu_elf_size_stubs): Even in software i-cache mode, + generate only a 16-byte .toe section. + (spu_elf_build_stubs, spu_elf_auto_overlay): 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. +2009-05-14 Alan Modra -2007-04-27 Bob Wilson + * elf32-spu.c (spu_elf_size_stubs): Split out section placement to.. + (spu_elf_place_overlay_data): ..here. New function. + * elf32-spu.h (spu_elf_place_overlay_data): Declare. - * elf32-xtensa.c (xtensa_read_table_entries): Step through table - contents and relocs in parallel. +2009-05-13 Andrew Jenner -2007-04-27 Bob Wilson + * elf32-arm.c: Move sysdep.h to start of file. - * elf32-xtensa.c (relax_property_section): Remove extra irel increment. +2009-05-11 Ulrich Weigand -2007-04-27 Alan Modra + * elf32-spu.c (spu_elf_find_overlays): Don't use .ovl.init lma as + start of overlays. + (spu_elf_build_stubs): Don't define __icache_tagbase. Define + __icache_tag_array and __icache_tag_array_size. - * cpu-rs6000.c: Write Mimi's name in ASCII. - * coff-rs6000.c: Likewise. - * rs6000-core.c: Likewise. +2009-05-11 Masaki Muranaka -2007-04-27 Alan Modra + * elf32-bfin.c (bfin_bfd_reloc_type_lookup): Remove unnecessary + ATTRIBUTE_UNUSED. + (bfinfdpic_link_omit_section_dynsym): Likewise. + (elf32_bfinfdpic_finish_dynamic_sections): Likewise. - * sysdep.h: Include config.h first. - Many files: Include sysdep.h before bfd.h. - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerate. +2009-05-05 Paul Brook -2007-04-25 Alan Modra + * bfd-in.h (elf32_arm_fix_exidx_coverage): Add prototype. + * bfd-in2.h: Regenerate. + * elf32-arm.c (arm_unwind_edit_type, arm_unwind_table_edit): Define. + (_arm_elf_section_data): Add text and exidx fields. + (add_unwind_table_edit, get_arm_elf_section_data, adjust_exidx_size, + insert_cantunwind_after, elf32_arm_fix_exidx_coverage, offset_prel31, + copy_exidx_entry): New functions. + (elf32_arm_write_section): Fixup .ARM.exidx contents. + +2009-05-05 Christophe lyon + + * elf32-arm.c (DEF_STUBS): New helper define. + (DEF_STUB): Likewise. + (stub_def): New type. + (stub_definitions): New array, containing stub template pointers + and sizes. + (arm_size_one_stub): Make use of stub_definitions. + +2009-05-04 Dave Korn + + * elflink.c (find_version_for_sym): Remove from here, ... + * linker.c (bfd_find_version_for_sym): ... rename, replace + here, make public and update all callers. + * bfd-in2.h: Regenerate. + +2009-04-30 Nick Clifton + + * elf-bfd.h (struct bfd_elf_section_data): Add indirect_relocs + section pointer. + (struct elf_obj_data): Add has_ifunc_symbols boolean. + * elf.c (swap_out_syms): Convert BSF_GNU_INDIRECT_FUNCTION flags + into a STT_GNU_IFUNC symbol type. + (_bfd_elf_is_function_type): Accept STT_GNU_IFUNC as a function + type. + (_bfd_elf_set_osabi): Set the osasbi field to ELFOSABI_LINUX if + the binary contains ifunc symbols. + * elfcode.h (elf_slurp_symbol_table): Translate the STT_GNU_IFUNC + symbol type into a BSF_GNU_INDIRECT_FUNCTION flag. + * elf32-i386.c (is_indirect_function): New function. + (elf_i386_check_relocs): Create an ifunc output section. + (allocate_dynrelocs): Create dynamic relocs in the ifunc output + section if necessary. + (elf_i386_relocate_section): Emit a reloc against an ifunc symbol + if necessary. + (elf_i386_add_symbol_hook): New function. Set the + has_ifunc_symbols field of the elf_obj_data structure if an ifunc + symbol is encountered. + (elf_backend_post_process_headers): Define. + (elf_backend_add_symbol_hook): Define. + (elf_i386_post_process_headers): Rename to + elf_i388_fbsd_post_process_headers. + * elf64-x86_64.c (IS_X86_64_PCREL_TYPE): New macro. + (is_indirect_function): New function. + (elf64_x86_64_check_relocs): Create an ifunc output section. + (allocate_dynrelocs): Create dynamic relocs in the ifunc output + section if necessary. + (elf64_x86_64_relocate_section): Emit a reloc against an ifunc + symbol if necessary. + (elf_i386_add_symbol_hook): Set the has_ifunc_symbols field of the + elf_obj_data structure if an ifunc symbol is encountered. + (elf_backend_post_process_headers): Define. + * elflink.c (_bfd_elf_adjust_dynamic_symbol): Always create a PLT + if we have ifunc symbols to handle. + (get_ifunc_reloc_section_name): New function. Computes the name + for an ifunc section. + (_bfd_elf_make_ifunc_reloc_section): New function. Creates a + section to hold ifunc relocs. + * syms.c (BSF_GNU_INDIRECT_FUNCTION): Define. + (bfd_print_symbol_vandf): Handle ifunc symbols. + (bfd_decode_symclass): Likewise. + * bfd-in2.h: Regenerate. - * sysdep.h: Revert last change. +2009-04-30 Joseph Myers -2007-04-24 Nick Clifton + * elf32-arm.c (elf32_arm_check_relocs): Give errors for absolute + MOVW and MOVT relocations in a shared library link. - * coffcode.h (coff_slurp_reloc_table): Initialise dst.r_offset. - * coff-m68k.c (m68kcoff_rtype_to_howto): Initialize relent.howto. +2009-04-27 Anthony Green -2007-04-24 Alan Modra + * verilog.c: New file. + * Makefile.am (BFD32_LIBS): Add verilog.c. + (BFD32_LIBS_CFILES): Add verilog.c. + (verilog.lo): New build rule. + * Makefile.in: Rebuilt. + * targets.c: Add verilog support. + * bfd.c (tdata union): Add Verilog private data field. + * bfd-in2.h: Regenerate. - * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Warn if - eh_frame_hdr table won't be created. +2009-04-27 H.J. Lu -2007-04-24 Alan Modra + * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Don't + copy pe_opthdr. - * acinclude.m4: Include config/stdint.m4. - * configure.in: Invoke GCC_HEADER_STDINT. - * sysdep.h: Don't include ansidecl.h here. - * configure: Regenerate. - * config.in: Regenerate. - * Makefile.in: Regenerate. +2009-04-23 Matthias Klose -2007-04-23 Nathan Sidwell + * peXXigen.c (_bfd_XXi_swap_sym_in): Initialize `name'. - * 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. +2009-04-22 Christophe Lyon -2007-04-21 Nick Clifton + PR9743 + * elf32-arm.c (arm_type_of_stub): Handle R_ARM_THM_JUMP24, + R_ARM_JUMP24 and R_ARM_PLT32 relocations. + (elf32_arm_size_stubs): Likewise. + (record_thumb_to_arm_glue): Deleted unused function. + (bfd_elf32_arm_process_before_allocation): No longer handle + R_ARM_THM_JUMP24, R_ARM_JUMP24 and R_ARM_PLT32 relocations here. + (elf32_arm_final_link_relocate): Handle R_ARM_THM_JUMP24, + R_ARM_JUMP24 and R_ARM_PLT32 relocations. - * 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. +2009-04-21 Daniel Jacobowitz -2007-04-21 Alan Modra + * elf32-arm.c (INTERWORK_FLAG): Check BFD_LINKER_CREATED. + (elf32_arm_write_section): Declare early. + (elf32_arm_size_stubs): Skip non-stub sections in the stub BFD. + (arm_allocate_glue_section_space): Exclude empty sections. + (ARM_GLUE_SECTION_FLAGS): Add SEC_LINKER_CREATED. + (bfd_elf32_arm_add_glue_sections_to_bfd): Do not skip the stub + BFD. + (elf32_arm_output_glue_section, elf32_arm_final_link): New. + (elf32_arm_merge_eabi_attributes): Skip the stub BFD. + (elf32_arm_size_dynamic_sections): Allocate interworking + sections here. + (bfd_elf32_bfd_final_link): Define. - * config.bfd (spu-*-elf): Delete targ_selvecs. +2009-04-21 H.J. Lu -2007-04-19 Nick Clifton + * coff-ia64.c (COFF_PAGE_SIZE): Changed to 8K. - * coffcode.h (coff_rtype_to_howto): Initialise genrel.howto. + * coffcode.h (coff_compute_section_file_positions): Clear + D_PAGED if PE section alignment is smaller than COFF_PAGE_SIZE. -2007-04-19 Alan Modra + * libcoff-in.h (pe_tdata): Remove force_minimum_alignment and + force_minimum_alignment. - * bfd.c (bfd_demangle): New function. - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerate. - * bfd-in2.h: Regenerate. + * libcoff.h: Regenerated. -2007-04-18 Matthias Klose + * pei-ia64.c (PEI_TARGET_SUBSYSTEM): Removed. + (PEI_FORCE_MINIMUM_ALIGNMENT): Likewise. - * Makefile.am (libbfd_la_LDFLAGS): Use bfd soversion. - (bfdver.h): Use the date in non-release builds for the soversion. - * Makefile.in: Regenerate. + * peicode.h (pe_mkobject): Don't set force_minimum_alignment + nor target_subsystem. -2007-04-17 Paul Brook + * peXXigen.c (_bfd_XXi_swap_aouthdr_out): Don't check + force_minimum_alignment nor target_subsystem. - * 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. +2009-04-21 Kai Tietz -2007-04-17 Daniel Jacobowitz + * coff-x86_64.c (PEI_HEADERS): Protect includes. + (bfd_pe_print_pdata): Remove #ifdef PE variation. + * pei-x86_64.c (PEI_HEADERS): Define to prevent double + include in coff-x86_64.c of headers. + (PDATA_ROW_SIZE): New define. + (pex_regs[]): New static array. + (pex64_get_runtime_function): New static function. + (pex64_get_unwind_info): Likewise. + (pex64_get_scope_entry): Likewise. + (pex64_xdata_print_uwd_codes): Likewise. + (pex64_get_section_by_rva): Likewise. + (pex64_dump_xdata): Likewise. + (pex64_bfd_print_pdata): Likewise. + (bfd_pe_print_pdata): Define as pex64_bfd_print_pdata. + * peXXigen.c (_bfd_pex64_print_pdata): Removed implementation. + * libpei.h (_bfd_pex64_print_pdata): Removed declaration. - * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Put - DT_MIPS_RLD_MAP before DT_DEBUG again. +2009-04-19 Peter O'Gorman + Alan Modra + Dave Korn -2007-04-14 Steve Ellcey + * peXXigen.c (_bfd_XXi_swap_sym_in): Fix name handling w.r.t + long names and non-NUL-terminated strings. - * Makefile.am: Add ACLOCAL_AMFLAGS. - * configure.in: Change macro call order. - * Makefile.in: Regnerate. - * doc/Makefile.in: Regenerate. - * configure: Regenerate. +2009-04-17 H.J. Lu -2007-04-14 Jakub Jelinek + * bfd-in2.h: Regenerated. - * 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. +2009-04-17 H.J. Lu -2007-04-12 Richard Sandiford + * peXXigen.c (_bfd_XX_print_private_bfd_data_common): Replace + IMAGE_SUBSYSTEM_EFI_ROM with IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER. - * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Don't add - DT_MIPS_RTLD_MAP for PIEs. +2009-04-17 H.J. Lu -2007-04-12 Richard Sandiford + PR binutils/10074 + * coffcode.h (bfd_pei_p): New. - * 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. + * config.bfd: Remove bfd_efi_bsdrv_ia32_vec, + bfd_efi_rtdrv_ia32_vec, bfd_efi_bsdrv_x86_64_vec, + bfd_efi_rtdrv_x86_64_vec, bfd_efi_bsdrv_ia64_vec and + bfd_efi_rtdrv_ia64_vec. Replace bfd_efi_app_ia32_vec, + bfd_efi_app_x86_64_vec and bfd_efi_app_ia64_vec with + i386pei_vec, x86_64pei_vec and bfd_pei_ia64_vec, respectively. -2007-04-12 Bob Wilson + * configure.in: Remove bfd_efi_bsdrv_ia32_vec, + bfd_efi_rtdrv_ia32_vec, bfd_efi_bsdrv_x86_64_vec, + bfd_efi_rtdrv_x86_64_vec, + bfd_efi_bsdrv_ia64_vec and bfd_efi_rtdrv_ia64_vec. Replace + bfd_efi_ia64_vec with bfd_pei_ia64_vec. + * targets.c: Likewise. - * 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. + * configure: Regenerated. + * libcoff.h: Likewise. + * Makefile.in: Likewise. -2007-04-12 Bob Wilson + * efi-app-ia32.c: Removed. + * efi-app-x86_64.c: Likewise. + * efi-bsdrv-ia32.c: Likewise. + * efi-bsdrv-ia64.c: Likewise. + * efi-bsdrv-x86_64.c: Likewise. + * efi-rtdrv-ia32.c: Likewise. + * efi-rtdrv-ia64.c: Likewise. + * efi-rtdrv-x86_64.c: Likewise. + * efi-rtdrv-ia32.c: Likewise. + + * efi-app-ia64.c: Moved to ... + * pei-ia64.c: This. + (TARGET_SYM): Set to bfd_pei_ia64_vec. + (TARGET_NAME): Set to pei-ia64. + + * libpei.h (bfd_target_pei_p): Removed. + (bfd_target_pei_arch): Likewise. + (bfd_target_efi_app_p): Likewise. + (bfd_target_efi_app_arch): Likewise. + (bfd_target_efi_bsdrv_p): Likewise. + (bfd_target_efi_bsdrv_arch): Likewise. + (bfd_target_efi_rtdrv_p): Likewise. + (bfd_target_efi_rtdrv_arch): Likewise. + (bfd_pe_executable_p): Likewise. + + * Makefile.am (BFD32_BACKENDS): Remove efi-app-ia32.lo, + efi-bsdrv-ia32.lo and efi-rtdrv-ia32.lo. + (BFD32_BACKENDS_CFILES): Remove efi-app-ia32.c, efi-bsdrv-ia32.c + and efi-rtdrv-ia32.c. + (BFD64_BACKENDS): Remove efi-app-ia64.lo, efi-bsdrv-ia64.lo, + efi-rtdrv-ia64.lo, efi-app-x86_64.lo, efi-bsdrv-x86_64.lo and + efi-rtdrv-x86_64.lo. Add pei-ia64.lo. + (BFD64_BACKENDS_CFILES): Remove efi-app-ia64.c, efi-bsdrv-ia64.c, + efi-rtdrv-ia64.c, efi-app-x86_64.c, efi-bsdrv-x86_64.c and + efi-rtdrv-x86_64.c. Add pei-ia64.c. + (efi-app-ia64.lo): Removed. + (efi-bsdrv-ia32.lo): Likewise. + (efi-rtdrv-ia32.lo): Likewise. + (efi-app-ia64.lo): Likewise. + (efi-bsdrv-ia64.lo): Likewise. + (efi-rtdrv-ia64.lo): Likewise. + (efi-app-x86_64.lo): Likewise. + (efi-bsdrv-x86_64.lo): Likewise. + (efi-rtdrv-x86_64.lo): Likewise. + (pei-ia64.lo): New. + + * peicode.h (coff_swap_scnhdr_in): Replace bfd_pe_executable_p + with bfd_pei_p. + (arch_type): Removed. + (pe_arch): Likewise. + (pe_bfd_object_p): Just return coff_object_p. + + * peXXigen.c (_bfd_XXi_swap_scnhdr_out): Replace + bfd_pe_executable_p with bfd_pei_p. + +2009-04-17 Christophe Lyon + + * elf32-arm.c (elf32_arm_size_stubs): Handle long branches through + PLT entries to an undefined symbol when generating a shared + library. + +2009-04-17 Nick Clifton + + PR 9909 + * coffcode.h (handle_COMDAT): Allow for external COMDAT symbols. + +2009-04-16 Richard Sandiford + + * aout-adobe.c (aout_32_bfd_define_common_symbol): Define. + * aout-target.h (MY_bfd_define_common_symbol): Likewise. + * aout-tic30.c (MY_bfd_define_common_symbol): Likewise. + * binary.c (binary_bfd_define_common_symbol): Likewise. + * bout.c (b_out_bfd_define_common_symbol): Likewise. + * coff-alpha.c (_bfd_ecoff_bfd_define_common_symbol): Likewise. + * coff-mips.c (_bfd_ecoff_bfd_define_common_symbol): Likewise. + * coffcode.h (coff_bfd_define_common_symbol): Likewise. + * elfxx-target.h (bfd_elfNN_bfd_define_common_symbol): Likewise. + * i386msdos.c (msdos_bfd_define_common_symbol): Likewise. + * i386os9k.c (os9k_bfd_define_common_symbol): Likewise. + * ieee.c (ieee_bfd_define_common_symbol): Likewise. + * ihex.c (ihex_bfd_define_common_symbol): Likewise. + * libbfd-in.h (_bfd_nolink_bfd_define_common_symbol): Likewise. + * mach-o.c (bfd_mach_o_bfd_define_common_symbol): Likewise. + * mmo.c (mmo_bfd_define_common_symbol): Likewise. + * nlm-target.h (nlm_bfd_define_common_symbol): Likewise. + * oasys.c (oasys_bfd_define_common_symbol): Likewise. + * pef.c (bfd_pef_bfd_define_common_symbol): Likewise. + * ppcboot.c (ppcboot_bfd_define_common_symbol): Likewise. + * som.c (som_bfd_define_common_symbol): Likewise. + * srec.c (srec_bfd_define_common_symbol): Likewise. + * tekhex.c (tekhex_bfd_define_common_symbol): Likewise. + * versados.c (versados_bfd_define_common_symbol): Likewise. + * vms.c (vms_bfd_define_common_symbol): Likewise. + * xcoff-target.h (_bfd_xcoff_bfd_define_common_symbol): Likewise. + * xsym.c (bfd_sym_bfd_define_common_symbol): Likewise. + * coff-rs6000.c (rs6000coff_vec): Add _bfd_xcoff_define_common_symbol. + (pmac_xcoff_vec): Likewise. + * coff64-rs6000.c (rs6000coff64_vec): Likewise. + (aix5coff64_vec): Likewise. + * linker.c (bfd_generic_define_common_symbol): New function. + * targets.c (BFD_JUMP_TABLE_LINK): Add NAME##_bfd_define_common_symbol. + (_bfd_define_common_symbol): New field. + * libcoff-in.h (_bfd_xcoff_define_common_symbol): Declare. + * xcofflink.c (_bfd_xcoff_define_common_symbol): New function. + (xcoff_build_ldsyms): Don't set XCOFF_DEF_REGULAR for common + symbols here. + * bfd-in2.h: Regenerate. + * libbfd.h: Likewise. + * libcoff.h: Likewise. - * elf32-xtensa.c (elf_xtensa_gc_mark_hook): Don't follow references - from Xtensa property sections. +2009-04-15 Anthony Green -2007-04-12 Alan Modra + * targets.c: Add moxie support. + * Makefile.am: Ditto. + * Makefile.in: Rebuilt. + * cpu-moxie.c, elf32-moxie.c: New files. + * archures.c: Add moxie support. + * configure.in: Add moxie support. + * configure: Rebuilt. + * config.bfd, archures.c: Add moxie support. + * bfd-in2.h: Rebuilt. - * elf32-spu.c (needs_ovl_stub): Test that spu_elf_section_data - is non-NULL before dereferencing. +2009-04-15 Christophe Lyon -2007-04-11 Nathan Sidwell + * elf32-arm.c (elf32_arm_final_link_relocate): Don't convert ARM + branch to an undef weak symbol into a jump to next instruction if + a PLT entry will be created. - * elf-vxworks.c (elf_vxworks_emit_relocs): Remap weakdef PLT slot - relocs too. +2009-04-14 Dave Korn -2007-04-10 Richard Henderson + * coffgen.c (make_a_section_from_file): Set the backend long + section names enable if long section names found on input. + * coffcode.h: Extend long section names documentation to match. - * 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. +2009-04-08 H.J. Lu -2007-04-09 Daniel Jacobowitz + * elflink.c (elf_link_add_object_symbols): Warn alternate ELF + machine code. - * 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. +2009-04-07 DJ Delorie -2007-04-03 Matt Thomas + * archures.c: Add bfd_mach_mep_c5. + * bfd-in2.h: Likewise. + * cpu-mep.c: Add bfd_c5_arch. + * elf32-mep.c: Support it. - * 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. +2009-04-07 H.J. Lu -2007-04-05 H.J. Lu + * elflink.c (_bfd_elf_section_already_linked): Add `\n' for + info->callbacks->einfo. + * linker.c (_bfd_generic_section_already_linked): Likewise. - 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. +2009-04-06 DJ Delorie -2007-04-05 Alan Modra + * elf32-h8300.c (elf32_h8_relax_section): Relax MOVA opcodes. - * elf32-spu.c (spu_elf_output_symbol_hook): New function. - (elf_backend_link_output_symbol_hook): Define. +2009-04-06 H.J. Lu -2007-04-02 Nick Clifton + * coff-x86_64.c (bfd_pe_print_pdata): Defined to + _bfd_pex64_print_pdata only if PE is defined. - 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. + * libpei.h (_bfd_pep_print_x64_pdata): Renamed to ... + (_bfd_pex64_print_pdata): This. -2007-03-29 Nick Clifton + * peXXigen.c (_bfd_pep_print_x64_pdata): Renamed to ... + (_bfd_pex64_print_pdata): This. Defined only if COFF_WITH_pex64 + is defined. - 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. +2009-04-05 Kai Tietz -2007-03-29 Alan Modra + * coff-x86_64.c (bfd_pe_print_pdata): Define as + _bfd_pep_print_x64_pdata. + * libpei.h (_bfd_pep_print_x64_pdata): Add prototype. + * peXXigen.c (_bfd_pep_print_x64_pdata): New. - 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. +2009-04-02 Sterling Augustine -2007-03-28 Richard Sandiford + * elf32-xtensa.c (relax_property_section): Always set r_offset + to zero. - * 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. +2009-04-02 Christophe Lyon -2007-03-28 Richard Sandiford - Phil Edwards + * elf32-arm.c (elf32_arm_stub_long_branch_v4t_thumb_thumb, + elf32_arm_stub_long_branch_v4t_thumb_thumb_pic): Two new long + branch stubs. + (elf32_arm_stub_type): New enum values for the two new stubs. + (arm_type_of_stub): Make use of the two new stubs. + (arm_size_one_stub): Handle the two new stubs. - * doc/bfd.texinfo: Put the contents after the title page rather - than at the end of the document. +2009-04-01 Matt Thomas -2007-03-27 Andreas Schwab + * elf32-vax.c (elf_vax_check_relocs): Do not put relocations against + hidden symbols into the GOT or PLT.GOT. + (elf_vax_relocate_section): Do not emit a PCREL reloc + into a shared object if it is against a hidden symbol. - * elfxx-ia64.c (elf_backend_default_execstack): Define to 0. +2009-04-01 Richard Sandiford -2007-03-26 H.J. Lu + * xcofflink.c (xcoff_archive_info): Add contains_shared_object_p + and know_contains_shared_object_p. + (xcoff_archive_contains_shared_object_p): Add an "info" parameter. + Cache the result in the archive_info table. + (xcoff_auto_export_p): Add an "info" parameter and update the + call to xcoff_archive_contains_shared_object_p. + (xcoff_mark_auto_exports): Update accordingly. + (xcoff_post_gc_symbol): Likewise. - * configure: Regenerated. +2009-04-01 Richard Sandiford -2007-03-26 Alan Modra - - * 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 - - * 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. + * xcofflink.c (bfd_link_input_bfd): Treat __rtinit as C_HIDEXT + rather than C_EXT. -2007-03-26 Thiemo Seufer +2009-04-01 Richard Sandiford - 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. + * coff-rs6000.c (member_layout): New structure. + (archive_iterator): Likewise. + (member_layout_init): New function. + (archive_iterator_begin): Likewise. + (archive_iterator_next): Likewise. + (xcoff_write_armap_old): Use the new iterator functions. + (do_shared_object_padding): Delete. + (xcoff_write_armap_big): Use the new iterator functions. Simplify + handling of arch_info. + (xcoff_write_archive_contents_old): Allocate arelt_data in the + first loop rather than the second. Allocate a member header if + there isn't one, then work out the stat information and length + in the first loop too. Use the new iterators for the second loop. + (xcoff_write_archive_contents_big): Likewise. -2007-03-23 H.J. Lu +2009-04-01 Richard Sandiford - * configure: Regenerated. + * bfd-in.h (bfd_xcoff_split_import_path): Declare. + (bfd_xcoff_set_archive_import_path): Likewise. + * bfd-in2.h: Regenerate. + * xcofflink.c: Include libiberty.h. + (xcoff_archive_info): New structure. + (xcoff_archive_info_hash): New function. + (xcoff_archive_info_eq): Likewise. + (xcoff_get_archive_info): Likewise. + (_bfd_xcoff_bfd_link_hash_table_create): Initialize archive_info. + (bfd_xcoff_split_import_path): New function. + (bfd_xcoff_set_archive_import_path): Likewise. + (xcoff_set_import_path): Move earlier in file. + (xcoff_link_add_dynamic_symbols): Set the import path of a non-archive + object to the the directory part of the bfd's filename. Get the + import path and filename of an archive object from the archive's + xcoff_tdata, initializing it if necessary. Update use of + import_file_id. + (bfd_link_input_bfd): Update use of import_file_id. + (xcoff_write_global_symbol): Likewise. + +2009-04-01 Richard Sandiford + + * xcofflink.c (xcoff_link_hash_table): Moved from include/coff/xcoff.h. + +2009-04-01 Richard Sandiford + + * xcofflink.c (xcoff_link_create_extra_sections): Don't create + a .loader section for relocatable links. + (xcoff_need_ldrel_p): New function. + (xcoff_mark): Use it. + (bfd_xcoff_link_count_reloc): Only count loader relocs if there's + a loader section. + (xcoff_build_ldsym): New function, split out from... + (xcoff_build_ldsyms): ...here. Rename to... + (xcoff_post_gc_symbol): ...this. Only export symbols, and only + call xcoff_build_ldsym, if there's a loader section. + (xcoff_build_loader_section): New function, extracted verbatim from... + (bfd_xcoff_size_dynamic_sections): ...here. Only call it if + there's a loader section. Only add an __rtinit loader symbol + if there's a loader section. Update after above name change. + (xcoff_symbol_section, xcoff_create_ldrel): New functions. + (bfd_link_input_bfd): Use xcoff_need_ldrel_p, xcoff_symbol_section + and xcoff_create_ldrel. + (xcoff_write_global_symbol): Use xcoff_create_ldrel. + (xcoff_reloc_link_order): Likewise, but only call it if there's + a loader section. Use xcoff_symbol_section. + (_bfd_xcoff_bfd_final_link): Only use fdinfo.ldrel and fdinfo.ldsym + if there's a loader section. + +2009-04-01 Richard Sandiford + + * xcofflink.c (bfd_link_input_bfd): Fix buffer overrun. + +2009-04-01 Christophe Lyon + + * elf32-arm.c (group_sections): Rewrite loops for better + readability. + +2009-03-30 DJ Delorie + + * elflink.c (elf_link_input_bfd): Don't try to resolve complex + relocs when doing a relocatable link. + +2009-03-28 Mark Mitchell + + * coff-arm.c (coff_arm_merge_private_bfd_data): Use "error:", not + "ERROR:", in error messages. + * cpu-arm.c (bfd_arm_merge_machines): Likewise. + * elf-attrs.c (_bfd_elf_merge_object_attributes): Likewise. + * elf32-arm.c (tag_cpu_arch_combine): Likewise. + (elf32_arm_merge_eabi_attributes): Likewise. + (elf32_arm_merge_private_bfd_data): Likewise. + +2009-03-27 Nick Clifton + + * section.c (bfd_get_section_contents): Detect and handle the case + where a section has the SEC_IN_MEMORY flag set but no actual + contents allocated. + +2009-03-26 Alan Modra + + PR 6494 + * elf.c (copy_elf_program_header): Do not check that PT_GNU_RELRO + p_filesz and p_memsz are equal. Use p_memsz as the segment size. + (assign_file_positions_for_non_load_sections): Zap PT_GNU_RELRO + if we don't find matching PT_LOAD when copying. + +2009-03-25 M R Swami Reddy + + * elf32-crx.c (crx_elf_howto_table): Zero the src_mask field of + the reloc descriptions. + +2009-03-25 Hans-Peter Nilsson + + * elf32-cris.c (cris_elf_relocate_section) + : Handle COMMON symbols. + : Ditto. + +2009-03-24 H.J. Lu + + * cpu-i386.c (bfd_x86_64_arch_intel_syntax): Make it static. + (bfd_i386_arch_intel_syntax): Likewise. + (i8086_arch): Likewise. + (bfd_x86_64_arch): Likewise. + +2009-03-24 Hans-Peter Nilsson + + * elf32-cris.c (cris_elf_relocate_section): : Allow use of non-local + symbols for non-allocated sections. Don't check whether to + generate R_CRIS_DTPMOD for non-allocated sections. + (cris_elf_gc_sweep_hook) : Don't + handle relocation GC:ing if applied to non-allocated section. + (cris_elf_check_relocs): Similar. + + * elf32-cris.c (cris_elf_relocate_section) + : Don't include the TLS size + when emitting a known TP offset in the GOT. -2007-03-23 Joseph Myers +2009-03-23 Alan Modra + + * elf64-ppc.c (synthetic_opd): Delete. + (compare_symbols): Look for .opd name rather than section match. + (ppc64_elf_get_synthetic_symtab): Likewise. + +2009-03-21 Alan Modra + + * elf32-ppc.c (is_pic_glink_stub): Delete. + (is_nonpic_glink_stub): New function. + (ppc_elf_get_synthetic_symtab): Check for last non-pic stub rather + than first pic one. + (struct ppc_elf_link_hash_table ): Comment fix. + +2009-03-20 Martin Schwidefsky + Andreas Krebbel - * configure.in: Use ACX_PKGVERSION and ACX_BUGURL. - * configure: Regenerate. + * elf32-s390.c (elf_s390_check_relocs): Use the SYMBOL_* + macros for visibilty and locality checks. + (elf_s390_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (elf_s390_relocate_section): Likewise. + (elf_s390_finish_dynamic_symbol): Likewise. + * elf64-s390.c (elf_s390_check_relocs): Likewise. + (elf_s390_adjust_dynamic_symbol): Likewise. + (allocate_dynrelocs): Likewise. + (elf_s390_relocate_section): Likewise. + (elf_s390_finish_dynamic_symbol): Likewise. -2007-03-23 Alan Modra +2009-03-19 Kai Tietz - * 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. + * bfd-in2.h: Regenerated. + * coffcode.h (sec_to_styp_flags): For pe-coff add SEC_READONLY + for debugging sections and map memory read/write dependent on + SEC_COFF_NOREAD. + (styp_to_sec_flags): Set SEC_COFF_NOREAD for sections + without memory read flags set. + * section.c: Add SEC_COFF_NOREAD to section flags. -2007-03-22 Joseph Myers +2009-03-19 Andreas Schwab - * 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. + * elf32-hppa.c (final_link_relocate): Cast bfd_vma values to long + for format string. -2007-03-22 H.J. Lu +2009-03-19 Alan Modra - 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. + * elf32-spu.c (spu_elf_find_overlays): Separate error return from + "no overlays" return. If there are overlays, create overlay + manager entry symbols here, so that.. + (spu_elf_build_stubs): ..we don't need to set them up here. + Simplify entry symbol tests. + * elf32-spu.h (spu_elf_find_overlays): Update prototype. -2007-03-22 H.J. Lu +2009-03-18 Mark Kettenis - PR ld/4007 - * elf.c (assign_file_positions_for_load_sections): Check if - all sections are in the segment. + * elf.c (elfcore_grok_openbsd_procinfo) + (elfcore_grok_openbsd_note): New functions. + (elf_parse_notes): Handle notes from OpenBSD ELF core files. -2007-03-20 H.J. Lu +2009-03-18 Alan Modra - PR ld/4208 - * elfxx-mips.c (_bfd_mips_elf_relocate_section): Report missing - matching LO16 relocation for HI16 relocation. + * vms-hdr.c: Don't include alloca.h. + * elf32-m68hc1x.c: Include alloca-conf.h. + * xsym.c: Likewise. + * elf64-hppa.c: Likewise. Remove existing #if's handling alloca. + * som.c: Likewise. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. -2007-03-20 Paul Brook +2009-03-17 Daniel Jacobowitz - * 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. + * elf32-arm.c (elf32_arm_check_relocs): Correct symbian_p test. -2007-03-18 Mark Shinwell +2009-03-17 Alan Modra - * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add "bfd *" - argument and extra last argument. - * bfd-in2.h: Regenerate. - * 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. + * elf32-spu.h (struct spu_elf_params): ovly_flavour now only 1 bit. + Add compact_stub. + (emum _ovly_flavour): Delete ovly_compact, ovly_none. + * elf32-spu.c (struct spu_link_hash_table): Replace ovly_load and + ovly_return fields with ovly_entry[2]. Adjust all users. + (spu_elf_find_overlays): Set ovly_entry[1] from __icache_call_handler + when soft-icache. + (spu_elf_build_stubs): Likewise. + (ovl_stub_size): Change arg to spu_elf_params pointer. Adjust for + ovly_flavour changes. Update all callers. + (ovl_stub_size_log2): New function. + (build_stub): Handle compact icache stubs. Use different manager + entry point for stubs in non-icache area. + (spu_elf_size_stubs): Don't allocate space for indirect branch + descriptors. + (spu_elf_build_stubs): And don't built them. -2007-03-20 Nick Clifton +2009-03-16 Andrew Stubbs - PR binutils/3535 - * elf.c (copy_private_bfd_data): Widen the scope of Solaris - specific conditions that need the program headers to be - rewritten. + * dwarf2.c (read_section): Always use rawsize, if available. -2007-03-19 H.J. Lu +2009-03-16 Alan Modra - * 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. + * simple.c (bfd_simple_get_relocated_section_contents): Use larger + of rawsize and size for buffer. -2007-03-18 H.J. Lu +2009-03-15 Ulrich Weigand - * targets.c (_bfd_target_vector): Add bfd_efi_app_x86_64_vec - only if BFD64 is defined. + * elf32-spu.c (spu_elf_check_vma): Do not reset auto_overlay + parameter just because fixed sections fit into local store. + (spu_elf_auto_overlay): Do not declare as "noreturn". Skip + generating overlays if fixed sections plus reserved stack + and heap space fit into local store. -2007-03-17 Alan Modra +2009-03-15 Alan Modra - * elf32-spu.c (spu_elf_size_stubs): Always use an overlay stub - on setjmp calls. + * elf32-spu.c (build_stub): Correct icache set_id. + (spu_elf_relocate_section): Likewise. -2007-03-15 H.J. Lu +2009-03-14 Richard Sandiford - * doc/Makefile.in: Regenerated. + * xcofflink.c (xcoff_link_check_archive_element): Only free the + symbol table if it was created by the current call. -2007-03-15 H.J. Lu +2009-03-14 Richard Sandiford - * Makefile.am (bfdver.h): Substitute report_bugs_to. Also - create doc/bfdver.texi. - * Makefile.in: Regenerated. + * xcofflink.c (xcoff_build_ldsyms): Give imported descriptors + class XMC_DS rather than XMC_UA. - * configure.in (--with-bugurl): New option. - * configure: Regenerated. +2009-03-14 Richard Sandiford - * version.h (REPORT_BUGS_TO): New. + * bfd-in.h (bfd_xcoff_size_dynamic_sections): Replace the + bfd_boolean export_defineds parameter with an unsigned int + auto_export_flags parameter. + * bfd-in2.h: Regenerate. + * xcofflink.c (xcoff_archive_contains_shared_object_p): New function, + split out from xcoff_build_ldsyms. + (xcoff_covered_by_expall_p): New function. + (xcoff_auto_export_p): New function, split out from xcoff_build_ldsyms + but with extra code to handle -bexpfull and -bexpall. + (xcoff_mark_auto_exports): New function. + (xcoff_build_ldsyms): Use xcoff_auto_export_p to decide whether + a function should be automatically exported. + (bfd_xcoff_size_dynamic_sections): Replace the export_defineds + parameter with an auto_export_flags parameter. Update ldinfo + accordingly. Use xcoff_mark_auto_exports to mark all automatically- + exported symbols. + +2009-03-14 Richard Sandiford + + * xcofflink.c (xcoff_mark_symbol_by_name): New function. + (bfd_xcoff_size_dynamic_sections): Use it to mark the entry, + init and fini functions. Do garbage collection for objects + without an entry point too. + +2009-03-14 Richard Sandiford + + * coffcode.h (coff_pointerize_aux_hook): Update CSECT_SYM_P to + check whether a symbol has csect information. + (coff_print_aux): Likewise. + * coff-rs6000.c (_bfd_xcoff_swap_aux_in): Handle auxillary csect + information for C_AIX_WEAKEXT too. + (_bfd_xcoff_swap_aux_out): Likewise. + (xcoff_reloc_type_br): Handle defweak symbols too. + * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Handle auxillary csect + information for C_AIX_WEAKEXT too. + (_bfd_xcoff64_swap_aux_out): Likewise. + (xcoff64_reloc_type_br): Handle defweak symbols too. + * coffgen.c (coff_print_symbol): Handle auxillary function + information for C_AIX_WEAKEXT too. + * xcofflink.c (_bfd_xcoff_canonicalize_dynamic_symtab): Set BSF_WEAK + instead of BSF_GLOBAL if the L_WEAK flag is set. + (xcoff_dynamic_definition_p): New function. + (xcoff_link_add_dynamic_symbols): Use it to decide whether ldsym + defines h. Don't change h if ldsym isn't the definition. Otherwise, + always take the symbol class from the ldsym. Use weak bfd symbol + types for weak ldsyms. + (xcoff_link_add_symbols): Use CSECT_SYM_P and EXTERN_SYM_P. + Fix the check for whether a definition is from a shared object. + Allow redefinitions of weak symbols. + (xcoff_link_check_ar_symbols): Use EXTERN_SYM_P. + (xcoff_keep_symbol_p): Likewise. + (bfd_xcoff_size_dynamic_sections): Use CSECT_SYM_P. + (xcoff_link_input_bfd): Use CSECT_SYM_P and EXTERN_SYM_P. + Add .loader entries for C_AIX_WEAKEXT as well as C_EXT symbols, + but mark them as L_WEAK. + (xcoff_write_global_symbol): Treat weak symbols as C_AIX_WEAKEXT + instead of C_EXT if C_AIX_WEAKEXT == C_WEAKEXT. + +2009-03-14 Richard Sandiford + + * xcofflink.c (xcoff_mark): When walking the relocations, + only mark the target symbol or the target section, not both. + (xcoff_final_definition_p): New function. + (xcoff_keep_symbol_p): Use it to check whether an external XCOFF + symbol is a valid definition of the associated output symbol. + Use XCOFF_ALLOCATED to stop the same hash table entry having + two output symbols. + (bfd_xcoff_size_dynamic_sections): Set XCOFF_ALLOCATED when + keeping a symbol. + (xcoff_link_input_bfd): Use xcoff_final_definition_p. + +2009-03-14 Richard Sandiford + + * xcofflink.c (bfd_xcoff_import_symbol): Treat imported absolute + symbols as XMC_XO. + +2009-03-14 Richard Sandiford + + * libcoff-in.h (xcoff_tdata): Add a lineno_counts field. + * libcoff.h: Regenerate. + * xcofflink.c (xcoff_link_add_symbols): Record per-symbol + line-number counts in the bfd's lineno_counts field. + Don't keep per-csect line-number counts. + (xcoff_sweep): Don't update per-csect line-number counts. + (bfd_xcoff_size_dynamic_sections): Count the number of line-number + entries in each output section. + (xcoff_link_input_bfd): Get the number of line numbers from + the bfd's lineno_counts field, rather than recalculating it + from scratch. Fix the range check when updating C_BINCL and + C_EINCL symbols. + (_bfd_xcoff_bfd_final_link): Don't count the output line numbers + here. Don't expect csects to have line-number counts. + +2009-03-14 Richard Sandiford + + * libcoff-in.h (xcoff_tdata): Change debug_indices to a signed long. + * libcoff.h: Regenerate. + * xcofflink.c (xcoff_keep_symbol_p): New function, using the + "skip" logic from xcoff_link_input_bfd. + (bfd_xcoff_size_dynamic_sections): Explicitly skip dynamic + objects in a dynamic link, rather than checking whether csectpp + is null. Always allocate debug_index for other objects, + and always go through the loop. Update the type of debug_index + after the change above. Read the auxillary csect information + and use xcoff_keep_symbol_p to decide whether a symbol should + be kept. Set its debug_index to -2 if not. + (xcoff_link_input_bfd): Update the type of debug_index after + the change above and always expect it to be nonnull. Use it to + test whether a symbol should be stripped, rather than making the + decision here. Postpone all symbol creation to the second pass. + +2009-03-14 Richard Sandiford + + * xcofflink.c: (xcoff_mark_symbol): Mark the TOC section when + creating a descriptor. + (xcoff_sweep): Don't mark toc_section unless it's needed. + (bfd_xcoff_size_dynamic_sections): Skip the toc_section + when marking every bfd. + (xcoff_link_input_bfd): Skip all TOC anchors. + (xcoff_toc_section_p, xcoff_find_tc0): New functions. + (_bfd_xcoff_bfd_final_link): Don't set the output bfd's TOC anchor + to -1; call xcoff_find_tc0 instead. + +2009-03-14 Richard Sandiford + + * libcoff-in.h (xcoff_section_tdata): Update commentary. + * libcoff.h: Regenerate. + * xcofflink.c (xcoff_link_add_symbols): Set the csect of XTY_ER + symbols to bfd_und_section_ptr or bfd_abs_section_ptr, rather than + the previous symbol's csect. Treat last_symndx as an inclusive value + and simplify its handling. + (xcoff_mark): Treat last_symndx as an inclusive value. Only mark + symbols with the right csect. Don't mark rsec when processing + relocations against undefined or absolute sections. + (bfd_xcoff_size_dynamic_sections): Don't check the SEC_MARK flag + of bfd_und_section_ptr. + (xcoff_link_input_bfd): Likewise. + +2009-03-14 Richard Sandiford + + * coff-rs6000.c (xcoff_ppc_relocate_section): Report relocations + against undefined symbols if the symbol's XCOFF_WAS_UNDEFINED + flag is set. Assert that all undefined symbols are either + imported or defined by a dynamic object. + * coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise. + * xcofflink.c (xcoff_link_add_symbols): Extend function-symbol + handling to all relocations. Only set XCOFF_CALLED for function + symbols. + (xcoff_find_function): New function, split out from... + (bfd_xcoff_export_symbol) ...here. + (xcoff_set_import_path): New function, split out from... + (bfd_xcoff_import_symbol): ...here. Remove assertion for old + meaning of XCOFF_CALLED. + (xcoff_mark_symbol): If we mark an undefined and unimported + symbol, find some way of defining it. If the symbol is a function + descriptor, fill in its definition automatically. If the symbol + is a function, mark its descriptor and allocate room for global + linkage code. Otherwise mark the symbol as implicitly imported. + Move the code for creating function descriptors from... + (xcoff_build_ldsyms): ...here. Use XCOFF_WAS_UNDEFINED to + check for symbols that were implicitly defined. + (xcoff_mark): Don't count any dynamic relocations against + function symbols. + (bfd_xcoff_size_dynamic_sections): Save the rtld parameter + in the xcoff link info. + (xcoff_link_input_bfd): Remove handling of undefined and + unexported symbols. + +2009-03-14 Richard Sandiford + + * coff-rs6000.c (xcoff_reloc_type_br): Make the branch absolute + if the target is absolute. Fix comment typo. + (xcoff_ppc_relocate_section): Remove FIXME. + * coff64-rs6000.c (xcoff64_reloc_type_br): Make the branch absolute + if the target is absolute. + +2009-03-14 Richard Sandiford + + * xcofflink.c (xcoff_mark, xcoff_link_input_bfd): Don't copy + R_POS and R_NEG relocations against absolute symbols to the + .loader section. + +2009-03-14 Richard Sandiford + + * coff64-rs6000.c (xcoff64_write_object_contents): Set the cputype + to 2 for bfd_mach_ppc_620. + +2009-03-14 Richard Sandiford + + * config.bfd: Treat AIX 6+ in the same way as AIX 5. + * configure.in: Likewise. + * configure: Regenerate. -2007-03-13 H.J. Lu +2009-03-13 H.J. Lu - PR binutils/3826 - * elf-bfd.h (elf_backend_data): Add elf_osabi. - (_bfd_elf_set_osabi): New. + PR binutils/9945 + * elf.c (assign_section_numbers): Generate symbol table if there + is any relocation in output. + (_bfd_elf_compute_section_file_positions): Likewise. - * elf.c (_bfd_elf_set_osabi): New. +2009-03-13 Nick Clifton - * 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. + PR 9934 + * elf-bfd.h (NUM_SHDR_ENTRIES): Cope with an empty section. + * elflink.c (elf_link_read_relocs_from_section): Use + NUM_SHDR_ENTRIES. Gracefully handle the case where there are + relocs but no symbol table. + * elf32-arm.c (elf32_arm_check_relocs): Likewise. - * elf32-i370.c (i370_elf_post_process_headers): Removed. - (ELF_OSABI): Defined. - (elf_backend_post_process_headers): Defined with - _bfd_elf_set_osabi. +2009-03-12 H.J. Lu - * elf32-i386.c (ELF_OSABI): Defined to ELFOSABI_FREEBSD for - freebsd. - (elf_i386_post_process_headers): Set EI_OSABI with elf_osabi. + PR ld/9938 + * elf32-i386.c (elf_i386_check_tls_transition): Use strncmp + to check ___tls_get_addr. - * elf32-msp430.c (elf32_msp430_post_process_headers): Removed. - (ELF_OSABI): Defined. - (elf_backend_post_process_headers): Defined with - _bfd_elf_set_osabi. + * elf64-x86-64.c (elf64_x86_64_check_tls_transition): Use + strncmp to check __tls_get_addr. - * elf64-alpha.c (ELF_OSABI): Defined to ELFOSABI_FREEBSD for - freebsd. - (elf64_alpha_fbsd_post_process_headers): Set EI_OSABI with - elf_osabi. +2009-03-12 Andrew Stubbs - * 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. + * dwarf2.c (read_section): Always check the offset, even when the + section has been read before. - * 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. +2009-03-11 H.J. Lu - * 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. + * elf32-i386.c (elf_i386_check_tls_transition): Fix a typo in + comments. - * 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. +2009-03-11 Chris Demetriou - * elfxx-ia64.c (elfNN_hpux_post_process_headers): Set EI_OSABI - with elf_osabi. + * bfd.c (BFD_DETERMINISTIC_OUTPUT): New flag. + * bfd-in2.h: Regenerate. + * archive.c (bfd_ar_hdr_from_filesystem): If BFD_DETERMINISTIC_OUTPUT + flag is set, use 0 for uid, gid, and timestamp, and use 0644 for file + mode. + (bsd_write_armap): Likewise. + (_bfd_archive_bsd_update_armap_timestamp): If BFD_DETERMINISTIC_OUTPUT + flag is set, do nothing. + (coff_write_armap): If BFD_DETERMINISTIC_OUTPUT flag is set, use 0 + for timestamp. - * elfxx-target.h (ELF_OSABI): Default to ELFOSABI_NONE. - (elfNN_bed): Initialize elf_osabi with ELF_OSABI. +2009-03-11 Ulrich Weigand -2007-03-08 Alan Modra + * elf32-spu.c (find_function_stack_adjust): Handle sf instruction + used to update stack pointer. - * elf32-v850.c (v850_elf_link_output_symbol_hook): Clean out - V850_OTHER_* bits. +2009-03-07 John David Anglin -2007-03-08 Alan Modra + PR binutils/9921 + * som.c (som_bfd_derive_misc_symbol_info): Set symbol type ST_ABSOLUTE + for unknown symbols in absolute section. - * 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. +2009-03-06 Nick Clifton -2007-03-07 H.J. Lu + * po/es.po: Updated Spanish translation. - * 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. +2009-03-05 Christophe Lyon - * configure.in: Support bfd_efi_app_x86_64_vec. - * configure: Regenerated. + * elf32-arm.c (group_sections): Take next section size into + account before accepting to group it. - * efi-app-x86_64.c: New file. +2009-03-05 Christophe Lyon - * targets.c (bfd_efi_app_x86_64_vec): New. - (_bfd_target_vector): Add bfd_efi_app_x86_64_vec. + * elf32-arm.c (arm_type_of_stub): Handle long branches targetting + PLT entries. + (elf32_arm_final_link_relocate): Likewise. -2007-03-07 Kai Tietz +2009-03-05 Moritz Kroll - * reloc.c (bfd_generic_get_relocated_section_contents): Remove - const for type reloc_howto_type. + PR 9923 + * peXXigen.c (_bfd_XXi_final_link_postscript): Check h->root.type. -2007-03-07 Alan Modra +2009-03-04 Alan Modra - PR 3958 - * elf-bfd.h (RELOC_FOR_GLOBAL_SYMBOL): No error on relocatable link. - (elf_discarded_section): Move.. - * bfd-in.h: ..to here. + * reloc.c (BFD_RELOC_PPC_TLSGD, BFD_RELOC_PPC_TLSLD): New. + * section.c (struct bfd_section): Add has_tls_get_addr_call. + (BFD_FAKE_SECTION): Init new flag. + * ecoff.c (bfd_debug_section): Likewise. * 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 - - 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. + * libbfd.h: Regenerate. + * elf32-ppc.c (ppc_elf_howto_raw): Add R_PPC_TLSGD and R_PPC_TLSLD. + (ppc_elf_reloc_type_lookup): Handle new relocs. + (ppc_elf_check_relocs): Set has_tls_get_addr_call on finding such + without marker relocs. + (ppc_elf_tls_optimize): Allow out-of-order __tls_get_addr relocs + if section has no old-style calls. + (ppc_elf_relocate_section): Set tls_mask for non-tls relocs too. + Don't try to optimize new-style __tls_get_addr call when handling + arg setup relocs. Instead do so for R_PPC_TLSGD and R_PPC_TLSLD + relocs. + * elf64-ppc.c (ppc64_elf_howto_raw): Add R_PPC64_TLSGD, R_PPC64_TLSLD. + (ppc64_elf_reloc_type_lookup): Handle new relocs. + (ppc64_elf_check_relocs): Set has_tls_get_addr_call on finding such + without marker relocs. + (ppc64_elf_tls_optimize): Allow out-of-order __tls_get_addr relocs + if section has no old-style calls. Set toc_ref for new relocs as + appropriate. + (ppc64_elf_relocate_section): Set tls_mask for non-tls relocs too. + Don't try to optimize new-style __tls_get_addr call when handling + arg setup relocs. Instead do so for R_PPC_TLSGD and R_PPC_TLSLD + relocs. + +2009-03-04 Alan Modra + + PR 6768 + * configure.in: Test for ld --as-needed support. Link shared + libbfd against libm. + * configure: Regenerate. -2007-03-01 Bob Wilson +2009-03-03 Alan Modra - * 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. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. -2007-03-01 Joseph Myers +2009-03-02 Qinwei - * Makefile.am (bfdver.h): Use "." not " " between version number - and date. + * elf32-score7.c: New file. + * elf32-score.h: New file. + * elf32-score.c: Add code to support score 7. Set score7 as the + default. + * cpu-score.c: Add score7 architecure. + (compatibile): New function. + * Makefile.am: Add rules for building elf32-score7 object. * Makefile.in: Regenerate. - * configure.in (PKGVERSION): Default to "(GNU Binutils) ". + * configure.in: Add elf32-score7 object to score vectors. * configure: Regenerate. + * reloc.c: Add score7 relocs. + * archures.c: Add score3 and score7 machine numbers. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. -2007-02-28 Nathan Sidwell - - * config.bfd (sh-*-uclinux, sh[12]-*-uclinux): New stanza. +2009-03-01 Ralf Wildenhues -2007-02-27 Alan Modra + * configure: Regenerate. - * elf32-spu.h (struct _ovl_stream): Make "start" and "end" const. - * elf32-spu.c (ovl_mgr_pread): Add const to casts. +2009-03-01 John David Anglin + + * elf32-hppa.c (hppa32_elf_local_refcounts): New function. + (elf32_hppa_check_relocs): Use it. + + * elf_hppa_add_symbol_hook (elf_hppa_add_symbol_hook): Move to + elf64-hppa.c. + (elf_hppa_unmark_useless_dynamic_symbols): Likewise. + (elf_hppa_remark_useless_dynamic_symbols): Likewise. + (elf_hppa_is_dynamic_loader_symbol): Likewise. + (elf_hppa_record_segment_addrs): Likewise. + (elf_hppa_final_link): Likewise. + (elf_hppa_relocate_insn): Likewise. + (elf_hppa_final_link_relocate): Likewise. + (elf64_hppa_relocate_section): Likewise. + * elf64-hppa.c: Insert above. + +2009-02-28 John David Anglin + + * elf-hppa.h (elf_hppa_final_link): Use elf_hppa_final_link. + (elf_hppa_final_link_relocate ): Rewrite eliminating dynamic hash table. + (elf_hppa_relocate_section): Likewise. + * elf64-hppa.c (struct elf64_hppa_link_hash_entry): Change to derive + from struct elf_link_hash_entry. Add count field. + (struct elf64_hppa_dyn_hash_table): Delete. + (struct elf64_hppa_link_hash_table): Delete dyn_hash_table field. + (elf64_hppa_hash_table): Rename to hppa_link_hash_table. + (hppa_elf_hash_entry, eh_name): Define. + (elf64_hppa_new_dyn_hash_entry): Delete. + (elf64_hppa_dyn_hash_lookup): Delete. + (elf64_hppa_dyn_hash_traverse): Delete. + (get_dyn_name): Delete. + (elf64_hppa_finalize_opd): Use struct elf_link_hash_entry * instead + of struct elf64_hppa_dyn_hash_entry *. + (elf64_hppa_finalize_dlt, llocate_global_data_dlt, + allocate_global_data_plt, allocate_global_data_stub, + allocate_global_data_opd, count_dyn_reloc, allocate_dynrel_entries): + Likewise. + (hppa64_link_hash_newfunc): New. + (elf64_hppa_hash_table_create): Rework. + (count_dyn_reloc): Likewise. + (hppa64_elf_local_refcounts): New. + (elf64_hppa_check_relocs): Rework using standard technique for recording + local DLT, PLT and OPD reference counts. + (elf64_hppa_dynamic_symbol_p): Revise using "eh" for struct + elf_link_hash_entry *. + (elf64_hppa_mark_exported_functions, allocate_global_data_dlt, + allocate_global_data_plt, allocate_global_data_stub, + allocate_global_data_opd, allocate_dynrel_entries, + elf64_hppa_adjust_dynamic_symbol, + elf64_hppa_mark_milli_and_exported_functions): Likewise. + (elf64_hppa_create_dynamic_sections, elf64_hppa_size_dynamic_sections): + Use hppa_link_hash_table. Rework. + (elf64_hppa_link_output_symbol_hook): Rework. + (elf64_hppa_finish_dynamic_symbol, elf64_hppa_finalize_opd, + elf64_hppa_finalize_dlt, elf64_hppa_finalize_dynreloc, + elf64_hppa_finish_dynamic_sections): Likewise. + +2009-02-26 Christophe Lyon + + * elf32-arm.c (stub_reloc_type): Removed. + (insn_sequence): Renamed reloc_type field to r_type. + (elf32_arm_stub_long_branch_v4t_arm_thumb_pic): New stub. + (elf32_arm_stub_long_branch_v4t_thumb_arm_pic): Likewise. + (elf32_arm_stub_long_branch_thumb_only_pic): Likewise. + (elf32_arm_stub_type): Add new enum entries for the new stubs. + (arm_stub_is_thumb): Catch new stubs. + (arm_type_of_stub): Handle new stubs. + (arm_size_one_stub): Use ARRAY_SIZE. Handle new stubs. + (bfd_elf32_arm_process_before_allocation): Remove useless + condition. + +2009-02-25 H.J. Lu + + * elf.c (elf_find_function): Use is_function_type to check + function symbol. + +2009-02-24 Sterling Augustine + + * xtensa-modules.c: Revert to previous version 1.11 due + to inadvertant commit. + +2009-02-24 Sterling Augustine + + * elf32-xtensa.c (text_action_add): Separate test for action + type. Break if saved action is ta_widen_insn at same offset. + +2009-02-24 Daniel Jacobowitz + + * elf32-arm.c (elf32_arm_stub_long_branch_any_any_pic): Rename + to elf32_arm_stub_long_branch_any_arm_pic. + (elf32_arm_stub_long_branch_any_thumb_pic): New. + (enum elf32_arm_stub_type, arm_type_of_stub) + (arm_size_one_stub): Handle any to ARM PIC and any to Thumb PIC + separately. + +2009-02-24 Joseph Myers + + * elf32-arm.c (PREV_SEC): Update comment. + (group_sections): Rename argument to stubs_always_after_branch. + Reverse the list and place stubs at the end of input sections. + Undefine NEXT_SEC. + (elf32_arm_size_stubs): Update to use stubs_always_after_branch. + +2009-02-23 Daniel Jacobowitz + + * elf32-arm.c (arm_build_one_stub): Initialize stub_reloc_offset. + Fix formatting. + (arm_size_one_stub): Remove unnecessary break. + (arm_map_one_stub): Fix formatting. Return after BFD_FAIL. + +2009-02-23 Christophe Lyon + + * elf32-arm.c (stub_insn_type): New type. + (stub_reloc_type): Likewise. + (insn_sequence): Likewise. + (elf32_arm_stub_long_branch_any_any): Encode using insn_sequence. + (elf32_arm_stub_long_branch_v4t_arm_thumb): Likewise. + (elf32_arm_stub_long_branch_thumb_only): Likewise. + (elf32_arm_stub_long_branch_v4t_thumb_arm): Likewise. + (elf32_arm_stub_short_branch_v4t_thumb_arm): Likewise. + (elf32_arm_stub_long_branch_any_any_pic): Likewise. + (elf32_arm_stub_hash_entry): Add new helper fields. + (stub_hash_newfunc): Initialize these new fields. + (arm_build_one_stub): Encode Arm and Thumb instructions separately + to take endianness into account. + (arm_size_one_stub): Compute size of stubs using insn_sequence. + (arm_map_one_stub): Code is now more generic, thanks to + insn_sequence. + +2009-02-23 Christophe Lyon + + * elf32-arm.c (elf32_arm_stub_long_branch_thumb_only): Fix stub + code. + (elf32_arm_stub_long_branch_v4t_thumb_arm): Likewise. + (arm_type_of_stub): Use Thumb-only long branch stub (non-PIC) when + BLX is not available. Fix typo in warning message. Add comments + and improve formatting. + (arm_build_one_stub): Adjust to new + elf32_arm_stub_long_branch_v4t_thumb_arm stub. + (arm_map_one_stub): Likewise. + +2009-02-23 Tristan Gingold + Eric Botcazou + Douglas B Rupp + + * vms.h: Update copyright year, fix comments, reorder declarations. + (_bfd_save_vms_section): Remove the prototype. + (EGPS_S_V_NO_SHIFT): New constant. + (bfd_vms_set_section_flags): New prototype. + (EGPS_S_B_ALIGN, EGPS_S_W_FLAGS, EGPS_S_L_ALLOC, EGPS_S_B_NAMLNG): New + constants. + (EGSY_S_W_FLAGS): Ditto. + (EGSY_S_V_QUAD_VAL): Ditto. + (ESDF_S_L_VALUE, ESDF_S_L_PSINDX, ESDF_S_B_NAMLNG): Ditto. + (EGST_S_W_FLAGS, EGST_S_Q_LP_1, EGST_S_Q_LP_2, EGST_S_L_PSINDX, + EGST_S_B_NAMLNG): Ditto. + (ESRF_S_B_NAMLNG): Ditto. + (ETIR_S_C_HEADER_SIZE): Ditto. + (EGPS_S_V_ALLOC_64BIT): Ditto. + (DST_S_C_EPILOG): Ditto. + (DST_S_C_SRC_SETLNUM_L, DST_S_C_SRC_SETLNUM_W) : Ditto. + (DST_S_C_SRC_INCRLNUM_B): Ditto. + (DST_S_B_PCLINE_UNSBYTE, DST_S_W_PCLINE_UNSWORD): Ditto. + (DST_S_L_PCLINE_UNSLONG): Ditto. + (DST_S_B_MODBEG_NAME, DST_S_L_RTNBEG_ADDRESS) : Ditto + (DST_S_B_RTNBEG_NAME, DST_S_L_RTNEND_SIZE): Ditto + (DST_S_C_SOURCE_HEADER_SIZE): Ditto. + (DST_S_B_SRC_DF_LENGTH, DST_S_W_SRC_DF_FILEID): Ditto. + (DST_S_B_SRC_DF_FILENAME, DST_S_B_SRC_UNSBYTE): Ditto. + (DST_S_B_SRC_UNSBYTE): Ditto. + (DST_S_W_SRC_UNSWORD, DST_S_L_SRC_UNSLONG): Ditto. + Add prototypes. + (vms_section, vms_reloc): Remove types. + (hdr_struc): Replaced by ... + (hdr_struct): ... new type. + (EMH_S_W_HDRTYP, EMH_S_B_STRLVL, EMH_S_L_ARCH1): New constants. + (EMH_S_L_ARCH2, EMH_S_L_RECSIZ, EMH_S_B_NAMLNG): Ditto. + (EMH_DATE_LENGTH): Ditto. + (eom_struc): Replaced by ... + (eom_struct): ... new type. + (EEOM_S_L_TOTAL_LPS, EEOM_S_W_COMCOD, EEOM_S_B_TFRFLG): New constants. + (EEOM_S_L_PSINDX, EEOM_S_L_TFRADR): Ditto. + (EIHD_S_K_MAJORID, EIHD_S_K_MINORID, EIHD_S_K_EXE): Ditto. + (EIHD_S_L_SIZE, EIHD_S_L_ISDOFF, EIHD_S_L_SYMDBGOFF): Ditto. + (EIHD_S_Q_SYMVVA, EIHD_S_L_IMGTYPE): Ditto. + (EISD_S_L_EISDSIZE, EISD_S_L_SECSIZE, EISD_S_Q_VIR_ADDR): Ditto. + (EISD_S_L_FLAGS, EISD_S_L_VBN, EISD_S_R_CONTROL): Ditto. + (EISD_S_L_IDENT, EISD_S_T_GBLNAM): Ditto. + (EISD_S_M_GBL, EISD_S_M_CRF, EISD_S_M_DZRO, EISD_S_M_WRT): Ditto. + (EISD_S_M_INITALCODE, EISD_S_M_BASED, EISD_S_M_FIXUPVEC): Ditto. + (EISD_S_M_RESIDENT, EISD_S_M_VECTOR, EISD_S_M_PROTECT): Ditto. + (EISD_S_M_LASTCLU, EISD_S_M_EXE, EISD_S_M_NONSHRADR): Ditto. + (EISD_S_M_QUAD_LENGTH, EISD_S_M_ALLOC_64BIT): Ditto. + (EIHS_S_L_DSTVBN, EIHS_S_L_DSTSIZE, EIHS_S_L_GSTVBN): Ditto. + (EIHS_S_L_GSTSIZE, EIHS_S_L_DMTVBN, EIHS_S_L_DMTBYTES): Ditto. + (DBG_S_L_DMT_MODBEG, DBG_S_L_DST_SIZE): Ditto. + (DBG_S_W_DMT_PSECT_COUNT, DBG_S_C_DMT_HEADER_SIZE): Ditto. + (DBG_S_L_DMT_PSECT_START, DBG_S_L_DMT_PSECT_LENGTH) + (DBG_S_C_DMT_PSECT_SIZE): Ditto. + (enum file_type_enum): New type. + (struct location_struct): Removed. + (struct fileinfo, struct srecinfo, struct lineinfo): New types. + (struct funcinfo, struct module): Ditto. + (struct vms_private_data_struct): Update fields. + (struct vms_section_data_struct): New type. + + * vms.c: Update copyright year, fix comments, + Fix includes for DECC, add prototypes. + (vms_initialize): Use bfd_alloc instead of bfd_zalloc and remove + some initializers. + Use flavour to set is_vax, location_stack is removed. + (struct pair): Declare. + (fill_section_ptr): Initialize variables at declaration. + Add guard to set SECTION_SYM flag, handlde und section. + (vms_fixup_sections): Use struct pair for fill_section_ptr argument. + (_bfd_vms_slurp_object_records): New function, replaces previous + vms_object_p. + (vms_slurp_module): New function. + (vms_slurp_image): Ditto. + (vms_object_p): Complete rewrite. + (vms_mkobject): Use is_vax field to slect architecture. + (free_reloc_stream): New function. + (vms_convert_to_var): Ditto. + (vms_convert_to_var_1): Ditto. + (vms_convert_to_var_unix_filename): Ditto. + (vms_close_and_cleanup): Call free_reloc_stream, convert file to + VAR format on VMS. + (vms_new_section_hook): Set alignment to 0, allocate private data. + (vms_get_section_contents): Load content. + (vms_get_symbol_info): Handle undefined section. + (vms_find_nearest_line): Handle. + (alloc_reloc_stream): New function. + (vms_slurp_reloc_table): Ditto. + (vms_get_reloc_upper_bound): Make it real. + (vms_canonicalize_reloc): Do the real work. + (alpha_howto_table): Add ALPHA_R_NOP, ALPHA_R_BSR, ALPHA_R_LDA, + ALPHA_R_BOH. + (vms_bfd_reloc_type_lookup): Handle NOP, BSR, LDA and BOH. + (vms_set_arch_mach): Check arch. + (vms_set_section_contents): Copy the content after allocation. + (vms_alpha_vec): Update object flags. + + * vms-tir.c: Update copyright year, fix comments, + add prototypes for new functions. + (dst_define_location): New function. + (dst_restore_location): New function. + (dst_retrieve_location): New function. + (dst_check_allocation): New function. + (image_dump): Call dst_check_allocation. + (image_write_b): Ditto. + (image_write_w): Ditto. + (image_write_l): Ditto. + (image_write_q): Ditto. + (cmd_name): Handle STA_LW, STA_QW, STO_OFF, STO_IMM, STO_IMMR, STO_LW, + STO_QW, OPR_ADD, CTL_SETRB, STC_LP_PSB, CTL_DFLOC, CTL_STLOC, + CTL_STKDL. + Call error handler instead of abort if name is not known. + (etir_sta): Add quarter_relocs argument and set it. + Fix cast. + (etir_sto): Ditto. + (etir_opr): Ditto, return FALSE in case of error. + (etir_ctl): Add quarter_relocs argument and set it, fix cast. + Fix CTL_DFLOC, CTL_STLOC, CTL_STKDL. + (etir_stc): Add quarter_relocs argument and set it, fix cast. + Fix STC_LP, STC_LP_PSB, STC_GBL and STC_CGA. + Handle STC_LP_PSB, STC_BSR_GBL, STC_LDA_GBL, STC_BOH_GBL. + Move STC_NOP_PS, STC_BSR_PS, STC_LDA_PS, STC_BOH_PS, STC_NBH_PS. + Return FALSE in case of error. + (tir_sta): Change sign of psect. + (tir_ctl): Ditto. + (tir_cmd): Fix cast. Makes tir_table static const. + (etir_cmd): Add quarter_relocs argument, makes etir_table const, + add argument to explain. + (analyze_etir): Initialize maxptr, add quarter_relocs + declaration, move some declarations into inner scopes. + Handle quarter_relocs and STO_IMM. + (_bfd_vms_slurp_tir): Use constant instead of hard-coded values. + (_bfd_vms_slurp_relocs): New function. + (_bfd_vms_decode_relocs): New function. + (sto_imm): Rewritten. + (start_first_etbt_record): New function. + (start_another_etbt_record): Ditto. + (etir_output_check): Ditto. + (defer_reloc_p): Ditto. + (_bfd_vms_write_tir): Remove nextoffset, convert a while-loop to + a for-loop. Correctly deals with contents, deals with .vmsdebug, + rewritte relocations handling. + (_bfd_vms_write_tbt): Removed. + (_bfd_vms_write_dbg): Ditto. + + * vms-misc.c: Update copyright year, Fix comments. + (_bfd_vms_get_header_values): Use 'size' instead of 'length'. + (maybe_adjust_record_pointer_for_object): New function. + (_bfd_vms_get_first_record): New function, replaces ... + (_bfd_vms_get_record): .. removed. + (_bfd_vms_get_object_record): New function. + (_bfd_vms_get_object_record): New function. + (vms_get_remaining_object_record): New function, replaces ... + (_bfd_vms_get_next_record): ... removed. + (add_new_contents): Removed. + (_bfd_save_vms_section): Removed. + (_bfd_get_vms_section): Removed. + (_bfd_vms_output_flush): Write in VAR format. + (new_symbol): Don't make UND section. + + * vms-hdr.c: Update copyright year, update list of record handled. + (_bfd_vms_slurp_hdr): rec_length renamed to rec_size. + (_bfd_vms_write_hdr): Strip vms and unix patches, + add comments, truncate module name at 31 characters, + use constants instead of hard-coded value, + write BFD version instead of a fixed string. + (_bfd_vms_slurp_ihd): New function. + (_bfd_vms_slurp_isd): Ditto. + (_bfd_vms_slurp_ihs): Ditto. + (new_module): Ditto. + (parse_module): Ditto + (build_module_list): Ditto. + (module_find_nearest_line): Ditto. + (_bfd_vms_find_nearest_dst_line): Ditto. + (vms_slurp_debug): Ditto. + (_bfd_vms_slurp_dbg): Ditto. + (_bfd_vms_slurp_tbt): Ditto. + (_bfd_vms_write_dbg): Ditto. + (_bfd_vms_write_tbt): Ditto. + + * vms-gsd.c: Update copyright year, update list of records handled. + (EVAX_LITERALS_NAME): New macro. + (evax_section_flags): Add an entry for EVAX_LITERALS_NAME. + (gpsflagdesc, gsyflagdesc): Moved out of _bfd_vms_slurp_gsd. + (register_universal_symbol): New function and prototype. + (_bfd_vms_slurp_gsd): Fix indentations and casts, + improve debug messages, + use constants instead of hard-coded value, + fix missing endianness conversion, + handle global symbol (SYMG). + (bfd_vms_set_section_flags): New function. + (_bfd_vms_write_gsd): Don't write .vmsdebug section, + handle section literals, + fix indentation, + handle section bfd and vms flags, + don't output LIB$INITIALIZE symbol, + fix handling of weak symbols, + fix evax vs vax procedure descriptor, + handle absolute symbols. + + * reloc.c (BFD_RELOC_ALPHA_NOP, BFD_RELOC_ALPHA_BSR, + BFD_RELOC_ALPHA_LDA, BFD_RELOC_ALPHA_BOH): New relocations. + + * makefile.vms (DEFS): Fix flags for VMS. + + * bfdio.c (real_fopen): Handle multiple VMS fopen attributes. + + * bfd-in2.h: Regenerated. + * libbfd.h: Regenerated. + +2009-02-20 Cary Coutant + + * vmsutil.c (vms_file_stats_name): Fix incorrect use of st_mtime + in struct stat. + +2009-18-02 Dave Korn + + PR gas/7059 + * coffcode.h (coff_write_object_contents): Don't let the string + table offset overflow the s_name field when using long section names. + +2009-18-02 Dave Korn + + * coff-alpha.c (alpha_ecoff_backend_data): Initialise fields which + control long section name handling with ECOFF_NO_LONG_SECTION_NAMES. + * coff-mips.c (mips_ecoff_backend_data): Likewise. + * coff-rs6000.c (bfd_xcoff_backend_data): Initialise fields which + control long section name handling with XCOFF_NO_LONG_SECTION_NAMES. + (bfd_pmac_xcoff_backend_data): Likewise. + * coff64-rs6000.c (bfd_xcoff_backend_data): Likewise. + (bfd_xcoff_aix5_backend_data): Likewise. + (xcoff64_write_object_contents): Delete unused long_section_names + local variable. + * coff-sh.c (bfd_coff_small_swap_table): Initialise long section + name members using COFF_DEFAULT_LONG_SECTION_NAMES and make entire + struct non-const. + * coffcode.h (documentation): Update to describe long section names. + (COFFLONGSECTIONCATHELPER): New helper macro. + (BLANKOR1TOODD): Likewise. + (COFF_ENABLE_LONG_SECTION_NAMES): Likewise. + (COFF_LONG_SECTION_NAMES_SETTER): Likewise. + (COFF_DEFAULT_LONG_SECTION_NAMES): Likewise. + (bfd_coff_set_long_section_names_allowed): New function. + (bfd_coff_set_long_section_names_disallowed): Likewise. + (struct bfd_coff_backend_data): Add new backend hook function + pointer _bfd_coff_set_long_section_names. + (bfd_coff_set_long_section_names): New backend hook. + (coff_write_object_contents): Only generate long section names if + bfd_coff_long_section_names() indicates they are currently enabled. + (bfd_coff_std_swap_table): Make non-const, and initialise long + section name fields using COFF_DEFAULT_LONG_SECTION_NAMES. + (ticoff0_swap_table): Likewise to both. + (ticoff1_swap_table): Again, likewise to both. + * coffgen.c (make_a_section_from_file): Allow long section names + as inputs even if not currently allowed for outputs. + * ecoff.c (_bfd_ecoff_no_long_sections): New function. + * efi-app-ia32.c (COFF_LONG_SECTION_NAMES): Define to 0, not blank. + * efi-app-ia64.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-app-x86_64.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-bsdrv-ia32.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-bsdrv-ia64.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-bsdrv-x86_64.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-rtdrv-ia32.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-rtdrv-ia64.c (COFF_LONG_SECTION_NAMES): Likewise. + * efi-rtdrv-x86_64.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-arm.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-i386.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-mcore.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-mips.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-ppc.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-sh.c (COFF_LONG_SECTION_NAMES): Likewise. + * pei-x86_64.c (COFF_LONG_SECTION_NAMES): Likewise. + * libcoff-in.h: Update copyright year to cause updated copyright + year in generated libcoff.h, and fix typo. + * libcoff.h: Regenerated. + * libecoff.h (ECOFF_NO_LONG_SECTION_NAMES): New macro. + (_bfd_ecoff_no_long_sections): Add prototype. + * libxcoff.h (XCOFF_NO_LONG_SECTION_NAMES): New macro. + * pe-mips.c (COFF_LONG_SECTION_NAMES): Define empty if not already + defined by an including .c file. + * ticoff.h (ticoff0_swap_table): Make non-const, and initialise + long section name fields using COFF_DEFAULT_LONG_SECTION_NAMES. + (ticoff1_swap_table): Likewise to both. + +2009-02-18 Christophe Lyon + + * elf32-arm.c (arm_build_one_stub): Fix relocation target for pic + stub. Catch default case error. + (arm_map_one_stub): Add missing Thumb mapping symbol. + +2009-02-18 Bjoern Haase + + PR 9841 + * elf32-avr.c: Handle case where no local symbos exist correctly. + +2009-02-16 Christophe Lyon + + bfd/ + * elf32-arm.c (arm_long_branch_stub, + arm_thumb_v4t_long_branch_stub, + arm_thumb_thumb_long_branch_stub, + arm_thumb_arm_v4t_long_branch_stub, + arm_thumb_arm_v4t_short_branch_stub, + arm_pic_long_branch_stub): + Renamed to elf32_arm_stub_long_branch_any_any, + elf32_arm_stub_long_branch_v4t_arm_thumb, + elf32_arm_stub_long_branch_thumb_only, + elf32_arm_stub_long_branch_v4t_thumb_arm, + elf32_arm_stub_short_branch_v4t_thumb_arm, + elf32_arm_stub_long_branch_any_any_pic. + (arm_stub_long_branch, arm_thumb_v4t_stub_long_branch, + arm_thumb_thumb_stub_long_branch, + arm_thumb_arm_v4t_stub_long_branch, + arm_thumb_arm_v4t_stub_short_branch, arm_stub_pic_long_branch): + Renamed to arm_stub_long_branch_any_any, + arm_stub_long_branch_v4t_arm_thumb, + arm_stub_long_branch_thumb_only, + arm_stub_long_branch_v4t_thumb_arm, + arm_stub_short_branch_v4t_thumb_arm, + arm_stub_long_branch_any_any_pic. + +2009-02-15 John David Anglin + + * elf-hppa.h (elf_hppa_final_link_relocate): Correct addend value used + in branch offset check. + +2009-02-15 Alan Modra + + * elf64-ppc.c (struct _ppc64_elf_section_data): Delete t_symndx, + add toc.symndx and toc.add. + (ppc64_elf_check_relocs): Don't set htab->tls_get_addr here. + Set up toc.add. + (get_tls_mask): Add toc_addend param, set from toc.add. Adjust all + callers. + (ppc64_elf_tls_setup): Set htab->tls_get_addr and tls_get_addr_fd. + (branch_reloc_hash_match): New function, extracted from.. + (ppc64_elf_tls_optimize): ..here. + (ppc64_elf_relocate_section): Properly set addends when optimizing + tls sequences. Avoid unnecessary reading and writing of insns. + Only redo reloc when symbol changed. Bypass symbol checks when + using tlsld_got. + * elf32-ppc.c (ppc_elf_tls_setup): Correct comment. + (branch_reloc_hash_match): New function, extracted from.. + (ppc_elf_tls_optimize): ..here. + (ppc_elf_relocate_section): Avoid unnecessary reading of insns. + Don't clear addend on zapped __tls_get_addr reloc. + +2009-02-12 Nick Clifton + + PR 9827 + * elflink.c (bfd_elf_final_link): When counting the relocations, + if the header size has not been set yet then assume that it will + match the output section's reloc type. + +2009-02-12 Nathan Sidwell + + * elf32-mips.c (mips_elf_final_gp): Don't add 0x4000 offset for + relocatable link. + +2009-02-09 Alan Modra + + * elf32-spu.c (spu_elf_find_overlays): Call bfd_set_error on errors. + (find_function): Likewise. + (pasted_function): Don't error if no prior function found. + (discover_functions): Revert 2008-12-10 change. Extend first + function range to start of section. + +2009-02-08 John David Anglin + + * elf64-hppa.c: Remove PARAMS macro. Replace PTR with void *. Convert + functions to C90. + * elf64-hppa.h: Likewise. + +2009-02-06 Joseph Myers + + * elfxx-mips.c (_bfd_mips_elf_section_processing): Remove special + .sbss handling. + +2009-02-04 Alan Modra + + * elf32-spu.c (spu_elf_build_stubs): Define __icache_neg_log2_linesize. + Define __icache_ptr_handler*, not __icache_ptr___icache_bi_handler*. + +2009-02-03 Sandip Matte + + * aoutx.h (NAME (aout, machine_type)): Handle bfd_mach_mips_xlr. + * archures.c (bfd_mach_mips_xlr): Define. + * bfd-in2.h: Regenerate. + * cpu-mips.c (I_xlr): Define. + (arch_info_struct): Add XLR entry. + * elfxx-mips.c (_bfd_elf_mips_mach): Handle E_MIPS_MACH_XLR. + (mips_set_isa_flags): Handle bfd_mach_mips_xlr + (mips_mach_extensions): Add XLR entry. -2007-02-23 Carlos O'Donell +2009-02-03 Eric B. Weddington - * dwarf2.c (_bfd_dwarf2_find_nearest_line): Assume 32-bit - DWARF even with 64-bit addresses. - (_bfd_dwarf2_find_nearest_line): Likewise. + * elf32-avr.c (avr_final_link_relocate): Allow avr25 to wraparound. -2007-02-23 Nick Clifton +2009-02-03 Carlos O'Donell - PR binutils/3535 - * elf.c (copy_private_bfd_data): Always rewrite the program - headers when a Solaris interpreter segment is involved. + * configure.in: AC_SUBST pdfdir. + * Makefile.am: Add install-pdf, install-pdf-am + and install-pdf-recursive targets. Define pdfdir. + * doc/Makefile.am: Define pdf__strip_dir. Add + install-pdf and install-pdf-am targets. + * po/Make-in: Add install-pdf target. + * configure: Regenerate. + * Makefile.in: Regenerate + * doc/Makefile.in: Regenerate. -2007-02-22 Paul Brook +2009-02-03 Maxim Kuvyrkov - * 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. + * bfd-in2.h: Regenerate. + * elf32-m68k.c: Handle 2-slot GOT entries. Rename variables and + fields from n_entries to n_slots where appropriate, update comments. + (HOWTO): Add TLS relocations. + (reloc_map): Map BFD_RELOC_68K_TLS_* to R_68K_TLS_*. + (enum elf_m68k_got_offset_size): New enum. + (struct elf_m68k_got_entry.type): Move field to ... + (struct elf_m68k_got_entry_key): ... here. Update all uses. + (elf_m68k_reloc_got_type, elf_m68k_reloc_got_offset_size): New static + functions. + (elf_m68k_reloc_got_n_entries, elf_m68k_reloc_tls_p): New static + functions. + (struct elf_m68k_got): merge rel_8o_n_entries and rel_8o_16o_n_entries + fields into n_entries array. Update comments. + (elf_m68k_init_got): Simplify, update all uses. + (elf_m68k_init_got_entry_key): Handle R_68K_TLS_LDM32 reloc, update. + (ELF_M68K_REL_8O_MAX_N_ENTRIES_IN_GOT): Adjust to handle 2-slot + GOT entries; update name, update all uses. + (ELF_M68K_REL_8O_16O_MAX_N_ENTRIES_IN_GOT): Ditto. + (elf_m68k_get_got_entry): Update. + (elf_m68k_update_got_entry_type): Rewrite to handle TLS GOT entries, + simplify. + (elf_m68k_remove_got_entry_type): Simplify. + (elf_m68k_add_entry_to_got, elf_m68k_can_merge_gots_1): Update. + (elf_m68k_can_merge_gots): Update. + (elf_m68k_merge_gots_1, elf_m68k_merge_gots): Update. + (struct elf_m68k_finalize_got_offsets_arg): Rewrite to handle 2-slot + GOT entries, simplify. + (elf_m68k_finalize_got_offsets_1, elf_m68k_finalize_got_offsets): Same. + (struct elf_m68k_partition_multi_got_arg): Add slots_relas_diff + field, remove obsoleted local_n_entries field. + (elf_m68k_partition_multi_got_2): New static function. + (elf_m68k_partition_multi_got_1, elf_m68k_partition_multi_got): Use it; + update. + (elf_m68k_remove_got_entry_type): Update. + (elf_m68k_install_rela, dtpoff_base, tpoff): New static functions. + (elf_m68k_check_relocs): Handle TLS relocations. Remove unnecessary + update of sgot->size and srelgot->size. + (elf_m68k_gc_sweep_hook): Update. + (elf_m68k_install_rela, dtpoff_base, tpoff): New static functions. + (elf_m68k_relocate_section, elf_m68k_finish_dynamic_symbol): Handle + TLS relocations. + * reloc.c (BFD_RELOC_68K_TLS_*): Declare TLS relocations. + * libbfd.h (bfd_reloc_code_real_names): Add BFD_RELOC_68K_TLS_*. + +2009-02-02 DJ Delorie + + * elf32-mep.c (config_names): Regenerate configuration. + +2009-02-02 Alan Modra + + * elf-bfd.h (bfd_elf_get_str_section): Don't declare. + (bfd_elf_find_section, _sh_elf_set_mach_from_flags): Likewise. + * elf.c (bfd_elf_get_str_section): Make static. + (bfd_elf_find_section): Delete. + * libbfd.h: Regenerate. -2007-02-21 Nick Clifton +2009-02-01 Jan Kratochvil - * elf.c (_bfd_elf_map_sections_to_segments): If the - override_segment_assignment callback is defined then call it. + * elf-eh-frame.c (REQUIRE_CLEARED_RELOCS) Remove. + (_bfd_elf_parse_eh_frame): Do not check relocations for removed FDEs. -2007-02-21 Alan Modra +2009-01-31 Alan Modra - * elf32-spu.c (spu_elf_size_stubs): Correct order of warning args. + * elflink.c (on_needed_list): New function. + (elf_link_add_object_symbols): Link in --as-needed libs if they + satisfy undefined symbols in other libs. -2007-02-19 Thiemo Seufer +2009-01-30 Julian Brown - * elfxx-mips.c (_bfd_mips_elf_print_private_bfd_data): Remove - translation marker from untranslatable strings. + * elf32-arm.c (bfd_elf32_arm_vfp11_erratum_scan): Skip BFDs with + EXEC_P or DYNAMIC flags, and skip sections which are being linked + with --just-symbols (-R). -2007-02-19 Alan Modra +2009-01-29 Adam Nemet - * 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_default_execstack): Define to 0. + * dwarf2.c (read_rangelist): Use read_address to read low_pc and + high_pc in order to properly sign-extend VMAs. -2007-02-17 Mark Mitchell - Nathan Sidwell - Vladimir Prus +2009-01-29 Daniel Jacobowitz + Mark Shinwell + Catherine Moore - * 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@. + * elf-attrs.c, elflink.c, elfxx-mips.c: Correct typos in comments. -2007-02-16 Carlos O'Donell +2009-01-28 Catherine Moore - * 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. + * elf32-arm.c (elf32_arm_check_relocs): Set SEC_ALLOC and + SEC_LOAD for dynamic relocation sections. -2007-02-15 Alan Modra +2009-01-27 Hans-Peter Nilsson - * 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. + * elf32-cris.c (cris_elf_relocate_section): Use elf_hash_table + (info)->tls_size, not elf_hash_table (info)->tls_sec->size for + the size of local TLS data. -2007-02-14 H.J. Lu +2009-01-27 Andreas Schwab - PR ld/3953 - * elflink.c (_bfd_elf_add_default_symbol): Check warning symbol - when adding default symbol. + * mach-o.c (bfd_mach_o_archive_p): Restrict the number of + architectures in the archive. -2007-02-13 Alan Modra +2009-01-27 Hans-Peter Nilsson - * elf64-ppc.c (create_linkage_sections): Use section ".branch_lt" - for branch lookup table. + * elf32-cris.c (cris_elf_relocate_section) + : Correct relocation value. -2007-02-12 Alan Modra + * elf32-cris.c (cris_elf_relocate_section) + : Don't call BFD_ASSERT for weak undefined + symbols with non-default visibility. - * 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. +2009-01-26 Nathan Sidwell -2007-02-12 Alan Modra + * elf32-ppc.c (ppc_elf_relax_section): Add space for relocs + describing the trampolines. + (ppc_elf_relocate_section): Update relocs to describe the + trampolines. - * elflink.c (evaluate_complex_relocation_symbols): Ignore relocs - with a zero symbol index. +2009-01-25 John David Anglin -2007-02-12 Alan Modra + * elf-hppa.h (elf_hppa_final_link_relocate): Add check to ensure that + branch targets can be reached for R_PARISC_PCREL22F, R_PARISC_PCREL17F + and R_PARISC_PCREL12F relocations. - * elflink.c (bfd_elf_discard_info): Tidy setting of "eh". +2009-01-24 Alan Modra -2007-02-05 Dave Brolley - Stan Cox + PR 6022 + * elflink.c (find_version_for_sym): New function split out from, + but without export_dynamic test, .. + (_bfd_elf_link_assign_sym_version): ..here. + (_bfd_elf_export_symbol): Use it. - PR ld/3972 - * elflink.c (elf_link_input_bfd): Always setup finfo->internal_syms. +2009-01-23 Alan Modra -2007-02-05 Dave Brolley - Richard Sandiford - Stan Cox - Nick Clifton - DJ Delorie - Frank Ch. Eigler - Ben Elliston - Richard Henderson - - * 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. + * elf-bfd.h (struct elf_assign_sym_version_info): Delete. + (struct elf_info_failed, struct elf_find_verdep_info): Move to.. + * elflink.c: ..here, somewhat modified. + * elf-bfd.h (_bfd_elf_add_default_symbol, _bfd_elf_export_symbol, + _bfd_elf_link_find_version_dependencies, + _bfd_elf_link_assign_sym_version, _bfd_elf_link_size_reloc_section, + _bfd_elf_fix_symbol_flags, _bfd_elf_adjust_dynamic_symbol, + _bfd_elf_link_sec_merge_syms, bfd_elf_link_mark_dynamic_symbol): Don't + declare.. + * elflink.c: ..and make static here. + (_bfd_elf_link_find_version_dependencies): Adjust for removal + of output_bfd from struct elf_find_verdep_info. + (_bfd_elf_link_assign_sym_version): Similarly adjust to use + struct elf_info_failed. + (bfd_elf_size_dynamic_sections): Adjust. -2007-02-05 Dave Brolley - - * 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 - Richard Sandiford - DJ Delorie - Graydon Hoare - Nick Clifton - Jeff Holcomb - Frank Ch. Eigler - - * 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 - - * 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 - - * elf32-xtensa.c (elf_howto_table) - : - Set src_mask to zero. - : Likewise. Also fix dst_mask. - : Set pcrel_offset to TRUE. - -2007-02-02 Bob Wilson - - * elf32-xtensa.c (xtensa_elf_dynamic_symbol_p): Renamed to... - (elf_xtensa_dynamic_symbol_p): ...this. - -2007-02-02 Bob Wilson - - * 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 - - * 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 - - 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 - - * 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 - - * 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 - - * 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 - - * 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 +2009-01-22 Alan Modra - * 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 - - * elf64-hppa.c (elf64_bed): Defined for HPUX and Linux. - (INCLUDED_TARGET_FILE): Removed. - -2007-01-27 Mike Frysinger - - * elf32-hppa.c (elf32_bed): Define for hpux, linux and netbsd. - (INCLUDED_TARGET_FILE): Remove. - -2007-01-25 DJ Delorie - - * elf32-m32c.c (m32c_elf_howto_table): Don't complain about - R_M32C_16 or R_M32C_24 relocs. - -2007-01-25 Nick Clifton - - 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 - - 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 - - * Makefile.am (BFD_LIBS): Removed. - * Makefile.in: Regenerated. + PR 6832 + * dwarf2.c (find_line): Don't update stash->sec_info_ptr until + after comp_unit_find_line call. -2007-01-11 H.J. Lu +2009-01-21 Nick Clifton - PR binutils/3631 - * Makefile.am (OFILES): Add @bfd64_libs@. - (libbfd_la_SOURCES): Remove $(BFD64_LIBS_CFILES). - * Makefile.in: Regenerated. + PR 9769 + * vmsutil.c (vms_file_stats_name): Remove use of unsupported + tm_gmtoff field in struct tm. - * configure.in (bfd_libs): Replaced by ... - (bfd64_libs): This. - * configure: Regenerated. +2009-01-21 Alan Modra -2007-01-11 Nathan Sidwell + * elf32-spu.h (struct spu_elf_params): Add non_ia_text. + * elf32-spu.c (mark_overlay_section): Only include .text.ia.* + sections in soft-icache lines unless non_ia_text. Don't add + rodata if doing so would exceed line size. - * elf.c (assign_file_positions_for_load_sections): We can - require fewer phdrs than expected. +2009-01-19 Hans-Peter Nilsson -2007-01-08 Kazu Hirata + * elf32-cris.c (elf_cris_copy_indirect_symbol): For other symbol + types than bfd_link_hash_indirect, before early return, call + _bfd_elf_link_hash_copy_indirect. - * 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. +2009-01-19 Andrew Stubbs -2007-01-08 Kai Tietz + * elf-attrs.c (vendor_set_obj_attr_contents): Support tag ordering. + * elf-bfd.h (elf_backend_data): Add obj_attrs_order. + * elf32-arm.c (elf32_arm_obj_attrs_order): New function. + (elf_backend_obj_attrs_order): New define. + * elfxx-target.h (elf_backend_obj_attrs_order): New define. + (elfNN_bed): Add elf_backend_obj_attrs_order. - * config.bfd: Renamed target x86_64-*-mingw64 to x86_64-*-mingw*. +2009-01-19 Andrew Stubbs -2007-01-05 Jakub Jelinek + * elf-attrs.c (is_default_attr): Substitute magic numbers with macros. + (obj_attr_size): Likewise. + (write_obj_attribute): Likewise. + (_bfd_elf_copy_obj_attributes): Likewise. + (_bfd_elf_parse_attributes): Likewise. + * elf-bfd.h (ATTR_TYPE_FLAG_INT_VAL): New define. + (ATTR_TYPE_FLAG_STR_VAL, ATTR_TYPE_FLAG_NO_DEFAULT): New defines. + (ATTR_TYPE_HAS_INT_VAL, ATTR_TYPE_HAS_STR_VAL): New defines. + (ATTR_TYPE_HAS_NO_DEFAULT): New define. + * elf32-arm.c (elf32_arm_obj_attrs_arg_type): Replace magic numbers + with macros. + +2009-01-19 Andrew Stubbs + + * elf-attrs.c (is_default_attr): Support defaultless attributes. + (bfd_elf_add_obj_attr_int): Get type from _bfd_elf_obj_attrs_arg_type. + (bfd_elf_add_obj_attr_string): Likewise. + (bfd_elf_add_obj_attr_int_string): Likewise. + (_bfd_elf_parse_attributes): Allow for unknown flag bits in type. + * elf-bfd.h (struct obj_attribute): Document new flag bit. + * elf32-arm.c (elf32_arm_obj_attrs_arg_type): Specify that + Tag_nodefaults has no default value. + (elf32_arm_merge_eabi_attributes): Modify the Tag_nodefaults + comment to reflect the new state. + +2009-01-19 Alan Modra + + PR 9695 + * pdp11.c (N_BADMAG): True for anything but OMAGIC, NMAGIC, ZMAGIC. + (some_aout_object_p): Delete dead code handling QMAGIC and BMAGIC. + (adjust_z_magix): Delete dead code handling QMAGIC. + +2009-01-16 Kai Tietz + + * coffcode.h (styp_to_sec_flags): Correct interpretation of + IMAGE_SCN_MEM_DISCARDABLE. + +2009-01-16 Alan Modra + + * Makefile.am (libbfd_la_LIBADD, libbfd_la_LDFLAGS): Substitute + SHARED_LIBADD and SHARED_LDFLAGS rather than WIN32LIBADD, WIN32LDFLAGS. + * configure.in (commonbfdlib): Delete. + (SHARED_LDFLAGS): Rename from WIN32LDFLAGS/ + (SHARED_LIBADD): Rename from WIN32LIBADD. Add pic libiberty if such + is available, not just for linux. + * po/SRC-POTFILES.in: Regenerate. + * Makefile.in: Regenerate. + * configure: Regenerate. - * texhex.c (first_phase): Don't fall through into the default - case. - (pass_over): Replace abort () calls with return FALSE. Fix - buffer overflow. +2009-01-15 Andrew Stubbs + Julian Brown + + * elf-bfd.h (NUM_KNOWN_OBJ_ATTRIBUTES): Set to 71 to include all known + ARM attributes in ABI 2.07. + * elf32-arm.c (get_secondary_compatible_arch): New function. + (set_secondary_compatible_arch): New function. + (tag_cpu_arch_combine): New function. + (elf32_arm_copy_one_eabi_other_attribute): Delete function. + (elf32_arm_copy_eabi_other_attribute_list): Delete function. + (elf32_arm_merge_eabi_attributes): Rename order_312 to order_021 to + make it fit with order_01243. + Add support for Tag_also_compatible_with, + Tag_CPU_unaligned_access, Tag_T2EE_use, Tag_Virtualization_use, + Tag_MPextension_use, Tag_nodefaults and Tag_conformance. + Improve/tidy up support for Tag_CPU_raw_name, Tag_CPU_name, + Tag_CPU_arch, Tag_ABI_HardFP_use, Tag_VFP_HP_extension, + Tag_ABI_FP_denormal, Tag_ABI_PCS_GOT_use, Tag_ABI_align8_needed, + Tag_VFP_arch and Tag_ABI_FP_16bit_format. + Rework the way unknown attributes are handled. + Defer errors until all attributes have been processed. + +2009-01-15 Andrew Stubbs + + * elf-attrs.c (bfd_elf_add_obj_attr_compat): Rename to + bfd_elf_add_obj_attr_int_string. + Read Tag_compatibility from its new location in the attribute array, + rather than the attribute list. + (_bfd_elf_copy_obj_attributes): bfd_elf_add_obj_attr_compat -> + bfd_elf_add_obj_attr_int_string. + (_bfd_elf_parse_attributes): Likewise. + (_bfd_elf_merge_object_attributes): There's now only one + Tag_compatibility, and it's in the array, not the list. + * elf-bfd.h (NUM_KNOWN_OBJ_ATTRIBUTES): Set to 33 to include + Tag_compatibility. + (bfd_elf_add_obj_attr_compat): Rename to + bfd_elf_add_obj_attr_int_string. + (bfd_elf_add_proc_attr_compat): Rename to + bfd_elf_add_proc_attr_int_string. + * elf32-arm.c (elf32_arm_merge_eabi_attributes): Explicitly don't handle + Tag_compatibility. + +2009-01-15 Douglas B Rupp + + * Makefile.am (BFD32_BACKENDS): Add new object vmsutil.lo + (BFD32_BACKENDS_CFILES): Add new file vmsutil.c + (vmsutil.lo): Add dependency rule. + * Makefile.in: Regenerate. + * config.bfd (ia64*-*-*vms*): Add case. + * configure.in (bfd_elf64_ia64_vms_vec): Add case. + * configure: Regenerate. + * vmsutil.c: New file. + * vmsutil.h: New file. + * elf-bfd.h (struct bfd_elf_special_section): Change type of + attr to bfd_vma. + * elfxx-ia64.c (elfNN_vms_post_process_headers, + elfNN_vms_section_processing, elfNN_vms_final_write_processing, + elfNN_vms_close_and_cleanup, elfNN_vms_section_from_shdr, + elfNN_vms_object_p): New functions + * targets.c (bfd_elf64_ia64_vms_vec): New target. + +2009-01-14 H.J. Lu + + PR ld/9727 + * elflink.c (elf_gc_sweep): Exclude the group section if the + first member of the section group is excluded. + +2009-01-14 Alan Modra + + PR 9735 + * syms.c (_bfd_stab_section_find_nearest_line): Don't free + saved filename, use bfd_alloc rather than bfd_malloc for it. + +2009-01-13 Alan Modra + + * elf32-spu.c (spu_elf_build_stubs): Make __icache_base absolute. + +2009-01-13 Alan Modra + + * elf32-spu.c (remove_cycles): Always set call->max_depth. + +2009-01-12 Alan Modra + + * elf32-spu.c (spu_elf_auto_overlay): Correct vma mask. + +2009-01-12 Alan Modra + + * elf32-spu.c (struct spu_link_hash_table): Add init, line_size_log2, + num_lines_log2. + (struct got_entry): Add br_addr. + (struct call_info): Add priority. + (struct function_info): Add lr_store and sp_adjust. + (spu_elf_setup): Init line_size_log2 and num_lines_log2. + (spu_elf_find_overlays): For soft-icache, mark any section within cache + area as an overlay, and check that no other overlays exist. Look up + icache overlay manager entry sym. + (BRA_STUBS, BRA, BRASL): Define. + (enum _stub_type): Replace ovl_stub with call_ovl_stub and br*_ovl_stub. + (needs_ovl_stub): Adjust for soft-icache. Return priority encoded + in branch insn. + (count_stub, build_stub): Support soft-icache. + (build_spuear_stubs, process_stubs): Adjust build_stub call. + (spu_elf_size_stubs): Size soft-icache stubs. + (overlay_index): New function. + (spu_elf_build_stubs): Make static. Support soft-icache. + (spu_elf_check_vma): Don't turn off auto_overlay if soft-icache. + (find_function_stack_adjust): Save lr store and stack adjust insn + offsets. + (maybe_insert_function): Adjust find_function_stack_adjust call. + (mark_functions_via_relocs): Retrieve priority. + (remove_cycles): Only warn about pruned arcs when stack_analysis. + (sort_calls): Sort by priority first. + (mark_overlay_section): Ignore .ovl.init. + (sum_stack): Only print when stack_analysis. + (print_one_overlay_section): New function, extracted from.. + (spu_elf_auto_overlay): ..here. Support soft-icache overlays. + (spu_elf_stack_analysis): Only print when htab->stack_analysis. + (spu_elf_final_link): Call spu_elf_stack_analysis for lrlive + analysis. Call spu_elf_build_stubs. + (spu_elf_relocate_section): For soft-icache encode overlay index + into addresses. + (spu_elf_output_symbol_hook): Support soft-icache. + (spu_elf_modify_program_headers: Likewise. + + * elf32-spu.h (struct spu_elf_params): Add lrlive_analysis. Rename + num_regions to num_lines. Add line_size and max_branch. + (enum _ovly_flavour): Add ovly_soft_icache. + (spu_elf_build_stubs): Delete. + +2009-01-11 Jan Kratochvil + + * elflink.c (_bfd_elf_section_already_linked): Handle g++-3.4 + relocations in `.gnu.linkonce.r.*' referencing its `.gnu.linkonce.t.*'. + +2009-01-07 Hans-Peter Nilsson + + * elf32-cris.c (cris_elf_relocate_section) + : For a symbol defined in + the program, the known offset starts at the negative size of the + TLS section. + : + Similar. + +2009-01-05 Joel Sherrill + + * config.bfd: Add lm32-*-rtems*. + +2009-01-03 H.J. Lu + + * coff-ppc.c: Add 2009 to Copyright. + * elf32-cris.c: Likewise. + * elflink.c: Likewise. + +2009-01-03 Hans-Peter Nilsson + + * elf32-cris.c (elf_cris_finish_dynamic_symbol): Rename + gotplt_index to rela_plt_index. Adjust for R_CRIS_DTPMOD entry. -2007-01-04 Jie Zhang +2009-01-02 H.J. Lu - * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Don't set - SEC_EXCLUDE on zero size .eh_frame. + PR ld/9679 + * elflink.c (elf_merge_st_other): New. + (_bfd_elf_merge_symbol): Use it on skipped weak definitions and + hide them if needed. + (elf_link_add_object_symbols): Updated. -For older changes see ChangeLog-2006 +2009-01-02 H.J. Lu + + PR ld/9676 + * elflink.c (elf_link_add_object_symbols): Update def_dynamic, + ref_dynamic and dynamic_def fields when setting def_regular + to 1. + +2009-01-02 Curtis Mackie + + PR 9682 + * coff-ppc.c (dump_toc): Fix up calls to fprintf without a string + literal. + +For older changes see ChangeLog-2008 Local Variables: mode: change-log diff --git a/bfd/ChangeLog-2007 b/bfd/ChangeLog-2007 new file mode 100644 index 0000000..be94259 --- /dev/null +++ b/bfd/ChangeLog-2007 @@ -0,0 +1,3561 @@ +2007-12-31 H.J. Lu + + PR ld/5530 + * elfxx-ia64.c (elfNN_ia64_relocate_section): Call + _bfd_elf_find_segment_containing_section with output_bfd, + instead of input_bfd. + +2007-12-31 Nick Clifton + + * elf-m10300.c (mn10300_elf_relax_section): Use + _bfd_merged_section_offset to compute the offset of a symbol in a + merged section. + +2007-12-31 Nick Clifton + + * elf.c (_bfd_elf_find_segment_containing_section): New function: + Scan the segment map looking for the segment containing a + specified function. + * elf-bfd.h: Prototype the new function. + * elf-hppa.h (elf_hppa_osec_to_segment): Delete. + (elf_hppa_record_segment_addrs): Use new function. + * elf32-bfin.c (_bfdfdpic_osec_to_segment): Use new function. + * elf32-frv.c (_frvfdpic_osec_to_segment): Use new function. + * elf32-hppa.c (hppa_record_segment_addr): Use new function. + * elfxx-ia64.c (elfNN_ia64_relocate_section): Use new function. + +2007-12-28 John David Anglin + + PR binutils/5146 + * elf64-hppa.c: Declare alloca when __GNUC__ is defined. + * som.c: Likewise. + + * elf-hppa.h (elf_hppa_osec_to_segment): New function. + (elf_hppa_record_segment_addrs): Use elf_hppa_osec_to_segment. + Remove ATTRIBUTE_UNUSED from abfd argument. + * elf32-hppa.c (hppa_record_segment_addr): Likewise. + +2007-12-28 Nick Hudson + + * elf32-hppa.c (hppa_record_segment_addr): Locate the segment + containing the section using the segment map, rather than guessing + based upon the section's vma and file position. + +2007-12-24 H.J. Lu + + PR binutils/5488 + * elf.c (IS_NOTE): New. + (IS_COREFILE_NOTE): Use IS_NOTE. + (IS_SECTION_IN_INPUT_SEGMENT): Use IS_NOTE instead of + IS_COREFILE_NOTE. + +2007-12-24 H.J. Lu + + PR binutils/5449 + * elf.c (rewrite_elf_program_header): Don't adjust p_paddr if + p_paddr is set to 0. + (copy_private_bfd_data): Call rewrite_elf_program_header if + p_paddr is set to 0. + + * elfcode.h (elf_swap_phdr_out): Set p_paddr to 0 if needed. + + * elfxx-ia64.c (ELF_MAXPAGESIZE): Don't redefine it for HPUX. + +2007-12-21 Bob Wilson + + * elf32-xtensa.c (relax_section): Update DIFF relocations in the + same way as other relocations. + +2007-12-18 Daniel Jacobowitz + + * section.c (BFD_FAKE_SECTION): Update. + * bfd-in2.h: Regenerate. + +2007-12-18 Daniel Jacobowitz + + * bfd-in2.h: Regenerate. + +2007-12-17 Pedro Alves + + * config.bfd: Add arm-*-mingw32ce* target. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (eh_cie_fde): Replace u.cie.merged with a union of + a merged field and a sec field. + (eh_frame_hdr_info): Remove offsets_adjusted. + * elf-eh-frame.c (_bfd_elf_parse_eh_frame): Update accesses to + the CIE merged field. + (_bfd_elf_gc_mark_fdes): Likewise. + (_bfd_elf_discard_section_eh_frame): Likewise. Set u.cie.u.sec + when clearing the removed flag. + (_bfd_elf_eh_frame_section_offset): Remove offsets_adjusted handling. + (_bfd_elf_write_section_eh_frame): Likewise. Apply output_offsets + where appropriate. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (eh_cie_fde): Move add_fde_encoding and + per_encoding_relative to u.cie. Add commentary. + * elf-eh-frame.c (cie): Remove make_relative. + (extra_augmentation_string_bytes): Update use of add_fde_encoding. + (extra_augmentation_data_bytes): Likewise. Use an FDE's own + add_augmentation_size field, rather than referring to the CIE. + (_bfd_elf_parse_eh_frame): Don't set the struct cie + make_relative field; set the eh_cie_fde field directly. + Update setting of add_fde_encoding and per_encoding_relative. + Copy make_relative and add_augmentation_size from the CIE + to the FDE. + (_bfd_elf_discard_section_eh_frame): Use the FDE's own + make_relative field. + (_bfd_elf_eh_frame_section_offset): Likewise. + (_bfd_elf_write_section_eh_frame): Update accesses to + add_fde_encoding and per_encoding_relative. Use the FDE's + own make_relative and add_augmentation_size fields. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (eh_cie_fde): Remove need_lsda_relative. + Move make_lsda_relative to u.cie. + * elf-eh-frame.c (cie): Rename make_lsda_relative to + can_make_lsda_relative. + (_bfd_elf_parse_eh_frame): Don't set the old eh_cie_fde + make_lsda_relative field. Update after cie renaming. + Set u.cie.make_lsda_relative if can_make_lsda_relative + and if we find a relocation against the LSDA. + (_bfd_elf_discard_section_eh_frame): Copy make_lsda_relative when + changing a CIE's group representative. + (_bfd_elf_eh_frame_section_offset): Don't set need_ldsa_relative here. + (_bfd_elf_write_section_eh_frame): Check u.cie.make_lsda_relative + rather than need_lsda_relative. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (eh_cie_fde): Add u.fde.next_for_section and + u.cie.gc_mark. + (bfd_elf_section_data): Add fde_list. + (elf_fde_list): New macro. + (elf_obj_tdata): Add eh_frame_section. + (elf_eh_frame_section): New macro. + (_bfd_elf_gc_mark_reloc): Remove last parameter. + (_bfd_elf_gc_mark_fdes): Declare. + * elf-eh-frame.c (_bfd_elf_get_eh_frame_sec_info): Chain the FDEs + for each input section. + (mark_entry, _bfd_elf_gc_mark_fdes): New functions. + * elflink.c (_bfd_elf_gc_mark_reloc): Remove is_eh parameter. + (_bfd_elf_gc_mark): Update call accordingly. Mark the relocations + againts the section's FDEs. Don't mark the bfd's elf_eh_frame_section. + (bfd_elf_gc_sections): Parse each input bfd's .eh_frame before + marking any input sections. Remove the current EH handling. + * section.c (bfd_section): Remove gc_mark_from_eh. + * ecoff.c (bfd_debug_section): Update initializer accordingly. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (eh_cie_fde): Add u.cie. Document how u.fde.cie_inf + changes when removed == 0. + (eh_frame_hdr_info): Add parsed_eh_frames. + (_bfd_elf_begin_eh_frame_parsing): Declare. + (_bfd_elf_parse_eh_frame): Declare. + (_bfd_elf_end_eh_frame_parsing): Declare. + * elf-eh-frame.c (_bfd_elf_begin_eh_frame_parsing): New function. + (_bfd_elf_parse_eh_frame): New function, split out from + _bfd_elf_discard_section_eh_frame. Make a first pass through the + buffer to calculate the number of entries and CIEs. Allocate memory + for them before the main loop. Replace current extended cie + representation with a pair of pointers, one to the local eh_cie_fde + and one to the full struct cie. Allocate a separate array of struct + cies if not merging. Merge CIEs during the main loop and set up each + u.cie.merged field. Point an FDE's cie_inf field directly at the + local CIE. Initially assume that all entries should be removed. + (_bfd_elf_end_eh_frame_parsing): New function. + (_bfd_elf_discard_section_eh_frame): Assume that the section has + already been parsed. Use a separate pass to mark entries that + need to be kept. Use the u.cie.merged field to track a CIE's + group representative. + * elflink.c (bfd_elf_discard_info): Call _bfd_elf_parse_eh_frame + before _bfd_elf_discard_section_eh_frame. Wrap loop with calls to + _bfd_elf_begin_eh_frame_parsing and _bfd_elf_end_eh_frame_parsing. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (eh_cie_fde): Put cie_inf in a union. Add a reloc_index + field. Use bitfields for fde_encoding, lsda_encoding and lsda_offset. + * elf-eh-frame.c (extra_augmentation_data_bytes): Adjust cie_inf + accesses after the above change. + (_bfd_elf_eh_frame_section_offset): Likewise. + (_bfd_elf_write_section_eh_frame): Likewise. + (_bfd_elf_discard_section_eh_frame): Likewise. Set up reloc_index. + +2007-12-15 Richard Sandiford + + * elf-bfd.h (_bfd_elf_gc_mark_rsec, _bfd_elf_gc_mark_reloc): Declare. + (_bfd_elf_gc_mark): Use elf_gc_mark_hook_fn. + * elflink.c (init_reloc_cookie, fini_reloc_cookie) + (init_reloc_cookie_rels, fini_reloc_cookie_rels): New functions, + split out from... + (bfd_elf_discard_info): ...here. + (init_reloc_cookie_for_section): New function. + (fini_reloc_cookie_for_section): Likewise. + (_bfd_elf_gc_mark_rsec, _bfd_elf_gc_mark_reloc): New functions, + split out from... + (_bfd_elf_gc_mark): ...here. Use init_reloc_cookie_for_section + and fini_reloc_cookie_for_section. + +2007-12-12 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_do_reloc): Update self_address along with + address. + (print_action_list): Fix name for ta_convert_longcall. + +2007-12-11 Catherine Moore + + * elf.c (_bfd_elf_copy_private_symbol_data): Don't copy shndx if + the symbol's section is the undefined section. + +2007-12-11 Alan Modra + + * elf.c (elf_fake_sections): Add "warning:" to "..changed to PROGBITS" + message. + +2007-12-07 Bob Wilson + + * elf32-xtensa.c (elf_howto_table): Add R_XTENSA_32_PCREL. + (elf_xtensa_reloc_type_lookup): Handle BFD_RELOC_32_PCREL. + (elf_xtensa_check_relocs): Use default case for all relocations that + need nothing done here. + (elf_xtensa_do_reloc): Compute self_address for all relocation types. + Handle R_XTENSA_32_PCREL. + (elf_xtensa_relocate_section): Check for R_XTENSA_32_PCREL for dynamic + symbols. + (check_section_ebb_pcrels_fit): Ignore R_XTENSA_32_PCREL relocations. + +2007-12-05 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Do consider branches to + non-function symbols for overlay stubs. + +2007-12-04 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Create DT_PLTGOT + entry for all dynamic objects. + +2007-12-04 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Correct section alignment. + +2007-11-30 Richard Sandiford + + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Use the + ELF header to choose between 32-bit and 64-bit relocation structures. + +2007-11-29 Mark Shinwell + + * archures.c (bfd_mach_mips_loongson_2e): New. + (bfd_mach_mips_loongson_2f): New. + * bfd-in2.h (bfd_mach_mips_loongson_2e): New. + (bfd_mach_mips_loongson_2f): New. + * cpu-mips.c: Add I_loongson_2e and I_loongson_2f to + anonymous enum. + (arch_info_struct): Add Loongson-2E and Loongson-2F entries. + * elfxx-mips.c (_bfd_elf_mips_mach): Handle Loongson-2E + and Loongson-2F flags. + (mips_set_isa_flags): Likewise. + (mips_mach_extensions): Add Loongson-2E and Loongson-2F + entries. + +2007-11-29 Nick Clifton + + PR ld/5398 + * elf32-arm.c (bfd_elf32_arm_process_before_allocation): Do not + complain if there is no glue bfd, just return. + +2007-11-28 Nick Clifton + + * elf-m10300.c (mn10300_elf_relax_section): Extend previous fix to + cover forward jumps. + +2007-11-21 Nick Clifton + + * elf-m10300.c (mn10300_elf_relax_section): Allow for alignment + relocs when computing whether instructions can be relaxed. + +2007-11-16 Tristan Gingold + + * elflink.c (elf_link_output_extsym): Weaken assertion: if + --gc-section is set, there may be no TLS segment. + +2007-11-19 Alan Modra + + * elf-bfd.h (bfd_elf_perform_complex_relocation): Update prototype. + * elflink.c (bfd_elf_perform_complex_relocation): Return status. + Don't print reloc overflow message. + * elf32-mep.c (mep_elf_relocate_section): Handle status from + bfd_elf_perform_complex_relocation. + +2007-11-17 Thiemo Seufer + + * elfxx-mips.c (mips_elf_merge_obj_attributes): Handle -mips32r2 + -mfp64 attribute. + +2007-11-16 Nick Clifton + + * elf-m10300.c (mn10300_elf_check_relocs): Fix memory leak and + check that bfd_elf_get_elf_syms is only called once. + +2007-11-16 Ulrich Weigand + + * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Set udata.p of + synthetic symbol to point to the ELF symbol it was derived from. + +2007-11-15 Alan Modra + + PR 5328 + * opncls.c (separate_debug_file_exists): Use fopen/fread + rather than open/read and open in binary mode. + +2007-11-14 Richard Sandiford + + * elfxx-mips.c (mips_got_page_range): New structure. + (mips_got_page_entry): Likewise. + (mips_got_info): Add page_gotno and got_page_entries fields. + (mips_elf_got_per_bfd_arg): Add max_pages field. Delete + primary_count and current_count fields. + (mips_got_page_entry_hash, mips_got_page_entry_eq): New functions. + (mips_elf_pages_for_range, mips_elf_record_got_page_entry): Likewise. + (mips_elf_get_got_for_bfd): New function, split out from + mips_elf_make_got_per_bfd. Initialize the page_gotno and + got_page_entries fields when creating a new GOT structure. + (mips_elf_make_got_pages_per_bfd): New function. + (mips_elf_merge_got_with): New function, split out from + mips_elf_make_got_per_bfd. Merge page entries as well as + non-page entries. Use the minimum of max_pages and the sum + of the page_gotnos to estimate the number of page entries. + (mips_elf_merge_gots): Use the minimum of max_pages and the + bfd's page_gotno to estimate the number of page entries. + Use the above functions. + (mips_elf_multi_got): Add page entries as well as non-page entries + to the individual per-bfd GOTs. Initialize got_per_bfd_arg.max_pages. + Initialize the page_gotno and got_page_entries fields when creating + a new primary GOT. Use the minimum of pages and page_gotno when + adding the number of pages entries to local_gotno. + (mips_elf_create_got_section): Initialize the page_gotno and + got_page_entries fields of the GOT structure. + (mips_elf_rel_relocation_p, mips_elf_read_rel_addend) + (mips_elf_add_lo16_rel_addend, mips_elf_get_section_contents): New + functions, split out from... + (_bfd_mips_elf_relocate_section): ...here. + (_bfd_mips_elf_check_relocs): Record GOT page entries too. + (_bfd_mips_relax_section): Use mips_elf_get_section_contents. + (_bfd_mips_elf_always_size_sections): Use the smaller of the + loadable_size- and page_gotno-derived estimates. + +2007-11-14 Thiemo Seufer + + * elfxx-mips.c (mips_elf_merge_obj_attributes): Prevent + unwanted fallthroughs in case statement. + +2007-11-13 H.J. Lu + + PR binutils/5307 + * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Don't + copy input subsystem if output is different from input. + +2007-11-13 Nick Clifton + + * elf-m10300.c (mn10300_elf_final_link_relocate): Prevent the + accidental termination of DWARF location list entries. + (mn10300_elf_relax_delete_bytes): Stop deletion if an align reloc + is encountered that is larger than or not a mutliple of the number + of bytes being deleted. + When adjusting symbols, any symbols inside the region being + deleted must be moved to the end of the region. + Move align relocs forward if there is room for them after the + deletion of the region. + +2007-11-13 Alan Modra + + PR 5233 + * elf.c (rewrite_elf_program_header): Formatting. Add + first_matching_lma and first_suggested_lma booleans and use + instead of testing matching_lma and suggested_lma for zero. + +2007-11-12 H.J. Lu + + PR binutils/5299 + * peicode.h (pe_bfd_object_p): Save and restore previous bfd + state when calling coff_object_p. + +2007-11-12 Alan Modra + + * elf.c (_bfd_elf_get_synthetic_symtab): Only bump the symbol + pointer when we have a valid symbol. Init udata.p to NULL. + +2007-11-09 Nathan Sidwell + + * elf-vxworks.c (elf_vxworks_emit_relocs): Don't clobber + rel_hash. Move loop inside if test. + +2007-11-08 Nathan Sidwell + + * elf-vxworks.h (elf_vxworks_add_dynamic_entries): Declare. + (elf_vxworks_finish_dynamic_entry): Declare. + * elf-vxworks.c: Include elf/vxworks.h. + (elf_vxworks_add_dynamic_entries): New. + (elf_vxworks_finish_dynamic_entry): New. + * Makefile.am (elf-vxworks.lo): Add dependency. + * Makefile.in (elf-vxworks.lo): Add dependency. + * elf32-i386.c (elf_i386_size_dynamic_sections, + elf_i386_finish_dynamic_sections): Call + elf_vxworks_add_dynamic_entries and + elf_vxworks_finish_dynamic_entry. + * elf32-ppc.c (ppc_elf_size_dynamic_sections, + ppc_elf_finish_dynamic_sections): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections, + sparc_finish_dyn): Likewise. + * elf32-sh.c (sh_elf_size_dynamic_sections, + sh_elf_finish_dynamic_sections): Likewise. + * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections, + _bfd_mips_elf_finish_dynamic_sections): Likewise. + * elf32-arm.c (elf32_arm_size_dynamic_sections, + elf32_arm_finish_dynamic_sections): Likewise. + +2007-11-07 Olivier Hainque + + * bfd/elfxx-mips.c (_bfd_mips_elf_fake_sections): Force + SHF_MIPS_NOSTRIP on .debug_frame for Irix. + +2007-11-06 Alan Modra + + * elf64-ppc.c (ppc64_elf_check_relocs): Don't refcount tlsld_got here.. + (ppc64_elf_gc_sweep_hook): ..or here.. + (ppc64_elf_tls_optimize): ..or here. Make two passes through the + relocs, ensuring that tls_get_addr calls follow gd and ld relocs. + (allocate_dynrelocs): Refcount tlsld_got here. + (ppc64_elf_size_dynamic_sections): Allocate local got and call + allocate_dynrelocs before allocating tlsld_got. + (ppc64_elf_relocate_section): Remove check that a tls_get_addr + call follows gd and ld relocs. + + * elf32-ppc.c (ppc_elf_check_relocs): Don't refcount tlsld_got here.. + (ppc_elf_gc_sweep_hook): ..or here.. + (ppc_elf_tls_optimize): ..or here. Make two passes through the + relocs, ensuring that tls_get_addr calls follow gd and ld relocs. + (allocate_dynrelocs): Refcount tlsld_got here. + (ppc_elf_size_dynamic_sections): Call allocate_dynrelocs before + allocating tlsld_got. + (ppc_elf_relocate_section): Remove check that a tls_get_addr + call follows gd and ld relocs. + +2007-11-05 Alan Modra + + * merge.c (sec_merge_hash_lookup): Revert last change. + (record_section): Likewise. + (_bfd_merge_sections): Likewise. + (_bfd_merged_section_offset): Properly handle NULL secinfo. + (_bfd_add_merge_section): Allocate extra space for a zero + terminator on SEC_STRINGS sections. + +2007-11-05 Danny Smith + + * pe-i386.c (COFF_SECTION_ALIGNMENT_ENTRIES): Let .data, .text + and .bss section use the default. + * pei-i386.c (COFF_SECTION_ALIGNMENT_ENTRIES): Likewise. + +2007-11-01 Joseph Myers + + * merge.c (sec_merge_hash_lookup): Add parameter sec_end. Check + for unterminated strings. All callers changed. + (record_section): Add parameter abfd. Give error message for + unterminated strings. + (_bfd_merge_sections): Update call to record_section. + (_bfd_write_merged_section, _bfd_merged_section_offset): Handle + NULL secinfo from merge failures. + +2007-10-31 Nick Clifton + + * elf-m10300.c (mn10300_elf_relax_delete_bytes): Do not look for + align relocs when there are no relocs attached to the section. + +2007-10-31 Alan Modra + + * elf-bfd.h (bfd_elf_match_symbols_in_sections): Don't declare. + * elflink.c (bfd_elf_match_symbols_in_sections): Make static. + Remove section name comparisons. + +2007-10-30 Nick Clifton + + * reloc.c (BFD_RELOC_MN10300_ALIGN): Add. + * bfd-in2.h: Regenerate. + * libbfd.h: Regnerate. + * elf-m10300.h: Handle R_MN10300_ALIGN relocs. + (mn10300_elf_relax_delete_bytes): Honour R_MN10300_ALIGN relocs. + Re-fix off by one error in comparisons. + +2007-10-25 Pedro Alves + + * bfd-in.h (STRING_COMMA_LEN): Don't handle NULL STR case. + * bfd-in2.h: Regenerate. + +2007-10-25 Daniel Jacobowitz + + * elf32-ppc.c (ppc_elf_merge_obj_attributes): Add support for + Tag_GNU_Power_ABI_Vector. + +2007-10-25 Joseph Myers + + * elfxx-mips.c (_bfd_mips_elf_modify_segment_map): Do not add + PT_NULL header when not linking. + +2007-10-25 Carlos Eduardo Seo + + * elf.c (elfcore_grok_ppc_vmx): New function. + (elfcore_grok_note): Handle NT_PPC_VMX. + (elfcore_write_ppc_vmx): New function. + * elf-bfd.h (elfcore_write_ppc_vmx): Declare. + +2007-10-24 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2007-10-23 Alan Modra + + * elf64-ppc.c (ppc_build_one_stub): Don't duplicate relocs + emitted for ".brlt" entries. + (toc_adjusting_stub_needed): Don't treat ".fixup" specially here.. + (ppc64_elf_next_input_section): ..instead do so here. + +2007-10-19 Nick Clifton + + * config.bfd: Recognise am34-linux-gnu target. + * reloc.c: Add BFD_RELOC_MN10300_SYM_DIFF relocation. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + * elf-m10300.c (elf_mn10300_howto): Add R_MN10300_SYM_DIFF. + (mn10300_reloc_map): Likewise. + (mn10300_elf_check_relocs): Do not create dynamic relocs for + symbol differences or relocations against absolute symbols. + (mn10300_elf_final_link_relocate): Likewise. + Handle R_MN10300_SYM_DIFF relocs. + (mn10300_elf_relocate_section): Fix for creating local copys of + dynamic relocs. + (mn10300_elf_relax_delete_bytes): Adjust symbols at the end of the + region. Adjust the size of function symbols. + (mn10300_elf_relax_section): Ignore symbols that are in discarded + sections. + +2007-10-19 Nick Clifton + + * elf-m10300.c: Convert to ISO C. + +2007-10-18 H.J. Lu + Alan Modra + + PR ld/4424 + * config.bfd (targ_selvecs): Add bfd_elf64_alpha_vec for + alpha/FreeBSD. Add bfd_elf64_sparc_vec for sparc64/FreeBSD. + Add bfd_elf32_i386_vec and bfd_efi_app_ia32_vec for i386/FreeBSD. + (targ64_selvecs): Set for i386/FreeBSD. + * elf-bfd.h (elf_backend_data): Add relocs_compatible. + (_bfd_elf_default_relocs_compatible): Declare. + (_bfd_elf_relocs_compatible): Declare. + * elfxx-target.h (elf_backend_relocs_compatible): Define. + (elfNN_bed): Init new relocs_compatible field. + * elflink.c (_bfd_elf_default_relocs_compatible): New function. + (_bfd_elf_relocs_compatible): New function. + (elf_link_add_object_symbols): Call bed->relocs_compatible. + * elf32-i386.c (elf_backend_relocs_compatible): Define. + * elf64-alpha.c: Likewise. + * elf64-sparc.c: Likewise. + * elf64-x86-64.c: Likewise. + +2007-10-16 Bob Wilson + + * elf32-xtensa.c (relax_section): Check for a reference to a discarded + DWARF section and anticipate its replacement with the kept section. + +2007-10-16 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_discard_info_for_section): Remove + unnecessary size variables. Set sec->rawsize. + (relax_section, relax_property_section): Likewise. + +2007-10-16 Bob Wilson + + * section.c (struct bfd_section): Clarify comment for rawsize field. + * bfd-in2.h: Regenerate. + +2007-10-16 Bob Wilson + + * elflink.c (_bfd_elf_check_kept_section): Use the section rawsize + values if they are set. + +2007-10-16 Nick Clifton + + PR 5146 + * configure.in (AC_CHECK_HEADERS): Add alloca.h + * configure: Regenerate. + * config.in: Regenerate. + * som.c: Replace alloca-conf.h inclusion with code recommended in + autoconf documentation. + * elf64-hppa.c: Likewise. + +2007-10-16 Nick Clifton + + * configure.in (--enable-elf-stt-common): New configure + option. If enabled then the tools can generate symbols with + the ELF STT_COMMON type. + * config.in: Regenerate. + * configure: Regenerate. + * elf.c (swap_out_syms): If USE_STT_COMMON is defined then set + the type of emitted common symbols to STT_COMMON. + * elfcode.h (elf_slurp_symbol_table): Accept STT_COMMON symbol + types. + +2007-10-15 Alan Modra + + * coff-arm.c (arm_emit_base_file_entry): Check fwrite return value. + Return status. Adjust callers. + * coff-mcore.c (mcore_emit_base_file_entry): Likewise. + * coff-ppc.c (write_base_file_entry): New function. + (coff_ppc_relocate_section): Use it. + * elf32-arm.c (find_thumb_glue): Check asprintf return status. + (find_arm_glue): Likewise. + * vms-misc.c (_bfd_vms_output_flush): Check fwrite return value. + +2007-10-12 Nick Clifton + + PR 5160 + * elflink.c (eval_symbol): Remove bufsz variable and use + sizeof(symbuf) where necessary. + +2007-10-12 M R Swami Reddy + + * elf32-cr16.c (elf32_cr16_relax_section): Fix condition check typo. + +2007-10-12 Daniel Jacobowitz + + * elfxx-mips.c (mips_elf_sort_hash_table_f): Handle forced + local symbols specially. + (mips_elf_set_global_got_offset): Skip forced local symbols. + +2007-10-12 Alan Modra + + * elf.c (elfcore_grok_prxfpreg): Fix comment typo. + +2007-10-10 H.J. Lu + + * elf.c (get_program_header_size): Always add a PT_GNU_RELRO + segment for -z relro. + (_bfd_elf_map_sections_to_segments): Make a PT_GNU_RELRO + segment only when needed. + +2007-10-05 Bob Wilson + + * elf32-xtensa.c (relax_section): Call pin_internal_relocs when + changing a relocation's offset. Adjust call to translate_reloc. Do + not add a fix record for a DIFF reloc. For other relocs, only add a + fix record if the translated target is in a different object file; + otherwise, just update the relocation. Call pin_internal_relocs when + updating a reloc but not when adding a fix record. + (translate_reloc): Get the target section from a new argument, not + from the relocation. Change check for relaxable sections to an + assertion. Compute separate offset adjustments for the base symbol + and the addend, and set the new relocation's addend correctly. Return + the new target section. + +2007-10-05 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_relocate_section): Remove updates of + r_type and howto after calling do_fix_for_relocateable_link and + do_fix_for_final_link. + +2007-10-05 Bob Wilson + + * elf32-xtensa.c (removed_by_actions): New. + (offset_with_removed_text): Reimplement using removed_by_actions. + (offset_with_removed_text_before_fill): Delete. + (relax_property_section): Use removed_by_actions. Rearrange logic. + (relax_section_symbols): Likewise. + +2007-10-04 Bob Wilson + + * elf32-xtensa.c (reloc_bfd_fix_struct): Delete target_abfd field. + (reloc_bfd_fix_init): Remove target_abfd argument. + (relax_section, move_literal): Adjust calls to reloc_bfd_fix_init. + +2007-10-04 Nick Clifton + + PR linker/5099 + * elf64-x86-64.c (elf64_x86_64_check_relocs): Add missing + apostrophe to error message. + +2007-10-01 M R Swami Reddy + + * elf32-cr16.c: Fixed DISP8, DISP20 and IMM20 relocations at + final relocation phase. + Added the below relaxations: IMM32 -> IMM20/IM16 -> IMM4. + * reloc.c: Added 3 new relocations: R_CR16_SWITCH8, + R_CR16_SWITCH16, R_CR16_SWITCH32. + * libbfd.h: Regenerate. + * bfd-in2.h: Regenerate. + +2007-09-30 Alan Modra + + * elflink.c: Formatting. + +2007-09-29 Alan Modra + + * elflink.c (resolve_symbol): Handle symbols in SEC_MERGE + sections. Don't test symbol st_shndx. Don't bother with + bfd_link_hash_common symbols. Print longs rather than ints + in debug messages. + (eval_symbol): Replace "sym" and "advanced" params with "symp". + Replace "addr" and "section_offset" params with "dot". Don't + cast bfd_vma values to signed, cast them to bfd_signed_vma. + (bfd_elf_perform_complex_relocation): Delete "output_bfd", "info", + "local_syms" and "local_sections" params. Add "relocation". + Delete code calculating relocation value. + (evaluate_complex_relocation_symbols): Delete function. Fold into.. + (elf_link_input_bfd): ..existing code examining relocs. + * elf-bfd.h (bfd_elf_perform_complex_relocation): Update prototype. + * elf32-mep.c (mep_elf_check_relocs): Delete function. + (mep_elf_gc_sweep_hook, mep_elf_gc_mark_hook): Likewise. + (mep_elf_object_p): Don't set elf_bad_symtab. + (elf_backend_check_relocs): Don't define. + (elf_backend_gc_mark_hook, elf_backend_gc_sweep_hook): Likewise. + (elf_backend_can_gc_sections, USE_RELA): Likwise. + (mep_elf_relocate_section): Move bfd_elf_perform_complex_relocation + call after we have calculated reloc value. Delete local sym + debug code. Use RELOC_FOR_GLOBAL_SYMBOL. Delete addend + adjusting code.. + (elf_backend_rela_normal): ..instead define this. + +2007-09-28 Alan Modra + + * elf-m10300.c (mn10300_elf_check_relocs): Delete dead code. + * elf32-arm.c (elf32_arm_check_relocs): Likewise. + * elf32-avr.c (elf32_avr_check_relocs): Likewise. + * elf32-bfin.c (bfinfdpic_check_relocs): Likewise. + * elf32-cris.c (cris_elf_check_relocs): Likewise. + * elf32-d10v.c (elf32_d10v_check_relocs): Likewise. + * elf32-dlx.c (elf32_dlx_check_relocs): Likewise. + * elf32-fr30.c (fr30_elf_check_relocs): Likewise. + * elf32-frv.c (_frvfdpic_check_discarded_relocs): Likewise. + (elf32_frv_check_relocs): Likewise. + * elf32-iq2000.c (iq2000_elf_check_relocs): Likewise. + * elf32-m32c.c (m32c_elf_check_relocs): Likewise. + * elf32-m32r.c (m32r_elf_check_relocs): Likewise. + * elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise. + * elf32-mcore.c (mcore_elf_check_relocs): Likewise. + * elf32-msp430.c (elf32_msp430_check_relocs): Likewise. + * elf32-mt.c (mt_elf_check_relocs): Likewise. + * elf32-openrisc.c (openrisc_elf_check_relocs): Likewise. + * elf32-sh.c (sh_elf_check_relocs): Likewise. + * elf64-mmix.c (mmix_elf_check_relocs): Likewise. + * elf64-sh64.c (sh_elf64_check_relocs): Likewise. + * elf32-score.c (_bfd_score_elf_check_relocs): Likewise. + (score_elf_local_relocation_p): Likewise. + (_bfd_score_elf_relocate_section): Likewise. + (score_elf_final_link_relocate): Likewise. + +2007-09-26 Jan Beulich + + * elf32-i386.c (elf_i386_check_relocs): Revert NULL pointer + check for R_386_GNU_VTINHERIT. + * elf-m10300.c (mn10300_elf_check_relocs): Check for NULL + pointer for R_xxx_GNU_VTENTRY. + * elf32-arm.c (elf32_arm_check_relocs): Likewise. + * elf32-bfin.c (bfin_check_relocs): Likewise. + (bfinfdpic_check_relocs): Likewise. + * elf32-cris.c (cris_elf_check_relocs): Likewise. + * elf32-d10v.c (elf32_d10v_check_relocs): Likewise. + * elf32-dlx.c (elf32_dlx_check_relocs): Likewise. + * elf32-fr30.c (fr30_elf_check_relocs): Likewise. + * elf32-frv.c (elf32_frv_check_relocs): Likewise. + * elf32-hppa.c (elf32_hppa_check_relocs): Likewise. + * elf32-iq2000.c (iq2000_elf_check_relocs): Likewise. + * elf32-m32r.c (m32r_elf_check_relocs): Likewise. + * elf32-m68hc1x.c (elf32_m68hc11_check_relocs): Likewise. + * elf32-m68k.c (elf_m68k_check_relocs): Likewise. + * elf32-mcore.c (mcore_elf_check_relocs): Likewise. + * elf32-openrisc.c (openrisc_elf_check_relocs): Likewise. + * elf32-ppc.c (ppc_elf_check_relocs): Likewise. + * elf32-s390.c (elf_s390_check_relocs): Likewise. + * elf32-score.c (_bfd_score_elf_check_relocs): Likewise. + * elf32-sh.c (sh_elf_check_relocs): Likewise. + * elf32-v850.c (v850_elf_check_relocs): Likewise. + * elf32-vax.c (elf_vax_check_relocs): Likewise. + * elf32-xstormy16.c (xstormy16_elf_check_relocs): Likewise. + * elf32-xtensa.c (elf_xtensa_check_relocs): Likewise. + * elf64-mmix.c (mmix_elf_check_relocs): Likewise. + * elf64-ppc.c (ppc64_elf_check_relocs): Likewise. + * elf64-s390.c (elf_s390_check_relocs): Likewise. + * elf64-sh64.c (sh_elf64_check_relocs): Likewise. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. + +2007-09-26 Alan Modra + + * elflink.c (set_symbol_value): Add isymbuf and locsymcount + params. Change symidx to a size_t. Don't access past end + of symbol buffer. + (resolve_symbol): Add isymbuf param and use instead of + finfo->internal_syms. + (eval_symbol, evaluate_complex_relocation_symbols): Likewise. + (elf_link_input_bfd): Don't read symbols specially for + evaluate_complex_relocation_symbols. + +2007-09-26 Tristan Gingold + + * som.c (som_get_reloc_upper_bound): If there are no relocs return + enough space to hold a NULL pointer. + +2007-09-26 Alan Modra + + * elf64-ppc.c (ppc_build_one_stub): Correct rel_hdr.sh_size. + +2007-09-25 Alan Modra + + * elf32-spu.c (struct spu_link_hash_table): Add ovly_load_r_symndx. + (spu_elf_size_stubs): Count stub relocs. + (write_one_stub): Emit relocs on overlay call stubs. + + * elf32-spu.c (struct spu_link_hash_table): Add "stubs". + (spu_elf_link_hash_table_create): Init new field. + (spu_elf_size_stubs): Store sorted stub syms in new htab field + rather than local var. + (spu_elf_build_stubs): Iterate over htab stubs rather than + hash traversal. + (struct stubarr): Delete. + (allocate_spuear_stubs, populate_stubs, write_one_stub): Adjust. + +2007-09-24 Daniel Jacobowitz + + * elf.c (assign_file_positions_for_load_sections): Trust + p_align_valid. + (copy_elf_program_header): Copy PT_NULL segments. + +2007-09-24 Trevor Smigiel + + * elf32-spu.c (is_indirect_branch): New function. + (find_function_stack_adjust): End scan on hitting indirect branch. + (sum_stack): Cast %v arg to correct type. + +2007-09-21 H.J. Lu + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerated. + +2007-09-21 Doug Kwan + + * Makefile.am (BFD32_LIBS): Add arange-set.lo. + (BFD32_LIBS_CFILES): Add arange-set.c. + (SOURCE_HFILES): Add arange-set.h + (dwarf2.lo): Add dependency upon arange-set.h. + (arange-set.lo): New target. + * Makefile.in: Regenerate. + * arange-set.c: New file. + * arange-set.h: New file. + * dwarf2.c: Include arange-set.h. + (struct dwarf2_debug) Add new fields comp_unit_count and + comp_unit_arange_set. + (struct comp_unit) Replace field arange with a new field arange_set. + (dwarf2_arange_set_allocate, dwarf2_arange_set_deallocate, + dwarf2_combine_arange_value, dwarf2_arange_set_new, + dwarf2_arange_set_with_value_new, dwarf2_comp_unit_arange_add): New + functions to utilize arange set in dwarf2.c. + (arange_add): Formatting change for a line longer than 80 characters. + (decode_line_info): Replace call target arange_add with + dwarf2_comp_unit_arange_add. + (read_rangelist_insert_arange_list, + read_rangelist_comp_unit_arange_add): New functions used as callbacks + for read_rangelist. + (read_rangelist): Change interface to accept a callback and data to + allow caller to select the action peformed on a new range list read. + (scan_unit_for_symbols): Use new interface of read_rangelist. + (parse_comp_unit): Create an arange set for each new comp unit. + Use new interface of read_rangelist. Replace call to arange_add + with that to dwarf2_comp_unit_arange_add. + (comp_unit_contains_address): Replace sequential search with a call to + arange_set_lookup_address, which can handles large set efficiently. + (stash_copy_local_aranges, stash_maybe_enable_arange_set, + stash_find_nearest_line_fast): New functions maintaining and using a + valued global arange set for all compilation units to speed up + bfd_dwarf2_find_nearest_line. + (find_line): Use global arange set. Replace sequential search over all + compilation units with a call to stash_find_nearest_line_fast. Add + book keeping to count number of compilation units. Replace empty + arange list test with a call to arange_set_empty_p. + +2007-09-21 Olivier Hainque + Tristan Gingold + + * syms.c (_bfd_stab_section_find_nearest_line): Look at the + specific SOM sections for stabs if the regular ones are not found. + * som.h (struct somdata): Add a line_info field, to be used by + som_find_nearest_line. + * som.c (som_find_nearest_line): Implement using the bfd stabs + function above. + +2007-09-19 Daniel Jacobowitz + + * elfxx-mips.c (_bfd_mips_elf_finish_dynamic_sections): Make sure .got + will be output. + +2007-09-19 Alan Modra + Doug Kwan + + * bfd-in.h (bfd_hash_insert): Declare. + * bfd-in2.h: Regenerate. + * hash.c (bfd_hash_insert): New function. Split out from.. + (bfd_hash_lookup): ..here. + * merge.c (sec_merge_hash_lookup): Use bfd_hash_insert. + +2007-09-18 Alan Modra + + * elf.c (bfd_section_from_shdr): Check bfd_alloc return. + (elfcore_write_note): Check realloc return. + * elflink.c (_bfd_elf_link_find_version_dependencies): Check + bfd_zalloc return. + (_bfd_elf_link_assign_sym_version): Check bfd_malloc return. + (elf_link_add_object_symbols): Likewise. + (struct hash_codes_info): New. + (elf_collect_hash_codes): Return bfd_malloc error. + (struct collect_gnu_hash_codes): Add "error". + (elf_collect_gnu_hash_codes): Return bfd_malloc error. + (bfd_elf_size_dynamic_sections): Check return status of + _bfd_elf_link_find_version_dependencies. + (bfd_elf_size_dynsym_hash_dynstr): Adjust for elf_collect_hash_codes + and elf_collect_gnu_hash_codes changes. + (elf_sym_name_compare): Formatting. + (elf_fixup_link_order): Use bfd_malloc, not xmalloc. + +2007-09-17 H.J. Lu + + PR binutils/3281 + PR binutils/5037 + * elf-bfd.h (elf_obj_tdata): Remove relro. + + * elf.c (get_program_header_size): Check info->relro instead + of elf_tdata (abfd)->relro. + (_bfd_elf_map_sections_to_segments): Likewise. + (assign_file_positions_for_load_sections): Don't set + PT_GNU_RELRO segment alignment here. + (assign_file_positions_for_non_load_sections): Properly set up + PT_GNU_RELRO segment for copying executable/shared library. + (rewrite_elf_program_header): Remove PT_GNU_RELRO segment. + (copy_elf_program_header): Set p_size and p_size_valid fields for + PT_GNU_RELRO segment. + +2007-09-17 Nick Clifton + + * po/fi.po: New Finnish translation. + * po/es.po: Updated Spanish translation. + * configure.in (ALL_LINGUAS): Add fi. + * configure: Regenerate. + * po/bfd.pot: Regenerate. + +2007-09-15 Nick Clifton + + * bfd.c (_bfd_default_error_handler): fflush stdout. + +2007-09-14 Alan Modra + + * opncls.c (find_separate_debug_file): Ensure bfd_set_error has + been called on all error return paths. + (bfd_fill_in_gnu_debuglink_section): Use bfd_malloc, not malloc. + Clear padding after filename + +2007-09-14 Alan Modra + + * format.c (bfd_check_format_matches): Record matching targets even + when "matching" is NULL to allow bfd_associated_vector matches. + Consolidate error return code. Consolidate ok return code. Always + restore original target and format on error. + +2007-09-14 Alan Modra + + * configure.in: Delete BFD_HOST_LONG_LONG and bfd checks for + long long. Partly revert 2007-07-12 change, so that + BFD_HOST_64BIT_LONG and BFD_HOST_64BIT_LONG_LONG are set + independent of "void *" size. + * configure: Regenerate. + * config.in: Regenerate. + * Makefile.in: Regenerate. + +2007-09-12 Alan Modra + + * elf-bfd.h (struct elf_backend_data): Delete elf_backend_sprintf_vma + and elf_backend_fprintf_vma. + (_bfd_elf_sprintf_vma, _bfd_elf_fprintf_vma): Delete. + * elf.c (_bfd_elf_sprintf_vma, _bfd_elf_fprintf_vma): Delete. + * elfxx-target.h (elf_backend_sprintf_vma): Don't define. + (elf_backend_fprintf_vma): Likewise. + (elfNN_bed): Don't init removed fields. + * bfd.c (is32bit): New function. + (bfd_sprintf_vma, bfd_fprintf_vma): Use the above. + +2007-09-11 Nathan Sidwell + + * archures.c: Add bfd_mach_mcf_isa_c_nodiv, + bfd_mach_mcf_isa_c_nodiv_mac & bfd_mach_mcf_isa_c_nodiv_emac. + * ieee.c (ieee_write_processor): Update coldfire architecture + list. + * bfd-in2.h: Rebuilt. + * cpu-m68k.c (arch_info_struct): Add isa_c nodiv architectures. + (m68k_arch_features): Likewise. + * elf32-m68k.c (elf32_m68k_object_p): Add EF_M68K_CF_ISA_C_NODIV. + (elf32_m68k_print_private_bfd_data): Likewise. + +2007-09-11 Jan Beulich + + * elf64-i386.c (elf64_i386_tls_transition): Remove redundant 'const'. + * elf64-x86_64.c (elf64_x86_64_tls_transition): Likewise. + +2007-09-08 Alan Modra + + * elf64-ppc.c (func_desc_adjust): When resolving undefined + references to dot-symbols, transfer def_regular and + def_dynamic from the descriptor symbol. + +2007-09-08 Alan Modra + + * config.bfd: Set want64 for spu-*-elf. + +2007-09-08 Alan Modra + + PR ld/2864, ld/5006 + * elf.c (special_sections): Comment typo. + (elf_fake_sections): Force SHT_PROGBITS for sections that are + SHT_NOBITS if BFD section flags say they have contents. + +2007-09-04 Michael Snyder + + * elf32-bfin.c (howto_table): Cut and paste error? + Name field of reloc is wrong. + +2007-09-04 Alan Modra + + * elf32-spu.c (elf_howto_table): Formatting. + +2007-09-02 H.J. Lu + + PR ld/4986 + * dwarf2.c (new_line_sorts_after): Undo the last change. + (add_line_info): Only keep the last entry with the same address + and end sequence. + +2007-08-31 H.J. Lu + + PR ld/4986 + * dwarf2.c (new_line_sorts_after): Also compare line number. + +2007-08-31 Jesse Michael + + * mach-o.c (bfd_mach_o_make_bfd_section): Fix test for non + zerofill sections. + +2007-08-28 David Heine + + * elf32-xtensa.c (compute_ebb_actions): Update removed_bytes when + narrowing instructions. + +2007-08-28 Mark Shinwell + Joseph Myers + + * elf32-arm.c (elf32_arm_compare_mapping): Compare first on vma, + then on type. + +2007-08-28 Robert Sebastian Gerus + + * config.bfd: Add support for i[3-7]86-*-dragonfly*. + * configure.in: Likewise. + * configure: Regenerate. + +2007-08-25 Ulrich Weigand + Alan Modra + + * elf.c (elfcore_grok_spu_note): New function. + (elf_parse_notes): Call it. + +2007-08-24 H.J. Lu + + * elf64-x86-64.c (elf64_x86_64_relocate_section): Adjust + indentation. + +2007-08-24 Pedro Alves + + * elf.c (elfcore_grok_win32pstatus): Remove HAVE_WIN32_PSTATUS_T + guard. Make it host independent. + (elfcore_grok_note): Remove HAVE_WIN32_PSTATUS_T guard around + NT_WIN32PSTATUS. + +2007-08-24 Jan Kratochvil + + * elf-bfd.h (struct elf_obj_tdata): New BUILD_ID_SIZE, BUILD_ID. + * elf.c (elfcore_read_notes): Split to ... + (elf_read_notes) ... here ... + (elf_parse_notes): ... and here. Check `bfd_get_format (abfd)' with + the former subfunctions called only for BFD_CORE. + Call ELFOBJ_GROK_GNU_NOTE for BFD_OBJECT files with the owner "GNU". + (_bfd_elf_make_section_from_shdr): Call ELF_PARSE_NOTES for SHT_NOTEs. + (bfd_section_from_phdr): Update the call for renamed ELFCORE_READ_NOTES. + (elfobj_grok_gnu_build_id, elfobj_grok_gnu_note): New functions. + Code advisory: Roland McGrath + +2007-08-24 Daniel Jacobowitz + + * elf64-mips.c (elf_backend_sign_extend_vma): Define. + +2007-08-24 Alan Modra + + * elfxx-ia64.c (elfNN_ia64_add_symbol_hook): Warning fix. + +2007-08-23 H.J. Lu + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerated. + +2007-08-23 H.J. Lu + + * elf32-i386.c: Include "bfd_stdint.h". + (elf_i386_rtype_to_howto): New function. + (elf_i386_info_to_howto_rel): Use it. + (x86_64_opcode16): New union type. + (elf_i386_check_tls_transition): New function. + (elf_i386_tls_transition): Updated to check transition and + issue an error if a transition isn't supported. + (elf_i386_check_relocs): Return FALSE if + elf_i386_tls_transition returns FALSE. + (elf_i386_gc_sweep_hook): Likewise. + (elf_i386_relocate_section): Likewise. Remove BFD_ASSERT + on TLS transitions. + + * elf64-x86-64.c: Include "bfd_stdint.h". + (x86_64_opcode16): New union type. + (x86_64_opcode32): Likewise. + (elf64_x86_64_check_tls_transition): New function. + (elf64_x86_64_tls_transition): Updated to check transition and + issue an error if a transition isn't supported. + (elf64_x86_64_check_relocs): Return FALSE if + elf64_x86_64_tls_transition returns FALSE. + (elf64_x86_64_gc_sweep_hook): Likewise. + (elf64_x86_64_relocate_section): Likewise. Remove BFD_ASSERT + on TLS transitions. + +2007-08-22 H.J. Lu + + * elfxx-ia64.c: Convert to ISO C90 prototypes. + (elfNN_hpux_backend_section_from_bfd_section): Make it static. + +2007-08-22 H.J. Lu + + * elf64-x86-64.c: Remove trailing whitespace. + * elfxx-ia64.c: Likewise. + +2007-08-21 H.J. Lu + + * elf32-i386.c (elf_i386_tls_transition): Accept a pointer + to ELF hash entry instead of an integer for local test. + (elf_i386_check_relocs): Updated. + (elf_i386_gc_sweep_hook): Likewise. + (elf_i386_relocate_section): Likewise. + + * elf64-x86-64.c (elf64_x86_64_tls_transition): Accept a + pointer to ELF hash entry instead of an integer for local + test. + (elf64_x86_64_check_relocs): Updated. + (elf64_x86_64_gc_sweep_hook): Likewise. + (elf64_x86_64_relocate_section): Likewise. + +2007-08-20 H.J. Lu + + * elf32-i386.c (elf_i386_tls_transition): Break long line. + * elf64-x86-64.c (elf64_x86_64_tls_transition): Likewise. + +2007-08-20 Jan Kratochvil + + * elfxx-target.h [ELF_COMMONPAGESIZE && ELF_MAXPAGESIZE] + (ELF_MINPAGESIZE): Fixed its size guess. Sanity checked its size. + (ELF_COMMONPAGESIZE, ELF_MAXPAGESIZE): Sanity checked their size. + +2007-08-20 Nick Clifton + + * elflink.c (elf_fixup_link_order): Rewrite conversion of + s->alignment_power into an offset mask in order to avoid a gcc + error message. + +2007-08-17 Jakub Jelinek + + * config.bfd: Handle sparcv*-*-linux-* the same as sparc-*-linux-*. + Change sparc64-*-linux-* to sparc64*-*-linux-*. + +2007-08-17 Alan Modra + + * po/Make-in: Add --msgid-bugs-address to xgettext invocation. + +2007-08-16 H.J. Lu + + * elf.c: Revert last change. + +2007-08-16 H.J. Lu + + * elf.c (get_segment_type): Change PT_GNU_STACK to PT_GNU_ATTR. + (bfd_section_from_phdr): Likewise. + (get_program_header_size): Likewise. Add a PT_GNU_ATTR segment + if there is an attribute section. + (_bfd_elf_map_sections_to_segments): Likewise. + (IS_SECTION_IN_INPUT_SEGMENT): Likewise. + +2007-08-14 H.J. Lu + + PR ld/4918 + * elf32-i386.c (elf_i386_relocate_section): Allow R_386_PC32 + on ___tls_get_addr for GD->LE/LD->LE transitions when not + building shared library. + + * elf64-x86-64.c (elf64_x86_64_relocate_section): Allow + R_X86_64_PC32 on __tls_get_addr for GD->LE/LD->LE transitions + when not building shared library. + +2007-08-14 Jan Kratochvil + + * elfcode.h (NAME(_bfd_elf,bfd_from_remote_memory)): LOADBASE is now + initialized only on the first PT_LOAD. New variable LOADBASE_SET. + Removed PF_R checking for IA-64 vDSOs as redundant now. + Code advisory: Roland McGrath + +2007-08-13 Richard Sandiford + + * elfxx-mips.c (mips_elf_link_hash_table): Add computed_got_sizes. + (mips_elf_record_global_got_symbol): Increment local_gotno for + each forced-local symbol. + (_bfd_mips_elf_check_relocs): Pass forced-local call symbols to + mips_elf_record_global_got_symbol for VxWorks too. + (_bfd_mips_elf_always_size_sections): Set computed_got_sizes + to true after computing the GOT size. + (_bfd_mips_elf_hide_symbol): Increase local_gotno whenever + got.offset == 1. Only adjust global_gotno if computed_got_sizes. + For VxWorks, add a local entry when hiding a symbol that needs a + plt but has not been marked as needing a global got entry. + (_bfd_mips_elf_link_hash_table_create): Set computed_got_sizes to + false. + +2007-08-12 Daniel Jacobowitz + + * coffgen.c (coff_get_normalized_symtab): Correct cast. + +2007-08-13 Alan Modra + + * elf.c (elf_modify_segment_map): Add remove_empty_load param. + Don't remove empty PT_LOAD header if false. + (_bfd_elf_map_sections_to_segments): If user phdrs, pass false + to elf_modify_segment_map. + (assign_file_positions_for_load_sections): Pass false to + elf_modify_segment_map. + +2007-08-13 Alan Modra + + * elf64-ppc.c (ADDI_R12_R12, LD_R11_0R2, LD_R2_0R2): Define. + Update stub comments. + (build_plt_stub): Build two variants, one without "addis". + (ppc_build_one_stub): Build stubs without "addis" if possible. + (ppc_size_one_stub): Size new stubs. + +2007-08-11 Richard Sandiford + + * config.bfd (sh-*-vxworks): Define targ_underscore to "yes". + +2007-08-09 Michael Snyder + + * aoutx.h (aout_get_external_symbols): Return if count is zero. + +2007-08-09 H.J. Lu + + PR ld/4909 + * elf.c (print_segment_map): New function. + (assign_file_positions_for_load_sections): Call print_segment_map + when a section can't be allocated in segment. + +2007-08-09 Jan Kratochvil + + * opncls.c (bfd_openr_iovec): Fix the OPEN parameter macro expansion. + +2007-08-07 Nick Clifton + + * po/bfd.pot: Updated template. + * po/BLD-POTFILES.in: Regenerate. + +2007-08-07 Alan Modra + + * elf.c: (_bfd_elf_make_section_from_phdr): Properly handle + bss segments. + +2007-08-06 Daniel Jacobowitz + + * Makefile.am (BUILD_HFILES): Clean bfd_stdint.h. + * Makefile.in: Regenerated. + +2007-08-06 Daniel Jacobowitz + + * configure.in: Update version to 2.18.50. + * configure: Regenerated. + +2007-08-06 Paul Brook + + * elf32-arm.c (elf32_arm_link_hash_entry): Add + plt_maybe_thumb_refcount. + (elf32_arm_link_hash_newfunc): Set plt_maybe_thumb_refcount. + (elf32_arm_copy_indirect_symbol): Ditto. + (elf32_arm_adjust_dynamic_symbol): Ditto. + (bfd_elf32_arm_process_before_allocation): Handle R_ARM_THM_JUMP24. + (arm_add_to_rel): Ditto. + (elf32_arm_final_link_relocate): Merge R_ARM_THM_JUMP24 with + R_ARM_THM_CALL. Handle R_ARM_THM_JUMP19 against a PLT stub. + (elf32_arm_gc_sweep_hook): Call check_use_blx. Update plt counts + for R_ARM_THM_JUMP24 and R_ARM_THM_JUMP19. + (elf32_arm_check_relocs): Update plt counts for R_ARM_THM_JUMP24 + and R_ARM_THM_JUMP19. + (allocate_dynrelocs): Use plt_maybe_thumb_refcount. + (elf32_arm_finish_dynamic_symbol): Ditto. + (elf32_arm_output_plt_map): Ditto. + +2007-08-06 Daniel Jacobowitz + + * elf.c (rewrite_elf_program_header): Handle sections not sorted + by address. + (copy_elf_program_header): Likewise. + +2007-08-04 H.J. Lu + + * elf-bfd.h (xvec_get_elf_backend_data): Add const. + + * elfcode.h (elf_object_p): Use xvec_get_elf_backend_data. + * elfcore.h (elf_core_file_p): Likewise. + +2007-08-02 H.J. Lu + + * coffcode.h (ALIGN_SET): Removed. + (ELIFALIGN_SET): Likewise. + (coff_set_alignment_hook): Handle IMAGE_SCN_ALIGN_128BYTES, + IMAGE_SCN_ALIGN_256BYTES, IMAGE_SCN_ALIGN_512BYTES, + IMAGE_SCN_ALIGN_1024BYTES, IMAGE_SCN_ALIGN_2048BYTES, + IMAGE_SCN_ALIGN_4096BYTES and IMAGE_SCN_ALIGN_8192BYTES. + +2007-08-01 Michael Snyder + + * vms-tir.c (new_section): Fix cut and paste error. + + * aoutx.h (aout_link_add_symbols): Return if count is zero. + + * elf.c (bfd_elf_print_symbol): Macro dereferences pointer, so + pointer must be non-null. + +2007-08-01 Tristan Gingold + + * coffcode.h (coff_sort_func_alent): New function. + (coff_slurp_line_table): Sort line table if not already sorted. + +2007-08-01 Jakub Jelinek + + * elf.c (_bfd_elf_map_sections_to_segments): Work around buggy + GCC 3.4.x warning. + +2007-08-01 Alan Modra + + * aoutx.h (swap_ext_reloc_in): Set howto to NULL for unknown + r_type. + (swap_std_reloc_in): Likewise. + (aout_link_input_section_std): Likewise. Return with an error + on unexpected relocation type. + (aout_link_input_section_ext): Likewise. + +2007-08-01 Alan Modra + + PR4694 + * aoutx.h (final_link): Write a zero in first word of + stringtab if no symbols rather than corrupting last byte + of text/data. + +2007-07-31 Jakub Jelinek + + * elf.c (get_program_header_size): Adjacent loadable .note* + sections need just one PT_NOTE segment. + (_bfd_elf_map_sections_to_segments): Likewise. + +2007-07-30 Michael Snyder + + * coffgen.c (_bfd_coff_read_internal_relocs): Revert change of + 2007-07-26. Buffer still in use, can't be freed. + +2007-07-27 Michael Snyder + + * cofflink.c (coff_link_add_symbols): Return if count is zero. + + * coff-i386.c (coff_i386_rtype_to_howto): Off by one error. + + * aoutx.h (slurp_symbol_table): Return if count == 0. + + * coffgen.c (_bfd_coff_read_internal_relocs): Return if count is zero. + + * elf32-i386.c (elf_i386_check_relocs): Check for null pointer. + +2007-07-27 H.J. Lu + + * config.bfd (x86_64-*-mingw*): Don't include x86_64coff_vec. + +2007-07-26 Michael Snyder + + * coff-i386.c (coff_i386_rtype_to_howto): Guard against null. + + * linker.c (bfd_section_already_linked_table_insert): Change + return type from void to boolean. Return FALSE on failure. + (_bfd_generic_section_already_linked): Test return value of + bfd_section_already_linked_table_insert, call fatal on error. + + * elflink.c (_bfd_elf_section_already_linked): Test return value + of bfd_section_already_linked_table_insert, call fatal on error. + + * libbfd-in.h (bfd_section_already_linked_table_insert): Update + return type to bfd_boolean. + + * libbfd.h: Regenerate. + +2007-07-26 Adam Nemet + + * archive.c (do_slurp_bsd_armap, do_slurp_coff_armap, + bfd_slurp_armap): Improve function comment. + +2007-07-26 Michael Snyder + + * linker.c (already_linked_newfunc): Check for NULL return from + bfd_hash_allocate. + + * coffgen.c (fixup_symbol_value): Guard against null; + bfd_is_com_section will dereference the section pointer. + + * syms.c (bfd_decode_symclass): Guard against NULL, since + bfd_is_com_section dereferences the pointer. + + * srec.c (srec_scan): Check for EOF (critical because return value + will be used as array index). + + * coffgen.c (_bfd_coff_read_internal_relocs): If internal_relocs + are not to be cached, free the temporary buffer. + + * aoutx.h (slurp_reloc_table): Return TRUE if reloc_size == zero + or count == zero. + + * tekhex.c (first_phase): Check return value for null. + + * elf.c (_bfd_elf_get_synthetic_symtab): Remove meaningless + pointer increment. + +2007-07-26 Alan Modra + + * elflink.c (_bfd_elf_fix_symbol_flags): Remove unnecessary + check on dynobj. Remove bed shadow. + + * srec.c (srec_get_section_contents): Return immediately on + count zero. Check that offset and count are within section. + * libbfd.c (_bfd_generic_get_section_contents): Check that + offset + count does not overflow. + + * srec.c (srec_canonicalize_symtab): Don't alloc when symcount + is zero. Correct return value on error. + * mmo.c (mmo_canonicalize_symtab): Likewise. + * binary.c (binary_canonicalize_symtab) Correct return on error. + +2007-07-26 Thiemo Seufer + + * bfd.c (_bfd_set_gp_value): Use abort instead of BFD_FAIL. + +2007-07-26 Alan Modra + + * reloc.c (bfd_generic_get_relocated_section_contents): Avoid + bfd_canonicalize_reloc call when bfd_get_reloc_upper_bound + says there are no relocs. + +2007-07-26 Doug Kwan + + Speed up bfd_dwarf2_find_line. + * dwarf2.c (struct dwarf2_debug): Add new fields to support function + and variable info hash tables. Add last_comp_unit, info_hash_count, + funcinfo_hash_table, varinfo_hash_table, hash_units_head. + (struct comp_unit): Add prev_unit, cached. + (struct info_list_node, struct info_hash_entry, + struct info_hash_table): New. + (info_hash_table_newfunc, create_info_hash_table, + insert_info_hash_table, lookup_info_hash_table): New functions + implementing function and variable info hash tables. + (scan_unit_for_symbols): Add checks to make sure hash tables are + consistent with compilation units. + (comp_unit_maybe_decode_line_info): New function. + (comp_unit_find_line): Use comp_unit_maybe_decode_line_info. + (reverse_funcinfo_list, reverse_varinfo_list, comp_unit_hash_info, + info_hash_lookup_funcinfo, info_hash_lookup_varinfo, + stash_maybe_update_info_hash_table, stash_verify_info_hash_table, + stash_maybe_enable_info_hash_tables, stash_find_line_fast): New + functions. Make use of info hash tables to speed up + bfd_dwarf2_find_line. + (find_line): Use hash table for faster lookup if it is turned on. + Also add code to maintain bi-directional link in comp units. + +2007-07-25 Michael Snyder + + * coffgen.c (_bfd_coff_get_external_symbols): Nothing to be done + if size == 0; return and avoid possible null pointer issues. + +2007-07-25 Alan Modra + + * linker.c (generic_link_add_symbol_list): Warning fix. + +2007-07-24 Michael Snyder + + * opncls.c (bfd_make_writable): Check return from bfd_malloc. + + * elflink.c (bfd_elf_final_link): Avoid redundant frees -- return + on bfd_malloc error rather than goto error_return. + +2007-07-24 Alan Modra + + * elflink.c (_bfd_elf_link_just_syms, merge_sections_remove_hook, + _bfd_elf_merge_sections, _bfd_elf_link_hash_newfunc, + _bfd_elf_link_hash_copy_indirect, _bfd_elf_link_hash_hide_symbol, + _bfd_elf_link_hash_table_init, _bfd_elf_link_hash_table_create, + bfd_elf_set_dt_needed_name, bfd_elf_get_dyn_lib_class, + bfd_elf_set_dyn_lib_class, bfd_elf_get_needed_list, + bfd_elf_get_runpath_list, bfd_elf_get_dt_soname, + bfd_elf_get_bfd_needed_list, struct elf_symbuf_symbol, + struct elf_symbuf_head, struct elf_symbol, elf_sort_elf_symbol, + elf_sym_name_compare, elf_create_symbuf, + bfd_elf_match_symbols_in_sections, + _bfd_elf_match_sections_by_type): Move to here.. + * elf.c: ..from here. + +2007-07-23 Richard Sandiford + + * elflink.c (_bfd_elf_fix_symbol_flags): Only assert the type + of weakdef->root.type if weakdef has no regular definition. + +2007-07-22 Adam Nemet + + * elfxx-mips.c (struct mips_elf_link_hash_table): Add new field + small_data_overflow_reported. + (_bfd_mips_elf_link_hash_table_create): Initialize it. + (_bfd_mips_elf_relocate_section) : Report + small-data section overflow. + +2007-07-19 Doug Kwan + + PR binutils/4797 + * dwarf2.c: (find_line) Do not dereference functionname_ptr if + do_line is true. + +2007-07-18 Bob Wilson + + * elf32-xtensa.c (xtensa_callback_required_dependence): Ignore + non-ELF sections. + +2007-07-18 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_finish_dynamic_sections): Get section + vma and size for dynamic tags from the output sections. + +2007-07-18 Alan Modra + + * elf-bfd.h (struct sym_sec_cache): Delete "sec". Add "shndx". + * elf.c (bfd_section_from_r_symndx): Don't cache bfd section of + symbol. Instead cache ELF section index. Remove redundant + checks of st_shndx. + +2007-07-15 Mike Frysinger + + * trad-core.c (NBPG): If not defined, set to getpagesize(). + +2007-07-13 Roland McGrath + + * elf-bfd.h (struct elf_obj_tdata): Revert last change. + Add after_write_object_contents, after_write_object_contents_info. + * elf.c (_bfd_elf_write_object_contents): Revert last change. + Instead, call after_write_object_contents if set. + +2007-07-12 Kai Tietz + + * bfd-in.h: (BFD_HOST_64BIT_LONG_LONG): New. + (BFD_HOSTPTR_T): Host pointer type for casting a + pointer to an integer type. + (bfd_hostptr_t): The typedef of BFD_HOSTPTR_T. + (sprintf_vma, fprintf_vma): Add support for long long prints. + * bfd-in2.h: Regenerate. + * configure.in: (BFD_HOST_64BIT_LONG_LONG): New. + (BFD_HOSTPTR_T): Host pointer type for casting a + pointer to an integer type. Default is "unsigned long". + (AC_CHECK_SIZEOF(void *)): New. + (host64): Set it if the pointer size is 8. + * configure: Regenerate. + * config.in: Add macro SIZEOF_VOID_P. + * coffcode.h: Replace host ptr type assuming "long" with + bfd_hostptr_t type. + * coffgen.c: Likewise. + * elf-eh-frame.c: Likewise. + * peicode.h: Likewise. + +2007-07-10 H.J. Lu + + * Makefile.in: Regenerated. + +2007-07-10 H.J. Lu + + PR binutils/4756 + * simple.c (bfd_simple_get_relocated_section_content): Don't + apply relocation on executable and shared library. + +2007-07-10 Nathan Sidwell + + * elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Don't eliminate + copy relocs on vxworks. + +2007-07-10 Alan Modra + + * elf32-arm.c (elf32_arm_size_info): Init checksum_contents field. + * elf64-alpha.c (alpha_elf_size_info): Likewise. + * elf64-hppa.c (hppa64_elf_size_info): Likewise. + * elf64-mips.c (mips_elf64_size_info): Likewise. + * elf64-s390.c (s390_elf64_size_info): Likewise. + * elf64-sparc.c (elf64_sparc_size_info): Likewise. + +2007-07-09 H.J. Lu + + * elflink.c (bfd_elf_record_link_assignment): Handle indirect + symbol. + (_bfd_elf_merge_symbol): Properly update normal symbol when + overriding the versioned symbol from a dynamic library. + +2007-07-09 Roland McGrath + + * elf-bfd.h (struct elf_obj_tdata): Add members + emit_note_gnu_build_id and note_gnu_build_id_sec. + * elf.c (_bfd_id_note_section_size): New global function. + (read_hex, _bfd_elf_write_build_id_section): New static functions. + (_bfd_elf_write_object_contents): Call _bfd_elf_write_build_id_section + if emit_note_gnu_build_id is set. + * Makefile.am (elf.lo): Update dependencies. + + * elf-bfd.h (struct elf_size_info): Add checksum_contents hook. + (bfd_elf32_checksum_contents, bfd_elf64_checksum_contents): Declare. + * elfcode.h (elf_checksum_contents): New macro and function. + (NAME(_bfd_elf,size_info)): Initialize checksum_contents hook. + +2007-07-06 Michael Snyder + + * elflink.c (elf_link_add_object_symbols): Return via + error_free_vers on "notice" failure. + +2007-07-04 H.J. Lu + + * peicode.h (pe_bfd_object_p): Don't check PE vs. EFI target + if arch is unknown. + +2007-07-04 Nick Clifton + + Import this patch from an internal tree: + + 2001-07-17 Richard Henderson + + * elf32-mep.c (mep_final_link_relocate) [R_MEP_HI16S]: Correctly + compensate for high bit set in R_MEP_LOW16. + +2007-07-03 Joseph Myers + + * elf32-arm.c (elf32_arm_merge_eabi_attributes): Copy type from + input attributes if value has been copied. + +2007-07-03 Nick Clifton + + * COPYING: Replace with GPLv3 text. + * aix386-core.c: Update copyright notice to refer to GPLv3. + * aix5ppc-core.c, aout0.c, aout32.c, aout64.c, aout-adobe.c, + aout-arm.c, aout-cris.c, aoutf1.h, aout-ns32k.c, aout-sparcle.c, + aout-target.h, aout-tic30.c, aoutx.h, archive64.c, archive.c, + archures.c, armnetbsd.c, bfd.c, bfd-in.h, bfdio.c, bfdwin.c, + binary.c, bout.c, cache.c, cf-i386lynx.c, cf-sparclynx.c, + cisco-core.c, coff64-rs6000.c, coff-alpha.c, coff-apollo.c, + coff-arm.c, coff-aux.c, coffcode.h, coffgen.c, coff-go32.c, + coff-h8300.c, coff-h8500.c, coff-i386.c, coff-i860.c, coff-i960.c, + coff-ia64.c, cofflink.c, coff-m68k.c, coff-m88k.c, coff-maxq.c, + coff-mcore.c, coff-mips.c, coff-or32.c, coff-pmac.c, coff-ppc.c, + coff-rs6000.c, coff-sh.c, coff-sparc.c, coff-stgo32.c, + coff-svm68k.c, coffswap.h, coff-tic30.c, coff-tic4x.c, + coff-tic54x.c, coff-tic80.c, coff-u68k.c, coff-w65.c, + coff-we32k.c, coff-x86_64.c, coff-z80.c, coff-z8k.c, corefile.c, + cpu-alpha.c, cpu-arc.c, cpu-arm.c, cpu-avr.c, cpu-bfin.c, + cpu-cr16.c, cpu-cr16c.c, cpu-cris.c, cpu-crx.c, cpu-d10v.c, + cpu-d30v.c, cpu-dlx.c, cpu-fr30.c, cpu-frv.c, cpu-h8300.c, + cpu-h8500.c, cpu-hppa.c, cpu-i370.c, cpu-i386.c, cpu-i860.c, + cpu-i960.c, cpu-ia64.c, cpu-ia64-opc.c, cpu-ip2k.c, cpu-iq2000.c, + cpu-m10200.c, cpu-m10300.c, cpu-m32c.c, cpu-m32r.c, cpu-m68hc11.c, + cpu-m68hc12.c, cpu-m68k.c, cpu-m88k.c, cpu-maxq.c, cpu-mcore.c, + cpu-mep.c, cpu-mips.c, cpu-mmix.c, cpu-msp430.c, cpu-mt.c, + cpu-ns32k.c, cpu-openrisc.c, cpu-or32.c, cpu-pdp11.c, 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, + cpu-tic80.c, cpu-v850.c, cpu-vax.c, cpu-w65.c, cpu-we32k.c, + cpu-xc16x.c, cpu-xstormy16.c, cpu-xtensa.c, cpu-z80.c, cpu-z8k.c, + demo64.c, doc/chew.c, dwarf1.c, dwarf2.c, ecoff.c, 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-avr.h, elf32-bfin.c, elf32.c, elf32-cr16.c, elf32-cr16c.c, + elf32-cris.c, elf32-crx.c, elf32-d10v.c, elf32-d30v.c, + elf32-dlx.c, elf32-fr30.c, elf32-frv.c, elf32-gen.c, + elf32-h8300.c, elf32-hppa.c, elf32-hppa.h, elf32-i370.c, + elf32-i386.c, elf32-i860.c, elf32-i960.c, elf32-ip2k.c, + elf32-iq2000.c, elf32-m32c.c, elf32-m32r.c, elf32-m68hc11.c, + elf32-m68hc12.c, elf32-m68hc1x.c, elf32-m68hc1x.h, elf32-m68k.c, + elf32-m88k.c, elf32-mcore.c, elf32-mep.c, elf32-mips.c, + elf32-msp430.c, elf32-mt.c, elf32-openrisc.c, elf32-or32.c, + elf32-pj.c, elf32-ppc.c, elf32-ppc.h, elf32-s390.c, elf32-score.c, + elf32-sh64.c, elf32-sh64-com.c, elf32-sh64.h, elf32-sh.c, + elf32-sh-symbian.c, elf32-sparc.c, elf32-spu.c, elf32-spu.h, + elf32-v850.c, elf32-vax.c, elf32-xc16x.c, elf32-xstormy16.c, + elf32-xtensa.c, elf64-alpha.c, elf64.c, elf64-gen.c, elf64-hppa.c, + elf64-hppa.h, elf64-mips.c, elf64-mmix.c, elf64-ppc.c, + elf64-ppc.h, elf64-s390.c, elf64-sh64.c, elf64-sparc.c, + elf64-x86-64.c, elf-attrs.c, elf-bfd.h, elf.c, elfcode.h, + elfcore.h, elf-eh-frame.c, elf-hppa.h, elflink.c, elf-m10200.c, + elf-m10300.c, elfn32-mips.c, elf-strtab.c, elf-vxworks.c, + elf-vxworks.h, elfxx-ia64.c, elfxx-mips.c, elfxx-mips.h, + elfxx-sparc.c, elfxx-sparc.h, elfxx-target.h, epoc-pe-arm.c, + epoc-pei-arm.c, format.c, freebsd.h, gen-aout.c, genlink.h, + hash.c, host-aout.c, hosts/alphavms.h, hp300bsd.c, hp300hpux.c, + hppabsd-core.c, hpux-core.c, i386aout.c, i386bsd.c, i386dynix.c, + i386freebsd.c, i386linux.c, i386lynx.c, i386mach3.c, i386msdos.c, + i386netbsd.c, i386os9k.c, ieee.c, ihex.c, init.c, irix-core.c, + libaout.h, libbfd.c, libbfd-in.h, libcoff-in.h, libecoff.h, + libhppa.h, libieee.h, libnlm.h, liboasys.h, libpei.h, libxcoff.h, + linker.c, lynx-core.c, m68k4knetbsd.c, m68klinux.c, m68knetbsd.c, + m88kmach3.c, m88kopenbsd.c, mach-o.c, mach-o.h, mach-o-target.c, + mep-relocs.pl, merge.c, mipsbsd.c, mmo.c, netbsd-core.c, netbsd.h, + newsos3.c, nlm32-alpha.c, nlm32.c, nlm32-i386.c, nlm32-ppc.c, + nlm32-sparc.c, nlm64.c, nlm.c, nlmcode.h, nlmswap.h, nlm-target.h, + ns32k.h, ns32knetbsd.c, oasys.c, opncls.c, 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, peXXigen.c, ppcboot.c, ptrace-core.c, reloc16.c, + reloc.c, riscix.c, rs6000-core.c, sco5-core.c, section.c, + simple.c, som.c, som.h, sparclinux.c, sparclynx.c, sparcnetbsd.c, + srec.c, stabs.c, stab-syms.c, stamp-h.in, sunos.c, syms.c, + sysdep.h, targets.c, targmatch.sed, tekhex.c, ticoff.h, + trad-core.c, vax1knetbsd.c, vaxbsd.c, vaxnetbsd.c, versados.c, + vms.c, vms-gsd.c, vms.h, vms-hdr.c, vms-misc.c, vms-tir.c, + xcofflink.c, xcoff-target.h, xsym.c, xsym.h, xtensa-isa.c, + xtensa-modules.c: Likewise. + * elf32-sh-relocs.h: Add copyright notice. + * hosts/alphalinux.h, hosts/decstation.h, hosts/delta68.h, + hosts/dpx2.h, hosts/hp300bsd.h, hosts/i386bsd.h, + hosts/i386linux.h, hosts/i386mach3.h, hosts/i386sco.h, + hosts/i860mach3.h, hosts/m68kaux.h, hosts/m68klinux.h, + hosts/m88kmach3.h, hosts/mipsbsd.h, hosts/mipsmach3.h, + hosts/news.h, hosts/news-mips.h, hosts/pc532mach.h, + hosts/riscos.h, hosts/symmetry.h, hosts/tahoe.h, hosts/vaxbsd.h, + hosts/vaxlinux.h, hosts/vaxult2.h, hosts/vaxult.h: Likewise. + * bfd-in2.h, libbfd.h, libcoff.h: Regenerate. + +2007-07-02 Joseph Myers + + * 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. + +2007-07-02 Alan Modra + + * 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 + + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Tidy + symsec != NULL tests. + +2007-07-02 Alan Modra + + PR 4712 + * elf.c (assign_file_positions_for_load_sections): Adjust lma + by p_vaddr_offset. + +2007-06-30 H.J. Lu + + * aclocal.m4: Regenerated. + * Makefile.in: Likewise. + +2007-06-29 Joseph Myers + + * elf32-ppc.c (ppc_elf_merge_obj_attributes): New. + (ppc_elf_merge_private_bfd_data): Call it. + +2007-06-29 Joseph Myers + + * elfxx-mips.c (mips_elf_merge_obj_attributes): New. + (_bfd_mips_elf_merge_private_bfd_data): Call it. + +2007-06-29 Joseph Myers + + * 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 + + * 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 + + * bfd.c (bfd_demangle): Plug memory leak (Coverity). + +2007-06-29 M R Swami Reddy + + * 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 + + * 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 + + * elf32-ppc.c (ppc_elf_info_to_howto): Check for invalid relocation + types. + +2007-06-29 Alan Modra + + * elf32-spu.c (spu_elf_fake_sections): New function. + (elf_backend_fake_sections): Define. + +2007-06-29 Alan Modra + + * 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 + + 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. + +2007-06-27 Alan Modra + + * 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. + + * 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 + + * 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 + + * elf32-arm.c (copy_eabi_attributes): Copy type of attributes. + +2007-06-25 Richard Sandiford + + * elfxx-mips.c (mips_elf_calculate_relocation): Allow local stubs + to be used for calls from MIPS16 code. + +2007-06-23 Andreas Schwab + + * 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 + + * 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 + + 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 + + * 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 + + * Makefile.am (ACLOCAL_AMFLAGS): Add -I . -I ../config. + + * acinclude.m4: Don't include m4 files. Remove libtool + kludge. + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + +2007-06-11 Sterling Augustine + Bob Wilson + + * 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. + +2007-05-31 Richard Sandiford + + * 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. + +2007-06-01 Alan Modra + + * simple.c (bfd_simple_get_relocated_section_contents): Init + input_bfds_tail. + +2007-05-30 Alan Modra + + * 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. + + * 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. + +2007-05-25 Eric Christopher + + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): + Check that sym_sec isn't NULL before accessing. + +2007-05-24 Steve Ellcey + + * Makefile.in: Regnerate. + * configure: Regenerate. + * aclocal.m4: Regenerate. + * doc/Makefile.in: Regenerate. + +2007-05-22 Paul Brook + + * 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. + +2007-05-18 Paul Brook + + * 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. + +2007-05-16 H.J. Lu + Alan Modra + + * elflink.c (_bfd_elf_adjust_dynamic_copy): Align dynamic bss + section to the minimum alignment. + +2007-05-15 H.J. Lu + Alan Modra + + 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 + + * 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 + + * elf32-arm.c (elf32_arm_final_link_relocate): Correctly + handle the Thumb-2 JUMP19 relocation. + +2007-05-15 Alan Modra + + 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 + + * elf.c (bfd_elf_string_from_elf_section): Return NULL on + invalid shstrndx. + (bfd_elf_get_str_section): Likewise. + +2007-05-12 Alan Modra + + 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 + + * elf32-spu.c (elf_howto_table): Add howto for R_SPU_ADDR16X. + +2007-05-11 Alan Modra + + * 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 + + * 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. + +2007-05-10 Richard Sandiford + + * 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. + +2007-05-11 Alan Modra + + 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. + +2007-05-10 Richard Sandiford + + * 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. + +2007-05-10 Jakub Jelinek + + * 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 + + * 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 + + * 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 + + * elf32-frv.c (elf32_frv_relocate_section): Discard dynamic relocs + for which _bfd_elf_section_offset returns -1. + +2007-05-08 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Use "void *" for psyms. + (mark_functions_via_relocs): Likewise. + +2007-05-07 Alan Modra + + * 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 + + * 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 + + * elf.c (assign_file_positions_for_load_sections): Don't check + core segment. + +2007-05-04 H.J. Lu + + * elflink.c (elf_link_sort_relocs): Return if both .rela.dyn + and .rel.dyn aren't present. + +2007-05-04 Nick Clifton + + * 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 + + * elf32-arm.c (allocate_dynrelocs): Fix typo in comment. + +2007-05-03 Vincent Riviere + Nick Clifton + + 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 + + * 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. + +2007-04-30 Alan Modra + + * 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. + +2007-04-28 Sergey Rogozhkin + + * elfxx-mips.c (mips_elf_create_dynamic_relocation): Don't access + memory which we might not own. + +2007-04-27 Bob Wilson + + * 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. + +2007-04-27 Bob Wilson + + * elf32-xtensa.c (xtensa_read_table_entries): Step through table + contents and relocs in parallel. + +2007-04-27 Bob Wilson + + * elf32-xtensa.c (relax_property_section): Remove extra irel increment. + +2007-04-27 Alan Modra + + * cpu-rs6000.c: Write Mimi's name in ASCII. + * coff-rs6000.c: Likewise. + * rs6000-core.c: Likewise. + +2007-04-27 Alan Modra + + * sysdep.h: Include config.h first. + Many files: Include sysdep.h before bfd.h. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2007-04-25 Alan Modra + + * sysdep.h: Revert last change. + +2007-04-24 Nick Clifton + + * coffcode.h (coff_slurp_reloc_table): Initialise dst.r_offset. + * coff-m68k.c (m68kcoff_rtype_to_howto): Initialize relent.howto. + +2007-04-24 Alan Modra + + * 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 + + * acinclude.m4: Include config/stdint.m4. + * configure.in: Invoke GCC_HEADER_STDINT. + * sysdep.h: Don't include ansidecl.h here. + * configure: Regenerate. + * config.in: Regenerate. + * Makefile.in: Regenerate. + +2007-04-23 Nathan Sidwell + + * 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. + +2007-04-21 Nick Clifton + + * 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. + +2007-04-21 Alan Modra + + * config.bfd (spu-*-elf): Delete targ_selvecs. + +2007-04-19 Nick Clifton + + * coffcode.h (coff_rtype_to_howto): Initialise genrel.howto. + +2007-04-19 Alan Modra + + * bfd.c (bfd_demangle): New function. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * bfd-in2.h: Regenerate. + +2007-04-18 Matthias Klose + + * Makefile.am (libbfd_la_LDFLAGS): Use bfd soversion. + (bfdver.h): Use the date in non-release builds for the soversion. + * Makefile.in: Regenerate. + +2007-04-17 Paul Brook + + * 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. + +2007-04-17 Daniel Jacobowitz + + * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Put + DT_MIPS_RLD_MAP before DT_DEBUG again. + +2007-04-14 Steve Ellcey + + * Makefile.am: Add ACLOCAL_AMFLAGS. + * configure.in: Change macro call order. + * Makefile.in: Regnerate. + * doc/Makefile.in: Regenerate. + * configure: Regenerate. + +2007-04-14 Jakub Jelinek + + * 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. + +2007-04-12 Richard Sandiford + + * elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Don't add + DT_MIPS_RTLD_MAP for PIEs. + +2007-04-12 Richard Sandiford + + * 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 + + * 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 + + * elf32-xtensa.c (elf_xtensa_gc_mark_hook): Don't follow references + from Xtensa property sections. + +2007-04-12 Alan Modra + + * elf32-spu.c (needs_ovl_stub): Test that spu_elf_section_data + is non-NULL before dereferencing. + +2007-04-11 Nathan Sidwell + + * elf-vxworks.c (elf_vxworks_emit_relocs): Remap weakdef PLT slot + relocs too. + +2007-04-10 Richard Henderson + + * 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. + +2007-04-09 Daniel Jacobowitz + + * 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. + +2007-04-03 Matt Thomas + + * 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. + +2007-04-05 H.J. Lu + + 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. + +2007-04-05 Alan Modra + + * elf32-spu.c (spu_elf_output_symbol_hook): New function. + (elf_backend_link_output_symbol_hook): Define. + +2007-04-02 Nick Clifton + + 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. + +2007-03-29 Nick Clifton + + 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. + +2007-03-29 Alan Modra + + 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 + + * 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 + Phil Edwards + + * doc/bfd.texinfo: Put the contents after the title page rather + than at the end of the document. + +2007-03-27 Andreas Schwab + + * elfxx-ia64.c (elf_backend_default_execstack): Define to 0. + +2007-03-26 H.J. Lu + + * configure: Regenerated. + +2007-03-26 Alan Modra + + * 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 + + * 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 + + 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 + + * configure: Regenerated. + +2007-03-23 Joseph Myers + + * configure.in: Use ACX_PKGVERSION and ACX_BUGURL. + * configure: Regenerate. + +2007-03-23 Alan Modra + + * 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 + + * 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 + + 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 + + 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 + + PR ld/4208 + * elfxx-mips.c (_bfd_mips_elf_relocate_section): Report missing + matching LO16 relocation for HI16 relocation. + +2007-03-20 Paul Brook + + * 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. + +2007-03-18 Mark Shinwell + + * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add "bfd *" + argument and extra last argument. + * bfd-in2.h: Regenerate. + * 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. + +2007-03-20 Nick Clifton + + PR binutils/3535 + * elf.c (copy_private_bfd_data): Widen the scope of Solaris + specific conditions that need the program headers to be + rewritten. + +2007-03-19 H.J. Lu + + * 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. + +2007-03-18 H.J. Lu + + * targets.c (_bfd_target_vector): Add bfd_efi_app_x86_64_vec + only if BFD64 is defined. + +2007-03-17 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Always use an overlay stub + on setjmp calls. + +2007-03-15 H.J. Lu + + * doc/Makefile.in: Regenerated. + +2007-03-15 H.J. Lu + + * Makefile.am (bfdver.h): Substitute report_bugs_to. Also + create doc/bfdver.texi. + * Makefile.in: Regenerated. + + * configure.in (--with-bugurl): New option. + * configure: Regenerated. + + * version.h (REPORT_BUGS_TO): New. + +2007-03-13 H.J. Lu + + 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 + + * elf32-v850.c (v850_elf_link_output_symbol_hook): Clean out + V850_OTHER_* bits. + +2007-03-08 Alan Modra + + * 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 + + * 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 + + * reloc.c (bfd_generic_get_relocated_section_contents): Remove + const for type reloc_howto_type. + +2007-03-07 Alan Modra + + 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 + + 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 + + * 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 + + * Makefile.am (bfdver.h): Use "." not " " between version number + and date. + * Makefile.in: Regenerate. + * configure.in (PKGVERSION): Default to "(GNU Binutils) ". + * configure: Regenerate. + +2007-02-28 Nathan Sidwell + + * config.bfd (sh-*-uclinux, sh[12]-*-uclinux): New stanza. + +2007-02-27 Alan Modra + + * 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 + + * 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 + + 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 + + * 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 + + * elf.c (_bfd_elf_map_sections_to_segments): If the + override_segment_assignment callback is defined then call it. + +2007-02-21 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Correct order of warning args. + +2007-02-19 Thiemo Seufer + + * elfxx-mips.c (_bfd_mips_elf_print_private_bfd_data): Remove + translation marker from untranslatable strings. + +2007-02-19 Alan Modra + + * 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_default_execstack): Define to 0. + +2007-02-17 Mark Mitchell + Nathan Sidwell + Vladimir Prus + + * 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 + + * 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 + + * 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 + + PR ld/3953 + * elflink.c (_bfd_elf_add_default_symbol): Check warning symbol + when adding default symbol. + +2007-02-13 Alan Modra + + * elf64-ppc.c (create_linkage_sections): Use section ".branch_lt" + for branch lookup table. + +2007-02-12 Alan Modra + + * 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 + + * elflink.c (evaluate_complex_relocation_symbols): Ignore relocs + with a zero symbol index. + +2007-02-12 Alan Modra + + * elflink.c (bfd_elf_discard_info): Tidy setting of "eh". + +2007-02-05 Dave Brolley + Stan Cox + + PR ld/3972 + * elflink.c (elf_link_input_bfd): Always setup finfo->internal_syms. + +2007-02-05 Dave Brolley + Richard Sandiford + Stan Cox + Nick Clifton + DJ Delorie + Frank Ch. Eigler + Ben Elliston + Richard Henderson + + * 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. + +2007-02-05 Dave Brolley + + * 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 + Richard Sandiford + DJ Delorie + Graydon Hoare + Nick Clifton + Jeff Holcomb + Frank Ch. Eigler + + * 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 + + * 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 + + * elf32-xtensa.c (elf_howto_table) + : + Set src_mask to zero. + : Likewise. Also fix dst_mask. + : Set pcrel_offset to TRUE. + +2007-02-02 Bob Wilson + + * elf32-xtensa.c (xtensa_elf_dynamic_symbol_p): Renamed to... + (elf_xtensa_dynamic_symbol_p): ...this. + +2007-02-02 Bob Wilson + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * elf64-hppa.c (elf64_bed): Defined for HPUX and Linux. + (INCLUDED_TARGET_FILE): Removed. + +2007-01-27 Mike Frysinger + + * elf32-hppa.c (elf32_bed): Define for hpux, linux and netbsd. + (INCLUDED_TARGET_FILE): Remove. + +2007-01-25 DJ Delorie + + * elf32-m32c.c (m32c_elf_howto_table): Don't complain about + R_M32C_16 or R_M32C_24 relocs. + +2007-01-25 Nick Clifton + + 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 + + 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 + + * Makefile.am (BFD_LIBS): Removed. + * Makefile.in: Regenerated. + +2007-01-11 H.J. Lu + + PR binutils/3631 + * Makefile.am (OFILES): Add @bfd64_libs@. + (libbfd_la_SOURCES): Remove $(BFD64_LIBS_CFILES). + * Makefile.in: Regenerated. + + * configure.in (bfd_libs): Replaced by ... + (bfd64_libs): This. + * configure: Regenerated. + +2007-01-11 Nathan Sidwell + + * elf.c (assign_file_positions_for_load_sections): We can + require fewer phdrs than expected. + +2007-01-08 Kazu Hirata + + * 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. + +2007-01-08 Kai Tietz + + * config.bfd: Renamed target x86_64-*-mingw64 to x86_64-*-mingw*. + +2007-01-05 Jakub Jelinek + + * texhex.c (first_phase): Don't fall through into the default + case. + (pass_over): Replace abort () calls with return FALSE. Fix + buffer overflow. + +2007-01-04 Jie Zhang + + * 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-2006 + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff --git a/bfd/ChangeLog-2008 b/bfd/ChangeLog-2008 new file mode 100644 index 0000000..eb63e09 --- /dev/null +++ b/bfd/ChangeLog-2008 @@ -0,0 +1,3386 @@ +2008-12-29 Arnold Metselaar + + * coff-z80.c (r_imm32): Fix copy-paste bug that caused z80-objdump to + issue warnings about stabs debugging symbols rather than to show them. + +2008-12-23 Jon Beniston + + * Makefile.am: Add LM32 object files and dependencies. + * Makefile.in: Regenerate. + * archures.c: Add LM32 architechiture info. + * targets.c: Likewise. + * reloc.c: Likewise. + * bfd-in2.h: Regenerate. + * config.bfd: Add LM32 targets. + * configure.in: Likewise. + * configure: Regenerate. + * cpu-lm32.c: New file. + * elf32-lm32.c: New file. + +2008-12-23 H.J. Lu + + PR ld/7036 + * elfxx-ia64.c (elfNN_ia64_relax_section): Assume linker will + always insert 32byte between the .plt and .text sections after + the the first relaxation pass. + +2008-12-23 Nick Clifton + + PR 7093 + * elf32-arm.c (bfd_elf32_arm_init_maps): Only process ARM ELF + object files. + +2008-12-23 Tristan Gingold + + * mach-o.c (bfd_mach_o_make_bfd_section): Use the standard ELF name + .eh_frame for __TEXT.__eh_frame so that it is recognized by gdb. + Use shorter sections name for well known sections. + (bfd_mach_o_scan_read_dylinker): Only put dylinker name in the + section content. + (bfd_mach_o_scan_read_segment): Use shorter sections name for + well known segments. + (bfd_mach_o_scan_read_command): Ignore some new commands. + (bfd_mach_o_openr_next_archived_file): Use more descriptive names + for members filename. + (bfd_mach_o_fat_extract): New function to easily extract members + of a fat binary. + * mach-o.h (bfd_mach_o_load_command_type): Add new constants. + (bfd_mach_o_dylinker_command): Fix comment and reindent. + (bfd_mach_o_fat_extract): New prototype. + +2008-12-23 Johan Olmutz Nielsen + + * coffcode.h (coff_write_object_contents): Always initialise + section.s_page. + +2008-12-23 Andreas Schwab + + * elf32-m68k.c (elf_m68k_discard_copies): Use SYMBOL_CALLS_LOCAL. + (elf_m68k_relocate_section): Use SYMBOL_CALLS_LOCAL and + SYMBOL_REFERENCES_LOCAL. + (elf_m68k_relocate_section): Likewise. + +2008-12-23 Nick Clifton + + * elf-bfd.h (struct bfd_elf_section_data): Remove indirect_relocs + field. + (_bfd_elf_make_ifunc_reloc_section): Remove prototype. + * elf.c (swap_out_syms): Remove STT_IFUNC support. + (elf_find_function): Likewise. + * elf32-arm.c (arm_elf_find_function): Likewise. + (elf32_arm_adjust_dynamic_symbol): Likewise. + (elf32_arm_swap_symbol_in): Likewise. + (elf32_arm_is_function_type): Likewise. + * elf32-i386.c (is_indirect_symbol): Delete. + (elf_i386_check_relocs): Remove STT_IFUNC support. + (allocate_dynrelocs): Likewise. + (elf_i386_relocate_section): Likewise. + * elf64-x86-64.c (is_indirect_symbol): Delete. + (elf64_x86_64_check_relocs): Remove STT_IFUNC support. + (allocate_dynrelocs): Likewise. + (elf64_x86_64_relocate_section): Likewise. + * elfcode.h (elf_slurp_symbol_table): Likewise. + * elflink.c (_bfd_elf_adjust_symbol): Likewise. + (get_ifunc_reloc_section_name): Delete. + (_bfd_elf_make_ifunc_reloc_section): Delete. + * syms.c (BSF_INDIRECT_FUNCTION): Delete. + (bfd_print_symbol_vandf): Remove STT_IFUNC support. + (bfd_decode_symclass): Likewise. + * bfd-in2.h: Regenerate. + +2008-12-20 Hans-Peter Nilsson + + * elf32-cris.c (cris_elf_howto_table): Add entry for R_CRIS_32_IE. + (cris_reloc_map): Similarly. + (cris_elf_relocate_section, cris_elf_gc_sweep_hook) + (cris_elf_check_relocs): Handle R_CRIS_32_IE. + * reloc.c (bfd_reloc_code_type): Add entry for R_CRIS_32_IE. + * bfd-in2.h, libbfd.h: Regenerate. + +2008-12-18 Ralf Wildenhues + + * configure: Regenerate. + +2008-12-17 Hans-Peter Nilsson + + * elf32-cris.c (elf_cris_copy_indirect_symbol): Return without + action for symbols other than bfd_link_hash_indirect. + (cris_elf_relocate_section) : Add missing + gate h != NULL for h->def_regular test. + +2008-12-15 Hans-Peter Nilsson + + * elf32-cris.c (elf_cris_copy_indirect_symbol): New function. + (elf_backend_copy_indirect_symbol): Define to above. + + * elf32-cris.c (struct elf_cris_pcrel_relocs_copied): New member + r_type. Fix formatting. + (cris_elf_relocate_section) + : Also break early if the symbol doesn't get + emitted as a dynamic one. + (cris_elf_check_relocs) : Fork + from PCREL relocs code and simplify; don't fall through. + : Simplify for + pcrel only. For non-local or overridable symbols in a DSO, always + keep count of relocs, not just when -Bsymbolic. Don't emit + message nor mark as TEXTREL here. + (elf_cris_discard_excess_dso_dynamics): Emit warning and mark as + TEXTREL here, if there are nondiscarded pcrel relocs. + + * elf32-cris.c (elf_cris_got_elt_size) : Initialize + using ibfd, not abfd. + +2008-12-11 Alan Modra + + PR 7041 + * elf64-ppc.c (func_desc_adjust): Correct logic making fake function + descriptors. Similarly correct making function descriptors dynamic. + +2008-12-10 Alan Modra + + * elf32-spu.h (struct spu_elf_params): Add num_regions. + * elf32-spu.c (spu_elf_auto_overlay): Handle multiple overlay regions. + +2008-12-10 Alan Modra + + * elf32-spu.g (struct spu_elf_params, enum _ovly_flavour): New. + (spu_elf_setup): Declare. + (spu_elf_create_sections, spu_elf_size_stubs): Update prototype. + (spu_elf_build_stubs, spu_elf_check_vma): Likewise. + * elf32-spu.c (struct spu_link_hash_table): Add "params". Remove + various other fields now in "params". Adjust code throughout. + (struct call_info, struct function_info): Move earlier in file. + (struct spu_elf_stack_info): Likewise. + (spu_elf_setup): New function. + (spu_elf_create_sections): Remove args other than "info". + (spu_elf_size_stubs, spu_elf_build_stubs, spu_elf_check_vma): Likewise. + (maybe_needs_stubs): Remove "output_bfd" arg. Adjust all calls. + (interesting_section): Similarly with "obfd" arg. + (needs_ovl_stub): Adjust output_section test. + (allocate_spuear_stubs): Likewise. + (OVL_STUB_SIZE): Don't define. + (ovl_stub_size): New function, use in place of OVL_STUB_SIZE. + (build_stub): Test params->ovly_flavour rather than OVL_STUB_SIZE. + (spu_elf_auto_overlay): Remove args other than "info". Make use + of size returned from spu_elf_load_ovl_mgr. + (spu_elf_stack_analysis): Remove args other than "info". + (spu_elf_relocate_section): Tidy setting of "ea". + +2008-12-10 Alan Modra + + * elf32-spu.c (find_function_stack_adjust): Don't limit number + of insns scanned. Correct sp tests. Handle "fsmbi" and "andbi". + (mark_detached_root): New function. + (build_call_tree): Call it. + (sort_calls): Don't do void* arithmetic. + (define_ovtab_symbol): Don't abort on symbols defined in linker scripts. + (discover_functions): Consider STT_SECTION symbols too. + (collect_lib_sections): Don't cut short call tree traversal + when function size is too large. + +2008-12-09 Tom Tromey + + * pef.c (bfd_pef_parse_traceback_table): Add parens to placate gcc + 4.4. + +2008-12-09 Tristan Gingold + + * cpu-avr.c (compatible): Makes avr-6 compatible only with itself. + +2008-12-04 Andreas Krebbel + + * elf64-s390.c (elf_s390_check_relocs): Initialize + htab->elf.dynobj if necessary. + +2008-12-03 Nick Clifton + + * syms.c (struct bfd_symbol): Add new flag BSF_INDIRECT_FUNCTION. + Remove redundant flag BFD_FORT_COMM_DEFAULT_VALUE. Renumber flags + to remove gaps. + (bfd_print_symbol_vandf): Return 'i' for BSF_INDIRECT_FUNCTION. + (bfd_decode_symclass): Likewise. + * elf.c (swap_out_syms): Translate BSF_INDIRECT_FUNCTION into + STT_IFUNC. + (elf_find_function): Treat STT_IFUNC in the same way as STT_FUNC. + (_bfd_elf_is_function_type): Likewise. + * elf32-arm.c (arm_elf_find_function): Likewise. + (elf32_arm_adjust_dynamic_symbol): Likewise. + (elf32_arm_swap_symbol_in): Likewise. + (elf32_arm_additional_program_headers): Likewise. + * elf32-i386.c (is_indirect_symbol): New function. + (elf_i386_check_relocs): Also generate dynamic relocs for + relocations against STT_IFUNC symbols. + (allocate_dynrelocs): Likewise. + (elf_i386_relocate_section): Likewise. + * elf64-x86-64.c (is_indirect_symbol): New function. + (elf64_x86_64_check_relocs): Also generate dynamic relocs for + relocations against STT_IFUNC symbols. + (allocate_dynrelocs): Likewise. + (elf64_x86_64_relocate_section): Likewise. + * elfcode.h (elf_slurp_symbol_table): Translate STT_IFUNC into + BSF_INDIRECT_FUNCTION. + * elflink.c (_bfd_elf_adjust_dynamic_reloc_section): Add support + for STT_IFUNC symbols. + (get_ifunc_reloc_section_name): New function. + (_bfd_elf_make_ifunc_reloc_section): New function. + * elf-bfd.h (struct bfd_elf_section_data): Add indirect_relocs field. + * bfd-in2.h: Regenerate. + +2008-12-02 Tristan Gingold + + * config.bfd: Add x86_64-*-darwin* + +2008-11-28 John David Anglin + + * hpux-core.c: Don't include sys/file.h. + +2008-11-28 Joshua Kinard + + * aoutx.h (NAME): Add case statements for bfd_mach_mips14000, + bfd_mach_mips16000. + * archures.c (bfd_architecture): Add .#defines for bfd_mach_mips14000, + bfd_mach_mips16000. + * bfd-in2.h: Regenerate. + * cpu-mips.c: Add enums I_mips14000, I_mips16000. + (arch_info_struct): Add refs to R14000, R16000. + * elfxx-mips.c (mips_set_isa_flags): Handle bfd_mach_mips14000, + bfd_mach_mips16000. + (mips_mach_extensions): Map R14000, R16000 to R10000. + +2008-11-27 M R Swami Reddy + + * Add PIC support for CR16 target. + * elf32-cr16.c (R_CR16_GOT_REGREL20, R_CR16_GOTC_REGREL20 and + R_CR16_GLOB_DAT): New macros + (cr16_elf_howto_table): Add entries for for R_CR16_GOT_REGREL20, + R_CR16_GOTC_REGREL20 and R_CR16_GLOB_DAT. + (cr16_reloc_map): Ditto + (_bfd_cr16_elf_create_got_section): New function to create GOT section. + (_bfd_cr16_elf_create_dynamic_sections): New function to create dynamic + section. + (_bfd_cr16_elf_adjust_dynamic_symbol): New function to adjust symbol + defined by dynamic object. + (_bfd_cr16_elf_size_dynamic_sections): New function to find the size of + dynamic sections. + (_bfd_cr16_elf_finish_dynamic_symbol): New function to handle dynamic + symbols. + (_bfd_cr16_elf_finish_dynamic_symbol): New function to handle dynamic + sections. + (bfd_cr16_elf32_create_embedded_relocs): New function to create + embedded relocs in .emreloc section in memory for .data.rel section. + (_bfd_cr16_elf_reloc_type_class): New function for classify reloc types. + (cr16_elf_check_relocs): New function for checking reloc types in first + phase. + (cr16_elf_final_link_relocate): Update for handling the new reloc types + R_CR16_GOT_REGREL20 and R_CR16_GOTC_REGREL20. + (elf32_cr16_relax_section): Update relax implementation. + * reloc.c (bfd_reloc_code_type): Add entries for R_CR16_GOT_REGREL20, + R_CR16_GOTC_REGREL20 and R_CR16_GLOB_DAT. + * bfd-in.h (bfd_boolean bfd_cr16_elf32_create_embedded_relocs): Declared + * libbfd.h, bfd-in2.h: Regenerate. + +2008-11-26 Alan Modra + + PR 7047 + * configure.in: Bump version. + * configure: Regenerate. + * elflink.c (_bfd_elf_link_assign_sym_version): Continue matching + against version nodes when a global match is a wildcard. Similarly + continue matching on local wildcard matches, rather than only + continuing for "*". Have any global wildcard match override a + local wildcard match. Correct logic hiding unversioned symbol. + (bfd_elf_size_dynamic_sections): Update for changes to struct + bfd_elf_version_expr. + +2008-11-25 Joel Brobecker + + * configure.in: Deactivate large-file support on native x86-solaris + as well unless the user explicitly requested it. + * configure: Regenerate. + +2008-11-25 Joseph Myers + + * elf32-arm.c (elf32_arm_final_link_relocate): Do not turn + branches to undefine weak symbols into branches to the next + instruction if creating PLT entries for those symbols. + +2008-11-25 Nick Clifton + + * elflink.c (is_reloc_section): New function. Returns true if the + given name matches the name of the reloc-containing section + associated with the given section. + (get_dynamic_reloc_section_name): New function. Computes the name + of the section that contains the dynamic relocs associated with + the given section. + (_bfd_elf_get_dynamic_reloc_section): New function. Returns a + pointer to the section containing the dynamic relocs associated + with the given section. + (_bfd_elf_make_dynamic_reloc_section): New function. Creates a + section to contain the dynamic relocs associated with a given + section. + * elf-bfd.h: Prototype the new functions. + * elf-m10300.c (mn10300_elf_check_relocs): Use new functions. + (mn10300_elf_final_link_relocs): Likewise. + * elf32-arm.c (reloc_section_p): Delete - replaced by new + functions. + (elf32_arm_final_link_relocate): Use new functions. + (elf32_arm_check_relocs): Likewise. + * elf32-cris.c (cris_elf_relocate_section): Likewise. + (elf_cris_check_relocs): Likewise. + * elf32-hppa.c (elf32_hppa_check_relocs): Likewise. + * elf32-i370.c (i370_elf_check_relocs): Likewise. + (i370_elf_relocate_section): Likewise. + * elf32-i386.c (elf_i386_check_relocs): Likewise. + * elf32-m32r.c (m32r_elf_relocate_section): Likewise. + (m32r_elf_check_relocs): Likewise. + * elf32-m68k.c (elf_m68k_check_relocs): Likewise. + * elf32_ppc.c (ppc_elf_check_relocs): Likewise. + (ppc_elf_relocate_section): Likewise. + * elf32-s390.c (elf_s390_check_relocs): Likewise. + * elf32-sh.c (sh_elf_relocate_section): Likewise. + (sh_elf_check_relocs): Likewise. + * elf32-vax.c (elf_vax_check_relocs): Likewise. + (elf_vax_relocate_section): Likewise. + * elf64-alpha.c (elf64_alpha_check_relocs): Likewise. + * elf64-ppc.c (ppc64_elf_check_relocs): Likewise. + * elf64-s390.c (elf_s390_check_relocs): Likewise. + * elf64-sh64.c (sh_elf64_relocate_section): Likewise. + * elf64-x86-64.c (elf64_x86_64_check_relocs): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Likewise. + * elf32-bfin.c (bfin_check_relocs): Remove redundant local + variable 'sreloc'. + (bfin_relocate_section): Likewise. + * elf32-v850.c (v850_elf_check_relocs): Likewise. + +2008-11-23 Hans-Peter Nilsson + + Implement TLS for CRIS. + * elf32-cris.c: Include limits.h. + (TLSHOWTO16): Redefine in terms of and move contents to... + (TLSHOWTO16X): New macro. + (TLSHOWTO16S, LGOT_REG_NDX, LGOT_DTP_NDX, LGOT_ALLOC_NELTS_FOR) + (elf_cris_hash_entry): New macros. + (cris_elf_howto_table): Make R_CRIS_16_DTPREL, + R_CRIS_16_GOT_TPREL, R_CRIS_16_TPREL check overflow for signed, + not unsigned values. + (cris_info_to_howto_rela): Make r_type a enum elf_cris_reloc_type, + not unsigned int. + (struct elf_cris_link_hash_entry): New members reg_got_refcount, + tprel_refcount, and dtp_refcount. + (struct elf_cris_link_hash_table): New member dtpmod_refcount. + (elf_cris_link_hash_newfunc): Initialize new members. + (elf_cris_link_hash_table_create): Similar. + (cris_final_link_relocate, elf_cris_reloc_type_class): Use a + temporary variable when testing the relocation type. + (cris_elf_gc_mark_hook): Ditto. Add default case where needed. + (cris_elf_gc_sweep_hook): Ditto. Handle reference-counting for + the new assembly-generated relocs. Rewrite refcount handling to + set temporary variables to pointers to reloc-specific variables + and entry size and common code for the update. + (additional_relocation_error_msg_count): New variable. + (cris_elf_relocate_section): Use a function-local variable srelgot + for the .rela.got section instead of looking it up for every need. + Make r_type a enum elf_cris_reloc_type, not int. Actually set + symname for non-local symbols. Handle new assembly-generated + relocs. For overflow, emit additional messages for the new 16-bit + relocs as well as R_CRIS_16_GOTPLT and R_CRIS_16_GOT. + (elf_cris_finish_dynamic_symbol): Use elf_cris_finish_dynamic_symbol + instead of plain casts. Check new hash entry member + reg_got_refcount when checking whether to emit a GOT entry. + (elf_cris_finish_dynamic_sections): Update head comment to warn + about emitting relocs here. Use a temporary variable when testing + the relocation type. + (elf_cris_discard_excess_program_dynamics) + (elf_cris_adjust_gotplt_to_got): Handle reference counting change + regarding h->reg_got_refcount. + (cris_elf_check_relocs): Rewrite refcount handling to set + temporary variables and entry size and common code for the update + for local symbols. Use new macro elf_cris_hash_entry. Adjust + allocation for change in reference counting of GOT entries for + local symbols. + (elf_cris_size_dynamic_sections): Adjust calculated size of + .got.plt and .rela.got if we need a GOT entry for a + R_CRIS_DTPMOD relocation. + (elf_cris_got_elt_size): New function. + (elf_backend_got_elt_size): Define. + +2008-11-21 Sterling Augustine + + * xtensa-isa.c (xtensa_state_is_shared_or): New function. + +2008-11-21 Hans-Peter Nilsson + + * elf-bfd.h (struct elf_backend_data): New member got_elt_size. + (_bfd_elf_default_got_elt_size): Declare. + * elflink.c (struct alloc_got_off_arg): Replace member got_elt_size + by new member info. + (elf_gc_allocate_got_offsets): Adjust for calling bed->got_elt_size + to get the element size instead of using a gofarg entry. + (bfd_elf_gc_common_finalize_got_offsets): Similar. + (_bfd_elf_default_got_elt_size): New function. + * elfxx-target.h: New macro elf_backend_got_elt_size. + (elfNN_bed): Use it. + +2008-11-20 Tristan Gingold + + * bfdwin.c: Fix comment. + +2008-11-20 Tristan Gingold + + * bfd.c (is32bit): Use architecture information for non-ELF + targets. + +2008-11-20 Alan Modra + + * elf32-ppc.c (allocate_dynrelocs): Always use tlsld_got for + TLS_LD even when symbol is used with other TLS reloc types. + (ppc_elf_relocate_section): Bypass symbol checks when using tlsld_got. + Leave addend zero on LD DTPMOD dynamic reloc. + +2008-11-19 Bob Wilson + + * xtensa-modules.c (sysregs): Add MMID, VECBASE, EPC5, EPC6, EPC7, + EXCSAVE5, EXCSAVE6, EXCSAVE7, EPS5, EPS6, EPS7, CPENABLE, + SCOMPARE1, and THREADPTR registers. + (NUM_SYSREGS, MAX_USER_REG): Update. + (states): Change width of INTERRUPT, WindowBase, WindowStart, and + INTENABLE. Add VECBASE, EPC5, EPC6, EPC7, EXCSAVE5, EXCSAVE6, + EXCSAVE7, EPS6, EPS6, EPS7, THREADPTR, CPENABLE, and SCOMPARE1 states. + (NUM_STATES): Update. + (enum xtensa_state_id): Add entries for new states. + (enum xtensa_field_id): Add entries for xt_wbr15_imm and xt_wbr18_imm + fields, along with functions to extract and set them. + (regfiles): Change number of AR registers to 32. + (Operand_ar0_encode, Operand_ar4_encode, Operand_ar8_encode, + Operand_ar12_encode, Operand_ars_entry_encode): Update register mask. + (operands): Add entries for tp7, xt_wbr15_label, xt_wbr18_label, + xt_wbr15_imm, and xt_wbr18_imm operands, along with functions to + encode and decode them. + (enum xtensa_operand_id): Add entries for new operands. + (Iclass_xt_iclass_rfi_stateArgs): Add EPC5, EPC6, EPC7, EPS5, EPS6, and + EPC7 states. + (Iclass_xt_iclass_rfdo_stateArgs): Replace EPC4 and EPS4 by EPC6 and + EPS6, respectively. + (iclasses): Add entries for rur_threadptr, wur_threadptr, + xt_iclass_wsr_176, xt_iclass_rsr_epc5, xt_iclass_wsr_epc5, + xt_iclass_xsr_epc5, xt_iclass_rsr_excsave5, xt_iclass_wsr_excsave5, + xt_iclass_xsr_excsave5, xt_iclass_rsr_epc6, xt_iclass_wsr_epc6, + xt_iclass_xsr_epc6, xt_iclass_rsr_excsave6, xt_iclass_wsr_excsave6, + xt_iclass_xsr_excsave6, xt_iclass_rsr_epc7, xt_iclass_wsr_epc7, + xt_iclass_xsr_epc7, xt_iclass_rsr_excsave7, xt_iclass_wsr_excsave7, + xt_iclass_xsr_excsave7, xt_iclass_rsr_eps5, xt_iclass_wsr_eps5, + xt_iclass_xsr_eps5, xt_iclass_rsr_eps6, xt_iclass_wsr_eps6, + xt_iclass_xsr_eps6, xt_iclass_rsr_eps7, xt_iclass_wsr_eps7, + xt_iclass_xsr_eps7, xt_iclass_rsr_vecbase, xt_iclass_wsr_vecbase, + xt_iclass_xsr_vecbase, xt_iclass_mul16, xt_iclass_wsr_mmid, + xt_iclass_icache_lock, xt_iclass_dcache_lock, xt_iclass_rsr_cpenable, + xt_iclass_wsr_cpenable, xt_iclass_xsr_cpenable, xt_iclass_clamp, + xt_iclass_minmax, xt_iclass_sx, xt_iclass_l32ai, xt_iclass_s32ri, + xt_iclass_s32c1i, xt_iclass_rsr_scompare1, xt_iclass_wsr_scompare1, + xt_iclass_xsr_scompare1, xt_iclass_div, and xt_iclass_mul32, along + with corresponding argument and state argument arrays. Change + number of state arguments for xt_iclass_rfi. Add arguments for + xt_iclass_rfdo. + (enum xtensa_iclass_id): Add entries for new iclasses. + (opcodes): Add entries for RUR_THREADPTR, WUR_THREADPTR, WSR_176, + RSR_EPC5, WSR_EPC5, XSR_EPC5, RSR_EXCSAVE5, WSR_EXCSAVE5, XSR_EXCSAVE5, + RSR_EPC6, WSR_EPC6, XSR_EPC6, RSR_EXCSAVE6, WSR_EXCSAVE6, XSR_EXCSAVE6, + RSR_EPC7, WSR_EPC7, XSR_EPC7, RSR_EXCSAVE7, WSR_EXCSAVE7, XSR_EXCSAVE7, + RSR_EPS5, WSR_EPS5, XSR_EPS5, RSR_EPS6, WSR_EPS6, XSR_EPS6, RSR_EPS7, + WSR_EPS7, XSR_EPS7, RSR_VECBASE, WSR_VECBASE, XSR_VECBASE, MUL16U, + MUL16S, WSR_MMID, IPFL, IHU, IIU, DPFL, DHU, DIU, RSR_CPENABLE, + WSR_CPENABLE, XSR_CPENABLE, CLAMPS, MIN, MAX, MINU, MAXU, SEXT, L32AI, + S32RI, S32C1I, RSR_SCOMPARE1, WSR_SCOMPARE1, XSR_SCOMPARE1, QUOU, QUOS, + REMU, REMS, and MULL opcodes, along with the corresponding functions + to encode them. + (enum xtensa_opcode_id): Add entries for new opcodes. + (Slot_inst_decode): Handle new opcodes. + (Slot_inst_get_field_fns, Slot_inst_set_field_fns): Add entries for + xt_wbr15_imm and xt_wbr18_imm fields. + (Slot_inst16a_get_field_fns, Slot_inst16a_set_field_fns): Likewise. + (Slot_inst16b_get_field_fns, Slot_inst16b_set_field_fns): Likewise. + (xtensa_modules): Update number of fields, operands, iclasses and + opcodes. + +2008-11-19 Nix + + * elf.c (swap_out_syms) [USE_STT_COMMON]: Fix syntax error. + +2008-11-19 Nick Clifton + + PR 7027 + * elfxx-sparc.c (_bfd_sparc_elf_check_relocs): Treat WPLT30 relocs + against local symbols in 64-bit binaries as if they were WDISP30 + relocs. + (_bfd_sparc_elf_relocate_section): Likewise. + +2008-11-18 Catherine Moore + + * elf32-arm.c (elf32_arm_merge_eabi_attributes): Merge + half-precision attributes. + (elf32_arm_copy_one_eabi_other_attribute): New. + (elf32_arm_copy_other_attribute_list): New. + +2008-11-18 Nick Clifton + + * dwarf2.c (read_section): Fix formatting. + (read_n_bytes): Remove unhelpful comment. + (read_indirect_string): Pass symbol table to read_section in case + the .debug_str section needs relocating. + + PR 7037 + * elf32-cr16.c (cr16_elf_howto_table): Zero the src_mask field of + the reloc descriptions. + +2008-11-14 Eric B. Weddington + + PR 7022 + * elf32-avr.c (bfd_elf_avr_final_write_processing): + Add missing break statements. + +2008-11-14 Bob Wilson + + * xtensa-modules.c (xtensa_state_id): New enum, replacing STATE macros. + (xtensa_field_id, xtensa_regfile_id, xtensa_operand_id) + (xtensa_iclass_id, xtensa_opcode_id): New enums. + Replace hardcoded constants throughout this file with enum values. + +2008-11-14 Nathan Sidwell + + * elf.c (assign_file_positions_for_load_sections): Use header_size + to avoid moving the load address of file headers. + (assign_file_positions_for_load_sections): Set header_size for + segments containing the file header. + +2008-11-14 Tristan Gingold + + * configure.com: Handle bfd_default_target_size, BFD_HOST_LONG_LONG, + BFD_HOST_64BIT_LONG_LONG, BFD_HOSTPTR_T, bfd_file_ptr. + Generate bfdver.h. + * vms-hdr.c (_bfd_vms_write_hdr): Use strdup/free instead of alloca. + * hosts/alphavms.h: Defines macros to bypass i18n. + * makefile.vms (OBJS): Update file list. + (DEFS): Remove VMS_DEBUG, const, add DEBUGDIR. + (CFLAGS): Update flags. + * bfdio.c (real_fopen): Add code specific to VMS: extract attributes + from modes. + +2008-11-13 Joel Brobecker + + * configure.in: Deactivate large-file support on native 32bit + sparc-solaris unless the user explicitly requested it. + * configure: Regenerate. + +2008-11-13 Hans-Peter Nilsson + + PR ld/7028 + * elf.c (assign_file_positions_for_load_sections): Allocate phrds + with bfd_zalloc2 instead of bfd_alloc2. For the amount, use + the possibly-preset header-size, not the computed one. + +2008-11-13 Alan Modra + + PR 7023 + * elf.c (bfd_section_from_shdr ): Fail on invalid sh_info. + +2008-11-11 Alan Modra + + * elf.c (assign_file_positions_for_non_load_sections): Consolidate + PT_GNU_RELRO handling. + +2008-11-11 Alan Modra + + PR 7012 + * dwarf2.c (find_line): Don't keep stale pointers into realloc'd + memory. Return on errors. Fix memory leak. + (_bfd_dwarf2_cleanup_debug_info): Free dwarf_str_buffer. + +2008-11-10 Andreas Schwab + + PR 7011 + * elf.c (assign_file_positions_for_non_load_sections): Handle + PT_GNU_RELRO specially. + +2008-11-06 Joel Sherrill + + * config.bfd: Add m32c-*-rtems* and m32r-*-rtems*. + +2008-11-06 Tom Tromey + + * configure, config.in: Rebuild. + * configure.in: Check for fileno. + * bfdio.c (close_on_exec): New function. + (real_fopen): Use it. + (FD_CLOEXEC): New define. + +2008-11-06 Tristan Gingold + + * mach-o.h (BFD_MACH_O_NO_SECT): Add; reorders the macros. + (BFD_MACH_O_SYM_NTYPE, BFD_MACH_O_SYM_NSECT, + BFD_MACH_O_SYM_NDESC): New macros. + (bfd_mach_o_i386_thread_flavour): Define according to the latest + definition from system header. + (bfd_mach_o_load_command_type): Add BFD_MACH_O_LC_RPATH, + BFD_MACH_O_LC_CODE_SIGNATURE. + (BFD_MACH_O_SECTION_TYPE_MASK, BFD_MACH_O_SECTION_ATTRIBUTES_MASK, + BFD_MACH_O_SECTION_ATTRIBUTES_SYS, BFD_MACH_O_SECTION_ATTRIBUTES_USR, + BFD_MACH_O_S_ATTR_LOC_RELOC, BFD_MACH_O_S_ATTR_EXT_RELOC, + BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS, BFD_MACH_O_S_ATTR_DEBUG, + BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS): Add. + (bfd_mach_o_segment_command): Add room for a nul terminator in + segname field. + (BFD_MACH_O_PROT_READ, BFD_MACH_O_PROT_WRITE, + BFD_MACH_O_PROT_EXECUTE): Add. + (INDIRECT_SYMBOL_LOCAL): Renames to BFD_MACH_O_INDIRECT_SYMBOL_LOCAL. + (INDIRECT_SYMBOL_ABS): Renames to BFD_MACH_O_INDIRECT_SYMBOL_ABS. + (bfd_mach_o_uuid_command): Add the structure. + (bfd_mach_o_load_command): Add uuid field. + (bfd_get_mach_o_data): New macro. + * mach-o.c (bfd_mach_o_bfd_print_private_bfd_data): New function which + replaces the macro. + (SECTION_TYPE, SECTION_ATTRIBUTES, SECTION_ATTRIBUTES_USR, + S_ATTR_PURE_INSTRUCTIONS, SECTION_ATTRIBUTES_SYS, + S_ATTR_SOME_INSTRUCTIONS, S_ATTR_EXT_RELOC, S_ATTR_LOC_RELOC): Renamed + and moved to mach-o.h. + (N_STAB, N_TYPE, N_EXT, N_UNDF, N_ABS, N_TEXT, N_DATA, N_BSS, + N_SECT, N_INDR): Removed as they duplicated macros in mach-o.h. + (bfd_mach_o_print_symbol): Print much more details. + (bfd_mach_o_make_bfd_section): Add prot argument, use canonical + dwarf name for dwarf sections. Precisely set section flags. + (bfd_mach_o_scan_read_section_32): Add prot argument. + (bfd_mach_o_scan_read_section_64): Ditto. + (bfd_mach_o_scan_read_section): Ditto. + (bfd_mach_o_scan_read_symtab_symbol): Set section for debugging + stabs, set BSF_GLOBAL and LOCAL flags correctly. Fix section + for N_SECT symbols. + (bfd_mach_o_i386_flavour_string): Reindent and adjust for new + names. + (bfd_mach_o_scan_read_symtab): Set HAS_SYMS flags on bfd if there + are symbols. + (bfd_mach_o_scan_read_uuid): New function. + (bfd_mach_o_scan_read_segment): Add a trailing nul. Segments + flags are now simply HAS_CONTENTS. Pass protection to + bfd_mach_o_scan_read_section. + (bfd_mach_o_scan_read_command): Decode UUID command. + (bfd_mach_o_flatten_sections): Add comments. Fix flavour names. + (bfd_mach_o_scan): Set flags according to file type. + (mach_o_fat_archentry): Remove abfd field. + (bfd_mach_o_archive_p): Remove initialization of abfd field. + (bfd_mach_o_openr_next_archived_file): Find previous archive + by position and not by bfd (as former bfds may have been freed). + Give architecture name to archived file. + * mach-o-target.c (TARGET_NAME): Use generic archive for non fat + targets. + +2008-10-30 Jay Krell + + * cache.c (cache_bread): Cast void * pointer before performing + arithmetic on it. + +2008-10-20 Alan Modra + + * elf64-ppc.c (ppc64_elf_process_dot_syms): Renamed from + ppc64_elf_check_directives. + * elf32-sh-symbian.c (sh_symbian_process_directives): Combine.. + (sh_symbian_check_directives): ..this + (bfd_elf32_sh_symbian_process_directives) ..and this function. + +2008-10-20 Alan Modra + + * elflink.c (bfd_elf_final_link): Move code reading relocs to.. + * elf32-spu.c (spu_elf_count_relocs): ..here. Adjust params. + * elf-bfd.h (struct elf_backend_data): Update elf_backend_count_relocs + params. + +2008-10-20 Alan Modra + + * elflink.c (bfd_elf_final_link): Use d_ptr rather than d_val + where Elf_Internal_Dyn holds an address. + +2008-10-10 Nathan Froyd + + * elf32-ppc.c (ppc_elf_merge_obj_attributes): Merge + Tag_GNU_Power_ABI_Struct_Return. + +2008-10-09 Kai Tietz + + * cofflink.c (_bfd_coff_generic_relocate_section): Dump bfd_vma + sized addresses instead of long sized. + +2008-10-09 Alan Modra + + * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Don't attempt to + read plt relocs if no dynamic syms. + +2008-10-08 Nick Clifton + + * configure.in (ALL_LINGUAS): Add "id". + * configure: Regenerate. + * po/id.po: New Indonesian translation. + +2008-10-08 Alan Modra + + * elf.c (assign_file_positions_for_load_sections): When checking + a segment for contents, don't assume that a non-TLS nobits section + must only be followed by nobits sections. + +2008-10-04 Hans-Peter Nilsson + + * elf32-cris.c (TLSHOWTO32, TLSHOWTO16): New macros. + (cris_elf_howto_table): Add entries for R_CRIS_32_GOT_GD, + R_CRIS_16_GOT_GD, R_CRIS_32_GD, R_CRIS_DTP, R_CRIS_32_DTPREL, + R_CRIS_16_DTPREL, R_CRIS_DTPMOD, R_CRIS_32_GOT_TPREL, + R_CRIS_16_GOT_TPREL, R_CRIS_32_TPREL, R_CRIS_16_TPREL. + (cris_reloc_map): Similarly. + * reloc.c (bfd_reloc_code_type): Add entries for + BFD_RELOC_CRIS_32_GOT_GD, BFD_RELOC_CRIS_16_GOT_GD, + BFD_RELOC_CRIS_32_GD, BFD_RELOC_CRIS_DTP, + BFD_RELOC_CRIS_32_DTPREL, BFD_RELOC_CRIS_16_DTPREL, + BFD_RELOC_CRIS_DTPMOD, BFD_RELOC_CRIS_32_GOT_TPREL, + BFD_RELOC_CRIS_16_GOT_TPREL, BFD_RELOC_CRIS_32_TPREL, + BFD_RELOC_CRIS_16_TPREL. + * libbfd.h, bfd-in2.h: Regenerate. + +2008-10-03 Alan Modra + + PR 6931 + * elf.c (bfd_elf_set_group_contents): Assign sh_info for ld -r when + the signature symbol is global. + * elflink.c (elf_link_input_bfd): Ensure group signature symbol + is output when ld -r. Set group sh_info when local. + * linker.c (default_indirect_link_order): Handle group sections + specially. + +2008-09-30 Wesley W. Terpstra + Nick Clifton + + * coffgen.c (coff_write_symbols): Check to see if a symbol's flags + do not match it class and if necessary update the class. + (null_error_handler): New function. Suppresses the generation of + bfd error messages. + * coff64-rs6000.c (bfd_xcoff_backend_data): Update comment. + +2008-09-30 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2008-09-30 Alan Modra + + * elflink.c (elf_link_add_object_symbols): Don't ignore returned + value of check_directives. + +2008-09-29 Peter O'Gorman + Steve Ellcey + + * configure: Regenerate for new libtool. + * aclocal.m4: Ditto. + * Makefile.in: Ditto. + * doc/Makefile.in: Ditto. + +2008-09-29 Alan Modra + + PR 6789 + * elf.c (assign_file_positions_for_load_sections): Call + _bfd_elf_map_sections_to_segments, not elf_modify_segment_map. + (get_program_header_size): Protect against NULL info. + (_bfd_elf_map_sections_to_segments): Likewise. + * elf32-spu.c (spu_elf_additional_program_headers): Likewise. + +2008-09-29 Nick Clifton + + * po/vi.po: Updated Vietnamese translation. + +2008-09-28 Alan Modra + + * elf.c (_bfd_elf_init_private_section_data): Tweak union copy. + (bfd_section_from_shdr): Don't change SHT_GROUP section name. + * elflink.c (section_signature): New function. + (_bfd_elf_section_already_linked): Use it. + +2008-09-19 Alan Modra + + * elf32-ppc.c (ppc_elf_finish_dynamic_sections): Handle vxworks + _GLOBAL_OFFSET_TABLE_ in .got.plt section. Add BFD_ASSERTs. + +2008-09-17 Bob Wilson + + * elf32-xtensa.c (elf_xtensa_check_relocs): Check for negative + refcount. + +2008-09-17 Jan Kratochvil + + PR 6893 - Do not consider FDEs for discarded sections as invalid. + * elf-eh-frame.c (_bfd_elf_parse_eh_frame): New REQUIRE_CLEARED_RELOCS. + Consider FDEs with cleared relocations as valid and ignorable. + +2008-09-16 H.J. Lu + + PR ld/6877 + * elflink.c (_bfd_elf_merge_symbol): Allow a common symbol to + override the function in a shared library. + +2008-09-16 Alan Modra + + PR 6844 + * elf32-ppc.c (SYM_VAL): Define. Use throughout to find symbol vma. + (ppc_elf_relocate_section): Correct GOT offset calculation. + (ppc_elf_finish_dynamic_symbol): Use PPC_HA and PPC_LO. + (ppc_elf_finish_dynamic_sections): Likewise. Error if + htab->elf.hgot symbol is not defined in htab->got section. + +2008-09-16 Alan Modra + + PR 6888 + * elf32-ppc.c (ppc_elf_relocate_section): Handle NULL symbol section + on R_PPC_TOC16, R_PPC_SDAREL16, R_PPC_EMB_SDA2REL, R_PPC_EMB_SDA21, + R_PPC_EMB_RELSDA, R_PPC_SECTOFF* relocs. + +2008-09-11 Jan Kratochvil + + Fix loading large elf64 binaries on 32bit hosts. + * configure.in: Call AC_SYS_LARGEFILE. + * config.in: Regenerate. + * configure: Regenerate. + +2008-09-08 Tom Tromey + + * elfxx-mips.c (mips16_stub_symndx) : Mark argument as + unused. + +2008-09-08 H.J. Lu + Daniel Jacobowitz + + PR ld/3191 + * dwarf2.c (struct adjusted_section): Renamed from struct + loadable_section. + (struct dwarf2_debug): Adjust for renaming. Add version field. + (read_attribute_value): Correctly handle DW_FORM_ref_addr for + DWARF3. + (find_abstract_instance_name): Pass a pointer to + attribute instead of offset. For DW_FORM_ref_addr, get the + entry at the offset from the .debug_info section. + (scan_unit_for_symbols): Update. + (parse_comp_unit): Allow DWARF3. Save the version. + (unset_sections): Update for renaming. + (place_sections): Likewise. Set new VMAs for DWARF sections + also. + +2008-09-08 Tristan Gingold + + * configure.in: Update version to 2.19.50 + * configure: Regenerated. + +2008-09-05 Daniel Jacobowitz + + * dwarf2.c: Change leading whitespace to tabs. + +2008-09-05 Tristan Gingold + + Add MacOSX 64 bits support. + * mach-o.h (bfd_mach_o_ppc_thread_flavour): Add + BFD_MACH_O_PPC_THREAD_STATE_64. + (bfd_mach_o_i386_thread_flavour): Add BFD_MACH_O_x86_THREAD_STATE64, + BFD_MACH_O_x86_FLOAT_STATE64, BFD_MACH_O_x86_EXCEPTION_STATE64, + BFD_MACH_O_x86_THREAD_STATE, BFD_MACH_O_x86_FLOAT_STATE, + BFD_MACH_O_x86_EXCEPTION_STATE. + (bfd_mach_o_load_command_type): Add + BFD_MACH_O_LC_SEGMENT_64, BFD_MACH_O_LC_ROUTINES_64, + BFD_MACH_O_LC_UUID. + (BFD_MACH_O_CPU_IS64BIT): Added. + (bfd_mach_o_cpu_type): Add BFD_MACH_O_CPU_TYPE_POWERPC_64, + BFD_MACH_O_CPU_TYPE_X86_64. + (bfd_mach_o_header): Add version field. + (bfd_mach_o_section) Add reserved3 field. + (bfd_mach_o_segment_command): Add initprot and maxprot fields. + + * mach-o.c (N_TEXT, N_DATA, N_BSS): Added. + (bfd_mach_o_version): New function. + (bfd_mach_o_valid): Handle 64bits cpus. + (bfd_mach_o_write_header): handler 64bits headers. + (bfd_mach_o_scan_write_section_32, bfd_mach_o_scan_write_section_64): + New functions (from bfd_mach_o_scan_write_section) to handle both + flavors. + (bfd_mach_o_scan_write_segment): Parameter wide added to support + both flavors. + (bfd_mach_o_write_contents): Support both flavors. + (bfd_mach_o_read_header): Ditto. + (bfd_mach_o_scan_read_section_32, bfd_mach_o_scan_read_section_64): + New functions (from bfd_mach_o_scan_read_section) to support both + flavors. + (bfd_mach_o_scan_read_symtab_symbol): Support both flavors. + (bfd_mach_o_scan_read_symtab): Ditto. + (bfd_mach_o_scan_read_segment): Parameter wide added to support + both flavors. + (bfd_mach_o_scan_read_segment_32, bfd_mach_o_scan_read_segment_64): + New functions to call bfd_mach_o_scan_read_segment. + (bfd_mach_o_flatten_sections): Support both flavors. + (bfd_mach_o_scan_start_address): Ditto. + (bfd_mach_o_scan): Ditto. + (bfd_mach_o_lookup_section): Ditto. + +2008-08-27 John David Anglin + + * elf-hppa.h (elf_hppa_reloc_final_type): Handle R_PARISC_GPREL64, + R_PARISC_SEGREL32 and R_PARISC_SEGREL64. + * som.c (som_fixup_formats): Add R_DATA_GPREL fixup. + (som_hppa_howto_table): Likewise. + (hppa_som_gen_reloc_type): In case R_HPPA_GOTOFF, detect R_DATA_GPREL + final type. + (som_write_fixups): Handle R_DATA_GPREL. + +2008-08-26 Nick Clifton + + * elf32-arm.c: Fix up comment describing Thumb to ARM interworking + stub. + +2008-08-25 Christophe Lyon + + * elf32-arm.c (arm_thumb_arm_v4t_short_branch_stub): Define. + (elf32_arm_stub_type): Add arm_thumb_arm_v4t_stub_short_branch. + (arm_type_of_stub): Handle armv4t short branches. Update + prototype. + (arm_stub_is_thumb): Handle arm_thumb_arm_v4t_stub_short_branch. + (arm_build_one_stub): Likewise. + (arm_size_one_stub): Likewise. + (elf32_arm_size_stubs): Use new arm_type_of_stub prototype. + (arm_map_one_stub): Handle arm_thumb_arm_v4t_stub_short_branch. + +2008-08-24 Andreas Schwab + + * elf-eh-frame.c (_bfd_elf_write_section_eh_frame): Do proper + extension when calculating difference of offsets. + +2008-08-24 Alan Modra + + * configure.in: Update a number of obsolete autoconf macros. + * aclocal.m4: Regenerate. + +2008-08-23 Andreas Schwab + + * opncls.c (find_separate_debug_file): Use the canonical + absolute name of the bfd object for finding the debug file in + the global debugfile directory. + +2008-08-22 Jakub Jelinek + + Fix PR ld/3290 regression for cross-files DW_FORM_ref_addr relocations. + * elflink.c (elf_link_add_object_symbols): Make debug symbols local + now only for non-RELOCATABLE targets. + +2008-08-20 Bob Wilson + + * elf-bfd.h (elf_object_id): Add XTENSA_ELF_TDATA. + * elf32-xtensa.c (elf_howto_table): Add TLS relocations. + (elf_xtensa_reloc_type_lookup): Likewise. + (TCB_SIZE): Define. + (elf_xtensa_link_hash_entry): New. + (GOT_UNKNOWN, GOT_NORMAL, GOT_TLS_GD, GOT_TLS_IE, GOT_TLS_ANY): Define. + (elf_xtensa_hash_entry): Define. + (elf_xtensa_obj_tdata): New. + (elf_xtensa_tdata): Define. + (elf_xtensa_local_got_tls_type): Define. + (elf_xtensa_local_tlsfunc_refcounts): Define. + (is_xtensa_elf): Define. + (elf_xtensa_mkobject): New. + (elf_xtensa_link_hash_table): Add tlsbase field. + (elf_xtensa_link_hash_newfunc): New. + (elf_xtensa_link_hash_table_create): Use elf_xtensa_link_hash_newfunc. + Create an entry for "_TLS_MODULE_BASE_" and save it in tlsbase field. + (elf_xtensa_copy_indirect_symbol): New. + (elf_xtensa_check_relocs): Rewrite to handle TLS relocations. + (elf_xtensa_gc_sweep_hook): Likewise. + (elf_xtensa_allocate_dynrelocs): Optimize away GOT entries for + TLSDESC_FN relocations when an IE reference is seen. + (elf_xtensa_allocate_local_got_size): Likewise. + (elf_xtensa_always_size_sections): New. + (dtpoff_base, tpoff): New. + (elf_xtensa_do_reloc): Handle TLS relocations. + (replace_tls_insn): New. + (IS_XTENSA_TLS_RELOC): Define. + (elf_xtensa_relocate_section): Handle TLS relocations. + (get_indirect_call_dest_reg): New. + (bfd_elf32_mkobject): Define. + (elf_backend_always_size_sections): New. + (elf_backend_copy_indirect_symbol): New. + * reloc.c (BFD_RELOC_XTENSA_TLSDESC_FN, BFD_RELOC_XTENSA_TLSDESC_ARG) + (BFD_RELOC_XTENSA_TLS_DTPOFF, BFD_RELOC_XTENSA_TLS_TPOFF) + (BFD_RELOC_XTENSA_TLS_FUNC, BFD_RELOC_XTENSA_TLS_ARG) + (BFD_RELOC_XTENSA_TLS_CALL): New. + * bfd-in2.h: Regenerate. + * libbfd.h: Regenerate. + +2008-08-18 Richard Sandiford + + * elfxx-mips.c (_bfd_mips_elf_copy_indirect_symbol): Copy MIPS16 + stub information. + +2008-08-17 Nick Clifton + + * elf32-arm.c: Tidy up the code. + (bfd_elf32_arm_allocate_interworking_sections): Move common code + into... + (arm_allocate_glue_section_space): ... New function. + (bfd_elf32_arm_add_glue_sections_to_bfd): Move common code + into... + (arm_make_glue_section): ... New function. + + * elfxx-mips.c (_bfd_mips_elf_check_relocs): Handle the situation + where the sym_hashes are not available. + +2008-08-17 Alan Modra + + * bfd.c (struct _bfd): Correct outsymbols comment. + * bfd-in2.h: Regenerate. + * linker.c (bfd_generic_link_read_symbols): Renamed from.. + (generic_link_read_symbols): ..this, and made global. + +2008-08-15 Alan Modra + + PR 6526 + * configure.in: Invoke AC_USE_SYSTEM_EXTENSIONS. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + +2008-08-14 Jaka Močnik + + * coffgen.c (coff_find_nearest_line): Correct cached line index. + +2008-08-12 Alan Modra + + * elf32-ppc.c (allocate_dynrelocs): Ignore dyn_relocs when + !dynamic_sections_created. Don't make symbols with got + references dynamic if !dynamic_sections_created. + * elf64-ppc.c (allocate_dynrelocs): Likewise. Alloc dynamic + relocs on undefined symbols. + (ppc64_elf_relocate_section): Allow dynamic relocs on + undefined symbols. + +2008-08-11 Alan Modra + + * elf64-ppc.c (toc_adjusting_stub_needed): Any call via the plt + needs r2 valid, not just those to external syms. + +2008-08-09 Pedro Alves + + * archive.c (_bfd_archive_bsd_update_armap_timestamp): Cast stat + st_mtime to long before comparison. + +2008-08-08 Anatoly Sokolov + + * archures.c (bfd_mach_avr25, bfd_mach_avr31, bfd_mach_avr35, + bfd_mach_avr51): New. + * bfd-in2.h: Regenerate. + * cpu-avr.c (arch_info_struct): Add avr25, avr31, avr35, and avr51 + architectures. Change comments to match architecture comments in GCC. + (compatible): Add test for new AVR architectures. + * elf32-avr.c (bfd_elf_avr_final_write_processing): Recognize + bfd_mach_avr25, bfd_mach_avr31, bfd_mach_avr35 and bfd_mach_avr51. + (elf32_avr_object_p): Recognize E_AVR_MACH_AVR25, E_AVR_MACH_AVR31, + E_AVR_MACH_AVR35 and E_AVR_MACH_AVR51. + + +2008-08-08 Richard Sandiford + Daniel Jacobowitz + Catherine Moore + Mark Shinwell + Maxim Kuvyrkov + + * elf32-mips.c (mips_vxworks_copy_howto_rela): Replace with... + (elf_mips_copy_howto): ...this howto. Clear the size fields. + (mips_vxworks_jump_slot_howto_rela): Replace with... + (elf_mips_jump_slot_howto): ...this howto. + (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY + and BFD_RELOC_MIPS_JUMP_SLOT. + (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and + "R_MIPS_JUMP_SLOT". + (mips_elf32_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. + (elf_backend_plt_readonly): Define. + (elf_backend_plt_sym_val): Define for non-VxWorks targets. + (mips_vxworks_bfd_reloc_type_lookup): Delete. + (mips_vxworks_bfd_reloc_name_lookup): Likewise. + (mips_vxworks_rtype_to_howto): Likewise. + (elf_backend_want_dynbss): Don't define for VxWorks. + (elf_backend_plt_readonly): Likewise. + (bfd_elf32_bfd_reloc_type_lookup): Likewise. + (bfd_elf32_bfd_reloc_name_lookup): Likewise. + (elf_backend_mips_rtype_to_howto): Likewise. + (elf_backend_adjust_dynamic_symbol): Likewise. + (elf_backend_got_symbol_offset): Don't define. + * elfn32-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. + (bfd_elf32_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY + and BFD_RELOC_MIPS_JUMP_SLOT. + (bfd_elf32_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and + "R_MIPS_JUMP_SLOT". + (mips_elf32_n32_rtype_to_howto): Handle R_MIPS_COPY and + R_MIPS_JUMP_SLOT. + (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) + (elf_backend_plt_sym_val): Define. + * elf64-mips.c (elf_mips_copy_howto, elf_mips_jump_slot_howto): New. + (bfd_elf64_bfd_reloc_type_lookup): Handle BFD_RELOC_MIPS_COPY + and BFD_RELOC_MIPS_JUMP_SLOT. + (bfd_elf64_bfd_reloc_name_lookup): Handle "R_MIPS_COPY" and + "R_MIPS_JUMP_SLOT". + (mips_elf64_rtype_to_howto): Handle R_MIPS_COPY and R_MIPS_JUMP_SLOT. + (elf_backend_rela_plts_and_copies_p, elf_backend_plt_readonly) + (elf_backend_plt_sym_val): Define. + * elfxx-mips.h (_bfd_mips_vxworks_adjust_dynamic_symbol): Delete. + (_bfd_mips_elf_use_plts_and_copy_relocs, _bfd_mips_elf_init_stubs) + (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): Declare. + * elfxx-mips.c (mips_elf_la25_stub): New structure. + (LA25_LUI, LA25_J, LA25_ADDIU): New macros. + (mips_elf_link_hash_entry): Add "la25_stubs", "has_static_relocs" + and "has_nonpic_branches" fields. Remove "is_relocation_target" and + "is_branch_target". + (mips_elf_link_hash_table): Add blank lines. Add + "use_plts_and_copy_relocs", "reserved_gotno", "strampoline", + "la25_stubs" and "add_stub_section" fields. + (mips_htab_traverse_info): New structure. + (PIC_OBJECT_P, MIPS_ELF_LOAD_WORD): New macros. + (MIPS_RESERVED_GOTNO): Delete. + (mips_o32_exec_plt0_entry, mips_n32_exec_plt0_entry) + (mips_n64_exec_plt0_entry, mips_exec_plt_entry): New tables. + (mips_elf_link_hash_newfunc): Update after the changes to + mips_elf_link_hash_entry. + (mips_elf_check_mips16_stubs): Replace the DATA parameter with + an INFO parameter. Don't look through warnings symbols here; + do it in mips_elf_check_symbols instead. + (mips_elf_create_stub_symbol): New function. + (mips_elf_la25_stub_hash, mips_elf_la25_stub_eq): New functions. + (_bfd_mips_elf_init_stubs, mips_elf_local_pic_function_p): Likewise. + (mips_elf_add_la25_intro, mips_elf_add_la25_trampoline): Likewise. + (mips_elf_add_la25_stub, mips_elf_check_symbols): New functions. + (mips_elf_gotplt_index): Check for VxWorks. + (mips_elf_output_dynamic_relocation): Take the relocation index + as an extra parameter. Do not increment reloc_count here. + (mips_elf_initialize_tls_slots): Update the calls to + mips_elf_output_dynamic_relocation accordingly. + (mips_elf_multi_got): Use htab->reserved_gotno instead of + MIPS_RESERVED_GOTNO. + (mips_elf_create_got_section): Don't allocate reserved GOT + entries here. Unconditionally create .got.plt, but don't + set its alignment here. + (mips_elf_relocation_needs_la25_stub): New function. + (mips_elf_calculate_relocation): Redirect branches and jumps to + a non-PIC stub if one exists. Check !h->has_static_relocs instead + of !htab->is_vxworks when deciding whether to create dynamic + relocations for R_MIPS_32, R_MIPS_REL32 and R_MIPS_64. + (_bfd_mips_elf_create_dynamic_sections): Unconditionally call + _bfd_elf_create_dynamic_sections. Unconditionally set up + htab->splt and htab->sdynbss. Set htab->srelplt to ".rel.plt" + if !htab->is_vxworks. Add non-VxWorks values of + htab->plt_header_size and htab->plt_entry_size. + (_bfd_mips_elf_check_relocs): Set pointer_equality_needed for + non-branch static relocations. Set has_nonpic_branches when an la25 + stub might be required. Set can_make_dynamic_p to TRUE if R_MIPS_32, + R_MIPS_REL32 and R_MIPS_64 relocations can be made dynamic, + rather than duplicating the condition. Do not make them dynamic + for read-only sections in non-PIC executable objects. + Do not protect this code with dynobj == NULL || htab->sgot == NULL; + handle each group of cases separately. Add a default case that + sets has_static_relocs for non-GOT relocations that cannot be + made dynamic. Don't set is_relocation_target and is_branch_target. + Reject non-PIC static relocations in shared objects. + (_bfd_mips_vxworks_adjust_dynamic_symbol): Fold into... + (_bfd_mips_elf_adjust_dynamic_symbol): ...here, using + htab->use_plts_and_copy_relocs instead of htab->is_vxworks + to select PLT and copy-reloc handling. Set the alignment of + .plt and .got.plt when allocating the first entry. Generalize + code to handle REL as well as RELA sections and 64-bit as well as + 32-bit GOT entries. Complain if we find a static-only reloc + against an externally-defined symbol and if we cannot create + dynamic relocations for it. Allocate copy relocs using + mips_elf_allocate_dynamic_relocations on non-VxWorks targets. + Set possibly_dynamic_relocs to 0 when using PLTs or copy relocs. + Skip reserved .got.plt entries. + (_bfd_mips_elf_always_size_sections): Use mips_elf_check_symbols + instead of mips_elf_check_mips16_stubs to process each symbol. + Do the traversal for relocatable objects too. + (mips_elf_lay_out_got): Use htab->reserved_gotno instead of + MIPS_RESERVED_GOTNO. + (_bfd_mips_elf_size_dynamic_sections): Exclude sdynbss if it + is empty. Extend the DT_PLTREL, DT_JMPREL and DT_PLTRELSZ handling + to non-VxWorks targets. Only add DT_REL{,A}, DT_REL{,A}SZ and + DT_REL{,A}ENT if .rel.dyn is nonempty. Create a symbol for the + PLT. Allocate a nop at the end of the PLT. Allocate DT_MIPS_PLTGOT. + (mips_elf_create_la25_stub_info): New function. + (_bfd_mips_elf_finish_dynamic_symbol): Write out PLT entries + and copy relocs where necessary. Check pointer_equality_needed. + (mips_finish_exec_plt): New function. + (_bfd_mips_elf_finish_dynamic_sections): Always set DT_PLTGOT + to the beginning of htab->sgot. Use htab->reserved_gotno instead + of MIPS_RESERVED_GOTNO. Assert htab->use_plts_and_copy_relocs + instead of htab->is_vxworks for DT_PLTREL, DT_PLTRELSZ and DT_JMPREL. + Set DT_PLTREL to DT_REL instead of DT_RELA on non-VxWorks targets. + Use mips_finish_exec_plt to create non-VxWorks PLT headers. Set + DT_MIPS_PLTGOT. + (_bfd_mips_elf_copy_indirect_symbol): Copy has_static_relocs + from the indirect symbol to the direct symbol. Also copy + has_nonpic_branches for indirect symbols. + (_bfd_mips_elf_get_target_dtag): Handle DT_MIPS_PLTGOT and + DT_MIPS_RWPLT. + (_bfd_mips_elf_link_hash_table_create): Initialize the new + mips_elf_link_hash_table fields. + (_bfd_mips_vxworks_link_hash_table_create): Set + use_plts_and_copy_relocs to TRUE. Use TRUE rather than 1 + when setting is_vxworks. + (_bfd_mips_elf_use_plts_and_copy_relocs): New function. + (_bfd_mips_elf_final_link): Call mips_elf_create_la25_stub for + each la25_stub. + (_bfd_mips_elf_merge_private_bfd_data): Treat dynamic objects + as PIC. Generalize message about linking PIC and non-PIC. + (_bfd_mips_elf_plt_sym_val, _bfd_mips_post_process_headers): New + functions. + * reloc.c: Update comment near BFD_RELOC_MIPS_JUMP_SLOT. + * bfd-in2.h: Regenerated. + +2008-08-08 Alan Modra + + * elf.c (bfd_elf_get_elf_syms): Don't leak memory on error. + * elflink.c (_bfd_elf_link_read_relocs): bfd_release on error. + (elf_link_add_object_symbols): Don't leak memory on error. + (bfd_elf_size_dynsym_hash_dynstr): Likewise. + (elf_fixup_link_order): Free sections. + +2008-08-07 Richard Sandiford + + * elf-bfd.h (elf_backend_data): Add a "rela_plts_and_copies_p" field. + * elfxx-target.h (elf_backend_rela_plts_and_copies_p): New macro. + (elfNN_bed): Use it. + * elf.c (_bfd_elf_get_synthetic_symtab): Use rela_plts_and_copies_p + instead of default_use_rela_p to choose between ".rel.plt" and + ".rela.plt". + * elflink.c (_bfd_elf_create_dynamic_sections): Use + rela_plts_and_copies_p instead of default_use_rela_p to choose + between ".rel.plt" and ".rela.plt", and between ".rel.bss" and + ".rela.bss". + +2008-08-07 Richard Sandiford + + * elf-bfd.h (MIPS_ELF_TDATA): New elf_object_id. + * elf32-mips.c (bfd_elf32_mkobject): Define. + * elf64-mips.c (bfd_elf64_mkobject): Likewise. + * elfn32-mips.c (bfd_elf32_mkobject): Likewise. + * elfxx-mips.h (_bfd_mips_elf_mkobject): Declare. + * elfxx-mips.c (is_mips_elf): New macro. + (_bfd_mips_elf_mkobject): New function. + (_bfd_mips_elf_final_link): Use is_mips_elf. + (_bfd_mips_elf_merge_private_bfd_data): Likewise. + +2008-08-07 Richard Sandiford + + * elfxx-mips.c (mips_elf_record_relocs): Defer allocation of a + global GOT entry when deferring allocation of dynamic relocations. + (allocate_dynrelocs): When allocating deferred dynamic relocations, + also do the deferred allocation of a GOT entry. + +2008-08-07 Richard Sandiford + + * elfxx-mips.c (mips_got_info): Add a "reloc_only_gotno" field. + (mips_elf_got_section): Delete. + (mips_elf_sort_hash_table): Use g->reloc_only_gotno to decide + how many reloc-only entries there are. + (mips_elf_count_got_symbols): Adjust g->reloc_only_gotno as + well as g->global_gotno. + (mips_elf_make_got_per_bfd): Initialize reloc_only_gotno. + (mips_elf_multi_got): Likewise. Use gg->reloc_only_gotno + rather than gg->assigned_gotno to store the number of + reloc-only GOT entries. + (mips_elf_create_got_section): Remove the MAYBE_EXCLUDE parameter. + Initialize reloc_only_gotno. + (mips_elf_calculate_relocation): Check htab->got_info instead of + dynobj when deciding whether to call mips_elf_adjust_gp, + (_bfd_mips_elf_create_dynamic_sections): Adjust the call + to mips_elf_create_got_section. + (mips_elf_record_relocs): Likewise. Remove redundant + "dynobj == NULL" code. Do not use mips_elf_create_got_section + or mips_elf_record_global_got_symbol for R_MIPS_32, R_MIPS_REL32 + and R_MIPS_64; limit global_got_area to GGA_RELOC_ONLY instead. + (_bfd_mips_elf_finish_dynamic_symbol): Use htab->sgot instead + of mips_elf_got_section. + (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise. + (_bfd_mips_elf_finish_dynamic_sections): Likewise. + Move the initial assignment of G to the block that uses it; + it is used for an unrelated purpose later. + +2008-08-07 Richard Sandiford + + * elfxx-mips.c (count_section_dynsyms): Move before the new first use. + (mips_elf_sort_hash_table): Take the output bfd as a parameter. + Remove the MAX_LOCAL parameter. Exit early if there are no + dynamic symbols, if there is no dynobj, or if there is no + GOT section. Use count_section_dynsyms instead of MAX_LOCAL. + Assert == rather than <= when checking hsd.max_unref_got_dynindx. + Also assert that g->global_gotno is right. + (mips_elf_count_forced_local_got_symbols): Rename to... + (mips_elf_count_got_symbols): ...and count global GOT entries too. + Set the global_got_area of a forced-local GGA_RELOC_ONLY symbol + to GGA_NONE. + (mips_elf_multi_got): Don't sort the symbol table. + (mips_elf_lay_out_got): Likewise. Use mips_elf_count_got_symbols + to count the number of global GOT entries. + (_bfd_mips_elf_final_link): Unconditionally call + mips_elf_sort_hash_table. + +2008-08-07 Richard Sandiford + + * elfxx-mips.c (GGA_NORMAL, GGA_RELOC_ONLY, GGA_NONE): New macros. + (mips_elf_link_hash_entry): Add a "global_got_area" field. + (mips_elf_link_hash_newfunc): Initialize it. + (mips_elf_sort_hash_table_f): Use h->global_got_area instead of + h->root.got.offset. Do not handle forced_local symbols specially. + (mips_elf_record_global_got_symbol): Set h->global_got_area + instead of h->root.got.offset. + (mips_elf_recreate_got): Assert that h->global_got_area == GGA_NONE + for indirect and warning symbols. + (mips_elf_count_forced_local_got_symbols): Change the argument + from a "elf_link_hash_entry" to "mips_elf_link_hash_entry". + Use and set h->global_got_area instead of h->root.got.offset. + Set it to GGA_NONE for all forced-local symbols. + (mips_elf_set_global_got_offset): Set h->global_got_area + instead of h->root.got.offset. Use g->global_got_area instead + of a combination of dynindx, forced_local and tls_type. + (mips_elf_multi_got): Remove disabled code. Pass GGA_* values to + mips_elf_set_global_got_offset. + (mips_elf_lay_out_got): Use mips_elf_link_hash_traverse instead + of elf_link_hash_traverse. + (_bfd_mips_elf_copy_indirect_symbol): Copy the indirect symbol's + global_got_area to the direct symbol if the latter's value is higher. + Set the indirect symbol's area to GGA_NONE. + +2008-08-07 Richard Sandiford + + * elf32-mips.c (elf_backend_hide_symbol): Delete. + * elfn32-mips.c (elf_backend_hide_symbol): Likewise. + * elf64-mips.c (elf_backend_hide_symbol): Likewise. + * elfxx-mips.h (elf_backend_hide_symbol): Likewise. + * elfxx-mips.c (mips_elf_link_hash_entry): Remove "forced_local" + and add "needs_lazy_stub". + (mips_elf_link_hash_newfunc): Update accordingly. + (mips_elf_link_hash_table): Remove "computed_got_sizes" and + add "lazy_stub_count". + (_bfd_mips_elf_link_hash_table_create): Update accordingly. + (mips_elf_output_extsym): Use hd->needs_lazy_stub to detect + cases where a lazy stub is being used. + (mips_elf_sort_hash_table_f): Use h->root.forced_local instead + of h->forced_local. + (mips_elf_record_global_got_symbol): Use _bfd_elf_link_hash_hide_symbol + instead of _bfd_mips_elf_hide_symbol. Do not increment local_gotno + here. + (mips_elf_allocate_dynamic_relocations): Move before new first use. + (mips_elf_check_recreate_got, mips_elf_recreate_got): New functions. + (mips_elf_resolve_final_got_entries): Move earlier in file. Make at + most two passes over the hash table. Use mips_elf_check_recreate_got + to see if there are any indirect or warning entries and + mips_elf_recreate_got to create a new GOT without them. + Return a boolean success value. + (mips_elf_count_forced_local_got_entries): New function. + (mips_elf_make_got_per_bfd): Check h->root.forced_local instead of + h->forced_local. + (mips_elf_set_global_got_offset): Likewise. + (mips_elf_set_no_stub): Replace with... + (mips_elf_forbid_lazy_stubs): ...this new function. + (mips_elf_resolve_final_got_entry): Delete. + (mips_elf_multi_got): Fix formatting. Use mips_elf_forbid_lazy_stubs + instead of mips_elf_set_no_stub. Move the code that sets + global offsets and allocates dynamic relocations from the main + _bfd_mips_elf_size_dynamic_sections loop to here. + (_bfd_mips_elf_adjust_dynamic_symbol): Do not allocate room in + .MIPS.stubs here; just set hmips->needs_lazy_stub and increment + htab->lazy_stub_count. + (_bfd_mips_elf_always_size_sections): Move the stub-estimation + code to mips_elf_estimate_stub_size and the GOT-sizing code to + mips_elf_lay_out_got. Do not call these functions here. + (mips_elf_estimate_stub_size): New function, split + out from _bfd_mips_elf_always_size_sections. Call + mips_elf_resolve_final_got_entries earlier. Count the number + of forced-local entries. Do not add stub sizes to loadable_size; + after this patch, the stub sizes are already included in the main + estimate. Allocate dynamic relocations here rather than in the + main _bfd_mips_elf_size_dynamic_sections loop. + (mips_elf_estimate_stub_size): New function, split out from + _bfd_mips_elf_always_size_sections. + (mips_elf_allocate_lazy_stub): New function. + (mips_elf_lay_out_lazy_stubs): Likewise. + (_bfd_mips_elf_size_dynamic_sections): Call mips_elf_estimate_stub_size, + mips_elf_lay_out_got and mips_elf_lay_out_lazy_stubs. Do not handle + the allocation of sreldyn specially. + (_bfd_mips_elf_hide_symbol): Delete. + +2008-08-07 Richard Sandiford + + * elfxx-mips.c (allocate_dynrelocs): Ignore indirect and warning + symbols. + +2008-08-06 Richard Sandiford + + * elfxx-mips.c (mips_elf_link_hash_entry): Move bfd_boolean + fields to the end of the structure and make them single-bit + bitfields. + (mips_elf_link_hash_newfunc): Make the initialization statements + follow the new field order. + +2008-08-06 Richard Sandiford + + * elfxx-mips.c (_mips_elf_section_data): Remove the "u.got_info" field. + (mips_elf_link_hash_table): Add "sgot" and "got_info" fields. + (_bfd_mips_elf_link_hash_table_create): Initialize them. + (mips_elf_got_section): Always apply the !maybe_excluded behavior. + (mips_elf_got_info): Delete. + (mips_elf_initialize_tls_slots): Remove the DYNOBJ local variable. + Adjust the call to mips_elf_got_section. + (mips_elf_local_got_index): Don't call mips_elf_got_info. + Update the call to mips_elf_create_local_got_entry. + Use htab->got_info. + (mips_elf_global_got_index): Don't call mips_elf_got_info; + use htab->got_info and htab->sgot instead. + (mips_elf_got_page): Don't call mips_elf_got_info. Update the + call to mips_elf_create_local_got_entry. + (mips_elf_got16_entry): Likewise. + (mips_elf_got_offset_from_index): Replace with DYNOBJ parameter + with an INFO parameter. Don't call mips_elf_got_info; use htab->sgot + and htab->got_info instead. + (mips_elf_create_local_got_entry): Remove the GG and SGOT parameters. + Use htab->sgot and htab->got_info. + (mips_elf_sort_hash_table): Remove the DYNOBJ local variable. + Don't call mips_elf_got_info; use htab->got_info instead. + (mips_elf_record_global_got_symbol): Turn G from a paramter to + a local variable and read it from htab->got_info. + (mips_elf_record_local_got_symbol): Replace the G parameter with + an INFO parameter. Make G a local variable and read it from + htab->got_info instead. + (mips_elf_record_got_page_entry): Likewise. + (mips_elf_multi_got): Remove the G parameter and make it a local + variable instead. Read it from htab->got_info. + (mips_elf_create_got_section): Cache the GOT section in htab->sgot. + Store the GOT information in htab->got_info. + (mips_elf_calculate_relocation): Don't call mips_elf_got_section + and mips_elf_got_info; use htab->sgot and htab->got_info instead. + Adjust the calls to mips_elf_got_offset_from_index and + mips_elf_adjust_gp. + (_bfd_mips_elf_check_relocs): Remove the G and SGOT local variables. + Adjust the calls to mips_elf_record_local_got_symbol, + mips_elf_record_global_got_symbol and mips_elf_record_got_page_entry. + Use htab->sgot. + (_bfd_mips_elf_always_size_sections): Remove the DYNOBJ local variable. + Don't call mips_elf_got_info; use htab->sgot and htab->got_info instead. + Update the call to mips_elf_multi_got. + (_bfd_mips_elf_size_dynamic_sections): Don't call mips_elf_got_info; + use htab->got_info instead. + (_bfd_mips_elf_finish_dynamic_symbol): Update the call to + mips_elf_got_section. Get the got_info from the hash table + rather than the GOT section. + (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise. + (_bfd_mips_elf_finish_dynamic_sections): Likewise. + (_bfd_mips_elf_hide_symbol): Don't call mips_elf_got_section; + get the got_info from the hash table instead. Remove the GOT + local variable. + (_bfd_mips_elf_final_link): Likewise. Also remove the DYNOBJ + local variable. + +2008-08-06 Richard Sandiford + + * elfxx-mips.c (mips_elf_link_hash_table): Add an "sstubs" field. + (_bfd_mips_elf_create_dynamic_sections): Use it to cache the stubs + section. Don't check whether the section already exists. + (_bfd_mips_elf_adjust_dynamic_symbol): Use htab->sstubs. + (_bfd_mips_elf_finish_dynamic_symbol): Likewise. + (_bfd_mips_elf_finish_dynamic_sections): Likewise. + (_bfd_mips_elf_size_dynamic_sections): Likewise. Don't add the + dummy stub to an empty section. + (_bfd_mips_elf_link_hash_table_create): Initialize the "sstubs" field. + +2008-08-06 Richard Sandiford + + * reloc.c (BFD_RELOC_MIPS16_GOT16, BFD_RELOC_MIPS16_CALL16): Declare. + * libbfd.h, bfd-in2.h: Regenerate. + * elf32-mips.c (elf_mips16_howto_table_rel): Fill in reserved + R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. + (mips16_reloc_map): Add mappings. + * elf64-mips.c (mips16_elf64_howto_table_rel): Fill in reserved + R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. + (mips16_elf64_howto_table_rela): Likewise. + (mips16_reloc_map): Add mappings. + * elfn32-mips.c (elf_mips16_howto_table_rel): Fill in reserved + R_MIPS16_GOT16 and R_MIPS16_CALL16 entries. + (elf_mips16_howto_table_rela): Likewise. + (mips16_reloc_map): Add mappings. + * elfxx-mips.c (mips_elf_create_shadow_symbol): New function. + (section_allows_mips16_refs_p): Likewise. + (mips16_stub_symndx): Likewise. + (mips_elf_check_mips16_stubs): Treat the data argument as a + bfd_link_info. Mark every dynamic symbol as needing MIPS16 stubs + and create a "shadow" symbol for the original MIPS16 definition. + (mips16_reloc_p, got16_reloc_p, call16_reloc_p, hi16_reloc_p) + (lo16_reloc_p, mips16_call_reloc_p): New functions. + (_bfd_mips16_elf_reloc_unshuffle): Use mips16_reloc_p to generalize + relocation checks. + (_bfd_mips16_elf_reloc_shuffle): Likewise. + (_bfd_mips_elf_lo16_reloc): Handle R_MIPS16_GOT16. + (mips_elf_got16_entry): Add comment. + (mips_elf_calculate_relocation): Use hi16_reloc_p, + lo16_reloc_p, mips16_call_reloc_p, call16_reloc_p and got16_reloc_p + to generalize relocation checks. Use section_allows_mips16_refs_p + instead of mips16_stub_section_p. Handle R_MIPS16_CALL16 and + R_MIPS16_GOT16, allowing the former to refer directly to a + MIPS16 function if its stub is not needed. + (mips16_stub_section_p): Delete. + (_bfd_mips_elf_symbol_processing): Convert odd-valued function + symbols into even MIPS16 symbols. + (mips_elf_add_lo16_rel_addend): Use mips16_reloc_p to generalize + a relocation check. + (_bfd_mips_elf_check_relocs): Calculate "bed" and "rel_end" + earlier in the function. Use mips16_stub_symndx to identify + the target function. Avoid out-of-bounds accesses when the + stub has no relocations; report an error instead. Use + section_allows_mips16_refs_p instead of mips16_stub_section_p. + Use mips16_call_reloc_p and got16_reloc_p to generalize relocation + checks. Handle R_MIPS16_CALL16 and R_MIPS16_GOT16. Don't create + dynamic relocations for absolute references to __gnu_local_gp. + (_bfd_mips_elf_always_size_sections): Pass a bfd_link_info as + the argument to mips_elf_check_mips16_stubs. Generalize comment. + (_bfd_mips_elf_relocate_section): Use hi16_reloc_p and got16_reloc_p + to generalize relocation checks. + (_bfd_mips_elf_finish_dynamic_symbol): If a dynamic MIPS16 function + symbol has a non-MIPS16 stub, redirect the symbol to the stub. + Fix an overly long line. Don't give dynamic symbols type STO_MIPS16. + (_bfd_mips_elf_gc_sweep_hook): Handle R_MIPS16_CALL16 and + R_MIPS16_GOT16. + +2008-08-06 Alan Modra + + * elf32-ppc.c (ppc_elf_relax_section): Clear R_PPC_PLTREL24 addend. + (ppc_elf_relocate_section ): Don't bother here. + +2008-08-05 Alan Modra + Jaka Močnik + + * coffcode.h (coff_slurp_line_table): bfd_alloc lineno_cache first + so that we don't inadvertently free it. Use bfd_alloc for sort + arrays, and memcpy sorted line table. + +2008-08-04 Alan Modra + + * elf32-spu.c (spu_elf_auto_overlay): Use the maximum possible + if --fixed-space request is too large. + +2008-08-04 Alan Modra + + * Makefile.am (SRC-POTFILES.in, BLD-POTFILES.in): Set LC_ALL=C. + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2008-08-02 Alan Modra + + * elf32-spu.c (mark_overlay_section): Move code calculating + max_overlay_size to correct block. + (spu_elf_auto_overlay): Don't use %x in einfo error message. + +2008-08-01 Alan Modra + Jan Kratochvil + + * elfcore.h (elf_core_file_p): Ensure we have a backend match + with the correct arch size before rejecting the generic fallback. + * elfcode.h (elf_object_p): Likewise. Ensure arch size matches + before accepting a target. + +2008-08-01 Alan Modra + + PR 6774 + * elf.c (rewrite_elf_program_header): Don't wrap p_paddr to + include file or program headers. + +2008-07-30 Alan Modra + + * coff-ppc.c, coffgen.c, ecoff.c, ecofflink.c, elf.c, elf32-frv.c, + elf32-iq2000.c, elf32-m32c.c, elf32-mep.c, elf32-mt.c, + elf32-sh-symbian.c, elf64-hppa.c, mach-o.c, peXXigen.c, pef.c, + ppcboot.c, vms-misc.c, xsym.c: Silence gcc warnings. + +2008-07-28 Daniel Jacobowitz + + * elfxx-mips.c (mips_elf_calculate_relocation): Avoid generating + relocations for undefined weak symbols with non-default visibility. + (_bfd_mips_elf_check_relocs): Use possibly_dynamic_relocs for + global symbols in shared libraries. + (allocate_dynrelocs): New function. + (_bfd_mips_elf_adjust_dynamic_symbol): Do not handle + possibly_dynamic_relocs here. + (_bfd_mips_elf_size_dynamic_sections): Call allocate_dynrelocs. + +2008-07-28 Alexandre Oliva + + * elf32-i386.c (struct elf_i386_link_hash_table): Added field + tls_module_base. + (elf_i386_link_hash_table_create): Initialize it. + (elf_i386_always_size_sections): Set it. + (set_tls_module_base): New. + (elf_i386_relocate_sections): Call it. + * elf64-x86-64.c (struct elf64_x86_64_link_hash_table): Added + field tls_module_base. + (elf64_x86_64_link_hash_table_create): Initialize it. + (elf64_x86_64_always_size_sections): Set it. + (set_tls_module_base): New. + (elf64_x86_64_relocate_sections): Call it. + Reported by Cary Coutant + +2008-07-28 Ineiev + + * elf32-arm.c (arm_map_one_stub): Declare variables at beginning + of block. + * elf32-avr.c (get_local_syms): Likewise. + +2008-07-28 Alan Modra + + PR 6769 + * bfd-in.h (BFD_VMA_FMT): Define. + (printf_vma, sprintf_vma): Use the above. + (_bfd_int64_low, _bfd_int64_high): Delete. + * bfd-in2.h: Regenerate. + +2008-07-27 Alan Modra + + * elf.c (_bfd_elf_make_section_from_shdr): Ignore return from + elf_parse_notes. Use bfd_malloc_and_get_section. + (elf_parse_notes): Validate note namesz and descsz. + +2008-07-26 Michael Eager + + * elf32-ppc.c (ppc_elf_merge_obj_attributes): Check compatibility + between single-float, double-float, and soft-float. + +2008-07-24 Daniel Jacobowitz + + * elf32-mips.c (elf_backend_write_section): Define. + +2008-07-24 Nick Clifton + + * elf.c (_bfd_elf_map_sections_to_segments): Catch off by one + error assigning sections to segments. + +2008-07-22 Nick Clifton + + * elf.c (_bfd_elf_map_sections_to_segments): Allow sections in + adjoining pages to be included in the same segment. + +2008-07-22 Simon Baldwin + + * elflink.c (elf_link_output_extsym): Set st_size to zero for + symbols from dynamic libraries. + +2008-07-21 H.J. Lu + + PR ld/4424 + * elflink.c (_bfd_elf_merge_symbol): Call bed->relocs_compatible + to check if 2 inputs are compatible. + +2008-07-21 Sterling Augustine + + * elf.c (assign_file_positions_for_load_sections): Print vma in + error message about overlapping section vmas. + +2008-07-21 H.J. Lu + + PR ld/6747 + * elf32-frv.c (elf32_frv_relocate_section): Revert the change + for PR ld/6446 checked in by accident on May 21, 2008. + +2008-07-21 Nick Clifton + + * coff-sh.c (bfd_pe_print_pdata): Define to NULL for non + COFF_WITH_PE based SH ports. + * libpei.h (_bfd_XX_print_ce_compressed_pdata): Prototype. + * arm-wince-pe.c (bfd_pe_print_pdata): Use + _bfd_pe_print_ce_compressed_pdata. + (slurp_symcache, cleanup_syms, pe_print_ce_compressed_pdata): Move + to... + * peXXigen.c: ... here and rename pe_print_ce_compressed_pdata to + _bfd_XX_print_ce_compressed_pdata. + +2008-07-21 Alan Modra + + * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame): Drop + unwanted zero terminators. + +2008-07-21 Alan Modra + + * elf32-spu.c (spu_elf_relocate_section): Expand + RELOC_FOR_GLOBAL_SYMBOL. Don't warn about undefined symbols for + R_SPU_PPU32 and R_SPU_PPU64 relocations. + +2008-07-21 Luis Machado + + * elf-bfd.h: Declare elfcore_write_ppc_vsx. + * elf.c (elfcore_grok_ppc_vsx): New function. + (elfcore_write_ppc_vsx): New function + (elfcore_grok_note): Handle VSX notes. + (elfcore_write_register_note): Handle VSX notes. + +2008-07-18 Joseph Myers + + * bfd-in.h (bfd_elf32_arm_set_target_relocs): Add new parameter. + * bfd-in2.h: Regenerate. + * elf32-arm.c (struct elf_arm_obj_tdata): Add field + no_wchar_size_warning. + (bfd_elf32_arm_set_target_relocs): Add new parameter + no_wchar_warn. + (elf32_arm_merge_eabi_attributes): Give a warning, not an error, + for conflicting wchar_t attributes. Do not warn if + --no-wchar-size-warning. Make diagnostic text more specific. + +2008-07-18 H.J. Lu + + PR ld/6748 + * elf32-arm.c (elf32_arm_link_hash_table_create): Initialize + new fields added for ARM long call support. + +2008-07-18 Danny Backx + + * pe-arm-wince.c (pe_print_compressed_pdata): Define new function to + print compressed pdata structure as described on MSDN. This only + applies to a limited set of architectures (ARM, SH4). + (slurp_symtab, my_symbol_for_address): Define static helper + functions for pe_print_compressed_pdata. + * coffcode.h (bfd_coff_backend_data): Add _bfd_coff_print_pdata field. + (bfd_coff_have_print_pdata, bfd_coff_print_pdata): Define. + * bfd/peXXigen.c (_bfd_XX_print_private_bfd_data_common): Add check on + bfd_coff_backend_data, call the function if non-null. + * pei-mcore.c: Add target dependent initialisation for + bfd_coff_backend_data. + * coff-sh.c: Likewise. + * coff64-rs6000.c: Likewise. + * coff-rs6000.c: Likewise. + * libcoff-in.h: Likewise. + * cf-i386lynx.c: Likewise. + * coff-alpha.c: Likewise. + * coff-apollo.c: Likewise. + * coff-arm.c: Likewise. + * coff-aux.c: Likewise. + * coff-h8300.c: Likewise. + * coff-h8500.c: Likewise. + * coff-i386.c: Likewise. + * coff-i860.c: Likewise. + * coff-i960.c: Likewise. + * coff-ia64.c: Likewise. + * coff-m68k.c: Likewise. + * coff-m88k.c: Likewise. + * coff-maxq.c: Likewise. + * coff-mips.c: Likewise. + * coff-or32.c: Likewise. + * coff-sparc.c: Likewise. + * coff-tic30.c: Likewise. + * coff-tic4x.c: Likewise. + * coff-tic54x.c: Likewise. + * coff-tic80.c: Likewise. + * coff-w65.c: Likewise. + * coff-we32k.c: Likewise. + * coff-x86_64.c: Likewise. + * coff-z80.c: Likewise. + * coff-z8k.c: Likewise. + * pe-mcore.c: Likewise. + * pe-mips.c: Likewise. + * pe-ppc.c: Likewise. + * peXXigen.c: Likewise. + * pei-ppc.c: Likewise. + * libcoff.h: Regenerate. + +2008-07-16 Bernd Schmidt + + * elf32-bfin.c (bfin_check_relocs, bfin_relocate_section, + bfin_final_link_relocate, bfin_gc_mark_hook, bfin_gc_sweep_hook, + ELF_DYNAMIC_INTERPRETER, DEFAULT_STACK_SIZE, + struct _bfinfdpic_dynamic_got_info): Moved around to keep FD-PIC code + separate from non-FD-PIC. + +2008-07-14 DJ Delorie + + * elf-m10300.c (mn10300_elf_final_link_relocate): Correct overflow + checks for PCREL8, PCREL16, GOTPC16, GOTOFF16, PLT16, and GOT16 + relocs. + (mn10300_elf_relax_section): Correct jump offset check when target + is in a different section. + +2008-07-15 Jie Zhang + + * elf32-bfin.c (elf32_bfin_special_sections[]): New. + (elf_backend_special_sections): Define. + +2008-07-13 Craig Silverstein + + PR binutils/6743 + * dwarf2.c (struct dwarf2_debug): New variable info_ptr_memory. + (find_line): Use info_ptr_memory instead of sec_info_ptr. + (_bfd_dwarf2_cleanup_debug_info): Likewise. + +2008-07-12 Jie Zhang + + Revert + 2008-07-12 Jie Zhang + * elf.c (_bfd_elf_map_sections_to_segments): Don't put + executable sections into the same segment with other + read only sections if --sep-code. + * elf32-bfin.c (elf32_bfin_code_in_l1): New variable. + (elf32_bfin_data_in_l1): New variable. + (elf32_bfin_final_write_processing): New. + (elf32_bfin_special_sections[]): New. + (elf_backend_final_write_processing): Define. + (elf_backend_special_sections): Define. + +2008-07-12 Jie Zhang + + * elf.c (_bfd_elf_map_sections_to_segments): Don't put + executable sections into the same segment with other + read only sections if --sep-code. + * elf32-bfin.c (elf32_bfin_code_in_l1): New variable. + (elf32_bfin_data_in_l1): New variable. + (elf32_bfin_final_write_processing): New. + (elf32_bfin_special_sections[]): New. + (elf_backend_final_write_processing): Define. + (elf_backend_special_sections): Define. + +2008-07-11 Andreas Schwab + + * dwarf2.c (read_section): Take pointer to bfd_size_type instead + of unsigned long as last parameter. + (struct dwarf2_debug): Define dwarf_abbrev_size, dwarf_line_size, + dwarf_str_size and dwarf_ranges_size as bfd_size_type instead of + unsigned long. + +2008-07-10 Richard Sandiford + + * elfxx-mips.c (mips_elf_calculate_relocation): Calculate GP and GP0 + for all relocation types. Allow any type of relocation to refer to + __gnu_local_gp. + +2008-07-10 Richard Sandiford + + * elfxx-mips.c (mips_elf_check_mips16_stubs): Use ELF_ST_IS_MIPS16. + (mips_elf_calculate_relocation): Likewise. + (_bfd_mips_elf_add_symbol_hook): Likewise. + (_bfd_mips_elf_finish_dynamic_symbol): Likewise. + (_bfd_mips_vxworks_finish_dynamic_symbol): Likewise. + +2008-07-10 Andreas Schwab + + * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Add missing + paren. + +2008-07-09 Craig Silverstein + + * Makefile.am (BFD32_LIBS): Add compress.lo. + (BFD32_LIBS_CFILES): Add compress.c. + (BFD_H_FILES): Likewise. + * Makefile.in: Regenerate. + * bfd-in2.h: Regenerate. + * config.in: Add HAVE_ZLIB_H + * configure.in: Add test for libz and zlib.h + * configure: Regenerate. + * dwarf2.c (read_section): New function. + (read_indirect_string): Call new function read_section. + (read_abbrevs): Likewise. + (decode_line_info): Likewise. + (read_debug_ranges): Likewise. + (find_line): Call new function read_section when just one + .zdebug_info section is found, otherwise read and compress + multiple sections. + (_bfd_dwarf2_cleanup_debug_info): Free sec_info_ptr. + * elf.c (_bfd_elf_make_section_from_shdr): Add zdebug prefix. + (special_sections_z): New struct. + (special_sections): Refer to special_sections_z. + * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Recognize + sections named .zdebug_*. + (_bfd_mips_elf_fake_sections): Likewise. + * compress.c: New file. + (bfd_uncompress_section_contents): New function. + +2008-07-07 Christophe Lyon + + * elf32-arm.c (arm_type_of_stub): Don't crash on local symbols in + the presence of a PLT. + +2008-07-07 Alan Modra + + * bfd.c (bfd_demangle): Always trim off bfd_get_symbol_leading_char. + +2008-07-02 Alan Modra + + * elf32-ppc.c (is_pic_glink_stub): New function. + (ppc_elf_get_synthetic_symtab): Don't generate symbols when + multiple shared/pie stubs per plt entry. + +2008-06-30 Richard Sandiford + + * elf.c (_bfd_elf_get_synthetic_symtab): Increment p by + bed->s->int_rels_per_ext_rel. + +2008-06-30 Richard Sandiford + + * syms.c (BSF_SYNTHETIC): New flag. + * elf.c (_bfd_elf_get_synthetic_symtab): Set it. + * elf32-ppc.c (ppc_elf_get_synthetic_symtab): Likewise. + * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. + * bfd-in.h (bfd_asymbol_flavour): Return bfd_target_unknown_flavour + for synthetic symbols. + * bfd-in2.h: Regenerate. + +2008-06-30 Daniel Jacobowitz + + * elf32-arm.c (record_arm_to_thumb_glue, record_thumb_to_arm_glue): + Expand comments. + (arm_map_one_stub): Use | 1 when setting the low bit. + +2008-06-29 Andreas Schwab + + * elf32-m68k.c (elf_m68k_relocate_section): Don't ignore existing + addend on _GLOBAL_OFFSET_TABLE_. + +2008-06-24 Daniel Jacobowitz + + * elf32-arm.c (STUB_ENTRY_NAME): Define. + (arm_thumb_thumb_long_branch_stub): Use bx instead of b.n. + (arm_pic_long_branch_stub): Mention R_ARM_REL32 instead of + R_ARM_ABS32. + (struct elf32_arm_stub_hash_entry): Add output_name. + (arm_build_one_stub): Move offsets into the offset argument + of _bfd_final_link_relocate. Correct offset for + arm_thumb_arm_v4t_stub_long_branch. + (elf32_arm_size_stubs): Set stub_entry->output_name. + (elf32_arm_ouput_plt_map_sym): Rename to elf32_arm_output_map_sym. + Update all callers. + (elf32_arm_output_stub_sym): New. + (arm_map_one_stub): Correct formatting. Use elf32_arm_output_stub_sym. + +2008-06-20 Alan Modra + + * elf32-spu.c (needs_ovl_stub): Correctly return nonovl_stub for + non-branch insns. + +2008-06-20 Alan Modra + + * elf32-spu.c (build_stub): Allow wraparound on stub branches. + (allocate_spuear_stubs, build_spuear_stubs): Return value from + count_stub/build_stub. + (spu_elf_build_stubs): Correct location of stub reloc error message. + +2008-06-18 M R Swami Reddy + + * elf32-cr16.c (ELF_MACHINE_ALT1): Define to EM_CR16_OLD. + +2008-06-17 Ralf Wildenhues + + * configure: Regenerate. + +2008-06-17 Alan Modra + + * elf32-spu.c (struct spu_link_hash_table): Add extra_stack_space. + (spu_elf_check_vma): Add extra_stack_space param, copy to htab. + (spu_elf_auto_overlay): Use it. + (RECURSE_UNMARK): Define as 0. + (unmark_overlay_section): Heed RECURSE_UNMARK. + * elf32-spu.h (spu_elf_check_vma): Update prototype. + +2008-06-12 DJ Delorie + + * elf32-m32c.c (ELF_MACHINE_ALT1): Define as EM_M32C_OLD. + +2008-06-09 Paul Brook + + bfd/ + * elf32-arm.c (elf32_arm_merge_private_bfd_data): Allow BE8 shared + libraries. + +2008-06-09 Christophe Lyon + + * elf32-arm.c (arm_stub_is_thumb): Define. + (elf32_arm_final_link_relocate): Handle near mode switching stubs. + +2008-06-07 Alan Modra + + * elf32-spu.c (spu_elf_auto_overlay): Add valid area below sp + to stack calculation. + +2008-06-06 Paul Brook + + bfd/ + * elf32-arm.c (elf32_arm_merge_private_bfd_data): Reject BE8 input. + +2008-06-06 Alan Modra + + * elf32-spu.c (spu_elf_auto_overlay): Relax requirement that + file names be unique. Specify archive:path in overlay script. + +2008-06-05 Alan Modra + + PR ld/6590 + * elf64-ppc.c (ppc_build_one_stub): Correct reloc offsets. + +2008-06-04 Alan Modra + + * elf.c (ignore_section_sym): Don't test section sym value here. + (elf_map_symbols): Instead check zero value here as was done prior + to 2006-05-26 change. + +2008-06-04 Nick Clifton + + PR ld/6019 + * elf32-avr.c (elf32_avr_relax_section): Handle the case where + there are no local symbols. + +2008-06-04 Alan Modra + + * elf32-spu.c (get_sym_h): Don't attempt to read global syms. + (process_stubs): Likewise. + (discover_functions): Don't used cached symbols. + (maybe_insert_function): Correct condition under which function + array is realloc'd. + (mark_functions_via_relocs): Delete unused variable. + +2008-05-30 Frediano Ziglio + Nick Clifton + + PR ld/6511 + * elf64-hppa.c (allocate_global_data_opd): Default to using the + dynamic symbol table for local function names in shared libraries. + +2008-05-29 Jan Kratochvil + + * elf.c (assign_file_positions_for_load_sections): Adjust pre-section + gaps based on VMA and P_VADDR instead of LMA and P_PADDR addresses. + +2008-05-28 Alan Modra + + * elf32-spu.c (spu_elf_object_p): New function. + (elf_backend_object_p): Define. + (build_stub): Correct second word of 8 byte overlay stubs. + (spu_elf_relocate_section): Formatting. + +2008-05-24 Carlos Eduardo Seo + + * elf.c (elfcore_write_register_note): New function. + * elf-bfd.h (elfcore_write_register_note): New prototype. + +2008-05-22 Christophe Lyon + + * elf32-arm.c (arm_type_of_stub): Ignore STT_SECTION symbols. + (elf32_arm_stub_add_mapping_symbol): Remove. + (elf32_arm_add_stub): Don't generate mapping symbols. Change + prototype. + (elf32_arm_size_stubs): Use new elf32_arm_add_stub + prototype. Don't generate thumb to arm glue for calls. + (arm_map_one_stub): Define. + (elf32_arm_output_arch_local_syms): Generate mapping symbols for + long calls stubs. + +2008-05-21 Nick Clifton + + * elf32-arm.c (group_sections): Reformat comments. + + PR ld/6446 + * elf32-frv.c (elf32_frv_relocate_section): Set EF_FRV_PIC by + default (for FDPIC). Clear it if any inter-segment relocations + are found. + + * elf64-hppa.c (elf64_hppa_finalize_opd): Check NULL return + from elf_link_hash_lookup. + +2008-05-21 Maxim Kuvyrkov + + Add multi-GOT support for m68k. + * elf32-m68k.c (struct elf_m68k_link_hash_entry: got_entry_key, + glist): New fields. + (struct elf_m68k_got_entry_key, struct elf_m68k_got_entry, + struct elf_m68k_got, struct elf_m68k_bfd2got_entry, + struct elf_m68k_multi_got): New data structures. + (struct elf_m68k_link_hash_table: local_gp_p, use_neg_got_offsets_p, + allow_multigot_p, multi_got_): New fields. + (elf_m68k_multi_got): New macro. + (elf_m68k_link_hash_newfunc): Initialize new fields of + struct elf_m68k_link_hash_entry. + (elf_m68k_link_hash_table_create): Initialize new fields of + struct elf_m68k_link_hash_table. + (elf_m68k_link_hash_table_free): New static function implementing hook. + (elf_m68k_init_got, elf_m68k_clear_got, elf_m68k_create_empty_got): New + static functions for struct elf_m68k_got. + (elf_m68k_init_got_entry_key, elf_m68k_got_entry_hash, + elf_m68k_got_entry_eq): New static functions for + struct elf_m68k_got_entry. + (ELF_M68K_REL_8O_MAX_N_ENTRIES_IN_GOT, + ELF_M68K_REL_8O_16O_MAX_N_ENTRIES_IN_GOT): New macros. + (enum elf_m68k_get_entry_howto): New enum. + (elf_m68k_get_got_entry, elf_m68k_update_got_entry_type, + elf_m68k_remove_got_entry_type): New static functions for + struct elf_m68k_got_entry. + (elf_m68k_add_entry_to_got): New static function. + (elf_m68k_bfd2got_entry_hash, elf_m68k_bfd2got_entry_eq, + elf_m68k_bfd2got_entry_del, elf_m68k_get_bfd2got_entry): New static + functions for struct elf_m68k_bfd2got_entry. + (struct elf_m68k_can_merge_gots_arg, elf_m68k_can_merge_gots_1, + elf_m68k_can_merge_gots): New traversal. + (struct elf_m68k_merge_gots_arg, elf_m68k_merge_gots_1, + elf_m68k_merge_gots): Ditto. + (struct elf_m68k_finalize_got_offsets_arg, + elf_m68k_finalize_got_offsets_1, elf_m68k_finalize_got_offsets): Ditto. + (struct elf_m68k_partition_multi_got_arg, + elf_m68k_partition_multi_got_1, elf_m68k_init_symndx2h_1, + elf_m68k_partition_multi_got): Ditto. + (elf_m68k_find_got_entry_ptr, elf_m68k_remove_got_entry): New static + functions. + (elf_m68k_copy_indirect_symbol): New static function implementing + a hook. + (elf_m68k_check_relocs): Update to add entries to multi-GOT. + (elf_m68k_gc_sweep_hook): Update to remove entries from multi-GOT. + (elf_m68k_always_size_sections): Assign BFDs to GOTs. + (elf_m68k_relocate_section): Update to properly handle GOT relocations. + (elf_m68k_finish_dynamic_symbol): Update to traverse all GOT entries + of a global symbol. + (bfd_elf_m68k_set_target_options): New function. + (bfd_elf32_bfd_link_hash_table_free): Define hook. + (bfd_elf32_bfd_final_link): Change expansion to bfd_elf_final_link + to skip generic calculation of GOT offsets. + (elf_backend_copy_indirect_symbol): Define hook. + * bfd-in.h (bfd_elf_m68k_set_target_options): Declare function. + * bfd-in2.h: Regenerate. + +2008-05-21 André Johansen + + PR 868 + * dwarf2.c (_bfd_dwarf2_cleanup_debug_info): Free memory allocated + for filenames in function tables and variable tables. + +2008-05-19 Alan Modra + + PR 2995, PR 6473 + * elf.c (_bfd_elf_make_section_from_shdr): Leave lma equal to + vma when all p_paddr fields are zero and there is more than + one PT_LOAD header. + +2008-05-15 Christophe Lyon + + Add long call support for ARM. + * elf32-arm.c (THM2_MAX_FWD_BRANCH_OFFSET): Define. + (THM2_MAX_BWD_BRANCH_OFFSET): Define. + (ARM_MAX_FWD_BRANCH_OFFSET): Define. + (ARM_MAX_BWD_BRANCH_OFFSET): Define. + (THM_MAX_FWD_BRANCH_OFFSET): Define. + (THM_MAX_BWD_BRANCH_OFFSET): Define. + (arm_long_branch_stub): Define. + (arm_pic_long_branch_stub): Define. + (arm_thumb_v4t_long_branch_stub): Define. + (arm_thumb_thumb_long_branch_stub): Define. + (arm_thumb_arm_v4t_long_branch_stub): Define. + (STUB_SUFFIX): Define. + (elf32_arm_stub_type): Define. + (elf32_arm_stub_hash_entry): Define. + (elf32_arm_link_hash_entry): Add stub_cache field. + (arm_stub_hash_lookup): Define. + (elf32_arm_link_hash_table): Add stub_hash_table, stub_bfd, + add_stub_section, layout_sections_again, stub_group, bfd_count, + top_index, input_list fields. + (elf32_arm_link_hash_newfunc): Init new field. + (stub_hash_newfunc): New function. + (elf32_arm_link_hash_table_create): Init stub_hash_table. + (elf32_arm_hash_table_free): New function. + (arm_type_of_stub): New function. + (elf32_arm_stub_name): New function. + (elf32_arm_get_stub_entry): New function. + (elf32_arm_stub_add_mapping_symbol): New function. + (elf32_arm_add_stub): New function. + (arm_build_one_stub): New function. + (arm_size_one_stub): New function. + (elf32_arm_setup_section_lists): New function. + (elf32_arm_next_input_section): New function. + (group_sections): New function. + (elf32_arm_size_stubs): New function. + (elf32_arm_build_stubs): New function. + (bfd_elf32_arm_add_glue_sections_to_bfd): Skip stub sections. + (bfd_elf32_arm_process_before_allocation): No longer handle + R_ARM_CALL and R_ARM_THM_CALL. + (using_thumb_only): New function. + (elf32_arm_final_link_relocate): Redirect calls to stub if range + exceeds encoding capabilities. + (bfd_elf32_bfd_link_hash_table_free): Define. + * bfd-in.h (R_ARM_max): Fix value to 130. + (elf32_arm_setup_section_lists): Protype. + (elf32_arm_next_input_section): Protype. + (elf32_arm_size_stubs): Protype. + (elf32_arm_build_stubs): Protype. + * bfd-in2.h: Regenerate. + +2008-05-14 Ulrich Weigand + + * elf32-ppc.c (ppc_elf_get_synthetic_symtab): Fix memset calls. + * elf64-ppc.c (ppc64_elf_get_synthetic_symtab): Likewise. + +2008-05-14 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2008-05-14 Ulrich Weigand + Alan Modra + + * elf32-ppc.c (section_covers_vma): New function. + (ppc_elf_get_synthetic_symtab): New function. + (bfd_elf32_get_synthetic_symtab): Define. + * elf64-ppc.c (section_covers_vma): New function. + (ppc64_elf_get_synthetic_symtab): Generate sym@plt on glink branch + table entries, and __glink_PLTresolve on resolver stub. + (ppc64_elf_build_stubs): Rename __glink sym to __glink_PLTresolve. + +2008-05-12 Alan Modra + + PR 6443 + * elf32-ppc.c (MUST_BE_DYN_RELOC): Delete. + (must_be_dyn_reloc): New function. + (ppc_elf_check_relocs): Don't set DF_STATIC_TLS for tprel relocs + in pies. + (ppc_elf_tls_optimize): Optimise pies. + (ppc_elf_relocate_section): Use a section symbol rather than no + symbol if possible for LD->IE TLS sequence, but don't error if + we must use no symbol. + * elf64-ppc.c (MUST_BE_DYN_RELOC): As for elf32-ppc.c. + (must_be_dyn_reloc): Likewise. + (ppc64_elf_check_relocs): Likewise. + (ppc64_elf_tls_optimize): Likewise. + (ppc64_elf_relocate_section): Likewise. + +2008-05-12 Alan Modra + + * elf32-spu.c (spu_elf_relocate_section): Rename is_ea to is_ea_sym. + +2008-05-10 Paul Pluzhnikov + + * elfcore.h (elf_core_file_p): Warn about core truncation. + +2008-05-07 Bob Wilson + + * elf32-xtensa.c (xtensa_property_section_name): New. + (xtensa_make_property_section): New. + (xtensa_get_property_section): Make static. Do not create a new + section if it does not exist. + +2008-05-08 Alan Modra + + * elf32-spu.c (spu_elf_special_sections): Add "._ea". + (spu_elf_relocate_section): Handle relocations against symbols + defined in ._ea specially. + +2008-05-03 Daniel Jacobowitz + + * elf32-arm.c (elf32_arm_symbian_link_hash_table_create): Use + ARRAY_SIZE. + (elf32_arm_symbian_plt_sym_val): New. + (elf_backend_plt_sym_val): Define. + +2008-05-03 Alan Modra + + PR 2995, PR 6473 + * elf.c (rewrite_elf_program_header): Rather than clearing + p_paddr_valid at end, don't set it in the first place. Delete + comment no longer relevant. When not p_paddr_valid, don't set + paddr from vaddr, and don't set p_vaddr_offset. + +2008-05-01 Cary Coutant + + * elf.c (bfd_elf_get_str_section): Fix memory leak caused by + corrupt string table. + +2008-05-01 Joel Brobecker + + * cache.c (cache_bread_1): Renames cache_bread. + (cache_bread): New function. + +2008-05-01 Alan Modra + + PR 2995, PR 6473 + * elf.c (_bfd_elf_make_section_from_shdr): Always set lma from p_paddr. + (assign_file_positions_for_load_sections): Combine nested "if". + (copy_elf_program_header): Don't set p_paddr_valid or p_vaddr_offset + when all header p_paddr fields are zero. + +2008-04-30 Edmar Wienskoski + + * cpu-powerpc.c (bfd_powerpc_archs): Add e500mc entry. + +2008-04-29 Daniel Jacobowitz + + * elf.c (_bfd_elf_get_dynamic_reloc_upper_bound) + (_bfd_elf_canonicalize_dynamic_reloc): Find dynamic relocations + even if they are not loaded. + * elflink.c (_bfd_elf_init_2_index_sections): Set data_index_section + first. + +2008-04-25 Jay Foad + + * reloc16.c (bfd_coff_reloc16_get_value): Add support for + undefined weak symbols. + +2008-04-25 Nick Clifton + + * po/vi.po: Updated Vietnamese translation. + +2008-04-23 Paolo Bonzini + + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2008-04-21 Cary Coutant + + * archive.c (_bfd_write_archive_contents): Fix incorrect use of + ARFMAG. + +2008-04-21 Nathan Sidwell + + * elfxx-mips.c (_bfd_mips_vxworks_adjust_dynamic_symbol): Don't + set the value of undefined symbols in shared objects. + (_bfd_mips_vxworks_finish_dynamic_symbol): Clear value for + undefined symbols unless pointer equality is needed. + +2008-04-18 Dennis Roberts + + * aix5ppc-core.c: Define macros for the default architecture and + machine for matching core files. + (xcoff64_core_p): Set the architecture and machine to the default + values defined in the macros mentioned above. + * rs6000-core.c: Define macros to determine whether or not the + core file header uses the core_dumpxx header format. + (rs6000coff_core_p): Don't match core files that use the + core_dumpxx header format. + +2008-04-16 Pedro Alves + + * config.bfd (i[3-7]86-*-dicos*, x86_64-*-dicos*): Add. + +2008-04-16 David S. Miller + + * reloc.c (BFD_RELOC_SPARC_GOTDATA_HIX22, + BFD_RELOC_SPARC_GOTDATA_LOX10, BFD_RELOC_SPARC_GOTDATA_OP_HIX22, + BFD_RELOC_SPARC_GOTDATA_OP_LOX10, BFD_RELOC_SPARC_GOTDATA_OP): New. + * libbfd.h: Regnerate. + * bfd-in2.h: Regenerate. + * elfxx-sparc.c (_bfd_sparc_elf_howto_table): Add entries for + GOTDATA relocations. + (sparc_reloc_map): Likewise. + (_bfd_sparc_elf_check_relocs): Handle R_SPARC_GOTDATA_* like + R_SPARC_GOT*. + (_bfd_sparc_elf_gc_sweep_hook): Likewise. + (_bfd_sparc_elf_relocate_section): Transform R_SPARC_GOTDATA_HIX22, + R_SPARC_GOTDATA_LOX10, R_SPARC_GOTDATA_OP_HIX22, and + R_SPARC_GOTDATA_OP_LOX10 into the equivalent R_SPARC_GOT* reloc. + Simply ignore R_SPARC_GOTDATA_OP relocations. + +2008-04-14 Aurelien Jarno + + * configure.in: Link with the PIC version of libiberty on + Linux/MIPS hosts. + * configure: Regenerate. + +2008-04-14 Edmar Wienskoski + + * archures.c: Add bfd_mach_ppc_e500mc. + * bfd-in2.h: Regenerate. + +2008-04-08 Alan Modra + + * elf32-spu.c (spu_elf_build_stubs): Correct error message. + (mark_functions_via_relocs): Remove premature init of symtab_hdr. + (collect_overlays): Commment typo fix. + +2008-04-08 Kees Cook + + * elflink.c (bfd_elf_size_dynamic_sections): Ignore GNU-stack note + in EXEC_P bfds. + +2008-04-08 Alan Modra + + * elf32-spu.c: Include libiberty.h. + (struct spu_link_hash_table): Add local_stire, overlay_fixed, reserved, + non_ovly_stub, spu_elf_load_ovl_mgr, spu_elf_open_overlay_script, + spu_elf_relink, auto_overlay fields. + (AUTO_OVERLAY, AUTO_RELINK, OVERLAY_RODATA): Define. + (needs_ovl_stub): Flip test so that call to non-function warning + is emitted during relocate_section rather than earlier. + (spu_elf_check_vma): Stash --auto-overlay parameters, and clear + auto_overlay if no section exceeds local store. + (struct call_info): Add count, max_depth, is_pasted fields. + (struct function_info): Add rodata, last_caller, call_count, + depth, new visit flags. + (insert_callee): Increment call count. + (copy_callee): New function. + (mark_functions_via_relocs): Investigate all reloc types to count + possible function pointer stubs for --auto-overlay. Track + last_caller and increment function call_count. + (pasted_function): Insert a "call" into call info for pasted section. + (remove_cycles): Track max depth of calls. Don't emit call graph + pruning warning for --auto-overlay. + (build_call_tree): Don't transfer_calls for --auto-overlay. + Adjust remove_cycles call. + (sort_calls, sort_lib, sort_bfds): New functions. + (struct _mos_param, struct _uos_param, struct _cl_param): New. + (mark_overlay_section, unmark_overlay_section): New functions. + (collect_lib_sectios, auto_ovl_lib_functions): New functions. + (collect_overlays, find_pasted_call): New functions. + (sum_stack): Deal with is_pasted "calls". Exit before printing + when --auto-overlay. + (spu_elf_auto_overlay): New function. + (spu_elf_final_link): Call spu_elf_auto_overlay. + * elf32-spu.h (spu_elf_check_vma): Update prototype. + +2008-04-07 Alan Modra + + * elf32-spu.c (allocate_spuear_stubs): Ensure _SPUEAR_ symbol + is defined in overlay section before creating a stub. + (build_spuear_stubs): Likewise. + (spu_elf_size_stubs, spu_elf_build_stubs): Adjust calls. + +2008-04-02 Alan Modra + + * elf32-spu.c (insert_callee): Reorder call list so most recent + call is always first. + (interesting_section): Move. + (mark_functions_via_relocs): Fold interesting_section and + reloc_count tests in callers to here. Simplify output section + owner test. + (discover_functions): Set "gaps" when no symbols and some + "interesting_section". Run pasted_function loop for no symbol + bfds. + (for_each_node, transfer_calls): New functions. + (mark_non_root): Adjust to suit for_each_node. + (call_graph_traverse): Likewise. Fix memory leak. Rename to.. + (remove_cycles): ..this. + (build_call_tree): Use for_each_node and transfer_calls. + (struct _sum_stack_param): New. + (sum_stack): Adjust to suit for_each_node. Return error on + malloc failure. Move code to print root node cumulative stack from.. + (spu_elf_stack_analysis): ..here. Use for_each_node. + +2008-03-31 Cary Coutant + + PR 6006 + * archive.c (_bfd_slurp_extended_name_table): Change + ARFMAG[0] to ARFMAG[1]. + (_bfd_construct_extended_name_table): Likewise. + +2008-03-31 Daniel Jacobowitz + + * elfxx-mips.c (mips_elf_record_got_page_entry): Update comment. + (_bfd_mips_elf_check_relocs): Update comments. Always call + mips_elf_record_got_page_entry for R_MIPS_GOT_PAGE. + +2008-03-27 Cary Coutant + + Add support for thin archives. + * archive.c (_bfd_find_nested_archive): New function. + (get_extended_arelt_filename): Add origin parameter. + (_bfd_generic_read_ar_hdr_mag): Deal with extended name + combined with a file offset. + (append_relative_path): New function. + (_bfd_get_elt_at_filepos): Deal with external members and + nested archives. + (bfd_generic_openr_next_archived_file): Thin archives. + (bfd_generic_archive_p): Recognize new magic string. + (adjust_relative_path): New function. + (_bfd_construct_extended_name_table): Construct extended + names for thin archive members. + (_bfd_write_archive_contents): Emit new magic string, skip + copying files for thin archives. + * bfd-in.h (bfd_is_thin_archive): New macro. + * bfd.c (struct bfd): New fields for thin archives. + * libbfd-in.h (struct areltdata): New field for thin archives. + * opncls.c (bfd_close): Delete BFDs for nested archives. + +2008-03-25 Bernd Schmidt + + * elf32-bfin.c (bfin_final_link_relocate): New function, wrapper around + _bfd_final_link_relocate that also handles R_pcrel24 relocs. + (bfinfdpic_relocate_section, bfin_relocate_section): Use it. + +2008-03-25 Nathan Sidwell + + * elf32-arm.c (elf32_arm_final_link_relocate): Skip dynamic relocs + in vxworks tls_vars sections. + (allocate_dynrelocs, elf32_arm_size_dynamic_sections): Likewise. + * elf32-i386.c (allocate_dynrelocs, + elf_i386_size_dynamic_sections, elf_i386_relocate_section): Likewise. + * elf32-ppc.c (allocate_dynrelocs, ppc_elf_size_dynamic_sections, + ppc_elf_relocate_section): Likewise. + * elf32-sh.c (allocate_dynrelocs, sh_elf_size_dynamic_sections, + sh_elf_relocate_section): Likewise. + * elfxx-sparc.c (allocate_dynrelocs, + _bfd_sparc_elf_size_dynamic_sections, + _bfd_sparc_elf_relocate_section): Likewise. + +2008-03-21 Adam Nemet + + * elf.c (_bfd_elf_print_private_bfd_data): Use bfd_fprintf_vma to + print the values from the dynamic section. + +2008-03-20 Richard Sandiford + + * elfxx-mips.c (MIPS_ELF_GNU_GOT1_MASK): New macro. + (_bfd_mips_elf_finish_dynamic_sections): Use it instead of 0x80000000. + +2008-03-20 Alan Modra + + * elf32-spu.c (spu_elf_create_sections): Remove output_bfd parameter. + (spu_elf_find_overlays, spu_elf_size_stubs): Likewise + (process_stubs, discover_functions, build_call_tree): Likewise. + (spu_elf_stack_analysis): Likewise. + (spu_elf_check_vma): Likewise. Move. + (struct call_info): Make "is_tail" a bitfield. + (insert_callee): Clear fun->start and set fun->is_func if we find + a non-tail call. + * elf32-spu.h (spu_elf_create_sections): Update prototype. + (spu_elf_find_overlays, spu_elf_size_stubs, spu_elf_check_vma): Ditto. + +2008-03-17 Ralf Wildenhues + + * aclocal.m4: Regenerate. + * configure: Likewise. + * Makefile.in: Likewise. + +2008-03-16 H.J. Lu + + PR ld/5789 + PR ld/5943 + * elf32-i386.c (elf_i386_relocate_section): Issue an error + for R_386_GOTOFF relocaton against undefined hidden/internal + symbols when building a shared object. + + * elf64-x86-64.c (elf64_x86_64_relocate_section): Issue an + error for R_X86_64_PC8/R_X86_64_PC16/R_X86_64_PC32 + relocaton against undefined hidden/internal symbols when + building a shared object. + (elf64_x86_64_finish_dynamic_symbol): Return FALSE when symbol + is referenced locally, but isn't defined in a regular file. + +2008-03-15 H.J. Lu + + * bfd-in.h (BFD_NO_FLAGS, HAS_RELOC, EXEC_P, HAS_LINENO, + HAS_DEBUG, HAS_SYMS, HAS_LOCALS, DYNAMIC, WP_TEXT, D_PAGED, + BFD_IS_RELAXABLE, BFD_TRADITIONAL_FORMAT, BFD_IN_MEMORY, + HAS_LOAD_PAGE, BFD_LINKER_CREATED): Moved to ... + * bfd.c: Here. + + * bfd.c (bfd): Change cacheable, target_defaulted, opened_once, + mtime_set, no_export, output_has_begun and has_armap to bit + field. + + * bfd-in2.h: Regenerated. + +2008-03-14 Daniel Jacobowitz + + * cache.c (close_one): Remove mtime hack. + +2008-03-14 H.J. Lu + + PR ld/5913 + * elfxx-ia64.c (elfNN_ia64_tprel_base): Remove BFD_ASSERT. + (elfNN_ia64_dtprel_base): Likewise. + (elfNN_ia64_relocate_section): Go to missing_tls_sec if + tls_sec is NULL before calling elfNN_ia64_tprel_base or + elfNN_ia64_dtprel_base. Report unsupported TLS relocations. + +2008-03-14 Alan Modra + + * elf32-spu.c (process_stubs, spu_elf_relocate_section): Move + common code to.. + (maybe_needs_stub): ..here, a new function that also omits stubs + for .eh_frame, and.. + (needs_ovl_stub): ..here. Create stubs for labels in code section + referenced by switch jump table. + (spu_elf_find_overlays): Set htab->ovly_load and htab->ovly_return. + (enum _insn_type): Delete. + (enum _stub_type): New. + (count_stub, build_stub): Adjust. + (allocate_spuear_stubs, build_spuear_stubs): Adjust. + +2008-03-13 Alan Modra + + * elf.c (_bfd_elf_make_section_from_shdr): Remove unnecessary cast. + (_bfd_elf_assign_file_position_for_section): Simplify align. + (_bfd_elf_init_reloc_shdr): Ensure shift expression wide enough + for sh_addralign. + (elf_fake_sections, swap_out_syms): Likewise. + * elflink.c (bfd_elf_final_link): Likewise. + +2008-03-13 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2008-03-12 Bernd Schmidt + + From Jie Zhang + * elf32-bfin.c (struct bfinfdpic_relocs_info): Make got17m4, + gothilo, fd, fdgot17m4, fdgothilo, fdgoff17m4, fdgoffhilo, + gotoff, call and sym not bitfields. + (bfinfdpic_gc_sweep_hook): New function; update the relocation + information for the relocations of the section being removed. + (bfinfdpic_check_relocs): Accumulate the number of relocations + which set got17m4, gothilo, fd, fdgot17m4, fdgothilo, fdgoff17m4, + fdgoffhilo, gotoff, call and sym fields. + (elf_backend_gc_sweep_hook): Redefine for FD-PIC. + +2008-03-12 Alan Modra + + PR 5900 + * elf-bfd.h: Include elf/internal.h after elf/external.h. + * elfcode.h (elf_swap_symbol_in): Map reserved shndx range. + (elf_swap_symbol_out): Adjust SHN_XINDEX test. + (elf_swap_ehdr_out): Mask SHN_LORESERVE and SHN_XINDEX to values + seen in external structs. + (valid_section_index_p): Delete. + (elf_object_p): Don't increment section numbers over reserved range. + Simplify test for valid sh_link, sh_info and e_shstrndx fields. + (elf_write_shdrs_and_ehdr): Mask SHN_LORESERVE and SHN_XINDEX to values + seen in external structs. Don't increment section numbers over + reserved range. + * elf.c (bfd_elf_sym_name): Remove redundant tests on st_shndx. + (bfd_section_from_shdr): Likewise. + (group_signature): Range check before accessing elf_elfsections. + (_bfd_elf_setup_sections): Likewise. + (bfd_section_from_shdr): Likewise. + (bfd_section_from_shdr): Don't increment section number over + reserved sections. + (assign_file_positions_for_non_load_sections): Likewise. + (assign_file_positions_except_relocs): Likewise. + (_bfd_elf_write_object_contents): Likewise. + (assign_section_numbers): Likewise. Adjust for changed SHN_*. + (prep_headers): Delete unused variable. + * elflink.c (bfd_elf_link_record_local_dynamic_symbol): Adjust + for changed SHN_* values. + (check_dynsym, elf_link_input_bfd): Likewise. + (bfd_elf_final_link): Likewise. Don't skip over reserved section + range. + (elf_fixup_link_order): Check that sh_link field is valid. + * elf-hppa.h (elf_hppa_add_symbol_hook): Make "index" unsigned. + * elf32-arm.c (elf32_arm_gc_mark_extra_sections): Range check before + accesssing elf_elfsections. + * elf32-avr.c (elf32_avr_size_stubs): Likewise. + * elf32-hppa.c (elf32_hppa_size_stubs): Likewise. + * elf32-m68hc1x.c (elf32_m68hc11_size_stubs): Likewise. + * elf64-hppa.c (elf64_hppa_check_relocs): Adjust for changed + SHN_* defines. Test for SHN_BAD return from + _bfd_elf_section_from_bfd_section + +2008-03-12 Alan Modra + + * elf-bfd.h (_bfd_elf_section_from_bfd_section): Update prototype. + * elf.c (_bfd_elf_section_from_bfd_section): Return unsigned int, + SHN_BAD on error. + (_bfd_elf_print_private_bfd_data): Test for SHN_BAD result from + _bfd_elf_section_from_bfd_section, not -1. + (swap_out_syms): Likewise. + * elflink.c (elf_link_add_object_symbols): Likewise. + (bfd_elf_get_bfd_needed_list): Likewise. + (bfd_elf_match_symbols_in_sections): Likewise. + (elf_link_add_object_symbols): Don't bother testing for symbols + using normal sections before calling bfd_section_from_elf_index. + (elf_link_input_bfd, bfd_elf_final_link): Likewise. + (bfd_elf_reloc_symbol_deleted_p): Likewise. + * elfcode.h (elf_slurp_symbol_table): Likewise. + * elf32-spu.c (get_sym_h): Likewise. + * elf32-xtensa.c (get_elf_r_symndx_section): Likewise. + * elf64-ppc.c (opd_entry_value, get_sym_h, ppc64_elf_edit_toc): Ditto. + * elf64-sh64.c (sh_elf64_get_relocated_section_contents): Likewise. + +2008-03-11 Alan Modra + + * elf32-spu.c (spu_elf_relocate_section): Test identical conditions + to those in process_stubs for overlay symbols. + +2008-03-09 Paul Brook + + * elf32-arm.c (elf32_arm_merge_eabi_attributes): Handle new + Tag_VFP_arch values. + +2008-03-08 Paul Brook + + * elf32-arm.c (insert_thumb_branch): Rewrite. + (elf32_thumb_to_arm_stub): Use new insert_thumb_branch. + +2008-03-07 Paul Brook + + * elf32-arm.c (elf32_arm_howto_table_1): Fix bitmasks for MOVW and + MOVT relocations. + (elf32_arm_final_link_relocate): Fix off by one MOVW/MOVT sign + extension. + (elf32_arm_relocate_section): Handle MOVW and MOVT + relocations. Improve safety check for other weird relocations. + (elf32_arm_check_relocs): Only set h->needs_plt for branch/call + relocations. + +2008-03-03 Bob Wilson + + * xtensa-isa.c (xtensa_isa_num_pipe_stages): Make max_stage static and + only compute its value once. + +2008-03-03 Alan Modra + + * elf32-spu.c (struct got_entry): Add "addend" field. + (count_stub, build_stub): Use a new stub if relocation addend + differs from existing stubs for this symbol. + (process_stubs): Deal with addends. + (spu_elf_relocate_section, spu_elf_output_symbol_hook): Likewise. + +2008-03-02 H.J. Lu + + PR ld/5789 + * elflink.c (_bfd_elf_symbol_refs_local_p): Always return true + for hidden and local symbols. + +2008-03-03 Alan Modra + + * elf32-ppc.c (allocate_dynrelocs): Discard relocs on + undefined symbols with internal or hidden visibility. + (ppc_elf_relocate_section): Likewise. Use SYMBOL_CALLS_LOCAL + rather than SYMBOL_REFERENCES_LOCAL on branches. Don't + return immediately on dynamic reloc error. + +2008-03-01 Alan Modra + + * elf64-ppc.c (build_plt_stub): Add relocs on plt call stubs + if emitrelocations. + (get_relocs): New function, split out from.. + (ppc_build_one_stub): ..here. Add relocs on plt_branch stubs if + emitrelocations. Remove indx temp. + (ppc_size_one_stub): Count new stub relocs. + (ppc64_elf_size_stubs): Count new glink reloc. + (ppc64_elf_build_stubs): Emit glink reloc if emitrelocations. + (ppc64_elf_finish_dynamic_sections): Output glink relocs. + * elf32-ppc.c (ppc_elf_finish_dynamic_sections): Describe non-pic + glink code. + +2008-02-28 Alan Modra + + * elf32-spu.c (mark_functions_via_relocs): Don't assume that + the "->start" pointer reaches to function origin, so that we + can handle functions split over more than two sections. + (build_call_tree): Likewise. + (pasted_function): Don't attempt to set fun->start back to the + function origin, just go back one section. + +2008-02-27 Catherine Moore + + * elf.c ( _bfd_elf_print_private_bfd_data): Call + elf_backend_get_target_dtag if defined. + * elf32-mips.c (elf_backend_get_target_dtag): Define. + * elf64-mips.c: Likewise. + * elfn32-mips.c: Likewise. + * elfxx-mips.c (_bfd_mips_elf_get_target_dtag): New. + * elfxx-mips.h (_bfd_mips_elf_get_target_dtag): Declare. + * elf-bfd.h (elf_backend_get_target_dtag): Add prototype. + * elfxx-target.h (elf_backend_get_target_dtag): Add default. + (elf_backend_data): Add elf_backend_get_target_dtag. + +2008-02-26 Alan Modra + + * elf32-ppc.c (ppc_elf_check_relocs): Set pointer_equality_needed + for R_PPC_REL32 syms. Don't set non_got_ref on branch reloc syms, + and assume branch relocs are not dynamic when non-shared. + (readonly_dynrelocs): New function, split out from.. + (maybe_set_textrel): ..here, renamed from old readonly_dynrelocs. + (ppc_elf_adjust_dynamic_symbol): For symbols generating plt entries, + clear non_got_ref.. + (allocate_dynrelocs): ..and don't set u.def for undefined weak. + Do allow dynamic relocs on undefined symbols. + (ppc_elf_adjust_dynamic_symbol): Use readonly_dynrelocs. + (ppc_elf_relocate_section): Mirror dynamic reloc changes in + check_relocs. + (ppc_elf_finish_dynamic_symbol): Don't give a warning on weak + plt symbols needing pointer_equality_needed. + +2008-02-23 Alan Modra + + * elf32-ppc.c (ppc_elf_check_relocs): Revert non_got_ref change. + +2008-02-23 Alan Modra + + * elf32-ppc.c (ppc_elf_copy_indirect_symbol): Copy + pointer_equality_needed. + (ppc_elf_check_relocs): Split out non-branch relocs from others + that might emit dynamic relocs. Set pointer_equality_needed + for their symbols. Don't set non_got_ref on branch reloc symbols. + (ppc_elf_hash_symbol): New function. + (elf_backend_hash_symbol): Define. + (ppc_elf_finish_dynamic_symbol): Handle pointer_equality_needed. + Error if pointer_equality_needed on weak plt symbol. + +2008-02-22 H.J. Lu + + PR ld/5788 + * elflink.c (elf_create_symbuf): Correct buffer size and + position. + +2008-02-22 Nick Clifton + + PR 868 + * dwarf2.c: Revert previous patch. All of the allocate memory is + on an obstack which will be freed at some other time. + +2008-02-20 Nick Clifton + + PR 868 + * libbfd.c (bfd_realloc_or_free): New function. Performs like + bfd_realloc, but if the (re)allocation fails, the pointer is + freed. + * libbfd-in.h: Prototype. + * libbfd.h: Regenerate. + * bfdio.c (bfd_bwrite): Use the new function. + (bfd_seek): Likewise. + * bfdwin.c:(bfd_get_file_window): Likewise. + * elf-strtab.c (_bfd_elf_strtab_add): Likewise. + * elf32-ppc.c (ppc_elf_relax_section): Likewise. + * elf32-xtensa.c (vsprintf_msg): Likewise. + * mach-o.c (bfd_mach_o_core_fetch_environment): Likewise. + * stabs.c (_bfd_link_seciton_stabs): Likewise. + * vms-misc.c (_bfd_vms_get_record): Likewise. + * vms-tir.c (check_section): Likewise. + * vms.c (vms_new_section_hook): Likewise. + * elf32-arm.c (elf32_arm_section_map_add): Check that the + allocation of sec_data->map succeeded before using it. + * elflink.c (elf_link_output_sym): Do not overwrite finfo-> + symshndxbuf until it is known that the reallocation succeeded. + +2008-02-20 Diogo de Carvalho Kraemer + Nick Clifton + + PR 868 + * dwarf2.c (read_abbrevs): Free the abbreviation table if we run + out of memory. + (decode_line_info): Free the line_info_table before returning a + failure result. + (_bfd_dwarf2_cleanup_debug_info): Free the abbreviation table. + Free the line table. Free the function table. Free the variable + table. + +2008-02-17 Mark Kettenis + + * elf.c (swap_out_syms): Avoid preprocessing directive within + macro arg. + +2008-02-17 Jan Kratochvil + + * elf.c (assign_file_positions_for_load_sections): Set the type of + PT_NOTE sections to SHT_NOTE. + +2008-02-17 Ulrich Weigand + + * simple.c (bfd_simple_get_relocated_section_contents): Set + link_info.output_bfd. + +2008-02-16 Nathan Sidwell + + * dwarf2.c (find_line): Don't trust debug information after an + unparseable compilation unit. + +2008-02-15 Alan Modra + + PR 5765 + * section.c (SEC_LINK_DUPLICATES): Correct. Renumber following flags. + * bfd-in2.h: Regenerate. + +2008-02-15 Alan Modra + + * elf-bfd.h (enum elf_object_id): Add HPPA_ELF_TDATA. + * elf.c (bfd_elf_allocate_object): Don't check for already allocated + tdata. + * elf32-hppa.c (elf32_hppa_mkobject): New function. + (bfd_elf32_mkobject): Define. + * elf32-ppc.c (is_ppc_elf_target): Delete. Replace all uses with.. + (is_ppc_elf): ..this new macro. + * elf64-ppc.c (is_ppc64_elf_target): Delete. Replace all uses with.. + (is_ppc64_elf): ..this new macro. + +2008-02-15 Alan Modra + + * elflink.c: Replace all accesses to hash->creator field with + output_bfd->xvec. + * cofflink.c: Likewise. + * coff-h8300.c: Likewise. + * ecoff.c: Likewise. + * elf32-m68hc1x.c: Likewise. + * elf32-ppc.c: Likewise. + * elf64-alpha.c: Likewise. + * elf64-ppc.c: Likewise. + * elf64-sparc.c: Likewise. + * elfxx-mips.c: Likewise. + * i386linux.c: Likewise. + * m68klinux.c: Likewise. + * sparclinux.c: Likewise. + * sunos.c: Likewise. + * xcofflink.c: Likewise. + * linker.c: Likewise. + (_bfd_link_hash_table_init): Don't store creator. + +2008-02-14 Peter Jones + + * efi-rtdrv-ia32.c: New file. + * efi-bsdrv-ia32.c: New file. + * efi-rtdrv-ia64.c: New file. + * efi-bsdrv-ia64.c: New file. + * efi-rtdrv-x86_64.c: New file. + * efi-bsdrv-x86_64.c: New file. + * peicode.h (pe_bfd_object_p): Add support for boot service and + runtime service drivers. + * libpei.h: Add macros for EFI formats, and rename the efi application + format macros to disambiguate. + * targets.c: Add bfd_target _vec externs. + (_bfd_tar): Add EFI _vec entries. + * config.bfd: Add EFI vectors into the selection routines. + * configure.in: add EFI _vec entries. + * configure: Regenerate. + * Makefile.am: Add EFI files. + * Makefile.in: Regenerate. + +2008-02-14 Nathan Sidwell + + * dwarf1.c (struct dwarf1_debug): Add syms member. + (alloc_dwarf1_unit, alloc_dwarf1_func): Check for out of memory. + (parse_line_table, _bfd_dwarf1_find_nearest_line): Relocate + section contents, check for out of memory. + + * dwarf1.c (struct dwarf1_debug): Change data pointers to bfd_byte. + (parse_die): Change data pointers to bfd_byte. + (parse_line_table, parse_functions_in_unit): Likewise. + +2008-02-14 Alan Modra + + * elflink.c (compute_bucket_count): Warning fixes. + +2008-02-12 DJ Delorie + + * elf32-iq2000.c (iq2000_elf_relocate_section): Adjust addend of + relocation pointing to local symbol in merged section. + + * elf32-iq2000.c (iq2000_elf_relocate_offset16): New. + (iq2000_elf_relocate_section): Call it. + +2008-02-12 Nick Clifton + + PR ld/5692 + * elf-bfd.h (enum elf_object_id): New enum, used to identify + target specific extensions to the elf_obj_tdata structure. + (struct elf_obj_tdata): New field 'object_id'. + (elf_object_id, elf_program_header_size, elf_symtab_hdr): New + macros for accessing fields in the elf_obj_tdata structure. + (bfd_elf_mkobject): Rename to bfd_elf_make_generic_object. + (bfd_elf_allocate_object): New function. + * elf.c (bfd_elf_mkobject): Rename to bfd_elf_make_generic_object + and implement by calling bfd_elf_allocate_object. + (bfd_elf_allocate_object): New function: Allocates an + elf_obj_tdata structure, possibly with a target specific + extension. + * elfxx-target.h (bfd_elfNN_mkobject): Use + bfd_elf_make_generic_object as the default value. + * elf32-arm.c (elf32_arm_obj_tdata): Rename to elf_arm_obj_tdata + for consistency with other, similar structures. + (is_arm_elf): New macro. Checks a BFD to make sure that is an ARM + ELF bfd. + (elf32_arm_mkobject): Call bfd_elf_allocate_object. + (bfd_elf32_arm_vfp11_erratum_scan): Use is_arm_elf macro to check + the bfd being processed. + (bfd_elf32_arm_vfp11_fix_veneer_locations): Likewise. + (bfd_elf32_arm_set_target_relocs): Likewise. + (bfd_elf32_arm_final_link_relocate): Likewise. + (bfd_elf32_arm_copy_private_bfd_data): Likewise. + (bfd_elf32_arm_merge_eabi_attributes): Likewise. + (bfd_elf32_arm_merge_private_bfd_data): Likewise. + (bfd_elf32_arm_check_relocs): Likewise. + (bfd_elf32_arm_gc_mark_extra_sections): Likewise. + (bfd_elf32_arm_size_dynamic_sections): Likewise. + (bfd_elf32_arm_process_before_allocation): Use elf_symtab_hdr. + (bfd_elf32_arm_init_maps): Likewise. + (bfd_elf32_arm_final_link_relocate): Likewise. + (bfd_elf32_arm_relocate_section): Likewise. + (bfd_elf32_arm_gc_sweep_hook): Likewise. + (bfd_elf32_arm_check_relocs): Likewise. + (bfd_elf32_arm_size_dynamic_sections): Likewise. + * elf32-i386.c (elf_i386_mkobject): Call bfd_elf_allocate_object. + (is_i386_elf): New macro. Checks a BFD to make sure that is an x86 + ELF bfd. + (elf_i386_check_relocs): Use is_i386_elf macro to check the bfd + being processed. + (elf_i386_size_dynamic_sections): Likewise. + (elf_i386_relocate_section): Likewise. + (elf_i386_check_relocs): Use elf_symtab_hdr. + (elf_i386_gc_sweep_hook): Likewise. + (elf_i386_size_dynamic_sections): Likewise. + (elf_i386_relocate_section): Likewise. + * elf32-ppc.c (ppc_elf_mkobject): Call bfd_elf_allocate_object. + (elf_create_pointer_linker_section): Use is_ppc_elf_target to + verify that the bfd before accessing target specific fields. + (ppc_elf_check_relocs): Likewise. + (elf_finish_pointer_linker_section): Likewise. + (elf_create_pointer_linker_section): Use elf_symtab_hdr. + (ppc_elf_check_relocs): Likewise. + (ppc_elf_gc_sweep_hook): Likewise. + (ppc_elf_tls_optimize): Likewise. + (ppc_elf_size_dynamic_sections): Likewise. + (ppc_elf_relax_section): Likewise. + (ppc_elf_relocate_section): Likewise. + * elf32-s390.c (struct elf_s390_obj_tdata): Add a comment + reminding programmers to keep this structure in sync with the one + defined in elf64-s390.c. + (elf_s390_mkobject): Call bfd_elf_allocate_object. + (is_s390_elf): New macro. Checks a BFD to make sure that is an s390 + ELF bfd. + (elf_s390_check_relocs): Use is_s390_elf macro to check the bfd + being processed. + (elf_s390_size_dynamic_sections): Likewise. + (elf_s390_relocate_section): Likewise. + (elf_s390_check_relocs): Use elf_symtab_hdr. + (elf_s390_gc_sweep_hook): Likewise. + (elf_s390_size_dynamic_sections): Likewise. + (elf_s390_relocate_section): Likewise. + * elf32-sh.c (sh_elf_mkobject): Call bfd_elf_allocate_object. + (is_sh_elf): New macro. Checks a BFD to make sure that is an SH + ELF bfd. + (sh_elf_size_dynamic_sections): Use is_sh_elf macro to check the + bfd being processed. + (sh_elf_relocate_section): Likewise. + (sh_elf_check_relocs): Likewise. + (sh_elf_copy_private_data): Likewise. + (sh_elf_relax_section): Use elf_symtab_hdr. + (sh_elf_size_dynamic_sections): Likewise. + (sh_elf_relocate_section): Likewise. + (sh_elf_get_relocated_section_contents): Likewise. + (sh_elf_gc_sweep_hook): Likewise. + (sh_elf_check_relocs): Likewise. + * elf64-alpha.c (elf64_alpha_mkobject): Call bfd_elf_allocate_object. + (is_alpha_elf): New macro. Checks a BFD to make sure that is an + Alpha ELF bfd. + (elf64_alpha_create_got_section): Use is_alpha_elf macro to check + the bfd being processed. + (elf64_alpha_create_dynamic_section): Likewise. + (elf64_alpha_check_relocs): Likewise. + (elf64_alpha_size_got_sections): Likewise. + (elf64_alpha_relax_section): Likewise. + (elf64_alpha_relocate_section): Likewise. + (elf64_alpha_final_link): Likewise. + (elf64_alpha_check_relocs): Use elf_symtab_hdr. + (elf64_alpha_relax_section): Likewise. + (elf64_alpha_relocate_section_r): Likewise. + (elf64_alpha_relocate_section): Likewise. + * elf64-ppc.c (ppc64_elf_mkobject): Call bfd_elf_allocate_object. + (ppc64_elf_check_relocs): Use is_ppc64_elf_target to check the bfd + being processed. + (opd_entry_value): Likewise. + (allocate_dynrelocs): Likewise. + (ppc64_elf_relocate_section): Likewise. + (ppc64_elf_check_relocs): Use elf_symtab_hdr. + (opd_entry_value): Likewise. + (ppc64_elf_gc_sweep_hook): Likewise. + (get_sym_h): Likewise. + (ppc64_elf_edit_opd): Likewise. + (ppc64_elf_tls_optimize): Likewise. + (ppc64_elf_edit_toc): Likewise. + (ppc64_elf_size_dynamic_sections): Likewise. + (toc_adjusting_stub_needed): Likewise. + (ppc64_elf_size_stubs): Likewise. + (ppc64_elf_relocate_section): Likewise. + * elf64-s390.c (struct elf_s390_obj_tdata): Add a comment + reminding programmers to keep this structure in sync with the one + defined in elf32-s390.c. + (elf_s390_mkobject): Call bfd_elf_allocate_object. + (is_s390_elf): New macro. Checks a BFD to make sure that is an s390 + ELF bfd. + (elf_s390_check_relocs): Use is_s390_elf macro to check the bfd + being processed. + (elf_s390_size_dynamic_sections): Likewise. + (elf_s390_relocate_section): Likewise. + (elf_s390_check_relocs): Use elf_symtab_hdr. + (elf_s390_gc_sweep_hook): Likewise. + (elf_s390_size_dynamic_sections): Likewise. + (elf_s390_relocate_section): Likewise. + * elf64-x86_64.c (elf64_x86_64_mkobject): Call bfd_elf_allocate_object. + (is_x86_64_elf): New macro. Checks a BFD to make sure that is an + x86_64 ELF bfd. + (elf64_x86_64_check_relocs): Use is_x86_64_elf macro to check the bfd + being processed. + (elf64_x86_64_size_dynamic_sections): Likewise. + (elf64_x86_64_relocate_section): Likewise. + (elf64_x86_64_check_relocs): Use elf_symtab_hdr. + (elf64_x86_64_gc_sweep_hook): Likewise. + (elf64_x86_64_size_dynamic_sections): Likewise. + (elf64_x86_64_relocate_section): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_mkobject): Call bfd_elf_allocate_object. + (is_sparc_elf): New macro. Checks a BFD to make sure that is a Sparc + ELF bfd. + (_bfd_sparc_elf_check_relocs): Use is_sparc_elf macro to check the + bfd being processed. + (_bfd_sparc_elf_gc_sweep_hook): Likewise. + (_bfd_sparc_elf_size_dynamic_sections): Likewise. + (_bfd_sparc_elf_check_relocs): Use elf_symtab_hdr. + (_bfd_sparc_elf_gc_sweep_hook): Likewise. + (_bfd_sparc_elf_size_dynamic_sections): Likewise. + (_bfd_sparc_elf_relocate_section): Likewise. + +2008-02-12 Alan Modra + + PR 5303, 5755 + * arange-set.c: Delete. + * arange-set.h: Delete. + * dwarf2.c: Revert 2007-09-21 changes. + * Makefile.am: Likewise. + * Makefile.in: Regenerate. + * po/SRC-POTFILES.in: Regenerate. + +2008-02-11 Bernd Schmidt + + * elf32-bfin.c (bfin_relocate_section): Set up dynobj before using it + if necessary. + (elf32_bfin_merge_private_bfd_data): Simplify, and ensure object type + mismatches are detected. + + * elf32-bfin.c (bfinfdpic_relocate_section): Take more care not to + emit invalid relocs or rofixup entries for deleted .eh_frame entries. + +2008-02-11 Daniel Jacobowitz + + * cache.c (cache_bread): Set bfd_error_file_truncated if EOF + was reached. + * srec.c (srec_scan): Calculate the checksum. Complain on mismatch. + +2008-02-07 Alan Modra + + * elf32-spu.c (spu_elf_size_stubs): Revert 2008-01-28 doubling + of _ovly_buf_table size. + (spu_elf_build_stubs): Use low bit of .size as "present" bit. + Adjust initialisations relating to _ovly_buf_table. + +2008-02-04 Bob Wilson + + * elf32-xtensa (elf_xtensa_relocate_section): After finding an invalid + relocation, do not continue processing it. Ignore R_XTENSA_ASM_EXPAND + relocations against dynamic symbols. + (elf_xtensa_finish_dynamic_sections): Do not fail if there is no + .xt.lit section. + +2008-02-04 Kai Tietz + H.J. Lu + + PR 5715 + * warning.m4: Enable -Wno-format by default when using gcc on + mingw. + * configure: Regenerated. + +2008-02-04 Adam Nemet + + * archures.c: Update copyright. + (bfd_mach_mips_octeon): New macro. + * bfd-in2.h: Regenerate. + * elfxx-mips.c (_bfd_elf_mips_mach): Handle Octeon. + (mips_set_isa_flags): Likewise. + (mips_mach_extensions): Add Octeon. + * cpu-mips.c: Update copyright. + (I_mipsocteon): New enum constant. + (arch_info_struct): Add Octeon. + +2008-02-04 Alan Modra + + * elf32-spu.c (spu_elf_relocate_section): Correct return type. + Return error status on unexpected relocation errors. + +2008-02-04 Alan Modra + + PR ld/5692 + * elf.c (bfd_elf_get_elf_syms): Revert 2008-01-31. Instead abort + on non-ELF input. + * elf32-arm.c (elf32_arm_size_dynamic_sections): Skip glue + processing on non-ELF input. + +2008-01-31 Marc Gauthier + + * config.bfd (xtensa*-*-*): Recognize processor variants. + +2008-01-31 Nick Clifton + + PR ld/5692 + * elf.c (bfd_elf_get_elf_syms): Check the return value of + get_elf_backend_data. + +2008-01-28 Fabian Groffen + + * config.bfd (x86_64-*-solaris2): Add support for this target. + +2008-01-28 Alan Modra + + Rewrite SPU overlay handling code. Put overlay calls stubs in the + overlays where possible. Use a faster call stub, or optionally at + compile time, a more compact stub. Double size of _ovly_buf_table + so that low bit of _ovly_table.buf can be used as a "present" bit. + Reserve an extra _ovly_table entry for index zero. + * elf32-spu.c: (struct spu_link_hash_table): Delete a number of fields, + add new ones. + (struct got_entry): New. + (struct spu_stub_hash_entry): Delete. + (stub_hash_newfunc, spu_elf_link_hash_table_free): Delete. + (spu_elf_link_hash_table_create): Adjust for struct changes. + (spu_stub_name): Delete. + (spu_elf_find_overlays): Don't track sections from overlay regions. + Instead set ovl_buf number in spu elf section data. Error if + overlays in one region don't start at the same address. Adjust + for struct _spu_elf_section_data changes. + (SIZEOF_STUB1, SIZEOF_STUB2, ILA_79, ILA_78): Delete. + (OVL_STUB_SIZE, BRSL, LNOP, ILA): Define. + (needs_ovl_stub): Adjust for struct _spu_elf_section_data changes. + (enum _insn_type): New. + (count_stub, build_stub): New functions. + (allocate_spuear_stubs): Use count_stub. + (build_spuear_stubs): Use build_stub. + (populate_stubs, sort_stubs): Delete. + (process_stubs): New function. + (write_one_stub): Delete. + (spu_elf_size_stubs, spu_elf_build_stubs): Rewrite. + (alloc_stack_info): Adjust for struct _spu_elf_section_data changes. + (maybe_insert_function, check_function_ranges): Likewise. + (find_function, pasted_function, build_call_tree): Likewise. + (spu_elf_stack_analysis, spu_elf_modify_segment_map): Likewise. + (spu_elf_modify_program_headers): Likewise. + (interesting_section): Detect stub sections differently. Delete + htab param, adjust all callers. + (spu_elf_relocate_section): Rewrite stub handling. + (spu_elf_output_symbol_hook): Likewise. + (bfd_elf32_bfd_link_hash_table_free): Delete. + * elf32-spu.h (struct _spu_elf_section_data): Move input-only and + output-only fields into a union. Add ovl_buf. + (spu_elf_size_stubs, spu_elf_build_stubs): Update prototypes. + +2008-01-25 DJ Delorie + + * elf32-m32c.c (_bfd_m32c_elf_eh_frame_address_size): New. + +2008-01-25 Kai Tietz + + * bfd-in.h: Add mingw I64 support. + * bfd-in2.h: Regenerated. + * bfd.c: (bfd_get_sign_extend_vma): Add pe-x86-64 and pei-x86-64. + +2008-01-21 Alan Modra + + PR 4453 + * format.c (bfd_check_format_matches): Don't accept archives as + fully matching unless they have a map. + +2008-01-21 Alan Modra + + * elflink.c (_bfd_elf_link_output_relocs): Correct error return. + +2008-01-21 Alan Modra + + * ecoff.c (_bfd_ecoff_archive_p): Delete. + * libecoff.h (_bfd_ecoff_archive_p): Delete. + * coff-alpha.c (ecoffalpha_little_vec): Use bfd_generic_archive_p. + * coff-mips.c (ecoff_little_vec, ecoff_big_vec): Likewise. + (ecoff_biglittle_vec): Likewise. + +2008-01-19 Alan Modra + + PR 5646 + * elf64-ppc.c (ppc64_elf_tls_optimize): Ensure htab->tls_get_addr + non-NULL before dereferencing. + +2008-01-15 Alan Modra + + PR 5604 + * elf-bfd.h (struct elf_backend_data): Add gc_keep. Remove param + names from others. + (_bfd_elf_gc_keep): Declare. + * elfxx-target.h (elf_backend_gc_keep): Define. + (elfNN_bed): Init new field. + * elflink.c (_bfd_elf_gc_keep): New function. + (bfd_elf_gc_sections): Call gc_keep. + * elf64-ppc.c (elf_backend_gc_keep): Define. + (struct _ppc64_elf_section_data): Move .opd related fields to + a struct so they don't occupy the same storage. Adjust accesses + throughout file. + (ppc64_elf_gc_keep): New function, split out from.. + (ppc64_elf_gc_mark_hook): ..here. Don't call _bfd_elf_gc_mark + to mark .opd section, just set gc_mark. + (ppc64_elf_edit_opd): Remove no_opd_opt parm. Don't set opd->adjust + unless we are changing .opd. Test non-NULL opd->adjust at all + accesses throughout file. + * elf64-ppc.h (ppc64_elf_edit_opd): Update prototype. + +2008-01-15 Alan Modra + + * bfd-in.h (BFD_HOST_LONG_LONG): Delete. + * bfd-in2.h: Regenerate. + +2008-01-11 Tristan Gingold + Eric Botcazou + + * elf32-ppc.c (ppc_elf_gc_sweep_hook): Exit early if generating a + relocatable. + * elf32-arm.c (elf32_arm_gc_sweep_hook): Likewise. + * elf32-cris.c (cris_elf_gc_sweep_hook): Likewise. + * elf32-hppa.c (elf32_hppa_gc_sweep_hook): Likewise. + * elf32-i386.c (elf_i386_gc_sweep_hook): Likewise. + * elf32-m32r.c (m32r_elf_gc_sweep_hook): Likewise. + * elf32-m68k.c (elf_m68k_gc_sweep_hook): Likewise. + * elf32-s390.c (elf_s390_gc_sweep_hook): Likewise. + * elf32-sh.c (sh_elf_gc_sweep_hook): Likewise. + * elf32-vax.c (elf_vax_gc_sweep_hook): Likewise. + * elf32-xtensa.c (elf_xtensa_gc_sweep_hook): Likewise. + * elf64-x86-64.c (elf64_x86_64_gc_sweep_hook): Likewise. + * elf64-s390.c (elf_s390_gc_sweep_hook): Likewise. + * elf64-ppc.c (ppc64_elf_gc_sweep_hook): Likewise. + * elfxx-mips.c (_bfd_mips_elf_gc_sweep_hook): Likewise. + * elfxx-sparc.c (_bfd_sparc_elf_gc_sweep_hook): Likewise. + * elflink.c (bfd_elf_gc_sections): Do not punt on relocatable output + or executable output with relocations. + +2008-01-09 Nick Clifton + + PR gas/5552 + * elf32-fr30.c (fr30_elf_howto_table): Set partial_inplace field + to FALSE for all relocs. + +2008-01-09 Richard Sandiford + + PR ld/5526 + * elf-bfd.h (eh_cie_fde): Add u.cie.u.full_cie and u.cie.merged + fields. Rename u.cie.u.merged to u.cie.u.merged_with. + (eh_frame_sec_info): Add a cies field. + (eh_frame_hdr_info): Add a merge_cies field. + * elf-eh-frame.c (cie): Add a reloc_index member to the personality + union. + (_bfd_elf_begin_eh_frame_parsing): Set hdr_info->merge_cies instead + of hdr_info->cies. + (_bfd_elf_parse_eh_frame): Remove tmp_cie. Ccreate an array of + cie structures in all cases and use it instead of extended_cies. + If merging, store the cie array in sec_info->cies and point each + CIE's eh_fde_cie at the associated element. Do not try to + calculate the value of the personality routine here; record the + offset of the relocation instead. Do not merge CIEs here. + (_bfd_elf_end_eh_frame_parsing): Do not free hdr_info->cies here... + (_bfd_elf_discard_section_eh_frame_hdr): ...do it here instead. + (_bfd_elf_gc_mark_fdes): Mark the original (unmerged) CIE. + (find_merged_cie): New function. + (_bfd_elf_gc_mark_fdes): Use it. Free sec_info->cies. + +2008-01-07 Nick Clifton + + PR binutils/5535 + * vms.c (vms_close_and_cleanup): Check for the presence of a + vms_private_data_struct before examining any of its fields. + +2008-01-07 H.J. Lu + + PR ld/5522 + * elflink.c (elf_link_input_bfd): Don't write out a section if + its output section is marked with SEC_NEVER_LOAD. + +For older changes see ChangeLog-2007 + +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 ee6c66b..a0c1eaa 100644 --- a/bfd/Makefile.am +++ b/bfd/Makefile.am @@ -1,30 +1,40 @@ ## Process this file with automake to generate Makefile.in -AUTOMAKE_OPTIONS = 1.9 cygnus +AUTOMAKE_OPTIONS = 1.11 no-dist foreign ACLOCAL_AMFLAGS = -I . -I .. -I ../config # Uncomment the following line when doing a release. -# RELEASE=y +RELEASE=y INCDIR = $(srcdir)/../include CSEARCH = -I. -I$(srcdir) -I$(INCDIR) -MKDEP = gcc -MM SUBDIRS = doc po bfddocdir = doc + +libbfd_la_LDFLAGS = +if INSTALL_LIBBFD bfdlibdir = @bfdlibdir@ bfdincludedir = @bfdincludedir@ - -datarootdir = @datarootdir@ -docdir = @docdir@ -htmldir = @htmldir@ - bfdlib_LTLIBRARIES = libbfd.la +bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h +else !INSTALL_LIBBFD +# Empty these so that the respective installation directories will not be created. +bfdlibdir = +bfdincludedir = +rpath_bfdlibdir = @bfdlibdir@ +noinst_LTLIBRARIES = libbfd.la +libbfd_la_LDFLAGS += -rpath $(rpath_bfdlibdir) +endif WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) +AM_CPPFLAGS = -DBINDIR='"$(bindir)"' +if PLUGINS +LIBDL = -ldl +endif # bfd.h goes here, for now BFD_H = bfd.h @@ -42,7 +52,7 @@ BFD32_LIBS = \ format.lo init.lo libbfd.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 + merge.lo dwarf2.lo simple.lo compress.lo verilog.lo BFD64_LIBS = archive64.lo @@ -52,7 +62,7 @@ BFD32_LIBS_CFILES = \ format.c init.c libbfd.c opncls.c reloc.c \ section.c syms.c targets.c hash.c linker.c \ srec.c binary.c tekhex.c ihex.c stabs.c stab-syms.c \ - merge.c dwarf2.c simple.c + merge.c dwarf2.c simple.c compress.c verilog.c BFD64_LIBS_CFILES = archive64.c @@ -76,33 +86,38 @@ ALL_MACHINES = \ cpu-h8300.lo \ cpu-h8500.lo \ cpu-hppa.lo \ - cpu-ia64.lo \ cpu-i370.lo \ cpu-i386.lo \ + cpu-l1om.lo \ cpu-i860.lo \ cpu-i960.lo \ + cpu-ia64.lo \ cpu-ip2k.lo \ cpu-iq2000.lo \ + cpu-lm32.lo \ + cpu-m10200.lo \ + cpu-m10300.lo \ cpu-m32c.lo \ cpu-m32r.lo \ cpu-m68hc11.lo \ cpu-m68hc12.lo \ cpu-m68k.lo \ cpu-m88k.lo \ - cpu-m10200.lo \ - cpu-m10300.lo \ cpu-maxq.lo \ cpu-mcore.lo \ cpu-mep.lo \ + cpu-microblaze.lo \ cpu-mips.lo \ cpu-mmix.lo \ - cpu-mt.lo \ + cpu-moxie.lo \ cpu-msp430.lo \ - cpu-or32.lo \ + cpu-mt.lo \ cpu-ns32k.lo \ cpu-openrisc.lo \ + cpu-or32.lo \ cpu-pdp11.lo \ cpu-pj.lo \ + cpu-plugin.lo \ cpu-powerpc.lo \ cpu-rs6000.lo \ cpu-s390.lo \ @@ -116,11 +131,11 @@ ALL_MACHINES = \ cpu-tic80.lo \ cpu-v850.lo \ cpu-vax.lo \ - cpu-we32k.lo \ cpu-w65.lo \ + cpu-we32k.lo \ + cpu-xc16x.lo \ cpu-xstormy16.lo \ cpu-xtensa.lo \ - cpu-xc16x.lo \ cpu-z80.lo \ cpu-z8k.lo @@ -131,8 +146,8 @@ ALL_MACHINES_CFILES = \ cpu-avr.c \ cpu-bfin.c \ cpu-cr16.c \ - cpu-cris.c \ cpu-cr16c.c \ + cpu-cris.c \ cpu-crx.c \ cpu-d10v.c \ cpu-d30v.c \ @@ -142,33 +157,38 @@ ALL_MACHINES_CFILES = \ cpu-h8300.c \ cpu-h8500.c \ cpu-hppa.c \ - cpu-ia64.c \ cpu-i370.c \ cpu-i386.c \ + cpu-l1om.c \ cpu-i860.c \ cpu-i960.c \ + cpu-ia64.c \ cpu-ip2k.c \ cpu-iq2000.c \ + cpu-lm32.c \ + cpu-m10200.c \ + cpu-m10300.c \ cpu-m32c.c \ cpu-m32r.c \ cpu-m68hc11.c \ cpu-m68hc12.c \ cpu-m68k.c \ cpu-m88k.c \ - cpu-m10200.c \ - cpu-m10300.c \ cpu-maxq.c \ cpu-mcore.c \ cpu-mep.c \ + cpu-microblaze.c \ cpu-mips.c \ cpu-mmix.c \ - cpu-mt.c \ + cpu-moxie.c \ cpu-msp430.c \ - cpu-or32.c \ + cpu-mt.c \ cpu-ns32k.c \ cpu-openrisc.c \ + cpu-or32.c \ cpu-pdp11.c \ cpu-pj.c \ + cpu-plugin.c \ cpu-powerpc.c \ cpu-rs6000.c \ cpu-s390.c \ @@ -182,11 +202,11 @@ ALL_MACHINES_CFILES = \ cpu-tic80.c \ cpu-v850.c \ cpu-vax.c \ - cpu-we32k.c \ cpu-w65.c \ + cpu-we32k.c \ + cpu-xc16x.c \ cpu-xstormy16.c \ cpu-xtensa.c \ - cpu-xc16x.c \ cpu-z80.c \ cpu-z8k.c @@ -208,10 +228,10 @@ BFD32_BACKENDS = \ coff-apollo.lo \ coff-arm.lo \ coff-aux.lo \ + coff-go32.lo \ coff-h8300.lo \ coff-h8500.lo \ coff-i386.lo \ - coff-go32.lo \ coff-i860.lo \ coff-i960.lo \ coff-m68k.lo \ @@ -229,15 +249,21 @@ BFD32_BACKENDS = \ coff-tic54x.lo \ coff-tic80.lo \ coff-u68k.lo \ - coff-we32k.lo \ coff-w65.lo \ + coff-we32k.lo \ coff-z80.lo \ coff-z8k.lo \ cofflink.lo \ dwarf1.lo \ ecoff.lo \ ecofflink.lo \ - efi-app-ia32.lo \ + elf-attrs.lo \ + elf-eh-frame.lo \ + elf-ifunc.lo \ + elf-m10200.lo \ + elf-m10300.lo \ + elf-strtab.lo \ + elf-vxworks.lo \ elf.lo \ elf32-am33lin.lo \ elf32-arc.lo \ @@ -262,6 +288,7 @@ BFD32_BACKENDS = \ elf32-i960.lo \ elf32-ip2k.lo \ elf32-iq2000.lo \ + elf32-lm32.lo \ elf32-m32c.lo \ elf32-m32r.lo \ elf32-m68hc11.lo \ @@ -269,52 +296,46 @@ BFD32_BACKENDS = \ elf32-m68hc1x.lo \ elf32-m68k.lo \ elf32-m88k.lo \ - elf-m10200.lo \ - elf-m10300.lo \ elf32-mcore.lo \ elf32-mep.lo \ - elfxx-mips.lo \ + elf32-microblaze.lo \ elf32-mips.lo \ - elf32-mt.lo \ + elf32-moxie.lo \ elf32-msp430.lo \ + elf32-mt.lo \ elf32-openrisc.lo \ elf32-or32.lo \ elf32-pj.lo \ elf32-ppc.lo \ elf32-s390.lo \ - elf32-score.lo \ - elf32-sh.lo \ elf32-sh-symbian.lo \ - elf32-sh64.lo \ + elf32-sh.lo \ elf32-sh64-com.lo \ - elfxx-sparc.lo \ + elf32-sh64.lo \ elf32-sparc.lo \ elf32-spu.lo \ elf32-v850.lo \ elf32-vax.lo \ + elf32-xc16x.lo \ elf32-xstormy16.lo \ elf32-xtensa.lo \ - elf32-xc16x.lo \ elf32.lo \ elflink.lo \ - elf-attrs.lo \ - elf-strtab.lo \ - elf-eh-frame.lo \ - elf-vxworks.lo \ + elfxx-mips.lo \ + elfxx-sparc.lo \ epoc-pe-arm.lo \ epoc-pei-arm.lo \ hp300bsd.lo \ hp300hpux.lo \ - som.lo \ i386aout.lo \ i386bsd.lo \ i386dynix.lo \ i386freebsd.lo \ i386linux.lo \ i386lynx.lo \ + i386mach3.lo \ i386msdos.lo \ i386netbsd.lo \ - i386mach3.lo \ i386os9k.lo \ ieee.lo \ m68k4knetbsd.lo \ @@ -323,49 +344,52 @@ BFD32_BACKENDS = \ m88kmach3.lo \ m88kopenbsd.lo \ mach-o.lo \ + mach-o-i386.lo \ mipsbsd.lo \ newsos3.lo \ nlm.lo \ nlm32-i386.lo \ - nlm32-sparc.lo \ nlm32-ppc.lo \ + nlm32-sparc.lo \ nlm32.lo \ ns32knetbsd.lo \ oasys.lo \ pc532-mach.lo \ pdp11.lo \ - pef.lo \ - pe-arm.lo \ - pei-arm.lo \ pe-arm-wince.lo \ - pei-arm-wince.lo \ + pe-arm.lo \ pe-i386.lo \ - pei-i386.lo \ pe-mcore.lo \ - pei-mcore.lo \ + pe-mips.lo \ pe-ppc.lo \ - pei-ppc.lo \ pe-sh.lo \ - pei-sh.lo \ - pe-mips.lo \ + pef.lo \ + pei-arm-wince.lo \ + pei-arm.lo \ + pei-i386.lo \ + pei-mcore.lo \ pei-mips.lo \ + pei-ppc.lo \ + pei-sh.lo \ peigen.lo \ + plugin.lo \ ppcboot.lo \ reloc16.lo \ riscix.lo \ + som.lo \ sparclinux.lo \ sparclynx.lo \ sparcnetbsd.lo \ sunos.lo \ - vaxnetbsd.lo \ vax1knetbsd.lo \ vaxbsd.lo \ + vaxnetbsd.lo \ versados.lo \ - vms.lo \ vms-gsd.lo \ vms-hdr.lo \ vms-misc.lo \ vms-tir.lo \ + vms.lo \ xcofflink.lo \ xsym.lo \ xtensa-isa.lo \ @@ -387,11 +411,11 @@ BFD32_BACKENDS_CFILES = \ coff-apollo.c \ coff-arm.c \ coff-aux.c \ + coff-go32.c \ coff-h8300.c \ coff-h8500.c \ coff-i386.c \ coff-i860.c \ - coff-go32.c \ coff-i960.c \ coff-m68k.c \ coff-m88k.c \ @@ -408,15 +432,21 @@ BFD32_BACKENDS_CFILES = \ coff-tic54x.c \ coff-tic80.c \ coff-u68k.c \ - coff-we32k.c \ coff-w65.c \ + coff-we32k.c \ coff-z80.c \ coff-z8k.c \ cofflink.c \ dwarf1.c \ ecoff.c \ ecofflink.c \ - efi-app-ia32.c \ + elf-attrs.c \ + elf-eh-frame.c \ + elf-ifunc.c \ + elf-m10200.c \ + elf-m10300.c \ + elf-strtab.c \ + elf-vxworks.c \ elf.c \ elf32-am33lin.c \ elf32-arc.c \ @@ -441,59 +471,54 @@ BFD32_BACKENDS_CFILES = \ elf32-i960.c \ elf32-ip2k.c \ elf32-iq2000.c \ + elf32-lm32.c \ elf32-m32c.c \ elf32-m32r.c \ - elf32-m68k.c \ elf32-m68hc11.c \ elf32-m68hc12.c \ elf32-m68hc1x.c \ + elf32-m68k.c \ elf32-m88k.c \ - elf-m10200.c \ - elf-m10300.c \ elf32-mcore.c \ elf32-mep.c \ - elfxx-mips.c \ + elf32-microblaze.c \ elf32-mips.c \ - elf32-mt.c \ + elf32-moxie.c \ elf32-msp430.c \ + elf32-mt.c \ elf32-openrisc.c \ elf32-or32.c \ elf32-pj.c \ elf32-ppc.c \ - elf32-sh64.c \ - elf32-sh64-com.c \ elf32-s390.c \ - elf32-score.c \ - elf32-sh.c \ elf32-sh-symbian.c \ - elfxx-sparc.c \ + elf32-sh.c \ + elf32-sh64-com.c \ + elf32-sh64.c \ elf32-sparc.c \ elf32-spu.c \ elf32-v850.c \ elf32-vax.c \ + elf32-xc16x.c \ elf32-xstormy16.c \ elf32-xtensa.c \ - elf32-xc16x.c \ elf32.c \ elflink.c \ - elf-attrs.c \ - elf-strtab.c \ - elf-eh-frame.c \ - elf-vxworks.c \ + elfxx-mips.c \ + elfxx-sparc.c \ epoc-pe-arm.c \ epoc-pei-arm.c \ hp300bsd.c \ hp300hpux.c \ - som.c \ i386aout.c \ i386bsd.c \ i386dynix.c \ i386freebsd.c \ i386linux.c \ i386lynx.c \ + i386mach3.c \ i386msdos.c \ i386netbsd.c \ - i386mach3.c \ i386os9k.c \ ieee.c \ m68k4knetbsd.c \ @@ -502,48 +527,51 @@ BFD32_BACKENDS_CFILES = \ m88kmach3.c \ m88kopenbsd.c \ mach-o.c \ + mach-o-i386.c \ mipsbsd.c \ newsos3.c \ nlm.c \ nlm32-i386.c \ - nlm32-sparc.c \ nlm32-ppc.c \ + nlm32-sparc.c \ nlm32.c \ ns32knetbsd.c \ oasys.c \ pc532-mach.c \ pdp11.c \ - pef.c \ - pe-arm.c \ - pei-arm.c \ pe-arm-wince.c \ - pei-arm-wince.c \ + pe-arm.c \ pe-i386.c \ - pei-i386.c \ pe-mcore.c \ - pei-mcore.c \ + pe-mips.c \ pe-ppc.c \ - pei-ppc.c \ pe-sh.c \ - pei-sh.c \ - pe-mips.c \ + pef.c \ + pei-arm-wince.c \ + pei-arm.c \ + pei-i386.c \ + pei-mcore.c \ pei-mips.c \ + pei-ppc.c \ + pei-sh.c \ + plugin.c \ ppcboot.c \ reloc16.c \ riscix.c \ + som.c \ sparclinux.c \ sparclynx.c \ sparcnetbsd.c \ sunos.c \ - vaxnetbsd.c \ vax1knetbsd.c \ vaxbsd.c \ + vaxnetbsd.c \ versados.c \ - vms.c \ vms-gsd.c \ vms-hdr.c \ vms-misc.c \ vms-tir.c \ + vms.c \ xcofflink.c \ xsym.c \ xtensa-isa.c \ @@ -558,29 +586,30 @@ BFD64_BACKENDS = \ aix5ppc-core.lo \ aout64.lo \ coff-alpha.lo \ + coff-x86_64.lo \ coff64-rs6000.lo \ demo64.lo \ - efi-app-ia64.lo \ - efi-app-x86_64.lo \ - elf64-x86-64.lo \ + elf32-ia64.lo \ + elf32-score.lo \ + elf32-score7.lo \ elf64-alpha.lo \ + elf64-gen.lo \ elf64-hppa.lo \ - elf32-ia64.lo \ elf64-ia64.lo \ - elf64-gen.lo \ - elfn32-mips.lo \ elf64-mips.lo \ elf64-mmix.lo \ - elf64-sh64.lo \ elf64-ppc.lo \ elf64-s390.lo \ + elf64-sh64.lo \ elf64-sparc.lo \ + elf64-x86-64.lo \ elf64.lo \ + elfn32-mips.lo \ mmo.lo \ nlm32-alpha.lo \ nlm64.lo \ - coff-x86_64.lo \ pe-x86_64.lo \ + pei-ia64.lo \ pei-x86_64.lo \ pepigen.lo \ pex64igen.lo @@ -589,48 +618,49 @@ BFD64_BACKENDS_CFILES = \ aix5ppc-core.c \ aout64.c \ coff-alpha.c \ + coff-x86_64.c \ coff64-rs6000.c \ demo64.c \ - efi-app-ia64.c \ - efi-app-x86_64.c \ - elf64-x86-64.c \ + elf32-score.c \ + elf32-score7.c \ elf64-alpha.c \ - elf64-hppa.c \ elf64-gen.c \ - elfn32-mips.c \ + elf64-hppa.c \ elf64-mips.c \ elf64-mmix.c \ elf64-ppc.c \ elf64-s390.c \ elf64-sh64.c \ elf64-sparc.c \ + elf64-x86-64.c \ elf64.c \ + elfn32-mips.c \ mmo.c \ nlm32-alpha.c \ nlm64.c \ - coff-x86_64.c \ pe-x86_64.c \ + pei-ia64.c \ pei-x86_64.c OPTIONAL_BACKENDS = \ aix386-core.lo \ + cisco-core.lo \ hpux-core.lo \ irix-core.lo \ lynx-core.lo \ osf-core.lo \ sco5-core.lo \ - trad-core.lo \ - cisco-core.lo + trad-core.lo OPTIONAL_BACKENDS_CFILES = \ aix386-core.c \ + cisco-core.c \ hpux-core.c \ irix-core.c \ lynx-core.c \ osf-core.c \ sco5-core.c \ - trad-core.c \ - cisco-core.c + trad-core.c # We want to rerun configure if configure.in, config.bfd or # configure.host change. configure.in is needed since the version @@ -679,6 +709,9 @@ SOURCE_HFILES = \ BUILD_HFILES = \ bfdver.h elf32-target.h elf64-target.h targmatch.h bfd_stdint.h +# Ensure they are built early: +BUILT_SOURCES = $(BUILD_HFILES) + HFILES = $(SOURCE_HFILES) $(BUILD_HFILES) SRC_POTFILES = $(SOURCE_CFILES) $(SOURCE_HFILES) @@ -686,45 +719,16 @@ BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES) po/SRC-POTFILES.in: @MAINT@ Makefile $(SRC_POTFILES) for file in $(SRC_POTFILES); do echo $$file; done \ - | LC_COLLATE= sort > tmp.src \ + | LC_ALL=C sort > tmp.src \ && mv tmp.src $(srcdir)/po/SRC-POTFILES.in po/BLD-POTFILES.in: @MAINT@ Makefile $(BLD_POTFILES) for file in $(BLD_POTFILES); do echo $$file; done \ - | LC_COLLATE= sort > tmp.bld \ + | LC_ALL=C sort > tmp.bld \ && mv tmp.bld $(srcdir)/po/BLD-POTFILES.in all diststuff: info -.PHONY: install-html install-html-am install-html-recursive - -install-html: install-html-recursive - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - # Various kinds of .o files to put in libbfd.a: # BFD_BACKENDS Routines the configured targets need. # BFD_MACHINES Architecture-specific routines the configured targets need. @@ -749,10 +753,13 @@ ofiles: stamp-ofiles ; @true # Since BFD64_LIBS is optional and we can't have substitution in # libbfd_la_SOURCES, we put BFD64_LIBS in OFILES instead. +# However, list all sources in EXTRA_libbfd_la_SOURCES so the +# dependency tracking fragments are picked up in the Makefile. libbfd_la_SOURCES = $(BFD32_LIBS_CFILES) +EXTRA_libbfd_la_SOURCES = $(CFILES) libbfd_la_DEPENDENCIES = $(OFILES) ofiles -libbfd_la_LIBADD = `cat ofiles` @WIN32LIBADD@ -libbfd_la_LDFLAGS = -release `cat libtool-soversion` @WIN32LDFLAGS@ +libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) +libbfd_la_LDFLAGS += -release `cat libtool-soversion` @SHARED_LDFLAGS@ # 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 @@ -785,13 +792,40 @@ targmatch.h: config.bfd targmatch.sed # info from configure. targets.lo: targets.c Makefile - $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/targets.c +if am__fastdepCC + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +else +if AMDEP + source='targets.c' object='$@' libtool=yes @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c +endif archures.lo: archures.c Makefile - $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c +if am__fastdepCC + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +else +if AMDEP + source='archures.c' object='$@' libtool=yes @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c +endif dwarf2.lo: dwarf2.c Makefile - $(LIBTOOL) --mode=compile $(COMPILE) -c -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c +if am__fastdepCC + $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +else +if AMDEP + source='dwarf2.c' object='$@' libtool=yes @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c +endif elf32-target.h : elfxx-target.h rm -f elf32-target.h @@ -837,75 +871,6 @@ $(BFD32_LIBS) \ $(BFD64_BACKENDS) \ $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS) -install-bfdlibLTLIBRARIES: @INSTALL_LIBBFD_TRUE@install_libbfd - @$(NORMAL_INSTALL) - -uninstall-bfdlibLTLIBRARIES: @INSTALL_LIBBFD_TRUE@uninstall_libbfd - @$(NORMAL_UNINSTALL) - -.PHONY: install_libbfd uninstall_libbfd -install_libbfd: $(bfdlib_LTLIBRARIES) $(BFD_H) - $(mkinstalldirs) $(DESTDIR)$(bfdlibdir) - $(mkinstalldirs) $(DESTDIR)$(bfdincludedir) - @list='$(bfdlib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(bfdlibdir)/$$p"; \ - $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(bfdlibdir)/$$p; \ - else :; fi; \ - done - $(INSTALL_DATA) $(BFD_H) $(DESTDIR)$(bfdincludedir)/bfd.h - $(INSTALL_DATA) $(INCDIR)/ansidecl.h $(DESTDIR)$(bfdincludedir)/ansidecl.h - $(INSTALL_DATA) $(INCDIR)/symcat.h $(DESTDIR)$(bfdincludedir)/symcat.h - $(INSTALL_DATA) $(INCDIR)/bfdlink.h $(DESTDIR)$(bfdincludedir)/bfdlink.h - -uninstall_libbfd: - list='$(bfdlib_LTLIBRARIES)'; for p in $$list; do \ - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(bfdlibdir)/$$p; \ - done - rm -f $(DESTDIR)$(bfdincludedir)/bfd.h - rm -f $(DESTDIR)$(bfdincludedir)/ansidecl.h - rm -f $(DESTDIR)$(bfdincludedir)/symcat.h - rm -f $(DESTDIR)$(bfdincludedir)/bfdlink.h - -# Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES). -DEP: dep.sed $(CFILES) $(HFILES) bfd.h - rm -f DEP1 - $(MAKE) MKDEP="$(MKDEP)" DEP1 - sed -f dep.sed < DEP1 > DEPA - echo '# IF YOU PUT ANYTHING HERE IT WILL GO AWAY' >> DEPA - if grep ' /' DEPA > /dev/null 2> /dev/null; then \ - echo 'make DEP failed!'; exit 1; \ - else \ - mv -f DEPA $@; \ - fi - -DEP1: $(CFILES) - echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > DEP2 - echo '# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.' >> DEP2 - $(MKDEP) $(INCLUDES) $(CFLAGS) $? >> DEP2 - mv -f DEP2 $@ - -dep.sed: dep-in.sed config.status - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e 's!@BFD_H@!$(BFD_H)!' \ - -e 's!@SRCDIR@!$(srcdir)!' \ - -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/bfd$$,,`'!' - -dep: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile - cat DEP >> tmp-Makefile - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in - cat DEP >> tmp-Makefile.in - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am - cat DEP >> tmp-Makefile.am - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - host-aout.lo: Makefile # The following program can be used to generate a simple config file @@ -926,7 +891,7 @@ stmp-bfd-h: bfd-in3.h BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c section.c archures.c \ reloc.c syms.c bfd.c bfdio.c bfdwin.c \ - archive.c corefile.c targets.c format.c + archive.c corefile.c targets.c format.c compress.c BFD64_H_FILES = archive64.c LIBBFD_H_FILES = libbfd-in.h init.c libbfd.c bfdio.c bfdwin.c \ cache.c reloc.c archures.c elf.c @@ -991,962 +956,3 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in -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. - -# DO NOT DELETE THIS LINE -- mkdep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. -archive.lo: archive.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/hashtab.h $(INCDIR)/aout/ar.h $(INCDIR)/aout/ranlib.h \ - $(INCDIR)/safe-ctype.h -archures.lo: archures.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/safe-ctype.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 \ - $(INCDIR)/libiberty.h -coffgen.lo: coffgen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h -corefile.lo: corefile.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -format.lo: format.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -init.lo: init.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -libbfd.lo: libbfd.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -opncls.lo: opncls.c $(INCDIR)/filenames.h $(INCDIR)/objalloc.h \ - $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h -reloc.lo: reloc.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h -section.lo: section.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h -syms.lo: syms.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def -targets.lo: targets.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/fnmatch.h targmatch.h -hash.lo: hash.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/objalloc.h $(INCDIR)/libiberty.h -linker.lo: linker.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h genlink.h -srec.lo: srec.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h -binary.lo: binary.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \ - $(INCDIR)/hashtab.h -tekhex.lo: tekhex.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h -ihex.lo: ihex.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h -stabs.lo: stabs.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/safe-ctype.h -stab-syms.lo: stab-syms.c libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab.def -merge.lo: merge.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h -dwarf2.lo: dwarf2.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 \ - $(INCDIR)/elf/dwarf2.h -simple.lo: simple.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h -archive64.lo: archive64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/ar.h -cpu-alpha.lo: cpu-alpha.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-arc.lo: cpu-arc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 -cpu-d10v.lo: cpu-d10v.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-d30v.lo: cpu-d30v.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-dlx.lo: cpu-dlx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-fr30.lo: cpu-fr30.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-frv.lo: cpu-frv.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-h8300.lo: cpu-h8300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-h8500.lo: cpu-h8500.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-hppa.lo: cpu-hppa.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-ia64.lo: cpu-ia64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - cpu-ia64-opc.c $(srcdir)/../opcodes/ia64-opc.h $(INCDIR)/opcode/ia64.h -cpu-i370.lo: cpu-i370.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-i386.lo: cpu-i386.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-i860.lo: cpu-i860.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-i960.lo: cpu-i960.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-ip2k.lo: cpu-ip2k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-iq2000.lo: cpu-iq2000.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-m32c.lo: cpu-m32c.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-m32r.lo: cpu-m32r.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-m68hc11.lo: cpu-m68hc11.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-m68hc12.lo: cpu-m68hc12.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-m68k.lo: cpu-m68k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/opcode/m68k.h -cpu-m88k.lo: cpu-m88k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 -cpu-msp430.lo: cpu-msp430.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-or32.lo: cpu-or32.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - ns32k.h -cpu-openrisc.lo: cpu-openrisc.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-pdp11.lo: cpu-pdp11.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-pj.lo: cpu-pj.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 -cpu-tic80.lo: cpu-tic80.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-v850.lo: cpu-v850.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/safe-ctype.h -cpu-vax.lo: cpu-vax.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-we32k.lo: cpu-we32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-w65.lo: cpu-w65.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-xstormy16.lo: cpu-xstormy16.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-xtensa.lo: cpu-xtensa.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-xc16x.lo: cpu-xc16x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-z80.lo: cpu-z80.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-z8k.lo: cpu-z8k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -aout-adobe.lo: aout-adobe.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/adobe.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - libaout.h $(INCDIR)/bfdlink.h -aout-arm.lo: aout-arm.c $(INCDIR)/filenames.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h aoutx.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -aout-cris.lo: aout-cris.c aout32.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 aout-target.h -aout-ns32k.lo: aout-ns32k.c $(INCDIR)/aout/aout64.h \ - ns32k.h libaout.h $(INCDIR)/bfdlink.h aoutx.h $(INCDIR)/filenames.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h -aout-sparcle.lo: aout-sparcle.c $(INCDIR)/bfdlink.h \ - libaout.h aoutf1.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/sun4.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -aout-tic30.lo: aout-tic30.c $(INCDIR)/filenames.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aoutx.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h -aout0.lo: aout0.c aoutf1.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/sun4.h libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h aout-target.h -aout32.lo: aout32.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 -armnetbsd.lo: armnetbsd.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 -bout.lo: bout.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h genlink.h $(INCDIR)/bout.h $(INCDIR)/libiberty.h \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def libaout.h -cf-i386lynx.lo: cf-i386lynx.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -cf-sparclynx.lo: cf-sparclynx.c coff-sparc.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-apollo.lo: coff-apollo.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/apollo.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-arm.lo: coff-arm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.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 $(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 \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/libiberty.h coffcode.h coffswap.h -coff-h8500.lo: coff-h8500.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/h8500.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-i386.lo: coff-i386.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-i860.lo: coff-i860.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/i860.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-go32.lo: coff-go32.c coff-i386.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-i960.lo: coff-i960.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/i960.h $(INCDIR)/coff/internal.h libcoff.h \ - $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-m68k.lo: coff-m68k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-m88k.lo: coff-m88k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/m88k.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-maxq.lo: coff-maxq.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h coffswap.h -coff-mips.lo: coff-mips.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h \ - $(INCDIR)/coff/external.h libcoff.h libecoff.h coffswap.h \ - ecoffswap.h -coff-or32.lo: coff-or32.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/or32.h $(INCDIR)/coff/internal.h libcoff.h \ - $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-rs6000.lo: coff-rs6000.c $(INCDIR)/filenames.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/xcoff.h $(INCDIR)/coff/rs6000.h libcoff.h \ - libxcoff.h coffcode.h coffswap.h -coff-sh.lo: coff-sh.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/sh.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h coffcode.h coffswap.h -coff-sparc.lo: coff-sparc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-stgo32.lo: coff-stgo32.c coff-i386.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h $(INCDIR)/coff/go32exe.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h \ - go32stub.h -coff-svm68k.lo: coff-svm68k.c coff-m68k.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-tic30.lo: coff-tic30.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-tic4x.lo: coff-tic4x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -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)/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 \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-we32k.lo: coff-we32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/we32k.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-w65.lo: coff-w65.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/w65.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-z80.lo: coff-z80.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-z8k.lo: coff-z8k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -cofflink.lo: cofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h libcoff.h \ - $(INCDIR)/safe-ctype.h -dwarf1.lo: dwarf1.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 \ - $(INCDIR)/elf/dwarf.h -ecoff.lo: ecoff.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/aout/ar.h $(INCDIR)/aout/ranlib.h \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def libaout.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h libcoff.h \ - libecoff.h $(INCDIR)/libiberty.h -ecofflink.lo: ecofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/objalloc.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h libcoff.h \ - libecoff.h -efi-app-ia32.lo: efi-app-ia32.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 $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -elf.lo: elf.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)/libiberty.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/md5.h -elf32-am33lin.lo: elf32-am33lin.c $(INCDIR)/filenames.h \ - elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ - $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mn10300.h \ - $(INCDIR)/elf/reloc-macros.h elf-m10300.c $(INCDIR)/hashtab.h \ - elf32-target.h -elf32-arc.lo: elf32-arc.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/arc.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-arm.lo: elf32-arm.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-vxworks.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \ - elf32-target.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-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 $(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 \ - $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elf32-target.h -elf32-cris.lo: elf32-cris.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/cris.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-crx.lo: elf32-crx.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/crx.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-d10v.lo: elf32-d10v.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/d10v.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-d30v.lo: elf32-d30v.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/d30v.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-dlx.lo: elf32-dlx.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/dlx.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-fr30.lo: elf32-fr30.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/fr30.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-frv.lo: elf32-frv.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/frv.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/dwarf2.h \ - elf32-target.h -elf32-gen.lo: elf32-gen.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 elf32-target.h -elf32-h8300.lo: elf32-h8300.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/h8.h $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-hppa.lo: elf32-hppa.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/hppa.h \ - $(INCDIR)/elf/reloc-macros.h libhppa.h elf32-hppa.h \ - elf-hppa.h elf32-target.h -elf32-i370.lo: elf32-i370.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/i370.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-i386.lo: elf32-i386.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 elf-vxworks.h \ - $(INCDIR)/elf/i386.h $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-i860.lo: elf32-i860.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/i860.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-i960.lo: elf32-i960.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/i960.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-ip2k.lo: elf32-ip2k.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/ip2k.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-iq2000.lo: elf32-iq2000.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/iq2000.h $(INCDIR)/elf/reloc-macros.h \ - elf32-target.h -elf32-m32c.lo: elf32-m32c.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/m32c.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-m32r.lo: elf32-m32r.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/m32r.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-m68k.lo: elf32-m68k.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/m68k.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/m68k.h \ - elf32-target.h -elf32-m68hc11.lo: elf32-m68hc11.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 elf32-m68hc1x.h \ - $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/m68hc11.h elf32-target.h -elf32-m68hc12.lo: elf32-m68hc12.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 elf32-m68hc1x.h \ - $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/m68hc11.h elf32-target.h -elf32-m68hc1x.lo: elf32-m68hc1x.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 elf32-m68hc1x.h \ - $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/m68hc11.h -elf32-m88k.lo: elf32-m88k.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 elf32-target.h -elf-m10200.lo: elf-m10200.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 elf32-target.h -elf-m10300.lo: elf-m10300.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/mn10300.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -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 \ - 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 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 -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 \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-msp430.lo: elf32-msp430.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 $(INCDIR)/elf/msp430.h $(INCDIR)/elf/reloc-macros.h \ - elf32-target.h -elf32-openrisc.lo: elf32-openrisc.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/openrisc.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/libiberty.h elf32-target.h -elf32-or32.lo: elf32-or32.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/or32.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-pj.lo: elf32-pj.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/pj.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-ppc.lo: elf32-ppc.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/ppc.h \ - $(INCDIR)/elf/reloc-macros.h elf32-ppc.h elf-vxworks.h \ - elf32-target.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 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 \ - $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h elf32-sh64.h \ - $(srcdir)/../opcodes/sh64-opc.h -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 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 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 $(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 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 \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-vax.lo: elf32-vax.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/vax.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-xstormy16.lo: elf32-xstormy16.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/xstormy16.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/libiberty.h elf32-target.h -elf32-xtensa.lo: elf32-xtensa.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/xtensa.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/xtensa-isa.h \ - $(INCDIR)/xtensa-config.h elf32-target.h -elf32-xc16x.lo: elf32-xc16x.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/xc16x.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/elf/dwarf2.h $(INCDIR)/libiberty.h elf32-target.h -elf32.lo: elf32.c elfcode.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ - $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfcore.h -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 -elf-eh-frame.lo: elf-eh-frame.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/dwarf2.h -elf-vxworks.lo: elf-vxworks.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 \ - elf-vxworks.h -epoc-pe-arm.lo: epoc-pe-arm.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 -epoc-pei-arm.lo: epoc-pei-arm.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 -hp300bsd.lo: hp300bsd.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 -hp300hpux.lo: hp300hpux.c $(INCDIR)/aout/hp300hpux.h \ - 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 \ - aout-target.h -som.lo: som.c $(INCDIR)/alloca-conf.h $(INCDIR)/filenames.h -i386aout.lo: i386aout.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h libaout.h $(INCDIR)/bfdlink.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -i386bsd.lo: i386bsd.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 -i386dynix.lo: i386dynix.c $(INCDIR)/aout/dynix3.h 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 \ - aout-target.h -i386freebsd.lo: i386freebsd.c freebsd.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 -i386linux.lo: i386linux.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -i386lynx.lo: i386lynx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -i386msdos.lo: i386msdos.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h -i386netbsd.lo: i386netbsd.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 -i386mach3.lo: i386mach3.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -i386os9k.lo: i386os9k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h libaout.h $(INCDIR)/os9k.h -ieee.lo: ieee.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/ieee.h libieee.h $(INCDIR)/safe-ctype.h -m68k4knetbsd.lo: m68k4knetbsd.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 -m68klinux.lo: m68klinux.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -m68knetbsd.lo: m68knetbsd.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 -m88kmach3.lo: m88kmach3.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 -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 $(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 \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h -newsos3.lo: newsos3.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -nlm.lo: nlm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \ - $(INCDIR)/nlm/external.h -nlm32-i386.lo: nlm32-i386.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/nlm/i386-ext.h libnlm.h $(INCDIR)/nlm/common.h \ - $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmswap.h \ - nlm-target.h -nlm32-sparc.lo: nlm32-sparc.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/nlm/sparc32-ext.h libnlm.h \ - $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \ - nlmswap.h nlm-target.h -nlm32-ppc.lo: nlm32-ppc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/nlm/ppc-ext.h libnlm.h $(INCDIR)/nlm/common.h \ - $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmswap.h \ - nlm-target.h -nlm32.lo: nlm32.c nlmcode.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \ - $(INCDIR)/nlm/external.h -ns32knetbsd.lo: ns32knetbsd.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 -oasys.lo: oasys.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \ - $(INCDIR)/hashtab.h $(INCDIR)/oasys.h liboasys.h -pc532-mach.lo: pc532-mach.c $(INCDIR)/filenames.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/aout/aout64.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -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)/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 \ - $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h -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 \ - $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h -pei-i386.lo: pei-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 \ - $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h -pe-mcore.lo: pe-mcore.c $(INCDIR)/filenames.h coff-mcore.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/mcore.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-mcore.lo: pei-mcore.c $(INCDIR)/filenames.h coff-mcore.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/mcore.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-ppc.lo: pe-ppc.c $(INCDIR)/filenames.h coff-ppc.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/powerpc.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-ppc.lo: pei-ppc.c $(INCDIR)/filenames.h coff-ppc.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/powerpc.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-sh.lo: pe-sh.c $(INCDIR)/filenames.h coff-sh.c $(INCDIR)/libiberty.h \ - $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/sh.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h coffcode.h peicode.h \ - libpei.h -pei-sh.lo: pei-sh.c $(INCDIR)/filenames.h coff-sh.c \ - $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h coffcode.h peicode.h \ - libpei.h -pe-mips.lo: pe-mips.c $(INCDIR)/filenames.h $(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 -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)/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 \ - libcoff.h -riscix.lo: riscix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -sparclinux.lo: sparclinux.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -sparclynx.lo: sparclynx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/sun4.h libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h aout-target.h -sparcnetbsd.lo: sparcnetbsd.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 -sunos.lo: sunos.c $(INCDIR)/bfdlink.h libaout.h aoutf1.h \ - $(INCDIR)/filenames.h $(INCDIR)/hashtab.h $(INCDIR)/aout/sun4.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h aout-target.h -vaxnetbsd.lo: vaxnetbsd.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 -vax1knetbsd.lo: vax1knetbsd.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 -vaxbsd.lo: vaxbsd.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 -versados.lo: versados.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h -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 $(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 \ - $(INCDIR)/hashtab.h vms.h -vms-tir.lo: vms-tir.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h vms.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 $(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 $(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 -coff-alpha.lo: coff-alpha.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/alpha.h \ - $(INCDIR)/aout/ar.h libcoff.h libecoff.h coffswap.h \ - ecoffswap.h -coff64-rs6000.lo: coff64-rs6000.c $(INCDIR)/filenames.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/xcoff.h $(INCDIR)/coff/rs6k64.h libcoff.h \ - libxcoff.h coffcode.h coffswap.h -demo64.lo: demo64.c aoutf1.h $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/aout/sun4.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -efi-app-ia64.lo: efi-app-ia64.c $(INCDIR)/filenames.h \ - coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.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 \ - $(INCDIR)/elf/reloc-macros.h elf64-target.h -elf64-alpha.lo: elf64-alpha.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/alpha.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h \ - $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/alpha.h $(INCDIR)/aout/ar.h \ - libcoff.h libecoff.h ecoffswap.h elf64-target.h -elf64-hppa.lo: elf64-hppa.c $(INCDIR)/alloca-conf.h \ - $(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/hppa.h $(INCDIR)/elf/reloc-macros.h \ - libhppa.h elf64-hppa.h elf-hppa.h elf64-target.h -elf64-gen.lo: elf64-gen.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 elf64-target.h -elfn32-mips.lo: elfn32-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)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h \ - ecoffswap.h elf32-target.h -elf64-mips.lo: elf64-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/ar.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)/coff/ecoff.h $(INCDIR)/coff/alpha.h ecoffswap.h \ - elf64-target.h -elf64-mmix.lo: elf64-mmix.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/mmix.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/mmix.h \ - elf64-target.h -elf64-ppc.lo: elf64-ppc.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/ppc64.h \ - $(INCDIR)/elf/reloc-macros.h elf64-ppc.h elf64-target.h -elf64-s390.lo: elf64-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 elf64-target.h -elf64-sh64.lo: elf64-sh64.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 elf64-target.h -elf64-sparc.lo: elf64-sparc.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/sparc.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/sparc.h elfxx-sparc.h elf64-target.h -elf64.lo: elf64.c elfcode.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ - $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfcore.h -mmo.lo: mmo.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h $(INCDIR)/elf/mmix.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/mmix.h -nlm32-alpha.lo: nlm32-alpha.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/nlm/alpha-ext.h libnlm.h \ - $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \ - nlmswap.h nlm-target.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 -hpux-core.lo: hpux-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -irix-core.lo: irix-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -lynx-core.lo: lynx-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -osf-core.lo: osf-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -sco5-core.lo: sco5-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h -trad-core.lo: trad-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h -cisco-core.lo: cisco-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 \ - $(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 \ - $(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 a13b0ee..6bebad7 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,15 +16,13 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ 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 @@ -38,33 +37,37 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub README \ - ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.in $(srcdir)/../mkinstalldirs \ - $(srcdir)/bfd-in2.h $(top_srcdir)/po/Make-in \ - $(srcdir)/../ltmain.sh $(srcdir)/../config.guess \ - $(srcdir)/../config.sub +@INSTALL_LIBBFD_FALSE@am__append_1 = -rpath $(rpath_bfdlibdir) subdir = . +DIST_COMMON = README ChangeLog $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(srcdir)/config.in \ + $(srcdir)/../mkinstalldirs $(srcdir)/bfd-in2.h \ + $(top_srcdir)/po/Make-in $(srcdir)/../depcomp \ + $(am__bfdinclude_HEADERS_DIST) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 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/nls.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/plugins.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 + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.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 \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = bfd-in3.h po/Makefile.in +CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libbfd_a_AR = $(AR) $(ARFLAGS) @@ -76,51 +79,83 @@ am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(bfdlibdir)" -bfdlibLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(bfdlib_LTLIBRARIES) +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bfdlibdir)" \ + "$(DESTDIR)$(bfdincludedir)" +LTLIBRARIES = $(bfdlib_LTLIBRARIES) $(noinst_LTLIBRARIES) +am__DEPENDENCIES_1 = am__objects_1 = archive.lo archures.lo bfd.lo bfdio.lo bfdwin.lo \ cache.lo coffgen.lo corefile.lo format.lo init.lo libbfd.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 + stab-syms.lo merge.lo dwarf2.lo simple.lo compress.lo \ + verilog.lo am_libbfd_la_OBJECTS = $(am__objects_1) libbfd_la_OBJECTS = $(am_libbfd_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -depcomp = -am__depfiles_maybe = +libbfd_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libbfd_la_LDFLAGS) $(LDFLAGS) -o $@ +@INSTALL_LIBBFD_FALSE@am_libbfd_la_rpath = +@INSTALL_LIBBFD_TRUE@am_libbfd_la_rpath = -rpath $(bfdlibdir) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +SOURCES = $(libbfd_a_SOURCES) $(libbfd_la_SOURCES) \ + $(EXTRA_libbfd_la_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 + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__bfdinclude_HEADERS_DIST = bfd.h $(INCDIR)/ansidecl.h \ + $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h +HEADERS = $(bfdinclude_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BFD_HOSTPTR_T = @BFD_HOSTPTR_T@ BFD_HOST_64BIT_LONG = @BFD_HOST_64BIT_LONG@ +BFD_HOST_64BIT_LONG_LONG = @BFD_HOST_64BIT_LONG_LONG@ BFD_HOST_64_BIT = @BFD_HOST_64_BIT@ BFD_HOST_64_BIT_DEFINED = @BFD_HOST_64_BIT_DEFINED@ -BFD_HOST_LONG_LONG = @BFD_HOST_LONG_LONG@ BFD_HOST_U_64_BIT = @BFD_HOST_U_64_BIT@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ @@ -137,6 +172,7 @@ DATADIRNAME = @DATADIRNAME@ DEBUGDIR = @DEBUGDIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ @@ -146,15 +182,12 @@ EXEEXT = @EXEEXT@ EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ FGREP = @FGREP@ GENCAT = @GENCAT@ -GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@ -GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HDEFINES = @HDEFINES@ INCINTL = @INCINTL@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBBFD_FALSE = @INSTALL_LIBBFD_FALSE@ -INSTALL_LIBBFD_TRUE = @INSTALL_LIBBFD_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -163,26 +196,32 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBINTL_DEP = @LIBINTL_DEP@ +LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ NM = @NM@ +NMEDIT = @NMEDIT@ NO_WERROR = @NO_WERROR@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGVERSION = @PKGVERSION@ @@ -192,20 +231,22 @@ REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@ REPORT_BUGS_TO = @REPORT_BUGS_TO@ SED = @SED@ SET_MAKE = @SET_MAKE@ +SHARED_LDFLAGS = @SHARED_LDFLAGS@ +SHARED_LIBADD = @SHARED_LIBADD@ SHELL = @SHELL@ STRIP = @STRIP@ TDEFINES = @TDEFINES@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ -WIN32LDFLAGS = @WIN32LDFLAGS@ -WIN32LIBADD = @WIN32LIBADD@ XGETTEXT = @XGETTEXT@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ all_backends = @all_backends@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -217,14 +258,18 @@ bfd_default_target_size = @bfd_default_target_size@ bfd_file_ptr = @bfd_file_ptr@ bfd_machines = @bfd_machines@ bfd_ufile_ptr = @bfd_ufile_ptr@ -bfdincludedir = @bfdincludedir@ -bfdlibdir = @bfdlibdir@ +@INSTALL_LIBBFD_FALSE@bfdincludedir = +@INSTALL_LIBBFD_TRUE@bfdincludedir = @bfdincludedir@ +# Empty these so that the respective installation directories will not be created. +@INSTALL_LIBBFD_FALSE@bfdlibdir = +@INSTALL_LIBBFD_TRUE@bfdlibdir = @bfdlibdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ @@ -254,6 +299,8 @@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +supports_plugins = @supports_plugins@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ @@ -262,19 +309,28 @@ target_noncanonical = @target_noncanonical@ target_os = @target_os@ target_vendor = @target_vendor@ tdefaults = @tdefaults@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ wordsize = @wordsize@ -AUTOMAKE_OPTIONS = 1.9 cygnus +AUTOMAKE_OPTIONS = 1.11 no-dist foreign ACLOCAL_AMFLAGS = -I . -I .. -I ../config # Uncomment the following line when doing a release. -# RELEASE=y +RELEASE = y INCDIR = $(srcdir)/../include CSEARCH = -I. -I$(srcdir) -I$(INCDIR) -MKDEP = gcc -MM SUBDIRS = doc po bfddocdir = doc -bfdlib_LTLIBRARIES = libbfd.la +libbfd_la_LDFLAGS = $(am__append_1) -release `cat libtool-soversion` \ + @SHARED_LDFLAGS@ $(am__empty) +@INSTALL_LIBBFD_TRUE@bfdlib_LTLIBRARIES = libbfd.la +@INSTALL_LIBBFD_TRUE@bfdinclude_HEADERS = $(BFD_H) $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h $(INCDIR)/bfdlink.h +@INSTALL_LIBBFD_FALSE@rpath_bfdlibdir = @bfdlibdir@ +@INSTALL_LIBBFD_FALSE@noinst_LTLIBRARIES = libbfd.la AM_CFLAGS = $(WARN_CFLAGS) +AM_CPPFLAGS = -DBINDIR='"$(bindir)"' +@PLUGINS_TRUE@LIBDL = -ldl # bfd.h goes here, for now BFD_H = bfd.h @@ -292,7 +348,7 @@ BFD32_LIBS = \ format.lo init.lo libbfd.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 + merge.lo dwarf2.lo simple.lo compress.lo verilog.lo BFD64_LIBS = archive64.lo BFD32_LIBS_CFILES = \ @@ -301,7 +357,7 @@ BFD32_LIBS_CFILES = \ format.c init.c libbfd.c opncls.c reloc.c \ section.c syms.c targets.c hash.c linker.c \ srec.c binary.c tekhex.c ihex.c stabs.c stab-syms.c \ - merge.c dwarf2.c simple.c + merge.c dwarf2.c simple.c compress.c verilog.c BFD64_LIBS_CFILES = archive64.c @@ -325,33 +381,38 @@ ALL_MACHINES = \ cpu-h8300.lo \ cpu-h8500.lo \ cpu-hppa.lo \ - cpu-ia64.lo \ cpu-i370.lo \ cpu-i386.lo \ + cpu-l1om.lo \ cpu-i860.lo \ cpu-i960.lo \ + cpu-ia64.lo \ cpu-ip2k.lo \ cpu-iq2000.lo \ + cpu-lm32.lo \ + cpu-m10200.lo \ + cpu-m10300.lo \ cpu-m32c.lo \ cpu-m32r.lo \ cpu-m68hc11.lo \ cpu-m68hc12.lo \ cpu-m68k.lo \ cpu-m88k.lo \ - cpu-m10200.lo \ - cpu-m10300.lo \ cpu-maxq.lo \ cpu-mcore.lo \ cpu-mep.lo \ + cpu-microblaze.lo \ cpu-mips.lo \ cpu-mmix.lo \ - cpu-mt.lo \ + cpu-moxie.lo \ cpu-msp430.lo \ - cpu-or32.lo \ + cpu-mt.lo \ cpu-ns32k.lo \ cpu-openrisc.lo \ + cpu-or32.lo \ cpu-pdp11.lo \ cpu-pj.lo \ + cpu-plugin.lo \ cpu-powerpc.lo \ cpu-rs6000.lo \ cpu-s390.lo \ @@ -365,11 +426,11 @@ ALL_MACHINES = \ cpu-tic80.lo \ cpu-v850.lo \ cpu-vax.lo \ - cpu-we32k.lo \ cpu-w65.lo \ + cpu-we32k.lo \ + cpu-xc16x.lo \ cpu-xstormy16.lo \ cpu-xtensa.lo \ - cpu-xc16x.lo \ cpu-z80.lo \ cpu-z8k.lo @@ -380,8 +441,8 @@ ALL_MACHINES_CFILES = \ cpu-avr.c \ cpu-bfin.c \ cpu-cr16.c \ - cpu-cris.c \ cpu-cr16c.c \ + cpu-cris.c \ cpu-crx.c \ cpu-d10v.c \ cpu-d30v.c \ @@ -391,33 +452,38 @@ ALL_MACHINES_CFILES = \ cpu-h8300.c \ cpu-h8500.c \ cpu-hppa.c \ - cpu-ia64.c \ cpu-i370.c \ cpu-i386.c \ + cpu-l1om.c \ cpu-i860.c \ cpu-i960.c \ + cpu-ia64.c \ cpu-ip2k.c \ cpu-iq2000.c \ + cpu-lm32.c \ + cpu-m10200.c \ + cpu-m10300.c \ cpu-m32c.c \ cpu-m32r.c \ cpu-m68hc11.c \ cpu-m68hc12.c \ cpu-m68k.c \ cpu-m88k.c \ - cpu-m10200.c \ - cpu-m10300.c \ cpu-maxq.c \ cpu-mcore.c \ cpu-mep.c \ + cpu-microblaze.c \ cpu-mips.c \ cpu-mmix.c \ - cpu-mt.c \ + cpu-moxie.c \ cpu-msp430.c \ - cpu-or32.c \ + cpu-mt.c \ cpu-ns32k.c \ cpu-openrisc.c \ + cpu-or32.c \ cpu-pdp11.c \ cpu-pj.c \ + cpu-plugin.c \ cpu-powerpc.c \ cpu-rs6000.c \ cpu-s390.c \ @@ -431,11 +497,11 @@ ALL_MACHINES_CFILES = \ cpu-tic80.c \ cpu-v850.c \ cpu-vax.c \ - cpu-we32k.c \ cpu-w65.c \ + cpu-we32k.c \ + cpu-xc16x.c \ cpu-xstormy16.c \ cpu-xtensa.c \ - cpu-xc16x.c \ cpu-z80.c \ cpu-z8k.c @@ -458,10 +524,10 @@ BFD32_BACKENDS = \ coff-apollo.lo \ coff-arm.lo \ coff-aux.lo \ + coff-go32.lo \ coff-h8300.lo \ coff-h8500.lo \ coff-i386.lo \ - coff-go32.lo \ coff-i860.lo \ coff-i960.lo \ coff-m68k.lo \ @@ -479,15 +545,21 @@ BFD32_BACKENDS = \ coff-tic54x.lo \ coff-tic80.lo \ coff-u68k.lo \ - coff-we32k.lo \ coff-w65.lo \ + coff-we32k.lo \ coff-z80.lo \ coff-z8k.lo \ cofflink.lo \ dwarf1.lo \ ecoff.lo \ ecofflink.lo \ - efi-app-ia32.lo \ + elf-attrs.lo \ + elf-eh-frame.lo \ + elf-ifunc.lo \ + elf-m10200.lo \ + elf-m10300.lo \ + elf-strtab.lo \ + elf-vxworks.lo \ elf.lo \ elf32-am33lin.lo \ elf32-arc.lo \ @@ -512,6 +584,7 @@ BFD32_BACKENDS = \ elf32-i960.lo \ elf32-ip2k.lo \ elf32-iq2000.lo \ + elf32-lm32.lo \ elf32-m32c.lo \ elf32-m32r.lo \ elf32-m68hc11.lo \ @@ -519,52 +592,46 @@ BFD32_BACKENDS = \ elf32-m68hc1x.lo \ elf32-m68k.lo \ elf32-m88k.lo \ - elf-m10200.lo \ - elf-m10300.lo \ elf32-mcore.lo \ elf32-mep.lo \ - elfxx-mips.lo \ + elf32-microblaze.lo \ elf32-mips.lo \ - elf32-mt.lo \ + elf32-moxie.lo \ elf32-msp430.lo \ + elf32-mt.lo \ elf32-openrisc.lo \ elf32-or32.lo \ elf32-pj.lo \ elf32-ppc.lo \ elf32-s390.lo \ - elf32-score.lo \ - elf32-sh.lo \ elf32-sh-symbian.lo \ - elf32-sh64.lo \ + elf32-sh.lo \ elf32-sh64-com.lo \ - elfxx-sparc.lo \ + elf32-sh64.lo \ elf32-sparc.lo \ elf32-spu.lo \ elf32-v850.lo \ elf32-vax.lo \ + elf32-xc16x.lo \ elf32-xstormy16.lo \ elf32-xtensa.lo \ - elf32-xc16x.lo \ elf32.lo \ elflink.lo \ - elf-attrs.lo \ - elf-strtab.lo \ - elf-eh-frame.lo \ - elf-vxworks.lo \ + elfxx-mips.lo \ + elfxx-sparc.lo \ epoc-pe-arm.lo \ epoc-pei-arm.lo \ hp300bsd.lo \ hp300hpux.lo \ - som.lo \ i386aout.lo \ i386bsd.lo \ i386dynix.lo \ i386freebsd.lo \ i386linux.lo \ i386lynx.lo \ + i386mach3.lo \ i386msdos.lo \ i386netbsd.lo \ - i386mach3.lo \ i386os9k.lo \ ieee.lo \ m68k4knetbsd.lo \ @@ -573,49 +640,52 @@ BFD32_BACKENDS = \ m88kmach3.lo \ m88kopenbsd.lo \ mach-o.lo \ + mach-o-i386.lo \ mipsbsd.lo \ newsos3.lo \ nlm.lo \ nlm32-i386.lo \ - nlm32-sparc.lo \ nlm32-ppc.lo \ + nlm32-sparc.lo \ nlm32.lo \ ns32knetbsd.lo \ oasys.lo \ pc532-mach.lo \ pdp11.lo \ - pef.lo \ - pe-arm.lo \ - pei-arm.lo \ pe-arm-wince.lo \ - pei-arm-wince.lo \ + pe-arm.lo \ pe-i386.lo \ - pei-i386.lo \ pe-mcore.lo \ - pei-mcore.lo \ + pe-mips.lo \ pe-ppc.lo \ - pei-ppc.lo \ pe-sh.lo \ - pei-sh.lo \ - pe-mips.lo \ + pef.lo \ + pei-arm-wince.lo \ + pei-arm.lo \ + pei-i386.lo \ + pei-mcore.lo \ pei-mips.lo \ + pei-ppc.lo \ + pei-sh.lo \ peigen.lo \ + plugin.lo \ ppcboot.lo \ reloc16.lo \ riscix.lo \ + som.lo \ sparclinux.lo \ sparclynx.lo \ sparcnetbsd.lo \ sunos.lo \ - vaxnetbsd.lo \ vax1knetbsd.lo \ vaxbsd.lo \ + vaxnetbsd.lo \ versados.lo \ - vms.lo \ vms-gsd.lo \ vms-hdr.lo \ vms-misc.lo \ vms-tir.lo \ + vms.lo \ xcofflink.lo \ xsym.lo \ xtensa-isa.lo \ @@ -637,11 +707,11 @@ BFD32_BACKENDS_CFILES = \ coff-apollo.c \ coff-arm.c \ coff-aux.c \ + coff-go32.c \ coff-h8300.c \ coff-h8500.c \ coff-i386.c \ coff-i860.c \ - coff-go32.c \ coff-i960.c \ coff-m68k.c \ coff-m88k.c \ @@ -658,15 +728,21 @@ BFD32_BACKENDS_CFILES = \ coff-tic54x.c \ coff-tic80.c \ coff-u68k.c \ - coff-we32k.c \ coff-w65.c \ + coff-we32k.c \ coff-z80.c \ coff-z8k.c \ cofflink.c \ dwarf1.c \ ecoff.c \ ecofflink.c \ - efi-app-ia32.c \ + elf-attrs.c \ + elf-eh-frame.c \ + elf-ifunc.c \ + elf-m10200.c \ + elf-m10300.c \ + elf-strtab.c \ + elf-vxworks.c \ elf.c \ elf32-am33lin.c \ elf32-arc.c \ @@ -691,59 +767,54 @@ BFD32_BACKENDS_CFILES = \ elf32-i960.c \ elf32-ip2k.c \ elf32-iq2000.c \ + elf32-lm32.c \ elf32-m32c.c \ elf32-m32r.c \ - elf32-m68k.c \ elf32-m68hc11.c \ elf32-m68hc12.c \ elf32-m68hc1x.c \ + elf32-m68k.c \ elf32-m88k.c \ - elf-m10200.c \ - elf-m10300.c \ elf32-mcore.c \ elf32-mep.c \ - elfxx-mips.c \ + elf32-microblaze.c \ elf32-mips.c \ - elf32-mt.c \ + elf32-moxie.c \ elf32-msp430.c \ + elf32-mt.c \ elf32-openrisc.c \ elf32-or32.c \ elf32-pj.c \ elf32-ppc.c \ - elf32-sh64.c \ - elf32-sh64-com.c \ elf32-s390.c \ - elf32-score.c \ - elf32-sh.c \ elf32-sh-symbian.c \ - elfxx-sparc.c \ + elf32-sh.c \ + elf32-sh64-com.c \ + elf32-sh64.c \ elf32-sparc.c \ elf32-spu.c \ elf32-v850.c \ elf32-vax.c \ + elf32-xc16x.c \ elf32-xstormy16.c \ elf32-xtensa.c \ - elf32-xc16x.c \ elf32.c \ elflink.c \ - elf-attrs.c \ - elf-strtab.c \ - elf-eh-frame.c \ - elf-vxworks.c \ + elfxx-mips.c \ + elfxx-sparc.c \ epoc-pe-arm.c \ epoc-pei-arm.c \ hp300bsd.c \ hp300hpux.c \ - som.c \ i386aout.c \ i386bsd.c \ i386dynix.c \ i386freebsd.c \ i386linux.c \ i386lynx.c \ + i386mach3.c \ i386msdos.c \ i386netbsd.c \ - i386mach3.c \ i386os9k.c \ ieee.c \ m68k4knetbsd.c \ @@ -752,48 +823,51 @@ BFD32_BACKENDS_CFILES = \ m88kmach3.c \ m88kopenbsd.c \ mach-o.c \ + mach-o-i386.c \ mipsbsd.c \ newsos3.c \ nlm.c \ nlm32-i386.c \ - nlm32-sparc.c \ nlm32-ppc.c \ + nlm32-sparc.c \ nlm32.c \ ns32knetbsd.c \ oasys.c \ pc532-mach.c \ pdp11.c \ - pef.c \ - pe-arm.c \ - pei-arm.c \ pe-arm-wince.c \ - pei-arm-wince.c \ + pe-arm.c \ pe-i386.c \ - pei-i386.c \ pe-mcore.c \ - pei-mcore.c \ + pe-mips.c \ pe-ppc.c \ - pei-ppc.c \ pe-sh.c \ - pei-sh.c \ - pe-mips.c \ + pef.c \ + pei-arm-wince.c \ + pei-arm.c \ + pei-i386.c \ + pei-mcore.c \ pei-mips.c \ + pei-ppc.c \ + pei-sh.c \ + plugin.c \ ppcboot.c \ reloc16.c \ riscix.c \ + som.c \ sparclinux.c \ sparclynx.c \ sparcnetbsd.c \ sunos.c \ - vaxnetbsd.c \ vax1knetbsd.c \ vaxbsd.c \ + vaxnetbsd.c \ versados.c \ - vms.c \ vms-gsd.c \ vms-hdr.c \ vms-misc.c \ vms-tir.c \ + vms.c \ xcofflink.c \ xsym.c \ xtensa-isa.c \ @@ -809,29 +883,30 @@ BFD64_BACKENDS = \ aix5ppc-core.lo \ aout64.lo \ coff-alpha.lo \ + coff-x86_64.lo \ coff64-rs6000.lo \ demo64.lo \ - efi-app-ia64.lo \ - efi-app-x86_64.lo \ - elf64-x86-64.lo \ + elf32-ia64.lo \ + elf32-score.lo \ + elf32-score7.lo \ elf64-alpha.lo \ + elf64-gen.lo \ elf64-hppa.lo \ - elf32-ia64.lo \ elf64-ia64.lo \ - elf64-gen.lo \ - elfn32-mips.lo \ elf64-mips.lo \ elf64-mmix.lo \ - elf64-sh64.lo \ elf64-ppc.lo \ elf64-s390.lo \ + elf64-sh64.lo \ elf64-sparc.lo \ + elf64-x86-64.lo \ elf64.lo \ + elfn32-mips.lo \ mmo.lo \ nlm32-alpha.lo \ nlm64.lo \ - coff-x86_64.lo \ pe-x86_64.lo \ + pei-ia64.lo \ pei-x86_64.lo \ pepigen.lo \ pex64igen.lo @@ -840,48 +915,49 @@ BFD64_BACKENDS_CFILES = \ aix5ppc-core.c \ aout64.c \ coff-alpha.c \ + coff-x86_64.c \ coff64-rs6000.c \ demo64.c \ - efi-app-ia64.c \ - efi-app-x86_64.c \ - elf64-x86-64.c \ + elf32-score.c \ + elf32-score7.c \ elf64-alpha.c \ - elf64-hppa.c \ elf64-gen.c \ - elfn32-mips.c \ + elf64-hppa.c \ elf64-mips.c \ elf64-mmix.c \ elf64-ppc.c \ elf64-s390.c \ elf64-sh64.c \ elf64-sparc.c \ + elf64-x86-64.c \ elf64.c \ + elfn32-mips.c \ mmo.c \ nlm32-alpha.c \ nlm64.c \ - coff-x86_64.c \ pe-x86_64.c \ + pei-ia64.c \ pei-x86_64.c OPTIONAL_BACKENDS = \ aix386-core.lo \ + cisco-core.lo \ hpux-core.lo \ irix-core.lo \ lynx-core.lo \ osf-core.lo \ sco5-core.lo \ - trad-core.lo \ - cisco-core.lo + trad-core.lo OPTIONAL_BACKENDS_CFILES = \ aix386-core.c \ + cisco-core.c \ hpux-core.c \ irix-core.c \ lynx-core.c \ osf-core.c \ sco5-core.c \ - trad-core.c \ - cisco-core.c + trad-core.c # We want to rerun configure if configure.in, config.bfd or @@ -928,6 +1004,9 @@ SOURCE_HFILES = \ BUILD_HFILES = \ bfdver.h elf32-target.h elf64-target.h targmatch.h bfd_stdint.h + +# Ensure they are built early: +BUILT_SOURCES = $(BUILD_HFILES) HFILES = $(SOURCE_HFILES) $(BUILD_HFILES) SRC_POTFILES = $(SOURCE_CFILES) $(SOURCE_HFILES) BLD_POTFILES = $(BUILD_CFILES) $(BUILD_HFILES) @@ -941,10 +1020,12 @@ 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. +# However, list all sources in EXTRA_libbfd_la_SOURCES so the +# dependency tracking fragments are picked up in the Makefile. libbfd_la_SOURCES = $(BFD32_LIBS_CFILES) +EXTRA_libbfd_la_SOURCES = $(CFILES) libbfd_la_DEPENDENCIES = $(OFILES) ofiles -libbfd_la_LIBADD = `cat ofiles` @WIN32LIBADD@ -libbfd_la_LDFLAGS = -release `cat libtool-soversion` @WIN32LDFLAGS@ +libbfd_la_LIBADD = `cat ofiles` @SHARED_LIBADD@ $(LIBDL) # 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 @@ -956,7 +1037,7 @@ BFD_H_DEPS = $(INCDIR)/ansidecl.h $(INCDIR)/symcat.h LOCAL_H_DEPS = libbfd.h sysdep.h config.h BFD_H_FILES = bfd-in.h init.c opncls.c libbfd.c section.c archures.c \ reloc.c syms.c bfd.c bfdio.c bfdwin.c \ - archive.c corefile.c targets.c format.c + archive.c corefile.c targets.c format.c compress.c BFD64_H_FILES = archive64.c LIBBFD_H_FILES = libbfd-in.h init.c libbfd.c bfdio.c bfdwin.c \ @@ -968,7 +1049,7 @@ 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) libtool-soversion -all: config.h +all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: @@ -979,15 +1060,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) --cygnus '; \ - cd $(srcdir) && $(AUTOMAKE) --cygnus \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --cygnus Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -1003,21 +1084,22 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -1030,6 +1112,28 @@ po/Makefile.in: $(top_builddir)/config.status $(top_srcdir)/po/Make-in clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +install-bfdlibLTLIBRARIES: $(bfdlib_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(bfdlibdir)" || $(MKDIR_P) "$(DESTDIR)$(bfdlibdir)" + @list='$(bfdlib_LTLIBRARIES)'; test -n "$(bfdlibdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(bfdlibdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(bfdlibdir)"; \ + } + +uninstall-bfdlibLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(bfdlib_LTLIBRARIES)'; test -n "$(bfdlibdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(bfdlibdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(bfdlibdir)/$$f"; \ + done clean-bfdlibLTLIBRARIES: -test -z "$(bfdlib_LTLIBRARIES)" || rm -f $(bfdlib_LTLIBRARIES) @@ -1039,8 +1143,17 @@ clean-bfdlibLTLIBRARIES: echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done libbfd.la: $(libbfd_la_OBJECTS) $(libbfd_la_DEPENDENCIES) - $(LINK) -rpath $(bfdlibdir) $(libbfd_la_LDFLAGS) $(libbfd_la_OBJECTS) $(libbfd_la_LIBADD) $(LIBS) + $(libbfd_la_LINK) $(am_libbfd_la_rpath) $(libbfd_la_OBJECTS) $(libbfd_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -1048,14 +1161,345 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aix386-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aix5ppc-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-adobe.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-cris.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-ns32k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-sparcle.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout-tic30.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout0.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/aout64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archive64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/archures.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/armnetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfdio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfdwin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binary.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bout.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cache.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf-i386lynx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf-sparclynx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cisco-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-alpha.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-apollo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-aux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-go32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-h8300.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-h8500.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-i860.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-i960.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-m68k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-m88k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-maxq.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-or32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-rs6000.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-stgo32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-svm68k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic30.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic4x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic54x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-tic80.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-u68k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-w65.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-we32k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-x86_64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z80.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff-z8k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coff64-rs6000.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coffgen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cofflink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/corefile.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-alpha.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-avr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-bfin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-cr16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-cr16c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-cris.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-crx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-d10v.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-d30v.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-dlx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-fr30.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-frv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-h8300.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-h8500.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-hppa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-i370.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-i860.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-i960.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ia64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ip2k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-iq2000.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-l1om.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-lm32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m10200.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m10300.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m32c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m32r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m68hc11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m68hc12.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m68k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-m88k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-maxq.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mcore.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-microblaze.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mmix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-moxie.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-msp430.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ns32k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-openrisc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-or32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pdp11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-pj.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-plugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-powerpc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-rs6000.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-s390.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-score.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-sh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-spu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic30.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic4x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic54x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-tic80.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-v850.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-vax.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-w65.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-we32k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xc16x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xstormy16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-xtensa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-z80.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-z8k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/demo64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf1.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf2.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecofflink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-attrs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-eh-frame.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-ifunc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-m10200.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-m10300.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-strtab.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf-vxworks.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-am33lin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-arc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-avr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-bfin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-cr16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-cr16c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-cris.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-crx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-d10v.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-d30v.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-dlx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-fr30.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-frv.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-gen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-h8300.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-hppa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-i370.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-i860.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-i960.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ia64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ip2k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-iq2000.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-lm32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m32c.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m32r.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m68hc11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m68hc12.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m68hc1x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m68k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-m88k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mcore.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-microblaze.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-moxie.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-msp430.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-mt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-openrisc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-or32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-pj.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-ppc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-s390.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-score.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-score7.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-sh-symbian.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-sh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-sh64-com.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-sh64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-spu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-v850.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-vax.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xc16x.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xstormy16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32-xtensa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-alpha.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-gen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-hppa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mmix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ppc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-s390.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-sh64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-x86-64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elflink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfn32-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elfxx-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epoc-pe-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/epoc-pei-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/format.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hp300bsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hp300hpux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hpux-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386aout.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386bsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386dynix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386freebsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386linux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386lynx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386mach3.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386msdos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386netbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i386os9k.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ieee.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ihex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/init.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/irix-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libbfd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linker.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lynx-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68k4knetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68klinux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68knetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m88kmach3.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m88kopenbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mach-o-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mach-o.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/merge.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mipsbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mmo.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newsos3.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm32-alpha.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm32-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm32-ppc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm32-sparc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm32.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlm64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ns32knetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oasys.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opncls.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/osf-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pc532-mach.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdp11.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm-wince.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-mcore.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-ppc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-sh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pe-x86_64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pef.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-arm-wince.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-arm.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-i386.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ia64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mcore.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-mips.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-ppc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-sh.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pei-x86_64.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peigen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pepigen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pex64igen.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plugin.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ppcboot.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reloc16.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/riscix.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sco5-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/section.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/som.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparclinux.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparclynx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sparcnetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srec.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stab-syms.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stabs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sunos.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syms.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/targets.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tekhex.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trad-core.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vax1knetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vaxbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vaxnetbsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verilog.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/versados.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-gsd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-hdr.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-misc.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms-tir.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vms.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xcofflink.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xsym.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtensa-isa.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtensa-modules.Plo@am__quote@ + .c.o: - $(COMPILE) -c $< +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: - $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: - $(LTCOMPILE) -c -o $@ $< +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo @@ -1064,8 +1508,27 @@ clean-libtool: -rm -rf .libs _libs distclean-libtool: - -rm -f libtool -uninstall-info-am: + -rm -f libtool config.lt +install-bfdincludeHEADERS: $(bfdinclude_HEADERS) + @$(NORMAL_INSTALL) + test -z "$(bfdincludedir)" || $(MKDIR_P) "$(DESTDIR)$(bfdincludedir)" + @list='$(bfdinclude_HEADERS)'; test -n "$(bfdincludedir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(bfdincludedir)'"; \ + $(INSTALL_HEADER) $$files "$(DESTDIR)$(bfdincludedir)" || exit $$?; \ + done + +uninstall-bfdincludeHEADERS: + @$(NORMAL_UNINSTALL) + @list='$(bfdinclude_HEADERS)'; test -n "$(bfdincludedir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bfdincludedir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bfdincludedir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -1091,15 +1554,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -1126,16 +1588,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -1143,14 +1605,14 @@ ID: $(HEADERS) $(SOURCES) $(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; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -1162,51 +1624,57 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - 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" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -check-am: -check: check-recursive -all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) config.h +check-am: all-am +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive +all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) config.h installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(bfdlibdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + for dir in "$(DESTDIR)$(bfdlibdir)" "$(DESTDIR)$(bfdincludedir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive @@ -1228,18 +1696,21 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-bfdlibLTLIBRARIES clean-generic clean-libtool \ - clean-noinstLIBRARIES mostlyclean-am + clean-noinstLIBRARIES clean-noinstLTLIBRARIES 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-libtool distclean-tags @@ -1250,23 +1721,44 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: -install-data-am: install-bfdlibLTLIBRARIES +install-data-am: install-bfdincludeHEADERS install-bfdlibLTLIBRARIES + +install-dvi: install-dvi-recursive + +install-dvi-am: install-exec-am: +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + 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 @@ -1283,68 +1775,43 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-bfdlibLTLIBRARIES +uninstall-am: uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-bfdlibLTLIBRARIES clean-generic \ - clean-libtool clean-noinstLIBRARIES clean-recursive ctags \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean \ + clean-bfdlibLTLIBRARIES clean-generic clean-libtool \ + clean-noinstLIBRARIES clean-noinstLTLIBRARIES ctags \ ctags-recursive distclean distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-recursive \ - distclean-tags dvi dvi-am html html-am info info-am install \ - install-am install-bfdlibLTLIBRARIES install-data \ - install-data-am install-exec install-exec-am 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-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am \ - uninstall-bfdlibLTLIBRARIES uninstall-info-am + distclean-hdr distclean-libtool distclean-tags dvi dvi-am html \ + html-am info info-am install install-am \ + install-bfdincludeHEADERS install-bfdlibLTLIBRARIES \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs installdirs-am \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + pdf pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-bfdincludeHEADERS uninstall-bfdlibLTLIBRARIES po/SRC-POTFILES.in: @MAINT@ Makefile $(SRC_POTFILES) for file in $(SRC_POTFILES); do echo $$file; done \ - | LC_COLLATE= sort > tmp.src \ + | LC_ALL=C sort > tmp.src \ && mv tmp.src $(srcdir)/po/SRC-POTFILES.in po/BLD-POTFILES.in: @MAINT@ Makefile $(BLD_POTFILES) for file in $(BLD_POTFILES); do echo $$file; done \ - | LC_COLLATE= sort > tmp.bld \ + | LC_ALL=C sort > tmp.bld \ && mv tmp.bld $(srcdir)/po/BLD-POTFILES.in all diststuff: info -.PHONY: install-html install-html-am install-html-recursive - -install-html: install-html-recursive - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - stamp-ofiles: Makefile rm -f tofiles f=""; \ @@ -1383,13 +1850,25 @@ targmatch.h: config.bfd targmatch.sed # info from configure. targets.lo: targets.c Makefile - $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/targets.c +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='targets.c' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/targets.c archures.lo: archures.c Makefile - $(LIBTOOL) --mode=compile $(COMPILE) -c $(TDEFAULTS) $(srcdir)/archures.c +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='archures.c' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $(TDEFAULTS) $(srcdir)/archures.c dwarf2.lo: dwarf2.c Makefile - $(LIBTOOL) --mode=compile $(COMPILE) -c -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dwarf2.c' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ -DDEBUGDIR=\"$(DEBUGDIR)\" $(srcdir)/dwarf2.c elf32-target.h : elfxx-target.h rm -f elf32-target.h @@ -1432,75 +1911,6 @@ $(BFD32_LIBS) \ $(BFD64_BACKENDS) \ $(OPTIONAL_BACKENDS): $(BFD_H) $(BFD_H_DEPS) $(LOCAL_H_DEPS) -install-bfdlibLTLIBRARIES: @INSTALL_LIBBFD_TRUE@install_libbfd - @$(NORMAL_INSTALL) - -uninstall-bfdlibLTLIBRARIES: @INSTALL_LIBBFD_TRUE@uninstall_libbfd - @$(NORMAL_UNINSTALL) - -.PHONY: install_libbfd uninstall_libbfd -install_libbfd: $(bfdlib_LTLIBRARIES) $(BFD_H) - $(mkinstalldirs) $(DESTDIR)$(bfdlibdir) - $(mkinstalldirs) $(DESTDIR)$(bfdincludedir) - @list='$(bfdlib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - echo "$(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(bfdlibdir)/$$p"; \ - $(LIBTOOL) --mode=install $(INSTALL) $$p $(DESTDIR)$(bfdlibdir)/$$p; \ - else :; fi; \ - done - $(INSTALL_DATA) $(BFD_H) $(DESTDIR)$(bfdincludedir)/bfd.h - $(INSTALL_DATA) $(INCDIR)/ansidecl.h $(DESTDIR)$(bfdincludedir)/ansidecl.h - $(INSTALL_DATA) $(INCDIR)/symcat.h $(DESTDIR)$(bfdincludedir)/symcat.h - $(INSTALL_DATA) $(INCDIR)/bfdlink.h $(DESTDIR)$(bfdincludedir)/bfdlink.h - -uninstall_libbfd: - list='$(bfdlib_LTLIBRARIES)'; for p in $$list; do \ - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(bfdlibdir)/$$p; \ - done - rm -f $(DESTDIR)$(bfdincludedir)/bfd.h - rm -f $(DESTDIR)$(bfdincludedir)/ansidecl.h - rm -f $(DESTDIR)$(bfdincludedir)/symcat.h - rm -f $(DESTDIR)$(bfdincludedir)/bfdlink.h - -# Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES). -DEP: dep.sed $(CFILES) $(HFILES) bfd.h - rm -f DEP1 - $(MAKE) MKDEP="$(MKDEP)" DEP1 - sed -f dep.sed < DEP1 > DEPA - echo '# IF YOU PUT ANYTHING HERE IT WILL GO AWAY' >> DEPA - if grep ' /' DEPA > /dev/null 2> /dev/null; then \ - echo 'make DEP failed!'; exit 1; \ - else \ - mv -f DEPA $@; \ - fi - -DEP1: $(CFILES) - echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > DEP2 - echo '# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.' >> DEP2 - $(MKDEP) $(INCLUDES) $(CFLAGS) $? >> DEP2 - mv -f DEP2 $@ - -dep.sed: dep-in.sed config.status - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e 's!@BFD_H@!$(BFD_H)!' \ - -e 's!@SRCDIR@!$(srcdir)!' \ - -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/bfd$$,,`'!' - -dep: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile - cat DEP >> tmp-Makefile - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in - cat DEP >> tmp-Makefile.in - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am - cat DEP >> tmp-Makefile.am - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - host-aout.lo: Makefile # The following program can be used to generate a simple config file @@ -1572,964 +1982,6 @@ bfdver.h: $(srcdir)/version.h $(srcdir)/Makefile.in < $(srcdir)/version.h > $@; \ echo "$${bfd_soversion}" > libtool-soversion -# What appears below is generated by a hacked mkdep using gcc -MM. - -# DO NOT DELETE THIS LINE -- mkdep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. -archive.lo: archive.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/hashtab.h $(INCDIR)/aout/ar.h $(INCDIR)/aout/ranlib.h \ - $(INCDIR)/safe-ctype.h -archures.lo: archures.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/safe-ctype.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 \ - $(INCDIR)/libiberty.h -coffgen.lo: coffgen.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h -corefile.lo: corefile.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -format.lo: format.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -init.lo: init.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -libbfd.lo: libbfd.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -opncls.lo: opncls.c $(INCDIR)/filenames.h $(INCDIR)/objalloc.h \ - $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h -reloc.lo: reloc.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h -section.lo: section.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h -syms.lo: syms.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def -targets.lo: targets.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/fnmatch.h targmatch.h -hash.lo: hash.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/objalloc.h $(INCDIR)/libiberty.h -linker.lo: linker.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h genlink.h -srec.lo: srec.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h -binary.lo: binary.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \ - $(INCDIR)/hashtab.h -tekhex.lo: tekhex.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h -ihex.lo: ihex.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h -stabs.lo: stabs.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/safe-ctype.h -stab-syms.lo: stab-syms.c libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab.def -merge.lo: merge.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h -dwarf2.lo: dwarf2.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 \ - $(INCDIR)/elf/dwarf2.h -simple.lo: simple.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h -archive64.lo: archive64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/ar.h -cpu-alpha.lo: cpu-alpha.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-arc.lo: cpu-arc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 -cpu-d10v.lo: cpu-d10v.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-d30v.lo: cpu-d30v.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-dlx.lo: cpu-dlx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-fr30.lo: cpu-fr30.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-frv.lo: cpu-frv.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-h8300.lo: cpu-h8300.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-h8500.lo: cpu-h8500.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-hppa.lo: cpu-hppa.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-ia64.lo: cpu-ia64.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - cpu-ia64-opc.c $(srcdir)/../opcodes/ia64-opc.h $(INCDIR)/opcode/ia64.h -cpu-i370.lo: cpu-i370.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-i386.lo: cpu-i386.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-i860.lo: cpu-i860.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-i960.lo: cpu-i960.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-ip2k.lo: cpu-ip2k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-iq2000.lo: cpu-iq2000.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-m32c.lo: cpu-m32c.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-m32r.lo: cpu-m32r.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-m68hc11.lo: cpu-m68hc11.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-m68hc12.lo: cpu-m68hc12.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-m68k.lo: cpu-m68k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/opcode/m68k.h -cpu-m88k.lo: cpu-m88k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 -cpu-msp430.lo: cpu-msp430.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-or32.lo: cpu-or32.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - ns32k.h -cpu-openrisc.lo: cpu-openrisc.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-pdp11.lo: cpu-pdp11.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-pj.lo: cpu-pj.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 -cpu-tic80.lo: cpu-tic80.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-v850.lo: cpu-v850.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/safe-ctype.h -cpu-vax.lo: cpu-vax.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-we32k.lo: cpu-we32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-w65.lo: cpu-w65.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-xstormy16.lo: cpu-xstormy16.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h -cpu-xtensa.lo: cpu-xtensa.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-xc16x.lo: cpu-xc16x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-z80.lo: cpu-z80.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -cpu-z8k.lo: cpu-z8k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -aout-adobe.lo: aout-adobe.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/adobe.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - libaout.h $(INCDIR)/bfdlink.h -aout-arm.lo: aout-arm.c $(INCDIR)/filenames.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h aoutx.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -aout-cris.lo: aout-cris.c aout32.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 aout-target.h -aout-ns32k.lo: aout-ns32k.c $(INCDIR)/aout/aout64.h \ - ns32k.h libaout.h $(INCDIR)/bfdlink.h aoutx.h $(INCDIR)/filenames.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h -aout-sparcle.lo: aout-sparcle.c $(INCDIR)/bfdlink.h \ - libaout.h aoutf1.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/sun4.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -aout-tic30.lo: aout-tic30.c $(INCDIR)/filenames.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aoutx.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/hashtab.h -aout0.lo: aout0.c aoutf1.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/sun4.h libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h aout-target.h -aout32.lo: aout32.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 -armnetbsd.lo: armnetbsd.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 -bout.lo: bout.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h genlink.h $(INCDIR)/bout.h $(INCDIR)/libiberty.h \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def libaout.h -cf-i386lynx.lo: cf-i386lynx.c $(INCDIR)/filenames.h \ - coff-i386.c $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -cf-sparclynx.lo: cf-sparclynx.c coff-sparc.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-apollo.lo: coff-apollo.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/apollo.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-arm.lo: coff-arm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/arm.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.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 $(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 \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/libiberty.h coffcode.h coffswap.h -coff-h8500.lo: coff-h8500.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/h8500.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-i386.lo: coff-i386.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-i860.lo: coff-i860.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/i860.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-go32.lo: coff-go32.c coff-i386.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-i960.lo: coff-i960.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/i960.h $(INCDIR)/coff/internal.h libcoff.h \ - $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-m68k.lo: coff-m68k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-m88k.lo: coff-m88k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/m88k.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-maxq.lo: coff-maxq.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/maxq.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h $(INCDIR)/libiberty.h \ - coffcode.h coffswap.h -coff-mips.lo: coff-mips.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/mips.h \ - $(INCDIR)/coff/external.h libcoff.h libecoff.h coffswap.h \ - ecoffswap.h -coff-or32.lo: coff-or32.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/or32.h $(INCDIR)/coff/internal.h libcoff.h \ - $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-rs6000.lo: coff-rs6000.c $(INCDIR)/filenames.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/xcoff.h $(INCDIR)/coff/rs6000.h libcoff.h \ - libxcoff.h coffcode.h coffswap.h -coff-sh.lo: coff-sh.c $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/sh.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h coffcode.h coffswap.h -coff-sparc.lo: coff-sparc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/sparc.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-stgo32.lo: coff-stgo32.c coff-i386.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/i386.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h $(INCDIR)/coff/go32exe.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h \ - go32stub.h -coff-svm68k.lo: coff-svm68k.c coff-m68k.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-tic30.lo: coff-tic30.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/tic30.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-tic4x.lo: coff-tic4x.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/tic4x.h $(INCDIR)/coff/ti.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -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)/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 \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/m68k.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h $(INCDIR)/bfdlink.h \ - coffcode.h coffswap.h -coff-we32k.lo: coff-we32k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/coff/we32k.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - libcoff.h $(INCDIR)/bfdlink.h coffcode.h coffswap.h -coff-w65.lo: coff-w65.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/w65.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-z80.lo: coff-z80.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/z80.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -coff-z8k.lo: coff-z8k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/coff/z8k.h $(INCDIR)/coff/external.h \ - $(INCDIR)/coff/internal.h libcoff.h coffcode.h coffswap.h -cofflink.lo: cofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h libcoff.h \ - $(INCDIR)/safe-ctype.h -dwarf1.lo: dwarf1.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 \ - $(INCDIR)/elf/dwarf.h -ecoff.lo: ecoff.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/aout/ar.h $(INCDIR)/aout/ranlib.h \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def libaout.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h libcoff.h \ - libecoff.h $(INCDIR)/libiberty.h -ecofflink.lo: ecofflink.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/objalloc.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h libcoff.h \ - libecoff.h -efi-app-ia32.lo: efi-app-ia32.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 $(INCDIR)/bfdlink.h coffcode.h \ - peicode.h libpei.h -elf.lo: elf.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)/libiberty.h \ - $(INCDIR)/safe-ctype.h $(INCDIR)/md5.h -elf32-am33lin.lo: elf32-am33lin.c $(INCDIR)/filenames.h \ - elf-bfd.h $(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h \ - $(INCDIR)/elf/external.h $(INCDIR)/bfdlink.h $(INCDIR)/elf/mn10300.h \ - $(INCDIR)/elf/reloc-macros.h elf-m10300.c $(INCDIR)/hashtab.h \ - elf32-target.h -elf32-arc.lo: elf32-arc.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/arc.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-arm.lo: elf32-arm.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-vxworks.h $(INCDIR)/elf/arm.h $(INCDIR)/elf/reloc-macros.h \ - elf32-target.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-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 $(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 \ - $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elf32-target.h -elf32-cris.lo: elf32-cris.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/cris.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-crx.lo: elf32-crx.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/crx.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-d10v.lo: elf32-d10v.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/d10v.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-d30v.lo: elf32-d30v.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/d30v.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-dlx.lo: elf32-dlx.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/dlx.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-fr30.lo: elf32-fr30.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/fr30.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-frv.lo: elf32-frv.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/frv.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/elf/dwarf2.h \ - elf32-target.h -elf32-gen.lo: elf32-gen.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 elf32-target.h -elf32-h8300.lo: elf32-h8300.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/h8.h $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-hppa.lo: elf32-hppa.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/hppa.h \ - $(INCDIR)/elf/reloc-macros.h libhppa.h elf32-hppa.h \ - elf-hppa.h elf32-target.h -elf32-i370.lo: elf32-i370.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/i370.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-i386.lo: elf32-i386.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 elf-vxworks.h \ - $(INCDIR)/elf/i386.h $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-i860.lo: elf32-i860.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/i860.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-i960.lo: elf32-i960.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/i960.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-ip2k.lo: elf32-ip2k.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/ip2k.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-iq2000.lo: elf32-iq2000.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/iq2000.h $(INCDIR)/elf/reloc-macros.h \ - elf32-target.h -elf32-m32c.lo: elf32-m32c.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/m32c.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-m32r.lo: elf32-m32r.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/m32r.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-m68k.lo: elf32-m68k.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/m68k.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/m68k.h \ - elf32-target.h -elf32-m68hc11.lo: elf32-m68hc11.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 elf32-m68hc1x.h \ - $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/m68hc11.h elf32-target.h -elf32-m68hc12.lo: elf32-m68hc12.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 elf32-m68hc1x.h \ - $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/m68hc11.h elf32-target.h -elf32-m68hc1x.lo: elf32-m68hc1x.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 elf32-m68hc1x.h \ - $(INCDIR)/elf/m68hc11.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/m68hc11.h -elf32-m88k.lo: elf32-m88k.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 elf32-target.h -elf-m10200.lo: elf-m10200.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 elf32-target.h -elf-m10300.lo: elf-m10300.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/mn10300.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -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 \ - 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 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 -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 \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-msp430.lo: elf32-msp430.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 $(INCDIR)/elf/msp430.h $(INCDIR)/elf/reloc-macros.h \ - elf32-target.h -elf32-openrisc.lo: elf32-openrisc.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/openrisc.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/libiberty.h elf32-target.h -elf32-or32.lo: elf32-or32.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/or32.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-pj.lo: elf32-pj.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/pj.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-ppc.lo: elf32-ppc.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/ppc.h \ - $(INCDIR)/elf/reloc-macros.h elf32-ppc.h elf-vxworks.h \ - elf32-target.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 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 \ - $(INCDIR)/elf/sh.h $(INCDIR)/elf/reloc-macros.h elf32-sh64.h \ - $(srcdir)/../opcodes/sh64-opc.h -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 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 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 $(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 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 \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/libiberty.h \ - elf32-target.h -elf32-vax.lo: elf32-vax.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/vax.h \ - $(INCDIR)/elf/reloc-macros.h elf32-target.h -elf32-xstormy16.lo: elf32-xstormy16.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/xstormy16.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/libiberty.h elf32-target.h -elf32-xtensa.lo: elf32-xtensa.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/xtensa.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/xtensa-isa.h \ - $(INCDIR)/xtensa-config.h elf32-target.h -elf32-xc16x.lo: elf32-xc16x.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/xc16x.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/elf/dwarf2.h $(INCDIR)/libiberty.h elf32-target.h -elf32.lo: elf32.c elfcode.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ - $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfcore.h -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 -elf-eh-frame.lo: elf-eh-frame.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/dwarf2.h -elf-vxworks.lo: elf-vxworks.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 \ - elf-vxworks.h -epoc-pe-arm.lo: epoc-pe-arm.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 -epoc-pei-arm.lo: epoc-pei-arm.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 -hp300bsd.lo: hp300bsd.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 -hp300hpux.lo: hp300hpux.c $(INCDIR)/aout/hp300hpux.h \ - 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 \ - aout-target.h -som.lo: som.c $(INCDIR)/alloca-conf.h $(INCDIR)/filenames.h -i386aout.lo: i386aout.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h libaout.h $(INCDIR)/bfdlink.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -i386bsd.lo: i386bsd.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 -i386dynix.lo: i386dynix.c $(INCDIR)/aout/dynix3.h 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 \ - aout-target.h -i386freebsd.lo: i386freebsd.c freebsd.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 -i386linux.lo: i386linux.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -i386lynx.lo: i386lynx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -i386msdos.lo: i386msdos.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h -i386netbsd.lo: i386netbsd.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 -i386mach3.lo: i386mach3.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -i386os9k.lo: i386os9k.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/bfdlink.h libaout.h $(INCDIR)/os9k.h -ieee.lo: ieee.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/ieee.h libieee.h $(INCDIR)/safe-ctype.h -m68k4knetbsd.lo: m68k4knetbsd.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 -m68klinux.lo: m68klinux.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -m68knetbsd.lo: m68knetbsd.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 -m88kmach3.lo: m88kmach3.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 -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 $(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 \ - $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h -newsos3.lo: newsos3.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -nlm.lo: nlm.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \ - $(INCDIR)/nlm/external.h -nlm32-i386.lo: nlm32-i386.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/nlm/i386-ext.h libnlm.h $(INCDIR)/nlm/common.h \ - $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmswap.h \ - nlm-target.h -nlm32-sparc.lo: nlm32-sparc.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/nlm/sparc32-ext.h libnlm.h \ - $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \ - nlmswap.h nlm-target.h -nlm32-ppc.lo: nlm32-ppc.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/nlm/ppc-ext.h libnlm.h $(INCDIR)/nlm/common.h \ - $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h nlmswap.h \ - nlm-target.h -nlm32.lo: nlm32.c nlmcode.h $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libnlm.h $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h \ - $(INCDIR)/nlm/external.h -ns32knetbsd.lo: ns32knetbsd.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 -oasys.lo: oasys.c $(INCDIR)/filenames.h $(INCDIR)/safe-ctype.h \ - $(INCDIR)/hashtab.h $(INCDIR)/oasys.h liboasys.h -pc532-mach.lo: pc532-mach.c $(INCDIR)/filenames.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/aout/aout64.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -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)/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 \ - $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h -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 \ - $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h -pei-i386.lo: pei-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 \ - $(INCDIR)/bfdlink.h coffcode.h peicode.h libpei.h -pe-mcore.lo: pe-mcore.c $(INCDIR)/filenames.h coff-mcore.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/mcore.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-mcore.lo: pei-mcore.c $(INCDIR)/filenames.h coff-mcore.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/mcore.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-ppc.lo: pe-ppc.c $(INCDIR)/filenames.h coff-ppc.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/powerpc.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-ppc.lo: pei-ppc.c $(INCDIR)/filenames.h coff-ppc.c \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/powerpc.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-sh.lo: pe-sh.c $(INCDIR)/filenames.h coff-sh.c $(INCDIR)/libiberty.h \ - $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h $(INCDIR)/coff/sh.h \ - $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h coffcode.h peicode.h \ - libpei.h -pei-sh.lo: pei-sh.c $(INCDIR)/filenames.h coff-sh.c \ - $(INCDIR)/libiberty.h $(INCDIR)/hashtab.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/coff/sh.h $(INCDIR)/coff/external.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/pe.h libcoff.h coffcode.h peicode.h \ - libpei.h -pe-mips.lo: pe-mips.c $(INCDIR)/filenames.h $(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 -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)/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 \ - libcoff.h -riscix.lo: riscix.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \ - aout-target.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h -sparclinux.lo: sparclinux.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h libaout.h $(INCDIR)/bfdlink.h aout-target.h -sparclynx.lo: sparclynx.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/sun4.h libaout.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h aout-target.h -sparcnetbsd.lo: sparcnetbsd.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 -sunos.lo: sunos.c $(INCDIR)/bfdlink.h libaout.h aoutf1.h \ - $(INCDIR)/filenames.h $(INCDIR)/hashtab.h $(INCDIR)/aout/sun4.h \ - $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def \ - $(INCDIR)/aout/ar.h aout-target.h -vaxnetbsd.lo: vaxnetbsd.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 -vax1knetbsd.lo: vax1knetbsd.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 -vaxbsd.lo: vaxbsd.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 -versados.lo: versados.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h -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 $(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 \ - $(INCDIR)/hashtab.h vms.h -vms-tir.lo: vms-tir.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h vms.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 $(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 $(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 -coff-alpha.lo: coff-alpha.c $(INCDIR)/filenames.h $(INCDIR)/bfdlink.h \ - $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/symconst.h $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/alpha.h \ - $(INCDIR)/aout/ar.h libcoff.h libecoff.h coffswap.h \ - ecoffswap.h -coff64-rs6000.lo: coff64-rs6000.c $(INCDIR)/filenames.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h $(INCDIR)/coff/internal.h \ - $(INCDIR)/coff/xcoff.h $(INCDIR)/coff/rs6k64.h libcoff.h \ - libxcoff.h coffcode.h coffswap.h -demo64.lo: demo64.c aoutf1.h $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/aout/sun4.h libaout.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \ - $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h aout-target.h -efi-app-ia64.lo: efi-app-ia64.c $(INCDIR)/filenames.h \ - coff-ia64.c $(INCDIR)/hashtab.h $(INCDIR)/coff/ia64.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 \ - $(INCDIR)/elf/reloc-macros.h elf64-target.h -elf64-alpha.lo: elf64-alpha.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/alpha.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h $(INCDIR)/coff/symconst.h \ - $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/alpha.h $(INCDIR)/aout/ar.h \ - libcoff.h libecoff.h ecoffswap.h elf64-target.h -elf64-hppa.lo: elf64-hppa.c $(INCDIR)/alloca-conf.h \ - $(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/hppa.h $(INCDIR)/elf/reloc-macros.h \ - libhppa.h elf64-hppa.h elf-hppa.h elf64-target.h -elf64-gen.lo: elf64-gen.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 elf64-target.h -elfn32-mips.lo: elfn32-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)/coff/ecoff.h $(INCDIR)/coff/mips.h $(INCDIR)/coff/external.h \ - ecoffswap.h elf32-target.h -elf64-mips.lo: elf64-mips.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/aout/ar.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)/coff/ecoff.h $(INCDIR)/coff/alpha.h ecoffswap.h \ - elf64-target.h -elf64-mmix.lo: elf64-mmix.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/mmix.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/opcode/mmix.h \ - elf64-target.h -elf64-ppc.lo: elf64-ppc.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/ppc64.h \ - $(INCDIR)/elf/reloc-macros.h elf64-ppc.h elf64-target.h -elf64-s390.lo: elf64-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 elf64-target.h -elf64-sh64.lo: elf64-sh64.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 elf64-target.h -elf64-sparc.lo: elf64-sparc.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/sparc.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/sparc.h elfxx-sparc.h elf64-target.h -elf64.lo: elf64.c elfcode.h $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \ - $(INCDIR)/bfdlink.h $(INCDIR)/hashtab.h elf-bfd.h $(INCDIR)/elf/common.h \ - $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h elfcore.h -mmo.lo: mmo.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - $(INCDIR)/libiberty.h $(INCDIR)/elf/mmix.h $(INCDIR)/elf/reloc-macros.h \ - $(INCDIR)/opcode/mmix.h -nlm32-alpha.lo: nlm32-alpha.c $(INCDIR)/filenames.h \ - $(INCDIR)/hashtab.h $(INCDIR)/nlm/alpha-ext.h libnlm.h \ - $(INCDIR)/nlm/common.h $(INCDIR)/nlm/internal.h $(INCDIR)/nlm/external.h \ - nlmswap.h nlm-target.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 -hpux-core.lo: hpux-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -irix-core.lo: irix-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -lynx-core.lo: lynx-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -osf-core.lo: osf-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -sco5-core.lo: sco5-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h -trad-core.lo: trad-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h \ - libaout.h $(INCDIR)/bfdlink.h -cisco-core.lo: cisco-core.c $(INCDIR)/filenames.h $(INCDIR)/hashtab.h -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 \ - $(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 \ - $(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. .NOEXPORT: diff --git a/bfd/acinclude.m4 b/bfd/acinclude.m4 index cd4fd55..aaa147e 100644 --- a/bfd/acinclude.m4 +++ b/bfd/acinclude.m4 @@ -64,6 +64,8 @@ AC_DEFUN([AM_INSTALL_LIBBFD], bfdincludedir='$(exec_prefix)/$(host_noncanonical)/$(target_noncanonical)/include' fi AC_SUBST(bfdlibdir) + AM_SUBST_NOTMAKE(bfdlibdir) AC_SUBST(bfdincludedir) + AM_SUBST_NOTMAKE(bfdincludedir) ] ) diff --git a/bfd/aclocal.m4 b/bfd/aclocal.m4 index 9dfea06..77edbce 100644 --- a/bfd/aclocal.m4 +++ b/bfd/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,7 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, +[m4_warning([this file was generated for autoconf 2.64. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -21,14 +29,31 @@ # ---------------------------- # 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"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -85,14 +110,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -101,8 +126,11 @@ 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]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -116,15 +144,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -152,6 +179,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -180,6 +208,16 @@ AC_CACHE_CHECK([dependency style of $depcc], if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -197,7 +235,17 @@ AC_CACHE_CHECK([dependency style of $depcc], done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -207,18 +255,23 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # 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} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -269,61 +322,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _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" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -340,28 +406,16 @@ AC_DEFUN([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. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -378,16 +432,20 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # 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 +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# 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]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -407,6 +465,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -422,8 +483,8 @@ 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_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -431,20 +492,37 @@ 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([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 + [_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 + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header @@ -455,18 +533,19 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -477,33 +556,51 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # 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"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], -[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 +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl + AC_SUBST([MAINT])dnl ] ) @@ -511,13 +608,13 @@ 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. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -526,7 +623,7 @@ AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -536,24 +633,24 @@ 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 +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -563,14 +660,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -586,7 +683,15 @@ AC_SUBST($1)]) # 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" +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -596,7 +701,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -604,70 +709,33 @@ fi # 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.) +# Check for `mkdir -p'. 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])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -684,7 +752,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -694,14 +762,14 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -710,16 +778,29 @@ AC_DEFUN([AM_SANITY_CHECK], # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + 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` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -769,9 +850,28 @@ 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" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. @@ -873,6 +973,8 @@ 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/override.m4]) +m4_include([../config/plugins.m4]) m4_include([../config/po.m4]) m4_include([../config/progtest.m4]) m4_include([../config/stdint.m4]) @@ -880,6 +982,7 @@ m4_include([../libtool.m4]) m4_include([../ltoptions.m4]) m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.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 fb81f81..4438e28 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, 2006, 2007 + 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Minh Tran-Le . Converted to back end form by Ian Lance Taylor . diff --git a/bfd/aix5ppc-core.c b/bfd/aix5ppc-core.c index 2b6fd67..7b0695a 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, 2006, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Tom Rix Contributed by Red Hat Inc. @@ -40,6 +40,10 @@ int xcoff64_core_file_failing_signal (bfd *); #include #include +/* The default architecture and machine for matching core files. */ +#define DEFAULT_ARCHITECTURE bfd_arch_powerpc +#define DEFAULT_MACHINE bfd_mach_ppc_620 + #define core_hdr(abfd) ((struct core_dumpxx *) abfd->tdata.any) #define CHECK_FILE_OFFSET(s, v) \ @@ -48,6 +52,8 @@ int xcoff64_core_file_failing_signal (bfd *); const bfd_target * xcoff64_core_p (bfd *abfd) { + enum bfd_architecture arch; + unsigned long mach; struct core_dumpxx core, *new_core_hdr; struct stat statbuf; asection *sec; @@ -218,6 +224,11 @@ xcoff64_core_p (bfd *abfd) } } + /* Set the architecture and machine. */ + arch = DEFAULT_ARCHITECTURE; + mach = DEFAULT_MACHINE; + bfd_default_set_arch_mach (abfd, arch, mach); + return_value = (bfd_target *) abfd->xvec; /* This is garbage for now. */ xcoff64_core_p_error: diff --git a/bfd/aout-adobe.c b/bfd/aout-adobe.c index 8ccaf42..02f6ccb 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, 2006, 2007 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Cygnus Support. Based on bout.c. @@ -463,6 +463,7 @@ aout_adobe_sizeof_headers (bfd *ignore_abfd ATTRIBUTE_UNUSED, #define aout_32_bfd_is_group_section bfd_generic_is_group_section #define aout_32_bfd_discard_group bfd_generic_discard_group #define aout_32_section_already_linked _bfd_generic_section_already_linked +#define aout_32_bfd_define_common_symbol bfd_generic_define_common_symbol #define aout_32_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define aout_32_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define aout_32_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/aout-ns32k.c b/bfd/aout-ns32k.c index d1ebbc5..ea7d8f4 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, 2007 Free Software Foundation, Inc. + 2002, 2003, 2005, 2006, 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. diff --git a/bfd/aout-sparcle.c b/bfd/aout-sparcle.c index a8baec5..afcc342 100644 --- a/bfd/aout-sparcle.c +++ b/bfd/aout-sparcle.c @@ -1,5 +1,5 @@ /* BFD backend for sparc little-endian aout binaries. - Copyright 1996, 2001, 2007 Free Software Foundation, Inc. + Copyright 1996, 2001, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/aout-target.h b/bfd/aout-target.h index c063d03..96d7f97 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -493,6 +493,9 @@ MY_bfd_final_link (bfd *abfd, struct bfd_link_info *info) #define MY_section_already_linked \ _bfd_generic_section_already_linked #endif +#ifndef MY_bfd_define_common_symbol +#define MY_bfd_define_common_symbol bfd_generic_define_common_symbol +#endif #ifndef MY_bfd_reloc_type_lookup #define MY_bfd_reloc_type_lookup NAME (aout, reloc_type_lookup) #endif diff --git a/bfd/aout-tic30.c b/bfd/aout-tic30.c index 49815c4..ef74fa6 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, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) @@ -950,6 +950,9 @@ tic30_aout_set_arch_mach (bfd *abfd, #define MY_section_already_linked \ _bfd_generic_section_already_linked #endif +#ifndef MY_bfd_define_common_symbol +#define MY_bfd_define_common_symbol bfd_generic_define_common_symbol +#endif #ifndef MY_bfd_reloc_type_lookup #define MY_bfd_reloc_type_lookup tic30_aout_reloc_type_lookup #endif diff --git a/bfd/aout0.c b/bfd/aout0.c index 0f6f01e..e87af00 100644 --- a/bfd/aout0.c +++ b/bfd/aout0.c @@ -1,5 +1,5 @@ /* BFD backend for SunOS style a.out with flags set to 0 - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. diff --git a/bfd/aout32.c b/bfd/aout32.c index 8ca1820..3ad1bd5 100644 --- a/bfd/aout32.c +++ b/bfd/aout32.c @@ -1,5 +1,6 @@ /* BFD back-end for 32-bit a.out files. - Copyright 1990, 1991, 1992, 1993, 1994, 2007 Free Software Foundation, Inc. + Copyright 1990, 1991, 1992, 1993, 1994, 2005, 2007 + Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/aout64.c b/bfd/aout64.c index bd5e512..2068706 100644 --- a/bfd/aout64.c +++ b/bfd/aout64.c @@ -1,5 +1,6 @@ /* BFD back-end for 64-bit a.out files. - Copyright 1990, 1991, 1992, 1994, 2007 Free Software Foundation, Inc. + Copyright 1990, 1991, 1992, 1994, 2005, 2007 + Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 1244510..23fd5c4 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -464,7 +464,7 @@ NAME (aout, some_aout_object_p) (bfd *abfd, const bfd_target *result; bfd_size_type amt = sizeof (* rawptr); - rawptr = bfd_zalloc (abfd, amt); + rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt); if (rawptr == NULL) return NULL; @@ -679,7 +679,7 @@ NAME (aout, mkobject) (bfd *abfd) bfd_set_error (bfd_error_system_call); - rawptr = bfd_zalloc (abfd, amt); + rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, amt); if (rawptr == NULL) return FALSE; @@ -786,6 +786,8 @@ NAME (aout, machine_type) (enum bfd_architecture arch, case bfd_mach_mips9000: case bfd_mach_mips10000: case bfd_mach_mips12000: + case bfd_mach_mips14000: + case bfd_mach_mips16000: case bfd_mach_mips16: case bfd_mach_mipsisa32: case bfd_mach_mipsisa32r2: @@ -793,6 +795,7 @@ NAME (aout, machine_type) (enum bfd_architecture arch, case bfd_mach_mipsisa64: case bfd_mach_mipsisa64r2: case bfd_mach_mips_sb1: + case bfd_mach_mips_xlr: /* FIXME: These should be MIPS3, MIPS4, MIPS16, MIPS32, etc. */ arch_flags = M_MIPS2; break; @@ -1291,9 +1294,10 @@ aout_get_external_symbols (bfd *abfd) { bfd_size_type count; struct external_nlist *syms; - bfd_size_type amt; count = exec_hdr (abfd)->a_syms / EXTERNAL_NLIST_SIZE; + if (count == 0) + return TRUE; /* Nothing to do. */ #ifdef USE_MMAP if (! bfd_get_file_window (abfd, obj_sym_filepos (abfd), @@ -1305,17 +1309,20 @@ aout_get_external_symbols (bfd *abfd) /* We allocate using malloc to make the values easy to free later on. If we put them on the objalloc it might not be possible to free them. */ - syms = bfd_malloc (count * EXTERNAL_NLIST_SIZE); - if (syms == NULL && count != 0) + syms = (struct external_nlist *) bfd_malloc (count * EXTERNAL_NLIST_SIZE); + if (syms == NULL) return FALSE; - amt = exec_hdr (abfd)->a_syms; - if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 - || bfd_bread (syms, amt, abfd) != amt) - { - free (syms); - return FALSE; - } + { + bfd_size_type amt; + amt = exec_hdr (abfd)->a_syms; + if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0 + || bfd_bread (syms, amt, abfd) != amt) + { + free (syms); + return FALSE; + } + } #endif obj_aout_external_syms (abfd) = syms; @@ -1342,7 +1349,7 @@ aout_get_external_symbols (bfd *abfd) return FALSE; strings = (char *) obj_aout_string_window (abfd).data; #else - strings = bfd_malloc (stringsize + 1); + strings = (char *) bfd_malloc (stringsize + 1); if (strings == NULL) return FALSE; @@ -1661,12 +1668,12 @@ NAME (aout, make_empty_symbol) (bfd *abfd) { bfd_size_type amt = sizeof (aout_symbol_type); - aout_symbol_type *new = bfd_zalloc (abfd, amt); - if (!new) + aout_symbol_type *new_symbol = (aout_symbol_type *) bfd_zalloc (abfd, amt); + if (!new_symbol) return NULL; - new->symbol.the_bfd = abfd; + new_symbol->symbol.the_bfd = abfd; - return &new->symbol; + return &new_symbol->symbol; } /* Translate a set of internal symbols into external symbols. */ @@ -1743,7 +1750,7 @@ NAME (aout, slurp_symbol_table) (bfd *abfd) return TRUE; /* Nothing to do. */ cached_size *= sizeof (aout_symbol_type); - cached = bfd_zmalloc (cached_size); + cached = (aout_symbol_type *) bfd_zmalloc (cached_size); if (cached == NULL) return FALSE; @@ -2304,7 +2311,7 @@ NAME (aout, slurp_reloc_table) (bfd *abfd, sec_ptr asect, asymbol **symbols) return TRUE; /* Nothing to be done. */ amt = count * sizeof (arelent); - reloc_cache = bfd_zmalloc (amt); + reloc_cache = (arelent *) bfd_zmalloc (amt); if (reloc_cache == NULL) return FALSE; @@ -2365,7 +2372,7 @@ NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section) each_size = obj_reloc_entry_size (abfd); natsize = (bfd_size_type) each_size * count; - native = bfd_zalloc (abfd, natsize); + native = (unsigned char *) bfd_zalloc (abfd, natsize); if (!native) return FALSE; @@ -2779,7 +2786,7 @@ NAME (aout, find_nearest_line) (bfd *abfd, adata (abfd).line_buf = buf = NULL; else { - buf = bfd_malloc (filelen + funclen + 3); + buf = (char *) bfd_malloc (filelen + funclen + 3); adata (abfd).line_buf = buf; if (buf == NULL) return FALSE; @@ -2873,7 +2880,8 @@ NAME (aout, link_hash_newfunc) (struct bfd_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 (* ret)); + ret = (struct aout_link_hash_entry *) bfd_hash_allocate (table, + sizeof (* ret)); if (ret == NULL) return NULL; @@ -2912,7 +2920,7 @@ NAME (aout, link_hash_table_create) (bfd *abfd) struct aout_link_hash_table *ret; bfd_size_type amt = sizeof (* ret); - ret = bfd_malloc (amt); + ret = (struct aout_link_hash_table *) bfd_malloc (amt); if (ret == NULL) return NULL; @@ -2967,7 +2975,7 @@ aout_link_add_symbols (bfd *abfd, struct bfd_link_info *info) table, but keeping the list is more efficient. Perhaps this should be conditional on info->keep_memory. */ amt = sym_count * sizeof (struct aout_link_hash_entry *); - sym_hash = bfd_alloc (abfd, amt); + sym_hash = (struct aout_link_hash_entry **) bfd_alloc (abfd, amt); if (sym_hash == NULL) return FALSE; obj_aout_sym_hashes (abfd) = sym_hash; @@ -3331,8 +3339,9 @@ aout_link_check_ar_symbols (bfd *abfd, /* Turn the current link symbol into a common symbol. It is already on the undefs list. */ h->type = bfd_link_hash_common; - h->u.c.p = bfd_hash_allocate (&info->hash->table, - sizeof (struct bfd_link_hash_common_entry)); + h->u.c.p = (struct bfd_link_hash_common_entry *) + bfd_hash_allocate (&info->hash->table, + sizeof (struct bfd_link_hash_common_entry)); if (h->u.c.p == NULL) return FALSE; @@ -3502,7 +3511,8 @@ aout_link_includes_newfunc (struct bfd_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 (* ret)); + ret = (struct aout_link_includes_entry *) + bfd_hash_allocate (table, sizeof (* ret)); if (ret == NULL) return NULL; @@ -3779,7 +3789,7 @@ aout_link_reloc_link_order (struct aout_final_link_info *finfo, bfd_boolean ok; size = bfd_get_reloc_size (howto); - buf = bfd_zmalloc (size); + buf = (bfd_byte *) bfd_zmalloc (size); if (buf == NULL) return FALSE; r = MY_relocate_contents (howto, finfo->output_bfd, @@ -5129,7 +5139,8 @@ aout_link_write_symbols (struct aout_final_link_info *finfo, bfd *input_bfd) { /* This is the first time we have seen this header file with this set of stabs strings. */ - t = bfd_hash_allocate (&finfo->includes.root, + t = (struct aout_link_includes_totals *) + bfd_hash_allocate (&finfo->includes.root, sizeof *t); if (t == NULL) return FALSE; @@ -5420,11 +5431,11 @@ NAME (aout, final_link) (bfd *abfd, goto error_return; /* Allocate buffers to hold section contents and relocs. */ - aout_info.contents = bfd_malloc (max_contents_size); + aout_info.contents = (bfd_byte *) bfd_malloc (max_contents_size); aout_info.relocs = bfd_malloc (max_relocs_size); - aout_info.symbol_map = bfd_malloc (max_sym_count * sizeof (int *)); - aout_info.output_syms = bfd_malloc ((max_sym_count + 1) - * sizeof (struct external_nlist)); + aout_info.symbol_map = (int *) bfd_malloc (max_sym_count * sizeof (int *)); + aout_info.output_syms = (struct external_nlist *) + bfd_malloc ((max_sym_count + 1) * sizeof (struct external_nlist)); if ((aout_info.contents == NULL && max_contents_size != 0) || (aout_info.relocs == NULL && max_relocs_size != 0) || (aout_info.symbol_map == NULL && max_sym_count != 0) diff --git a/bfd/archive.c b/bfd/archive.c index e080d3a..36252d5 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. Mostly Gumby Henkel-Wallace's fault. @@ -137,6 +137,7 @@ SUBSECTION #include "aout/ranlib.h" #include "safe-ctype.h" #include "hashtab.h" +#include "filenames.h" #ifndef errno extern int errno; @@ -157,7 +158,7 @@ struct ar_cache { #define ar_maxnamelen(abfd) ((abfd)->xvec->ar_max_namelen) #define arch_eltdata(bfd) ((struct areltdata *) ((bfd)->arelt_data)) -#define arch_hdr(bfd) ((struct ar_hdr *) arch_eltdata(bfd)->arch_header) +#define arch_hdr(bfd) ((struct ar_hdr *) arch_eltdata (bfd)->arch_header) void _bfd_ar_spacepad (char *p, size_t n, const char *fmt, long val) @@ -180,7 +181,7 @@ _bfd_generic_mkarchive (bfd *abfd) { bfd_size_type amt = sizeof (struct artdata); - abfd->tdata.aout_ar_data = bfd_zalloc (abfd, amt); + abfd->tdata.aout_ar_data = (struct artdata *) bfd_zalloc (abfd, amt); if (bfd_ardata (abfd) == NULL) return FALSE; @@ -318,7 +319,7 @@ _bfd_add_bfd_to_archive_cache (bfd *arch_bfd, file_ptr filepos, bfd *new_elt) } /* Insert new_elt into the hash table by filepos. */ - cache = bfd_zalloc (arch_bfd, sizeof (struct ar_cache)); + cache = (struct ar_cache *) bfd_zalloc (arch_bfd, sizeof (struct ar_cache)); cache->ptr = filepos; cache->arbfd = new_elt; *htab_find_slot (hash_table, (const void *) cache, INSERT) = cache; @@ -326,24 +327,61 @@ _bfd_add_bfd_to_archive_cache (bfd *arch_bfd, file_ptr filepos, bfd *new_elt) return TRUE; } +static bfd * +_bfd_find_nested_archive (bfd *arch_bfd, const char *filename) +{ + bfd *abfd; + + for (abfd = arch_bfd->nested_archives; + abfd != NULL; + abfd = abfd->archive_next) + { + if (strcmp (filename, abfd->filename) == 0) + return abfd; + } + abfd = bfd_openr (filename, NULL); + if (abfd) + { + abfd->archive_next = arch_bfd->nested_archives; + arch_bfd->nested_archives = abfd; + } + return abfd; +} + /* The name begins with space. Hence the rest of the name is an index into the string table. */ static char * -get_extended_arelt_filename (bfd *arch, const char *name) +get_extended_arelt_filename (bfd *arch, const char *name, file_ptr *originp) { unsigned long index = 0; + const char *endp; /* Should extract string so that I can guarantee not to overflow into the next region, but I'm too lazy. */ errno = 0; /* Skip first char, which is '/' in SVR4 or ' ' in some other variants. */ - index = strtol (name + 1, NULL, 10); + index = strtol (name + 1, (char **) &endp, 10); if (errno != 0 || index >= bfd_ardata (arch)->extended_names_size) { bfd_set_error (bfd_error_malformed_archive); return NULL; } + /* In a thin archive, a member of an archive-within-an-archive + will have the offset in the inner archive encoded here. */ + if (bfd_is_thin_archive (arch) && endp != NULL && *endp == ':') + { + file_ptr origin = strtol (endp + 1, NULL, 10); + + if (errno != 0) + { + bfd_set_error (bfd_error_malformed_archive); + return NULL; + } + *originp = origin; + } + else + *originp = 0; return bfd_ardata (arch)->extended_names + index; } @@ -376,6 +414,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) bfd_size_type namelen = 0; bfd_size_type allocsize = sizeof (struct areltdata) + sizeof (struct ar_hdr); char *allocptr = 0; + file_ptr origin = 0; if (bfd_bread (hdrp, sizeof (struct ar_hdr), abfd) != sizeof (struct ar_hdr)) { @@ -407,7 +446,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) && memchr (hdr.ar_name, '/', ar_maxnamelen (abfd)) == NULL)) && bfd_ardata (abfd)->extended_names != NULL) { - filename = get_extended_arelt_filename (abfd, hdr.ar_name); + filename = get_extended_arelt_filename (abfd, hdr.ar_name, &origin); if (filename == NULL) return NULL; } @@ -423,7 +462,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) allocsize += namelen + 1; parsed_size -= namelen; - allocptr = bfd_zalloc (abfd, allocsize); + allocptr = (char *) bfd_zalloc (abfd, allocsize); if (allocptr == NULL) return NULL; filename = (allocptr @@ -444,12 +483,12 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) spaces, so only look for ' ' if we don't find '/'. */ char *e; - e = memchr (hdr.ar_name, '\0', ar_maxnamelen (abfd)); + e = (char *) memchr (hdr.ar_name, '\0', ar_maxnamelen (abfd)); if (e == NULL) { - e = memchr (hdr.ar_name, '/', ar_maxnamelen (abfd)); + e = (char *) memchr (hdr.ar_name, '/', ar_maxnamelen (abfd)); if (e == NULL) - e = memchr (hdr.ar_name, ' ', ar_maxnamelen (abfd)); + e = (char *) memchr (hdr.ar_name, ' ', ar_maxnamelen (abfd)); } if (e != NULL) @@ -466,7 +505,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) if (!allocptr) { - allocptr = bfd_zalloc (abfd, allocsize); + allocptr = (char *) bfd_zalloc (abfd, allocsize); if (allocptr == NULL) return NULL; } @@ -476,6 +515,7 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) ared->arch_header = allocptr + sizeof (struct areltdata); memcpy (ared->arch_header, &hdr, sizeof (struct ar_hdr)); ared->parsed_size = parsed_size; + ared->origin = origin; if (filename != NULL) ared->filename = filename; @@ -491,6 +531,30 @@ _bfd_generic_read_ar_hdr_mag (bfd *abfd, const char *mag) return ared; } +/* Append the relative pathname for a member of the thin archive + to the pathname of the directory containing the archive. */ + +static char * +append_relative_path (bfd *arch, char *elt_name) +{ + const char *arch_name = arch->filename; + const char *base_name = lbasename (arch_name); + size_t prefix_len; + char *filename; + + if (base_name == arch_name) + return elt_name; + + prefix_len = base_name - arch_name; + filename = (char *) bfd_alloc (arch, prefix_len + strlen (elt_name) + 1); + if (filename == NULL) + return NULL; + + strncpy (filename, arch_name, prefix_len); + strcpy (filename + prefix_len, elt_name); + return filename; +} + /* This is an internal function; it's mainly used when indexing through the archive symbol table, but also used to get the next element, since it handles the bookkeeping so nicely for us. */ @@ -500,6 +564,7 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos) { struct areltdata *new_areldata; bfd *n_nfd; + char *filename; if (archive->my_archive) { @@ -514,24 +579,77 @@ _bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos) if (0 > bfd_seek (archive, filepos, SEEK_SET)) return NULL; - if ((new_areldata = _bfd_read_ar_hdr (archive)) == NULL) + if ((new_areldata = (struct areltdata *) _bfd_read_ar_hdr (archive)) == NULL) return NULL; - n_nfd = _bfd_create_empty_archive_element_shell (archive); + filename = new_areldata->filename; + + if (bfd_is_thin_archive (archive)) + { + /* This is a proxy entry for an external file. */ + if (! IS_ABSOLUTE_PATH (filename)) + { + filename = append_relative_path (archive, filename); + if (filename == NULL) + return NULL; + } + + if (new_areldata->origin > 0) + { + /* This proxy entry refers to an element of a nested archive. + Locate the member of that archive and return a bfd for it. */ + bfd *ext_arch = _bfd_find_nested_archive (archive, filename); + + if (ext_arch == NULL + || ! bfd_check_format (ext_arch, bfd_archive)) + { + bfd_release (archive, new_areldata); + return NULL; + } + n_nfd = _bfd_get_elt_at_filepos (ext_arch, new_areldata->origin); + if (n_nfd == NULL) + { + bfd_release (archive, new_areldata); + return NULL; + } + n_nfd->proxy_origin = bfd_tell (archive); + return n_nfd; + } + /* It's not an element of a nested archive; + open the external file as a bfd. */ + n_nfd = bfd_openr (filename, NULL); + } + else + { + n_nfd = _bfd_create_empty_archive_element_shell (archive); + } + if (n_nfd == NULL) { bfd_release (archive, new_areldata); return NULL; } - n_nfd->origin = bfd_tell (archive); + n_nfd->proxy_origin = bfd_tell (archive); + + if (bfd_is_thin_archive (archive)) + { + n_nfd->origin = 0; + } + else + { + n_nfd->origin = n_nfd->proxy_origin; + n_nfd->filename = filename; + } + n_nfd->arelt_data = new_areldata; - n_nfd->filename = new_areldata->filename; if (_bfd_add_bfd_to_archive_cache (archive, filepos, n_nfd)) return n_nfd; /* Huh? */ + /* FIXME: n_nfd isn't allocated in the archive's memory pool. + If we reach this point, I think bfd_release will abort. */ bfd_release (archive, n_nfd); bfd_release (archive, new_areldata); return NULL; @@ -568,8 +686,8 @@ DESCRIPTION bfd * bfd_openr_next_archived_file (bfd *archive, bfd *last_file) { - if ((bfd_get_format (archive) != bfd_archive) || - (archive->direction == write_direction)) + if ((bfd_get_format (archive) != bfd_archive) + || (archive->direction == write_direction)) { bfd_set_error (bfd_error_invalid_operation); return NULL; @@ -589,7 +707,9 @@ bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file) else { unsigned int size = arelt_size (last_file); - filestart = last_file->origin + size; + filestart = last_file->proxy_origin; + if (! bfd_is_thin_archive (archive)) + filestart += size; if (archive->my_archive) filestart -= archive->origin; /* Pad to an even boundary... @@ -615,14 +735,17 @@ bfd_generic_archive_p (bfd *abfd) return NULL; } - if (strncmp (armag, ARMAG, SARMAG) != 0 && - strncmp (armag, ARMAGB, SARMAG) != 0) + bfd_is_thin_archive (abfd) = (strncmp (armag, ARMAGT, SARMAG) == 0); + + if (strncmp (armag, ARMAG, SARMAG) != 0 + && strncmp (armag, ARMAGB, SARMAG) != 0 + && ! bfd_is_thin_archive (abfd)) return 0; tdata_hold = bfd_ardata (abfd); amt = sizeof (struct artdata); - bfd_ardata (abfd) = bfd_zalloc (abfd, amt); + bfd_ardata (abfd) = (struct artdata *) bfd_zalloc (abfd, amt); if (bfd_ardata (abfd) == NULL) { bfd_ardata (abfd) = tdata_hold; @@ -712,13 +835,13 @@ do_slurp_bsd_armap (bfd *abfd) bfd_size_type parsed_size, amt; carsym *set; - mapdata = _bfd_read_ar_hdr (abfd); + mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd); if (mapdata == NULL) return FALSE; parsed_size = mapdata->parsed_size; bfd_release (abfd, mapdata); /* Don't need it any more. */ - raw_armap = bfd_zalloc (abfd, parsed_size); + raw_armap = (bfd_byte *) bfd_zalloc (abfd, parsed_size); if (raw_armap == NULL) return FALSE; @@ -747,7 +870,7 @@ do_slurp_bsd_armap (bfd *abfd) + ardata->symdef_count * BSD_SYMDEF_SIZE + BSD_STRING_COUNT_SIZE); amt = ardata->symdef_count * sizeof (carsym); - ardata->symdefs = bfd_alloc (abfd, amt); + ardata->symdefs = (struct carsym *) bfd_alloc (abfd, amt); if (!ardata->symdefs) return FALSE; @@ -788,7 +911,7 @@ do_slurp_coff_armap (bfd *abfd) bfd_size_type carsym_size, ptrsize; unsigned int i; - mapdata = _bfd_read_ar_hdr (abfd); + mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd); if (mapdata == NULL) return FALSE; parsed_size = mapdata->parsed_size; @@ -833,14 +956,15 @@ do_slurp_coff_armap (bfd *abfd) if (carsym_size + stringsize + 1 <= carsym_size) return FALSE; - ardata->symdefs = bfd_zalloc (abfd, carsym_size + stringsize + 1); + ardata->symdefs = (struct carsym *) bfd_zalloc (abfd, + carsym_size + stringsize + 1); if (ardata->symdefs == NULL) return FALSE; carsyms = ardata->symdefs; stringbase = ((char *) ardata->symdefs) + carsym_size; /* Allocate and read in the raw offsets. */ - raw_armap = bfd_alloc (abfd, ptrsize); + raw_armap = (int *) bfd_alloc (abfd, ptrsize); if (raw_armap == NULL) goto release_symdefs; if (bfd_bread (raw_armap, ptrsize, abfd) != ptrsize @@ -875,7 +999,7 @@ do_slurp_coff_armap (bfd *abfd) struct areltdata *tmp; bfd_seek (abfd, ardata->first_file_filepos, SEEK_SET); - tmp = _bfd_read_ar_hdr (abfd); + tmp = (struct areltdata *) _bfd_read_ar_hdr (abfd); if (tmp != NULL) { if (tmp->arch_header[0] == '/' @@ -975,12 +1099,12 @@ bfd_slurp_bsd_armap_f2 (bfd *abfd) return TRUE; } - mapdata = _bfd_read_ar_hdr (abfd); + mapdata = (struct areltdata *) _bfd_read_ar_hdr (abfd); if (mapdata == NULL) return FALSE; amt = mapdata->parsed_size; - raw_armap = bfd_zalloc (abfd, amt); + raw_armap = (bfd_byte *) bfd_zalloc (abfd, amt); if (raw_armap == NULL) { byebye: @@ -1016,7 +1140,7 @@ bfd_slurp_bsd_armap_f2 (bfd *abfd) + BSD_STRING_COUNT_SIZE); rbase = (bfd_byte *) stringbase + stringsize; amt = ardata->symdef_count * BSD_SYMDEF_SIZE; - ardata->symdefs = bfd_alloc (abfd, amt); + ardata->symdefs = (struct carsym *) bfd_alloc (abfd, amt); if (!ardata->symdefs) return FALSE; @@ -1073,7 +1197,7 @@ _bfd_slurp_extended_name_table (bfd *abfd) return TRUE; } - namedata = _bfd_read_ar_hdr (abfd); + namedata = (struct areltdata *) _bfd_read_ar_hdr (abfd); if (namedata == NULL) return FALSE; @@ -1082,7 +1206,7 @@ _bfd_slurp_extended_name_table (bfd *abfd) goto byebye; bfd_ardata (abfd)->extended_names_size = amt; - bfd_ardata (abfd)->extended_names = bfd_zalloc (abfd, amt + 1); + bfd_ardata (abfd)->extended_names = (char *) bfd_zalloc (abfd, amt + 1); if (bfd_ardata (abfd)->extended_names == NULL) { byebye: @@ -1110,7 +1234,7 @@ _bfd_slurp_extended_name_table (bfd *abfd) char *limit = temp + namedata->parsed_size; for (; temp < limit; ++temp) { - if (*temp == '\012') + if (*temp == ARFMAG[1]) temp[temp > ext_names && temp[-1] == '/' ? -1 : 0] = '\0'; if (*temp == '\\') *temp = '/'; @@ -1190,6 +1314,66 @@ normalize (bfd *abfd ATTRIBUTE_UNUSED, const char *file) } #endif +/* Adjust a relative path name based on the reference path. */ + +static const char * +adjust_relative_path (const char * path, const char * ref_path) +{ + static char *pathbuf = NULL; + static int pathbuf_len = 0; + const char *pathp = path; + const char *refp = ref_path; + int element_count = 0; + int len; + char *newp; + + /* Remove common leading path elements. */ + for (;;) + { + const char *e1 = pathp; + const char *e2 = refp; + + while (*e1 && ! IS_DIR_SEPARATOR (*e1)) + ++e1; + while (*e2 && ! IS_DIR_SEPARATOR (*e2)) + ++e2; + if (*e1 == '\0' || *e2 == '\0' || e1 - pathp != e2 - refp + || strncmp (pathp, refp, e1 - pathp) != 0) + break; + pathp = e1 + 1; + refp = e2 + 1; + } + + /* For each leading path element in the reference path, + insert "../" into the path. */ + for (; *refp; ++refp) + if (IS_DIR_SEPARATOR (*refp)) + ++element_count; + len = 3 * element_count + strlen (path) + 1; + + if (len > pathbuf_len) + { + if (pathbuf != NULL) + free (pathbuf); + pathbuf_len = 0; + pathbuf = (char *) bfd_malloc (len); + if (pathbuf == NULL) + return path; + pathbuf_len = len; + } + + newp = pathbuf; + while (element_count-- > 0) + { + /* FIXME: Support Windows style path separators as well. */ + strcpy (newp, "../"); + newp += 3; + } + strcpy (newp, pathp); + + return pathbuf; +} + /* Build a BFD style extended name table. */ bfd_boolean @@ -1232,8 +1416,11 @@ _bfd_construct_extended_name_table (bfd *abfd, bfd_size_type total_namelen = 0; bfd *current; char *strptr; + const char *last_filename; + long last_stroff; *tablen = 0; + last_filename = NULL; /* Figure out how long the table should be. */ for (current = abfd->archive_head; @@ -1243,6 +1430,42 @@ _bfd_construct_extended_name_table (bfd *abfd, const char *normal; unsigned int thislen; + if (bfd_is_thin_archive (abfd)) + { + const char *filename = current->filename; + + /* If the element being added is a member of another archive + (i.e., we are flattening), use the containing archive's name. */ + if (current->my_archive + && ! bfd_is_thin_archive (current->my_archive)) + filename = current->my_archive->filename; + + /* If the path is the same as the previous path seen, + reuse it. This can happen when flattening a thin + archive that contains other archives. */ + if (last_filename && strcmp (last_filename, filename) == 0) + continue; + + last_filename = filename; + + /* If the path is relative, adjust it relative to + the containing archive. */ + if (! IS_ABSOLUTE_PATH (filename) + && ! IS_ABSOLUTE_PATH (abfd->filename)) + normal = adjust_relative_path (filename, abfd->filename); + else + normal = filename; + + /* In a thin archive, always store the full pathname + in the extended name table. */ + total_namelen += strlen (normal) + 1; + if (trailing_slash) + /* Leave room for trailing slash. */ + ++total_namelen; + + continue; + } + normal = normalize (current, current->filename); if (normal == NULL) return FALSE; @@ -1283,45 +1506,92 @@ _bfd_construct_extended_name_table (bfd *abfd, if (total_namelen == 0) return TRUE; - *tabloc = bfd_zalloc (abfd, total_namelen); + *tabloc = (char *) bfd_zalloc (abfd, total_namelen); if (*tabloc == NULL) return FALSE; *tablen = total_namelen; strptr = *tabloc; + last_filename = NULL; + last_stroff = 0; + for (current = abfd->archive_head; current != NULL; current = current->archive_next) { const char *normal; unsigned int thislen; - - normal = normalize (current, current->filename); - if (normal == NULL) - return FALSE; + long stroff; + const char *filename = current->filename; + + if (bfd_is_thin_archive (abfd)) + { + /* If the element being added is a member of another archive + (i.e., we are flattening), use the containing archive's name. */ + if (current->my_archive + && ! bfd_is_thin_archive (current->my_archive)) + filename = current->my_archive->filename; + /* If the path is the same as the previous path seen, + reuse it. This can happen when flattening a thin + archive that contains other archives. + If the path is relative, adjust it relative to + the containing archive. */ + if (last_filename && strcmp (last_filename, filename) == 0) + normal = last_filename; + else if (! IS_ABSOLUTE_PATH (filename) + && ! IS_ABSOLUTE_PATH (abfd->filename)) + normal = adjust_relative_path (filename, abfd->filename); + else + normal = filename; + } + else + { + normal = normalize (current, filename); + if (normal == NULL) + return FALSE; + } thislen = strlen (normal); - if (thislen > maxname) + if (thislen > maxname || bfd_is_thin_archive (abfd)) { /* Works for now; may need to be re-engineered if we encounter an oddball archive format and want to generalise this hack. */ struct ar_hdr *hdr = arch_hdr (current); - strcpy (strptr, normal); - if (! trailing_slash) - strptr[thislen] = '\012'; - else - { - strptr[thislen] = '/'; - strptr[thislen + 1] = '\012'; + if (normal == last_filename) + stroff = last_stroff; + else + { + strcpy (strptr, normal); + if (! trailing_slash) + strptr[thislen] = ARFMAG[1]; + else + { + strptr[thislen] = '/'; + strptr[thislen + 1] = ARFMAG[1]; + } + stroff = strptr - *tabloc; + last_stroff = stroff; } hdr->ar_name[0] = ar_padchar (current); - _bfd_ar_spacepad (hdr->ar_name + 1, maxname - 1, "%-ld", - strptr - *tabloc); - strptr += thislen + 1; - if (trailing_slash) - ++strptr; + if (bfd_is_thin_archive (abfd) && current->origin > 0) + { + int len = snprintf (hdr->ar_name + 1, maxname - 1, "%-ld:", + stroff); + _bfd_ar_spacepad (hdr->ar_name + 1 + len, maxname - 1 - len, + "%-ld", + current->origin - sizeof (struct ar_hdr)); + } + else + _bfd_ar_spacepad (hdr->ar_name + 1, maxname - 1, "%-ld", stroff); + if (normal != last_filename) + { + strptr += thislen + 1; + if (trailing_slash) + ++strptr; + last_filename = filename; + } } } @@ -1370,7 +1640,7 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member) if (member && (member->flags & BFD_IN_MEMORY) != 0) { /* Assume we just "made" the member, and fake it. */ - struct bfd_in_memory *bim = member->iostream; + struct bfd_in_memory *bim = (struct bfd_in_memory *) member->iostream; time (&status.st_mtime); status.st_uid = getuid (); status.st_gid = getgid (); @@ -1383,8 +1653,18 @@ bfd_ar_hdr_from_filesystem (bfd *abfd, const char *filename, bfd *member) return NULL; } + /* If the caller requested that the BFD generate deterministic output, + fake values for modification time, UID, GID, and file mode. */ + if ((abfd->flags & BFD_DETERMINISTIC_OUTPUT) != 0) + { + status.st_mtime = 0; + status.st_uid = 0; + status.st_gid = 0; + status.st_mode = 0644; + } + amt = sizeof (struct ar_hdr) + sizeof (struct areltdata); - ared = bfd_zalloc (abfd, amt); + ared = (struct areltdata *) bfd_zalloc (abfd, amt); if (ared == NULL) return NULL; hdr = (struct ar_hdr *) (((char *) ared) + sizeof (struct areltdata)); @@ -1593,6 +1873,7 @@ bfd_gnu_truncate_arname (bfd *abfd, const char *pathname, char *arhdr) { /* We could have foo/bar\\baz, or foo\\bar, or d:bar. */ char *bslash = strrchr (pathname, '\\'); + if (filename == NULL || (bslash != NULL && bslash > filename)) filename = bslash; if (filename == NULL && pathname[0] != '\0' && pathname[1] == ':') @@ -1610,7 +1891,8 @@ bfd_gnu_truncate_arname (bfd *abfd, const char *pathname, char *arhdr) if (length <= maxlen) memcpy (hdr->ar_name, filename, length); else - { /* pathname: meet procrustes */ + { + /* pathname: meet procrustes. */ memcpy (hdr->ar_name, filename, maxlen); if ((filename[length - 2] == '.') && (filename[length - 1] == 'o')) { @@ -1638,6 +1920,7 @@ _bfd_write_archive_contents (bfd *arch) bfd_boolean hasobjects = FALSE; bfd_size_type wrote; int tries; + char *armag; /* Verify the viability of all entries; if any of them live in the filesystem (as opposed to living in an archive open for input) @@ -1681,7 +1964,10 @@ _bfd_write_archive_contents (bfd *arch) if (bfd_seek (arch, (file_ptr) 0, SEEK_SET) != 0) return FALSE; - wrote = bfd_bwrite (ARMAG, SARMAG, arch); + armag = ARMAG; + if (bfd_is_thin_archive (arch)) + armag = ARMAGT; + wrote = bfd_bwrite (armag, SARMAG, arch); if (wrote != SARMAG) return FALSE; @@ -1707,7 +1993,7 @@ _bfd_write_archive_contents (bfd *arch) return FALSE; if ((elength % 2) == 1) { - if (bfd_bwrite ("\012", 1, arch) != 1) + if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1) return FALSE; } } @@ -1724,11 +2010,15 @@ _bfd_write_archive_contents (bfd *arch) if (bfd_bwrite (hdr, sizeof (*hdr), arch) != sizeof (*hdr)) return FALSE; + if (bfd_is_thin_archive (arch)) + continue; if (bfd_seek (current, (file_ptr) 0, SEEK_SET) != 0) goto input_err; + while (remaining) { unsigned int amt = DEFAULT_BUFFERSIZE; + if (amt > remaining) amt = remaining; errno = 0; @@ -1742,9 +2032,10 @@ _bfd_write_archive_contents (bfd *arch) return FALSE; remaining -= amt; } + if ((arelt_size (current) % 2) == 1) { - if (bfd_bwrite ("\012", 1, arch) != 1) + if (bfd_bwrite (&ARFMAG[1], 1, arch) != 1) return FALSE; } } @@ -1798,19 +2089,19 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) elength += elength % 2; amt = orl_max * sizeof (struct orl); - map = bfd_malloc (amt); + map = (struct orl *) bfd_malloc (amt); if (map == NULL) goto error_return; /* We put the symbol names on the arch objalloc, and then discard them when done. */ - first_name = bfd_alloc (arch, 1); + first_name = (char *) bfd_alloc (arch, 1); if (first_name == NULL) goto error_return; /* Drop all the files called __.SYMDEF, we're going to make our own. */ - while (arch->archive_head && - strcmp (arch->archive_head->filename, "__.SYMDEF") == 0) + while (arch->archive_head + && strcmp (arch->archive_head->filename, "__.SYMDEF") == 0) arch->archive_head = arch->archive_head->archive_next; /* Map over each element. */ @@ -1836,7 +2127,7 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) if (syms_max > 0) free (syms); syms_max = storage; - syms = bfd_malloc (syms_max); + syms = (asymbol **) bfd_malloc (syms_max); if (syms == NULL) goto error_return; } @@ -1851,10 +2142,10 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) flagword flags = (syms[src_count])->flags; asection *sec = syms[src_count]->section; - if ((flags & BSF_GLOBAL || - flags & BSF_WEAK || - flags & BSF_INDIRECT || - bfd_is_com_section (sec)) + if ((flags & BSF_GLOBAL + || flags & BSF_WEAK + || flags & BSF_INDIRECT + || bfd_is_com_section (sec)) && ! bfd_is_und_section (sec)) { bfd_size_type namelen; @@ -1865,7 +2156,7 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) { orl_max *= 2; amt = orl_max * sizeof (struct orl); - new_map = bfd_realloc (map, amt); + new_map = (struct orl *) bfd_realloc (map, amt); if (new_map == NULL) goto error_return; @@ -1874,10 +2165,11 @@ _bfd_compute_and_write_armap (bfd *arch, unsigned int elength) namelen = strlen (syms[src_count]->name); amt = sizeof (char *); - map[orl_count].name = bfd_alloc (arch, amt); + map[orl_count].name = (char **) bfd_alloc (arch, amt); if (map[orl_count].name == NULL) goto error_return; - *(map[orl_count].name) = bfd_alloc (arch, namelen + 1); + *(map[orl_count].name) = (char *) bfd_alloc (arch, + namelen + 1); if (*(map[orl_count].name) == NULL) goto error_return; strcpy (*(map[orl_count].name), syms[src_count]->name); @@ -1940,20 +2232,39 @@ bsd_write_armap (bfd *arch, unsigned int count; struct ar_hdr hdr; struct stat statbuf; + long uid, gid; firstreal = mapsize + elength + sizeof (struct ar_hdr) + SARMAG; stat (arch->filename, &statbuf); + if ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0) + { + /* Remember the timestamp, to keep it holy. But fudge it a little. */ + bfd_ardata (arch)->armap_timestamp = (statbuf.st_mtime + + ARMAP_TIME_OFFSET); + uid = getuid(); + gid = getgid(); + } + else + { + /* If deterministic, we use 0 as the timestamp in the map. + Some linkers may require that the archive filesystem modification + time is less than (or near to) the archive map timestamp. Those + linkers should not be used with deterministic mode. (GNU ld and + Gold do not have this restriction.) */ + bfd_ardata (arch)->armap_timestamp = 0; + uid = 0; + gid = 0; + } + memset (&hdr, ' ', sizeof (struct ar_hdr)); memcpy (hdr.ar_name, RANLIBMAG, strlen (RANLIBMAG)); - /* Remember the timestamp, to keep it holy. But fudge it a little. */ - bfd_ardata (arch)->armap_timestamp = statbuf.st_mtime + ARMAP_TIME_OFFSET; bfd_ardata (arch)->armap_datepos = (SARMAG + offsetof (struct ar_hdr, ar_date[0])); _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld", bfd_ardata (arch)->armap_timestamp); - _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", getuid ()); - _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", getgid ()); + _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", uid); + _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", gid); _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld", mapsize); memcpy (hdr.ar_fmag, ARFMAG, 2); if (bfd_bwrite (&hdr, sizeof (struct ar_hdr), arch) @@ -2021,6 +2332,10 @@ _bfd_archive_bsd_update_armap_timestamp (bfd *arch) struct stat archstat; struct ar_hdr hdr; + /* If creating deterministic archives, just leave the timestamp as-is. */ + if ((arch->flags & BFD_DETERMINISTIC_OUTPUT) != 0) + return TRUE; + /* Flush writes, get last-write timestamp from file, and compare it to the timestamp IN the file. */ bfd_flush (arch); @@ -2031,7 +2346,7 @@ _bfd_archive_bsd_update_armap_timestamp (bfd *arch) /* Can't read mod time for some reason. */ return TRUE; } - if (archstat.st_mtime <= bfd_ardata (arch)->armap_timestamp) + if (((long) archstat.st_mtime) <= bfd_ardata (arch)->armap_timestamp) /* OK by the linker's rules. */ return TRUE; @@ -2105,7 +2420,8 @@ coff_write_armap (bfd *arch, _bfd_ar_spacepad (hdr.ar_size, sizeof (hdr.ar_size), "%-10ld", mapsize); _bfd_ar_spacepad (hdr.ar_date, sizeof (hdr.ar_date), "%ld", - time (NULL)); + ((arch->flags & BFD_DETERMINISTIC_OUTPUT) == 0 + ? time (NULL) : 0)); /* This, at least, is what Intel coff sets the values to. */ _bfd_ar_spacepad (hdr.ar_uid, sizeof (hdr.ar_uid), "%ld", 0); _bfd_ar_spacepad (hdr.ar_gid, sizeof (hdr.ar_gid), "%ld", 0); @@ -2139,10 +2455,14 @@ coff_write_armap (bfd *arch, return FALSE; count++; } - /* Add size of this archive entry. */ - 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; + archive_member_file_ptr += sizeof (struct ar_hdr); + if (! bfd_is_thin_archive (arch)) + { + /* Add size of this archive entry. */ + archive_member_file_ptr += arelt_size (current); + /* Remember about the even alignment. */ + archive_member_file_ptr += archive_member_file_ptr % 2; + } current = current->archive_next; } diff --git a/bfd/archive64.c b/bfd/archive64.c index 24ba424..0a1f6ed 100644 --- a/bfd/archive64.c +++ b/bfd/archive64.c @@ -1,5 +1,5 @@ /* MIPS-specific support for 64-bit ELF - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2007 + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. Ian Lance Taylor, Cygnus Support Linker support added by Mark Mitchell, CodeSourcery, LLC. @@ -95,13 +95,13 @@ bfd_elf64_archive_slurp_armap (bfd *abfd) ptrsize = 8 * nsymz; amt = carsym_size + stringsize + 1; - ardata->symdefs = bfd_zalloc (abfd, amt); + ardata->symdefs = (struct carsym *) bfd_zalloc (abfd, amt); if (ardata->symdefs == NULL) return FALSE; carsyms = ardata->symdefs; stringbase = ((char *) ardata->symdefs) + carsym_size; - raw_armap = bfd_alloc (abfd, ptrsize); + raw_armap = (bfd_byte *) bfd_alloc (abfd, ptrsize); if (raw_armap == NULL) goto release_symdefs; diff --git a/bfd/archures.c b/bfd/archures.c index 67d1b5c..df73b3f 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Hacked by John Gilmore and Steve Chamberlain of Cygnus Support. @@ -101,6 +101,9 @@ DESCRIPTION .#define bfd_mach_mcf_isa_c 26 .#define bfd_mach_mcf_isa_c_mac 27 .#define bfd_mach_mcf_isa_c_emac 28 +.#define bfd_mach_mcf_isa_c_nodiv 29 +.#define bfd_mach_mcf_isa_c_nodiv_mac 30 +.#define bfd_mach_mcf_isa_c_nodiv_emac 31 . bfd_arch_vax, {* DEC Vax *} . bfd_arch_i960, {* Intel 960 *} . {* The order of the following is important. @@ -164,9 +167,15 @@ DESCRIPTION .#define bfd_mach_mips9000 9000 .#define bfd_mach_mips10000 10000 .#define bfd_mach_mips12000 12000 +.#define bfd_mach_mips14000 14000 +.#define bfd_mach_mips16000 16000 .#define bfd_mach_mips16 16 .#define bfd_mach_mips5 5 +.#define bfd_mach_mips_loongson_2e 3001 +.#define bfd_mach_mips_loongson_2f 3002 .#define bfd_mach_mips_sb1 12310201 {* octal 'SB', 01 *} +.#define bfd_mach_mips_octeon 6501 +.#define bfd_mach_mips_xlr 887682 {* decimal 'XLR' *} .#define bfd_mach_mipsisa32 32 .#define bfd_mach_mipsisa32r2 33 .#define bfd_mach_mipsisa64 64 @@ -177,6 +186,9 @@ DESCRIPTION .#define bfd_mach_i386_i386_intel_syntax 3 .#define bfd_mach_x86_64 64 .#define bfd_mach_x86_64_intel_syntax 65 +. bfd_arch_l1om, {* Intel L1OM *} +.#define bfd_mach_l1om 66 +.#define bfd_mach_l1om_intel_syntax 67 . bfd_arch_we32k, {* AT&T WE32xxx *} . bfd_arch_tahoe, {* CCI/Harris Tahoe *} . bfd_arch_i860, {* Intel 860 *} @@ -195,11 +207,13 @@ DESCRIPTION .#define bfd_mach_h8300sx 6 .#define bfd_mach_h8300sxn 7 . bfd_arch_pdp11, {* DEC PDP-11 *} +. bfd_arch_plugin, . 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_405 405 .#define bfd_mach_ppc_505 505 .#define bfd_mach_ppc_601 601 .#define bfd_mach_ppc_602 602 @@ -215,6 +229,7 @@ DESCRIPTION .#define bfd_mach_ppc_rs64iii 643 .#define bfd_mach_ppc_7400 7400 .#define bfd_mach_ppc_e500 500 +.#define bfd_mach_ppc_e500mc 5001 . bfd_arch_rs6000, {* IBM RS/6000 *} .#define bfd_mach_rs6k 6000 .#define bfd_mach_rs6k_rs1 6001 @@ -321,10 +336,13 @@ DESCRIPTION .#define bfd_mach_frvtomcat 499 {* fr500 prototype *} .#define bfd_mach_fr500 500 .#define bfd_mach_fr550 550 +. bfd_arch_moxie, {* The moxie processor *} +.#define bfd_mach_moxie 1 . bfd_arch_mcore, . bfd_arch_mep, .#define bfd_mach_mep 1 .#define bfd_mach_mep_h1 0x6831 +.#define bfd_mach_mep_c5 0x6335 . bfd_arch_ia64, {* HP/Intel ia64 *} .#define bfd_mach_ia64_elf64 64 .#define bfd_mach_ia64_elf32 32 @@ -342,9 +360,13 @@ DESCRIPTION . bfd_arch_avr, {* Atmel AVR microcontrollers. *} .#define bfd_mach_avr1 1 .#define bfd_mach_avr2 2 +.#define bfd_mach_avr25 25 .#define bfd_mach_avr3 3 +.#define bfd_mach_avr31 31 +.#define bfd_mach_avr35 35 .#define bfd_mach_avr4 4 .#define bfd_mach_avr5 5 +.#define bfd_mach_avr51 51 .#define bfd_mach_avr6 6 . bfd_arch_bfin, {* ADI Blackfin *} .#define bfd_mach_bfin 1 @@ -362,6 +384,8 @@ DESCRIPTION .#define bfd_mach_s390_31 31 .#define bfd_mach_s390_64 64 . bfd_arch_score, {* Sunplus score *} +.#define bfd_mach_score3 3 +.#define bfd_mach_score7 7 . bfd_arch_openrisc, {* OpenRISC *} . bfd_arch_mmix, {* Donald Knuth's educational processor. *} . bfd_arch_xstormy16, @@ -396,6 +420,9 @@ DESCRIPTION .#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_lm32, {* Lattice Mico32 *} +.#define bfd_mach_lm32 1 +. bfd_arch_microblaze,{* Xilinx MicroBlaze. *} . bfd_arch_last . }; */ @@ -458,6 +485,8 @@ extern const bfd_arch_info_type bfd_i960_arch; extern const bfd_arch_info_type bfd_ia64_arch; extern const bfd_arch_info_type bfd_ip2k_arch; extern const bfd_arch_info_type bfd_iq2000_arch; +extern const bfd_arch_info_type bfd_l1om_arch; +extern const bfd_arch_info_type bfd_lm32_arch; extern const bfd_arch_info_type bfd_m32c_arch; extern const bfd_arch_info_type bfd_m32r_arch; extern const bfd_arch_info_type bfd_m68hc11_arch; @@ -468,9 +497,11 @@ 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_microblaze_arch; extern const bfd_arch_info_type bfd_mmix_arch; extern const bfd_arch_info_type bfd_mn10200_arch; extern const bfd_arch_info_type bfd_mn10300_arch; +extern const bfd_arch_info_type bfd_moxie_arch; extern const bfd_arch_info_type bfd_msp430_arch; extern const bfd_arch_info_type bfd_mt_arch; extern const bfd_arch_info_type bfd_ns32k_arch; @@ -478,6 +509,7 @@ extern const bfd_arch_info_type bfd_openrisc_arch; extern const bfd_arch_info_type bfd_or32_arch; extern const bfd_arch_info_type bfd_pdp11_arch; extern const bfd_arch_info_type bfd_pj_arch; +extern const bfd_arch_info_type bfd_plugin_arch; 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; @@ -492,8 +524,8 @@ extern const bfd_arch_info_type bfd_tic54x_arch; extern const bfd_arch_info_type bfd_tic80_arch; extern const bfd_arch_info_type bfd_v850_arch; extern const bfd_arch_info_type bfd_vax_arch; -extern const bfd_arch_info_type bfd_we32k_arch; extern const bfd_arch_info_type bfd_w65_arch; +extern const bfd_arch_info_type bfd_we32k_arch; extern const bfd_arch_info_type bfd_xstormy16_arch; extern const bfd_arch_info_type bfd_xtensa_arch; extern const bfd_arch_info_type bfd_xc16x_arch; @@ -529,6 +561,8 @@ static const bfd_arch_info_type * const bfd_archures_list[] = &bfd_ia64_arch, &bfd_ip2k_arch, &bfd_iq2000_arch, + &bfd_l1om_arch, + &bfd_lm32_arch, &bfd_m32c_arch, &bfd_m32r_arch, &bfd_m68hc11_arch, @@ -538,12 +572,14 @@ static const bfd_arch_info_type * const bfd_archures_list[] = &bfd_maxq_arch, &bfd_mcore_arch, &bfd_mep_arch, + &bfd_microblaze_arch, &bfd_mips_arch, &bfd_mmix_arch, &bfd_mn10200_arch, &bfd_mn10300_arch, - &bfd_mt_arch, + &bfd_moxie_arch, &bfd_msp430_arch, + &bfd_mt_arch, &bfd_ns32k_arch, &bfd_openrisc_arch, &bfd_or32_arch, @@ -655,7 +691,7 @@ bfd_arch_list (void) } amt = (vec_length + 1) * sizeof (char **); - name_list = bfd_malloc (amt); + name_list = (const char **) bfd_malloc (amt); if (name_list == NULL) return NULL; diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h index 2e70a73..516102e 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, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -46,9 +46,8 @@ extern "C" { /* 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) + is error prone, so using this macro is safer. */ +#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1) /* 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 @@ -67,6 +66,8 @@ extern "C" { #define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2)) +#define BFD_SUPPORTS_PLUGINS @supports_plugins@ + /* 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. */ @@ -77,7 +78,6 @@ extern "C" { #define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@ #define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@ -#define BFD_HOST_LONG_LONG @BFD_HOST_LONG_LONG@ #if @BFD_HOST_64_BIT_DEFINED@ #define BFD_HOST_64_BIT @BFD_HOST_64_BIT@ #define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@ @@ -130,21 +130,17 @@ typedef BFD_HOST_64_BIT bfd_signed_vma; typedef BFD_HOST_U_64_BIT bfd_size_type; typedef BFD_HOST_U_64_BIT symvalue; -#ifndef fprintf_vma #if BFD_HOST_64BIT_LONG -#define sprintf_vma(s,x) sprintf (s, "%016lx", x) -#define fprintf_vma(f,x) fprintf (f, "%016lx", x) -#elif BFD_HOST_64BIT_LONG_LONG -#define sprintf_vma(s,x) sprintf (s, "%016llx", x) -#define fprintf_vma(f,x) fprintf (f, "%016llx", x) +#define BFD_VMA_FMT "l" +#elif defined (__MSVCRT__) +#define BFD_VMA_FMT "I64" #else -#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff))) -#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff)) -#define fprintf_vma(s,x) \ - fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) -#define sprintf_vma(s,x) \ - sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) +#define BFD_VMA_FMT "ll" #endif + +#ifndef fprintf_vma +#define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x) +#define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x) #endif #else /* not BFD64 */ @@ -164,8 +160,9 @@ typedef unsigned long symvalue; typedef unsigned long bfd_size_type; /* Print a bfd_vma x on stream s. */ -#define fprintf_vma(s,x) fprintf (s, "%08lx", x) -#define sprintf_vma(s,x) sprintf (s, "%08lx", x) +#define BFD_VMA_FMT "l" +#define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x) +#define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x) #endif /* not BFD64 */ @@ -206,70 +203,6 @@ typedef enum bfd_format bfd_type_end /* Marks the end; don't use it! */ } bfd_format; - -/* Values that may appear in the flags field of a BFD. These also - appear in the object_flags field of the bfd_target structure, where - they indicate the set of flags used by that backend (not all flags - are meaningful for all object file formats) (FIXME: at the moment, - the object_flags values have mostly just been copied from backend - to another, and are not necessarily correct). */ - -/* No flags. */ -#define BFD_NO_FLAGS 0x00 - -/* BFD contains relocation entries. */ -#define HAS_RELOC 0x01 - -/* BFD is directly executable. */ -#define EXEC_P 0x02 - -/* BFD has line number information (basically used for F_LNNO in a - COFF header). */ -#define HAS_LINENO 0x04 - -/* BFD has debugging information. */ -#define HAS_DEBUG 0x08 - -/* BFD has symbols. */ -#define HAS_SYMS 0x10 - -/* BFD has local symbols (basically used for F_LSYMS in a COFF - header). */ -#define HAS_LOCALS 0x20 - -/* BFD is a dynamic object. */ -#define DYNAMIC 0x40 - -/* Text section is write protected (if D_PAGED is not set, this is - like an a.out NMAGIC file) (the linker sets this by default, but - clears it for -r or -N). */ -#define WP_TEXT 0x80 - -/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the - linker sets this by default, but clears it for -r or -n or -N). */ -#define D_PAGED 0x100 - -/* BFD is relaxable (this means that bfd_relax_section may be able to - do something) (sometimes bfd_relax_section can do something even if - this is not set). */ -#define BFD_IS_RELAXABLE 0x200 - -/* This may be set before writing out a BFD to request using a - traditional format. For example, this is used to request that when - writing out an a.out object the symbols not be hashed to eliminate - duplicates. */ -#define BFD_TRADITIONAL_FORMAT 0x400 - -/* This flag indicates that the BFD contents are actually cached in - memory. If this is set, iostream points to a bfd_in_memory struct. */ -#define BFD_IN_MEMORY 0x800 - -/* The sections in this BFD specify a memory page. */ -#define HAS_LOAD_PAGE 0x1000 - -/* This BFD has been created by the linker and doesn't correspond - to any input file. */ -#define BFD_LINKER_CREATED 0x2000 /* Symbols and relocation. */ @@ -292,7 +225,10 @@ typedef const struct reloc_howto_struct reloc_howto_type; #define bfd_asymbol_name(x) ((x)->name) /*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/ #define bfd_asymbol_bfd(x) ((x)->the_bfd) -#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour) +#define bfd_asymbol_flavour(x) \ + (((x)->flags & BSF_SYNTHETIC) != 0 \ + ? bfd_target_unknown_flavour \ + : bfd_asymbol_bfd (x)->xvec->flavour) /* A canonical archive symbol. */ /* This is a type pun with struct ranlib on purpose! */ @@ -464,6 +400,10 @@ extern struct bfd_hash_entry *bfd_hash_lookup (struct bfd_hash_table *, const char *, bfd_boolean create, bfd_boolean copy); +/* Insert an entry in a hash table. */ +extern struct bfd_hash_entry *bfd_hash_insert + (struct bfd_hash_table *, const char *, unsigned long); + /* Replace an entry in a hash table. */ extern void bfd_hash_replace (struct bfd_hash_table *, struct bfd_hash_entry *old, @@ -556,6 +496,7 @@ extern void warn_deprecated (const char *, const char *, int, const char *); #define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags) #define bfd_my_archive(abfd) ((abfd)->my_archive) #define bfd_has_map(abfd) ((abfd)->has_armap) +#define bfd_is_thin_archive(abfd) ((abfd)->is_thin_archive) #define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types) #define bfd_usrdata(abfd) ((abfd)->usrdata) @@ -768,10 +709,16 @@ extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **); +extern void bfd_elf_m68k_set_target_options (struct bfd_link_info *, int); + extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **); +extern bfd_boolean bfd_cr16_elf32_create_embedded_relocs + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, + char **); + /* SunOS shared library support routines for the linker. */ extern struct bfd_link_needed_list *bfd_sunos_get_needed_list @@ -820,6 +767,10 @@ extern bfd_boolean bfd_get_file_window /* XCOFF support routines for the linker. */ +extern bfd_boolean bfd_xcoff_split_import_path + (bfd *, const char *, const char **, const char **); +extern bfd_boolean bfd_xcoff_set_archive_import_path + (struct bfd_link_info *, bfd *, const char *); extern bfd_boolean bfd_xcoff_link_record_set (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type); extern bfd_boolean bfd_xcoff_import_symbol @@ -834,7 +785,7 @@ extern bfd_boolean bfd_xcoff_record_link_assignment extern bfd_boolean bfd_xcoff_size_dynamic_sections (bfd *, struct bfd_link_info *, const char *, const char *, unsigned long, unsigned long, unsigned long, bfd_boolean, - int, bfd_boolean, bfd_boolean, struct bfd_section **, bfd_boolean); + int, bfd_boolean, unsigned int, struct bfd_section **, bfd_boolean); extern bfd_boolean bfd_xcoff_link_generate_rtinit (bfd *, const char *, const char *, bfd_boolean); @@ -876,6 +827,9 @@ extern void bfd_elf32_arm_init_maps extern void bfd_elf32_arm_set_vfp11_fix (bfd *, struct bfd_link_info *); +extern void bfd_elf32_arm_set_cortex_a8_fix + (bfd *, struct bfd_link_info *); + extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan (bfd *, struct bfd_link_info *); @@ -911,7 +865,7 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation void bfd_elf32_arm_set_target_relocs (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix, - int, int); + int, int, int, int); extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking (bfd *, struct bfd_link_info *); @@ -939,6 +893,21 @@ extern bfd_boolean bfd_arm_update_notes extern unsigned int bfd_arm_get_mach_from_notes (bfd *, const char *); +/* ARM stub generation support. Called from the linker. */ +extern int elf32_arm_setup_section_lists + (bfd *, struct bfd_link_info *); +extern void elf32_arm_next_input_section + (struct bfd_link_info *, struct bfd_section *); +extern bfd_boolean elf32_arm_size_stubs + (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma, + struct bfd_section * (*) (const char *, struct bfd_section *), void (*) (void)); +extern bfd_boolean elf32_arm_build_stubs + (struct bfd_link_info *); + +/* ARM unwind section editing support. */ +extern bfd_boolean elf32_arm_fix_exidx_coverage + (struct bfd_section **, unsigned int, struct bfd_link_info *); + /* TI COFF load page support. */ extern void bfd_ticoff_set_section_load_page (struct bfd_section *, int); diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h index 317d32e..40d3b7a 100644 --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -2,13 +2,13 @@ generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c", "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c", "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c", - "linker.c" and "simple.c". + "linker.c", "simple.c" and "compress.c". Run "make headers" in your build bfd/ to regenerate. */ /* 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, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -53,9 +53,8 @@ extern "C" { /* 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) + is error prone, so using this macro is safer. */ +#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1) /* 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 @@ -74,6 +73,8 @@ extern "C" { #define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2)) +#define BFD_SUPPORTS_PLUGINS @supports_plugins@ + /* 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. */ @@ -84,7 +85,6 @@ extern "C" { #define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@ #define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@ -#define BFD_HOST_LONG_LONG @BFD_HOST_LONG_LONG@ #if @BFD_HOST_64_BIT_DEFINED@ #define BFD_HOST_64_BIT @BFD_HOST_64_BIT@ #define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@ @@ -137,21 +137,17 @@ typedef BFD_HOST_64_BIT bfd_signed_vma; typedef BFD_HOST_U_64_BIT bfd_size_type; typedef BFD_HOST_U_64_BIT symvalue; -#ifndef fprintf_vma #if BFD_HOST_64BIT_LONG -#define sprintf_vma(s,x) sprintf (s, "%016lx", x) -#define fprintf_vma(f,x) fprintf (f, "%016lx", x) -#elif BFD_HOST_64BIT_LONG_LONG -#define sprintf_vma(s,x) sprintf (s, "%016llx", x) -#define fprintf_vma(f,x) fprintf (f, "%016llx", x) +#define BFD_VMA_FMT "l" +#elif defined (__MSVCRT__) +#define BFD_VMA_FMT "I64" #else -#define _bfd_int64_low(x) ((unsigned long) (((x) & 0xffffffff))) -#define _bfd_int64_high(x) ((unsigned long) (((x) >> 32) & 0xffffffff)) -#define fprintf_vma(s,x) \ - fprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) -#define sprintf_vma(s,x) \ - sprintf ((s), "%08lx%08lx", _bfd_int64_high (x), _bfd_int64_low (x)) +#define BFD_VMA_FMT "ll" #endif + +#ifndef fprintf_vma +#define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x) +#define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x) #endif #else /* not BFD64 */ @@ -171,8 +167,9 @@ typedef unsigned long symvalue; typedef unsigned long bfd_size_type; /* Print a bfd_vma x on stream s. */ -#define fprintf_vma(s,x) fprintf (s, "%08lx", x) -#define sprintf_vma(s,x) sprintf (s, "%08lx", x) +#define BFD_VMA_FMT "l" +#define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x) +#define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x) #endif /* not BFD64 */ @@ -213,70 +210,6 @@ typedef enum bfd_format bfd_type_end /* Marks the end; don't use it! */ } bfd_format; - -/* Values that may appear in the flags field of a BFD. These also - appear in the object_flags field of the bfd_target structure, where - they indicate the set of flags used by that backend (not all flags - are meaningful for all object file formats) (FIXME: at the moment, - the object_flags values have mostly just been copied from backend - to another, and are not necessarily correct). */ - -/* No flags. */ -#define BFD_NO_FLAGS 0x00 - -/* BFD contains relocation entries. */ -#define HAS_RELOC 0x01 - -/* BFD is directly executable. */ -#define EXEC_P 0x02 - -/* BFD has line number information (basically used for F_LNNO in a - COFF header). */ -#define HAS_LINENO 0x04 - -/* BFD has debugging information. */ -#define HAS_DEBUG 0x08 - -/* BFD has symbols. */ -#define HAS_SYMS 0x10 - -/* BFD has local symbols (basically used for F_LSYMS in a COFF - header). */ -#define HAS_LOCALS 0x20 - -/* BFD is a dynamic object. */ -#define DYNAMIC 0x40 - -/* Text section is write protected (if D_PAGED is not set, this is - like an a.out NMAGIC file) (the linker sets this by default, but - clears it for -r or -N). */ -#define WP_TEXT 0x80 - -/* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the - linker sets this by default, but clears it for -r or -n or -N). */ -#define D_PAGED 0x100 - -/* BFD is relaxable (this means that bfd_relax_section may be able to - do something) (sometimes bfd_relax_section can do something even if - this is not set). */ -#define BFD_IS_RELAXABLE 0x200 - -/* This may be set before writing out a BFD to request using a - traditional format. For example, this is used to request that when - writing out an a.out object the symbols not be hashed to eliminate - duplicates. */ -#define BFD_TRADITIONAL_FORMAT 0x400 - -/* This flag indicates that the BFD contents are actually cached in - memory. If this is set, iostream points to a bfd_in_memory struct. */ -#define BFD_IN_MEMORY 0x800 - -/* The sections in this BFD specify a memory page. */ -#define HAS_LOAD_PAGE 0x1000 - -/* This BFD has been created by the linker and doesn't correspond - to any input file. */ -#define BFD_LINKER_CREATED 0x2000 /* Symbols and relocation. */ @@ -299,7 +232,10 @@ typedef const struct reloc_howto_struct reloc_howto_type; #define bfd_asymbol_name(x) ((x)->name) /*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/ #define bfd_asymbol_bfd(x) ((x)->the_bfd) -#define bfd_asymbol_flavour(x) (bfd_asymbol_bfd(x)->xvec->flavour) +#define bfd_asymbol_flavour(x) \ + (((x)->flags & BSF_SYNTHETIC) != 0 \ + ? bfd_target_unknown_flavour \ + : bfd_asymbol_bfd (x)->xvec->flavour) /* A canonical archive symbol. */ /* This is a type pun with struct ranlib on purpose! */ @@ -471,6 +407,10 @@ extern struct bfd_hash_entry *bfd_hash_lookup (struct bfd_hash_table *, const char *, bfd_boolean create, bfd_boolean copy); +/* Insert an entry in a hash table. */ +extern struct bfd_hash_entry *bfd_hash_insert + (struct bfd_hash_table *, const char *, unsigned long); + /* Replace an entry in a hash table. */ extern void bfd_hash_replace (struct bfd_hash_table *, struct bfd_hash_entry *old, @@ -563,6 +503,7 @@ extern void warn_deprecated (const char *, const char *, int, const char *); #define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags) #define bfd_my_archive(abfd) ((abfd)->my_archive) #define bfd_has_map(abfd) ((abfd)->has_armap) +#define bfd_is_thin_archive(abfd) ((abfd)->is_thin_archive) #define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types) #define bfd_usrdata(abfd) ((abfd)->usrdata) @@ -775,10 +716,16 @@ extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **); +extern void bfd_elf_m68k_set_target_options (struct bfd_link_info *, int); + extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **); +extern bfd_boolean bfd_cr16_elf32_create_embedded_relocs + (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, + char **); + /* SunOS shared library support routines for the linker. */ extern struct bfd_link_needed_list *bfd_sunos_get_needed_list @@ -827,6 +774,10 @@ extern bfd_boolean bfd_get_file_window /* XCOFF support routines for the linker. */ +extern bfd_boolean bfd_xcoff_split_import_path + (bfd *, const char *, const char **, const char **); +extern bfd_boolean bfd_xcoff_set_archive_import_path + (struct bfd_link_info *, bfd *, const char *); extern bfd_boolean bfd_xcoff_link_record_set (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type); extern bfd_boolean bfd_xcoff_import_symbol @@ -841,7 +792,7 @@ extern bfd_boolean bfd_xcoff_record_link_assignment extern bfd_boolean bfd_xcoff_size_dynamic_sections (bfd *, struct bfd_link_info *, const char *, const char *, unsigned long, unsigned long, unsigned long, bfd_boolean, - int, bfd_boolean, bfd_boolean, struct bfd_section **, bfd_boolean); + int, bfd_boolean, unsigned int, struct bfd_section **, bfd_boolean); extern bfd_boolean bfd_xcoff_link_generate_rtinit (bfd *, const char *, const char *, bfd_boolean); @@ -883,6 +834,9 @@ extern void bfd_elf32_arm_init_maps extern void bfd_elf32_arm_set_vfp11_fix (bfd *, struct bfd_link_info *); +extern void bfd_elf32_arm_set_cortex_a8_fix + (bfd *, struct bfd_link_info *); + extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan (bfd *, struct bfd_link_info *); @@ -918,7 +872,7 @@ extern bfd_boolean bfd_elf32_arm_process_before_allocation void bfd_elf32_arm_set_target_relocs (bfd *, struct bfd_link_info *, int, char *, int, int, bfd_arm_vfp11_fix, - int, int); + int, int, int, int); extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking (bfd *, struct bfd_link_info *); @@ -946,6 +900,21 @@ extern bfd_boolean bfd_arm_update_notes extern unsigned int bfd_arm_get_mach_from_notes (bfd *, const char *); +/* ARM stub generation support. Called from the linker. */ +extern int elf32_arm_setup_section_lists + (bfd *, struct bfd_link_info *); +extern void elf32_arm_next_input_section + (struct bfd_link_info *, struct bfd_section *); +extern bfd_boolean elf32_arm_size_stubs + (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma, + struct bfd_section * (*) (const char *, struct bfd_section *), void (*) (void)); +extern bfd_boolean elf32_arm_build_stubs + (struct bfd_link_info *); + +/* ARM unwind section editing support. */ +extern bfd_boolean elf32_arm_fix_exidx_coverage + (struct bfd_section **, unsigned int, struct bfd_link_info *); + /* TI COFF load page support. */ extern void bfd_ticoff_set_section_load_page (struct bfd_section *, int); @@ -1153,6 +1122,9 @@ long bfd_get_mtime (bfd *abfd); file_ptr bfd_get_size (bfd *abfd); +void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); + /* Extracted from bfdwin.c. */ /* Extracted from section.c. */ typedef struct bfd_section @@ -1273,7 +1245,7 @@ typedef struct bfd_section /* If SEC_LINK_ONCE is set, this bitfield describes how the linker should handle duplicate sections. */ -#define SEC_LINK_DUPLICATES 0x40000 +#define SEC_LINK_DUPLICATES 0xc0000 /* This value for SEC_LINK_DUPLICATES means that duplicate sections with the same name should simply be discarded. */ @@ -1282,11 +1254,11 @@ typedef struct bfd_section /* 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 +#define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000 /* 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 +#define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000 /* This value for SEC_LINK_DUPLICATES means that the linker should warn if any duplicate sections contain different @@ -1298,28 +1270,28 @@ typedef struct bfd_section 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 +#define SEC_LINKER_CREATED 0x100000 /* 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 +#define SEC_KEEP 0x200000 /* This section contains "short" data, and should be placed "near" the GP. */ -#define SEC_SMALL_DATA 0x800000 +#define SEC_SMALL_DATA 0x400000 /* Attempt to merge identical entities in the section. Entity size is given in the entsize field. */ -#define SEC_MERGE 0x1000000 +#define SEC_MERGE 0x800000 /* 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 +#define SEC_STRINGS 0x1000000 /* This section contains data about section groups. */ -#define SEC_GROUP 0x4000000 +#define SEC_GROUP 0x2000000 /* The section is a COFF shared library section. This flag is only for the linker. If this type of section appears in @@ -1330,23 +1302,27 @@ typedef struct bfd_section 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 +#define SEC_COFF_SHARED_LIBRARY 0x4000000 /* This section contains data which may be shared with other executables or shared objects. This is for COFF only. */ -#define SEC_COFF_SHARED 0x20000000 +#define SEC_COFF_SHARED 0x8000000 /* 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 +#define SEC_TIC54X_BLOCK 0x10000000 /* 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 +#define SEC_TIC54X_CLINK 0x20000000 + + /* Indicate that section has the no read flag set. This happens + when memory read flag isn't set. */ +#define SEC_COFF_NOREAD 0x40000000 /* End of section flags. */ @@ -1362,9 +1338,8 @@ typedef struct bfd_section output sections that have an input section. */ unsigned int linker_has_input : 1; - /* Mark flags used by some linker backends for garbage collection. */ + /* Mark flag 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. */ @@ -1388,6 +1363,9 @@ typedef struct bfd_section /* Nonzero if this section has TLS related relocations. */ unsigned int has_tls_reloc:1; + /* Nonzero if this section has a call to __tls_get_addr. */ + unsigned int has_tls_get_addr_call:1; + /* Nonzero if this section has a gp reloc. */ unsigned int has_gp_reloc:1; @@ -1418,15 +1396,22 @@ typedef struct bfd_section 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. */ + octets. This field should be set for any section whose size is + changed by linker relaxation. It is required 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; + /* Relaxation table. */ + struct relax_table *relax; + + /* Count of used relaxation table entries. */ + int relax_count; + + /* 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 @@ -1516,6 +1501,17 @@ typedef struct bfd_section } map_head, map_tail; } asection; +/* Relax table contains information about instructions which can + be removed by relaxation -- replacing a long address with a + short address. */ +struct relax_table { + /* Address where bytes may be deleted. */ + bfd_vma addr; + + /* Number of bytes to be deleted. */ + int size; +}; + /* 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 @@ -1642,17 +1638,17 @@ extern asection bfd_ind_section; /* 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, \ + /* linker_mark, linker_has_input, gc_mark, */ \ + 0, 0, 1, \ \ /* 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, \ + /* has_tls_get_addr_call, has_gp_reloc, need_finalize_relax, */ \ + 0, 0, 0, \ \ - /* vma, lma, size, rawsize */ \ - 0, 0, 0, 0, \ + /* reloc_done, vma, lma, size, rawsize, relax, relax_count, */ \ + 0, 0, 0, 0, 0, 0, 0, \ \ /* output_offset, output_section, alignment_power, */ \ 0, (struct bfd_section *) &SEC, 0, \ @@ -1772,6 +1768,9 @@ enum bfd_architecture #define bfd_mach_mcf_isa_c 26 #define bfd_mach_mcf_isa_c_mac 27 #define bfd_mach_mcf_isa_c_emac 28 +#define bfd_mach_mcf_isa_c_nodiv 29 +#define bfd_mach_mcf_isa_c_nodiv_mac 30 +#define bfd_mach_mcf_isa_c_nodiv_emac 31 bfd_arch_vax, /* DEC Vax */ bfd_arch_i960, /* Intel 960 */ /* The order of the following is important. @@ -1835,9 +1834,15 @@ enum bfd_architecture #define bfd_mach_mips9000 9000 #define bfd_mach_mips10000 10000 #define bfd_mach_mips12000 12000 +#define bfd_mach_mips14000 14000 +#define bfd_mach_mips16000 16000 #define bfd_mach_mips16 16 #define bfd_mach_mips5 5 +#define bfd_mach_mips_loongson_2e 3001 +#define bfd_mach_mips_loongson_2f 3002 #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ +#define bfd_mach_mips_octeon 6501 +#define bfd_mach_mips_xlr 887682 /* decimal 'XLR' */ #define bfd_mach_mipsisa32 32 #define bfd_mach_mipsisa32r2 33 #define bfd_mach_mipsisa64 64 @@ -1848,6 +1853,9 @@ enum bfd_architecture #define bfd_mach_i386_i386_intel_syntax 3 #define bfd_mach_x86_64 64 #define bfd_mach_x86_64_intel_syntax 65 + bfd_arch_l1om, /* Intel L1OM */ +#define bfd_mach_l1om 66 +#define bfd_mach_l1om_intel_syntax 67 bfd_arch_we32k, /* AT&T WE32xxx */ bfd_arch_tahoe, /* CCI/Harris Tahoe */ bfd_arch_i860, /* Intel 860 */ @@ -1866,11 +1874,13 @@ enum bfd_architecture #define bfd_mach_h8300sx 6 #define bfd_mach_h8300sxn 7 bfd_arch_pdp11, /* DEC PDP-11 */ + bfd_arch_plugin, 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_405 405 #define bfd_mach_ppc_505 505 #define bfd_mach_ppc_601 601 #define bfd_mach_ppc_602 602 @@ -1886,6 +1896,7 @@ enum bfd_architecture #define bfd_mach_ppc_rs64iii 643 #define bfd_mach_ppc_7400 7400 #define bfd_mach_ppc_e500 500 +#define bfd_mach_ppc_e500mc 5001 bfd_arch_rs6000, /* IBM RS/6000 */ #define bfd_mach_rs6k 6000 #define bfd_mach_rs6k_rs1 6001 @@ -1992,10 +2003,13 @@ enum bfd_architecture #define bfd_mach_frvtomcat 499 /* fr500 prototype */ #define bfd_mach_fr500 500 #define bfd_mach_fr550 550 + bfd_arch_moxie, /* The moxie processor */ +#define bfd_mach_moxie 1 bfd_arch_mcore, bfd_arch_mep, #define bfd_mach_mep 1 #define bfd_mach_mep_h1 0x6831 +#define bfd_mach_mep_c5 0x6335 bfd_arch_ia64, /* HP/Intel ia64 */ #define bfd_mach_ia64_elf64 64 #define bfd_mach_ia64_elf32 32 @@ -2013,9 +2027,13 @@ enum bfd_architecture bfd_arch_avr, /* Atmel AVR microcontrollers. */ #define bfd_mach_avr1 1 #define bfd_mach_avr2 2 +#define bfd_mach_avr25 25 #define bfd_mach_avr3 3 +#define bfd_mach_avr31 31 +#define bfd_mach_avr35 35 #define bfd_mach_avr4 4 #define bfd_mach_avr5 5 +#define bfd_mach_avr51 51 #define bfd_mach_avr6 6 bfd_arch_bfin, /* ADI Blackfin */ #define bfd_mach_bfin 1 @@ -2033,6 +2051,8 @@ enum bfd_architecture #define bfd_mach_s390_31 31 #define bfd_mach_s390_64 64 bfd_arch_score, /* Sunplus score */ +#define bfd_mach_score3 3 +#define bfd_mach_score7 7 bfd_arch_openrisc, /* OpenRISC */ bfd_arch_mmix, /* Donald Knuth's educational processor. */ bfd_arch_xstormy16, @@ -2067,6 +2087,9 @@ enum bfd_architecture #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_lm32, /* Lattice Mico32 */ +#define bfd_mach_lm32 1 + bfd_arch_microblaze,/* Xilinx MicroBlaze. */ bfd_arch_last }; @@ -2393,6 +2416,21 @@ The 24-bit relocation is used in some Intel 960 configurations. */ BFD_RELOC_68K_GLOB_DAT, BFD_RELOC_68K_JMP_SLOT, BFD_RELOC_68K_RELATIVE, + BFD_RELOC_68K_TLS_GD32, + BFD_RELOC_68K_TLS_GD16, + BFD_RELOC_68K_TLS_GD8, + BFD_RELOC_68K_TLS_LDM32, + BFD_RELOC_68K_TLS_LDM16, + BFD_RELOC_68K_TLS_LDM8, + BFD_RELOC_68K_TLS_LDO32, + BFD_RELOC_68K_TLS_LDO16, + BFD_RELOC_68K_TLS_LDO8, + BFD_RELOC_68K_TLS_IE32, + BFD_RELOC_68K_TLS_IE16, + BFD_RELOC_68K_TLS_IE8, + BFD_RELOC_68K_TLS_LE32, + BFD_RELOC_68K_TLS_LE16, + BFD_RELOC_68K_TLS_LE8, /* Linkage-table relative. */ BFD_RELOC_32_BASEREL, @@ -2450,6 +2488,11 @@ relocation types already defined. */ BFD_RELOC_SPARC_UA16, BFD_RELOC_SPARC_UA32, BFD_RELOC_SPARC_UA64, + BFD_RELOC_SPARC_GOTDATA_HIX22, + BFD_RELOC_SPARC_GOTDATA_LOX10, + BFD_RELOC_SPARC_GOTDATA_OP_HIX22, + BFD_RELOC_SPARC_GOTDATA_OP_LOX10, + BFD_RELOC_SPARC_GOTDATA_OP, /* I think these are specific to SPARC a.out (e.g., Sun 4). */ BFD_RELOC_SPARC_BASE13, @@ -2525,6 +2568,7 @@ relocation types already defined. */ BFD_RELOC_SPU_HI16, BFD_RELOC_SPU_PPU32, BFD_RELOC_SPU_PPU64, + BFD_RELOC_SPU_ADD_PIC, /* Alpha ECOFF and ELF relocations. Some of these treat the symbol or "addend" in some special way. @@ -2595,6 +2639,22 @@ share a common GP, and the target address is adjusted for STO_ALPHA_STD_GPLOAD. */ BFD_RELOC_ALPHA_BRSGP, +/* The NOP relocation outputs a NOP if the longword displacement +between two procedure entry points is < 2^21. */ + BFD_RELOC_ALPHA_NOP, + +/* The BSR relocation outputs a BSR if the longword displacement +between two procedure entry points is < 2^21. */ + BFD_RELOC_ALPHA_BSR, + +/* The LDA relocation outputs a LDA if the longword displacement +between two procedure entry points is < 2^16. */ + BFD_RELOC_ALPHA_LDA, + +/* The BOH relocation outputs a BSR if the longword displacement +between two procedure entry points is < 2^21, or else a hint. */ + BFD_RELOC_ALPHA_BOH, + /* Alpha thread-local storage relocations. */ BFD_RELOC_ALPHA_TLSGD, BFD_RELOC_ALPHA_TLSLDM, @@ -2641,6 +2701,11 @@ to compensate for the borrow when the low bits are added. */ /* Low 16 bits of pc-relative value */ BFD_RELOC_LO16_PCREL, +/* Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of +16-bit immediate fields */ + BFD_RELOC_MIPS16_GOT16, + BFD_RELOC_MIPS16_CALL16, + /* MIPS16 high 16 bits of 32-bit value. */ BFD_RELOC_MIPS16_HI16, @@ -2693,11 +2758,15 @@ to compensate for the borrow when the low bits are added. */ BFD_RELOC_MIPS_TLS_TPREL_LO16, -/* MIPS ELF relocations (VxWorks extensions). */ +/* MIPS ELF relocations (VxWorks and PLT extensions). */ BFD_RELOC_MIPS_COPY, BFD_RELOC_MIPS_JUMP_SLOT, +/* Moxie ELF relocations. */ + BFD_RELOC_MOXIE_10_PCREL, + + /* Fujitsu Frv Relocations. */ BFD_RELOC_FRV_LABEL16, BFD_RELOC_FRV_LABEL24, @@ -2767,6 +2836,16 @@ in the instruction. */ /* Adjust by program base. */ BFD_RELOC_MN10300_RELATIVE, +/* Together with another reloc targeted at the same location, +allows for a value that is the difference of two symbols +in the same section. */ + BFD_RELOC_MN10300_SYM_DIFF, + +/* The addend of this reloc is an alignment power that must +be honoured at the offset's location, regardless of linker +relaxation. */ + BFD_RELOC_MN10300_ALIGN, + /* i386/elf relocations */ BFD_RELOC_386_GOT32, @@ -2792,6 +2871,7 @@ in the instruction. */ BFD_RELOC_386_TLS_GOTDESC, BFD_RELOC_386_TLS_DESC_CALL, BFD_RELOC_386_TLS_DESC, + BFD_RELOC_386_IRELATIVE, /* x86-64/elf relocations */ BFD_RELOC_X86_64_GOT32, @@ -2820,6 +2900,7 @@ in the instruction. */ BFD_RELOC_X86_64_GOTPC32_TLSDESC, BFD_RELOC_X86_64_TLSDESC_CALL, BFD_RELOC_X86_64_TLSDESC, + BFD_RELOC_X86_64_IRELATIVE, /* ns32k relocations */ BFD_RELOC_NS32K_IMM_8, @@ -2904,6 +2985,8 @@ in the instruction. */ /* PowerPC and PowerPC64 thread-local storage relocations. */ BFD_RELOC_PPC_TLS, + BFD_RELOC_PPC_TLSGD, + BFD_RELOC_PPC_TLSLD, BFD_RELOC_PPC_DTPMOD, BFD_RELOC_PPC_TPREL16, BFD_RELOC_PPC_TPREL16_LO, @@ -3067,6 +3150,9 @@ pc-relative or some form of GOT-indirect relocation. */ BFD_RELOC_ARM_LDC_SB_G1, BFD_RELOC_ARM_LDC_SB_G2, +/* Annotation of BX instructions. */ + BFD_RELOC_ARM_V4BX, + /* These relocs are only used within the ARM assembler. They are not (at present) written to any object files. */ BFD_RELOC_ARM_IMMEDIATE, @@ -3864,10 +3950,8 @@ instructions */ BFD_RELOC_390_GOTPLT20, BFD_RELOC_390_TLS_GOTIE20, -/* Score relocations */ - BFD_RELOC_SCORE_DUMMY1, - -/* Low 16 bit for load/store */ +/* Score relocations +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 */ @@ -3877,12 +3961,21 @@ instructions */ /* This is a 19-bit reloc with the right 1 bit assumed to be 0 */ BFD_RELOC_SCORE_BRANCH, +/* This is a 32-bit reloc for 48-bit instructions. */ + BFD_RELOC_SCORE_IMM30, + +/* This is a 32-bit reloc for 48-bit instructions. */ + BFD_RELOC_SCORE_IMM32, + /* 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, +/* This is a 9-bit reloc with the right 1 bit assumed to be 0 */ + BFD_RELOC_SCORE_BCMP, + /* Undocumented Score relocs */ BFD_RELOC_SCORE_GOT15, BFD_RELOC_SCORE_GOT_LO16, @@ -4141,6 +4234,12 @@ This is the 5 bits of a value. */ BFD_RELOC_CR16_DISP20, BFD_RELOC_CR16_DISP24, BFD_RELOC_CR16_DISP24a, + BFD_RELOC_CR16_SWITCH8, + BFD_RELOC_CR16_SWITCH16, + BFD_RELOC_CR16_SWITCH32, + BFD_RELOC_CR16_GOT_REGREL20, + BFD_RELOC_CR16_GOTC_REGREL20, + BFD_RELOC_CR16_GLOB_DAT, /* NS CRX Relocations. */ BFD_RELOC_CRX_REL4, @@ -4204,6 +4303,20 @@ This is the 5 bits of a value. */ /* 32-bit offset to symbol with PLT entry, relative to this relocation. */ BFD_RELOC_CRIS_32_PLT_PCREL, +/* Relocs used in TLS code for CRIS. */ + BFD_RELOC_CRIS_32_GOT_GD, + BFD_RELOC_CRIS_16_GOT_GD, + BFD_RELOC_CRIS_32_GD, + BFD_RELOC_CRIS_DTP, + BFD_RELOC_CRIS_32_DTPREL, + BFD_RELOC_CRIS_16_DTPREL, + BFD_RELOC_CRIS_32_GOT_TPREL, + BFD_RELOC_CRIS_16_GOT_TPREL, + BFD_RELOC_CRIS_32_TPREL, + BFD_RELOC_CRIS_16_TPREL, + BFD_RELOC_CRIS_DTPMOD, + BFD_RELOC_CRIS_32_IE, + /* Intel i860 Relocations. */ BFD_RELOC_860_COPY, BFD_RELOC_860_GLOB_DAT, @@ -4381,6 +4494,15 @@ internally by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND. */ BFD_RELOC_XTENSA_ASM_SIMPLIFY, +/* Xtensa TLS relocations. */ + BFD_RELOC_XTENSA_TLSDESC_FN, + BFD_RELOC_XTENSA_TLSDESC_ARG, + BFD_RELOC_XTENSA_TLS_DTPOFF, + BFD_RELOC_XTENSA_TLS_TPOFF, + BFD_RELOC_XTENSA_TLS_FUNC, + BFD_RELOC_XTENSA_TLS_ARG, + BFD_RELOC_XTENSA_TLS_CALL, + /* 8 bit signed offset in (ix+d) or (iy+d). */ BFD_RELOC_Z80_DISP8, @@ -4392,6 +4514,77 @@ BFD_RELOC_XTENSA_ASM_EXPAND. */ /* 4 bit value. */ BFD_RELOC_Z8K_IMM4L, + +/* Lattice Mico32 relocations. */ + BFD_RELOC_LM32_CALL, + BFD_RELOC_LM32_BRANCH, + BFD_RELOC_LM32_16_GOT, + BFD_RELOC_LM32_GOTOFF_HI16, + BFD_RELOC_LM32_GOTOFF_LO16, + BFD_RELOC_LM32_COPY, + BFD_RELOC_LM32_GLOB_DAT, + BFD_RELOC_LM32_JMP_SLOT, + BFD_RELOC_LM32_RELATIVE, + +/* Difference between two section addreses. Must be followed by a +BFD_RELOC_MACH_O_PAIR. */ + BFD_RELOC_MACH_O_SECTDIFF, + +/* Mach-O generic relocations. */ + BFD_RELOC_MACH_O_PAIR, + +/* This is a 32 bit reloc for the microblaze that stores the +low 16 bits of a value */ + BFD_RELOC_MICROBLAZE_32_LO, + +/* This is a 32 bit pc-relative reloc for the microblaze that +stores the low 16 bits of a value */ + BFD_RELOC_MICROBLAZE_32_LO_PCREL, + +/* This is a 32 bit reloc for the microblaze that stores a +value relative to the read-only small data area anchor */ + BFD_RELOC_MICROBLAZE_32_ROSDA, + +/* This is a 32 bit reloc for the microblaze that stores a +value relative to the read-write small data area anchor */ + BFD_RELOC_MICROBLAZE_32_RWSDA, + +/* This is a 32 bit reloc for the microblaze to handle +expressions of the form "Symbol Op Symbol" */ + BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM, + +/* This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). No relocation is +done here - only used for relaxing */ + BFD_RELOC_MICROBLAZE_64_NONE, + +/* This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). The relocation is +PC-relative GOT offset */ + BFD_RELOC_MICROBLAZE_64_GOTPC, + +/* This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). The relocation is +GOT offset */ + BFD_RELOC_MICROBLAZE_64_GOT, + +/* This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). The relocation is +PC-relative offset into PLT */ + BFD_RELOC_MICROBLAZE_64_PLT, + +/* This is a 64 bit reloc that stores the 32 bit GOT relative +value in two words (with an imm instruction). The relocation is +relative offset from _GLOBAL_OFFSET_TABLE_ */ + BFD_RELOC_MICROBLAZE_64_GOTOFF, + +/* This is a 32 bit reloc that stores the 32 bit GOT relative +value in a word. The relocation is relative offset from */ + BFD_RELOC_MICROBLAZE_32_GOTOFF, + +/* This is used to tell the dynamic linker to copy the value out of +the dynamic object into the runtime process image. */ + BFD_RELOC_MICROBLAZE_COPY, BFD_RELOC_UNUSED }; typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; reloc_howto_type *bfd_reloc_type_lookup @@ -4426,97 +4619,107 @@ typedef struct bfd_symbol symvalue value; /* Attributes of a symbol. */ -#define BSF_NO_FLAGS 0x00 +#define BSF_NO_FLAGS 0x00 /* The symbol has local scope; <> in <>. The value is the offset into the section of the data. */ -#define BSF_LOCAL 0x01 +#define BSF_LOCAL (1 << 0) /* The symbol has global scope; initialized data in <>. The value is the offset into the section of the data. */ -#define BSF_GLOBAL 0x02 +#define BSF_GLOBAL (1 << 1) /* 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: - <>, <>, <> or + <>, <>, <> or <>. */ /* The symbol is a debugging record. The value has an arbitrary meaning, unless BSF_DEBUGGING_RELOC is also set. */ -#define BSF_DEBUGGING 0x08 +#define BSF_DEBUGGING (1 << 2) /* The symbol denotes a function entry point. Used in ELF, perhaps others someday. */ -#define BSF_FUNCTION 0x10 +#define BSF_FUNCTION (1 << 3) /* Used by the linker. */ -#define BSF_KEEP 0x20 -#define BSF_KEEP_G 0x40 +#define BSF_KEEP (1 << 5) +#define BSF_KEEP_G (1 << 6) /* A weak global symbol, overridable without warnings by a regular global symbol of the same name. */ -#define BSF_WEAK 0x80 +#define BSF_WEAK (1 << 7) /* This symbol was created to point to a section, e.g. ELF's STT_SECTION symbols. */ -#define BSF_SECTION_SYM 0x100 +#define BSF_SECTION_SYM (1 << 8) /* 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 +#define BSF_OLD_COMMON (1 << 9) /* In some files the type of a symbol sometimes alters its location in an output file - ie in coff a <> symbol which is also <> 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 +#define BSF_NOT_AT_END (1 << 10) /* Signal that the symbol is the label of constructor section. */ -#define BSF_CONSTRUCTOR 0x800 +#define BSF_CONSTRUCTOR (1 << 11) /* 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 +#define BSF_WARNING (1 << 12) /* 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 +#define BSF_INDIRECT (1 << 13) /* BSF_FILE marks symbols that contain a file name. This is used for ELF STT_FILE symbols. */ -#define BSF_FILE 0x4000 +#define BSF_FILE (1 << 14) /* Symbol is from dynamic linking information. */ -#define BSF_DYNAMIC 0x8000 +#define BSF_DYNAMIC (1 << 15) /* The symbol denotes a data object. Used in ELF, and perhaps others someday. */ -#define BSF_OBJECT 0x10000 +#define BSF_OBJECT (1 << 16) /* 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 +#define BSF_DEBUGGING_RELOC (1 << 17) /* This symbol is thread local. Used in ELF. */ -#define BSF_THREAD_LOCAL 0x40000 +#define BSF_THREAD_LOCAL (1 << 18) /* This symbol represents a complex relocation expression, with the expression tree serialized in the symbol name. */ -#define BSF_RELC 0x80000 +#define BSF_RELC (1 << 19) /* This symbol represents a signed complex relocation expression, with the expression tree serialized in the symbol name. */ -#define BSF_SRELC 0x100000 +#define BSF_SRELC (1 << 20) + + /* This symbol was created by bfd_get_synthetic_symtab. */ +#define BSF_SYNTHETIC (1 << 21) + + /* This symbol is an indirect code object. Unrelated to BSF_INDIRECT. + The dynamic linker will compute the value of this symbol by + calling the function that it points to. BSF_FUNCTION must + also be also set. */ +#define BSF_GNU_INDIRECT_FUNCTION (1 << 22) + /* This symbol is a globally unique data object. The dynamic linker + will make sure that in the entire process there is just one symbol + with this name and type in use. BSF_OBJECT must also be set. */ +#define BSF_GNU_UNIQUE (1 << 23) flagword flags; @@ -4580,6 +4783,14 @@ bfd_boolean bfd_copy_private_symbol_data (ibfd, isymbol, obfd, osymbol)) /* Extracted from bfd.c. */ +enum bfd_direction + { + no_direction = 0, + read_direction = 1, + write_direction = 2, + both_direction = 3 + }; + struct bfd { /* A unique identifier of the BFD */ @@ -4596,15 +4807,6 @@ struct 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; @@ -4613,13 +4815,6 @@ struct bfd 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; @@ -4630,26 +4825,91 @@ struct bfd 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; + enum bfd_direction direction; /* Format_specific flags. */ flagword flags; + /* Values that may appear in the flags field of a BFD. These also + appear in the object_flags field of the bfd_target structure, where + they indicate the set of flags used by that backend (not all flags + are meaningful for all object file formats) (FIXME: at the moment, + the object_flags values have mostly just been copied from backend + to another, and are not necessarily correct). */ + +#define BFD_NO_FLAGS 0x00 + + /* BFD contains relocation entries. */ +#define HAS_RELOC 0x01 + + /* BFD is directly executable. */ +#define EXEC_P 0x02 + + /* BFD has line number information (basically used for F_LNNO in a + COFF header). */ +#define HAS_LINENO 0x04 + + /* BFD has debugging information. */ +#define HAS_DEBUG 0x08 + + /* BFD has symbols. */ +#define HAS_SYMS 0x10 + + /* BFD has local symbols (basically used for F_LSYMS in a COFF + header). */ +#define HAS_LOCALS 0x20 + + /* BFD is a dynamic object. */ +#define DYNAMIC 0x40 + + /* Text section is write protected (if D_PAGED is not set, this is + like an a.out NMAGIC file) (the linker sets this by default, but + clears it for -r or -N). */ +#define WP_TEXT 0x80 + + /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the + linker sets this by default, but clears it for -r or -n or -N). */ +#define D_PAGED 0x100 + + /* BFD is relaxable (this means that bfd_relax_section may be able to + do something) (sometimes bfd_relax_section can do something even if + this is not set). */ +#define BFD_IS_RELAXABLE 0x200 + + /* This may be set before writing out a BFD to request using a + traditional format. For example, this is used to request that when + writing out an a.out object the symbols not be hashed to eliminate + duplicates. */ +#define BFD_TRADITIONAL_FORMAT 0x400 + + /* This flag indicates that the BFD contents are actually cached + in memory. If this is set, iostream points to a bfd_in_memory + struct. */ +#define BFD_IN_MEMORY 0x800 + + /* The sections in this BFD specify a memory page. */ +#define HAS_LOAD_PAGE 0x1000 + + /* This BFD has been created by the linker and doesn't correspond + to any input file. */ +#define BFD_LINKER_CREATED 0x2000 + + /* This may be set before writing out a BFD to request that it + be written using values for UIDs, GIDs, timestamps, etc. that + will be consistent from run to run. */ +#define BFD_DETERMINISTIC_OUTPUT 0x4000 + /* 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; + /* The origin in the archive of the proxy entry. This will + normally be the same as origin, except for thin archives, + when it will contain the current offset of the proxy in the + thin archive rather than the offset of the bfd in its actual + container. */ + ufile_ptr proxy_origin; /* A hash table for section names. */ struct bfd_hash_table section_htab; @@ -4670,7 +4930,8 @@ struct bfd /* Used for input and output. */ unsigned int symcount; - /* Symbol table for output BFD (with symcount entries). */ + /* Symbol table for output BFD (with symcount entries). + Also used by the linker to cache input BFD symbols. */ struct bfd_symbol **outsymbols; /* Used for slurped dynamic symbol tables. */ @@ -4679,15 +4940,13 @@ struct bfd /* 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 *archive_next; /* The next BFD in the archive. */ struct bfd *archive_head; /* The first BFD in the archive. */ - bfd_boolean has_armap; + struct bfd *nested_archives; /* List of nested archive in a flattened + thin archive. */ /* A chain of BFD structures involved in a link. */ struct bfd *link_next; @@ -4710,6 +4969,7 @@ struct bfd struct ieee_data_struct *ieee_data; struct ieee_ar_data_struct *ieee_ar_data; struct srec_data_struct *srec_data; + struct verilog_data_struct *verilog_data; struct ihex_data_struct *ihex_data; struct tekhex_data_struct *tekhex_data; struct elf_obj_tdata *elf_obj_data; @@ -4730,6 +4990,7 @@ struct bfd 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 plugin_data_struct *plugin_data; struct bfd_pef_data_struct *pef_data; struct bfd_pef_xlib_data_struct *pef_xlib_data; struct bfd_sym_data_struct *sym_data; @@ -4744,6 +5005,35 @@ struct bfd struct objalloc *, but we use void * to avoid requiring the inclusion of objalloc.h. */ void *memory; + + /* Is the file descriptor being cached? That is, can it be closed as + needed, and re-opened when accessed later? */ + unsigned int cacheable : 1; + + /* 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. */ + unsigned int target_defaulted : 1; + + /* ... and here: (``once'' means at least once). */ + unsigned int opened_once : 1; + + /* Set if we have a locally maintained mtime value, rather than + getting it from the file each time. */ + unsigned int mtime_set : 1; + + /* Flag set if symbols from this BFD should not be exported. */ + unsigned int no_export : 1; + + /* Remember when output has begun, to stop strange things + from happening. */ + unsigned int output_has_begun : 1; + + /* Have archive map. */ + unsigned int has_armap : 1; + + /* Set if this is a thin archive. */ + unsigned int is_thin_archive : 1; }; typedef enum bfd_error @@ -5002,6 +5292,7 @@ enum bfd_flavour bfd_target_oasys_flavour, bfd_target_tekhex_flavour, bfd_target_srec_flavour, + bfd_target_verilog_flavour, bfd_target_ihex_flavour, bfd_target_som_flavour, bfd_target_os9k_flavour, @@ -5284,7 +5575,8 @@ typedef struct bfd_target NAME##_bfd_merge_sections, \ NAME##_bfd_is_group_section, \ NAME##_bfd_discard_group, \ - NAME##_section_already_linked \ + NAME##_section_already_linked, \ + NAME##_bfd_define_common_symbol int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); bfd_byte * (*_bfd_get_relocated_section_contents) @@ -5332,6 +5624,10 @@ typedef struct bfd_target void (*_section_already_linked) (bfd *, struct bfd_section *, struct bfd_link_info *); + /* Define a common symbol. */ + bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *, + struct bfd_link_hash_entry *); + /* Routines to handle dynamic symbols and relocs. */ #define BFD_JUMP_TABLE_DYNAMIC(NAME) \ NAME##_get_dynamic_symtab_upper_bound, \ @@ -5396,10 +5692,25 @@ void bfd_section_already_linked (bfd *abfd, asection *sec, #define bfd_section_already_linked(abfd, sec, info) \ BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) +bfd_boolean bfd_generic_define_common_symbol + (bfd *output_bfd, struct bfd_link_info *info, + struct bfd_link_hash_entry *h); + +#define bfd_define_common_symbol(output_bfd, info, h) \ + BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h)) + +struct bfd_elf_version_tree * bfd_find_version_for_sym + (struct bfd_elf_version_tree *verdefs, + const char *sym_name, bfd_boolean *hide); + /* Extracted from simple.c. */ bfd_byte *bfd_simple_get_relocated_section_contents (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table); +/* Extracted from compress.c. */ +bfd_boolean bfd_uncompress_section_contents + (bfd_byte **buffer, bfd_size_type *size); + #ifdef __cplusplus } #endif diff --git a/bfd/bfd.c b/bfd/bfd.c index 60ad118..eef9f36 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -35,6 +35,14 @@ SECTION CODE_FRAGMENT . +.enum bfd_direction +. { +. no_direction = 0, +. read_direction = 1, +. write_direction = 2, +. both_direction = 3 +. }; +. .struct bfd .{ . {* A unique identifier of the BFD *} @@ -51,15 +59,6 @@ CODE_FRAGMENT . 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; @@ -68,13 +67,6 @@ CODE_FRAGMENT . 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; . @@ -85,26 +77,91 @@ CODE_FRAGMENT . 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; +. enum bfd_direction direction; . . {* Format_specific flags. *} . flagword flags; . +. {* Values that may appear in the flags field of a BFD. These also +. appear in the object_flags field of the bfd_target structure, where +. they indicate the set of flags used by that backend (not all flags +. are meaningful for all object file formats) (FIXME: at the moment, +. the object_flags values have mostly just been copied from backend +. to another, and are not necessarily correct). *} +. +.#define BFD_NO_FLAGS 0x00 +. +. {* BFD contains relocation entries. *} +.#define HAS_RELOC 0x01 +. +. {* BFD is directly executable. *} +.#define EXEC_P 0x02 +. +. {* BFD has line number information (basically used for F_LNNO in a +. COFF header). *} +.#define HAS_LINENO 0x04 +. +. {* BFD has debugging information. *} +.#define HAS_DEBUG 0x08 +. +. {* BFD has symbols. *} +.#define HAS_SYMS 0x10 +. +. {* BFD has local symbols (basically used for F_LSYMS in a COFF +. header). *} +.#define HAS_LOCALS 0x20 +. +. {* BFD is a dynamic object. *} +.#define DYNAMIC 0x40 +. +. {* Text section is write protected (if D_PAGED is not set, this is +. like an a.out NMAGIC file) (the linker sets this by default, but +. clears it for -r or -N). *} +.#define WP_TEXT 0x80 +. +. {* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the +. linker sets this by default, but clears it for -r or -n or -N). *} +.#define D_PAGED 0x100 +. +. {* BFD is relaxable (this means that bfd_relax_section may be able to +. do something) (sometimes bfd_relax_section can do something even if +. this is not set). *} +.#define BFD_IS_RELAXABLE 0x200 +. +. {* This may be set before writing out a BFD to request using a +. traditional format. For example, this is used to request that when +. writing out an a.out object the symbols not be hashed to eliminate +. duplicates. *} +.#define BFD_TRADITIONAL_FORMAT 0x400 +. +. {* This flag indicates that the BFD contents are actually cached +. in memory. If this is set, iostream points to a bfd_in_memory +. struct. *} +.#define BFD_IN_MEMORY 0x800 +. +. {* The sections in this BFD specify a memory page. *} +.#define HAS_LOAD_PAGE 0x1000 +. +. {* This BFD has been created by the linker and doesn't correspond +. to any input file. *} +.#define BFD_LINKER_CREATED 0x2000 +. +. {* This may be set before writing out a BFD to request that it +. be written using values for UIDs, GIDs, timestamps, etc. that +. will be consistent from run to run. *} +.#define BFD_DETERMINISTIC_OUTPUT 0x4000 +. . {* 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; +. {* The origin in the archive of the proxy entry. This will +. normally be the same as origin, except for thin archives, +. when it will contain the current offset of the proxy in the +. thin archive rather than the offset of the bfd in its actual +. container. *} +. ufile_ptr proxy_origin; . . {* A hash table for section names. *} . struct bfd_hash_table section_htab; @@ -125,7 +182,8 @@ CODE_FRAGMENT . {* Used for input and output. *} . unsigned int symcount; . -. {* Symbol table for output BFD (with symcount entries). *} +. {* Symbol table for output BFD (with symcount entries). +. Also used by the linker to cache input BFD symbols. *} . struct bfd_symbol **outsymbols; . . {* Used for slurped dynamic symbol tables. *} @@ -134,15 +192,13 @@ CODE_FRAGMENT . {* 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 *archive_next; {* The next BFD in the archive. *} . struct bfd *archive_head; {* The first BFD in the archive. *} -. bfd_boolean has_armap; +. struct bfd *nested_archives; {* List of nested archive in a flattened +. thin archive. *} . . {* A chain of BFD structures involved in a link. *} . struct bfd *link_next; @@ -165,6 +221,7 @@ CODE_FRAGMENT . struct ieee_data_struct *ieee_data; . struct ieee_ar_data_struct *ieee_ar_data; . struct srec_data_struct *srec_data; +. struct verilog_data_struct *verilog_data; . struct ihex_data_struct *ihex_data; . struct tekhex_data_struct *tekhex_data; . struct elf_obj_tdata *elf_obj_data; @@ -185,6 +242,7 @@ CODE_FRAGMENT . 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 plugin_data_struct *plugin_data; . struct bfd_pef_data_struct *pef_data; . struct bfd_pef_xlib_data_struct *pef_xlib_data; . struct bfd_sym_data_struct *sym_data; @@ -199,6 +257,35 @@ CODE_FRAGMENT . struct objalloc *, but we use void * to avoid requiring the inclusion . of objalloc.h. *} . void *memory; +. +. {* Is the file descriptor being cached? That is, can it be closed as +. needed, and re-opened when accessed later? *} +. unsigned int cacheable : 1; +. +. {* 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. *} +. unsigned int target_defaulted : 1; +. +. {* ... and here: (``once'' means at least once). *} +. unsigned int opened_once : 1; +. +. {* Set if we have a locally maintained mtime value, rather than +. getting it from the file each time. *} +. unsigned int mtime_set : 1; +. +. {* Flag set if symbols from this BFD should not be exported. *} +. unsigned int no_export : 1; +. +. {* Remember when output has begun, to stop strange things +. from happening. *} +. unsigned int output_has_begun : 1; +. +. {* Have archive map. *} +. unsigned int has_armap : 1; +. +. {* Set if this is a thin archive. *} +. unsigned int is_thin_archive : 1; .}; . */ @@ -352,7 +439,7 @@ bfd_set_error (bfd_error_type error_tag, ...) va_start (ap, error_tag); input_bfd = va_arg (ap, bfd *); - input_error = va_arg (ap, int); + input_error = (bfd_error_type) va_arg (ap, int); if (input_error >= bfd_error_on_input) abort (); va_end (ap); @@ -476,6 +563,9 @@ _bfd_default_error_handler (const char *fmt, ...) size_t avail = 1000; char buf[1000]; + /* PR 4992: Don't interrupt output being sent to stdout. */ + fflush (stdout); + if (_bfd_error_program_name != NULL) fprintf (stderr, "%s: ", _bfd_error_program_name); else @@ -913,10 +1003,15 @@ bfd_get_sign_extend_vma (bfd *abfd) if (CONST_STRNEQ (name, "coff-go32") || strcmp (name, "pe-i386") == 0 || strcmp (name, "pei-i386") == 0 + || strcmp (name, "pe-x86-64") == 0 + || strcmp (name, "pei-x86-64") == 0 || strcmp (name, "pe-arm-wince-little") == 0 || strcmp (name, "pei-arm-wince-little") == 0) return 1; + if (CONST_STRNEQ (name, "mach-o")) + return 0; + bfd_set_error (bfd_error_wrong_format); return -1; } @@ -1354,7 +1449,7 @@ bfd_record_phdr (bfd *abfd, amt = sizeof (struct elf_segment_map); amt += ((bfd_size_type) count - 1) * sizeof (asection *); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) return FALSE; @@ -1376,31 +1471,50 @@ bfd_record_phdr (bfd *abfd, return TRUE; } -void -bfd_sprintf_vma (bfd *abfd, char *buf, bfd_vma value) +#ifdef BFD64 +/* Return true iff this target is 32-bit. */ + +static bfd_boolean +is32bit (bfd *abfd) { if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) - get_elf_backend_data (abfd)->elf_backend_sprintf_vma (abfd, buf, value); - else - sprintf_vma (buf, value); + { + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + return bed->s->elfclass == ELFCLASS32; + } + + /* For non-ELF targets, use architecture information. */ + return bfd_arch_bits_per_address (abfd) <= 32; } +#endif + +/* bfd_sprintf_vma and bfd_fprintf_vma display an address in the + target's address size. */ void -bfd_fprintf_vma (bfd *abfd, void *stream, bfd_vma value) +bfd_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, 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)); + if (is32bit (abfd)) + { + sprintf (buf, "%08lx", (unsigned long) value & 0xffffffff); + return; + } #endif - else - fprintf_vma ((FILE *) stream, value); + sprintf_vma (buf, value); +} + +void +bfd_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value) +{ +#ifdef BFD64 + if (is32bit (abfd)) + { + fprintf ((FILE *) stream, "%08lx", (unsigned long) value & 0xffffffff); + return; + } +#endif + fprintf_vma ((FILE *) stream, value); } /* @@ -1590,8 +1704,7 @@ DESCRIPTION emulation. RETURNS - Returns the maximum page size in bytes for ELF, abort - otherwise. + Returns the maximum page size in bytes for ELF, 0 otherwise. */ bfd_vma @@ -1604,7 +1717,6 @@ bfd_emul_get_maxpagesize (const char *emul) && target->flavour == bfd_target_elf_flavour) return xvec_get_elf_backend_data (target)->maxpagesize; - abort (); return 0; } @@ -1663,7 +1775,7 @@ DESCRIPTION emulation. RETURNS - Returns the common page size in bytes for ELF, abort otherwise. + Returns the common page size in bytes for ELF, 0 otherwise. */ bfd_vma @@ -1676,7 +1788,6 @@ bfd_emul_get_commonpagesize (const char *emul) && target->flavour == bfd_target_elf_flavour) return xvec_get_elf_backend_data (target)->commonpagesize; - abort (); return 0; } @@ -1726,10 +1837,12 @@ bfd_demangle (bfd *abfd, const char *name, int options) char *res, *alloc; const char *pre, *suf; size_t pre_len; + bfd_boolean skip_lead; - if (abfd != NULL - && *name != '\0' - && bfd_get_symbol_leading_char (abfd) == *name) + skip_lead = (abfd != NULL + && *name != '\0' + && bfd_get_symbol_leading_char (abfd) == *name); + if (skip_lead) ++name; /* This is a hack for better error reporting on XCOFF, PowerPC64-ELF @@ -1746,7 +1859,7 @@ bfd_demangle (bfd *abfd, const char *name, int options) suf = strchr (name, '@'); if (suf != NULL) { - alloc = bfd_malloc (suf - name + 1); + alloc = (char *) bfd_malloc (suf - name + 1); if (alloc == NULL) return NULL; memcpy (alloc, name, suf - name); @@ -1760,7 +1873,18 @@ bfd_demangle (bfd *abfd, const char *name, int options) free (alloc); if (res == NULL) - return NULL; + { + if (skip_lead) + { + size_t len = strlen (pre) + 1; + alloc = (char *) bfd_malloc (len); + if (alloc == NULL) + return NULL; + memcpy (alloc, pre, len); + return alloc; + } + return NULL; + } /* Put back any prefix or suffix. */ if (pre_len != 0 || suf != NULL) @@ -1773,7 +1897,7 @@ bfd_demangle (bfd *abfd, const char *name, int options) if (suf == NULL) suf = res + len; suf_len = strlen (suf) + 1; - final = bfd_malloc (pre_len + len + suf_len); + final = (char *) bfd_malloc (pre_len + len + suf_len); if (final != NULL) { memcpy (final, pre, pre_len); diff --git a/bfd/bfd.m4 b/bfd/bfd.m4 index 1d7d53a..55cc2be 100644 --- a/bfd/bfd.m4 +++ b/bfd/bfd.m4 @@ -20,7 +20,6 @@ AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE], AC_MSG_RESULT($bfd_cv_have_sys_procfs_type_$1) ]) - dnl Check for existence of member $2 in type $1 in sys/procfs.h AC_DEFUN([BFD_HAVE_SYS_PROCFS_TYPE_MEMBER], diff --git a/bfd/bfdio.c b/bfd/bfdio.c index 080cd94..e428b16 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, 2006, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -38,6 +38,10 @@ #define S_IXOTH 0001 /* Execute by others. */ #endif +#ifndef FD_CLOEXEC +#define FD_CLOEXEC 1 +#endif + file_ptr real_ftell (FILE *file) { @@ -62,14 +66,65 @@ real_fseek (FILE *file, file_ptr offset, int whence) #endif } +/* Mark FILE as close-on-exec. Return FILE. FILE may be NULL, in + which case nothing is done. */ +static FILE * +close_on_exec (FILE *file) +{ +#if defined (HAVE_FILENO) && defined (F_GETFD) + if (file) + { + int fd = fileno (file); + int old = fcntl (fd, F_GETFD, 0); + if (old >= 0) + fcntl (fd, F_SETFD, old | FD_CLOEXEC); + } +#endif + return file; +} + FILE * real_fopen (const char *filename, const char *modes) { +#ifdef VMS + char vms_modes[4]; + char *vms_attr; + + /* On VMS, fopen allows file attributes as optionnal arguments. + We need to use them but we'd better to use the common prototype. + In fopen-vms.h, they are separated from the mode with a comma. + Split here. */ + vms_attr = strchr (modes, ','); + if (vms_attr == NULL) + { + /* No attributes. */ + return close_on_exec (fopen (filename, modes)); + } + else + { + /* Attributes found. Split. */ + size_t modes_len = strlen (modes) + 1; + char attrs[modes_len + 1]; + char *at[3]; + int i; + + memcpy (attrs, modes, modes_len); + at[0] = attrs; + for (i = 0; i < 2; i++) + { + at[i + 1] = strchr (at[i], ','); + BFD_ASSERT (at[i + 1] != NULL); + *(at[i + 1]++) = 0; /* Replace ',' with a nul, and skip it. */ + } + return close_on_exec (fopen (filename, at[0], at[1], at[2])); + } +#else /* !VMS */ #if defined (HAVE_FOPEN64) - return fopen64 (filename, modes); + return close_on_exec (fopen64 (filename, modes)); #else - return fopen (filename, modes); + return close_on_exec (fopen (filename, modes)); #endif +#endif /* !VMS */ } /* @@ -103,6 +158,9 @@ DESCRIPTION . int (*bclose) (struct bfd *abfd); . int (*bflush) (struct bfd *abfd); . int (*bstat) (struct bfd *abfd, struct stat *sb); +. {* Just like mmap: (void*)-1 on failure, mmapped address on success. *} +. void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len, +. int prot, int flags, file_ptr offset); .}; */ @@ -129,7 +187,7 @@ bfd_bread (void *ptr, bfd_size_type size, bfd *abfd) struct bfd_in_memory *bim; bfd_size_type get; - bim = abfd->iostream; + bim = (struct bfd_in_memory *) abfd->iostream; get = size; if (abfd->where + get > bim->size) { @@ -161,7 +219,7 @@ bfd_bwrite (const void *ptr, bfd_size_type size, bfd *abfd) if ((abfd->flags & BFD_IN_MEMORY) != 0) { - struct bfd_in_memory *bim = abfd->iostream; + struct bfd_in_memory *bim = (struct bfd_in_memory *) abfd->iostream; size = (size_t) size; if (abfd->where + size > bim->size) @@ -174,12 +232,15 @@ bfd_bwrite (const void *ptr, bfd_size_type size, bfd *abfd) newsize = (bim->size + 127) & ~(bfd_size_type) 127; if (newsize > oldsize) { - bim->buffer = bfd_realloc (bim->buffer, newsize); - if (bim->buffer == 0) + bim->buffer = (bfd_byte *) bfd_realloc_or_free (bim->buffer, + newsize); + if (bim->buffer == NULL) { bim->size = 0; return 0; } + if (newsize > bim->size) + memset (bim->buffer + bim->size, 0, newsize - bim->size); } } memcpy (bim->buffer + abfd->where, ptr, (size_t) size); @@ -278,7 +339,7 @@ bfd_seek (bfd *abfd, file_ptr position, int direction) { struct bfd_in_memory *bim; - bim = abfd->iostream; + bim = (struct bfd_in_memory *) abfd->iostream; if (direction == SEEK_SET) abfd->where = position; @@ -287,8 +348,8 @@ bfd_seek (bfd *abfd, file_ptr position, int direction) if (abfd->where > bim->size) { - if ((abfd->direction == write_direction) || - (abfd->direction == both_direction)) + if (abfd->direction == write_direction + || abfd->direction == both_direction) { bfd_size_type newsize, oldsize; @@ -298,12 +359,14 @@ bfd_seek (bfd *abfd, file_ptr position, int direction) newsize = (bim->size + 127) & ~(bfd_size_type) 127; if (newsize > oldsize) { - bim->buffer = bfd_realloc (bim->buffer, newsize); - if (bim->buffer == 0) + bim->buffer = (bfd_byte *) bfd_realloc_or_free (bim->buffer, + newsize); + if (bim->buffer == NULL) { bim->size = 0; return -1; } + memset (bim->buffer + oldsize, 0, newsize - oldsize); } } else @@ -453,3 +516,31 @@ bfd_get_size (bfd *abfd) return buf.st_size; } + + +/* +FUNCTION + bfd_mmap + +SYNOPSIS + void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); + +DESCRIPTION + Return mmap()ed region of the file, if possible and implemented. + +*/ + +void * +bfd_mmap (bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset) +{ + void *ret = (void *)-1; + if ((abfd->flags & BFD_IN_MEMORY) != 0) + return ret; + + if (abfd->iovec == NULL) + return ret; + + return abfd->iovec->bmmap (abfd, addr, len, prot, flags, offset); +} diff --git a/bfd/bfdwin.c b/bfd/bfdwin.c index a44265e..63ad5ed 100644 --- a/bfd/bfdwin.c +++ b/bfd/bfdwin.c @@ -1,5 +1,5 @@ /* Support for memory-mapped windows into a BFD. - Copyright 1995, 1996, 2001, 2002, 2003, 2005, 2007 + Copyright 1995, 1996, 2001, 2002, 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -25,10 +25,8 @@ #include "bfd.h" #include "libbfd.h" -/* Currently, if USE_MMAP is undefined, none if the window stuff is - used. Okay, so it's mis-named. At least the command-line option - "--without-mmap" is more obvious than "--without-windows" or some - such. */ +/* Currently, if USE_MMAP is undefined, none of the window stuff is + used. Enabled by --with-mmap. */ #ifdef USE_MMAP @@ -80,7 +78,7 @@ bfd_free_window (bfd_window *windowp) i->refcount--; if (debug_windows) fprintf (stderr, "freeing window @%p<%p,%lx,%p>\n", - windowp, windowp->data, windowp->size, windowp->i); + windowp, windowp->data, (unsigned long) windowp->size, windowp->i); if (i->refcount != 0) return; @@ -224,16 +222,16 @@ bfd_get_file_window (bfd *abfd, if (debug_windows) fprintf (stderr, "\n\t%s(%6ld)", i->data ? "realloc" : " malloc", (long) size_to_alloc); - i->data = bfd_realloc (i->data, size_to_alloc); + i->data = bfd_realloc_or_free (i->data, size_to_alloc); if (debug_windows) fprintf (stderr, "\t-> %p\n", i->data); - i->refcount = 1; if (i->data == NULL) { if (size_to_alloc == 0) return TRUE; return FALSE; } + i->refcount = 1; if (bfd_seek (abfd, offset, SEEK_SET) != 0) return FALSE; i->size = bfd_bread (i->data, size, abfd); diff --git a/bfd/binary.c b/bfd/binary.c index c4aec2b..9740756 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, 2006, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support, This file is part of BFD, the Binary File Descriptor library. @@ -143,7 +143,7 @@ mangle_name (bfd *abfd, char *suffix) + strlen (suffix) + sizeof "_binary__"); - buf = bfd_alloc (abfd, size); + buf = (char *) bfd_alloc (abfd, size); if (buf == NULL) return ""; @@ -167,7 +167,7 @@ binary_canonicalize_symtab (bfd *abfd, asymbol **alocation) unsigned int i; bfd_size_type amt = BIN_SYMS * sizeof (asymbol); - syms = bfd_alloc (abfd, amt); + syms = (asymbol *) bfd_alloc (abfd, amt); if (syms == NULL) return -1; @@ -316,6 +316,7 @@ binary_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #define binary_bfd_is_group_section bfd_generic_is_group_section #define binary_bfd_discard_group bfd_generic_discard_group #define binary_section_already_linked _bfd_generic_section_already_linked +#define binary_bfd_define_common_symbol bfd_generic_define_common_symbol #define binary_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define binary_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define binary_bfd_link_just_syms _bfd_generic_link_just_syms diff --git a/bfd/bout.c b/bfd/bout.c index b6c7106..f2721e8 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -1145,6 +1145,10 @@ b_out_bfd_relax_section (bfd *abfd, arelent **reloc_vector = NULL; long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section); + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + if (reloc_size < 0) return FALSE; @@ -1389,6 +1393,7 @@ b_out_bfd_get_relocated_section_contents (bfd *output_bfd, #define b_out_bfd_is_group_section bfd_generic_is_group_section #define b_out_bfd_discard_group bfd_generic_discard_group #define b_out_section_already_linked _bfd_generic_section_already_linked +#define b_out_bfd_define_common_symbol bfd_generic_define_common_symbol #define aout_32_get_section_contents_in_window _bfd_generic_get_section_contents_in_window extern const bfd_target b_out_vec_little_host; diff --git a/bfd/cache.c b/bfd/cache.c index 039c1a9..cf1869d 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support (steve@cygnus.com). @@ -46,6 +46,10 @@ SUBSECTION #include "libbfd.h" #include "libiberty.h" +#ifdef HAVE_MMAP +#include +#endif + /* In some cases we can optimize cache operation when reopening files. For instance, a flush is entirely unnecessary if the file is already closed, so a flush would use CACHE_NO_OPEN. Similarly, a seek using @@ -166,22 +170,6 @@ close_one (void) kill->where = real_ftell ((FILE *) kill->iostream); - /* Save the file st_mtime. This is a hack so that gdb can detect when - an executable has been deleted and recreated. The only thing that - makes this reasonable is that st_mtime doesn't change when a file - is unlinked, so saving st_mtime makes BFD's file cache operation - a little more transparent for this particular usage pattern. If we - hadn't closed the file then we would not have lost the original - contents, st_mtime etc. Of course, if something is writing to an - existing file, then this is the wrong thing to do. - FIXME: gdb should save these times itself on first opening a file, - and this hack be removed. */ - if (kill->direction == no_direction || kill->direction == read_direction) - { - bfd_get_mtime (kill); - kill->mtime_set = TRUE; - } - return bfd_cache_delete (kill); } @@ -252,7 +240,7 @@ cache_btell (struct bfd *abfd) static int cache_bseek (struct bfd *abfd, file_ptr offset, int whence) { - FILE *f = bfd_cache_lookup (abfd, whence != SEEK_CUR ? CACHE_NO_SEEK : 0); + FILE *f = bfd_cache_lookup (abfd, whence != SEEK_CUR ? CACHE_NO_SEEK : CACHE_NORMAL); if (f == NULL) return -1; return real_fseek (f, offset, whence); @@ -266,7 +254,7 @@ cache_bseek (struct bfd *abfd, file_ptr offset, int whence) first octet in the file, NOT the beginning of the archive header. */ static file_ptr -cache_bread (struct bfd *abfd, void *buf, file_ptr nbytes) +cache_bread_1 (struct bfd *abfd, void *buf, file_ptr nbytes) { FILE *f; file_ptr nread; @@ -282,7 +270,7 @@ cache_bread (struct bfd *abfd, void *buf, file_ptr nbytes) if (nbytes == 0) return 0; - f = bfd_cache_lookup (abfd, 0); + f = bfd_cache_lookup (abfd, CACHE_NORMAL); if (f == NULL) return 0; @@ -309,6 +297,47 @@ cache_bread (struct bfd *abfd, void *buf, file_ptr nbytes) return -1; } #endif + if (nread < nbytes) + /* This may or may not be an error, but in case the calling code + bails out because of it, set the right error code. */ + bfd_set_error (bfd_error_file_truncated); + return nread; +} + +static file_ptr +cache_bread (struct bfd *abfd, void *buf, file_ptr nbytes) +{ + file_ptr nread = 0; + + /* Some filesystems are unable to handle reads that are too large + (for instance, NetApp shares with oplocks turned off). To avoid + hitting this limitation, we read the buffer in chunks of 8MB max. */ + while (nread < nbytes) + { + const file_ptr max_chunk_size = 0x800000; + file_ptr chunk_size = nbytes - nread; + file_ptr chunk_nread; + + if (chunk_size > max_chunk_size) + chunk_size = max_chunk_size; + + chunk_nread = cache_bread_1 (abfd, (char *) buf + nread, chunk_size); + + /* Update the nread count. + + We just have to be careful of the case when cache_bread_1 returns + a negative count: If this is our first read, then set nread to + that negative count in order to return that negative value to the + caller. Otherwise, don't add it to our total count, or we would + end up returning a smaller number of bytes read than we actually + did. */ + if (nread == 0 || chunk_nread > 0) + nread += chunk_nread; + + if (chunk_nread < chunk_size) + break; + } + return nread; } @@ -316,7 +345,8 @@ static file_ptr cache_bwrite (struct bfd *abfd, const void *where, file_ptr nbytes) { file_ptr nwrite; - FILE *f = bfd_cache_lookup (abfd, 0); + FILE *f = bfd_cache_lookup (abfd, CACHE_NORMAL); + if (f == NULL) return 0; nwrite = fwrite (where, 1, nbytes, f); @@ -339,6 +369,7 @@ cache_bflush (struct bfd *abfd) { int sts; FILE *f = bfd_cache_lookup (abfd, CACHE_NO_OPEN); + if (f == NULL) return 0; sts = fflush (f); @@ -352,6 +383,7 @@ cache_bstat (struct bfd *abfd, struct stat *sb) { int sts; FILE *f = bfd_cache_lookup (abfd, CACHE_NO_SEEK_ERROR); + if (f == NULL) return -1; sts = fstat (fileno (f), sb); @@ -360,9 +392,38 @@ cache_bstat (struct bfd *abfd, struct stat *sb) return sts; } -static const struct bfd_iovec cache_iovec = { +static void * +cache_bmmap (struct bfd *abfd ATTRIBUTE_UNUSED, + void *addr ATTRIBUTE_UNUSED, + bfd_size_type len ATTRIBUTE_UNUSED, + int prot ATTRIBUTE_UNUSED, + int flags ATTRIBUTE_UNUSED, + file_ptr offset ATTRIBUTE_UNUSED) +{ + void *ret = (void *) -1; + + if ((abfd->flags & BFD_IN_MEMORY) != 0) + abort (); +#ifdef HAVE_MMAP + else + { + FILE *f = bfd_cache_lookup (abfd, CACHE_NO_SEEK_ERROR); + if (f == NULL) + return ret; + + ret = mmap (addr, len, prot, flags, fileno (f), offset); + if (ret == (void *) -1) + bfd_set_error (bfd_error_system_call); + } +#endif + + return ret; +} + +static const struct bfd_iovec cache_iovec = +{ &cache_bread, &cache_bwrite, &cache_btell, &cache_bseek, - &cache_bclose, &cache_bflush, &cache_bstat + &cache_bclose, &cache_bflush, &cache_bstat, &cache_bmmap }; /* diff --git a/bfd/cf-i386lynx.c b/bfd/cf-i386lynx.c index 8a30ed6..5fc2689 100644 --- a/bfd/cf-i386lynx.c +++ b/bfd/cf-i386lynx.c @@ -1,5 +1,6 @@ /* BFD back-end for Intel 386 COFF LynxOS files. - Copyright 1993, 1994, 1995, 2007 Free Software Foundation, Inc. + Copyright 1993, 1994, 1995, 2005, 2007, 2008 + Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -29,4 +30,6 @@ #define COFF_LONG_FILENAMES +#define bfd_pe_print_pdata NULL + #include "coff-i386.c" diff --git a/bfd/cf-sparclynx.c b/bfd/cf-sparclynx.c index a7ac6e5..a979160 100644 --- a/bfd/cf-sparclynx.c +++ b/bfd/cf-sparclynx.c @@ -1,5 +1,5 @@ /* BFD back-end for Sparc COFF LynxOS files. - Copyright 1993, 1994, 2007 Free Software Foundation, Inc. + Copyright 1993, 1994, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cisco-core.c b/bfd/cisco-core.c index 65c6da4..9169ed5 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, 2006, 2007 + Copyright 1994, 1997, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c index 4799fdf..0d67264 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Modified from coff-mips.c by Steve Chamberlain and Ian Lance Taylor . @@ -2120,6 +2120,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos) bfd_byte *buf, *p; struct bfd_in_memory *bim; + buf = NULL; nbfd = _bfd_get_elt_at_filepos (archive, filepos); if (nbfd == NULL) goto error_return; @@ -2151,16 +2152,14 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos) goto error_return; size = H_GET_64 (nbfd, ab); - if (size == 0) - buf = NULL; - else + if (size != 0) { bfd_size_type left; bfd_byte dict[4096]; unsigned int h; bfd_byte b; - buf = (bfd_byte *) bfd_alloc (nbfd, size); + buf = (bfd_byte *) bfd_malloc (size); if (buf == NULL) goto error_return; p = buf; @@ -2214,7 +2213,7 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos) /* Now the uncompressed file contents are in buf. */ bim = ((struct bfd_in_memory *) - bfd_alloc (nbfd, (bfd_size_type) sizeof (struct bfd_in_memory))); + bfd_malloc ((bfd_size_type) sizeof (struct bfd_in_memory))); if (bim == NULL) goto error_return; bim->size = size; @@ -2230,6 +2229,8 @@ alpha_ecoff_get_elt_at_filepos (archive, filepos) return nbfd; error_return: + if (buf != NULL) + free (buf); if (nbfd != NULL) bfd_close (nbfd); return NULL; @@ -2297,14 +2298,15 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data = (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */ alpha_ecoff_swap_filehdr_out, alpha_ecoff_swap_aouthdr_out, alpha_ecoff_swap_scnhdr_out, - FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE, FALSE, 4, FALSE, 2, + FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE, + ECOFF_NO_LONG_SECTION_NAMES, 4, FALSE, 2, alpha_ecoff_swap_filehdr_in, alpha_ecoff_swap_aouthdr_in, alpha_ecoff_swap_scnhdr_in, NULL, alpha_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook, alpha_ecoff_mkobject_hook, _bfd_ecoff_styp_to_sec_flags, _bfd_ecoff_set_alignment_hook, _bfd_ecoff_slurp_symbol_table, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, NULL + NULL, NULL, NULL, NULL }, /* Supported architecture. */ bfd_arch_alpha, @@ -2397,6 +2399,7 @@ static const struct ecoff_backend_data alpha_ecoff_backend_data = #define _bfd_ecoff_bfd_discard_group bfd_generic_discard_group #define _bfd_ecoff_section_already_linked \ _bfd_generic_section_already_linked +#define _bfd_ecoff_bfd_define_common_symbol bfd_generic_define_common_symbol const bfd_target ecoffalpha_little_vec = { @@ -2421,7 +2424,7 @@ const bfd_target ecoffalpha_little_vec = bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ {_bfd_dummy_target, alpha_ecoff_object_p, /* bfd_check_format */ - _bfd_ecoff_archive_p, _bfd_dummy_target}, + bfd_generic_archive_p, _bfd_dummy_target}, {bfd_false, _bfd_ecoff_mkobject, /* bfd_set_format */ _bfd_generic_mkarchive, bfd_false}, {bfd_false, _bfd_ecoff_write_object_contents, /* bfd_write_contents */ diff --git a/bfd/coff-apollo.c b/bfd/coff-apollo.c index 6c30473..e177099 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, - 2007 Free Software Foundation, Inc. + 2005, 2007, 2008 Free Software Foundation, Inc. By Troy Rollo (troy@cbme.unsw.edu.au) Based on m68k standard COFF version Written by Cygnus Support. @@ -105,6 +105,8 @@ apollo_howto2rtype (internal) #define SELECT_RELOC(external, internal) \ external.r_type = apollo_howto2rtype (internal); +#define bfd_pe_print_pdata NULL + #include "coffcode.h" #ifndef TARGET_SYM diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index b9f8c36..422c53e 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -939,21 +939,24 @@ coff_arm_link_hash_table_create (bfd * abfd) return & ret->root.root; } -static void +static bfd_boolean arm_emit_base_file_entry (struct bfd_link_info *info, bfd *output_bfd, asection *input_section, bfd_vma reloc_offset) { - bfd_vma addr = reloc_offset - - input_section->vma - + input_section->output_offset - + input_section->output_section->vma; + bfd_vma addr = (reloc_offset + - input_section->vma + + input_section->output_offset + + input_section->output_section->vma); if (coff_data (output_bfd)->pe) addr -= pe_data (output_bfd)->pe_opthdr.ImageBase; - fwrite (& addr, 1, sizeof (addr), (FILE *) info->base_file); + if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1) + return TRUE; + bfd_set_error (bfd_error_system_call); + return FALSE; } #ifndef ARM_WINCE @@ -1329,8 +1332,8 @@ coff_arm_relocate_section (bfd *output_bfd, if (howto->type == ARM_26) { - if ( h->class == C_THUMBSTATFUNC - || h->class == C_THUMBEXTFUNC) + if ( h->symbol_class == C_THUMBSTATFUNC + || h->symbol_class == C_THUMBEXTFUNC) { /* Arm code calling a Thumb function. */ unsigned long int tmp; @@ -1381,10 +1384,10 @@ coff_arm_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, h_val | a2t3_func_addr_insn, s->contents + my_offset + 8); - if (info->base_file) - arm_emit_base_file_entry (info, output_bfd, s, - my_offset + 8); - + if (info->base_file + && !arm_emit_base_file_entry (info, output_bfd, + s, my_offset + 8)) + return FALSE; } BFD_ASSERT (my_offset <= globals->arm_glue_size); @@ -1416,9 +1419,9 @@ coff_arm_relocate_section (bfd *output_bfd, /* Note: We used to check for ARM_THUMB9 and ARM_THUMB12. */ else if (howto->type == ARM_THUMB23) { - if ( h->class == C_EXT - || h->class == C_STAT - || h->class == C_LABEL) + if ( h->symbol_class == C_EXT + || h->symbol_class == C_STAT + || h->symbol_class == C_LABEL) { /* Thumb code calling an ARM function. */ asection * s = 0; @@ -1486,9 +1489,11 @@ coff_arm_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, h_val, s->contents + my_offset + 16); - if (info->base_file) - arm_emit_base_file_entry (info, output_bfd, s, - my_offset + 16); + if (info->base_file + && !arm_emit_base_file_entry (info, + output_bfd, s, + my_offset + 16)) + return FALSE; } else { @@ -1572,13 +1577,13 @@ coff_arm_relocate_section (bfd *output_bfd, } } - if (info->base_file) - { - /* Emit a reloc if the backend thinks it needs it. */ - if (sym && pe_data(output_bfd)->in_reloc_p(output_bfd, howto)) - arm_emit_base_file_entry (info, output_bfd, input_section, - rel->r_vaddr); - } + /* Emit a reloc if the backend thinks it needs it. */ + if (info->base_file + && sym + && pe_data(output_bfd)->in_reloc_p(output_bfd, howto) + && !arm_emit_base_file_entry (info, output_bfd, input_section, + rel->r_vaddr)) + return FALSE; if (done) rstat = bfd_reloc_ok; @@ -1716,8 +1721,8 @@ coff_arm_relocate_section (bfd *output_bfd, int patchit = FALSE; if (h != NULL - && ( h->class == C_THUMBSTATFUNC - || h->class == C_THUMBEXTFUNC)) + && ( h->symbol_class == C_THUMBSTATFUNC + || h->symbol_class == C_THUMBEXTFUNC)) { patchit = TRUE; } @@ -1927,7 +1932,7 @@ record_thumb_to_arm_glue (struct bfd_link_info * info, /* If we mark it 'thumb', the disassembler will do a better job. */ myh = (struct coff_link_hash_entry *) bh; - myh->class = C_THUMBEXTFUNC; + myh->symbol_class = C_THUMBEXTFUNC; free (tmp_name); @@ -2091,7 +2096,7 @@ bfd_arm_process_before_allocation (bfd * abfd, the target of the call. If it is a thumb target, we insert glue. */ - if (h->class == C_THUMBEXTFUNC) + if (h->symbol_class == C_THUMBEXTFUNC) record_arm_to_thumb_glue (info, h); break; @@ -2105,7 +2110,7 @@ bfd_arm_process_before_allocation (bfd * abfd, for it. This is not really a problem, since the link is doomed anyway. */ - switch (h->class) + switch (h->symbol_class) { case C_EXT: case C_STAT: @@ -2203,7 +2208,7 @@ coff_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) { _bfd_error_handler /* xgettext: c-format */ - (_("ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"), + (_("error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d"), ibfd, obfd, APCS_26_FLAG (ibfd) ? 26 : 32, APCS_26_FLAG (obfd) ? 26 : 32 @@ -2219,10 +2224,10 @@ coff_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) if (APCS_FLOAT_FLAG (ibfd)) /* xgettext: c-format */ - msg = _("ERROR: %B passes floats in float registers, whereas %B passes them in integer registers"); + msg = _("error: %B passes floats in float registers, whereas %B passes them in integer registers"); else /* xgettext: c-format */ - msg = _("ERROR: %B passes floats in integer registers, whereas %B passes them in float registers"); + msg = _("error: %B passes floats in integer registers, whereas %B passes them in float registers"); _bfd_error_handler (msg, ibfd, obfd); @@ -2236,10 +2241,10 @@ coff_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) if (PIC_FLAG (ibfd)) /* xgettext: c-format */ - msg = _("ERROR: %B is compiled as position independent code, whereas target %B is absolute position"); + msg = _("error: %B is compiled as position independent code, whereas target %B is absolute position"); else /* xgettext: c-format */ - msg = _("ERROR: %B is compiled as absolute position code, whereas target %B is position independent"); + msg = _("error: %B is compiled as absolute position code, whereas target %B is position independent"); _bfd_error_handler (msg, ibfd, obfd); bfd_set_error (bfd_error_wrong_format); @@ -2523,6 +2528,10 @@ coff_arm_final_link_postscript (bfd * abfd ATTRIBUTE_UNUSED, return bfd_arm_update_notes (abfd, ARM_NOTE_SECTION); } +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #ifndef TARGET_LITTLE_SYM diff --git a/bfd/coff-aux.c b/bfd/coff-aux.c index eb7b225..af1db03 100644 --- a/bfd/coff-aux.c +++ b/bfd/coff-aux.c @@ -1,5 +1,6 @@ /* BFD back-end for Apple M68K COFF A/UX 3.x files. - Copyright 1996, 1997, 2000, 2002, 2007 Free Software Foundation, Inc. + Copyright 1996, 1997, 2000, 2002, 2005, 2007, 2008 + Free Software Foundation, Inc. Written by Richard Henderson . This file is part of BFD, the Binary File Descriptor library. @@ -48,6 +49,10 @@ static bfd_boolean coff_m68k_aux_link_add_one_symbol #define coff_link_add_one_symbol coff_m68k_aux_link_add_one_symbol +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coff/aux-coff.h" /* override coff/internal.h and coff/m68k.h */ #include "coff-m68k.c" diff --git a/bfd/coff-go32.c b/bfd/coff-go32.c index 5ea78eb..7c09b3a 100644 --- a/bfd/coff-go32.c +++ b/bfd/coff-go32.c @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 COFF files (DJGPP variant). - Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 1999, 2000, 2001, 2005, 2007 Free Software Foundation, Inc. Written by DJ Delorie. diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c index 0f8dbda..e2a10a6 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Steve Chamberlain, . @@ -1116,11 +1116,11 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, struct h8300_coff_link_hash_table *htab; asection *vectors_sec; - if (link_info->hash->creator != abfd->xvec) + if (link_info->output_bfd->xvec != abfd->xvec) { (*_bfd_error_handler) (_("cannot handle R_MEM_INDIRECT reloc when using %s output"), - link_info->hash->creator->name); + link_info->output_bfd->xvec->name); /* What else can we do? This function doesn't allow return of an error, and we don't want to call abort as that @@ -1264,7 +1264,7 @@ h8300_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info) /* Add the symbols using the generic code. */ _bfd_generic_link_add_symbols (abfd, info); - if (info->hash->creator != abfd->xvec) + if (info->output_bfd->xvec != abfd->xvec) return TRUE; htab = h8300_coff_hash_table (info); @@ -1429,6 +1429,11 @@ h8300_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info) #define coff_bfd_link_hash_table_create h8300_coff_link_hash_table_create #define COFF_LONG_FILENAMES + +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #undef coff_bfd_get_relocated_section_contents diff --git a/bfd/coff-h8500.c b/bfd/coff-h8500.c index 186923a..139a8ed 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, 2007 Free Software Foundation, Inc. + 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Steve Chamberlain, . @@ -298,6 +298,10 @@ extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr) #define coff_reloc16_extra_cases extra_case +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #undef coff_bfd_get_relocated_section_contents diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c index 115fdf2..9a763d5 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Cygnus Support. @@ -37,6 +37,10 @@ #include "coff/go32exe.h" #endif +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "libcoff.h" static bfd_reloc_status_type coff_i386_reloc diff --git a/bfd/coff-i860.c b/bfd/coff-i860.c index bde75b1..e5ca0c1 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Created mostly by substituting "860" for "386" in coff-i386.c Harry Dolan , October 1995 @@ -29,6 +29,10 @@ #include "coff/internal.h" +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "libcoff.h" diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c index 7233c43..d0374d2 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, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -28,7 +28,12 @@ #include "libbfd.h" #include "coff/i960.h" #include "coff/internal.h" -#include "libcoff.h" /* to allow easier abstraction-breaking */ + +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + +#include "libcoff.h" /* To allow easier abstraction-breaking. */ static bfd_boolean coff_i960_is_local_label_name PARAMS ((bfd *, const char *)); @@ -483,14 +488,14 @@ coff_i960_relocate_section (output_bfd, info, input_bfd, input_section, if (howto->type == R_OPTCALL && ! info->relocatable && symndx != -1) { - int class; + int class_val; if (h != NULL) - class = h->class; + class_val = h->symbol_class; else - class = sym->n_sclass; + class_val = sym->n_sclass; - switch (class) + switch (class_val) { case C_NULL: /* This symbol is apparently not from a COFF input file. diff --git a/bfd/coff-ia64.c b/bfd/coff-ia64.c index e8d6674..38d9ac6 100644 --- a/bfd/coff-ia64.c +++ b/bfd/coff-ia64.c @@ -1,5 +1,6 @@ /* BFD back-end for HP/Intel IA-64 COFF files. - Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. Contributed by David Mosberger This file is part of BFD, the Binary File Descriptor library. @@ -28,9 +29,9 @@ #include "libcoff.h" #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2) -/* The page size is a guess based on ELF. */ -#define COFF_PAGE_SIZE 0x1000 +/* Windows ia64 uses 8K page size. */ +#define COFF_PAGE_SIZE 0x2000 static reloc_howto_type howto_table[] = { @@ -64,6 +65,10 @@ in_reloc_p(abfd, howto) } #endif +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" static const bfd_target *ia64coff_object_p PARAMS ((bfd *)); diff --git a/bfd/coff-m68k.c b/bfd/coff-m68k.c index 185b059..b53cc5f 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, 2007 + 2000, 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Cygnus Support. @@ -545,6 +545,10 @@ bfd_m68k_coff_create_embedded_relocs (abfd, info, datasec, relsec, errmsg) #define coff_relocate_section _bfd_coff_generic_relocate_section +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #ifndef TARGET_SYM diff --git a/bfd/coff-m88k.c b/bfd/coff-m88k.c index b277425..3855b52 100644 --- a/bfd/coff-m88k.c +++ b/bfd/coff-m88k.c @@ -1,6 +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, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -284,6 +284,11 @@ reloc_processing (relent, reloc, symbols, abfd, section) } #define BADMAG(x) MC88BADMAG(x) + +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #undef coff_write_armap diff --git a/bfd/coff-maxq.c b/bfd/coff-maxq.c index 927ba99..94d5237 100644 --- a/bfd/coff-maxq.c +++ b/bfd/coff-maxq.c @@ -1,5 +1,5 @@ /* BFD back-end for MAXQ COFF binaries. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Vineet Sharma (vineets@noida.hcltech.com) Inderpreet S. (inderpreetb@noida.hcltech.com) @@ -427,6 +427,10 @@ maxq_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name) #define CALC_ADDEND(abfd, symbol, ext_reloc, cache_ptr) \ cache_ptr->addend = ext_reloc.r_offset; +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #ifndef TARGET_UNDERSCORE diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c index 861e19a..1d61748 100644 --- a/bfd/coff-mcore.c +++ b/bfd/coff-mcore.c @@ -51,8 +51,6 @@ static reloc_howto_type *coff_mcore_rtype_to_howto PARAMS ((bfd *, asection *, struct internal_reloc *, struct coff_link_hash_entry *, struct internal_syment *, bfd_vma *)); -static void mcore_emit_base_file_entry - PARAMS ((struct bfd_link_info *, bfd *, asection *, bfd_vma)); static bfd_boolean in_reloc_p PARAMS ((bfd *, reloc_howto_type *)); /* The NT loader points the toc register to &toc + 32768, in order to @@ -221,12 +219,11 @@ mcore_hash_table; /* Add an entry to the base file. */ -static void -mcore_emit_base_file_entry (info, output_bfd, input_section, reloc_offset) - struct bfd_link_info * info; - bfd * output_bfd; - asection * input_section; - bfd_vma reloc_offset; +static bfd_boolean +mcore_emit_base_file_entry (struct bfd_link_info *info, + bfd *output_bfd, + asection *input_section, + bfd_vma reloc_offset) { bfd_vma addr = reloc_offset - input_section->vma @@ -236,7 +233,11 @@ mcore_emit_base_file_entry (info, output_bfd, input_section, reloc_offset) if (coff_data (output_bfd)->pe) addr -= pe_data (output_bfd)->pe_opthdr.ImageBase; - fwrite (&addr, 1, sizeof (addr), (FILE *) info->base_file); + if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1) + return TRUE; + + bfd_set_error (bfd_error_system_call); + return FALSE; } static bfd_reloc_status_type @@ -522,12 +523,13 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section, break; } - if (info->base_file) - { - /* Emit a reloc if the backend thinks it needs it. */ - if (sym && pe_data (output_bfd)->in_reloc_p (output_bfd, howto)) - mcore_emit_base_file_entry (info, output_bfd, input_section, rel->r_vaddr); - } + /* Emit a reloc if the backend thinks it needs it. */ + if (info->base_file + && sym + && pe_data (output_bfd)->in_reloc_p (output_bfd, howto) + && !mcore_emit_base_file_entry (info, output_bfd, input_section, + rel->r_vaddr)) + return FALSE; switch (rstat) { diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index 6b01d44..34fda3a 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Original version by Per Bothner. Full support added by Ian Lance Taylor, ian@cygnus.com. @@ -85,6 +85,7 @@ static reloc_howto_type *mips_bfd_reloc_type_lookup #define coff_swap_aouthdr_out mips_ecoff_swap_aouthdr_out #define coff_swap_scnhdr_in mips_ecoff_swap_scnhdr_in #define coff_swap_scnhdr_out mips_ecoff_swap_scnhdr_out + #include "coffswap.h" /* Get the ECOFF swapping routines. */ @@ -1311,14 +1312,15 @@ static const struct ecoff_backend_data mips_ecoff_backend_data = (unsigned (*) PARAMS ((bfd *,PTR,PTR))) bfd_void, /* reloc_out */ mips_ecoff_swap_filehdr_out, mips_ecoff_swap_aouthdr_out, mips_ecoff_swap_scnhdr_out, - FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE, FALSE, 4, FALSE, 2, + FILHSZ, AOUTSZ, SCNHSZ, 0, 0, 0, 0, FILNMLEN, TRUE, + ECOFF_NO_LONG_SECTION_NAMES, 4, FALSE, 2, mips_ecoff_swap_filehdr_in, mips_ecoff_swap_aouthdr_in, mips_ecoff_swap_scnhdr_in, NULL, mips_ecoff_bad_format_hook, _bfd_ecoff_set_arch_mach_hook, _bfd_ecoff_mkobject_hook, _bfd_ecoff_styp_to_sec_flags, _bfd_ecoff_set_alignment_hook, _bfd_ecoff_slurp_symbol_table, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL + NULL, NULL, NULL }, /* Supported architecture. */ bfd_arch_mips, @@ -1415,6 +1417,7 @@ static const struct ecoff_backend_data mips_ecoff_backend_data = #define _bfd_ecoff_bfd_discard_group bfd_generic_discard_group #define _bfd_ecoff_section_already_linked \ _bfd_generic_section_already_linked +#define _bfd_ecoff_bfd_define_common_symbol bfd_generic_define_common_symbol extern const bfd_target ecoff_big_vec; @@ -1441,7 +1444,7 @@ const bfd_target ecoff_little_vec = bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */ {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ - _bfd_ecoff_archive_p, _bfd_dummy_target}, + bfd_generic_archive_p, _bfd_dummy_target}, {bfd_false, _bfd_ecoff_mkobject, /* bfd_set_format */ _bfd_generic_mkarchive, bfd_false}, {bfd_false, _bfd_ecoff_write_object_contents, /* bfd_write_contents */ @@ -1484,7 +1487,7 @@ const bfd_target ecoff_big_vec = bfd_getb32, bfd_getb_signed_32, bfd_putb32, bfd_getb16, bfd_getb_signed_16, bfd_putb16, {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ - _bfd_ecoff_archive_p, _bfd_dummy_target}, + bfd_generic_archive_p, _bfd_dummy_target}, {bfd_false, _bfd_ecoff_mkobject, /* bfd_set_format */ _bfd_generic_mkarchive, bfd_false}, {bfd_false, _bfd_ecoff_write_object_contents, /* bfd_write_contents */ @@ -1528,7 +1531,7 @@ const bfd_target ecoff_biglittle_vec = bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */ {_bfd_dummy_target, coff_object_p, /* bfd_check_format */ - _bfd_ecoff_archive_p, _bfd_dummy_target}, + bfd_generic_archive_p, _bfd_dummy_target}, {bfd_false, _bfd_ecoff_mkobject, /* bfd_set_format */ _bfd_generic_mkarchive, bfd_false}, {bfd_false, _bfd_ecoff_write_object_contents, /* bfd_write_contents */ diff --git a/bfd/coff-or32.c b/bfd/coff-or32.c index 39a47fd..30801fb 100644 --- a/bfd/coff-or32.c +++ b/bfd/coff-or32.c @@ -1,5 +1,6 @@ /* BFD back-end for OpenRISC 1000 COFF binaries. - Copyright 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. Contributed by Ivan Guzvinec This file is part of BFD, the Binary File Descriptor library. @@ -570,6 +571,10 @@ coff_or32_adjust_symndx (obfd, info, ibfd, sec, irel, adjustedp) #define coff_adjust_symndx coff_or32_adjust_symndx +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" const bfd_target or32coff_big_vec = diff --git a/bfd/coff-pmac.c b/bfd/coff-pmac.c index ea0fbe5..2c548b5 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, 2007 Free Software Foundation, Inc. + Copyright 1995, 2000, 2001, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c index 7e5f126..307b7c7 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Original version pieced together by Kim Knuttila (krk@cygnus.com) @@ -982,6 +982,18 @@ static bfd_boolean in_reloc_p(abfd, howto) && (howto->type != IMAGE_REL_PPC_TOCREL16_DEFN) ; } +static bfd_boolean +write_base_file_entry (bfd *obfd, struct bfd_link_info *info, bfd_vma addr) +{ + if (coff_data (obfd)->pe) + addr -= pe_data (obfd)->pe_opthdr.ImageBase; + if (fwrite (&addr, sizeof (addr), 1, (FILE *) info->base_file) == 1) + return TRUE; + + bfd_set_error (bfd_error_system_call); + return FALSE; +} + /* The reloc processing routine for the optimized COFF linker. */ static bfd_boolean @@ -1237,10 +1249,8 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, bfd_vma addr = (toc_section->output_section->vma + toc_section->output_offset + our_toc_offset); - if (coff_data (output_bfd)->pe) - addr -= pe_data(output_bfd)->pe_opthdr.ImageBase; - - fwrite (&addr, 1,4, (FILE *) info->base_file); + if (!write_base_file_entry (output_bfd, info, addr)) + return FALSE; } /* FIXME: this test is conservative. */ @@ -1453,15 +1463,13 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, /* Relocation to a symbol in a section which isn't absolute - we output the address here to a file. */ - bfd_vma addr = rel->r_vaddr - - input_section->vma - + input_section->output_offset - + input_section->output_section->vma; + bfd_vma addr = (rel->r_vaddr + - input_section->vma + + input_section->output_offset + + input_section->output_section->vma); - if (coff_data (output_bfd)->pe) - addr -= pe_data (output_bfd)->pe_opthdr.ImageBase; - - fwrite (&addr, 1,4, (FILE *) info->base_file); + if (!write_base_file_entry (output_bfd, info, addr)) + return FALSE; } } @@ -1535,9 +1543,9 @@ dump_toc (vfile) FILE *file = (FILE *) vfile; struct list_ele *t; - fprintf (file, _(h1)); - fprintf (file, _(h2)); - fprintf (file, _(h3)); + fputs (_(h1), file); + fputs (_(h2), file); + fputs (_(h3), file); for (t = head; t != 0; t=t->next) { @@ -1558,8 +1566,8 @@ dump_toc (vfile) { fprintf (file, _("**** global_toc_size %ld(%lx), thunk_size %ld(%lx)\n"), - global_toc_size, global_toc_size, - thunk_size, thunk_size); + global_toc_size, (unsigned long) global_toc_size, + thunk_size, (unsigned long) thunk_size); cat = _("Out of bounds!"); } } diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index d2d443f..e8d5484 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -1,6 +1,6 @@ /* BFD back-end for IBM RS/6000 "XCOFF" files. - Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1990-1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. 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. @@ -128,6 +128,10 @@ extern int rs6000coff_core_file_failing_signal #define coff_swap_reloc_out xcoff_swap_reloc_out #define NO_COFF_RELOCS +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" /* The main body of code is in coffcode.h. */ @@ -176,8 +180,6 @@ static bfd_boolean do_pad PARAMS ((bfd *, unsigned int)); static bfd_boolean do_copy PARAMS ((bfd *, bfd *)); -static bfd_boolean do_shared_object_padding - PARAMS ((bfd *, bfd *, file_ptr *, int)); /* Relocation functions */ static bfd_boolean xcoff_reloc_type_br @@ -234,6 +236,119 @@ bfd_boolean (*xcoff_complain_overflow[XCOFF_MAX_COMPLAIN_OVERFLOW]) xcoff_complain_overflow_unsigned_func, }; +/* Information about one member of an archive. */ +struct member_layout { + /* The archive member that this structure describes. */ + bfd *member; + + /* The number of bytes of padding that must be inserted before the + start of the member in order to ensure that the section contents + are correctly aligned. */ + unsigned int leading_padding; + + /* The offset of MEMBER from the start of the archive (i.e. the end + of the leading padding). */ + file_ptr offset; + + /* The normalized name of MEMBER. */ + const char *name; + + /* The length of NAME, without padding. */ + bfd_size_type namlen; + + /* The length of NAME, with padding. */ + bfd_size_type padded_namlen; + + /* The size of MEMBER's header, including the name and magic sequence. */ + bfd_size_type header_size; + + /* The size of the MEMBER's contents. */ + bfd_size_type contents_size; + + /* The number of bytes of padding that must be inserted after MEMBER + in order to preserve even alignment. */ + bfd_size_type trailing_padding; +}; + +/* A structure used for iterating over the members of an archive. */ +struct archive_iterator { + /* The archive itself. */ + bfd *archive; + + /* Information about the current archive member. */ + struct member_layout current; + + /* Information about the next archive member. MEMBER is null if there + are no more archive members, in which case OFFSET is the offset of + the first unused byte. */ + struct member_layout next; +}; + +/* Initialize INFO so that it describes member MEMBER of archive ARCHIVE. + OFFSET is the even-padded offset of MEMBER, not including any leading + padding needed for section alignment. */ + +static void +member_layout_init (struct member_layout *info, bfd *archive, + bfd *member, file_ptr offset) +{ + info->member = member; + info->leading_padding = 0; + if (member) + { + info->name = normalize_filename (member); + info->namlen = strlen (info->name); + info->padded_namlen = info->namlen + (info->namlen & 1); + if (xcoff_big_format_p (archive)) + info->header_size = SIZEOF_AR_HDR_BIG; + else + info->header_size = SIZEOF_AR_HDR; + info->header_size += info->padded_namlen + SXCOFFARFMAG; + info->contents_size = arelt_size (member); + info->trailing_padding = info->contents_size & 1; + + if (bfd_check_format (member, bfd_object) + && bfd_get_flavour (member) == bfd_target_xcoff_flavour + && (member->flags & DYNAMIC) != 0) + info->leading_padding + = (-(offset + info->header_size) + & ((1 << bfd_xcoff_text_align_power (member)) - 1)); + } + info->offset = offset + info->leading_padding; +} + +/* Set up ITERATOR to iterate through archive ARCHIVE. */ + +static void +archive_iterator_begin (struct archive_iterator *iterator, + bfd *archive) +{ + iterator->archive = archive; + member_layout_init (&iterator->next, archive, archive->archive_head, + xcoff_big_format_p (archive) + ? SIZEOF_AR_FILE_HDR_BIG + : SIZEOF_AR_FILE_HDR); +} + +/* Make ITERATOR visit the first unvisited archive member. Return true + on success; return false if all members have been visited. */ + +static bfd_boolean +archive_iterator_next (struct archive_iterator *iterator) +{ + if (!iterator->next.member) + return FALSE; + + iterator->current = iterator->next; + member_layout_init (&iterator->next, iterator->archive, + iterator->current.member->archive_next, + iterator->current.offset + + iterator->current.header_size + + iterator->current.contents_size + + iterator->current.trailing_padding); + return TRUE; +} + /* We use our own tdata type. Its first field is the COFF tdata type, so the COFF routines are compatible. */ @@ -380,11 +495,11 @@ _bfd_xcoff_swap_sym_out (abfd, inp, extp) } void -_bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) +_bfd_xcoff_swap_aux_in (abfd, ext1, type, in_class, indx, numaux, in1) bfd *abfd; PTR ext1; int type; - int class; + int in_class; int indx; int numaux; PTR in1; @@ -392,7 +507,7 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) AUXENT * ext = (AUXENT *)ext1; union internal_auxent *in = (union internal_auxent *)in1; - switch (class) + switch (in_class) { case C_FILE: if (ext->x_file.x_fname[0] == 0) @@ -418,6 +533,7 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) /* RS/6000 "csect" auxents */ case C_EXT: + case C_AIX_WEAKEXT: case C_HIDEXT: if (indx + 1 == numaux) { @@ -457,7 +573,8 @@ _bfd_xcoff_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx); in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx); - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { in->x_sym.x_fcnary.x_fcn.x_lnnoptr = H_GET_32 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); @@ -498,11 +615,11 @@ unsigned int _bfd_xcoff_swap_aux_out PARAMS ((bfd *, PTR, int, int, int, int, PTR)); unsigned int -_bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) +_bfd_xcoff_swap_aux_out (abfd, inp, type, in_class, indx, numaux, extp) bfd * abfd; PTR inp; int type; - int class; + int in_class; int indx ATTRIBUTE_UNUSED; int numaux ATTRIBUTE_UNUSED; PTR extp; @@ -511,7 +628,7 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) AUXENT *ext = (AUXENT *)extp; memset ((PTR)ext, 0, bfd_coff_auxesz (abfd)); - switch (class) + switch (in_class) { case C_FILE: if (in->x_file.x_fname[0] == 0) @@ -527,6 +644,7 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) /* RS/6000 "csect" auxents */ case C_EXT: + case C_AIX_WEAKEXT: case C_HIDEXT: if (indx + 1 == numaux) { @@ -560,7 +678,8 @@ _bfd_xcoff_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx); H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx); - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { H_PUT_32 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); @@ -1597,11 +1716,10 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx) unsigned int orl_count; int stridx; { + struct archive_iterator iterator; struct xcoff_ar_hdr hdr; char *p; unsigned char buf[4]; - bfd *sub; - file_ptr fileoff; unsigned int i; memset (&hdr, 0, sizeof hdr); @@ -1629,29 +1747,16 @@ xcoff_write_armap_old (abfd, elength, map, orl_count, stridx) if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) return FALSE; - sub = abfd->archive_head; - fileoff = SIZEOF_AR_FILE_HDR; i = 0; - while (sub != NULL && i < orl_count) - { - size_t namlen; - - while (map[i].u.abfd == sub) - { - H_PUT_32 (abfd, fileoff, buf); - if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) - return FALSE; - ++i; - } - namlen = strlen (normalize_filename (sub)); - namlen = (namlen + 1) &~ (size_t) 1; - fileoff += (SIZEOF_AR_HDR - + namlen - + SXCOFFARFMAG - + arelt_size (sub)); - fileoff = (fileoff + 1) &~ 1; - sub = sub->archive_next; - } + archive_iterator_begin (&iterator, abfd); + while (i < orl_count && archive_iterator_next (&iterator)) + while (map[i].u.abfd == iterator.current.member) + { + H_PUT_32 (abfd, iterator.current.offset, buf); + if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4) + return FALSE; + ++i; + } for (i = 0; i < orl_count; i++) { @@ -1752,34 +1857,6 @@ do_copy (out_bfd, in_bfd) return TRUE; } -static bfd_boolean -do_shared_object_padding (out_bfd, in_bfd, offset, ar_header_size) - bfd *out_bfd; - bfd *in_bfd; - file_ptr *offset; - int ar_header_size; -{ - if (bfd_check_format (in_bfd, bfd_object) - && bfd_get_flavour (in_bfd) == bfd_target_xcoff_flavour - && (in_bfd->flags & DYNAMIC) != 0) - { - bfd_size_type pad = 0; - int text_align_power; - - text_align_power = bfd_xcoff_text_align_power (in_bfd); - - pad = 1 << text_align_power; - pad -= (*offset + ar_header_size) & (pad - 1); - - if (! do_pad (out_bfd, pad)) - return FALSE; - - *offset += pad; - } - - return TRUE; -} - static bfd_boolean xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) bfd *abfd; @@ -1788,9 +1865,10 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) unsigned int orl_count; int stridx; { + struct archive_iterator iterator; struct xcoff_ar_file_hdr_big *fhdr; bfd_vma i, sym_32, sym_64, str_32, str_64; - const bfd_arch_info_type *arch_info = NULL; + const bfd_arch_info_type *arch_info; bfd *current_bfd; size_t string_length; file_ptr nextoff, prevoff; @@ -1799,16 +1877,15 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) from 32-bit objects and which from 64-bit ones. */ sym_32 = sym_64 = str_32 = str_64 = 0; - current_bfd = abfd->archive_head; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); - i = 0; - while (current_bfd != NULL && i < orl_count) + i = 0; + for (current_bfd = abfd->archive_head; + current_bfd != NULL && i < orl_count; + current_bfd = current_bfd->archive_next) { + arch_info = bfd_get_arch_info (current_bfd); while (map[i].u.abfd == current_bfd) { string_length = strlen (*map[i].name) + 1; - if (arch_info->bits_per_address == 64) { sym_64++; @@ -1821,9 +1898,6 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) } i++; } - current_bfd = current_bfd->archive_next; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); } /* A quick sanity check... */ @@ -1865,7 +1939,6 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) struct xcoff_ar_hdr_big *hdr; char *symbol_table; char *st; - file_ptr fileoff; bfd_vma symbol_table_size = SIZEOF_AR_HDR_BIG @@ -1902,41 +1975,29 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) st += 8; /* loop over the 32 bit offsets */ - current_bfd = abfd->archive_head; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); - fileoff = SIZEOF_AR_FILE_HDR_BIG; i = 0; - while (current_bfd != NULL && i < orl_count) + archive_iterator_begin (&iterator, abfd); + while (i < orl_count && archive_iterator_next (&iterator)) { - while (map[i].u.abfd == current_bfd) + arch_info = bfd_get_arch_info (iterator.current.member); + while (map[i].u.abfd == iterator.current.member) { if (arch_info->bits_per_address == 32) { - bfd_h_put_64 (abfd, fileoff, st); + bfd_h_put_64 (abfd, iterator.current.offset, st); st += 8; } i++; } - string_length = strlen (normalize_filename (current_bfd)); - string_length += string_length & 1; - fileoff += (SIZEOF_AR_HDR_BIG - + string_length - + SXCOFFARFMAG - + arelt_size (current_bfd)); - fileoff += fileoff & 1; - current_bfd = current_bfd->archive_next; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); } /* loop over the 32 bit symbol names */ - current_bfd = abfd->archive_head; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); i = 0; - while (current_bfd != NULL && i < orl_count) + for (current_bfd = abfd->archive_head; + current_bfd != NULL && i < orl_count; + current_bfd = current_bfd->archive_next) { + arch_info = bfd_get_arch_info (current_bfd); while (map[i].u.abfd == current_bfd) { if (arch_info->bits_per_address == 32) @@ -1946,9 +2007,6 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) } i++; } - current_bfd = current_bfd->archive_next; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); } bfd_bwrite (symbol_table, symbol_table_size, abfd); @@ -1966,7 +2024,6 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) struct xcoff_ar_hdr_big *hdr; char *symbol_table; char *st; - file_ptr fileoff; bfd_vma symbol_table_size = SIZEOF_AR_HDR_BIG @@ -1998,41 +2055,29 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) st += 8; /* loop over the 64 bit offsets */ - current_bfd = abfd->archive_head; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); - fileoff = SIZEOF_AR_FILE_HDR_BIG; i = 0; - while (current_bfd != NULL && i < orl_count) + archive_iterator_begin (&iterator, abfd); + while (i < orl_count && archive_iterator_next (&iterator)) { - while (map[i].u.abfd == current_bfd) + arch_info = bfd_get_arch_info (iterator.current.member); + while (map[i].u.abfd == iterator.current.member) { if (arch_info->bits_per_address == 64) { - bfd_h_put_64 (abfd, fileoff, st); + bfd_h_put_64 (abfd, iterator.current.offset, st); st += 8; } i++; } - string_length = strlen (normalize_filename (current_bfd)); - string_length += string_length & 1; - fileoff += (SIZEOF_AR_HDR_BIG - + string_length - + SXCOFFARFMAG - + arelt_size (current_bfd)); - fileoff += fileoff & 1; - current_bfd = current_bfd->archive_next; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); } /* loop over the 64 bit symbol names */ - current_bfd = abfd->archive_head; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); i = 0; - while (current_bfd != NULL && i < orl_count) + for (current_bfd = abfd->archive_head; + current_bfd != NULL && i < orl_count; + current_bfd = current_bfd->archive_next) { + arch_info = bfd_get_arch_info (current_bfd); while (map[i].u.abfd == current_bfd) { if (arch_info->bits_per_address == 64) @@ -2042,9 +2087,6 @@ xcoff_write_armap_big (abfd, elength, map, orl_count, stridx) } i++; } - current_bfd = current_bfd->archive_next; - if (current_bfd != NULL) - arch_info = bfd_get_arch_info (current_bfd); } bfd_bwrite (symbol_table, symbol_table_size, abfd); @@ -2080,6 +2122,7 @@ static bfd_boolean xcoff_write_archive_contents_old (abfd) bfd *abfd; { + struct archive_iterator iterator; struct xcoff_ar_file_hdr fhdr; bfd_size_type count; bfd_size_type total_namlen; @@ -2105,118 +2148,92 @@ xcoff_write_archive_contents_old (abfd) { ++count; total_namlen += strlen (normalize_filename (sub)) + 1; - } - offsets = (file_ptr *) bfd_alloc (abfd, count * sizeof (file_ptr)); - if (offsets == NULL) - return FALSE; - - if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR, SEEK_SET) != 0) - return FALSE; - - makemap = bfd_has_map (abfd); - hasobjects = FALSE; - prevoff = 0; - nextoff = SIZEOF_AR_FILE_HDR; - for (sub = abfd->archive_head, i = 0; - sub != NULL; - sub = sub->archive_next, i++) - { - const char *name; - bfd_size_type namlen; - struct xcoff_ar_hdr *ahdrp; - bfd_size_type remaining; - - if (makemap && ! hasobjects) + if (sub->arelt_data == NULL) { - if (bfd_check_format (sub, bfd_object)) - hasobjects = TRUE; + sub->arelt_data = bfd_zalloc (sub, sizeof (struct areltdata)); + if (sub->arelt_data == NULL) + return FALSE; } - - name = normalize_filename (sub); - namlen = strlen (name); - - if (sub->arelt_data != NULL) - ahdrp = arch_xhdr (sub); - else - ahdrp = NULL; - - if (ahdrp == NULL) + if (arch_xhdr (sub) == NULL) { + struct xcoff_ar_hdr *ahdrp; struct stat s; - memset (&ahdr, 0, sizeof ahdr); - ahdrp = &ahdr; if (stat (bfd_get_filename (sub), &s) != 0) { bfd_set_error (bfd_error_system_call); return FALSE; } + ahdrp = bfd_zalloc (sub, sizeof (*ahdrp)); + if (ahdrp == NULL) + return FALSE; + sprintf (ahdrp->size, "%ld", (long) s.st_size); sprintf (ahdrp->date, "%ld", (long) s.st_mtime); sprintf (ahdrp->uid, "%ld", (long) s.st_uid); sprintf (ahdrp->gid, "%ld", (long) s.st_gid); sprintf (ahdrp->mode, "%o", (unsigned int) s.st_mode); - if (sub->arelt_data == NULL) - { - size = sizeof (struct areltdata); - sub->arelt_data = bfd_alloc (sub, size); - if (sub->arelt_data == NULL) - return FALSE; - } - + arch_eltdata (sub)->arch_header = (char *) ahdrp; arch_eltdata (sub)->parsed_size = s.st_size; } + } + offsets = (file_ptr *) bfd_alloc (abfd, count * sizeof (file_ptr)); + if (offsets == NULL) + return FALSE; - sprintf (ahdrp->prevoff, "%ld", (long) prevoff); - sprintf (ahdrp->namlen, "%ld", (long) namlen); - - /* If the length of the name is odd, we write out the null byte - after the name as well. */ - namlen = (namlen + 1) &~ (bfd_size_type) 1; - - remaining = arelt_size (sub); - size = (SIZEOF_AR_HDR - + namlen - + SXCOFFARFMAG - + remaining); - - BFD_ASSERT (nextoff == bfd_tell (abfd)); + if (bfd_seek (abfd, (file_ptr) SIZEOF_AR_FILE_HDR, SEEK_SET) != 0) + return FALSE; - offsets[i] = nextoff; + makemap = bfd_has_map (abfd); + hasobjects = FALSE; + prevoff = 0; + for (archive_iterator_begin (&iterator, abfd), i = 0; + archive_iterator_next (&iterator); + i++) + { + bfd_size_type namlen; + struct xcoff_ar_hdr *ahdrp; - prevoff = nextoff; - nextoff += size + (size & 1); + if (makemap && ! hasobjects) + { + if (bfd_check_format (iterator.current.member, bfd_object)) + hasobjects = TRUE; + } - sprintf (ahdrp->nextoff, "%ld", (long) nextoff); + ahdrp = arch_xhdr (iterator.current.member); + sprintf (ahdrp->prevoff, "%ld", (long) prevoff); + sprintf (ahdrp->namlen, "%ld", (long) iterator.current.namlen); + sprintf (ahdrp->nextoff, "%ld", (long) iterator.next.offset); /* We need spaces, not null bytes, in the header. */ for (p = (char *) ahdrp; p < (char *) ahdrp + SIZEOF_AR_HDR; p++) if (*p == '\0') *p = ' '; - if ((bfd_bwrite ((PTR) ahdrp, (bfd_size_type) SIZEOF_AR_HDR, abfd) - != SIZEOF_AR_HDR) - || bfd_bwrite ((PTR) name, namlen, abfd) != namlen - || bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, - abfd) != SXCOFFARFMAG) + if (!do_pad (abfd, iterator.current.leading_padding)) return FALSE; - if (bfd_seek (sub, (file_ptr) 0, SEEK_SET) != 0) + BFD_ASSERT (iterator.current.offset == bfd_tell (abfd)); + namlen = iterator.current.padded_namlen; + if (bfd_bwrite (ahdrp, SIZEOF_AR_HDR, abfd) != SIZEOF_AR_HDR + || bfd_bwrite (iterator.current.name, namlen, abfd) != namlen + || bfd_bwrite (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG + || bfd_seek (iterator.current.member, 0, SEEK_SET) != 0 + || !do_copy (abfd, iterator.current.member) + || !do_pad (abfd, iterator.current.trailing_padding)) return FALSE; - if (! do_copy (abfd, sub)) - return FALSE; - - if (! do_pad (abfd, size & 1)) - return FALSE; + offsets[i] = iterator.current.offset; + prevoff = iterator.current.offset; } sprintf (fhdr.lastmemoff, "%ld", (long) prevoff); /* Write out the member table. */ + nextoff = iterator.next.offset; BFD_ASSERT (nextoff == bfd_tell (abfd)); sprintf (fhdr.memoff, "%ld", (long) nextoff); @@ -2321,10 +2338,11 @@ xcoff_write_archive_contents_big (abfd) file_ptr prevoff, nextoff; bfd *current_bfd; size_t i; - struct xcoff_ar_hdr_big *hdr, ahdr; + struct xcoff_ar_hdr_big *hdr; bfd_size_type size; char *member_table, *mt; bfd_vma member_table_size; + struct archive_iterator iterator; memset (&fhdr, 0, SIZEOF_AR_FILE_HDR_BIG); memcpy (fhdr.magic, XCOFFARMAGBIG, SXCOFFARMAG); @@ -2345,40 +2363,20 @@ xcoff_write_archive_contents_big (abfd) && ! hasobjects && bfd_check_format (current_bfd, bfd_object)) hasobjects = TRUE; - } - offsets = NULL; - if (count) - { - offsets = (file_ptr *) bfd_malloc (count * sizeof (file_ptr)); - if (offsets == NULL) - return FALSE; - } - - prevoff = 0; - nextoff = SIZEOF_AR_FILE_HDR_BIG; - for (current_bfd = abfd->archive_head, i = 0; - current_bfd != NULL; - current_bfd = current_bfd->archive_next, i++) - { - const char *name; - bfd_size_type namlen; - struct xcoff_ar_hdr_big *ahdrp; - bfd_size_type remaining; - - name = normalize_filename (current_bfd); - namlen = strlen (name); - - if (current_bfd->arelt_data != NULL) - ahdrp = arch_xhdr_big (current_bfd); - else - ahdrp = NULL; + if (current_bfd->arelt_data == NULL) + { + size = sizeof (struct areltdata); + current_bfd->arelt_data = bfd_zalloc (current_bfd, size); + if (current_bfd->arelt_data == NULL) + return FALSE; + } - if (ahdrp == NULL) + if (arch_xhdr_big (current_bfd) == NULL) { + struct xcoff_ar_hdr_big *ahdrp; struct stat s; - ahdrp = &ahdr; /* XXX This should actually be a call to stat64 (at least on 32-bit machines). XXX This call will fail if the original object is not found. */ @@ -2388,68 +2386,57 @@ xcoff_write_archive_contents_big (abfd) return FALSE; } + ahdrp = bfd_zalloc (current_bfd, sizeof (*ahdrp)); + if (ahdrp == NULL) + return FALSE; + PRINT20 (ahdrp->size, s.st_size); PRINT12 (ahdrp->date, s.st_mtime); PRINT12 (ahdrp->uid, s.st_uid); PRINT12 (ahdrp->gid, s.st_gid); PRINT12_OCTAL (ahdrp->mode, s.st_mode); - if (current_bfd->arelt_data == NULL) - { - size = sizeof (struct areltdata); - current_bfd->arelt_data = bfd_alloc (current_bfd, size); - if (current_bfd->arelt_data == NULL) - return FALSE; - } - + arch_eltdata (current_bfd)->arch_header = (char *) ahdrp; arch_eltdata (current_bfd)->parsed_size = s.st_size; } + } - PRINT20 (ahdrp->prevoff, prevoff); - PRINT4 (ahdrp->namlen, namlen); - - /* If the length of the name is odd, we write out the null byte - after the name as well. */ - namlen = (namlen + 1) &~ (bfd_size_type) 1; - - remaining = arelt_size (current_bfd); - size = (SIZEOF_AR_HDR_BIG - + namlen - + SXCOFFARFMAG - + remaining); - - BFD_ASSERT (nextoff == bfd_tell (abfd)); - - /* Check for xcoff shared objects. - Their text section needs to be aligned wrt the archive file position. - This requires extra padding before the archive header. */ - if (! do_shared_object_padding (abfd, current_bfd, & nextoff, - SIZEOF_AR_HDR_BIG + namlen - + SXCOFFARFMAG)) + offsets = NULL; + if (count) + { + offsets = (file_ptr *) bfd_malloc (count * sizeof (file_ptr)); + if (offsets == NULL) return FALSE; + } - offsets[i] = nextoff; - - prevoff = nextoff; - nextoff += size + (size & 1); - - PRINT20 (ahdrp->nextoff, nextoff); + prevoff = 0; + for (archive_iterator_begin (&iterator, abfd), i = 0; + archive_iterator_next (&iterator); + i++) + { + bfd_size_type namlen; + struct xcoff_ar_hdr_big *ahdrp; - if ((bfd_bwrite ((PTR) ahdrp, (bfd_size_type) SIZEOF_AR_HDR_BIG, abfd) - != SIZEOF_AR_HDR_BIG) - || bfd_bwrite ((PTR) name, (bfd_size_type) namlen, abfd) != namlen - || (bfd_bwrite ((PTR) XCOFFARFMAG, (bfd_size_type) SXCOFFARFMAG, - abfd) != SXCOFFARFMAG)) - return FALSE; + ahdrp = arch_xhdr_big (iterator.current.member); + PRINT20 (ahdrp->prevoff, prevoff); + PRINT4 (ahdrp->namlen, iterator.current.namlen); + PRINT20 (ahdrp->nextoff, iterator.next.offset); - if (bfd_seek (current_bfd, (file_ptr) 0, SEEK_SET) != 0) + if (!do_pad (abfd, iterator.current.leading_padding)) return FALSE; - if (! do_copy (abfd, current_bfd)) + BFD_ASSERT (iterator.current.offset == bfd_tell (abfd)); + namlen = iterator.current.padded_namlen; + if (bfd_bwrite (ahdrp, SIZEOF_AR_HDR_BIG, abfd) != SIZEOF_AR_HDR_BIG + || bfd_bwrite (iterator.current.name, namlen, abfd) != namlen + || bfd_bwrite (XCOFFARFMAG, SXCOFFARFMAG, abfd) != SXCOFFARFMAG + || bfd_seek (iterator.current.member, 0, SEEK_SET) != 0 + || !do_copy (abfd, iterator.current.member) + || !do_pad (abfd, iterator.current.trailing_padding)) return FALSE; - if (! do_pad (abfd, size & 1)) - return FALSE; + offsets[i] = iterator.current.offset; + prevoff = iterator.current.offset; } if (count) @@ -2479,6 +2466,7 @@ xcoff_write_archive_contents_big (abfd) ?? pad to even bytes. */ + nextoff = iterator.next.offset; BFD_ASSERT (nextoff == bfd_tell (abfd)); member_table_size = (SIZEOF_AR_HDR_BIG @@ -2943,11 +2931,13 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, bfd_byte *contents; { struct xcoff_link_hash_entry *h; + bfd_vma section_offset; if (0 > rel->r_symndx) return FALSE; h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx]; + section_offset = rel->r_vaddr - input_section->vma; /* If we see an R_BR or R_RBR reloc which is jumping to global linkage code, and it is followed by an appropriate cror nop @@ -2957,13 +2947,14 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, going to global linkage code, we can replace the load with a cror. */ if (NULL != h - && bfd_link_hash_defined == h->root.type - && rel->r_vaddr - input_section->vma + 8 <= input_section->size) + && (bfd_link_hash_defined == h->root.type + || bfd_link_hash_defweak == h->root.type) + && section_offset + 8 <= input_section->size) { bfd_byte *pnext; unsigned long next; - pnext = contents + (rel->r_vaddr - input_section->vma) + 4; + pnext = contents + section_offset + 4; next = bfd_get_32 (input_bfd, pnext); /* The _ptrgl function is magic. It is used by the AIX @@ -2973,12 +2964,12 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, if (next == 0x4def7b82 /* cror 15,15,15 */ || next == 0x4ffffb82 /* cror 31,31,31 */ || next == 0x60000000) /* ori r0,r0,0 */ - bfd_put_32 (input_bfd, 0x80410014, pnext); /* lwz r1,20(r1) */ + bfd_put_32 (input_bfd, 0x80410014, pnext); /* lwz r2,20(r1) */ } else { - if (next == 0x80410014) /* lwz r1,20(r1) */ + if (next == 0x80410014) /* lwz r2,20(r1) */ bfd_put_32 (input_bfd, 0x60000000, pnext); /* ori r0,r0,0 */ } } @@ -2994,16 +2985,42 @@ xcoff_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, howto->complain_on_overflow = complain_overflow_dont; } - howto->pc_relative = TRUE; + /* The original PC-relative relocation is biased by -r_vaddr, so adding + the value below will give the absolute target address. */ + *relocation = val + addend + rel->r_vaddr; + howto->src_mask &= ~3; howto->dst_mask = howto->src_mask; - /* A PC relative reloc includes the section address. */ - addend += input_section->vma; - - *relocation = val + addend; - *relocation -= (input_section->output_section->vma - + input_section->output_offset); + if (h != NULL + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && bfd_is_abs_section (h->root.u.def.section) + && section_offset + 4 <= input_section->size) + { + bfd_byte *ptr; + bfd_vma insn; + + /* Turn the relative branch into an absolute one by setting the + AA bit. */ + ptr = contents + section_offset; + insn = bfd_get_32 (input_bfd, ptr); + insn |= 2; + bfd_put_32 (input_bfd, insn, ptr); + + /* Make the howto absolute too. */ + howto->pc_relative = FALSE; + howto->complain_on_overflow = complain_overflow_bitfield; + } + else + { + /* Use a PC-relative howto and subtract the instruction's address + from the target address we calculated above. */ + howto->pc_relative = TRUE; + *relocation -= (input_section->output_section->vma + + input_section->output_offset + + section_offset); + } return TRUE; } @@ -3319,9 +3336,7 @@ xcoff_complain_overflow_unsigned_func (input_bfd, val, relocation, howto) R_RBR: A relative branch which may be modified to become an - absolute branch. FIXME: We don't implement this, - although we should for symbols of storage mapping class - XMC_XO. + absolute branch. R_RL: The PowerPC AIX ABI describes this as a load which may be @@ -3418,6 +3433,17 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, } else { + if (info->unresolved_syms_in_objects != RM_IGNORE + && (h->flags & XCOFF_WAS_UNDEFINED) != 0) + { + if (! ((*info->callbacks->undefined_symbol) + (info, h->root.root.string, + input_bfd, input_section, + rel->r_vaddr - input_section->vma, + (info->unresolved_syms_in_objects + == RM_GENERATE_ERROR)))) + return FALSE; + } if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) { @@ -3433,17 +3459,13 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, + sec->output_offset); } - else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT))) - && ! info->relocatable) + else { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - - /* Don't try to process the reloc. It can't help, and - it may generate another error. */ - continue; + BFD_ASSERT (info->relocatable + || (info->static_link + && (h->flags & XCOFF_WAS_UNDEFINED) != 0) + || (h->flags & XCOFF_DEF_DYNAMIC) != 0 + || (h->flags & XCOFF_IMPORT) != 0); } } } @@ -4007,7 +4029,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = LINESZ, FILNMLEN, TRUE, /* _bfd_coff_long_filenames */ - FALSE, /* _bfd_coff_long_section_names */ + XCOFF_NO_LONG_SECTION_NAMES, /* _bfd_coff_long_section_names */ 3, /* _bfd_coff_default_section_alignment_power */ FALSE, /* _bfd_coff_force_symnames_in_strings */ 2, /* _bfd_coff_debug_string_prefix_length */ @@ -4034,7 +4056,8 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = NULL, /* _bfd_coff_adjust_symndx */ _bfd_generic_link_add_one_symbol, coff_link_output_has_begun, - coff_final_link_postscript + coff_final_link_postscript, + NULL /* print_pdata. */ }, 0x01DF, /* magic number */ @@ -4214,6 +4237,7 @@ const bfd_target rs6000coff_vec = bfd_generic_is_group_section, bfd_generic_discard_group, _bfd_generic_section_already_linked, + _bfd_xcoff_define_common_symbol, /* Dynamic */ _bfd_xcoff_get_dynamic_symtab_upper_bound, @@ -4258,7 +4282,7 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = LINESZ, FILNMLEN, TRUE, /* _bfd_coff_long_filenames */ - FALSE, /* _bfd_coff_long_section_names */ + XCOFF_NO_LONG_SECTION_NAMES, /* _bfd_coff_long_section_names */ 3, /* _bfd_coff_default_section_alignment_power */ FALSE, /* _bfd_coff_force_symnames_in_strings */ 2, /* _bfd_coff_debug_string_prefix_length */ @@ -4285,7 +4309,8 @@ static const struct xcoff_backend_data_rec bfd_pmac_xcoff_backend_data = NULL, /* _bfd_coff_adjust_symndx */ _bfd_generic_link_add_one_symbol, coff_link_output_has_begun, - coff_final_link_postscript + coff_final_link_postscript, + NULL /* print_pdata. */ }, 0x01DF, /* magic number */ @@ -4465,6 +4490,7 @@ const bfd_target pmac_xcoff_vec = bfd_generic_is_group_section, bfd_generic_discard_group, _bfd_generic_section_already_linked, + _bfd_xcoff_define_common_symbol, /* Dynamic */ _bfd_xcoff_get_dynamic_symtab_upper_bound, diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c index 796a88e..28ac0ab 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Steve Chamberlain, . Relaxing code written by Ian Lance Taylor, . @@ -30,6 +30,8 @@ #include "coff/sh.h" #include "coff/internal.h" +#undef bfd_pe_print_pdata + #ifdef COFF_WITH_PE #include "coff/pe.h" @@ -41,7 +43,14 @@ static bfd_boolean sh_align_load_span #define _bfd_sh_align_load_span sh_align_load_span #endif -#endif + +#define bfd_pe_print_pdata _bfd_pe_print_ce_compressed_pdata + +#else + +#define bfd_pe_print_pdata NULL + +#endif /* COFF_WITH_PE. */ #include "libcoff.h" @@ -3112,7 +3121,7 @@ coff_small_new_section_hook (abfd, section) /* This is copied from bfd_coff_std_swap_table so that we can change the default section alignment power. */ -static const bfd_coff_backend_data bfd_coff_small_swap_table = +static bfd_coff_backend_data bfd_coff_small_swap_table = { coff_swap_aux_in, coff_swap_sym_in, coff_swap_lineno_in, coff_swap_aux_out, coff_swap_sym_out, @@ -3125,11 +3134,7 @@ static const bfd_coff_backend_data bfd_coff_small_swap_table = #else FALSE, #endif -#ifdef COFF_LONG_SECTION_NAMES - TRUE, -#else - FALSE, -#endif + COFF_DEFAULT_LONG_SECTION_NAMES, 2, #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS TRUE, @@ -3149,7 +3154,8 @@ static const bfd_coff_backend_data bfd_coff_small_swap_table = coff_classify_symbol, coff_compute_section_file_positions, coff_start_final_link, coff_relocate_section, coff_rtype_to_howto, coff_adjust_symndx, coff_link_add_one_symbol, - coff_link_output_has_begun, coff_final_link_postscript + coff_link_output_has_begun, coff_final_link_postscript, + bfd_pe_print_pdata }; #define coff_small_close_and_cleanup \ diff --git a/bfd/coff-sparc.c b/bfd/coff-sparc.c index eb8e08b..a9a699a 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, 2007 Free Software Foundation, Inc. + 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -206,6 +206,8 @@ rtype2howto (cache_ptr, dst) #define COFF_SPARC +#define bfd_pe_print_pdata NULL + #include "coffcode.h" #ifndef TARGET_SYM diff --git a/bfd/coff-stgo32.c b/bfd/coff-stgo32.c index b8928be..78a4936 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, 2006, 2007 + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Robert Hoehne. @@ -102,9 +102,6 @@ static bfd_boolean #include "coff-i386.c" -/* I hold in the usrdata the stub. */ -#define bfd_coff_go32stub bfd_usrdata - /* This macro is used, because I cannot assume the endianess of the host system. */ #define _H(index) (H_GET_16 (abfd, (header+index*2))) @@ -112,7 +109,7 @@ static bfd_boolean /* These bytes are a 2048-byte DOS executable, which loads the COFF image into memory and then runs it. It is called 'stub'. */ -static const unsigned char stub_bytes[STUBSIZE] = +static const unsigned char stub_bytes[GO32_STUBSIZE] = { #include "go32stub.h" }; @@ -120,7 +117,7 @@ static const unsigned char stub_bytes[STUBSIZE] = /* I have not commented each swap function below, because the technique is in any function the same. For the ...in function, - all the pointers are adjusted by adding STUBSIZE and for the + all the pointers are adjusted by adding GO32_STUBSIZE and for the ...out function, it is subtracted first and after calling the standard swap function it is reset to the old value. */ @@ -132,25 +129,20 @@ static const unsigned char stub_bytes[STUBSIZE] = static void adjust_filehdr_in_post (abfd, src, dst) - bfd *abfd; + bfd *abfd ATTRIBUTE_UNUSED; PTR src; PTR dst; { FILHDR *filehdr_src = (FILHDR *) src; struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst; - ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE); + ADJUST_VAL (filehdr_dst->f_symptr, GO32_STUBSIZE); - /* Save now the stub to be used later. */ - bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE); - - /* Since this function returns no status, I do not set here - any bfd_error_... - That means, before the use of bfd_coff_go32stub (), this value - should be checked if it is != NULL. */ - if (bfd_coff_go32stub (abfd) == NULL) - return; - memcpy (bfd_coff_go32stub (abfd), filehdr_src->stub, STUBSIZE); + /* Save now the stub to be used later. Put the stub data to FILEHDR_DST + first as coff_data (abfd) still does not exist. It may not even be ever + created as we are just checking the file format of ABFD. */ + memcpy (filehdr_dst->go32stub, filehdr_src->stub, GO32_STUBSIZE); + filehdr_dst->f_flags |= F_GO32STUB; } static void @@ -166,13 +158,13 @@ adjust_filehdr_out_pre (abfd, in, out) create_go32_stub (abfd); /* Copy the stub to the file header. */ - if (bfd_coff_go32stub (abfd) != NULL) - memcpy (filehdr_out->stub, bfd_coff_go32stub (abfd), STUBSIZE); + if (coff_data (abfd)->go32stub != NULL) + memcpy (filehdr_out->stub, coff_data (abfd)->go32stub, GO32_STUBSIZE); else /* Use the default. */ - memcpy (filehdr_out->stub, stub_bytes, STUBSIZE); + memcpy (filehdr_out->stub, stub_bytes, GO32_STUBSIZE); - ADJUST_VAL (filehdr_in->f_symptr, -STUBSIZE); + ADJUST_VAL (filehdr_in->f_symptr, -GO32_STUBSIZE); } static void @@ -183,7 +175,7 @@ adjust_filehdr_out_post (abfd, in, out) { struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in; /* Undo the above change. */ - ADJUST_VAL (filehdr_in->f_symptr, STUBSIZE); + ADJUST_VAL (filehdr_in->f_symptr, GO32_STUBSIZE); } static void @@ -194,9 +186,9 @@ adjust_scnhdr_in_post (abfd, ext, in) { struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; - ADJUST_VAL (scnhdr_int->s_scnptr, STUBSIZE); - ADJUST_VAL (scnhdr_int->s_relptr, STUBSIZE); - ADJUST_VAL (scnhdr_int->s_lnnoptr, STUBSIZE); + ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE); + ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE); + ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE); } static void @@ -207,9 +199,9 @@ adjust_scnhdr_out_pre (abfd, in, out) { struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; - ADJUST_VAL (scnhdr_int->s_scnptr, -STUBSIZE); - ADJUST_VAL (scnhdr_int->s_relptr, -STUBSIZE); - ADJUST_VAL (scnhdr_int->s_lnnoptr, -STUBSIZE); + ADJUST_VAL (scnhdr_int->s_scnptr, -GO32_STUBSIZE); + ADJUST_VAL (scnhdr_int->s_relptr, -GO32_STUBSIZE); + ADJUST_VAL (scnhdr_int->s_lnnoptr, -GO32_STUBSIZE); } static void @@ -220,62 +212,65 @@ adjust_scnhdr_out_post (abfd, in, out) { struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in; - ADJUST_VAL (scnhdr_int->s_scnptr, STUBSIZE); - ADJUST_VAL (scnhdr_int->s_relptr, STUBSIZE); - ADJUST_VAL (scnhdr_int->s_lnnoptr, STUBSIZE); + ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE); + ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE); + ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE); } static void -adjust_aux_in_post (abfd, ext1, type, class, indx, numaux, in1) +adjust_aux_in_post (abfd, ext1, type, in_class, indx, numaux, in1) bfd *abfd ATTRIBUTE_UNUSED; PTR ext1 ATTRIBUTE_UNUSED; int type; - int class; + int in_class; int indx ATTRIBUTE_UNUSED; int numaux ATTRIBUTE_UNUSED; PTR in1; { union internal_auxent *in = (union internal_auxent *) in1; - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { - ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, STUBSIZE); + ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE); } } static void -adjust_aux_out_pre (abfd, inp, type, class, indx, numaux, extp) +adjust_aux_out_pre (abfd, inp, type, in_class, indx, numaux, extp) bfd *abfd ATTRIBUTE_UNUSED; PTR inp; int type; - int class; + int in_class; int indx ATTRIBUTE_UNUSED; int numaux ATTRIBUTE_UNUSED; PTR extp ATTRIBUTE_UNUSED; { union internal_auxent *in = (union internal_auxent *) inp; - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { - ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -STUBSIZE); + ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -GO32_STUBSIZE); } } static void -adjust_aux_out_post (abfd, inp, type, class, indx, numaux, extp) +adjust_aux_out_post (abfd, inp, type, in_class, indx, numaux, extp) bfd *abfd ATTRIBUTE_UNUSED; PTR inp; int type; - int class; + int in_class; int indx ATTRIBUTE_UNUSED; int numaux ATTRIBUTE_UNUSED; PTR extp ATTRIBUTE_UNUSED; { union internal_auxent *in = (union internal_auxent *) inp; - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { - ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, STUBSIZE); + ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE); } } @@ -296,7 +291,7 @@ create_go32_stub (abfd) bfd *abfd; { /* Do it only once. */ - if (bfd_coff_go32stub (abfd) == NULL) + if (coff_data (abfd)->go32stub == NULL) { char *stub; struct stat st; @@ -362,32 +357,31 @@ create_go32_stub (abfd) goto stub_end; } /* Now we found a correct stub (hopefully). */ - bfd_coff_go32stub (abfd) - = (PTR) bfd_alloc (abfd, (bfd_size_type) coff_start); - if (bfd_coff_go32stub (abfd) == NULL) + coff_data (abfd)->go32stub = bfd_alloc (abfd, (bfd_size_type) coff_start); + if (coff_data (abfd)->go32stub == NULL) { close (f); return; } lseek (f, 0L, SEEK_SET); - if ((unsigned long) read (f, bfd_coff_go32stub (abfd), coff_start) + if ((unsigned long) read (f, coff_data (abfd)->go32stub, coff_start) != coff_start) { - bfd_release (abfd, bfd_coff_go32stub (abfd)); - bfd_coff_go32stub (abfd) = NULL; + bfd_release (abfd, coff_data (abfd)->go32stub); + coff_data (abfd)->go32stub = NULL; } close (f); } stub_end: /* There was something wrong above, so use now the standard builtin stub. */ - if (bfd_coff_go32stub (abfd) == NULL) + if (coff_data (abfd)->go32stub == NULL) { - bfd_coff_go32stub (abfd) - = (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE); - if (bfd_coff_go32stub (abfd) == NULL) + coff_data (abfd)->go32stub + = bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE); + if (coff_data (abfd)->go32stub == NULL) return; - memcpy (bfd_coff_go32stub (abfd), stub_bytes, STUBSIZE); + memcpy (coff_data (abfd)->go32stub, stub_bytes, GO32_STUBSIZE); } } @@ -403,13 +397,20 @@ go32_stubbed_coff_bfd_copy_private_bfd_data (ibfd, obfd) if (ibfd->xvec != obfd->xvec) return TRUE; - /* Check if both have a valid stub. */ - if (bfd_coff_go32stub (ibfd) == NULL - || bfd_coff_go32stub (obfd) == NULL) + /* Check if we have a source stub. */ + if (coff_data (ibfd)->go32stub == NULL) return TRUE; + /* As adjust_filehdr_out_pre may get called only after this function, + optionally allocate the output stub. */ + if (coff_data (obfd)->go32stub == NULL) + coff_data (obfd)->go32stub = bfd_alloc (obfd, + (bfd_size_type) GO32_STUBSIZE); + /* Now copy the stub. */ - memcpy (bfd_coff_go32stub (obfd), bfd_coff_go32stub (ibfd), STUBSIZE); + if (coff_data (obfd)->go32stub != NULL) + memcpy (coff_data (obfd)->go32stub, coff_data (ibfd)->go32stub, + GO32_STUBSIZE); return TRUE; } diff --git a/bfd/coff-svm68k.c b/bfd/coff-svm68k.c index 379e61c..dee4df4 100644 --- a/bfd/coff-svm68k.c +++ b/bfd/coff-svm68k.c @@ -1,5 +1,5 @@ /* BFD back-end for Motorola sysv68 - Copyright 1997, 2007 Free Software Foundation, Inc. + Copyright 1997, 2005, 2007 Free Software Foundation, Inc. Written by Philippe De Muyter . This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/coff-tic30.c b/bfd/coff-tic30.c index a732a00..7670afe 100644 --- a/bfd/coff-tic30.c +++ b/bfd/coff-tic30.c @@ -1,5 +1,5 @@ /* BFD back-end for TMS320C30 coff binaries. - Copyright 1998, 1999, 2000, 2001, 2002, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au) @@ -182,6 +182,10 @@ reloc_processing (relent, reloc, symbols, abfd, section) relent->address -= section->vma; } +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" const bfd_target tic30_coff_vec = diff --git a/bfd/coff-tic4x.c b/bfd/coff-tic4x.c index 7015bec..4259dd9 100644 --- a/bfd/coff-tic4x.c +++ b/bfd/coff-tic4x.c @@ -1,6 +1,6 @@ /* BFD back-end for TMS320C4X coff binaries. - Copyright 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005, 2007 - Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005, 2007, + 2008 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) @@ -69,8 +69,12 @@ ticoff_bfd_is_local_label_name (abfd, name) instead of setting BADMAG. */ #define BADMAG(x) COFF2_BADMAG(x) -#undef coff_rtype_to_howto -#define coff_rtype_to_howto coff_tic4x_rtype_to_howto +#undef coff_rtype_to_howto +#define coff_rtype_to_howto coff_tic4x_rtype_to_howto + +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif #include "coffcode.h" diff --git a/bfd/coff-tic54x.c b/bfd/coff-tic54x.c index 098a888..672897d 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, 2007 + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Timothy Wall (twall@cygnus.com) @@ -359,6 +359,11 @@ ticoff_bfd_is_local_label_name (abfd, name) and COFF0 vectors use custom _bad_format_hook procs instead of setting BADMAG. */ #define BADMAG(x) COFF2_BADMAG(x) + +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" static bfd_boolean diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c index e6c4e5c..6455e49 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, 2007 + Copyright 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Fred Fish (fnf@cygnus.com) @@ -734,6 +734,11 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd, #define TIC80COFF 1 /* Customize coffcode.h */ #undef C_AUTOARG /* Clashes with TIc80's C_UEXT */ #undef C_LASTENT /* Clashes with TIc80's C_STATLAB */ + +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" CREATE_LITTLE_COFF_TARGET_VEC (tic80coff_vec, "coff-tic80", D_PAGED, 0, '_', NULL, COFF_SWAP_TABLE) diff --git a/bfd/coff-u68k.c b/bfd/coff-u68k.c index b0377c4..e061905 100644 --- a/bfd/coff-u68k.c +++ b/bfd/coff-u68k.c @@ -1,5 +1,5 @@ /* BFD back-end for Motorola 68000 COFF binaries having underscore with name. - Copyright 1990, 1991, 1992, 2007 Free Software Foundation, Inc. + Copyright 1990, 1991, 1992, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c index ced7d9b..308d448 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, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008 Free Software Foundation, Inc. Written by Steve Chamberlain, . This file is part of BFD, the Binary File Descriptor library. @@ -375,6 +375,10 @@ w65_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr, #define coff_reloc16_extra_cases w65_reloc16_extra_cases #define coff_reloc16_estimate w65_reloc16_estimate +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #undef coff_bfd_get_relocated_section_contents diff --git a/bfd/coff-we32k.c b/bfd/coff-we32k.c index 7bd2d4f..49845fc 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, 2007 + Copyright 1992, 1993, 1994, 1999, 2000, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Brendan Kehoe (brendan@cs.widener.edu). @@ -63,6 +63,10 @@ static reloc_howto_type howto_table[] = #define RTYPE2HOWTO(cache_ptr, dst) \ (cache_ptr)->howto = howto_table + (dst)->r_type; +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #define coff_write_armap bsd_write_armap diff --git a/bfd/coff-x86_64.c b/bfd/coff-x86_64.c index 0368434..ecce9f4 100644 --- a/bfd/coff-x86_64.c +++ b/bfd/coff-x86_64.c @@ -1,5 +1,5 @@ /* BFD back-end for AMD 64 COFF files. - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -24,6 +24,10 @@ #define COFF_WITH_pex64 #endif +/* Note we have to make sure not to include headers twice. + Not all headers are wrapped in #ifdef guards, so we define + PEI_HEADERS to prevent double including here. */ +#ifndef PEI_HEADERS #include "sysdep.h" #include "bfd.h" #include "libbfd.h" @@ -32,6 +36,7 @@ #include "coff/pe.h" #include "libcoff.h" #include "libiberty.h" +#endif #define BADMAG(x) AMD64BADMAG(x) @@ -711,6 +716,10 @@ coff_amd64_is_local_label_name (bfd *abfd, const char *name) #endif /* TARGET_UNDERSCORE */ +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #ifdef PE diff --git a/bfd/coff-z80.c b/bfd/coff-z80.c index b866d2f..62bb90b 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, 2007 Free Software Foundation, Inc. + Copyright 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Arnold Metselaar This file is part of BFD, the Binary File Descriptor library. @@ -30,7 +30,7 @@ #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER 0 static reloc_howto_type r_imm32 = -HOWTO (R_IMM32, 0, 1, 32, FALSE, 0, +HOWTO (R_IMM32, 0, 2, 32, FALSE, 0, complain_overflow_dont, 0, "r_imm32", TRUE, 0xffffffff, 0xffffffff, FALSE); @@ -270,6 +270,10 @@ extra_case (bfd *in_abfd, #define coff_bfd_reloc_type_lookup coff_z80_reloc_type_lookup #define coff_bfd_reloc_name_lookup coff_z80_reloc_name_lookup +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #undef coff_bfd_get_relocated_section_contents diff --git a/bfd/coff-z8k.c b/bfd/coff-z8k.c index ad49f7a..7e9dba5 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Cygnus Support. Written by Steve Chamberlain, . @@ -372,6 +372,10 @@ extra_case (bfd *in_abfd, #define coff_bfd_reloc_type_lookup coff_z8k_reloc_type_lookup #define coff_bfd_reloc_name_lookup coff_z8k_reloc_name_lookup +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" #undef coff_bfd_get_relocated_section_contents diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index 0c5a3dd..e202070 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, 2006, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written Clinton Popetz. Contributed by Cygnus Support. @@ -272,6 +272,10 @@ extern int rs6000coff_core_file_failing_signal #define coff_swap_reloc_out xcoff64_swap_reloc_out #define NO_COFF_RELOCS +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" /* For XCOFF64, the effective width of symndx changes depending on @@ -349,11 +353,11 @@ _bfd_xcoff64_swap_sym_out (abfd, inp, extp) } static void -_bfd_xcoff64_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) +_bfd_xcoff64_swap_aux_in (abfd, ext1, type, in_class, indx, numaux, in1) bfd *abfd; PTR ext1; int type; - int class; + int in_class; int indx; int numaux; PTR in1; @@ -361,7 +365,7 @@ _bfd_xcoff64_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) union external_auxent *ext = (union external_auxent *) ext1; union internal_auxent *in = (union internal_auxent *) in1; - switch (class) + switch (in_class) { case C_FILE: if (ext->x_file.x_n.x_zeroes[0] == 0) @@ -377,6 +381,7 @@ _bfd_xcoff64_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) /* RS/6000 "csect" auxents */ case C_EXT: + case C_AIX_WEAKEXT: case C_HIDEXT: if (indx + 1 == numaux) { @@ -415,7 +420,8 @@ _bfd_xcoff64_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) break; } - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { in->x_sym.x_fcnary.x_fcn.x_lnnoptr = H_GET_64 (abfd, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); @@ -439,11 +445,11 @@ _bfd_xcoff64_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1) } static unsigned int -_bfd_xcoff64_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) +_bfd_xcoff64_swap_aux_out (abfd, inp, type, in_class, indx, numaux, extp) bfd *abfd; PTR inp; int type; - int class; + int in_class; int indx ATTRIBUTE_UNUSED; int numaux ATTRIBUTE_UNUSED; PTR extp; @@ -452,7 +458,7 @@ _bfd_xcoff64_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) union external_auxent *ext = (union external_auxent *) extp; memset ((PTR) ext, 0, bfd_coff_auxesz (abfd)); - switch (class) + switch (in_class) { case C_FILE: if (in->x_file.x_n.x_zeroes == 0) @@ -469,6 +475,7 @@ _bfd_xcoff64_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) /* RS/6000 "csect" auxents */ case C_EXT: + case C_AIX_WEAKEXT: case C_HIDEXT: if (indx + 1 == numaux) { @@ -500,7 +507,8 @@ _bfd_xcoff64_swap_aux_out (abfd, inp, type, class, indx, numaux, extp) break; } - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { H_PUT_64 (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext->x_sym.x_fcnary.x_fcn.x_lnnoptr); @@ -763,7 +771,6 @@ xcoff64_write_object_contents (abfd) file_ptr sym_base; unsigned long reloc_size = 0; unsigned long lnno_size = 0; - bfd_boolean long_section_names; asection *text_sec = ((void *) 0); asection *data_sec = ((void *) 0); asection *bss_sec = ((void *) 0); @@ -833,7 +840,6 @@ xcoff64_write_object_contents (abfd) if (bfd_seek (abfd, scn_base, SEEK_SET) != 0) return FALSE; - long_section_names = FALSE; for (current = abfd->sections; current != NULL; current = current->next) { struct internal_scnhdr section; @@ -1046,6 +1052,8 @@ xcoff64_write_object_contents (abfd) case bfd_arch_powerpc: if (bfd_get_mach (abfd) == bfd_mach_ppc) internal_a.o_cputype = 3; + else if (bfd_get_mach (abfd) == bfd_mach_ppc_620) + internal_a.o_cputype = 2; else internal_a.o_cputype = 1; break; @@ -1113,11 +1121,13 @@ xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, bfd_byte *contents; { struct xcoff_link_hash_entry *h; + bfd_vma section_offset; if (0 > rel->r_symndx) return FALSE; h = obj_xcoff_sym_hashes (input_bfd)[rel->r_symndx]; + section_offset = rel->r_vaddr - input_section->vma; /* If we see an R_BR or R_RBR reloc which is jumping to global linkage code, and it is followed by an appropriate cror nop @@ -1127,13 +1137,14 @@ xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, going to global linkage code, we can replace the load with a cror. */ if (NULL != h - && bfd_link_hash_defined == h->root.type - && rel->r_vaddr - input_section->vma + 8 <= input_section->size) + && (bfd_link_hash_defined == h->root.type + || bfd_link_hash_defweak == h->root.type) + && section_offset + 8 <= input_section->size) { bfd_byte *pnext; unsigned long next; - pnext = contents + (rel->r_vaddr - input_section->vma) + 4; + pnext = contents + section_offset + 4; next = bfd_get_32 (input_bfd, pnext); /* The _ptrgl function is magic. It is used by the AIX compiler to call @@ -1162,16 +1173,42 @@ xcoff64_reloc_type_br (input_bfd, input_section, output_bfd, rel, sym, howto, howto->complain_on_overflow = complain_overflow_dont; } - howto->pc_relative = TRUE; + /* The original PC-relative relocation is biased by -r_vaddr, so adding + the value below will give the absolute target address. */ + *relocation = val + addend + rel->r_vaddr; + howto->src_mask &= ~3; howto->dst_mask = howto->src_mask; - /* A PC relative reloc includes the section address. */ - addend += input_section->vma; - - *relocation = val + addend; - *relocation -= (input_section->output_section->vma - + input_section->output_offset); + if (h != NULL + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && bfd_is_abs_section (h->root.u.def.section) + && section_offset + 4 <= input_section->size) + { + bfd_byte *ptr; + bfd_vma insn; + + /* Turn the relative branch into an absolute one by setting the + AA bit. */ + ptr = contents + section_offset; + insn = bfd_get_32 (input_bfd, ptr); + insn |= 2; + bfd_put_32 (input_bfd, insn, ptr); + + /* Make the howto absolute too. */ + howto->pc_relative = FALSE; + howto->complain_on_overflow = complain_overflow_bitfield; + } + else + { + /* Use a PC-relative howto and subtract the instruction's address + from the target address we calculated above. */ + howto->pc_relative = TRUE; + *relocation -= (input_section->output_section->vma + + input_section->output_offset + + section_offset); + } return TRUE; } @@ -1262,6 +1299,17 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, } else { + if (info->unresolved_syms_in_objects != RM_IGNORE + && (h->flags & XCOFF_WAS_UNDEFINED) != 0) + { + if (! ((*info->callbacks->undefined_symbol) + (info, h->root.root.string, + input_bfd, input_section, + rel->r_vaddr - input_section->vma, + (info->unresolved_syms_in_objects + == RM_GENERATE_ERROR)))) + return FALSE; + } if (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) { @@ -1276,17 +1324,11 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, val = (sec->output_section->vma + sec->output_offset); } - else if ((0 == (h->flags & (XCOFF_DEF_DYNAMIC | XCOFF_IMPORT))) - && ! info->relocatable) + else { - if (! ((*info->callbacks->undefined_symbol) - (info, h->root.root.string, input_bfd, input_section, - rel->r_vaddr - input_section->vma, TRUE))) - return FALSE; - - /* Don't try to process the reloc. It can't help, and - it may generate another error. */ - continue; + BFD_ASSERT (info->relocatable + || (h->flags & XCOFF_DEF_DYNAMIC) != 0 + || (h->flags & XCOFF_IMPORT) != 0); } } } @@ -2557,7 +2599,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = LINESZ, FILNMLEN, TRUE, /* _bfd_coff_long_filenames */ - FALSE, /* _bfd_coff_long_section_names */ + XCOFF_NO_LONG_SECTION_NAMES, /* _bfd_coff_long_section_names */ 3, /* _bfd_coff_default_section_alignment_power */ TRUE, /* _bfd_coff_force_symnames_in_strings */ 4, /* _bfd_coff_debug_string_prefix_length */ @@ -2576,7 +2618,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = coff_print_aux, dummy_reloc16_extra_cases, dummy_reloc16_estimate, - NULL, /* bfd_coff_sym_is_global */ + NULL, /* bfd_coff_symbol_classification */ coff_compute_section_file_positions, NULL, /* _bfd_coff_start_final_link */ xcoff64_ppc_relocate_section, @@ -2584,7 +2626,8 @@ static const struct xcoff_backend_data_rec bfd_xcoff_backend_data = NULL, /* _bfd_coff_adjust_symndx */ _bfd_generic_link_add_one_symbol, coff_link_output_has_begun, - coff_final_link_postscript + coff_final_link_postscript, + NULL /* print_pdata. */ }, 0x01EF, /* magic number */ @@ -2764,6 +2807,7 @@ const bfd_target rs6000coff64_vec = bfd_generic_is_group_section, bfd_generic_discard_group, _bfd_generic_section_already_linked, + _bfd_xcoff_define_common_symbol, /* Dynamic */ _bfd_xcoff_get_dynamic_symtab_upper_bound, @@ -2810,7 +2854,7 @@ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data = LINESZ, FILNMLEN, TRUE, /* _bfd_coff_long_filenames */ - FALSE, /* _bfd_coff_long_section_names */ + XCOFF_NO_LONG_SECTION_NAMES, /* _bfd_coff_long_section_names */ 3, /* _bfd_coff_default_section_alignment_power */ TRUE, /* _bfd_coff_force_symnames_in_strings */ 4, /* _bfd_coff_debug_string_prefix_length */ @@ -2837,7 +2881,8 @@ static const struct xcoff_backend_data_rec bfd_xcoff_aix5_backend_data = NULL, /* _bfd_coff_adjust_symndx */ _bfd_generic_link_add_one_symbol, coff_link_output_has_begun, - coff_final_link_postscript + coff_final_link_postscript, + NULL /* print_pdata. */ }, U64_TOCMAGIC, /* magic number */ @@ -3016,6 +3061,7 @@ const bfd_target aix5coff64_vec = bfd_generic_is_group_section, bfd_generic_discard_group, _bfd_generic_section_already_linked, + _bfd_xcoff_define_common_symbol, /* Dynamic */ _bfd_xcoff_get_dynamic_symtab_upper_bound, diff --git a/bfd/coffcode.h b/bfd/coffcode.h index 3d92ee5..3beedef 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -108,6 +108,68 @@ SUBSUBSECTION @file{coffcode.h} because it would not be used by any other target. +SUBSUBSECTION + Coff long section names + + In the standard Coff object format, section names are limited to + the eight bytes available in the @code{s_name} field of the + @code{SCNHDR} section header structure. The format requires the + field to be NUL-padded, but not necessarily NUL-terminated, so + the longest section names permitted are a full eight characters. + + The Microsoft PE variants of the Coff object file format add + an extension to support the use of long section names. This + extension is defined in section 4 of the Microsoft PE/COFF + specification (rev 8.1). If a section name is too long to fit + into the section header's @code{s_name} field, it is instead + placed into the string table, and the @code{s_name} field is + filled with a slash ("/") followed by the ASCII decimal + representation of the offset of the full name relative to the + string table base. + + Note that this implies that the extension can only be used in object + files, as executables do not contain a string table. The standard + specifies that long section names from objects emitted into executable + images are to be truncated. + + However, as a GNU extension, BFD can generate executable images + that contain a string table and long section names. This + would appear to be technically valid, as the standard only says + that Coff debugging information is deprecated, not forbidden, + and in practice it works, although some tools that parse PE files + expecting the MS standard format may become confused; @file{PEview} is + one known example. + + The functionality is supported in BFD by code implemented under + the control of the macro @code{COFF_LONG_SECTION_NAMES}. If not + defined, the format does not support long section names in any way. + If defined, it is used to initialise a flag, + @code{_bfd_coff_long_section_names}, and a hook function pointer, + @code{_bfd_coff_set_long_section_names}, in the Coff backend data + structure. The flag controls the generation of long section names + in output BFDs at runtime; if it is false, as it will be by default + when generating an executable image, long section names are truncated; + if true, the long section names extension is employed. The hook + points to a function that allows the value of the flag to be altered + at runtime, on formats that support long section names at all; on + other formats it points to a stub that returns an error indication. + + With input BFDs, the flag is set according to whether any long section + names are detected while reading the section headers. For a completely + new BFD, the flag is set to the default for the target format. This + information can be used by a client of the BFD library when deciding + what output format to generate, and means that a BFD that is opened + for read and subsequently converted to a writeable BFD and modified + in-place will retain whatever format it had on input. + + If @code{COFF_LONG_SECTION_NAMES} is simply defined (blank), or is + defined to the value "1", then long section names are enabled by + default; if it is defined to the value zero, they are disabled by + default (but still accepted in input BFDs). The header @file{coffcode.h} + defines a macro, @code{COFF_DEFAULT_LONG_SECTION_NAMES}, which is + used in the backends to initialise the backend data structure fields + appropriately; see the comments for further detail. + SUBSUBSECTION Bit twiddling @@ -171,7 +233,7 @@ SUBSUBSECTION 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 + 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 @@ -309,7 +371,42 @@ CODE_FRAGMENT #define DOT_DEBUG ".debug" #define GNU_LINKONCE_WI ".gnu.linkonce.wi." - +#define DOT_RELOC ".reloc" + +#if defined (COFF_LONG_SECTION_NAMES) +/* Needed to expand the inputs to BLANKOR1TOODD. */ +#define COFFLONGSECTIONCATHELPER(x,y) x ## y +/* If the input macro Y is blank or '1', return an odd number; if it is + '0', return an even number. Result undefined in all other cases. */ +#define BLANKOR1TOODD(y) COFFLONGSECTIONCATHELPER(1,y) +/* Defined to numerical 0 or 1 according to whether generation of long + section names is disabled or enabled by default. */ +#define COFF_ENABLE_LONG_SECTION_NAMES (BLANKOR1TOODD(COFF_LONG_SECTION_NAMES) & 1) +/* Where long section names are supported, we allow them to be enabled + and disabled at runtime, so select an appropriate hook function for + _bfd_coff_set_long_section_names. */ +#define COFF_LONG_SECTION_NAMES_SETTER bfd_coff_set_long_section_names_allowed +#else /* !defined (COFF_LONG_SECTION_NAMES) */ +/* If long section names are not supported, this stub disallows any + attempt to enable them at run-time. */ +#define COFF_LONG_SECTION_NAMES_SETTER bfd_coff_set_long_section_names_disallowed +#endif /* defined (COFF_LONG_SECTION_NAMES) */ + +/* Define a macro that can be used to initialise both the fields relating + to long section names in the backend data struct simultaneously. */ +#if COFF_ENABLE_LONG_SECTION_NAMES +#define COFF_DEFAULT_LONG_SECTION_NAMES (TRUE), COFF_LONG_SECTION_NAMES_SETTER +#else /* !COFF_ENABLE_LONG_SECTION_NAMES */ +#define COFF_DEFAULT_LONG_SECTION_NAMES (FALSE), COFF_LONG_SECTION_NAMES_SETTER +#endif /* COFF_ENABLE_LONG_SECTION_NAMES */ + +#if defined (COFF_LONG_SECTION_NAMES) +static bfd_boolean bfd_coff_set_long_section_names_allowed + (bfd *, int); +#else /* !defined (COFF_LONG_SECTION_NAMES) */ +static bfd_boolean bfd_coff_set_long_section_names_disallowed + (bfd *, int); +#endif /* defined (COFF_LONG_SECTION_NAMES) */ static long sec_to_styp_flags (const char *, flagword); static bfd_boolean styp_to_sec_flags @@ -372,6 +469,23 @@ static bfd_boolean ticoff1_bad_format_hook /* void warning(); */ +#if defined (COFF_LONG_SECTION_NAMES) +static bfd_boolean +bfd_coff_set_long_section_names_allowed (bfd *abfd, int enable) +{ + coff_backend_info (abfd)->_bfd_coff_long_section_names = enable; + return TRUE; +} +#else /* !defined (COFF_LONG_SECTION_NAMES) */ +static bfd_boolean +bfd_coff_set_long_section_names_disallowed (bfd *abfd, int enable) +{ + (void) abfd; + (void) enable; + return FALSE; +} +#endif /* defined (COFF_LONG_SECTION_NAMES) */ + /* Return a word with STYP_* (scnhdr.s_flags) flags set to represent the incoming SEC_* flags. The inverse of this function is styp_to_sec_flags(). NOTE: If you add to/change this routine, you @@ -432,9 +546,9 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags) { /* Handle the XCOFF debug section and DWARF2 debug sections. */ if (!sec_name[6]) - styp_flags = STYP_XCOFF_DEBUG; + styp_flags = STYP_XCOFF_DEBUG; else - styp_flags = STYP_DEBUG_INFO; + styp_flags = STYP_DEBUG_INFO; } else if (CONST_STRNEQ (sec_name, ".stab")) { @@ -532,7 +646,7 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags) /* FIXME: There is no gas syntax to specify the debug section flag. */ if (CONST_STRNEQ (sec_name, DOT_DEBUG) || CONST_STRNEQ (sec_name, GNU_LINKONCE_WI)) - sec_flags = SEC_DEBUGGING; + sec_flags = SEC_DEBUGGING | SEC_READONLY; /* skip LOAD */ /* READONLY later */ @@ -561,19 +675,14 @@ sec_to_styp_flags (const char *sec_name, flagword sec_flags) /* skip LINK_DUPLICATES */ /* skip LINKER_CREATED */ - if (sec_flags & (SEC_ALLOC | SEC_LOAD)) - { - /* For now, the read/write bits are mapped onto SEC_READONLY, even - though the semantics don't quite match. The bits from the input - are retained in pei_section_data(abfd, section)->pe_flags. */ - styp_flags |= IMAGE_SCN_MEM_READ; /* Always readable. */ - if ((sec_flags & SEC_READONLY) == 0) - styp_flags |= IMAGE_SCN_MEM_WRITE; /* Invert READONLY for write. */ - if (sec_flags & SEC_CODE) - styp_flags |= IMAGE_SCN_MEM_EXECUTE; /* CODE->EXECUTE. */ - if (sec_flags & SEC_COFF_SHARED) - styp_flags |= IMAGE_SCN_MEM_SHARED; /* Shared remains meaningful. */ - } + if ((sec_flags & SEC_COFF_NOREAD) == 0) + styp_flags |= IMAGE_SCN_MEM_READ; /* Invert NOREAD for read. */ + if ((sec_flags & SEC_READONLY) == 0) + styp_flags |= IMAGE_SCN_MEM_WRITE; /* Invert READONLY for write. */ + if (sec_flags & SEC_CODE) + styp_flags |= IMAGE_SCN_MEM_EXECUTE; /* CODE->EXECUTE. */ + if (sec_flags & SEC_COFF_SHARED) + styp_flags |= IMAGE_SCN_MEM_SHARED; /* Shared remains meaningful. */ return styp_flags; } @@ -836,7 +945,8 @@ handle_COMDAT (bfd * abfd, but there's some checking we can do to be sure. */ - if (! (isym.n_sclass == C_STAT + if (! ((isym.n_sclass == C_STAT + || isym.n_sclass == C_EXT) && isym.n_type == T_NULL && isym.n_value == 0)) abort (); @@ -846,7 +956,7 @@ handle_COMDAT (bfd * abfd, names like .text$foo__Fv (in the case of a function). See comment above for more. */ - if (strcmp (name, symname) != 0) + if (isym.n_sclass == C_STAT && strcmp (name, symname) != 0) _bfd_error_handler (_("%B: warning: COMDAT symbol '%s' does not match section name '%s'"), abfd, symname, name); @@ -959,7 +1069,7 @@ handle_COMDAT (bfd * abfd, amt = sizeof (struct coff_comdat_info); coff_section_data (abfd, section)->comdat - = bfd_alloc (abfd, amt); + = (struct coff_comdat_info *) bfd_alloc (abfd, amt); if (coff_section_data (abfd, section)->comdat == NULL) abort (); @@ -967,7 +1077,7 @@ handle_COMDAT (bfd * abfd, (esym - esymstart) / bfd_coff_symesz (abfd); amt = strlen (symname) + 1; - newname = bfd_alloc (abfd, amt); + newname = (char *) bfd_alloc (abfd, amt); if (newname == NULL) abort (); @@ -1012,6 +1122,10 @@ styp_to_sec_flags (bfd *abfd, /* Assume read only unless IMAGE_SCN_MEM_WRITE is specified. */ sec_flags = SEC_READONLY; + /* If section disallows read, then set the NOREAD flag. */ + if ((styp_flags & IMAGE_SCN_MEM_READ) == 0) + sec_flags |= SEC_COFF_NOREAD; + /* Process each flag bit in styp_flags in turn. */ while (styp_flags) { @@ -1044,7 +1158,7 @@ styp_to_sec_flags (bfd *abfd, break; #endif case IMAGE_SCN_MEM_READ: - /* Ignored, assume it always to be true. */ + sec_flags &= ~SEC_COFF_NOREAD; break; case IMAGE_SCN_TYPE_NO_PAD: /* Skip. */ @@ -1069,10 +1183,19 @@ styp_to_sec_flags (bfd *abfd, sec_flags &= ~ SEC_READONLY; break; case IMAGE_SCN_MEM_DISCARDABLE: - /* 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 (! CONST_STRNEQ (name, ".reloc")) + /* The MS PE spec says that debug sections are DISCARDABLE, + but the presence of a DISCARDABLE flag does not necessarily + mean that a given section contains debug information. Thus + we only set the SEC_DEBUGGING flag on sections that we + recognise as containing debug information. */ + if (CONST_STRNEQ (name, DOT_DEBUG) +#ifdef _COMMENT + || strcmp (name, _COMMENT) == 0 +#endif +#ifdef COFF_LONG_SECTION_NAMES + || CONST_STRNEQ (name, GNU_LINKONCE_WI) +#endif + || CONST_STRNEQ (name, ".stab")) sec_flags |= SEC_DEBUGGING; break; case IMAGE_SCN_MEM_SHARED: @@ -1205,7 +1328,11 @@ Special entry points for gdb to swap in coff symbol table parts: . unsigned int _bfd_linesz; . unsigned int _bfd_filnmlen; . bfd_boolean _bfd_coff_long_filenames; +. . bfd_boolean _bfd_coff_long_section_names; +. bfd_boolean (*_bfd_coff_set_long_section_names) +. (bfd *, int); +. . unsigned int _bfd_coff_default_section_alignment_power; . bfd_boolean _bfd_coff_force_symnames_in_strings; . unsigned int _bfd_coff_debug_string_prefix_length; @@ -1292,6 +1419,9 @@ Special entry points for gdb to swap in coff symbol table parts: . bfd_boolean (*_bfd_coff_final_link_postscript) . (bfd *, struct coff_final_link_info *); . +. bfd_boolean (*_bfd_coff_print_pdata) +. (bfd *, void *); +. .} bfd_coff_backend_data; . .#define coff_backend_info(abfd) \ @@ -1339,6 +1469,8 @@ Special entry points for gdb to swap in coff symbol table parts: . (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_set_long_section_names(abfd, enable) \ +. ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable)) .#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) \ @@ -1424,6 +1556,15 @@ Special entry points for gdb to swap in coff symbol table parts: .#define bfd_coff_final_link_postscript(a,p) \ . ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) . +.#define bfd_coff_have_print_pdata(a) \ +. (coff_backend_info (a)->_bfd_coff_print_pdata) +.#define bfd_coff_print_pdata(a,p) \ +. ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p)) +. +.{* Macro: Returns true if the bfd is a PE executable as opposed to a +. PE object file. *} +.#define bfd_pei_p(abfd) \ +. (CONST_STRNEQ ((abfd)->xvec->name, "pei-")) */ /* See whether the magic number matches. */ @@ -1571,7 +1712,7 @@ coff_new_section_hook (bfd * abfd, asection * section) @@ 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); + native = (combined_entry_type *) bfd_zalloc (abfd, amt); if (native == NULL) return FALSE; @@ -1694,7 +1835,7 @@ coff_set_alignment_hook (bfd * abfd ATTRIBUTE_UNUSED, struct internal_reloc n; file_ptr oldpos = bfd_tell (abfd); bfd_size_type relsz = bfd_coff_relsz (abfd); - + bfd_seek (abfd, (file_ptr) hdr->s_relptr, 0); if (bfd_bread (& dst, relsz, abfd) != relsz) return; @@ -1851,6 +1992,11 @@ coff_mkobject_hook (bfd * abfd, abfd->flags |= HAS_DEBUG; #endif + if ((internal_f->f_flags & F_GO32STUB) != 0) + coff->go32stub = (char *) bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE); + if (coff->go32stub != NULL) + memcpy (coff->go32stub, internal_f->go32stub, GO32_STUBSIZE); + return coff; } #endif @@ -1950,15 +2096,15 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) case MAXQ20MAGIC: arch = bfd_arch_maxq; switch (internal_f->f_flags & F_MACHMASK) - { - case F_MAXQ10: - machine = bfd_mach_maxq10; - break; - case F_MAXQ20: - machine = bfd_mach_maxq20; - break; - default: - return FALSE; + { + case F_MAXQ10: + machine = bfd_mach_maxq10; + break; + case F_MAXQ20: + machine = bfd_mach_maxq20; + break; + default: + return FALSE; } break; #endif @@ -2223,20 +2369,20 @@ coff_set_arch_mach_hook (bfd *abfd, void * filehdr) case TICOFF1MAGIC: case TICOFF2MAGIC: switch (internal_f->f_target_id) - { + { #ifdef TI_TARGET_ID - case TI_TARGET_ID: - arch = TICOFF_TARGET_ARCH; + case TI_TARGET_ID: + arch = TICOFF_TARGET_ARCH; machine = TICOFF_TARGET_MACHINE_GET (internal_f->f_flags); - break; -#endif - default: - arch = bfd_arch_obscure; - (*_bfd_error_handler) - (_("Unrecognized TI COFF target id '0x%x'"), - internal_f->f_target_id); - break; - } + break; +#endif + default: + arch = bfd_arch_obscure; + (*_bfd_error_handler) + (_("Unrecognized TI COFF target id '0x%x'"), + internal_f->f_target_id); + break; + } break; #endif @@ -2288,7 +2434,7 @@ symname_in_debug_hook (bfd * abfd ATTRIBUTE_UNUSED, struct internal_syment *sym) #define FORCE_SYMNAMES_IN_STRINGS #endif -/* Handle the csect auxent of a C_EXT or C_HIDEXT symbol. */ +/* Handle the csect auxent of a C_EXT, C_AIX_WEAKEXT or C_HIDEXT symbol. */ static bfd_boolean coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED, @@ -2297,9 +2443,9 @@ coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED, unsigned int indaux, combined_entry_type *aux) { - int class = symbol->u.syment.n_sclass; + int n_sclass = symbol->u.syment.n_sclass; - if ((class == C_EXT || class == C_HIDEXT) + if (CSECT_SYM_P (n_sclass) && indaux + 1 == symbol->u.syment.n_numaux) { if (SMTYP_SMTYP (aux->u.auxent.x_csect.x_smtyp) == XTY_LD) @@ -2310,7 +2456,7 @@ coff_pointerize_aux_hook (bfd *abfd ATTRIBUTE_UNUSED, } /* Return TRUE to indicate that the caller should not do any - further work on this auxent. */ + further work on this auxent. */ return TRUE; } @@ -2357,8 +2503,7 @@ coff_print_aux (bfd *abfd ATTRIBUTE_UNUSED, unsigned int indaux ATTRIBUTE_UNUSED) { #ifdef RS6000COFF_C - if ((symbol->u.syment.n_sclass == C_EXT - || symbol->u.syment.n_sclass == C_HIDEXT) + if (CSECT_SYM_P (symbol->u.syment.n_sclass) && indaux + 1 == symbol->u.syment.n_numaux) { /* This is a csect entry. */ @@ -2533,7 +2678,7 @@ coff_write_relocs (bfd * abfd, int first_undef) if (q->sym_ptr_ptr) { #ifdef SECTION_RELATIVE_ABSOLUTE_SYMBOL_P - if (SECTION_RELATIVE_ABSOLUTE_SYMBOL_P (q, s)) + if (SECTION_RELATIVE_ABSOLUTE_SYMBOL_P (q, s)) #else if ((*q->sym_ptr_ptr)->section == bfd_abs_section_ptr && ((*q->sym_ptr_ptr)->flags & BSF_SECTION_SYM) != 0) @@ -2640,7 +2785,7 @@ coff_set_flags (bfd * abfd, case bfd_mach_i960_ka_sa: flags = F_I960KA; break; case bfd_mach_i960_jx: flags = F_I960JX; break; case bfd_mach_i960_hx: flags = F_I960HX; break; - default: return FALSE; + default: return FALSE; } *flagsp = flags; return TRUE; @@ -2658,25 +2803,25 @@ coff_set_flags (bfd * abfd, case TICOFF_TARGET_ARCH: /* If there's no indication of which version we want, use the default. */ if (!abfd->xvec ) - *magicp = TICOFF_DEFAULT_MAGIC; + *magicp = TICOFF_DEFAULT_MAGIC; else - { - /* We may want to output in a different COFF version. */ - switch (abfd->xvec->name[4]) - { - case '0': - *magicp = TICOFF0MAGIC; - break; - case '1': - *magicp = TICOFF1MAGIC; - break; - case '2': - *magicp = TICOFF2MAGIC; - break; - default: - return FALSE; - } - } + { + /* We may want to output in a different COFF version. */ + switch (abfd->xvec->name[4]) + { + case '0': + *magicp = TICOFF0MAGIC; + break; + case '1': + *magicp = TICOFF1MAGIC; + break; + case '2': + *magicp = TICOFF2MAGIC; + break; + default: + return FALSE; + } + } TICOFF_TARGET_MACHINE_SET (flagsp, bfd_get_mach (abfd)); return TRUE; #endif @@ -2865,9 +3010,9 @@ coff_set_flags (bfd * abfd, #ifdef OR32_MAGIC_BIG case bfd_arch_or32: if (bfd_big_endian (abfd)) - * magicp = OR32_MAGIC_BIG; + * magicp = OR32_MAGIC_BIG; else - * magicp = OR32_MAGIC_LITTLE; + * magicp = OR32_MAGIC_LITTLE; return TRUE; #endif @@ -2999,7 +3144,7 @@ coff_compute_section_file_positions (bfd * abfd) /* If no file alignment has been set, default to one. This repairs 'ld -r' for arm-wince-pe target. */ if (page_size == 0) - page_size = 1; + page_size = 1; } else page_size = PE_DEF_FILE_ALIGNMENT; @@ -3047,13 +3192,20 @@ coff_compute_section_file_positions (bfd * abfd) int target_index; bfd_size_type amt; +#ifdef COFF_PAGE_SIZE + /* Clear D_PAGED if section alignment is smaller than + COFF_PAGE_SIZE. */ + if (pe_data (abfd)->pe_opthdr.SectionAlignment < COFF_PAGE_SIZE) + abfd->flags &= ~D_PAGED; +#endif + count = 0; for (current = abfd->sections; current != NULL; current = current->next) ++count; /* We allocate an extra cell to simplify the final loop. */ amt = sizeof (struct asection *) * (count + 1); - section_list = bfd_malloc (amt); + section_list = (asection **) bfd_malloc (amt); if (section_list == NULL) return FALSE; @@ -3234,8 +3386,8 @@ coff_compute_section_file_positions (bfd * abfd) #ifdef COFF_IMAGE_WITH_PE /* For PE we need to make sure we pad out to the aligned - size, in case the caller only writes out data to the - unaligned size. */ + size, in case the caller only writes out data to the + unaligned size. */ if (pei_section_data (abfd, current)->virt_size < current->size) align_adjust = TRUE; #endif @@ -3479,7 +3631,7 @@ coff_write_object_contents (bfd * abfd) bfd_boolean is_reloc_section = FALSE; #ifdef COFF_IMAGE_WITH_PE - if (strcmp (current->name, ".reloc") == 0) + if (strcmp (current->name, DOT_RELOC) == 0) { is_reloc_section = TRUE; hasrelocs = TRUE; @@ -3493,19 +3645,41 @@ coff_write_object_contents (bfd * abfd) #ifdef COFF_LONG_SECTION_NAMES /* Handle long section names as in PE. This must be compatible - with the code in coff_write_symbols and _bfd_coff_final_link. */ - { - size_t len; + with the code in coff_write_symbols and _bfd_coff_final_link. */ + if (bfd_coff_long_section_names (abfd)) + { + size_t len; - len = strlen (current->name); - if (len > SCNNMLEN) - { - memset (section.s_name, 0, SCNNMLEN); - sprintf (section.s_name, "/%lu", (unsigned long) string_size); - string_size += len + 1; - long_section_names = TRUE; - } - } + len = strlen (current->name); + if (len > SCNNMLEN) + { + /* The s_name field is defined to be NUL-padded but need not be + NUL-terminated. We use a temporary buffer so that we can still + sprintf all eight chars without splatting a terminating NUL + over the first byte of the following member (s_paddr). */ + char s_name_buf[SCNNMLEN + 1]; + + /* An inherent limitation of the /nnnnnnn notation used to indicate + the offset of the long name in the string table is that we + cannot address entries beyone the ten million byte boundary. */ + if (string_size >= 10000000) + { + bfd_set_error (bfd_error_file_too_big); + (*_bfd_error_handler) + (_("%B: section %s: string table overflow at offset %ld"), + abfd, current->name, string_size); + return FALSE; + } + + /* snprintf not strictly necessary now we've verified the value + has less than eight ASCII digits, but never mind. */ + snprintf (s_name_buf, SCNNMLEN + 1, "/%lu", (unsigned long) string_size); + /* Then strncpy takes care of any padding for us. */ + strncpy (section.s_name, s_name_buf, SCNNMLEN); + string_size += len + 1; + long_section_names = TRUE; + } + } #endif #ifdef _LIB @@ -3520,6 +3694,8 @@ coff_write_object_contents (bfd * abfd) section.s_size = current->size; #ifdef coff_get_section_load_page section.s_page = coff_get_section_load_page (current); +#else + section.s_page = 0; #endif #ifdef COFF_WITH_PE @@ -3611,8 +3787,8 @@ coff_write_object_contents (bfd * abfd) #ifdef COFF_WITH_PE /* PE stores COMDAT section information in the symbol table. If - this section is supposed to have some COMDAT info, track down - the symbol in the symbol table and modify it. */ + this section is supposed to have some COMDAT info, track down + the symbol in the symbol table and modify it. */ if ((current->flags & SEC_LINK_ONCE) != 0) { unsigned int i, count; @@ -3628,7 +3804,7 @@ coff_write_object_contents (bfd * abfd) continue; /* Remember the location of the first symbol in this - section. */ + section. */ if (psymsec == NULL) psymsec = psym; @@ -3683,12 +3859,12 @@ coff_write_object_contents (bfd * abfd) } /* The COMDAT symbol must be the first symbol from this - section in the symbol table. In order to make this - work, we move the COMDAT symbol before the first - symbol we found in the search above. It's OK to - rearrange the symbol table at this point, because - coff_renumber_symbols is going to rearrange it - further and fix up all the aux entries. */ + section in the symbol table. In order to make this + work, we move the COMDAT symbol before the first + symbol we found in the search above. It's OK to + rearrange the symbol table at this point, because + coff_renumber_symbols is going to rearrange it + further and fix up all the aux entries. */ if (psym != psymsec) { asymbol *hold; @@ -3925,7 +4101,7 @@ coff_write_object_contents (bfd * abfd) #define __A_MAGIC_SET__ internal_a.magic = MAXQ20MAGIC; #endif - + #ifndef __A_MAGIC_SET__ #include "Your aouthdr magic number is not being set!" #else @@ -3957,7 +4133,7 @@ coff_write_object_contents (bfd * abfd) else if (long_section_names && ! obj_coff_strings_written (abfd)) { /* If we have long section names we have to write out the string - table even if there are no symbols. */ + table even if there are no symbols. */ if (! coff_write_symbols (abfd)) return FALSE; } @@ -3969,7 +4145,7 @@ coff_write_object_contents (bfd * abfd) bfd_byte b; /* PowerPC PE appears to require that all executable files be - rounded up to the page size. */ + rounded up to the page size. */ b = 0; if (bfd_seek (abfd, (file_ptr) BFD_ALIGN (sym_base, COFF_PAGE_SIZE) - 1, @@ -3988,7 +4164,7 @@ coff_write_object_contents (bfd * abfd) internal_f.f_symptr = sym_base; #ifdef RS6000COFF_C /* AIX appears to require that F_RELFLG not be set if there are - local symbols but no relocations. */ + local symbols but no relocations. */ internal_f.f_flags &=~ F_RELFLG; #endif } @@ -4100,7 +4276,7 @@ coff_write_object_contents (bfd * abfd) char * buff; bfd_size_type amount = bfd_coff_filhsz (abfd); - buff = bfd_malloc (amount); + buff = (char *) bfd_malloc (amount); if (buff == NULL) return FALSE; @@ -4120,7 +4296,7 @@ coff_write_object_contents (bfd * abfd) char * buff; bfd_size_type amount = bfd_coff_aoutsz (abfd); - buff = bfd_malloc (amount); + buff = (char *) bfd_malloc (amount); if (buff == NULL) return FALSE; @@ -4288,21 +4464,23 @@ coff_slurp_line_table (bfd *abfd, asection *asect) BFD_ASSERT (asect->lineno == NULL); + amt = ((bfd_size_type) asect->lineno_count + 1) * sizeof (alent); + lineno_cache = (alent *) bfd_alloc (abfd, amt); + if (lineno_cache == NULL) + return FALSE; + amt = (bfd_size_type) bfd_coff_linesz (abfd) * asect->lineno_count; native_lineno = (LINENO *) buy_and_read (abfd, asect->line_filepos, amt); if (native_lineno == NULL) { (*_bfd_error_handler) - (_("%B: warning: line number table read failed"), abfd); + (_("%B: warning: line number table read failed"), abfd); + bfd_release (abfd, lineno_cache); return FALSE; } - amt = ((bfd_size_type) asect->lineno_count + 1) * sizeof (alent); - lineno_cache = bfd_alloc (abfd, amt); - if (lineno_cache == NULL) - return FALSE; - cache_ptr = lineno_cache; + asect->lineno = lineno_cache; src = native_lineno; nbr_func = 0; @@ -4356,6 +4534,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) src++; } cache_ptr->line_number = 0; + bfd_release (abfd, native_lineno); /* On some systems (eg AIX5.3) the lineno table may not be sorted. */ if (!ordered) @@ -4365,7 +4544,7 @@ coff_slurp_line_table (bfd *abfd, asection *asect) alent *n_lineno_cache; /* Create a table of functions. */ - func_table = bfd_malloc (nbr_func * sizeof (alent *)); + func_table = (alent **) bfd_alloc (abfd, nbr_func * sizeof (alent *)); if (func_table != NULL) { alent **p = func_table; @@ -4379,7 +4558,8 @@ coff_slurp_line_table (bfd *abfd, asection *asect) qsort (func_table, nbr_func, sizeof (alent *), coff_sort_func_alent); /* Create the new sorted table. */ - n_lineno_cache = bfd_alloc (abfd, amt); + amt = ((bfd_size_type) asect->lineno_count + 1) * sizeof (alent); + n_lineno_cache = (alent *) bfd_alloc (abfd, amt); if (n_lineno_cache != NULL) { alent *n_cache_ptr = n_lineno_cache; @@ -4401,15 +4581,12 @@ coff_slurp_line_table (bfd *abfd, asection *asect) *n_cache_ptr++ = *old_ptr++; } n_cache_ptr->line_number = 0; - bfd_release (abfd, lineno_cache); - lineno_cache = n_lineno_cache; + memcpy (lineno_cache, n_lineno_cache, amt); } - free (func_table); + bfd_release (abfd, func_table); } } - asect->lineno = lineno_cache; - bfd_release (abfd, native_lineno); return TRUE; } @@ -4436,13 +4613,13 @@ coff_slurp_symbol_table (bfd * abfd) /* Allocate enough room for all the symbols in cached form. */ amt = obj_raw_syment_count (abfd); amt *= sizeof (coff_symbol_type); - cached_area = bfd_alloc (abfd, amt); + cached_area = (coff_symbol_type *) bfd_alloc (abfd, amt); if (cached_area == NULL) return FALSE; amt = obj_raw_syment_count (abfd); amt *= sizeof (unsigned int); - table_ptr = bfd_alloc (abfd, amt); + table_ptr = (unsigned int *) bfd_alloc (abfd, amt); if (table_ptr == NULL) return FALSE; @@ -4476,8 +4653,8 @@ coff_slurp_symbol_table (bfd * abfd) case C_EXT: case C_WEAKEXT: #if defined ARM - case C_THUMBEXT: - case C_THUMBEXTFUNC: + case C_THUMBEXT: + case C_THUMBEXTFUNC: #endif #ifdef RS6000COFF_C case C_HIDEXT: @@ -4486,8 +4663,8 @@ coff_slurp_symbol_table (bfd * abfd) case C_SYSTEM: /* System Wide variable. */ #endif #ifdef COFF_WITH_PE - /* In PE, 0x68 (104) denotes a section symbol. */ - case C_SECTION: + /* In PE, 0x68 (104) denotes a section symbol. */ + case C_SECTION: /* In PE, 0x69 (105) denotes a weak external symbol. */ case C_NT_WEAK: #endif @@ -4497,7 +4674,7 @@ coff_slurp_symbol_table (bfd * abfd) dst->symbol.flags = BSF_EXPORT | BSF_GLOBAL; #if defined COFF_WITH_PE /* PE sets the symbol to a value relative to the - start of the section. */ + start of the section. */ dst->symbol.value = src->u.syment.n_value; #else dst->symbol.value = (src->u.syment.n_value @@ -4528,7 +4705,7 @@ coff_slurp_symbol_table (bfd * abfd) dst->symbol.flags = BSF_LOCAL; #if defined COFF_WITH_PE /* PE sets the symbol to a value relative to the - start of the section. */ + start of the section. */ dst->symbol.value = src->u.syment.n_value; #else dst->symbol.value = (src->u.syment.n_value @@ -4563,9 +4740,9 @@ coff_slurp_symbol_table (bfd * abfd) case C_LEAFSTAT: /* Static leaf procedure. */ #endif #if defined ARM - case C_THUMBSTAT: /* Thumb static. */ - case C_THUMBLABEL: /* Thumb label. */ - case C_THUMBSTATFUNC:/* Thumb static function. */ + case C_THUMBSTAT: /* Thumb static. */ + case C_THUMBLABEL: /* Thumb label. */ + case C_THUMBSTATFUNC:/* Thumb static function. */ #endif case C_LABEL: /* Label. */ if (src->u.syment.n_scnum == N_DEBUG) @@ -4579,7 +4756,7 @@ coff_slurp_symbol_table (bfd * abfd) { #if defined COFF_WITH_PE /* PE sets the symbol to a value relative to the - start of the section. */ + start of the section. */ dst->symbol.value = src->u.syment.n_value; #else dst->symbol.value = (src->u.syment.n_value @@ -4594,7 +4771,7 @@ coff_slurp_symbol_table (bfd * abfd) case C_EOS: /* End of structure. */ case C_REGPARM: /* Register parameter. */ case C_REG: /* register variable. */ - /* C_AUTOARG conflicts with TI COFF C_UEXT. */ + /* C_AUTOARG conflicts with TI COFF C_UEXT. */ #if !defined (TIC80COFF) && !defined (TICOFF) #ifdef C_AUTOARG case C_AUTOARG: /* 960-specific storage class. */ @@ -4638,9 +4815,9 @@ coff_slurp_symbol_table (bfd * abfd) case C_BINCL: /* Beginning of include file. */ case C_EINCL: /* Ending of include file. */ /* The value is actually a pointer into the line numbers - of the file. We locate the line number entry, and - set the section to the section which contains it, and - the value to the index in that section. */ + of the file. We locate the line number entry, and + set the section to the section which contains it, and + the value to the index in that section. */ { asection *sec; @@ -4687,7 +4864,7 @@ coff_slurp_symbol_table (bfd * abfd) if (strcmp (dst->symbol.name, ".bf") != 0) { /* PE uses funny values for .ef and .lf; don't - relocate them. */ + relocate them. */ dst->symbol.flags = BSF_DEBUGGING; } else @@ -4702,13 +4879,13 @@ coff_slurp_symbol_table (bfd * abfd) break; case C_STATLAB: /* Static load time label. */ - dst->symbol.value = src->u.syment.n_value; - dst->symbol.flags = BSF_GLOBAL; - break; + dst->symbol.value = src->u.syment.n_value; + dst->symbol.flags = BSF_GLOBAL; + break; case C_NULL: /* PE DLLs sometimes have zeroed out symbols for some - reason. Just ignore them without a warning. */ + reason. Just ignore them without a warning. */ if (src->u.syment.n_type == 0 && src->u.syment.n_value == 0 && src->u.syment.n_scnum == 0) @@ -4718,8 +4895,8 @@ coff_slurp_symbol_table (bfd * abfd) case C_ULABEL: /* Undefined label. */ case C_USTATIC: /* Undefined static. */ #ifndef COFF_WITH_PE - /* C_LINE in regular coff is 0x68. NT has taken over this storage - class to represent a section symbol. */ + /* C_LINE in regular coff is 0x68. NT has taken over this storage + class to represent a section symbol. */ case C_LINE: /* line # reformatted as symbol table entry. */ /* NT uses 0x67 for a weak symbol, not C_ALIAS. */ case C_ALIAS: /* Duplicate tag. */ @@ -4822,7 +4999,7 @@ coff_classify_symbol (bfd *abfd, #ifdef STRICT_PE_FORMAT /* This is correct for Microsoft generated objects, but it - breaks gas generated objects. */ + breaks gas generated objects. */ if (syment->n_value == 0) { asection *sec; @@ -4843,8 +5020,8 @@ coff_classify_symbol (bfd *abfd, if (syment->n_sclass == C_SECTION) { /* In some cases in a DLL generated by the Microsoft linker, the - n_value field will contain garbage. FIXME: This should - probably be handled by the swapping function instead. */ + n_value field will contain garbage. FIXME: This should + probably be handled by the swapping function instead. */ syment->n_value = 0; if (syment->n_scnum == 0) return COFF_SYMBOL_UNDEFINED; @@ -4893,23 +5070,23 @@ SUBSUBSECTION */ #ifndef CALC_ADDEND -#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 = 0; \ - else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ - && ptr->section != NULL) \ - cache_ptr->addend = - (ptr->section->vma + ptr->value); \ - else \ - cache_ptr->addend = 0; \ +#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 = 0; \ + else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ + && ptr->section != NULL) \ + cache_ptr->addend = - (ptr->section->vma + ptr->value); \ + else \ + cache_ptr->addend = 0; \ } #endif @@ -4934,7 +5111,7 @@ coff_slurp_reloc_table (bfd * abfd, sec_ptr asect, asymbol ** symbols) amt = (bfd_size_type) bfd_coff_relsz (abfd) * asect->reloc_count; native_relocs = (RELOC *) buy_and_read (abfd, asect->rel_filepos, amt); amt = (bfd_size_type) asect->reloc_count * sizeof (arelent); - reloc_cache = bfd_alloc (abfd, amt); + reloc_cache = (arelent *) bfd_alloc (abfd, amt); if (reloc_cache == NULL || native_relocs == NULL) return FALSE; @@ -5226,7 +5403,7 @@ coff_final_link_postscript (bfd * abfd ATTRIBUTE_UNUSED, #define coff_SWAP_scnhdr_in coff_swap_scnhdr_in #endif -static const bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED = +static bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED = { coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in, coff_SWAP_aux_out, coff_SWAP_sym_out, @@ -5239,11 +5416,7 @@ static const bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED = #else FALSE, #endif -#ifdef COFF_LONG_SECTION_NAMES - TRUE, -#else - FALSE, -#endif + COFF_DEFAULT_LONG_SECTION_NAMES, COFF_DEFAULT_SECTION_ALIGNMENT_POWER, #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS TRUE, @@ -5263,13 +5436,14 @@ static const bfd_coff_backend_data bfd_coff_std_swap_table ATTRIBUTE_UNUSED = coff_classify_symbol, coff_compute_section_file_positions, coff_start_final_link, coff_relocate_section, coff_rtype_to_howto, coff_adjust_symndx, coff_link_add_one_symbol, - coff_link_output_has_begun, coff_final_link_postscript + coff_link_output_has_begun, coff_final_link_postscript, + bfd_pe_print_pdata }; #ifdef TICOFF /* COFF0 differs in file/section header size and relocation entry size. */ -static const bfd_coff_backend_data ticoff0_swap_table = +static bfd_coff_backend_data ticoff0_swap_table = { coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in, coff_SWAP_aux_out, coff_SWAP_sym_out, @@ -5282,11 +5456,7 @@ static const bfd_coff_backend_data ticoff0_swap_table = #else FALSE, #endif -#ifdef COFF_LONG_SECTION_NAMES - TRUE, -#else - FALSE, -#endif + COFF_DEFAULT_LONG_SECTION_NAMES, COFF_DEFAULT_SECTION_ALIGNMENT_POWER, #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS TRUE, @@ -5306,14 +5476,15 @@ static const bfd_coff_backend_data ticoff0_swap_table = coff_classify_symbol, coff_compute_section_file_positions, coff_start_final_link, coff_relocate_section, coff_rtype_to_howto, coff_adjust_symndx, coff_link_add_one_symbol, - coff_link_output_has_begun, coff_final_link_postscript + coff_link_output_has_begun, coff_final_link_postscript, + bfd_pe_print_pdata }; #endif #ifdef TICOFF /* COFF1 differs in section header size. */ -static const bfd_coff_backend_data ticoff1_swap_table = +static bfd_coff_backend_data ticoff1_swap_table = { coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in, coff_SWAP_aux_out, coff_SWAP_sym_out, @@ -5326,11 +5497,7 @@ static const bfd_coff_backend_data ticoff1_swap_table = #else FALSE, #endif -#ifdef COFF_LONG_SECTION_NAMES - TRUE, -#else - FALSE, -#endif + COFF_DEFAULT_LONG_SECTION_NAMES, COFF_DEFAULT_SECTION_ALIGNMENT_POWER, #ifdef COFF_FORCE_SYMBOLS_IN_STRINGS TRUE, @@ -5350,20 +5517,21 @@ static const bfd_coff_backend_data ticoff1_swap_table = coff_classify_symbol, coff_compute_section_file_positions, coff_start_final_link, coff_relocate_section, coff_rtype_to_howto, coff_adjust_symndx, coff_link_add_one_symbol, - coff_link_output_has_begun, coff_final_link_postscript + coff_link_output_has_begun, coff_final_link_postscript, + bfd_pe_print_pdata /* huh */ }; #endif #ifndef coff_close_and_cleanup -#define coff_close_and_cleanup _bfd_generic_close_and_cleanup +#define coff_close_and_cleanup _bfd_generic_close_and_cleanup #endif #ifndef coff_bfd_free_cached_info -#define coff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define coff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info #endif #ifndef coff_get_section_contents -#define coff_get_section_contents _bfd_generic_get_section_contents +#define coff_get_section_contents _bfd_generic_get_section_contents #endif #ifndef coff_bfd_copy_private_symbol_data @@ -5387,7 +5555,7 @@ static const bfd_coff_backend_data ticoff1_swap_table = #endif #ifndef coff_bfd_set_private_flags -#define coff_bfd_set_private_flags _bfd_generic_bfd_set_private_flags +#define coff_bfd_set_private_flags _bfd_generic_bfd_set_private_flags #endif #ifndef coff_bfd_print_private_bfd_data @@ -5449,6 +5617,10 @@ static const bfd_coff_backend_data ticoff1_swap_table = _bfd_generic_section_already_linked #endif +#ifndef coff_bfd_define_common_symbol +#define coff_bfd_define_common_symbol bfd_generic_define_common_symbol +#endif + #define CREATE_BIG_COFF_TARGET_VEC(VAR, NAME, EXTRA_O_FLAGS, EXTRA_S_FLAGS, UNDER, ALTERNATIVE, SWAP_TABLE) \ const bfd_target VAR = \ { \ @@ -5464,12 +5636,12 @@ const bfd_target VAR = \ UNDER, /* Leading symbol underscore. */ \ '/', /* AR_pad_char. */ \ 15, /* AR_max_namelen. */ \ - \ + \ /* Data conversion functions. */ \ bfd_getb64, bfd_getb_signed_64, bfd_putb64, \ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \ bfd_getb16, bfd_getb_signed_16, bfd_putb16, \ - \ + \ /* Header conversion functions. */ \ bfd_getb64, bfd_getb_signed_64, bfd_putb64, \ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \ @@ -5493,9 +5665,9 @@ const bfd_target VAR = \ BFD_JUMP_TABLE_WRITE (coff), \ BFD_JUMP_TABLE_LINK (coff), \ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), \ - \ + \ ALTERNATIVE, \ - \ + \ SWAP_TABLE \ }; @@ -5514,12 +5686,12 @@ const bfd_target VAR = \ UNDER, /* Leading symbol underscore. */ \ '/', /* AR_pad_char. */ \ 15, /* AR_max_namelen. */ \ - \ + \ /* Data conversion functions. */ \ bfd_getb64, bfd_getb_signed_64, bfd_putb64, \ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \ bfd_getb16, bfd_getb_signed_16, bfd_putb16, \ - \ + \ /* Header conversion functions. */ \ bfd_getb64, bfd_getb_signed_64, bfd_putb64, \ bfd_getb32, bfd_getb_signed_32, bfd_putb32, \ @@ -5543,9 +5715,9 @@ const bfd_target VAR = \ BFD_JUMP_TABLE_WRITE (coff), \ BFD_JUMP_TABLE_LINK (coff), \ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), \ - \ + \ ALTERNATIVE, \ - \ + \ SWAP_TABLE \ }; @@ -5593,6 +5765,6 @@ const bfd_target VAR = \ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), \ \ ALTERNATIVE, \ - \ + \ SWAP_TABLE \ }; diff --git a/bfd/coffgen.c b/bfd/coffgen.c index 0e8b7ed..5f6921d 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -59,8 +59,13 @@ make_a_section_from_file (bfd *abfd, name = NULL; - /* Handle long section names as in PE. */ - if (bfd_coff_long_section_names (abfd) + /* Handle long section names as in PE. On reading, we want to + accept long names if the format permits them at all, regardless + of the current state of the flag that dictates if we would generate + them in outputs; this construct checks if that is the case by + attempting to set the flag, without changing its state; the call + will fail for formats that do not support long names at all. */ + if (bfd_coff_set_long_section_names (abfd, bfd_coff_long_section_names (abfd)) && hdr->s_name[0] == '/') { char buf[SCNNMLEN]; @@ -68,6 +73,11 @@ make_a_section_from_file (bfd *abfd, char *p; const char *strings; + /* Flag that this BFD uses long names, even though the format might + expect them to be off by default. This won't directly affect the + format of any output BFD created from this one, but the information + can be used to decide what to do. */ + bfd_coff_set_long_section_names (abfd, TRUE); memcpy (buf, hdr->s_name + 1, SCNNMLEN - 1); buf[SCNNMLEN - 1] = '\0'; strindex = strtol (buf, &p, 10); @@ -80,7 +90,8 @@ make_a_section_from_file (bfd *abfd, strindex does not run us past the end, but right now we don't know the length of the string table. */ strings += strindex; - name = bfd_alloc (abfd, (bfd_size_type) strlen (strings) + 1); + name = (char *) bfd_alloc (abfd, + (bfd_size_type) strlen (strings) + 1); if (name == NULL) return FALSE; strcpy (name, strings); @@ -90,7 +101,8 @@ make_a_section_from_file (bfd *abfd, if (name == NULL) { /* Assorted wastage to null-terminate the name, thanks AT&T! */ - name = bfd_alloc (abfd, (bfd_size_type) sizeof (hdr->s_name) + 1); + name = (char *) bfd_alloc (abfd, + (bfd_size_type) sizeof (hdr->s_name) + 1); if (name == NULL) return FALSE; strncpy (name, (char *) &hdr->s_name[0], sizeof (hdr->s_name)); @@ -185,7 +197,7 @@ coff_real_object_p (bfd *abfd, scnhsz = bfd_coff_scnhsz (abfd); readsize = (bfd_size_type) nscns * scnhsz; - external_sections = bfd_alloc (abfd, readsize); + external_sections = (char *) bfd_alloc (abfd, readsize); if (!external_sections) goto fail; @@ -427,7 +439,7 @@ _bfd_coff_read_internal_relocs (bfd *abfd, amt = sec->reloc_count * relsz; if (external_relocs == NULL) { - free_external = bfd_malloc (amt); + free_external = (bfd_byte *) bfd_malloc (amt); if (free_external == NULL) goto error_return; external_relocs = free_external; @@ -441,7 +453,7 @@ _bfd_coff_read_internal_relocs (bfd *abfd, { amt = sec->reloc_count; amt *= sizeof (struct internal_reloc); - free_internal = bfd_malloc (amt); + free_internal = (struct internal_reloc *) bfd_malloc (amt); if (free_internal == NULL) goto error_return; internal_relocs = free_internal; @@ -641,7 +653,7 @@ coff_renumber_symbols (bfd *bfd_ptr, int *first_undef) bfd_size_type amt; amt = sizeof (asymbol *) * ((bfd_size_type) symbol_count + 1); - newsyms = bfd_alloc (bfd_ptr, amt); + newsyms = (asymbol **) bfd_alloc (bfd_ptr, amt); if (!newsyms) return FALSE; bfd_ptr->outsymbols = newsyms; @@ -902,7 +914,7 @@ coff_write_symbol (bfd *abfd, { unsigned int numaux = native->u.syment.n_numaux; int type = native->u.syment.n_type; - int class = native->u.syment.n_sclass; + int n_sclass = (int) native->u.syment.n_sclass; void * buf; bfd_size_type symesz; @@ -948,7 +960,7 @@ coff_write_symbol (bfd *abfd, { bfd_coff_swap_aux_out (abfd, &((native + j + 1)->u.auxent), - type, class, (int) j, + type, n_sclass, (int) j, native->u.syment.n_numaux, buf); if (bfd_bwrite (buf, auxesz, abfd) != auxesz) @@ -1082,6 +1094,11 @@ coff_write_native_symbol (bfd *abfd, debug_string_size_p); } +static void +null_error_handler (const char * fmt ATTRIBUTE_UNUSED, ...) +{ +} + /* Write out the COFF symbols. */ bfd_boolean @@ -1138,6 +1155,43 @@ coff_write_symbols (bfd *abfd) } else { + if (coff_backend_info (abfd)->_bfd_coff_classify_symbol != NULL) + { + bfd_error_handler_type current_error_handler; + enum coff_symbol_classification sym_class; + unsigned char *n_sclass; + + /* Suppress error reporting by bfd_coff_classify_symbol. + Error messages can be generated when we are processing a local + symbol which has no associated section and we do not have to + worry about this, all we need to know is that it is local. */ + current_error_handler = bfd_set_error_handler (null_error_handler); + sym_class = bfd_coff_classify_symbol (abfd, + &c_symbol->native->u.syment); + (void) bfd_set_error_handler (current_error_handler); + + n_sclass = &c_symbol->native->u.syment.n_sclass; + + /* If the symbol class has been changed (eg objcopy/ld script/etc) + we cannot retain the existing sclass from the original symbol. + Weak symbols only have one valid sclass, so just set it always. + If it is not local class and should be, set it C_STAT. + If it is global and not classified as global, or if it is + weak (which is also classified as global), set it C_EXT. */ + + if (symbol->flags & BSF_WEAK) + *n_sclass = obj_pe (abfd) ? C_NT_WEAK : C_WEAKEXT; + else if (symbol->flags & BSF_LOCAL && sym_class != COFF_SYMBOL_LOCAL) + *n_sclass = C_STAT; + else if (symbol->flags & BSF_GLOBAL + && (sym_class != COFF_SYMBOL_GLOBAL +#ifdef COFF_WITH_PE + || *n_sclass == C_NT_WEAK +#endif + || *n_sclass == C_WEAKEXT)) + c_symbol->native->u.syment.n_sclass = C_EXT; + } + if (!coff_write_native_symbol (abfd, c_symbol, &written, &string_size, &debug_string_section, &debug_string_size)) @@ -1339,7 +1393,7 @@ coff_pointerize_aux (bfd *abfd, combined_entry_type *auxent) { unsigned int type = symbol->u.syment.n_type; - unsigned int class = symbol->u.syment.n_sclass; + unsigned int n_sclass = symbol->u.syment.n_sclass; if (coff_backend_info (abfd)->_bfd_coff_pointerize_aux_hook) { @@ -1349,16 +1403,17 @@ coff_pointerize_aux (bfd *abfd, } /* Don't bother if this is a file or a section. */ - if (class == C_STAT && type == T_NULL) + if (n_sclass == C_STAT && type == T_NULL) return; - if (class == C_FILE) + if (n_sclass == C_FILE) return; /* Otherwise patch up. */ #define N_TMASK coff_data (abfd)->local_n_tmask #define N_BTSHFT coff_data (abfd)->local_n_btshft - if ((ISFCN (type) || ISTAG (class) || class == C_BLOCK || class == C_FCN) + if ((ISFCN (type) || ISTAG (n_sclass) || n_sclass == C_BLOCK + || n_sclass == C_FCN) && auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.l > 0) { auxent->u.auxent.x_sym.x_fcnary.x_fcn.x_endndx.p = @@ -1395,7 +1450,7 @@ build_debug_section (bfd *abfd) } sec_size = sect->size; - debug_section = bfd_alloc (abfd, sec_size); + debug_section = (char *) bfd_alloc (abfd, sec_size); if (debug_section == NULL) return NULL; @@ -1425,7 +1480,7 @@ copy_name (bfd *abfd, char *name, size_t maxlen) if (name[len] == '\0') break; - if ((newname = bfd_alloc (abfd, (bfd_size_type) len + 1)) == NULL) + if ((newname = (char *) bfd_alloc (abfd, (bfd_size_type) len + 1)) == NULL) return NULL; strncpy (newname, name, len); @@ -1520,7 +1575,7 @@ _bfd_coff_read_string_table (bfd *abfd) return NULL; } - strings = bfd_malloc (strsize); + strings = (char *) bfd_malloc (strsize); if (strings == NULL) return NULL; @@ -1579,7 +1634,7 @@ coff_get_normalized_symtab (bfd *abfd) return obj_raw_syments (abfd); size = obj_raw_syment_count (abfd) * sizeof (combined_entry_type); - internal = bfd_zalloc (abfd, size); + internal = (combined_entry_type *) bfd_zalloc (abfd, size); if (internal == NULL && size != 0) return NULL; internal_end = internal + obj_raw_syment_count (abfd); @@ -1685,7 +1740,7 @@ coff_get_normalized_symtab (bfd *abfd) if (internal_ptr->u.syment._n._n_name[i] == '\0') break; - newstring = bfd_zalloc (abfd, (bfd_size_type) (i + 1)); + newstring = (char *) bfd_zalloc (abfd, (bfd_size_type) (i + 1)); if (newstring == NULL) return NULL; strncpy (newstring, internal_ptr->u.syment._n._n_name, i); @@ -1743,17 +1798,17 @@ asymbol * coff_make_empty_symbol (bfd *abfd) { bfd_size_type amt = sizeof (coff_symbol_type); - coff_symbol_type *new = bfd_zalloc (abfd, amt); + coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_zalloc (abfd, amt); - if (new == NULL) + if (new_symbol == NULL) return NULL; - new->symbol.section = 0; - new->native = 0; - new->lineno = NULL; - new->done_lineno = FALSE; - new->symbol.the_bfd = abfd; + new_symbol->symbol.section = 0; + new_symbol->native = 0; + new_symbol->lineno = NULL; + new_symbol->done_lineno = FALSE; + new_symbol->symbol.the_bfd = abfd; - return & new->symbol; + return & new_symbol->symbol; } /* Make a debugging symbol. */ @@ -1764,23 +1819,23 @@ coff_bfd_make_debug_symbol (bfd *abfd, unsigned long sz ATTRIBUTE_UNUSED) { bfd_size_type amt = sizeof (coff_symbol_type); - coff_symbol_type *new = bfd_alloc (abfd, amt); + coff_symbol_type *new_symbol = (coff_symbol_type *) bfd_alloc (abfd, amt); - if (new == NULL) + if (new_symbol == NULL) return NULL; /* @@ 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; - new->native = bfd_zalloc (abfd, amt); - if (!new->native) + new_symbol->native = (combined_entry_type *) bfd_zalloc (abfd, amt); + if (!new_symbol->native) return NULL; - new->symbol.section = bfd_abs_section_ptr; - new->symbol.flags = BSF_DEBUGGING; - new->lineno = NULL; - new->done_lineno = FALSE; - new->symbol.the_bfd = abfd; + new_symbol->symbol.section = bfd_abs_section_ptr; + new_symbol->symbol.flags = BSF_DEBUGGING; + new_symbol->lineno = NULL; + new_symbol->done_lineno = FALSE; + new_symbol->symbol.the_bfd = abfd; - return & new->symbol; + return & new_symbol->symbol; } void @@ -1908,16 +1963,7 @@ coff_print_symbol (bfd *abfd, combined->u.syment.n_type, combined->u.syment.n_sclass, combined->u.syment.n_numaux); -#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); + bfd_fprintf_vma (abfd, file, val); fprintf (file, " %s", symbol->name); for (aux = 0; aux < combined->u.syment.n_numaux; aux++) @@ -1946,7 +1992,7 @@ coff_print_symbol (bfd *abfd, /* Probably a section symbol ? */ { fprintf (file, "AUX scnlen 0x%lx nreloc %d nlnno %d", - (long) auxp->u.auxent.x_scn.x_scnlen, + (unsigned long) auxp->u.auxent.x_scn.x_scnlen, auxp->u.auxent.x_scn.x_nreloc, auxp->u.auxent.x_scn.x_nlinno); if (auxp->u.auxent.x_scn.x_checksum != 0 @@ -1960,6 +2006,7 @@ coff_print_symbol (bfd *abfd, } /* Otherwise fall through. */ case C_EXT: + case C_AIX_WEAKEXT: if (ISFCN (combined->u.syment.n_type)) { long next, llnos; @@ -1972,7 +2019,8 @@ coff_print_symbol (bfd *abfd, llnos = auxp->u.auxent.x_sym.x_fcnary.x_fcn.x_lnnoptr; fprintf (file, "AUX tagndx %ld ttlsiz 0x%lx lnnos %ld next %ld", - tagndx, auxp->u.auxent.x_sym.x_misc.x_fsize, + tagndx, + (unsigned long) auxp->u.auxent.x_sym.x_misc.x_fsize, llnos, next); break; } @@ -1998,7 +2046,7 @@ coff_print_symbol (bfd *abfd, while (l->line_number) { fprintf (file, "\n%4d : ", l->line_number); - fprintf_vma (file, l->u.offset + symbol->section->vma); + bfd_fprintf_vma (abfd, file, l->u.offset + symbol->section->vma); l++; } } @@ -2144,7 +2192,7 @@ coff_find_nearest_line (bfd *abfd, } /* Now wander though the raw linenumbers of the section. */ - /* If we have been called on this section before, and th. e offset we + /* If we have been called on this section before, and the offset we want is further down then we can prime the lookup loop. */ sec_data = coff_section_data (abfd, section); if (sec_data != NULL @@ -2231,7 +2279,7 @@ coff_find_nearest_line (bfd *abfd, if (sec_data != NULL) { sec_data->offset = offset; - sec_data->i = i; + sec_data->i = i - 1; sec_data->function = *functionname_ptr; sec_data->line_base = line_base; } @@ -2272,7 +2320,7 @@ coff_sizeof_headers (bfd *abfd, struct bfd_link_info *info) bfd_boolean bfd_coff_set_symbol_class (bfd * abfd, asymbol * symbol, - unsigned int class) + unsigned int symbol_class) { coff_symbol_type * csym; @@ -2292,12 +2340,12 @@ bfd_coff_set_symbol_class (bfd * abfd, combined_entry_type * native; bfd_size_type amt = sizeof (* native); - native = bfd_zalloc (abfd, amt); + native = (combined_entry_type *) bfd_zalloc (abfd, amt); if (native == NULL) return FALSE; native->u.syment.n_type = T_NULL; - native->u.syment.n_sclass = class; + native->u.syment.n_sclass = symbol_class; if (bfd_is_und_section (symbol->section)) { @@ -2326,7 +2374,7 @@ bfd_coff_set_symbol_class (bfd * abfd, csym->native = native; } else - csym->native->u.syment.n_sclass = class; + csym->native->u.syment.n_sclass = symbol_class; return TRUE; } diff --git a/bfd/cofflink.c b/bfd/cofflink.c index c6ca559..3253e5e 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -79,7 +79,7 @@ _bfd_coff_link_hash_newfunc (struct bfd_hash_entry *entry, /* Set local fields. */ ret->indx = -1; ret->type = T_NULL; - ret->class = C_NULL; + ret->symbol_class = C_NULL; ret->numaux = 0; ret->auxbfd = NULL; ret->aux = NULL; @@ -110,7 +110,7 @@ _bfd_coff_link_hash_table_create (bfd *abfd) struct coff_link_hash_table *ret; bfd_size_type amt = sizeof (struct coff_link_hash_table); - ret = bfd_malloc (amt); + ret = (struct coff_link_hash_table *) bfd_malloc (amt); if (ret == NULL) return NULL; @@ -320,7 +320,7 @@ coff_link_add_symbols (bfd *abfd, /* We keep a list of the linker hash table entries that correspond to particular symbols. */ amt = symcount * sizeof (struct coff_link_hash_entry *); - sym_hash = bfd_zalloc (abfd, amt); + sym_hash = (struct coff_link_hash_entry **) bfd_zalloc (abfd, amt); if (sym_hash == NULL) goto error_return; obj_coff_sym_hashes (abfd) = sym_hash; @@ -482,20 +482,20 @@ coff_link_add_symbols (bfd *abfd, (*sym_hash)->root.u.c.p->alignment_power = bfd_coff_default_section_alignment_power (abfd); - if (info->hash->creator->flavour == bfd_get_flavour (abfd)) + if (bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd)) { /* If we don't have any symbol information currently in the hash table, or if we are looking at a symbol definition, then update the symbol class and type in the hash table. */ - if (((*sym_hash)->class == C_NULL + if (((*sym_hash)->symbol_class == C_NULL && (*sym_hash)->type == T_NULL) || sym.n_scnum != 0 || (sym.n_value != 0 && (*sym_hash)->root.type != bfd_link_hash_defined && (*sym_hash)->root.type != bfd_link_hash_defweak)) { - (*sym_hash)->class = sym.n_sclass; + (*sym_hash)->symbol_class = sym.n_sclass; if (sym.n_type != T_NULL) { /* We want to warn if the type changed, but not @@ -574,7 +574,7 @@ coff_link_add_symbols (bfd *abfd, optimize the handling of any .stab/.stabstr sections. */ if (! info->relocatable && ! info->traditional_format - && info->hash->creator->flavour == bfd_get_flavour (abfd) + && bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd) && (info->strip != strip_all && info->strip != strip_debugger)) { asection *stabstr; @@ -772,7 +772,7 @@ _bfd_coff_final_link (bfd *abfd, the target_index fields are 1 based. */ amt = abfd->section_count + 1; amt *= sizeof (struct coff_link_section_info); - finfo.section_info = bfd_malloc (amt); + finfo.section_info = (struct coff_link_section_info *) bfd_malloc (amt); if (finfo.section_info == NULL) goto error_return; for (i = 0; i <= abfd->section_count; i++) @@ -815,10 +815,12 @@ _bfd_coff_final_link (bfd *abfd, BFD_ASSERT (info->relocatable); amt = o->reloc_count; amt *= sizeof (struct internal_reloc); - finfo.section_info[o->target_index].relocs = bfd_malloc (amt); + finfo.section_info[o->target_index].relocs = + (struct internal_reloc *) bfd_malloc (amt); amt = o->reloc_count; amt *= sizeof (struct coff_link_hash_entry *); - finfo.section_info[o->target_index].rel_hashes = bfd_malloc (amt); + finfo.section_info[o->target_index].rel_hashes = + (struct coff_link_hash_entry **) bfd_malloc (amt); if (finfo.section_info[o->target_index].relocs == NULL || finfo.section_info[o->target_index].rel_hashes == NULL) goto error_return; @@ -851,21 +853,21 @@ _bfd_coff_final_link (bfd *abfd, /* Allocate some buffers used while linking. */ amt = max_sym_count * sizeof (struct internal_syment); - finfo.internal_syms = bfd_malloc (amt); + finfo.internal_syms = (struct internal_syment *) bfd_malloc (amt); amt = max_sym_count * sizeof (asection *); - finfo.sec_ptrs = bfd_malloc (amt); + finfo.sec_ptrs = (asection **) bfd_malloc (amt); amt = max_sym_count * sizeof (long); - finfo.sym_indices = bfd_malloc (amt); - finfo.outsyms = bfd_malloc ((max_sym_count + 1) * symesz); + finfo.sym_indices = (long int *) bfd_malloc (amt); + finfo.outsyms = (bfd_byte *) bfd_malloc ((max_sym_count + 1) * symesz); amt = max_lineno_count * bfd_coff_linesz (abfd); - finfo.linenos = bfd_malloc (amt); - finfo.contents = bfd_malloc (max_contents_size); + finfo.linenos = (bfd_byte *) bfd_malloc (amt); + finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); amt = max_reloc_count * relsz; - finfo.external_relocs = bfd_malloc (amt); + finfo.external_relocs = (bfd_byte *) bfd_malloc (amt); if (! info->relocatable) { amt = max_reloc_count * sizeof (struct internal_reloc); - finfo.internal_relocs = bfd_malloc (amt); + finfo.internal_relocs = (struct internal_reloc *) bfd_malloc (amt); } if ((finfo.internal_syms == NULL && max_sym_count > 0) || (finfo.sec_ptrs == NULL && max_sym_count > 0) @@ -1015,7 +1017,7 @@ _bfd_coff_final_link (bfd *abfd, the symbol indices to use for relocs against them, and we can finally write out the relocs. */ amt = max_output_reloc_count * relsz; - external_relocs = bfd_malloc (amt); + external_relocs = (bfd_byte *) bfd_malloc (amt); if (external_relocs == NULL) goto error_return; @@ -1282,6 +1284,15 @@ process_embedded_commands (bfd *output_bfd, else if (CONST_STRNEQ (s, "-stack")) s = dores_com (s + 6, output_bfd, 0); + /* GNU extension for aligned commons. */ + else if (CONST_STRNEQ (s, "-aligncomm:")) + { + /* Common symbols must be aligned on reading, as it + is too late to do anything here, after they have + already been allocated, so just skip the directive. */ + s += 11; + } + else s++; } @@ -1593,10 +1604,10 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd) out to be a duplicate, we pass this address to bfd_release. */ amt = sizeof (struct coff_debug_merge_type); - mt = bfd_alloc (input_bfd, amt); + mt = (struct coff_debug_merge_type *) bfd_alloc (input_bfd, amt); if (mt == NULL) return FALSE; - mt->class = isym.n_sclass; + mt->type_class = isym.n_sclass; /* Pick up the aux entry, which points to the end of the tag entries. */ @@ -1620,7 +1631,8 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd) bfd_coff_swap_sym_in (input_bfd, esl, islp); amt = sizeof (struct coff_debug_merge_element); - *epp = bfd_alloc (input_bfd, amt); + *epp = (struct coff_debug_merge_element *) + bfd_alloc (input_bfd, amt); if (*epp == NULL) return FALSE; @@ -1630,7 +1642,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd) return FALSE; amt = strlen (elename) + 1; - name_copy = bfd_alloc (input_bfd, amt); + name_copy = (char *) bfd_alloc (input_bfd, amt); if (name_copy == NULL) return FALSE; strcpy (name_copy, elename); @@ -1685,7 +1697,7 @@ _bfd_coff_link_input_bfd (struct coff_final_link_info *finfo, bfd *input_bfd) { struct coff_debug_merge_element *me, *mel; - if (mtl->class != mt->class) + if (mtl->type_class != mt->type_class) continue; for (me = mt->elements, mel = mtl->elements; @@ -2547,7 +2559,7 @@ _bfd_coff_write_global_sym (struct coff_link_hash_entry *h, void *data) isym._n._n_n._n_offset = STRING_SIZE_SIZE + indx; } - isym.n_sclass = h->class; + isym.n_sclass = h->symbol_class; isym.n_type = h->type; if (isym.n_sclass == C_NULL) @@ -2720,7 +2732,7 @@ _bfd_coff_reloc_link_order (bfd *output_bfd, file_ptr loc; size = bfd_get_reloc_size (howto); - buf = bfd_zmalloc (size); + buf = (bfd_byte *) bfd_zmalloc (size); if (buf == NULL) return FALSE; @@ -2933,7 +2945,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, else if (h->root.type == bfd_link_hash_undefweak) { - if (h->class == C_NT_WEAK && h->numaux == 1) + if (h->symbol_class == C_NT_WEAK && h->numaux == 1) { /* See _Microsoft Portable Executable and Common Object File Format Specification_, section 5.5.3. @@ -2947,7 +2959,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, See also linker.c: generic_link_check_archive_element. */ asection *sec; struct coff_link_hash_entry *h2 = - input_bfd->tdata.coff_obj_data->sym_hashes[ + h->auxbfd->tdata.coff_obj_data->sym_hashes[ h->aux->x_sym.x_tagndx.l]; if (!h2 || h2->root.type == bfd_link_hash_undefined) @@ -2985,16 +2997,16 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, absolute. We output the address here to a file. This file is then read by dlltool when generating the reloc section. Note that the base file is not - portable between systems. We write out a long here, - and dlltool reads in a long. */ - long addr = (rel->r_vaddr + portable between systems. We write out a bfd_vma here, + and dlltool reads in a bfd_vma. */ + bfd_vma addr = (rel->r_vaddr - input_section->vma + input_section->output_offset + input_section->output_section->vma); if (coff_data (output_bfd)->pe) addr -= pe_data(output_bfd)->pe_opthdr.ImageBase; - if (fwrite (&addr, 1, sizeof (long), (FILE *) info->base_file) - != sizeof (long)) + if (fwrite (&addr, 1, sizeof (bfd_vma), (FILE *) info->base_file) + != sizeof (bfd_vma)) { bfd_set_error (bfd_error_system_call); return FALSE; diff --git a/bfd/coffswap.h b/bfd/coffswap.h index 8e1911f..674fdc7 100644 --- a/bfd/coffswap.h +++ b/bfd/coffswap.h @@ -1,6 +1,6 @@ /* Generic COFF swapping routines, for BFD. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, - 2001, 2002, 2005, 2007 + 2001, 2002, 2004, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. @@ -382,7 +382,7 @@ static void coff_swap_aux_in (bfd *abfd, void * ext1, int type, - int class, + int in_class, int indx, int numaux, void * in1) @@ -391,10 +391,10 @@ coff_swap_aux_in (bfd *abfd, union internal_auxent *in = (union internal_auxent *) in1; #ifdef COFF_ADJUST_AUX_IN_PRE - COFF_ADJUST_AUX_IN_PRE (abfd, ext1, type, class, indx, numaux, in1); + COFF_ADJUST_AUX_IN_PRE (abfd, ext1, type, in_class, indx, numaux, in1); #endif - switch (class) + switch (in_class) { case C_FILE: if (ext->x_file.x_fname[0] == 0) @@ -446,7 +446,8 @@ coff_swap_aux_in (bfd *abfd, in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx); #endif - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext); in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext); @@ -477,7 +478,7 @@ coff_swap_aux_in (bfd *abfd, end: ; #ifdef COFF_ADJUST_AUX_IN_POST - COFF_ADJUST_AUX_IN_POST (abfd, ext1, type, class, indx, numaux, in1); + COFF_ADJUST_AUX_IN_POST (abfd, ext1, type, in_class, indx, numaux, in1); #endif } @@ -485,7 +486,7 @@ static unsigned int coff_swap_aux_out (bfd * abfd, void * inp, int type, - int class, + int in_class, int indx ATTRIBUTE_UNUSED, int numaux ATTRIBUTE_UNUSED, void * extp) @@ -494,12 +495,12 @@ coff_swap_aux_out (bfd * abfd, AUXENT *ext = (AUXENT *) extp; #ifdef COFF_ADJUST_AUX_OUT_PRE - COFF_ADJUST_AUX_OUT_PRE (abfd, inp, type, class, indx, numaux, extp); + COFF_ADJUST_AUX_OUT_PRE (abfd, inp, type, in_class, indx, numaux, extp); #endif memset (ext, 0, AUXESZ); - switch (class) + switch (in_class) { case C_FILE: if (in->x_file.x_fname[0] == 0) @@ -537,7 +538,8 @@ coff_swap_aux_out (bfd * abfd, H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx); #endif - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { PUT_FCN_LNNOPTR (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext); PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext); @@ -567,7 +569,7 @@ coff_swap_aux_out (bfd * abfd, end: #ifdef COFF_ADJUST_AUX_OUT_POST - COFF_ADJUST_AUX_OUT_POST (abfd, inp, type, class, indx, numaux, extp); + COFF_ADJUST_AUX_OUT_POST (abfd, inp, type, in_class, indx, numaux, extp); #endif return AUXESZ; } diff --git a/bfd/compress.c b/bfd/compress.c new file mode 100644 index 0000000..5b6ee0e --- /dev/null +++ b/bfd/compress.c @@ -0,0 +1,122 @@ +/* ELF attributes support (based on ARM EABI attributes). + Copyright 2008 + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "config.h" +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" +#ifdef HAVE_ZLIB_H +#include +#endif + +/* +FUNCTION + bfd_uncompress_section_contents + +SYNOPSIS + bfd_boolean bfd_uncompress_section_contents + (bfd_byte **buffer, bfd_size_type *size); + +DESCRIPTION + + Uncompresses a section that was compressed using zlib, in place. At + the call to this function, *@var{buffer} and *@var{size} should point + to the section contents to be uncompressed. At the end of the + function, *@var{buffer} and *@var{size} will point to the uncompressed + contents. This function assumes *BUFFER was allocated using + bfd_malloc() or equivalent. If the section is not a valid compressed + section, or zlib is not installed on this machine, the input is + unmodified. + + Returns @code{FALSE} if unable to uncompress successfully; in that case + the input is unmodified. Otherwise, returns @code{TRUE}. +*/ + +bfd_boolean +bfd_uncompress_section_contents (bfd_byte **buffer, bfd_size_type *size) +{ +#ifndef HAVE_ZLIB_H + /* These are just to quiet gcc. */ + buffer = 0; + size = 0; + return FALSE; +#else + bfd_size_type compressed_size = *size; + bfd_byte *compressed_buffer = *buffer; + bfd_size_type uncompressed_size; + bfd_byte *uncompressed_buffer; + z_stream strm; + int rc; + bfd_size_type header_size = 12; + + /* Read the zlib header. In this case, it should be "ZLIB" followed + by the uncompressed section size, 8 bytes in big-endian order. */ + if (compressed_size < header_size + || ! CONST_STRNEQ ((char*) compressed_buffer, "ZLIB")) + return FALSE; + uncompressed_size = compressed_buffer[4]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[5]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[6]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[7]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[8]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[9]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[10]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[11]; + + /* It is possible the section consists of several compressed + buffers concatenated together, so we uncompress in a loop. */ + strm.zalloc = NULL; + strm.zfree = NULL; + strm.opaque = NULL; + strm.avail_in = compressed_size - header_size; + strm.next_in = (Bytef*) compressed_buffer + header_size; + strm.avail_out = uncompressed_size; + uncompressed_buffer = (bfd_byte *) bfd_malloc (uncompressed_size); + if (! uncompressed_buffer) + return FALSE; + + rc = inflateInit (&strm); + while (strm.avail_in > 0) + { + if (rc != Z_OK) + goto fail; + strm.next_out = ((Bytef*) uncompressed_buffer + + (uncompressed_size - strm.avail_out)); + rc = inflate (&strm, Z_FINISH); + if (rc != Z_STREAM_END) + goto fail; + rc = inflateReset (&strm); + } + rc = inflateEnd (&strm); + if (rc != Z_OK + || strm.avail_out != 0) + goto fail; + + free (compressed_buffer); + *buffer = uncompressed_buffer; + *size = uncompressed_size; + return TRUE; + + fail: + free (uncompressed_buffer); + return FALSE; +#endif /* HAVE_ZLIB_H */ +} diff --git a/bfd/config.bfd b/bfd/config.bfd index 198dfe4..e340251 100644 --- a/bfd/config.bfd +++ b/bfd/config.bfd @@ -71,6 +71,7 @@ esac targ_cpu=`echo $targ | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` case "${targ_cpu}" in alpha*) targ_archs=bfd_alpha_arch ;; +am34*|am33_2.0*) targ_archs=bfd_mn10300_arch ;; arm*) targ_archs=bfd_arm_arch ;; bfin*) targ_archs=bfd_bfin_arch ;; c30*) targ_archs=bfd_tic30_arch ;; @@ -84,11 +85,13 @@ 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 ;; +lm32) targ_archs=bfd_lm32_arch ;; m6811*|m68hc11*) targ_archs="bfd_m68hc11_arch bfd_m68hc12_arch" ;; m6812*|m68hc12*) targ_archs="bfd_m68hc12_arch bfd_m68hc11_arch" ;; m68*) targ_archs=bfd_m68k_arch ;; m88*) targ_archs=bfd_m88k_arch ;; maxq*) targ_archs=bfd_maxq_arch ;; +microblaze*) targ_archs=bfd_microblaze_arch ;; mips*) targ_archs=bfd_mips_arch ;; or32*) targ_archs=bfd_or32_arch ;; pdp11*) targ_archs=bfd_pdp11_arch ;; @@ -107,7 +110,6 @@ xscale*) targ_archs=bfd_arm_arch ;; xtensa*) targ_archs=bfd_xtensa_arch ;; z80|r800) targ_archs=bfd_z80_arch ;; z8k*) targ_archs=bfd_z8k_arch ;; -am33_2.0) targ_archs=bfd_mn10300_arch ;; *) targ_archs=bfd_${targ_cpu}_arch ;; esac @@ -136,11 +138,16 @@ case "${targ}" in exit 1 ;; + plugin) + targ_defvec=plugin_vec + targ_selvecs="plugin_vec" + ;; + # START OF targmatch.h #ifdef BFD64 alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) targ_defvec=bfd_elf64_alpha_freebsd_vec - targ_selvecs=ecoffalpha_little_vec + targ_selvecs="bfd_elf64_alpha_vec ecoffalpha_little_vec" want64=true # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling. case "${targ}" in @@ -178,7 +185,7 @@ case "${targ}" in ;; 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" + targ_selvecs="bfd_elf64_ia64_big_vec bfd_pei_ia64_vec" want64=true ;; ia64*-*-hpux*) @@ -186,9 +193,13 @@ case "${targ}" in targ_selvecs="bfd_elf64_ia64_hpux_big_vec" want64=true ;; + ia64*-*-*vms*) + targ_defvec=bfd_elf64_ia64_vms_vec + want64=true + ;; sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu) targ_defvec=bfd_elf64_sparc_freebsd_vec - targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec" + targ_selvecs="bfd_elf64_sparc_vec bfd_elf32_sparc_vec sunos_big_vec" ;; sparc64-*-netbsd* | sparc64-*-openbsd*) targ_defvec=bfd_elf64_sparc_vec @@ -197,9 +208,10 @@ case "${targ}" in ;; #endif /* BFD64 */ - am33_2.0-*-linux*) + am34-*-linux* | am33_2.0-*-linux*) targ_defvec=bfd_elf32_am33lin_vec ;; + arc-*-elf*) targ_defvec=bfd_elf32_littlearc_vec targ_selvecs=bfd_elf32_bigarc_vec @@ -232,7 +244,7 @@ case "${targ}" in targ_underscore=no targ_cflags=-DARM_COFF_BUGFIX ;; - arm-wince-pe | arm-*-wince) + arm-wince-pe | arm-*-wince | arm*-*-mingw32ce* | arm*-*-cegcc*) 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 @@ -407,6 +419,10 @@ case "${targ}" in targ_selvecs=bfd_elf32_frv_vec ;; + moxie-*-elf | moxie-*-uclinux) + targ_defvec=bfd_elf32_moxie_vec + ;; + h8300*-*-rtemscoff*) targ_defvec=h8300coff_vec targ_underscore=yes @@ -485,9 +501,16 @@ case "${targ}" in i[3-7]86-*-solaris2*) targ_defvec=bfd_elf32_i386_vec targ_selvecs=i386coff_vec - targ64_selvecs=bfd_elf64_x86_64_vec + targ64_selvecs="bfd_elf64_x86_64_vec bfd_elf64_l1om_vec" + want64=true + ;; +#ifdef BFD64 + x86_64-*-solaris2*) + targ_defvec=bfd_elf32_i386_vec + targ_selvecs="bfd_elf64_x86_64_vec bfd_elf64_l1om_vec i386coff_vec" want64=true ;; +#endif i[3-7]86-*-kaos*) targ_defvec=bfd_elf32_i386_vec targ_selvecs=bfd_elf32_i386_vec @@ -502,6 +525,10 @@ case "${targ}" in i[3-7]86-*-chorus*) targ_defvec=bfd_elf32_i386_vec ;; + i[3-7]86-*-dicos*) + targ_defvec=bfd_elf32_i386_vec + targ64_selvecs="bfd_elf64_x86_64_vec bfd_elf64_l1om_vec" + ;; *-*-msdosdjgpp* | *-*-go32* ) targ_defvec=go32coff_vec targ_selvecs="go32stubbedcoff_vec i386aout_vec" @@ -515,8 +542,8 @@ case "${targ}" in targ_selvecs="i386coff_vec i386aout_vec" ;; i[3-7]86-*-darwin* | i[3-7]86-*-macos10* | i[3-7]86-*-rhapsody*) - targ_defvec=mach_o_le_vec - targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec" + targ_defvec=mach_o_i386_vec + targ_selvecs="mach_o_i386_vec mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec" targ_archs="bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch" ;; i[3-7]86-sequent-bsd*) @@ -535,7 +562,8 @@ case "${targ}" in ;; i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu | i[3-7]86-*-dragonfly*) targ_defvec=bfd_elf32_i386_freebsd_vec - targ_selvecs=i386coff_vec + targ_selvecs="bfd_elf32_i386_vec i386pei_vec i386coff_vec" + targ64_selvecs="bfd_elf64_x86_64_freebsd_vec bfd_elf64_x86_64_vec x86_64pei_vec bfd_elf64_l1om_vec bfd_elf64_l1om_freebsd_vec" # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling. case "${targ}" in i[3-7]86-*-freebsd3* | i[3-7]86-*-freebsd4 | i[3-7]86-*-freebsd4.0*) @@ -545,7 +573,7 @@ case "${targ}" in i[3-7]86-*-netbsdelf* | i[3-7]86-*-netbsd*-gnu* | i[3-7]86-*-knetbsd*-gnu) targ_defvec=bfd_elf32_i386_vec targ_selvecs=i386netbsd_vec - targ64_selvecs=bfd_elf64_x86_64_vec + targ64_selvecs="bfd_elf64_x86_64_vec bfd_elf64_l1om_vec" ;; i[3-7]86-*-netbsdpe*) targ_defvec=i386pe_vec @@ -572,33 +600,44 @@ case "${targ}" in ;; i[3-7]86-*-linux-*) targ_defvec=bfd_elf32_i386_vec - targ_selvecs="i386linux_vec bfd_efi_app_ia32_vec" - targ64_selvecs=bfd_elf64_x86_64_vec + targ_selvecs="i386linux_vec i386pei_vec" + targ64_selvecs="bfd_elf64_x86_64_vec bfd_elf64_l1om_vec" ;; #ifdef BFD64 + x86_64-*-darwin*) + targ_defvec=mach_o_le_vec + targ_selvecs="mach_o_le_vec mach_o_be_vec mach_o_fat_vec pef_vec pef_xlib_vec sym_vec" + targ_archs="bfd_i386_arch bfd_powerpc_arch bfd_rs6000_arch" + want64=true + ;; + x86_64-*-dicos*) + targ_defvec=bfd_elf64_x86_64_vec + targ_selvecs="bfd_elf32_i386_vec bfd_elf64_l1om_vec" + want64=true + ;; x86_64-*-elf*) targ_defvec=bfd_elf64_x86_64_vec - targ_selvecs="bfd_elf32_i386_vec i386coff_vec" + targ_selvecs="bfd_elf32_i386_vec bfd_elf64_l1om_vec i386coff_vec" want64=true ;; x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) 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" + targ_selvecs="bfd_elf32_i386_freebsd_vec i386coff_vec i386pei_vec x86_64pei_vec bfd_elf32_i386_vec bfd_elf64_x86_64_vec bfd_elf64_l1om_vec bfd_elf64_l1om_freebsd_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 bfd_efi_app_x86_64_vec" + targ_selvecs="bfd_elf32_i386_vec i386netbsd_vec i386coff_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_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 bfd_efi_app_x86_64_vec" + targ_selvecs="bfd_elf32_i386_vec i386linux_vec i386pei_vec x86_64pei_vec bfd_elf64_l1om_vec" want64=true ;; x86_64-*-mingw*) targ_defvec=x86_64pe_vec - targ_selvecs="x86_64pe_vec x86_64pei_vec bfd_elf64_x86_64_vec" + targ_selvecs="x86_64pe_vec x86_64pei_vec bfd_elf64_x86_64_vec bfd_elf64_l1om_vec" want64=true targ_underscore=yes ;; @@ -703,7 +742,17 @@ case "${targ}" in targ_defvec=bfd_elf32_iq2000_vec ;; - m32c-*-elf) + lm32-*-elf | lm32-*-rtems*) + targ_defvec=bfd_elf32_lm32_vec + targ_selvecs=bfd_elf32_lm32fdpic_vec + ;; + + lm32-*-*linux*) + targ_defvec=bfd_elf32_lm32fdpic_vec + targ_selvecs=bfd_elf32_lm32_vec + ;; + + m32c-*-elf | m32c-*-rtems*) targ_defvec=bfd_elf32_m32c_vec ;; @@ -851,6 +900,10 @@ case "${targ}" in targ_selvecs=bfd_elf32_mep_little_vec ;; + microblaze*-*) + targ_defvec=bfd_elf32_microblaze_vec + ;; + mips*-big-*) targ_defvec=ecoff_big_vec targ_selvecs=ecoff_little_vec @@ -1042,14 +1095,14 @@ case "${targ}" in want64=true ;; #endif - powerpc-*-aix5*) + powerpc-*-aix[5-9]*) targ_cflags=-DAIX_WEAK_SUPPORT targ_defvec=rs6000coff_vec targ_selvecs="aix5coff64_vec" want64=true ;; #ifdef BFD64 - powerpc64-*-aix5*) + powerpc64-*-aix[5-9]*) targ_cflags=-DAIX_WEAK_SUPPORT targ_defvec=aix5coff64_vec targ_selvecs="rs6000coff_vec" @@ -1153,14 +1206,12 @@ case "${targ}" in 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" @@ -1297,6 +1348,7 @@ case "${targ}" in # they're necessary for coff-sh.c (which is unconditionally used) to be # compiled correctly. targ_selvecs="$targ_selvecs shcoff_vec shlcoff_vec shcoff_small_vec shlcoff_small_vec" + targ_underscore=yes ;; sh-*-*) targ_defvec=shcoff_vec @@ -1324,7 +1376,7 @@ case "${targ}" in targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec" targ_underscore=yes ;; - sparc-*-linux-*) + sparc-*-linux-* | sparcv*-*-linux-*) targ_defvec=bfd_elf32_sparc_vec targ_selvecs="sparclinux_vec bfd_elf64_sparc_vec sunos_big_vec" ;; @@ -1373,7 +1425,7 @@ case "${targ}" in targ_underscore=yes want64=true ;; - sparc64-*-linux-*) + sparc64*-*-linux-*) targ_defvec=bfd_elf64_sparc_vec targ_selvecs="bfd_elf32_sparc_vec sparclinux_vec sunos_big_vec" want64=true @@ -1398,6 +1450,7 @@ case "${targ}" in spu-*-elf) targ_defvec=bfd_elf32_spu_vec + want64=true ;; #if HAVE_host_aout_vec @@ -1463,7 +1516,7 @@ case "${targ}" in targ_defvec=bfd_elf32_xstormy16_vec ;; - xtensa-*-*) + xtensa*-*-*) targ_defvec=bfd_elf32_xtensa_le_vec targ_selvecs=bfd_elf32_xtensa_be_vec ;; @@ -1525,3 +1578,10 @@ case "${targ_defvec} ${targ_selvecs}" in targ_selvecs="${targ_selvecs} bfd_elf32_little_generic_vec bfd_elf32_big_generic_vec" ;; esac + +# If we support Intel L1OM target, then add support for bfd_l1om_arch. +case "${targ_defvec} ${targ_selvecs}" in + *bfd_elf64_l1om_vec*) + targ_archs="$targ_archs bfd_l1om_arch" + ;; +esac diff --git a/bfd/config.in b/bfd/config.in index 5277f1a..3cb2bfc 100644 --- a/bfd/config.in +++ b/bfd/config.in @@ -4,6 +4,9 @@ language is requested. */ #undef ENABLE_NLS +/* Define to 1 if you have the header file. */ +#undef HAVE_ALLOCA_H + /* Define to 1 if you have the declaration of `basename', and to 0 if you don't. */ #undef HAVE_DECL_BASENAME @@ -75,6 +78,9 @@ /* Define to 1 if you have the `fdopen' function. */ #undef HAVE_FDOPEN +/* Define to 1 if you have the `fileno' function. */ +#undef HAVE_FILENO + /* Define to 1 if you have the `fopen64' function. */ #undef HAVE_FOPEN64 @@ -221,6 +227,9 @@ /* Define if has win32_pstatus_t. */ #undef HAVE_WIN32_PSTATUS_T +/* Define to 1 if you have the header file. */ +#undef HAVE_ZLIB_H + /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR @@ -240,31 +249,31 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* The size of a `char', as computed by sizeof. */ +/* The size of `char', as computed by sizeof. */ #undef SIZEOF_CHAR -/* The size of a `int', as computed by sizeof. */ +/* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT -/* The size of a `long', as computed by sizeof. */ +/* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG -/* The size of a `long long', as computed by sizeof. */ +/* The size of `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG -/* The size of a `off_t', as computed by sizeof. */ +/* The size of `off_t', as computed by sizeof. */ #undef SIZEOF_OFF_T -/* The size of a `short', as computed by sizeof. */ +/* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT -/* The size of a `void *', as computed by sizeof. */ -#undef SIZEOF_VOID_P - -/* The sizeof of a 'void *', as computed by sizeof. */ +/* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define to 1 if you have the ANSI C header files. */ @@ -288,10 +297,46 @@ /* Define if we should default to creating read-only plt entries */ #undef USE_SECUREPLT -/* Version number of package */ -#undef VERSION +/* Define if we may generate symbols with ELF's STT_COMMON type */ +#undef USE_STT_COMMON +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + +/* Version number of package */ +#undef VERSION + +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE diff --git a/bfd/configure b/bfd/configure index 76e2b30..dcc9bd9 100755 --- a/bfd/configure +++ b/bfd/configure @@ -1,81 +1,413 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.64. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. # -# 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. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_unset $as_var + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." fi -done + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -83,146 +415,107 @@ 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 | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\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; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,16 +524,6 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 - - # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} @@ -390,28 +673,24 @@ fi +exec 7<&0 &1 + # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= 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= @@ -419,51 +698,259 @@ PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= ac_unique_file="libbfd.c" # Factoring default headers for most tests. ac_includes_default="\ #include -#if HAVE_SYS_TYPES_H +#ifdef HAVE_SYS_TYPES_H # include #endif -#if HAVE_SYS_STAT_H +#ifdef HAVE_SYS_STAT_H # include #endif -#if STDC_HEADERS +#ifdef STDC_HEADERS # include # include #else -# if HAVE_STDLIB_H +# ifdef HAVE_STDLIB_H # include # endif #endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif -#if HAVE_STRINGS_H +#ifdef HAVE_STRINGS_H # include #endif -#if HAVE_INTTYPES_H +#ifdef HAVE_INTTYPES_H # include -#else -# if HAVE_STDINT_H -# include -# endif #endif -#if HAVE_UNISTD_H +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H # include #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 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_64BIT_LONG_LONG BFD_HOST_LONG_LONG BFD_HOST_64_BIT_DEFINED BFD_HOST_64_BIT BFD_HOST_U_64_BIT BFD_HOSTPTR_T 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_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +tdefaults +bfd_ufile_ptr +bfd_file_ptr +supports_plugins +bfd_default_target_size +bfd_machines +bfd_backends +all_backends +bfd64_libs +wordsize +TDEFINES +SHARED_LIBADD +SHARED_LDFLAGS +LIBM +COREFLAG +COREFILE +EXEEXT_FOR_BUILD +CC_FOR_BUILD +BFD_HOSTPTR_T +BFD_HOST_U_64_BIT +BFD_HOST_64_BIT +BFD_HOST_64_BIT_DEFINED +BFD_HOST_64BIT_LONG_LONG +BFD_HOST_64BIT_LONG +HDEFINES +MSGMERGE +MSGFMT +MKINSTALLDIRS +CATOBJEXT +GENCAT +INSTOBJEXT +DATADIRNAME +CATALOGS +POSUB +GMSGFMT +XGETTEXT +INCINTL +LIBINTL_DEP +LIBINTL +USE_NLS +bfdincludedir +bfdlibdir +target_noncanonical +host_noncanonical +INSTALL_LIBBFD_FALSE +INSTALL_LIBBFD_TRUE +GENINSRC_NEVER_FALSE +GENINSRC_NEVER_TRUE +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +NO_WERROR +WARN_CFLAGS +REPORT_BUGS_TEXI +REPORT_BUGS_TO +PKGVERSION +DEBUGDIR +PLUGINS_FALSE +PLUGINS_TRUE +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +EGREP +GREP +CPP +RANLIB +AR +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_plugins +enable_largefile +enable_64_bit_bfd +enable_targets +with_mmap +enable_secureplt +with_separate_debug_dir +enable_elf_stt_common +with_pkgversion +with_bugurl +enable_werror +enable_build_warnings +enable_maintainer_mode +enable_install_libbfd +enable_nls +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -486,34 +973,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' 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' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -535,33 +1036,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -588,6 +1115,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -612,13 +1145,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -683,6 +1219,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -733,26 +1279,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -772,26 +1328,25 @@ do | --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; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - 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'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_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 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -800,31 +1355,36 @@ 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; }; } + as_fn_error "missing argument to $ac_option" 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; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -838,7 +1398,7 @@ target=$target_alias 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. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -851,74 +1411,72 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then 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'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -947,14 +1505,11 @@ Configuration: -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] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -964,18 +1519,25 @@ 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] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -997,21 +1559,22 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] - build shared libraries [default=no] - --enable-static[=PKGS] - build static libraries [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-plugins Enable support for plugins (defaults no) + --disable-largefile omit support for large files --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-elf-stt-common Allow the generation of ELF symbols with the STT_COMMON type --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 @@ -1038,751 +1601,1366 @@ Some influential environment variables: CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory 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. +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac -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 +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +configure +generated by GNU Autoconf 2.64 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit 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 $@ +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## -_ACEOF +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () { -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` + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval -/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` +} # ac_fn_c_try_compile -_ASUNAME +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -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 + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval -} >&5 +} # ac_fn_c_try_link -cat >&5 <<_ACEOF +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval -## ----------- ## -## Core tests. ## -## ----------- ## +} # ac_fn_c_try_cpp +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } -# 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; } +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -# 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 +} # ac_fn_c_check_header_mongrel - cat <<\_ASBOX -## ---------------- ## -## Cache variables. ## -## ---------------- ## -_ASBOX - echo - # The following way of writing the cache mishandles newlines in values, +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () { - (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 + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 - 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 + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval - 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 +} # ac_fn_c_try_run - 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 +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -# 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_fn_c_check_header_compile -# Predefined preprocessor variables. +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ +#ifdef __STDC__ +# include +#else +# include +#endif -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +#undef $2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" +int +main () +{ +return $2 (); + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} +} # ac_fn_c_check_func -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" + ; + return 0; +} _ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 - -# 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 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 -# 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 - - - - - - - - - - + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} +} # ac_fn_c_check_type +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#endif -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; }; } + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -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. +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -# 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/'` +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +It was created by $as_me, which was +generated by GNU Autoconf 2.64. Invocation command line was -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; }; } + $ $0 $@ -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/'` +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` -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; }; } +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` -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/'` +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` +_ASUNAME -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS -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 +} >&5 -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 +cat >&5 <<_ACEOF -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 +## ----------- ## +## Core tests. ## +## ----------- ## -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 +_ACEOF -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 +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 do - 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 + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi done +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi -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 + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + - CC=$ac_ct_CC +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 else - CC="$ac_cv_prog_CC" + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -1800,24 +2978,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1827,39 +3006,41 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -1869,66 +3050,78 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { 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; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -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 &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -1940,112 +3133,142 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - 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 + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then : + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { 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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } fi - ac_exeext=$ac_cv_exeext -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 +# Check that 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&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; }; } +See \`config.log' for more details." "$LINENO" 5; } fi fi fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either +# Check that 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2053,38 +3276,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 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_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.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; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2096,45 +3312,46 @@ main () } _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 +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2148,55 +3365,34 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2207,39 +3403,49 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : -ac_cv_prog_cc_g=no +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -2255,18 +3461,14 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -2294,12 +3496,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* 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 + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -2314,205 +3521,37 @@ 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__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -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 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext 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 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - 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" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : -# 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 -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' @@ -2520,134 +3559,65 @@ 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 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 +$as_echo_n "checking for library containing strerror... " >&6; } +if test "${ac_cv_search_strerror+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_strerror=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +for ac_lib in '' cposix; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_strerror=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_strerror+set}" = set; then : + break +fi +done +if test "${ac_cv_search_strerror+set}" = set; then : -/* 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 + ac_cv_search_strerror=no fi +rm conftest.$ac_ext 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" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 +$as_echo "$ac_cv_search_strerror" >&6; } +ac_res=$ac_cv_search_strerror +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -am__api_version="1.9" +am__api_version='1.11' + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -2661,22 +3631,23 @@ am__api_version="1.9" # 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 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # 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\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -2684,7 +3655,7 @@ case $as_dir/ in # 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 -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2694,30 +3665,43 @@ case $as_dir/ in # 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 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2727,21 +3711,34 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + 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` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -2751,11 +3748,8 @@ if ( # 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; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -2764,81 +3758,206 @@ 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; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + 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. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # 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 +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" else - mkdir_p='$(install_sh) -d' + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2848,55 +3967,59 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(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 +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2911,60 +4034,58 @@ rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" - ac_config_commands="$ac_config_commands depfiles" +ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# 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 +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi -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 + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2973,13 +4094,14 @@ else fi - -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi fi # test whether we have cygpath @@ -2994,7 +4116,7 @@ fi # Define the identity of the package. PACKAGE=bfd - VERSION=2.18.0 + VERSION=2.20 cat >>confdefs.h <<_ACEOF @@ -3022,96 +4144,6 @@ 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. @@ -3125,10 +4157,10 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3153,6 +4185,11 @@ else if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3170,7 +4207,17 @@ else done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3180,18 +4227,23 @@ else break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # 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} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3215,13 +4267,11 @@ else fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -3237,10 +4287,10 @@ fi 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -3250,35 +4300,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. @@ -3288,27 +4340,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - AR=$ac_ct_AR + if test "x$ac_ct_AR" = x; then + AR="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi else AR="$ac_cv_prog_AR" fi @@ -3316,10 +4379,10 @@ fi 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -3329,35 +4392,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -3367,37 +4432,46 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; @@ -3416,7 +4490,8 @@ if test "${enable_shared+set}" = set; then esac else enable_shared=no -fi; +fi + @@ -3434,10 +4509,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3447,35 +4522,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -3485,39 +4562,50 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3527,77 +4615,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi + fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3608,18 +4656,19 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -3637,24 +4686,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3664,39 +4714,41 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -3706,71 +4758,83 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { 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; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -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 &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3784,55 +4848,34 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3843,39 +4886,49 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ -ac_cv_prog_cc_g=no + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3891,18 +4944,14 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3930,12 +4979,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* 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 + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -3950,427 +5004,521 @@ 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__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -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 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext 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 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - 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" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : -# 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);' +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error _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 +if ac_fn_c_try_cpp "$LINENO"; then : +else + # Broken: fails on valid input. 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 +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} +#include _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 +if ac_fn_c_try_cpp "$LINENO"; 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_objext conftest.$ac_ext +rm -f conftest.err 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 +# 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 -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + done + ac_cv_prog_CPP=$CPP 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 - - -cat >>confdefs.h <<\_ACEOF -#define _GNU_SOURCE 1 + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error _ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } +fi -macro_version='2.1a' -macro_revision='1.2435' - - - - - - - +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -ltmain="$ac_aux_dir/ltmain.sh" -# Set options +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac -enable_dlopen=no + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" -enable_win32_dll=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +int +main () +{ -# 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 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes else - enable_static=yes -fi; + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_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 -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" +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 - pic_mode=default -fi; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#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 -test -z "$pic_mode" && pic_mode=default +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF +fi +done -# 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 + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = x""yes; then : + MINIX=yes else - enable_fast_install=yes -fi; + MINIX= +fi + if test "$MINIX" = yes; then +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h +$as_echo "#define _MINIX 1" >>confdefs.h -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 + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h -SED=$lt_cv_path_SED + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h -echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6 + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac +macro_version='2.2.6' +macro_revision='1.3012' -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 @@ -4378,7 +5526,79 @@ test -z "$GREP" && GREP=grep +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" @@ -4390,19 +5610,106 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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 + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; @@ -4430,14 +5737,14 @@ echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 ;; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR @@ -4467,19 +5774,17 @@ fi LD="$lt_cv_path_LD" if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4503,11 +5808,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. @@ -4553,8 +5857,8 @@ else : ${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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else @@ -4564,10 +5868,10 @@ else 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. @@ -4577,26 +5881,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - echo "$as_me:$LINENO: result: $DUMPBIN" >&5 -echo "${ECHO_T}$DUMPBIN" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$DUMPBIN" && break done fi @@ -4606,10 +5912,10 @@ if test -z "$DUMPBIN"; then 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. @@ -4619,31 +5925,42 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_DUMPBIN" && break done -test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":" - DUMPBIN=$ac_ct_DUMPBIN + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi fi @@ -4658,45 +5975,45 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4668: $ac_compile\"" >&5) + (eval echo "\"\$as_me:5985: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:4671: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:5988: $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) + (eval echo "\"\$as_me:5991: 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" @@ -4717,7 +6034,7 @@ else lt_cv_sys_max_cmd_len=-1; ;; - cygwin* | mingw*) + cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, @@ -4778,8 +6095,8 @@ else 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=`(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 @@ -4813,11 +6130,11 @@ else 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -4826,31 +6143,32 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, ) >/dev/null 2>&1 \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes -echo "$as_me:$LINENO: result: $xsi_shell" >&5 -echo "${ECHO_T}$xsi_shell" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } -echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 -echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes -echo "$as_me:$LINENO: result: $lt_shell_append" >&5 -echo "${ECHO_T}$lt_shell_append" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then @@ -4884,15 +6202,15 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi -echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -4917,11 +6235,112 @@ esac +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= @@ -4938,7 +6357,7 @@ lt_cv_deplibs_check_method='unknown' # whether `pass_all' will *always* work, you probably want this one. case $host_os in -aix4* | aix5*) +aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; @@ -4971,6 +6390,12 @@ mingw* | pw32*) fi ;; +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; @@ -5029,7 +6454,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -5108,8 +6533,8 @@ tpf*) esac fi -echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -5128,10 +6553,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -5141,35 +6566,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. @@ -5179,28 +6606,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - AR=$ac_ct_AR + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi else AR="$ac_cv_prog_AR" fi @@ -5221,10 +6658,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -5234,35 +6671,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. @@ -5272,28 +6711,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - STRIP=$ac_ct_STRIP + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi else STRIP="$ac_cv_prog_STRIP" fi @@ -5308,10 +6757,10 @@ 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 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -5321,35 +6770,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -5359,28 +6810,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi @@ -5393,7 +6854,7 @@ test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= @@ -5453,10 +6914,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. @@ -5473,7 +6934,7 @@ case $host_os in aix*) symcode='[BCDT]' ;; -cygwin* | mingw* | pw32*) +cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) @@ -5517,6 +6978,7 @@ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -5570,18 +7032,18 @@ void nm_test_func(void){} int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -5634,11 +7096,11 @@ _LT_EOF 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 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" @@ -5656,7 +7118,7 @@ _LT_EOF echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi - rm -f conftest* conftst* + rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then @@ -5672,11 +7134,11 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi @@ -5695,11 +7157,16 @@ 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; + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good @@ -5708,11 +7175,11 @@ 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 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" @@ -5726,12 +7193,12 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5729 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + echo '#line 7196 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) @@ -5765,11 +7232,11 @@ 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 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in @@ -5818,10 +7285,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5829,11 +7296,7 @@ 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -5844,37 +7307,13 @@ 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 ac_fn_c_try_link "$LINENO"; 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 + lt_cv_cc_needs_belf=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5882,8 +7321,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" @@ -5892,16 +7331,20 @@ echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; esac ;; esac @@ -5912,472 +7355,598 @@ 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 + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else - # 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 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # 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 -#else -# include -#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= + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } else - ac_cpp_err=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test -z "$ac_cpp_err"; then - : + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # Broken: fails on valid input. -continue fi -rm -f conftest.err conftest.$ac_ext +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - # 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 -_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 + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" else - ac_cpp_err= + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL fi else - ac_cpp_err=yes + DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # 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 +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - done - ac_cv_prog_CPP=$CPP fi - CPP=$ac_cv_prog_CPP +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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 + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # 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 -#else -# include -#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= + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi -else - ac_cpp_err=yes +done + done +IFS=$as_save_IFS + fi -if test -z "$ac_cpp_err"; then - : +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } 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 -_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 + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" else - ac_cpp_err= + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT fi else - ac_cpp_err=yes + NMEDIT="$ac_cv_prog_NMEDIT" fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # 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 - : +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - { { 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; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&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 - -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 +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -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 + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -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 - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } else - ac_cv_header_stdc=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f conftest* + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" fi -if test $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 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } else - ac_cv_header_stdc=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } 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 - : +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#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 - : + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else - echo "$as_me: program exited with status $ac_status" >&5 -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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -( 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 +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" fi -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 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -# On IRIX 5.3, sys/types and inttypes.h are conflicting. - +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi -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 + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$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 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.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" +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" + lt_cv_ld_exported_symbols_list=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_DLFCN_H 1 _ACEOF fi @@ -6386,65 +7955,94 @@ 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 +# Set options +enable_dlopen=yes + -#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" + + enable_win32_dll=no + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default 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 + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes fi -done + + + + + + + @@ -6497,10 +8095,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null @@ -6512,8 +8110,8 @@ else fi rmdir .libs 2>/dev/null fi -echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir @@ -6605,10 +8203,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -6658,11 +8256,11 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6671,10 +8269,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -6724,11 +8322,11 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6794,7 +8392,7 @@ 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* +$RM -r conftest* ## CAVEAT EMPTOR: @@ -6808,10 +8406,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext @@ -6826,11 +8424,11 @@ else -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 echo "\"\$as_me:8427: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6833: \$? = $ac_status" >&5 + echo "$as_me:8431: \$? = $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. @@ -6843,8 +8441,8 @@ else $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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -6863,8 +8461,8 @@ fi 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -6880,19 +8478,25 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 ;; 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 + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | cygwin* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -6907,10 +8511,11 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 ;; hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. case $host_cpu in - hppa*64*|ia64*) + hppa*64*) # +Z the default ;; *) @@ -6959,18 +8564,8 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 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*) + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' @@ -6998,13 +8593,27 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in - icc* | ecc*) + # old Intel for x86_64 which still supported -KPIC. + ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -7017,6 +8626,12 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) @@ -7118,8 +8733,8 @@ case $host_os in 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } @@ -7130,12 +8745,12 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - lt_prog_compiler_pic_works=no + lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" @@ -7148,27 +8763,27 @@ else -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 echo "\"\$as_me:8766: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:7155: \$? = $ac_status" >&5 + echo "$as_me:8770: \$? = $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 + lt_cv_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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test x"$lt_prog_compiler_pic_works" = xyes; then +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; @@ -7189,12 +8804,12 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - lt_prog_compiler_static_works=no + lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -7207,20 +8822,20 @@ else $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 + lt_cv_prog_compiler_static_works=yes fi else - lt_prog_compiler_static_works=yes + lt_cv_prog_compiler_static_works=yes fi fi - $RM conftest* + $RM -r 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test x"$lt_prog_compiler_static_works" = xyes; then +if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= @@ -7232,10 +8847,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null @@ -7253,11 +8868,11 @@ else -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 echo "\"\$as_me:8871: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7260: \$? = $ac_status" >&5 + echo "$as_me:8875: \$? = $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 @@ -7279,18 +8894,18 @@ else $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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null @@ -7308,11 +8923,11 @@ else -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 echo "\"\$as_me:8926: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7315: \$? = $ac_status" >&5 + echo "$as_me:8930: \$? = $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 @@ -7334,8 +8949,8 @@ else $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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } @@ -7343,19 +8958,19 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -7367,8 +8982,8 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -7402,16 +9017,17 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar # 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_" + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. @@ -7456,7 +9072,7 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar # See if GNU ld supports shared libraries. case $host_os in - aix3* | aix4* | aix5*) + aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no @@ -7473,19 +9089,18 @@ _LT_EOF ;; 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 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 + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; beos*) @@ -7499,7 +9114,7 @@ _LT_EOF fi ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' @@ -7539,7 +9154,7 @@ _LT_EOF 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) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in @@ -7550,6 +9165,7 @@ _LT_EOF && test "$tmp_diet" = no then tmp_addflag= + tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' @@ -7564,6 +9180,12 @@ _LT_EOF tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 @@ -7572,8 +9194,6 @@ _LT_EOF 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' @@ -7583,6 +9203,22 @@ _LT_EOF echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac else ld_shlibs=no fi @@ -7690,7 +9326,7 @@ _LT_EOF fi ;; - aix4* | aix5*) + aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. @@ -7710,7 +9346,7 @@ _LT_EOF # 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*) + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes @@ -7778,6 +9414,7 @@ _LT_EOF fi fi + export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes @@ -7787,11 +9424,7 @@ _LT_EOF 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7802,28 +9435,7 @@ 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 ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -7837,13 +9449,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat 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 +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -7856,11 +9464,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7871,28 +9475,7 @@ 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 ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -7906,13 +9489,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat 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 +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -7930,20 +9509,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is @@ -7965,73 +9549,30 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ;; 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 + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + ;; dgux*) @@ -8113,7 +9654,7 @@ fi 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}+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' @@ -8162,40 +9703,16 @@ fi # 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ 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 +if ac_fn_c_try_link "$LINENO"; 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 +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' @@ -8231,25 +9748,29 @@ rm -f conftest.err conftest.$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' - ;; - *) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no fi ;; @@ -8447,8 +9968,8 @@ rm -f conftest.err conftest.$ac_objext \ fi fi -echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -8484,46 +10005,52 @@ x|xyes) # 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - 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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi @@ -8686,10 +10213,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; @@ -8770,7 +10297,7 @@ aix3*) soname_spec='${libname}${release}${shared_ext}$major' ;; -aix4* | aix5*) +aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no @@ -8815,13 +10342,18 @@ aix4* | aix5*) ;; amigaos*) - if test "$host_cpu" = m68k; then + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$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 + ;; + esac ;; beos*) @@ -8844,14 +10376,14 @@ bsdi[45]*) # libtool to hard-code these into programs ;; -cygwin* | mingw* | pw32*) +cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no - case $withGCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ @@ -8874,7 +10406,7 @@ cygwin* | mingw* | pw32*) 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* | cegcc*) # 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"` @@ -9089,7 +10621,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no @@ -9098,16 +10630,17 @@ linux* | k*bsd*-gnu) 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 + if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -9118,41 +10651,19 @@ 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 +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install @@ -9161,7 +10672,7 @@ rm -f conftest.err conftest.$ac_objext \ # 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' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -9345,7 +10856,7 @@ tpf*) 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}' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes @@ -9362,8 +10873,8 @@ uts4*) dynamic_linker=no ;; esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -9371,6 +10882,13 @@ if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + @@ -9457,8 +10975,8 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -9482,8 +11000,8 @@ else # directories. hardcode_action=unsupported fi -echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then @@ -9515,7 +11033,7 @@ else lt_cv_dlopen_self=yes ;; - mingw* | pw32*) + mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; @@ -9527,71 +11045,43 @@ else 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; 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 + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -9604,459 +11094,169 @@ 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 declares shl_load. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; 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 + ac_cv_lib_dld_shl_load=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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 declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else - 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 + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; 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 + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; 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 + ac_cv_lib_svld_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; 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 + ac_cv_lib_dld_dld_link=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi @@ -10094,10 +11294,10 @@ fi 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross @@ -10105,7 +11305,7 @@ 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" +#line 11308 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10146,10 +11346,6 @@ else # endif #endif -#ifdef __cplusplus -extern "C" void exit (int); -#endif - void fnord() { int i=42;} int main () { @@ -10165,14 +11361,14 @@ int main () else puts (dlerror ()); - exit (status); + return status; } _LT_EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -10189,15 +11385,15 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross @@ -10205,7 +11401,7 @@ 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" +#line 11404 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10246,10 +11442,6 @@ else # endif #endif -#ifdef __cplusplus -extern "C" void exit (int); -#endif - void fnord() { int i=42;} int main () { @@ -10265,14 +11457,14 @@ int main () else puts (dlerror ()); - exit (status); + return status; } _LT_EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -10289,8 +11481,8 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" @@ -10328,13 +11520,13 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -10342,16 +11534,16 @@ else if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -10368,13 +11560,13 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } - echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -10388,21 +11580,21 @@ echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 fi ;; - aix4* | aix5*) + aix[4-9]*) 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes - echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } @@ -10428,7 +11620,7 @@ CC="$lt_save_CC" - ac_config_commands="$ac_config_commands libtool" + ac_config_commands="$ac_config_commands libtool" @@ -10437,110 +11629,355 @@ CC="$lt_save_CC" -# 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 +# Check whether --enable-plugins was given. +if test "${enable_plugins+set}" = set; then : + enableval=$enable_plugins; case "${enableval}" in + yes | "") plugins=yes ;; + no) plugins=no ;; + *) plugins=yes ;; + esac +else + plugins=no fi -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; + if test "$plugins" = "yes"; then + PLUGINS_TRUE= + PLUGINS_FALSE='#' +else + PLUGINS_TRUE='#' + PLUGINS_FALSE= +fi +if test "$plugins" = "yes"; then + if test "$enable_dlopen" != "yes" ; then + as_fn_error " + Building BFD with plugin support requires a host that supports -ldl." "$LINENO" 5 + fi + enable_targets="$enable_targets plugin" +fi + +case "${target}" in + sparc-*-solaris*|i[3-7]86-*-solaris*) + # On native 32bit sparc and ia32 solaris, large-file and procfs support + # are mutually exclusive; and without procfs support, the elf module + # cannot provide certain routines such as elfcore_write_prpsinfo + # or elfcore_write_prstatus. So unless the user explicitly requested + # large-file support through the --enable-largefile switch, disable + # large-file support in favor of procfs support. + if test "${target}" = "${host}" -a "$enable_largefile" != 'yes'; then + if test "$plugins" = "no"; then + enable_largefile="no" + fi + fi + ;; +esac +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; +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; }; } ;; +if test "$enable_largefile" != no; then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if test "${ac_cv_sys_largefile_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test "${ac_cv_sys_file_offset_bits+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if test "${ac_cv_sys_large_files+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi + + +# Check whether --enable-64-bit-bfd was given. +if test "${enable_64_bit_bfd+set}" = set; then : + enableval=$enable_64_bit_bfd; case "${enableval}" in + yes) want64=true ;; + no) want64=false ;; + *) as_fn_error "bad value ${enableval} for 64-bit-bfd option" "$LINENO" 5 ;; +esac +else + want64=false +fi + +# Check whether --enable-targets was given. +if test "${enable_targets+set}" = set; then : + enableval=$enable_targets; case "${enableval}" in + yes | "") as_fn_error "enable-targets option must specify target names or 'all'" "$LINENO" 5 + ;; + no) enable_targets= ;; + *) enable_targets=$enableval ;; +esac +fi + + +# Check whether --with-mmap was given. +if test "${with_mmap+set}" = set; then : + withval=$with_mmap; case "${withval}" in + yes) want_mmap=true ;; + no) want_mmap=false ;; + *) as_fn_error "bad value ${withval} for BFD with-mmap option" "$LINENO" 5 ;; +esac +else + want_mmap=false +fi + +# Check whether --enable-secureplt was given. +if test "${enable_secureplt+set}" = set; then : + enableval=$enable_secureplt; case "${enableval}" in + yes) use_secureplt=true ;; + no) use_secureplt=false ;; + *) as_fn_error "bad value ${enableval} for secureplt option" "$LINENO" 5 ;; +esac +else + use_secureplt=false +fi +if test $use_secureplt = true; then + +$as_echo "#define USE_SECUREPLT 1" >>confdefs.h + +fi + +DEBUGDIR=${libdir}/debug + +# Check whether --with-separate-debug-dir was given. +if test "${with_separate_debug_dir+set}" = set; then : + withval=$with_separate_debug_dir; DEBUGDIR="${withval}" +fi + + + +# Check to see if we should allow the generation of +# symbols with the ELF standard's STT_COMMON type. +# Check whether --enable-elf-stt-common was given. +if test "${enable_elf_stt_common+set}" = set; then : + enableval=$enable_elf_stt_common; case "${enableval}" in + yes) want_elf_stt_common=true ;; + no) want_elf_stt_common=false ;; + *) as_fn_error "bad value ${enableval} for ELF STT_COMMON option" "$LINENO" 5 ;; + esac +else + # We have to choose a default behaviour. For native builds we could +# test whether the loader supports the STT_COMMON type, but that would +# mean that built binaries could not be exported to older systems where +# the loader does not support it. So by default we always choose to +# disable this feature. + want_elf_stt_common=false +fi +if test $want_elf_stt_common = true; then + +$as_echo "#define USE_STT_COMMON 1" >>confdefs.h + +fi + + + +# Check whether --with-pkgversion was given. +if test "${with_pkgversion+set}" = set; then : + withval=$with_pkgversion; case "$withval" in + yes) as_fn_error "package version not specified" "$LINENO" 5 ;; no) PKGVERSION= ;; *) PKGVERSION="($withval) " ;; esac else PKGVERSION="(GNU Binutils) " -fi; +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; }; } ;; +# Check whether --with-bugurl was given. +if test "${with_bugurl+set}" = set; then : + withval=$with_bugurl; case "$withval" in + yes) as_fn_error "bug URL not specified" "$LINENO" 5 ;; no) BUGURL= ;; *) BUGURL="$withval" @@ -10549,7 +11986,8 @@ echo "$as_me: error: bug URL not specified" >&2;} else BUGURL="http://www.sourceware.org/bugzilla/" -fi; +fi + case ${BUGURL} in "") REPORT_BUGS_TO= @@ -10567,17 +12005,25 @@ 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 +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; case "${enableval}" in yes | y) ERROR_ON_WARNING="yes" ;; no | n) ERROR_ON_WARNING="no" ;; - *) { { 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; }; } ;; + *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;; esac -fi; +fi + + +# Enable -Wno-format by default when using gcc on mingw +case "${host}" in + *-*-mingw32*) + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wno-format" + fi + ;; + *) ;; +esac # Enable -Werror by default when using gcc if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then @@ -10594,10 +12040,9 @@ 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 +# Check whether --enable-build-warnings was given. +if test "${enable_build_warnings+set}" = set; then : + enableval=$enable_build_warnings; case "${enableval}" in yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; no) if test "${GCC}" = yes ; then WARN_CFLAGS="-w" @@ -10608,7 +12053,8 @@ if test "${enable_build_warnings+set}" = set; then WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; esac -fi; +fi + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then echo "Setting warning flags = $WARN_CFLAGS" 6>&1 @@ -10618,29 +12064,26 @@ fi - ac_config_headers="$ac_config_headers config.h:config.in" +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; }; } + as_fn_error "Unrecognized target system type; please check config.sub." "$LINENO" 5 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 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no -fi; - echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 - +fi -if test $USE_MAINTAINER_MODE = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else @@ -10651,9 +12094,7 @@ fi MAINT=$MAINTAINER_MODE_TRUE - - -if false; then + if false; then GENINSRC_NEVER_TRUE= GENINSRC_NEVER_FALSE='#' else @@ -10676,24 +12117,22 @@ esac *) 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install libbfd" >&5 +$as_echo_n "checking whether to install libbfd... " >&6; } + # Check whether --enable-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 - +fi -if test $install_libbfd_p = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $install_libbfd_p" >&5 +$as_echo "$install_libbfd_p" >&6; } + if test $install_libbfd_p = yes; then INSTALL_LIBBFD_TRUE= INSTALL_LIBBFD_FALSE='#' else @@ -10719,13 +12158,15 @@ 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" +ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru" # If we haven't got the data from the intl directory, # assume NLS is disabled. USE_NLS=no @@ -10739,22 +12180,20 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } if test x"$USE_NLS" != xyes; then - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } else - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -cat >>confdefs.h <<\_ACEOF -#define ENABLE_NLS 1 -_ACEOF +$as_echo "#define ENABLE_NLS 1" >>confdefs.h - echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 -echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } # Look for .po and .gmo files in the source directory. CATALOGS= XLINGUAS= @@ -10785,8 +12224,8 @@ echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 fi done LINGUAS="$XLINGUAS" - echo "$as_me:$LINENO: result: $LINGUAS" >&5 -echo "${ECHO_T}$LINGUAS" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } DATADIRNAME=share @@ -10812,17 +12251,17 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes -fi; - echo "$as_me:$LINENO: result: $USE_NLS" >&5 -echo "${ECHO_T}$USE_NLS" >&6 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } @@ -10859,10 +12298,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGFMT+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) @@ -10890,6524 +12329,1328 @@ esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then - echo "$as_me:$LINENO: result: $MSGFMT" >&5 -echo "${ECHO_T}$MSGFMT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_GMSGFMT+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $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" - - - -# Permit host specific settings. -. ${srcdir}/configure.host - - -# 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' - - -BFD_HOST_64BIT_LONG=0 -BFD_HOST_64BIT_LONG_LONG=0 -BFD_HOST_LONG_LONG=0 -BFD_HOST_64_BIT_DEFINED=0 -BFD_HOST_64_BIT= -BFD_HOST_U_64_BIT= -BFD_HOSTPTR_T="unsigned long" - -echo "$as_me:$LINENO: checking for long long" >&5 -echo $ECHO_N "checking for long long... $ECHO_C" >&6 -if test "${bfd_cv_has_long_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. */ - -int -main () -{ -unsigned long long ll = 18446744073709551615ULL; - ; - 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 - bfd_cv_has_long_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_has_long_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -echo "$as_me:$LINENO: result: $bfd_cv_has_long_long" >&5 -echo "${ECHO_T}$bfd_cv_has_long_long" >&6 -if test $bfd_cv_has_long_long = yes; then - BFD_HOST_LONG_LONG=1 - echo "$as_me:$LINENO: checking for long long" >&5 -echo $ECHO_N "checking for long long... $ECHO_C" >&6 -if test "${ac_cv_type_long_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 long *) 0) - return 0; -if (sizeof (long 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_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_long_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5 -echo "${ECHO_T}$ac_cv_type_long_long" >&6 - -echo "$as_me:$LINENO: checking size of long long" >&5 -echo $ECHO_N "checking size of long long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_long_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 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 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 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 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 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_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long 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 long)); } -unsigned long ulongval () { return (long) (sizeof (long long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long 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_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 long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long 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_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6 -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long -_ACEOF - - -fi - -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 -#include -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 - - -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 -#include -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_void_p}" = "x8"; then - host64=true - if test "x${ac_cv_sizeof_long}" = "x8"; then - BFD_HOST_64BIT_LONG=1 - test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long" - test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long" - elif test "x${ac_cv_sizeof_long_long}" = "x8"; then - BFD_HOST_64BIT_LONG_LONG=1 - test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" - test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" - BFD_HOSTPTR_T="unsigned long long" - fi -elif test "x${ac_cv_sizeof_long_long}" = "x8"; then - test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" - test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" -fi - -if test -n "${HOST_64BIT_TYPE}" -a -n "${HOST_U_64BIT_TYPE}"; then - BFD_HOST_64_BIT_DEFINED=1 - BFD_HOST_64_BIT="${HOST_64BIT_TYPE}" - BFD_HOST_U_64_BIT="${HOST_U_64BIT_TYPE}" -fi - - - - - - - - - -# Put a plausible default for CC_FOR_BUILD in Makefile. -if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then - CC_FOR_BUILD='$(CC)' - else - CC_FOR_BUILD=gcc - fi -fi - -# Also set EXEEXT_FOR_BUILD. -if test "x$cross_compiling" = "xno"; then - EXEEXT_FOR_BUILD='$(EXEEXT)' -else - echo "$as_me:$LINENO: checking for build system executable suffix" >&5 -echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 -if test "${bfd_cv_build_exeext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - rm -f conftest* - echo 'int main () { return 0; }' > conftest.c - bfd_cv_build_exeext= - ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5 - for file in conftest.*; do - case $file in - *.c | *.o | *.obj | *.ilk | *.pdb) ;; - *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;; - esac - done - rm -f conftest* - test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no -fi -echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 -echo "${ECHO_T}$bfd_cv_build_exeext" >&6 - EXEEXT_FOR_BUILD="" - test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} -fi - - - - - - - - -for ac_header in stddef.h string.h strings.h stdlib.h time.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - - - -for ac_header in fcntl.h sys/file.h sys/time.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 - - - -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 -#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 -#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 -#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 -#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 -#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 -#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 -#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 -#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 -#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 -#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 -#include -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 -#include -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 -#include -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 -#include -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 + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -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` + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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. */ -$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` +# 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 -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 +# 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_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 +rm -f conf$$.file - ; - 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 +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XGETTEXT+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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; }; } ;; + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } else - 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 -#include -int -main () -{ + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - 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); + rm -f messages.po - ; - 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 +# 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 conftest.val +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGMERGE+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_sizeof_char=0 + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -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 + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 +$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; } + GMSGFMT=":" + fi + fi -# These tests are here to make the output prettier + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && + (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 +$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } + XGETTEXT=":" + fi + rm -f messages.po + fi -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 + ac_config_commands="$ac_config_commands default-1" -# 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" +# Permit host specific settings. +. ${srcdir}/configure.host -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 - 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 -#include -#include -int -main () -{ -if ((struct tm *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_header_time=yes +BFD_HOST_64BIT_LONG=0 +BFD_HOST_64BIT_LONG_LONG=0 +BFD_HOST_64_BIT_DEFINED=0 +BFD_HOST_64_BIT= +BFD_HOST_U_64_BIT= +BFD_HOSTPTR_T="unsigned long" + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if test "${ac_cv_sizeof_long_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : -ac_cv_header_time=no +else + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long_long=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + fi -echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6 -if test $ac_cv_header_time = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long _ACEOF -fi +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if test "${ac_cv_sizeof_void_p+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : +else + if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (void *) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_void_p=0 + fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 -echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include <$ac_hdr> -int -main () -{ -if ((DIR *) 0) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 -_ACEOF -ac_header_dirent=$ac_hdr; break fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -done -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in dir; do - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + +if test "x${ac_cv_sizeof_void_p}" = "x8"; then + host64=true fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done -fi -LIBS=$ac_func_search_save_LIBS + +if test "x${ac_cv_sizeof_long}" = "x8"; then + BFD_HOST_64BIT_LONG=1 + test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long" + test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long" +elif test "x${ac_cv_sizeof_long_long}" = "x8"; then + BFD_HOST_64BIT_LONG_LONG=1 + test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" + test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" + if test "x${ac_cv_sizeof_void_p}" = "x8"; then + BFD_HOSTPTR_T="unsigned long long" + fi fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +if test -n "${HOST_64BIT_TYPE}" -a -n "${HOST_U_64BIT_TYPE}"; then + BFD_HOST_64_BIT_DEFINED=1 + BFD_HOST_64_BIT="${HOST_64BIT_TYPE}" + BFD_HOST_U_64_BIT="${HOST_U_64BIT_TYPE}" fi -else - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in x; do - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done -fi -LIBS=$ac_func_search_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" -fi + +# Put a plausible default for CC_FOR_BUILD in Makefile. +if test -z "$CC_FOR_BUILD"; then + if test "x$cross_compiling" = "xno"; then + CC_FOR_BUILD='$(CC)' + else + CC_FOR_BUILD=gcc + fi fi -echo "$as_me:$LINENO: checking whether string.h and strings.h may both be included" >&5 -echo $ECHO_N "checking whether string.h and strings.h may both be included... $ECHO_C" >&6 -if test "${gcc_cv_header_string+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Also set EXEEXT_FOR_BUILD. +if test "x$cross_compiling" = "xno"; then + EXEEXT_FOR_BUILD='$(EXEEXT)' else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -int -main () -{ + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5 +$as_echo_n "checking for build system executable suffix... " >&6; } +if test "${bfd_cv_build_exeext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.c + bfd_cv_build_exeext= + ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5 + for file in conftest.*; do + case $file in + *.c | *.o | *.obj | *.ilk | *.pdb) ;; + *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + rm -f conftest* + test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5 +$as_echo "$bfd_cv_build_exeext" >&6; } + EXEEXT_FOR_BUILD="" + test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} +fi - ; - return 0; -} + +for ac_header in alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF -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 - gcc_cv_header_string=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -gcc_cv_header_string=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $gcc_cv_header_string" >&5 -echo "${ECHO_T}$gcc_cv_header_string" >&6 -if test $gcc_cv_header_string = yes; then -cat >>confdefs.h <<\_ACEOF -#define STRING_WITH_STRINGS 1 +done + +for ac_header in fcntl.h sys/file.h sys/time.h sys/stat.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi +done +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 + $as_echo_n "looking for a compliant stdint.h in $i, " >&6 + ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "#include +#include <$i> +" +if test "x$ac_cv_type_uintmax_t" = x""yes; then : + acx_cv_header_stdint=$i +else + continue +fi + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include +#include <$i> +" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : +else + acx_cv_header_stdint_kind="(mostly complete)" +fi -for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid -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 declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func + ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include +#include <$i> +" +if test "x$ac_cv_type_int_least32_t" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ +else + acx_cv_header_stdint_kind="(mostly complete)" +fi -#ifdef __STDC__ -# include -#else -# include -#endif + ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include +#include <$i> +" +if test "x$ac_cv_type_int_fast32_t" = x""yes; then : -#undef $ac_func +else + acx_cv_header_stdint_kind="(mostly complete)" +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 + ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include +#include <$i> +" +if test "x$ac_cv_type_uint64_t" = x""yes; then : -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 + acx_cv_header_stdint_kind="(lacks uint64_t)" 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 + 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 + $as_echo_n "looking for an incomplete stdint.h in $i, " >&6 + ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include +#include <$i> +" +if test "x$ac_cv_type_uint32_t" = x""yes; then : + acx_cv_header_stdint=$i +else + continue +fi + ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include +#include <$i> +" +if test "x$ac_cv_type_uint64_t" = x""yes; then : -for ac_func in strtoull -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 declares $ac_func. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 +fi -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 + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include +#include <$i> +" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : -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 + break + done fi -done - - -echo "$as_me:$LINENO: checking whether basename is declared" >&5 -echo $ECHO_N "checking whether basename is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_basename+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +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 + $as_echo_n "looking for u_intXX_t types in $i, " >&6 + ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include +#include <$i> +" +if test "x$ac_cv_type_u_int32_t" = x""yes; then : + acx_cv_header_stdint=$i else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef basename - char *p = (char *) basename; -#endif + continue +fi - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_basename=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include +#include <$i> +" +if test "x$ac_cv_type_u_int64_t" = x""yes; then : + +fi -ac_cv_have_decl_basename=no + break + done fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +if test "$acx_cv_header_stdint" = stddef.h; then + acx_cv_header_stdint_kind="(using manual detection)" fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_basename" >&5 -echo "${ECHO_T}$ac_cv_have_decl_basename" >&6 -if test $ac_cv_have_decl_basename = yes; then -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME 1 -_ACEOF +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 -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_BASENAME 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what to include in bfd_stdint.h" >&5 +$as_echo_n "checking what to include in bfd_stdint.h... " >&6; } +case `$as_basename -- bfd_stdint.h || +$as_expr X/bfd_stdint.h : '.*/\([^/][^/]*\)/*$' \| \ + Xbfd_stdint.h : 'X\(//\)$' \| \ + Xbfd_stdint.h : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/bfd_stdint.h | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` in + stdint.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5 +$as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; + inttypes.h) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: are you sure you want it there?" >&5 +$as_echo "$as_me: WARNING: are you sure you want it there?" >&2;} ;; + *) ;; +esac -fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_header_stdint $acx_cv_header_stdint_kind" >&5 +$as_echo "$acx_cv_header_stdint $acx_cv_header_stdint_kind" >&6; } +# ----------------- done included file, check C basic types -------- -echo "$as_me:$LINENO: checking whether ftello is declared" >&5 -echo $ECHO_N "checking whether ftello is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_ftello+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Lacking an uintptr_t? Test size of void * +case "$acx_cv_header_stdint:$ac_cv_type_uintptr_t" in + stddef.h:* | *:no) # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +$as_echo_n "checking size of void *... " >&6; } +if test "${ac_cv_sizeof_void_p+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef ftello - char *p = (char *) ftello; -#endif + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; 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_have_decl_ftello=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_ftello=no + if test "$ac_cv_type_void_p" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (void *) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_void_p=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_ftello" >&5 -echo "${ECHO_T}$ac_cv_have_decl_ftello" >&6 -if test $ac_cv_have_decl_ftello = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +$as_echo "$ac_cv_sizeof_void_p" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FTELLO 1 +#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) # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FTELLO 0 -_ACEOF + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi +fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -echo "$as_me:$LINENO: checking whether ftello64 is declared" >&5 -echo $ECHO_N "checking whether ftello64 is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_ftello64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef ftello64 - char *p = (char *) ftello64; -#endif - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_ftello64=yes + + ;; +esac + +if test $acx_cv_header_stdint = stddef.h; then + # Lacking a good header? Test size of everything and deduce all types. + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : -ac_cv_have_decl_ftello64=no +else + if test "$ac_cv_type_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_ftello64" >&5 -echo "${ECHO_T}$ac_cv_have_decl_ftello64" >&6 -if test $ac_cv_have_decl_ftello64 = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FTELLO64 1 +#define SIZEOF_INT $ac_cv_sizeof_int _ACEOF + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FTELLO64 0 -_ACEOF + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : +else + if test "$ac_cv_type_short" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (short) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_short=0 + fi +fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -echo "$as_me:$LINENO: checking whether fseeko is declared" >&5 -echo $ECHO_N "checking whether fseeko is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_fseeko+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef fseeko - char *p = (char *) fseeko; -#endif - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_fseeko=yes + + + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 +$as_echo_n "checking size of char... " >&6; } +if test "${ac_cv_sizeof_char+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : -ac_cv_have_decl_fseeko=no +else + if test "$ac_cv_type_char" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (char) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_char=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_fseeko" >&5 -echo "${ECHO_T}$ac_cv_have_decl_fseeko" >&6 -if test $ac_cv_have_decl_fseeko = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5 +$as_echo "$ac_cv_sizeof_char" >&6; } + + cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FSEEKO 1 +#define SIZEOF_CHAR $ac_cv_sizeof_char _ACEOF -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FSEEKO 0 -_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int8_t" >&5 +$as_echo_n "checking for type equivalent to int8_t... " >&6; } + case "$ac_cv_sizeof_char" in + 1) acx_cv_type_int8_t=char ;; + *) { as_fn_set_status please report a bug +as_fn_error "no 8-bit type" "$LINENO" 5; } + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int8_t" >&5 +$as_echo "$acx_cv_type_int8_t" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int16_t" >&5 +$as_echo_n "checking for type equivalent to int16_t... " >&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 ;; + *) { as_fn_set_status please report a bug +as_fn_error "no 16-bit type" "$LINENO" 5; } + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int16_t" >&5 +$as_echo "$acx_cv_type_int16_t" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int32_t" >&5 +$as_echo_n "checking for type equivalent to int32_t... " >&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 ;; + *) { as_fn_set_status please report a bug +as_fn_error "no 32-bit type" "$LINENO" 5; } + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_int32_t" >&5 +$as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to int64_t" >&5 +$as_echo_n "checking for type equivalent to int64_t... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${acx_cv_type_int64_t-'using preprocessor symbols'}" >&5 +$as_echo "${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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type equivalent to intptr_t" >&5 +$as_echo_n "checking for type equivalent to intptr_t... " >&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 ;; + *) { as_fn_set_status please report a bug +as_fn_error "no equivalent for intptr_t" "$LINENO" 5; } + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_type_intptr_t" >&5 +$as_echo "$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 fseeko64 is declared" >&5 -echo $ECHO_N "checking whether fseeko64 is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_fseeko64+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if test "${ac_cv_header_time+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include +#include +#include + int main () { -#ifndef fseeko64 - char *p = (char *) fseeko64; -#endif - +if ((struct tm *) 0) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_fseeko64=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_time=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_fseeko64=no + ac_cv_header_time=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_fseeko64" >&5 -echo "${ECHO_T}$ac_cv_have_decl_fseeko64" >&6 -if test $ac_cv_have_decl_fseeko64 = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FSEEKO64 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FSEEKO64 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } +if test $ac_cv_header_time = yes; then +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi - - - -case "${host}" in -*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*) - -cat >>confdefs.h <<\_ACEOF -#define USE_BINARY_FOPEN 1 -_ACEOF - ;; -esac - -echo "$as_me:$LINENO: checking whether ffs is declared" >&5 -echo $ECHO_N "checking whether ffs is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_ffs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include +#include <$ac_hdr> + int main () { -#ifndef ffs - char *p = (char *) ffs; -#endif - +if ((DIR *) 0) +return 0; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_ffs=yes +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_ffs=no + eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_ffs" >&5 -echo "${ECHO_T}$ac_cv_have_decl_ffs" >&6 -if test $ac_cv_have_decl_ffs = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS 1 -_ACEOF - - -else +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FFS 0 +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF - +ac_header_dirent=$ac_hdr; break fi - -echo "$as_me:$LINENO: checking whether free is declared" >&5 -echo $ECHO_N "checking whether free is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_free+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); int main () { -#ifndef free - char *p = (char *) free; -#endif - +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_free=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_free=no +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_free" >&5 -echo "${ECHO_T}$ac_cv_have_decl_free" >&6 -if test $ac_cv_have_decl_free = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FREE 1 -_ACEOF - +done +if test "${ac_cv_search_opendir+set}" = set; then : else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FREE 0 -_ACEOF - - + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" +fi -echo "$as_me:$LINENO: checking whether getenv is declared" >&5 -echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_getenv+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); int main () { -#ifndef getenv - char *p = (char *) getenv; -#endif - +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_getenv=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_getenv=no +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 -echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 -if test $ac_cv_have_decl_getenv = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 1 -_ACEOF - +done +if test "${ac_cv_search_opendir+set}" = set; then : else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 0 -_ACEOF - + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi +fi -echo "$as_me:$LINENO: checking whether malloc is declared" >&5 -echo $ECHO_N "checking whether malloc is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_malloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5 +$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; } +if test "${gcc_cv_header_string+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include +#include int main () { -#ifndef malloc - char *p = (char *) malloc; -#endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_malloc=yes +if ac_fn_c_try_compile "$LINENO"; then : + gcc_cv_header_string=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_malloc=no + gcc_cv_header_string=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_malloc" >&5 -echo "${ECHO_T}$ac_cv_have_decl_malloc" >&6 -if test $ac_cv_have_decl_malloc = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_header_string" >&5 +$as_echo "$gcc_cv_header_string" >&6; } +if test $gcc_cv_header_string = yes; then -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MALLOC 1 -_ACEOF +$as_echo "#define STRING_WITH_STRINGS 1" >>confdefs.h +fi -else +for ac_func in fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_MALLOC 0 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF +fi +done + +for ac_func in strtoull +do : + ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull" +if test "x$ac_cv_func_strtoull" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRTOULL 1 +_ACEOF fi +done -echo "$as_me:$LINENO: checking whether realloc is declared" >&5 -echo $ECHO_N "checking whether realloc is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_realloc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_decl "$LINENO" "basename" "ac_cv_have_decl_basename" "$ac_includes_default" +if test "x$ac_cv_have_decl_basename" = x""yes; then : + ac_have_decl=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 -int -main () -{ -#ifndef realloc - char *p = (char *) realloc; -#endif + ac_have_decl=0 +fi - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_BASENAME $ac_have_decl _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_realloc=yes + +ac_fn_c_check_decl "$LINENO" "ftello" "ac_cv_have_decl_ftello" "$ac_includes_default" +if test "x$ac_cv_have_decl_ftello" = x""yes; then : + ac_have_decl=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FTELLO $ac_have_decl +_ACEOF -ac_cv_have_decl_realloc=no +ac_fn_c_check_decl "$LINENO" "ftello64" "ac_cv_have_decl_ftello64" "$ac_includes_default" +if test "x$ac_cv_have_decl_ftello64" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FTELLO64 $ac_have_decl +_ACEOF + +ac_fn_c_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "$ac_includes_default" +if test "x$ac_cv_have_decl_fseeko" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_realloc" >&5 -echo "${ECHO_T}$ac_cv_have_decl_realloc" >&6 -if test $ac_cv_have_decl_realloc = yes; then cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_REALLOC 1 +#define HAVE_DECL_FSEEKO $ac_have_decl _ACEOF - +ac_fn_c_check_decl "$LINENO" "fseeko64" "ac_cv_have_decl_fseeko64" "$ac_includes_default" +if test "x$ac_cv_have_decl_fseeko64" = x""yes; then : + ac_have_decl=1 else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_REALLOC 0 + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FSEEKO64 $ac_have_decl _ACEOF -fi +case "${host}" in +*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*) -echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 -echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_stpcpy+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef stpcpy - char *p = (char *) stpcpy; -#endif +$as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h + ;; +esac - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_stpcpy=yes +ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" +if test "x$ac_cv_have_decl_ffs" = x""yes; then : + ac_have_decl=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_stpcpy=no + ac_have_decl=0 fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 -echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 -if test $ac_cv_have_decl_stpcpy = yes; then cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STPCPY 1 +#define HAVE_DECL_FFS $ac_have_decl _ACEOF - +ac_fn_c_check_decl "$LINENO" "free" "ac_cv_have_decl_free" "$ac_includes_default" +if test "x$ac_cv_have_decl_free" = x""yes; then : + ac_have_decl=1 else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STPCPY 0 -_ACEOF - - + ac_have_decl=0 fi - -echo "$as_me:$LINENO: checking whether strstr is declared" >&5 -echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_strstr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FREE $ac_have_decl _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef strstr - char *p = (char *) strstr; -#endif - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_strstr=yes +ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_getenv" = x""yes; then : + ac_have_decl=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_strstr=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + ac_have_decl=0 fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 -echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 -if test $ac_cv_have_decl_strstr = yes; then cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSTR 1 +#define HAVE_DECL_GETENV $ac_have_decl _ACEOF - +ac_fn_c_check_decl "$LINENO" "malloc" "ac_cv_have_decl_malloc" "$ac_includes_default" +if test "x$ac_cv_have_decl_malloc" = x""yes; then : + ac_have_decl=1 else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSTR 0 -_ACEOF + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_MALLOC $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "realloc" "ac_cv_have_decl_realloc" "$ac_includes_default" +if test "x$ac_cv_have_decl_realloc" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_REALLOC $ac_have_decl +_ACEOF -echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 -echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_snprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_decl "$LINENO" "stpcpy" "ac_cv_have_decl_stpcpy" "$ac_includes_default" +if test "x$ac_cv_have_decl_stpcpy" = x""yes; then : + ac_have_decl=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 -int -main () -{ -#ifndef snprintf - char *p = (char *) snprintf; -#endif + ac_have_decl=0 +fi - ; - return 0; -} +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STPCPY $ac_have_decl _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_snprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_have_decl_snprintf=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" +if test "x$ac_cv_have_decl_strstr" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 -if test $ac_cv_have_decl_snprintf = yes; then cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 1 +#define HAVE_DECL_STRSTR $ac_have_decl _ACEOF - +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = x""yes; then : + ac_have_decl=1 else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 0 -_ACEOF + ac_have_decl=0 +fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl +_ACEOF + -echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 -echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# Link in zlib if we can. This allows us to read compressed debug sections. +# This is used only by compress.c. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zlibVersion" >&5 +$as_echo_n "checking for library containing zlibVersion... " >&6; } +if test "${ac_cv_search_zlibVersion+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char zlibVersion (); int main () { -#ifndef vsnprintf - char *p = (char *) vsnprintf; -#endif - +return zlibVersion (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_vsnprintf=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_vsnprintf=no +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_zlibVersion=$ac_res fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_zlibVersion+set}" = set; then : + break fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 -if test $ac_cv_have_decl_vsnprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 1 -_ACEOF - +done +if test "${ac_cv_search_zlibVersion+set}" = set; then : else + ac_cv_search_zlibVersion=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_zlibVersion" >&5 +$as_echo "$ac_cv_search_zlibVersion" >&6; } +ac_res=$ac_cv_search_zlibVersion +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + for ac_header in zlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 0 +#define HAVE_ZLIB_H 1 _ACEOF - fi +done + +fi # If we are configured native, pick a core file support file. @@ -17564,7 +13807,7 @@ if test "${target}" = "${host}"; then rs6000-*-lynx*) COREFILE=lynx-core.lo ;; - rs6000-*-aix5.* | powerpc-*-aix5.*) + rs6000-*-aix[5-9].* | powerpc-*-aix[5-9].*) COREFILE=rs6000-core.lo COREFLAG="$COREFLAG -DAIX_5_CORE -DAIX_CORE_DUMPX_CORE" ;; @@ -17573,13 +13816,9 @@ if test "${target}" = "${host}"; then COREFLAG="$COREFLAG -DAIX_CORE_DUMPX_CORE" # Not all versions of AIX with -DAIX_CORE_DUMPX_CORE # have c_impl as a member of struct core_dumpx - echo "$as_me:$LINENO: checking for c_impl in struct core_dumpx" >&5 -echo $ECHO_N "checking for c_impl in struct core_dumpx... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for c_impl in struct core_dumpx" >&5 +$as_echo_n "checking for c_impl in struct core_dumpx... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -17590,43 +13829,17 @@ struct core_dumpx c; c.c_impl = 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 +if ac_fn_c_try_compile "$LINENO"; then : -cat >>confdefs.h <<\_ACEOF -#define HAVE_ST_C_IMPL 1 -_ACEOF +$as_echo "#define HAVE_ST_C_IMPL 1" >>confdefs.h - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ;; rs6000-*-aix4*) COREFILE=rs6000-core.lo ;; rs6000-*-*) COREFILE=rs6000-core.lo ;; @@ -17688,150 +13901,12 @@ rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # ELF corefile support has several flavors, but all of # them use something called - -for ac_header in sys/procfs.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 + for ac_header in sys/procfs.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/procfs.h" "ac_cv_header_sys_procfs_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_procfs_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_PROCFS_H 1 _ACEOF fi @@ -17839,16 +13914,12 @@ fi done if test "$ac_cv_header_sys_procfs_h" = yes; then - echo "$as_me:$LINENO: checking for prstatus_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for prstatus_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_prstatus_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t in sys/procfs.h" >&5 +$as_echo_n "checking for prstatus_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_prstatus_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -17861,59 +13932,29 @@ prstatus_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_prstatus_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_prstatus_t=no + bfd_cv_have_sys_procfs_type_prstatus_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_prstatus_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PRSTATUS_T 1 -_ACEOF +$as_echo "#define HAVE_PRSTATUS_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prstatus_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prstatus_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prstatus_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prstatus_t" >&6; } - echo "$as_me:$LINENO: checking for prstatus32_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for prstatus32_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_prstatus32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t in sys/procfs.h" >&5 +$as_echo_n "checking for prstatus32_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_prstatus32_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -17926,59 +13967,29 @@ prstatus32_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_prstatus32_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_prstatus32_t=no + bfd_cv_have_sys_procfs_type_prstatus32_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_prstatus32_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PRSTATUS32_T 1 -_ACEOF +$as_echo "#define HAVE_PRSTATUS32_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prstatus32_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prstatus32_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prstatus32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prstatus32_t" >&6; } - echo "$as_me:$LINENO: checking for prstatus_t.pr_who in sys/procfs.h" >&5 -echo $ECHO_N "checking for prstatus_t.pr_who in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus_t.pr_who in sys/procfs.h" >&5 +$as_echo_n "checking for prstatus_t.pr_who in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -17991,59 +14002,29 @@ prstatus_t avar; void* aref = (void*) &avar.pr_who 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=no + bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PRSTATUS_T_PR_WHO 1 -_ACEOF +$as_echo "#define HAVE_PRSTATUS_T_PR_WHO 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_member_prstatus_t_pr_who" >&6; } - echo "$as_me:$LINENO: checking for prstatus32_t.pr_who in sys/procfs.h" >&5 -echo $ECHO_N "checking for prstatus32_t.pr_who in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prstatus32_t.pr_who in sys/procfs.h" >&5 +$as_echo_n "checking for prstatus32_t.pr_who in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18056,59 +14037,29 @@ prstatus32_t avar; void* aref = (void*) &avar.pr_who 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=no + bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PRSTATUS32_T_PR_WHO 1 -_ACEOF +$as_echo "#define HAVE_PRSTATUS32_T_PR_WHO 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_member_prstatus32_t_pr_who" >&6; } - echo "$as_me:$LINENO: checking for pstatus_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for pstatus_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_pstatus_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus_t in sys/procfs.h" >&5 +$as_echo_n "checking for pstatus_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_pstatus_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18121,59 +14072,29 @@ pstatus_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_pstatus_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_pstatus_t=no + bfd_cv_have_sys_procfs_type_pstatus_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_pstatus_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PSTATUS_T 1 -_ACEOF +$as_echo "#define HAVE_PSTATUS_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pstatus_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pstatus_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pstatus_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_pstatus_t" >&6; } - echo "$as_me:$LINENO: checking for pxstatus_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for pxstatus_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_pxstatus_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pxstatus_t in sys/procfs.h" >&5 +$as_echo_n "checking for pxstatus_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_pxstatus_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18186,59 +14107,29 @@ pxstatus_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_pxstatus_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_pxstatus_t=no + bfd_cv_have_sys_procfs_type_pxstatus_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_pxstatus_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PXSTATUS_T 1 -_ACEOF +$as_echo "#define HAVE_PXSTATUS_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pxstatus_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pxstatus_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pxstatus_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_pxstatus_t" >&6; } - echo "$as_me:$LINENO: checking for pstatus32_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for pstatus32_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_pstatus32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pstatus32_t in sys/procfs.h" >&5 +$as_echo_n "checking for pstatus32_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_pstatus32_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18251,59 +14142,29 @@ pstatus32_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_pstatus32_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_pstatus32_t=no + bfd_cv_have_sys_procfs_type_pstatus32_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_pstatus32_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PSTATUS32_T 1 -_ACEOF +$as_echo "#define HAVE_PSTATUS32_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_pstatus32_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_pstatus32_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_pstatus32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_pstatus32_t" >&6; } - echo "$as_me:$LINENO: checking for prpsinfo_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for prpsinfo_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_prpsinfo_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo_t in sys/procfs.h" >&5 +$as_echo_n "checking for prpsinfo_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_prpsinfo_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18316,59 +14177,29 @@ prpsinfo_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_prpsinfo_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_prpsinfo_t=no + bfd_cv_have_sys_procfs_type_prpsinfo_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_prpsinfo_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PRPSINFO_T 1 -_ACEOF +$as_echo "#define HAVE_PRPSINFO_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prpsinfo_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prpsinfo_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prpsinfo_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prpsinfo_t" >&6; } - echo "$as_me:$LINENO: checking for prpsinfo32_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for prpsinfo32_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_prpsinfo32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for prpsinfo32_t in sys/procfs.h" >&5 +$as_echo_n "checking for prpsinfo32_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_prpsinfo32_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18378,62 +14209,32 @@ main () { prpsinfo32_t avar ; - 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 + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_prpsinfo32_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_prpsinfo32_t=no + bfd_cv_have_sys_procfs_type_prpsinfo32_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_prpsinfo32_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PRPSINFO32_T 1 -_ACEOF +$as_echo "#define HAVE_PRPSINFO32_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_prpsinfo32_t" >&6; } - echo "$as_me:$LINENO: checking for psinfo_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for psinfo_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_psinfo_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo_t in sys/procfs.h" >&5 +$as_echo_n "checking for psinfo_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_psinfo_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18446,59 +14247,29 @@ psinfo_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_psinfo_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_psinfo_t=no + bfd_cv_have_sys_procfs_type_psinfo_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_psinfo_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PSINFO_T 1 -_ACEOF +$as_echo "#define HAVE_PSINFO_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_psinfo_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_psinfo_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psinfo_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_psinfo_t" >&6; } - echo "$as_me:$LINENO: checking for psinfo32_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for psinfo32_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_psinfo32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for psinfo32_t in sys/procfs.h" >&5 +$as_echo_n "checking for psinfo32_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_psinfo32_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18511,59 +14282,29 @@ psinfo32_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_psinfo32_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_psinfo32_t=no + bfd_cv_have_sys_procfs_type_psinfo32_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_psinfo32_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PSINFO32_T 1 -_ACEOF +$as_echo "#define HAVE_PSINFO32_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_psinfo32_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_psinfo32_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psinfo32_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_psinfo32_t" >&6; } - echo "$as_me:$LINENO: checking for lwpstatus_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for lwpstatus_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_lwpstatus_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t in sys/procfs.h" >&5 +$as_echo_n "checking for lwpstatus_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_lwpstatus_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18576,59 +14317,29 @@ lwpstatus_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_lwpstatus_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_lwpstatus_t=no + bfd_cv_have_sys_procfs_type_lwpstatus_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_lwpstatus_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_LWPSTATUS_T 1 -_ACEOF +$as_echo "#define HAVE_LWPSTATUS_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_lwpstatus_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_lwpstatus_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpstatus_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_lwpstatus_t" >&6; } - echo "$as_me:$LINENO: checking for lwpxstatus_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for lwpxstatus_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_lwpxstatus_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpxstatus_t in sys/procfs.h" >&5 +$as_echo_n "checking for lwpxstatus_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_lwpxstatus_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18641,59 +14352,29 @@ lwpxstatus_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_lwpxstatus_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_lwpxstatus_t=no + bfd_cv_have_sys_procfs_type_lwpxstatus_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_lwpxstatus_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_LWPXSTATUS_T 1 -_ACEOF +$as_echo "#define HAVE_LWPXSTATUS_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_lwpxstatus_t" >&6; } - echo "$as_me:$LINENO: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5 -echo $ECHO_N "checking for lwpstatus_t.pr_context in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_context in sys/procfs.h" >&5 +$as_echo_n "checking for lwpstatus_t.pr_context in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18706,59 +14387,29 @@ lwpstatus_t avar; void* aref = (void*) &avar.pr_context 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=no + bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_LWPSTATUS_T_PR_CONTEXT 1 -_ACEOF +$as_echo "#define HAVE_LWPSTATUS_T_PR_CONTEXT 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_context" >&6; } - echo "$as_me:$LINENO: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5 -echo $ECHO_N "checking for lwpstatus_t.pr_reg in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lwpstatus_t.pr_reg in sys/procfs.h" >&5 +$as_echo_n "checking for lwpstatus_t.pr_reg in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18771,59 +14422,29 @@ lwpstatus_t avar; void* aref = (void*) &avar.pr_reg 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=no + bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_LWPSTATUS_T_PR_REG 1 -_ACEOF +$as_echo "#define HAVE_LWPSTATUS_T_PR_REG 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_member_lwpstatus_t_pr_reg" >&6; } - echo "$as_me:$LINENO: checking for win32_pstatus_t in sys/procfs.h" >&5 -echo $ECHO_N "checking for win32_pstatus_t in sys/procfs.h... $ECHO_C" >&6 - if test "${bfd_cv_have_sys_procfs_type_win32_pstatus_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for win32_pstatus_t in sys/procfs.h" >&5 +$as_echo_n "checking for win32_pstatus_t in sys/procfs.h... " >&6; } + if test "${bfd_cv_have_sys_procfs_type_win32_pstatus_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _SYSCALL32 @@ -18836,48 +14457,22 @@ win32_pstatus_t avar 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 ac_fn_c_try_compile "$LINENO"; then : bfd_cv_have_sys_procfs_type_win32_pstatus_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bfd_cv_have_sys_procfs_type_win32_pstatus_t=no + bfd_cv_have_sys_procfs_type_win32_pstatus_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bfd_cv_have_sys_procfs_type_win32_pstatus_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_WIN32_PSTATUS_T 1 -_ACEOF +$as_echo "#define HAVE_WIN32_PSTATUS_T 1" >>confdefs.h fi - echo "$as_me:$LINENO: result: $bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&5 -echo "${ECHO_T}$bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&5 +$as_echo "$bfd_cv_have_sys_procfs_type_win32_pstatus_t" >&6; } fi fi @@ -18891,38 +14486,190 @@ _ACEOF fi -# Horrible hacks to build DLLs on Windows. -WIN32LDFLAGS= -WIN32LIBADD= -case "${host}" in -*-*-cygwin*) - if test "$enable_shared" = "yes"; then - WIN32LDFLAGS="-no-undefined" - WIN32LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32" - fi +# Check if linker supports --as-needed and --no-as-needed options +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5 +$as_echo_n "checking linker --as-needed support... " >&6; } +if test "${bfd_cv_ld_as_needed+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + bfd_cv_ld_as_needed=no + if $LD --help 2>/dev/null | grep as-needed > /dev/null; then + bfd_cv_ld_as_needed=yes + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_ld_as_needed" >&5 +$as_echo "$bfd_cv_ld_as_needed" >&6; } + +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it ;; -*-*-linux*) - # We borrow WIN32LIBADD so that the shared libbfd won't depend on - # libiberty.a. - case "${host}" in - mips*-*-linux*) - # Linux/MIPS uses PIC by default. - if test "$enable_shared" = "yes"; then - WIN32LIBADD="-L../libiberty -liberty" - fi - ;; - *) - x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'` - if test -n "$x"; then - WIN32LIBADD="-L../libiberty/pic -liberty" - fi +*-ncr-sysv4.3*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5 +$as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; } +if test "${ac_cv_lib_mw__mwvalidcheckl+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmw $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char _mwvalidcheckl (); +int +main () +{ +return _mwvalidcheckl (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_mw__mwvalidcheckl=yes +else + ac_cv_lib_mw__mwvalidcheckl=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mw__mwvalidcheckl" >&5 +$as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; } +if test "x$ac_cv_lib_mw__mwvalidcheckl" = x""yes; then : + LIBM="-lmw" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if test "${ac_cv_lib_m_cos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cos (); +int +main () +{ +return cos (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_cos=yes +else + ac_cv_lib_m_cos=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = x""yes; then : + LIBM="$LIBM -lm" +fi + ;; - esac +*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 +$as_echo_n "checking for cos in -lm... " >&6; } +if test "${ac_cv_lib_m_cos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char cos (); +int +main () +{ +return cos (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_m_cos=yes +else + ac_cv_lib_m_cos=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_cos" >&5 +$as_echo "$ac_cv_lib_m_cos" >&6; } +if test "x$ac_cv_lib_m_cos" = x""yes; then : + LIBM="-lm" +fi + ;; esac +# When building a shared libbfd, link against the pic version of libiberty +# so that apps that use libbfd won't need libiberty just to satisfy any +# libbfd references. +# We can't do that if a pic libiberty is unavailable since including non-pic +# code would insert text relocations into libbfd. +SHARED_LIBADD= +SHARED_LDFLAGS= +if test "$enable_shared" = "yes"; then + x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'` + if test -n "$x"; then + SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty" + fi + +# More hacks to build DLLs on Windows. + case "${host}" in + *-*-cygwin*) + SHARED_LDFLAGS="-no-undefined" + SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32" + ;; + esac + + if test -n "$SHARED_LIBADD"; then + if test -n "$LIBM"; then + if test x"$bfd_cv_ld_as_needed" = xyes; then + # Link against libm only when needed. Put -lc, -lm inside -Wl + # to stop libtool reordering these options. + SHARED_LIBADD="$SHARED_LIBADD -Wl,-lc,--as-needed,`echo $LIBM | sed 's/ /,/g'`,--no-as-needed" + else + SHARED_LIBADD="$SHARED_LIBADD $LIBM" + fi + fi + fi +fi + + + # target stuff: # Canonicalize the secondary target names. @@ -19004,7 +14751,8 @@ selarchs="$f" # Target backend .o files. tb= -elf="elf.lo elflink.lo elf-attrs.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 @@ -19036,9 +14784,7 @@ do armpei_little_vec) tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;; 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_pei_ia64_vec) tb="$tb pei-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" ;; bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; @@ -19059,20 +14805,21 @@ do bfd_elf32_crx_vec) tb="$tb elf32-crx.lo elf32.lo $elf" ;; bfd_elf32_d10v_vec) tb="$tb elf32-d10v.lo elf32.lo $elf" ;; bfd_elf32_d30v_vec) tb="$tb elf32-d30v.lo elf32.lo $elf" ;; - bfd_elf32_i386_dragonfly_vec) - tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; bfd_elf32_dlx_big_vec) tb="$tb elf32-dlx.lo elf32.lo $elf" ;; bfd_elf32_fr30_vec) tb="$tb elf32-fr30.lo elf32.lo $elf" ;; bfd_elf32_frv_vec) tb="$tb elf32-frv.lo elf32.lo $elf" ;; bfd_elf32_frvfdpic_vec) tb="$tb elf32-frv.lo elf32.lo $elf" ;; + bfd_elf32_moxie_vec) tb="$tb elf32-moxie.lo elf32.lo $elf" ;; bfd_elf32_h8300_vec) tb="$tb elf32-h8300.lo elf32.lo $elf" ;; bfd_elf32_hppa_linux_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_hppa_nbsd_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_hppa_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_i370_vec) tb="$tb elf32-i370.lo elf32.lo $elf" ;; - bfd_elf32_i386_freebsd_vec) tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; - bfd_elf32_i386_vxworks_vec) tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; - bfd_elf32_i386_vec) tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_dragonfly_vec) + tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_freebsd_vec) tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_vxworks_vec) tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_vec) tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; bfd_elf32_i860_little_vec) tb="$tb elf32-i860.lo elf32.lo $elf" ;; bfd_elf32_i860_vec) tb="$tb elf32-i860.lo elf32.lo $elf" ;; bfd_elf32_i960_vec) tb="$tb elf32-i960.lo elf32.lo $elf" ;; @@ -19080,6 +14827,8 @@ do bfd_elf32_ia64_hpux_big_vec) tb="$tb elf32-ia64.lo elf32.lo $elf";; bfd_elf32_ip2k_vec) tb="$tb elf32-ip2k.lo elf32.lo $elf" ;; bfd_elf32_iq2000_vec) tb="$tb elf32-iq2000.lo elf32.lo $elf" ;; + bfd_elf32_lm32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; + bfd_elf32_lm32fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; bfd_elf32_little_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; bfd_elf32_littlearc_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;; bfd_elf32_littlearm_symbian_vec) @@ -19103,6 +14852,7 @@ do 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_microblaze_vec) tb="$tb elf32-microblaze.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" ;; @@ -19119,8 +14869,8 @@ 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" ;; + bfd_elf32_bigscore_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64;; + bfd_elf32_littlescore_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64;; # 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. @@ -19160,6 +14910,7 @@ do bfd_elf64_ia64_big_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_ia64_hpux_big_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_ia64_little_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_ia64_vms_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_littlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf64_mmix_vec) tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;; @@ -19176,8 +14927,10 @@ do 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_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_x86_64_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_l1om_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_l1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.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" ;; bfd_powerpc_pei_vec) tb="$tb pei-ppc.lo peigen.lo cofflink.lo" ;; @@ -19231,6 +14984,7 @@ do mach_o_be_vec) tb="$tb mach-o.lo" ;; mach_o_le_vec) tb="$tb mach-o.lo" ;; mach_o_fat_vec) tb="$tb mach-o.lo" ;; + mach_o_i386_vec) tb="$tb mach-o-i386.lo" ;; mcore_pe_big_vec) tb="$tb pe-mcore.lo peigen.lo cofflink.lo" ;; mcore_pe_little_vec) tb="$tb pe-mcore.lo peigen.lo cofflink.lo" ;; mcore_pei_big_vec) tb="$tb pei-mcore.lo peigen.lo cofflink.lo" ;; @@ -19248,6 +15002,7 @@ do pef_vec) tb="$tb pef.lo" ;; pef_xlib_vec) tb="$tb pef.lo" ;; pdp11_aout_vec) tb="$tb pdp11.lo" ;; + plugin_vec) tb="$tb plugin.lo" ;; pmac_xcoff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;; ppcboot_vec) tb="$tb ppcboot.lo" ;; riscix_vec) tb="$tb aout32.lo riscix.lo" ;; @@ -19302,9 +15057,7 @@ do cisco_core_little_vec) tb="$tb cisco-core.lo" ;; "") ;; - *) { { echo "$as_me:$LINENO: error: *** unknown target vector $vec" >&5 -echo "$as_me: error: *** unknown target vector $vec" >&2;} - { (exit 1); exit 1; }; } ;; + *) as_fn_error "*** unknown target vector $vec" "$LINENO" 5 ;; esac if test ${target_size} = 64; then @@ -19368,584 +15121,112 @@ case ${host64}-${target64}-${want64} in 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 -echo "$as_me: WARNING: You have requested a 64 bit BFD configuration, but" >&2;} - { echo "$as_me:$LINENO: WARNING: your compiler may not have a 64 bit integral type" >&5 -echo "$as_me: WARNING: your compiler may not have a 64 bit integral type" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: You have requested a 64 bit BFD configuration, but" >&5 +$as_echo "$as_me: WARNING: You have requested a 64 bit BFD configuration, but" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your compiler may not have a 64 bit integral type" >&5 +$as_echo "$as_me: WARNING: your compiler may not have a 64 bit integral type" >&2;} fi if test -n "$GCC" ; then bad_64bit_gcc=no; - echo "$as_me:$LINENO: checking for gcc version with buggy 64-bit support" >&5 -echo $ECHO_N "checking for gcc version with buggy 64-bit support... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc version with buggy 64-bit support" >&5 +$as_echo_n "checking for gcc version with buggy 64-bit support... " >&6; } # Add more tests for gcc versions with non-working 64-bit support here. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ :__GNUC__:__GNUC_MINOR__:__i386__: _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP ": 2 : 91 : 1 :" >/dev/null 2>&1; then + $EGREP ": 2 : 91 : 1 :" >/dev/null 2>&1; then : bad_64bit_gcc=yes; - echo "$as_me:$LINENO: result: yes: egcs-1.1.2 on ix86 spotted" >&5 -echo "${ECHO_T}yes: egcs-1.1.2 on ix86 spotted" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes: egcs-1.1.2 on ix86 spotted" >&5 +$as_echo "yes: egcs-1.1.2 on ix86 spotted" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi rm -f conftest* if test $bad_64bit_gcc = yes ; then - { { echo "$as_me:$LINENO: error: A newer version of gcc is needed for the requested 64-bit BFD configuration" >&5 -echo "$as_me: error: A newer version of gcc is needed for the requested 64-bit BFD configuration" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "A newer version of gcc is needed for the requested 64-bit BFD configuration" "$LINENO" 5 fi - fi - ;; - false-false-false) - wordsize=32 - all_backends='$(BFD32_BACKENDS)' - ;; -esac - - - - - - - - -# Determine the host dependant file_ptr a.k.a. off_t type. In order -# prefer: off64_t - if ftello64 and fseeko64, off_t - if ftello and -# fseeko, long. This assumes that sizeof off_t is .ge. sizeof long. -# Hopefully a reasonable assumption since fseeko et.al. should be -# upward compatible. - - - - - -for ac_func in ftello ftello64 fseeko fseeko64 fopen64 -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 declares $ac_func. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 x"$ac_cv_func_ftello" = xyes -a x"$ac_cv_func_fseeko" = xyes; then - 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 + fi + ;; + false-false-false) + wordsize=32 + all_backends='$(BFD32_BACKENDS)' + ;; +esac -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 -echo "$as_me:$LINENO: checking size of off_t" >&5 -echo $ECHO_N "checking size of off_t... $ECHO_C" >&6 -if test "${ac_cv_sizeof_off_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$ac_cv_type_off_t" = 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 (off_t))) >= 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 (off_t))) <= $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 (off_t))) < 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 (off_t))) >= $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 +if test "$plugins" = "yes"; then + supports_plugins=1 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` + supports_plugins=0 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 (off_t))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} +# Determine the host dependant file_ptr a.k.a. off_t type. In order +# prefer: off64_t - if ftello64 and fseeko64, off_t - if ftello and +# fseeko, long. This assumes that sizeof off_t is .ge. sizeof long. +# Hopefully a reasonable assumption since fseeko et.al. should be +# upward compatible. +for ac_func in ftello ftello64 fseeko fseeko64 fopen64 +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF -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_off_t=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (off_t), 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 (off_t)); } -unsigned long ulongval () { return (long) (sizeof (off_t)); } -#include -#include -int -main () -{ - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (off_t))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (off_t)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (off_t)))) - 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_off_t=`cat conftest.val` +if test x"$ac_cv_func_ftello" = xyes -a x"$ac_cv_func_fseeko" = xyes; then + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 +$as_echo_n "checking size of off_t... " >&6; } +if test "${ac_cv_sizeof_off_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (off_t), 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_off_t=0 + if test "$ac_cv_type_off_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (off_t) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_off_t=0 + fi fi + fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 +$as_echo "$ac_cv_sizeof_off_t" >&6; } + + + cat >>confdefs.h <<_ACEOF #define SIZEOF_OFF_T $ac_cv_sizeof_off_t _ACEOF fi -echo "$as_me:$LINENO: checking file_ptr type" >&5 -echo $ECHO_N "checking file_ptr type... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking file_ptr type" >&5 +$as_echo_n "checking file_ptr type... " >&6; } bfd_file_ptr="long" bfd_ufile_ptr="unsigned long" if test x"$ac_cv_func_ftello64" = xyes -a x"$ac_cv_func_fseeko64" = xyes \ @@ -19953,8 +15234,8 @@ if test x"$ac_cv_func_ftello64" = xyes -a x"$ac_cv_func_fseeko64" = xyes \ bfd_file_ptr=BFD_HOST_64_BIT bfd_ufile_ptr=BFD_HOST_U_64_BIT fi -echo "$as_me:$LINENO: result: $bfd_file_ptr" >&5 -echo "${ECHO_T}$bfd_file_ptr" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_file_ptr" >&5 +$as_echo "$bfd_file_ptr" >&6; } @@ -19967,272 +15248,40 @@ test -n "${selarchs}" && tdefaults="${tdefaults} -DSELECT_ARCHITECTURES='${selar test -n "${havevecs}" && tdefaults="${tdefaults} ${havevecs}" - - for ac_header in stdlib.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_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 declares $ac_func. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 +do : + ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_GETPAGESIZE 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +$as_echo_n "checking for working mmap... " >&6; } +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ @@ -20263,21 +15312,21 @@ $ac_includes_default #include #include -#if !STDC_HEADERS && !HAVE_STDLIB_H +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ -#if !HAVE_GETPAGESIZE +#ifndef HAVE_GETPAGESIZE /* Assume that all systems that can run configure have sys/param.h. */ -# if !HAVE_SYS_PARAM_H +# ifndef 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 +# ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE @@ -20316,15 +15365,15 @@ main () /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) - exit (1); + return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) - exit (1); + return 1; if (write (fd, data, pagesize) != pagesize) - exit (1); + return 1; close (fd); /* Next, try to mmap the file at a fixed address which already has @@ -20332,17 +15381,17 @@ main () we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) - exit (1); + return 1; data2 = (char *) malloc (2 * pagesize); if (!data2) - exit (1); - data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1); + return 1; + data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1); if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) - exit (1); + return 1; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) - exit (1); + return 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 @@ -20351,148 +15400,43 @@ main () *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) - exit (1); + return 1; if (read (fd, data3, pagesize) != pagesize) - exit (1); + return 1; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) - exit (1); + return 1; close (fd); - exit (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 +if ac_fn_c_try_run "$LINENO"; 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 + 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 +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$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 +$as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap - - for ac_func in madvise mprotect -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 declares $ac_func. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -20500,17 +15444,16 @@ done case ${want_mmap}+${ac_cv_func_mmap_fixed_mapped} in true+yes ) -cat >>confdefs.h <<\_ACEOF -#define USE_MMAP 1 -_ACEOF +$as_echo "#define USE_MMAP 1" >>confdefs.h ;; 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_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" - ac_config_commands="$ac_config_commands default" @@ -20535,39 +15478,59 @@ _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. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(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 \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : 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" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -20576,32 +15539,18 @@ 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' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs @@ -20609,47 +15558,46 @@ 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; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { 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; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${PLUGINS_TRUE}" && test -z "${PLUGINS_FALSE}"; then + as_fn_error "conditional \"PLUGINS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { 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; }; } + as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then - { { 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; }; } + as_fn_error "conditional \"GENINSRC_NEVER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 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 -echo "$as_me: error: conditional \"INSTALL_LIBBFD\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"INSTALL_LIBBFD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -20659,81 +15607,252 @@ cat >$CONFIG_STATUS <<_ACEOF debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi -done + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -20741,148 +15860,123 @@ 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -20891,31 +15985,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. 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 - +# values after options handling. +ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -20923,45 +16006,46 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac -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_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -20972,84 +16056,83 @@ $config_headers Configuration commands: $config_commands -Report bugs to ." -_ACEOF +Report bugs to the package provider." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.64, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _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. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_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 ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { 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; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -21063,19 +16146,32 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 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 + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # -# INIT-COMMANDS section. +# INIT-COMMANDS # - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" @@ -21114,6 +16210,7 @@ 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"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $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"`' @@ -21130,6 +16227,7 @@ 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"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $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"`' @@ -21140,6 +16238,11 @@ lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_ 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"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $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"`' @@ -21213,6 +16316,7 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ +OBJDUMP \ deplibs_check_method \ file_magic_cmd \ AR \ @@ -21225,6 +16329,7 @@ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ @@ -21233,6 +16338,11 @@ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ @@ -21347,29 +16457,28 @@ ac_cv_sizeof_void_p="$ac_cv_sizeof_void_p" _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; - "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 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "bfd_stdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS bfd_stdint.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "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" ;; + "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -21381,884 +16490,669 @@ if $ac_need_defaults; then 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, +# simply because there is no reason against having 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. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" -_ACEOF +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } -cat >>$CONFIG_STATUS <<_ACEOF + print line +} -# -# CONFIG_FILES section. -# +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@target@,$target,;t t -s,@target_cpu@,$target_cpu,;t t -s,@target_vendor@,$target_vendor,;t t -s,@target_os@,$target_os,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@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,@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,@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,@HDEFINES@,$HDEFINES,;t t -s,@BFD_HOST_64BIT_LONG@,$BFD_HOST_64BIT_LONG,;t t -s,@BFD_HOST_64BIT_LONG_LONG@,$BFD_HOST_64BIT_LONG_LONG,;t t -s,@BFD_HOST_LONG_LONG@,$BFD_HOST_LONG_LONG,;t t -s,@BFD_HOST_64_BIT_DEFINED@,$BFD_HOST_64_BIT_DEFINED,;t t -s,@BFD_HOST_64_BIT@,$BFD_HOST_64_BIT,;t t -s,@BFD_HOST_U_64_BIT@,$BFD_HOST_U_64_BIT,;t t -s,@BFD_HOSTPTR_T@,$BFD_HOSTPTR_T,;t t -s,@CC_FOR_BUILD@,$CC_FOR_BUILD,;t t -s,@EXEEXT_FOR_BUILD@,$EXEEXT_FOR_BUILD,;t t -s,@COREFILE@,$COREFILE,;t t -s,@COREFLAG@,$COREFLAG,;t t -s,@WIN32LDFLAGS@,$WIN32LDFLAGS,;t t -s,@WIN32LIBADD@,$WIN32LIBADD,;t t -s,@TDEFINES@,$TDEFINES,;t t -s,@wordsize@,$wordsize,;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 -s,@bfd_default_target_size@,$bfd_default_target_size,;t t -s,@bfd_file_ptr@,$bfd_file_ptr,;t t -s,@bfd_ufile_ptr@,$bfd_ufile_ptr,;t t -s,@tdefaults@,$tdefaults,;t t -s,@datarootdir@,$datarootdir,;t t -s,@docdir@,$docdir,;t t -s,@htmldir@,$htmldir,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { _ACEOF - 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 +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi -fi # test -n "$CONFIG_FILES" +done +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -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 ;; +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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 ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# 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 $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF - 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; } +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :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". +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" case $ac_file in - - | *:- | *:-:* ) # 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 <>$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 <>$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 + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # if test x"$ac_file" != x-; then - 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;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - 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 + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - cat $tmp/config.h - rm -f $tmp/config.h + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) 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 +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; -# 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 + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + 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 || + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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 || + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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'` + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - 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 +} ;; - libtool ) + "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. @@ -22274,36 +17168,36 @@ done #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 # -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 +# 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. +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. # -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. # -# 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. +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# 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. +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. @@ -22380,6 +17274,9 @@ NL2SP=$lt_lt_NL2SP reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -22413,6 +17310,9 @@ global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + # The name of the directory that contains temporary libtool files. objdir=$objdir @@ -22428,6 +17328,21 @@ MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + # Old archive suffix (normally "a"). libext=$libext @@ -22668,6 +17583,7 @@ ltmain="$ac_aux_dir/ltmain.sh" 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. @@ -22685,6 +17601,27 @@ func_basename () func_basename_result="${1##*/}" } +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special @@ -22714,10 +17651,31 @@ func_lo2o () *) func_lo2o_result=${1} ;; esac } + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" + # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. @@ -22738,6 +17696,7 @@ 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 @@ -22770,6 +17729,26 @@ func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + _LT_EOF esac @@ -22794,6 +17773,7 @@ func_append () { eval "$1=\$$1\$2" } + _LT_EOF ;; esac @@ -22807,7 +17787,7 @@ _LT_EOF chmod +x "$ofile" ;; - default-1 ) + "default-1":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in @@ -22908,7 +17888,7 @@ _LT_EOF ;; esac done ;; - bfd_stdint.h ) + "bfd_stdint.h":C) if test "$GCC" = yes; then echo "/* generated for " `$CC --version | sed 1q` "*/" > tmp-stdint.h else @@ -23236,7 +18216,7 @@ else fi ;; - default ) + "default":C) case "$srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; @@ -23254,17 +18234,18 @@ sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' \ -e "s,@POFILES@,$POFILES," \ -e "s,@GMOFILES@,$GMOFILES," \ po/Makefile.in > po/Makefile ;; + esac -done -_ACEOF +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -23284,7 +18265,11 @@ if test "$no_create" != yes; then 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; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/bfd/configure.com b/bfd/configure.com index 929977c..2102415 100644 --- a/bfd/configure.com +++ b/bfd/configure.com @@ -1,18 +1,22 @@ $! -$! This file configures the bfd library for use with openVMS (Alpha and Vax) +$! This file configures the bfd library for use with openVMS. $! $! We do not use the configure script, since we do not have /bin/sh $! to execute it. $! $! Written by Klaus K"ampf (kkaempf@rmi.de) +$! Rewritten by Tristan Gingold (gingold@adacore.com) $! -$arch_indx = 1 + ((f$getsyi("CPU").ge.128).and.1) ! vax==1, alpha==2 -$arch = f$element(arch_indx,"|","|VAX|Alpha|") +$ arch=F$GETSYI("ARCH_NAME") +$ arch=F$EDIT(arch,"LOWERCASE") +$if arch .eqs. "alpha" then target = "alpha" +$if arch .eqs. "ia64" then target = "ia64" $! -$if arch .eqs. "Alpha" +$if (arch .eqs. "alpha") .or. (arch .eqs. "ia64") $then -$ write sys$output "Configuring for Alpha target" -$ target = "alpha" +$! +$ write sys$output "Configuring BFD for ''target' target" +$! $! $! copy bfd-in2.h to bfd.h, replacing @ macros $! @@ -23,6 +27,7 @@ $DECK ! Copy file, changing lines with macros (@@) ! ! + set (success,off); vfile := CREATE_BUFFER("vfile", "CONFIGURE.IN"); rang := CREATE_RANGE(BEGINNING_OF(vfile), END_OF(vfile)); match_pos := SEARCH_QUIETLY('AM_INIT_AUTOMAKE(bfd, ', FORWARD, EXACT, rang); @@ -49,12 +54,30 @@ $DECK ERASE(match_pos); COPY_TEXT('64'); ENDIF; + match_pos := SEARCH_QUIETLY('@bfd_default_target_size@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('64'); + ENDIF; match_pos := SEARCH_QUIETLY('@BFD_HOST_64BIT_LONG@', FORWARD, EXACT, rang); IF match_pos <> 0 THEN; POSITION(BEGINNING_OF(match_pos)); ERASE(match_pos); COPY_TEXT('0'); ENDIF; + match_pos := SEARCH_QUIETLY('@BFD_HOST_LONG_LONG@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('0'); + ENDIF; + match_pos := SEARCH_QUIETLY('@BFD_HOST_64BIT_LONG_LONG@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('0'); + ENDIF; match_pos := SEARCH_QUIETLY('@BFD_HOST_64_BIT_DEFINED@', FORWARD, EXACT, rang); IF match_pos <> 0 THEN; POSITION(BEGINNING_OF(match_pos)); @@ -75,6 +98,30 @@ $DECK ERASE(match_pos); COPY_TEXT('uint64'); ENDIF; + match_pos := SEARCH_QUIETLY('@BFD_HOSTPTR_T@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('uint64'); + ENDIF; + match_pos := SEARCH_QUIETLY('@bfd_file_ptr@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('bfd_signed_vma'); + ENDIF; + match_pos := SEARCH_QUIETLY('unsigned @bfd_file_ptr@ ufile_ptr', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('bfd_vma ufile_ptr'); + ENDIF; + match_pos := SEARCH_QUIETLY('@supports_plugins@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('0'); + ENDIF; WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file")); QUIT $ EOD @@ -86,6 +133,7 @@ $ target = "vax" $! $! copy bfd-in2.h to bfd.h, replacing @ macros $! +$ write sys$output "Generated `bfd.h' from `bfd-in2.h'." $ edit/tpu/nojournal/nosection/nodisplay/command=sys$input - []bfd-in2.h /output=[]bfd.h $DECK @@ -93,6 +141,7 @@ $DECK ! Copy file, changing lines with macros (@@) ! ! + set (success,off); vfile := CREATE_BUFFER("vfile", "CONFIGURE.IN"); rang := CREATE_RANGE(BEGINNING_OF(vfile), END_OF(vfile)); match_pos := SEARCH_QUIETLY('AM_INIT_AUTOMAKE(bfd, ', FORWARD, EXACT, rang); @@ -150,11 +199,67 @@ $DECK $ EOD $endif $ -$ write sys$output "Generated `bfd.h' from `bfd-in2.h'." +$! +$! create bfdver.h +$! +$ write sys$output "Generate `bfdver.h' from 'version.h' and `configure.in'." +$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input - + []version.h /output=[]bfdver.h +$DECK +! +! Copy file, changing lines with macros (@@) +! +! + set (success,off); + vfile := CREATE_BUFFER("vfile", "configure.in"); + rang := CREATE_RANGE(BEGINNING_OF(vfile), END_OF(vfile)); + match_pos := SEARCH_QUIETLY('AM_INIT_AUTOMAKE(bfd, ', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + vers := CURRENT_LINE-")"; + ELSE; + vers := "unknown"; + ENDIF; + versnum := vers - "." - "."; + + file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name")); + rang := CREATE_RANGE(BEGINNING_OF(file), END_OF(file)); + + match_pos := SEARCH_QUIETLY('@bfd_version@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT(versnum); + ENDIF; + match_pos := SEARCH_QUIETLY('@bfd_version_string@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('"'); + COPY_TEXT(vers); + COPY_TEXT('"'); + ENDIF; + match_pos := SEARCH_QUIETLY('@bfd_version_package@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('"(GNU Binutils) "'); + ENDIF; + match_pos := SEARCH_QUIETLY('@report_bugs_to@', FORWARD, EXACT, rang); + IF match_pos <> 0 THEN; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('""'); + ENDIF; + WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file")); + QUIT +$ EOD $! $! $! create targmatch.h $! +$ write sys$output "Generate `targmatch.h'" $ open/write tfile []targmatch.h $ write tfile "{ """ + target + "-*-*vms*""" + "," $ write tfile "#if defined (SELECT_VECS)" @@ -164,11 +269,11 @@ $ write tfile "UNSUPPORTED_TARGET" $ write tfile "#endif" $ write tfile "}," $ close tfile -$ write sys$output "Generated `targmatch.h'" $! $! $! create config.h $! +$ write sys$output "Generate `config.h'" $ create []config.h /* config.h-vms. Generated by hand by Klaus Kämpf, kkaempf@didymus.rmi.de. */ /* config.in. Generated automatically from configure.in by autoheader. */ @@ -210,6 +315,93 @@ $ create []config.h #define HAVE_TIME_H 1 /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 +/* Disable NLS */ +#undef ENABLE_NLS +$! +$ write sys$output "Copy sysdep.h" +$ copy [.hosts]alphavms.h sysdep.h +$ +$ write sys$output "Generate build.com" $! -$ write sys$output "Generated `config.h'" +$ if ARCH.eqs."alpha" +$ then +$ create build.com +$DECK +$ DEFS="""SELECT_VECS=&vms_alpha_vec"","+- + """SELECT_ARCHITECTURES=&bfd_alpha_arch""" +$ FILES="cpu-alpha,vms,vms-hdr,vms-gsd,vms-tir,vms-misc," +$EOD +$ endif +$ if ARCH.eqs."ia64" +$ then +$ create build.com +$DECK +$ DEFS="""SELECT_VECS=&bfd_elf64_ia64_vms_vec"","+- + """SELECT_ARCHITECTURES=&bfd_ia64_arch""" +$ FILES="cpu-ia64,elf64-ia64,elf-strtab,corefile,stabs,merge,elf-eh-frame,"+- + "elflink,elf-attrs,dwarf1,elf64," +$EOD +$ create substxx.tpu +$DECK + set (success,off); + file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name")); + found_range := CREATE_RANGE(BEGINNING_OF(file), BEGINNING_OF(file)); + LOOP + rang := CREATE_RANGE (END_OF(found_range),END_OF(file)); + match_pos := SEARCH_QUIETLY('NN', FORWARD, EXACT, rang); + EXITIF match_pos = 0; + POSITION(BEGINNING_OF(match_pos)); + ERASE(match_pos); + COPY_TEXT('64'); + ENDLOOP; + WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file")); + QUIT +$ EOD +$ write sys$output "Generate elf64-ia64.c from elfxx-ia64.c" +$ edit/tpu/nojournal/nosection/nodisplay/command=substxx.tpu - + []elfXX-ia64.c /output=[]elf64-ia64.c +$ write sys$output "Generate elf64-target.h from elfxx-target.h" +$ edit/tpu/nojournal/nosection/nodisplay/command=substxx.tpu - + []elfXX-target.h /output=[]elf64-target.h +$ del substxx.tpu;* +$ endif +$ append sys$input build.com +$DECK +$ DEFS=DEFS + ",""unlink=remove"",""DEBUGDIR=""""GNU$DEBUGDIR:""""""" +$ OPT="/noopt/debug" +$ CFLAGS="/name=(as_is,shortened)" + - + "/include=([],""../"",""../include"")" + - + "/define=(" + DEFS + ")" + OPT +$ FILES=FILES + "archive,archive64,archures,bfd,bfdio,binary,cache,coffgen,"+- + "compress,corefile,dwarf2,elf,format,hash,ihex,init,libbfd,linker,"+- + "opncls,reloc,section,simple,srec,stab-syms,syms,targets,tekhex,verilog" +$ write sys$output "CFLAGS=",CFLAGS +$ cflags_libbfd="/warning=(disable=missingreturn)" +$ cflags_nil="" +$ NUM = 0 +$ OBJS="" +$ LOOP: +$ F = F$ELEMENT(NUM,",",FILES) +$ IF F.EQS."," THEN GOTO END +$ eflags_name="cflags_''f'" +$ name_len=f$length(eflags_name) +$ dash_pos=f$locate("-",eflags_name) +$ if dash_pos.ne.name_len +$ then +$ eflags_name['dash_pos,1]:="_" +$ dash_pos=f$locate("-",eflags_name) +$ if dash_pos.ne.name_len then eflags_name['dash_pos,1]:="_" +$ endif +$ if f$type('eflags_name).eqs."" then eflags_name="cflags_nil" +$ eflags='eflags_name +$ write sys$output "Compiling ", F, ".c", eflags +$ cc 'CFLAGS 'eflags 'F.c +$ IF OBJS.NES."" THEN OBJS=OBJS + "," +$ OBJS=OBJS + F + ".obj" +$ NUM = NUM + 1 +$ GOTO LOOP +$ END: +$ purge +$ lib/create libbfd 'OBJS +$EOD diff --git a/bfd/configure.in b/bfd/configure.in index 95f3719..d03a271 100644 --- a/bfd/configure.in +++ b/bfd/configure.in @@ -8,21 +8,54 @@ AC_CONFIG_SRCDIR([libbfd.c]) AC_CANONICAL_TARGET AC_ISC_POSIX -AM_INIT_AUTOMAKE(bfd, 2.18.0) +AM_INIT_AUTOMAKE(bfd, 2.20) -dnl These must be called before AM_PROG_LIBTOOL, because it may want +dnl These must be called before LT_INIT, because it may want dnl to call AC_CHECK_PROG. AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(RANLIB, ranlib, :) dnl Default to a non shared library. This may be overridden by the dnl configure option --enable-shared. -AM_DISABLE_SHARED +AC_DISABLE_SHARED AC_PROG_CC AC_GNU_SOURCE +AC_USE_SYSTEM_EXTENSIONS -AC_PROG_LIBTOOL +LT_INIT([dlopen]) + +AC_PLUGINS + +AM_CONDITIONAL(PLUGINS, test "$plugins" = "yes") + +if test "$plugins" = "yes"; then + if test "$enable_dlopen" != "yes" ; then + AC_MSG_ERROR([ + Building BFD with plugin support requires a host that supports -ldl.]) + fi + enable_targets="$enable_targets plugin" +fi + +case "${target}" in +changequote(,)dnl + sparc-*-solaris*|i[3-7]86-*-solaris*) +changequote([,])dnl + # On native 32bit sparc and ia32 solaris, large-file and procfs support + # are mutually exclusive; and without procfs support, the elf module + # cannot provide certain routines such as elfcore_write_prpsinfo + # or elfcore_write_prstatus. So unless the user explicitly requested + # large-file support through the --enable-largefile switch, disable + # large-file support in favor of procfs support. + if test "${target}" = "${host}" -a "$enable_largefile" != 'yes'; then + if test "$plugins" = "no"; then + enable_largefile="no" + fi + fi + ;; +esac + +AC_SYS_LARGEFILE AC_ARG_ENABLE(64-bit-bfd, [ --enable-64-bit-bfd 64-bit support (on hosts with narrower word sizes)], @@ -31,6 +64,7 @@ AC_ARG_ENABLE(64-bit-bfd, no) want64=false ;; *) AC_MSG_ERROR(bad value ${enableval} for 64-bit-bfd option) ;; esac],[want64=false])dnl + AC_ARG_ENABLE(targets, [ --enable-targets alternative target configurations], [case "${enableval}" in @@ -39,13 +73,7 @@ AC_ARG_ENABLE(targets, no) enable_targets= ;; *) enable_targets=$enableval ;; esac])dnl -AC_ARG_ENABLE(commonbfdlib, -[ --enable-commonbfdlib build shared BFD/opcodes/libiberty library], -[case "${enableval}" in - yes) commonbfdlib=true ;; - no) commonbfdlib=false ;; - *) AC_MSG_ERROR([bad value ${enableval} for BFD commonbfdlib option]) ;; -esac])dnl + AC_ARG_WITH(mmap, [ --with-mmap try using mmap for BFD input files if available], [case "${withval}" in @@ -67,19 +95,38 @@ if test $use_secureplt = true; then 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) +# Check to see if we should allow the generation of +# symbols with the ELF standard's STT_COMMON type. +AC_ARG_ENABLE(elf-stt-common, +[ --enable-elf-stt-common Allow the generation of ELF symbols with the STT_COMMON type], +[case "${enableval}" in + yes) want_elf_stt_common=true ;; + no) want_elf_stt_common=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for ELF STT_COMMON option) ;; + esac], +# We have to choose a default behaviour. For native builds we could +# test whether the loader supports the STT_COMMON type, but that would +# mean that built binaries could not be exported to older systems where +# the loader does not support it. So by default we always choose to +# disable this feature. + want_elf_stt_common=false)dnl +if test $want_elf_stt_common = true; then + AC_DEFINE(USE_STT_COMMON, 1, + [Define if we may generate symbols with ELF's STT_COMMON type]) +fi + ACX_PKGVERSION([GNU Binutils]) ACX_BUGURL([http://www.sourceware.org/bugzilla/]) AM_BINUTILS_WARNINGS -AM_CONFIG_HEADER(config.h:config.in) +AC_CONFIG_HEADERS(config.h:config.in) if test -z "$target" ; then AC_MSG_ERROR(Unrecognized target system type; please check config.sub.) @@ -96,7 +143,7 @@ bfd_default_target_size=32 # host stuff: -ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi" +ALL_LINGUAS="fr tr ja es sv da zh_CN ro rw vi fi id ru" ZW_GNU_GETTEXT_SISTER_DIR AM_PO_SUBDIRS @@ -108,39 +155,30 @@ AC_PROG_INSTALL BFD_HOST_64BIT_LONG=0 BFD_HOST_64BIT_LONG_LONG=0 -BFD_HOST_LONG_LONG=0 BFD_HOST_64_BIT_DEFINED=0 BFD_HOST_64_BIT= BFD_HOST_U_64_BIT= BFD_HOSTPTR_T="unsigned long" -AC_MSG_CHECKING([for long long]) -AC_CACHE_VAL(bfd_cv_has_long_long, -[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[unsigned long long ll = 18446744073709551615ULL;]])],[bfd_cv_has_long_long=yes],[bfd_cv_has_long_long=no])]) -AC_MSG_RESULT($bfd_cv_has_long_long) -if test $bfd_cv_has_long_long = yes; then - BFD_HOST_LONG_LONG=1 - AC_CHECK_SIZEOF(long long) -fi - +AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(long) if test "x${ac_cv_sizeof_void_p}" = "x8"; then host64=true - if test "x${ac_cv_sizeof_long}" = "x8"; then +fi + +if test "x${ac_cv_sizeof_long}" = "x8"; then BFD_HOST_64BIT_LONG=1 test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long" test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long" - elif test "x${ac_cv_sizeof_long_long}" = "x8"; then - BFD_HOST_64BIT_LONG_LONG=1 - test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" - test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" - BFD_HOSTPTR_T="unsigned long long" - fi elif test "x${ac_cv_sizeof_long_long}" = "x8"; then + BFD_HOST_64BIT_LONG_LONG=1 test -n "${HOST_64BIT_TYPE}" || HOST_64BIT_TYPE="long long" test -n "${HOST_U_64BIT_TYPE}" || HOST_U_64BIT_TYPE="unsigned long long" + if test "x${ac_cv_sizeof_void_p}" = "x8"; then + BFD_HOSTPTR_T="unsigned long long" + fi fi if test -n "${HOST_64BIT_TYPE}" -a -n "${HOST_U_64BIT_TYPE}"; then @@ -151,7 +189,6 @@ fi AC_SUBST(BFD_HOST_64BIT_LONG) AC_SUBST(BFD_HOST_64BIT_LONG_LONG) -AC_SUBST(BFD_HOST_LONG_LONG) AC_SUBST(BFD_HOST_64_BIT_DEFINED) AC_SUBST(BFD_HOST_64_BIT) AC_SUBST(BFD_HOST_U_64_BIT) @@ -159,13 +196,13 @@ AC_SUBST(BFD_HOSTPTR_T) 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) +AC_CHECK_HEADERS(alloca.h stddef.h string.h strings.h stdlib.h time.h unistd.h) +AC_CHECK_HEADERS(fcntl.h sys/file.h sys/time.h sys/stat.h) GCC_HEADER_STDINT(bfd_stdint.h) AC_HEADER_TIME AC_HEADER_DIRENT ACX_HEADER_STRING -AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid) +AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno) AC_CHECK_FUNCS(strtoull) AC_CHECK_DECLS(basename) @@ -186,6 +223,10 @@ AC_CHECK_DECLS(strstr) AC_CHECK_DECLS(snprintf) AC_CHECK_DECLS(vsnprintf) +# Link in zlib if we can. This allows us to read compressed debug sections. +# This is used only by compress.c. +AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)]) + # If we are configured native, pick a core file support file. COREFILE= COREFLAG= @@ -364,7 +405,9 @@ changequote([,])dnl rs6000-*-lynx*) COREFILE=lynx-core.lo ;; - rs6000-*-aix5.* | powerpc-*-aix5.*) +changequote(,)dnl + rs6000-*-aix[5-9].* | powerpc-*-aix[5-9].*) +changequote([,])dnl COREFILE=rs6000-core.lo COREFLAG="$COREFLAG -DAIX_5_CORE -DAIX_CORE_DUMPX_CORE" ;; @@ -467,39 +510,53 @@ if test -n "$TRAD_HEADER"; then [Name of host specific header file to include in trad-core.c.]) fi -# Horrible hacks to build DLLs on Windows. -WIN32LDFLAGS= -WIN32LIBADD= -case "${host}" in -*-*-cygwin*) - if test "$enable_shared" = "yes"; then - WIN32LDFLAGS="-no-undefined" - WIN32LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32" - fi - ;; -*-*-linux*) - # We borrow WIN32LIBADD so that the shared libbfd won't depend on - # libiberty.a. - case "${host}" in - mips*-*-linux*) - # Linux/MIPS uses PIC by default. - if test "$enable_shared" = "yes"; then - WIN32LIBADD="-L../libiberty -liberty" - fi - ;; - *) +# Check if linker supports --as-needed and --no-as-needed options +AC_CACHE_CHECK(linker --as-needed support, bfd_cv_ld_as_needed, + [bfd_cv_ld_as_needed=no + if $LD --help 2>/dev/null | grep as-needed > /dev/null; then + bfd_cv_ld_as_needed=yes + fi + ]) + +LT_LIB_M + +# When building a shared libbfd, link against the pic version of libiberty +# so that apps that use libbfd won't need libiberty just to satisfy any +# libbfd references. +# We can't do that if a pic libiberty is unavailable since including non-pic +# code would insert text relocations into libbfd. +SHARED_LIBADD= +SHARED_LDFLAGS= +if test "$enable_shared" = "yes"; then changequote(,)dnl - x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'` + x=`sed -n -e 's/^[ ]*PICFLAG[ ]*=[ ]*//p' < ../libiberty/Makefile | sed -n '$p'` changequote([,])dnl - if test -n "$x"; then - WIN32LIBADD="-L../libiberty/pic -liberty" - fi + if test -n "$x"; then + SHARED_LIBADD="-L`pwd`/../libiberty/pic -liberty" + fi + +# More hacks to build DLLs on Windows. + case "${host}" in + *-*-cygwin*) + SHARED_LDFLAGS="-no-undefined" + SHARED_LIBADD="-L`pwd`/../libiberty -liberty -L`pwd`/../intl -lintl -lcygwin -lkernel32" ;; esac - ;; -esac -AC_SUBST(WIN32LDFLAGS) -AC_SUBST(WIN32LIBADD) + + if test -n "$SHARED_LIBADD"; then + if test -n "$LIBM"; then + if test x"$bfd_cv_ld_as_needed" = xyes; then + # Link against libm only when needed. Put -lc, -lm inside -Wl + # to stop libtool reordering these options. + SHARED_LIBADD="$SHARED_LIBADD -Wl,-lc,--as-needed,`echo $LIBM | sed 's/ /,/g'`,--no-as-needed" + else + SHARED_LIBADD="$SHARED_LIBADD $LIBM" + fi + fi + fi +fi +AC_SUBST(SHARED_LDFLAGS) +AC_SUBST(SHARED_LIBADD) # target stuff: @@ -582,7 +639,8 @@ selarchs="$f" # Target backend .o files. tb= -elf="elf.lo elflink.lo elf-attrs.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 @@ -614,9 +672,7 @@ do armpei_little_vec) tb="$tb pei-arm.lo peigen.lo cofflink.lo " ;; 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_pei_ia64_vec) tb="$tb pei-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" ;; bfd_elf32_bfin_vec) tb="$tb elf32-bfin.lo elf32.lo $elf" ;; @@ -637,20 +693,21 @@ do bfd_elf32_crx_vec) tb="$tb elf32-crx.lo elf32.lo $elf" ;; bfd_elf32_d10v_vec) tb="$tb elf32-d10v.lo elf32.lo $elf" ;; bfd_elf32_d30v_vec) tb="$tb elf32-d30v.lo elf32.lo $elf" ;; - bfd_elf32_i386_dragonfly_vec) - tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; bfd_elf32_dlx_big_vec) tb="$tb elf32-dlx.lo elf32.lo $elf" ;; bfd_elf32_fr30_vec) tb="$tb elf32-fr30.lo elf32.lo $elf" ;; bfd_elf32_frv_vec) tb="$tb elf32-frv.lo elf32.lo $elf" ;; bfd_elf32_frvfdpic_vec) tb="$tb elf32-frv.lo elf32.lo $elf" ;; + bfd_elf32_moxie_vec) tb="$tb elf32-moxie.lo elf32.lo $elf" ;; bfd_elf32_h8300_vec) tb="$tb elf32-h8300.lo elf32.lo $elf" ;; bfd_elf32_hppa_linux_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_hppa_nbsd_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_hppa_vec) tb="$tb elf32-hppa.lo elf32.lo $elf" ;; bfd_elf32_i370_vec) tb="$tb elf32-i370.lo elf32.lo $elf" ;; - bfd_elf32_i386_freebsd_vec) tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; - bfd_elf32_i386_vxworks_vec) tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; - bfd_elf32_i386_vec) tb="$tb elf32-i386.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_dragonfly_vec) + tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_freebsd_vec) tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_vxworks_vec) tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_i386_vec) tb="$tb elf32-i386.lo elf-ifunc.lo elf-vxworks.lo elf32.lo $elf" ;; bfd_elf32_i860_little_vec) tb="$tb elf32-i860.lo elf32.lo $elf" ;; bfd_elf32_i860_vec) tb="$tb elf32-i860.lo elf32.lo $elf" ;; bfd_elf32_i960_vec) tb="$tb elf32-i960.lo elf32.lo $elf" ;; @@ -658,6 +715,8 @@ do bfd_elf32_ia64_hpux_big_vec) tb="$tb elf32-ia64.lo elf32.lo $elf";; bfd_elf32_ip2k_vec) tb="$tb elf32-ip2k.lo elf32.lo $elf" ;; bfd_elf32_iq2000_vec) tb="$tb elf32-iq2000.lo elf32.lo $elf" ;; + bfd_elf32_lm32_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; + bfd_elf32_lm32fdpic_vec) tb="$tb elf32-lm32.lo elf32.lo $elf" ;; bfd_elf32_little_generic_vec) tb="$tb elf32-gen.lo elf32.lo $elf" ;; bfd_elf32_littlearc_vec) tb="$tb elf32-arc.lo elf32.lo $elf" ;; bfd_elf32_littlearm_symbian_vec) @@ -681,6 +740,7 @@ do 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_microblaze_vec) tb="$tb elf32-microblaze.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" ;; @@ -697,8 +757,8 @@ 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" ;; + bfd_elf32_bigscore_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64;; + bfd_elf32_littlescore_vec) tb="$tb elf32-score.lo elf32-score7.lo elf32.lo $elf"; want64=true; target_size=64;; # 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. @@ -738,6 +798,7 @@ do bfd_elf64_ia64_big_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_ia64_hpux_big_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_ia64_little_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_ia64_vms_vec) tb="$tb elf64-ia64.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_little_generic_vec) tb="$tb elf64-gen.lo elf64.lo $elf"; target_size=64 ;; bfd_elf64_littlemips_vec) tb="$tb elf64-mips.lo elf64.lo elfxx-mips.lo elf-vxworks.lo elf32.lo $elf ecofflink.lo"; target_size=64 ;; bfd_elf64_mmix_vec) tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;; @@ -754,8 +815,10 @@ do 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_elf64_x86_64_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_x86_64_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_l1om_vec) tb="$tb elf64-x86-64.lo elf-ifunc.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_l1om_freebsd_vec) tb="$tb elf64-x86-64.lo elf-ifunc.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" ;; bfd_powerpc_pei_vec) tb="$tb pei-ppc.lo peigen.lo cofflink.lo" ;; @@ -809,6 +872,7 @@ do mach_o_be_vec) tb="$tb mach-o.lo" ;; mach_o_le_vec) tb="$tb mach-o.lo" ;; mach_o_fat_vec) tb="$tb mach-o.lo" ;; + mach_o_i386_vec) tb="$tb mach-o-i386.lo" ;; mcore_pe_big_vec) tb="$tb pe-mcore.lo peigen.lo cofflink.lo" ;; mcore_pe_little_vec) tb="$tb pe-mcore.lo peigen.lo cofflink.lo" ;; mcore_pei_big_vec) tb="$tb pei-mcore.lo peigen.lo cofflink.lo" ;; @@ -826,6 +890,7 @@ do pef_vec) tb="$tb pef.lo" ;; pef_xlib_vec) tb="$tb pef.lo" ;; pdp11_aout_vec) tb="$tb pdp11.lo" ;; + plugin_vec) tb="$tb plugin.lo" ;; pmac_xcoff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;; ppcboot_vec) tb="$tb ppcboot.lo" ;; riscix_vec) tb="$tb aout32.lo riscix.lo" ;; @@ -973,6 +1038,13 @@ AC_SUBST(bfd_backends) AC_SUBST(bfd_machines) AC_SUBST(bfd_default_target_size) +if test "$plugins" = "yes"; then + supports_plugins=1 +else + supports_plugins=0 +fi +AC_SUBST(supports_plugins) + # Determine the host dependant file_ptr a.k.a. off_t type. In order # prefer: off64_t - if ftello64 and fseeko64, off_t - if ftello and # fseeko, long. This assumes that sizeof off_t is .ge. sizeof long. @@ -1035,10 +1107,11 @@ sed -e '/SRC-POTFILES =/r po/SRC-POTFILES' \ -e "s,@GMOFILES@,$GMOFILES," \ po/Makefile.in > po/Makefile]],[[]]) -dnl Required by html and install-html +dnl Required by html, pdf, install-pdf and install-html AC_SUBST(datarootdir) AC_SUBST(docdir) AC_SUBST(htmldir) +AC_SUBST(pdfdir) AC_OUTPUT diff --git a/bfd/cpu-alpha.c b/bfd/cpu-alpha.c index 7eaeb33..9456b65 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, 2007 + Copyright 1992, 1993, 1998, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-arc.c b/bfd/cpu-arc.c index ca41998..820c948 100644 --- a/bfd/cpu-arc.c +++ b/bfd/cpu-arc.c @@ -1,5 +1,5 @@ /* BFD support for the ARC processor - Copyright 1994, 1995, 1997, 2001, 2002, 2007 + Copyright 1994, 1995, 1997, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by Doug Evans (dje@cygnus.com). diff --git a/bfd/cpu-arm.c b/bfd/cpu-arm.c index ceb9111..61d4bbd 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, 2007 + Copyright 1994, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) @@ -187,7 +187,7 @@ bfd_arm_merge_machines (bfd *ibfd, bfd *obfd) || out == bfd_mach_arm_iWMMXt2)) { _bfd_error_handler (_("\ -ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"), +error: %B is compiled for the EP9312, whereas %B is compiled for XScale"), ibfd, obfd); bfd_set_error (bfd_error_wrong_format); return FALSE; @@ -198,7 +198,7 @@ ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"), || in == bfd_mach_arm_iWMMXt2)) { _bfd_error_handler (_("\ -ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale"), +error: %B is compiled for the EP9312, whereas %B is compiled for XScale"), obfd, ibfd); bfd_set_error (bfd_error_wrong_format); return FALSE; diff --git a/bfd/cpu-avr.c b/bfd/cpu-avr.c index 51472a3..9e62ab4 100644 --- a/bfd/cpu-avr.c +++ b/bfd/cpu-avr.c @@ -1,5 +1,6 @@ /* BFD library support routines for the AVR architecture. - Copyright 1999, 2000, 2002, 2006, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2002, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. Contributed by Denis Chertykov This file is part of BFD, the Binary File Descriptor library. @@ -35,20 +36,50 @@ compatible (const bfd_arch_info_type * a, if (a->arch != b->arch) return NULL; - /* Special case for ATmega[16]03 (avr:3) and ATmega83 (avr:4). */ - if ((a->mach == bfd_mach_avr3 && b->mach == bfd_mach_avr4) - || (a->mach == bfd_mach_avr4 && b->mach == bfd_mach_avr3)) + if (a->mach == b->mach) + return a; + + /* avr-6 is compatible only with itself as its call convention is not + compatible with other avr (the mcu saves the return address on 3 bytes + instead of 2). */ + if (a->mach == bfd_mach_avr6 || b->mach == bfd_mach_avr6) return NULL; - /* So far all newer AVR architecture cores are supersets of previous - cores. */ - if (a->mach <= b->mach) + if (a->mach < bfd_mach_avr6 && b->mach < bfd_mach_avr6) + { + /* Special case for ATmega[16]03 (avr:3) and ATmega83 (avr:4). */ + if ((a->mach == bfd_mach_avr3 && b->mach == bfd_mach_avr4) + || (a->mach == bfd_mach_avr4 && b->mach == bfd_mach_avr3)) + return NULL; + + if (a->mach <= b->mach) + return b; + + if (a->mach >= b->mach) + return a; + } + + if (a->mach == bfd_mach_avr2 && b->mach == bfd_mach_avr25) + return a; + if (a->mach == bfd_mach_avr25 && b->mach == bfd_mach_avr2) + return b; + + if (a->mach == bfd_mach_avr3 && b->mach == bfd_mach_avr31) + return a; + if (a->mach == bfd_mach_avr31 && b->mach == bfd_mach_avr3) return b; - if (a->mach >= b->mach) + if (a->mach == bfd_mach_avr3 && b->mach == bfd_mach_avr35) return a; + if (a->mach == bfd_mach_avr35 && b->mach == bfd_mach_avr3) + return b; + + if (a->mach == bfd_mach_avr5 && b->mach == bfd_mach_avr51) + return a; + if (a->mach == bfd_mach_avr51 && b->mach == bfd_mach_avr5) + return b; + - /* Never reached! */ return NULL; } @@ -70,22 +101,38 @@ compatible (const bfd_arch_info_type * a, static const bfd_arch_info_type arch_info_struct[] = { - /* AT90S1200, ATtiny1x, ATtiny28. */ + /* Assembler only. */ N (16, bfd_mach_avr1, "avr:1", FALSE, & arch_info_struct[1]), - /* AT90S2xxx, AT90S4xxx, AT90S8xxx, ATtiny22. */ + /* Classic, <= 8K. */ N (16, bfd_mach_avr2, "avr:2", FALSE, & arch_info_struct[2]), - /* ATmega103, ATmega603. */ - N (22, bfd_mach_avr3, "avr:3", FALSE, & arch_info_struct[3]), + /* Classic + MOVW, <= 8K. */ + N (16, bfd_mach_avr25, "avr:25", FALSE, & arch_info_struct[3]), + + /* Classic, > 8K, <= 64K. */ + /* TODO: addr_bits should be 16, but set to 22 for some following + version of GCC (from 4.3) for backward compatibility. */ + N (22, bfd_mach_avr3, "avr:3", FALSE, & arch_info_struct[4]), + + /* Classic, == 128K. */ + N (22, bfd_mach_avr31, "avr:31", FALSE, & arch_info_struct[5]), + + /* Classic + MOVW + JMP/CALL, > 8K, <= 64K. */ + N (16, bfd_mach_avr35, "avr:35", FALSE, & arch_info_struct[6]), - /* ATmega83, ATmega85. */ - N (16, bfd_mach_avr4, "avr:4", FALSE, & arch_info_struct[4]), + /* Enhanced, <= 8K. */ + N (16, bfd_mach_avr4, "avr:4", FALSE, & arch_info_struct[7]), - /* ATmega161, ATmega163, ATmega32, AT94K. */ - N (22, bfd_mach_avr5, "avr:5", FALSE, & arch_info_struct[5]), + /* Enhanced, > 8K, <= 64K. */ + /* TODO: addr_bits should be 16, but set to 22 for some following + version of GCC (from 4.3) for backward compatibility. */ + N (22, bfd_mach_avr5, "avr:5", FALSE, & arch_info_struct[8]), + + /* Enhanced, == 128K. */ + N (22, bfd_mach_avr51, "avr:51", FALSE, & arch_info_struct[9]), - /* ATmega256x. */ + /* 3-Byte PC. */ N (22, bfd_mach_avr6, "avr:6", FALSE, NULL) }; diff --git a/bfd/cpu-cr16c.c b/bfd/cpu-cr16c.c index d6162f4..e8ee1db 100644 --- a/bfd/cpu-cr16c.c +++ b/bfd/cpu-cr16c.c @@ -1,5 +1,5 @@ /* BFD support for the CR16C processor. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-crx.c b/bfd/cpu-crx.c index 49b1cb2..3201c3c 100644 --- a/bfd/cpu-crx.c +++ b/bfd/cpu-crx.c @@ -1,5 +1,5 @@ /* BFD support for the CRX processor. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-dlx.c b/bfd/cpu-dlx.c index 8d6eee1..fda48dc 100644 --- a/bfd/cpu-dlx.c +++ b/bfd/cpu-dlx.c @@ -1,5 +1,5 @@ /* BFD support for the DLX Microprocessor architecture. - Copyright 2002, 2007 Free Software Foundation, Inc. + Copyright 2002, 2005, 2007 Free Software Foundation, Inc. Hacked by Kuang Hwa Lin This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-fr30.c b/bfd/cpu-fr30.c index da3f97d..b60e43e 100644 --- a/bfd/cpu-fr30.c +++ b/bfd/cpu-fr30.c @@ -1,5 +1,5 @@ /* BFD support for the FR30 processor. - Copyright 1998, 2002, 2007 Free Software Foundation, Inc. + Copyright 1998, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-frv.c b/bfd/cpu-frv.c index 41e7014..fd2aedb 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, 2007 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. diff --git a/bfd/cpu-h8300.c b/bfd/cpu-h8300.c index 6b581a4..0fd77d6 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, 2007 Free Software Foundation, Inc. + 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. diff --git a/bfd/cpu-hppa.c b/bfd/cpu-hppa.c index 3440310..034e321 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, 2007 + Copyright 1992, 1995, 1998, 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-i386.c b/bfd/cpu-i386.c index 4001a05..44cca9d 100644 --- a/bfd/cpu-i386.c +++ b/bfd/cpu-i386.c @@ -1,5 +1,6 @@ /* BFD support for the Intel 386 architecture. - Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2007 + Copyright 1992, 1994, 1995, 1996, 1998, 2000, 2001, 2002, 2004, 2005, + 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -23,7 +24,7 @@ #include "bfd.h" #include "libbfd.h" -const bfd_arch_info_type bfd_x86_64_arch_intel_syntax = +static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax = { 64, /* 64 bits in a word */ 64, /* 64 bits in an address */ @@ -39,7 +40,7 @@ const bfd_arch_info_type bfd_x86_64_arch_intel_syntax = 0 }; -const bfd_arch_info_type bfd_i386_arch_intel_syntax = +static const bfd_arch_info_type bfd_i386_arch_intel_syntax = { 32, /* 32 bits in a word */ 32, /* 32 bits in an address */ @@ -55,7 +56,7 @@ const bfd_arch_info_type bfd_i386_arch_intel_syntax = &bfd_x86_64_arch_intel_syntax }; -const bfd_arch_info_type i8086_arch = +static const bfd_arch_info_type i8086_arch = { 32, /* 32 bits in a word */ 32, /* 32 bits in an address (well, not really) */ @@ -71,10 +72,10 @@ const bfd_arch_info_type i8086_arch = &bfd_i386_arch_intel_syntax }; -const bfd_arch_info_type bfd_x86_64_arch = +static const bfd_arch_info_type bfd_x86_64_arch = { - 64, /* 32 bits in a word */ - 64, /* 32 bits in an address */ + 64, /* 64 bits in a word */ + 64, /* 64 bits in an address */ 8, /* 8 bits in a byte */ bfd_arch_i386, bfd_mach_x86_64, diff --git a/bfd/cpu-i860.c b/bfd/cpu-i860.c index 33258cf..ae9ebcd 100644 --- a/bfd/cpu-i860.c +++ b/bfd/cpu-i860.c @@ -1,5 +1,5 @@ /* BFD support for the Intel 860 architecture. - Copyright 1992, 1995, 2000, 2002, 2007 + Copyright 1992, 1995, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. Created mostly by substituting "860" for "386" in cpu-i386.c Harry Dolan , October 1995 diff --git a/bfd/cpu-i960.c b/bfd/cpu-i960.c index a6c8eb2..c7d9231 100644 --- a/bfd/cpu-i960.c +++ b/bfd/cpu-i960.c @@ -1,5 +1,5 @@ /* BFD library support routines for the i960 architecture. - Copyright 1990, 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2006, + Copyright 1990, 1991, 1993, 1994, 1996, 1999, 2000, 2001, 2002, 2005, 2006, 2007 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. diff --git a/bfd/cpu-ia64-opc.c b/bfd/cpu-ia64-opc.c index 10dc2aa..b797e44 100644 --- a/bfd/cpu-ia64-opc.c +++ b/bfd/cpu-ia64-opc.c @@ -1,4 +1,4 @@ -/* Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 +/* Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by David Mosberger-Tang @@ -81,19 +81,19 @@ ext_reg (const struct ia64_operand *self, ia64_insn code, ia64_insn *valuep) static const char* ins_immu (const struct ia64_operand *self, ia64_insn value, ia64_insn *code) { - ia64_insn new = 0; + ia64_insn new_insn = 0; int i; for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i) { - new |= ((value & ((((ia64_insn) 1) << self->field[i].bits) - 1)) - << self->field[i].shift); + new_insn |= ((value & ((((ia64_insn) 1) << self->field[i].bits) - 1)) + << self->field[i].shift); value >>= self->field[i].bits; } if (value) return "integer operand out of range"; - *code |= new; + *code |= new_insn; return 0; } @@ -163,22 +163,22 @@ ins_imms_scaled (const struct ia64_operand *self, ia64_insn value, ia64_insn *code, int scale) { BFD_HOST_64_BIT svalue = value, sign_bit = 0; - ia64_insn new = 0; + ia64_insn new_insn = 0; int i; svalue >>= scale; for (i = 0; i < NELEMS (self->field) && self->field[i].bits; ++i) { - new |= ((svalue & ((((ia64_insn) 1) << self->field[i].bits) - 1)) - << self->field[i].shift); + new_insn |= ((svalue & ((((ia64_insn) 1) << self->field[i].bits) - 1)) + << self->field[i].shift); sign_bit = (svalue >> (self->field[i].bits - 1)) & 1; svalue >>= self->field[i].bits; } if ((!sign_bit && svalue != 0) || (sign_bit && svalue != -1)) return "integer operand out of range"; - *code |= new; + *code |= new_insn; return 0; } diff --git a/bfd/cpu-ia64.c b/bfd/cpu-ia64.c index c4793c9..c97de1a 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, 2007 Free Software Foundation, Inc. + Copyright 1998, 1999, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-ip2k.c b/bfd/cpu-ip2k.c index 266d532..0b959bd 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, 2007 Free Software Foundation, Inc. + Copyright 2000, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-iq2000.c b/bfd/cpu-iq2000.c index 837ffad..72d8363 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, 2007 Free Software Foundation, Inc. + Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-l1om.c b/bfd/cpu-l1om.c new file mode 100644 index 0000000..c1057c4 --- /dev/null +++ b/bfd/cpu-l1om.c @@ -0,0 +1,56 @@ +/* BFD support for the Intel L1OM architecture. + Copyright 2009 + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" + +static const bfd_arch_info_type bfd_l1om_arch_intel_syntax = +{ + 64, /* 64 bits in a word */ + 64, /* 64 bits in an address */ + 8, /* 8 bits in a byte */ + bfd_arch_l1om, + bfd_mach_l1om_intel_syntax, + "l1om:intel", + "l1om:intel", + 3, + TRUE, + bfd_default_compatible, + bfd_default_scan, + 0 +}; + +const bfd_arch_info_type bfd_l1om_arch = +{ + 64, /* 64 bits in a word */ + 64, /* 64 bits in an address */ + 8, /* 8 bits in a byte */ + bfd_arch_l1om, + bfd_mach_l1om, + "l1om", + "l1om", + 3, + TRUE, + bfd_default_compatible, + bfd_default_scan, + &bfd_l1om_arch_intel_syntax +}; diff --git a/bfd/cpu-lm32.c b/bfd/cpu-lm32.c new file mode 100644 index 0000000..227612f --- /dev/null +++ b/bfd/cpu-lm32.c @@ -0,0 +1,41 @@ +/* BFD support for the Lattice Mico32 architecture. + Copyright 2008 Free Software Foundation, Inc. + Contributed by Jon Beniston + + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" + +const bfd_arch_info_type bfd_lm32_arch = +{ + 32, /* Bits in word. */ + 32, /* Bits in address. */ + 8, /* Bits in byte. */ + bfd_arch_lm32, /* Enum bfd_architecture. */ + bfd_mach_lm32, /* Machine number. */ + "lm32", /* Architecture name. */ + "lm32", /* Printable name. */ + 4, /* Alignment. */ + TRUE, /* Is this the default machine for the target. */ + bfd_default_compatible, /* Function callback to test if two files have compatible machines. */ + bfd_default_scan, + NULL /* Next. */ +}; + diff --git a/bfd/cpu-m10200.c b/bfd/cpu-m10200.c index 1f17b23..218891d 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, 2007 Free Software Foundation, Inc. + Copyright 1996, 1997, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-m10300.c b/bfd/cpu-m10300.c index aee42b6..7f89665 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, 2007 + Copyright 1996, 1997, 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-m32c.c b/bfd/cpu-m32c.c index 729c32d..aa2e28d 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, 2007 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-m32r.c b/bfd/cpu-m32r.c index e1409cd..8180d6c 100644 --- a/bfd/cpu-m32r.c +++ b/bfd/cpu-m32r.c @@ -1,5 +1,5 @@ /* BFD support for the M32R processor. - Copyright 1996, 1999, 2000, 2002, 2003, 2007 + Copyright 1996, 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-m68hc11.c b/bfd/cpu-m68hc11.c index 3c283cf..313d820 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, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-m68hc12.c b/bfd/cpu-m68hc12.c index d40f6be..2a115b9 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, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-m68k.c b/bfd/cpu-m68k.c index e239988..ec9bccd 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -83,19 +83,25 @@ static const bfd_arch_info_type arch_info_struct[] = FALSE, &arch_info_struct[27]), N(bfd_mach_mcf_isa_c_emac, "m68k:isa-c:emac", FALSE, &arch_info_struct[28]), + N(bfd_mach_mcf_isa_c_nodiv, "m68k:isa-c:nodiv", + FALSE, &arch_info_struct[29]), + N(bfd_mach_mcf_isa_c_nodiv_mac, "m68k:isa-c:nodiv:mac", + FALSE, &arch_info_struct[30]), + N(bfd_mach_mcf_isa_c_nodiv_emac, "m68k:isa-c:nodiv:emac", + FALSE, &arch_info_struct[31]), /* Legacy names for CF architectures */ - 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_a_nodiv, "m68k:5200", FALSE, &arch_info_struct[32]), + N(bfd_mach_mcf_isa_a_mac,"m68k:5206e", FALSE, &arch_info_struct[33]), + N(bfd_mach_mcf_isa_a_mac, "m68k:5307", FALSE, &arch_info_struct[34]), + N(bfd_mach_mcf_isa_b_nousp_mac, "m68k:5407", FALSE, &arch_info_struct[35]), + N(bfd_mach_mcf_isa_aplus_emac, "m68k:528x", FALSE, &arch_info_struct[36]), + N(bfd_mach_mcf_isa_aplus_emac, "m68k:521x", FALSE, &arch_info_struct[37]), + N(bfd_mach_mcf_isa_a_emac, "m68k:5249", FALSE, &arch_info_struct[38]), N(bfd_mach_mcf_isa_b_float_emac, "m68k:547x", - FALSE, &arch_info_struct[36]), + FALSE, &arch_info_struct[39]), N(bfd_mach_mcf_isa_b_float_emac, "m68k:548x", - FALSE, &arch_info_struct[37]), + FALSE, &arch_info_struct[40]), N(bfd_mach_mcf_isa_b_float_emac, "m68k:cfv4e", FALSE, 0), }; @@ -135,6 +141,9 @@ static const unsigned m68k_arch_features[] = mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp, mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp|mcfmac, mcfisa_a|mcfhwdiv|mcfisa_c|mcfusp|mcfemac, + mcfisa_a|mcfisa_c|mcfusp, + mcfisa_a|mcfisa_c|mcfusp|mcfmac, + mcfisa_a|mcfisa_c|mcfusp|mcfemac, }; /* Return the count of bits set in MASK */ diff --git a/bfd/cpu-m88k.c b/bfd/cpu-m88k.c index caefe6e..7e7c18d 100644 --- a/bfd/cpu-m88k.c +++ b/bfd/cpu-m88k.c @@ -1,5 +1,5 @@ /* bfd back-end for m88k support - Copyright 1990, 1991, 1994, 2000, 2002, 2007 + Copyright 1990, 1991, 1994, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. diff --git a/bfd/cpu-mcore.c b/bfd/cpu-mcore.c index fc41259..c01dd10 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, 2007 Free Software Foundation, Inc. + Copyright 1993, 1999, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-mep.c b/bfd/cpu-mep.c index a161764..7ac871f 100644 --- a/bfd/cpu-mep.c +++ b/bfd/cpu-mep.c @@ -1,5 +1,5 @@ /* BFD support for the Toshiba Media Engine Processor. - Copyright (C) 2001, 2002, 2004, 2007 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2004, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -24,5 +24,6 @@ #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); +static const bfd_arch_info_type bfd_c5_arch = MA (bfd_mach_mep_c5, "c5", FALSE, NULL); +static const bfd_arch_info_type bfd_h1_arch = MA (bfd_mach_mep_h1, "h1", FALSE, & bfd_c5_arch); const bfd_arch_info_type bfd_mep_arch = MA (bfd_mach_mep, "mep", TRUE, & bfd_h1_arch); diff --git a/bfd/cpu-microblaze.c b/bfd/cpu-microblaze.c new file mode 100644 index 0000000..45a4a2b --- /dev/null +++ b/bfd/cpu-microblaze.c @@ -0,0 +1,40 @@ +/* BFD Xilinx MicroBlaze architecture definition + + Copyright 2009 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" + +const bfd_arch_info_type bfd_microblaze_arch = +{ + 32, /* 32 bits in a word. */ + 32, /* 32 bits in an address. */ + 8, /* 8 bits in a byte. */ + bfd_arch_microblaze, /* Architecture. */ + 0, /* Machine number - 0 for now. */ + "microblaze", /* Architecture name. */ + "MicroBlaze", /* Printable name. */ + 3, /* Section align power. */ + TRUE, /* Is this the default architecture ? */ + bfd_default_compatible, /* Architecture comparison function. */ + bfd_default_scan, /* String to architecture conversion. */ + NULL /* Next in list. */ +}; diff --git a/bfd/cpu-mips.c b/bfd/cpu-mips.c index dbd620a..c0f532f 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, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -80,6 +80,8 @@ enum I_mips9000, I_mips10000, I_mips12000, + I_mips14000, + I_mips16000, I_mips16, I_mips5, I_mipsisa32, @@ -87,6 +89,10 @@ enum I_mipsisa64, I_mipsisa64r2, I_sb1, + I_loongson_2e, + I_loongson_2f, + I_mipsocteon, + I_xlr }; #define NN(index) (&arch_info_struct[(index) + 1]) @@ -113,13 +119,19 @@ static const bfd_arch_info_type arch_info_struct[] = N (64, 64, bfd_mach_mips9000, "mips:9000", FALSE, NN(I_mips9000)), N (64, 64, bfd_mach_mips10000,"mips:10000", FALSE, NN(I_mips10000)), N (64, 64, bfd_mach_mips12000,"mips:12000", FALSE, NN(I_mips12000)), + N (64, 64, bfd_mach_mips14000,"mips:14000", FALSE, NN(I_mips14000)), + N (64, 64, bfd_mach_mips16000,"mips:16000", FALSE, NN(I_mips16000)), N (64, 64, bfd_mach_mips16, "mips:16", FALSE, NN(I_mips16)), N (64, 64, bfd_mach_mips5, "mips:mips5", FALSE, NN(I_mips5)), N (32, 32, bfd_mach_mipsisa32, "mips:isa32", FALSE, NN(I_mipsisa32)), N (32, 32, bfd_mach_mipsisa32r2,"mips:isa32r2", FALSE, NN(I_mipsisa32r2)), N (64, 64, bfd_mach_mipsisa64, "mips:isa64", FALSE, NN(I_mipsisa64)), N (64, 64, bfd_mach_mipsisa64r2,"mips:isa64r2", FALSE, NN(I_mipsisa64r2)), - N (64, 64, bfd_mach_mips_sb1, "mips:sb1", FALSE, 0), + N (64, 64, bfd_mach_mips_sb1, "mips:sb1", FALSE, NN(I_sb1)), + N (64, 64, bfd_mach_mips_loongson_2e, "mips:loongson_2e", FALSE, NN(I_loongson_2e)), + N (64, 64, bfd_mach_mips_loongson_2f, "mips:loongson_2f", FALSE, NN(I_loongson_2f)), + N (64, 64, bfd_mach_mips_octeon,"mips:octeon", FALSE, NN(I_mipsocteon)), + N (64, 64, bfd_mach_mips_xlr, "mips:xlr", FALSE, 0) }; /* The default architecture is mips:3000, but with a machine number of diff --git a/bfd/cpu-mmix.c b/bfd/cpu-mmix.c index 4296f98..6cf8753 100644 --- a/bfd/cpu-mmix.c +++ b/bfd/cpu-mmix.c @@ -1,5 +1,5 @@ /* BFD library support routines for MMIX. - Copyright 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by Hans-Peter Nilsson (hp@bitrange.com) This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-moxie.c b/bfd/cpu-moxie.c new file mode 100644 index 0000000..39debbc --- /dev/null +++ b/bfd/cpu-moxie.c @@ -0,0 +1,40 @@ +/* BFD support for the moxie processor. + Copyright 2009 Free Software Foundation, Inc. + Written by Anthony Green + + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" + + +const bfd_arch_info_type bfd_moxie_arch = + { + 32, /* 32 bits in a word. */ + 32, /* 32 bits in an address. */ + 8, /* 8 bits in a byte. */ + bfd_arch_moxie, /* enum bfd_architecture arch. */ + bfd_mach_moxie, + "moxie", /* Arch name. */ + "moxie", /* Printable name. */ + 2, /* Unsigned int section alignment power. */ + TRUE, /* The one and only. */ + bfd_default_compatible, + bfd_default_scan , + 0, + }; diff --git a/bfd/cpu-msp430.c b/bfd/cpu-msp430.c index df83f71..63c301a 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, 2007 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by Dmitry Diky This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-openrisc.c b/bfd/cpu-openrisc.c index fee0a0a..a430349 100644 --- a/bfd/cpu-openrisc.c +++ b/bfd/cpu-openrisc.c @@ -1,5 +1,5 @@ /* BFD support for the OpenRISC architecture. - Copyright 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by Johan Rydberg, jrydberg@opencores.org This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-or32.c b/bfd/cpu-or32.c index 33b68ce..b9803ed 100644 --- a/bfd/cpu-or32.c +++ b/bfd/cpu-or32.c @@ -1,5 +1,5 @@ /* BFD support for the OpenRISC 1000 architecture. - Copyright 2002, 2007 Free Software Foundation, Inc. + Copyright 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by Ivan Guzvinec This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-pdp11.c b/bfd/cpu-pdp11.c index 5172d17..3147f56 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, 2007 Free Software Foundation, Inc. + Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-pj.c b/bfd/cpu-pj.c index a553673..bb5c85b 100644 --- a/bfd/cpu-pj.c +++ b/bfd/cpu-pj.c @@ -1,5 +1,6 @@ /* BFD library support routines for the Pico Java architecture. - Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2005, 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. diff --git a/bfd/efi-app-x86_64.c b/bfd/cpu-plugin.c similarity index 64% rename from bfd/efi-app-x86_64.c rename to bfd/cpu-plugin.c index 5d60cdf..f0f7dbd 100644 --- a/bfd/efi-app-x86_64.c +++ b/bfd/cpu-plugin.c @@ -1,5 +1,6 @@ -/* BFD back-end for Intel64 UEFI application files. - Copyright 2007 Free Software Foundation, Inc. +/* BFD support for plugins. + Copyright 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -20,16 +21,20 @@ #include "sysdep.h" #include "bfd.h" +#include "libbfd.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" +const bfd_arch_info_type bfd_plugin_arch = +{ + 32, /* 32 bits in a word. */ + 32, /* 32 bits in an address. */ + 8, /* 8 bits in a byte. */ + bfd_arch_plugin, + 0, /* Only 1 machine. */ + "plugin", + "plugin", + 3, + TRUE, + bfd_default_compatible, + bfd_default_scan, + 0 +}; diff --git a/bfd/cpu-powerpc.c b/bfd/cpu-powerpc.c index 8222502..0b511f3 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, 2007 + Copyright 1994, 1995, 1996, 2000, 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by Ian Lance Taylor, Cygnus Support. @@ -284,6 +284,20 @@ const bfd_arch_info_type bfd_powerpc_archs[] = bfd_default_scan, &bfd_powerpc_archs[14] }, + { + 32, /* 32 bits in a word */ + 32, /* 32 bits in an address */ + 8, /* 8 bits in a byte */ + bfd_arch_powerpc, + bfd_mach_ppc_e500mc, + "powerpc", + "powerpc:e500mc", + 3, + FALSE, /* not the default */ + powerpc_compatible, + bfd_default_scan, + &bfd_powerpc_archs[15] + }, { 32, /* 32 bits in a word */ 32, /* 32 bits in an address */ @@ -296,7 +310,7 @@ const bfd_arch_info_type bfd_powerpc_archs[] = FALSE, /* not the default */ powerpc_compatible, bfd_default_scan, - &bfd_powerpc_archs[15] + &bfd_powerpc_archs[16] }, { 32, /* 32 bits in a word */ diff --git a/bfd/cpu-rs6000.c b/bfd/cpu-rs6000.c index 834f20d..91d0431 100644 --- a/bfd/cpu-rs6000.c +++ b/bfd/cpu-rs6000.c @@ -1,5 +1,5 @@ /* BFD back-end for rs6000 support - Copyright 1990, 1991, 1993, 1995, 2000, 2002, 2003, 2007 + Copyright 1990, 1991, 1993, 1995, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Written by Mimi Phuong-Thao Vo of IBM and John Gilmore of Cygnus Support. diff --git a/bfd/cpu-s390.c b/bfd/cpu-s390.c index b7fc669..805e825 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, 2007 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by Carl B. Pedersen and Martin Schwidefsky. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-score.c b/bfd/cpu-score.c index 0ccc371..0ed4095 100644 --- a/bfd/cpu-score.c +++ b/bfd/cpu-score.c @@ -1,8 +1,9 @@ /* BFD support for the score processor - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by + Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) - Pei-Lin Tsai (pltsai@sunplus.com) + Pei-Lin Tsai (pltsai@sunplus.com) This file is part of BFD, the Binary File Descriptor library. @@ -21,32 +22,47 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "sysdep.h" #include "bfd.h" +#include "sysdep.h" #include "libbfd.h" -const bfd_arch_info_type -bfd_score_arch = +/* This routine is provided two arch_infos and works out which Score + machine which would be compatible with both and returns a pointer + to its info structure. */ + +static const bfd_arch_info_type * +compatible (const bfd_arch_info_type * a, const bfd_arch_info_type * b) { - 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. */ + /* If a & b are for different architectures we can do nothing. */ + if (a->arch != b->arch) + return NULL; + + if (a->mach != b->mach) + return NULL; + + return a; +} + +#define N(addr_bits, machine, print, default, next) \ +{ \ + 32, /* 16 bits in a word. */ \ + 32, /* Bits in an address. */ \ + 8, /* 8 bits in a byte. */ \ + bfd_arch_score, \ + machine, /* Machine number. */ \ + "score", /* Architecture name. */ \ + print, /* Printable name. */ \ + 4, /* Section align power. */ \ + default, /* The default machine. */ \ + compatible, \ + bfd_default_scan, \ + next \ +} + +static const bfd_arch_info_type arch_info_struct[] = +{ + N (16, bfd_mach_score3, "score3", FALSE, NULL), }; + +const bfd_arch_info_type bfd_score_arch = + N (16, bfd_mach_score7, "score7", TRUE, & arch_info_struct[0]); diff --git a/bfd/cpu-sparc.c b/bfd/cpu-sparc.c index a4144f8..f86ccc5 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, 2007 + Copyright 1992, 1995, 1996, 1998, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-tic30.c b/bfd/cpu-tic30.c index 6587b14..e08cf47 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, 2007 Free Software Foundation, Inc. + Copyright 1998, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-tic4x.c b/bfd/cpu-tic4x.c index ecc094f..bd8b8f4 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, 2007 Free Software Foundation, Inc. + Copyright 1996, 1997, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz) diff --git a/bfd/cpu-tic54x.c b/bfd/cpu-tic54x.c index 03192d2..b7e316c 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, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-tic80.c b/bfd/cpu-tic80.c index fdb5d7e..f030ce1 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, 2007 Free Software Foundation, Inc. + Copyright 1996, 2002, 2005, 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. diff --git a/bfd/cpu-v850.c b/bfd/cpu-v850.c index 319cb04..77ca519 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, 2007 + Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-vax.c b/bfd/cpu-vax.c index 92449ea..c9d9c8d 100644 --- a/bfd/cpu-vax.c +++ b/bfd/cpu-vax.c @@ -1,5 +1,5 @@ /* bfd back-end for vax support - Copyright 1990, 1991, 1994, 2000, 2002, 2007 + Copyright 1990, 1991, 1994, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. diff --git a/bfd/cpu-w65.c b/bfd/cpu-w65.c index b2cf9dc..e5e78d9 100644 --- a/bfd/cpu-w65.c +++ b/bfd/cpu-w65.c @@ -1,5 +1,5 @@ /* BFD library support routines for the WDC 65816 architecture. - Copyright 1995, 1999, 2000, 2001, 2002, 2007 + Copyright 1995, 1999, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. diff --git a/bfd/cpu-we32k.c b/bfd/cpu-we32k.c index f2ceb2a..d93d76a 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, 2007 Free Software Foundation, Inc. + Copyright 1992, 2000, 2002, 2005, 2007 Free Software Foundation, Inc. Contributed by Brendan Kehoe (brendan@cs.widener.edu). This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-xstormy16.c b/bfd/cpu-xstormy16.c index 78f1858..d1c7e56 100644 --- a/bfd/cpu-xstormy16.c +++ b/bfd/cpu-xstormy16.c @@ -1,5 +1,5 @@ /* BFD support for the XSTORMY16 processor. - Copyright 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-xtensa.c b/bfd/cpu-xtensa.c index d639d83..ee3767a 100644 --- a/bfd/cpu-xtensa.c +++ b/bfd/cpu-xtensa.c @@ -1,5 +1,5 @@ /* BFD support for the Xtensa processor. - Copyright 2003, 2007 Free Software Foundation, Inc. + Copyright 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/cpu-z8k.c b/bfd/cpu-z8k.c index 4d2cb39..6e910e9 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, 2007 + Copyright 1992, 1993, 1994, 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Hacked by Steve Chamberlain of Cygnus Support. diff --git a/bfd/demo64.c b/bfd/demo64.c index a9fba1f..36f44a6 100644 --- a/bfd/demo64.c +++ b/bfd/demo64.c @@ -1,5 +1,5 @@ /* BFD backend for demonstration 64-bit a.out binaries. - Copyright 1990, 1991, 1992, 1993, 1994, 2001, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 2001, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. diff --git a/bfd/dep-in.sed b/bfd/dep-in.sed index 2732d6b..2e0a4fb 100644 --- a/bfd/dep-in.sed +++ b/bfd/dep-in.sed @@ -3,7 +3,6 @@ s/\\\n */ /g t loop -s!\.o:!.lo:! s! \./! !g s! @BFD_H@!!g s!@SRCDIR@/../include!$(INCDIR)!g @@ -11,7 +10,7 @@ s!@TOPDIR@/include!$(INCDIR)!g s!@SRCDIR@/../opcodes!$(srcdir)/../opcodes!g s!@TOPDIR@/opcodes!$(srcdir)/../opcodes!g s!@SRCDIR@/!!g -s! hosts/[^ ]*\.h! !g +s! hosts/[^ ]*\.h!!g s! sysdep.h!!g s! \.\./bfd/sysdep.h!!g s! libbfd.h!!g @@ -21,12 +20,9 @@ s! \$(INCDIR)/ansidecl\.h!!g s! \$(INCDIR)/symcat\.h!!g s! \.\./intl/libintl\.h!!g -s/\\\n */ /g - s/ *$// s/ */ /g -s/ *:/:/g -/:$/d - -s/\(.\{50\}[^ ]*\) /\1 \\\ - /g +s/^ */A/ +s/ / \\\ +B/g +$s/$/ \\/ diff --git a/bfd/doc/ChangeLog b/bfd/doc/ChangeLog index 6b96b61..03eca56 100644 --- a/bfd/doc/ChangeLog +++ b/bfd/doc/ChangeLog @@ -1,3 +1,69 @@ +2009-08-29 Martin Thuresson + + * chew.c (newentry, add_intrinsic): Rename variable new to + new_d. + +2009-08-27 Ralf Wildenhues + + * Makefile.in: Regenerate. + +2009-08-22 Ralf Wildenhues + + * Makefile.am (pdf__strip_dir, install-pdf, install-pdf-am) + (html__strip_dir, install-html, install-html-am): Remove. + * Makefile.in: Regenerate. + + * Makefile.in: Regenerate. + +2009-05-22 Alan Modra + + * Makefile.in: Regenerate. + +2009-04-22 Anthony Green + + * bfdint.texi (BFD target vector miscellaneous): Mention verilog + flavour. + +2008-11-19 Nick Clifton + + * fdl.texi: Update to v1.3 + * bfd.texinfo: Change license to v1.3. + +2008-08-24 Alan Modra + + * Makefile.am (chew.o): Delete rule. + ($(MKDOC)): Move options before C file. + * Makefile.in: Regenerate. + +2008-08-15 Alan Modra + + * Makefile.in: Regenerate. + +2008-07-09 Craig Silverstein + + * Makefile.am (BFD_H_DEP): Add ../compress.c. + * Makefile.in: Regenerate. + +2008-05-14 Alan Modra + + * Makefile.in: Regenerate. + +2008-03-17 Ralf Wildenhues + + * Makefile.in: Regenerate. + +2008-03-13 Alan Modra + + * Makefile.in: Regenerate. + +2007-10-15 Alan Modra + + * chew.c (write_buffer): Check fwrite return value. + +2007-09-14 Alan Modra + + * Makefile.in: Regenerate. + 2007-07-02 Alan Modra * Makefile.in: Regenerate. @@ -49,11 +115,11 @@ 2006-05-11 Carlos O'Donell - * bfd.texinfo: Rename "Index" to "BFD Index" + * bfd.texinfo: Rename "Index" to "BFD Index" 2006-04-06 Carlos O'Donell - * Makefile.am: Add install-html and install-html-am targets. + * Makefile.am: Add install-html and install-html-am targets. Define datarootdir, docdir and htmldir. * Makefile.in: Regenerate. @@ -123,7 +189,7 @@ * chew.c: Remove #if 0'd code throughout. Similarly, collapse #if 1'd code. - + 2004-12-20 Ian Lance Taylor * Makefile.am: Use $(SHELL) whenever we run move-if-change. diff --git a/bfd/doc/Makefile.am b/bfd/doc/Makefile.am index 6ff434a..7476ee5 100644 --- a/bfd/doc/Makefile.am +++ b/bfd/doc/Makefile.am @@ -56,18 +56,14 @@ bfd_TEXINFOS = $(DOCFILES) bfdsumm.texi MKDOC = chew$(EXEEXT_FOR_BUILD) -INCLUDES = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \ +AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \ -I$(srcdir)/../../intl -I../../intl $(MKDOC): $(srcdir)/chew.c - $(CC_FOR_BUILD) -o chew.$$$$ $(srcdir)/chew.c \ - $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) \ - $(INCLUDES); \ + $(CC_FOR_BUILD) -o chew.$$$$ $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \ + $(H_CFLAGS) $(AM_CPPFLAGS) $(srcdir)/chew.c; \ $(SHELL) $(srcdir)/../../move-if-change chew.$$$$ $(MKDOC) -chew.o: chew.c - $(CC_FOR_BUILD) -c $(INCLUDES) $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c - protos: libbfd.h libcoff.h bfd.h # We can't replace these rules with an implicit rule, because @@ -253,6 +249,7 @@ BFD_H_DEP = \ $(srcdir)/../format.c \ $(srcdir)/../linker.c \ $(srcdir)/../simple.c \ + $(srcdir)/../compress.c \ $(srcdir)/header.sed \ $(srcdir)/proto.str \ $(srcdir)/../version.h \ @@ -299,27 +296,6 @@ MAINTAINERCLEANFILES = $(DOCFILES) # cygnus option. install: install-info -html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; - -install-html: install-html-am - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ - f=$(html__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ - else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ - fi; \ - done - MAINTAINERCLEANFILES += bfd.info # Automake 1.9 will only build info files in the objdir if they are diff --git a/bfd/doc/Makefile.in b/bfd/doc/Makefile.in index 02b15d0..370fcad 100644 --- a/bfd/doc/Makefile.in +++ b/bfd/doc/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,15 +14,12 @@ # PARTICULAR PURPOSE. @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ 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 @@ -49,18 +47,22 @@ 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/nls.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/plugins.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 + $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.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 CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = depcomp = am__depfiles_maybe = SOURCES = @@ -81,19 +83,39 @@ TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ +BFD_HOSTPTR_T = @BFD_HOSTPTR_T@ BFD_HOST_64BIT_LONG = @BFD_HOST_64BIT_LONG@ +BFD_HOST_64BIT_LONG_LONG = @BFD_HOST_64BIT_LONG_LONG@ BFD_HOST_64_BIT = @BFD_HOST_64_BIT@ BFD_HOST_64_BIT_DEFINED = @BFD_HOST_64_BIT_DEFINED@ -BFD_HOST_LONG_LONG = @BFD_HOST_LONG_LONG@ BFD_HOST_U_64_BIT = @BFD_HOST_U_64_BIT@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ @@ -110,6 +132,7 @@ DATADIRNAME = @DATADIRNAME@ DEBUGDIR = @DEBUGDIR@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ @@ -119,15 +142,12 @@ EXEEXT = @EXEEXT@ EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ FGREP = @FGREP@ GENCAT = @GENCAT@ -GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@ -GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HDEFINES = @HDEFINES@ INCINTL = @INCINTL@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBBFD_FALSE = @INSTALL_LIBBFD_FALSE@ -INSTALL_LIBBFD_TRUE = @INSTALL_LIBBFD_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -136,26 +156,32 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBINTL = @LIBINTL@ LIBINTL_DEP = @LIBINTL_DEP@ +LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ NM = @NM@ +NMEDIT = @NMEDIT@ NO_WERROR = @NO_WERROR@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKGVERSION = @PKGVERSION@ @@ -165,23 +191,22 @@ REPORT_BUGS_TEXI = @REPORT_BUGS_TEXI@ REPORT_BUGS_TO = @REPORT_BUGS_TO@ SED = @SED@ SET_MAKE = @SET_MAKE@ +SHARED_LDFLAGS = @SHARED_LDFLAGS@ +SHARED_LIBADD = @SHARED_LIBADD@ SHELL = @SHELL@ STRIP = @STRIP@ TDEFINES = @TDEFINES@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ -WIN32LDFLAGS = @WIN32LDFLAGS@ -WIN32LIBADD = @WIN32LIBADD@ XGETTEXT = @XGETTEXT@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ all_backends = @all_backends@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -193,17 +218,17 @@ bfd_default_target_size = @bfd_default_target_size@ bfd_file_ptr = @bfd_file_ptr@ bfd_machines = @bfd_machines@ bfd_ufile_ptr = @bfd_ufile_ptr@ -bfdincludedir = @bfdincludedir@ -bfdlibdir = @bfdlibdir@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ @@ -217,15 +242,20 @@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +supports_plugins = @supports_plugins@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ @@ -234,6 +264,9 @@ target_noncanonical = @target_noncanonical@ target_os = @target_os@ target_vendor = @target_vendor@ tdefaults = @tdefaults@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ wordsize = @wordsize@ AUTOMAKE_OPTIONS = 1.9 cygnus DOCFILES = aoutx.texi archive.texi archures.texi \ @@ -287,7 +320,7 @@ 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 \ +AM_CPPFLAGS = -I.. -I$(srcdir)/.. -I$(srcdir)/../../include \ -I$(srcdir)/../../intl -I../../intl LIBBFD_H_DEP = \ @@ -329,6 +362,7 @@ BFD_H_DEP = \ $(srcdir)/../format.c \ $(srcdir)/../linker.c \ $(srcdir)/../simple.c \ + $(srcdir)/../compress.c \ $(srcdir)/header.sed \ $(srcdir)/proto.str \ $(srcdir)/../version.h \ @@ -340,7 +374,6 @@ CLEANFILES = *.p *.ip 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: @@ -349,14 +382,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --cygnus doc/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -374,6 +407,7 @@ $(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 +$(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo @@ -381,9 +415,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool - bfd.info: bfd.texinfo $(bfd_TEXINFOS) restore=: && backupdir="$(am__leading_dot)am$$$$" && \ rm -rf $$backupdir && mkdir $$backupdir && \ @@ -429,15 +460,35 @@ bfd.html: bfd.texinfo $(bfd_TEXINFOS) TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + uninstall-info-am: @$(PRE_UNINSTALL) - @if (install-info --version && \ + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @@ -445,12 +496,30 @@ uninstall-info-am: for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if cd "$(DESTDIR)$(infodir)"; then \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ @@ -459,17 +528,23 @@ dist-info: $(INFO_DEPS) $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ - for file in $$d/$$base*; do \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f $(distdir)/$$relfile || \ - cp -p $$file $(distdir)/$$relfile; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf bfd.aux bfd.cp bfd.cps bfd.fn bfd.ky bfd.kys bfd.log bfd.pg bfd.pgs \ - bfd.tmp bfd.toc bfd.tp bfd.tps bfd.vr bfd.vrs bfd.dvi \ - bfd.pdf bfd.ps bfd.html + bfd.tmp bfd.toc bfd.tp bfd.tps bfd.vr bfd.vrs + +clean-aminfo: + -test -z "bfd.dvi bfd.pdf bfd.ps bfd.html" \ + || rm -rf bfd.dvi bfd.pdf bfd.ps bfd.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ @@ -478,7 +553,7 @@ maintainer-clean-aminfo: rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done -clean-info: mostlyclean-aminfo +clean-info: mostlyclean-aminfo clean-aminfo tags: TAGS TAGS: @@ -510,6 +585,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -518,11 +594,11 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am -clean-am: clean-generic clean-libtool mostlyclean-am +clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -538,15 +614,52 @@ info-am: $(INFO_DEPS) install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done install-exec-am: +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) - test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ @@ -554,18 +667,19 @@ install-info-am: $(INFO_DEPS) if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ - relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ - echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ - $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ + echo "$$ifile"; \ else : ; fi; \ done; \ - done + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ @@ -574,6 +688,32 @@ install-info-am: $(INFO_DEPS) else : ; fi install-man: +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am @@ -594,29 +734,31 @@ ps: ps-am ps-am: $(PSS) -uninstall-am: +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-pdf-am uninstall-ps-am -.PHONY: all all-am check check-am clean clean-generic clean-info \ - clean-libtool dist-info distclean distclean-generic \ +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ + clean-info clean-libtool dist-info distclean distclean-generic \ distclean-libtool 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-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-aminfo \ maintainer-clean-generic mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-info-am + uninstall uninstall-am uninstall-dvi-am uninstall-html-am \ + uninstall-info-am uninstall-pdf-am uninstall-ps-am $(MKDOC): $(srcdir)/chew.c - $(CC_FOR_BUILD) -o chew.$$$$ $(srcdir)/chew.c \ - $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) $(H_CFLAGS) \ - $(INCLUDES); \ + $(CC_FOR_BUILD) -o chew.$$$$ $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) \ + $(H_CFLAGS) $(AM_CPPFLAGS) $(srcdir)/chew.c; \ $(SHELL) $(srcdir)/../../move-if-change chew.$$$$ $(MKDOC) -chew.o: chew.c - $(CC_FOR_BUILD) -c $(INCLUDES) $(H_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/chew.c - protos: libbfd.h libcoff.h bfd.h # We can't replace these rules with an implicit rule, because @@ -794,24 +936,6 @@ bfdver.texi: $(srcdir)/Makefile.in # cygnus option. install: install-info -install-html: install-html-am - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ - f=$(html__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ - else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ - fi; \ - done # 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/bfd/doc/archures.texi b/bfd/doc/archures.texi index b5de132..33d7c59 100644 --- a/bfd/doc/archures.texi +++ b/bfd/doc/archures.texi @@ -66,6 +66,9 @@ enum bfd_architecture #define bfd_mach_mcf_isa_c 26 #define bfd_mach_mcf_isa_c_mac 27 #define bfd_mach_mcf_isa_c_emac 28 +#define bfd_mach_mcf_isa_c_nodiv 29 +#define bfd_mach_mcf_isa_c_nodiv_mac 30 +#define bfd_mach_mcf_isa_c_nodiv_emac 31 bfd_arch_vax, /* DEC Vax */ bfd_arch_i960, /* Intel 960 */ /* The order of the following is important. @@ -129,9 +132,15 @@ enum bfd_architecture #define bfd_mach_mips9000 9000 #define bfd_mach_mips10000 10000 #define bfd_mach_mips12000 12000 +#define bfd_mach_mips14000 14000 +#define bfd_mach_mips16000 16000 #define bfd_mach_mips16 16 #define bfd_mach_mips5 5 +#define bfd_mach_mips_loongson_2e 3001 +#define bfd_mach_mips_loongson_2f 3002 #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ +#define bfd_mach_mips_octeon 6501 +#define bfd_mach_mips_xlr 887682 /* decimal 'XLR' */ #define bfd_mach_mipsisa32 32 #define bfd_mach_mipsisa32r2 33 #define bfd_mach_mipsisa64 64 @@ -142,6 +151,9 @@ enum bfd_architecture #define bfd_mach_i386_i386_intel_syntax 3 #define bfd_mach_x86_64 64 #define bfd_mach_x86_64_intel_syntax 65 + bfd_arch_l1om, /* Intel L1OM */ +#define bfd_mach_l1om 66 +#define bfd_mach_l1om_intel_syntax 67 bfd_arch_we32k, /* AT&T WE32xxx */ bfd_arch_tahoe, /* CCI/Harris Tahoe */ bfd_arch_i860, /* Intel 860 */ @@ -160,11 +172,13 @@ enum bfd_architecture #define bfd_mach_h8300sx 6 #define bfd_mach_h8300sxn 7 bfd_arch_pdp11, /* DEC PDP-11 */ + bfd_arch_plugin, 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_405 405 #define bfd_mach_ppc_505 505 #define bfd_mach_ppc_601 601 #define bfd_mach_ppc_602 602 @@ -180,6 +194,7 @@ enum bfd_architecture #define bfd_mach_ppc_rs64iii 643 #define bfd_mach_ppc_7400 7400 #define bfd_mach_ppc_e500 500 +#define bfd_mach_ppc_e500mc 5001 bfd_arch_rs6000, /* IBM RS/6000 */ #define bfd_mach_rs6k 6000 #define bfd_mach_rs6k_rs1 6001 @@ -286,10 +301,13 @@ enum bfd_architecture #define bfd_mach_frvtomcat 499 /* fr500 prototype */ #define bfd_mach_fr500 500 #define bfd_mach_fr550 550 + bfd_arch_moxie, /* The moxie processor */ +#define bfd_mach_moxie 1 bfd_arch_mcore, bfd_arch_mep, #define bfd_mach_mep 1 #define bfd_mach_mep_h1 0x6831 +#define bfd_mach_mep_c5 0x6335 bfd_arch_ia64, /* HP/Intel ia64 */ #define bfd_mach_ia64_elf64 64 #define bfd_mach_ia64_elf32 32 @@ -307,9 +325,13 @@ enum bfd_architecture bfd_arch_avr, /* Atmel AVR microcontrollers. */ #define bfd_mach_avr1 1 #define bfd_mach_avr2 2 +#define bfd_mach_avr25 25 #define bfd_mach_avr3 3 +#define bfd_mach_avr31 31 +#define bfd_mach_avr35 35 #define bfd_mach_avr4 4 #define bfd_mach_avr5 5 +#define bfd_mach_avr51 51 #define bfd_mach_avr6 6 bfd_arch_bfin, /* ADI Blackfin */ #define bfd_mach_bfin 1 @@ -327,6 +349,8 @@ enum bfd_architecture #define bfd_mach_s390_31 31 #define bfd_mach_s390_64 64 bfd_arch_score, /* Sunplus score */ +#define bfd_mach_score3 3 +#define bfd_mach_score7 7 bfd_arch_openrisc, /* OpenRISC */ bfd_arch_mmix, /* Donald Knuth's educational processor. */ bfd_arch_xstormy16, @@ -361,6 +385,9 @@ enum bfd_architecture #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_lm32, /* Lattice Mico32 */ +#define bfd_mach_lm32 1 + bfd_arch_microblaze,/* Xilinx MicroBlaze. */ bfd_arch_last @}; @end example diff --git a/bfd/doc/bfd.info b/bfd/doc/bfd.info index a192a74..576f2c5 100644 --- a/bfd/doc/bfd.info +++ b/bfd/doc/bfd.info @@ -6,11 +6,11 @@ END-INFO-DIR-ENTRY This file documents the BFD library. - Copyright (C) 1991, 2000, 2001, 2003, 2006, 2007 Free Software + Copyright (C) 1991, 2000, 2001, 2003, 2006, 2007, 2008 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 +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being "GNU General Public License" and "Funding Free Software", the Front-Cover texts being (a) (see below), and with the @@ -312,6 +312,14 @@ the BFD and to data in the BFD. major data about the file and pointers to the rest of the data. + enum bfd_direction + { + no_direction = 0, + read_direction = 1, + write_direction = 2, + both_direction = 3 + }; + struct bfd { /* A unique identifier of the BFD */ @@ -328,15 +336,6 @@ major data about the file and pointers to the rest of the data. 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; @@ -345,13 +344,6 @@ major data about the file and pointers to the rest of the data. 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; @@ -362,26 +354,91 @@ major data about the file and pointers to the rest of the data. 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; + enum bfd_direction direction; /* Format_specific flags. */ flagword flags; + /* Values that may appear in the flags field of a BFD. These also + appear in the object_flags field of the bfd_target structure, where + they indicate the set of flags used by that backend (not all flags + are meaningful for all object file formats) (FIXME: at the moment, + the object_flags values have mostly just been copied from backend + to another, and are not necessarily correct). */ + + #define BFD_NO_FLAGS 0x00 + + /* BFD contains relocation entries. */ + #define HAS_RELOC 0x01 + + /* BFD is directly executable. */ + #define EXEC_P 0x02 + + /* BFD has line number information (basically used for F_LNNO in a + COFF header). */ + #define HAS_LINENO 0x04 + + /* BFD has debugging information. */ + #define HAS_DEBUG 0x08 + + /* BFD has symbols. */ + #define HAS_SYMS 0x10 + + /* BFD has local symbols (basically used for F_LSYMS in a COFF + header). */ + #define HAS_LOCALS 0x20 + + /* BFD is a dynamic object. */ + #define DYNAMIC 0x40 + + /* Text section is write protected (if D_PAGED is not set, this is + like an a.out NMAGIC file) (the linker sets this by default, but + clears it for -r or -N). */ + #define WP_TEXT 0x80 + + /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the + linker sets this by default, but clears it for -r or -n or -N). */ + #define D_PAGED 0x100 + + /* BFD is relaxable (this means that bfd_relax_section may be able to + do something) (sometimes bfd_relax_section can do something even if + this is not set). */ + #define BFD_IS_RELAXABLE 0x200 + + /* This may be set before writing out a BFD to request using a + traditional format. For example, this is used to request that when + writing out an a.out object the symbols not be hashed to eliminate + duplicates. */ + #define BFD_TRADITIONAL_FORMAT 0x400 + + /* This flag indicates that the BFD contents are actually cached + in memory. If this is set, iostream points to a bfd_in_memory + struct. */ + #define BFD_IN_MEMORY 0x800 + + /* The sections in this BFD specify a memory page. */ + #define HAS_LOAD_PAGE 0x1000 + + /* This BFD has been created by the linker and doesn't correspond + to any input file. */ + #define BFD_LINKER_CREATED 0x2000 + + /* This may be set before writing out a BFD to request that it + be written using values for UIDs, GIDs, timestamps, etc. that + will be consistent from run to run. */ + #define BFD_DETERMINISTIC_OUTPUT 0x4000 + /* 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; + /* The origin in the archive of the proxy entry. This will + normally be the same as origin, except for thin archives, + when it will contain the current offset of the proxy in the + thin archive rather than the offset of the bfd in its actual + container. */ + ufile_ptr proxy_origin; /* A hash table for section names. */ struct bfd_hash_table section_htab; @@ -402,7 +459,8 @@ major data about the file and pointers to the rest of the data. /* Used for input and output. */ unsigned int symcount; - /* Symbol table for output BFD (with symcount entries). */ + /* Symbol table for output BFD (with symcount entries). + Also used by the linker to cache input BFD symbols. */ struct bfd_symbol **outsymbols; /* Used for slurped dynamic symbol tables. */ @@ -411,15 +469,13 @@ major data about the file and pointers to the rest of the data. /* 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 *archive_next; /* The next BFD in the archive. */ struct bfd *archive_head; /* The first BFD in the archive. */ - bfd_boolean has_armap; + struct bfd *nested_archives; /* List of nested archive in a flattened + thin archive. */ /* A chain of BFD structures involved in a link. */ struct bfd *link_next; @@ -442,6 +498,7 @@ major data about the file and pointers to the rest of the data. struct ieee_data_struct *ieee_data; struct ieee_ar_data_struct *ieee_ar_data; struct srec_data_struct *srec_data; + struct verilog_data_struct *verilog_data; struct ihex_data_struct *ihex_data; struct tekhex_data_struct *tekhex_data; struct elf_obj_tdata *elf_obj_data; @@ -462,6 +519,7 @@ major data about the file and pointers to the rest of the 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 plugin_data_struct *plugin_data; struct bfd_pef_data_struct *pef_data; struct bfd_pef_xlib_data_struct *pef_xlib_data; struct bfd_sym_data_struct *sym_data; @@ -476,6 +534,35 @@ major data about the file and pointers to the rest of the data. struct objalloc *, but we use void * to avoid requiring the inclusion of objalloc.h. */ void *memory; + + /* Is the file descriptor being cached? That is, can it be closed as + needed, and re-opened when accessed later? */ + unsigned int cacheable : 1; + + /* 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. */ + unsigned int target_defaulted : 1; + + /* ... and here: (``once'' means at least once). */ + unsigned int opened_once : 1; + + /* Set if we have a locally maintained mtime value, rather than + getting it from the file each time. */ + unsigned int mtime_set : 1; + + /* Flag set if symbols from this BFD should not be exported. */ + unsigned int no_export : 1; + + /* Remember when output has begun, to stop strange things + from happening. */ + unsigned int output_has_begun : 1; + + /* Have archive map. */ + unsigned int has_armap : 1; + + /* Set if this is a thin archive. */ + unsigned int is_thin_archive : 1; }; 2.2 Error reporting @@ -964,7 +1051,7 @@ function returns with success. Returns the maximum page size, in bytes, as determined by emulation. *Returns* -Returns the maximum page size in bytes for ELF, abort otherwise. +Returns the maximum page size in bytes for ELF, 0 otherwise. 2.3.1.21 `bfd_emul_set_maxpagesize' ................................... @@ -984,7 +1071,7 @@ for other formats. Returns the common page size, in bytes, as determined by emulation. *Returns* -Returns the common page size in bytes for ELF, abort otherwise. +Returns the common page size in bytes for ELF, 0 otherwise. 2.3.1.23 `bfd_emul_set_commonpagesize' ...................................... @@ -1034,6 +1121,9 @@ below). int (*bclose) (struct bfd *abfd); int (*bflush) (struct bfd *abfd); int (*bstat) (struct bfd *abfd, struct stat *sb); + /* Just like mmap: (void*)-1 on failure, mmapped address on success. */ + void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); }; 2.3.1.26 `bfd_get_mtime' @@ -1074,6 +1164,15 @@ table, or a "virtual memory exhausted" error when it tries to allocate to read. This function at least allows us to answer the question, "is the size reasonable?". +2.3.1.28 `bfd_mmap' +................... + +*Synopsis* + void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); + *Description* +Return mmap()ed region of the file, if possible and implemented. + * Menu: * Memory Usage:: @@ -1375,7 +1474,7 @@ Here is the section structure: /* If SEC_LINK_ONCE is set, this bitfield describes how the linker should handle duplicate sections. */ - #define SEC_LINK_DUPLICATES 0x40000 + #define SEC_LINK_DUPLICATES 0xc0000 /* This value for SEC_LINK_DUPLICATES means that duplicate sections with the same name should simply be discarded. */ @@ -1384,11 +1483,11 @@ Here is the section structure: /* 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 + #define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000 /* 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 + #define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000 /* This value for SEC_LINK_DUPLICATES means that the linker should warn if any duplicate sections contain different @@ -1400,28 +1499,28 @@ Here is the section structure: 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 + #define SEC_LINKER_CREATED 0x100000 /* 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 + #define SEC_KEEP 0x200000 /* This section contains "short" data, and should be placed "near" the GP. */ - #define SEC_SMALL_DATA 0x800000 + #define SEC_SMALL_DATA 0x400000 /* Attempt to merge identical entities in the section. Entity size is given in the entsize field. */ - #define SEC_MERGE 0x1000000 + #define SEC_MERGE 0x800000 /* 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 + #define SEC_STRINGS 0x1000000 /* This section contains data about section groups. */ - #define SEC_GROUP 0x4000000 + #define SEC_GROUP 0x2000000 /* The section is a COFF shared library section. This flag is only for the linker. If this type of section appears in @@ -1432,23 +1531,27 @@ Here is the section structure: 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 + #define SEC_COFF_SHARED_LIBRARY 0x4000000 /* This section contains data which may be shared with other executables or shared objects. This is for COFF only. */ - #define SEC_COFF_SHARED 0x20000000 + #define SEC_COFF_SHARED 0x8000000 /* 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 + #define SEC_TIC54X_BLOCK 0x10000000 /* 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 + #define SEC_TIC54X_CLINK 0x20000000 + + /* Indicate that section has the no read flag set. This happens + when memory read flag isn't set. */ + #define SEC_COFF_NOREAD 0x40000000 /* End of section flags. */ @@ -1464,9 +1567,8 @@ Here is the section structure: output sections that have an input section. */ unsigned int linker_has_input : 1; - /* Mark flags used by some linker backends for garbage collection. */ + /* Mark flag 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. */ @@ -1490,6 +1592,9 @@ Here is the section structure: /* Nonzero if this section has TLS related relocations. */ unsigned int has_tls_reloc:1; + /* Nonzero if this section has a call to __tls_get_addr. */ + unsigned int has_tls_get_addr_call:1; + /* Nonzero if this section has a gp reloc. */ unsigned int has_gp_reloc:1; @@ -1520,15 +1625,22 @@ Here is the section structure: 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. */ + octets. This field should be set for any section whose size is + changed by linker relaxation. It is required 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; + /* Relaxation table. */ + struct relax_table *relax; + + /* Count of used relaxation table entries. */ + int relax_count; + + /* 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 @@ -1618,6 +1730,17 @@ Here is the section structure: } map_head, map_tail; } asection; + /* Relax table contains information about instructions which can + be removed by relaxation -- replacing a long address with a + short address. */ + struct relax_table { + /* Address where bytes may be deleted. */ + bfd_vma addr; + + /* Number of bytes to be deleted. */ + int size; + }; + /* 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 @@ -1744,17 +1867,17 @@ Here is the section structure: /* 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, \ + /* linker_mark, linker_has_input, gc_mark, */ \ + 0, 0, 1, \ \ /* 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, \ + /* has_tls_get_addr_call, has_gp_reloc, need_finalize_relax, */ \ + 0, 0, 0, \ \ - /* vma, lma, size, rawsize */ \ - 0, 0, 0, 0, \ + /* reloc_done, vma, lma, size, rawsize, relax, relax_count, */ \ + 0, 0, 0, 0, 0, 0, 0, \ \ /* output_offset, output_section, alignment_power, */ \ 0, (struct bfd_section *) &SEC, 0, \ @@ -2241,97 +2364,107 @@ An `asymbol' has the form: symvalue value; /* Attributes of a symbol. */ - #define BSF_NO_FLAGS 0x00 + #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 + #define BSF_LOCAL (1 << 0) /* The symbol has global scope; initialized data in `C'. The value is the offset into the section of the data. */ - #define BSF_GLOBAL 0x02 + #define BSF_GLOBAL (1 << 1) /* 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_LOCAL', `BSF_COMMON', `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 + #define BSF_DEBUGGING (1 << 2) /* The symbol denotes a function entry point. Used in ELF, perhaps others someday. */ - #define BSF_FUNCTION 0x10 + #define BSF_FUNCTION (1 << 3) /* Used by the linker. */ - #define BSF_KEEP 0x20 - #define BSF_KEEP_G 0x40 + #define BSF_KEEP (1 << 5) + #define BSF_KEEP_G (1 << 6) /* A weak global symbol, overridable without warnings by a regular global symbol of the same name. */ - #define BSF_WEAK 0x80 + #define BSF_WEAK (1 << 7) /* This symbol was created to point to a section, e.g. ELF's STT_SECTION symbols. */ - #define BSF_SECTION_SYM 0x100 + #define BSF_SECTION_SYM (1 << 8) /* 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 + #define BSF_OLD_COMMON (1 << 9) /* 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 + #define BSF_NOT_AT_END (1 << 10) /* Signal that the symbol is the label of constructor section. */ - #define BSF_CONSTRUCTOR 0x800 + #define BSF_CONSTRUCTOR (1 << 11) /* 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 + #define BSF_WARNING (1 << 12) /* 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 + #define BSF_INDIRECT (1 << 13) /* BSF_FILE marks symbols that contain a file name. This is used for ELF STT_FILE symbols. */ - #define BSF_FILE 0x4000 + #define BSF_FILE (1 << 14) /* Symbol is from dynamic linking information. */ - #define BSF_DYNAMIC 0x8000 + #define BSF_DYNAMIC (1 << 15) /* The symbol denotes a data object. Used in ELF, and perhaps others someday. */ - #define BSF_OBJECT 0x10000 + #define BSF_OBJECT (1 << 16) /* 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 + #define BSF_DEBUGGING_RELOC (1 << 17) /* This symbol is thread local. Used in ELF. */ - #define BSF_THREAD_LOCAL 0x40000 + #define BSF_THREAD_LOCAL (1 << 18) /* This symbol represents a complex relocation expression, with the expression tree serialized in the symbol name. */ - #define BSF_RELC 0x80000 + #define BSF_RELC (1 << 19) /* This symbol represents a signed complex relocation expression, with the expression tree serialized in the symbol name. */ - #define BSF_SRELC 0x100000 + #define BSF_SRELC (1 << 20) + + /* This symbol was created by bfd_get_synthetic_symtab. */ + #define BSF_SYNTHETIC (1 << 21) + + /* This symbol is an indirect code object. Unrelated to BSF_INDIRECT. + The dynamic linker will compute the value of this symbol by + calling the function that it points to. BSF_FUNCTION must + also be also set. */ + #define BSF_GNU_INDIRECT_FUNCTION (1 << 22) + /* This symbol is a globally unique data object. The dynamic linker + will make sure that in the entire process there is just one symbol + with this name and type in use. BSF_OBJECT must also be set. */ + #define BSF_GNU_UNIQUE (1 << 23) flagword flags; @@ -3196,6 +3329,21 @@ attributes. -- : BFD_RELOC_68K_GLOB_DAT -- : BFD_RELOC_68K_JMP_SLOT -- : BFD_RELOC_68K_RELATIVE + -- : BFD_RELOC_68K_TLS_GD32 + -- : BFD_RELOC_68K_TLS_GD16 + -- : BFD_RELOC_68K_TLS_GD8 + -- : BFD_RELOC_68K_TLS_LDM32 + -- : BFD_RELOC_68K_TLS_LDM16 + -- : BFD_RELOC_68K_TLS_LDM8 + -- : BFD_RELOC_68K_TLS_LDO32 + -- : BFD_RELOC_68K_TLS_LDO16 + -- : BFD_RELOC_68K_TLS_LDO8 + -- : BFD_RELOC_68K_TLS_IE32 + -- : BFD_RELOC_68K_TLS_IE16 + -- : BFD_RELOC_68K_TLS_IE8 + -- : BFD_RELOC_68K_TLS_LE32 + -- : BFD_RELOC_68K_TLS_LE16 + -- : BFD_RELOC_68K_TLS_LE8 Relocations used by 68K ELF. -- : BFD_RELOC_32_BASEREL @@ -3252,6 +3400,11 @@ attributes. -- : BFD_RELOC_SPARC_UA16 -- : BFD_RELOC_SPARC_UA32 -- : BFD_RELOC_SPARC_UA64 + -- : BFD_RELOC_SPARC_GOTDATA_HIX22 + -- : BFD_RELOC_SPARC_GOTDATA_LOX10 + -- : BFD_RELOC_SPARC_GOTDATA_OP_HIX22 + -- : BFD_RELOC_SPARC_GOTDATA_OP_LOX10 + -- : BFD_RELOC_SPARC_GOTDATA_OP SPARC ELF relocations. There is probably some overlap with other relocation types already defined. @@ -3328,6 +3481,7 @@ attributes. -- : BFD_RELOC_SPU_HI16 -- : BFD_RELOC_SPU_PPU32 -- : BFD_RELOC_SPU_PPU64 + -- : BFD_RELOC_SPU_ADD_PIC SPU Relocations. -- : BFD_RELOC_ALPHA_GPDISP_HI16 @@ -3399,6 +3553,22 @@ attributes. share a common GP, and the target address is adjusted for STO_ALPHA_STD_GPLOAD. + -- : BFD_RELOC_ALPHA_NOP + The NOP relocation outputs a NOP if the longword displacement + between two procedure entry points is < 2^21. + + -- : BFD_RELOC_ALPHA_BSR + The BSR relocation outputs a BSR if the longword displacement + between two procedure entry points is < 2^21. + + -- : BFD_RELOC_ALPHA_LDA + The LDA relocation outputs a LDA if the longword displacement + between two procedure entry points is < 2^16. + + -- : BFD_RELOC_ALPHA_BOH + The BOH relocation outputs a BSR if the longword displacement + between two procedure entry points is < 2^21, or else a hint. + -- : BFD_RELOC_ALPHA_TLSGD -- : BFD_RELOC_ALPHA_TLSLDM -- : BFD_RELOC_ALPHA_DTPMOD64 @@ -3445,6 +3615,11 @@ attributes. -- : BFD_RELOC_LO16_PCREL Low 16 bits of pc-relative value + -- : BFD_RELOC_MIPS16_GOT16 + -- : BFD_RELOC_MIPS16_CALL16 + Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of + 16-bit immediate fields + -- : BFD_RELOC_MIPS16_HI16 MIPS16 high 16 bits of 32-bit value. @@ -3498,7 +3673,10 @@ attributes. -- : BFD_RELOC_MIPS_COPY -- : BFD_RELOC_MIPS_JUMP_SLOT - MIPS ELF relocations (VxWorks extensions). + MIPS ELF relocations (VxWorks and PLT extensions). + + -- : BFD_RELOC_MOXIE_10_PCREL + Moxie ELF relocations. -- : BFD_RELOC_FRV_LABEL16 -- : BFD_RELOC_FRV_LABEL24 @@ -3568,6 +3746,15 @@ attributes. -- : BFD_RELOC_MN10300_RELATIVE Adjust by program base. + -- : BFD_RELOC_MN10300_SYM_DIFF + Together with another reloc targeted at the same location, allows + for a value that is the difference of two symbols in the same + section. + + -- : BFD_RELOC_MN10300_ALIGN + The addend of this reloc is an alignment power that must be + honoured at the offset's location, regardless of linker relaxation. + -- : BFD_RELOC_386_GOT32 -- : BFD_RELOC_386_PLT32 -- : BFD_RELOC_386_COPY @@ -3591,6 +3778,7 @@ attributes. -- : BFD_RELOC_386_TLS_GOTDESC -- : BFD_RELOC_386_TLS_DESC_CALL -- : BFD_RELOC_386_TLS_DESC + -- : BFD_RELOC_386_IRELATIVE i386/elf relocations -- : BFD_RELOC_X86_64_GOT32 @@ -3619,6 +3807,7 @@ attributes. -- : BFD_RELOC_X86_64_GOTPC32_TLSDESC -- : BFD_RELOC_X86_64_TLSDESC_CALL -- : BFD_RELOC_X86_64_TLSDESC + -- : BFD_RELOC_X86_64_IRELATIVE x86-64/elf relocations -- : BFD_RELOC_NS32K_IMM_8 @@ -3703,6 +3892,8 @@ attributes. Power(rs6000) and PowerPC relocations. -- : BFD_RELOC_PPC_TLS + -- : BFD_RELOC_PPC_TLSGD + -- : BFD_RELOC_PPC_TLSLD -- : BFD_RELOC_PPC_DTPMOD -- : BFD_RELOC_PPC_TPREL16 -- : BFD_RELOC_PPC_TPREL16_LO @@ -3871,6 +4062,9 @@ attributes. -- : BFD_RELOC_ARM_LDC_SB_G2 ARM group relocations. + -- : BFD_RELOC_ARM_V4BX + Annotation of BX instructions. + -- : BFD_RELOC_ARM_IMMEDIATE -- : BFD_RELOC_ARM_ADRL_IMMEDIATE -- : BFD_RELOC_ARM_T32_IMMEDIATE @@ -4662,11 +4856,8 @@ attributes. -- : BFD_RELOC_390_TLS_GOTIE20 Long displacement extension. - -- : BFD_RELOC_SCORE_DUMMY1 - Score relocations - -- : BFD_RELOC_SCORE_GPREL15 - Low 16 bit for load/store + Score relocations Low 16 bit for load/store -- : BFD_RELOC_SCORE_DUMMY2 -- : BFD_RELOC_SCORE_JMP @@ -4675,12 +4866,21 @@ attributes. -- : BFD_RELOC_SCORE_BRANCH This is a 19-bit reloc with the right 1 bit assumed to be 0 + -- : BFD_RELOC_SCORE_IMM30 + This is a 32-bit reloc for 48-bit instructions. + + -- : BFD_RELOC_SCORE_IMM32 + This is a 32-bit reloc for 48-bit instructions. + -- : BFD_RELOC_SCORE16_JMP This is a 11-bit reloc with the right 1 bit assumed to be 0 -- : BFD_RELOC_SCORE16_BRANCH This is a 8-bit reloc with the right 1 bit assumed to be 0 + -- : BFD_RELOC_SCORE_BCMP + This is a 9-bit reloc with the right 1 bit assumed to be 0 + -- : BFD_RELOC_SCORE_GOT15 -- : BFD_RELOC_SCORE_GOT_LO16 -- : BFD_RELOC_SCORE_CALL15 @@ -4933,6 +5133,12 @@ attributes. -- : BFD_RELOC_CR16_DISP20 -- : BFD_RELOC_CR16_DISP24 -- : BFD_RELOC_CR16_DISP24a + -- : BFD_RELOC_CR16_SWITCH8 + -- : BFD_RELOC_CR16_SWITCH16 + -- : BFD_RELOC_CR16_SWITCH32 + -- : BFD_RELOC_CR16_GOT_REGREL20 + -- : BFD_RELOC_CR16_GOTC_REGREL20 + -- : BFD_RELOC_CR16_GLOB_DAT NS CR16 Relocations. -- : BFD_RELOC_CRX_REL4 @@ -4998,6 +5204,20 @@ attributes. 32-bit offset to symbol with PLT entry, relative to this relocation. + -- : BFD_RELOC_CRIS_32_GOT_GD + -- : BFD_RELOC_CRIS_16_GOT_GD + -- : BFD_RELOC_CRIS_32_GD + -- : BFD_RELOC_CRIS_DTP + -- : BFD_RELOC_CRIS_32_DTPREL + -- : BFD_RELOC_CRIS_16_DTPREL + -- : BFD_RELOC_CRIS_32_GOT_TPREL + -- : BFD_RELOC_CRIS_16_GOT_TPREL + -- : BFD_RELOC_CRIS_32_TPREL + -- : BFD_RELOC_CRIS_16_TPREL + -- : BFD_RELOC_CRIS_DTPMOD + -- : BFD_RELOC_CRIS_32_IE + Relocs used in TLS code for CRIS. + -- : BFD_RELOC_860_COPY -- : BFD_RELOC_860_GLOB_DAT -- : BFD_RELOC_860_JUMP_SLOT @@ -5174,6 +5394,15 @@ attributes. assembler-expanded instructions. This is commonly used internally by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND. + -- : BFD_RELOC_XTENSA_TLSDESC_FN + -- : BFD_RELOC_XTENSA_TLSDESC_ARG + -- : BFD_RELOC_XTENSA_TLS_DTPOFF + -- : BFD_RELOC_XTENSA_TLS_TPOFF + -- : BFD_RELOC_XTENSA_TLS_FUNC + -- : BFD_RELOC_XTENSA_TLS_ARG + -- : BFD_RELOC_XTENSA_TLS_CALL + Xtensa TLS relocations. + -- : BFD_RELOC_Z80_DISP8 8 bit signed offset in (ix+d) or (iy+d). @@ -5186,6 +5415,76 @@ attributes. -- : BFD_RELOC_Z8K_IMM4L 4 bit value. + -- : BFD_RELOC_LM32_CALL + -- : BFD_RELOC_LM32_BRANCH + -- : BFD_RELOC_LM32_16_GOT + -- : BFD_RELOC_LM32_GOTOFF_HI16 + -- : BFD_RELOC_LM32_GOTOFF_LO16 + -- : BFD_RELOC_LM32_COPY + -- : BFD_RELOC_LM32_GLOB_DAT + -- : BFD_RELOC_LM32_JMP_SLOT + -- : BFD_RELOC_LM32_RELATIVE + Lattice Mico32 relocations. + + -- : BFD_RELOC_MACH_O_SECTDIFF + Difference between two section addreses. Must be followed by a + BFD_RELOC_MACH_O_PAIR. + + -- : BFD_RELOC_MACH_O_PAIR + Mach-O generic relocations. + + -- : BFD_RELOC_MICROBLAZE_32_LO + This is a 32 bit reloc for the microblaze that stores the low 16 + bits of a value + + -- : BFD_RELOC_MICROBLAZE_32_LO_PCREL + This is a 32 bit pc-relative reloc for the microblaze that stores + the low 16 bits of a value + + -- : BFD_RELOC_MICROBLAZE_32_ROSDA + This is a 32 bit reloc for the microblaze that stores a value + relative to the read-only small data area anchor + + -- : BFD_RELOC_MICROBLAZE_32_RWSDA + This is a 32 bit reloc for the microblaze that stores a value + relative to the read-write small data area anchor + + -- : BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM + This is a 32 bit reloc for the microblaze to handle expressions of + the form "Symbol Op Symbol" + + -- : BFD_RELOC_MICROBLAZE_64_NONE + This is a 64 bit reloc that stores the 32 bit pc relative value in + two words (with an imm instruction). No relocation is done here - + only used for relaxing + + -- : BFD_RELOC_MICROBLAZE_64_GOTPC + This is a 64 bit reloc that stores the 32 bit pc relative value in + two words (with an imm instruction). The relocation is + PC-relative GOT offset + + -- : BFD_RELOC_MICROBLAZE_64_GOT + This is a 64 bit reloc that stores the 32 bit pc relative value in + two words (with an imm instruction). The relocation is GOT offset + + -- : BFD_RELOC_MICROBLAZE_64_PLT + This is a 64 bit reloc that stores the 32 bit pc relative value in + two words (with an imm instruction). The relocation is + PC-relative offset into PLT + + -- : BFD_RELOC_MICROBLAZE_64_GOTOFF + This is a 64 bit reloc that stores the 32 bit GOT relative value + in two words (with an imm instruction). The relocation is + relative offset from _GLOBAL_OFFSET_TABLE_ + + -- : BFD_RELOC_MICROBLAZE_32_GOTOFF + This is a 32 bit reloc that stores the 32 bit GOT relative value + in a word. The relocation is relative offset from + + -- : BFD_RELOC_MICROBLAZE_COPY + This is used to tell the dynamic linker to copy the value out of + the dynamic object into the runtime process image. + typedef enum bfd_reloc_code_real bfd_reloc_code_real_type; @@ -5436,6 +5735,7 @@ them both! bfd_target_oasys_flavour, bfd_target_tekhex_flavour, bfd_target_srec_flavour, + bfd_target_verilog_flavour, bfd_target_ihex_flavour, bfd_target_som_flavour, bfd_target_os9k_flavour, @@ -5719,7 +6019,8 @@ BFD_JUMP_TABLE macros. NAME##_bfd_merge_sections, \ NAME##_bfd_is_group_section, \ NAME##_bfd_discard_group, \ - NAME##_section_already_linked \ + NAME##_section_already_linked, \ + NAME##_bfd_define_common_symbol int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); bfd_byte * (*_bfd_get_relocated_section_contents) @@ -5767,6 +6068,10 @@ BFD_JUMP_TABLE macros. void (*_section_already_linked) (bfd *, struct bfd_section *, struct bfd_link_info *); + /* Define a common symbol. */ + bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *, + struct bfd_link_hash_entry *); + /* Routines to handle dynamic symbols and relocs. */ #define BFD_JUMP_TABLE_DYNAMIC(NAME) \ NAME##_get_dynamic_symtab_upper_bound, \ @@ -5921,6 +6226,9 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_mcf_isa_c 26 #define bfd_mach_mcf_isa_c_mac 27 #define bfd_mach_mcf_isa_c_emac 28 + #define bfd_mach_mcf_isa_c_nodiv 29 + #define bfd_mach_mcf_isa_c_nodiv_mac 30 + #define bfd_mach_mcf_isa_c_nodiv_emac 31 bfd_arch_vax, /* DEC Vax */ bfd_arch_i960, /* Intel 960 */ /* The order of the following is important. @@ -5984,9 +6292,15 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_mips9000 9000 #define bfd_mach_mips10000 10000 #define bfd_mach_mips12000 12000 + #define bfd_mach_mips14000 14000 + #define bfd_mach_mips16000 16000 #define bfd_mach_mips16 16 #define bfd_mach_mips5 5 + #define bfd_mach_mips_loongson_2e 3001 + #define bfd_mach_mips_loongson_2f 3002 #define bfd_mach_mips_sb1 12310201 /* octal 'SB', 01 */ + #define bfd_mach_mips_octeon 6501 + #define bfd_mach_mips_xlr 887682 /* decimal 'XLR' */ #define bfd_mach_mipsisa32 32 #define bfd_mach_mipsisa32r2 33 #define bfd_mach_mipsisa64 64 @@ -5997,6 +6311,9 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_i386_i386_intel_syntax 3 #define bfd_mach_x86_64 64 #define bfd_mach_x86_64_intel_syntax 65 + bfd_arch_l1om, /* Intel L1OM */ + #define bfd_mach_l1om 66 + #define bfd_mach_l1om_intel_syntax 67 bfd_arch_we32k, /* AT&T WE32xxx */ bfd_arch_tahoe, /* CCI/Harris Tahoe */ bfd_arch_i860, /* Intel 860 */ @@ -6015,11 +6332,13 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_h8300sx 6 #define bfd_mach_h8300sxn 7 bfd_arch_pdp11, /* DEC PDP-11 */ + bfd_arch_plugin, 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_405 405 #define bfd_mach_ppc_505 505 #define bfd_mach_ppc_601 601 #define bfd_mach_ppc_602 602 @@ -6035,6 +6354,7 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_ppc_rs64iii 643 #define bfd_mach_ppc_7400 7400 #define bfd_mach_ppc_e500 500 + #define bfd_mach_ppc_e500mc 5001 bfd_arch_rs6000, /* IBM RS/6000 */ #define bfd_mach_rs6k 6000 #define bfd_mach_rs6k_rs1 6001 @@ -6141,10 +6461,13 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_frvtomcat 499 /* fr500 prototype */ #define bfd_mach_fr500 500 #define bfd_mach_fr550 550 + bfd_arch_moxie, /* The moxie processor */ + #define bfd_mach_moxie 1 bfd_arch_mcore, bfd_arch_mep, #define bfd_mach_mep 1 #define bfd_mach_mep_h1 0x6831 + #define bfd_mach_mep_c5 0x6335 bfd_arch_ia64, /* HP/Intel ia64 */ #define bfd_mach_ia64_elf64 64 #define bfd_mach_ia64_elf32 32 @@ -6162,9 +6485,13 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. bfd_arch_avr, /* Atmel AVR microcontrollers. */ #define bfd_mach_avr1 1 #define bfd_mach_avr2 2 + #define bfd_mach_avr25 25 #define bfd_mach_avr3 3 + #define bfd_mach_avr31 31 + #define bfd_mach_avr35 35 #define bfd_mach_avr4 4 #define bfd_mach_avr5 5 + #define bfd_mach_avr51 51 #define bfd_mach_avr6 6 bfd_arch_bfin, /* ADI Blackfin */ #define bfd_mach_bfin 1 @@ -6182,6 +6509,8 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #define bfd_mach_s390_31 31 #define bfd_mach_s390_64 64 bfd_arch_score, /* Sunplus score */ + #define bfd_mach_score3 3 + #define bfd_mach_score7 7 bfd_arch_openrisc, /* OpenRISC */ bfd_arch_mmix, /* Donald Knuth's educational processor. */ bfd_arch_xstormy16, @@ -6216,6 +6545,9 @@ i960 KB, and 68020 and 68030 for Motorola 68020 and 68030. #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_lm32, /* Lattice Mico32 */ + #define bfd_mach_lm32 1 + bfd_arch_microblaze,/* Xilinx MicroBlaze. */ bfd_arch_last }; @@ -7113,9 +7445,9 @@ function can assume about the hash table is that it is derived from 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. +function. In such a case the output bfd xvec 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 @@ -7126,8 +7458,8 @@ 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. +output bfd 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 @@ -7367,6 +7699,31 @@ link. #define bfd_section_already_linked(abfd, sec, info) \ BFD_SEND (abfd, _section_already_linked, (abfd, sec, info)) +2.17.3.6 `bfd_generic_define_common_symbol' +........................................... + +*Synopsis* + bfd_boolean bfd_generic_define_common_symbol + (bfd *output_bfd, struct bfd_link_info *info, + struct bfd_link_hash_entry *h); + *Description* +Convert common symbol H into a defined symbol. Return TRUE on success +and FALSE on failure. + #define bfd_define_common_symbol(output_bfd, info, h) \ + BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h)) + +2.17.3.7 `bfd_find_version_for_sym ' +.................................... + +*Synopsis* + struct bfd_elf_version_tree * bfd_find_version_for_sym + (struct bfd_elf_version_tree *verdefs, + const char *sym_name, bfd_boolean *hide); + *Description* +Search an elf version script tree for symbol versioning info and export +/ don't-export status for a given symbol. Return non-NULL on success +and NULL on failure; also sets the output `hide' boolean parameter. +  File: bfd.info, Node: Hash Tables, Prev: Linker Functions, Up: BFD front end @@ -7901,7 +8258,65 @@ includes `coffcode.h'. Since the i960 has complex relocation types, This code is not in `coffcode.h' because it would not be used by any other target. -3.3.2.2 Bit twiddling +3.3.2.2 Coff long section names +............................... + +In the standard Coff object format, section names are limited to the +eight bytes available in the `s_name' field of the `SCNHDR' section +header structure. The format requires the field to be NUL-padded, but +not necessarily NUL-terminated, so the longest section names permitted +are a full eight characters. + + The Microsoft PE variants of the Coff object file format add an +extension to support the use of long section names. This extension is +defined in section 4 of the Microsoft PE/COFF specification (rev 8.1). +If a section name is too long to fit into the section header's `s_name' +field, it is instead placed into the string table, and the `s_name' +field is filled with a slash ("/") followed by the ASCII decimal +representation of the offset of the full name relative to the string +table base. + + Note that this implies that the extension can only be used in object +files, as executables do not contain a string table. The standard +specifies that long section names from objects emitted into executable +images are to be truncated. + + However, as a GNU extension, BFD can generate executable images that +contain a string table and long section names. This would appear to be +technically valid, as the standard only says that Coff debugging +information is deprecated, not forbidden, and in practice it works, +although some tools that parse PE files expecting the MS standard +format may become confused; `PEview' is one known example. + + The functionality is supported in BFD by code implemented under the +control of the macro `COFF_LONG_SECTION_NAMES'. If not defined, the +format does not support long section names in any way. If defined, it +is used to initialise a flag, `_bfd_coff_long_section_names', and a +hook function pointer, `_bfd_coff_set_long_section_names', in the Coff +backend data structure. The flag controls the generation of long +section names in output BFDs at runtime; if it is false, as it will be +by default when generating an executable image, long section names are +truncated; if true, the long section names extension is employed. The +hook points to a function that allows the value of the flag to be +altered at runtime, on formats that support long section names at all; +on other formats it points to a stub that returns an error indication. +With input BFDs, the flag is set according to whether any long section +names are detected while reading the section headers. For a completely +new BFD, the flag is set to the default for the target format. This +information can be used by a client of the BFD library when deciding +what output format to generate, and means that a BFD that is opened for +read and subsequently converted to a writeable BFD and modified +in-place will retain whatever format it had on input. + + If `COFF_LONG_SECTION_NAMES' is simply defined (blank), or is +defined to the value "1", then long section names are enabled by +default; if it is defined to the value zero, they are disabled by +default (but still accepted in input BFDs). The header `coffcode.h' +defines a macro, `COFF_DEFAULT_LONG_SECTION_NAMES', which is used in +the backends to initialise the backend data structure fields +appropriately; see the comments for further detail. + +3.3.2.3 Bit twiddling ..................... Each flavour of coff supported in BFD has its own header file @@ -7931,7 +8346,7 @@ 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.3.2.3 Symbol reading +3.3.2.4 Symbol reading ...................... The simple canonical form for symbols used by BFD is not rich enough to @@ -7969,7 +8384,7 @@ 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.3.2.4 Symbol writing +3.3.2.5 Symbol writing ...................... Writing a symbol to a coff file which didn't come from a coff file will @@ -8011,7 +8426,7 @@ into the symbol table of the asymbol. symbols from their internal form into the coff way, calls the bit twiddlers, and writes out the table to the file. -3.3.2.5 `coff_symbol_type' +3.3.2.6 `coff_symbol_type' .......................... *Description* @@ -8072,7 +8487,7 @@ The hidden information for an `asymbol' is described in a bfd_boolean done_lineno; } coff_symbol_type; -3.3.2.6 `bfd_coff_backend_data' +3.3.2.7 `bfd_coff_backend_data' ............................... /* COFF symbol classifications. */ @@ -8132,7 +8547,11 @@ Special entry points for gdb to swap in coff symbol table parts: unsigned int _bfd_linesz; unsigned int _bfd_filnmlen; bfd_boolean _bfd_coff_long_filenames; + bfd_boolean _bfd_coff_long_section_names; + bfd_boolean (*_bfd_coff_set_long_section_names) + (bfd *, int); + unsigned int _bfd_coff_default_section_alignment_power; bfd_boolean _bfd_coff_force_symnames_in_strings; unsigned int _bfd_coff_debug_string_prefix_length; @@ -8219,6 +8638,9 @@ Special entry points for gdb to swap in coff symbol table parts: bfd_boolean (*_bfd_coff_final_link_postscript) (bfd *, struct coff_final_link_info *); + bfd_boolean (*_bfd_coff_print_pdata) + (bfd *, void *); + } bfd_coff_backend_data; #define coff_backend_info(abfd) \ @@ -8266,6 +8688,8 @@ Special entry points for gdb to swap in coff symbol table parts: (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_set_long_section_names(abfd, enable) \ + ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable)) #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) \ @@ -8351,7 +8775,17 @@ Special entry points for gdb to swap in coff symbol table parts: #define bfd_coff_final_link_postscript(a,p) \ ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) -3.3.2.7 Writing relocations + #define bfd_coff_have_print_pdata(a) \ + (coff_backend_info (a)->_bfd_coff_print_pdata) + #define bfd_coff_print_pdata(a,p) \ + ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p)) + + /* Macro: Returns true if the bfd is a PE executable as opposed to a + PE object file. */ + #define bfd_pei_p(abfd) \ + (CONST_STRNEQ ((abfd)->xvec->name, "pei-")) + +3.3.2.8 Writing relocations ........................... To write relocations, the back end steps though the canonical @@ -8362,7 +8796,7 @@ 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.3.2.8 Reading linenumbers +3.3.2.9 Reading linenumbers ........................... Creating the linenumber table is done by reading in the entire coff @@ -8382,8 +8816,8 @@ and each symbol which marks a function is marked by pointing its... How does this work ? -3.3.2.9 Reading relocations -........................... +3.3.2.10 Reading relocations +............................ Coff relocations are easily transformed into the internal BFD form (`arelent'). @@ -8420,18 +8854,6 @@ supported back ends are for sparc and i386 (running svr4 or Solaris 2). written. The code is changing quickly enough that we haven't bothered yet. -3.4.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 @@ -8783,27 +9205,23 @@ the DWARF 2 debugging format.  File: bfd.info, Node: GNU Free Documentation License, Next: BFD Index, Prev: BFD back ends, Up: Top -Appendix A GNU Free Documentation License -***************************************** + Version 1.3, 3 November 2008 - Version 1.1, March 2000 - - Copyright (C) 2000, 2003 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' 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. + functional and useful 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. @@ -8819,60 +9237,71 @@ Appendix A GNU Free Documentation License 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." + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. - A "Secondary Section" is a named appendix or a front-matter - section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the - Document's overall subject (or to related matters) and contains - nothing that could fall directly within that overall subject. - (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. + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this - License. + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly - and straightforwardly with generic text editors or (for images + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup has been designed - to thwart or discourage subsequent modification by readers is not - Transparent. A copy that is not "Transparent" is called "Opaque." + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain 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. + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF + produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the @@ -8881,6 +9310,25 @@ Appendix A GNU Free Documentation License Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either @@ -8899,10 +9347,11 @@ Appendix A GNU Free Documentation License 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 + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the @@ -8920,11 +9369,10 @@ Appendix A GNU Free Documentation License 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 + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated @@ -8947,57 +9395,75 @@ Appendix A GNU Free Documentation License 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. + 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 fewer than five), unless they release you + from this requirement. + + 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", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + 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. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + 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 to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no @@ -9007,11 +9473,11 @@ Appendix A GNU Free Documentation License 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 standard. + 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 @@ -9035,7 +9501,8 @@ Appendix A GNU Free Documentation License 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. + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -9047,11 +9514,11 @@ Appendix A GNU Free Documentation License the list of Invariant Sections in the license notice of the combined work. - In the combination, you must combine any sections entitled + 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." + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS @@ -9072,20 +9539,20 @@ Appendix A GNU Free Documentation License 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. + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one - 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. + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. 8. TRANSLATION @@ -9095,20 +9562,45 @@ Appendix A GNU Free Documentation License 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. + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. 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. + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE @@ -9116,7 +9608,7 @@ Appendix A GNU Free Documentation License 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/. + `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered @@ -9126,7 +9618,40 @@ Appendix A GNU Free Documentation License 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. + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents @@ -9136,19 +9661,24 @@ 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." + 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.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. - 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 you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of @@ -9194,38 +9724,38 @@ BFD Index (line 210) * bfd_alloc2: Opening and Closing. (line 219) -* bfd_alt_mach_code: BFD front end. (line 602) -* bfd_arch_bits_per_address: Architectures. (line 490) -* bfd_arch_bits_per_byte: Architectures. (line 482) -* bfd_arch_get_compatible: Architectures. (line 425) -* bfd_arch_list: Architectures. (line 416) -* bfd_arch_mach_octets_per_byte: Architectures. (line 559) -* BFD_ARELOC_BFIN_ADD: howto manager. (line 944) -* BFD_ARELOC_BFIN_ADDR: howto manager. (line 995) -* BFD_ARELOC_BFIN_AND: howto manager. (line 965) -* BFD_ARELOC_BFIN_COMP: howto manager. (line 986) -* BFD_ARELOC_BFIN_CONST: howto manager. (line 941) -* BFD_ARELOC_BFIN_DIV: howto manager. (line 953) -* BFD_ARELOC_BFIN_HWPAGE: howto manager. (line 992) -* BFD_ARELOC_BFIN_LAND: howto manager. (line 974) -* BFD_ARELOC_BFIN_LEN: howto manager. (line 980) -* BFD_ARELOC_BFIN_LOR: howto manager. (line 977) -* BFD_ARELOC_BFIN_LSHIFT: howto manager. (line 959) -* BFD_ARELOC_BFIN_MOD: howto manager. (line 956) -* BFD_ARELOC_BFIN_MULT: howto manager. (line 950) -* BFD_ARELOC_BFIN_NEG: howto manager. (line 983) -* BFD_ARELOC_BFIN_OR: howto manager. (line 968) -* BFD_ARELOC_BFIN_PAGE: howto manager. (line 989) -* BFD_ARELOC_BFIN_PUSH: howto manager. (line 938) -* BFD_ARELOC_BFIN_RSHIFT: howto manager. (line 962) -* BFD_ARELOC_BFIN_SUB: howto manager. (line 947) -* BFD_ARELOC_BFIN_XOR: howto manager. (line 971) +* bfd_alt_mach_code: BFD front end. (line 689) +* bfd_arch_bits_per_address: Architectures. (line 517) +* bfd_arch_bits_per_byte: Architectures. (line 509) +* bfd_arch_get_compatible: Architectures. (line 452) +* bfd_arch_list: Architectures. (line 443) +* bfd_arch_mach_octets_per_byte: Architectures. (line 586) +* BFD_ARELOC_BFIN_ADD: howto manager. (line 1005) +* BFD_ARELOC_BFIN_ADDR: howto manager. (line 1056) +* BFD_ARELOC_BFIN_AND: howto manager. (line 1026) +* BFD_ARELOC_BFIN_COMP: howto manager. (line 1047) +* BFD_ARELOC_BFIN_CONST: howto manager. (line 1002) +* BFD_ARELOC_BFIN_DIV: howto manager. (line 1014) +* BFD_ARELOC_BFIN_HWPAGE: howto manager. (line 1053) +* BFD_ARELOC_BFIN_LAND: howto manager. (line 1035) +* BFD_ARELOC_BFIN_LEN: howto manager. (line 1041) +* BFD_ARELOC_BFIN_LOR: howto manager. (line 1038) +* BFD_ARELOC_BFIN_LSHIFT: howto manager. (line 1020) +* BFD_ARELOC_BFIN_MOD: howto manager. (line 1017) +* BFD_ARELOC_BFIN_MULT: howto manager. (line 1011) +* BFD_ARELOC_BFIN_NEG: howto manager. (line 1044) +* BFD_ARELOC_BFIN_OR: howto manager. (line 1029) +* BFD_ARELOC_BFIN_PAGE: howto manager. (line 1050) +* BFD_ARELOC_BFIN_PUSH: howto manager. (line 999) +* BFD_ARELOC_BFIN_RSHIFT: howto manager. (line 1023) +* BFD_ARELOC_BFIN_SUB: howto manager. (line 1008) +* BFD_ARELOC_BFIN_XOR: howto manager. (line 1032) * 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 246) -* bfd_canonicalize_reloc: BFD front end. (line 321) +* bfd_canonicalize_reloc: BFD front end. (line 408) * bfd_canonicalize_symtab: symbol handling functions. (line 50) * bfd_check_format: Formats. (line 21) @@ -9235,9 +9765,9 @@ BFD Index (line 135) * bfd_close_all_done: Opening and Closing. (line 153) -* bfd_coff_backend_data: coff. (line 246) -* bfd_copy_private_bfd_data: BFD front end. (line 460) -* bfd_copy_private_header_data: BFD front end. (line 442) +* bfd_coff_backend_data: coff. (line 304) +* bfd_copy_private_bfd_data: BFD front end. (line 547) +* bfd_copy_private_header_data: BFD front end. (line 529) * bfd_copy_private_section_data: section prototypes. (line 255) * bfd_copy_private_symbol_data: symbol handling functions. (line 140) @@ -9249,52 +9779,55 @@ BFD Index (line 312) * bfd_decode_symclass: symbol handling functions. (line 111) -* bfd_default_arch_struct: Architectures. (line 437) -* bfd_default_compatible: Architectures. (line 499) -* bfd_default_reloc_type_lookup: howto manager. (line 2081) -* bfd_default_scan: Architectures. (line 508) -* bfd_default_set_arch_mach: Architectures. (line 455) -* bfd_demangle: BFD front end. (line 700) -* bfd_elf_find_section: elf. (line 13) -* bfd_emul_get_commonpagesize: BFD front end. (line 680) -* bfd_emul_get_maxpagesize: BFD front end. (line 660) -* bfd_emul_set_commonpagesize: BFD front end. (line 691) -* bfd_emul_set_maxpagesize: BFD front end. (line 671) -* bfd_errmsg: BFD front end. (line 246) +* bfd_default_arch_struct: Architectures. (line 464) +* bfd_default_compatible: Architectures. (line 526) +* bfd_default_reloc_type_lookup: howto manager. (line 2247) +* bfd_default_scan: Architectures. (line 535) +* bfd_default_set_arch_mach: Architectures. (line 482) +* bfd_demangle: BFD front end. (line 787) +* bfd_emul_get_commonpagesize: BFD front end. (line 767) +* bfd_emul_get_maxpagesize: BFD front end. (line 747) +* bfd_emul_set_commonpagesize: BFD front end. (line 778) +* bfd_emul_set_maxpagesize: BFD front end. (line 758) +* bfd_errmsg: BFD front end. (line 333) * bfd_fdopenr: Opening and Closing. (line 46) * bfd_fill_in_gnu_debuglink_section: Opening and Closing. (line 326) -* bfd_find_target: bfd_target. (line 439) +* bfd_find_target: bfd_target. (line 445) +* bfd_find_version_for_sym: Writing the symbol table. + (line 80) * bfd_follow_gnu_debuglink: Opening and Closing. (line 291) * bfd_fopen: Opening and Closing. (line 9) * bfd_format_string: Formats. (line 79) +* bfd_generic_define_common_symbol: Writing the symbol table. + (line 67) * bfd_generic_discard_group: section prototypes. (line 281) -* bfd_generic_gc_sections: howto manager. (line 2112) -* bfd_generic_get_relocated_section_contents: howto manager. (line 2132) +* bfd_generic_gc_sections: howto manager. (line 2278) +* bfd_generic_get_relocated_section_contents: howto manager. (line 2298) * bfd_generic_is_group_section: section prototypes. (line 273) -* bfd_generic_merge_sections: howto manager. (line 2122) -* bfd_generic_relax_section: howto manager. (line 2099) -* bfd_get_arch: Architectures. (line 466) -* bfd_get_arch_info: Architectures. (line 518) -* bfd_get_arch_size: BFD front end. (line 365) -* bfd_get_error: BFD front end. (line 227) -* bfd_get_error_handler: BFD front end. (line 297) -* bfd_get_gp_size: BFD front end. (line 406) -* bfd_get_mach: Architectures. (line 474) -* bfd_get_mtime: BFD front end. (line 741) +* bfd_generic_merge_sections: howto manager. (line 2288) +* bfd_generic_relax_section: howto manager. (line 2265) +* bfd_get_arch: Architectures. (line 493) +* bfd_get_arch_info: Architectures. (line 545) +* bfd_get_arch_size: BFD front end. (line 452) +* bfd_get_error: BFD front end. (line 314) +* bfd_get_error_handler: BFD front end. (line 384) +* bfd_get_gp_size: BFD front end. (line 493) +* bfd_get_mach: Architectures. (line 501) +* bfd_get_mtime: BFD front end. (line 831) * bfd_get_next_mapent: Archives. (line 52) -* bfd_get_reloc_code_name: howto manager. (line 2090) +* bfd_get_reloc_code_name: howto manager. (line 2256) * bfd_get_reloc_size: typedef arelent. (line 330) -* bfd_get_reloc_upper_bound: BFD front end. (line 311) +* bfd_get_reloc_upper_bound: BFD front end. (line 398) * 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 378) +* bfd_get_sign_extend_vma: BFD front end. (line 465) * bfd_get_size <1>: Internal. (line 25) -* bfd_get_size: BFD front end. (line 750) +* bfd_get_size: BFD front end. (line 840) * bfd_get_symtab_upper_bound: symbol handling functions. (line 6) * bfd_get_unique_section_name: section prototypes. (line 50) @@ -9328,7 +9861,7 @@ BFD Index * bfd_link_split_section: Writing the symbol table. (line 44) * bfd_log2: Internal. (line 164) -* bfd_lookup_arch: Architectures. (line 526) +* bfd_lookup_arch: Architectures. (line 553) * bfd_make_debug_symbol: symbol handling functions. (line 102) * bfd_make_empty_symbol: symbol handling functions. @@ -9344,8 +9877,9 @@ BFD Index (line 182) * 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 476) -* bfd_octets_per_byte: Architectures. (line 549) +* bfd_merge_private_bfd_data: BFD front end. (line 563) +* bfd_mmap: BFD front end. (line 869) +* bfd_octets_per_byte: Architectures. (line 576) * bfd_open_file: File Caching. (line 52) * bfd_openr: Opening and Closing. (line 30) @@ -9357,152 +9891,153 @@ BFD Index * bfd_openw: Opening and Closing. (line 123) * bfd_perform_relocation: typedef arelent. (line 367) -* bfd_perror: BFD front end. (line 255) -* bfd_preserve_finish: BFD front end. (line 650) -* bfd_preserve_restore: BFD front end. (line 640) -* bfd_preserve_save: BFD front end. (line 624) +* bfd_perror: BFD front end. (line 342) +* bfd_preserve_finish: BFD front end. (line 737) +* bfd_preserve_restore: BFD front end. (line 727) +* bfd_preserve_save: BFD front end. (line 711) * bfd_print_symbol_vandf: symbol handling functions. (line 70) -* bfd_printable_arch_mach: Architectures. (line 537) -* bfd_printable_name: Architectures. (line 397) +* bfd_printable_arch_mach: Architectures. (line 564) +* bfd_printable_name: Architectures. (line 424) * 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_BASEREL: howto manager. (line 95) * 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_PCREL_S2: howto manager. (line 107) * BFD_RELOC_16_PLT_PCREL: howto manager. (line 63) * BFD_RELOC_16_PLTOFF: howto manager. (line 67) -* BFD_RELOC_16C_ABS20: howto manager. (line 1771) -* BFD_RELOC_16C_ABS20_C: howto manager. (line 1772) -* BFD_RELOC_16C_ABS24: howto manager. (line 1773) -* BFD_RELOC_16C_ABS24_C: howto manager. (line 1774) -* BFD_RELOC_16C_DISP04: howto manager. (line 1751) -* BFD_RELOC_16C_DISP04_C: howto manager. (line 1752) -* BFD_RELOC_16C_DISP08: howto manager. (line 1753) -* BFD_RELOC_16C_DISP08_C: howto manager. (line 1754) -* BFD_RELOC_16C_DISP16: howto manager. (line 1755) -* BFD_RELOC_16C_DISP16_C: howto manager. (line 1756) -* BFD_RELOC_16C_DISP24: howto manager. (line 1757) -* BFD_RELOC_16C_DISP24_C: howto manager. (line 1758) -* BFD_RELOC_16C_DISP24a: howto manager. (line 1759) -* BFD_RELOC_16C_DISP24a_C: howto manager. (line 1760) -* BFD_RELOC_16C_IMM04: howto manager. (line 1775) -* BFD_RELOC_16C_IMM04_C: howto manager. (line 1776) -* BFD_RELOC_16C_IMM16: howto manager. (line 1777) -* BFD_RELOC_16C_IMM16_C: howto manager. (line 1778) -* BFD_RELOC_16C_IMM20: howto manager. (line 1779) -* BFD_RELOC_16C_IMM20_C: howto manager. (line 1780) -* BFD_RELOC_16C_IMM24: howto manager. (line 1781) -* BFD_RELOC_16C_IMM24_C: howto manager. (line 1782) -* BFD_RELOC_16C_IMM32: howto manager. (line 1783) -* BFD_RELOC_16C_IMM32_C: howto manager. (line 1784) -* BFD_RELOC_16C_NUM08: howto manager. (line 1745) -* BFD_RELOC_16C_NUM08_C: howto manager. (line 1746) -* BFD_RELOC_16C_NUM16: howto manager. (line 1747) -* BFD_RELOC_16C_NUM16_C: howto manager. (line 1748) -* BFD_RELOC_16C_NUM32: howto manager. (line 1749) -* BFD_RELOC_16C_NUM32_C: howto manager. (line 1750) -* BFD_RELOC_16C_REG04: howto manager. (line 1761) -* BFD_RELOC_16C_REG04_C: howto manager. (line 1762) -* BFD_RELOC_16C_REG04a: howto manager. (line 1763) -* BFD_RELOC_16C_REG04a_C: howto manager. (line 1764) -* BFD_RELOC_16C_REG14: howto manager. (line 1765) -* BFD_RELOC_16C_REG14_C: howto manager. (line 1766) -* BFD_RELOC_16C_REG16: howto manager. (line 1767) -* BFD_RELOC_16C_REG16_C: howto manager. (line 1768) -* BFD_RELOC_16C_REG20: howto manager. (line 1769) -* BFD_RELOC_16C_REG20_C: howto manager. (line 1770) -* BFD_RELOC_23_PCREL_S2: howto manager. (line 93) +* BFD_RELOC_16C_ABS20: howto manager. (line 1838) +* BFD_RELOC_16C_ABS20_C: howto manager. (line 1839) +* BFD_RELOC_16C_ABS24: howto manager. (line 1840) +* BFD_RELOC_16C_ABS24_C: howto manager. (line 1841) +* BFD_RELOC_16C_DISP04: howto manager. (line 1818) +* BFD_RELOC_16C_DISP04_C: howto manager. (line 1819) +* BFD_RELOC_16C_DISP08: howto manager. (line 1820) +* BFD_RELOC_16C_DISP08_C: howto manager. (line 1821) +* BFD_RELOC_16C_DISP16: howto manager. (line 1822) +* BFD_RELOC_16C_DISP16_C: howto manager. (line 1823) +* BFD_RELOC_16C_DISP24: howto manager. (line 1824) +* BFD_RELOC_16C_DISP24_C: howto manager. (line 1825) +* BFD_RELOC_16C_DISP24a: howto manager. (line 1826) +* BFD_RELOC_16C_DISP24a_C: howto manager. (line 1827) +* BFD_RELOC_16C_IMM04: howto manager. (line 1842) +* BFD_RELOC_16C_IMM04_C: howto manager. (line 1843) +* BFD_RELOC_16C_IMM16: howto manager. (line 1844) +* BFD_RELOC_16C_IMM16_C: howto manager. (line 1845) +* BFD_RELOC_16C_IMM20: howto manager. (line 1846) +* BFD_RELOC_16C_IMM20_C: howto manager. (line 1847) +* BFD_RELOC_16C_IMM24: howto manager. (line 1848) +* BFD_RELOC_16C_IMM24_C: howto manager. (line 1849) +* BFD_RELOC_16C_IMM32: howto manager. (line 1850) +* BFD_RELOC_16C_IMM32_C: howto manager. (line 1851) +* BFD_RELOC_16C_NUM08: howto manager. (line 1812) +* BFD_RELOC_16C_NUM08_C: howto manager. (line 1813) +* BFD_RELOC_16C_NUM16: howto manager. (line 1814) +* BFD_RELOC_16C_NUM16_C: howto manager. (line 1815) +* BFD_RELOC_16C_NUM32: howto manager. (line 1816) +* BFD_RELOC_16C_NUM32_C: howto manager. (line 1817) +* BFD_RELOC_16C_REG04: howto manager. (line 1828) +* BFD_RELOC_16C_REG04_C: howto manager. (line 1829) +* BFD_RELOC_16C_REG04a: howto manager. (line 1830) +* BFD_RELOC_16C_REG04a_C: howto manager. (line 1831) +* BFD_RELOC_16C_REG14: howto manager. (line 1832) +* BFD_RELOC_16C_REG14_C: howto manager. (line 1833) +* BFD_RELOC_16C_REG16: howto manager. (line 1834) +* BFD_RELOC_16C_REG16_C: howto manager. (line 1835) +* BFD_RELOC_16C_REG20: howto manager. (line 1836) +* BFD_RELOC_16C_REG20_C: howto manager. (line 1837) +* BFD_RELOC_23_PCREL_S2: howto manager. (line 108) * 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_BASEREL: howto manager. (line 94) * 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_PCREL_S2: howto manager. (line 106) * 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 451) -* BFD_RELOC_386_GLOB_DAT: howto manager. (line 452) -* BFD_RELOC_386_GOT32: howto manager. (line 449) -* BFD_RELOC_386_GOTOFF: howto manager. (line 455) -* BFD_RELOC_386_GOTPC: howto manager. (line 456) -* BFD_RELOC_386_JUMP_SLOT: howto manager. (line 453) -* BFD_RELOC_386_PLT32: howto manager. (line 450) -* BFD_RELOC_386_RELATIVE: howto manager. (line 454) -* BFD_RELOC_386_TLS_DESC: howto manager. (line 471) -* BFD_RELOC_386_TLS_DESC_CALL: howto manager. (line 470) -* BFD_RELOC_386_TLS_DTPMOD32: howto manager. (line 466) -* BFD_RELOC_386_TLS_DTPOFF32: howto manager. (line 467) -* BFD_RELOC_386_TLS_GD: howto manager. (line 461) -* BFD_RELOC_386_TLS_GOTDESC: howto manager. (line 469) -* BFD_RELOC_386_TLS_GOTIE: howto manager. (line 459) -* BFD_RELOC_386_TLS_IE: howto manager. (line 458) -* BFD_RELOC_386_TLS_IE_32: howto manager. (line 464) -* BFD_RELOC_386_TLS_LDM: howto manager. (line 462) -* BFD_RELOC_386_TLS_LDO_32: howto manager. (line 463) -* BFD_RELOC_386_TLS_LE: howto manager. (line 460) -* BFD_RELOC_386_TLS_LE_32: howto manager. (line 465) -* BFD_RELOC_386_TLS_TPOFF: howto manager. (line 457) -* BFD_RELOC_386_TLS_TPOFF32: howto manager. (line 468) -* BFD_RELOC_390_12: howto manager. (line 1437) -* BFD_RELOC_390_20: howto manager. (line 1537) -* BFD_RELOC_390_COPY: howto manager. (line 1446) -* BFD_RELOC_390_GLOB_DAT: howto manager. (line 1449) -* BFD_RELOC_390_GOT12: howto manager. (line 1440) -* BFD_RELOC_390_GOT16: howto manager. (line 1461) -* BFD_RELOC_390_GOT20: howto manager. (line 1538) -* BFD_RELOC_390_GOT64: howto manager. (line 1479) -* BFD_RELOC_390_GOTENT: howto manager. (line 1485) -* BFD_RELOC_390_GOTOFF64: howto manager. (line 1488) -* BFD_RELOC_390_GOTPC: howto manager. (line 1458) -* BFD_RELOC_390_GOTPCDBL: howto manager. (line 1476) -* BFD_RELOC_390_GOTPLT12: howto manager. (line 1491) -* BFD_RELOC_390_GOTPLT16: howto manager. (line 1494) -* BFD_RELOC_390_GOTPLT20: howto manager. (line 1539) -* BFD_RELOC_390_GOTPLT32: howto manager. (line 1497) -* BFD_RELOC_390_GOTPLT64: howto manager. (line 1500) -* BFD_RELOC_390_GOTPLTENT: howto manager. (line 1503) -* BFD_RELOC_390_JMP_SLOT: howto manager. (line 1452) -* BFD_RELOC_390_PC16DBL: howto manager. (line 1464) -* BFD_RELOC_390_PC32DBL: howto manager. (line 1470) -* BFD_RELOC_390_PLT16DBL: howto manager. (line 1467) -* BFD_RELOC_390_PLT32: howto manager. (line 1443) -* BFD_RELOC_390_PLT32DBL: howto manager. (line 1473) -* BFD_RELOC_390_PLT64: howto manager. (line 1482) -* BFD_RELOC_390_PLTOFF16: howto manager. (line 1506) -* BFD_RELOC_390_PLTOFF32: howto manager. (line 1509) -* BFD_RELOC_390_PLTOFF64: howto manager. (line 1512) -* BFD_RELOC_390_RELATIVE: howto manager. (line 1455) -* BFD_RELOC_390_TLS_DTPMOD: howto manager. (line 1532) -* BFD_RELOC_390_TLS_DTPOFF: howto manager. (line 1533) -* BFD_RELOC_390_TLS_GD32: howto manager. (line 1518) -* BFD_RELOC_390_TLS_GD64: howto manager. (line 1519) -* BFD_RELOC_390_TLS_GDCALL: howto manager. (line 1516) -* BFD_RELOC_390_TLS_GOTIE12: howto manager. (line 1520) -* BFD_RELOC_390_TLS_GOTIE20: howto manager. (line 1540) -* BFD_RELOC_390_TLS_GOTIE32: howto manager. (line 1521) -* BFD_RELOC_390_TLS_GOTIE64: howto manager. (line 1522) -* BFD_RELOC_390_TLS_IE32: howto manager. (line 1525) -* BFD_RELOC_390_TLS_IE64: howto manager. (line 1526) -* BFD_RELOC_390_TLS_IEENT: howto manager. (line 1527) -* BFD_RELOC_390_TLS_LDCALL: howto manager. (line 1517) -* BFD_RELOC_390_TLS_LDM32: howto manager. (line 1523) -* BFD_RELOC_390_TLS_LDM64: howto manager. (line 1524) -* BFD_RELOC_390_TLS_LDO32: howto manager. (line 1530) -* BFD_RELOC_390_TLS_LDO64: howto manager. (line 1531) -* BFD_RELOC_390_TLS_LE32: howto manager. (line 1528) -* BFD_RELOC_390_TLS_LE64: howto manager. (line 1529) -* BFD_RELOC_390_TLS_LOAD: howto manager. (line 1515) -* BFD_RELOC_390_TLS_TPOFF: howto manager. (line 1534) +* BFD_RELOC_386_COPY: howto manager. (line 505) +* BFD_RELOC_386_GLOB_DAT: howto manager. (line 506) +* BFD_RELOC_386_GOT32: howto manager. (line 503) +* BFD_RELOC_386_GOTOFF: howto manager. (line 509) +* BFD_RELOC_386_GOTPC: howto manager. (line 510) +* BFD_RELOC_386_IRELATIVE: howto manager. (line 526) +* BFD_RELOC_386_JUMP_SLOT: howto manager. (line 507) +* BFD_RELOC_386_PLT32: howto manager. (line 504) +* BFD_RELOC_386_RELATIVE: howto manager. (line 508) +* BFD_RELOC_386_TLS_DESC: howto manager. (line 525) +* BFD_RELOC_386_TLS_DESC_CALL: howto manager. (line 524) +* BFD_RELOC_386_TLS_DTPMOD32: howto manager. (line 520) +* BFD_RELOC_386_TLS_DTPOFF32: howto manager. (line 521) +* BFD_RELOC_386_TLS_GD: howto manager. (line 515) +* BFD_RELOC_386_TLS_GOTDESC: howto manager. (line 523) +* BFD_RELOC_386_TLS_GOTIE: howto manager. (line 513) +* BFD_RELOC_386_TLS_IE: howto manager. (line 512) +* BFD_RELOC_386_TLS_IE_32: howto manager. (line 518) +* BFD_RELOC_386_TLS_LDM: howto manager. (line 516) +* BFD_RELOC_386_TLS_LDO_32: howto manager. (line 517) +* BFD_RELOC_386_TLS_LE: howto manager. (line 514) +* BFD_RELOC_386_TLS_LE_32: howto manager. (line 519) +* BFD_RELOC_386_TLS_TPOFF: howto manager. (line 511) +* BFD_RELOC_386_TLS_TPOFF32: howto manager. (line 522) +* BFD_RELOC_390_12: howto manager. (line 1498) +* BFD_RELOC_390_20: howto manager. (line 1598) +* BFD_RELOC_390_COPY: howto manager. (line 1507) +* BFD_RELOC_390_GLOB_DAT: howto manager. (line 1510) +* BFD_RELOC_390_GOT12: howto manager. (line 1501) +* BFD_RELOC_390_GOT16: howto manager. (line 1522) +* BFD_RELOC_390_GOT20: howto manager. (line 1599) +* BFD_RELOC_390_GOT64: howto manager. (line 1540) +* BFD_RELOC_390_GOTENT: howto manager. (line 1546) +* BFD_RELOC_390_GOTOFF64: howto manager. (line 1549) +* BFD_RELOC_390_GOTPC: howto manager. (line 1519) +* BFD_RELOC_390_GOTPCDBL: howto manager. (line 1537) +* BFD_RELOC_390_GOTPLT12: howto manager. (line 1552) +* BFD_RELOC_390_GOTPLT16: howto manager. (line 1555) +* BFD_RELOC_390_GOTPLT20: howto manager. (line 1600) +* BFD_RELOC_390_GOTPLT32: howto manager. (line 1558) +* BFD_RELOC_390_GOTPLT64: howto manager. (line 1561) +* BFD_RELOC_390_GOTPLTENT: howto manager. (line 1564) +* BFD_RELOC_390_JMP_SLOT: howto manager. (line 1513) +* BFD_RELOC_390_PC16DBL: howto manager. (line 1525) +* BFD_RELOC_390_PC32DBL: howto manager. (line 1531) +* BFD_RELOC_390_PLT16DBL: howto manager. (line 1528) +* BFD_RELOC_390_PLT32: howto manager. (line 1504) +* BFD_RELOC_390_PLT32DBL: howto manager. (line 1534) +* BFD_RELOC_390_PLT64: howto manager. (line 1543) +* BFD_RELOC_390_PLTOFF16: howto manager. (line 1567) +* BFD_RELOC_390_PLTOFF32: howto manager. (line 1570) +* BFD_RELOC_390_PLTOFF64: howto manager. (line 1573) +* BFD_RELOC_390_RELATIVE: howto manager. (line 1516) +* BFD_RELOC_390_TLS_DTPMOD: howto manager. (line 1593) +* BFD_RELOC_390_TLS_DTPOFF: howto manager. (line 1594) +* BFD_RELOC_390_TLS_GD32: howto manager. (line 1579) +* BFD_RELOC_390_TLS_GD64: howto manager. (line 1580) +* BFD_RELOC_390_TLS_GDCALL: howto manager. (line 1577) +* BFD_RELOC_390_TLS_GOTIE12: howto manager. (line 1581) +* BFD_RELOC_390_TLS_GOTIE20: howto manager. (line 1601) +* BFD_RELOC_390_TLS_GOTIE32: howto manager. (line 1582) +* BFD_RELOC_390_TLS_GOTIE64: howto manager. (line 1583) +* BFD_RELOC_390_TLS_IE32: howto manager. (line 1586) +* BFD_RELOC_390_TLS_IE64: howto manager. (line 1587) +* BFD_RELOC_390_TLS_IEENT: howto manager. (line 1588) +* BFD_RELOC_390_TLS_LDCALL: howto manager. (line 1578) +* BFD_RELOC_390_TLS_LDM32: howto manager. (line 1584) +* BFD_RELOC_390_TLS_LDM64: howto manager. (line 1585) +* BFD_RELOC_390_TLS_LDO32: howto manager. (line 1591) +* BFD_RELOC_390_TLS_LDO64: howto manager. (line 1592) +* BFD_RELOC_390_TLS_LE32: howto manager. (line 1589) +* BFD_RELOC_390_TLS_LE64: howto manager. (line 1590) +* BFD_RELOC_390_TLS_LOAD: howto manager. (line 1576) +* BFD_RELOC_390_TLS_TPOFF: howto manager. (line 1595) * BFD_RELOC_64: howto manager. (line 26) * BFD_RELOC_64_PCREL: howto manager. (line 35) * BFD_RELOC_64_PLT_PCREL: howto manager. (line 60) @@ -9510,1074 +10045,1158 @@ BFD Index * 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_68K_TLS_GD16: howto manager. (line 78) +* BFD_RELOC_68K_TLS_GD32: howto manager. (line 77) +* BFD_RELOC_68K_TLS_GD8: howto manager. (line 79) +* BFD_RELOC_68K_TLS_IE16: howto manager. (line 87) +* BFD_RELOC_68K_TLS_IE32: howto manager. (line 86) +* BFD_RELOC_68K_TLS_IE8: howto manager. (line 88) +* BFD_RELOC_68K_TLS_LDM16: howto manager. (line 81) +* BFD_RELOC_68K_TLS_LDM32: howto manager. (line 80) +* BFD_RELOC_68K_TLS_LDM8: howto manager. (line 82) +* BFD_RELOC_68K_TLS_LDO16: howto manager. (line 84) +* BFD_RELOC_68K_TLS_LDO32: howto manager. (line 83) +* BFD_RELOC_68K_TLS_LDO8: howto manager. (line 85) +* BFD_RELOC_68K_TLS_LE16: howto manager. (line 90) +* BFD_RELOC_68K_TLS_LE32: howto manager. (line 89) +* BFD_RELOC_68K_TLS_LE8: howto manager. (line 91) * BFD_RELOC_8: howto manager. (line 32) -* BFD_RELOC_860_COPY: howto manager. (line 1879) -* BFD_RELOC_860_GLOB_DAT: howto manager. (line 1880) -* BFD_RELOC_860_HAGOT: howto manager. (line 1905) -* BFD_RELOC_860_HAGOTOFF: howto manager. (line 1906) -* BFD_RELOC_860_HAPC: howto manager. (line 1907) -* BFD_RELOC_860_HIGH: howto manager. (line 1908) -* BFD_RELOC_860_HIGHADJ: howto manager. (line 1904) -* BFD_RELOC_860_HIGOT: howto manager. (line 1909) -* BFD_RELOC_860_HIGOTOFF: howto manager. (line 1910) -* BFD_RELOC_860_JUMP_SLOT: howto manager. (line 1881) -* BFD_RELOC_860_LOGOT0: howto manager. (line 1893) -* BFD_RELOC_860_LOGOT1: howto manager. (line 1895) -* BFD_RELOC_860_LOGOTOFF0: howto manager. (line 1897) -* BFD_RELOC_860_LOGOTOFF1: howto manager. (line 1899) -* BFD_RELOC_860_LOGOTOFF2: howto manager. (line 1901) -* BFD_RELOC_860_LOGOTOFF3: howto manager. (line 1902) -* BFD_RELOC_860_LOPC: howto manager. (line 1903) -* BFD_RELOC_860_LOW0: howto manager. (line 1886) -* BFD_RELOC_860_LOW1: howto manager. (line 1888) -* BFD_RELOC_860_LOW2: howto manager. (line 1890) -* BFD_RELOC_860_LOW3: howto manager. (line 1892) -* BFD_RELOC_860_PC16: howto manager. (line 1885) -* BFD_RELOC_860_PC26: howto manager. (line 1883) -* BFD_RELOC_860_PLT26: howto manager. (line 1884) -* BFD_RELOC_860_RELATIVE: howto manager. (line 1882) -* BFD_RELOC_860_SPGOT0: howto manager. (line 1894) -* BFD_RELOC_860_SPGOT1: howto manager. (line 1896) -* BFD_RELOC_860_SPGOTOFF0: howto manager. (line 1898) -* BFD_RELOC_860_SPGOTOFF1: howto manager. (line 1900) -* BFD_RELOC_860_SPLIT0: howto manager. (line 1887) -* BFD_RELOC_860_SPLIT1: howto manager. (line 1889) -* BFD_RELOC_860_SPLIT2: howto manager. (line 1891) -* BFD_RELOC_8_BASEREL: howto manager. (line 84) -* BFD_RELOC_8_FFnn: howto manager. (line 88) +* BFD_RELOC_860_COPY: howto manager. (line 1966) +* BFD_RELOC_860_GLOB_DAT: howto manager. (line 1967) +* BFD_RELOC_860_HAGOT: howto manager. (line 1992) +* BFD_RELOC_860_HAGOTOFF: howto manager. (line 1993) +* BFD_RELOC_860_HAPC: howto manager. (line 1994) +* BFD_RELOC_860_HIGH: howto manager. (line 1995) +* BFD_RELOC_860_HIGHADJ: howto manager. (line 1991) +* BFD_RELOC_860_HIGOT: howto manager. (line 1996) +* BFD_RELOC_860_HIGOTOFF: howto manager. (line 1997) +* BFD_RELOC_860_JUMP_SLOT: howto manager. (line 1968) +* BFD_RELOC_860_LOGOT0: howto manager. (line 1980) +* BFD_RELOC_860_LOGOT1: howto manager. (line 1982) +* BFD_RELOC_860_LOGOTOFF0: howto manager. (line 1984) +* BFD_RELOC_860_LOGOTOFF1: howto manager. (line 1986) +* BFD_RELOC_860_LOGOTOFF2: howto manager. (line 1988) +* BFD_RELOC_860_LOGOTOFF3: howto manager. (line 1989) +* BFD_RELOC_860_LOPC: howto manager. (line 1990) +* BFD_RELOC_860_LOW0: howto manager. (line 1973) +* BFD_RELOC_860_LOW1: howto manager. (line 1975) +* BFD_RELOC_860_LOW2: howto manager. (line 1977) +* BFD_RELOC_860_LOW3: howto manager. (line 1979) +* BFD_RELOC_860_PC16: howto manager. (line 1972) +* BFD_RELOC_860_PC26: howto manager. (line 1970) +* BFD_RELOC_860_PLT26: howto manager. (line 1971) +* BFD_RELOC_860_RELATIVE: howto manager. (line 1969) +* BFD_RELOC_860_SPGOT0: howto manager. (line 1981) +* BFD_RELOC_860_SPGOT1: howto manager. (line 1983) +* BFD_RELOC_860_SPGOTOFF0: howto manager. (line 1985) +* BFD_RELOC_860_SPGOTOFF1: howto manager. (line 1987) +* BFD_RELOC_860_SPLIT0: howto manager. (line 1974) +* BFD_RELOC_860_SPLIT1: howto manager. (line 1976) +* BFD_RELOC_860_SPLIT2: howto manager. (line 1978) +* BFD_RELOC_8_BASEREL: howto manager. (line 99) +* BFD_RELOC_8_FFnn: howto manager. (line 103) * 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 275) -* BFD_RELOC_ALPHA_CODEADDR: howto manager. (line 266) -* BFD_RELOC_ALPHA_DTPMOD64: howto manager. (line 282) -* BFD_RELOC_ALPHA_DTPREL16: howto manager. (line 287) -* BFD_RELOC_ALPHA_DTPREL64: howto manager. (line 284) -* BFD_RELOC_ALPHA_DTPREL_HI16: howto manager. (line 285) -* BFD_RELOC_ALPHA_DTPREL_LO16: howto manager. (line 286) -* BFD_RELOC_ALPHA_ELF_LITERAL: howto manager. (line 231) -* BFD_RELOC_ALPHA_GOTDTPREL16: howto manager. (line 283) -* BFD_RELOC_ALPHA_GOTTPREL16: howto manager. (line 288) -* BFD_RELOC_ALPHA_GPDISP: howto manager. (line 225) -* BFD_RELOC_ALPHA_GPDISP_HI16: howto manager. (line 211) -* BFD_RELOC_ALPHA_GPDISP_LO16: howto manager. (line 219) -* BFD_RELOC_ALPHA_GPREL_HI16: howto manager. (line 270) -* BFD_RELOC_ALPHA_GPREL_LO16: howto manager. (line 271) -* BFD_RELOC_ALPHA_HINT: howto manager. (line 257) -* BFD_RELOC_ALPHA_LINKAGE: howto manager. (line 262) -* BFD_RELOC_ALPHA_LITERAL: howto manager. (line 230) -* BFD_RELOC_ALPHA_LITUSE: howto manager. (line 232) -* BFD_RELOC_ALPHA_TLSGD: howto manager. (line 280) -* BFD_RELOC_ALPHA_TLSLDM: howto manager. (line 281) -* BFD_RELOC_ALPHA_TPREL16: howto manager. (line 292) -* BFD_RELOC_ALPHA_TPREL64: howto manager. (line 289) -* BFD_RELOC_ALPHA_TPREL_HI16: howto manager. (line 290) -* BFD_RELOC_ALPHA_TPREL_LO16: howto manager. (line 291) -* BFD_RELOC_ARC_B22_PCREL: howto manager. (line 873) -* BFD_RELOC_ARC_B26: howto manager. (line 878) -* BFD_RELOC_ARM_ADR_IMM: howto manager. (line 766) -* BFD_RELOC_ARM_ADRL_IMMEDIATE: howto manager. (line 753) -* BFD_RELOC_ARM_ALU_PC_G0: howto manager. (line 723) -* BFD_RELOC_ARM_ALU_PC_G0_NC: howto manager. (line 722) -* BFD_RELOC_ARM_ALU_PC_G1: howto manager. (line 725) -* BFD_RELOC_ARM_ALU_PC_G1_NC: howto manager. (line 724) -* BFD_RELOC_ARM_ALU_PC_G2: howto manager. (line 726) -* BFD_RELOC_ARM_ALU_SB_G0: howto manager. (line 737) -* BFD_RELOC_ARM_ALU_SB_G0_NC: howto manager. (line 736) -* BFD_RELOC_ARM_ALU_SB_G1: howto manager. (line 739) -* BFD_RELOC_ARM_ALU_SB_G1_NC: howto manager. (line 738) -* BFD_RELOC_ARM_ALU_SB_G2: howto manager. (line 740) -* BFD_RELOC_ARM_CP_OFF_IMM: howto manager. (line 762) -* BFD_RELOC_ARM_CP_OFF_IMM_S2: howto manager. (line 763) -* BFD_RELOC_ARM_GLOB_DAT: howto manager. (line 704) -* BFD_RELOC_ARM_GOT32: howto manager. (line 705) -* BFD_RELOC_ARM_GOTOFF: howto manager. (line 708) -* BFD_RELOC_ARM_GOTPC: howto manager. (line 709) -* BFD_RELOC_ARM_HWLITERAL: howto manager. (line 773) -* BFD_RELOC_ARM_IMMEDIATE: howto manager. (line 752) -* BFD_RELOC_ARM_IN_POOL: howto manager. (line 769) -* BFD_RELOC_ARM_JUMP_SLOT: howto manager. (line 703) -* BFD_RELOC_ARM_LDC_PC_G0: howto manager. (line 733) -* BFD_RELOC_ARM_LDC_PC_G1: howto manager. (line 734) -* BFD_RELOC_ARM_LDC_PC_G2: howto manager. (line 735) -* BFD_RELOC_ARM_LDC_SB_G0: howto manager. (line 747) -* BFD_RELOC_ARM_LDC_SB_G1: howto manager. (line 748) -* BFD_RELOC_ARM_LDC_SB_G2: howto manager. (line 749) -* BFD_RELOC_ARM_LDR_IMM: howto manager. (line 767) -* BFD_RELOC_ARM_LDR_PC_G0: howto manager. (line 727) -* BFD_RELOC_ARM_LDR_PC_G1: howto manager. (line 728) -* BFD_RELOC_ARM_LDR_PC_G2: howto manager. (line 729) -* BFD_RELOC_ARM_LDR_SB_G0: howto manager. (line 741) -* BFD_RELOC_ARM_LDR_SB_G1: howto manager. (line 742) -* BFD_RELOC_ARM_LDR_SB_G2: howto manager. (line 743) -* BFD_RELOC_ARM_LDRS_PC_G0: howto manager. (line 730) -* BFD_RELOC_ARM_LDRS_PC_G1: howto manager. (line 731) -* BFD_RELOC_ARM_LDRS_PC_G2: howto manager. (line 732) -* BFD_RELOC_ARM_LDRS_SB_G0: howto manager. (line 744) -* BFD_RELOC_ARM_LDRS_SB_G1: howto manager. (line 745) -* BFD_RELOC_ARM_LDRS_SB_G2: howto manager. (line 746) -* BFD_RELOC_ARM_LITERAL: howto manager. (line 768) -* BFD_RELOC_ARM_MOVT: howto manager. (line 694) -* BFD_RELOC_ARM_MOVT_PCREL: howto manager. (line 696) -* BFD_RELOC_ARM_MOVW: howto manager. (line 693) -* BFD_RELOC_ARM_MOVW_PCREL: howto manager. (line 695) -* BFD_RELOC_ARM_MULTI: howto manager. (line 761) -* BFD_RELOC_ARM_OFFSET_IMM: howto manager. (line 667) -* BFD_RELOC_ARM_OFFSET_IMM8: howto manager. (line 770) -* BFD_RELOC_ARM_PCREL_BLX: howto manager. (line 638) -* BFD_RELOC_ARM_PCREL_BRANCH: howto manager. (line 634) -* BFD_RELOC_ARM_PCREL_CALL: howto manager. (line 648) -* BFD_RELOC_ARM_PCREL_JUMP: howto manager. (line 652) -* BFD_RELOC_ARM_PLT32: howto manager. (line 706) -* BFD_RELOC_ARM_PREL31: howto manager. (line 690) -* BFD_RELOC_ARM_RELATIVE: howto manager. (line 707) -* BFD_RELOC_ARM_ROSEGREL32: howto manager. (line 679) -* BFD_RELOC_ARM_SBREL32: howto manager. (line 682) -* BFD_RELOC_ARM_SHIFT_IMM: howto manager. (line 758) -* BFD_RELOC_ARM_SMC: howto manager. (line 759) -* BFD_RELOC_ARM_SWI: howto manager. (line 760) -* BFD_RELOC_ARM_T32_ADD_IMM: howto manager. (line 755) -* BFD_RELOC_ARM_T32_ADD_PC12: howto manager. (line 757) -* BFD_RELOC_ARM_T32_CP_OFF_IMM: howto manager. (line 764) -* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2: howto manager. (line 765) -* BFD_RELOC_ARM_T32_IMM12: howto manager. (line 756) -* BFD_RELOC_ARM_T32_IMMEDIATE: howto manager. (line 754) -* BFD_RELOC_ARM_T32_OFFSET_IMM: howto manager. (line 772) -* BFD_RELOC_ARM_T32_OFFSET_U8: howto manager. (line 771) -* BFD_RELOC_ARM_TARGET1: howto manager. (line 675) -* BFD_RELOC_ARM_TARGET2: howto manager. (line 685) -* BFD_RELOC_ARM_THUMB_ADD: howto manager. (line 774) -* BFD_RELOC_ARM_THUMB_IMM: howto manager. (line 775) -* BFD_RELOC_ARM_THUMB_MOVT: howto manager. (line 698) -* BFD_RELOC_ARM_THUMB_MOVT_PCREL: howto manager. (line 700) -* BFD_RELOC_ARM_THUMB_MOVW: howto manager. (line 697) -* BFD_RELOC_ARM_THUMB_MOVW_PCREL: howto manager. (line 699) -* BFD_RELOC_ARM_THUMB_OFFSET: howto manager. (line 671) -* BFD_RELOC_ARM_THUMB_SHIFT: howto manager. (line 776) -* BFD_RELOC_ARM_TLS_DTPMOD32: howto manager. (line 716) -* BFD_RELOC_ARM_TLS_DTPOFF32: howto manager. (line 715) -* BFD_RELOC_ARM_TLS_GD32: howto manager. (line 712) -* BFD_RELOC_ARM_TLS_IE32: howto manager. (line 718) -* BFD_RELOC_ARM_TLS_LDM32: howto manager. (line 714) -* BFD_RELOC_ARM_TLS_LDO32: howto manager. (line 713) -* BFD_RELOC_ARM_TLS_LE32: howto manager. (line 719) -* BFD_RELOC_ARM_TLS_TPOFF32: howto manager. (line 717) -* BFD_RELOC_AVR_13_PCREL: howto manager. (line 1338) -* BFD_RELOC_AVR_16_PM: howto manager. (line 1342) -* BFD_RELOC_AVR_6: howto manager. (line 1429) -* BFD_RELOC_AVR_6_ADIW: howto manager. (line 1433) -* BFD_RELOC_AVR_7_PCREL: howto manager. (line 1334) -* BFD_RELOC_AVR_CALL: howto manager. (line 1421) -* BFD_RELOC_AVR_HH8_LDI: howto manager. (line 1354) -* BFD_RELOC_AVR_HH8_LDI_NEG: howto manager. (line 1373) -* BFD_RELOC_AVR_HH8_LDI_PM: howto manager. (line 1402) -* BFD_RELOC_AVR_HH8_LDI_PM_NEG: howto manager. (line 1416) -* BFD_RELOC_AVR_HI8_LDI: howto manager. (line 1350) -* BFD_RELOC_AVR_HI8_LDI_GS: howto manager. (line 1396) -* BFD_RELOC_AVR_HI8_LDI_NEG: howto manager. (line 1368) -* BFD_RELOC_AVR_HI8_LDI_PM: howto manager. (line 1392) -* BFD_RELOC_AVR_HI8_LDI_PM_NEG: howto manager. (line 1411) -* BFD_RELOC_AVR_LDI: howto manager. (line 1425) -* BFD_RELOC_AVR_LO8_LDI: howto manager. (line 1346) -* BFD_RELOC_AVR_LO8_LDI_GS: howto manager. (line 1386) -* BFD_RELOC_AVR_LO8_LDI_NEG: howto manager. (line 1363) -* BFD_RELOC_AVR_LO8_LDI_PM: howto manager. (line 1382) -* BFD_RELOC_AVR_LO8_LDI_PM_NEG: howto manager. (line 1407) -* BFD_RELOC_AVR_MS8_LDI: howto manager. (line 1359) -* BFD_RELOC_AVR_MS8_LDI_NEG: howto manager. (line 1378) -* BFD_RELOC_BFIN_10_PCREL: howto manager. (line 898) -* BFD_RELOC_BFIN_11_PCREL: howto manager. (line 901) -* BFD_RELOC_BFIN_12_PCREL_JUMP: howto manager. (line 904) -* BFD_RELOC_BFIN_12_PCREL_JUMP_S: howto manager. (line 907) -* BFD_RELOC_BFIN_16_HIGH: howto manager. (line 886) -* BFD_RELOC_BFIN_16_IMM: howto manager. (line 883) -* BFD_RELOC_BFIN_16_LOW: howto manager. (line 895) -* BFD_RELOC_BFIN_24_PCREL_CALL_X: howto manager. (line 910) -* BFD_RELOC_BFIN_24_PCREL_JUMP_L: howto manager. (line 913) -* BFD_RELOC_BFIN_4_PCREL: howto manager. (line 889) -* BFD_RELOC_BFIN_5_PCREL: howto manager. (line 892) -* BFD_RELOC_BFIN_FUNCDESC: howto manager. (line 919) -* BFD_RELOC_BFIN_FUNCDESC_GOT17M4: howto manager. (line 920) -* BFD_RELOC_BFIN_FUNCDESC_GOTHI: howto manager. (line 921) -* BFD_RELOC_BFIN_FUNCDESC_GOTLO: howto manager. (line 922) -* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4: howto manager. (line 924) -* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI: howto manager. (line 925) -* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO: howto manager. (line 926) -* BFD_RELOC_BFIN_FUNCDESC_VALUE: howto manager. (line 923) -* BFD_RELOC_BFIN_GOT: howto manager. (line 932) -* BFD_RELOC_BFIN_GOT17M4: howto manager. (line 916) -* BFD_RELOC_BFIN_GOTHI: howto manager. (line 917) -* BFD_RELOC_BFIN_GOTLO: howto manager. (line 918) -* BFD_RELOC_BFIN_GOTOFF17M4: howto manager. (line 927) -* BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 928) -* BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 929) -* BFD_RELOC_BFIN_PLTPC: howto manager. (line 935) +* BFD_RELOC_ALPHA_BOH: howto manager. (line 313) +* BFD_RELOC_ALPHA_BRSGP: howto manager. (line 296) +* BFD_RELOC_ALPHA_BSR: howto manager. (line 305) +* BFD_RELOC_ALPHA_CODEADDR: howto manager. (line 287) +* BFD_RELOC_ALPHA_DTPMOD64: howto manager. (line 319) +* BFD_RELOC_ALPHA_DTPREL16: howto manager. (line 324) +* BFD_RELOC_ALPHA_DTPREL64: howto manager. (line 321) +* BFD_RELOC_ALPHA_DTPREL_HI16: howto manager. (line 322) +* BFD_RELOC_ALPHA_DTPREL_LO16: howto manager. (line 323) +* BFD_RELOC_ALPHA_ELF_LITERAL: howto manager. (line 252) +* BFD_RELOC_ALPHA_GOTDTPREL16: howto manager. (line 320) +* BFD_RELOC_ALPHA_GOTTPREL16: howto manager. (line 325) +* BFD_RELOC_ALPHA_GPDISP: howto manager. (line 246) +* BFD_RELOC_ALPHA_GPDISP_HI16: howto manager. (line 232) +* BFD_RELOC_ALPHA_GPDISP_LO16: howto manager. (line 240) +* BFD_RELOC_ALPHA_GPREL_HI16: howto manager. (line 291) +* BFD_RELOC_ALPHA_GPREL_LO16: howto manager. (line 292) +* BFD_RELOC_ALPHA_HINT: howto manager. (line 278) +* BFD_RELOC_ALPHA_LDA: howto manager. (line 309) +* BFD_RELOC_ALPHA_LINKAGE: howto manager. (line 283) +* BFD_RELOC_ALPHA_LITERAL: howto manager. (line 251) +* BFD_RELOC_ALPHA_LITUSE: howto manager. (line 253) +* BFD_RELOC_ALPHA_NOP: howto manager. (line 301) +* BFD_RELOC_ALPHA_TLSGD: howto manager. (line 317) +* BFD_RELOC_ALPHA_TLSLDM: howto manager. (line 318) +* BFD_RELOC_ALPHA_TPREL16: howto manager. (line 329) +* BFD_RELOC_ALPHA_TPREL64: howto manager. (line 326) +* BFD_RELOC_ALPHA_TPREL_HI16: howto manager. (line 327) +* BFD_RELOC_ALPHA_TPREL_LO16: howto manager. (line 328) +* BFD_RELOC_ARC_B22_PCREL: howto manager. (line 934) +* BFD_RELOC_ARC_B26: howto manager. (line 939) +* BFD_RELOC_ARM_ADR_IMM: howto manager. (line 827) +* BFD_RELOC_ARM_ADRL_IMMEDIATE: howto manager. (line 814) +* BFD_RELOC_ARM_ALU_PC_G0: howto manager. (line 781) +* BFD_RELOC_ARM_ALU_PC_G0_NC: howto manager. (line 780) +* BFD_RELOC_ARM_ALU_PC_G1: howto manager. (line 783) +* BFD_RELOC_ARM_ALU_PC_G1_NC: howto manager. (line 782) +* BFD_RELOC_ARM_ALU_PC_G2: howto manager. (line 784) +* BFD_RELOC_ARM_ALU_SB_G0: howto manager. (line 795) +* BFD_RELOC_ARM_ALU_SB_G0_NC: howto manager. (line 794) +* BFD_RELOC_ARM_ALU_SB_G1: howto manager. (line 797) +* BFD_RELOC_ARM_ALU_SB_G1_NC: howto manager. (line 796) +* BFD_RELOC_ARM_ALU_SB_G2: howto manager. (line 798) +* BFD_RELOC_ARM_CP_OFF_IMM: howto manager. (line 823) +* BFD_RELOC_ARM_CP_OFF_IMM_S2: howto manager. (line 824) +* BFD_RELOC_ARM_GLOB_DAT: howto manager. (line 762) +* BFD_RELOC_ARM_GOT32: howto manager. (line 763) +* BFD_RELOC_ARM_GOTOFF: howto manager. (line 766) +* BFD_RELOC_ARM_GOTPC: howto manager. (line 767) +* BFD_RELOC_ARM_HWLITERAL: howto manager. (line 834) +* BFD_RELOC_ARM_IMMEDIATE: howto manager. (line 813) +* BFD_RELOC_ARM_IN_POOL: howto manager. (line 830) +* BFD_RELOC_ARM_JUMP_SLOT: howto manager. (line 761) +* BFD_RELOC_ARM_LDC_PC_G0: howto manager. (line 791) +* BFD_RELOC_ARM_LDC_PC_G1: howto manager. (line 792) +* BFD_RELOC_ARM_LDC_PC_G2: howto manager. (line 793) +* BFD_RELOC_ARM_LDC_SB_G0: howto manager. (line 805) +* BFD_RELOC_ARM_LDC_SB_G1: howto manager. (line 806) +* BFD_RELOC_ARM_LDC_SB_G2: howto manager. (line 807) +* BFD_RELOC_ARM_LDR_IMM: howto manager. (line 828) +* BFD_RELOC_ARM_LDR_PC_G0: howto manager. (line 785) +* BFD_RELOC_ARM_LDR_PC_G1: howto manager. (line 786) +* BFD_RELOC_ARM_LDR_PC_G2: howto manager. (line 787) +* BFD_RELOC_ARM_LDR_SB_G0: howto manager. (line 799) +* BFD_RELOC_ARM_LDR_SB_G1: howto manager. (line 800) +* BFD_RELOC_ARM_LDR_SB_G2: howto manager. (line 801) +* BFD_RELOC_ARM_LDRS_PC_G0: howto manager. (line 788) +* BFD_RELOC_ARM_LDRS_PC_G1: howto manager. (line 789) +* BFD_RELOC_ARM_LDRS_PC_G2: howto manager. (line 790) +* BFD_RELOC_ARM_LDRS_SB_G0: howto manager. (line 802) +* BFD_RELOC_ARM_LDRS_SB_G1: howto manager. (line 803) +* BFD_RELOC_ARM_LDRS_SB_G2: howto manager. (line 804) +* BFD_RELOC_ARM_LITERAL: howto manager. (line 829) +* BFD_RELOC_ARM_MOVT: howto manager. (line 752) +* BFD_RELOC_ARM_MOVT_PCREL: howto manager. (line 754) +* BFD_RELOC_ARM_MOVW: howto manager. (line 751) +* BFD_RELOC_ARM_MOVW_PCREL: howto manager. (line 753) +* BFD_RELOC_ARM_MULTI: howto manager. (line 822) +* BFD_RELOC_ARM_OFFSET_IMM: howto manager. (line 725) +* BFD_RELOC_ARM_OFFSET_IMM8: howto manager. (line 831) +* BFD_RELOC_ARM_PCREL_BLX: howto manager. (line 696) +* BFD_RELOC_ARM_PCREL_BRANCH: howto manager. (line 692) +* BFD_RELOC_ARM_PCREL_CALL: howto manager. (line 706) +* BFD_RELOC_ARM_PCREL_JUMP: howto manager. (line 710) +* BFD_RELOC_ARM_PLT32: howto manager. (line 764) +* BFD_RELOC_ARM_PREL31: howto manager. (line 748) +* BFD_RELOC_ARM_RELATIVE: howto manager. (line 765) +* BFD_RELOC_ARM_ROSEGREL32: howto manager. (line 737) +* BFD_RELOC_ARM_SBREL32: howto manager. (line 740) +* BFD_RELOC_ARM_SHIFT_IMM: howto manager. (line 819) +* BFD_RELOC_ARM_SMC: howto manager. (line 820) +* BFD_RELOC_ARM_SWI: howto manager. (line 821) +* BFD_RELOC_ARM_T32_ADD_IMM: howto manager. (line 816) +* BFD_RELOC_ARM_T32_ADD_PC12: howto manager. (line 818) +* BFD_RELOC_ARM_T32_CP_OFF_IMM: howto manager. (line 825) +* BFD_RELOC_ARM_T32_CP_OFF_IMM_S2: howto manager. (line 826) +* BFD_RELOC_ARM_T32_IMM12: howto manager. (line 817) +* BFD_RELOC_ARM_T32_IMMEDIATE: howto manager. (line 815) +* BFD_RELOC_ARM_T32_OFFSET_IMM: howto manager. (line 833) +* BFD_RELOC_ARM_T32_OFFSET_U8: howto manager. (line 832) +* BFD_RELOC_ARM_TARGET1: howto manager. (line 733) +* BFD_RELOC_ARM_TARGET2: howto manager. (line 743) +* BFD_RELOC_ARM_THUMB_ADD: howto manager. (line 835) +* BFD_RELOC_ARM_THUMB_IMM: howto manager. (line 836) +* BFD_RELOC_ARM_THUMB_MOVT: howto manager. (line 756) +* BFD_RELOC_ARM_THUMB_MOVT_PCREL: howto manager. (line 758) +* BFD_RELOC_ARM_THUMB_MOVW: howto manager. (line 755) +* BFD_RELOC_ARM_THUMB_MOVW_PCREL: howto manager. (line 757) +* BFD_RELOC_ARM_THUMB_OFFSET: howto manager. (line 729) +* BFD_RELOC_ARM_THUMB_SHIFT: howto manager. (line 837) +* BFD_RELOC_ARM_TLS_DTPMOD32: howto manager. (line 774) +* BFD_RELOC_ARM_TLS_DTPOFF32: howto manager. (line 773) +* BFD_RELOC_ARM_TLS_GD32: howto manager. (line 770) +* BFD_RELOC_ARM_TLS_IE32: howto manager. (line 776) +* BFD_RELOC_ARM_TLS_LDM32: howto manager. (line 772) +* BFD_RELOC_ARM_TLS_LDO32: howto manager. (line 771) +* BFD_RELOC_ARM_TLS_LE32: howto manager. (line 777) +* BFD_RELOC_ARM_TLS_TPOFF32: howto manager. (line 775) +* BFD_RELOC_ARM_V4BX: howto manager. (line 810) +* BFD_RELOC_AVR_13_PCREL: howto manager. (line 1399) +* BFD_RELOC_AVR_16_PM: howto manager. (line 1403) +* BFD_RELOC_AVR_6: howto manager. (line 1490) +* BFD_RELOC_AVR_6_ADIW: howto manager. (line 1494) +* BFD_RELOC_AVR_7_PCREL: howto manager. (line 1395) +* BFD_RELOC_AVR_CALL: howto manager. (line 1482) +* BFD_RELOC_AVR_HH8_LDI: howto manager. (line 1415) +* BFD_RELOC_AVR_HH8_LDI_NEG: howto manager. (line 1434) +* BFD_RELOC_AVR_HH8_LDI_PM: howto manager. (line 1463) +* BFD_RELOC_AVR_HH8_LDI_PM_NEG: howto manager. (line 1477) +* BFD_RELOC_AVR_HI8_LDI: howto manager. (line 1411) +* BFD_RELOC_AVR_HI8_LDI_GS: howto manager. (line 1457) +* BFD_RELOC_AVR_HI8_LDI_NEG: howto manager. (line 1429) +* BFD_RELOC_AVR_HI8_LDI_PM: howto manager. (line 1453) +* BFD_RELOC_AVR_HI8_LDI_PM_NEG: howto manager. (line 1472) +* BFD_RELOC_AVR_LDI: howto manager. (line 1486) +* BFD_RELOC_AVR_LO8_LDI: howto manager. (line 1407) +* BFD_RELOC_AVR_LO8_LDI_GS: howto manager. (line 1447) +* BFD_RELOC_AVR_LO8_LDI_NEG: howto manager. (line 1424) +* BFD_RELOC_AVR_LO8_LDI_PM: howto manager. (line 1443) +* BFD_RELOC_AVR_LO8_LDI_PM_NEG: howto manager. (line 1468) +* BFD_RELOC_AVR_MS8_LDI: howto manager. (line 1420) +* BFD_RELOC_AVR_MS8_LDI_NEG: howto manager. (line 1439) +* BFD_RELOC_BFIN_10_PCREL: howto manager. (line 959) +* BFD_RELOC_BFIN_11_PCREL: howto manager. (line 962) +* BFD_RELOC_BFIN_12_PCREL_JUMP: howto manager. (line 965) +* BFD_RELOC_BFIN_12_PCREL_JUMP_S: howto manager. (line 968) +* BFD_RELOC_BFIN_16_HIGH: howto manager. (line 947) +* BFD_RELOC_BFIN_16_IMM: howto manager. (line 944) +* BFD_RELOC_BFIN_16_LOW: howto manager. (line 956) +* BFD_RELOC_BFIN_24_PCREL_CALL_X: howto manager. (line 971) +* BFD_RELOC_BFIN_24_PCREL_JUMP_L: howto manager. (line 974) +* BFD_RELOC_BFIN_4_PCREL: howto manager. (line 950) +* BFD_RELOC_BFIN_5_PCREL: howto manager. (line 953) +* BFD_RELOC_BFIN_FUNCDESC: howto manager. (line 980) +* BFD_RELOC_BFIN_FUNCDESC_GOT17M4: howto manager. (line 981) +* BFD_RELOC_BFIN_FUNCDESC_GOTHI: howto manager. (line 982) +* BFD_RELOC_BFIN_FUNCDESC_GOTLO: howto manager. (line 983) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4: howto manager. (line 985) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI: howto manager. (line 986) +* BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO: howto manager. (line 987) +* BFD_RELOC_BFIN_FUNCDESC_VALUE: howto manager. (line 984) +* BFD_RELOC_BFIN_GOT: howto manager. (line 993) +* BFD_RELOC_BFIN_GOT17M4: howto manager. (line 977) +* BFD_RELOC_BFIN_GOTHI: howto manager. (line 978) +* BFD_RELOC_BFIN_GOTLO: howto manager. (line 979) +* BFD_RELOC_BFIN_GOTOFF17M4: howto manager. (line 988) +* BFD_RELOC_BFIN_GOTOFFHI: howto manager. (line 989) +* BFD_RELOC_BFIN_GOTOFFLO: howto manager. (line 990) +* BFD_RELOC_BFIN_PLTPC: howto manager. (line 996) * bfd_reloc_code_type: howto manager. (line 10) -* BFD_RELOC_CR16_ABS20: howto manager. (line 1799) -* BFD_RELOC_CR16_ABS24: howto manager. (line 1800) -* BFD_RELOC_CR16_DISP16: howto manager. (line 1810) -* BFD_RELOC_CR16_DISP20: howto manager. (line 1811) -* BFD_RELOC_CR16_DISP24: howto manager. (line 1812) -* BFD_RELOC_CR16_DISP24a: howto manager. (line 1813) -* BFD_RELOC_CR16_DISP4: howto manager. (line 1808) -* BFD_RELOC_CR16_DISP8: howto manager. (line 1809) -* BFD_RELOC_CR16_IMM16: howto manager. (line 1803) -* BFD_RELOC_CR16_IMM20: howto manager. (line 1804) -* BFD_RELOC_CR16_IMM24: howto manager. (line 1805) -* BFD_RELOC_CR16_IMM32: howto manager. (line 1806) -* BFD_RELOC_CR16_IMM32a: howto manager. (line 1807) -* BFD_RELOC_CR16_IMM4: howto manager. (line 1801) -* BFD_RELOC_CR16_IMM8: howto manager. (line 1802) -* BFD_RELOC_CR16_NUM16: howto manager. (line 1788) -* BFD_RELOC_CR16_NUM32: howto manager. (line 1789) -* BFD_RELOC_CR16_NUM32a: howto manager. (line 1790) -* BFD_RELOC_CR16_NUM8: howto manager. (line 1787) -* BFD_RELOC_CR16_REGREL0: howto manager. (line 1791) -* BFD_RELOC_CR16_REGREL14: howto manager. (line 1794) -* BFD_RELOC_CR16_REGREL14a: howto manager. (line 1795) -* BFD_RELOC_CR16_REGREL16: howto manager. (line 1796) -* BFD_RELOC_CR16_REGREL20: howto manager. (line 1797) -* BFD_RELOC_CR16_REGREL20a: howto manager. (line 1798) -* BFD_RELOC_CR16_REGREL4: howto manager. (line 1792) -* BFD_RELOC_CR16_REGREL4a: howto manager. (line 1793) -* BFD_RELOC_CRIS_16_GOT: howto manager. (line 1860) -* BFD_RELOC_CRIS_16_GOTPLT: howto manager. (line 1866) -* BFD_RELOC_CRIS_32_GOT: howto manager. (line 1857) -* BFD_RELOC_CRIS_32_GOTPLT: howto manager. (line 1863) -* BFD_RELOC_CRIS_32_GOTREL: howto manager. (line 1869) -* BFD_RELOC_CRIS_32_PLT_GOTREL: howto manager. (line 1872) -* BFD_RELOC_CRIS_32_PLT_PCREL: howto manager. (line 1875) -* BFD_RELOC_CRIS_BDISP8: howto manager. (line 1838) -* BFD_RELOC_CRIS_COPY: howto manager. (line 1851) -* BFD_RELOC_CRIS_GLOB_DAT: howto manager. (line 1852) -* BFD_RELOC_CRIS_JUMP_SLOT: howto manager. (line 1853) -* BFD_RELOC_CRIS_LAPCQ_OFFSET: howto manager. (line 1846) -* BFD_RELOC_CRIS_RELATIVE: howto manager. (line 1854) -* BFD_RELOC_CRIS_SIGNED_16: howto manager. (line 1844) -* BFD_RELOC_CRIS_SIGNED_6: howto manager. (line 1840) -* BFD_RELOC_CRIS_SIGNED_8: howto manager. (line 1842) -* BFD_RELOC_CRIS_UNSIGNED_16: howto manager. (line 1845) -* BFD_RELOC_CRIS_UNSIGNED_4: howto manager. (line 1847) -* BFD_RELOC_CRIS_UNSIGNED_5: howto manager. (line 1839) -* BFD_RELOC_CRIS_UNSIGNED_6: howto manager. (line 1841) -* BFD_RELOC_CRIS_UNSIGNED_8: howto manager. (line 1843) -* BFD_RELOC_CRX_ABS16: howto manager. (line 1826) -* BFD_RELOC_CRX_ABS32: howto manager. (line 1827) -* BFD_RELOC_CRX_IMM16: howto manager. (line 1831) -* BFD_RELOC_CRX_IMM32: howto manager. (line 1832) -* BFD_RELOC_CRX_NUM16: howto manager. (line 1829) -* BFD_RELOC_CRX_NUM32: howto manager. (line 1830) -* BFD_RELOC_CRX_NUM8: howto manager. (line 1828) -* BFD_RELOC_CRX_REGREL12: howto manager. (line 1822) -* BFD_RELOC_CRX_REGREL22: howto manager. (line 1823) -* BFD_RELOC_CRX_REGREL28: howto manager. (line 1824) -* BFD_RELOC_CRX_REGREL32: howto manager. (line 1825) -* BFD_RELOC_CRX_REL16: howto manager. (line 1819) -* BFD_RELOC_CRX_REL24: howto manager. (line 1820) -* BFD_RELOC_CRX_REL32: howto manager. (line 1821) -* BFD_RELOC_CRX_REL4: howto manager. (line 1816) -* BFD_RELOC_CRX_REL8: howto manager. (line 1817) -* BFD_RELOC_CRX_REL8_CMP: howto manager. (line 1818) -* BFD_RELOC_CRX_SWITCH16: howto manager. (line 1834) -* BFD_RELOC_CRX_SWITCH32: howto manager. (line 1835) -* BFD_RELOC_CRX_SWITCH8: howto manager. (line 1833) -* BFD_RELOC_CTOR: howto manager. (line 628) -* BFD_RELOC_D10V_10_PCREL_L: howto manager. (line 1002) -* BFD_RELOC_D10V_10_PCREL_R: howto manager. (line 998) -* BFD_RELOC_D10V_18: howto manager. (line 1007) -* BFD_RELOC_D10V_18_PCREL: howto manager. (line 1010) -* BFD_RELOC_D30V_15: howto manager. (line 1025) -* BFD_RELOC_D30V_15_PCREL: howto manager. (line 1029) -* BFD_RELOC_D30V_15_PCREL_R: howto manager. (line 1033) -* BFD_RELOC_D30V_21: howto manager. (line 1038) -* BFD_RELOC_D30V_21_PCREL: howto manager. (line 1042) -* BFD_RELOC_D30V_21_PCREL_R: howto manager. (line 1046) -* BFD_RELOC_D30V_32: howto manager. (line 1051) -* BFD_RELOC_D30V_32_PCREL: howto manager. (line 1054) -* BFD_RELOC_D30V_6: howto manager. (line 1013) -* BFD_RELOC_D30V_9_PCREL: howto manager. (line 1016) -* BFD_RELOC_D30V_9_PCREL_R: howto manager. (line 1020) -* BFD_RELOC_DLX_HI16_S: howto manager. (line 1057) -* BFD_RELOC_DLX_JMP26: howto manager. (line 1063) -* BFD_RELOC_DLX_LO16: howto manager. (line 1060) -* BFD_RELOC_FR30_10_IN_8: howto manager. (line 1242) -* BFD_RELOC_FR30_12_PCREL: howto manager. (line 1250) -* BFD_RELOC_FR30_20: howto manager. (line 1226) -* BFD_RELOC_FR30_48: howto manager. (line 1223) -* BFD_RELOC_FR30_6_IN_4: howto manager. (line 1230) -* BFD_RELOC_FR30_8_IN_8: howto manager. (line 1234) -* BFD_RELOC_FR30_9_IN_8: howto manager. (line 1238) -* BFD_RELOC_FR30_9_PCREL: howto manager. (line 1246) -* BFD_RELOC_FRV_FUNCDESC: howto manager. (line 393) -* BFD_RELOC_FRV_FUNCDESC_GOT12: howto manager. (line 394) -* BFD_RELOC_FRV_FUNCDESC_GOTHI: howto manager. (line 395) -* BFD_RELOC_FRV_FUNCDESC_GOTLO: howto manager. (line 396) -* BFD_RELOC_FRV_FUNCDESC_GOTOFF12: howto manager. (line 398) -* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI: howto manager. (line 399) -* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO: howto manager. (line 400) -* BFD_RELOC_FRV_FUNCDESC_VALUE: howto manager. (line 397) -* BFD_RELOC_FRV_GETTLSOFF: howto manager. (line 404) -* BFD_RELOC_FRV_GETTLSOFF_RELAX: howto manager. (line 417) -* BFD_RELOC_FRV_GOT12: howto manager. (line 390) -* BFD_RELOC_FRV_GOTHI: howto manager. (line 391) -* BFD_RELOC_FRV_GOTLO: howto manager. (line 392) -* BFD_RELOC_FRV_GOTOFF12: howto manager. (line 401) -* BFD_RELOC_FRV_GOTOFFHI: howto manager. (line 402) -* BFD_RELOC_FRV_GOTOFFLO: howto manager. (line 403) -* BFD_RELOC_FRV_GOTTLSDESC12: howto manager. (line 406) -* BFD_RELOC_FRV_GOTTLSDESCHI: howto manager. (line 407) -* BFD_RELOC_FRV_GOTTLSDESCLO: howto manager. (line 408) -* BFD_RELOC_FRV_GOTTLSOFF12: howto manager. (line 412) -* BFD_RELOC_FRV_GOTTLSOFFHI: howto manager. (line 413) -* BFD_RELOC_FRV_GOTTLSOFFLO: howto manager. (line 414) -* BFD_RELOC_FRV_GPREL12: howto manager. (line 385) -* BFD_RELOC_FRV_GPREL32: howto manager. (line 387) -* BFD_RELOC_FRV_GPRELHI: howto manager. (line 388) -* BFD_RELOC_FRV_GPRELLO: howto manager. (line 389) -* BFD_RELOC_FRV_GPRELU12: howto manager. (line 386) -* BFD_RELOC_FRV_HI16: howto manager. (line 384) -* BFD_RELOC_FRV_LABEL16: howto manager. (line 381) -* BFD_RELOC_FRV_LABEL24: howto manager. (line 382) -* BFD_RELOC_FRV_LO16: howto manager. (line 383) -* BFD_RELOC_FRV_TLSDESC_RELAX: howto manager. (line 416) -* BFD_RELOC_FRV_TLSDESC_VALUE: howto manager. (line 405) -* BFD_RELOC_FRV_TLSMOFF: howto manager. (line 419) -* BFD_RELOC_FRV_TLSMOFF12: howto manager. (line 409) -* BFD_RELOC_FRV_TLSMOFFHI: howto manager. (line 410) -* BFD_RELOC_FRV_TLSMOFFLO: howto manager. (line 411) -* BFD_RELOC_FRV_TLSOFF: howto manager. (line 415) -* BFD_RELOC_FRV_TLSOFF_RELAX: howto manager. (line 418) -* BFD_RELOC_GPREL16: howto manager. (line 106) -* BFD_RELOC_GPREL32: howto manager. (line 107) -* BFD_RELOC_H8_DIR16A8: howto manager. (line 1917) -* BFD_RELOC_H8_DIR16R8: howto manager. (line 1918) -* BFD_RELOC_H8_DIR24A8: howto manager. (line 1919) -* BFD_RELOC_H8_DIR24R8: howto manager. (line 1920) -* BFD_RELOC_H8_DIR32A16: howto manager. (line 1921) -* BFD_RELOC_HI16: howto manager. (line 305) -* BFD_RELOC_HI16_BASEREL: howto manager. (line 82) +* BFD_RELOC_CR16_ABS20: howto manager. (line 1866) +* BFD_RELOC_CR16_ABS24: howto manager. (line 1867) +* BFD_RELOC_CR16_DISP16: howto manager. (line 1877) +* BFD_RELOC_CR16_DISP20: howto manager. (line 1878) +* BFD_RELOC_CR16_DISP24: howto manager. (line 1879) +* BFD_RELOC_CR16_DISP24a: howto manager. (line 1880) +* BFD_RELOC_CR16_DISP4: howto manager. (line 1875) +* BFD_RELOC_CR16_DISP8: howto manager. (line 1876) +* BFD_RELOC_CR16_GLOB_DAT: howto manager. (line 1886) +* BFD_RELOC_CR16_GOT_REGREL20: howto manager. (line 1884) +* BFD_RELOC_CR16_GOTC_REGREL20: howto manager. (line 1885) +* BFD_RELOC_CR16_IMM16: howto manager. (line 1870) +* BFD_RELOC_CR16_IMM20: howto manager. (line 1871) +* BFD_RELOC_CR16_IMM24: howto manager. (line 1872) +* BFD_RELOC_CR16_IMM32: howto manager. (line 1873) +* BFD_RELOC_CR16_IMM32a: howto manager. (line 1874) +* BFD_RELOC_CR16_IMM4: howto manager. (line 1868) +* BFD_RELOC_CR16_IMM8: howto manager. (line 1869) +* BFD_RELOC_CR16_NUM16: howto manager. (line 1855) +* BFD_RELOC_CR16_NUM32: howto manager. (line 1856) +* BFD_RELOC_CR16_NUM32a: howto manager. (line 1857) +* BFD_RELOC_CR16_NUM8: howto manager. (line 1854) +* BFD_RELOC_CR16_REGREL0: howto manager. (line 1858) +* BFD_RELOC_CR16_REGREL14: howto manager. (line 1861) +* BFD_RELOC_CR16_REGREL14a: howto manager. (line 1862) +* BFD_RELOC_CR16_REGREL16: howto manager. (line 1863) +* BFD_RELOC_CR16_REGREL20: howto manager. (line 1864) +* BFD_RELOC_CR16_REGREL20a: howto manager. (line 1865) +* BFD_RELOC_CR16_REGREL4: howto manager. (line 1859) +* BFD_RELOC_CR16_REGREL4a: howto manager. (line 1860) +* BFD_RELOC_CR16_SWITCH16: howto manager. (line 1882) +* BFD_RELOC_CR16_SWITCH32: howto manager. (line 1883) +* BFD_RELOC_CR16_SWITCH8: howto manager. (line 1881) +* BFD_RELOC_CRIS_16_DTPREL: howto manager. (line 1957) +* BFD_RELOC_CRIS_16_GOT: howto manager. (line 1933) +* BFD_RELOC_CRIS_16_GOT_GD: howto manager. (line 1953) +* BFD_RELOC_CRIS_16_GOT_TPREL: howto manager. (line 1959) +* BFD_RELOC_CRIS_16_GOTPLT: howto manager. (line 1939) +* BFD_RELOC_CRIS_16_TPREL: howto manager. (line 1961) +* BFD_RELOC_CRIS_32_DTPREL: howto manager. (line 1956) +* BFD_RELOC_CRIS_32_GD: howto manager. (line 1954) +* BFD_RELOC_CRIS_32_GOT: howto manager. (line 1930) +* BFD_RELOC_CRIS_32_GOT_GD: howto manager. (line 1952) +* BFD_RELOC_CRIS_32_GOT_TPREL: howto manager. (line 1958) +* BFD_RELOC_CRIS_32_GOTPLT: howto manager. (line 1936) +* BFD_RELOC_CRIS_32_GOTREL: howto manager. (line 1942) +* BFD_RELOC_CRIS_32_IE: howto manager. (line 1963) +* BFD_RELOC_CRIS_32_PLT_GOTREL: howto manager. (line 1945) +* BFD_RELOC_CRIS_32_PLT_PCREL: howto manager. (line 1948) +* BFD_RELOC_CRIS_32_TPREL: howto manager. (line 1960) +* BFD_RELOC_CRIS_BDISP8: howto manager. (line 1911) +* BFD_RELOC_CRIS_COPY: howto manager. (line 1924) +* BFD_RELOC_CRIS_DTP: howto manager. (line 1955) +* BFD_RELOC_CRIS_DTPMOD: howto manager. (line 1962) +* BFD_RELOC_CRIS_GLOB_DAT: howto manager. (line 1925) +* BFD_RELOC_CRIS_JUMP_SLOT: howto manager. (line 1926) +* BFD_RELOC_CRIS_LAPCQ_OFFSET: howto manager. (line 1919) +* BFD_RELOC_CRIS_RELATIVE: howto manager. (line 1927) +* BFD_RELOC_CRIS_SIGNED_16: howto manager. (line 1917) +* BFD_RELOC_CRIS_SIGNED_6: howto manager. (line 1913) +* BFD_RELOC_CRIS_SIGNED_8: howto manager. (line 1915) +* BFD_RELOC_CRIS_UNSIGNED_16: howto manager. (line 1918) +* BFD_RELOC_CRIS_UNSIGNED_4: howto manager. (line 1920) +* BFD_RELOC_CRIS_UNSIGNED_5: howto manager. (line 1912) +* BFD_RELOC_CRIS_UNSIGNED_6: howto manager. (line 1914) +* BFD_RELOC_CRIS_UNSIGNED_8: howto manager. (line 1916) +* BFD_RELOC_CRX_ABS16: howto manager. (line 1899) +* BFD_RELOC_CRX_ABS32: howto manager. (line 1900) +* BFD_RELOC_CRX_IMM16: howto manager. (line 1904) +* BFD_RELOC_CRX_IMM32: howto manager. (line 1905) +* BFD_RELOC_CRX_NUM16: howto manager. (line 1902) +* BFD_RELOC_CRX_NUM32: howto manager. (line 1903) +* BFD_RELOC_CRX_NUM8: howto manager. (line 1901) +* BFD_RELOC_CRX_REGREL12: howto manager. (line 1895) +* BFD_RELOC_CRX_REGREL22: howto manager. (line 1896) +* BFD_RELOC_CRX_REGREL28: howto manager. (line 1897) +* BFD_RELOC_CRX_REGREL32: howto manager. (line 1898) +* BFD_RELOC_CRX_REL16: howto manager. (line 1892) +* BFD_RELOC_CRX_REL24: howto manager. (line 1893) +* BFD_RELOC_CRX_REL32: howto manager. (line 1894) +* BFD_RELOC_CRX_REL4: howto manager. (line 1889) +* BFD_RELOC_CRX_REL8: howto manager. (line 1890) +* BFD_RELOC_CRX_REL8_CMP: howto manager. (line 1891) +* BFD_RELOC_CRX_SWITCH16: howto manager. (line 1907) +* BFD_RELOC_CRX_SWITCH32: howto manager. (line 1908) +* BFD_RELOC_CRX_SWITCH8: howto manager. (line 1906) +* BFD_RELOC_CTOR: howto manager. (line 686) +* BFD_RELOC_D10V_10_PCREL_L: howto manager. (line 1063) +* BFD_RELOC_D10V_10_PCREL_R: howto manager. (line 1059) +* BFD_RELOC_D10V_18: howto manager. (line 1068) +* BFD_RELOC_D10V_18_PCREL: howto manager. (line 1071) +* BFD_RELOC_D30V_15: howto manager. (line 1086) +* BFD_RELOC_D30V_15_PCREL: howto manager. (line 1090) +* BFD_RELOC_D30V_15_PCREL_R: howto manager. (line 1094) +* BFD_RELOC_D30V_21: howto manager. (line 1099) +* BFD_RELOC_D30V_21_PCREL: howto manager. (line 1103) +* BFD_RELOC_D30V_21_PCREL_R: howto manager. (line 1107) +* BFD_RELOC_D30V_32: howto manager. (line 1112) +* BFD_RELOC_D30V_32_PCREL: howto manager. (line 1115) +* BFD_RELOC_D30V_6: howto manager. (line 1074) +* BFD_RELOC_D30V_9_PCREL: howto manager. (line 1077) +* BFD_RELOC_D30V_9_PCREL_R: howto manager. (line 1081) +* BFD_RELOC_DLX_HI16_S: howto manager. (line 1118) +* BFD_RELOC_DLX_JMP26: howto manager. (line 1124) +* BFD_RELOC_DLX_LO16: howto manager. (line 1121) +* BFD_RELOC_FR30_10_IN_8: howto manager. (line 1303) +* BFD_RELOC_FR30_12_PCREL: howto manager. (line 1311) +* BFD_RELOC_FR30_20: howto manager. (line 1287) +* BFD_RELOC_FR30_48: howto manager. (line 1284) +* BFD_RELOC_FR30_6_IN_4: howto manager. (line 1291) +* BFD_RELOC_FR30_8_IN_8: howto manager. (line 1295) +* BFD_RELOC_FR30_9_IN_8: howto manager. (line 1299) +* BFD_RELOC_FR30_9_PCREL: howto manager. (line 1307) +* BFD_RELOC_FRV_FUNCDESC: howto manager. (line 438) +* BFD_RELOC_FRV_FUNCDESC_GOT12: howto manager. (line 439) +* BFD_RELOC_FRV_FUNCDESC_GOTHI: howto manager. (line 440) +* BFD_RELOC_FRV_FUNCDESC_GOTLO: howto manager. (line 441) +* BFD_RELOC_FRV_FUNCDESC_GOTOFF12: howto manager. (line 443) +* BFD_RELOC_FRV_FUNCDESC_GOTOFFHI: howto manager. (line 444) +* BFD_RELOC_FRV_FUNCDESC_GOTOFFLO: howto manager. (line 445) +* BFD_RELOC_FRV_FUNCDESC_VALUE: howto manager. (line 442) +* BFD_RELOC_FRV_GETTLSOFF: howto manager. (line 449) +* BFD_RELOC_FRV_GETTLSOFF_RELAX: howto manager. (line 462) +* BFD_RELOC_FRV_GOT12: howto manager. (line 435) +* BFD_RELOC_FRV_GOTHI: howto manager. (line 436) +* BFD_RELOC_FRV_GOTLO: howto manager. (line 437) +* BFD_RELOC_FRV_GOTOFF12: howto manager. (line 446) +* BFD_RELOC_FRV_GOTOFFHI: howto manager. (line 447) +* BFD_RELOC_FRV_GOTOFFLO: howto manager. (line 448) +* BFD_RELOC_FRV_GOTTLSDESC12: howto manager. (line 451) +* BFD_RELOC_FRV_GOTTLSDESCHI: howto manager. (line 452) +* BFD_RELOC_FRV_GOTTLSDESCLO: howto manager. (line 453) +* BFD_RELOC_FRV_GOTTLSOFF12: howto manager. (line 457) +* BFD_RELOC_FRV_GOTTLSOFFHI: howto manager. (line 458) +* BFD_RELOC_FRV_GOTTLSOFFLO: howto manager. (line 459) +* BFD_RELOC_FRV_GPREL12: howto manager. (line 430) +* BFD_RELOC_FRV_GPREL32: howto manager. (line 432) +* BFD_RELOC_FRV_GPRELHI: howto manager. (line 433) +* BFD_RELOC_FRV_GPRELLO: howto manager. (line 434) +* BFD_RELOC_FRV_GPRELU12: howto manager. (line 431) +* BFD_RELOC_FRV_HI16: howto manager. (line 429) +* BFD_RELOC_FRV_LABEL16: howto manager. (line 426) +* BFD_RELOC_FRV_LABEL24: howto manager. (line 427) +* BFD_RELOC_FRV_LO16: howto manager. (line 428) +* BFD_RELOC_FRV_TLSDESC_RELAX: howto manager. (line 461) +* BFD_RELOC_FRV_TLSDESC_VALUE: howto manager. (line 450) +* BFD_RELOC_FRV_TLSMOFF: howto manager. (line 464) +* BFD_RELOC_FRV_TLSMOFF12: howto manager. (line 454) +* BFD_RELOC_FRV_TLSMOFFHI: howto manager. (line 455) +* BFD_RELOC_FRV_TLSMOFFLO: howto manager. (line 456) +* BFD_RELOC_FRV_TLSOFF: howto manager. (line 460) +* BFD_RELOC_FRV_TLSOFF_RELAX: howto manager. (line 463) +* BFD_RELOC_GPREL16: howto manager. (line 121) +* BFD_RELOC_GPREL32: howto manager. (line 122) +* BFD_RELOC_H8_DIR16A8: howto manager. (line 2004) +* BFD_RELOC_H8_DIR16R8: howto manager. (line 2005) +* BFD_RELOC_H8_DIR24A8: howto manager. (line 2006) +* BFD_RELOC_H8_DIR24R8: howto manager. (line 2007) +* BFD_RELOC_H8_DIR32A16: howto manager. (line 2008) +* BFD_RELOC_HI16: howto manager. (line 342) +* BFD_RELOC_HI16_BASEREL: howto manager. (line 97) * BFD_RELOC_HI16_GOTOFF: howto manager. (line 57) -* BFD_RELOC_HI16_PCREL: howto manager. (line 317) +* BFD_RELOC_HI16_PCREL: howto manager. (line 354) * BFD_RELOC_HI16_PLTOFF: howto manager. (line 69) -* BFD_RELOC_HI16_S: howto manager. (line 308) -* BFD_RELOC_HI16_S_BASEREL: howto manager. (line 83) +* BFD_RELOC_HI16_S: howto manager. (line 345) +* BFD_RELOC_HI16_S_BASEREL: howto manager. (line 98) * BFD_RELOC_HI16_S_GOTOFF: howto manager. (line 58) -* BFD_RELOC_HI16_S_PCREL: howto manager. (line 320) +* BFD_RELOC_HI16_S_PCREL: howto manager. (line 357) * BFD_RELOC_HI16_S_PLTOFF: howto manager. (line 70) -* BFD_RELOC_HI22: howto manager. (line 101) -* BFD_RELOC_I370_D12: howto manager. (line 625) -* BFD_RELOC_I960_CALLJ: howto manager. (line 113) -* BFD_RELOC_IA64_COPY: howto manager. (line 1681) -* BFD_RELOC_IA64_DIR32LSB: howto manager. (line 1626) -* BFD_RELOC_IA64_DIR32MSB: howto manager. (line 1625) -* BFD_RELOC_IA64_DIR64LSB: howto manager. (line 1628) -* BFD_RELOC_IA64_DIR64MSB: howto manager. (line 1627) -* BFD_RELOC_IA64_DTPMOD64LSB: howto manager. (line 1691) -* BFD_RELOC_IA64_DTPMOD64MSB: howto manager. (line 1690) -* BFD_RELOC_IA64_DTPREL14: howto manager. (line 1693) -* BFD_RELOC_IA64_DTPREL22: howto manager. (line 1694) -* BFD_RELOC_IA64_DTPREL32LSB: howto manager. (line 1697) -* BFD_RELOC_IA64_DTPREL32MSB: howto manager. (line 1696) -* BFD_RELOC_IA64_DTPREL64I: howto manager. (line 1695) -* BFD_RELOC_IA64_DTPREL64LSB: howto manager. (line 1699) -* BFD_RELOC_IA64_DTPREL64MSB: howto manager. (line 1698) -* BFD_RELOC_IA64_FPTR32LSB: howto manager. (line 1643) -* BFD_RELOC_IA64_FPTR32MSB: howto manager. (line 1642) -* BFD_RELOC_IA64_FPTR64I: howto manager. (line 1641) -* BFD_RELOC_IA64_FPTR64LSB: howto manager. (line 1645) -* BFD_RELOC_IA64_FPTR64MSB: howto manager. (line 1644) -* BFD_RELOC_IA64_GPREL22: howto manager. (line 1629) -* BFD_RELOC_IA64_GPREL32LSB: howto manager. (line 1632) -* BFD_RELOC_IA64_GPREL32MSB: howto manager. (line 1631) -* BFD_RELOC_IA64_GPREL64I: howto manager. (line 1630) -* BFD_RELOC_IA64_GPREL64LSB: howto manager. (line 1634) -* BFD_RELOC_IA64_GPREL64MSB: howto manager. (line 1633) -* BFD_RELOC_IA64_IMM14: howto manager. (line 1622) -* BFD_RELOC_IA64_IMM22: howto manager. (line 1623) -* BFD_RELOC_IA64_IMM64: howto manager. (line 1624) -* BFD_RELOC_IA64_IPLTLSB: howto manager. (line 1680) -* BFD_RELOC_IA64_IPLTMSB: howto manager. (line 1679) -* BFD_RELOC_IA64_LDXMOV: howto manager. (line 1683) -* BFD_RELOC_IA64_LTOFF22: howto manager. (line 1635) -* BFD_RELOC_IA64_LTOFF22X: howto manager. (line 1682) -* BFD_RELOC_IA64_LTOFF64I: howto manager. (line 1636) -* BFD_RELOC_IA64_LTOFF_DTPMOD22: howto manager. (line 1692) -* BFD_RELOC_IA64_LTOFF_DTPREL22: howto manager. (line 1700) -* BFD_RELOC_IA64_LTOFF_FPTR22: howto manager. (line 1657) -* BFD_RELOC_IA64_LTOFF_FPTR32LSB: howto manager. (line 1660) -* BFD_RELOC_IA64_LTOFF_FPTR32MSB: howto manager. (line 1659) -* BFD_RELOC_IA64_LTOFF_FPTR64I: howto manager. (line 1658) -* BFD_RELOC_IA64_LTOFF_FPTR64LSB: howto manager. (line 1662) -* BFD_RELOC_IA64_LTOFF_FPTR64MSB: howto manager. (line 1661) -* BFD_RELOC_IA64_LTOFF_TPREL22: howto manager. (line 1689) -* BFD_RELOC_IA64_LTV32LSB: howto manager. (line 1676) -* BFD_RELOC_IA64_LTV32MSB: howto manager. (line 1675) -* BFD_RELOC_IA64_LTV64LSB: howto manager. (line 1678) -* BFD_RELOC_IA64_LTV64MSB: howto manager. (line 1677) -* BFD_RELOC_IA64_PCREL21B: howto manager. (line 1646) -* BFD_RELOC_IA64_PCREL21BI: howto manager. (line 1647) -* BFD_RELOC_IA64_PCREL21F: howto manager. (line 1649) -* BFD_RELOC_IA64_PCREL21M: howto manager. (line 1648) -* BFD_RELOC_IA64_PCREL22: howto manager. (line 1650) -* BFD_RELOC_IA64_PCREL32LSB: howto manager. (line 1654) -* BFD_RELOC_IA64_PCREL32MSB: howto manager. (line 1653) -* BFD_RELOC_IA64_PCREL60B: howto manager. (line 1651) -* BFD_RELOC_IA64_PCREL64I: howto manager. (line 1652) -* BFD_RELOC_IA64_PCREL64LSB: howto manager. (line 1656) -* BFD_RELOC_IA64_PCREL64MSB: howto manager. (line 1655) -* BFD_RELOC_IA64_PLTOFF22: howto manager. (line 1637) -* BFD_RELOC_IA64_PLTOFF64I: howto manager. (line 1638) -* BFD_RELOC_IA64_PLTOFF64LSB: howto manager. (line 1640) -* BFD_RELOC_IA64_PLTOFF64MSB: howto manager. (line 1639) -* BFD_RELOC_IA64_REL32LSB: howto manager. (line 1672) -* BFD_RELOC_IA64_REL32MSB: howto manager. (line 1671) -* BFD_RELOC_IA64_REL64LSB: howto manager. (line 1674) -* BFD_RELOC_IA64_REL64MSB: howto manager. (line 1673) -* BFD_RELOC_IA64_SECREL32LSB: howto manager. (line 1668) -* BFD_RELOC_IA64_SECREL32MSB: howto manager. (line 1667) -* BFD_RELOC_IA64_SECREL64LSB: howto manager. (line 1670) -* BFD_RELOC_IA64_SECREL64MSB: howto manager. (line 1669) -* BFD_RELOC_IA64_SEGREL32LSB: howto manager. (line 1664) -* BFD_RELOC_IA64_SEGREL32MSB: howto manager. (line 1663) -* BFD_RELOC_IA64_SEGREL64LSB: howto manager. (line 1666) -* BFD_RELOC_IA64_SEGREL64MSB: howto manager. (line 1665) -* BFD_RELOC_IA64_TPREL14: howto manager. (line 1684) -* BFD_RELOC_IA64_TPREL22: howto manager. (line 1685) -* BFD_RELOC_IA64_TPREL64I: howto manager. (line 1686) -* BFD_RELOC_IA64_TPREL64LSB: howto manager. (line 1688) -* BFD_RELOC_IA64_TPREL64MSB: howto manager. (line 1687) -* BFD_RELOC_IP2K_ADDR16CJP: howto manager. (line 1574) -* BFD_RELOC_IP2K_BANK: howto manager. (line 1571) -* BFD_RELOC_IP2K_EX8DATA: howto manager. (line 1582) -* BFD_RELOC_IP2K_FR9: howto manager. (line 1568) -* BFD_RELOC_IP2K_FR_OFFSET: howto manager. (line 1595) -* BFD_RELOC_IP2K_HI8DATA: howto manager. (line 1581) -* BFD_RELOC_IP2K_HI8INSN: howto manager. (line 1586) -* BFD_RELOC_IP2K_LO8DATA: howto manager. (line 1580) -* BFD_RELOC_IP2K_LO8INSN: howto manager. (line 1585) -* BFD_RELOC_IP2K_PAGE3: howto manager. (line 1577) -* BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 1589) -* BFD_RELOC_IP2K_TEXT: howto manager. (line 1592) -* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 1971) -* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 1972) -* BFD_RELOC_IQ2000_UHI16: howto manager. (line 1973) -* BFD_RELOC_LO10: howto manager. (line 102) -* BFD_RELOC_LO16: howto manager. (line 314) -* BFD_RELOC_LO16_BASEREL: howto manager. (line 81) +* BFD_RELOC_HI22: howto manager. (line 116) +* BFD_RELOC_I370_D12: howto manager. (line 683) +* BFD_RELOC_I960_CALLJ: howto manager. (line 128) +* BFD_RELOC_IA64_COPY: howto manager. (line 1748) +* BFD_RELOC_IA64_DIR32LSB: howto manager. (line 1693) +* BFD_RELOC_IA64_DIR32MSB: howto manager. (line 1692) +* BFD_RELOC_IA64_DIR64LSB: howto manager. (line 1695) +* BFD_RELOC_IA64_DIR64MSB: howto manager. (line 1694) +* BFD_RELOC_IA64_DTPMOD64LSB: howto manager. (line 1758) +* BFD_RELOC_IA64_DTPMOD64MSB: howto manager. (line 1757) +* BFD_RELOC_IA64_DTPREL14: howto manager. (line 1760) +* BFD_RELOC_IA64_DTPREL22: howto manager. (line 1761) +* BFD_RELOC_IA64_DTPREL32LSB: howto manager. (line 1764) +* BFD_RELOC_IA64_DTPREL32MSB: howto manager. (line 1763) +* BFD_RELOC_IA64_DTPREL64I: howto manager. (line 1762) +* BFD_RELOC_IA64_DTPREL64LSB: howto manager. (line 1766) +* BFD_RELOC_IA64_DTPREL64MSB: howto manager. (line 1765) +* BFD_RELOC_IA64_FPTR32LSB: howto manager. (line 1710) +* BFD_RELOC_IA64_FPTR32MSB: howto manager. (line 1709) +* BFD_RELOC_IA64_FPTR64I: howto manager. (line 1708) +* BFD_RELOC_IA64_FPTR64LSB: howto manager. (line 1712) +* BFD_RELOC_IA64_FPTR64MSB: howto manager. (line 1711) +* BFD_RELOC_IA64_GPREL22: howto manager. (line 1696) +* BFD_RELOC_IA64_GPREL32LSB: howto manager. (line 1699) +* BFD_RELOC_IA64_GPREL32MSB: howto manager. (line 1698) +* BFD_RELOC_IA64_GPREL64I: howto manager. (line 1697) +* BFD_RELOC_IA64_GPREL64LSB: howto manager. (line 1701) +* BFD_RELOC_IA64_GPREL64MSB: howto manager. (line 1700) +* BFD_RELOC_IA64_IMM14: howto manager. (line 1689) +* BFD_RELOC_IA64_IMM22: howto manager. (line 1690) +* BFD_RELOC_IA64_IMM64: howto manager. (line 1691) +* BFD_RELOC_IA64_IPLTLSB: howto manager. (line 1747) +* BFD_RELOC_IA64_IPLTMSB: howto manager. (line 1746) +* BFD_RELOC_IA64_LDXMOV: howto manager. (line 1750) +* BFD_RELOC_IA64_LTOFF22: howto manager. (line 1702) +* BFD_RELOC_IA64_LTOFF22X: howto manager. (line 1749) +* BFD_RELOC_IA64_LTOFF64I: howto manager. (line 1703) +* BFD_RELOC_IA64_LTOFF_DTPMOD22: howto manager. (line 1759) +* BFD_RELOC_IA64_LTOFF_DTPREL22: howto manager. (line 1767) +* BFD_RELOC_IA64_LTOFF_FPTR22: howto manager. (line 1724) +* BFD_RELOC_IA64_LTOFF_FPTR32LSB: howto manager. (line 1727) +* BFD_RELOC_IA64_LTOFF_FPTR32MSB: howto manager. (line 1726) +* BFD_RELOC_IA64_LTOFF_FPTR64I: howto manager. (line 1725) +* BFD_RELOC_IA64_LTOFF_FPTR64LSB: howto manager. (line 1729) +* BFD_RELOC_IA64_LTOFF_FPTR64MSB: howto manager. (line 1728) +* BFD_RELOC_IA64_LTOFF_TPREL22: howto manager. (line 1756) +* BFD_RELOC_IA64_LTV32LSB: howto manager. (line 1743) +* BFD_RELOC_IA64_LTV32MSB: howto manager. (line 1742) +* BFD_RELOC_IA64_LTV64LSB: howto manager. (line 1745) +* BFD_RELOC_IA64_LTV64MSB: howto manager. (line 1744) +* BFD_RELOC_IA64_PCREL21B: howto manager. (line 1713) +* BFD_RELOC_IA64_PCREL21BI: howto manager. (line 1714) +* BFD_RELOC_IA64_PCREL21F: howto manager. (line 1716) +* BFD_RELOC_IA64_PCREL21M: howto manager. (line 1715) +* BFD_RELOC_IA64_PCREL22: howto manager. (line 1717) +* BFD_RELOC_IA64_PCREL32LSB: howto manager. (line 1721) +* BFD_RELOC_IA64_PCREL32MSB: howto manager. (line 1720) +* BFD_RELOC_IA64_PCREL60B: howto manager. (line 1718) +* BFD_RELOC_IA64_PCREL64I: howto manager. (line 1719) +* BFD_RELOC_IA64_PCREL64LSB: howto manager. (line 1723) +* BFD_RELOC_IA64_PCREL64MSB: howto manager. (line 1722) +* BFD_RELOC_IA64_PLTOFF22: howto manager. (line 1704) +* BFD_RELOC_IA64_PLTOFF64I: howto manager. (line 1705) +* BFD_RELOC_IA64_PLTOFF64LSB: howto manager. (line 1707) +* BFD_RELOC_IA64_PLTOFF64MSB: howto manager. (line 1706) +* BFD_RELOC_IA64_REL32LSB: howto manager. (line 1739) +* BFD_RELOC_IA64_REL32MSB: howto manager. (line 1738) +* BFD_RELOC_IA64_REL64LSB: howto manager. (line 1741) +* BFD_RELOC_IA64_REL64MSB: howto manager. (line 1740) +* BFD_RELOC_IA64_SECREL32LSB: howto manager. (line 1735) +* BFD_RELOC_IA64_SECREL32MSB: howto manager. (line 1734) +* BFD_RELOC_IA64_SECREL64LSB: howto manager. (line 1737) +* BFD_RELOC_IA64_SECREL64MSB: howto manager. (line 1736) +* BFD_RELOC_IA64_SEGREL32LSB: howto manager. (line 1731) +* BFD_RELOC_IA64_SEGREL32MSB: howto manager. (line 1730) +* BFD_RELOC_IA64_SEGREL64LSB: howto manager. (line 1733) +* BFD_RELOC_IA64_SEGREL64MSB: howto manager. (line 1732) +* BFD_RELOC_IA64_TPREL14: howto manager. (line 1751) +* BFD_RELOC_IA64_TPREL22: howto manager. (line 1752) +* BFD_RELOC_IA64_TPREL64I: howto manager. (line 1753) +* BFD_RELOC_IA64_TPREL64LSB: howto manager. (line 1755) +* BFD_RELOC_IA64_TPREL64MSB: howto manager. (line 1754) +* BFD_RELOC_IP2K_ADDR16CJP: howto manager. (line 1641) +* BFD_RELOC_IP2K_BANK: howto manager. (line 1638) +* BFD_RELOC_IP2K_EX8DATA: howto manager. (line 1649) +* BFD_RELOC_IP2K_FR9: howto manager. (line 1635) +* BFD_RELOC_IP2K_FR_OFFSET: howto manager. (line 1662) +* BFD_RELOC_IP2K_HI8DATA: howto manager. (line 1648) +* BFD_RELOC_IP2K_HI8INSN: howto manager. (line 1653) +* BFD_RELOC_IP2K_LO8DATA: howto manager. (line 1647) +* BFD_RELOC_IP2K_LO8INSN: howto manager. (line 1652) +* BFD_RELOC_IP2K_PAGE3: howto manager. (line 1644) +* BFD_RELOC_IP2K_PC_SKIP: howto manager. (line 1656) +* BFD_RELOC_IP2K_TEXT: howto manager. (line 1659) +* BFD_RELOC_IQ2000_OFFSET_16: howto manager. (line 2058) +* BFD_RELOC_IQ2000_OFFSET_21: howto manager. (line 2059) +* BFD_RELOC_IQ2000_UHI16: howto manager. (line 2060) +* BFD_RELOC_LM32_16_GOT: howto manager. (line 2165) +* BFD_RELOC_LM32_BRANCH: howto manager. (line 2164) +* BFD_RELOC_LM32_CALL: howto manager. (line 2163) +* BFD_RELOC_LM32_COPY: howto manager. (line 2168) +* BFD_RELOC_LM32_GLOB_DAT: howto manager. (line 2169) +* BFD_RELOC_LM32_GOTOFF_HI16: howto manager. (line 2166) +* BFD_RELOC_LM32_GOTOFF_LO16: howto manager. (line 2167) +* BFD_RELOC_LM32_JMP_SLOT: howto manager. (line 2170) +* BFD_RELOC_LM32_RELATIVE: howto manager. (line 2171) +* BFD_RELOC_LO10: howto manager. (line 117) +* BFD_RELOC_LO16: howto manager. (line 351) +* BFD_RELOC_LO16_BASEREL: howto manager. (line 96) * BFD_RELOC_LO16_GOTOFF: howto manager. (line 56) -* BFD_RELOC_LO16_PCREL: howto manager. (line 323) +* BFD_RELOC_LO16_PCREL: howto manager. (line 360) * BFD_RELOC_LO16_PLTOFF: howto manager. (line 68) -* BFD_RELOC_M32C_HI8: howto manager. (line 1066) -* BFD_RELOC_M32C_RL_1ADDR: howto manager. (line 1068) -* BFD_RELOC_M32C_RL_2ADDR: howto manager. (line 1069) -* BFD_RELOC_M32C_RL_JUMP: howto manager. (line 1067) -* BFD_RELOC_M32R_10_PCREL: howto manager. (line 1076) -* BFD_RELOC_M32R_18_PCREL: howto manager. (line 1080) -* BFD_RELOC_M32R_24: howto manager. (line 1072) -* BFD_RELOC_M32R_26_PCREL: howto manager. (line 1083) -* BFD_RELOC_M32R_26_PLTREL: howto manager. (line 1102) -* BFD_RELOC_M32R_COPY: howto manager. (line 1103) -* BFD_RELOC_M32R_GLOB_DAT: howto manager. (line 1104) -* BFD_RELOC_M32R_GOT16_HI_SLO: howto manager. (line 1113) -* BFD_RELOC_M32R_GOT16_HI_ULO: howto manager. (line 1112) -* BFD_RELOC_M32R_GOT16_LO: howto manager. (line 1114) -* BFD_RELOC_M32R_GOT24: howto manager. (line 1101) -* BFD_RELOC_M32R_GOTOFF: howto manager. (line 1107) -* BFD_RELOC_M32R_GOTOFF_HI_SLO: howto manager. (line 1109) -* BFD_RELOC_M32R_GOTOFF_HI_ULO: howto manager. (line 1108) -* BFD_RELOC_M32R_GOTOFF_LO: howto manager. (line 1110) -* BFD_RELOC_M32R_GOTPC24: howto manager. (line 1111) -* BFD_RELOC_M32R_GOTPC_HI_SLO: howto manager. (line 1116) -* BFD_RELOC_M32R_GOTPC_HI_ULO: howto manager. (line 1115) -* BFD_RELOC_M32R_GOTPC_LO: howto manager. (line 1117) -* BFD_RELOC_M32R_HI16_SLO: howto manager. (line 1090) -* BFD_RELOC_M32R_HI16_ULO: howto manager. (line 1086) -* BFD_RELOC_M32R_JMP_SLOT: howto manager. (line 1105) -* BFD_RELOC_M32R_LO16: howto manager. (line 1094) -* BFD_RELOC_M32R_RELATIVE: howto manager. (line 1106) -* BFD_RELOC_M32R_SDA16: howto manager. (line 1097) -* BFD_RELOC_M68HC11_24: howto manager. (line 1736) -* BFD_RELOC_M68HC11_3B: howto manager. (line 1711) -* BFD_RELOC_M68HC11_HI8: howto manager. (line 1703) -* BFD_RELOC_M68HC11_LO16: howto manager. (line 1725) -* BFD_RELOC_M68HC11_LO8: howto manager. (line 1707) -* BFD_RELOC_M68HC11_PAGE: howto manager. (line 1731) -* BFD_RELOC_M68HC11_RL_GROUP: howto manager. (line 1720) -* BFD_RELOC_M68HC11_RL_JUMP: howto manager. (line 1714) -* BFD_RELOC_M68HC12_5B: howto manager. (line 1742) -* BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1257) -* BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1255) -* BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1256) -* BFD_RELOC_MCORE_PCREL_IMM8BY4: howto manager. (line 1254) -* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2: howto manager. (line 1258) -* BFD_RELOC_MCORE_RVA: howto manager. (line 1259) -* BFD_RELOC_MEP_16: howto manager. (line 1263) -* BFD_RELOC_MEP_32: howto manager. (line 1264) -* BFD_RELOC_MEP_8: howto manager. (line 1262) -* BFD_RELOC_MEP_ADDR24A4: howto manager. (line 1279) -* BFD_RELOC_MEP_GNU_VTENTRY: howto manager. (line 1281) -* BFD_RELOC_MEP_GNU_VTINHERIT: howto manager. (line 1280) -* BFD_RELOC_MEP_GPREL: howto manager. (line 1273) -* BFD_RELOC_MEP_HI16S: howto manager. (line 1272) -* BFD_RELOC_MEP_HI16U: howto manager. (line 1271) -* BFD_RELOC_MEP_LOW16: howto manager. (line 1270) -* BFD_RELOC_MEP_PCABS24A2: howto manager. (line 1269) -* BFD_RELOC_MEP_PCREL12A2: howto manager. (line 1266) -* BFD_RELOC_MEP_PCREL17A2: howto manager. (line 1267) -* BFD_RELOC_MEP_PCREL24A2: howto manager. (line 1268) -* BFD_RELOC_MEP_PCREL8A2: howto manager. (line 1265) -* BFD_RELOC_MEP_TPREL: howto manager. (line 1274) -* BFD_RELOC_MEP_TPREL7: howto manager. (line 1275) -* BFD_RELOC_MEP_TPREL7A2: howto manager. (line 1276) -* BFD_RELOC_MEP_TPREL7A4: howto manager. (line 1277) -* BFD_RELOC_MEP_UIMM24: howto manager. (line 1278) -* BFD_RELOC_MIPS16_GPREL: howto manager. (line 302) -* BFD_RELOC_MIPS16_HI16: howto manager. (line 326) -* BFD_RELOC_MIPS16_HI16_S: howto manager. (line 329) -* BFD_RELOC_MIPS16_JMP: howto manager. (line 299) -* BFD_RELOC_MIPS16_LO16: howto manager. (line 335) -* BFD_RELOC_MIPS_CALL16: howto manager. (line 342) -* BFD_RELOC_MIPS_CALL_HI16: howto manager. (line 345) -* BFD_RELOC_MIPS_CALL_LO16: howto manager. (line 346) -* BFD_RELOC_MIPS_COPY: howto manager. (line 377) -* BFD_RELOC_MIPS_DELETE: howto manager. (line 355) -* BFD_RELOC_MIPS_GOT16: howto manager. (line 341) -* BFD_RELOC_MIPS_GOT_DISP: howto manager. (line 350) -* BFD_RELOC_MIPS_GOT_HI16: howto manager. (line 343) -* BFD_RELOC_MIPS_GOT_LO16: howto manager. (line 344) -* BFD_RELOC_MIPS_GOT_OFST: howto manager. (line 349) -* BFD_RELOC_MIPS_GOT_PAGE: howto manager. (line 348) -* BFD_RELOC_MIPS_HIGHER: howto manager. (line 357) -* BFD_RELOC_MIPS_HIGHEST: howto manager. (line 356) -* BFD_RELOC_MIPS_INSERT_A: howto manager. (line 353) -* BFD_RELOC_MIPS_INSERT_B: howto manager. (line 354) -* BFD_RELOC_MIPS_JALR: howto manager. (line 361) -* BFD_RELOC_MIPS_JMP: howto manager. (line 295) -* BFD_RELOC_MIPS_JUMP_SLOT: howto manager. (line 378) -* BFD_RELOC_MIPS_LITERAL: howto manager. (line 338) -* BFD_RELOC_MIPS_REL16: howto manager. (line 359) -* BFD_RELOC_MIPS_RELGOT: howto manager. (line 360) -* BFD_RELOC_MIPS_SCN_DISP: howto manager. (line 358) -* BFD_RELOC_MIPS_SHIFT5: howto manager. (line 351) -* BFD_RELOC_MIPS_SHIFT6: howto manager. (line 352) -* BFD_RELOC_MIPS_SUB: howto manager. (line 347) -* BFD_RELOC_MIPS_TLS_DTPMOD32: howto manager. (line 362) -* BFD_RELOC_MIPS_TLS_DTPMOD64: howto manager. (line 364) -* BFD_RELOC_MIPS_TLS_DTPREL32: howto manager. (line 363) -* BFD_RELOC_MIPS_TLS_DTPREL64: howto manager. (line 365) -* BFD_RELOC_MIPS_TLS_DTPREL_HI16: howto manager. (line 368) -* BFD_RELOC_MIPS_TLS_DTPREL_LO16: howto manager. (line 369) -* BFD_RELOC_MIPS_TLS_GD: howto manager. (line 366) -* BFD_RELOC_MIPS_TLS_GOTTPREL: howto manager. (line 370) -* BFD_RELOC_MIPS_TLS_LDM: howto manager. (line 367) -* BFD_RELOC_MIPS_TLS_TPREL32: howto manager. (line 371) -* BFD_RELOC_MIPS_TLS_TPREL64: howto manager. (line 372) -* BFD_RELOC_MIPS_TLS_TPREL_HI16: howto manager. (line 373) -* BFD_RELOC_MIPS_TLS_TPREL_LO16: howto manager. (line 374) -* BFD_RELOC_MMIX_ADDR19: howto manager. (line 1310) -* BFD_RELOC_MMIX_ADDR27: howto manager. (line 1314) -* BFD_RELOC_MMIX_BASE_PLUS_OFFSET: howto manager. (line 1326) -* BFD_RELOC_MMIX_CBRANCH: howto manager. (line 1290) -* BFD_RELOC_MMIX_CBRANCH_1: howto manager. (line 1292) -* BFD_RELOC_MMIX_CBRANCH_2: howto manager. (line 1293) -* BFD_RELOC_MMIX_CBRANCH_3: howto manager. (line 1294) -* BFD_RELOC_MMIX_CBRANCH_J: howto manager. (line 1291) -* BFD_RELOC_MMIX_GETA: howto manager. (line 1284) -* BFD_RELOC_MMIX_GETA_1: howto manager. (line 1285) -* BFD_RELOC_MMIX_GETA_2: howto manager. (line 1286) -* BFD_RELOC_MMIX_GETA_3: howto manager. (line 1287) -* BFD_RELOC_MMIX_JMP: howto manager. (line 1304) -* BFD_RELOC_MMIX_JMP_1: howto manager. (line 1305) -* BFD_RELOC_MMIX_JMP_2: howto manager. (line 1306) -* BFD_RELOC_MMIX_JMP_3: howto manager. (line 1307) -* BFD_RELOC_MMIX_LOCAL: howto manager. (line 1330) -* BFD_RELOC_MMIX_PUSHJ: howto manager. (line 1297) -* BFD_RELOC_MMIX_PUSHJ_1: howto manager. (line 1298) -* BFD_RELOC_MMIX_PUSHJ_2: howto manager. (line 1299) -* BFD_RELOC_MMIX_PUSHJ_3: howto manager. (line 1300) -* BFD_RELOC_MMIX_PUSHJ_STUBBABLE: howto manager. (line 1301) -* BFD_RELOC_MMIX_REG: howto manager. (line 1322) -* BFD_RELOC_MMIX_REG_OR_BYTE: howto manager. (line 1318) -* BFD_RELOC_MN10300_16_PCREL: howto manager. (line 1192) -* BFD_RELOC_MN10300_32_PCREL: howto manager. (line 1188) -* BFD_RELOC_MN10300_COPY: howto manager. (line 437) -* BFD_RELOC_MN10300_GLOB_DAT: howto manager. (line 440) -* BFD_RELOC_MN10300_GOT16: howto manager. (line 433) -* BFD_RELOC_MN10300_GOT24: howto manager. (line 429) -* BFD_RELOC_MN10300_GOT32: howto manager. (line 425) -* BFD_RELOC_MN10300_GOTOFF24: howto manager. (line 422) -* BFD_RELOC_MN10300_JMP_SLOT: howto manager. (line 443) -* BFD_RELOC_MN10300_RELATIVE: howto manager. (line 446) -* BFD_RELOC_MSP430_10_PCREL: howto manager. (line 1962) -* BFD_RELOC_MSP430_16: howto manager. (line 1964) -* BFD_RELOC_MSP430_16_BYTE: howto manager. (line 1966) -* BFD_RELOC_MSP430_16_PCREL: howto manager. (line 1963) -* BFD_RELOC_MSP430_16_PCREL_BYTE: howto manager. (line 1965) -* BFD_RELOC_MSP430_2X_PCREL: howto manager. (line 1967) -* BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 1968) -* BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 1956) -* BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 1953) -* BFD_RELOC_MT_HI16: howto manager. (line 1947) -* BFD_RELOC_MT_LO16: howto manager. (line 1950) -* BFD_RELOC_MT_PC16: howto manager. (line 1944) -* BFD_RELOC_MT_PCINSN8: howto manager. (line 1959) -* BFD_RELOC_NONE: howto manager. (line 116) -* BFD_RELOC_NS32K_DISP_16: howto manager. (line 509) -* BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 512) -* BFD_RELOC_NS32K_DISP_32: howto manager. (line 510) -* BFD_RELOC_NS32K_DISP_32_PCREL: howto manager. (line 513) -* BFD_RELOC_NS32K_DISP_8: howto manager. (line 508) -* BFD_RELOC_NS32K_DISP_8_PCREL: howto manager. (line 511) -* BFD_RELOC_NS32K_IMM_16: howto manager. (line 503) -* BFD_RELOC_NS32K_IMM_16_PCREL: howto manager. (line 506) -* BFD_RELOC_NS32K_IMM_32: howto manager. (line 504) -* BFD_RELOC_NS32K_IMM_32_PCREL: howto manager. (line 507) -* BFD_RELOC_NS32K_IMM_8: howto manager. (line 502) -* BFD_RELOC_NS32K_IMM_8_PCREL: howto manager. (line 505) -* BFD_RELOC_OPENRISC_ABS_26: howto manager. (line 1913) -* BFD_RELOC_OPENRISC_REL_26: howto manager. (line 1914) -* BFD_RELOC_PDP11_DISP_6_PCREL: howto manager. (line 517) -* BFD_RELOC_PDP11_DISP_8_PCREL: howto manager. (line 516) -* BFD_RELOC_PJ_CODE_DIR16: howto manager. (line 522) -* BFD_RELOC_PJ_CODE_DIR32: howto manager. (line 523) -* BFD_RELOC_PJ_CODE_HI16: howto manager. (line 520) -* BFD_RELOC_PJ_CODE_LO16: howto manager. (line 521) -* BFD_RELOC_PJ_CODE_REL16: howto manager. (line 524) -* BFD_RELOC_PJ_CODE_REL32: howto manager. (line 525) -* BFD_RELOC_PPC64_ADDR16_DS: howto manager. (line 570) -* BFD_RELOC_PPC64_ADDR16_LO_DS: howto manager. (line 571) -* BFD_RELOC_PPC64_DTPREL16_DS: howto manager. (line 617) -* BFD_RELOC_PPC64_DTPREL16_HIGHER: howto manager. (line 619) -* BFD_RELOC_PPC64_DTPREL16_HIGHERA: howto manager. (line 620) -* BFD_RELOC_PPC64_DTPREL16_HIGHEST: howto manager. (line 621) -* BFD_RELOC_PPC64_DTPREL16_HIGHESTA: howto manager. (line 622) -* BFD_RELOC_PPC64_DTPREL16_LO_DS: howto manager. (line 618) -* BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 572) -* BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 573) -* BFD_RELOC_PPC64_HIGHER: howto manager. (line 558) -* BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 559) -* BFD_RELOC_PPC64_HIGHEST: howto manager. (line 560) -* BFD_RELOC_PPC64_HIGHEST_S: howto manager. (line 561) -* BFD_RELOC_PPC64_PLT16_LO_DS: howto manager. (line 574) -* BFD_RELOC_PPC64_PLTGOT16: howto manager. (line 566) -* BFD_RELOC_PPC64_PLTGOT16_DS: howto manager. (line 579) -* BFD_RELOC_PPC64_PLTGOT16_HA: howto manager. (line 569) -* BFD_RELOC_PPC64_PLTGOT16_HI: howto manager. (line 568) -* BFD_RELOC_PPC64_PLTGOT16_LO: howto manager. (line 567) -* BFD_RELOC_PPC64_PLTGOT16_LO_DS: howto manager. (line 580) -* BFD_RELOC_PPC64_SECTOFF_DS: howto manager. (line 575) -* BFD_RELOC_PPC64_SECTOFF_LO_DS: howto manager. (line 576) -* BFD_RELOC_PPC64_TOC: howto manager. (line 565) -* BFD_RELOC_PPC64_TOC16_DS: howto manager. (line 577) -* BFD_RELOC_PPC64_TOC16_HA: howto manager. (line 564) -* BFD_RELOC_PPC64_TOC16_HI: howto manager. (line 563) -* BFD_RELOC_PPC64_TOC16_LO: howto manager. (line 562) -* BFD_RELOC_PPC64_TOC16_LO_DS: howto manager. (line 578) -* BFD_RELOC_PPC64_TPREL16_DS: howto manager. (line 611) -* BFD_RELOC_PPC64_TPREL16_HIGHER: howto manager. (line 613) -* BFD_RELOC_PPC64_TPREL16_HIGHERA: howto manager. (line 614) -* BFD_RELOC_PPC64_TPREL16_HIGHEST: howto manager. (line 615) -* BFD_RELOC_PPC64_TPREL16_HIGHESTA: howto manager. (line 616) -* BFD_RELOC_PPC64_TPREL16_LO_DS: howto manager. (line 612) -* BFD_RELOC_PPC_B16: howto manager. (line 531) -* BFD_RELOC_PPC_B16_BRNTAKEN: howto manager. (line 533) -* BFD_RELOC_PPC_B16_BRTAKEN: howto manager. (line 532) -* BFD_RELOC_PPC_B26: howto manager. (line 528) -* BFD_RELOC_PPC_BA16: howto manager. (line 534) -* BFD_RELOC_PPC_BA16_BRNTAKEN: howto manager. (line 536) -* BFD_RELOC_PPC_BA16_BRTAKEN: howto manager. (line 535) -* BFD_RELOC_PPC_BA26: howto manager. (line 529) -* BFD_RELOC_PPC_COPY: howto manager. (line 537) -* BFD_RELOC_PPC_DTPMOD: howto manager. (line 584) -* BFD_RELOC_PPC_DTPREL: howto manager. (line 594) -* BFD_RELOC_PPC_DTPREL16: howto manager. (line 590) -* BFD_RELOC_PPC_DTPREL16_HA: howto manager. (line 593) -* BFD_RELOC_PPC_DTPREL16_HI: howto manager. (line 592) -* BFD_RELOC_PPC_DTPREL16_LO: howto manager. (line 591) -* BFD_RELOC_PPC_EMB_BIT_FLD: howto manager. (line 556) -* BFD_RELOC_PPC_EMB_MRKREF: howto manager. (line 551) -* BFD_RELOC_PPC_EMB_NADDR16: howto manager. (line 543) -* BFD_RELOC_PPC_EMB_NADDR16_HA: howto manager. (line 546) -* BFD_RELOC_PPC_EMB_NADDR16_HI: howto manager. (line 545) -* BFD_RELOC_PPC_EMB_NADDR16_LO: howto manager. (line 544) -* BFD_RELOC_PPC_EMB_NADDR32: howto manager. (line 542) -* BFD_RELOC_PPC_EMB_RELSDA: howto manager. (line 557) -* BFD_RELOC_PPC_EMB_RELSEC16: howto manager. (line 552) -* BFD_RELOC_PPC_EMB_RELST_HA: howto manager. (line 555) -* BFD_RELOC_PPC_EMB_RELST_HI: howto manager. (line 554) -* BFD_RELOC_PPC_EMB_RELST_LO: howto manager. (line 553) -* BFD_RELOC_PPC_EMB_SDA21: howto manager. (line 550) -* BFD_RELOC_PPC_EMB_SDA2I16: howto manager. (line 548) -* BFD_RELOC_PPC_EMB_SDA2REL: howto manager. (line 549) -* BFD_RELOC_PPC_EMB_SDAI16: howto manager. (line 547) -* BFD_RELOC_PPC_GLOB_DAT: howto manager. (line 538) -* BFD_RELOC_PPC_GOT_DTPREL16: howto manager. (line 607) -* BFD_RELOC_PPC_GOT_DTPREL16_HA: howto manager. (line 610) -* BFD_RELOC_PPC_GOT_DTPREL16_HI: howto manager. (line 609) -* BFD_RELOC_PPC_GOT_DTPREL16_LO: howto manager. (line 608) -* BFD_RELOC_PPC_GOT_TLSGD16: howto manager. (line 595) -* BFD_RELOC_PPC_GOT_TLSGD16_HA: howto manager. (line 598) -* BFD_RELOC_PPC_GOT_TLSGD16_HI: howto manager. (line 597) -* BFD_RELOC_PPC_GOT_TLSGD16_LO: howto manager. (line 596) -* BFD_RELOC_PPC_GOT_TLSLD16: howto manager. (line 599) -* BFD_RELOC_PPC_GOT_TLSLD16_HA: howto manager. (line 602) -* BFD_RELOC_PPC_GOT_TLSLD16_HI: howto manager. (line 601) -* BFD_RELOC_PPC_GOT_TLSLD16_LO: howto manager. (line 600) -* BFD_RELOC_PPC_GOT_TPREL16: howto manager. (line 603) -* BFD_RELOC_PPC_GOT_TPREL16_HA: howto manager. (line 606) -* BFD_RELOC_PPC_GOT_TPREL16_HI: howto manager. (line 605) -* BFD_RELOC_PPC_GOT_TPREL16_LO: howto manager. (line 604) -* BFD_RELOC_PPC_JMP_SLOT: howto manager. (line 539) -* BFD_RELOC_PPC_LOCAL24PC: howto manager. (line 541) -* BFD_RELOC_PPC_RELATIVE: howto manager. (line 540) -* BFD_RELOC_PPC_TLS: howto manager. (line 583) -* BFD_RELOC_PPC_TOC16: howto manager. (line 530) -* BFD_RELOC_PPC_TPREL: howto manager. (line 589) -* BFD_RELOC_PPC_TPREL16: howto manager. (line 585) -* BFD_RELOC_PPC_TPREL16_HA: howto manager. (line 588) -* BFD_RELOC_PPC_TPREL16_HI: howto manager. (line 587) -* BFD_RELOC_PPC_TPREL16_LO: howto manager. (line 586) -* BFD_RELOC_RELC: howto manager. (line 1930) -* BFD_RELOC_RVA: howto manager. (line 85) -* BFD_RELOC_SCORE16_BRANCH: howto manager. (line 1559) -* BFD_RELOC_SCORE16_JMP: howto manager. (line 1556) -* BFD_RELOC_SCORE_BRANCH: howto manager. (line 1553) -* BFD_RELOC_SCORE_CALL15: howto manager. (line 1564) -* BFD_RELOC_SCORE_DUMMY1: howto manager. (line 1543) -* BFD_RELOC_SCORE_DUMMY2: howto manager. (line 1549) -* BFD_RELOC_SCORE_DUMMY_HI16: howto manager. (line 1565) -* BFD_RELOC_SCORE_GOT15: howto manager. (line 1562) -* BFD_RELOC_SCORE_GOT_LO16: howto manager. (line 1563) -* BFD_RELOC_SCORE_GPREL15: howto manager. (line 1546) -* BFD_RELOC_SCORE_JMP: howto manager. (line 1550) -* BFD_RELOC_SH_ALIGN: howto manager. (line 802) -* BFD_RELOC_SH_CODE: howto manager. (line 803) -* BFD_RELOC_SH_COPY: howto manager. (line 808) -* BFD_RELOC_SH_COPY64: howto manager. (line 833) -* BFD_RELOC_SH_COUNT: howto manager. (line 801) -* BFD_RELOC_SH_DATA: howto manager. (line 804) -* BFD_RELOC_SH_DISP12: howto manager. (line 784) -* BFD_RELOC_SH_DISP12BY2: howto manager. (line 785) -* BFD_RELOC_SH_DISP12BY4: howto manager. (line 786) -* BFD_RELOC_SH_DISP12BY8: howto manager. (line 787) -* BFD_RELOC_SH_DISP20: howto manager. (line 788) -* BFD_RELOC_SH_DISP20BY8: howto manager. (line 789) -* BFD_RELOC_SH_GLOB_DAT: howto manager. (line 809) -* BFD_RELOC_SH_GLOB_DAT64: howto manager. (line 834) -* BFD_RELOC_SH_GOT10BY4: howto manager. (line 837) -* BFD_RELOC_SH_GOT10BY8: howto manager. (line 838) -* BFD_RELOC_SH_GOT_HI16: howto manager. (line 816) -* BFD_RELOC_SH_GOT_LOW16: howto manager. (line 813) -* BFD_RELOC_SH_GOT_MEDHI16: howto manager. (line 815) -* BFD_RELOC_SH_GOT_MEDLOW16: howto manager. (line 814) -* BFD_RELOC_SH_GOTOFF_HI16: howto manager. (line 828) -* BFD_RELOC_SH_GOTOFF_LOW16: howto manager. (line 825) -* BFD_RELOC_SH_GOTOFF_MEDHI16: howto manager. (line 827) -* BFD_RELOC_SH_GOTOFF_MEDLOW16: howto manager. (line 826) -* BFD_RELOC_SH_GOTPC: howto manager. (line 812) -* BFD_RELOC_SH_GOTPC_HI16: howto manager. (line 832) -* BFD_RELOC_SH_GOTPC_LOW16: howto manager. (line 829) -* BFD_RELOC_SH_GOTPC_MEDHI16: howto manager. (line 831) -* BFD_RELOC_SH_GOTPC_MEDLOW16: howto manager. (line 830) -* BFD_RELOC_SH_GOTPLT10BY4: howto manager. (line 839) -* BFD_RELOC_SH_GOTPLT10BY8: howto manager. (line 840) -* BFD_RELOC_SH_GOTPLT32: howto manager. (line 841) -* BFD_RELOC_SH_GOTPLT_HI16: howto manager. (line 820) -* BFD_RELOC_SH_GOTPLT_LOW16: howto manager. (line 817) -* BFD_RELOC_SH_GOTPLT_MEDHI16: howto manager. (line 819) -* BFD_RELOC_SH_GOTPLT_MEDLOW16: howto manager. (line 818) -* BFD_RELOC_SH_IMM3: howto manager. (line 782) -* BFD_RELOC_SH_IMM3U: howto manager. (line 783) -* BFD_RELOC_SH_IMM4: howto manager. (line 790) -* BFD_RELOC_SH_IMM4BY2: howto manager. (line 791) -* BFD_RELOC_SH_IMM4BY4: howto manager. (line 792) -* BFD_RELOC_SH_IMM8: howto manager. (line 793) -* BFD_RELOC_SH_IMM8BY2: howto manager. (line 794) -* BFD_RELOC_SH_IMM8BY4: howto manager. (line 795) -* BFD_RELOC_SH_IMM_HI16: howto manager. (line 859) -* BFD_RELOC_SH_IMM_HI16_PCREL: howto manager. (line 860) -* BFD_RELOC_SH_IMM_LOW16: howto manager. (line 853) -* BFD_RELOC_SH_IMM_LOW16_PCREL: howto manager. (line 854) -* BFD_RELOC_SH_IMM_MEDHI16: howto manager. (line 857) -* BFD_RELOC_SH_IMM_MEDHI16_PCREL: howto manager. (line 858) -* BFD_RELOC_SH_IMM_MEDLOW16: howto manager. (line 855) -* BFD_RELOC_SH_IMM_MEDLOW16_PCREL: howto manager. (line 856) -* BFD_RELOC_SH_IMMS10: howto manager. (line 847) -* BFD_RELOC_SH_IMMS10BY2: howto manager. (line 848) -* BFD_RELOC_SH_IMMS10BY4: howto manager. (line 849) -* BFD_RELOC_SH_IMMS10BY8: howto manager. (line 850) -* BFD_RELOC_SH_IMMS16: howto manager. (line 851) -* BFD_RELOC_SH_IMMS6: howto manager. (line 844) -* BFD_RELOC_SH_IMMS6BY32: howto manager. (line 845) -* BFD_RELOC_SH_IMMU16: howto manager. (line 852) -* BFD_RELOC_SH_IMMU5: howto manager. (line 843) -* BFD_RELOC_SH_IMMU6: howto manager. (line 846) -* BFD_RELOC_SH_JMP_SLOT: howto manager. (line 810) -* BFD_RELOC_SH_JMP_SLOT64: howto manager. (line 835) -* BFD_RELOC_SH_LABEL: howto manager. (line 805) -* BFD_RELOC_SH_LOOP_END: howto manager. (line 807) -* BFD_RELOC_SH_LOOP_START: howto manager. (line 806) -* BFD_RELOC_SH_PCDISP12BY2: howto manager. (line 781) -* BFD_RELOC_SH_PCDISP8BY2: howto manager. (line 780) -* BFD_RELOC_SH_PCRELIMM8BY2: howto manager. (line 796) -* BFD_RELOC_SH_PCRELIMM8BY4: howto manager. (line 797) -* BFD_RELOC_SH_PLT_HI16: howto manager. (line 824) -* BFD_RELOC_SH_PLT_LOW16: howto manager. (line 821) -* BFD_RELOC_SH_PLT_MEDHI16: howto manager. (line 823) -* BFD_RELOC_SH_PLT_MEDLOW16: howto manager. (line 822) -* BFD_RELOC_SH_PT_16: howto manager. (line 861) -* BFD_RELOC_SH_RELATIVE: howto manager. (line 811) -* BFD_RELOC_SH_RELATIVE64: howto manager. (line 836) -* BFD_RELOC_SH_SHMEDIA_CODE: howto manager. (line 842) -* BFD_RELOC_SH_SWITCH16: howto manager. (line 798) -* BFD_RELOC_SH_SWITCH32: howto manager. (line 799) -* BFD_RELOC_SH_TLS_DTPMOD32: howto manager. (line 867) -* BFD_RELOC_SH_TLS_DTPOFF32: howto manager. (line 868) -* BFD_RELOC_SH_TLS_GD_32: howto manager. (line 862) -* BFD_RELOC_SH_TLS_IE_32: howto manager. (line 865) -* BFD_RELOC_SH_TLS_LD_32: howto manager. (line 863) -* BFD_RELOC_SH_TLS_LDO_32: howto manager. (line 864) -* BFD_RELOC_SH_TLS_LE_32: howto manager. (line 866) -* BFD_RELOC_SH_TLS_TPOFF32: howto manager. (line 869) -* BFD_RELOC_SH_USES: howto manager. (line 800) -* 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_SPU_HI16: howto manager. (line 206) -* BFD_RELOC_SPU_IMM10: howto manager. (line 197) -* BFD_RELOC_SPU_IMM10W: howto manager. (line 198) -* BFD_RELOC_SPU_IMM16: howto manager. (line 199) -* BFD_RELOC_SPU_IMM16W: howto manager. (line 200) -* BFD_RELOC_SPU_IMM18: howto manager. (line 201) -* BFD_RELOC_SPU_IMM7: howto manager. (line 195) -* BFD_RELOC_SPU_IMM8: howto manager. (line 196) -* BFD_RELOC_SPU_LO16: howto manager. (line 205) -* BFD_RELOC_SPU_PCREL16: howto manager. (line 204) -* BFD_RELOC_SPU_PCREL9a: howto manager. (line 202) -* BFD_RELOC_SPU_PCREL9b: howto manager. (line 203) -* BFD_RELOC_SPU_PPU32: howto manager. (line 207) -* BFD_RELOC_SPU_PPU64: howto manager. (line 208) -* BFD_RELOC_THUMB_PCREL_BLX: howto manager. (line 643) -* BFD_RELOC_THUMB_PCREL_BRANCH12: howto manager. (line 657) -* BFD_RELOC_THUMB_PCREL_BRANCH20: howto manager. (line 658) -* BFD_RELOC_THUMB_PCREL_BRANCH23: howto manager. (line 659) -* BFD_RELOC_THUMB_PCREL_BRANCH25: howto manager. (line 660) -* BFD_RELOC_THUMB_PCREL_BRANCH7: howto manager. (line 655) -* BFD_RELOC_THUMB_PCREL_BRANCH9: howto manager. (line 656) -* BFD_RELOC_TIC30_LDP: howto manager. (line 1196) -* BFD_RELOC_TIC54X_16_OF_23: howto manager. (line 1214) -* BFD_RELOC_TIC54X_23: howto manager. (line 1211) -* BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1219) -* BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1201) -* BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1206) -* bfd_reloc_type_lookup: howto manager. (line 2068) -* BFD_RELOC_V850_22_PCREL: howto manager. (line 1123) -* BFD_RELOC_V850_9_PCREL: howto manager. (line 1120) -* BFD_RELOC_V850_ALIGN: howto manager. (line 1181) -* BFD_RELOC_V850_CALLT_16_16_OFFSET: howto manager. (line 1172) -* BFD_RELOC_V850_CALLT_6_7_OFFSET: howto manager. (line 1169) -* BFD_RELOC_V850_LO16_SPLIT_OFFSET: howto manager. (line 1184) -* BFD_RELOC_V850_LONGCALL: howto manager. (line 1175) -* BFD_RELOC_V850_LONGJUMP: howto manager. (line 1178) -* BFD_RELOC_V850_SDA_15_16_OFFSET: howto manager. (line 1129) -* BFD_RELOC_V850_SDA_16_16_OFFSET: howto manager. (line 1126) -* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager. (line 1161) -* BFD_RELOC_V850_TDA_16_16_OFFSET: howto manager. (line 1151) -* BFD_RELOC_V850_TDA_4_4_OFFSET: howto manager. (line 1158) -* BFD_RELOC_V850_TDA_4_5_OFFSET: howto manager. (line 1154) -* BFD_RELOC_V850_TDA_6_8_OFFSET: howto manager. (line 1140) -* BFD_RELOC_V850_TDA_7_7_OFFSET: howto manager. (line 1148) -* BFD_RELOC_V850_TDA_7_8_OFFSET: howto manager. (line 1144) -* BFD_RELOC_V850_ZDA_15_16_OFFSET: howto manager. (line 1136) -* BFD_RELOC_V850_ZDA_16_16_OFFSET: howto manager. (line 1133) -* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager. (line 1165) -* BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 1939) -* BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 1940) -* BFD_RELOC_VAX_RELATIVE: howto manager. (line 1941) -* BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 1598) -* BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 1599) -* BFD_RELOC_VTABLE_ENTRY: howto manager. (line 1603) -* BFD_RELOC_VTABLE_INHERIT: howto manager. (line 1602) -* BFD_RELOC_X86_64_32S: howto manager. (line 481) -* BFD_RELOC_X86_64_COPY: howto manager. (line 476) -* BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 482) -* BFD_RELOC_X86_64_DTPOFF32: howto manager. (line 487) -* BFD_RELOC_X86_64_DTPOFF64: howto manager. (line 483) -* BFD_RELOC_X86_64_GLOB_DAT: howto manager. (line 477) -* BFD_RELOC_X86_64_GOT32: howto manager. (line 474) -* BFD_RELOC_X86_64_GOT64: howto manager. (line 492) -* BFD_RELOC_X86_64_GOTOFF64: howto manager. (line 490) -* BFD_RELOC_X86_64_GOTPC32: howto manager. (line 491) -* BFD_RELOC_X86_64_GOTPC32_TLSDESC: howto manager. (line 497) -* BFD_RELOC_X86_64_GOTPC64: howto manager. (line 494) -* BFD_RELOC_X86_64_GOTPCREL: howto manager. (line 480) -* BFD_RELOC_X86_64_GOTPCREL64: howto manager. (line 493) -* BFD_RELOC_X86_64_GOTPLT64: howto manager. (line 495) -* BFD_RELOC_X86_64_GOTTPOFF: howto manager. (line 488) -* BFD_RELOC_X86_64_JUMP_SLOT: howto manager. (line 478) -* BFD_RELOC_X86_64_PLT32: howto manager. (line 475) -* BFD_RELOC_X86_64_PLTOFF64: howto manager. (line 496) -* BFD_RELOC_X86_64_RELATIVE: howto manager. (line 479) -* BFD_RELOC_X86_64_TLSDESC: howto manager. (line 499) -* BFD_RELOC_X86_64_TLSDESC_CALL: howto manager. (line 498) -* BFD_RELOC_X86_64_TLSGD: howto manager. (line 485) -* BFD_RELOC_X86_64_TLSLD: howto manager. (line 486) -* BFD_RELOC_X86_64_TPOFF32: howto manager. (line 489) -* BFD_RELOC_X86_64_TPOFF64: howto manager. (line 484) -* BFD_RELOC_XC16X_PAG: howto manager. (line 1933) -* BFD_RELOC_XC16X_POF: howto manager. (line 1934) -* BFD_RELOC_XC16X_SEG: howto manager. (line 1935) -* BFD_RELOC_XC16X_SOF: howto manager. (line 1936) -* BFD_RELOC_XSTORMY16_12: howto manager. (line 1925) -* BFD_RELOC_XSTORMY16_24: howto manager. (line 1926) -* BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 1927) -* BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 1924) -* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2045) -* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2050) -* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 1992) -* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 1993) -* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 1991) -* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 1981) -* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 1982) -* BFD_RELOC_XTENSA_OP0: howto manager. (line 2039) -* BFD_RELOC_XTENSA_OP1: howto manager. (line 2040) -* BFD_RELOC_XTENSA_OP2: howto manager. (line 2041) -* BFD_RELOC_XTENSA_PLT: howto manager. (line 1986) -* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 1983) -* BFD_RELOC_XTENSA_RTLD: howto manager. (line 1976) -* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2021) -* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2001) -* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2031) -* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2011) -* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2032) -* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2012) -* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2033) -* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2013) -* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2034) -* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2014) -* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2035) -* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2015) -* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2022) -* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2002) -* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2023) -* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2003) -* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2024) -* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2004) -* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2025) -* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2005) -* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2026) -* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2006) -* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2027) -* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2007) -* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2028) -* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2008) -* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2029) -* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2009) -* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2030) -* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2010) -* BFD_RELOC_Z80_DISP8: howto manager. (line 2055) -* BFD_RELOC_Z8K_CALLR: howto manager. (line 2061) -* BFD_RELOC_Z8K_DISP7: howto manager. (line 2058) -* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2064) -* bfd_scan_arch: Architectures. (line 406) -* bfd_scan_vma: BFD front end. (line 426) -* bfd_seach_for_target: bfd_target. (line 464) +* BFD_RELOC_M32C_HI8: howto manager. (line 1127) +* BFD_RELOC_M32C_RL_1ADDR: howto manager. (line 1129) +* BFD_RELOC_M32C_RL_2ADDR: howto manager. (line 1130) +* BFD_RELOC_M32C_RL_JUMP: howto manager. (line 1128) +* BFD_RELOC_M32R_10_PCREL: howto manager. (line 1137) +* BFD_RELOC_M32R_18_PCREL: howto manager. (line 1141) +* BFD_RELOC_M32R_24: howto manager. (line 1133) +* BFD_RELOC_M32R_26_PCREL: howto manager. (line 1144) +* BFD_RELOC_M32R_26_PLTREL: howto manager. (line 1163) +* BFD_RELOC_M32R_COPY: howto manager. (line 1164) +* BFD_RELOC_M32R_GLOB_DAT: howto manager. (line 1165) +* BFD_RELOC_M32R_GOT16_HI_SLO: howto manager. (line 1174) +* BFD_RELOC_M32R_GOT16_HI_ULO: howto manager. (line 1173) +* BFD_RELOC_M32R_GOT16_LO: howto manager. (line 1175) +* BFD_RELOC_M32R_GOT24: howto manager. (line 1162) +* BFD_RELOC_M32R_GOTOFF: howto manager. (line 1168) +* BFD_RELOC_M32R_GOTOFF_HI_SLO: howto manager. (line 1170) +* BFD_RELOC_M32R_GOTOFF_HI_ULO: howto manager. (line 1169) +* BFD_RELOC_M32R_GOTOFF_LO: howto manager. (line 1171) +* BFD_RELOC_M32R_GOTPC24: howto manager. (line 1172) +* BFD_RELOC_M32R_GOTPC_HI_SLO: howto manager. (line 1177) +* BFD_RELOC_M32R_GOTPC_HI_ULO: howto manager. (line 1176) +* BFD_RELOC_M32R_GOTPC_LO: howto manager. (line 1178) +* BFD_RELOC_M32R_HI16_SLO: howto manager. (line 1151) +* BFD_RELOC_M32R_HI16_ULO: howto manager. (line 1147) +* BFD_RELOC_M32R_JMP_SLOT: howto manager. (line 1166) +* BFD_RELOC_M32R_LO16: howto manager. (line 1155) +* BFD_RELOC_M32R_RELATIVE: howto manager. (line 1167) +* BFD_RELOC_M32R_SDA16: howto manager. (line 1158) +* BFD_RELOC_M68HC11_24: howto manager. (line 1803) +* BFD_RELOC_M68HC11_3B: howto manager. (line 1778) +* BFD_RELOC_M68HC11_HI8: howto manager. (line 1770) +* BFD_RELOC_M68HC11_LO16: howto manager. (line 1792) +* BFD_RELOC_M68HC11_LO8: howto manager. (line 1774) +* BFD_RELOC_M68HC11_PAGE: howto manager. (line 1798) +* BFD_RELOC_M68HC11_RL_GROUP: howto manager. (line 1787) +* BFD_RELOC_M68HC11_RL_JUMP: howto manager. (line 1781) +* BFD_RELOC_M68HC12_5B: howto manager. (line 1809) +* BFD_RELOC_MACH_O_PAIR: howto manager. (line 2178) +* BFD_RELOC_MACH_O_SECTDIFF: howto manager. (line 2174) +* BFD_RELOC_MCORE_PCREL_32: howto manager. (line 1318) +* BFD_RELOC_MCORE_PCREL_IMM11BY2: howto manager. (line 1316) +* BFD_RELOC_MCORE_PCREL_IMM4BY2: howto manager. (line 1317) +* BFD_RELOC_MCORE_PCREL_IMM8BY4: howto manager. (line 1315) +* BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2: howto manager. (line 1319) +* BFD_RELOC_MCORE_RVA: howto manager. (line 1320) +* BFD_RELOC_MEP_16: howto manager. (line 1324) +* BFD_RELOC_MEP_32: howto manager. (line 1325) +* BFD_RELOC_MEP_8: howto manager. (line 1323) +* BFD_RELOC_MEP_ADDR24A4: howto manager. (line 1340) +* BFD_RELOC_MEP_GNU_VTENTRY: howto manager. (line 1342) +* BFD_RELOC_MEP_GNU_VTINHERIT: howto manager. (line 1341) +* BFD_RELOC_MEP_GPREL: howto manager. (line 1334) +* BFD_RELOC_MEP_HI16S: howto manager. (line 1333) +* BFD_RELOC_MEP_HI16U: howto manager. (line 1332) +* BFD_RELOC_MEP_LOW16: howto manager. (line 1331) +* BFD_RELOC_MEP_PCABS24A2: howto manager. (line 1330) +* BFD_RELOC_MEP_PCREL12A2: howto manager. (line 1327) +* BFD_RELOC_MEP_PCREL17A2: howto manager. (line 1328) +* BFD_RELOC_MEP_PCREL24A2: howto manager. (line 1329) +* BFD_RELOC_MEP_PCREL8A2: howto manager. (line 1326) +* BFD_RELOC_MEP_TPREL: howto manager. (line 1335) +* BFD_RELOC_MEP_TPREL7: howto manager. (line 1336) +* BFD_RELOC_MEP_TPREL7A2: howto manager. (line 1337) +* BFD_RELOC_MEP_TPREL7A4: howto manager. (line 1338) +* BFD_RELOC_MEP_UIMM24: howto manager. (line 1339) +* BFD_RELOC_MICROBLAZE_32_GOTOFF: howto manager. (line 2225) +* BFD_RELOC_MICROBLAZE_32_LO: howto manager. (line 2181) +* BFD_RELOC_MICROBLAZE_32_LO_PCREL: howto manager. (line 2185) +* BFD_RELOC_MICROBLAZE_32_ROSDA: howto manager. (line 2189) +* BFD_RELOC_MICROBLAZE_32_RWSDA: howto manager. (line 2193) +* BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM: howto manager. (line 2197) +* BFD_RELOC_MICROBLAZE_64_GOT: howto manager. (line 2211) +* BFD_RELOC_MICROBLAZE_64_GOTOFF: howto manager. (line 2220) +* BFD_RELOC_MICROBLAZE_64_GOTPC: howto manager. (line 2206) +* BFD_RELOC_MICROBLAZE_64_NONE: howto manager. (line 2201) +* BFD_RELOC_MICROBLAZE_64_PLT: howto manager. (line 2215) +* BFD_RELOC_MICROBLAZE_COPY: howto manager. (line 2229) +* BFD_RELOC_MIPS16_CALL16: howto manager. (line 364) +* BFD_RELOC_MIPS16_GOT16: howto manager. (line 363) +* BFD_RELOC_MIPS16_GPREL: howto manager. (line 339) +* BFD_RELOC_MIPS16_HI16: howto manager. (line 368) +* BFD_RELOC_MIPS16_HI16_S: howto manager. (line 371) +* BFD_RELOC_MIPS16_JMP: howto manager. (line 336) +* BFD_RELOC_MIPS16_LO16: howto manager. (line 377) +* BFD_RELOC_MIPS_CALL16: howto manager. (line 384) +* BFD_RELOC_MIPS_CALL_HI16: howto manager. (line 387) +* BFD_RELOC_MIPS_CALL_LO16: howto manager. (line 388) +* BFD_RELOC_MIPS_COPY: howto manager. (line 419) +* BFD_RELOC_MIPS_DELETE: howto manager. (line 397) +* BFD_RELOC_MIPS_GOT16: howto manager. (line 383) +* BFD_RELOC_MIPS_GOT_DISP: howto manager. (line 392) +* BFD_RELOC_MIPS_GOT_HI16: howto manager. (line 385) +* BFD_RELOC_MIPS_GOT_LO16: howto manager. (line 386) +* BFD_RELOC_MIPS_GOT_OFST: howto manager. (line 391) +* BFD_RELOC_MIPS_GOT_PAGE: howto manager. (line 390) +* BFD_RELOC_MIPS_HIGHER: howto manager. (line 399) +* BFD_RELOC_MIPS_HIGHEST: howto manager. (line 398) +* BFD_RELOC_MIPS_INSERT_A: howto manager. (line 395) +* BFD_RELOC_MIPS_INSERT_B: howto manager. (line 396) +* BFD_RELOC_MIPS_JALR: howto manager. (line 403) +* BFD_RELOC_MIPS_JMP: howto manager. (line 332) +* BFD_RELOC_MIPS_JUMP_SLOT: howto manager. (line 420) +* BFD_RELOC_MIPS_LITERAL: howto manager. (line 380) +* BFD_RELOC_MIPS_REL16: howto manager. (line 401) +* BFD_RELOC_MIPS_RELGOT: howto manager. (line 402) +* BFD_RELOC_MIPS_SCN_DISP: howto manager. (line 400) +* BFD_RELOC_MIPS_SHIFT5: howto manager. (line 393) +* BFD_RELOC_MIPS_SHIFT6: howto manager. (line 394) +* BFD_RELOC_MIPS_SUB: howto manager. (line 389) +* BFD_RELOC_MIPS_TLS_DTPMOD32: howto manager. (line 404) +* BFD_RELOC_MIPS_TLS_DTPMOD64: howto manager. (line 406) +* BFD_RELOC_MIPS_TLS_DTPREL32: howto manager. (line 405) +* BFD_RELOC_MIPS_TLS_DTPREL64: howto manager. (line 407) +* BFD_RELOC_MIPS_TLS_DTPREL_HI16: howto manager. (line 410) +* BFD_RELOC_MIPS_TLS_DTPREL_LO16: howto manager. (line 411) +* BFD_RELOC_MIPS_TLS_GD: howto manager. (line 408) +* BFD_RELOC_MIPS_TLS_GOTTPREL: howto manager. (line 412) +* BFD_RELOC_MIPS_TLS_LDM: howto manager. (line 409) +* BFD_RELOC_MIPS_TLS_TPREL32: howto manager. (line 413) +* BFD_RELOC_MIPS_TLS_TPREL64: howto manager. (line 414) +* BFD_RELOC_MIPS_TLS_TPREL_HI16: howto manager. (line 415) +* BFD_RELOC_MIPS_TLS_TPREL_LO16: howto manager. (line 416) +* BFD_RELOC_MMIX_ADDR19: howto manager. (line 1371) +* BFD_RELOC_MMIX_ADDR27: howto manager. (line 1375) +* BFD_RELOC_MMIX_BASE_PLUS_OFFSET: howto manager. (line 1387) +* BFD_RELOC_MMIX_CBRANCH: howto manager. (line 1351) +* BFD_RELOC_MMIX_CBRANCH_1: howto manager. (line 1353) +* BFD_RELOC_MMIX_CBRANCH_2: howto manager. (line 1354) +* BFD_RELOC_MMIX_CBRANCH_3: howto manager. (line 1355) +* BFD_RELOC_MMIX_CBRANCH_J: howto manager. (line 1352) +* BFD_RELOC_MMIX_GETA: howto manager. (line 1345) +* BFD_RELOC_MMIX_GETA_1: howto manager. (line 1346) +* BFD_RELOC_MMIX_GETA_2: howto manager. (line 1347) +* BFD_RELOC_MMIX_GETA_3: howto manager. (line 1348) +* BFD_RELOC_MMIX_JMP: howto manager. (line 1365) +* BFD_RELOC_MMIX_JMP_1: howto manager. (line 1366) +* BFD_RELOC_MMIX_JMP_2: howto manager. (line 1367) +* BFD_RELOC_MMIX_JMP_3: howto manager. (line 1368) +* BFD_RELOC_MMIX_LOCAL: howto manager. (line 1391) +* BFD_RELOC_MMIX_PUSHJ: howto manager. (line 1358) +* BFD_RELOC_MMIX_PUSHJ_1: howto manager. (line 1359) +* BFD_RELOC_MMIX_PUSHJ_2: howto manager. (line 1360) +* BFD_RELOC_MMIX_PUSHJ_3: howto manager. (line 1361) +* BFD_RELOC_MMIX_PUSHJ_STUBBABLE: howto manager. (line 1362) +* BFD_RELOC_MMIX_REG: howto manager. (line 1383) +* BFD_RELOC_MMIX_REG_OR_BYTE: howto manager. (line 1379) +* BFD_RELOC_MN10300_16_PCREL: howto manager. (line 1253) +* BFD_RELOC_MN10300_32_PCREL: howto manager. (line 1249) +* BFD_RELOC_MN10300_ALIGN: howto manager. (line 499) +* BFD_RELOC_MN10300_COPY: howto manager. (line 482) +* BFD_RELOC_MN10300_GLOB_DAT: howto manager. (line 485) +* BFD_RELOC_MN10300_GOT16: howto manager. (line 478) +* BFD_RELOC_MN10300_GOT24: howto manager. (line 474) +* BFD_RELOC_MN10300_GOT32: howto manager. (line 470) +* BFD_RELOC_MN10300_GOTOFF24: howto manager. (line 467) +* BFD_RELOC_MN10300_JMP_SLOT: howto manager. (line 488) +* BFD_RELOC_MN10300_RELATIVE: howto manager. (line 491) +* BFD_RELOC_MN10300_SYM_DIFF: howto manager. (line 494) +* BFD_RELOC_MOXIE_10_PCREL: howto manager. (line 423) +* BFD_RELOC_MSP430_10_PCREL: howto manager. (line 2049) +* BFD_RELOC_MSP430_16: howto manager. (line 2051) +* BFD_RELOC_MSP430_16_BYTE: howto manager. (line 2053) +* BFD_RELOC_MSP430_16_PCREL: howto manager. (line 2050) +* BFD_RELOC_MSP430_16_PCREL_BYTE: howto manager. (line 2052) +* BFD_RELOC_MSP430_2X_PCREL: howto manager. (line 2054) +* BFD_RELOC_MSP430_RL_PCREL: howto manager. (line 2055) +* BFD_RELOC_MT_GNU_VTENTRY: howto manager. (line 2043) +* BFD_RELOC_MT_GNU_VTINHERIT: howto manager. (line 2040) +* BFD_RELOC_MT_HI16: howto manager. (line 2034) +* BFD_RELOC_MT_LO16: howto manager. (line 2037) +* BFD_RELOC_MT_PC16: howto manager. (line 2031) +* BFD_RELOC_MT_PCINSN8: howto manager. (line 2046) +* BFD_RELOC_NONE: howto manager. (line 131) +* BFD_RELOC_NS32K_DISP_16: howto manager. (line 565) +* BFD_RELOC_NS32K_DISP_16_PCREL: howto manager. (line 568) +* BFD_RELOC_NS32K_DISP_32: howto manager. (line 566) +* BFD_RELOC_NS32K_DISP_32_PCREL: howto manager. (line 569) +* BFD_RELOC_NS32K_DISP_8: howto manager. (line 564) +* BFD_RELOC_NS32K_DISP_8_PCREL: howto manager. (line 567) +* BFD_RELOC_NS32K_IMM_16: howto manager. (line 559) +* BFD_RELOC_NS32K_IMM_16_PCREL: howto manager. (line 562) +* BFD_RELOC_NS32K_IMM_32: howto manager. (line 560) +* BFD_RELOC_NS32K_IMM_32_PCREL: howto manager. (line 563) +* BFD_RELOC_NS32K_IMM_8: howto manager. (line 558) +* BFD_RELOC_NS32K_IMM_8_PCREL: howto manager. (line 561) +* BFD_RELOC_OPENRISC_ABS_26: howto manager. (line 2000) +* BFD_RELOC_OPENRISC_REL_26: howto manager. (line 2001) +* BFD_RELOC_PDP11_DISP_6_PCREL: howto manager. (line 573) +* BFD_RELOC_PDP11_DISP_8_PCREL: howto manager. (line 572) +* BFD_RELOC_PJ_CODE_DIR16: howto manager. (line 578) +* BFD_RELOC_PJ_CODE_DIR32: howto manager. (line 579) +* BFD_RELOC_PJ_CODE_HI16: howto manager. (line 576) +* BFD_RELOC_PJ_CODE_LO16: howto manager. (line 577) +* BFD_RELOC_PJ_CODE_REL16: howto manager. (line 580) +* BFD_RELOC_PJ_CODE_REL32: howto manager. (line 581) +* BFD_RELOC_PPC64_ADDR16_DS: howto manager. (line 626) +* BFD_RELOC_PPC64_ADDR16_LO_DS: howto manager. (line 627) +* BFD_RELOC_PPC64_DTPREL16_DS: howto manager. (line 675) +* BFD_RELOC_PPC64_DTPREL16_HIGHER: howto manager. (line 677) +* BFD_RELOC_PPC64_DTPREL16_HIGHERA: howto manager. (line 678) +* BFD_RELOC_PPC64_DTPREL16_HIGHEST: howto manager. (line 679) +* BFD_RELOC_PPC64_DTPREL16_HIGHESTA: howto manager. (line 680) +* BFD_RELOC_PPC64_DTPREL16_LO_DS: howto manager. (line 676) +* BFD_RELOC_PPC64_GOT16_DS: howto manager. (line 628) +* BFD_RELOC_PPC64_GOT16_LO_DS: howto manager. (line 629) +* BFD_RELOC_PPC64_HIGHER: howto manager. (line 614) +* BFD_RELOC_PPC64_HIGHER_S: howto manager. (line 615) +* BFD_RELOC_PPC64_HIGHEST: howto manager. (line 616) +* BFD_RELOC_PPC64_HIGHEST_S: howto manager. (line 617) +* BFD_RELOC_PPC64_PLT16_LO_DS: howto manager. (line 630) +* BFD_RELOC_PPC64_PLTGOT16: howto manager. (line 622) +* BFD_RELOC_PPC64_PLTGOT16_DS: howto manager. (line 635) +* BFD_RELOC_PPC64_PLTGOT16_HA: howto manager. (line 625) +* BFD_RELOC_PPC64_PLTGOT16_HI: howto manager. (line 624) +* BFD_RELOC_PPC64_PLTGOT16_LO: howto manager. (line 623) +* BFD_RELOC_PPC64_PLTGOT16_LO_DS: howto manager. (line 636) +* BFD_RELOC_PPC64_SECTOFF_DS: howto manager. (line 631) +* BFD_RELOC_PPC64_SECTOFF_LO_DS: howto manager. (line 632) +* BFD_RELOC_PPC64_TOC: howto manager. (line 621) +* BFD_RELOC_PPC64_TOC16_DS: howto manager. (line 633) +* BFD_RELOC_PPC64_TOC16_HA: howto manager. (line 620) +* BFD_RELOC_PPC64_TOC16_HI: howto manager. (line 619) +* BFD_RELOC_PPC64_TOC16_LO: howto manager. (line 618) +* BFD_RELOC_PPC64_TOC16_LO_DS: howto manager. (line 634) +* BFD_RELOC_PPC64_TPREL16_DS: howto manager. (line 669) +* BFD_RELOC_PPC64_TPREL16_HIGHER: howto manager. (line 671) +* BFD_RELOC_PPC64_TPREL16_HIGHERA: howto manager. (line 672) +* BFD_RELOC_PPC64_TPREL16_HIGHEST: howto manager. (line 673) +* BFD_RELOC_PPC64_TPREL16_HIGHESTA: howto manager. (line 674) +* BFD_RELOC_PPC64_TPREL16_LO_DS: howto manager. (line 670) +* BFD_RELOC_PPC_B16: howto manager. (line 587) +* BFD_RELOC_PPC_B16_BRNTAKEN: howto manager. (line 589) +* BFD_RELOC_PPC_B16_BRTAKEN: howto manager. (line 588) +* BFD_RELOC_PPC_B26: howto manager. (line 584) +* BFD_RELOC_PPC_BA16: howto manager. (line 590) +* BFD_RELOC_PPC_BA16_BRNTAKEN: howto manager. (line 592) +* BFD_RELOC_PPC_BA16_BRTAKEN: howto manager. (line 591) +* BFD_RELOC_PPC_BA26: howto manager. (line 585) +* BFD_RELOC_PPC_COPY: howto manager. (line 593) +* BFD_RELOC_PPC_DTPMOD: howto manager. (line 642) +* BFD_RELOC_PPC_DTPREL: howto manager. (line 652) +* BFD_RELOC_PPC_DTPREL16: howto manager. (line 648) +* BFD_RELOC_PPC_DTPREL16_HA: howto manager. (line 651) +* BFD_RELOC_PPC_DTPREL16_HI: howto manager. (line 650) +* BFD_RELOC_PPC_DTPREL16_LO: howto manager. (line 649) +* BFD_RELOC_PPC_EMB_BIT_FLD: howto manager. (line 612) +* BFD_RELOC_PPC_EMB_MRKREF: howto manager. (line 607) +* BFD_RELOC_PPC_EMB_NADDR16: howto manager. (line 599) +* BFD_RELOC_PPC_EMB_NADDR16_HA: howto manager. (line 602) +* BFD_RELOC_PPC_EMB_NADDR16_HI: howto manager. (line 601) +* BFD_RELOC_PPC_EMB_NADDR16_LO: howto manager. (line 600) +* BFD_RELOC_PPC_EMB_NADDR32: howto manager. (line 598) +* BFD_RELOC_PPC_EMB_RELSDA: howto manager. (line 613) +* BFD_RELOC_PPC_EMB_RELSEC16: howto manager. (line 608) +* BFD_RELOC_PPC_EMB_RELST_HA: howto manager. (line 611) +* BFD_RELOC_PPC_EMB_RELST_HI: howto manager. (line 610) +* BFD_RELOC_PPC_EMB_RELST_LO: howto manager. (line 609) +* BFD_RELOC_PPC_EMB_SDA21: howto manager. (line 606) +* BFD_RELOC_PPC_EMB_SDA2I16: howto manager. (line 604) +* BFD_RELOC_PPC_EMB_SDA2REL: howto manager. (line 605) +* BFD_RELOC_PPC_EMB_SDAI16: howto manager. (line 603) +* BFD_RELOC_PPC_GLOB_DAT: howto manager. (line 594) +* BFD_RELOC_PPC_GOT_DTPREL16: howto manager. (line 665) +* BFD_RELOC_PPC_GOT_DTPREL16_HA: howto manager. (line 668) +* BFD_RELOC_PPC_GOT_DTPREL16_HI: howto manager. (line 667) +* BFD_RELOC_PPC_GOT_DTPREL16_LO: howto manager. (line 666) +* BFD_RELOC_PPC_GOT_TLSGD16: howto manager. (line 653) +* BFD_RELOC_PPC_GOT_TLSGD16_HA: howto manager. (line 656) +* BFD_RELOC_PPC_GOT_TLSGD16_HI: howto manager. (line 655) +* BFD_RELOC_PPC_GOT_TLSGD16_LO: howto manager. (line 654) +* BFD_RELOC_PPC_GOT_TLSLD16: howto manager. (line 657) +* BFD_RELOC_PPC_GOT_TLSLD16_HA: howto manager. (line 660) +* BFD_RELOC_PPC_GOT_TLSLD16_HI: howto manager. (line 659) +* BFD_RELOC_PPC_GOT_TLSLD16_LO: howto manager. (line 658) +* BFD_RELOC_PPC_GOT_TPREL16: howto manager. (line 661) +* BFD_RELOC_PPC_GOT_TPREL16_HA: howto manager. (line 664) +* BFD_RELOC_PPC_GOT_TPREL16_HI: howto manager. (line 663) +* BFD_RELOC_PPC_GOT_TPREL16_LO: howto manager. (line 662) +* BFD_RELOC_PPC_JMP_SLOT: howto manager. (line 595) +* BFD_RELOC_PPC_LOCAL24PC: howto manager. (line 597) +* BFD_RELOC_PPC_RELATIVE: howto manager. (line 596) +* BFD_RELOC_PPC_TLS: howto manager. (line 639) +* BFD_RELOC_PPC_TLSGD: howto manager. (line 640) +* BFD_RELOC_PPC_TLSLD: howto manager. (line 641) +* BFD_RELOC_PPC_TOC16: howto manager. (line 586) +* BFD_RELOC_PPC_TPREL: howto manager. (line 647) +* BFD_RELOC_PPC_TPREL16: howto manager. (line 643) +* BFD_RELOC_PPC_TPREL16_HA: howto manager. (line 646) +* BFD_RELOC_PPC_TPREL16_HI: howto manager. (line 645) +* BFD_RELOC_PPC_TPREL16_LO: howto manager. (line 644) +* BFD_RELOC_RELC: howto manager. (line 2017) +* BFD_RELOC_RVA: howto manager. (line 100) +* BFD_RELOC_SCORE16_BRANCH: howto manager. (line 1623) +* BFD_RELOC_SCORE16_JMP: howto manager. (line 1620) +* BFD_RELOC_SCORE_BCMP: howto manager. (line 1626) +* BFD_RELOC_SCORE_BRANCH: howto manager. (line 1611) +* BFD_RELOC_SCORE_CALL15: howto manager. (line 1631) +* BFD_RELOC_SCORE_DUMMY2: howto manager. (line 1607) +* BFD_RELOC_SCORE_DUMMY_HI16: howto manager. (line 1632) +* BFD_RELOC_SCORE_GOT15: howto manager. (line 1629) +* BFD_RELOC_SCORE_GOT_LO16: howto manager. (line 1630) +* BFD_RELOC_SCORE_GPREL15: howto manager. (line 1604) +* BFD_RELOC_SCORE_IMM30: howto manager. (line 1614) +* BFD_RELOC_SCORE_IMM32: howto manager. (line 1617) +* BFD_RELOC_SCORE_JMP: howto manager. (line 1608) +* BFD_RELOC_SH_ALIGN: howto manager. (line 863) +* BFD_RELOC_SH_CODE: howto manager. (line 864) +* BFD_RELOC_SH_COPY: howto manager. (line 869) +* BFD_RELOC_SH_COPY64: howto manager. (line 894) +* BFD_RELOC_SH_COUNT: howto manager. (line 862) +* BFD_RELOC_SH_DATA: howto manager. (line 865) +* BFD_RELOC_SH_DISP12: howto manager. (line 845) +* BFD_RELOC_SH_DISP12BY2: howto manager. (line 846) +* BFD_RELOC_SH_DISP12BY4: howto manager. (line 847) +* BFD_RELOC_SH_DISP12BY8: howto manager. (line 848) +* BFD_RELOC_SH_DISP20: howto manager. (line 849) +* BFD_RELOC_SH_DISP20BY8: howto manager. (line 850) +* BFD_RELOC_SH_GLOB_DAT: howto manager. (line 870) +* BFD_RELOC_SH_GLOB_DAT64: howto manager. (line 895) +* BFD_RELOC_SH_GOT10BY4: howto manager. (line 898) +* BFD_RELOC_SH_GOT10BY8: howto manager. (line 899) +* BFD_RELOC_SH_GOT_HI16: howto manager. (line 877) +* BFD_RELOC_SH_GOT_LOW16: howto manager. (line 874) +* BFD_RELOC_SH_GOT_MEDHI16: howto manager. (line 876) +* BFD_RELOC_SH_GOT_MEDLOW16: howto manager. (line 875) +* BFD_RELOC_SH_GOTOFF_HI16: howto manager. (line 889) +* BFD_RELOC_SH_GOTOFF_LOW16: howto manager. (line 886) +* BFD_RELOC_SH_GOTOFF_MEDHI16: howto manager. (line 888) +* BFD_RELOC_SH_GOTOFF_MEDLOW16: howto manager. (line 887) +* BFD_RELOC_SH_GOTPC: howto manager. (line 873) +* BFD_RELOC_SH_GOTPC_HI16: howto manager. (line 893) +* BFD_RELOC_SH_GOTPC_LOW16: howto manager. (line 890) +* BFD_RELOC_SH_GOTPC_MEDHI16: howto manager. (line 892) +* BFD_RELOC_SH_GOTPC_MEDLOW16: howto manager. (line 891) +* BFD_RELOC_SH_GOTPLT10BY4: howto manager. (line 900) +* BFD_RELOC_SH_GOTPLT10BY8: howto manager. (line 901) +* BFD_RELOC_SH_GOTPLT32: howto manager. (line 902) +* BFD_RELOC_SH_GOTPLT_HI16: howto manager. (line 881) +* BFD_RELOC_SH_GOTPLT_LOW16: howto manager. (line 878) +* BFD_RELOC_SH_GOTPLT_MEDHI16: howto manager. (line 880) +* BFD_RELOC_SH_GOTPLT_MEDLOW16: howto manager. (line 879) +* BFD_RELOC_SH_IMM3: howto manager. (line 843) +* BFD_RELOC_SH_IMM3U: howto manager. (line 844) +* BFD_RELOC_SH_IMM4: howto manager. (line 851) +* BFD_RELOC_SH_IMM4BY2: howto manager. (line 852) +* BFD_RELOC_SH_IMM4BY4: howto manager. (line 853) +* BFD_RELOC_SH_IMM8: howto manager. (line 854) +* BFD_RELOC_SH_IMM8BY2: howto manager. (line 855) +* BFD_RELOC_SH_IMM8BY4: howto manager. (line 856) +* BFD_RELOC_SH_IMM_HI16: howto manager. (line 920) +* BFD_RELOC_SH_IMM_HI16_PCREL: howto manager. (line 921) +* BFD_RELOC_SH_IMM_LOW16: howto manager. (line 914) +* BFD_RELOC_SH_IMM_LOW16_PCREL: howto manager. (line 915) +* BFD_RELOC_SH_IMM_MEDHI16: howto manager. (line 918) +* BFD_RELOC_SH_IMM_MEDHI16_PCREL: howto manager. (line 919) +* BFD_RELOC_SH_IMM_MEDLOW16: howto manager. (line 916) +* BFD_RELOC_SH_IMM_MEDLOW16_PCREL: howto manager. (line 917) +* BFD_RELOC_SH_IMMS10: howto manager. (line 908) +* BFD_RELOC_SH_IMMS10BY2: howto manager. (line 909) +* BFD_RELOC_SH_IMMS10BY4: howto manager. (line 910) +* BFD_RELOC_SH_IMMS10BY8: howto manager. (line 911) +* BFD_RELOC_SH_IMMS16: howto manager. (line 912) +* BFD_RELOC_SH_IMMS6: howto manager. (line 905) +* BFD_RELOC_SH_IMMS6BY32: howto manager. (line 906) +* BFD_RELOC_SH_IMMU16: howto manager. (line 913) +* BFD_RELOC_SH_IMMU5: howto manager. (line 904) +* BFD_RELOC_SH_IMMU6: howto manager. (line 907) +* BFD_RELOC_SH_JMP_SLOT: howto manager. (line 871) +* BFD_RELOC_SH_JMP_SLOT64: howto manager. (line 896) +* BFD_RELOC_SH_LABEL: howto manager. (line 866) +* BFD_RELOC_SH_LOOP_END: howto manager. (line 868) +* BFD_RELOC_SH_LOOP_START: howto manager. (line 867) +* BFD_RELOC_SH_PCDISP12BY2: howto manager. (line 842) +* BFD_RELOC_SH_PCDISP8BY2: howto manager. (line 841) +* BFD_RELOC_SH_PCRELIMM8BY2: howto manager. (line 857) +* BFD_RELOC_SH_PCRELIMM8BY4: howto manager. (line 858) +* BFD_RELOC_SH_PLT_HI16: howto manager. (line 885) +* BFD_RELOC_SH_PLT_LOW16: howto manager. (line 882) +* BFD_RELOC_SH_PLT_MEDHI16: howto manager. (line 884) +* BFD_RELOC_SH_PLT_MEDLOW16: howto manager. (line 883) +* BFD_RELOC_SH_PT_16: howto manager. (line 922) +* BFD_RELOC_SH_RELATIVE: howto manager. (line 872) +* BFD_RELOC_SH_RELATIVE64: howto manager. (line 897) +* BFD_RELOC_SH_SHMEDIA_CODE: howto manager. (line 903) +* BFD_RELOC_SH_SWITCH16: howto manager. (line 859) +* BFD_RELOC_SH_SWITCH32: howto manager. (line 860) +* BFD_RELOC_SH_TLS_DTPMOD32: howto manager. (line 928) +* BFD_RELOC_SH_TLS_DTPOFF32: howto manager. (line 929) +* BFD_RELOC_SH_TLS_GD_32: howto manager. (line 923) +* BFD_RELOC_SH_TLS_IE_32: howto manager. (line 926) +* BFD_RELOC_SH_TLS_LD_32: howto manager. (line 924) +* BFD_RELOC_SH_TLS_LDO_32: howto manager. (line 925) +* BFD_RELOC_SH_TLS_LE_32: howto manager. (line 927) +* BFD_RELOC_SH_TLS_TPOFF32: howto manager. (line 930) +* BFD_RELOC_SH_USES: howto manager. (line 861) +* BFD_RELOC_SPARC13: howto manager. (line 134) +* BFD_RELOC_SPARC22: howto manager. (line 133) +* BFD_RELOC_SPARC_10: howto manager. (line 161) +* BFD_RELOC_SPARC_11: howto manager. (line 162) +* BFD_RELOC_SPARC_5: howto manager. (line 174) +* BFD_RELOC_SPARC_6: howto manager. (line 173) +* BFD_RELOC_SPARC_64: howto manager. (line 160) +* BFD_RELOC_SPARC_7: howto manager. (line 172) +* BFD_RELOC_SPARC_BASE13: howto manager. (line 156) +* BFD_RELOC_SPARC_BASE22: howto manager. (line 157) +* BFD_RELOC_SPARC_COPY: howto manager. (line 141) +* BFD_RELOC_SPARC_DISP64: howto manager. (line 175) +* BFD_RELOC_SPARC_GLOB_DAT: howto manager. (line 142) +* BFD_RELOC_SPARC_GOT10: howto manager. (line 135) +* BFD_RELOC_SPARC_GOT13: howto manager. (line 136) +* BFD_RELOC_SPARC_GOT22: howto manager. (line 137) +* BFD_RELOC_SPARC_GOTDATA_HIX22: howto manager. (line 148) +* BFD_RELOC_SPARC_GOTDATA_LOX10: howto manager. (line 149) +* BFD_RELOC_SPARC_GOTDATA_OP: howto manager. (line 152) +* BFD_RELOC_SPARC_GOTDATA_OP_HIX22: howto manager. (line 150) +* BFD_RELOC_SPARC_GOTDATA_OP_LOX10: howto manager. (line 151) +* BFD_RELOC_SPARC_H44: howto manager. (line 180) +* BFD_RELOC_SPARC_HH22: howto manager. (line 164) +* BFD_RELOC_SPARC_HIX22: howto manager. (line 178) +* BFD_RELOC_SPARC_HM10: howto manager. (line 165) +* BFD_RELOC_SPARC_JMP_SLOT: howto manager. (line 143) +* BFD_RELOC_SPARC_L44: howto manager. (line 182) +* BFD_RELOC_SPARC_LM22: howto manager. (line 166) +* BFD_RELOC_SPARC_LOX10: howto manager. (line 179) +* BFD_RELOC_SPARC_M44: howto manager. (line 181) +* BFD_RELOC_SPARC_OLO10: howto manager. (line 163) +* BFD_RELOC_SPARC_PC10: howto manager. (line 138) +* BFD_RELOC_SPARC_PC22: howto manager. (line 139) +* BFD_RELOC_SPARC_PC_HH22: howto manager. (line 167) +* BFD_RELOC_SPARC_PC_HM10: howto manager. (line 168) +* BFD_RELOC_SPARC_PC_LM22: howto manager. (line 169) +* BFD_RELOC_SPARC_PLT32: howto manager. (line 176) +* BFD_RELOC_SPARC_PLT64: howto manager. (line 177) +* BFD_RELOC_SPARC_REGISTER: howto manager. (line 183) +* BFD_RELOC_SPARC_RELATIVE: howto manager. (line 144) +* BFD_RELOC_SPARC_REV32: howto manager. (line 186) +* BFD_RELOC_SPARC_TLS_DTPMOD32: howto manager. (line 207) +* BFD_RELOC_SPARC_TLS_DTPMOD64: howto manager. (line 208) +* BFD_RELOC_SPARC_TLS_DTPOFF32: howto manager. (line 209) +* BFD_RELOC_SPARC_TLS_DTPOFF64: howto manager. (line 210) +* BFD_RELOC_SPARC_TLS_GD_ADD: howto manager. (line 191) +* BFD_RELOC_SPARC_TLS_GD_CALL: howto manager. (line 192) +* BFD_RELOC_SPARC_TLS_GD_HI22: howto manager. (line 189) +* BFD_RELOC_SPARC_TLS_GD_LO10: howto manager. (line 190) +* BFD_RELOC_SPARC_TLS_IE_ADD: howto manager. (line 204) +* BFD_RELOC_SPARC_TLS_IE_HI22: howto manager. (line 200) +* BFD_RELOC_SPARC_TLS_IE_LD: howto manager. (line 202) +* BFD_RELOC_SPARC_TLS_IE_LDX: howto manager. (line 203) +* BFD_RELOC_SPARC_TLS_IE_LO10: howto manager. (line 201) +* BFD_RELOC_SPARC_TLS_LDM_ADD: howto manager. (line 195) +* BFD_RELOC_SPARC_TLS_LDM_CALL: howto manager. (line 196) +* BFD_RELOC_SPARC_TLS_LDM_HI22: howto manager. (line 193) +* BFD_RELOC_SPARC_TLS_LDM_LO10: howto manager. (line 194) +* BFD_RELOC_SPARC_TLS_LDO_ADD: howto manager. (line 199) +* BFD_RELOC_SPARC_TLS_LDO_HIX22: howto manager. (line 197) +* BFD_RELOC_SPARC_TLS_LDO_LOX10: howto manager. (line 198) +* BFD_RELOC_SPARC_TLS_LE_HIX22: howto manager. (line 205) +* BFD_RELOC_SPARC_TLS_LE_LOX10: howto manager. (line 206) +* BFD_RELOC_SPARC_TLS_TPOFF32: howto manager. (line 211) +* BFD_RELOC_SPARC_TLS_TPOFF64: howto manager. (line 212) +* BFD_RELOC_SPARC_UA16: howto manager. (line 145) +* BFD_RELOC_SPARC_UA32: howto manager. (line 146) +* BFD_RELOC_SPARC_UA64: howto manager. (line 147) +* BFD_RELOC_SPARC_WDISP16: howto manager. (line 170) +* BFD_RELOC_SPARC_WDISP19: howto manager. (line 171) +* BFD_RELOC_SPARC_WDISP22: howto manager. (line 132) +* BFD_RELOC_SPARC_WPLT30: howto manager. (line 140) +* BFD_RELOC_SPU_ADD_PIC: howto manager. (line 229) +* BFD_RELOC_SPU_HI16: howto manager. (line 226) +* BFD_RELOC_SPU_IMM10: howto manager. (line 217) +* BFD_RELOC_SPU_IMM10W: howto manager. (line 218) +* BFD_RELOC_SPU_IMM16: howto manager. (line 219) +* BFD_RELOC_SPU_IMM16W: howto manager. (line 220) +* BFD_RELOC_SPU_IMM18: howto manager. (line 221) +* BFD_RELOC_SPU_IMM7: howto manager. (line 215) +* BFD_RELOC_SPU_IMM8: howto manager. (line 216) +* BFD_RELOC_SPU_LO16: howto manager. (line 225) +* BFD_RELOC_SPU_PCREL16: howto manager. (line 224) +* BFD_RELOC_SPU_PCREL9a: howto manager. (line 222) +* BFD_RELOC_SPU_PCREL9b: howto manager. (line 223) +* BFD_RELOC_SPU_PPU32: howto manager. (line 227) +* BFD_RELOC_SPU_PPU64: howto manager. (line 228) +* BFD_RELOC_THUMB_PCREL_BLX: howto manager. (line 701) +* BFD_RELOC_THUMB_PCREL_BRANCH12: howto manager. (line 715) +* BFD_RELOC_THUMB_PCREL_BRANCH20: howto manager. (line 716) +* BFD_RELOC_THUMB_PCREL_BRANCH23: howto manager. (line 717) +* BFD_RELOC_THUMB_PCREL_BRANCH25: howto manager. (line 718) +* BFD_RELOC_THUMB_PCREL_BRANCH7: howto manager. (line 713) +* BFD_RELOC_THUMB_PCREL_BRANCH9: howto manager. (line 714) +* BFD_RELOC_TIC30_LDP: howto manager. (line 1257) +* BFD_RELOC_TIC54X_16_OF_23: howto manager. (line 1275) +* BFD_RELOC_TIC54X_23: howto manager. (line 1272) +* BFD_RELOC_TIC54X_MS7_OF_23: howto manager. (line 1280) +* BFD_RELOC_TIC54X_PARTLS7: howto manager. (line 1262) +* BFD_RELOC_TIC54X_PARTMS9: howto manager. (line 1267) +* bfd_reloc_type_lookup: howto manager. (line 2234) +* BFD_RELOC_V850_22_PCREL: howto manager. (line 1184) +* BFD_RELOC_V850_9_PCREL: howto manager. (line 1181) +* BFD_RELOC_V850_ALIGN: howto manager. (line 1242) +* BFD_RELOC_V850_CALLT_16_16_OFFSET: howto manager. (line 1233) +* BFD_RELOC_V850_CALLT_6_7_OFFSET: howto manager. (line 1230) +* BFD_RELOC_V850_LO16_SPLIT_OFFSET: howto manager. (line 1245) +* BFD_RELOC_V850_LONGCALL: howto manager. (line 1236) +* BFD_RELOC_V850_LONGJUMP: howto manager. (line 1239) +* BFD_RELOC_V850_SDA_15_16_OFFSET: howto manager. (line 1190) +* BFD_RELOC_V850_SDA_16_16_OFFSET: howto manager. (line 1187) +* BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET: howto manager. (line 1222) +* BFD_RELOC_V850_TDA_16_16_OFFSET: howto manager. (line 1212) +* BFD_RELOC_V850_TDA_4_4_OFFSET: howto manager. (line 1219) +* BFD_RELOC_V850_TDA_4_5_OFFSET: howto manager. (line 1215) +* BFD_RELOC_V850_TDA_6_8_OFFSET: howto manager. (line 1201) +* BFD_RELOC_V850_TDA_7_7_OFFSET: howto manager. (line 1209) +* BFD_RELOC_V850_TDA_7_8_OFFSET: howto manager. (line 1205) +* BFD_RELOC_V850_ZDA_15_16_OFFSET: howto manager. (line 1197) +* BFD_RELOC_V850_ZDA_16_16_OFFSET: howto manager. (line 1194) +* BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET: howto manager. (line 1226) +* BFD_RELOC_VAX_GLOB_DAT: howto manager. (line 2026) +* BFD_RELOC_VAX_JMP_SLOT: howto manager. (line 2027) +* BFD_RELOC_VAX_RELATIVE: howto manager. (line 2028) +* BFD_RELOC_VPE4KMATH_DATA: howto manager. (line 1665) +* BFD_RELOC_VPE4KMATH_INSN: howto manager. (line 1666) +* BFD_RELOC_VTABLE_ENTRY: howto manager. (line 1670) +* BFD_RELOC_VTABLE_INHERIT: howto manager. (line 1669) +* BFD_RELOC_X86_64_32S: howto manager. (line 536) +* BFD_RELOC_X86_64_COPY: howto manager. (line 531) +* BFD_RELOC_X86_64_DTPMOD64: howto manager. (line 537) +* BFD_RELOC_X86_64_DTPOFF32: howto manager. (line 542) +* BFD_RELOC_X86_64_DTPOFF64: howto manager. (line 538) +* BFD_RELOC_X86_64_GLOB_DAT: howto manager. (line 532) +* BFD_RELOC_X86_64_GOT32: howto manager. (line 529) +* BFD_RELOC_X86_64_GOT64: howto manager. (line 547) +* BFD_RELOC_X86_64_GOTOFF64: howto manager. (line 545) +* BFD_RELOC_X86_64_GOTPC32: howto manager. (line 546) +* BFD_RELOC_X86_64_GOTPC32_TLSDESC: howto manager. (line 552) +* BFD_RELOC_X86_64_GOTPC64: howto manager. (line 549) +* BFD_RELOC_X86_64_GOTPCREL: howto manager. (line 535) +* BFD_RELOC_X86_64_GOTPCREL64: howto manager. (line 548) +* BFD_RELOC_X86_64_GOTPLT64: howto manager. (line 550) +* BFD_RELOC_X86_64_GOTTPOFF: howto manager. (line 543) +* BFD_RELOC_X86_64_IRELATIVE: howto manager. (line 555) +* BFD_RELOC_X86_64_JUMP_SLOT: howto manager. (line 533) +* BFD_RELOC_X86_64_PLT32: howto manager. (line 530) +* BFD_RELOC_X86_64_PLTOFF64: howto manager. (line 551) +* BFD_RELOC_X86_64_RELATIVE: howto manager. (line 534) +* BFD_RELOC_X86_64_TLSDESC: howto manager. (line 554) +* BFD_RELOC_X86_64_TLSDESC_CALL: howto manager. (line 553) +* BFD_RELOC_X86_64_TLSGD: howto manager. (line 540) +* BFD_RELOC_X86_64_TLSLD: howto manager. (line 541) +* BFD_RELOC_X86_64_TPOFF32: howto manager. (line 544) +* BFD_RELOC_X86_64_TPOFF64: howto manager. (line 539) +* BFD_RELOC_XC16X_PAG: howto manager. (line 2020) +* BFD_RELOC_XC16X_POF: howto manager. (line 2021) +* BFD_RELOC_XC16X_SEG: howto manager. (line 2022) +* BFD_RELOC_XC16X_SOF: howto manager. (line 2023) +* BFD_RELOC_XSTORMY16_12: howto manager. (line 2012) +* BFD_RELOC_XSTORMY16_24: howto manager. (line 2013) +* BFD_RELOC_XSTORMY16_FPTR16: howto manager. (line 2014) +* BFD_RELOC_XSTORMY16_REL_12: howto manager. (line 2011) +* BFD_RELOC_XTENSA_ASM_EXPAND: howto manager. (line 2132) +* BFD_RELOC_XTENSA_ASM_SIMPLIFY: howto manager. (line 2137) +* BFD_RELOC_XTENSA_DIFF16: howto manager. (line 2079) +* BFD_RELOC_XTENSA_DIFF32: howto manager. (line 2080) +* BFD_RELOC_XTENSA_DIFF8: howto manager. (line 2078) +* BFD_RELOC_XTENSA_GLOB_DAT: howto manager. (line 2068) +* BFD_RELOC_XTENSA_JMP_SLOT: howto manager. (line 2069) +* BFD_RELOC_XTENSA_OP0: howto manager. (line 2126) +* BFD_RELOC_XTENSA_OP1: howto manager. (line 2127) +* BFD_RELOC_XTENSA_OP2: howto manager. (line 2128) +* BFD_RELOC_XTENSA_PLT: howto manager. (line 2073) +* BFD_RELOC_XTENSA_RELATIVE: howto manager. (line 2070) +* BFD_RELOC_XTENSA_RTLD: howto manager. (line 2063) +* BFD_RELOC_XTENSA_SLOT0_ALT: howto manager. (line 2108) +* BFD_RELOC_XTENSA_SLOT0_OP: howto manager. (line 2088) +* BFD_RELOC_XTENSA_SLOT10_ALT: howto manager. (line 2118) +* BFD_RELOC_XTENSA_SLOT10_OP: howto manager. (line 2098) +* BFD_RELOC_XTENSA_SLOT11_ALT: howto manager. (line 2119) +* BFD_RELOC_XTENSA_SLOT11_OP: howto manager. (line 2099) +* BFD_RELOC_XTENSA_SLOT12_ALT: howto manager. (line 2120) +* BFD_RELOC_XTENSA_SLOT12_OP: howto manager. (line 2100) +* BFD_RELOC_XTENSA_SLOT13_ALT: howto manager. (line 2121) +* BFD_RELOC_XTENSA_SLOT13_OP: howto manager. (line 2101) +* BFD_RELOC_XTENSA_SLOT14_ALT: howto manager. (line 2122) +* BFD_RELOC_XTENSA_SLOT14_OP: howto manager. (line 2102) +* BFD_RELOC_XTENSA_SLOT1_ALT: howto manager. (line 2109) +* BFD_RELOC_XTENSA_SLOT1_OP: howto manager. (line 2089) +* BFD_RELOC_XTENSA_SLOT2_ALT: howto manager. (line 2110) +* BFD_RELOC_XTENSA_SLOT2_OP: howto manager. (line 2090) +* BFD_RELOC_XTENSA_SLOT3_ALT: howto manager. (line 2111) +* BFD_RELOC_XTENSA_SLOT3_OP: howto manager. (line 2091) +* BFD_RELOC_XTENSA_SLOT4_ALT: howto manager. (line 2112) +* BFD_RELOC_XTENSA_SLOT4_OP: howto manager. (line 2092) +* BFD_RELOC_XTENSA_SLOT5_ALT: howto manager. (line 2113) +* BFD_RELOC_XTENSA_SLOT5_OP: howto manager. (line 2093) +* BFD_RELOC_XTENSA_SLOT6_ALT: howto manager. (line 2114) +* BFD_RELOC_XTENSA_SLOT6_OP: howto manager. (line 2094) +* BFD_RELOC_XTENSA_SLOT7_ALT: howto manager. (line 2115) +* BFD_RELOC_XTENSA_SLOT7_OP: howto manager. (line 2095) +* BFD_RELOC_XTENSA_SLOT8_ALT: howto manager. (line 2116) +* BFD_RELOC_XTENSA_SLOT8_OP: howto manager. (line 2096) +* BFD_RELOC_XTENSA_SLOT9_ALT: howto manager. (line 2117) +* BFD_RELOC_XTENSA_SLOT9_OP: howto manager. (line 2097) +* BFD_RELOC_XTENSA_TLS_ARG: howto manager. (line 2147) +* BFD_RELOC_XTENSA_TLS_CALL: howto manager. (line 2148) +* BFD_RELOC_XTENSA_TLS_DTPOFF: howto manager. (line 2144) +* BFD_RELOC_XTENSA_TLS_FUNC: howto manager. (line 2146) +* BFD_RELOC_XTENSA_TLS_TPOFF: howto manager. (line 2145) +* BFD_RELOC_XTENSA_TLSDESC_ARG: howto manager. (line 2143) +* BFD_RELOC_XTENSA_TLSDESC_FN: howto manager. (line 2142) +* BFD_RELOC_Z80_DISP8: howto manager. (line 2151) +* BFD_RELOC_Z8K_CALLR: howto manager. (line 2157) +* BFD_RELOC_Z8K_DISP7: howto manager. (line 2154) +* BFD_RELOC_Z8K_IMM4L: howto manager. (line 2160) +* bfd_scan_arch: Architectures. (line 433) +* bfd_scan_vma: BFD front end. (line 513) +* bfd_seach_for_target: bfd_target. (line 470) * 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 447) +* bfd_set_arch_info: Architectures. (line 474) * bfd_set_archive_head: Archives. (line 69) -* bfd_set_default_target: bfd_target. (line 429) -* bfd_set_error: BFD front end. (line 236) -* bfd_set_error_handler: BFD front end. (line 278) -* bfd_set_error_program_name: BFD front end. (line 287) -* bfd_set_file_flags: BFD front end. (line 346) +* bfd_set_default_target: bfd_target. (line 435) +* bfd_set_error: BFD front end. (line 323) +* bfd_set_error_handler: BFD front end. (line 365) +* bfd_set_error_program_name: BFD front end. (line 374) +* bfd_set_file_flags: BFD front end. (line 433) * bfd_set_format: Formats. (line 68) -* bfd_set_gp_size: BFD front end. (line 416) -* bfd_set_private_flags: BFD front end. (line 493) -* bfd_set_reloc: BFD front end. (line 336) +* bfd_set_gp_size: BFD front end. (line 503) +* bfd_set_private_flags: BFD front end. (line 580) +* bfd_set_reloc: BFD front end. (line 423) * 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 395) +* bfd_set_start_address: BFD front end. (line 482) * bfd_set_symtab: symbol handling functions. (line 60) * bfd_symbol_info: symbol handling functions. (line 130) -* bfd_target_list: bfd_target. (line 455) +* bfd_target_list: bfd_target. (line 461) * bfd_write_bigendian_4byte_int: Internal. (line 13) * bfd_zalloc: Opening and Closing. (line 228) * bfd_zalloc2: Opening and Closing. (line 237) -* coff_symbol_type: coff. (line 186) +* coff_symbol_type: coff. (line 244) * core_file_matches_executable_p: Core Files. (line 30) * find_separate_debug_file: Opening and Closing. (line 279) @@ -10587,10 +11206,10 @@ BFD Index * 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 508) +* Other functions: BFD front end. (line 595) * separate_debug_file_exists: Opening and Closing. (line 270) -* struct bfd_iovec: BFD front end. (line 711) +* struct bfd_iovec: BFD front end. (line 798) * target vector (_bfd_final_link): Performing the Final Link. (line 6) * target vector (_bfd_link_add_symbols): Adding Symbols to the Hash Table. @@ -10603,67 +11222,67 @@ BFD Index  Tag Table: -Node: Top1045 -Node: Overview1384 -Node: History2435 -Node: How It Works3381 -Node: What BFD Version 2 Can Do4924 -Node: BFD information loss6239 -Node: Canonical format8771 -Node: BFD front end13143 -Node: Memory Usage40479 -Node: Initialization41707 -Node: Sections42166 -Node: Section Input42649 -Node: Section Output44014 -Node: typedef asection46500 -Node: section prototypes71101 -Node: Symbols80781 -Node: Reading Symbols82376 -Node: Writing Symbols83483 -Node: Mini Symbols85192 -Node: typedef asymbol86166 -Node: symbol handling functions91427 -Node: Archives96769 -Node: Formats100495 -Node: Relocations103443 -Node: typedef arelent104170 -Node: howto manager119981 -Node: Core Files186663 -Node: Targets188480 -Node: bfd_target190450 -Node: Architectures210755 -Node: Opening and Closing232762 -Node: Internal244026 -Node: File Caching250359 -Node: Linker Functions252273 -Node: Creating a Linker Hash Table253946 -Node: Adding Symbols to the Hash Table255684 -Node: Differing file formats256584 -Node: Adding symbols from an object file258332 -Node: Adding symbols from an archive260483 -Node: Performing the Final Link262897 -Node: Information provided by the linker264139 -Node: Relocating the section contents265293 -Node: Writing the symbol table267044 -Node: Hash Tables270086 -Node: Creating and Freeing a Hash Table271284 -Node: Looking Up or Entering a String272534 -Node: Traversing a Hash Table273787 -Node: Deriving a New Hash Table Type274576 -Node: Define the Derived Structures275642 -Node: Write the Derived Creation Routine276723 -Node: Write Other Derived Routines279347 -Node: BFD back ends280662 -Node: What to Put Where280932 -Node: aout281112 -Node: coff287430 -Node: elf311907 -Node: mmo312770 -Node: File layout313698 -Node: Symbol-table319345 -Node: mmo section mapping323114 -Node: GNU Free Documentation License326766 -Node: BFD Index346495 +Node: Top1051 +Node: Overview1390 +Node: History2441 +Node: How It Works3387 +Node: What BFD Version 2 Can Do4930 +Node: BFD information loss6245 +Node: Canonical format8777 +Node: BFD front end13149 +Node: Memory Usage44457 +Node: Initialization45685 +Node: Sections46144 +Node: Section Input46627 +Node: Section Output47992 +Node: typedef asection50478 +Node: section prototypes75809 +Node: Symbols85489 +Node: Reading Symbols87084 +Node: Writing Symbols88191 +Node: Mini Symbols89900 +Node: typedef asymbol90874 +Node: symbol handling functions96933 +Node: Archives102275 +Node: Formats106001 +Node: Relocations108949 +Node: typedef arelent109676 +Node: howto manager125487 +Node: Core Files197788 +Node: Targets199605 +Node: bfd_target201575 +Node: Architectures222154 +Node: Opening and Closing245337 +Node: Internal256601 +Node: File Caching262934 +Node: Linker Functions264848 +Node: Creating a Linker Hash Table266521 +Node: Adding Symbols to the Hash Table268259 +Node: Differing file formats269159 +Node: Adding symbols from an object file270884 +Node: Adding symbols from an archive273035 +Node: Performing the Final Link275449 +Node: Information provided by the linker276691 +Node: Relocating the section contents277845 +Node: Writing the symbol table279596 +Node: Hash Tables283611 +Node: Creating and Freeing a Hash Table284809 +Node: Looking Up or Entering a String286059 +Node: Traversing a Hash Table287312 +Node: Deriving a New Hash Table Type288101 +Node: Define the Derived Structures289167 +Node: Write the Derived Creation Routine290248 +Node: Write Other Derived Routines292872 +Node: BFD back ends294187 +Node: What to Put Where294457 +Node: aout294637 +Node: coff300955 +Node: elf329388 +Node: mmo329789 +Node: File layout330717 +Node: Symbol-table336364 +Node: mmo section mapping340133 +Node: GNU Free Documentation License343785 +Node: BFD Index368868  End Tag Table diff --git a/bfd/doc/bfd.texinfo b/bfd/doc/bfd.texinfo index 04b4266..ce1c5af 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, 2006, 2007 +@c 2001, 2002, 2003, 2006, 2007, 2008, 2009 @c Free Software Foundation, Inc. @c @synindex fn cp @@ -17,10 +17,10 @@ END-INFO-DIR-ENTRY @copying This file documents the BFD library. -Copyright @copyright{} 1991, 2000, 2001, 2003, 2006, 2007 Free Software Foundation, Inc. +Copyright @copyright{} 1991, 2000, 2001, 2003, 2006, 2007, 2008 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 +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being ``GNU General Public License'' and ``Funding Free Software'', the Front-Cover texts being (a) (see below), and with @@ -65,10 +65,10 @@ included in the section entitled ``GNU Free Documentation License''. @end tex @vskip 0pt plus 1filll -Copyright @copyright{} 1991, 2001, 2003, 2006 Free Software Foundation, Inc. +Copyright @copyright{} 1991, 2001, 2003, 2006, 2008 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 + under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/bfd/doc/bfdint.texi b/bfd/doc/bfdint.texi index b7e7c54..1e03aeb 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, 2006, 2007 +@c 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009 @c Free Software Foundation, Inc. @setfilename bfdint.info @@ -17,7 +17,7 @@ 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 +1996, 1998, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -354,6 +354,8 @@ Motorola S-record format. Intel hex format. @item bfd_target_som_flavour SOM (used on HP/UX). +@item bfd_target_verilog_flavour +Verilog memory hex dump format. @item bfd_target_os9k_flavour os9000. @item bfd_target_versados_flavour diff --git a/bfd/doc/bfdio.texi b/bfd/doc/bfdio.texi index 7a7fe3c..9b4952f 100644 --- a/bfd/doc/bfdio.texi +++ b/bfd/doc/bfdio.texi @@ -26,6 +26,9 @@ struct bfd_iovec int (*bclose) (struct bfd *abfd); int (*bflush) (struct bfd *abfd); int (*bstat) (struct bfd *abfd, struct stat *sb); + /* Just like mmap: (void*)-1 on failure, mmapped address on success. */ + void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); @}; @end example @@ -70,3 +73,13 @@ 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?". +@findex bfd_mmap +@subsubsection @code{bfd_mmap} +@strong{Synopsis} +@example +void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); +@end example +@strong{Description}@* +Return mmap()ed region of the file, if possible and implemented. + diff --git a/bfd/doc/bfdt.texi b/bfd/doc/bfdt.texi index 05f0952..7468872 100644 --- a/bfd/doc/bfdt.texi +++ b/bfd/doc/bfdt.texi @@ -10,6 +10,14 @@ to the rest of the data. @example +enum bfd_direction + @{ + no_direction = 0, + read_direction = 1, + write_direction = 2, + both_direction = 3 + @}; + struct bfd @{ /* A unique identifier of the BFD */ @@ -26,15 +34,6 @@ struct 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; @@ -43,13 +42,6 @@ struct bfd 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; @@ -60,26 +52,91 @@ struct bfd 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; + enum bfd_direction direction; /* Format_specific flags. */ flagword flags; + /* Values that may appear in the flags field of a BFD. These also + appear in the object_flags field of the bfd_target structure, where + they indicate the set of flags used by that backend (not all flags + are meaningful for all object file formats) (FIXME: at the moment, + the object_flags values have mostly just been copied from backend + to another, and are not necessarily correct). */ + +#define BFD_NO_FLAGS 0x00 + + /* BFD contains relocation entries. */ +#define HAS_RELOC 0x01 + + /* BFD is directly executable. */ +#define EXEC_P 0x02 + + /* BFD has line number information (basically used for F_LNNO in a + COFF header). */ +#define HAS_LINENO 0x04 + + /* BFD has debugging information. */ +#define HAS_DEBUG 0x08 + + /* BFD has symbols. */ +#define HAS_SYMS 0x10 + + /* BFD has local symbols (basically used for F_LSYMS in a COFF + header). */ +#define HAS_LOCALS 0x20 + + /* BFD is a dynamic object. */ +#define DYNAMIC 0x40 + + /* Text section is write protected (if D_PAGED is not set, this is + like an a.out NMAGIC file) (the linker sets this by default, but + clears it for -r or -N). */ +#define WP_TEXT 0x80 + + /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the + linker sets this by default, but clears it for -r or -n or -N). */ +#define D_PAGED 0x100 + + /* BFD is relaxable (this means that bfd_relax_section may be able to + do something) (sometimes bfd_relax_section can do something even if + this is not set). */ +#define BFD_IS_RELAXABLE 0x200 + + /* This may be set before writing out a BFD to request using a + traditional format. For example, this is used to request that when + writing out an a.out object the symbols not be hashed to eliminate + duplicates. */ +#define BFD_TRADITIONAL_FORMAT 0x400 + + /* This flag indicates that the BFD contents are actually cached + in memory. If this is set, iostream points to a bfd_in_memory + struct. */ +#define BFD_IN_MEMORY 0x800 + + /* The sections in this BFD specify a memory page. */ +#define HAS_LOAD_PAGE 0x1000 + + /* This BFD has been created by the linker and doesn't correspond + to any input file. */ +#define BFD_LINKER_CREATED 0x2000 + + /* This may be set before writing out a BFD to request that it + be written using values for UIDs, GIDs, timestamps, etc. that + will be consistent from run to run. */ +#define BFD_DETERMINISTIC_OUTPUT 0x4000 + /* 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; + /* The origin in the archive of the proxy entry. This will + normally be the same as origin, except for thin archives, + when it will contain the current offset of the proxy in the + thin archive rather than the offset of the bfd in its actual + container. */ + ufile_ptr proxy_origin; /* A hash table for section names. */ struct bfd_hash_table section_htab; @@ -100,7 +157,8 @@ struct bfd /* Used for input and output. */ unsigned int symcount; - /* Symbol table for output BFD (with symcount entries). */ + /* Symbol table for output BFD (with symcount entries). + Also used by the linker to cache input BFD symbols. */ struct bfd_symbol **outsymbols; /* Used for slurped dynamic symbol tables. */ @@ -109,15 +167,13 @@ struct bfd /* 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 *archive_next; /* The next BFD in the archive. */ struct bfd *archive_head; /* The first BFD in the archive. */ - bfd_boolean has_armap; + struct bfd *nested_archives; /* List of nested archive in a flattened + thin archive. */ /* A chain of BFD structures involved in a link. */ struct bfd *link_next; @@ -140,6 +196,7 @@ struct bfd struct ieee_data_struct *ieee_data; struct ieee_ar_data_struct *ieee_ar_data; struct srec_data_struct *srec_data; + struct verilog_data_struct *verilog_data; struct ihex_data_struct *ihex_data; struct tekhex_data_struct *tekhex_data; struct elf_obj_tdata *elf_obj_data; @@ -160,6 +217,7 @@ struct bfd 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 plugin_data_struct *plugin_data; struct bfd_pef_data_struct *pef_data; struct bfd_pef_xlib_data_struct *pef_xlib_data; struct bfd_sym_data_struct *sym_data; @@ -174,6 +232,35 @@ struct bfd struct objalloc *, but we use void * to avoid requiring the inclusion of objalloc.h. */ void *memory; + + /* Is the file descriptor being cached? That is, can it be closed as + needed, and re-opened when accessed later? */ + unsigned int cacheable : 1; + + /* 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. */ + unsigned int target_defaulted : 1; + + /* ... and here: (``once'' means at least once). */ + unsigned int opened_once : 1; + + /* Set if we have a locally maintained mtime value, rather than + getting it from the file each time. */ + unsigned int mtime_set : 1; + + /* Flag set if symbols from this BFD should not be exported. */ + unsigned int no_export : 1; + + /* Remember when output has begun, to stop strange things + from happening. */ + unsigned int output_has_begun : 1; + + /* Have archive map. */ + unsigned int has_armap : 1; + + /* Set if this is a thin archive. */ + unsigned int is_thin_archive : 1; @}; @end example @@ -734,8 +821,7 @@ Returns the maximum page size, in bytes, as determined by emulation. @strong{Returns}@* -Returns the maximum page size in bytes for ELF, abort -otherwise. +Returns the maximum page size in bytes for ELF, 0 otherwise. @findex bfd_emul_set_maxpagesize @subsubsection @code{bfd_emul_set_maxpagesize} @@ -758,7 +844,7 @@ Returns the common page size, in bytes, as determined by emulation. @strong{Returns}@* -Returns the common page size in bytes for ELF, abort otherwise. +Returns the common page size in bytes for ELF, 0 otherwise. @findex bfd_emul_set_commonpagesize @subsubsection @code{bfd_emul_set_commonpagesize} diff --git a/bfd/doc/bfdver.texi b/bfd/doc/bfdver.texi index 9740a98..6ae2b43 100644 --- a/bfd/doc/bfdver.texi +++ b/bfd/doc/bfdver.texi @@ -1,4 +1,4 @@ -@set VERSION 2.17.90 +@set VERSION 2.20 @set VERSION_PACKAGE (GNU Binutils) -@set UPDATED August 2007 +@set UPDATED October 2009 @set BUGURL @uref{http://www.sourceware.org/bugzilla/} diff --git a/bfd/doc/chew.c b/bfd/doc/chew.c index 344fa43..172bc58 100644 --- a/bfd/doc/chew.c +++ b/bfd/doc/chew.c @@ -1,6 +1,6 @@ /* chew Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, - 2002, 2003, 2005, 2007 + 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by steve chamberlain @cygnus @@ -120,6 +120,7 @@ static void overwrite_string (string_type *, string_type *); static void catbuf (string_type *, char *, unsigned int); static void cattext (string_type *, char *); static void catstr (string_type *, string_type *); +static void die (char *); #endif static void @@ -162,7 +163,9 @@ write_buffer (buffer, f) string_type *buffer; FILE *f; { - fwrite (buffer->ptr, buffer->write_idx, 1, f); + if (buffer->write_idx != 0 + && fwrite (buffer->ptr, buffer->write_idx, 1, f) != 1) + die ("cannot write output"); } static void @@ -1264,14 +1267,14 @@ dict_type * newentry (word) char *word; { - dict_type *new = (dict_type *) malloc (sizeof (dict_type)); - new->word = word; - new->next = root; - root = new; - new->code = (stinst_type *) malloc (sizeof (stinst_type)); - new->code_length = 1; - new->code_end = 0; - return new; + dict_type *new_d = (dict_type *) malloc (sizeof (dict_type)); + new_d->word = word; + new_d->next = root; + root = new_d; + new_d->code = (stinst_type *) malloc (sizeof (stinst_type)); + new_d->code_length = 1; + new_d->code_end = 0; + return new_d; } unsigned int @@ -1296,19 +1299,19 @@ add_intrinsic (name, func) char *name; void (*func) (); { - dict_type *new = newentry (name); - add_to_definition (new, func); - add_to_definition (new, 0); + dict_type *new_d = newentry (name); + add_to_definition (new_d, func); + add_to_definition (new_d, 0); } void add_var (name) char *name; { - dict_type *new = newentry (name); - add_to_definition (new, push_number); - add_to_definition (new, (stinst_type) (&(new->var))); - add_to_definition (new, 0); + dict_type *new_d = newentry (name); + add_to_definition (new_d, push_number); + add_to_definition (new_d, (stinst_type) (&(new_d->var))); + add_to_definition (new_d, 0); } void diff --git a/bfd/doc/coffcode.texi b/bfd/doc/coffcode.texi index 6689009..e487d84 100644 --- a/bfd/doc/coffcode.texi +++ b/bfd/doc/coffcode.texi @@ -76,6 +76,65 @@ manipulate the i960 relocs. This code is not in @file{coffcode.h} because it would not be used by any other target. +@subsubsection Coff long section names +In the standard Coff object format, section names are limited to +the eight bytes available in the @code{s_name} field of the +@code{SCNHDR} section header structure. The format requires the +field to be NUL-padded, but not necessarily NUL-terminated, so +the longest section names permitted are a full eight characters. + +The Microsoft PE variants of the Coff object file format add +an extension to support the use of long section names. This +extension is defined in section 4 of the Microsoft PE/COFF +specification (rev 8.1). If a section name is too long to fit +into the section header's @code{s_name} field, it is instead +placed into the string table, and the @code{s_name} field is +filled with a slash ("/") followed by the ASCII decimal +representation of the offset of the full name relative to the +string table base. + +Note that this implies that the extension can only be used in object +files, as executables do not contain a string table. The standard +specifies that long section names from objects emitted into executable +images are to be truncated. + +However, as a GNU extension, BFD can generate executable images +that contain a string table and long section names. This +would appear to be technically valid, as the standard only says +that Coff debugging information is deprecated, not forbidden, +and in practice it works, although some tools that parse PE files +expecting the MS standard format may become confused; @file{PEview} is +one known example. + +The functionality is supported in BFD by code implemented under +the control of the macro @code{COFF_LONG_SECTION_NAMES}. If not +defined, the format does not support long section names in any way. +If defined, it is used to initialise a flag, +@code{_bfd_coff_long_section_names}, and a hook function pointer, +@code{_bfd_coff_set_long_section_names}, in the Coff backend data +structure. The flag controls the generation of long section names +in output BFDs at runtime; if it is false, as it will be by default +when generating an executable image, long section names are truncated; +if true, the long section names extension is employed. The hook +points to a function that allows the value of the flag to be altered +at runtime, on formats that support long section names at all; on +other formats it points to a stub that returns an error indication. +With input BFDs, the flag is set according to whether any long section +names are detected while reading the section headers. For a completely +new BFD, the flag is set to the default for the target format. This +information can be used by a client of the BFD library when deciding +what output format to generate, and means that a BFD that is opened +for read and subsequently converted to a writeable BFD and modified +in-place will retain whatever format it had on input. + +If @code{COFF_LONG_SECTION_NAMES} is simply defined (blank), or is +defined to the value "1", then long section names are enabled by +default; if it is defined to the value zero, they are disabled by +default (but still accepted in input BFDs). The header @file{coffcode.h} +defines a macro, @code{COFF_DEFAULT_LONG_SECTION_NAMES}, which is +used in the backends to initialise the backend data structure fields +appropriately; see the comments for further detail. + @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 @@ -135,7 +194,7 @@ rather than the normal text associated with the symbol 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 +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 @@ -326,7 +385,11 @@ typedef struct unsigned int _bfd_linesz; unsigned int _bfd_filnmlen; bfd_boolean _bfd_coff_long_filenames; + bfd_boolean _bfd_coff_long_section_names; + bfd_boolean (*_bfd_coff_set_long_section_names) + (bfd *, int); + unsigned int _bfd_coff_default_section_alignment_power; bfd_boolean _bfd_coff_force_symnames_in_strings; unsigned int _bfd_coff_debug_string_prefix_length; @@ -413,6 +476,9 @@ typedef struct bfd_boolean (*_bfd_coff_final_link_postscript) (bfd *, struct coff_final_link_info *); + bfd_boolean (*_bfd_coff_print_pdata) + (bfd *, void *); + @} bfd_coff_backend_data; #define coff_backend_info(abfd) \ @@ -460,6 +526,8 @@ typedef struct (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_set_long_section_names(abfd, enable) \ + ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable)) #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) \ @@ -545,6 +613,15 @@ typedef struct #define bfd_coff_final_link_postscript(a,p) \ ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) +#define bfd_coff_have_print_pdata(a) \ + (coff_backend_info (a)->_bfd_coff_print_pdata) +#define bfd_coff_print_pdata(a,p) \ + ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p)) + +/* Macro: Returns true if the bfd is a PE executable as opposed to a + PE object file. */ +#define bfd_pei_p(abfd) \ + (CONST_STRNEQ ((abfd)->xvec->name, "pei-")) @end example @subsubsection Writing relocations To write relocations, the back end steps though the diff --git a/bfd/doc/elf.texi b/bfd/doc/elf.texi index 4f9434c..4053386 100644 --- a/bfd/doc/elf.texi +++ b/bfd/doc/elf.texi @@ -7,16 +7,3 @@ 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/fdl.texi b/bfd/doc/fdl.texi index a83ecf7..8805f1a 100644 --- a/bfd/doc/fdl.texi +++ b/bfd/doc/fdl.texi @@ -1,26 +1,28 @@ -@c -*-texinfo-*- -@appendix GNU Free Documentation License -@center Version 1.1, March 2000 +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 + +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. @display -Copyright (C) 2000, 2003 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display -@sp 1 + @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other -written document ``free'' in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It @@ -35,60 +37,72 @@ it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. -@sp 1 @item APPLICABILITY AND DEFINITIONS -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The ``Document'', below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as ``you.'' +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. -A ``Secondary Section'' is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (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 +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and +general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not ``Transparent'' is called ``Opaque.'' +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain -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. +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material @@ -96,7 +110,25 @@ this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. -@sp 1 + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + @item VERBATIM COPYING @@ -112,13 +144,14 @@ number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. -@sp 1 + @item COPYING IN QUANTITY -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present @@ -136,21 +169,20 @@ 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. +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. -@sp 1 + @item MODIFICATIONS @@ -161,52 +193,85 @@ Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission.@* -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than five).@* -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher.@* -D. Preserve all the copyright notices of the Document.@* -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices.@* -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below.@* -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice.@* -H. Include an unaltered copy of this License.@* -I. Preserve the section entitled ``History'', and its title, and add to - it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section entitled ``History'' in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence.@* -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the ``History'' section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission.@* -K. In any section entitled ``Acknowledgements'' or ``Dedications'', - preserve the section's title, and preserve in the section all the - substance and tone of each of the contributor acknowledgements - and/or dedications given therein.@* -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles.@* -M. Delete any section entitled ``Endorsements.'' Such a section - may not be included in the Modified Version.@* -N. Do not retitle any existing section as ``Endorsements'' - or to conflict in title with any Invariant Section.@* -@sp 1 +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all @@ -214,9 +279,9 @@ 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 +parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. @@ -233,7 +298,7 @@ permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. -@sp 1 + @item COMBINING DOCUMENTS @@ -242,7 +307,7 @@ 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. +license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -253,12 +318,12 @@ author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -In the combination, you must combine any sections entitled ``History'' -in the various original documents, forming one section entitled -``History''; likewise combine any sections entitled ``Acknowledgements'', -and any sections entitled ``Dedications.'' You must delete all sections -entitled ``Endorsements.'' -@sp 1 +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + @item COLLECTIONS OF DOCUMENTS @@ -272,25 +337,27 @@ You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. -@sp 1 + @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an ``aggregate'', and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. -@sp 1 +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + @item TRANSLATION @@ -300,22 +367,46 @@ Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. -@sp 1 +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + @item TERMINATION -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. -@sp 1 +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + @item FUTURE REVISIONS OF THIS LICENSE @@ -323,7 +414,7 @@ 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/. +@uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this @@ -332,11 +423,46 @@ 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. +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. @end enumerate -@unnumberedsec ADDENDUM: How to use this License for your documents +@page +@heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and @@ -344,23 +470,37 @@ license notices just after the title page: @smallexample @group -Copyright (C) @var{year} @var{your name}. -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with the Invariant Sections being @var{list their titles}, with the -Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. -A copy of the license is included in the section entitled "GNU -Free Documentation License." + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. @end group @end smallexample -If you have no Invariant Sections, write ``with no Invariant Sections'' -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write ``no Front-Cover Texts'' instead of -``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/bfd/doc/linker.texi b/bfd/doc/linker.texi index 108e3f9..27055dc 100644 --- a/bfd/doc/linker.texi +++ b/bfd/doc/linker.texi @@ -110,9 +110,9 @@ 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. +@code{_bfd_final_link} function. In such a case the output bfd +xvec 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 @@ -124,7 +124,7 @@ 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 +check the output bfd before saving information (in this case, the ECOFF external symbol debugging information) in a hash table entry. @@ -379,3 +379,34 @@ or final link. @end example +@findex bfd_generic_define_common_symbol +@subsubsection @code{bfd_generic_define_common_symbol} +@strong{Synopsis} +@example +bfd_boolean bfd_generic_define_common_symbol + (bfd *output_bfd, struct bfd_link_info *info, + struct bfd_link_hash_entry *h); +@end example +@strong{Description}@* +Convert common symbol @var{h} into a defined symbol. +Return TRUE on success and FALSE on failure. +@example +#define bfd_define_common_symbol(output_bfd, info, h) \ + BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h)) + +@end example + +@findex bfd_find_version_for_sym +@subsubsection @code{bfd_find_version_for_sym } +@strong{Synopsis} +@example +struct bfd_elf_version_tree * bfd_find_version_for_sym + (struct bfd_elf_version_tree *verdefs, + const char *sym_name, bfd_boolean *hide); +@end example +@strong{Description}@* +Search an elf version script tree for symbol versioning +info and export / don't-export status for a given symbol. +Return non-NULL on success and NULL on failure; also sets +the output @samp{hide} boolean parameter. + diff --git a/bfd/doc/reloc.texi b/bfd/doc/reloc.texi index e3ea426..74902ae 100644 --- a/bfd/doc/reloc.texi +++ b/bfd/doc/reloc.texi @@ -556,6 +556,21 @@ For ELF. @deffn {} BFD_RELOC_68K_GLOB_DAT @deffnx {} BFD_RELOC_68K_JMP_SLOT @deffnx {} BFD_RELOC_68K_RELATIVE +@deffnx {} BFD_RELOC_68K_TLS_GD32 +@deffnx {} BFD_RELOC_68K_TLS_GD16 +@deffnx {} BFD_RELOC_68K_TLS_GD8 +@deffnx {} BFD_RELOC_68K_TLS_LDM32 +@deffnx {} BFD_RELOC_68K_TLS_LDM16 +@deffnx {} BFD_RELOC_68K_TLS_LDM8 +@deffnx {} BFD_RELOC_68K_TLS_LDO32 +@deffnx {} BFD_RELOC_68K_TLS_LDO16 +@deffnx {} BFD_RELOC_68K_TLS_LDO8 +@deffnx {} BFD_RELOC_68K_TLS_IE32 +@deffnx {} BFD_RELOC_68K_TLS_IE16 +@deffnx {} BFD_RELOC_68K_TLS_IE8 +@deffnx {} BFD_RELOC_68K_TLS_LE32 +@deffnx {} BFD_RELOC_68K_TLS_LE16 +@deffnx {} BFD_RELOC_68K_TLS_LE8 Relocations used by 68K ELF. @end deffn @deffn {} BFD_RELOC_32_BASEREL @@ -612,6 +627,11 @@ Reloc types used for i960/b.out. @deffnx {} BFD_RELOC_SPARC_UA16 @deffnx {} BFD_RELOC_SPARC_UA32 @deffnx {} BFD_RELOC_SPARC_UA64 +@deffnx {} BFD_RELOC_SPARC_GOTDATA_HIX22 +@deffnx {} BFD_RELOC_SPARC_GOTDATA_LOX10 +@deffnx {} BFD_RELOC_SPARC_GOTDATA_OP_HIX22 +@deffnx {} BFD_RELOC_SPARC_GOTDATA_OP_LOX10 +@deffnx {} BFD_RELOC_SPARC_GOTDATA_OP SPARC ELF relocations. There is probably some overlap with other relocation types already defined. @end deffn @@ -688,6 +708,7 @@ SPARC TLS relocations @deffnx {} BFD_RELOC_SPU_HI16 @deffnx {} BFD_RELOC_SPU_PPU32 @deffnx {} BFD_RELOC_SPU_PPU64 +@deffnx {} BFD_RELOC_SPU_ADD_PIC SPU Relocations. @end deffn @deffn {} BFD_RELOC_ALPHA_GPDISP_HI16 @@ -759,6 +780,22 @@ 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_NOP +The NOP relocation outputs a NOP if the longword displacement +between two procedure entry points is < 2^21. +@end deffn +@deffn {} BFD_RELOC_ALPHA_BSR +The BSR relocation outputs a BSR if the longword displacement +between two procedure entry points is < 2^21. +@end deffn +@deffn {} BFD_RELOC_ALPHA_LDA +The LDA relocation outputs a LDA if the longword displacement +between two procedure entry points is < 2^16. +@end deffn +@deffn {} BFD_RELOC_ALPHA_BOH +The BOH relocation outputs a BSR if the longword displacement +between two procedure entry points is < 2^21, or else a hint. +@end deffn @deffn {} BFD_RELOC_ALPHA_TLSGD @deffnx {} BFD_RELOC_ALPHA_TLSLDM @deffnx {} BFD_RELOC_ALPHA_DTPMOD64 @@ -805,6 +842,11 @@ High 16 bits of 32-bit pc-relative value, adjusted @deffn {} BFD_RELOC_LO16_PCREL Low 16 bits of pc-relative value @end deffn +@deffn {} BFD_RELOC_MIPS16_GOT16 +@deffnx {} BFD_RELOC_MIPS16_CALL16 +Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of +16-bit immediate fields +@end deffn @deffn {} BFD_RELOC_MIPS16_HI16 MIPS16 high 16 bits of 32-bit value. @end deffn @@ -858,7 +900,10 @@ MIPS ELF relocations. @end deffn @deffn {} BFD_RELOC_MIPS_COPY @deffnx {} BFD_RELOC_MIPS_JUMP_SLOT -MIPS ELF relocations (VxWorks extensions). +MIPS ELF relocations (VxWorks and PLT extensions). +@end deffn +@deffn {} BFD_RELOC_MOXIE_10_PCREL +Moxie ELF relocations. @end deffn @deffn {} BFD_RELOC_FRV_LABEL16 @deffnx {} BFD_RELOC_FRV_LABEL24 @@ -928,6 +973,16 @@ Create PLT entry. @deffn {} BFD_RELOC_MN10300_RELATIVE Adjust by program base. @end deffn +@deffn {} BFD_RELOC_MN10300_SYM_DIFF +Together with another reloc targeted at the same location, +allows for a value that is the difference of two symbols +in the same section. +@end deffn +@deffn {} BFD_RELOC_MN10300_ALIGN +The addend of this reloc is an alignment power that must +be honoured at the offset's location, regardless of linker +relaxation. +@end deffn @deffn {} BFD_RELOC_386_GOT32 @deffnx {} BFD_RELOC_386_PLT32 @deffnx {} BFD_RELOC_386_COPY @@ -951,6 +1006,7 @@ Adjust by program base. @deffnx {} BFD_RELOC_386_TLS_GOTDESC @deffnx {} BFD_RELOC_386_TLS_DESC_CALL @deffnx {} BFD_RELOC_386_TLS_DESC +@deffnx {} BFD_RELOC_386_IRELATIVE i386/elf relocations @end deffn @deffn {} BFD_RELOC_X86_64_GOT32 @@ -979,6 +1035,7 @@ i386/elf relocations @deffnx {} BFD_RELOC_X86_64_GOTPC32_TLSDESC @deffnx {} BFD_RELOC_X86_64_TLSDESC_CALL @deffnx {} BFD_RELOC_X86_64_TLSDESC +@deffnx {} BFD_RELOC_X86_64_IRELATIVE x86-64/elf relocations @end deffn @deffn {} BFD_RELOC_NS32K_IMM_8 @@ -1063,6 +1120,8 @@ Picojava relocs. Not all of these appear in object files. Power(rs6000) and PowerPC relocations. @end deffn @deffn {} BFD_RELOC_PPC_TLS +@deffnx {} BFD_RELOC_PPC_TLSGD +@deffnx {} BFD_RELOC_PPC_TLSLD @deffnx {} BFD_RELOC_PPC_DTPMOD @deffnx {} BFD_RELOC_PPC_TPREL16 @deffnx {} BFD_RELOC_PPC_TPREL16_LO @@ -1227,6 +1286,9 @@ ARM thread-local storage relocations. @deffnx {} BFD_RELOC_ARM_LDC_SB_G2 ARM group relocations. @end deffn +@deffn {} BFD_RELOC_ARM_V4BX +Annotation of BX instructions. +@end deffn @deffn {} BFD_RELOC_ARM_IMMEDIATE @deffnx {} BFD_RELOC_ARM_ADRL_IMMEDIATE @deffnx {} BFD_RELOC_ARM_T32_IMMEDIATE @@ -2023,10 +2085,8 @@ s390 tls relocations. @deffnx {} BFD_RELOC_390_TLS_GOTIE20 Long displacement extension. @end deffn -@deffn {} BFD_RELOC_SCORE_DUMMY1 -Score relocations -@end deffn @deffn {} BFD_RELOC_SCORE_GPREL15 +Score relocations Low 16 bit for load/store @end deffn @deffn {} BFD_RELOC_SCORE_DUMMY2 @@ -2036,12 +2096,21 @@ This is a 24-bit reloc with the right 1 bit assumed to be 0 @deffn {} BFD_RELOC_SCORE_BRANCH This is a 19-bit reloc with the right 1 bit assumed to be 0 @end deffn +@deffn {} BFD_RELOC_SCORE_IMM30 +This is a 32-bit reloc for 48-bit instructions. +@end deffn +@deffn {} BFD_RELOC_SCORE_IMM32 +This is a 32-bit reloc for 48-bit instructions. +@end deffn @deffn {} BFD_RELOC_SCORE16_JMP This is a 11-bit reloc with the right 1 bit assumed to be 0 @end deffn @deffn {} BFD_RELOC_SCORE16_BRANCH This is a 8-bit reloc with the right 1 bit assumed to be 0 @end deffn +@deffn {} BFD_RELOC_SCORE_BCMP +This is a 9-bit reloc with the right 1 bit assumed to be 0 +@end deffn @deffn {} BFD_RELOC_SCORE_GOT15 @deffnx {} BFD_RELOC_SCORE_GOT_LO16 @deffnx {} BFD_RELOC_SCORE_CALL15 @@ -2299,6 +2368,12 @@ NS CR16C Relocations. @deffnx {} BFD_RELOC_CR16_DISP20 @deffnx {} BFD_RELOC_CR16_DISP24 @deffnx {} BFD_RELOC_CR16_DISP24a +@deffnx {} BFD_RELOC_CR16_SWITCH8 +@deffnx {} BFD_RELOC_CR16_SWITCH16 +@deffnx {} BFD_RELOC_CR16_SWITCH32 +@deffnx {} BFD_RELOC_CR16_GOT_REGREL20 +@deffnx {} BFD_RELOC_CR16_GOTC_REGREL20 +@deffnx {} BFD_RELOC_CR16_GLOB_DAT NS CR16 Relocations. @end deffn @deffn {} BFD_RELOC_CRX_REL4 @@ -2363,6 +2438,20 @@ Relocs used in ELF shared libraries for CRIS. @deffn {} BFD_RELOC_CRIS_32_PLT_PCREL 32-bit offset to symbol with PLT entry, relative to this relocation. @end deffn +@deffn {} BFD_RELOC_CRIS_32_GOT_GD +@deffnx {} BFD_RELOC_CRIS_16_GOT_GD +@deffnx {} BFD_RELOC_CRIS_32_GD +@deffnx {} BFD_RELOC_CRIS_DTP +@deffnx {} BFD_RELOC_CRIS_32_DTPREL +@deffnx {} BFD_RELOC_CRIS_16_DTPREL +@deffnx {} BFD_RELOC_CRIS_32_GOT_TPREL +@deffnx {} BFD_RELOC_CRIS_16_GOT_TPREL +@deffnx {} BFD_RELOC_CRIS_32_TPREL +@deffnx {} BFD_RELOC_CRIS_16_TPREL +@deffnx {} BFD_RELOC_CRIS_DTPMOD +@deffnx {} BFD_RELOC_CRIS_32_IE +Relocs used in TLS code for CRIS. +@end deffn @deffn {} BFD_RELOC_860_COPY @deffnx {} BFD_RELOC_860_GLOB_DAT @deffnx {} BFD_RELOC_860_JUMP_SLOT @@ -2539,6 +2628,15 @@ 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_XTENSA_TLSDESC_FN +@deffnx {} BFD_RELOC_XTENSA_TLSDESC_ARG +@deffnx {} BFD_RELOC_XTENSA_TLS_DTPOFF +@deffnx {} BFD_RELOC_XTENSA_TLS_TPOFF +@deffnx {} BFD_RELOC_XTENSA_TLS_FUNC +@deffnx {} BFD_RELOC_XTENSA_TLS_ARG +@deffnx {} BFD_RELOC_XTENSA_TLS_CALL +Xtensa TLS relocations. +@end deffn @deffn {} BFD_RELOC_Z80_DISP8 8 bit signed offset in (ix+d) or (iy+d). @end deffn @@ -2551,6 +2649,77 @@ CALR offset. @deffn {} BFD_RELOC_Z8K_IMM4L 4 bit value. @end deffn +@deffn {} BFD_RELOC_LM32_CALL +@deffnx {} BFD_RELOC_LM32_BRANCH +@deffnx {} BFD_RELOC_LM32_16_GOT +@deffnx {} BFD_RELOC_LM32_GOTOFF_HI16 +@deffnx {} BFD_RELOC_LM32_GOTOFF_LO16 +@deffnx {} BFD_RELOC_LM32_COPY +@deffnx {} BFD_RELOC_LM32_GLOB_DAT +@deffnx {} BFD_RELOC_LM32_JMP_SLOT +@deffnx {} BFD_RELOC_LM32_RELATIVE +Lattice Mico32 relocations. +@end deffn +@deffn {} BFD_RELOC_MACH_O_SECTDIFF +Difference between two section addreses. Must be followed by a +BFD_RELOC_MACH_O_PAIR. +@end deffn +@deffn {} BFD_RELOC_MACH_O_PAIR +Mach-O generic relocations. +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_32_LO +This is a 32 bit reloc for the microblaze that stores the +low 16 bits of a value +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_32_LO_PCREL +This is a 32 bit pc-relative reloc for the microblaze that +stores the low 16 bits of a value +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_32_ROSDA +This is a 32 bit reloc for the microblaze that stores a +value relative to the read-only small data area anchor +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_32_RWSDA +This is a 32 bit reloc for the microblaze that stores a +value relative to the read-write small data area anchor +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM +This is a 32 bit reloc for the microblaze to handle +expressions of the form "Symbol Op Symbol" +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_64_NONE +This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). No relocation is +done here - only used for relaxing +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_64_GOTPC +This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). The relocation is +PC-relative GOT offset +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_64_GOT +This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). The relocation is +GOT offset +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_64_PLT +This is a 64 bit reloc that stores the 32 bit pc relative +value in two words (with an imm instruction). The relocation is +PC-relative offset into PLT +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_64_GOTOFF +This is a 64 bit reloc that stores the 32 bit GOT relative +value in two words (with an imm instruction). The relocation is +relative offset from _GLOBAL_OFFSET_TABLE_ +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_32_GOTOFF +This is a 32 bit reloc that stores the 32 bit GOT relative +value in a word. The relocation is relative offset from +@end deffn +@deffn {} BFD_RELOC_MICROBLAZE_COPY +This is used to tell the dynamic linker to copy the value out of +the dynamic object into the runtime process image. +@end deffn @example diff --git a/bfd/doc/section.texi b/bfd/doc/section.texi index e1a0e7c..51a9e19 100644 --- a/bfd/doc/section.texi +++ b/bfd/doc/section.texi @@ -225,7 +225,7 @@ typedef struct bfd_section /* If SEC_LINK_ONCE is set, this bitfield describes how the linker should handle duplicate sections. */ -#define SEC_LINK_DUPLICATES 0x40000 +#define SEC_LINK_DUPLICATES 0xc0000 /* This value for SEC_LINK_DUPLICATES means that duplicate sections with the same name should simply be discarded. */ @@ -234,11 +234,11 @@ typedef struct bfd_section /* 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 +#define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000 /* 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 +#define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000 /* This value for SEC_LINK_DUPLICATES means that the linker should warn if any duplicate sections contain different @@ -250,28 +250,28 @@ typedef struct bfd_section 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 +#define SEC_LINKER_CREATED 0x100000 /* 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 +#define SEC_KEEP 0x200000 /* This section contains "short" data, and should be placed "near" the GP. */ -#define SEC_SMALL_DATA 0x800000 +#define SEC_SMALL_DATA 0x400000 /* Attempt to merge identical entities in the section. Entity size is given in the entsize field. */ -#define SEC_MERGE 0x1000000 +#define SEC_MERGE 0x800000 /* 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 +#define SEC_STRINGS 0x1000000 /* This section contains data about section groups. */ -#define SEC_GROUP 0x4000000 +#define SEC_GROUP 0x2000000 /* The section is a COFF shared library section. This flag is only for the linker. If this type of section appears in @@ -282,23 +282,27 @@ typedef struct bfd_section 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 +#define SEC_COFF_SHARED_LIBRARY 0x4000000 /* This section contains data which may be shared with other executables or shared objects. This is for COFF only. */ -#define SEC_COFF_SHARED 0x20000000 +#define SEC_COFF_SHARED 0x8000000 /* 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 +#define SEC_TIC54X_BLOCK 0x10000000 /* 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 +#define SEC_TIC54X_CLINK 0x20000000 + + /* Indicate that section has the no read flag set. This happens + when memory read flag isn't set. */ +#define SEC_COFF_NOREAD 0x40000000 /* End of section flags. */ @@ -314,9 +318,8 @@ typedef struct bfd_section output sections that have an input section. */ unsigned int linker_has_input : 1; - /* Mark flags used by some linker backends for garbage collection. */ + /* Mark flag 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. */ @@ -340,6 +343,9 @@ typedef struct bfd_section /* Nonzero if this section has TLS related relocations. */ unsigned int has_tls_reloc:1; + /* Nonzero if this section has a call to __tls_get_addr. */ + unsigned int has_tls_get_addr_call:1; + /* Nonzero if this section has a gp reloc. */ unsigned int has_gp_reloc:1; @@ -370,15 +376,22 @@ typedef struct bfd_section 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. */ + octets. This field should be set for any section whose size is + changed by linker relaxation. It is required 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; + /* Relaxation table. */ + struct relax_table *relax; + + /* Count of used relaxation table entries. */ + int relax_count; + + /* 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 @@ -468,6 +481,17 @@ typedef struct bfd_section @} map_head, map_tail; @} asection; +/* Relax table contains information about instructions which can + be removed by relaxation -- replacing a long address with a + short address. */ +struct relax_table @{ + /* Address where bytes may be deleted. */ + bfd_vma addr; + + /* Number of bytes to be deleted. */ + int size; +@}; + /* 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 @@ -594,17 +618,17 @@ extern asection bfd_ind_section; /* 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, \ + /* linker_mark, linker_has_input, gc_mark, */ \ + 0, 0, 1, \ \ /* 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, \ + /* has_tls_get_addr_call, has_gp_reloc, need_finalize_relax, */ \ + 0, 0, 0, \ \ - /* vma, lma, size, rawsize */ \ - 0, 0, 0, 0, \ + /* reloc_done, vma, lma, size, rawsize, relax, relax_count, */ \ + 0, 0, 0, 0, 0, 0, 0, \ \ /* output_offset, output_section, alignment_power, */ \ 0, (struct bfd_section *) &SEC, 0, \ diff --git a/bfd/doc/syms.texi b/bfd/doc/syms.texi index ad22861..d5dc659 100644 --- a/bfd/doc/syms.texi +++ b/bfd/doc/syms.texi @@ -162,97 +162,107 @@ typedef struct bfd_symbol symvalue value; /* Attributes of a symbol. */ -#define BSF_NO_FLAGS 0x00 +#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 +#define BSF_LOCAL (1 << 0) /* 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 +#define BSF_GLOBAL (1 << 1) /* 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_LOCAL}, @code{BSF_COMMON}, @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 +#define BSF_DEBUGGING (1 << 2) /* The symbol denotes a function entry point. Used in ELF, perhaps others someday. */ -#define BSF_FUNCTION 0x10 +#define BSF_FUNCTION (1 << 3) /* Used by the linker. */ -#define BSF_KEEP 0x20 -#define BSF_KEEP_G 0x40 +#define BSF_KEEP (1 << 5) +#define BSF_KEEP_G (1 << 6) /* A weak global symbol, overridable without warnings by a regular global symbol of the same name. */ -#define BSF_WEAK 0x80 +#define BSF_WEAK (1 << 7) /* This symbol was created to point to a section, e.g. ELF's STT_SECTION symbols. */ -#define BSF_SECTION_SYM 0x100 +#define BSF_SECTION_SYM (1 << 8) /* 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 +#define BSF_OLD_COMMON (1 << 9) /* 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 +#define BSF_NOT_AT_END (1 << 10) /* Signal that the symbol is the label of constructor section. */ -#define BSF_CONSTRUCTOR 0x800 +#define BSF_CONSTRUCTOR (1 << 11) /* 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 +#define BSF_WARNING (1 << 12) /* 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 +#define BSF_INDIRECT (1 << 13) /* BSF_FILE marks symbols that contain a file name. This is used for ELF STT_FILE symbols. */ -#define BSF_FILE 0x4000 +#define BSF_FILE (1 << 14) /* Symbol is from dynamic linking information. */ -#define BSF_DYNAMIC 0x8000 +#define BSF_DYNAMIC (1 << 15) /* The symbol denotes a data object. Used in ELF, and perhaps others someday. */ -#define BSF_OBJECT 0x10000 +#define BSF_OBJECT (1 << 16) /* 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 +#define BSF_DEBUGGING_RELOC (1 << 17) /* This symbol is thread local. Used in ELF. */ -#define BSF_THREAD_LOCAL 0x40000 +#define BSF_THREAD_LOCAL (1 << 18) /* This symbol represents a complex relocation expression, with the expression tree serialized in the symbol name. */ -#define BSF_RELC 0x80000 +#define BSF_RELC (1 << 19) /* This symbol represents a signed complex relocation expression, with the expression tree serialized in the symbol name. */ -#define BSF_SRELC 0x100000 +#define BSF_SRELC (1 << 20) + + /* This symbol was created by bfd_get_synthetic_symtab. */ +#define BSF_SYNTHETIC (1 << 21) + + /* This symbol is an indirect code object. Unrelated to BSF_INDIRECT. + The dynamic linker will compute the value of this symbol by + calling the function that it points to. BSF_FUNCTION must + also be also set. */ +#define BSF_GNU_INDIRECT_FUNCTION (1 << 22) + /* This symbol is a globally unique data object. The dynamic linker + will make sure that in the entire process there is just one symbol + with this name and type in use. BSF_OBJECT must also be set. */ +#define BSF_GNU_UNIQUE (1 << 23) flagword flags; diff --git a/bfd/doc/targets.texi b/bfd/doc/targets.texi index 2b10ccb..542de04 100644 --- a/bfd/doc/targets.texi +++ b/bfd/doc/targets.texi @@ -125,6 +125,7 @@ enum bfd_flavour bfd_target_oasys_flavour, bfd_target_tekhex_flavour, bfd_target_srec_flavour, + bfd_target_verilog_flavour, bfd_target_ihex_flavour, bfd_target_som_flavour, bfd_target_os9k_flavour, @@ -411,7 +412,8 @@ BFD_JUMP_TABLE macros. NAME##_bfd_merge_sections, \ NAME##_bfd_is_group_section, \ NAME##_bfd_discard_group, \ - NAME##_section_already_linked \ + NAME##_section_already_linked, \ + NAME##_bfd_define_common_symbol int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); bfd_byte * (*_bfd_get_relocated_section_contents) @@ -459,6 +461,10 @@ BFD_JUMP_TABLE macros. void (*_section_already_linked) (bfd *, struct bfd_section *, struct bfd_link_info *); + /* Define a common symbol. */ + bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *, + struct bfd_link_hash_entry *); + /* Routines to handle dynamic symbols and relocs. */ #define BFD_JUMP_TABLE_DYNAMIC(NAME) \ NAME##_get_dynamic_symtab_upper_bound, \ diff --git a/bfd/dwarf1.c b/bfd/dwarf1.c index 6f02cb8..2674044 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, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Gavin Romig-Koch of Cygnus Solutions (gavin@cygnus.com). @@ -35,24 +35,27 @@ struct dwarf1_debug /* The bfd we are working with. */ bfd* abfd; + /* Pointer to the symbol table. */ + asymbol** syms; + /* List of already parsed compilation units. */ struct dwarf1_unit* lastUnit; /* The buffer for the .debug section. Zero indicates that the .debug section failed to load. */ - char* debug_section; + bfd_byte *debug_section; /* Pointer to the end of the .debug_info section memory buffer. */ - char* debug_section_end; + bfd_byte *debug_section_end; /* The buffer for the .line section. */ - char* line_section; + bfd_byte *line_section; /* End of that buffer. */ - char* line_section_end; + bfd_byte *line_section_end; /* The current or next unread die within the .debug section. */ - char* currentDie; + bfd_byte *currentDie; }; /* One dwarf1_unit for each parsed compilation unit die. */ @@ -63,7 +66,7 @@ struct dwarf1_unit struct dwarf1_unit* prev; /* Name of the compilation unit. */ - char* name; + char *name; /* The highest and lowest address used in the compilation unit. */ unsigned long low_pc; @@ -76,7 +79,7 @@ struct dwarf1_unit unsigned long stmt_list_offset; /* If non-zero, a pointer to the first child of this unit. */ - char* first_child; + bfd_byte *first_child; /* How many line entries? */ unsigned long line_count; @@ -140,9 +143,12 @@ alloc_dwarf1_unit (struct dwarf1_debug* stash) { bfd_size_type amt = sizeof (struct dwarf1_unit); - struct dwarf1_unit* x = bfd_zalloc (stash->abfd, amt); - x->prev = stash->lastUnit; - stash->lastUnit = x; + struct dwarf1_unit* x = (struct dwarf1_unit *) bfd_zalloc (stash->abfd, amt); + if (x) + { + x->prev = stash->lastUnit; + stash->lastUnit = x; + } return x; } @@ -155,9 +161,12 @@ alloc_dwarf1_func (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) { bfd_size_type amt = sizeof (struct dwarf1_func); - struct dwarf1_func* x = bfd_zalloc (stash->abfd, amt); - x->prev = aUnit->func_list; - aUnit->func_list = x; + struct dwarf1_func* x = (struct dwarf1_func *) bfd_zalloc (stash->abfd, amt); + if (x) + { + x->prev = aUnit->func_list; + aUnit->func_list = x; + } return x; } @@ -172,11 +181,11 @@ alloc_dwarf1_func (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) static bfd_boolean parse_die (bfd * abfd, struct die_info * aDieInfo, - char * aDiePtr, - char * aDiePtrEnd) + bfd_byte * aDiePtr, + bfd_byte * aDiePtrEnd) { - char* this_die = aDiePtr; - char* xptr = this_die; + bfd_byte *this_die = aDiePtr; + bfd_byte *xptr = this_die; memset (aDieInfo, 0, sizeof (* aDieInfo)); @@ -242,8 +251,8 @@ parse_die (bfd * abfd, break; case FORM_STRING: if (attr == AT_name) - aDieInfo->name = xptr; - xptr += strlen (xptr) + 1; + aDieInfo->name = (char *)xptr; + xptr += strlen (aDieInfo->name) + 1; break; } } @@ -258,7 +267,7 @@ parse_die (bfd * abfd, static bfd_boolean parse_line_table (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) { - char* xptr; + bfd_byte *xptr; /* Load the ".line" section from the bfd if we haven't already. */ if (stash->line_section == 0) @@ -271,18 +280,13 @@ parse_line_table (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) return FALSE; size = msec->rawsize ? msec->rawsize : msec->size; - stash->line_section = bfd_alloc (stash->abfd, size); + stash->line_section + = bfd_simple_get_relocated_section_contents + (stash->abfd, msec, NULL, stash->syms); if (! stash->line_section) return FALSE; - if (! bfd_get_section_contents (stash->abfd, msec, stash->line_section, - 0, size)) - { - stash->line_section = 0; - return FALSE; - } - stash->line_section_end = stash->line_section + size; } @@ -290,7 +294,7 @@ parse_line_table (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) if (xptr < stash->line_section_end) { unsigned long eachLine; - char *tblend; + bfd_byte *tblend; unsigned long base; bfd_size_type amt; @@ -308,7 +312,10 @@ parse_line_table (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) /* Allocate an array for the entries. */ amt = sizeof (struct linenumber) * aUnit->line_count; - aUnit->linenumber_table = bfd_alloc (stash->abfd, amt); + aUnit->linenumber_table = (struct linenumber *) bfd_alloc (stash->abfd, + amt); + if (!aUnit->linenumber_table) + return FALSE; for (eachLine = 0; eachLine < aUnit->line_count; eachLine++) { @@ -338,7 +345,7 @@ parse_line_table (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) static bfd_boolean parse_functions_in_unit (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) { - char* eachDie; + bfd_byte *eachDie; if (aUnit->first_child) for (eachDie = aUnit->first_child; @@ -357,6 +364,8 @@ parse_functions_in_unit (struct dwarf1_debug* stash, struct dwarf1_unit* aUnit) || eachDieInfo.tag == TAG_entry_point) { struct dwarf1_func* aFunc = alloc_dwarf1_func (stash,aUnit); + if (!aFunc) + return FALSE; aFunc->name = eachDieInfo.name; aFunc->low_pc = eachDieInfo.low_pc; @@ -442,7 +451,7 @@ dwarf1_unit_find_nearest_line (struct dwarf1_debug* stash, bfd_boolean _bfd_dwarf1_find_nearest_line (bfd *abfd, asection *section, - asymbol **symbols ATTRIBUTE_UNUSED, + asymbol **symbols, bfd_vma offset, const char **filename_ptr, const char **functionname_ptr, @@ -465,7 +474,7 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd, bfd_size_type size = sizeof (struct dwarf1_debug); stash = elf_tdata (abfd)->dwarf1_find_line_info - = bfd_zalloc (abfd, size); + = (struct dwarf1_debug *) bfd_zalloc (abfd, size); if (! stash) return FALSE; @@ -478,21 +487,17 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd, return FALSE; size = msec->rawsize ? msec->rawsize : msec->size; - stash->debug_section = bfd_alloc (abfd, size); + stash->debug_section + = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, + symbols); if (! stash->debug_section) return FALSE; - if (! bfd_get_section_contents (abfd, msec, stash->debug_section, - 0, size)) - { - stash->debug_section = 0; - return FALSE; - } - stash->debug_section_end = stash->debug_section + size; stash->currentDie = stash->debug_section; stash->abfd = abfd; + stash->syms = symbols; } /* A null debug_section indicates that there was no dwarf1 info @@ -522,6 +527,8 @@ _bfd_dwarf1_find_nearest_line (bfd *abfd, { struct dwarf1_unit* aUnit = alloc_dwarf1_unit (stash); + if (!aUnit) + return FALSE; aUnit->name = aDieInfo.name; aUnit->low_pc = aDieInfo.low_pc; diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index 37d68f9..5d504c8 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Adapted from gdb/dwarf2read.c by Gavin Koch of Cygnus Solutions (gavin@cygnus.com). @@ -35,7 +35,7 @@ #include "libiberty.h" #include "libbfd.h" #include "elf-bfd.h" -#include "elf/dwarf2.h" +#include "dwarf2.h" /* The data in the .debug_line statement prologue looks like this. */ @@ -75,7 +75,7 @@ struct dwarf_block bfd_byte *data; }; -struct loadable_section +struct adjusted_section { asection *section; bfd_vma adj_vma; @@ -100,10 +100,16 @@ struct dwarf2_debug /* 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; + bfd *bfd_ptr; asection *sec; bfd_byte *sec_info_ptr; + /* A pointer to the memory block allocated for info_ptr. Neither + info_ptr nor sec_info_ptr are guaranteed to stay pointing to the + beginning of the malloc block. This is used only to free the + memory later. */ + bfd_byte *info_ptr_memory; + /* Pointer to the symbol table. */ asymbol **syms; @@ -111,25 +117,25 @@ struct dwarf2_debug bfd_byte *dwarf_abbrev_buffer; /* Length of the loaded .debug_abbrev section. */ - unsigned long dwarf_abbrev_size; + bfd_size_type dwarf_abbrev_size; /* Buffer for decode_line_info. */ bfd_byte *dwarf_line_buffer; /* Length of the loaded .debug_line section. */ - unsigned long dwarf_line_size; + bfd_size_type dwarf_line_size; /* Pointer to the .debug_str section loaded into memory. */ bfd_byte *dwarf_str_buffer; /* Length of the loaded .debug_str section. */ - unsigned long dwarf_str_size; + bfd_size_type dwarf_str_size; /* Pointer to the .debug_ranges section loaded into memory. */ bfd_byte *dwarf_ranges_buffer; /* Length of the loaded .debug_ranges section. */ - unsigned long dwarf_ranges_size; + bfd_size_type dwarf_ranges_size; /* If the most recent call to bfd_find_nearest_line was given an address in an inlined function, preserve a pointer into the @@ -137,11 +143,11 @@ struct dwarf2_debug use. */ struct funcinfo *inliner_chain; - /* Number of loadable sections. */ - unsigned int loadable_section_count; + /* Number of sections whose VMA we must adjust. */ + unsigned int adjusted_section_count; - /* Array of loadable sections. */ - struct loadable_section *loadable_sections; + /* Array of sections with adjusted VMA. */ + struct adjusted_section *adjusted_sections; /* Number of times find_line is called. This is used in the heuristic for enabling the info hash tables. */ @@ -231,6 +237,9 @@ struct comp_unit /* Pointer to dwarf2_debug structure. */ struct dwarf2_debug *stash; + /* DWARF format version for this unit - from unit header. */ + int version; + /* Address size for this unit - from unit header. */ unsigned char addr_size; @@ -307,14 +316,15 @@ info_hash_table_newfunc (struct bfd_hash_entry *entry, derived class. */ if (ret == NULL) { - ret = bfd_hash_allocate (table, sizeof (* ret)); + ret = (struct info_hash_entry *) bfd_hash_allocate (table, + sizeof (* ret)); if (ret == NULL) return NULL; } /* Call the allocation method of the base class. */ ret = ((struct info_hash_entry *) - bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string)); + bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string)); /* Initialize the local fields here. */ if (ret) @@ -332,7 +342,8 @@ create_info_hash_table (bfd *abfd) { struct info_hash_table *hash_table; - hash_table = bfd_alloc (abfd, sizeof (struct info_hash_table)); + hash_table = (struct info_hash_table *) + bfd_alloc (abfd, sizeof (struct info_hash_table)); if (!hash_table) return hash_table; @@ -365,7 +376,8 @@ insert_info_hash_table (struct info_hash_table *hash_table, if (!entry) return FALSE; - node = bfd_hash_allocate (&hash_table->base, sizeof (*node)); + node = (struct info_list_node *) bfd_hash_allocate (&hash_table->base, + sizeof (*node)); if (!node) return FALSE; @@ -389,6 +401,82 @@ lookup_info_hash_table (struct info_hash_table *hash_table, const char *key) return entry ? entry->head : NULL; } +/* Read a section into its appropriate place in the dwarf2_debug + struct (indicated by SECTION_BUFFER and SECTION_SIZE). If SYMS is + not NULL, use bfd_simple_get_relocated_section_contents to read the + section contents, otherwise use bfd_get_section_contents. Fail if + the located section does not contain at least OFFSET bytes. */ + +static bfd_boolean +read_section (bfd * abfd, + const char * section_name, + const char * compressed_section_name, + asymbol ** syms, + bfd_uint64_t offset, + bfd_byte ** section_buffer, + bfd_size_type * section_size) +{ + asection *msec; + bfd_boolean section_is_compressed = FALSE; + + /* read_section is a noop if the section has already been read. */ + if (!*section_buffer) + { + msec = bfd_get_section_by_name (abfd, section_name); + if (! msec && compressed_section_name) + { + msec = bfd_get_section_by_name (abfd, compressed_section_name); + section_is_compressed = TRUE; + } + if (! msec) + { + (*_bfd_error_handler) (_("Dwarf Error: Can't find %s section."), section_name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + *section_size = msec->rawsize ? msec->rawsize : msec->size; + if (syms) + { + *section_buffer + = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, syms); + if (! *section_buffer) + return FALSE; + } + else + { + *section_buffer = (bfd_byte *) bfd_malloc (*section_size); + if (! *section_buffer) + return FALSE; + if (! bfd_get_section_contents (abfd, msec, *section_buffer, + 0, *section_size)) + return FALSE; + } + + if (section_is_compressed) + { + if (! bfd_uncompress_section_contents (section_buffer, section_size)) + { + (*_bfd_error_handler) (_("Dwarf Error: unable to decompress %s section."), compressed_section_name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + } + } + + /* It is possible to get a bad value for the offset into the section + that the client wants. Validate it here to avoid trouble later. */ + if (offset != 0 && offset >= *section_size) + { + (*_bfd_error_handler) (_("Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)."), + (long) offset, section_name, *section_size); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + return TRUE; +} + /* VERBATIM The following function up to the END VERBATIM mark are copied directly from dwarf2read.c. */ @@ -430,9 +518,6 @@ read_n_bytes (bfd *abfd ATTRIBUTE_UNUSED, bfd_byte *buf, unsigned int size ATTRIBUTE_UNUSED) { - /* If the size of a host char is 8 bits, we can return a pointer - to the buffer, otherwise we have to copy the data to a buffer - allocated on the temporary obstack. */ return buf; } @@ -443,6 +528,7 @@ read_string (bfd *abfd ATTRIBUTE_UNUSED, { /* Return a pointer to the embedded string. */ char *str = (char *) buf; + if (*str == '\0') { *bytes_read_ptr = 1; @@ -453,10 +539,12 @@ read_string (bfd *abfd ATTRIBUTE_UNUSED, return str; } +/* END VERBATIM */ + static char * -read_indirect_string (struct comp_unit* unit, - bfd_byte *buf, - unsigned int *bytes_read_ptr) +read_indirect_string (struct comp_unit * unit, + bfd_byte * buf, + unsigned int * bytes_read_ptr) { bfd_uint64_t offset; struct dwarf2_debug *stash = unit->stash; @@ -466,41 +554,13 @@ read_indirect_string (struct comp_unit* unit, offset = read_4_bytes (unit->abfd, buf); else offset = read_8_bytes (unit->abfd, buf); - *bytes_read_ptr = unit->offset_size; - - if (! stash->dwarf_str_buffer) - { - asection *msec; - bfd *abfd = unit->abfd; - bfd_size_type sz; - msec = bfd_get_section_by_name (abfd, ".debug_str"); - if (! msec) - { - (*_bfd_error_handler) - (_("Dwarf Error: Can't find .debug_str section.")); - bfd_set_error (bfd_error_bad_value); - return NULL; - } - - sz = msec->rawsize ? msec->rawsize : msec->size; - stash->dwarf_str_size = sz; - stash->dwarf_str_buffer = bfd_alloc (abfd, sz); - if (! stash->dwarf_str_buffer) - return NULL; - - if (! bfd_get_section_contents (abfd, msec, stash->dwarf_str_buffer, - 0, sz)) - return NULL; - } + *bytes_read_ptr = unit->offset_size; - if (offset >= stash->dwarf_str_size) - { - (*_bfd_error_handler) (_("Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)."), - (unsigned long) offset, stash->dwarf_str_size); - bfd_set_error (bfd_error_bad_value); - return NULL; - } + if (! read_section (unit->abfd, ".debug_str", ".zdebug_str", + stash->syms, offset, + &stash->dwarf_str_buffer, &stash->dwarf_str_size)) + return NULL; str = (char *) stash->dwarf_str_buffer + offset; if (*str == '\0') @@ -508,8 +568,6 @@ read_indirect_string (struct comp_unit* unit, return str; } -/* END VERBATIM */ - static bfd_uint64_t read_address (struct comp_unit *unit, bfd_byte *buf) { @@ -582,36 +640,13 @@ read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash) unsigned int abbrev_form, hash_number; bfd_size_type amt; - if (! stash->dwarf_abbrev_buffer) - { - asection *msec; - - msec = bfd_get_section_by_name (abfd, ".debug_abbrev"); - if (! msec) - { - (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_abbrev section.")); - bfd_set_error (bfd_error_bad_value); - return 0; - } - - stash->dwarf_abbrev_size = msec->size; - stash->dwarf_abbrev_buffer - = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, - stash->syms); - if (! stash->dwarf_abbrev_buffer) - return 0; - } - - if (offset >= stash->dwarf_abbrev_size) - { - (*_bfd_error_handler) (_("Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)."), - (unsigned long) offset, stash->dwarf_abbrev_size); - bfd_set_error (bfd_error_bad_value); - return 0; - } + if (! read_section (abfd, ".debug_abbrev", ".zdebug_abbrev", + stash->syms, offset, + &stash->dwarf_abbrev_buffer, &stash->dwarf_abbrev_size)) + return 0; amt = sizeof (struct abbrev_info*) * ABBREV_HASH_SIZE; - abbrevs = bfd_zalloc (abfd, amt); + abbrevs = (struct abbrev_info **) bfd_zalloc (abfd, amt); abbrev_ptr = stash->dwarf_abbrev_buffer + offset; abbrev_number = read_unsigned_leb128 (abfd, abbrev_ptr, &bytes_read); @@ -621,7 +656,7 @@ read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash) while (abbrev_number) { amt = sizeof (struct abbrev_info); - cur_abbrev = bfd_zalloc (abfd, amt); + cur_abbrev = (struct abbrev_info *) bfd_zalloc (abfd, amt); /* Read in abbrev header. */ cur_abbrev->number = abbrev_number; @@ -645,7 +680,7 @@ read_abbrevs (bfd *abfd, bfd_uint64_t offset, struct dwarf2_debug *stash) amt = cur_abbrev->num_attrs + ATTR_ALLOC_CHUNK; amt *= sizeof (struct attr_abbrev); - tmp = bfd_realloc (cur_abbrev->attrs, amt); + tmp = (struct attr_abbrev *) bfd_realloc (cur_abbrev->attrs, amt); if (tmp == NULL) { size_t i; @@ -715,15 +750,26 @@ read_attribute_value (struct attribute *attr, switch (form) { - case DW_FORM_addr: - /* FIXME: DWARF3 draft says DW_FORM_ref_addr is offset_size. */ case DW_FORM_ref_addr: + /* DW_FORM_ref_addr is an address in DWARF2, and an offset in + DWARF3. */ + if (unit->version == 3) + { + if (unit->offset_size == 4) + attr->u.val = read_4_bytes (unit->abfd, info_ptr); + else + attr->u.val = read_8_bytes (unit->abfd, info_ptr); + info_ptr += unit->offset_size; + break; + } + /* FALLTHROUGH */ + case DW_FORM_addr: attr->u.val = read_address (unit, info_ptr); info_ptr += unit->addr_size; break; case DW_FORM_block2: amt = sizeof (struct dwarf_block); - blk = bfd_alloc (abfd, amt); + blk = (struct dwarf_block *) bfd_alloc (abfd, amt); blk->size = read_2_bytes (abfd, info_ptr); info_ptr += 2; blk->data = read_n_bytes (abfd, info_ptr, blk->size); @@ -732,7 +778,7 @@ read_attribute_value (struct attribute *attr, break; case DW_FORM_block4: amt = sizeof (struct dwarf_block); - blk = bfd_alloc (abfd, amt); + blk = (struct dwarf_block *) bfd_alloc (abfd, amt); blk->size = read_4_bytes (abfd, info_ptr); info_ptr += 4; blk->data = read_n_bytes (abfd, info_ptr, blk->size); @@ -761,7 +807,7 @@ read_attribute_value (struct attribute *attr, break; case DW_FORM_block: amt = sizeof (struct dwarf_block); - blk = bfd_alloc (abfd, amt); + blk = (struct dwarf_block *) bfd_alloc (abfd, amt); blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); info_ptr += bytes_read; blk->data = read_n_bytes (abfd, info_ptr, blk->size); @@ -770,7 +816,7 @@ read_attribute_value (struct attribute *attr, break; case DW_FORM_block1: amt = sizeof (struct dwarf_block); - blk = bfd_alloc (abfd, amt); + blk = (struct dwarf_block *) bfd_alloc (abfd, amt); blk->size = read_1_byte (abfd, info_ptr); info_ptr += 1; blk->data = read_n_bytes (abfd, info_ptr, blk->size); @@ -935,7 +981,7 @@ add_line_info (struct line_info_table *table, int end_sequence) { bfd_size_type amt = sizeof (struct line_info); - struct line_info* info = bfd_alloc (table->abfd, amt); + struct line_info* info = (struct line_info *) bfd_alloc (table->abfd, amt); /* Set member data of 'info'. */ info->address = address; @@ -945,7 +991,7 @@ add_line_info (struct line_info_table *table, if (filename && filename[0]) { - info->filename = bfd_alloc (table->abfd, strlen (filename) + 1); + info->filename = (char *) bfd_alloc (table->abfd, strlen (filename) + 1); if (info->filename) strcpy (info->filename, filename); } @@ -967,7 +1013,18 @@ add_line_info (struct line_info_table *table, Note: we may receive duplicate entries from 'decode_line_info'. */ - if (!table->last_line + if (table->last_line + && table->last_line->address == address + && table->last_line->end_sequence == end_sequence) + { + /* We only keep the last entry with the same address and end + sequence. See PR ld/4986. */ + if (table->lcl_head == table->last_line) + table->lcl_head = info; + info->prev_line = table->last_line->prev_line; + table->last_line = info; + } + else if (!table->last_line || new_line_sorts_after (info, table->last_line)) { /* Normal case: add 'info' to the beginning of the list */ @@ -1055,13 +1112,13 @@ concat_filename (struct line_info_table *table, unsigned int file) if (subdirname) { len += strlen (subdirname) + 1; - name = bfd_malloc (len); + name = (char *) bfd_malloc (len); if (name) sprintf (name, "%s/%s/%s", dirname, subdirname, filename); } else { - name = bfd_malloc (len); + name = (char *) bfd_malloc (len); if (name) sprintf (name, "%s/%s", dirname, filename); } @@ -1105,7 +1162,7 @@ arange_add (bfd *abfd, struct arange *first_arange, bfd_vma low_pc, bfd_vma high /* Need to allocate a new arange and insert it into the arange list. Order isn't significant, so just insert after the first arange. */ - arange = bfd_zalloc (abfd, sizeof (*arange)); + arange = (struct arange *) bfd_zalloc (abfd, sizeof (*arange)); arange->low = low_pc; arange->high = high_pc; arange->next = first_arange->next; @@ -1127,38 +1184,13 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) unsigned char op_code, extended_op, adj_opcode; bfd_size_type amt; - if (! stash->dwarf_line_buffer) - { - asection *msec; - - msec = bfd_get_section_by_name (abfd, ".debug_line"); - if (! msec) - { - (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_line section.")); - bfd_set_error (bfd_error_bad_value); - return 0; - } - - stash->dwarf_line_size = msec->size; - stash->dwarf_line_buffer - = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, - stash->syms); - if (! stash->dwarf_line_buffer) - return 0; - } - - /* It is possible to get a bad value for the line_offset. Validate - it here so that we won't get a segfault below. */ - if (unit->line_offset >= stash->dwarf_line_size) - { - (*_bfd_error_handler) (_("Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)."), - unit->line_offset, stash->dwarf_line_size); - bfd_set_error (bfd_error_bad_value); - return 0; - } + if (! read_section (abfd, ".debug_line", ".zdebug_line", + stash->syms, unit->line_offset, + &stash->dwarf_line_buffer, &stash->dwarf_line_size)) + return 0; amt = sizeof (struct line_info_table); - table = bfd_alloc (abfd, amt); + table = (struct line_info_table *) bfd_alloc (abfd, amt); table->abfd = abfd; table->comp_dir = unit->comp_dir; @@ -1210,7 +1242,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) lh.opcode_base = read_1_byte (abfd, line_ptr); line_ptr += 1; amt = lh.opcode_base * sizeof (unsigned char); - lh.standard_opcode_lengths = bfd_alloc (abfd, amt); + lh.standard_opcode_lengths = (unsigned char *) bfd_alloc (abfd, amt); lh.standard_opcode_lengths[0] = 1; @@ -1232,7 +1264,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) amt = table->num_dirs + DIR_ALLOC_CHUNK; amt *= sizeof (char *); - tmp = bfd_realloc (table->dirs, amt); + tmp = (char **) bfd_realloc (table->dirs, amt); if (tmp == NULL) { free (table->dirs); @@ -1258,7 +1290,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) amt = table->num_files + FILE_ALLOC_CHUNK; amt *= sizeof (struct fileinfo); - tmp = bfd_realloc (table->files, amt); + tmp = (struct fileinfo *) bfd_realloc (table->files, amt); if (tmp == NULL) { free (table->files); @@ -1354,7 +1386,7 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) amt = table->num_files + FILE_ALLOC_CHUNK; amt *= sizeof (struct fileinfo); - tmp = bfd_realloc (table->files, amt); + tmp = (struct fileinfo *) bfd_realloc (table->files, amt); if (tmp == NULL) { free (table->files); @@ -1376,6 +1408,10 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) line_ptr += bytes_read; table->num_files++; break; + case DW_LNE_set_discriminator: + (void) read_unsigned_leb128 (abfd, line_ptr, &bytes_read); + line_ptr += bytes_read; + break; default: (*_bfd_error_handler) (_("Dwarf Error: mangled line number section.")); bfd_set_error (bfd_error_bad_value); @@ -1459,95 +1495,27 @@ decode_line_info (struct comp_unit *unit, struct dwarf2_debug *stash) static bfd_boolean lookup_address_in_line_info_table (struct line_info_table *table, bfd_vma addr, - struct funcinfo *function, const char **filename_ptr, unsigned int *linenumber_ptr) { /* Note: table->last_line should be a descendingly sorted list. */ - struct line_info* next_line = table->last_line; - struct line_info* each_line = NULL; - *filename_ptr = NULL; + struct line_info *each_line; - if (!next_line) - return FALSE; - - each_line = next_line->prev_line; - - /* Check for large addresses */ - if (addr > next_line->address) - each_line = NULL; /* ensure we skip over the normal case */ - - /* Normal case: search the list; save */ - while (each_line && next_line) - { - /* If we have an address match, save this info. This allows us - to return as good as results as possible for strange debugging - info. */ - bfd_boolean addr_match = FALSE; - if (each_line->address <= addr && addr < next_line->address) - { - addr_match = TRUE; - - /* If this line appears to span functions, and addr is in the - later function, return the first line of that function instead - of the last line of the earlier one. This check is for GCC - 2.95, which emits the first line number for a function late. */ - - if (function != NULL) - { - bfd_vma lowest_pc; - struct arange *arange; - - /* Find the lowest address in the function's range list */ - lowest_pc = function->arange.low; - for (arange = &function->arange; - arange; - arange = arange->next) - { - if (function->arange.low < lowest_pc) - lowest_pc = function->arange.low; - } - /* Check for spanning function and set outgoing line info */ - if (addr >= lowest_pc - && each_line->address < lowest_pc - && next_line->address > lowest_pc) - { - *filename_ptr = next_line->filename; - *linenumber_ptr = next_line->line; - } - else - { - *filename_ptr = each_line->filename; - *linenumber_ptr = each_line->line; - } - } - else - { - *filename_ptr = each_line->filename; - *linenumber_ptr = each_line->line; - } - } - - if (addr_match && !each_line->end_sequence) - return TRUE; /* we have definitely found what we want */ - - next_line = each_line; - each_line = each_line->prev_line; - } + for (each_line = table->last_line; + each_line; + each_line = each_line->prev_line) + if (addr >= each_line->address) + break; - /* At this point each_line is NULL but next_line is not. If we found - a candidate end-of-sequence point in the loop above, we can return - that (compatibility with a bug in the Intel compiler); otherwise, - assuming that we found the containing function for this address in - this compilation unit, return the first line we have a number for - (compatibility with GCC 2.95). */ - if (*filename_ptr == NULL && function != NULL) + if (each_line + && !(each_line->end_sequence || each_line == table->last_line)) { - *filename_ptr = next_line->filename; - *linenumber_ptr = next_line->line; + *filename_ptr = each_line->filename; + *linenumber_ptr = each_line->line; return TRUE; } + *filename_ptr = NULL; return FALSE; } @@ -1557,27 +1525,9 @@ static bfd_boolean read_debug_ranges (struct comp_unit *unit) { struct dwarf2_debug *stash = unit->stash; - if (! stash->dwarf_ranges_buffer) - { - bfd *abfd = unit->abfd; - asection *msec; - - msec = bfd_get_section_by_name (abfd, ".debug_ranges"); - if (! msec) - { - (*_bfd_error_handler) (_("Dwarf Error: Can't find .debug_ranges section.")); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - - stash->dwarf_ranges_size = msec->size; - stash->dwarf_ranges_buffer - = bfd_simple_get_relocated_section_contents (abfd, msec, NULL, - stash->syms); - if (! stash->dwarf_ranges_buffer) - return FALSE; - } - return TRUE; + return read_section (unit->abfd, ".debug_ranges", ".zdebug_ranges", + stash->syms, 0, + &stash->dwarf_ranges_buffer, &stash->dwarf_ranges_size); } /* Function table functions. */ @@ -1710,16 +1660,30 @@ lookup_symbol_in_variable_table (struct comp_unit *unit, } static char * -find_abstract_instance_name (struct comp_unit *unit, bfd_uint64_t die_ref) +find_abstract_instance_name (struct comp_unit *unit, + struct attribute *attr_ptr) { bfd *abfd = unit->abfd; bfd_byte *info_ptr; unsigned int abbrev_number, bytes_read, i; struct abbrev_info *abbrev; + bfd_uint64_t die_ref = attr_ptr->u.val; struct attribute attr; char *name = 0; - info_ptr = unit->info_ptr_unit + die_ref; + /* DW_FORM_ref_addr can reference an entry in a different CU. It + is an offset from the .debug_info section, not the current CU. */ + if (attr_ptr->form == DW_FORM_ref_addr) + { + /* We only support DW_FORM_ref_addr within the same file, so + any relocations should be resolved already. */ + if (!die_ref) + abort (); + + info_ptr = unit->stash->sec_info_ptr + die_ref; + } + else + info_ptr = unit->info_ptr_unit + die_ref; abbrev_number = read_unsigned_leb128 (abfd, info_ptr, &bytes_read); info_ptr += bytes_read; @@ -1745,7 +1709,7 @@ find_abstract_instance_name (struct comp_unit *unit, bfd_uint64_t die_ref) name = attr.u.str; break; case DW_AT_specification: - name = find_abstract_instance_name (unit, attr.u.val); + name = find_abstract_instance_name (unit, &attr); break; case DW_AT_MIPS_linkage_name: name = attr.u.str; @@ -1777,20 +1741,11 @@ read_rangelist (struct comp_unit *unit, struct arange *arange, bfd_uint64_t offs bfd_vma low_pc; bfd_vma high_pc; - if (unit->addr_size == 4) - { - low_pc = read_4_bytes (unit->abfd, ranges_ptr); - ranges_ptr += 4; - high_pc = read_4_bytes (unit->abfd, ranges_ptr); - ranges_ptr += 4; - } - else - { - low_pc = read_8_bytes (unit->abfd, ranges_ptr); - ranges_ptr += 8; - high_pc = read_8_bytes (unit->abfd, ranges_ptr); - ranges_ptr += 8; - } + low_pc = read_address (unit, ranges_ptr); + ranges_ptr += unit->addr_size; + high_pc = read_address (unit, ranges_ptr); + ranges_ptr += unit->addr_size; + if (low_pc == 0 && high_pc == 0) break; if (low_pc == -1UL && high_pc != -1UL) @@ -1817,7 +1772,8 @@ scan_unit_for_symbols (struct comp_unit *unit) /* Maintain a stack of in-scope functions and inlined functions, which we can use to set the caller_func field. */ nested_funcs_size = 32; - nested_funcs = bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *)); + nested_funcs = (struct funcinfo **) + bfd_malloc (nested_funcs_size * sizeof (struct funcinfo *)); if (nested_funcs == NULL) return FALSE; nested_funcs[nesting_level] = 0; @@ -1857,7 +1813,7 @@ scan_unit_for_symbols (struct comp_unit *unit) || abbrev->tag == DW_TAG_inlined_subroutine) { bfd_size_type amt = sizeof (struct funcinfo); - func = bfd_zalloc (abfd, amt); + func = (struct funcinfo *) bfd_zalloc (abfd, amt); func->tag = abbrev->tag; func->prev_func = unit->function_table; unit->function_table = func; @@ -1878,7 +1834,7 @@ scan_unit_for_symbols (struct comp_unit *unit) if (abbrev->tag == DW_TAG_variable) { bfd_size_type amt = sizeof (struct varinfo); - var = bfd_zalloc (abfd, amt); + var = (struct varinfo *) bfd_zalloc (abfd, amt); var->tag = abbrev->tag; var->stack = 1; var->prev_var = unit->variable_table; @@ -1907,7 +1863,7 @@ scan_unit_for_symbols (struct comp_unit *unit) break; case DW_AT_abstract_origin: - func->name = find_abstract_instance_name (unit, attr.u.val); + func->name = find_abstract_instance_name (unit, &attr); break; case DW_AT_name: @@ -2016,9 +1972,9 @@ scan_unit_for_symbols (struct comp_unit *unit) struct funcinfo **tmp; nested_funcs_size *= 2; - tmp = bfd_realloc (nested_funcs, - (nested_funcs_size - * sizeof (struct funcinfo *))); + tmp = (struct funcinfo **) + bfd_realloc (nested_funcs, + (nested_funcs_size * sizeof (struct funcinfo *))); if (tmp == NULL) { free (nested_funcs); @@ -2062,7 +2018,7 @@ parse_comp_unit (struct dwarf2_debug *stash, bfd_size_type amt; bfd_vma low_pc = 0; bfd_vma high_pc = 0; - bfd *abfd = stash->bfd; + bfd *abfd = stash->bfd_ptr; version = read_2_bytes (abfd, info_ptr); info_ptr += 2; @@ -2075,9 +2031,9 @@ parse_comp_unit (struct dwarf2_debug *stash, addr_size = read_1_byte (abfd, info_ptr); info_ptr += 1; - if (version != 2) + if (version != 2 && version != 3) { - (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 information."), version); + (*_bfd_error_handler) (_("Dwarf Error: found dwarf version '%u', this reader only handles version 2 and 3 information."), version); bfd_set_error (bfd_error_bad_value); return 0; } @@ -2123,8 +2079,9 @@ parse_comp_unit (struct dwarf2_debug *stash, } amt = sizeof (struct comp_unit); - unit = bfd_zalloc (abfd, amt); + unit = (struct comp_unit *) bfd_zalloc (abfd, amt); unit->abfd = abfd; + unit->version = version; unit->addr_size = addr_size; unit->offset_size = offset_size; unit->abbrevs = abbrevs; @@ -2273,7 +2230,7 @@ comp_unit_find_nearest_line (struct comp_unit *unit, if (func_p && (function->tag == DW_TAG_inlined_subroutine)) stash->inliner_chain = function; line_p = lookup_address_in_line_info_table (unit->line_table, addr, - function, filename_ptr, + filename_ptr, linenumber_ptr); return line_p || func_p; } @@ -2450,6 +2407,7 @@ comp_unit_hash_info (struct dwarf2_debug *stash, identify and discard duplicate debugging sections for different compilation units. */ #define DWARF2_DEBUG_INFO ".debug_info" +#define DWARF2_COMPRESSED_DEBUG_INFO ".zdebug_info" #define GNU_LINKONCE_INFO ".gnu.linkonce.wi." static asection * @@ -2464,6 +2422,9 @@ find_debug_info (bfd *abfd, asection *after_sec) if (strcmp (msec->name, DWARF2_DEBUG_INFO) == 0) return msec; + if (strcmp (msec->name, DWARF2_COMPRESSED_DEBUG_INFO) == 0) + return msec; + if (CONST_STRNEQ (msec->name, GNU_LINKONCE_INFO)) return msec; @@ -2473,49 +2434,63 @@ find_debug_info (bfd *abfd, asection *after_sec) return NULL; } -/* Unset vmas for loadable sections in STASH. */ +/* Unset vmas for adjusted sections in STASH. */ static void unset_sections (struct dwarf2_debug *stash) { unsigned int i; - struct loadable_section *p; + struct adjusted_section *p; - i = stash->loadable_section_count; - p = stash->loadable_sections; + i = stash->adjusted_section_count; + p = stash->adjusted_sections; for (; i > 0; i--, p++) p->section->vma = 0; } -/* Set unique vmas for loadable sections in ABFD and save vmas in - STASH for unset_sections. */ +/* Set unique VMAs for loadable and DWARF sections in ABFD and save + VMAs in STASH for unset_sections. */ static bfd_boolean place_sections (bfd *abfd, struct dwarf2_debug *stash) { - struct loadable_section *p; + struct adjusted_section *p; unsigned int i; - if (stash->loadable_section_count != 0) + if (stash->adjusted_section_count != 0) { - i = stash->loadable_section_count; - p = stash->loadable_sections; + i = stash->adjusted_section_count; + p = stash->adjusted_sections; for (; i > 0; i--, p++) p->section->vma = p->adj_vma; } else { asection *sect; - bfd_vma last_vma = 0; + bfd_vma last_vma = 0, last_dwarf = 0; bfd_size_type amt; - struct loadable_section *p; + struct adjusted_section *p; i = 0; for (sect = abfd->sections; sect != NULL; sect = sect->next) { bfd_size_type sz; + int is_debug_info; + + if (sect->vma != 0) + continue; + + /* We need to adjust the VMAs of any .debug_info sections. + Skip compressed ones, since no relocations could target + them - they should not appear in object files anyway. */ + if (strcmp (sect->name, DWARF2_DEBUG_INFO) == 0) + is_debug_info = 1; + else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO)) + is_debug_info = 1; + else + is_debug_info = 0; - if (sect->vma != 0 || (sect->flags & SEC_LOAD) == 0) + if (!is_debug_info && (sect->flags & SEC_LOAD) == 0) continue; sz = sect->rawsize ? sect->rawsize : sect->size; @@ -2525,19 +2500,33 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash) i++; } - amt = i * sizeof (struct loadable_section); - p = (struct loadable_section *) bfd_zalloc (abfd, amt); + amt = i * sizeof (struct adjusted_section); + p = (struct adjusted_section *) bfd_zalloc (abfd, amt); if (! p) return FALSE; - stash->loadable_sections = p; - stash->loadable_section_count = i; + stash->adjusted_sections = p; + stash->adjusted_section_count = i; for (sect = abfd->sections; sect != NULL; sect = sect->next) { bfd_size_type sz; + int is_debug_info; + + if (sect->vma != 0) + continue; - if (sect->vma != 0 || (sect->flags & SEC_LOAD) == 0) + /* We need to adjust the VMAs of any .debug_info sections. + Skip compressed ones, since no relocations could target + them - they should not appear in object files anyway. */ + if (strcmp (sect->name, DWARF2_DEBUG_INFO) == 0) + is_debug_info = 1; + else if (CONST_STRNEQ (sect->name, GNU_LINKONCE_INFO)) + is_debug_info = 1; + else + is_debug_info = 0; + + if (!is_debug_info && (sect->flags & SEC_LOAD) == 0) continue; sz = sect->rawsize ? sect->rawsize : sect->size; @@ -2545,7 +2534,13 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash) continue; p->section = sect; - if (last_vma != 0) + if (is_debug_info) + { + BFD_ASSERT (sect->alignment_power == 0); + sect->vma = last_dwarf; + last_dwarf += sz; + } + else if (last_vma != 0) { /* Align the new address to the current section alignment. */ @@ -2553,9 +2548,12 @@ place_sections (bfd *abfd, struct dwarf2_debug *stash) + ~((bfd_vma) -1 << sect->alignment_power)) & ((bfd_vma) -1 << sect->alignment_power)); sect->vma = last_vma; + last_vma += sect->vma + sz; } + else + last_vma += sect->vma + sz; + p->adj_vma = sect->vma; - last_vma += sect->vma + sz; p++; } @@ -2588,7 +2586,7 @@ info_hash_lookup_funcinfo (struct info_hash_table *hash_table, node; node = node->next) { - each_func = node->info; + each_func = (struct funcinfo *) node->info; for (arange = &each_func->arange; arange; arange = arange->next) @@ -2636,7 +2634,7 @@ info_hash_lookup_varinfo (struct info_hash_table *hash_table, node; node = node->next) { - each = node->info; + each = (struct varinfo *) node->info; if (each->addr == addr && (!each->sec || each->sec == sec)) { @@ -2827,13 +2825,13 @@ find_line (bfd *abfd, bfd_vma found = FALSE; bfd_boolean do_line; - stash = *pinfo; + stash = (struct dwarf2_debug *) *pinfo; if (! stash) { bfd_size_type amt = sizeof (struct dwarf2_debug); - stash = bfd_zalloc (abfd, amt); + stash = (struct dwarf2_debug *) bfd_zalloc (abfd, amt); if (! stash) return FALSE; } @@ -2905,46 +2903,104 @@ find_line (bfd *abfd, 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 (debug_bfd, msec)) - total_size += msec->size; + /* There can be more than one DWARF2 info section in a BFD these + days. First handle the easy case when there's only one. If + there's more than one, try case two: none of the sections is + compressed. In that case, 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, and 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.) If + some or all sections are compressed, then do things the slow + way, with a bunch of reallocs. */ + + if (! find_debug_info (debug_bfd, msec)) + { + /* Case 1: only one info section. */ + total_size = msec->size; + if (! read_section (debug_bfd, ".debug_info", ".zdebug_info", + symbols, 0, + &stash->info_ptr_memory, &total_size)) + goto done; + } + else + { + int all_uncompressed = 1; + for (total_size = 0; msec; msec = find_debug_info (debug_bfd, msec)) + { + total_size += msec->size; + if (strcmp (msec->name, DWARF2_COMPRESSED_DEBUG_INFO) == 0) + all_uncompressed = 0; + } + if (all_uncompressed) + { + /* Case 2: multiple sections, but none is compressed. */ + stash->info_ptr_memory = (bfd_byte *) bfd_malloc (total_size); + if (stash->info_ptr_memory == NULL) + goto done; - stash->info_ptr = bfd_alloc (debug_bfd, total_size); - if (stash->info_ptr == NULL) - goto done; + total_size = 0; + for (msec = find_debug_info (debug_bfd, NULL); + msec; + msec = find_debug_info (debug_bfd, msec)) + { + bfd_size_type size; - stash->info_ptr_end = stash->info_ptr; + size = msec->size; + if (size == 0) + continue; - for (msec = find_debug_info (debug_bfd, NULL); - msec; - msec = find_debug_info (debug_bfd, msec)) - { - bfd_size_type size; - bfd_size_type start; + if (!(bfd_simple_get_relocated_section_contents + (debug_bfd, msec, stash->info_ptr_memory + total_size, + symbols))) + goto done; - size = msec->size; - if (size == 0) - continue; + total_size += size; + } + } + else + { + /* Case 3: multiple sections, some or all compressed. */ + stash->info_ptr_memory = NULL; + total_size = 0; + for (msec = find_debug_info (debug_bfd, NULL); + msec; + msec = find_debug_info (debug_bfd, msec)) + { + bfd_size_type size = msec->size; + bfd_byte* buffer; - start = stash->info_ptr_end - stash->info_ptr; + if (size == 0) + continue; - if ((bfd_simple_get_relocated_section_contents - (debug_bfd, msec, stash->info_ptr + start, symbols)) == NULL) - continue; + buffer = (bfd_simple_get_relocated_section_contents + (debug_bfd, msec, NULL, symbols)); + if (! buffer) + goto done; - stash->info_ptr_end = stash->info_ptr + start + size; + if (strcmp (msec->name, DWARF2_COMPRESSED_DEBUG_INFO) == 0) + { + if (! bfd_uncompress_section_contents (&buffer, &size)) + { + free (buffer); + goto done; + } + } + stash->info_ptr_memory = (bfd_byte *) + bfd_realloc (stash->info_ptr_memory, total_size + size); + memcpy (stash->info_ptr_memory + total_size, buffer, size); + free (buffer); + total_size += size; + } + } } - BFD_ASSERT (stash->info_ptr_end == stash->info_ptr + total_size); - + stash->info_ptr = stash->info_ptr_memory; + stash->info_ptr_end = stash->info_ptr + total_size; stash->sec = find_debug_info (debug_bfd, NULL); stash->sec_info_ptr = stash->info_ptr; stash->syms = symbols; - stash->bfd = debug_bfd; + stash->bfd_ptr = debug_bfd; } /* A null info_ptr indicates that there is no dwarf2 info @@ -3018,13 +3074,13 @@ find_line (bfd *abfd, unsigned int offset_size = addr_size; bfd_byte *info_ptr_unit = stash->info_ptr; - length = read_4_bytes (stash->bfd, stash->info_ptr); + length = read_4_bytes (stash->bfd_ptr, 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 (stash->bfd, stash->info_ptr + 4); + length = read_8_bytes (stash->bfd_ptr, stash->info_ptr + 4); stash->info_ptr += 12; } /* A zero length is the IRIX way of indicating 64-bit offsets, @@ -3033,7 +3089,7 @@ find_line (bfd *abfd, else if (length == 0) { offset_size = 8; - length = read_4_bytes (stash->bfd, stash->info_ptr + 4); + length = read_4_bytes (stash->bfd_ptr, stash->info_ptr + 4); stash->info_ptr += 8; } /* In the absence of the hints above, we assume 32-bit DWARF2 @@ -3048,7 +3104,7 @@ find_line (bfd *abfd, else if (addr_size == 8) { offset_size = 4; - stash->info_ptr += 4; + stash->info_ptr += 4; } else stash->info_ptr += 4; @@ -3057,49 +3113,51 @@ find_line (bfd *abfd, { each = parse_comp_unit (stash, length, info_ptr_unit, offset_size); + if (!each) + /* The dwarf information is damaged, don't trust it any + more. */ + break; stash->info_ptr += length; + if (stash->all_comp_units) + stash->all_comp_units->prev_unit = each; + else + stash->last_comp_unit = 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 (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 ((bfd_vma) (stash->info_ptr - stash->sec_info_ptr) == stash->sec->size) { - stash->sec = find_debug_info (stash->bfd, stash->sec); + stash->sec = find_debug_info (stash->bfd_ptr, stash->sec); stash->sec_info_ptr = stash->info_ptr; } - if (each) - { - if (stash->all_comp_units) - stash->all_comp_units->prev_unit = each; - else - stash->last_comp_unit = 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 (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; - } + if (found) + goto done; } } @@ -3155,7 +3213,7 @@ _bfd_dwarf2_find_inliner_info (bfd *abfd ATTRIBUTE_UNUSED, { struct dwarf2_debug *stash; - stash = *pinfo; + stash = (struct dwarf2_debug *) *pinfo; if (stash) { struct funcinfo *func = stash->inliner_chain; @@ -3182,7 +3240,7 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd) if (abfd == NULL || elf_tdata (abfd) == NULL) return; - stash = elf_tdata (abfd)->dwarf2_find_line_info; + stash = (struct dwarf2_debug *) elf_tdata (abfd)->dwarf2_find_line_info; if (stash == NULL) return; @@ -3190,6 +3248,8 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd) for (each = stash->all_comp_units; each; each = each->next_unit) { struct abbrev_info **abbrevs = each->abbrevs; + struct funcinfo *function_table = each->function_table; + struct varinfo *variable_table = each->variable_table; size_t i; for (i = 0; i < ABBREV_HASH_SIZE; i++) @@ -3208,9 +3268,43 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd) free (each->line_table->dirs); free (each->line_table->files); } + + while (function_table) + { + if (function_table->file) + { + free (function_table->file); + function_table->file = NULL; + } + + if (function_table->caller_file) + { + free (function_table->caller_file); + function_table->caller_file = NULL; + } + function_table = function_table->prev_func; + } + + while (variable_table) + { + if (variable_table->file) + { + free (variable_table->file); + variable_table->file = NULL; + } + + variable_table = variable_table->prev_var; + } } - free (stash->dwarf_abbrev_buffer); - free (stash->dwarf_line_buffer); - free (stash->dwarf_ranges_buffer); + if (stash->dwarf_abbrev_buffer) + free (stash->dwarf_abbrev_buffer); + if (stash->dwarf_line_buffer) + free (stash->dwarf_line_buffer); + if (stash->dwarf_str_buffer) + free (stash->dwarf_str_buffer); + if (stash->dwarf_ranges_buffer) + free (stash->dwarf_ranges_buffer); + if (stash->info_ptr_memory) + free (stash->info_ptr_memory); } diff --git a/bfd/ecoff.c b/bfd/ecoff.c index 0bd4add..cb5d82f 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -1,6 +1,7 @@ /* Generic ECOFF (Extended-COFF) routines. Copyright 1990, 1991, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. Original version by Per Bothner. Full support added by Ian Lance Taylor, ian@cygnus.com. @@ -55,14 +56,14 @@ static asection bfd_debug_section = { /* name, id, index, next, prev, flags, user_set_vma, */ "*DEBUG*", 0, 0, NULL, NULL, 0, 0, - /* linker_mark, linker_has_input, gc_mark, gc_mark_from_eh, */ - 0, 0, 1, 0, + /* linker_mark, linker_has_input, gc_mark, */ + 0, 0, 1, /* 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, + /* has_tls_get_addr_call, has_gp_reloc, need_finalize_relax, */ + 0, 0, 0, + /* reloc_done, vma, lma, size, rawsize, relax, relax_count, */ + 0, 0, 0, 0, 0, 0, 0, /* output_offset, output_section, alignment_power, */ 0, NULL, 0, /* relocation, orelocation, reloc_count, filepos, rel_filepos, */ @@ -233,6 +234,16 @@ _bfd_ecoff_set_arch_mach_hook (bfd *abfd, void * filehdr) return bfd_default_set_arch_mach (abfd, arch, mach); } +bfd_boolean +_bfd_ecoff_no_long_sections (abfd, enable) + bfd *abfd; + int enable; +{ + (void) abfd; + (void) enable; + return FALSE; +} + /* Get the magic number to use based on the architecture and machine. This is the inverse of _bfd_ecoff_set_arch_mach_hook, above. */ @@ -633,18 +644,18 @@ static asymbol *ecoff_scom_symbol_ptr; asymbol * _bfd_ecoff_make_empty_symbol (bfd *abfd) { - ecoff_symbol_type *new; + ecoff_symbol_type *new_symbol; bfd_size_type amt = sizeof (ecoff_symbol_type); - new = bfd_zalloc (abfd, amt); - if (new == NULL) + new_symbol = (ecoff_symbol_type *) bfd_zalloc (abfd, amt); + if (new_symbol == NULL) return NULL; - new->symbol.section = NULL; - new->fdr = NULL; - new->local = FALSE; - new->native = NULL; - new->symbol.the_bfd = abfd; - return &new->symbol; + new_symbol->symbol.section = NULL; + new_symbol->fdr = NULL; + new_symbol->local = FALSE; + new_symbol->native = NULL; + new_symbol->symbol.the_bfd = abfd; + return &new_symbol->symbol; } /* Set the BFD flags and section for an ECOFF symbol. */ @@ -1038,7 +1049,7 @@ ecoff_emit_aggregate (bfd *abfd, sprintf (string, "%s %s { ifd = %u, index = %lu }", which, name, ifd, - ((long) indx + ((unsigned long) indx + debug_info->symbolic_header.iextMax)); } @@ -3154,89 +3165,6 @@ _bfd_ecoff_write_armap (bfd *abfd, return TRUE; } - -/* See whether this BFD is an archive. If it is, read in the armap - and the extended name table. */ - -const bfd_target * -_bfd_ecoff_archive_p (bfd *abfd) -{ - struct artdata *tdata_hold; - char armag[SARMAG + 1]; - bfd_size_type amt; - - if (bfd_bread ((void *) armag, (bfd_size_type) SARMAG, abfd) != SARMAG) - { - if (bfd_get_error () != bfd_error_system_call) - bfd_set_error (bfd_error_wrong_format); - return NULL; - } - - if (! strneq (armag, ARMAG, SARMAG)) - { - bfd_set_error (bfd_error_wrong_format); - return NULL; - } - - tdata_hold = bfd_ardata (abfd); - - amt = sizeof (struct artdata); - bfd_ardata (abfd) = bfd_zalloc (abfd, amt); - if (bfd_ardata (abfd) == NULL) - { - bfd_ardata (abfd) = tdata_hold; - return NULL; - } - - bfd_ardata (abfd)->first_file_filepos = SARMAG; - /* Already cleared by bfd_zalloc above. - bfd_ardata (abfd)->cache = NULL; - bfd_ardata (abfd)->archive_head = NULL; - bfd_ardata (abfd)->symdefs = NULL; - bfd_ardata (abfd)->extended_names = NULL; - bfd_ardata (abfd)->extended_names_size = 0; - bfd_ardata (abfd)->tdata = NULL; */ - - if (! _bfd_ecoff_slurp_armap (abfd) - || ! _bfd_ecoff_slurp_extended_name_table (abfd)) - { - bfd_release (abfd, bfd_ardata (abfd)); - bfd_ardata (abfd) = tdata_hold; - return NULL; - } - - if (bfd_has_map (abfd)) - { - bfd *first; - - /* This archive has a map, so we may presume that the contents - are object files. Make sure that if the first file in the - archive can be recognized as an object file, it is for this - target. If not, assume that this is the wrong format. If - the first file is not an object file, somebody is doing - something weird, and we permit it so that ar -t will work. */ - - first = bfd_openr_next_archived_file (abfd, NULL); - if (first != NULL) - { - first->target_defaulted = FALSE; - if (bfd_check_format (first, bfd_object) - && first->xvec != abfd->xvec) - { - /* We ought to close `first' here, but we can't, because - we have no way to remove it from the archive cache. - It's almost impossible to figure out when we can - release bfd_ardata. FIXME. */ - bfd_set_error (bfd_error_wrong_object_format); - bfd_ardata (abfd) = tdata_hold; - return NULL; - } - /* And we ought to close `first' here too. */ - } - } - - return abfd->xvec; -} /* ECOFF linker code. */ @@ -3485,7 +3413,7 @@ ecoff_link_add_externals (bfd *abfd, /* If we are building an ECOFF hash table, save the external symbol information. */ - if (info->hash->creator->flavour == bfd_get_flavour (abfd)) + if (bfd_get_flavour (info->output_bfd) == bfd_get_flavour (abfd)) { if (h->abfd == NULL || (! bfd_is_und_section (section) diff --git a/bfd/ecofflink.c b/bfd/ecofflink.c index 0b363a1..072c97a 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support, . This file is part of BFD, the Binary File Descriptor library. @@ -718,7 +718,8 @@ bfd_ecoff_debug_accumulate (handle, output_bfd, output_debug, output_swap, lookup = (char *) bfd_malloc ((bfd_size_type) strlen (name) + 20); if (lookup == NULL) return FALSE; - sprintf (lookup, "%s %lx %lx", name, fdr.csym, fdr.caux); + sprintf (lookup, "%s %lx %lx", name, (unsigned long) fdr.csym, + (unsigned long) fdr.caux); fh = string_hash_lookup (&ainfo->fdr_hash, lookup, TRUE, TRUE); free (lookup); diff --git a/bfd/elf-attrs.c b/bfd/elf-attrs.c index 4ee73e6..c34297c 100644 --- a/bfd/elf-attrs.c +++ b/bfd/elf-attrs.c @@ -1,5 +1,5 @@ /* ELF attributes support (based on ARM EABI attributes). - Copyright 2005, 2006, 2007 + Copyright 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -43,9 +43,11 @@ uleb128_size (unsigned int i) static bfd_boolean is_default_attr (obj_attribute *attr) { - if ((attr->type & 1) && attr->i != 0) + if (ATTR_TYPE_HAS_INT_VAL (attr->type) && attr->i != 0) return FALSE; - if ((attr->type & 2) && attr->s && *attr->s) + if (ATTR_TYPE_HAS_STR_VAL (attr->type) && attr->s && *attr->s) + return FALSE; + if (ATTR_TYPE_HAS_NO_DEFAULT (attr->type)) return FALSE; return TRUE; @@ -61,9 +63,9 @@ obj_attr_size (int tag, obj_attribute *attr) return 0; size = uleb128_size (tag); - if (attr->type & 1) + if (ATTR_TYPE_HAS_INT_VAL (attr->type)) size += uleb128_size (attr->i); - if (attr->type & 2) + if (ATTR_TYPE_HAS_STR_VAL (attr->type)) size += strlen ((char *)attr->s) + 1; return size; } @@ -149,9 +151,9 @@ write_obj_attribute (bfd_byte *p, int tag, obj_attribute *attr) return p; p = write_uleb128 (p, tag); - if (attr->type & 1) + if (ATTR_TYPE_HAS_INT_VAL (attr->type)) p = write_uleb128 (p, attr->i); - if (attr->type & 2) + if (ATTR_TYPE_HAS_STR_VAL (attr->type)) { int len; @@ -187,7 +189,12 @@ vendor_set_obj_attr_contents (bfd *abfd, bfd_byte *contents, bfd_vma size, attr = elf_known_obj_attributes (abfd)[vendor]; for (i = 4; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++) - p = write_obj_attribute (p, i, &attr[i]); + { + int tag = i; + if (get_elf_backend_data (abfd)->obj_attrs_order) + tag = get_elf_backend_data (abfd)->obj_attrs_order (i); + p = write_obj_attribute (p, tag, &attr[tag]); + } for (list = elf_other_obj_attributes (abfd)[vendor]; list; @@ -231,7 +238,7 @@ elf_new_obj_attr (bfd *abfd, int vendor, int tag) if (tag < NUM_KNOWN_OBJ_ATTRIBUTES) { - /* Knwon tags are preallocated. */ + /* Known tags are preallocated. */ attr = &elf_known_obj_attributes (abfd)[vendor][tag]; } else @@ -265,7 +272,7 @@ bfd_elf_get_obj_attr_int (bfd *abfd, int vendor, int tag) if (tag < NUM_KNOWN_OBJ_ATTRIBUTES) { - /* Knwon tags are preallocated. */ + /* Known tags are preallocated. */ return elf_known_obj_attributes (abfd)[vendor][tag].i; } else @@ -290,7 +297,7 @@ 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->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag); attr->i = i; } @@ -300,10 +307,10 @@ _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); + return (char *) memcpy (p, s, len); } /* Add a string object attribute. */ @@ -313,40 +320,21 @@ 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->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag); attr->s = _bfd_elf_attr_strdup (abfd, s); } -/* Add a Tag_compatibility object attribute. */ +/* Add a int+string object attribute. */ void -bfd_elf_add_obj_attr_compat (bfd *abfd, int vendor, unsigned int i, - const char *s) +bfd_elf_add_obj_attr_int_string (bfd *abfd, int vendor, int tag, + 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); + obj_attribute *attr; - 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; + attr = elf_new_obj_attr (abfd, vendor, tag); + attr->type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag); + attr->i = i; + attr->s = _bfd_elf_attr_strdup (abfd, s); } /* Copy the object attributes from IBFD to OBFD. */ @@ -378,18 +366,18 @@ _bfd_elf_copy_obj_attributes (bfd *ibfd, bfd *obfd) list = list->next) { in_attr = &list->attr; - switch (in_attr->type) + switch (in_attr->type & (ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL)) { - case 1: + case ATTR_TYPE_FLAG_INT_VAL: bfd_elf_add_obj_attr_int (obfd, vendor, list->tag, in_attr->i); break; - case 2: + case ATTR_TYPE_FLAG_STR_VAL: 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); + case ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL: + bfd_elf_add_obj_attr_int_string (obfd, vendor, list->tag, + in_attr->i, in_attr->s); break; default: abort (); @@ -440,7 +428,7 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr) bfd_vma len; const char *std_section; - contents = bfd_malloc (hdr->sh_size); + contents = (bfd_byte *) bfd_malloc (hdr->sh_size); if (!contents) return; if (!bfd_get_section_contents (abfd, hdr->bfd_section, contents, 0, @@ -506,21 +494,21 @@ _bfd_elf_parse_attributes (bfd *abfd, Elf_Internal_Shdr * hdr) tag = read_unsigned_leb128 (abfd, p, &n); p += n; type = _bfd_elf_obj_attrs_arg_type (abfd, vendor, tag); - switch (type) + switch (type & (ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL)) { - case 3: + case ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL: val = read_unsigned_leb128 (abfd, p, &n); p += n; - bfd_elf_add_obj_attr_compat (abfd, vendor, val, - (char *)p); + bfd_elf_add_obj_attr_int_string (abfd, vendor, tag, + val, (char *)p); p += strlen ((char *)p) + 1; break; - case 2: + case ATTR_TYPE_FLAG_STR_VAL: bfd_elf_add_obj_attr_string (abfd, vendor, tag, (char *)p); p += strlen ((char *)p) + 1; break; - case 1: + case ATTR_TYPE_FLAG_INT_VAL: val = read_unsigned_leb128 (abfd, p, &n); p += n; bfd_elf_add_obj_attr_int (abfd, vendor, tag, val); @@ -561,67 +549,35 @@ _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) + /* Handle Tag_compatibility. The tags are only compatible if the flags + are identical and, if the flags are '1', the strings are identical. + If the flags are non-zero, then we can only use the string "gnu". */ + in_attr = &elf_known_obj_attributes (ibfd)[vendor][Tag_compatibility]; + out_attr = &elf_known_obj_attributes (obfd)[vendor][Tag_compatibility]; + + if (in_attr->i > 0 && strcmp (in_attr->s, "gnu") != 0) { - 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"), + _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; - } + return FALSE; + } - /* 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; - } + if (in_attr->i != out_attr->i + || (in_attr->i != 0 && strcmp (in_attr->s, out_attr->s) != 0)) + { + _bfd_error_handler (_("error: %B: Object tag '%d, %s' is " + "incompatible with tag '%d, %s'"), + ibfd, + in_attr->i, in_attr->s ? in_attr->s : "", + out_attr->i, out_attr->s ? out_attr->s : ""); + return FALSE; } } diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index dffb83b..82c7c77 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -1,6 +1,7 @@ /* BFD back-end data structures for ELF files. Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -24,14 +25,17 @@ #define _LIBELF_H_ 1 #include "elf/common.h" -#include "elf/internal.h" #include "elf/external.h" +#include "elf/internal.h" #include "bfdlink.h" /* The number of entries in a section is its size divided by the size of a single entry. This is normally only applicable to reloc and - symbol table sections. */ -#define NUM_SHDR_ENTRIES(shdr) ((shdr)->sh_size / (shdr)->sh_entsize) + symbol table sections. + PR 9934: It is possible to have relocations that do not refer to + symbols, thus it is also possible to have a relocation section in + an object file, but no symbol table. */ +#define NUM_SHDR_ENTRIES(shdr) ((shdr)->sh_entsize > 0 ? (shdr)->sh_size / (shdr)->sh_entsize : 0) /* If size isn't specified as 64 or 32, NAME macro should fail. */ #ifndef NAME @@ -81,6 +85,27 @@ struct elf_strtab_hash; struct got_entry; struct plt_entry; +union gotplt_union + { + bfd_signed_vma refcount; + bfd_vma offset; + struct got_entry *glist; + struct plt_entry *plist; + }; + +struct elf_link_virtual_table_entry + { + /* Virtual table entry use information. This array is nominally of size + size/sizeof(target_void_pointer), though we have to be able to assume + and track a size while the symbol is still undefined. It is indexed + via offset/sizeof(target_void_pointer). */ + size_t size; + bfd_boolean *used; + + /* Virtual table derivation info. */ + struct elf_link_hash_entry *parent; + }; + /* ELF linker hash table entries. */ struct elf_link_hash_entry @@ -114,13 +139,7 @@ struct elf_link_hash_entry require a global offset table entry. The second scheme allows multiple GOT entries per symbol, managed via a linked list pointed to by GLIST. */ - union gotplt_union - { - bfd_signed_vma refcount; - bfd_vma offset; - struct got_entry *glist; - struct plt_entry *plist; - } got; + union gotplt_union got; /* Same, but tracks a procedure linkage table entry. */ union gotplt_union plt; @@ -134,7 +153,8 @@ struct elf_link_hash_entry /* Symbol st_other value, symbol visibility. */ unsigned int other : 8; - /* Symbol is referenced by a non-shared object. */ + /* Symbol is referenced by a non-shared object (other than the object + in which it is defined). */ unsigned int ref_regular : 1; /* Symbol is defined by a non-shared object. */ unsigned int def_regular : 1; @@ -142,7 +162,8 @@ struct elf_link_hash_entry unsigned int ref_dynamic : 1; /* Symbol is defined by a shared object. */ unsigned int def_dynamic : 1; - /* Symbol has a non-weak reference from a non-shared object. */ + /* Symbol has a non-weak reference from a non-shared object (other than + the object in which it is defined). */ unsigned int ref_regular_nonweak : 1; /* Dynamic symbol has been adjustd. */ unsigned int dynamic_adjusted : 1; @@ -172,6 +193,8 @@ struct elf_link_hash_entry /* Symbol is referenced with a relocation where C/C++ pointer equality matters. */ unsigned int pointer_equality_needed : 1; + /* Symbol is a unique global symbol. */ + unsigned int unique_global : 1; /* String table index in .dynstr if this is a dynamic symbol. */ unsigned long dynstr_index; @@ -202,18 +225,7 @@ struct elf_link_hash_entry struct bfd_elf_version_tree *vertree; } verinfo; - struct - { - /* Virtual table entry use information. This array is nominally of size - size/sizeof(target_void_pointer), though we have to be able to assume - and track a size while the symbol is still undefined. It is indexed - via offset/sizeof(target_void_pointer). */ - size_t size; - bfd_boolean *used; - - /* Virtual table derivation info. */ - struct elf_link_hash_entry *parent; - } *vtable; + struct elf_link_virtual_table_entry *vtable; }; /* Will references to this symbol always reference the symbol @@ -264,28 +276,87 @@ struct elf_link_loaded_list /* Structures used by the eh_frame optimization code. */ struct eh_cie_fde { - /* For FDEs, this points to the CIE used. */ - struct eh_cie_fde *cie_inf; + union { + struct { + /* If REMOVED == 1, this is the CIE that the FDE originally used. + The CIE belongs to the same .eh_frame input section as the FDE. + + If REMOVED == 0, this is the CIE that we have chosen to use for + the output FDE. The CIE's REMOVED field is also 0, but the CIE + might belong to a different .eh_frame input section from the FDE. */ + struct eh_cie_fde *cie_inf; + struct eh_cie_fde *next_for_section; + } fde; + struct { + /* CIEs have three states: + + - REMOVED && !MERGED: Slated for removal because we haven't yet + proven that an FDE needs it. FULL_CIE, if nonnull, points to + more detailed information about the CIE. + + - REMOVED && MERGED: We have merged this CIE with MERGED_WITH, + which may not belong to the same input section. + + - !REMOVED: We have decided to keep this CIE. SEC is the + .eh_frame input section that contains the CIE. */ + union { + struct cie *full_cie; + struct eh_cie_fde *merged_with; + asection *sec; + } u; + + /* True if we have marked relocations associated with this CIE. */ + unsigned int gc_mark : 1; + + /* True if we have decided to turn an absolute LSDA encoding into + a PC-relative one. */ + unsigned int make_lsda_relative : 1; + + /* True if the CIE contains personality data and if that data + uses a PC-relative encoding. */ + unsigned int per_encoding_relative : 1; + + /* True if we need to add an 'R' (FDE encoding) entry to the + CIE's augmentation data. */ + unsigned int add_fde_encoding : 1; + + /* True if we have merged this CIE with another. */ + unsigned int merged : 1; + } cie; + } u; + unsigned int reloc_index; unsigned int size; unsigned int offset; unsigned int new_offset; - unsigned char fde_encoding; - unsigned char lsda_encoding; - unsigned char lsda_offset; + unsigned int fde_encoding : 8; + unsigned int lsda_encoding : 8; + unsigned int lsda_offset : 8; + + /* True if this entry represents a CIE, false if it represents an FDE. */ unsigned int cie : 1; + + /* True if this entry is currently marked for removal. */ unsigned int removed : 1; + + /* True if we need to add a 'z' (augmentation size) entry to the CIE's + augmentation data, and an associated byte to each of the CIE's FDEs. */ unsigned int add_augmentation_size : 1; - unsigned int add_fde_encoding : 1; + + /* True if we have decided to convert absolute FDE relocations into + relative ones. This applies to the first relocation in the FDE, + which is against the code that the FDE describes. */ unsigned int make_relative : 1; - unsigned int make_lsda_relative : 1; - unsigned int need_lsda_relative : 1; - unsigned int per_encoding_relative : 1; + + /* Unused bits. */ + unsigned int pad1 : 4; + unsigned int *set_loc; }; struct eh_frame_sec_info { unsigned int count; + struct cie *cies; struct eh_cie_fde entry[1]; }; @@ -303,11 +374,14 @@ struct eh_frame_hdr_info asection *hdr_sec; unsigned int fde_count, array_count; struct eh_frame_array_ent *array; + /* TRUE if we should try to merge CIEs between input sections. */ + bfd_boolean merge_cies; + /* TRUE if all .eh_frames have been parsd. */ + bfd_boolean parsed_eh_frames; /* TRUE if .eh_frame_hdr should contain the sorted search table. We build it if we successfully read all .eh_frame input sections and recognize them. */ bfd_boolean table; - bfd_boolean offsets_adjusted; }; /* ELF linker hash table. */ @@ -391,6 +465,17 @@ struct elf_link_hash_table /* A linked list of BFD's loaded in the link. */ struct elf_link_loaded_list *loaded; + + /* Short-cuts to get to dynamic linker sections. */ + asection *sgot; + asection *sgotplt; + asection *srelgot; + asection *splt; + asection *srelplt; + asection *igotplt; + asection *iplt; + asection *irelplt; + asection *irelifunc; }; /* Look up an entry in an ELF linker hash table. */ @@ -416,14 +501,14 @@ struct elf_link_hash_table #define is_elf_hash_table(htab) \ (((struct bfd_link_hash_table *) (htab))->type == bfd_link_elf_hash_table) -/* Used by bfd_section_from_r_symndx to cache a small number of local - symbol to section mappings. */ +/* Used by bfd_sym_from_r_symndx to cache a small number of local + symbols. */ #define LOCAL_SYM_CACHE_SIZE 32 -struct sym_sec_cache +struct sym_cache { bfd *abfd; unsigned long indx[LOCAL_SYM_CACHE_SIZE]; - unsigned int shndx[LOCAL_SYM_CACHE_SIZE]; + Elf_Internal_Sym sym[LOCAL_SYM_CACHE_SIZE]; }; /* Constant information held for an ELF backend. */ @@ -532,7 +617,7 @@ struct bfd_elf_special_section PREFIX and finish with the last SUFFIX_LENGTH chars of PREFIX. */ int suffix_length; int type; - int attr; + bfd_vma attr; }; enum action_discarded @@ -679,8 +764,10 @@ struct elf_backend_data const char **name, flagword *flags, asection **sec, bfd_vma *value); /* If this field is not NULL, it is called by the elf_link_output_sym - phase of a link for each symbol which will appear in the object file. */ - bfd_boolean (*elf_backend_link_output_symbol_hook) + phase of a link for each symbol which will appear in the object file. + On error, this function returns 0. 1 is returned when the symbol + should be output, 2 is returned when the symbol should be discarded. */ + int (*elf_backend_link_output_symbol_hook) (struct bfd_link_info *info, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); @@ -700,6 +787,10 @@ struct elf_backend_data bfd_boolean (*elf_backend_omit_section_dynsym) (bfd *output_bfd, struct bfd_link_info *info, asection *osec); + /* Return TRUE if relocations of targets are compatible to the extent + that CHECK_RELOCS will properly process them. PR 4424. */ + bfd_boolean (*relocs_compatible) (const bfd_target *, const bfd_target *); + /* The CHECK_RELOCS function is called by the add_symbols phase of the ELF backend linker. It is called once for each section with relocs of an object file, just after the symbols for the object @@ -849,10 +940,15 @@ struct elf_backend_data bfd_boolean (*elf_backend_modify_program_headers) (bfd *, struct bfd_link_info *); + /* This function is called before section garbage collection to + mark entry symbol sections. */ + void (*gc_keep) + (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) - (struct elf_link_hash_entry *h, void *inf); + (struct elf_link_hash_entry *, void *); /* This function is called during section gc to discover the section a particular relocation refers to. */ @@ -861,14 +957,13 @@ struct elf_backend_data /* 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); + (struct bfd_link_info *, elf_gc_mark_hook_fn); /* This function, if defined, is called during the sweep phase of gc in order that a backend might update any data structures it might be maintaining. */ bfd_boolean (*gc_sweep_hook) - (bfd *abfd, struct bfd_link_info *info, asection *o, - const Elf_Internal_Rela *relocs); + (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); /* This function, if defined, is called after the ELF headers have been created. This allows for things like the OS and ABI versions @@ -923,6 +1018,11 @@ struct elf_backend_data (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, bfd_boolean); + /* This function, if defined, will return a string containing the + name of a target-specific dynamic tag. */ + char *(*elf_backend_get_target_dtag) + (bfd_vma); + /* Decide whether an undefined symbol is special and can be ignored. This is the case for OPTIONAL symbols on IRIX. */ bfd_boolean (*elf_backend_ignore_undef_symbol) @@ -937,7 +1037,7 @@ struct elf_backend_data /* Count relocations. Not called for relocatable links or if all relocs are being preserved in the output. */ unsigned int (*elf_backend_count_relocs) - (asection *, Elf_Internal_Rela *); + (struct bfd_link_info *, asection *); /* This function, if defined, is called when an NT_PRSTATUS note is found in a core file. */ @@ -953,12 +1053,6 @@ struct elf_backend_data 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); - void (* elf_backend_fprintf_vma) - (bfd *, void *, bfd_vma); - /* This function returns class of a reloc type. */ enum elf_reloc_type_class (*elf_backend_reloc_type_class) (const Elf_Internal_Rela *); @@ -1078,6 +1172,12 @@ struct elf_backend_data so-called reserved entries on some systems. */ bfd_vma got_header_size; + /* The size of the GOT entry for the symbol pointed to by H if non-NULL, + otherwise by the local symbol with index SYMNDX in IBFD. */ + bfd_vma (*got_elt_size) (bfd *, struct bfd_link_info *, + struct elf_link_hash_entry *h, + bfd *ibfd, unsigned long symndx); + /* The vendor name to use for a processor-standard attributes section. */ const char *obj_attrs_vendor; @@ -1091,6 +1191,12 @@ struct elf_backend_data /* The section type to use for an attributes section. */ unsigned int obj_attrs_section_type; + /* This function determines the order in which any attributes are written. + It must be defined for input in the range 4..NUM_KNOWN_OBJ_ATTRIBUTES-1 + (this range is used in order to make unity easy). The returned value is + the actual tag number to place in the input position. */ + int (*obj_attrs_order) (int); + /* 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 @@ -1120,6 +1226,9 @@ struct elf_backend_data section. */ unsigned default_use_rela_p : 1; + /* True if PLT and copy relocations should be RELA by default. */ + unsigned rela_plts_and_copies_p : 1; + /* Set if RELA relocations for a relocatable link can be handled by generic code. Backends that set this flag need do nothing in the backend relocate_section routine for relocatable linking. */ @@ -1225,6 +1334,10 @@ struct bfd_elf_section_data the linker. For the SHT_GROUP section, points at first member. */ asection *next_in_group; + /* The FDEs associated with this section. The u.fde.next_in_section + field acts as a chain pointer. */ + struct eh_cie_fde *fde_list; + /* A pointer used for various section optimizations. */ void *sec_info; }; @@ -1236,6 +1349,7 @@ struct bfd_elf_section_data #define elf_group_name(sec) (elf_section_data(sec)->group.name) #define elf_group_id(sec) (elf_section_data(sec)->group.id) #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group) +#define elf_fde_list(sec) (elf_section_data(sec)->fde_list) #define elf_sec_group(sec) (elf_section_data(sec)->sec_group) #define xvec_get_elf_backend_data(xvec) \ @@ -1244,55 +1358,23 @@ struct bfd_elf_section_data #define get_elf_backend_data(abfd) \ 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. */ - -struct elf_info_failed -{ - bfd_boolean failed; - struct bfd_link_info *info; - struct bfd_elf_version_tree *verdefs; -}; - -/* This structure is used to pass information to - _bfd_elf_link_assign_sym_version. */ - -struct elf_assign_sym_version_info -{ - /* Output BFD. */ - bfd *output_bfd; - /* General link information. */ - struct bfd_link_info *info; - /* Version tree. */ - struct bfd_elf_version_tree *verdefs; - /* Whether we had a failure. */ - bfd_boolean failed; -}; - -/* This structure is used to pass information to - _bfd_elf_link_find_version_dependencies. */ - -struct elf_find_verdep_info -{ - /* Output BFD. */ - bfd *output_bfd; - /* General link information. */ - struct bfd_link_info *info; - /* The number of dependencies. */ - unsigned int vers; - /* Whether we had a failure. */ - bfd_boolean failed; -}; - /* The maximum number of known object attributes for any target. */ -#define NUM_KNOWN_OBJ_ATTRIBUTES 32 +#define NUM_KNOWN_OBJ_ATTRIBUTES 71 -/* The value of an object attribute. type & 1 indicates whether there - is an integer value; type & 2 indicates whether there is a string - value. */ +/* The value of an object attribute. The type indicates whether the attribute + holds and integer, a string, or both. It can also indicate that there can + be no default (i.e. all values must be written to file, even zero). */ typedef struct obj_attribute { +#define ATTR_TYPE_FLAG_INT_VAL (1 << 0) +#define ATTR_TYPE_FLAG_STR_VAL (1 << 1) +#define ATTR_TYPE_FLAG_NO_DEFAULT (1 << 2) + +#define ATTR_TYPE_HAS_INT_VAL(TYPE) ((TYPE) & ATTR_TYPE_FLAG_INT_VAL) +#define ATTR_TYPE_HAS_STR_VAL(TYPE) ((TYPE) & ATTR_TYPE_FLAG_STR_VAL) +#define ATTR_TYPE_HAS_NO_DEFAULT(TYPE) ((TYPE) & ATTR_TYPE_FLAG_NO_DEFAULT) + int type; unsigned int i; char *s; @@ -1324,6 +1406,27 @@ enum Tag_compatibility = 32 }; +/* Enum used to identify target specific extensions to the elf_obj_tdata + structure. Note the enums deliberately start from 1 so that we can + detect an uninitialized field. The generic value is last so that + additions to this enum do not need to modify more than one line. */ +enum elf_object_id +{ + ALPHA_ELF_TDATA = 1, + ARM_ELF_TDATA, + HPPA_ELF_TDATA, + I386_ELF_TDATA, + MIPS_ELF_TDATA, + PPC32_ELF_TDATA, + PPC64_ELF_TDATA, + S390_ELF_TDATA, + SH_ELF_TDATA, + SPARC_ELF_TDATA, + X86_64_ELF_TDATA, + XTENSA_ELF_TDATA, + GENERIC_ELF_TDATA +}; + /* Some private data is stashed away for future use using the tdata pointer in the bfd structure. */ @@ -1428,9 +1531,6 @@ struct elf_obj_tdata /* Segment flags for the PT_GNU_STACK segment. */ unsigned int stack_flags; - /* Should the PT_GNU_RELRO segment be emitted? */ - bfd_boolean relro; - /* Symbol version definitions in external objects. */ Elf_Internal_Verdef *verdef; @@ -1444,6 +1544,9 @@ struct elf_obj_tdata asection *elf_data_section; asection *elf_text_section; + /* A pointer to the .eh_frame section. */ + asection *eh_frame_section; + /* Whether a dyanmic object was specified normally on the linker command line, or was specified when --as-needed was in effect, or was found via a DT_NEEDED entry. */ @@ -1472,19 +1575,38 @@ struct elf_obj_tdata /* Called at the end of _bfd_elf_write_object_contents if not NULL. */ bfd_boolean (*after_write_object_contents) (bfd *); void *after_write_object_contents_info; + + /* NT_GNU_BUILD_ID note type. */ + bfd_size_type build_id_size; + bfd_byte *build_id; + + /* True if the bfd contains symbols that have the STT_GNU_IFUNC + symbol type. Used to set the osabi field in the ELF header + structure. */ + bfd_boolean has_ifunc_symbols; + + /* An identifier used to distinguish different target + specific extensions to this structure. */ + enum elf_object_id object_id; }; #define elf_tdata(bfd) ((bfd) -> tdata.elf_obj_data) + +#define elf_object_id(bfd) (elf_tdata(bfd) -> object_id) +#define elf_program_header_size(bfd) (elf_tdata(bfd) -> program_header_size) #define elf_elfheader(bfd) (elf_tdata(bfd) -> elf_header) #define elf_elfsections(bfd) (elf_tdata(bfd) -> elf_sect_ptr) #define elf_numsections(bfd) (elf_tdata(bfd) -> num_elf_sections) #define elf_shstrtab(bfd) (elf_tdata(bfd) -> strtab_ptr) #define elf_onesymtab(bfd) (elf_tdata(bfd) -> symtab_section) #define elf_symtab_shndx(bfd) (elf_tdata(bfd) -> symtab_shndx_section) +#define elf_symtab_hdr(bfd) (elf_tdata(bfd) -> symtab_hdr) #define elf_dynsymtab(bfd) (elf_tdata(bfd) -> dynsymtab_section) #define elf_dynversym(bfd) (elf_tdata(bfd) -> dynversym_section) #define elf_dynverdef(bfd) (elf_tdata(bfd) -> dynverdef_section) #define elf_dynverref(bfd) (elf_tdata(bfd) -> dynverref_section) +#define elf_eh_frame_section(bfd) \ + (elf_tdata(bfd) -> eh_frame_section) #define elf_num_locals(bfd) (elf_tdata(bfd) -> num_locals) #define elf_num_globals(bfd) (elf_tdata(bfd) -> num_globals) #define elf_section_syms(bfd) (elf_tdata(bfd) -> section_syms) @@ -1529,12 +1651,10 @@ extern void _bfd_elf_swap_versym_in extern void _bfd_elf_swap_versym_out (bfd *, const Elf_Internal_Versym *, Elf_External_Versym *); -extern int _bfd_elf_section_from_bfd_section +extern unsigned int _bfd_elf_section_from_bfd_section (bfd *, asection *); extern char *bfd_elf_string_from_elf_section (bfd *, unsigned, unsigned); -extern char *bfd_elf_get_str_section - (bfd *, unsigned); extern Elf_Internal_Sym *bfd_elf_get_elf_syms (bfd *, Elf_Internal_Shdr *, size_t, size_t, Elf_Internal_Sym *, void *, Elf_External_Sym_Shndx *); @@ -1548,11 +1668,6 @@ extern bfd_boolean _bfd_elf_print_private_bfd_data extern void bfd_elf_print_symbol (bfd *, void *, asymbol *, bfd_print_symbol_type); -extern void _bfd_elf_sprintf_vma - (bfd *, char *, bfd_vma); -extern void _bfd_elf_fprintf_vma - (bfd *, void *, bfd_vma); - extern unsigned int _bfd_elf_eh_frame_address_size (bfd *, asection *); extern bfd_byte _bfd_elf_encode_eh_address @@ -1577,12 +1692,12 @@ extern unsigned long bfd_elf_gnu_hash extern bfd_reloc_status_type bfd_elf_generic_reloc (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); -extern bfd_boolean bfd_elf_mkobject +extern bfd_boolean bfd_elf_allocate_object + (bfd *, size_t, enum elf_object_id); +extern bfd_boolean bfd_elf_make_generic_object (bfd *); extern bfd_boolean bfd_elf_mkcorefile (bfd *); -extern Elf_Internal_Shdr *bfd_elf_find_section - (bfd *, char *); extern bfd_boolean _bfd_elf_make_section_from_shdr (bfd *, Elf_Internal_Shdr *, const char *, int); extern bfd_boolean _bfd_elf_make_section_from_phdr @@ -1649,6 +1764,10 @@ extern long _bfd_elf_get_reloc_upper_bound (bfd *, sec_ptr); extern long _bfd_elf_canonicalize_reloc (bfd *, sec_ptr, arelent **, asymbol **); +extern asection * _bfd_elf_get_dynamic_reloc_section + (bfd *, asection *, bfd_boolean); +extern asection * _bfd_elf_make_dynamic_reloc_section + (asection *, bfd *, unsigned int, bfd *, bfd_boolean); extern long _bfd_elf_get_dynamic_reloc_upper_bound (bfd *); extern long _bfd_elf_canonicalize_dynamic_reloc @@ -1696,8 +1815,8 @@ extern bfd_boolean bfd_section_from_phdr extern int _bfd_elf_symbol_from_bfd_symbol (bfd *, asymbol **); -extern asection *bfd_section_from_r_symndx - (bfd *, struct sym_sec_cache *, asection *, unsigned long); +extern Elf_Internal_Sym *bfd_sym_from_r_symndx + (struct sym_cache *, bfd *, unsigned long); extern asection *bfd_section_from_elf_index (bfd *, unsigned int); extern struct bfd_strtab_hash *_bfd_elf_stringtab_init @@ -1724,6 +1843,13 @@ extern bfd_boolean _bfd_elf_strtab_emit extern void _bfd_elf_strtab_finalize (struct elf_strtab_hash *); +extern void _bfd_elf_begin_eh_frame_parsing + (struct bfd_link_info *info); +extern void _bfd_elf_parse_eh_frame + (bfd *, struct bfd_link_info *, asection *, struct elf_reloc_cookie *); +extern void _bfd_elf_end_eh_frame_parsing + (struct bfd_link_info *info); + extern bfd_boolean _bfd_elf_discard_section_eh_frame (bfd *, struct bfd_link_info *, asection *, bfd_boolean (*) (bfd_vma, void *), struct elf_reloc_cookie *); @@ -1746,20 +1872,6 @@ extern bfd_boolean _bfd_elf_merge_symbol 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 *, - bfd_boolean *, bfd_boolean); - -extern bfd_boolean _bfd_elf_export_symbol - (struct elf_link_hash_entry *, void *); - -extern bfd_boolean _bfd_elf_link_find_version_dependencies - (struct elf_link_hash_entry *, void *); - -extern bfd_boolean _bfd_elf_link_assign_sym_version - (struct elf_link_hash_entry *, void *); - extern long _bfd_elf_link_lookup_local_dynindx (struct bfd_link_info *, bfd *, long); extern bfd_boolean _bfd_elf_compute_section_file_positions @@ -1795,43 +1907,21 @@ extern char *_bfd_elfcore_strndup extern Elf_Internal_Rela *_bfd_elf_link_read_relocs (bfd *, asection *, void *, Elf_Internal_Rela *, bfd_boolean); -extern bfd_boolean _bfd_elf_link_size_reloc_section - (bfd *, Elf_Internal_Shdr *, asection *); - extern bfd_boolean _bfd_elf_link_output_relocs (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *, struct elf_link_hash_entry **); -extern bfd_boolean _bfd_elf_fix_symbol_flags - (struct elf_link_hash_entry *, struct elf_info_failed *); - -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 *); - extern bfd_boolean _bfd_elf_dynamic_symbol_p (struct elf_link_hash_entry *, struct bfd_link_info *, bfd_boolean); 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 *, 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_reloc_status_type bfd_elf_perform_complex_relocation + (bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, bfd_vma); extern bfd_boolean _bfd_elf_setup_sections (bfd *); @@ -1926,6 +2016,12 @@ extern void bfd_elf64_write_relocs extern bfd_boolean bfd_elf64_slurp_reloc_table (bfd *, asection *, asymbol **, bfd_boolean); +extern bfd_boolean _bfd_elf_default_relocs_compatible + (const bfd_target *, const bfd_target *); + +extern bfd_boolean _bfd_elf_relocs_compatible + (const bfd_target *, const bfd_target *); + extern struct elf_link_hash_entry *_bfd_elf_archive_symbol_lookup (bfd *, struct bfd_link_info *, const char *); extern bfd_boolean bfd_elf_link_add_symbols @@ -1939,10 +2035,6 @@ 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 *); @@ -1958,6 +2050,10 @@ extern asection *_bfd_elf_common_section extern void _bfd_dwarf2_cleanup_debug_info (bfd *); +extern bfd_vma _bfd_elf_default_got_elt_size +(bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, bfd *, + unsigned long); + extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn (bfd *, arelent *, struct bfd_symbol *, void *, asection *, bfd *, char **); @@ -1965,6 +2061,9 @@ extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn extern bfd_boolean bfd_elf_final_link (bfd *, struct bfd_link_info *); +extern void _bfd_elf_gc_keep + (struct bfd_link_info *info); + extern bfd_boolean bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf); @@ -1981,10 +2080,20 @@ extern asection *_bfd_elf_gc_mark_hook (asection *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *, Elf_Internal_Sym *); +extern asection *_bfd_elf_gc_mark_rsec + (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn, + struct elf_reloc_cookie *); + +extern bfd_boolean _bfd_elf_gc_mark_reloc + (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn, + struct elf_reloc_cookie *); + +extern bfd_boolean _bfd_elf_gc_mark_fdes + (struct bfd_link_info *, asection *, asection *, elf_gc_mark_hook_fn, + struct elf_reloc_cookie *); + extern bfd_boolean _bfd_elf_gc_mark - (struct bfd_link_info *, asection *, - asection * (*) (asection *, struct bfd_link_info *, Elf_Internal_Rela *, - struct elf_link_hash_entry *, Elf_Internal_Sym *)); + (struct bfd_link_info *, asection *, elf_gc_mark_hook_fn); extern bfd_boolean bfd_elf_gc_common_finalize_got_offsets (bfd *, struct bfd_link_info *); @@ -2003,6 +2112,11 @@ extern bfd_boolean _bfd_elf_map_sections_to_segments extern bfd_boolean _bfd_elf_is_function_type (unsigned int); +extern int bfd_elf_get_default_section_type (flagword); + +extern Elf_Internal_Phdr * _bfd_elf_find_segment_containing_section + (bfd * abfd, asection * section); + /* Exported interface for writing elf corefile notes. */ extern char *elfcore_write_note (bfd *, char *, int *, const char *, int, const void *, int); @@ -2016,8 +2130,14 @@ extern char *elfcore_write_prfpreg (bfd *, char *, int *, const void *, int); extern char *elfcore_write_prxfpreg (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_vmx + (bfd *, char *, int *, const void *, int); +extern char *elfcore_write_ppc_vsx + (bfd *, char *, int *, const void *, int); extern char *elfcore_write_lwpstatus (bfd *, char *, int *, long, int, const void *); +extern char *elfcore_write_register_note + (bfd *, char *, int *, const char *, const void *, int); extern bfd *_bfd_elf32_bfd_from_remote_memory (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep, @@ -2035,10 +2155,11 @@ extern void bfd_elf_add_obj_attr_int (bfd *, int, int, unsigned int); 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 void bfd_elf_add_obj_attr_int_string (bfd *, int, int, unsigned int, + const char *); +#define bfd_elf_add_proc_attr_int_string(BFD, TAG, INTVAL, STRVAL) \ + bfd_elf_add_obj_attr_int_string ((BFD), OBJ_ATTR_PROC, (TAG), \ + (INTVAL), (STRVAL)) extern char *_bfd_elf_attr_strdup (bfd *, const char *); extern void _bfd_elf_copy_obj_attributes (bfd *, bfd *); @@ -2046,13 +2167,43 @@ 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 *); +/* The linker may needs to keep track of the number of relocs that it + decides to copy as dynamic relocs in check_relocs for each symbol. + This is so that it can later discard them if they are found to be + unnecessary. We can store the information in a field extending the + regular ELF linker hash table. */ + +struct elf_dyn_relocs +{ + struct elf_dyn_relocs *next; + + /* The input section of the reloc. */ + asection *sec; + + /* Total number of relocs copied for the input section. */ + bfd_size_type count; + + /* Number of pc-relative relocs copied for the input section. */ + bfd_size_type pc_count; +}; + +extern bfd_boolean _bfd_elf_create_ifunc_sections + (bfd *, struct bfd_link_info *); +extern asection * _bfd_elf_create_ifunc_dyn_reloc + (bfd *, struct bfd_link_info *, asection *sec, asection *sreloc, + struct elf_dyn_relocs **); +extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs + (struct bfd_link_info *, struct elf_link_hash_entry *, + struct elf_dyn_relocs **, unsigned int, unsigned int); + /* Large common section. */ extern asection _bfd_elf_large_com_section; -/* SH ELF specific routine. */ - -extern bfd_boolean _sh_elf_set_mach_from_flags - (bfd *); +/* Hash for local symbol with the first section id, ID, in the input + file and the local symbol index, SYM. */ +#define ELF_LOCAL_SYMBOL_HASH(ID, SYM) \ + (((((ID) & 0xff) << 24) | (((ID) & 0xff00) << 8)) \ + ^ (SYM) ^ ((ID) >> 16)) /* This is the condition under which finish_dynamic_symbol will be called. If our finish_dynamic_symbol isn't called, we'll need to do something diff --git a/bfd/elf-eh-frame.c b/bfd/elf-eh-frame.c index 473e890..5525d20 100644 --- a/bfd/elf-eh-frame.c +++ b/bfd/elf-eh-frame.c @@ -1,5 +1,5 @@ /* .eh_frame section optimization. - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Jakub Jelinek . @@ -24,7 +24,7 @@ #include "bfd.h" #include "libbfd.h" #include "elf-bfd.h" -#include "elf/dwarf2.h" +#include "dwarf2.h" #define EH_FRAME_HDR_SIZE 8 @@ -42,6 +42,7 @@ struct cie union { struct elf_link_hash_entry *h; bfd_vma val; + unsigned int reloc_index; } personality; asection *output_sec; struct eh_cie_fde *cie_inf; @@ -49,8 +50,7 @@ struct cie unsigned char lsda_encoding; unsigned char fde_encoding; unsigned char initial_insn_length; - unsigned char make_relative; - unsigned char make_lsda_relative; + unsigned char can_make_lsda_relative; unsigned char initial_instructions[50]; }; @@ -215,8 +215,8 @@ write_value (bfd *abfd, bfd_byte *buf, bfd_vma value, int width) static int cie_eq (const void *e1, const void *e2) { - const struct cie *c1 = e1; - const struct cie *c2 = e2; + const struct cie *c1 = (const struct cie *) e1; + const struct cie *c2 = (const struct cie *) e2; if (c1->hash == c2->hash && c1->length == c2->length @@ -246,7 +246,7 @@ cie_eq (const void *e1, const void *e2) static hashval_t cie_hash (const void *e) { - const struct cie *c = e; + const struct cie *c = (const struct cie *) e; return c->hash; } @@ -283,7 +283,7 @@ extra_augmentation_string_bytes (struct eh_cie_fde *entry) { if (entry->add_augmentation_size) size++; - if (entry->add_fde_encoding) + if (entry->u.cie.add_fde_encoding) size++; } return size; @@ -295,18 +295,10 @@ static INLINE unsigned int extra_augmentation_data_bytes (struct eh_cie_fde *entry) { unsigned int size = 0; - if (entry->cie) - { - if (entry->add_augmentation_size) - size++; - if (entry->add_fde_encoding) - size++; - } - else - { - if (entry->cie_inf->add_augmentation_size) - size++; - } + if (entry->add_augmentation_size) + size++; + if (entry->cie && entry->u.cie.add_fde_encoding) + size++; return size; } @@ -431,16 +423,25 @@ skip_non_nops (bfd_byte *buf, bfd_byte *end, unsigned int encoded_ptr_width, return last; } -/* This function is called for each input file before the .eh_frame - section is relocated. It discards duplicate CIEs and FDEs for discarded - functions. The function returns TRUE iff any entries have been - deleted. */ +/* Called before calling _bfd_elf_parse_eh_frame on every input bfd's + .eh_frame section. */ -bfd_boolean -_bfd_elf_discard_section_eh_frame - (bfd *abfd, struct bfd_link_info *info, asection *sec, - bfd_boolean (*reloc_symbol_deleted_p) (bfd_vma, void *), - struct elf_reloc_cookie *cookie) +void +_bfd_elf_begin_eh_frame_parsing (struct bfd_link_info *info) +{ + struct eh_frame_hdr_info *hdr_info; + + hdr_info = &elf_hash_table (info)->eh_info; + hdr_info->merge_cies = !info->relocatable; +} + +/* Try to parse .eh_frame section SEC, which belongs to ABFD. Store the + information in the section's sec_info field on success. COOKIE + describes the relocations in SEC. */ + +void +_bfd_elf_parse_eh_frame (bfd *abfd, struct bfd_link_info *info, + asection *sec, struct elf_reloc_cookie *cookie) { #define REQUIRE(COND) \ do \ @@ -448,45 +449,38 @@ _bfd_elf_discard_section_eh_frame goto free_no_table; \ while (0) - bfd_byte *ehbuf = NULL, *buf; + bfd_byte *ehbuf = NULL, *buf, *end; bfd_byte *last_fde; - struct eh_cie_fde *ent, *this_inf; + struct eh_cie_fde *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; + unsigned int cie_count; + struct cie *cie, *local_cies = NULL; struct elf_link_hash_table *htab; struct eh_frame_hdr_info *hdr_info; struct eh_frame_sec_info *sec_info = NULL; - unsigned int offset; unsigned int ptr_size; - unsigned int entry_alloced; + unsigned int num_cies; + unsigned int num_entries; + elf_gc_mark_hook_fn gc_mark_hook; + + htab = elf_hash_table (info); + hdr_info = &htab->eh_info; + if (hdr_info->parsed_eh_frames) + return; if (sec->size == 0) { /* This file does not contain .eh_frame information. */ - return FALSE; + return; } 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. */ - return FALSE; + return; } - 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)); @@ -497,7 +491,7 @@ _bfd_elf_discard_section_eh_frame { /* Empty .eh_frame section. */ free (ehbuf); - return FALSE; + return; } /* If .eh_frame section size doesn't fit into int, we cannot handle @@ -508,70 +502,87 @@ _bfd_elf_discard_section_eh_frame ->elf_backend_eh_frame_address_size (abfd, sec)); REQUIRE (ptr_size != 0); + /* Go through the section contents and work out how many FDEs and + CIEs there are. */ buf = ehbuf; - sec_info = bfd_zmalloc (sizeof (struct eh_frame_sec_info) - + 99 * sizeof (struct eh_cie_fde)); + end = ehbuf + sec->size; + num_cies = 0; + num_entries = 0; + while (buf != end) + { + num_entries++; + + /* Read the length of the entry. */ + REQUIRE (skip_bytes (&buf, end, 4)); + hdr_length = bfd_get_32 (abfd, buf - 4); + + /* 64-bit .eh_frame is not supported. */ + REQUIRE (hdr_length != 0xffffffff); + if (hdr_length == 0) + break; + + REQUIRE (skip_bytes (&buf, end, 4)); + hdr_id = bfd_get_32 (abfd, buf - 4); + if (hdr_id == 0) + num_cies++; + + REQUIRE (skip_bytes (&buf, end, hdr_length - 4)); + } + + sec_info = (struct eh_frame_sec_info *) + bfd_zmalloc (sizeof (struct eh_frame_sec_info) + + (num_entries - 1) * sizeof (struct eh_cie_fde)); REQUIRE (sec_info); - entry_alloced = 100; + /* We need to have a "struct cie" for each CIE in this section. */ + local_cies = (struct cie *) bfd_zmalloc (num_cies * sizeof (*local_cies)); + REQUIRE (local_cies); + /* FIXME: octets_per_byte. */ #define ENSURE_NO_RELOCS(buf) \ REQUIRE (!(cookie->rel < cookie->relend \ && (cookie->rel->r_offset \ < (bfd_size_type) ((buf) - ehbuf)) \ && cookie->rel->r_info != 0)) + /* FIXME: octets_per_byte. */ #define SKIP_RELOCS(buf) \ while (cookie->rel < cookie->relend \ && (cookie->rel->r_offset \ < (bfd_size_type) ((buf) - ehbuf))) \ cookie->rel++ + /* FIXME: octets_per_byte. */ #define GET_RELOC(buf) \ ((cookie->rel < cookie->relend \ && (cookie->rel->r_offset \ == (bfd_size_type) ((buf) - ehbuf))) \ ? cookie->rel : NULL) - for (;;) + buf = ehbuf; + cie_count = 0; + gc_mark_hook = get_elf_backend_data (abfd)->gc_mark_hook; + while ((bfd_size_type) (buf - ehbuf) != sec->size) { char *aug; - bfd_byte *start, *end, *insns, *insns_end; + bfd_byte *start, *insns, *insns_end; bfd_size_type length; unsigned int set_loc_count; - if (sec_info->count == entry_alloced) - { - sec_info = bfd_realloc (sec_info, - sizeof (struct eh_frame_sec_info) - + ((entry_alloced + 99) - * sizeof (struct eh_cie_fde))); - REQUIRE (sec_info); - - memset (&sec_info->entry[entry_alloced], 0, - 100 * sizeof (struct eh_cie_fde)); - entry_alloced += 100; - } - this_inf = sec_info->entry + sec_info->count; last_fde = buf; - if ((bfd_size_type) (buf - ehbuf) == sec->size) - break; - /* Read the length of the entry. */ REQUIRE (skip_bytes (&buf, ehbuf + sec->size, 4)); hdr_length = bfd_get_32 (abfd, buf - 4); - /* 64-bit .eh_frame is not supported. */ - REQUIRE (hdr_length != 0xffffffff); - /* 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; this_inf->offset = last_fde - ehbuf; this_inf->size = 4 + hdr_length; + this_inf->reloc_index = cookie->rel - cookie->rels; if (hdr_length == 0) { @@ -593,19 +604,12 @@ _bfd_elf_discard_section_eh_frame /* CIE */ this_inf->cie = 1; - if (ecie_count == ecie_alloced) - { - ecies = bfd_realloc (ecies, - (ecie_alloced + 20) * sizeof (*ecies)); - REQUIRE (ecies); - memset (&ecies[ecie_alloced], 0, 20 * sizeof (*ecies)); - ecie_alloced += 20; - } + /* Point CIE to one of the section-local cie structures. */ + cie = local_cies + cie_count++; - cie = &ecies[ecie_count].cie; - ecies[ecie_count].offset = this_inf->offset; - ecies[ecie_count++].entry = sec_info->count; + cie->cie_inf = this_inf; cie->length = hdr_length; + cie->output_sec = sec->output_section; start = buf; REQUIRE (read_byte (&buf, end, &cie->version)); @@ -678,63 +682,14 @@ _bfd_elf_discard_section_eh_frame } ENSURE_NO_RELOCS (buf); /* Ensure we have a reloc here. */ - if (GET_RELOC (buf) != NULL) - { - unsigned long r_symndx; - -#ifdef BFD64 - if (ptr_size == 8) - r_symndx = ELF64_R_SYM (cookie->rel->r_info); - else -#endif - r_symndx = ELF32_R_SYM (cookie->rel->r_info); - if (r_symndx >= cookie->locsymcount - || ELF_ST_BIND (cookie->locsyms[r_symndx] - .st_info) != STB_LOCAL) - { - struct elf_link_hash_entry *h; - - r_symndx -= cookie->extsymoff; - h = cookie->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; - - 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 (GET_RELOC (buf)); + cie->personality.reloc_index + = cookie->rel - cookie->rels; + /* 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: @@ -751,7 +706,7 @@ _bfd_elf_discard_section_eh_frame (abfd, info, sec))) { if ((cie->fde_encoding & 0xf0) == DW_EH_PE_absptr) - cie->make_relative = 1; + this_inf->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. */ @@ -760,8 +715,8 @@ _bfd_elf_discard_section_eh_frame { if (*cie->augmentation == 0) this_inf->add_augmentation_size = 1; - this_inf->add_fde_encoding = 1; - cie->make_relative = 1; + this_inf->u.cie.add_fde_encoding = 1; + this_inf->make_relative = 1; } } @@ -770,7 +725,7 @@ _bfd_elf_discard_section_eh_frame ->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->can_make_lsda_relative = 1; /* If FDE encoding was not specified, it defaults to DW_EH_absptr. */ @@ -786,46 +741,42 @@ _bfd_elf_discard_section_eh_frame insns = buf; buf += initial_insn_length; ENSURE_NO_RELOCS (buf); + + if (hdr_info->merge_cies) + this_inf->u.cie.u.full_cie = cie; + this_inf->u.cie.per_encoding_relative + = (cie->per_encoding & 0x70) == DW_EH_PE_pcrel; } else { + asection *rsec; + /* 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) + for (cie = local_cies; cie < local_cies + cie_count; cie++) + if (cie_offset == cie->cie_inf->offset) break; /* Ensure this FDE references one of the CIEs in this input section. */ - REQUIRE (ecie != ecies + ecie_count); - cie = &ecie->cie; + REQUIRE (cie != local_cies + cie_count); + this_inf->u.fde.cie_inf = cie->cie_inf; + this_inf->make_relative = cie->cie_inf->make_relative; + this_inf->add_augmentation_size + = cie->cie_inf->add_augmentation_size; ENSURE_NO_RELOCS (buf); REQUIRE (GET_RELOC (buf)); - if ((*reloc_symbol_deleted_p) (buf - ehbuf, cookie)) - /* This is a FDE against a discarded section. It should - be deleted. */ - this_inf->removed = 1; - else + /* Chain together the FDEs for each section. */ + rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie); + /* RSEC will be NULL if FDE was cleared out as it was belonging to + a discarded SHT_GROUP. */ + if (rsec) { - if (info->shared - && (((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); - } - ecie->usage_count++; - hdr_info->fde_count++; - this_inf->cie_inf = (void *) (ecie - ecies); + REQUIRE (rsec->owner == abfd); + this_inf->u.fde.next_for_section = elf_fde_list (rsec); + elf_fde_list (rsec) = this_inf; } /* Skip the initial location and address range. */ @@ -844,6 +795,9 @@ _bfd_elf_discard_section_eh_frame be adjusted if any future augmentations do the same thing. */ if (cie->lsda_encoding != DW_EH_PE_omit) { + SKIP_RELOCS (buf); + if (cie->can_make_lsda_relative && GET_RELOC (buf)) + cie->cie_inf->u.cie.make_lsda_relative = 1; this_inf->lsda_offset = buf - start; /* If there's no 'z' augmentation, we don't know where the CFA insns begin. Assume no padding. */ @@ -856,6 +810,16 @@ _bfd_elf_discard_section_eh_frame insns = buf; buf = last_fde + 4 + hdr_length; + + /* For NULL RSEC (cleared FDE belonging to a discarded section) + the relocations are commonly cleared. We do not sanity check if + all these relocations are cleared as (1) relocations to + .gcc_except_table will remain uncleared (they will get dropped + with the drop of this unused FDE) and (2) BFD already safely drops + relocations of any type to .eh_frame by + elf_section_ignore_discarded_relocs. + TODO: The .gcc_except_table entries should be also filtered as + .eh_frame entries; or GCC could rather use COMDAT for them. */ SKIP_RELOCS (buf); } @@ -880,13 +844,13 @@ _bfd_elf_discard_section_eh_frame } if (set_loc_count && ((cie->fde_encoding & 0xf0) == DW_EH_PE_pcrel - || cie->make_relative)) + || this_inf->make_relative)) { unsigned int cnt; bfd_byte *p; - this_inf->set_loc = bfd_malloc ((set_loc_count + 1) - * sizeof (unsigned int)); + this_inf->set_loc = (unsigned int *) + bfd_malloc ((set_loc_count + 1) * sizeof (unsigned int)); REQUIRE (this_inf->set_loc); this_inf->set_loc[0] = set_loc_count; p = insns; @@ -899,90 +863,292 @@ _bfd_elf_discard_section_eh_frame } } + this_inf->removed = 1; this_inf->fde_encoding = cie->fde_encoding; this_inf->lsda_encoding = cie->lsda_encoding; sec_info->count++; } + BFD_ASSERT (sec_info->count == num_entries); + BFD_ASSERT (cie_count == num_cies); elf_section_data (sec)->sec_info = sec_info; sec->sec_info_type = ELF_INFO_TYPE_EH_FRAME; + if (hdr_info->merge_cies) + { + sec_info->cies = local_cies; + local_cies = NULL; + } + goto success; + + free_no_table: + (*info->callbacks->einfo) + (_("%P: error in %B(%A); no .eh_frame_hdr table will be created.\n"), + abfd, sec); + hdr_info->table = FALSE; + if (sec_info) + free (sec_info); + success: + if (ehbuf) + free (ehbuf); + if (local_cies) + free (local_cies); +#undef REQUIRE +} + +/* Finish a pass over all .eh_frame sections. */ + +void +_bfd_elf_end_eh_frame_parsing (struct bfd_link_info *info) +{ + struct eh_frame_hdr_info *hdr_info; + + hdr_info = &elf_hash_table (info)->eh_info; + hdr_info->parsed_eh_frames = TRUE; +} + +/* Mark all relocations against CIE or FDE ENT, which occurs in + .eh_frame section SEC. COOKIE describes the relocations in SEC; + its "rel" field can be changed freely. */ + +static bfd_boolean +mark_entry (struct bfd_link_info *info, asection *sec, + struct eh_cie_fde *ent, elf_gc_mark_hook_fn gc_mark_hook, + struct elf_reloc_cookie *cookie) +{ + /* FIXME: octets_per_byte. */ + for (cookie->rel = cookie->rels + ent->reloc_index; + cookie->rel < cookie->relend + && cookie->rel->r_offset < ent->offset + ent->size; + cookie->rel++) + if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, cookie)) + return FALSE; - /* 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) + return TRUE; +} + +/* Mark all the relocations against FDEs that relate to code in input + section SEC. The FDEs belong to .eh_frame section EH_FRAME, whose + relocations are described by COOKIE. */ + +bfd_boolean +_bfd_elf_gc_mark_fdes (struct bfd_link_info *info, asection *sec, + asection *eh_frame, elf_gc_mark_hook_fn gc_mark_hook, + struct elf_reloc_cookie *cookie) +{ + struct eh_cie_fde *fde, *cie; + + for (fde = elf_fde_list (sec); fde; fde = fde->u.fde.next_for_section) { - if (ecie->usage_count == 0) + if (!mark_entry (info, eh_frame, fde, gc_mark_hook, cookie)) + return FALSE; + + /* At this stage, all cie_inf fields point to local CIEs, so we + can use the same cookie to refer to them. */ + cie = fde->u.fde.cie_inf; + if (!cie->u.cie.gc_mark) { - sec_info->entry[ecie->entry].removed = 1; - continue; + cie->u.cie.gc_mark = 1; + if (!mark_entry (info, eh_frame, cie, gc_mark_hook, cookie)) + return FALSE; } - 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) + } + return TRUE; +} + +/* Input section SEC of ABFD is an .eh_frame section that contains the + CIE described by CIE_INF. Return a version of CIE_INF that is going + to be kept in the output, adding CIE_INF to the output if necessary. + + HDR_INFO is the .eh_frame_hdr information and COOKIE describes the + relocations in REL. */ + +static struct eh_cie_fde * +find_merged_cie (bfd *abfd, asection *sec, + struct eh_frame_hdr_info *hdr_info, + struct elf_reloc_cookie *cookie, + struct eh_cie_fde *cie_inf) +{ + unsigned long r_symndx; + struct cie *cie, *new_cie; + Elf_Internal_Rela *rel; + void **loc; + + /* Use CIE_INF if we have already decided to keep it. */ + if (!cie_inf->removed) + return cie_inf; + + /* If we have merged CIE_INF with another CIE, use that CIE instead. */ + if (cie_inf->u.cie.merged) + return cie_inf->u.cie.u.merged_with; + + cie = cie_inf->u.cie.u.full_cie; + + /* Assume we will need to keep CIE_INF. */ + cie_inf->removed = 0; + cie_inf->u.cie.u.sec = sec; + + /* If we are not merging CIEs, use CIE_INF. */ + if (cie == NULL) + return cie_inf; + + if (cie->per_encoding != DW_EH_PE_omit) + { + /* Work out the address of personality routine, either as an absolute + value or as a symbol. */ + rel = cookie->rels + cie->personality.reloc_index; + memset (&cie->personality, 0, sizeof (cie->personality)); +#ifdef BFD64 + if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64) + r_symndx = ELF64_R_SYM (rel->r_info); + else +#endif + r_symndx = ELF32_R_SYM (rel->r_info); + if (r_symndx >= cookie->locsymcount + || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL) { - 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; - } + struct elf_link_hash_entry *h; - *loc = malloc (sizeof (struct cie)); - if (*loc == NULL) - *loc = HTAB_DELETED_ENTRY; - else - memcpy (*loc, &ecie->cie, sizeof (struct cie)); - } + r_symndx -= cookie->extsymoff; + h = cookie->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; + + cie->personality.h = h; + } + else + { + Elf_Internal_Sym *sym; + asection *sym_sec; + + sym = &cookie->locsyms[r_symndx]; + sym_sec = bfd_section_from_elf_index (abfd, sym->st_shndx); + if (sym_sec == NULL) + return cie_inf; + + if (sym_sec->kept_section != NULL) + sym_sec = sym_sec->kept_section; + if (sym_sec->output_section == NULL) + return cie_inf; + + cie->local_personality = 1; + cie->personality.val = (sym->st_value + + sym_sec->output_offset + + sym_sec->output_section->vma); } - 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; + /* See if we can merge this CIE with an earlier one. */ + cie->output_sec = sec->output_section; + cie_compute_hash (cie); + if (hdr_info->cies == NULL) + { + hdr_info->cies = htab_try_create (1, cie_hash, cie_eq, free); + if (hdr_info->cies == NULL) + return cie_inf; + } + loc = htab_find_slot_with_hash (hdr_info->cies, cie, cie->hash, INSERT); + if (loc == NULL) + return cie_inf; + + new_cie = (struct cie *) *loc; + if (new_cie == NULL) + { + /* Keep CIE_INF and record it in the hash table. */ + new_cie = (struct cie *) malloc (sizeof (struct cie)); + if (new_cie == NULL) + return cie_inf; + + memcpy (new_cie, cie, sizeof (struct cie)); + *loc = new_cie; + } + else + { + /* Merge CIE_INF with NEW_CIE->CIE_INF. */ + cie_inf->removed = 1; + cie_inf->u.cie.merged = 1; + cie_inf->u.cie.u.merged_with = new_cie->cie_inf; + if (cie_inf->u.cie.make_lsda_relative) + new_cie->cie_inf->u.cie.make_lsda_relative = 1; + } + return new_cie->cie_inf; +} + +/* This function is called for each input file before the .eh_frame + section is relocated. It discards duplicate CIEs and FDEs for discarded + functions. The function returns TRUE iff any entries have been + deleted. */ + +bfd_boolean +_bfd_elf_discard_section_eh_frame + (bfd *abfd, struct bfd_link_info *info, asection *sec, + bfd_boolean (*reloc_symbol_deleted_p) (bfd_vma, void *), + struct elf_reloc_cookie *cookie) +{ + struct eh_cie_fde *ent; + struct eh_frame_sec_info *sec_info; + struct eh_frame_hdr_info *hdr_info; + unsigned int ptr_size, offset; + + sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info; + if (sec_info == NULL) + return FALSE; + + hdr_info = &elf_hash_table (info)->eh_info; for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent) - if (!ent->removed) + if (ent->size == 4) + /* There should only be one zero terminator, on the last input + file supplying .eh_frame (crtend.o). Remove any others. */ + ent->removed = sec->map_head.s != NULL; + else if (!ent->cie) { - if (!ent->cie) + cookie->rel = cookie->rels + ent->reloc_index; + /* FIXME: octets_per_byte. */ + BFD_ASSERT (cookie->rel < cookie->relend + && cookie->rel->r_offset == ent->offset + 8); + if (!(*reloc_symbol_deleted_p) (ent->offset + 8, cookie)) { - ecie = ecies + (bfd_hostptr_t) ent->cie_inf; - ent->cie_inf = ecie->cie.cie_inf; + if (info->shared + && (((ent->fde_encoding & 0xf0) == DW_EH_PE_absptr + && ent->make_relative == 0) + || (ent->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); + } + ent->removed = 0; + hdr_info->fde_count++; + ent->u.fde.cie_inf = find_merged_cie (abfd, sec, hdr_info, cookie, + ent->u.fde.cie_inf); } + } + + if (sec_info->cies) + { + free (sec_info->cies); + sec_info->cies = NULL; + } + + ptr_size = (get_elf_backend_data (sec->owner) + ->elf_backend_eh_frame_address_size (sec->owner, sec)); + offset = 0; + for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent) + if (!ent->removed) + { ent->new_offset = offset; offset += size_of_output_cie_fde (ent, ptr_size); } - /* Resize the sec as needed. */ sec->rawsize = sec->size; sec->size = offset; - - 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; - return FALSE; - -#undef REQUIRE } /* This function is called for .eh_frame_hdr section after @@ -1081,15 +1247,13 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME) return offset; - sec_info = elf_section_data (sec)->sec_info; + sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info; if (offset >= sec->rawsize) return offset - sec->rawsize + sec->size; htab = elf_hash_table (info); hdr_info = &htab->eh_info; - if (hdr_info->offsets_adjusted) - offset += sec->output_offset; lo = 0; hi = sec_info->count; @@ -1115,29 +1279,22 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, /* If converting to DW_EH_PE_pcrel, there will be no need for run-time relocation against FDE's initial_location field. */ if (!sec_info->entry[mid].cie - && sec_info->entry[mid].cie_inf->make_relative + && sec_info->entry[mid].make_relative && offset == sec_info->entry[mid].offset + 8) return (bfd_vma) -2; /* If converting LSDA pointers to DW_EH_PE_pcrel, there will be no need for run-time relocation against LSDA field. */ if (!sec_info->entry[mid].cie - && sec_info->entry[mid].cie_inf->make_lsda_relative - && (offset == (sec_info->entry[mid].offset + 8 - + sec_info->entry[mid].lsda_offset)) - && (sec_info->entry[mid].cie_inf->need_lsda_relative - || !hdr_info->offsets_adjusted)) - { - sec_info->entry[mid].cie_inf->need_lsda_relative = 1; - return (bfd_vma) -2; - } + && sec_info->entry[mid].u.fde.cie_inf->u.cie.make_lsda_relative + && offset == (sec_info->entry[mid].offset + 8 + + sec_info->entry[mid].lsda_offset)) + 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) + && sec_info->entry[mid].make_relative && (offset >= sec_info->entry[mid].offset + 8 + sec_info->entry[mid].set_loc[1])) { @@ -1149,8 +1306,6 @@ _bfd_elf_eh_frame_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, return (bfd_vma) -2; } - if (hdr_info->offsets_adjusted) - offset -= sec->output_offset; /* Any new augmentation bytes go before the first relocation. */ return (offset + sec_info->entry[mid].new_offset - sec_info->entry[mid].offset @@ -1174,6 +1329,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, struct eh_cie_fde *ent; if (sec->sec_info_type != ELF_INFO_TYPE_EH_FRAME) + /* FIXME: octets_per_byte. */ return bfd_set_section_contents (abfd, sec->output_section, contents, sec->output_offset, sec->size); @@ -1181,45 +1337,13 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, ->elf_backend_eh_frame_address_size (abfd, sec)); BFD_ASSERT (ptr_size != 0); - sec_info = elf_section_data (sec)->sec_info; + sec_info = (struct eh_frame_sec_info *) elf_section_data (sec)->sec_info; htab = elf_hash_table (info); hdr_info = &htab->eh_info; - /* First convert all offsets to output section offsets, so that a - CIE offset is valid if the CIE is used by a FDE from some other - section. This can happen when duplicate CIEs are deleted in - _bfd_elf_discard_section_eh_frame. We do all sections here because - this function might not be called on sections in the same order as - _bfd_elf_discard_section_eh_frame. */ - if (!hdr_info->offsets_adjusted) - { - bfd *ibfd; - asection *eh; - struct eh_frame_sec_info *eh_inf; - - for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) - { - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || (ibfd->flags & DYNAMIC) != 0) - continue; - - eh = bfd_get_section_by_name (ibfd, ".eh_frame"); - if (eh == NULL || eh->sec_info_type != ELF_INFO_TYPE_EH_FRAME) - continue; - - eh_inf = elf_section_data (eh)->sec_info; - for (ent = eh_inf->entry; ent < eh_inf->entry + eh_inf->count; ++ent) - { - ent->offset += eh->output_offset; - ent->new_offset += eh->output_offset; - } - } - hdr_info->offsets_adjusted = TRUE; - } - if (hdr_info->table && hdr_info->array == NULL) - hdr_info->array - = bfd_malloc (hdr_info->fde_count * sizeof(*hdr_info->array)); + hdr_info->array = (struct eh_frame_array_ent *) + bfd_malloc (hdr_info->fde_count * sizeof(*hdr_info->array)); if (hdr_info->array == NULL) hdr_info = NULL; @@ -1230,13 +1354,11 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, not reordered */ for (ent = sec_info->entry + sec_info->count; ent-- != sec_info->entry;) if (!ent->removed && ent->new_offset > ent->offset) - memmove (contents + ent->new_offset - sec->output_offset, - contents + ent->offset - sec->output_offset, ent->size); + memmove (contents + ent->new_offset, contents + ent->offset, ent->size); for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent) if (!ent->removed && ent->new_offset < ent->offset) - memmove (contents + ent->new_offset - sec->output_offset, - contents + ent->offset - sec->output_offset, ent->size); + memmove (contents + ent->new_offset, contents + ent->offset, ent->size); for (ent = sec_info->entry; ent < sec_info->entry + sec_info->count; ++ent) { @@ -1253,7 +1375,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, continue; } - buf = contents + ent->new_offset - sec->output_offset; + buf = contents + ent->new_offset; end = buf + ent->size; new_size = size_of_output_cie_fde (ent, ptr_size); @@ -1268,8 +1390,8 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, { /* CIE */ if (ent->make_relative - || ent->need_lsda_relative - || ent->per_encoding_relative) + || ent->u.cie.make_lsda_relative + || ent->u.cie.per_encoding_relative) { char *aug; unsigned int action, extra_string, extra_data; @@ -1278,8 +1400,8 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, /* Need to find 'R' or 'L' augmentation's argument and modify DW_EH_PE_* value. */ action = ((ent->make_relative ? 1 : 0) - | (ent->need_lsda_relative ? 2 : 0) - | (ent->per_encoding_relative ? 4 : 0)); + | (ent->u.cie.make_lsda_relative ? 2 : 0) + | (ent->u.cie.per_encoding_relative ? 4 : 0)); extra_string = extra_augmentation_string_bytes (ent); extra_data = extra_augmentation_data_bytes (ent); @@ -1309,7 +1431,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, *aug++ = 'z'; *buf++ = extra_data - 1; } - if (ent->add_fde_encoding) + if (ent->u.cie.add_fde_encoding) { BFD_ASSERT (action & 1); *aug++ = 'R'; @@ -1334,7 +1456,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, per_width = get_DW_EH_PE_width (per_encoding, ptr_size); BFD_ASSERT (per_width != 0); BFD_ASSERT (((per_encoding & 0x70) == DW_EH_PE_pcrel) - == ent->per_encoding_relative); + == ent->u.cie.per_encoding_relative); if ((per_encoding & 0xf0) == DW_EH_PE_aligned) buf = (contents + ((buf - contents + per_width - 1) @@ -1345,7 +1467,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, val = read_value (abfd, buf, per_width, get_DW_EH_PE_signed (per_encoding)); - val += ent->offset - ent->new_offset; + val += (bfd_vma) ent->offset - ent->new_offset; val -= extra_string + extra_data; write_value (abfd, buf, val, per_width); action &= ~4; @@ -1374,10 +1496,13 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, bfd_vma value, address; unsigned int width; bfd_byte *start; + struct eh_cie_fde *cie; /* Skip length. */ + cie = ent->u.fde.cie_inf; buf += 4; - value = ent->new_offset + 4 - ent->cie_inf->new_offset; + value = ((ent->new_offset + sec->output_offset + 4) + - (cie->new_offset + cie->u.cie.u.sec->output_offset)); bfd_put_32 (abfd, value, buf); buf += 4; width = get_DW_EH_PE_width (ent->fde_encoding, ptr_size); @@ -1401,12 +1526,16 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, } break; case DW_EH_PE_pcrel: - value += ent->offset - ent->new_offset; - address += sec->output_section->vma + ent->offset + 8; + value += (bfd_vma) ent->offset - ent->new_offset; + address += (sec->output_section->vma + + sec->output_offset + + ent->offset + 8); break; } - if (ent->cie_inf->make_relative) - value -= sec->output_section->vma + ent->new_offset + 8; + if (ent->make_relative) + value -= (sec->output_section->vma + + sec->output_offset + + ent->new_offset + 8); write_value (abfd, buf, value, width); } @@ -1416,11 +1545,13 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, { hdr_info->array[hdr_info->array_count].initial_loc = address; hdr_info->array[hdr_info->array_count++].fde - = sec->output_section->vma + ent->new_offset; + = (sec->output_section->vma + + sec->output_offset + + ent->new_offset); } if ((ent->lsda_encoding & 0xf0) == DW_EH_PE_pcrel - || ent->cie_inf->need_lsda_relative) + || cie->u.cie.make_lsda_relative) { buf += ent->lsda_offset; width = get_DW_EH_PE_width (ent->lsda_encoding, ptr_size); @@ -1429,14 +1560,15 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, if (value) { if ((ent->lsda_encoding & 0xf0) == DW_EH_PE_pcrel) - value += ent->offset - ent->new_offset; - else if (ent->cie_inf->need_lsda_relative) - value -= (sec->output_section->vma + ent->new_offset + 8 - + ent->lsda_offset); + value += (bfd_vma) ent->offset - ent->new_offset; + else if (cie->u.cie.make_lsda_relative) + value -= (sec->output_section->vma + + sec->output_offset + + ent->new_offset + 8 + ent->lsda_offset); write_value (abfd, buf, value, width); } } - else if (ent->cie_inf->add_augmentation_size) + else if (ent->add_augmentation_size) { /* Skip the PC and length and insert a zero byte for the augmentation size. */ @@ -1467,10 +1599,11 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, 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]; + value += (bfd_vma) ent->offset + 8 - new_offset; + if (ent->make_relative) + value -= (sec->output_section->vma + + sec->output_offset + + new_offset + ent->set_loc[cnt]); write_value (abfd, buf, value, width); } } @@ -1485,6 +1618,7 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, if ((sec->size % ptr_size) != 0) abort (); + /* FIXME: octets_per_byte. */ return bfd_set_section_contents (abfd, sec->output_section, contents, (file_ptr) sec->output_offset, sec->size); @@ -1496,8 +1630,8 @@ _bfd_elf_write_section_eh_frame (bfd *abfd, static int vma_compare (const void *a, const void *b) { - const struct eh_frame_array_ent *p = a; - const struct eh_frame_array_ent *q = b; + const struct eh_frame_array_ent *p = (const struct eh_frame_array_ent *) a; + const struct eh_frame_array_ent *q = (const struct eh_frame_array_ent *) b; if (p->initial_loc > q->initial_loc) return 1; if (p->initial_loc < q->initial_loc) @@ -1548,7 +1682,7 @@ _bfd_elf_write_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info) size = EH_FRAME_HDR_SIZE; if (hdr_info->array && hdr_info->array_count == hdr_info->fde_count) size += 4 + hdr_info->fde_count * 8; - contents = bfd_malloc (size); + contents = (bfd_byte *) bfd_malloc (size); if (contents == NULL) return FALSE; @@ -1596,6 +1730,7 @@ _bfd_elf_write_section_eh_frame_hdr (bfd *abfd, struct bfd_link_info *info) } } + /* FIXME: octets_per_byte. */ retval = bfd_set_section_contents (abfd, sec->output_section, contents, (file_ptr) sec->output_offset, sec->size); diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h index dfe692f..51a9484 100644 --- a/bfd/elf-hppa.h +++ b/bfd/elf-hppa.h @@ -1,5 +1,5 @@ /* Common code for PA ELF implementations. - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -745,6 +745,17 @@ elf_hppa_reloc_final_type (bfd *abfd, } break; + case 64: + switch (field) + { + case e_fsel: + final_type = R_PARISC_GPREL64; + break; + default: + return R_PARISC_NONE; + } + break; + default: return R_PARISC_NONE; } @@ -930,9 +941,38 @@ elf_hppa_reloc_final_type (bfd *abfd, } break; + case R_PARISC_SEGREL32: + switch (format) + { + case 32: + switch (field) + { + case e_fsel: + final_type = R_PARISC_SEGREL32; + break; + default: + return R_PARISC_NONE; + } + break; + + case 64: + switch (field) + { + case e_fsel: + final_type = R_PARISC_SEGREL64; + break; + default: + return R_PARISC_NONE; + } + break; + + default: + return R_PARISC_NONE; + } + break; + case R_PARISC_GNU_VTENTRY: case R_PARISC_GNU_VTINHERIT: - case R_PARISC_SEGREL32: case R_PARISC_SEGBASE: /* The defaults are fine for these cases. */ break; @@ -1178,1131 +1218,3 @@ elf_hppa_action_discarded (asection *sec) return _bfd_elf_default_action_discarded (sec); } - -#if ARCH_SIZE == 64 -/* Hook called by the linker routine which adds symbols from an object - file. HP's libraries define symbols with HP specific section - indices, which we have to handle. */ - -static bfd_boolean -elf_hppa_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) -{ - int index = sym->st_shndx; - - switch (index) - { - case SHN_PARISC_ANSI_COMMON: - *secp = bfd_make_section_old_way (abfd, ".PARISC.ansi.common"); - (*secp)->flags |= SEC_IS_COMMON; - *valp = sym->st_size; - break; - - case SHN_PARISC_HUGE_COMMON: - *secp = bfd_make_section_old_way (abfd, ".PARISC.huge.common"); - (*secp)->flags |= SEC_IS_COMMON; - *valp = sym->st_size; - break; - } - - return TRUE; -} - -static bfd_boolean -elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h, - void *data) -{ - struct bfd_link_info *info = data; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* If we are not creating a shared library, and this symbol is - referenced by a shared library but is not defined anywhere, then - the generic code will warn that it is undefined. - - This behavior is undesirable on HPs since the standard shared - libraries contain references to undefined symbols. - - So we twiddle the flags associated with such symbols so that they - will not trigger the warning. ?!? FIXME. This is horribly fragile. - - Ultimately we should have better controls over the generic ELF BFD - linker code. */ - if (! info->relocatable - && info->unresolved_syms_in_shared_libs != RM_IGNORE - && h->root.type == bfd_link_hash_undefined - && h->ref_dynamic - && !h->ref_regular) - { - h->ref_dynamic = 0; - h->pointer_equality_needed = 1; - } - - return TRUE; -} - -static bfd_boolean -elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h, - void *data) -{ - struct bfd_link_info *info = data; - - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; - - /* If we are not creating a shared library, and this symbol is - referenced by a shared library but is not defined anywhere, then - the generic code will warn that it is undefined. - - This behavior is undesirable on HPs since the standard shared - libraries contain references to undefined symbols. - - So we twiddle the flags associated with such symbols so that they - will not trigger the warning. ?!? FIXME. This is horribly fragile. - - Ultimately we should have better controls over the generic ELF BFD - linker code. */ - if (! info->relocatable - && info->unresolved_syms_in_shared_libs != RM_IGNORE - && h->root.type == bfd_link_hash_undefined - && !h->ref_dynamic - && !h->ref_regular - && h->pointer_equality_needed) - { - h->ref_dynamic = 1; - h->pointer_equality_needed = 0; - } - - return TRUE; -} - -static bfd_boolean -elf_hppa_is_dynamic_loader_symbol (const char *name) -{ - return (! strcmp (name, "__CPU_REVISION") - || ! strcmp (name, "__CPU_KEYBITS_1") - || ! strcmp (name, "__SYSTEM_ID_D") - || ! strcmp (name, "__FPU_MODEL") - || ! strcmp (name, "__FPU_REVISION") - || ! strcmp (name, "__ARGC") - || ! strcmp (name, "__ARGV") - || ! strcmp (name, "__ENVP") - || ! strcmp (name, "__TLS_SIZE_D") - || ! strcmp (name, "__LOAD_INFO") - || ! strcmp (name, "__systab")); -} - -/* Record the lowest address for the data and text segments. */ -static void -elf_hppa_record_segment_addrs (bfd *abfd ATTRIBUTE_UNUSED, - asection *section, - void *data) -{ - struct elf64_hppa_link_hash_table *hppa_info; - bfd_vma value; - - hppa_info = data; - - value = section->vma - section->filepos; - - if (((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) - == (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) - && value < hppa_info->text_segment_base) - hppa_info->text_segment_base = value; - else if (((section->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) - == (SEC_ALLOC | SEC_LOAD)) - && value < hppa_info->data_segment_base) - hppa_info->data_segment_base = value; -} - -/* Called after we have seen all the input files/sections, but before - final symbol resolution and section placement has been determined. - - We use this hook to (possibly) provide a value for __gp, then we - fall back to the generic ELF final link routine. */ - -static bfd_boolean -elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info) -{ - bfd_boolean retval; - struct elf64_hppa_link_hash_table *hppa_info = elf64_hppa_hash_table (info); - - if (! info->relocatable) - { - struct elf_link_hash_entry *gp; - bfd_vma gp_val; - - /* The linker script defines a value for __gp iff it was referenced - by one of the objects being linked. First try to find the symbol - in the hash table. If that fails, just compute the value __gp - should have had. */ - gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE, - FALSE, FALSE); - - if (gp) - { - - /* Adjust the value of __gp as we may want to slide it into the - .plt section so that the stubs can access PLT entries without - using an addil sequence. */ - gp->root.u.def.value += hppa_info->gp_offset; - - gp_val = (gp->root.u.def.section->output_section->vma - + gp->root.u.def.section->output_offset - + gp->root.u.def.value); - } - else - { - asection *sec; - - /* First look for a .plt section. If found, then __gp is the - address of the .plt + gp_offset. - - If no .plt is found, then look for .dlt, .opd and .data (in - that order) and set __gp to the base address of whichever - section is found first. */ - - sec = hppa_info->plt_sec; - if (sec && ! (sec->flags & SEC_EXCLUDE)) - gp_val = (sec->output_offset - + sec->output_section->vma - + hppa_info->gp_offset); - else - { - sec = hppa_info->dlt_sec; - if (!sec || (sec->flags & SEC_EXCLUDE)) - sec = hppa_info->opd_sec; - if (!sec || (sec->flags & SEC_EXCLUDE)) - sec = bfd_get_section_by_name (abfd, ".data"); - if (!sec || (sec->flags & SEC_EXCLUDE)) - gp_val = 0; - else - gp_val = sec->output_offset + sec->output_section->vma; - } - } - - /* Install whatever value we found/computed for __gp. */ - _bfd_set_gp_value (abfd, gp_val); - } - - /* We need to know the base of the text and data segments so that we - can perform SEGREL relocations. We will record the base addresses - when we encounter the first SEGREL relocation. */ - hppa_info->text_segment_base = (bfd_vma)-1; - hppa_info->data_segment_base = (bfd_vma)-1; - - /* HP's shared libraries have references to symbols that are not - defined anywhere. The generic ELF BFD linker code will complain - about such symbols. - - So we detect the losing case and arrange for the flags on the symbol - to indicate that it was never referenced. This keeps the generic - ELF BFD link code happy and appears to not create any secondary - problems. Ultimately we need a way to control the behavior of the - generic ELF BFD link code better. */ - elf_link_hash_traverse (elf_hash_table (info), - elf_hppa_unmark_useless_dynamic_symbols, - info); - - /* Invoke the regular ELF backend linker to do all the work. */ - retval = bfd_elf_final_link (abfd, info); - - elf_link_hash_traverse (elf_hash_table (info), - elf_hppa_remark_useless_dynamic_symbols, - info); - - /* If we're producing a final executable, sort the contents of the - unwind section. */ - if (retval) - retval = elf_hppa_sort_unwind (abfd); - - return retval; -} - -/* 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 int -elf_hppa_relocate_insn (int insn, int sym_value, unsigned int r_type) -{ - switch (r_type) - { - /* 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); - - /* This is any 12 bit branch. */ - case R_PARISC_PCREL12F: - return (insn & ~0x1ffd) | re_assemble_12 (sym_value); - - /* 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); - - /* 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); - - /* 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); - - /* 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); - - /* 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)); - - /* 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)); - - default: - return insn; - } -} - -/* Compute the value for a relocation (REL) during a final link stage, - then insert the value into the proper location in CONTENTS. - - VALUE is a tentative value for the relocation and may be overridden - and modified here based on the specific relocation to be performed. - - For example we do conversions for PC-relative branches in this routine - or redirection of calls to external routines to stubs. - - The work of actually applying the relocation is left to a helper - routine in an attempt to reduce the complexity and size of this - function. */ - -static bfd_reloc_status_type -elf_hppa_final_link_relocate (Elf_Internal_Rela *rel, - bfd *input_bfd, - bfd *output_bfd, - asection *input_section, - bfd_byte *contents, - bfd_vma value, - struct bfd_link_info *info, - asection *sym_sec, - struct elf_link_hash_entry *h ATTRIBUTE_UNUSED, - struct elf64_hppa_dyn_hash_entry *dyn_h) -{ - int insn; - bfd_vma offset = rel->r_offset; - bfd_signed_vma addend = rel->r_addend; - reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info); - unsigned int r_type = howto->type; - bfd_byte *hit_data = contents + offset; - struct elf64_hppa_link_hash_table *hppa_info = elf64_hppa_hash_table (info); - - insn = bfd_get_32 (input_bfd, hit_data); - - switch (r_type) - { - case R_PARISC_NONE: - break; - - /* Basic function call support. - - Note for a call to a function defined in another dynamic library - we want to redirect the call to a stub. */ - - /* Random PC relative relocs. */ - case R_PARISC_PCREL21L: - case R_PARISC_PCREL14R: - case R_PARISC_PCREL14F: - case R_PARISC_PCREL14WR: - case R_PARISC_PCREL14DR: - case R_PARISC_PCREL16F: - case R_PARISC_PCREL16WF: - case R_PARISC_PCREL16DF: - { - /* If this is a call to a function defined in another dynamic - library, then redirect the call to the local stub for this - function. */ - if (sym_sec == NULL || sym_sec->output_section == NULL) - value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset - + hppa_info->stub_sec->output_section->vma); - - /* Turn VALUE into a proper PC relative address. */ - value -= (offset + input_section->output_offset - + input_section->output_section->vma); - - /* Adjust for any field selectors. */ - if (r_type == R_PARISC_PCREL21L) - value = hppa_field_adjust (value, -8 + addend, e_lsel); - else if (r_type == R_PARISC_PCREL14F - || r_type == R_PARISC_PCREL16F - || r_type == R_PARISC_PCREL16WF - || r_type == R_PARISC_PCREL16DF) - value = hppa_field_adjust (value, -8 + addend, e_fsel); - else - value = hppa_field_adjust (value, -8 + addend, e_rsel); - - /* Apply the relocation to the given instruction. */ - insn = elf_hppa_relocate_insn (insn, (int) value, r_type); - break; - } - - case R_PARISC_PCREL12F: - case R_PARISC_PCREL22F: - case R_PARISC_PCREL17F: - case R_PARISC_PCREL22C: - case R_PARISC_PCREL17C: - case R_PARISC_PCREL17R: - { - /* If this is a call to a function defined in another dynamic - library, then redirect the call to the local stub for this - function. */ - if (sym_sec == NULL || sym_sec->output_section == NULL) - value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset - + hppa_info->stub_sec->output_section->vma); - - /* Turn VALUE into a proper PC relative address. */ - value -= (offset + input_section->output_offset - + input_section->output_section->vma); - - /* Adjust for any field selectors. */ - if (r_type == R_PARISC_PCREL17R) - value = hppa_field_adjust (value, -8 + addend, e_rsel); - else - value = hppa_field_adjust (value, -8 + addend, e_fsel); - - /* All branches are implicitly shifted by 2 places. */ - value >>= 2; - - /* Apply the relocation to the given instruction. */ - insn = elf_hppa_relocate_insn (insn, (int) value, r_type); - break; - } - - /* Indirect references to data through the DLT. */ - case R_PARISC_DLTIND14R: - case R_PARISC_DLTIND14F: - case R_PARISC_DLTIND14DR: - case R_PARISC_DLTIND14WR: - case R_PARISC_DLTIND21L: - case R_PARISC_LTOFF_FPTR14R: - case R_PARISC_LTOFF_FPTR14DR: - case R_PARISC_LTOFF_FPTR14WR: - case R_PARISC_LTOFF_FPTR21L: - case R_PARISC_LTOFF_FPTR16F: - case R_PARISC_LTOFF_FPTR16WF: - case R_PARISC_LTOFF_FPTR16DF: - case R_PARISC_LTOFF_TP21L: - case R_PARISC_LTOFF_TP14R: - case R_PARISC_LTOFF_TP14F: - case R_PARISC_LTOFF_TP14WR: - case R_PARISC_LTOFF_TP14DR: - case R_PARISC_LTOFF_TP16F: - case R_PARISC_LTOFF_TP16WF: - case R_PARISC_LTOFF_TP16DF: - case R_PARISC_LTOFF16F: - case R_PARISC_LTOFF16WF: - case R_PARISC_LTOFF16DF: - { - /* If this relocation was against a local symbol, then we still - have not set up the DLT entry (it's not convenient to do so - in the "finalize_dlt" routine because it is difficult to get - to the local symbol's value). - - So, if this is a local symbol (h == NULL), then we need to - fill in its DLT entry. - - Similarly we may still need to set up an entry in .opd for - a local function which had its address taken. */ - if (dyn_h->h == NULL) - { - /* Now do .opd creation if needed. */ - if (r_type == R_PARISC_LTOFF_FPTR14R - || r_type == R_PARISC_LTOFF_FPTR14DR - || r_type == R_PARISC_LTOFF_FPTR14WR - || r_type == R_PARISC_LTOFF_FPTR21L - || r_type == R_PARISC_LTOFF_FPTR16F - || r_type == R_PARISC_LTOFF_FPTR16WF - || r_type == R_PARISC_LTOFF_FPTR16DF) - { - /* The first two words of an .opd entry are zero. */ - memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, - 0, 16); - - /* The next word is the address of the function. */ - bfd_put_64 (hppa_info->opd_sec->owner, value + addend, - (hppa_info->opd_sec->contents - + dyn_h->opd_offset + 16)); - - /* The last word is our local __gp value. */ - value = _bfd_get_gp_value - (hppa_info->opd_sec->output_section->owner); - bfd_put_64 (hppa_info->opd_sec->owner, value, - (hppa_info->opd_sec->contents - + dyn_h->opd_offset + 24)); - - /* The DLT value is the address of the .opd entry. */ - value = (dyn_h->opd_offset - + hppa_info->opd_sec->output_offset - + hppa_info->opd_sec->output_section->vma); - addend = 0; - } - - bfd_put_64 (hppa_info->dlt_sec->owner, - value + addend, - hppa_info->dlt_sec->contents + dyn_h->dlt_offset); - } - - /* We want the value of the DLT offset for this symbol, not - the symbol's actual address. Note that __gp may not point - to the start of the DLT, so we have to compute the absolute - address, then subtract out the value of __gp. */ - value = (dyn_h->dlt_offset - + hppa_info->dlt_sec->output_offset - + hppa_info->dlt_sec->output_section->vma); - value -= _bfd_get_gp_value (output_bfd); - - /* All DLTIND relocations are basically the same at this point, - except that we need different field selectors for the 21bit - version vs the 14bit versions. */ - if (r_type == R_PARISC_DLTIND21L - || r_type == R_PARISC_LTOFF_FPTR21L - || r_type == R_PARISC_LTOFF_TP21L) - value = hppa_field_adjust (value, 0, e_lsel); - else if (r_type == R_PARISC_DLTIND14F - || r_type == R_PARISC_LTOFF_FPTR16F - || r_type == R_PARISC_LTOFF_FPTR16WF - || r_type == R_PARISC_LTOFF_FPTR16DF - || r_type == R_PARISC_LTOFF16F - || r_type == R_PARISC_LTOFF16DF - || r_type == R_PARISC_LTOFF16WF - || r_type == R_PARISC_LTOFF_TP16F - || r_type == R_PARISC_LTOFF_TP16WF - || r_type == R_PARISC_LTOFF_TP16DF) - value = hppa_field_adjust (value, 0, e_fsel); - else - value = hppa_field_adjust (value, 0, e_rsel); - - insn = elf_hppa_relocate_insn (insn, (int) value, r_type); - break; - } - - case R_PARISC_DLTREL14R: - case R_PARISC_DLTREL14F: - case R_PARISC_DLTREL14DR: - case R_PARISC_DLTREL14WR: - case R_PARISC_DLTREL21L: - case R_PARISC_DPREL21L: - case R_PARISC_DPREL14WR: - case R_PARISC_DPREL14DR: - case R_PARISC_DPREL14R: - case R_PARISC_DPREL14F: - case R_PARISC_GPREL16F: - case R_PARISC_GPREL16WF: - case R_PARISC_GPREL16DF: - { - /* Subtract out the global pointer value to make value a DLT - relative address. */ - value -= _bfd_get_gp_value (output_bfd); - - /* All DLTREL relocations are basically the same at this point, - except that we need different field selectors for the 21bit - version vs the 14bit versions. */ - if (r_type == R_PARISC_DLTREL21L - || r_type == R_PARISC_DPREL21L) - value = hppa_field_adjust (value, addend, e_lrsel); - else if (r_type == R_PARISC_DLTREL14F - || r_type == R_PARISC_DPREL14F - || r_type == R_PARISC_GPREL16F - || r_type == R_PARISC_GPREL16WF - || r_type == R_PARISC_GPREL16DF) - value = hppa_field_adjust (value, addend, e_fsel); - else - value = hppa_field_adjust (value, addend, e_rrsel); - - insn = elf_hppa_relocate_insn (insn, (int) value, r_type); - break; - } - - case R_PARISC_DIR21L: - case R_PARISC_DIR17R: - case R_PARISC_DIR17F: - case R_PARISC_DIR14R: - case R_PARISC_DIR14F: - case R_PARISC_DIR14WR: - case R_PARISC_DIR14DR: - case R_PARISC_DIR16F: - case R_PARISC_DIR16WF: - case R_PARISC_DIR16DF: - { - /* All DIR relocations are basically the same at this point, - except that branch offsets need to be divided by four, and - we need different field selectors. Note that we don't - redirect absolute calls to local stubs. */ - - if (r_type == R_PARISC_DIR21L) - value = hppa_field_adjust (value, addend, e_lrsel); - else if (r_type == R_PARISC_DIR17F - || r_type == R_PARISC_DIR16F - || r_type == R_PARISC_DIR16WF - || r_type == R_PARISC_DIR16DF - || r_type == R_PARISC_DIR14F) - value = hppa_field_adjust (value, addend, e_fsel); - else - 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; - - insn = elf_hppa_relocate_insn (insn, (int) value, r_type); - break; - } - - case R_PARISC_PLTOFF21L: - case R_PARISC_PLTOFF14R: - case R_PARISC_PLTOFF14F: - case R_PARISC_PLTOFF14WR: - case R_PARISC_PLTOFF14DR: - case R_PARISC_PLTOFF16F: - case R_PARISC_PLTOFF16WF: - case R_PARISC_PLTOFF16DF: - { - /* We want the value of the PLT offset for this symbol, not - the symbol's actual address. Note that __gp may not point - to the start of the DLT, so we have to compute the absolute - address, then subtract out the value of __gp. */ - value = (dyn_h->plt_offset - + hppa_info->plt_sec->output_offset - + hppa_info->plt_sec->output_section->vma); - value -= _bfd_get_gp_value (output_bfd); - - /* All PLTOFF relocations are basically the same at this point, - except that we need different field selectors for the 21bit - version vs the 14bit versions. */ - if (r_type == R_PARISC_PLTOFF21L) - value = hppa_field_adjust (value, addend, e_lrsel); - else if (r_type == R_PARISC_PLTOFF14F - || r_type == R_PARISC_PLTOFF16F - || r_type == R_PARISC_PLTOFF16WF - || r_type == R_PARISC_PLTOFF16DF) - value = hppa_field_adjust (value, addend, e_fsel); - else - value = hppa_field_adjust (value, addend, e_rrsel); - - insn = elf_hppa_relocate_insn (insn, (int) value, r_type); - break; - } - - case R_PARISC_LTOFF_FPTR32: - { - /* We may still need to create the FPTR itself if it was for - a local symbol. */ - if (dyn_h->h == NULL) - { - /* The first two words of an .opd entry are zero. */ - memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, 0, 16); - - /* The next word is the address of the function. */ - bfd_put_64 (hppa_info->opd_sec->owner, value + addend, - (hppa_info->opd_sec->contents - + dyn_h->opd_offset + 16)); - - /* The last word is our local __gp value. */ - value = _bfd_get_gp_value - (hppa_info->opd_sec->output_section->owner); - bfd_put_64 (hppa_info->opd_sec->owner, value, - hppa_info->opd_sec->contents + dyn_h->opd_offset + 24); - - /* The DLT value is the address of the .opd entry. */ - value = (dyn_h->opd_offset - + hppa_info->opd_sec->output_offset - + hppa_info->opd_sec->output_section->vma); - - bfd_put_64 (hppa_info->dlt_sec->owner, - value, - hppa_info->dlt_sec->contents + dyn_h->dlt_offset); - } - - /* We want the value of the DLT offset for this symbol, not - the symbol's actual address. Note that __gp may not point - to the start of the DLT, so we have to compute the absolute - address, then subtract out the value of __gp. */ - value = (dyn_h->dlt_offset - + hppa_info->dlt_sec->output_offset - + hppa_info->dlt_sec->output_section->vma); - value -= _bfd_get_gp_value (output_bfd); - bfd_put_32 (input_bfd, value, hit_data); - return bfd_reloc_ok; - } - - case R_PARISC_LTOFF_FPTR64: - case R_PARISC_LTOFF_TP64: - { - /* We may still need to create the FPTR itself if it was for - a local symbol. */ - if (dyn_h->h == NULL && r_type == R_PARISC_LTOFF_FPTR64) - { - /* The first two words of an .opd entry are zero. */ - memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, 0, 16); - - /* The next word is the address of the function. */ - bfd_put_64 (hppa_info->opd_sec->owner, value + addend, - (hppa_info->opd_sec->contents - + dyn_h->opd_offset + 16)); - - /* The last word is our local __gp value. */ - value = _bfd_get_gp_value - (hppa_info->opd_sec->output_section->owner); - bfd_put_64 (hppa_info->opd_sec->owner, value, - hppa_info->opd_sec->contents + dyn_h->opd_offset + 24); - - /* The DLT value is the address of the .opd entry. */ - value = (dyn_h->opd_offset - + hppa_info->opd_sec->output_offset - + hppa_info->opd_sec->output_section->vma); - - bfd_put_64 (hppa_info->dlt_sec->owner, - value, - hppa_info->dlt_sec->contents + dyn_h->dlt_offset); - } - - /* We want the value of the DLT offset for this symbol, not - the symbol's actual address. Note that __gp may not point - to the start of the DLT, so we have to compute the absolute - address, then subtract out the value of __gp. */ - value = (dyn_h->dlt_offset - + hppa_info->dlt_sec->output_offset - + hppa_info->dlt_sec->output_section->vma); - value -= _bfd_get_gp_value (output_bfd); - bfd_put_64 (input_bfd, value, hit_data); - return bfd_reloc_ok; - } - - case R_PARISC_DIR32: - bfd_put_32 (input_bfd, value + addend, hit_data); - return bfd_reloc_ok; - - case R_PARISC_DIR64: - bfd_put_64 (input_bfd, value + addend, hit_data); - return bfd_reloc_ok; - - case R_PARISC_GPREL64: - /* Subtract out the global pointer value to make value a DLT - relative address. */ - value -= _bfd_get_gp_value (output_bfd); - - bfd_put_64 (input_bfd, value + addend, hit_data); - return bfd_reloc_ok; - - case R_PARISC_LTOFF64: - /* We want the value of the DLT offset for this symbol, not - the symbol's actual address. Note that __gp may not point - to the start of the DLT, so we have to compute the absolute - address, then subtract out the value of __gp. */ - value = (dyn_h->dlt_offset - + hppa_info->dlt_sec->output_offset - + hppa_info->dlt_sec->output_section->vma); - value -= _bfd_get_gp_value (output_bfd); - - bfd_put_64 (input_bfd, value + addend, hit_data); - return bfd_reloc_ok; - - case R_PARISC_PCREL32: - { - /* If this is a call to a function defined in another dynamic - library, then redirect the call to the local stub for this - function. */ - if (sym_sec == NULL || sym_sec->output_section == NULL) - value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset - + hppa_info->stub_sec->output_section->vma); - - /* Turn VALUE into a proper PC relative address. */ - value -= (offset + input_section->output_offset - + input_section->output_section->vma); - - value += addend; - value -= 8; - bfd_put_32 (input_bfd, value, hit_data); - return bfd_reloc_ok; - } - - case R_PARISC_PCREL64: - { - /* If this is a call to a function defined in another dynamic - library, then redirect the call to the local stub for this - function. */ - if (sym_sec == NULL || sym_sec->output_section == NULL) - value = (dyn_h->stub_offset + hppa_info->stub_sec->output_offset - + hppa_info->stub_sec->output_section->vma); - - /* Turn VALUE into a proper PC relative address. */ - value -= (offset + input_section->output_offset - + input_section->output_section->vma); - - value += addend; - value -= 8; - bfd_put_64 (input_bfd, value, hit_data); - return bfd_reloc_ok; - } - - case R_PARISC_FPTR64: - { - /* We may still need to create the FPTR itself if it was for - a local symbol. */ - if (dyn_h->h == NULL) - { - /* The first two words of an .opd entry are zero. */ - memset (hppa_info->opd_sec->contents + dyn_h->opd_offset, 0, 16); - - /* The next word is the address of the function. */ - bfd_put_64 (hppa_info->opd_sec->owner, value + addend, - (hppa_info->opd_sec->contents - + dyn_h->opd_offset + 16)); - - /* The last word is our local __gp value. */ - value = _bfd_get_gp_value - (hppa_info->opd_sec->output_section->owner); - bfd_put_64 (hppa_info->opd_sec->owner, value, - hppa_info->opd_sec->contents + dyn_h->opd_offset + 24); - } - - if (dyn_h->want_opd) - /* We want the value of the OPD offset for this symbol. */ - value = (dyn_h->opd_offset - + hppa_info->opd_sec->output_offset - + hppa_info->opd_sec->output_section->vma); - else - /* We want the address of the symbol. */ - value += addend; - - bfd_put_64 (input_bfd, value, hit_data); - return bfd_reloc_ok; - } - - case R_PARISC_SECREL32: - bfd_put_32 (input_bfd, - value + addend - sym_sec->output_section->vma, - hit_data); - return bfd_reloc_ok; - - case R_PARISC_SEGREL32: - case R_PARISC_SEGREL64: - { - /* If this is the first SEGREL relocation, then initialize - the segment base values. */ - if (hppa_info->text_segment_base == (bfd_vma) -1) - bfd_map_over_sections (output_bfd, elf_hppa_record_segment_addrs, - hppa_info); - - /* VALUE holds the absolute address. We want to include the - addend, then turn it into a segment relative address. - - The segment is derived from SYM_SEC. We assume that there are - only two segments of note in the resulting executable/shlib. - A readonly segment (.text) and a readwrite segment (.data). */ - value += addend; - - if (sym_sec->flags & SEC_CODE) - value -= hppa_info->text_segment_base; - else - value -= hppa_info->data_segment_base; - - if (r_type == R_PARISC_SEGREL32) - bfd_put_32 (input_bfd, value, hit_data); - else - bfd_put_64 (input_bfd, value, hit_data); - return bfd_reloc_ok; - } - - /* Something we don't know how to handle. */ - default: - return bfd_reloc_notsupported; - } - - /* Update the instruction word. */ - bfd_put_32 (input_bfd, (bfd_vma) insn, hit_data); - return bfd_reloc_ok; -} - -/* Relocate an HPPA ELF section. */ - -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) -{ - 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++) - { - 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; - - 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; - - /* 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); - - /* 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); - - 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 /* ARCH_SIZE == 64 */ diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c new file mode 100644 index 0000000..0de236f --- /dev/null +++ b/bfd/elf-ifunc.c @@ -0,0 +1,288 @@ +/* ELF STT_GNU_IFUNC support. + Copyright 2009 + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "bfdlink.h" +#include "libbfd.h" +#define ARCH_SIZE 0 +#include "elf-bfd.h" +#include "safe-ctype.h" +#include "libiberty.h" +#include "objalloc.h" + +/* Create sections needed by STT_GNU_IFUNC symbol. */ + +bfd_boolean +_bfd_elf_create_ifunc_sections (bfd *abfd, struct bfd_link_info *info) +{ + flagword flags, pltflags; + asection *s; + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + struct elf_link_hash_table *htab = elf_hash_table (info); + + if (htab->irelifunc != NULL || htab->iplt != NULL) + return TRUE; + + flags = bed->dynamic_sec_flags; + pltflags = flags; + if (bed->plt_not_loaded) + /* We do not clear SEC_ALLOC here because we still want the OS to + allocate space for the section; it's just that there's nothing + to read in from the object file. */ + pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS); + else + pltflags |= SEC_ALLOC | SEC_CODE | SEC_LOAD; + if (bed->plt_readonly) + pltflags |= SEC_READONLY; + + if (info->shared) + { + /* We need to create .rel[a].ifunc for shared objects. */ + const char *rel_sec = (bed->rela_plts_and_copies_p + ? ".rela.ifunc" : ".rel.ifunc"); + + s = bfd_make_section_with_flags (abfd, rel_sec, + flags | SEC_READONLY); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, + bed->s->log_file_align)) + return FALSE; + htab->irelifunc = s; + } + else + { + /* We need to create .iplt, .rel[a].iplt, .igot and .igot.plt + for static executables. */ + s = bfd_make_section_with_flags (abfd, ".iplt", pltflags); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment)) + return FALSE; + htab->iplt = s; + + s = bfd_make_section_with_flags (abfd, + (bed->rela_plts_and_copies_p + ? ".rela.iplt" : ".rel.iplt"), + flags | SEC_READONLY); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, + bed->s->log_file_align)) + return FALSE; + htab->irelplt = s; + + /* We don't need the .igot section if we have the .igot.plt + section. */ + if (bed->want_got_plt) + s = bfd_make_section_with_flags (abfd, ".igot.plt", flags); + else + s = bfd_make_section_with_flags (abfd, ".igot", flags); + if (s == NULL + || !bfd_set_section_alignment (abfd, s, + bed->s->log_file_align)) + return FALSE; + htab->igotplt = s; + } + + return TRUE; +} + +/* For a STT_GNU_IFUNC symbol, create a dynamic reloc section, SRELOC, + for the input section, SEC, and append this reloc to HEAD. */ + +asection * +_bfd_elf_create_ifunc_dyn_reloc (bfd *abfd, struct bfd_link_info *info, + asection *sec, asection *sreloc, + struct elf_dyn_relocs **head) +{ + struct elf_dyn_relocs *p; + struct elf_link_hash_table *htab = elf_hash_table (info); + + if (sreloc == NULL) + { + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + + if (htab->dynobj == NULL) + htab->dynobj = abfd; + + sreloc = _bfd_elf_make_dynamic_reloc_section (sec, htab->dynobj, + bed->s->log_file_align, + abfd, + bed->rela_plts_and_copies_p); + if (sreloc == NULL) + return NULL; + } + + p = *head; + if (p == NULL || p->sec != sec) + { + bfd_size_type amt = sizeof *p; + + p = ((struct elf_dyn_relocs *) bfd_alloc (htab->dynobj, amt)); + if (p == NULL) + return NULL; + p->next = *head; + *head = p; + p->sec = sec; + p->count = 0; + p->pc_count = 0; + } + p->count += 1; + + return sreloc; +} + +/* Allocate space in .plt, .got and associated reloc sections for + dynamic relocs against a STT_GNU_IFUNC symbol definition. */ + +bfd_boolean +_bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, + struct elf_link_hash_entry *h, + struct elf_dyn_relocs **head, + unsigned int plt_entry_size, + unsigned int got_entry_size) +{ + asection *plt, *gotplt, *relplt; + struct elf_dyn_relocs *p; + unsigned int sizeof_reloc; + const struct elf_backend_data *bed; + struct elf_link_hash_table *htab; + + /* When a shared library references a STT_GNU_IFUNC symbol defined + in executable, the address of the resolved function may be used. + But in non-shared executable, the address of its .plt slot may + be used. Pointer equality may not work correctly. PIE should + be used if pointer equality is required here. */ + if (!info->shared + && (h->dynindx != -1 + || info->export_dynamic) + && h->pointer_equality_needed) + { + info->callbacks->einfo + (_("%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer " + "equality in `%B' can not be used when making an " + "executable; recompile with -fPIE and relink with -pie\n"), + h->root.root.string, + h->root.u.def.section->owner); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + htab = elf_hash_table (info); + + /* Return and discard space for dynamic relocations against it if + it is never referenced in a non-shared object. */ + if (!h->ref_regular) + { + if (h->plt.refcount > 0 + || h->got.refcount > 0) + abort (); + h->got = htab->init_got_offset; + h->plt = htab->init_plt_offset; + *head = NULL; + return TRUE; + } + + bed = get_elf_backend_data (info->output_bfd); + if (bed->rela_plts_and_copies_p) + sizeof_reloc = bed->s->sizeof_rela; + else + sizeof_reloc = bed->s->sizeof_rel; + + /* When building a static executable, use .iplt, .igot.plt and + .rel[a].iplt sections for STT_GNU_IFUNC symbols. */ + if (htab->splt != NULL) + { + plt = htab->splt; + gotplt = htab->sgotplt; + relplt = htab->srelplt; + + /* If this is the first .plt entry, make room for the special + first entry. */ + if (plt->size == 0) + plt->size += plt_entry_size; + } + else + { + plt = htab->iplt; + gotplt = htab->igotplt; + relplt = htab->irelplt; + } + + /* Don't update value of STT_GNU_IFUNC symbol to PLT. We need + the original value for R_*_IRELATIVE. */ + h->plt.offset = plt->size; + + /* Make room for this entry in the .plt/.iplt section. */ + plt->size += plt_entry_size; + + /* We also need to make an entry in the .got.plt/.got.iplt section, + which will be placed in the .got section by the linker script. */ + gotplt->size += got_entry_size; + + /* We also need to make an entry in the .rel[a].plt/.rel[a].iplt + section. */ + relplt->size += sizeof_reloc; + relplt->reloc_count++; + + /* We need dynamic relocation for STT_GNU_IFUNC symbol only when + there is a non-GOT reference in a shared object. */ + if (!info->shared + || !h->non_got_ref) + *head = NULL; + + /* Finally, allocate space. */ + for (p = *head; p != NULL; p = p->next) + htab->irelifunc->size += p->count * sizeof_reloc; + + /* For STT_GNU_IFUNC symbol, .got.plt has the real function addres + and .got has the PLT entry adddress. We will load the GOT entry + with the PLT entry in finish_dynamic_symbol if it is used. For + branch, it uses .got.plt. For symbol value, + 1. Use .got.plt in a shared object if it is forced local or not + dynamic. + 2. Use .got.plt in a non-shared object if pointer equality isn't + needed. + 3. Use .got.plt in PIE. + 4. Use .got.plt if .got isn't used. + 5. Otherwise use .got so that it can be shared among different + objects at run-time. + We only need to relocate .got entry in shared object. */ + if ((info->shared + && (h->dynindx == -1 + || h->forced_local)) + || (!info->shared + && !h->pointer_equality_needed) + || (info->executable && info->shared) + || htab->sgot == NULL) + { + /* Use .got.plt. */ + h->got.offset = (bfd_vma) -1; + } + else + { + h->got.offset = htab->sgot->size; + htab->sgot->size += got_entry_size; + if (info->shared) + htab->srelgot->size += sizeof_reloc; + } + + return TRUE; +} diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c index 099722e..5a6ff5f 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, 2007 + Copyright 1996, 1997, 1998, 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/elf-m10300.c b/bfd/elf-m10300.c index 2b309e5..794d329 100644 --- a/bfd/elf-m10300.c +++ b/bfd/elf-m10300.c @@ -1,6 +1,6 @@ /* Matsushita 10300 specific support for 32-bit ELF Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -24,28 +24,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/mn10300.h" - -static bfd_reloc_status_type mn10300_elf_final_link_relocate - PARAMS ((reloc_howto_type *, bfd *, bfd *, asection *, bfd_byte *, - bfd_vma, bfd_vma, bfd_vma, - struct elf_link_hash_entry *, unsigned long, struct bfd_link_info *, - asection *, int)); -static bfd_boolean mn10300_elf_relocate_section - PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, - Elf_Internal_Rela *, Elf_Internal_Sym *, asection **)); -static bfd_boolean mn10300_elf_relax_section - PARAMS ((bfd *, asection *, struct bfd_link_info *, bfd_boolean *)); -static bfd_byte * mn10300_elf_get_relocated_section_contents - PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *, - bfd_byte *, bfd_boolean, asymbol **)); -static unsigned long elf_mn10300_mach - PARAMS ((flagword)); -void _bfd_mn10300_elf_final_write_processing - PARAMS ((bfd *, bfd_boolean)); -bfd_boolean _bfd_mn10300_elf_object_p - PARAMS ((bfd *)); -bfd_boolean _bfd_mn10300_elf_merge_private_bfd_data - PARAMS ((bfd *,bfd *)); +#include "libiberty.h" /* The mn10300 linker needs to keep track of the number of relocs that it decides to copy in check_relocs for each symbol. This is so @@ -53,7 +32,8 @@ bfd_boolean _bfd_mn10300_elf_merge_private_bfd_data linking with -Bsymbolic. We store the information in a field extending the regular ELF linker hash table. */ -struct elf32_mn10300_link_hash_entry { +struct elf32_mn10300_link_hash_entry +{ /* The basic elf link hash table entry. */ struct elf_link_hash_entry root; @@ -94,7 +74,8 @@ struct elf32_mn10300_link_hash_entry { /* We derive a hash table from the main elf linker hash table so we can store state variables and a secondary hash table without resorting to global variables. */ -struct elf32_mn10300_link_hash_table { +struct elf32_mn10300_link_hash_table +{ /* The main hash table. */ struct elf_link_hash_table root; @@ -108,6 +89,10 @@ struct elf32_mn10300_link_hash_table { char flags; }; +#ifndef streq +#define streq(a, b) (strcmp ((a),(b)) == 0) +#endif + /* For MN10300 linker hash table. */ /* Get the MN10300 ELF linker hash table from a link_info structure. */ @@ -118,48 +103,11 @@ struct elf32_mn10300_link_hash_table { #define elf32_mn10300_link_hash_traverse(table, func, info) \ (elf_link_hash_traverse \ (&(table)->root, \ - (bfd_boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \ + (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \ (info))) -static struct bfd_hash_entry *elf32_mn10300_link_hash_newfunc - PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *)); -static struct bfd_link_hash_table *elf32_mn10300_link_hash_table_create - PARAMS ((bfd *)); -static void elf32_mn10300_link_hash_table_free - PARAMS ((struct bfd_link_hash_table *)); - -static reloc_howto_type *bfd_elf32_bfd_reloc_type_lookup - PARAMS ((bfd *abfd, bfd_reloc_code_real_type code)); -static void mn10300_info_to_howto - PARAMS ((bfd *, arelent *, Elf_Internal_Rela *)); -static bfd_boolean mn10300_elf_check_relocs - PARAMS ((bfd *, struct bfd_link_info *, asection *, - const Elf_Internal_Rela *)); -static bfd_boolean mn10300_elf_relax_delete_bytes - PARAMS ((bfd *, asection *, bfd_vma, int)); -static bfd_boolean mn10300_elf_symbol_address_p - PARAMS ((bfd *, asection *, Elf_Internal_Sym *, bfd_vma)); -static bfd_boolean elf32_mn10300_finish_hash_table_entry - PARAMS ((struct bfd_hash_entry *, PTR)); -static void compute_function_info - PARAMS ((bfd *, struct elf32_mn10300_link_hash_entry *, - bfd_vma, unsigned char *)); - -static bfd_boolean _bfd_mn10300_elf_create_got_section - PARAMS ((bfd *, struct bfd_link_info *)); -static bfd_boolean _bfd_mn10300_elf_create_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *)); -static bfd_boolean _bfd_mn10300_elf_adjust_dynamic_symbol - PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *)); -static bfd_boolean _bfd_mn10300_elf_size_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *)); -static bfd_boolean _bfd_mn10300_elf_finish_dynamic_symbol - PARAMS ((bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, - Elf_Internal_Sym *)); -static bfd_boolean _bfd_mn10300_elf_finish_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *)); - -static reloc_howto_type elf_mn10300_howto_table[] = { +static reloc_howto_type elf_mn10300_howto_table[] = +{ /* Dummy relocation. Does nothing. */ HOWTO (R_MN10300_NONE, 0, @@ -259,7 +207,7 @@ static reloc_howto_type elf_mn10300_howto_table[] = { 0xff, TRUE), - /* GNU extension to record C++ vtable hierarchy */ + /* GNU extension to record C++ vtable hierarchy. */ HOWTO (R_MN10300_GNU_VTINHERIT, /* type */ 0, /* rightshift */ 0, /* size (0 = byte, 1 = short, 2 = long) */ @@ -499,14 +447,53 @@ static reloc_howto_type elf_mn10300_howto_table[] = { 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ + EMPTY_HOWTO (24), + EMPTY_HOWTO (25), + EMPTY_HOWTO (26), + EMPTY_HOWTO (27), + EMPTY_HOWTO (28), + EMPTY_HOWTO (29), + EMPTY_HOWTO (30), + EMPTY_HOWTO (31), + EMPTY_HOWTO (32), + + HOWTO (R_MN10300_SYM_DIFF, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + NULL, /* special handler. */ + "R_MN10300_SYM_DIFF", /* name */ + FALSE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_MN10300_ALIGN, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + NULL, /* special handler. */ + "R_MN10300_ALIGN", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE) /* pcrel_offset */ }; -struct mn10300_reloc_map { +struct mn10300_reloc_map +{ bfd_reloc_code_real_type bfd_reloc_val; unsigned char elf_reloc_val; }; -static const struct mn10300_reloc_map mn10300_reloc_map[] = { +static const struct mn10300_reloc_map mn10300_reloc_map[] = +{ { BFD_RELOC_NONE, R_MN10300_NONE, }, { BFD_RELOC_32, R_MN10300_32, }, { BFD_RELOC_16, R_MN10300_16, }, @@ -531,14 +518,15 @@ static const struct mn10300_reloc_map mn10300_reloc_map[] = { { BFD_RELOC_MN10300_GLOB_DAT, R_MN10300_GLOB_DAT }, { BFD_RELOC_MN10300_JMP_SLOT, R_MN10300_JMP_SLOT }, { BFD_RELOC_MN10300_RELATIVE, R_MN10300_RELATIVE }, + { BFD_RELOC_MN10300_SYM_DIFF, R_MN10300_SYM_DIFF }, + { BFD_RELOC_MN10300_ALIGN, R_MN10300_ALIGN } }; /* Create the GOT section. */ static bfd_boolean -_bfd_mn10300_elf_create_got_section (abfd, info) - bfd * abfd; - struct bfd_link_info * info; +_bfd_mn10300_elf_create_got_section (bfd * abfd, + struct bfd_link_info * info) { flagword flags; flagword pltflags; @@ -621,19 +609,14 @@ _bfd_mn10300_elf_create_got_section (abfd, info) } static reloc_howto_type * -bfd_elf32_bfd_reloc_type_lookup (abfd, code) - bfd *abfd ATTRIBUTE_UNUSED; - bfd_reloc_code_real_type code; +bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) { unsigned int i; - for (i = 0; - i < sizeof (mn10300_reloc_map) / sizeof (struct mn10300_reloc_map); - i++) - { - if (mn10300_reloc_map[i].bfd_reloc_val == code) - return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val]; - } + for (i = ARRAY_SIZE (mn10300_reloc_map); i--;) + if (mn10300_reloc_map[i].bfd_reloc_val == code) + return &elf_mn10300_howto_table[mn10300_reloc_map[i].elf_reloc_val]; return NULL; } @@ -644,13 +627,10 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, { unsigned int i; - for (i = 0; - i < (sizeof (elf_mn10300_howto_table) - / sizeof (elf_mn10300_howto_table[0])); - i++) + for (i = ARRAY_SIZE (elf_mn10300_howto_table); 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 elf_mn10300_howto_table + i; return NULL; } @@ -658,16 +638,15 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, /* Set the howto pointer for an MN10300 ELF reloc. */ static void -mn10300_info_to_howto (abfd, cache_ptr, dst) - bfd *abfd ATTRIBUTE_UNUSED; - arelent *cache_ptr; - Elf_Internal_Rela *dst; +mn10300_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, + arelent *cache_ptr, + Elf_Internal_Rela *dst) { unsigned int r_type; r_type = ELF32_R_TYPE (dst->r_info); BFD_ASSERT (r_type < (unsigned int) R_MN10300_MAX); - cache_ptr->howto = &elf_mn10300_howto_table[r_type]; + cache_ptr->howto = elf_mn10300_howto_table + r_type; } /* Look through the relocs for a section during the first phase. @@ -675,14 +654,15 @@ mn10300_info_to_howto (abfd, cache_ptr, dst) virtual table relocs for gc. */ static bfd_boolean -mn10300_elf_check_relocs (abfd, info, sec, relocs) - bfd *abfd; - struct bfd_link_info *info; - asection *sec; - const Elf_Internal_Rela *relocs; +mn10300_elf_check_relocs (bfd *abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { + bfd_boolean sym_diff_reloc_seen; Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + Elf_Internal_Sym * isymbuf = NULL; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; bfd * dynobj; @@ -690,6 +670,7 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) asection * sgot; asection * srelgot; asection * sreloc; + bfd_boolean result = FALSE; sgot = NULL; srelgot = NULL; @@ -699,18 +680,19 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; 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; dynobj = elf_hash_table (info)->dynobj; local_got_offsets = elf_local_got_offsets (abfd); rel_end = relocs + sec->reloc_count; + sym_diff_reloc_seen = FALSE; + for (rel = relocs; rel < rel_end; rel++) { struct elf_link_hash_entry *h; unsigned long r_symndx; + unsigned int r_type; r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) @@ -723,10 +705,12 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) h = (struct elf_link_hash_entry *) h->root.u.i.link; } + r_type = ELF32_R_TYPE (rel->r_info); + /* Some relocs require a global offset table. */ if (dynobj == NULL) { - switch (ELF32_R_TYPE (rel->r_info)) + switch (r_type) { case R_MN10300_GOT32: case R_MN10300_GOT24: @@ -738,7 +722,7 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) case R_MN10300_GOTPC16: elf_hash_table (info)->dynobj = dynobj = abfd; if (! _bfd_mn10300_elf_create_got_section (dynobj, info)) - return FALSE; + goto fail; break; default: @@ -746,21 +730,24 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) } } - switch (ELF32_R_TYPE (rel->r_info)) + switch (r_type) { /* This relocation describes the C++ object vtable hierarchy. Reconstruct it for later use during GC. */ case R_MN10300_GNU_VTINHERIT: if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) - return FALSE; + goto fail; break; /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_MN10300_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) - return FALSE; + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + goto fail; break; + case R_MN10300_GOT32: case R_MN10300_GOT24: case R_MN10300_GOT16: @@ -788,7 +775,7 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) | SEC_READONLY)); if (srelgot == NULL || ! bfd_set_section_alignment (dynobj, srelgot, 2)) - return FALSE; + goto fail; } } @@ -804,7 +791,7 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) if (h->dynindx == -1) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; + goto fail; } srelgot->size += sizeof (Elf32_External_Rela); @@ -819,10 +806,11 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) unsigned int i; size = symtab_hdr->sh_info * sizeof (bfd_vma); - local_got_offsets = (bfd_vma *) bfd_alloc (abfd, size); + local_got_offsets = bfd_alloc (abfd, size); if (local_got_offsets == NULL) - return FALSE; + goto fail; + elf_local_got_offsets (abfd) = local_got_offsets; for (i = 0; i < symtab_hdr->sh_info; i++) @@ -843,7 +831,6 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) } sgot->size += 4; - break; case R_MN10300_PLT32: @@ -865,7 +852,6 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) break; h->needs_plt = 1; - break; case R_MN10300_24: @@ -878,59 +864,82 @@ mn10300_elf_check_relocs (abfd, info, sec, relocs) h->non_got_ref = 1; break; + case R_MN10300_SYM_DIFF: + sym_diff_reloc_seen = TRUE; + break; + case R_MN10300_32: if (h != NULL) h->non_got_ref = 1; - /* If we are creating a shared library, then we need to copy - the reloc into the shared library. */ + /* If we are creating a shared library, then we + need to copy the reloc into the shared library. */ if (info->shared - && (sec->flags & SEC_ALLOC) != 0) + && (sec->flags & SEC_ALLOC) != 0 + /* Do not generate a dynamic reloc for a + reloc associated with a SYM_DIFF operation. */ + && ! sym_diff_reloc_seen) { - /* When creating a shared object, we must copy these - reloc types into the output file. We create a reloc - section in dynobj and make room for this reloc. */ - if (sreloc == NULL) - { - const char * name; + asection * sym_section = NULL; - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; + /* Find the section containing the + symbol involved in the relocation. */ + if (h == NULL) + { + Elf_Internal_Sym * isym; - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); + if (isymbuf == NULL) + isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, + symtab_hdr->sh_info, 0, + NULL, NULL, NULL); + if (isymbuf) + { + isym = isymbuf + r_symndx; + /* All we care about is whether this local symbol is absolute. */ + if (isym->st_shndx == SHN_ABS) + sym_section = bfd_abs_section_ptr; + } + } + else + { + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + sym_section = h->root.u.def.section; + } - sreloc = bfd_get_section_by_name (dynobj, name); + /* If the symbol is absolute then the relocation can + be resolved during linking and there is no need for + a dynamic reloc. */ + if (sym_section != bfd_abs_section_ptr) + { + /* When creating a shared object, we must copy these + reloc types into the output file. We create a reloc + section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); + if (sreloc == NULL) + goto fail; } - } - sreloc->size += sizeof (Elf32_External_Rela); + sreloc->size += sizeof (Elf32_External_Rela); + } } break; } + + if (ELF32_R_TYPE (rel->r_info) != R_MN10300_SYM_DIFF) + sym_diff_reloc_seen = FALSE; } - return TRUE; + result = TRUE; + fail: + if (isymbuf != NULL) + free (isymbuf); + + return result; } /* Return the section that should be marked against GC for a given @@ -955,26 +964,27 @@ mn10300_elf_gc_mark_hook (asection *sec, } /* Perform a relocation as part of a final link. */ + static bfd_reloc_status_type -mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, - input_section, contents, offset, value, - addend, h, symndx, info, sym_sec, is_local) - reloc_howto_type *howto; - bfd *input_bfd; - bfd *output_bfd ATTRIBUTE_UNUSED; - asection *input_section; - bfd_byte *contents; - bfd_vma offset; - bfd_vma value; - bfd_vma addend; - struct elf_link_hash_entry * h; - unsigned long symndx; - struct bfd_link_info *info; - asection *sym_sec ATTRIBUTE_UNUSED; - int is_local ATTRIBUTE_UNUSED; +mn10300_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 value, + bfd_vma addend, + struct elf_link_hash_entry * h, + unsigned long symndx, + struct bfd_link_info *info, + asection *sym_sec ATTRIBUTE_UNUSED, + int is_local ATTRIBUTE_UNUSED) { + static asection * sym_diff_section; + static bfd_vma sym_diff_value; + bfd_boolean is_sym_diff_reloc; unsigned long r_type = howto->type; - bfd_byte *hit_data = contents + offset; + bfd_byte * hit_data = contents + offset; bfd * dynobj; bfd_vma * local_got_offsets; asection * sgot; @@ -1006,13 +1016,66 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, return bfd_reloc_dangerous; } + is_sym_diff_reloc = FALSE; + if (sym_diff_section != NULL) + { + BFD_ASSERT (sym_diff_section == input_section); + + switch (r_type) + { + case R_MN10300_32: + case R_MN10300_24: + case R_MN10300_16: + case R_MN10300_8: + value -= sym_diff_value; + /* If we are computing a 32-bit value for the location lists + and the result is 0 then we add one to the value. A zero + value can result because of linker relaxation deleteing + prologue instructions and using a value of 1 (for the begin + and end offsets in the location list entry) results in a + nul entry which does not prevent the following entries from + being parsed. */ + if (r_type == R_MN10300_32 + && value == 0 + && strcmp (input_section->name, ".debug_loc") == 0) + value = 1; + sym_diff_section = NULL; + is_sym_diff_reloc = TRUE; + break; + + default: + sym_diff_section = NULL; + break; + } + } + switch (r_type) { + case R_MN10300_SYM_DIFF: + BFD_ASSERT (addend == 0); + /* Cache the input section and value. + The offset is unreliable, since relaxation may + have reduced the following reloc's offset. */ + sym_diff_section = input_section; + sym_diff_value = value; + return bfd_reloc_ok; + + case R_MN10300_ALIGN: case R_MN10300_NONE: return bfd_reloc_ok; case R_MN10300_32: if (info->shared + /* Do not generate relocs when an R_MN10300_32 has been used + with an R_MN10300_SYM_DIFF to compute a difference of two + symbols. */ + && is_sym_diff_reloc == FALSE + /* Also, do not generate a reloc when the symbol associated + with the R_MN10300_32 reloc is absolute - there is no + need for a run time computation in this case. */ + && sym_sec != bfd_abs_section_ptr + /* If the section is not going to be allocated at load time + then there is no need to generate relocs for it. */ && (input_section->flags & SEC_ALLOC) != 0) { Elf_Internal_Rela outrel; @@ -1023,22 +1086,10 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, time. */ if (sreloc == NULL) { - const char * name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = FALSE; @@ -1127,7 +1178,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= offset; value += addend; - if ((long) value > 0xff || (long) value < -0x100) + if ((long) value > 0x7f || (long) value < -0x80) return bfd_reloc_overflow; bfd_put_8 (input_bfd, value, hit_data); @@ -1139,7 +1190,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= offset; value += addend; - if ((long) value > 0xffff || (long) value < -0x10000) + if ((long) value > 0x7fff || (long) value < -0x8000) return bfd_reloc_overflow; bfd_put_16 (input_bfd, value, hit_data); @@ -1160,7 +1211,6 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, case R_MN10300_GOTPC32: /* Use global offset table as symbol value. */ - value = bfd_get_section_by_name (dynobj, ".got")->output_section->vma; value -= (input_section->output_section->vma @@ -1173,7 +1223,6 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, case R_MN10300_GOTPC16: /* Use global offset table as symbol value. */ - value = bfd_get_section_by_name (dynobj, ".got")->output_section->vma; value -= (input_section->output_section->vma @@ -1181,7 +1230,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= offset; value += addend; - if ((long) value > 0xffff || (long) value < -0x10000) + if ((long) value > 0x7fff || (long) value < -0x8000) return bfd_reloc_overflow; bfd_put_16 (input_bfd, value, hit_data); @@ -1213,7 +1262,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, ".got")->output_section->vma; value += addend; - if ((long) value > 0xffff || (long) value < -0x10000) + if ((long) value > 0x7fff || (long) value < -0x8000) return bfd_reloc_overflow; bfd_put_16 (input_bfd, value, hit_data); @@ -1262,7 +1311,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, value -= offset; value += addend; - if ((long) value > 0xffff || (long) value < -0x10000) + if ((long) value > 0x7fff || (long) value < -0x8000) return bfd_reloc_overflow; bfd_put_16 (input_bfd, value, hit_data); @@ -1350,7 +1399,7 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, } else if (r_type == R_MN10300_GOT16) { - if ((long) value > 0xffff || (long) value < -0x10000) + if ((long) value > 0x7fff || (long) value < -0x8000) return bfd_reloc_overflow; bfd_put_16 (input_bfd, value, hit_data); @@ -1364,17 +1413,16 @@ mn10300_elf_final_link_relocate (howto, input_bfd, output_bfd, } /* Relocate an MN10300 ELF section. */ + static bfd_boolean -mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section, - contents, relocs, local_syms, local_sections) - 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; +mn10300_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; @@ -1442,6 +1490,10 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section, && elf_hash_table (info)->dynamic_sections_created && !SYMBOL_REFERENCES_LOCAL (info, hh)) || (r_type == R_MN10300_32 + /* _32 relocs in executables force _COPY relocs, + such that the address of the symbol ends up + being local. */ + && !info->executable && !SYMBOL_REFERENCES_LOCAL (info, hh) && ((input_section->flags & SEC_ALLOC) != 0 /* DWARF will emit R_MN10300_32 relocations @@ -1483,14 +1535,14 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section, input_section, contents, rel->r_offset, relocation, rel->r_addend, - (struct elf_link_hash_entry *)h, + (struct elf_link_hash_entry *) h, r_symndx, info, sec, h == NULL); if (r != bfd_reloc_ok) { const char *name; - const char *msg = (const char *) 0; + const char *msg = NULL; if (h != NULL) name = h->root.root.root.string; @@ -1538,7 +1590,7 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section, default: msg = _("internal error: unknown error"); - /* fall through */ + /* Fall through. */ common_error: if (!((*info->callbacks->warning) @@ -1554,13 +1606,13 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section, } /* Finish initializing one hash table entry. */ + static bfd_boolean -elf32_mn10300_finish_hash_table_entry (gen_entry, in_args) - struct bfd_hash_entry *gen_entry; - PTR in_args; +elf32_mn10300_finish_hash_table_entry (struct bfd_hash_entry *gen_entry, + void * in_args) { struct elf32_mn10300_link_hash_entry *entry; - struct bfd_link_info *link_info = (struct bfd_link_info *)in_args; + struct bfd_link_info *link_info = (struct bfd_link_info *) in_args; unsigned int byte_count = 0; entry = (struct elf32_mn10300_link_hash_entry *) gen_entry; @@ -1618,20 +1670,22 @@ elf32_mn10300_finish_hash_table_entry (gen_entry, in_args) } /* 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) + void * in_args) { - int *count = (int *)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) + void * in_args) { struct bfd_hash_entry ***ptr = (struct bfd_hash_entry ***) in_args; @@ -1641,17 +1695,329 @@ elf32_mn10300_list_hash_table_entries (struct bfd_hash_entry *gen_entry, } /* 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 **) va; struct elf32_mn10300_link_hash_entry *b - = *(struct elf32_mn10300_link_hash_entry **)vb; + = *(struct elf32_mn10300_link_hash_entry **) vb; + + return a->value - b->value; +} + +/* Compute the stack size and movm arguments for the function + referred to by HASH at address ADDR in section with + contents CONTENTS, store the information in the hash table. */ + +static void +compute_function_info (bfd *abfd, + struct elf32_mn10300_link_hash_entry *hash, + bfd_vma addr, + unsigned char *contents) +{ + unsigned char byte1, byte2; + /* We only care about a very small subset of the possible prologue + sequences here. Basically we look for: + + movm [d2,d3,a2,a3],sp (optional) + add ,sp (optional, and only for sizes which fit in an unsigned + 8 bit number) + + If we find anything else, we quit. */ + + /* Look for movm [regs],sp. */ + byte1 = bfd_get_8 (abfd, contents + addr); + byte2 = bfd_get_8 (abfd, contents + addr + 1); + + if (byte1 == 0xcf) + { + hash->movm_args = byte2; + addr += 2; + byte1 = bfd_get_8 (abfd, contents + addr); + byte2 = bfd_get_8 (abfd, contents + addr + 1); + } + + /* Now figure out how much stack space will be allocated by the movm + instruction. We need this kept separate from the function's normal + stack space. */ + if (hash->movm_args) + { + /* Space for d2. */ + if (hash->movm_args & 0x80) + hash->movm_stack_size += 4; + + /* Space for d3. */ + if (hash->movm_args & 0x40) + hash->movm_stack_size += 4; + + /* Space for a2. */ + if (hash->movm_args & 0x20) + hash->movm_stack_size += 4; + + /* Space for a3. */ + if (hash->movm_args & 0x10) + hash->movm_stack_size += 4; + + /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */ + if (hash->movm_args & 0x08) + hash->movm_stack_size += 8 * 4; + + if (bfd_get_mach (abfd) == bfd_mach_am33 + || bfd_get_mach (abfd) == bfd_mach_am33_2) + { + /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */ + if (hash->movm_args & 0x1) + hash->movm_stack_size += 6 * 4; + + /* exreg1 space. e4, e5, e6, e7 */ + if (hash->movm_args & 0x2) + hash->movm_stack_size += 4 * 4; + + /* exreg0 space. e2, e3 */ + if (hash->movm_args & 0x4) + hash->movm_stack_size += 2 * 4; + } + } + + /* Now look for the two stack adjustment variants. */ + if (byte1 == 0xf8 && byte2 == 0xfe) + { + int temp = bfd_get_8 (abfd, contents + addr + 2); + temp = ((temp & 0xff) ^ (~0x7f)) + 0x80; + + hash->stack_size = -temp; + } + else if (byte1 == 0xfa && byte2 == 0xfe) + { + int temp = bfd_get_16 (abfd, contents + addr + 2); + temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000; + temp = -temp; + + if (temp < 255) + hash->stack_size = temp; + } + + /* If the total stack to be allocated by the call instruction is more + than 255 bytes, then we can't remove the stack adjustment by using + "call" (we might still be able to remove the "movm" instruction. */ + if (hash->stack_size + hash->movm_stack_size > 255) + hash->stack_size = 0; +} + +/* Delete some bytes from a section while relaxing. */ + +static bfd_boolean +mn10300_elf_relax_delete_bytes (bfd *abfd, + asection *sec, + bfd_vma addr, + int count) +{ + Elf_Internal_Shdr *symtab_hdr; + unsigned int sec_shndx; + bfd_byte *contents; + Elf_Internal_Rela *irel, *irelend; + Elf_Internal_Rela *irelalign; + bfd_vma toaddr; + Elf_Internal_Sym *isym, *isymend; + struct elf_link_hash_entry **sym_hashes; + struct elf_link_hash_entry **end_hashes; + unsigned int symcount; + + sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); + + contents = elf_section_data (sec)->this_hdr.contents; + + irelalign = NULL; + toaddr = sec->size; + + irel = elf_section_data (sec)->relocs; + irelend = irel + sec->reloc_count; + + if (sec->reloc_count > 0) + { + /* If there is an align reloc at the end of the section ignore it. + GAS creates these relocs for reasons of its own, and they just + serve to keep the section artifically inflated. */ + if (ELF32_R_TYPE ((irelend - 1)->r_info) == (int) R_MN10300_ALIGN) + --irelend; + + /* The deletion must stop at the next ALIGN reloc for an aligment + power larger than, or not a multiple of, the number of bytes we + are deleting. */ + for (; irel < irelend; irel++) + { + int alignment = 1 << irel->r_addend; + + if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN + && irel->r_offset > addr + && irel->r_offset < toaddr + && (count < alignment + || alignment % count != 0)) + { + irelalign = irel; + toaddr = irel->r_offset; + break; + } + } + } + + /* Actually delete the bytes. */ + memmove (contents + addr, contents + addr + count, + (size_t) (toaddr - addr - count)); + + /* Adjust the section's size if we are shrinking it, or else + pad the bytes between the end of the shrunken region and + the start of the next region with NOP codes. */ + if (irelalign == NULL) + { + sec->size -= count; + /* Include symbols at the end of the section, but + not at the end of a sub-region of the section. */ + toaddr ++; + } + else + { + int i; + +#define NOP_OPCODE 0xcb + + for (i = 0; i < count; i ++) + bfd_put_8 (abfd, (bfd_vma) NOP_OPCODE, contents + toaddr - count + i); + } + + /* 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) + || (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN + && irel->r_offset == toaddr)) + irel->r_offset -= count; + } + + /* Adjust the local symbols in the section, reducing their value + by the number of bytes deleted. Note - symbols within the deleted + region are moved to the address of the start of the region, which + actually means that they will address the byte beyond the end of + the region once the deletion has been completed. */ + 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) + { + if (isym->st_value < addr + count) + isym->st_value = addr; + else + isym->st_value -= count; + } + /* Adjust the function symbol's size as well. */ + else if (isym->st_shndx == sec_shndx + && ELF_ST_TYPE (isym->st_info) == STT_FUNC + && isym->st_value + isym->st_size > addr + && isym->st_value + isym->st_size < toaddr) + isym->st_size -= count; + } + + /* Now adjust the global symbols defined in this section. */ + symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) + - symtab_hdr->sh_info); + sym_hashes = elf_sym_hashes (abfd); + end_hashes = sym_hashes + symcount; + for (; sym_hashes < end_hashes; sym_hashes++) + { + struct elf_link_hash_entry *sym_hash = *sym_hashes; + + if ((sym_hash->root.type == bfd_link_hash_defined + || sym_hash->root.type == bfd_link_hash_defweak) + && sym_hash->root.u.def.section == sec + && sym_hash->root.u.def.value > addr + && sym_hash->root.u.def.value < toaddr) + { + if (sym_hash->root.u.def.value < addr + count) + sym_hash->root.u.def.value = addr; + else + sym_hash->root.u.def.value -= count; + } + /* Adjust the function symbol's size as well. */ + else if (sym_hash->root.type == bfd_link_hash_defined + && sym_hash->root.u.def.section == sec + && sym_hash->type == STT_FUNC + && sym_hash->root.u.def.value + sym_hash->size > addr + && sym_hash->root.u.def.value + sym_hash->size < toaddr) + sym_hash->size -= count; + } + + /* See if we can move the ALIGN reloc forward. + We have adjusted r_offset for it already. */ + if (irelalign != NULL) + { + bfd_vma alignto, alignaddr; + + if ((int) irelalign->r_addend > 0) + { + /* This is the old address. */ + alignto = BFD_ALIGN (toaddr, 1 << irelalign->r_addend); + /* This is where the align points to now. */ + alignaddr = BFD_ALIGN (irelalign->r_offset, + 1 << irelalign->r_addend); + if (alignaddr < alignto) + /* Tail recursion. */ + return mn10300_elf_relax_delete_bytes (abfd, sec, alignaddr, + (int) (alignto - alignaddr)); + } + } + + return TRUE; +} + +/* Return TRUE if a symbol exists at the given address, else return + FALSE. */ + +static bfd_boolean +mn10300_elf_symbol_address_p (bfd *abfd, + asection *sec, + Elf_Internal_Sym *isym, + bfd_vma addr) +{ + Elf_Internal_Shdr *symtab_hdr; + unsigned int sec_shndx; + Elf_Internal_Sym *isymend; + struct elf_link_hash_entry **sym_hashes; + struct elf_link_hash_entry **end_hashes; + unsigned int symcount; + + sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); + + /* Examine all the symbols. */ + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) + if (isym->st_shndx == sec_shndx + && isym->st_value == addr) + return TRUE; + + symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) + - symtab_hdr->sh_info); + sym_hashes = elf_sym_hashes (abfd); + end_hashes = sym_hashes + symcount; + for (; sym_hashes < end_hashes; sym_hashes++) + { + struct elf_link_hash_entry *sym_hash = *sym_hashes; - return a->value - b->value; -} + 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) + return TRUE; + } + return FALSE; +} /* This function handles relaxing for the mn10300. @@ -1693,11 +2059,10 @@ sort_by_value (const void *va, const void *vb) and somewhat more difficult to support. */ static bfd_boolean -mn10300_elf_relax_section (abfd, sec, link_info, again) - bfd *abfd; - asection *sec; - struct bfd_link_info *link_info; - bfd_boolean *again; +mn10300_elf_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 = NULL; @@ -1706,6 +2071,11 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) Elf_Internal_Sym *isymbuf = NULL; struct elf32_mn10300_link_hash_table *hash_table; asection *section = sec; + bfd_vma align_gap_adjustment; + + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); /* Assume nothing changes. */ *again = FALSE; @@ -1771,12 +2141,10 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) if ((section->flags & SEC_RELOC) != 0 && section->reloc_count != 0) { - /* Get a copy of the native relocations. */ - internal_relocs = (_bfd_elf_link_read_relocs - (input_bfd, section, (PTR) NULL, - (Elf_Internal_Rela *) NULL, - link_info->keep_memory)); + internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section, + NULL, NULL, + link_info->keep_memory); if (internal_relocs == NULL) goto error_return; @@ -1835,7 +2203,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) local symbol in the global hash table. */ amt = strlen (sym_name) + 10; new_name = bfd_malloc (amt); - if (new_name == 0) + if (new_name == NULL) goto error_return; sprintf (new_name, "%s_%08x", sym_name, sym_sec->id); @@ -1944,7 +2312,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) local symbol in the global hash table. */ amt = strlen (sym_name) + 10; new_name = bfd_malloc (amt); - if (new_name == 0) + if (new_name == NULL) goto error_return; sprintf (new_name, "%s_%08x", sym_name, sym_sec->id); @@ -2034,26 +2402,28 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) 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 *)); + entries = bfd_malloc (static_count * sizeof (* ptr)); ptr = entries; elf32_mn10300_link_hash_traverse (hash_table->static_hash_table, elf32_mn10300_list_hash_table_entries, - &ptr); + & ptr); - qsort (entries, static_count, sizeof(entries[0]), sort_by_value); + qsort (entries, static_count, sizeof (entries[0]), sort_by_value); - for (i=0; ivalue && entries[i]->value == entries[i+1]->value) { int v = entries[i]->flags; int j; - for (j=i+1; jvalue == entries[i]->value; j++) + + for (j = i + 1; j < static_count && entries[j]->value == entries[i]->value; j++) v |= entries[j]->flags; - for (j=i; jvalue == entries[i]->value; j++) + + for (j = i; j < static_count && entries[j]->value == entries[i]->value; j++) entries[j]->flags = v; - i = j-1; + + i = j - 1; } } @@ -2099,10 +2469,9 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) if (section->reloc_count != 0) { /* Get a copy of the native relocations. */ - internal_relocs = (_bfd_elf_link_read_relocs - (input_bfd, section, (PTR) NULL, - (Elf_Internal_Rela *) NULL, - link_info->keep_memory)); + internal_relocs = _bfd_elf_link_read_relocs (input_bfd, section, + NULL, NULL, + link_info->keep_memory); if (internal_relocs == NULL) goto error_return; } @@ -2155,15 +2524,15 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) local symbol in the global hash table. */ amt = strlen (sym_name) + 10; new_name = bfd_malloc (amt); - if (new_name == 0) + if (new_name == NULL) goto error_return; sprintf (new_name, "%s_%08x", sym_name, sym_sec->id); sym_name = new_name; - elftab = &hash_table->static_hash_table->root; - sym_hash = ((struct elf32_mn10300_link_hash_entry *) - elf_link_hash_lookup (elftab, sym_name, - FALSE, FALSE, FALSE)); + elftab = & hash_table->static_hash_table->root; + sym_hash = (struct elf32_mn10300_link_hash_entry *) + elf_link_hash_lookup (elftab, sym_name, + FALSE, FALSE, FALSE); free (new_name); if (sym_hash == NULL) @@ -2276,10 +2645,8 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) if (! link_info->keep_memory) free (contents); else - { - /* Cache the section contents for elf_link_input_bfd. */ - elf_section_data (section)->this_hdr.contents = contents; - } + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (section)->this_hdr.contents = contents; } contents = NULL; } @@ -2291,10 +2658,8 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) if (! link_info->keep_memory) free (isymbuf); else - { - /* Cache the symbols for elf_link_input_bfd. */ - symtab_hdr->contents = (unsigned char *) isymbuf; - } + /* Cache the symbols for elf_link_input_bfd. */ + symtab_hdr->contents = (unsigned char *) isymbuf; } isymbuf = NULL; } @@ -2319,17 +2684,45 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) symtab_hdr = &elf_tdata (abfd)->symtab_hdr; /* Get a copy of the native relocations. */ - internal_relocs = (_bfd_elf_link_read_relocs - (abfd, sec, (PTR) NULL, (Elf_Internal_Rela *) NULL, - link_info->keep_memory)); + internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, + link_info->keep_memory); if (internal_relocs == NULL) goto error_return; + /* Scan for worst case alignment gap changes. Note that this logic + is not ideal; what we should do is run this scan for every + opcode/address range and adjust accordingly, but that's + expensive. Worst case is that for an alignment of N bytes, we + move by 2*N-N-1 bytes, assuming we have aligns of 1, 2, 4, 8, etc + all before it. Plus, this still doesn't cover cross-section + jumps with section alignment. */ + irelend = internal_relocs + sec->reloc_count; + align_gap_adjustment = 0; + for (irel = internal_relocs; irel < irelend; irel++) + { + if (ELF32_R_TYPE (irel->r_info) == (int) R_MN10300_ALIGN) + { + bfd_vma adj = 1 << irel->r_addend; + bfd_vma aend = irel->r_offset; + + aend = BFD_ALIGN (aend, 1 << irel->r_addend); + adj = 2 * adj - adj - 1; + + /* Record the biggest adjustmnet. Skip any alignment at the + end of our section. */ + if (align_gap_adjustment < adj + && aend < sec->output_section->vma + sec->output_offset + sec->size) + align_gap_adjustment = adj; + } + } + /* Walk through them looking for relaxing opportunities. */ irelend = internal_relocs + sec->reloc_count; for (irel = internal_relocs; irel < irelend; irel++) { bfd_vma symval; + bfd_signed_vma jump_offset; + asection *sym_sec = NULL; struct elf32_mn10300_link_hash_entry *h = NULL; /* If this isn't something that can be relaxed, then ignore @@ -2369,10 +2762,8 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info) { Elf_Internal_Sym *isym; - asection *sym_sec = NULL; const char *sym_name; char *new_name; - bfd_vma saved_addend; /* A local symbol. */ isym = isymbuf + ELF32_R_SYM (irel->r_info); @@ -2390,24 +2781,42 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) isym->st_name); if ((sym_sec->flags & SEC_MERGE) - && ELF_ST_TYPE (isym->st_info) == STT_SECTION && sym_sec->sec_info_type == ELF_INFO_TYPE_MERGE) { - saved_addend = irel->r_addend; - symval = _bfd_elf_rela_local_sym (abfd, isym, &sym_sec, irel); - symval += irel->r_addend; - irel->r_addend = saved_addend; + symval = isym->st_value; + + /* GAS may reduce relocations against symbols in SEC_MERGE + sections to a relocation against the section symbol when + the original addend was zero. When the reloc is against + a section symbol we should include the addend in the + offset passed to _bfd_merged_section_offset, since the + location of interest is the original symbol. On the + other hand, an access to "sym+addend" where "sym" is not + a section symbol should not include the addend; Such an + access is presumed to be an offset from "sym"; The + location of interest is just "sym". */ + if (ELF_ST_TYPE (isym->st_info) == STT_SECTION) + symval += irel->r_addend; + + symval = _bfd_merged_section_offset (abfd, & sym_sec, + elf_section_data (sym_sec)->sec_info, + symval); + + if (ELF_ST_TYPE (isym->st_info) != STT_SECTION) + symval += irel->r_addend; + + symval += sym_sec->output_section->vma + + sym_sec->output_offset - irel->r_addend; } else - { - symval = (isym->st_value - + sym_sec->output_section->vma - + sym_sec->output_offset); - } + symval = (isym->st_value + + sym_sec->output_section->vma + + sym_sec->output_offset); + /* Tack on an ID so we can uniquely identify this local symbol in the global hash table. */ new_name = bfd_malloc ((bfd_size_type) strlen (sym_name) + 10); - if (new_name == 0) + if (new_name == NULL) goto error_return; sprintf (new_name, "%s_%08x", sym_name, sym_sec->id); sym_name = new_name; @@ -2428,12 +2837,16 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) BFD_ASSERT (h != NULL); if (h->root.root.type != bfd_link_hash_defined && h->root.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; - } + /* This appears to be a reference to an undefined + symbol. Just ignore it--it will be caught by the + regular reloc processing. */ + continue; + + /* Check for a reference to a discarded symbol and ignore it. */ + if (h->root.root.u.def.section->output_section == NULL) + continue; + + sym_sec = h->root.root.u.def.section->output_section; symval = (h->root.root.u.def.value + h->root.root.u.def.section->output_section->vma @@ -2537,8 +2950,16 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) /* See if the value will fit in 16 bits, note the high value is 0x7fff + 2 as the target will be two bytes closer if we are - able to relax. */ - if ((long) value < 0x8001 && (long) value > -0x8000) + able to relax, if it's in the same section. */ + if (sec->output_section == sym_sec->output_section) + jump_offset = 0x8001; + else + jump_offset = 0x7fff; + + /* Account for jumps across alignment boundaries using + align_gap_adjustment. */ + if ((bfd_signed_vma) value < jump_offset - (bfd_signed_vma) align_gap_adjustment + && ((bfd_signed_vma) value > -0x8000 + (bfd_signed_vma) align_gap_adjustment)) { unsigned char code; @@ -3143,7 +3564,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) case 0x93: /* sp-based offsets are zero-extended. */ if (code >= 0x90 && code <= 0x93 - && (long)value < 0) + && (long) value < 0) continue; /* Note that we've changed the relocation contents, etc. */ @@ -3200,7 +3621,7 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) /* mov imm16, an zero-extends the immediate. */ if (code == 0xdc - && (long)value < 0) + && (long) value < 0) continue; /* Note that we've changed the relocation contents, etc. */ @@ -3281,12 +3702,12 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) case 0xe3: /* cmp imm16, an zero-extends the immediate. */ if (code == 0xdc - && (long)value < 0) + && (long) value < 0) continue; /* So do sp-based offsets. */ if (code >= 0xb0 && code <= 0xb3 - && (long)value < 0) + && (long) value < 0) continue; /* Note that we've changed the relocation contents, etc. */ @@ -3405,242 +3826,16 @@ mn10300_elf_relax_section (abfd, sec, link_info, again) return FALSE; } -/* Compute the stack size and movm arguments for the function - referred to by HASH at address ADDR in section with - contents CONTENTS, store the information in the hash table. */ -static void -compute_function_info (abfd, hash, addr, contents) - bfd *abfd; - struct elf32_mn10300_link_hash_entry *hash; - bfd_vma addr; - unsigned char *contents; -{ - unsigned char byte1, byte2; - /* We only care about a very small subset of the possible prologue - sequences here. Basically we look for: - - movm [d2,d3,a2,a3],sp (optional) - add ,sp (optional, and only for sizes which fit in an unsigned - 8 bit number) - - If we find anything else, we quit. */ - - /* Look for movm [regs],sp */ - byte1 = bfd_get_8 (abfd, contents + addr); - byte2 = bfd_get_8 (abfd, contents + addr + 1); - - if (byte1 == 0xcf) - { - hash->movm_args = byte2; - addr += 2; - byte1 = bfd_get_8 (abfd, contents + addr); - byte2 = bfd_get_8 (abfd, contents + addr + 1); - } - - /* Now figure out how much stack space will be allocated by the movm - instruction. We need this kept separate from the function's normal - stack space. */ - if (hash->movm_args) - { - /* Space for d2. */ - if (hash->movm_args & 0x80) - hash->movm_stack_size += 4; - - /* Space for d3. */ - if (hash->movm_args & 0x40) - hash->movm_stack_size += 4; - - /* Space for a2. */ - if (hash->movm_args & 0x20) - hash->movm_stack_size += 4; - - /* Space for a3. */ - if (hash->movm_args & 0x10) - hash->movm_stack_size += 4; - - /* "other" space. d0, d1, a0, a1, mdr, lir, lar, 4 byte pad. */ - if (hash->movm_args & 0x08) - hash->movm_stack_size += 8 * 4; - - if (bfd_get_mach (abfd) == bfd_mach_am33 - || bfd_get_mach (abfd) == bfd_mach_am33_2) - { - /* "exother" space. e0, e1, mdrq, mcrh, mcrl, mcvf */ - if (hash->movm_args & 0x1) - hash->movm_stack_size += 6 * 4; - - /* exreg1 space. e4, e5, e6, e7 */ - if (hash->movm_args & 0x2) - hash->movm_stack_size += 4 * 4; - - /* exreg0 space. e2, e3 */ - if (hash->movm_args & 0x4) - hash->movm_stack_size += 2 * 4; - } - } - - /* Now look for the two stack adjustment variants. */ - if (byte1 == 0xf8 && byte2 == 0xfe) - { - int temp = bfd_get_8 (abfd, contents + addr + 2); - temp = ((temp & 0xff) ^ (~0x7f)) + 0x80; - - hash->stack_size = -temp; - } - else if (byte1 == 0xfa && byte2 == 0xfe) - { - int temp = bfd_get_16 (abfd, contents + addr + 2); - temp = ((temp & 0xffff) ^ (~0x7fff)) + 0x8000; - temp = -temp; - - if (temp < 255) - hash->stack_size = temp; - } - - /* If the total stack to be allocated by the call instruction is more - than 255 bytes, then we can't remove the stack adjustment by using - "call" (we might still be able to remove the "movm" instruction. */ - if (hash->stack_size + hash->movm_stack_size > 255) - hash->stack_size = 0; - - return; -} - -/* Delete some bytes from a section while relaxing. */ - -static bfd_boolean -mn10300_elf_relax_delete_bytes (abfd, sec, addr, count) - 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, *isymend; - struct elf_link_hash_entry **sym_hashes; - struct elf_link_hash_entry **end_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) - isym->st_value -= count; - } - - /* Now adjust the global symbols defined in this section. */ - symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) - - symtab_hdr->sh_info); - sym_hashes = elf_sym_hashes (abfd); - end_hashes = sym_hashes + symcount; - for (; sym_hashes < end_hashes; sym_hashes++) - { - struct elf_link_hash_entry *sym_hash = *sym_hashes; - if ((sym_hash->root.type == bfd_link_hash_defined - || sym_hash->root.type == bfd_link_hash_defweak) - && sym_hash->root.u.def.section == sec - && sym_hash->root.u.def.value > addr - && sym_hash->root.u.def.value < toaddr) - { - sym_hash->root.u.def.value -= count; - } - } - - return TRUE; -} - -/* Return TRUE if a symbol exists at the given address, else return - FALSE. */ -static bfd_boolean -mn10300_elf_symbol_address_p (abfd, sec, isym, addr) - bfd *abfd; - asection *sec; - Elf_Internal_Sym *isym; - bfd_vma addr; -{ - Elf_Internal_Shdr *symtab_hdr; - unsigned int sec_shndx; - Elf_Internal_Sym *isymend; - struct elf_link_hash_entry **sym_hashes; - struct elf_link_hash_entry **end_hashes; - unsigned int symcount; - - sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); - - /* Examine all the symbols. */ - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++) - { - if (isym->st_shndx == sec_shndx - && isym->st_value == addr) - return TRUE; - } - - symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym) - - symtab_hdr->sh_info); - sym_hashes = elf_sym_hashes (abfd); - end_hashes = sym_hashes + symcount; - for (; sym_hashes < end_hashes; sym_hashes++) - { - struct elf_link_hash_entry *sym_hash = *sym_hashes; - if ((sym_hash->root.type == bfd_link_hash_defined - || sym_hash->root.type == bfd_link_hash_defweak) - && sym_hash->root.u.def.section == sec - && sym_hash->root.u.def.value == addr) - return TRUE; - } - - return FALSE; -} - /* This is a version of bfd_generic_get_relocated_section_contents which uses mn10300_elf_relocate_section. */ static bfd_byte * -mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order, - data, relocatable, symbols) - bfd *output_bfd; - struct bfd_link_info *link_info; - struct bfd_link_order *link_order; - bfd_byte *data; - bfd_boolean relocatable; - asymbol **symbols; +mn10300_elf_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; @@ -3670,9 +3865,8 @@ mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order, Elf_Internal_Sym *isym, *isymend; bfd_size_type amt; - internal_relocs = (_bfd_elf_link_read_relocs - (input_bfd, input_section, (PTR) NULL, - (Elf_Internal_Rela *) NULL, FALSE)); + internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section, + NULL, NULL, FALSE); if (internal_relocs == NULL) goto error_return; @@ -3689,7 +3883,7 @@ mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order, amt = symtab_hdr->sh_info; amt *= sizeof (asection *); - sections = (asection **) bfd_malloc (amt); + sections = bfd_malloc (amt); if (sections == NULL && amt != 0) goto error_return; @@ -3711,8 +3905,8 @@ mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order, } if (! mn10300_elf_relocate_section (output_bfd, link_info, input_bfd, - input_section, data, internal_relocs, - isymbuf, sections)) + input_section, data, internal_relocs, + isymbuf, sections)) goto error_return; if (sections != NULL) @@ -3743,28 +3937,26 @@ mn10300_elf_get_relocated_section_contents (output_bfd, link_info, link_order, /* Create an entry in an MN10300 ELF linker hash table. */ static struct bfd_hash_entry * -elf32_mn10300_link_hash_newfunc (entry, table, string) - struct bfd_hash_entry *entry; - struct bfd_hash_table *table; - const char *string; +elf32_mn10300_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { struct elf32_mn10300_link_hash_entry *ret = (struct elf32_mn10300_link_hash_entry *) entry; /* Allocate the structure if it has not already been allocated by a subclass. */ - if (ret == (struct elf32_mn10300_link_hash_entry *) NULL) - ret = ((struct elf32_mn10300_link_hash_entry *) - bfd_hash_allocate (table, - sizeof (struct elf32_mn10300_link_hash_entry))); - if (ret == (struct elf32_mn10300_link_hash_entry *) NULL) + if (ret == NULL) + ret = (struct elf32_mn10300_link_hash_entry *) + bfd_hash_allocate (table, sizeof (* ret)); + if (ret == NULL) return (struct bfd_hash_entry *) ret; /* Call the allocation method of the superclass. */ - ret = ((struct elf32_mn10300_link_hash_entry *) + ret = (struct elf32_mn10300_link_hash_entry *) _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, - table, string)); - if (ret != (struct elf32_mn10300_link_hash_entry *) NULL) + table, string); + if (ret != NULL) { ret->direct_calls = 0; ret->stack_size = 0; @@ -3780,14 +3972,13 @@ elf32_mn10300_link_hash_newfunc (entry, table, string) /* Create an mn10300 ELF linker hash table. */ static struct bfd_link_hash_table * -elf32_mn10300_link_hash_table_create (abfd) - bfd *abfd; +elf32_mn10300_link_hash_table_create (bfd *abfd) { struct elf32_mn10300_link_hash_table *ret; - bfd_size_type amt = sizeof (struct elf32_mn10300_link_hash_table); + bfd_size_type amt = sizeof (* ret); - ret = (struct elf32_mn10300_link_hash_table *) bfd_malloc (amt); - if (ret == (struct elf32_mn10300_link_hash_table *) NULL) + ret = bfd_malloc (amt); + if (ret == NULL) return NULL; if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, @@ -3800,8 +3991,7 @@ elf32_mn10300_link_hash_table_create (abfd) ret->flags = 0; amt = sizeof (struct elf_link_hash_table); - ret->static_hash_table - = (struct elf32_mn10300_link_hash_table *) bfd_malloc (amt); + ret->static_hash_table = bfd_malloc (amt); if (ret->static_hash_table == NULL) { free (ret); @@ -3816,14 +4006,13 @@ elf32_mn10300_link_hash_table_create (abfd) free (ret); return NULL; } - return &ret->root.root; + return & ret->root.root; } /* Free an mn10300 ELF linker hash table. */ static void -elf32_mn10300_link_hash_table_free (hash) - struct bfd_link_hash_table *hash; +elf32_mn10300_link_hash_table_free (struct bfd_link_hash_table *hash) { struct elf32_mn10300_link_hash_table *ret = (struct elf32_mn10300_link_hash_table *) hash; @@ -3835,8 +4024,7 @@ elf32_mn10300_link_hash_table_free (hash) } static unsigned long -elf_mn10300_mach (flags) - flagword flags; +elf_mn10300_mach (flagword flags) { switch (flags & EF_MN10300_MACH) { @@ -3856,10 +4044,9 @@ elf_mn10300_mach (flags) file. This gets the MN10300 architecture right based on the machine number. */ -void -_bfd_mn10300_elf_final_write_processing (abfd, linker) - bfd *abfd; - bfd_boolean linker ATTRIBUTE_UNUSED; +static void +_bfd_mn10300_elf_final_write_processing (bfd *abfd, + bfd_boolean linker ATTRIBUTE_UNUSED) { unsigned long val; @@ -3883,9 +4070,8 @@ _bfd_mn10300_elf_final_write_processing (abfd, linker) elf_elfheader (abfd)->e_flags |= val; } -bfd_boolean -_bfd_mn10300_elf_object_p (abfd) - bfd *abfd; +static bfd_boolean +_bfd_mn10300_elf_object_p (bfd *abfd) { bfd_default_set_arch_mach (abfd, bfd_arch_mn10300, elf_mn10300_mach (elf_elfheader (abfd)->e_flags)); @@ -3895,10 +4081,8 @@ _bfd_mn10300_elf_object_p (abfd) /* Merge backend specific data from an object file to the output object file when linking. */ -bfd_boolean -_bfd_mn10300_elf_merge_private_bfd_data (ibfd, obfd) - bfd *ibfd; - bfd *obfd; +static bfd_boolean +_bfd_mn10300_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) { if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) @@ -3915,9 +4099,9 @@ _bfd_mn10300_elf_merge_private_bfd_data (ibfd, obfd) return TRUE; } -#define PLT0_ENTRY_SIZE 15 -#define PLT_ENTRY_SIZE 20 -#define PIC_PLT_ENTRY_SIZE 24 +#define PLT0_ENTRY_SIZE 15 +#define PLT_ENTRY_SIZE 20 +#define PIC_PLT_ENTRY_SIZE 24 static const bfd_byte elf_mn10300_plt0_entry[PLT0_ENTRY_SIZE] = { @@ -3961,7 +4145,7 @@ static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] = /* Return offset of the GOT id in PLT0 entry. */ #define elf_mn10300_plt0_gotid_offset(info) 9 -/* Return offset of the temporary in PLT entry */ +/* Return offset of the temporary in PLT entry. */ #define elf_mn10300_plt_temp_offset(info) 8 /* Return offset of the symbol in PLT entry. */ @@ -3978,9 +4162,7 @@ static const bfd_byte elf_mn10300_pic_plt_entry[PIC_PLT_ENTRY_SIZE] = /* Create dynamic sections when linking against a dynamic object. */ static bfd_boolean -_bfd_mn10300_elf_create_dynamic_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; +_bfd_mn10300_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) { flagword flags; asection * s; @@ -4004,7 +4186,6 @@ _bfd_mn10300_elf_create_dynamic_sections (abfd, info) /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and .rel[a].bss sections. */ - flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED); @@ -4033,7 +4214,7 @@ _bfd_mn10300_elf_create_dynamic_sections (abfd, info) continue; secname = bfd_get_section_name (abfd, sec); - relname = (char *) bfd_malloc (strlen (secname) + 6); + relname = bfd_malloc (strlen (secname) + 6); strcpy (relname, ".rela"); strcat (relname, secname); @@ -4091,9 +4272,8 @@ _bfd_mn10300_elf_create_dynamic_sections (abfd, info) understand. */ static bfd_boolean -_bfd_mn10300_elf_adjust_dynamic_symbol (info, h) - struct bfd_link_info * info; - struct elf_link_hash_entry * h; +_bfd_mn10300_elf_adjust_dynamic_symbol (struct bfd_link_info * info, + struct elf_link_hash_entry * h) { bfd * dynobj; asection * s; @@ -4161,13 +4341,11 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (info, h) /* We also need to make an entry in the .got.plt section, which will be placed in the .got section by the linker script. */ - s = bfd_get_section_by_name (dynobj, ".got.plt"); BFD_ASSERT (s != NULL); s->size += 4; /* We also need to make an entry in the .rela.plt section. */ - s = bfd_get_section_by_name (dynobj, ".rela.plt"); BFD_ASSERT (s != NULL); s->size += sizeof (Elf32_External_Rela); @@ -4242,9 +4420,8 @@ _bfd_mn10300_elf_adjust_dynamic_symbol (info, h) /* Set the sizes of the dynamic sections. */ static bfd_boolean -_bfd_mn10300_elf_size_dynamic_sections (output_bfd, info) - bfd * output_bfd; - struct bfd_link_info * info; +_bfd_mn10300_elf_size_dynamic_sections (bfd * output_bfd, + struct bfd_link_info * info) { bfd * dynobj; asection * s; @@ -4295,7 +4472,7 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info) of the dynobj section names depend upon the input files. */ name = bfd_get_section_name (dynobj, s); - if (strcmp (name, ".plt") == 0) + if (streq (name, ".plt")) { /* Remember whether there is a PLT. */ plt = s->size != 0; @@ -4308,7 +4485,7 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info) /* Remember whether there are any reloc sections other than .rela.plt. */ - if (strcmp (name, ".rela.plt") != 0) + if (! streq (name, ".rela.plt")) { const char * outname; @@ -4334,7 +4511,7 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info) } } else if (! CONST_STRNEQ (name, ".got") - && strcmp (name, ".dynbss") != 0) + && ! streq (name, ".dynbss")) /* It's not one of our sections, so don't allocate space. */ continue; @@ -4361,7 +4538,7 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info) section's contents are written out. This should not happen, but this way if it does, we get a R_MN10300_NONE reloc instead of garbage. */ - s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size); + s->contents = bfd_zalloc (dynobj, s->size); if (s->contents == NULL) return FALSE; } @@ -4411,11 +4588,10 @@ _bfd_mn10300_elf_size_dynamic_sections (output_bfd, info) dynamic sections here. */ static bfd_boolean -_bfd_mn10300_elf_finish_dynamic_symbol (output_bfd, info, h, sym) - bfd * output_bfd; - struct bfd_link_info * info; - struct elf_link_hash_entry * h; - Elf_Internal_Sym * sym; +_bfd_mn10300_elf_finish_dynamic_symbol (bfd * output_bfd, + struct bfd_link_info * info, + struct elf_link_hash_entry * h, + Elf_Internal_Sym * sym) { bfd * dynobj; @@ -4514,14 +4690,13 @@ _bfd_mn10300_elf_finish_dynamic_symbol (output_bfd, info, h, sym) Elf_Internal_Rela rel; /* This symbol has an entry in the global offset table. Set it up. */ - sgot = bfd_get_section_by_name (dynobj, ".got"); srel = bfd_get_section_by_name (dynobj, ".rela.got"); BFD_ASSERT (sgot != NULL && srel != NULL); rel.r_offset = (sgot->output_section->vma + sgot->output_offset - + (h->got.offset &~ 1)); + + (h->got.offset & ~1)); /* If this is a -Bsymbolic link, and the symbol is defined locally, we just want to emit a RELATIVE reloc. Likewise if @@ -4569,14 +4744,14 @@ _bfd_mn10300_elf_finish_dynamic_symbol (output_bfd, info, h, sym) + h->root.u.def.section->output_offset); rel.r_info = ELF32_R_INFO (h->dynindx, R_MN10300_COPY); rel.r_addend = 0; - bfd_elf32_swap_reloca_out (output_bfd, &rel, + bfd_elf32_swap_reloca_out (output_bfd, & rel, (bfd_byte *) ((Elf32_External_Rela *) s->contents + s->reloc_count)); ++ s->reloc_count; } /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ - if (strcmp (h->root.root.string, "_DYNAMIC") == 0 + if (streq (h->root.root.string, "_DYNAMIC") || h == elf_hash_table (info)->hgot) sym->st_shndx = SHN_ABS; @@ -4586,9 +4761,8 @@ _bfd_mn10300_elf_finish_dynamic_symbol (output_bfd, info, h, sym) /* Finish up the dynamic sections. */ static bfd_boolean -_bfd_mn10300_elf_finish_dynamic_sections (output_bfd, info) - bfd * output_bfd; - struct bfd_link_info * info; +_bfd_mn10300_elf_finish_dynamic_sections (bfd * output_bfd, + struct bfd_link_info * info) { bfd * dynobj; asection * sgot; @@ -4714,14 +4888,10 @@ _bfd_mn10300_elf_reloc_type_class (const Elf_Internal_Rela *rela) { switch ((int) ELF32_R_TYPE (rela->r_info)) { - case R_MN10300_RELATIVE: - return reloc_class_relative; - case R_MN10300_JMP_SLOT: - return reloc_class_plt; - case R_MN10300_COPY: - return reloc_class_copy; - default: - return reloc_class_normal; + case R_MN10300_RELATIVE: return reloc_class_relative; + case R_MN10300_JMP_SLOT: return reloc_class_plt; + case R_MN10300_COPY: return reloc_class_copy; + default: return reloc_class_normal; } } diff --git a/bfd/elf-strtab.c b/bfd/elf-strtab.c index 018c42c..7d2fad4 100644 --- a/bfd/elf-strtab.c +++ b/bfd/elf-strtab.c @@ -1,5 +1,5 @@ /* ELF strtab with GC and suffix merging support. - Copyright 2001, 2002, 2003, 2005, 2006, 2007 + Copyright 2001, 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Jakub Jelinek . @@ -68,7 +68,8 @@ elf_strtab_hash_newfunc (struct bfd_hash_entry *entry, /* Allocate the structure if it has not already been allocated by a subclass. */ if (entry == NULL) - entry = bfd_hash_allocate (table, sizeof (struct elf_strtab_hash_entry)); + entry = (struct bfd_hash_entry *) + bfd_hash_allocate (table, sizeof (struct elf_strtab_hash_entry)); if (entry == NULL) return NULL; @@ -97,7 +98,7 @@ _bfd_elf_strtab_init (void) struct elf_strtab_hash *table; bfd_size_type amt = sizeof (struct elf_strtab_hash); - table = bfd_malloc (amt); + table = (struct elf_strtab_hash *) bfd_malloc (amt); if (table == NULL) return NULL; @@ -112,7 +113,8 @@ _bfd_elf_strtab_init (void) table->size = 1; table->alloced = 64; amt = sizeof (struct elf_strtab_hasn_entry *); - table->array = bfd_malloc (table->alloced * amt); + table->array = (struct elf_strtab_hash_entry **) + bfd_malloc (table->alloced * amt); if (table->array == NULL) { free (table); @@ -166,7 +168,8 @@ _bfd_elf_strtab_add (struct elf_strtab_hash *tab, { bfd_size_type amt = sizeof (struct elf_strtab_hash_entry *); tab->alloced *= 2; - tab->array = bfd_realloc (tab->array, tab->alloced * amt); + tab->array = (struct elf_strtab_hash_entry **) + bfd_realloc_or_free (tab->array, tab->alloced * amt); if (tab->array == NULL) return (bfd_size_type) -1; } @@ -311,7 +314,7 @@ _bfd_elf_strtab_finalize (struct elf_strtab_hash *tab) /* Sort the strings by suffix and length. */ amt = tab->size * sizeof (struct elf_strtab_hash_entry *); - array = bfd_malloc (amt); + array = (struct elf_strtab_hash_entry **) bfd_malloc (amt); if (array == NULL) goto alloc_failure; diff --git a/bfd/elf-vxworks.c b/bfd/elf-vxworks.c index 98d2dfc..06edf8d 100644 --- a/bfd/elf-vxworks.c +++ b/bfd/elf-vxworks.c @@ -1,5 +1,5 @@ /* VxWorks support for ELF - Copyright 2005, 2007 Free Software Foundation, Inc. + Copyright 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -25,6 +25,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf-vxworks.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. */ @@ -126,7 +127,7 @@ elf_vxworks_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info, } /* Tweak magic VxWorks symbols as they are written to the output file. */ -bfd_boolean +int elf_vxworks_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED, const char *name, @@ -140,11 +141,10 @@ elf_vxworks_link_output_symbol_hook (struct bfd_link_info *info && 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; + return 1; } - -/* Copy relocations into the output file. Fixes up relocations againt PLT +/* Copy relocations into the output file. Fixes up relocations against PLT entries, then calls the generic routine. */ bfd_boolean @@ -155,49 +155,55 @@ elf_vxworks_emit_relocs (bfd *output_bfd, struct elf_link_hash_entry **rel_hash) { const struct elf_backend_data *bed; - Elf_Internal_Rela *irela; - Elf_Internal_Rela *irelaend; int j; bed = get_elf_backend_data (output_bfd); - irela = internal_relocs; - irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr) - * bed->s->int_rels_per_ext_rel); - while (irela < irelaend) + if (output_bfd->flags & (DYNAMIC|EXEC_P)) { - if ((output_bfd->flags & (DYNAMIC|EXEC_P)) - && *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_defweak) - && (*rel_hash)->root.u.def.section->output_section != NULL) + Elf_Internal_Rela *irela; + Elf_Internal_Rela *irelaend; + struct elf_link_hash_entry **hash_ptr; + + for (irela = internal_relocs, + irelaend = irela + (NUM_SHDR_ENTRIES (input_rel_hdr) + * bed->s->int_rels_per_ext_rel), + hash_ptr = rel_hash; + irela < irelaend; + irela += bed->s->int_rels_per_ext_rel, + hash_ptr++) { - /* This is a relocation from an executable or shared library - against a symbol in a different shared library. We are - creating a definition in the output file but it does not come - from any of our normal (.o) files. ie. a PLT stub. - Normally this would be a relocation against against SHN_UNDEF - with the VMA of the PLT stub. This upsets the VxWorks loader. - Convert it to a section-relative relocation. - This gets some other symbols (for instance .dynbss), - but is conservatively correct. */ - for (j = 0; j < bed->s->int_rels_per_ext_rel; j++) + if (*hash_ptr + && (*hash_ptr)->def_dynamic + && !(*hash_ptr)->def_regular + && ((*hash_ptr)->root.type == bfd_link_hash_defined + || (*hash_ptr)->root.type == bfd_link_hash_defweak) + && (*hash_ptr)->root.u.def.section->output_section != NULL) { - asection *sec = (*rel_hash)->root.u.def.section; - int this_idx = sec->output_section->target_index; - - irela[j].r_info = ELF32_R_INFO (this_idx, - ELF32_R_TYPE (irela[j].r_info)); - irela[j].r_addend += (*rel_hash)->root.u.def.value; - irela[j].r_addend += sec->output_offset; + /* This is a relocation from an executable or shared + library against a symbol in a different shared + library. We are creating a definition in the output + file but it does not come from any of our normal (.o) + files. ie. a PLT stub. Normally this would be a + relocation against against SHN_UNDEF with the VMA of + the PLT stub. This upsets the VxWorks loader. + Convert it to a section-relative relocation. This + gets some other symbols (for instance .dynbss), but + is conservatively correct. */ + for (j = 0; j < bed->s->int_rels_per_ext_rel; j++) + { + asection *sec = (*hash_ptr)->root.u.def.section; + int this_idx = sec->output_section->target_index; + + irela[j].r_info + = ELF32_R_INFO (this_idx, ELF32_R_TYPE (irela[j].r_info)); + irela[j].r_addend += (*hash_ptr)->root.u.def.value; + irela[j].r_addend += sec->output_offset; + } + /* Stop the generic routine adjusting this entry. */ + *hash_ptr = NULL; } - /* Stop the generic routine adjusting this entry. */ - *rel_hash = NULL; } - irela += bed->s->int_rels_per_ext_rel; - rel_hash++; } return _bfd_elf_link_output_relocs (output_bfd, input_section, input_rel_hdr, internal_relocs, @@ -225,3 +231,69 @@ elf_vxworks_final_write_processing (bfd *abfd, if (sec) d->this_hdr.sh_info = elf_section_data (sec)->this_idx; } + +/* Add the dynamic entries required by VxWorks. These point to the + tls sections. */ + +bfd_boolean +elf_vxworks_add_dynamic_entries (bfd *output_bfd, struct bfd_link_info *info) +{ + if (bfd_get_section_by_name (output_bfd, ".tls_data")) + { + if (!_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_DATA_START, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_DATA_SIZE, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_DATA_ALIGN, 0)) + return FALSE; + } + if (bfd_get_section_by_name (output_bfd, ".tls_vars")) + { + if (!_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_VARS_START, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_VX_WRS_TLS_VARS_SIZE, 0)) + return FALSE; + } + return TRUE; +} + +/* If *DYN is one of the VxWorks-specific dynamic entries, then fill + in the value now and return TRUE. Otherwise return FALSE. */ + +bfd_boolean +elf_vxworks_finish_dynamic_entry (bfd *output_bfd, Elf_Internal_Dyn *dyn) +{ + asection *sec; + + switch (dyn->d_tag) + { + default: + return FALSE; + + case DT_VX_WRS_TLS_DATA_START: + sec = bfd_get_section_by_name (output_bfd, ".tls_data"); + dyn->d_un.d_ptr = sec->vma; + break; + + case DT_VX_WRS_TLS_DATA_SIZE: + sec = bfd_get_section_by_name (output_bfd, ".tls_data"); + dyn->d_un.d_val = sec->size; + break; + + case DT_VX_WRS_TLS_DATA_ALIGN: + sec = bfd_get_section_by_name (output_bfd, ".tls_data"); + dyn->d_un.d_val + = (bfd_size_type)1 << bfd_get_section_alignment (abfd, sec); + break; + + case DT_VX_WRS_TLS_VARS_START: + sec = bfd_get_section_by_name (output_bfd, ".tls_vars"); + dyn->d_un.d_ptr = sec->vma; + break; + + case DT_VX_WRS_TLS_VARS_SIZE: + sec = bfd_get_section_by_name (output_bfd, ".tls_vars"); + dyn->d_un.d_val = sec->size; + break; + } + return TRUE; +} + + diff --git a/bfd/elf-vxworks.h b/bfd/elf-vxworks.h index 1b461d0..4a9ed1d 100644 --- a/bfd/elf-vxworks.h +++ b/bfd/elf-vxworks.h @@ -1,5 +1,5 @@ /* VxWorks support for ELF - Copyright 2005, 2007 Free Software Foundation, Inc. + Copyright 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -33,3 +33,6 @@ bfd_boolean elf_vxworks_emit_relocs void elf_vxworks_final_write_processing (bfd *, bfd_boolean); bfd_boolean elf_vxworks_create_dynamic_sections (bfd *, struct bfd_link_info *, asection **); +bfd_boolean elf_vxworks_add_dynamic_entries (bfd *, struct bfd_link_info *); +bfd_boolean elf_vxworks_finish_dynamic_entry (bfd *, Elf_Internal_Dyn *); + diff --git a/bfd/elf.c b/bfd/elf.c index eaba79e..e7116d8 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1,7 +1,8 @@ /* ELF executable support for BFD. Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -48,7 +49,9 @@ static int elf_sort_sections (const void *, const void *); static bfd_boolean assign_file_positions_except_relocs (bfd *, struct bfd_link_info *); static bfd_boolean prep_headers (bfd *); static bfd_boolean swap_out_syms (bfd *, struct bfd_strtab_hash **, int) ; -static bfd_boolean elfcore_read_notes (bfd *, file_ptr, bfd_size_type) ; +static bfd_boolean elf_read_notes (bfd *, file_ptr, bfd_size_type) ; +static bfd_boolean elf_parse_notes (bfd *abfd, char *buf, size_t size, + file_ptr offset); /* Swap version information in and out. The version information is currently size independent. If that ever changes, this code will @@ -224,29 +227,39 @@ bfd_elf_gnu_hash (const char *namearg) return h & 0xffffffff; } +/* Create a tdata field OBJECT_SIZE bytes in length, zeroed out and with + the object_id field of an elf_obj_tdata field set to OBJECT_ID. */ bfd_boolean -bfd_elf_mkobject (bfd *abfd) +bfd_elf_allocate_object (bfd *abfd, + size_t object_size, + enum elf_object_id object_id) { + BFD_ASSERT (object_size >= sizeof (struct elf_obj_tdata)); + abfd->tdata.any = bfd_zalloc (abfd, object_size); 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 FALSE; + elf_object_id (abfd) = object_id; + elf_program_header_size (abfd) = (bfd_size_type) -1; return TRUE; } + +bfd_boolean +bfd_elf_make_generic_object (bfd *abfd) +{ + return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata), + GENERIC_ELF_TDATA); +} + bfd_boolean bfd_elf_mkcorefile (bfd *abfd) { /* I think this can be done just like an object file. */ - return bfd_elf_mkobject (abfd); + return bfd_elf_make_generic_object (abfd); } -char * +static char * bfd_elf_get_str_section (bfd *abfd, unsigned int shindex) { Elf_Internal_Shdr **i_shdrp; @@ -269,8 +282,8 @@ bfd_elf_get_str_section (bfd *abfd, unsigned int shindex) /* Allocate and clear an extra byte at the end, to prevent crashes in case the string table is not terminated. */ - if (shstrtabsize + 1 == 0 - || (shstrtab = bfd_alloc (abfd, shstrtabsize + 1)) == NULL + if (shstrtabsize + 1 <= 1 + || (shstrtab = (bfd_byte *) bfd_alloc (abfd, shstrtabsize + 1)) == NULL || bfd_seek (abfd, offset, SEEK_SET) != 0) shstrtab = NULL; else if (bfd_bread (shstrtab, shstrtabsize, abfd) != shstrtabsize) @@ -278,6 +291,10 @@ bfd_elf_get_str_section (bfd *abfd, unsigned int shindex) if (bfd_get_error () != bfd_error_system_call) bfd_set_error (bfd_error_file_truncated); shstrtab = NULL; + /* Once we've failed to read it, make sure we don't keep + trying. Otherwise, we'll keep allocating space for + the string table over and over. */ + i_shdrp[shindex]->sh_size = 0; } else shstrtab[shstrtabsize] = '\0'; @@ -314,7 +331,7 @@ bfd_elf_string_from_elf_section (bfd *abfd, (shindex == shstrndx && strindex == hdr->sh_name ? ".shstrtab" : bfd_elf_string_from_elf_section (abfd, shstrndx, hdr->sh_name))); - return ""; + return NULL; } return ((char *) hdr->contents) + strindex; @@ -324,7 +341,9 @@ bfd_elf_string_from_elf_section (bfd *abfd, SYMCOUNT specifies the number of symbols to read, starting from symbol SYMOFFSET. If any of INTSYM_BUF, EXTSYM_BUF or EXTSHNDX_BUF are non-NULL, they are used to store the internal symbols, external - symbols, and symbol section index extensions, respectively. */ + symbols, and symbol section index extensions, respectively. + Returns a pointer to the internal symbol buffer (malloced if necessary) + or NULL if there were no symbols or some kind of problem. */ Elf_Internal_Sym * bfd_elf_get_elf_syms (bfd *ibfd, @@ -340,6 +359,7 @@ bfd_elf_get_elf_syms (bfd *ibfd, const bfd_byte *esym; Elf_External_Sym_Shndx *alloc_extshndx; Elf_External_Sym_Shndx *shndx; + Elf_Internal_Sym *alloc_intsym; Elf_Internal_Sym *isym; Elf_Internal_Sym *isymend; const struct elf_backend_data *bed; @@ -347,6 +367,9 @@ bfd_elf_get_elf_syms (bfd *ibfd, bfd_size_type amt; file_ptr pos; + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + abort (); + if (symcount == 0) return intsym_buf; @@ -358,6 +381,7 @@ bfd_elf_get_elf_syms (bfd *ibfd, /* Read the symbols. */ alloc_ext = NULL; alloc_extshndx = NULL; + alloc_intsym = NULL; bed = get_elf_backend_data (ibfd); extsym_size = bed->s->sizeof_sym; amt = symcount * extsym_size; @@ -383,8 +407,8 @@ bfd_elf_get_elf_syms (bfd *ibfd, pos = shndx_hdr->sh_offset + symoffset * sizeof (Elf_External_Sym_Shndx); if (extshndx_buf == NULL) { - alloc_extshndx = bfd_malloc2 (symcount, - sizeof (Elf_External_Sym_Shndx)); + alloc_extshndx = (Elf_External_Sym_Shndx *) + bfd_malloc2 (symcount, sizeof (Elf_External_Sym_Shndx)); extshndx_buf = alloc_extshndx; } if (extshndx_buf == NULL @@ -398,14 +422,17 @@ bfd_elf_get_elf_syms (bfd *ibfd, if (intsym_buf == NULL) { - intsym_buf = bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym)); + alloc_intsym = (Elf_Internal_Sym *) + bfd_malloc2 (symcount, sizeof (Elf_Internal_Sym)); + intsym_buf = alloc_intsym; if (intsym_buf == NULL) goto out; } /* Convert the symbols to internal form. */ isymend = intsym_buf + symcount; - for (esym = extsym_buf, isym = intsym_buf, shndx = extshndx_buf; + for (esym = (const bfd_byte *) extsym_buf, isym = intsym_buf, + shndx = extshndx_buf; isym < isymend; esym += extsym_size, isym++, shndx = shndx != NULL ? shndx + 1 : NULL) if (!(*bed->s->swap_symbol_in) (ibfd, esym, shndx, isym)) @@ -414,6 +441,8 @@ bfd_elf_get_elf_syms (bfd *ibfd, (*_bfd_error_handler) (_("%B symbol number %lu references " "nonexistent SHT_SYMTAB_SHNDX section"), ibfd, (unsigned long) symoffset); + if (alloc_intsym != NULL) + free (alloc_intsym); intsym_buf = NULL; goto out; } @@ -440,8 +469,7 @@ bfd_elf_sym_name (bfd *abfd, if (iname == 0 && ELF_ST_TYPE (isym->st_info) == STT_SECTION /* Check for a bogus st_shndx to avoid crashing. */ - && isym->st_shndx < elf_numsections (abfd) - && !(isym->st_shndx >= SHN_LORESERVE && isym->st_shndx <= SHN_HIRESERVE)) + && isym->st_shndx < elf_numsections (abfd)) { iname = elf_elfsections (abfd)[isym->st_shndx]->sh_name; shindex = elf_elfheader (abfd)->e_shstrndx; @@ -478,6 +506,8 @@ group_signature (bfd *abfd, Elf_Internal_Shdr *ghdr) /* First we need to ensure the symbol table is available. Make sure that it is a symbol table section. */ + if (ghdr->sh_link >= elf_numsections (abfd)) + return NULL; hdr = elf_elfsections (abfd) [ghdr->sh_link]; if (hdr->sh_type != SHT_SYMTAB || ! bfd_section_from_shdr (abfd, ghdr->sh_link)) @@ -536,8 +566,8 @@ setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect) bfd_size_type amt; elf_tdata (abfd)->num_group = num_group; - elf_tdata (abfd)->group_sect_ptr - = bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *)); + elf_tdata (abfd)->group_sect_ptr = (Elf_Internal_Shdr **) + bfd_alloc2 (abfd, num_group, sizeof (Elf_Internal_Shdr *)); if (elf_tdata (abfd)->group_sect_ptr == NULL) return FALSE; @@ -558,8 +588,8 @@ setup_group (bfd *abfd, Elf_Internal_Shdr *hdr, asection *newsect) /* Read the raw contents. */ BFD_ASSERT (sizeof (*dest) >= 4); amt = shdr->sh_size * sizeof (*dest) / 4; - shdr->contents = bfd_alloc2 (abfd, shdr->sh_size, - sizeof (*dest) / 4); + shdr->contents = (unsigned char *) + bfd_alloc2 (abfd, shdr->sh_size, sizeof (*dest) / 4); /* PR binutils/4110: Handle corrupt group headers. */ if (shdr->contents == NULL) { @@ -696,8 +726,7 @@ _bfd_elf_setup_sections (bfd *abfd) get the situation where elfsec is 0. */ if (elfsec == 0) { - const struct elf_backend_data *bed - = get_elf_backend_data (abfd); + const struct elf_backend_data *bed = get_elf_backend_data (abfd); if (bed->link_order_error_handler) bed->link_order_error_handler (_("%B: warning: sh_link not set for section `%A'"), @@ -705,14 +734,17 @@ _bfd_elf_setup_sections (bfd *abfd) } else { - asection *link; + asection *link = NULL; - this_hdr = elf_elfsections (abfd)[elfsec]; + if (elfsec < elf_numsections (abfd)) + { + this_hdr = elf_elfsections (abfd)[elfsec]; + link = this_hdr->bfd_section; + } /* PR 1991, 2008: Some strip/objcopy may leave an incorrect value in sh_link. We don't want to proceed. */ - link = this_hdr->bfd_section; if (link == NULL) { (*_bfd_error_handler) @@ -808,7 +840,7 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, if (! bfd_set_section_vma (abfd, newsect, hdr->sh_addr) || ! bfd_set_section_size (abfd, newsect, hdr->sh_size) || ! bfd_set_section_alignment (abfd, newsect, - bfd_log2 ((bfd_vma) hdr->sh_addralign))) + bfd_log2 (hdr->sh_addralign))) return FALSE; flags = SEC_NO_FLAGS; @@ -866,7 +898,14 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, { NULL, 0 }, /* 'p' */ { NULL, 0 }, /* 'q' */ { NULL, 0 }, /* 'r' */ - { STRING_COMMA_LEN ("stab") } /* 's' */ + { STRING_COMMA_LEN ("stab") }, /* 's' */ + { NULL, 0 }, /* 't' */ + { NULL, 0 }, /* 'u' */ + { NULL, 0 }, /* 'v' */ + { NULL, 0 }, /* 'w' */ + { NULL, 0 }, /* 'x' */ + { NULL, 0 }, /* 'y' */ + { STRING_COMMA_LEN ("zdebug") } /* 'z' */ }; if (name [0] == '.') @@ -899,68 +938,66 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, if (! bfd_set_section_flags (abfd, newsect, flags)) return FALSE; + /* We do not parse the PT_NOTE segments as we are interested even in the + separate debug info files which may have the segments offsets corrupted. + PT_NOTEs from the core files are currently not parsed using BFD. */ + if (hdr->sh_type == SHT_NOTE) + { + bfd_byte *contents; + + if (!bfd_malloc_and_get_section (abfd, newsect, &contents)) + return FALSE; + + elf_parse_notes (abfd, (char *) contents, hdr->sh_size, -1); + free (contents); + } + if ((flags & SEC_ALLOC) != 0) { Elf_Internal_Phdr *phdr; - unsigned int i; + unsigned int i, nload; + + /* Some ELF linkers produce binaries with all the program header + p_paddr fields zero. If we have such a binary with more than + one PT_LOAD header, then leave the section lma equal to vma + so that we don't create sections with overlapping lma. */ + phdr = elf_tdata (abfd)->phdr; + for (nload = 0, i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++) + if (phdr->p_paddr != 0) + break; + else if (phdr->p_type == PT_LOAD && phdr->p_memsz != 0) + ++nload; + if (i >= elf_elfheader (abfd)->e_phnum && nload > 1) + return TRUE; - /* 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. */ phdr = elf_tdata (abfd)->phdr; for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++) { - if (phdr->p_paddr != 0) - break; - } - if (i < elf_elfheader (abfd)->e_phnum) - { - phdr = elf_tdata (abfd)->phdr; - for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++) + if (phdr->p_type == PT_LOAD + && ELF_IS_SECTION_IN_SEGMENT (hdr, phdr)) { - /* This section is part of this segment if its file - offset plus size lies within the segment's memory - span and, if the section is loaded, the extent of the - loaded data lies within the extent of the segment. - - Note - we used to check the p_paddr field as well, and - 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. */ - if (phdr->p_type == PT_LOAD - && (bfd_vma) hdr->sh_offset >= phdr->p_offset - && (hdr->sh_offset + hdr->sh_size - <= phdr->p_offset + phdr->p_memsz) - && ((flags & SEC_LOAD) == 0 - || (hdr->sh_offset + hdr->sh_size - <= phdr->p_offset + phdr->p_filesz))) - { - if ((flags & SEC_LOAD) == 0) - newsect->lma = (phdr->p_paddr - + hdr->sh_addr - phdr->p_vaddr); - else - /* We used to use the same adjustment for SEC_LOAD - sections, but that doesn't work if the segment - is packed with code from multiple VMAs. - Instead we calculate the section LMA based on - the segment LMA. It is assumed that the - segment will contain sections with contiguous - LMAs, even if the VMAs are not. */ - newsect->lma = (phdr->p_paddr - + hdr->sh_offset - phdr->p_offset); - - /* With contiguous segments, we can't tell from file - offsets whether a section with zero size should - be placed at the end of one segment or the - beginning of the next. Decide based on vaddr. */ - if (hdr->sh_addr >= phdr->p_vaddr - && (hdr->sh_addr + hdr->sh_size - <= phdr->p_vaddr + phdr->p_memsz)) - break; - } + if ((flags & SEC_LOAD) == 0) + newsect->lma = (phdr->p_paddr + + hdr->sh_addr - phdr->p_vaddr); + else + /* We used to use the same adjustment for SEC_LOAD + sections, but that doesn't work if the segment + is packed with code from multiple VMAs. + Instead we calculate the section LMA based on + the segment LMA. It is assumed that the + segment will contain sections with contiguous + LMAs, even if the VMAs are not. */ + newsect->lma = (phdr->p_paddr + + hdr->sh_offset - phdr->p_offset); + + /* With contiguous segments, we can't tell from file + offsets whether a section with zero size should + be placed at the end of one segment or the + beginning of the next. Decide based on vaddr. */ + if (hdr->sh_addr >= phdr->p_vaddr + && (hdr->sh_addr + hdr->sh_size + <= phdr->p_vaddr + phdr->p_memsz)) + break; } } } @@ -968,45 +1005,6 @@ _bfd_elf_make_section_from_shdr (bfd *abfd, return TRUE; } -/* -INTERNAL_FUNCTION - 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. -*/ - -struct elf_internal_shdr * -bfd_elf_find_section (bfd *abfd, char *name) -{ - Elf_Internal_Shdr **i_shdrp; - char *shstrtab; - unsigned int max; - unsigned int i; - - i_shdrp = elf_elfsections (abfd); - if (i_shdrp != NULL) - { - shstrtab = bfd_elf_get_str_section (abfd, - elf_elfheader (abfd)->e_shstrndx); - if (shstrtab != NULL) - { - max = elf_numsections (abfd); - for (i = 1; i < max; i++) - if (!strcmp (&shstrtab[i_shdrp[i]->sh_name], name)) - return i_shdrp[i]; - } - } - return 0; -} - const char *const bfd_elf_section_type_names[] = { "SHT_NULL", "SHT_PROGBITS", "SHT_SYMTAB", "SHT_STRTAB", "SHT_RELA", "SHT_HASH", "SHT_DYNAMIC", "SHT_NOTE", @@ -1095,7 +1093,7 @@ get_segment_type (unsigned int p_type) bfd_boolean _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) { - FILE *f = farg; + FILE *f = (FILE *) farg; Elf_Internal_Phdr *p; asection *s; bfd_byte *dynbuf = NULL; @@ -1141,7 +1139,7 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) s = bfd_get_section_by_name (abfd, ".dynamic"); if (s != NULL) { - int elfsec; + unsigned int elfsec; unsigned long shlink; bfd_byte *extdyn, *extdynend; size_t extdynsize; @@ -1153,7 +1151,7 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) goto error_return; elfsec = _bfd_elf_section_from_bfd_section (abfd, s); - if (elfsec == -1) + if (elfsec == SHN_BAD) goto error_return; shlink = elf_elfsections (abfd)[elfsec]->sh_link; @@ -1165,9 +1163,10 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) for (; extdyn < extdynend; extdyn += extdynsize) { Elf_Internal_Dyn dyn; - const char *name; + const char *name = ""; char ab[20]; bfd_boolean stringp; + const struct elf_backend_data *bed = get_elf_backend_data (abfd); (*swap_dyn_in) (abfd, extdyn, &dyn); @@ -1178,8 +1177,14 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) switch (dyn.d_tag) { default: - sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag); - name = ab; + if (bed->elf_backend_get_target_dtag) + name = (*bed->elf_backend_get_target_dtag) (dyn.d_tag); + + if (!strcmp (name, "")) + { + sprintf (ab, "0x%lx", (unsigned long) dyn.d_tag); + name = ab; + } break; case DT_NEEDED: name = "NEEDED"; stringp = TRUE; break; @@ -1242,9 +1247,12 @@ _bfd_elf_print_private_bfd_data (bfd *abfd, void *farg) case DT_GNU_HASH: name = "GNU_HASH"; break; } - fprintf (f, " %-11s ", name); + fprintf (f, " %-20s ", name); if (! stringp) - fprintf (f, "0x%lx", (unsigned long) dyn.d_un.d_val); + { + fprintf (f, "0x"); + bfd_fprintf_vma (abfd, f, dyn.d_un.d_val); + } else { const char *string; @@ -1328,7 +1336,7 @@ bfd_elf_print_symbol (bfd *abfd, asymbol *symbol, bfd_print_symbol_type how) { - FILE *file = filep; + FILE *file = (FILE *) filep; switch (how) { case bfd_print_symbol_name: @@ -1337,7 +1345,7 @@ bfd_elf_print_symbol (bfd *abfd, case bfd_print_symbol_more: fprintf (file, "elf "); bfd_fprintf_vma (abfd, file, symbol->value); - fprintf (file, " %lx", (long) symbol->flags); + fprintf (file, " %lx", (unsigned long) symbol->flags); break; case bfd_print_symbol_all: { @@ -1472,17 +1480,22 @@ _bfd_elf_stringtab_init (void) bfd_boolean bfd_section_from_shdr (bfd *abfd, unsigned int shindex) { - Elf_Internal_Shdr *hdr = elf_elfsections (abfd)[shindex]; - Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd); - const struct elf_backend_data *bed = get_elf_backend_data (abfd); + Elf_Internal_Shdr *hdr; + Elf_Internal_Ehdr *ehdr; + const struct elf_backend_data *bed; const char *name; - name = bfd_elf_string_from_elf_section (abfd, - elf_elfheader (abfd)->e_shstrndx, + if (shindex >= elf_numsections (abfd)) + return FALSE; + + hdr = elf_elfsections (abfd)[shindex]; + ehdr = elf_elfheader (abfd); + name = bfd_elf_string_from_elf_section (abfd, ehdr->e_shstrndx, hdr->sh_name); if (name == NULL) return FALSE; + bed = get_elf_backend_data (abfd); switch (hdr->sh_type) { case SHT_NULL: @@ -1503,10 +1516,24 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) case SHT_DYNAMIC: /* Dynamic linking information. */ if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; - if (hdr->sh_link > elf_numsections (abfd) - || elf_elfsections (abfd)[hdr->sh_link] == NULL) + if (hdr->sh_link > elf_numsections (abfd)) + { + /* PR 10478: Accept sparc binaries with a sh_link + field set to SHN_BEFORE or SHN_AFTER. */ + switch (bfd_get_arch (abfd)) + { + case bfd_arch_sparc: + if (hdr->sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */ + || hdr->sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */) + break; + /* Otherwise fall through. */ + default: + return FALSE; + } + } + else if (elf_elfsections (abfd)[hdr->sh_link] == NULL) return FALSE; - if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB) + else if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_STRTAB) { Elf_Internal_Shdr *dynsymhdr; @@ -1542,6 +1569,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) if (hdr->sh_entsize != bed->s->sizeof_sym) return FALSE; + if (hdr->sh_info * hdr->sh_entsize > hdr->sh_size) + return FALSE; BFD_ASSERT (elf_onesymtab (abfd) == 0); elf_onesymtab (abfd) = shindex; elf_tdata (abfd)->symtab_hdr = *hdr; @@ -1683,8 +1712,7 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) return FALSE; /* Check for a bogus link to avoid crashing. */ - if ((hdr->sh_link >= SHN_LORESERVE && hdr->sh_link <= SHN_HIRESERVE) - || hdr->sh_link >= num_sec) + if (hdr->sh_link >= num_sec) { ((*_bfd_error_handler) (_("%B: invalid link %lu for reloc section %s (index %u)"), @@ -1699,8 +1727,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) reject them, but, unfortunately, some people need to use them. We scan through the section headers; if we find only one suitable symbol table, we clobber the sh_link to point - to it. I hope this doesn't break anything. */ - if (elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB + to it. I hope this doesn't break anything. + + Don't do it on executable nor shared library. */ + if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 + && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_SYMTAB && elf_elfsections (abfd)[hdr->sh_link]->sh_type != SHT_DYNSYM) { unsigned int scan; @@ -1735,10 +1766,11 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) represent such a section, so at least for now, we don't try. We just present it as a normal section. We also can't use it as a reloc section if it points to the null - section, an invalid section, or another reloc section. */ + section, an invalid section, another reloc section, or its + sh_link points to the null section. */ if (hdr->sh_link != elf_onesymtab (abfd) + || hdr->sh_link == SHN_UNDEF || hdr->sh_info == SHN_UNDEF - || (hdr->sh_info >= SHN_LORESERVE && hdr->sh_info <= SHN_HIRESERVE) || hdr->sh_info >= num_sec || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_REL || elf_elfsections (abfd)[hdr->sh_info]->sh_type == SHT_RELA) @@ -1759,7 +1791,9 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) bfd_size_type amt; BFD_ASSERT (elf_section_data (target_sect)->rel_hdr2 == NULL); amt = sizeof (*hdr2); - hdr2 = bfd_alloc (abfd, amt); + hdr2 = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt); + if (hdr2 == NULL) + return FALSE; elf_section_data (target_sect)->rel_hdr2 = hdr2; } *hdr2 = *hdr; @@ -1797,14 +1831,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) return TRUE; case SHT_GROUP: - /* We need a BFD section for objcopy and relocatable linking, - and it's handy to have the signature available as the section - name. */ if (! IS_VALID_GROUP_SECTION_HEADER (hdr)) return FALSE; - name = group_signature (abfd, hdr); - if (name == NULL) - return FALSE; if (!_bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) return FALSE; if (hdr->contents != NULL) @@ -1897,28 +1925,24 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) return TRUE; } -/* Return the section for the local symbol specified by ABFD, R_SYMNDX. - Return SEC for sections that have no elf section, and NULL on error. */ +/* Return the local symbol specified by ABFD, R_SYMNDX. */ -asection * -bfd_section_from_r_symndx (bfd *abfd, - struct sym_sec_cache *cache, - asection *sec, - unsigned long r_symndx) +Elf_Internal_Sym * +bfd_sym_from_r_symndx (struct sym_cache *cache, + bfd *abfd, + unsigned long r_symndx) { unsigned int ent = r_symndx % LOCAL_SYM_CACHE_SIZE; - asection *s; if (cache->abfd != abfd || cache->indx[ent] != r_symndx) { Elf_Internal_Shdr *symtab_hdr; unsigned char esym[sizeof (Elf64_External_Sym)]; Elf_External_Sym_Shndx eshndx; - Elf_Internal_Sym isym; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; if (bfd_elf_get_elf_syms (abfd, symtab_hdr, 1, r_symndx, - &isym, esym, &eshndx) == NULL) + &cache->sym[ent], esym, &eshndx) == NULL) return NULL; if (cache->abfd != abfd) @@ -1927,14 +1951,9 @@ bfd_section_from_r_symndx (bfd *abfd, cache->abfd = abfd; } cache->indx[ent] = r_symndx; - cache->shndx[ent] = isym.st_shndx; } - s = bfd_section_from_elf_index (abfd, cache->shndx[ent]); - if (s != NULL) - return s; - - return sec; + return &cache->sym[ent]; } /* Given an ELF section number, retrieve the corresponding BFD @@ -2057,10 +2076,19 @@ static const struct bfd_elf_special_section special_sections_t[] = { NULL, 0, 0, 0, 0 } }; +static const struct bfd_elf_special_section special_sections_z[] = +{ + { STRING_COMMA_LEN (".zdebug_line"), 0, SHT_PROGBITS, 0 }, + { STRING_COMMA_LEN (".zdebug_info"), 0, SHT_PROGBITS, 0 }, + { STRING_COMMA_LEN (".zdebug_abbrev"), 0, SHT_PROGBITS, 0 }, + { STRING_COMMA_LEN (".zdebug_aranges"), 0, SHT_PROGBITS, 0 }, + { NULL, 0, 0, 0, 0 } +}; + static const struct bfd_elf_special_section *special_sections[] = { special_sections_b, /* 'b' */ - special_sections_c, /* 'b' */ + special_sections_c, /* 'c' */ special_sections_d, /* 'd' */ NULL, /* 'e' */ special_sections_f, /* 'f' */ @@ -2078,6 +2106,12 @@ static const struct bfd_elf_special_section *special_sections[] = special_sections_r, /* 'r' */ special_sections_s, /* 's' */ special_sections_t, /* 't' */ + NULL, /* 'u' */ + NULL, /* 'v' */ + NULL, /* 'w' */ + NULL, /* 'x' */ + NULL, /* 'y' */ + special_sections_z /* 'z' */ }; const struct bfd_elf_special_section * @@ -2154,7 +2188,7 @@ _bfd_elf_get_sec_type_attr (bfd *abfd, asection *sec) return NULL; i = sec->name[1] - 'b'; - if (i < 0 || i > 't' - 'b') + if (i < 0 || i > 'z' - 'b') return NULL; spec = special_sections[i]; @@ -2175,7 +2209,8 @@ _bfd_elf_new_section_hook (bfd *abfd, asection *sec) sdata = (struct bfd_elf_section_data *) sec->used_by_bfd; if (sdata == NULL) { - sdata = bfd_zalloc (abfd, sizeof (*sdata)); + sdata = (struct bfd_elf_section_data *) bfd_zalloc (abfd, + sizeof (*sdata)); if (sdata == NULL) return FALSE; sec->used_by_bfd = sdata; @@ -2231,7 +2266,7 @@ bfd_boolean _bfd_elf_make_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index, - const char *typename) + const char *type_name) { asection *newsect; char *name; @@ -2245,9 +2280,9 @@ _bfd_elf_make_section_from_phdr (bfd *abfd, if (hdr->p_filesz > 0) { - sprintf (namebuf, "%s%d%s", typename, index, split ? "a" : ""); + sprintf (namebuf, "%s%d%s", type_name, index, split ? "a" : ""); len = strlen (namebuf) + 1; - name = bfd_alloc (abfd, len); + name = (char *) bfd_alloc (abfd, len); if (!name) return FALSE; memcpy (name, namebuf, len); @@ -2281,9 +2316,9 @@ _bfd_elf_make_section_from_phdr (bfd *abfd, { bfd_vma align; - sprintf (namebuf, "%s%d%s", typename, index, split ? "b" : ""); + sprintf (namebuf, "%s%d%s", type_name, index, split ? "b" : ""); len = strlen (namebuf) + 1; - name = bfd_alloc (abfd, len); + name = (char *) bfd_alloc (abfd, len); if (!name) return FALSE; memcpy (name, namebuf, len); @@ -2341,7 +2376,7 @@ bfd_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index) case PT_NOTE: if (! _bfd_elf_make_section_from_phdr (abfd, hdr, index, "note")) return FALSE; - if (! elfcore_read_notes (abfd, hdr->p_offset, hdr->p_filesz)) + if (! elf_read_notes (abfd, hdr->p_offset, hdr->p_filesz)) return FALSE; return TRUE; @@ -2382,7 +2417,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd, const struct elf_backend_data *bed = get_elf_backend_data (abfd); bfd_size_type amt = sizeof ".rela" + strlen (asect->name); - name = bfd_alloc (abfd, amt); + name = (char *) bfd_alloc (abfd, amt); if (name == NULL) return FALSE; sprintf (name, "%s%s", use_rela_p ? ".rela" : ".rel", asect->name); @@ -2395,7 +2430,7 @@ _bfd_elf_init_reloc_shdr (bfd *abfd, rel_hdr->sh_entsize = (use_rela_p ? bed->s->sizeof_rela : bed->s->sizeof_rel); - rel_hdr->sh_addralign = 1 << bed->s->log_file_align; + rel_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align; rel_hdr->sh_flags = 0; rel_hdr->sh_addr = 0; rel_hdr->sh_size = 0; @@ -2404,13 +2439,25 @@ _bfd_elf_init_reloc_shdr (bfd *abfd, return TRUE; } +/* Return the default section type based on the passed in section flags. */ + +int +bfd_elf_get_default_section_type (flagword flags) +{ + if ((flags & SEC_ALLOC) != 0 + && ((flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0 + || (flags & SEC_NEVER_LOAD) != 0)) + return SHT_NOBITS; + return SHT_PROGBITS; +} + /* Set up an ELF internal section header for a section. */ static void elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) { const struct elf_backend_data *bed = get_elf_backend_data (abfd); - bfd_boolean *failedptr = failedptrarg; + bfd_boolean *failedptr = (bfd_boolean *) failedptrarg; Elf_Internal_Shdr *this_hdr; unsigned int sh_type; @@ -2442,7 +2489,7 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) this_hdr->sh_offset = 0; this_hdr->sh_size = asect->size; this_hdr->sh_link = 0; - this_hdr->sh_addralign = 1 << asect->alignment_power; + this_hdr->sh_addralign = (bfd_vma) 1 << asect->alignment_power; /* The sh_entsize and sh_info fields may have been set already by copy_private_section_data. */ @@ -2451,16 +2498,24 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) /* If the section type is unspecified, we set it based on asect->flags. */ + if ((asect->flags & SEC_GROUP) != 0) + sh_type = SHT_GROUP; + else + sh_type = bfd_elf_get_default_section_type (asect->flags); + if (this_hdr->sh_type == SHT_NULL) - { - 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)) - this_hdr->sh_type = SHT_NOBITS; - else - this_hdr->sh_type = SHT_PROGBITS; + this_hdr->sh_type = sh_type; + else if (this_hdr->sh_type == SHT_NOBITS + && sh_type == SHT_PROGBITS + && (asect->flags & SEC_ALLOC) != 0) + { + /* Warn if we are changing a NOBITS section to PROGBITS, but + allow the link to proceed. This can happen when users link + non-bss input sections to bss output sections, or emit data + to a bss output section via a linker script. */ + (*_bfd_error_handler) + (_("warning: section `%A' type changed to PROGBITS"), asect); + this_hdr->sh_type = sh_type; } switch (this_hdr->sh_type) @@ -2594,13 +2649,15 @@ elf_fake_sections (bfd *abfd, asection *asect, void *failedptrarg) *failedptr = TRUE; } -/* Fill in the contents of a SHT_GROUP section. */ +/* Fill in the contents of a SHT_GROUP section. Called from + _bfd_elf_compute_section_file_positions for gas, objcopy, and + when ELF targets use the generic linker, ld. Called for ld -r + from bfd_elf_final_link. */ void bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg) { - bfd_boolean *failedptr = failedptrarg; - unsigned long symindx; + bfd_boolean *failedptr = (bfd_boolean *) failedptrarg; asection *elt, *first; unsigned char *loc; bfd_boolean gas; @@ -2611,27 +2668,56 @@ bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg) || *failedptr) return; - symindx = 0; - if (elf_group_id (sec) != NULL) - symindx = elf_group_id (sec)->udata.i; + if (elf_section_data (sec)->this_hdr.sh_info == 0) + { + unsigned long symindx = 0; + + /* elf_group_id will have been set up by objcopy and the + generic linker. */ + if (elf_group_id (sec) != NULL) + symindx = elf_group_id (sec)->udata.i; - if (symindx == 0) + if (symindx == 0) + { + /* If called from the assembler, swap_out_syms will have set up + elf_section_syms. */ + BFD_ASSERT (elf_section_syms (abfd) != NULL); + symindx = elf_section_syms (abfd)[sec->index]->udata.i; + } + elf_section_data (sec)->this_hdr.sh_info = symindx; + } + else if (elf_section_data (sec)->this_hdr.sh_info == (unsigned int) -2) { - /* If called from the assembler, swap_out_syms will have set up - elf_section_syms; If called for "ld -r", use target_index. */ - if (elf_section_syms (abfd) != NULL) - symindx = elf_section_syms (abfd)[sec->index]->udata.i; - else - symindx = sec->target_index; + /* The ELF backend linker sets sh_info to -2 when the group + signature symbol is global, and thus the index can't be + set until all local symbols are output. */ + asection *igroup = elf_sec_group (elf_next_in_group (sec)); + struct bfd_elf_section_data *sec_data = elf_section_data (igroup); + unsigned long symndx = sec_data->this_hdr.sh_info; + unsigned long extsymoff = 0; + struct elf_link_hash_entry *h; + + if (!elf_bad_symtab (igroup->owner)) + { + Elf_Internal_Shdr *symtab_hdr; + + symtab_hdr = &elf_tdata (igroup->owner)->symtab_hdr; + extsymoff = symtab_hdr->sh_info; + } + h = elf_sym_hashes (igroup->owner)[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; + + elf_section_data (sec)->this_hdr.sh_info = h->indx; } - elf_section_data (sec)->this_hdr.sh_info = symindx; /* The contents won't be allocated for "ld -r" or objcopy. */ gas = TRUE; if (sec->contents == NULL) { gas = FALSE; - sec->contents = bfd_alloc (abfd, sec->size); + sec->contents = (unsigned char *) bfd_alloc (abfd, sec->size); /* Arrange for the section to be written out. */ elf_section_data (sec)->this_hdr.contents = sec->contents; @@ -2658,14 +2744,17 @@ bfd_elf_set_group_contents (bfd *abfd, asection *sec, void *failedptrarg) asection *s; unsigned int idx; - loc -= 4; s = elt; - if (!gas) - s = s->output_section; - idx = 0; - if (s != NULL) - idx = elf_section_data (s)->this_idx; - H_PUT_32 (abfd, idx, loc); + if (! elf_discarded_section (s)) + { + loc -= 4; + if (!gas) + s = s->output_section; + idx = 0; + if (s != NULL) + idx = elf_section_data (s)->this_idx; + H_PUT_32 (abfd, idx, loc); + } elt = elf_next_in_group (elt); if (elt == first) break; @@ -2689,6 +2778,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) unsigned int section_number, secn; Elf_Internal_Shdr **i_shdrp; struct bfd_elf_section_data *d; + bfd_boolean need_symtab; section_number = 1; @@ -2711,11 +2801,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) abfd->section_count--; } else - { - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; - d->this_idx = section_number++; - } + d->this_idx = section_number++; } } } @@ -2725,26 +2811,18 @@ 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 (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; - d->this_idx = section_number++; - } + d->this_idx = section_number++; _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->this_hdr.sh_name); if ((sec->flags & SEC_RELOC) == 0) d->rel_idx = 0; else { - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; d->rel_idx = section_number++; _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr.sh_name); } if (d->rel_hdr2) { - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; d->rel_idx2 = section_number++; _bfd_elf_strtab_addref (elf_shstrtab (abfd), d->rel_hdr2->sh_name); } @@ -2752,22 +2830,20 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) d->rel_idx2 = 0; } - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; t->shstrtab_section = section_number++; _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->shstrtab_hdr.sh_name); elf_elfheader (abfd)->e_shstrndx = t->shstrtab_section; - if (bfd_get_symcount (abfd) > 0) + need_symtab = (bfd_get_symcount (abfd) > 0 + || (link_info == NULL + && ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC)) + == HAS_RELOC))); + if (need_symtab) { - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; t->symtab_section = section_number++; _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->symtab_hdr.sh_name); - if (section_number > SHN_LORESERVE - 2) + if (section_number > ((SHN_LORESERVE - 2) & 0xFFFF)) { - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; t->symtab_shndx_section = section_number++; t->symtab_shndx_hdr.sh_name = (unsigned int) _bfd_elf_strtab_add (elf_shstrtab (abfd), @@ -2775,8 +2851,6 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) if (t->symtab_shndx_hdr.sh_name == (unsigned int) -1) return FALSE; } - if (section_number == SHN_LORESERVE) - section_number += SHN_HIRESERVE + 1 - SHN_LORESERVE; t->strtab_section = section_number++; _bfd_elf_strtab_addref (elf_shstrtab (abfd), t->strtab_hdr.sh_name); } @@ -2786,16 +2860,16 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) elf_numsections (abfd) = section_number; elf_elfheader (abfd)->e_shnum = section_number; - if (section_number > SHN_LORESERVE) - elf_elfheader (abfd)->e_shnum -= SHN_HIRESERVE + 1 - SHN_LORESERVE; /* Set up the list of section header pointers, in agreement with the indices. */ - i_shdrp = bfd_zalloc2 (abfd, section_number, sizeof (Elf_Internal_Shdr *)); + i_shdrp = (Elf_Internal_Shdr **) bfd_zalloc2 (abfd, section_number, + sizeof (Elf_Internal_Shdr *)); if (i_shdrp == NULL) return FALSE; - i_shdrp[0] = bfd_zalloc (abfd, sizeof (Elf_Internal_Shdr)); + i_shdrp[0] = (Elf_Internal_Shdr *) bfd_zalloc (abfd, + sizeof (Elf_Internal_Shdr)); if (i_shdrp[0] == NULL) { bfd_release (abfd, i_shdrp); @@ -2805,10 +2879,10 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) elf_elfsections (abfd) = i_shdrp; i_shdrp[t->shstrtab_section] = &t->shstrtab_hdr; - if (bfd_get_symcount (abfd) > 0) + if (need_symtab) { i_shdrp[t->symtab_section] = &t->symtab_hdr; - if (elf_numsections (abfd) > SHN_LORESERVE) + if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)) { i_shdrp[t->symtab_shndx_section] = &t->symtab_shndx_hdr; t->symtab_shndx_hdr.sh_link = t->symtab_section; @@ -2944,7 +3018,7 @@ assign_section_numbers (bfd *abfd, struct bfd_link_info *link_info) char *alc; len = strlen (sec->name); - alc = bfd_malloc (len - 2); + alc = (char *) bfd_malloc (len - 2); if (alc == NULL) return FALSE; memcpy (alc, sec->name, len - 3); @@ -3020,23 +3094,21 @@ sym_is_global (bfd *abfd, asymbol *sym) if (bed->elf_backend_sym_is_global) return (*bed->elf_backend_sym_is_global) (abfd, sym); - return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0 + return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0 || bfd_is_und_section (bfd_get_section (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. */ + output. */ 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)))); + && !(sym->section->owner == abfd + || (sym->section->output_section->owner == abfd + && sym->section->output_offset == 0))); } static bfd_boolean @@ -3066,7 +3138,7 @@ elf_map_symbols (bfd *abfd) } max_index++; - sect_syms = bfd_zalloc2 (abfd, max_index, sizeof (asymbol *)); + sect_syms = (asymbol **) bfd_zalloc2 (abfd, max_index, sizeof (asymbol *)); if (sect_syms == NULL) return FALSE; elf_section_syms (abfd) = sect_syms; @@ -3079,6 +3151,7 @@ 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 = sym->section; @@ -3117,7 +3190,8 @@ elf_map_symbols (bfd *abfd) } /* Now sort the symbols so the local symbols are first. */ - new_syms = bfd_alloc2 (abfd, num_locals + num_globals, sizeof (asymbol *)); + new_syms = (asymbol **) bfd_alloc2 (abfd, num_locals + num_globals, + sizeof (asymbol *)); if (new_syms == NULL) return FALSE; @@ -3177,14 +3251,8 @@ _bfd_elf_assign_file_position_for_section (Elf_Internal_Shdr *i_shdrp, file_ptr offset, bfd_boolean align) { - if (align) - { - unsigned int al; - - al = i_shdrp->sh_addralign; - if (al > 1) - offset = BFD_ALIGN (offset, al); - } + if (align && i_shdrp->sh_addralign > 1) + offset = BFD_ALIGN (offset, i_shdrp->sh_addralign); i_shdrp->sh_offset = offset; if (i_shdrp->bfd_section != NULL) i_shdrp->bfd_section->filepos = offset; @@ -3205,6 +3273,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd, bfd_boolean failed; struct bfd_strtab_hash *strtab = NULL; Elf_Internal_Shdr *shstrtab_hdr; + bfd_boolean need_symtab; if (abfd->output_has_begun) return TRUE; @@ -3229,7 +3298,11 @@ _bfd_elf_compute_section_file_positions (bfd *abfd, return FALSE; /* The backend linker builds symbol table information itself. */ - if (link_info == NULL && bfd_get_symcount (abfd) > 0) + need_symtab = (link_info == NULL + && (bfd_get_symcount (abfd) > 0 + || ((abfd->flags & (EXEC_P | DYNAMIC | HAS_RELOC)) + == HAS_RELOC))); + if (need_symtab) { /* Non-zero if doing a relocatable link. */ int relocatable_p = ! (abfd->flags & (EXEC_P | DYNAMIC)); @@ -3260,7 +3333,7 @@ _bfd_elf_compute_section_file_positions (bfd *abfd, if (!assign_file_positions_except_relocs (abfd, link_info)) return FALSE; - if (link_info == NULL && bfd_get_symcount (abfd) > 0) + if (need_symtab) { file_ptr off; Elf_Internal_Shdr *hdr; @@ -3320,13 +3393,12 @@ get_program_header_size (bfd *abfd, struct bfd_link_info *info) { /* 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 (info != NULL && info->relro) + { + /* We need a PT_GNU_RELRO segment. */ + ++segs; } if (elf_tdata (abfd)->eh_frame_hdr) @@ -3389,6 +3461,29 @@ get_program_header_size (bfd *abfd, struct bfd_link_info *info) return segs * bed->s->sizeof_phdr; } +/* Find the segment that contains the output_section of section. */ + +Elf_Internal_Phdr * +_bfd_elf_find_segment_containing_section (bfd * abfd, asection * section) +{ + struct elf_segment_map *m; + Elf_Internal_Phdr *p; + + for (m = elf_tdata (abfd)->segment_map, + p = elf_tdata (abfd)->phdr; + m != NULL; + m = m->next, p++) + { + int i; + + for (i = m->count - 1; i >= 0; i--) + if (m->sections[i] == section) + return p; + } + + return NULL; +} + /* Create a mapping from a set of sections to a program segment. */ static struct elf_segment_map * @@ -3405,7 +3500,7 @@ make_mapping (bfd *abfd, amt = sizeof (struct elf_segment_map); amt += (to - from - 1) * sizeof (asection *); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) return NULL; m->next = NULL; @@ -3432,7 +3527,8 @@ _bfd_elf_make_dynamic_segment (bfd *abfd, asection *dynsec) { struct elf_segment_map *m; - m = bfd_zalloc (abfd, sizeof (struct elf_segment_map)); + m = (struct elf_segment_map *) bfd_zalloc (abfd, + sizeof (struct elf_segment_map)); if (m == NULL) return NULL; m->next = NULL; @@ -3523,7 +3619,8 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) /* Select the allocated sections, and sort them. */ - sections = bfd_malloc2 (bfd_count_sections (abfd), sizeof (asection *)); + sections = (asection **) bfd_malloc2 (bfd_count_sections (abfd), + sizeof (asection *)); if (sections == NULL) goto error_return; @@ -3553,7 +3650,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) if (s != NULL && (s->flags & SEC_LOAD) != 0) { amt = sizeof (struct elf_segment_map); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) goto error_return; m->next = NULL; @@ -3567,7 +3664,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) pm = &m->next; amt = sizeof (struct elf_segment_map); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) goto error_return; m->next = NULL; @@ -3631,8 +3728,15 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) segment. */ new_segment = TRUE; } - else if (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) - < BFD_ALIGN (hdr->lma, maxpagesize)) + /* In the next test we have to be careful when last_hdr->lma is close + to the end of the address space. If the aligned address wraps + around to the start of the address space, then there are no more + pages left in memory and it is OK to assume that the current + section can be included in the current segment. */ + else if ((BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize + > last_hdr->lma) + && (BFD_ALIGN (last_hdr->lma + last_size, maxpagesize) + maxpagesize + <= hdr->lma)) { /* If putting this section in this segment would force us to skip a page in the segment, then we need a new segment. */ @@ -3675,8 +3779,13 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) } /* 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 (last_hdr != NULL + && info != NULL + && info->callbacks->override_segment_assignment != NULL) + new_segment + = info->callbacks->override_segment_assignment (info, abfd, hdr, + last_hdr, + new_segment); if (! new_segment) { @@ -3765,7 +3874,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) break; } amt += (count - 1) * sizeof (asection *); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) goto error_return; m->next = NULL; @@ -3797,7 +3906,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) amt = sizeof (struct elf_segment_map); amt += (tls_count - 1) * sizeof (asection *); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) goto error_return; m->next = NULL; @@ -3824,7 +3933,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) && (eh_frame_hdr->output_section->flags & SEC_LOAD) != 0) { amt = sizeof (struct elf_segment_map); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) goto error_return; m->next = NULL; @@ -3839,7 +3948,7 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) if (elf_tdata (abfd)->stack_flags) { amt = sizeof (struct elf_segment_map); - m = bfd_zalloc (abfd, amt); + m = (struct elf_segment_map *) bfd_zalloc (abfd, amt); if (m == NULL) goto error_return; m->next = NULL; @@ -3851,21 +3960,38 @@ _bfd_elf_map_sections_to_segments (bfd *abfd, struct bfd_link_info *info) pm = &m->next; } - if (dynsec != NULL && elf_tdata (abfd)->relro) + if (info != NULL && info->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; + for (m = mfirst; m != NULL; m = m->next) + { + if (m->p_type == PT_LOAD) + { + asection *last = m->sections[m->count - 1]; + bfd_vma vaddr = m->sections[0]->vma; + bfd_vma filesz = last->vma - vaddr + last->size; - *pm = m; - pm = &m->next; + if (vaddr < info->relro_end + && vaddr >= info->relro_start + && (vaddr + filesz) >= info->relro_end) + break; + } + } + + /* Make a PT_GNU_RELRO segment only when it isn't empty. */ + if (m != NULL) + { + amt = sizeof (struct elf_segment_map); + m = (struct elf_segment_map *) 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; + } } free (sections); @@ -3974,6 +4100,32 @@ vma_page_aligned_bias (bfd_vma vma, ufile_ptr off, bfd_vma maxpagesize) return ((vma - off) % maxpagesize); } +static void +print_segment_map (const struct elf_segment_map *m) +{ + unsigned int j; + 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, "%s:", 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. */ @@ -3990,14 +4142,19 @@ assign_file_positions_for_load_sections (bfd *abfd, bfd_size_type maxpagesize; unsigned int alloc; unsigned int i, j; + bfd_vma header_pad = 0; if (link_info == NULL - && !elf_modify_segment_map (abfd, link_info, FALSE)) + && !_bfd_elf_map_sections_to_segments (abfd, link_info)) return FALSE; alloc = 0; for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next) - ++alloc; + { + ++alloc; + if (m->header_size) + header_pad = m->header_size; + } elf_elfheader (abfd)->e_phoff = bed->s->sizeof_ehdr; elf_elfheader (abfd)->e_phentsize = bed->s->sizeof_phdr; @@ -4015,7 +4172,21 @@ assign_file_positions_for_load_sections (bfd *abfd, return TRUE; } - phdrs = bfd_alloc2 (abfd, alloc, sizeof (Elf_Internal_Phdr)); + /* We're writing the size in elf_tdata (abfd)->program_header_size, + see assign_file_positions_except_relocs, so make sure we have + that amount allocated, with trailing space cleared. + The variable alloc contains the computed need, while elf_tdata + (abfd)->program_header_size contains the size used for the + layout. + See ld/emultempl/elf-generic.em:gld${EMULATION_NAME}_map_segments + where the layout is forced to according to a larger size in the + last iterations for the testcase ld-elf/header. */ + BFD_ASSERT (elf_tdata (abfd)->program_header_size % bed->s->sizeof_phdr + == 0); + phdrs = (Elf_Internal_Phdr *) + bfd_zalloc2 (abfd, + (elf_tdata (abfd)->program_header_size / bed->s->sizeof_phdr), + sizeof (Elf_Internal_Phdr)); elf_tdata (abfd)->phdr = phdrs; if (phdrs == NULL) return FALSE; @@ -4026,6 +4197,11 @@ assign_file_positions_for_load_sections (bfd *abfd, off = bed->s->sizeof_ehdr; off += alloc * bed->s->sizeof_phdr; + if (header_pad < (bfd_vma) off) + header_pad = 0; + else + header_pad -= off; + off += header_pad; for (m = elf_tdata (abfd)->segment_map, p = phdrs, j = 0; m != NULL; @@ -4122,21 +4298,14 @@ assign_file_positions_for_load_sections (bfd *abfd, 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 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) - { - no_contents = TRUE; - break; - } - } + sections. */ + no_contents = TRUE; + for (i = 0; i < m->count; i++) + if (elf_section_type (m->sections[i]) != SHT_NOBITS) + { + no_contents = FALSE; + break; + } off_adjust = vma_page_aligned_bias (m->sections[0]->vma, off, align); off += off_adjust; @@ -4166,6 +4335,10 @@ assign_file_positions_for_load_sections (bfd *abfd, bfd_set_error (bfd_error_bad_value); return FALSE; } + /* Set the note section type to SHT_NOTE. */ + else if (p->p_type == PT_NOTE) + for (i = 0; i < m->count; i++) + elf_section_type (m->sections[i]) = SHT_NOTE; p->p_offset = 0; p->p_filesz = 0; @@ -4216,6 +4389,11 @@ assign_file_positions_for_load_sections (bfd *abfd, p->p_filesz += alloc * bed->s->sizeof_phdr; p->p_memsz += alloc * bed->s->sizeof_phdr; + if (m->count) + { + p->p_filesz += header_pad; + p->p_memsz += header_pad; + } } if (p->p_type == PT_LOAD @@ -4249,30 +4427,28 @@ assign_file_positions_for_load_sections (bfd *abfd, 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 = sec->lma - (p->p_paddr + p->p_memsz); - - if (this_hdr->sh_type != SHT_NOBITS + if ((p->p_type == PT_LOAD + || p->p_type == PT_TLS) + && (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))) + || p->p_type == PT_TLS)))) + { + bfd_signed_vma adjust = sec->vma - (p->p_vaddr + p->p_memsz); + + if (adjust < 0) { - if (adjust < 0) - { - (*_bfd_error_handler) - (_("%B: section %A lma 0x%lx overlaps previous sections"), - abfd, sec, (unsigned long) sec->lma); - adjust = 0; - } - p->p_memsz += adjust; + (*_bfd_error_handler) + (_("%B: section %A vma 0x%lx overlaps previous sections"), + abfd, sec, (unsigned long) sec->vma); + adjust = 0; + } + p->p_memsz += adjust; - if (this_hdr->sh_type != SHT_NOBITS) - { - off += adjust; - p->p_filesz += adjust; - } + if (this_hdr->sh_type != SHT_NOBITS) + { + off += adjust; + p->p_filesz += adjust; } } @@ -4326,12 +4502,10 @@ assign_file_positions_for_load_sections (bfd *abfd, p->p_memsz += this_hdr->sh_size; } - 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)) + if (align > p->p_align + && !m->p_align_valid + && (p->p_type != PT_LOAD + || (abfd->flags & D_PAGED) == 0)) p->p_align = align; } @@ -4362,6 +4536,7 @@ assign_file_positions_for_load_sections (bfd *abfd, (*_bfd_error_handler) (_("%B: section `%A' can't be allocated in segment %d"), abfd, sec, j); + print_segment_map (m); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -4432,12 +4607,6 @@ assign_file_positions_for_non_load_sections (bfd *abfd, 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 @@ -4477,69 +4646,89 @@ assign_file_positions_for_non_load_sections (bfd *abfd, m != NULL; m = m->next, p++) { - if (m->count != 0) + if (p->p_type == PT_GNU_RELRO) { - 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); + const Elf_Internal_Phdr *lp; - 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; + BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs); - p->p_offset = m->sections[0]->filepos; - } - } - else - { - if (m->includes_filehdr) - { - p->p_vaddr = filehdr_vaddr; - if (! m->p_paddr_valid) - p->p_paddr = filehdr_paddr; - } - else if (m->includes_phdrs) + if (link_info != NULL) { - p->p_vaddr = phdrs_vaddr; - if (! m->p_paddr_valid) - p->p_paddr = phdrs_paddr; - } - else if (p->p_type == PT_GNU_RELRO) - { - Elf_Internal_Phdr *lp; - + /* During linking the range of the RELRO segment is passed + in link_info. */ for (lp = phdrs; lp < phdrs + count; ++lp) { 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 < link_info->relro_end + && lp->p_vaddr + lp->p_filesz >= link_info->relro_end) break; } - - if (lp < phdrs + count - && link_info->relro_end > lp->p_vaddr) + } + else + { + /* Otherwise we are copying an executable or shared + library, but we need to use the same linker logic. */ + for (lp = phdrs; lp < phdrs + count; ++lp) { - p->p_vaddr = lp->p_vaddr; - p->p_paddr = lp->p_paddr; - p->p_offset = lp->p_offset; - p->p_filesz = link_info->relro_end - lp->p_vaddr; - p->p_memsz = p->p_filesz; - p->p_align = 1; - p->p_flags = (lp->p_flags & ~PF_W); + if (lp->p_type == PT_LOAD + && lp->p_paddr == p->p_paddr) + break; } + } + + if (lp < phdrs + count) + { + p->p_vaddr = lp->p_vaddr; + p->p_paddr = lp->p_paddr; + p->p_offset = lp->p_offset; + if (link_info != NULL) + p->p_filesz = link_info->relro_end - lp->p_vaddr; + else if (m->p_size_valid) + p->p_filesz = m->p_size; else - { - memset (p, 0, sizeof *p); - p->p_type = PT_NULL; - } + abort (); + p->p_memsz = p->p_filesz; + p->p_align = 1; + p->p_flags = (lp->p_flags & ~PF_W); + } + else + { + memset (p, 0, sizeof *p); + p->p_type = PT_NULL; + } + } + else 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; + asection *sect; + + BFD_ASSERT (!m->includes_filehdr && !m->includes_phdrs); + + sect = m->sections[m->count - 1]; + hdr = &elf_section_data (sect)->this_hdr; + p->p_filesz = sect->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) + { + p->p_vaddr = filehdr_vaddr; + if (! m->p_paddr_valid) + p->p_paddr = filehdr_paddr; + } + else if (m->includes_phdrs) + { + p->p_vaddr = phdrs_vaddr; + if (! m->p_paddr_valid) + p->p_paddr = phdrs_paddr; + } } elf_tdata (abfd)->next_file_pos = off; @@ -4599,12 +4788,6 @@ assign_file_positions_except_relocs (bfd *abfd, } 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; - } } } else @@ -4650,12 +4833,10 @@ prep_headers (bfd *abfd) { Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */ Elf_Internal_Phdr *i_phdrp = 0; /* Program header table, internal form */ - Elf_Internal_Shdr **i_shdrp; /* Section header table, internal form */ struct elf_strtab_hash *shstrtab; const struct elf_backend_data *bed = get_elf_backend_data (abfd); i_ehdrp = elf_elfheader (abfd); - i_shdrp = elf_elfsections (abfd); shstrtab = _bfd_elf_strtab_init (); if (shstrtab == NULL) @@ -4800,8 +4981,6 @@ _bfd_elf_write_object_contents (bfd *abfd) || bfd_bwrite (i_shdrp[count]->contents, amt, abfd) != amt) return FALSE; } - if (count == SHN_LORESERVE - 1) - count += SHN_HIRESERVE + 1 - SHN_LORESERVE; } /* Write out the section header names. */ @@ -4833,11 +5012,11 @@ _bfd_elf_write_corefile_contents (bfd *abfd) /* Given a section, search the header to find them. */ -int +unsigned int _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect) { const struct elf_backend_data *bed; - int index; + unsigned int index; if (elf_section_data (asect) != NULL && elf_section_data (asect)->this_idx != 0) @@ -4850,7 +5029,7 @@ _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect) else if (bfd_is_und_section (asect)) index = SHN_UNDEF; else - index = -1; + index = SHN_BAD; bed = get_elf_backend_data (abfd); if (bed->elf_backend_section_from_bfd_section) @@ -4861,7 +5040,7 @@ _bfd_elf_section_from_bfd_section (bfd *abfd, struct bfd_section *asect) return retval; } - if (index == -1) + if (index == SHN_BAD) bfd_set_error (bfd_error_nonrepresentable_section); return index; @@ -4938,6 +5117,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) unsigned int i; unsigned int num_segments; bfd_boolean phdr_included = FALSE; + bfd_boolean p_paddr_valid; bfd_vma maxpagesize; struct elf_segment_map *phdr_adjust_seg = NULL; unsigned int phdr_adjust_num = 0; @@ -4976,15 +5156,22 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) && (section->lma + SECTION_SIZE (section, segment) \ <= SEGMENT_END (segment, base))) - /* Special case: corefile "NOTE" section containing regs, prpsinfo etc. */ -#define IS_COREFILE_NOTE(p, s) \ + /* Handle PT_NOTE segment. */ +#define IS_NOTE(p, s) \ (p->p_type == PT_NOTE \ - && bfd_get_format (ibfd) == bfd_core \ - && s->vma == 0 && s->lma == 0 \ + && elf_section_type (s) == SHT_NOTE \ && (bfd_vma) s->filepos >= p->p_offset \ && ((bfd_vma) s->filepos + s->size \ <= p->p_offset + p->p_filesz)) + /* Special case: corefile "NOTE" section containing regs, prpsinfo + etc. */ +#define IS_COREFILE_NOTE(p, s) \ + (IS_NOTE (p, s) \ + && bfd_get_format (ibfd) == bfd_core \ + && s->vma == 0 \ + && s->lma == 0) + /* The complicated case when p_vaddr is 0 is to handle the Solaris linker, which generates a PT_INTERP section with p_vaddr and p_memsz set to 0. */ @@ -5003,7 +5190,8 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) 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, - 2. It is an allocated segment, + 2. It is an allocated section or a NOTE section in a PT_NOTE + segment. 3. There is an output section associated with it, 4. The section has not already been allocated to a previous segment. 5. PT_GNU_STACK segments do not include any sections. @@ -5016,7 +5204,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) ? 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)) \ + || IS_NOTE (segment, section)) \ && segment->p_type != PT_GNU_STACK \ && (segment->p_type != PT_TLS \ || (section->flags & SEC_THREAD_LOCAL)) \ @@ -5030,7 +5218,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) : segment->p_vaddr != section->vma) \ || (strcmp (bfd_get_section_name (ibfd, section), ".dynamic") \ == 0)) \ - && ! section->segment_mark) + && !section->segment_mark) /* If the output section of a section in the input segment is NULL, it is removed from the corresponding output segment. */ @@ -5058,6 +5246,20 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) for (section = ibfd->sections; section != NULL; section = section->next) section->segment_mark = FALSE; + /* The Solaris linker creates program headers in which all the + p_paddr fields are zero. When we try to objcopy or strip such a + file, we get confused. Check for this case, and if we find it + don't set the p_paddr_valid fields. */ + p_paddr_valid = FALSE; + for (i = 0, segment = elf_tdata (ibfd)->phdr; + i < num_segments; + i++, segment++) + if (segment->p_paddr != 0) + { + p_paddr_valid = TRUE; + break; + } + /* Scan through the segments specified in the program header of the input BFD. For this first scan we look for overlaps in the loadable segments. These can be created by weird @@ -5080,15 +5282,20 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) } if (segment->p_type != PT_LOAD) - continue; + { + /* Remove PT_GNU_RELRO segment. */ + if (segment->p_type == PT_GNU_RELRO) + segment->p_type = PT_NULL; + continue; + } /* Determine if this segment overlaps any previous segments. */ - for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2 ++) + for (j = 0, segment2 = elf_tdata (ibfd)->phdr; j < i; j++, segment2++) { bfd_signed_vma extra_length; if (segment2->p_type != PT_LOAD - || ! SEGMENT_OVERLAPS (segment, segment2)) + || !SEGMENT_OVERLAPS (segment, segment2)) continue; /* Merge the two segments together. */ @@ -5096,13 +5303,12 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) { /* Extend SEGMENT2 to include SEGMENT and then delete SEGMENT. */ - extra_length = - SEGMENT_END (segment, segment->p_vaddr) - - SEGMENT_END (segment2, segment2->p_vaddr); + extra_length = (SEGMENT_END (segment, segment->p_vaddr) + - SEGMENT_END (segment2, segment2->p_vaddr)); if (extra_length > 0) { - segment2->p_memsz += extra_length; + segment2->p_memsz += extra_length; segment2->p_filesz += extra_length; } @@ -5117,13 +5323,12 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) { /* Extend SEGMENT to include SEGMENT2 and then delete SEGMENT2. */ - extra_length = - SEGMENT_END (segment2, segment2->p_vaddr) - - SEGMENT_END (segment, segment->p_vaddr); + extra_length = (SEGMENT_END (segment2, segment2->p_vaddr) + - SEGMENT_END (segment, segment->p_vaddr)); if (extra_length > 0) { - segment->p_memsz += extra_length; + segment->p_memsz += extra_length; segment->p_filesz += extra_length; } @@ -5135,17 +5340,19 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) /* The second scan attempts to assign sections to segments. */ for (i = 0, segment = elf_tdata (ibfd)->phdr; i < num_segments; - i ++, segment ++) - { - unsigned int section_count; - asection ** sections; - asection * output_section; - unsigned int isec; - bfd_vma matching_lma; - bfd_vma suggested_lma; - unsigned int j; + i++, segment++) + { + unsigned int section_count; + asection **sections; + asection *output_section; + unsigned int isec; + bfd_vma matching_lma; + bfd_vma suggested_lma; + unsigned int j; bfd_size_type amt; - asection * first_section; + asection *first_section; + bfd_boolean first_matching_lma; + bfd_boolean first_suggested_lma; if (segment->p_type == PT_NULL) continue; @@ -5171,15 +5378,15 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) all of the sections we have selected. */ amt = sizeof (struct elf_segment_map); amt += ((bfd_size_type) section_count - 1) * sizeof (asection *); - map = bfd_zalloc (obfd, amt); + map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); if (map == NULL) return FALSE; /* Initialise the fields of the segment map. Default to using the physical address of the segment in the input BFD. */ - map->next = NULL; - map->p_type = segment->p_type; - map->p_flags = segment->p_flags; + map->next = NULL; + map->p_type = segment->p_type; + map->p_flags = segment->p_flags; map->p_flags_valid = 1; /* If the first section in the input segment is removed, there is @@ -5188,17 +5395,16 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) if (!first_section || first_section->output_section != NULL) { map->p_paddr = segment->p_paddr; - map->p_paddr_valid = 1; + map->p_paddr_valid = p_paddr_valid; } /* Determine if this segment contains the ELF file header and if it contains the program headers themselves. */ map->includes_filehdr = (segment->p_offset == 0 && segment->p_filesz >= iehdr->e_ehsize); - map->includes_phdrs = 0; - if (! phdr_included || segment->p_type != PT_LOAD) + if (!phdr_included || segment->p_type != PT_LOAD) { map->includes_phdrs = (segment->p_offset <= (bfd_vma) iehdr->e_phoff @@ -5217,9 +5423,9 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) something. They are allowed by the ELF spec however, so only a warning is produced. */ if (segment->p_type == PT_LOAD) - (*_bfd_error_handler) - (_("%B: warning: Empty loadable segment detected, is this intentional ?\n"), - ibfd); + (*_bfd_error_handler) (_("%B: warning: Empty loadable segment" + " detected, is this intentional ?\n"), + ibfd); map->count = 0; *pointer_to_map = map; @@ -5256,9 +5462,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) pointers that we are interested in. As these sections get assigned to a segment, they are removed from this array. */ - /* Gcc 2.96 miscompiles this code on mips. Don't do casting here - to work around this long long bug. */ - sections = bfd_malloc2 (section_count, sizeof (asection *)); + sections = (asection **) bfd_malloc2 (section_count, sizeof (asection *)); if (sections == NULL) return FALSE; @@ -5271,53 +5475,68 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) isec = 0; matching_lma = 0; suggested_lma = 0; + first_matching_lma = TRUE; + first_suggested_lma = TRUE; - for (j = 0, section = ibfd->sections; + for (section = ibfd->sections; section != NULL; section = section->next) + if (section == first_section) + break; + + for (j = 0; section != NULL; section = section->next) { if (INCLUDE_SECTION_IN_SEGMENT (section, segment, bed)) { output_section = section->output_section; - sections[j ++] = section; + sections[j++] = section; /* The Solaris native linker always sets p_paddr to 0. We try to catch that case here, and set it to the correct value. Note - some backends require that p_paddr be left as zero. */ - if (segment->p_paddr == 0 + if (!p_paddr_valid && segment->p_vaddr != 0 - && (! bed->want_p_paddr_set_to_zero) + && !bed->want_p_paddr_set_to_zero && isec == 0 && output_section->lma != 0 - && (output_section->vma == (segment->p_vaddr - + (map->includes_filehdr - ? iehdr->e_ehsize - : 0) - + (map->includes_phdrs - ? (iehdr->e_phnum - * iehdr->e_phentsize) - : 0)))) + && output_section->vma == (segment->p_vaddr + + (map->includes_filehdr + ? iehdr->e_ehsize + : 0) + + (map->includes_phdrs + ? (iehdr->e_phnum + * iehdr->e_phentsize) + : 0))) map->p_paddr = segment->p_vaddr; /* Match up the physical address of the segment with the LMA address of the output section. */ 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))) + || (bed->want_p_paddr_set_to_zero + && IS_CONTAINED_BY_VMA (output_section, segment))) { - if (matching_lma == 0 || output_section->lma < matching_lma) - matching_lma = output_section->lma; + if (first_matching_lma || output_section->lma < matching_lma) + { + matching_lma = output_section->lma; + first_matching_lma = FALSE; + } /* We assume that if the section fits within the segment then it does not overlap any other section within that segment. */ - map->sections[isec ++] = output_section; + map->sections[isec++] = output_section; + } + else if (first_suggested_lma) + { + suggested_lma = output_section->lma; + first_suggested_lma = FALSE; } - else if (suggested_lma == 0) - suggested_lma = output_section->lma; + + if (j == section_count) + break; } } @@ -5335,8 +5554,11 @@ 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) + if (p_paddr_valid + && !bed->want_p_paddr_set_to_zero + && 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. */ @@ -5347,7 +5569,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) } else { - if (matching_lma != 0) + if (!first_matching_lma) { /* At least one section fits inside the current segment. Keep it, but modify its physical address to match the @@ -5365,19 +5587,32 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) /* Offset the segment physical address from the lma to allow for space taken up by elf headers. */ if (map->includes_filehdr) - map->p_paddr -= iehdr->e_ehsize; + { + if (map->p_paddr >= iehdr->e_ehsize) + map->p_paddr -= iehdr->e_ehsize; + else + { + map->includes_filehdr = FALSE; + map->includes_phdrs = FALSE; + } + } if (map->includes_phdrs) { - map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize; - - /* iehdr->e_phnum is just an estimate of the number - of program headers that we will need. Make a note - here of the number we used and the segment we chose - to hold these headers, so that we can adjust the - offset when we know the correct value. */ - phdr_adjust_num = iehdr->e_phnum; - phdr_adjust_seg = map; + if (map->p_paddr >= iehdr->e_phnum * iehdr->e_phentsize) + { + map->p_paddr -= iehdr->e_phnum * iehdr->e_phentsize; + + /* iehdr->e_phnum is just an estimate of the number + of program headers that we will need. Make a note + here of the number we used and the segment we chose + to hold these headers, so that we can adjust the + offset when we know the correct value. */ + phdr_adjust_num = iehdr->e_phnum; + phdr_adjust_seg = map; + } + else + map->includes_phdrs = FALSE; } } @@ -5393,6 +5628,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) { map->count = 0; suggested_lma = 0; + first_suggested_lma = TRUE; /* Fill the current segment with sections that fit. */ for (j = 0; j < section_count; j++) @@ -5414,17 +5650,17 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) /* If the first section in a segment does not start at the beginning of the segment, then something is wrong. */ - if (output_section->lma != - (map->p_paddr - + (map->includes_filehdr ? iehdr->e_ehsize : 0) - + (map->includes_phdrs - ? iehdr->e_phnum * iehdr->e_phentsize - : 0))) + if (output_section->lma + != (map->p_paddr + + (map->includes_filehdr ? iehdr->e_ehsize : 0) + + (map->includes_phdrs + ? iehdr->e_phnum * iehdr->e_phentsize + : 0))) abort (); } else { - asection * prev_sec; + asection *prev_sec; prev_sec = map->sections[map->count - 1]; @@ -5434,11 +5670,14 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) if ((BFD_ALIGN (prev_sec->lma + prev_sec->size, maxpagesize) < BFD_ALIGN (output_section->lma, maxpagesize)) - || ((prev_sec->lma + prev_sec->size) + || (prev_sec->lma + prev_sec->size > output_section->lma)) { - if (suggested_lma == 0) - suggested_lma = output_section->lma; + if (first_suggested_lma) + { + suggested_lma = output_section->lma; + first_suggested_lma = FALSE; + } continue; } @@ -5449,8 +5688,11 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) sections[j] = NULL; section->segment_mark = TRUE; } - else if (suggested_lma == 0) - suggested_lma = output_section->lma; + else if (first_suggested_lma) + { + suggested_lma = output_section->lma; + first_suggested_lma = FALSE; + } } BFD_ASSERT (map->count > 0); @@ -5466,7 +5708,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) and carry on looping. */ amt = sizeof (struct elf_segment_map); amt += ((bfd_size_type) section_count - 1) * sizeof (asection *); - map = bfd_alloc (obfd, amt); + map = (struct elf_segment_map *) bfd_alloc (obfd, amt); if (map == NULL) { free (sections); @@ -5476,14 +5718,14 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) /* Initialise the fields of the segment map. Set the physical physical address to the LMA of the first section that has not yet been assigned. */ - map->next = NULL; - map->p_type = segment->p_type; - map->p_flags = segment->p_flags; - map->p_flags_valid = 1; - map->p_paddr = suggested_lma; - map->p_paddr_valid = 1; + map->next = NULL; + map->p_type = segment->p_type; + map->p_flags = segment->p_flags; + map->p_flags_valid = 1; + map->p_paddr = suggested_lma; + map->p_paddr_valid = p_paddr_valid; map->includes_filehdr = 0; - map->includes_phdrs = 0; + map->includes_phdrs = 0; } } while (isec < section_count); @@ -5491,17 +5733,6 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) free (sections); } - /* The Solaris linker creates program headers in which all the - p_paddr fields are zero. When we try to objcopy or strip such a - file, we get confused. Check for this case, and if we find it - reset the p_paddr_valid fields. */ - for (map = map_first; map != NULL; map = map->next) - if (map->p_paddr != 0) - break; - if (map == NULL) - for (map = map_first; map != NULL; map = map->next) - map->p_paddr_valid = 0; - elf_tdata (obfd)->segment_map = map_first; /* If we had to estimate the number of program headers that were @@ -5523,6 +5754,7 @@ rewrite_elf_program_header (bfd *ibfd, bfd *obfd) #undef SECTION_SIZE #undef IS_CONTAINED_BY_VMA #undef IS_CONTAINED_BY_LMA +#undef IS_NOTE #undef IS_COREFILE_NOTE #undef IS_SOLARIS_PT_INTERP #undef IS_SECTION_IN_INPUT_SEGMENT @@ -5545,13 +5777,26 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd) unsigned int i; unsigned int num_segments; bfd_boolean phdr_included = FALSE; + bfd_boolean p_paddr_valid; iehdr = elf_elfheader (ibfd); map_first = NULL; pointer_to_map = &map_first; + /* If all the segment p_paddr fields are zero, don't set + map->p_paddr_valid. */ + p_paddr_valid = FALSE; num_segments = elf_elfheader (ibfd)->e_phnum; + for (i = 0, segment = elf_tdata (ibfd)->phdr; + i < num_segments; + i++, segment++) + if (segment->p_paddr != 0) + { + p_paddr_valid = TRUE; + break; + } + for (i = 0, segment = elf_tdata (ibfd)->phdr; i < num_segments; i++, segment++) @@ -5584,7 +5829,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_zalloc (obfd, amt); + map = (struct elf_segment_map *) bfd_zalloc (obfd, amt); if (map == NULL) return FALSE; @@ -5595,11 +5840,21 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd) map->p_flags = segment->p_flags; map->p_flags_valid = 1; map->p_paddr = segment->p_paddr; - map->p_paddr_valid = 1; + map->p_paddr_valid = p_paddr_valid; map->p_align = segment->p_align; map->p_align_valid = 1; map->p_vaddr_offset = 0; + if (map->p_type == PT_GNU_RELRO) + { + /* The PT_GNU_RELRO segment may contain the first a few + bytes in the .got.plt section even if the whole .got.plt + section isn't in the PT_GNU_RELRO segment. We won't + change the size of the PT_GNU_RELRO segment. */ + map->p_size = segment->p_memsz; + map->p_size_valid = 1; + } + /* Determine if this segment contains the ELF file header and if it contains the program headers themselves. */ map->includes_filehdr = (segment->p_offset == 0 @@ -5618,7 +5873,13 @@ copy_elf_program_header (bfd *ibfd, bfd *obfd) phdr_included = TRUE; } - if (!map->includes_phdrs && !map->includes_filehdr) + if (map->includes_filehdr && first_section) + /* We need to keep the space used by the headers fixed. */ + map->header_size = first_section->vma - segment->p_vaddr; + + if (!map->includes_phdrs + && !map->includes_filehdr + && map->p_paddr_valid) /* There is some other padding before the first section. */ map->p_vaddr_offset = ((lowest_section ? lowest_section->lma : 0) - segment->p_paddr); @@ -5671,6 +5932,13 @@ copy_private_bfd_data (bfd *ibfd, bfd *obfd) asection *section, *osec; unsigned int i, num_segments; Elf_Internal_Shdr *this_hdr; + const struct elf_backend_data *bed; + + bed = get_elf_backend_data (ibfd); + + /* Regenerate the segment map if p_paddr is set to 0. */ + if (bed->want_p_paddr_set_to_zero) + goto rewrite; /* Initialize the segment mark field. */ for (section = obfd->sections; section != NULL; @@ -5777,7 +6045,7 @@ _bfd_elf_init_private_section_data (bfd *ibfd, if (elf_section_flags (isec) & SHF_GROUP) elf_section_flags (osec) |= SHF_GROUP; elf_next_in_group (osec) = elf_next_in_group (isec); - elf_group_name (osec) = elf_group_name (isec); + elf_section_data (osec)->group = elf_section_data (isec)->group; } } @@ -5902,6 +6170,7 @@ _bfd_elf_copy_private_symbol_data (bfd *ibfd, osym = elf_symbol_from (obfd, osymarg); if (isym != NULL + && isym->internal_elf_sym.st_shndx != 0 && osym != NULL && bfd_is_abs_section (isym->symbol.section)) { @@ -5959,12 +6228,13 @@ swap_out_syms (bfd *abfd, symtab_hdr->sh_entsize = bed->s->sizeof_sym; symtab_hdr->sh_size = symtab_hdr->sh_entsize * (symcount + 1); symtab_hdr->sh_info = elf_num_locals (abfd) + 1; - symtab_hdr->sh_addralign = 1 << bed->s->log_file_align; + symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align; symstrtab_hdr = &elf_tdata (abfd)->strtab_hdr; symstrtab_hdr->sh_type = SHT_STRTAB; - outbound_syms = bfd_alloc2 (abfd, 1 + symcount, bed->s->sizeof_sym); + outbound_syms = (bfd_byte *) bfd_alloc2 (abfd, 1 + symcount, + bed->s->sizeof_sym); if (outbound_syms == NULL) { _bfd_stringtab_free (stt); @@ -5977,8 +6247,8 @@ swap_out_syms (bfd *abfd, if (symtab_shndx_hdr->sh_name != 0) { amt = (bfd_size_type) (1 + symcount) * sizeof (Elf_External_Sym_Shndx); - outbound_shndx = bfd_zalloc2 (abfd, 1 + symcount, - sizeof (Elf_External_Sym_Shndx)); + outbound_shndx = (bfd_byte *) + bfd_zalloc2 (abfd, 1 + symcount, sizeof (Elf_External_Sym_Shndx)); if (outbound_shndx == NULL) { _bfd_stringtab_free (stt); @@ -6059,7 +6329,7 @@ swap_out_syms (bfd *abfd, else { asection *sec = syms[idx]->section; - int shndx; + unsigned int shndx; if (sec->output_section) { @@ -6106,7 +6376,7 @@ swap_out_syms (bfd *abfd, { shndx = _bfd_elf_section_from_bfd_section (abfd, sec); - if (shndx == -1) + if (shndx == SHN_BAD) { asection *sec2; @@ -6130,7 +6400,7 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), } shndx = _bfd_elf_section_from_bfd_section (abfd, sec2); - BFD_ASSERT (shndx != -1); + BFD_ASSERT (shndx != SHN_BAD); } } @@ -6139,6 +6409,8 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), if ((flags & BSF_THREAD_LOCAL) != 0) type = STT_TLS; + else if ((flags & BSF_GNU_INDIRECT_FUNCTION) != 0) + type = STT_GNU_IFUNC; else if ((flags & BSF_FUNCTION) != 0) type = STT_FUNC; else if ((flags & BSF_OBJECT) != 0) @@ -6167,7 +6439,14 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_SECTION); } else if (bfd_is_com_section (syms[idx]->section)) - sym.st_info = ELF_ST_INFO (STB_GLOBAL, type); + { +#ifdef USE_STT_COMMON + if (type == STT_OBJECT) + sym.st_info = ELF_ST_INFO (STB_GLOBAL, STT_COMMON); + else +#endif + sym.st_info = ELF_ST_INFO (STB_GLOBAL, type); + } else if (bfd_is_und_section (syms[idx]->section)) sym.st_info = ELF_ST_INFO (((flags & BSF_WEAK) ? STB_WEAK @@ -6181,6 +6460,8 @@ Unable to find equivalent output section for symbol '%s' from section '%s'"), if (flags & BSF_LOCAL) bind = STB_LOCAL; + else if (flags & BSF_GNU_UNIQUE) + bind = STB_GNU_UNIQUE; else if (flags & BSF_WEAK) bind = STB_WEAK; else if (flags & BSF_GLOBAL) @@ -6329,8 +6610,7 @@ _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd) ret = sizeof (arelent *); for (s = abfd->sections; s != NULL; s = s->next) - if ((s->flags & SEC_LOAD) != 0 - && elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) + if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) && (elf_section_data (s)->this_hdr.sh_type == SHT_REL || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)) ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize) @@ -6366,8 +6646,7 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd, ret = 0; for (s = abfd->sections; s != NULL; s = s->next) { - if ((s->flags & SEC_LOAD) != 0 - && elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) + if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd) && (elf_section_data (s)->this_hdr.sh_type == SHT_REL || elf_section_data (s)->this_hdr.sh_type == SHT_RELA)) { @@ -6407,14 +6686,14 @@ _bfd_elf_slurp_version_tables (bfd *abfd, bfd_boolean default_imported_symver) hdr = &elf_tdata (abfd)->dynverref_hdr; - elf_tdata (abfd)->verref = bfd_zalloc2 (abfd, hdr->sh_info, - sizeof (Elf_Internal_Verneed)); + elf_tdata (abfd)->verref = (Elf_Internal_Verneed *) + bfd_zalloc2 (abfd, hdr->sh_info, sizeof (Elf_Internal_Verneed)); if (elf_tdata (abfd)->verref == NULL) goto error_return; elf_tdata (abfd)->cverrefs = hdr->sh_info; - contents = bfd_malloc (hdr->sh_size); + contents = (bfd_byte *) bfd_malloc (hdr->sh_size); if (contents == NULL) { error_return_verref: @@ -6454,8 +6733,9 @@ error_return_verref: iverneed->vn_auxptr = NULL; else { - iverneed->vn_auxptr = bfd_alloc2 (abfd, iverneed->vn_cnt, - sizeof (Elf_Internal_Vernaux)); + iverneed->vn_auxptr = (struct elf_internal_vernaux *) + bfd_alloc2 (abfd, iverneed->vn_cnt, + sizeof (Elf_Internal_Vernaux)); if (iverneed->vn_auxptr == NULL) goto error_return_verref; } @@ -6523,7 +6803,7 @@ error_return_verref: hdr = &elf_tdata (abfd)->dynverdef_hdr; - contents = bfd_malloc (hdr->sh_size); + contents = (bfd_byte *) bfd_malloc (hdr->sh_size); if (contents == NULL) goto error_return; if (bfd_seek (abfd, hdr->sh_offset, SEEK_SET) != 0 @@ -6567,8 +6847,8 @@ error_return_verref: else freeidx = ++maxidx; } - elf_tdata (abfd)->verdef = bfd_zalloc2 (abfd, maxidx, - sizeof (Elf_Internal_Verdef)); + elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) + bfd_zalloc2 (abfd, maxidx, sizeof (Elf_Internal_Verdef)); if (elf_tdata (abfd)->verdef == NULL) goto error_return; @@ -6601,8 +6881,9 @@ error_return_verdef: iverdef->vd_auxptr = NULL; else { - iverdef->vd_auxptr = bfd_alloc2 (abfd, iverdef->vd_cnt, - sizeof (Elf_Internal_Verdaux)); + iverdef->vd_auxptr = (struct elf_internal_verdaux *) + bfd_alloc2 (abfd, iverdef->vd_cnt, + sizeof (Elf_Internal_Verdaux)); if (iverdef->vd_auxptr == NULL) goto error_return_verdef; } @@ -6659,8 +6940,8 @@ error_return_verdef: else freeidx++; - elf_tdata (abfd)->verdef = bfd_zalloc2 (abfd, freeidx, - sizeof (Elf_Internal_Verdef)); + elf_tdata (abfd)->verdef = (Elf_Internal_Verdef *) + bfd_zalloc2 (abfd, freeidx, sizeof (Elf_Internal_Verdef)); if (elf_tdata (abfd)->verdef == NULL) goto error_return; @@ -6686,7 +6967,8 @@ error_return_verdef: if (iverdef->vd_nodename == NULL) goto error_return_verdef; iverdef->vd_nextdef = NULL; - iverdef->vd_auxptr = bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux)); + iverdef->vd_auxptr = (struct elf_internal_verdaux *) + bfd_alloc (abfd, sizeof (Elf_Internal_Verdaux)); if (iverdef->vd_auxptr == NULL) goto error_return_verdef; @@ -6709,7 +6991,7 @@ _bfd_elf_make_empty_symbol (bfd *abfd) elf_symbol_type *newsym; bfd_size_type amt = sizeof (elf_symbol_type); - newsym = bfd_zalloc (abfd, amt); + newsym = (elf_symbol_type *) bfd_zalloc (abfd, amt); if (!newsym) return NULL; else @@ -6783,7 +7065,7 @@ _bfd_elf_set_arch_mach (bfd *abfd, for error reporting. */ static bfd_boolean -elf_find_function (bfd *abfd ATTRIBUTE_UNUSED, +elf_find_function (bfd *abfd, asection *section, asymbol **symbols, bfd_vma offset, @@ -6803,6 +7085,7 @@ elf_find_function (bfd *abfd ATTRIBUTE_UNUSED, make a better choice of file name for local symbols by ignoring file symbols appearing after a given local symbol. */ enum { nothing_seen, symbol_seen, file_after_symbol_seen } state; + const struct elf_backend_data *bed = get_elf_backend_data (abfd); filename = NULL; func = NULL; @@ -6813,20 +7096,22 @@ elf_find_function (bfd *abfd ATTRIBUTE_UNUSED, for (p = symbols; *p != NULL; p++) { elf_symbol_type *q; + unsigned int type; q = (elf_symbol_type *) *p; - switch (ELF_ST_TYPE (q->internal_elf_sym.st_info)) + type = ELF_ST_TYPE (q->internal_elf_sym.st_info); + switch (type) { - default: - break; case STT_FILE: file = &q->symbol; if (state == symbol_seen) state = file_after_symbol_seen; continue; + default: + if (!bed->is_function_type (type)) + break; case STT_NOTYPE: - case STT_FUNC: if (bfd_get_section (&q->symbol) == section && q->symbol.value >= low_func && q->symbol.value <= offset) @@ -7191,7 +7476,7 @@ _bfd_elfcore_make_pseudosection (bfd *abfd, sprintf (buf, "%s/%d", name, elfcore_make_pid (abfd)); len = strlen (buf) + 1; - threaded_name = bfd_alloc (abfd, len); + threaded_name = (char *) bfd_alloc (abfd, len); if (threaded_name == NULL) return FALSE; memcpy (threaded_name, buf, len); @@ -7306,7 +7591,7 @@ elfcore_grok_prfpreg (bfd *abfd, Elf_Internal_Note *note) } /* Linux dumps the Intel SSE regs in a note named "LINUX" with a note - type of 5 (NT_PRXFPREG). Just include the whole note's contents + type of NT_PRXFPREG. Just include the whole note's contents literally. */ static bfd_boolean @@ -7315,6 +7600,18 @@ elfcore_grok_prxfpreg (bfd *abfd, Elf_Internal_Note *note) return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note); } +static bfd_boolean +elfcore_grok_ppc_vmx (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vmx", note); +} + +static bfd_boolean +elfcore_grok_ppc_vsx (bfd *abfd, Elf_Internal_Note *note) +{ + return elfcore_make_note_pseudosection (abfd, ".reg-ppc-vsx", note); +} + #if defined (HAVE_PRPSINFO_T) typedef prpsinfo_t elfcore_psinfo_t; #if defined (HAVE_PRPSINFO32_T) /* Sparc64 cross Sparc32 */ @@ -7337,7 +7634,7 @@ char * _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max) { char *dups; - char *end = memchr (start, '\0', max); + char *end = (char *) memchr (start, '\0', max); size_t len; if (end == NULL) @@ -7345,7 +7642,7 @@ _bfd_elfcore_strndup (bfd *abfd, char *start, size_t max) else len = end - start; - dups = bfd_alloc (abfd, len + 1); + dups = (char *) bfd_alloc (abfd, len + 1); if (dups == NULL) return NULL; @@ -7530,7 +7827,6 @@ elfcore_grok_lwpstatus (bfd *abfd, Elf_Internal_Note *note) } #endif /* defined (HAVE_LWPSTATUS_T) */ -#if defined (HAVE_WIN32_PSTATUS_T) static bfd_boolean elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) { @@ -7538,27 +7834,35 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) char *name; size_t len; asection *sect; - win32_pstatus_t pstatus; + int type; + int is_active_thread; + bfd_vma base_addr; - if (note->descsz < sizeof (pstatus)) + if (note->descsz < 728) return TRUE; - memcpy (&pstatus, note->descdata, sizeof (pstatus)); + if (! CONST_STRNEQ (note->namedata, "win32")) + return TRUE; + + type = bfd_get_32 (abfd, note->descdata); - switch (pstatus.data_type) + switch (type) { - case NOTE_INFO_PROCESS: + case 1 /* NOTE_INFO_PROCESS */: /* FIXME: need to add ->core_command. */ - elf_tdata (abfd)->core_signal = pstatus.data.process_info.signal; - elf_tdata (abfd)->core_pid = pstatus.data.process_info.pid; + /* process_info.pid */ + elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 8); + /* process_info.signal */ + elf_tdata (abfd)->core_signal = bfd_get_32 (abfd, note->descdata + 12); break; - case NOTE_INFO_THREAD: + case 2 /* NOTE_INFO_THREAD */: /* Make a ".reg/999" section. */ - sprintf (buf, ".reg/%ld", (long) pstatus.data.thread_info.tid); + /* thread_info.tid */ + sprintf (buf, ".reg/%ld", (long) bfd_get_32 (abfd, note->descdata + 8)); len = strlen (buf) + 1; - name = bfd_alloc (abfd, len); + name = (char *) bfd_alloc (abfd, len); if (name == NULL) return FALSE; @@ -7568,24 +7872,28 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) if (sect == NULL) return FALSE; - sect->size = sizeof (pstatus.data.thread_info.thread_context); - sect->filepos = (note->descpos - + offsetof (struct win32_pstatus, - data.thread_info.thread_context)); + /* sizeof (thread_info.thread_context) */ + sect->size = 716; + /* offsetof (thread_info.thread_context) */ + sect->filepos = note->descpos + 12; sect->alignment_power = 2; - if (pstatus.data.thread_info.is_active_thread) + /* thread_info.is_active_thread */ + is_active_thread = bfd_get_32 (abfd, note->descdata + 8); + + if (is_active_thread) if (! elfcore_maybe_make_sect (abfd, ".reg", sect)) return FALSE; break; - case NOTE_INFO_MODULE: + case 3 /* NOTE_INFO_MODULE */: /* Make a ".module/xxxxxxxx" section. */ - sprintf (buf, ".module/%08lx", - (long) pstatus.data.module_info.base_address); + /* module_info.base_address */ + base_addr = bfd_get_32 (abfd, note->descdata + 4); + sprintf (buf, ".module/%08lx", (unsigned long) base_addr); len = strlen (buf) + 1; - name = bfd_alloc (abfd, len); + name = (char *) bfd_alloc (abfd, len); if (name == NULL) return FALSE; @@ -7607,7 +7915,6 @@ elfcore_grok_win32pstatus (bfd *abfd, Elf_Internal_Note *note) return TRUE; } -#endif /* HAVE_WIN32_PSTATUS_T */ static bfd_boolean elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) @@ -7642,10 +7949,8 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) case NT_FPREGSET: /* FIXME: rename to NT_PRFPREG */ return elfcore_grok_prfpreg (abfd, note); -#if defined (HAVE_WIN32_PSTATUS_T) case NT_WIN32PSTATUS: return elfcore_grok_win32pstatus (abfd, note); -#endif case NT_PRXFPREG: /* Linux SSE extension */ if (note->namesz == 6 @@ -7654,6 +7959,20 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) else return TRUE; + case NT_PPC_VMX: + if (note->namesz == 6 + && strcmp (note->namedata, "LINUX") == 0) + return elfcore_grok_ppc_vmx (abfd, note); + else + return TRUE; + + case NT_PPC_VSX: + if (note->namesz == 6 + && strcmp (note->namedata, "LINUX") == 0) + return elfcore_grok_ppc_vsx (abfd, note); + else + return TRUE; + case NT_PRPSINFO: case NT_PSINFO: if (bed->elf_backend_grok_psinfo) @@ -7681,6 +8000,32 @@ elfcore_grok_note (bfd *abfd, Elf_Internal_Note *note) } } +static bfd_boolean +elfobj_grok_gnu_build_id (bfd *abfd, Elf_Internal_Note *note) +{ + elf_tdata (abfd)->build_id_size = note->descsz; + elf_tdata (abfd)->build_id = (bfd_byte *) bfd_alloc (abfd, note->descsz); + if (elf_tdata (abfd)->build_id == NULL) + return FALSE; + + memcpy (elf_tdata (abfd)->build_id, note->descdata, note->descsz); + + return TRUE; +} + +static bfd_boolean +elfobj_grok_gnu_note (bfd *abfd, Elf_Internal_Note *note) +{ + switch (note->type) + { + default: + return TRUE; + + case NT_GNU_BUILD_ID: + return elfobj_grok_gnu_build_id (abfd, note); + } +} + static bfd_boolean elfcore_netbsd_get_lwpid (Elf_Internal_Note *note, int *lwpidp) { @@ -7779,6 +8124,70 @@ elfcore_grok_netbsd_note (bfd *abfd, Elf_Internal_Note *note) /* NOTREACHED */ } +static bfd_boolean +elfcore_grok_openbsd_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); + + /* Process ID at offset 0x20. */ + elf_tdata (abfd)->core_pid + = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + 0x20); + + /* Command name at 0x48 (max 32 bytes, including nul). */ + elf_tdata (abfd)->core_command + = _bfd_elfcore_strndup (abfd, note->descdata + 0x48, 31); + + return TRUE; +} + +static bfd_boolean +elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note) +{ + if (note->type == NT_OPENBSD_PROCINFO) + return elfcore_grok_openbsd_procinfo (abfd, note); + + if (note->type == NT_OPENBSD_REGS) + return elfcore_make_note_pseudosection (abfd, ".reg", note); + + if (note->type == NT_OPENBSD_FPREGS) + return elfcore_make_note_pseudosection (abfd, ".reg2", note); + + if (note->type == NT_OPENBSD_XFPREGS) + return elfcore_make_note_pseudosection (abfd, ".reg-xfp", note); + + if (note->type == NT_OPENBSD_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->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; + + return TRUE; + } + + if (note->type == NT_OPENBSD_WCOOKIE) + { + asection *sect = bfd_make_section_anyway_with_flags (abfd, ".wcookie", + SEC_HAS_CONTENTS); + + if (sect == NULL) + return FALSE; + sect->size = note->descsz; + sect->filepos = note->descpos; + sect->alignment_power = 1 + bfd_get_arch_size (abfd) / 32; + + return TRUE; + } + + return TRUE; +} + static bfd_boolean elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid) { @@ -7814,7 +8223,7 @@ elfcore_grok_nto_status (bfd *abfd, Elf_Internal_Note *note, long *tid) /* Make a ".qnx_core_status/%d" section. */ sprintf (buf, ".qnx_core_status/%ld", *tid); - name = bfd_alloc (abfd, strlen (buf) + 1); + name = (char *) bfd_alloc (abfd, strlen (buf) + 1); if (name == NULL) return FALSE; strcpy (name, buf); @@ -7843,7 +8252,7 @@ elfcore_grok_nto_regs (bfd *abfd, /* Make a "(base)/%d" section. */ sprintf (buf, "%s/%ld", base, tid); - name = bfd_alloc (abfd, strlen (buf) + 1); + name = (char *) bfd_alloc (abfd, strlen (buf) + 1); if (name == NULL) return FALSE; strcpy (name, buf); @@ -7900,7 +8309,7 @@ elfcore_grok_spu_note (bfd *abfd, Elf_Internal_Note *note) /* Use note name as section name. */ len = note->namesz; - name = bfd_alloc (abfd, len); + name = (char *) bfd_alloc (abfd, len); if (name == NULL) return FALSE; memcpy (name, note->namedata, len); @@ -7954,7 +8363,9 @@ elfcore_write_note (bfd *abfd, newspace = 12 + ((namesz + 3) & -4) + ((size + 3) & -4); - buf = realloc (buf, *bufsiz + newspace); + buf = (char *) realloc (buf, *bufsiz + newspace); + if (buf == NULL) + return buf; dest = buf + *bufsiz; *bufsiz += newspace; xnp = (Elf_External_Note *) dest; @@ -8180,28 +8591,53 @@ elfcore_write_prxfpreg (bfd *abfd, note_name, NT_PRXFPREG, xfpregs, size); } -static bfd_boolean -elfcore_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size) +char * +elfcore_write_ppc_vmx (bfd *abfd, + char *buf, + int *bufsiz, + const void *ppc_vmx, + int size) { - char *buf; - char *p; - - if (size <= 0) - return TRUE; + char *note_name = "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_PPC_VMX, ppc_vmx, size); +} - if (bfd_seek (abfd, offset, SEEK_SET) != 0) - return FALSE; +char * +elfcore_write_ppc_vsx (bfd *abfd, + char *buf, + int *bufsiz, + const void *ppc_vsx, + int size) +{ + char *note_name = "LINUX"; + return elfcore_write_note (abfd, buf, bufsiz, + note_name, NT_PPC_VSX, ppc_vsx, size); +} - buf = bfd_malloc (size); - if (buf == NULL) - return FALSE; +char * +elfcore_write_register_note (bfd *abfd, + char *buf, + int *bufsiz, + const char *section, + const void *data, + int size) +{ + if (strcmp (section, ".reg2") == 0) + return elfcore_write_prfpreg (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-xfp") == 0) + return elfcore_write_prxfpreg (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-ppc-vmx") == 0) + return elfcore_write_ppc_vmx (abfd, buf, bufsiz, data, size); + if (strcmp (section, ".reg-ppc-vsx") == 0) + return elfcore_write_ppc_vsx (abfd, buf, bufsiz, data, size); + return NULL; +} - if (bfd_bread (buf, size, abfd) != size) - { - error: - free (buf); - return FALSE; - } +static bfd_boolean +elf_parse_notes (bfd *abfd, char *buf, size_t size, file_ptr offset) +{ + char *p; p = buf; while (p < buf + size) @@ -8210,39 +8646,94 @@ elfcore_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size) Elf_External_Note *xnp = (Elf_External_Note *) p; Elf_Internal_Note in; + if (offsetof (Elf_External_Note, name) > buf - p + size) + return FALSE; + in.type = H_GET_32 (abfd, xnp->type); in.namesz = H_GET_32 (abfd, xnp->namesz); in.namedata = xnp->name; + if (in.namesz > buf - in.namedata + size) + return FALSE; in.descsz = H_GET_32 (abfd, xnp->descsz); in.descdata = in.namedata + BFD_ALIGN (in.namesz, 4); in.descpos = offset + (in.descdata - buf); + if (in.descsz != 0 + && (in.descdata >= buf + size + || in.descsz > buf - in.descdata + size)) + return FALSE; - 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 (CONST_STRNEQ (in.namedata, "SPU/")) - { - if (! elfcore_grok_spu_note (abfd, &in)) - return FALSE; - } - else - { - if (! elfcore_grok_note (abfd, &in)) - goto error; + switch (bfd_get_format (abfd)) + { + default: + return TRUE; + + case bfd_core: + if (CONST_STRNEQ (in.namedata, "NetBSD-CORE")) + { + if (! elfcore_grok_netbsd_note (abfd, &in)) + return FALSE; + } + else if (CONST_STRNEQ (in.namedata, "OpenBSD")) + { + if (! elfcore_grok_openbsd_note (abfd, &in)) + return FALSE; + } + else if (CONST_STRNEQ (in.namedata, "QNX")) + { + if (! elfcore_grok_nto_note (abfd, &in)) + return FALSE; + } + else if (CONST_STRNEQ (in.namedata, "SPU/")) + { + if (! elfcore_grok_spu_note (abfd, &in)) + return FALSE; + } + else + { + if (! elfcore_grok_note (abfd, &in)) + return FALSE; + } + break; + + case bfd_object: + if (in.namesz == sizeof "GNU" && strcmp (in.namedata, "GNU") == 0) + { + if (! elfobj_grok_gnu_note (abfd, &in)) + return FALSE; + } + break; } p = in.descdata + BFD_ALIGN (in.descsz, 4); } + return TRUE; +} + +static bfd_boolean +elf_read_notes (bfd *abfd, file_ptr offset, bfd_size_type size) +{ + char *buf; + + if (size <= 0) + return TRUE; + + if (bfd_seek (abfd, offset, SEEK_SET) != 0) + return FALSE; + + buf = (char *) bfd_malloc (size); + if (buf == NULL) + return FALSE; + + if (bfd_bread (buf, size, abfd) != size + || !elf_parse_notes (abfd, buf, size, offset)) + { + free (buf); + return FALSE; + } + free (buf); return TRUE; } @@ -8291,63 +8782,6 @@ bfd_get_elf_phdrs (bfd *abfd, void *phdrs) return num_phdrs; } -void -_bfd_elf_sprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, char *buf, bfd_vma value) -{ -#ifdef BFD64 - Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */ - - i_ehdrp = elf_elfheader (abfd); - if (i_ehdrp == NULL) - sprintf_vma (buf, value); - else - { - if (i_ehdrp->e_ident[EI_CLASS] == ELFCLASS64) - { -#if BFD_HOST_64BIT_LONG - sprintf (buf, "%016lx", value); -#else - sprintf (buf, "%08lx%08lx", _bfd_int64_high (value), - _bfd_int64_low (value)); -#endif - } - else - sprintf (buf, "%08lx", (unsigned long) (value & 0xffffffff)); - } -#else - sprintf_vma (buf, value); -#endif -} - -void -_bfd_elf_fprintf_vma (bfd *abfd ATTRIBUTE_UNUSED, void *stream, bfd_vma value) -{ -#ifdef BFD64 - Elf_Internal_Ehdr *i_ehdrp; /* Elf file header, internal form */ - - i_ehdrp = elf_elfheader (abfd); - if (i_ehdrp == NULL) - fprintf_vma ((FILE *) stream, value); - else - { - if (i_ehdrp->e_ident[EI_CLASS] == ELFCLASS64) - { -#if BFD_HOST_64BIT_LONG - fprintf ((FILE *) stream, "%016lx", value); -#else - fprintf ((FILE *) stream, "%08lx%08lx", - _bfd_int64_high (value), _bfd_int64_low (value)); -#endif - } - else - fprintf ((FILE *) stream, "%08lx", - (unsigned long) (value & 0xffffffff)); - } -#else - fprintf_vma ((FILE *) stream, value); -#endif -} - enum elf_reloc_type_class _bfd_elf_reloc_type_class (const Elf_Internal_Rela *rela ATTRIBUTE_UNUSED) { @@ -8485,7 +8919,7 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd, relplt_name = bed->relplt_name; if (relplt_name == NULL) - relplt_name = bed->default_use_rela_p ? ".rela.plt" : ".rel.plt"; + relplt_name = bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt"; relplt = bfd_get_section_by_name (abfd, relplt_name); if (relplt == NULL) return 0; @@ -8506,17 +8940,27 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd, count = relplt->size / hdr->sh_entsize; size = count * sizeof (asymbol); p = relplt->relocation; - for (i = 0; i < count; i++, p++) - size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt"); + for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel) + { + size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt"); + if (p->addend != 0) + { +#ifdef BFD64 + size += sizeof ("+0x") - 1 + 8 + 8 * (bed->s->elfclass == ELFCLASS64); +#else + size += sizeof ("+0x") - 1 + 8; +#endif + } + } - s = *ret = bfd_malloc (size); + s = *ret = (asymbol *) bfd_malloc (size); if (s == NULL) return -1; names = (char *) (s + count); p = relplt->relocation; n = 0; - for (i = 0; i < count; i++, s++, p++) + for (i = 0; i < count; i++, p += bed->s->int_rels_per_ext_rel) { size_t len; bfd_vma addr; @@ -8530,15 +8974,30 @@ _bfd_elf_get_synthetic_symtab (bfd *abfd, we are defining a symbol, ensure one of them is set. */ if ((s->flags & BSF_LOCAL) == 0) s->flags |= BSF_GLOBAL; + s->flags |= BSF_SYNTHETIC; s->section = plt; s->value = addr - plt->vma; s->name = names; + s->udata.p = NULL; len = strlen ((*p->sym_ptr_ptr)->name); memcpy (names, (*p->sym_ptr_ptr)->name, len); names += len; + if (p->addend != 0) + { + char buf[30], *a; + int len; + memcpy (names, "+0x", sizeof ("+0x") - 1); + names += sizeof ("+0x") - 1; + bfd_sprintf_vma (abfd, buf, p->addend); + for (a = buf; *a == '0'; ++a) + ; + len = strlen (a); + memcpy (names, a, len); + names += len; + } memcpy (names, "@plt", sizeof ("@plt")); names += sizeof ("@plt"); - ++n; + ++s, ++n; } return n; @@ -8558,15 +9017,23 @@ _bfd_elf_set_osabi (bfd * abfd, i_ehdrp = elf_elfheader (abfd); i_ehdrp->e_ident[EI_OSABI] = get_elf_backend_data (abfd)->elf_osabi; + + /* To make things simpler for the loader on Linux systems we set the + osabi field to ELFOSABI_LINUX if the binary contains symbols of + the STT_GNU_IFUNC type. */ + if (i_ehdrp->e_ident[EI_OSABI] == ELFOSABI_NONE + && elf_tdata (abfd)->has_ifunc_symbols) + i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_LINUX; } /* 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. */ + most targets. It returns true if TYPE is STT_FUNC or STT_GNU_IFUNC. */ bfd_boolean _bfd_elf_is_function_type (unsigned int type) { - return (type == STT_FUNC); + return (type == STT_FUNC + || type == STT_GNU_IFUNC); } diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 1a7bf02..157024c 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -1,6 +1,6 @@ /* 32-bit ELF support for ARM - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -20,6 +20,8 @@ MA 02110-1301, USA. */ #include "sysdep.h" +#include + #include "bfd.h" #include "libiberty.h" #include "libbfd.h" @@ -27,10 +29,6 @@ #include "elf-vxworks.h" #include "elf/arm.h" -#ifndef NUM_ELEM -#define NUM_ELEM(a) (sizeof (a) / (sizeof (a)[0])) -#endif - /* Return the relocation section associated with NAME. HTAB is the bfd's elf32_arm_link_hash_entry. */ #define RELOC_SECTION(HTAB, NAME) \ @@ -65,13 +63,18 @@ static struct elf_backend_data elf32_arm_vxworks_bed; +static bfd_boolean elf32_arm_write_section (bfd *output_bfd, + struct bfd_link_info *link_info, + asection *sec, + bfd_byte *contents); + /* 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 in that slot. */ static reloc_howto_type elf32_arm_howto_table_1[] = { - /* No relocation */ + /* No relocation. */ HOWTO (R_ARM_NONE, /* type */ 0, /* rightshift */ 0, /* size (0 = byte, 1 = short, 2 = long) */ @@ -696,8 +699,8 @@ static reloc_howto_type elf32_arm_howto_table_1[] = bfd_elf_generic_reloc, /* special_function */ "R_ARM_MOVW_ABS_NC", /* name */ FALSE, /* partial_inplace */ - 0x0000ffff, /* src_mask */ - 0x0000ffff, /* dst_mask */ + 0x000f0fff, /* src_mask */ + 0x000f0fff, /* dst_mask */ FALSE), /* pcrel_offset */ HOWTO (R_ARM_MOVT_ABS, /* type */ @@ -710,8 +713,8 @@ static reloc_howto_type elf32_arm_howto_table_1[] = bfd_elf_generic_reloc, /* special_function */ "R_ARM_MOVT_ABS", /* name */ FALSE, /* partial_inplace */ - 0x0000ffff, /* src_mask */ - 0x0000ffff, /* dst_mask */ + 0x000f0fff, /* src_mask */ + 0x000f0fff, /* dst_mask */ FALSE), /* pcrel_offset */ HOWTO (R_ARM_MOVW_PREL_NC, /* type */ @@ -724,8 +727,8 @@ static reloc_howto_type elf32_arm_howto_table_1[] = bfd_elf_generic_reloc, /* special_function */ "R_ARM_MOVW_PREL_NC", /* name */ FALSE, /* partial_inplace */ - 0x0000ffff, /* src_mask */ - 0x0000ffff, /* dst_mask */ + 0x000f0fff, /* src_mask */ + 0x000f0fff, /* dst_mask */ TRUE), /* pcrel_offset */ HOWTO (R_ARM_MOVT_PREL, /* type */ @@ -738,8 +741,8 @@ static reloc_howto_type elf32_arm_howto_table_1[] = bfd_elf_generic_reloc, /* special_function */ "R_ARM_MOVT_PREL", /* name */ FALSE, /* partial_inplace */ - 0x0000ffff, /* src_mask */ - 0x0000ffff, /* dst_mask */ + 0x000f0fff, /* src_mask */ + 0x000f0fff, /* dst_mask */ TRUE), /* pcrel_offset */ HOWTO (R_ARM_THM_MOVW_ABS_NC, /* type */ @@ -1351,7 +1354,7 @@ static reloc_howto_type elf32_arm_howto_table_1[] = 0x040f70ff, /* dst_mask */ FALSE), /* pcrel_offset */ - EMPTY_HOWTO (90), /* unallocated */ + EMPTY_HOWTO (90), /* Unallocated. */ EMPTY_HOWTO (91), EMPTY_HOWTO (92), EMPTY_HOWTO (93), @@ -1668,11 +1671,11 @@ static reloc_howto_type elf32_arm_howto_table_2[4] = static reloc_howto_type * elf32_arm_howto_from_type (unsigned int r_type) { - if (r_type < NUM_ELEM (elf32_arm_howto_table_1)) + if (r_type < ARRAY_SIZE (elf32_arm_howto_table_1)) return &elf32_arm_howto_table_1[r_type]; if (r_type >= R_ARM_RREL32 - && r_type < R_ARM_RREL32 + NUM_ELEM (elf32_arm_howto_table_2)) + && r_type < R_ARM_RREL32 + ARRAY_SIZE (elf32_arm_howto_table_2)) return &elf32_arm_howto_table_2[r_type - R_ARM_RREL32]; return NULL; @@ -1773,7 +1776,8 @@ static const struct elf32_arm_reloc_map elf32_arm_reloc_map[] = {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} + {BFD_RELOC_ARM_LDC_SB_G2, R_ARM_LDC_SB_G2}, + {BFD_RELOC_ARM_V4BX, R_ARM_V4BX} }; static reloc_howto_type * @@ -1781,7 +1785,8 @@ elf32_arm_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) { unsigned int i; - for (i = 0; i < NUM_ELEM (elf32_arm_reloc_map); i ++) + + for (i = 0; i < ARRAY_SIZE (elf32_arm_reloc_map); i ++) if (elf32_arm_reloc_map[i].bfd_reloc_val == code) return elf32_arm_howto_from_type (elf32_arm_reloc_map[i].elf_reloc_val); @@ -1794,18 +1799,12 @@ elf32_arm_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, { unsigned int i; - for (i = 0; - i < (sizeof (elf32_arm_howto_table_1) - / sizeof (elf32_arm_howto_table_1[0])); - i++) + for (i = 0; i < ARRAY_SIZE (elf32_arm_howto_table_1); 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++) + for (i = 0; i < ARRAY_SIZE (elf32_arm_howto_table_2); 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]; @@ -1813,7 +1812,8 @@ elf32_arm_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, return NULL; } -/* Support for core dump NOTE sections */ +/* Support for core dump NOTE sections. */ + static bfd_boolean elf32_arm_nabi_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) { @@ -1825,7 +1825,7 @@ elf32_arm_nabi_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) default: return FALSE; - case 148: /* Linux/ARM 32-bit*/ + case 148: /* Linux/ARM 32-bit. */ /* pr_cursig */ elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); @@ -1852,7 +1852,7 @@ elf32_arm_nabi_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) default: return FALSE; - case 124: /* Linux/ARM elf_prpsinfo */ + case 124: /* Linux/ARM elf_prpsinfo. */ elf_tdata (abfd)->core_program = _bfd_elfcore_strndup (abfd, note->descdata + 28, 16); elf_tdata (abfd)->core_command @@ -1862,7 +1862,6 @@ elf32_arm_nabi_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) /* 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); @@ -1889,7 +1888,8 @@ typedef unsigned short int insn16; interworkable. */ #define INTERWORK_FLAG(abfd) \ (EF_ARM_EABI_VERSION (elf_elfheader (abfd)->e_flags) >= EF_ARM_EABI_VER4 \ - || (elf_elfheader (abfd)->e_flags & EF_ARM_INTERWORK)) + || (elf_elfheader (abfd)->e_flags & EF_ARM_INTERWORK) \ + || ((abfd)->flags & BFD_LINKER_CREATED)) /* The linker script knows the section names for placement. The entry_names are used to do simple name mangling on the stubs. @@ -1904,6 +1904,11 @@ typedef unsigned short int insn16; #define VFP11_ERRATUM_VENEER_SECTION_NAME ".vfp11_veneer" #define VFP11_ERRATUM_VENEER_ENTRY_NAME "__vfp11_veneer_%x" +#define ARM_BX_GLUE_SECTION_NAME ".v4_bx" +#define ARM_BX_GLUE_ENTRY_NAME "__bx_r%d" + +#define STUB_ENTRY_NAME "__%s_veneer" + /* The name of the dynamic interpreter. This is put in the .interp section. */ #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1" @@ -2000,12 +2005,294 @@ static const bfd_vma elf32_arm_plt_thumb_stub [] = /* The entries in a PLT when using a DLL-based target with multiple address spaces. */ -static const bfd_vma elf32_arm_symbian_plt_entry [] = +static const bfd_vma elf32_arm_symbian_plt_entry [] = { 0xe51ff004, /* ldr pc, [pc, #-4] */ 0x00000000, /* dcd R_ARM_GLOB_DAT(X) */ }; +#define ARM_MAX_FWD_BRANCH_OFFSET ((((1 << 23) - 1) << 2) + 8) +#define ARM_MAX_BWD_BRANCH_OFFSET ((-((1 << 23) << 2)) + 8) +#define THM_MAX_FWD_BRANCH_OFFSET ((1 << 22) -2 + 4) +#define THM_MAX_BWD_BRANCH_OFFSET (-(1 << 22) + 4) +#define THM2_MAX_FWD_BRANCH_OFFSET (((1 << 24) - 2) + 4) +#define THM2_MAX_BWD_BRANCH_OFFSET (-(1 << 24) + 4) + +enum stub_insn_type + { + THUMB16_TYPE = 1, + THUMB32_TYPE, + ARM_TYPE, + DATA_TYPE + }; + +#define THUMB16_INSN(X) {(X), THUMB16_TYPE, R_ARM_NONE, 0} +/* A bit of a hack. A Thumb conditional branch, in which the proper condition + is inserted in arm_build_one_stub(). */ +#define THUMB16_BCOND_INSN(X) {(X), THUMB16_TYPE, R_ARM_NONE, 1} +#define THUMB32_INSN(X) {(X), THUMB32_TYPE, R_ARM_NONE, 0} +#define THUMB32_B_INSN(X, Z) {(X), THUMB32_TYPE, R_ARM_THM_JUMP24, (Z)} +#define ARM_INSN(X) {(X), ARM_TYPE, R_ARM_NONE, 0} +#define ARM_REL_INSN(X, Z) {(X), ARM_TYPE, R_ARM_JUMP24, (Z)} +#define DATA_WORD(X,Y,Z) {(X), DATA_TYPE, (Y), (Z)} + +typedef struct +{ + bfd_vma data; + enum stub_insn_type type; + unsigned int r_type; + int reloc_addend; +} insn_sequence; + +/* Arm/Thumb -> Arm/Thumb long branch stub. On V5T and above, use blx + to reach the stub if necessary. */ +static const insn_sequence elf32_arm_stub_long_branch_any_any[] = + { + ARM_INSN(0xe51ff004), /* ldr pc, [pc, #-4] */ + DATA_WORD(0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ + }; + +/* V4T Arm -> Thumb long branch stub. Used on V4T where blx is not + available. */ +static const insn_sequence elf32_arm_stub_long_branch_v4t_arm_thumb[] = + { + ARM_INSN(0xe59fc000), /* ldr ip, [pc, #0] */ + ARM_INSN(0xe12fff1c), /* bx ip */ + DATA_WORD(0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ + }; + +/* Thumb -> Thumb long branch stub. Used on M-profile architectures. */ +static const insn_sequence elf32_arm_stub_long_branch_thumb_only[] = + { + THUMB16_INSN(0xb401), /* push {r0} */ + THUMB16_INSN(0x4802), /* ldr r0, [pc, #8] */ + THUMB16_INSN(0x4684), /* mov ip, r0 */ + THUMB16_INSN(0xbc01), /* pop {r0} */ + THUMB16_INSN(0x4760), /* bx ip */ + THUMB16_INSN(0xbf00), /* nop */ + DATA_WORD(0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ + }; + +/* V4T Thumb -> Thumb long branch stub. Using the stack is not + allowed. */ +static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb[] = + { + THUMB16_INSN(0x4778), /* bx pc */ + THUMB16_INSN(0x46c0), /* nop */ + ARM_INSN(0xe59fc000), /* ldr ip, [pc, #0] */ + ARM_INSN(0xe12fff1c), /* bx ip */ + DATA_WORD(0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ + }; + +/* V4T Thumb -> ARM long branch stub. Used on V4T where blx is not + available. */ +static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm[] = + { + THUMB16_INSN(0x4778), /* bx pc */ + THUMB16_INSN(0x46c0), /* nop */ + ARM_INSN(0xe51ff004), /* ldr pc, [pc, #-4] */ + DATA_WORD(0, R_ARM_ABS32, 0), /* dcd R_ARM_ABS32(X) */ + }; + +/* V4T Thumb -> ARM short branch stub. Shorter variant of the above + one, when the destination is close enough. */ +static const insn_sequence elf32_arm_stub_short_branch_v4t_thumb_arm[] = + { + THUMB16_INSN(0x4778), /* bx pc */ + THUMB16_INSN(0x46c0), /* nop */ + ARM_REL_INSN(0xea000000, -8), /* b (X-8) */ + }; + +/* ARM/Thumb -> ARM long branch stub, PIC. On V5T and above, use + blx to reach the stub if necessary. */ +static const insn_sequence elf32_arm_stub_long_branch_any_arm_pic[] = + { + ARM_INSN(0xe59fc000), /* ldr r12, [pc] */ + ARM_INSN(0xe08ff00c), /* add pc, pc, ip */ + DATA_WORD(0, R_ARM_REL32, -4), /* dcd R_ARM_REL32(X-4) */ + }; + +/* ARM/Thumb -> Thumb long branch stub, PIC. On V5T and above, use + blx to reach the stub if necessary. We can not add into pc; + it is not guaranteed to mode switch (different in ARMv6 and + ARMv7). */ +static const insn_sequence elf32_arm_stub_long_branch_any_thumb_pic[] = + { + ARM_INSN(0xe59fc004), /* ldr r12, [pc, #4] */ + ARM_INSN(0xe08fc00c), /* add ip, pc, ip */ + ARM_INSN(0xe12fff1c), /* bx ip */ + DATA_WORD(0, R_ARM_REL32, 0), /* dcd R_ARM_REL32(X) */ + }; + +/* V4T ARM -> ARM long branch stub, PIC. */ +static const insn_sequence elf32_arm_stub_long_branch_v4t_arm_thumb_pic[] = + { + ARM_INSN(0xe59fc004), /* ldr ip, [pc, #4] */ + ARM_INSN(0xe08fc00c), /* add ip, pc, ip */ + ARM_INSN(0xe12fff1c), /* bx ip */ + DATA_WORD(0, R_ARM_REL32, 0), /* dcd R_ARM_REL32(X) */ + }; + +/* V4T Thumb -> ARM long branch stub, PIC. */ +static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_arm_pic[] = + { + THUMB16_INSN(0x4778), /* bx pc */ + THUMB16_INSN(0x46c0), /* nop */ + ARM_INSN(0xe59fc000), /* ldr ip, [pc, #0] */ + ARM_INSN(0xe08cf00f), /* add pc, ip, pc */ + DATA_WORD(0, R_ARM_REL32, -4), /* dcd R_ARM_REL32(X) */ + }; + +/* Thumb -> Thumb long branch stub, PIC. Used on M-profile + architectures. */ +static const insn_sequence elf32_arm_stub_long_branch_thumb_only_pic[] = + { + THUMB16_INSN(0xb401), /* push {r0} */ + THUMB16_INSN(0x4802), /* ldr r0, [pc, #8] */ + THUMB16_INSN(0x46fc), /* mov ip, pc */ + THUMB16_INSN(0x4484), /* add ip, r0 */ + THUMB16_INSN(0xbc01), /* pop {r0} */ + THUMB16_INSN(0x4760), /* bx ip */ + DATA_WORD(0, R_ARM_REL32, 4), /* dcd R_ARM_REL32(X) */ + }; + +/* V4T Thumb -> Thumb long branch stub, PIC. Using the stack is not + allowed. */ +static const insn_sequence elf32_arm_stub_long_branch_v4t_thumb_thumb_pic[] = + { + THUMB16_INSN(0x4778), /* bx pc */ + THUMB16_INSN(0x46c0), /* nop */ + ARM_INSN(0xe59fc004), /* ldr ip, [pc, #4] */ + ARM_INSN(0xe08fc00c), /* add ip, pc, ip */ + ARM_INSN(0xe12fff1c), /* bx ip */ + DATA_WORD(0, R_ARM_REL32, 0), /* dcd R_ARM_REL32(X) */ + }; + +/* Cortex-A8 erratum-workaround stubs. */ + +/* Stub used for conditional branches (which may be beyond +/-1MB away, so we + can't use a conditional branch to reach this stub). */ + +static const insn_sequence elf32_arm_stub_a8_veneer_b_cond[] = + { + THUMB16_BCOND_INSN(0xd001), /* b.n true. */ + THUMB32_B_INSN(0xf000b800, -4), /* b.w insn_after_original_branch. */ + THUMB32_B_INSN(0xf000b800, -4) /* true: b.w original_branch_dest. */ + }; + +/* Stub used for b.w and bl.w instructions. */ + +static const insn_sequence elf32_arm_stub_a8_veneer_b[] = + { + THUMB32_B_INSN(0xf000b800, -4) /* b.w original_branch_dest. */ + }; + +static const insn_sequence elf32_arm_stub_a8_veneer_bl[] = + { + THUMB32_B_INSN(0xf000b800, -4) /* b.w original_branch_dest. */ + }; + +/* Stub used for Thumb-2 blx.w instructions. We modified the original blx.w + instruction (which switches to ARM mode) to point to this stub. Jump to the + real destination using an ARM-mode branch. */ + +static const insn_sequence elf32_arm_stub_a8_veneer_blx[] = + { + ARM_REL_INSN(0xea000000, -8) /* b original_branch_dest. */ + }; + +/* Section name for stubs is the associated section name plus this + string. */ +#define STUB_SUFFIX ".stub" + +/* One entry per long/short branch stub defined above. */ +#define DEF_STUBS \ + DEF_STUB(long_branch_any_any) \ + DEF_STUB(long_branch_v4t_arm_thumb) \ + DEF_STUB(long_branch_thumb_only) \ + DEF_STUB(long_branch_v4t_thumb_thumb) \ + DEF_STUB(long_branch_v4t_thumb_arm) \ + DEF_STUB(short_branch_v4t_thumb_arm) \ + DEF_STUB(long_branch_any_arm_pic) \ + DEF_STUB(long_branch_any_thumb_pic) \ + DEF_STUB(long_branch_v4t_thumb_thumb_pic) \ + DEF_STUB(long_branch_v4t_arm_thumb_pic) \ + DEF_STUB(long_branch_v4t_thumb_arm_pic) \ + DEF_STUB(long_branch_thumb_only_pic) \ + DEF_STUB(a8_veneer_b_cond) \ + DEF_STUB(a8_veneer_b) \ + DEF_STUB(a8_veneer_bl) \ + DEF_STUB(a8_veneer_blx) + +#define DEF_STUB(x) arm_stub_##x, +enum elf32_arm_stub_type { + arm_stub_none, + DEF_STUBS + /* Note the first a8_veneer type */ + arm_stub_a8_veneer_lwm = arm_stub_a8_veneer_b_cond +}; +#undef DEF_STUB + +typedef struct +{ + const insn_sequence* template_sequence; + int template_size; +} stub_def; + +#define DEF_STUB(x) {elf32_arm_stub_##x, ARRAY_SIZE(elf32_arm_stub_##x)}, +static const stub_def stub_definitions[] = { + {NULL, 0}, + DEF_STUBS +}; + +struct elf32_arm_stub_hash_entry +{ + /* Base hash table entry structure. */ + struct bfd_hash_entry root; + + /* The stub section. */ + asection *stub_sec; + + /* 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; + asection *target_section; + + /* Offset to apply to relocation referencing target_value. */ + bfd_vma target_addend; + + /* The instruction which caused this stub to be generated (only valid for + Cortex-A8 erratum workaround stubs at present). */ + unsigned long orig_insn; + + /* The stub type. */ + enum elf32_arm_stub_type stub_type; + /* Its encoding size in bytes. */ + int stub_size; + /* Its template. */ + const insn_sequence *stub_template; + /* The size of the template (number of entries). */ + int stub_template_size; + + /* The symbol table entry, if any, that this was derived from. */ + struct elf32_arm_link_hash_entry *h; + + /* Destination symbol type (STT_ARM_TFUNC, ...) */ + unsigned char st_type; + + /* Where this stub is being called from, or, in the case of combined + stub sections, the first input section in the group. */ + asection *id_sec; + + /* The name for the local symbol at the start of this stub. The + stub name in the hash table has to be unique; this does not, so + it can be friendlier. */ + char *output_name; +}; + /* Used to build a map of a section. This is required for mixed-endian code/data. */ @@ -2048,24 +2335,90 @@ typedef struct elf32_vfp11_erratum_list } elf32_vfp11_erratum_list; +typedef enum +{ + DELETE_EXIDX_ENTRY, + INSERT_EXIDX_CANTUNWIND_AT_END +} +arm_unwind_edit_type; + +/* A (sorted) list of edits to apply to an unwind table. */ +typedef struct arm_unwind_table_edit +{ + arm_unwind_edit_type type; + /* Note: we sometimes want to insert an unwind entry corresponding to a + section different from the one we're currently writing out, so record the + (text) section this edit relates to here. */ + asection *linked_section; + unsigned int index; + struct arm_unwind_table_edit *next; +} +arm_unwind_table_edit; + typedef struct _arm_elf_section_data { + /* Information about mapping symbols. */ struct bfd_elf_section_data elf; unsigned int mapcount; unsigned int mapsize; elf32_arm_section_map *map; + /* Information about CPU errata. */ unsigned int erratumcount; elf32_vfp11_erratum_list *erratumlist; + /* Information about unwind tables. */ + union + { + /* Unwind info attached to a text section. */ + struct + { + asection *arm_exidx_sec; + } text; + + /* Unwind info attached to an .ARM.exidx section. */ + struct + { + arm_unwind_table_edit *unwind_edit_list; + arm_unwind_table_edit *unwind_edit_tail; + } exidx; + } u; } _arm_elf_section_data; #define elf32_arm_section_data(sec) \ ((_arm_elf_section_data *) elf_section_data (sec)) +/* A fix which might be required for Cortex-A8 Thumb-2 branch/TLB erratum. + These fixes are subject to a relaxation procedure (in elf32_arm_size_stubs), + so may be created multiple times: we use an array of these entries whilst + relaxing which we can refresh easily, then create stubs for each potentially + erratum-triggering instruction once we've settled on a solution. */ + +struct a8_erratum_fix { + bfd *input_bfd; + asection *section; + bfd_vma offset; + bfd_vma addend; + unsigned long orig_insn; + char *stub_name; + enum elf32_arm_stub_type stub_type; +}; + +/* A table of relocs applied to branches which might trigger Cortex-A8 + erratum. */ + +struct a8_erratum_reloc { + bfd_vma from; + bfd_vma destination; + unsigned int r_type; + unsigned char st_type; + const char *sym_name; + bfd_boolean non_a8_stub; +}; + /* The size of the thread control block. */ #define TCB_SIZE 8 -struct elf32_arm_obj_tdata +struct elf_arm_obj_tdata { struct elf_obj_tdata root; @@ -2074,25 +2427,27 @@ struct elf32_arm_obj_tdata /* Zero to warn when linking objects with incompatible enum sizes. */ int no_enum_size_warning; + + /* Zero to warn when linking objects with incompatible wchar_t sizes. */ + int no_wchar_size_warning; }; -#define elf32_arm_tdata(abfd) \ - ((struct elf32_arm_obj_tdata *) (abfd)->tdata.any) +#define elf_arm_tdata(bfd) \ + ((struct elf_arm_obj_tdata *) (bfd)->tdata.any) + +#define elf32_arm_local_got_tls_type(bfd) \ + (elf_arm_tdata (bfd)->local_got_tls_type) -#define elf32_arm_local_got_tls_type(abfd) \ - (elf32_arm_tdata (abfd)->local_got_tls_type) +#define is_arm_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == ARM_ELF_TDATA) static bfd_boolean elf32_arm_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct elf_arm_obj_tdata), + ARM_ELF_TDATA); } /* The ARM linker needs to keep track of the number of relocs that it @@ -2147,6 +2502,10 @@ struct elf32_arm_link_hash_entry /* The symbol marking the real symbol location for exported thumb symbols with Arm stubs. */ struct elf_link_hash_entry *export_glue; + + /* A pointer to the most recently used stub hash entry against this + symbol. */ + struct elf32_arm_stub_hash_entry *stub_cache; }; /* Traverse an arm ELF linker hash table. */ @@ -2160,90 +2519,139 @@ struct elf32_arm_link_hash_entry #define elf32_arm_hash_table(info) \ ((struct elf32_arm_link_hash_table *) ((info)->hash)) +#define arm_stub_hash_lookup(table, string, create, copy) \ + ((struct elf32_arm_stub_hash_entry *) \ + bfd_hash_lookup ((table), (string), (create), (copy))) + /* ARM ELF linker hash table. */ struct elf32_arm_link_hash_table - { - /* The main hash table. */ - struct elf_link_hash_table root; +{ + /* The main hash table. */ + struct elf_link_hash_table root; - /* The size in bytes of the section containing the Thumb-to-ARM glue. */ - bfd_size_type thumb_glue_size; + /* The size in bytes of the section containing the Thumb-to-ARM glue. */ + bfd_size_type thumb_glue_size; - /* 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 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; + /* The size in bytes of section containing the ARMv4 BX veneers. */ + bfd_size_type bx_glue_size; - /* An arbitrary input BFD chosen to hold the glue sections. */ - bfd * bfd_of_glue_owner; + /* Offsets of ARMv4 BX veneers. Bit1 set if present, and Bit0 set when + veneer has been populated. */ + bfd_vma bx_glue_offset[15]; - /* Nonzero to output a BE8 image. */ - int byteswap_code; + /* The size in bytes of the section containing glue for VFP11 erratum + veneers. */ + bfd_size_type vfp11_erratum_glue_size; - /* Zero if R_ARM_TARGET1 means R_ARM_ABS32. - Nonzero if R_ARM_TARGET1 means R_ARM_REL32. */ - int target1_is_rel; + /* A table of fix locations for Cortex-A8 Thumb-2 branch/TLB erratum. This + holds Cortex-A8 erratum fix locations between elf32_arm_size_stubs() and + elf32_arm_write_section(). */ + struct a8_erratum_fix *a8_erratum_fixes; + unsigned int num_a8_erratum_fixes; - /* The relocation to use for R_ARM_TARGET2 relocations. */ - int target2_reloc; + /* An arbitrary input BFD chosen to hold the glue sections. */ + bfd * bfd_of_glue_owner; - /* Nonzero to fix BX instructions for ARMv4 targets. */ - int fix_v4bx; + /* Nonzero to output a BE8 image. */ + int byteswap_code; - /* Nonzero if the ARM/Thumb BLX instructions are available for use. */ - int use_blx; + /* Zero if R_ARM_TARGET1 means R_ARM_ABS32. + Nonzero if R_ARM_TARGET1 means R_ARM_REL32. */ + int target1_is_rel; - /* What sort of code sequences we should look for which may trigger the - VFP11 denorm erratum. */ - bfd_arm_vfp11_fix vfp11_fix; + /* The relocation to use for R_ARM_TARGET2 relocations. */ + int target2_reloc; - /* Global counter for the number of fixes we have emitted. */ - int num_vfp11_fixes; + /* 0 = Ignore R_ARM_V4BX. + 1 = Convert BX to MOV PC. + 2 = Generate v4 interworing stubs. */ + int fix_v4bx; - /* Nonzero to force PIC branch veneers. */ - int pic_veneer; + /* Whether we should fix the Cortex-A8 Thumb-2 branch/TLB erratum. */ + int fix_cortex_a8; - /* The number of bytes in the initial entry in the PLT. */ - bfd_size_type plt_header_size; + /* Nonzero if the ARM/Thumb BLX instructions are available for use. */ + int use_blx; - /* The number of bytes in the subsequent PLT etries. */ - bfd_size_type plt_entry_size; + /* What sort of code sequences we should look for which may trigger the + VFP11 denorm erratum. */ + bfd_arm_vfp11_fix vfp11_fix; - /* True if the target system is VxWorks. */ - int vxworks_p; + /* Global counter for the number of fixes we have emitted. */ + int num_vfp11_fixes; - /* True if the target system is Symbian OS. */ - int symbian_p; + /* Nonzero to force PIC branch veneers. */ + int pic_veneer; - /* True if the target uses REL relocations. */ - int use_rel; + /* The number of bytes in the initial entry in the PLT. */ + bfd_size_type plt_header_size; - /* Short-cuts to get to dynamic linker sections. */ - asection *sgot; - asection *sgotplt; - asection *srelgot; - asection *splt; - asection *srelplt; - asection *sdynbss; - asection *srelbss; + /* The number of bytes in the subsequent PLT etries. */ + bfd_size_type plt_entry_size; - /* The (unloaded but important) VxWorks .rela.plt.unloaded section. */ - asection *srelplt2; + /* True if the target system is VxWorks. */ + int vxworks_p; - /* Data for R_ARM_TLS_LDM32 relocations. */ - union { - bfd_signed_vma refcount; - bfd_vma offset; - } tls_ldm_got; - - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* True if the target system is Symbian OS. */ + int symbian_p; - /* For convenience in allocate_dynrelocs. */ - bfd * obfd; - }; + /* True if the target uses REL relocations. */ + int use_rel; + + /* Short-cuts to get to dynamic linker sections. */ + asection *sgot; + asection *sgotplt; + asection *srelgot; + asection *splt; + asection *srelplt; + asection *sdynbss; + asection *srelbss; + + /* The (unloaded but important) VxWorks .rela.plt.unloaded section. */ + asection *srelplt2; + + /* Data for R_ARM_TLS_LDM32 relocations. */ + union + { + bfd_signed_vma refcount; + bfd_vma offset; + } tls_ldm_got; + + /* Small local sym cache. */ + struct sym_cache sym_cache; + + /* For convenience in allocate_dynrelocs. */ + bfd * obfd; + + /* The stub hash table. */ + struct bfd_hash_table stub_hash_table; + + /* Linker stub bfd. */ + bfd *stub_bfd; + + /* Linker call-backs. */ + asection * (*add_stub_section) (const char *, asection *); + void (*layout_sections_again) (void); + + /* Array to keep track of which stub sections have been created, and + information on stub grouping. */ + struct map_stub + { + /* This is the section to which stubs in the group will be + attached. */ + asection *link_sec; + /* The stub section. */ + asection *stub_sec; + } *stub_group; + + /* Assorted information used by elf32_arm_size_stubs. */ + unsigned int bfd_count; + int top_index; + asection **input_list; +}; /* Create an entry in an ARM ELF linker hash table. */ @@ -2257,7 +2665,7 @@ elf32_arm_link_hash_newfunc (struct bfd_hash_entry * entry, /* Allocate the structure if it has not already been allocated by a subclass. */ - if (ret == (struct elf32_arm_link_hash_entry *) NULL) + if (ret == NULL) ret = bfd_hash_allocate (table, sizeof (struct elf32_arm_link_hash_entry)); if (ret == NULL) return (struct bfd_hash_entry *) ret; @@ -2274,22 +2682,54 @@ elf32_arm_link_hash_newfunc (struct bfd_hash_entry * entry, ret->plt_maybe_thumb_refcount = 0; ret->plt_got_offset = -1; ret->export_glue = NULL; + + ret->stub_cache = NULL; } return (struct bfd_hash_entry *) ret; } -/* Return true if NAME is the name of the relocation section associated - with S. */ +/* Initialize an entry in the stub hash table. */ -static bfd_boolean -reloc_section_p (struct elf32_arm_link_hash_table *htab, - const char *name, asection *s) +static struct bfd_hash_entry * +stub_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { - if (htab->use_rel) - return CONST_STRNEQ (name, ".rel") && strcmp (s->name, name + 4) == 0; - else - return CONST_STRNEQ (name, ".rela") && strcmp (s->name, name + 5) == 0; + /* Allocate the structure if it has not already been allocated by a + subclass. */ + if (entry == NULL) + { + entry = bfd_hash_allocate (table, + sizeof (struct elf32_arm_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_arm_stub_hash_entry *eh; + + /* Initialize the local fields. */ + eh = (struct elf32_arm_stub_hash_entry *) entry; + eh->stub_sec = NULL; + eh->stub_offset = 0; + eh->target_value = 0; + eh->target_section = NULL; + eh->target_addend = 0; + eh->orig_insn = 0; + eh->stub_type = arm_stub_none; + eh->stub_size = 0; + eh->stub_template = NULL; + eh->stub_template_size = 0; + eh->h = NULL; + eh->id_sec = NULL; + eh->output_name = NULL; + } + + return entry; } /* Create .got, .gotplt, and .rel(a).got sections in DYNOBJ, and set up @@ -2313,15 +2753,9 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) if (!htab->sgot || !htab->sgotplt) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, - RELOC_SECTION (htab, ".got"), - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) + htab->srelgot = bfd_get_section_by_name (dynobj, + RELOC_SECTION (htab, ".got")); + if (htab->srelgot == NULL) return FALSE; return TRUE; } @@ -2370,7 +2804,7 @@ elf32_arm_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) } } - if (!htab->splt + if (!htab->splt || !htab->srelplt || !htab->sdynbss || (!info->shared && !htab->srelbss)) @@ -2470,9 +2904,12 @@ elf32_arm_link_hash_table_create (bfd *abfd) ret->srelplt2 = NULL; ret->thumb_glue_size = 0; ret->arm_glue_size = 0; + ret->bx_glue_size = 0; + memset (ret->bx_glue_offset, 0, sizeof (ret->bx_glue_offset)); ret->vfp11_fix = BFD_ARM_VFP11_FIX_NONE; ret->vfp11_erratum_glue_size = 0; ret->num_vfp11_fixes = 0; + ret->fix_cortex_a8 = 0; ret->bfd_of_glue_owner = NULL; ret->byteswap_code = 0; ret->target1_is_rel = 0; @@ -2489,113 +2926,1957 @@ elf32_arm_link_hash_table_create (bfd *abfd) ret->vxworks_p = 0; ret->symbian_p = 0; ret->use_rel = 1; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; ret->obfd = abfd; ret->tls_ldm_got.refcount = 0; + ret->stub_bfd = NULL; + ret->add_stub_section = NULL; + ret->layout_sections_again = NULL; + ret->stub_group = NULL; + ret->bfd_count = 0; + ret->top_index = 0; + ret->input_list = NULL; + + if (!bfd_hash_table_init (&ret->stub_hash_table, stub_hash_newfunc, + sizeof (struct elf32_arm_stub_hash_entry))) + { + free (ret); + return NULL; + } return &ret->root.root; } -/* Locate the Thumb encoded calling stub for NAME. */ +/* Free the derived linker hash table. */ -static struct elf_link_hash_entry * -find_thumb_glue (struct bfd_link_info *link_info, - const char *name, - char **error_message) +static void +elf32_arm_hash_table_free (struct bfd_link_hash_table *hash) { - char *tmp_name; - struct elf_link_hash_entry *hash; - struct elf32_arm_link_hash_table *hash_table; - - /* We need a pointer to the armelf specific hash table. */ - hash_table = elf32_arm_hash_table (link_info); - - tmp_name = bfd_malloc ((bfd_size_type) strlen (name) - + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1); + struct elf32_arm_link_hash_table *ret + = (struct elf32_arm_link_hash_table *) hash; - BFD_ASSERT (tmp_name); + bfd_hash_table_free (&ret->stub_hash_table); + _bfd_generic_link_hash_table_free (hash); +} - sprintf (tmp_name, THUMB2ARM_GLUE_ENTRY_NAME, name); +/* Determine if we're dealing with a Thumb only architecture. */ - hash = elf_link_hash_lookup - (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE); +static bfd_boolean +using_thumb_only (struct elf32_arm_link_hash_table *globals) +{ + int arch = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, + Tag_CPU_arch); + int profile; - if (hash == NULL) - asprintf (error_message, _("unable to find THUMB glue '%s' for '%s'"), - tmp_name, name); + if (arch != TAG_CPU_ARCH_V7) + return FALSE; - free (tmp_name); + profile = bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, + Tag_CPU_arch_profile); - return hash; + return profile == 'M'; } -/* Locate the ARM encoded calling stub for NAME. */ +/* Determine if we're dealing with a Thumb-2 object. */ -static struct elf_link_hash_entry * -find_arm_glue (struct bfd_link_info *link_info, - const char *name, - char **error_message) +static bfd_boolean +using_thumb2 (struct elf32_arm_link_hash_table *globals) { - char *tmp_name; - struct elf_link_hash_entry *myh; - struct elf32_arm_link_hash_table *hash_table; - - /* We need a pointer to the elfarm specific hash table. */ - hash_table = elf32_arm_hash_table (link_info); + 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; +} - tmp_name = bfd_malloc ((bfd_size_type) strlen (name) - + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1); +/* Determine what kind of NOPs are available. */ - BFD_ASSERT (tmp_name); +static bfd_boolean +arch_has_arm_nop (struct elf32_arm_link_hash_table *globals) +{ + const 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_V6K + || arch == TAG_CPU_ARCH_V7; +} - sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name); +static bfd_boolean +arch_has_thumb2_nop (struct elf32_arm_link_hash_table *globals) +{ + const 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; +} - myh = elf_link_hash_lookup - (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE); +static bfd_boolean +arm_stub_is_thumb (enum elf32_arm_stub_type stub_type) +{ + switch (stub_type) + { + case arm_stub_long_branch_thumb_only: + case arm_stub_long_branch_v4t_thumb_arm: + case arm_stub_short_branch_v4t_thumb_arm: + case arm_stub_long_branch_v4t_thumb_arm_pic: + case arm_stub_long_branch_thumb_only_pic: + return TRUE; + case arm_stub_none: + BFD_FAIL (); + return FALSE; + break; + default: + return FALSE; + } +} - if (myh == NULL) - asprintf (error_message, _("unable to find ARM glue '%s' for '%s'"), - tmp_name, name); +/* Determine the type of stub needed, if any, for a call. */ + +static enum elf32_arm_stub_type +arm_type_of_stub (struct bfd_link_info *info, + asection *input_sec, + const Elf_Internal_Rela *rel, + unsigned char st_type, + struct elf32_arm_link_hash_entry *hash, + bfd_vma destination, + asection *sym_sec, + bfd *input_bfd, + const char *name) +{ + bfd_vma location; + bfd_signed_vma branch_offset; + unsigned int r_type; + struct elf32_arm_link_hash_table * globals; + int thumb2; + int thumb_only; + enum elf32_arm_stub_type stub_type = arm_stub_none; + int use_plt = 0; - free (tmp_name); + /* We don't know the actual type of destination in case it is of + type STT_SECTION: give up. */ + if (st_type == STT_SECTION) + return stub_type; - return myh; -} + globals = elf32_arm_hash_table (info); -/* ARM->Thumb glue (static images): + thumb_only = using_thumb_only (globals); - .arm - __func_from_arm: - ldr r12, __func_addr - bx r12 - __func_addr: - .word func @ behave as if you saw a ARM_32 reloc. + thumb2 = using_thumb2 (globals); - (v5t static images) - .arm - __func_from_arm: - ldr pc, __func_addr - __func_addr: - .word func @ behave as if you saw a ARM_32 reloc. + /* Determine where the call point is. */ + location = (input_sec->output_offset + + input_sec->output_section->vma + + rel->r_offset); - (relocatable images) - .arm - __func_from_arm: - ldr r12, __func_offset - add r12, r12, pc - bx r12 - __func_offset: - .word func - . - */ + branch_offset = (bfd_signed_vma)(destination - location); -#define ARM2THUMB_STATIC_GLUE_SIZE 12 -static const insn32 a2t1_ldr_insn = 0xe59fc000; -static const insn32 a2t2_bx_r12_insn = 0xe12fff1c; -static const insn32 a2t3_func_addr_insn = 0x00000001; + r_type = ELF32_R_TYPE (rel->r_info); -#define ARM2THUMB_V5_STATIC_GLUE_SIZE 8 -static const insn32 a2t1v5_ldr_insn = 0xe51ff004; -static const insn32 a2t2v5_func_addr_insn = 0x00000001; + /* Keep a simpler condition, for the sake of clarity. */ + if (globals->splt != NULL && hash != NULL && hash->root.plt.offset != (bfd_vma) -1) + { + use_plt = 1; + /* Note when dealing with PLT entries: the main PLT stub is in + ARM mode, so if the branch is in Thumb mode, another + Thumb->ARM stub will be inserted later just before the ARM + PLT stub. We don't take this extra distance into account + here, because if a long branch stub is needed, we'll add a + Thumb->Arm one and branch directly to the ARM PLT entry + because it avoids spreading offset corrections in several + places. */ + } + + if (r_type == R_ARM_THM_CALL || r_type == R_ARM_THM_JUMP24) + { + /* Handle cases where: + - this call goes too far (different Thumb/Thumb2 max + distance) + - it's a Thumb->Arm call and blx is not available, or it's a + Thumb->Arm branch (not bl). A stub is needed in this case, + but only if this call is not through a PLT entry. Indeed, + PLT stubs handle mode switching already. + */ + if ((!thumb2 + && (branch_offset > THM_MAX_FWD_BRANCH_OFFSET + || (branch_offset < THM_MAX_BWD_BRANCH_OFFSET))) + || (thumb2 + && (branch_offset > THM2_MAX_FWD_BRANCH_OFFSET + || (branch_offset < THM2_MAX_BWD_BRANCH_OFFSET))) + || ((st_type != STT_ARM_TFUNC) + && (((r_type == R_ARM_THM_CALL) && !globals->use_blx) + || (r_type == R_ARM_THM_JUMP24)) + && !use_plt)) + { + if (st_type == STT_ARM_TFUNC) + { + /* Thumb to thumb. */ + if (!thumb_only) + { + stub_type = (info->shared | globals->pic_veneer) + /* PIC stubs. */ + ? ((globals->use_blx + && (r_type ==R_ARM_THM_CALL)) + /* V5T and above. Stub starts with ARM code, so + we must be able to switch mode before + reaching it, which is only possible for 'bl' + (ie R_ARM_THM_CALL relocation). */ + ? arm_stub_long_branch_any_thumb_pic + /* On V4T, use Thumb code only. */ + : arm_stub_long_branch_v4t_thumb_thumb_pic) + + /* non-PIC stubs. */ + : ((globals->use_blx + && (r_type ==R_ARM_THM_CALL)) + /* V5T and above. */ + ? arm_stub_long_branch_any_any + /* V4T. */ + : arm_stub_long_branch_v4t_thumb_thumb); + } + else + { + stub_type = (info->shared | globals->pic_veneer) + /* PIC stub. */ + ? arm_stub_long_branch_thumb_only_pic + /* non-PIC stub. */ + : arm_stub_long_branch_thumb_only; + } + } + else + { + /* Thumb to arm. */ + if (sym_sec != NULL + && sym_sec->owner != NULL + && !INTERWORK_FLAG (sym_sec->owner)) + { + (*_bfd_error_handler) + (_("%B(%s): warning: interworking not enabled.\n" + " first occurrence: %B: Thumb call to ARM"), + sym_sec->owner, input_bfd, name); + } + + stub_type = (info->shared | globals->pic_veneer) + /* PIC stubs. */ + ? ((globals->use_blx + && (r_type ==R_ARM_THM_CALL)) + /* V5T and above. */ + ? arm_stub_long_branch_any_arm_pic + /* V4T PIC stub. */ + : arm_stub_long_branch_v4t_thumb_arm_pic) + + /* non-PIC stubs. */ + : ((globals->use_blx + && (r_type ==R_ARM_THM_CALL)) + /* V5T and above. */ + ? arm_stub_long_branch_any_any + /* V4T. */ + : arm_stub_long_branch_v4t_thumb_arm); + + /* Handle v4t short branches. */ + if ((stub_type == arm_stub_long_branch_v4t_thumb_arm) + && (branch_offset <= THM_MAX_FWD_BRANCH_OFFSET) + && (branch_offset >= THM_MAX_BWD_BRANCH_OFFSET)) + stub_type = arm_stub_short_branch_v4t_thumb_arm; + } + } + } + else if (r_type == R_ARM_CALL || r_type == R_ARM_JUMP24 || r_type == R_ARM_PLT32) + { + if (st_type == STT_ARM_TFUNC) + { + /* Arm to thumb. */ + + if (sym_sec != NULL + && sym_sec->owner != NULL + && !INTERWORK_FLAG (sym_sec->owner)) + { + (*_bfd_error_handler) + (_("%B(%s): warning: interworking not enabled.\n" + " first occurrence: %B: ARM call to Thumb"), + sym_sec->owner, input_bfd, name); + } + + /* We have an extra 2-bytes reach because of + the mode change (bit 24 (H) of BLX encoding). */ + if (branch_offset > (ARM_MAX_FWD_BRANCH_OFFSET + 2) + || (branch_offset < ARM_MAX_BWD_BRANCH_OFFSET) + || ((r_type == R_ARM_CALL) && !globals->use_blx) + || (r_type == R_ARM_JUMP24) + || (r_type == R_ARM_PLT32)) + { + stub_type = (info->shared | globals->pic_veneer) + /* PIC stubs. */ + ? ((globals->use_blx) + /* V5T and above. */ + ? arm_stub_long_branch_any_thumb_pic + /* V4T stub. */ + : arm_stub_long_branch_v4t_arm_thumb_pic) + + /* non-PIC stubs. */ + : ((globals->use_blx) + /* V5T and above. */ + ? arm_stub_long_branch_any_any + /* V4T. */ + : arm_stub_long_branch_v4t_arm_thumb); + } + } + else + { + /* Arm to arm. */ + if (branch_offset > ARM_MAX_FWD_BRANCH_OFFSET + || (branch_offset < ARM_MAX_BWD_BRANCH_OFFSET)) + { + stub_type = (info->shared | globals->pic_veneer) + /* PIC stubs. */ + ? arm_stub_long_branch_any_arm_pic + /* non-PIC stubs. */ + : arm_stub_long_branch_any_any; + } + } + } + + return stub_type; +} + +/* Build a name for an entry in the stub hash table. */ + +static char * +elf32_arm_stub_name (const asection *input_section, + const asection *sym_sec, + const struct elf32_arm_link_hash_entry *hash, + const Elf_Internal_Rela *rel) +{ + char *stub_name; + bfd_size_type len; + + if (hash) + { + len = 8 + 1 + strlen (hash->root.root.root.string) + 1 + 8 + 1; + stub_name = bfd_malloc (len); + if (stub_name != NULL) + sprintf (stub_name, "%08x_%s+%x", + input_section->id & 0xffffffff, + hash->root.root.root.string, + (int) rel->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 (rel->r_info) & 0xffffffff, + (int) rel->r_addend & 0xffffffff); + } + + return stub_name; +} + +/* Look up an entry in the stub hash. Stub entries are cached because + creating the stub name takes a bit of time. */ + +static struct elf32_arm_stub_hash_entry * +elf32_arm_get_stub_entry (const asection *input_section, + const asection *sym_sec, + struct elf_link_hash_entry *hash, + const Elf_Internal_Rela *rel, + struct elf32_arm_link_hash_table *htab) +{ + struct elf32_arm_stub_hash_entry *stub_entry; + struct elf32_arm_link_hash_entry *h = (struct elf32_arm_link_hash_entry *) hash; + const asection *id_sec; + + if ((input_section->flags & SEC_CODE) == 0) + return NULL; + + /* If this input section is part of a group of sections sharing one + stub section, then use the id of the first section in the group. + Stub names need to include a section id, as there may well be + more than one stub used to reach say, printf, and we need to + 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) + { + stub_entry = h->stub_cache; + } + else + { + char *stub_name; + + stub_name = elf32_arm_stub_name (id_sec, sym_sec, h, rel); + if (stub_name == NULL) + return NULL; + + stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, + stub_name, FALSE, FALSE); + if (h != NULL) + h->stub_cache = stub_entry; + + free (stub_name); + } + + return stub_entry; +} + +/* Find or create a stub section. Returns a pointer to the stub section, and + the section to which the stub section will be attached (in *LINK_SEC_P). + LINK_SEC_P may be NULL. */ + +static asection * +elf32_arm_create_or_find_stub_sec (asection **link_sec_p, asection *section, + struct elf32_arm_link_hash_table *htab) +{ + asection *link_sec; + asection *stub_sec; + + link_sec = htab->stub_group[section->id].link_sec; + stub_sec = htab->stub_group[section->id].stub_sec; + if (stub_sec == NULL) + { + stub_sec = htab->stub_group[link_sec->id].stub_sec; + if (stub_sec == NULL) + { + size_t namelen; + bfd_size_type len; + char *s_name; + + namelen = strlen (link_sec->name); + len = namelen + sizeof (STUB_SUFFIX); + s_name = bfd_alloc (htab->stub_bfd, len); + if (s_name == NULL) + return NULL; + + memcpy (s_name, link_sec->name, namelen); + memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX)); + stub_sec = (*htab->add_stub_section) (s_name, link_sec); + if (stub_sec == NULL) + return NULL; + htab->stub_group[link_sec->id].stub_sec = stub_sec; + } + htab->stub_group[section->id].stub_sec = stub_sec; + } + + if (link_sec_p) + *link_sec_p = link_sec; + + return stub_sec; +} + +/* Add a new stub entry to the stub hash. Not all fields of the new + stub entry are initialised. */ + +static struct elf32_arm_stub_hash_entry * +elf32_arm_add_stub (const char *stub_name, + asection *section, + struct elf32_arm_link_hash_table *htab) +{ + asection *link_sec; + asection *stub_sec; + struct elf32_arm_stub_hash_entry *stub_entry; + + stub_sec = elf32_arm_create_or_find_stub_sec (&link_sec, section, htab); + if (stub_sec == NULL) + return NULL; + + /* Enter this entry into the linker stub hash table. */ + stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name, + TRUE, FALSE); + if (stub_entry == NULL) + { + (*_bfd_error_handler) (_("%s: cannot create stub entry %s"), + section->owner, + stub_name); + return NULL; + } + + stub_entry->stub_sec = stub_sec; + stub_entry->stub_offset = 0; + stub_entry->id_sec = link_sec; + + return stub_entry; +} + +/* 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); +} + +static bfd_reloc_status_type elf32_arm_final_link_relocate + (reloc_howto_type *, bfd *, bfd *, asection *, bfd_byte *, + Elf_Internal_Rela *, bfd_vma, struct bfd_link_info *, asection *, + const char *, int, struct elf_link_hash_entry *, bfd_boolean *, char **); + +static bfd_boolean +arm_build_one_stub (struct bfd_hash_entry *gen_entry, + void * in_arg) +{ +#define MAXRELOCS 2 + struct elf32_arm_stub_hash_entry *stub_entry; + struct bfd_link_info *info; + struct elf32_arm_link_hash_table *htab; + asection *stub_sec; + bfd *stub_bfd; + bfd_vma stub_addr; + bfd_byte *loc; + bfd_vma sym_value; + int template_size; + int size; + const insn_sequence *template_sequence; + int i; + struct elf32_arm_link_hash_table * globals; + int stub_reloc_idx[MAXRELOCS] = {-1, -1}; + int stub_reloc_offset[MAXRELOCS] = {0, 0}; + int nrelocs = 0; + + /* Massage our args to the form they really have. */ + stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; + info = (struct bfd_link_info *) in_arg; + + globals = elf32_arm_hash_table (info); + + htab = elf32_arm_hash_table (info); + stub_sec = stub_entry->stub_sec; + + if ((htab->fix_cortex_a8 < 0) + != (stub_entry->stub_type >= arm_stub_a8_veneer_lwm)) + /* We have to do the a8 fixes last, as they are less aligned than + the other veneers. */ + return TRUE; + + /* Make a note of the offset within the stubs for this entry. */ + stub_entry->stub_offset = stub_sec->size; + loc = stub_sec->contents + stub_entry->stub_offset; + + stub_bfd = stub_sec->owner; + + /* This is the address of the start of the stub. */ + stub_addr = stub_sec->output_section->vma + stub_sec->output_offset + + stub_entry->stub_offset; + + /* This is the address of the stub destination. */ + sym_value = (stub_entry->target_value + + stub_entry->target_section->output_offset + + stub_entry->target_section->output_section->vma); + + template_sequence = stub_entry->stub_template; + template_size = stub_entry->stub_template_size; + + size = 0; + for (i = 0; i < template_size; i++) + { + switch (template_sequence[i].type) + { + case THUMB16_TYPE: + { + bfd_vma data = (bfd_vma) template_sequence[i].data; + if (template_sequence[i].reloc_addend != 0) + { + /* We've borrowed the reloc_addend field to mean we should + insert a condition code into this (Thumb-1 branch) + instruction. See THUMB16_BCOND_INSN. */ + BFD_ASSERT ((data & 0xff00) == 0xd000); + data |= ((stub_entry->orig_insn >> 22) & 0xf) << 8; + } + put_thumb_insn (globals, stub_bfd, data, loc + size); + size += 2; + } + break; + + case THUMB32_TYPE: + put_thumb_insn (globals, stub_bfd, + (template_sequence[i].data >> 16) & 0xffff, + loc + size); + put_thumb_insn (globals, stub_bfd, template_sequence[i].data & 0xffff, + loc + size + 2); + if (template_sequence[i].r_type != R_ARM_NONE) + { + stub_reloc_idx[nrelocs] = i; + stub_reloc_offset[nrelocs++] = size; + } + size += 4; + break; + + case ARM_TYPE: + put_arm_insn (globals, stub_bfd, template_sequence[i].data, + loc + size); + /* Handle cases where the target is encoded within the + instruction. */ + if (template_sequence[i].r_type == R_ARM_JUMP24) + { + stub_reloc_idx[nrelocs] = i; + stub_reloc_offset[nrelocs++] = size; + } + size += 4; + break; + + case DATA_TYPE: + bfd_put_32 (stub_bfd, template_sequence[i].data, loc + size); + stub_reloc_idx[nrelocs] = i; + stub_reloc_offset[nrelocs++] = size; + size += 4; + break; + + default: + BFD_FAIL (); + return FALSE; + } + } + + stub_sec->size += size; + + /* Stub size has already been computed in arm_size_one_stub. Check + consistency. */ + BFD_ASSERT (size == stub_entry->stub_size); + + /* Destination is Thumb. Force bit 0 to 1 to reflect this. */ + if (stub_entry->st_type == STT_ARM_TFUNC) + sym_value |= 1; + + /* Assume there is at least one and at most MAXRELOCS entries to relocate + in each stub. */ + BFD_ASSERT (nrelocs != 0 && nrelocs <= MAXRELOCS); + + for (i = 0; i < nrelocs; i++) + if (template_sequence[stub_reloc_idx[i]].r_type == R_ARM_THM_JUMP24 + || template_sequence[stub_reloc_idx[i]].r_type == R_ARM_THM_JUMP19 + || template_sequence[stub_reloc_idx[i]].r_type == R_ARM_THM_CALL + || template_sequence[stub_reloc_idx[i]].r_type == R_ARM_THM_XPC22) + { + Elf_Internal_Rela rel; + bfd_boolean unresolved_reloc; + char *error_message; + int sym_flags + = (template_sequence[stub_reloc_idx[i]].r_type != R_ARM_THM_XPC22) + ? STT_ARM_TFUNC : 0; + bfd_vma points_to = sym_value + stub_entry->target_addend; + + rel.r_offset = stub_entry->stub_offset + stub_reloc_offset[i]; + rel.r_info = ELF32_R_INFO (0, + template_sequence[stub_reloc_idx[i]].r_type); + rel.r_addend = template_sequence[stub_reloc_idx[i]].reloc_addend; + + if (stub_entry->stub_type == arm_stub_a8_veneer_b_cond && i == 0) + /* The first relocation in the elf32_arm_stub_a8_veneer_b_cond[] + template should refer back to the instruction after the original + branch. */ + points_to = sym_value; + + /* There may be unintended consequences if this is not true. */ + BFD_ASSERT (stub_entry->h == NULL); + + /* Note: _bfd_final_link_relocate doesn't handle these relocations + properly. We should probably use this function unconditionally, + rather than only for certain relocations listed in the enclosing + conditional, for the sake of consistency. */ + elf32_arm_final_link_relocate (elf32_arm_howto_from_type + (template_sequence[stub_reloc_idx[i]].r_type), + stub_bfd, info->output_bfd, stub_sec, stub_sec->contents, &rel, + points_to, info, stub_entry->target_section, "", sym_flags, + (struct elf_link_hash_entry *) stub_entry->h, &unresolved_reloc, + &error_message); + } + else + { + _bfd_final_link_relocate (elf32_arm_howto_from_type + (template_sequence[stub_reloc_idx[i]].r_type), stub_bfd, stub_sec, + stub_sec->contents, stub_entry->stub_offset + stub_reloc_offset[i], + sym_value + stub_entry->target_addend, + template_sequence[stub_reloc_idx[i]].reloc_addend); + } + + return TRUE; +#undef MAXRELOCS +} + +/* Calculate the template, template size and instruction size for a stub. + Return value is the instruction size. */ + +static unsigned int +find_stub_size_and_template (enum elf32_arm_stub_type stub_type, + const insn_sequence **stub_template, + int *stub_template_size) +{ + const insn_sequence *template_sequence = NULL; + int template_size = 0, i; + unsigned int size; + + template_sequence = stub_definitions[stub_type].template_sequence; + template_size = stub_definitions[stub_type].template_size; + + size = 0; + for (i = 0; i < template_size; i++) + { + switch (template_sequence[i].type) + { + case THUMB16_TYPE: + size += 2; + break; + + case ARM_TYPE: + case THUMB32_TYPE: + case DATA_TYPE: + size += 4; + break; + + default: + BFD_FAIL (); + return FALSE; + } + } + + if (stub_template) + *stub_template = template_sequence; + + if (stub_template_size) + *stub_template_size = template_size; + + return size; +} + +/* As above, but don't actually build the stub. Just bump offset so + we know stub section sizes. */ + +static bfd_boolean +arm_size_one_stub (struct bfd_hash_entry *gen_entry, + void * in_arg) +{ + struct elf32_arm_stub_hash_entry *stub_entry; + struct elf32_arm_link_hash_table *htab; + const insn_sequence *template_sequence; + int template_size, size; + + /* Massage our args to the form they really have. */ + stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; + htab = (struct elf32_arm_link_hash_table *) in_arg; + + BFD_ASSERT((stub_entry->stub_type > arm_stub_none) + && stub_entry->stub_type < ARRAY_SIZE(stub_definitions)); + + size = find_stub_size_and_template (stub_entry->stub_type, &template_sequence, + &template_size); + + stub_entry->stub_size = size; + stub_entry->stub_template = template_sequence; + stub_entry->stub_template_size = template_size; + + size = (size + 7) & ~7; + stub_entry->stub_sec->size += size; + + return TRUE; +} + +/* External entry points for sizing and building linker stubs. */ + +/* 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. */ + +int +elf32_arm_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_arm_link_hash_table *htab = elf32_arm_hash_table (info); + + if (! is_elf_hash_table (htab)) + 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; + + amt = sizeof (struct map_stub) * (top_id + 1); + htab->stub_group = bfd_zmalloc (amt); + if (htab->stub_group == NULL) + return -1; + + /* We can't use output_bfd->section_count here to find the top output + section index as some sections may have been removed, and + _bfd_strip_section_from_output 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; +} + +/* The linker repeatedly calls this function for each input section, + in the order that input sections are linked into output sections. + Build lists of input sections to determine groupings between which + we may insert linker stubs. */ + +void +elf32_arm_next_input_section (struct bfd_link_info *info, + asection *isec) +{ + struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info); + + if (isec->output_section->index <= htab->top_index) + { + asection **list = htab->input_list + isec->output_section->index; + + if (*list != bfd_abs_section_ptr) + { + /* Steal the link_sec pointer for our list. */ +#define PREV_SEC(sec) (htab->stub_group[(sec)->id].link_sec) + /* This happens to make the list in reverse order, + which we reverse later. */ + PREV_SEC (isec) = *list; + *list = isec; + } + } +} + +/* See whether we can group stub sections together. Grouping stub + sections may result in fewer stubs. More importantly, we need to + put all .init* and .fini* stubs at the end of the .init or + .fini output sections respectively, because glibc splits the + _init and _fini functions into multiple parts. Putting a stub in + the middle of a function is not a good idea. */ + +static void +group_sections (struct elf32_arm_link_hash_table *htab, + bfd_size_type stub_group_size, + bfd_boolean stubs_always_after_branch) +{ + asection **list = htab->input_list; + + do + { + asection *tail = *list; + asection *head; + + if (tail == bfd_abs_section_ptr) + continue; + + /* Reverse the list: we must avoid placing stubs at the + beginning of the section because the beginning of the text + section may be required for an interrupt vector in bare metal + code. */ +#define NEXT_SEC PREV_SEC + head = NULL; + while (tail != NULL) + { + /* Pop from tail. */ + asection *item = tail; + tail = PREV_SEC (item); + + /* Push on head. */ + NEXT_SEC (item) = head; + head = item; + } + + while (head != NULL) + { + asection *curr; + asection *next; + bfd_vma stub_group_start = head->output_offset; + bfd_vma end_of_next; + + curr = head; + while (NEXT_SEC (curr) != NULL) + { + next = NEXT_SEC (curr); + end_of_next = next->output_offset + next->size; + if (end_of_next - stub_group_start >= stub_group_size) + /* End of NEXT is too far from start, so stop. */ + break; + /* Add NEXT to the group. */ + curr = next; + } + + /* OK, the size from the start to the start of CURR is less + than stub_group_size and thus can be handled by one stub + section. (Or the head section is itself larger than + stub_group_size, in which case we may be toast.) + We should really be keeping track of the total size of + stubs added here, as stubs contribute to the final output + section size. */ + do + { + next = NEXT_SEC (head); + /* Set up this stub group. */ + htab->stub_group[head->id].link_sec = curr; + } + while (head != curr && (head = next) != NULL); + + /* But wait, there's more! Input sections up to stub_group_size + bytes after the stub section can be handled by it too. */ + if (!stubs_always_after_branch) + { + stub_group_start = curr->output_offset + curr->size; + + while (next != NULL) + { + end_of_next = next->output_offset + next->size; + if (end_of_next - stub_group_start >= stub_group_size) + /* End of NEXT is too far from stubs, so stop. */ + break; + /* Add NEXT to the stub group. */ + head = next; + next = NEXT_SEC (head); + htab->stub_group[head->id].link_sec = curr; + } + } + head = next; + } + } + while (list++ != htab->input_list + htab->top_index); + + free (htab->input_list); +#undef PREV_SEC +#undef NEXT_SEC +} + +/* Comparison function for sorting/searching relocations relating to Cortex-A8 + erratum fix. */ + +static int +a8_reloc_compare (const void *a, const void *b) +{ + const struct a8_erratum_reloc *ra = a, *rb = b; + + if (ra->from < rb->from) + return -1; + else if (ra->from > rb->from) + return 1; + else + return 0; +} + +static struct elf_link_hash_entry *find_thumb_glue (struct bfd_link_info *, + const char *, char **); + +/* Helper function to scan code for sequences which might trigger the Cortex-A8 + branch/TLB erratum. Fill in the table described by A8_FIXES_P, + NUM_A8_FIXES_P, A8_FIX_TABLE_SIZE_P. Returns true if an error occurs, false + otherwise. */ + +static bfd_boolean +cortex_a8_erratum_scan (bfd *input_bfd, + struct bfd_link_info *info, + struct a8_erratum_fix **a8_fixes_p, + unsigned int *num_a8_fixes_p, + unsigned int *a8_fix_table_size_p, + struct a8_erratum_reloc *a8_relocs, + unsigned int num_a8_relocs, + unsigned prev_num_a8_fixes, + bfd_boolean *stub_changed_p) +{ + asection *section; + struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info); + struct a8_erratum_fix *a8_fixes = *a8_fixes_p; + unsigned int num_a8_fixes = *num_a8_fixes_p; + unsigned int a8_fix_table_size = *a8_fix_table_size_p; + + for (section = input_bfd->sections; + section != NULL; + section = section->next) + { + bfd_byte *contents = NULL; + struct _arm_elf_section_data *sec_data; + unsigned int span; + bfd_vma base_vma; + + if (elf_section_type (section) != SHT_PROGBITS + || (elf_section_flags (section) & SHF_EXECINSTR) == 0 + || (section->flags & SEC_EXCLUDE) != 0 + || (section->sec_info_type == ELF_INFO_TYPE_JUST_SYMS) + || (section->output_section == bfd_abs_section_ptr)) + continue; + + base_vma = section->output_section->vma + section->output_offset; + + if (elf_section_data (section)->this_hdr.contents != NULL) + contents = elf_section_data (section)->this_hdr.contents; + else if (! bfd_malloc_and_get_section (input_bfd, section, &contents)) + return TRUE; + + sec_data = elf32_arm_section_data (section); + + 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) + ? section->size : sec_data->map[span + 1].vma; + unsigned int i; + char span_type = sec_data->map[span].type; + bfd_boolean last_was_32bit = FALSE, last_was_branch = FALSE; + + if (span_type != 't') + continue; + + /* Span is entirely within a single 4KB region: skip scanning. */ + if (((base_vma + span_start) & ~0xfff) + == ((base_vma + span_end) & ~0xfff)) + continue; + + /* Scan for 32-bit Thumb-2 branches which span two 4K regions, where: + + * The opcode is BLX.W, BL.W, B.W, Bcc.W + * The branch target is in the same 4KB region as the + first half of the branch. + * The instruction before the branch is a 32-bit + length non-branch instruction. */ + for (i = span_start; i < span_end;) + { + unsigned int insn = bfd_getl16 (&contents[i]); + bfd_boolean insn_32bit = FALSE, is_blx = FALSE, is_b = FALSE; + bfd_boolean is_bl = FALSE, is_bcc = FALSE, is_32bit_branch; + + if ((insn & 0xe000) == 0xe000 && (insn & 0x1800) != 0x0000) + insn_32bit = TRUE; + + if (insn_32bit) + { + /* Load the rest of the insn (in manual-friendly order). */ + insn = (insn << 16) | bfd_getl16 (&contents[i + 2]); + + /* Encoding T4: B.W. */ + is_b = (insn & 0xf800d000) == 0xf0009000; + /* Encoding T1: BL.W. */ + is_bl = (insn & 0xf800d000) == 0xf000d000; + /* Encoding T2: BLX.W. */ + is_blx = (insn & 0xf800d000) == 0xf000c000; + /* Encoding T3: B.W (not permitted in IT block). */ + is_bcc = (insn & 0xf800d000) == 0xf0008000 + && (insn & 0x07f00000) != 0x03800000; + } + + is_32bit_branch = is_b || is_bl || is_blx || is_bcc; + + if (((base_vma + i) & 0xfff) == 0xffe + && insn_32bit + && is_32bit_branch + && last_was_32bit + && ! last_was_branch) + { + bfd_signed_vma offset; + bfd_boolean force_target_arm = FALSE; + bfd_boolean force_target_thumb = FALSE; + bfd_vma target; + enum elf32_arm_stub_type stub_type = arm_stub_none; + struct a8_erratum_reloc key, *found; + + key.from = base_vma + i; + found = bsearch (&key, a8_relocs, num_a8_relocs, + sizeof (struct a8_erratum_reloc), + &a8_reloc_compare); + + if (found) + { + char *error_message = NULL; + struct elf_link_hash_entry *entry; + + /* We don't care about the error returned from this + function, only if there is glue or not. */ + entry = find_thumb_glue (info, found->sym_name, + &error_message); + + if (entry) + found->non_a8_stub = TRUE; + + if (found->r_type == R_ARM_THM_CALL + && found->st_type != STT_ARM_TFUNC) + force_target_arm = TRUE; + else if (found->r_type == R_ARM_THM_CALL + && found->st_type == STT_ARM_TFUNC) + force_target_thumb = TRUE; + } + + /* Check if we have an offending branch instruction. */ + + if (found && found->non_a8_stub) + /* We've already made a stub for this instruction, e.g. + it's a long branch or a Thumb->ARM stub. Assume that + stub will suffice to work around the A8 erratum (see + setting of always_after_branch above). */ + ; + else if (is_bcc) + { + offset = (insn & 0x7ff) << 1; + offset |= (insn & 0x3f0000) >> 4; + offset |= (insn & 0x2000) ? 0x40000 : 0; + offset |= (insn & 0x800) ? 0x80000 : 0; + offset |= (insn & 0x4000000) ? 0x100000 : 0; + if (offset & 0x100000) + offset |= ~ ((bfd_signed_vma) 0xfffff); + stub_type = arm_stub_a8_veneer_b_cond; + } + else if (is_b || is_bl || is_blx) + { + int s = (insn & 0x4000000) != 0; + int j1 = (insn & 0x2000) != 0; + int j2 = (insn & 0x800) != 0; + int i1 = !(j1 ^ s); + int i2 = !(j2 ^ s); + + offset = (insn & 0x7ff) << 1; + offset |= (insn & 0x3ff0000) >> 4; + offset |= i2 << 22; + offset |= i1 << 23; + offset |= s << 24; + if (offset & 0x1000000) + offset |= ~ ((bfd_signed_vma) 0xffffff); + + if (is_blx) + offset &= ~ ((bfd_signed_vma) 3); + + stub_type = is_blx ? arm_stub_a8_veneer_blx : + is_bl ? arm_stub_a8_veneer_bl : arm_stub_a8_veneer_b; + } + + if (stub_type != arm_stub_none) + { + bfd_vma pc_for_insn = base_vma + i + 4; + + /* The original instruction is a BL, but the target is + an ARM instruction. If we were not making a stub, + the BL would have been converted to a BLX. Use the + BLX stub instead in that case. */ + if (htab->use_blx && force_target_arm + && stub_type == arm_stub_a8_veneer_bl) + { + stub_type = arm_stub_a8_veneer_blx; + is_blx = TRUE; + is_bl = FALSE; + } + /* Conversely, if the original instruction was + BLX but the target is Thumb mode, use the BL + stub. */ + else if (force_target_thumb + && stub_type == arm_stub_a8_veneer_blx) + { + stub_type = arm_stub_a8_veneer_bl; + is_blx = FALSE; + is_bl = TRUE; + } + + if (is_blx) + pc_for_insn &= ~ ((bfd_vma) 3); + + /* If we found a relocation, use the proper destination, + not the offset in the (unrelocated) instruction. + Note this is always done if we switched the stub type + above. */ + if (found) + offset = + (bfd_signed_vma) (found->destination - pc_for_insn); + + target = pc_for_insn + offset; + + /* The BLX stub is ARM-mode code. Adjust the offset to + take the different PC value (+8 instead of +4) into + account. */ + if (stub_type == arm_stub_a8_veneer_blx) + offset += 4; + + if (((base_vma + i) & ~0xfff) == (target & ~0xfff)) + { + char *stub_name = NULL; + + if (num_a8_fixes == a8_fix_table_size) + { + a8_fix_table_size *= 2; + a8_fixes = bfd_realloc (a8_fixes, + sizeof (struct a8_erratum_fix) + * a8_fix_table_size); + } + + if (num_a8_fixes < prev_num_a8_fixes) + { + /* If we're doing a subsequent scan, + check if we've found the same fix as + before, and try and reuse the stub + name. */ + stub_name = a8_fixes[num_a8_fixes].stub_name; + if ((a8_fixes[num_a8_fixes].section != section) + || (a8_fixes[num_a8_fixes].offset != i)) + { + free (stub_name); + stub_name = NULL; + *stub_changed_p = TRUE; + } + } + + if (!stub_name) + { + stub_name = bfd_malloc (8 + 1 + 8 + 1); + if (stub_name != NULL) + sprintf (stub_name, "%x:%x", section->id, i); + } + + a8_fixes[num_a8_fixes].input_bfd = input_bfd; + a8_fixes[num_a8_fixes].section = section; + a8_fixes[num_a8_fixes].offset = i; + a8_fixes[num_a8_fixes].addend = offset; + a8_fixes[num_a8_fixes].orig_insn = insn; + a8_fixes[num_a8_fixes].stub_name = stub_name; + a8_fixes[num_a8_fixes].stub_type = stub_type; + + num_a8_fixes++; + } + } + } + + i += insn_32bit ? 4 : 2; + last_was_32bit = insn_32bit; + last_was_branch = is_32bit_branch; + } + } + + if (elf_section_data (section)->this_hdr.contents == NULL) + free (contents); + } + + *a8_fixes_p = a8_fixes; + *num_a8_fixes_p = num_a8_fixes; + *a8_fix_table_size_p = a8_fix_table_size; + + return FALSE; +} + +/* Determine and set the size of the stub section for a final link. + + The basic idea here is to examine all the relocations looking for + PC-relative calls to a target that is unreachable with a "bl" + instruction. */ + +bfd_boolean +elf32_arm_size_stubs (bfd *output_bfd, + bfd *stub_bfd, + struct bfd_link_info *info, + bfd_signed_vma group_size, + asection * (*add_stub_section) (const char *, asection *), + void (*layout_sections_again) (void)) +{ + bfd_size_type stub_group_size; + bfd_boolean stubs_always_after_branch; + struct elf32_arm_link_hash_table *htab = elf32_arm_hash_table (info); + struct a8_erratum_fix *a8_fixes = NULL; + unsigned int num_a8_fixes = 0, a8_fix_table_size = 10; + struct a8_erratum_reloc *a8_relocs = NULL; + unsigned int num_a8_relocs = 0, a8_reloc_table_size = 10, i; + + if (htab->fix_cortex_a8) + { + a8_fixes = bfd_zmalloc (sizeof (struct a8_erratum_fix) + * a8_fix_table_size); + a8_relocs = bfd_zmalloc (sizeof (struct a8_erratum_reloc) + * a8_reloc_table_size); + } + + /* Propagate mach to stub bfd, because it may not have been + finalized when we created stub_bfd. */ + bfd_set_arch_mach (stub_bfd, bfd_get_arch (output_bfd), + bfd_get_mach (output_bfd)); + + /* Stash our params away. */ + htab->stub_bfd = stub_bfd; + htab->add_stub_section = add_stub_section; + htab->layout_sections_again = layout_sections_again; + stubs_always_after_branch = group_size < 0; + + /* The Cortex-A8 erratum fix depends on stubs not being in the same 4K page + as the first half of a 32-bit branch straddling two 4K pages. This is a + crude way of enforcing that. */ + if (htab->fix_cortex_a8) + stubs_always_after_branch = 1; + + if (group_size < 0) + stub_group_size = -group_size; + else + stub_group_size = group_size; + + if (stub_group_size == 1) + { + /* Default values. */ + /* Thumb branch range is +-4MB has to be used as the default + maximum size (a given section can contain both ARM and Thumb + code, so the worst case has to be taken into account). + + This value is 24K less than that, which allows for 2025 + 12-byte stubs. If we exceed that, then we will fail to link. + The user will have to relink with an explicit group size + option. */ + stub_group_size = 4170000; + } + + group_sections (htab, stub_group_size, stubs_always_after_branch); + + /* If we're applying the cortex A8 fix, we need to determine the + program header size now, because we cannot change it later -- + that could alter section placements. Notice the A8 erratum fix + ends up requiring the section addresses to remain unchanged + modulo the page size. That's something we cannot represent + inside BFD, and we don't want to force the section alignment to + be the page size. */ + if (htab->fix_cortex_a8) + (*htab->layout_sections_again) (); + + while (1) + { + bfd *input_bfd; + unsigned int bfd_indx; + asection *stub_sec; + bfd_boolean stub_changed = FALSE; + unsigned prev_num_a8_fixes = num_a8_fixes; + + num_a8_fixes = 0; + 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 = NULL; + + num_a8_relocs = 0; + + /* We'll need the symbol table in a second. */ + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + if (symtab_hdr->sh_info == 0) + continue; + + /* 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 + || (section->flags & SEC_CODE) == 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; + enum elf32_arm_stub_type stub_type; + struct elf32_arm_stub_hash_entry *stub_entry; + asection *sym_sec; + bfd_vma sym_value; + bfd_vma destination; + struct elf32_arm_link_hash_entry *hash; + const char *sym_name; + char *stub_name; + const asection *id_sec; + unsigned char st_type; + bfd_boolean created_stub = FALSE; + + r_type = ELF32_R_TYPE (irela->r_info); + r_indx = ELF32_R_SYM (irela->r_info); + + if (r_type >= (unsigned int) R_ARM_max) + { + 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; + } + + /* Only look for stubs on branch instructions. */ + if ((r_type != (unsigned int) R_ARM_CALL) + && (r_type != (unsigned int) R_ARM_THM_CALL) + && (r_type != (unsigned int) R_ARM_JUMP24) + && (r_type != (unsigned int) R_ARM_THM_JUMP19) + && (r_type != (unsigned int) R_ARM_THM_XPC22) + && (r_type != (unsigned int) R_ARM_THM_JUMP24) + && (r_type != (unsigned int) R_ARM_PLT32)) + continue; + + /* Now determine the call target, its name, value, + section. */ + sym_sec = NULL; + sym_value = 0; + destination = 0; + hash = NULL; + sym_name = NULL; + if (r_indx < symtab_hdr->sh_info) + { + /* It's a local symbol. */ + Elf_Internal_Sym *sym; + Elf_Internal_Shdr *hdr; + + if (local_syms == NULL) + { + 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); + if (local_syms == NULL) + goto error_ret_free_internal; + } + + sym = local_syms + r_indx; + hdr = elf_elfsections (input_bfd)[sym->st_shndx]; + sym_sec = hdr->bfd_section; + if (!sym_sec) + /* This is an undefined symbol. It can never + be resolved. */ + continue; + + 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); + st_type = ELF_ST_TYPE (sym->st_info); + sym_name + = bfd_elf_string_from_elf_section (input_bfd, + symtab_hdr->sh_link, + sym->st_name); + } + else + { + /* It's an external symbol. */ + int e_indx; + + e_indx = r_indx - symtab_hdr->sh_info; + hash = ((struct elf32_arm_link_hash_entry *) + elf_sym_hashes (input_bfd)[e_indx]); + + while (hash->root.root.type == bfd_link_hash_indirect + || hash->root.root.type == bfd_link_hash_warning) + hash = ((struct elf32_arm_link_hash_entry *) + hash->root.root.u.i.link); + + if (hash->root.root.type == bfd_link_hash_defined + || hash->root.root.type == bfd_link_hash_defweak) + { + sym_sec = hash->root.root.u.def.section; + sym_value = hash->root.root.u.def.value; + + struct elf32_arm_link_hash_table *globals = + elf32_arm_hash_table (info); + + /* For a destination in a shared library, + use the PLT stub as target address to + decide whether a branch stub is + needed. */ + if (globals->splt != NULL && hash != NULL + && hash->root.plt.offset != (bfd_vma) -1) + { + sym_sec = globals->splt; + sym_value = hash->root.plt.offset; + if (sym_sec->output_section != NULL) + destination = (sym_value + + sym_sec->output_offset + + sym_sec->output_section->vma); + } + else if (sym_sec->output_section != NULL) + destination = (sym_value + irela->r_addend + + sym_sec->output_offset + + sym_sec->output_section->vma); + } + else if ((hash->root.root.type == bfd_link_hash_undefined) + || (hash->root.root.type == bfd_link_hash_undefweak)) + { + /* For a shared library, use the PLT stub as + target address to decide whether a long + branch stub is needed. + For absolute code, they cannot be handled. */ + struct elf32_arm_link_hash_table *globals = + elf32_arm_hash_table (info); + + if (globals->splt != NULL && hash != NULL + && hash->root.plt.offset != (bfd_vma) -1) + { + sym_sec = globals->splt; + sym_value = hash->root.plt.offset; + if (sym_sec->output_section != NULL) + destination = (sym_value + + sym_sec->output_offset + + sym_sec->output_section->vma); + } + else + continue; + } + else + { + bfd_set_error (bfd_error_bad_value); + goto error_ret_free_internal; + } + st_type = ELF_ST_TYPE (hash->root.type); + sym_name = hash->root.root.root.string; + } + + do + { + /* Determine what (if any) linker stub is needed. */ + stub_type = arm_type_of_stub (info, section, irela, + st_type, hash, + destination, sym_sec, + input_bfd, sym_name); + if (stub_type == arm_stub_none) + break; + + /* Support for grouping stub sections. */ + id_sec = htab->stub_group[section->id].link_sec; + + /* Get the name of this stub. */ + stub_name = elf32_arm_stub_name (id_sec, sym_sec, hash, + irela); + if (!stub_name) + goto error_ret_free_internal; + + /* We've either created a stub for this reloc already, + or we are about to. */ + created_stub = TRUE; + + stub_entry = arm_stub_hash_lookup + (&htab->stub_hash_table, stub_name, + FALSE, FALSE); + if (stub_entry != NULL) + { + /* The proper stub has already been created. */ + free (stub_name); + stub_entry->target_value = sym_value; + break; + } + + stub_entry = elf32_arm_add_stub (stub_name, section, + htab); + if (stub_entry == NULL) + { + free (stub_name); + goto error_ret_free_internal; + } + + stub_entry->target_value = sym_value; + stub_entry->target_section = sym_sec; + stub_entry->stub_type = stub_type; + stub_entry->h = hash; + stub_entry->st_type = st_type; + + if (sym_name == NULL) + sym_name = "unnamed"; + stub_entry->output_name + = bfd_alloc (htab->stub_bfd, + sizeof (THUMB2ARM_GLUE_ENTRY_NAME) + + strlen (sym_name)); + if (stub_entry->output_name == NULL) + { + free (stub_name); + goto error_ret_free_internal; + } + + /* For historical reasons, use the existing names for + ARM-to-Thumb and Thumb-to-ARM stubs. */ + if ( ((r_type == (unsigned int) R_ARM_THM_CALL) + || (r_type == (unsigned int) R_ARM_THM_JUMP24)) + && st_type != STT_ARM_TFUNC) + sprintf (stub_entry->output_name, + THUMB2ARM_GLUE_ENTRY_NAME, sym_name); + else if ( ((r_type == (unsigned int) R_ARM_CALL) + || (r_type == (unsigned int) R_ARM_JUMP24)) + && st_type == STT_ARM_TFUNC) + sprintf (stub_entry->output_name, + ARM2THUMB_GLUE_ENTRY_NAME, sym_name); + else + sprintf (stub_entry->output_name, STUB_ENTRY_NAME, + sym_name); + + stub_changed = TRUE; + } + while (0); + + /* Look for relocations which might trigger Cortex-A8 + erratum. */ + if (htab->fix_cortex_a8 + && (r_type == (unsigned int) R_ARM_THM_JUMP24 + || r_type == (unsigned int) R_ARM_THM_JUMP19 + || r_type == (unsigned int) R_ARM_THM_CALL + || r_type == (unsigned int) R_ARM_THM_XPC22)) + { + bfd_vma from = section->output_section->vma + + section->output_offset + + irela->r_offset; + + if ((from & 0xfff) == 0xffe) + { + /* Found a candidate. Note we haven't checked the + destination is within 4K here: if we do so (and + don't create an entry in a8_relocs) we can't tell + that a branch should have been relocated when + scanning later. */ + if (num_a8_relocs == a8_reloc_table_size) + { + a8_reloc_table_size *= 2; + a8_relocs = bfd_realloc (a8_relocs, + sizeof (struct a8_erratum_reloc) + * a8_reloc_table_size); + } + + a8_relocs[num_a8_relocs].from = from; + a8_relocs[num_a8_relocs].destination = destination; + a8_relocs[num_a8_relocs].r_type = r_type; + a8_relocs[num_a8_relocs].st_type = st_type; + a8_relocs[num_a8_relocs].sym_name = sym_name; + a8_relocs[num_a8_relocs].non_a8_stub = created_stub; + + num_a8_relocs++; + } + } + } + + /* We're done with the internal relocs, free them. */ + if (elf_section_data (section)->relocs == NULL) + free (internal_relocs); + } + + if (htab->fix_cortex_a8) + { + /* Sort relocs which might apply to Cortex-A8 erratum. */ + qsort (a8_relocs, num_a8_relocs, + sizeof (struct a8_erratum_reloc), + &a8_reloc_compare); + + /* Scan for branches which might trigger Cortex-A8 erratum. */ + if (cortex_a8_erratum_scan (input_bfd, info, &a8_fixes, + &num_a8_fixes, &a8_fix_table_size, + a8_relocs, num_a8_relocs, + prev_num_a8_fixes, &stub_changed) + != 0) + goto error_ret_free_local; + } + } + + if (prev_num_a8_fixes != num_a8_fixes) + stub_changed = TRUE; + + if (!stub_changed) + break; + + /* OK, we've added some stubs. Find out the new size of the + stub sections. */ + for (stub_sec = htab->stub_bfd->sections; + stub_sec != NULL; + stub_sec = stub_sec->next) + { + /* Ignore non-stub sections. */ + if (!strstr (stub_sec->name, STUB_SUFFIX)) + continue; + + stub_sec->size = 0; + } + + bfd_hash_traverse (&htab->stub_hash_table, arm_size_one_stub, htab); + + /* Add Cortex-A8 erratum veneers to stub section sizes too. */ + if (htab->fix_cortex_a8) + for (i = 0; i < num_a8_fixes; i++) + { + stub_sec = elf32_arm_create_or_find_stub_sec (NULL, + a8_fixes[i].section, htab); + + if (stub_sec == NULL) + goto error_ret_free_local; + + stub_sec->size + += find_stub_size_and_template (a8_fixes[i].stub_type, NULL, + NULL); + } + + + /* Ask the linker to do its stuff. */ + (*htab->layout_sections_again) (); + } + + /* Add stubs for Cortex-A8 erratum fixes now. */ + if (htab->fix_cortex_a8) + { + for (i = 0; i < num_a8_fixes; i++) + { + struct elf32_arm_stub_hash_entry *stub_entry; + char *stub_name = a8_fixes[i].stub_name; + asection *section = a8_fixes[i].section; + unsigned int section_id = a8_fixes[i].section->id; + asection *link_sec = htab->stub_group[section_id].link_sec; + asection *stub_sec = htab->stub_group[section_id].stub_sec; + const insn_sequence *template_sequence; + int template_size, size = 0; + + stub_entry = arm_stub_hash_lookup (&htab->stub_hash_table, stub_name, + TRUE, FALSE); + if (stub_entry == NULL) + { + (*_bfd_error_handler) (_("%s: cannot create stub entry %s"), + section->owner, + stub_name); + return FALSE; + } + + stub_entry->stub_sec = stub_sec; + stub_entry->stub_offset = 0; + stub_entry->id_sec = link_sec; + stub_entry->stub_type = a8_fixes[i].stub_type; + stub_entry->target_section = a8_fixes[i].section; + stub_entry->target_value = a8_fixes[i].offset; + stub_entry->target_addend = a8_fixes[i].addend; + stub_entry->orig_insn = a8_fixes[i].orig_insn; + stub_entry->st_type = STT_ARM_TFUNC; + + size = find_stub_size_and_template (a8_fixes[i].stub_type, + &template_sequence, + &template_size); + + stub_entry->stub_size = size; + stub_entry->stub_template = template_sequence; + stub_entry->stub_template_size = template_size; + } + + /* Stash the Cortex-A8 erratum fix array for use later in + elf32_arm_write_section(). */ + htab->a8_erratum_fixes = a8_fixes; + htab->num_a8_erratum_fixes = num_a8_fixes; + } + else + { + htab->a8_erratum_fixes = NULL; + htab->num_a8_erratum_fixes = 0; + } + return TRUE; + + error_ret_free_local: + 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 arm_elf_finish in the + linker. */ + +bfd_boolean +elf32_arm_build_stubs (struct bfd_link_info *info) +{ + asection *stub_sec; + struct bfd_hash_table *table; + struct elf32_arm_link_hash_table *htab; + + htab = elf32_arm_hash_table (info); + + for (stub_sec = htab->stub_bfd->sections; + stub_sec != NULL; + stub_sec = stub_sec->next) + { + bfd_size_type size; + + /* Ignore non-stub sections. */ + if (!strstr (stub_sec->name, STUB_SUFFIX)) + continue; + + /* Allocate memory to hold the linker stubs. */ + size = stub_sec->size; + stub_sec->contents = bfd_zalloc (htab->stub_bfd, size); + if (stub_sec->contents == NULL && size != 0) + return FALSE; + stub_sec->size = 0; + } + + /* Build the stubs as directed by the stub hash table. */ + table = &htab->stub_hash_table; + bfd_hash_traverse (table, arm_build_one_stub, info); + if (htab->fix_cortex_a8) + { + /* Place the cortex a8 stubs last. */ + htab->fix_cortex_a8 = -1; + bfd_hash_traverse (table, arm_build_one_stub, info); + } + + return TRUE; +} + +/* Locate the Thumb encoded calling stub for NAME. */ + +static struct elf_link_hash_entry * +find_thumb_glue (struct bfd_link_info *link_info, + const char *name, + char **error_message) +{ + char *tmp_name; + struct elf_link_hash_entry *hash; + struct elf32_arm_link_hash_table *hash_table; + + /* We need a pointer to the armelf specific hash table. */ + hash_table = elf32_arm_hash_table (link_info); + + tmp_name = bfd_malloc ((bfd_size_type) strlen (name) + + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1); + + BFD_ASSERT (tmp_name); + + sprintf (tmp_name, THUMB2ARM_GLUE_ENTRY_NAME, name); + + hash = elf_link_hash_lookup + (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE); + + if (hash == NULL + && asprintf (error_message, _("unable to find THUMB glue '%s' for '%s'"), + tmp_name, name) == -1) + *error_message = (char *) bfd_errmsg (bfd_error_system_call); + + free (tmp_name); + + return hash; +} + +/* Locate the ARM encoded calling stub for NAME. */ + +static struct elf_link_hash_entry * +find_arm_glue (struct bfd_link_info *link_info, + const char *name, + char **error_message) +{ + char *tmp_name; + struct elf_link_hash_entry *myh; + struct elf32_arm_link_hash_table *hash_table; + + /* We need a pointer to the elfarm specific hash table. */ + hash_table = elf32_arm_hash_table (link_info); + + tmp_name = bfd_malloc ((bfd_size_type) strlen (name) + + strlen (ARM2THUMB_GLUE_ENTRY_NAME) + 1); + + BFD_ASSERT (tmp_name); + + sprintf (tmp_name, ARM2THUMB_GLUE_ENTRY_NAME, name); + + myh = elf_link_hash_lookup + (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE); + + if (myh == NULL + && asprintf (error_message, _("unable to find ARM glue '%s' for '%s'"), + tmp_name, name) == -1) + *error_message = (char *) bfd_errmsg (bfd_error_system_call); + + free (tmp_name); + + return myh; +} + +/* ARM->Thumb glue (static images): + + .arm + __func_from_arm: + ldr r12, __func_addr + bx r12 + __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: + ldr r12, __func_offset + add r12, r12, pc + bx r12 + __func_offset: + .word func - . */ + +#define ARM2THUMB_STATIC_GLUE_SIZE 12 +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; @@ -2604,19 +4885,19 @@ static const insn32 a2t3p_bx_r12_insn = 0xe12fff1c; /* Thumb->ARM: Thumb->(non-interworking aware) ARM - .thumb .thumb - .align 2 .align 2 - __func_from_thumb: __func_from_thumb: - bx pc push {r6, lr} - nop ldr r6, __func_addr - .arm mov lr, pc - __func_change_to_arm: bx r6 - b func .arm - __func_back_to_thumb: - ldmia r13! {r6, lr} - bx lr - __func_addr: - .word func */ + .thumb .thumb + .align 2 .align 2 + __func_from_thumb: __func_from_thumb: + bx pc push {r6, lr} + nop ldr r6, __func_addr + .arm mov lr, pc + b func bx r6 + .arm + ;; back_to_thumb + ldmia r13! {r6, lr} + bx lr + __func_addr: + .word func */ #define THUMB2ARM_GLUE_SIZE 8 static const insn16 t2a1_bx_pc_insn = 0x4778; @@ -2625,69 +4906,71 @@ static const insn32 t2a3_b_insn = 0xea000000; #define VFP11_ERRATUM_VENEER_SIZE 8 +#define ARM_BX_VENEER_SIZE 12 +static const insn32 armbx1_tst_insn = 0xe3100001; +static const insn32 armbx2_moveq_insn = 0x01a0f000; +static const insn32 armbx3_bx_insn = 0xe12fff10; + #ifndef ELFARM_NABI_C_INCLUDED -bfd_boolean -bfd_elf32_arm_allocate_interworking_sections (struct bfd_link_info * info) +static void +arm_allocate_glue_section_space (bfd * abfd, bfd_size_type size, const char * name) { asection * s; - bfd_byte * foo; - struct elf32_arm_link_hash_table * globals; - - globals = elf32_arm_hash_table (info); - - BFD_ASSERT (globals != NULL); + bfd_byte * contents; - if (globals->arm_glue_size != 0) + if (size == 0) { - BFD_ASSERT (globals->bfd_of_glue_owner != NULL); + /* Do not include empty glue sections in the output. */ + if (abfd != NULL) + { + s = bfd_get_section_by_name (abfd, name); + if (s != NULL) + s->flags |= SEC_EXCLUDE; + } + return; + } - s = bfd_get_section_by_name (globals->bfd_of_glue_owner, - ARM2THUMB_GLUE_SECTION_NAME); + BFD_ASSERT (abfd != NULL); - BFD_ASSERT (s != NULL); + s = bfd_get_section_by_name (abfd, name); + BFD_ASSERT (s != NULL); - foo = bfd_alloc (globals->bfd_of_glue_owner, globals->arm_glue_size); + contents = bfd_alloc (abfd, size); - BFD_ASSERT (s->size == globals->arm_glue_size); - s->contents = foo; - } + BFD_ASSERT (s->size == size); + s->contents = contents; +} - if (globals->thumb_glue_size != 0) - { - BFD_ASSERT (globals->bfd_of_glue_owner != NULL); +bfd_boolean +bfd_elf32_arm_allocate_interworking_sections (struct bfd_link_info * info) +{ + struct elf32_arm_link_hash_table * globals; - s = bfd_get_section_by_name - (globals->bfd_of_glue_owner, THUMB2ARM_GLUE_SECTION_NAME); + globals = elf32_arm_hash_table (info); + BFD_ASSERT (globals != NULL); - BFD_ASSERT (s != NULL); + arm_allocate_glue_section_space (globals->bfd_of_glue_owner, + globals->arm_glue_size, + ARM2THUMB_GLUE_SECTION_NAME); - foo = bfd_alloc (globals->bfd_of_glue_owner, globals->thumb_glue_size); + arm_allocate_glue_section_space (globals->bfd_of_glue_owner, + globals->thumb_glue_size, + THUMB2ARM_GLUE_SECTION_NAME); - 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; - } + arm_allocate_glue_section_space (globals->bfd_of_glue_owner, + globals->vfp11_erratum_glue_size, + VFP11_ERRATUM_VENEER_SECTION_NAME); + + arm_allocate_glue_section_space (globals->bfd_of_glue_owner, + globals->bx_glue_size, + ARM_BX_GLUE_SECTION_NAME); return TRUE; } /* Allocate space and symbols for calling a Thumb function from Arm mode. - returns the symbol identifying teh stub. */ + returns the symbol identifying the stub. */ + static struct elf_link_hash_entry * record_arm_to_thumb_glue (struct bfd_link_info * link_info, struct elf_link_hash_entry * h) @@ -2729,7 +5012,8 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info, /* The only trick here is using hash_table->arm_glue_size as the value. Even though the section isn't allocated yet, this is where we will be - putting it. */ + putting it. The +1 on the value marks that the stub has not been + output yet - not that it is a Thumb function. */ bh = NULL; val = globals->arm_glue_size + 1; _bfd_generic_link_add_one_symbol (link_info, globals->bfd_of_glue_owner, @@ -2756,81 +5040,61 @@ record_arm_to_thumb_glue (struct bfd_link_info * link_info, return myh; } +/* Allocate space for ARMv4 BX veneers. */ + static void -record_thumb_to_arm_glue (struct bfd_link_info *link_info, - struct elf_link_hash_entry *h) +record_arm_bx_glue (struct bfd_link_info * link_info, int reg) { - const char *name = h->root.root.string; - asection *s; + asection * s; + struct elf32_arm_link_hash_table *globals; char *tmp_name; struct elf_link_hash_entry *myh; struct bfd_link_hash_entry *bh; - struct elf32_arm_link_hash_table *hash_table; bfd_vma val; - 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, THUMB2ARM_GLUE_SECTION_NAME); - - BFD_ASSERT (s != NULL); - - tmp_name = bfd_malloc ((bfd_size_type) strlen (name) - + strlen (THUMB2ARM_GLUE_ENTRY_NAME) + 1); - - BFD_ASSERT (tmp_name); - - sprintf (tmp_name, THUMB2ARM_GLUE_ENTRY_NAME, name); - - myh = elf_link_hash_lookup - (&(hash_table)->root, tmp_name, FALSE, FALSE, TRUE); + /* BX PC does not need a veneer. */ + if (reg == 15) + return; - if (myh != NULL) - { - /* We've already seen this guy. */ - free (tmp_name); - return; - } + globals = elf32_arm_hash_table (link_info); - bh = NULL; - val = hash_table->thumb_glue_size + 1; - _bfd_generic_link_add_one_symbol (link_info, hash_table->bfd_of_glue_owner, - tmp_name, BSF_GLOBAL, s, val, - NULL, TRUE, FALSE, &bh); + BFD_ASSERT (globals != NULL); + BFD_ASSERT (globals->bfd_of_glue_owner != NULL); - /* If we mark it 'Thumb', the disassembler will do a better job. */ - myh = (struct elf_link_hash_entry *) bh; - myh->type = ELF_ST_INFO (STB_LOCAL, STT_ARM_TFUNC); - myh->forced_local = 1; + /* Check if this veneer has already been allocated. */ + if (globals->bx_glue_offset[reg]) + return; - free (tmp_name); + s = bfd_get_section_by_name + (globals->bfd_of_glue_owner, ARM_BX_GLUE_SECTION_NAME); -#define CHANGE_TO_ARM "__%s_change_to_arm" -#define BACK_FROM_ARM "__%s_back_from_arm" + BFD_ASSERT (s != NULL); - /* Allocate another symbol to mark where we switch to Arm mode. */ - tmp_name = bfd_malloc ((bfd_size_type) strlen (name) - + strlen (CHANGE_TO_ARM) + 1); + /* Add symbol for veneer. */ + tmp_name = bfd_malloc ((bfd_size_type) strlen (ARM_BX_GLUE_ENTRY_NAME) + 1); BFD_ASSERT (tmp_name); - sprintf (tmp_name, CHANGE_TO_ARM, name); + sprintf (tmp_name, ARM_BX_GLUE_ENTRY_NAME, reg); - bh = NULL; - val = hash_table->thumb_glue_size + 4, - _bfd_generic_link_add_one_symbol (link_info, hash_table->bfd_of_glue_owner, - tmp_name, BSF_LOCAL, s, val, - NULL, TRUE, FALSE, &bh); + myh = elf_link_hash_lookup + (&(globals)->root, tmp_name, FALSE, FALSE, FALSE); - free (tmp_name); + BFD_ASSERT (myh == NULL); + + bh = NULL; + val = globals->bx_glue_size; + _bfd_generic_link_add_one_symbol (link_info, globals->bfd_of_glue_owner, + tmp_name, BSF_FUNCTION | BSF_LOCAL, s, val, + NULL, TRUE, FALSE, &bh); - s->size += THUMB2ARM_GLUE_SIZE; - hash_table->thumb_glue_size += THUMB2ARM_GLUE_SIZE; + myh = (struct elf_link_hash_entry *) bh; + myh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC); + myh->forced_local = 1; - return; + s->size += ARM_BX_VENEER_SIZE; + globals->bx_glue_offset[reg] = globals->bx_glue_size | 2; + globals->bx_glue_size += ARM_BX_VENEER_SIZE; } @@ -2841,25 +5105,28 @@ 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 = bfd_realloc_or_free (sec_data->map, sec_data->mapsize + * sizeof (elf32_arm_section_map)); + } + + if (sec_data->map) + { + sec_data->map[newidx].vma = vma; + sec_data->map[newidx].type = type; } - - sec_data->map[newidx].vma = vma; - sec_data->map[newidx].type = type; } @@ -2882,32 +5149,32 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info, 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, @@ -2921,7 +5188,7 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info, /* 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; @@ -2937,7 +5204,7 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info, myh = elf_link_hash_lookup (&(hash_table)->root, tmp_name, FALSE, FALSE, FALSE); - + if (myh != NULL) abort (); @@ -2945,13 +5212,13 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info, 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) @@ -2967,22 +5234,51 @@ record_vfp11_erratum_veneer (struct bfd_link_info *link_info, 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; } +#define ARM_GLUE_SECTION_FLAGS \ + (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_CODE \ + | SEC_READONLY | SEC_LINKER_CREATED) + +/* Create a fake section for use by the ARM backend of the linker. */ + +static bfd_boolean +arm_make_glue_section (bfd * abfd, const char * name) +{ + asection * sec; + + sec = bfd_get_section_by_name (abfd, name); + if (sec != NULL) + /* Already made. */ + return TRUE; + + sec = bfd_make_section_with_flags (abfd, name, ARM_GLUE_SECTION_FLAGS); + + if (sec == NULL + || !bfd_set_section_alignment (abfd, sec, 2)) + return FALSE; + + /* Set the gc mark to prevent the section from being removed by garbage + collection, despite the fact that no relocs refer to this section. */ + sec->gc_mark = 1; + + return TRUE; +} + /* Add the glue sections to ABFD. This function is called from the linker scripts in ld/emultempl/{armelf}.em. */ @@ -2990,79 +5286,20 @@ bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd (bfd *abfd, struct bfd_link_info *info) { - flagword flags; - asection *sec; - /* If we are only performing a partial link do not bother adding the glue. */ if (info->relocatable) return TRUE; - sec = bfd_get_section_by_name (abfd, ARM2THUMB_GLUE_SECTION_NAME); - - if (sec == NULL) - { - /* 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); - - sec = bfd_make_section_with_flags (abfd, - ARM2THUMB_GLUE_SECTION_NAME, - flags); - - if (sec == NULL - || !bfd_set_section_alignment (abfd, sec, 2)) - return FALSE; - - /* Set the gc mark to prevent the section from being removed by garbage - collection, despite the fact that no relocs refer to this section. */ - sec->gc_mark = 1; - } - - sec = bfd_get_section_by_name (abfd, THUMB2ARM_GLUE_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, - THUMB2ARM_GLUE_SECTION_NAME, - flags); - - if (sec == NULL - || !bfd_set_section_alignment (abfd, sec, 2)) - return FALSE; - - 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; + return arm_make_glue_section (abfd, ARM2THUMB_GLUE_SECTION_NAME) + && arm_make_glue_section (abfd, THUMB2ARM_GLUE_SECTION_NAME) + && arm_make_glue_section (abfd, VFP11_ERRATUM_VENEER_SECTION_NAME) + && arm_make_glue_section (abfd, ARM_BX_GLUE_SECTION_NAME); } /* Select a BFD to be used to hold the sections used by the glue code. This function is called from the linker scripts in ld/emultempl/ - {armelf/pe}.em */ + {armelf/pe}.em. */ bfd_boolean bfd_elf32_arm_get_bfd_for_interworking (bfd *abfd, struct bfd_link_info *info) @@ -3090,7 +5327,8 @@ bfd_elf32_arm_get_bfd_for_interworking (bfd *abfd, struct bfd_link_info *info) return TRUE; } -static void check_use_blx(struct elf32_arm_link_hash_table *globals) +static void +check_use_blx (struct elf32_arm_link_hash_table *globals) { if (bfd_elf_get_obj_attr_int (globals->obfd, OBJ_ATTR_PROC, Tag_CPU_arch) > 2) @@ -3149,12 +5387,11 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, if ((sec->flags & SEC_EXCLUDE) != 0) continue; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = & elf_symtab_hdr (abfd); /* Load the relocs. */ internal_relocs - = _bfd_elf_link_read_relocs (abfd, sec, (void *) NULL, - (Elf_Internal_Rela *) NULL, FALSE); + = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, FALSE); if (internal_relocs == NULL) goto error_return; @@ -3172,11 +5409,7 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, /* These are the only relocation types we care about. */ if ( r_type != R_ARM_PC24 - && r_type != R_ARM_PLT32 - && r_type != R_ARM_CALL - && r_type != R_ARM_JUMP24 - && r_type != R_ARM_THM_CALL - && r_type != R_ARM_THM_JUMP24) + && (r_type != R_ARM_V4BX || globals->fix_v4bx < 2)) continue; /* Get the section contents if we haven't done so already. */ @@ -3193,6 +5426,15 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, } } + if (r_type == R_ARM_V4BX) + { + int reg; + + reg = bfd_get_32 (abfd, contents + irel->r_offset) & 0xf; + record_arm_bx_glue (link_info, reg); + continue; + } + /* If the relocation is not against a symbol it cannot concern us. */ h = NULL; @@ -3218,28 +5460,13 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd, switch (r_type) { case R_ARM_PC24: - case R_ARM_PLT32: - case R_ARM_CALL: - case R_ARM_JUMP24: /* This one is a call from arm code. We need to look up the target of the call. If it is a thumb target, we insert glue. */ - if (ELF_ST_TYPE(h->type) == STT_ARM_TFUNC - && !(r_type == R_ARM_CALL && globals->use_blx)) + if (ELF_ST_TYPE (h->type) == STT_ARM_TFUNC) record_arm_to_thumb_glue (link_info, h); break; - case R_ARM_THM_CALL: - case R_ARM_THM_JUMP24: - /* 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 && r_type == R_ARM_THM_CALL) - && h->root.type != bfd_link_hash_undefweak) - record_thumb_to_arm_glue (link_info, h); - break; - default: abort (); } @@ -3280,10 +5507,14 @@ bfd_elf32_arm_init_maps (bfd *abfd) Elf_Internal_Shdr *hdr; unsigned int i, localsyms; + /* PR 7093: Make sure that we are dealing with an arm elf binary. */ + if (! is_arm_elf (abfd)) + return; + if ((abfd->flags & DYNAMIC) != 0) return; - hdr = &elf_tdata (abfd)->symtab_hdr; + hdr = & elf_symtab_hdr (abfd); localsyms = hdr->sh_info; /* Obtain a buffer full of symbols for this BFD. The hdr->sh_info field @@ -3301,13 +5532,13 @@ bfd_elf32_arm_init_maps (bfd *abfd) 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); @@ -3316,12 +5547,34 @@ bfd_elf32_arm_init_maps (bfd *abfd) } +/* Auto-select enabling of Cortex-A8 erratum fix if the user didn't explicitly + say what they wanted. */ + +void +bfd_elf32_arm_set_cortex_a8_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); + + if (globals->fix_cortex_a8 == -1) + { + /* Turn on Cortex-A8 erratum workaround for ARMv7-A. */ + if (out_attr[Tag_CPU_arch].i == TAG_CPU_ARCH_V7 + && (out_attr[Tag_CPU_arch_profile].i == 'A' + || out_attr[Tag_CPU_arch_profile].i == 0)) + globals->fix_cortex_a8 = 1; + else + globals->fix_cortex_a8 = 0; + } +} + + 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) { @@ -3331,7 +5584,7 @@ bfd_elf32_arm_set_vfp11_fix (bfd *obfd, struct bfd_link_info *link_info) 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 " @@ -3346,7 +5599,8 @@ bfd_elf32_arm_set_vfp11_fix (bfd *obfd, struct bfd_link_info *link_info) } -enum bfd_arm_vfp11_pipe { +enum bfd_arm_vfp11_pipe +{ VFP11_FMAC, VFP11_LS, VFP11_DS, @@ -3361,10 +5615,10 @@ enum bfd_arm_vfp11_pipe { 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) @@ -3393,23 +5647,23 @@ 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; } @@ -3530,7 +5784,7 @@ bfd_arm_vfp11_insn_decode (unsigned int insn, unsigned int *destmask, int *regs, else if ((insn & 0x0fe00ed0) == 0x0c400a10) { unsigned int fm = bfd_arm_vfp11_regno (insn, is_double, 0, 5); - + if ((insn & 0x100000) == 0) { if (is_double) @@ -3548,12 +5802,12 @@ bfd_arm_vfp11_insn_decode (unsigned int insn, unsigned int *destmask, int *regs, { 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: @@ -3567,12 +5821,12 @@ bfd_arm_vfp11_insn_decode (unsigned int insn, unsigned int *destmask, int *regs, 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; } @@ -3623,10 +5877,10 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) 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 @@ -3635,37 +5889,40 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) 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. - */ + 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; + /* Skip if this bfd does not correspond to an ELF image. */ + if (! is_arm_elf (abfd)) + 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) + /* Skip this BFD if it corresponds to an executable or dynamic object. */ + if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) return TRUE; - + for (sec = abfd->sections; sec != NULL; sec = sec->next) { unsigned int i, span, first_fmac = 0, veneer_of_insn = 0; @@ -3676,14 +5933,16 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) if (elf_section_type (sec) != SHT_PROGBITS || (elf_section_flags (sec) & SHF_EXECINSTR) == 0 || (sec->flags & SEC_EXCLUDE) != 0 + || sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS + || sec->output_section == bfd_abs_section_ptr || 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)) @@ -3698,7 +5957,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) 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') @@ -3787,7 +6046,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) case 'a': newerr->type = VFP11_ERRATUM_BRANCH_TO_ARM_VENEER; break; - + default: abort (); } @@ -3806,7 +6065,7 @@ bfd_elf32_arm_vfp11_erratum_scan (bfd *abfd, struct bfd_link_info *link_info) i = next_i; } } - + if (contents != NULL && elf_section_data (sec)->this_hdr.contents != contents) free (contents); @@ -3819,7 +6078,7 @@ error_return: if (contents != NULL && elf_section_data (sec)->this_hdr.contents != contents) free (contents); - + return FALSE; } @@ -3833,16 +6092,16 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd, 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) + if (! is_arm_elf (abfd)) return; globals = elf32_arm_hash_table (link_info); - + tmp_name = bfd_malloc ((bfd_size_type) strlen (VFP11_ERRATUM_VENEER_ENTRY_NAME) + 10); @@ -3850,7 +6109,7 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd, { 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; @@ -3897,13 +6156,13 @@ bfd_elf32_arm_vfp11_fix_veneer_locations (bfd *abfd, errnode->u.v.branch->vma = vma; break; - + default: abort (); } } } - + free (tmp_name); } @@ -3918,7 +6177,8 @@ bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd, int fix_v4bx, int use_blx, bfd_arm_vfp11_fix vfp11_fix, - int no_enum_warn, int pic_veneer) + int no_enum_warn, int no_wchar_warn, + int pic_veneer, int fix_cortex_a8) { struct elf32_arm_link_hash_table *globals; @@ -3940,93 +6200,38 @@ bfd_elf32_arm_set_target_relocs (struct bfd *output_bfd, globals->use_blx |= use_blx; globals->vfp11_fix = vfp11_fix; globals->pic_veneer = pic_veneer; + globals->fix_cortex_a8 = fix_cortex_a8; - 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 - encoding is split over two fields, each in it's own instruction. They - can occur in any order. So given a thumb form of long branch, and an - offset, insert the offset into the thumb branch and return finished - instruction. - - It takes two thumb instructions to encode the target address. Each has - 11 bits to invest. The upper 11 bits are stored in one (identified by - H-0.. see below), the lower 11 bits are stored in the other (identified - by H-1). - - Combine together and shifted left by 1 (it's a half word address) and - there you have it. - - Op: 1111 = F, - H-0, upper address-0 = 000 - Op: 1111 = F, - H-1, lower address-0 = 800 - - They can be ordered either way, but the arm tools I've seen always put - the lower one first. It probably doesn't matter. krk@cygnus.com - - XXX: Actually the order does matter. The second instruction (H-1) - moves the computed address into the PC, so it must be the second one - in the sequence. The problem, however is that whilst little endian code - stores the instructions in HI then LOW order, big endian code does the - reverse. nickc@cygnus.com. */ - -#define LOW_HI_ORDER 0xF800F000 -#define HI_LOW_ORDER 0xF000F800 - -static insn32 -insert_thumb_branch (insn32 br_insn, int rel_off) -{ - unsigned int low_bits; - unsigned int high_bits; - - BFD_ASSERT ((rel_off & 1) != 1); - - rel_off >>= 1; /* Half word aligned address. */ - low_bits = rel_off & 0x000007FF; /* The bottom 11 bits. */ - high_bits = (rel_off >> 11) & 0x000007FF; /* The top 11 bits. */ - - if ((br_insn & LOW_HI_ORDER) == LOW_HI_ORDER) - br_insn = LOW_HI_ORDER | (low_bits << 16) | high_bits; - else if ((br_insn & HI_LOW_ORDER) == HI_LOW_ORDER) - br_insn = HI_LOW_ORDER | (high_bits << 16) | low_bits; - else - /* FIXME: abort is probably not the right call. krk@cygnus.com */ - abort (); /* Error - not a valid branch instruction form. */ - - 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); + BFD_ASSERT (is_arm_elf (output_bfd)); + elf_arm_tdata (output_bfd)->no_enum_size_warning = no_enum_warn; + elf_arm_tdata (output_bfd)->no_wchar_size_warning = no_wchar_warn; } - -/* Store a 16-bit Thumb insn into an output section not processed by - elf32_arm_write_section. */ +/* Replace the target offset of a Thumb bl or b.w instruction. */ static void -put_thumb_insn (struct elf32_arm_link_hash_table *htab, - bfd * output_bfd, bfd_vma val, void * ptr) +insert_thumb_branch (bfd *abfd, long int offset, bfd_byte *insn) { - if (htab->byteswap_code != bfd_little_endian (output_bfd)) - bfd_putl16 (val, ptr); - else - bfd_putb16 (val, ptr); + bfd_vma upper; + bfd_vma lower; + int reloc_sign; + + BFD_ASSERT ((offset & 1) == 0); + + upper = bfd_get_16 (abfd, insn); + lower = bfd_get_16 (abfd, insn + 2); + reloc_sign = (offset < 0) ? 1 : 0; + upper = (upper & ~(bfd_vma) 0x7ff) + | ((offset >> 12) & 0x3ff) + | (reloc_sign << 10); + lower = (lower & ~(bfd_vma) 0x2fff) + | (((!((offset >> 23) & 1)) ^ reloc_sign) << 13) + | (((!((offset >> 22) & 1)) ^ reloc_sign) << 11) + | ((offset >> 1) & 0x7ff); + bfd_put_16 (abfd, upper, insn); + bfd_put_16 (abfd, lower, insn + 2); } - /* Thumb code calling an ARM function. */ static int @@ -4044,7 +6249,6 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info, { asection * s = 0; bfd_vma my_offset; - unsigned long int tmp; long int ret_offset; struct elf_link_hash_entry * myh; struct elf32_arm_link_hash_table * globals; @@ -4125,12 +6329,7 @@ elf32_thumb_to_arm_stub (struct bfd_link_info * info, /* Biassing for PC-relative addressing. */ - 8; - tmp = bfd_get_32 (input_bfd, hit_data - - input_section->vma); - - bfd_put_32 (output_bfd, - (bfd_vma) insert_thumb_branch (tmp, ret_offset), - hit_data - input_section->vma); + insert_thumb_branch (input_bfd, ret_offset, hit_data - input_section->vma); return TRUE; } @@ -4144,8 +6343,8 @@ elf32_arm_create_thumb_stub (struct bfd_link_info * info, bfd * output_bfd, asection * sym_sec, bfd_vma val, - asection *s, - char **error_message) + asection * s, + char ** error_message) { bfd_vma my_offset; long int ret_offset; @@ -4220,6 +6419,8 @@ elf32_arm_create_thumb_stub (struct bfd_link_info * info, /* It's a thumb address. Add the low order bit. */ bfd_put_32 (output_bfd, val | a2t3_func_addr_insn, s->contents + my_offset + 8); + + my_offset += 12; } } @@ -4300,7 +6501,7 @@ elf32_arm_to_thumb_export_stub (struct elf_link_hash_entry *h, void * inf) bfd_vma val; char *error_message; - eh = elf32_arm_hash_entry(h); + eh = elf32_arm_hash_entry (h); /* Allocate stubs for exported Thumb functions on v4t. */ if (eh->export_glue == NULL) return TRUE; @@ -4322,6 +6523,7 @@ elf32_arm_to_thumb_export_stub (struct elf_link_hash_entry *h, void * inf) 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, @@ -4330,14 +6532,52 @@ elf32_arm_to_thumb_export_stub (struct elf_link_hash_entry *h, void * inf) return TRUE; } +/* Populate ARMv4 BX veneers. Returns the absolute adress of the veneer. */ + +static bfd_vma +elf32_arm_bx_glue (struct bfd_link_info * info, int reg) +{ + bfd_byte *p; + bfd_vma glue_addr; + asection *s; + 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, + ARM_BX_GLUE_SECTION_NAME); + BFD_ASSERT (s != NULL); + BFD_ASSERT (s->contents != NULL); + BFD_ASSERT (s->output_section != NULL); + + BFD_ASSERT (globals->bx_glue_offset[reg] & 2); + + glue_addr = globals->bx_glue_offset[reg] & ~(bfd_vma)3; + + if ((globals->bx_glue_offset[reg] & 1) == 0) + { + p = s->contents + glue_addr; + bfd_put_32 (globals->obfd, armbx1_tst_insn + (reg << 16), p); + bfd_put_32 (globals->obfd, armbx2_moveq_insn + reg, p + 4); + bfd_put_32 (globals->obfd, armbx3_bx_insn + reg, p + 8); + globals->bx_glue_offset[reg] |= 1; + } + + return glue_addr + s->output_section->vma + s->output_offset; +} + /* Generate Arm stubs for exported Thumb symbols. */ static void -elf32_arm_begin_write_processing (bfd *abfd ATTRIBUTE_UNUSED, +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) + if (link_info == NULL) + /* Ignore this if we are not called by the ELF backend linker. */ return; globals = elf32_arm_hash_table (link_info); @@ -4352,6 +6592,7 @@ elf32_arm_begin_write_processing (bfd *abfd ATTRIBUTE_UNUSED, /* Some relocations map to different relocations depending on the target. Return the real relocation. */ + static int arm_real_reloc_type (struct elf32_arm_link_hash_table * globals, int r_type) @@ -4469,8 +6710,9 @@ calculate_group_reloc_mask (bfd_vma value, int n, bfd_vma *final_residual) /* 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) +identify_add_or_sub (bfd_vma insn) { int opcode = insn & 0x1e00000; @@ -4478,18 +6720,9 @@ identify_add_or_sub(bfd_vma insn) 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; + return -1; + + return 0; } /* Perform a relocation as part of a final link. */ @@ -4508,7 +6741,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, int sym_flags, struct elf_link_hash_entry * h, bfd_boolean * unresolved_reloc_p, - char **error_message) + char ** error_message) { unsigned long r_type = howto->type; unsigned long r_symndx; @@ -4526,7 +6759,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, globals = elf32_arm_hash_table (info); - /* Some relocation type map to different relocations depending on the + BFD_ASSERT (is_arm_elf (input_bfd)); + + /* Some relocation types map to different relocations depending on the target. We pick the right one here. */ r_type = arm_real_reloc_type (globals, r_type); if (r_type != howto->type) @@ -4550,7 +6785,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, sgot = bfd_get_section_by_name (dynobj, ".got"); splt = bfd_get_section_by_name (dynobj, ".plt"); } - symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = & elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); r_symndx = ELF32_R_SYM (rel->r_info); @@ -4596,9 +6831,13 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, /* 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. */ + branches in this object should go to it, except if the PLT is too + far away, in which case a long branch stub should be inserted. */ 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_ABS32_NOI && r_type != R_ARM_REL32_NOI + && r_type != R_ARM_CALL + && r_type != R_ARM_JUMP24 + && r_type != R_ARM_PLT32) && h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1) @@ -4622,6 +6861,9 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, run time. */ if ((info->shared || globals->root.is_relocatable_executable) && (input_section->flags & SEC_ALLOC) + && !(elf32_arm_hash_table (info)->vxworks_p + && strcmp (input_section->output_section->name, + ".tls_vars") == 0) && ((r_type != R_ARM_REL32 && r_type != R_ARM_REL32_NOI) || !SYMBOL_CALLS_LOCAL (info, h)) && (h == NULL @@ -4641,19 +6883,11 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, if (sreloc == NULL) { - const char * name; + sreloc = _bfd_elf_get_dynamic_reloc_section (input_bfd, input_section, + ! globals->use_rel); - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + if (sreloc == NULL) return bfd_reloc_notsupported; - - BFD_ASSERT (reloc_section_p (globals, name, input_section)); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = FALSE; @@ -4753,8 +6987,12 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, case R_ARM_XPC25: /* Arm BLX instruction. */ case R_ARM_CALL: case R_ARM_JUMP24: - case R_ARM_PC24: /* Arm B/BL instruction */ + case R_ARM_PC24: /* Arm B/BL instruction. */ case R_ARM_PLT32: + { + bfd_signed_vma branch_offset; + struct elf32_arm_stub_hash_entry *stub_entry = NULL; + if (r_type == R_ARM_XPC25) { /* Check for Arm calling Arm function. */ @@ -4766,7 +7004,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, input_bfd, h ? h->root.root.string : "(local)"); } - else if (r_type != R_ARM_CALL || !globals->use_blx) + else if (r_type == R_ARM_PC24) { /* Check for Arm calling Thumb function. */ if (sym_flags == STT_ARM_TFUNC) @@ -4782,6 +7020,53 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, } } + /* Check if a stub has to be inserted because the + destination is too far or we are changing mode. */ + if ( r_type == R_ARM_CALL + || r_type == R_ARM_JUMP24 + || r_type == R_ARM_PLT32) + { + bfd_vma from; + + /* If the call goes through a PLT entry, make sure to + check distance to the right destination address. */ + if (h != NULL && splt != NULL && h->plt.offset != (bfd_vma) -1) + { + value = (splt->output_section->vma + + splt->output_offset + + h->plt.offset); + *unresolved_reloc_p = FALSE; + /* The PLT entry is in ARM mode, regardless of the + target function. */ + sym_flags = STT_FUNC; + } + + from = (input_section->output_section->vma + + input_section->output_offset + + rel->r_offset); + branch_offset = (bfd_signed_vma)(value - from); + + if (branch_offset > ARM_MAX_FWD_BRANCH_OFFSET + || branch_offset < ARM_MAX_BWD_BRANCH_OFFSET + || ((sym_flags == STT_ARM_TFUNC) + && (((r_type == R_ARM_CALL) && !globals->use_blx) + || (r_type == R_ARM_JUMP24) + || (r_type == R_ARM_PLT32) )) + ) + { + /* The target is out of reach, so redirect the + branch to the local stub for this function. */ + + stub_entry = elf32_arm_get_stub_entry (input_section, + sym_sec, h, + rel, globals); + if (stub_entry != NULL) + value = (stub_entry->stub_offset + + stub_entry->stub_sec->output_offset + + stub_entry->stub_sec->output_section->vma); + } + } + /* The ARM ELF ABI says that this reloc is computed as: S - P + A where: S is the address of the symbol in the relocation. @@ -4814,11 +7099,20 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, signed_addend >>= howto->rightshift; /* 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) + the next instruction unless a PLT entry will be created. + Do the same for local undefined symbols. + The jump to the next instruction is optimized as a NOP depending + on the architecture. */ + if (h ? (h->root.type == bfd_link_hash_undefweak + && !(splt != NULL && h->plt.offset != (bfd_vma) -1)) + : bfd_is_und_section (sym_sec)) { - value = (bfd_get_32 (input_bfd, hit_data) & 0xf0000000) - | 0x0affffff; + value = (bfd_get_32 (input_bfd, hit_data) & 0xf0000000); + + if (arch_has_arm_nop (globals)) + value |= 0x0320f000; + else + value |= 0x01a00000; /* Using pre-UAL nop: mov r0, r0. */ } else { @@ -4832,18 +7126,21 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, 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) + { + if (addend) + value |= (1 << 24); + else + value &= ~(bfd_vma)(1 << 24); + } + + /* Select the correct instruction (BL or BLX). */ + /* Only if we are not handling a BL to a stub. In this + case, mode switching is performed by the stub. */ + if (sym_flags == STT_ARM_TFUNC && !stub_entry) value |= (1 << 28); else { @@ -4852,6 +7149,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, } } } + } break; case R_ARM_ABS32: @@ -4884,7 +7182,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, value += signed_addend; if (! h || h->root.type != bfd_link_hash_undefweak) { - /* Check for overflow */ + /* Check for overflow. */ if ((value ^ (value >> 1)) & (1 << 30)) return bfd_reloc_overflow; } @@ -4974,6 +7272,40 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, return bfd_reloc_ok; } + case R_ARM_THM_PC8: + /* PR 10073: This reloc is not generated by the GNU toolchain, + but it is supported for compatibility with third party libraries + generated by other compilers, specifically the ARM/IAR. */ + { + bfd_vma insn; + bfd_signed_vma relocation; + + insn = bfd_get_16 (input_bfd, hit_data); + + if (globals->use_rel) + addend = (insn & 0x00ff) << 2; + + relocation = value + addend; + relocation -= (input_section->output_section->vma + + input_section->output_offset + + rel->r_offset); + + value = abs (relocation); + + /* We do not check for overflow of this reloc. Although strictly + speaking this is incorrect, it appears to be necessary in order + to work with IAR generated relocs. Since GCC and GAS do not + generate R_ARM_THM_PC8 relocs, the lack of a check should not be + a problem for them. */ + value &= 0x3fc; + + insn = (insn & 0xff00) | (value >> 2); + + bfd_put_16 (input_bfd, insn, hit_data); + + return bfd_reloc_ok; + } + case R_ARM_THM_PC12: /* Corresponds to: ldr.w reg, [pc, #offset]. */ { @@ -5025,14 +7357,25 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, bfd_vma check; bfd_signed_vma signed_check; int bitsize; - int thumb2 = using_thumb2 (globals); + const 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) + the next instruction unless a PLT entry will be created. + The jump to the next instruction is optimized as a NOP.W for + Thumb-2 enabled architectures. */ + if (h && h->root.type == bfd_link_hash_undefweak + && !(splt != NULL && h->plt.offset != (bfd_vma) -1)) { - bfd_put_16 (input_bfd, 0xe000, hit_data); - bfd_put_16 (input_bfd, 0xbf00, hit_data + 2); + if (arch_has_thumb2_nop (globals)) + { + bfd_put_16 (input_bfd, 0xf3af, hit_data); + bfd_put_16 (input_bfd, 0x8000, hit_data + 2); + } + else + { + bfd_put_16 (input_bfd, 0xe000, hit_data); + bfd_put_16 (input_bfd, 0xbf00, hit_data + 2); + } return bfd_reloc_ok; } @@ -5081,13 +7424,17 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, /* Convert BL to BLX. */ lower_insn = (lower_insn & ~0x1000) | 0x0800; } - 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, - error_message)) - return bfd_reloc_ok; - else - return bfd_reloc_dangerous; + else if (( r_type != R_ARM_THM_CALL) + && (r_type != R_ARM_THM_JUMP24)) + { + 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, + error_message)) + return bfd_reloc_ok; + else + return bfd_reloc_dangerous; + } } else if (sym_flags == STT_ARM_TFUNC && globals->use_blx && r_type == R_ARM_THM_CALL) @@ -5108,13 +7455,63 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, /* If the Thumb BLX instruction is available, convert the BL to a BLX instruction to call the ARM-mode PLT entry. */ lower_insn = (lower_insn & ~0x1000) | 0x0800; + sym_flags = STT_FUNC; } else - /* Target the Thumb stub before the ARM PLT entry. */ - value -= PLT_THUMB_STUB_SIZE; + { + /* Target the Thumb stub before the ARM PLT entry. */ + value -= PLT_THUMB_STUB_SIZE; + sym_flags = STT_ARM_TFUNC; + } *unresolved_reloc_p = FALSE; } + if (r_type == R_ARM_THM_CALL || r_type == R_ARM_THM_JUMP24) + { + /* Check if a stub has to be inserted because the destination + is too far. */ + bfd_vma from; + bfd_signed_vma branch_offset; + struct elf32_arm_stub_hash_entry *stub_entry = NULL; + + from = (input_section->output_section->vma + + input_section->output_offset + + rel->r_offset); + branch_offset = (bfd_signed_vma)(value - from); + + if ((!thumb2 + && (branch_offset > THM_MAX_FWD_BRANCH_OFFSET + || (branch_offset < THM_MAX_BWD_BRANCH_OFFSET))) + || + (thumb2 + && (branch_offset > THM2_MAX_FWD_BRANCH_OFFSET + || (branch_offset < THM2_MAX_BWD_BRANCH_OFFSET))) + || ((sym_flags != STT_ARM_TFUNC) + && (((r_type == R_ARM_THM_CALL) && !globals->use_blx) + || r_type == R_ARM_THM_JUMP24))) + { + /* The target is out of reach or we are changing modes, so + redirect the branch to the local stub for this + function. */ + stub_entry = elf32_arm_get_stub_entry (input_section, + sym_sec, h, + rel, globals); + if (stub_entry != NULL) + value = (stub_entry->stub_offset + + stub_entry->stub_sec->output_offset + + stub_entry->stub_sec->output_section->vma); + + /* If this call becomes a call to Arm, force BLX. */ + if (globals->use_blx && (r_type == R_ARM_THM_CALL)) + { + if ((stub_entry + && !arm_stub_is_thumb (stub_entry->stub_type)) + || (sym_flags != STT_ARM_TFUNC)) + lower_insn = (lower_insn & ~0x1000) | 0x0800; + } + } + } + relocation = value + signed_addend; relocation -= (input_section->output_section->vma @@ -5157,7 +7554,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, upper_insn = (upper_insn & ~(bfd_vma) 0x7ff) | ((relocation >> 12) & 0x3ff) | (reloc_sign << 10); - lower_insn = (lower_insn & ~(bfd_vma) 0x2fff) + lower_insn = (lower_insn & ~(bfd_vma) 0x2fff) | (((!((relocation >> 23) & 1)) ^ reloc_sign) << 13) | (((!((relocation >> 22) & 1)) ^ reloc_sign) << 11) | ((relocation >> 1) & 0x7ff); @@ -5522,7 +7919,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, globals->tls_ldm_got.offset |= 1; } - value = globals->sgot->output_section->vma + globals->sgot->output_offset + off + value = globals->sgot->output_section->vma + globals->sgot->output_offset + off - (input_section->output_section->vma + input_section->output_offset + rel->r_offset); return _bfd_final_link_relocate (howto, input_bfd, input_section, @@ -5680,7 +8077,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, if ((tls_type & GOT_TLS_GD) && r_type != R_ARM_TLS_GD32) off += 8; - value = globals->sgot->output_section->vma + globals->sgot->output_offset + off + value = globals->sgot->output_section->vma + globals->sgot->output_offset + off - (input_section->output_section->vma + input_section->output_offset + rel->r_offset); return _bfd_final_link_relocate (howto, input_bfd, input_section, @@ -5695,29 +8092,43 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, (_("%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object"), input_bfd, input_section, (long) rel->r_offset, howto->name); - return FALSE; + return FALSE; } else value = tpoff (info, value); - + return _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, value, rel->r_addend); case R_ARM_V4BX: if (globals->fix_v4bx) - { - bfd_vma insn = bfd_get_32 (input_bfd, hit_data); + { + bfd_vma insn = bfd_get_32 (input_bfd, hit_data); - /* Ensure that we have a BX instruction. */ - BFD_ASSERT ((insn & 0x0ffffff0) == 0x012fff10); + /* Ensure that we have a BX instruction. */ + BFD_ASSERT ((insn & 0x0ffffff0) == 0x012fff10); - /* Preserve Rm (lowest four bits) and the condition code - (highest four bits). Other bits encode MOV PC,Rm. */ - insn = (insn & 0xf000000f) | 0x01a0f000; + if (globals->fix_v4bx == 2 && (insn & 0xf) != 0xf) + { + /* Branch to veneer. */ + bfd_vma glue_addr; + glue_addr = elf32_arm_bx_glue (info, insn & 0xf); + glue_addr -= input_section->output_section->vma + + input_section->output_offset + + rel->r_offset + 8; + insn = (insn & 0xf0000000) | 0x0a000000 + | ((glue_addr >> 2) & 0x00ffffff); + } + else + { + /* Preserve Rm (lowest four bits) and the condition code + (highest four bits). Other bits encode MOV PC,Rm. */ + insn = (insn & 0xf000000f) | 0x01a0f000; + } - bfd_put_32 (input_bfd, insn, hit_data); - } + bfd_put_32 (input_bfd, insn, hit_data); + } return bfd_reloc_ok; case R_ARM_MOVW_ABS_NC: @@ -5737,7 +8148,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, if (globals->use_rel) { addend = ((insn >> 4) & 0xf000) | (insn & 0xfff); - signed_addend = (addend ^ 0x10000) - 0x10000; + signed_addend = (addend ^ 0x8000) - 0x8000; } value += signed_addend; @@ -5777,7 +8188,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, 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); @@ -5787,7 +8198,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, | ((insn >> 15) & 0x0800) | ((insn >> 4) & 0x0700) | (insn & 0x00ff); - signed_addend = (addend ^ 0x10000) - 0x10000; + signed_addend = (addend ^ 0x8000) - 0x8000; } value += signed_addend; @@ -5863,7 +8274,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, break; default: - abort(); + abort (); } /* If REL, extract the addend from the insn. If RELA, it will @@ -5896,7 +8307,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, (_("%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; + return bfd_reloc_overflow; } signed_addend *= negative; @@ -5991,7 +8402,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, break; default: - abort(); + abort (); } /* If REL, extract the addend from the insn. If RELA, it will @@ -6074,7 +8485,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, break; default: - abort(); + abort (); } /* If REL, extract the addend from the insn. If RELA, it will @@ -6157,7 +8568,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto, break; default: - abort(); + abort (); } /* If REL, extract the addend from the insn. If RELA, it will @@ -6298,6 +8709,7 @@ arm_add_to_rel (bfd * abfd, || (R_TYPE) == R_ARM_TLS_IE32) /* Relocate an ARM ELF section. */ + static bfd_boolean elf32_arm_relocate_section (bfd * output_bfd, struct bfd_link_info * info, @@ -6317,7 +8729,7 @@ elf32_arm_relocate_section (bfd * output_bfd, globals = elf32_arm_hash_table (info); - symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = & elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); rel = relocs; @@ -6357,6 +8769,25 @@ elf32_arm_relocate_section (bfd * output_bfd, sym = local_syms + r_symndx; sym_type = ELF32_ST_TYPE (sym->st_info); sec = local_sections[r_symndx]; + + /* An object file might have a reference to a local + undefined symbol. This is a daft object file, but we + should at least do something about it. V4BX & NONE + relocations do not use the symbol and are explicitly + allowed to use the undefined symbol, so allow those. */ + if (r_type != R_ARM_V4BX + && r_type != R_ARM_NONE + && bfd_is_und_section (sec) + && ELF_ST_BIND (sym->st_info) != STB_WEAK) + { + if (!info->callbacks->undefined_symbol + (info, bfd_elf_string_from_elf_section + (input_bfd, symtab_hdr->sh_link, sym->st_name), + input_bfd, input_section, + rel->r_offset, TRUE)) + return FALSE; + } + if (globals->use_rel) { relocation = (sec->output_section->vma @@ -6369,34 +8800,85 @@ elf32_arm_relocate_section (bfd * output_bfd, asection *msec; bfd_vma addend, value; - if (howto->rightshift) + switch (r_type) { - (*_bfd_error_handler) - (_("%B(%A+0x%lx): %s relocation against SEC_MERGE section"), - input_bfd, input_section, - (long) rel->r_offset, howto->name); - return FALSE; - } + case R_ARM_MOVW_ABS_NC: + case R_ARM_MOVT_ABS: + value = bfd_get_32 (input_bfd, contents + rel->r_offset); + addend = ((value & 0xf0000) >> 4) | (value & 0xfff); + addend = (addend ^ 0x8000) - 0x8000; + break; - value = bfd_get_32 (input_bfd, contents + rel->r_offset); + case R_ARM_THM_MOVW_ABS_NC: + case R_ARM_THM_MOVT_ABS: + value = bfd_get_16 (input_bfd, contents + rel->r_offset) + << 16; + value |= bfd_get_16 (input_bfd, + contents + rel->r_offset + 2); + addend = ((value & 0xf7000) >> 4) | (value & 0xff) + | ((value & 0x04000000) >> 15); + addend = (addend ^ 0x8000) - 0x8000; + break; - /* Get the (signed) value from the instruction. */ - addend = value & howto->src_mask; - if (addend & ((howto->src_mask + 1) >> 1)) - { - bfd_signed_vma mask; + default: + if (howto->rightshift + || (howto->src_mask & (howto->src_mask + 1))) + { + (*_bfd_error_handler) + (_("%B(%A+0x%lx): %s relocation against SEC_MERGE section"), + input_bfd, input_section, + (long) rel->r_offset, howto->name); + return FALSE; + } + + 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; + mask = -1; + mask &= ~ howto->src_mask; + addend |= mask; + } + break; } + 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); + + /* Cases here must match those in the preceeding + switch statement. */ + switch (r_type) + { + case R_ARM_MOVW_ABS_NC: + case R_ARM_MOVT_ABS: + value = (value & 0xfff0f000) | ((addend & 0xf000) << 4) + | (addend & 0xfff); + bfd_put_32 (input_bfd, value, contents + rel->r_offset); + break; + + case R_ARM_THM_MOVW_ABS_NC: + case R_ARM_THM_MOVT_ABS: + value = (value & 0xfbf08f00) | ((addend & 0xf700) << 4) + | (addend & 0xff) | ((addend & 0x0800) << 15); + bfd_put_16 (input_bfd, value >> 16, + contents + rel->r_offset); + bfd_put_16 (input_bfd, value, + contents + rel->r_offset + 2); + break; + + default: + value = (value & ~ howto->dst_mask) + | (addend & howto->dst_mask); + bfd_put_32 (input_bfd, value, contents + rel->r_offset); + break; + } } } else @@ -6494,55 +8976,356 @@ elf32_arm_relocate_section (bfd * output_bfd, return FALSE; } - if (r != bfd_reloc_ok) - { - 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.type != bfd_link_hash_undefined) - && (!((*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; + if (r != bfd_reloc_ok) + { + 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.type != bfd_link_hash_undefined) + && (!((*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: + error_message = _("out of range"); + goto common_error; + + case bfd_reloc_notsupported: + error_message = _("unsupported relocation"); + goto common_error; + + case bfd_reloc_dangerous: + /* error_message should already be set. */ + goto common_error; + + default: + error_message = _("unknown error"); + /* Fall through. */ + + common_error: + BFD_ASSERT (error_message != NULL); + if (!((*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, + rel->r_offset))) + return FALSE; + break; + } + } + } + + return TRUE; +} + +/* Add a new unwind edit to the list described by HEAD, TAIL. If INDEX is zero, + adds the edit to the start of the list. (The list must be built in order of + ascending INDEX: the function's callers are primarily responsible for + maintaining that condition). */ + +static void +add_unwind_table_edit (arm_unwind_table_edit **head, + arm_unwind_table_edit **tail, + arm_unwind_edit_type type, + asection *linked_section, + unsigned int index) +{ + arm_unwind_table_edit *new_edit = xmalloc (sizeof (arm_unwind_table_edit)); + + new_edit->type = type; + new_edit->linked_section = linked_section; + new_edit->index = index; + + if (index > 0) + { + new_edit->next = NULL; + + if (*tail) + (*tail)->next = new_edit; + + (*tail) = new_edit; + + if (!*head) + (*head) = new_edit; + } + else + { + new_edit->next = *head; + + if (!*tail) + *tail = new_edit; + + *head = new_edit; + } +} + +static _arm_elf_section_data *get_arm_elf_section_data (asection *); + +/* Increase the size of EXIDX_SEC by ADJUST bytes. ADJUST mau be negative. */ +static void +adjust_exidx_size(asection *exidx_sec, int adjust) +{ + asection *out_sec; + + if (!exidx_sec->rawsize) + exidx_sec->rawsize = exidx_sec->size; + + bfd_set_section_size (exidx_sec->owner, exidx_sec, exidx_sec->size + adjust); + out_sec = exidx_sec->output_section; + /* Adjust size of output section. */ + bfd_set_section_size (out_sec->owner, out_sec, out_sec->size +adjust); +} + +/* Insert an EXIDX_CANTUNWIND marker at the end of a section. */ +static void +insert_cantunwind_after(asection *text_sec, asection *exidx_sec) +{ + struct _arm_elf_section_data *exidx_arm_data; + + exidx_arm_data = get_arm_elf_section_data (exidx_sec); + add_unwind_table_edit ( + &exidx_arm_data->u.exidx.unwind_edit_list, + &exidx_arm_data->u.exidx.unwind_edit_tail, + INSERT_EXIDX_CANTUNWIND_AT_END, text_sec, UINT_MAX); + + adjust_exidx_size(exidx_sec, 8); +} + +/* Scan .ARM.exidx tables, and create a list describing edits which should be + made to those tables, such that: + + 1. Regions without unwind data are marked with EXIDX_CANTUNWIND entries. + 2. Duplicate entries are merged together (EXIDX_CANTUNWIND, or unwind + codes which have been inlined into the index). + + The edits are applied when the tables are written + (in elf32_arm_write_section). +*/ + +bfd_boolean +elf32_arm_fix_exidx_coverage (asection **text_section_order, + unsigned int num_text_sections, + struct bfd_link_info *info) +{ + bfd *inp; + unsigned int last_second_word = 0, i; + asection *last_exidx_sec = NULL; + asection *last_text_sec = NULL; + int last_unwind_type = -1; + + /* Walk over all EXIDX sections, and create backlinks from the corrsponding + text sections. */ + for (inp = info->input_bfds; inp != NULL; inp = inp->link_next) + { + asection *sec; + + for (sec = inp->sections; sec != NULL; sec = sec->next) + { + struct bfd_elf_section_data *elf_sec = elf_section_data (sec); + Elf_Internal_Shdr *hdr = &elf_sec->this_hdr; + + if (!hdr || hdr->sh_type != SHT_ARM_EXIDX) + continue; + + if (elf_sec->linked_to) + { + Elf_Internal_Shdr *linked_hdr + = &elf_section_data (elf_sec->linked_to)->this_hdr; + struct _arm_elf_section_data *linked_sec_arm_data + = get_arm_elf_section_data (linked_hdr->bfd_section); + + if (linked_sec_arm_data == NULL) + continue; + + /* Link this .ARM.exidx section back from the text section it + describes. */ + linked_sec_arm_data->u.text.arm_exidx_sec = sec; + } + } + } + + /* Walk all text sections in order of increasing VMA. Eilminate duplicate + index table entries (EXIDX_CANTUNWIND and inlined unwind opcodes), + and add EXIDX_CANTUNWIND entries for sections with no unwind table data. + */ + + for (i = 0; i < num_text_sections; i++) + { + asection *sec = text_section_order[i]; + asection *exidx_sec; + struct _arm_elf_section_data *arm_data = get_arm_elf_section_data (sec); + struct _arm_elf_section_data *exidx_arm_data; + bfd_byte *contents = NULL; + int deleted_exidx_bytes = 0; + bfd_vma j; + arm_unwind_table_edit *unwind_edit_head = NULL; + arm_unwind_table_edit *unwind_edit_tail = NULL; + Elf_Internal_Shdr *hdr; + bfd *ibfd; + + if (arm_data == NULL) + continue; + + exidx_sec = arm_data->u.text.arm_exidx_sec; + if (exidx_sec == NULL) + { + /* Section has no unwind data. */ + if (last_unwind_type == 0 || !last_exidx_sec) + continue; + + /* Ignore zero sized sections. */ + if (sec->size == 0) + continue; + + insert_cantunwind_after(last_text_sec, last_exidx_sec); + last_unwind_type = 0; + continue; + } + + /* Skip /DISCARD/ sections. */ + if (bfd_is_abs_section (exidx_sec->output_section)) + continue; + + hdr = &elf_section_data (exidx_sec)->this_hdr; + if (hdr->sh_type != SHT_ARM_EXIDX) + continue; + + exidx_arm_data = get_arm_elf_section_data (exidx_sec); + if (exidx_arm_data == NULL) + continue; + + ibfd = exidx_sec->owner; + + if (hdr->contents != NULL) + contents = hdr->contents; + else if (! bfd_malloc_and_get_section (ibfd, exidx_sec, &contents)) + /* An error? */ + continue; + + for (j = 0; j < hdr->sh_size; j += 8) + { + unsigned int second_word = bfd_get_32 (ibfd, contents + j + 4); + int unwind_type; + int elide = 0; + + /* An EXIDX_CANTUNWIND entry. */ + if (second_word == 1) + { + if (last_unwind_type == 0) + elide = 1; + unwind_type = 0; + } + /* Inlined unwinding data. Merge if equal to previous. */ + else if ((second_word & 0x80000000) != 0) + { + if (last_second_word == second_word && last_unwind_type == 1) + elide = 1; + unwind_type = 1; + last_second_word = second_word; + } + /* Normal table entry. In theory we could merge these too, + but duplicate entries are likely to be much less common. */ + else + unwind_type = 2; + + if (elide) + { + add_unwind_table_edit (&unwind_edit_head, &unwind_edit_tail, + DELETE_EXIDX_ENTRY, NULL, j / 8); + + deleted_exidx_bytes += 8; + } + + last_unwind_type = unwind_type; + } + + /* Free contents if we allocated it ourselves. */ + if (contents != hdr->contents) + free (contents); + + /* Record edits to be applied later (in elf32_arm_write_section). */ + exidx_arm_data->u.exidx.unwind_edit_list = unwind_edit_head; + exidx_arm_data->u.exidx.unwind_edit_tail = unwind_edit_tail; + + if (deleted_exidx_bytes > 0) + adjust_exidx_size(exidx_sec, -deleted_exidx_bytes); + + last_exidx_sec = exidx_sec; + last_text_sec = sec; + } + + /* Add terminating CANTUNWIND entry. */ + if (last_exidx_sec && last_unwind_type != 0) + insert_cantunwind_after(last_text_sec, last_exidx_sec); + + return TRUE; +} + +static bfd_boolean +elf32_arm_output_glue_section (struct bfd_link_info *info, bfd *obfd, + bfd *ibfd, const char *name) +{ + asection *sec, *osec; + + sec = bfd_get_section_by_name (ibfd, name); + if (sec == NULL || (sec->flags & SEC_EXCLUDE) != 0) + return TRUE; - case bfd_reloc_undefined: - if (!((*info->callbacks->undefined_symbol) - (info, name, input_bfd, input_section, - rel->r_offset, TRUE))) - return FALSE; - break; + osec = sec->output_section; + if (elf32_arm_write_section (obfd, info, sec, sec->contents)) + return TRUE; - case bfd_reloc_outofrange: - error_message = _("out of range"); - goto common_error; + if (! bfd_set_section_contents (obfd, osec, sec->contents, + sec->output_offset, sec->size)) + return FALSE; - case bfd_reloc_notsupported: - error_message = _("unsupported relocation"); - goto common_error; + return TRUE; +} - case bfd_reloc_dangerous: - /* error_message should already be set. */ - goto common_error; +static bfd_boolean +elf32_arm_final_link (bfd *abfd, struct bfd_link_info *info) +{ + struct elf32_arm_link_hash_table *globals = elf32_arm_hash_table (info); - default: - error_message = _("unknown error"); - /* fall through */ + /* Invoke the regular ELF backend linker to do all the work. */ + if (!bfd_elf_final_link (abfd, info)) + return FALSE; - common_error: - BFD_ASSERT (error_message != NULL); - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; - break; - } - } + /* Write out any glue sections now that we have created all the + stubs. */ + if (globals->bfd_of_glue_owner != NULL) + { + if (! elf32_arm_output_glue_section (info, abfd, + globals->bfd_of_glue_owner, + ARM2THUMB_GLUE_SECTION_NAME)) + return FALSE; + + if (! elf32_arm_output_glue_section (info, abfd, + globals->bfd_of_glue_owner, + THUMB2ARM_GLUE_SECTION_NAME)) + return FALSE; + + if (! elf32_arm_output_glue_section (info, abfd, + globals->bfd_of_glue_owner, + VFP11_ERRATUM_VENEER_SECTION_NAME)) + return FALSE; + + if (! elf32_arm_output_glue_section (info, abfd, + globals->bfd_of_glue_owner, + ARM_BX_GLUE_SECTION_NAME)) + return FALSE; } return TRUE; @@ -6606,8 +9389,7 @@ elf32_arm_copy_private_bfd_data (bfd *ibfd, bfd *obfd) flagword in_flags; flagword out_flags; - if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) + if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd)) return TRUE; in_flags = elf_elfheader (ibfd)->e_flags; @@ -6684,31 +9466,267 @@ enum /* 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; + return ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_STR_VAL; + else if (tag == Tag_nodefaults) + return ATTR_TYPE_FLAG_INT_VAL | ATTR_TYPE_FLAG_NO_DEFAULT; + else if (tag == Tag_CPU_raw_name || tag == Tag_CPU_name) + return ATTR_TYPE_FLAG_STR_VAL; else if (tag < 32) - return 1; + return ATTR_TYPE_FLAG_INT_VAL; + else + return (tag & 1) != 0 ? ATTR_TYPE_FLAG_STR_VAL : ATTR_TYPE_FLAG_INT_VAL; +} + +/* The ABI defines that Tag_conformance should be emitted first, and that + Tag_nodefaults should be second (if either is defined). This sets those + two positions, and bumps up the position of all the remaining tags to + compensate. */ +static int +elf32_arm_obj_attrs_order (int num) +{ + if (num == 4) + return Tag_conformance; + if (num == 5) + return Tag_nodefaults; + if ((num - 2) < Tag_nodefaults) + return num - 2; + if ((num - 1) < Tag_conformance) + return num - 1; + return num; +} + +/* Read the architecture from the Tag_also_compatible_with attribute, if any. + Returns -1 if no architecture could be read. */ + +static int +get_secondary_compatible_arch (bfd *abfd) +{ + obj_attribute *attr = + &elf_known_obj_attributes_proc (abfd)[Tag_also_compatible_with]; + + /* Note: the tag and its argument below are uleb128 values, though + currently-defined values fit in one byte for each. */ + if (attr->s + && attr->s[0] == Tag_CPU_arch + && (attr->s[1] & 128) != 128 + && attr->s[2] == 0) + return attr->s[1]; + + /* This tag is "safely ignorable", so don't complain if it looks funny. */ + return -1; +} + +/* Set, or unset, the architecture of the Tag_also_compatible_with attribute. + The tag is removed if ARCH is -1. */ + +static void +set_secondary_compatible_arch (bfd *abfd, int arch) +{ + obj_attribute *attr = + &elf_known_obj_attributes_proc (abfd)[Tag_also_compatible_with]; + + if (arch == -1) + { + attr->s = NULL; + return; + } + + /* Note: the tag and its argument below are uleb128 values, though + currently-defined values fit in one byte for each. */ + if (!attr->s) + attr->s = bfd_alloc (abfd, 3); + attr->s[0] = Tag_CPU_arch; + attr->s[1] = arch; + attr->s[2] = '\0'; +} + +/* Combine two values for Tag_CPU_arch, taking secondary compatibility tags + into account. */ + +static int +tag_cpu_arch_combine (bfd *ibfd, int oldtag, int *secondary_compat_out, + int newtag, int secondary_compat) +{ +#define T(X) TAG_CPU_ARCH_##X + int tagl, tagh, result; + const int v6t2[] = + { + T(V6T2), /* PRE_V4. */ + T(V6T2), /* V4. */ + T(V6T2), /* V4T. */ + T(V6T2), /* V5T. */ + T(V6T2), /* V5TE. */ + T(V6T2), /* V5TEJ. */ + T(V6T2), /* V6. */ + T(V7), /* V6KZ. */ + T(V6T2) /* V6T2. */ + }; + const int v6k[] = + { + T(V6K), /* PRE_V4. */ + T(V6K), /* V4. */ + T(V6K), /* V4T. */ + T(V6K), /* V5T. */ + T(V6K), /* V5TE. */ + T(V6K), /* V5TEJ. */ + T(V6K), /* V6. */ + T(V6KZ), /* V6KZ. */ + T(V7), /* V6T2. */ + T(V6K) /* V6K. */ + }; + const int v7[] = + { + T(V7), /* PRE_V4. */ + T(V7), /* V4. */ + T(V7), /* V4T. */ + T(V7), /* V5T. */ + T(V7), /* V5TE. */ + T(V7), /* V5TEJ. */ + T(V7), /* V6. */ + T(V7), /* V6KZ. */ + T(V7), /* V6T2. */ + T(V7), /* V6K. */ + T(V7) /* V7. */ + }; + const int v6_m[] = + { + -1, /* PRE_V4. */ + -1, /* V4. */ + T(V6K), /* V4T. */ + T(V6K), /* V5T. */ + T(V6K), /* V5TE. */ + T(V6K), /* V5TEJ. */ + T(V6K), /* V6. */ + T(V6KZ), /* V6KZ. */ + T(V7), /* V6T2. */ + T(V6K), /* V6K. */ + T(V7), /* V7. */ + T(V6_M) /* V6_M. */ + }; + const int v6s_m[] = + { + -1, /* PRE_V4. */ + -1, /* V4. */ + T(V6K), /* V4T. */ + T(V6K), /* V5T. */ + T(V6K), /* V5TE. */ + T(V6K), /* V5TEJ. */ + T(V6K), /* V6. */ + T(V6KZ), /* V6KZ. */ + T(V7), /* V6T2. */ + T(V6K), /* V6K. */ + T(V7), /* V7. */ + T(V6S_M), /* V6_M. */ + T(V6S_M) /* V6S_M. */ + }; + const int v4t_plus_v6_m[] = + { + -1, /* PRE_V4. */ + -1, /* V4. */ + T(V4T), /* V4T. */ + T(V5T), /* V5T. */ + T(V5TE), /* V5TE. */ + T(V5TEJ), /* V5TEJ. */ + T(V6), /* V6. */ + T(V6KZ), /* V6KZ. */ + T(V6T2), /* V6T2. */ + T(V6K), /* V6K. */ + T(V7), /* V7. */ + T(V6_M), /* V6_M. */ + T(V6S_M), /* V6S_M. */ + T(V4T_PLUS_V6_M) /* V4T plus V6_M. */ + }; + const int *comb[] = + { + v6t2, + v6k, + v7, + v6_m, + v6s_m, + /* Pseudo-architecture. */ + v4t_plus_v6_m + }; + + /* Check we've not got a higher architecture than we know about. */ + + if (oldtag >= MAX_TAG_CPU_ARCH || newtag >= MAX_TAG_CPU_ARCH) + { + _bfd_error_handler (_("error: %B: Unknown CPU architecture"), ibfd); + return -1; + } + + /* Override old tag if we have a Tag_also_compatible_with on the output. */ + + if ((oldtag == T(V6_M) && *secondary_compat_out == T(V4T)) + || (oldtag == T(V4T) && *secondary_compat_out == T(V6_M))) + oldtag = T(V4T_PLUS_V6_M); + + /* And override the new tag if we have a Tag_also_compatible_with on the + input. */ + + if ((newtag == T(V6_M) && secondary_compat == T(V4T)) + || (newtag == T(V4T) && secondary_compat == T(V6_M))) + newtag = T(V4T_PLUS_V6_M); + + tagl = (oldtag < newtag) ? oldtag : newtag; + result = tagh = (oldtag > newtag) ? oldtag : newtag; + + /* Architectures before V6KZ add features monotonically. */ + if (tagh <= TAG_CPU_ARCH_V6KZ) + return result; + + result = comb[tagh - T(V6T2)][tagl]; + + /* Use Tag_CPU_arch == V4T and Tag_also_compatible_with (Tag_CPU_arch V6_M) + as the canonical version. */ + if (result == T(V4T_PLUS_V6_M)) + { + result = T(V4T); + *secondary_compat_out = T(V6_M); + } else - return (tag & 1) != 0 ? 2 : 1; + *secondary_compat_out = -1; + + if (result == -1) + { + _bfd_error_handler (_("error: %B: Conflicting CPU architectures %d/%d"), + ibfd, oldtag, newtag); + return -1; + } + + return result; +#undef T } /* 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) { obj_attribute *in_attr; obj_attribute *out_attr; obj_attribute_list *in_list; + obj_attribute_list *out_list; + obj_attribute_list **out_listp; /* Some tags have 0 = don't care, 1 = strong requirement, 2 = weak requirement. */ - static const int order_312[3] = {3, 1, 2}; + static const int order_021[3] = {0, 2, 1}; + /* For use with Tag_VFP_arch. */ + static const int order_01243[5] = {0, 1, 2, 4, 3}; int i; + bfd_boolean result = TRUE; + + /* Skip the linker stubs file. This preserves previous behavior + of accepting unknown attributes in the first input file - but + is that a bug? */ + if (ibfd->flags & BFD_LINKER_CREATED) + return TRUE; if (!elf_known_obj_attributes_proc (obfd)[0].i) { @@ -6727,15 +9745,15 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *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) { - /* Ignore mismatches if teh object doesn't use floating point. */ + /* Ignore mismatches if the object doesn't use floating point. */ if (out_attr[Tag_ABI_FP_number_model].i == 0) out_attr[Tag_ABI_VFP_args].i = in_attr[Tag_ABI_VFP_args].i; else if (in_attr[Tag_ABI_FP_number_model].i != 0) { _bfd_error_handler - (_("ERROR: %B uses VFP register arguments, %B does not"), + (_("error: %B uses VFP register arguments, %B does not"), ibfd, obfd); - return FALSE; + result = FALSE; } } @@ -6746,12 +9764,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) { case Tag_CPU_raw_name: case Tag_CPU_name: - /* 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); + /* These are merged after Tag_CPU_arch. */ break; case Tag_ABI_optimization_goals: @@ -6760,34 +9773,148 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) break; case Tag_CPU_arch: + { + int secondary_compat = -1, secondary_compat_out = -1; + unsigned int saved_out_attr = out_attr[i].i; + static const char *name_table[] = { + /* These aren't real CPU names, but we can't guess + that from the architecture version alone. */ + "Pre v4", + "ARM v4", + "ARM v4T", + "ARM v5T", + "ARM v5TE", + "ARM v5TEJ", + "ARM v6", + "ARM v6KZ", + "ARM v6T2", + "ARM v6K", + "ARM v7", + "ARM v6-M", + "ARM v6S-M" + }; + + /* Merge Tag_CPU_arch and Tag_also_compatible_with. */ + secondary_compat = get_secondary_compatible_arch (ibfd); + secondary_compat_out = get_secondary_compatible_arch (obfd); + out_attr[i].i = tag_cpu_arch_combine (ibfd, out_attr[i].i, + &secondary_compat_out, + in_attr[i].i, + secondary_compat); + set_secondary_compatible_arch (obfd, secondary_compat_out); + + /* Merge Tag_CPU_name and Tag_CPU_raw_name. */ + if (out_attr[i].i == saved_out_attr) + ; /* Leave the names alone. */ + else if (out_attr[i].i == in_attr[i].i) + { + /* The output architecture has been changed to match the + input architecture. Use the input names. */ + out_attr[Tag_CPU_name].s = in_attr[Tag_CPU_name].s + ? _bfd_elf_attr_strdup (obfd, in_attr[Tag_CPU_name].s) + : NULL; + out_attr[Tag_CPU_raw_name].s = in_attr[Tag_CPU_raw_name].s + ? _bfd_elf_attr_strdup (obfd, in_attr[Tag_CPU_raw_name].s) + : NULL; + } + else + { + out_attr[Tag_CPU_name].s = NULL; + out_attr[Tag_CPU_raw_name].s = NULL; + } + + /* If we still don't have a value for Tag_CPU_name, + make one up now. Tag_CPU_raw_name remains blank. */ + if (out_attr[Tag_CPU_name].s == NULL + && out_attr[i].i < ARRAY_SIZE (name_table)) + out_attr[Tag_CPU_name].s = + _bfd_elf_attr_strdup (obfd, name_table[out_attr[i].i]); + } + break; + case Tag_ARM_ISA_use: case Tag_THUMB_ISA_use: - case Tag_VFP_arch: case Tag_WMMX_arch: - case Tag_NEON_arch: - /* ??? Do NEON and WMMX conflict? */ + case Tag_Advanced_SIMD_arch: + /* ??? Do Advanced_SIMD (NEON) and WMMX conflict? */ case Tag_ABI_FP_rounding: - case Tag_ABI_FP_denormal: case Tag_ABI_FP_exceptions: case Tag_ABI_FP_user_exceptions: case Tag_ABI_FP_number_model: - case Tag_ABI_align8_preserved: - case Tag_ABI_HardFP_use: + case Tag_VFP_HP_extension: + case Tag_CPU_unaligned_access: + case Tag_T2EE_use: + case Tag_Virtualization_use: + case Tag_MPextension_use: /* Use the largest value specified. */ if (in_attr[i].i > out_attr[i].i) out_attr[i].i = in_attr[i].i; break; - case Tag_CPU_arch_profile: - /* Warn if conflicting architecture profiles used. */ - if (out_attr[i].i && in_attr[i].i && in_attr[i].i != out_attr[i].i) + case Tag_ABI_align8_preserved: + case Tag_ABI_PCS_RO_data: + /* Use the smallest value specified. */ + if (in_attr[i].i < out_attr[i].i) + out_attr[i].i = in_attr[i].i; + break; + + case Tag_ABI_align8_needed: + if ((in_attr[i].i > 0 || out_attr[i].i > 0) + && (in_attr[Tag_ABI_align8_preserved].i == 0 + || out_attr[Tag_ABI_align8_preserved].i == 0)) { + /* This error message should be enabled once all non-conformant + binaries in the toolchain have had the attributes set + properly. _bfd_error_handler - (_("ERROR: %B: Conflicting architecture profiles %c/%c"), - ibfd, in_attr[i].i, out_attr[i].i); - return FALSE; + (_("error: %B: 8-byte data alignment conflicts with %B"), + obfd, ibfd); + result = FALSE; */ + } + /* Fall through. */ + case Tag_ABI_FP_denormal: + case Tag_ABI_PCS_GOT_use: + /* Use the "greatest" from the sequence 0, 2, 1, or the largest + value if greater than 2 (for future-proofing). */ + if ((in_attr[i].i > 2 && in_attr[i].i > out_attr[i].i) + || (in_attr[i].i <= 2 && out_attr[i].i <= 2 + && order_021[in_attr[i].i] > order_021[out_attr[i].i])) + out_attr[i].i = in_attr[i].i; + break; + + + case Tag_CPU_arch_profile: + if (out_attr[i].i != in_attr[i].i) + { + /* 0 will merge with anything. + 'A' and 'S' merge to 'A'. + 'R' and 'S' merge to 'R'. + 'M' and 'A|R|S' is an error. */ + if (out_attr[i].i == 0 + || (out_attr[i].i == 'S' + && (in_attr[i].i == 'A' || in_attr[i].i == 'R'))) + out_attr[i].i = in_attr[i].i; + else if (in_attr[i].i == 0 + || (in_attr[i].i == 'S' + && (out_attr[i].i == 'A' || out_attr[i].i == 'R'))) + ; /* Do nothing. */ + else + { + _bfd_error_handler + (_("error: %B: Conflicting architecture profiles %c/%c"), + ibfd, + in_attr[i].i ? in_attr[i].i : '0', + out_attr[i].i ? out_attr[i].i : '0'); + result = FALSE; + } } - if (in_attr[i].i) + break; + case Tag_VFP_arch: + /* Use the "greatest" from the sequence 0, 1, 2, 4, 3, or the + largest value if greater than 4 (for future-proofing). */ + if ((in_attr[i].i > 4 && in_attr[i].i > out_attr[i].i) + || (in_attr[i].i <= 4 && out_attr[i].i <= 4 + && order_01243[in_attr[i].i] > order_01243[out_attr[i].i])) out_attr[i].i = in_attr[i].i; break; case Tag_PCS_config: @@ -6807,8 +9934,8 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) && in_attr[i].i != AEABI_R9_unused) { _bfd_error_handler - (_("ERROR: %B: Conflicting use of R9"), ibfd); - return FALSE; + (_("error: %B: Conflicting use of R9"), ibfd); + result = FALSE; } if (out_attr[i].i == AEABI_R9_unused) out_attr[i].i = in_attr[i].i; @@ -6819,38 +9946,23 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) && out_attr[Tag_ABI_PCS_R9_use].i != AEABI_R9_unused) { _bfd_error_handler - (_("ERROR: %B: SB relative addressing conflicts with use of R9"), + (_("error: %B: SB relative addressing conflicts with use of R9"), ibfd); - return FALSE; + result = FALSE; } /* Use the smallest value specified. */ if (in_attr[i].i < out_attr[i].i) out_attr[i].i = in_attr[i].i; break; - case Tag_ABI_PCS_RO_data: - /* Use the smallest value specified. */ - if (in_attr[i].i < out_attr[i].i) - out_attr[i].i = in_attr[i].i; - break; - case Tag_ABI_PCS_GOT_use: - if (in_attr[i].i > 2 || out_attr[i].i > 2 - || order_312[in_attr[i].i] < order_312[out_attr[i].i]) - out_attr[i].i = in_attr[i].i; - break; case Tag_ABI_PCS_wchar_t: - if (out_attr[i].i && in_attr[i].i && out_attr[i].i != in_attr[i].i) + if (out_attr[i].i && in_attr[i].i && out_attr[i].i != in_attr[i].i + && !elf_arm_tdata (obfd)->no_wchar_size_warning) { _bfd_error_handler - (_("ERROR: %B: Conflicting definitions of wchar_t"), ibfd); - return FALSE; + (_("warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail"), + ibfd, in_attr[i].i, out_attr[i].i); } - if (in_attr[i].i) - out_attr[i].i = in_attr[i].i; - break; - case Tag_ABI_align8_needed: - /* ??? Check against Tag_ABI_align8_preserved. */ - if (in_attr[i].i > 2 || out_attr[i].i > 2 - || order_312[in_attr[i].i] < order_312[out_attr[i].i]) + else if (in_attr[i].i && !out_attr[i].i) out_attr[i].i = in_attr[i].i; break; case Tag_ABI_enum_size: @@ -6865,14 +9977,21 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) } else if (in_attr[i].i != AEABI_enum_forced_wide && out_attr[i].i != in_attr[i].i - && !elf32_arm_tdata (obfd)->no_enum_size_warning) + && !elf_arm_tdata (obfd)->no_enum_size_warning) { - const char *aeabi_enum_names[] = + static const char *aeabi_enum_names[] = { "", "variable-size", "32-bit", "" }; + const char *in_name = + in_attr[i].i < ARRAY_SIZE(aeabi_enum_names) + ? aeabi_enum_names[in_attr[i].i] + : ""; + const char *out_name = + out_attr[i].i < ARRAY_SIZE(aeabi_enum_names) + ? aeabi_enum_names[out_attr[i].i] + : ""; _bfd_error_handler (_("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]); + ibfd, in_name, out_name); } } break; @@ -6883,31 +10002,99 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) if (in_attr[i].i != out_attr[i].i) { _bfd_error_handler - (_("ERROR: %B uses iWMMXt register arguments, %B does not"), + (_("error: %B uses iWMMXt register arguments, %B does not"), ibfd, obfd); - return FALSE; + result = FALSE; } break; - default: /* All known attributes should be explicitly covered. */ - abort (); - } + case Tag_compatibility: + /* Merged in target-independent code. */ + break; + case Tag_ABI_HardFP_use: + /* 1 (SP) and 2 (DP) conflict, so combine to 3 (SP & DP). */ + if ((in_attr[i].i == 1 && out_attr[i].i == 2) + || (in_attr[i].i == 2 && out_attr[i].i == 1)) + out_attr[i].i = 3; + else if (in_attr[i].i > out_attr[i].i) + out_attr[i].i = in_attr[i].i; + break; + case Tag_ABI_FP_16bit_format: + if (in_attr[i].i != 0 && out_attr[i].i != 0) + { + if (in_attr[i].i != out_attr[i].i) + { + _bfd_error_handler + (_("error: fp16 format mismatch between %B and %B"), + ibfd, obfd); + result = FALSE; + } + } + if (in_attr[i].i != 0) + out_attr[i].i = in_attr[i].i; + break; - if (in_attr[i].type && !out_attr[i].type) - switch (in_attr[i].type) + case Tag_nodefaults: + /* This tag is set if it exists, but the value is unused (and is + typically zero). We don't actually need to do anything here - + the merge happens automatically when the type flags are merged + below. */ + break; + case Tag_also_compatible_with: + /* Already done in Tag_CPU_arch. */ + break; + case Tag_conformance: + /* Keep the attribute if it matches. Throw it away otherwise. + No attribute means no claim to conform. */ + if (!in_attr[i].s || !out_attr[i].s + || strcmp (in_attr[i].s, out_attr[i].s) != 0) + out_attr[i].s = NULL; + break; + + default: { - case 1: - if (out_attr[i].i) - out_attr[i].type = 1; - break; + bfd *err_bfd = NULL; - case 2: - if (out_attr[i].s) - out_attr[i].type = 2; - break; + /* The "known_obj_attributes" table does contain some undefined + attributes. Ensure that there are unused. */ + if (out_attr[i].i != 0 || out_attr[i].s != NULL) + err_bfd = obfd; + else if (in_attr[i].i != 0 || in_attr[i].s != NULL) + err_bfd = ibfd; - default: - abort (); + if (err_bfd != NULL) + { + /* Attribute numbers >=64 (mod 128) can be safely ignored. */ + if ((i & 127) < 64) + { + _bfd_error_handler + (_("%B: Unknown mandatory EABI object attribute %d"), + err_bfd, i); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + } + else + { + _bfd_error_handler + (_("Warning: %B: Unknown EABI object attribute %d"), + err_bfd, i); + } + } + + /* Only pass on attributes that match in both inputs. */ + if (in_attr[i].i != out_attr[i].i + || in_attr[i].s != out_attr[i].s + || (in_attr[i].s != NULL && out_attr[i].s != NULL + && strcmp (in_attr[i].s, out_attr[i].s) != 0)) + { + out_attr[i].i = 0; + out_attr[i].s = NULL; + } } + } + + /* If out_attr was copied from in_attr then it won't have a type yet. */ + if (in_attr[i].type && !out_attr[i].type) + out_attr[i].type = in_attr[i].type; } /* Merge Tag_compatibility attributes and any common GNU ones. */ @@ -6915,20 +10102,78 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) /* 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; + out_listp = &elf_other_obj_attributes_proc (obfd); + out_list = *out_listp; - for (; in_list; in_list = in_list->next) + for (; in_list || out_list; ) { - if ((in_list->tag & 128) < 64) + bfd *err_bfd = NULL; + int err_tag = 0; + + /* The tags for each list are in numerical order. */ + /* If the tags are equal, then merge. */ + if (out_list && (!in_list || in_list->tag > out_list->tag)) { - _bfd_error_handler - (_("Warning: %B: Unknown EABI object attribute %d"), - ibfd, in_list->tag); - break; + /* This attribute only exists in obfd. We can't merge, and we don't + know what the tag means, so delete it. */ + err_bfd = obfd; + err_tag = out_list->tag; + *out_listp = out_list->next; + out_list = *out_listp; + } + else if (in_list && (!out_list || in_list->tag < out_list->tag)) + { + /* This attribute only exists in ibfd. We can't merge, and we don't + know what the tag means, so ignore it. */ + err_bfd = ibfd; + err_tag = in_list->tag; + in_list = in_list->next; + } + else /* The tags are equal. */ + { + /* As present, all attributes in the list are unknown, and + therefore can't be merged meaningfully. */ + err_bfd = obfd; + err_tag = out_list->tag; + + /* Only pass on attributes that match in both inputs. */ + if (in_list->attr.i != out_list->attr.i + || in_list->attr.s != out_list->attr.s + || (in_list->attr.s && out_list->attr.s + && strcmp (in_list->attr.s, out_list->attr.s) != 0)) + { + /* No match. Delete the attribute. */ + *out_listp = out_list->next; + out_list = *out_listp; + } + else + { + /* Matched. Keep the attribute and move to the next. */ + out_list = out_list->next; + in_list = in_list->next; + } + } + + if (err_bfd) + { + /* Attribute numbers >=64 (mod 128) can be safely ignored. */ + if ((err_tag & 127) < 64) + { + _bfd_error_handler + (_("%B: Unknown mandatory EABI object attribute %d"), + err_bfd, err_tag); + bfd_set_error (bfd_error_bad_value); + result = FALSE; + } + else + { + _bfd_error_handler + (_("Warning: %B: Unknown EABI object attribute %d"), + err_bfd, err_tag); + } } } - return TRUE; + return result; } @@ -6961,8 +10206,7 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) if (! _bfd_generic_verify_endian_match (ibfd, obfd)) return FALSE; - if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) + if (! is_arm_elf (ibfd) || ! is_arm_elf (obfd)) return TRUE; if (!elf32_arm_merge_eabi_attributes (ibfd, obfd)) @@ -6977,6 +10221,18 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) in_flags = elf_elfheader (ibfd)->e_flags; out_flags = elf_elfheader (obfd)->e_flags; + /* In theory there is no reason why we couldn't handle this. However + in practice it isn't even close to working and there is no real + reason to want it. */ + if (EF_ARM_EABI_VERSION (in_flags) >= EF_ARM_EABI_VER4 + && !(ibfd->flags & DYNAMIC) + && (in_flags & EF_ARM_BE8)) + { + _bfd_error_handler (_("error: %B is already in final BE8 format"), + ibfd); + return FALSE; + } + if (!elf_flags_init (obfd)) { /* If the input is the default architecture and had the default @@ -7048,7 +10304,7 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) EF_ARM_EABI_VERSION (out_flags))) { _bfd_error_handler - (_("ERROR: Source object %B has EABI version %d, but target %B has EABI version %d"), + (_("error: Source object %B has EABI version %d, but target %B has EABI version %d"), ibfd, obfd, (in_flags & EF_ARM_EABIMASK) >> 24, (out_flags & EF_ARM_EABIMASK) >> 24); @@ -7064,7 +10320,7 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) if ((in_flags & EF_ARM_APCS_26) != (out_flags & EF_ARM_APCS_26)) { _bfd_error_handler - (_("ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"), + (_("error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d"), ibfd, obfd, in_flags & EF_ARM_APCS_26 ? 26 : 32, out_flags & EF_ARM_APCS_26 ? 26 : 32); @@ -7075,11 +10331,11 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) { if (in_flags & EF_ARM_APCS_FLOAT) _bfd_error_handler - (_("ERROR: %B passes floats in float registers, whereas %B passes them in integer registers"), + (_("error: %B passes floats in float registers, whereas %B passes them in integer registers"), ibfd, obfd); else _bfd_error_handler - (_("ERROR: %B passes floats in integer registers, whereas %B passes them in float registers"), + (_("error: %B passes floats in integer registers, whereas %B passes them in float registers"), ibfd, obfd); flags_compatible = FALSE; @@ -7089,11 +10345,11 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) { if (in_flags & EF_ARM_VFP_FLOAT) _bfd_error_handler - (_("ERROR: %B uses VFP instructions, whereas %B does not"), + (_("error: %B uses VFP instructions, whereas %B does not"), ibfd, obfd); else _bfd_error_handler - (_("ERROR: %B uses FPA instructions, whereas %B does not"), + (_("error: %B uses FPA instructions, whereas %B does not"), ibfd, obfd); flags_compatible = FALSE; @@ -7103,11 +10359,11 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) { if (in_flags & EF_ARM_MAVERICK_FLOAT) _bfd_error_handler - (_("ERROR: %B uses Maverick instructions, whereas %B does not"), + (_("error: %B uses Maverick instructions, whereas %B does not"), ibfd, obfd); else _bfd_error_handler - (_("ERROR: %B does not use Maverick instructions, whereas %B does"), + (_("error: %B does not use Maverick instructions, whereas %B does"), ibfd, obfd); flags_compatible = FALSE; @@ -7126,11 +10382,11 @@ elf32_arm_merge_private_bfd_data (bfd * ibfd, bfd * obfd) { if (in_flags & EF_ARM_SOFT_FLOAT) _bfd_error_handler - (_("ERROR: %B uses software FP, whereas %B uses hardware FP"), + (_("error: %B uses software FP, whereas %B uses hardware FP"), ibfd, obfd); else _bfd_error_handler - (_("ERROR: %B uses hardware FP, whereas %B uses software FP"), + (_("error: %B uses hardware FP, whereas %B uses software FP"), ibfd, obfd); flags_compatible = FALSE; @@ -7349,15 +10605,18 @@ elf32_arm_gc_sweep_hook (bfd * abfd, const Elf_Internal_Rela *rel, *relend; struct elf32_arm_link_hash_table * globals; + if (info->relocatable) + return TRUE; + globals = elf32_arm_hash_table (info); elf_section_data (sec)->local_dynrel = NULL; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = & elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); - check_use_blx(globals); + check_use_blx (globals); relend = relocs + sec->reloc_count; for (rel = relocs; rel < relend; rel++) @@ -7477,17 +10736,20 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, { 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; bfd *dynobj; asection *sreloc; bfd_vma *local_got_offsets; struct elf32_arm_link_hash_table *htab; + bfd_boolean needs_plt; + unsigned long nsyms; if (info->relocatable) return TRUE; + BFD_ASSERT (is_arm_elf (abfd)); + htab = elf32_arm_hash_table (info); sreloc = NULL; @@ -7503,14 +10765,10 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, dynobj = elf_hash_table (info)->dynobj; local_got_offsets = elf_local_got_offsets (abfd); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = & elf_symtab_hdr (abfd); 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; - + nsyms = NUM_SHDR_ENTRIES (symtab_hdr); + rel_end = relocs + sec->reloc_count; for (rel = relocs; rel < rel_end; rel++) { @@ -7523,14 +10781,18 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, r_type = ELF32_R_TYPE (rel->r_info); r_type = arm_real_reloc_type (htab, r_type); - if (r_symndx >= NUM_SHDR_ENTRIES (symtab_hdr)) + if (r_symndx >= nsyms + /* PR 9934: It is possible to have relocations that do not + refer to symbols, thus it is also possible to have an + object file containing relocations but no symbol table. */ + && (r_symndx > 0 || nsyms > 0)) { (*_bfd_error_handler) (_("%B: bad symbol index: %d"), abfd, - r_symndx); + r_symndx); return FALSE; } - if (r_symndx < symtab_hdr->sh_info) + if (nsyms == 0 || r_symndx < symtab_hdr->sh_info) h = NULL; else { @@ -7573,9 +10835,9 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, if (local_got_refcounts == NULL) { bfd_size_type size; - + size = symtab_hdr->sh_info; - size *= (sizeof (bfd_signed_vma) + sizeof(char)); + size *= (sizeof (bfd_signed_vma) + sizeof (char)); local_got_refcounts = bfd_zalloc (abfd, size); if (local_got_refcounts == NULL) return FALSE; @@ -7603,12 +10865,12 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, elf32_arm_local_got_tls_type (abfd) [r_symndx] = tls_type; } } - /* Fall through */ + /* Fall through. */ case R_ARM_TLS_LDM32: if (r_type == R_ARM_TLS_LDM32) htab->tls_ldm_got.refcount++; - /* Fall through */ + /* Fall through. */ case R_ARM_GOTOFF32: case R_ARM_GOTPC: @@ -7626,28 +10888,45 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, ldr __GOTT_INDEX__ offsets. */ if (!htab->vxworks_p) break; - /* Fall through */ + /* Fall through. */ + + 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_THM_JUMP24: + case R_ARM_THM_JUMP19: + needs_plt = 1; + goto normal_reloc; + + case R_ARM_MOVW_ABS_NC: + case R_ARM_MOVT_ABS: + case R_ARM_THM_MOVW_ABS_NC: + case R_ARM_THM_MOVT_ABS: + if (info->shared) + { + (*_bfd_error_handler) + (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), + abfd, elf32_arm_howto_table_1[r_type].name, + (h) ? h->root.root.string : "a local symbol"); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + /* 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_THM_JUMP24: - case R_ARM_THM_JUMP19: - 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: + needs_plt = 0; + normal_reloc: + /* Should the interworking branches be listed here? */ if (h != NULL) { @@ -7664,11 +10943,7 @@ 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_ABS32 - && r_type != R_ARM_REL32 - && r_type != R_ARM_ABS32_NOI - && r_type != R_ARM_REL32_NOI - && r_type != R_ARM_ABS12) + if (needs_plt) h->needs_plt = 1; /* If we create a PLT entry, this relocation will reference @@ -7710,40 +10985,23 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, /* When creating a shared object, we must copy these reloc types into the output file. We create a reloc section in dynobj and make room for this reloc. */ - if (sreloc == NULL) + if (sreloc == NULL) { - const char * name; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, ! htab->use_rel); - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) + if (sreloc == NULL) return FALSE; - BFD_ASSERT (reloc_section_p (htab, name, sec)); - - sreloc = bfd_get_section_by_name (dynobj, name); - if (sreloc == NULL) + /* BPABI objects never have dynamic relocations mapped. */ + if (htab->symbian_p) { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0 - /* BPABI objects never have dynamic - relocations mapped. */ - && !htab->symbian_p) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } + flagword flags; - elf_section_data (sec)->sreloc = sreloc; + flags = bfd_get_section_flags (dynobj, sreloc); + flags &= ~(SEC_LOAD | SEC_ALLOC); + bfd_set_section_flags (dynobj, sreloc, flags); + } } /* If this is a global symbol, we count the number of @@ -7757,15 +11015,19 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct elf32_arm_relocs_copied **) vpp; } @@ -7801,7 +11063,9 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_ARM_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) return FALSE; break; } @@ -7814,8 +11078,8 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info, 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) +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; @@ -7831,15 +11095,18 @@ elf32_arm_gc_mark_extra_sections(struct bfd_link_info *info, { asection *o; - if (bfd_get_flavour (sub) != bfd_target_elf_flavour) + if (! is_arm_elf (sub)) 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 + if (hdr->sh_type == SHT_ARM_EXIDX + && hdr->sh_link + && hdr->sh_link < elf_numsections (sub) && !o->gc_mark && elf_shdrp[hdr->sh_link]->bfd_section->gc_mark) { @@ -7922,7 +11189,7 @@ arm_elf_find_function (bfd * abfd ATTRIBUTE_UNUSED, *functionname_ptr = bfd_asymbol_name (func); return TRUE; -} +} /* Find the nearest line to a particular section and offset, for error @@ -8322,7 +11589,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) 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); + 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, @@ -8371,6 +11638,19 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) } } + if (elf32_arm_hash_table (info)->vxworks_p) + { + struct elf32_arm_relocs_copied **pp; + + for (pp = &eh->relocs_copied; (p = *pp) != NULL; ) + { + if (strcmp (p->section->output_section->name, ".tls_vars") == 0) + *pp = p->next; + else + pp = &p->next; + } + } + /* Also discard relocs on undefined weak syms with non-default visibility. */ if (eh->relocs_copied != NULL @@ -8446,10 +11726,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* Find any dynamic relocs that apply to read-only sections. */ static bfd_boolean -elf32_arm_readonly_dynrelocs (struct elf_link_hash_entry *h, PTR inf) +elf32_arm_readonly_dynrelocs (struct elf_link_hash_entry * h, void * inf) { - struct elf32_arm_link_hash_entry *eh; - struct elf32_arm_relocs_copied *p; + struct elf32_arm_link_hash_entry * eh; + struct elf32_arm_relocs_copied * p; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -8522,8 +11802,9 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, bfd_size_type locsymcount; Elf_Internal_Shdr *symtab_hdr; asection *srel; + bfd_boolean is_vxworks = elf32_arm_hash_table (info)->vxworks_p; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_arm_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) @@ -8540,6 +11821,13 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, linker script /DISCARD/, so we'll be discarding the relocs too. */ } + else if (is_vxworks + && strcmp (p->section->output_section->name, + ".tls_vars") == 0) + { + /* Relocations in vxworks .tls_vars sections are + handled specially by the loader. */ + } else if (p->count != 0) { srel = elf_section_data (p->section)->sreloc; @@ -8554,7 +11842,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = & elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = elf32_arm_local_got_tls_type (ibfd); @@ -8600,9 +11888,12 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, /* Here we rummage through the found bfds to collect glue information. */ for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) { + if (! is_arm_elf (ibfd)) + continue; + /* 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 */ @@ -8610,6 +11901,9 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, ibfd->filename); } + /* Allocate space for the glue sections now that we've sized them. */ + bfd_elf32_arm_allocate_interworking_sections (info); + /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ @@ -8671,7 +11965,7 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, continue; /* Allocate memory for the section contents. */ - s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size); + s->contents = bfd_zalloc (dynobj, s->size); if (s->contents == NULL) return FALSE; } @@ -8723,14 +12017,17 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, /* If any dynamic relocs apply to a read-only section, then we need a DT_TEXTREL entry. */ if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->root, elf32_arm_readonly_dynrelocs, - (PTR) info); + elf_link_hash_traverse (& htab->root, elf32_arm_readonly_dynrelocs, + info); if ((info->flags & DF_TEXTREL) != 0) { if (!add_dynamic_entry (DT_TEXTREL, 0)) return FALSE; } + if (htab->vxworks_p + && !elf_vxworks_add_dynamic_entries (output_bfd, info)) + return FALSE; } #undef add_dynamic_entry @@ -8741,8 +12038,10 @@ elf32_arm_size_dynamic_sections (bfd * output_bfd ATTRIBUTE_UNUSED, dynamic sections here. */ static bfd_boolean -elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info, - struct elf_link_hash_entry * h, Elf_Internal_Sym * sym) +elf32_arm_finish_dynamic_symbol (bfd * output_bfd, + struct bfd_link_info * info, + struct elf_link_hash_entry * h, + Elf_Internal_Sym * sym) { bfd * dynobj; struct elf32_arm_link_hash_table *htab; @@ -8772,13 +12071,13 @@ 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) { - put_arm_insn (htab, output_bfd, + put_arm_insn (htab, output_bfd, elf32_arm_symbian_plt_entry[0], splt->contents + h->plt.offset); - bfd_put_32 (output_bfd, + 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 @@ -8789,7 +12088,7 @@ elf32_arm_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 - htab->plt_header_size) + plt_index = ((h->plt.offset - htab->plt_header_size) / htab->plt_entry_size); } else @@ -8798,7 +12097,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info, bfd_vma got_displacement; asection * sgot; bfd_byte * ptr; - + sgot = bfd_get_section_by_name (dynobj, ".got.plt"); BFD_ASSERT (sgot != NULL); @@ -8925,7 +12224,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info, (splt->output_section->vma + splt->output_offset), sgot->contents + got_offset); - + /* Fill in the entry in the .rel(a).plt section. */ rel.r_addend = 0; rel.r_offset = got_address; @@ -8979,7 +12278,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info, if (info->shared && SYMBOL_REFERENCES_LOCAL (info, h)) { - BFD_ASSERT((h->got.offset & 1) != 0); + BFD_ASSERT ((h->got.offset & 1) != 0); rel.r_info = ELF32_R_INFO (0, R_ARM_RELATIVE); if (!htab->use_rel) { @@ -8989,7 +12288,7 @@ elf32_arm_finish_dynamic_symbol (bfd * output_bfd, struct bfd_link_info * info, } else { - BFD_ASSERT((h->got.offset & 1) == 0); + BFD_ASSERT ((h->got.offset & 1) == 0); bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + offset); rel.r_info = ELF32_R_INFO (h->dynindx, R_ARM_GLOB_DAT); } @@ -9073,6 +12372,9 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info unsigned int type; default: + if (htab->vxworks_p + && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; case DT_HASH: @@ -9124,7 +12426,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info dyn.d_un.d_val = s->size; bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; - + case DT_RELSZ: case DT_RELASZ: if (!htab->symbian_p) @@ -9145,7 +12447,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; } - /* Fall through */ + /* Fall through. */ case DT_REL: case DT_RELA: @@ -9165,11 +12467,11 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info dyn.d_un.d_val = 0; for (i = 1; i < elf_numsections (output_bfd); i++) { - Elf_Internal_Shdr *hdr + Elf_Internal_Shdr *hdr = elf_elfsections (output_bfd)[i]; if (hdr->sh_type == type) { - if (dyn.d_tag == DT_RELSZ + if (dyn.d_tag == DT_RELSZ || dyn.d_tag == DT_RELASZ) dyn.d_un.d_val += hdr->sh_size; else if ((ufile_ptr) hdr->sh_offset @@ -9197,7 +12499,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info eh = elf_link_hash_lookup (elf_hash_table (info), name, FALSE, FALSE, TRUE); - if (eh != (struct elf_link_hash_entry *) NULL + if (eh != NULL && ELF_ST_TYPE (eh->type) == STT_ARM_TFUNC) { dyn.d_un.d_val |= 1; @@ -9234,7 +12536,7 @@ elf32_arm_finish_dynamic_sections (bfd * output_bfd, struct bfd_link_info * info splt->contents + 8); bfd_put_32 (output_bfd, got_address, splt->contents + 12); - /* Generate a relocation for _GLOBAL_OFFSET_TABLE_. */ + /* Generate a relocation for _GLOBAL_OFFSET_TABLE_. */ rel.r_offset = plt_address + 12; rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_ARM_ABS32); rel.r_addend = 0; @@ -9542,8 +12844,8 @@ typedef struct 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 *); + int (*func) (void *, const char *, Elf_Internal_Sym *, + asection *, struct elf_link_hash_entry *); } output_arch_syminfo; enum map_symbol_type @@ -9554,12 +12856,12 @@ enum map_symbol_type }; -/* Output a single PLT mapping symbol. */ +/* Output a single mapping symbol. */ static bfd_boolean -elf32_arm_ouput_plt_map_sym (output_arch_syminfo *osi, - enum map_symbol_type type, - bfd_vma offset) +elf32_arm_output_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; @@ -9573,9 +12875,7 @@ elf32_arm_ouput_plt_map_sym (output_arch_syminfo *osi, 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; + return osi->func (osi->finfo, names[type], &sym, osi->sec, NULL) == 1; } @@ -9607,20 +12907,20 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) addr = h->plt.offset; if (htab->symbian_p) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 4)) + if (!elf32_arm_output_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)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 8)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 8)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr + 12)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr + 12)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 20)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 20)) return FALSE; } else @@ -9633,21 +12933,21 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) if (thumb_refs > 0) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_THUMB, addr - 4)) + if (!elf32_arm_output_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)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_DATA, addr + 12)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_DATA, addr + 12)) return FALSE; #else - /* A three-word PLT with no Thumb thunk contains only Arm code, + /* 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_refs > 0 || addr == 20) { - if (!elf32_arm_ouput_plt_map_sym (osi, ARM_MAP_ARM, addr)) + if (!elf32_arm_output_map_sym (osi, ARM_MAP_ARM, addr)) return FALSE; } #endif @@ -9656,16 +12956,143 @@ elf32_arm_output_plt_map (struct elf_link_hash_entry *h, void *inf) return TRUE; } +/* Output a single local symbol for a generated stub. */ + +static bfd_boolean +elf32_arm_output_stub_sym (output_arch_syminfo *osi, const char *name, + bfd_vma offset, bfd_vma size) +{ + 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 = size; + sym.st_other = 0; + sym.st_info = ELF_ST_INFO (STB_LOCAL, STT_FUNC); + sym.st_shndx = osi->sec_shndx; + return osi->func (osi->finfo, name, &sym, osi->sec, NULL) == 1; +} + +static bfd_boolean +arm_map_one_stub (struct bfd_hash_entry * gen_entry, + void * in_arg) +{ + struct elf32_arm_stub_hash_entry *stub_entry; + struct bfd_link_info *info; + struct elf32_arm_link_hash_table *htab; + asection *stub_sec; + bfd_vma addr; + char *stub_name; + output_arch_syminfo *osi; + const insn_sequence *template_sequence; + enum stub_insn_type prev_type; + int size; + int i; + enum map_symbol_type sym_type; + + /* Massage our args to the form they really have. */ + stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; + osi = (output_arch_syminfo *) in_arg; + + info = osi->info; + + htab = elf32_arm_hash_table (info); + stub_sec = stub_entry->stub_sec; + + /* Ensure this stub is attached to the current section being + processed. */ + if (stub_sec != osi->sec) + return TRUE; + + addr = (bfd_vma) stub_entry->stub_offset; + stub_name = stub_entry->output_name; + + template_sequence = stub_entry->stub_template; + switch (template_sequence[0].type) + { + case ARM_TYPE: + if (!elf32_arm_output_stub_sym (osi, stub_name, addr, stub_entry->stub_size)) + return FALSE; + break; + case THUMB16_TYPE: + case THUMB32_TYPE: + if (!elf32_arm_output_stub_sym (osi, stub_name, addr | 1, + stub_entry->stub_size)) + return FALSE; + break; + default: + BFD_FAIL (); + return 0; + } + + prev_type = DATA_TYPE; + size = 0; + for (i = 0; i < stub_entry->stub_template_size; i++) + { + switch (template_sequence[i].type) + { + case ARM_TYPE: + sym_type = ARM_MAP_ARM; + break; + + case THUMB16_TYPE: + case THUMB32_TYPE: + sym_type = ARM_MAP_THUMB; + break; + + case DATA_TYPE: + sym_type = ARM_MAP_DATA; + break; + + default: + BFD_FAIL (); + return FALSE; + } + + if (template_sequence[i].type != prev_type) + { + prev_type = template_sequence[i].type; + if (!elf32_arm_output_map_sym (osi, sym_type, addr + size)) + return FALSE; + } + + switch (template_sequence[i].type) + { + case ARM_TYPE: + case THUMB32_TYPE: + size += 4; + break; + + case THUMB16_TYPE: + size += 2; + break; + + case DATA_TYPE: + size += 4; + break; + + default: + BFD_FAIL (); + return FALSE; + } + } + + 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 *)) + struct bfd_link_info *info, + void *finfo, + int (*func) (void *, const char *, + Elf_Internal_Sym *, + asection *, + struct elf_link_hash_entry *)) { output_arch_syminfo osi; struct elf32_arm_link_hash_table *htab; @@ -9673,12 +13100,12 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, bfd_size_type size; htab = elf32_arm_hash_table (info); - check_use_blx(htab); + check_use_blx (htab); osi.finfo = finfo; osi.info = info; osi.func = func; - + /* ARM->Thumb glue. */ if (htab->arm_glue_size > 0) { @@ -9697,8 +13124,8 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, 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); + elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, offset); + elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, offset + size - 4); } } @@ -9714,8 +13141,42 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, 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); + elf32_arm_output_map_sym (&osi, ARM_MAP_THUMB, offset); + elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, offset + 4); + } + } + + /* ARMv4 BX veneers. */ + if (htab->bx_glue_size > 0) + { + osi.sec = bfd_get_section_by_name (htab->bfd_of_glue_owner, + ARM_BX_GLUE_SECTION_NAME); + + osi.sec_shndx = _bfd_elf_section_from_bfd_section + (output_bfd, osi.sec->output_section); + + elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0); + } + + /* Long calls stubs. */ + if (htab->stub_bfd && htab->stub_bfd->sections) + { + asection* stub_sec; + + for (stub_sec = htab->stub_bfd->sections; + stub_sec != NULL; + stub_sec = stub_sec->next) + { + /* Ignore non-stub sections. */ + if (!strstr (stub_sec->name, STUB_SUFFIX)) + continue; + + osi.sec = stub_sec; + + osi.sec_shndx = _bfd_elf_section_from_bfd_section + (output_bfd, osi.sec->output_section); + + bfd_hash_traverse (&htab->stub_hash_table, arm_map_one_stub, &osi); } } @@ -9724,7 +13185,7 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, return TRUE; osi.sec_shndx = _bfd_elf_section_from_bfd_section (output_bfd, - htab->splt->output_section); + htab->splt->output_section); osi.sec = htab->splt; /* Output mapping symbols for the plt header. SymbianOS does not have a plt header. */ @@ -9733,18 +13194,18 @@ elf32_arm_output_arch_local_syms (bfd *output_bfd, /* VxWorks shared libraries have no PLT header. */ if (!info->shared) { - if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_ARM, 0)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_ARM, 0)) return FALSE; - if (!elf32_arm_ouput_plt_map_sym (&osi, ARM_MAP_DATA, 12)) + if (!elf32_arm_output_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)) + if (!elf32_arm_output_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)) + if (!elf32_arm_output_map_sym (&osi, ARM_MAP_DATA, 16)) return FALSE; #endif } @@ -9780,20 +13241,178 @@ elf32_arm_new_section_hook (bfd *abfd, asection *sec) static int elf32_arm_compare_mapping (const void * a, const void * b) { - return ((const elf32_arm_section_map *) a)->vma - > ((const elf32_arm_section_map *) b)->vma; + const elf32_arm_section_map *amap = (const elf32_arm_section_map *) a; + const elf32_arm_section_map *bmap = (const elf32_arm_section_map *) b; + + if (amap->vma > bmap->vma) + return 1; + else if (amap->vma < bmap->vma) + return -1; + else if (amap->type > bmap->type) + /* Ensure results do not depend on the host qsort for objects with + multiple mapping symbols at the same address by sorting on type + after vma. */ + return 1; + else if (amap->type < bmap->type) + return -1; + else + return 0; +} + +/* Add OFFSET to lower 31 bits of ADDR, leaving other bits unmodified. */ + +static unsigned long +offset_prel31 (unsigned long addr, bfd_vma offset) +{ + return (addr & ~0x7ffffffful) | ((addr + offset) & 0x7ffffffful); +} + +/* Copy an .ARM.exidx table entry, adding OFFSET to (applied) PREL31 + relocations. */ + +static void +copy_exidx_entry (bfd *output_bfd, bfd_byte *to, bfd_byte *from, bfd_vma offset) +{ + unsigned long first_word = bfd_get_32 (output_bfd, from); + unsigned long second_word = bfd_get_32 (output_bfd, from + 4); + + /* High bit of first word is supposed to be zero. */ + if ((first_word & 0x80000000ul) == 0) + first_word = offset_prel31 (first_word, offset); + + /* If the high bit of the first word is clear, and the bit pattern is not 0x1 + (EXIDX_CANTUNWIND), this is an offset to an .ARM.extab entry. */ + if ((second_word != 0x1) && ((second_word & 0x80000000ul) == 0)) + second_word = offset_prel31 (second_word, offset); + + bfd_put_32 (output_bfd, first_word, to); + bfd_put_32 (output_bfd, second_word, to + 4); } +/* Data for make_branch_to_a8_stub(). */ + +struct a8_branch_to_stub_data { + asection *writing_section; + bfd_byte *contents; +}; + + +/* Helper to insert branches to Cortex-A8 erratum stubs in the right + places for a particular section. */ + +static bfd_boolean +make_branch_to_a8_stub (struct bfd_hash_entry *gen_entry, + void *in_arg) +{ + struct elf32_arm_stub_hash_entry *stub_entry; + struct a8_branch_to_stub_data *data; + bfd_byte *contents; + unsigned long branch_insn; + bfd_vma veneered_insn_loc, veneer_entry_loc; + bfd_signed_vma branch_offset; + bfd *abfd; + unsigned int index; + + stub_entry = (struct elf32_arm_stub_hash_entry *) gen_entry; + data = (struct a8_branch_to_stub_data *) in_arg; + + if (stub_entry->target_section != data->writing_section + || stub_entry->stub_type < arm_stub_a8_veneer_b_cond) + return TRUE; + + contents = data->contents; + + veneered_insn_loc = stub_entry->target_section->output_section->vma + + stub_entry->target_section->output_offset + + stub_entry->target_value; + + veneer_entry_loc = stub_entry->stub_sec->output_section->vma + + stub_entry->stub_sec->output_offset + + stub_entry->stub_offset; + + if (stub_entry->stub_type == arm_stub_a8_veneer_blx) + veneered_insn_loc &= ~3u; + + branch_offset = veneer_entry_loc - veneered_insn_loc - 4; + + abfd = stub_entry->target_section->owner; + index = stub_entry->target_value; + + /* We attempt to avoid this condition by setting stubs_always_after_branch + in elf32_arm_size_stubs if we've enabled the Cortex-A8 erratum workaround. + This check is just to be on the safe side... */ + if ((veneered_insn_loc & ~0xfff) == (veneer_entry_loc & ~0xfff)) + { + (*_bfd_error_handler) (_("%B: error: Cortex-A8 erratum stub is " + "allocated in unsafe location"), abfd); + return FALSE; + } + + switch (stub_entry->stub_type) + { + case arm_stub_a8_veneer_b: + case arm_stub_a8_veneer_b_cond: + branch_insn = 0xf0009000; + goto jump24; + + case arm_stub_a8_veneer_blx: + branch_insn = 0xf000e800; + goto jump24; + + case arm_stub_a8_veneer_bl: + { + unsigned int i1, j1, i2, j2, s; + + branch_insn = 0xf000d000; + + jump24: + if (branch_offset < -16777216 || branch_offset > 16777214) + { + /* There's not much we can do apart from complain if this + happens. */ + (*_bfd_error_handler) (_("%B: error: Cortex-A8 erratum stub out " + "of range (input file too large)"), abfd); + return FALSE; + } + + /* i1 = not(j1 eor s), so: + not i1 = j1 eor s + j1 = (not i1) eor s. */ + + branch_insn |= (branch_offset >> 1) & 0x7ff; + branch_insn |= ((branch_offset >> 12) & 0x3ff) << 16; + i2 = (branch_offset >> 22) & 1; + i1 = (branch_offset >> 23) & 1; + s = (branch_offset >> 24) & 1; + j1 = (!i1) ^ s; + j2 = (!i2) ^ s; + branch_insn |= j2 << 11; + branch_insn |= j1 << 13; + branch_insn |= s << 26; + } + break; + + default: + BFD_FAIL (); + return FALSE; + } + + bfd_put_16 (abfd, (branch_insn >> 16) & 0xffff, &contents[index]); + bfd_put_16 (abfd, branch_insn & 0xffff, &contents[index + 2]); + + return TRUE; +} /* Do code byteswapping. Return FALSE afterwards so that the section is written out as normal. */ static bfd_boolean elf32_arm_write_section (bfd *output_bfd, - struct bfd_link_info *link_info, asection *sec, + struct bfd_link_info *link_info, + asection *sec, bfd_byte *contents) { - int mapcount, errcount; + unsigned 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; @@ -9802,7 +13421,7 @@ elf32_arm_write_section (bfd *output_bfd, bfd_vma end; bfd_vma offset = sec->output_section->vma + sec->output_offset; bfd_byte tmp; - int i; + unsigned int i; /* If this section has not been allocated an _arm_elf_section_data structure then we cannot record anything. */ @@ -9889,6 +13508,106 @@ elf32_arm_write_section (bfd *output_bfd, } } + if (arm_data->elf.this_hdr.sh_type == SHT_ARM_EXIDX) + { + arm_unwind_table_edit *edit_node + = arm_data->u.exidx.unwind_edit_list; + /* Now, sec->size is the size of the section we will write. The original + size (before we merged duplicate entries and inserted EXIDX_CANTUNWIND + markers) was sec->rawsize. (This isn't the case if we perform no + edits, then rawsize will be zero and we should use size). */ + bfd_byte *edited_contents = bfd_malloc (sec->size); + unsigned int input_size = sec->rawsize ? sec->rawsize : sec->size; + unsigned int in_index, out_index; + bfd_vma add_to_offsets = 0; + + for (in_index = 0, out_index = 0; in_index * 8 < input_size || edit_node;) + { + if (edit_node) + { + unsigned int edit_index = edit_node->index; + + if (in_index < edit_index && in_index * 8 < input_size) + { + copy_exidx_entry (output_bfd, edited_contents + out_index * 8, + contents + in_index * 8, add_to_offsets); + out_index++; + in_index++; + } + else if (in_index == edit_index + || (in_index * 8 >= input_size + && edit_index == UINT_MAX)) + { + switch (edit_node->type) + { + case DELETE_EXIDX_ENTRY: + in_index++; + add_to_offsets += 8; + break; + + case INSERT_EXIDX_CANTUNWIND_AT_END: + { + asection *text_sec = edit_node->linked_section; + bfd_vma text_offset = text_sec->output_section->vma + + text_sec->output_offset + + text_sec->size; + bfd_vma exidx_offset = offset + out_index * 8; + unsigned long prel31_offset; + + /* Note: this is meant to be equivalent to an + R_ARM_PREL31 relocation. These synthetic + EXIDX_CANTUNWIND markers are not relocated by the + usual BFD method. */ + prel31_offset = (text_offset - exidx_offset) + & 0x7ffffffful; + + /* First address we can't unwind. */ + bfd_put_32 (output_bfd, prel31_offset, + &edited_contents[out_index * 8]); + + /* Code for EXIDX_CANTUNWIND. */ + bfd_put_32 (output_bfd, 0x1, + &edited_contents[out_index * 8 + 4]); + + out_index++; + add_to_offsets -= 8; + } + break; + } + + edit_node = edit_node->next; + } + } + else + { + /* No more edits, copy remaining entries verbatim. */ + copy_exidx_entry (output_bfd, edited_contents + out_index * 8, + contents + in_index * 8, add_to_offsets); + out_index++; + in_index++; + } + } + + if (!(sec->flags & SEC_EXCLUDE) && !(sec->flags & SEC_NEVER_LOAD)) + bfd_set_section_contents (output_bfd, sec->output_section, + edited_contents, + (file_ptr) sec->output_offset, sec->size); + + return TRUE; + } + + /* Fix code to point to Cortex-A8 erratum stubs. */ + if (globals->fix_cortex_a8) + { + struct a8_branch_to_stub_data data; + + data.writing_section = sec; + data.contents = contents; + + bfd_hash_traverse (&globals->stub_hash_table, make_branch_to_a8_stub, + &data); + } + if (mapcount == 0) return FALSE; @@ -10004,7 +13723,7 @@ elf32_arm_swap_symbol_in (bfd * abfd, /* New EABI objects mark thumb function symbols by setting the low bit of the address. Turn these into STT_ARM_TFUNC. */ - if (ELF_ST_TYPE (dst->st_info) == STT_FUNC + if ((ELF_ST_TYPE (dst->st_info) == STT_FUNC) && (dst->st_value & 1)) { dst->st_info = ELF_ST_INFO (ELF_ST_BIND (dst->st_info), STT_ARM_TFUNC); @@ -10044,7 +13763,7 @@ elf32_arm_swap_symbol_out (bfd *abfd, */ newsym.st_value |= 1; } - + src = &newsym; } bfd_elf32_swap_symbol_out (abfd, src, cdst, shndx); @@ -10053,7 +13772,7 @@ elf32_arm_swap_symbol_out (bfd *abfd, /* Add the PT_ARM_EXIDX program header. */ static bfd_boolean -elf32_arm_modify_segment_map (bfd *abfd, +elf32_arm_modify_segment_map (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) { struct elf_segment_map *m; @@ -10101,6 +13820,7 @@ elf32_arm_additional_program_headers (bfd *abfd, } /* We have two function types: STT_FUNC and STT_ARM_TFUNC. */ + static bfd_boolean elf32_arm_is_function_type (unsigned int type) { @@ -10108,7 +13828,8 @@ elf32_arm_is_function_type (unsigned int type) } /* We use this to override swap_symbol_in and swap_symbol_out. */ -const struct elf_size_info elf32_arm_size_info = { +const struct elf_size_info elf32_arm_size_info = +{ sizeof (Elf32_External_Ehdr), sizeof (Elf32_External_Phdr), sizeof (Elf32_External_Shdr), @@ -10154,6 +13875,7 @@ const struct elf_size_info elf32_arm_size_info = { #define bfd_elf32_bfd_set_private_flags elf32_arm_set_private_flags #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_link_hash_table_free elf32_arm_hash_table_free #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 @@ -10162,6 +13884,7 @@ const struct elf_size_info elf32_arm_size_info = { #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_free_cached_info elf32_arm_bfd_free_cached_info +#define bfd_elf32_bfd_final_link elf32_arm_final_link #define elf_backend_get_symbol_type elf32_arm_get_symbol_type #define elf_backend_gc_mark_hook elf32_arm_gc_mark_hook @@ -10187,49 +13910,48 @@ const struct elf_size_info elf32_arm_size_info = { #define elf_backend_symbol_processing elf32_arm_symbol_processing #define elf_backend_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 -#define elf_backend_plt_readonly 1 -#define elf_backend_want_got_plt 1 -#define elf_backend_want_plt_sym 0 -#define elf_backend_may_use_rel_p 1 -#define elf_backend_may_use_rela_p 0 +#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 +#define elf_backend_plt_readonly 1 +#define elf_backend_want_got_plt 1 +#define elf_backend_want_plt_sym 0 +#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_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 +#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 +#define elf_backend_obj_attrs_order elf32_arm_obj_attrs_order #include "elf32-target.h" -/* VxWorks Targets */ +/* VxWorks Targets. */ -#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_SYM #define TARGET_LITTLE_SYM bfd_elf32_littlearm_vxworks_vec -#undef TARGET_LITTLE_NAME +#undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf32-littlearm-vxworks" -#undef TARGET_BIG_SYM +#undef TARGET_BIG_SYM #define TARGET_BIG_SYM bfd_elf32_bigarm_vxworks_vec -#undef TARGET_BIG_NAME +#undef TARGET_BIG_NAME #define TARGET_BIG_NAME "elf32-bigarm-vxworks" /* Like elf32_arm_link_hash_table_create -- but overrides appropriately for VxWorks. */ + static struct bfd_link_hash_table * elf32_arm_vxworks_link_hash_table_create (bfd *abfd) { @@ -10244,7 +13966,7 @@ elf32_arm_vxworks_link_hash_table_create (bfd *abfd) htab->vxworks_p = 1; } return ret; -} +} static void elf32_arm_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) @@ -10253,49 +13975,46 @@ elf32_arm_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) elf_vxworks_final_write_processing (abfd, linker); } -#undef elf32_bed +#undef elf32_bed #define elf32_bed elf32_arm_vxworks_bed -#undef bfd_elf32_bfd_link_hash_table_create -#define bfd_elf32_bfd_link_hash_table_create \ - elf32_arm_vxworks_link_hash_table_create -#undef elf_backend_add_symbol_hook -#define elf_backend_add_symbol_hook \ - elf_vxworks_add_symbol_hook -#undef elf_backend_final_write_processing -#define elf_backend_final_write_processing \ - elf32_arm_vxworks_final_write_processing -#undef elf_backend_emit_relocs -#define elf_backend_emit_relocs \ - elf_vxworks_emit_relocs +#undef bfd_elf32_bfd_link_hash_table_create +#define bfd_elf32_bfd_link_hash_table_create elf32_arm_vxworks_link_hash_table_create +#undef elf_backend_add_symbol_hook +#define elf_backend_add_symbol_hook elf_vxworks_add_symbol_hook +#undef elf_backend_final_write_processing +#define elf_backend_final_write_processing elf32_arm_vxworks_final_write_processing +#undef elf_backend_emit_relocs +#define elf_backend_emit_relocs elf_vxworks_emit_relocs -#undef elf_backend_may_use_rel_p +#undef elf_backend_may_use_rel_p #define elf_backend_may_use_rel_p 0 -#undef elf_backend_may_use_rela_p +#undef elf_backend_may_use_rela_p #define elf_backend_may_use_rela_p 1 -#undef elf_backend_default_use_rela_p +#undef elf_backend_default_use_rela_p #define elf_backend_default_use_rela_p 1 -#undef elf_backend_want_plt_sym +#undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 1 -#undef ELF_MAXPAGESIZE +#undef ELF_MAXPAGESIZE #define ELF_MAXPAGESIZE 0x1000 #include "elf32-target.h" -/* Symbian OS Targets */ +/* Symbian OS Targets. */ -#undef TARGET_LITTLE_SYM +#undef TARGET_LITTLE_SYM #define TARGET_LITTLE_SYM bfd_elf32_littlearm_symbian_vec -#undef TARGET_LITTLE_NAME +#undef TARGET_LITTLE_NAME #define TARGET_LITTLE_NAME "elf32-littlearm-symbian" -#undef TARGET_BIG_SYM +#undef TARGET_BIG_SYM #define TARGET_BIG_SYM bfd_elf32_bigarm_symbian_vec -#undef TARGET_BIG_NAME +#undef TARGET_BIG_NAME #define TARGET_BIG_NAME "elf32-bigarm-symbian" /* Like elf32_arm_link_hash_table_create -- but overrides appropriately for Symbian OS. */ + static struct bfd_link_hash_table * elf32_arm_symbian_link_hash_table_create (bfd *abfd) { @@ -10308,15 +14027,15 @@ elf32_arm_symbian_link_hash_table_create (bfd *abfd) = (struct elf32_arm_link_hash_table *)ret; /* There is no PLT header for Symbian OS. */ htab->plt_header_size = 0; - /* The PLT entries are each three instructions. */ - htab->plt_entry_size = 4 * NUM_ELEM (elf32_arm_symbian_plt_entry); + /* The PLT entries are each one instruction and one word. */ + htab->plt_entry_size = 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry); htab->symbian_p = 1; /* Symbian uses armv5t or above, so use_blx is always true. */ htab->use_blx = 1; htab->root.is_relocatable_executable = 1; } return ret; -} +} static const struct bfd_elf_special_section elf32_arm_symbian_special_sections[] = @@ -10340,7 +14059,7 @@ elf32_arm_symbian_special_sections[] = }; static void -elf32_arm_symbian_begin_write_processing (bfd *abfd, +elf32_arm_symbian_begin_write_processing (bfd *abfd, struct bfd_link_info *link_info) { /* BPABI objects are never loaded directly by an OS kernel; they are @@ -10352,11 +14071,11 @@ 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); + elf32_arm_begin_write_processing (abfd, link_info); } static bfd_boolean -elf32_arm_symbian_modify_segment_map (bfd *abfd, +elf32_arm_symbian_modify_segment_map (bfd *abfd, struct bfd_link_info *info) { struct elf_segment_map *m; @@ -10385,51 +14104,61 @@ elf32_arm_symbian_modify_segment_map (bfd *abfd, return elf32_arm_modify_segment_map (abfd, info); } -#undef elf32_bed +/* Return address for Ith PLT stub in section PLT, for relocation REL + or (bfd_vma) -1 if it should not be included. */ + +static bfd_vma +elf32_arm_symbian_plt_sym_val (bfd_vma i, const asection *plt, + const arelent *rel ATTRIBUTE_UNUSED) +{ + return plt->vma + 4 * ARRAY_SIZE (elf32_arm_symbian_plt_entry) * i; +} + + +#undef elf32_bed #define elf32_bed elf32_arm_symbian_bed /* The dynamic sections are not allocated on SymbianOS; the postlinker will process them and then discard them. */ -#undef ELF_DYNAMIC_SEC_FLAGS +#undef ELF_DYNAMIC_SEC_FLAGS #define ELF_DYNAMIC_SEC_FLAGS \ (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED) -#undef bfd_elf32_bfd_link_hash_table_create -#define bfd_elf32_bfd_link_hash_table_create \ - elf32_arm_symbian_link_hash_table_create #undef elf_backend_add_symbol_hook - -#undef elf_backend_special_sections -#define elf_backend_special_sections elf32_arm_symbian_special_sections - -#undef elf_backend_begin_write_processing -#define elf_backend_begin_write_processing \ - elf32_arm_symbian_begin_write_processing -#undef elf_backend_final_write_processing -#define elf_backend_final_write_processing \ - elf32_arm_final_write_processing #undef elf_backend_emit_relocs -#undef elf_backend_modify_segment_map +#undef bfd_elf32_bfd_link_hash_table_create +#define bfd_elf32_bfd_link_hash_table_create elf32_arm_symbian_link_hash_table_create +#undef elf_backend_special_sections +#define elf_backend_special_sections elf32_arm_symbian_special_sections +#undef elf_backend_begin_write_processing +#define elf_backend_begin_write_processing elf32_arm_symbian_begin_write_processing +#undef elf_backend_final_write_processing +#define elf_backend_final_write_processing elf32_arm_final_write_processing + +#undef elf_backend_modify_segment_map #define elf_backend_modify_segment_map elf32_arm_symbian_modify_segment_map /* There is no .got section for BPABI objects, and hence no header. */ -#undef elf_backend_got_header_size +#undef elf_backend_got_header_size #define elf_backend_got_header_size 0 /* Similarly, there is no .got.plt section. */ -#undef elf_backend_want_got_plt +#undef elf_backend_want_got_plt #define elf_backend_want_got_plt 0 -#undef elf_backend_may_use_rel_p +#undef elf_backend_plt_sym_val +#define elf_backend_plt_sym_val elf32_arm_symbian_plt_sym_val + +#undef elf_backend_may_use_rel_p #define elf_backend_may_use_rel_p 1 -#undef elf_backend_may_use_rela_p +#undef elf_backend_may_use_rela_p #define elf_backend_may_use_rela_p 0 -#undef elf_backend_default_use_rela_p +#undef elf_backend_default_use_rela_p #define elf_backend_default_use_rela_p 0 -#undef elf_backend_want_plt_sym +#undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 0 -#undef ELF_MAXPAGESIZE +#undef ELF_MAXPAGESIZE #define ELF_MAXPAGESIZE 0x8000 #include "elf32-target.h" diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index bb1746d..cc06360 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, 2007 + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Denis Chertykov @@ -729,7 +729,7 @@ elf32_avr_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -738,9 +738,6 @@ elf32_avr_check_relocs (bfd *abfd, 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++) @@ -857,10 +854,11 @@ avr_final_link_relocate (reloc_howto_type * howto, { /* Relative distance is too large. */ - /* Always apply WRAPAROUND for avr2 and avr4. */ + /* Always apply WRAPAROUND for avr2, avr25, and avr4. */ switch (bfd_get_mach (input_bfd)) { case bfd_mach_avr2: + case bfd_mach_avr25: case bfd_mach_avr4: break; @@ -1299,10 +1297,22 @@ bfd_elf_avr_final_write_processing (bfd *abfd, val = E_AVR_MACH_AVR1; break; + case bfd_mach_avr25: + val = E_AVR_MACH_AVR25; + break; + case bfd_mach_avr3: val = E_AVR_MACH_AVR3; break; + case bfd_mach_avr31: + val = E_AVR_MACH_AVR31; + break; + + case bfd_mach_avr35: + val = E_AVR_MACH_AVR35; + break; + case bfd_mach_avr4: val = E_AVR_MACH_AVR4; break; @@ -1311,6 +1321,10 @@ bfd_elf_avr_final_write_processing (bfd *abfd, val = E_AVR_MACH_AVR5; break; + case bfd_mach_avr51: + val = E_AVR_MACH_AVR51; + break; + case bfd_mach_avr6: val = E_AVR_MACH_AVR6; break; @@ -1345,10 +1359,22 @@ elf32_avr_object_p (bfd *abfd) e_set = bfd_mach_avr1; break; + case E_AVR_MACH_AVR25: + e_set = bfd_mach_avr25; + break; + case E_AVR_MACH_AVR3: e_set = bfd_mach_avr3; break; + case E_AVR_MACH_AVR31: + e_set = bfd_mach_avr31; + break; + + case E_AVR_MACH_AVR35: + e_set = bfd_mach_avr35; + break; + case E_AVR_MACH_AVR4: e_set = bfd_mach_avr4; break; @@ -1357,6 +1383,10 @@ elf32_avr_object_p (bfd *abfd) e_set = bfd_mach_avr5; break; + case E_AVR_MACH_AVR51: + e_set = bfd_mach_avr51; + break; + case E_AVR_MACH_AVR6: e_set = bfd_mach_avr6; break; @@ -1385,7 +1415,6 @@ elf32_avr_relax_delete_bytes (bfd *abfd, Elf_Internal_Rela *irelalign; Elf_Internal_Sym *isym; Elf_Internal_Sym *isymbuf = NULL; - Elf_Internal_Sym *isymend; bfd_vma toaddr; struct elf_link_hash_entry **sym_hashes; struct elf_link_hash_entry **end_hashes; @@ -1523,13 +1552,19 @@ elf32_avr_relax_delete_bytes (bfd *abfd, /* Adjust the local symbols defined in this section. */ isym = (Elf_Internal_Sym *) symtab_hdr->contents; - isymend = isym + symtab_hdr->sh_info; - for (; isym < isymend; isym++) + /* Fix PR 9841, there may be no local symbols. */ + if (isym != NULL) { - if (isym->st_shndx == sec_shndx - && isym->st_value > addr - && isym->st_value < toaddr) - isym->st_value -= count; + Elf_Internal_Sym *isymend; + + isymend = isym + symtab_hdr->sh_info; + for (; isym < isymend; isym++) + { + if (isym->st_shndx == sec_shndx + && isym->st_value > addr + && isym->st_value < toaddr) + isym->st_value -= count; + } } /* Now adjust the global symbols defined in this section. */ @@ -1599,6 +1634,10 @@ elf32_avr_relax_section (bfd *abfd, static Elf_Internal_Rela *last_reloc = NULL; struct elf32_avr_link_hash_table *htab; + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + htab = avr_link_hash_table (link_info); if (htab == NULL) return FALSE; @@ -2037,7 +2076,8 @@ elf32_avr_relax_section (bfd *abfd, /* Check for local symbols. */ isym = (Elf_Internal_Sym *) symtab_hdr->contents; isymend = isym + symtab_hdr->sh_info; - for (; isym < isymend; isym++) + /* PR 6019: There may not be any local symbols. */ + for (; isym != NULL && isym < isymend; isym++) { if (isym->st_value == section_offset_of_ret_insn && isym->st_shndx == sec_shndx) @@ -2592,6 +2632,7 @@ 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); + bfd_size_type amt; if (htab == NULL) return -1; @@ -2599,7 +2640,7 @@ get_local_syms (bfd *input_bfd, struct bfd_link_info *info) /* 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; + 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) @@ -2760,15 +2801,20 @@ elf32_avr_size_stubs (bfd *output_bfd, /* It's a local symbol. */ Elf_Internal_Sym *sym; Elf_Internal_Shdr *hdr; + unsigned int shndx; 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); + shndx = sym->st_shndx; + if (shndx < elf_numsections (input_bfd)) + { + hdr = elf_elfsections (input_bfd)[shndx]; + sym_sec = hdr->bfd_section; + destination = (sym_value + irela->r_addend + + sym_sec->output_offset + + sym_sec->output_section->vma); + } } else { diff --git a/bfd/elf32-bfin.c b/bfd/elf32-bfin.c index f3d9480..a767749 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, 2007 Free Software Foundation, Inc. + Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -23,7 +23,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/bfin.h" -#include "elf/dwarf2.h" +#include "dwarf2.h" #include "hashtab.h" /* FUNCTION : bfin_pltpc_reloc @@ -421,7 +421,7 @@ bfin_bfd_reloc (bfd *abfd, static reloc_howto_type bfin_howto_table [] = { /* This reloc does nothing. . */ - HOWTO (R_unused0, /* type. */ + HOWTO (R_BFIN_UNUSED0, /* type. */ 0, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 32, /* bitsize. */ @@ -429,13 +429,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_bitfield, /* complain_on_overflow. */ bfd_elf_generic_reloc, /* special_function. */ - "R_unused0", /* name. */ + "R_BFIN_UNUSED0", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_pcrel5m2, /* type. */ + HOWTO (R_BFIN_PCREL5M2, /* type. */ 1, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long).. */ 4, /* bitsize. */ @@ -443,13 +443,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_unsigned, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_pcrel5m2", /* name. */ + "R_BFIN_PCREL5M2", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x0000000F, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_unused1, /* type. */ + HOWTO (R_BFIN_UNUSED1, /* type. */ 0, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 32, /* bitsize. */ @@ -457,13 +457,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_bitfield, /* complain_on_overflow. */ bfd_elf_generic_reloc, /* special_function. */ - "R_unused1", /* name. */ + "R_BFIN_UNUSED1", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_pcrel10, /* type. */ + HOWTO (R_BFIN_PCREL10, /* type. */ 1, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 10, /* bitsize. */ @@ -471,13 +471,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_pcrel10", /* name. */ + "R_BFIN_PCREL10", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x000003FF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_pcrel12_jump, /* type. */ + HOWTO (R_BFIN_PCREL12_JUMP, /* type. */ 1, /* rightshift. */ /* the offset is actually 13 bit aligned on a word boundary so @@ -489,13 +489,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_pcrel12_jump", /* name. */ + "R_BFIN_PCREL12_JUMP", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x0FFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_rimm16, /* type. */ + HOWTO (R_BFIN_RIMM16, /* type. */ 0, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 16, /* bitsize. */ @@ -503,13 +503,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_imm16_reloc, /* special_function. */ - "R_rimm16", /* name. */ + "R_BFIN_RIMM16", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x0000FFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_luimm16, /* type. */ + HOWTO (R_BFIN_LUIMM16, /* type. */ 0, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 16, /* bitsize. */ @@ -517,13 +517,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_dont, /* complain_on_overflow. */ bfin_imm16_reloc, /* special_function. */ - "R_luimm16", /* name. */ + "R_BFIN_LUIMM16", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x0000FFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_huimm16, /* type. */ + HOWTO (R_BFIN_HUIMM16, /* type. */ 16, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 16, /* bitsize. */ @@ -531,13 +531,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_unsigned, /* complain_on_overflow. */ bfin_imm16_reloc, /* special_function. */ - "R_huimm16", /* name. */ + "R_BFIN_HUIMM16", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x0000FFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_pcrel12_jump_s, /* type. */ + HOWTO (R_BFIN_PCREL12_JUMP_S, /* type. */ 1, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 12, /* bitsize. */ @@ -545,13 +545,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_pcrel12_jump_s", /* name. */ + "R_BFIN_PCREL12_JUMP_S", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x00000FFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_pcrel24_jump_x, /* type. */ + HOWTO (R_BFIN_PCREL24_JUMP_X, /* type. */ 1, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 24, /* bitsize. */ @@ -559,13 +559,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_pcrel24_reloc, /* special_function. */ - "R_pcrel24_jump_x", /* name. */ + "R_BFIN_PCREL24_JUMP_X", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x00FFFFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_pcrel24, /* type. */ + HOWTO (R_BFIN_PCREL24, /* type. */ 1, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 24, /* bitsize. */ @@ -573,13 +573,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_pcrel24_reloc, /* special_function. */ - "R_pcrel24", /* name. */ + "R_BFIN_PCREL24", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x00FFFFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_unusedb, /* type. */ + HOWTO (R_BFIN_UNUSEDB, /* type. */ 0, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 32, /* bitsize. */ @@ -587,13 +587,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_dont, /* complain_on_overflow. */ bfd_elf_generic_reloc, /* special_function. */ - "R_unusedb", /* name. */ + "R_BFIN_UNUSEDB", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_unusedc, /* type. */ + HOWTO (R_BFIN_UNUSEDC, /* type. */ 0, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 32, /* bitsize. */ @@ -601,13 +601,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_dont, /* complain_on_overflow. */ bfd_elf_generic_reloc, /* special_function. */ - "R_unusedc", /* name. */ + "R_BFIN_UNUSEDC", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_pcrel24_jump_l, /* type. */ + HOWTO (R_BFIN_PCREL24_JUMP_L, /* type. */ 1, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 24, /* bitsize. */ @@ -615,13 +615,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_pcrel24_reloc, /* special_function. */ - "R_pcrel24_jump_l", /* name. */ + "R_BFIN_PCREL24_JUMP_L", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x00FFFFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_pcrel24_call_x, /* type. */ + HOWTO (R_BFIN_PCREL24_CALL_X, /* type. */ 1, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 24, /* bitsize. */ @@ -629,13 +629,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_pcrel24_reloc, /* special_function. */ - "R_pcrel24_call_x", /* name. */ + "R_BFIN_PCREL24_CALL_X", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x00FFFFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_var_eq_symb, /* type. */ + HOWTO (R_BFIN_VAR_EQ_SYMB, /* type. */ 0, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 32, /* bitsize. */ @@ -643,13 +643,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_bitfield, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_var_eq_symb", /* name. */ + "R_BFIN_VAR_EQ_SYMB", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_byte_data, /* type. */ + HOWTO (R_BFIN_BYTE_DATA, /* type. */ 0, /* rightshift. */ 0, /* size (0 = byte, 1 = short, 2 = long). */ 8, /* bitsize. */ @@ -657,13 +657,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_unsigned, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_byte_data", /* name. */ + "R_BFIN_BYTE_DATA", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0xFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_byte2_data, /* type. */ + HOWTO (R_BFIN_BYTE2_DATA, /* type. */ 0, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 16, /* bitsize. */ @@ -671,13 +671,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_signed, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_byte2_data", /* name. */ + "R_BFIN_BYTE2_DATA", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0xFFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_byte4_data, /* type. */ + HOWTO (R_BFIN_BYTE4_DATA, /* type. */ 0, /* rightshift. */ 2, /* size (0 = byte, 1 = short, 2 = long). */ 32, /* bitsize. */ @@ -685,13 +685,13 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_unsigned, /* complain_on_overflow. */ bfin_byte4_reloc, /* special_function. */ - "R_byte4_data", /* name. */ + "R_BFIN_BYTE4_DATA", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0xFFFFFFFF, /* dst_mask. */ TRUE), /* pcrel_offset. */ - HOWTO (R_pcrel11, /* type. */ + HOWTO (R_BFIN_PCREL11, /* type. */ 1, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 10, /* bitsize. */ @@ -699,7 +699,7 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos. */ complain_overflow_unsigned, /* complain_on_overflow. */ bfin_bfd_reloc, /* special_function. */ - "R_pcrel11", /* name. */ + "R_BFIN_PCREL11", /* name. */ FALSE, /* partial_inplace. */ 0, /* src_mask. */ 0x000003FF, /* dst_mask. */ @@ -716,7 +716,7 @@ static reloc_howto_type bfin_howto_table [] = 0, /* bitpos */ complain_overflow_signed, /* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ - "R_BFIN_GOT12", /* name */ + "R_BFIN_GOT17M4", /* name */ FALSE, /* partial_inplace */ 0xffff, /* src_mask */ 0xffff, /* dst_mask */ @@ -931,7 +931,7 @@ static reloc_howto_type bfin_howto_table [] = static reloc_howto_type bfin_gnuext_howto_table [] = { - HOWTO (R_pltpc, /* type. */ + HOWTO (R_BFIN_PLTPC, /* type. */ 0, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 16, /* bitsize. */ @@ -939,13 +939,13 @@ static reloc_howto_type bfin_gnuext_howto_table [] = 0, /* bitpos. */ complain_overflow_bitfield, /* complain_on_overflow. */ bfin_pltpc_reloc, /* special_function. */ - "R_pltpc", /* name. */ + "R_BFIN_PLTPC", /* name. */ FALSE, /* partial_inplace. */ 0xffff, /* src_mask. */ 0xffff, /* dst_mask. */ FALSE), /* pcrel_offset. */ - HOWTO (R_got, /* type. */ + HOWTO (R_BFIN_GOT, /* type. */ 0, /* rightshift. */ 1, /* size (0 = byte, 1 = short, 2 = long). */ 16, /* bitsize. */ @@ -953,7 +953,7 @@ static reloc_howto_type bfin_gnuext_howto_table [] = 0, /* bitpos. */ complain_overflow_bitfield, /* complain_on_overflow. */ bfd_elf_generic_reloc, /* special_function. */ - "R_got", /* name. */ + "R_BFIN_GOT", /* name. */ FALSE, /* partial_inplace. */ 0x7fff, /* src_mask. */ 0x7fff, /* dst_mask. */ @@ -998,27 +998,27 @@ struct bfin_reloc_map static const struct bfin_reloc_map bfin_reloc_map [] = { - { BFD_RELOC_NONE, R_unused0 }, - { BFD_RELOC_BFIN_5_PCREL, R_pcrel5m2 }, - { BFD_RELOC_NONE, R_unused1 }, - { BFD_RELOC_BFIN_10_PCREL, R_pcrel10 }, - { BFD_RELOC_BFIN_12_PCREL_JUMP, R_pcrel12_jump }, - { BFD_RELOC_BFIN_16_IMM, R_rimm16 }, - { BFD_RELOC_BFIN_16_LOW, R_luimm16 }, - { BFD_RELOC_BFIN_16_HIGH, R_huimm16 }, - { BFD_RELOC_BFIN_12_PCREL_JUMP_S, R_pcrel12_jump_s }, - { BFD_RELOC_24_PCREL, R_pcrel24 }, - { BFD_RELOC_24_PCREL, R_pcrel24 }, - { BFD_RELOC_BFIN_24_PCREL_JUMP_L, R_pcrel24_jump_l }, - { BFD_RELOC_NONE, R_unusedb }, - { BFD_RELOC_NONE, R_unusedc }, - { BFD_RELOC_BFIN_24_PCREL_CALL_X, R_pcrel24_call_x }, - { BFD_RELOC_8, R_byte_data }, - { BFD_RELOC_16, R_byte2_data }, - { BFD_RELOC_32, R_byte4_data }, - { BFD_RELOC_BFIN_11_PCREL, R_pcrel11 }, - { BFD_RELOC_BFIN_GOT, R_got }, - { BFD_RELOC_BFIN_PLTPC, R_pltpc }, + { BFD_RELOC_NONE, R_BFIN_UNUSED0 }, + { BFD_RELOC_BFIN_5_PCREL, R_BFIN_PCREL5M2 }, + { BFD_RELOC_NONE, R_BFIN_UNUSED1 }, + { BFD_RELOC_BFIN_10_PCREL, R_BFIN_PCREL10 }, + { BFD_RELOC_BFIN_12_PCREL_JUMP, R_BFIN_PCREL12_JUMP }, + { BFD_RELOC_BFIN_16_IMM, R_BFIN_RIMM16 }, + { BFD_RELOC_BFIN_16_LOW, R_BFIN_LUIMM16 }, + { BFD_RELOC_BFIN_16_HIGH, R_BFIN_HUIMM16 }, + { BFD_RELOC_BFIN_12_PCREL_JUMP_S, R_BFIN_PCREL12_JUMP_S }, + { BFD_RELOC_24_PCREL, R_BFIN_PCREL24 }, + { BFD_RELOC_24_PCREL, R_BFIN_PCREL24 }, + { BFD_RELOC_BFIN_24_PCREL_JUMP_L, R_BFIN_PCREL24_JUMP_L }, + { BFD_RELOC_NONE, R_BFIN_UNUSEDB }, + { BFD_RELOC_NONE, R_BFIN_UNUSEDC }, + { BFD_RELOC_BFIN_24_PCREL_CALL_X, R_BFIN_PCREL24_CALL_X }, + { BFD_RELOC_8, R_BFIN_BYTE_DATA }, + { BFD_RELOC_16, R_BFIN_BYTE2_DATA }, + { BFD_RELOC_32, R_BFIN_BYTE4_DATA }, + { BFD_RELOC_BFIN_11_PCREL, R_BFIN_PCREL11 }, + { BFD_RELOC_BFIN_GOT, R_BFIN_GOT }, + { BFD_RELOC_BFIN_PLTPC, R_BFIN_PLTPC }, { BFD_RELOC_BFIN_GOT17M4, R_BFIN_GOT17M4 }, { BFD_RELOC_BFIN_GOTHI, R_BFIN_GOTHI }, @@ -1123,7 +1123,7 @@ bfin_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, bfin local labels begin with L$. */ static bfd_boolean bfin_is_local_label_name ( - bfd *abfd ATTRIBUTE_UNUSED, + bfd *abfd, const char *label) { if (label[0] == 'L' && label[1] == '$' ) @@ -1131,2087 +1131,2213 @@ bfin_is_local_label_name ( return _bfd_elf_is_local_label_name (abfd, label); } + +/* Look through the relocs for a section during the first phase, and + allocate space in the global offset table or procedure linkage + table. */ -extern const bfd_target bfd_elf32_bfinfdpic_vec; -#define IS_FDPIC(bfd) ((bfd)->xvec == &bfd_elf32_bfinfdpic_vec) - -/* An extension of the elf hash table data structure, containing some - additional Blackfin-specific data. */ -struct bfinfdpic_elf_link_hash_table +static bfd_boolean +bfin_check_relocs (bfd * abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { - struct elf_link_hash_table elf; - - /* A pointer to the .got section. */ + bfd *dynobj; + Elf_Internal_Shdr *symtab_hdr; + struct elf_link_hash_entry **sym_hashes; + bfd_signed_vma *local_got_refcounts; + const Elf_Internal_Rela *rel; + const Elf_Internal_Rela *rel_end; asection *sgot; - /* A pointer to the .rel.got section. */ - asection *sgotrel; - /* A pointer to the .rofixup section. */ - asection *sgotfixup; - /* A pointer to the .plt section. */ - asection *splt; - /* A pointer to the .rel.plt section. */ - asection *spltrel; - /* GOT base offset. */ - bfd_vma got0; - /* Location of the first non-lazy PLT entry, i.e., the number of - bytes taken by lazy PLT entries. */ - bfd_vma plt0; - /* A hash table holding information about which symbols were - referenced with which PIC-related relocations. */ - struct htab *relocs_info; -}; - -/* Get the Blackfin ELF linker hash table from a link_info structure. */ - -#define bfinfdpic_hash_table(info) \ - ((struct bfinfdpic_elf_link_hash_table *) ((info)->hash)) - -#define bfinfdpic_got_section(info) \ - (bfinfdpic_hash_table (info)->sgot) -#define bfinfdpic_gotrel_section(info) \ - (bfinfdpic_hash_table (info)->sgotrel) -#define bfinfdpic_gotfixup_section(info) \ - (bfinfdpic_hash_table (info)->sgotfixup) -#define bfinfdpic_plt_section(info) \ - (bfinfdpic_hash_table (info)->splt) -#define bfinfdpic_pltrel_section(info) \ - (bfinfdpic_hash_table (info)->spltrel) -#define bfinfdpic_relocs_info(info) \ - (bfinfdpic_hash_table (info)->relocs_info) -#define bfinfdpic_got_initial_offset(info) \ - (bfinfdpic_hash_table (info)->got0) -#define bfinfdpic_plt_initial_offset(info) \ - (bfinfdpic_hash_table (info)->plt0) - -/* Create a Blackfin ELF linker hash table. */ + asection *srelgot; + if (info->relocatable) + return TRUE; -static struct bfd_link_hash_table * -bfinfdpic_elf_link_hash_table_create (bfd *abfd) -{ - struct bfinfdpic_elf_link_hash_table *ret; - bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table); + dynobj = elf_hash_table (info)->dynobj; + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (abfd); + local_got_refcounts = elf_local_got_refcounts (abfd); - ret = bfd_zalloc (abfd, amt); - if (ret == NULL) - return NULL; + sgot = NULL; + srelgot = NULL; - if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, - _bfd_elf_link_hash_newfunc, - sizeof (struct elf_link_hash_entry))) + rel_end = relocs + sec->reloc_count; + for (rel = relocs; rel < rel_end; rel++) { - free (ret); - return NULL; - } + unsigned long r_symndx; + struct elf_link_hash_entry *h; - return &ret->elf.root; -} + 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]; -/* Decide whether a reference to a symbol can be resolved locally or - not. If the symbol is protected, we want the local address, but - its function descriptor must be assigned by the dynamic linker. */ -#define BFINFDPIC_SYM_LOCAL(INFO, H) \ - (_bfd_elf_symbol_refs_local_p ((H), (INFO), 1) \ - || ! elf_hash_table (INFO)->dynamic_sections_created) -#define BFINFDPIC_FUNCDESC_LOCAL(INFO, H) \ - ((H)->dynindx == -1 || ! elf_hash_table (INFO)->dynamic_sections_created) + switch (ELF32_R_TYPE (rel->r_info)) + { + /* This relocation describes the C++ object vtable hierarchy. + Reconstruct it for later use during GC. */ + case R_BFIN_GNU_VTINHERIT: + if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) + return FALSE; + break; -/* This structure collects information on what kind of GOT, PLT or - function descriptors are required by relocations that reference a - certain symbol. */ -struct bfinfdpic_relocs_info -{ - /* The index of the symbol, as stored in the relocation r_info, if - we have a local symbol; -1 otherwise. */ - long symndx; - union - { - /* The input bfd in which the symbol is defined, if it's a local - symbol. */ - bfd *abfd; - /* If symndx == -1, the hash table entry corresponding to a global - symbol (even if it turns out to bind locally, in which case it - should ideally be replaced with section's symndx + addend). */ - struct elf_link_hash_entry *h; - } d; - /* The addend of the relocation that references the symbol. */ - bfd_vma addend; + /* This relocation describes which C++ vtable entries + are actually used. Record for later use during GC. */ + case R_BFIN_GNU_VTENTRY: + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + return FALSE; + break; - /* The fields above are used to identify an entry. The fields below - contain information on how an entry is used and, later on, which - locations it was assigned. */ - /* The following 2 fields record whether the symbol+addend above was - ever referenced with a GOT relocation. The 17M4 suffix indicates a - GOT17M4 relocation; hilo is used for GOTLO/GOTHI pairs. */ - unsigned got17m4:1; - unsigned gothilo:1; - /* Whether a FUNCDESC relocation references symbol+addend. */ - unsigned fd:1; - /* Whether a FUNCDESC_GOT relocation references symbol+addend. */ - unsigned fdgot17m4:1; - unsigned fdgothilo:1; - /* Whether a FUNCDESC_GOTOFF relocation references symbol+addend. */ - unsigned fdgoff17m4:1; - unsigned fdgoffhilo:1; - /* Whether symbol+addend is referenced with GOTOFF17M4, GOTOFFLO or - GOTOFFHI relocations. The addend doesn't really matter, since we - envision that this will only be used to check whether the symbol - is mapped to the same segment as the got. */ - unsigned gotoff:1; - /* Whether symbol+addend is referenced by a LABEL24 relocation. */ - unsigned call:1; - /* Whether symbol+addend is referenced by a 32 or FUNCDESC_VALUE - relocation. */ - unsigned sym:1; - /* Whether we need a PLT entry for a symbol. Should be implied by - something like: - (call && symndx == -1 && ! BFINFDPIC_SYM_LOCAL (info, d.h)) */ - unsigned plt:1; - /* Whether a function descriptor should be created in this link unit - for symbol+addend. Should be implied by something like: - (plt || fdgotoff17m4 || fdgotofflohi - || ((fd || fdgot17m4 || fdgothilo) - && (symndx != -1 || BFINFDPIC_FUNCDESC_LOCAL (info, d.h)))) */ - unsigned privfd:1; - /* Whether a lazy PLT entry is needed for this symbol+addend. - Should be implied by something like: - (privfd && symndx == -1 && ! BFINFDPIC_SYM_LOCAL (info, d.h) - && ! (info->flags & DF_BIND_NOW)) */ - unsigned lazyplt:1; - /* Whether we've already emitted GOT relocations and PLT entries as - needed for this symbol. */ - unsigned done:1; + case R_BFIN_GOT: + if (h != NULL + && strcmp (h->root.root.string, "__GLOBAL_OFFSET_TABLE_") == 0) + break; + /* Fall through. */ - /* The number of R_byte4_data, R_BFIN_FUNCDESC and R_BFIN_FUNCDESC_VALUE - relocations referencing the symbol. */ - unsigned relocs32, relocsfd, relocsfdv; + if (dynobj == NULL) + { + /* Create the .got section. */ + elf_hash_table (info)->dynobj = dynobj = abfd; + if (!_bfd_elf_create_got_section (dynobj, info)) + return FALSE; + } - /* The number of .rofixups entries and dynamic relocations allocated - for this symbol, minus any that might have already been used. */ - unsigned fixups, dynrelocs; + if (sgot == NULL) + { + sgot = bfd_get_section_by_name (dynobj, ".got"); + BFD_ASSERT (sgot != NULL); + } - /* The offsets of the GOT entries assigned to symbol+addend, to the - function descriptor's address, and to a function descriptor, - respectively. Should be zero if unassigned. The offsets are - counted from the value that will be assigned to the PIC register, - not from the beginning of the .got section. */ - bfd_signed_vma got_entry, fdgot_entry, fd_entry; - /* The offsets of the PLT entries assigned to symbol+addend, - non-lazy and lazy, respectively. If unassigned, should be - (bfd_vma)-1. */ - bfd_vma plt_entry, lzplt_entry; -}; + if (srelgot == NULL && (h != NULL || info->shared)) + { + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (srelgot == NULL) + { + 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_alignment (dynobj, srelgot, 2)) + return FALSE; + } + } -/* Compute a hash with the key fields of an bfinfdpic_relocs_info entry. */ -static hashval_t -bfinfdpic_relocs_info_hash (const void *entry_) -{ - const struct bfinfdpic_relocs_info *entry = entry_; + if (h != NULL) + { + if (h->got.refcount == 0) + { + /* Make sure this symbol is output as a dynamic symbol. */ + if (h->dynindx == -1 && !h->forced_local) + { + if (!bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } - return (entry->symndx == -1 - ? (long) entry->d.h->root.root.hash - : entry->symndx + (long) entry->d.abfd->id * 257) + entry->addend; -} + /* Allocate space in the .got section. */ + sgot->size += 4; + /* Allocate relocation space. */ + srelgot->size += sizeof (Elf32_External_Rela); + } + h->got.refcount++; + } + else + { + /* This is a global offset table entry for a local symbol. */ + if (local_got_refcounts == NULL) + { + bfd_size_type size; -/* Test whether the key fields of two bfinfdpic_relocs_info entries are - identical. */ -static int -bfinfdpic_relocs_info_eq (const void *entry1, const void *entry2) -{ - const struct bfinfdpic_relocs_info *e1 = entry1; - const struct bfinfdpic_relocs_info *e2 = entry2; + size = symtab_hdr->sh_info; + size *= sizeof (bfd_signed_vma); + local_got_refcounts = ((bfd_signed_vma *) + bfd_zalloc (abfd, size)); + if (local_got_refcounts == NULL) + return FALSE; + elf_local_got_refcounts (abfd) = local_got_refcounts; + } + if (local_got_refcounts[r_symndx] == 0) + { + sgot->size += 4; + if (info->shared) + { + /* If we are generating a shared object, we need to + output a R_68K_RELATIVE reloc so that the dynamic + linker can adjust this GOT entry. */ + srelgot->size += sizeof (Elf32_External_Rela); + } + } + local_got_refcounts[r_symndx]++; + } + break; - return e1->symndx == e2->symndx && e1->addend == e2->addend - && (e1->symndx == -1 ? e1->d.h == e2->d.h : e1->d.abfd == e2->d.abfd); + default: + break; + } + } + + return TRUE; } -/* Find or create an entry in a hash table HT that matches the key - fields of the given ENTRY. If it's not found, memory for a new - entry is allocated in ABFD's obstack. */ -static struct bfinfdpic_relocs_info * -bfinfdpic_relocs_info_find (struct htab *ht, - bfd *abfd, - const struct bfinfdpic_relocs_info *entry, - enum insert_option insert) +static enum elf_reloc_type_class +elf32_bfin_reloc_type_class (const Elf_Internal_Rela * rela) +{ + switch ((int) ELF32_R_TYPE (rela->r_info)) + { + default: + return reloc_class_normal; + } +} + +static bfd_reloc_status_type +bfin_final_link_relocate (Elf_Internal_Rela *rel, reloc_howto_type *howto, + bfd *input_bfd, asection *input_section, + bfd_byte *contents, bfd_vma address, + bfd_vma value, bfd_vma addend) { - struct bfinfdpic_relocs_info **loc = - (struct bfinfdpic_relocs_info **) htab_find_slot (ht, entry, insert); + int r_type = ELF32_R_TYPE (rel->r_info); - if (! loc) - return NULL; + if (r_type == R_BFIN_PCREL24 || r_type == R_BFIN_PCREL24_JUMP_L) + { + bfd_reloc_status_type r = bfd_reloc_ok; + bfd_vma x; - if (*loc) - return *loc; + if (address > bfd_get_section_limit (input_bfd, input_section)) + return bfd_reloc_outofrange; - *loc = bfd_zalloc (abfd, sizeof (**loc)); + value += addend; - if (! *loc) - return *loc; + /* Perform usual pc-relative correction. */ + value -= input_section->output_section->vma + input_section->output_offset; + value -= address; - (*loc)->symndx = entry->symndx; - (*loc)->d = entry->d; - (*loc)->addend = entry->addend; - (*loc)->plt_entry = (bfd_vma)-1; - (*loc)->lzplt_entry = (bfd_vma)-1; + /* We are getting reloc_entry->address 2 byte off from + the start of instruction. Assuming absolute postion + of the reloc data. But, following code had been written assuming + reloc address is starting at begining of instruction. + To compensate that I have increased the value of + relocation by 1 (effectively 2) and used the addr -2 instead of addr. */ - return *loc; -} + value += 2; + address -= 2; -/* Obtain the address of the entry in HT associated with H's symbol + - addend, creating a new entry if none existed. ABFD is only used - for memory allocation purposes. */ -inline static struct bfinfdpic_relocs_info * -bfinfdpic_relocs_info_for_global (struct htab *ht, - bfd *abfd, - struct elf_link_hash_entry *h, - bfd_vma addend, - enum insert_option insert) -{ - struct bfinfdpic_relocs_info entry; + if ((value & 0xFF000000) != 0 + && (value & 0xFF000000) != 0xFF000000) + r = bfd_reloc_overflow; - entry.symndx = -1; - entry.d.h = h; - entry.addend = addend; + value >>= 1; - return bfinfdpic_relocs_info_find (ht, abfd, &entry, insert); -} + x = bfd_get_16 (input_bfd, contents + address); + x = (x & 0xff00) | ((value >> 16) & 0xff); + bfd_put_16 (input_bfd, x, contents + address); -/* Obtain the address of the entry in HT associated with the SYMNDXth - local symbol of the input bfd ABFD, plus the addend, creating a new - entry if none existed. */ -inline static struct bfinfdpic_relocs_info * -bfinfdpic_relocs_info_for_local (struct htab *ht, - bfd *abfd, - long symndx, - bfd_vma addend, - enum insert_option insert) -{ - struct bfinfdpic_relocs_info entry; + x = bfd_get_16 (input_bfd, contents + address + 2); + x = value & 0xFFFF; + bfd_put_16 (input_bfd, x, contents + address + 2); + return r; + } - entry.symndx = symndx; - entry.d.abfd = abfd; - entry.addend = addend; + return _bfd_final_link_relocate (howto, input_bfd, input_section, contents, + rel->r_offset, value, addend); - return bfinfdpic_relocs_info_find (ht, abfd, &entry, insert); } -/* Merge fields set by check_relocs() of two entries that end up being - mapped to the same (presumably global) symbol. */ - -inline static void -bfinfdpic_pic_merge_early_relocs_info (struct bfinfdpic_relocs_info *e2, - struct bfinfdpic_relocs_info const *e1) +static bfd_boolean +bfin_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) { - e2->got17m4 |= e1->got17m4; - e2->gothilo |= e1->gothilo; - e2->fd |= e1->fd; - e2->fdgot17m4 |= e1->fdgot17m4; - e2->fdgothilo |= e1->fdgothilo; - e2->fdgoff17m4 |= e1->fdgoff17m4; - e2->fdgoffhilo |= e1->fdgoffhilo; - e2->gotoff |= e1->gotoff; - e2->call |= e1->call; - e2->sym |= e1->sym; -} + bfd *dynobj; + Elf_Internal_Shdr *symtab_hdr; + struct elf_link_hash_entry **sym_hashes; + bfd_vma *local_got_offsets; + asection *sgot; + Elf_Internal_Rela *rel; + Elf_Internal_Rela *relend; + int i = 0; -/* Every block of 65535 lazy PLT entries shares a single call to the - resolver, inserted in the 32768th lazy PLT entry (i.e., entry # - 32767, counting from 0). All other lazy PLT entries branch to it - in a single instruction. */ + dynobj = elf_hash_table (info)->dynobj; + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (input_bfd); + local_got_offsets = elf_local_got_offsets (input_bfd); -#define LZPLT_RESOLVER_EXTRA 10 -#define LZPLT_NORMAL_SIZE 6 -#define LZPLT_ENTRIES 1362 + sgot = NULL; -#define BFINFDPIC_LZPLT_BLOCK_SIZE ((bfd_vma) LZPLT_NORMAL_SIZE * LZPLT_ENTRIES + LZPLT_RESOLVER_EXTRA) -#define BFINFDPIC_LZPLT_RESOLV_LOC (LZPLT_NORMAL_SIZE * LZPLT_ENTRIES / 2) + rel = relocs; + relend = relocs + input_section->reloc_count; + for (; rel < relend; rel++, i++) + { + int r_type; + reloc_howto_type *howto; + unsigned long r_symndx; + struct elf_link_hash_entry *h; + Elf_Internal_Sym *sym; + asection *sec; + bfd_vma relocation = 0; + bfd_boolean unresolved_reloc; + bfd_reloc_status_type r; + bfd_vma address; -/* Add a dynamic relocation to the SRELOC section. */ + r_type = ELF32_R_TYPE (rel->r_info); + if (r_type < 0 || r_type >= 243) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } -inline static bfd_vma -_bfinfdpic_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset, - int reloc_type, long dynindx, bfd_vma addend, - struct bfinfdpic_relocs_info *entry) -{ - Elf_Internal_Rela outrel; - bfd_vma reloc_offset; + if (r_type == R_BFIN_GNU_VTENTRY + || r_type == R_BFIN_GNU_VTINHERIT) + continue; - outrel.r_offset = offset; - outrel.r_info = ELF32_R_INFO (dynindx, reloc_type); - outrel.r_addend = addend; + howto = bfin_reloc_type_lookup (input_bfd, r_type); + if (howto == NULL) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + r_symndx = ELF32_R_SYM (rel->r_info); - reloc_offset = sreloc->reloc_count * sizeof (Elf32_External_Rel); - BFD_ASSERT (reloc_offset < sreloc->size); - bfd_elf32_swap_reloc_out (output_bfd, &outrel, - sreloc->contents + reloc_offset); - sreloc->reloc_count++; + h = NULL; + sym = NULL; + sec = NULL; + unresolved_reloc = FALSE; - /* If the entry's index is zero, this relocation was probably to a - linkonce section that got discarded. We reserved a dynamic - relocation, but it was for another entry than the one we got at - the time of emitting the relocation. Unfortunately there's no - simple way for us to catch this situation, since the relocation - is cleared right before calling relocate_section, at which point - we no longer know what the relocation used to point to. */ - if (entry->symndx) - { - BFD_ASSERT (entry->dynrelocs > 0); - entry->dynrelocs--; - } + if (r_symndx < symtab_hdr->sh_info) + { + sym = local_syms + r_symndx; + sec = local_sections[r_symndx]; + relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); + } + else + { + bfd_boolean warned; - return reloc_offset; -} + RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, + r_symndx, symtab_hdr, sym_hashes, + h, sec, relocation, + unresolved_reloc, warned); + } -/* Add a fixup to the ROFIXUP 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; + } -static bfd_vma -_bfinfdpic_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset, - struct bfinfdpic_relocs_info *entry) -{ - bfd_vma fixup_offset; + if (info->relocatable) + continue; - if (rofixup->flags & SEC_EXCLUDE) - return -1; + address = rel->r_offset; - fixup_offset = rofixup->reloc_count * 4; - if (rofixup->contents) - { - BFD_ASSERT (fixup_offset < rofixup->size); - bfd_put_32 (output_bfd, offset, rofixup->contents + fixup_offset); - } - rofixup->reloc_count++; + /* Then, process normally. */ + switch (r_type) + { + case R_BFIN_GNU_VTINHERIT: + case R_BFIN_GNU_VTENTRY: + return bfd_reloc_ok; - if (entry && entry->symndx) - { - /* See discussion about symndx == 0 in _bfinfdpic_add_dyn_reloc - above. */ - BFD_ASSERT (entry->fixups > 0); - entry->fixups--; - } + case R_BFIN_GOT: + /* 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) + goto do_default; + /* Fall through. */ + /* Relocation is the offset of the entry for this symbol in + the global offset table. */ - return fixup_offset; -} + { + bfd_vma off; -/* Find the segment number in which OSEC, and output section, is - located. */ + if (dynobj == NULL) + { + /* Create the .got section. */ + elf_hash_table (info)->dynobj = dynobj = output_bfd; + if (!_bfd_elf_create_got_section (dynobj, info)) + return FALSE; + } -static unsigned -_bfinfdpic_osec_to_segment (bfd *output_bfd, asection *osec) -{ - struct elf_segment_map *m; - Elf_Internal_Phdr *p; + if (sgot == NULL) + { + sgot = bfd_get_section_by_name (dynobj, ".got"); + BFD_ASSERT (sgot != NULL); + } - /* Find the segment that contains the output_section. */ - for (m = elf_tdata (output_bfd)->segment_map, - p = elf_tdata (output_bfd)->phdr; - m != NULL; - m = m->next, p++) - { - int i; + if (h != NULL) + { + bfd_boolean dyn; - for (i = m->count - 1; i >= 0; i--) - if (m->sections[i] == osec) - break; + off = h->got.offset; + BFD_ASSERT (off != (bfd_vma) - 1); + dyn = elf_hash_table (info)->dynamic_sections_created; - if (i >= 0) - break; - } + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) + || (info->shared + && (info->symbolic + || h->dynindx == -1 + || h->forced_local) + && h->def_regular)) + { + /* This is actually a static link, or it is a + -Bsymbolic link and the symbol is defined + locally, or the symbol was forced to be local + because of a version file.. We must initialize + this entry in the global offset table. Since + the offset must always be a multiple of 4, we + use the least significant bit to record whether + we have initialized it already. - return p - elf_tdata (output_bfd)->phdr; -} + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + if ((off & 1) != 0) + off &= ~1; + else + { + bfd_put_32 (output_bfd, relocation, + sgot->contents + off); + h->got.offset |= 1; + } + } + else + unresolved_reloc = FALSE; + } + else + { + BFD_ASSERT (local_got_offsets != NULL); + off = local_got_offsets[r_symndx]; + BFD_ASSERT (off != (bfd_vma) - 1); -inline static bfd_boolean -_bfinfdpic_osec_readonly_p (bfd *output_bfd, asection *osec) -{ - unsigned seg = _bfinfdpic_osec_to_segment (output_bfd, osec); + /* The offset must always be a multiple of 4. We use + the least significant bit to record whether we have + already generated the necessary reloc. */ + if ((off & 1) != 0) + off &= ~1; + else + { + bfd_put_32 (output_bfd, relocation, sgot->contents + off); - return ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W); -} + if (info->shared) + { + asection *s; + Elf_Internal_Rela outrel; + bfd_byte *loc; -/* Generate relocations for GOT entries, function descriptors, and - code for PLT and lazy PLT entries. */ + s = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (s != NULL); -inline static bfd_boolean -_bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, - bfd *output_bfd, - struct bfd_link_info *info, - asection *sec, - Elf_Internal_Sym *sym, - bfd_vma addend) + outrel.r_offset = (sgot->output_section->vma + + sgot->output_offset + off); + outrel.r_info = + ELF32_R_INFO (0, R_BFIN_PCREL24); + outrel.r_addend = relocation; + loc = s->contents; + loc += + s->reloc_count++ * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + } -{ - bfd_vma fd_lazy_rel_offset = (bfd_vma)-1; - int dynindx = -1; + local_got_offsets[r_symndx] |= 1; + } + } - if (entry->done) - return TRUE; - entry->done = 1; + relocation = sgot->output_offset + off; + rel->r_addend = 0; + /* bfin : preg = [preg + 17bitdiv4offset] relocation is div by 4. */ + relocation /= 4; + } + goto do_default; - if (entry->got_entry || entry->fdgot_entry || entry->fd_entry) - { - /* If the symbol is dynamic, consider it for dynamic - relocations, otherwise decay to section + offset. */ - if (entry->symndx == -1 && entry->d.h->dynindx != -1) - dynindx = entry->d.h->dynindx; - else - { - if (sec->output_section - && ! bfd_is_abs_section (sec->output_section) - && ! bfd_is_und_section (sec->output_section)) - dynindx = elf_section_data (sec->output_section)->dynindx; - else - dynindx = 0; - } - } + default: + do_default: + r = bfin_final_link_relocate (rel, howto, input_bfd, input_section, + contents, address, + relocation, rel->r_addend); - /* Generate relocation for GOT entry pointing to the symbol. */ - if (entry->got_entry) - { - int idx = dynindx; - bfd_vma ad = addend; + break; + } - /* If the symbol is dynamic but binds locally, use - section+offset. */ - if (sec && (entry->symndx != -1 - || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + /* Dynamic relocs are not propagated for SEC_DEBUGGING sections + because such sections are not SEC_ALLOC and thus ld.so will + not process them. */ + if (unresolved_reloc + && !((input_section->flags & SEC_DEBUGGING) != 0 && h->def_dynamic)) { - if (entry->symndx == -1) - ad += entry->d.h->root.u.def.value; - else - ad += sym->st_value; - ad += sec->output_offset; - if (sec->output_section && elf_section_data (sec->output_section)) - idx = elf_section_data (sec->output_section)->dynindx; - else - idx = 0; + (*_bfd_error_handler) + (_("%B(%A+0x%lx): unresolvable relocation against symbol `%s'"), + input_bfd, + input_section, (long) rel->r_offset, h->root.root.string); + return FALSE; } - /* If we're linking an executable at a fixed address, we can - omit the dynamic relocation as long as the symbol is local to - this module. */ - if (info->executable && !info->pie - && (entry->symndx != -1 - || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + if (r != bfd_reloc_ok) { - if (sec) - ad += sec->output_section->vma; - if (entry->symndx != -1 - || entry->d.h->root.type != bfd_link_hash_undefweak) - _bfinfdpic_add_rofixup (output_bfd, - bfinfdpic_gotfixup_section (info), - bfinfdpic_got_section (info)->output_section - ->vma - + bfinfdpic_got_section (info)->output_offset - + bfinfdpic_got_initial_offset (info) - + entry->got_entry, entry); - } - else - _bfinfdpic_add_dyn_reloc (output_bfd, bfinfdpic_gotrel_section (info), - _bfd_elf_section_offset - (output_bfd, info, - bfinfdpic_got_section (info), - bfinfdpic_got_initial_offset (info) - + entry->got_entry) - + bfinfdpic_got_section (info) - ->output_section->vma - + bfinfdpic_got_section (info)->output_offset, - R_byte4_data, idx, ad, entry); + const char *name; - bfd_put_32 (output_bfd, ad, - bfinfdpic_got_section (info)->contents - + bfinfdpic_got_initial_offset (info) - + entry->got_entry); + 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) + return FALSE; + if (*name == '\0') + name = bfd_section_name (input_bfd, sec); + } + + if (r == 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; + } + else + { + (*_bfd_error_handler) + (_("%B(%A+0x%lx): reloc against `%s': error %d"), + input_bfd, input_section, + (long) rel->r_offset, name, (int) r); + return FALSE; + } + } } - /* Generate relocation for GOT entry pointing to a canonical - function descriptor. */ - if (entry->fdgot_entry) - { - int reloc, idx; - bfd_vma ad = 0; + return TRUE; +} - if (! (entry->symndx == -1 - && entry->d.h->root.type == bfd_link_hash_undefweak - && BFINFDPIC_SYM_LOCAL (info, entry->d.h))) - { - /* If the symbol is dynamic and there may be dynamic symbol - resolution because we are, or are linked with, a shared - library, emit a FUNCDESC relocation such that the dynamic - linker will allocate the function descriptor. If the - symbol needs a non-local function descriptor but binds - locally (e.g., its visibility is protected, emit a - dynamic relocation decayed to section+offset. */ - if (entry->symndx == -1 - && ! BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h) - && BFINFDPIC_SYM_LOCAL (info, entry->d.h) - && !(info->executable && !info->pie)) - { - reloc = R_BFIN_FUNCDESC; - idx = elf_section_data (entry->d.h->root.u.def.section - ->output_section)->dynindx; - ad = entry->d.h->root.u.def.section->output_offset - + entry->d.h->root.u.def.value; - } - else if (entry->symndx == -1 - && ! BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h)) - { - reloc = R_BFIN_FUNCDESC; - idx = dynindx; - ad = addend; - if (ad) - return FALSE; - } - else - { - /* Otherwise, we know we have a private function descriptor, - so reference it directly. */ - if (elf_hash_table (info)->dynamic_sections_created) - BFD_ASSERT (entry->privfd); - reloc = R_byte4_data; - idx = elf_section_data (bfinfdpic_got_section (info) - ->output_section)->dynindx; - ad = bfinfdpic_got_section (info)->output_offset - + bfinfdpic_got_initial_offset (info) + entry->fd_entry; - } +static asection * +bfin_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_BFIN_GNU_VTINHERIT: + case R_BFIN_GNU_VTENTRY: + return NULL; + } - /* If there is room for dynamic symbol resolution, emit the - dynamic relocation. However, if we're linking an - executable at a fixed location, we won't have emitted a - dynamic symbol entry for the got section, so idx will be - zero, which means we can and should compute the address - of the private descriptor ourselves. */ - if (info->executable && !info->pie - && (entry->symndx != -1 - || BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h))) - { - ad += bfinfdpic_got_section (info)->output_section->vma; - _bfinfdpic_add_rofixup (output_bfd, - bfinfdpic_gotfixup_section (info), - bfinfdpic_got_section (info) - ->output_section->vma - + bfinfdpic_got_section (info) - ->output_offset - + bfinfdpic_got_initial_offset (info) - + entry->fdgot_entry, entry); - } - else - _bfinfdpic_add_dyn_reloc (output_bfd, - bfinfdpic_gotrel_section (info), - _bfd_elf_section_offset - (output_bfd, info, - bfinfdpic_got_section (info), - bfinfdpic_got_initial_offset (info) - + entry->fdgot_entry) - + bfinfdpic_got_section (info) - ->output_section->vma - + bfinfdpic_got_section (info) - ->output_offset, - reloc, idx, ad, entry); - } + return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); +} - bfd_put_32 (output_bfd, ad, - bfinfdpic_got_section (info)->contents - + bfinfdpic_got_initial_offset (info) - + entry->fdgot_entry); - } +/* Update the got entry reference counts for the section being removed. */ - /* Generate relocation to fill in a private function descriptor in - the GOT. */ - if (entry->fd_entry) - { - int idx = dynindx; - bfd_vma ad = addend; - bfd_vma ofst; - long lowword, highword; +static bfd_boolean +bfin_gc_sweep_hook (bfd * abfd, + struct bfd_link_info *info, + asection * sec, + const Elf_Internal_Rela * relocs) +{ + Elf_Internal_Shdr *symtab_hdr; + struct elf_link_hash_entry **sym_hashes; + bfd_signed_vma *local_got_refcounts; + const Elf_Internal_Rela *rel, *relend; + bfd *dynobj; + asection *sgot; + asection *srelgot; - /* If the symbol is dynamic but binds locally, use - section+offset. */ - if (sec && (entry->symndx != -1 - || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) - { - if (entry->symndx == -1) - ad += entry->d.h->root.u.def.value; - else - ad += sym->st_value; - ad += sec->output_offset; - if (sec->output_section && elf_section_data (sec->output_section)) - idx = elf_section_data (sec->output_section)->dynindx; - else - idx = 0; - } + dynobj = elf_hash_table (info)->dynobj; + if (dynobj == NULL) + return TRUE; - /* If we're linking an executable at a fixed address, we can - omit the dynamic relocation as long as the symbol is local to - this module. */ - if (info->executable && !info->pie - && (entry->symndx != -1 || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (abfd); + local_got_refcounts = elf_local_got_refcounts (abfd); + + sgot = bfd_get_section_by_name (dynobj, ".got"); + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + + relend = relocs + sec->reloc_count; + for (rel = relocs; rel < relend; rel++) + { + unsigned long r_symndx; + struct elf_link_hash_entry *h; + + switch (ELF32_R_TYPE (rel->r_info)) { - if (sec) - ad += sec->output_section->vma; - ofst = 0; - if (entry->symndx != -1 - || entry->d.h->root.type != bfd_link_hash_undefweak) + case R_BFIN_GOT: + r_symndx = ELF32_R_SYM (rel->r_info); + if (r_symndx >= symtab_hdr->sh_info) { - _bfinfdpic_add_rofixup (output_bfd, - bfinfdpic_gotfixup_section (info), - bfinfdpic_got_section (info) - ->output_section->vma - + bfinfdpic_got_section (info) - ->output_offset - + bfinfdpic_got_initial_offset (info) - + entry->fd_entry, entry); - _bfinfdpic_add_rofixup (output_bfd, - bfinfdpic_gotfixup_section (info), - bfinfdpic_got_section (info) - ->output_section->vma - + bfinfdpic_got_section (info) - ->output_offset - + bfinfdpic_got_initial_offset (info) - + entry->fd_entry + 4, entry); + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + if (h->got.refcount > 0) + { + --h->got.refcount; + if (h->got.refcount == 0) + { + /* We don't need the .got entry any more. */ + sgot->size -= 4; + srelgot->size -= sizeof (Elf32_External_Rela); + } + } } + else if (local_got_refcounts != NULL) + { + if (local_got_refcounts[r_symndx] > 0) + { + --local_got_refcounts[r_symndx]; + if (local_got_refcounts[r_symndx] == 0) + { + /* We don't need the .got entry any more. */ + sgot->size -= 4; + if (info->shared) + srelgot->size -= sizeof (Elf32_External_Rela); + } + } + } + break; + default: + break; } - else - { - ofst - = _bfinfdpic_add_dyn_reloc (output_bfd, - entry->lazyplt - ? bfinfdpic_pltrel_section (info) - : bfinfdpic_gotrel_section (info), - _bfd_elf_section_offset - (output_bfd, info, - bfinfdpic_got_section (info), - bfinfdpic_got_initial_offset (info) - + entry->fd_entry) - + bfinfdpic_got_section (info) - ->output_section->vma - + bfinfdpic_got_section (info) - ->output_offset, - R_BFIN_FUNCDESC_VALUE, idx, ad, entry); - } + } + return TRUE; +} + +extern const bfd_target bfd_elf32_bfinfdpic_vec; +#define IS_FDPIC(bfd) ((bfd)->xvec == &bfd_elf32_bfinfdpic_vec) - /* If we've omitted the dynamic relocation, just emit the fixed - addresses of the symbol and of the local GOT base offset. */ - if (info->executable && !info->pie && sec && sec->output_section) - { - lowword = ad; - highword = bfinfdpic_got_section (info)->output_section->vma - + bfinfdpic_got_section (info)->output_offset - + bfinfdpic_got_initial_offset (info); - } - else if (entry->lazyplt) - { - if (ad) - return FALSE; +/* An extension of the elf hash table data structure, containing some + additional Blackfin-specific data. */ +struct bfinfdpic_elf_link_hash_table +{ + struct elf_link_hash_table elf; - fd_lazy_rel_offset = ofst; - - /* A function descriptor used for lazy or local resolving is - initialized such that its high word contains the output - section index in which the PLT entries are located, and - the low word contains the address of the lazy PLT entry - entry point, that must be within the memory region - assigned to that section. */ - lowword = entry->lzplt_entry + 4 - + bfinfdpic_plt_section (info)->output_offset - + bfinfdpic_plt_section (info)->output_section->vma; - highword = _bfinfdpic_osec_to_segment - (output_bfd, bfinfdpic_plt_section (info)->output_section); - } - else - { - /* A function descriptor for a local function gets the index - of the section. For a non-local function, it's - disregarded. */ - lowword = ad; - if (entry->symndx == -1 && entry->d.h->dynindx != -1 - && entry->d.h->dynindx == idx) - highword = 0; - else - highword = _bfinfdpic_osec_to_segment - (output_bfd, sec->output_section); - } - - bfd_put_32 (output_bfd, lowword, - bfinfdpic_got_section (info)->contents - + bfinfdpic_got_initial_offset (info) - + entry->fd_entry); - bfd_put_32 (output_bfd, highword, - bfinfdpic_got_section (info)->contents - + bfinfdpic_got_initial_offset (info) - + entry->fd_entry + 4); - } - - /* Generate code for the PLT entry. */ - if (entry->plt_entry != (bfd_vma) -1) - { - bfd_byte *plt_code = bfinfdpic_plt_section (info)->contents - + entry->plt_entry; - - BFD_ASSERT (entry->fd_entry); + /* A pointer to the .got section. */ + asection *sgot; + /* A pointer to the .rel.got section. */ + asection *sgotrel; + /* A pointer to the .rofixup section. */ + asection *sgotfixup; + /* A pointer to the .plt section. */ + asection *splt; + /* A pointer to the .rel.plt section. */ + asection *spltrel; + /* GOT base offset. */ + bfd_vma got0; + /* Location of the first non-lazy PLT entry, i.e., the number of + bytes taken by lazy PLT entries. */ + bfd_vma plt0; + /* A hash table holding information about which symbols were + referenced with which PIC-related relocations. */ + struct htab *relocs_info; + /* Summary reloc information collected by + _bfinfdpic_count_got_plt_entries. */ + struct _bfinfdpic_dynamic_got_info *g; +}; - /* Figure out what kind of PLT entry we need, depending on the - location of the function descriptor within the GOT. */ - if (entry->fd_entry >= -(1 << (18 - 1)) - && entry->fd_entry + 4 < (1 << (18 - 1))) - { - /* P1 = [P3 + fd_entry]; P3 = [P3 + fd_entry + 4] */ - bfd_put_32 (output_bfd, - 0xe519 | ((entry->fd_entry << 14) & 0xFFFF0000), - plt_code); - bfd_put_32 (output_bfd, - 0xe51b | (((entry->fd_entry + 4) << 14) & 0xFFFF0000), - plt_code + 4); - plt_code += 8; - } - else - { - /* P1.L = fd_entry; P1.H = fd_entry; - P3 = P3 + P1; - P1 = [P3]; - P3 = [P3 + 4]; */ - bfd_put_32 (output_bfd, - 0xe109 | (entry->fd_entry << 16), - plt_code); - bfd_put_32 (output_bfd, - 0xe149 | (entry->fd_entry & 0xFFFF0000), - plt_code + 4); - bfd_put_16 (output_bfd, 0x5ad9, plt_code + 8); - bfd_put_16 (output_bfd, 0x9159, plt_code + 10); - bfd_put_16 (output_bfd, 0xac5b, plt_code + 12); - plt_code += 14; - } - /* JUMP (P1) */ - bfd_put_16 (output_bfd, 0x0051, plt_code); - } +/* Get the Blackfin ELF linker hash table from a link_info structure. */ - /* Generate code for the lazy PLT entry. */ - if (entry->lzplt_entry != (bfd_vma) -1) - { - bfd_byte *lzplt_code = bfinfdpic_plt_section (info)->contents - + entry->lzplt_entry; - bfd_vma resolverStub_addr; +#define bfinfdpic_hash_table(info) \ + ((struct bfinfdpic_elf_link_hash_table *) ((info)->hash)) - bfd_put_32 (output_bfd, fd_lazy_rel_offset, lzplt_code); - lzplt_code += 4; +#define bfinfdpic_got_section(info) \ + (bfinfdpic_hash_table (info)->sgot) +#define bfinfdpic_gotrel_section(info) \ + (bfinfdpic_hash_table (info)->sgotrel) +#define bfinfdpic_gotfixup_section(info) \ + (bfinfdpic_hash_table (info)->sgotfixup) +#define bfinfdpic_plt_section(info) \ + (bfinfdpic_hash_table (info)->splt) +#define bfinfdpic_pltrel_section(info) \ + (bfinfdpic_hash_table (info)->spltrel) +#define bfinfdpic_relocs_info(info) \ + (bfinfdpic_hash_table (info)->relocs_info) +#define bfinfdpic_got_initial_offset(info) \ + (bfinfdpic_hash_table (info)->got0) +#define bfinfdpic_plt_initial_offset(info) \ + (bfinfdpic_hash_table (info)->plt0) +#define bfinfdpic_dynamic_got_plt_info(info) \ + (bfinfdpic_hash_table (info)->g) - resolverStub_addr = entry->lzplt_entry / BFINFDPIC_LZPLT_BLOCK_SIZE - * BFINFDPIC_LZPLT_BLOCK_SIZE + BFINFDPIC_LZPLT_RESOLV_LOC; - if (resolverStub_addr >= bfinfdpic_plt_initial_offset (info)) - resolverStub_addr = bfinfdpic_plt_initial_offset (info) - LZPLT_NORMAL_SIZE - LZPLT_RESOLVER_EXTRA; +/* The name of the dynamic interpreter. This is put in the .interp + section. */ - if (entry->lzplt_entry == resolverStub_addr) - { - /* This is a lazy PLT entry that includes a resolver call. - P2 = [P3]; - R3 = [P3 + 4]; - JUMP (P2); */ - bfd_put_32 (output_bfd, - 0xa05b915a, - lzplt_code); - bfd_put_16 (output_bfd, 0x0052, lzplt_code + 4); - } - else - { - /* JUMP.S resolverStub */ - bfd_put_16 (output_bfd, - 0x2000 - | (((resolverStub_addr - entry->lzplt_entry) - / 2) & (((bfd_vma)1 << 12) - 1)), - lzplt_code); - } - } +#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" - return TRUE; -} +#define DEFAULT_STACK_SIZE 0x20000 +/* This structure is used to collect the number of entries present in + each addressable range of the got. */ +struct _bfinfdpic_dynamic_got_info +{ + /* Several bits of information about the current link. */ + struct bfd_link_info *info; + /* Total size needed for GOT entries within the 18- or 32-bit + ranges. */ + bfd_vma got17m4, gothilo; + /* Total size needed for function descriptor entries within the 18- + or 32-bit ranges. */ + bfd_vma fd17m4, fdhilo; + /* Total size needed function descriptor entries referenced in PLT + entries, that would be profitable to place in offsets close to + the PIC register. */ + bfd_vma fdplt; + /* Total size needed by lazy PLT entries. */ + bfd_vma lzplt; + /* Number of relocations carried over from input object files. */ + unsigned long relocs; + /* Number of fixups introduced by relocations in input object files. */ + unsigned long fixups; +}; -/* Look through the relocs for a section during the first phase, and - allocate space in the global offset table or procedure linkage - table. */ +/* Create a Blackfin ELF linker hash table. */ -static bfd_boolean -bfin_check_relocs (bfd * abfd, - struct bfd_link_info *info, - asection *sec, - const Elf_Internal_Rela *relocs) +static struct bfd_link_hash_table * +bfinfdpic_elf_link_hash_table_create (bfd *abfd) { - bfd *dynobj; - Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes; - bfd_signed_vma *local_got_refcounts; - const Elf_Internal_Rela *rel; - const Elf_Internal_Rela *rel_end; - asection *sgot; - asection *srelgot; - asection *sreloc; - if (info->relocatable) - return TRUE; - - dynobj = elf_hash_table (info)->dynobj; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - sym_hashes = elf_sym_hashes (abfd); - local_got_refcounts = elf_local_got_refcounts (abfd); + struct bfinfdpic_elf_link_hash_table *ret; + bfd_size_type amt = sizeof (struct bfinfdpic_elf_link_hash_table); - sgot = NULL; - srelgot = NULL; - sreloc = NULL; + ret = bfd_zalloc (abfd, amt); + if (ret == NULL) + return NULL; - rel_end = relocs + sec->reloc_count; - for (rel = relocs; rel < rel_end; rel++) + if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, + _bfd_elf_link_hash_newfunc, + sizeof (struct elf_link_hash_entry))) { - unsigned long r_symndx; - struct elf_link_hash_entry *h; - - 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]; - - switch (ELF32_R_TYPE (rel->r_info)) - { - /* This relocation describes the C++ object vtable hierarchy. - Reconstruct it for later use during GC. */ - case R_BFIN_GNU_VTINHERIT: - if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) - return FALSE; - break; + free (ret); + return NULL; + } - /* This relocation describes which C++ vtable entries - are actually used. Record for later use during GC. */ - case R_BFIN_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) - return FALSE; - break; + return &ret->elf.root; +} - case R_got: - if (h != NULL - && strcmp (h->root.root.string, "__GLOBAL_OFFSET_TABLE_") == 0) - break; - /* Fall through. */ +/* Decide whether a reference to a symbol can be resolved locally or + not. If the symbol is protected, we want the local address, but + its function descriptor must be assigned by the dynamic linker. */ +#define BFINFDPIC_SYM_LOCAL(INFO, H) \ + (_bfd_elf_symbol_refs_local_p ((H), (INFO), 1) \ + || ! elf_hash_table (INFO)->dynamic_sections_created) +#define BFINFDPIC_FUNCDESC_LOCAL(INFO, H) \ + ((H)->dynindx == -1 || ! elf_hash_table (INFO)->dynamic_sections_created) - if (dynobj == NULL) - { - /* Create the .got section. */ - elf_hash_table (info)->dynobj = dynobj = abfd; - if (!_bfd_elf_create_got_section (dynobj, info)) - return FALSE; - } - - if (sgot == NULL) - { - sgot = bfd_get_section_by_name (dynobj, ".got"); - BFD_ASSERT (sgot != NULL); - } +/* This structure collects information on what kind of GOT, PLT or + function descriptors are required by relocations that reference a + certain symbol. */ +struct bfinfdpic_relocs_info +{ + /* The index of the symbol, as stored in the relocation r_info, if + we have a local symbol; -1 otherwise. */ + long symndx; + union + { + /* The input bfd in which the symbol is defined, if it's a local + symbol. */ + bfd *abfd; + /* If symndx == -1, the hash table entry corresponding to a global + symbol (even if it turns out to bind locally, in which case it + should ideally be replaced with section's symndx + addend). */ + struct elf_link_hash_entry *h; + } d; + /* The addend of the relocation that references the symbol. */ + bfd_vma addend; - if (srelgot == NULL && (h != NULL || info->shared)) - { - srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); - if (srelgot == NULL) - { - 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_alignment (dynobj, srelgot, 2)) - return FALSE; - } - } + /* The fields above are used to identify an entry. The fields below + contain information on how an entry is used and, later on, which + locations it was assigned. */ + /* The following 2 fields record whether the symbol+addend above was + ever referenced with a GOT relocation. The 17M4 suffix indicates a + GOT17M4 relocation; hilo is used for GOTLO/GOTHI pairs. */ + unsigned got17m4; + unsigned gothilo; + /* Whether a FUNCDESC relocation references symbol+addend. */ + unsigned fd; + /* Whether a FUNCDESC_GOT relocation references symbol+addend. */ + unsigned fdgot17m4; + unsigned fdgothilo; + /* Whether a FUNCDESC_GOTOFF relocation references symbol+addend. */ + unsigned fdgoff17m4; + unsigned fdgoffhilo; + /* Whether symbol+addend is referenced with GOTOFF17M4, GOTOFFLO or + GOTOFFHI relocations. The addend doesn't really matter, since we + envision that this will only be used to check whether the symbol + is mapped to the same segment as the got. */ + unsigned gotoff; + /* Whether symbol+addend is referenced by a LABEL24 relocation. */ + unsigned call; + /* Whether symbol+addend is referenced by a 32 or FUNCDESC_VALUE + relocation. */ + unsigned sym; + /* Whether we need a PLT entry for a symbol. Should be implied by + something like: + (call && symndx == -1 && ! BFINFDPIC_SYM_LOCAL (info, d.h)) */ + unsigned plt:1; + /* Whether a function descriptor should be created in this link unit + for symbol+addend. Should be implied by something like: + (plt || fdgotoff17m4 || fdgotofflohi + || ((fd || fdgot17m4 || fdgothilo) + && (symndx != -1 || BFINFDPIC_FUNCDESC_LOCAL (info, d.h)))) */ + unsigned privfd:1; + /* Whether a lazy PLT entry is needed for this symbol+addend. + Should be implied by something like: + (privfd && symndx == -1 && ! BFINFDPIC_SYM_LOCAL (info, d.h) + && ! (info->flags & DF_BIND_NOW)) */ + unsigned lazyplt:1; + /* Whether we've already emitted GOT relocations and PLT entries as + needed for this symbol. */ + unsigned done:1; - if (h != NULL) - { - if (h->got.refcount == 0) - { - /* Make sure this symbol is output as a dynamic symbol. */ - if (h->dynindx == -1 && !h->forced_local) - { - if (!bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; - } + /* The number of R_BFIN_BYTE4_DATA, R_BFIN_FUNCDESC and R_BFIN_FUNCDESC_VALUE + relocations referencing the symbol. */ + unsigned relocs32, relocsfd, relocsfdv; - /* Allocate space in the .got section. */ - sgot->size += 4; - /* Allocate relocation space. */ - srelgot->size += sizeof (Elf32_External_Rela); - } - h->got.refcount++; - } - else - { - /* This is a global offset table entry for a local symbol. */ - if (local_got_refcounts == NULL) - { - bfd_size_type size; + /* The number of .rofixups entries and dynamic relocations allocated + for this symbol, minus any that might have already been used. */ + unsigned fixups, dynrelocs; - size = symtab_hdr->sh_info; - size *= sizeof (bfd_signed_vma); - local_got_refcounts = ((bfd_signed_vma *) - bfd_zalloc (abfd, size)); - if (local_got_refcounts == NULL) - return FALSE; - elf_local_got_refcounts (abfd) = local_got_refcounts; - } - if (local_got_refcounts[r_symndx] == 0) - { - sgot->size += 4; - if (info->shared) - { - /* If we are generating a shared object, we need to - output a R_68K_RELATIVE reloc so that the dynamic - linker can adjust this GOT entry. */ - srelgot->size += sizeof (Elf32_External_Rela); - } - } - local_got_refcounts[r_symndx]++; - } - break; + /* The offsets of the GOT entries assigned to symbol+addend, to the + function descriptor's address, and to a function descriptor, + respectively. Should be zero if unassigned. The offsets are + counted from the value that will be assigned to the PIC register, + not from the beginning of the .got section. */ + bfd_signed_vma got_entry, fdgot_entry, fd_entry; + /* The offsets of the PLT entries assigned to symbol+addend, + non-lazy and lazy, respectively. If unassigned, should be + (bfd_vma)-1. */ + bfd_vma plt_entry, lzplt_entry; +}; - default: - break; - } - } +/* Compute a hash with the key fields of an bfinfdpic_relocs_info entry. */ +static hashval_t +bfinfdpic_relocs_info_hash (const void *entry_) +{ + const struct bfinfdpic_relocs_info *entry = entry_; - return TRUE; + return (entry->symndx == -1 + ? (long) entry->d.h->root.root.hash + : entry->symndx + (long) entry->d.abfd->id * 257) + entry->addend; } -static enum elf_reloc_type_class -elf32_bfin_reloc_type_class (const Elf_Internal_Rela * rela) +/* Test whether the key fields of two bfinfdpic_relocs_info entries are + identical. */ +static int +bfinfdpic_relocs_info_eq (const void *entry1, const void *entry2) { - switch ((int) ELF32_R_TYPE (rela->r_info)) - { - default: - return reloc_class_normal; - } + const struct bfinfdpic_relocs_info *e1 = entry1; + const struct bfinfdpic_relocs_info *e2 = entry2; + + return e1->symndx == e2->symndx && e1->addend == e2->addend + && (e1->symndx == -1 ? e1->d.h == e2->d.h : e1->d.abfd == e2->d.abfd); } - -/* Relocate an Blackfin ELF section. - The RELOCATE_SECTION function is called by the new ELF backend linker - to handle the relocations for a section. +/* Find or create an entry in a hash table HT that matches the key + fields of the given ENTRY. If it's not found, memory for a new + entry is allocated in ABFD's obstack. */ +static struct bfinfdpic_relocs_info * +bfinfdpic_relocs_info_find (struct htab *ht, + bfd *abfd, + const struct bfinfdpic_relocs_info *entry, + enum insert_option insert) +{ + struct bfinfdpic_relocs_info **loc; - The relocs are always passed as Rela structures; if the section - actually uses Rel structures, the r_addend field will always be - zero. + if (!ht) + return NULL; - 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. + loc = (struct bfinfdpic_relocs_info **) htab_find_slot (ht, entry, insert); - This function does not have to worry about setting the reloc - address or the reloc symbol index. + if (! loc) + return NULL; - LOCAL_SYMS is a pointer to the swapped in local symbols. + if (*loc) + return *loc; - LOCAL_SECTIONS is an array giving the section in the input file - corresponding to the st_shndx field of each local symbol. + *loc = bfd_zalloc (abfd, sizeof (**loc)); - The global hash table entry for the global symbols can be found - via elf_sym_hashes (input_bfd). + if (! *loc) + return *loc; - 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. */ + (*loc)->symndx = entry->symndx; + (*loc)->d = entry->d; + (*loc)->addend = entry->addend; + (*loc)->plt_entry = (bfd_vma)-1; + (*loc)->lzplt_entry = (bfd_vma)-1; -static bfd_boolean -bfinfdpic_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) + return *loc; +} + +/* Obtain the address of the entry in HT associated with H's symbol + + addend, creating a new entry if none existed. ABFD is only used + for memory allocation purposes. */ +inline static struct bfinfdpic_relocs_info * +bfinfdpic_relocs_info_for_global (struct htab *ht, + bfd *abfd, + struct elf_link_hash_entry *h, + bfd_vma addend, + enum insert_option insert) { - Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes; - Elf_Internal_Rela *rel; - Elf_Internal_Rela *relend; - unsigned isec_segment, got_segment, plt_segment, - check_segment[2]; - int silence_segment_error = !(info->shared || info->pie); + struct bfinfdpic_relocs_info entry; - symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; - sym_hashes = elf_sym_hashes (input_bfd); - relend = relocs + input_section->reloc_count; + entry.symndx = -1; + entry.d.h = h; + entry.addend = addend; - isec_segment = _bfinfdpic_osec_to_segment (output_bfd, - input_section->output_section); - if (IS_FDPIC (output_bfd) && bfinfdpic_got_section (info)) - got_segment = _bfinfdpic_osec_to_segment (output_bfd, - bfinfdpic_got_section (info) - ->output_section); - else - got_segment = -1; - if (IS_FDPIC (output_bfd) && elf_hash_table (info)->dynamic_sections_created) - plt_segment = _bfinfdpic_osec_to_segment (output_bfd, - bfinfdpic_plt_section (info) - ->output_section); - else - plt_segment = -1; + return bfinfdpic_relocs_info_find (ht, abfd, &entry, insert); +} - 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; - asection *osec; - struct bfinfdpic_relocs_info *picrel; - bfd_vma orig_addend = rel->r_addend; +/* Obtain the address of the entry in HT associated with the SYMNDXth + local symbol of the input bfd ABFD, plus the addend, creating a new + entry if none existed. */ +inline static struct bfinfdpic_relocs_info * +bfinfdpic_relocs_info_for_local (struct htab *ht, + bfd *abfd, + long symndx, + bfd_vma addend, + enum insert_option insert) +{ + struct bfinfdpic_relocs_info entry; - r_type = ELF32_R_TYPE (rel->r_info); + entry.symndx = symndx; + entry.d.abfd = abfd; + entry.addend = addend; - if (r_type == R_BFIN_GNU_VTINHERIT - || r_type == R_BFIN_GNU_VTENTRY) - continue; + return bfinfdpic_relocs_info_find (ht, abfd, &entry, insert); +} - r_symndx = ELF32_R_SYM (rel->r_info); - howto = bfin_reloc_type_lookup (input_bfd, r_type); - if (howto == NULL) - { - bfd_set_error (bfd_error_bad_value); - return FALSE; - } +/* Merge fields set by check_relocs() of two entries that end up being + mapped to the same (presumably global) symbol. */ - h = NULL; - sym = NULL; - sec = NULL; +inline static void +bfinfdpic_pic_merge_early_relocs_info (struct bfinfdpic_relocs_info *e2, + struct bfinfdpic_relocs_info const *e1) +{ + e2->got17m4 |= e1->got17m4; + e2->gothilo |= e1->gothilo; + e2->fd |= e1->fd; + e2->fdgot17m4 |= e1->fdgot17m4; + e2->fdgothilo |= e1->fdgothilo; + e2->fdgoff17m4 |= e1->fdgoff17m4; + e2->fdgoffhilo |= e1->fdgoffhilo; + e2->gotoff |= e1->gotoff; + e2->call |= e1->call; + e2->sym |= e1->sym; +} - if (r_symndx < symtab_hdr->sh_info) - { - sym = local_syms + r_symndx; - osec = sec = local_sections [r_symndx]; - relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); +/* Every block of 65535 lazy PLT entries shares a single call to the + resolver, inserted in the 32768th lazy PLT entry (i.e., entry # + 32767, counting from 0). All other lazy PLT entries branch to it + in a single instruction. */ - 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; - } - else - { - bfd_boolean warned; - bfd_boolean unresolved_reloc; +#define LZPLT_RESOLVER_EXTRA 10 +#define LZPLT_NORMAL_SIZE 6 +#define LZPLT_ENTRIES 1362 - RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, - r_symndx, symtab_hdr, sym_hashes, - h, sec, relocation, - unresolved_reloc, warned); - osec = sec; - } +#define BFINFDPIC_LZPLT_BLOCK_SIZE ((bfd_vma) LZPLT_NORMAL_SIZE * LZPLT_ENTRIES + LZPLT_RESOLVER_EXTRA) +#define BFINFDPIC_LZPLT_RESOLV_LOC (LZPLT_NORMAL_SIZE * LZPLT_ENTRIES / 2) - 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; - } +/* Add a dynamic relocation to the SRELOC section. */ - if (info->relocatable) - continue; +inline static bfd_vma +_bfinfdpic_add_dyn_reloc (bfd *output_bfd, asection *sreloc, bfd_vma offset, + int reloc_type, long dynindx, bfd_vma addend, + struct bfinfdpic_relocs_info *entry) +{ + Elf_Internal_Rela outrel; + bfd_vma reloc_offset; - 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; - } + outrel.r_offset = offset; + outrel.r_info = ELF32_R_INFO (dynindx, reloc_type); + outrel.r_addend = addend; - switch (r_type) - { - case R_pcrel24: - case R_pcrel24_jump_l: - case R_byte4_data: - if (! IS_FDPIC (output_bfd)) - goto non_fdpic; + reloc_offset = sreloc->reloc_count * sizeof (Elf32_External_Rel); + BFD_ASSERT (reloc_offset < sreloc->size); + bfd_elf32_swap_reloc_out (output_bfd, &outrel, + sreloc->contents + reloc_offset); + sreloc->reloc_count++; - case R_BFIN_GOT17M4: - case R_BFIN_GOTHI: - case R_BFIN_GOTLO: - case R_BFIN_FUNCDESC_GOT17M4: - case R_BFIN_FUNCDESC_GOTHI: - case R_BFIN_FUNCDESC_GOTLO: - case R_BFIN_GOTOFF17M4: - case R_BFIN_GOTOFFHI: - case R_BFIN_GOTOFFLO: - case R_BFIN_FUNCDESC_GOTOFF17M4: - case R_BFIN_FUNCDESC_GOTOFFHI: - case R_BFIN_FUNCDESC_GOTOFFLO: - case R_BFIN_FUNCDESC: - case R_BFIN_FUNCDESC_VALUE: - if (h != NULL) - picrel = bfinfdpic_relocs_info_for_global (bfinfdpic_relocs_info - (info), input_bfd, h, - orig_addend, INSERT); - else - /* In order to find the entry we created before, we must - use the original addend, not the one that may have been - modified by _bfd_elf_rela_local_sym(). */ - picrel = bfinfdpic_relocs_info_for_local (bfinfdpic_relocs_info - (info), input_bfd, r_symndx, - orig_addend, INSERT); - if (! picrel) - return FALSE; + /* If the entry's index is zero, this relocation was probably to a + linkonce section that got discarded. We reserved a dynamic + relocation, but it was for another entry than the one we got at + the time of emitting the relocation. Unfortunately there's no + simple way for us to catch this situation, since the relocation + is cleared right before calling relocate_section, at which point + we no longer know what the relocation used to point to. */ + if (entry->symndx) + { + BFD_ASSERT (entry->dynrelocs > 0); + entry->dynrelocs--; + } - if (!_bfinfdpic_emit_got_relocs_plt_entries (picrel, output_bfd, info, - osec, sym, - rel->r_addend)) - { - (*_bfd_error_handler) - (_("%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend"), - input_bfd, input_section, rel->r_offset, name); - return FALSE; + return reloc_offset; +} - } +/* Add a fixup to the ROFIXUP section. */ - break; +static bfd_vma +_bfinfdpic_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset, + struct bfinfdpic_relocs_info *entry) +{ + bfd_vma fixup_offset; - default: - non_fdpic: - picrel = NULL; - if (h && ! BFINFDPIC_SYM_LOCAL (info, h)) - { - info->callbacks->warning - (info, _("relocation references symbol not defined in the module"), - name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - break; - } + if (rofixup->flags & SEC_EXCLUDE) + return -1; - switch (r_type) - { - case R_pcrel24: - case R_pcrel24_jump_l: - check_segment[0] = isec_segment; - if (! IS_FDPIC (output_bfd)) - check_segment[1] = isec_segment; - else if (picrel->plt) - { - relocation = bfinfdpic_plt_section (info)->output_section->vma - + bfinfdpic_plt_section (info)->output_offset - + picrel->plt_entry; - check_segment[1] = plt_segment; - } - /* We don't want to warn on calls to undefined weak symbols, - as calls to them must be protected by non-NULL tests - anyway, and unprotected calls would invoke undefined - behavior. */ - else if (picrel->symndx == -1 - && picrel->d.h->root.type == bfd_link_hash_undefweak) - check_segment[1] = check_segment[0]; - else - check_segment[1] = sec - ? _bfinfdpic_osec_to_segment (output_bfd, sec->output_section) - : (unsigned)-1; - break; + fixup_offset = rofixup->reloc_count * 4; + if (rofixup->contents) + { + BFD_ASSERT (fixup_offset < rofixup->size); + bfd_put_32 (output_bfd, offset, rofixup->contents + fixup_offset); + } + rofixup->reloc_count++; - case R_BFIN_GOT17M4: - case R_BFIN_GOTHI: - case R_BFIN_GOTLO: - relocation = picrel->got_entry; - check_segment[0] = check_segment[1] = got_segment; - break; + if (entry && entry->symndx) + { + /* See discussion about symndx == 0 in _bfinfdpic_add_dyn_reloc + above. */ + BFD_ASSERT (entry->fixups > 0); + entry->fixups--; + } - case R_BFIN_FUNCDESC_GOT17M4: - case R_BFIN_FUNCDESC_GOTHI: - case R_BFIN_FUNCDESC_GOTLO: - relocation = picrel->fdgot_entry; - check_segment[0] = check_segment[1] = got_segment; - break; - - case R_BFIN_GOTOFFHI: - case R_BFIN_GOTOFF17M4: - case R_BFIN_GOTOFFLO: - relocation -= bfinfdpic_got_section (info)->output_section->vma - + bfinfdpic_got_section (info)->output_offset - + bfinfdpic_got_initial_offset (info); - check_segment[0] = got_segment; - check_segment[1] = sec - ? _bfinfdpic_osec_to_segment (output_bfd, sec->output_section) - : (unsigned)-1; - break; + return fixup_offset; +} - case R_BFIN_FUNCDESC_GOTOFF17M4: - case R_BFIN_FUNCDESC_GOTOFFHI: - case R_BFIN_FUNCDESC_GOTOFFLO: - relocation = picrel->fd_entry; - check_segment[0] = check_segment[1] = got_segment; - break; +/* Find the segment number in which OSEC, and output section, is + located. */ - case R_BFIN_FUNCDESC: - { - int dynindx; - bfd_vma addend = rel->r_addend; +static unsigned +_bfinfdpic_osec_to_segment (bfd *output_bfd, asection *osec) +{ + Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section (output_bfd, osec); - if (! (h && h->root.type == bfd_link_hash_undefweak - && BFINFDPIC_SYM_LOCAL (info, h))) - { - /* If the symbol is dynamic and there may be dynamic - symbol resolution because we are or are linked with a - shared library, emit a FUNCDESC relocation such that - the dynamic linker will allocate the function - descriptor. If the symbol needs a non-local function - descriptor but binds locally (e.g., its visibility is - protected, emit a dynamic relocation decayed to - section+offset. */ - if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h) - && BFINFDPIC_SYM_LOCAL (info, h) - && !(info->executable && !info->pie)) - { - dynindx = elf_section_data (h->root.u.def.section - ->output_section)->dynindx; - addend += h->root.u.def.section->output_offset - + h->root.u.def.value; - } - else if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h)) - { - if (addend) - { - info->callbacks->warning - (info, _("R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"), - name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - dynindx = h->dynindx; - } - else - { - /* Otherwise, we know we have a private function - descriptor, so reference it directly. */ - BFD_ASSERT (picrel->privfd); - r_type = R_byte4_data; - dynindx = elf_section_data (bfinfdpic_got_section (info) - ->output_section)->dynindx; - addend = bfinfdpic_got_section (info)->output_offset - + bfinfdpic_got_initial_offset (info) - + picrel->fd_entry; - } + return (p != NULL) ? p - elf_tdata (output_bfd)->phdr : -1; +} - /* If there is room for dynamic symbol resolution, emit - the dynamic relocation. However, if we're linking an - executable at a fixed location, we won't have emitted a - dynamic symbol entry for the got section, so idx will - be zero, which means we can and should compute the - address of the private descriptor ourselves. */ - if (info->executable && !info->pie - && (!h || BFINFDPIC_FUNCDESC_LOCAL (info, h))) - { - addend += bfinfdpic_got_section (info)->output_section->vma; - if ((bfd_get_section_flags (output_bfd, - input_section->output_section) - & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) - { - if (_bfinfdpic_osec_readonly_p (output_bfd, - input_section - ->output_section)) - { - info->callbacks->warning - (info, - _("cannot emit fixups in read-only section"), - name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - _bfinfdpic_add_rofixup (output_bfd, - bfinfdpic_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); - } - } - else if ((bfd_get_section_flags (output_bfd, - input_section->output_section) - & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) - { - bfd_vma offset; +inline static bfd_boolean +_bfinfdpic_osec_readonly_p (bfd *output_bfd, asection *osec) +{ + unsigned seg = _bfinfdpic_osec_to_segment (output_bfd, osec); - if (_bfinfdpic_osec_readonly_p (output_bfd, - input_section - ->output_section)) - { - info->callbacks->warning - (info, - _("cannot emit dynamic relocations in read-only section"), - name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - 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; - } + return ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W); +} - /* We want the addend in-place because dynamic - relocations are REL. Setting relocation to it should - arrange for it to be installed. */ - relocation = addend - rel->r_addend; - } - check_segment[0] = check_segment[1] = got_segment; - break; +/* Generate relocations for GOT entries, function descriptors, and + code for PLT and lazy PLT entries. */ - case R_byte4_data: - if (! IS_FDPIC (output_bfd)) - { - check_segment[0] = check_segment[1] = -1; - break; - } - /* Fall through. */ - case R_BFIN_FUNCDESC_VALUE: - { - int dynindx; - bfd_vma addend = rel->r_addend; +inline static bfd_boolean +_bfinfdpic_emit_got_relocs_plt_entries (struct bfinfdpic_relocs_info *entry, + bfd *output_bfd, + struct bfd_link_info *info, + asection *sec, + Elf_Internal_Sym *sym, + bfd_vma addend) - /* If the symbol is dynamic but binds locally, use - section+offset. */ - if (h && ! BFINFDPIC_SYM_LOCAL (info, h)) - { - if (addend && r_type == R_BFIN_FUNCDESC_VALUE) - { - info->callbacks->warning - (info, _("R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"), - name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - dynindx = h->dynindx; - } - else - { - if (h) - addend += h->root.u.def.value; - else - addend += sym->st_value; - if (osec) - addend += osec->output_offset; - if (osec && osec->output_section - && ! bfd_is_abs_section (osec->output_section) - && ! bfd_is_und_section (osec->output_section)) - dynindx = elf_section_data (osec->output_section)->dynindx; - else - dynindx = 0; - } +{ + bfd_vma fd_lazy_rel_offset = (bfd_vma)-1; + int dynindx = -1; - /* If we're linking an executable at a fixed address, we - can omit the dynamic relocation as long as the symbol - is defined in the current link unit (which is implied - by its output section not being NULL). */ - if (info->executable && !info->pie - && (!h || BFINFDPIC_SYM_LOCAL (info, h))) - { - if (osec) - addend += osec->output_section->vma; - if (IS_FDPIC (input_bfd) - && (bfd_get_section_flags (output_bfd, - input_section->output_section) - & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) - { - if (_bfinfdpic_osec_readonly_p (output_bfd, - input_section - ->output_section)) - { - info->callbacks->warning - (info, - _("cannot emit fixups in read-only section"), - name, input_bfd, input_section, rel->r_offset); - return FALSE; - } - if (!h || h->root.type != bfd_link_hash_undefweak) - { - _bfinfdpic_add_rofixup (output_bfd, - bfinfdpic_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_BFIN_FUNCDESC_VALUE) - _bfinfdpic_add_rofixup - (output_bfd, - bfinfdpic_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); - } - } - } - else - { - if ((bfd_get_section_flags (output_bfd, - input_section->output_section) - & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) - { - if (_bfinfdpic_osec_readonly_p (output_bfd, - input_section - ->output_section)) - { - info->callbacks->warning - (info, - _("cannot emit dynamic relocations in read-only section"), - 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); - } - else if (osec) - addend += osec->output_section->vma; - /* We want the addend in-place because dynamic - relocations are REL. Setting relocation to it - should arrange for it to be installed. */ - relocation = addend - rel->r_addend; - } + if (entry->done) + return TRUE; + entry->done = 1; - if (r_type == R_BFIN_FUNCDESC_VALUE) - { - /* If we've omitted the dynamic relocation, just emit - the fixed addresses of the symbol and of the local - GOT base offset. */ - if (info->executable && !info->pie - && (!h || BFINFDPIC_SYM_LOCAL (info, h))) - bfd_put_32 (output_bfd, - bfinfdpic_got_section (info)->output_section->vma - + bfinfdpic_got_section (info)->output_offset - + bfinfdpic_got_initial_offset (info), - contents + rel->r_offset + 4); - else - /* A function descriptor used for lazy or local - resolving is initialized such that its high word - contains the output section index in which the - PLT entries are located, and the low word - contains the offset of the lazy PLT entry entry - point into that section. */ - bfd_put_32 (output_bfd, - h && ! BFINFDPIC_SYM_LOCAL (info, h) - ? 0 - : _bfinfdpic_osec_to_segment (output_bfd, - sec - ->output_section), - contents + rel->r_offset + 4); - } - } - check_segment[0] = check_segment[1] = got_segment; - break; + if (entry->got_entry || entry->fdgot_entry || entry->fd_entry) + { + /* If the symbol is dynamic, consider it for dynamic + relocations, otherwise decay to section + offset. */ + if (entry->symndx == -1 && entry->d.h->dynindx != -1) + dynindx = entry->d.h->dynindx; + else + { + if (sec + && sec->output_section + && ! bfd_is_abs_section (sec->output_section) + && ! bfd_is_und_section (sec->output_section)) + dynindx = elf_section_data (sec->output_section)->dynindx; + else + dynindx = 0; + } + } + + /* Generate relocation for GOT entry pointing to the symbol. */ + if (entry->got_entry) + { + int idx = dynindx; + bfd_vma ad = addend; + + /* If the symbol is dynamic but binds locally, use + section+offset. */ + if (sec && (entry->symndx != -1 + || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + { + if (entry->symndx == -1) + ad += entry->d.h->root.u.def.value; + else + ad += sym->st_value; + ad += sec->output_offset; + if (sec->output_section && elf_section_data (sec->output_section)) + idx = elf_section_data (sec->output_section)->dynindx; + else + idx = 0; + } + + /* If we're linking an executable at a fixed address, we can + omit the dynamic relocation as long as the symbol is local to + this module. */ + if (info->executable && !info->pie + && (entry->symndx != -1 + || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + { + if (sec) + ad += sec->output_section->vma; + if (entry->symndx != -1 + || entry->d.h->root.type != bfd_link_hash_undefweak) + _bfinfdpic_add_rofixup (output_bfd, + bfinfdpic_gotfixup_section (info), + bfinfdpic_got_section (info)->output_section + ->vma + + bfinfdpic_got_section (info)->output_offset + + bfinfdpic_got_initial_offset (info) + + entry->got_entry, entry); + } + else + _bfinfdpic_add_dyn_reloc (output_bfd, bfinfdpic_gotrel_section (info), + _bfd_elf_section_offset + (output_bfd, info, + bfinfdpic_got_section (info), + bfinfdpic_got_initial_offset (info) + + entry->got_entry) + + bfinfdpic_got_section (info) + ->output_section->vma + + bfinfdpic_got_section (info)->output_offset, + R_BFIN_BYTE4_DATA, idx, ad, entry); + + bfd_put_32 (output_bfd, ad, + bfinfdpic_got_section (info)->contents + + bfinfdpic_got_initial_offset (info) + + entry->got_entry); + } + + /* Generate relocation for GOT entry pointing to a canonical + function descriptor. */ + if (entry->fdgot_entry) + { + int reloc, idx; + bfd_vma ad = 0; + + if (! (entry->symndx == -1 + && entry->d.h->root.type == bfd_link_hash_undefweak + && BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + { + /* If the symbol is dynamic and there may be dynamic symbol + resolution because we are, or are linked with, a shared + library, emit a FUNCDESC relocation such that the dynamic + linker will allocate the function descriptor. If the + symbol needs a non-local function descriptor but binds + locally (e.g., its visibility is protected, emit a + dynamic relocation decayed to section+offset. */ + if (entry->symndx == -1 + && ! BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h) + && BFINFDPIC_SYM_LOCAL (info, entry->d.h) + && !(info->executable && !info->pie)) + { + reloc = R_BFIN_FUNCDESC; + idx = elf_section_data (entry->d.h->root.u.def.section + ->output_section)->dynindx; + ad = entry->d.h->root.u.def.section->output_offset + + entry->d.h->root.u.def.value; + } + else if (entry->symndx == -1 + && ! BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h)) + { + reloc = R_BFIN_FUNCDESC; + idx = dynindx; + ad = addend; + if (ad) + return FALSE; + } + else + { + /* Otherwise, we know we have a private function descriptor, + so reference it directly. */ + if (elf_hash_table (info)->dynamic_sections_created) + BFD_ASSERT (entry->privfd); + reloc = R_BFIN_BYTE4_DATA; + idx = elf_section_data (bfinfdpic_got_section (info) + ->output_section)->dynindx; + ad = bfinfdpic_got_section (info)->output_offset + + bfinfdpic_got_initial_offset (info) + entry->fd_entry; + } + + /* If there is room for dynamic symbol resolution, emit the + dynamic relocation. However, if we're linking an + executable at a fixed location, we won't have emitted a + dynamic symbol entry for the got section, so idx will be + zero, which means we can and should compute the address + of the private descriptor ourselves. */ + if (info->executable && !info->pie + && (entry->symndx != -1 + || BFINFDPIC_FUNCDESC_LOCAL (info, entry->d.h))) + { + ad += bfinfdpic_got_section (info)->output_section->vma; + _bfinfdpic_add_rofixup (output_bfd, + bfinfdpic_gotfixup_section (info), + bfinfdpic_got_section (info) + ->output_section->vma + + bfinfdpic_got_section (info) + ->output_offset + + bfinfdpic_got_initial_offset (info) + + entry->fdgot_entry, entry); + } + else + _bfinfdpic_add_dyn_reloc (output_bfd, + bfinfdpic_gotrel_section (info), + _bfd_elf_section_offset + (output_bfd, info, + bfinfdpic_got_section (info), + bfinfdpic_got_initial_offset (info) + + entry->fdgot_entry) + + bfinfdpic_got_section (info) + ->output_section->vma + + bfinfdpic_got_section (info) + ->output_offset, + reloc, idx, ad, entry); + } + + bfd_put_32 (output_bfd, ad, + bfinfdpic_got_section (info)->contents + + bfinfdpic_got_initial_offset (info) + + entry->fdgot_entry); + } + + /* Generate relocation to fill in a private function descriptor in + the GOT. */ + if (entry->fd_entry) + { + int idx = dynindx; + bfd_vma ad = addend; + bfd_vma ofst; + long lowword, highword; + + /* If the symbol is dynamic but binds locally, use + section+offset. */ + if (sec && (entry->symndx != -1 + || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + { + if (entry->symndx == -1) + ad += entry->d.h->root.u.def.value; + else + ad += sym->st_value; + ad += sec->output_offset; + if (sec->output_section && elf_section_data (sec->output_section)) + idx = elf_section_data (sec->output_section)->dynindx; + else + idx = 0; + } + + /* If we're linking an executable at a fixed address, we can + omit the dynamic relocation as long as the symbol is local to + this module. */ + if (info->executable && !info->pie + && (entry->symndx != -1 || BFINFDPIC_SYM_LOCAL (info, entry->d.h))) + { + if (sec) + ad += sec->output_section->vma; + ofst = 0; + if (entry->symndx != -1 + || entry->d.h->root.type != bfd_link_hash_undefweak) + { + _bfinfdpic_add_rofixup (output_bfd, + bfinfdpic_gotfixup_section (info), + bfinfdpic_got_section (info) + ->output_section->vma + + bfinfdpic_got_section (info) + ->output_offset + + bfinfdpic_got_initial_offset (info) + + entry->fd_entry, entry); + _bfinfdpic_add_rofixup (output_bfd, + bfinfdpic_gotfixup_section (info), + bfinfdpic_got_section (info) + ->output_section->vma + + bfinfdpic_got_section (info) + ->output_offset + + bfinfdpic_got_initial_offset (info) + + entry->fd_entry + 4, entry); + } + } + else + { + ofst + = _bfinfdpic_add_dyn_reloc (output_bfd, + entry->lazyplt + ? bfinfdpic_pltrel_section (info) + : bfinfdpic_gotrel_section (info), + _bfd_elf_section_offset + (output_bfd, info, + bfinfdpic_got_section (info), + bfinfdpic_got_initial_offset (info) + + entry->fd_entry) + + bfinfdpic_got_section (info) + ->output_section->vma + + bfinfdpic_got_section (info) + ->output_offset, + R_BFIN_FUNCDESC_VALUE, idx, ad, entry); + } + + /* If we've omitted the dynamic relocation, just emit the fixed + addresses of the symbol and of the local GOT base offset. */ + if (info->executable && !info->pie && sec && sec->output_section) + { + lowword = ad; + highword = bfinfdpic_got_section (info)->output_section->vma + + bfinfdpic_got_section (info)->output_offset + + bfinfdpic_got_initial_offset (info); + } + else if (entry->lazyplt) + { + if (ad) + return FALSE; + + fd_lazy_rel_offset = ofst; + + /* A function descriptor used for lazy or local resolving is + initialized such that its high word contains the output + section index in which the PLT entries are located, and + the low word contains the address of the lazy PLT entry + entry point, that must be within the memory region + assigned to that section. */ + lowword = entry->lzplt_entry + 4 + + bfinfdpic_plt_section (info)->output_offset + + bfinfdpic_plt_section (info)->output_section->vma; + highword = _bfinfdpic_osec_to_segment + (output_bfd, bfinfdpic_plt_section (info)->output_section); + } + else + { + /* A function descriptor for a local function gets the index + of the section. For a non-local function, it's + disregarded. */ + lowword = ad; + if (sec == NULL + || (entry->symndx == -1 && entry->d.h->dynindx != -1 + && entry->d.h->dynindx == idx)) + highword = 0; + else + highword = _bfinfdpic_osec_to_segment + (output_bfd, sec->output_section); + } + + bfd_put_32 (output_bfd, lowword, + bfinfdpic_got_section (info)->contents + + bfinfdpic_got_initial_offset (info) + + entry->fd_entry); + bfd_put_32 (output_bfd, highword, + bfinfdpic_got_section (info)->contents + + bfinfdpic_got_initial_offset (info) + + entry->fd_entry + 4); + } + + /* Generate code for the PLT entry. */ + if (entry->plt_entry != (bfd_vma) -1) + { + bfd_byte *plt_code = bfinfdpic_plt_section (info)->contents + + entry->plt_entry; + + BFD_ASSERT (entry->fd_entry); + + /* Figure out what kind of PLT entry we need, depending on the + location of the function descriptor within the GOT. */ + if (entry->fd_entry >= -(1 << (18 - 1)) + && entry->fd_entry + 4 < (1 << (18 - 1))) + { + /* P1 = [P3 + fd_entry]; P3 = [P3 + fd_entry + 4] */ + bfd_put_32 (output_bfd, + 0xe519 | ((entry->fd_entry << 14) & 0xFFFF0000), + plt_code); + bfd_put_32 (output_bfd, + 0xe51b | (((entry->fd_entry + 4) << 14) & 0xFFFF0000), + plt_code + 4); + plt_code += 8; + } + else + { + /* P1.L = fd_entry; P1.H = fd_entry; + P3 = P3 + P1; + P1 = [P3]; + P3 = [P3 + 4]; */ + bfd_put_32 (output_bfd, + 0xe109 | (entry->fd_entry << 16), + plt_code); + bfd_put_32 (output_bfd, + 0xe149 | (entry->fd_entry & 0xFFFF0000), + plt_code + 4); + bfd_put_16 (output_bfd, 0x5ad9, plt_code + 8); + bfd_put_16 (output_bfd, 0x9159, plt_code + 10); + bfd_put_16 (output_bfd, 0xac5b, plt_code + 12); + plt_code += 14; + } + /* JUMP (P1) */ + bfd_put_16 (output_bfd, 0x0051, plt_code); + } + + /* Generate code for the lazy PLT entry. */ + if (entry->lzplt_entry != (bfd_vma) -1) + { + bfd_byte *lzplt_code = bfinfdpic_plt_section (info)->contents + + entry->lzplt_entry; + bfd_vma resolverStub_addr; + + bfd_put_32 (output_bfd, fd_lazy_rel_offset, lzplt_code); + lzplt_code += 4; + + resolverStub_addr = entry->lzplt_entry / BFINFDPIC_LZPLT_BLOCK_SIZE + * BFINFDPIC_LZPLT_BLOCK_SIZE + BFINFDPIC_LZPLT_RESOLV_LOC; + if (resolverStub_addr >= bfinfdpic_plt_initial_offset (info)) + resolverStub_addr = bfinfdpic_plt_initial_offset (info) - LZPLT_NORMAL_SIZE - LZPLT_RESOLVER_EXTRA; + + if (entry->lzplt_entry == resolverStub_addr) + { + /* This is a lazy PLT entry that includes a resolver call. + P2 = [P3]; + R3 = [P3 + 4]; + JUMP (P2); */ + bfd_put_32 (output_bfd, + 0xa05b915a, + lzplt_code); + bfd_put_16 (output_bfd, 0x0052, lzplt_code + 4); + } + else + { + /* JUMP.S resolverStub */ + bfd_put_16 (output_bfd, + 0x2000 + | (((resolverStub_addr - entry->lzplt_entry) + / 2) & (((bfd_vma)1 << 12) - 1)), + lzplt_code); + } + } + + return TRUE; +} + +/* Relocate an Blackfin ELF section. + + 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 +bfinfdpic_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; + unsigned isec_segment, got_segment, plt_segment, + check_segment[2]; + int silence_segment_error = !(info->shared || info->pie); + + symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (input_bfd); + relend = relocs + input_section->reloc_count; + + isec_segment = _bfinfdpic_osec_to_segment (output_bfd, + input_section->output_section); + if (IS_FDPIC (output_bfd) && bfinfdpic_got_section (info)) + got_segment = _bfinfdpic_osec_to_segment (output_bfd, + bfinfdpic_got_section (info) + ->output_section); + else + got_segment = -1; + if (IS_FDPIC (output_bfd) && elf_hash_table (info)->dynamic_sections_created) + plt_segment = _bfinfdpic_osec_to_segment (output_bfd, + bfinfdpic_plt_section (info) + ->output_section); + else + plt_segment = -1; - default: - check_segment[0] = isec_segment; - check_segment[1] = sec - ? _bfinfdpic_osec_to_segment (output_bfd, sec->output_section) - : (unsigned)-1; - break; + 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; + asection *osec; + struct bfinfdpic_relocs_info *picrel; + bfd_vma orig_addend = rel->r_addend; + + r_type = ELF32_R_TYPE (rel->r_info); + + if (r_type == R_BFIN_GNU_VTINHERIT + || r_type == R_BFIN_GNU_VTENTRY) + continue; + + r_symndx = ELF32_R_SYM (rel->r_info); + howto = bfin_reloc_type_lookup (input_bfd, r_type); + if (howto == NULL) + { + bfd_set_error (bfd_error_bad_value); + return FALSE; } - if (check_segment[0] != check_segment[1] && IS_FDPIC (output_bfd)) + h = NULL; + sym = NULL; + sec = NULL; + + if (r_symndx < symtab_hdr->sh_info) { -#if 1 /* If you take this out, remove the #error from fdpic-static-6.d - in the ld testsuite. */ - /* This helps catch problems in GCC while we can't do more - than static linking. The idea is to test whether the - input file basename is crt0.o only once. */ - if (silence_segment_error == 1) - silence_segment_error = - (strlen (input_bfd->filename) == 6 - && strcmp (input_bfd->filename, "crt0.o") == 0) - || (strlen (input_bfd->filename) > 6 - && strcmp (input_bfd->filename - + strlen (input_bfd->filename) - 7, - "/crt0.o") == 0) - ? -1 : 0; -#endif - if (!silence_segment_error - /* We don't want duplicate errors for undefined - symbols. */ - && !(picrel && picrel->symndx == -1 - && picrel->d.h->root.type == bfd_link_hash_undefined)) - info->callbacks->warning - (info, - (info->shared || info->pie) - ? _("relocations between different segments are not supported") - : _("warning: relocation references a different segment"), - name, input_bfd, input_section, rel->r_offset); - if (!silence_segment_error && (info->shared || info->pie)) - return FALSE; - elf_elfheader (output_bfd)->e_flags |= EF_BFIN_PIC; + sym = local_syms + r_symndx; + osec = 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; } + else + { + bfd_boolean warned; + bfd_boolean unresolved_reloc; - switch (r_type) + 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)) { - case R_BFIN_GOTOFFHI: - /* We need the addend to be applied before we shift the - value right. */ - relocation += rel->r_addend; - /* Fall through. */ - case R_BFIN_GOTHI: - case R_BFIN_FUNCDESC_GOTHI: - case R_BFIN_FUNCDESC_GOTOFFHI: - relocation >>= 16; - /* Fall through. */ + /* 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; + } - case R_BFIN_GOTLO: - case R_BFIN_FUNCDESC_GOTLO: - case R_BFIN_GOTOFFLO: - case R_BFIN_FUNCDESC_GOTOFFLO: - relocation &= 0xffff; - break; + if (info->relocatable) + continue; - default: - break; + 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) { - case R_pcrel24: - case R_pcrel24_jump_l: - if (! IS_FDPIC (output_bfd) || ! picrel->plt) - break; - /* Fall through. */ + case R_BFIN_PCREL24: + case R_BFIN_PCREL24_JUMP_L: + case R_BFIN_BYTE4_DATA: + if (! IS_FDPIC (output_bfd)) + goto non_fdpic; - /* When referencing a GOT entry, a function descriptor or a - PLT, we don't want the addend to apply to the reference, - but rather to the referenced symbol. The actual entry - will have already been created taking the addend into - account, so cancel it out here. */ case R_BFIN_GOT17M4: case R_BFIN_GOTHI: case R_BFIN_GOTLO: case R_BFIN_FUNCDESC_GOT17M4: case R_BFIN_FUNCDESC_GOTHI: case R_BFIN_FUNCDESC_GOTLO: + case R_BFIN_GOTOFF17M4: + case R_BFIN_GOTOFFHI: + case R_BFIN_GOTOFFLO: case R_BFIN_FUNCDESC_GOTOFF17M4: case R_BFIN_FUNCDESC_GOTOFFHI: case R_BFIN_FUNCDESC_GOTOFFLO: - /* Note that we only want GOTOFFHI, not GOTOFFLO or GOTOFF17M4 - here, since we do want to apply the addend to the others. - Note that we've applied the addend to GOTOFFHI before we - shifted it right. */ - case R_BFIN_GOTOFFHI: - relocation -= rel->r_addend; - break; - - default: - break; - } - - if (r_type == R_pcrel24 - || r_type == R_pcrel24_jump_l) - { - bfd_vma x; - bfd_vma address = rel->r_offset; - - relocation += rel->r_addend; - - /* Perform usual pc-relative correction. */ - relocation -= input_section->output_section->vma + input_section->output_offset; - relocation -= address; - - /* We are getting reloc_entry->address 2 byte off from - the start of instruction. Assuming absolute postion - of the reloc data. But, following code had been written assuming - reloc address is starting at begining of instruction. - To compensate that I have increased the value of - relocation by 1 (effectively 2) and used the addr -2 instead of addr. */ - - relocation += 2; - address -= 2; - - relocation >>= 1; - - x = bfd_get_16 (input_bfd, contents + address); - x = (x & 0xff00) | ((relocation >> 16) & 0xff); - bfd_put_16 (input_bfd, x, contents + address); - - x = bfd_get_16 (input_bfd, contents + address + 2); - x = relocation & 0xFFFF; - bfd_put_16 (input_bfd, x, contents + address + 2); - r = bfd_reloc_ok; - } - else - r = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, rel->r_offset, - relocation, rel->r_addend); - - if (r != bfd_reloc_ok) - { - const char * msg = (const char *) NULL; + case R_BFIN_FUNCDESC: + case R_BFIN_FUNCDESC_VALUE: + if (h != NULL) + picrel = bfinfdpic_relocs_info_for_global (bfinfdpic_relocs_info + (info), input_bfd, h, + orig_addend, INSERT); + else + /* In order to find the entry we created before, we must + use the original addend, not the one that may have been + modified by _bfd_elf_rela_local_sym(). */ + picrel = bfinfdpic_relocs_info_for_local (bfinfdpic_relocs_info + (info), input_bfd, r_symndx, + orig_addend, INSERT); + if (! picrel) + return FALSE; - switch (r) + if (!_bfinfdpic_emit_got_relocs_plt_entries (picrel, output_bfd, info, + osec, sym, + rel->r_addend)) { - 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; + (*_bfd_error_handler) + (_("%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend"), + input_bfd, input_section, rel->r_offset, name); + return FALSE; - 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; - } - } - - return TRUE; -} + break; -static bfd_boolean -bfin_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 *dynobj; - Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes; - bfd_vma *local_got_offsets; - asection *sgot; - asection *sreloc; - Elf_Internal_Rela *rel; - Elf_Internal_Rela *relend; - int i = 0; + default: + non_fdpic: + picrel = NULL; + if (h && ! BFINFDPIC_SYM_LOCAL (info, h)) + { + info->callbacks->warning + (info, _("relocation references symbol not defined in the module"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; + } + break; + } - dynobj = elf_hash_table (info)->dynobj; - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; - sym_hashes = elf_sym_hashes (input_bfd); - local_got_offsets = elf_local_got_offsets (input_bfd); + switch (r_type) + { + case R_BFIN_PCREL24: + case R_BFIN_PCREL24_JUMP_L: + check_segment[0] = isec_segment; + if (! IS_FDPIC (output_bfd)) + check_segment[1] = isec_segment; + else if (picrel->plt) + { + relocation = bfinfdpic_plt_section (info)->output_section->vma + + bfinfdpic_plt_section (info)->output_offset + + picrel->plt_entry; + check_segment[1] = plt_segment; + } + /* We don't want to warn on calls to undefined weak symbols, + as calls to them must be protected by non-NULL tests + anyway, and unprotected calls would invoke undefined + behavior. */ + else if (picrel->symndx == -1 + && picrel->d.h->root.type == bfd_link_hash_undefweak) + check_segment[1] = check_segment[0]; + else + check_segment[1] = sec + ? _bfinfdpic_osec_to_segment (output_bfd, sec->output_section) + : (unsigned)-1; + break; - sgot = NULL; - sreloc = NULL; + case R_BFIN_GOT17M4: + case R_BFIN_GOTHI: + case R_BFIN_GOTLO: + relocation = picrel->got_entry; + check_segment[0] = check_segment[1] = got_segment; + break; - rel = relocs; - relend = relocs + input_section->reloc_count; - for (; rel < relend; rel++, i++) - { - int r_type; - reloc_howto_type *howto; - unsigned long r_symndx; - struct elf_link_hash_entry *h; - Elf_Internal_Sym *sym; - asection *sec; - bfd_vma relocation = 0; - bfd_boolean unresolved_reloc; - bfd_reloc_status_type r; - bfd_vma address; + case R_BFIN_FUNCDESC_GOT17M4: + case R_BFIN_FUNCDESC_GOTHI: + case R_BFIN_FUNCDESC_GOTLO: + relocation = picrel->fdgot_entry; + check_segment[0] = check_segment[1] = got_segment; + break; - r_type = ELF32_R_TYPE (rel->r_info); - if (r_type < 0 || r_type >= 243) - { - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + case R_BFIN_GOTOFFHI: + case R_BFIN_GOTOFF17M4: + case R_BFIN_GOTOFFLO: + relocation -= bfinfdpic_got_section (info)->output_section->vma + + bfinfdpic_got_section (info)->output_offset + + bfinfdpic_got_initial_offset (info); + check_segment[0] = got_segment; + check_segment[1] = sec + ? _bfinfdpic_osec_to_segment (output_bfd, sec->output_section) + : (unsigned)-1; + break; - if (r_type == R_BFIN_GNU_VTENTRY - || r_type == R_BFIN_GNU_VTINHERIT) - continue; + case R_BFIN_FUNCDESC_GOTOFF17M4: + case R_BFIN_FUNCDESC_GOTOFFHI: + case R_BFIN_FUNCDESC_GOTOFFLO: + relocation = picrel->fd_entry; + check_segment[0] = check_segment[1] = got_segment; + break; - howto = bfin_reloc_type_lookup (input_bfd, r_type); - if (howto == NULL) - { - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - r_symndx = ELF32_R_SYM (rel->r_info); + case R_BFIN_FUNCDESC: + { + int dynindx; + bfd_vma addend = rel->r_addend; - h = NULL; - sym = NULL; - sec = NULL; - unresolved_reloc = FALSE; + if (! (h && h->root.type == bfd_link_hash_undefweak + && BFINFDPIC_SYM_LOCAL (info, h))) + { + /* If the symbol is dynamic and there may be dynamic + symbol resolution because we are or are linked with a + shared library, emit a FUNCDESC relocation such that + the dynamic linker will allocate the function + descriptor. If the symbol needs a non-local function + descriptor but binds locally (e.g., its visibility is + protected, emit a dynamic relocation decayed to + section+offset. */ + if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h) + && BFINFDPIC_SYM_LOCAL (info, h) + && !(info->executable && !info->pie)) + { + dynindx = elf_section_data (h->root.u.def.section + ->output_section)->dynindx; + addend += h->root.u.def.section->output_offset + + h->root.u.def.value; + } + else if (h && ! BFINFDPIC_FUNCDESC_LOCAL (info, h)) + { + if (addend) + { + info->callbacks->warning + (info, _("R_BFIN_FUNCDESC references dynamic symbol with nonzero addend"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; + } + dynindx = h->dynindx; + } + else + { + /* Otherwise, we know we have a private function + descriptor, so reference it directly. */ + BFD_ASSERT (picrel->privfd); + r_type = R_BFIN_BYTE4_DATA; + dynindx = elf_section_data (bfinfdpic_got_section (info) + ->output_section)->dynindx; + addend = bfinfdpic_got_section (info)->output_offset + + bfinfdpic_got_initial_offset (info) + + picrel->fd_entry; + } - if (r_symndx < symtab_hdr->sh_info) - { - sym = local_syms + r_symndx; - sec = local_sections[r_symndx]; - relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); - } - else - { - bfd_boolean warned; + /* If there is room for dynamic symbol resolution, emit + the dynamic relocation. However, if we're linking an + executable at a fixed location, we won't have emitted a + dynamic symbol entry for the got section, so idx will + be zero, which means we can and should compute the + address of the private descriptor ourselves. */ + if (info->executable && !info->pie + && (!h || BFINFDPIC_FUNCDESC_LOCAL (info, h))) + { + bfd_vma offset; - RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, - r_symndx, symtab_hdr, sym_hashes, - h, sec, relocation, - unresolved_reloc, warned); - } + addend += bfinfdpic_got_section (info)->output_section->vma; + if ((bfd_get_section_flags (output_bfd, + input_section->output_section) + & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) + { + if (_bfinfdpic_osec_readonly_p (output_bfd, + input_section + ->output_section)) + { + info->callbacks->warning + (info, + _("cannot emit fixups in read-only section"), + name, input_bfd, input_section, rel->r_offset); + 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; - } + offset = _bfd_elf_section_offset + (output_bfd, info, + input_section, rel->r_offset); + + if (offset != (bfd_vma)-1) + _bfinfdpic_add_rofixup (output_bfd, + bfinfdpic_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 (info->relocatable) - continue; + if (_bfinfdpic_osec_readonly_p (output_bfd, + input_section + ->output_section)) + { + info->callbacks->warning + (info, + _("cannot emit dynamic relocations in read-only section"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; + } + offset = _bfd_elf_section_offset (output_bfd, info, + input_section, rel->r_offset); - address = rel->r_offset; + if (offset != (bfd_vma)-1) + _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; + } - /* Then, process normally. */ - switch (r_type) - { - case R_BFIN_GNU_VTINHERIT: - case R_BFIN_GNU_VTENTRY: - return bfd_reloc_ok; + /* We want the addend in-place because dynamic + relocations are REL. Setting relocation to it should + arrange for it to be installed. */ + relocation = addend - rel->r_addend; + } + check_segment[0] = check_segment[1] = got_segment; + break; - case R_got: - /* 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) - goto do_default; + case R_BFIN_BYTE4_DATA: + if (! IS_FDPIC (output_bfd)) + { + check_segment[0] = check_segment[1] = -1; + break; + } /* Fall through. */ - /* Relocation is the offset of the entry for this symbol in - the global offset table. */ - + case R_BFIN_FUNCDESC_VALUE: { - bfd_vma off; + int dynindx; + bfd_vma addend = rel->r_addend; + bfd_vma offset; + offset = _bfd_elf_section_offset (output_bfd, info, + input_section, rel->r_offset); - if (sgot == NULL) + /* If the symbol is dynamic but binds locally, use + section+offset. */ + if (h && ! BFINFDPIC_SYM_LOCAL (info, h)) { - sgot = bfd_get_section_by_name (dynobj, ".got"); - BFD_ASSERT (sgot != NULL); + if (addend && r_type == R_BFIN_FUNCDESC_VALUE) + { + info->callbacks->warning + (info, _("R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; + } + dynindx = h->dynindx; } - - if (h != NULL) + else { - bfd_boolean dyn; - - off = h->got.offset; - BFD_ASSERT (off != (bfd_vma) - 1); - dyn = elf_hash_table (info)->dynamic_sections_created; + if (h) + addend += h->root.u.def.value; + else + addend += sym->st_value; + if (osec) + addend += osec->output_offset; + if (osec && osec->output_section + && ! bfd_is_abs_section (osec->output_section) + && ! bfd_is_und_section (osec->output_section)) + dynindx = elf_section_data (osec->output_section)->dynindx; + else + dynindx = 0; + } - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular)) + /* If we're linking an executable at a fixed address, we + can omit the dynamic relocation as long as the symbol + is defined in the current link unit (which is implied + by its output section not being NULL). */ + if (info->executable && !info->pie + && (!h || BFINFDPIC_SYM_LOCAL (info, h))) + { + if (osec) + addend += osec->output_section->vma; + if (IS_FDPIC (input_bfd) + && (bfd_get_section_flags (output_bfd, + input_section->output_section) + & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) { - /* This is actually a static link, or it is a - -Bsymbolic link and the symbol is defined - locally, or the symbol was forced to be local - because of a version file.. We must initialize - this entry in the global offset table. Since - the offset must always be a multiple of 4, we - use the least significant bit to record whether - we have initialized it already. - - When doing a dynamic link, we create a .rela.got - relocation entry to initialize the value. This - is done in the finish_dynamic_symbol routine. */ - if ((off & 1) != 0) - off &= ~1; - else + if (_bfinfdpic_osec_readonly_p (output_bfd, + input_section + ->output_section)) { - bfd_put_32 (output_bfd, relocation, - sgot->contents + off); - h->got.offset |= 1; + info->callbacks->warning + (info, + _("cannot emit fixups in read-only section"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; + } + if (!h || h->root.type != bfd_link_hash_undefweak) + { + if (offset != (bfd_vma)-1) + { + _bfinfdpic_add_rofixup (output_bfd, + bfinfdpic_gotfixup_section + (info), + offset + input_section + ->output_section->vma + + input_section->output_offset, + picrel); + + if (r_type == R_BFIN_FUNCDESC_VALUE) + _bfinfdpic_add_rofixup + (output_bfd, + bfinfdpic_gotfixup_section (info), + offset + input_section->output_section->vma + + input_section->output_offset + 4, picrel); + } } } - else - unresolved_reloc = FALSE; } else { - BFD_ASSERT (local_got_offsets != NULL); - off = local_got_offsets[r_symndx]; - BFD_ASSERT (off != (bfd_vma) - 1); - - /* The offset must always be a multiple of 4. We use - the least significant bit to record whether we have - already generated the necessary reloc. */ - if ((off & 1) != 0) - off &= ~1; - else + if ((bfd_get_section_flags (output_bfd, + input_section->output_section) + & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) { - bfd_put_32 (output_bfd, relocation, sgot->contents + off); - - if (info->shared) + if (_bfinfdpic_osec_readonly_p (output_bfd, + input_section + ->output_section)) { - asection *s; - Elf_Internal_Rela outrel; - bfd_byte *loc; - - s = bfd_get_section_by_name (dynobj, ".rela.got"); - BFD_ASSERT (s != NULL); - - outrel.r_offset = (sgot->output_section->vma - + sgot->output_offset + off); - outrel.r_info = - ELF32_R_INFO (0, R_pcrel24); - outrel.r_addend = relocation; - loc = s->contents; - loc += - s->reloc_count++ * sizeof (Elf32_External_Rela); - bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + info->callbacks->warning + (info, + _("cannot emit dynamic relocations in read-only section"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; } - local_got_offsets[r_symndx] |= 1; + if (offset != (bfd_vma)-1) + _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 if (osec) + addend += osec->output_section->vma; + /* We want the addend in-place because dynamic + relocations are REL. Setting relocation to it + should arrange for it to be installed. */ + relocation = addend - rel->r_addend; } - relocation = sgot->output_offset + off; - rel->r_addend = 0; - /* bfin : preg = [preg + 17bitdiv4offset] relocation is div by 4. */ - relocation /= 4; + if (r_type == R_BFIN_FUNCDESC_VALUE) + { + /* If we've omitted the dynamic relocation, just emit + the fixed addresses of the symbol and of the local + GOT base offset. */ + if (info->executable && !info->pie + && (!h || BFINFDPIC_SYM_LOCAL (info, h))) + bfd_put_32 (output_bfd, + bfinfdpic_got_section (info)->output_section->vma + + bfinfdpic_got_section (info)->output_offset + + bfinfdpic_got_initial_offset (info), + contents + rel->r_offset + 4); + else + /* A function descriptor used for lazy or local + resolving is initialized such that its high word + contains the output section index in which the + PLT entries are located, and the low word + contains the offset of the lazy PLT entry entry + point into that section. */ + bfd_put_32 (output_bfd, + h && ! BFINFDPIC_SYM_LOCAL (info, h) + ? 0 + : _bfinfdpic_osec_to_segment (output_bfd, + sec + ->output_section), + contents + rel->r_offset + 4); + } } - goto do_default; - - case R_pcrel24: - case R_pcrel24_jump_l: - { - bfd_vma x; + check_segment[0] = check_segment[1] = got_segment; + break; - relocation += rel->r_addend; + default: + check_segment[0] = isec_segment; + check_segment[1] = sec + ? _bfinfdpic_osec_to_segment (output_bfd, sec->output_section) + : (unsigned)-1; + break; + } - /* Perform usual pc-relative correction. */ - relocation -= input_section->output_section->vma + input_section->output_offset; - relocation -= address; + if (check_segment[0] != check_segment[1] && IS_FDPIC (output_bfd)) + { +#if 1 /* If you take this out, remove the #error from fdpic-static-6.d + in the ld testsuite. */ + /* This helps catch problems in GCC while we can't do more + than static linking. The idea is to test whether the + input file basename is crt0.o only once. */ + if (silence_segment_error == 1) + silence_segment_error = + (strlen (input_bfd->filename) == 6 + && strcmp (input_bfd->filename, "crt0.o") == 0) + || (strlen (input_bfd->filename) > 6 + && strcmp (input_bfd->filename + + strlen (input_bfd->filename) - 7, + "/crt0.o") == 0) + ? -1 : 0; +#endif + if (!silence_segment_error + /* We don't want duplicate errors for undefined + symbols. */ + && !(picrel && picrel->symndx == -1 + && picrel->d.h->root.type == bfd_link_hash_undefined)) + info->callbacks->warning + (info, + (info->shared || info->pie) + ? _("relocations between different segments are not supported") + : _("warning: relocation references a different segment"), + name, input_bfd, input_section, rel->r_offset); + if (!silence_segment_error && (info->shared || info->pie)) + return FALSE; + elf_elfheader (output_bfd)->e_flags |= EF_BFIN_PIC; + } - /* We are getting reloc_entry->address 2 byte off from - the start of instruction. Assuming absolute postion - of the reloc data. But, following code had been written assuming - reloc address is starting at begining of instruction. - To compensate that I have increased the value of - relocation by 1 (effectively 2) and used the addr -2 instead of addr. */ + switch (r_type) + { + case R_BFIN_GOTOFFHI: + /* We need the addend to be applied before we shift the + value right. */ + relocation += rel->r_addend; + /* Fall through. */ + case R_BFIN_GOTHI: + case R_BFIN_FUNCDESC_GOTHI: + case R_BFIN_FUNCDESC_GOTOFFHI: + relocation >>= 16; + /* Fall through. */ - relocation += 2; - address -= 2; + case R_BFIN_GOTLO: + case R_BFIN_FUNCDESC_GOTLO: + case R_BFIN_GOTOFFLO: + case R_BFIN_FUNCDESC_GOTOFFLO: + relocation &= 0xffff; + break; - relocation >>= 1; + default: + break; + } - x = bfd_get_16 (input_bfd, contents + address); - x = (x & 0xff00) | ((relocation >> 16) & 0xff); - bfd_put_16 (input_bfd, x, contents + address); + switch (r_type) + { + case R_BFIN_PCREL24: + case R_BFIN_PCREL24_JUMP_L: + if (! IS_FDPIC (output_bfd) || ! picrel->plt) + break; + /* Fall through. */ - x = bfd_get_16 (input_bfd, contents + address + 2); - x = relocation & 0xFFFF; - bfd_put_16 (input_bfd, x, contents + address + 2); - r = bfd_reloc_ok; - } + /* When referencing a GOT entry, a function descriptor or a + PLT, we don't want the addend to apply to the reference, + but rather to the referenced symbol. The actual entry + will have already been created taking the addend into + account, so cancel it out here. */ + case R_BFIN_GOT17M4: + case R_BFIN_GOTHI: + case R_BFIN_GOTLO: + case R_BFIN_FUNCDESC_GOT17M4: + case R_BFIN_FUNCDESC_GOTHI: + case R_BFIN_FUNCDESC_GOTLO: + case R_BFIN_FUNCDESC_GOTOFF17M4: + case R_BFIN_FUNCDESC_GOTOFFHI: + case R_BFIN_FUNCDESC_GOTOFFLO: + /* Note that we only want GOTOFFHI, not GOTOFFLO or GOTOFF17M4 + here, since we do want to apply the addend to the others. + Note that we've applied the addend to GOTOFFHI before we + shifted it right. */ + case R_BFIN_GOTOFFHI: + relocation -= rel->r_addend; break; default: - do_default: - r = _bfd_final_link_relocate (howto, input_bfd, input_section, - contents, address, - relocation, rel->r_addend); - break; } - /* Dynamic relocs are not propagated for SEC_DEBUGGING sections - because such sections are not SEC_ALLOC and thus ld.so will - not process them. */ - if (unresolved_reloc - && !((input_section->flags & SEC_DEBUGGING) != 0 && h->def_dynamic)) - { - (*_bfd_error_handler) - (_("%B(%A+0x%lx): unresolvable relocation against symbol `%s'"), - input_bfd, - input_section, (long) rel->r_offset, h->root.root.string); - return FALSE; - } + r = bfin_final_link_relocate (rel, howto, input_bfd, input_section, + contents, rel->r_offset, + relocation, rel->r_addend); if (r != bfd_reloc_ok) { - const char *name; + const char * msg = (const char *) NULL; - if (h != NULL) - name = h->root.root.string; - else + switch (r) { - name = bfd_elf_string_from_elf_section (input_bfd, - symtab_hdr->sh_link, - sym->st_name); - if (name == NULL) - return FALSE; - if (*name == '\0') - name = bfd_section_name (input_bfd, sec); - } + 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; - if (r == 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; - } - else - { - (*_bfd_error_handler) - (_("%B(%A+0x%lx): reloc against `%s': error %d"), - input_bfd, input_section, - (long) rel->r_offset, name, (int) r); - return FALSE; + 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; } } return TRUE; } -static asection * -bfin_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_BFIN_GNU_VTINHERIT: - case R_BFIN_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. */ +/* Update the relocation information for the relocations of the section + being removed. */ static bfd_boolean -bfin_gc_sweep_hook (bfd * abfd, - struct bfd_link_info *info, - asection * sec, - const Elf_Internal_Rela * relocs) +bfinfdpic_gc_sweep_hook (bfd *abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes; - bfd_signed_vma *local_got_refcounts; - const Elf_Internal_Rela *rel, *relend; - bfd *dynobj; - asection *sgot; - asection *srelgot; + struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + const Elf_Internal_Rela *rel; + const Elf_Internal_Rela *rel_end; + struct bfinfdpic_relocs_info *picrel; - dynobj = elf_hash_table (info)->dynobj; - if (dynobj == NULL) - return TRUE; + BFD_ASSERT (IS_FDPIC (abfd)); symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - local_got_refcounts = elf_local_got_refcounts (abfd); - - sgot = bfd_get_section_by_name (dynobj, ".got"); - srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + 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; - relend = relocs + sec->reloc_count; - for (rel = relocs; rel < relend; rel++) + rel_end = relocs + sec->reloc_count; + for (rel = relocs; rel < rel_end; rel++) { - unsigned long r_symndx; 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]; + + if (h != NULL) + picrel = bfinfdpic_relocs_info_for_global (bfinfdpic_relocs_info (info), + abfd, h, + rel->r_addend, NO_INSERT); + else + picrel = bfinfdpic_relocs_info_for_local (bfinfdpic_relocs_info + (info), abfd, r_symndx, + rel->r_addend, NO_INSERT); + + if (!picrel) + return TRUE; switch (ELF32_R_TYPE (rel->r_info)) - { - case R_got: - r_symndx = ELF32_R_SYM (rel->r_info); - if (r_symndx >= symtab_hdr->sh_info) - { - h = sym_hashes[r_symndx - symtab_hdr->sh_info]; - if (h->got.refcount > 0) - { - --h->got.refcount; - if (h->got.refcount == 0) - { - /* We don't need the .got entry any more. */ - sgot->size -= 4; - srelgot->size -= sizeof (Elf32_External_Rela); - } - } - } - else if (local_got_refcounts != NULL) - { - if (local_got_refcounts[r_symndx] > 0) - { - --local_got_refcounts[r_symndx]; - if (local_got_refcounts[r_symndx] == 0) - { - /* We don't need the .got entry any more. */ - sgot->size -= 4; - if (info->shared) - srelgot->size -= sizeof (Elf32_External_Rela); - } - } - } + { + case R_BFIN_PCREL24: + case R_BFIN_PCREL24_JUMP_L: + picrel->call--; + break; + + case R_BFIN_FUNCDESC_VALUE: + picrel->relocsfdv--; + if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC) + picrel->relocs32++; + /* Fall through. */ + + case R_BFIN_BYTE4_DATA: + picrel->sym--; + if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC) + picrel->relocs32--; + break; + + case R_BFIN_GOT17M4: + picrel->got17m4--; + break; + + case R_BFIN_GOTHI: + case R_BFIN_GOTLO: + picrel->gothilo--; + break; + + case R_BFIN_FUNCDESC_GOT17M4: + picrel->fdgot17m4--; + break; + + case R_BFIN_FUNCDESC_GOTHI: + case R_BFIN_FUNCDESC_GOTLO: + picrel->fdgothilo--; + break; + + case R_BFIN_GOTOFF17M4: + case R_BFIN_GOTOFFHI: + case R_BFIN_GOTOFFLO: + picrel->gotoff--; + break; + + case R_BFIN_FUNCDESC_GOTOFF17M4: + picrel->fdgoff17m4--; + break; + + case R_BFIN_FUNCDESC_GOTOFFHI: + case R_BFIN_FUNCDESC_GOTOFFLO: + picrel->fdgoffhilo--; + break; + + case R_BFIN_FUNCDESC: + picrel->fd--; + picrel->relocsfd--; break; + default: break; - } + } } + return TRUE; } @@ -3219,9 +3345,8 @@ bfin_gc_sweep_hook (bfd * abfd, relocate independently. */ static bfd_boolean _bfinfdpic_link_omit_section_dynsym (bfd *output_bfd ATTRIBUTE_UNUSED, - struct bfd_link_info *info - ATTRIBUTE_UNUSED, - asection *p ATTRIBUTE_UNUSED) + struct bfd_link_info *info ATTRIBUTE_UNUSED, + asection *p) { switch (elf_section_data (p)->this_hdr.sh_type) { @@ -3338,28 +3463,7 @@ _bfin_create_got_section (bfd *abfd, struct bfd_link_info *info) flags = BSF_GLOBAL | BSF_WEAK; } - return TRUE; -} - -/* Make sure the got and plt sections exist, and that our pointers in - the link hash table point to them. */ - -static bfd_boolean -elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) -{ - /* This is mostly copied from - elflink.c:_bfd_elf_create_dynamic_sections(). */ - flagword flags, pltflags; - asection *s; - const struct elf_backend_data *bed = get_elf_backend_data (abfd); - - /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and - .rel[a].bss sections. */ - - flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY - | SEC_LINKER_CREATED); - - pltflags = flags; + flags = pltflags; pltflags |= SEC_CODE; if (bed->plt_not_loaded) pltflags &= ~ (SEC_CODE | SEC_LOAD | SEC_HAS_CONTENTS); @@ -3388,18 +3492,39 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) h->def_regular = 1; h->type = STT_OBJECT; - if (! info->executable - && ! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; - } + if (! info->executable + && ! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + /* Blackfin-specific: we want rel relocations for the plt. */ + s = bfd_make_section_with_flags (abfd, ".rel.plt", flags | SEC_READONLY); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) + return FALSE; + /* Blackfin-specific: remember it. */ + bfinfdpic_pltrel_section (info) = s; + + return TRUE; +} + +/* Make sure the got and plt sections exist, and that our pointers in + the link hash table point to them. */ + +static bfd_boolean +elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) +{ + /* This is mostly copied from + elflink.c:_bfd_elf_create_dynamic_sections(). */ + flagword flags; + asection *s; + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + + flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY + | SEC_LINKER_CREATED); - /* Blackfin-specific: we want rel relocations for the plt. */ - s = bfd_make_section_with_flags (abfd, ".rel.plt", flags | SEC_READONLY); - if (s == NULL - || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) - return FALSE; - /* Blackfin-specific: remember it. */ - bfinfdpic_pltrel_section (info) = s; + /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and + .rel[a].bss sections. */ /* Blackfin-specific: we want to create the GOT in the Blackfin way. */ if (! _bfin_create_got_section (abfd, info)) @@ -3438,8 +3563,7 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (! info->shared) { s = bfd_make_section_with_flags (abfd, - (bed->default_use_rela_p - ? ".rela.bss" : ".rel.bss"), + ".rela.bss", flags | SEC_READONLY); if (s == NULL || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) @@ -3450,49 +3574,15 @@ elf32_bfinfdpic_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) return TRUE; } -/* The name of the dynamic interpreter. This is put in the .interp - section. */ - -#define ELF_DYNAMIC_INTERPRETER "/lib/ld.so.1" - -#define DEFAULT_STACK_SIZE 0x20000 - -/* This structure is used to collect the number of entries present in - each addressable range of the got. */ -struct _bfinfdpic_dynamic_got_info -{ - /* Several bits of information about the current link. */ - struct bfd_link_info *info; - /* Total size needed for GOT entries within the 18- or 32-bit - ranges. */ - bfd_vma got17m4, gothilo; - /* Total size needed for function descriptor entries within the 18- - or 32-bit ranges. */ - bfd_vma fd17m4, fdhilo; - /* Total size needed function descriptor entries referenced in PLT - entries, that would be profitable to place in offsets close to - the PIC register. */ - bfd_vma fdplt; - /* Total size needed by lazy PLT entries. */ - bfd_vma lzplt; - /* Number of relocations carried over from input object files. */ - unsigned long relocs; - /* Number of fixups introduced by relocations in input object files. */ - unsigned long fixups; -}; - /* Compute the total GOT size required by each symbol in each range. Symbols may require up to 4 words in the GOT: an entry pointing to the symbol, an entry pointing to its function descriptor, and a private function descriptors taking two words. */ -static int -_bfinfdpic_count_got_plt_entries (void **entryp, void *dinfo_) +static void +_bfinfdpic_count_nontls_entries (struct bfinfdpic_relocs_info *entry, + struct _bfinfdpic_dynamic_got_info *dinfo) { - struct bfinfdpic_relocs_info *entry = *entryp; - struct _bfinfdpic_dynamic_got_info *dinfo = dinfo_; - unsigned relocs = 0, fixups = 0; - /* Allocate space for a GOT entry pointing to the symbol. */ if (entry->got17m4) dinfo->got17m4 += 4; @@ -3540,6 +3630,18 @@ _bfinfdpic_count_got_plt_entries (void **entryp, void *dinfo_) if (entry->lazyplt) dinfo->lzplt += LZPLT_NORMAL_SIZE; +} + +/* Compute the number of dynamic relocations and fixups that a symbol + requires, and add (or subtract) from the grand and per-symbol + totals. */ + +static void +_bfinfdpic_count_relocs_fixups (struct bfinfdpic_relocs_info *entry, + struct _bfinfdpic_dynamic_got_info *dinfo, + bfd_boolean subtract) +{ + bfd_vma relocs = 0, fixups = 0; if (!dinfo->info->executable || dinfo->info->pie) relocs = entry->relocs32 + entry->relocsfd + entry->relocsfdv; @@ -3565,10 +3667,32 @@ _bfinfdpic_count_got_plt_entries (void **entryp, void *dinfo_) relocs += entry->relocsfd; } + if (subtract) + { + relocs = - relocs; + fixups = - fixups; + } + entry->dynrelocs += relocs; entry->fixups += fixups; dinfo->relocs += relocs; dinfo->fixups += fixups; +} + +/* Compute the total GOT and PLT size required by each symbol in each range. * + Symbols may require up to 4 words in the GOT: an entry pointing to + the symbol, an entry pointing to its function descriptor, and a + private function descriptors taking two words. */ + +static int +_bfinfdpic_count_got_plt_entries (void **entryp, void *dinfo_) +{ + struct bfinfdpic_relocs_info *entry = *entryp; + struct _bfinfdpic_dynamic_got_info *dinfo = dinfo_; + + _bfinfdpic_count_nontls_entries (entry, dinfo); + + _bfinfdpic_count_relocs_fixups (entry, dinfo, FALSE); return 1; } @@ -3864,6 +3988,23 @@ _bfinfdpic_assign_plt_entries (void **entryp, void *info_) return 1; } +/* Cancel out any effects of calling _bfinfdpic_assign_got_entries and + _bfinfdpic_assign_plt_entries. */ + +static int +_bfinfdpic_reset_got_plt_entries (void **entryp, void *ignore ATTRIBUTE_UNUSED) +{ + struct bfinfdpic_relocs_info *entry = *entryp; + + entry->got_entry = 0; + entry->fdgot_entry = 0; + entry->fd_entry = 0; + entry->plt_entry = (bfd_vma)-1; + entry->lzplt_entry = (bfd_vma)-1; + + return 1; +} + /* 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 @@ -3920,89 +4061,62 @@ _bfinfdpic_resolve_final_relocs_info (void **entryp, void *p) return 1; } -/* Set the sizes of the dynamic sections. */ +/* Compute the total size of the GOT, the PLT, the dynamic relocations + section and the rofixup section. Assign locations for GOT and PLT + entries. */ static bfd_boolean -elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, - struct bfd_link_info *info) +_bfinfdpic_size_got_plt (bfd *output_bfd, + struct _bfinfdpic_dynamic_got_plt_info *gpinfop) { - bfd *dynobj; - asection *s; - struct _bfinfdpic_dynamic_got_plt_info gpinfo; bfd_signed_vma odd; bfd_vma limit; + struct bfd_link_info *info = gpinfop->g.info; + bfd *dynobj = elf_hash_table (info)->dynobj; - 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->executable) - { - s = bfd_get_section_by_name (dynobj, ".interp"); - BFD_ASSERT (s != NULL); - s->size = sizeof ELF_DYNAMIC_INTERPRETER; - s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER; - } - } - - memset (&gpinfo, 0, sizeof (gpinfo)); - gpinfo.g.info = info; - - for (;;) - { - htab_t relocs = bfinfdpic_relocs_info (info); - - htab_traverse (relocs, _bfinfdpic_resolve_final_relocs_info, &relocs); - - if (relocs == bfinfdpic_relocs_info (info)) - break; - } - - htab_traverse (bfinfdpic_relocs_info (info), _bfinfdpic_count_got_plt_entries, - &gpinfo.g); + memcpy (bfinfdpic_dynamic_got_plt_info (info), &gpinfop->g, + sizeof (gpinfop->g)); odd = 12; /* Compute the total size taken by entries in the 18-bit range, to tell how many PLT function descriptors we can bring into it without causing it to overflow. */ - limit = odd + gpinfo.g.got17m4 + gpinfo.g.fd17m4; + limit = odd + gpinfop->g.got17m4 + gpinfop->g.fd17m4; if (limit < (bfd_vma)1 << 18) limit = ((bfd_vma)1 << 18) - limit; else limit = 0; - if (gpinfo.g.fdplt < limit) - limit = gpinfo.g.fdplt; + if (gpinfop->g.fdplt < limit) + limit = gpinfop->g.fdplt; /* Determine the ranges of GOT offsets that we can use for each range of addressing modes. */ - odd = _bfinfdpic_compute_got_alloc_data (&gpinfo.got17m4, + odd = _bfinfdpic_compute_got_alloc_data (&gpinfop->got17m4, 0, odd, 16, - gpinfo.g.got17m4, - gpinfo.g.fd17m4, + gpinfop->g.got17m4, + gpinfop->g.fd17m4, limit, (bfd_vma)1 << (18-1)); - odd = _bfinfdpic_compute_got_alloc_data (&gpinfo.gothilo, - gpinfo.got17m4.min, + odd = _bfinfdpic_compute_got_alloc_data (&gpinfop->gothilo, + gpinfop->got17m4.min, odd, - gpinfo.got17m4.max, - gpinfo.g.gothilo, - gpinfo.g.fdhilo, - gpinfo.g.fdplt - gpinfo.got17m4.fdplt, + gpinfop->got17m4.max, + gpinfop->g.gothilo, + gpinfop->g.fdhilo, + gpinfop->g.fdplt - gpinfop->got17m4.fdplt, (bfd_vma)1 << (32-1)); /* Now assign (most) GOT offsets. */ htab_traverse (bfinfdpic_relocs_info (info), _bfinfdpic_assign_got_entries, - &gpinfo); + gpinfop); - bfinfdpic_got_section (info)->size = gpinfo.gothilo.max - - gpinfo.gothilo.min + bfinfdpic_got_section (info)->size = gpinfop->gothilo.max + - gpinfop->gothilo.min /* If an odd word is the last word of the GOT, we don't need this word to be part of the GOT. */ - - (odd + 4 == gpinfo.gothilo.max ? 4 : 0); + - (odd + 4 == gpinfop->gothilo.max ? 4 : 0); if (bfinfdpic_got_section (info)->size == 0) bfinfdpic_got_section (info)->flags |= SEC_EXCLUDE; else if (bfinfdpic_got_section (info)->size == 12 @@ -4024,10 +4138,10 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, /* Subtract the number of lzplt entries, since those will generate relocations in the pltrel section. */ bfinfdpic_gotrel_section (info)->size = - (gpinfo.g.relocs - gpinfo.g.lzplt / LZPLT_NORMAL_SIZE) + (gpinfop->g.relocs - gpinfop->g.lzplt / LZPLT_NORMAL_SIZE) * get_elf_backend_data (output_bfd)->s->sizeof_rel; else - BFD_ASSERT (gpinfo.g.relocs == 0); + BFD_ASSERT (gpinfop->g.relocs == 0); if (bfinfdpic_gotrel_section (info)->size == 0) bfinfdpic_gotrel_section (info)->flags |= SEC_EXCLUDE; else @@ -4039,7 +4153,7 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, return FALSE; } - bfinfdpic_gotfixup_section (info)->size = (gpinfo.g.fixups + 1) * 4; + bfinfdpic_gotfixup_section (info)->size = (gpinfop->g.fixups + 1) * 4; if (bfinfdpic_gotfixup_section (info)->size == 0) bfinfdpic_gotfixup_section (info)->flags |= SEC_EXCLUDE; else @@ -4052,19 +4166,17 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, } if (elf_hash_table (info)->dynamic_sections_created) + bfinfdpic_pltrel_section (info)->size = + gpinfop->g.lzplt / LZPLT_NORMAL_SIZE * get_elf_backend_data (output_bfd)->s->sizeof_rel; + if (bfinfdpic_pltrel_section (info)->size == 0) + bfinfdpic_pltrel_section (info)->flags |= SEC_EXCLUDE; + else { - bfinfdpic_pltrel_section (info)->size = - gpinfo.g.lzplt / LZPLT_NORMAL_SIZE * get_elf_backend_data (output_bfd)->s->sizeof_rel; - if (bfinfdpic_pltrel_section (info)->size == 0) - bfinfdpic_pltrel_section (info)->flags |= SEC_EXCLUDE; - else - { - bfinfdpic_pltrel_section (info)->contents = - (bfd_byte *) bfd_zalloc (dynobj, - bfinfdpic_pltrel_section (info)->size); - if (bfinfdpic_pltrel_section (info)->contents == NULL) - return FALSE; - } + bfinfdpic_pltrel_section (info)->contents = + (bfd_byte *) bfd_zalloc (dynobj, + bfinfdpic_pltrel_section (info)->size); + if (bfinfdpic_pltrel_section (info)->contents == NULL) + return FALSE; } /* Add 4 bytes for every block of at most 65535 lazy PLT entries, @@ -4074,47 +4186,97 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, block size. */ if (elf_hash_table (info)->dynamic_sections_created) { - bfinfdpic_plt_section (info)->size = gpinfo.g.lzplt - + ((gpinfo.g.lzplt + (BFINFDPIC_LZPLT_BLOCK_SIZE - 4) - LZPLT_NORMAL_SIZE) + bfinfdpic_plt_section (info)->size = gpinfop->g.lzplt + + ((gpinfop->g.lzplt + (BFINFDPIC_LZPLT_BLOCK_SIZE - 4) - LZPLT_NORMAL_SIZE) / (BFINFDPIC_LZPLT_BLOCK_SIZE - 4) * LZPLT_RESOLVER_EXTRA); } /* Reset it, such that _bfinfdpic_assign_plt_entries() can use it to actually assign lazy PLT entries addresses. */ - gpinfo.g.lzplt = 0; + gpinfop->g.lzplt = 0; /* Save information that we're going to need to generate GOT and PLT entries. */ - bfinfdpic_got_initial_offset (info) = -gpinfo.gothilo.min; + bfinfdpic_got_initial_offset (info) = -gpinfop->gothilo.min; if (get_elf_backend_data (output_bfd)->want_got_sym) elf_hash_table (info)->hgot->root.u.def.value - += bfinfdpic_got_initial_offset (info); + = bfinfdpic_got_initial_offset (info); if (elf_hash_table (info)->dynamic_sections_created) bfinfdpic_plt_initial_offset (info) = bfinfdpic_plt_section (info)->size; htab_traverse (bfinfdpic_relocs_info (info), _bfinfdpic_assign_plt_entries, - &gpinfo); + gpinfop); /* Allocate the PLT section contents only after _bfinfdpic_assign_plt_entries has a chance to add the size of the non-lazy PLT entries. */ - if (elf_hash_table (info)->dynamic_sections_created) + if (bfinfdpic_plt_section (info)->size == 0) + bfinfdpic_plt_section (info)->flags |= SEC_EXCLUDE; + else { - if (bfinfdpic_plt_section (info)->size == 0) - bfinfdpic_plt_section (info)->flags |= SEC_EXCLUDE; - else + bfinfdpic_plt_section (info)->contents = + (bfd_byte *) bfd_zalloc (dynobj, + bfinfdpic_plt_section (info)->size); + if (bfinfdpic_plt_section (info)->contents == NULL) + return FALSE; + } + + return TRUE; +} + +/* Set the sizes of the dynamic sections. */ + +static bfd_boolean +elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + struct elf_link_hash_table *htab; + bfd *dynobj; + asection *s; + struct _bfinfdpic_dynamic_got_plt_info gpinfo; + + htab = elf_hash_table (info); + dynobj = htab->dynobj; + BFD_ASSERT (dynobj != NULL); + + if (htab->dynamic_sections_created) + { + /* Set the contents of the .interp section to the interpreter. */ + if (info->executable) { - bfinfdpic_plt_section (info)->contents = - (bfd_byte *) bfd_zalloc (dynobj, - bfinfdpic_plt_section (info)->size); - if (bfinfdpic_plt_section (info)->contents == NULL) - return FALSE; + s = bfd_get_section_by_name (dynobj, ".interp"); + BFD_ASSERT (s != NULL); + s->size = sizeof ELF_DYNAMIC_INTERPRETER; + s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER; } } + memset (&gpinfo, 0, sizeof (gpinfo)); + gpinfo.g.info = info; + + for (;;) + { + htab_t relocs = bfinfdpic_relocs_info (info); + + htab_traverse (relocs, _bfinfdpic_resolve_final_relocs_info, &relocs); + + if (relocs == bfinfdpic_relocs_info (info)) + break; + } + + htab_traverse (bfinfdpic_relocs_info (info), _bfinfdpic_count_got_plt_entries, + &gpinfo.g); + + /* Allocate space to save the summary information, we're going to + use it if we're doing relaxations. */ + bfinfdpic_dynamic_got_plt_info (info) = bfd_alloc (dynobj, sizeof (gpinfo.g)); + + if (!_bfinfdpic_size_got_plt (output_bfd, &gpinfo)) + return FALSE; + if (elf_hash_table (info)->dynamic_sections_created) { if (bfinfdpic_got_section (info)->size) @@ -4135,6 +4297,14 @@ elf32_bfinfdpic_size_dynamic_sections (bfd *output_bfd, return FALSE; } + s = bfd_get_section_by_name (dynobj, ".dynbss"); + if (s && s->size == 0) + s->flags |= SEC_EXCLUDE; + + s = bfd_get_section_by_name (dynobj, ".rela.bss"); + if (s && s->size == 0) + s->flags |= SEC_EXCLUDE; + return TRUE; } @@ -4175,6 +4345,122 @@ elf32_bfinfdpic_always_size_sections (bfd *output_bfd, return TRUE; } +/* Check whether any of the relocations was optimized away, and + subtract it from the relocation or fixup count. */ +static bfd_boolean +_bfinfdpic_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 bfinfdpic_relocs_info *picrel; + struct _bfinfdpic_dynamic_got_info *dinfo; + + if (ELF32_R_TYPE (rel->r_info) != R_BFIN_BYTE4_DATA + && ELF32_R_TYPE (rel->r_info) != R_BFIN_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; + } + + if (h != NULL) + picrel = bfinfdpic_relocs_info_for_global (bfinfdpic_relocs_info (info), + abfd, h, + rel->r_addend, NO_INSERT); + else + picrel = bfinfdpic_relocs_info_for_local (bfinfdpic_relocs_info (info), + abfd, r_symndx, + rel->r_addend, NO_INSERT); + + if (! picrel) + return FALSE; + + *changed = TRUE; + dinfo = bfinfdpic_dynamic_got_plt_info (info); + + _bfinfdpic_count_relocs_fixups (picrel, dinfo, TRUE); + if (ELF32_R_TYPE (rel->r_info) == R_BFIN_BYTE4_DATA) + picrel->relocs32--; + else /* we know (ELF32_R_TYPE (rel->r_info) == R_BFIN_FUNCDESC) */ + picrel->relocsfd--; + _bfinfdpic_count_relocs_fixups (picrel, dinfo, FALSE); + } + + return TRUE; +} + +static bfd_boolean +bfinfdpic_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 (!_bfinfdpic_check_discarded_relocs (ibfd, s, info, &changed)) + return FALSE; + obfd = s->output_section->owner; + } + + if (changed) + { + struct _bfinfdpic_dynamic_got_plt_info gpinfo; + + memset (&gpinfo, 0, sizeof (gpinfo)); + memcpy (&gpinfo.g, bfinfdpic_dynamic_got_plt_info (info), + sizeof (gpinfo.g)); + + /* Clear GOT and PLT assignments. */ + htab_traverse (bfinfdpic_relocs_info (info), + _bfinfdpic_reset_got_plt_entries, + NULL); + + if (!_bfinfdpic_size_got_plt (obfd, &gpinfo)) + return FALSE; + } + + return TRUE; +} + static bfd_boolean elf32_bfinfdpic_modify_program_headers (bfd *output_bfd, struct bfd_link_info *info) @@ -4314,8 +4600,8 @@ elf32_bfinfdpic_finish_dynamic_sections (bfd *output_bfd, static bfd_boolean elf32_bfinfdpic_adjust_dynamic_symbol -(struct bfd_link_info *info ATTRIBUTE_UNUSED, - struct elf_link_hash_entry *h ATTRIBUTE_UNUSED) +(struct bfd_link_info *info, + struct elf_link_hash_entry *h) { bfd * dynobj; @@ -4509,7 +4795,7 @@ bfinfdpic_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, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; bfd *dynobj; @@ -4520,9 +4806,6 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info, 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; dynobj = elf_hash_table (info)->dynobj; rel_end = relocs + sec->reloc_count; @@ -4556,9 +4839,9 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info, if (! IS_FDPIC (abfd)) goto bad_reloc; /* Fall through. */ - case R_pcrel24: - case R_pcrel24_jump_l: - case R_byte4_data: + case R_BFIN_PCREL24: + case R_BFIN_PCREL24_JUMP_L: + case R_BFIN_BYTE4_DATA: if (IS_FDPIC (abfd) && ! dynobj) { elf_hash_table (info)->dynobj = dynobj = abfd; @@ -4602,10 +4885,10 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info, switch (ELF32_R_TYPE (rel->r_info)) { - case R_pcrel24: - case R_pcrel24_jump_l: + case R_BFIN_PCREL24: + case R_BFIN_PCREL24_JUMP_L: if (IS_FDPIC (abfd)) - picrel->call = 1; + picrel->call++; break; case R_BFIN_FUNCDESC_VALUE: @@ -4614,50 +4897,50 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info, picrel->relocs32--; /* Fall through. */ - case R_byte4_data: + case R_BFIN_BYTE4_DATA: if (! IS_FDPIC (abfd)) break; - picrel->sym = 1; + picrel->sym++; if (bfd_get_section_flags (abfd, sec) & SEC_ALLOC) picrel->relocs32++; break; case R_BFIN_GOT17M4: - picrel->got17m4 = 1; + picrel->got17m4++; break; case R_BFIN_GOTHI: case R_BFIN_GOTLO: - picrel->gothilo = 1; + picrel->gothilo++; break; case R_BFIN_FUNCDESC_GOT17M4: - picrel->fdgot17m4 = 1; + picrel->fdgot17m4++; break; case R_BFIN_FUNCDESC_GOTHI: case R_BFIN_FUNCDESC_GOTLO: - picrel->fdgothilo = 1; + picrel->fdgothilo++; break; case R_BFIN_GOTOFF17M4: case R_BFIN_GOTOFFHI: case R_BFIN_GOTOFFLO: - picrel->gotoff = 1; + picrel->gotoff++; break; case R_BFIN_FUNCDESC_GOTOFF17M4: - picrel->fdgoff17m4 = 1; + picrel->fdgoff17m4++; break; case R_BFIN_FUNCDESC_GOTOFFHI: case R_BFIN_FUNCDESC_GOTOFFLO: - picrel->fdgoffhilo = 1; + picrel->fdgoffhilo++; break; case R_BFIN_FUNCDESC: - picrel->fd = 1; + picrel->fd++; picrel->relocsfd++; break; @@ -4671,14 +4954,16 @@ bfinfdpic_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_BFIN_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; - case R_huimm16: - case R_luimm16: - case R_pcrel12_jump_s: - case R_pcrel10: + case R_BFIN_HUIMM16: + case R_BFIN_LUIMM16: + case R_BFIN_PCREL12_JUMP_S: + case R_BFIN_PCREL10: break; default: @@ -4811,8 +5096,7 @@ elf32_bfin_print_private_bfd_data (bfd * abfd, PTR ptr) static bfd_boolean elf32_bfin_merge_private_bfd_data (bfd *ibfd, bfd *obfd) { - flagword old_flags, old_partial; - flagword new_flags, new_partial; + flagword old_flags, new_flags; bfd_boolean error = FALSE; new_flags = elf_elfheader (ibfd)->e_flags; @@ -4830,37 +5114,10 @@ elf32_bfin_merge_private_bfd_data (bfd *ibfd, bfd *obfd) if (!elf_flags_init (obfd)) /* First call, no flags set. */ { elf_flags_init (obfd) = TRUE; - old_flags = new_flags; - } - - else if (new_flags == old_flags) /* Compatible flags are ok. */ - ; - - else /* Possibly incompatible flags. */ - { - /* We don't have to do anything if the pic flags are the same, or the new - module(s) were compiled with -mlibrary-pic. */ - new_partial = (new_flags & EF_BFIN_PIC_FLAGS); - old_partial = (old_flags & EF_BFIN_PIC_FLAGS); - if (new_partial == old_partial) - ; - - /* If we have mixtures of -fpic and -fPIC, or in both bits. */ - else if (new_partial != 0 && old_partial != 0) - old_flags |= new_partial; - - /* One module was compiled for pic and the other was not, see if we have - had any relocations that are not pic-safe. */ - else - old_flags |= new_partial; - + elf_elfheader (obfd)->e_flags = new_flags; } - /* Update the old flags now with changes made above. */ - elf_elfheader (obfd)->e_flags = old_flags; - - if (((new_flags & EF_BFIN_FDPIC) == 0) - != (! IS_FDPIC (ibfd))) + if (((new_flags & EF_BFIN_FDPIC) == 0) != (! IS_FDPIC (obfd))) { error = TRUE; if (IS_FDPIC (obfd)) @@ -4895,8 +5152,8 @@ struct bfin_link_hash_table { struct elf_link_hash_table root; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; }; #define bfin_hash_entry(ent) ((struct bfin_link_hash_entry *) (ent)) @@ -4942,7 +5199,7 @@ bfin_link_hash_table_create (bfd * abfd) return NULL; } - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; return &ret->root.root; } @@ -5023,7 +5280,7 @@ bfin_finish_dynamic_symbol (bfd * output_bfd, || h->dynindx == -1 || h->forced_local) && h->def_regular) { fprintf(stderr, "*** check this relocation %s\n", __FUNCTION__); - rela.r_info = ELF32_R_INFO (0, R_pcrel24); + rela.r_info = ELF32_R_INFO (0, R_BFIN_PCREL24); rela.r_addend = bfd_get_signed_32 (output_bfd, (sgot->contents + @@ -5034,7 +5291,7 @@ bfin_finish_dynamic_symbol (bfd * output_bfd, { bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + (h->got.offset & ~(bfd_vma) 1)); - rela.r_info = ELF32_R_INFO (h->dynindx, R_got); + rela.r_info = ELF32_R_INFO (h->dynindx, R_BFIN_GOT); rela.r_addend = 0; } @@ -5429,7 +5686,7 @@ bfd_bfin_elf32_create_embedded_relocs ( characters. */ /* We can only relocate absolute longword relocs at run time. */ - if (ELF32_R_TYPE (irel->r_info) != (int) R_byte4_data) + if (ELF32_R_TYPE (irel->r_info) != (int) R_BFIN_BYTE4_DATA) { *errmsg = _("unsupported reloc type"); bfd_set_error (bfd_error_bad_value); @@ -5494,6 +5751,14 @@ error_return: free (internal_relocs); return FALSE; } + +struct bfd_elf_special_section const elf32_bfin_special_sections[] = +{ + { ".l1.text", 8, -2, SHT_PROGBITS, SHF_ALLOC + SHF_EXECINSTR }, + { ".l1.data", 8, -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, + { NULL, 0, 0, 0, 0 } +}; + #define TARGET_LITTLE_SYM bfd_elf32_bfin_vec #define TARGET_LITTLE_NAME "elf32-bfin" @@ -5542,6 +5807,7 @@ error_return: elf32_bfin_print_private_bfd_data #define elf_backend_reloc_type_class elf32_bfin_reloc_type_class #define elf_backend_can_gc_sections 1 +#define elf_backend_special_sections elf32_bfin_special_sections #define elf_backend_can_refcount 1 #define elf_backend_want_got_plt 0 #define elf_backend_plt_readonly 1 @@ -5559,6 +5825,7 @@ 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 @@ -5597,6 +5864,9 @@ error_return: #define elf_backend_finish_dynamic_sections \ elf32_bfinfdpic_finish_dynamic_sections +#undef elf_backend_discard_info +#define elf_backend_discard_info \ + bfinfdpic_elf_discard_info #undef elf_backend_can_make_relative_eh_frame #define elf_backend_can_make_relative_eh_frame \ bfinfdpic_elf_use_relative_eh_frame diff --git a/bfd/elf32-cr16.c b/bfd/elf32-cr16.c index 46664bc..f5e561e 100644 --- a/bfd/elf32-cr16.c +++ b/bfd/elf32-cr16.c @@ -1,5 +1,5 @@ /* BFD back-end for National Semiconductor's CR16 ELF - Copyright 2007 Free Software Foundation, Inc. + Copyright 2007, 2008, 2009 Free Software Foundation, Inc. Written by M R Swami Reddy. This file is part of BFD, the Binary File Descriptor library. @@ -26,6 +26,75 @@ #include "elf-bfd.h" #include "elf/cr16.h" +/* The cr16 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 with -Bsymbolic. We store the information in a field + extending the regular ELF linker hash table. */ + +struct elf32_cr16_link_hash_entry { + /* The basic elf link hash table entry. */ + struct elf_link_hash_entry root; + + /* For function symbols, the number of times this function is + called directly (ie by name). */ + unsigned int direct_calls; + + /* For function symbols, the size of this function's stack + (if <= 255 bytes). We stuff this into "call" instructions + to this target when it's valid and profitable to do so. + + This does not include stack allocated by movm! */ + unsigned char stack_size; + + /* For function symbols, arguments (if any) for movm instruction + in the prologue. We stuff this value into "call" instructions + to the target when it's valid and profitable to do so. */ + unsigned char movm_args; + + /* For function symbols, the amount of stack space that would be allocated + by the movm instruction. This is redundant with movm_args, but we + add it to the hash table to avoid computing it over and over. */ + unsigned char movm_stack_size; + +/* Used to mark functions which have had redundant parts of their + prologue deleted. */ +#define CR16_DELETED_PROLOGUE_BYTES 0x1 + unsigned char flags; + + /* Calculated value. */ + bfd_vma value; +}; + +/* We derive a hash table from the main elf linker hash table so + we can store state variables and a secondary hash table without + resorting to global variables. */ +struct elf32_cr16_link_hash_table { + /* The main hash table. */ + struct elf_link_hash_table root; + + /* A hash table for static functions. We could derive a new hash table + instead of using the full elf32_cr16_link_hash_table if we wanted + to save some memory. */ + struct elf32_cr16_link_hash_table *static_hash_table; + + /* Random linker state flags. */ +#define CR16_HASH_ENTRIES_INITIALIZED 0x1 + char flags; +}; + +/* For CR16 linker hash table. */ + +/* Get the CR16 ELF linker hash table from a link_info structure. */ + +#define elf32_cr16_hash_table(p) \ + ((struct elf32_cr16_link_hash_table *) ((p)->hash)) + +#define elf32_cr16_link_hash_traverse(table, func, info) \ + (elf_link_hash_traverse \ + (&(table)->root, \ + (bfd_boolean (*) ((struct elf_link_hash_entry *, void *))) (func), (info))) + /* cr16_reloc_map array maps BFD relocation enum into a CRGAS relocation type. */ struct cr16_reloc_map @@ -61,7 +130,13 @@ static const struct cr16_reloc_map cr16_reloc_map[R_CR16_MAX] = {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} + {BFD_RELOC_CR16_DISP24a, R_CR16_DISP24a}, + {BFD_RELOC_CR16_SWITCH8, R_CR16_SWITCH8}, + {BFD_RELOC_CR16_SWITCH16, R_CR16_SWITCH16}, + {BFD_RELOC_CR16_SWITCH32, R_CR16_SWITCH32}, + {BFD_RELOC_CR16_GOT_REGREL20, R_CR16_GOT_REGREL20}, + {BFD_RELOC_CR16_GOTC_REGREL20, R_CR16_GOTC_REGREL20}, + {BFD_RELOC_CR16_GLOB_DAT, R_CR16_GLOB_DAT} }; static reloc_howto_type cr16_elf_howto_table[] = @@ -90,7 +165,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_NUM8", /* name */ FALSE, /* partial_inplace */ - 0xff, /* src_mask */ + 0x0, /* src_mask */ 0xff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -104,7 +179,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_NUM16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -118,7 +193,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_NUM32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -132,7 +207,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_NUM32a", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -146,7 +221,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL4", /* name */ FALSE, /* partial_inplace */ - 0xf, /* src_mask */ + 0x0, /* src_mask */ 0xf, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -160,7 +235,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL4a", /* name */ FALSE, /* partial_inplace */ - 0xf, /* src_mask */ + 0x0, /* src_mask */ 0xf, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -174,7 +249,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL14", /* name */ FALSE, /* partial_inplace */ - 0x3fff, /* src_mask */ + 0x0, /* src_mask */ 0x3fff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -188,7 +263,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL14a", /* name */ FALSE, /* partial_inplace */ - 0x3fff, /* src_mask */ + 0x0, /* src_mask */ 0x3fff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -202,7 +277,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -216,7 +291,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL20", /* name */ FALSE, /* partial_inplace */ - 0xfffff, /* src_mask */ + 0x0, /* src_mask */ 0xfffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -230,7 +305,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_REGREL20a", /* name */ FALSE, /* partial_inplace */ - 0xfffff, /* src_mask */ + 0x0, /* src_mask */ 0xfffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -244,7 +319,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_ABS20", /* name */ FALSE, /* partial_inplace */ - 0xfffff, /* src_mask */ + 0x0, /* src_mask */ 0xfffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -258,7 +333,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_ABS24", /* name */ FALSE, /* partial_inplace */ - 0xffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -272,7 +347,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM4", /* name */ FALSE, /* partial_inplace */ - 0xf, /* src_mask */ + 0x0, /* src_mask */ 0xf, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -286,7 +361,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM8", /* name */ FALSE, /* partial_inplace */ - 0xff, /* src_mask */ + 0x0, /* src_mask */ 0xff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -300,7 +375,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -314,7 +389,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM20", /* name */ FALSE, /* partial_inplace */ - 0xfffff, /* src_mask */ + 0x0, /* src_mask */ 0xfffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -328,7 +403,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM24", /* name */ FALSE, /* partial_inplace */ - 0xffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -342,7 +417,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -356,7 +431,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_IMM32a", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -370,7 +445,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_DISP4", /* name */ FALSE, /* partial_inplace */ - 0xf, /* src_mask */ + 0x0, /* src_mask */ 0xf, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -384,7 +459,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_DISP8", /* name */ FALSE, /* partial_inplace */ - 0x1ff, /* src_mask */ + 0x0, /* src_mask */ 0x1ff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -398,7 +473,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_DISP16", /* name */ FALSE, /* partial_inplace */ - 0x1ffff, /* src_mask */ + 0x0, /* src_mask */ 0x1ffff, /* dst_mask */ FALSE), /* pcrel_offset */ /* REVISIT: DISP24 should be left-shift by 2 as per ISA doc @@ -413,7 +488,7 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_DISP24", /* name */ FALSE, /* partial_inplace */ - 0x1ffffff, /* src_mask */ + 0x0, /* src_mask */ 0x1ffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -427,11 +502,167 @@ static reloc_howto_type cr16_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CR16_DISP24a", /* name */ FALSE, /* partial_inplace */ - 0xffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffff, /* dst_mask */ - FALSE) /* pcrel_offset */ + FALSE), /* pcrel_offset */ + + /* An 8 bit switch table entry. This is generated for an expression + such as ``.byte L1 - L2''. The offset holds the difference + between the reloc address and L2. */ + HOWTO (R_CR16_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 */ + bfd_elf_generic_reloc, /* special_function */ + "R_CR16_SWITCH8", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0xff, /* 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_CR16_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 */ + bfd_elf_generic_reloc, /* special_function */ + "R_CR16_SWITCH16", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0xffff, /* 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_CR16_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 */ + bfd_elf_generic_reloc, /* special_function */ + "R_CR16_SWITCH32", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0xffffffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + HOWTO (R_CR16_GOT_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_GOT_REGREL20", /* name */ + TRUE, /* partial_inplace */ + 0x0, /* src_mask */ + 0xfffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_CR16_GOTC_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_GOTC_REGREL20", /* name */ + TRUE, /* partial_inplace */ + 0x0, /* src_mask */ + 0xfffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_CR16_GLOB_DAT, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_unsigned, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_CR16_GLOB_DAT", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0xffffffff, /* dst_mask */ + TRUE) /* pcrel_offset */ }; + +/* Create the GOT section. */ + +static bfd_boolean +_bfd_cr16_elf_create_got_section (bfd * abfd, struct bfd_link_info * info) +{ + flagword flags; + asection * s; + struct elf_link_hash_entry * h; + const struct elf_backend_data * bed = get_elf_backend_data (abfd); + int ptralign; + + /* This function may be called more than once. */ + if (bfd_get_section_by_name (abfd, ".got") != NULL) + return TRUE; + + switch (bed->s->arch_size) + { + case 16: + ptralign = 1; + break; + + case 32: + ptralign = 2; + break; + + default: + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY + | SEC_LINKER_CREATED); + + s = bfd_make_section_with_flags (abfd, ".got", flags); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + + if (bed->want_got_plt) + { + s = bfd_make_section_with_flags (abfd, ".got.plt", flags); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + } + + /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got + (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_"); + elf_hash_table (info)->hgot = h; + if (h == NULL) + return FALSE; + + /* The first bit of the global offset table is the header. */ + s->size += bed->got_header_size; + + return TRUE; +} + + /* Retrieve a howto ptr using a BFD reloc_code. */ static reloc_howto_type * @@ -471,20 +702,186 @@ elf_cr16_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr, 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]; + cache_ptr->howto = cr16_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 +cr16_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, + const Elf_Internal_Rela *relocs) +{ + Elf_Internal_Shdr *symtab_hdr; + Elf_Internal_Sym * isymbuf = NULL; + struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + const Elf_Internal_Rela *rel; + const Elf_Internal_Rela *rel_end; + bfd * dynobj; + bfd_vma * local_got_offsets; + asection * sgot; + asection * srelgot; + + sgot = NULL; + srelgot = NULL; + bfd_boolean result = FALSE; + + 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; + + dynobj = elf_hash_table (info)->dynobj; + local_got_offsets = elf_local_got_offsets (abfd); + 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]; + 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; + } + + /* Some relocs require a global offset table. */ + if (dynobj == NULL) + { + switch (ELF32_R_TYPE (rel->r_info)) + { + case R_CR16_GOT_REGREL20: + case R_CR16_GOTC_REGREL20: + elf_hash_table (info)->dynobj = dynobj = abfd; + if (! _bfd_cr16_elf_create_got_section (dynobj, info)) + goto fail; + break; + + default: + break; + } + } + + switch (ELF32_R_TYPE (rel->r_info)) + { + case R_CR16_GOT_REGREL20: + case R_CR16_GOTC_REGREL20: + /* This symbol requires a global offset table entry. */ + + if (sgot == NULL) + { + sgot = bfd_get_section_by_name (dynobj, ".got"); + BFD_ASSERT (sgot != NULL); + } + + if (srelgot == NULL + && (h != NULL || info->executable)) + { + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (srelgot == NULL) + { + srelgot = bfd_make_section_with_flags (dynobj, + ".rela.got", + (SEC_ALLOC + | SEC_LOAD + | SEC_HAS_CONTENTS + | SEC_IN_MEMORY + | SEC_LINKER_CREATED + | SEC_READONLY)); + if (srelgot == NULL + || ! bfd_set_section_alignment (dynobj, srelgot, 2)) + goto fail; + } + } + + if (h != NULL) + { + if (h->got.offset != (bfd_vma) -1) + /* We have already allocated space in the .got. */ + break; + + h->got.offset = sgot->size; + + /* Make sure this symbol is output as a dynamic symbol. */ + if (h->dynindx == -1) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + goto fail; + } + + srelgot->size += sizeof (Elf32_External_Rela); + } + else + { + /* This is a global offset table entry for a local + symbol. */ + if (local_got_offsets == NULL) + { + size_t size; + unsigned int i; + + size = symtab_hdr->sh_info * sizeof (bfd_vma); + local_got_offsets = (bfd_vma *) bfd_alloc (abfd, size); + + if (local_got_offsets == NULL) + goto fail; + + elf_local_got_offsets (abfd) = local_got_offsets; + + for (i = 0; i < symtab_hdr->sh_info; i++) + local_got_offsets[i] = (bfd_vma) -1; + } + + if (local_got_offsets[r_symndx] != (bfd_vma) -1) + /* We have already allocated space in the .got. */ + break; + + local_got_offsets[r_symndx] = sgot->size; + + if (info->executable) + /* If we are generating a shared object, we need to + output a R_CR16_RELATIVE reloc so that the dynamic + linker can adjust this GOT entry. */ + srelgot->size += sizeof (Elf32_External_Rela); + } + + sgot->size += 4; + break; + + } + } + + result = TRUE; + fail: + if (isymbuf != NULL) + free (isymbuf); + + return result; } /* 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 *input_bfd, bfd *output_bfd ATTRIBUTE_UNUSED, asection *input_section, - bfd_byte *contents, + bfd_byte *contents, bfd_vma offset, - bfd_vma Rvalue, - bfd_vma addend, + bfd_vma Rvalue, + bfd_vma addend, + struct elf_link_hash_entry * h, + unsigned long symndx ATTRIBUTE_UNUSED, struct bfd_link_info *info ATTRIBUTE_UNUSED, asection *sec ATTRIBUTE_UNUSED, int is_local ATTRIBUTE_UNUSED) @@ -493,12 +890,25 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto, bfd_byte *hit_data = contents + offset; bfd_vma reloc_bits, check, Rvalue1; + bfd * dynobj; + bfd_vma * local_got_offsets; + asection * sgot; + + dynobj = elf_hash_table (info)->dynobj; + local_got_offsets = elf_local_got_offsets (input_bfd); + + sgot = NULL; + + switch (r_type) { case R_CR16_IMM4: + case R_CR16_IMM20: + case R_CR16_ABS20: + break; + case R_CR16_IMM8: case R_CR16_IMM16: - case R_CR16_IMM20: case R_CR16_IMM32: case R_CR16_IMM32a: case R_CR16_REGREL4: @@ -507,7 +917,9 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto, case R_CR16_REGREL14a: case R_CR16_REGREL16: case R_CR16_REGREL20: - case R_CR16_ABS20: + case R_CR16_REGREL20a: + case R_CR16_GOT_REGREL20: + case R_CR16_GOTC_REGREL20: case R_CR16_ABS24: case R_CR16_DISP16: case R_CR16_DISP24: @@ -521,12 +933,23 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto, break; case R_CR16_DISP4: + if (is_local) + Rvalue += -1; + break; + case R_CR16_DISP8: case R_CR16_DISP24a: + if (is_local) + Rvalue -= -1; + break; + + case R_CR16_SWITCH8: + case R_CR16_SWITCH16: + case R_CR16_SWITCH32: /* We only care about the addend, where the difference between expressions is kept. */ - if (is_local) Rvalue -= -1; - + Rvalue = 0; + default: break; } @@ -552,44 +975,64 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto, 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))) + /* For GOT and GOTC relocs no boundary checks applied. */ + if (!((r_type == R_CR16_GOT_REGREL20) + || (r_type == R_CR16_GOTC_REGREL20))) { - /* 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) + if (((bfd_vma) check & ~reloc_bits) != 0 + && (((bfd_vma) check & ~reloc_bits) + != (-(bfd_vma) 1 & ~reloc_bits))) { - check |= ((bfd_vma) - 1 - & ~((bfd_vma) - 1 - >> howto->rightshift)); + /* 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; + if (((bfd_vma) check & ~reloc_bits) + != (-(bfd_vma) 1 & ~reloc_bits)) + return bfd_reloc_overflow; + } + else + return bfd_reloc_overflow; } - else - return bfd_reloc_overflow; - } - /* Drop unwanted bits from the value we are relocating to. */ - Rvalue >>= (bfd_vma) howto->rightshift; + /* 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; + /* 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)) + if (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); + | (Rvalue1 & 0x00f0) | (Rvalue & 0xf)); + bfd_put_16 (input_bfd, Rvalue, hit_data); + } + else if (r_type == R_CR16_IMM4) + { + Rvalue1 = bfd_get_16 (input_bfd, hit_data); + Rvalue = (((Rvalue1 & 0xff) << 8) | ((Rvalue << 4) & 0xf0) + | ((Rvalue1 & 0x0f00) >> 8)); + bfd_put_16 (input_bfd, Rvalue, hit_data); + } + else if (r_type == R_CR16_DISP4) + { + Rvalue1 = bfd_get_16 (input_bfd, hit_data); + Rvalue = (Rvalue1 | ((Rvalue & 0xf) << 4)); + bfd_put_16 (input_bfd, Rvalue, hit_data); + } + else + { + bfd_put_8 (input_bfd, (unsigned char) Rvalue, hit_data); } break; @@ -598,65 +1041,242 @@ cr16_elf_final_link_relocate (reloc_howto_type *howto, { Rvalue |= (bfd_get_16 (input_bfd, hit_data)); Rvalue = ((Rvalue & 0xfffe) | ((Rvalue >> 16) & 0x1)); + } + if (r_type == R_CR16_IMM16) + { + Rvalue1 = bfd_get_16 (input_bfd, hit_data); + + /* Add or subtract the offset value. */ + if (Rvalue1 & 0x8000) + Rvalue -= (~Rvalue1 + 1) & 0xffff; + else + Rvalue += Rvalue1; - bfd_put_16 (input_bfd, Rvalue, hit_data); + /* Check for range. */ + if ((long) Rvalue > 0xffff || (long) Rvalue < 0x0) + return bfd_reloc_overflow; } + + 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) + if ((r_type == R_CR16_ABS20) || (r_type == R_CR16_IMM20)) { - Rvalue = ((((Rvalue >> 20)& 0xf) - | (((Rvalue >> 16) & 0xf) << 8) - | (bfd_get_16 (input_bfd, hit_data))) - | ((Rvalue & 0xffff) << 16)); + Rvalue1 = (bfd_get_16 (input_bfd, hit_data + 2) + | (((bfd_get_16 (input_bfd, hit_data) & 0xf) <<16))); - bfd_put_32 (input_bfd, Rvalue, hit_data); + /* Add or subtract the offset value. */ + if (Rvalue1 & 0x80000) + Rvalue -= (~Rvalue1 + 1) & 0xfffff; + else + Rvalue += Rvalue1; + + /* Check for range. */ + if ((long) Rvalue > 0xfffff || (long) Rvalue < 0x0) + return bfd_reloc_overflow; + + bfd_put_16 (input_bfd, ((bfd_get_16 (input_bfd, hit_data) & 0xfff0) + | ((Rvalue >> 16) & 0xf)), hit_data); + bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2); } - else if (r_type == R_CR16_DISP24) + else if (r_type == R_CR16_GOT_REGREL20) { - Rvalue = ((((Rvalue >> 20)& 0xf) | (((Rvalue >> 16) & 0xf)<<8) - | (bfd_get_16 (input_bfd, hit_data))) - | (((Rvalue & 0xfffE) | ((Rvalue >> 24) & 0x1)) << 16)); + asection * sgot = bfd_get_section_by_name (dynobj, ".got"); + + if (h != NULL) + { + bfd_vma off; + + off = h->got.offset; + BFD_ASSERT (off != (bfd_vma) -1); + + if (! elf_hash_table (info)->dynamic_sections_created + || SYMBOL_REFERENCES_LOCAL (info, h)) + /* This is actually a static link, or it is a + -Bsymbolic link and the symbol is defined + locally, or the symbol was forced to be local + because of a version file. We must initialize + this entry in the global offset table. + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + bfd_put_32 (output_bfd, Rvalue, sgot->contents + off); + + Rvalue = sgot->output_offset + off; + } + else + { + bfd_vma off; + + off = elf_local_got_offsets (input_bfd)[symndx]; + bfd_put_32 (output_bfd,Rvalue, sgot->contents + off); + + Rvalue = sgot->output_offset + off; + } + + Rvalue += addend; + + /* REVISIT: if ((long) Rvalue > 0xffffff || + (long) Rvalue < -0x800000). */ + if ((long) Rvalue > 0xffffff || (long) Rvalue < 0) + return bfd_reloc_overflow; + + + bfd_put_16 (input_bfd, (bfd_get_16 (input_bfd, hit_data)) + | (((Rvalue >> 16) & 0xf) << 8), hit_data); + bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2); - bfd_put_32 (input_bfd, Rvalue, hit_data); } - else if ((r_type == R_CR16_IMM32) || (r_type == R_CR16_IMM32a)) + else if (r_type == R_CR16_GOTC_REGREL20) { - Rvalue = (((Rvalue >> 16)& 0xffff) - | (bfd_get_16 (input_bfd, hit_data))) - | ((Rvalue & 0xffff) << 16); - bfd_put_32 (input_bfd, Rvalue, hit_data); + asection * sgot; + sgot = bfd_get_section_by_name (dynobj, ".got"); + + if (h != NULL) + { + bfd_vma off; + + off = h->got.offset; + BFD_ASSERT (off != (bfd_vma) -1); + + Rvalue >>=1; /* For code symbols. */ + + if (! elf_hash_table (info)->dynamic_sections_created + || SYMBOL_REFERENCES_LOCAL (info, h)) + /* This is actually a static link, or it is a + -Bsymbolic link and the symbol is defined + locally, or the symbol was forced to be local + because of a version file. We must initialize + this entry in the global offset table. + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + bfd_put_32 (output_bfd, Rvalue, sgot->contents + off); + + Rvalue = sgot->output_offset + off; + } + else + { + bfd_vma off; + + off = elf_local_got_offsets (input_bfd)[symndx]; + Rvalue >>= 1; + bfd_put_32 (output_bfd,Rvalue, sgot->contents + off); + Rvalue = sgot->output_offset + off; + } + + Rvalue += addend; + + /* Check if any value in DISP. */ + Rvalue1 =((bfd_get_32 (input_bfd, hit_data) >>16) + | (((bfd_get_32 (input_bfd, hit_data) & 0xfff) >> 8) <<16)); + + /* Add or subtract the offset value. */ + if (Rvalue1 & 0x80000) + Rvalue -= (~Rvalue1 + 1) & 0xfffff; + else + Rvalue += Rvalue1; + + /* Check for range. */ + /* REVISIT: if ((long) Rvalue > 0xffffff + || (long) Rvalue < -0x800000). */ + if ((long) Rvalue > 0xffffff || (long) Rvalue < 0) + return bfd_reloc_overflow; + + bfd_put_16 (input_bfd, (bfd_get_16 (input_bfd, hit_data)) + | (((Rvalue >> 16) & 0xf) << 8), hit_data); + bfd_put_16 (input_bfd, (Rvalue) & 0xffff, hit_data + 2); } - else if (r_type == R_CR16_DISP24a) + else { - Rvalue = (((Rvalue & 0xfffffe) | (Rvalue >> 23))); - Rvalue = ((Rvalue >> 16) & 0xff) | ((Rvalue & 0xffff) << 16) - | (bfd_get_32 (input_bfd, hit_data)); + if (r_type == R_CR16_ABS24) + { + Rvalue1 = ((bfd_get_32 (input_bfd, hit_data) >> 16) + | (((bfd_get_32 (input_bfd, hit_data) & 0xfff) >> 8) <<16) + | (((bfd_get_32 (input_bfd, hit_data) & 0xf) <<20))); + + /* Add or subtract the offset value. */ + if (Rvalue1 & 0x800000) + Rvalue -= (~Rvalue1 + 1) & 0xffffff; + else + Rvalue += Rvalue1; + + /* Check for Range. */ + if ((long) Rvalue > 0xffffff || (long) Rvalue < 0x0) + return bfd_reloc_overflow; + + Rvalue = ((((Rvalue >> 20) & 0xf) | (((Rvalue >> 16) & 0xf)<<8) + | (bfd_get_32 (input_bfd, hit_data) & 0xf0f0)) + | ((Rvalue & 0xffff) << 16)); + } + 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)); + } + else if ((r_type == R_CR16_IMM32) || (r_type == R_CR16_IMM32a)) + { + Rvalue1 =((((bfd_get_32 (input_bfd, hit_data)) >> 16) &0xffff) + | (((bfd_get_32 (input_bfd, hit_data)) &0xffff)) << 16); + + /* Add or subtract the offset value. */ + if (Rvalue1 & 0x80000000) + Rvalue -= (~Rvalue1 + 1) & 0xffffffff; + else + Rvalue += Rvalue1; + + /* Check for range. */ + if (Rvalue > 0xffffffff || (long) Rvalue < 0x0) + return bfd_reloc_overflow; + + Rvalue = (((Rvalue >> 16)& 0xffff) | (Rvalue & 0xffff) << 16); + } + 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)); + } + else if ((r_type == R_CR16_REGREL20) + || (r_type == R_CR16_REGREL20a)) + { + Rvalue1 = ((bfd_get_32 (input_bfd, hit_data) >> 16) + | (((bfd_get_32 (input_bfd, hit_data) & 0xfff) >> 8) <<16)); + /* Add or subtract the offset value. */ + if (Rvalue1 & 0x80000) + Rvalue -= (~Rvalue1 + 1) & 0xfffff; + else + Rvalue += Rvalue1; + + /* Check for range. */ + if ((long) Rvalue > 0xfffff || (long) Rvalue < 0x0) + return bfd_reloc_overflow; + + Rvalue = (((((Rvalue >> 20)& 0xf) | (((Rvalue >>16) & 0xf)<<8) + | ((Rvalue & 0xffff) << 16))) + | (bfd_get_32 (input_bfd, hit_data) & 0xf0ff)); + + } + else if (r_type == R_CR16_NUM32) + { + Rvalue1 = (bfd_get_32 (input_bfd, hit_data)); + + /* Add or subtract the offset value */ + if (Rvalue1 & 0x80000000) + Rvalue -= (~Rvalue1 + 1) & 0xffffffff; + else + Rvalue += Rvalue1; + + /* Check for Ranga */ + if (Rvalue > 0xffffffff) + return bfd_reloc_overflow; + } 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; + break; default: return bfd_reloc_notsupported; @@ -705,7 +1325,7 @@ elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd, 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; + irel->r_offset -= count; /* Adjust the local symbols defined in this section. */ symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -718,12 +1338,19 @@ elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd, { /* Adjust the addend of SWITCH relocations in this section, which reference this local symbol. */ +#if 0 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++) { unsigned long r_symndx; Elf_Internal_Sym *rsym; bfd_vma addsym, subsym; + /* Skip if not a SWITCH relocation. */ + if (ELF32_R_TYPE (irel->r_info) != (int) R_CR16_SWITCH8 + && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_SWITCH16 + && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_SWITCH32) + continue; + r_symndx = ELF32_R_SYM (irel->r_info); rsym = (Elf_Internal_Sym *) symtab_hdr->contents + r_symndx; @@ -740,6 +1367,7 @@ elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd, else continue; } +#endif isym->st_value -= count; } @@ -769,10 +1397,10 @@ elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd, /* 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; + /* 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) @@ -794,10 +1422,10 @@ elf32_cr16_relax_delete_bytes (struct bfd_link_info *link_info, bfd *abfd, 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) + 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; @@ -849,6 +1477,8 @@ elf32_cr16_relocate_section (bfd *output_bfd, struct bfd_link_info *info, input_section, contents, rel->r_offset, relocation, rel->r_addend, + (struct elf_link_hash_entry *) h, + r_symndx, info, sec, h == NULL); if (r != bfd_reloc_ok) @@ -953,7 +1583,7 @@ elf32_cr16_get_relocated_section_contents (bfd *output_bfd, bfd_size_type amt; internal_relocs = _bfd_elf_link_read_relocs (input_bfd, input_section, - NULL, NULL, FALSE); + NULL, NULL, FALSE); if (internal_relocs == NULL) goto error_return; @@ -1019,56 +1649,218 @@ elf32_cr16_get_relocated_section_contents (bfd *output_bfd, return NULL; } -/* This function handles relaxing for the CR16. - - There's quite a few relaxing opportunites available on the CR16: +/* Assorted hash table functions. */ - * bcond:24 -> bcond:16 2 bytes - * bcond:16 -> bcond:8 2 bytes - * arithmetic imm32 -> arithmetic imm16 2 bytes +/* Initialize an entry in the link hash table. */ - Symbol- and reloc-reading infrastructure copied from elf-m10200.c. */ +/* Create an entry in an CR16 ELF linker hash table. */ -static bfd_boolean -elf32_cr16_relax_section (bfd *abfd, asection *sec, - struct bfd_link_info *link_info, bfd_boolean *again) +static struct bfd_hash_entry * +elf32_cr16_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { - Elf_Internal_Shdr *symtab_hdr; - Elf_Internal_Rela *internal_relocs; - Elf_Internal_Rela *irel, *irelend; - bfd_byte *contents = NULL; - Elf_Internal_Sym *isymbuf = NULL; + struct elf32_cr16_link_hash_entry *ret = + (struct elf32_cr16_link_hash_entry *) entry; + + /* Allocate the structure if it has not already been allocated by a + subclass. */ + if (ret == (struct elf32_cr16_link_hash_entry *) NULL) + ret = ((struct elf32_cr16_link_hash_entry *) + bfd_hash_allocate (table, + sizeof (struct elf32_cr16_link_hash_entry))); + if (ret == (struct elf32_cr16_link_hash_entry *) NULL) + return (struct bfd_hash_entry *) ret; + + /* Call the allocation method of the superclass. */ + ret = ((struct elf32_cr16_link_hash_entry *) + _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, + table, string)); + if (ret != (struct elf32_cr16_link_hash_entry *) NULL) + { + ret->direct_calls = 0; + ret->stack_size = 0; + ret->movm_args = 0; + ret->movm_stack_size = 0; + ret->flags = 0; + ret->value = 0; + } - /* Assume nothing changes. */ - *again = FALSE; + return (struct bfd_hash_entry *) ret; +} - /* 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; +/* Create an cr16 ELF linker hash table. */ - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; +static struct bfd_link_hash_table * +elf32_cr16_link_hash_table_create (bfd *abfd) +{ + struct elf32_cr16_link_hash_table *ret; + bfd_size_type amt = sizeof (struct elf32_cr16_link_hash_table); - /* 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; + ret = (struct elf32_cr16_link_hash_table *) bfd_malloc (amt); + if (ret == (struct elf32_cr16_link_hash_table *) NULL) + return NULL; - /* Walk through them looking for relaxing opportunities. */ - irelend = internal_relocs + sec->reloc_count; - for (irel = internal_relocs; irel < irelend; irel++) + if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, + elf32_cr16_link_hash_newfunc, + sizeof (struct elf32_cr16_link_hash_entry))) { - bfd_vma symval; + free (ret); + return NULL; + } + + ret->flags = 0; + amt = sizeof (struct elf_link_hash_table); + ret->static_hash_table + = (struct elf32_cr16_link_hash_table *) bfd_malloc (amt); + if (ret->static_hash_table == NULL) + { + free (ret); + return NULL; + } + + if (!_bfd_elf_link_hash_table_init (&ret->static_hash_table->root, abfd, + elf32_cr16_link_hash_newfunc, + sizeof (struct elf32_cr16_link_hash_entry))) + { + free (ret->static_hash_table); + free (ret); + return NULL; + } + return &ret->root.root; +} + +/* Free an cr16 ELF linker hash table. */ + +static void +elf32_cr16_link_hash_table_free (struct bfd_link_hash_table *hash) +{ + struct elf32_cr16_link_hash_table *ret + = (struct elf32_cr16_link_hash_table *) hash; + + _bfd_generic_link_hash_table_free + ((struct bfd_link_hash_table *) ret->static_hash_table); + _bfd_generic_link_hash_table_free + ((struct bfd_link_hash_table *) ret); +} + +static unsigned long +elf_cr16_mach (flagword flags) +{ + switch (flags) + { + case EM_CR16: + default: + return bfd_mach_cr16; + } +} + +/* The final processing done just before writing out a CR16 ELF object + file. This gets the CR16 architecture right based on the machine + number. */ + +static void +_bfd_cr16_elf_final_write_processing (bfd *abfd, + bfd_boolean linker ATTRIBUTE_UNUSED) +{ + unsigned long val; + switch (bfd_get_mach (abfd)) + { + default: + case bfd_mach_cr16: + val = EM_CR16; + break; + } + + + elf_elfheader (abfd)->e_flags |= val; +} + + +static bfd_boolean +_bfd_cr16_elf_object_p (bfd *abfd) +{ + bfd_default_set_arch_mach (abfd, bfd_arch_cr16, + elf_cr16_mach (elf_elfheader (abfd)->e_flags)); + return TRUE; +} + +/* Merge backend specific data from an object file to the output + object file when linking. */ + +static bfd_boolean +_bfd_cr16_elf_merge_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; + + if (bfd_get_arch (obfd) == bfd_get_arch (ibfd) + && bfd_get_mach (obfd) < bfd_get_mach (ibfd)) + { + if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), + bfd_get_mach (ibfd))) + return FALSE; + } + + return TRUE; +} + + +/* This function handles relaxing for the CR16. + + There's quite a few relaxing opportunites available on the CR16: + + * bcond:24 -> bcond:16 1 byte + * bcond:16 -> bcond:8 1 byte + * arithmetic imm32 -> arithmetic imm20 12 bits + * arithmetic imm20/imm16 -> arithmetic imm4 12/16 bits + + 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) + && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_DISP24 + && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_IMM32 + && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_IMM20 + && ELF32_R_TYPE (irel->r_info) != (int) R_CR16_IMM16) continue; /* Get the section contents if we haven't done so already. */ @@ -1145,7 +1937,7 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, the linker is run. */ /* Try to turn a 24 branch/call into a 16bit relative - * branch/call. */ + branch/call. */ if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_DISP24) { bfd_vma value = symval; @@ -1167,10 +1959,7 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, /* 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); - } + bfd_put_16 (abfd, 0x1800 | ((0xf & (code >> 20)) << 4), contents + irel->r_offset); else continue; @@ -1208,19 +1997,17 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, /* 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) + /*if ((long) value < 0x1fa && (long) value > -0x100) REVISIT:range */ + if ((long) value < 0xfa && (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); - } + /* Verify it's a 'bcond' and fix the opcode. */ + if ((code & 0xff0f) == 0x1800) + bfd_put_16 (abfd, (code & 0xf0f0), contents + irel->r_offset); else continue; @@ -1244,24 +2031,78 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, } } -#if 0 // REVISIT: To support IMM relaxation in CR16 target - /* Try to turn a 32bit immediate address into - a 20bit immediate address. */ + /* Try to turn a 32-bit IMM address into a 20/16-bit IMM address */ if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_IMM32) { bfd_vma value = symval; + unsigned short is_add_mov = 0; + bfd_vma value1 = 0; + + /* Get the existing value from the mcode */ + value1 = ((bfd_get_32 (abfd, contents + irel->r_offset + 2) >> 16) + |(((bfd_get_32 (abfd, contents + irel->r_offset + 2) & 0xffff) << 16))); /* See if the value will fit in 20 bits. */ - if ((long) value < 0x7ffff && (long) value > -0x80000) + if ((long) (value + value1) < 0xfffff && (long) (value + value1) > 0) { 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; + /* Verify it's a 'arithmetic ADDD or MOVD instruction'. + For ADDD and MOVD only, convert to IMM32 -> IMM20. */ + + if (((code & 0xfff0) == 0x0070) || ((code & 0xfff0) == 0x0020)) + is_add_mov = 1; + + if (is_add_mov) + { + /* 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. */ + if ((code & 0xfff0) == 0x0070) /* For movd. */ + bfd_put_8 (abfd, 0x05, contents + irel->r_offset + 1); + else /* code == 0x0020 for addd. */ + bfd_put_8 (abfd, 0x04, contents + irel->r_offset + 1); + + bfd_put_8 (abfd, (code & 0xf) << 4, contents + irel->r_offset); + + /* If existing value is nagavive adjust approriately + place the 16-20bits (ie 4 bit) in new opcode, + as the 0xffffxxxx, the higher 2 byte values removed. */ + if (value1 & 0x80000000) + bfd_put_8 (abfd, (0x0f | (bfd_get_8(abfd, contents + irel->r_offset))), contents + irel->r_offset); + else + bfd_put_8 (abfd, (((value1 >> 16)&0xf) | (bfd_get_8(abfd, contents + irel->r_offset))), 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; + } + } + + /* See if the value will fit in 16 bits. */ + if ((!is_add_mov) + && ((long)(value + value1) < 0x7fff && (long)(value + value1) > 0)) + { + unsigned short code; + + /* Get the opcode. */ + code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset); /* Note that we've changed the relocs, section contents, etc. */ elf_section_data (sec)->relocs = internal_relocs; @@ -1269,15 +2110,33 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, symtab_hdr->contents = (unsigned char *) isymbuf; /* Fix the opcode. */ - bfd_put_8 (abfd, (code & 0xff) - 0x10, contents + irel->r_offset); + if ((code & 0xf0) == 0x70) /* For movd. */ + bfd_put_8 (abfd, 0x54, contents + irel->r_offset + 1); + else if ((code & 0xf0) == 0x20) /* For addd. */ + bfd_put_8 (abfd, 0x60, contents + irel->r_offset + 1); + else if ((code & 0xf0) == 0x90) /* For cmpd. */ + bfd_put_8 (abfd, 0x56, contents + irel->r_offset + 1); + else + continue; + + bfd_put_8 (abfd, 0xb0 | (code & 0xf), contents + irel->r_offset); + + /* If existing value is nagavive adjust approriately + place the 12-16bits (ie 4 bit) in new opcode, + as the 0xfffffxxx, the higher 2 byte values removed. */ + if (value1 & 0x80000000) + bfd_put_8 (abfd, (0x0f | (bfd_get_8(abfd, contents + irel->r_offset))), contents + irel->r_offset); + else + bfd_put_16 (abfd, value1, contents + irel->r_offset + 2); + /* Fix the relocation's type. */ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), - R_CR16_IMM20); + R_CR16_IMM16); /* Delete two bytes of data. */ if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec, - irel->r_offset + 2, 2)) + irel->r_offset + 2, 2)) goto error_return; /* That will change things, so, we should relax again. @@ -1285,24 +2144,32 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, *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)) + +#if 0 + /* Try to turn a 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; + bfd_vma value1 = 0; + + /* Get the existing value from the mcode */ + value1 = ((bfd_get_16 (abfd, contents + irel->r_offset + 2) & 0xffff)); + + if (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_IMM20) + { + value1 |= ((bfd_get_16 (abfd, contents + irel->r_offset + 1) & 0xf000) << 0x4); + } /* See if the value will fit in 4 bits. */ - if ((long) value < 0x7 && (long) value > -0x8) + if ((((long) (value + value1)) < 0xf) + && (((long) (value + value1)) > 0)) { 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; + code = (unsigned short) bfd_get_16 (abfd, contents + irel->r_offset); /* Note that we've changed the relocs, section contents, etc. */ elf_section_data (sec)->relocs = internal_relocs; @@ -1310,7 +2177,49 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, symtab_hdr->contents = (unsigned char *) isymbuf; /* Fix the opcode. */ - bfd_put_8 (abfd, (code & 0xff) - 0x10, contents + irel->r_offset); + if (((code & 0x0f00) == 0x0400) || ((code & 0x0f00) == 0x0500)) + { + if ((code & 0x0f00) == 0x0400) /* For movd imm20. */ + bfd_put_8 (abfd, 0x60, contents + irel->r_offset); + else /* For addd imm20. */ + bfd_put_8 (abfd, 0x54, contents + irel->r_offset); + bfd_put_8 (abfd, (code & 0xf0) >> 4, contents + irel->r_offset + 1); + } + else + { + if ((code & 0xfff0) == 0x56b0) /* For cmpd imm16. */ + bfd_put_8 (abfd, 0x56, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x54b0) /* For movd imm16. */ + bfd_put_8 (abfd, 0x54, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x58b0) /* For movb imm16. */ + bfd_put_8 (abfd, 0x58, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x5Ab0) /* For movw imm16. */ + bfd_put_8 (abfd, 0x5A, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x60b0) /* For addd imm16. */ + bfd_put_8 (abfd, 0x60, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x30b0) /* For addb imm16. */ + bfd_put_8 (abfd, 0x30, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x2Cb0) /* For addub imm16. */ + bfd_put_8 (abfd, 0x2C, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x32b0) /* For adduw imm16. */ + bfd_put_8 (abfd, 0x32, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x38b0) /* For subb imm16. */ + bfd_put_8 (abfd, 0x38, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x3Cb0) /* For subcb imm16. */ + bfd_put_8 (abfd, 0x3C, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x3Fb0) /* For subcw imm16. */ + bfd_put_8 (abfd, 0x3F, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x3Ab0) /* For subw imm16. */ + bfd_put_8 (abfd, 0x3A, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x50b0) /* For cmpb imm16. */ + bfd_put_8 (abfd, 0x50, contents + irel->r_offset); + else if ((code & 0xfff0) == 0x52b0) /* For cmpw imm16. */ + bfd_put_8 (abfd, 0x52, contents + irel->r_offset); + else + continue; + + bfd_put_8 (abfd, (code & 0xf), contents + irel->r_offset + 1); + } /* Fix the relocation's type. */ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), @@ -1318,7 +2227,7 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, /* Delete two bytes of data. */ if (!elf32_cr16_relax_delete_bytes (link_info, abfd, sec, - irel->r_offset + 2, 2)) + irel->r_offset + 2, 2)) goto error_return; /* That will change things, so, we should relax again. @@ -1335,10 +2244,8 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, if (! link_info->keep_memory) free (isymbuf); else - { - /* Cache the symbols for elf_link_input_bfd. */ - symtab_hdr->contents = (unsigned char *) isymbuf; - } + /* Cache the symbols for elf_link_input_bfd. */ + symtab_hdr->contents = (unsigned char *) isymbuf; } if (contents != NULL @@ -1347,10 +2254,9 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, 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; - } + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; + } if (internal_relocs != NULL @@ -1375,10 +2281,10 @@ elf32_cr16_relax_section (bfd *abfd, asection *sec, 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) + 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); @@ -1401,19 +2307,749 @@ elf32_cr16_gc_mark_hook (asection *sec, 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) + 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; } +/* Create dynamic sections when linking against a dynamic object. */ + +static bfd_boolean +_bfd_cr16_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) +{ + flagword flags; + asection * s; + const struct elf_backend_data * bed = get_elf_backend_data (abfd); + int ptralign = 0; + + switch (bed->s->arch_size) + { + case 16: + ptralign = 1; + break; + + case 32: + ptralign = 2; + break; + + default: + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and + .rel[a].bss sections. */ + + flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY + | SEC_LINKER_CREATED); + + s = bfd_make_section_with_flags (abfd, + (bed->default_use_rela_p + ? ".rela.plt" : ".rel.plt"), + flags | SEC_READONLY); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + + if (! _bfd_cr16_elf_create_got_section (abfd, info)) + return FALSE; + + { + const char * secname; + char * relname; + flagword secflags; + asection * sec; + + for (sec = abfd->sections; sec; sec = sec->next) + { + secflags = bfd_get_section_flags (abfd, sec); + if ((secflags & (SEC_DATA | SEC_LINKER_CREATED)) + || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS)) + continue; + + secname = bfd_get_section_name (abfd, sec); + relname = (char *) bfd_malloc (strlen (secname) + 6); + strcpy (relname, ".rela"); + strcat (relname, secname); + + s = bfd_make_section_with_flags (abfd, relname, + flags | SEC_READONLY); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + } + } + + if (bed->want_dynbss) + { + /* The .dynbss section is a place to put symbols which are defined + by dynamic objects, are referenced by regular objects, and are + not functions. We must allocate space for them in the process + 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_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 + normally needed. We need to create it here, though, so that the + linker will map it to an output section. We can't just create it + only if we need it, because we will not know whether we need it + until we have seen all the input files, and the first time the + main linker code calls BFD after examining all the input files + (size_dynamic_sections) the input sections have already been + mapped to the output sections. If the section turns out not to + be needed, we can discard it later. We will never need this + section when generating a shared object, since they do not use + copy relocs. */ + if (! info->executable) + { + 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_alignment (abfd, s, ptralign)) + return FALSE; + } + } + + return TRUE; +} + +/* Adjust a symbol defined by a dynamic object and referenced by a + regular object. The current definition is in some section of the + dynamic object, but we're not including those sections. We have to + change the definition to something the rest of the link can + understand. */ + +static bfd_boolean +_bfd_cr16_elf_adjust_dynamic_symbol (struct bfd_link_info * info, + struct elf_link_hash_entry * h) +{ + bfd * dynobj; + 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 is a function, put it in the procedure linkage table. We + will fill in the contents of the procedure linkage table later, + when we know the address of the .got section. */ + if (h->type == STT_FUNC + || h->needs_plt) + { + if (! info->executable + && !h->def_dynamic + && !h->ref_dynamic) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic + object. In such a case, we don't actually need to build + a procedure linkage table, and we can just do a REL32 + reloc instead. */ + BFD_ASSERT (h->needs_plt); + return TRUE; + } + + /* Make sure this symbol is output as a dynamic symbol. */ + if (h->dynindx == -1) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + /* We also need to make an entry in the .got.plt section, which + will be placed in the .got section by the linker script. */ + + s = bfd_get_section_by_name (dynobj, ".got.plt"); + BFD_ASSERT (s != NULL); + s->size += 4; + + /* We also need to make an entry in the .rela.plt section. */ + + s = bfd_get_section_by_name (dynobj, ".rela.plt"); + BFD_ASSERT (s != NULL); + s->size += sizeof (Elf32_External_Rela); + + 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. */ + + /* If we are creating a shared library, we must presume that the + only references to the symbol are via the global offset table. + For such cases we need not do anything here; the relocations will + be handled correctly by relocate_section. */ + if (info->executable) + return TRUE; + + /* If there are no references to this symbol that do not use the + GOT, we don't need to generate a copy reloc. */ + if (!h->non_got_ref) + return TRUE; + + if (h->size == 0) + { + (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"), + h->root.root.string); + return TRUE; + } + + /* We must allocate the symbol in our .dynbss section, which will + become part of the .bss section of the executable. There will be + an entry for this symbol in the .dynsym section. The dynamic + object will contain position independent code, so all references + from the dynamic object to this symbol will go through the global + offset table. The dynamic linker will use the .dynsym entry to + determine the address it must put in the global offset table, so + both the dynamic object and the regular object will refer to the + same memory location for the variable. */ + + s = bfd_get_section_by_name (dynobj, ".dynbss"); + BFD_ASSERT (s != NULL); + + /* We must generate a R_CR16_COPY reloc to tell the dynamic linker to + copy the initial value out of the dynamic object and into the + runtime process image. We need to remember the offset into the + .rela.bss section we are going to use. */ + if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) + { + asection * srel; + + srel = bfd_get_section_by_name (dynobj, ".rela.bss"); + BFD_ASSERT (srel != NULL); + srel->size += sizeof (Elf32_External_Rela); + h->needs_copy = 1; + } + + return _bfd_elf_adjust_dynamic_copy (h, s); +} + +/* Set the sizes of the dynamic sections. */ + +static bfd_boolean +_bfd_cr16_elf_size_dynamic_sections (bfd * output_bfd, + struct bfd_link_info * info) +{ + bfd * dynobj; + asection * s; + bfd_boolean plt; + bfd_boolean relocs; + 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->executable) + { +#if 0 + s = bfd_get_section_by_name (dynobj, ".interp"); + BFD_ASSERT (s != NULL); + s->size = sizeof ELF_DYNAMIC_INTERPRETER; + s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; +#endif + } + } + else + { + /* We may have created entries in the .rela.got section. + However, if we are not creating the dynamic sections, we will + not actually use these entries. Reset the size of .rela.got, + which will cause it to get stripped from the output file + below. */ + s = bfd_get_section_by_name (dynobj, ".rela.got"); + if (s != NULL) + s->size = 0; + } + + /* The check_relocs and adjust_dynamic_symbol entry points have + determined the sizes of the various dynamic sections. Allocate + memory for them. */ + plt = FALSE; + relocs = FALSE; + 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 (strcmp (name, ".plt") == 0) + { + /* Remember whether there is a PLT. */ + plt = s->size != 0; + } + else if (CONST_STRNEQ (name, ".rela")) + { + if (s->size != 0) + { + asection * target; + + /* Remember whether there are any reloc sections other + than .rela.plt. */ + if (strcmp (name, ".rela.plt") != 0) + { + const char * outname; + + relocs = TRUE; + + /* If this relocation section applies to a read only + section, then we probably need a DT_TEXTREL + entry. The entries in the .rela.plt section + really apply to the .got section, which we + created ourselves and so know is not readonly. */ + outname = bfd_get_section_name (output_bfd, + s->output_section); + target = bfd_get_section_by_name (output_bfd, outname + 5); + if (target != NULL + && (target->flags & SEC_READONLY) != 0 + && (target->flags & SEC_ALLOC) != 0) + reltext = TRUE; + } + + /* We use the reloc_count field as a counter if we need + to copy relocs into the output file. */ + s->reloc_count = 0; + } + } + else if (! CONST_STRNEQ (name, ".got") + && strcmp (name, ".dynbss") != 0) + /* It's not one of our sections, so don't allocate space. */ + continue; + + if (s->size == 0) + { + /* If we don't need this section, strip it from the + output file. This is mostly to handle .rela.bss and + .rela.plt. We must create both sections in + create_dynamic_sections, because they must be created + before the linker maps input sections to output + sections. The linker does that before + adjust_dynamic_symbol is called, and it is that + function which decides whether anything needs to go + into these sections. */ + s->flags |= SEC_EXCLUDE; + continue; + } + + if ((s->flags & SEC_HAS_CONTENTS) == 0) + continue; + + /* Allocate memory for the section contents. We use bfd_zalloc + here in case unused entries are not reclaimed before the + section's contents are written out. This should not happen, + but this way if it does, we get a R_CR16_NONE reloc + instead of garbage. */ + s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size); + if (s->contents == NULL) + 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_cr16_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->executable) + { + if (!_bfd_elf_add_dynamic_entry (info, DT_DEBUG, 0)) + return FALSE; + } + + if (plt) + { + if (!_bfd_elf_add_dynamic_entry (info, DT_PLTGOT, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_PLTRELSZ, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_PLTREL, DT_RELA) + || !_bfd_elf_add_dynamic_entry (info, DT_JMPREL, 0)) + return FALSE; + } + + if (relocs) + { + if (!_bfd_elf_add_dynamic_entry (info, DT_RELA, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_RELASZ, 0) + || !_bfd_elf_add_dynamic_entry (info, DT_RELAENT, + sizeof (Elf32_External_Rela))) + return FALSE; + } + + if (reltext) + { + if (!_bfd_elf_add_dynamic_entry (info, DT_TEXTREL, 0)) + return FALSE; + } + } + + return TRUE; +} + +/* Finish up dynamic symbol handling. We set the contents of various + dynamic sections here. */ + +static bfd_boolean +_bfd_cr16_elf_finish_dynamic_symbol (bfd * output_bfd, + struct bfd_link_info * info, + struct elf_link_hash_entry * h, + Elf_Internal_Sym * sym) +{ + bfd * dynobj; + + dynobj = elf_hash_table (info)->dynobj; + + if (h->got.offset != (bfd_vma) -1) + { + asection * sgot; + asection * srel; + Elf_Internal_Rela rel; + + /* This symbol has an entry in the global offset table. Set it up. */ + + sgot = bfd_get_section_by_name (dynobj, ".got"); + srel = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (sgot != NULL && srel != NULL); + + rel.r_offset = (sgot->output_section->vma + + sgot->output_offset + + (h->got.offset & ~1)); + + /* If this is a -Bsymbolic link, and the symbol is defined + locally, we just want to emit a RELATIVE reloc. Likewise if + the symbol was forced to be local because of a version file. + The entry in the global offset table will already have been + initialized in the relocate_section function. */ + if (info->executable + && (info->symbolic || h->dynindx == -1) + && h->def_regular) + { + rel.r_info = ELF32_R_INFO (0, R_CR16_GOT_REGREL20); + rel.r_addend = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + } + else + { + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset); + rel.r_info = ELF32_R_INFO (h->dynindx, R_CR16_GOT_REGREL20); + rel.r_addend = 0; + } + + bfd_elf32_swap_reloca_out (output_bfd, &rel, + (bfd_byte *) ((Elf32_External_Rela *) srel->contents + + srel->reloc_count)); + ++ srel->reloc_count; + } + + if (h->needs_copy) + { + asection * s; + Elf_Internal_Rela rel; + + /* This symbol needs a copy reloc. Set it up. */ + BFD_ASSERT (h->dynindx != -1 + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak)); + + s = bfd_get_section_by_name (h->root.u.def.section->owner, + ".rela.bss"); + BFD_ASSERT (s != NULL); + + rel.r_offset = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + rel.r_info = ELF32_R_INFO (h->dynindx, R_CR16_GOT_REGREL20); + rel.r_addend = 0; + bfd_elf32_swap_reloca_out (output_bfd, &rel, + (bfd_byte *) ((Elf32_External_Rela *) s->contents + + s->reloc_count)); + ++ s->reloc_count; + } + + /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ + if (strcmp (h->root.root.string, "_DYNAMIC") == 0 + || h == elf_hash_table (info)->hgot) + sym->st_shndx = SHN_ABS; + + return TRUE; +} + +/* Finish up the dynamic sections. */ + +static bfd_boolean +_bfd_cr16_elf_finish_dynamic_sections (bfd * output_bfd, + struct bfd_link_info * info) +{ + bfd * dynobj; + asection * sgot; + asection * sdyn; + + dynobj = elf_hash_table (info)->dynobj; + + sgot = bfd_get_section_by_name (dynobj, ".got.plt"); + BFD_ASSERT (sgot != NULL); + sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); + + if (elf_hash_table (info)->dynamic_sections_created) + { + Elf32_External_Dyn * dyncon; + Elf32_External_Dyn * dynconend; + + BFD_ASSERT (sdyn != NULL); + + dyncon = (Elf32_External_Dyn *) sdyn->contents; + dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); + + for (; dyncon < dynconend; dyncon++) + { + Elf_Internal_Dyn dyn; + const char * name; + asection * s; + + bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn); + + switch (dyn.d_tag) + { + default: + break; + + case DT_PLTGOT: + name = ".got"; + goto get_vma; + + case DT_JMPREL: + name = ".rela.plt"; + get_vma: + s = bfd_get_section_by_name (output_bfd, name); + BFD_ASSERT (s != NULL); + dyn.d_un.d_ptr = s->vma; + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + break; + + case DT_PLTRELSZ: + s = bfd_get_section_by_name (output_bfd, ".rela.plt"); + BFD_ASSERT (s != NULL); + dyn.d_un.d_val = s->size; + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + break; + + case DT_RELASZ: + /* My reading of the SVR4 ABI indicates that the + procedure linkage table relocs (DT_JMPREL) should be + included in the overall relocs (DT_RELA). This is + what Solaris does. However, UnixWare can not handle + that case. Therefore, we override the DT_RELASZ entry + here to make it not include the JMPREL relocs. Since + the linker script arranges for .rela.plt to follow all + other relocation sections, we don't have to worry + about changing the DT_RELA entry. */ + s = bfd_get_section_by_name (output_bfd, ".rela.plt"); + if (s != NULL) + dyn.d_un.d_val -= s->size; + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + break; + } + } + + } + + /* Fill in the first three entries in the global offset table. */ + if (sgot->size > 0) + { + if (sdyn == NULL) + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents); + else + bfd_put_32 (output_bfd, + sdyn->output_section->vma + sdyn->output_offset, + sgot->contents); + } + + elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4; + + return TRUE; +} + +/* Given a .data.rel section and a .emreloc in-memory section, store + relocation information into the .emreloc section which can be + used at runtime to relocate the section. This is called by the + linker when the --embedded-relocs switch is used. This is called + after the add_symbols entry point has been called for all the + objects, and before the final_link entry point is called. */ + +bfd_boolean +bfd_cr16_elf32_create_embedded_relocs (bfd *abfd, + struct bfd_link_info *info, + asection *datasec, + asection *relsec, + char **errmsg) +{ + Elf_Internal_Shdr *symtab_hdr; + Elf_Internal_Sym *isymbuf = NULL; + Elf_Internal_Rela *internal_relocs = NULL; + Elf_Internal_Rela *irel, *irelend; + bfd_byte *p; + bfd_size_type amt; + + BFD_ASSERT (! info->relocatable); + + *errmsg = NULL; + + if (datasec->reloc_count == 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, datasec, NULL, NULL, info->keep_memory)); + if (internal_relocs == NULL) + goto error_return; + + amt = (bfd_size_type) datasec->reloc_count * 8; + relsec->contents = (bfd_byte *) bfd_alloc (abfd, amt); + if (relsec->contents == NULL) + goto error_return; + + p = relsec->contents; + + irelend = internal_relocs + datasec->reloc_count; + for (irel = internal_relocs; irel < irelend; irel++, p += 8) + { + asection *targetsec; + + /* We are going to write a four byte longword into the runtime + reloc section. The longword will be the address in the data + section which must be relocated. It is followed by the name + of the target section NUL-padded or truncated to 8 + characters. */ + + /* We can only relocate absolute longword relocs at run time. */ + if (!((ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32a) + || (ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32))) + { + *errmsg = _("unsupported reloc type"); + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + + /* Get the target section referred to by the reloc. */ + if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info) + { + /* A local symbol. */ + Elf_Internal_Sym *isym; + + /* Read this BFD's local symbols if we haven't done so already. */ + if (isymbuf == NULL) + { + 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; + } + + isym = isymbuf + ELF32_R_SYM (irel->r_info); + targetsec = bfd_section_from_elf_index (abfd, isym->st_shndx); + } + 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) + targetsec = h->root.u.def.section; + else + targetsec = NULL; + } + + bfd_put_32 (abfd, irel->r_offset + datasec->output_offset, p); + memset (p + 4, 0, 4); + if ((ELF32_R_TYPE (irel->r_info) == (int) R_CR16_NUM32a) + && (targetsec != NULL) ) + strncpy ((char *) p + 4, targetsec->output_section->name, 4); + } + + if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + free (isymbuf); + if (internal_relocs != NULL + && elf_section_data (datasec)->relocs != internal_relocs) + free (internal_relocs); + return TRUE; + +error_return: + if (isymbuf != NULL && symtab_hdr->contents != (unsigned char *) isymbuf) + free (isymbuf); + if (internal_relocs != NULL + && elf_section_data (datasec)->relocs != internal_relocs) + free (internal_relocs); + return FALSE; +} + + +/* Classify relocation types, such that combreloc can sort them + properly. */ + +static enum elf_reloc_type_class +_bfd_cr16_elf_reloc_type_class (const Elf_Internal_Rela *rela) +{ + switch ((int) ELF32_R_TYPE (rela->r_info)) + { + case R_CR16_GOT_REGREL20: + case R_CR16_GOTC_REGREL20: + return reloc_class_relative; + default: + return reloc_class_normal; + } +} + /* 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_MACHINE_ALT1 EM_CR16_OLD #define ELF_MAXPAGESIZE 0x1 #define elf_symbol_leading_char '_' @@ -1429,5 +3065,40 @@ elf32_cr16_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, #define elf_backend_gc_sweep_hook elf32_cr16_gc_sweep_hook #define elf_backend_can_gc_sections 1 #define elf_backend_rela_normal 1 +#define elf_backend_check_relocs cr16_elf_check_relocs +/* So we can set bits in e_flags. */ +#define elf_backend_final_write_processing \ + _bfd_cr16_elf_final_write_processing +#define elf_backend_object_p _bfd_cr16_elf_object_p + +#define bfd_elf32_bfd_merge_private_bfd_data \ + _bfd_cr16_elf_merge_private_bfd_data + + +#define bfd_elf32_bfd_link_hash_table_create \ + elf32_cr16_link_hash_table_create +#define bfd_elf32_bfd_link_hash_table_free \ + elf32_cr16_link_hash_table_free + +#define elf_backend_create_dynamic_sections \ + _bfd_cr16_elf_create_dynamic_sections +#define elf_backend_adjust_dynamic_symbol \ + _bfd_cr16_elf_adjust_dynamic_symbol +#define elf_backend_size_dynamic_sections \ + _bfd_cr16_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_cr16_elf_finish_dynamic_symbol +#define elf_backend_finish_dynamic_sections \ + _bfd_cr16_elf_finish_dynamic_sections + +#define elf_backend_reloc_type_class _bfd_cr16_elf_reloc_type_class + + +#define elf_backend_want_got_plt 1 +#define elf_backend_plt_readonly 1 +#define elf_backend_want_plt_sym 0 +#define elf_backend_got_header_size 12 #include "elf32-target.h" diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c index 08730e2..18d4ade 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, 2006, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -927,7 +927,7 @@ elf32_cr16c_add_symbol_hook (bfd *abfd, return TRUE; } -static bfd_boolean +static int elf32_cr16c_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, @@ -946,7 +946,7 @@ elf32_cr16c_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED sym->st_shndx = SHN_CR16C_NCOMMON; } - return TRUE; + return 1; } /* Definitions for setting CR16C target vector. */ diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index dcff1eb..2037b10 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, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Axis Communications AB. Written by Hans-Peter Nilsson, based on elf32-fr30.c @@ -27,6 +27,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/cris.h" +#include /* Forward declarations. */ static reloc_howto_type * cris_reloc_type_lookup @@ -409,7 +410,34 @@ static reloc_howto_type cris_elf_howto_table [] = FALSE, /* partial_inplace */ 0, /* src_mask */ 0xffffffff, /* dst_mask */ - TRUE) /* pcrel_offset */ + TRUE), /* pcrel_offset */ + + /* We don't handle these in any special manner and cross-format + linking is not supported; just recognize them enough to pass them + around. FIXME: do the same for most PIC relocs and add sanity + tests to actually refuse gracefully to handle these and PIC + relocs for cross-format linking. */ +#define TLSHOWTO32(name) \ + HOWTO (name, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, \ + bfd_elf_generic_reloc, #name, FALSE, 0, 0xffffffff, FALSE) +#define TLSHOWTO16X(name, X) \ + HOWTO (name, 0, 1, 16, FALSE, 0, complain_overflow_ ## X, \ + bfd_elf_generic_reloc, #name, FALSE, 0, 0xffff, FALSE) +#define TLSHOWTO16(name) TLSHOWTO16X(name, unsigned) +#define TLSHOWTO16S(name) TLSHOWTO16X(name, signed) + + TLSHOWTO32 (R_CRIS_32_GOT_GD), + TLSHOWTO16 (R_CRIS_16_GOT_GD), + TLSHOWTO32 (R_CRIS_32_GD), + TLSHOWTO32 (R_CRIS_DTP), + TLSHOWTO32 (R_CRIS_32_DTPREL), + TLSHOWTO16S (R_CRIS_16_DTPREL), + TLSHOWTO32 (R_CRIS_32_GOT_TPREL), + TLSHOWTO16S (R_CRIS_16_GOT_TPREL), + TLSHOWTO32 (R_CRIS_32_TPREL), + TLSHOWTO16S (R_CRIS_16_TPREL), + TLSHOWTO32 (R_CRIS_DTPMOD), + TLSHOWTO32 (R_CRIS_32_IE) }; /* Map BFD reloc types to CRIS ELF reloc types. */ @@ -441,7 +469,19 @@ static const struct cris_reloc_map cris_reloc_map [] = { BFD_RELOC_CRIS_32_GOTPLT, R_CRIS_32_GOTPLT }, { BFD_RELOC_CRIS_32_GOTREL, R_CRIS_32_GOTREL }, { BFD_RELOC_CRIS_32_PLT_GOTREL, R_CRIS_32_PLT_GOTREL }, - { BFD_RELOC_CRIS_32_PLT_PCREL, R_CRIS_32_PLT_PCREL } + { BFD_RELOC_CRIS_32_PLT_PCREL, R_CRIS_32_PLT_PCREL }, + { BFD_RELOC_CRIS_32_GOT_GD, R_CRIS_32_GOT_GD }, + { BFD_RELOC_CRIS_16_GOT_GD, R_CRIS_16_GOT_GD }, + { BFD_RELOC_CRIS_32_GD, R_CRIS_32_GD }, + { BFD_RELOC_CRIS_DTP, R_CRIS_DTP }, + { BFD_RELOC_CRIS_32_DTPREL, R_CRIS_32_DTPREL }, + { BFD_RELOC_CRIS_16_DTPREL, R_CRIS_16_DTPREL }, + { BFD_RELOC_CRIS_32_GOT_TPREL, R_CRIS_32_GOT_TPREL }, + { BFD_RELOC_CRIS_16_GOT_TPREL, R_CRIS_16_GOT_TPREL }, + { BFD_RELOC_CRIS_32_TPREL, R_CRIS_32_TPREL }, + { BFD_RELOC_CRIS_16_TPREL, R_CRIS_16_TPREL }, + { BFD_RELOC_CRIS_DTPMOD, R_CRIS_DTPMOD }, + { BFD_RELOC_CRIS_32_IE, R_CRIS_32_IE } }; static reloc_howto_type * @@ -481,7 +521,7 @@ cris_info_to_howto_rela (abfd, cache_ptr, dst) arelent * cache_ptr; Elf_Internal_Rela * dst; { - unsigned int r_type; + enum elf_cris_reloc_type r_type; r_type = ELF32_R_TYPE (dst->r_info); BFD_ASSERT (r_type < (unsigned int) R_CRIS_max); @@ -756,10 +796,15 @@ struct elf_cris_pcrel_relocs_copied { /* Next section. */ struct elf_cris_pcrel_relocs_copied *next; + /* A section in dynobj. */ asection *section; + /* Number of relocs copied in this section. */ bfd_size_type count; + + /* Example of reloc being copied, for message. */ + enum elf_cris_reloc_type r_type; }; /* CRIS ELF linker hash entry. */ @@ -783,8 +828,39 @@ struct elf_cris_link_hash_entry this with gotplt_refcount in a union, like the got and plt unions in elf_link_hash_entry. */ bfd_size_type gotplt_offset; + + /* The root.got.refcount is the sum of the regular reference counts + (this) and those members below. We have to keep a separate count + to track when we've found the first (or last) reference to a + regular got entry. The offset is in root.got.offset. */ + bfd_signed_vma reg_got_refcount; + + /* Similar to the above, the number of reloc references to this + symbols that need a R_CRIS_32_TPREL slot. The offset is in + root.got.offset, because this and .dtp_refcount can't validly + happen when there's also a regular GOT entry; that's invalid + input for which an error is emitted. */ + bfd_signed_vma tprel_refcount; + + /* Similar to the above, the number of reloc references to this + symbols that need a R_CRIS_DTP slot. The offset is in + root.got.offset; plus 4 if .tprel_refcount > 0. */ + bfd_signed_vma dtp_refcount; }; +/* The local_got_refcounts and local_got_offsets are a multiple of + LSNUM in size, namely LGOT_ALLOC_NELTS_FOR(LSNUM) (plus one for the + refcount for GOT itself, see code), with the summary / group offset + for local symbols located at offset N, reference counts for + ordinary (address) relocs at offset N + LSNUM, for R_CRIS_DTP + relocs at offset N + 2*LSNUM, and for R_CRIS_32_TPREL relocs at N + + 3*LSNUM. */ + +#define LGOT_REG_NDX(x) ((x) + symtab_hdr->sh_info) +#define LGOT_DTP_NDX(x) ((x) + 2 * symtab_hdr->sh_info) +#define LGOT_TPREL_NDX(x) ((x) + 3 * symtab_hdr->sh_info) +#define LGOT_ALLOC_NELTS_FOR(x) ((x) * 4) + /* CRIS ELF linker hash table. */ struct elf_cris_link_hash_table @@ -795,6 +871,13 @@ struct elf_cris_link_hash_table since we try and avoid creating GOTPLT:s when there's already a GOT. Instead, we keep and update the next available index here. */ bfd_size_type next_gotplt_entry; + + /* The number of R_CRIS_32_DTPREL and R_CRIS_16_DTPREL that have + been seen for any input; if != 0, then the constant-offset + R_CRIS_DTPMOD is needed for this DSO/executable. This turns + negative at relocation, so that we don't need an extra flag for + when the reloc is output. */ + bfd_signed_vma dtpmod_refcount; }; /* Traverse a CRIS ELF linker hash table. */ @@ -810,6 +893,13 @@ struct elf_cris_link_hash_table #define elf_cris_hash_table(p) \ ((struct elf_cris_link_hash_table *) (p)->hash) +/* Get the CRIS ELF linker hash entry from a regular hash entry (the + "parent class"). The .root reference is just a simple type + check on the argument. */ + +#define elf_cris_hash_entry(p) \ + ((struct elf_cris_link_hash_entry *) (&(p)->root)) + /* Create an entry in a CRIS ELF linker hash table. */ static struct bfd_hash_entry * @@ -839,6 +929,9 @@ elf_cris_link_hash_newfunc (entry, table, string) ret->pcrel_relocs_copied = NULL; ret->gotplt_refcount = 0; ret->gotplt_offset = 0; + ret->dtp_refcount = 0; + ret->tprel_refcount = 0; + ret->reg_got_refcount = 0; } return (struct bfd_hash_entry *) ret; @@ -869,6 +962,9 @@ elf_cris_link_hash_table_create (abfd) are used for run-time symbol evaluation. */ ret->next_gotplt_entry = 12; + /* We haven't seen any R_CRIS_nn_GOT_TPREL initially. */ + ret->dtpmod_refcount = 0; + return &ret->root.root; } @@ -886,11 +982,12 @@ cris_final_link_relocate (howto, input_bfd, input_section, contents, rel, bfd_vma relocation; { bfd_reloc_status_type r; + enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rel->r_info); /* PC-relative relocations are relative to the position *after* the reloc. Note that for R_CRIS_8_PCREL the adjustment is not a single byte, since PC must be 16-bit-aligned. */ - switch (ELF32_R_TYPE (rel->r_info)) + switch (r_type) { /* Check that the 16-bit GOT relocs are positive. */ case R_CRIS_16_GOTPLT: @@ -918,6 +1015,14 @@ cris_final_link_relocate (howto, input_bfd, input_section, contents, rel, return r; } + +/* The number of errors left before we stop outputting reloc-specific + explanatory messages. By coincidence, this works nicely together + with the default number of messages you'll get from LD about + "relocation truncated to fit" messages before you get an + "additional relocation overflows omitted from the output". */ +static int additional_relocation_error_msg_count = 10; + /* Relocate an CRIS ELF section. See elf32-fr30.c, from where this was copied, for further comments. */ @@ -942,6 +1047,7 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, asection *sreloc; Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; + asection *srelgot; dynobj = elf_hash_table (info)->dynobj; local_got_offsets = elf_local_got_offsets (input_bfd); @@ -952,6 +1058,7 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, sgot = NULL; splt = NULL; sreloc = NULL; + srelgot = NULL; if (dynobj != NULL) { @@ -969,7 +1076,7 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, bfd_vma relocation; bfd_reloc_status_type r; const char *symname = NULL; - int r_type; + enum elf_cris_reloc_type r_type; r_type = ELF32_R_TYPE (rel->r_info); @@ -1004,6 +1111,8 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, h, sec, relocation, unresolved_reloc, warned); + symname = h->root.root.string; + if (unresolved_reloc /* Perhaps we should detect the cases that sec->output_section is expected to be NULL like i386 and @@ -1222,20 +1331,21 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, if (info->shared) { - asection *s; Elf_Internal_Rela outrel; bfd_byte *loc; - s = bfd_get_section_by_name (dynobj, ".rela.got"); - BFD_ASSERT (s != NULL); + if (srelgot == NULL) + srelgot + = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (srelgot != NULL); outrel.r_offset = (sgot->output_section->vma + sgot->output_offset + off); outrel.r_info = ELF32_R_INFO (0, R_CRIS_RELATIVE); outrel.r_addend = relocation; - loc = s->contents; - loc += s->reloc_count++ * sizeof (Elf32_External_Rela); + loc = srelgot->contents; + loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela); bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); } @@ -1371,7 +1481,8 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, case R_CRIS_16_PCREL: case R_CRIS_32_PCREL: /* If the symbol was local, we need no shlib-specific handling. */ - if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || h->dynindx == -1) break; /* Fall through. */ @@ -1385,7 +1496,7 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, && r_type != R_CRIS_16_PCREL && r_type != R_CRIS_32_PCREL) || (!info->symbolic - || !h->def_regular))) + || (h != NULL && !h->def_regular)))) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -1397,33 +1508,13 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - - /* That section should have been created in - cris_elf_check_relocs, but that function will not be - called for objects which fail in + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + /* The section should have been created in cris_elf_check_relocs, + but that function will not be called for objects which fail in cris_elf_merge_private_bfd_data. */ if (sreloc == NULL) { - (*_bfd_error_handler) - (_("%B: Internal inconsistency; no relocation section %s"), - input_bfd, - name); - bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -1437,7 +1528,16 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, rel->r_offset); if (outrel.r_offset == (bfd_vma) -1) skip = TRUE; - else if (outrel.r_offset == (bfd_vma) -2) + else if (outrel.r_offset == (bfd_vma) -2 + /* For now, undefined weak symbols with non-default + visibility (yielding 0), like exception info for + discarded sections, will get a R_CRIS_NONE + relocation rather than no relocation, because we + notice too late that the symbol doesn't need a + relocation. */ + || (h != NULL + && h->root.type == bfd_link_hash_undefweak + && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)) skip = TRUE, relocate = TRUE; outrel.r_offset += (input_section->output_section->vma + input_section->output_offset); @@ -1511,6 +1611,426 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, } break; + + case R_CRIS_16_DTPREL: + case R_CRIS_32_DTPREL: + /* This relocation must only be performed against local + symbols, or to sections that are not loadable. It's also + ok when we link a program and the symbol is defined in an + ordinary (non-DSO) object (if it's undefined there, we've + already seen an error). */ + if (h != NULL + && (input_section->flags & SEC_ALLOC) != 0 + && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && (info->shared + || (!h->def_regular + && h->root.type != bfd_link_hash_undefined))) + { + (*_bfd_error_handler) + ((h->root.type == bfd_link_hash_undefined) + /* We shouldn't get here for GCC-emitted code. */ + ? _("%B, section %A: relocation %s has an undefined" + " reference to `%s', perhaps a declaration mixup?") + : ("%B, section %A: relocation %s is" + " not allowed for `%s', a global symbol with default" + " visibility, perhaps a declaration mixup?"), + input_bfd, + input_section, + cris_elf_howto_table[r_type].name, + symname != NULL && symname[0] != '\0' + ? symname : _("[whose name is lost]")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + BFD_ASSERT ((input_section->flags & SEC_ALLOC) == 0 + || elf_cris_hash_table (info)->dtpmod_refcount != 0); + + /* Fill in a R_CRIS_DTPMOD reloc at offset 3 if we haven't + already done so. Note that we do this in .got.plt, not + in .got, as .got.plt contains the first part, still the + reloc is against .got, because the linker script directs + (is required to direct) them both into .got. */ + if (elf_cris_hash_table (info)->dtpmod_refcount > 0 + && (input_section->flags & SEC_ALLOC) != 0) + { + asection *sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); + BFD_ASSERT (sgotplt != NULL); + + if (info->shared) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + + if (srelgot == NULL) + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (srelgot != NULL); + loc = srelgot->contents; + loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela); + + bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 12); + bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 16); + outrel.r_offset = (sgotplt->output_section->vma + + sgotplt->output_offset + + 12); + outrel.r_info = ELF32_R_INFO (0, R_CRIS_DTPMOD); + outrel.r_addend = 0; + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + } + else + { + /* For an executable, the GOT entry contents is known. */ + bfd_put_32 (output_bfd, (bfd_vma) 1, sgotplt->contents + 12); + bfd_put_32 (output_bfd, (bfd_vma) 0, sgotplt->contents + 16); + } + + /* Reverse the sign to mark that we've emitted the + required GOT entry. */ + elf_cris_hash_table (info)->dtpmod_refcount + = -elf_cris_hash_table (info)->dtpmod_refcount; + } + + /* The thread-based offset to the local symbol is the + relocation. + For the executable, TLS data begins at the thread pointer plus + the negative size of the TLS data. For a DSO, that's part of + the module TLS offset. */ + relocation -= elf_hash_table (info)->tls_sec == NULL + ? 0 : (elf_hash_table (info)->tls_sec->vma + + (info->shared + ? 0 : elf_hash_table (info)->tls_size)); + break; + + case R_CRIS_32_GD: + if (info->shared) + { + bfd_set_error (bfd_error_invalid_operation); + + /* We've already informed in cris_elf_check_relocs that + this is an error. */ + return FALSE; + } + /* Fall through. */ + + case R_CRIS_16_GOT_GD: + case R_CRIS_32_GOT_GD: + if (rel->r_addend != 0) + { + /* We can't do anything for a relocation which is against a + symbol *plus offset*. The GOT holds relocations for + symbols. Make this an error; the compiler isn't allowed + to pass us these kinds of things. */ + (*_bfd_error_handler) + (_("%B, section %A: relocation %s with non-zero addend %d" + " against symbol `%s'"), + input_bfd, + input_section, + cris_elf_howto_table[r_type].name, + rel->r_addend, + symname[0] != '\0' ? symname : _("[whose name is lost]")); + + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + if (!info->shared + && (h == NULL || h->def_regular || ELF_COMMON_DEF_P (h))) + { + /* Known contents of the GOT. */ + bfd_vma off; + + /* The symbol is defined in the program, so just write + (1, known_tpoffset) into the GOT. */ + relocation -= elf_hash_table (info)->tls_sec->vma; + + if (h != NULL) + { + off = elf_cris_hash_entry (h)->tprel_refcount > 0 + ? h->got.offset + 4 : h->got.offset; + } + else + { + off = local_got_offsets[r_symndx]; + if (local_got_offsets[LGOT_TPREL_NDX (r_symndx)]) + off += 4; + } + + /* We use bit 1 of the offset as a flag for GOT entry with + the R_CRIS_DTP reloc, setting it when we've emitted the + GOT entry and reloc. Bit 0 is used for R_CRIS_32_TPREL + relocs. */ + if ((off & 2) == 0) + { + off &= ~3; + + if (h != NULL) + h->got.offset |= 2; + else + local_got_offsets[r_symndx] |= 2; + + bfd_put_32 (output_bfd, 1, sgot->contents + off); + bfd_put_32 (output_bfd, relocation, sgot->contents + off + 4); + } + else + off &= ~3; + + relocation = sgot->output_offset + off + + (r_type == R_CRIS_32_GD ? sgot->output_section->vma : 0); + } + else + { + /* Not all parts of the GOT entry are known; emit a real + relocation. */ + bfd_vma off; + + if (h != NULL) + off = elf_cris_hash_entry (h)->tprel_refcount > 0 + ? h->got.offset + 4 : h->got.offset; + else + { + off = local_got_offsets[r_symndx]; + if (local_got_offsets[LGOT_TPREL_NDX (r_symndx)]) + off += 4; + } + + /* See above re bit 1 and bit 0 usage. */ + if ((off & 2) == 0) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + + off &= ~3; + + if (h != NULL) + h->got.offset |= 2; + else + local_got_offsets[r_symndx] |= 2; + + /* Clear the target contents of the GOT (just as a + gesture; it's already cleared on allocation): this + relocation is not like the other dynrelocs. */ + bfd_put_32 (output_bfd, 0, sgot->contents + off); + bfd_put_32 (output_bfd, 0, sgot->contents + off + 4); + + if (srelgot == NULL) + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (srelgot != NULL); + + if (h != NULL && h->dynindx != -1) + { + outrel.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_DTP); + relocation = 0; + } + else + { + outrel.r_info = ELF32_R_INFO (0, R_CRIS_DTP); + + /* NULL if we had an error. */ + relocation -= elf_hash_table (info)->tls_sec == NULL + ? 0 : elf_hash_table (info)->tls_sec->vma; + } + + outrel.r_offset = (sgot->output_section->vma + + sgot->output_offset + + off); + outrel.r_addend = relocation; + loc = srelgot->contents; + loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela); + + /* NULL if we had an error. */ + if (srelgot->contents != NULL) + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + } + else + off &= ~3; + + relocation = sgot->output_offset + off + + (r_type == R_CRIS_32_GD ? sgot->output_section->vma : 0); + } + + /* The GOT-relative offset to the GOT entry is the + relocation, or for R_CRIS_32_GD, the actual address of + the GOT entry. */ + break; + + case R_CRIS_32_IE: + if (info->shared) + { + bfd_set_error (bfd_error_invalid_operation); + + /* We've already informed in cris_elf_check_relocs that + this is an error. */ + return FALSE; + } + /* Fall through. */ + + case R_CRIS_32_GOT_TPREL: + case R_CRIS_16_GOT_TPREL: + if (rel->r_addend != 0) + { + /* We can't do anything for a relocation which is + against a symbol *plus offset*. GOT holds + relocations for symbols. Make this an error; the + compiler isn't allowed to pass us these kinds of + things. */ + (*_bfd_error_handler) + (_("%B, section %A: relocation %s with non-zero addend %d" + " against symbol `%s'"), + input_bfd, + input_section, + cris_elf_howto_table[r_type].name, + rel->r_addend, + symname[0] != '\0' ? symname : _("[whose name is lost]")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + if (!info->shared && (h == NULL || h->def_regular)) + { + /* Known contents of the GOT. */ + bfd_vma off; + + /* The symbol is defined in the program, so just write + the -prog_tls_size+known_tpoffset into the GOT. */ + relocation -= elf_hash_table (info)->tls_sec->vma; + relocation -= elf_hash_table (info)->tls_size; + + if (h != NULL) + off = h->got.offset; + else + off = local_got_offsets[r_symndx]; + + /* Bit 0 is used to mark whether we've emitted the required + entry (and if needed R_CRIS_32_TPREL reloc). Bit 1 + is used similarly for R_CRIS_DTP, see above. */ + if ((off & 1) == 0) + { + off &= ~3; + + if (h != NULL) + h->got.offset |= 1; + else + local_got_offsets[r_symndx] |= 1; + + bfd_put_32 (output_bfd, relocation, sgot->contents + off); + } + else + off &= ~3; + + relocation = sgot->output_offset + off + + (r_type == R_CRIS_32_IE ? sgot->output_section->vma : 0); + } + else + { + /* Emit a real relocation. */ + bfd_vma off; + + if (h != NULL) + off = h->got.offset; + else + off = local_got_offsets[r_symndx]; + + /* See above re usage of bit 0 and 1. */ + if ((off & 1) == 0) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + + off &= ~3; + + if (h != NULL) + h->got.offset |= 1; + else + local_got_offsets[r_symndx] |= 1; + + if (srelgot == NULL) + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (srelgot != NULL); + + if (h != NULL && h->dynindx != -1) + { + outrel.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_32_TPREL); + relocation = 0; + } + else + { + outrel.r_info = ELF32_R_INFO (0, R_CRIS_32_TPREL); + + /* NULL if we had an error. */ + relocation -= elf_hash_table (info)->tls_sec == NULL + ? 0 : elf_hash_table (info)->tls_sec->vma; + } + + /* Just "define" the initial contents in some + semi-logical way. */ + bfd_put_32 (output_bfd, relocation, sgot->contents + off); + + outrel.r_offset = (sgot->output_section->vma + + sgot->output_offset + + off); + outrel.r_addend = relocation; + loc = srelgot->contents; + loc += srelgot->reloc_count++ * sizeof (Elf32_External_Rela); + /* NULL if we had an error. */ + if (srelgot->contents != NULL) + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + } + else + off &= ~3; + + relocation = sgot->output_offset + off + + (r_type == R_CRIS_32_IE ? sgot->output_section->vma : 0); + } + + /* The GOT-relative offset to the GOT entry is the relocation, + or for R_CRIS_32_GD, the actual address of the GOT entry. */ + break; + + case R_CRIS_16_TPREL: + case R_CRIS_32_TPREL: + /* This relocation must only be performed against symbols + defined in an ordinary (non-DSO) object. */ + if (info->shared) + { + bfd_set_error (bfd_error_invalid_operation); + + /* We've already informed in cris_elf_check_relocs that + this is an error. */ + return FALSE; + } + + if (h != NULL + && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && !(h->def_regular || ELF_COMMON_DEF_P (h)) + /* If it's undefined, then an error message has already + been emitted. */ + && h->root.type != bfd_link_hash_undefined) + { + (*_bfd_error_handler) + (_("%B, section %A: relocation %s is" + " not allowed for symbol: `%s'" + " which is defined outside the program," + " perhaps a declaration mixup?"), + input_bfd, + input_section, + cris_elf_howto_table[r_type].name, + symname); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + /* NULL if we had an error. */ + relocation -= elf_hash_table (info)->tls_sec == NULL + ? 0 + : (elf_hash_table (info)->tls_sec->vma + + elf_hash_table (info)->tls_size); + + /* The TLS-relative offset is the relocation. */ + break; + + default: + BFD_FAIL (); + return FALSE; } r = cris_final_link_relocate (howto, input_bfd, input_section, @@ -1526,6 +2046,37 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, r = info->callbacks->reloc_overflow (info, (h ? &h->root : NULL), symname, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_offset); + if (additional_relocation_error_msg_count > 0) + { + additional_relocation_error_msg_count--; + switch (r_type) + { + case R_CRIS_16_GOTPLT: + case R_CRIS_16_GOT: + + /* Not just TLS is involved here, so we make + generation and message depend on -fPIC/-fpic + only. */ + case R_CRIS_16_GOT_TPREL: + case R_CRIS_16_GOT_GD: + (*_bfd_error_handler) + (_("(too many global variables for -fpic:" + " recompile with -fPIC)")); + break; + + case R_CRIS_16_TPREL: + case R_CRIS_16_DTPREL: + (*_bfd_error_handler) + (_("(thread-local data too big for -fpic or" + " -msmall-tls: recompile with -fPIC or" + " -mno-small-tls)")); + break; + + /* No known cause for overflow for other relocs. */ + default: + break; + } + } break; case bfd_reloc_undefined: @@ -1612,18 +2163,24 @@ elf_cris_finish_dynamic_symbol (output_bfd, info, h, sym) bfd_vma got_base; bfd_vma gotplt_offset - = ((struct elf_cris_link_hash_entry *) h)->gotplt_offset; + = elf_cris_hash_entry (h)->gotplt_offset; Elf_Internal_Rela rela; bfd_byte *loc; bfd_boolean has_gotplt = gotplt_offset != 0; - /* Get the index in the procedure linkage table which - 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. */ - /* We have to count backwards here, and the result is only valid as - an index into .got.plt and its relocations. FIXME: Constants... */ - bfd_vma gotplt_index = gotplt_offset/4 - 3; + /* Get the index in the .rela.plt relocations for the .got.plt + entry that corresponds to this symbol. + We have to count backwards here, and the result is only valid + as an index into .rela.plt. We also have to undo the effect + of the R_CRIS_DTPMOD entry at .got index 3 (offset 12 into + .got.plt) for which gotplt_offset is adjusted, because while + that entry goes into .got.plt, its relocation goes into + .rela.got, not .rela.plt. (It's not PLT-specific; not to be + processed as part of the runtime lazy .rela.plt relocation). + FIXME: There be literal constants here... */ + bfd_vma rela_plt_index + = (elf_cris_hash_table (info)->dtpmod_refcount != 0 + ? gotplt_offset/4 - 2 - 3 : gotplt_offset/4 - 3); /* Get the offset into the .got table of the entry that corresponds to this function. Note that we embed knowledge that "incoming" @@ -1673,7 +2230,7 @@ elf_cris_finish_dynamic_symbol (output_bfd, info, h, sym) { /* Fill in the offset to the reloc table. */ bfd_put_32 (output_bfd, - gotplt_index * sizeof (Elf32_External_Rela), + rela_plt_index * sizeof (Elf32_External_Rela), splt->contents + h->plt.offset + plt_off2); /* Fill in the offset to the first PLT entry, where to "jump". */ @@ -1696,7 +2253,7 @@ elf_cris_finish_dynamic_symbol (output_bfd, info, h, sym) + got_offset); rela.r_info = ELF32_R_INFO (h->dynindx, R_CRIS_JUMP_SLOT); rela.r_addend = 0; - loc = srela->contents + gotplt_index * sizeof (Elf32_External_Rela); + loc = srela->contents + rela_plt_index * sizeof (Elf32_External_Rela); bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); } @@ -1725,6 +2282,7 @@ elf_cris_finish_dynamic_symbol (output_bfd, info, h, sym) where we do not output a PLT: the PLT reloc was output above and all references to the function symbol are redirected to the PLT. */ if (h->got.offset != (bfd_vma) -1 + && (elf_cris_hash_entry (h)->reg_got_refcount > 0) && (info->shared || (h->dynindx != -1 && h->plt.offset == (bfd_vma) -1 @@ -1806,7 +2364,9 @@ elf_cris_finish_dynamic_symbol (output_bfd, info, h, sym) return TRUE; } -/* Finish up the dynamic sections. */ +/* Finish up the dynamic sections. Do *not* emit relocs here, as their + offsets were changed, as part of -z combreloc handling, from those we + computed. */ static bfd_boolean elf_cris_finish_dynamic_sections (output_bfd, info) @@ -1959,12 +2519,16 @@ cris_elf_gc_mark_hook (asection *sec, struct elf_link_hash_entry *h, Elf_Internal_Sym *sym) { + enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rel->r_info); if (h != NULL) - switch (ELF32_R_TYPE (rel->r_info)) + switch (r_type) { case R_CRIS_GNU_VTINHERIT: case R_CRIS_GNU_VTENTRY: return NULL; + + default: + break; } return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); @@ -1986,6 +2550,9 @@ cris_elf_gc_sweep_hook (bfd *abfd, asection *sgot; asection *srelgot; + if (info->relocatable) + return TRUE; + dynobj = elf_hash_table (info)->dynobj; if (dynobj == NULL) return TRUE; @@ -2002,6 +2569,9 @@ cris_elf_gc_sweep_hook (bfd *abfd, { unsigned long r_symndx; struct elf_link_hash_entry *h = NULL; + bfd_signed_vma got_element_size = 4; + bfd_signed_vma *specific_refcount = NULL; + enum elf_cris_reloc_type r_type; r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx >= symtab_hdr->sh_info) @@ -2012,21 +2582,63 @@ cris_elf_gc_sweep_hook (bfd *abfd, h = (struct elf_link_hash_entry *) h->root.u.i.link; } - switch (ELF32_R_TYPE (rel->r_info)) + r_type = ELF32_R_TYPE (rel->r_info); + switch (r_type) { + case R_CRIS_32_GOT: + case R_CRIS_16_GOT: + case R_CRIS_16_GOTPLT: + case R_CRIS_32_GOTPLT: + specific_refcount = h != NULL + ? &((struct elf_cris_link_hash_entry *) h)->reg_got_refcount + : &local_got_refcounts[LGOT_REG_NDX (r_symndx)]; + break; + + case R_CRIS_32_GD: + case R_CRIS_32_GOT_GD: + case R_CRIS_16_GOT_GD: + got_element_size = 8; + specific_refcount = h != NULL + ? &((struct elf_cris_link_hash_entry *) h)->dtp_refcount + : &local_got_refcounts[LGOT_DTP_NDX (r_symndx)]; + break; + + case R_CRIS_32_IE: + case R_CRIS_16_GOT_TPREL: + case R_CRIS_32_GOT_TPREL: + specific_refcount = h != NULL + ? &((struct elf_cris_link_hash_entry *) h)->tprel_refcount + : &local_got_refcounts[LGOT_TPREL_NDX (r_symndx)]; + break; + + default: + break; + } + + switch (r_type) + { + case R_CRIS_32_IE: + case R_CRIS_32_GD: + case R_CRIS_16_GOT_TPREL: + case R_CRIS_32_GOT_TPREL: + case R_CRIS_32_GOT_GD: + case R_CRIS_16_GOT_GD: case R_CRIS_16_GOT: case R_CRIS_32_GOT: if (h != NULL) { - if (h->got.refcount > 0) + /* If the counters are 0 when we got here, we've + miscounted somehow somewhere, an internal error. */ + BFD_ASSERT (h->got.refcount > 0); + --h->got.refcount; + + BFD_ASSERT (*specific_refcount > 0); + --*specific_refcount; + if (*specific_refcount == 0) { - --h->got.refcount; - if (h->got.refcount == 0) - { - /* We don't need the .got entry any more. */ - sgot->size -= 4; - srelgot->size -= sizeof (Elf32_External_Rela); - } + /* We don't need the .got entry any more. */ + sgot->size -= got_element_size; + srelgot->size -= sizeof (Elf32_External_Rela); } break; } @@ -2034,16 +2646,19 @@ cris_elf_gc_sweep_hook (bfd *abfd, local_got_reloc: if (local_got_refcounts != NULL) { - if (local_got_refcounts[r_symndx] > 0) + /* If the counters are 0 when we got here, we've + miscounted somehow somewhere, an internal error. */ + BFD_ASSERT (local_got_refcounts[r_symndx] > 0); + --local_got_refcounts[r_symndx]; + + BFD_ASSERT (*specific_refcount > 0); + --*specific_refcount; + if (*specific_refcount == 0) { - --local_got_refcounts[r_symndx]; - if (local_got_refcounts[r_symndx] == 0) - { - /* We don't need the .got entry any more. */ - sgot->size -= 4; - if (info->shared) - srelgot->size -= sizeof (Elf32_External_Rela); - } + /* We don't need the .got entry any more. */ + sgot->size -= got_element_size; + if (info->shared) + srelgot->size -= sizeof (Elf32_External_Rela); } } break; @@ -2073,6 +2688,19 @@ cris_elf_gc_sweep_hook (bfd *abfd, } break; + case R_CRIS_32_DTPREL: + /* This'd be a .dtpreld entry in e.g. debug info. */ + if ((sec->flags & SEC_ALLOC) == 0) + break; + /* Fall through. */ + case R_CRIS_16_DTPREL: + elf_cris_hash_table (info)->dtpmod_refcount--; + if (elf_cris_hash_table (info)->dtpmod_refcount == 0) + elf_cris_hash_table (info)->next_gotplt_entry -= 8; + BFD_ASSERT (local_got_refcounts != NULL); + local_got_refcounts[-1]--; + break; + default: break; } @@ -2102,12 +2730,13 @@ elf_cris_adjust_gotplt_to_got (h, p) if (h->gotplt_refcount <= 0) return TRUE; - if (h->root.got.refcount > 0) + if (h->reg_got_refcount > 0) { - /* There's a GOT entry for this symbol. Just adjust the refcount. - Probably not necessary at this stage, but keeping it accurate + /* There's a GOT entry for this symbol. Just adjust the refcounts. + Probably not necessary at this stage, but keeping them accurate helps avoiding surprises later. */ h->root.got.refcount += h->gotplt_refcount; + h->reg_got_refcount += h->gotplt_refcount; h->gotplt_refcount = 0; } else @@ -2121,8 +2750,9 @@ elf_cris_adjust_gotplt_to_got (h, p) sgot = bfd_get_section_by_name (dynobj, ".got"); srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); - /* Put an accurate refcount there. */ - h->root.got.refcount = h->gotplt_refcount; + /* Put accurate refcounts there. */ + h->root.got.refcount += h->gotplt_refcount; + h->reg_got_refcount = h->gotplt_refcount; h->gotplt_refcount = 0; @@ -2432,6 +3062,44 @@ elf_cris_adjust_dynamic_symbol (info, h) return _bfd_elf_adjust_dynamic_copy (h, s); } +/* Adjust our "subclass" elements for an indirect symbol. */ + +static void +elf_cris_copy_indirect_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *dir, + struct elf_link_hash_entry *ind) +{ + struct elf_cris_link_hash_entry *edir, *eind; + + edir = (struct elf_cris_link_hash_entry *) dir; + eind = (struct elf_cris_link_hash_entry *) ind; + + /* Only indirect symbols are replaced; we're not interested in + updating any of EIND's fields for other symbols. */ + if (eind->root.root.type != bfd_link_hash_indirect) + { + /* Still, we need to copy flags for e.g. weak definitions. */ + _bfd_elf_link_hash_copy_indirect (info, dir, ind); + return; + } + + BFD_ASSERT (edir->pcrel_relocs_copied == NULL); + BFD_ASSERT (edir->gotplt_offset == 0 || eind->gotplt_offset == 0); + +#define XMOVOPZ(F, OP, Z) edir->F OP eind->F; eind->F = Z +#define XMOVE(F) XMOVOPZ (F, +=, 0) + XMOVOPZ (pcrel_relocs_copied, =, NULL); + XMOVE (gotplt_refcount); + XMOVE (gotplt_offset); + XMOVE (reg_got_refcount); + XMOVE (tprel_refcount); + XMOVE (dtp_refcount); +#undef XMOVE +#undef XMOVOPZ + + _bfd_elf_link_hash_copy_indirect (info, dir, ind); +} + /* Look through the relocs for a section during the first phase. */ static bfd_boolean @@ -2443,7 +3111,7 @@ cris_elf_check_relocs (abfd, info, sec, relocs) { bfd *dynobj; Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -2457,26 +3125,27 @@ cris_elf_check_relocs (abfd, info, sec, relocs) dynobj = elf_hash_table (info)->dynobj; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof (Elf32_External_Sym); local_got_refcounts = elf_local_got_refcounts (abfd); sgot = NULL; srelgot = NULL; sreloc = NULL; - 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; enum elf_cris_reloc_type r_type; + bfd_signed_vma got_element_size = 4; + unsigned long r_symndx_lgot = INT_MAX; r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) - h = NULL; + { + h = NULL; + r_symndx_lgot = LGOT_REG_NDX (r_symndx); + } else { h = sym_hashes[r_symndx - symtab_hdr->sh_info]; @@ -2491,6 +3160,30 @@ cris_elf_check_relocs (abfd, info, sec, relocs) on the first input bfd we found that contained dynamic relocs. */ switch (r_type) { + case R_CRIS_32_DTPREL: + if ((sec->flags & SEC_ALLOC) == 0) + /* This'd be a .dtpreld entry in e.g. debug info. We have + several different switch statements below, but none of + that is needed; we need no preparations for resolving + R_CRIS_32_DTPREL into a non-allocated section (debug + info), so let's just move on to the next + relocation. */ + continue; + /* Fall through. */ + case R_CRIS_16_DTPREL: + /* The first .got.plt entry is right after the R_CRIS_DTPMOD + entry at index 3. */ + if (elf_cris_hash_table (info)->dtpmod_refcount == 0) + elf_cris_hash_table (info)->next_gotplt_entry += 8; + elf_cris_hash_table (info)->dtpmod_refcount++; + /* Fall through. */ + + case R_CRIS_32_IE: + case R_CRIS_32_GD: + case R_CRIS_16_GOT_GD: + case R_CRIS_32_GOT_GD: + case R_CRIS_32_GOT_TPREL: + case R_CRIS_16_GOT_TPREL: case R_CRIS_16_GOT: case R_CRIS_32_GOT: case R_CRIS_32_GOTREL: @@ -2519,6 +3212,26 @@ cris_elf_check_relocs (abfd, info, sec, relocs) if (!_bfd_elf_create_got_section (dynobj, info)) return FALSE; } + + if (sgot == NULL) + sgot = bfd_get_section_by_name (dynobj, ".got"); + + if (local_got_refcounts == NULL) + { + bfd_size_type amt; + + /* We use index local_got_refcounts[-1] to count all + GOT-relative relocations that do not have explicit + GOT entries. */ + amt = LGOT_ALLOC_NELTS_FOR (symtab_hdr->sh_info) + 1; + amt *= sizeof (bfd_signed_vma); + local_got_refcounts = ((bfd_signed_vma *) bfd_zalloc (abfd, amt)); + if (local_got_refcounts == NULL) + return FALSE; + + local_got_refcounts++; + elf_local_got_refcounts (abfd) = local_got_refcounts; + } break; default: @@ -2529,6 +3242,24 @@ cris_elf_check_relocs (abfd, info, sec, relocs) specific GOT entry). */ switch (r_type) { + case R_CRIS_16_DTPREL: + case R_CRIS_32_DTPREL: + /* Not requesting .got.rela for an executable: the contents + of the first entry is constant there. For a shared + library, we need .got.rela for the R_CRIS_DTPMOD + relocation at index 3. */ + if (!info->shared) + break; + /* Fall through. */ + + case R_CRIS_32_IE: + case R_CRIS_32_GD: + case R_CRIS_16_GOT_GD: + case R_CRIS_32_GOT_GD: + case R_CRIS_32_GOT_TPREL: + case R_CRIS_16_GOT_TPREL: + /* Fall through. */ + /* For R_CRIS_16_GOTPLT and R_CRIS_32_GOTPLT, we need a GOT entry only for local symbols. Unfortunately, we don't know until later on if there's a version script that forces the @@ -2559,31 +3290,69 @@ cris_elf_check_relocs (abfd, info, sec, relocs) return FALSE; } } - /* Fall through. */ + break; - case R_CRIS_32_GOTREL: - case R_CRIS_32_PLT_GOTREL: - if (sgot == NULL) - sgot = bfd_get_section_by_name (dynobj, ".got"); + default: + break; + } - if (local_got_refcounts == NULL) + /* Warn and error for invalid input. */ + switch (r_type) + { + case R_CRIS_32_IE: + case R_CRIS_32_TPREL: + case R_CRIS_16_TPREL: + case R_CRIS_32_GD: + if (info->shared) { - bfd_size_type amt; + (*_bfd_error_handler) + (_("%B, section %A:\n relocation %s not valid" + " in a shared object;" + " typically an option mixup, recompile with -fPIC"), + abfd, + sec, + cris_elf_howto_table[r_type].name); + /* Don't return FALSE here; we want messages for all of + these and the error behavior is ungraceful + anyway. */ + } + default: + break; + } - /* We use index local_got_refcounts[-1] to count all - GOT-relative relocations that do not have explicit - GOT entries. */ - amt = symtab_hdr->sh_info + 1; - amt *= sizeof (bfd_signed_vma); - local_got_refcounts = ((bfd_signed_vma *) bfd_zalloc (abfd, amt)); - if (local_got_refcounts == NULL) - return FALSE; + switch (r_type) + { + case R_CRIS_32_GD: + case R_CRIS_16_GOT_GD: + case R_CRIS_32_GOT_GD: + /* These are requests for tls_index entries, run-time R_CRIS_DTP. */ + got_element_size = 8; + r_symndx_lgot = LGOT_DTP_NDX (r_symndx); + break; - local_got_refcounts++; - elf_local_got_refcounts (abfd) = local_got_refcounts; - } + case R_CRIS_16_DTPREL: + case R_CRIS_32_DTPREL: + /* These two just request for the constant-index + module-local tls_index-sized GOT entry, which we add + elsewhere. */ break; + case R_CRIS_32_IE: + case R_CRIS_32_GOT_TPREL: + case R_CRIS_16_GOT_TPREL: + r_symndx_lgot = LGOT_TPREL_NDX (r_symndx); + + /* Those relocs also require that a DSO is of type + Initial Exec. Like other targets, we don't reset this + flag even if the relocs are GC:ed away. */ + if (info->shared) + info->flags |= DF_STATIC_TLS; + break; + + /* Let's list the other assembler-generated TLS-relocs too, + just to show that they're not forgotten. */ + case R_CRIS_16_TPREL: + case R_CRIS_32_TPREL: default: break; } @@ -2597,13 +3366,19 @@ cris_elf_check_relocs (abfd, info, sec, relocs) symbol. */ if (h != NULL) { - ((struct elf_cris_link_hash_entry *) h)->gotplt_refcount++; + elf_cris_hash_entry (h)->gotplt_refcount++; goto handle_gotplt_reloc; } /* If h is NULL then this is a local symbol, and we must make a GOT entry for it, so handle it like a GOT reloc. */ /* Fall through. */ + case R_CRIS_32_IE: + case R_CRIS_32_GD: + case R_CRIS_16_GOT_GD: + case R_CRIS_32_GOT_GD: + case R_CRIS_32_GOT_TPREL: + case R_CRIS_16_GOT_TPREL: case R_CRIS_16_GOT: case R_CRIS_32_GOT: /* This symbol requires a global offset table entry. */ @@ -2617,32 +3392,81 @@ cris_elf_check_relocs (abfd, info, sec, relocs) if (!bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } - - /* Allocate space in the .got section. */ - sgot->size += 4; - /* Allocate relocation space. */ - srelgot->size += sizeof (Elf32_External_Rela); } + + /* Update the sum of reloc counts for this symbol. */ h->got.refcount++; + + switch (r_type) + { + case R_CRIS_16_GOT: + case R_CRIS_32_GOT: + if (elf_cris_hash_entry (h)->reg_got_refcount == 0) + { + /* Allocate space in the .got section. */ + sgot->size += got_element_size; + /* Allocate relocation space. */ + srelgot->size += sizeof (Elf32_External_Rela); + } + elf_cris_hash_entry (h)->reg_got_refcount++; + break; + + case R_CRIS_32_GD: + case R_CRIS_16_GOT_GD: + case R_CRIS_32_GOT_GD: + if (elf_cris_hash_entry (h)->dtp_refcount == 0) + { + /* Allocate space in the .got section. */ + sgot->size += got_element_size; + /* Allocate relocation space. */ + srelgot->size += sizeof (Elf32_External_Rela); + } + elf_cris_hash_entry (h)->dtp_refcount++; + break; + + case R_CRIS_32_IE: + case R_CRIS_32_GOT_TPREL: + case R_CRIS_16_GOT_TPREL: + if (elf_cris_hash_entry (h)->tprel_refcount == 0) + { + /* Allocate space in the .got section. */ + sgot->size += got_element_size; + /* Allocate relocation space. */ + srelgot->size += sizeof (Elf32_External_Rela); + } + elf_cris_hash_entry (h)->tprel_refcount++; + break; + + default: + BFD_FAIL (); + break; + } } else { /* This is a global offset table entry for a local symbol. */ - if (local_got_refcounts[r_symndx] == 0) + if (local_got_refcounts[r_symndx_lgot] == 0) { - sgot->size += 4; + sgot->size += got_element_size; if (info->shared) { - /* If we are generating a shared object, we need to - output a R_CRIS_RELATIVE reloc so that the dynamic - linker can adjust this GOT entry. */ + /* If we are generating a shared object, we need + to output a R_CRIS_RELATIVE reloc so that the + dynamic linker can adjust this GOT entry. + Similarly for non-regular got entries. */ srelgot->size += sizeof (Elf32_External_Rela); } } + /* Update the reloc-specific count. */ + local_got_refcounts[r_symndx_lgot]++; + + /* This one is the sum of all the others. */ local_got_refcounts[r_symndx]++; } break; + case R_CRIS_16_DTPREL: + case R_CRIS_32_DTPREL: case R_CRIS_32_GOTREL: /* This reference requires a global offset table. FIXME: The actual refcount isn't used currently; the .got @@ -2683,12 +3507,13 @@ cris_elf_check_relocs (abfd, info, sec, relocs) case R_CRIS_16: case R_CRIS_32: /* Let's help debug shared library creation. Any of these - relocs can be used in shared libs, but pages containing them - cannot be shared. Don't warn for sections we don't care - about, such as debug sections or non-constant sections. We - can't help tables of (global) function pointers, for example, - though they must be emitted in a data section to avoid having - impure text sections. */ + relocs *can* be used in shared libs, but pages containing + them cannot be shared, so they're not appropriate for + common use. Don't warn for sections we don't care about, + such as debug sections or non-constant sections. We + can't help tables of (global) function pointers, for + example, though they must be emitted in a (writable) data + section to avoid having impure text sections. */ if (info->shared && (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_READONLY) != 0) @@ -2701,7 +3526,56 @@ cris_elf_check_relocs (abfd, info, sec, relocs) sec, cris_elf_howto_table[r_type].name); } - /* Fall through. */ + if (h != NULL) + { + h->non_got_ref = 1; + + /* Make sure a plt entry is created for this symbol if it + turns out to be a function defined by a dynamic object. */ + if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) + h->plt.refcount++; + } + + /* If we are creating a shared library and this is not a local + symbol, we need to copy the reloc into the shared library. + However when linking with -Bsymbolic and this is a global + symbol which is defined in an object we are including in the + link (i.e., DEF_REGULAR is set), then we can resolve the + reloc directly. At this point we have not seen all the input + files, so it is possible that DEF_REGULAR is not set now but + will be set later (it is never cleared). In case of a weak + definition, DEF_REGULAR may be cleared later by a strong + definition in a shared library. We account for that + possibility below by storing information in the relocs_copied + field of the hash table entry. A similar situation occurs + when creating shared libraries and symbol visibility changes + render the symbol local. */ + + /* No need to do anything if we're not creating a shared object. */ + if (! info->shared) + break; + + /* We don't need to handle relocs into sections not going into + the "real" output. */ + if ((sec->flags & SEC_ALLOC) == 0) + break; + + /* We may need to create a reloc section in the dynobj and made room + for this reloc. */ + if (sreloc == NULL) + { + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); + + if (sreloc == NULL) + return FALSE; + } + + if (sec->flags & SEC_READONLY) + info->flags |= DF_TEXTREL; + + sreloc->size += sizeof (Elf32_External_Rela); + break; case R_CRIS_8_PCREL: case R_CRIS_16_PCREL: @@ -2740,107 +3614,64 @@ cris_elf_check_relocs (abfd, info, sec, relocs) if ((sec->flags & SEC_ALLOC) == 0) break; - /* We can only eliminate PC-relative relocs. */ - if (r_type == R_CRIS_8_PCREL - || r_type == R_CRIS_16_PCREL - || r_type == R_CRIS_32_PCREL) - { - /* If the symbol is local, then we can eliminate the reloc. */ - if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) - break; - - /* If this is with -Bsymbolic and the symbol isn't weak, and - is defined by an ordinary object (the ones we include in - this shared library) then we can also eliminate the - reloc. See comment above for more eliminable cases which - we can't identify at this time. */ - if (info->symbolic - && h->root.type != bfd_link_hash_defweak - && h->def_regular) - break; + /* If the symbol is local, then we know already we can + eliminate the reloc. */ + if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + break; - if ((sec->flags & SEC_READONLY) != 0) - { - /* FIXME: How do we make this optionally a warning only? */ - (*_bfd_error_handler) - (_("%B, section %A:\n relocation %s should not be used" - " in a shared object; recompile with -fPIC"), - abfd, - sec, - cris_elf_howto_table[r_type].name); - } - } + /* If this is with -Bsymbolic and the symbol isn't weak, and + is defined by an ordinary object (the ones we include in + this shared library) then we can also eliminate the + reloc. See comment above for more eliminable cases which + we can't identify at this time. */ + if (info->symbolic + && h->root.type != bfd_link_hash_defweak + && h->def_regular) + break; - /* We create a reloc section in dynobj and make room for this - reloc. */ + /* We may need to create a reloc section in the dynobj and made room + for this reloc. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); - sreloc = bfd_get_section_by_name (dynobj, name); if (sreloc == NULL) - { - sreloc = bfd_make_section_with_flags (dynobj, name, - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (sreloc == NULL - || !bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } - if (sec->flags & SEC_READONLY) - info->flags |= DF_TEXTREL; + return FALSE; } sreloc->size += sizeof (Elf32_External_Rela); - /* If we are linking with -Bsymbolic, we count the number of PC - relative relocations we have entered for this symbol, so that - we can discard them again if the symbol is later defined by a - regular object. We know that h is really a pointer to an + /* We count the number of PC relative relocations we have + entered for this symbol, so that we can discard them + again if the symbol is later defined by a regular object. + We know that h is really a pointer to an elf_cris_link_hash_entry. */ - if ((r_type == R_CRIS_8_PCREL - || r_type == R_CRIS_16_PCREL - || r_type == R_CRIS_32_PCREL) - && info->symbolic) - { - struct elf_cris_link_hash_entry *eh; - struct elf_cris_pcrel_relocs_copied *p; + { + struct elf_cris_link_hash_entry *eh; + struct elf_cris_pcrel_relocs_copied *p; - eh = (struct elf_cris_link_hash_entry *) h; + eh = elf_cris_hash_entry (h); - for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next) - if (p->section == sreloc) - break; + for (p = eh->pcrel_relocs_copied; p != NULL; p = p->next) + if (p->section == sreloc) + break; - if (p == NULL) - { - p = ((struct elf_cris_pcrel_relocs_copied *) - bfd_alloc (dynobj, (bfd_size_type) sizeof *p)); - if (p == NULL) - return FALSE; - p->next = eh->pcrel_relocs_copied; - eh->pcrel_relocs_copied = p; - p->section = sreloc; - p->count = 0; - } + if (p == NULL) + { + p = ((struct elf_cris_pcrel_relocs_copied *) + bfd_alloc (dynobj, (bfd_size_type) sizeof *p)); + if (p == NULL) + return FALSE; + p->next = eh->pcrel_relocs_copied; + eh->pcrel_relocs_copied = p; + p->section = sreloc; + p->count = 0; + p->r_type = r_type; + } - ++p->count; - } + ++p->count; + } break; /* This relocation describes the C++ object vtable hierarchy. @@ -2853,10 +3684,17 @@ cris_elf_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_CRIS_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; + case R_CRIS_16_TPREL: + case R_CRIS_32_TPREL: + /* Already warned above, when necessary. */ + break; + default: /* Other relocs do not appear here. */ bfd_set_error (bfd_error_bad_value); @@ -2947,8 +3785,21 @@ elf_cris_size_dynamic_sections (output_bfd, info) /* Remember whether there is a PLT. */ plt = s->size != 0; } + else if (strcmp (name, ".got.plt") == 0) + { + /* The .got.plt contains the .got header as well as the + actual .got.plt contents. The .got header may contain a + R_CRIS_DTPMOD entry at index 3. */ + s->size += elf_cris_hash_table (info)->dtpmod_refcount != 0 + ? 8 : 0; + } else if (CONST_STRNEQ (name, ".rela")) { + if (strcmp (name, ".rela.got") == 0 + && elf_cris_hash_table (info)->dtpmod_refcount != 0 + && info->shared) + s->size += sizeof (Elf32_External_Rela); + if (s->size != 0) { /* Remember whether there are any reloc sections other @@ -3070,6 +3921,31 @@ elf_cris_discard_excess_dso_dynamics (h, inf) { for (s = h->pcrel_relocs_copied; s != NULL; s = s->next) s->section->size -= s->count * sizeof (Elf32_External_Rela); + + return TRUE; + } + + /* If we have accounted for PC-relative relocs for read-only + sections, now is the time to warn for them. We can't do it in + cris_elf_check_relocs, because we don't know the status of all + symbols at that time (and it's common to force symbols local + late). */ + + for (s = h->pcrel_relocs_copied; s != NULL; s = s->next) + { + BFD_ASSERT ((s->section->flags & SEC_READONLY) != 0); + + /* FIXME: How do we make this optionally a warning only? */ + (*_bfd_error_handler) + (_("%B, section `%A', to symbol `%s':\n" + " relocation %s should not be used" + " in a shared object; recompile with -fPIC"), + s->section->owner, + s->section, + h->root.root.root.string, + cris_elf_howto_table[s->r_type].name); + + info->flags |= DF_TEXTREL; } return TRUE; @@ -3097,7 +3973,7 @@ elf_cris_discard_excess_program_dynamics (h, inf) if (!h->root.def_dynamic || h->root.plt.refcount > 0) { - if (h->root.got.refcount > 0 + if (h->reg_got_refcount > 0 /* The size of this section is only valid and in sync with the various reference counts if we do dynamic; don't decrement it otherwise. */ @@ -3352,7 +4228,8 @@ static enum elf_reloc_type_class elf_cris_reloc_type_class (rela) const Elf_Internal_Rela *rela; { - switch ((int) ELF32_R_TYPE (rela->r_info)) + enum elf_cris_reloc_type r_type = ELF32_R_TYPE (rela->r_info); + switch (r_type) { case R_CRIS_RELATIVE: return reloc_class_relative; @@ -3364,6 +4241,68 @@ elf_cris_reloc_type_class (rela) return reloc_class_normal; } } + +/* The elf_backend_got_elt_size worker. For one symbol, we can have up to + two GOT entries from three types with two different sizes. We handle + it as a single entry, so we can use the regular offset-calculation + machinery. */ + +static bfd_vma +elf_cris_got_elt_size (bfd *abfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf_link_hash_entry *hr, + bfd *ibfd, + unsigned long symndx) +{ + struct elf_link_hash_entry *h = (struct elf_link_hash_entry *) hr; + bfd_vma eltsiz = 0; + + /* We may have one regular GOT entry or up to two TLS GOT + entries. */ + if (h == NULL) + { + Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + bfd_signed_vma *local_got_refcounts = elf_local_got_refcounts (ibfd); + + BFD_ASSERT (local_got_refcounts != NULL); + + if (local_got_refcounts[LGOT_REG_NDX (symndx)] > 0) + { + /* We can't have a variable referred to both as a regular + variable and through TLS relocs. */ + BFD_ASSERT (local_got_refcounts[LGOT_DTP_NDX (symndx)] == 0 + && local_got_refcounts[LGOT_TPREL_NDX (symndx)] == 0); + return 4; + } + + if (local_got_refcounts[LGOT_DTP_NDX (symndx)] > 0) + eltsiz += 8; + + if (local_got_refcounts[LGOT_TPREL_NDX (symndx)] > 0) + eltsiz += 4; + } + else + { + struct elf_cris_link_hash_entry *hh = elf_cris_hash_entry (h); + if (hh->reg_got_refcount > 0) + { + /* The actual error-on-input is emitted elsewhere. */ + BFD_ASSERT (hh->dtp_refcount == 0 && hh->tprel_refcount == 0); + return 4; + } + + if (hh->dtp_refcount > 0) + eltsiz += 8; + + if (hh->tprel_refcount > 0) + eltsiz += 4; + } + + /* We're only called when h->got.refcount is non-zero, so we must + have a non-zero size. */ + BFD_ASSERT (eltsiz != 0); + return eltsiz; +} #define ELF_ARCH bfd_arch_cris #define ELF_MACHINE_CODE EM_CRIS @@ -3402,6 +4341,8 @@ elf_cris_reloc_type_class (rela) elf_cris_link_hash_table_create #define elf_backend_adjust_dynamic_symbol \ elf_cris_adjust_dynamic_symbol +#define elf_backend_copy_indirect_symbol \ + elf_cris_copy_indirect_symbol #define elf_backend_size_dynamic_sections \ elf_cris_size_dynamic_sections #define elf_backend_init_index_section _bfd_elf_init_1_index_section @@ -3420,6 +4361,7 @@ elf_cris_reloc_type_class (rela) #define elf_backend_plt_readonly 1 #define elf_backend_want_plt_sym 0 #define elf_backend_got_header_size 12 +#define elf_backend_got_elt_size elf_cris_got_elt_size /* Later, we my want to optimize RELA entries into REL entries for dynamic linking and libraries (if it's a win of any significance). Until then, diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c index b0db783..71a3f6b 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, 2005, 2006, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Tomer Levi, NSC, Israel. This file is part of BFD, the Binary File Descriptor library. @@ -104,7 +104,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REL4", /* name */ FALSE, /* partial_inplace */ - 0xf, /* src_mask */ + 0x0, /* src_mask */ 0xf, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -118,7 +118,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REL8", /* name */ FALSE, /* partial_inplace */ - 0xff, /* src_mask */ + 0x0, /* src_mask */ 0xff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -132,7 +132,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REL8_CMP", /* name */ FALSE, /* partial_inplace */ - 0xff, /* src_mask */ + 0x0, /* src_mask */ 0xff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -146,7 +146,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REL16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -160,7 +160,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REL24", /* name */ FALSE, /* partial_inplace */ - 0xffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -174,7 +174,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REL32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -188,7 +188,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REGREL12", /* name */ FALSE, /* partial_inplace */ - 0xfff, /* src_mask */ + 0x0, /* src_mask */ 0xfff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -202,7 +202,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REGREL22", /* name */ FALSE, /* partial_inplace */ - 0x3fffff, /* src_mask */ + 0x0, /* src_mask */ 0x3fffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -216,7 +216,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REGREL28", /* name */ FALSE, /* partial_inplace */ - 0xfffffff, /* src_mask */ + 0x0, /* src_mask */ 0xfffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -230,7 +230,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_REGREL32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -244,7 +244,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_ABS16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -258,7 +258,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_ABS32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -272,7 +272,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_NUM8", /* name */ FALSE, /* partial_inplace */ - 0xff, /* src_mask */ + 0x0, /* src_mask */ 0xff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -286,7 +286,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_NUM16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -300,7 +300,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_NUM32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -314,7 +314,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_IMM16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -328,7 +328,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_IMM32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -345,7 +345,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_SWITCH8", /* name */ FALSE, /* partial_inplace */ - 0xff, /* src_mask */ + 0x0, /* src_mask */ 0xff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -362,7 +362,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_SWITCH16", /* name */ FALSE, /* partial_inplace */ - 0xffff, /* src_mask */ + 0x0, /* src_mask */ 0xffff, /* dst_mask */ TRUE), /* pcrel_offset */ @@ -379,7 +379,7 @@ static reloc_howto_type crx_elf_howto_table[] = bfd_elf_generic_reloc, /* special_function */ "R_CRX_SWITCH32", /* name */ FALSE, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0x0, /* src_mask */ 0xffffffff, /* dst_mask */ TRUE) /* pcrel_offset */ }; diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c index 32c4b74..a5e5395 100644 --- a/bfd/elf32-d10v.c +++ b/bfd/elf32-d10v.c @@ -262,7 +262,7 @@ elf32_d10v_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -271,9 +271,6 @@ elf32_d10v_check_relocs (bfd *abfd, 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++) @@ -304,7 +301,9 @@ elf32_d10v_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_D10V_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) return FALSE; break; } diff --git a/bfd/elf32-dlx.c b/bfd/elf32-dlx.c index eebaceb..6b96ac9 100644 --- a/bfd/elf32-dlx.c +++ b/bfd/elf32-dlx.c @@ -1,5 +1,5 @@ /* DLX specific support for 32-bit ELF - Copyright 2002, 2003, 2004, 2005, 2007 + Copyright 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -428,7 +428,7 @@ elf32_dlx_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -437,9 +437,6 @@ elf32_dlx_check_relocs (bfd *abfd, 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++) @@ -470,7 +467,9 @@ elf32_dlx_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_DLX_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c index 777a41c..f96b1f6 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, 2006, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -71,7 +71,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_bitfield, /* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_FR30_8", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x0000, /* src_mask */ 0x0ff0, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -86,7 +86,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_bitfield, /* complain_on_overflow */ fr30_elf_i20_reloc, /* special_function */ "R_FR30_20", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x00000000, /* src_mask */ 0x00f0ffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -101,7 +101,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_bitfield, /* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_FR30_32", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x00000000, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -116,7 +116,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_bitfield, /* complain_on_overflow */ fr30_elf_i32_reloc, /* special_function */ "R_FR30_48", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x00000000, /* src_mask */ 0xffffffff, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -131,7 +131,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_unsigned, /* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_FR30_6_IN_4", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x0000, /* src_mask */ 0x00f0, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -146,7 +146,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_signed, /* complain_on_overflow */ bfd_elf_generic_reloc,/* special_function */ "R_FR30_8_IN_8", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x0000, /* src_mask */ 0x0ff0, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -161,7 +161,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_signed, /* complain_on_overflow */ bfd_elf_generic_reloc,/* special_function */ "R_FR30_9_IN_8", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x0000, /* src_mask */ 0x0ff0, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -176,7 +176,7 @@ static reloc_howto_type fr30_elf_howto_table [] = complain_overflow_signed, /* complain_on_overflow */ bfd_elf_generic_reloc,/* special_function */ "R_FR30_10_IN_8", /* name */ - TRUE, /* partial_inplace */ + FALSE, /* partial_inplace */ 0x0000, /* src_mask */ 0x0ff0, /* dst_mask */ FALSE), /* pcrel_offset */ @@ -674,7 +674,7 @@ fr30_elf_check_relocs (abfd, info, sec, relocs) const Elf_Internal_Rela *relocs; { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -683,9 +683,6 @@ fr30_elf_check_relocs (abfd, info, sec, relocs) 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++) @@ -716,7 +713,9 @@ fr30_elf_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_FR30_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c index 2aff005..00b39c2 100644 --- a/bfd/elf32-frv.c +++ b/bfd/elf32-frv.c @@ -1,5 +1,5 @@ /* FRV-specific support for 32-bit ELF. - Copyright 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -24,7 +24,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/frv.h" -#include "elf/dwarf2.h" +#include "dwarf2.h" #include "hashtab.h" /* Forward declarations. */ @@ -1341,26 +1341,9 @@ _frvfdpic_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma offset, static unsigned _frvfdpic_osec_to_segment (bfd *output_bfd, asection *osec) { - struct elf_segment_map *m; - Elf_Internal_Phdr *p; - - /* Find the segment that contains the output_section. */ - for (m = elf_tdata (output_bfd)->segment_map, - p = elf_tdata (output_bfd)->phdr; - m != NULL; - m = m->next, p++) - { - int i; + Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section (output_bfd, osec); - for (i = m->count - 1; i >= 0; i--) - if (m->sections[i] == osec) - break; - - if (i >= 0) - break; - } - - return p - elf_tdata (output_bfd)->phdr; + return (p != NULL) ? p - elf_tdata (output_bfd)->phdr : -1; } inline static bfd_boolean @@ -1414,7 +1397,8 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, dynindx = entry->d.h->dynindx; else { - if (sec->output_section + if (sec + && sec->output_section && ! bfd_is_abs_section (sec->output_section) && ! bfd_is_und_section (sec->output_section)) dynindx = elf_section_data (sec->output_section)->dynindx; @@ -1696,8 +1680,9 @@ _frvfdpic_emit_got_relocs_plt_entries (struct frvfdpic_relocs_info *entry, of the section. For a non-local function, it's disregarded. */ lowword = ad; - if (entry->symndx == -1 && entry->d.h->dynindx != -1 - && entry->d.h->dynindx == idx) + if (sec == NULL + || (entry->symndx == -1 && entry->d.h->dynindx != -1 + && entry->d.h->dynindx == idx)) highword = 0; else highword = _frvfdpic_osec_to_segment @@ -5628,7 +5613,7 @@ _frvfdpic_check_discarded_relocs (bfd *abfd, asection *sec, bfd_boolean *changed) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; Elf_Internal_Rela *rel, *erel; if ((sec->flags & SEC_RELOC) == 0 @@ -5637,9 +5622,6 @@ _frvfdpic_check_discarded_relocs (bfd *abfd, asection *sec, 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; @@ -5756,6 +5738,10 @@ elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, { struct _frvfdpic_dynamic_got_plt_info gpinfo; + if (info->relocatable) + (*info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + /* If we return early, we didn't change anything. */ *again = FALSE; @@ -6179,7 +6165,7 @@ elf32_frv_check_relocs (abfd, info, sec, relocs) const Elf_Internal_Rela *relocs; { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; bfd *dynobj; @@ -6190,9 +6176,6 @@ elf32_frv_check_relocs (abfd, info, sec, relocs) 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; dynobj = elf_hash_table (info)->dynobj; rel_end = relocs + sec->reloc_count; @@ -6400,7 +6383,9 @@ elf32_frv_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_FRV_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -6857,7 +6842,7 @@ frv_elf_print_private_bfd_data (abfd, ptr) _bfd_elf_print_private_bfd_data (abfd, ptr); flags = elf_elfheader (abfd)->e_flags; - fprintf (file, _("private flags = 0x%lx:"), (long)flags); + fprintf (file, _("private flags = 0x%lx:"), (unsigned long) flags); switch (flags & EF_FRV_CPU_MASK) { diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c index 888c9ad..523a911 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, 2005, 2006, - 2007 Free Software Foundation, Inc. + 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -722,6 +722,13 @@ elf32_h8_relax_section (bfd *abfd, asection *sec, { bfd_vma symval; + { + arelent bfd_reloc; + reloc_howto_type *h; + + elf32_h8_info_to_howto (abfd, &bfd_reloc, irel); + h = bfd_reloc.howto; + } /* Keep track of the previous reloc so that we can delete some long jumps created by the compiler. */ if (irel != internal_relocs) @@ -994,7 +1001,8 @@ elf32_h8_relax_section (bfd *abfd, asection *sec, /* This is bsr. */ bfd_put_8 (abfd, 0x55, contents + irel->r_offset - 2); else - abort (); + /* Might be MOVSD. */ + break; /* Fix the relocation's type. */ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), @@ -1207,6 +1215,8 @@ elf32_h8_relax_section (bfd *abfd, asection *sec, if (value <= 0x7fff || value >= 0xffff8000u) { unsigned char code; + unsigned char op0, op1, op2, op3; + unsigned char *op_ptr; /* Note that we've changed the relocs, section contents, etc. */ @@ -1214,6 +1224,87 @@ elf32_h8_relax_section (bfd *abfd, asection *sec, elf_section_data (sec)->this_hdr.contents = contents; symtab_hdr->contents = (unsigned char *) isymbuf; + if (irel->r_offset >= 4) + { + /* Check for 4-byte MOVA relaxation. */ + int second_reloc = 0; + + op_ptr = contents + irel->r_offset - 4; + + if (last_reloc) + { + arelent bfd_reloc; + reloc_howto_type *h; + bfd_vma last_reloc_size; + + elf32_h8_info_to_howto (abfd, &bfd_reloc, last_reloc); + h = bfd_reloc.howto; + last_reloc_size = 1 << h->size; + if (last_reloc->r_offset + last_reloc_size + == irel->r_offset) + { + op_ptr -= last_reloc_size; + second_reloc = 1; + } + } + if (irel < irelend) + { + Elf_Internal_Rela *next_reloc = irel + 1; + arelent bfd_reloc; + reloc_howto_type *h; + bfd_vma next_reloc_size; + + elf32_h8_info_to_howto (abfd, &bfd_reloc, next_reloc); + h = bfd_reloc.howto; + next_reloc_size = 1 << h->size; + if (next_reloc->r_offset + next_reloc_size + == irel->r_offset) + { + op_ptr -= next_reloc_size; + second_reloc = 1; + } + } + + op0 = bfd_get_8 (abfd, op_ptr + 0); + op1 = bfd_get_8 (abfd, op_ptr + 1); + op2 = bfd_get_8 (abfd, op_ptr + 2); + op3 = bfd_get_8 (abfd, op_ptr + 3); + + if (op0 == 0x01 + && (op1 & 0xdf) == 0x5f + && (op2 & 0x40) == 0x40 + && (op3 & 0x80) == 0x80) + { + if ((op2 & 0x08) == 0) + second_reloc = 1; + + if (second_reloc) + { + op3 &= ~0x08; + bfd_put_8 (abfd, op3, op_ptr + 3); + } + else + { + op2 &= ~0x08; + bfd_put_8 (abfd, op2, op_ptr + 2); + } + goto r_h8_dir32a16_common; + } + } + + /* Now check for short version of MOVA. */ + op_ptr = contents + irel->r_offset - 2; + op0 = bfd_get_8 (abfd, op_ptr + 0); + op1 = bfd_get_8 (abfd, op_ptr + 1); + + if (op0 == 0x7a + && (op1 & 0x88) == 0x80) + { + op1 |= 0x08; + bfd_put_8 (abfd, op1, op_ptr + 1); + goto r_h8_dir32a16_common; + } + /* Get the opcode. */ code = bfd_get_8 (abfd, contents + irel->r_offset - 1); @@ -1224,6 +1315,7 @@ elf32_h8_relax_section (bfd *abfd, asection *sec, bfd_put_8 (abfd, code, contents + irel->r_offset - 1); + r_h8_dir32a16_common: /* Fix the relocation's type. */ irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), R_H8_DIR16); diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index a99cf0a..cac0a21 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -1,6 +1,7 @@ /* 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, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. Original code by Center for Software Science @@ -300,8 +301,8 @@ struct elf32_hppa_link_hash_table /* Set if we need a .plt stub to support lazy dynamic linking. */ unsigned int need_plt_stub:1; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; /* Data for LDM relocations. */ union @@ -334,6 +335,15 @@ struct elf32_hppa_link_hash_table #define eh_name(eh) \ (eh ? eh->root.root.string : "") +/* Override the generic function because we want to mark our BFDs. */ + +static bfd_boolean +elf32_hppa_mkobject (bfd *abfd) +{ + return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata), + HPPA_ELF_TDATA); +} + /* Assorted hash table functions. */ /* Initialize an entry in the stub hash table. */ @@ -450,7 +460,7 @@ elf32_hppa_link_hash_table_create (bfd *abfd) htab->has_17bit_branch = 0; htab->has_22bit_branch = 0; htab->need_plt_stub = 0; - htab->sym_sec.abfd = NULL; + htab->sym_cache.abfd = NULL; htab->tls_ldm_got.refcount = 0; return &htab->etab.root; @@ -1001,16 +1011,7 @@ elf32_hppa_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt"); htab->sgot = bfd_get_section_by_name (abfd, ".got"); - htab->srelgot = bfd_make_section_with_flags (abfd, ".rela.got", - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (abfd, htab->srelgot, 2)) - return FALSE; + htab->srelgot = bfd_get_section_by_name (abfd, ".rela.got"); htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss"); htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss"); @@ -1103,6 +1104,38 @@ elf32_hppa_optimized_tls_reloc (struct bfd_link_info *info ATTRIBUTE_UNUSED, return r_type; } +/* Return a pointer to the local GOT, PLT and TLS reference counts + for ABFD. Returns NULL if the storage allocation fails. */ + +static bfd_signed_vma * +hppa32_elf_local_refcounts (bfd *abfd) +{ + Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + bfd_signed_vma *local_refcounts; + + local_refcounts = elf_local_got_refcounts (abfd); + if (local_refcounts == NULL) + { + bfd_size_type size; + + /* Allocate space for local GOT and PLT reference + counts. 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_refcounts = bfd_zalloc (abfd, size); + if (local_refcounts == NULL) + return NULL; + elf_local_got_refcounts (abfd) = local_refcounts; + memset (hppa_elf_local_got_tls_type (abfd), GOT_UNKNOWN, + symtab_hdr->sh_info); + } + return local_refcounts; +} + + /* Look through the relocs for a section during the first phase, and calculate needed space in the global offset table, procedure linkage table, and dynamic reloc sections. At this point we haven't @@ -1278,7 +1311,9 @@ elf32_hppa_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_PARISC_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend)) + BFD_ASSERT (hh != NULL); + if (hh != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, &hh->eh, rela->r_addend)) return FALSE; continue; @@ -1347,26 +1382,9 @@ elf32_hppa_check_relocs (bfd *abfd, 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); + local_got_refcounts = hppa32_elf_local_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); - } + return FALSE; local_got_refcounts[r_symndx] += 1; old_tls_type = hppa_elf_local_got_tls_type (abfd) [r_symndx]; @@ -1413,22 +1431,9 @@ elf32_hppa_check_relocs (bfd *abfd, bfd_signed_vma *local_got_refcounts; bfd_signed_vma *local_plt_refcounts; - local_got_refcounts = elf_local_got_refcounts (abfd); + local_got_refcounts = hppa32_elf_local_refcounts (abfd); if (local_got_refcounts == NULL) - { - bfd_size_type size; - - /* Allocate space for local got offsets and local - 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; - elf_local_got_refcounts (abfd) = local_got_refcounts; - } + return FALSE; local_plt_refcounts = (local_got_refcounts + symtab_hdr->sh_info); local_plt_refcounts[r_symndx] += 1; @@ -1493,44 +1498,17 @@ elf32_hppa_check_relocs (bfd *abfd, this reloc. */ if (sreloc == NULL) { - char *name; - bfd *dynobj; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - { - (*_bfd_error_handler) - (_("Could not find relocation section for %s"), - sec->name); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - if (htab->etab.dynobj == NULL) htab->etab.dynobj = abfd; - dynobj = htab->etab.dynobj; - sreloc = bfd_get_section_by_name (dynobj, name); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->etab.dynobj, 2, abfd, /*rela?*/ TRUE); + if (sreloc == NULL) { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || !bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; + bfd_set_error (bfd_error_bad_value); + return FALSE; } - - elf_section_data (sec)->sreloc = sreloc; } /* If this is a global symbol, we count the number of @@ -1544,15 +1522,19 @@ elf32_hppa_check_relocs (bfd *abfd, /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *sr; void *vpp; + Elf_Internal_Sym *isym; - sr = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (sr == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + sr = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (sr == NULL) + sr = sec; + vpp = &elf_section_data (sr)->local_dynrel; hdh_head = (struct elf32_hppa_dyn_reloc_entry **) vpp; } @@ -1620,6 +1602,9 @@ elf32_hppa_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_plt_refcounts; const Elf_Internal_Rela *rela, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -2962,15 +2947,20 @@ elf32_hppa_size_stubs /* It's a local symbol. */ Elf_Internal_Sym *sym; Elf_Internal_Shdr *hdr; + unsigned int shndx; 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); + shndx = sym->st_shndx; + if (shndx < elf_numsections (input_bfd)) + { + hdr = elf_elfsections (input_bfd)[shndx]; + sym_sec = hdr->bfd_section; + destination = (sym_value + irela->r_addend + + sym_sec->output_offset + + sym_sec->output_section->vma); + } } else { @@ -3254,9 +3244,7 @@ elf32_hppa_final_link (bfd *abfd, struct bfd_link_info *info) /* Record the lowest address for the data and text segments. */ static void -hppa_record_segment_addr (bfd *abfd ATTRIBUTE_UNUSED, - asection *section, - void *data) +hppa_record_segment_addr (bfd *abfd, asection *section, void *data) { struct elf32_hppa_link_hash_table *htab; @@ -3264,7 +3252,12 @@ hppa_record_segment_addr (bfd *abfd ATTRIBUTE_UNUSED, if ((section->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) { - bfd_vma value = section->vma - section->filepos; + bfd_vma value; + Elf_Internal_Phdr *p; + + p = _bfd_elf_find_segment_containing_section (abfd, section->output_section); + BFD_ASSERT (p != NULL); + value = p->p_vaddr; if ((section->flags & SEC_READONLY) != 0) { @@ -3413,7 +3406,7 @@ final_link_relocate (asection *input_section, (_("%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link"), input_bfd, input_section, - offset, + (long) offset, howto->name, insn); } @@ -3577,7 +3570,7 @@ final_link_relocate (asection *input_section, (_("%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections"), input_bfd, input_section, - offset, + (long) offset, hsh->bh_root.string); bfd_set_error (bfd_error_bad_value); return bfd_reloc_notsupported; @@ -4594,11 +4587,12 @@ 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 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 /* Stuff for the BFD linker. */ +#define bfd_elf32_mkobject elf32_hppa_mkobject #define bfd_elf32_bfd_final_link elf32_hppa_final_link #define bfd_elf32_bfd_link_hash_table_create elf32_hppa_link_hash_table_create #define bfd_elf32_bfd_link_hash_table_free elf32_hppa_link_hash_table_free diff --git a/bfd/elf32-hppa.h b/bfd/elf32-hppa.h index 6010028..9b88229 100644 --- a/bfd/elf32-hppa.h +++ b/bfd/elf32-hppa.h @@ -5,7 +5,7 @@ February 1994. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, - 2002, 2003, 2007 Free Software Foundation, Inc. + 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Written by: diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c index 9c5cfbd..c419edd 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, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Hacked by Linas Vepstas for i370 linas@linas.org @@ -852,33 +852,11 @@ i370_elf_check_relocs (bfd *abfd, #endif if (sreloc == NULL) { - const char *name; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } + return FALSE; } sreloc->size += sizeof (Elf32_External_Rela); @@ -1064,7 +1042,6 @@ i370_elf_relocate_section (bfd *output_bfd, { Elf_Internal_Shdr *symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd); - bfd *dynobj = elf_hash_table (info)->dynobj; Elf_Internal_Rela *rel = relocs; Elf_Internal_Rela *relend = relocs + input_section->reloc_count; asection *sreloc = NULL; @@ -1232,22 +1209,10 @@ i370_elf_relocate_section (bfd *output_bfd, if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = 0; diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index c50e98d..9de1a6c 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -25,6 +25,9 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf-vxworks.h" +#include "bfd_stdint.h" +#include "objalloc.h" +#include "hashtab.h" /* 386 uses REL relocations instead of RELA. */ #define USE_REL 1 @@ -137,10 +140,13 @@ static reloc_howto_type elf_howto_table[]= HOWTO(R_386_TLS_DESC, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, bfd_elf_generic_reloc, "R_386_TLS_DESC", TRUE, 0xffffffff, 0xffffffff, FALSE), + HOWTO(R_386_IRELATIVE, 0, 2, 32, FALSE, 0, complain_overflow_bitfield, + bfd_elf_generic_reloc, "R_386_IRELATIVE", + TRUE, 0xffffffff, 0xffffffff, FALSE), /* Another gap. */ -#define R_386_tls (R_386_TLS_DESC + 1 - R_386_tls_offset) -#define R_386_vt_offset (R_386_GNU_VTINHERIT - R_386_tls) +#define R_386_irelative (R_386_IRELATIVE + 1 - R_386_tls_offset) +#define R_386_vt_offset (R_386_GNU_VTINHERIT - R_386_irelative) /* GNU extension to record C++ vtable hierarchy. */ HOWTO (R_386_GNU_VTINHERIT, /* type */ @@ -315,6 +321,10 @@ elf_i386_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, TRACE ("BFD_RELOC_386_TLS_DESC"); return &elf_howto_table[R_386_TLS_DESC - R_386_tls_offset]; + case BFD_RELOC_386_IRELATIVE: + TRACE ("BFD_RELOC_386_IRELATIVE"); + return &elf_howto_table[R_386_IRELATIVE]; + case BFD_RELOC_VTABLE_INHERIT: TRACE ("BFD_RELOC_VTABLE_INHERIT"); return &elf_howto_table[R_386_GNU_VTINHERIT - R_386_vt_offset]; @@ -345,27 +355,34 @@ elf_i386_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, return NULL; } -static void -elf_i386_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, - arelent *cache_ptr, - Elf_Internal_Rela *dst) +static reloc_howto_type * +elf_i386_rtype_to_howto (bfd *abfd, unsigned r_type) { - unsigned int r_type = ELF32_R_TYPE (dst->r_info); unsigned int indx; if ((indx = r_type) >= R_386_standard && ((indx = r_type - R_386_ext_offset) - R_386_standard >= R_386_ext - R_386_standard) && ((indx = r_type - R_386_tls_offset) - R_386_ext - >= R_386_tls - R_386_ext) - && ((indx = r_type - R_386_vt_offset) - R_386_tls - >= R_386_vt - R_386_tls)) + >= R_386_irelative - R_386_ext) + && ((indx = r_type - R_386_vt_offset) - R_386_irelative + >= R_386_vt - R_386_irelative)) { (*_bfd_error_handler) (_("%B: invalid relocation type %d"), abfd, (int) r_type); indx = R_386_NONE; } - cache_ptr->howto = &elf_howto_table[indx]; + BFD_ASSERT (elf_howto_table [indx].type == r_type); + return &elf_howto_table[indx]; +} + +static void +elf_i386_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED, + arelent *cache_ptr, + Elf_Internal_Rela *dst) +{ + unsigned int r_type = ELF32_R_TYPE (dst->r_info); + cache_ptr->howto = elf_i386_rtype_to_howto (abfd, r_type); } /* Return whether a symbol name implies a local label. The UnixWare @@ -560,26 +577,6 @@ static const bfd_byte elf_i386_pic_plt_entry[PLT_ENTRY_SIZE] = #define PLTRESOLVE_RELOCS 2 #define PLT_NON_JUMP_SLOT_RELOCS 2 -/* The i386 linker needs to keep track of the number of relocs that it - decides to copy as dynamic relocs in check_relocs for each symbol. - This is so that it can later discard them if they are found to be - unnecessary. We store the information in a field extending the - regular ELF linker hash table. */ - -struct elf_i386_dyn_relocs -{ - struct elf_i386_dyn_relocs *next; - - /* The input section of the reloc. */ - asection *sec; - - /* Total number of relocs copied for the input section. */ - bfd_size_type count; - - /* Number of pc-relative relocs copied for the input section. */ - bfd_size_type pc_count; -}; - /* i386 ELF linker hash entry. */ struct elf_i386_link_hash_entry @@ -587,7 +584,7 @@ struct elf_i386_link_hash_entry struct elf_link_hash_entry elf; /* Track dynamic relocs copied for this symbol. */ - struct elf_i386_dyn_relocs *dyn_relocs; + struct elf_dyn_relocs *dyn_relocs; #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 @@ -634,17 +631,16 @@ struct elf_i386_obj_tdata #define elf_i386_local_tlsdesc_gotent(abfd) \ (elf_i386_tdata (abfd)->local_tlsdesc_gotent) +#define is_i386_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == I386_ELF_TDATA) + static bfd_boolean elf_i386_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct elf_i386_obj_tdata), + I386_ELF_TDATA); } /* i386 ELF linker hash table. */ @@ -654,11 +650,6 @@ struct elf_i386_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 *sdynbss; asection *srelbss; @@ -683,8 +674,15 @@ struct elf_i386_link_hash_table section, plus whatever space is used by the jump slots. */ bfd_vma sgotplt_jump_table_size; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; + + /* _TLS_MODULE_BASE_ symbol. */ + struct bfd_link_hash_entry *tls_module_base; + + /* Used by local STT_GNU_IFUNC symbols. */ + htab_t loc_hash_table; + void *loc_hash_memory; }; /* Get the i386 ELF linker hash table from a link_info structure. */ @@ -698,16 +696,16 @@ struct elf_i386_link_hash_table /* Create an entry in an i386 ELF linker hash table. */ static struct bfd_hash_entry * -link_hash_newfunc (struct bfd_hash_entry *entry, - struct bfd_hash_table *table, - const char *string) +elf_i386_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { /* Allocate the structure if it has not already been allocated by a subclass. */ if (entry == NULL) { - entry = bfd_hash_allocate (table, - sizeof (struct elf_i386_link_hash_entry)); + entry = (struct bfd_hash_entry *) + bfd_hash_allocate (table, sizeof (struct elf_i386_link_hash_entry)); if (entry == NULL) return entry; } @@ -727,6 +725,75 @@ link_hash_newfunc (struct bfd_hash_entry *entry, return entry; } +/* Compute a hash of a local hash entry. We use elf_link_hash_entry + for local symbol so that we can handle local STT_GNU_IFUNC symbols + as global symbol. We reuse indx and dynstr_index for local symbol + hash since they aren't used by global symbols in this backend. */ + +static hashval_t +elf_i386_local_htab_hash (const void *ptr) +{ + struct elf_link_hash_entry *h + = (struct elf_link_hash_entry *) ptr; + return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index); +} + +/* Compare local hash entries. */ + +static int +elf_i386_local_htab_eq (const void *ptr1, const void *ptr2) +{ + struct elf_link_hash_entry *h1 + = (struct elf_link_hash_entry *) ptr1; + struct elf_link_hash_entry *h2 + = (struct elf_link_hash_entry *) ptr2; + + return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index; +} + +/* Find and/or create a hash entry for local symbol. */ + +static struct elf_link_hash_entry * +elf_i386_get_local_sym_hash (struct elf_i386_link_hash_table *htab, + bfd *abfd, const Elf_Internal_Rela *rel, + bfd_boolean create) +{ + struct elf_i386_link_hash_entry e, *ret; + asection *sec = abfd->sections; + hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id, + ELF32_R_SYM (rel->r_info)); + void **slot; + + e.elf.indx = sec->id; + e.elf.dynstr_index = ELF32_R_SYM (rel->r_info); + slot = htab_find_slot_with_hash (htab->loc_hash_table, &e, h, + create ? INSERT : NO_INSERT); + + if (!slot) + return NULL; + + if (*slot) + { + ret = (struct elf_i386_link_hash_entry *) *slot; + return &ret->elf; + } + + ret = (struct elf_i386_link_hash_entry *) + objalloc_alloc ((struct objalloc *) htab->loc_hash_memory, + sizeof (struct elf_i386_link_hash_entry)); + if (ret) + { + memset (ret, 0, sizeof (*ret)); + ret->elf.indx = sec->id; + ret->elf.dynstr_index = ELF32_R_SYM (rel->r_info); + ret->elf.dynindx = -1; + ret->elf.plt.offset = (bfd_vma) -1; + ret->elf.got.offset = (bfd_vma) -1; + *slot = ret; + } + return &ret->elf; +} + /* Create an i386 ELF linker hash table. */ static struct bfd_link_hash_table * @@ -735,62 +802,56 @@ elf_i386_link_hash_table_create (bfd *abfd) struct elf_i386_link_hash_table *ret; bfd_size_type amt = sizeof (struct elf_i386_link_hash_table); - ret = bfd_malloc (amt); + ret = (struct elf_i386_link_hash_table *) bfd_malloc (amt); if (ret == NULL) return NULL; - if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc, + if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, + elf_i386_link_hash_newfunc, sizeof (struct elf_i386_link_hash_entry))) { free (ret); return NULL; } - ret->sgot = NULL; - ret->sgotplt = NULL; - ret->srelgot = NULL; - ret->splt = NULL; - ret->srelplt = NULL; ret->sdynbss = NULL; ret->srelbss = NULL; ret->tls_ldm_got.refcount = 0; ret->next_tls_desc_index = 0; ret->sgotplt_jump_table_size = 0; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; ret->is_vxworks = 0; ret->srelplt2 = NULL; ret->plt0_pad_byte = 0; + ret->tls_module_base = NULL; + + ret->loc_hash_table = htab_try_create (1024, + elf_i386_local_htab_hash, + elf_i386_local_htab_eq, + NULL); + ret->loc_hash_memory = objalloc_create (); + if (!ret->loc_hash_table || !ret->loc_hash_memory) + { + free (ret); + return NULL; + } return &ret->elf.root; } -/* Create .got, .gotplt, and .rel.got sections in DYNOBJ, and set up - shortcuts to them in our hash table. */ +/* Destroy an i386 ELF linker hash table. */ -static bfd_boolean -create_got_section (bfd *dynobj, struct bfd_link_info *info) +static void +elf_i386_link_hash_table_free (struct bfd_link_hash_table *hash) { - struct elf_i386_link_hash_table *htab; - - if (! _bfd_elf_create_got_section (dynobj, info)) - return FALSE; - - htab = elf_i386_hash_table (info); - htab->sgot = bfd_get_section_by_name (dynobj, ".got"); - htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (!htab->sgot || !htab->sgotplt) - abort (); - - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rel.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; - return TRUE; + struct elf_i386_link_hash_table *htab + = (struct elf_i386_link_hash_table *) hash; + + if (htab->loc_hash_table) + htab_delete (htab->loc_hash_table); + if (htab->loc_hash_memory) + objalloc_free ((struct objalloc *) htab->loc_hash_memory); + _bfd_generic_link_hash_table_free (hash); } /* Create .plt, .rel.plt, .got, .got.plt, .rel.got, .dynbss, and @@ -802,25 +863,21 @@ elf_i386_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) { struct elf_i386_link_hash_table *htab; - htab = elf_i386_hash_table (info); - if (!htab->sgot && !create_got_section (dynobj, info)) - return FALSE; - 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, ".rel.plt"); + htab = elf_i386_hash_table (info); htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss"); if (!info->shared) htab->srelbss = bfd_get_section_by_name (dynobj, ".rel.bss"); - if (!htab->splt || !htab->srelplt || !htab->sdynbss + if (!htab->sdynbss || (!info->shared && !htab->srelbss)) abort (); if (htab->is_vxworks - && !elf_vxworks_create_dynamic_sections (dynobj, info, &htab->srelplt2)) + && !elf_vxworks_create_dynamic_sections (dynobj, info, + &htab->srelplt2)) return FALSE; return TRUE; @@ -842,14 +899,14 @@ elf_i386_copy_indirect_symbol (struct bfd_link_info *info, { if (edir->dyn_relocs != NULL) { - struct elf_i386_dyn_relocs **pp; - struct elf_i386_dyn_relocs *p; + struct elf_dyn_relocs **pp; + struct elf_dyn_relocs *p; /* Add reloc counts against the indirect sym to the direct sym list. Merge any entries against the same section. */ for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) { - struct elf_i386_dyn_relocs *q; + struct elf_dyn_relocs *q; for (q = edir->dyn_relocs; q != NULL; q = q->next) if (q->sec == p->sec) @@ -893,31 +950,309 @@ elf_i386_copy_indirect_symbol (struct bfd_link_info *info, _bfd_elf_link_hash_copy_indirect (info, dir, ind); } -static int -elf_i386_tls_transition (struct bfd_link_info *info, int r_type, int is_local) +typedef union + { + unsigned char c[2]; + uint16_t i; + } +i386_opcode16; + +/* Return TRUE if the TLS access code sequence support transition + from R_TYPE. */ + +static bfd_boolean +elf_i386_check_tls_transition (bfd *abfd, asection *sec, + bfd_byte *contents, + Elf_Internal_Shdr *symtab_hdr, + struct elf_link_hash_entry **sym_hashes, + unsigned int r_type, + const Elf_Internal_Rela *rel, + const Elf_Internal_Rela *relend) { - if (info->shared) - return r_type; + unsigned int val, type; + unsigned long r_symndx; + struct elf_link_hash_entry *h; + bfd_vma offset; + + /* Get the section contents. */ + if (contents == NULL) + { + if (elf_section_data (sec)->this_hdr.contents != NULL) + contents = elf_section_data (sec)->this_hdr.contents; + else + { + /* FIXME: How to better handle error condition? */ + if (!bfd_malloc_and_get_section (abfd, sec, &contents)) + return FALSE; + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; + } + } + + offset = rel->r_offset; switch (r_type) + { + case R_386_TLS_GD: + case R_386_TLS_LDM: + if (offset < 2 || (rel + 1) >= relend) + return FALSE; + + type = bfd_get_8 (abfd, contents + offset - 2); + if (r_type == R_386_TLS_GD) + { + /* Check transition from GD access model. Only + leal foo@tlsgd(,%reg,1), %eax; call ___tls_get_addr + leal foo@tlsgd(%reg), %eax; call ___tls_get_addr; nop + can transit to different access model. */ + if ((offset + 10) > sec->size || + (type != 0x8d && type != 0x04)) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 1); + if (type == 0x04) + { + /* leal foo@tlsgd(,%reg,1), %eax; call ___tls_get_addr */ + if (offset < 3) + return FALSE; + + if (bfd_get_8 (abfd, contents + offset - 3) != 0x8d) + return FALSE; + + if ((val & 0xc7) != 0x05 || val == (4 << 3)) + return FALSE; + } + else + { + /* leal foo@tlsgd(%reg), %eax; call ___tls_get_addr; nop */ + if ((val & 0xf8) != 0x80 || (val & 7) == 4) + return FALSE; + + if (bfd_get_8 (abfd, contents + offset + 9) != 0x90) + return FALSE; + } + } + else + { + /* Check transition from LD access model. Only + leal foo@tlsgd(%reg), %eax; call ___tls_get_addr + can transit to different access model. */ + if (type != 0x8d || (offset + 9) > sec->size) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 1); + if ((val & 0xf8) != 0x80 || (val & 7) == 4) + return FALSE; + } + + if (bfd_get_8 (abfd, contents + offset + 4) != 0xe8) + return FALSE; + + r_symndx = ELF32_R_SYM (rel[1].r_info); + if (r_symndx < symtab_hdr->sh_info) + return FALSE; + + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + /* Use strncmp to check ___tls_get_addr since ___tls_get_addr + may be versioned. */ + return (h != NULL + && h->root.root.string != NULL + && (ELF32_R_TYPE (rel[1].r_info) == R_386_PC32 + || ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32) + && (strncmp (h->root.root.string, "___tls_get_addr", + 15) == 0)); + + case R_386_TLS_IE: + /* Check transition from IE access model: + movl foo@indntpoff(%rip), %eax + movl foo@indntpoff(%rip), %reg + addl foo@indntpoff(%rip), %reg + */ + + if (offset < 1 || (offset + 4) > sec->size) + return FALSE; + + /* Check "movl foo@tpoff(%rip), %eax" first. */ + val = bfd_get_8 (abfd, contents + offset - 1); + if (val == 0xa1) + return TRUE; + + if (offset < 2) + return FALSE; + + /* Check movl|addl foo@tpoff(%rip), %reg. */ + type = bfd_get_8 (abfd, contents + offset - 2); + return ((type == 0x8b || type == 0x03) + && (val & 0xc7) == 0x05); + + case R_386_TLS_GOTIE: + case R_386_TLS_IE_32: + /* Check transition from {IE_32,GOTIE} access model: + subl foo@{tpoff,gontoff}(%reg1), %reg2 + movl foo@{tpoff,gontoff}(%reg1), %reg2 + addl foo@{tpoff,gontoff}(%reg1), %reg2 + */ + + if (offset < 2 || (offset + 4) > sec->size) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 1); + if ((val & 0xc0) != 0x80 || (val & 7) == 4) + return FALSE; + + type = bfd_get_8 (abfd, contents + offset - 2); + return type == 0x8b || type == 0x2b || type == 0x03; + + case R_386_TLS_GOTDESC: + /* Check transition from GDesc access model: + leal x@tlsdesc(%ebx), %eax + + Make sure it's a leal adding ebx to a 32-bit offset + into any register, although it's probably almost always + going to be eax. */ + + if (offset < 2 || (offset + 4) > sec->size) + return FALSE; + + if (bfd_get_8 (abfd, contents + offset - 2) != 0x8d) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 1); + return (val & 0xc7) == 0x83; + + case R_386_TLS_DESC_CALL: + /* Check transition from GDesc access model: + call *x@tlsdesc(%rax) + */ + if (offset + 2 <= sec->size) + { + /* Make sure that it's a call *x@tlsdesc(%rax). */ + static i386_opcode16 call = { { 0xff, 0x10 } }; + return bfd_get_16 (abfd, contents + offset) == call.i; + } + + return FALSE; + + default: + abort (); + } +} + +/* Return TRUE if the TLS access transition is OK or no transition + will be performed. Update R_TYPE if there is a transition. */ + +static bfd_boolean +elf_i386_tls_transition (struct bfd_link_info *info, bfd *abfd, + asection *sec, bfd_byte *contents, + Elf_Internal_Shdr *symtab_hdr, + struct elf_link_hash_entry **sym_hashes, + unsigned int *r_type, int tls_type, + const Elf_Internal_Rela *rel, + const Elf_Internal_Rela *relend, + struct elf_link_hash_entry *h, + unsigned long r_symndx) +{ + unsigned int from_type = *r_type; + unsigned int to_type = from_type; + bfd_boolean check = TRUE; + + switch (from_type) { case R_386_TLS_GD: case R_386_TLS_GOTDESC: case R_386_TLS_DESC_CALL: case R_386_TLS_IE_32: - if (is_local) - return R_386_TLS_LE_32; - return R_386_TLS_IE_32; case R_386_TLS_IE: case R_386_TLS_GOTIE: - if (is_local) - return R_386_TLS_LE_32; - return r_type; + if (info->executable) + { + if (h == NULL) + to_type = R_386_TLS_LE_32; + else if (from_type != R_386_TLS_IE + && from_type != R_386_TLS_GOTIE) + to_type = R_386_TLS_IE_32; + } + + /* When we are called from elf_i386_relocate_section, CONTENTS + isn't NULL and there may be additional transitions based on + TLS_TYPE. */ + if (contents != NULL) + { + unsigned int new_to_type = to_type; + + if (info->executable + && h != NULL + && h->dynindx == -1 + && (tls_type & GOT_TLS_IE)) + new_to_type = R_386_TLS_LE_32; + + if (to_type == R_386_TLS_GD + || to_type == R_386_TLS_GOTDESC + || to_type == R_386_TLS_DESC_CALL) + { + if (tls_type == GOT_TLS_IE_POS) + new_to_type = R_386_TLS_GOTIE; + else if (tls_type & GOT_TLS_IE) + new_to_type = R_386_TLS_IE_32; + } + + /* We checked the transition before when we were called from + elf_i386_check_relocs. We only want to check the new + transition which hasn't been checked before. */ + check = new_to_type != to_type && from_type == to_type; + to_type = new_to_type; + } + + break; + case R_386_TLS_LDM: - return R_386_TLS_LE_32; + if (info->executable) + to_type = R_386_TLS_LE_32; + break; + + default: + return TRUE; } - return r_type; + /* Return TRUE if there is no transition. */ + if (from_type == to_type) + return TRUE; + + /* Check if the transition can be performed. */ + if (check + && ! elf_i386_check_tls_transition (abfd, sec, contents, + symtab_hdr, sym_hashes, + from_type, rel, relend)) + { + reloc_howto_type *from, *to; + const char *name; + + from = elf_i386_rtype_to_howto (abfd, from_type); + to = elf_i386_rtype_to_howto (abfd, to_type); + + if (h) + name = h->root.root.string; + else + { + Elf_Internal_Sym *isym; + struct elf_i386_link_hash_table *htab; + htab = elf_i386_hash_table (info); + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); + } + + (*_bfd_error_handler) + (_("%B: TLS transition from %s to %s against `%s' at 0x%lx " + "in section `%A' failed"), + abfd, sec, from->name, to->name, name, + (unsigned long) rel->r_offset); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + *r_type = to_type; + return TRUE; } /* Look through the relocs for a section during the first phase, and @@ -940,8 +1275,10 @@ elf_i386_check_relocs (bfd *abfd, if (info->relocatable) return TRUE; + BFD_ASSERT (is_i386_elf (abfd)); + htab = elf_i386_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); sreloc = NULL; @@ -952,6 +1289,8 @@ elf_i386_check_relocs (bfd *abfd, unsigned int r_type; unsigned long r_symndx; struct elf_link_hash_entry *h; + Elf_Internal_Sym *isym; + const char *name; r_symndx = ELF32_R_SYM (rel->r_info); r_type = ELF32_R_TYPE (rel->r_info); @@ -965,16 +1304,135 @@ elf_i386_check_relocs (bfd *abfd, } if (r_symndx < symtab_hdr->sh_info) - h = NULL; + { + /* A local symbol. */ + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + /* Check relocation against local STT_GNU_IFUNC symbol. */ + if (ELF32_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) + { + h = elf_i386_get_local_sym_hash (htab, abfd, rel, + TRUE); + if (h == NULL) + return FALSE; + + /* Fake a STT_GNU_IFUNC symbol. */ + h->type = STT_GNU_IFUNC; + h->def_regular = 1; + h->ref_regular = 1; + h->forced_local = 1; + h->root.type = bfd_link_hash_defined; + } + else + h = NULL; + } else { + isym = NULL; h = sym_hashes[r_symndx - symtab_hdr->sh_info]; while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; } - r_type = elf_i386_tls_transition (info, r_type, h == NULL); + if (h != NULL) + { + /* Create the ifunc sections for static executables. If we + never see an indirect function symbol nor we are building + a static executable, those sections will be empty and + won't appear in output. */ + switch (r_type) + { + default: + break; + + case R_386_32: + case R_386_PC32: + case R_386_PLT32: + case R_386_GOT32: + case R_386_GOTOFF: + if (!_bfd_elf_create_ifunc_sections (abfd, info)) + return FALSE; + break; + } + + /* Since STT_GNU_IFUNC symbol must go through PLT, we handle + it here if it is defined in a non-shared object. */ + if (h->type == STT_GNU_IFUNC + && h->def_regular) + { + /* It is referenced by a non-shared object. */ + h->ref_regular = 1; + h->needs_plt = 1; + + /* STT_GNU_IFUNC symbol must go through PLT. */ + h->plt.refcount += 1; + + /* STT_GNU_IFUNC needs dynamic sections. */ + if (htab->elf.dynobj == NULL) + htab->elf.dynobj = abfd; + + switch (r_type) + { + default: + if (h->root.root.string) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, + NULL); + (*_bfd_error_handler) + (_("%B: relocation %s against STT_GNU_IFUNC " + "symbol `%s' isn't handled by %s"), abfd, + elf_howto_table[r_type].name, + name, __FUNCTION__); + bfd_set_error (bfd_error_bad_value); + return FALSE; + + case R_386_32: + h->non_got_ref = 1; + h->pointer_equality_needed = 1; + if (info->shared) + { + /* We must copy these reloc types into the + output file. Create a reloc section in + dynobj and make room for this reloc. */ + sreloc = _bfd_elf_create_ifunc_dyn_reloc + (abfd, info, sec, sreloc, + &((struct elf_i386_link_hash_entry *) h)->dyn_relocs); + if (sreloc == NULL) + return FALSE; + } + break; + + case R_386_PC32: + h->non_got_ref = 1; + break; + + case R_386_PLT32: + break; + + case R_386_GOT32: + case R_386_GOTOFF: + h->got.refcount += 1; + if (htab->elf.sgot == NULL + && !_bfd_elf_create_got_section (htab->elf.dynobj, + info)) + return FALSE; + break; + } + + continue; + } + } + + if (! elf_i386_tls_transition (info, abfd, sec, NULL, + symtab_hdr, sym_hashes, + &r_type, GOT_UNKNOWN, + rel, rel_end, h, r_symndx)) + return FALSE; switch (r_type) { @@ -1002,7 +1460,7 @@ elf_i386_check_relocs (bfd *abfd, case R_386_TLS_IE_32: case R_386_TLS_IE: case R_386_TLS_GOTIE: - if (info->shared) + if (!info->executable) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -1053,7 +1511,8 @@ elf_i386_check_relocs (bfd *abfd, size = symtab_hdr->sh_info; size *= (sizeof (bfd_signed_vma) + sizeof (bfd_vma) + sizeof(char)); - local_got_refcounts = bfd_zalloc (abfd, size); + local_got_refcounts = (bfd_signed_vma *) + bfd_zalloc (abfd, size); if (local_got_refcounts == NULL) return FALSE; elf_local_got_refcounts (abfd) = local_got_refcounts; @@ -1081,11 +1540,15 @@ elf_i386_check_relocs (bfd *abfd, tls_type |= old_tls_type; else { + if (h) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, + NULL); (*_bfd_error_handler) (_("%B: `%s' accessed both as normal and " "thread local symbol"), - abfd, - h ? h->root.root.string : ""); + abfd, name); return FALSE; } } @@ -1103,11 +1566,11 @@ elf_i386_check_relocs (bfd *abfd, case R_386_GOTOFF: case R_386_GOTPC: create_got: - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) { if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - if (!create_got_section (htab->elf.dynobj, info)) + if (!_bfd_elf_create_got_section (htab->elf.dynobj, info)) return FALSE; } if (r_type != R_386_TLS_IE) @@ -1116,14 +1579,14 @@ elf_i386_check_relocs (bfd *abfd, case R_386_TLS_LE_32: case R_386_TLS_LE: - if (!info->shared) + if (info->executable) break; info->flags |= DF_STATIC_TLS; /* Fall through */ case R_386_32: case R_386_PC32: - if (h != NULL && !info->shared) + if (h != NULL && info->executable) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -1175,53 +1638,22 @@ elf_i386_check_relocs (bfd *abfd, && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) { - struct elf_i386_dyn_relocs *p; - struct elf_i386_dyn_relocs **head; + struct elf_dyn_relocs *p; + struct elf_dyn_relocs **head; /* We must copy these reloc types into the output file. Create a reloc section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - const char *name; - bfd *dynobj; - unsigned int strndx = elf_elfheader (abfd)->e_shstrndx; - unsigned int shnam = elf_section_data (sec)->rel_hdr.sh_name; - - name = bfd_elf_string_from_elf_section (abfd, strndx, shnam); - if (name == NULL) - return FALSE; - - if (! CONST_STRNEQ (name, ".rel") - || strcmp (bfd_get_section_name (abfd, sec), - name + 4) != 0) - { - (*_bfd_error_handler) - (_("%B: bad relocation section name `%s\'"), - abfd, name); - } - if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - dynobj = htab->elf.dynobj; - sreloc = bfd_get_section_by_name (dynobj, name); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ FALSE); + if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -1232,26 +1664,32 @@ elf_i386_check_relocs (bfd *abfd, } else { - void **vpp; /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - + void **vpp; asection *s; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + Elf_Internal_Sym *isym; + + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; - head = (struct elf_i386_dyn_relocs **)vpp; + head = (struct elf_dyn_relocs **)vpp; } p = *head; if (p == NULL || p->sec != sec) { bfd_size_type amt = sizeof *p; - p = bfd_alloc (htab->elf.dynobj, amt); + p = (struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, + amt); if (p == NULL) return FALSE; p->next = *head; @@ -1270,9 +1708,7 @@ elf_i386_check_relocs (bfd *abfd, /* This relocation describes the C++ object vtable hierarchy. Reconstruct it for later use during GC. */ case R_386_GNU_VTINHERIT: - BFD_ASSERT (h != NULL); - if (h != NULL - && !bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) + if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) return FALSE; break; @@ -1327,9 +1763,12 @@ elf_i386_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1344,8 +1783,8 @@ elf_i386_gc_sweep_hook (bfd *abfd, if (r_symndx >= symtab_hdr->sh_info) { struct elf_i386_link_hash_entry *eh; - struct elf_i386_dyn_relocs **pp; - struct elf_i386_dyn_relocs *p; + struct elf_dyn_relocs **pp; + struct elf_dyn_relocs *p; h = sym_hashes[r_symndx - symtab_hdr->sh_info]; while (h->root.type == bfd_link_hash_indirect @@ -1363,7 +1802,12 @@ elf_i386_gc_sweep_hook (bfd *abfd, } r_type = ELF32_R_TYPE (rel->r_info); - r_type = elf_i386_tls_transition (info, r_type, h != NULL); + if (! elf_i386_tls_transition (info, abfd, sec, NULL, + symtab_hdr, sym_hashes, + &r_type, GOT_UNKNOWN, + rel, relend, h, r_symndx)) + return FALSE; + switch (r_type) { case R_386_TLS_LDM: @@ -1425,6 +1869,17 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf_i386_link_hash_table *htab; asection *s; + /* STT_GNU_IFUNC symbol must go through PLT. */ + if (h->type == STT_GNU_IFUNC) + { + if (h->plt.refcount <= 0) + { + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + return TRUE; + } + /* If this is a function, put it in the procedure linkage table. We will fill in the contents of the procedure linkage table later, when we know the address of the .got section. */ @@ -1500,7 +1955,7 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info, if (ELIMINATE_COPY_RELOCS && !htab->is_vxworks) { struct elf_i386_link_hash_entry * eh; - struct elf_i386_dyn_relocs *p; + struct elf_dyn_relocs *p; eh = (struct elf_i386_link_hash_entry *) h; for (p = eh->dyn_relocs; p != NULL; p = p->next) @@ -1552,12 +2007,12 @@ elf_i386_adjust_dynamic_symbol (struct bfd_link_info *info, dynamic relocs. */ static bfd_boolean -allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) +elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) { struct bfd_link_info *info; struct elf_i386_link_hash_table *htab; struct elf_i386_link_hash_entry *eh; - struct elf_i386_dyn_relocs *p; + struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_indirect) return TRUE; @@ -1567,12 +2022,20 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) 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; + eh = (struct elf_i386_link_hash_entry *) h; info = (struct bfd_link_info *) inf; htab = elf_i386_hash_table (info); - if (htab->elf.dynamic_sections_created - && h->plt.refcount > 0) + /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it + here if it is defined and referenced in a non-shared object. */ + if (h->type == STT_GNU_IFUNC + && h->def_regular) + return _bfd_elf_allocate_ifunc_dyn_relocs (info, h, + &eh->dyn_relocs, + PLT_ENTRY_SIZE, 4); + else if (htab->elf.dynamic_sections_created + && h->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. Undefined weak syms won't yet be marked as dynamic. */ @@ -1586,7 +2049,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (info->shared || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { - asection *s = htab->splt; + asection *s = htab->elf.splt; /* If this is the first .plt entry, make room for the special first entry. */ @@ -1612,10 +2075,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* We also need to make an entry in the .got.plt section, which will be placed in the .got section by the linker script. */ - htab->sgotplt->size += 4; + htab->elf.sgotplt->size += 4; /* We also need to make an entry in the .rel.plt section. */ - htab->srelplt->size += sizeof (Elf32_External_Rel); + htab->elf.srelplt->size += sizeof (Elf32_External_Rel); htab->next_tls_desc_index++; if (htab->is_vxworks && !info->shared) @@ -1650,13 +2113,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) h->needs_plt = 0; } - eh = (struct elf_i386_link_hash_entry *) h; eh->tlsdesc_got = (bfd_vma) -1; /* If R_386_TLS_{IE_32,IE,GOTIE} symbol is now local to the binary, make it a R_386_TLS_LE_32 requiring no TLS entry. */ if (h->got.refcount > 0 - && !info->shared + && info->executable && h->dynindx == -1 && (elf_i386_hash_entry(h)->tls_type & GOT_TLS_IE)) h->got.offset = (bfd_vma) -1; @@ -1675,12 +2137,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) return FALSE; } - s = htab->sgot; + s = htab->elf.sgot; if (GOT_TLS_GDESC_P (tls_type)) { - eh->tlsdesc_got = htab->sgotplt->size + eh->tlsdesc_got = htab->elf.sgotplt->size - elf_i386_compute_jump_table_size (htab); - htab->sgotplt->size += 8; + htab->elf.sgotplt->size += 8; h->got.offset = (bfd_vma) -2; } if (! GOT_TLS_GDESC_P (tls_type) @@ -1699,20 +2161,20 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) need two), R_386_TLS_GD needs one if local symbol and two if global. */ if (tls_type == GOT_TLS_IE_BOTH) - htab->srelgot->size += 2 * sizeof (Elf32_External_Rel); + htab->elf.srelgot->size += 2 * sizeof (Elf32_External_Rel); else if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1) || (tls_type & GOT_TLS_IE)) - htab->srelgot->size += sizeof (Elf32_External_Rel); + htab->elf.srelgot->size += sizeof (Elf32_External_Rel); else if (GOT_TLS_GD_P (tls_type)) - htab->srelgot->size += 2 * sizeof (Elf32_External_Rel); + htab->elf.srelgot->size += 2 * sizeof (Elf32_External_Rel); else if (! GOT_TLS_GDESC_P (tls_type) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && (info->shared || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) - htab->srelgot->size += sizeof (Elf32_External_Rel); + htab->elf.srelgot->size += sizeof (Elf32_External_Rel); if (GOT_TLS_GDESC_P (tls_type)) - htab->srelplt->size += sizeof (Elf32_External_Rel); + htab->elf.srelplt->size += sizeof (Elf32_External_Rel); } else h->got.offset = (bfd_vma) -1; @@ -1736,7 +2198,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) should avoid writing assembly like ".long foo - .". */ if (SYMBOL_CALLS_LOCAL (info, h)) { - struct elf_i386_dyn_relocs **pp; + struct elf_dyn_relocs **pp; for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) { @@ -1749,8 +2211,20 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } } + if (htab->is_vxworks) + { + struct elf_dyn_relocs **pp; + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + { + if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) + *pp = p->next; + else + pp = &p->next; + } + } + /* Also discard relocs on undefined weak syms with non-default - visibility. */ + visibility. */ if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak) { @@ -1803,20 +2277,43 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* Finally, allocate space. */ for (p = eh->dyn_relocs; p != NULL; p = p->next) { - asection *sreloc = elf_section_data (p->sec)->sreloc; + asection *sreloc; + + sreloc = elf_section_data (p->sec)->sreloc; + + BFD_ASSERT (sreloc != NULL); sreloc->size += p->count * sizeof (Elf32_External_Rel); } return TRUE; } +/* Allocate space in .plt, .got and associated reloc sections for + local dynamic relocs. */ + +static bfd_boolean +elf_i386_allocate_local_dynrelocs (void **slot, void *inf) +{ + struct elf_link_hash_entry *h + = (struct elf_link_hash_entry *) *slot; + + if (h->type != STT_GNU_IFUNC + || !h->def_regular + || !h->ref_regular + || !h->forced_local + || h->root.type != bfd_link_hash_defined) + abort (); + + return elf_i386_allocate_dynrelocs (h, inf); +} + /* Find any dynamic relocs that apply to read-only sections. */ static bfd_boolean -readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf) +elf_i386_readonly_dynrelocs (struct elf_link_hash_entry *h, void *inf) { struct elf_i386_link_hash_entry *eh; - struct elf_i386_dyn_relocs *p; + struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -1881,14 +2378,14 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *symtab_hdr; asection *srel; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_i386_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) { - struct elf_i386_dyn_relocs *p; + struct elf_dyn_relocs *p; - for (p = ((struct elf_i386_dyn_relocs *) + for (p = ((struct elf_dyn_relocs *) elf_section_data (s)->local_dynrel); p != NULL; p = p->next) @@ -1901,6 +2398,13 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, linker script /DISCARD/, so we'll be discarding the relocs too. */ } + else if (htab->is_vxworks + && strcmp (p->sec->output_section->name, + ".tls_vars") == 0) + { + /* Relocations in vxworks .tls_vars sections are + handled specially by the loader. */ + } else if (p->count != 0) { srel = elf_section_data (p->sec)->sreloc; @@ -1915,13 +2419,13 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = elf_i386_local_got_tls_type (ibfd); local_tlsdesc_gotent = elf_i386_local_tlsdesc_gotent (ibfd); - s = htab->sgot; - srel = htab->srelgot; + s = htab->elf.sgot; + srel = htab->elf.srelgot; for (; local_got < end_local_got; ++local_got, ++local_tls_type, ++local_tlsdesc_gotent) { @@ -1930,9 +2434,9 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { if (GOT_TLS_GDESC_P (*local_tls_type)) { - *local_tlsdesc_gotent = htab->sgotplt->size + *local_tlsdesc_gotent = htab->elf.sgotplt->size - elf_i386_compute_jump_table_size (htab); - htab->sgotplt->size += 8; + htab->elf.sgotplt->size += 8; *local_got = (bfd_vma) -2; } if (! GOT_TLS_GDESC_P (*local_tls_type) @@ -1954,7 +2458,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, || ! GOT_TLS_GDESC_P (*local_tls_type)) srel->size += sizeof (Elf32_External_Rel); if (GOT_TLS_GDESC_P (*local_tls_type)) - htab->srelplt->size += sizeof (Elf32_External_Rel); + htab->elf.srelplt->size += sizeof (Elf32_External_Rel); } } else @@ -1966,23 +2470,28 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { /* Allocate 2 got entries and 1 dynamic reloc for R_386_TLS_LDM relocs. */ - htab->tls_ldm_got.offset = htab->sgot->size; - htab->sgot->size += 8; - htab->srelgot->size += sizeof (Elf32_External_Rel); + htab->tls_ldm_got.offset = htab->elf.sgot->size; + htab->elf.sgot->size += 8; + htab->elf.srelgot->size += sizeof (Elf32_External_Rel); } else htab->tls_ldm_got.offset = -1; /* Allocate global sym .plt and .got entries, and space for global sym dynamic relocs. */ - elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, (PTR) info); + elf_link_hash_traverse (&htab->elf, elf_i386_allocate_dynrelocs, info); + + /* Allocate .plt and .got entries, and space for local symbols. */ + htab_traverse (htab->loc_hash_table, + elf_i386_allocate_local_dynrelocs, + info); /* For every jump slot reserved in the sgotplt, reloc_count is incremented. However, when we reserve space for TLS descriptors, it's not incremented, so in order to compute the space reserved for them, it suffices to multiply the reloc count by the jump slot size. */ - if (htab->srelplt) + if (htab->elf.srelplt) htab->sgotplt_jump_table_size = htab->next_tls_desc_index * 4; /* We now have determined the sizes of the various dynamic sections. @@ -1995,9 +2504,11 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if ((s->flags & SEC_LINKER_CREATED) == 0) continue; - if (s == htab->splt - || s == htab->sgot - || s == htab->sgotplt + if (s == htab->elf.splt + || s == htab->elf.sgot + || s == htab->elf.sgotplt + || s == htab->elf.iplt + || s == htab->elf.igotplt || s == htab->sdynbss) { /* Strip this section if we don't need it; see the @@ -2011,7 +2522,9 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, } else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rel")) { - if (s->size != 0 && s != htab->srelplt && s != htab->srelplt2) + if (s->size != 0 + && s != htab->elf.srelplt + && s != htab->srelplt2) relocs = TRUE; /* We use the reloc_count field as a counter if we need @@ -2048,7 +2561,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, section's contents are written out. This should not happen, but this way if it does, we get a R_386_NONE reloc instead of garbage. */ - s->contents = bfd_zalloc (dynobj, s->size); + s->contents = (unsigned char *) bfd_zalloc (dynobj, s->size); if (s->contents == NULL) return FALSE; } @@ -2069,7 +2582,7 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } - if (htab->splt->size != 0) + if (htab->elf.splt->size != 0) { if (!add_dynamic_entry (DT_PLTGOT, 0) || !add_dynamic_entry (DT_PLTRELSZ, 0) @@ -2088,8 +2601,8 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* If any dynamic relocs apply to a read-only section, then we need a DT_TEXTREL entry. */ if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, - (PTR) info); + elf_link_hash_traverse (&htab->elf, + elf_i386_readonly_dynrelocs, info); if ((info->flags & DF_TEXTREL) != 0) { @@ -2097,6 +2610,9 @@ elf_i386_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } } + if (htab->is_vxworks + && !elf_vxworks_add_dynamic_entries (output_bfd, info)) + return FALSE; } #undef add_dynamic_entry @@ -2128,6 +2644,9 @@ elf_i386_always_size_sections (bfd *output_bfd, tls_sec, 0, NULL, FALSE, bed->collect, &bh))) return FALSE; + + elf_i386_hash_table (info)->tls_module_base = bh; + tlsbase = (struct elf_link_hash_entry *)bh; tlsbase->def_regular = 1; tlsbase->other = STV_HIDDEN; @@ -2172,12 +2691,33 @@ elf_i386_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, return TRUE; } +/* _TLS_MODULE_BASE_ needs to be treated especially when linking + executables. Rather than setting it to the beginning of the TLS + section, we have to set it to the end. This function may be called + multiple times, it is idempotent. */ + +static void +elf_i386_set_tls_module_base (struct bfd_link_info *info) +{ + struct bfd_link_hash_entry *base; + + if (!info->executable) + return; + + base = elf_i386_hash_table (info)->tls_module_base; + + if (!base) + return; + + base->u.def.value = elf_hash_table (info)->tls_size; +} + /* Return the base VMA address which should be subtracted from real addresses when resolving @dtpoff relocation. This is PT_TLS segment p_vaddr. */ static bfd_vma -dtpoff_base (struct bfd_link_info *info) +elf_i386_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) @@ -2189,7 +2729,7 @@ dtpoff_base (struct bfd_link_info *info) if STT_TLS virtual address is ADDRESS. */ static bfd_vma -tpoff (struct bfd_link_info *info, bfd_vma address) +elf_i386_tpoff (struct bfd_link_info *info, bfd_vma address) { struct elf_link_hash_table *htab = elf_hash_table (info); @@ -2218,12 +2758,22 @@ elf_i386_relocate_section (bfd *output_bfd, bfd_vma *local_tlsdesc_gotents; Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; + bfd_boolean is_vxworks_tls; + BFD_ASSERT (is_i386_elf (input_bfd)); + htab = elf_i386_hash_table (info); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); local_tlsdesc_gotents = elf_i386_local_tlsdesc_gotent (input_bfd); + /* We have to handle relocations in vxworks .tls_vars sections + specially, because the dynamic loader is 'weird'. */ + is_vxworks_tls = (htab->is_vxworks && info->shared + && !strcmp (input_section->output_section->name, + ".tls_vars")); + + elf_i386_set_tls_module_base (info); rel = relocs; relend = relocs + input_section->reloc_count; @@ -2251,7 +2801,7 @@ elf_i386_relocate_section (bfd *output_bfd, && ((indx = r_type - R_386_ext_offset) - R_386_standard >= R_386_ext - R_386_standard) && ((indx = r_type - R_386_tls_offset) - R_386_ext - >= R_386_tls - R_386_ext)) + >= R_386_irelative - R_386_ext)) { (*_bfd_error_handler) (_("%B: unrecognized relocation (0x%x) in section `%A'"), @@ -2343,6 +2893,19 @@ elf_i386_relocate_section (bfd *output_bfd, break; } } + else if (!info->relocatable + && ELF32_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + { + /* Relocate against local STT_GNU_IFUNC symbol. */ + h = elf_i386_get_local_sym_hash (htab, input_bfd, + rel, FALSE); + if (h == NULL) + abort (); + + /* Set STT_GNU_IFUNC symbol value. */ + h->root.u.def.value = sym->st_value; + h->root.u.def.section = sec; + } } else { @@ -2368,12 +2931,189 @@ elf_i386_relocate_section (bfd *output_bfd, if (info->relocatable) continue; + /* Since STT_GNU_IFUNC symbol must go through PLT, we handle + it here if it is defined in a non-shared object. */ + if (h != NULL + && h->type == STT_GNU_IFUNC + && h->def_regular) + { + asection *plt, *gotplt, *base_got; + bfd_vma plt_index; + const char *name; + + if ((input_section->flags & SEC_ALLOC) == 0 + || h->plt.offset == (bfd_vma) -1) + abort (); + + /* STT_GNU_IFUNC symbol must go through PLT. */ + if (htab->elf.splt != NULL) + { + plt = htab->elf.splt; + gotplt = htab->elf.sgotplt; + } + else + { + plt = htab->elf.iplt; + gotplt = htab->elf.igotplt; + } + + relocation = (plt->output_section->vma + + plt->output_offset + h->plt.offset); + + switch (r_type) + { + default: + if (h->root.root.string) + name = h->root.root.string; + else + name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, + NULL); + (*_bfd_error_handler) + (_("%B: relocation %s against STT_GNU_IFUNC " + "symbol `%s' isn't handled by %s"), input_bfd, + elf_howto_table[r_type].name, + name, __FUNCTION__); + bfd_set_error (bfd_error_bad_value); + return FALSE; + + case R_386_32: + /* Generate dynamic relcoation only when there is a + non-GOF reference in a shared object. */ + if (info->shared && h->non_got_ref) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + asection *sreloc; + bfd_vma offset; + + /* Need a dynamic relocation to get the real function + adddress. */ + offset = _bfd_elf_section_offset (output_bfd, + info, + input_section, + rel->r_offset); + if (offset == (bfd_vma) -1 + || offset == (bfd_vma) -2) + abort (); + + outrel.r_offset = (input_section->output_section->vma + + input_section->output_offset + + offset); + + if (h->dynindx == -1 + || h->forced_local + || info->executable) + { + /* This symbol is resolved locally. */ + outrel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE); + bfd_put_32 (output_bfd, + (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset), + contents + offset); + } + else + outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); + + sreloc = htab->elf.irelifunc; + loc = sreloc->contents; + loc += (sreloc->reloc_count++ + * sizeof (Elf32_External_Rel)); + bfd_elf32_swap_reloc_out (output_bfd, &outrel, loc); + + /* If this reloc is against an external symbol, we + do not want to fiddle with the addend. Otherwise, + we need to include the symbol value so that it + becomes an addend for the dynamic reloc. For an + internal symbol, we have updated addend. */ + continue; + } + + case R_386_PC32: + case R_386_PLT32: + goto do_relocation; + + case R_386_GOT32: + base_got = htab->elf.sgot; + off = h->got.offset; + + if (base_got == NULL) + abort (); + + if (off == (bfd_vma) -1) + { + /* We can't use h->got.offset here to save state, or + even just remember the offset, as finish_dynamic_symbol + would use that as offset into .got. */ + + if (htab->elf.splt != NULL) + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; + off = (plt_index + 3) * 4; + base_got = htab->elf.sgotplt; + } + else + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE; + off = plt_index * 4; + base_got = htab->elf.igotplt; + } + + if (h->dynindx == -1 + || h->forced_local + || info->symbolic) + { + /* This references the local defitionion. We must + initialize this entry in the global offset table. + Since the offset must always be a multiple of 8, + we use the least significant bit to record + whether we have initialized it already. + + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + if ((off & 1) != 0) + off &= ~1; + else + { + bfd_put_32 (output_bfd, relocation, + base_got->contents + off); + h->got.offset |= 1; + } + } + + relocation = off; + + /* Adjust for static executables. */ + if (htab->elf.splt == NULL) + relocation += gotplt->output_offset; + } + else + { + relocation = (base_got->output_section->vma + + base_got->output_offset + off + - gotplt->output_section->vma + - gotplt->output_offset); + /* Adjust for static executables. */ + if (htab->elf.splt == NULL) + relocation += gotplt->output_offset; + } + + goto do_relocation; + + case R_386_GOTOFF: + relocation -= (gotplt->output_section->vma + + gotplt->output_offset); + goto do_relocation; + } + } + switch (r_type) { case R_386_GOT32: /* Relocation is to the entry for this symbol in the global offset table. */ - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) abort (); if (h != NULL) @@ -2405,7 +3145,7 @@ elf_i386_relocate_section (bfd *output_bfd, else { bfd_put_32 (output_bfd, relocation, - htab->sgot->contents + off); + htab->elf.sgot->contents + off); h->got.offset |= 1; } } @@ -2427,7 +3167,7 @@ elf_i386_relocate_section (bfd *output_bfd, else { bfd_put_32 (output_bfd, relocation, - htab->sgot->contents + off); + htab->elf.sgot->contents + off); if (info->shared) { @@ -2435,12 +3175,12 @@ elf_i386_relocate_section (bfd *output_bfd, Elf_Internal_Rela outrel; bfd_byte *loc; - s = htab->srelgot; + s = htab->elf.srelgot; if (s == NULL) abort (); - outrel.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + outrel.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); outrel.r_info = ELF32_R_INFO (0, R_386_RELATIVE); loc = s->contents; @@ -2455,10 +3195,10 @@ elf_i386_relocate_section (bfd *output_bfd, if (off >= (bfd_vma) -2) abort (); - relocation = htab->sgot->output_section->vma - + htab->sgot->output_offset + off - - htab->sgotplt->output_section->vma - - htab->sgotplt->output_offset; + relocation = htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off + - htab->elf.sgotplt->output_section->vma + - htab->elf.sgotplt->output_offset; break; case R_386_GOTOFF: @@ -2467,19 +3207,46 @@ elf_i386_relocate_section (bfd *output_bfd, /* Check to make sure it isn't a protected function symbol for shared library since it may not be local when used - as function address. */ - if (info->shared - && !info->executable - && h - && h->def_regular - && h->type == STT_FUNC - && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) + as function address. We also need to make sure that a + symbol is defined locally. */ + if (info->shared && h) { - (*_bfd_error_handler) - (_("%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object"), - input_bfd, h->root.root.string); - bfd_set_error (bfd_error_bad_value); - return FALSE; + if (!h->def_regular) + { + const char *v; + + switch (ELF_ST_VISIBILITY (h->other)) + { + case STV_HIDDEN: + v = _("hidden symbol"); + break; + case STV_INTERNAL: + v = _("internal symbol"); + break; + case STV_PROTECTED: + v = _("protected symbol"); + break; + default: + v = _("symbol"); + break; + } + + (*_bfd_error_handler) + (_("%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object"), + input_bfd, v, h->root.root.string); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + else if (!info->executable + && h->type == STT_FUNC + && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) + { + (*_bfd_error_handler) + (_("%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object"), + input_bfd, h->root.root.string); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } } /* Note that sgot is not involved in this @@ -2487,14 +3254,14 @@ elf_i386_relocate_section (bfd *output_bfd, defined _GLOBAL_OFFSET_TABLE_ in a different way, as is permitted by the ABI, we might have to change this calculation. */ - relocation -= htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset; + relocation -= htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset; break; case R_386_GOTPC: /* Use global offset table as symbol value. */ - relocation = htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset; + relocation = htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset; unresolved_reloc = FALSE; break; @@ -2508,7 +3275,7 @@ elf_i386_relocate_section (bfd *output_bfd, break; if (h->plt.offset == (bfd_vma) -1 - || htab->splt == NULL) + || htab->elf.splt == NULL) { /* We didn't make a PLT entry for this symbol. This happens when statically linking PIC code, or when @@ -2516,15 +3283,16 @@ elf_i386_relocate_section (bfd *output_bfd, break; } - relocation = (htab->splt->output_section->vma - + htab->splt->output_offset + relocation = (htab->elf.splt->output_section->vma + + htab->elf.splt->output_offset + h->plt.offset); unresolved_reloc = FALSE; break; case R_386_32: case R_386_PC32: - if ((input_section->flags & SEC_ALLOC) == 0) + if ((input_section->flags & SEC_ALLOC) == 0 + || is_vxworks_tls) break; if ((info->shared @@ -2582,11 +3350,12 @@ elf_i386_relocate_section (bfd *output_bfd, } sreloc = elf_section_data (input_section)->sreloc; - if (sreloc == NULL) - abort (); + + BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL); loc = sreloc->contents; loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rel); + bfd_elf32_swap_reloc_out (output_bfd, &outrel, loc); /* If this reloc is against an external symbol, we do @@ -2599,7 +3368,7 @@ elf_i386_relocate_section (bfd *output_bfd, break; case R_386_TLS_IE: - if (info->shared) + if (!info->executable) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -2623,91 +3392,54 @@ elf_i386_relocate_section (bfd *output_bfd, case R_386_TLS_DESC_CALL: case R_386_TLS_IE_32: case R_386_TLS_GOTIE: - r_type = elf_i386_tls_transition (info, r_type, h == NULL); tls_type = GOT_UNKNOWN; if (h == NULL && local_got_offsets) tls_type = elf_i386_local_got_tls_type (input_bfd) [r_symndx]; else if (h != NULL) - { - tls_type = elf_i386_hash_entry(h)->tls_type; - if (!info->shared && h->dynindx == -1 && (tls_type & GOT_TLS_IE)) - r_type = R_386_TLS_LE_32; - } + tls_type = elf_i386_hash_entry(h)->tls_type; if (tls_type == GOT_TLS_IE) tls_type = GOT_TLS_IE_NEG; - if (r_type == R_386_TLS_GD - || r_type == R_386_TLS_GOTDESC - || r_type == R_386_TLS_DESC_CALL) - { - if (tls_type == GOT_TLS_IE_POS) - r_type = R_386_TLS_GOTIE; - else if (tls_type & GOT_TLS_IE) - r_type = R_386_TLS_IE_32; - } + + if (! elf_i386_tls_transition (info, input_bfd, + input_section, contents, + symtab_hdr, sym_hashes, + &r_type, tls_type, rel, + relend, h, r_symndx)) + return FALSE; if (r_type == R_386_TLS_LE_32) { BFD_ASSERT (! unresolved_reloc); if (ELF32_R_TYPE (rel->r_info) == R_386_TLS_GD) { - unsigned int val, type; + unsigned int type; bfd_vma roff; /* GD->LE transition. */ - BFD_ASSERT (rel->r_offset >= 2); type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); - BFD_ASSERT (type == 0x8d || type == 0x04); - BFD_ASSERT (rel->r_offset + 9 <= input_section->size); - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset + 4) - == 0xe8); - BFD_ASSERT (rel + 1 < relend); - BFD_ASSERT (ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32); - roff = rel->r_offset + 5; - val = bfd_get_8 (input_bfd, - contents + rel->r_offset - 1); if (type == 0x04) { /* leal foo(,%reg,1), %eax; call ___tls_get_addr Change it into: movl %gs:0, %eax; subl $foo@tpoff, %eax (6 byte form of subl). */ - BFD_ASSERT (rel->r_offset >= 3); - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset - 3) - == 0x8d); - BFD_ASSERT ((val & 0xc7) == 0x05 && val != (4 << 3)); memcpy (contents + rel->r_offset - 3, "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12); + roff = rel->r_offset + 5; } else { - BFD_ASSERT ((val & 0xf8) == 0x80 && (val & 7) != 4); - if (rel->r_offset + 10 <= input_section->size - && bfd_get_8 (input_bfd, - contents + rel->r_offset + 9) == 0x90) - { - /* leal foo(%reg), %eax; call ___tls_get_addr; nop - Change it into: - movl %gs:0, %eax; subl $foo@tpoff, %eax - (6 byte form of subl). */ - memcpy (contents + rel->r_offset - 2, - "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12); - roff = rel->r_offset + 6; - } - else - { - /* leal foo(%reg), %eax; call ___tls_get_addr - Change it into: - movl %gs:0, %eax; subl $foo@tpoff, %eax - (5 byte form of subl). */ - memcpy (contents + rel->r_offset - 2, - "\x65\xa1\0\0\0\0\x2d\0\0\0", 11); - } + /* leal foo(%reg), %eax; call ___tls_get_addr; nop + Change it into: + movl %gs:0, %eax; subl $foo@tpoff, %eax + (6 byte form of subl). */ + memcpy (contents + rel->r_offset - 2, + "\x65\xa1\0\0\0\0\x81\xe8\0\0\0", 12); + roff = rel->r_offset + 6; } - bfd_put_32 (output_bfd, tpoff (info, relocation), + bfd_put_32 (output_bfd, elf_i386_tpoff (info, relocation), contents + roff); - /* Skip R_386_PLT32. */ + /* Skip R_386_PC32/R_386_PLT32. */ rel++; continue; } @@ -2721,26 +3453,18 @@ elf_i386_relocate_section (bfd *output_bfd, Registers other than %eax may be set up here. */ - unsigned int val, type; + unsigned int val; bfd_vma roff; - /* First, make sure it's a leal adding ebx to a - 32-bit offset into any register, although it's - probably almost always going to be eax. */ roff = rel->r_offset; - BFD_ASSERT (roff >= 2); - type = bfd_get_8 (input_bfd, contents + roff - 2); - BFD_ASSERT (type == 0x8d); val = bfd_get_8 (input_bfd, contents + roff - 1); - BFD_ASSERT ((val & 0xc7) == 0x83); - BFD_ASSERT (roff + 4 <= input_section->size); /* Now modify the instruction as appropriate. */ /* aoliva FIXME: remove the above and xor the byte below with 0x86. */ bfd_put_8 (output_bfd, val ^ 0x86, contents + roff - 1); - bfd_put_32 (output_bfd, -tpoff (info, relocation), + bfd_put_32 (output_bfd, -elf_i386_tpoff (info, relocation), contents + roff); continue; } @@ -2750,28 +3474,18 @@ elf_i386_relocate_section (bfd *output_bfd, It's originally: call *(%eax) Turn it into: - nop; nop */ + xchg %ax,%ax */ - unsigned int val, type; bfd_vma roff; - - /* First, make sure it's a call *(%eax). */ + roff = rel->r_offset; - BFD_ASSERT (roff + 2 <= input_section->size); - type = bfd_get_8 (input_bfd, contents + roff); - BFD_ASSERT (type == 0xff); - val = bfd_get_8 (input_bfd, contents + roff + 1); - BFD_ASSERT (val == 0x10); - - /* 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; } else if (ELF32_R_TYPE (rel->r_info) == R_386_TLS_IE) { - unsigned int val, type; + unsigned int val; /* IE->LE transition: Originally it can be one of: @@ -2782,9 +3496,7 @@ elf_i386_relocate_section (bfd *output_bfd, movl $foo, %eax movl $foo, %reg addl $foo, %reg. */ - BFD_ASSERT (rel->r_offset >= 1); val = bfd_get_8 (input_bfd, contents + rel->r_offset - 1); - BFD_ASSERT (rel->r_offset + 4 <= input_section->size); if (val == 0xa1) { /* movl foo, %eax. */ @@ -2793,14 +3505,14 @@ elf_i386_relocate_section (bfd *output_bfd, } else { - BFD_ASSERT (rel->r_offset >= 2); + unsigned int type; + type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); switch (type) { case 0x8b: /* movl */ - BFD_ASSERT ((val & 0xc7) == 0x05); bfd_put_8 (output_bfd, 0xc7, contents + rel->r_offset - 2); bfd_put_8 (output_bfd, @@ -2809,7 +3521,6 @@ elf_i386_relocate_section (bfd *output_bfd, break; case 0x03: /* addl */ - BFD_ASSERT ((val & 0xc7) == 0x05); bfd_put_8 (output_bfd, 0x81, contents + rel->r_offset - 2); bfd_put_8 (output_bfd, @@ -2821,7 +3532,7 @@ elf_i386_relocate_section (bfd *output_bfd, break; } } - bfd_put_32 (output_bfd, -tpoff (info, relocation), + bfd_put_32 (output_bfd, -elf_i386_tpoff (info, relocation), contents + rel->r_offset); continue; } @@ -2838,11 +3549,8 @@ elf_i386_relocate_section (bfd *output_bfd, subl $foo, %reg2 movl $foo, %reg2 (6 byte form) addl $foo, %reg2. */ - BFD_ASSERT (rel->r_offset >= 2); type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); val = bfd_get_8 (input_bfd, contents + rel->r_offset - 1); - BFD_ASSERT (rel->r_offset + 4 <= input_section->size); - BFD_ASSERT ((val & 0xc0) == 0x80 && (val & 7) != 4); if (type == 0x8b) { /* movl */ @@ -2870,16 +3578,16 @@ elf_i386_relocate_section (bfd *output_bfd, else BFD_FAIL (); if (ELF32_R_TYPE (rel->r_info) == R_386_TLS_GOTIE) - bfd_put_32 (output_bfd, -tpoff (info, relocation), + bfd_put_32 (output_bfd, -elf_i386_tpoff (info, relocation), contents + rel->r_offset); else - bfd_put_32 (output_bfd, tpoff (info, relocation), + bfd_put_32 (output_bfd, elf_i386_tpoff (info, relocation), contents + rel->r_offset); continue; } } - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) abort (); if (h != NULL) @@ -2905,7 +3613,7 @@ elf_i386_relocate_section (bfd *output_bfd, int dr_type, indx; asection *sreloc; - if (htab->srelgot == NULL) + if (htab->elf.srelgot == NULL) abort (); indx = h && h->dynindx != -1 ? h->dynindx : 0; @@ -2914,12 +3622,12 @@ elf_i386_relocate_section (bfd *output_bfd, { outrel.r_info = ELF32_R_INFO (indx, R_386_TLS_DESC); BFD_ASSERT (htab->sgotplt_jump_table_size + offplt + 8 - <= htab->sgotplt->size); - outrel.r_offset = (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + <= htab->elf.sgotplt->size); + outrel.r_offset = (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + offplt + htab->sgotplt_jump_table_size); - sreloc = htab->srelplt; + sreloc = htab->elf.srelplt; loc = sreloc->contents; loc += (htab->next_tls_desc_index++ * sizeof (Elf32_External_Rel)); @@ -2930,22 +3638,22 @@ elf_i386_relocate_section (bfd *output_bfd, { BFD_ASSERT (! unresolved_reloc); bfd_put_32 (output_bfd, - relocation - dtpoff_base (info), - htab->sgotplt->contents + offplt + relocation - elf_i386_dtpoff_base (info), + htab->elf.sgotplt->contents + offplt + htab->sgotplt_jump_table_size + 4); } else { bfd_put_32 (output_bfd, 0, - htab->sgotplt->contents + offplt + htab->elf.sgotplt->contents + offplt + htab->sgotplt_jump_table_size + 4); } } - sreloc = htab->srelgot; + sreloc = htab->elf.srelgot; - outrel.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + off); + outrel.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); if (GOT_TLS_GD_P (tls_type)) dr_type = R_386_TLS_DTPMOD32; @@ -2957,14 +3665,16 @@ elf_i386_relocate_section (bfd *output_bfd, dr_type = R_386_TLS_TPOFF32; if (dr_type == R_386_TLS_TPOFF && indx == 0) - bfd_put_32 (output_bfd, relocation - dtpoff_base (info), - htab->sgot->contents + off); + bfd_put_32 (output_bfd, + relocation - elf_i386_dtpoff_base (info), + htab->elf.sgot->contents + off); else if (dr_type == R_386_TLS_TPOFF32 && indx == 0) - bfd_put_32 (output_bfd, dtpoff_base (info) - relocation, - htab->sgot->contents + off); + bfd_put_32 (output_bfd, + elf_i386_dtpoff_base (info) - relocation, + htab->elf.sgot->contents + off); else if (dr_type != R_386_TLS_DESC) bfd_put_32 (output_bfd, 0, - htab->sgot->contents + off); + htab->elf.sgot->contents + off); outrel.r_info = ELF32_R_INFO (indx, dr_type); loc = sreloc->contents; @@ -2979,13 +3689,13 @@ elf_i386_relocate_section (bfd *output_bfd, { BFD_ASSERT (! unresolved_reloc); bfd_put_32 (output_bfd, - relocation - dtpoff_base (info), - htab->sgot->contents + off + 4); + relocation - elf_i386_dtpoff_base (info), + htab->elf.sgot->contents + off + 4); } else { bfd_put_32 (output_bfd, 0, - htab->sgot->contents + off + 4); + htab->elf.sgot->contents + off + 4); outrel.r_info = ELF32_R_INFO (indx, R_386_TLS_DTPOFF32); outrel.r_offset += 4; @@ -2999,8 +3709,10 @@ elf_i386_relocate_section (bfd *output_bfd, else if (tls_type == GOT_TLS_IE_BOTH) { bfd_put_32 (output_bfd, - indx == 0 ? relocation - dtpoff_base (info) : 0, - htab->sgot->contents + off + 4); + (indx == 0 + ? relocation - elf_i386_dtpoff_base (info) + : 0), + htab->elf.sgot->contents + off + 4); outrel.r_info = ELF32_R_INFO (indx, R_386_TLS_TPOFF); outrel.r_offset += 4; sreloc->reloc_count++; @@ -3026,10 +3738,10 @@ elf_i386_relocate_section (bfd *output_bfd, } else if (r_type == ELF32_R_TYPE (rel->r_info)) { - bfd_vma g_o_t = htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset; - relocation = htab->sgot->output_section->vma - + htab->sgot->output_offset + off - g_o_t; + bfd_vma g_o_t = htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset; + relocation = htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off - g_o_t; if ((r_type == R_386_TLS_IE || r_type == R_386_TLS_GOTIE) && tls_type == GOT_TLS_IE_BOTH) relocation += 4; @@ -3043,38 +3755,21 @@ elf_i386_relocate_section (bfd *output_bfd, bfd_vma roff; /* GD->IE transition. */ - BFD_ASSERT (rel->r_offset >= 2); type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); - BFD_ASSERT (type == 0x8d || type == 0x04); - BFD_ASSERT (rel->r_offset + 9 <= input_section->size); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset + 4) - == 0xe8); - BFD_ASSERT (rel + 1 < relend); - BFD_ASSERT (ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32); - roff = rel->r_offset - 3; val = bfd_get_8 (input_bfd, contents + rel->r_offset - 1); if (type == 0x04) { /* leal foo(,%reg,1), %eax; call ___tls_get_addr Change it into: movl %gs:0, %eax; subl $foo@gottpoff(%reg), %eax. */ - BFD_ASSERT (rel->r_offset >= 3); - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset - 3) - == 0x8d); - BFD_ASSERT ((val & 0xc7) == 0x05 && val != (4 << 3)); val >>= 3; + roff = rel->r_offset - 3; } else { /* leal foo(%reg), %eax; call ___tls_get_addr; nop Change it into: movl %gs:0, %eax; subl $foo@gottpoff(%reg), %eax. */ - BFD_ASSERT (rel->r_offset + 10 <= input_section->size); - BFD_ASSERT ((val & 0xf8) == 0x80 && (val & 7) != 4); - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset + 9) - == 0x90); roff = rel->r_offset - 2; } memcpy (contents + roff, @@ -3088,10 +3783,10 @@ elf_i386_relocate_section (bfd *output_bfd, 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 - - htab->sgotplt->output_section->vma - - htab->sgotplt->output_offset, + htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off + - htab->elf.sgotplt->output_section->vma + - htab->elf.sgotplt->output_offset, contents + roff + 8); /* Skip R_386_PLT32. */ rel++; @@ -3104,25 +3799,18 @@ elf_i386_relocate_section (bfd *output_bfd, leal x@tlsdesc(%ebx), %eax Change it to: - movl x@gotntpoff(%ebx), %eax # before nop; nop + movl x@gotntpoff(%ebx), %eax # before xchg %ax,%ax or: movl x@gottpoff(%ebx), %eax # before negl %eax Registers other than %eax may be set up here. */ - unsigned int val, type; bfd_vma roff; /* First, make sure it's a leal adding ebx to a 32-bit offset into any register, although it's probably almost always going to be eax. */ roff = rel->r_offset; - BFD_ASSERT (roff >= 2); - type = bfd_get_8 (input_bfd, contents + roff - 2); - BFD_ASSERT (type == 0x8d); - val = bfd_get_8 (input_bfd, contents + roff - 1); - BFD_ASSERT ((val & 0xc7) == 0x83); - BFD_ASSERT (roff + 4 <= input_section->size); /* Now modify the instruction as appropriate. */ /* To turn a leal into a movl in the form we use it, it @@ -3136,10 +3824,10 @@ elf_i386_relocate_section (bfd *output_bfd, off += 4; bfd_put_32 (output_bfd, - htab->sgot->output_section->vma - + htab->sgot->output_offset + off - - htab->sgotplt->output_section->vma - - htab->sgotplt->output_offset, + htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off + - htab->elf.sgotplt->output_section->vma + - htab->elf.sgotplt->output_offset, contents + roff); continue; } @@ -3150,22 +3838,15 @@ elf_i386_relocate_section (bfd *output_bfd, call *(%eax) Change it to: - nop; nop + xchg %ax,%ax or negl %eax depending on how we transformed the TLS_GOTDESC above. */ - unsigned int val, type; bfd_vma roff; - /* First, make sure it's a call *(%eax). */ roff = rel->r_offset; - BFD_ASSERT (roff + 2 <= input_section->size); - type = bfd_get_8 (input_bfd, contents + roff); - BFD_ASSERT (type == 0xff); - val = bfd_get_8 (input_bfd, contents + roff + 1); - BFD_ASSERT (val == 0x10); /* Now modify the instruction as appropriate. */ if (tls_type != GOT_TLS_IE_NEG) @@ -3188,33 +3869,28 @@ elf_i386_relocate_section (bfd *output_bfd, break; case R_386_TLS_LDM: - if (! info->shared) - { - unsigned int val; + if (! elf_i386_tls_transition (info, input_bfd, + input_section, contents, + symtab_hdr, sym_hashes, + &r_type, GOT_UNKNOWN, rel, + relend, h, r_symndx)) + return FALSE; + if (r_type != R_386_TLS_LDM) + { /* LD->LE transition: - Ensure it is: leal foo(%reg), %eax; call ___tls_get_addr. We change it into: movl %gs:0, %eax; nop; leal 0(%esi,1), %esi. */ - BFD_ASSERT (rel->r_offset >= 2); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset - 2) - == 0x8d); - val = bfd_get_8 (input_bfd, contents + rel->r_offset - 1); - BFD_ASSERT ((val & 0xf8) == 0x80 && (val & 7) != 4); - BFD_ASSERT (rel->r_offset + 9 <= input_section->size); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset + 4) - == 0xe8); - BFD_ASSERT (rel + 1 < relend); - BFD_ASSERT (ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32); + BFD_ASSERT (r_type == R_386_TLS_LE_32); memcpy (contents + rel->r_offset - 2, "\x65\xa1\0\0\0\0\x90\x8d\x74\x26", 11); - /* Skip R_386_PLT32. */ + /* Skip R_386_PC32/R_386_PLT32. */ rel++; continue; } - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) abort (); off = htab->tls_ldm_got.offset; @@ -3225,40 +3901,40 @@ elf_i386_relocate_section (bfd *output_bfd, Elf_Internal_Rela outrel; bfd_byte *loc; - if (htab->srelgot == NULL) + if (htab->elf.srelgot == NULL) abort (); - outrel.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + off); + outrel.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); bfd_put_32 (output_bfd, 0, - htab->sgot->contents + off); + htab->elf.sgot->contents + off); bfd_put_32 (output_bfd, 0, - htab->sgot->contents + off + 4); + htab->elf.sgot->contents + off + 4); outrel.r_info = ELF32_R_INFO (0, R_386_TLS_DTPMOD32); - loc = htab->srelgot->contents; - loc += htab->srelgot->reloc_count++ * sizeof (Elf32_External_Rel); + loc = htab->elf.srelgot->contents; + loc += htab->elf.srelgot->reloc_count++ * sizeof (Elf32_External_Rel); bfd_elf32_swap_reloc_out (output_bfd, &outrel, loc); htab->tls_ldm_got.offset |= 1; } - relocation = htab->sgot->output_section->vma - + htab->sgot->output_offset + off - - htab->sgotplt->output_section->vma - - htab->sgotplt->output_offset; + relocation = htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off + - htab->elf.sgotplt->output_section->vma + - htab->elf.sgotplt->output_offset; unresolved_reloc = FALSE; break; case R_386_TLS_LDO_32: if (info->shared || (input_section->flags & SEC_CODE) == 0) - relocation -= dtpoff_base (info); + relocation -= elf_i386_dtpoff_base (info); else /* When converting LDO to LE, we must negate. */ - relocation = -tpoff (info, relocation); + relocation = -elf_i386_tpoff (info, relocation); break; case R_386_TLS_LE_32: case R_386_TLS_LE: - if (info->shared) + if (!info->executable) { Elf_Internal_Rela outrel; asection *sreloc; @@ -3285,14 +3961,14 @@ elf_i386_relocate_section (bfd *output_bfd, if (indx) continue; else if (r_type == R_386_TLS_LE_32) - relocation = dtpoff_base (info) - relocation; + relocation = elf_i386_dtpoff_base (info) - relocation; else - relocation -= dtpoff_base (info); + relocation -= elf_i386_dtpoff_base (info); } else if (r_type == R_386_TLS_LE_32) - relocation = tpoff (info, relocation); + relocation = elf_i386_tpoff (info, relocation); else - relocation = -tpoff (info, relocation); + relocation = -elf_i386_tpoff (info, relocation); break; default: @@ -3316,6 +3992,7 @@ elf_i386_relocate_section (bfd *output_bfd, return FALSE; } +do_relocation: r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, 0); @@ -3378,37 +4055,67 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, bfd_vma got_offset; Elf_Internal_Rela rel; bfd_byte *loc; + asection *plt, *gotplt, *relplt; + + /* When building a static executable, use .iplt, .igot.plt and + .rel.iplt sections for STT_GNU_IFUNC symbols. */ + if (htab->elf.splt != NULL) + { + plt = htab->elf.splt; + gotplt = htab->elf.sgotplt; + relplt = htab->elf.srelplt; + } + else + { + plt = htab->elf.iplt; + gotplt = htab->elf.igotplt; + relplt = htab->elf.irelplt; + } /* This symbol has an entry in the procedure linkage table. Set it up. */ - if (h->dynindx == -1 - || htab->splt == NULL - || htab->sgotplt == NULL - || htab->srelplt == NULL) + if ((h->dynindx == -1 + && !((h->forced_local || info->executable) + && h->def_regular + && h->type == STT_GNU_IFUNC)) + || plt == NULL + || gotplt == NULL + || relplt == NULL) abort (); /* Get the index in the procedure linkage table which 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 / PLT_ENTRY_SIZE - 1; + first entry in the procedure linkage table is reserved. - /* Get the offset into the .got table of the entry that + 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; + The first three are reserved. + + For static executables, we don't reserve anything. */ + + if (plt == htab->elf.splt) + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; + got_offset = (plt_index + 3) * 4; + } + else + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE; + got_offset = plt_index * 4; + } /* Fill in the entry in the procedure linkage table. */ if (! info->shared) { - memcpy (htab->splt->contents + h->plt.offset, elf_i386_plt_entry, + memcpy (plt->contents + h->plt.offset, elf_i386_plt_entry, PLT_ENTRY_SIZE); bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (gotplt->output_section->vma + + gotplt->output_offset + got_offset), - htab->splt->contents + h->plt.offset + 2); + plt->contents + h->plt.offset + 2); if (htab->is_vxworks) { @@ -3430,16 +4137,16 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, loc = (htab->srelplt2->contents + reloc_index * sizeof (Elf32_External_Rel)); - rel.r_offset = (htab->splt->output_section->vma - + htab->splt->output_offset + rel.r_offset = (htab->elf.splt->output_section->vma + + htab->elf.splt->output_offset + h->plt.offset + 2), rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32); bfd_elf32_swap_reloc_out (output_bfd, &rel, loc); /* Create the R_386_32 relocation referencing the beginning of the PLT for this GOT entry. */ - rel.r_offset = (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + rel.r_offset = (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + got_offset); rel.r_info = ELF32_R_INFO (htab->elf.hplt->indx, R_386_32); bfd_elf32_swap_reloc_out (output_bfd, &rel, @@ -3448,31 +4155,52 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, } else { - memcpy (htab->splt->contents + h->plt.offset, elf_i386_pic_plt_entry, + memcpy (plt->contents + h->plt.offset, elf_i386_pic_plt_entry, PLT_ENTRY_SIZE); bfd_put_32 (output_bfd, got_offset, - htab->splt->contents + h->plt.offset + 2); + plt->contents + h->plt.offset + 2); } - bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rel), - htab->splt->contents + h->plt.offset + 7); - bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE), - htab->splt->contents + h->plt.offset + 12); + /* Don't fill PLT entry for static executables. */ + if (plt == htab->elf.splt) + { + bfd_put_32 (output_bfd, plt_index * sizeof (Elf32_External_Rel), + plt->contents + h->plt.offset + 7); + bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE), + plt->contents + h->plt.offset + 12); + } /* Fill in the entry in the global offset table. */ bfd_put_32 (output_bfd, - (htab->splt->output_section->vma - + htab->splt->output_offset + (plt->output_section->vma + + plt->output_offset + h->plt.offset + 6), - htab->sgotplt->contents + got_offset); + gotplt->contents + got_offset); /* Fill in the entry in the .rel.plt section. */ - rel.r_offset = (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + rel.r_offset = (gotplt->output_section->vma + + gotplt->output_offset + got_offset); - rel.r_info = ELF32_R_INFO (h->dynindx, R_386_JUMP_SLOT); - loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rel); + if (h->dynindx == -1 + || ((info->executable + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + && h->def_regular + && h->type == STT_GNU_IFUNC)) + { + /* If an STT_GNU_IFUNC symbol is locally defined, generate + R_386_IRELATIVE instead of R_386_JUMP_SLOT. Store addend + in the .got.plt section. */ + bfd_put_32 (output_bfd, + (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset), + gotplt->contents + got_offset); + rel.r_info = ELF32_R_INFO (0, R_386_IRELATIVE); + } + else + rel.r_info = ELF32_R_INFO (h->dynindx, R_386_JUMP_SLOT); + loc = relplt->contents + plt_index * sizeof (Elf32_External_Rel); bfd_elf32_swap_reloc_out (output_bfd, &rel, loc); if (!h->def_regular) @@ -3501,11 +4229,11 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, /* This symbol has an entry in the global offset table. Set it up. */ - if (htab->sgot == NULL || htab->srelgot == NULL) + if (htab->elf.sgot == NULL || htab->elf.srelgot == NULL) abort (); - rel.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + rel.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + (h->got.offset & ~(bfd_vma) 1)); /* If this is a static link, or it is a -Bsymbolic link and the @@ -3513,8 +4241,32 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, of a version file, we just want to emit a RELATIVE reloc. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared - && SYMBOL_REFERENCES_LOCAL (info, h)) + if (h->def_regular + && h->type == STT_GNU_IFUNC) + { + if (info->shared) + { + /* Generate R_386_GLOB_DAT. */ + goto do_glob_dat; + } + else + { + if (!h->pointer_equality_needed) + abort (); + + /* For non-shared object, we can't use .got.plt, which + contains the real function addres if we need pointer + equality. We load the GOT entry with the PLT entry. */ + asection *plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt; + bfd_put_32 (output_bfd, + (plt->output_section->vma + + plt->output_offset + h->plt.offset), + htab->elf.sgot->contents + h->got.offset); + return TRUE; + } + } + else if (info->shared + && SYMBOL_REFERENCES_LOCAL (info, h)) { BFD_ASSERT((h->got.offset & 1) != 0); rel.r_info = ELF32_R_INFO (0, R_386_RELATIVE); @@ -3522,13 +4274,14 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, else { BFD_ASSERT((h->got.offset & 1) == 0); +do_glob_dat: bfd_put_32 (output_bfd, (bfd_vma) 0, - htab->sgot->contents + h->got.offset); + htab->elf.sgot->contents + h->got.offset); rel.r_info = ELF32_R_INFO (h->dynindx, R_386_GLOB_DAT); } - loc = htab->srelgot->contents; - loc += htab->srelgot->reloc_count++ * sizeof (Elf32_External_Rel); + loc = htab->elf.srelgot->contents; + loc += htab->elf.srelgot->reloc_count++ * sizeof (Elf32_External_Rel); bfd_elf32_swap_reloc_out (output_bfd, &rel, loc); } @@ -3554,16 +4307,34 @@ elf_i386_finish_dynamic_symbol (bfd *output_bfd, bfd_elf32_swap_reloc_out (output_bfd, &rel, loc); } - /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. + /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. SYM may + be NULL for local symbols. + On VxWorks, the _GLOBAL_OFFSET_TABLE_ symbol is not absolute: it is relative to the ".got" section. */ - if (strcmp (h->root.root.string, "_DYNAMIC") == 0 - || (!htab->is_vxworks && h == htab->elf.hgot)) + if (sym != NULL + && (strcmp (h->root.root.string, "_DYNAMIC") == 0 + || (!htab->is_vxworks && h == htab->elf.hgot))) sym->st_shndx = SHN_ABS; return TRUE; } +/* Finish up local dynamic symbol handling. We set the contents of + various dynamic sections here. */ + +static bfd_boolean +elf_i386_finish_local_dynamic_symbol (void **slot, void *inf) +{ + struct elf_link_hash_entry *h + = (struct elf_link_hash_entry *) *slot; + struct bfd_link_info *info + = (struct bfd_link_info *) inf; + + return elf_i386_finish_dynamic_symbol (info->output_bfd, info, + h, NULL); +} + /* Used to decide how to sort relocs in an optimal manner for the dynamic linker, before writing them out. */ @@ -3601,7 +4372,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, { Elf32_External_Dyn *dyncon, *dynconend; - if (sdyn == NULL || htab->sgot == NULL) + if (sdyn == NULL || htab->elf.sgot == NULL) abort (); dyncon = (Elf32_External_Dyn *) sdyn->contents; @@ -3616,20 +4387,23 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, switch (dyn.d_tag) { default: + if (htab->is_vxworks + && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) + break; continue; case DT_PLTGOT: - s = htab->sgotplt; + s = htab->elf.sgotplt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_JMPREL: - s = htab->srelplt; + s = htab->elf.srelplt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: - s = htab->srelplt; + s = htab->elf.srelplt; dyn.d_un.d_val = s->size; break; @@ -3640,7 +4414,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, what Solaris does. However, UnixWare can not handle that case. Therefore, we override the DT_RELSZ entry here to make it not include the JMPREL relocs. */ - s = htab->srelplt; + s = htab->elf.srelplt; if (s == NULL) continue; dyn.d_un.d_val -= s->size; @@ -3650,7 +4424,7 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, /* We may not be using the standard ELF linker script. If .rel.plt is the first .rel section, we adjust DT_REL to not include it. */ - s = htab->srelplt; + s = htab->elf.srelplt; if (s == NULL) continue; if (dyn.d_un.d_ptr != s->output_section->vma + s->output_offset) @@ -3663,33 +4437,33 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, } /* Fill in the first entry in the procedure linkage table. */ - if (htab->splt && htab->splt->size > 0) + if (htab->elf.splt && htab->elf.splt->size > 0) { if (info->shared) { - memcpy (htab->splt->contents, elf_i386_pic_plt0_entry, + memcpy (htab->elf.splt->contents, elf_i386_pic_plt0_entry, sizeof (elf_i386_pic_plt0_entry)); - memset (htab->splt->contents + sizeof (elf_i386_pic_plt0_entry), + memset (htab->elf.splt->contents + sizeof (elf_i386_pic_plt0_entry), htab->plt0_pad_byte, PLT_ENTRY_SIZE - sizeof (elf_i386_pic_plt0_entry)); } else { - memcpy (htab->splt->contents, elf_i386_plt0_entry, + memcpy (htab->elf.splt->contents, elf_i386_plt0_entry, sizeof(elf_i386_plt0_entry)); - memset (htab->splt->contents + sizeof (elf_i386_plt0_entry), + memset (htab->elf.splt->contents + sizeof (elf_i386_plt0_entry), htab->plt0_pad_byte, PLT_ENTRY_SIZE - sizeof (elf_i386_plt0_entry)); bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + 4), - htab->splt->contents + 2); + htab->elf.splt->contents + 2); bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + 8), - htab->splt->contents + 8); + htab->elf.splt->contents + 8); if (htab->is_vxworks) { @@ -3698,15 +4472,15 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, /* Generate a relocation for _GLOBAL_OFFSET_TABLE_ + 4. On IA32 we use REL relocations so the addend goes in the PLT directly. */ - rel.r_offset = (htab->splt->output_section->vma - + htab->splt->output_offset + rel.r_offset = (htab->elf.splt->output_section->vma + + htab->elf.splt->output_offset + 2); rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32); bfd_elf32_swap_reloc_out (output_bfd, &rel, htab->srelplt2->contents); /* Generate a relocation for _GLOBAL_OFFSET_TABLE_ + 8. */ - rel.r_offset = (htab->splt->output_section->vma - + htab->splt->output_offset + rel.r_offset = (htab->elf.splt->output_section->vma + + htab->elf.splt->output_offset + 8); rel.r_info = ELF32_R_INFO (htab->elf.hgot->indx, R_386_32); bfd_elf32_swap_reloc_out (output_bfd, &rel, @@ -3717,13 +4491,13 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, /* UnixWare sets the entsize of .plt to 4, although that doesn't really seem like the right value. */ - elf_section_data (htab->splt->output_section) + elf_section_data (htab->elf.splt->output_section) ->this_hdr.sh_entsize = 4; /* Correct the .rel.plt.unloaded relocations. */ if (htab->is_vxworks && !info->shared) { - int num_plts = (htab->splt->size / PLT_ENTRY_SIZE) - 1; + int num_plts = (htab->elf.splt->size / PLT_ENTRY_SIZE) - 1; unsigned char *p; p = htab->srelplt2->contents; @@ -3749,24 +4523,29 @@ elf_i386_finish_dynamic_sections (bfd *output_bfd, } } - if (htab->sgotplt) + if (htab->elf.sgotplt) { /* Fill in the first three entries in the global offset table. */ - if (htab->sgotplt->size > 0) + if (htab->elf.sgotplt->size > 0) { bfd_put_32 (output_bfd, (sdyn == NULL ? 0 : sdyn->output_section->vma + sdyn->output_offset), - htab->sgotplt->contents); - bfd_put_32 (output_bfd, 0, htab->sgotplt->contents + 4); - bfd_put_32 (output_bfd, 0, htab->sgotplt->contents + 8); + htab->elf.sgotplt->contents); + bfd_put_32 (output_bfd, 0, htab->elf.sgotplt->contents + 4); + bfd_put_32 (output_bfd, 0, htab->elf.sgotplt->contents + 8); } - elf_section_data (htab->sgotplt->output_section)->this_hdr.sh_entsize = 4; + elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize = 4; } - if (htab->sgot && htab->sgot->size > 0) - elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize = 4; + if (htab->elf.sgot && htab->elf.sgot->size > 0) + elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = 4; + + /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */ + htab_traverse (htab->loc_hash_table, + elf_i386_finish_local_dynamic_symbol, + info); return TRUE; } @@ -3794,6 +4573,24 @@ elf_i386_hash_symbol (struct elf_link_hash_entry *h) return _bfd_elf_hash_symbol (h); } +/* Hook called by the linker routine which adds symbols from an object + file. */ + +static bfd_boolean +elf_i386_add_symbol_hook (bfd * abfd ATTRIBUTE_UNUSED, + struct bfd_link_info * info ATTRIBUTE_UNUSED, + Elf_Internal_Sym * sym, + const char ** namep ATTRIBUTE_UNUSED, + flagword * flagsp ATTRIBUTE_UNUSED, + asection ** secp ATTRIBUTE_UNUSED, + bfd_vma * valp ATTRIBUTE_UNUSED) +{ + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + elf_tdata (info->output_bfd)->has_ifunc_symbols = TRUE; + + return TRUE; +} + #define TARGET_LITTLE_SYM bfd_elf32_i386_vec #define TARGET_LITTLE_NAME "elf32-i386" #define ELF_ARCH bfd_arch_i386 @@ -3815,10 +4612,12 @@ elf_i386_hash_symbol (struct elf_link_hash_entry *h) #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_link_hash_table_free elf_i386_link_hash_table_free #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 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_relocs_compatible _bfd_elf_relocs_compatible #define elf_backend_check_relocs elf_i386_check_relocs #define elf_backend_copy_indirect_symbol elf_i386_copy_indirect_symbol #define elf_backend_create_dynamic_sections elf_i386_create_dynamic_sections @@ -3837,6 +4636,9 @@ elf_i386_hash_symbol (struct elf_link_hash_entry *h) ((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 +#define elf_backend_add_symbol_hook elf_i386_add_symbol_hook +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers _bfd_elf_set_osabi #include "elf32-target.h" @@ -3854,15 +4656,10 @@ elf_i386_hash_symbol (struct elf_link_hash_entry *h) executables and (for simplicity) also all other object files. */ static void -elf_i386_post_process_headers (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) +elf_i386_fbsd_post_process_headers (bfd *abfd, struct bfd_link_info *info) { - Elf_Internal_Ehdr *i_ehdrp; - - i_ehdrp = elf_elfheader (abfd); + _bfd_elf_set_osabi (abfd, info); - /* Put an ABI label supported by FreeBSD >= 4.1. */ - 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); @@ -3870,10 +4667,12 @@ elf_i386_post_process_headers (bfd *abfd, } #undef elf_backend_post_process_headers -#define elf_backend_post_process_headers elf_i386_post_process_headers +#define elf_backend_post_process_headers elf_i386_fbsd_post_process_headers #undef elf32_bed #define elf32_bed elf32_i386_fbsd_bed +#undef elf_backend_add_symbol_hook + #include "elf32-target.h" /* VxWorks support. */ @@ -3904,7 +4703,8 @@ elf_i386_vxworks_link_hash_table_create (bfd *abfd) } -#undef elf_backend_post_process_headers +#undef elf_backend_relocs_compatible +#undef elf_backend_post_process_headers #undef bfd_elf32_bfd_link_hash_table_create #define bfd_elf32_bfd_link_hash_table_create \ elf_i386_vxworks_link_hash_table_create diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c index 566bebd..4dcc866 100644 --- a/bfd/elf32-iq2000.c +++ b/bfd/elf32-iq2000.c @@ -1,5 +1,5 @@ /* IQ2000-specific support for 32-bit ELF. - Copyright (C) 2003, 2004, 2005, 2006, 2007 + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -306,6 +306,34 @@ iq2000_elf_relocate_hi16 (bfd *input_bfd, return bfd_reloc_ok; } +static bfd_reloc_status_type +iq2000_elf_relocate_offset16 (bfd *input_bfd, + Elf_Internal_Rela *rel, + bfd_byte *contents, + bfd_vma value, + bfd_vma location) +{ + bfd_vma insn; + bfd_vma jtarget; + + insn = bfd_get_32 (input_bfd, contents + rel->r_offset); + + value += rel->r_addend; + + if (value & 3) + return bfd_reloc_dangerous; + + jtarget = (value & 0x3fffc) | (location & 0xf0000000L); + + if (jtarget != value) + return bfd_reloc_overflow; + + insn = (insn & ~0xFFFF) | ((value >> 2) & 0xFFFF); + + bfd_put_32 (input_bfd, insn, contents + rel->r_offset); + return bfd_reloc_ok; +} + /* Map BFD reloc types to IQ2000 ELF reloc types. */ static reloc_howto_type * @@ -424,7 +452,7 @@ iq2000_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; bfd_boolean changed = FALSE; @@ -434,9 +462,6 @@ iq2000_elf_check_relocs (bfd *abfd, 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++) @@ -467,7 +492,9 @@ iq2000_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_IQ2000_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -573,15 +600,25 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, if (r_symndx < symtab_hdr->sh_info) { + asection *osec; + sym = local_syms + r_symndx; - sec = local_sections [r_symndx]; + osec = sec = local_sections [r_symndx]; + if ((sec->flags & SEC_MERGE) + && ELF_ST_TYPE (sym->st_info) == STT_SECTION) + /* This relocation is relative to a section symbol that is + going to be merged. Change it so that it is relative + to the merged section symbol. */ + rel->r_addend = _bfd_elf_rel_local_sym (output_bfd, sym, &sec, + rel->r_addend); + relocation = (sec->output_section->vma + sec->output_offset + sym->st_value); 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; + name = (name == NULL) ? bfd_section_name (input_bfd, osec) : name; } else { @@ -616,6 +653,13 @@ iq2000_elf_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, r = iq2000_elf_relocate_hi16 (input_bfd, rel, contents, relocation); break; + case R_IQ2000_OFFSET_16: + r = iq2000_elf_relocate_offset16 (input_bfd, rel, contents, relocation, + input_section->output_section->vma + + input_section->output_offset + + rel->r_offset); + break; + case R_IQ2000_PC16: rel->r_addend -= 4; /* Fall through. */ @@ -842,7 +886,7 @@ iq2000_elf_print_private_bfd_data (bfd *abfd, void * ptr) _bfd_elf_print_private_bfd_data (abfd, ptr); flags = elf_elfheader (abfd)->e_flags; - fprintf (file, _("private flags = 0x%lx:"), (long)flags); + fprintf (file, _("private flags = 0x%lx:"), (unsigned long) flags); switch (flags & EF_IQ2000_CPU_MASK) { diff --git a/bfd/elf32-lm32.c b/bfd/elf32-lm32.c new file mode 100644 index 0000000..7053568 --- /dev/null +++ b/bfd/elf32-lm32.c @@ -0,0 +1,2899 @@ +/* Lattice Mico32-specific support for 32-bit ELF + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Jon Beniston + + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "bfd.h" +#include "sysdep.h" +#include "libbfd.h" +#include "elf-bfd.h" +#include "elf/lm32.h" + +#define DEFAULT_STACK_SIZE 0x20000 + +#define PLT_ENTRY_SIZE 20 + +#define PLT0_ENTRY_WORD0 0 +#define PLT0_ENTRY_WORD1 0 +#define PLT0_ENTRY_WORD2 0 +#define PLT0_ENTRY_WORD3 0 +#define PLT0_ENTRY_WORD4 0 + +#define PLT0_PIC_ENTRY_WORD0 0 +#define PLT0_PIC_ENTRY_WORD1 0 +#define PLT0_PIC_ENTRY_WORD2 0 +#define PLT0_PIC_ENTRY_WORD3 0 +#define PLT0_PIC_ENTRY_WORD4 0 + +#define ELF_DYNAMIC_INTERPRETER "/usr/lib/libc.so.1" + +extern const bfd_target bfd_elf32_lm32fdpic_vec; + +#define IS_FDPIC(bfd) ((bfd)->xvec == &bfd_elf32_lm32fdpic_vec) + +static bfd_reloc_status_type lm32_elf_gprel_reloc + (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); + +/* The linker needs to keep track of the number of relocs that it + decides to copy as dynamic relocs in check_relocs for each symbol. + This is so that it can later discard them if they are found to be + unnecessary. We store the information in a field extending the + regular ELF linker hash table. */ + +struct elf_lm32_dyn_relocs +{ + struct elf_lm32_dyn_relocs *next; + + /* The input section of the reloc. */ + asection *sec; + + /* Total number of relocs copied for the input section. */ + bfd_size_type count; + + /* Number of pc-relative relocs copied for the input section. */ + bfd_size_type pc_count; +}; + +/* lm32 ELF linker hash entry. */ + +struct elf_lm32_link_hash_entry +{ + struct elf_link_hash_entry root; + + /* Track dynamic relocs copied for this symbol. */ + struct elf_lm32_dyn_relocs *dyn_relocs; +}; + +/* lm32 ELF linker hash table. */ + +struct elf_lm32_link_hash_table +{ + struct elf_link_hash_table root; + + /* Short-cuts to get to dynamic linker sections. */ + asection *sgot; + asection *sgotplt; + asection *srelgot; + asection *sfixup32; + asection *splt; + asection *srelplt; + asection *sdynbss; + asection *srelbss; + + int relocs32; +}; + +/* Get the lm32 ELF linker hash table from a link_info structure. */ + +#define lm32_elf_hash_table(p) \ + ((struct elf_lm32_link_hash_table *) ((p)->hash)) + +#define lm32fdpic_got_section(info) \ + (lm32_elf_hash_table (info)->sgot) +#define lm32fdpic_gotrel_section(info) \ + (lm32_elf_hash_table (info)->srelgot) +#define lm32fdpic_fixup32_section(info) \ + (lm32_elf_hash_table (info)->sfixup32) + +struct weak_symbol_list +{ + const char *name; + struct weak_symbol_list *next; +}; + +/* Create an entry in an lm32 ELF linker hash table. */ + +static struct bfd_hash_entry * +lm32_elf_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) +{ + struct elf_lm32_link_hash_entry *ret = + (struct elf_lm32_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 elf_lm32_link_hash_entry)); + if (ret == NULL) + return NULL; + + /* Call the allocation method of the superclass. */ + ret = ((struct elf_lm32_link_hash_entry *) + _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret, + table, string)); + if (ret != NULL) + { + struct elf_lm32_link_hash_entry *eh; + + eh = (struct elf_lm32_link_hash_entry *) ret; + eh->dyn_relocs = NULL; + } + + return (struct bfd_hash_entry *) ret; +} + +/* Create an lm32 ELF linker hash table. */ + +static struct bfd_link_hash_table * +lm32_elf_link_hash_table_create (bfd *abfd) +{ + struct elf_lm32_link_hash_table *ret; + bfd_size_type amt = sizeof (struct elf_lm32_link_hash_table); + + ret = bfd_malloc (amt); + if (ret == NULL) + return NULL; + + if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, + lm32_elf_link_hash_newfunc, + sizeof (struct elf_lm32_link_hash_entry))) + { + free (ret); + return NULL; + } + + ret->sgot = NULL; + ret->sgotplt = NULL; + ret->srelgot = NULL; + ret->sfixup32 = NULL; + ret->splt = NULL; + ret->srelplt = NULL; + ret->sdynbss = NULL; + ret->srelbss = NULL; + ret->relocs32 = 0; + + return &ret->root.root; +} + +/* Add a fixup to the ROFIXUP section. */ + +static bfd_vma +_lm32fdpic_add_rofixup (bfd *output_bfd, asection *rofixup, bfd_vma relocation) +{ + bfd_vma fixup_offset; + + if (rofixup->flags & SEC_EXCLUDE) + return -1; + + fixup_offset = rofixup->reloc_count * 4; + if (rofixup->contents) + { + BFD_ASSERT (fixup_offset < rofixup->size); + if (fixup_offset < rofixup->size) + bfd_put_32 (output_bfd, relocation, rofixup->contents + fixup_offset); + } + rofixup->reloc_count++; + + return fixup_offset; +} + +/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up + shortcuts to them in our hash table. */ + +static bfd_boolean +create_got_section (bfd *dynobj, struct bfd_link_info *info) +{ + struct elf_lm32_link_hash_table *htab; + asection *s; + + /* This function may be called more than once. */ + s = bfd_get_section_by_name (dynobj, ".got"); + if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0) + return TRUE; + + if (! _bfd_elf_create_got_section (dynobj, info)) + return FALSE; + + htab = lm32_elf_hash_table (info); + htab->sgot = bfd_get_section_by_name (dynobj, ".got"); + htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot) + abort (); + + return TRUE; +} + +/* Create .rofixup sections in DYNOBJ, and set up + shortcuts to them in our hash table. */ + +static bfd_boolean +create_rofixup_section (bfd *dynobj, struct bfd_link_info *info) +{ + struct elf_lm32_link_hash_table *htab; + htab = lm32_elf_hash_table (info); + + /* Fixup section for R_LM32_32 relocs */ + lm32fdpic_fixup32_section (info) = bfd_make_section_with_flags (dynobj, + ".rofixup", + (SEC_ALLOC + | SEC_LOAD + | SEC_HAS_CONTENTS + | SEC_IN_MEMORY + | SEC_LINKER_CREATED + | SEC_READONLY)); + if (lm32fdpic_fixup32_section (info) == NULL + || ! bfd_set_section_alignment (dynobj, lm32fdpic_fixup32_section (info), 2)) + return FALSE; + + return TRUE; +} + +static reloc_howto_type lm32_elf_howto_table [] = +{ + /* This reloc does nothing. */ + HOWTO (R_LM32_NONE, /* 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, /* special_function */ + "R_LM32_NONE", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* An 8 bit absolute relocation. */ + HOWTO (R_LM32_8, /* type */ + 0, /* rightshift */ + 0, /* size (0 = byte, 1 = short, 2 = long) */ + 8, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_LM32_8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 16 bit absolute relocation. */ + HOWTO (R_LM32_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 */ + bfd_elf_generic_reloc, /* special_function */ + "R_LM32_16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 32 bit absolute relocation. */ + HOWTO (R_LM32_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, /* special_function */ + "R_LM32_32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_HI16, /* type */ + 16, /* rightshift */ + 2, /* 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_LM32_HI16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_LO16, /* 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_LM32_LO16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_GPREL16, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + lm32_elf_gprel_reloc, /* special_function */ + "R_LM32_GPREL16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_CALL, /* type */ + 2, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 26, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_LM32_CALL", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x3ffffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + HOWTO (R_LM32_BRANCH, /* type */ + 2, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_signed, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_LM32_BRANCH", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + /* GNU extension to record C++ vtable hierarchy. */ + HOWTO (R_LM32_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_LM32_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_LM32_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_LM32_GNU_VTENTRY", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_16_GOT, /* 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_LM32_16_GOT", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_GOTOFF_HI16, /* type */ + 16, /* 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_LM32_GOTOFF_HI16", /* name */ + FALSE, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_GOTOFF_LO16, /* 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_LM32_GOTOFF_LO16", /* name */ + FALSE, /* partial_inplace */ + 0xffff, /* src_mask */ + 0xffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_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, /* special_function */ + "R_LM32_COPY", /* name */ + FALSE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_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, /* special_function */ + "R_LM32_GLOB_DAT", /* name */ + FALSE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_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, /* special_function */ + "R_LM32_JMP_SLOT", /* name */ + FALSE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_LM32_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, /* special_function */ + "R_LM32_RELATIVE", /* name */ + FALSE, /* partial_inplace */ + 0xffffffff, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + +}; + +/* Map BFD reloc types to lm32 ELF reloc types. */ + +struct lm32_reloc_map +{ + bfd_reloc_code_real_type bfd_reloc_val; + unsigned char elf_reloc_val; +}; + +static const struct lm32_reloc_map lm32_reloc_map[] = +{ + { BFD_RELOC_NONE, R_LM32_NONE }, + { BFD_RELOC_8, R_LM32_8 }, + { BFD_RELOC_16, R_LM32_16 }, + { BFD_RELOC_32, R_LM32_32 }, + { BFD_RELOC_HI16, R_LM32_HI16 }, + { BFD_RELOC_LO16, R_LM32_LO16 }, + { BFD_RELOC_GPREL16, R_LM32_GPREL16 }, + { BFD_RELOC_LM32_CALL, R_LM32_CALL }, + { BFD_RELOC_LM32_BRANCH, R_LM32_BRANCH }, + { BFD_RELOC_VTABLE_INHERIT, R_LM32_GNU_VTINHERIT }, + { BFD_RELOC_VTABLE_ENTRY, R_LM32_GNU_VTENTRY }, + { BFD_RELOC_LM32_16_GOT, R_LM32_16_GOT }, + { BFD_RELOC_LM32_GOTOFF_HI16, R_LM32_GOTOFF_HI16 }, + { BFD_RELOC_LM32_GOTOFF_LO16, R_LM32_GOTOFF_LO16 }, + { BFD_RELOC_LM32_COPY, R_LM32_COPY }, + { BFD_RELOC_LM32_GLOB_DAT, R_LM32_GLOB_DAT }, + { BFD_RELOC_LM32_JMP_SLOT, R_LM32_JMP_SLOT }, + { BFD_RELOC_LM32_RELATIVE, R_LM32_RELATIVE }, +}; + +static reloc_howto_type * +lm32_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) +{ + unsigned int i; + + for (i = 0; i < sizeof (lm32_reloc_map) / sizeof (lm32_reloc_map[0]); i++) + if (lm32_reloc_map[i].bfd_reloc_val == code) + return &lm32_elf_howto_table[lm32_reloc_map[i].elf_reloc_val]; + return NULL; +} + +static reloc_howto_type * +lm32_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, + const char *r_name) +{ + unsigned int i; + + for (i = 0; + i < sizeof (lm32_elf_howto_table) / sizeof (lm32_elf_howto_table[0]); + i++) + if (lm32_elf_howto_table[i].name != NULL + && strcasecmp (lm32_elf_howto_table[i].name, r_name) == 0) + return &lm32_elf_howto_table[i]; + + return NULL; +} + + +/* Set the howto pointer for an Lattice Mico32 ELF reloc. */ + +static void +lm32_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); + BFD_ASSERT (r_type < (unsigned int) R_LM32_max); + cache_ptr->howto = &lm32_elf_howto_table[r_type]; +} + +/* Set the right machine number for an Lattice Mico32 ELF file. */ + +static bfd_boolean +lm32_elf_object_p (bfd *abfd) +{ + return bfd_default_set_arch_mach (abfd, bfd_arch_lm32, bfd_mach_lm32); +} + +/* Set machine type flags just before file is written out. */ + +static void +lm32_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED) +{ + elf_elfheader (abfd)->e_machine = EM_LATTICEMICO32; + elf_elfheader (abfd)->e_flags &=~ EF_LM32_MACH; + switch (bfd_get_mach (abfd)) + { + case bfd_mach_lm32: + elf_elfheader (abfd)->e_flags |= E_LM32_MACH; + break; + default: + abort (); + } +} + +/* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a + dangerous relocation. */ + +static bfd_boolean +lm32_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 +lm32_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 (!lm32_elf_assign_gp (output_bfd, pgp)) + { + *error_message = + (char *) + _("global pointer relative relocation when _gp not defined"); + return bfd_reloc_dangerous; + } + } + + return bfd_reloc_ok; +} + +static bfd_reloc_status_type +lm32_elf_do_gprel_relocate (bfd *abfd, + reloc_howto_type *howto, + asection *input_section ATTRIBUTE_UNUSED, + bfd_byte *data, + bfd_vma offset, + bfd_vma symbol_value, + bfd_vma addend) +{ + return _bfd_final_link_relocate (howto, abfd, input_section, + data, offset, symbol_value, addend); +} + +static bfd_reloc_status_type +lm32_elf_gprel_reloc (bfd *abfd, + arelent *reloc_entry, + asymbol *symbol, + void *data, + asection *input_section, + bfd *output_bfd, + char **msg) +{ + bfd_vma relocation; + bfd_vma gp; + bfd_reloc_status_type r; + + if (output_bfd != (bfd *) NULL + && (symbol->flags & BSF_SECTION_SYM) == 0 + && (!reloc_entry->howto->partial_inplace || reloc_entry->addend == 0)) + { + reloc_entry->address += input_section->output_offset; + return bfd_reloc_ok; + } + + if (output_bfd != NULL) + return bfd_reloc_ok; + + relocation = symbol->value + + symbol->section->output_section->vma + symbol->section->output_offset; + + if ((r = + lm32_elf_final_gp (abfd, symbol, FALSE, msg, &gp)) == bfd_reloc_ok) + { + relocation = relocation + reloc_entry->addend - gp; + reloc_entry->addend = 0; + if ((signed) relocation < -32768 || (signed) relocation > 32767) + { + *msg = _("global pointer relative address out of range"); + r = bfd_reloc_outofrange; + } + else + { + r = lm32_elf_do_gprel_relocate (abfd, reloc_entry->howto, + input_section, + data, reloc_entry->address, + relocation, reloc_entry->addend); + } + } + + return r; +} + +/* Find the segment number in which OSEC, and output section, is + located. */ + +static unsigned +_lm32fdpic_osec_to_segment (bfd *output_bfd, asection *osec) +{ + struct elf_segment_map *m; + Elf_Internal_Phdr *p; + + /* Find the segment that contains the output_section. */ + for (m = elf_tdata (output_bfd)->segment_map, + p = elf_tdata (output_bfd)->phdr; + m != NULL; + m = m->next, p++) + { + int i; + + for (i = m->count - 1; i >= 0; i--) + if (m->sections[i] == osec) + break; + + if (i >= 0) + break; + } + + return p - elf_tdata (output_bfd)->phdr; +} + +/* Determine if an output section is read-only. */ + +inline static bfd_boolean +_lm32fdpic_osec_readonly_p (bfd *output_bfd, asection *osec) +{ + unsigned seg = _lm32fdpic_osec_to_segment (output_bfd, osec); + + return ! (elf_tdata (output_bfd)->phdr[seg].p_flags & PF_W); +} + +/* Relocate a section */ + +static bfd_boolean +lm32_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 = &elf_tdata (input_bfd)->symtab_hdr; + struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd); + Elf_Internal_Rela *rel, *relend; + + struct elf_lm32_link_hash_table *htab = lm32_elf_hash_table (info); + bfd *dynobj; + bfd_vma *local_got_offsets; + asection *sgot, *splt, *sreloc; + + dynobj = htab->root.dynobj; + local_got_offsets = elf_local_got_offsets (input_bfd); + + sgot = htab->sgot; + splt = htab->splt; + sreloc = NULL; + + 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++) + { + reloc_howto_type *howto; + unsigned int r_type; + unsigned long r_symndx; + Elf_Internal_Sym *sym; + asection *sec; + struct elf_link_hash_entry *h; + bfd_vma relocation; + bfd_vma gp; + bfd_reloc_status_type r; + const char *name = NULL; + asection *osec; + + r_symndx = ELF32_R_SYM (rel->r_info); + r_type = ELF32_R_TYPE (rel->r_info); + + if (r_type == R_LM32_GNU_VTENTRY + || r_type == R_LM32_GNU_VTINHERIT ) + continue; + + h = NULL; + sym = NULL; + sec = NULL; + + howto = lm32_elf_howto_table + r_type; + + if (r_symndx < symtab_hdr->sh_info) + { + /* It's a local symbol. */ + sym = local_syms + r_symndx; + osec = 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; + } + else + { + /* It's a global symbol. */ + bfd_boolean unresolved_reloc; + bfd_boolean warned; + + RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, + r_symndx, symtab_hdr, sym_hashes, + h, sec, relocation, + unresolved_reloc, warned); + 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 (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) + continue; + + /* If partial_inplace, we need to store any additional addend + back in the section. */ + if (! howto->partial_inplace) + continue; + + /* Shouldn't reach here. */ + abort (); + r = bfd_reloc_ok; + } + else + { + switch (howto->type) + { + case R_LM32_GPREL16: + if (!lm32_elf_assign_gp (output_bfd, &gp)) + r = bfd_reloc_dangerous; + else + { + relocation = relocation + rel->r_addend - gp; + rel->r_addend = 0; + if ((signed)relocation < -32768 || (signed)relocation > 32767) + r = bfd_reloc_outofrange; + else + { + r = _bfd_final_link_relocate (howto, input_bfd, + input_section, contents, + rel->r_offset, relocation, + rel->r_addend); + } + } + break; + case R_LM32_16_GOT: + /* Relocation is to the entry for this symbol in the global + offset table. */ + BFD_ASSERT (sgot != NULL); + if (h != NULL) + { + bfd_boolean dyn; + bfd_vma off; + + off = h->got.offset; + BFD_ASSERT (off != (bfd_vma) -1); + + dyn = htab->root.dynamic_sections_created; + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) + || (info->shared + && (info->symbolic + || h->dynindx == -1 + || h->forced_local) + && h->def_regular)) + { + /* This is actually a static link, or it is a + -Bsymbolic link and the symbol is defined + locally, or the symbol was forced to be local + because of a version file. We must initialize + this entry in the global offset table. Since the + offset must always be a multiple of 4, we use the + least significant bit to record whether we have + initialized it already. + + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + if ((off & 1) != 0) + off &= ~1; + else + { + /* Write entry in GOT */ + bfd_put_32 (output_bfd, relocation, + sgot->contents + off); + /* Create entry in .rofixup pointing to GOT entry. */ + if (IS_FDPIC (output_bfd) && h->root.type != bfd_link_hash_undefweak) + { + _lm32fdpic_add_rofixup (output_bfd, + lm32fdpic_fixup32_section + (info), + sgot->output_section->vma + + sgot->output_offset + + off); + } + /* Mark GOT entry as having been written. */ + h->got.offset |= 1; + } + } + + relocation = sgot->output_offset + off; + } + else + { + bfd_vma off; + bfd_byte *loc; + + BFD_ASSERT (local_got_offsets != NULL + && local_got_offsets[r_symndx] != (bfd_vma) -1); + + /* Get offset into GOT table. */ + off = local_got_offsets[r_symndx]; + + /* The offset must always be a multiple of 4. We use + the least significant bit to record whether we have + already processed this entry. */ + if ((off & 1) != 0) + off &= ~1; + else + { + /* Write entry in GOT. */ + bfd_put_32 (output_bfd, relocation, sgot->contents + off); + /* Create entry in .rofixup pointing to GOT entry. */ + if (IS_FDPIC (output_bfd)) + { + _lm32fdpic_add_rofixup (output_bfd, + lm32fdpic_fixup32_section + (info), + sgot->output_section->vma + + sgot->output_offset + + off); + } + + if (info->shared) + { + asection *srelgot; + Elf_Internal_Rela outrel; + + /* We need to generate a R_LM32_RELATIVE reloc + for the dynamic linker. */ + srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (srelgot != NULL); + + outrel.r_offset = (sgot->output_section->vma + + sgot->output_offset + + off); + outrel.r_info = ELF32_R_INFO (0, R_LM32_RELATIVE); + outrel.r_addend = relocation; + loc = srelgot->contents; + loc += srelgot->reloc_count * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &outrel,loc); + ++srelgot->reloc_count; + } + + local_got_offsets[r_symndx] |= 1; + } + + + relocation = sgot->output_offset + off; + } + + /* Addend should be zero. */ + if (rel->r_addend != 0) + (*_bfd_error_handler) (_("internal error: addend should be zero for R_LM32_16_GOT")); + + r = _bfd_final_link_relocate (howto, + input_bfd, + input_section, + contents, + rel->r_offset, + relocation, + rel->r_addend); + break; + + case R_LM32_GOTOFF_LO16: + case R_LM32_GOTOFF_HI16: + /* Relocation is offset from GOT. */ + BFD_ASSERT (sgot != NULL); + relocation -= sgot->output_section->vma; + /* Account for sign-extension. */ + if ((r_type == R_LM32_GOTOFF_HI16) + && ((relocation + rel->r_addend) & 0x8000)) + rel->r_addend += 0x10000; + r = _bfd_final_link_relocate (howto, + input_bfd, + input_section, + contents, + rel->r_offset, + relocation, + rel->r_addend); + break; + + case R_LM32_32: + if (IS_FDPIC (output_bfd)) + { + if ((!h) || (h && h->root.type != bfd_link_hash_undefweak)) + { + /* Only create .rofixup entries for relocs in loadable sections. */ + if ((bfd_get_section_flags (output_bfd, input_section->output_section) + & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) + + { + /* Check address to be modified is writable. */ + if (_lm32fdpic_osec_readonly_p (output_bfd, + input_section + ->output_section)) + { + info->callbacks->warning + (info, + _("cannot emit dynamic relocations in read-only section"), + name, input_bfd, input_section, rel->r_offset); + return FALSE; + } + /* Create entry in .rofixup section. */ + _lm32fdpic_add_rofixup (output_bfd, + lm32fdpic_fixup32_section (info), + input_section->output_section->vma + + input_section->output_offset + + rel->r_offset); + } + } + } + /* Fall through. */ + + default: + r = _bfd_final_link_relocate (howto, + input_bfd, + input_section, + contents, + rel->r_offset, + relocation, + rel->r_addend); + break; + } + } + + if (r != bfd_reloc_ok) + { + const char *name; + const char *msg = NULL; + arelent bfd_reloc; + reloc_howto_type *howto; + + lm32_info_to_howto_rela (input_bfd, &bfd_reloc, rel); + howto = bfd_reloc.howto; + + 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 ((h != NULL) + && (h->root.type == bfd_link_hash_undefweak)) + break; + 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; +} + +static asection * +lm32_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_LM32_GNU_VTINHERIT: + case R_LM32_GNU_VTENTRY: + return NULL; + } + + return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); +} + +static bfd_boolean +lm32_elf_gc_sweep_hook (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + asection *sec, + const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED) +{ + /* Update the got entry reference counts for the section being removed. */ + Elf_Internal_Shdr *symtab_hdr; + struct elf_link_hash_entry **sym_hashes; + bfd_signed_vma *local_got_refcounts; + const Elf_Internal_Rela *rel, *relend; + + elf_section_data (sec)->local_dynrel = NULL; + + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (abfd); + local_got_refcounts = elf_local_got_refcounts (abfd); + + relend = relocs + sec->reloc_count; + for (rel = relocs; rel < relend; rel++) + { + unsigned long r_symndx; + struct elf_link_hash_entry *h = NULL; + + r_symndx = ELF32_R_SYM (rel->r_info); + if (r_symndx >= symtab_hdr->sh_info) + { + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + while (h->root.type == bfd_link_hash_indirect + || h->root.type == bfd_link_hash_warning) + h = (struct elf_link_hash_entry *) h->root.u.i.link; + } + + switch (ELF32_R_TYPE (rel->r_info)) + { + case R_LM32_16_GOT: + if (h != NULL) + { + if (h->got.refcount > 0) + h->got.refcount--; + } + else + { + if (local_got_refcounts && local_got_refcounts[r_symndx] > 0) + local_got_refcounts[r_symndx]--; + } + break; + + default: + break; + } + } + return TRUE; +} + +/* Look through the relocs for a section during the first phase. */ + +static bfd_boolean +lm32_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, **sym_hashes_end; + const Elf_Internal_Rela *rel; + const Elf_Internal_Rela *rel_end; + struct elf_lm32_link_hash_table *htab; + bfd *dynobj; + bfd_vma *local_got_offsets; + asection *sgot, *srelgot, *sreloc; + + if (info->relocatable) + return TRUE; + + sgot = srelgot = sreloc = NULL; + + 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; + + htab = lm32_elf_hash_table (info); + dynobj = htab->root.dynobj; + local_got_offsets = elf_local_got_offsets (abfd); + + rel_end = relocs + sec->reloc_count; + for (rel = relocs; rel < rel_end; rel++) + { + int r_type; + struct elf_link_hash_entry *h; + unsigned long r_symndx; + + r_symndx = ELF32_R_SYM (rel->r_info); + r_type = ELF32_R_TYPE (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; + } + + /* Some relocs require a global offset table. */ + if (htab->sgot == NULL) + { + switch (r_type) + { + case R_LM32_16_GOT: + case R_LM32_GOTOFF_HI16: + case R_LM32_GOTOFF_LO16: + if (dynobj == NULL) + htab->root.dynobj = dynobj = abfd; + if (! create_got_section (dynobj, info)) + return FALSE; + break; + } + } + + /* Some relocs require a rofixup table. */ + if (IS_FDPIC (abfd)) + { + switch (r_type) + { + case R_LM32_32: + /* FDPIC requires a GOT if there is a .rofixup section + (Normal ELF doesn't). */ + if (dynobj == NULL) + htab->root.dynobj = dynobj = abfd; + if (! create_got_section (dynobj, info)) + return FALSE; + /* Create .rofixup section */ + if (htab->sfixup32 == NULL) + { + if (! create_rofixup_section (abfd, info)) + return FALSE; + } + break; + case R_LM32_16_GOT: + case R_LM32_GOTOFF_HI16: + case R_LM32_GOTOFF_LO16: + /* Create .rofixup section. */ + if (htab->sfixup32 == NULL) + { + if (! create_rofixup_section (abfd, info)) + return FALSE; + } + break; + } + } + + switch (r_type) + { + case R_LM32_16_GOT: + if (h != NULL) + h->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; + + size = symtab_hdr->sh_info; + size *= 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; + } + break; + + /* This relocation describes the C++ object vtable hierarchy. + Reconstruct it for later use during GC. */ + case R_LM32_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_LM32_GNU_VTENTRY: + if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + return FALSE; + break; + + } + } + + return TRUE; +} + +/* Finish up the dynamic sections. */ + +static bfd_boolean +lm32_elf_finish_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + struct elf_lm32_link_hash_table *htab; + bfd *dynobj; + asection *sdyn; + asection *sgot; + + htab = lm32_elf_hash_table (info); + dynobj = htab->root.dynobj; + + sgot = htab->sgotplt; + sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); + + if (htab->root.dynamic_sections_created) + { + asection *splt; + Elf32_External_Dyn *dyncon, *dynconend; + + BFD_ASSERT (sgot != NULL && sdyn != NULL); + + dyncon = (Elf32_External_Dyn *) sdyn->contents; + dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); + + for (; dyncon < dynconend; dyncon++) + { + Elf_Internal_Dyn dyn; + const char *name; + asection *s; + + bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn); + + switch (dyn.d_tag) + { + default: + break; + + case DT_PLTGOT: + name = ".got"; + s = htab->sgot->output_section; + goto get_vma; + case DT_JMPREL: + name = ".rela.plt"; + s = htab->srelplt->output_section; + get_vma: + BFD_ASSERT (s != NULL); + dyn.d_un.d_ptr = s->vma; + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + break; + + case DT_PLTRELSZ: + s = htab->srelplt->output_section; + BFD_ASSERT (s != NULL); + dyn.d_un.d_val = s->size; + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + break; + + case DT_RELASZ: + /* My reading of the SVR4 ABI indicates that the + procedure linkage table relocs (DT_JMPREL) should be + included in the overall relocs (DT_RELA). This is + what Solaris does. However, UnixWare can not handle + that case. Therefore, we override the DT_RELASZ entry + here to make it not include the JMPREL relocs. Since + the linker script arranges for .rela.plt to follow all + other relocation sections, we don't have to worry + about changing the DT_RELA entry. */ + if (htab->srelplt != NULL) + { + s = htab->srelplt->output_section; + dyn.d_un.d_val -= s->size; + } + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + break; + } + } + + /* Fill in the first entry in the procedure linkage table. */ + splt = htab->splt; + if (splt && splt->size > 0) + { + if (info->shared) + { + bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD0, splt->contents); + bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD1, splt->contents + 4); + bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD2, splt->contents + 8); + bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD3, splt->contents + 12); + bfd_put_32 (output_bfd, PLT0_PIC_ENTRY_WORD4, splt->contents + 16); + } + else + { + unsigned long addr; + /* addr = .got + 4 */ + addr = sgot->output_section->vma + sgot->output_offset + 4; + bfd_put_32 (output_bfd, + PLT0_ENTRY_WORD0 | ((addr >> 16) & 0xffff), + splt->contents); + bfd_put_32 (output_bfd, + PLT0_ENTRY_WORD1 | (addr & 0xffff), + splt->contents + 4); + bfd_put_32 (output_bfd, PLT0_ENTRY_WORD2, splt->contents + 8); + bfd_put_32 (output_bfd, PLT0_ENTRY_WORD3, splt->contents + 12); + bfd_put_32 (output_bfd, PLT0_ENTRY_WORD4, splt->contents + 16); + } + + elf_section_data (splt->output_section)->this_hdr.sh_entsize = + PLT_ENTRY_SIZE; + } + } + + /* Fill in the first three entries in the global offset table. */ + if (sgot && sgot->size > 0) + { + if (sdyn == NULL) + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents); + else + bfd_put_32 (output_bfd, + sdyn->output_section->vma + sdyn->output_offset, + sgot->contents); + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 4); + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + 8); + + /* FIXME: This can be null if create_dynamic_sections wasn't called. */ + if (elf_section_data (sgot->output_section) != NULL) + elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4; + } + + if (lm32fdpic_fixup32_section (info)) + { + struct elf_link_hash_entry *hgot = elf_hash_table (info)->hgot; + bfd_vma got_value = hgot->root.u.def.value + + hgot->root.u.def.section->output_section->vma + + hgot->root.u.def.section->output_offset; + struct bfd_link_hash_entry *hend; + + /* Last entry is pointer to GOT. */ + _lm32fdpic_add_rofixup (output_bfd, lm32fdpic_fixup32_section (info), got_value); + + /* Check we wrote enough entries. */ + if (lm32fdpic_fixup32_section (info)->size + != (lm32fdpic_fixup32_section (info)->reloc_count * 4)) + { + (*_bfd_error_handler) + ("LINKER BUG: .rofixup section size mismatch: size/4 %d != relocs %d", + lm32fdpic_fixup32_section (info)->size/4, + lm32fdpic_fixup32_section (info)->reloc_count); + return FALSE; + } + + hend = bfd_link_hash_lookup (info->hash, "__ROFIXUP_END__", + FALSE, FALSE, TRUE); + if (hend + && (hend->type == bfd_link_hash_defined + || hend->type == bfd_link_hash_defweak)) + { + bfd_vma value = + lm32fdpic_fixup32_section (info)->output_section->vma + + lm32fdpic_fixup32_section (info)->output_offset + + lm32fdpic_fixup32_section (info)->size + - hend->u.def.section->output_section->vma + - hend->u.def.section->output_offset; + BFD_ASSERT (hend->u.def.value == value); + if (hend->u.def.value != value) + { + (*_bfd_error_handler) + ("LINKER BUG: .rofixup section hend->u.def.value != value: %ld != %ld", hend->u.def.value, value); + return FALSE; + } + } + } + + return TRUE; +} + +/* Finish up dynamic symbol handling. We set the contents of various + dynamic sections here. */ + +static bfd_boolean +lm32_elf_finish_dynamic_symbol (bfd *output_bfd, + struct bfd_link_info *info, + struct elf_link_hash_entry *h, + Elf_Internal_Sym *sym) +{ + struct elf_lm32_link_hash_table *htab; + bfd *dynobj; + bfd_byte *loc; + + htab = lm32_elf_hash_table (info); + dynobj = htab->root.dynobj; + + if (h->plt.offset != (bfd_vma) -1) + { + asection *splt; + asection *sgot; + asection *srela; + + bfd_vma plt_index; + bfd_vma got_offset; + Elf_Internal_Rela rela; + + /* This symbol has an entry in the procedure linkage table. Set + it up. */ + BFD_ASSERT (h->dynindx != -1); + + splt = htab->splt; + sgot = htab->sgotplt; + srela = htab->srelplt; + BFD_ASSERT (splt != NULL && sgot != NULL && srela != NULL); + + /* Get the index in the procedure linkage table which + 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 / PLT_ENTRY_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; + + /* Fill in the entry in the procedure linkage table. */ + if (! info->shared) + { + /* TODO */ + } + else + { + /* TODO */ + } + + /* Fill in the entry in the global offset table. */ + bfd_put_32 (output_bfd, + (splt->output_section->vma + + splt->output_offset + + h->plt.offset + + 12), /* same offset */ + sgot->contents + got_offset); + + /* Fill in the entry in the .rela.plt section. */ + rela.r_offset = (sgot->output_section->vma + + sgot->output_offset + + got_offset); + rela.r_info = ELF32_R_INFO (h->dynindx, R_LM32_JMP_SLOT); + rela.r_addend = 0; + loc = srela->contents; + loc += plt_index * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + + if (!h->def_regular) + { + /* Mark the symbol as undefined, rather than as defined in + the .plt section. Leave the value alone. */ + sym->st_shndx = SHN_UNDEF; + } + + } + + if (h->got.offset != (bfd_vma) -1) + { + asection *sgot; + asection *srela; + Elf_Internal_Rela rela; + + /* This symbol has an entry in the global offset table. Set it + up. */ + sgot = htab->sgot; + srela = htab->srelgot; + BFD_ASSERT (sgot != NULL && srela != NULL); + + rela.r_offset = (sgot->output_section->vma + + sgot->output_offset + + (h->got.offset &~ 1)); + + /* If this is a -Bsymbolic link, and the symbol is defined + locally, we just want to emit a RELATIVE reloc. Likewise if + the symbol was forced to be local because of a version file. + The entry in the global offset table will already have been + initialized in the relocate_section function. */ + if (info->shared + && (info->symbolic + || h->dynindx == -1 + || h->forced_local) + && h->def_regular) + { + rela.r_info = ELF32_R_INFO (0, R_LM32_RELATIVE); + rela.r_addend = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + } + else + { + BFD_ASSERT ((h->got.offset & 1) == 0); + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents + h->got.offset); + rela.r_info = ELF32_R_INFO (h->dynindx, R_LM32_GLOB_DAT); + rela.r_addend = 0; + } + + loc = srela->contents; + loc += srela->reloc_count * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + ++srela->reloc_count; + } + + if (h->needs_copy) + { + asection *s; + Elf_Internal_Rela rela; + + /* This symbols needs a copy reloc. Set it up. */ + BFD_ASSERT (h->dynindx != -1 + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak)); + + s = bfd_get_section_by_name (h->root.u.def.section->owner, + ".rela.bss"); + BFD_ASSERT (s != NULL); + + rela.r_offset = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + rela.r_info = ELF32_R_INFO (h->dynindx, R_LM32_COPY); + rela.r_addend = 0; + loc = s->contents; + loc += s->reloc_count * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + ++s->reloc_count; + } + + /* Mark some specially defined symbols as absolute. */ + if (strcmp (h->root.root.string, "_DYNAMIC") == 0 + || h == htab->root.hgot) + sym->st_shndx = SHN_ABS; + + return TRUE; +} + +static enum elf_reloc_type_class +lm32_elf_reloc_type_class (const Elf_Internal_Rela *rela) +{ + switch ((int) ELF32_R_TYPE (rela->r_info)) + { + case R_LM32_RELATIVE: return reloc_class_relative; + case R_LM32_JMP_SLOT: return reloc_class_plt; + case R_LM32_COPY: return reloc_class_copy; + default: return reloc_class_normal; + } +} + +/* 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 +lm32_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *h) +{ + struct elf_lm32_link_hash_table *htab; + struct elf_lm32_link_hash_entry *eh; + struct elf_lm32_dyn_relocs *p; + bfd *dynobj; + 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 is a function, put it in the procedure linkage table. We + will fill in the contents of the procedure linkage table later, + when we know the address of the .got section. */ + if (h->type == STT_FUNC + || h->needs_plt) + { + if (! info->shared + && !h->def_dynamic + && !h->ref_dynamic + && h->root.type != bfd_link_hash_undefweak + && h->root.type != bfd_link_hash_undefined) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic + object. In such a case, we don't actually need to build + a procedure linkage table, and we can just do a PCREL + reloc instead. */ + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + + return TRUE; + } + else + h->plt.offset = (bfd_vma) -1; + + /* If this is a weak symbol, and there is a real definition, the + processor independent code will have arranged for us to see the + real definition first, and we can just use the same value. */ + if (h->u.weakdef != NULL) + { + BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined + || h->u.weakdef->root.type == bfd_link_hash_defweak); + h->root.u.def.section = h->u.weakdef->root.u.def.section; + h->root.u.def.value = h->u.weakdef->root.u.def.value; + return TRUE; + } + + /* This is a reference to a symbol defined by a dynamic object which + is not a function. */ + + /* If we are creating a shared library, we must presume that the + only references to the symbol are via the global offset table. + For such cases we need not do anything here; the relocations will + be handled correctly by relocate_section. */ + if (info->shared) + return TRUE; + + /* If there are no references to this symbol that do not use the + GOT, we don't need to generate a copy reloc. */ + if (!h->non_got_ref) + return TRUE; + + /* If -z nocopyreloc was given, we won't generate them either. */ + if (info->nocopyreloc) + { + h->non_got_ref = 0; + return TRUE; + } + + eh = (struct elf_lm32_link_hash_entry *) h; + for (p = eh->dyn_relocs; p != NULL; p = p->next) + { + s = p->sec->output_section; + if (s != NULL && (s->flags & (SEC_READONLY | SEC_HAS_CONTENTS)) != 0) + break; + } + + /* If we didn't find any dynamic relocs in sections which needs the + copy reloc, then we'll be keeping the dynamic relocs and avoiding + the copy reloc. */ + if (p == NULL) + { + h->non_got_ref = 0; + return TRUE; + } + + if (h->size == 0) + { + (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"), + h->root.root.string); + return TRUE; + } + + /* We must allocate the symbol in our .dynbss section, which will + become part of the .bss section of the executable. There will be + an entry for this symbol in the .dynsym section. The dynamic + object will contain position independent code, so all references + from the dynamic object to this symbol will go through the global + offset table. The dynamic linker will use the .dynsym entry to + determine the address it must put in the global offset table, so + both the dynamic object and the regular object will refer to the + same memory location for the variable. */ + + htab = lm32_elf_hash_table (info); + s = htab->sdynbss; + BFD_ASSERT (s != NULL); + + /* We must generate a R_LM32_COPY reloc to tell the dynamic linker + to copy the initial value out of the dynamic object and into the + runtime process image. We need to remember the offset into the + .rela.bss section we are going to use. */ + if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) + { + asection *srel; + + srel = htab->srelbss; + BFD_ASSERT (srel != NULL); + srel->size += sizeof (Elf32_External_Rela); + h->needs_copy = 1; + } + + return _bfd_elf_adjust_dynamic_copy (h, s); +} + +/* Allocate space in .plt, .got and associated reloc sections for + dynamic relocs. */ + +static bfd_boolean +allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) +{ + struct bfd_link_info *info; + struct elf_lm32_link_hash_table *htab; + struct elf_lm32_link_hash_entry *eh; + struct elf_lm32_dyn_relocs *p; + + if (h->root.type == bfd_link_hash_indirect) + return TRUE; + + if (h->root.type == bfd_link_hash_warning) + /* When warning symbols are created, they **replace** the "real" + entry in the hash table, thus we never get to see the real + symbol in a hash traversal. So look at it now. */ + h = (struct elf_link_hash_entry *) h->root.u.i.link; + + info = (struct bfd_link_info *) inf; + htab = lm32_elf_hash_table (info); + + eh = (struct elf_lm32_link_hash_entry *) h; + + if (htab->root.dynamic_sections_created + && h->plt.refcount > 0) + { + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + { + asection *s = htab->splt; + + /* If this is the first .plt entry, make room for the special + first entry. */ + if (s->size == 0) + s->size += PLT_ENTRY_SIZE; + + h->plt.offset = s->size; + + /* If this symbol is not defined in a regular file, and we are + not generating a shared library, then set the symbol to this + location in the .plt. This is required to make function + pointers compare as equal between the normal executable and + the shared library. */ + if (! info->shared + && !h->def_regular) + { + h->root.u.def.section = s; + h->root.u.def.value = h->plt.offset; + } + + /* Make room for this entry. */ + s->size += PLT_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. */ + htab->sgotplt->size += 4; + + /* We also need to make an entry in the .rel.plt section. */ + htab->srelplt->size += sizeof (Elf32_External_Rela); + } + else + { + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + } + else + { + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + + if (h->got.refcount > 0) + { + asection *s; + bfd_boolean dyn; + + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + s = htab->sgot; + + h->got.offset = s->size; + s->size += 4; + dyn = htab->root.dynamic_sections_created; + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)) + htab->srelgot->size += sizeof (Elf32_External_Rela); + } + else + h->got.offset = (bfd_vma) -1; + + if (eh->dyn_relocs == NULL) + return TRUE; + + /* In the shared -Bsymbolic case, discard space allocated for + dynamic pc-relative relocs against symbols which turn out to be + defined in regular objects. For the normal shared case, discard + space for pc-relative relocs that have become local due to symbol + visibility changes. */ + + if (info->shared) + { + if (h->def_regular + && (h->forced_local + || info->symbolic)) + { + struct elf_lm32_dyn_relocs **pp; + + for (pp = &eh->dyn_relocs; (p = *pp) != NULL;) + { + p->count -= p->pc_count; + p->pc_count = 0; + if (p->count == 0) + *pp = p->next; + else + pp = &p->next; + } + } + + /* Also discard relocs on undefined weak syms with non-default + visibility. */ + if (eh->dyn_relocs != NULL + && h->root.type == bfd_link_hash_undefweak) + { + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + eh->dyn_relocs = NULL; + + /* Make sure undefined weak symbols are output as a dynamic + symbol in PIEs. */ + else if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + } + } + else + { + /* For the non-shared case, discard space for relocs against + symbols which turn out to need copy relocs or are not + dynamic. */ + + if (!h->non_got_ref + && ((h->def_dynamic + && !h->def_regular) + || (htab->root.dynamic_sections_created + && (h->root.type == bfd_link_hash_undefweak + || h->root.type == bfd_link_hash_undefined)))) + { + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + /* If that succeeded, we know we'll be keeping all the + relocs. */ + if (h->dynindx != -1) + goto keep; + } + + eh->dyn_relocs = NULL; + + keep: ; + } + + /* Finally, allocate space. */ + for (p = eh->dyn_relocs; p != NULL; p = p->next) + { + asection *sreloc = elf_section_data (p->sec)->sreloc; + sreloc->size += p->count * sizeof (Elf32_External_Rela); + } + + return TRUE; +} + +/* Find any dynamic relocs that apply to read-only sections. */ + +static bfd_boolean +readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf) +{ + struct elf_lm32_link_hash_entry *eh; + struct elf_lm32_dyn_relocs *p; + + if (h->root.type == bfd_link_hash_warning) + h = (struct elf_link_hash_entry *) h->root.u.i.link; + + eh = (struct elf_lm32_link_hash_entry *) h; + for (p = eh->dyn_relocs; p != NULL; p = p->next) + { + asection *s = p->sec->output_section; + + if (s != NULL && (s->flags & SEC_READONLY) != 0) + { + struct bfd_link_info *info = (struct bfd_link_info *) inf; + + info->flags |= DF_TEXTREL; + + /* Not an error, just cut short the traversal. */ + return FALSE; + } + } + return TRUE; +} + +/* Set the sizes of the dynamic sections. */ + +static bfd_boolean +lm32_elf_size_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + struct elf_lm32_link_hash_table *htab; + bfd *dynobj; + asection *s; + bfd_boolean relocs; + bfd *ibfd; + + htab = lm32_elf_hash_table (info); + dynobj = htab->root.dynobj; + BFD_ASSERT (dynobj != NULL); + + if (htab->root.dynamic_sections_created) + { + /* Set the contents of the .interp section to the interpreter. */ + if (info->executable) + { + s = bfd_get_section_by_name (dynobj, ".interp"); + BFD_ASSERT (s != NULL); + s->size = sizeof ELF_DYNAMIC_INTERPRETER; + s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; + } + } + + /* Set up .got offsets for local syms, and space for local dynamic + relocs. */ + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + bfd_signed_vma *local_got; + bfd_signed_vma *end_local_got; + bfd_size_type locsymcount; + Elf_Internal_Shdr *symtab_hdr; + asection *srel; + + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + continue; + + for (s = ibfd->sections; s != NULL; s = s->next) + { + struct elf_lm32_dyn_relocs *p; + + for (p = ((struct elf_lm32_dyn_relocs *) + elf_section_data (s)->local_dynrel); + p != NULL; + p = p->next) + { + if (! bfd_is_abs_section (p->sec) + && bfd_is_abs_section (p->sec->output_section)) + { + /* Input section has been discarded, either because + it is a copy of a linkonce section or due to + linker script /DISCARD/, so we'll be discarding + the relocs too. */ + } + else if (p->count != 0) + { + srel = elf_section_data (p->sec)->sreloc; + srel->size += p->count * sizeof (Elf32_External_Rela); + if ((p->sec->output_section->flags & SEC_READONLY) != 0) + info->flags |= DF_TEXTREL; + } + } + } + + local_got = elf_local_got_refcounts (ibfd); + if (!local_got) + continue; + + symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + locsymcount = symtab_hdr->sh_info; + end_local_got = local_got + locsymcount; + s = htab->sgot; + srel = htab->srelgot; + for (; local_got < end_local_got; ++local_got) + { + if (*local_got > 0) + { + *local_got = s->size; + s->size += 4; + if (info->shared) + srel->size += sizeof (Elf32_External_Rela); + } + else + *local_got = (bfd_vma) -1; + } + } + + /* Allocate global sym .plt and .got entries, and space for global + sym dynamic relocs. */ + elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info); + + /* We now have determined the sizes of the various dynamic sections. + Allocate memory for them. */ + relocs = FALSE; + for (s = dynobj->sections; s != NULL; s = s->next) + { + if ((s->flags & SEC_LINKER_CREATED) == 0) + continue; + + if (s == htab->splt + || s == htab->sgot + || s == htab->sgotplt + || s == htab->sdynbss) + { + /* Strip this section if we don't need it; see the + comment below. */ + } + else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela")) + { + if (s->size != 0 && s != htab->srelplt) + relocs = TRUE; + + /* We use the reloc_count field as a counter if we need + to copy relocs into the output file. */ + s->reloc_count = 0; + } + else + /* It's not one of our sections, so don't allocate space. */ + continue; + + if (s->size == 0) + { + /* If we don't need this section, strip it from the + output file. This is mostly to handle .rela.bss and + .rela.plt. We must create both sections in + create_dynamic_sections, because they must be created + before the linker maps input sections to output + sections. The linker does that before + adjust_dynamic_symbol is called, and it is that + function which decides whether anything needs to go + into these sections. */ + s->flags |= SEC_EXCLUDE; + continue; + } + + if ((s->flags & SEC_HAS_CONTENTS) == 0) + continue; + + /* Allocate memory for the section contents. We use bfd_zalloc + here in case unused entries are not reclaimed before the + section's contents are written out. This should not happen, + but this way if it does, we get a R_LM32_NONE reloc instead + of garbage. */ + s->contents = bfd_zalloc (dynobj, s->size); + if (s->contents == NULL) + return FALSE; + } + + if (htab->root.dynamic_sections_created) + { + /* Add some entries to the .dynamic section. We fill in the + values later, in lm32_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. */ +#define add_dynamic_entry(TAG, VAL) \ + _bfd_elf_add_dynamic_entry (info, TAG, VAL) + + if (info->executable) + { + if (! add_dynamic_entry (DT_DEBUG, 0)) + return FALSE; + } + + if (htab->splt->size != 0) + { + if (! add_dynamic_entry (DT_PLTGOT, 0) + || ! add_dynamic_entry (DT_PLTRELSZ, 0) + || ! add_dynamic_entry (DT_PLTREL, DT_RELA) + || ! add_dynamic_entry (DT_JMPREL, 0)) + return FALSE; + } + + if (relocs) + { + if (! add_dynamic_entry (DT_RELA, 0) + || ! add_dynamic_entry (DT_RELASZ, 0) + || ! add_dynamic_entry (DT_RELAENT, + sizeof (Elf32_External_Rela))) + return FALSE; + + /* If any dynamic relocs apply to a read-only section, + then we need a DT_TEXTREL entry. */ + if ((info->flags & DF_TEXTREL) == 0) + elf_link_hash_traverse (&htab->root, readonly_dynrelocs, + info); + + if ((info->flags & DF_TEXTREL) != 0) + { + if (! add_dynamic_entry (DT_TEXTREL, 0)) + return FALSE; + } + } + } +#undef add_dynamic_entry + + /* Allocate .rofixup section. */ + if (IS_FDPIC (output_bfd)) + { + struct weak_symbol_list *list_start = NULL, *list_end = NULL; + int rgot_weak_count = 0; + int r32_count = 0; + int rgot_count = 0; + /* Look for deleted sections. */ + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + for (s = ibfd->sections; s != NULL; s = s->next) + { + if (s->reloc_count) + { + /* Count relocs that need .rofixup entires. */ + Elf_Internal_Rela *internal_relocs, *end; + internal_relocs = elf_section_data (s)->relocs; + if (internal_relocs == NULL) + internal_relocs = (_bfd_elf_link_read_relocs (ibfd, s, NULL, NULL, FALSE)); + if (internal_relocs != NULL) + { + end = internal_relocs + s->reloc_count; + while (internal_relocs < end) + { + Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd); + unsigned long r_symndx; + struct elf_link_hash_entry *h; + + symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (ibfd); + r_symndx = ELF32_R_SYM (internal_relocs->r_info); + h = NULL; + if (r_symndx < symtab_hdr->sh_info) + { + } + 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; + } + + /* Don't generate entries for weak symbols. */ + if (!h || (h && h->root.type != bfd_link_hash_undefweak)) + { + if (!elf_discarded_section (s) && !((bfd_get_section_flags (ibfd, s) & SEC_ALLOC) == 0)) + { + switch (ELF32_R_TYPE (internal_relocs->r_info)) + { + case R_LM32_32: + r32_count++; + break; + case R_LM32_16_GOT: + rgot_count++; + break; + } + } + } + else + { + struct weak_symbol_list *current, *new_entry; + /* Is this symbol already in the list? */ + for (current = list_start; current; current = current->next) + { + if (!strcmp (current->name, h->root.root.string)) + break; + } + if (!current && !elf_discarded_section (s) && (bfd_get_section_flags (ibfd, s) & SEC_ALLOC)) + { + /* Will this have an entry in the GOT. */ + if (ELF32_R_TYPE (internal_relocs->r_info) == R_LM32_16_GOT) + { + /* Create a new entry. */ + new_entry = malloc (sizeof (struct weak_symbol_list)); + if (!new_entry) + return FALSE; + new_entry->name = h->root.root.string; + new_entry->next = NULL; + /* Add to list */ + if (list_start == NULL) + { + list_start = new_entry; + list_end = new_entry; + } + else + { + list_end->next = new_entry; + list_end = new_entry; + } + /* Increase count of undefined weak symbols in the got. */ + rgot_weak_count++; + } + } + } + internal_relocs++; + } + } + else + return FALSE; + } + } + } + /* Free list. */ + while (list_start) + { + list_end = list_start->next; + free (list_start); + list_start = list_end; + } + + /* Size sections. */ + lm32fdpic_fixup32_section (info)->size = (r32_count + (htab->sgot->size / 4) - rgot_weak_count + 1) * 4; + if (lm32fdpic_fixup32_section (info)->size == 0) + lm32fdpic_fixup32_section (info)->flags |= SEC_EXCLUDE; + else + { + lm32fdpic_fixup32_section (info)->contents = + bfd_zalloc (dynobj, lm32fdpic_fixup32_section (info)->size); + if (lm32fdpic_fixup32_section (info)->contents == NULL) + return FALSE; + } + } + + return TRUE; +} + +/* Create dynamic sections when linking against a dynamic object. */ + +static bfd_boolean +lm32_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) +{ + struct elf_lm32_link_hash_table *htab; + flagword flags, pltflags; + asection *s; + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + int ptralign = 2; /* 32bit */ + + htab = lm32_elf_hash_table (info); + + /* Make sure we have a GOT - For the case where we have a dynamic object + but none of the relocs in check_relocs */ + if (! create_got_section (abfd, info)) + return FALSE; + if (IS_FDPIC (abfd) && (htab->sfixup32 == NULL)) + { + if (! create_rofixup_section (abfd, info)) + return FALSE; + } + + /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and + .rel[a].bss sections. */ + flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY + | SEC_LINKER_CREATED); + + pltflags = flags; + pltflags |= SEC_CODE; + if (bed->plt_not_loaded) + pltflags &= ~ (SEC_LOAD | SEC_HAS_CONTENTS); + if (bed->plt_readonly) + pltflags |= SEC_READONLY; + + s = bfd_make_section_with_flags (abfd, ".plt", pltflags); + htab->splt = s; + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment)) + return FALSE; + + if (bed->want_plt_sym) + { + /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the + .plt section. */ + struct bfd_link_hash_entry *bh = NULL; + struct elf_link_hash_entry *h; + + if (! (_bfd_generic_link_add_one_symbol + (info, abfd, "_PROCEDURE_LINKAGE_TABLE_", BSF_GLOBAL, s, + (bfd_vma) 0, NULL, FALSE, + get_elf_backend_data (abfd)->collect, &bh))) + return FALSE; + h = (struct elf_link_hash_entry *) bh; + h->def_regular = 1; + h->type = STT_OBJECT; + htab->root.hplt = h; + + if (info->shared + && ! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + s = bfd_make_section_with_flags (abfd, + bed->default_use_rela_p ? ".rela.plt" : ".rel.plt", + flags | SEC_READONLY); + htab->srelplt = s; + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + + if (htab->sgot == NULL + && ! create_got_section (abfd, info)) + return FALSE; + + { + const char *secname; + char *relname; + flagword secflags; + asection *sec; + + for (sec = abfd->sections; sec; sec = sec->next) + { + secflags = bfd_get_section_flags (abfd, sec); + if ((secflags & (SEC_DATA | SEC_LINKER_CREATED)) + || ((secflags & SEC_HAS_CONTENTS) != SEC_HAS_CONTENTS)) + continue; + secname = bfd_get_section_name (abfd, sec); + relname = bfd_malloc ((bfd_size_type) strlen (secname) + 6); + strcpy (relname, ".rela"); + strcat (relname, secname); + if (bfd_get_section_by_name (abfd, secname)) + continue; + s = bfd_make_section_with_flags (abfd, relname, + flags | SEC_READONLY); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + } + } + + if (bed->want_dynbss) + { + /* The .dynbss section is a place to put symbols which are defined + by dynamic objects, are referenced by regular objects, and are + not functions. We must allocate space for them in the process + 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_with_flags (abfd, ".dynbss", + SEC_ALLOC | SEC_LINKER_CREATED); + htab->sdynbss = s; + if (s == NULL) + return FALSE; + /* The .rel[a].bss section holds copy relocs. This section is not + normally needed. We need to create it here, though, so that the + linker will map it to an output section. We can't just create it + only if we need it, because we will not know whether we need it + until we have seen all the input files, and the first time the + main linker code calls BFD after examining all the input files + (size_dynamic_sections) the input sections have already been + mapped to the output sections. If the section turns out not to + be needed, we can discard it later. We will never need this + section when generating a shared object, since they do not use + copy relocs. */ + if (! info->shared) + { + s = bfd_make_section_with_flags (abfd, + (bed->default_use_rela_p + ? ".rela.bss" : ".rel.bss"), + flags | SEC_READONLY); + htab->srelbss = s; + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, ptralign)) + return FALSE; + } + } + + return TRUE; +} + +/* Copy the extra info we tack onto an elf_link_hash_entry. */ + +static void +lm32_elf_copy_indirect_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *dir, + struct elf_link_hash_entry *ind) +{ + struct elf_lm32_link_hash_entry * edir; + struct elf_lm32_link_hash_entry * eind; + + edir = (struct elf_lm32_link_hash_entry *) dir; + eind = (struct elf_lm32_link_hash_entry *) ind; + + if (eind->dyn_relocs != NULL) + { + if (edir->dyn_relocs != NULL) + { + struct elf_lm32_dyn_relocs **pp; + struct elf_lm32_dyn_relocs *p; + + /* Add reloc counts against the indirect sym to the direct sym + list. Merge any entries against the same section. */ + for (pp = &eind->dyn_relocs; (p = *pp) != NULL;) + { + struct elf_lm32_dyn_relocs *q; + + for (q = edir->dyn_relocs; q != NULL; q = q->next) + if (q->sec == p->sec) + { + q->pc_count += p->pc_count; + q->count += p->count; + *pp = p->next; + break; + } + if (q == NULL) + pp = &p->next; + } + *pp = edir->dyn_relocs; + } + + edir->dyn_relocs = eind->dyn_relocs; + eind->dyn_relocs = NULL; + } + + _bfd_elf_link_hash_copy_indirect (info, dir, ind); +} + +static bfd_boolean +lm32_elf_always_size_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + if (!info->relocatable) + { + struct elf_link_hash_entry *h; + + /* Force a PT_GNU_STACK segment to be created. */ + if (! elf_tdata (output_bfd)->stack_flags) + elf_tdata (output_bfd)->stack_flags = PF_R | PF_W | PF_X; + + /* Define __stacksize if it's not defined yet. */ + h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize", + FALSE, FALSE, FALSE); + if (! h || h->root.type != bfd_link_hash_defined + || h->type != STT_OBJECT + || !h->def_regular) + { + struct bfd_link_hash_entry *bh = NULL; + + if (!(_bfd_generic_link_add_one_symbol + (info, output_bfd, "__stacksize", + BSF_GLOBAL, bfd_abs_section_ptr, DEFAULT_STACK_SIZE, + (const char *) NULL, FALSE, + get_elf_backend_data (output_bfd)->collect, &bh))) + return FALSE; + + h = (struct elf_link_hash_entry *) bh; + h->def_regular = 1; + h->type = STT_OBJECT; + /* This one must NOT be hidden. */ + } + } + + return TRUE; +} + +static bfd_boolean +lm32_elf_modify_segment_map (bfd *output_bfd, + struct bfd_link_info *info) +{ + struct elf_segment_map *m; + + /* objcopy and strip preserve what's already there using elf32_lm32fdpic_copy_ + private_bfd_data (). */ + if (! info) + return TRUE; + + for (m = elf_tdata (output_bfd)->segment_map; m != NULL; m = m->next) + 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); + 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; + 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; + + /* 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++; + } + } + + return TRUE; +} + +static bfd_boolean +lm32_elf_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; + + if (! info) + return TRUE; + + for (p = tdata->phdr, m = tdata->segment_map; m != NULL; m = m->next, p++) + if (m->p_type == PT_GNU_STACK) + break; + + if (m) + { + struct elf_link_hash_entry *h; + + /* Obtain the pointer to the __stacksize symbol. */ + h = elf_link_hash_lookup (elf_hash_table (info), "__stacksize", + FALSE, FALSE, FALSE); + if (h) + { + 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; + BFD_ASSERT (h->root.type == bfd_link_hash_defined); + } + + /* 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; + + p->p_align = 8; + } + + return TRUE; +} + + +static bfd_boolean +lm32_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; + + BFD_ASSERT (!elf_flags_init (obfd) + || elf_elfheader (obfd)->e_flags == elf_elfheader (ibfd)->e_flags); + + 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; +} + + +static bfd_boolean +lm32_elf_fdpic_copy_private_bfd_data (bfd *ibfd, bfd *obfd) +{ + unsigned i; + + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour + || bfd_get_flavour (obfd) != bfd_target_elf_flavour) + return TRUE; + + if (! lm32_elf_copy_private_bfd_data (ibfd, obfd)) + return FALSE; + + if (! elf_tdata (ibfd) || ! elf_tdata (ibfd)->phdr + || ! elf_tdata (obfd) || ! elf_tdata (obfd)->phdr) + return TRUE; + + /* Copy the stack size. */ + for (i = 0; i < elf_elfheader (ibfd)->e_phnum; i++) + if (elf_tdata (ibfd)->phdr[i].p_type == PT_GNU_STACK) + { + Elf_Internal_Phdr *iphdr = &elf_tdata (ibfd)->phdr[i]; + + for (i = 0; i < elf_elfheader (obfd)->e_phnum; i++) + if (elf_tdata (obfd)->phdr[i].p_type == PT_GNU_STACK) + { + memcpy (&elf_tdata (obfd)->phdr[i], iphdr, sizeof (*iphdr)); + + /* Rewrite the phdrs, since we're only called after they were first written. */ + if (bfd_seek (obfd, (bfd_signed_vma) get_elf_backend_data (obfd) + ->s->sizeof_ehdr, SEEK_SET) != 0 + || get_elf_backend_data (obfd)->s->write_out_phdrs (obfd, elf_tdata (obfd)->phdr, + elf_elfheader (obfd)->e_phnum) != 0) + return FALSE; + break; + } + + break; + } + + return TRUE; +} + + +#define ELF_ARCH bfd_arch_lm32 +#define ELF_MACHINE_CODE EM_LATTICEMICO32 +#define ELF_MAXPAGESIZE 0x1000 + +#define TARGET_BIG_SYM bfd_elf32_lm32_vec +#define TARGET_BIG_NAME "elf32-lm32" + +#define bfd_elf32_bfd_reloc_type_lookup lm32_reloc_type_lookup +#define bfd_elf32_bfd_reloc_name_lookup lm32_reloc_name_lookup +#define elf_info_to_howto lm32_info_to_howto_rela +#define elf_info_to_howto_rel 0 +#define elf_backend_rela_normal 1 +#define elf_backend_object_p lm32_elf_object_p +#define elf_backend_final_write_processing lm32_elf_final_write_processing +#define elf_backend_can_gc_sections 1 +#define elf_backend_can_refcount 1 +#define elf_backend_gc_mark_hook lm32_elf_gc_mark_hook +#define elf_backend_gc_sweep_hook lm32_elf_gc_sweep_hook +#define elf_backend_plt_readonly 1 +#define elf_backend_want_got_plt 1 +#define elf_backend_want_plt_sym 0 +#define elf_backend_got_header_size 12 +#define bfd_elf32_bfd_link_hash_table_create lm32_elf_link_hash_table_create +#define elf_backend_check_relocs lm32_elf_check_relocs +#define elf_backend_reloc_type_class lm32_elf_reloc_type_class +#define elf_backend_copy_indirect_symbol lm32_elf_copy_indirect_symbol +#define elf_backend_size_dynamic_sections lm32_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 lm32_elf_create_dynamic_sections +#define elf_backend_finish_dynamic_sections lm32_elf_finish_dynamic_sections +#define elf_backend_adjust_dynamic_symbol lm32_elf_adjust_dynamic_symbol +#define elf_backend_finish_dynamic_symbol lm32_elf_finish_dynamic_symbol +#define elf_backend_relocate_section lm32_elf_relocate_section + +#include "elf32-target.h" + +#undef ELF_MAXPAGESIZE +#define ELF_MAXPAGESIZE 0x4000 + + +#undef TARGET_BIG_SYM +#define TARGET_BIG_SYM bfd_elf32_lm32fdpic_vec +#undef TARGET_BIG_NAME +#define TARGET_BIG_NAME "elf32-lm32fdpic" +#undef elf32_bed +#define elf32_bed elf32_lm32fdpic_bed + +#undef elf_backend_always_size_sections +#define elf_backend_always_size_sections lm32_elf_always_size_sections +#undef elf_backend_modify_segment_map +#define elf_backend_modify_segment_map lm32_elf_modify_segment_map +#undef elf_backend_modify_program_headers +#define elf_backend_modify_program_headers lm32_elf_modify_program_headers +#undef bfd_elf32_bfd_copy_private_bfd_data +#define bfd_elf32_bfd_copy_private_bfd_data lm32_elf_fdpic_copy_private_bfd_data + +#include "elf32-target.h" diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c index 6c9a825..4de500a 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, 2007 + Copyright (C) 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -597,7 +597,6 @@ m32c_elf_check_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; bfd_vma *local_plt_offsets; @@ -613,10 +612,6 @@ m32c_elf_check_relocs splt = NULL; dynobj = elf_hash_table(info)->dynobj; - 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++) { @@ -852,7 +847,7 @@ m32c_elf_print_private_bfd_data (bfd *abfd, PTR ptr) _bfd_elf_print_private_bfd_data (abfd, ptr); flags = elf_elfheader (abfd)->e_flags; - fprintf (file, _("private flags = 0x%lx:"), (long)flags); + fprintf (file, _("private flags = 0x%lx:"), (unsigned long) flags); switch (flags & EF_M32C_CPU_MASK) { @@ -1956,13 +1951,24 @@ m32c_elf_relax_delete_bytes for (; isym < isymend; isym++, shndx = (shndx ? shndx + 1 : NULL)) { - + /* If the symbol is in the range of memory we just moved, we + have to adjust its value. */ if ((int) isym->st_shndx == sec_shndx && isym->st_value > addr && isym->st_value < toaddr) { isym->st_value -= count; } + /* If the symbol *spans* the bytes we just deleted (i.e. it's + *end* is in the moved bytes but it's *start* isn't), then we + must adjust its size. */ + if ((int) isym->st_shndx == sec_shndx + && isym->st_value < addr + && isym->st_value + isym->st_size > addr + && isym->st_value + isym->st_size < toaddr) + { + isym->st_size -= count; + } } /* Now adjust the global symbols defined in this section. */ @@ -1977,22 +1983,41 @@ m32c_elf_relax_delete_bytes struct elf_link_hash_entry * sym_hash = * sym_hashes; if (sym_hash && - ( sym_hash->root.type == bfd_link_hash_defined + (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.section == sec) { - sym_hash->root.u.def.value -= count; + if (sym_hash->root.u.def.value > addr + && sym_hash->root.u.def.value < toaddr) + { + sym_hash->root.u.def.value -= count; + } + if (sym_hash->root.u.def.value < addr + && sym_hash->root.u.def.value + sym_hash->size > addr + && sym_hash->root.u.def.value + sym_hash->size < toaddr) + { + sym_hash->size -= count; + } } } return TRUE; } + +/* This is for versions of gcc prior to 4.3. */ +static unsigned int +_bfd_m32c_elf_eh_frame_address_size (bfd *abfd, asection *sec ATTRIBUTE_UNUSED) +{ + if ((elf_elfheader (abfd)->e_flags & EF_M32C_CPU_MASK) == EF_M32C_CPU_M16C) + return 2; + return 4; +} + #define ELF_ARCH bfd_arch_m32c #define ELF_MACHINE_CODE EM_M32C +#define ELF_MACHINE_ALT1 EM_M32C_OLD #define ELF_MAXPAGESIZE 0x1000 #if 0 @@ -2016,6 +2041,7 @@ m32c_elf_relax_delete_bytes m32c_elf_finish_dynamic_sections #define elf_backend_can_gc_sections 1 +#define elf_backend_eh_frame_address_size _bfd_m32c_elf_eh_frame_address_size #define bfd_elf32_bfd_reloc_type_lookup m32c_reloc_type_lookup #define bfd_elf32_bfd_reloc_name_lookup m32c_reloc_name_lookup diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index 6a4fd18..bd2fd99 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, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1526,8 +1526,8 @@ struct elf_m32r_link_hash_table asection *sdynbss; asection *srelbss; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; }; /* Traverse an m32r ELF linker hash table. */ @@ -1604,7 +1604,7 @@ m32r_elf_link_hash_table_create (bfd *abfd) ret->srelplt = NULL; ret->sdynbss = NULL; ret->srelbss = NULL; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; return &ret->root.root; } @@ -1623,20 +1623,10 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab = m32r_elf_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (! htab->sgot || ! htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; - return TRUE; } @@ -2911,22 +2901,10 @@ m32r_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, time. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) + return FALSE; } skip = FALSE; @@ -3654,6 +3632,9 @@ m32r_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; @@ -3766,7 +3747,7 @@ m32r_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; struct elf_m32r_link_hash_table *htab; @@ -3781,9 +3762,6 @@ m32r_elf_check_relocs (bfd *abfd, 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; htab = m32r_elf_hash_table (info); dynobj = htab->root.dynobj; @@ -3950,36 +3928,11 @@ m32r_elf_check_relocs (bfd *abfd, section in dynobj and make room for the reloc. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + if (sreloc == NULL) + return FALSE; } /* If this is a global symbol, we count the number of @@ -3988,14 +3941,19 @@ m32r_elf_check_relocs (bfd *abfd, head = &((struct elf_m32r_link_hash_entry *) h)->dyn_relocs; else { + /* Track dynamic relocs needed for local syms too. */ asection *s; void *vpp; + Elf_Internal_Sym *isym; - /* Track dynamic relocs needed for local syms too. */ - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) - return FALSE; + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; vpp = &elf_section_data (s)->local_dynrel; head = (struct elf_m32r_dyn_relocs **) vpp; @@ -4036,11 +3994,15 @@ m32r_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_M32R_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) return FALSE; break; case R_M32R_RELA_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c index 5a980df..544db35 100644 --- a/bfd/elf32-m68hc1x.c +++ b/bfd/elf32-m68hc1x.c @@ -1,6 +1,6 @@ /* Motorola 68HC11/HC12-specific support for 32-bit ELF - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@nerim.fr) This file is part of BFD, the Binary File Descriptor library. @@ -20,6 +20,7 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "alloca-conf.h" #include "sysdep.h" #include "bfd.h" #include "bfdlink.h" @@ -94,7 +95,7 @@ m68hc11_elf_hash_table_create (bfd *abfd) ret->stub_bfd = NULL; ret->stub_section = 0; ret->add_stub_section = NULL; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; return ret; } @@ -232,7 +233,7 @@ elf32_m68hc11_setup_section_lists (bfd *output_bfd, struct bfd_link_info *info) htab = m68hc11_elf_hash_table (info); - if (htab->root.root.creator->flavour != bfd_target_elf_flavour) + if (bfd_get_flavour (info->output_bfd) != bfd_target_elf_flavour) return 0; /* Count the number of input BFDs and find the top input section id. @@ -450,8 +451,13 @@ elf32_m68hc11_size_stubs (bfd *output_bfd, bfd *stub_bfd, if (!is_far) continue; - hdr = elf_elfsections (input_bfd)[sym->st_shndx]; - sym_sec = hdr->bfd_section; + if (sym->st_shndx >= elf_numsections (input_bfd)) + sym_sec = NULL; + else + { + hdr = elf_elfsections (input_bfd)[sym->st_shndx]; + sym_sec = hdr->bfd_section; + } stub_name = (bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link, sym->st_name)); @@ -821,7 +827,6 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info, { 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; @@ -830,10 +835,6 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info, 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++) @@ -865,7 +866,9 @@ elf32_m68hc11_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_M68HC11_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-m68hc1x.h b/bfd/elf32-m68hc1x.h index 2bf636d..5bc547a 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, 2005, 2006, 2007 Free Software Foundation, Inc. + Copyright 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by Stephane Carrez (stcarrez@nerim.fr) This file is part of BFD, the Binary File Descriptor library. @@ -120,8 +120,8 @@ struct m68hc11_elf_link_hash_table int top_index; asection **input_list; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; bfd_boolean (* size_one_stub) PARAMS((struct bfd_hash_entry*, void*)); bfd_boolean (* build_one_stub) PARAMS((struct bfd_hash_entry*, void*)); diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index ffa1668..f85aba0 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -114,6 +114,263 @@ static reloc_howto_type howto_table[] = { 0, /* src_mask */ 0, /* dst_mask */ FALSE), + + /* TLS general dynamic variable reference. */ + HOWTO (R_68K_TLS_GD32, /* 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, /* special_function */ + "R_68K_TLS_GD32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_GD16, /* 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_68K_TLS_GD16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_GD8, /* 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_68K_TLS_GD8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x000000ff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* TLS local dynamic variable reference. */ + HOWTO (R_68K_TLS_LDM32, /* 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, /* special_function */ + "R_68K_TLS_LDM32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LDM16, /* 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_68K_TLS_LDM16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LDM8, /* 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_68K_TLS_LDM8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x000000ff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LDO32, /* 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, /* special_function */ + "R_68K_TLS_LDO32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LDO16, /* 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_68K_TLS_LDO16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LDO8, /* 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_68K_TLS_LDO8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x000000ff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* TLS initial execution variable reference. */ + HOWTO (R_68K_TLS_IE32, /* 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, /* special_function */ + "R_68K_TLS_IE32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_IE16, /* 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_68K_TLS_IE16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_IE8, /* 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_68K_TLS_IE8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x000000ff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* TLS local execution variable reference. */ + HOWTO (R_68K_TLS_LE32, /* 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, /* special_function */ + "R_68K_TLS_LE32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LE16, /* 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_68K_TLS_LE16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_LE8, /* 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_68K_TLS_LE8", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0x000000ff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* TLS GD/LD dynamic relocations. */ + HOWTO (R_68K_TLS_DTPMOD32, /* 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_68K_TLS_DTPMOD32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_DTPREL32, /* 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_68K_TLS_DTPREL32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_68K_TLS_TPREL32, /* 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_68K_TLS_TPREL32", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ }; static void @@ -132,7 +389,9 @@ static const struct { bfd_reloc_code_real_type bfd_val; int elf_val; -} reloc_map[] = { +} + reloc_map[] = +{ { BFD_RELOC_NONE, R_68K_NONE }, { BFD_RELOC_32, R_68K_32 }, { BFD_RELOC_16, R_68K_16 }, @@ -159,6 +418,21 @@ static const struct { BFD_RELOC_CTOR, R_68K_32 }, { BFD_RELOC_VTABLE_INHERIT, R_68K_GNU_VTINHERIT }, { BFD_RELOC_VTABLE_ENTRY, R_68K_GNU_VTENTRY }, + { BFD_RELOC_68K_TLS_GD32, R_68K_TLS_GD32 }, + { BFD_RELOC_68K_TLS_GD16, R_68K_TLS_GD16 }, + { BFD_RELOC_68K_TLS_GD8, R_68K_TLS_GD8 }, + { BFD_RELOC_68K_TLS_LDM32, R_68K_TLS_LDM32 }, + { BFD_RELOC_68K_TLS_LDM16, R_68K_TLS_LDM16 }, + { BFD_RELOC_68K_TLS_LDM8, R_68K_TLS_LDM8 }, + { BFD_RELOC_68K_TLS_LDO32, R_68K_TLS_LDO32 }, + { BFD_RELOC_68K_TLS_LDO16, R_68K_TLS_LDO16 }, + { BFD_RELOC_68K_TLS_LDO8, R_68K_TLS_LDO8 }, + { BFD_RELOC_68K_TLS_IE32, R_68K_TLS_IE32 }, + { BFD_RELOC_68K_TLS_IE16, R_68K_TLS_IE16 }, + { BFD_RELOC_68K_TLS_IE8, R_68K_TLS_IE8 }, + { BFD_RELOC_68K_TLS_LE32, R_68K_TLS_LE32 }, + { BFD_RELOC_68K_TLS_LE16, R_68K_TLS_LE16 }, + { BFD_RELOC_68K_TLS_LE8, R_68K_TLS_LE8 }, }; static reloc_howto_type * @@ -267,7 +541,7 @@ static const struct elf_m68k_plt_info elf_m68k_plt_info = { elf_m68k_plt_entry, { 4, 16 }, 8 }; -#define ISAB_PLT_ENTRY_SIZE 24 +#define ISAB_PLT_ENTRY_SIZE 24 static const bfd_byte elf_isab_plt0_entry[ISAB_PLT_ENTRY_SIZE] = { @@ -301,7 +575,7 @@ static const struct elf_m68k_plt_info elf_isab_plt_info = { elf_isab_plt_entry, { 2, 20 }, 12 }; -#define ISAC_PLT_ENTRY_SIZE 24 +#define ISAC_PLT_ENTRY_SIZE 24 static const bfd_byte elf_isac_plt0_entry[ISAC_PLT_ENTRY_SIZE] = { @@ -385,6 +659,9 @@ struct elf_m68k_pcrel_relocs_copied bfd_size_type count; }; +/* Forward declaration. */ +struct elf_m68k_got_entry; + /* m68k ELF linker hash entry. */ struct elf_m68k_link_hash_entry @@ -393,22 +670,264 @@ struct elf_m68k_link_hash_entry /* Number of PC relative relocs copied for this symbol. */ struct elf_m68k_pcrel_relocs_copied *pcrel_relocs_copied; + + /* Key to got_entries. */ + unsigned long got_entry_key; + + /* List of GOT entries for this symbol. This list is build during + offset finalization and is used within elf_m68k_finish_dynamic_symbol + to traverse all GOT entries for a particular symbol. + + ??? We could've used root.got.glist field instead, but having + a separate field is cleaner. */ + struct elf_m68k_got_entry *glist; }; #define elf_m68k_hash_entry(ent) ((struct elf_m68k_link_hash_entry *) (ent)) +/* Key part of GOT entry in hashtable. */ +struct elf_m68k_got_entry_key +{ + /* BFD in which this symbol was defined. NULL for global symbols. */ + const bfd *bfd; + + /* Symbol index. Either local symbol index or h->got_entry_key. */ + unsigned long symndx; + + /* Type is one of R_68K_GOT{8, 16, 32}O, R_68K_TLS_GD{8, 16, 32}, + R_68K_TLS_LDM{8, 16, 32} or R_68K_TLS_IE{8, 16, 32}. + + From perspective of hashtable key, only elf_m68k_got_reloc_type (type) + matters. That is, we distinguish between, say, R_68K_GOT16O + and R_68K_GOT32O when allocating offsets, but they are considered to be + the same when searching got->entries. */ + enum elf_m68k_reloc_type type; +}; + +/* Size of the GOT offset suitable for relocation. */ +enum elf_m68k_got_offset_size { R_8, R_16, R_32, R_LAST }; + +/* Entry of the GOT. */ +struct elf_m68k_got_entry +{ + /* GOT entries are put into a got->entries hashtable. This is the key. */ + struct elf_m68k_got_entry_key key_; + + /* GOT entry data. We need s1 before offset finalization and s2 after. */ + union + { + struct + { + /* Number of times this entry is referenced. It is used to + filter out unnecessary GOT slots in elf_m68k_gc_sweep_hook. */ + bfd_vma refcount; + } s1; + + struct + { + /* Offset from the start of .got section. To calculate offset relative + to GOT pointer one should substract got->offset from this value. */ + bfd_vma offset; + + /* Pointer to the next GOT entry for this global symbol. + Symbols have at most one entry in one GOT, but might + have entries in more than one GOT. + Root of this list is h->glist. + NULL for local symbols. */ + struct elf_m68k_got_entry *next; + } s2; + } u; +}; + +/* Return representative type for relocation R_TYPE. + This is used to avoid enumerating many relocations in comparisons, + switches etc. */ + +static enum elf_m68k_reloc_type +elf_m68k_reloc_got_type (enum elf_m68k_reloc_type r_type) +{ + switch (r_type) + { + /* In most cases R_68K_GOTx relocations require the very same + handling as R_68K_GOT32O relocation. In cases when we need + to distinguish between the two, we use explicitly compare against + r_type. */ + case R_68K_GOT32: + case R_68K_GOT16: + case R_68K_GOT8: + case R_68K_GOT32O: + case R_68K_GOT16O: + case R_68K_GOT8O: + return R_68K_GOT32O; + + case R_68K_TLS_GD32: + case R_68K_TLS_GD16: + case R_68K_TLS_GD8: + return R_68K_TLS_GD32; + + case R_68K_TLS_LDM32: + case R_68K_TLS_LDM16: + case R_68K_TLS_LDM8: + return R_68K_TLS_LDM32; + + case R_68K_TLS_IE32: + case R_68K_TLS_IE16: + case R_68K_TLS_IE8: + return R_68K_TLS_IE32; + + default: + BFD_ASSERT (FALSE); + return 0; + } +} + +/* Return size of the GOT entry offset for relocation R_TYPE. */ + +static enum elf_m68k_got_offset_size +elf_m68k_reloc_got_offset_size (enum elf_m68k_reloc_type r_type) +{ + switch (r_type) + { + case R_68K_GOT32: case R_68K_GOT16: case R_68K_GOT8: + case R_68K_GOT32O: case R_68K_TLS_GD32: case R_68K_TLS_LDM32: + case R_68K_TLS_IE32: + return R_32; + + case R_68K_GOT16O: case R_68K_TLS_GD16: case R_68K_TLS_LDM16: + case R_68K_TLS_IE16: + return R_16; + + case R_68K_GOT8O: case R_68K_TLS_GD8: case R_68K_TLS_LDM8: + case R_68K_TLS_IE8: + return R_8; + + default: + BFD_ASSERT (FALSE); + return 0; + } +} + +/* Return number of GOT entries we need to allocate in GOT for + relocation R_TYPE. */ + +static bfd_vma +elf_m68k_reloc_got_n_slots (enum elf_m68k_reloc_type r_type) +{ + switch (elf_m68k_reloc_got_type (r_type)) + { + case R_68K_GOT32O: + case R_68K_TLS_IE32: + return 1; + + case R_68K_TLS_GD32: + case R_68K_TLS_LDM32: + return 2; + + default: + BFD_ASSERT (FALSE); + return 0; + } +} + +/* Return TRUE if relocation R_TYPE is a TLS one. */ + +static bfd_boolean +elf_m68k_reloc_tls_p (enum elf_m68k_reloc_type r_type) +{ + switch (r_type) + { + case R_68K_TLS_GD32: case R_68K_TLS_GD16: case R_68K_TLS_GD8: + case R_68K_TLS_LDM32: case R_68K_TLS_LDM16: case R_68K_TLS_LDM8: + case R_68K_TLS_LDO32: case R_68K_TLS_LDO16: case R_68K_TLS_LDO8: + case R_68K_TLS_IE32: case R_68K_TLS_IE16: case R_68K_TLS_IE8: + case R_68K_TLS_LE32: case R_68K_TLS_LE16: case R_68K_TLS_LE8: + case R_68K_TLS_DTPMOD32: case R_68K_TLS_DTPREL32: case R_68K_TLS_TPREL32: + return TRUE; + + default: + return FALSE; + } +} + +/* Data structure representing a single GOT. */ +struct elf_m68k_got +{ + /* Hashtable of 'struct elf_m68k_got_entry's. + Starting size of this table is the maximum number of + R_68K_GOT8O entries. */ + htab_t entries; + + /* Number of R_x slots in this GOT. Some (e.g., TLS) entries require + several GOT slots. + + n_slots[R_8] is the count of R_8 slots in this GOT. + n_slots[R_16] is the cumulative count of R_8 and R_16 slots + in this GOT. + n_slots[R_32] is the cumulative count of R_8, R_16 and R_32 slots + in this GOT. This is the total number of slots. */ + bfd_vma n_slots[R_LAST]; + + /* Number of local (entry->key_.h == NULL) slots in this GOT. + This is only used to properly calculate size of .rela.got section; + see elf_m68k_partition_multi_got. */ + bfd_vma local_n_slots; + + /* Offset of this GOT relative to beginning of .got section. */ + bfd_vma offset; +}; + +/* BFD and its GOT. This is an entry in multi_got->bfd2got hashtable. */ +struct elf_m68k_bfd2got_entry +{ + /* BFD. */ + const bfd *bfd; + + /* Assigned GOT. Before partitioning multi-GOT each BFD has its own + GOT structure. After partitioning several BFD's might [and often do] + share a single GOT. */ + struct elf_m68k_got *got; +}; + +/* The main data structure holding all the pieces. */ +struct elf_m68k_multi_got +{ + /* Hashtable mapping each BFD to its GOT. If a BFD doesn't have an entry + here, then it doesn't need a GOT (this includes the case of a BFD + having an empty GOT). + + ??? This hashtable can be replaced by an array indexed by bfd->id. */ + htab_t bfd2got; + + /* Next symndx to assign a global symbol. + h->got_entry_key is initialized from this counter. */ + unsigned long global_symndx; +}; + /* m68k ELF linker hash table. */ struct elf_m68k_link_hash_table { struct elf_link_hash_table root; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; /* 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; + + /* True, if GP is loaded within each function which uses it. + Set to TRUE when GOT negative offsets or multi-GOT is enabled. */ + bfd_boolean local_gp_p; + + /* Switch controlling use of negative offsets to double the size of GOTs. */ + bfd_boolean use_neg_got_offsets_p; + + /* Switch controlling generation of multiple GOTs. */ + bfd_boolean allow_multigot_p; + + /* Multi-GOT data structure. */ + struct elf_m68k_multi_got multi_got_; }; /* Get the m68k ELF linker hash table from a link_info structure. */ @@ -416,6 +935,9 @@ struct elf_m68k_link_hash_table #define elf_m68k_hash_table(p) \ ((struct elf_m68k_link_hash_table *) (p)->hash) +/* Shortcut to multi-GOT data. */ +#define elf_m68k_multi_got(INFO) (&elf_m68k_hash_table (INFO)->multi_got_) + /* Create an entry in an m68k ELF linker hash table. */ static struct bfd_hash_entry * @@ -437,7 +959,11 @@ elf_m68k_link_hash_newfunc (entry, table, string) /* Call the allocation method of the superclass. */ ret = _bfd_elf_link_hash_newfunc (ret, table, string); if (ret != NULL) - elf_m68k_hash_entry (ret)->pcrel_relocs_copied = NULL; + { + elf_m68k_hash_entry (ret)->pcrel_relocs_copied = NULL; + elf_m68k_hash_entry (ret)->got_entry_key = 0; + elf_m68k_hash_entry (ret)->glist = NULL; + } return ret; } @@ -463,12 +989,33 @@ elf_m68k_link_hash_table_create (abfd) return NULL; } - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; ret->plt_info = NULL; + ret->local_gp_p = FALSE; + ret->use_neg_got_offsets_p = FALSE; + ret->allow_multigot_p = FALSE; + ret->multi_got_.bfd2got = NULL; + ret->multi_got_.global_symndx = 1; return &ret->root.root; } +/* Destruct local data. */ + +static void +elf_m68k_link_hash_table_free (struct bfd_link_hash_table *_htab) +{ + struct elf_m68k_link_hash_table *htab; + + htab = (struct elf_m68k_link_hash_table *) _htab; + + if (htab->multi_got_.bfd2got != NULL) + { + htab_delete (htab->multi_got_.bfd2got); + htab->multi_got_.bfd2got = NULL; + } +} + /* Set the right machine number. */ static bfd_boolean @@ -506,6 +1053,9 @@ elf32_m68k_object_p (bfd *abfd) case EF_M68K_CF_ISA_C: features |= mcfisa_a|mcfisa_c|mcfhwdiv|mcfusp; break; + case EF_M68K_CF_ISA_C_NODIV: + features |= mcfisa_a|mcfisa_c|mcfusp; + break; } switch (eflags & EF_M68K_CF_MAC_MASK) { @@ -549,7 +1099,7 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd) flagword out_isa; flagword in_isa; const bfd_arch_info_type *arch_info; - + if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour || bfd_get_flavour (obfd) != bfd_target_elf_flavour) return FALSE; @@ -562,7 +1112,7 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd) return FALSE; bfd_set_arch_mach (obfd, bfd_arch_m68k, arch_info->mach); - + in_flags = elf_elfheader (ibfd)->e_flags; if (!elf_flags_init (obfd)) { @@ -601,10 +1151,9 @@ elf32_m68k_merge_private_bfd_data (ibfd, obfd) } /* Display the flags field. */ + static bfd_boolean -elf32_m68k_print_private_bfd_data (abfd, ptr) - bfd *abfd; - PTR ptr; +elf32_m68k_print_private_bfd_data (bfd *abfd, void * ptr) { FILE *file = (FILE *) ptr; flagword eflags = elf_elfheader (abfd)->e_flags; @@ -635,7 +1184,7 @@ elf32_m68k_print_private_bfd_data (abfd, ptr) 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: @@ -658,10 +1207,16 @@ elf32_m68k_print_private_bfd_data (abfd, ptr) case EF_M68K_CF_ISA_C: isa = "C"; break; + case EF_M68K_CF_ISA_C_NODIV: + isa = "C"; + additional = " [nodiv]"; + 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: @@ -678,11 +1233,1279 @@ elf32_m68k_print_private_bfd_data (abfd, ptr) fprintf (file, " [%s]", mac); } } - + fputc ('\n', file); - return TRUE; + return TRUE; +} + +/* Multi-GOT support implementation design: + + Multi-GOT starts in check_relocs hook. There we scan all + relocations of a BFD and build a local GOT (struct elf_m68k_got) + for it. If a single BFD appears to require too many GOT slots with + R_68K_GOT8O or R_68K_GOT16O relocations, we fail with notification + to user. + After check_relocs has been invoked for each input BFD, we have + constructed a GOT for each input BFD. + + To minimize total number of GOTs required for a particular output BFD + (as some environments support only 1 GOT per output object) we try + to merge some of the GOTs to share an offset space. Ideally [and in most + cases] we end up with a single GOT. In cases when there are too many + restricted relocations (e.g., R_68K_GOT16O relocations) we end up with + several GOTs, assuming the environment can handle them. + + Partitioning is done in elf_m68k_partition_multi_got. We start with + an empty GOT and traverse bfd2got hashtable putting got_entries from + local GOTs to the new 'big' one. We do that by constructing an + intermediate GOT holding all the entries the local GOT has and the big + GOT lacks. Then we check if there is room in the big GOT to accomodate + all the entries from diff. On success we add those entries to the big + GOT; on failure we start the new 'big' GOT and retry the adding of + entries from the local GOT. Note that this retry will always succeed as + each local GOT doesn't overflow the limits. After partitioning we + end up with each bfd assigned one of the big GOTs. GOT entries in the + big GOTs are initialized with GOT offsets. Note that big GOTs are + positioned consequently in program space and represent a single huge GOT + to the outside world. + + After that we get to elf_m68k_relocate_section. There we + adjust relocations of GOT pointer (_GLOBAL_OFFSET_TABLE_) and symbol + relocations to refer to appropriate [assigned to current input_bfd] + big GOT. + + Notes: + + GOT entry type: We have several types of GOT entries. + * R_8 type is used in entries for symbols that have at least one + R_68K_GOT8O or R_68K_TLS_*8 relocation. We can have at most 0x40 + such entries in one GOT. + * R_16 type is used in entries for symbols that have at least one + R_68K_GOT16O or R_68K_TLS_*16 relocation and no R_8 relocations. + We can have at most 0x4000 such entries in one GOT. + * R_32 type is used in all other cases. We can have as many + such entries in one GOT as we'd like. + When counting relocations we have to include the count of the smaller + ranged relocations in the counts of the larger ranged ones in order + to correctly detect overflow. + + Sorting the GOT: In each GOT starting offsets are assigned to + R_8 entries, which are followed by R_16 entries, and + R_32 entries go at the end. See finalize_got_offsets for details. + + Negative GOT offsets: To double usable offset range of GOTs we use + negative offsets. As we assign entries with GOT offsets relative to + start of .got section, the offset values are positive. They become + negative only in relocate_section where got->offset value is + subtracted from them. + + 3 special GOT entries: There are 3 special GOT entries used internally + by loader. These entries happen to be placed to .got.plt section, + so we don't do anything about them in multi-GOT support. + + Memory management: All data except for hashtables + multi_got->bfd2got and got->entries are allocated on + elf_hash_table (info)->dynobj bfd (for this reason we pass 'info' + to most functions), so we don't need to care to free them. At the + moment of allocation hashtables are being linked into main data + structure (multi_got), all pieces of which are reachable from + elf_m68k_multi_got (info). We deallocate them in + elf_m68k_link_hash_table_free. */ + +/* Initialize GOT. */ + +static void +elf_m68k_init_got (struct elf_m68k_got *got) +{ + got->entries = NULL; + got->n_slots[R_8] = 0; + got->n_slots[R_16] = 0; + got->n_slots[R_32] = 0; + got->local_n_slots = 0; + got->offset = (bfd_vma) -1; +} + +/* Destruct GOT. */ + +static void +elf_m68k_clear_got (struct elf_m68k_got *got) +{ + if (got->entries != NULL) + { + htab_delete (got->entries); + got->entries = NULL; + } +} + +/* Create and empty GOT structure. INFO is the context where memory + should be allocated. */ + +static struct elf_m68k_got * +elf_m68k_create_empty_got (struct bfd_link_info *info) +{ + struct elf_m68k_got *got; + + got = bfd_alloc (elf_hash_table (info)->dynobj, sizeof (*got)); + if (got == NULL) + return NULL; + + elf_m68k_init_got (got); + + return got; +} + +/* Initialize KEY. */ + +static void +elf_m68k_init_got_entry_key (struct elf_m68k_got_entry_key *key, + struct elf_link_hash_entry *h, + const bfd *abfd, unsigned long symndx, + enum elf_m68k_reloc_type reloc_type) +{ + if (elf_m68k_reloc_got_type (reloc_type) == R_68K_TLS_LDM32) + /* All TLS_LDM relocations share a single GOT entry. */ + { + key->bfd = NULL; + key->symndx = 0; + } + else if (h != NULL) + /* Global symbols are identified with their got_entry_key. */ + { + key->bfd = NULL; + key->symndx = elf_m68k_hash_entry (h)->got_entry_key; + BFD_ASSERT (key->symndx != 0); + } + else + /* Local symbols are identified by BFD they appear in and symndx. */ + { + key->bfd = abfd; + key->symndx = symndx; + } + + key->type = reloc_type; +} + +/* Calculate hash of got_entry. + ??? Is it good? */ + +static hashval_t +elf_m68k_got_entry_hash (const void *_entry) +{ + const struct elf_m68k_got_entry_key *key; + + key = &((const struct elf_m68k_got_entry *) _entry)->key_; + + return (key->symndx + + (key->bfd != NULL ? (int) key->bfd->id : -1) + + elf_m68k_reloc_got_type (key->type)); +} + +/* Check if two got entries are equal. */ + +static int +elf_m68k_got_entry_eq (const void *_entry1, const void *_entry2) +{ + const struct elf_m68k_got_entry_key *key1; + const struct elf_m68k_got_entry_key *key2; + + key1 = &((const struct elf_m68k_got_entry *) _entry1)->key_; + key2 = &((const struct elf_m68k_got_entry *) _entry2)->key_; + + return (key1->bfd == key2->bfd + && key1->symndx == key2->symndx + && (elf_m68k_reloc_got_type (key1->type) + == elf_m68k_reloc_got_type (key2->type))); +} + +/* When using negative offsets, we allocate one extra R_8, one extra R_16 + and one extra R_32 slots to simplify handling of 2-slot entries during + offset allocation -- hence -1 for R_8 slots and -2 for R_16 slots. */ + +/* Maximal number of R_8 slots in a single GOT. */ +#define ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT(INFO) \ + (elf_m68k_hash_table (INFO)->use_neg_got_offsets_p \ + ? (0x40 - 1) \ + : 0x20) + +/* Maximal number of R_8 and R_16 slots in a single GOT. */ +#define ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT(INFO) \ + (elf_m68k_hash_table (INFO)->use_neg_got_offsets_p \ + ? (0x4000 - 2) \ + : 0x2000) + +/* SEARCH - simply search the hashtable, don't insert new entries or fail when + the entry cannot be found. + FIND_OR_CREATE - search for an existing entry, but create new if there's + no such. + MUST_FIND - search for an existing entry and assert that it exist. + MUST_CREATE - assert that there's no such entry and create new one. */ +enum elf_m68k_get_entry_howto + { + SEARCH, + FIND_OR_CREATE, + MUST_FIND, + MUST_CREATE + }; + +/* Get or create (depending on HOWTO) entry with KEY in GOT. + INFO is context in which memory should be allocated (can be NULL if + HOWTO is SEARCH or MUST_FIND). */ + +static struct elf_m68k_got_entry * +elf_m68k_get_got_entry (struct elf_m68k_got *got, + const struct elf_m68k_got_entry_key *key, + enum elf_m68k_get_entry_howto howto, + struct bfd_link_info *info) +{ + struct elf_m68k_got_entry entry_; + struct elf_m68k_got_entry *entry; + void **ptr; + + BFD_ASSERT ((info == NULL) == (howto == SEARCH || howto == MUST_FIND)); + + if (got->entries == NULL) + /* This is the first entry in ABFD. Initialize hashtable. */ + { + if (howto == SEARCH) + return NULL; + + got->entries = htab_try_create (ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT + (info), + elf_m68k_got_entry_hash, + elf_m68k_got_entry_eq, NULL); + if (got->entries == NULL) + { + bfd_set_error (bfd_error_no_memory); + return NULL; + } + } + + entry_.key_ = *key; + ptr = htab_find_slot (got->entries, &entry_, (howto != SEARCH + ? INSERT : NO_INSERT)); + if (ptr == NULL) + { + if (howto == SEARCH) + /* Entry not found. */ + return NULL; + + /* We're out of memory. */ + bfd_set_error (bfd_error_no_memory); + return NULL; + } + + if (*ptr == NULL) + /* We didn't find the entry and we're asked to create a new one. */ + { + BFD_ASSERT (howto != MUST_FIND && howto != SEARCH); + + entry = bfd_alloc (elf_hash_table (info)->dynobj, sizeof (*entry)); + if (entry == NULL) + return NULL; + + /* Initialize new entry. */ + entry->key_ = *key; + + entry->u.s1.refcount = 0; + + /* Mark the entry as not initialized. */ + entry->key_.type = R_68K_max; + + *ptr = entry; + } + else + /* We found the entry. */ + { + BFD_ASSERT (howto != MUST_CREATE); + + entry = *ptr; + } + + return entry; +} + +/* Update GOT counters when merging entry of WAS type with entry of NEW type. + Return the value to which ENTRY's type should be set. */ + +static enum elf_m68k_reloc_type +elf_m68k_update_got_entry_type (struct elf_m68k_got *got, + enum elf_m68k_reloc_type was, + enum elf_m68k_reloc_type new_reloc) +{ + enum elf_m68k_got_offset_size was_size; + enum elf_m68k_got_offset_size new_size; + bfd_vma n_slots; + + if (was == R_68K_max) + /* The type of the entry is not initialized yet. */ + { + /* Update all got->n_slots counters, including n_slots[R_32]. */ + was_size = R_LAST; + + was = new_reloc; + } + else + { + /* !!! We, probably, should emit an error rather then fail on assert + in such a case. */ + BFD_ASSERT (elf_m68k_reloc_got_type (was) + == elf_m68k_reloc_got_type (new_reloc)); + + was_size = elf_m68k_reloc_got_offset_size (was); + } + + new_size = elf_m68k_reloc_got_offset_size (new_reloc); + n_slots = elf_m68k_reloc_got_n_slots (new_reloc); + + while (was_size > new_size) + { + --was_size; + got->n_slots[was_size] += n_slots; + } + + if (new_reloc > was) + /* Relocations are ordered from bigger got offset size to lesser, + so choose the relocation type with lesser offset size. */ + was = new_reloc; + + return was; +} + +/* Update GOT counters when removing an entry of type TYPE. */ + +static void +elf_m68k_remove_got_entry_type (struct elf_m68k_got *got, + enum elf_m68k_reloc_type type) +{ + enum elf_m68k_got_offset_size os; + bfd_vma n_slots; + + n_slots = elf_m68k_reloc_got_n_slots (type); + + /* Decrese counter of slots with offset size corresponding to TYPE + and all greater offset sizes. */ + for (os = elf_m68k_reloc_got_offset_size (type); os <= R_32; ++os) + { + BFD_ASSERT (got->n_slots[os] >= n_slots); + + got->n_slots[os] -= n_slots; + } +} + +/* Add new or update existing entry to GOT. + H, ABFD, TYPE and SYMNDX is data for the entry. + INFO is a context where memory should be allocated. */ + +static struct elf_m68k_got_entry * +elf_m68k_add_entry_to_got (struct elf_m68k_got *got, + struct elf_link_hash_entry *h, + const bfd *abfd, + enum elf_m68k_reloc_type reloc_type, + unsigned long symndx, + struct bfd_link_info *info) +{ + struct elf_m68k_got_entry_key key_; + struct elf_m68k_got_entry *entry; + + if (h != NULL && elf_m68k_hash_entry (h)->got_entry_key == 0) + elf_m68k_hash_entry (h)->got_entry_key + = elf_m68k_multi_got (info)->global_symndx++; + + elf_m68k_init_got_entry_key (&key_, h, abfd, symndx, reloc_type); + + entry = elf_m68k_get_got_entry (got, &key_, FIND_OR_CREATE, info); + if (entry == NULL) + return NULL; + + /* Determine entry's type and update got->n_slots counters. */ + entry->key_.type = elf_m68k_update_got_entry_type (got, + entry->key_.type, + reloc_type); + + /* Update refcount. */ + ++entry->u.s1.refcount; + + if (entry->u.s1.refcount == 1) + /* We see this entry for the first time. */ + { + if (entry->key_.bfd != NULL) + got->local_n_slots += elf_m68k_reloc_got_n_slots (entry->key_.type); + } + + BFD_ASSERT (got->n_slots[R_32] >= got->local_n_slots); + + if ((got->n_slots[R_8] + > ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT (info)) + || (got->n_slots[R_16] + > ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT (info))) + /* This BFD has too many relocation. */ + { + if (got->n_slots[R_8] > ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT (info)) + (*_bfd_error_handler) (_("%B: GOT overflow: " + "Number of relocations with 8-bit " + "offset > %d"), + abfd, + ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT (info)); + else + (*_bfd_error_handler) (_("%B: GOT overflow: " + "Number of relocations with 8- or 16-bit " + "offset > %d"), + abfd, + ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT (info)); + + return NULL; + } + + return entry; +} + +/* Compute the hash value of the bfd in a bfd2got hash entry. */ + +static hashval_t +elf_m68k_bfd2got_entry_hash (const void *entry) +{ + const struct elf_m68k_bfd2got_entry *e; + + e = (const struct elf_m68k_bfd2got_entry *) entry; + + return e->bfd->id; +} + +/* Check whether two hash entries have the same bfd. */ + +static int +elf_m68k_bfd2got_entry_eq (const void *entry1, const void *entry2) +{ + const struct elf_m68k_bfd2got_entry *e1; + const struct elf_m68k_bfd2got_entry *e2; + + e1 = (const struct elf_m68k_bfd2got_entry *) entry1; + e2 = (const struct elf_m68k_bfd2got_entry *) entry2; + + return e1->bfd == e2->bfd; +} + +/* Destruct a bfd2got entry. */ + +static void +elf_m68k_bfd2got_entry_del (void *_entry) +{ + struct elf_m68k_bfd2got_entry *entry; + + entry = (struct elf_m68k_bfd2got_entry *) _entry; + + BFD_ASSERT (entry->got != NULL); + elf_m68k_clear_got (entry->got); +} + +/* Find existing or create new (depending on HOWTO) bfd2got entry in + MULTI_GOT. ABFD is the bfd we need a GOT for. INFO is a context where + memory should be allocated. */ + +static struct elf_m68k_bfd2got_entry * +elf_m68k_get_bfd2got_entry (struct elf_m68k_multi_got *multi_got, + const bfd *abfd, + enum elf_m68k_get_entry_howto howto, + struct bfd_link_info *info) +{ + struct elf_m68k_bfd2got_entry entry_; + void **ptr; + struct elf_m68k_bfd2got_entry *entry; + + BFD_ASSERT ((info == NULL) == (howto == SEARCH || howto == MUST_FIND)); + + if (multi_got->bfd2got == NULL) + /* This is the first GOT. Initialize bfd2got. */ + { + if (howto == SEARCH) + return NULL; + + multi_got->bfd2got = htab_try_create (1, elf_m68k_bfd2got_entry_hash, + elf_m68k_bfd2got_entry_eq, + elf_m68k_bfd2got_entry_del); + if (multi_got->bfd2got == NULL) + { + bfd_set_error (bfd_error_no_memory); + return NULL; + } + } + + entry_.bfd = abfd; + ptr = htab_find_slot (multi_got->bfd2got, &entry_, (howto != SEARCH + ? INSERT : NO_INSERT)); + if (ptr == NULL) + { + if (howto == SEARCH) + /* Entry not found. */ + return NULL; + + /* We're out of memory. */ + bfd_set_error (bfd_error_no_memory); + return NULL; + } + + if (*ptr == NULL) + /* Entry was not found. Create new one. */ + { + BFD_ASSERT (howto != MUST_FIND && howto != SEARCH); + + entry = ((struct elf_m68k_bfd2got_entry *) + bfd_alloc (elf_hash_table (info)->dynobj, sizeof (*entry))); + if (entry == NULL) + return NULL; + + entry->bfd = abfd; + + entry->got = elf_m68k_create_empty_got (info); + if (entry->got == NULL) + return NULL; + + *ptr = entry; + } + else + { + BFD_ASSERT (howto != MUST_CREATE); + + /* Return existing entry. */ + entry = *ptr; + } + + return entry; +} + +struct elf_m68k_can_merge_gots_arg +{ + /* A current_got that we constructing a DIFF against. */ + struct elf_m68k_got *big; + + /* GOT holding entries not present or that should be changed in + BIG. */ + struct elf_m68k_got *diff; + + /* Context where to allocate memory. */ + struct bfd_link_info *info; + + /* Error flag. */ + bfd_boolean error_p; +}; + +/* Process a single entry from the small GOT to see if it should be added + or updated in the big GOT. */ + +static int +elf_m68k_can_merge_gots_1 (void **_entry_ptr, void *_arg) +{ + const struct elf_m68k_got_entry *entry1; + struct elf_m68k_can_merge_gots_arg *arg; + const struct elf_m68k_got_entry *entry2; + enum elf_m68k_reloc_type type; + + entry1 = (const struct elf_m68k_got_entry *) *_entry_ptr; + arg = (struct elf_m68k_can_merge_gots_arg *) _arg; + + entry2 = elf_m68k_get_got_entry (arg->big, &entry1->key_, SEARCH, NULL); + + if (entry2 != NULL) + /* We found an existing entry. Check if we should update it. */ + { + type = elf_m68k_update_got_entry_type (arg->diff, + entry2->key_.type, + entry1->key_.type); + + if (type == entry2->key_.type) + /* ENTRY1 doesn't update data in ENTRY2. Skip it. + To skip creation of difference entry we use the type, + which we won't see in GOT entries for sure. */ + type = R_68K_max; + } + else + /* We didn't find the entry. Add entry1 to DIFF. */ + { + BFD_ASSERT (entry1->key_.type != R_68K_max); + + type = elf_m68k_update_got_entry_type (arg->diff, + R_68K_max, entry1->key_.type); + + if (entry1->key_.bfd != NULL) + arg->diff->local_n_slots += elf_m68k_reloc_got_n_slots (type); + } + + if (type != R_68K_max) + /* Create an entry in DIFF. */ + { + struct elf_m68k_got_entry *entry; + + entry = elf_m68k_get_got_entry (arg->diff, &entry1->key_, MUST_CREATE, + arg->info); + if (entry == NULL) + { + arg->error_p = TRUE; + return 0; + } + + entry->key_.type = type; + } + + return 1; +} + +/* Return TRUE if SMALL GOT can be added to BIG GOT without overflowing it. + Construct DIFF GOT holding the entries which should be added or updated + in BIG GOT to accumulate information from SMALL. + INFO is the context where memory should be allocated. */ + +static bfd_boolean +elf_m68k_can_merge_gots (struct elf_m68k_got *big, + const struct elf_m68k_got *small, + struct bfd_link_info *info, + struct elf_m68k_got *diff) +{ + struct elf_m68k_can_merge_gots_arg arg_; + + BFD_ASSERT (small->offset == (bfd_vma) -1); + + arg_.big = big; + arg_.diff = diff; + arg_.info = info; + arg_.error_p = FALSE; + htab_traverse_noresize (small->entries, elf_m68k_can_merge_gots_1, &arg_); + if (arg_.error_p) + { + diff->offset = 0; + return FALSE; + } + + /* Check for overflow. */ + if ((big->n_slots[R_8] + arg_.diff->n_slots[R_8] + > ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT (info)) + || (big->n_slots[R_16] + arg_.diff->n_slots[R_16] + > ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT (info))) + return FALSE; + + return TRUE; +} + +struct elf_m68k_merge_gots_arg +{ + /* The BIG got. */ + struct elf_m68k_got *big; + + /* Context where memory should be allocated. */ + struct bfd_link_info *info; + + /* Error flag. */ + bfd_boolean error_p; +}; + +/* Process a single entry from DIFF got. Add or update corresponding + entry in the BIG got. */ + +static int +elf_m68k_merge_gots_1 (void **entry_ptr, void *_arg) +{ + const struct elf_m68k_got_entry *from; + struct elf_m68k_merge_gots_arg *arg; + struct elf_m68k_got_entry *to; + + from = (const struct elf_m68k_got_entry *) *entry_ptr; + arg = (struct elf_m68k_merge_gots_arg *) _arg; + + to = elf_m68k_get_got_entry (arg->big, &from->key_, FIND_OR_CREATE, + arg->info); + if (to == NULL) + { + arg->error_p = TRUE; + return 0; + } + + BFD_ASSERT (to->u.s1.refcount == 0); + /* All we need to merge is TYPE. */ + to->key_.type = from->key_.type; + + return 1; +} + +/* Merge data from DIFF to BIG. INFO is context where memory should be + allocated. */ + +static bfd_boolean +elf_m68k_merge_gots (struct elf_m68k_got *big, + struct elf_m68k_got *diff, + struct bfd_link_info *info) +{ + if (diff->entries != NULL) + /* DIFF is not empty. Merge it into BIG GOT. */ + { + struct elf_m68k_merge_gots_arg arg_; + + /* Merge entries. */ + arg_.big = big; + arg_.info = info; + arg_.error_p = FALSE; + htab_traverse_noresize (diff->entries, elf_m68k_merge_gots_1, &arg_); + if (arg_.error_p) + return FALSE; + + /* Merge counters. */ + big->n_slots[R_8] += diff->n_slots[R_8]; + big->n_slots[R_16] += diff->n_slots[R_16]; + big->n_slots[R_32] += diff->n_slots[R_32]; + big->local_n_slots += diff->local_n_slots; + } + else + /* DIFF is empty. */ + { + BFD_ASSERT (diff->n_slots[R_8] == 0); + BFD_ASSERT (diff->n_slots[R_16] == 0); + BFD_ASSERT (diff->n_slots[R_32] == 0); + BFD_ASSERT (diff->local_n_slots == 0); + } + + BFD_ASSERT (!elf_m68k_hash_table (info)->allow_multigot_p + || ((big->n_slots[R_8] + <= ELF_M68K_R_8_MAX_N_SLOTS_IN_GOT (info)) + && (big->n_slots[R_16] + <= ELF_M68K_R_8_16_MAX_N_SLOTS_IN_GOT (info)))); + + return TRUE; +} + +struct elf_m68k_finalize_got_offsets_arg +{ + /* Ranges of the offsets for GOT entries. + R_x entries receive offsets between offset1[R_x] and offset2[R_x]. + R_x is R_8, R_16 and R_32. */ + bfd_vma *offset1; + bfd_vma *offset2; + + /* Mapping from global symndx to global symbols. + This is used to build lists of got entries for global symbols. */ + struct elf_m68k_link_hash_entry **symndx2h; + + bfd_vma n_ldm_entries; +}; + +/* Assign ENTRY an offset. Build list of GOT entries for global symbols + along the way. */ + +static int +elf_m68k_finalize_got_offsets_1 (void **entry_ptr, void *_arg) +{ + struct elf_m68k_got_entry *entry; + struct elf_m68k_finalize_got_offsets_arg *arg; + + enum elf_m68k_got_offset_size got_offset_size; + bfd_vma entry_size; + + entry = (struct elf_m68k_got_entry *) *entry_ptr; + arg = (struct elf_m68k_finalize_got_offsets_arg *) _arg; + + /* This should be a fresh entry created in elf_m68k_can_merge_gots. */ + BFD_ASSERT (entry->u.s1.refcount == 0); + + /* Get GOT offset size for the entry . */ + got_offset_size = elf_m68k_reloc_got_offset_size (entry->key_.type); + + /* Calculate entry size in bytes. */ + entry_size = 4 * elf_m68k_reloc_got_n_slots (entry->key_.type); + + /* Check if we should switch to negative range of the offsets. */ + if (arg->offset1[got_offset_size] + entry_size + > arg->offset2[got_offset_size]) + { + /* Verify that this is the only switch to negative range for + got_offset_size. If this assertion fails, then we've miscalculated + range for got_offset_size entries in + elf_m68k_finalize_got_offsets. */ + BFD_ASSERT (arg->offset2[got_offset_size] + != arg->offset2[-(int) got_offset_size - 1]); + + /* Switch. */ + arg->offset1[got_offset_size] = arg->offset1[-(int) got_offset_size - 1]; + arg->offset2[got_offset_size] = arg->offset2[-(int) got_offset_size - 1]; + + /* Verify that now we have enough room for the entry. */ + BFD_ASSERT (arg->offset1[got_offset_size] + entry_size + <= arg->offset2[got_offset_size]); + } + + /* Assign offset to entry. */ + entry->u.s2.offset = arg->offset1[got_offset_size]; + arg->offset1[got_offset_size] += entry_size; + + if (entry->key_.bfd == NULL) + /* Hook up this entry into the list of got_entries of H. */ + { + struct elf_m68k_link_hash_entry *h; + + h = arg->symndx2h[entry->key_.symndx]; + if (h != NULL) + { + entry->u.s2.next = h->glist; + h->glist = entry; + } + else + /* This should be the entry for TLS_LDM relocation then. */ + { + BFD_ASSERT ((elf_m68k_reloc_got_type (entry->key_.type) + == R_68K_TLS_LDM32) + && entry->key_.symndx == 0); + + ++arg->n_ldm_entries; + } + } + else + /* This entry is for local symbol. */ + entry->u.s2.next = NULL; + + return 1; +} + +/* Assign offsets within GOT. USE_NEG_GOT_OFFSETS_P indicates if we + should use negative offsets. + Build list of GOT entries for global symbols along the way. + SYMNDX2H is mapping from global symbol indices to actual + global symbols. + Return offset at which next GOT should start. */ + +static void +elf_m68k_finalize_got_offsets (struct elf_m68k_got *got, + bfd_boolean use_neg_got_offsets_p, + struct elf_m68k_link_hash_entry **symndx2h, + bfd_vma *final_offset, bfd_vma *n_ldm_entries) +{ + struct elf_m68k_finalize_got_offsets_arg arg_; + bfd_vma offset1_[2 * R_LAST]; + bfd_vma offset2_[2 * R_LAST]; + int i; + bfd_vma start_offset; + + BFD_ASSERT (got->offset != (bfd_vma) -1); + + /* We set entry offsets relative to the .got section (and not the + start of a particular GOT), so that we can use them in + finish_dynamic_symbol without needing to know the GOT which they come + from. */ + + /* Put offset1 in the middle of offset1_, same for offset2. */ + arg_.offset1 = offset1_ + R_LAST; + arg_.offset2 = offset2_ + R_LAST; + + start_offset = got->offset; + + if (use_neg_got_offsets_p) + /* Setup both negative and positive ranges for R_8, R_16 and R_32. */ + i = -(int) R_32 - 1; + else + /* Setup positives ranges for R_8, R_16 and R_32. */ + i = (int) R_8; + + for (; i <= (int) R_32; ++i) + { + int j; + size_t n; + + /* Set beginning of the range of offsets I. */ + arg_.offset1[i] = start_offset; + + /* Calculate number of slots that require I offsets. */ + j = (i >= 0) ? i : -i - 1; + n = (j >= 1) ? got->n_slots[j - 1] : 0; + n = got->n_slots[j] - n; + + if (use_neg_got_offsets_p && n != 0) + { + if (i < 0) + /* We first fill the positive side of the range, so we might + end up with one empty slot at that side when we can't fit + whole 2-slot entry. Account for that at negative side of + the interval with one additional entry. */ + n = n / 2 + 1; + else + /* When the number of slots is odd, make positive side of the + range one entry bigger. */ + n = (n + 1) / 2; + } + + /* N is the number of slots that require I offsets. + Calculate length of the range for I offsets. */ + n = 4 * n; + + /* Set end of the range. */ + arg_.offset2[i] = start_offset + n; + + start_offset = arg_.offset2[i]; + } + + if (!use_neg_got_offsets_p) + /* Make sure that if we try to switch to negative offsets in + elf_m68k_finalize_got_offsets_1, the assert therein will catch + the bug. */ + for (i = R_8; i <= R_32; ++i) + arg_.offset2[-i - 1] = arg_.offset2[i]; + + /* Setup got->offset. offset1[R_8] is either in the middle or at the + beginning of GOT depending on use_neg_got_offsets_p. */ + got->offset = arg_.offset1[R_8]; + + arg_.symndx2h = symndx2h; + arg_.n_ldm_entries = 0; + + /* Assign offsets. */ + htab_traverse (got->entries, elf_m68k_finalize_got_offsets_1, &arg_); + + /* Check offset ranges we have actually assigned. */ + for (i = (int) R_8; i <= (int) R_32; ++i) + BFD_ASSERT (arg_.offset2[i] - arg_.offset1[i] <= 4); + + *final_offset = start_offset; + *n_ldm_entries = arg_.n_ldm_entries; +} + +struct elf_m68k_partition_multi_got_arg +{ + /* The GOT we are adding entries to. Aka big got. */ + struct elf_m68k_got *current_got; + + /* Offset to assign the next CURRENT_GOT. */ + bfd_vma offset; + + /* Context where memory should be allocated. */ + struct bfd_link_info *info; + + /* Total number of slots in the .got section. + This is used to calculate size of the .got and .rela.got sections. */ + bfd_vma n_slots; + + /* Difference in numbers of allocated slots in the .got section + and necessary relocations in the .rela.got section. + This is used to calculate size of the .rela.got section. */ + bfd_vma slots_relas_diff; + + /* Error flag. */ + bfd_boolean error_p; + + /* Mapping from global symndx to global symbols. + This is used to build lists of got entries for global symbols. */ + struct elf_m68k_link_hash_entry **symndx2h; +}; + +static void +elf_m68k_partition_multi_got_2 (struct elf_m68k_partition_multi_got_arg *arg) +{ + bfd_vma n_ldm_entries; + + elf_m68k_finalize_got_offsets (arg->current_got, + (elf_m68k_hash_table (arg->info) + ->use_neg_got_offsets_p), + arg->symndx2h, + &arg->offset, &n_ldm_entries); + + arg->n_slots += arg->current_got->n_slots[R_32]; + + if (!arg->info->shared) + /* If we are generating a shared object, we need to + output a R_68K_RELATIVE reloc so that the dynamic + linker can adjust this GOT entry. Overwise we + don't need space in .rela.got for local symbols. */ + arg->slots_relas_diff += arg->current_got->local_n_slots; + + /* @LDM relocations require a 2-slot GOT entry, but only + one relocation. Account for that. */ + arg->slots_relas_diff += n_ldm_entries; + + BFD_ASSERT (arg->slots_relas_diff <= arg->n_slots); +} + + +/* Process a single BFD2GOT entry and either merge GOT to CURRENT_GOT + or start a new CURRENT_GOT. */ + +static int +elf_m68k_partition_multi_got_1 (void **_entry, void *_arg) +{ + struct elf_m68k_bfd2got_entry *entry; + struct elf_m68k_partition_multi_got_arg *arg; + struct elf_m68k_got *got; + struct elf_m68k_got diff_; + struct elf_m68k_got *diff; + + entry = (struct elf_m68k_bfd2got_entry *) *_entry; + arg = (struct elf_m68k_partition_multi_got_arg *) _arg; + + got = entry->got; + BFD_ASSERT (got != NULL); + BFD_ASSERT (got->offset == (bfd_vma) -1); + + diff = NULL; + + if (arg->current_got != NULL) + /* Construct diff. */ + { + diff = &diff_; + elf_m68k_init_got (diff); + + if (!elf_m68k_can_merge_gots (arg->current_got, got, arg->info, diff)) + { + if (diff->offset == 0) + /* Offset set to 0 in the diff_ indicates an error. */ + { + arg->error_p = TRUE; + goto final_return; + } + + if (elf_m68k_hash_table (arg->info)->allow_multigot_p) + { + elf_m68k_clear_got (diff); + /* Schedule to finish up current_got and start new one. */ + diff = NULL; + } + /* else + Merge GOTs no matter what. If big GOT overflows, + we'll fail in relocate_section due to truncated relocations. + + ??? May be fail earlier? E.g., in can_merge_gots. */ + } + } + else + /* Diff of got against empty current_got is got itself. */ + { + /* Create empty current_got to put subsequent GOTs to. */ + arg->current_got = elf_m68k_create_empty_got (arg->info); + if (arg->current_got == NULL) + { + arg->error_p = TRUE; + goto final_return; + } + + arg->current_got->offset = arg->offset; + + diff = got; + } + + if (diff != NULL) + { + if (!elf_m68k_merge_gots (arg->current_got, diff, arg->info)) + { + arg->error_p = TRUE; + goto final_return; + } + + /* Now we can free GOT. */ + elf_m68k_clear_got (got); + + entry->got = arg->current_got; + } + else + { + /* Finish up current_got. */ + elf_m68k_partition_multi_got_2 (arg); + + /* Schedule to start a new current_got. */ + arg->current_got = NULL; + + /* Retry. */ + if (!elf_m68k_partition_multi_got_1 (_entry, _arg)) + { + BFD_ASSERT (arg->error_p); + goto final_return; + } + } + + final_return: + if (diff != NULL) + elf_m68k_clear_got (diff); + + return arg->error_p == FALSE ? 1 : 0; +} + +/* Helper function to build symndx2h mapping. */ + +static bfd_boolean +elf_m68k_init_symndx2h_1 (struct elf_link_hash_entry *_h, + void *_arg) +{ + struct elf_m68k_link_hash_entry *h; + + h = elf_m68k_hash_entry (_h); + + if (h->got_entry_key != 0) + /* H has at least one entry in the GOT. */ + { + struct elf_m68k_partition_multi_got_arg *arg; + + arg = (struct elf_m68k_partition_multi_got_arg *) _arg; + + BFD_ASSERT (arg->symndx2h[h->got_entry_key] == NULL); + arg->symndx2h[h->got_entry_key] = h; + } + + return TRUE; +} + +/* Merge GOTs of some BFDs, assign offsets to GOT entries and build + lists of GOT entries for global symbols. + Calculate sizes of .got and .rela.got sections. */ + +static bfd_boolean +elf_m68k_partition_multi_got (struct bfd_link_info *info) +{ + struct elf_m68k_multi_got *multi_got; + struct elf_m68k_partition_multi_got_arg arg_; + + multi_got = elf_m68k_multi_got (info); + + arg_.current_got = NULL; + arg_.offset = 0; + arg_.info = info; + arg_.n_slots = 0; + arg_.slots_relas_diff = 0; + arg_.error_p = FALSE; + + if (multi_got->bfd2got != NULL) + { + /* Initialize symndx2h mapping. */ + { + arg_.symndx2h = bfd_zmalloc (multi_got->global_symndx + * sizeof (*arg_.symndx2h)); + if (arg_.symndx2h == NULL) + return FALSE; + + elf_link_hash_traverse (elf_hash_table (info), + elf_m68k_init_symndx2h_1, &arg_); + } + + /* Partition. */ + htab_traverse (multi_got->bfd2got, elf_m68k_partition_multi_got_1, + &arg_); + if (arg_.error_p) + { + free (arg_.symndx2h); + arg_.symndx2h = NULL; + + return FALSE; + } + + /* Finish up last current_got. */ + elf_m68k_partition_multi_got_2 (&arg_); + + free (arg_.symndx2h); + } + + if (elf_hash_table (info)->dynobj != NULL) + /* Set sizes of .got and .rela.got sections. */ + { + asection *s; + + s = bfd_get_section_by_name (elf_hash_table (info)->dynobj, ".got"); + if (s != NULL) + s->size = arg_.offset; + else + BFD_ASSERT (arg_.offset == 0); + + BFD_ASSERT (arg_.slots_relas_diff <= arg_.n_slots); + arg_.n_slots -= arg_.slots_relas_diff; + + s = bfd_get_section_by_name (elf_hash_table (info)->dynobj, ".rela.got"); + if (s != NULL) + s->size = arg_.n_slots * sizeof (Elf32_External_Rela); + else + BFD_ASSERT (arg_.n_slots == 0); + } + else + BFD_ASSERT (multi_got->bfd2got == NULL); + + return TRUE; +} + +/* Specialized version of elf_m68k_get_got_entry that returns pointer + to hashtable slot, thus allowing removal of entry via + elf_m68k_remove_got_entry. */ + +static struct elf_m68k_got_entry ** +elf_m68k_find_got_entry_ptr (struct elf_m68k_got *got, + struct elf_m68k_got_entry_key *key) +{ + void **ptr; + struct elf_m68k_got_entry entry_; + struct elf_m68k_got_entry **entry_ptr; + + entry_.key_ = *key; + ptr = htab_find_slot (got->entries, &entry_, NO_INSERT); + BFD_ASSERT (ptr != NULL); + + entry_ptr = (struct elf_m68k_got_entry **) ptr; + + return entry_ptr; +} + +/* Remove entry pointed to by ENTRY_PTR from GOT. */ + +static void +elf_m68k_remove_got_entry (struct elf_m68k_got *got, + struct elf_m68k_got_entry **entry_ptr) +{ + struct elf_m68k_got_entry *entry; + + entry = *entry_ptr; + + /* Check that offsets have not been finalized yet. */ + BFD_ASSERT (got->offset == (bfd_vma) -1); + /* Check that this entry is indeed unused. */ + BFD_ASSERT (entry->u.s1.refcount == 0); + + elf_m68k_remove_got_entry_type (got, entry->key_.type); + + if (entry->key_.bfd != NULL) + got->local_n_slots -= elf_m68k_reloc_got_n_slots (entry->key_.type); + + BFD_ASSERT (got->n_slots[R_32] >= got->local_n_slots); + + htab_clear_slot (got->entries, (void **) entry_ptr); +} + +/* Copy any information related to dynamic linking from a pre-existing + symbol to a newly created symbol. Also called to copy flags and + other back-end info to a weakdef, in which case the symbol is not + newly created and plt/got refcounts and dynamic indices should not + be copied. */ + +static void +elf_m68k_copy_indirect_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *_dir, + struct elf_link_hash_entry *_ind) +{ + struct elf_m68k_link_hash_entry *dir; + struct elf_m68k_link_hash_entry *ind; + + _bfd_elf_link_hash_copy_indirect (info, _dir, _ind); + + if (_ind->root.type != bfd_link_hash_indirect) + return; + + dir = elf_m68k_hash_entry (_dir); + ind = elf_m68k_hash_entry (_ind); + + /* Any absolute non-dynamic relocations against an indirect or weak + definition will be against the target symbol. */ + _dir->non_got_ref |= _ind->non_got_ref; + + /* We might have a direct symbol already having entries in the GOTs. + Update its key only in case indirect symbol has GOT entries and + assert that both indirect and direct symbols don't have GOT entries + at the same time. */ + if (ind->got_entry_key != 0) + { + BFD_ASSERT (dir->got_entry_key == 0); + /* Assert that GOTs aren't partioned yet. */ + BFD_ASSERT (ind->glist == NULL); + + dir->got_entry_key = ind->got_entry_key; + ind->got_entry_key = 0; + } } + /* Look through the relocs for a section during the first phase, and allocate space in the global offset table or procedure linkage table. */ @@ -697,12 +2520,12 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) bfd *dynobj; Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; - bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; asection *sgot; asection *srelgot; asection *sreloc; + struct elf_m68k_got *got; if (info->relocatable) return TRUE; @@ -710,12 +2533,13 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) dynobj = elf_hash_table (info)->dynobj; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - local_got_refcounts = elf_local_got_refcounts (abfd); sgot = NULL; srelgot = NULL; sreloc = NULL; + got = NULL; + rel_end = relocs + sec->reloc_count; for (rel = relocs; rel < rel_end; rel++) { @@ -743,9 +2567,32 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) break; /* Fall through. */ + + /* Relative GOT relocations. */ case R_68K_GOT8O: case R_68K_GOT16O: case R_68K_GOT32O: + /* Fall through. */ + + /* TLS relocations. */ + case R_68K_TLS_GD8: + case R_68K_TLS_GD16: + case R_68K_TLS_GD32: + case R_68K_TLS_LDM8: + case R_68K_TLS_LDM16: + case R_68K_TLS_LDM32: + case R_68K_TLS_IE8: + case R_68K_TLS_IE16: + case R_68K_TLS_IE32: + + case R_68K_TLS_TPREL32: + case R_68K_TLS_DTPREL32: + + if (ELF32_R_TYPE (rel->r_info) == R_68K_TLS_TPREL32 + && info->shared) + /* Do the special chorus for libraries with static TLS. */ + info->flags |= DF_STATIC_TLS; + /* This symbol requires a global offset table entry. */ if (dynobj == NULL) @@ -782,53 +2629,43 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) } } - if (h != NULL) + if (got == NULL) { - if (h->got.refcount == 0) - { - /* Make sure this symbol is output as a dynamic symbol. */ - if (h->dynindx == -1 - && !h->forced_local) - { - if (!bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; - } + struct elf_m68k_bfd2got_entry *bfd2got_entry; - /* Allocate space in the .got section. */ - sgot->size += 4; - /* Allocate relocation space. */ - srelgot->size += sizeof (Elf32_External_Rela); - } - h->got.refcount++; - } - else - { - /* This is a global offset table entry for a local symbol. */ - if (local_got_refcounts == NULL) - { - bfd_size_type size; + bfd2got_entry + = elf_m68k_get_bfd2got_entry (elf_m68k_multi_got (info), + abfd, FIND_OR_CREATE, info); + if (bfd2got_entry == NULL) + return FALSE; - size = symtab_hdr->sh_info; - size *= sizeof (bfd_signed_vma); - local_got_refcounts = ((bfd_signed_vma *) - bfd_zalloc (abfd, size)); - if (local_got_refcounts == NULL) - return FALSE; - elf_local_got_refcounts (abfd) = local_got_refcounts; - } - if (local_got_refcounts[r_symndx] == 0) - { - sgot->size += 4; - if (info->shared) - { - /* If we are generating a shared object, we need to - output a R_68K_RELATIVE reloc so that the dynamic - linker can adjust this GOT entry. */ - srelgot->size += sizeof (Elf32_External_Rela); - } - } - local_got_refcounts[r_symndx]++; + got = bfd2got_entry->got; + BFD_ASSERT (got != NULL); } + + { + struct elf_m68k_got_entry *got_entry; + + /* Add entry to got. */ + got_entry = elf_m68k_add_entry_to_got (got, h, abfd, + ELF32_R_TYPE (rel->r_info), + r_symndx, info); + if (got_entry == NULL) + return FALSE; + + if (got_entry->u.s1.refcount == 1) + { + /* Make sure this symbol is output as a dynamic symbol. */ + if (h != NULL + && h->dynindx == -1 + && !h->forced_local) + { + if (!bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + } + } + break; case R_68K_PLT8: @@ -914,6 +2751,10 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) /* Make sure a plt entry is created for this symbol if it turns out to be a function defined by a dynamic object. */ h->plt.refcount++; + + if (!info->shared) + /* This symbol needs a non-GOT reference. */ + h->non_got_ref = 1; } /* If we are creating a shared library, we need to copy the @@ -926,35 +2767,11 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); - sreloc = bfd_get_section_by_name (dynobj, name); if (sreloc == NULL) - { - sreloc = bfd_make_section_with_flags (dynobj, - name, - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (sreloc == NULL - || !bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } if (sec->flags & SEC_READONLY @@ -992,13 +2809,17 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) { asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = (bfd_section_from_r_symndx - (abfd, &elf_m68k_hash_table (info)->sym_sec, - sec, r_symndx)); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&elf_m68k_hash_table (info)->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct elf_m68k_pcrel_relocs_copied **) vpp; } @@ -1035,7 +2856,9 @@ elf_m68k_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_68K_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -1078,11 +2901,14 @@ elf_m68k_gc_sweep_hook (bfd *abfd, { Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; - bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; bfd *dynobj; asection *sgot; asection *srelgot; + struct elf_m68k_got *got; + + if (info->relocatable) + return TRUE; dynobj = elf_hash_table (info)->dynobj; if (dynobj == NULL) @@ -1090,10 +2916,10 @@ elf_m68k_gc_sweep_hook (bfd *abfd, symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - local_got_refcounts = elf_local_got_refcounts (abfd); sgot = bfd_get_section_by_name (dynobj, ".got"); srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + got = NULL; relend = relocs + sec->reloc_count; for (rel = relocs; rel < relend; rel++) @@ -1115,36 +2941,57 @@ elf_m68k_gc_sweep_hook (bfd *abfd, case R_68K_GOT8: case R_68K_GOT16: case R_68K_GOT32: + if (h != NULL + && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) + break; + + /* FALLTHRU */ case R_68K_GOT8O: case R_68K_GOT16O: case R_68K_GOT32O: - if (h != NULL) - { - if (h->got.refcount > 0) - { - --h->got.refcount; - if (h->got.refcount == 0) - { - /* We don't need the .got entry any more. */ - sgot->size -= 4; - srelgot->size -= sizeof (Elf32_External_Rela); - } - } - } - else if (local_got_refcounts != NULL) + /* Fall through. */ + + /* TLS relocations. */ + case R_68K_TLS_GD8: + case R_68K_TLS_GD16: + case R_68K_TLS_GD32: + case R_68K_TLS_LDM8: + case R_68K_TLS_LDM16: + case R_68K_TLS_LDM32: + case R_68K_TLS_IE8: + case R_68K_TLS_IE16: + case R_68K_TLS_IE32: + + case R_68K_TLS_TPREL32: + case R_68K_TLS_DTPREL32: + + if (got == NULL) { - if (local_got_refcounts[r_symndx] > 0) - { - --local_got_refcounts[r_symndx]; - if (local_got_refcounts[r_symndx] == 0) - { - /* We don't need the .got entry any more. */ - sgot->size -= 4; - if (info->shared) - srelgot->size -= sizeof (Elf32_External_Rela); - } - } + got = elf_m68k_get_bfd2got_entry (elf_m68k_multi_got (info), + abfd, MUST_FIND, NULL)->got; + BFD_ASSERT (got != NULL); } + + { + struct elf_m68k_got_entry_key key_; + struct elf_m68k_got_entry **got_entry_ptr; + struct elf_m68k_got_entry *got_entry; + + elf_m68k_init_got_entry_key (&key_, h, abfd, r_symndx, + ELF32_R_TYPE (rel->r_info)); + got_entry_ptr = elf_m68k_find_got_entry_ptr (got, &key_); + + got_entry = *got_entry_ptr; + + if (got_entry->u.s1.refcount > 0) + { + --got_entry->u.s1.refcount; + + if (got_entry->u.s1.refcount == 0) + /* We don't need the .got entry any more. */ + elf_m68k_remove_got_entry (got, got_entry_ptr); + } + } break; case R_68K_PLT8: @@ -1198,6 +3045,11 @@ elf_m68k_get_plt_info (bfd *output_bfd) static bfd_boolean elf_m68k_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { + /* Bind input BFDs to GOTs and calculate sizes of .got and .rela.got + sections. */ + if (!elf_m68k_partition_multi_got (info)) + return FALSE; + elf_m68k_hash_table (info)->plt_info = elf_m68k_get_plt_info (output_bfd); return TRUE; } @@ -1326,6 +3178,11 @@ elf_m68k_adjust_dynamic_symbol (info, h) if (info->shared) return TRUE; + /* If there are no references to this symbol that do not use the + GOT, we don't need to generate a copy reloc. */ + if (!h->non_got_ref) + return TRUE; + if (h->size == 0) { (*_bfd_error_handler) (_("dynamic variable `%s' is zero size"), @@ -1548,9 +3405,7 @@ elf_m68k_discard_copies (h, inf) if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - if (!h->def_regular - || (!info->symbolic - && !h->forced_local)) + if (!SYMBOL_CALLS_LOCAL (info, h)) { if ((info->flags & DF_TEXTREL) == 0) { @@ -1576,6 +3431,145 @@ elf_m68k_discard_copies (h, inf) return TRUE; } + +/* Install relocation RELA. */ + +static void +elf_m68k_install_rela (bfd *output_bfd, + asection *srela, + Elf_Internal_Rela *rela) +{ + bfd_byte *loc; + + loc = srela->contents; + loc += srela->reloc_count++ * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, rela, loc); +} + +/* Find the base offsets for thread-local storage in this object, + for GD/LD and IE/LE respectively. */ + +#define DTP_OFFSET 0x8000 +#define TP_OFFSET 0x7000 + +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 + DTP_OFFSET; +} + +static bfd_vma +tpoff_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 + TP_OFFSET; +} + +/* Output necessary relocation to handle a symbol during static link. + This function is called from elf_m68k_relocate_section. */ + +static void +elf_m68k_init_got_entry_static (struct bfd_link_info *info, + bfd *output_bfd, + enum elf_m68k_reloc_type r_type, + asection *sgot, + bfd_vma got_entry_offset, + bfd_vma relocation) +{ + switch (elf_m68k_reloc_got_type (r_type)) + { + case R_68K_GOT32O: + bfd_put_32 (output_bfd, relocation, sgot->contents + got_entry_offset); + break; + + case R_68K_TLS_GD32: + /* We know the offset within the module, + put it into the second GOT slot. */ + bfd_put_32 (output_bfd, relocation - dtpoff_base (info), + sgot->contents + got_entry_offset + 4); + /* FALLTHRU */ + + case R_68K_TLS_LDM32: + /* Mark it as belonging to module 1, the executable. */ + bfd_put_32 (output_bfd, 1, sgot->contents + got_entry_offset); + break; + + case R_68K_TLS_IE32: + bfd_put_32 (output_bfd, relocation - tpoff_base (info), + sgot->contents + got_entry_offset); + break; + + default: + BFD_ASSERT (FALSE); + } +} + +/* Output necessary relocation to handle a local symbol + during dynamic link. + This function is called either from elf_m68k_relocate_section + or from elf_m68k_finish_dynamic_symbol. */ + +static void +elf_m68k_init_got_entry_local_shared (struct bfd_link_info *info, + bfd *output_bfd, + enum elf_m68k_reloc_type r_type, + asection *sgot, + bfd_vma got_entry_offset, + bfd_vma relocation, + asection *srela) +{ + Elf_Internal_Rela outrel; + + switch (elf_m68k_reloc_got_type (r_type)) + { + case R_68K_GOT32O: + /* Emit RELATIVE relocation to initialize GOT slot + at run-time. */ + outrel.r_info = ELF32_R_INFO (0, R_68K_RELATIVE); + outrel.r_addend = relocation; + break; + + case R_68K_TLS_GD32: + /* We know the offset within the module, + put it into the second GOT slot. */ + bfd_put_32 (output_bfd, relocation - dtpoff_base (info), + sgot->contents + got_entry_offset + 4); + /* FALLTHRU */ + + case R_68K_TLS_LDM32: + /* We don't know the module number, + create a relocation for it. */ + outrel.r_info = ELF32_R_INFO (0, R_68K_TLS_DTPMOD32); + outrel.r_addend = 0; + break; + + case R_68K_TLS_IE32: + /* Emit TPREL relocation to initialize GOT slot + at run-time. */ + outrel.r_info = ELF32_R_INFO (0, R_68K_TLS_TPREL32); + outrel.r_addend = relocation - elf_hash_table (info)->tls_sec->vma; + break; + + default: + BFD_ASSERT (FALSE); + } + + /* Offset of the GOT entry. */ + outrel.r_offset = (sgot->output_section->vma + + sgot->output_offset + + got_entry_offset); + + /* Install one of the above relocations. */ + elf_m68k_install_rela (output_bfd, srela, &outrel); + + bfd_put_32 (output_bfd, outrel.r_addend, sgot->contents + got_entry_offset); +} + /* Relocate an M68K ELF section. */ static bfd_boolean @@ -1593,21 +3587,24 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, bfd *dynobj; Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; - bfd_vma *local_got_offsets; asection *sgot; asection *splt; asection *sreloc; + asection *srela; + struct elf_m68k_got *got; Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; dynobj = elf_hash_table (info)->dynobj; symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; sym_hashes = elf_sym_hashes (input_bfd); - local_got_offsets = elf_local_got_offsets (input_bfd); sgot = NULL; splt = NULL; sreloc = NULL; + srela = NULL; + + got = NULL; rel = relocs; relend = relocs + input_section->reloc_count; @@ -1677,15 +3674,85 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, in the global offset table. */ if (h != NULL && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) - break; + { + if (elf_m68k_hash_table (info)->local_gp_p) + { + bfd_vma sgot_output_offset; + bfd_vma got_offset; + + if (sgot == NULL) + { + sgot = bfd_get_section_by_name (dynobj, ".got"); + + if (sgot != NULL) + sgot_output_offset = sgot->output_offset; + else + /* In this case we have a reference to + _GLOBAL_OFFSET_TABLE_, but the GOT itself is + empty. + ??? Issue a warning? */ + sgot_output_offset = 0; + } + else + sgot_output_offset = sgot->output_offset; + + if (got == NULL) + { + struct elf_m68k_bfd2got_entry *bfd2got_entry; + + bfd2got_entry + = elf_m68k_get_bfd2got_entry (elf_m68k_multi_got (info), + input_bfd, SEARCH, NULL); + + if (bfd2got_entry != NULL) + { + got = bfd2got_entry->got; + BFD_ASSERT (got != NULL); + + got_offset = got->offset; + } + else + /* In this case we have a reference to + _GLOBAL_OFFSET_TABLE_, but no other references + accessing any GOT entries. + ??? Issue a warning? */ + got_offset = 0; + } + else + got_offset = got->offset; + + /* Adjust GOT pointer to point to the GOT + assigned to input_bfd. */ + rel->r_addend += sgot_output_offset + got_offset; + } + else + BFD_ASSERT (got == NULL || got->offset == 0); + + break; + } /* Fall through. */ case R_68K_GOT8O: case R_68K_GOT16O: case R_68K_GOT32O: + + case R_68K_TLS_LDM32: + case R_68K_TLS_LDM16: + case R_68K_TLS_LDM8: + + case R_68K_TLS_GD8: + case R_68K_TLS_GD16: + case R_68K_TLS_GD32: + + case R_68K_TLS_IE8: + case R_68K_TLS_IE16: + case R_68K_TLS_IE32: + /* Relocation is the offset of the entry for this symbol in the global offset table. */ { + struct elf_m68k_got_entry_key key_; + bfd_vma *off_ptr; bfd_vma off; if (sgot == NULL) @@ -1694,97 +3761,155 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, BFD_ASSERT (sgot != NULL); } - if (h != NULL) + if (got == NULL) + { + got = elf_m68k_get_bfd2got_entry (elf_m68k_multi_got (info), + input_bfd, MUST_FIND, + NULL)->got; + BFD_ASSERT (got != NULL); + } + + /* Get GOT offset for this symbol. */ + elf_m68k_init_got_entry_key (&key_, h, input_bfd, r_symndx, + r_type); + off_ptr = &elf_m68k_get_got_entry (got, &key_, MUST_FIND, + NULL)->u.s2.offset; + off = *off_ptr; + + /* The offset must always be a multiple of 4. We use + the least significant bit to record whether we have + already generated the necessary reloc. */ + if ((off & 1) != 0) + off &= ~1; + else { - bfd_boolean dyn; - - off = h->got.offset; - BFD_ASSERT (off != (bfd_vma) -1); - - dyn = elf_hash_table (info)->dynamic_sections_created; - if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) - || (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular)) + if (h != NULL + /* @TLSLDM relocations are bounded to the module, in + which the symbol is defined -- not to the symbol + itself. */ + && elf_m68k_reloc_got_type (r_type) != R_68K_TLS_LDM32) { - /* This is actually a static link, or it is a - -Bsymbolic link and the symbol is defined - locally, or the symbol was forced to be local - because of a version file.. We must initialize - this entry in the global offset table. Since - the offset must always be a multiple of 4, we - use the least significant bit to record whether - we have initialized it already. - - When doing a dynamic link, we create a .rela.got - relocation entry to initialize the value. This - is done in the finish_dynamic_symbol routine. */ - if ((off & 1) != 0) - off &= ~1; - else + bfd_boolean dyn; + + dyn = elf_hash_table (info)->dynamic_sections_created; + if (!WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) + || (info->shared + && SYMBOL_REFERENCES_LOCAL (info, h)) + || (ELF_ST_VISIBILITY (h->other) + && h->root.type == bfd_link_hash_undefweak)) { - bfd_put_32 (output_bfd, relocation, - sgot->contents + off); - h->got.offset |= 1; + /* This is actually a static link, or it is a + -Bsymbolic link and the symbol is defined + locally, or the symbol was forced to be local + because of a version file. We must initialize + this entry in the global offset table. Since + the offset must always be a multiple of 4, we + use the least significant bit to record whether + we have initialized it already. + + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + + elf_m68k_init_got_entry_static (info, + output_bfd, + r_type, + sgot, + off, + relocation); + + *off_ptr |= 1; } + else + unresolved_reloc = FALSE; } - else - unresolved_reloc = FALSE; - } - else - { - BFD_ASSERT (local_got_offsets != NULL - && local_got_offsets[r_symndx] != (bfd_vma) -1); - - off = local_got_offsets[r_symndx]; - - /* The offset must always be a multiple of 4. We use - the least significant bit to record whether we have - already generated the necessary reloc. */ - if ((off & 1) != 0) - off &= ~1; - else + else if (info->shared) /* && h == NULL */ + /* Process local symbol during dynamic link. */ { - bfd_put_32 (output_bfd, relocation, sgot->contents + off); - - if (info->shared) + if (srela == NULL) { - asection *s; - Elf_Internal_Rela outrel; - bfd_byte *loc; - - s = bfd_get_section_by_name (dynobj, ".rela.got"); - BFD_ASSERT (s != NULL); - - outrel.r_offset = (sgot->output_section->vma - + sgot->output_offset - + off); - outrel.r_info = ELF32_R_INFO (0, R_68K_RELATIVE); - outrel.r_addend = relocation; - loc = s->contents; - loc += s->reloc_count++ * sizeof (Elf32_External_Rela); - bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + srela = bfd_get_section_by_name (dynobj, ".rela.got"); + BFD_ASSERT (srela != NULL); } - local_got_offsets[r_symndx] |= 1; + elf_m68k_init_got_entry_local_shared (info, + output_bfd, + r_type, + sgot, + off, + relocation, + srela); + + *off_ptr |= 1; + } + else /* h == NULL && !info->shared */ + { + elf_m68k_init_got_entry_static (info, + output_bfd, + r_type, + sgot, + off, + relocation); + + *off_ptr |= 1; } } - relocation = sgot->output_offset + off; - if (r_type == R_68K_GOT8O + /* We don't use elf_m68k_reloc_got_type in the condition below + because this is the only place where difference between + R_68K_GOTx and R_68K_GOTxO relocations matters. */ + if (r_type == R_68K_GOT32O || r_type == R_68K_GOT16O - || r_type == R_68K_GOT32O) + || r_type == R_68K_GOT8O + || elf_m68k_reloc_got_type (r_type) == R_68K_TLS_GD32 + || elf_m68k_reloc_got_type (r_type) == R_68K_TLS_LDM32 + || elf_m68k_reloc_got_type (r_type) == R_68K_TLS_IE32) { + /* GOT pointer is adjusted to point to the start/middle + of local GOT. Adjust the offset accordingly. */ + BFD_ASSERT (elf_m68k_hash_table (info)->use_neg_got_offsets_p + || off >= got->offset); + + if (elf_m68k_hash_table (info)->local_gp_p) + relocation = off - got->offset; + else + { + BFD_ASSERT (got->offset == 0); + relocation = sgot->output_offset + off; + } + /* This relocation does not use the addend. */ rel->r_addend = 0; } else - relocation += sgot->output_section->vma; + relocation = (sgot->output_section->vma + sgot->output_offset + + off); } break; + case R_68K_TLS_LDO32: + case R_68K_TLS_LDO16: + case R_68K_TLS_LDO8: + relocation -= dtpoff_base (info); + break; + + case R_68K_TLS_LE32: + case R_68K_TLS_LE16: + case R_68K_TLS_LE8: + if (info->shared) + { + (*_bfd_error_handler) + (_("%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted " + "in shared object"), + input_bfd, input_section, (long) rel->r_offset, howto->name); + + return FALSE; + } + else + relocation -= tpoff_base (info); + + break; + case R_68K_PLT8: case R_68K_PLT16: case R_68K_PLT32: @@ -1838,17 +3963,12 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, break; - case R_68K_PC8: - case R_68K_PC16: - case R_68K_PC32: - if (h == NULL - || (info->shared - && h->forced_local)) - break; - /* Fall through. */ case R_68K_8: case R_68K_16: case R_68K_32: + case R_68K_PC8: + case R_68K_PC16: + case R_68K_PC32: if (info->shared && r_symndx != 0 && (input_section->flags & SEC_ALLOC) != 0 @@ -1858,10 +3978,7 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, && ((r_type != R_68K_PC8 && r_type != R_68K_PC16 && r_type != R_68K_PC32) - || (h != NULL - && h->dynindx != -1 - && (!info->symbolic - || !h->def_regular)))) + || !SYMBOL_CALLS_LOCAL (info, h))) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -1988,6 +4105,42 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, return FALSE; } + if (r_symndx != 0 + && r_type != R_68K_NONE + && (h == NULL + || h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak)) + { + char sym_type; + + sym_type = (sym != NULL) ? ELF32_ST_TYPE (sym->st_info) : h->type; + + if (elf_m68k_reloc_tls_p (r_type) != (sym_type == STT_TLS)) + { + const char *name; + + 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); + } + + (*_bfd_error_handler) + ((sym_type == STT_TLS + ? _("%B(%A+0x%lx): %s used with TLS symbol %s") + : _("%B(%A+0x%lx): %s used with non-TLS symbol %s")), + input_bfd, + input_section, + (long) rel->r_offset, + howto->name, + name); + } + } + r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, rel->r_addend); @@ -2135,12 +4288,11 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym) } } - if (h->got.offset != (bfd_vma) -1) + if (elf_m68k_hash_entry (h)->glist != NULL) { asection *sgot; asection *srela; - Elf_Internal_Rela rela; - bfd_byte *loc; + struct elf_m68k_got_entry *got_entry; /* This symbol has an entry in the global offset table. Set it up. */ @@ -2149,37 +4301,107 @@ elf_m68k_finish_dynamic_symbol (output_bfd, info, h, sym) srela = bfd_get_section_by_name (dynobj, ".rela.got"); BFD_ASSERT (sgot != NULL && srela != NULL); - rela.r_offset = (sgot->output_section->vma - + sgot->output_offset - + (h->got.offset &~ (bfd_vma) 1)); - - /* If this is a -Bsymbolic link, and the symbol is defined - locally, we just want to emit a RELATIVE reloc. Likewise if - the symbol was forced to be local because of a version file. - The entry in the global offset table will already have been - initialized in the relocate_section function. */ - if (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular) - { - rela.r_info = ELF32_R_INFO (0, R_68K_RELATIVE); - rela.r_addend = bfd_get_signed_32 (output_bfd, - (sgot->contents - + (h->got.offset &~ (bfd_vma) 1))); - } - else + got_entry = elf_m68k_hash_entry (h)->glist; + + while (got_entry != NULL) { - bfd_put_32 (output_bfd, (bfd_vma) 0, - sgot->contents + (h->got.offset &~ (bfd_vma) 1)); - rela.r_info = ELF32_R_INFO (h->dynindx, R_68K_GLOB_DAT); - rela.r_addend = 0; - } + enum elf_m68k_reloc_type r_type; + bfd_vma got_entry_offset; - loc = srela->contents; - loc += srela->reloc_count++ * sizeof (Elf32_External_Rela); - bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + r_type = got_entry->key_.type; + got_entry_offset = got_entry->u.s2.offset &~ (bfd_vma) 1; + + /* If this is a -Bsymbolic link, and the symbol is defined + locally, we just want to emit a RELATIVE reloc. Likewise if + the symbol was forced to be local because of a version file. + The entry in the global offset table already have been + initialized in the relocate_section function. */ + if (info->shared + && SYMBOL_REFERENCES_LOCAL (info, h)) + { + bfd_vma relocation; + + relocation = bfd_get_signed_32 (output_bfd, + (sgot->contents + + got_entry_offset)); + + /* Undo TP bias. */ + switch (elf_m68k_reloc_got_type (r_type)) + { + case R_68K_GOT32O: + case R_68K_TLS_LDM32: + break; + + case R_68K_TLS_GD32: + relocation += dtpoff_base (info); + break; + + case R_68K_TLS_IE32: + relocation += tpoff_base (info); + break; + + default: + BFD_ASSERT (FALSE); + } + + elf_m68k_init_got_entry_local_shared (info, + output_bfd, + r_type, + sgot, + got_entry_offset, + relocation, + srela); + } + else + { + Elf_Internal_Rela rela; + + /* Put zeros to GOT slots that will be initialized + at run-time. */ + { + bfd_vma n_slots; + + n_slots = elf_m68k_reloc_got_n_slots (got_entry->key_.type); + while (n_slots--) + bfd_put_32 (output_bfd, (bfd_vma) 0, + (sgot->contents + got_entry_offset + + 4 * n_slots)); + } + + rela.r_addend = 0; + rela.r_offset = (sgot->output_section->vma + + sgot->output_offset + + got_entry_offset); + + switch (elf_m68k_reloc_got_type (r_type)) + { + case R_68K_GOT32O: + rela.r_info = ELF32_R_INFO (h->dynindx, R_68K_GLOB_DAT); + elf_m68k_install_rela (output_bfd, srela, &rela); + break; + + case R_68K_TLS_GD32: + rela.r_info = ELF32_R_INFO (h->dynindx, R_68K_TLS_DTPMOD32); + elf_m68k_install_rela (output_bfd, srela, &rela); + + rela.r_offset += 4; + rela.r_info = ELF32_R_INFO (h->dynindx, R_68K_TLS_DTPREL32); + elf_m68k_install_rela (output_bfd, srela, &rela); + break; + + case R_68K_TLS_IE32: + rela.r_info = ELF32_R_INFO (h->dynindx, R_68K_TLS_TPREL32); + elf_m68k_install_rela (output_bfd, srela, &rela); + break; + + default: + BFD_ASSERT (FALSE); + break; + } + } + + got_entry = got_entry->u.s2.next; + } } if (h->needs_copy) @@ -2454,6 +4676,43 @@ error_return: return FALSE; } +/* Set target options. */ + +void +bfd_elf_m68k_set_target_options (struct bfd_link_info *info, int got_handling) +{ + struct elf_m68k_link_hash_table *htab; + + htab = elf_m68k_hash_table (info); + + switch (got_handling) + { + case 0: + /* --got=single. */ + htab->local_gp_p = FALSE; + htab->use_neg_got_offsets_p = FALSE; + htab->allow_multigot_p = FALSE; + break; + + case 1: + /* --got=negative. */ + htab->local_gp_p = TRUE; + htab->use_neg_got_offsets_p = TRUE; + htab->allow_multigot_p = FALSE; + break; + + case 2: + /* --got=multigot. */ + htab->local_gp_p = TRUE; + htab->use_neg_got_offsets_p = TRUE; + htab->allow_multigot_p = TRUE; + break; + + default: + BFD_ASSERT (FALSE); + } +} + static enum elf_reloc_type_class elf32_m68k_reloc_type_class (rela) const Elf_Internal_Rela *rela; @@ -2489,7 +4748,10 @@ elf_m68k_plt_sym_val (bfd_vma i, const asection *plt, _bfd_elf_create_dynamic_sections #define bfd_elf32_bfd_link_hash_table_create \ elf_m68k_link_hash_table_create -#define bfd_elf32_bfd_final_link bfd_elf_gc_common_final_link +/* ??? Should it be this macro or bfd_elfNN_bfd_link_hash_table_create? */ +#define bfd_elf32_bfd_link_hash_table_free \ + elf_m68k_link_hash_table_free +#define bfd_elf32_bfd_final_link bfd_elf_final_link #define elf_backend_check_relocs elf_m68k_check_relocs #define elf_backend_always_size_sections \ @@ -2506,6 +4768,7 @@ elf_m68k_plt_sym_val (bfd_vma i, const asection *plt, elf_m68k_finish_dynamic_sections #define elf_backend_gc_mark_hook elf_m68k_gc_mark_hook #define elf_backend_gc_sweep_hook elf_m68k_gc_sweep_hook +#define elf_backend_copy_indirect_symbol elf_m68k_copy_indirect_symbol #define bfd_elf32_bfd_merge_private_bfd_data \ elf32_m68k_merge_private_bfd_data #define bfd_elf32_bfd_set_private_flags \ diff --git a/bfd/elf32-m88k.c b/bfd/elf32-m88k.c index b3cf3b4..d6c02ff 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, 2007 Free Software Foundation, Inc. + Copyright 1993, 1995, 1999, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c index 2eef4b4..8bdb266 100644 --- a/bfd/elf32-mcore.c +++ b/bfd/elf32-mcore.c @@ -594,7 +594,6 @@ mcore_elf_check_relocs (bfd * abfd, { 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; @@ -603,9 +602,6 @@ mcore_elf_check_relocs (bfd * abfd, 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; @@ -638,7 +634,9 @@ mcore_elf_check_relocs (bfd * abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_MCORE_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c index d1ee6a9..1993b03 100644 --- a/bfd/elf32-mep.c +++ b/bfd/elf32-mep.c @@ -1,5 +1,5 @@ /* MeP-specific support for 32-bit ELF. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -402,48 +402,6 @@ mep_info_to_howto_rela 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, @@ -513,18 +471,7 @@ mep_elf_relocate_section 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; @@ -539,56 +486,17 @@ mep_elf_relocate_section 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]; + bfd_boolean warned, 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); 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)) @@ -603,23 +511,14 @@ mep_elf_relocate_section } 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; - } + continue; - switch (r_type) - { - default: - r = mep_final_link_relocate (howto, input_bfd, input_section, - contents, rel, relocation); - break; - } + if (r_type == R_RELC) + r = bfd_elf_perform_complex_relocation (input_bfd, input_section, + contents, rel, relocation); + else + r = mep_final_link_relocate (howto, input_bfd, input_section, + contents, rel, relocation); if (r != bfd_reloc_ok) { @@ -675,63 +574,6 @@ mep_elf_relocate_section 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. */ @@ -842,8 +684,7 @@ static const char * config_names[] = { "basic" /* start-mepcfgtool */ - ,"simple" - ,"fmax" + ,"default" /* end-mepcfgtool */ }; @@ -864,7 +705,7 @@ mep_elf_print_private_bfd_data (bfd * abfd, void * ptr) _bfd_elf_print_private_bfd_data (abfd, ptr); flags = elf_elfheader (abfd)->e_flags; - fprintf (file, _("private flags = 0x%lx"), (long)flags); + fprintf (file, _("private flags = 0x%lx"), (unsigned long) flags); partial_flags = (flags & EF_MEP_CPU_MASK) >> 24; if (partial_flags < ARRAY_SIZE (core_names)) @@ -890,6 +731,7 @@ elf32_mep_machine (bfd * abfd) 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_C5: return bfd_mach_mep_c5; case EF_MEP_CPU_H1: return bfd_mach_mep_h1; } @@ -899,11 +741,6 @@ elf32_mep_machine (bfd * abfd) 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; } @@ -940,23 +777,17 @@ mep_elf_fake_sections (bfd * abfd ATTRIBUTE_UNUSED, #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_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 +#define elf_backend_rela_normal 1 #include "elf32-target.h" diff --git a/bfd/elf32-microblaze.c b/bfd/elf32-microblaze.c new file mode 100644 index 0000000..c975e76 --- /dev/null +++ b/bfd/elf32-microblaze.c @@ -0,0 +1,3059 @@ +/* Xilinx MicroBlaze-specific support for 32-bit ELF + + Copyright 2009 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the + Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, + Boston, MA 02110-1301, USA. */ + + +int dbg = 0; + +#include "bfd.h" +#include "sysdep.h" +#include "bfdlink.h" +#include "libbfd.h" +#include "elf-bfd.h" +#include "elf/microblaze.h" +#include + +#define USE_RELA /* Only USE_REL is actually significant, but this is + here are a reminder... */ +#define INST_WORD_SIZE 4 + +static int ro_small_data_pointer = 0; +static int rw_small_data_pointer = 0; + +static reloc_howto_type * microblaze_elf_howto_table [(int) R_MICROBLAZE_max]; + +static reloc_howto_type microblaze_elf_howto_raw[] = +{ + /* This reloc does nothing. */ + HOWTO (R_MICROBLAZE_NONE, /* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 32, /* Bitsize. */ + FALSE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_bitfield, /* Complain on overflow. */ + NULL, /* Special Function. */ + "R_MICROBLAZE_NONE", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* A standard 32 bit relocation. */ + HOWTO (R_MICROBLAZE_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,/* Special Function. */ + "R_MICROBLAZE_32", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0xffffffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* A standard PCREL 32 bit relocation. */ + HOWTO (R_MICROBLAZE_32_PCREL,/* 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,/* Special Function. */ + "R_MICROBLAZE_32_PCREL", /* Name. */ + TRUE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0xffffffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* A 64 bit PCREL relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_64_PCREL,/* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_dont, /* Complain on overflow. */ + bfd_elf_generic_reloc,/* Special Function. */ + "R_MICROBLAZE_64_PCREL", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* The low half of a PCREL 32 bit relocation. */ + HOWTO (R_MICROBLAZE_32_PCREL_LO, /* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_signed, /* Complain on overflow. */ + bfd_elf_generic_reloc, /* Special Function. */ + "R_MICROBLAZE_32_PCREL_LO", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* A 64 bit relocation. Table entry not really used. */ + HOWTO (R_MICROBLAZE_64, /* 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_MICROBLAZE_64", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* The low half of a 32 bit relocation. */ + HOWTO (R_MICROBLAZE_32_LO, /* 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_MICROBLAZE_32_LO", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* Read-only small data section relocation. */ + HOWTO (R_MICROBLAZE_SRO32, /* Type. */ + 0, /* Rightshift. */ + 2, /* 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_MICROBLAZE_SRO32", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* Read-write small data area relocation. */ + HOWTO (R_MICROBLAZE_SRW32, /* Type. */ + 0, /* Rightshift. */ + 2, /* 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_MICROBLAZE_SRW32", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* This reloc does nothing. Used for relaxation. */ + HOWTO (R_MICROBLAZE_64_NONE, /* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 32, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_bitfield, /* Complain on overflow. */ + NULL, /* Special Function. */ + "R_MICROBLAZE_64_NONE",/* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* Symbol Op Symbol relocation. */ + HOWTO (R_MICROBLAZE_32_SYM_OP_SYM, /* 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,/* Special Function. */ + "R_MICROBLAZE_32_SYM_OP_SYM", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0xffffffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* GNU extension to record C++ vtable hierarchy. */ + HOWTO (R_MICROBLAZE_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_MICROBLAZE_GNU_VTINHERIT", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* GNU extension to record C++ vtable member usage. */ + HOWTO (R_MICROBLAZE_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_MICROBLAZE_GNU_VTENTRY", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* A 64 bit GOTPC relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_GOTPC_64, /* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_dont, /* Complain on overflow. */ + bfd_elf_generic_reloc, /* Special Function. */ + "R_MICROBLAZE_GOTPC_64", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* A 64 bit GOT relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_GOT_64, /* 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_MICROBLAZE_GOT_64",/* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* A 64 bit PLT relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_PLT_64, /* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_dont, /* Complain on overflow. */ + bfd_elf_generic_reloc,/* Special Function. */ + "R_MICROBLAZE_PLT_64",/* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* Table-entry not really used. */ + HOWTO (R_MICROBLAZE_REL, /* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_dont, /* Complain on overflow. */ + bfd_elf_generic_reloc,/* Special Function. */ + "R_MICROBLAZE_REL", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* Table-entry not really used. */ + HOWTO (R_MICROBLAZE_JUMP_SLOT,/* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_dont, /* Complain on overflow. */ + bfd_elf_generic_reloc,/* Special Function. */ + "R_MICROBLAZE_JUMP_SLOT", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* Table-entry not really used. */ + HOWTO (R_MICROBLAZE_GLOB_DAT,/* Type. */ + 0, /* Rightshift. */ + 2, /* Size (0 = byte, 1 = short, 2 = long). */ + 16, /* Bitsize. */ + TRUE, /* PC_relative. */ + 0, /* Bitpos. */ + complain_overflow_dont, /* Complain on overflow. */ + bfd_elf_generic_reloc,/* Special Function. */ + "R_MICROBLAZE_GLOB_DAT", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + TRUE), /* PC relative offset? */ + + /* A 64 bit GOT relative relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_GOTOFF_64, /* 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_MICROBLAZE_GOTOFF_64", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* A 32 bit GOT relative relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_GOTOFF_32, /* 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_MICROBLAZE_GOTOFF_32", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ + + /* COPY relocation. Table-entry not really used. */ + HOWTO (R_MICROBLAZE_COPY, /* 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_MICROBLAZE_COPY", /* Name. */ + FALSE, /* Partial Inplace. */ + 0, /* Source Mask. */ + 0x0000ffff, /* Dest Mask. */ + FALSE), /* PC relative offset? */ +}; + +#ifndef NUM_ELEM +#define NUM_ELEM(a) (sizeof (a) / sizeof (a)[0]) +#endif + +/* Initialize the microblaze_elf_howto_table, so that linear accesses can be done. */ + +static void +microblaze_elf_howto_init (void) +{ + unsigned int i; + + for (i = NUM_ELEM (microblaze_elf_howto_raw); i--;) + { + unsigned int type; + + type = microblaze_elf_howto_raw[i].type; + + BFD_ASSERT (type < NUM_ELEM (microblaze_elf_howto_table)); + + microblaze_elf_howto_table [type] = & microblaze_elf_howto_raw [i]; + } +} + +static reloc_howto_type * +microblaze_elf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) +{ + enum elf_microblaze_reloc_type microblaze_reloc = R_MICROBLAZE_NONE; + + switch (code) + { + case BFD_RELOC_NONE: + microblaze_reloc = R_MICROBLAZE_NONE; + break; + case BFD_RELOC_MICROBLAZE_64_NONE: + microblaze_reloc = R_MICROBLAZE_64_NONE; + break; + case BFD_RELOC_32: + microblaze_reloc = R_MICROBLAZE_32; + break; + /* RVA is treated the same as 32 */ + case BFD_RELOC_RVA: + microblaze_reloc = R_MICROBLAZE_32; + break; + case BFD_RELOC_32_PCREL: + microblaze_reloc = R_MICROBLAZE_32_PCREL; + break; + case BFD_RELOC_64_PCREL: + microblaze_reloc = R_MICROBLAZE_64_PCREL; + break; + case BFD_RELOC_MICROBLAZE_32_LO_PCREL: + microblaze_reloc = R_MICROBLAZE_32_PCREL_LO; + break; + case BFD_RELOC_64: + microblaze_reloc = R_MICROBLAZE_64; + break; + case BFD_RELOC_MICROBLAZE_32_LO: + microblaze_reloc = R_MICROBLAZE_32_LO; + break; + case BFD_RELOC_MICROBLAZE_32_ROSDA: + microblaze_reloc = R_MICROBLAZE_SRO32; + break; + case BFD_RELOC_MICROBLAZE_32_RWSDA: + microblaze_reloc = R_MICROBLAZE_SRW32; + break; + case BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM: + microblaze_reloc = R_MICROBLAZE_32_SYM_OP_SYM; + break; + case BFD_RELOC_VTABLE_INHERIT: + microblaze_reloc = R_MICROBLAZE_GNU_VTINHERIT; + break; + case BFD_RELOC_VTABLE_ENTRY: + microblaze_reloc = R_MICROBLAZE_GNU_VTENTRY; + break; + case BFD_RELOC_MICROBLAZE_64_GOTPC: + microblaze_reloc = R_MICROBLAZE_GOTPC_64; + break; + case BFD_RELOC_MICROBLAZE_64_GOT: + microblaze_reloc = R_MICROBLAZE_GOT_64; + break; + case BFD_RELOC_MICROBLAZE_64_PLT: + microblaze_reloc = R_MICROBLAZE_PLT_64; + break; + case BFD_RELOC_MICROBLAZE_64_GOTOFF: + microblaze_reloc = R_MICROBLAZE_GOTOFF_64; + break; + case BFD_RELOC_MICROBLAZE_32_GOTOFF: + microblaze_reloc = R_MICROBLAZE_GOTOFF_32; + break; + case BFD_RELOC_MICROBLAZE_COPY: + microblaze_reloc = R_MICROBLAZE_COPY; + break; + default: + return (reloc_howto_type *) NULL; + } + + if (!microblaze_elf_howto_table [R_MICROBLAZE_32]) + /* Initialize howto table if needed. */ + microblaze_elf_howto_init (); + + return microblaze_elf_howto_table [(int) microblaze_reloc]; +}; + +static reloc_howto_type * +microblaze_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, + const char *r_name) +{ + unsigned int i; + + for (i = 0; i < NUM_ELEM (microblaze_elf_howto_raw); i++) + if (microblaze_elf_howto_raw[i].name != NULL + && strcasecmp (microblaze_elf_howto_raw[i].name, r_name) == 0) + return µblaze_elf_howto_raw[i]; + + return NULL; +} + +/* Set the howto pointer for a RCE ELF reloc. */ + +static void +microblaze_elf_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED, + arelent * cache_ptr, + Elf_Internal_Rela * dst) +{ + if (!microblaze_elf_howto_table [R_MICROBLAZE_32]) + /* Initialize howto table if needed. */ + microblaze_elf_howto_init (); + + BFD_ASSERT (ELF32_R_TYPE (dst->r_info) < (unsigned int) R_MICROBLAZE_max); + + cache_ptr->howto = microblaze_elf_howto_table [ELF32_R_TYPE (dst->r_info)]; +} + +/* Microblaze ELF local labels start with 'L.' or '$L', not '.L'. */ + +static bfd_boolean +microblaze_elf_is_local_label_name (bfd *abfd, const char *name) +{ + if (name[0] == 'L' && name[1] == '.') + return TRUE; + + if (name[0] == '$' && name[1] == 'L') + return TRUE; + + /* With gcc, the labels go back to starting with '.', so we accept + the generic ELF local label syntax as well. */ + return _bfd_elf_is_local_label_name (abfd, name); +} + +/* The microblaze linker (like many others) needs to keep track of + the number of relocs that it decides to copy as dynamic relocs in + check_relocs for each symbol. This is so that it can later discard + them if they are found to be unnecessary. We store the information + in a field extending the regular ELF linker hash table. */ + +struct elf32_mb_dyn_relocs +{ + struct elf32_mb_dyn_relocs *next; + + /* The input section of the reloc. */ + asection *sec; + + /* Total number of relocs copied for the input section. */ + bfd_size_type count; + + /* Number of pc-relative relocs copied for the input section. */ + bfd_size_type pc_count; +}; + +/* ELF linker hash entry. */ + +struct elf32_mb_link_hash_entry +{ + struct elf_link_hash_entry elf; + + /* Track dynamic relocs copied for this symbol. */ + struct elf32_mb_dyn_relocs *dyn_relocs; + +}; + +#define elf32_mb_hash_entry(ent) ((struct elf32_mb_link_hash_entry *)(ent)) + +/* ELF linker hash table. */ + +struct elf32_mb_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 *sdynbss; + asection *srelbss; + + /* Small local sym to section mapping cache. */ + struct sym_cache sym_sec; +}; + +/* Get the ELF linker hash table from a link_info structure. */ + +#define elf32_mb_hash_table(p) \ + ((struct elf32_mb_link_hash_table *) ((p)->hash)) + +/* Create an entry in a microblaze ELF linker hash table. */ + +static struct bfd_hash_entry * +link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) +{ + /* Allocate the structure if it has not already been allocated by a + subclass. */ + if (entry == NULL) + { + entry = bfd_hash_allocate (table, + sizeof (struct elf32_mb_link_hash_entry)); + if (entry == NULL) + return entry; + } + + /* Call the allocation method of the superclass. */ + entry = _bfd_elf_link_hash_newfunc (entry, table, string); + if (entry != NULL) + { + struct elf32_mb_link_hash_entry *eh; + + eh = (struct elf32_mb_link_hash_entry *) entry; + eh->dyn_relocs = NULL; + } + + return entry; +} + +/* Create a mb ELF linker hash table. */ + +static struct bfd_link_hash_table * +microblaze_elf_link_hash_table_create (bfd *abfd) +{ + struct elf32_mb_link_hash_table *ret; + bfd_size_type amt = sizeof (struct elf32_mb_link_hash_table); + + ret = (struct elf32_mb_link_hash_table *) bfd_zmalloc (amt); + if (ret == NULL) + return NULL; + + if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc, + sizeof (struct elf32_mb_link_hash_entry))) + { + free (ret); + return NULL; + } + + return &ret->elf.root; +} + +/* Set the values of the small data pointers. */ + +static void +microblaze_elf_final_sdp (struct bfd_link_info *info) +{ + struct bfd_link_hash_entry *h; + + h = bfd_link_hash_lookup (info->hash, RO_SDA_ANCHOR_NAME, FALSE, FALSE, TRUE); + if (h != (struct bfd_link_hash_entry *) NULL + && h->type == bfd_link_hash_defined) + ro_small_data_pointer = (h->u.def.value + + h->u.def.section->output_section->vma + + h->u.def.section->output_offset); + + h = bfd_link_hash_lookup (info->hash, RW_SDA_ANCHOR_NAME, FALSE, FALSE, TRUE); + if (h != (struct bfd_link_hash_entry *) NULL + && h->type == bfd_link_hash_defined) + rw_small_data_pointer = (h->u.def.value + + h->u.def.section->output_section->vma + + h->u.def.section->output_offset); +} + +/* This code is taken from elf32-m32r.c + 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 adjust 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 +microblaze_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 elf32_mb_link_hash_table *htab; + Elf_Internal_Shdr *symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd); + Elf_Internal_Rela *rel, *relend; + /* Assume success. */ + bfd_boolean ret = TRUE; + asection *sreloc; + bfd_vma *local_got_offsets; + + if (!microblaze_elf_howto_table[R_MICROBLAZE_max-1]) + microblaze_elf_howto_init (); + + htab = elf32_mb_hash_table (info); + local_got_offsets = elf_local_got_offsets (input_bfd); + + sreloc = elf_section_data (input_section)->sreloc; + + rel = relocs; + relend = relocs + input_section->reloc_count; + for (; rel < relend; rel++) + { + int r_type; + reloc_howto_type *howto; + unsigned long r_symndx; + bfd_vma addend = rel->r_addend; + bfd_vma offset = rel->r_offset; + struct elf_link_hash_entry *h; + Elf_Internal_Sym *sym; + asection *sec; + const char *sym_name; + bfd_reloc_status_type r = bfd_reloc_ok; + const char *errmsg = NULL; + bfd_boolean unresolved_reloc = FALSE; + + h = NULL; + r_type = ELF32_R_TYPE (rel->r_info); + if (r_type < 0 || r_type >= (int) R_MICROBLAZE_max) + { + (*_bfd_error_handler) (_("%s: unknown relocation type %d"), + bfd_get_filename (input_bfd), (int) r_type); + bfd_set_error (bfd_error_bad_value); + ret = FALSE; + continue; + } + + howto = microblaze_elf_howto_table[r_type]; + 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. */ + sec = NULL; + if (r_symndx >= symtab_hdr->sh_info) + /* External symbol. */ + continue; + + /* Local symbol. */ + sym = local_syms + r_symndx; + sym_name = ""; + /* 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. */ + continue; + + sec = local_sections[r_symndx]; + addend += sec->output_offset + sym->st_value; +#ifndef USE_REL + /* This can't be done for USE_REL because it doesn't mean anything + and elf_link_input_bfd asserts this stays zero. */ + /* rel->r_addend = addend; */ +#endif + +#ifndef USE_REL + /* Addends are stored with relocs. We're done. */ + continue; +#else /* USE_REL */ + /* If partial_inplace, we need to store any additional addend + back in the section. */ + if (!howto->partial_inplace) + continue; + /* ??? Here is a nice place to call a special_function like handler. */ + r = _bfd_relocate_contents (howto, input_bfd, addend, + contents + offset); +#endif /* USE_REL */ + } + else + { + bfd_vma relocation; + + /* This is a final link. */ + sym = NULL; + sec = NULL; + unresolved_reloc = FALSE; + + if (r_symndx < symtab_hdr->sh_info) + { + /* Local symbol. */ + sym = local_syms + r_symndx; + sec = local_sections[r_symndx]; + if (sec == 0) + continue; + sym_name = ""; + relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); + /* r_addend may have changed if the reference section was + a merge section. */ + addend = rel->r_addend; + } + else + { + /* External symbol. */ + bfd_boolean warned ATTRIBUTE_UNUSED; + + 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; + } + + /* Sanity check the address. */ + if (offset > bfd_get_section_limit (output_bfd, input_section)) + { + r = bfd_reloc_outofrange; + goto check_reloc; + } + + switch ((int) r_type) + { + case (int) R_MICROBLAZE_SRO32 : + { + const char *name; + + /* Only relocate if the symbol is defined. */ + if (sec) + { + name = bfd_get_section_name (abfd, sec); + + if (strcmp (name, ".sdata2") == 0 + || strcmp (name, ".sbss2") == 0) + { + if (ro_small_data_pointer == 0) + microblaze_elf_final_sdp (info); + if (ro_small_data_pointer == 0) + { + ret = FALSE; + r = bfd_reloc_undefined; + goto check_reloc; + } + + /* At this point `relocation' contains the object's + address. */ + relocation -= ro_small_data_pointer; + /* Now it contains the offset from _SDA2_BASE_. */ + r = _bfd_final_link_relocate (howto, input_bfd, + input_section, + contents, offset, + relocation, addend); + } + else + { + (*_bfd_error_handler) (_("%s: The target (%s) of an %s relocation is in the wrong section (%s)"), + bfd_get_filename (input_bfd), + sym_name, + microblaze_elf_howto_table[(int) r_type]->name, + bfd_get_section_name (abfd, sec)); + /*bfd_set_error (bfd_error_bad_value); ??? why? */ + ret = FALSE; + continue; + } + } + } + break; + + case (int) R_MICROBLAZE_SRW32 : + { + const char *name; + + /* Only relocate if the symbol is defined. */ + if (sec) + { + name = bfd_get_section_name (abfd, sec); + + if (strcmp (name, ".sdata") == 0 + || strcmp (name, ".sbss") == 0) + { + if (rw_small_data_pointer == 0) + microblaze_elf_final_sdp (info); + if (rw_small_data_pointer == 0) + { + ret = FALSE; + r = bfd_reloc_undefined; + goto check_reloc; + } + + /* At this point `relocation' contains the object's + address. */ + relocation -= rw_small_data_pointer; + /* Now it contains the offset from _SDA_BASE_. */ + r = _bfd_final_link_relocate (howto, input_bfd, + input_section, + contents, offset, + relocation, addend); + } + else + { + (*_bfd_error_handler) (_("%s: The target (%s) of an %s relocation is in the wrong section (%s)"), + bfd_get_filename (input_bfd), + sym_name, + microblaze_elf_howto_table[(int) r_type]->name, + bfd_get_section_name (abfd, sec)); + /*bfd_set_error (bfd_error_bad_value); ??? why? */ + ret = FALSE; + continue; + } + } + } + break; + + case (int) R_MICROBLAZE_32_SYM_OP_SYM: + break; /* Do nothing. */ + + case (int) R_MICROBLAZE_GOTPC_64: + relocation = htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset; + relocation -= (input_section->output_section->vma + + input_section->output_offset + + offset + INST_WORD_SIZE); + relocation += addend; + bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, + contents + offset + 2); + bfd_put_16 (input_bfd, relocation & 0xffff, + contents + offset + 2 + INST_WORD_SIZE); + break; + + case (int) R_MICROBLAZE_PLT_64: + { + bfd_vma immediate; + if (htab->splt != NULL && h != NULL + && h->plt.offset != (bfd_vma) -1) + { + relocation = (htab->splt->output_section->vma + + htab->splt->output_offset + + h->plt.offset); + unresolved_reloc = FALSE; + immediate = relocation - (input_section->output_section->vma + + input_section->output_offset + + offset + INST_WORD_SIZE); + bfd_put_16 (input_bfd, (immediate >> 16) & 0xffff, + contents + offset + 2); + bfd_put_16 (input_bfd, immediate & 0xffff, + contents + offset + 2 + INST_WORD_SIZE); + } + else + { + relocation -= (input_section->output_section->vma + + input_section->output_offset + + offset + INST_WORD_SIZE); + immediate = relocation; + bfd_put_16 (input_bfd, (immediate >> 16) & 0xffff, + contents + offset + 2); + bfd_put_16 (input_bfd, immediate & 0xffff, + contents + offset + 2 + INST_WORD_SIZE); + } + break; + } + + case (int) R_MICROBLAZE_GOT_64: + { + if (htab->sgot == NULL) + abort (); + if (h == NULL) + { + bfd_vma off; + if (local_got_offsets == NULL) + abort (); + off = local_got_offsets[r_symndx]; + /* The LSB indicates whether we've already + created relocation. */ + if (off & 1) + off &= ~1; + else + { + bfd_put_32 (output_bfd, relocation + addend, + htab->sgot->contents + off); + + if (info->shared) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + if (htab->srelgot == NULL) + abort (); + outrel.r_offset = (htab->sgot->output_section->vma + + htab->sgot->output_offset + + off); + outrel.r_info = ELF32_R_INFO (0, R_MICROBLAZE_REL); + outrel.r_addend = relocation + addend; + loc = htab->srelgot->contents; + loc += htab->srelgot->reloc_count++ + * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + } + local_got_offsets[r_symndx] |= 1; + } + relocation = htab->sgot->output_section->vma + + htab->sgot->output_offset + off + - htab->sgotplt->output_section->vma + - htab->sgotplt->output_offset; + unresolved_reloc = FALSE; + } + else + { + if (htab->sgotplt != NULL && h != NULL + && h->got.offset != (bfd_vma) -1) + { + bfd_put_32 (output_bfd, relocation + addend, + htab->sgot->contents + h->got.offset); + relocation = htab->sgot->output_section->vma + + htab->sgot->output_offset + + h->got.offset + - htab->sgotplt->output_section->vma + - htab->sgotplt->output_offset; + unresolved_reloc = FALSE; + } + else + abort (); /* ??? */ + } + bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, + contents + offset + 2); + bfd_put_16 (input_bfd, relocation & 0xffff, + contents + offset + 2 + INST_WORD_SIZE); + break; + } + + case (int) R_MICROBLAZE_GOTOFF_64: + { + bfd_vma immediate; + unsigned short lo, high; + relocation += addend; + relocation -= htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset; + /* Write this value into correct location. */ + immediate = relocation; + lo = immediate & 0x0000ffff; + high = (immediate >> 16) & 0x0000ffff; + bfd_put_16 (input_bfd, high, contents + offset + 2); + bfd_put_16 (input_bfd, lo, contents + offset + INST_WORD_SIZE + 2); + break; + } + + case (int) R_MICROBLAZE_GOTOFF_32: + { + relocation += addend; + relocation -= htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset; + /* Write this value into correct location. */ + bfd_put_32 (input_bfd, relocation, contents + offset); + break; + } + + case (int) R_MICROBLAZE_64_PCREL : + case (int) R_MICROBLAZE_64: + case (int) R_MICROBLAZE_32: + { + /* 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) + { + relocation += addend; + if (r_type == R_MICROBLAZE_32) + bfd_put_32 (input_bfd, relocation, contents + offset); + else + { + if (r_type == R_MICROBLAZE_64_PCREL) + relocation -= (input_section->output_section->vma + + input_section->output_offset + + offset + INST_WORD_SIZE); + bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, + contents + offset + 2); + bfd_put_16 (input_bfd, relocation & 0xffff, + contents + offset + 2 + INST_WORD_SIZE); + } + break; + } + + if ((info->shared + && (h == NULL + || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + || h->root.type != bfd_link_hash_undefweak) + && (!howto->pc_relative + || (h != NULL + && h->dynindx != -1 + && (!info->symbolic + || !h->def_regular)))) + || (!info->shared + && h != NULL + && h->dynindx != -1 + && !h->non_got_ref + && ((h->def_dynamic + && !h->def_regular) + || h->root.type == bfd_link_hash_undefweak + || h->root.type == bfd_link_hash_undefined))) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + bfd_boolean skip, relocate = FALSE; + + /* When generating a shared object, these relocations + are copied into the output file to be resolved at run + time. */ + + BFD_ASSERT (sreloc != NULL); + + skip = FALSE; + + outrel.r_offset = + _bfd_elf_section_offset (output_bfd, info, input_section, + rel->r_offset); + if (outrel.r_offset == (bfd_vma) -1) + skip = TRUE; + else if (outrel.r_offset == (bfd_vma) -2) + skip = TRUE, relocate = TRUE; + outrel.r_offset += (input_section->output_section->vma + + input_section->output_offset); + + if (skip) + memset (&outrel, 0, sizeof outrel); + /* h->dynindx may be -1 if the symbol was marked to + become local. */ + else if (h != NULL + && ((! info->symbolic && h->dynindx != -1) + || !h->def_regular)) + { + BFD_ASSERT (h->dynindx != -1); + outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); + outrel.r_addend = addend; + } + else + { + if (r_type == R_MICROBLAZE_32) + { + outrel.r_info = ELF32_R_INFO (0, R_MICROBLAZE_REL); + outrel.r_addend = relocation + addend; + } + else + { + BFD_FAIL (); + (*_bfd_error_handler) + (_("%B: probably compiled without -fPIC?"), + input_bfd); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + } + + loc = sreloc->contents; + loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + break; + } + else + { + relocation += addend; + if (r_type == R_MICROBLAZE_32) + bfd_put_32 (input_bfd, relocation, contents + offset); + else + { + if (r_type == R_MICROBLAZE_64_PCREL) + relocation -= (input_section->output_section->vma + + input_section->output_offset + + offset + INST_WORD_SIZE); + bfd_put_16 (input_bfd, (relocation >> 16) & 0xffff, + contents + offset + 2); + bfd_put_16 (input_bfd, relocation & 0xffff, + contents + offset + 2 + INST_WORD_SIZE); + } + break; + } + } + + default : + r = _bfd_final_link_relocate (howto, input_bfd, input_section, + contents, offset, + relocation, addend); + break; + } + } + + check_reloc: + + if (r != bfd_reloc_ok) + { + /* FIXME: This should be generic enough to go in a utility. */ + const char *name; + + 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 (errmsg != NULL) + goto common_error; + + 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, offset))) + return FALSE; + break; + + case bfd_reloc_undefined: + if (!((*info->callbacks->undefined_symbol) + (info, name, input_bfd, input_section, offset, TRUE))) + return FALSE; + break; + + case bfd_reloc_outofrange: + errmsg = _("internal error: out of range error"); + goto common_error; + + case bfd_reloc_notsupported: + errmsg = _("internal error: unsupported relocation error"); + goto common_error; + + case bfd_reloc_dangerous: + errmsg = _("internal error: dangerous error"); + goto common_error; + + default: + errmsg = _("internal error: unknown error"); + /* Fall through. */ + common_error: + if (!((*info->callbacks->warning) + (info, errmsg, name, input_bfd, input_section, offset))) + return FALSE; + break; + } + } + } + + return ret; +} + +/* Calculate fixup value for reference. */ + +static int +calc_fixup (bfd_vma addr, asection *sec) +{ + int i, fixup = 0; + + if (sec == NULL || sec->relax == NULL) + return 0; + + /* Look for addr in relax table, total fixup value. */ + for (i = 0; i < sec->relax_count; i++) + { + if (addr <= sec->relax[i].addr) + break; + fixup += sec->relax[i].size; + } + + return fixup; +} + +static bfd_boolean +microblaze_elf_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 *free_relocs = NULL; + Elf_Internal_Rela *irel, *irelend; + bfd_byte *contents = NULL; + bfd_byte *free_contents = NULL; + int rel_count; + unsigned int shndx; + int i, index; + asection *o; + struct elf_link_hash_entry *sym_hash; + Elf_Internal_Sym *isymbuf, *isymend; + Elf_Internal_Sym *isym; + int symcount; + int offset; + bfd_vma src, dest; + + /* We only do this once per section. We may be able to delete some code + by running multiple passes, but it is not worth it. */ + *again = FALSE; + + /* Only do this for a text section. */ + if (link_info->relocatable + || (sec->flags & SEC_RELOC) == 0 + || (sec->reloc_count == 0)) + return TRUE; + + BFD_ASSERT ((sec->size > 0) || (sec->rawsize > 0)); + + /* If this is the first time we have been called for this section, + initialize the cooked size. */ + if (sec->size == 0) + sec->size = sec->rawsize; + + /* Get symbols for this section. */ + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; + symcount = symtab_hdr->sh_size / sizeof (Elf32_External_Sym); + if (isymbuf == NULL) + isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr, symcount, + 0, NULL, NULL, NULL); + BFD_ASSERT (isymbuf != NULL); + + internal_relocs = _bfd_elf_link_read_relocs + (abfd, sec, NULL, NULL, link_info->keep_memory); + if (internal_relocs == NULL) + goto error_return; + if (! link_info->keep_memory) + free_relocs = internal_relocs; + + sec->relax = (struct relax_table *) bfd_malloc ((sec->reloc_count + 1) + * sizeof (struct relax_table)); + if (sec->relax == NULL) + goto error_return; + sec->relax_count = 0; + + irelend = internal_relocs + sec->reloc_count; + rel_count = 0; + for (irel = internal_relocs; irel < irelend; irel++, rel_count++) + { + bfd_vma symval; + if ((ELF32_R_TYPE (irel->r_info) != (int) R_MICROBLAZE_64_PCREL) + && (ELF32_R_TYPE (irel->r_info) != (int) R_MICROBLAZE_64 )) + continue; /* Can't delete this reloc. */ + + /* Get the section contents. */ + if (contents == NULL) + { + if (elf_section_data (sec)->this_hdr.contents != NULL) + contents = elf_section_data (sec)->this_hdr.contents; + else + { + contents = (bfd_byte *) bfd_malloc (sec->size); + if (contents == NULL) + goto error_return; + free_contents = contents; + + if (!bfd_get_section_contents (abfd, sec, contents, + (file_ptr) 0, sec->size)) + goto error_return; + elf_section_data (sec)->this_hdr.contents = contents; + } + } + + /* 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 = _bfd_elf_rela_local_sym (abfd, isym, &sym_sec, irel); + } + else + { + unsigned long indx; + struct elf_link_hash_entry *h; + + 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); + } + + /* If this is a PC-relative reloc, subtract the instr offset from + the symbol value. */ + if (ELF32_R_TYPE (irel->r_info) == (int) R_MICROBLAZE_64_PCREL) + { + symval = symval + irel->r_addend + - (irel->r_offset + + sec->output_section->vma + + sec->output_offset); + } + else + symval += irel->r_addend; + + if ((symval & 0xffff8000) == 0 + || (symval & 0xffff8000) == 0xffff8000) + { + /* We can delete this instruction. */ + sec->relax[sec->relax_count].addr = irel->r_offset; + sec->relax[sec->relax_count].size = INST_WORD_SIZE; + sec->relax_count++; + + /* Rewrite relocation type. */ + switch ((enum elf_microblaze_reloc_type) ELF32_R_TYPE (irel->r_info)) + { + case R_MICROBLAZE_64_PCREL: + irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), + (int) R_MICROBLAZE_32_PCREL_LO); + break; + case R_MICROBLAZE_64: + irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), + (int) R_MICROBLAZE_32_LO); + break; + default: + /* Cannot happen. */ + BFD_ASSERT (FALSE); + } + } + } /* Loop through all relocations. */ + + /* Loop through the relocs again, and see if anything needs to change. */ + if (sec->relax_count > 0) + { + shndx = _bfd_elf_section_from_bfd_section (abfd, sec); + rel_count = 0; + sec->relax[sec->relax_count].addr = sec->size; + + for (irel = internal_relocs; irel < irelend; irel++, rel_count++) + { + bfd_vma nraddr; + + /* Get the new reloc address. */ + nraddr = irel->r_offset - calc_fixup (irel->r_offset, sec); + switch ((enum elf_microblaze_reloc_type) ELF32_R_TYPE (irel->r_info)) + { + default: + break; + case R_MICROBLAZE_64_PCREL: + break; + case R_MICROBLAZE_64: + case R_MICROBLAZE_32_LO: + /* If this reloc is against a symbol defined in this + section, we must check the addend to see it will put the value in + range to be adjusted, and hence must be changed. */ + if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info) + { + Elf_Internal_Sym *isym; + isym = isymbuf + ELF32_R_SYM (irel->r_info); + /* Only handle relocs against .text. */ + if (isym->st_shndx == shndx + && ELF32_ST_TYPE (isym->st_info) == STT_SECTION) + irel->r_addend -= calc_fixup (irel->r_addend, sec); + } + break; + case R_MICROBLAZE_NONE: + { + /* This was a PC-relative instruction that was + completely resolved. */ + int sfix, efix; + bfd_vma target_address; + target_address = irel->r_addend + irel->r_offset; + sfix = calc_fixup (irel->r_offset, sec); + efix = calc_fixup (target_address, sec); + irel->r_addend -= (efix - sfix); + /* Should use HOWTO. */ + bfd_put_16 (abfd, irel->r_addend, contents + irel->r_offset + 2); + } + break; + case R_MICROBLAZE_64_NONE: + { + /* This was a PC-relative 64-bit instruction that was + completely resolved. */ + int sfix, efix; + bfd_vma target_address; + target_address = irel->r_addend + irel->r_offset + INST_WORD_SIZE; + sfix = calc_fixup (irel->r_offset + INST_WORD_SIZE, sec); + efix = calc_fixup (target_address, sec); + irel->r_addend -= (efix - sfix); + bfd_put_16 (abfd, irel->r_addend, contents + irel->r_offset + + INST_WORD_SIZE + 2); + } + break; + } + irel->r_offset = nraddr; + } /* Change all relocs in this section. */ + + /* Look through all other sections. */ + for (o = abfd->sections; o != NULL; o = o->next) + { + Elf_Internal_Rela *internal_relocs; + Elf_Internal_Rela *irelscan, *irelscanend; + bfd_byte *ocontents; + + if (o == sec + || (o->flags & SEC_RELOC) == 0 + || o->reloc_count == 0) + continue; + + /* We always cache the relocs. Perhaps, if info->keep_memory is + FALSE, we should free them, if we are permitted to. */ + + internal_relocs = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL, TRUE); + if (internal_relocs == NULL) + goto error_return; + + ocontents = NULL; + irelscanend = internal_relocs + o->reloc_count; + for (irelscan = internal_relocs; irelscan < irelscanend; irelscan++) + { + if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32) + { + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); + + /* Look at the reloc only if the value has been resolved. */ + if (isym->st_shndx == shndx + && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION)) + { + if (ocontents == NULL) + { + if (elf_section_data (o)->this_hdr.contents != NULL) + ocontents = elf_section_data (o)->this_hdr.contents; + else + { + /* We always cache the section contents. + Perhaps, if info->keep_memory is FALSE, we + should free them, if we are permitted to. */ + if (o->rawsize == 0) + o->rawsize = o->size; + ocontents = (bfd_byte *) bfd_malloc (o->rawsize); + if (ocontents == NULL) + goto error_return; + if (!bfd_get_section_contents (abfd, o, ocontents, + (file_ptr) 0, + o->rawsize)) + goto error_return; + elf_section_data (o)->this_hdr.contents = ocontents; + } + + } + irelscan->r_addend -= calc_fixup (irelscan->r_addend, sec); + } + else if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_SYM_OP_SYM) + { + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); + + /* Look at the reloc only if the value has been resolved. */ + if (ocontents == NULL) + { + if (elf_section_data (o)->this_hdr.contents != NULL) + ocontents = elf_section_data (o)->this_hdr.contents; + else + { + /* We always cache the section contents. + Perhaps, if info->keep_memory is FALSE, we + should free them, if we are permitted to. */ + + if (o->rawsize == 0) + o->rawsize = o->size; + ocontents = (bfd_byte *) bfd_malloc (o->rawsize); + if (ocontents == NULL) + goto error_return; + if (!bfd_get_section_contents (abfd, o, ocontents, + (file_ptr) 0, + o->rawsize)) + goto error_return; + elf_section_data (o)->this_hdr.contents = ocontents; + } + } + irelscan->r_addend -= calc_fixup (irel->r_addend + + isym->st_value, + sec); + } + } + else if ((ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_PCREL_LO) + || (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_32_LO)) + { + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); + + /* Look at the reloc only if the value has been resolved. */ + if (isym->st_shndx == shndx + && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION)) + { + bfd_vma immediate; + bfd_vma target_address; + + if (ocontents == NULL) + { + if (elf_section_data (o)->this_hdr.contents != NULL) + ocontents = elf_section_data (o)->this_hdr.contents; + else + { + /* We always cache the section contents. + Perhaps, if info->keep_memory is FALSE, we + should free them, if we are permitted to. */ + if (o->rawsize == 0) + o->rawsize = o->size; + ocontents = (bfd_byte *) bfd_malloc (o->rawsize); + if (ocontents == NULL) + goto error_return; + if (!bfd_get_section_contents (abfd, o, ocontents, + (file_ptr) 0, + o->rawsize)) + goto error_return; + elf_section_data (o)->this_hdr.contents = ocontents; + } + } + + immediate = (unsigned short) bfd_get_16 (abfd, ocontents + + irelscan->r_offset + 2); + target_address = immediate; + offset = calc_fixup (target_address, sec); + immediate -= offset; + irelscan->r_addend -= offset; + bfd_put_16 (abfd, immediate, ocontents + irelscan->r_offset + 2); + } + } + + if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_64) + { + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); + + /* Look at the reloc only if the value has been resolved. */ + if (isym->st_shndx == shndx + && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION)) + { + bfd_vma immediate; + + if (ocontents == NULL) + { + if (elf_section_data (o)->this_hdr.contents != NULL) + ocontents = elf_section_data (o)->this_hdr.contents; + else + { + /* We always cache the section contents. + Perhaps, if info->keep_memory is FALSE, we + should free them, if we are permitted to. */ + + if (o->rawsize == 0) + o->rawsize = o->size; + ocontents = (bfd_byte *) bfd_malloc (o->rawsize); + if (ocontents == NULL) + goto error_return; + if (!bfd_get_section_contents (abfd, o, ocontents, + (file_ptr) 0, + o->rawsize)) + goto error_return; + elf_section_data (o)->this_hdr.contents = ocontents; + } + } + immediate = (unsigned short) (bfd_get_16 (abfd, ocontents + + irelscan->r_offset + + 2) << 16) + & 0xffff0000; + immediate += (unsigned short) (bfd_get_16 (abfd, ocontents + + irelscan->r_offset + + INST_WORD_SIZE + 2)) + & 0x0000ffff; + + offset = calc_fixup (irelscan->r_addend, sec); + immediate -= offset; + irelscan->r_addend -= offset; + } + } + else if (ELF32_R_TYPE (irelscan->r_info) == (int) R_MICROBLAZE_64_PCREL) + { + isym = isymbuf + ELF32_R_SYM (irelscan->r_info); + + /* Look at the reloc only if the value has been resolved. */ + if (isym->st_shndx == shndx + && (ELF32_ST_TYPE (isym->st_info) == STT_SECTION)) + { + bfd_vma immediate; + bfd_vma target_address; + + if (ocontents == NULL) + { + if (elf_section_data (o)->this_hdr.contents != NULL) + ocontents = elf_section_data (o)->this_hdr.contents; + else + { + /* We always cache the section contents. + Perhaps, if info->keep_memory is FALSE, we + should free them, if we are permitted to. */ + if (o->rawsize == 0) + o->rawsize = o->size; + ocontents = (bfd_byte *) bfd_malloc (o->rawsize); + if (ocontents == NULL) + goto error_return; + if (!bfd_get_section_contents (abfd, o, ocontents, + (file_ptr) 0, + o->rawsize)) + goto error_return; + elf_section_data (o)->this_hdr.contents = ocontents; + } + } + + immediate = (unsigned short) + (bfd_get_16 (abfd, ocontents + irelscan->r_offset + 2) << 16) + & 0xffff0000; + immediate += (unsigned short) + (bfd_get_16 (abfd, ocontents + irelscan->r_offset + + INST_WORD_SIZE + 2)) + & 0x0000ffff; + target_address = immediate; + offset = calc_fixup (target_address, sec); + immediate -= offset; + irelscan->r_addend -= offset; + bfd_put_16 (abfd, ((immediate >> 16) & 0x0000ffff), + ocontents + irelscan->r_offset + 2); + bfd_put_16 (abfd, (immediate & 0x0000ffff), + ocontents + irelscan->r_offset + INST_WORD_SIZE + 2); + } + } + } + } + + /* Adjust the local symbols defined in this section. */ + isymend = isymbuf + symtab_hdr->sh_info; + for (isym = isymbuf; isym < isymend; isym++) + { + if (isym->st_shndx == shndx) + isym->st_value =- calc_fixup (isym->st_value, sec); + } + + /* Now adjust the global symbols defined in this section. */ + isym = isymbuf + symtab_hdr->sh_info; + isymend = isymbuf + (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)); + for (index = 0; isym < isymend; isym++, index++) + { + sym_hash = elf_sym_hashes (abfd)[index]; + if (isym->st_shndx == shndx + && (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 -= calc_fixup (sym_hash->root.u.def.value, + sec); + } + } + + /* Physically move the code and change the cooked size. */ + dest = sec->relax[0].addr; + for (i = 0; i < sec->relax_count; i++) + { + int len; + src = sec->relax[i].addr + sec->relax[i].size; + len = sec->relax[i+1].addr - sec->relax[i].addr - sec->relax[i].size; + + memmove (contents + dest, contents + src, len); + sec->size -= sec->relax[i].size; + dest += len; + } + + elf_section_data (sec)->relocs = internal_relocs; + free_relocs = NULL; + + elf_section_data (sec)->this_hdr.contents = contents; + free_contents = NULL; + + symtab_hdr->contents = (bfd_byte *) isymbuf; + } + + if (free_relocs != NULL) + { + free (free_relocs); + free_relocs = NULL; + } + + if (free_contents != NULL) + { + if (!link_info->keep_memory) + free (free_contents); + else + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; + free_contents = NULL; + } + + if (sec->relax_count == 0) + { + free (sec->relax); + sec->relax = NULL; + } + return TRUE; + + error_return: + if (free_relocs != NULL) + free (free_relocs); + if (free_contents != NULL) + free (free_contents); + if (sec->relax != NULL) + { + free (sec->relax); + sec->relax = NULL; + sec->relax_count = 0; + } + return FALSE; +} + +/* Return the section that should be marked against GC for a given + relocation. */ + +static asection * +microblaze_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)) + { + case R_MICROBLAZE_GNU_VTINHERIT: + case R_MICROBLAZE_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 +microblaze_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; +} + +/* PIC support. */ + +#define PLT_ENTRY_SIZE 16 + +#define PLT_ENTRY_WORD_0 0xb0000000 /* "imm 0". */ +#define PLT_ENTRY_WORD_1 0xe9940000 /* "lwi r12,r20,0" - relocated to lwi r12,r20,func@GOT. */ +#define PLT_ENTRY_WORD_1_NOPIC 0xe9800000 /* "lwi r12,r0,0" - non-PIC object. */ +#define PLT_ENTRY_WORD_2 0x98186000 /* "brad r12". */ +#define PLT_ENTRY_WORD_3 0x80000000 /* "nop". */ + +/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up + shortcuts to them in our hash table. */ + +static bfd_boolean +create_got_section (bfd *dynobj, struct bfd_link_info *info) +{ + struct elf32_mb_link_hash_table *htab; + + if (! _bfd_elf_create_got_section (dynobj, info)) + return FALSE; + htab = elf32_mb_hash_table (info); + htab->sgot = bfd_get_section_by_name (dynobj, ".got"); + htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); + if (!htab->sgot || !htab->sgotplt) + return FALSE; + + htab->srelgot = bfd_make_section (dynobj, ".rela.got"); + if (htab->srelgot == NULL + || ! bfd_set_section_flags (dynobj, htab->srelgot, SEC_ALLOC + | SEC_LOAD + | SEC_HAS_CONTENTS + | SEC_IN_MEMORY + | SEC_LINKER_CREATED + | SEC_READONLY) + || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) + return FALSE; + return TRUE; +} + +/* Look through the relocs for a section during the first phase. */ + +static bfd_boolean +microblaze_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; + struct elf32_mb_link_hash_table *htab; + bfd_vma *local_got_offsets; + asection *sreloc = NULL; + + if (info->relocatable) + return TRUE; + + htab = elf32_mb_hash_table (info); + local_got_offsets = elf_local_got_offsets (abfd); + 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++) + { + unsigned int r_type; + struct elf_link_hash_entry * h; + unsigned long r_symndx; + + r_symndx = ELF32_R_SYM (rel->r_info); + r_type = ELF32_R_TYPE (rel->r_info); + + if (r_symndx < symtab_hdr->sh_info) + h = NULL; + else + h = sym_hashes [r_symndx - symtab_hdr->sh_info]; + + switch (r_type) + { + /* This relocation describes the C++ object vtable hierarchy. + Reconstruct it for later use during GC. */ + case R_MICROBLAZE_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_MICROBLAZE_GNU_VTENTRY: + if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + return FALSE; + break; + + /* This relocation requires .plt entry. */ + case R_MICROBLAZE_PLT_64: + if (h != NULL) + { + h->needs_plt = 1; + h->plt.refcount += 1; + } + break; + + /* This relocation requires .got entry. */ + case R_MICROBLAZE_GOT_64: + if (htab->sgot == NULL) + { + if (htab->elf.dynobj == NULL) + htab->elf.dynobj = abfd; + if (!create_got_section (htab->elf.dynobj, info)) + return FALSE; + } + if (h != NULL) + { + h->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; + + size = symtab_hdr->sh_info; + size *= 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; + } + break; + + case R_MICROBLAZE_64: + case R_MICROBLAZE_64_PCREL: + case R_MICROBLAZE_32: + { + if (h != NULL && !info->shared) + { + /* we may need a copy reloc. */ + h->non_got_ref = 1; + + /* we may also need a .plt entry. */ + h->plt.refcount += 1; + if (ELF32_R_TYPE (rel->r_info) != R_MICROBLAZE_64_PCREL) + h->pointer_equality_needed = 1; + } + + + /* If we are creating a shared library, and this is a reloc + against a global symbol, or a non PC relative reloc + against a local symbol, then we need to copy the reloc + into the shared library. However, if we are linking with + -Bsymbolic, we do not need to copy a reloc against a + global symbol which is defined in an object we are + including in the link (i.e., DEF_REGULAR is set). At + this point we have not seen all the input files, so it is + possible that DEF_REGULAR is not set now but will be set + later (it is never cleared). In case of a weak definition, + DEF_REGULAR may be cleared later by a strong definition in + a shared library. We account for that possibility below by + storing information in the relocs_copied field of the hash + table entry. A similar situation occurs when creating + shared libraries and symbol visibility changes render the + symbol local. + + If on the other hand, we are creating an executable, we + may need to keep relocations for symbols satisfied by a + dynamic library if we manage to avoid copy relocs for the + symbol. */ + + if ((info->shared + && (sec->flags & SEC_ALLOC) != 0 + && (r_type != R_MICROBLAZE_64_PCREL + || (h != NULL + && (! info->symbolic + || h->root.type == bfd_link_hash_defweak + || !h->def_regular)))) + || (!info->shared + && (sec->flags & SEC_ALLOC) != 0 + && h != NULL + && (h->root.type == bfd_link_hash_defweak + || !h->def_regular))) + { + struct elf32_mb_dyn_relocs *p; + struct elf32_mb_dyn_relocs **head; + + /* When creating a shared object, we must copy these + relocs into the output file. We create a reloc + section in dynobj and make room for the reloc. */ + + if (sreloc == NULL) + { + const char *name; + bfd *dynobj; + unsigned int strndx = elf_elfheader (abfd)->e_shstrndx; + unsigned int shnam = elf_section_data (sec)->rel_hdr.sh_name; + + name = bfd_elf_string_from_elf_section (abfd, strndx, shnam); + if (name == NULL) + return FALSE; + + if (strncmp (name, ".rela", 5) != 0 + || strcmp (bfd_get_section_name (abfd, sec), + name + 5) != 0) + { + (*_bfd_error_handler) + (_("%B: bad relocation section name `%s\'"), + abfd, name); + } + + if (htab->elf.dynobj == NULL) + htab->elf.dynobj = abfd; + dynobj = htab->elf.dynobj; + + sreloc = bfd_get_section_by_name (dynobj, name); + if (sreloc == NULL) + { + flagword flags; + + sreloc = bfd_make_section (dynobj, name); + flags = (SEC_HAS_CONTENTS | SEC_READONLY + | SEC_IN_MEMORY | SEC_LINKER_CREATED); + if ((sec->flags & SEC_ALLOC) != 0) + flags |= SEC_ALLOC | SEC_LOAD; + if (sreloc == NULL + || ! bfd_set_section_flags (dynobj, sreloc, flags) + || ! bfd_set_section_alignment (dynobj, sreloc, 2)) + return FALSE; + } + elf_section_data (sec)->sreloc = sreloc; + } + + /* If this is a global symbol, we count the number of + relocations we need for this symbol. */ + if (h != NULL) + head = &((struct elf32_mb_link_hash_entry *) h)->dyn_relocs; + else + { + /* Track dynamic relocs needed for local syms too. + We really need local syms available to do this + easily. Oh well. */ + + asection *s; + Elf_Internal_Sym *isym; + void *vpp; + + isym = bfd_sym_from_r_symndx (&htab->sym_sec, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + return FALSE; + + vpp = &elf_section_data (s)->local_dynrel; + head = (struct elf32_mb_dyn_relocs **) vpp; + } + + p = *head; + if (p == NULL || p->sec != sec) + { + bfd_size_type amt = sizeof *p; + p = ((struct elf32_mb_dyn_relocs *) + bfd_alloc (htab->elf.dynobj, amt)); + if (p == NULL) + return FALSE; + p->next = *head; + *head = p; + p->sec = sec; + p->count = 0; + p->pc_count = 0; + } + + p->count += 1; + if (r_type == R_MICROBLAZE_64_PCREL) + p->pc_count += 1; + } + } + break; + } + } + + return TRUE; +} + +static bfd_boolean +microblaze_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) +{ + struct elf32_mb_link_hash_table *htab; + + htab = elf32_mb_hash_table (info); + if (!htab->sgot && !create_got_section (dynobj, info)) + return FALSE; + + 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->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss"); + if (!info->shared) + htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss"); + + if (!htab->splt || !htab->srelplt || !htab->sdynbss + || (!info->shared && !htab->srelbss)) + abort (); + + return TRUE; +} + +/* Copy the extra info we tack onto an elf_link_hash_entry. */ + +static void +microblaze_elf_copy_indirect_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *dir, + struct elf_link_hash_entry *ind) +{ + struct elf32_mb_link_hash_entry *edir, *eind; + + edir = (struct elf32_mb_link_hash_entry *) dir; + eind = (struct elf32_mb_link_hash_entry *) ind; + + if (eind->dyn_relocs != NULL) + { + if (edir->dyn_relocs != NULL) + { + struct elf32_mb_dyn_relocs **pp; + struct elf32_mb_dyn_relocs *p; + + if (ind->root.type == bfd_link_hash_indirect) + abort (); + + /* Add reloc counts against the weak sym to the strong sym + list. Merge any entries against the same section. */ + for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) + { + struct elf32_mb_dyn_relocs *q; + + for (q = edir->dyn_relocs; q != NULL; q = q->next) + if (q->sec == p->sec) + { + q->pc_count += p->pc_count; + q->count += p->count; + *pp = p->next; + break; + } + if (q == NULL) + pp = &p->next; + } + *pp = edir->dyn_relocs; + } + + edir->dyn_relocs = eind->dyn_relocs; + eind->dyn_relocs = NULL; + } + + _bfd_elf_link_hash_copy_indirect (info, dir, ind); +} + +static bfd_boolean +microblaze_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *h) +{ + struct elf32_mb_link_hash_table *htab; + struct elf32_mb_link_hash_entry * eh; + struct elf32_mb_dyn_relocs *p; + asection *sdynbss, *s; + unsigned int power_of_two; + bfd *dynobj; + + htab = elf32_mb_hash_table (info); + + /* If this is a function, put it in the procedure linkage table. We + will fill in the contents of the procedure linkage table later, + when we know the address of the .got section. */ + if (h->type == STT_FUNC + || h->needs_plt) + { + if (h->plt.refcount <= 0 + || SYMBOL_CALLS_LOCAL (info, h) + || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type == bfd_link_hash_undefweak)) + { + /* This case can occur if we saw a PLT reloc in an input + file, but the symbol was never referred to by a dynamic + object, or if all references were garbage collected. In + such a case, we don't actually need to build a procedure + linkage table, and we can just do a PC32 reloc instead. */ + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + + return TRUE; + } + else + /* It's possible that we incorrectly decided a .plt reloc was + needed for an R_MICROBLAZE_64_PCREL reloc to a non-function sym in + check_relocs. We can't decide accurately between function and + non-function syms in check-relocs; Objects loaded later in + the link may change h->type. So fix it now. */ + h->plt.offset = (bfd_vma) -1; + + /* If this is a weak symbol, and there is a real definition, the + processor independent code will have arranged for us to see the + real definition first, and we can just use the same value. */ + if (h->u.weakdef != NULL) + { + BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined + || h->u.weakdef->root.type == bfd_link_hash_defweak); + h->root.u.def.section = h->u.weakdef->root.u.def.section; + h->root.u.def.value = h->u.weakdef->root.u.def.value; + return TRUE; + } + + /* This is a reference to a symbol defined by a dynamic object which + is not a function. */ + + /* If we are creating a shared library, we must presume that the + only references to the symbol are via the global offset table. + For such cases we need not do anything here; the relocations will + be handled correctly by relocate_section. */ + if (info->shared) + return TRUE; + + /* If there are no references to this symbol that do not use the + GOT, we don't need to generate a copy reloc. */ + if (!h->non_got_ref) + return TRUE; + + /* If -z nocopyreloc was given, we won't generate them either. */ + if (info->nocopyreloc) + { + h->non_got_ref = 0; + return TRUE; + } + + eh = (struct elf32_mb_link_hash_entry *) h; + for (p = eh->dyn_relocs; p != NULL; p = p->next) + { + s = p->sec->output_section; + if (s != NULL && (s->flags & SEC_READONLY) != 0) + break; + } + + /* If we didn't find any dynamic relocs in read-only sections, then + we'll be keeping the dynamic relocs and avoiding the copy reloc. */ + if (p == NULL) + { + h->non_got_ref = 0; + return TRUE; + } + + /* We must allocate the symbol in our .dynbss section, which will + become part of the .bss section of the executable. There will be + an entry for this symbol in the .dynsym section. The dynamic + object will contain position independent code, so all references + from the dynamic object to this symbol will go through the global + offset table. The dynamic linker will use the .dynsym entry to + determine the address it must put in the global offset table, so + both the dynamic object and the regular object will refer to the + same memory location for the variable. */ + + /* We must generate a R_MICROBLAZE_COPY reloc to tell the dynamic linker + to copy the initial value out of the dynamic object and into the + runtime process image. */ + dynobj = elf_hash_table (info)->dynobj; + BFD_ASSERT (dynobj != NULL); + if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) + { + htab->srelbss->size += sizeof (Elf32_External_Rela); + 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; + + sdynbss = htab->sdynbss; + /* Apply the required alignment. */ + sdynbss->size = BFD_ALIGN (sdynbss->size, (bfd_size_type) (1 << power_of_two)); + if (power_of_two > bfd_get_section_alignment (dynobj, sdynbss)) + { + if (! bfd_set_section_alignment (dynobj, sdynbss, power_of_two)) + return FALSE; + } + + /* Define the symbol as being at this point in the section. */ + h->root.u.def.section = sdynbss; + h->root.u.def.value = sdynbss->size; + + /* Increment the section size to make room for the symbol. */ + sdynbss->size += h->size; + return TRUE; +} + +/* Allocate space in .plt, .got and associated reloc sections for + dynamic relocs. */ + +static bfd_boolean +allocate_dynrelocs (struct elf_link_hash_entry *h, void * dat) +{ + struct bfd_link_info *info; + struct elf32_mb_link_hash_table *htab; + struct elf32_mb_link_hash_entry *eh; + struct elf32_mb_dyn_relocs *p; + + if (h->root.type == bfd_link_hash_indirect) + return TRUE; + + if (h->root.type == bfd_link_hash_warning) + /* When warning symbols are created, they **replace** the "real" + entry in the hash table, thus we never get to see the real + symbol in a hash traversal. So look at it now. */ + h = (struct elf_link_hash_entry *) h->root.u.i.link; + + info = (struct bfd_link_info *) dat; + htab = elf32_mb_hash_table (info); + + if (htab->elf.dynamic_sections_created + && h->plt.refcount > 0) + { + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + { + asection *s = htab->splt; + + /* The first entry in .plt is reserved. */ + if (s->size == 0) + s->size = PLT_ENTRY_SIZE; + + h->plt.offset = s->size; + + /* If this symbol is not defined in a regular file, and we are + not generating a shared library, then set the symbol to this + location in the .plt. This is required to make function + pointers compare as equal between the normal executable and + the shared library. */ + if (! info->shared + && !h->def_regular) + { + h->root.u.def.section = s; + h->root.u.def.value = h->plt.offset; + } + + /* Make room for this entry. */ + s->size += PLT_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. */ + htab->sgotplt->size += 4; + + /* We also need to make an entry in the .rel.plt section. */ + htab->srelplt->size += sizeof (Elf32_External_Rela); + } + else + { + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + } + else + { + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + + if (h->got.refcount > 0) + { + asection *s; + + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + s = htab->sgot; + h->got.offset = s->size; + s->size += 4; + htab->srelgot->size += sizeof (Elf32_External_Rela); + } + else + h->got.offset = (bfd_vma) -1; + + eh = (struct elf32_mb_link_hash_entry *) h; + if (eh->dyn_relocs == NULL) + return TRUE; + + /* In the shared -Bsymbolic case, discard space allocated for + dynamic pc-relative relocs against symbols which turn out to be + defined in regular objects. For the normal shared case, discard + space for pc-relative relocs that have become local due to symbol + visibility changes. */ + + if (info->shared) + { + if (h->def_regular + && (h->forced_local + || info->symbolic)) + { + struct elf32_mb_dyn_relocs **pp; + + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + { + p->count -= p->pc_count; + p->pc_count = 0; + if (p->count == 0) + *pp = p->next; + else + pp = &p->next; + } + } + } + else + { + /* For the non-shared case, discard space for relocs against + symbols which turn out to need copy relocs or are not + dynamic. */ + + if (!h->non_got_ref + && ((h->def_dynamic + && !h->def_regular) + || (htab->elf.dynamic_sections_created + && (h->root.type == bfd_link_hash_undefweak + || h->root.type == bfd_link_hash_undefined)))) + { + /* Make sure this symbol is output as a dynamic symbol. + Undefined weak syms won't yet be marked as dynamic. */ + if (h->dynindx == -1 + && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + + /* If that succeeded, we know we'll be keeping all the + relocs. */ + if (h->dynindx != -1) + goto keep; + } + + eh->dyn_relocs = NULL; + + keep: ; + } + + /* Finally, allocate space. */ + for (p = eh->dyn_relocs; p != NULL; p = p->next) + { + asection *sreloc = elf_section_data (p->sec)->sreloc; + sreloc->size += p->count * sizeof (Elf32_External_Rela); + } + + return TRUE; +} + +/* Set the sizes of the dynamic sections. */ + +static bfd_boolean +microblaze_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info) +{ + struct elf32_mb_link_hash_table *htab; + bfd *dynobj; + asection *s; + bfd *ibfd; + + htab = elf32_mb_hash_table (info); + dynobj = htab->elf.dynobj; + BFD_ASSERT (dynobj != NULL); + + /* Set up .got offsets for local syms, and space for local dynamic + relocs. */ + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + bfd_signed_vma *local_got; + bfd_signed_vma *end_local_got; + bfd_size_type locsymcount; + Elf_Internal_Shdr *symtab_hdr; + asection *srel; + + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + continue; + + for (s = ibfd->sections; s != NULL; s = s->next) + { + struct elf32_mb_dyn_relocs *p; + + for (p = ((struct elf32_mb_dyn_relocs *) + elf_section_data (s)->local_dynrel); + p != NULL; + p = p->next) + { + if (!bfd_is_abs_section (p->sec) + && bfd_is_abs_section (p->sec->output_section)) + { + /* Input section has been discarded, either because + it is a copy of a linkonce section or due to + linker script /DISCARD/, so we'll be discarding + the relocs too. */ + } + else if (p->count != 0) + { + srel = elf_section_data (p->sec)->sreloc; + srel->size += p->count * sizeof (Elf32_External_Rela); + if ((p->sec->output_section->flags & SEC_READONLY) != 0) + info->flags |= DF_TEXTREL; + } + } + } + + local_got = elf_local_got_refcounts (ibfd); + if (!local_got) + continue; + + symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + locsymcount = symtab_hdr->sh_info; + end_local_got = local_got + locsymcount; + s = htab->sgot; + srel = htab->srelgot; + + for (; local_got < end_local_got; ++local_got) + { + if (*local_got > 0) + { + *local_got = s->size; + s->size += 4; + if (info->shared) + srel->size += sizeof (Elf32_External_Rela); + } + else + *local_got = (bfd_vma) -1; + } + } + + /* Allocate global sym .plt and .got entries, and space for global + sym dynamic relocs. */ + elf_link_hash_traverse (elf_hash_table (info), allocate_dynrelocs, info); + + if (elf_hash_table (info)->dynamic_sections_created) + { + /* Make space for the trailing nop in .plt. */ + if (htab->splt->size > 0) + htab->splt->size += 4; + } + + /* The check_relocs and adjust_dynamic_symbol entry points have + determined the sizes of the various dynamic sections. Allocate + memory for them. */ + for (s = dynobj->sections; s != NULL; s = s->next) + { + const char *name; + bfd_boolean strip = FALSE; + + 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 (strncmp (name, ".rela", 5) == 0) + { + if (s->size == 0) + { + /* If we don't need this section, strip it from the + output file. This is to handle .rela.bss and + .rela.plt. We must create it in + create_dynamic_sections, because it must be created + before the linker maps input sections to output + sections. The linker does that before + adjust_dynamic_symbol is called, and it is that + function which decides whether anything needs to go + into these sections. */ + strip = TRUE; + } + else + { + /* We use the reloc_count field as a counter if we need + to copy relocs into the output file. */ + s->reloc_count = 0; + } + } + else if (s != htab->splt && s != htab->sgot && s != htab->sgotplt) + { + /* It's not one of our sections, so don't allocate space. */ + continue; + } + + if (strip) + { + s->flags |= SEC_EXCLUDE; + continue; + } + + /* Allocate memory for the section contents. */ + /* FIXME: This should be a call to bfd_alloc not bfd_zalloc. + Unused entries should be reclaimed before the section's contents + are written out, but at the moment this does not happen. Thus in + order to prevent writing out garbage, we initialise the section's + contents to zero. */ + s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size); + if (s->contents == NULL && s->size != 0) + return FALSE; + } + + if (elf_hash_table (info)->dynamic_sections_created) + { + /* Add some entries to the .dynamic section. We fill in the + values later, in microblaze_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. */ +#define add_dynamic_entry(TAG, VAL) \ + _bfd_elf_add_dynamic_entry (info, TAG, VAL) + + if (info->executable) + { + if (!add_dynamic_entry (DT_DEBUG, 0)) + return FALSE; + } + + if (!add_dynamic_entry (DT_RELA, 0) + || !add_dynamic_entry (DT_RELASZ, 0) + || !add_dynamic_entry (DT_RELAENT, sizeof (Elf32_External_Rela))) + return FALSE; + + if (htab->splt->size != 0) + { + if (!add_dynamic_entry (DT_PLTGOT, 0) + || !add_dynamic_entry (DT_PLTRELSZ, 0) + || !add_dynamic_entry (DT_PLTREL, DT_RELA) + || !add_dynamic_entry (DT_JMPREL, 0) + || !add_dynamic_entry (DT_BIND_NOW, 1)) + return FALSE; + } + + if (info->flags & DF_TEXTREL) + { + if (!add_dynamic_entry (DT_TEXTREL, 0)) + return FALSE; + } + } +#undef add_dynamic_entry + return TRUE; +} + +/* Finish up dynamic symbol handling. We set the contents of various + dynamic sections here. */ + +static bfd_boolean +microblaze_elf_finish_dynamic_symbol (bfd *output_bfd, + struct bfd_link_info *info, + struct elf_link_hash_entry *h, + Elf_Internal_Sym *sym) +{ + bfd *dynobj; + struct elf32_mb_link_hash_table *htab; + + htab = elf32_mb_hash_table (info); + dynobj = htab->elf.dynobj; + + if (h->plt.offset != (bfd_vma) -1) + { + asection *splt; + asection *srela; + asection *sgotplt; + Elf_Internal_Rela rela; + bfd_byte *loc; + bfd_vma plt_index; + bfd_vma got_offset; + bfd_vma got_addr; + + /* This symbol has an entry in the procedure linkage table. Set + it up. */ + BFD_ASSERT (h->dynindx != -1); + + splt = htab->splt; + srela = htab->srelplt; + sgotplt = htab->sgotplt; + BFD_ASSERT (splt != NULL && srela != NULL && sgotplt != NULL); + + plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; /* first entry reserved. */ + got_offset = (plt_index + 3) * 4; /* 3 reserved ??? */ + got_addr = got_offset; + + /* For non-PIC objects we need absolute address of the GOT entry. */ + if (!info->shared) + got_addr += htab->sgotplt->output_section->vma + sgotplt->output_offset; + + /* Fill in the entry in the procedure linkage table. */ + bfd_put_32 (output_bfd, PLT_ENTRY_WORD_0 + ((got_addr >> 16) & 0xffff), + splt->contents + h->plt.offset); + if (info->shared) + bfd_put_32 (output_bfd, PLT_ENTRY_WORD_1 + (got_addr & 0xffff), + splt->contents + h->plt.offset + 4); + else + bfd_put_32 (output_bfd, PLT_ENTRY_WORD_1_NOPIC + (got_addr & 0xffff), + splt->contents + h->plt.offset + 4); + bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD_2, + splt->contents + h->plt.offset + 8); + bfd_put_32 (output_bfd, (bfd_vma) PLT_ENTRY_WORD_3, + splt->contents + h->plt.offset + 12); + + /* Any additions to the .got section??? */ + /* bfd_put_32 (output_bfd, + splt->output_section->vma + splt->output_offset + h->plt.offset + 4, + sgotplt->contents + got_offset); */ + + /* Fill in the entry in the .rela.plt section. */ + rela.r_offset = (sgotplt->output_section->vma + + sgotplt->output_offset + + got_offset); + rela.r_info = ELF32_R_INFO (h->dynindx, R_MICROBLAZE_JUMP_SLOT); + rela.r_addend = 0; + loc = srela->contents; + loc += plt_index * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + + if (!h->def_regular) + { + /* Mark the symbol as undefined, rather than as defined in + the .plt section. Zero the value. */ + sym->st_shndx = SHN_UNDEF; + sym->st_value = 0; + } + } + + if (h->got.offset != (bfd_vma) -1) + { + asection *sgot; + asection *srela; + Elf_Internal_Rela rela; + bfd_byte *loc; + + /* This symbol has an entry in the global offset table. Set it + up. */ + + sgot = htab->sgot; + srela = htab->srelgot; + BFD_ASSERT (sgot != NULL && srela != NULL); + + rela.r_offset = (sgot->output_section->vma + + sgot->output_offset + + (h->got.offset &~ (bfd_vma) 1)); + + /* If this is a -Bsymbolic link, and the symbol is defined + locally, we just want to emit a RELATIVE reloc. Likewise if + the symbol was forced to be local because of a version file. + The entry in the global offset table will already have been + initialized in the relocate_section function. */ + if (info->shared + && (info->symbolic || h->dynindx == -1) + && h->def_regular) + { + asection *sec = h->root.u.def.section; + rela.r_info = ELF32_R_INFO (0, R_MICROBLAZE_REL); + rela.r_addend = (h->root.u.def.value + + sec->output_section->vma + + sec->output_offset); + } + else + { + rela.r_info = ELF32_R_INFO (h->dynindx, R_MICROBLAZE_GLOB_DAT); + rela.r_addend = 0; + } + + bfd_put_32 (output_bfd, (bfd_vma) 0, + sgot->contents + (h->got.offset &~ (bfd_vma) 1)); + loc = srela->contents; + loc += srela->reloc_count++ * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + } + + if (h->needs_copy) + { + asection *s; + Elf_Internal_Rela rela; + bfd_byte *loc; + + /* This symbols needs a copy reloc. Set it up. */ + + BFD_ASSERT (h->dynindx != -1); + + s = bfd_get_section_by_name (h->root.u.def.section->owner, + ".rela.bss"); + BFD_ASSERT (s != NULL); + + rela.r_offset = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + rela.r_info = ELF32_R_INFO (h->dynindx, R_MICROBLAZE_COPY); + rela.r_addend = 0; + loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + } + + /* Mark some specially defined symbols as absolute. */ + if (strcmp (h->root.root.string, "_DYNAMIC") == 0 + || strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0 + || strcmp (h->root.root.string, "_PROCEDURE_LINKAGE_TABLE_") == 0) + sym->st_shndx = SHN_ABS; + + return TRUE; +} + + +/* Finish up the dynamic sections. */ + +static bfd_boolean +microblaze_elf_finish_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + bfd *dynobj; + asection *sdyn, *sgot; + struct elf32_mb_link_hash_table *htab; + + htab = elf32_mb_hash_table (info); + dynobj = htab->elf.dynobj; + + sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); + + if (htab->elf.dynamic_sections_created) + { + asection *splt; + Elf32_External_Dyn *dyncon, *dynconend; + + splt = bfd_get_section_by_name (dynobj, ".plt"); + BFD_ASSERT (splt != NULL && sdyn != NULL); + + dyncon = (Elf32_External_Dyn *) sdyn->contents; + dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); + for (; dyncon < dynconend; dyncon++) + { + Elf_Internal_Dyn dyn; + const char *name; + bfd_boolean size; + + bfd_elf32_swap_dyn_in (dynobj, dyncon, &dyn); + + switch (dyn.d_tag) + { + case DT_PLTGOT: name = ".got.plt"; size = FALSE; break; + case DT_PLTRELSZ: name = ".rela.plt"; size = TRUE; break; + case DT_JMPREL: name = ".rela.plt"; size = FALSE; break; + case DT_RELA: name = ".rela.dyn"; size = FALSE; break; + case DT_RELASZ: name = ".rela.dyn"; size = TRUE; break; + 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_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); + } + } + + /* Clear the first entry in the procedure linkage table, + and put a nop in the last four bytes. */ + if (splt->size > 0) + { + memset (splt->contents, 0, PLT_ENTRY_SIZE); + bfd_put_32 (output_bfd, (bfd_vma) 0x80000000 /* nop. */, + splt->contents + splt->size - 4); + } + + elf_section_data (splt->output_section)->this_hdr.sh_entsize = 4; + } + + /* Set the first entry in the global offset table to the address of + the dynamic section. */ + sgot = bfd_get_section_by_name (dynobj, ".got.plt"); + if (sgot && sgot->size > 0) + { + if (sdyn == NULL) + bfd_put_32 (output_bfd, (bfd_vma) 0, sgot->contents); + else + bfd_put_32 (output_bfd, + sdyn->output_section->vma + sdyn->output_offset, + sgot->contents); + elf_section_data (sgot->output_section)->this_hdr.sh_entsize = 4; + } + + if (htab->sgot && htab->sgot->size > 0) + elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize = 4; + + return TRUE; +} + +/* Hook called by the linker routine which adds symbols from an object + file. We use it to put .comm items in .sbss, and not .bss. */ + +static bfd_boolean +microblaze_elf_add_symbol_hook (bfd *abfd, + struct bfd_link_info *info, + Elf_Internal_Sym *sym, + const char **namep ATTRIBUTE_UNUSED, + flagword *flagsp ATTRIBUTE_UNUSED, + asection **secp, + bfd_vma *valp) +{ + if (sym->st_shndx == SHN_COMMON + && !info->relocatable + && sym->st_size <= elf_gp_size (abfd)) + { + /* Common symbols less than or equal to -G nn bytes are automatically + put into .sbss. */ + *secp = bfd_make_section_anyway (abfd, ".sbss"); + if (*secp == NULL + || ! bfd_set_section_flags (abfd, *secp, SEC_IS_COMMON)) + return FALSE; + + *valp = sym->st_size; + } + + return TRUE; +} + + +#define TARGET_BIG_SYM bfd_elf32_microblaze_vec +#define TARGET_BIG_NAME "elf32-microblaze" + +#define ELF_ARCH bfd_arch_microblaze +#define ELF_MACHINE_CODE EM_MICROBLAZE +#define ELF_MACHINE_ALT1 EM_MICROBLAZE_OLD +#define ELF_MAXPAGESIZE 0x4 /* 4k, if we ever have 'em. */ +#define elf_info_to_howto microblaze_elf_info_to_howto +#define elf_info_to_howto_rel NULL + +#define bfd_elf32_bfd_reloc_type_lookup microblaze_elf_reloc_type_lookup +#define bfd_elf32_bfd_is_local_label_name microblaze_elf_is_local_label_name +#define elf_backend_relocate_section microblaze_elf_relocate_section +#define bfd_elf32_bfd_relax_section microblaze_elf_relax_section +#define bfd_elf32_bfd_reloc_name_lookup microblaze_elf_reloc_name_lookup + +#define elf_backend_gc_mark_hook microblaze_elf_gc_mark_hook +#define elf_backend_gc_sweep_hook microblaze_elf_gc_sweep_hook +#define elf_backend_check_relocs microblaze_elf_check_relocs +#define elf_backend_copy_indirect_symbol microblaze_elf_copy_indirect_symbol +#define bfd_elf32_bfd_link_hash_table_create microblaze_elf_link_hash_table_create +#define elf_backend_can_gc_sections 1 +#define elf_backend_can_refcount 1 +#define elf_backend_want_got_plt 1 +#define elf_backend_plt_readonly 1 +#define elf_backend_got_header_size 12 +#define elf_backend_rela_normal 1 + +#define elf_backend_adjust_dynamic_symbol microblaze_elf_adjust_dynamic_symbol +#define elf_backend_create_dynamic_sections microblaze_elf_create_dynamic_sections +#define elf_backend_finish_dynamic_sections microblaze_elf_finish_dynamic_sections +#define elf_backend_finish_dynamic_symbol microblaze_elf_finish_dynamic_symbol +#define elf_backend_size_dynamic_sections microblaze_elf_size_dynamic_sections +#define elf_backend_add_symbol_hook microblaze_elf_add_symbol_hook + +#include "elf32-target.h" diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index 81fb8c2..c987ff9 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Most of the information added by Ian Lance Taylor, Cygnus Support, . @@ -771,11 +771,35 @@ static reloc_howto_type elf_mips16_howto_table_rel[] = 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 reference to global offset table. */ - EMPTY_HOWTO (R_MIPS16_GOT16), + /* A MIPS16 reference to the global offset table. */ + HOWTO (R_MIPS16_GOT16, /* 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_mips_elf_got16_reloc, /* special_function */ + "R_MIPS16_GOT16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 16 bit call through global offset table. */ - EMPTY_HOWTO (R_MIPS16_CALL16), + /* A MIPS16 call through the global offset table. */ + HOWTO (R_MIPS16_CALL16, /* 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_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_CALL16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ /* MIPS16 high 16 bits of symbol value. */ HOWTO (R_MIPS16_HI16, /* type */ @@ -875,6 +899,38 @@ static reloc_howto_type elf_mips_gnu_vtentry_howto = 0, /* dst_mask */ FALSE); /* pcrel_offset */ +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_copy_howto = + HOWTO (R_MIPS_COPY, /* type */ + 0, /* rightshift */ + 0, /* this one is variable size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_MIPS_COPY", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_jump_slot_howto = + HOWTO (R_MIPS_JUMP_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, /* special_function */ + "R_MIPS_JUMP_SLOT", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + /* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a dangerous relocation. */ @@ -949,7 +1005,7 @@ mips_elf_final_gp (bfd *output_bfd, asymbol *symbol, bfd_boolean relocatable, if (relocatable) { /* Make up a value. */ - *pgp = symbol->section->output_section->vma + 0x4000; + *pgp = symbol->section->output_section->vma /*+ 0x4000*/; _bfd_set_gp_value (output_bfd, *pgp); } else if (!mips_elf_assign_gp (output_bfd, pgp)) @@ -1205,6 +1261,7 @@ static const struct elf_reloc_map mips_reloc_map[] = { BFD_RELOC_MIPS_GOT_PAGE, R_MIPS_GOT_PAGE }, { BFD_RELOC_MIPS_GOT_OFST, R_MIPS_GOT_OFST }, { BFD_RELOC_MIPS_GOT_DISP, R_MIPS_GOT_DISP }, + { BFD_RELOC_MIPS_JALR, R_MIPS_JALR }, { BFD_RELOC_MIPS_TLS_DTPMOD32, R_MIPS_TLS_DTPMOD32 }, { BFD_RELOC_MIPS_TLS_DTPREL32, R_MIPS_TLS_DTPREL32 }, { BFD_RELOC_MIPS_TLS_DTPMOD64, R_MIPS_TLS_DTPMOD64 }, @@ -1224,6 +1281,8 @@ static const struct elf_reloc_map mips16_reloc_map[] = { { BFD_RELOC_MIPS16_JMP, R_MIPS16_26 - R_MIPS16_min }, { BFD_RELOC_MIPS16_GPREL, R_MIPS16_GPREL - R_MIPS16_min }, + { BFD_RELOC_MIPS16_GOT16, R_MIPS16_GOT16 - R_MIPS16_min }, + { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min }, }; @@ -1273,6 +1332,10 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code) return &elf_mips_gnu_vtentry_howto; case BFD_RELOC_32_PCREL: return &elf_mips_gnu_pcrel32; + case BFD_RELOC_MIPS_COPY: + return &elf_mips_copy_howto; + case BFD_RELOC_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; } } @@ -1306,6 +1369,10 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, 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_copy_howto.name, r_name) == 0) + return &elf_mips_copy_howto; + if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0) + return &elf_mips_jump_slot_howto; return NULL; } @@ -1326,6 +1393,10 @@ mips_elf32_rtype_to_howto (unsigned int r_type, return &elf_mips_gnu_rel16_s2; case R_MIPS_PC32: return &elf_mips_gnu_pcrel32; + case R_MIPS_COPY: + return &elf_mips_copy_howto; + case R_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max) return &elf_mips16_howto_table_rel[r_type - R_MIPS16_min]; @@ -1379,7 +1450,7 @@ mips_elf_sym_is_global (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym) if (SGI_COMPAT (abfd)) return (sym->flags & BSF_SECTION_SYM) == 0; else - return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0 + return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0 || bfd_is_und_section (bfd_get_section (sym)) || bfd_is_com_section (bfd_get_section (sym))); } @@ -1558,6 +1629,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #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_get_target_dtag _bfd_mips_elf_get_target_dtag #define elf_backend_adjust_dynamic_symbol \ _bfd_mips_elf_adjust_dynamic_symbol #define elf_backend_always_size_sections \ @@ -1579,7 +1651,6 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #define elf_backend_gc_sweep_hook _bfd_mips_elf_gc_sweep_hook #define elf_backend_copy_indirect_symbol \ _bfd_mips_elf_copy_indirect_symbol -#define elf_backend_hide_symbol _bfd_mips_elf_hide_symbol #define elf_backend_grok_prstatus elf32_mips_grok_prstatus #define elf_backend_grok_psinfo elf32_mips_grok_psinfo #define elf_backend_ecoff_debug_swap &mips_elf32_ecoff_debug_swap @@ -1589,10 +1660,13 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #define elf_backend_may_use_rela_p 0 #define elf_backend_default_use_rela_p 0 #define elf_backend_sign_extend_vma TRUE +#define elf_backend_plt_readonly 1 +#define elf_backend_plt_sym_val _bfd_mips_elf_plt_sym_val #define elf_backend_discard_info _bfd_mips_elf_discard_info #define elf_backend_ignore_discarded_relocs \ _bfd_mips_elf_ignore_discarded_relocs +#define elf_backend_write_section _bfd_mips_elf_write_section #define elf_backend_mips_irix_compat elf32_mips_irix_compat #define elf_backend_mips_rtype_to_howto mips_elf32_rtype_to_howto #define bfd_elf32_bfd_is_local_label_name \ @@ -1603,6 +1677,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #define bfd_elf32_set_section_contents _bfd_mips_elf_set_section_contents #define bfd_elf32_bfd_get_relocated_section_contents \ _bfd_elf_mips_get_relocated_section_contents +#define bfd_elf32_mkobject _bfd_mips_elf_mkobject #define bfd_elf32_bfd_link_hash_table_create \ _bfd_mips_elf_link_hash_table_create #define bfd_elf32_bfd_final_link _bfd_mips_elf_final_link @@ -1651,82 +1726,6 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { /* Include the target file again for this target. */ #include "elf32-target.h" - -/* Specific to VxWorks. */ -static reloc_howto_type mips_vxworks_copy_howto_rela = - HOWTO (R_MIPS_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, /* special_function */ - "R_MIPS_COPY", /* name */ - FALSE, /* partial_inplace */ - 0x0, /* src_mask */ - 0x0, /* dst_mask */ - FALSE); /* pcrel_offset */ - -/* Specific to VxWorks. */ -static reloc_howto_type mips_vxworks_jump_slot_howto_rela = - HOWTO (R_MIPS_JUMP_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, /* special_function */ - "R_MIPS_JUMP_SLOT", /* name */ - FALSE, /* partial_inplace */ - 0x0, /* src_mask */ - 0x0, /* dst_mask */ - FALSE); /* pcrel_offset */ - -/* Implement elf_backend_bfd_reloc_type_lookup for VxWorks. */ - -static reloc_howto_type * -mips_vxworks_bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code) -{ - switch (code) - { - case BFD_RELOC_MIPS_COPY: - return &mips_vxworks_copy_howto_rela; - case BFD_RELOC_MIPS_JUMP_SLOT: - return &mips_vxworks_jump_slot_howto_rela; - default: - return bfd_elf32_bfd_reloc_type_lookup (abfd, 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 * -mips_vxworks_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p) -{ - switch (r_type) - { - case R_MIPS_COPY: - return &mips_vxworks_copy_howto_rela; - case R_MIPS_JUMP_SLOT: - return &mips_vxworks_jump_slot_howto_rela; - default: - return mips_elf32_rtype_to_howto (r_type, rela_p); - } -} - /* Implement elf_backend_final_write_processing for VxWorks. */ static void @@ -1759,10 +1758,6 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) #define elf_backend_want_got_plt 1 #undef elf_backend_want_plt_sym #define elf_backend_want_plt_sym 1 -#undef elf_backend_got_symbol_offset -#define elf_backend_got_symbol_offset 0 -#undef elf_backend_want_dynbss -#define elf_backend_want_dynbss 1 #undef elf_backend_may_use_rel_p #define elf_backend_may_use_rel_p 0 #undef elf_backend_may_use_rela_p @@ -1771,21 +1766,8 @@ mips_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) #define elf_backend_default_use_rela_p 1 #undef elf_backend_got_header_size #define elf_backend_got_header_size (4 * 3) -#undef elf_backend_plt_readonly -#define elf_backend_plt_readonly 1 - -#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 -#undef elf_backend_adjust_dynamic_symbol -#define elf_backend_adjust_dynamic_symbol \ - _bfd_mips_vxworks_adjust_dynamic_symbol +#undef elf_backend_plt_sym_val + #undef elf_backend_finish_dynamic_symbol #define elf_backend_finish_dynamic_symbol \ _bfd_mips_vxworks_finish_dynamic_symbol diff --git a/bfd/elf32-moxie.c b/bfd/elf32-moxie.c new file mode 100644 index 0000000..23a16ff --- /dev/null +++ b/bfd/elf32-moxie.c @@ -0,0 +1,393 @@ +/* moxie-specific support for 32-bit ELF. + Copyright 2009 Free Software Foundation, Inc. + + Copied from elf32-fr30.c which is.. + 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. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" +#include "elf-bfd.h" +#include "elf/moxie.h" + +/* Forward declarations. */ + +static reloc_howto_type moxie_elf_howto_table [] = +{ + /* This reloc does nothing. */ + HOWTO (R_MOXIE_NONE, /* 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, /* special_function */ + "R_MOXIE_NONE", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 32 bit absolute relocation. */ + HOWTO (R_MOXIE_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, /* special_function */ + "R_MOXIE_32", /* name */ + FALSE, /* partial_inplace */ + 0x00000000, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 10 bit PC-relative relocation. */ + HOWTO (R_MOXIE_PCREL10, /* type. */ + 1, /* rightshift. */ + 1, /* size (0 = byte, 1 = short, 2 = long). */ + 10, /* bitsize. */ + TRUE, /* pc_relative. */ + 0, /* bitpos. */ + complain_overflow_signed, /* complain_on_overflow. */ + bfd_elf_generic_reloc, /* special_function. */ + "R_MOXIE_PCREL10", /* name. */ + FALSE, /* partial_inplace. */ + 0, /* src_mask. */ + 0x000003FF, /* dst_mask. */ + TRUE), /* pcrel_offset. */ +}; + +/* Map BFD reloc types to MOXIE ELF reloc types. */ + +struct moxie_reloc_map +{ + bfd_reloc_code_real_type bfd_reloc_val; + unsigned int moxie_reloc_val; +}; + +static const struct moxie_reloc_map moxie_reloc_map [] = +{ + { BFD_RELOC_NONE, R_MOXIE_NONE }, + { BFD_RELOC_32, R_MOXIE_32 }, + { BFD_RELOC_MOXIE_10_PCREL, R_MOXIE_PCREL10 }, +}; + +static reloc_howto_type * +moxie_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) +{ + unsigned int i; + + for (i = sizeof (moxie_reloc_map) / sizeof (moxie_reloc_map[0]); + --i;) + if (moxie_reloc_map [i].bfd_reloc_val == code) + return & moxie_elf_howto_table [moxie_reloc_map[i].moxie_reloc_val]; + + return NULL; +} + +static reloc_howto_type * +moxie_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name) +{ + unsigned int i; + + for (i = 0; + i < sizeof (moxie_elf_howto_table) / sizeof (moxie_elf_howto_table[0]); + i++) + if (moxie_elf_howto_table[i].name != NULL + && strcasecmp (moxie_elf_howto_table[i].name, r_name) == 0) + return &moxie_elf_howto_table[i]; + + return NULL; +} + +/* Set the howto pointer for an MOXIE ELF reloc. */ + +static void +moxie_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); + BFD_ASSERT (r_type < (unsigned int) R_MOXIE_max); + cache_ptr->howto = & moxie_elf_howto_table [r_type]; +} + +/* 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 +moxie_final_link_relocate (reloc_howto_type *howto, + bfd *input_bfd, + asection *input_section, + bfd_byte *contents, + Elf_Internal_Rela *rel, + bfd_vma relocation) +{ + bfd_reloc_status_type r = bfd_reloc_ok; + + switch (howto->type) + { + default: + r = _bfd_final_link_relocate (howto, input_bfd, input_section, + contents, rel->r_offset, + relocation, rel->r_addend); + } + + return r; +} + +/* Relocate an MOXIE ELF section. + + 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 +moxie_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; + + symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr; + sym_hashes = elf_sym_hashes (input_bfd); + relend = relocs + input_section->reloc_count; + + 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; + int r_type; + + r_type = ELF32_R_TYPE (rel->r_info); + + r_symndx = ELF32_R_SYM (rel->r_info); + + howto = moxie_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; + } + 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); + + 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 = moxie_final_link_relocate (howto, input_bfd, input_section, + contents, rel, relocation); + + if (r != bfd_reloc_ok) + { + const char * msg = 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; + } + } + + return TRUE; +} + +/* Return the section that should be marked against GC for a given + relocation. */ + +static asection * +moxie_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) +{ + return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); +} + +/* 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 +moxie_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; + 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); + + 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]; + 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; + } + } + + return TRUE; +} + +#define ELF_ARCH bfd_arch_moxie +#define ELF_MACHINE_CODE EM_MOXIE +#define ELF_MAXPAGESIZE 0x1 + +#define TARGET_BIG_SYM bfd_elf32_moxie_vec +#define TARGET_BIG_NAME "elf32-moxie" + +#define elf_info_to_howto_rel NULL +#define elf_info_to_howto moxie_info_to_howto_rela +#define elf_backend_relocate_section moxie_elf_relocate_section +#define elf_backend_gc_mark_hook moxie_elf_gc_mark_hook +#define elf_backend_check_relocs moxie_elf_check_relocs + +#define elf_backend_can_gc_sections 1 +#define elf_backend_rela_normal 1 + +#define bfd_elf32_bfd_reloc_type_lookup moxie_reloc_type_lookup +#define bfd_elf32_bfd_reloc_name_lookup moxie_reloc_name_lookup + +#include "elf32-target.h" diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c index 879edf0..7a57024 100644 --- a/bfd/elf32-msp430.c +++ b/bfd/elf32-msp430.c @@ -241,7 +241,7 @@ elf32_msp430_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, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -250,10 +250,6 @@ elf32_msp430_check_relocs (bfd * abfd, struct bfd_link_info * info, 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++) diff --git a/bfd/elf32-mt.c b/bfd/elf32-mt.c index 9896a20..9b2758e 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, 2006, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -436,7 +436,6 @@ mt_elf_check_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; @@ -445,9 +444,6 @@ mt_elf_check_relocs 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++) @@ -584,7 +580,7 @@ mt_elf_print_private_bfd_data (bfd * abfd, void * ptr) _bfd_elf_print_private_bfd_data (abfd, ptr); flags = elf_elfheader (abfd)->e_flags; - fprintf (file, _("private flags = 0x%lx:"), (long)flags); + fprintf (file, _("private flags = 0x%lx:"), (unsigned long) flags); switch (flags & EF_MT_CPU_MASK) { diff --git a/bfd/elf32-openrisc.c b/bfd/elf32-openrisc.c index 874f922..af7bc25 100644 --- a/bfd/elf32-openrisc.c +++ b/bfd/elf32-openrisc.c @@ -468,7 +468,7 @@ openrisc_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -477,10 +477,6 @@ openrisc_elf_check_relocs (bfd *abfd, 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++) @@ -511,7 +507,9 @@ openrisc_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_OPENRISC_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index f876897..95058a2 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -61,6 +61,7 @@ static bfd_reloc_status_type ppc_elf_unhandled_reloc /* For new-style .glink and .plt. */ #define GLINK_PLTRESOLVE 16*4 #define GLINK_ENTRY_SIZE 4*4 +#define TLS_GET_ADDR_GLINK_SIZE 12*4 /* VxWorks uses its own plt layout, filled in by the static linker. */ @@ -135,17 +136,24 @@ static const bfd_vma ppc_elf_vxworks_pic_plt0_entry #define ADDIS_12_12 0x3d8c0000 #define ADDI_11_11 0x396b0000 #define ADD_0_11_11 0x7c0b5a14 +#define ADD_3_12_2 0x7c6c1214 #define ADD_11_0_11 0x7d605a14 #define B 0x48000000 #define BCL_20_31 0x429f0005 #define BCTR 0x4e800420 +#define BEQLR 0x4d820020 +#define CMPWI_11_0 0x2c0b0000 #define LIS_11 0x3d600000 #define LIS_12 0x3d800000 #define LWZU_0_12 0x840c0000 #define LWZ_0_12 0x800c0000 +#define LWZ_11_3 0x81630000 #define LWZ_11_11 0x816b0000 #define LWZ_11_30 0x817e0000 +#define LWZ_12_3 0x81830000 #define LWZ_12_12 0x818c0000 +#define MR_0_3 0x7c601b78 +#define MR_3_0 0x7c030378 #define MFLR_0 0x7c0802a6 #define MFLR_12 0x7d8802a6 #define MTCTR_0 0x7c0903a6 @@ -157,6 +165,12 @@ static const bfd_vma ppc_elf_vxworks_pic_plt0_entry /* Offset of tp and dtp pointers from start of TLS block. */ #define TP_OFFSET 0x7000 #define DTP_OFFSET 0x8000 + +/* The value of a defined global symbol. */ +#define SYM_VAL(SYM) \ + ((SYM)->root.u.def.section->output_section->vma \ + + (SYM)->root.u.def.section->output_offset \ + + (SYM)->root.u.def.value) static reloc_howto_type *ppc_elf_howto_table[R_PPC_max]; @@ -747,7 +761,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Marker reloc for TLS. */ + /* Marker relocs for TLS. */ HOWTO (R_PPC_TLS, 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -762,6 +776,34 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 0, /* dst_mask */ FALSE), /* pcrel_offset */ + HOWTO (R_PPC_TLSGD, + 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_PPC_TLSGD", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_PPC_TLSLD, + 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_PPC_TLSLD", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* Computes the load module index of the load module that contains the definition of its TLS sym. */ HOWTO (R_PPC_DTPMOD32, @@ -1266,7 +1308,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 16, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ + complain_overflow_signed, /* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_PPC_EMB_SDAI16", /* name */ FALSE, /* partial_inplace */ @@ -1283,7 +1325,7 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 16, /* bitsize */ FALSE, /* pc_relative */ 0, /* bitpos */ - complain_overflow_bitfield, /* complain_on_overflow */ + complain_overflow_signed, /* complain_on_overflow */ bfd_elf_generic_reloc, /* special_function */ "R_PPC_EMB_SDA2I16", /* name */ FALSE, /* partial_inplace */ @@ -1348,6 +1390,20 @@ static reloc_howto_type ppc_elf_howto_raw[] = { 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ + HOWTO (R_PPC_IRELATIVE, /* 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, /* special_function */ + "R_PPC_IRELATIVE", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffffffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* A 16 bit relative relocation. */ HOWTO (R_PPC_REL16, /* type */ 0, /* rightshift */ @@ -1525,6 +1581,8 @@ ppc_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, case BFD_RELOC_CTOR: r = R_PPC_ADDR32; break; case BFD_RELOC_PPC_TOC16: r = R_PPC_TOC16; break; case BFD_RELOC_PPC_TLS: r = R_PPC_TLS; break; + case BFD_RELOC_PPC_TLSGD: r = R_PPC_TLSGD; break; + case BFD_RELOC_PPC_TLSLD: r = R_PPC_TLSLD; break; case BFD_RELOC_PPC_DTPMOD: r = R_PPC_DTPMOD32; break; case BFD_RELOC_PPC_TPREL16: r = R_PPC_TPREL16; break; case BFD_RELOC_PPC_TPREL16_LO: r = R_PPC_TPREL16_LO; break; @@ -1736,19 +1794,17 @@ struct ppc_elf_obj_tdata #define elf_local_ptr_offsets(bfd) \ (ppc_elf_tdata (bfd)->linker_section_pointers) +#define is_ppc_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_object_id (bfd) == PPC32_ELF_TDATA) + /* Override the generic function because we store some extras. */ static bfd_boolean ppc_elf_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct ppc_elf_obj_tdata), + PPC32_ELF_TDATA); } /* Fix bad default arch selected for a 32 bit input bfd when the @@ -2293,6 +2349,242 @@ ppc_elf_final_write_processing (bfd *abfd, bfd_boolean linker ATTRIBUTE_UNUSED) apuinfo_list_finish (); } +static bfd_boolean +is_nonpic_glink_stub (bfd *abfd, asection *glink, bfd_vma off) +{ + bfd_byte buf[GLINK_ENTRY_SIZE]; + + if (!bfd_get_section_contents (abfd, glink, buf, off, GLINK_ENTRY_SIZE)) + return FALSE; + + return ((bfd_get_32 (abfd, buf + 0) & 0xffff0000) == LIS_11 + && (bfd_get_32 (abfd, buf + 4) & 0xffff0000) == LWZ_11_11 + && bfd_get_32 (abfd, buf + 8) == MTCTR_11 + && bfd_get_32 (abfd, buf + 12) == BCTR); +} + +static bfd_boolean +section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr) +{ + bfd_vma vma = *(bfd_vma *) ptr; + return ((section->flags & SEC_ALLOC) != 0 + && section->vma <= vma + && vma < section->vma + section->size); +} + +static long +ppc_elf_get_synthetic_symtab (bfd *abfd, long symcount, asymbol **syms, + long dynsymcount, asymbol **dynsyms, + asymbol **ret) +{ + bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); + asection *plt, *relplt, *dynamic, *glink; + bfd_vma glink_vma = 0; + bfd_vma resolv_vma = 0; + bfd_vma stub_vma; + asymbol *s; + arelent *p; + long count, i; + size_t size; + char *names; + bfd_byte buf[4]; + + *ret = NULL; + + if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0) + return 0; + + if (dynsymcount <= 0) + return 0; + + relplt = bfd_get_section_by_name (abfd, ".rela.plt"); + if (relplt == NULL) + return 0; + + plt = bfd_get_section_by_name (abfd, ".plt"); + if (plt == NULL) + return 0; + + /* Call common code to handle old-style executable PLTs. */ + if (elf_section_flags (plt) & SHF_EXECINSTR) + return _bfd_elf_get_synthetic_symtab (abfd, symcount, syms, + dynsymcount, dynsyms, ret); + + /* If this object was prelinked, the prelinker stored the address + of .glink at got[1]. If it wasn't prelinked, got[1] will be zero. */ + dynamic = bfd_get_section_by_name (abfd, ".dynamic"); + if (dynamic != NULL) + { + bfd_byte *dynbuf, *extdyn, *extdynend; + size_t extdynsize; + void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *); + + if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf)) + return -1; + + extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn; + swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in; + + extdyn = dynbuf; + extdynend = extdyn + dynamic->size; + for (; extdyn < extdynend; extdyn += extdynsize) + { + Elf_Internal_Dyn dyn; + (*swap_dyn_in) (abfd, extdyn, &dyn); + + if (dyn.d_tag == DT_NULL) + break; + + if (dyn.d_tag == DT_PPC_GOT) + { + unsigned int g_o_t = dyn.d_un.d_val; + asection *got = bfd_get_section_by_name (abfd, ".got"); + if (got != NULL + && bfd_get_section_contents (abfd, got, buf, + g_o_t - got->vma + 4, 4)) + glink_vma = bfd_get_32 (abfd, buf); + break; + } + } + free (dynbuf); + } + + /* Otherwise we read the first plt entry. */ + if (glink_vma == 0) + { + if (bfd_get_section_contents (abfd, plt, buf, 0, 4)) + glink_vma = bfd_get_32 (abfd, buf); + } + + if (glink_vma == 0) + return 0; + + /* The .glink section usually does not survive the final + link; search for the section (usually .text) where the + glink stubs now reside. */ + glink = bfd_sections_find_if (abfd, section_covers_vma, &glink_vma); + if (glink == NULL) + return 0; + + /* Determine glink PLT resolver by reading the relative branch + from the first glink stub. */ + if (bfd_get_section_contents (abfd, glink, buf, + glink_vma - glink->vma, 4)) + { + unsigned int insn = bfd_get_32 (abfd, buf); + + /* The first glink stub may either branch to the resolver ... */ + insn ^= B; + if ((insn & ~0x3fffffc) == 0) + resolv_vma = glink_vma + (insn ^ 0x2000000) - 0x2000000; + + /* ... or fall through a bunch of NOPs. */ + else if ((insn ^ B ^ NOP) == 0) + for (i = 4; + bfd_get_section_contents (abfd, glink, buf, + glink_vma - glink->vma + i, 4); + i += 4) + if (bfd_get_32 (abfd, buf) != NOP) + { + resolv_vma = glink_vma + i; + break; + } + } + + count = relplt->size / sizeof (Elf32_External_Rela); + stub_vma = glink_vma - (bfd_vma) count * 16; + /* If the stubs are those for -shared/-pie then we might have + multiple stubs for each plt entry. If that is the case then + there is no way to associate stubs with their plt entries short + of figuring out the GOT pointer value used in the stub. */ + if (!is_nonpic_glink_stub (abfd, glink, + glink_vma - GLINK_ENTRY_SIZE - glink->vma)) + return 0; + + slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; + if (! (*slurp_relocs) (abfd, relplt, dynsyms, TRUE)) + return -1; + + size = count * sizeof (asymbol); + p = relplt->relocation; + for (i = 0; i < count; i++, p++) + { + size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt"); + if (p->addend != 0) + size += sizeof ("+0x") - 1 + 8; + } + + size += sizeof (asymbol) + sizeof ("__glink"); + + if (resolv_vma) + size += sizeof (asymbol) + sizeof ("__glink_PLTresolve"); + + s = *ret = bfd_malloc (size); + if (s == NULL) + return -1; + + names = (char *) (s + count + 1 + (resolv_vma != 0)); + p = relplt->relocation; + for (i = 0; i < count; i++, p++) + { + size_t len; + + *s = **p->sym_ptr_ptr; + /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since + we are defining a symbol, ensure one of them is set. */ + if ((s->flags & BSF_LOCAL) == 0) + s->flags |= BSF_GLOBAL; + s->flags |= BSF_SYNTHETIC; + s->section = glink; + s->value = stub_vma - glink->vma; + s->name = names; + s->udata.p = NULL; + len = strlen ((*p->sym_ptr_ptr)->name); + memcpy (names, (*p->sym_ptr_ptr)->name, len); + names += len; + if (p->addend != 0) + { + memcpy (names, "+0x", sizeof ("+0x") - 1); + names += sizeof ("+0x") - 1; + bfd_sprintf_vma (abfd, names, p->addend); + names += strlen (names); + } + memcpy (names, "@plt", sizeof ("@plt")); + names += sizeof ("@plt"); + ++s; + stub_vma += 16; + } + + /* Add a symbol at the start of the glink branch table. */ + memset (s, 0, sizeof *s); + s->the_bfd = abfd; + s->flags = BSF_GLOBAL | BSF_SYNTHETIC; + s->section = glink; + s->value = glink_vma - glink->vma; + s->name = names; + memcpy (names, "__glink", sizeof ("__glink")); + names += sizeof ("__glink"); + s++; + count++; + + if (resolv_vma) + { + /* Add a symbol for the glink PLT resolver. */ + memset (s, 0, sizeof *s); + s->the_bfd = abfd; + s->flags = BSF_GLOBAL | BSF_SYNTHETIC; + s->section = glink; + s->value = resolv_vma - glink->vma; + s->name = names; + memcpy (names, "__glink_PLTresolve", sizeof ("__glink_PLTresolve")); + names += sizeof ("__glink_PLTresolve"); + s++; + count++; + } + + return count; +} + /* The following functions are specific to the ELF linker, while functions above are used generally. They appear in this file more or less in the order in which they are called. eg. @@ -2321,15 +2613,16 @@ struct ppc_elf_dyn_relocs }; /* Track PLT entries needed for a given symbol. We might need more - than one glink entry per symbol. */ + than one glink entry per symbol when generating a pic binary. */ struct plt_entry { struct plt_entry *next; /* -fPIC uses multiple GOT sections, one per file, called ".got2". This field stores the offset into .got2 used to initialise the - GOT pointer reg. It will always be at least 32768 (and for - current gcc this is the only offset used). */ + GOT pointer reg. It will always be at least 32768. (Current + gcc always uses an offset of 32768, but ld -r will pack .got2 + sections together resulting in larger offsets). */ bfd_vma addend; /* The .got2 section. */ @@ -2346,16 +2639,34 @@ struct plt_entry bfd_vma glink_offset; }; -/* Of those relocs that might be copied as dynamic relocs, this macro +/* Of those relocs that might be copied as dynamic relocs, this function selects those that must be copied when linking a shared library, even when the symbol is local. */ -#define MUST_BE_DYN_RELOC(RTYPE) \ - ((RTYPE) != R_PPC_REL24 \ - && (RTYPE) != R_PPC_REL14 \ - && (RTYPE) != R_PPC_REL14_BRTAKEN \ - && (RTYPE) != R_PPC_REL14_BRNTAKEN \ - && (RTYPE) != R_PPC_REL32) +static int +must_be_dyn_reloc (struct bfd_link_info *info, + enum elf_ppc_reloc_type r_type) +{ + switch (r_type) + { + default: + return 1; + + case R_PPC_REL24: + case R_PPC_REL14: + case R_PPC_REL14_BRTAKEN: + case R_PPC_REL14_BRNTAKEN: + case R_PPC_REL32: + return 0; + + case R_PPC_TPREL32: + case R_PPC_TPREL16: + case R_PPC_TPREL16_LO: + case R_PPC_TPREL16_HI: + case R_PPC_TPREL16_HA: + return !info->executable; + } +} /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid copying dynamic variables from a shared lib into an app's dynbss @@ -2388,6 +2699,7 @@ struct ppc_elf_link_hash_entry #define TLS_DTPREL 8 /* DTPREL reloc, => LD. */ #define TLS_TLS 16 /* Any TLS reloc. */ #define TLS_TPRELGD 32 /* TPREL reloc resulting from GD->IE. */ +#define PLT_IFUNC 64 /* STT_GNU_IFUNC. */ char tls_mask; /* Nonzero if we have seen a small data relocation referring to this @@ -2409,6 +2721,8 @@ struct ppc_elf_link_hash_table asection *glink; asection *plt; asection *relplt; + asection *iplt; + asection *reliplt; asection *dynbss; asection *relbss; asection *dynsbss; @@ -2422,7 +2736,7 @@ struct ppc_elf_link_hash_table /* The .got.plt section (VxWorks only)*/ asection *sgotplt; - /* Shortcut to .__tls_get_addr. */ + /* Shortcut to __tls_get_addr. */ struct elf_link_hash_entry *tls_get_addr; /* The bfd that forced an old-style PLT. */ @@ -2434,7 +2748,7 @@ struct ppc_elf_link_hash_table bfd_vma offset; } tlsld_got; - /* Offset of PltResolve function in glink. */ + /* Offset of branch table to PltResolve function in glink. */ bfd_vma glink_pltresolve; /* Size of reserved GOT entries. */ @@ -2448,6 +2762,9 @@ struct ppc_elf_link_hash_table /* Set if we should emit symbols for stubs. */ unsigned int emit_stub_syms:1; + /* Set if __tls_get_addr optimization should not be done. */ + unsigned int no_tls_get_addr_opt:1; + /* True if the target system is VxWorks. */ unsigned int is_vxworks:1; @@ -2458,8 +2775,8 @@ struct ppc_elf_link_hash_table /* 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; + /* Small local sym cache. */ + struct sym_cache sym_cache; }; /* Get the PPC ELF linker hash table from a link_info structure. */ @@ -2568,13 +2885,42 @@ ppc_elf_create_got (bfd *abfd, struct bfd_link_info *info) return FALSE; } - flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY - | SEC_LINKER_CREATED | SEC_READONLY); - htab->relgot = bfd_make_section_with_flags (abfd, ".rela.got", flags); - if (!htab->relgot - || ! bfd_set_section_alignment (abfd, htab->relgot, 2)) + htab->relgot = bfd_get_section_by_name (abfd, ".rela.got"); + if (!htab->relgot) + abort (); + + return TRUE; +} + +static bfd_boolean +ppc_elf_create_glink (bfd *abfd, struct bfd_link_info *info) +{ + struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info); + asection *s; + flagword flags; + + flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY | SEC_HAS_CONTENTS + | SEC_IN_MEMORY | SEC_LINKER_CREATED); + s = bfd_make_section_anyway_with_flags (abfd, ".glink", flags); + htab->glink = s; + if (s == NULL + || !bfd_set_section_alignment (abfd, s, 4)) + return FALSE; + + flags = SEC_ALLOC | SEC_LINKER_CREATED; + s = bfd_make_section_anyway_with_flags (abfd, ".iplt", flags); + htab->iplt = s; + if (s == NULL + || !bfd_set_section_alignment (abfd, s, 4)) return FALSE; + flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS + | SEC_IN_MEMORY | SEC_LINKER_CREATED); + s = bfd_make_section_with_flags (abfd, ".rela.iplt", flags); + htab->reliplt = s; + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, 2)) + return FALSE; return TRUE; } @@ -2598,13 +2944,8 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (!_bfd_elf_create_dynamic_sections (abfd, info)) return FALSE; - flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - - s = bfd_make_section_anyway_with_flags (abfd, ".glink", flags | SEC_CODE); - htab->glink = s; - if (s == NULL - || !bfd_set_section_alignment (abfd, s, 4)) + if (htab->glink == NULL + && !ppc_elf_create_glink (abfd, info)) return FALSE; htab->dynbss = bfd_get_section_by_name (abfd, ".dynbss"); @@ -2617,6 +2958,8 @@ ppc_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (! info->shared) { htab->relbss = bfd_get_section_by_name (abfd, ".rela.bss"); + flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS + | SEC_IN_MEMORY | SEC_LINKER_CREATED); s = bfd_make_section_with_flags (abfd, ".rela.sbss", flags); htab->relsbss = s; if (s == NULL @@ -2698,6 +3041,7 @@ ppc_elf_copy_indirect_symbol (struct bfd_link_info *info, edir->elf.ref_regular |= eind->elf.ref_regular; edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak; edir->elf.needs_plt |= eind->elf.needs_plt; + edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed; /* If we were called to copy over info for a weak sym, that's all. */ if (eind->elf.root.type != bfd_link_hash_indirect) @@ -2749,20 +3093,6 @@ ppc_elf_copy_indirect_symbol (struct bfd_link_info *info, } } -/* Return 1 if target is one of ours. */ - -static bfd_boolean -is_ppc_elf_target (const struct bfd_target *targ) -{ - extern const bfd_target bfd_elf32_powerpc_vec; - extern const bfd_target bfd_elf32_powerpc_vxworks_vec; - extern const bfd_target bfd_elf32_powerpcle_vec; - - return (targ == &bfd_elf32_powerpc_vec - || targ == &bfd_elf32_powerpc_vxworks_vec - || targ == &bfd_elf32_powerpcle_vec); -} - /* Hook called by the linker routine which adds symbols from an object file. We use it to put .comm items in .sbss, and not .bss. */ @@ -2777,8 +3107,8 @@ ppc_elf_add_symbol_hook (bfd *abfd, { if (sym->st_shndx == SHN_COMMON && !info->relocatable - && sym->st_size <= elf_gp_size (abfd) - && is_ppc_elf_target (info->hash->creator)) + && is_ppc_elf (info->output_bfd) + && sym->st_size <= elf_gp_size (abfd)) { /* Common symbols less than or equal to -G nn bytes are automatically put into .sbss. */ @@ -2803,13 +3133,17 @@ ppc_elf_add_symbol_hook (bfd *abfd, *valp = sym->st_size; } + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + elf_tdata (info->output_bfd)->has_ifunc_symbols = TRUE; + return TRUE; } static bfd_boolean -create_sdata_sym (struct ppc_elf_link_hash_table *htab, - elf_linker_section_t *lsect) +create_sdata_sym (struct bfd_link_info *info, elf_linker_section_t *lsect) { + struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info); + lsect->sym = elf_link_hash_lookup (&htab->elf, lsect->sym_name, TRUE, FALSE, TRUE); if (lsect->sym == NULL) @@ -2817,6 +3151,7 @@ create_sdata_sym (struct ppc_elf_link_hash_table *htab, if (lsect->sym->root.type == bfd_link_hash_new) lsect->sym->non_elf = 0; lsect->sym->ref_regular = 1; + _bfd_elf_link_hash_hide_symbol (info, lsect->sym, TRUE); return TRUE; } @@ -2846,7 +3181,7 @@ ppc_elf_create_linker_section (bfd *abfd, return FALSE; lsect->section = s; - return create_sdata_sym (htab, lsect); + return create_sdata_sym (info, lsect); } /* Find a linker generated pointer with a given addend and type. */ @@ -2895,13 +3230,15 @@ elf_create_pointer_linker_section (bfd *abfd, } else { + BFD_ASSERT (is_ppc_elf (abfd)); + /* Allocation of a pointer to a local symbol. */ elf_linker_section_pointers_t **ptr = elf_local_ptr_offsets (abfd); /* Allocate a table to hold the local symbols if first time. */ if (!ptr) { - unsigned int num_symbols = elf_tdata (abfd)->symtab_hdr.sh_info; + unsigned int num_symbols = elf_symtab_hdr (abfd).sh_info; amt = num_symbols; amt *= sizeof (elf_linker_section_pointers_t *); @@ -2949,41 +3286,44 @@ elf_create_pointer_linker_section (bfd *abfd, return TRUE; } -static bfd_boolean +static struct plt_entry ** update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr, unsigned long r_symndx, int tls_type) { bfd_signed_vma *local_got_refcounts = elf_local_got_refcounts (abfd); + struct plt_entry **local_plt; char *local_got_tls_masks; if (local_got_refcounts == NULL) { bfd_size_type size = symtab_hdr->sh_info; - size *= sizeof (*local_got_refcounts) + sizeof (*local_got_tls_masks); + size *= (sizeof (*local_got_refcounts) + + sizeof (*local_plt) + + sizeof (*local_got_tls_masks)); local_got_refcounts = bfd_zalloc (abfd, size); if (local_got_refcounts == NULL) - return FALSE; + return NULL; elf_local_got_refcounts (abfd) = local_got_refcounts; } - local_got_refcounts[r_symndx] += 1; - local_got_tls_masks = (char *) (local_got_refcounts + symtab_hdr->sh_info); + local_plt = (struct plt_entry **) (local_got_refcounts + symtab_hdr->sh_info); + local_got_tls_masks = (char *) (local_plt + symtab_hdr->sh_info); local_got_tls_masks[r_symndx] |= tls_type; - return TRUE; + if (tls_type != PLT_IFUNC) + local_got_refcounts[r_symndx] += 1; + return local_plt + r_symndx; } static bfd_boolean -update_plt_info (bfd *abfd, struct elf_link_hash_entry *h, +update_plt_info (bfd *abfd, struct plt_entry **plist, asection *sec, bfd_vma addend) { struct plt_entry *ent; - if (addend < 32768) - sec = NULL; - for (ent = h->plt.plist; ent != NULL; ent = ent->next) + for (ent = *plist; ent != NULL; ent = ent->next) if (ent->sec == sec && ent->addend == addend) break; if (ent == NULL) @@ -2992,29 +3332,44 @@ update_plt_info (bfd *abfd, struct elf_link_hash_entry *h, ent = bfd_alloc (abfd, amt); if (ent == NULL) return FALSE; - ent->next = h->plt.plist; + ent->next = *plist; ent->sec = sec; ent->addend = addend; ent->plt.refcount = 0; - h->plt.plist = ent; + *plist = ent; } ent->plt.refcount += 1; return TRUE; } static struct plt_entry * -find_plt_ent (struct elf_link_hash_entry *h, asection *sec, bfd_vma addend) +find_plt_ent (struct plt_entry **plist, asection *sec, bfd_vma addend) { struct plt_entry *ent; if (addend < 32768) sec = NULL; - for (ent = h->plt.plist; ent != NULL; ent = ent->next) + for (ent = *plist; ent != NULL; ent = ent->next) if (ent->sec == sec && ent->addend == addend) break; return ent; } +static bfd_boolean +is_branch_reloc (enum elf_ppc_reloc_type r_type) +{ + return (r_type == R_PPC_PLTREL24 + || r_type == R_PPC_LOCAL24PC + || r_type == R_PPC_REL24 + || r_type == R_PPC_REL14 + || r_type == R_PPC_REL14_BRTAKEN + || r_type == R_PPC_REL14_BRNTAKEN + || r_type == R_PPC_ADDR24 + || r_type == R_PPC_ADDR14 + || r_type == R_PPC_ADDR14_BRTAKEN + || r_type == R_PPC_ADDR14_BRNTAKEN); +} + static void bad_shared_reloc (bfd *abfd, enum elf_ppc_reloc_type r_type) { @@ -3041,6 +3396,7 @@ ppc_elf_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; asection *got2, *sreloc; + struct elf_link_hash_entry *tga; if (info->relocatable) return TRUE; @@ -3059,12 +3415,23 @@ ppc_elf_check_relocs (bfd *abfd, sec, abfd); #endif + BFD_ASSERT (is_ppc_elf (abfd)); + /* Initialize howto table if not already done. */ if (!ppc_elf_howto_table[R_PPC_ADDR32]) ppc_elf_howto_init (); htab = ppc_elf_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + if (htab->glink == NULL) + { + if (htab->elf.dynobj == NULL) + htab->elf.dynobj = abfd; + if (!ppc_elf_create_glink (htab->elf.dynobj, info)) + return FALSE; + } + tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr", + FALSE, FALSE, TRUE); + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); got2 = bfd_get_section_by_name (abfd, ".got2"); sreloc = NULL; @@ -3075,7 +3442,8 @@ ppc_elf_check_relocs (bfd *abfd, unsigned long r_symndx; enum elf_ppc_reloc_type r_type; struct elf_link_hash_entry *h; - int tls_type = 0; + int tls_type; + struct plt_entry **ifunc; r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) @@ -3102,14 +3470,79 @@ ppc_elf_check_relocs (bfd *abfd, BFD_ASSERT (h == htab->elf.hgot); } + tls_type = 0; + ifunc = NULL; r_type = ELF32_R_TYPE (rel->r_info); + if (!htab->is_vxworks) + { + if (h != NULL) + { + if (h->type == STT_GNU_IFUNC) + ifunc = &h->plt.plist; + } + else + { + Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC + && (!info->shared + || is_branch_reloc (r_type))) + { + bfd_vma addend; + + ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx, + PLT_IFUNC); + if (ifunc == NULL) + return FALSE; + + /* STT_GNU_IFUNC symbols must have a PLT entry; + In a non-pie executable even when there are + no plt calls. */ + addend = 0; + if (r_type == R_PPC_PLTREL24) + { + ppc_elf_tdata (abfd)->makes_plt_call = 1; + if (info->shared) + addend = rel->r_addend; + } + if (!update_plt_info (abfd, ifunc, + addend < 32768 ? NULL : got2, addend)) + return FALSE; + } + } + } + + if (!htab->is_vxworks + && is_branch_reloc (r_type) + && h != NULL + && h == tga) + { + if (rel != relocs + && (ELF32_R_TYPE (rel[-1].r_info) == R_PPC_TLSGD + || ELF32_R_TYPE (rel[-1].r_info) == R_PPC_TLSLD)) + /* We have a new-style __tls_get_addr call with a marker + reloc. */ + ; + else + /* Mark this section as having an old-style call. */ + sec->has_tls_get_addr_call = 1; + } + switch (r_type) { + case R_PPC_TLSGD: + case R_PPC_TLSLD: + /* These special tls relocs tie a call to __tls_get_addr with + its parameter symbol. */ + break; + case R_PPC_GOT_TLSLD16: case R_PPC_GOT_TLSLD16_LO: case R_PPC_GOT_TLSLD16_HI: case R_PPC_GOT_TLSLD16_HA: - htab->tlsld_got.refcount += 1; tls_type = TLS_TLS | TLS_LD; goto dogottls; @@ -3124,7 +3557,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_GOT_TPREL16_LO: case R_PPC_GOT_TPREL16_HI: case R_PPC_GOT_TPREL16_HA: - if (info->shared) + if (!info->executable) info->flags |= DF_STATIC_TLS; tls_type = TLS_TLS | TLS_TPREL; goto dogottls; @@ -3160,6 +3593,14 @@ ppc_elf_check_relocs (bfd *abfd, /* This is a global offset table entry for a local symbol. */ if (!update_local_sym_info (abfd, symtab_hdr, r_symndx, tls_type)) return FALSE; + + /* We may also need a plt entry if the symbol turns out to be + an ifunc. */ + if (h != NULL && !info->shared) + { + if (!update_plt_info (abfd, &h->plt.plist, NULL, 0)) + return FALSE; + } break; /* Indirect .sdata relocation. */ @@ -3205,13 +3646,8 @@ ppc_elf_check_relocs (bfd *abfd, break; case R_PPC_SDAREL16: - if (info->shared) - { - bad_shared_reloc (abfd, r_type); - return FALSE; - } if (htab->sdata[0].sym == NULL - && !create_sdata_sym (htab, &htab->sdata[0])) + && !create_sdata_sym (info, &htab->sdata[0])) return FALSE; if (h != NULL) { @@ -3227,7 +3663,7 @@ ppc_elf_check_relocs (bfd *abfd, return FALSE; } if (htab->sdata[1].sym == NULL - && !create_sdata_sym (htab, &htab->sdata[1])) + && !create_sdata_sym (info, &htab->sdata[1])) return FALSE; if (h != NULL) { @@ -3244,10 +3680,10 @@ ppc_elf_check_relocs (bfd *abfd, return FALSE; } if (htab->sdata[0].sym == NULL - && !create_sdata_sym (htab, &htab->sdata[0])) + && !create_sdata_sym (info, &htab->sdata[0])) return FALSE; if (htab->sdata[1].sym == NULL - && !create_sdata_sym (htab, &htab->sdata[1])) + && !create_sdata_sym (info, &htab->sdata[1])) return FALSE; if (h != NULL) { @@ -3270,8 +3706,11 @@ ppc_elf_check_relocs (bfd *abfd, h->non_got_ref = TRUE; break; - case R_PPC_PLT32: case R_PPC_PLTREL24: + if (h == NULL) + break; + /* Fall through */ + case R_PPC_PLT32: case R_PPC_PLTREL32: case R_PPC_PLT16_LO: case R_PPC_PLT16_HI: @@ -3305,10 +3744,12 @@ ppc_elf_check_relocs (bfd *abfd, if (r_type == R_PPC_PLTREL24) { ppc_elf_tdata (abfd)->makes_plt_call = 1; - addend = rel->r_addend; + if (info->shared) + addend = rel->r_addend; } h->needs_plt = 1; - if (!update_plt_info (abfd, h, got2, addend)) + if (!update_plt_info (abfd, &h->plt.plist, + addend < 32768 ? NULL : got2, addend)) return FALSE; } break; @@ -3339,6 +3780,10 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_EMB_MRKREF: case R_PPC_NONE: case R_PPC_max: + case R_PPC_RELAX32: + case R_PPC_RELAX32PC: + case R_PPC_RELAX32_PLT: + case R_PPC_RELAX32PC_PLT: break; /* These should only appear in dynamic objects. */ @@ -3346,6 +3791,7 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_GLOB_DAT: case R_PPC_JMP_SLOT: case R_PPC_RELATIVE: + case R_PPC_IRELATIVE: break; /* These aren't handled yet. We'll report an error later. */ @@ -3359,7 +3805,7 @@ 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) + if (h != NULL && h == htab->elf.hgot && htab->plt_type == PLT_UNSET) { htab->plt_type = PLT_OLD; htab->old_bfd = abfd; @@ -3376,13 +3822,19 @@ ppc_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_PPC_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; /* We shouldn't really be seeing these. */ case R_PPC_TPREL32: - if (info->shared) + case R_PPC_TPREL16: + case R_PPC_TPREL16_LO: + case R_PPC_TPREL16_HI: + case R_PPC_TPREL16_HA: + if (!info->executable) info->flags |= DF_STATIC_TLS; goto dodyn; @@ -3391,19 +3843,11 @@ ppc_elf_check_relocs (bfd *abfd, case R_PPC_DTPREL32: goto dodyn; - case R_PPC_TPREL16: - case R_PPC_TPREL16_LO: - case R_PPC_TPREL16_HI: - case R_PPC_TPREL16_HA: - if (info->shared) - info->flags |= DF_STATIC_TLS; - goto dodyn; - case R_PPC_REL32: if (h == NULL && got2 != NULL && (sec->flags & SEC_CODE) != 0 - && (info->shared || info->pie) + && info->shared && htab->plt_type == PLT_UNSET) { /* Old -fPIC gcc code has .long LCTOC1-LCFx just before @@ -3413,9 +3857,14 @@ ppc_elf_check_relocs (bfd *abfd, reliably deduce the GOT pointer value needed for PLT call stubs. */ asection *s; + Elf_Internal_Sym *isym; + + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, sec, - r_symndx); + s = bfd_section_from_elf_index (abfd, isym->st_shndx); if (s == got2) { htab->plt_type = PLT_OLD; @@ -3424,46 +3873,57 @@ ppc_elf_check_relocs (bfd *abfd, } if (h == NULL || h == htab->elf.hgot) break; - goto dodyn1; - - case R_PPC_REL24: - case R_PPC_REL14: - case R_PPC_REL14_BRTAKEN: - case R_PPC_REL14_BRNTAKEN: - if (h == NULL) - break; - if (h == htab->elf.hgot) - { - if (htab->plt_type == PLT_UNSET) - { - htab->plt_type = PLT_OLD; - htab->old_bfd = abfd; - } - break; - } - /* fall through */ + /* fall through */ case R_PPC_ADDR32: - case R_PPC_ADDR24: case R_PPC_ADDR16: case R_PPC_ADDR16_LO: case R_PPC_ADDR16_HI: case R_PPC_ADDR16_HA: - case R_PPC_ADDR14: - case R_PPC_ADDR14_BRTAKEN: - case R_PPC_ADDR14_BRNTAKEN: case R_PPC_UADDR32: case R_PPC_UADDR16: - dodyn1: if (h != NULL && !info->shared) { /* We may need a plt entry if the symbol turns out to be a function defined in a dynamic object. */ - if (!update_plt_info (abfd, h, NULL, 0)) + if (!update_plt_info (abfd, &h->plt.plist, NULL, 0)) return FALSE; /* We may need a copy reloc too. */ h->non_got_ref = 1; + h->pointer_equality_needed = 1; + } + goto dodyn; + + case R_PPC_REL24: + case R_PPC_REL14: + case R_PPC_REL14_BRTAKEN: + case R_PPC_REL14_BRNTAKEN: + if (h == NULL) + break; + if (h == htab->elf.hgot) + { + if (htab->plt_type == PLT_UNSET) + { + htab->plt_type = PLT_OLD; + htab->old_bfd = abfd; + } + break; + } + /* fall through */ + + case R_PPC_ADDR24: + case R_PPC_ADDR14: + case R_PPC_ADDR14_BRTAKEN: + case R_PPC_ADDR14_BRNTAKEN: + if (h != NULL && !info->shared) + { + /* We may need a plt entry if the symbol turns out to be + a function defined in a dynamic object. */ + h->needs_plt = 1; + if (!update_plt_info (abfd, &h->plt.plist, NULL, 0)) + return FALSE; + break; } dodyn: @@ -3489,7 +3949,7 @@ ppc_elf_check_relocs (bfd *abfd, dynamic library if we manage to avoid copy relocs for the symbol. */ if ((info->shared - && (MUST_BE_DYN_RELOC (r_type) + && (must_be_dyn_reloc (info, r_type) || (h != NULL && (! info->symbolic || h->root.type == bfd_link_hash_defweak @@ -3512,38 +3972,14 @@ ppc_elf_check_relocs (bfd *abfd, #endif if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); - if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - sreloc = bfd_get_section_by_name (htab->elf.dynobj, name); + + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE); + if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED - | SEC_ALLOC | SEC_LOAD); - sreloc = bfd_make_section_with_flags (htab->elf.dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (htab->elf.dynobj, - sreloc, 2)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -3557,15 +3993,19 @@ ppc_elf_check_relocs (bfd *abfd, /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct ppc_elf_dyn_relocs **) vpp; } @@ -3584,7 +4024,7 @@ ppc_elf_check_relocs (bfd *abfd, } p->count += 1; - if (!MUST_BE_DYN_RELOC (r_type)) + if (!must_be_dyn_reloc (info, r_type)) p->pc_count += 1; } @@ -3601,8 +4041,8 @@ ppc_elf_check_relocs (bfd *abfd, static bfd_boolean ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) { - obj_attribute *in_attr; - obj_attribute *out_attr; + obj_attribute *in_attr, *in_attrs; + obj_attribute *out_attr, *out_attrs; if (!elf_known_obj_attributes_proc (obfd)[0].i) { @@ -3616,33 +4056,123 @@ ppc_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) return TRUE; } + in_attrs = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU]; + out_attrs = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU]; + /* 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) + in_attr = &in_attrs[Tag_GNU_Power_ABI_FP]; + out_attr = &out_attrs[Tag_GNU_Power_ABI_FP]; + if (in_attr->i != out_attr->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) + out_attr->type = 1; + if (out_attr->i == 0) + out_attr->i = in_attr->i; + else if (in_attr->i == 0) ; - else if (out_attr[Tag_GNU_Power_ABI_FP].i == 1 - && in_attr[Tag_GNU_Power_ABI_FP].i == 2) + else if (out_attr->i == 1 && in_attr->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) + else if (out_attr->i == 1 && in_attr->i == 3) + _bfd_error_handler + (_("Warning: %B uses double-precision hard float, %B uses single-precision hard float"), + obfd, ibfd); + else if (out_attr->i == 3 && in_attr->i == 1) + _bfd_error_handler + (_("Warning: %B uses double-precision hard float, %B uses single-precision hard float"), + ibfd, obfd); + else if (out_attr->i == 3 && in_attr->i == 2) + _bfd_error_handler + (_("Warning: %B uses soft float, %B uses single-precision hard float"), + ibfd, obfd); + else if (out_attr->i == 2 && (in_attr->i == 1 || in_attr->i == 3)) _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) + else if (in_attr->i > 3) _bfd_error_handler (_("Warning: %B uses unknown floating point ABI %d"), ibfd, - in_attr[Tag_GNU_Power_ABI_FP].i); + in_attr->i); else _bfd_error_handler (_("Warning: %B uses unknown floating point ABI %d"), obfd, - out_attr[Tag_GNU_Power_ABI_FP].i); + out_attr->i); + } + + /* Check for conflicting Tag_GNU_Power_ABI_Vector attributes and + merge non-conflicting ones. */ + in_attr = &in_attrs[Tag_GNU_Power_ABI_Vector]; + out_attr = &out_attrs[Tag_GNU_Power_ABI_Vector]; + if (in_attr->i != out_attr->i) + { + const char *in_abi = NULL, *out_abi = NULL; + + switch (in_attr->i) + { + case 1: in_abi = "generic"; break; + case 2: in_abi = "AltiVec"; break; + case 3: in_abi = "SPE"; break; + } + + switch (out_attr->i) + { + case 1: out_abi = "generic"; break; + case 2: out_abi = "AltiVec"; break; + case 3: out_abi = "SPE"; break; + } + + out_attr->type = 1; + if (out_attr->i == 0) + out_attr->i = in_attr->i; + else if (in_attr->i == 0) + ; + /* For now, allow generic to transition to AltiVec or SPE + without a warning. If GCC marked files with their stack + alignment and used don't-care markings for files which are + not affected by the vector ABI, we could warn about this + case too. */ + else if (out_attr->i == 1) + out_attr->i = in_attr->i; + else if (in_attr->i == 1) + ; + else if (in_abi == NULL) + _bfd_error_handler + (_("Warning: %B uses unknown vector ABI %d"), ibfd, + in_attr->i); + else if (out_abi == NULL) + _bfd_error_handler + (_("Warning: %B uses unknown vector ABI %d"), obfd, + in_attr->i); + else + _bfd_error_handler + (_("Warning: %B uses vector ABI \"%s\", %B uses \"%s\""), + ibfd, obfd, in_abi, out_abi); + } + + /* Check for conflicting Tag_GNU_Power_ABI_Struct_Return attributes + and merge non-conflicting ones. */ + in_attr = &in_attrs[Tag_GNU_Power_ABI_Struct_Return]; + out_attr = &out_attrs[Tag_GNU_Power_ABI_Struct_Return]; + if (in_attr->i != out_attr->i) + { + out_attr->type = 1; + if (out_attr->i == 0) + out_attr->i = in_attr->i; + else if (in_attr->i == 0) + ; + else if (out_attr->i == 1 && in_attr->i == 2) + _bfd_error_handler + (_("Warning: %B uses r3/r4 for small structure returns, %B uses memory"), obfd, ibfd); + else if (out_attr->i == 2 && in_attr->i == 1) + _bfd_error_handler + (_("Warning: %B uses r3/r4 for small structure returns, %B uses memory"), ibfd, obfd); + else if (in_attr->i > 2) + _bfd_error_handler + (_("Warning: %B uses unknown small structure return convention %d"), ibfd, + in_attr->i); + else + _bfd_error_handler + (_("Warning: %B uses unknown small structure return convention %d"), obfd, + out_attr->i); } /* Merge Tag_compatibility attributes and any common GNU ones. */ @@ -3661,8 +4191,7 @@ ppc_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) flagword new_flags; bfd_boolean error; - if (!is_ppc_elf_target (ibfd->xvec) - || !is_ppc_elf_target (obfd->xvec)) + if (!is_ppc_elf (ibfd) || !is_ppc_elf (obfd)) return TRUE; /* Check if we have the same endianess. */ @@ -3759,6 +4288,8 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED, htab = ppc_elf_hash_table (info); + htab->emit_stub_syms = emit_stub_syms; + if (htab->plt_type == PLT_UNSET) { if (plt_style == PLT_OLD) @@ -3775,7 +4306,7 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED, 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 (is_ppc_elf (ibfd)) { if (ppc_elf_tdata (ibfd)->has_rel16) plt_type = PLT_NEW; @@ -3792,8 +4323,6 @@ ppc_elf_select_plt_layout (bfd *output_bfd ATTRIBUTE_UNUSED, 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; - BFD_ASSERT (htab->plt_type != PLT_VXWORKS); if (htab->plt_type == PLT_NEW) @@ -3858,13 +4387,16 @@ ppc_elf_gc_sweep_hook (bfd *abfd, const Elf_Internal_Rela *rel, *relend; asection *got2; + if (info->relocatable) + return TRUE; + if ((sec->flags & SEC_ALLOC) == 0) return TRUE; elf_section_data (sec)->local_dynrel = NULL; htab = ppc_elf_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); got2 = bfd_get_section_by_name (abfd, ".got2"); @@ -3898,15 +4430,37 @@ ppc_elf_gc_sweep_hook (bfd *abfd, } r_type = ELF32_R_TYPE (rel->r_info); + if (!htab->is_vxworks + && h == NULL + && local_got_refcounts != NULL + && (!info->shared + || is_branch_reloc (r_type))) + { + struct plt_entry **local_plt = (struct plt_entry **) + (local_got_refcounts + symtab_hdr->sh_info); + char *local_got_tls_masks = (char *) + (local_plt + symtab_hdr->sh_info); + if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0) + { + struct plt_entry **ifunc = local_plt + r_symndx; + bfd_vma addend = 0; + struct plt_entry *ent; + + if (r_type == R_PPC_PLTREL24 && info->shared) + addend = rel->r_addend; + ent = find_plt_ent (ifunc, got2, addend); + if (ent->plt.refcount > 0) + ent->plt.refcount -= 1; + continue; + } + } + switch (r_type) { case R_PPC_GOT_TLSLD16: case R_PPC_GOT_TLSLD16_LO: case R_PPC_GOT_TLSLD16_HI: case R_PPC_GOT_TLSLD16_HA: - htab->tlsld_got.refcount -= 1; - /* Fall thru */ - case R_PPC_GOT_TLSGD16: case R_PPC_GOT_TLSGD16_LO: case R_PPC_GOT_TLSGD16_HI: @@ -3927,6 +4481,14 @@ ppc_elf_gc_sweep_hook (bfd *abfd, { if (h->got.refcount > 0) h->got.refcount--; + if (!info->shared) + { + struct plt_entry *ent; + + ent = find_plt_ent (&h->plt.plist, NULL, 0); + if (ent->plt.refcount > 0) + ent->plt.refcount -= 1; + } } else if (local_got_refcounts != NULL) { @@ -3966,8 +4528,12 @@ ppc_elf_gc_sweep_hook (bfd *abfd, case R_PPC_PLT16_HA: if (h != NULL) { - bfd_vma addend = r_type == R_PPC_PLTREL24 ? rel->r_addend : 0; - struct plt_entry *ent = find_plt_ent (h, got2, addend); + bfd_vma addend = 0; + struct plt_entry *ent; + + if (r_type == R_PPC_PLTREL24 && info->shared) + addend = rel->r_addend; + ent = find_plt_ent (&h->plt.plist, got2, addend); if (ent->plt.refcount > 0) ent->plt.refcount -= 1; } @@ -3980,14 +4546,66 @@ ppc_elf_gc_sweep_hook (bfd *abfd, return TRUE; } -/* Set htab->tls_get_addr and call the generic ELF tls_setup function. */ +/* Set plt output section type, htab->tls_get_addr, and call the + generic ELF tls_setup function. */ asection * -ppc_elf_tls_setup (bfd *obfd, struct bfd_link_info *info) +ppc_elf_tls_setup (bfd *obfd, + struct bfd_link_info *info, + int no_tls_get_addr_opt) { struct ppc_elf_link_hash_table *htab; htab = ppc_elf_hash_table (info); + htab->tls_get_addr = elf_link_hash_lookup (&htab->elf, "__tls_get_addr", + FALSE, FALSE, TRUE); + if (!no_tls_get_addr_opt) + { + struct elf_link_hash_entry *opt, *tga; + opt = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt", + FALSE, FALSE, TRUE); + if (opt != NULL + && (opt->root.type == bfd_link_hash_defined + || opt->root.type == bfd_link_hash_defweak)) + { + /* If glibc supports an optimized __tls_get_addr call stub, + signalled by the presence of __tls_get_addr_opt, and we'll + be calling __tls_get_addr via a plt call stub, then + make __tls_get_addr point to __tls_get_addr_opt. */ + tga = htab->tls_get_addr; + if (htab->elf.dynamic_sections_created + && tga != NULL + && (tga->type == STT_FUNC + || tga->needs_plt) + && !(SYMBOL_CALLS_LOCAL (info, tga) + || (ELF_ST_VISIBILITY (tga->other) != STV_DEFAULT + && tga->root.type == bfd_link_hash_undefweak))) + { + struct plt_entry *ent; + ent = find_plt_ent (&tga->plt.plist, NULL, 0); + if (ent != NULL + && ent->plt.refcount > 0) + { + tga->root.type = bfd_link_hash_indirect; + tga->root.u.i.link = &opt->root; + ppc_elf_copy_indirect_symbol (info, opt, tga); + if (opt->dynindx != -1) + { + /* Use __tls_get_addr_opt in dynamic relocations. */ + opt->dynindx = -1; + _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, + opt->dynstr_index); + if (!bfd_elf_link_record_dynamic_symbol (info, opt)) + return FALSE; + } + htab->tls_get_addr = opt; + } + } + } + else + no_tls_get_addr_opt = TRUE; + } + htab->no_tls_get_addr_opt = no_tls_get_addr_opt; if (htab->plt_type == PLT_NEW && htab->plt != NULL && htab->plt->output_section != NULL) @@ -3996,11 +4614,36 @@ ppc_elf_tls_setup (bfd *obfd, struct bfd_link_info *info) elf_section_flags (htab->plt->output_section) = SHF_ALLOC + SHF_WRITE; } - htab->tls_get_addr = elf_link_hash_lookup (&htab->elf, "__tls_get_addr", - FALSE, FALSE, TRUE); return _bfd_elf_tls_setup (obfd, info); } +/* Return TRUE iff REL is a branch reloc with a global symbol matching + HASH. */ + +static bfd_boolean +branch_reloc_hash_match (const bfd *ibfd, + const Elf_Internal_Rela *rel, + const struct elf_link_hash_entry *hash) +{ + Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd); + enum elf_ppc_reloc_type r_type = ELF32_R_TYPE (rel->r_info); + unsigned int r_symndx = ELF32_R_SYM (rel->r_info); + + if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type)) + { + 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 (h == hash) + return TRUE; + } + return FALSE; +} + /* Run through all the TLS relocs looking for optimization opportunities. */ @@ -4011,190 +4654,230 @@ ppc_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, bfd *ibfd; asection *sec; struct ppc_elf_link_hash_table *htab; + int pass; - if (info->relocatable || info->shared) + if (info->relocatable || !info->executable) return TRUE; htab = ppc_elf_hash_table (info); - for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) - { - Elf_Internal_Sym *locsyms = NULL; - Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + /* Make two passes through the relocs. First time check that tls + relocs involved in setting up a tls_get_addr call are indeed + followed by such a call. If they are not, exclude them from + the optimizations done on the second pass. */ + for (pass = 0; pass < 2; ++pass) + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + Elf_Internal_Sym *locsyms = NULL; + Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd); - for (sec = ibfd->sections; sec != NULL; sec = sec->next) - if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section)) - { - Elf_Internal_Rela *relstart, *rel, *relend; - int expecting_tls_get_addr; + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section)) + { + Elf_Internal_Rela *relstart, *rel, *relend; - /* Read the relocations. */ - relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, - info->keep_memory); - if (relstart == NULL) - return FALSE; + /* Read the relocations. */ + relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, + info->keep_memory); + if (relstart == NULL) + return FALSE; - expecting_tls_get_addr = 0; - relend = relstart + sec->reloc_count; - for (rel = relstart; rel < relend; rel++) - { - enum elf_ppc_reloc_type r_type; - unsigned long r_symndx; - struct elf_link_hash_entry *h = NULL; - char *tls_mask; - char tls_set, tls_clear; - bfd_boolean is_local; - - r_symndx = ELF32_R_SYM (rel->r_info); - if (r_symndx >= symtab_hdr->sh_info) - { - struct elf_link_hash_entry **sym_hashes; + relend = relstart + sec->reloc_count; + for (rel = relstart; rel < relend; rel++) + { + enum elf_ppc_reloc_type r_type; + unsigned long r_symndx; + struct elf_link_hash_entry *h = NULL; + char *tls_mask; + char tls_set, tls_clear; + bfd_boolean is_local; + int expecting_tls_get_addr; + bfd_signed_vma *got_count; + + r_symndx = ELF32_R_SYM (rel->r_info); + if (r_symndx >= symtab_hdr->sh_info) + { + struct elf_link_hash_entry **sym_hashes; - sym_hashes = elf_sym_hashes (ibfd); - 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_hashes = elf_sym_hashes (ibfd); + 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; + } - is_local = FALSE; - if (h == NULL - || !h->def_dynamic) - is_local = TRUE; + expecting_tls_get_addr = 0; + is_local = FALSE; + if (h == NULL + || !h->def_dynamic) + is_local = TRUE; - r_type = ELF32_R_TYPE (rel->r_info); - switch (r_type) - { - case R_PPC_GOT_TLSLD16: - case R_PPC_GOT_TLSLD16_LO: - case R_PPC_GOT_TLSLD16_HI: - case R_PPC_GOT_TLSLD16_HA: - /* These relocs should never be against a symbol - defined in a shared lib. Leave them alone if - that turns out to be the case. */ - expecting_tls_get_addr = 0; - htab->tlsld_got.refcount -= 1; - if (!is_local) + r_type = ELF32_R_TYPE (rel->r_info); + switch (r_type) + { + case R_PPC_GOT_TLSLD16: + case R_PPC_GOT_TLSLD16_LO: + expecting_tls_get_addr = 1; + /* Fall thru */ + + case R_PPC_GOT_TLSLD16_HI: + case R_PPC_GOT_TLSLD16_HA: + /* These relocs should never be against a symbol + defined in a shared lib. Leave them alone if + that turns out to be the case. */ + if (!is_local) + continue; + + /* LD -> LE */ + tls_set = 0; + tls_clear = TLS_LD; + break; + + case R_PPC_GOT_TLSGD16: + case R_PPC_GOT_TLSGD16_LO: + expecting_tls_get_addr = 1; + /* Fall thru */ + + case R_PPC_GOT_TLSGD16_HI: + case R_PPC_GOT_TLSGD16_HA: + if (is_local) + /* GD -> LE */ + tls_set = 0; + else + /* GD -> IE */ + tls_set = TLS_TLS | TLS_TPRELGD; + tls_clear = TLS_GD; + break; + + case R_PPC_GOT_TPREL16: + case R_PPC_GOT_TPREL16_LO: + case R_PPC_GOT_TPREL16_HI: + case R_PPC_GOT_TPREL16_HA: + if (is_local) + { + /* IE -> LE */ + tls_set = 0; + tls_clear = TLS_TPREL; + break; + } + else + continue; + + default: continue; + } - /* LD -> LE */ - tls_set = 0; - tls_clear = TLS_LD; - expecting_tls_get_addr = 1; - break; + if (pass == 0) + { + if (!expecting_tls_get_addr + || !sec->has_tls_get_addr_call) + continue; + + if (rel + 1 < relend + && branch_reloc_hash_match (ibfd, rel + 1, + htab->tls_get_addr)) + continue; + + /* Uh oh, we didn't find the expected call. We + could just mark this symbol to exclude it + from tls optimization but it's safer to skip + the entire section. */ + sec->has_tls_reloc = 0; + break; + } - case R_PPC_GOT_TLSGD16: - case R_PPC_GOT_TLSGD16_LO: - case R_PPC_GOT_TLSGD16_HI: - case R_PPC_GOT_TLSGD16_HA: - if (is_local) - /* GD -> LE */ - tls_set = 0; - else - /* GD -> IE */ - tls_set = TLS_TLS | TLS_TPRELGD; - tls_clear = TLS_GD; - expecting_tls_get_addr = 1; - break; + if (h != NULL) + { + tls_mask = &ppc_elf_hash_entry (h)->tls_mask; + got_count = &h->got.refcount; + } + else + { + Elf_Internal_Sym *sym; + bfd_signed_vma *lgot_refs; + struct plt_entry **local_plt; + char *lgot_masks; - case R_PPC_GOT_TPREL16: - case R_PPC_GOT_TPREL16_LO: - case R_PPC_GOT_TPREL16_HI: - case R_PPC_GOT_TPREL16_HA: - expecting_tls_get_addr = 0; - if (is_local) - { - /* IE -> LE */ - tls_set = 0; - tls_clear = TLS_TPREL; - break; - } - else - continue; + if (locsyms == NULL) + { + locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; + if (locsyms == NULL) + locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, + symtab_hdr->sh_info, + 0, NULL, NULL, NULL); + if (locsyms == NULL) + { + if (elf_section_data (sec)->relocs != relstart) + free (relstart); + return FALSE; + } + } + sym = locsyms + r_symndx; + lgot_refs = elf_local_got_refcounts (ibfd); + if (lgot_refs == NULL) + abort (); + local_plt = (struct plt_entry **) + (lgot_refs + symtab_hdr->sh_info); + lgot_masks = (char *) (local_plt + symtab_hdr->sh_info); + tls_mask = &lgot_masks[r_symndx]; + got_count = &lgot_refs[r_symndx]; + } - case R_PPC_REL14: - case R_PPC_REL14_BRTAKEN: - case R_PPC_REL14_BRNTAKEN: - case R_PPC_REL24: - if (expecting_tls_get_addr - && h != NULL - && h == htab->tls_get_addr) - { - struct plt_entry *ent = find_plt_ent (h, NULL, 0); - if (ent != NULL && ent->plt.refcount > 0) - ent->plt.refcount -= 1; - } - expecting_tls_get_addr = 0; - continue; + if (tls_set == 0) + { + /* We managed to get rid of a got entry. */ + if (*got_count > 0) + *got_count -= 1; + } - default: - expecting_tls_get_addr = 0; - continue; - } + if (expecting_tls_get_addr) + { + struct plt_entry *ent; - if (h != NULL) - { - if (tls_set == 0) - { - /* We managed to get rid of a got entry. */ - if (h->got.refcount > 0) - h->got.refcount -= 1; - } - tls_mask = &ppc_elf_hash_entry (h)->tls_mask; - } - else - { - Elf_Internal_Sym *sym; - bfd_signed_vma *lgot_refs; - char *lgot_masks; + ent = find_plt_ent (&htab->tls_get_addr->plt.plist, + NULL, 0); + if (ent != NULL && ent->plt.refcount > 0) + ent->plt.refcount -= 1; + } - if (locsyms == NULL) - { - locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; - if (locsyms == NULL) - locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, - symtab_hdr->sh_info, - 0, NULL, NULL, NULL); - if (locsyms == NULL) - { - if (elf_section_data (sec)->relocs != relstart) - free (relstart); - return FALSE; - } - } - sym = locsyms + r_symndx; - lgot_refs = elf_local_got_refcounts (ibfd); - if (lgot_refs == NULL) - abort (); - if (tls_set == 0) - { - /* We managed to get rid of a got entry. */ - if (lgot_refs[r_symndx] > 0) - lgot_refs[r_symndx] -= 1; - } - lgot_masks = (char *) (lgot_refs + symtab_hdr->sh_info); - tls_mask = &lgot_masks[r_symndx]; - } + *tls_mask |= tls_set; + *tls_mask &= ~tls_clear; + } - *tls_mask |= tls_set; - *tls_mask &= ~tls_clear; - } + if (elf_section_data (sec)->relocs != relstart) + free (relstart); + } - if (elf_section_data (sec)->relocs != relstart) - free (relstart); + if (locsyms != NULL + && (symtab_hdr->contents != (unsigned char *) locsyms)) + { + if (!info->keep_memory) + free (locsyms); + else + symtab_hdr->contents = (unsigned char *) locsyms; } - - if (locsyms != NULL - && (symtab_hdr->contents != (unsigned char *) locsyms)) - { - if (!info->keep_memory) - free (locsyms); - else - symtab_hdr->contents = (unsigned char *) locsyms; - } - } + } return TRUE; } +/* Return true if we have dynamic relocs that apply to read-only sections. */ + +static bfd_boolean +readonly_dynrelocs (struct elf_link_hash_entry *h) +{ + struct ppc_elf_dyn_relocs *p; + + for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) + { + asection *s = p->sec->output_section; + + if (s != NULL + && ((s->flags & (SEC_READONLY | SEC_ALLOC)) + == (SEC_READONLY | SEC_ALLOC))) + 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 @@ -4217,6 +4900,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, htab = ppc_elf_hash_table (info); BFD_ASSERT (htab->elf.dynobj != NULL && (h->needs_plt + || h->type == STT_GNU_IFUNC || h->u.weakdef != NULL || (h->def_dynamic && h->ref_regular @@ -4224,6 +4908,7 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, /* Deal with function syms. */ if (h->type == STT_FUNC + || h->type == STT_GNU_IFUNC || h->needs_plt) { /* Clear procedure linkage table information for any symbol that @@ -4233,9 +4918,10 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, if (ent->plt.refcount > 0) break; if (ent == NULL - || SYMBOL_CALLS_LOCAL (info, h) - || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT - && h->root.type == bfd_link_hash_undefweak)) + || (h->type != STT_GNU_IFUNC + && (SYMBOL_CALLS_LOCAL (info, h) + || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type == bfd_link_hash_undefweak)))) { /* A PLT entry is not required/allowed when: @@ -4250,6 +4936,25 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, h->plt.plist = NULL; h->needs_plt = 0; } + else + { + /* After adjust_dynamic_symbol, non_got_ref set in the + non-shared case means that we have allocated space in + .dynbss for the symbol and thus dyn_relocs for this + symbol should be discarded. + If we get here we know we are making a PLT entry for this + symbol, and in an executable we'd normally resolve + relocations against this symbol to the PLT entry. Allow + dynamic relocs if the reference is weak, and the dynamic + relocs will not cause text relocation. */ + if (!h->ref_regular_nonweak + && h->non_got_ref + && h->type != STT_GNU_IFUNC + && !htab->is_vxworks + && !ppc_elf_hash_entry (h)->has_sda_refs + && !readonly_dynrelocs (h)) + h->non_got_ref = 0; + } return TRUE; } else @@ -4292,21 +4997,12 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info, executable. */ if (ELIMINATE_COPY_RELOCS && !ppc_elf_hash_entry (h)->has_sda_refs - && !htab->is_vxworks) + && !htab->is_vxworks + && !h->def_regular + && !readonly_dynrelocs (h)) { - struct ppc_elf_dyn_relocs *p; - for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) - { - s = p->sec->output_section; - if (s != NULL && (s->flags & SEC_READONLY) != 0) - break; - } - - if (p == NULL) - { - h->non_got_ref = 0; - return TRUE; - } + h->non_got_ref = 0; + return TRUE; } if (h->size == 0) @@ -4372,7 +5068,7 @@ add_stub_sym (struct plt_entry *ent, const char *stub; struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info); - if (info->shared || info->pie) + if (info->shared) stub = ".plt_pic32."; else stub = ".plt_call32."; @@ -4464,29 +5160,37 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) h = (struct elf_link_hash_entry *) h->root.u.i.link; htab = ppc_elf_hash_table (info); - if (htab->elf.dynamic_sections_created) + if (htab->elf.dynamic_sections_created + || h->type == STT_GNU_IFUNC) { struct plt_entry *ent; bfd_boolean doneone = FALSE; bfd_vma plt_offset = 0, glink_offset = 0; + bfd_boolean dyn; for (ent = h->plt.plist; ent != NULL; ent = ent->next) if (ent->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. */ if (h->dynindx == -1 - && !h->forced_local) + && !h->forced_local + && !h->def_regular + && htab->elf.dynamic_sections_created) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; } + dyn = htab->elf.dynamic_sections_created; if (info->shared - || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) + || h->type == STT_GNU_IFUNC + || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)) { asection *s = htab->plt; + if (!dyn || h->dynindx == -1) + s = htab->iplt; - if (htab->plt_type == PLT_NEW) + if (htab->plt_type == PLT_NEW || !dyn || h->dynindx == -1) { if (!doneone) { @@ -4496,13 +5200,17 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) ent->plt.offset = plt_offset; s = htab->glink; - if (!doneone || info->shared || info->pie) + if (!doneone || info->shared) { glink_offset = s->size; s->size += GLINK_ENTRY_SIZE; + if (h == htab->tls_get_addr + && !htab->no_tls_get_addr_opt) + s->size += TLS_GET_ADDR_GLINK_SIZE - GLINK_ENTRY_SIZE; } if (!doneone && !info->shared + && h->def_dynamic && !h->def_regular) { h->root.u.def.section = s; @@ -4535,11 +5243,13 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* If this symbol is not defined in a regular file, and we are not generating a shared - library, then set the symbol to this location - in the .plt. This is required to make + library, then set the symbol to this location + in the .plt. This is to avoid text + relocations, and is required to make function pointers compare as equal between the normal executable and the shared library. */ if (! info->shared + && h->def_dynamic && !h->def_regular) { h->root.u.def.section = s; @@ -4562,29 +5272,36 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* We also need to make an entry in the .rela.plt section. */ if (!doneone) { - htab->relplt->size += sizeof (Elf32_External_Rela); - - if (htab->plt_type == PLT_VXWORKS) + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + htab->reliplt->size += sizeof (Elf32_External_Rela); + else { - /* Allocate space for the unloaded relocations. */ - if (!info->shared) + htab->relplt->size += sizeof (Elf32_External_Rela); + + if (htab->plt_type == PLT_VXWORKS) { - if (ent->plt.offset - == (bfd_vma) htab->plt_initial_entry_size) + /* Allocate space for the unloaded relocations. */ + if (!info->shared + && htab->elf.dynamic_sections_created) { + if (ent->plt.offset + == (bfd_vma) htab->plt_initial_entry_size) + { + htab->srelplt2->size + += (sizeof (Elf32_External_Rela) + * VXWORKS_PLTRESOLVE_RELOCS); + } + htab->srelplt2->size - += sizeof (Elf32_External_Rela) - * VXWORKS_PLTRESOLVE_RELOCS; + += (sizeof (Elf32_External_Rela) + * VXWORKS_PLT_NON_JMP_SLOT_RELOCS); } - htab->srelplt2->size - += sizeof (Elf32_External_Rela) - * VXWORKS_PLT_NON_JMP_SLOT_RELOCS; + /* Every PLT entry has an associated GOT entry in + .got.plt. */ + htab->sgotplt->size += 4; } - - /* Every PLT entry has an associated GOT entry in - .got.plt. */ - htab->sgotplt->size += 4; } doneone = TRUE; } @@ -4610,35 +5327,45 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) eh = (struct ppc_elf_link_hash_entry *) h; if (eh->elf.got.refcount > 0) { + bfd_boolean dyn; + unsigned int need; + /* Make sure this symbol is output as a dynamic symbol. */ if (eh->elf.dynindx == -1 - && !eh->elf.forced_local) + && !eh->elf.forced_local + && eh->elf.type != STT_GNU_IFUNC + && htab->elf.dynamic_sections_created) { if (!bfd_elf_link_record_dynamic_symbol (info, &eh->elf)) return FALSE; } - if (eh->tls_mask == (TLS_TLS | TLS_LD) - && !eh->elf.def_dynamic) - /* If just an LD reloc, we'll just use htab->tlsld_got.offset. */ - eh->elf.got.offset = (bfd_vma) -1; - else + need = 0; + if ((eh->tls_mask & TLS_TLS) != 0) { - bfd_boolean dyn; - unsigned int need = 0; - if ((eh->tls_mask & TLS_TLS) != 0) + if ((eh->tls_mask & TLS_LD) != 0) { - if ((eh->tls_mask & TLS_LD) != 0) - need += 8; - if ((eh->tls_mask & TLS_GD) != 0) + if (!eh->elf.def_dynamic) + /* We'll just use htab->tlsld_got.offset. This should + always be the case. It's a little odd if we have + a local dynamic reloc against a non-local symbol. */ + htab->tlsld_got.refcount += 1; + else need += 8; - if ((eh->tls_mask & (TLS_TPREL | TLS_TPRELGD)) != 0) - need += 4; - if ((eh->tls_mask & TLS_DTPREL) != 0) - need += 4; } - else + if ((eh->tls_mask & TLS_GD) != 0) + need += 8; + if ((eh->tls_mask & (TLS_TPREL | TLS_TPRELGD)) != 0) need += 4; + if ((eh->tls_mask & TLS_DTPREL) != 0) + need += 4; + } + else + need += 4; + if (need == 0) + eh->elf.got.offset = (bfd_vma) -1; + else + { eh->elf.got.offset = allocate_got (htab, need); dyn = htab->elf.dynamic_sections_created; if ((info->shared @@ -4646,18 +5373,21 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) && (ELF_ST_VISIBILITY (eh->elf.other) == STV_DEFAULT || eh->elf.root.type != bfd_link_hash_undefweak)) { + asection *rsec = htab->relgot; /* All the entries we allocated need relocs. Except LD only needs one. */ - if ((eh->tls_mask & TLS_LD) != 0) + if ((eh->tls_mask & TLS_LD) != 0 + && eh->elf.def_dynamic) need -= 4; - htab->relgot->size += need * (sizeof (Elf32_External_Rela) / 4); + rsec->size += need * (sizeof (Elf32_External_Rela) / 4); } } } else eh->elf.got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (eh->dyn_relocs == NULL + || !htab->elf.dynamic_sections_created) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -4669,7 +5399,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (info->shared) { /* Relocs that use pc_count are those that appear on a call insn, - or certain REL relocs (see MUST_BE_DYN_RELOC) that can be + or certain REL relocs (see must_be_dyn_reloc) that can be generated via assembly. 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 @@ -4689,6 +5419,26 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } } + if (htab->is_vxworks) + { + struct ppc_elf_dyn_relocs **pp; + + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + { + if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) + *pp = p->next; + else + pp = &p->next; + } + } + + /* Discard relocs on undefined symbols that must be local. */ + if (eh->dyn_relocs != NULL + && h->root.type == bfd_link_hash_undefined + && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN + || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)) + eh->dyn_relocs = NULL; + /* Also discard relocs on undefined weak syms with non-default visibility. */ if (eh->dyn_relocs != NULL @@ -4700,7 +5450,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ else if (h->dynindx == -1 - && !h->forced_local) + && !h->forced_local + && !h->def_regular) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -4714,7 +5465,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) dynamic. */ if (!h->non_got_ref - && h->def_dynamic && !h->def_regular) { /* Make sure this symbol is output as a dynamic symbol. @@ -4741,38 +5491,32 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) for (p = eh->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; + if (!htab->elf.dynamic_sections_created) + sreloc = htab->reliplt; sreloc->size += p->count * sizeof (Elf32_External_Rela); } return TRUE; } -/* Find any dynamic relocs that apply to read-only sections. */ +/* Set DF_TEXTREL if we find any dynamic relocs that apply to + read-only sections. */ static bfd_boolean -readonly_dynrelocs (struct elf_link_hash_entry *h, void *info) +maybe_set_textrel (struct elf_link_hash_entry *h, void *info) { - struct ppc_elf_dyn_relocs *p; - 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; - for (p = ppc_elf_hash_entry (h)->dyn_relocs; p != NULL; p = p->next) + if (readonly_dynrelocs (h)) { - asection *s = p->sec->output_section; - - if (s != NULL - && ((s->flags & (SEC_READONLY | SEC_ALLOC)) - == (SEC_READONLY | SEC_ALLOC))) - { - ((struct bfd_link_info *) info)->flags |= DF_TEXTREL; + ((struct bfd_link_info *) info)->flags |= DF_TEXTREL; - /* Not an error, just cut short the traversal. */ - return FALSE; - } + /* Not an error, just cut short the traversal. */ + return FALSE; } return TRUE; } @@ -4818,11 +5562,13 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { bfd_signed_vma *local_got; bfd_signed_vma *end_local_got; + struct plt_entry **local_plt; + struct plt_entry **end_local_plt; char *lgot_masks; bfd_size_type locsymcount; Elf_Internal_Shdr *symtab_hdr; - if (!is_ppc_elf_target (ibfd->xvec)) + if (!is_ppc_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) @@ -4842,10 +5588,19 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, linker script /DISCARD/, so we'll be discarding the relocs too. */ } + else if (htab->is_vxworks + && strcmp (p->sec->output_section->name, + ".tls_vars") == 0) + { + /* Relocations in vxworks .tls_vars sections are + handled specially by the loader. */ + } else if (p->count != 0) { - elf_section_data (p->sec)->sreloc->size - += p->count * sizeof (Elf32_External_Rela); + asection *sreloc = elf_section_data (p->sec)->sreloc; + if (!htab->elf.dynamic_sections_created) + sreloc = htab->reliplt; + sreloc->size += p->count * sizeof (Elf32_External_Rela); if ((p->sec->output_section->flags & (SEC_READONLY | SEC_ALLOC)) == (SEC_READONLY | SEC_ALLOC)) @@ -4858,34 +5613,33 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; - lgot_masks = (char *) end_local_got; + local_plt = (struct plt_entry **) end_local_got; + end_local_plt = local_plt + locsymcount; + lgot_masks = (char *) end_local_plt; for (; local_got < end_local_got; ++local_got, ++lgot_masks) if (*local_got > 0) { - if (*lgot_masks == (TLS_TLS | TLS_LD)) + unsigned int need = 0; + if ((*lgot_masks & TLS_TLS) != 0) { - /* If just an LD reloc, we'll just use - htab->tlsld_got.offset. */ - htab->tlsld_got.refcount += 1; - *local_got = (bfd_vma) -1; + if ((*lgot_masks & TLS_GD) != 0) + need += 8; + if ((*lgot_masks & TLS_LD) != 0) + htab->tlsld_got.refcount += 1; + if ((*lgot_masks & (TLS_TPREL | TLS_TPRELGD)) != 0) + need += 4; + if ((*lgot_masks & TLS_DTPREL) != 0) + need += 4; } + else + need += 4; + if (need == 0) + *local_got = (bfd_vma) -1; else { - unsigned int need = 0; - if ((*lgot_masks & TLS_TLS) != 0) - { - if ((*lgot_masks & TLS_GD) != 0) - need += 8; - if ((*lgot_masks & (TLS_TPREL | TLS_TPRELGD)) != 0) - need += 4; - if ((*lgot_masks & TLS_DTPREL) != 0) - need += 4; - } - else - need += 4; *local_got = allocate_got (htab, need); if (info->shared) htab->relgot->size += (need @@ -4894,8 +5648,51 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, } else *local_got = (bfd_vma) -1; + + if (htab->is_vxworks) + continue; + + /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt. */ + for (; local_plt < end_local_plt; ++local_plt) + { + struct plt_entry *ent; + bfd_boolean doneone = FALSE; + bfd_vma plt_offset = 0, glink_offset = 0; + + for (ent = *local_plt; ent != NULL; ent = ent->next) + if (ent->plt.refcount > 0) + { + asection *s = htab->iplt; + + if (!doneone) + { + plt_offset = s->size; + s->size += 4; + } + ent->plt.offset = plt_offset; + + s = htab->glink; + if (!doneone || info->shared) + { + glink_offset = s->size; + s->size += GLINK_ENTRY_SIZE; + } + ent->glink_offset = glink_offset; + + if (!doneone) + { + htab->reliplt->size += sizeof (Elf32_External_Rela); + doneone = TRUE; + } + } + else + ent->plt.offset = (bfd_vma) -1; + } } + /* Allocate space for global sym dynamic relocs. */ + elf_link_hash_traverse (elf_hash_table (info), allocate_dynrelocs, info); + if (htab->tlsld_got.refcount > 0) { htab->tlsld_got.offset = allocate_got (htab, 8); @@ -4905,9 +5702,6 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, else htab->tlsld_got.offset = (bfd_vma) -1; - /* Allocate space for global sym dynamic relocs. */ - elf_link_hash_traverse (elf_hash_table (info), allocate_dynrelocs, info); - if (htab->got != NULL && htab->plt_type != PLT_VXWORKS) { unsigned int g_o_t = 32768; @@ -4926,8 +5720,22 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, htab->elf.hgot->root.u.def.value = g_o_t; } + if (info->shared) + { + struct elf_link_hash_entry *sda = htab->sdata[0].sym; + if (sda != NULL + && !(sda->root.type == bfd_link_hash_defined + || sda->root.type == bfd_link_hash_defweak)) + { + sda->root.type = bfd_link_hash_defined; + sda->root.u.def.section = htab->elf.hgot->root.u.def.section; + sda->root.u.def.value = htab->elf.hgot->root.u.def.value; + } + } - if (htab->glink != NULL && htab->glink->size != 0) + if (htab->glink != NULL + && htab->glink->size != 0 + && htab->elf.dynamic_sections_created) { htab->glink_pltresolve = htab->glink->size; /* Space for the branch table. */ @@ -4983,22 +5791,23 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, continue; if (s == htab->plt - || s == htab->glink - || s == htab->got - || s == htab->sgotplt - || s == htab->sbss - || s == htab->dynbss - || s == htab->dynsbss) + || s == htab->got) { /* We'd like to strip these sections if they aren't needed, but if we've exported dynamic symbols from them we must leave them. It's too late to tell BFD to get rid of the symbols. */ - if ((s == htab->plt || s == htab->got) && htab->elf.hplt != NULL) + if (htab->elf.hplt != NULL) strip_section = FALSE; /* Strip this section if we don't need it; see the comment below. */ } - else if (s == htab->sdata[0].section + else if (s == htab->iplt + || s == htab->glink + || s == htab->sgotplt + || s == htab->sbss + || s == htab->dynbss + || s == htab->dynsbss + || s == htab->sdata[0].section || s == htab->sdata[1].section) { /* Strip these too. */ @@ -5074,6 +5883,11 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { if (!add_dynamic_entry (DT_PPC_GOT, 0)) return FALSE; + if (!htab->no_tls_get_addr_opt + && htab->tls_get_addr != NULL + && htab->tls_get_addr->plt.plist != NULL + && !add_dynamic_entry (DT_PPC_TLSOPT, 0)) + return FALSE; } if (relocs) @@ -5087,7 +5901,7 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* If any dynamic relocs apply to a read-only section, then we need a DT_TEXTREL entry. */ if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (elf_hash_table (info), readonly_dynrelocs, + elf_link_hash_traverse (elf_hash_table (info), maybe_set_textrel, info); if ((info->flags & DF_TEXTREL) != 0) @@ -5095,31 +5909,50 @@ ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!add_dynamic_entry (DT_TEXTREL, 0)) return FALSE; } - } + if (htab->is_vxworks + && !elf_vxworks_add_dynamic_entries (output_bfd, info)) + return FALSE; + } #undef add_dynamic_entry return TRUE; } + +/* Return TRUE if symbol should be hashed in the `.gnu.hash' section. */ + +static bfd_boolean +ppc_elf_hash_symbol (struct elf_link_hash_entry *h) +{ + if (h->plt.plist != NULL + && !h->def_regular + && (!h->pointer_equality_needed + || !h->ref_regular_nonweak)) + return FALSE; + + return _bfd_elf_hash_symbol (h); +} #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) +/* Relaxation trampolines. r12 is available for clobbering (r11, is + used for some functions that are allowed to break the ABI). */ static const int shared_stub_entry[] = { 0x7c0802a6, /* mflr 0 */ 0x429f0005, /* bcl 20, 31, .Lxxx */ - 0x7d6802a6, /* mflr 11 */ - 0x3d6b0000, /* addis 11, 11, (xxx-.Lxxx)@ha */ - 0x396b0018, /* addi 11, 11, (xxx-.Lxxx)@l */ + 0x7d8802a6, /* mflr 12 */ + 0x3d8c0000, /* addis 12, 12, (xxx-.Lxxx)@ha */ + 0x398c0008, /* addi 12, 12, (xxx-.Lxxx)@l */ 0x7c0803a6, /* mtlr 0 */ - 0x7d6903a6, /* mtctr 11 */ + 0x7d8903a6, /* mtctr 12 */ 0x4e800420, /* bctr */ }; static const int stub_entry[] = { - 0x3d600000, /* lis 11,xxx@ha */ - 0x396b0000, /* addi 11,11,xxx@l */ - 0x7d6903a6, /* mtctr 11 */ + 0x3d800000, /* lis 12,xxx@ha */ + 0x398c0000, /* addi 12,12,xxx@l */ + 0x7d8903a6, /* mtctr 12 */ 0x4e800420, /* bctr */ }; @@ -5133,6 +5966,8 @@ ppc_elf_relax_section (bfd *abfd, { struct one_fixup *next; asection *tsec; + /* Final link, can use the symbol offset. For a + relocatable link we use the symbol's index. */ bfd_vma toff; bfd_vma trampoff; }; @@ -5143,7 +5978,7 @@ ppc_elf_relax_section (bfd *abfd, Elf_Internal_Rela *internal_relocs = NULL; Elf_Internal_Rela *irel, *irelend; struct one_fixup *fixups = NULL; - bfd_boolean changed; + unsigned changes = 0; struct ppc_elf_link_hash_table *htab; bfd_size_type trampoff; asection *got2; @@ -5151,17 +5986,24 @@ ppc_elf_relax_section (bfd *abfd, *again = FALSE; /* Nothing to do if there are no relocations, and no need to do - anything with non-alloc sections. */ + anything with non-alloc or non-code sections. */ if ((isec->flags & SEC_ALLOC) == 0 + || (isec->flags & SEC_CODE) == 0 || (isec->flags & SEC_RELOC) == 0 || isec->reloc_count == 0) return TRUE; + /* We cannot represent the required PIC relocs in the output, so don't + do anything. The linker doesn't support mixing -shared and -r + anyway. */ + if (link_info->relocatable && link_info->shared) + return TRUE; + trampoff = (isec->size + 3) & (bfd_vma) -4; /* Space for a branch around any trampolines. */ trampoff += 4; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); /* Get a copy of the native relocations. */ internal_relocs = _bfd_elf_link_read_relocs (abfd, isec, NULL, NULL, @@ -5176,13 +6018,15 @@ ppc_elf_relax_section (bfd *abfd, for (irel = internal_relocs; irel < irelend; irel++) { unsigned long r_type = ELF32_R_TYPE (irel->r_info); - bfd_vma symaddr, reladdr, toff, roff; + bfd_vma reladdr, toff, roff; asection *tsec; struct one_fixup *f; size_t insn_offset = 0; bfd_vma max_branch_offset, val; bfd_byte *hit_addr; unsigned long t0; + struct elf_link_hash_entry *h; + struct plt_entry **plist; unsigned char sym_type; switch (r_type) @@ -5204,6 +6048,7 @@ ppc_elf_relax_section (bfd *abfd, } /* Get the value of the symbol referred to by the reloc. */ + h = NULL; if (ELF32_R_SYM (irel->r_info) < symtab_hdr->sh_info) { /* A local symbol. */ @@ -5222,7 +6067,7 @@ ppc_elf_relax_section (bfd *abfd, } isym = isymbuf + ELF32_R_SYM (irel->r_info); if (isym->st_shndx == SHN_UNDEF) - continue; /* We can't do anything with undefined symbols. */ + tsec = bfd_und_section_ptr; else if (isym->st_shndx == SHN_ABS) tsec = bfd_abs_section_ptr; else if (isym->st_shndx == SHN_COMMON) @@ -5237,7 +6082,6 @@ ppc_elf_relax_section (bfd *abfd, { /* Global symbol handling. */ unsigned long indx; - struct elf_link_hash_entry *h; indx = ELF32_R_SYM (irel->r_info) - symtab_hdr->sh_info; h = elf_sym_hashes (abfd)[indx]; @@ -5246,41 +6090,70 @@ ppc_elf_relax_section (bfd *abfd, || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; - tsec = NULL; - toff = 0; - if (r_type == R_PPC_PLTREL24 - && htab->plt != NULL) - { - struct plt_entry *ent = find_plt_ent (h, got2, irel->r_addend); - - if (ent != NULL) - { - if (htab->plt_type == PLT_NEW) - { - tsec = htab->glink; - toff = ent->glink_offset; - } - else - { - tsec = htab->plt; - toff = ent->plt.offset; - } - } - } - if (tsec != NULL) - ; - else if (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) { tsec = h->root.u.def.section; toff = h->root.u.def.value; } + else if (h->root.type == bfd_link_hash_undefined + || h->root.type == bfd_link_hash_undefweak) + { + tsec = bfd_und_section_ptr; + toff = link_info->relocatable ? indx : 0; + } else continue; sym_type = h->type; } + /* The condition here under which we call find_plt_ent must + match that in relocate_section. If we call find_plt_ent here + but not in relocate_section, or vice versa, then the branch + destination used here may be incorrect. */ + plist = NULL; + if (h != NULL) + { + /* We know is_branch_reloc (r_type) is true. */ + if (h->type == STT_GNU_IFUNC + || r_type == R_PPC_PLTREL24) + plist = &h->plt.plist; + } + else if (sym_type == STT_GNU_IFUNC + && elf_local_got_offsets (abfd) != NULL) + { + bfd_vma *local_got_offsets = elf_local_got_offsets (abfd); + struct plt_entry **local_plt = (struct plt_entry **) + (local_got_offsets + symtab_hdr->sh_info); + plist = local_plt + ELF32_R_SYM (irel->r_info); + } + if (plist != NULL) + { + bfd_vma addend = 0; + struct plt_entry *ent; + + if (r_type == R_PPC_PLTREL24 && link_info->shared) + addend = irel->r_addend; + ent = find_plt_ent (plist, got2, addend); + if (ent != NULL) + { + if (htab->plt_type == PLT_NEW + || h == NULL + || !htab->elf.dynamic_sections_created + || h->dynindx == -1) + { + tsec = htab->glink; + toff = ent->glink_offset; + } + else + { + tsec = htab->plt; + toff = ent->plt.offset; + } + } + } + /* If the branch and target are in the same section, you have no hope of adding stubs. We'll error out later should the branch overflow. */ @@ -5328,14 +6201,23 @@ ppc_elf_relax_section (bfd *abfd, if (tsec->output_section == NULL) continue; - symaddr = tsec->output_section->vma + tsec->output_offset + toff; - roff = irel->r_offset; reladdr = isec->output_section->vma + isec->output_offset + roff; /* If the branch is in range, no need to do anything. */ - if (symaddr - reladdr + max_branch_offset < 2 * max_branch_offset) - continue; + if (tsec != bfd_und_section_ptr + && (!link_info->relocatable + /* A relocatable link may have sections moved during + final link, so do not presume they remain in range. */ + || tsec->output_section == isec->output_section)) + { + bfd_vma symaddr, reladdr; + + symaddr = tsec->output_section->vma + tsec->output_offset + toff; + reladdr = isec->output_section->vma + isec->output_offset + roff; + if (symaddr - reladdr + max_branch_offset < 2 * max_branch_offset) + continue; + } /* Look for an existing fixup to this address. */ for (f = fixups; f ; f = f->next) @@ -5378,6 +6260,8 @@ ppc_elf_relax_section (bfd *abfd, irel->r_info = ELF32_R_INFO (ELF32_R_SYM (irel->r_info), stub_rtype); irel->r_offset = trampoff + insn_offset; + if (r_type == R_PPC_PLTREL24) + irel->r_addend = 0; /* Record the fixup so we don't do it again this section. */ f = bfd_malloc (sizeof (*f)); @@ -5388,6 +6272,7 @@ ppc_elf_relax_section (bfd *abfd, fixups = f; trampoff += size; + changes++; } else { @@ -5438,7 +6323,6 @@ ppc_elf_relax_section (bfd *abfd, } /* Write out the trampolines. */ - changed = fixups != NULL; if (fixups != NULL) { const int *stub; @@ -5454,13 +6338,13 @@ ppc_elf_relax_section (bfd *abfd, } while (fixups); - contents = bfd_realloc (contents, trampoff); + contents = bfd_realloc_or_free (contents, trampoff); if (contents == NULL) goto error_return; isec->size = (isec->size + 3) & (bfd_vma) -4; /* Branch around the trampolines. */ - val = trampoff - isec->size + 0x48000000; + val = B + trampoff - isec->size; dest = contents + isec->size; isec->size = trampoff; bfd_put_32 (abfd, val, dest); @@ -5504,7 +6388,7 @@ ppc_elf_relax_section (bfd *abfd, if (contents != NULL && elf_section_data (isec)->this_hdr.contents != contents) { - if (!changed && !link_info->keep_memory) + if (!changes && !link_info->keep_memory) free (contents); else { @@ -5513,15 +6397,56 @@ ppc_elf_relax_section (bfd *abfd, } } - if (elf_section_data (isec)->relocs != internal_relocs) + if (changes != 0) { - if (!changed) + /* Append sufficient NOP relocs so we can write out relocation + information for the trampolines. */ + Elf_Internal_Rela *new_relocs = bfd_malloc ((changes + isec->reloc_count) + * sizeof (*new_relocs)); + unsigned ix; + + if (!new_relocs) + goto error_return; + memcpy (new_relocs, internal_relocs, + isec->reloc_count * sizeof (*new_relocs)); + for (ix = changes; ix--;) + { + irel = new_relocs + ix + isec->reloc_count; + + irel->r_info = ELF32_R_INFO (0, R_PPC_NONE); + } + if (internal_relocs != elf_section_data (isec)->relocs) free (internal_relocs); - else - elf_section_data (isec)->relocs = internal_relocs; + elf_section_data (isec)->relocs = new_relocs; + isec->reloc_count += changes; + elf_section_data (isec)->rel_hdr.sh_size + += changes * elf_section_data (isec)->rel_hdr.sh_entsize; } + else if (elf_section_data (isec)->relocs != internal_relocs) + free (internal_relocs); - *again = changed; + *again = changes != 0; + if (!*again && link_info->relocatable) + { + /* Convert the internal relax relocs to external form. */ + for (irel = internal_relocs; irel < irelend; irel++) + if (ELF32_R_TYPE (irel->r_info) == R_PPC_RELAX32) + { + unsigned long r_symndx = ELF32_R_SYM (irel->r_info); + + /* Rewrite the reloc and convert one of the trailing nop + relocs to describe this relocation. */ + BFD_ASSERT (ELF32_R_TYPE (irelend[-1].r_info) == R_PPC_NONE); + /* The relocs are at the bottom 2 bytes */ + irel[0].r_offset += 2; + memmove (irel + 1, irel, (irelend - irel - 1) * sizeof (*irel)); + irel[0].r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_HA); + irel[1].r_offset += 4; + irel[1].r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_LO); + irel++; + } + } + return TRUE; error_return: @@ -5578,38 +6503,114 @@ elf_finish_pointer_linker_section (bfd *input_bfd, /* Handle local symbol. */ unsigned long r_symndx = ELF32_R_SYM (rel->r_info); + BFD_ASSERT (is_ppc_elf (input_bfd)); BFD_ASSERT (elf_local_ptr_offsets (input_bfd) != NULL); linker_section_ptr = elf_local_ptr_offsets (input_bfd)[r_symndx]; } - - linker_section_ptr = elf_find_pointer_linker_section (linker_section_ptr, - rel->r_addend, - lsect); - BFD_ASSERT (linker_section_ptr != NULL); - - /* Offset will always be a multiple of four, so use the bottom bit - as a "written" flag. */ - if ((linker_section_ptr->offset & 1) == 0) + + linker_section_ptr = elf_find_pointer_linker_section (linker_section_ptr, + rel->r_addend, + lsect); + BFD_ASSERT (linker_section_ptr != NULL); + + /* Offset will always be a multiple of four, so use the bottom bit + as a "written" flag. */ + if ((linker_section_ptr->offset & 1) == 0) + { + bfd_put_32 (lsect->section->owner, + relocation + linker_section_ptr->addend, + lsect->section->contents + linker_section_ptr->offset); + linker_section_ptr->offset += 1; + } + + relocation = (lsect->section->output_section->vma + + lsect->section->output_offset + + linker_section_ptr->offset - 1 + - SYM_VAL (lsect->sym)); + +#ifdef DEBUG + fprintf (stderr, + "Finish pointer in linker section %s, offset = %ld (0x%lx)\n", + lsect->name, (long) relocation, (long) relocation); +#endif + + return relocation; +} + +#define PPC_LO(v) ((v) & 0xffff) +#define PPC_HI(v) (((v) >> 16) & 0xffff) +#define PPC_HA(v) PPC_HI ((v) + 0x8000) + +static void +write_glink_stub (struct plt_entry *ent, asection *plt_sec, unsigned char *p, + struct bfd_link_info *info) +{ + struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info); + bfd *output_bfd = info->output_bfd; + bfd_vma plt; + + plt = ((ent->plt.offset & ~1) + + plt_sec->output_section->vma + + plt_sec->output_offset); + + if (info->shared) + { + bfd_vma got = 0; + + if (ent->addend >= 32768) + got = (ent->addend + + ent->sec->output_section->vma + + ent->sec->output_offset); + else if (htab->elf.hgot != NULL) + got = SYM_VAL (htab->elf.hgot); + + plt -= got; + + if (plt + 0x8000 < 0x10000) + { + bfd_put_32 (output_bfd, LWZ_11_30 + PPC_LO (plt), p); + p += 4; + bfd_put_32 (output_bfd, MTCTR_11, p); + p += 4; + bfd_put_32 (output_bfd, BCTR, p); + p += 4; + bfd_put_32 (output_bfd, NOP, p); + p += 4; + } + else + { + bfd_put_32 (output_bfd, ADDIS_11_30 + PPC_HA (plt), p); + p += 4; + bfd_put_32 (output_bfd, LWZ_11_11 + PPC_LO (plt), p); + p += 4; + bfd_put_32 (output_bfd, MTCTR_11, p); + p += 4; + bfd_put_32 (output_bfd, BCTR, p); + p += 4; + } + } + else { - bfd_put_32 (lsect->section->owner, - relocation + linker_section_ptr->addend, - lsect->section->contents + linker_section_ptr->offset); - linker_section_ptr->offset += 1; + bfd_put_32 (output_bfd, LIS_11 + PPC_HA (plt), p); + p += 4; + bfd_put_32 (output_bfd, LWZ_11_11 + PPC_LO (plt), p); + p += 4; + bfd_put_32 (output_bfd, MTCTR_11, p); + p += 4; + bfd_put_32 (output_bfd, BCTR, p); + p += 4; } +} - relocation = (lsect->section->output_offset - + linker_section_ptr->offset - 1 - - 0x8000); - -#ifdef DEBUG - fprintf (stderr, - "Finish pointer in linker section %s, offset = %ld (0x%lx)\n", - lsect->name, (long) relocation, (long) relocation); -#endif +/* Return true if symbol is defined statically. */ - /* Subtract out the addend, because it will get added back in by the normal - processing. */ - return relocation - linker_section_ptr->addend; +static bfd_boolean +is_static_defined (struct elf_link_hash_entry *h) +{ + return ((h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h->root.u.def.section != NULL + && h->root.u.def.section->output_section != NULL); } /* The RELOCATE_SECTION function is called by the ELF backend linker @@ -5662,6 +6663,7 @@ ppc_elf_relocate_section (bfd *output_bfd, bfd_vma *local_got_offsets; bfd_boolean ret = TRUE; bfd_vma d_offset = (bfd_big_endian (output_bfd) ? 2 : 0); + bfd_boolean is_vxworks_tls; #ifdef DEBUG _bfd_error_handler ("ppc_elf_relocate_section called for %B section %A, " @@ -5679,8 +6681,13 @@ ppc_elf_relocate_section (bfd *output_bfd, htab = ppc_elf_hash_table (info); local_got_offsets = elf_local_got_offsets (input_bfd); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); + /* We have to handle relocations in vxworks .tls_vars sections + specially, because the dynamic loader is 'weird'. */ + is_vxworks_tls = (htab->is_vxworks && info->shared + && !strcmp (input_section->output_section->name, + ".tls_vars")); rel = relocs; relend = relocs + input_section->reloc_count; for (; rel < relend; rel++) @@ -5699,6 +6706,7 @@ ppc_elf_relocate_section (bfd *output_bfd, bfd_boolean unresolved_reloc; bfd_boolean warned; unsigned int tls_type, tls_mask, tls_gd; + struct plt_entry **ifunc; r_type = ELF32_R_TYPE (rel->r_info); sym = NULL; @@ -5759,16 +6767,16 @@ ppc_elf_relocate_section (bfd *output_bfd, for the final instruction stream. */ tls_mask = 0; tls_gd = 0; - if (IS_PPC_TLS_RELOC (r_type)) + if (h != NULL) + tls_mask = ((struct ppc_elf_link_hash_entry *) h)->tls_mask; + else if (local_got_offsets != NULL) { - if (h != NULL) - tls_mask = ((struct ppc_elf_link_hash_entry *) h)->tls_mask; - else if (local_got_offsets != NULL) - { - char *lgot_masks; - lgot_masks = (char *) (local_got_offsets + symtab_hdr->sh_info); - tls_mask = lgot_masks[r_symndx]; - } + struct plt_entry **local_plt; + char *lgot_masks; + local_plt + = (struct plt_entry **) (local_got_offsets + symtab_hdr->sh_info); + lgot_masks = (char *) (local_plt + symtab_hdr->sh_info); + tls_mask = lgot_masks[r_symndx]; } /* Ensure reloc mapping code below stays sane. */ @@ -5788,7 +6796,7 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_GOT_TPREL16: case R_PPC_GOT_TPREL16_LO: - if (tls_mask != 0 + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_TPREL) == 0) { bfd_vma insn; @@ -5802,7 +6810,7 @@ ppc_elf_relocate_section (bfd *output_bfd, break; case R_PPC_TLS: - if (tls_mask != 0 + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_TPREL) == 0) { bfd_vma insn, rtra; @@ -5849,13 +6857,13 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_GOT_TLSGD16_HI: case R_PPC_GOT_TLSGD16_HA: tls_gd = TLS_TPRELGD; - if (tls_mask != 0 && (tls_mask & TLS_GD) == 0) + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0) goto tls_gdld_hi; break; case R_PPC_GOT_TLSLD16_HI: case R_PPC_GOT_TLSLD16_HA: - if (tls_mask != 0 && (tls_mask & TLS_LD) == 0) + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0) { tls_gdld_hi: if ((tls_mask & tls_gd) != 0) @@ -5874,86 +6882,148 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_GOT_TLSGD16: case R_PPC_GOT_TLSGD16_LO: tls_gd = TLS_TPRELGD; - if (tls_mask != 0 && (tls_mask & TLS_GD) == 0) - goto tls_get_addr_check; + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0) + goto tls_ldgd_opt; break; case R_PPC_GOT_TLSLD16: case R_PPC_GOT_TLSLD16_LO: - if (tls_mask != 0 && (tls_mask & TLS_LD) == 0) + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0) { - tls_get_addr_check: - if (rel + 1 < relend) + unsigned int insn1, insn2; + bfd_vma offset; + + tls_ldgd_opt: + offset = (bfd_vma) -1; + /* If not using the newer R_PPC_TLSGD/LD to mark + __tls_get_addr calls, we must trust that the call + stays with its arg setup insns, ie. that the next + reloc is the __tls_get_addr call associated with + the current reloc. Edit both insns. */ + if (input_section->has_tls_get_addr_call + && rel + 1 < relend + && branch_reloc_hash_match (input_bfd, rel + 1, + htab->tls_get_addr)) + offset = rel[1].r_offset; + if ((tls_mask & tls_gd) != 0) { - enum elf_ppc_reloc_type r_type2; - unsigned long r_symndx2; - struct elf_link_hash_entry *h2; - bfd_vma insn1, insn2; - bfd_vma offset; - - /* The next instruction should be a call to - __tls_get_addr. Peek at the reloc to be sure. */ - r_type2 = ELF32_R_TYPE (rel[1].r_info); - r_symndx2 = ELF32_R_SYM (rel[1].r_info); - if (r_symndx2 < symtab_hdr->sh_info - || (r_type2 != R_PPC_REL14 - && r_type2 != R_PPC_REL14_BRTAKEN - && r_type2 != R_PPC_REL14_BRNTAKEN - && r_type2 != R_PPC_REL24 - && r_type2 != R_PPC_PLTREL24)) - break; - - h2 = sym_hashes[r_symndx2 - symtab_hdr->sh_info]; - while (h2->root.type == bfd_link_hash_indirect - || h2->root.type == bfd_link_hash_warning) - h2 = (struct elf_link_hash_entry *) h2->root.u.i.link; - if (h2 == NULL || h2 != htab->tls_get_addr) - break; - - /* OK, it checks out. Replace the call. */ - offset = rel[1].r_offset; + /* IE */ insn1 = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset); - if ((tls_mask & tls_gd) != 0) + insn1 &= (1 << 26) - 1; + insn1 |= 32 << 26; /* lwz */ + if (offset != (bfd_vma) -1) { - /* IE */ - insn1 &= (1 << 26) - 1; - insn1 |= 32 << 26; /* lwz */ + rel[1].r_info + = ELF32_R_INFO (ELF32_R_SYM (rel[1].r_info), + R_PPC_NONE); insn2 = 0x7c631214; /* add 3,3,2 */ - rel[1].r_info = ELF32_R_INFO (r_symndx2, R_PPC_NONE); - rel[1].r_addend = 0; - r_type = (((r_type - (R_PPC_GOT_TLSGD16 & 3)) & 3) - + R_PPC_GOT_TPREL16); - rel->r_info = ELF32_R_INFO (r_symndx, r_type); + bfd_put_32 (output_bfd, insn2, contents + offset); } - else + r_type = (((r_type - (R_PPC_GOT_TLSGD16 & 3)) & 3) + + R_PPC_GOT_TPREL16); + rel->r_info = ELF32_R_INFO (r_symndx, r_type); + } + else + { + /* LE */ + insn1 = 0x3c620000; /* addis 3,2,0 */ + if (tls_gd == 0) { - /* LE */ - insn1 = 0x3c620000; /* addis 3,2,0 */ - insn2 = 0x38630000; /* addi 3,3,0 */ - if (tls_gd == 0) - { - /* Was an LD reloc. */ - r_symndx = 0; - rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; - } - r_type = R_PPC_TPREL16_HA; - 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 += d_offset; - rel[1].r_addend = rel->r_addend; + /* Was an LD reloc. */ + for (r_symndx = 0; + r_symndx < symtab_hdr->sh_info; + r_symndx++) + if (local_sections[r_symndx] == sec) + break; + if (r_symndx >= symtab_hdr->sh_info) + r_symndx = 0; + rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; + if (r_symndx != 0) + rel->r_addend -= (local_syms[r_symndx].st_value + + sec->output_offset + + sec->output_section->vma); } - bfd_put_32 (output_bfd, insn1, contents + rel->r_offset - d_offset); - bfd_put_32 (output_bfd, insn2, contents + offset); - if (tls_gd == 0) + r_type = R_PPC_TPREL16_HA; + rel->r_info = ELF32_R_INFO (r_symndx, r_type); + if (offset != (bfd_vma) -1) { - /* We changed the symbol on an LD reloc. Start over - in order to get h, sym, sec etc. right. */ - rel--; - continue; + rel[1].r_info = ELF32_R_INFO (r_symndx, R_PPC_TPREL16_LO); + rel[1].r_offset = offset + d_offset; + rel[1].r_addend = rel->r_addend; + insn2 = 0x38630000; /* addi 3,3,0 */ + bfd_put_32 (output_bfd, insn2, contents + offset); } } + bfd_put_32 (output_bfd, insn1, + contents + rel->r_offset - d_offset); + if (tls_gd == 0) + { + /* We changed the symbol on an LD reloc. Start over + in order to get h, sym, sec etc. right. */ + rel--; + continue; + } + } + break; + + case R_PPC_TLSGD: + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_GD) == 0) + { + unsigned int insn2; + bfd_vma offset = rel->r_offset; + + if ((tls_mask & TLS_TPRELGD) != 0) + { + /* IE */ + r_type = R_PPC_NONE; + insn2 = 0x7c631214; /* add 3,3,2 */ + } + else + { + /* LE */ + r_type = R_PPC_TPREL16_LO; + rel->r_offset += d_offset; + insn2 = 0x38630000; /* addi 3,3,0 */ + } + rel->r_info = ELF32_R_INFO (r_symndx, r_type); + bfd_put_32 (output_bfd, insn2, contents + offset); + /* Zap the reloc on the _tls_get_addr call too. */ + BFD_ASSERT (offset == rel[1].r_offset); + rel[1].r_info = ELF32_R_INFO (ELF32_R_SYM (rel[1].r_info), + R_PPC_NONE); + } + break; + + case R_PPC_TLSLD: + if ((tls_mask & TLS_TLS) != 0 && (tls_mask & TLS_LD) == 0) + { + unsigned int insn2; + + for (r_symndx = 0; + r_symndx < symtab_hdr->sh_info; + r_symndx++) + if (local_sections[r_symndx] == sec) + break; + if (r_symndx >= symtab_hdr->sh_info) + r_symndx = 0; + rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; + if (r_symndx != 0) + rel->r_addend -= (local_syms[r_symndx].st_value + + sec->output_offset + + sec->output_section->vma); + + rel->r_info = ELF32_R_INFO (r_symndx, R_PPC_TPREL16_LO); + rel->r_offset += d_offset; + insn2 = 0x38630000; /* addi 3,3,0 */ + bfd_put_32 (output_bfd, insn2, + contents + rel->r_offset - d_offset); + /* Zap the reloc on the _tls_get_addr call too. */ + BFD_ASSERT (rel->r_offset - d_offset == rel[1].r_offset); + rel[1].r_info = ELF32_R_INFO (ELF32_R_SYM (rel[1].r_info), + R_PPC_NONE); + rel--; + continue; } break; } @@ -5990,6 +7060,77 @@ ppc_elf_relocate_section (bfd *output_bfd, break; } + ifunc = NULL; + if (!htab->is_vxworks) + { + struct plt_entry *ent; + + if (h != NULL) + { + if (h->type == STT_GNU_IFUNC) + ifunc = &h->plt.plist; + } + else if (local_got_offsets != NULL + && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + { + struct plt_entry **local_plt; + + local_plt = (struct plt_entry **) (local_got_offsets + + symtab_hdr->sh_info); + ifunc = local_plt + r_symndx; + } + + ent = NULL; + if (ifunc != NULL + && (!info->shared + || is_branch_reloc (r_type))) + { + addend = 0; + if (r_type == R_PPC_PLTREL24 && info->shared) + addend = rel->r_addend; + ent = find_plt_ent (ifunc, got2, addend); + } + if (ent != NULL) + { + if (h == NULL && (ent->plt.offset & 1) == 0) + { + Elf_Internal_Rela rela; + bfd_byte *loc; + + rela.r_offset = (htab->iplt->output_section->vma + + htab->iplt->output_offset + + ent->plt.offset); + rela.r_info = ELF32_R_INFO (0, R_PPC_IRELATIVE); + rela.r_addend = relocation; + loc = htab->reliplt->contents; + loc += (htab->reliplt->reloc_count++ + * sizeof (Elf32_External_Rela)); + bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); + + ent->plt.offset |= 1; + } + if (h == NULL && (ent->glink_offset & 1) == 0) + { + unsigned char *p = ((unsigned char *) htab->glink->contents + + ent->glink_offset); + write_glink_stub (ent, htab->iplt, p, info); + ent->glink_offset |= 1; + } + + unresolved_reloc = FALSE; + if (htab->plt_type == PLT_NEW + || !htab->elf.dynamic_sections_created + || h == NULL) + relocation = (htab->glink->output_section->vma + + htab->glink->output_offset + + (ent->glink_offset & ~1)); + else + relocation = (htab->plt->output_section->vma + + htab->plt->output_offset + + ent->plt.offset); + } + } + addend = rel->r_addend; tls_type = 0; howto = NULL; @@ -6008,6 +7149,8 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_NONE: case R_PPC_TLS: + case R_PPC_TLSGD: + case R_PPC_TLSLD: case R_PPC_EMB_MRKREF: case R_PPC_GNU_VTINHERIT: case R_PPC_GNU_VTENTRY: @@ -6049,6 +7192,7 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_GOT16_LO: case R_PPC_GOT16_HI: case R_PPC_GOT16_HA: + tls_mask = 0; dogot: { /* Relocation is to the entry for this symbol in the global @@ -6138,10 +7282,13 @@ ppc_elf_relocate_section (bfd *output_bfd, /* Generate relocs for the dynamic linker. */ if ((info->shared || indx != 0) - && (h == NULL + && (offp == &htab->tlsld_got.offset + || h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) { + asection *rsec = htab->relgot; + outrel.r_offset = (htab->got->output_section->vma + htab->got->output_offset + off); @@ -6151,8 +7298,8 @@ ppc_elf_relocate_section (bfd *output_bfd, outrel.r_info = ELF32_R_INFO (indx, R_PPC_DTPMOD32); if (tls_ty == (TLS_TLS | TLS_GD)) { - loc = htab->relgot->contents; - loc += (htab->relgot->reloc_count++ + loc = rsec->contents; + loc += (rsec->reloc_count++ * sizeof (Elf32_External_Rela)); bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); @@ -6165,18 +7312,20 @@ ppc_elf_relocate_section (bfd *output_bfd, outrel.r_info = ELF32_R_INFO (indx, R_PPC_DTPREL32); else if (tls_ty == (TLS_TLS | TLS_TPREL)) outrel.r_info = ELF32_R_INFO (indx, R_PPC_TPREL32); - else if (indx == 0) - outrel.r_info = ELF32_R_INFO (indx, R_PPC_RELATIVE); - else + else if (indx != 0) outrel.r_info = ELF32_R_INFO (indx, R_PPC_GLOB_DAT); - if (indx == 0) + else if (ifunc != NULL) + outrel.r_info = ELF32_R_INFO (0, R_PPC_IRELATIVE); + else + outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE); + if (indx == 0 && tls_ty != (TLS_TLS | TLS_LD)) { outrel.r_addend += relocation; if (tls_ty & (TLS_GD | TLS_DTPREL | TLS_TPREL)) outrel.r_addend -= htab->elf.tls_sec->vma; } - loc = htab->relgot->contents; - loc += (htab->relgot->reloc_count++ + loc = rsec->contents; + loc += (rsec->reloc_count++ * sizeof (Elf32_External_Rela)); bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); } @@ -6240,8 +7389,10 @@ ppc_elf_relocate_section (bfd *output_bfd, } } - relocation = htab->got->output_offset + off; - relocation -= htab->elf.hgot->root.u.def.value; + relocation = (htab->got->output_section->vma + + htab->got->output_offset + + off + - SYM_VAL (htab->elf.hgot)); /* Addends on got relocations don't make much sense. x+off@got is actually x@got+off, and since the got is @@ -6313,48 +7464,58 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_REL16_HA: break; - case R_PPC_REL24: case R_PPC_REL32: + if (h == NULL || h == htab->elf.hgot) + break; + /* fall through */ + + case R_PPC_ADDR32: + case R_PPC_ADDR16: + case R_PPC_ADDR16_LO: + case R_PPC_ADDR16_HI: + case R_PPC_ADDR16_HA: + case R_PPC_UADDR32: + case R_PPC_UADDR16: + goto dodyn; + + case R_PPC_REL24: case R_PPC_REL14: case R_PPC_REL14_BRTAKEN: case R_PPC_REL14_BRNTAKEN: /* If these relocations are not to a named symbol, they can be handled right here, no need to bother the dynamic linker. */ - if (SYMBOL_REFERENCES_LOCAL (info, h) + if (SYMBOL_CALLS_LOCAL (info, h) || h == htab->elf.hgot) break; /* fall through */ - /* Relocations that always need to be propagated if this is a shared - object. */ - case R_PPC_ADDR32: case R_PPC_ADDR24: - case R_PPC_ADDR16: - case R_PPC_ADDR16_LO: - case R_PPC_ADDR16_HI: - case R_PPC_ADDR16_HA: case R_PPC_ADDR14: case R_PPC_ADDR14_BRTAKEN: case R_PPC_ADDR14_BRNTAKEN: - case R_PPC_UADDR32: - case R_PPC_UADDR16: + if (h != NULL && !info->shared) + break; + /* fall through */ + dodyn: - if ((input_section->flags & SEC_ALLOC) == 0) + if ((input_section->flags & SEC_ALLOC) == 0 + || is_vxworks_tls) break; - /* Fall thru. */ if ((info->shared - && (h == NULL - || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak) - && (MUST_BE_DYN_RELOC (r_type) + && !(h != NULL + && ((h->root.type == bfd_link_hash_undefined + && (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN + || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL)) + || (h->root.type == bfd_link_hash_undefweak + && ELF_ST_VISIBILITY (h->other) != STV_DEFAULT))) + && (must_be_dyn_reloc (info, r_type) || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS && !info->shared && h != NULL && h->dynindx != -1 && !h->non_got_ref - && h->def_dynamic && !h->def_regular)) { int skip; @@ -6371,26 +7532,14 @@ ppc_elf_relocate_section (bfd *output_bfd, time. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = elf_section_data (input_section)->sreloc; + if (!htab->elf.dynamic_sections_created) + sreloc = htab->reliplt; + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (htab->elf.dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = 0; - outrel.r_offset = _bfd_elf_section_offset (output_bfd, info, input_section, rel->r_offset); @@ -6402,7 +7551,10 @@ ppc_elf_relocate_section (bfd *output_bfd, if (skip) memset (&outrel, 0, sizeof outrel); - else if (!SYMBOL_REFERENCES_LOCAL (info, h)) + else if ((h != NULL + && (h->root.type == bfd_link_hash_undefined + || h->root.type == bfd_link_hash_undefweak)) + || !SYMBOL_REFERENCES_LOCAL (info, h)) { unresolved_reloc = FALSE; outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); @@ -6412,18 +7564,40 @@ ppc_elf_relocate_section (bfd *output_bfd, { outrel.r_addend = relocation + rel->r_addend; - if (r_type == R_PPC_ADDR32) - outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE); - else + if (r_type != R_PPC_ADDR32) { - long indx; + long indx = 0; - if (bfd_is_abs_section (sec)) - indx = 0; + if (ifunc != NULL) + { + /* If we get here when building a static + executable, then the libc startup function + responsible for applying indirect function + relocations is going to complain about + the reloc type. + If we get here when building a dynamic + executable, it will be because we have + a text relocation. The dynamic loader + will set the text segment writable and + non-executable to apply text relocations. + So we'll segfault when trying to run the + indirection function to resolve the reloc. */ + (*_bfd_error_handler) + (_("%B(%A+0x%lx): relocation %s for indirect " + "function %s unsupported"), + input_bfd, + input_section, + (long) rel->r_offset, + howto->name, + sym_name); + ret = FALSE; + } + else if (r_symndx == 0 || bfd_is_abs_section (sec)) + ; else if (sec == NULL || sec->owner == NULL) { bfd_set_error (bfd_error_bad_value); - return FALSE; + ret = FALSE; } else { @@ -6433,7 +7607,8 @@ ppc_elf_relocate_section (bfd *output_bfd, 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. */ + but ld.so expects buggy relocs. + FIXME: Why not always use a zero index? */ osec = sec->output_section; indx = elf_section_data (osec)->dynindx; if (indx == 0) @@ -6452,6 +7627,10 @@ ppc_elf_relocate_section (bfd *output_bfd, outrel.r_info = ELF32_R_INFO (indx, r_type); } + else if (ifunc != NULL) + outrel.r_info = ELF32_R_INFO (0, R_PPC_IRELATIVE); + else + outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE); } loc = sreloc->contents; @@ -6476,19 +7655,19 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_RELAX32PC_PLT: case R_PPC_RELAX32_PLT: - { - struct plt_entry *ent = find_plt_ent (h, got2, addend); - - if (htab->plt_type == PLT_NEW) - relocation = (htab->glink->output_section->vma - + htab->glink->output_offset - + ent->glink_offset); - else - relocation = (htab->plt->output_section->vma - + htab->plt->output_offset - + ent->plt.offset); - addend = 0; - } + if (h != NULL) + { + struct plt_entry *ent = find_plt_ent (&h->plt.plist, got2, + info->shared ? addend : 0); + if (htab->plt_type == PLT_NEW) + relocation = (htab->glink->output_section->vma + + htab->glink->output_offset + + ent->glink_offset); + else + relocation = (htab->plt->output_section->vma + + htab->plt->output_offset + + ent->plt.offset); + } if (r_type == R_PPC_RELAX32_PLT) goto relax32; /* Fall thru */ @@ -6520,23 +7699,46 @@ ppc_elf_relocate_section (bfd *output_bfd, bfd_put_32 (output_bfd, t0, contents + rel->r_offset); bfd_put_32 (output_bfd, t1, contents + rel->r_offset + 4); + + /* Rewrite the reloc and convert one of the trailing nop + relocs to describe this relocation. */ + BFD_ASSERT (ELF32_R_TYPE (relend[-1].r_info) == R_PPC_NONE); + /* The relocs are at the bottom 2 bytes */ + rel[0].r_offset += 2; + memmove (rel + 1, rel, (relend - rel - 1) * sizeof (*rel)); + rel[0].r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_HA); + rel[1].r_offset += 4; + rel[1].r_info = ELF32_R_INFO (r_symndx, R_PPC_ADDR16_LO); + rel++; } continue; /* Indirect .sdata relocation. */ case R_PPC_EMB_SDAI16: BFD_ASSERT (htab->sdata[0].section != NULL); + if (!is_static_defined (htab->sdata[0].sym)) + { + unresolved_reloc = TRUE; + break; + } relocation = elf_finish_pointer_linker_section (input_bfd, &htab->sdata[0], h, relocation, rel); + addend = 0; break; /* Indirect .sdata2 relocation. */ case R_PPC_EMB_SDA2I16: BFD_ASSERT (htab->sdata[1].section != NULL); + if (!is_static_defined (htab->sdata[1].sym)) + { + unresolved_reloc = TRUE; + break; + } relocation = elf_finish_pointer_linker_section (input_bfd, &htab->sdata[1], h, relocation, rel); + addend = 0; break; /* Handle the TOC16 reloc. We want to use the offset within the .got @@ -6544,20 +7746,25 @@ ppc_elf_relocate_section (bfd *output_bfd, an embedded ELF object, for which the .got section acts like the AIX .toc section. */ case R_PPC_TOC16: /* phony GOT16 relocations */ - BFD_ASSERT (sec != NULL); - BFD_ASSERT (bfd_is_und_section (sec) - || strcmp (bfd_get_section_name (abfd, sec), ".got") == 0 + if (sec == NULL || sec->output_section == NULL) + { + unresolved_reloc = TRUE; + break; + } + BFD_ASSERT (strcmp (bfd_get_section_name (abfd, sec), ".got") == 0 || strcmp (bfd_get_section_name (abfd, sec), ".cgot") == 0); - addend -= sec->output_section->vma + sec->output_offset + 0x8000; + addend -= sec->output_section->vma + sec->output_offset + 0x8000; break; case R_PPC_PLTREL24: + if (h == NULL || ifunc != NULL) + break; /* Relocation is to the entry for this symbol in the procedure linkage table. */ { - struct plt_entry *ent = find_plt_ent (h, got2, addend); - + struct plt_entry *ent = find_plt_ent (&h->plt.plist, got2, + info->shared ? addend : 0); addend = 0; if (ent == NULL || htab->plt == NULL) @@ -6584,9 +7791,17 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_SDAREL16: { const char *name; - struct elf_link_hash_entry *sh; + struct elf_link_hash_entry *sda = htab->sdata[0].sym; + + if (sec == NULL + || sec->output_section == NULL + || !is_static_defined (sda)) + { + unresolved_reloc = TRUE; + break; + } + addend -= SYM_VAL (sda); - BFD_ASSERT (sec != NULL); name = bfd_get_section_name (abfd, sec->output_section); if (! ((CONST_STRNEQ (name, ".sdata") && (name[6] == 0 || name[6] == '.')) @@ -6601,10 +7816,6 @@ ppc_elf_relocate_section (bfd *output_bfd, howto->name, name); } - sh = htab->sdata[0].sym; - addend -= (sh->root.u.def.value - + sh->root.u.def.section->output_offset - + sh->root.u.def.section->output_section->vma); } break; @@ -6612,9 +7823,17 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_EMB_SDA2REL: { const char *name; - struct elf_link_hash_entry *sh; + struct elf_link_hash_entry *sda = htab->sdata[1].sym; + + if (sec == NULL + || sec->output_section == NULL + || !is_static_defined (sda)) + { + unresolved_reloc = TRUE; + break; + } + addend -= SYM_VAL (sda); - BFD_ASSERT (sec != NULL); name = bfd_get_section_name (abfd, sec->output_section); if (! (CONST_STRNEQ (name, ".sdata2") || CONST_STRNEQ (name, ".sbss2"))) @@ -6626,15 +7845,7 @@ ppc_elf_relocate_section (bfd *output_bfd, sym_name, howto->name, name); - - bfd_set_error (bfd_error_bad_value); - ret = FALSE; - continue; } - sh = htab->sdata[1].sym; - addend -= (sh->root.u.def.value - + sh->root.u.def.section->output_offset - + sh->root.u.def.section->output_section->vma); } break; @@ -6644,9 +7855,14 @@ ppc_elf_relocate_section (bfd *output_bfd, { const char *name; int reg; - struct elf_link_hash_entry *sh; + struct elf_link_hash_entry *sda = NULL; + + if (sec == NULL || sec->output_section == NULL) + { + unresolved_reloc = TRUE; + break; + } - BFD_ASSERT (sec != NULL); name = bfd_get_section_name (abfd, sec->output_section); if (((CONST_STRNEQ (name, ".sdata") && (name[6] == 0 || name[6] == '.')) @@ -6654,28 +7870,19 @@ ppc_elf_relocate_section (bfd *output_bfd, && (name[5] == 0 || name[5] == '.')))) { reg = 13; - sh = htab->sdata[0].sym; - addend -= (sh->root.u.def.value - + sh->root.u.def.section->output_offset - + sh->root.u.def.section->output_section->vma); + sda = htab->sdata[0].sym; } - else if (CONST_STRNEQ (name, ".sdata2") || CONST_STRNEQ (name, ".sbss2")) { reg = 2; - sh = htab->sdata[1].sym; - addend -= (sh->root.u.def.value - + sh->root.u.def.section->output_offset - + sh->root.u.def.section->output_section->vma); + sda = htab->sdata[1].sym; } - else if (strcmp (name, ".PPC.EMB.sdata0") == 0 || strcmp (name, ".PPC.EMB.sbss0") == 0) { reg = 0; } - else { (*_bfd_error_handler) @@ -6691,6 +7898,16 @@ ppc_elf_relocate_section (bfd *output_bfd, continue; } + if (sda != NULL) + { + if (!is_static_defined (sda)) + { + unresolved_reloc = TRUE; + break; + } + addend -= SYM_VAL (sda); + } + if (r_type == R_PPC_EMB_SDA21) { /* fill in register field */ insn = bfd_get_32 (output_bfd, contents + rel->r_offset); @@ -6705,7 +7922,11 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_SECTOFF_LO: case R_PPC_SECTOFF_HI: case R_PPC_SECTOFF_HA: - BFD_ASSERT (sec != NULL); + if (sec == NULL || sec->output_section == NULL) + { + unresolved_reloc = TRUE; + break; + } addend -= sec->output_section->vma; break; @@ -6722,6 +7943,7 @@ ppc_elf_relocate_section (bfd *output_bfd, case R_PPC_GLOB_DAT: case R_PPC_JMP_SLOT: case R_PPC_RELATIVE: + case R_PPC_IRELATIVE: case R_PPC_PLT32: case R_PPC_PLTREL32: case R_PPC_PLT16_LO: @@ -6857,10 +8079,6 @@ ppc_elf_relocate_section (bfd *output_bfd, return ret; } -#define PPC_LO(v) ((v) & 0xffff) -#define PPC_HI(v) (((v) >> 16) & 0xffff) -#define PPC_HA(v) PPC_HI ((v) + 0x8000) - /* Finish up dynamic symbol handling. We set the contents of various dynamic sections here. */ @@ -6892,7 +8110,9 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, bfd_byte *loc; bfd_vma reloc_index; - if (htab->plt_type == PLT_NEW) + if (htab->plt_type == PLT_NEW + || !htab->elf.dynamic_sections_created + || h->dynindx == -1) reloc_index = ent->plt.offset / 4; else { @@ -6905,7 +8125,9 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, /* This symbol has an entry in the procedure linkage table. Set it up. */ - if (htab->plt_type == PLT_VXWORKS) + if (htab->plt_type == PLT_VXWORKS + && htab->elf.dynamic_sections_created + && h->dynindx != -1) { bfd_vma got_offset; const bfd_vma *plt_entry; @@ -6920,31 +8142,22 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, /* Fill in the .plt on VxWorks. */ if (info->shared) { - bfd_vma got_offset_hi = (got_offset >> 16) - + ((got_offset & 0x8000) >> 15); - bfd_put_32 (output_bfd, - plt_entry[0] | (got_offset_hi & 0xffff), + plt_entry[0] | PPC_HA (got_offset), htab->plt->contents + ent->plt.offset + 0); bfd_put_32 (output_bfd, - plt_entry[1] | (got_offset & 0xffff), + plt_entry[1] | PPC_LO (got_offset), htab->plt->contents + ent->plt.offset + 4); } else { - bfd_vma got_loc - = (got_offset - + htab->elf.hgot->root.u.def.value - + htab->elf.hgot->root.u.def.section->output_offset - + htab->elf.hgot->root.u.def.section->output_section->vma); - bfd_vma got_loc_hi = (got_loc >> 16) - + ((got_loc & 0x8000) >> 15); + bfd_vma got_loc = got_offset + SYM_VAL (htab->elf.hgot); bfd_put_32 (output_bfd, - plt_entry[0] | (got_loc_hi & 0xffff), + plt_entry[0] | PPC_HA (got_loc), htab->plt->contents + ent->plt.offset + 0); bfd_put_32 (output_bfd, - plt_entry[1] | (got_loc & 0xffff), + plt_entry[1] | PPC_LO (got_loc), htab->plt->contents + ent->plt.offset + 4); } @@ -7036,10 +8249,17 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, } else { - rela.r_offset = (htab->plt->output_section->vma - + htab->plt->output_offset + asection *splt = htab->plt; + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + splt = htab->iplt; + + rela.r_offset = (splt->output_section->vma + + splt->output_offset + ent->plt.offset); - if (htab->plt_type == PLT_OLD) + if (htab->plt_type == PLT_OLD + || !htab->elf.dynamic_sections_created + || h->dynindx == -1) { /* We don't need to fill in the .plt. The ppc dynamic linker will fill it in. */ @@ -7050,95 +8270,111 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, + htab->glink->output_section->vma + htab->glink->output_offset); bfd_put_32 (output_bfd, val, - htab->plt->contents + ent->plt.offset); + splt->contents + ent->plt.offset); } } /* Fill in the entry in the .rela.plt section. */ - rela.r_info = ELF32_R_INFO (h->dynindx, R_PPC_JMP_SLOT); rela.r_addend = 0; + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + { + BFD_ASSERT (h->type == STT_GNU_IFUNC + && h->def_regular + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak)); + rela.r_info = ELF32_R_INFO (0, R_PPC_IRELATIVE); + rela.r_addend = SYM_VAL (h); + } + else + rela.r_info = ELF32_R_INFO (h->dynindx, R_PPC_JMP_SLOT); - loc = (htab->relplt->contents - + reloc_index * sizeof (Elf32_External_Rela)); + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + loc = (htab->reliplt->contents + + (htab->reliplt->reloc_count++ + * sizeof (Elf32_External_Rela))); + else + loc = (htab->relplt->contents + + reloc_index * sizeof (Elf32_External_Rela)); bfd_elf32_swap_reloca_out (output_bfd, &rela, loc); if (!h->def_regular) { - /* Mark the symbol as undefined, rather than as defined in - the .plt section. Leave the value alone. */ + /* Mark the symbol as undefined, rather than as + defined in the .plt section. Leave the value if + there were any relocations where pointer equality + matters (this is a clue for the dynamic linker, to + make function pointer comparisons work between an + application and shared library), otherwise set it + to zero. */ 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) + if (!h->pointer_equality_needed) sym->st_value = 0; + else if (!h->ref_regular_nonweak) + { + /* This breaks function pointer comparisons, but + that is better than breaking tests for a NULL + function pointer. */ + sym->st_value = 0; + } + } + else if (h->type == STT_GNU_IFUNC + && !info->shared) + { + /* Set the value of ifunc symbols in a non-pie + executable to the glink entry. This is to avoid + text relocations. We can't do this for ifunc in + allocate_dynrelocs, as we do for normal dynamic + function symbols with plt entries, because we need + to keep the original value around for the ifunc + relocation. */ + sym->st_shndx = (_bfd_elf_section_from_bfd_section + (output_bfd, htab->glink->output_section)); + sym->st_value = (ent->glink_offset + + htab->glink->output_offset + + htab->glink->output_section->vma); } doneone = TRUE; } - if (htab->plt_type == PLT_NEW) + if (htab->plt_type == PLT_NEW + || !htab->elf.dynamic_sections_created + || h->dynindx == -1) { - bfd_vma plt; unsigned char *p; + asection *splt = htab->plt; + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + splt = htab->iplt; - plt = (ent->plt.offset - + htab->plt->output_section->vma - + htab->plt->output_offset); p = (unsigned char *) htab->glink->contents + ent->glink_offset; - if (info->shared || info->pie) - { - bfd_vma got = 0; - - if (ent->addend >= 32768) - got = (ent->addend - + ent->sec->output_section->vma - + ent->sec->output_offset); - else if (htab->elf.hgot != NULL) - got = (htab->elf.hgot->root.u.def.value - + htab->elf.hgot->root.u.def.section->output_section->vma - + htab->elf.hgot->root.u.def.section->output_offset); - - plt -= got; - - if (plt + 0x8000 < 0x10000) - { - bfd_put_32 (output_bfd, LWZ_11_30 + PPC_LO (plt), p); - p += 4; - bfd_put_32 (output_bfd, MTCTR_11, p); - p += 4; - bfd_put_32 (output_bfd, BCTR, p); - p += 4; - bfd_put_32 (output_bfd, NOP, p); - p += 4; - } - else - { - bfd_put_32 (output_bfd, ADDIS_11_30 + PPC_HA (plt), p); - p += 4; - bfd_put_32 (output_bfd, LWZ_11_11 + PPC_LO (plt), p); - p += 4; - bfd_put_32 (output_bfd, MTCTR_11, p); - p += 4; - bfd_put_32 (output_bfd, BCTR, p); - p += 4; - } - } - else + if (h == htab->tls_get_addr && !htab->no_tls_get_addr_opt) { - bfd_put_32 (output_bfd, LIS_11 + PPC_HA (plt), p); + bfd_put_32 (output_bfd, LWZ_11_3, p); p += 4; - bfd_put_32 (output_bfd, LWZ_11_11 + PPC_LO (plt), p); + bfd_put_32 (output_bfd, LWZ_12_3 + 4, p); p += 4; - bfd_put_32 (output_bfd, MTCTR_11, p); + bfd_put_32 (output_bfd, MR_0_3, p); p += 4; - bfd_put_32 (output_bfd, BCTR, p); + bfd_put_32 (output_bfd, CMPWI_11_0, p); + p += 4; + bfd_put_32 (output_bfd, ADD_3_12_2, p); + p += 4; + bfd_put_32 (output_bfd, BEQLR, p); + p += 4; + bfd_put_32 (output_bfd, MR_3_0, p); + p += 4; + bfd_put_32 (output_bfd, NOP, p); p += 4; - - /* We only need one non-PIC glink stub. */ - break; } + + write_glink_stub (ent, splt, p, info); + + if (!info->shared) + /* We only need one non-PIC glink stub. */ + break; } else break; @@ -7164,9 +8400,7 @@ ppc_elf_finish_dynamic_symbol (bfd *output_bfd, s = htab->relbss; BFD_ASSERT (s != NULL); - rela.r_offset = (h->root.u.def.value - + h->root.u.def.section->output_section->vma - + h->root.u.def.section->output_offset); + rela.r_offset = SYM_VAL (h); rela.r_info = ELF32_R_INFO (h->dynindx, R_PPC_COPY); rela.r_addend = 0; loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela); @@ -7216,7 +8450,8 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, asection *splt; struct ppc_elf_link_hash_table *htab; bfd_vma got; - bfd * dynobj; + bfd *dynobj; + bfd_boolean ret = TRUE; #ifdef DEBUG fprintf (stderr, "ppc_elf_finish_dynamic_sections called\n"); @@ -7232,9 +8467,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, got = 0; if (htab->elf.hgot != NULL) - got = (htab->elf.hgot->root.u.def.value - + htab->elf.hgot->root.u.def.section->output_section->vma - + htab->elf.hgot->root.u.def.section->output_offset); + got = SYM_VAL (htab->elf.hgot); if (htab->elf.dynamic_sections_created) { @@ -7284,6 +8517,9 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, continue; default: + if (htab->is_vxworks + && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) + break; continue; } @@ -7291,21 +8527,41 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, } } - /* Add a blrl instruction at _GLOBAL_OFFSET_TABLE_-4 so that a function can - easily find the address of the _GLOBAL_OFFSET_TABLE_. */ if (htab->got != NULL) { - unsigned char *p = htab->got->contents; - bfd_vma val; + if (htab->elf.hgot->root.u.def.section == htab->got + || htab->elf.hgot->root.u.def.section == htab->sgotplt) + { + unsigned char *p = htab->elf.hgot->root.u.def.section->contents; - p += htab->elf.hgot->root.u.def.value; - if (htab->plt_type == PLT_OLD) - bfd_put_32 (output_bfd, 0x4e800021 /* blrl */, p - 4); + p += htab->elf.hgot->root.u.def.value; + if (htab->plt_type == PLT_OLD) + { + /* Add a blrl instruction at _GLOBAL_OFFSET_TABLE_-4 + so that a function can easily find the address of + _GLOBAL_OFFSET_TABLE_. */ + BFD_ASSERT (htab->elf.hgot->root.u.def.value - 4 + < htab->elf.hgot->root.u.def.section->size); + bfd_put_32 (output_bfd, 0x4e800021, p - 4); + } - val = 0; - if (sdyn != NULL) - val = sdyn->output_section->vma + sdyn->output_offset; - bfd_put_32 (output_bfd, val, p); + if (sdyn != NULL) + { + bfd_vma val = sdyn->output_section->vma + sdyn->output_offset; + BFD_ASSERT (htab->elf.hgot->root.u.def.value + < htab->elf.hgot->root.u.def.section->size); + bfd_put_32 (output_bfd, val, p); + } + } + else + { + (*_bfd_error_handler) (_("%s not defined in linker created %s"), + htab->elf.hgot->root.root.string, + (htab->sgotplt != NULL + ? htab->sgotplt->name : htab->got->name)); + bfd_set_error (bfd_error_bad_value); + ret = FALSE; + } elf_section_data (htab->got->output_section)->this_hdr.sh_entsize = 4; } @@ -7320,15 +8576,11 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, if (!info->shared) { - bfd_vma got_value = - (htab->elf.hgot->root.u.def.section->output_section->vma - + htab->elf.hgot->root.u.def.section->output_offset - + htab->elf.hgot->root.u.def.value); - bfd_vma got_hi = (got_value >> 16) + ((got_value & 0x8000) >> 15); + bfd_vma got_value = SYM_VAL (htab->elf.hgot); - bfd_put_32 (output_bfd, plt_entry[0] | (got_hi & 0xffff), + bfd_put_32 (output_bfd, plt_entry[0] | PPC_HA (got_value), splt->contents + 0); - bfd_put_32 (output_bfd, plt_entry[1] | (got_value & 0xffff), + bfd_put_32 (output_bfd, plt_entry[1] | PPC_LO (got_value), splt->contents + 4); } else @@ -7393,7 +8645,9 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, } } - if (htab->glink != NULL && htab->glink->contents != NULL) + if (htab->glink != NULL + && htab->glink->contents != NULL + && htab->elf.dynamic_sections_created) { unsigned char *p; unsigned char *endp; @@ -7410,7 +8664,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, * bctr * * # A table of branches, one for each plt entry. - * # The idea is that the plt call stub loads ctr (and r11) with these + * # The idea is that the plt call stub loads ctr and r11 with these * # addresses, so (r11 - res_0) gives the plt index * 4. * res_0: b PLTresolve * res_1: b PLTresolve @@ -7456,6 +8710,28 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, NOP }; + /* + * Non-PIC glink code is a little simpler. + * + * # ith PLT code stub. + * lis 11,(plt+(i-1)*4)@ha + * lwz 11,(plt+(i-1)*4)@l(11) + * mtctr 11 + * bctr + * + * The branch table is the same, then comes + * + * PLTresolve: + * lis 12,(got+4)@ha + * addis 11,11,(-res_0)@ha + * lwz 0,(got+4)@l(12) # got[1] address of dl_runtime_resolve + * addi 11,11,(-res_0)@l # r11 = index * 4 + * mtctr 0 + * add 0,11,11 + * lwz 12,(got+8)@l(12) # got[2] contains the map address + * add 11,0,11 # r11 = index * 12 = reloc offset. + * bctr + */ static const unsigned int plt_resolve[] = { LIS_12, @@ -7503,7 +8779,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, + htab->glink->output_offset); /* Last comes the PLTresolve stub. */ - if (info->shared || info->pie) + if (info->shared) { bfd_vma bcl; @@ -7571,7 +8847,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, } } - return TRUE; + return ret; } #define TARGET_LITTLE_SYM bfd_elf32_powerpcle_vec @@ -7609,6 +8885,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, #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 +#define bfd_elf32_get_synthetic_symtab ppc_elf_get_synthetic_symtab #define elf_backend_object_p ppc_elf_object_p #define elf_backend_gc_mark_hook ppc_elf_gc_mark_hook @@ -7621,6 +8898,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, #define elf_backend_adjust_dynamic_symbol ppc_elf_adjust_dynamic_symbol #define elf_backend_add_symbol_hook ppc_elf_add_symbol_hook #define elf_backend_size_dynamic_sections ppc_elf_size_dynamic_sections +#define elf_backend_hash_symbol ppc_elf_hash_symbol #define elf_backend_finish_dynamic_symbol ppc_elf_finish_dynamic_symbol #define elf_backend_finish_dynamic_sections ppc_elf_finish_dynamic_sections #define elf_backend_fake_sections ppc_elf_fake_sections @@ -7636,6 +8914,7 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd, #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 +#define elf_backend_post_process_headers _bfd_elf_set_osabi #include "elf32-target.h" @@ -7722,6 +9001,8 @@ ppc_elf_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) #undef elf_backend_got_header_size #define elf_backend_got_header_size 12 +#undef bfd_elf32_get_synthetic_symtab + #undef bfd_elf32_bfd_link_hash_table_create #define bfd_elf32_bfd_link_hash_table_create \ ppc_elf_vxworks_link_hash_table_create @@ -7743,5 +9024,6 @@ ppc_elf_vxworks_final_write_processing (bfd *abfd, bfd_boolean linker) #undef elf32_bed #define elf32_bed ppc_elf_vxworks_bed +#undef elf_backend_post_process_headers #include "elf32-target.h" diff --git a/bfd/elf32-ppc.h b/bfd/elf32-ppc.h index ef1f0ac..4becb30 100644 --- a/bfd/elf32-ppc.h +++ b/bfd/elf32-ppc.h @@ -28,6 +28,6 @@ enum ppc_elf_plt_type 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 *); +asection *ppc_elf_tls_setup (bfd *, struct bfd_link_info *, int); 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 67cc059..094a8dc 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, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Carl B. Pedersen and Martin Schwidefsky. @@ -674,11 +674,13 @@ struct elf_s390_link_hash_entry #define elf_s390_hash_entry(ent) \ ((struct elf_s390_link_hash_entry *)(ent)) +/* NOTE: Keep this structure in sync with + the one declared in elf64-s390.c. */ struct elf_s390_obj_tdata { struct elf_obj_tdata root; - /* tls_type for each local got entry. */ + /* TLS type for each local got entry. */ char *local_got_tls_type; }; @@ -688,17 +690,16 @@ struct elf_s390_obj_tdata #define elf_s390_local_got_tls_type(abfd) \ (elf_s390_tdata (abfd)->local_got_tls_type) +#define is_s390_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == S390_ELF_TDATA) + static bfd_boolean elf_s390_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct elf_s390_obj_tdata), + S390_ELF_TDATA); } static bfd_boolean @@ -729,8 +730,8 @@ struct elf_s390_link_hash_table bfd_vma offset; } tls_ldm_got; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; }; /* Get the s390 ELF linker hash table from a link_info structure. */ @@ -799,7 +800,7 @@ elf_s390_link_hash_table_create (abfd) ret->sdynbss = NULL; ret->srelbss = NULL; ret->tls_ldm_got.refcount = 0; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; return &ret->elf.root; } @@ -820,18 +821,10 @@ create_got_section (dynobj, info) htab = elf_s390_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (!htab->sgot || !htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (!htab->sgot || !htab->sgotplt || !htab->srelgot) abort (); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; return TRUE; } @@ -982,8 +975,10 @@ elf_s390_check_relocs (abfd, info, sec, relocs) if (info->relocatable) return TRUE; + BFD_ASSERT (is_s390_elf (abfd)); + htab = elf_s390_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1258,7 +1253,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs) && ELF32_R_TYPE (rel->r_info) != R_390_PC32DBL && ELF32_R_TYPE (rel->r_info) != R_390_PC32) || (h != NULL - && (! info->symbolic + && (! SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS @@ -1276,46 +1271,14 @@ elf_s390_check_relocs (abfd, info, sec, relocs) this reloc. */ if (sreloc == NULL) { - const char *name; - bfd *dynobj; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - if (! CONST_STRNEQ (name, ".rela") - || strcmp (bfd_get_section_name (abfd, sec), - name + 5) != 0) - { - (*_bfd_error_handler) - (_("%B: bad relocation section name `%s\'"), - abfd, name); - } - if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - dynobj = htab->elf.dynobj; - sreloc = bfd_get_section_by_name (dynobj, name); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, 2, abfd, /*rela?*/ TRUE); + if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -1331,12 +1294,17 @@ elf_s390_check_relocs (abfd, info, sec, relocs) easily. Oh well. */ asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct elf_s390_dyn_relocs **) vpp; } @@ -1376,7 +1344,9 @@ elf_s390_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_390_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -1422,9 +1392,12 @@ elf_s390_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1590,11 +1563,9 @@ elf_s390_adjust_dynamic_symbol (info, h) || h->needs_plt) { if (h->plt.refcount <= 0 - || (! info->shared - && !h->def_dynamic - && !h->ref_dynamic - && h->root.type != bfd_link_hash_undefweak - && h->root.type != bfd_link_hash_undefined)) + || SYMBOL_CALLS_LOCAL (info, h) + || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type != bfd_link_hash_undefweak)) { /* This case can occur if we saw a PLT32 reloc in an input file, but the symbol was never referred to by a dynamic @@ -1733,9 +1704,7 @@ allocate_dynrelocs (h, inf) htab = elf_s390_hash_table (info); if (htab->elf.dynamic_sections_created - && h->plt.refcount > 0 - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak)) + && h->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. Undefined weak syms won't yet be marked as dynamic. */ @@ -1864,7 +1833,7 @@ allocate_dynrelocs (h, inf) if (info->shared) { - if (SYMBOL_REFERENCES_LOCAL (info, h)) + if (SYMBOL_CALLS_LOCAL (info, h)) { struct elf_s390_dyn_relocs **pp; @@ -2014,7 +1983,7 @@ elf_s390_size_dynamic_sections (output_bfd, info) Elf_Internal_Shdr *symtab_hdr; asection *srela; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_s390_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) @@ -2045,7 +2014,7 @@ elf_s390_size_dynamic_sections (output_bfd, info) if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = elf_s390_local_got_tls_type (ibfd); @@ -2264,8 +2233,10 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; + BFD_ASSERT (is_s390_elf (input_bfd)); + htab = elf_s390_hash_table (info); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); @@ -2386,10 +2357,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, dyn = htab->elf.dynamic_sections_created; if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) || (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular) + && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) { @@ -2559,8 +2527,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, && r_type != R_390_PC16DBL && r_type != R_390_PC32DBL && r_type != R_390_PC32) - || (h != NULL - && !SYMBOL_REFERENCES_LOCAL (info, h)))) + || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS && !info->shared && h != NULL @@ -2602,7 +2569,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, || r_type == R_390_PC32DBL || r_type == R_390_PC32 || !info->shared - || !info->symbolic + || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { outrel.r_info = ELF32_R_INFO (h->dynindx, r_type); @@ -3284,11 +3251,10 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym) The entry in the global offset table will already have been initialized in the relocate_section function. */ if (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular) + && SYMBOL_REFERENCES_LOCAL (info, h)) { + if (!h->def_regular) + return FALSE; BFD_ASSERT((h->got.offset & 1) != 0); rela.r_info = ELF32_R_INFO (0, R_390_RELATIVE); rela.r_addend = (h->root.u.def.value diff --git a/bfd/elf32-score.c b/bfd/elf32-score.c index c10eee6..a330828 100644 --- a/bfd/elf32-score.c +++ b/bfd/elf32-score.c @@ -1,6 +1,7 @@ /* 32-bit ELF support for S+core. - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by + Brain.lin (brain.lin@sunplusct.com) Mei Ligang (ligang@sunnorth.com.cn) Pei-Lin Tsai (pltsai@sunplus.com) @@ -30,10 +31,13 @@ #include "elf/common.h" #include "elf/internal.h" #include "hashtab.h" +#include "elf32-score.h" -/* Score ELF linker hash table. */ +int score3 = 0; +int score7 = 1; +/* Score ELF linker hash table. */ struct score_elf_link_hash_table { /* The main hash table. */ @@ -42,7 +46,6 @@ struct score_elf_link_hash_table /* 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; @@ -175,7 +178,7 @@ struct _score_elf_section_data #define SCORE_ELF_STUB_SECTION_NAME (".SCORE.stub") #define SCORE_FUNCTION_STUB_SIZE (16) -#define STUB_LW 0xc3bcc010 /* lw r29, [r28, -0x3ff0] */ +#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 */ @@ -198,10 +201,6 @@ struct _score_elf_section_data #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. */ @@ -216,14 +215,112 @@ static asection score_elf_scom_section; static asymbol score_elf_scom_symbol; static asymbol *score_elf_scom_symbol_ptr; +static bfd_vma +score_bfd_get_16 (bfd *abfd, const void *data) +{ + return bfd_get_16 (abfd, data); +} + +static bfd_vma +score3_bfd_getl32 (const void *p) +{ + const bfd_byte *addr = p; + unsigned long v; + + v = (unsigned long) addr[2]; + v |= (unsigned long) addr[3] << 8; + v |= (unsigned long) addr[0] << 16; + v |= (unsigned long) addr[1] << 24; + return v; +} + +static bfd_vma +score3_bfd_getl48 (const void *p) +{ + const bfd_byte *addr = p; + unsigned long long v; + + v = (unsigned long long) addr[4]; + v |= (unsigned long long) addr[5] << 8; + v |= (unsigned long long) addr[2] << 16; + v |= (unsigned long long) addr[3] << 24; + v |= (unsigned long long) addr[0] << 32; + v |= (unsigned long long) addr[1] << 40; + return v; +} + +static bfd_vma +score_bfd_get_32 (bfd *abfd, const void *data) +{ + if (/* score3 && */ abfd->xvec->byteorder == BFD_ENDIAN_LITTLE) + return score3_bfd_getl32 (data); + else + return bfd_get_32 (abfd, data); +} + +static bfd_vma +score_bfd_get_48 (bfd *abfd, const void *p) +{ + if (/* score3 && */ abfd->xvec->byteorder == BFD_ENDIAN_LITTLE) + return score3_bfd_getl48 (p); + else + return bfd_get_bits (p, 48, 1); +} + +static void +score_bfd_put_16 (bfd *abfd, bfd_vma addr, void *data) +{ + return bfd_put_16 (abfd, addr, data); +} + +static void +score3_bfd_putl32 (bfd_vma data, void *p) +{ + bfd_byte *addr = p; + addr[0] = (data >> 16) & 0xff; + addr[1] = (data >> 24) & 0xff; + addr[2] = data & 0xff; + addr[3] = (data >> 8) & 0xff; +} + +static void +score3_bfd_putl48 (bfd_vma data, void *p) +{ + bfd_byte *addr = p; + addr[0] = (data >> 32) & 0xff; + addr[1] = (data >> 40) & 0xff; + addr[2] = (data >> 16) & 0xff; + addr[3] = (data >> 24) & 0xff; + addr[4] = data & 0xff; + addr[5] = (data >> 8) & 0xff; +} + +static void +score_bfd_put_32 (bfd *abfd, bfd_vma addr, void *data) +{ + if (/* score3 && */ abfd->xvec->byteorder == BFD_ENDIAN_LITTLE) + return score3_bfd_putl32 (addr, data); + else + return bfd_put_32 (abfd, addr, data); +} + +static void +score_bfd_put_48 (bfd *abfd, bfd_vma val, void *p) +{ + if (/* score3 && */ abfd->xvec->byteorder == BFD_ENDIAN_LITTLE) + return score3_bfd_putl48 (val, p); + else + return bfd_put_bits (val, p, 48, 1); +} + 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) + 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; @@ -231,20 +328,20 @@ score_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, 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) + 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_value = score_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); + addend = score_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) @@ -252,10 +349,10 @@ score_elf_lo16_reloc (bfd *abfd, 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); + score_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); + score_bfd_put_32 (abfd, addend, (bfd_byte *) data + reloc_entry->address); return bfd_reloc_ok; } @@ -284,17 +381,17 @@ score_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp) else { for (i = 0; i < count; i++, sym++) - { - const char *name; + { + 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; - } - } + 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) @@ -313,13 +410,12 @@ score_elf_assign_gp (bfd *output_bfd, bfd_vma *pgp) 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) + asymbol *symbol, + bfd_boolean relocatable, + char **error_message, + bfd_vma *pgp) { if (bfd_is_und_section (symbol->section) && ! relocatable) @@ -331,20 +427,20 @@ score_elf_final_gp (bfd *output_bfd, *pgp = _bfd_get_gp_value (output_bfd); if (*pgp == 0 && (! relocatable - || (symbol->flags & BSF_SECTION_SYM) != 0)) + || (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); - } + { + /* 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; - } + { + *error_message = + (char *) _("GP relative relocation when _gp not defined"); + return bfd_reloc_dangerous; + } } return bfd_reloc_ok; @@ -352,12 +448,12 @@ score_elf_final_gp (bfd *output_bfd, 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) + asymbol *symbol, + arelent *reloc_entry, + asection *input_section, + bfd_boolean relocateable, + void * data, + bfd_vma gp ATTRIBUTE_UNUSED) { bfd_vma relocation; unsigned long insn; @@ -372,13 +468,13 @@ score_elf_gprel15_with_gp (bfd *abfd, if (reloc_entry->address > input_section->size) return bfd_reloc_outofrange; - insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address); + insn = score_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); + score_bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address); if (relocateable) reloc_entry->address += input_section->output_offset; @@ -387,8 +483,8 @@ score_elf_gprel15_with_gp (bfd *abfd, 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) + asection *input_section, bfd_boolean relocatable, + void *data, bfd_vma gp) { bfd_vma relocation; bfd_vma val; @@ -408,7 +504,7 @@ gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry, val = reloc_entry->addend; if (reloc_entry->howto->partial_inplace) - val += bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address); + val += score_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 @@ -418,7 +514,7 @@ gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry, val += relocation - gp; if (reloc_entry->howto->partial_inplace) - bfd_put_32 (abfd, val, (bfd_byte *) data + reloc_entry->address); + score_bfd_put_32 (abfd, val, (bfd_byte *) data + reloc_entry->address); else reloc_entry->addend = val; @@ -430,24 +526,24 @@ gprel32_with_gp (bfd *abfd, asymbol *symbol, arelent *reloc_entry, 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) + 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 + 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; } - if (output_bfd != (bfd *) NULL) + if (output_bfd != NULL) relocateable = TRUE; else { @@ -468,8 +564,8 @@ score_elf_gprel15_reloc (bfd *abfd, 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) + void *data, asection *input_section, bfd *output_bfd, + char **error_message) { bfd_boolean relocatable; bfd_reloc_status_type ret; @@ -481,7 +577,7 @@ score_elf_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, && (symbol->flags & BSF_LOCAL) != 0) { *error_message = (char *) - _("32bits gp relative relocation occurs for an external symbol"); + _("32bits gp relative relocation occurs for an external symbol"); return bfd_reloc_outofrange; } @@ -497,48 +593,47 @@ score_elf_gprel32_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, if (ret != bfd_reloc_ok) return ret; - gp = 0; /* FIXME. */ + gp = 0; return gprel32_with_gp (abfd, symbol, reloc_entry, input_section, - relocatable, data, gp); + 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) + 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); + input_section, output_bfd, + error_message); return score_elf_hi16_reloc (abfd, reloc_entry, symbol, data, - input_section, output_bfd, error_message); + 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) + 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_value = score_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); + addend = score_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) @@ -549,10 +644,10 @@ score_elf_got_lo16_reloc (bfd *abfd, 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); + score_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); + score_bfd_put_32 (abfd, addend, (bfd_byte *) data + reloc_entry->address); return bfd_reloc_ok; } @@ -581,7 +676,7 @@ static reloc_howto_type elf32_score_howto_table[] = FALSE, /* pc_relative */ 1, /* bitpos */ complain_overflow_dont,/* complain_on_overflow */ - score_elf_hi16_reloc, /* special_function */ + score_elf_hi16_reloc, /* special_function */ "R_SCORE_HI16", /* name */ TRUE, /* partial_inplace */ 0x37fff, /* src_mask */ @@ -603,19 +698,19 @@ static reloc_howto_type elf32_score_howto_table[] = 0x37fff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* R_SCORE_DUMMY1 */ - HOWTO (R_SCORE_DUMMY1, /* type */ - 0, /* rightshift */ + /* R_SCORE_BCMP */ + HOWTO (R_SCORE_BCMP, /* type */ + 1, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ 16, /* bitsize */ - FALSE, /* pc_relative */ + TRUE, /* 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 */ + "R_SCORE_BCMP", /* name */ + FALSE, /* partial_inplace */ + 0x03e00381, /* src_mask */ + 0x03e00381, /* dst_mask */ FALSE), /* pcrel_offset */ /*R_SCORE_24 */ @@ -667,15 +762,15 @@ static reloc_howto_type elf32_score_howto_table[] = HOWTO (R_SCORE16_PC8, /* type */ 1, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ - 8, /* bitsize */ + 9, /* 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 */ + 0x000001ff, /* src_mask */ + 0x000001ff, /* dst_mask */ FALSE), /* pcrel_offset */ /* 32 bit absolute */ @@ -830,18 +925,18 @@ static reloc_howto_type elf32_score_howto_table[] = /* 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 */ + 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 */ @@ -851,12 +946,42 @@ static reloc_howto_type elf32_score_howto_table[] = FALSE, /* pc_relative */ 1, /* bitpos */ complain_overflow_dont,/* complain_on_overflow */ - score_elf_hi16_reloc, /* special_function */ + score_elf_hi16_reloc, /* special_function */ "R_SCORE_DUMMY_HI16", /* name */ TRUE, /* partial_inplace */ 0x37fff, /* src_mask */ 0x37fff, /* dst_mask */ FALSE), /* pcrel_offset */ + + /* R_SCORE_IMM30 */ + HOWTO (R_SCORE_IMM30, /* type */ + 2, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 30, /* bitsize */ + FALSE, /* pc_relative */ + 7, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_SCORE_IMM30", /* name */ + FALSE, /* partial_inplace */ + 0x7f7fff7f80LL, /* src_mask */ + 0x7f7fff7f80LL, /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* R_SCORE_IMM32 */ + HOWTO (R_SCORE_IMM32, /* type */ + 0, /* rightshift */ + 2, /* size (0 = byte, 1 = short, 2 = long) */ + 32, /* bitsize */ + FALSE, /* pc_relative */ + 5, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_SCORE_IMM32", /* name */ + FALSE, /* partial_inplace */ + 0x7f7fff7fe0LL, /* src_mask */ + 0x7f7fff7fe0LL, /* dst_mask */ + FALSE), /* pcrel_offset */ }; struct score_reloc_map @@ -870,7 +995,7 @@ 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_BCMP, R_SCORE_BCMP}, {BFD_RELOC_SCORE_JMP, R_SCORE_24}, {BFD_RELOC_SCORE_BRANCH, R_SCORE_PC19}, {BFD_RELOC_SCORE16_JMP, R_SCORE16_11}, @@ -887,12 +1012,13 @@ static const struct score_reloc_map elf32_score_reloc_map[] = {BFD_RELOC_GPREL32, R_SCORE_GPREL32}, {BFD_RELOC_32_PCREL, R_SCORE_REL32}, {BFD_RELOC_SCORE_DUMMY_HI16, R_SCORE_DUMMY_HI16}, + {BFD_RELOC_SCORE_IMM30, R_SCORE_IMM30}, + {BFD_RELOC_SCORE_IMM32, R_SCORE_IMM32}, }; /* 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_) { @@ -910,14 +1036,13 @@ score_elf_got_entry_eq (const void *entry1, const void *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); + : 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) { @@ -937,7 +1062,7 @@ score_elf_sort_hash_table_f (struct score_elf_link_hash_entry *h, void *data) if (h->root.got.offset == 2) { if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx) - hsd->low = (struct elf_link_hash_entry *) h; + hsd->low = (struct elf_link_hash_entry *) h; h->root.dynindx = hsd->max_unref_got_dynindx++; } else if (h->root.got.offset != 1) @@ -963,7 +1088,6 @@ score_elf_got_section (bfd *abfd, bfd_boolean maybe_excluded) /* 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) { @@ -985,12 +1109,11 @@ score_elf_got_info (bfd *abfd, asection **sgotp) 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 + s3_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) + unsigned long max_local) { struct score_elf_hash_sort_data hsd; struct score_got_info *g; @@ -1013,15 +1136,15 @@ score_elf_sort_hash_table (struct bfd_link_info *info, - (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); + 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); + <= elf_hash_table (info)->dynsymcount); /* Now we know which dynamic symbol has the lowest dynamic symbol table index in the GOT. */ @@ -1031,11 +1154,10 @@ score_elf_sort_hash_table (struct bfd_link_info *info, } /* 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 bfd_hash_table *table, + const char *string) { struct score_elf_link_hash_entry *ret = (struct score_elf_link_hash_entry *)entry; @@ -1062,16 +1184,15 @@ score_elf_link_hash_newfunc (struct bfd_hash_entry *entry, /* 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) + const Elf_Internal_Rela *relocation, + const Elf_Internal_Rela *relend) { while (relocation < relend) { if (ELF32_R_TYPE (relocation->r_info) == r_type) - return relocation; + return relocation; ++relocation; } @@ -1083,7 +1204,6 @@ score_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type, /* 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) { @@ -1097,12 +1217,11 @@ score_elf_sort_dynamic_relocs (const void *arg1, const void *arg2) } /* 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) + const Elf_Internal_Rela *relocation, + asection **local_sections, + bfd_boolean check_forced) { unsigned long r_symndx; Elf_Internal_Shdr *symtab_hdr; @@ -1122,20 +1241,19 @@ score_elf_local_relocation_p (bfd *input_bfd, { /* 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]; + 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; + || 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 TRUE; } return FALSE; } /* Returns the dynamic relocation section for DYNOBJ. */ - static asection * score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p) { @@ -1153,11 +1271,11 @@ score_elf_rel_dyn_section (bfd *dynobj, bfd_boolean create_p) | SEC_LINKER_CREATED | SEC_READONLY)); if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, - SCORE_ELF_LOG_FILE_ALIGN (dynobj))) - return NULL; + || ! bfd_set_section_alignment (dynobj, sreloc, + SCORE_ELF_LOG_FILE_ALIGN (dynobj))) + return NULL; } - return sreloc; + return sreloc; } static void @@ -1181,14 +1299,13 @@ score_elf_allocate_dynamic_relocations (bfd *abfd, unsigned int n) 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) + 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; @@ -1218,8 +1335,8 @@ score_elf_create_dynamic_relocation (bfd *output_bfd, 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. */ + 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; } @@ -1229,14 +1346,14 @@ score_elf_create_dynamic_relocation (bfd *output_bfd, if (h != NULL && (! info->symbolic || !h->root.def_regular) /* h->root.dynindx may be -1 if this symbol was marked to - become local. */ + 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. */ + /* ??? 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 @@ -1274,11 +1391,11 @@ score_elf_create_dynamic_relocation (bfd *output_bfd, /* 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); + + input_section->output_offset); outrel[1].r_offset += (input_section->output_section->vma - + input_section->output_offset); + + input_section->output_offset); outrel[2].r_offset += (input_section->output_section->vma - + input_section->output_offset); + + 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 @@ -1300,7 +1417,7 @@ score_elf_create_dynamic_relocation (bfd *output_bfd, static bfd_boolean score_elf_create_got_section (bfd *abfd, struct bfd_link_info *info, - bfd_boolean maybe_exclude) + bfd_boolean maybe_exclude) { flagword flags; asection *s; @@ -1314,7 +1431,7 @@ score_elf_create_got_section (bfd *abfd, if (s) { if (! maybe_exclude) - s->flags &= ~SEC_EXCLUDE; + s->flags &= ~SEC_EXCLUDE; return TRUE; } @@ -1335,8 +1452,8 @@ score_elf_create_got_section (bfd *abfd, 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))) + (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; @@ -1360,7 +1477,7 @@ score_elf_create_got_section (bfd *abfd, g->next = NULL; g->got_entries = htab_try_create (1, score_elf_got_entry_hash, - score_elf_got_entry_eq, NULL); + score_elf_got_entry_eq, NULL); if (g->got_entries == NULL) return FALSE; score_elf_section_data (s)->u.got_info = g; @@ -1370,7 +1487,6 @@ score_elf_create_got_section (bfd *abfd, } /* Calculate the %high function. */ - static bfd_vma score_elf_high (bfd_vma value) { @@ -1379,15 +1495,14 @@ score_elf_high (bfd_vma value) /* 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_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; @@ -1415,22 +1530,21 @@ score_elf_create_local_got_entry (bfd *abfd, (*loc)->gotidx = -1; /* We didn't allocate enough space in the GOT. */ (*_bfd_error_handler) - (_("not enough GOT space for local GOT entries")); + (_("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)); + score_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) + bfd_vma value, bfd_boolean external) { asection *sgot; struct score_got_info *g; @@ -1439,16 +1553,16 @@ score_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 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. */ + 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); + R_SCORE_GOT15); if (entry) return entry->gotidx; else @@ -1456,9 +1570,9 @@ score_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, } static void -_bfd_score_elf_hide_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *entry, - bfd_boolean force_local) +s3_bfd_score_elf_hide_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *entry, + bfd_boolean force_local) { bfd *dynobj; asection *got; @@ -1475,55 +1589,55 @@ _bfd_score_elf_hide_symbol (struct bfd_link_info *info, { got = score_elf_got_section (dynobj, FALSE); if (got == NULL) - return; + 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--; - } - } + { + 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++; + /* 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--; - } + { + /* 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); @@ -1532,12 +1646,11 @@ _bfd_score_elf_hide_symbol (struct bfd_link_info *info, /* 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, + bfd *abfd, struct bfd_link_info *info, - struct score_got_info *g) + struct score_got_info *g) { struct score_got_entry entry, **loc; @@ -1545,14 +1658,14 @@ score_elf_record_global_got_symbol (struct elf_link_hash_entry *h, 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; - } + { + case STV_INTERNAL: + case STV_HIDDEN: + s3_bfd_score_elf_hide_symbol (info, h, TRUE); + break; + } if (!bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; + return FALSE; } entry.abfd = abfd; @@ -1587,12 +1700,11 @@ score_elf_record_global_got_symbol (struct elf_link_hash_entry *h, /* 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_info *g) { struct score_got_entry entry, **loc; @@ -1618,11 +1730,10 @@ score_elf_record_local_got_symbol (bfd *abfd, /* 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) + bfd_vma value, unsigned long r_symndx, + struct score_elf_link_hash_entry *h, int r_type) { asection *sgot; struct score_got_info *g; @@ -1631,7 +1742,7 @@ score_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, 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); + r_symndx, h, r_type); if (!entry) return MINUS_ONE; @@ -1665,10 +1776,9 @@ score_elf_global_got_index (bfd *abfd, struct elf_link_hash_entry *h) } /* 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) + bfd *input_bfd ATTRIBUTE_UNUSED, bfd_vma index) { asection *sgot; bfd_vma gp; @@ -1697,30 +1807,30 @@ score_elf_resolve_final_got_entry (void **entryp, void *p) 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; + || 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; + 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. */ + 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; - } + { + 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. */ + either too early or too late for that at this point. */ } return 1; @@ -1737,19 +1847,18 @@ score_elf_resolve_final_got_entries (struct score_got_info *g) got_entries = g->got_entries; htab_traverse (got_entries, - score_elf_resolve_final_got_entry, - &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_byte *address, + reloc_howto_type *howto, + bfd_signed_vma increment) { bfd_signed_vma addend; bfd_vma contents; @@ -1757,7 +1866,7 @@ score_elf_add_to_rel (bfd *abfd, unsigned long r_type = howto->type; unsigned long hi16_addend, hi16_offset, hi16_value, uvalue; - contents = bfd_get_32 (abfd, address); + contents = score_bfd_get_32 (abfd, address); /* Get the (signed) value from the instruction. */ addend = contents & howto->src_mask; if (addend & ((howto->src_mask + 1) >> 1)) @@ -1778,12 +1887,12 @@ score_elf_add_to_rel (bfd *abfd, contents = (contents & ~howto-> src_mask) | (((offset << 6) & howto->src_mask) & 0x3ff0000) | (offset & 0x3ff); - bfd_put_32 (abfd, contents, address); + score_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_addend = score_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); @@ -1791,10 +1900,10 @@ score_elf_add_to_rel (bfd *abfd, 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); + score_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); + score_bfd_put_32 (abfd, contents, address); break; case R_SCORE_24: offset = @@ -1803,49 +1912,78 @@ score_elf_add_to_rel (bfd *abfd, contents = (contents & ~howto-> src_mask) | (((offset << 1) & howto->src_mask) & 0x3ff0000) | (offset & 0x7fff); - bfd_put_32 (abfd, contents, address); + score_bfd_put_32 (abfd, contents, address); break; + case R_SCORE16_11: - contents = bfd_get_16 (abfd, address); + contents = score_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); + score_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 = score_bfd_get_16 (abfd, address); + offset = (contents & howto->src_mask) + ((increment >> 1) & 0x1ff); + contents = (contents & (~howto->src_mask)) | (offset & howto->src_mask); + score_bfd_put_16 (abfd, contents, address); + + break; + + case R_SCORE_BCMP: + contents = score_bfd_get_32 (abfd, address); + offset = (contents & howto->src_mask); + offset <<= howto->rightshift; + offset += increment; + offset >>= howto->rightshift; + contents = (contents & (~howto->src_mask)) | (offset & howto->src_mask); + score_bfd_put_32 (abfd, contents, address); + break; + + case R_SCORE_IMM30: + contents = score_bfd_get_48 (abfd, address); + offset = (contents & howto->src_mask); + offset <<= howto->rightshift; + offset += increment; + offset >>= howto->rightshift; contents = (contents & (~howto->src_mask)) | (offset & howto->src_mask); - bfd_put_16 (abfd, contents, address); + score_bfd_put_48 (abfd, contents, address); + break; + case R_SCORE_IMM32: + contents = score_bfd_get_48 (abfd, address); + offset = (contents & howto->src_mask); + offset += increment; + contents = (contents & (~howto->src_mask)) | (offset & howto->src_mask); + score_bfd_put_48 (abfd, contents, address); break; + default: addend += increment; contents = (contents & ~howto->dst_mask) | (addend & howto->dst_mask); - bfd_put_32 (abfd, contents, address); + score_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 *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; @@ -1868,13 +2006,14 @@ score_elf_final_link_relocate (reloc_howto_type *howto, 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) + if (bh != 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); @@ -1883,7 +2022,7 @@ score_elf_final_link_relocate (reloc_howto_type *howto, bfd_vma lo = -1; /* Find the GP-relative section with the lowest offset. */ - for (o = output_bfd->sections; o != (asection *) NULL; o = o->next) + for (o = output_bfd->sections; o != NULL; o = o->next) if (o->vma < lo) lo = o->vma; /* And calculate GP relative to that. */ @@ -1914,17 +2053,22 @@ score_elf_final_link_relocate (reloc_howto_type *howto, 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); - } + { + bfd_vma tmp = 0; + tmp = score_bfd_get_32 (input_bfd, contents + lo16_rel->r_offset); + lo_value = (((tmp >> 16) & 0x3) << 14) | ((tmp & 0x7fff) >> 1); + } addend = lo_value; } - else + /* For score3 R_SCORE_ABS32. */ + else if (r_type == R_SCORE_ABS32 || r_type == R_SCORE_REL32) { addend = (bfd_get_32 (input_bfd, hit_data) >> howto->bitpos) & howto->src_mask; } + else + { + addend = (score_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. */ @@ -1946,26 +2090,26 @@ score_elf_final_link_relocate (reloc_howto_type *howto, 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); + score_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. */ - ; - } + /* 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, + 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; + 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); + output_bfd, input_bfd, g); break; case R_SCORE_HI16: @@ -1990,30 +2134,35 @@ score_elf_final_link_relocate (reloc_howto_type *howto, 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 + || (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; - } + value = addend; + if (!score_elf_create_dynamic_relocation (output_bfd, info, rel, h, + symbol, &value, + input_section)) + return bfd_reloc_undefined; + } + else if (r_symndx == 0) + /* r_symndx will be zero only for relocs against symbols + from removed linkonce sections, or sections discarded by + a linker script. */ + value = 0; else - { - if (r_type != R_SCORE_REL32) - value = symbol + addend; - else - value = addend; - } + { + 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; @@ -2022,22 +2171,71 @@ score_elf_final_link_relocate (reloc_howto_type *howto, value += addend; if ((long)value > 0x7fff || (long)value < -0x8000) return bfd_reloc_overflow; - bfd_put_16 (input_bfd, value, hit_data); + score_bfd_put_16 (input_bfd, value, hit_data); return bfd_reloc_ok; case R_SCORE_24: - addend = bfd_get_32 (input_bfd, hit_data); + addend = score_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; + abs_value = abs (value - rel_addr); + if ((abs_value & 0xfe000000) != 0) + return bfd_reloc_overflow; addend = (addend & ~howto->src_mask) | (((value << 1) & howto->src_mask) & 0x3ff0000) | (value & 0x7fff); - bfd_put_32 (input_bfd, addend, hit_data); + score_bfd_put_32 (input_bfd, addend, hit_data); return bfd_reloc_ok; + /* signed imm32. */ + case R_SCORE_IMM30: + { + int not_word_align_p = 0; + bfd_vma imm_offset = 0; + addend = score_bfd_get_48 (input_bfd, hit_data); + imm_offset = ((addend >> 7) & 0xff) + | (((addend >> 16) & 0x7fff) << 8) + | (((addend >> 32) & 0x7f) << 23); + imm_offset <<= howto->rightshift; + value += imm_offset; + value &= 0xffffffff; + + /* Check lw48/sw48 rd, value/label word align. */ + if ((value & 0x3) != 0) + not_word_align_p = 1; + + value >>= howto->rightshift; + addend = (addend & ~howto->src_mask) + | (((value & 0xff) >> 0) << 7) + | (((value & 0x7fff00) >> 8) << 16) + | (((value & 0x3f800000) >> 23) << 32); + score_bfd_put_48 (input_bfd, addend, hit_data); + if (not_word_align_p) + return bfd_reloc_other; + else + return bfd_reloc_ok; + } + + case R_SCORE_IMM32: + { + bfd_vma imm_offset = 0; + addend = score_bfd_get_48 (input_bfd, hit_data); + imm_offset = ((addend >> 5) & 0x3ff) + | (((addend >> 16) & 0x7fff) << 10) + | (((addend >> 32) & 0x7f) << 25); + value += imm_offset; + value &= 0xffffffff; + addend = (addend & ~howto->src_mask) + | ((value & 0x3ff) << 5) + | (((value >> 10) & 0x7fff) << 16) + | (((value >> 25) & 0x7f) << 32); + score_bfd_put_48 (input_bfd, addend, hit_data); + return bfd_reloc_ok; + } + case R_SCORE_PC19: - addend = bfd_get_32 (input_bfd, hit_data); + addend = score_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; @@ -2049,59 +2247,79 @@ score_elf_final_link_relocate (reloc_howto_type *howto, 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); + score_bfd_put_32 (input_bfd, addend, hit_data); return bfd_reloc_ok; case R_SCORE16_11: - addend = bfd_get_16 (input_bfd, hit_data); + addend = score_bfd_get_16 (input_bfd, hit_data); offset = addend & howto->src_mask; if ((offset & 0x800) != 0) /* Offset is negative. */ offset |= 0xfffff000; value += offset; + abs_value = abs (value - rel_addr); + if ((abs_value & 0xfffff000) != 0) + return bfd_reloc_overflow; addend = (addend & ~howto->src_mask) | (value & howto->src_mask); - bfd_put_16 (input_bfd, addend, hit_data); + score_bfd_put_16 (input_bfd, addend, hit_data); return bfd_reloc_ok; case R_SCORE16_PC8: - addend = bfd_get_16 (input_bfd, hit_data); + addend = score_bfd_get_16 (input_bfd, hit_data); offset = (addend & howto->src_mask) << 1; - if ((offset & 0x100) != 0) /* Offset is negative. */ + if ((offset & 0x200) != 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)) + if (((value & 0xfffffe00) != 0) && ((value & 0xfffffe00) != 0xfffffe00)) return bfd_reloc_overflow; value >>= 1; addend = (addend & ~howto->src_mask) | (value & howto->src_mask); - bfd_put_16 (input_bfd, addend, hit_data); + score_bfd_put_16 (input_bfd, addend, hit_data); + return bfd_reloc_ok; + + case R_SCORE_BCMP: + addend = score_bfd_get_32 (input_bfd, hit_data); + offset = (addend & howto->src_mask) << howto->rightshift; + if ((offset & 0x200) != 0) /* Offset is negative. */ + offset |= 0xfffffe00; + value = value - rel_addr + offset; + /* Sign bit + exceed 9 bit. */ + if (((value & 0xfffffe00) != 0) && ((value & 0xfffffe00) != 0xfffffe00)) + return bfd_reloc_overflow; + value >>= howto->rightshift; + addend = (addend & ~howto->src_mask) + | (value & 0x1) + | (((value >> 1) & 0x7) << 7) + | (((value >> 4) & 0x1f) << 21); + score_bfd_put_32 (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_addend = score_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); + addend = score_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; + uvalue = value + offset; else - uvalue = offset + gp - rel_addr + 4; + 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); + score_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); + score_bfd_put_32 (input_bfd, value, hit_data); return bfd_reloc_ok; case R_SCORE_GP15: - addend = bfd_get_32 (input_bfd, hit_data); + addend = score_bfd_get_32 (input_bfd, hit_data); offset = addend & 0x7fff; if ((offset & 0x4000) == 0x4000) offset |= 0xffffc000; @@ -2109,53 +2327,53 @@ score_elf_final_link_relocate (reloc_howto_type *howto, 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); + score_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; + { + bfd_boolean forced; - /* The special case is when the symbol is forced to be local. We need the + /* 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); - } + 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; - } + { + value = g; + } if ((long) value > 0x3fff || (long) value < -0x4000) return bfd_reloc_overflow; - addend = bfd_get_32 (input_bfd, hit_data); + addend = score_bfd_get_32 (input_bfd, hit_data); value = (addend & ~howto->dst_mask) | (value & howto->dst_mask); - bfd_put_32 (input_bfd, value, hit_data); + score_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); + score_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); + addend = score_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 = (addend & (~(howto->dst_mask))) | ((value & 0x3fff) << 1) | (((value >> 14) & 0x3) << 16); - bfd_put_32 (input_bfd, value, hit_data); + score_bfd_put_32 (input_bfd, value, hit_data); return bfd_reloc_ok; case R_SCORE_DUMMY_HI16: @@ -2172,32 +2390,30 @@ score_elf_final_link_relocate (reloc_howto_type *howto, } /* Score backend functions. */ - static void -_bfd_score_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, - arelent *bfd_reloc, - Elf_Internal_Rela *elf_reloc) +s3_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)) + if (r_type >= ARRAY_SIZE (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) +s3_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; @@ -2214,19 +2430,19 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, { 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; - } + { + 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; + return FALSE; } symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; @@ -2249,7 +2465,7 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, 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); + s3_bfd_score_info_to_howto (input_bfd, &bfd_reloc, (Elf_Internal_Rela *) rel); howto = bfd_reloc.howto; h = NULL; @@ -2261,13 +2477,13 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, sym = local_syms + r_symndx; sec = local_sections[r_symndx]; relocation = (sec->output_section->vma - + sec->output_offset - + sym->st_value); + + 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) + && (sec->flags & SEC_MERGE) + && ELF_ST_TYPE (sym->st_info) == STT_SECTION) { asection *msec; bfd_vma addend, value; @@ -2277,9 +2493,9 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, case R_SCORE_HI16: break; case R_SCORE_LO16: - hi16_addend = bfd_get_32 (input_bfd, contents + rel->r_offset - 4); + hi16_addend = score_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); + value = score_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; @@ -2290,14 +2506,65 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, 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); + score_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); + score_bfd_put_32 (input_bfd, value, contents + rel->r_offset); break; + + case R_SCORE_IMM32: + { + value = score_bfd_get_48 (input_bfd, contents + rel->r_offset); + addend = ((value >> 5) & 0x3ff) + | (((value >> 16) & 0x7fff) << 10) + | (((value >> 32) & 0x7f) << 25); + msec = sec; + addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend); + addend -= relocation; + addend += msec->output_section->vma + msec->output_offset; + addend &= 0xffffffff; + value = (value & ~howto->src_mask) + | ((addend & 0x3ff) << 5) + | (((addend >> 10) & 0x7fff) << 16) + | (((addend >> 25) & 0x7f) << 32); + score_bfd_put_48 (input_bfd, value, contents + rel->r_offset); + break; + } + + case R_SCORE_IMM30: + { + int not_word_align_p = 0; + value = score_bfd_get_48 (input_bfd, contents + rel->r_offset); + addend = ((value >> 7) & 0xff) + | (((value >> 16) & 0x7fff) << 8) + | (((value >> 32) & 0x7f) << 23); + addend <<= howto->rightshift; + msec = sec; + addend = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, addend); + addend -= relocation; + addend += msec->output_section->vma + msec->output_offset; + addend &= 0xffffffff; + + /* Check lw48/sw48 rd, value/label word align. */ + if ((addend & 0x3) != 0) + not_word_align_p = 1; + + addend >>= howto->rightshift; + value = (value & ~howto->src_mask) + | (((addend & 0xff) >> 0) << 7) + | (((addend & 0x7fff00) >> 8) << 16) + | (((addend & 0x3f800000) >> 23) << 32); + score_bfd_put_48 (input_bfd, value, contents + rel->r_offset); + + if (not_word_align_p) + return bfd_reloc_other; + else + break; + } + case R_SCORE_GOT_LO16: - value = bfd_get_32 (input_bfd, contents + rel->r_offset); + value = score_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; @@ -2305,9 +2572,11 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, value = (value & (~(howto->dst_mask))) | ((addend & 0x3fff) << 1) | (((addend >> 14) & 0x3) << 16); - bfd_put_32 (input_bfd, value, contents + rel->r_offset); + score_bfd_put_32 (input_bfd, value, contents + rel->r_offset); break; - default: + + case R_SCORE_ABS32: + case R_SCORE_REL32: value = bfd_get_32 (input_bfd, contents + rel->r_offset); /* Get the (signed) value from the instruction. */ addend = value & howto->src_mask; @@ -2325,91 +2594,110 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, value = (value & ~howto->dst_mask) | (addend & howto->dst_mask); bfd_put_32 (input_bfd, value, contents + rel->r_offset); break; + + default: + value = score_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); + score_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 + /* 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 s3_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; - } + 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; - } + { + /* 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) { @@ -2417,17 +2705,25 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, 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); + 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]; + score_elf_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. */ 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, + ELF_ST_TYPE ((unsigned int)sym->st_info)), h, local_sections, gp_disp_p); if (r != bfd_reloc_ok) @@ -2464,6 +2760,11 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, msg = _("internal error: dangerous error"); goto common_error; + /* Use bfd_reloc_other to check lw48, sw48 word align. */ + case bfd_reloc_other: + msg = _("address not word align"); + goto common_error; + default: msg = _("internal error: unknown error"); /* fall through */ @@ -2482,12 +2783,11 @@ _bfd_score_elf_relocate_section (bfd *output_bfd, /* 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) +s3_bfd_score_elf_check_relocs (bfd *abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { const char *name; bfd *dynobj; @@ -2542,9 +2842,9 @@ _bfd_score_elf_check_relocs (bfd *abfd, 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); @@ -2588,90 +2888,90 @@ _bfd_score_elf_check_relocs (bfd *abfd, if (!h && (r_type == R_SCORE_GOT_LO16)) { - if (! score_elf_record_local_got_symbol (abfd, r_symndx, rel->r_addend, g)) - return FALSE; + 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 + 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; - } + 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_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; - } + 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 + 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 + 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, + 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; + 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. */ @@ -2693,32 +2993,32 @@ _bfd_score_elf_check_relocs (bfd *abfd, /* 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; + { + 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; - } + 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) +s3_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) { @@ -2737,7 +3037,7 @@ _bfd_score_elf_add_symbol_hook (bfd *abfd, } static void -_bfd_score_elf_symbol_processing (bfd *abfd, asymbol *asym) +s3_bfd_score_elf_symbol_processing (bfd *abfd, asymbol *asym) { elf_symbol_type *elfsym; @@ -2768,12 +3068,12 @@ _bfd_score_elf_symbol_processing (bfd *abfd, asymbol *asym) } } -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) +static int +s3_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 @@ -2781,13 +3081,13 @@ _bfd_score_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNU if (sym->st_shndx == SHN_COMMON && strcmp (input_sec->name, ".scommon") == 0) sym->st_shndx = SHN_SCORE_SCOMMON; - return TRUE; + return 1; } static bfd_boolean -_bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, - asection *sec, - int *retval) +s3_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) { @@ -2802,10 +3102,9 @@ _bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, 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) +s3_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; @@ -2891,10 +3190,9 @@ _bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info, /* 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) +s3_bfd_score_elf_always_size_sections (bfd *output_bfd, + struct bfd_link_info *info) { bfd *dynobj; asection *s; @@ -2920,14 +3218,14 @@ _bfd_score_elf_always_size_sections (bfd *output_bfd, 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); - } + 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 @@ -2969,9 +3267,8 @@ _bfd_score_elf_always_size_sections (bfd *output_bfd, } /* Set the sizes of the dynamic sections. */ - static bfd_boolean -_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) +s3_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { bfd *dynobj; asection *s; @@ -3048,10 +3345,10 @@ _bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf } 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. */ + /* s3_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) { @@ -3077,37 +3374,37 @@ _bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf 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. */ + values later, in s3_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; + return FALSE; if (reltext) - info->flags |= DF_TEXTREL; + 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_TEXTREL, 0)) + return FALSE; + } if (! SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0)) - return FALSE; + 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_REL, 0)) + return FALSE; - if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 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_RELENT, 0)) + return FALSE; + } if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_BASE_ADDRESS, 0)) return FALSE; @@ -3125,14 +3422,14 @@ _bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf return FALSE; if (!SCORE_ELF_ADD_DYNAMIC_ENTRY (info, DT_SCORE_HIPAGENO, 0)) - return FALSE; + return FALSE; } return TRUE; } static bfd_boolean -_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) +s3_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; @@ -3176,7 +3473,7 @@ _bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) 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))) + (bfd_vma) 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh))) return FALSE; h = (struct elf_link_hash_entry *)bh; @@ -3194,12 +3491,11 @@ _bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) /* 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) +s3_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; @@ -3221,24 +3517,24 @@ _bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd, /* FIXME: Can h->dynindex be more than 64K? */ if (h->dynindx & 0xffff0000) - return FALSE; + 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); + score_bfd_put_32 (output_bfd, STUB_LW, stub); + score_bfd_put_32 (output_bfd, STUB_MOVE, stub + 4); + score_bfd_put_32 (output_bfd, STUB_LI16 | (h->dynindx << 1), stub + 8); + score_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. */ + 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. */ + 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); } @@ -3259,7 +3555,7 @@ _bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd, value = sym->st_value; offset = score_elf_global_got_index (dynobj, h); - bfd_put_32 (output_bfd, value, sgot->contents + offset); + score_bfd_put_32 (output_bfd, value, sgot->contents + offset); } /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ @@ -3283,10 +3579,9 @@ _bfd_score_elf_finish_dynamic_symbol (bfd *output_bfd, } /* Finish up the dynamic sections. */ - static bfd_boolean -_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, - struct bfd_link_info *info) +s3_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) { bfd *dynobj; asection *sdyn; @@ -3316,88 +3611,88 @@ _bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, 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); - } + 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 @@ -3405,8 +3700,8 @@ _bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, 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)); + score_bfd_put_32 (output_bfd, 0, sgot->contents); + score_bfd_put_32 (output_bfd, 0x80000000, sgot->contents + SCORE_ELF_GOT_SIZE (output_bfd)); } if (sgot != NULL) @@ -3421,7 +3716,7 @@ _bfd_score_elf_finish_dynamic_sections (bfd *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); + sizeof (Elf32_External_Rel), score_elf_sort_dynamic_relocs); } return TRUE; @@ -3429,11 +3724,10 @@ _bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, /* 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) +s3_bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *hdr, + asection *sec) { const char *name; @@ -3455,38 +3749,35 @@ _bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, 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) +s3_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; - } + { + 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; - } + { + 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; - } + { + 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) +s3_bfd_score_elf_write_section (bfd *output_bfd, asection *sec, bfd_byte *contents) { bfd_byte *to, *from, *end; int i; @@ -3517,11 +3808,10 @@ _bfd_score_elf_write_section (bfd *output_bfd, /* 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) +s3_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; @@ -3542,10 +3832,9 @@ _bfd_score_elf_copy_indirect_symbol (struct bfd_link_info *info, } /* 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) +s3_bfd_score_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie, + struct bfd_link_info *info) { asection *o; bfd_boolean ret = FALSE; @@ -3596,9 +3885,8 @@ _bfd_score_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie, } /* Signal that discard_info() has removed the discarded relocations for this section. */ - static bfd_boolean -_bfd_score_elf_ignore_discarded_relocs (asection *sec) +s3_bfd_score_elf_ignore_discarded_relocs (asection *sec) { if (strcmp (sec->name, ".pdr") == 0) return TRUE; @@ -3607,20 +3895,19 @@ _bfd_score_elf_ignore_discarded_relocs (asection *sec) /* 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) +s3_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 NULL; } return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym); @@ -3629,7 +3916,7 @@ _bfd_score_elf_gc_mark_hook (asection *sec, /* Support for core dump NOTE sections. */ static bfd_boolean -_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) +s3_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) { int offset; unsigned int raw_size; @@ -3641,10 +3928,10 @@ _bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) case 148: /* Linux/Score 32-bit. */ /* pr_cursig */ - elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12); + elf_tdata (abfd)->core_signal = score_bfd_get_16 (abfd, note->descdata + 12); /* pr_pid */ - elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24); + elf_tdata (abfd)->core_pid = score_bfd_get_32 (abfd, note->descdata + 24); /* pr_reg */ offset = 72; @@ -3658,7 +3945,7 @@ _bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) } static bfd_boolean -_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) +s3_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) { switch (note->descsz) { @@ -3687,13 +3974,12 @@ _bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) /* Score BFD functions. */ - static reloc_howto_type * -elf32_score_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) +s3_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++) + for (i = 0; i < ARRAY_SIZE (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]; @@ -3702,16 +3988,16 @@ elf32_score_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_t static reloc_howto_type * elf32_score_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, - const char *r_name) + const char *r_name) { unsigned int i; for (i = 0; i < (sizeof (elf32_score_howto_table) - / sizeof (elf32_score_howto_table[0])); + / 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) + && strcasecmp (elf32_score_howto_table[i].name, r_name) == 0) return &elf32_score_howto_table[i]; return NULL; @@ -3720,7 +4006,7 @@ elf32_score_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, /* Create a score elf linker hash table. */ static struct bfd_link_hash_table * -elf32_score_link_hash_table_create (bfd *abfd) +s3_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); @@ -3730,7 +4016,7 @@ elf32_score_link_hash_table_create (bfd *abfd) return NULL; if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, score_elf_link_hash_newfunc, - sizeof (struct score_elf_link_hash_entry))) + sizeof (struct score_elf_link_hash_entry))) { free (ret); return NULL; @@ -3740,7 +4026,7 @@ elf32_score_link_hash_table_create (bfd *abfd) } static bfd_boolean -elf32_score_print_private_bfd_data (bfd *abfd, void * ptr) +s3_elf32_score_print_private_bfd_data (bfd *abfd, void * ptr) { FILE *file = (FILE *) ptr; @@ -3765,7 +4051,7 @@ elf32_score_print_private_bfd_data (bfd *abfd, void * ptr) } static bfd_boolean -elf32_score_merge_private_bfd_data (bfd *ibfd, bfd *obfd) +s3_elf32_score_merge_private_bfd_data (bfd *ibfd, bfd *obfd) { flagword in_flags; flagword out_flags; @@ -3789,10 +4075,10 @@ elf32_score_merge_private_bfd_data (bfd *ibfd, bfd *obfd) 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)); - } + && bfd_get_arch_info (obfd)->the_default) + { + return bfd_set_arch_mach (obfd, bfd_get_arch (ibfd), bfd_get_mach (ibfd)); + } return TRUE; } @@ -3808,7 +4094,7 @@ elf32_score_merge_private_bfd_data (bfd *ibfd, bfd *obfd) } static bfd_boolean -elf32_score_new_section_hook (bfd *abfd, asection *sec) +s3_elf32_score_new_section_hook (bfd *abfd, asection *sec) { struct _score_elf_section_data *sdata; bfd_size_type amt = sizeof (*sdata); @@ -3821,6 +4107,363 @@ elf32_score_new_section_hook (bfd *abfd, asection *sec) return _bfd_elf_new_section_hook (abfd, sec); } +/*****************************************************************************/ + +/* s3_s7: backend hooks. */ +static void +_bfd_score_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, + arelent *bfd_reloc, + Elf_Internal_Rela *elf_reloc) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_info_to_howto (abfd, bfd_reloc, elf_reloc); + else + return s7_bfd_score_info_to_howto (abfd, bfd_reloc, elf_reloc); +} + +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) +{ + if (bfd_get_mach (output_bfd) == bfd_mach_score3) + return s3_bfd_score_elf_relocate_section (output_bfd, + info, input_bfd, input_section, contents, relocs, + local_syms, local_sections); + else + return s7_bfd_score_elf_relocate_section (output_bfd, + info, input_bfd, input_section, contents, relocs, + local_syms, local_sections); +} + +static bfd_boolean +_bfd_score_elf_check_relocs (bfd *abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_check_relocs (abfd, info, sec, relocs); + else + return s7_bfd_score_elf_check_relocs (abfd, info, sec, relocs); +} + +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) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, + secp, valp); + else + return s7_bfd_score_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, + secp, valp); +} + +static void +_bfd_score_elf_symbol_processing (bfd *abfd, asymbol *asym) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_symbol_processing (abfd, asym); + else + return s7_bfd_score_elf_symbol_processing (abfd, asym); +} + +static int +_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 link a empty .o, then this filed is NULL. */ + if (info->input_bfds == NULL) + { + /* 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 1; + } + + if (bfd_get_mach (info->input_bfds) == bfd_mach_score3) + return s3_bfd_score_elf_link_output_symbol_hook (info, name, sym, input_sec, h); + else + return s7_bfd_score_elf_link_output_symbol_hook (info, name, sym, input_sec, h); +} + +static bfd_boolean +_bfd_score_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, + asection *sec, + int *retval) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_section_from_bfd_section (abfd, sec, retval); + else + return s7_bfd_score_elf_section_from_bfd_section (abfd, sec, retval); +} + +static bfd_boolean +_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *h) +{ + if (bfd_get_mach (info->input_bfds) == bfd_mach_score3) + return s3_bfd_score_elf_adjust_dynamic_symbol (info, h); + else + return s7_bfd_score_elf_adjust_dynamic_symbol (info, h); +} + +static bfd_boolean +_bfd_score_elf_always_size_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + if (bfd_get_mach (output_bfd) == bfd_mach_score3) + return s3_bfd_score_elf_always_size_sections (output_bfd, info); + else + return s7_bfd_score_elf_always_size_sections (output_bfd, info); +} + +static bfd_boolean +_bfd_score_elf_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) +{ + if (bfd_get_mach (output_bfd) == bfd_mach_score3) + return s3_bfd_score_elf_size_dynamic_sections (output_bfd, info); + else + return s7_bfd_score_elf_size_dynamic_sections (output_bfd, info); +} + +static bfd_boolean +_bfd_score_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_create_dynamic_sections (abfd, info); + else + return s7_bfd_score_elf_create_dynamic_sections (abfd, info); +} + +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) +{ + if (bfd_get_mach (output_bfd) == bfd_mach_score3) + return s3_bfd_score_elf_finish_dynamic_symbol (output_bfd, info, h, sym); + else + return s7_bfd_score_elf_finish_dynamic_symbol (output_bfd, info, h, sym); +} + +static bfd_boolean +_bfd_score_elf_finish_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + if (bfd_get_mach (output_bfd) == bfd_mach_score3) + return s3_bfd_score_elf_finish_dynamic_sections (output_bfd, info); + else + return s7_bfd_score_elf_finish_dynamic_sections (output_bfd, info); +} + +static bfd_boolean +_bfd_score_elf_fake_sections (bfd *abfd ATTRIBUTE_UNUSED, + Elf_Internal_Shdr *hdr, + asection *sec) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_fake_sections (abfd, hdr, sec); + else + return s7_bfd_score_elf_fake_sections (abfd, hdr, sec); +} + +static bfd_boolean +_bfd_score_elf_section_processing (bfd *abfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *hdr) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_section_processing (abfd, hdr); + else + return s7_bfd_score_elf_section_processing (abfd, hdr); +} + +static bfd_boolean +_bfd_score_elf_write_section (bfd *output_bfd, + struct bfd_link_info *link_info ATTRIBUTE_UNUSED, + asection *sec, bfd_byte *contents) +{ + if (bfd_get_mach (output_bfd) == bfd_mach_score3) + return s3_bfd_score_elf_write_section (output_bfd, sec, contents); + else + return s7_bfd_score_elf_write_section (output_bfd, sec, contents); +} + +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) +{ + if (bfd_get_mach (info->input_bfds) == bfd_mach_score3) + return s3_bfd_score_elf_copy_indirect_symbol (info, dir, ind); + else + return s7_bfd_score_elf_copy_indirect_symbol (info, dir, ind); +} + +static void +_bfd_score_elf_hide_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *entry, + bfd_boolean force_local) +{ + if (bfd_get_mach (info->input_bfds) == bfd_mach_score3) + return s3_bfd_score_elf_hide_symbol (info, entry, force_local); + else + return s7_bfd_score_elf_hide_symbol (info, entry, force_local); +} + +static bfd_boolean +_bfd_score_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie, + struct bfd_link_info *info) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_discard_info (abfd, cookie, info); + else + return s7_bfd_score_elf_discard_info (abfd, cookie, info); +} + +static bfd_boolean +_bfd_score_elf_ignore_discarded_relocs (asection *sec) +{ + if (bfd_get_mach (sec->owner) == bfd_mach_score3) + return s3_bfd_score_elf_ignore_discarded_relocs (sec); + else + return s7_bfd_score_elf_ignore_discarded_relocs (sec); +} + +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 (bfd_get_mach (info->input_bfds) == bfd_mach_score3) + return s3_bfd_score_elf_gc_mark_hook (sec, info, rel, h, sym); + else + return s7_bfd_score_elf_gc_mark_hook (sec, info, rel, h, sym); +} + +static bfd_boolean +_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_grok_prstatus (abfd, note); + else + return s7_bfd_score_elf_grok_prstatus (abfd, note); +} + +static bfd_boolean +_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_bfd_score_elf_grok_psinfo (abfd, note); + else + return s7_bfd_score_elf_grok_psinfo (abfd, note); +} + +static reloc_howto_type * +elf32_score_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) +{ + /* s3: NOTE!!! + gas will call elf32_score_reloc_type_lookup, and don't write elf file. + So just using score3, but we don't know ld will call this or not. + If so, this way can't work. */ + + if (score3) + return s3_elf32_score_reloc_type_lookup (abfd, code); + else + return s7_elf32_score_reloc_type_lookup (abfd, code); +} + +static struct bfd_link_hash_table * +elf32_score_link_hash_table_create (bfd *abfd) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_elf32_score_link_hash_table_create (abfd); + else + return s7_elf32_score_link_hash_table_create (abfd); +} + +static bfd_boolean +elf32_score_print_private_bfd_data (bfd *abfd, void * ptr) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_elf32_score_print_private_bfd_data (abfd, ptr); + else + return s7_elf32_score_print_private_bfd_data (abfd, ptr); +} + +static bfd_boolean +elf32_score_merge_private_bfd_data (bfd *ibfd, bfd *obfd) +{ + if (bfd_get_mach (obfd) == bfd_mach_score3) + return s3_elf32_score_merge_private_bfd_data (ibfd, obfd); + else + return s7_elf32_score_merge_private_bfd_data (ibfd, obfd); +} + +static bfd_boolean +elf32_score_new_section_hook (bfd *abfd, asection *sec) +{ + if (bfd_get_mach (abfd) == bfd_mach_score3) + return s3_elf32_score_new_section_hook (abfd, sec); + else + return s7_elf32_score_new_section_hook (abfd, sec); +} + + +/* s3_s7: don't need to split. */ + +/* Set the right machine number. */ +static bfd_boolean +_bfd_score_elf_score_object_p (bfd * abfd) +{ + int e_set = bfd_mach_score7; + + if (elf_elfheader (abfd)->e_machine == EM_SCORE) + { + int e_mach = elf_elfheader (abfd)->e_flags & EF_SCORE_MACH & EF_OMIT_PIC_FIXDD; + switch (e_mach) + { + /* Set default target is score7. */ + default: + case E_SCORE_MACH_SCORE7: + e_set = bfd_mach_score7; + break; + + case E_SCORE_MACH_SCORE3: + e_set = bfd_mach_score3; + break; + } + } + + return bfd_default_set_arch_mach (abfd, bfd_arch_score, e_set); +} + +bfd_boolean +_bfd_score_elf_common_definition (Elf_Internal_Sym *sym) +{ + return (sym->st_shndx == SHN_COMMON || sym->st_shndx == SHN_SCORE_SCOMMON); +} + +/*****************************************************************************/ + #define USE_REL 1 #define TARGET_LITTLE_SYM bfd_elf32_littlescore_vec @@ -3829,6 +4472,7 @@ elf32_score_new_section_hook (bfd *abfd, asection *sec) #define TARGET_BIG_NAME "elf32-bigscore" #define ELF_ARCH bfd_arch_score #define ELF_MACHINE_CODE EM_SCORE +#define ELF_MACHINE_ALT1 EM_SCORE_OLD #define ELF_MAXPAGESIZE 0x8000 #define elf_info_to_howto 0 @@ -3872,6 +4516,7 @@ elf32_score_new_section_hook (bfd *abfd, asection *sec) #define elf_backend_plt_header_size 0 #define elf_backend_collect TRUE #define elf_backend_type_change_ok TRUE +#define elf_backend_object_p _bfd_score_elf_score_object_p #define bfd_elf32_bfd_reloc_type_lookup elf32_score_reloc_type_lookup #define bfd_elf32_bfd_reloc_name_lookup \ diff --git a/bfd/elf32-score.h b/bfd/elf32-score.h new file mode 100644 index 0000000..54bd092 --- /dev/null +++ b/bfd/elf32-score.h @@ -0,0 +1,152 @@ +/* 32-bit ELF support for S+core. + Copyright 2009 Free Software Foundation, Inc. + Contributed by + Brain.lin (brain.lin@sunplusct.com) + Mei Ligang (ligang@sunnorth.com.cn) + Pei-Lin Tsai (pltsai@sunplus.com) + + This file is part of 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "elf/common.h" +#include "elf/internal.h" + +extern void +s7_bfd_score_elf_hide_symbol (struct bfd_link_info *, + struct elf_link_hash_entry *, + bfd_boolean); + +extern void +s7_bfd_score_info_to_howto (bfd *, arelent *, Elf_Internal_Rela *); + +extern bfd_boolean +s7_bfd_score_elf_relocate_section (bfd *, + struct bfd_link_info *, + bfd *, + asection *, + bfd_byte *, + Elf_Internal_Rela *, + Elf_Internal_Sym *, + asection **); + +extern bfd_boolean +s7_bfd_score_elf_check_relocs (bfd *, + struct bfd_link_info *, + asection *, + const Elf_Internal_Rela *); + +extern bfd_boolean +s7_bfd_score_elf_add_symbol_hook (bfd *, + struct bfd_link_info *, + Elf_Internal_Sym *, + const char **, + flagword *, + asection **, + bfd_vma *); + +extern void +s7_bfd_score_elf_symbol_processing (bfd *, asymbol *); + +extern int +s7_bfd_score_elf_link_output_symbol_hook (struct bfd_link_info *, + const char *, + Elf_Internal_Sym *, + asection *, + struct elf_link_hash_entry *); + +extern bfd_boolean +s7_bfd_score_elf_section_from_bfd_section (bfd *, + asection *, + int *); + +extern bfd_boolean +s7_bfd_score_elf_adjust_dynamic_symbol (struct bfd_link_info *, + struct elf_link_hash_entry *); + +extern bfd_boolean +s7_bfd_score_elf_always_size_sections (bfd *, struct bfd_link_info *); + +extern bfd_boolean +s7_bfd_score_elf_size_dynamic_sections (bfd *, struct bfd_link_info *); + +extern bfd_boolean +s7_bfd_score_elf_create_dynamic_sections (bfd *, struct bfd_link_info *); + +extern bfd_boolean +s7_bfd_score_elf_finish_dynamic_symbol (bfd *, + struct bfd_link_info *, + struct elf_link_hash_entry *, + Elf_Internal_Sym *); + +extern bfd_boolean +s7_bfd_score_elf_finish_dynamic_sections (bfd *, struct bfd_link_info *); + +extern bfd_boolean +s7_bfd_score_elf_fake_sections (bfd *, + Elf_Internal_Shdr *, + asection *); + +extern bfd_boolean +s7_bfd_score_elf_section_processing (bfd *, Elf_Internal_Shdr *); + +extern bfd_boolean +s7_bfd_score_elf_write_section (bfd *, asection *, bfd_byte *); + +extern void +s7_bfd_score_elf_copy_indirect_symbol (struct bfd_link_info *, + struct elf_link_hash_entry *, + struct elf_link_hash_entry *); + +extern bfd_boolean +s7_bfd_score_elf_discard_info (bfd *, struct elf_reloc_cookie *, + struct bfd_link_info *); + +extern bfd_boolean +s7_bfd_score_elf_ignore_discarded_relocs (asection *); + +extern asection * +s7_bfd_score_elf_gc_mark_hook (asection *, + struct bfd_link_info *, + Elf_Internal_Rela *, + struct elf_link_hash_entry *, + Elf_Internal_Sym *); + +extern bfd_boolean +s7_bfd_score_elf_grok_prstatus (bfd *, Elf_Internal_Note *); + +extern bfd_boolean +s7_bfd_score_elf_grok_psinfo (bfd *, Elf_Internal_Note *); + +extern reloc_howto_type * +s7_elf32_score_reloc_type_lookup (bfd *, bfd_reloc_code_real_type); + +extern struct bfd_link_hash_table * +s7_elf32_score_link_hash_table_create (bfd *); + +extern bfd_boolean +s7_elf32_score_print_private_bfd_data (bfd *, void *); + +extern bfd_boolean +s7_elf32_score_merge_private_bfd_data (bfd *, bfd *); + +extern bfd_boolean +s7_elf32_score_new_section_hook (bfd *, asection *); + +extern bfd_boolean +_bfd_score_elf_common_definition (Elf_Internal_Sym *); + +#define elf_backend_common_definition _bfd_score_elf_common_definition diff --git a/bfd/elf32-score7.c b/bfd/elf32-score7.c new file mode 100644 index 0000000..af37817 --- /dev/null +++ b/bfd/elf32-score7.c @@ -0,0 +1,3947 @@ +/* 32-bit ELF support for S+core. + Copyright 2009 Free Software Foundation, Inc. + Contributed by + Brain.lin (brain.lin@sunplusct.com) + Mei Ligang (ligang@sunnorth.com.cn) + Pei-Lin Tsai (pltsai@sunplus.com) + + This file is part of 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "bfd.h" +#include "sysdep.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" +#include "elf32-score.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 0x8323bc56 /* mv r25, 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) + +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 != 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 != 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; + 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_BCMP */ + HOWTO (R_SCORE_BCMP, /* 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_BCMP", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ + + 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 */ + 0x00007fff, /* src_mask */ + 0x00007fff, /* 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_BCMP, R_SCORE_BCMP}, + {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}, +}; + +static INLINE hashval_t +score_elf_hash_bfd_vma (bfd_vma addr) +{ +#ifdef BFD64 + return addr + (addr >> 32); +#else + return addr; +#endif +} + +/* 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 ? score_elf_hash_bfd_vma (entry->d.address) + : entry->abfd->id + + (entry->symndx >= 0 ? score_elf_hash_bfd_vma (entry->d.addend) + : entry->d.h->root.root.root.hash)); +} + +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 + s7_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; +} + +void +s7_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: + s7_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; + case R_SCORE_GOT15: + case R_SCORE_GOT_LO16: + 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, + Elf_Internal_Sym *local_syms, + 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; + + Elf_Internal_Sym *sym = 0; + asection *sec = NULL; + bfd_boolean merge_p = 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 != 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 != 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); + + /* For hidden symbol. */ + local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE); + if (local_p) + { + sym = local_syms + r_symndx; + sec = local_sections[r_symndx]; + + symbol = sec->output_section->vma + sec->output_offset; + if (ELF_ST_TYPE (sym->st_info) != STT_SECTION + || (sec->flags & SEC_MERGE)) + symbol += sym->st_value; + if ((sec->flags & SEC_MERGE) + && ELF_ST_TYPE (sym->st_info) == STT_SECTION) + merge_p = 1; + } + + 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); + if (merge_p) + { + asection *msec = sec; + lo_value = _bfd_elf_rel_local_sym (output_bfd, sym, &msec, lo_value); + lo_value -= symbol; + lo_value += msec->output_section->vma + msec->output_offset; + } + } + addend = lo_value; + } + else + { + addend = (bfd_get_32 (input_bfd, hit_data) >> howto->bitpos) & howto->src_mask; + } + + /* Figure out the value of the symbol. */ + if (local_p && !merge_p) + { + 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; + + value = bfd_get_32 (input_bfd, contents + rel->r_offset); + addend = value & 0x7fff; + if ((addend & 0x4000) == 0x4000) + addend |= 0xffffc000; + + 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 <<= 16; + addend += lo_value; + } + } + + local_p = score_elf_local_relocation_p (input_bfd, rel, local_sections, TRUE); + + /* 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_symndx == 0) + /* r_symndx will be zero only for relocs against symbols + from removed linkonce sections, or sections discarded by + a linker script. */ + value = 0; + 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; + abs_value = abs (value - rel_addr); + if ((abs_value & 0xfe000000) != 0) + return bfd_reloc_overflow; + 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; + abs_value = abs (value - rel_addr); + if ((abs_value & 0xfffff000) != 0) + return bfd_reloc_overflow; + 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 + gp0 - 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. */ + +void +s7_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 >= ARRAY_SIZE (elf32_score_howto_table)) + bfd_reloc->howto = NULL; + else + bfd_reloc->howto = &elf32_score_howto_table[r_type]; +} + +/* Relocate an score ELF section. */ + +bfd_boolean +s7_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); + + s7_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; + name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec); + + if (!info->relocatable) + { + if (ELF_ST_TYPE (sym->st_info) != STT_SECTION + || (sec->flags & SEC_MERGE)) + { + relocation += sym->st_value; + } + + if ((sec->flags & SEC_MERGE) + && 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 s7_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 (r_symndx < symtab_hdr->sh_info) + { + sym = local_syms + r_symndx; + + 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_addend = 0, lo_value = 0; + bfd_vma addend, value; + + value = bfd_get_32 (input_bfd, contents + rel->r_offset); + addend = value & 0x7fff; + if ((addend & 0x4000) == 0x4000) + addend |= 0xffffc000; + + 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 (lo16_rel != NULL) + { + lo_value = bfd_get_32 (input_bfd, contents + lo16_rel->r_offset); + lo_addend = (((lo_value >> 16) & 0x3) << 14) | ((lo_value & 0x7fff) >> 1); + } + + addend <<= 16; + addend += lo_addend; + + if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) + addend += local_sections[r_symndx]->output_offset; + + lo_addend = addend & 0xffff; + lo_value = (lo_value & (~(howto->dst_mask))) | ((lo_addend & 0x3fff) << 1) + | (((lo_addend >> 14) & 0x3) << 16); + bfd_put_32 (input_bfd, lo_value, contents + lo16_rel->r_offset); + + addend = addend >> 16; + value = (value & ~howto->src_mask) | (addend & howto->src_mask); + bfd_put_32 (input_bfd, value, contents + rel->r_offset); + } + else if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) + { + sec = local_sections[r_symndx]; + score_elf_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. */ + 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_syms, + 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. */ + +bfd_boolean +s7_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; +} + +bfd_boolean +s7_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; +} + +void +s7_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; + } +} + +int +s7_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 1; +} + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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")) + { + /* s7_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 s7_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; +} + +bfd_boolean +s7_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, 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. */ + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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; +} + +bfd_boolean +s7_bfd_score_elf_write_section (bfd *output_bfd, 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. */ + +void +s7_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. */ + +bfd_boolean +s7_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. */ + +bfd_boolean +s7_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. */ + +asection * +s7_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. */ + +bfd_boolean +s7_bfd_score_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note) +{ + int offset; + unsigned int raw_size; + + switch (note->descsz) + { + default: + return FALSE; + case 272: /* Linux/Score elf_prstatus */ + + /* 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; + + /* sizeof(elf_gregset_t) */ + raw_size = 196; + + break; + } + + /* Make a ".reg/999" section. */ + return _bfd_elfcore_make_pseudosection (abfd, ".reg", raw_size, note->descpos + offset); +} + +bfd_boolean +s7_bfd_score_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) +{ + switch (note->descsz) + { + default: + return FALSE; + + case 128: /* Linux/Score elf_prpsinfo. */ + /* pr_fname */ + elf_tdata (abfd)->core_program = _bfd_elfcore_strndup (abfd, note->descdata + 32, 16); + + /* pr_psargs */ + elf_tdata (abfd)->core_command = _bfd_elfcore_strndup (abfd, note->descdata + 48, 80); + break; + } + + /* 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. */ + +reloc_howto_type * +s7_elf32_score_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, bfd_reloc_code_real_type code) +{ + unsigned int i; + + for (i = 0; i < ARRAY_SIZE (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; +} + +/* Create a score elf linker hash table. */ + +struct bfd_link_hash_table * +s7_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; +} + +bfd_boolean +s7_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; +} + +bfd_boolean +s7_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); + } + + /* Maybe dependency fix compatibility should be checked here. */ + return TRUE; +} + +bfd_boolean +s7_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 elf_backend_omit_section_dynsym \ + ((bfd_boolean (*) (bfd *, struct bfd_link_info *, asection *)) bfd_true) diff --git a/bfd/elf32-sh-relocs.h b/bfd/elf32-sh-relocs.h index 3b6e35d..70f3a7b 100644 --- a/bfd/elf32-sh-relocs.h +++ b/bfd/elf32-sh-relocs.h @@ -1,4 +1,4 @@ -/* Copyright 2007 Free Software Foundation, Inc. +/* Copyright 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/elf32-sh-symbian.c b/bfd/elf32-sh-symbian.c index 361031a..25e3af9 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, 2006, 2007 + Copyright 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Red Hat @@ -392,10 +392,9 @@ sh_symbian_process_embedded_commands (struct bfd_link_info *info, bfd * abfd, /* Scan a bfd for a .directive section, and if found process it. Returns TRUE upon success, FALSE otherwise. */ -bfd_boolean bfd_elf32_sh_symbian_process_directives (struct bfd_link_info *info, bfd * abfd); -bfd_boolean -bfd_elf32_sh_symbian_process_directives (struct bfd_link_info *info, bfd * abfd) +static bfd_boolean +sh_symbian_process_directives (bfd *abfd, struct bfd_link_info *info) { bfd_boolean result = FALSE; bfd_byte * contents; @@ -605,7 +604,8 @@ sh_symbian_relocate_section (bfd * output_bfd, BFD_ASSERT (ptr->new_symndx); 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); + (unsigned 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); break; } @@ -616,18 +616,12 @@ sh_symbian_relocate_section (bfd * output_bfd, contents, relocs, local_syms, local_sections); } -static bfd_boolean -sh_symbian_check_directives (bfd *abfd, struct bfd_link_info *info) -{ - return bfd_elf32_sh_symbian_process_directives (info, abfd); -} - #define TARGET_LITTLE_SYM bfd_elf32_shl_symbian_vec #define TARGET_LITTLE_NAME "elf32-shl-symbian" #undef elf_backend_relocate_section #define elf_backend_relocate_section sh_symbian_relocate_section #undef elf_backend_check_directives -#define elf_backend_check_directives sh_symbian_check_directives +#define elf_backend_check_directives sh_symbian_process_directives #include "elf32-target.h" diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index c71354e..7b81aab 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, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -487,7 +487,7 @@ sh_elf_relax_section (bfd *abfd, asection *sec, } #endif - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); internal_relocs = (_bfd_elf_link_read_relocs (abfd, sec, NULL, (Elf_Internal_Rela *) NULL, @@ -852,7 +852,7 @@ sh_elf_relax_delete_bytes (bfd *abfd, asection *sec, bfd_vma addr, unsigned int symcount; asection *o; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents; sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); @@ -2154,20 +2154,19 @@ struct sh_elf_obj_tdata #define sh_elf_local_got_tls_type(abfd) \ (sh_elf_tdata (abfd)->local_got_tls_type) +#define is_sh_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == SH_ELF_TDATA) + /* Override the generic function because we need to store sh_elf_obj_tdata as the specific tdata. */ static bfd_boolean sh_elf_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct sh_elf_obj_tdata), + SH_ELF_TDATA); } /* sh ELF linker hash table. */ @@ -2188,8 +2187,8 @@ struct elf_sh_link_hash_table /* The (unloaded but important) VxWorks .rela.plt.unloaded section. */ asection *srelplt2; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; /* A counter or offset to track a TLS got entry. */ union @@ -2282,7 +2281,7 @@ sh_elf_link_hash_table_create (bfd *abfd) ret->sdynbss = NULL; ret->srelbss = NULL; ret->srelplt2 = NULL; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; ret->tls_ldm_got.refcount = 0; ret->plt_info = NULL; ret->vxworks_p = vxworks_object_p (abfd); @@ -2304,18 +2303,9 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab = sh_elf_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (! htab->sgot || ! htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (! htab->sgot || ! htab->sgotplt || ! htab->srelgot) abort (); - - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 2)) - return FALSE; return TRUE; } @@ -2818,6 +2808,19 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } } + if (htab->vxworks_p) + { + struct elf_sh_dyn_relocs **pp; + + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + { + if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) + *pp = p->next; + else + pp = &p->next; + } + } + /* Also discard relocs on undefined weak syms with non-default visibility. */ if (eh->dyn_relocs != NULL @@ -2958,7 +2961,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *symtab_hdr; asection *srel; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_sh_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) @@ -2978,6 +2981,13 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, linker script /DISCARD/, so we'll be discarding the relocs too. */ } + else if (htab->vxworks_p + && strcmp (p->sec->output_section->name, + ".tls_vars") == 0) + { + /* Relocations in vxworks .tls_vars sections are + handled specially by the loader. */ + } else if (p->count != 0) { srel = elf_section_data (p->sec)->sreloc; @@ -2992,7 +3002,7 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; #ifdef INCLUDE_SHMEDIA /* Count datalabel local GOT. */ @@ -3138,6 +3148,9 @@ sh_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } } + if (htab->vxworks_p + && !elf_vxworks_add_dynamic_entries (output_bfd, info)) + return FALSE; } #undef add_dynamic_entry @@ -3164,9 +3177,12 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, asection *splt; asection *sreloc; asection *srelgot; + bfd_boolean is_vxworks_tls; + + BFD_ASSERT (is_sh_elf (input_bfd)); htab = sh_elf_hash_table (info); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); dynobj = htab->root.dynobj; local_got_offsets = elf_local_got_offsets (input_bfd); @@ -3176,6 +3192,11 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, splt = htab->splt; sreloc = NULL; srelgot = NULL; + /* We have to handle relocations in vxworks .tls_vars sections + specially, because the dynamic loader is 'weird'. */ + is_vxworks_tls = (htab->vxworks_p && info->shared + && !strcmp (input_section->output_section->name, + ".tls_vars")); rel = relocs; relend = relocs + input_section->reloc_count; @@ -3582,6 +3603,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, || h->root.type != bfd_link_hash_undefweak) && r_symndx != 0 && (input_section->flags & SEC_ALLOC) != 0 + && !is_vxworks_tls && (r_type == R_SH_DIR32 || !SYMBOL_CALLS_LOCAL (info, h))) { @@ -3595,22 +3617,10 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = FALSE; @@ -4321,22 +4331,10 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } if (h == NULL || h->dynindx == -1) @@ -4424,7 +4422,7 @@ sh_elf_get_relocated_section_contents (bfd *output_bfd, relocatable, symbols); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); memcpy (data, elf_section_data (input_section)->this_hdr.contents, (size_t) input_section->size); @@ -4561,9 +4559,12 @@ sh_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -4835,7 +4836,7 @@ sh_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, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; struct elf_sh_link_hash_table *htab; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; @@ -4853,11 +4854,10 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, if (info->relocatable) return TRUE; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + BFD_ASSERT (is_sh_elf (abfd)); + + symtab_hdr = &elf_symtab_hdr (abfd); 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; htab = sh_elf_hash_table (info); local_got_offsets = elf_local_got_offsets (abfd); @@ -4959,7 +4959,9 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_SH_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -5188,37 +5190,11 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->root.dynobj, 2, abfd, /*rela?*/ TRUE); - sreloc = bfd_get_section_by_name (htab->root.dynobj, name); if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (htab->root.dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (htab->root.dynobj, - sreloc, 2)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -5227,15 +5203,20 @@ sh_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, head = &((struct elf_sh_link_hash_entry *) h)->dyn_relocs; else { + /* Track dynamic relocs needed for local syms too. */ asection *s; void *vpp; + Elf_Internal_Sym *isym; - /* Track dynamic relocs needed for local syms too. */ - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct elf_sh_dyn_relocs **) vpp; } @@ -5353,13 +5334,12 @@ sh_elf_set_private_flags (bfd *abfd, flagword flags) static bfd_boolean sh_elf_copy_private_data (bfd * ibfd, bfd * obfd) { - if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) - return TRUE; - /* Copy object attributes. */ _bfd_elf_copy_obj_attributes (ibfd, obfd); + if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd)) + return TRUE; + return sh_elf_set_private_flags (obfd, elf_elfheader (ibfd)->e_flags); } #endif /* not sh_elf_copy_private_data */ @@ -5386,8 +5366,7 @@ sh_elf_merge_private_data (bfd *ibfd, bfd *obfd) { extern bfd_boolean sh_merge_bfd_arch (bfd *, bfd *); - if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) + if (! is_sh_elf (ibfd) || ! is_sh_elf (obfd)) return TRUE; if (! elf_flags_init (obfd)) @@ -5764,6 +5743,9 @@ sh_elf_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) switch (dyn.d_tag) { default: + if (htab->vxworks_p + && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) + bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon); break; #ifdef INCLUDE_SHMEDIA diff --git a/bfd/elf32-sh64-com.c b/bfd/elf32-sh64-com.c index 2db9178..a4aa1be 100644 --- a/bfd/elf32-sh64-com.c +++ b/bfd/elf32-sh64-com.c @@ -1,5 +1,5 @@ /* SuperH SH64-specific support for 32-bit ELF - Copyright 2000, 2001, 2002, 2003, 2004, 2007 + Copyright 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/elf32-sh64.c b/bfd/elf32-sh64.c index 3de8562..2f2b853 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, 2006, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -60,7 +60,7 @@ static int sh64_elf_get_symbol_type static bfd_boolean sh64_elf_add_symbol_hook (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **, flagword *, asection **, bfd_vma *); -static bfd_boolean sh64_elf_link_output_symbol_hook +static int sh64_elf_link_output_symbol_hook (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); static bfd_boolean sh64_backend_section_from_shdr @@ -477,7 +477,7 @@ sh64_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, we don't need to look up and make sure to emit the main symbol for each DataLabel symbol. */ -bfd_boolean +static int sh64_elf_link_output_symbol_hook (struct bfd_link_info *info, const char *cname, Elf_Internal_Sym *sym, @@ -492,7 +492,7 @@ sh64_elf_link_output_symbol_hook (struct bfd_link_info *info, name[strlen (name) - strlen (DATALABEL_SUFFIX)] = 0; } - return TRUE; + return 1; } /* Check a SH64-specific reloc and put the value to relocate to into diff --git a/bfd/elf32-sh64.h b/bfd/elf32-sh64.h index 0ecc714..fa5f353 100644 --- a/bfd/elf32-sh64.h +++ b/bfd/elf32-sh64.h @@ -1,5 +1,5 @@ /* SH ELF support for BFD. - Copyright 2003, 2007 Free Software Foundation, Inc. + Copyright 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index ffe1b97..ae0ac2b 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c index eb0b018..890f260 100644 --- a/bfd/elf32-spu.c +++ b/bfd/elf32-spu.c @@ -1,6 +1,6 @@ /* SPU specific support for 32-bit ELF - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -19,6 +19,7 @@ 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "sysdep.h" +#include "libiberty.h" #include "bfd.h" #include "bfdlink.h" #include "libbfd.h" @@ -54,7 +55,7 @@ static reloc_howto_type elf_howto_table[] = { 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, + 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, @@ -75,21 +76,25 @@ static reloc_howto_type elf_howto_table[] = { 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, + 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, + 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, + HOWTO (R_SPU_PPU64, 0, 4, 64, FALSE, 0, complain_overflow_dont, bfd_elf_generic_reloc, "SPU_PPU64", FALSE, 0, -1, FALSE), + HOWTO (R_SPU_ADD_PIC, 0, 0, 0, FALSE, 0, complain_overflow_dont, + bfd_elf_generic_reloc, "SPU_ADD_PIC", + FALSE, 0, 0x00000000, FALSE), }; static struct bfd_elf_special_section const spu_elf_special_sections[] = { + { "._ea", 4, 0, SHT_PROGBITS, SHF_WRITE }, { ".toe", 4, 0, SHT_NOBITS, SHF_ALLOC }, { NULL, 0, 0, 0, 0 } }; @@ -133,6 +138,8 @@ spu_elf_bfd_to_reloc_type (bfd_reloc_code_real_type code) return R_SPU_PPU32; case BFD_RELOC_SPU_PPU64: return R_SPU_PPU64; + case BFD_RELOC_SPU_ADD_PIC: + return R_SPU_ADD_PIC; } } @@ -239,6 +246,44 @@ spu_elf_new_section_hook (bfd *abfd, asection *sec) return _bfd_elf_new_section_hook (abfd, sec); } +/* Set up overlay info for executables. */ + +static bfd_boolean +spu_elf_object_p (bfd *abfd) +{ + if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) + { + unsigned int i, num_ovl, num_buf; + Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr; + Elf_Internal_Ehdr *ehdr = elf_elfheader (abfd); + Elf_Internal_Phdr *last_phdr = NULL; + + for (num_buf = 0, num_ovl = 0, i = 0; i < ehdr->e_phnum; i++, phdr++) + if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_OVERLAY) != 0) + { + unsigned int j; + + ++num_ovl; + if (last_phdr == NULL + || ((last_phdr->p_vaddr ^ phdr->p_vaddr) & 0x3ffff) != 0) + ++num_buf; + last_phdr = phdr; + for (j = 1; j < elf_numsections (abfd); j++) + { + Elf_Internal_Shdr *shdr = elf_elfsections (abfd)[j]; + + if (ELF_IS_SECTION_IN_SEGMENT_MEMORY (shdr, phdr)) + { + asection *sec = shdr->bfd_section; + spu_elf_section_data (sec)->u.o.ovl_index = num_ovl; + spu_elf_section_data (sec)->u.o.ovl_buf = num_buf; + } + } + } + } + return TRUE; +} + /* Specially mark defined symbols named _EAR_* with BSF_KEEP so that strip --strip-unneeded will not remove them. */ @@ -257,22 +302,21 @@ struct spu_link_hash_table { struct elf_link_hash_table elf; - /* The stub hash table. */ - struct bfd_hash_table stub_hash_table; + struct spu_elf_params *params; /* Shortcuts to overlay sections. */ - asection *stub; asection *ovtab; + asection *init; + asection *toe; + asection **ovl_sec; - struct elf_link_hash_entry *ovly_load; + /* Count of stubs in each overlay section. */ + unsigned int *stub_count; - /* 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; + /* The stub section for each overlay section. */ + asection **stub_sec; + + struct elf_link_hash_entry *ovly_entry[2]; /* Number of overlay buffers. */ unsigned int num_buf; @@ -280,71 +324,120 @@ struct spu_link_hash_table /* 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; + /* For soft icache. */ + unsigned int line_size_log2; + unsigned int num_lines_log2; + unsigned int fromelem_size_log2; + + /* How much memory we have. */ + unsigned int local_store; + /* Local store --auto-overlay should reserve for non-overlay + functions and data. */ + unsigned int overlay_fixed; + /* Local store --auto-overlay should reserve for stack and heap. */ + unsigned int reserved; + /* If reserved is not specified, stack analysis will calculate a value + for the stack. This parameter adjusts that value to allow for + negative sp access (the ABI says 2000 bytes below sp are valid, + and the overlay manager uses some of this area). */ + int extra_stack_space; + /* Count of overlay stubs needed in non-overlay area. */ + unsigned int non_ovly_stub; + + /* Pointer to the fixup section */ + asection *sfixup; /* Set on error. */ - unsigned int stub_overflow : 1; + unsigned int stub_err : 1; +}; - /* Set if stack size analysis should be done. */ - unsigned int stack_analysis : 1; +/* Hijack the generic got fields for overlay stub accounting. */ - /* Set if __stack_* syms will be emitted. */ - unsigned int emit_stack_syms : 1; +struct got_entry +{ + struct got_entry *next; + unsigned int ovl; + union { + bfd_vma addend; + bfd_vma br_addr; + }; + bfd_vma stub_addr; }; #define spu_hash_table(p) \ ((struct spu_link_hash_table *) ((p)->hash)) -struct spu_stub_hash_entry +struct call_info { - 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; + struct function_info *fun; + struct call_info *next; + unsigned int count; + unsigned int max_depth; + unsigned int is_tail : 1; + unsigned int is_pasted : 1; + unsigned int broken_cycle : 1; + unsigned int priority : 13; }; -/* 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) +struct function_info { - /* 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; + /* 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; + asection *rodata; + /* Where last called from, and number of sections called from. */ + asection *last_caller; + unsigned int call_count; + /* Address range of (this part of) function. */ + bfd_vma lo, hi; + /* Offset where we found a store of lr, or -1 if none found. */ + bfd_vma lr_store; + /* Offset where we found the stack adjustment insn. */ + bfd_vma sp_adjust; + /* Stack usage. */ + int stack; + /* Distance from root of call tree. Tail and hot/cold branches + count as one deeper. We aren't counting stack frames here. */ + unsigned int depth; + /* 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; + /* Set if not a root node. */ + unsigned int non_root : 1; + /* Flags used during call tree traversal. It's cheaper to replicate + the visit flags than have one which needs clearing after a traversal. */ + unsigned int visit1 : 1; + unsigned int visit2 : 1; + unsigned int marking : 1; + unsigned int visit3 : 1; + unsigned int visit4 : 1; + unsigned int visit5 : 1; + unsigned int visit6 : 1; + unsigned int visit7 : 1; +}; - sh->target_section = NULL; - sh->target_off = 0; - sh->off = 0; - sh->delta = 0; - } +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]; +}; - return entry; -} +static struct function_info *find_function (asection *, bfd_vma, + struct bfd_link_info *); /* Create a spu ELF linker hash table. */ @@ -365,26 +458,31 @@ spu_elf_link_hash_table_create (bfd *abfd) 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)); + memset (&htab->ovtab, 0, + sizeof (*htab) - offsetof (struct spu_link_hash_table, ovtab)); + htab->elf.init_got_refcount.refcount = 0; + htab->elf.init_got_refcount.glist = NULL; + htab->elf.init_got_offset.offset = 0; + htab->elf.init_got_offset.glist = NULL; return &htab->elf.root; } -/* Free the derived linker hash table. */ - -static void -spu_elf_link_hash_table_free (struct bfd_link_hash_table *hash) +void +spu_elf_setup (struct bfd_link_info *info, struct spu_elf_params *params) { - struct spu_link_hash_table *ret = (struct spu_link_hash_table *) hash; + bfd_vma max_branch_log2; - bfd_hash_table_free (&ret->stub_hash_table); - _bfd_generic_link_hash_table_free (hash); + struct spu_link_hash_table *htab = spu_hash_table (info); + htab->params = params; + htab->line_size_log2 = bfd_log2 (htab->params->line_size); + htab->num_lines_log2 = bfd_log2 (htab->params->num_lines); + + /* For the software i-cache, we provide a "from" list whose size + is a power-of-two number of quadwords, big enough to hold one + byte per outgoing branch. Compute this number here. */ + max_branch_log2 = bfd_log2 (htab->params->max_branch); + htab->fromelem_size_log2 = max_branch_log2 > 4 ? max_branch_log2 - 4 : 0; } /* Find the symbol for the given R_SYMNDX in IBFD and set *HP and *SYMP @@ -435,17 +533,9 @@ get_sym_h (struct elf_link_hash_entry **hp, { 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); - } + locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr, + symtab_hdr->sh_info, + 0, NULL, NULL, NULL); if (locsyms == NULL) return FALSE; *locsymsp = locsyms; @@ -459,79 +549,20 @@ get_sym_h (struct elf_link_hash_entry **hp, *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; - } + *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx); } 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) +spu_elf_create_sections (struct bfd_link_info *info) { - 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; + bfd *ibfd; for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) if (bfd_get_section_by_name (ibfd, SPU_PTNOTE_SPUNAME) != NULL) @@ -553,7 +584,7 @@ spu_elf_create_sections (bfd *output_bfd, || !bfd_set_section_alignment (ibfd, s, 4)) return FALSE; - name_len = strlen (bfd_get_filename (output_bfd)) + 1; + name_len = strlen (bfd_get_filename (info->output_bfd)) + 1; size = 12 + ((sizeof (SPU_PLUGIN_NAME) + 3) & -4); size += (name_len + 3) & -4; @@ -569,10 +600,23 @@ spu_elf_create_sections (bfd *output_bfd, 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); + bfd_get_filename (info->output_bfd), name_len); s->contents = data; } + if (htab->params->emit_fixups) + { + asection *s; + flagword flags; + ibfd = info->input_bfds; + flags = SEC_LOAD | SEC_ALLOC | SEC_READONLY | SEC_HAS_CONTENTS + | SEC_IN_MEMORY; + s = bfd_make_section_anyway_with_flags (ibfd, ".fixup", flags); + if (s == NULL || !bfd_set_section_alignment (ibfd, s, 2)) + return FALSE; + htab->sfixup = s; + } + return TRUE; } @@ -591,26 +635,32 @@ sort_sections (const void *a, const void *b) return (*s1)->index - (*s2)->index; } -/* Identify overlays in the output bfd, and number them. */ +/* Identify overlays in the output bfd, and number them. + Returns 0 on error, 1 if no overlays, 2 if overlays. */ -bfd_boolean -spu_elf_find_overlays (bfd *output_bfd, struct bfd_link_info *info) +int +spu_elf_find_overlays (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; + static const char *const entry_names[2][2] = { + { "__ovly_load", "__icache_br_handler" }, + { "__ovly_return", "__icache_call_handler" } + }; - if (output_bfd->section_count < 2) - return FALSE; + if (info->output_bfd->section_count < 2) + return 1; - alloc_sec = bfd_malloc (output_bfd->section_count * sizeof (*alloc_sec)); + alloc_sec + = bfd_malloc (info->output_bfd->section_count * sizeof (*alloc_sec)); if (alloc_sec == NULL) - return FALSE; + return 0; /* Pick out all the alloced sections. */ - for (n = 0, s = output_bfd->sections; s != NULL; s = s->next) + for (n = 0, s = info->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) @@ -619,68 +669,180 @@ spu_elf_find_overlays (bfd *output_bfd, struct bfd_link_info *info) if (n == 0) { free (alloc_sec); - return FALSE; + return 1; } /* 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++) + if (htab->params->ovly_flavour == ovly_soft_icache) { - s = alloc_sec[i]; - if (s->vma < ovl_end) + unsigned int prev_buf = 0, set_id = 0; + + /* Look for an overlapping vma to find the first overlay section. */ + bfd_vma vma_start = 0; + + for (i = 1; i < n; i++) + { + s = alloc_sec[i]; + if (s->vma < ovl_end) + { + asection *s0 = alloc_sec[i - 1]; + vma_start = s0->vma; + ovl_end = (s0->vma + + ((bfd_vma) 1 + << (htab->num_lines_log2 + htab->line_size_log2))); + --i; + break; + } + else + ovl_end = s->vma + s->size; + } + + /* Now find any sections within the cache area. */ + for (ovl_index = 0, num_buf = 0; i < n; i++) { - asection *s0 = alloc_sec[i - 1]; + s = alloc_sec[i]; + if (s->vma >= ovl_end) + break; + + /* A section in an overlay area called .ovl.init is not + an overlay, in the sense that it might be loaded in + by the overlay manager, but rather the initial + section contents for the overlay buffer. */ + if (strncmp (s->name, ".ovl.init", 9) != 0) + { + num_buf = ((s->vma - vma_start) >> htab->line_size_log2) + 1; + set_id = (num_buf == prev_buf)? set_id + 1 : 0; + prev_buf = num_buf; + + if ((s->vma - vma_start) & (htab->params->line_size - 1)) + { + info->callbacks->einfo (_("%X%P: overlay section %A " + "does not start on a cache line.\n"), + s); + bfd_set_error (bfd_error_bad_value); + return 0; + } + else if (s->size > htab->params->line_size) + { + info->callbacks->einfo (_("%X%P: overlay section %A " + "is larger than a cache line.\n"), + s); + bfd_set_error (bfd_error_bad_value); + return 0; + } + + alloc_sec[ovl_index++] = s; + spu_elf_section_data (s)->u.o.ovl_index + = (set_id << htab->num_lines_log2) + num_buf; + spu_elf_section_data (s)->u.o.ovl_buf = num_buf; + } + } - if (spu_elf_section_data (s0)->ovl_index == 0) + /* Ensure there are no more overlay sections. */ + for ( ; i < n; i++) + { + s = alloc_sec[i]; + if (s->vma < ovl_end) { - spu_elf_section_data (s0)->ovl_index = ++ovl_index; - alloc_sec[num_buf * 2] = s0; - alloc_sec[num_buf * 2 + 1] = s0; - num_buf++; + info->callbacks->einfo (_("%X%P: overlay section %A " + "is not in cache area.\n"), + alloc_sec[i-1]); + bfd_set_error (bfd_error_bad_value); + return 0; } - spu_elf_section_data (s)->ovl_index = ++ovl_index; - if (ovl_end < s->vma + s->size) + else + ovl_end = s->vma + s->size; + } + } + else + { + /* Look for overlapping vmas. Any with overlap must be overlays. + Count them. Also count the number of overlay regions. */ + for (ovl_index = 0, num_buf = 0, i = 1; i < n; i++) + { + s = alloc_sec[i]; + if (s->vma < ovl_end) { - ovl_end = s->vma + s->size; - alloc_sec[num_buf * 2 - 1] = s; + asection *s0 = alloc_sec[i - 1]; + + if (spu_elf_section_data (s0)->u.o.ovl_index == 0) + { + ++num_buf; + if (strncmp (s0->name, ".ovl.init", 9) != 0) + { + alloc_sec[ovl_index] = s0; + spu_elf_section_data (s0)->u.o.ovl_index = ++ovl_index; + spu_elf_section_data (s0)->u.o.ovl_buf = num_buf; + } + else + ovl_end = s->vma + s->size; + } + if (strncmp (s->name, ".ovl.init", 9) != 0) + { + alloc_sec[ovl_index] = s; + spu_elf_section_data (s)->u.o.ovl_index = ++ovl_index; + spu_elf_section_data (s)->u.o.ovl_buf = num_buf; + if (s0->vma != s->vma) + { + info->callbacks->einfo (_("%X%P: overlay sections %A " + "and %A do not start at the " + "same address.\n"), + s0, s); + bfd_set_error (bfd_error_bad_value); + return 0; + } + if (ovl_end < s->vma + s->size) + ovl_end = s->vma + s->size; + } } + else + ovl_end = s->vma + s->size; } - else - ovl_end = s->vma + s->size; } htab->num_overlays = ovl_index; htab->num_buf = num_buf; + htab->ovl_sec = alloc_sec; + if (ovl_index == 0) + return 1; + + for (i = 0; i < 2; i++) { - free (alloc_sec); - return FALSE; - } + const char *name; + struct elf_link_hash_entry *h; - alloc_sec = bfd_realloc (alloc_sec, num_buf * 2 * sizeof (*alloc_sec)); - if (alloc_sec == NULL) - return FALSE; + name = entry_names[i][htab->params->ovly_flavour]; + h = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE); + if (h == NULL) + return 0; - htab->ovl_region = alloc_sec; - return TRUE; + if (h->root.type == bfd_link_hash_new) + { + h->root.type = bfd_link_hash_undefined; + h->ref_regular = 1; + h->ref_regular_nonweak = 1; + h->non_elf = 0; + } + htab->ovly_entry[i] = h; + } + + return 2; } -/* One of these per stub. */ -#define SIZEOF_STUB1 8 -#define ILA_79 0x4200004f /* ila $79,function_address */ -#define BR 0x32000000 /* br stub2 */ +/* Non-zero to use bra in overlay stubs rather than br. */ +#define BRA_STUBS 0 -/* One of these per overlay. */ -#define SIZEOF_STUB2 8 -#define ILA_78 0x4200004e /* ila $78,overlay_number */ - /* br __ovly_load */ +#define BRA 0x30000000 +#define BRASL 0x31000000 +#define BR 0x32000000 +#define BRSL 0x33000000 #define NOP 0x40200000 +#define LNOP 0x00200000 +#define ILA 0x42000000 /* Return true for all relative and absolute branch instructions. bra 00110000 0.. @@ -698,6 +860,22 @@ is_branch (const unsigned char *insn) return (insn[0] & 0xec) == 0x20 && (insn[1] & 0x80) == 0; } +/* Return true for all indirect branch instructions. + bi 00110101 000 + bisl 00110101 001 + iret 00110101 010 + bisled 00110101 011 + biz 00100101 000 + binz 00100101 001 + bihz 00100101 010 + bihnz 00100101 011 */ + +static bfd_boolean +is_indirect_branch (const unsigned char *insn) +{ + return (insn[0] & 0xef) == 0x25 && (insn[1] & 0x80) == 0; +} + /* Return true for branch hint instructions. hbra 0001000.. hbrr 0001001.. */ @@ -708,170 +886,652 @@ is_hint (const unsigned char *insn) return (insn[0] & 0xfc) == 0x10; } -/* Return TRUE if this reloc symbol should possibly go via an overlay stub. */ +/* True if INPUT_SECTION might need overlay stubs. */ 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) +maybe_needs_stubs (asection *input_section) { - if (htab->num_overlays == 0) + /* No stubs for debug sections and suchlike. */ + if ((input_section->flags & SEC_ALLOC) == 0) return FALSE; - if (sym_sec == NULL - || sym_sec->output_section == NULL - || spu_elf_section_data (sym_sec->output_section) == NULL) + /* No stubs for link-once sections that will be discarded. */ + if (input_section->output_section == bfd_abs_section_ptr) 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) + /* Don't create stubs for .eh_frame references. */ + if (strcmp (input_section->name, ".eh_frame") == 0) 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; + return TRUE; } -struct stubarr { - struct bfd_hash_table *stub_hash_table; - struct spu_stub_hash_entry **sh; - unsigned int count; - int err; +enum _stub_type +{ + no_stub, + call_ovl_stub, + br000_ovl_stub, + br001_ovl_stub, + br010_ovl_stub, + br011_ovl_stub, + br100_ovl_stub, + br101_ovl_stub, + br110_ovl_stub, + br111_ovl_stub, + nonovl_stub, + stub_error }; -/* Called via elf_link_hash_traverse to allocate stubs for any _SPUEAR_ - symbols. */ +/* Return non-zero if this reloc symbol should go via an overlay stub. + Return 2 if the stub must be in non-overlay area. */ -static bfd_boolean -allocate_spuear_stubs (struct elf_link_hash_entry *h, void *inf) +static enum _stub_type +needs_ovl_stub (struct elf_link_hash_entry *h, + Elf_Internal_Sym *sym, + asection *sym_sec, + asection *input_section, + Elf_Internal_Rela *irela, + bfd_byte *contents, + struct bfd_link_info *info) { - /* 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 spu_link_hash_table *htab = spu_hash_table (info); + enum elf_spu_reloc_type r_type; + unsigned int sym_type; + bfd_boolean branch, hint, call; + enum _stub_type ret = no_stub; + bfd_byte insn[4]; + + if (sym_sec == NULL + || sym_sec->output_section == bfd_abs_section_ptr + || spu_elf_section_data (sym_sec->output_section) == NULL) + return ret; + + if (h != NULL) { - 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; + /* Ensure no stubs for user supplied overlay manager syms. */ + if (h == htab->ovly_entry[0] || h == htab->ovly_entry[1]) + return ret; + + /* 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 (h->root.root.string, "setjmp", 6) == 0 + && (h->root.root.string[6] == '\0' || h->root.root.string[6] == '@')) + ret = call_ovl_stub; + } - if (stub_name == NULL) - { - stubs->err = 1; - return FALSE; - } + if (h != NULL) + sym_type = h->type; + else + sym_type = ELF_ST_TYPE (sym->st_info); - sh = (struct spu_stub_hash_entry *) - bfd_hash_lookup (stubs->stub_hash_table, stub_name, TRUE, FALSE); - if (sh == NULL) + r_type = ELF32_R_TYPE (irela->r_info); + branch = FALSE; + hint = FALSE; + call = FALSE; + if (r_type == R_SPU_REL16 || r_type == R_SPU_ADDR16) + { + if (contents == NULL) { - free (stub_name); - return FALSE; + contents = insn; + if (!bfd_get_section_contents (input_section->owner, + input_section, + contents, + irela->r_offset, 4)) + return stub_error; } + else + contents += irela->r_offset; - /* If this entry isn't new, we already have a stub. */ - if (sh->target_section != NULL) + branch = is_branch (contents); + hint = is_hint (contents); + if (branch || hint) { - 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; -} + call = (contents[0] & 0xfd) == 0x31; + if (call + && sym_type != STT_FUNC + && contents != insn) + { + /* 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 initialisations. */ + const char *sym_name; -/* Called via bfd_hash_traverse to set up pointers to all symbols - in the stub hash table. */ + if (h != NULL) + sym_name = h->root.root.string; + else + { + Elf_Internal_Shdr *symtab_hdr; + symtab_hdr = &elf_tdata (input_section->owner)->symtab_hdr; + sym_name = bfd_elf_sym_name (input_section->owner, + symtab_hdr, + sym, + sym_sec); + } + (*_bfd_error_handler) (_("warning: call to non-function" + " symbol %s defined in %B"), + sym_sec->owner, sym_name); -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; -} + if ((!branch && htab->params->ovly_flavour == ovly_soft_icache) + || (sym_type != STT_FUNC + && !(branch || hint) + && (sym_sec->flags & SEC_CODE) == 0)) + return no_stub; -/* qsort predicate to sort stubs by overlay number. */ + /* Usually, symbols in non-overlay sections don't need stubs. */ + if (spu_elf_section_data (sym_sec->output_section)->u.o.ovl_index == 0 + && !htab->params->non_overlay_stubs) + return ret; -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; + /* 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)->u.o.ovl_index + != spu_elf_section_data (input_section->output_section)->u.o.ovl_index) + { + unsigned int lrlive = 0; + if (branch) + lrlive = (contents[1] & 0x70) >> 4; - 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; + if (!lrlive && (call || sym_type == STT_FUNC)) + ret = call_ovl_stub; + else + ret = br000_ovl_stub + lrlive; + } - 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; + /* If this insn isn't a branch then we are possibly taking the + address of a function and passing it out somehow. Soft-icache code + always generates inline code to do indirect branches. */ + if (!(branch || hint) + && sym_type == STT_FUNC + && htab->params->ovly_flavour != ovly_soft_icache) + ret = nonovl_stub; - /* Two functions at the same address. Aliases perhaps. */ - i = strcmp ((*sb)->root.string, (*sa)->root.string); - BFD_ASSERT (i != 0); - return i; + return ret; } -/* 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) +static bfd_boolean +count_stub (struct spu_link_hash_table *htab, + bfd *ibfd, + asection *isec, + enum _stub_type stub_type, + struct elf_link_hash_entry *h, + const Elf_Internal_Rela *irela) +{ + unsigned int ovl = 0; + struct got_entry *g, **head; + bfd_vma addend; + + /* If this instruction is a branch or call, we need a stub + for it. One stub per function per overlay. + If it isn't a branch, then we are taking the address of + this function so need a stub in the non-overlay area + for it. One stub per function. */ + if (stub_type != nonovl_stub) + ovl = spu_elf_section_data (isec->output_section)->u.o.ovl_index; + + if (h != NULL) + head = &h->got.glist; + else + { + if (elf_local_got_ents (ibfd) == NULL) + { + bfd_size_type amt = (elf_tdata (ibfd)->symtab_hdr.sh_info + * sizeof (*elf_local_got_ents (ibfd))); + elf_local_got_ents (ibfd) = bfd_zmalloc (amt); + if (elf_local_got_ents (ibfd) == NULL) + return FALSE; + } + head = elf_local_got_ents (ibfd) + ELF32_R_SYM (irela->r_info); + } + + if (htab->params->ovly_flavour == ovly_soft_icache) + { + htab->stub_count[ovl] += 1; + return TRUE; + } + + addend = 0; + if (irela != NULL) + addend = irela->r_addend; + + if (ovl == 0) + { + struct got_entry *gnext; + + for (g = *head; g != NULL; g = g->next) + if (g->addend == addend && g->ovl == 0) + break; + + if (g == NULL) + { + /* Need a new non-overlay area stub. Zap other stubs. */ + for (g = *head; g != NULL; g = gnext) + { + gnext = g->next; + if (g->addend == addend) + { + htab->stub_count[g->ovl] -= 1; + free (g); + } + } + } + } + else + { + for (g = *head; g != NULL; g = g->next) + if (g->addend == addend && (g->ovl == ovl || g->ovl == 0)) + break; + } + + if (g == NULL) + { + g = bfd_malloc (sizeof *g); + if (g == NULL) + return FALSE; + g->ovl = ovl; + g->addend = addend; + g->stub_addr = (bfd_vma) -1; + g->next = *head; + *head = g; + + htab->stub_count[ovl] += 1; + } + + return TRUE; +} + +/* Support two sizes of overlay stubs, a slower more compact stub of two + intructions, and a faster stub of four instructions. + Soft-icache stubs are four or eight words. */ + +static unsigned int +ovl_stub_size (struct spu_elf_params *params) +{ + return 16 << params->ovly_flavour >> params->compact_stub; +} + +static unsigned int +ovl_stub_size_log2 (struct spu_elf_params *params) +{ + return 4 + params->ovly_flavour - params->compact_stub; +} + +/* Two instruction overlay stubs look like: + + brsl $75,__ovly_load + .word target_ovl_and_address + + ovl_and_address is a word with the overlay number in the top 14 bits + and local store address in the bottom 18 bits. + + Four instruction overlay stubs look like: + + ila $78,ovl_number + lnop + ila $79,target_address + br __ovly_load + + Software icache stubs are: + + .word target_index + .word target_ia; + .word lrlive_branchlocalstoreaddr; + brasl $75,__icache_br_handler + .quad xor_pattern +*/ + +static bfd_boolean +build_stub (struct bfd_link_info *info, + bfd *ibfd, + asection *isec, + enum _stub_type stub_type, + struct elf_link_hash_entry *h, + const Elf_Internal_Rela *irela, + bfd_vma dest, + asection *dest_sec) +{ + struct spu_link_hash_table *htab = spu_hash_table (info); + unsigned int ovl, dest_ovl, set_id; + struct got_entry *g, **head; + asection *sec; + bfd_vma addend, from, to, br_dest, patt; + unsigned int lrlive; + + ovl = 0; + if (stub_type != nonovl_stub) + ovl = spu_elf_section_data (isec->output_section)->u.o.ovl_index; + + if (h != NULL) + head = &h->got.glist; + else + head = elf_local_got_ents (ibfd) + ELF32_R_SYM (irela->r_info); + + addend = 0; + if (irela != NULL) + addend = irela->r_addend; + + if (htab->params->ovly_flavour == ovly_soft_icache) + { + g = bfd_malloc (sizeof *g); + if (g == NULL) + return FALSE; + g->ovl = ovl; + g->br_addr = 0; + if (irela != NULL) + g->br_addr = (irela->r_offset + + isec->output_offset + + isec->output_section->vma); + g->next = *head; + *head = g; + } + else + { + for (g = *head; g != NULL; g = g->next) + if (g->addend == addend && (g->ovl == ovl || g->ovl == 0)) + break; + if (g == NULL) + abort (); + + if (g->ovl == 0 && ovl != 0) + return TRUE; + + if (g->stub_addr != (bfd_vma) -1) + return TRUE; + } + + sec = htab->stub_sec[ovl]; + dest += dest_sec->output_offset + dest_sec->output_section->vma; + from = sec->size + sec->output_offset + sec->output_section->vma; + g->stub_addr = from; + to = (htab->ovly_entry[0]->root.u.def.value + + htab->ovly_entry[0]->root.u.def.section->output_offset + + htab->ovly_entry[0]->root.u.def.section->output_section->vma); + + if (((dest | to | from) & 3) != 0) + { + htab->stub_err = 1; + return FALSE; + } + dest_ovl = spu_elf_section_data (dest_sec->output_section)->u.o.ovl_index; + + if (htab->params->ovly_flavour == ovly_normal + && !htab->params->compact_stub) + { + bfd_put_32 (sec->owner, ILA + ((dest_ovl << 7) & 0x01ffff80) + 78, + sec->contents + sec->size); + bfd_put_32 (sec->owner, LNOP, + sec->contents + sec->size + 4); + bfd_put_32 (sec->owner, ILA + ((dest << 7) & 0x01ffff80) + 79, + sec->contents + sec->size + 8); + if (!BRA_STUBS) + bfd_put_32 (sec->owner, BR + (((to - (from + 12)) << 5) & 0x007fff80), + sec->contents + sec->size + 12); + else + bfd_put_32 (sec->owner, BRA + ((to << 5) & 0x007fff80), + sec->contents + sec->size + 12); + } + else if (htab->params->ovly_flavour == ovly_normal + && htab->params->compact_stub) + { + if (!BRA_STUBS) + bfd_put_32 (sec->owner, BRSL + (((to - from) << 5) & 0x007fff80) + 75, + sec->contents + sec->size); + else + bfd_put_32 (sec->owner, BRASL + ((to << 5) & 0x007fff80) + 75, + sec->contents + sec->size); + bfd_put_32 (sec->owner, (dest & 0x3ffff) | (dest_ovl << 18), + sec->contents + sec->size + 4); + } + else if (htab->params->ovly_flavour == ovly_soft_icache + && htab->params->compact_stub) + { + lrlive = 0; + if (stub_type == nonovl_stub) + ; + else if (stub_type == call_ovl_stub) + /* A brsl makes lr live and *(*sp+16) is live. + Tail calls have the same liveness. */ + lrlive = 5; + else if (!htab->params->lrlive_analysis) + /* Assume stack frame and lr save. */ + lrlive = 1; + else if (irela != NULL) + { + /* Analyse branch instructions. */ + struct function_info *caller; + bfd_vma off; + + caller = find_function (isec, irela->r_offset, info); + if (caller->start == NULL) + off = irela->r_offset; + else + { + struct function_info *found = NULL; + + /* Find the earliest piece of this function that + has frame adjusting instructions. We might + see dynamic frame adjustment (eg. for alloca) + in some later piece, but functions using + alloca always set up a frame earlier. Frame + setup instructions are always in one piece. */ + if (caller->lr_store != (bfd_vma) -1 + || caller->sp_adjust != (bfd_vma) -1) + found = caller; + while (caller->start != NULL) + { + caller = caller->start; + if (caller->lr_store != (bfd_vma) -1 + || caller->sp_adjust != (bfd_vma) -1) + found = caller; + } + if (found != NULL) + caller = found; + off = (bfd_vma) -1; + } + + if (off > caller->sp_adjust) + { + if (off > caller->lr_store) + /* Only *(*sp+16) is live. */ + lrlive = 1; + else + /* If no lr save, then we must be in a + leaf function with a frame. + lr is still live. */ + lrlive = 4; + } + else if (off > caller->lr_store) + { + /* Between lr save and stack adjust. */ + lrlive = 3; + /* This should never happen since prologues won't + be split here. */ + BFD_ASSERT (0); + } + else + /* On entry to function. */ + lrlive = 5; + + if (stub_type != br000_ovl_stub + && lrlive != stub_type - br000_ovl_stub) + info->callbacks->einfo (_("%A:0x%v lrlive .brinfo (%u) differs " + "from analysis (%u)\n"), + isec, irela->r_offset, lrlive, + stub_type - br000_ovl_stub); + } + + /* If given lrlive info via .brinfo, use it. */ + if (stub_type > br000_ovl_stub) + lrlive = stub_type - br000_ovl_stub; + + if (ovl == 0) + to = (htab->ovly_entry[1]->root.u.def.value + + htab->ovly_entry[1]->root.u.def.section->output_offset + + htab->ovly_entry[1]->root.u.def.section->output_section->vma); + + /* The branch that uses this stub goes to stub_addr + 4. We'll + set up an xor pattern that can be used by the icache manager + to modify this branch to go directly to its destination. */ + g->stub_addr += 4; + br_dest = g->stub_addr; + if (irela == NULL) + { + /* Except in the case of _SPUEAR_ stubs, the branch in + question is the one in the stub itself. */ + BFD_ASSERT (stub_type == nonovl_stub); + g->br_addr = g->stub_addr; + br_dest = to; + } + + set_id = ((dest_ovl - 1) >> htab->num_lines_log2) + 1; + bfd_put_32 (sec->owner, (set_id << 18) | (dest & 0x3ffff), + sec->contents + sec->size); + bfd_put_32 (sec->owner, BRASL + ((to << 5) & 0x007fff80) + 75, + sec->contents + sec->size + 4); + bfd_put_32 (sec->owner, (lrlive << 29) | (g->br_addr & 0x3ffff), + sec->contents + sec->size + 8); + patt = dest ^ br_dest; + if (irela != NULL && ELF32_R_TYPE (irela->r_info) == R_SPU_REL16) + patt = (dest - g->br_addr) ^ (br_dest - g->br_addr); + bfd_put_32 (sec->owner, (patt << 5) & 0x007fff80, + sec->contents + sec->size + 12); + + if (ovl == 0) + /* Extra space for linked list entries. */ + sec->size += 16; + } + else + abort (); + + sec->size += ovl_stub_size (htab->params); + + if (htab->params->emit_stub_syms) + { + size_t len; + char *name; + int add; + + len = 8 + sizeof (".ovl_call.") - 1; + if (h != NULL) + len += strlen (h->root.root.string); + else + len += 8 + 1 + 8; + add = 0; + if (irela != NULL) + add = (int) irela->r_addend & 0xffffffff; + if (add != 0) + len += 1 + 8; + name = bfd_malloc (len); + if (name == NULL) + return FALSE; + + sprintf (name, "%08x.ovl_call.", g->ovl); + if (h != NULL) + strcpy (name + 8 + sizeof (".ovl_call.") - 1, h->root.root.string); + else + sprintf (name + 8 + sizeof (".ovl_call.") - 1, "%x:%x", + dest_sec->id & 0xffffffff, + (int) ELF32_R_SYM (irela->r_info) & 0xffffffff); + if (add != 0) + sprintf (name + len - 9, "+%x", add); + + 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->size = ovl_stub_size (htab->params); + h->root.u.def.value = sec->size - h->size; + 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; +} + +/* 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. */ + struct bfd_link_info *info = inf; + struct spu_link_hash_table *htab = spu_hash_table (info); + asection *sym_sec; + + 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 + && (sym_sec = h->root.u.def.section) != NULL + && sym_sec->output_section != bfd_abs_section_ptr + && spu_elf_section_data (sym_sec->output_section) != NULL + && (spu_elf_section_data (sym_sec->output_section)->u.o.ovl_index != 0 + || htab->params->non_overlay_stubs)) + { + return count_stub (htab, NULL, NULL, nonovl_stub, h, NULL); + } + + return TRUE; +} + +static bfd_boolean +build_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. */ + struct bfd_link_info *info = inf; + struct spu_link_hash_table *htab = spu_hash_table (info); + asection *sym_sec; + + 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 + && (sym_sec = h->root.u.def.section) != NULL + && sym_sec->output_section != bfd_abs_section_ptr + && spu_elf_section_data (sym_sec->output_section) != NULL + && (spu_elf_section_data (sym_sec->output_section)->u.o.ovl_index != 0 + || htab->params->non_overlay_stubs)) + { + return build_stub (info, NULL, NULL, nonovl_stub, h, NULL, + h->root.u.def.value, sym_sec); + } + + return TRUE; +} + +/* Size or build stubs. */ + +static bfd_boolean +process_stubs (struct bfd_link_info *info, bfd_boolean build) { 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; + asection *isec; Elf_Internal_Sym *local_syms = NULL; - void *psyms; if (ibfd->xvec != &bfd_elf32_spu_vec) continue; @@ -881,39 +1541,28 @@ spu_elf_size_stubs (bfd *output_bfd, 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) + for (isec = ibfd->sections; isec != NULL; isec = isec->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) + if ((isec->flags & SEC_RELOC) == 0 + || isec->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) + if (!maybe_needs_stubs (isec)) continue; /* Get the relocs. */ - internal_relocs - = _bfd_elf_link_read_relocs (ibfd, section, NULL, NULL, - info->keep_memory); + internal_relocs = _bfd_elf_link_read_relocs (ibfd, isec, 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; + irelaend = irela + isec->reloc_count; for (; irela < irelaend; irela++) { enum elf_spu_reloc_type r_type; @@ -921,11 +1570,7 @@ spu_elf_size_stubs (bfd *output_bfd, 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; + enum _stub_type stub_type; r_type = ELF32_R_TYPE (irela->r_info); r_indx = ELF32_R_SYM (irela->r_info); @@ -933,116 +1578,59 @@ spu_elf_size_stubs (bfd *output_bfd, if (r_type >= R_SPU_max) { bfd_set_error (bfd_error_bad_value); - goto error_ret_free_internal; + error_ret_free_internal: + if (elf_section_data (isec)->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; } /* Determine the reloc target section. */ - if (!get_sym_h (&h, &sym, &sym_sec, psyms, r_indx, ibfd)) + if (!get_sym_h (&h, &sym, &sym_sec, &local_syms, 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)) + stub_type = needs_ovl_stub (h, sym, sym_sec, isec, irela, + NULL, info); + if (stub_type == no_stub) continue; + else if (stub_type == stub_error) + goto error_ret_free_internal; - insn_type = non_branch; - if (r_type == R_SPU_REL16 - || r_type == R_SPU_ADDR16) + if (htab->stub_count == NULL) { - unsigned char insn[4]; - - if (!bfd_get_section_contents (ibfd, section, insn, - irela->r_offset, 4)) + bfd_size_type amt; + amt = (htab->num_overlays + 1) * sizeof (*htab->stub_count); + htab->stub_count = bfd_zmalloc (amt); + if (htab->stub_count == NULL) 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) + if (!build) { - sym_type = h->type; - sym_name = h->root.root.string; + if (!count_stub (htab, ibfd, isec, stub_type, h, irela)) + goto error_ret_free_internal; } 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; - } + bfd_vma dest; - /* If this entry isn't new, we already have a stub. */ - if (sh->target_section != NULL) - { - free (stub_name); - continue; + if (h != NULL) + dest = h->root.u.def.value; + else + dest = sym->st_value; + dest += irela->r_addend; + if (!build_stub (info, ibfd, isec, stub_type, h, irela, + dest, sym_sec)) + goto error_ret_free_internal; } - - 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) + if (elf_section_data (isec)->relocs != internal_relocs) free (internal_relocs); } @@ -1056,115 +1644,166 @@ spu_elf_size_stubs (bfd *output_bfd, } } - elf_link_hash_traverse (&htab->elf, allocate_spuear_stubs, &stubs); - if (stubs.err) - return FALSE; + return TRUE; +} - *stub = NULL; - if (stubs.count == 0) - return TRUE; +/* Allocate space for overlay call and return stubs. + Return 0 on error, 1 if no overlays, 2 otherwise. */ - 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; +int +spu_elf_size_stubs (struct bfd_link_info *info) +{ + struct spu_link_hash_table *htab; + bfd *ibfd; + bfd_size_type amt; + flagword flags; + unsigned int i; + asection *stub; - 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; + if (!process_stubs (info, FALSE)) + return 0; - *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; + htab = spu_hash_table (info); + elf_link_hash_traverse (&htab->elf, allocate_spuear_stubs, info); + if (htab->stub_err) + return 0; - /* 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; + ibfd = info->input_bfds; + if (htab->stub_count != NULL) + { + amt = (htab->num_overlays + 1) * sizeof (*htab->stub_sec); + htab->stub_sec = bfd_zmalloc (amt); + if (htab->stub_sec == NULL) + return 0; + + flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY + | SEC_HAS_CONTENTS | SEC_IN_MEMORY); + stub = bfd_make_section_anyway_with_flags (ibfd, ".stub", flags); + htab->stub_sec[0] = stub; + if (stub == NULL + || !bfd_set_section_alignment (ibfd, stub, + ovl_stub_size_log2 (htab->params))) + return 0; + stub->size = htab->stub_count[0] * ovl_stub_size (htab->params); + if (htab->params->ovly_flavour == ovly_soft_icache) + /* Extra space for linked list entries. */ + stub->size += htab->stub_count[0] * 16; + + for (i = 0; i < htab->num_overlays; ++i) + { + asection *osec = htab->ovl_sec[i]; + unsigned int ovl = spu_elf_section_data (osec)->u.o.ovl_index; + stub = bfd_make_section_anyway_with_flags (ibfd, ".stub", flags); + htab->stub_sec[ovl] = stub; + if (stub == NULL + || !bfd_set_section_alignment (ibfd, stub, + ovl_stub_size_log2 (htab->params))) + return 0; + stub->size = htab->stub_count[ovl] * ovl_stub_size (htab->params); } - 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 * + if (htab->params->ovly_flavour == ovly_soft_icache) + { + /* Space for icache manager tables. + a) Tag array, one quadword per cache line. + b) Rewrite "to" list, one quadword per cache line. + c) Rewrite "from" list, one byte per outgoing branch (rounded up to + a power-of-two number of full quadwords) per cache line. */ + + flags = SEC_ALLOC; + htab->ovtab = bfd_make_section_anyway_with_flags (ibfd, ".ovtab", flags); + if (htab->ovtab == NULL + || !bfd_set_section_alignment (ibfd, htab->ovtab, 4)) + return 0; + + htab->ovtab->size = (16 + 16 + (16 << htab->fromelem_size_log2)) + << htab->num_lines_log2; + + flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY; + htab->init = bfd_make_section_anyway_with_flags (ibfd, ".ovini", flags); + if (htab->init == NULL + || !bfd_set_section_alignment (ibfd, htab->init, 4)) + return 0; + + htab->init->size = 16; + } + else if (htab->stub_count == NULL) + return 1; + else + { + /* htab->ovtab consists of two arrays. + . struct { + . u32 vma; + . u32 size; + . u32 file_off; + . u32 buf; + . } _ovly_table[]; + . + . struct { + . u32 mapped; + . } _ovly_buf_table[]; + . */ + + flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY; + htab->ovtab = bfd_make_section_anyway_with_flags (ibfd, ".ovtab", flags); + if (htab->ovtab == NULL + || !bfd_set_section_alignment (ibfd, htab->ovtab, 4)) + return 0; + + htab->ovtab->size = htab->num_overlays * 16 + 16 + htab->num_buf * 4; + } + + htab->toe = bfd_make_section_anyway_with_flags (ibfd, ".toe", SEC_ALLOC); + if (htab->toe == NULL + || !bfd_set_section_alignment (ibfd, htab->toe, 4)) + return 0; + htab->toe->size = 16; + + return 2; +} + +/* Called from ld to place overlay manager data sections. This is done + after the overlay manager itself is loaded, mainly so that the + linker's htab->init section is placed after any other .ovl.init + sections. */ + +void +spu_elf_place_overlay_data (struct bfd_link_info *info) +{ + struct spu_link_hash_table *htab = spu_hash_table (info); + unsigned int i; + + if (htab->stub_sec != NULL) + { + (*htab->params->place_spu_section) (htab->stub_sec[0], NULL, ".text"); + + for (i = 0; i < htab->num_overlays; ++i) + { + asection *osec = htab->ovl_sec[i]; + unsigned int ovl = spu_elf_section_data (osec)->u.o.ovl_index; + (*htab->params->place_spu_section) (htab->stub_sec[ovl], osec, NULL); + } + } + + if (htab->params->ovly_flavour == ovly_soft_icache) + (*htab->params->place_spu_section) (htab->init, NULL, ".ovl.init"); + + if (htab->ovtab != NULL) + { + const char *ovout = ".data"; + if (htab->params->ovly_flavour == ovly_soft_icache) + ovout = ".bss"; + (*htab->params->place_spu_section) (htab->ovtab, NULL, ovout); + } + + if (htab->toe != NULL) + (*htab->params->place_spu_section) (htab->toe, NULL, ".toe"); +} + +/* Functions to handle embedded spu_ovl.o object. */ + +static void * ovl_mgr_open (struct bfd *nbfd ATTRIBUTE_UNUSED, void *stream) { return stream; @@ -1208,84 +1847,13 @@ spu_elf_open_builtin_lib (bfd **ovl_bfd, const struct _ovl_stream *stream) 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) +static unsigned int +overlay_index (asection *sec) { - 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; + if (sec == NULL + || sec->output_section == bfd_abs_section_ptr) + return 0; + return spu_elf_section_data (sec->output_section)->u.o.ovl_index; } /* Define an STT_OBJECT symbol. */ @@ -1310,7 +1878,7 @@ define_ovtab_symbol (struct spu_link_hash_table *htab, const char *name) h->ref_regular_nonweak = 1; h->non_elf = 0; } - else + else if (h->root.u.def.section->owner != NULL) { (*_bfd_error_handler) (_("%B is not allowed to define %s"), h->root.u.def.section->owner, @@ -1318,14 +1886,21 @@ define_ovtab_symbol (struct spu_link_hash_table *htab, const char *name) bfd_set_error (bfd_error_bad_value); return NULL; } + else + { + (*_bfd_error_handler) (_("you are not allowed to define %s in a script"), + 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) +static bfd_boolean +spu_elf_build_stubs (struct bfd_link_info *info) { struct spu_link_hash_table *htab = spu_hash_table (info); struct elf_link_hash_entry *h; @@ -1334,129 +1909,282 @@ spu_elf_build_stubs (struct bfd_link_info *info, int emit_syms, asection *toe) 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 + if (htab->num_overlays != 0) + { + for (i = 0; i < 2; i++) + { + h = htab->ovly_entry[i]; + if (h != NULL && (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) - && h->def_regular); + && h->def_regular) + { + s = h->root.u.def.section->output_section; + if (spu_elf_section_data (s)->u.o.ovl_index) + { + (*_bfd_error_handler) (_("%s in overlay section"), + h->root.root.string); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + } + } + } - s = h->root.u.def.section->output_section; - if (spu_elf_section_data (s)->ovl_index) + if (htab->stub_sec != NULL) { - (*_bfd_error_handler) (_("%s in overlay section"), - h->root.u.def.section->owner); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } + for (i = 0; i <= htab->num_overlays; i++) + if (htab->stub_sec[i]->size != 0) + { + htab->stub_sec[i]->contents = bfd_zalloc (htab->stub_sec[i]->owner, + htab->stub_sec[i]->size); + if (htab->stub_sec[i]->contents == NULL) + return FALSE; + htab->stub_sec[i]->rawsize = htab->stub_sec[i]->size; + htab->stub_sec[i]->size = 0; + } - /* Write out all the stubs. */ - bfd_hash_traverse (&htab->stub_hash_table, write_one_stub, htab); + /* Fill in all the stubs. */ + process_stubs (info, TRUE); + if (!htab->stub_err) + elf_link_hash_traverse (&htab->elf, build_spuear_stubs, info); - if (htab->stub_overflow) - { - (*_bfd_error_handler) (_("overlay stub relocation overflow")); - bfd_set_error (bfd_error_bad_value); - return FALSE; + if (htab->stub_err) + { + (*_bfd_error_handler) (_("overlay stub relocation overflow")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + for (i = 0; i <= htab->num_overlays; i++) + { + if (htab->stub_sec[i]->size != htab->stub_sec[i]->rawsize) + { + (*_bfd_error_handler) (_("stubs don't match calculated size")); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + htab->stub_sec[i]->rawsize = 0; + } } + if (htab->ovtab == NULL || htab->ovtab->size == 0) + return TRUE; + 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) + if (htab->params->ovly_flavour == ovly_soft_icache) { - unsigned int ovl_index = spu_elf_section_data (s)->ovl_index; + bfd_vma off; + + h = define_ovtab_symbol (htab, "__icache_tag_array"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 0; + h->size = 16 << htab->num_lines_log2; + off = h->size; + + h = define_ovtab_symbol (htab, "__icache_tag_array_size"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 16 << htab->num_lines_log2; + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_rewrite_to"); + if (h == NULL) + return FALSE; + h->root.u.def.value = off; + h->size = 16 << htab->num_lines_log2; + off += h->size; + + h = define_ovtab_symbol (htab, "__icache_rewrite_to_size"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 16 << htab->num_lines_log2; + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_rewrite_from"); + if (h == NULL) + return FALSE; + h->root.u.def.value = off; + h->size = 16 << (htab->fromelem_size_log2 + htab->num_lines_log2); + off += h->size; + + h = define_ovtab_symbol (htab, "__icache_rewrite_from_size"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 16 << (htab->fromelem_size_log2 + + htab->num_lines_log2); + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_log2_fromelemsize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = htab->fromelem_size_log2; + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_base"); + if (h == NULL) + return FALSE; + h->root.u.def.value = htab->ovl_sec[0]->vma; + h->root.u.def.section = bfd_abs_section_ptr; + h->size = htab->num_buf << htab->line_size_log2; + + h = define_ovtab_symbol (htab, "__icache_linesize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 1 << htab->line_size_log2; + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_log2_linesize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = htab->line_size_log2; + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_neg_log2_linesize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = -htab->line_size_log2; + h->root.u.def.section = bfd_abs_section_ptr; - if (ovl_index != 0) + h = define_ovtab_symbol (htab, "__icache_cachesize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 1 << (htab->num_lines_log2 + htab->line_size_log2); + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_log2_cachesize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = htab->num_lines_log2 + htab->line_size_log2; + h->root.u.def.section = bfd_abs_section_ptr; + + h = define_ovtab_symbol (htab, "__icache_neg_log2_cachesize"); + if (h == NULL) + return FALSE; + h->root.u.def.value = -(htab->num_lines_log2 + htab->line_size_log2); + h->root.u.def.section = bfd_abs_section_ptr; + + if (htab->init != NULL && htab->init->size != 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. */ + htab->init->contents = bfd_zalloc (htab->init->owner, + htab->init->size); + if (htab->init->contents == NULL) + return FALSE; - 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); + h = define_ovtab_symbol (htab, "__icache_fileoff"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 0; + h->root.u.def.section = htab->init; + h->size = 8; } } - - /* Write out _ovly_buf_table. */ - p = htab->ovtab->contents + htab->num_overlays * 16; - for (i = 0; i < htab->num_buf; i++) + else { - bfd_put_32 (htab->ovtab->owner, 0, p); - p += 4; - } + /* Write out _ovly_table. */ + /* set low bit of .size to mark non-overlay area as present. */ + p[7] = 1; + obfd = htab->ovtab->output_section->owner; + for (s = obfd->sections; s != NULL; s = s->next) + { + unsigned int ovl_index = spu_elf_section_data (s)->u.o.ovl_index; - h = define_ovtab_symbol (htab, "_ovly_table"); - if (h == NULL) - return FALSE; - h->root.u.def.value = 0; - h->size = htab->num_overlays * 16; + if (ovl_index != 0) + { + unsigned long off = ovl_index * 16; + unsigned int ovl_buf = spu_elf_section_data (s)->u.o.ovl_buf; + + 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. */ + bfd_put_32 (htab->ovtab->owner, ovl_buf, p + off + 12); + } + } - 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_table"); + if (h == NULL) + return FALSE; + h->root.u.def.value = 16; + h->size = htab->num_overlays * 16; - 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_table_end"); + if (h == NULL) + return FALSE; + h->root.u.def.value = htab->num_overlays * 16 + 16; + h->size = 0; - 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, "_ovly_buf_table"); + if (h == NULL) + return FALSE; + h->root.u.def.value = htab->num_overlays * 16 + 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 + 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.section = htab->toe; h->root.u.def.value = 0; h->size = 16; return TRUE; } +/* Check that all loadable section VMAs lie in the range + LO .. HI inclusive, and stash some parameters for --auto-overlay. */ + +asection * +spu_elf_check_vma (struct bfd_link_info *info) +{ + struct elf_segment_map *m; + unsigned int i; + struct spu_link_hash_table *htab = spu_hash_table (info); + bfd *abfd = info->output_bfd; + bfd_vma hi = htab->params->local_store_hi; + bfd_vma lo = htab->params->local_store_lo; + + htab->local_store = hi + 1 - lo; + + 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; +} + /* OFFSET in SEC (presumably) is the beginning of a function prologue. - Search for stack adjusting insns, and return the sp delta. */ + Search for stack adjusting insns, and return the sp delta. + If a store of lr is found save the instruction offset to *LR_STORE. + If a stack adjusting instruction is found, save that offset to + *SP_ADJUST. */ static int -find_function_stack_adjust (asection *sec, bfd_vma offset) +find_function_stack_adjust (asection *sec, + bfd_vma offset, + bfd_vma *lr_store, + bfd_vma *sp_adjust) { - int unrecog; int reg[128]; memset (reg, 0, sizeof (reg)); - for (unrecog = 0; offset + 4 <= sec->size && unrecog < 32; offset += 4) + for ( ; offset + 4 <= sec->size; offset += 4) { unsigned char buf[4]; int rt, ra; @@ -1466,11 +2194,16 @@ find_function_stack_adjust (asection *sec, bfd_vma offset) 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); + + if (buf[0] == 0x24 /* stqd */) + { + if (rt == 0 /* lr */ && ra == 1 /* sp */) + *lr_store = offset; + continue; + } + /* Partly decoded immediate field. */ imm = (buf[1] << 9) | (buf[2] << 1) | (buf[3] >> 7); @@ -1482,8 +2215,9 @@ find_function_stack_adjust (asection *sec, bfd_vma offset) if (rt == 1 /* sp */) { - if (imm > 0) + if (reg[rt] > 0) break; + *sp_adjust = offset; return reg[rt]; } } @@ -1493,7 +2227,25 @@ find_function_stack_adjust (asection *sec, bfd_vma offset) reg[rt] = reg[ra] + reg[rb]; if (rt == 1) - return reg[rt]; + { + if (reg[rt] > 0) + break; + *sp_adjust = offset; + return reg[rt]; + } + } + else if (buf[0] == 0x08 && (buf[1] & 0xe0) == 0 /* sf */) + { + int rb = ((buf[1] & 0x1f) << 2) | ((buf[2] & 0xc0) >> 6); + + reg[rt] = reg[rb] - reg[ra]; + if (rt == 1) + { + if (reg[rt] > 0) + break; + *sp_adjust = offset; + return reg[rt]; + } } else if ((buf[0] & 0xfc) == 0x40 /* il, ilh, ilhu, ila */) { @@ -1506,7 +2258,7 @@ find_function_stack_adjust (asection *sec, bfd_vma offset) if (buf[0] == 0x40 /* il */) { if ((buf[1] & 0x80) == 0) - goto unknown_insn; + continue; imm = (imm ^ 0x8000) - 0x8000; } else if ((buf[1] & 0x80) == 0 /* ilhu */) @@ -1527,18 +2279,33 @@ find_function_stack_adjust (asection *sec, bfd_vma offset) reg[rt] = reg[ra] | imm; continue; } - else if ((buf[0] == 0x33 && imm == 1 /* brsl .+4 */) - || (buf[0] == 0x08 && (buf[1] & 0xe0) == 0 /* sf */)) + else if (buf[0] == 0x32 && (buf[1] & 0x80) != 0 /* fsmbi */) + { + reg[rt] = ( ((imm & 0x8000) ? 0xff000000 : 0) + | ((imm & 0x4000) ? 0x00ff0000 : 0) + | ((imm & 0x2000) ? 0x0000ff00 : 0) + | ((imm & 0x1000) ? 0x000000ff : 0)); + continue; + } + else if (buf[0] == 0x16 /* andbi */) + { + imm >>= 7; + imm &= 0xff; + imm |= imm << 8; + imm |= imm << 16; + reg[rt] = reg[ra] & imm; + continue; + } + else if (buf[0] == 0x33 && imm == 1 /* brsl .+4 */) { - /* Used in pic reg load. Say rt is trashed. */ + /* Used in pic reg load. Say rt is trashed. Won't be used + in stack adjust, but we need to continue past this branch. */ reg[rt] = 0; continue; } - else if (is_branch (buf)) + else if (is_branch (buf) || is_indirect_branch (buf)) /* If we hit a branch then we must be out of the prologue. */ break; - unknown_insn: - ++unrecog; } return 0; @@ -1574,68 +2341,21 @@ sort_syms (const void *a, const void *b) return *s1 < *s2 ? -1 : 1; } -struct call_info -{ - struct function_info *fun; - struct call_info *next; - int is_tail; -}; +/* Allocate a struct spu_elf_stack_info with MAX_FUN struct function_info + entries for section SEC. */ -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) +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; + sec_data->u.i.stack_info = bfd_zmalloc (amt); + if (sec_data->u.i.stack_info != NULL) + sec_data->u.i.stack_info->max_fun = max_fun; + return sec_data->u.i.stack_info; } /* Add a new struct function_info describing a (part of a) function @@ -1648,7 +2368,7 @@ maybe_insert_function (asection *sec, 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; + struct spu_elf_stack_info *sinfo = sec_data->u.i.stack_info; int i; bfd_vma off, size; @@ -1697,10 +2417,7 @@ maybe_insert_function (asection *sec, 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) + if (sinfo->num_fun >= sinfo->max_fun) { bfd_size_type amt = sizeof (struct spu_elf_stack_info); bfd_size_type old = amt; @@ -1712,8 +2429,12 @@ maybe_insert_function (asection *sec, if (sinfo == NULL) return NULL; memset ((char *) sinfo + old, 0, amt - old); - sec_data->stack_info = sinfo; + sec_data->u.i.stack_info = sinfo; } + + if (++i < sinfo->num_fun) + memmove (&sinfo->fun[i + 1], &sinfo->fun[i], + (sinfo->num_fun - i) * sizeof (sinfo->fun[i])); sinfo->fun[i].is_func = is_func; sinfo->fun[i].global = global; sinfo->fun[i].sec = sec; @@ -1723,7 +2444,11 @@ maybe_insert_function (asection *sec, 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->fun[i].lr_store = -1; + sinfo->fun[i].sp_adjust = -1; + sinfo->fun[i].stack = -find_function_stack_adjust (sec, off, + &sinfo->fun[i].lr_store, + &sinfo->fun[i].sp_adjust); sinfo->num_fun += 1; return &sinfo->fun[i]; } @@ -1803,7 +2528,7 @@ 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; + struct spu_elf_stack_info *sinfo = sec_data->u.i.stack_info; int i; bfd_boolean gaps = FALSE; @@ -1849,7 +2574,7 @@ 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; + struct spu_elf_stack_info *sinfo = sec_data->u.i.stack_info; int lo, hi, mid; lo = 0; @@ -1866,22 +2591,35 @@ find_function (asection *sec, bfd_vma offset, struct bfd_link_info *info) } info->callbacks->einfo (_("%A:0x%v not found in function table\n"), sec, offset); + bfd_set_error (bfd_error_bad_value); return NULL; } -/* Add CALLEE to CALLER call list if not already present. */ +/* Add CALLEE to CALLER call list if not already present. Return TRUE + if CALLEE was new. If this function return FALSE, CALLEE should + be freed. */ 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) + struct call_info **pp, *p; + + for (pp = &caller->call_list; (p = *pp) != NULL; pp = &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; + p->is_tail &= callee->is_tail; + if (!p->is_tail) + { + p->fun->start = NULL; + p->fun->is_func = TRUE; + } + p->count += callee->count; + /* Reorder list so most recent call is first. */ + *pp = p->next; + p->next = caller->call_list; + caller->call_list = p; return FALSE; } callee->next = caller->call_list; @@ -1889,6 +2627,33 @@ insert_callee (struct function_info *caller, struct call_info *callee) return TRUE; } +/* Copy CALL and insert the copy into CALLER. */ + +static bfd_boolean +copy_callee (struct function_info *caller, const struct call_info *call) +{ + struct call_info *callee; + callee = bfd_malloc (sizeof (*callee)); + if (callee == NULL) + return FALSE; + *callee = *call; + if (!insert_callee (caller, callee)) + free (callee); + return TRUE; +} + +/* We're only interested in code sections. Testing SEC_IN_MEMORY excludes + overlay stub sections. */ + +static bfd_boolean +interesting_section (asection *s) +{ + return (s->output_section != bfd_abs_section_ptr + && ((s->flags & (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_IN_MEMORY)) + == (SEC_ALLOC | SEC_LOAD | SEC_CODE)) + && s->size != 0); +} + /* 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 @@ -1901,11 +2666,15 @@ mark_functions_via_relocs (asection *sec, 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; + Elf_Internal_Shdr *symtab_hdr; void *psyms; + unsigned int priority = 0; static bfd_boolean warned; + if (!interesting_section (sec) + || sec->reloc_count == 0) + return TRUE; + internal_relocs = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, info->keep_memory); if (internal_relocs == NULL) @@ -1913,7 +2682,6 @@ mark_functions_via_relocs (asection *sec, 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++) @@ -1924,46 +2692,81 @@ mark_functions_via_relocs (asection *sec, Elf_Internal_Sym *sym; struct elf_link_hash_entry *h; bfd_vma val; - unsigned char insn[4]; - bfd_boolean is_call; + bfd_boolean reject, is_call; struct function_info *caller; struct call_info *callee; + reject = FALSE; r_type = ELF32_R_TYPE (irela->r_info); if (r_type != R_SPU_REL16 && r_type != R_SPU_ADDR16) - continue; + { + reject = TRUE; + if (!(call_tree && spu_hash_table (info)->params->auto_overlay)) + 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) + || sym_sec->output_section == bfd_abs_section_ptr) continue; - if (!bfd_get_section_contents (sec->owner, sec, insn, - irela->r_offset, 4)) - return FALSE; - if (!is_branch (insn)) - continue; + is_call = FALSE; + if (!reject) + { + unsigned char insn[4]; + + if (!bfd_get_section_contents (sec->owner, sec, insn, + irela->r_offset, 4)) + return FALSE; + if (is_branch (insn)) + { + is_call = (insn[0] & 0xfd) == 0x31; + priority = insn[1] & 0x0f; + priority <<= 8; + priority |= insn[2]; + priority <<= 8; + priority |= insn[3]; + priority >>= 7; + if ((sym_sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_CODE)) + != (SEC_ALLOC | SEC_LOAD | SEC_CODE)) + { + if (!warned) + info->callbacks->einfo + (_("%B(%A+0x%v): call to non-code section" + " %B(%A), analysis incomplete\n"), + sec->owner, sec, irela->r_offset, + sym_sec->owner, sym_sec); + warned = TRUE; + continue; + } + } + else + { + reject = TRUE; + if (!(call_tree && spu_hash_table (info)->params->auto_overlay) + || is_hint (insn)) + continue; + } + } - if ((sym_sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_CODE)) - != (SEC_ALLOC | SEC_LOAD | SEC_CODE)) + if (reject) { - 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); + /* For --auto-overlay, count possible stubs we need for + function pointer references. */ + unsigned int sym_type; + if (h) + sym_type = h->type; + else + sym_type = ELF_ST_TYPE (sym->st_info); + if (sym_type == STT_FUNC) + spu_hash_table (info)->non_ovly_stub += 1; continue; } - is_call = (insn[0] & 0xfd) == 0x31; - if (h) val = h->root.u.def.value; else @@ -2007,6 +2810,15 @@ mark_functions_via_relocs (asection *sec, if (callee->fun == NULL) return FALSE; callee->is_tail = !is_call; + callee->is_pasted = FALSE; + callee->broken_cycle = FALSE; + callee->priority = priority; + callee->count = 1; + if (callee->fun->last_caller != sec) + { + callee->fun->last_caller = sec; + callee->fun->call_count += 1; + } if (!insert_callee (caller, callee)) free (callee); else if (!is_call @@ -2018,14 +2830,36 @@ mark_functions_via_relocs (asection *sec, 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) + if (sec->owner != sym_sec->owner) { callee->fun->start = NULL; callee->fun->is_func = TRUE; } + else if (callee->fun->start == NULL) + { + struct function_info *caller_start = caller; + while (caller_start->start) + caller_start = caller_start->start; + + if (caller_start != callee->fun) + callee->fun->start = caller_start; + } else - callee->fun->start = caller; + { + struct function_info *callee_start; + struct function_info *caller_start; + callee_start = callee->fun; + while (callee_start->start) + callee_start = callee_start->start; + caller_start = caller; + while (caller_start->start) + caller_start = caller_start->start; + if (caller_start != callee_start) + { + callee->fun->start = NULL; + callee->fun->is_func = TRUE; + } + } } } @@ -2036,7 +2870,7 @@ mark_functions_via_relocs (asection *sec, These sections are pasted together to form a single function. */ static bfd_boolean -pasted_function (asection *sec, struct bfd_link_info *info) +pasted_function (asection *sec) { struct bfd_link_order *l; struct _spu_elf_section_data *sec_data; @@ -2063,42 +2897,40 @@ pasted_function (asection *sec, struct bfd_link_info *info) { if (fun_start != NULL) { - if (fun_start->start) - fun_start = fun_start->start; + struct call_info *callee = bfd_malloc (sizeof *callee); + if (callee == NULL) + return FALSE; + fun->start = fun_start; + callee->fun = fun; + callee->is_tail = TRUE; + callee->is_pasted = TRUE; + callee->broken_cycle = FALSE; + callee->priority = 0; + callee->count = 1; + if (!insert_callee (fun_start, callee)) + free (callee); + return TRUE; } - return TRUE; + break; } 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 = sec_data->u.i.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); + /* Don't return an error if we did not find a function preceding this + section. The section may have incorrect flags. */ + return TRUE; } /* Map address ranges in code sections to functions. */ static bfd_boolean -discover_functions (bfd *output_bfd, struct bfd_link_info *info) +discover_functions (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; @@ -2115,7 +2947,6 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) 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; @@ -2135,17 +2966,29 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; symcount = symtab_hdr->sh_size / symtab_hdr->sh_entsize; if (symcount == 0) - continue; + { + if (!gaps) + for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next) + if (interesting_section (sec)) + { + gaps = TRUE; + break; + } + continue; + } - syms = (Elf_Internal_Sym *) symtab_hdr->contents; - if (syms == NULL) + if (symtab_hdr->contents != 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; + /* Don't use cached symbols since the generic ELF linker + code only reads local symbols, and we need globals too. */ + free (symtab_hdr->contents); + symtab_hdr->contents = 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)); @@ -2163,7 +3006,7 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) asection *s; *p = s = bfd_section_from_elf_index (ibfd, sy->st_shndx); - if (s != NULL && interesting_section (s, output_bfd, htab)) + if (s != NULL && interesting_section (s)) *psy++ = sy; } symcount = psy - psyms; @@ -2205,7 +3048,7 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) } for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next) - if (interesting_section (sec, output_bfd, htab)) + if (interesting_section (sec)) gaps |= check_function_ranges (sec, info); } @@ -2223,12 +3066,8 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) 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; - } + if (!mark_functions_via_relocs (sec, info, FALSE)) + return FALSE; } for (ibfd = info->input_bfds, bfd_idx = 0; @@ -2250,7 +3089,7 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) gaps = FALSE; for (sec = ibfd->sections; sec != NULL && !gaps; sec = sec->next) - if (interesting_section (sec, output_bfd, htab)) + if (interesting_section (sec)) gaps |= check_function_ranges (sec, info); if (!gaps) continue; @@ -2270,20 +3109,29 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) return FALSE; } } + } + + 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; /* 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)) + if (interesting_section (sec)) { 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) + sinfo = sec_data->u.i.stack_info; + if (sinfo != NULL && sinfo->num_fun != 0) { int fun_idx; bfd_vma hi = sec->size; @@ -2293,10 +3141,12 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) sinfo->fun[fun_idx].hi = hi; hi = sinfo->fun[fun_idx].lo; } + + sinfo->fun[0].lo = 0; } /* No symbols in this section. Must be .init or .fini or something similar. */ - else if (!pasted_function (sec, info)) + else if (!pasted_function (sec)) return FALSE; } } @@ -2319,60 +3169,168 @@ discover_functions (bfd *output_bfd, struct bfd_link_info *info) return TRUE; } +/* Iterate over all function_info we have collected, calling DOIT on + each node if ROOT_ONLY is false. Only call DOIT on root nodes + if ROOT_ONLY. */ + +static bfd_boolean +for_each_node (bfd_boolean (*doit) (struct function_info *, + struct bfd_link_info *, + void *), + struct bfd_link_info *info, + void *param, + int root_only) +{ + 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) + { + 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->u.i.stack_info) != NULL) + { + int i; + for (i = 0; i < sinfo->num_fun; ++i) + if (!root_only || !sinfo->fun[i].non_root) + if (!doit (&sinfo->fun[i], info, param)) + return FALSE; + } + } + } + return TRUE; +} + +/* Transfer call info attached to struct function_info entries for + all of a given function's sections to the first entry. */ + +static bfd_boolean +transfer_calls (struct function_info *fun, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + void *param ATTRIBUTE_UNUSED) +{ + struct function_info *start = fun->start; + + if (start != NULL) + { + struct call_info *call, *call_next; + + while (start->start != NULL) + start = start->start; + for (call = fun->call_list; call != NULL; call = call_next) + { + call_next = call->next; + if (!insert_callee (start, call)) + free (call); + } + fun->call_list = NULL; + } + return TRUE; +} + /* Mark nodes in the call graph that are called by some other node. */ -static void -mark_non_root (struct function_info *fun) +static bfd_boolean +mark_non_root (struct function_info *fun, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + void *param ATTRIBUTE_UNUSED) { struct call_info *call; + if (fun->visit1) + return TRUE; 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); + mark_non_root (call->fun, 0, 0); } + return TRUE; } -/* Remove cycles from the call graph. */ +/* Remove cycles from the call graph. Set depth of nodes. */ -static void -call_graph_traverse (struct function_info *fun, struct bfd_link_info *info) +static bfd_boolean +remove_cycles (struct function_info *fun, + struct bfd_link_info *info, + void *param) { struct call_info **callp, *call; + unsigned int depth = *(unsigned int *) param; + unsigned int max_depth = depth; + fun->depth = depth; fun->visit2 = TRUE; fun->marking = TRUE; callp = &fun->call_list; while ((call = *callp) != NULL) { + call->max_depth = depth + !call->is_pasted; if (!call->fun->visit2) - call_graph_traverse (call->fun, info); + { + if (!remove_cycles (call->fun, info, &call->max_depth)) + return FALSE; + if (max_depth < call->max_depth) + max_depth = call->max_depth; + } else if (call->fun->marking) { - const char *f1 = func_name (fun); - const char *f2 = func_name (call->fun); + struct spu_link_hash_table *htab = spu_hash_table (info); - info->callbacks->info (_("Stack analysis will ignore the call " - "from %s to %s\n"), - f1, f2); - *callp = call->next; - continue; + if (!htab->params->auto_overlay + && htab->params->stack_analysis) + { + 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); + } + + call->broken_cycle = TRUE; } callp = &call->next; } fun->marking = FALSE; + *(unsigned int *) param = max_depth; + return TRUE; +} + +/* Check that we actually visited all nodes in remove_cycles. If we + didn't, then there is some cycle in the call graph not attached to + any root node. Arbitrarily choose a node in the cycle as a new + root and break the cycle. */ + +static bfd_boolean +mark_detached_root (struct function_info *fun, + struct bfd_link_info *info, + void *param) +{ + if (fun->visit2) + return TRUE; + fun->non_root = FALSE; + *(unsigned int *) param = 0; + return remove_cycles (fun, info, param); } /* Populate call_list for each function. */ static bfd_boolean -build_call_tree (bfd *output_bfd, struct bfd_link_info *info) +build_call_tree (struct bfd_link_info *info) { - struct spu_link_hash_table *htab = spu_hash_table (info); bfd *ibfd; + unsigned int depth; for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) { @@ -2383,246 +3341,1348 @@ build_call_tree (bfd *output_bfd, struct bfd_link_info *info) 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; + } - if (!mark_functions_via_relocs (sec, info, TRUE)) - return FALSE; - } + /* Transfer call info from hot/cold section part of function + to main entry. */ + if (!spu_hash_table (info)->params->auto_overlay + && !for_each_node (transfer_calls, info, 0, FALSE)) + 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; + /* Find the call graph root(s). */ + if (!for_each_node (mark_non_root, info, 0, FALSE)) + return FALSE; - 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; - } - } - } - } - } + /* Remove cycles from the call graph. We start from the root node(s) + so that we break cycles in a reasonable place. */ + depth = 0; + if (!for_each_node (remove_cycles, info, &depth, TRUE)) + return FALSE; - /* 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; + return for_each_node (mark_detached_root, info, &depth, FALSE); +} - if (ibfd->xvec != &bfd_elf32_spu_vec) - continue; +/* qsort predicate to sort calls by priority, max_depth then count. */ - for (sec = ibfd->sections; sec != NULL; sec = sec->next) - { - struct _spu_elf_section_data *sec_data; - struct spu_elf_stack_info *sinfo; +static int +sort_calls (const void *a, const void *b) +{ + struct call_info *const *c1 = a; + struct call_info *const *c2 = b; + int delta; - 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]); - } - } - } + delta = (*c2)->priority - (*c1)->priority; + if (delta != 0) + return delta; - /* 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; + delta = (*c2)->max_depth - (*c1)->max_depth; + if (delta != 0) + return delta; - if (ibfd->xvec != &bfd_elf32_spu_vec) - continue; + delta = (*c2)->count - (*c1)->count; + if (delta != 0) + return delta; - for (sec = ibfd->sections; sec != NULL; sec = sec->next) - { - struct _spu_elf_section_data *sec_data; - struct spu_elf_stack_info *sinfo; + return (char *) c1 - (char *) c2; +} + +struct _mos_param { + unsigned int max_overlay_size; +}; + +/* Set linker_mark and gc_mark on any sections that we will put in + overlays. These flags are used by the generic ELF linker, but we + won't be continuing on to bfd_elf_final_link so it is OK to use + them. linker_mark is clear before we get here. Set segment_mark + on sections that are part of a pasted function (excluding the last + section). + + Set up function rodata section if --overlay-rodata. We don't + currently include merged string constant rodata sections since + + Sort the call graph so that the deepest nodes will be visited + first. */ + +static bfd_boolean +mark_overlay_section (struct function_info *fun, + struct bfd_link_info *info, + void *param) +{ + struct call_info *call; + unsigned int count; + struct _mos_param *mos_param = param; + struct spu_link_hash_table *htab = spu_hash_table (info); + + if (fun->visit4) + return TRUE; + + fun->visit4 = TRUE; + if (!fun->sec->linker_mark + && (htab->params->ovly_flavour != ovly_soft_icache + || htab->params->non_ia_text + || strncmp (fun->sec->name, ".text.ia.", 9) == 0 + || strcmp (fun->sec->name, ".init") == 0 + || strcmp (fun->sec->name, ".fini") == 0)) + { + unsigned int size; + + fun->sec->linker_mark = 1; + fun->sec->gc_mark = 1; + fun->sec->segment_mark = 0; + /* Ensure SEC_CODE is set on this text section (it ought to + be!), and SEC_CODE is clear on rodata sections. We use + this flag to differentiate the two overlay section types. */ + fun->sec->flags |= SEC_CODE; + + size = fun->sec->size; + if (htab->params->auto_overlay & OVERLAY_RODATA) + { + char *name = NULL; + + /* Find the rodata section corresponding to this function's + text section. */ + if (strcmp (fun->sec->name, ".text") == 0) + { + name = bfd_malloc (sizeof (".rodata")); + if (name == NULL) + return FALSE; + memcpy (name, ".rodata", sizeof (".rodata")); + } + else if (strncmp (fun->sec->name, ".text.", 6) == 0) + { + size_t len = strlen (fun->sec->name); + name = bfd_malloc (len + 3); + if (name == NULL) + return FALSE; + memcpy (name, ".rodata", sizeof (".rodata")); + memcpy (name + 7, fun->sec->name + 5, len - 4); + } + else if (strncmp (fun->sec->name, ".gnu.linkonce.t.", 16) == 0) + { + size_t len = strlen (fun->sec->name) + 1; + name = bfd_malloc (len); + if (name == NULL) + return FALSE; + memcpy (name, fun->sec->name, len); + name[14] = 'r'; + } + + if (name != NULL) + { + asection *rodata = NULL; + asection *group_sec = elf_section_data (fun->sec)->next_in_group; + if (group_sec == NULL) + rodata = bfd_get_section_by_name (fun->sec->owner, name); + else + while (group_sec != NULL && group_sec != fun->sec) + { + if (strcmp (group_sec->name, name) == 0) + { + rodata = group_sec; + break; + } + group_sec = elf_section_data (group_sec)->next_in_group; + } + fun->rodata = rodata; + if (fun->rodata) + { + size += fun->rodata->size; + if (htab->params->line_size != 0 + && size > htab->params->line_size) + { + size -= fun->rodata->size; + fun->rodata = NULL; + } + else + { + fun->rodata->linker_mark = 1; + fun->rodata->gc_mark = 1; + fun->rodata->flags &= ~SEC_CODE; + } + } + free (name); + } + } + if (mos_param->max_overlay_size < size) + mos_param->max_overlay_size = size; + } + + for (count = 0, call = fun->call_list; call != NULL; call = call->next) + count += 1; + + if (count > 1) + { + struct call_info **calls = bfd_malloc (count * sizeof (*calls)); + if (calls == NULL) + return FALSE; + + for (count = 0, call = fun->call_list; call != NULL; call = call->next) + calls[count++] = call; + + qsort (calls, count, sizeof (*calls), sort_calls); + + fun->call_list = NULL; + while (count != 0) + { + --count; + calls[count]->next = fun->call_list; + fun->call_list = calls[count]; + } + free (calls); + } + + for (call = fun->call_list; call != NULL; call = call->next) + { + if (call->is_pasted) + { + /* There can only be one is_pasted call per function_info. */ + BFD_ASSERT (!fun->sec->segment_mark); + fun->sec->segment_mark = 1; + } + if (!call->broken_cycle + && !mark_overlay_section (call->fun, info, param)) + return FALSE; + } + + /* Don't put entry code into an overlay. The overlay manager needs + a stack! Also, don't mark .ovl.init as an overlay. */ + if (fun->lo + fun->sec->output_offset + fun->sec->output_section->vma + == info->output_bfd->start_address + || strncmp (fun->sec->output_section->name, ".ovl.init", 9) == 0) + { + fun->sec->linker_mark = 0; + if (fun->rodata != NULL) + fun->rodata->linker_mark = 0; + } + return TRUE; +} + +/* If non-zero then unmark functions called from those within sections + that we need to unmark. Unfortunately this isn't reliable since the + call graph cannot know the destination of function pointer calls. */ +#define RECURSE_UNMARK 0 + +struct _uos_param { + asection *exclude_input_section; + asection *exclude_output_section; + unsigned long clearing; +}; + +/* Undo some of mark_overlay_section's work. */ + +static bfd_boolean +unmark_overlay_section (struct function_info *fun, + struct bfd_link_info *info, + void *param) +{ + struct call_info *call; + struct _uos_param *uos_param = param; + unsigned int excluded = 0; + + if (fun->visit5) + return TRUE; + + fun->visit5 = TRUE; + + excluded = 0; + if (fun->sec == uos_param->exclude_input_section + || fun->sec->output_section == uos_param->exclude_output_section) + excluded = 1; + + if (RECURSE_UNMARK) + uos_param->clearing += excluded; + + if (RECURSE_UNMARK ? uos_param->clearing : excluded) + { + fun->sec->linker_mark = 0; + if (fun->rodata) + fun->rodata->linker_mark = 0; + } + + for (call = fun->call_list; call != NULL; call = call->next) + if (!call->broken_cycle + && !unmark_overlay_section (call->fun, info, param)) + return FALSE; + + if (RECURSE_UNMARK) + uos_param->clearing -= excluded; + return TRUE; +} + +struct _cl_param { + unsigned int lib_size; + asection **lib_sections; +}; + +/* Add sections we have marked as belonging to overlays to an array + for consideration as non-overlay sections. The array consist of + pairs of sections, (text,rodata), for functions in the call graph. */ + +static bfd_boolean +collect_lib_sections (struct function_info *fun, + struct bfd_link_info *info, + void *param) +{ + struct _cl_param *lib_param = param; + struct call_info *call; + unsigned int size; + + if (fun->visit6) + return TRUE; + + fun->visit6 = TRUE; + if (!fun->sec->linker_mark || !fun->sec->gc_mark || fun->sec->segment_mark) + return TRUE; + + size = fun->sec->size; + if (fun->rodata) + size += fun->rodata->size; + + if (size <= lib_param->lib_size) + { + *lib_param->lib_sections++ = fun->sec; + fun->sec->gc_mark = 0; + if (fun->rodata && fun->rodata->linker_mark && fun->rodata->gc_mark) + { + *lib_param->lib_sections++ = fun->rodata; + fun->rodata->gc_mark = 0; + } + else + *lib_param->lib_sections++ = NULL; + } + + for (call = fun->call_list; call != NULL; call = call->next) + if (!call->broken_cycle) + collect_lib_sections (call->fun, info, param); + + return TRUE; +} + +/* qsort predicate to sort sections by call count. */ + +static int +sort_lib (const void *a, const void *b) +{ + asection *const *s1 = a; + asection *const *s2 = b; + struct _spu_elf_section_data *sec_data; + struct spu_elf_stack_info *sinfo; + int delta; + + delta = 0; + if ((sec_data = spu_elf_section_data (*s1)) != NULL + && (sinfo = sec_data->u.i.stack_info) != NULL) + { + int i; + for (i = 0; i < sinfo->num_fun; ++i) + delta -= sinfo->fun[i].call_count; + } + + if ((sec_data = spu_elf_section_data (*s2)) != NULL + && (sinfo = sec_data->u.i.stack_info) != NULL) + { + int i; + for (i = 0; i < sinfo->num_fun; ++i) + delta += sinfo->fun[i].call_count; + } + + if (delta != 0) + return delta; + + return s1 - s2; +} + +/* Remove some sections from those marked to be in overlays. Choose + those that are called from many places, likely library functions. */ + +static unsigned int +auto_ovl_lib_functions (struct bfd_link_info *info, unsigned int lib_size) +{ + bfd *ibfd; + asection **lib_sections; + unsigned int i, lib_count; + struct _cl_param collect_lib_param; + struct function_info dummy_caller; + struct spu_link_hash_table *htab; + + memset (&dummy_caller, 0, sizeof (dummy_caller)); + lib_count = 0; + 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 (sec->linker_mark + && sec->size < lib_size + && (sec->flags & SEC_CODE) != 0) + lib_count += 1; + } + lib_sections = bfd_malloc (lib_count * 2 * sizeof (*lib_sections)); + if (lib_sections == NULL) + return (unsigned int) -1; + collect_lib_param.lib_size = lib_size; + collect_lib_param.lib_sections = lib_sections; + if (!for_each_node (collect_lib_sections, info, &collect_lib_param, + TRUE)) + return (unsigned int) -1; + lib_count = (collect_lib_param.lib_sections - lib_sections) / 2; + + /* Sort sections so that those with the most calls are first. */ + if (lib_count > 1) + qsort (lib_sections, lib_count, 2 * sizeof (*lib_sections), sort_lib); + + htab = spu_hash_table (info); + for (i = 0; i < lib_count; i++) + { + unsigned int tmp, stub_size; + asection *sec; + struct _spu_elf_section_data *sec_data; + struct spu_elf_stack_info *sinfo; + + sec = lib_sections[2 * i]; + /* If this section is OK, its size must be less than lib_size. */ + tmp = sec->size; + /* If it has a rodata section, then add that too. */ + if (lib_sections[2 * i + 1]) + tmp += lib_sections[2 * i + 1]->size; + /* Add any new overlay call stubs needed by the section. */ + stub_size = 0; + if (tmp < lib_size + && (sec_data = spu_elf_section_data (sec)) != NULL + && (sinfo = sec_data->u.i.stack_info) != NULL) + { + int k; + struct call_info *call; + + for (k = 0; k < sinfo->num_fun; ++k) + for (call = sinfo->fun[k].call_list; call; call = call->next) + if (call->fun->sec->linker_mark) + { + struct call_info *p; + for (p = dummy_caller.call_list; p; p = p->next) + if (p->fun == call->fun) + break; + if (!p) + stub_size += ovl_stub_size (htab->params); + } + } + if (tmp + stub_size < lib_size) + { + struct call_info **pp, *p; + + /* This section fits. Mark it as non-overlay. */ + lib_sections[2 * i]->linker_mark = 0; + if (lib_sections[2 * i + 1]) + lib_sections[2 * i + 1]->linker_mark = 0; + lib_size -= tmp + stub_size; + /* Call stubs to the section we just added are no longer + needed. */ + pp = &dummy_caller.call_list; + while ((p = *pp) != NULL) + if (!p->fun->sec->linker_mark) + { + lib_size += ovl_stub_size (htab->params); + *pp = p->next; + free (p); + } + else + pp = &p->next; + /* Add new call stubs to dummy_caller. */ + if ((sec_data = spu_elf_section_data (sec)) != NULL + && (sinfo = sec_data->u.i.stack_info) != NULL) + { + int k; + struct call_info *call; + + for (k = 0; k < sinfo->num_fun; ++k) + for (call = sinfo->fun[k].call_list; + call; + call = call->next) + if (call->fun->sec->linker_mark) + { + struct call_info *callee; + callee = bfd_malloc (sizeof (*callee)); + if (callee == NULL) + return (unsigned int) -1; + *callee = *call; + if (!insert_callee (&dummy_caller, callee)) + free (callee); + } + } + } + } + while (dummy_caller.call_list != NULL) + { + struct call_info *call = dummy_caller.call_list; + dummy_caller.call_list = call->next; + free (call); + } + for (i = 0; i < 2 * lib_count; i++) + if (lib_sections[i]) + lib_sections[i]->gc_mark = 1; + free (lib_sections); + return lib_size; +} + +/* Build an array of overlay sections. The deepest node's section is + added first, then its parent node's section, then everything called + from the parent section. The idea being to group sections to + minimise calls between different overlays. */ + +static bfd_boolean +collect_overlays (struct function_info *fun, + struct bfd_link_info *info, + void *param) +{ + struct call_info *call; + bfd_boolean added_fun; + asection ***ovly_sections = param; + + if (fun->visit7) + return TRUE; + + fun->visit7 = TRUE; + for (call = fun->call_list; call != NULL; call = call->next) + if (!call->is_pasted && !call->broken_cycle) + { + if (!collect_overlays (call->fun, info, ovly_sections)) + return FALSE; + break; + } + + added_fun = FALSE; + if (fun->sec->linker_mark && fun->sec->gc_mark) + { + fun->sec->gc_mark = 0; + *(*ovly_sections)++ = fun->sec; + if (fun->rodata && fun->rodata->linker_mark && fun->rodata->gc_mark) + { + fun->rodata->gc_mark = 0; + *(*ovly_sections)++ = fun->rodata; + } + else + *(*ovly_sections)++ = NULL; + added_fun = TRUE; + + /* Pasted sections must stay with the first section. We don't + put pasted sections in the array, just the first section. + Mark subsequent sections as already considered. */ + if (fun->sec->segment_mark) + { + struct function_info *call_fun = fun; + do + { + for (call = call_fun->call_list; call != NULL; call = call->next) + if (call->is_pasted) + { + call_fun = call->fun; + call_fun->sec->gc_mark = 0; + if (call_fun->rodata) + call_fun->rodata->gc_mark = 0; + break; + } + if (call == NULL) + abort (); + } + while (call_fun->sec->segment_mark); + } + } + + for (call = fun->call_list; call != NULL; call = call->next) + if (!call->broken_cycle + && !collect_overlays (call->fun, info, ovly_sections)) + return FALSE; + + if (added_fun) + { + struct _spu_elf_section_data *sec_data; + struct spu_elf_stack_info *sinfo; + + if ((sec_data = spu_elf_section_data (fun->sec)) != NULL + && (sinfo = sec_data->u.i.stack_info) != NULL) + { + int i; + for (i = 0; i < sinfo->num_fun; ++i) + if (!collect_overlays (&sinfo->fun[i], info, ovly_sections)) + return FALSE; + } + } + + return TRUE; +} + +struct _sum_stack_param { + size_t cum_stack; + size_t overall_stack; + bfd_boolean emit_stack_syms; +}; + +/* Descend the call graph for FUN, accumulating total stack required. */ + +static bfd_boolean +sum_stack (struct function_info *fun, + struct bfd_link_info *info, + void *param) +{ + struct call_info *call; + struct function_info *max; + size_t stack, cum_stack; + const char *f1; + bfd_boolean has_call; + struct _sum_stack_param *sum_stack_param = param; + struct spu_link_hash_table *htab; + + cum_stack = fun->stack; + sum_stack_param->cum_stack = cum_stack; + if (fun->visit3) + return TRUE; + + has_call = FALSE; + max = NULL; + for (call = fun->call_list; call; call = call->next) + { + if (call->broken_cycle) + continue; + if (!call->is_pasted) + has_call = TRUE; + if (!sum_stack (call->fun, info, sum_stack_param)) + return FALSE; + stack = sum_stack_param->cum_stack; + /* 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 || call->is_pasted || call->fun->start != NULL) + stack += fun->stack; + if (cum_stack < stack) + { + cum_stack = stack; + max = call->fun; + } + } + + sum_stack_param->cum_stack = cum_stack; + stack = fun->stack; + /* Now fun->stack holds cumulative stack. */ + fun->stack = cum_stack; + fun->visit3 = TRUE; + + if (!fun->non_root + && sum_stack_param->overall_stack < cum_stack) + sum_stack_param->overall_stack = cum_stack; + + htab = spu_hash_table (info); + if (htab->params->auto_overlay) + return TRUE; + + f1 = func_name (fun); + if (htab->params->stack_analysis) + { + if (!fun->non_root) + info->callbacks->info (_(" %s: 0x%v\n"), f1, (bfd_vma) cum_stack); + info->callbacks->minfo (_("%s: 0x%v 0x%v\n"), + f1, (bfd_vma) stack, (bfd_vma) cum_stack); + + if (has_call) + { + info->callbacks->minfo (_(" calls:\n")); + for (call = fun->call_list; call; call = call->next) + if (!call->is_pasted && !call->broken_cycle) + { + 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); + } + } + } + + if (sum_stack_param->emit_stack_syms) + { + char *name = bfd_malloc (18 + strlen (f1)); + struct elf_link_hash_entry *h; + + if (name == NULL) + return FALSE; + + 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 = cum_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 TRUE; +} + +/* SEC is part of a pasted function. Return the call_info for the + next section of this function. */ + +static struct call_info * +find_pasted_call (asection *sec) +{ + struct _spu_elf_section_data *sec_data = spu_elf_section_data (sec); + struct spu_elf_stack_info *sinfo = sec_data->u.i.stack_info; + struct call_info *call; + int k; + + for (k = 0; k < sinfo->num_fun; ++k) + for (call = sinfo->fun[k].call_list; call != NULL; call = call->next) + if (call->is_pasted) + return call; + abort (); + return 0; +} + +/* qsort predicate to sort bfds by file name. */ + +static int +sort_bfds (const void *a, const void *b) +{ + bfd *const *abfd1 = a; + bfd *const *abfd2 = b; + + return strcmp ((*abfd1)->filename, (*abfd2)->filename); +} + +static unsigned int +print_one_overlay_section (FILE *script, + unsigned int base, + unsigned int count, + unsigned int ovlynum, + unsigned int *ovly_map, + asection **ovly_sections, + struct bfd_link_info *info) +{ + unsigned int j; + + for (j = base; j < count && ovly_map[j] == ovlynum; j++) + { + asection *sec = ovly_sections[2 * j]; + + if (fprintf (script, " %s%c%s (%s)\n", + (sec->owner->my_archive != NULL + ? sec->owner->my_archive->filename : ""), + info->path_separator, + sec->owner->filename, + sec->name) <= 0) + return -1; + if (sec->segment_mark) + { + struct call_info *call = find_pasted_call (sec); + while (call != NULL) + { + struct function_info *call_fun = call->fun; + sec = call_fun->sec; + if (fprintf (script, " %s%c%s (%s)\n", + (sec->owner->my_archive != NULL + ? sec->owner->my_archive->filename : ""), + info->path_separator, + sec->owner->filename, + sec->name) <= 0) + return -1; + for (call = call_fun->call_list; call; call = call->next) + if (call->is_pasted) + break; + } + } + } + + for (j = base; j < count && ovly_map[j] == ovlynum; j++) + { + asection *sec = ovly_sections[2 * j + 1]; + if (sec != NULL + && fprintf (script, " %s%c%s (%s)\n", + (sec->owner->my_archive != NULL + ? sec->owner->my_archive->filename : ""), + info->path_separator, + sec->owner->filename, + sec->name) <= 0) + return -1; + + sec = ovly_sections[2 * j]; + if (sec->segment_mark) + { + struct call_info *call = find_pasted_call (sec); + while (call != NULL) + { + struct function_info *call_fun = call->fun; + sec = call_fun->rodata; + if (sec != NULL + && fprintf (script, " %s%c%s (%s)\n", + (sec->owner->my_archive != NULL + ? sec->owner->my_archive->filename : ""), + info->path_separator, + sec->owner->filename, + sec->name) <= 0) + return -1; + for (call = call_fun->call_list; call; call = call->next) + if (call->is_pasted) + break; + } + } + } + + return j; +} + +/* Handle --auto-overlay. */ + +static void +spu_elf_auto_overlay (struct bfd_link_info *info) +{ + bfd *ibfd; + bfd **bfd_arr; + struct elf_segment_map *m; + unsigned int fixed_size, lo, hi; + struct spu_link_hash_table *htab; + unsigned int base, i, count, bfd_count; + unsigned int region, ovlynum; + asection **ovly_sections, **ovly_p; + unsigned int *ovly_map; + FILE *script; + unsigned int total_overlay_size, overlay_size; + const char *ovly_mgr_entry; + struct elf_link_hash_entry *h; + struct _mos_param mos_param; + struct _uos_param uos_param; + struct function_info dummy_caller; + + /* Find the extents of our loadable image. */ + lo = (unsigned int) -1; + hi = 0; + for (m = elf_tdata (info->output_bfd)->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) + { + if (m->sections[i]->vma < lo) + lo = m->sections[i]->vma; + if (m->sections[i]->vma + m->sections[i]->size - 1 > hi) + hi = m->sections[i]->vma + m->sections[i]->size - 1; + } + fixed_size = hi + 1 - lo; + + if (!discover_functions (info)) + goto err_exit; + + if (!build_call_tree (info)) + goto err_exit; + + htab = spu_hash_table (info); + if (htab->reserved == 0) + { + struct _sum_stack_param sum_stack_param; + + sum_stack_param.emit_stack_syms = 0; + sum_stack_param.overall_stack = 0; + if (!for_each_node (sum_stack, info, &sum_stack_param, TRUE)) + goto err_exit; + htab->reserved = sum_stack_param.overall_stack + htab->extra_stack_space; + } + + /* No need for overlays if everything already fits. */ + if (fixed_size + htab->reserved <= htab->local_store + && htab->params->ovly_flavour != ovly_soft_icache) + { + htab->params->auto_overlay = 0; + return; + } + + uos_param.exclude_input_section = 0; + uos_param.exclude_output_section + = bfd_get_section_by_name (info->output_bfd, ".interrupt"); + + ovly_mgr_entry = "__ovly_load"; + if (htab->params->ovly_flavour == ovly_soft_icache) + ovly_mgr_entry = "__icache_br_handler"; + h = elf_link_hash_lookup (&htab->elf, ovly_mgr_entry, + FALSE, FALSE, FALSE); + if (h != NULL + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h->def_regular) + { + /* We have a user supplied overlay manager. */ + uos_param.exclude_input_section = h->root.u.def.section; + } + else + { + /* If no user overlay manager, spu_elf_load_ovl_mgr will add our + builtin version to .text, and will adjust .text size. */ + fixed_size += (*htab->params->spu_elf_load_ovl_mgr) (); + } + + /* Mark overlay sections, and find max overlay section size. */ + mos_param.max_overlay_size = 0; + if (!for_each_node (mark_overlay_section, info, &mos_param, TRUE)) + goto err_exit; + + /* We can't put the overlay manager or interrupt routines in + overlays. */ + uos_param.clearing = 0; + if ((uos_param.exclude_input_section + || uos_param.exclude_output_section) + && !for_each_node (unmark_overlay_section, info, &uos_param, TRUE)) + goto err_exit; + + bfd_count = 0; + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + ++bfd_count; + bfd_arr = bfd_malloc (bfd_count * sizeof (*bfd_arr)); + if (bfd_arr == NULL) + goto err_exit; + + /* Count overlay sections, and subtract their sizes from "fixed_size". */ + count = 0; + bfd_count = 0; + total_overlay_size = 0; + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + extern const bfd_target bfd_elf32_spu_vec; + asection *sec; + unsigned int old_count; + + if (ibfd->xvec != &bfd_elf32_spu_vec) + continue; + + old_count = count; + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + if (sec->linker_mark) + { + if ((sec->flags & SEC_CODE) != 0) + count += 1; + fixed_size -= sec->size; + total_overlay_size += sec->size; + } + else if ((sec->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD) + && sec->output_section->owner == info->output_bfd + && strncmp (sec->output_section->name, ".ovl.init", 9) == 0) + fixed_size -= sec->size; + if (count != old_count) + bfd_arr[bfd_count++] = ibfd; + } + + /* Since the overlay link script selects sections by file name and + section name, ensure that file names are unique. */ + if (bfd_count > 1) + { + bfd_boolean ok = TRUE; + + qsort (bfd_arr, bfd_count, sizeof (*bfd_arr), sort_bfds); + for (i = 1; i < bfd_count; ++i) + if (strcmp (bfd_arr[i - 1]->filename, bfd_arr[i]->filename) == 0) + { + if (bfd_arr[i - 1]->my_archive == bfd_arr[i]->my_archive) + { + if (bfd_arr[i - 1]->my_archive && bfd_arr[i]->my_archive) + info->callbacks->einfo (_("%s duplicated in %s\n"), + bfd_arr[i]->filename, + bfd_arr[i]->my_archive->filename); + else + info->callbacks->einfo (_("%s duplicated\n"), + bfd_arr[i]->filename); + ok = FALSE; + } + } + if (!ok) + { + info->callbacks->einfo (_("sorry, no support for duplicate " + "object files in auto-overlay script\n")); + bfd_set_error (bfd_error_bad_value); + goto err_exit; + } + } + free (bfd_arr); + + fixed_size += htab->reserved; + fixed_size += htab->non_ovly_stub * ovl_stub_size (htab->params); + if (fixed_size + mos_param.max_overlay_size <= htab->local_store) + { + if (htab->params->ovly_flavour == ovly_soft_icache) + { + /* Stubs in the non-icache area are bigger. */ + fixed_size += htab->non_ovly_stub * 16; + /* Space for icache manager tables. + a) Tag array, one quadword per cache line. + - word 0: ia address of present line, init to zero. */ + fixed_size += 16 << htab->num_lines_log2; + /* b) Rewrite "to" list, one quadword per cache line. */ + fixed_size += 16 << htab->num_lines_log2; + /* c) Rewrite "from" list, one byte per outgoing branch (rounded up + to a power-of-two number of full quadwords) per cache line. */ + fixed_size += 16 << (htab->fromelem_size_log2 + + htab->num_lines_log2); + /* d) Pointer to __ea backing store (toe), 1 quadword. */ + fixed_size += 16; + } + else + { + /* Guess number of overlays. Assuming overlay buffer is on + average only half full should be conservative. */ + ovlynum = (total_overlay_size * 2 * htab->params->num_lines + / (htab->local_store - fixed_size)); + /* Space for _ovly_table[], _ovly_buf_table[] and toe. */ + fixed_size += ovlynum * 16 + 16 + 4 + 16; + } + } + + if (fixed_size + mos_param.max_overlay_size > htab->local_store) + info->callbacks->einfo (_("non-overlay size of 0x%v plus maximum overlay " + "size of 0x%v exceeds local store\n"), + (bfd_vma) fixed_size, + (bfd_vma) mos_param.max_overlay_size); + + /* Now see if we should put some functions in the non-overlay area. */ + else if (fixed_size < htab->overlay_fixed) + { + unsigned int max_fixed, lib_size; + + max_fixed = htab->local_store - mos_param.max_overlay_size; + if (max_fixed > htab->overlay_fixed) + max_fixed = htab->overlay_fixed; + lib_size = max_fixed - fixed_size; + lib_size = auto_ovl_lib_functions (info, lib_size); + if (lib_size == (unsigned int) -1) + goto err_exit; + fixed_size = max_fixed - lib_size; + } + + /* Build an array of sections, suitably sorted to place into + overlays. */ + ovly_sections = bfd_malloc (2 * count * sizeof (*ovly_sections)); + if (ovly_sections == NULL) + goto err_exit; + ovly_p = ovly_sections; + if (!for_each_node (collect_overlays, info, &ovly_p, TRUE)) + goto err_exit; + count = (size_t) (ovly_p - ovly_sections) / 2; + ovly_map = bfd_malloc (count * sizeof (*ovly_map)); + if (ovly_map == NULL) + goto err_exit; + + memset (&dummy_caller, 0, sizeof (dummy_caller)); + overlay_size = (htab->local_store - fixed_size) / htab->params->num_lines; + if (htab->params->line_size != 0) + overlay_size = htab->params->line_size; + base = 0; + ovlynum = 0; + while (base < count) + { + unsigned int size = 0, rosize = 0, roalign = 0; + + for (i = base; i < count; i++) + { + asection *sec, *rosec; + unsigned int tmp, rotmp; + unsigned int num_stubs; + struct call_info *call, *pasty; + struct _spu_elf_section_data *sec_data; + struct spu_elf_stack_info *sinfo; + int k; + + /* See whether we can add this section to the current + overlay without overflowing our overlay buffer. */ + sec = ovly_sections[2 * i]; + tmp = align_power (size, sec->alignment_power) + sec->size; + rotmp = rosize; + rosec = ovly_sections[2 * i + 1]; + if (rosec != NULL) + { + rotmp = align_power (rotmp, rosec->alignment_power) + rosec->size; + if (roalign < rosec->alignment_power) + roalign = rosec->alignment_power; + } + if (align_power (tmp, roalign) + rotmp > overlay_size) + break; + if (sec->segment_mark) + { + /* Pasted sections must stay together, so add their + sizes too. */ + struct call_info *pasty = find_pasted_call (sec); + while (pasty != NULL) + { + struct function_info *call_fun = pasty->fun; + tmp = (align_power (tmp, call_fun->sec->alignment_power) + + call_fun->sec->size); + if (call_fun->rodata) + { + rotmp = (align_power (rotmp, + call_fun->rodata->alignment_power) + + call_fun->rodata->size); + if (roalign < rosec->alignment_power) + roalign = rosec->alignment_power; + } + for (pasty = call_fun->call_list; pasty; pasty = pasty->next) + if (pasty->is_pasted) + break; + } + } + if (align_power (tmp, roalign) + rotmp > overlay_size) + break; - if ((sec_data = spu_elf_section_data (sec)) != NULL - && (sinfo = sec_data->stack_info) != NULL) + /* If we add this section, we might need new overlay call + stubs. Add any overlay section calls to dummy_call. */ + pasty = NULL; + sec_data = spu_elf_section_data (sec); + sinfo = sec_data->u.i.stack_info; + for (k = 0; k < sinfo->num_fun; ++k) + for (call = sinfo->fun[k].call_list; call; call = call->next) + if (call->is_pasted) + { + BFD_ASSERT (pasty == NULL); + pasty = call; + } + else if (call->fun->sec->linker_mark) + { + if (!copy_callee (&dummy_caller, call)) + goto err_exit; + } + while (pasty != NULL) { - int i; - for (i = 0; i < sinfo->num_fun; ++i) - if (!sinfo->fun[i].non_root) - call_graph_traverse (&sinfo->fun[i], info); + struct function_info *call_fun = pasty->fun; + pasty = NULL; + for (call = call_fun->call_list; call; call = call->next) + if (call->is_pasted) + { + BFD_ASSERT (pasty == NULL); + pasty = call; + } + else if (!copy_callee (&dummy_caller, call)) + goto err_exit; } - } - } - return TRUE; -} + /* Calculate call stub size. */ + num_stubs = 0; + for (call = dummy_caller.call_list; call; call = call->next) + { + unsigned int k; + unsigned int stub_delta = 1; -/* Descend the call graph for FUN, accumulating total stack required. */ + if (htab->params->ovly_flavour == ovly_soft_icache) + stub_delta = call->count; + num_stubs += stub_delta; -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 the call is within this overlay, we won't need a + stub. */ + for (k = base; k < i + 1; k++) + if (call->fun->sec == ovly_sections[2 * k]) + { + num_stubs -= stub_delta; + break; + } + } + if (htab->params->ovly_flavour == ovly_soft_icache + && num_stubs > htab->params->max_branch) + break; + if (align_power (tmp, roalign) + rotmp + + num_stubs * ovl_stub_size (htab->params) > overlay_size) + break; + size = tmp; + rosize = rotmp; + } - if (fun->visit3) - return max_stack; + if (i == base) + { + info->callbacks->einfo (_("%B:%A%s exceeds overlay size\n"), + ovly_sections[2 * i]->owner, + ovly_sections[2 * i], + ovly_sections[2 * i + 1] ? " + rodata" : ""); + bfd_set_error (bfd_error_bad_value); + goto err_exit; + } - 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) + while (dummy_caller.call_list != NULL) { - max_stack = stack; - max = call->fun; + struct call_info *call = dummy_caller.call_list; + dummy_caller.call_list = call->next; + free (call); } + + ++ovlynum; + while (base < i) + ovly_map[base++] = ovlynum; } - f1 = func_name (fun); - info->callbacks->minfo (_("%s: 0x%v 0x%v\n"), f1, fun->stack, max_stack); + script = htab->params->spu_elf_open_overlay_script (); - if (fun->call_list) + if (htab->params->ovly_flavour == ovly_soft_icache) { - info->callbacks->minfo (_(" calls:\n")); - for (call = fun->call_list; call; call = call->next) + if (fprintf (script, "SECTIONS\n{\n") <= 0) + goto file_err; + + if (fprintf (script, + " . = ALIGN (%u);\n" + " .ovl.init : { *(.ovl.init) }\n" + " . = ABSOLUTE (ADDR (.ovl.init));\n", + htab->params->line_size) <= 0) + goto file_err; + + base = 0; + ovlynum = 1; + while (base < count) { - const char *f2 = func_name (call->fun); - const char *ann1 = call->fun == max ? "*" : " "; - const char *ann2 = call->is_tail ? "t" : " "; + unsigned int indx = ovlynum - 1; + unsigned int vma, lma; + + vma = (indx & (htab->params->num_lines - 1)) << htab->line_size_log2; + lma = vma + (((indx >> htab->num_lines_log2) + 1) << 18); - info->callbacks->minfo (_(" %s%s %s\n"), ann1, ann2, f2); + if (fprintf (script, " .ovly%u ABSOLUTE (ADDR (.ovl.init)) + %u " + ": AT (LOADADDR (.ovl.init) + %u) {\n", + ovlynum, vma, lma) <= 0) + goto file_err; + + base = print_one_overlay_section (script, base, count, ovlynum, + ovly_map, ovly_sections, info); + if (base == (unsigned) -1) + goto file_err; + + if (fprintf (script, " }\n") <= 0) + goto file_err; + + ovlynum++; } - } - /* Now fun->stack holds cumulative stack. */ - fun->stack = max_stack; - fun->visit3 = TRUE; + if (fprintf (script, " . = ABSOLUTE (ADDR (.ovl.init)) + %u;\n", + 1 << (htab->num_lines_log2 + htab->line_size_log2)) <= 0) + goto file_err; - if (emit_stack_syms) + if (fprintf (script, "}\nINSERT AFTER .toe;\n") <= 0) + goto file_err; + } + else { - struct spu_link_hash_table *htab = spu_hash_table (info); - char *name = bfd_malloc (18 + strlen (f1)); - struct elf_link_hash_entry *h; + if (fprintf (script, "SECTIONS\n{\n") <= 0) + goto file_err; + + if (fprintf (script, + " . = ALIGN (16);\n" + " .ovl.init : { *(.ovl.init) }\n" + " . = ABSOLUTE (ADDR (.ovl.init));\n") <= 0) + goto file_err; - if (name != NULL) + for (region = 1; region <= htab->params->num_lines; region++) { - if (fun->global || ELF_ST_BIND (fun->u.sym->st_info) == STB_GLOBAL) - sprintf (name, "__stack_%s", f1); + ovlynum = region; + base = 0; + while (base < count && ovly_map[base] < ovlynum) + base++; + + if (base == count) + break; + + if (region == 1) + { + /* We need to set lma since we are overlaying .ovl.init. */ + if (fprintf (script, + " OVERLAY : AT (ALIGN (LOADADDR (.ovl.init) + SIZEOF (.ovl.init), 16))\n {\n") <= 0) + goto file_err; + } else - sprintf (name, "__stack_%x_%s", fun->sec->id & 0xffffffff, f1); + { + if (fprintf (script, " OVERLAY :\n {\n") <= 0) + goto file_err; + } - 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)) + while (base < count) { - 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; + if (fprintf (script, " .ovly%u {\n", ovlynum) <= 0) + goto file_err; + + base = print_one_overlay_section (script, base, count, ovlynum, + ovly_map, ovly_sections, info); + if (base == (unsigned) -1) + goto file_err; + + if (fprintf (script, " }\n") <= 0) + goto file_err; + + ovlynum += htab->params->num_lines; + while (base < count && ovly_map[base] < ovlynum) + base++; } + + if (fprintf (script, " }\n") <= 0) + goto file_err; } + + if (fprintf (script, "}\nINSERT BEFORE .text;\n") <= 0) + goto file_err; } - return max_stack; + free (ovly_map); + free (ovly_sections); + + if (fclose (script) != 0) + goto file_err; + + if (htab->params->auto_overlay & AUTO_RELINK) + (*htab->params->spu_elf_relink) (); + + xexit (0); + + file_err: + bfd_set_error (bfd_error_system_call); + err_exit: + info->callbacks->einfo ("%F%P: auto overlay error: %E\n"); + xexit (1); } /* 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) +spu_elf_stack_analysis (struct bfd_link_info *info) { - bfd *ibfd; - bfd_vma max_stack = 0; + struct spu_link_hash_table *htab; + struct _sum_stack_param sum_stack_param; - if (!discover_functions (output_bfd, info)) + if (!discover_functions (info)) return FALSE; - if (!build_call_tree (output_bfd, info)) + if (!build_call_tree (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) + htab = spu_hash_table (info); + if (htab->params->stack_analysis) { - 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 (_("Stack size for call graph root nodes.\n")); + info->callbacks->minfo (_("\nStack size for functions. " + "Annotations: '*' max stack, 't' tail call\n")); } - info->callbacks->info (_("Maximum stack required is 0x%v\n"), max_stack); + sum_stack_param.emit_stack_syms = htab->params->emit_stack_syms; + sum_stack_param.overall_stack = 0; + if (!for_each_node (sum_stack, info, &sum_stack_param, TRUE)) + return FALSE; + + if (htab->params->stack_analysis) + info->callbacks->info (_("Maximum stack required is 0x%v\n"), + (bfd_vma) sum_stack_param.overall_stack); return TRUE; } @@ -2633,9 +4693,17 @@ 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"); + if (htab->params->auto_overlay) + spu_elf_auto_overlay (info); + + if ((htab->params->stack_analysis + || (htab->params->ovly_flavour == ovly_soft_icache + && htab->params->lrlive_analysis)) + && !spu_elf_stack_analysis (info)) + info->callbacks->einfo ("%X%P: stack/lrlive analysis error: %E\n"); + + if (!spu_elf_build_stubs (info)) + info->callbacks->einfo ("%F%P: can not build overlay stubs: %E\n"); return bfd_elf_final_link (output_bfd, info); } @@ -2645,24 +4713,77 @@ spu_elf_final_link (bfd *output_bfd, struct bfd_link_info *info) that need to be emitted. */ static unsigned int -spu_elf_count_relocs (asection *sec, Elf_Internal_Rela *relocs) +spu_elf_count_relocs (struct bfd_link_info *info, asection *sec) { + Elf_Internal_Rela *relocs; unsigned int count = 0; - Elf_Internal_Rela *relend = relocs + sec->reloc_count; - for (; relocs < relend; relocs++) + relocs = _bfd_elf_link_read_relocs (sec->owner, sec, NULL, NULL, + info->keep_memory); + if (relocs != NULL) { - int r_type = ELF32_R_TYPE (relocs->r_info); - if (r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64) - ++count; + Elf_Internal_Rela *rel; + Elf_Internal_Rela *relend = relocs + sec->reloc_count; + + for (rel = relocs; rel < relend; rel++) + { + int r_type = ELF32_R_TYPE (rel->r_info); + if (r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64) + ++count; + } + + if (elf_section_data (sec)->relocs != relocs) + free (relocs); } return count; } +/* Functions for adding fixup records to .fixup */ + +#define FIXUP_RECORD_SIZE 4 + +#define FIXUP_PUT(output_bfd,htab,index,addr) \ + bfd_put_32 (output_bfd, addr, \ + htab->sfixup->contents + FIXUP_RECORD_SIZE * (index)) +#define FIXUP_GET(output_bfd,htab,index) \ + bfd_get_32 (output_bfd, \ + htab->sfixup->contents + FIXUP_RECORD_SIZE * (index)) + +/* Store OFFSET in .fixup. This assumes it will be called with an + increasing OFFSET. When this OFFSET fits with the last base offset, + it just sets a bit, otherwise it adds a new fixup record. */ +static void +spu_elf_emit_fixup (bfd * output_bfd, struct bfd_link_info *info, + bfd_vma offset) +{ + struct spu_link_hash_table *htab = spu_hash_table (info); + asection *sfixup = htab->sfixup; + bfd_vma qaddr = offset & ~(bfd_vma) 15; + bfd_vma bit = ((bfd_vma) 8) >> ((offset & 15) >> 2); + if (sfixup->reloc_count == 0) + { + FIXUP_PUT (output_bfd, htab, 0, qaddr | bit); + sfixup->reloc_count++; + } + else + { + bfd_vma base = FIXUP_GET (output_bfd, htab, sfixup->reloc_count - 1); + if (qaddr != (base & ~(bfd_vma) 15)) + { + if ((sfixup->reloc_count + 1) * FIXUP_RECORD_SIZE > sfixup->size) + (*_bfd_error_handler) (_("fatal error while creating .fixup")); + FIXUP_PUT (output_bfd, htab, sfixup->reloc_count, qaddr | bit); + sfixup->reloc_count++; + } + else + FIXUP_PUT (output_bfd, htab, sfixup->reloc_count - 1, base | bit); + } +} + /* Apply RELOCS to CONTENTS of INPUT_SECTION from INPUT_BFD. */ -static bfd_boolean +static int spu_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, bfd *input_bfd, @@ -2676,10 +4797,18 @@ spu_elf_relocate_section (bfd *output_bfd, struct elf_link_hash_entry **sym_hashes; Elf_Internal_Rela *rel, *relend; struct spu_link_hash_table *htab; - bfd_boolean ret = TRUE; + asection *ea; + int ret = TRUE; bfd_boolean emit_these_relocs = FALSE; + bfd_boolean is_ea_sym; + bfd_boolean stubs; + unsigned int iovl = 0; htab = spu_hash_table (info); + stubs = (htab->stub_sec != NULL + && maybe_needs_stubs (input_section)); + iovl = overlay_index (input_section); + ea = bfd_get_section_by_name (output_bfd, "._ea"); symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; sym_hashes = (struct elf_link_hash_entry **) (elf_sym_hashes (input_bfd)); @@ -2689,7 +4818,7 @@ spu_elf_relocate_section (bfd *output_bfd, { int r_type; reloc_howto_type *howto; - unsigned long r_symndx; + unsigned int r_symndx; Elf_Internal_Sym *sym; asection *sec; struct elf_link_hash_entry *h; @@ -2699,16 +4828,10 @@ spu_elf_relocate_section (bfd *output_bfd, bfd_reloc_status_type r; bfd_boolean unresolved_reloc; bfd_boolean warned; - bfd_boolean branch; + enum _stub_type stub_type; 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; @@ -2724,10 +4847,51 @@ spu_elf_relocate_section (bfd *output_bfd, } else { - RELOC_FOR_GLOBAL_SYMBOL (info, input_bfd, input_section, rel, - r_symndx, symtab_hdr, sym_hashes, - h, sec, relocation, - unresolved_reloc, warned); + if (sym_hashes == NULL) + return FALSE; + + 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; + + relocation = 0; + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + { + sec = h->root.u.def.section; + if (sec == NULL + || sec->output_section == NULL) + /* Set a flag that will be cleared later if we find a + relocation value for this symbol. output_section + is typically NULL for symbols satisfied by a shared + library. */ + unresolved_reloc = TRUE; + else + relocation = (h->root.u.def.value + + sec->output_section->vma + + sec->output_offset); + } + 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 + && !(r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64)) + { + bfd_boolean err; + err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT); + if (!info->callbacks->undefined_symbol (info, + h->root.root.string, + input_bfd, + input_section, + rel->r_offset, err)) + return FALSE; + warned = TRUE; + } sym_name = h->root.root.string; } @@ -2745,42 +4909,114 @@ spu_elf_relocate_section (bfd *output_bfd, if (info->relocatable) continue; - if (unresolved_reloc) + /* Change "a rt,ra,rb" to "ai rt,ra,0". */ + if (r_type == R_SPU_ADD_PIC + && h != NULL + && !(h->def_regular || ELF_COMMON_DEF_P (h))) { - (*_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; + bfd_byte *loc = contents + rel->r_offset; + loc[0] = 0x1c; + loc[1] = 0x00; + loc[2] &= 0x3f; } + is_ea_sym = (ea != NULL + && sec != NULL + && sec->output_section == ea); + /* 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)) + if (stubs + && !is_ea_sym + && (stub_type = needs_ovl_stub (h, sym, sec, input_section, rel, + contents, info)) != no_stub) { - char *stub_name; - struct spu_stub_hash_entry *sh; + unsigned int ovl = 0; + struct got_entry *g, **head; - stub_name = spu_stub_name (sec, h, rel); - if (stub_name == NULL) - return FALSE; + if (stub_type != nonovl_stub) + ovl = iovl; + + if (h != NULL) + head = &h->got.glist; + else + head = elf_local_got_ents (input_bfd) + r_symndx; + + for (g = *head; g != NULL; g = g->next) + if (htab->params->ovly_flavour == ovly_soft_icache + ? (g->ovl == ovl + && g->br_addr == (rel->r_offset + + input_section->output_offset + + input_section->output_section->vma)) + : g->addend == addend && (g->ovl == ovl || g->ovl == 0)) + break; + if (g == NULL) + abort (); + + relocation = g->stub_addr; + addend = 0; + } + else + { + /* For soft icache, encode the overlay index into addresses. */ + if (htab->params->ovly_flavour == ovly_soft_icache + && (r_type == R_SPU_ADDR16_HI + || r_type == R_SPU_ADDR32 || r_type == R_SPU_REL32) + && !is_ea_sym) + { + unsigned int ovl = overlay_index (sec); + if (ovl != 0) + { + unsigned int set_id = ((ovl - 1) >> htab->num_lines_log2) + 1; + relocation += set_id << 18; + } + } + } + + if (htab->params->emit_fixups && !info->relocatable + && (input_section->flags & SEC_ALLOC) != 0 + && r_type == R_SPU_ADDR32) + { + bfd_vma offset; + offset = rel->r_offset + input_section->output_section->vma + + input_section->output_offset; + spu_elf_emit_fixup (output_bfd, info, offset); + } - sh = (struct spu_stub_hash_entry *) - bfd_hash_lookup (&htab->stub_hash_table, stub_name, FALSE, FALSE); - if (sh != NULL) + if (unresolved_reloc) + ; + else if (r_type == R_SPU_PPU32 || r_type == R_SPU_PPU64) + { + if (is_ea_sym) { - relocation = (htab->stub->output_section->vma - + htab->stub->output_offset - + sh->off); - addend = 0; + /* ._ea is a special section that isn't allocated in SPU + memory, but rather occupies space in PPU memory as + part of an embedded ELF image. If this reloc is + against a symbol defined in ._ea, then transform the + reloc into an equivalent one without a symbol + relative to the start of the ELF image. */ + rel->r_addend += (relocation + - ea->vma + + elf_section_data (ea)->this_hdr.sh_offset); + rel->r_info = ELF32_R_INFO (0, r_type); } - free (stub_name); + emit_these_relocs = TRUE; + continue; + } + else if (is_ea_sym) + unresolved_reloc = TRUE; + + 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; } r = _bfd_final_link_relocate (howto, @@ -2826,6 +5062,7 @@ spu_elf_relocate_section (bfd *output_bfd, /* fall through */ common_error: + ret = FALSE; if (!((*info->callbacks->warning) (info, msg, sym_name, input_bfd, input_section, rel->r_offset))) @@ -2837,7 +5074,6 @@ spu_elf_relocate_section (bfd *output_bfd, if (ret && emit_these_relocs - && !info->relocatable && !info->emitrelocations) { Elf_Internal_Rela *wrel; @@ -2865,7 +5101,7 @@ spu_elf_relocate_section (bfd *output_bfd, /* Adjust _SPUEAR_ syms to point at their overlay stubs. */ -static bfd_boolean +static int spu_elf_output_symbol_hook (struct bfd_link_info *info, const char *sym_name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, @@ -2875,33 +5111,29 @@ spu_elf_output_symbol_hook (struct bfd_link_info *info, struct spu_link_hash_table *htab = spu_hash_table (info); if (!info->relocatable - && htab->num_overlays != 0 + && htab->stub_sec != NULL && 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; + struct got_entry *g; - 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); + for (g = h->got.glist; g != NULL; g = g->next) + if (htab->params->ovly_flavour == ovly_soft_icache + ? g->br_addr == g->stub_addr + : g->addend == 0 && g->ovl == 0) + { + sym->st_shndx = (_bfd_elf_section_from_bfd_section + (htab->stub_sec[0]->output_section->owner, + htab->stub_sec[0]->output_section)); + sym->st_value = g->stub_addr; + break; + } } - return TRUE; + return 1; } static int spu_plugin = 0; @@ -2932,10 +5164,15 @@ spu_elf_post_process_headers (bfd *abfd, 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; + int extra = 0; asection *sec; + if (info != NULL) + { + struct spu_link_hash_table *htab = spu_hash_table (info); + extra = htab->num_overlays; + } + if (extra) ++extra; @@ -2953,7 +5190,8 @@ static bfd_boolean spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info) { asection *toe, *s; - struct elf_segment_map *m; + struct elf_segment_map *m, *m_overlay; + struct elf_segment_map **p, **p_overlay; unsigned int i; if (info == NULL) @@ -2964,7 +5202,7 @@ spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info) 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) + || spu_elf_section_data (s)->u.o.ovl_index != 0) { struct elf_segment_map *m2; bfd_vma amt; @@ -3000,28 +5238,38 @@ spu_elf_modify_segment_map (bfd *abfd, struct bfd_link_info *info) break; } - return TRUE; -} -/* Check that all loadable section VMAs lie in the range - LO .. HI inclusive. */ + /* Some SPU ELF loaders ignore the PF_OVERLAY flag and just load all + PT_LOAD segments. This can cause the .ovl.init section to be + overwritten with the contents of some overlay segment. To work + around this issue, we ensure that all PF_OVERLAY segments are + sorted first amongst the program headers; this ensures that even + with a broken loader, the .ovl.init section (which is not marked + as PF_OVERLAY) will be placed into SPU local store on startup. */ -asection * -spu_elf_check_vma (bfd *abfd, bfd_vma lo, bfd_vma hi) -{ - struct elf_segment_map *m; - unsigned int i; + /* Move all overlay segments onto a separate list. */ + p = &elf_tdata (abfd)->segment_map; + p_overlay = &m_overlay; + while (*p != NULL) + { + if ((*p)->p_type == PT_LOAD && (*p)->count == 1 + && spu_elf_section_data ((*p)->sections[0])->u.o.ovl_index != 0) + { + struct elf_segment_map *m = *p; + *p = m->next; + *p_overlay = m; + p_overlay = &m->next; + continue; + } - 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]; + p = &((*p)->next); + } - return NULL; + /* Re-insert overlay segments at the head of the segment map. */ + *p_overlay = elf_tdata (abfd)->segment_map; + elf_tdata (abfd)->segment_map = m_overlay; + + return TRUE; } /* Tweak the section type of .note.spu_name. */ @@ -3063,20 +5311,28 @@ spu_elf_modify_program_headers (bfd *abfd, struct bfd_link_info *info) 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) + && (o = spu_elf_section_data (m->sections[0])->u.o.ovl_index) != 0) { /* Mark this as an overlay header. */ phdr[i].p_flags |= PF_OVERLAY; - if (htab->ovtab != NULL && htab->ovtab->size != 0) + if (htab->ovtab != NULL && htab->ovtab->size != 0 + && htab->params->ovly_flavour != ovly_soft_icache) { bfd_byte *p = htab->ovtab->contents; - unsigned int off = (o - 1) * 16 + 8; + unsigned int off = o * 16 + 8; /* Write file_off into _ovly_table. */ bfd_put_32 (htab->ovtab->owner, phdr[i].p_offset, p + off); } } + /* Soft-icache has its file offset put in .ovl.init. */ + if (htab->init != NULL && htab->init->size != 0) + { + bfd_vma val = elf_section_data (htab->ovl_sec[0])->this_hdr.sh_offset; + + bfd_put_32 (htab->init->owner, val, htab->init->contents + 4); + } } /* Round up p_filesz and p_memsz of PT_LOAD segments to multiples @@ -3123,6 +5379,72 @@ spu_elf_modify_program_headers (bfd *abfd, struct bfd_link_info *info) return TRUE; } +bfd_boolean +spu_elf_size_sections (bfd * output_bfd, struct bfd_link_info *info) +{ + struct spu_link_hash_table *htab = spu_hash_table (info); + if (htab->params->emit_fixups) + { + asection *sfixup = htab->sfixup; + int fixup_count = 0; + bfd *ibfd; + size_t size; + + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + asection *isec; + + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + continue; + + /* Walk over each section attached to the input bfd. */ + for (isec = ibfd->sections; isec != NULL; isec = isec->next) + { + Elf_Internal_Rela *internal_relocs, *irelaend, *irela; + bfd_vma base_end; + + /* If there aren't any relocs, then there's nothing more + to do. */ + if ((isec->flags & SEC_RELOC) == 0 + || isec->reloc_count == 0) + continue; + + /* Get the relocs. */ + internal_relocs = + _bfd_elf_link_read_relocs (ibfd, isec, NULL, NULL, + info->keep_memory); + if (internal_relocs == NULL) + return FALSE; + + /* 1 quadword can contain up to 4 R_SPU_ADDR32 + relocations. They are stored in a single word by + saving the upper 28 bits of the address and setting the + lower 4 bits to a bit mask of the words that have the + relocation. BASE_END keeps track of the next quadword. */ + irela = internal_relocs; + irelaend = irela + isec->reloc_count; + base_end = 0; + for (; irela < irelaend; irela++) + if (ELF32_R_TYPE (irela->r_info) == R_SPU_ADDR32 + && irela->r_offset >= base_end) + { + base_end = (irela->r_offset & ~(bfd_vma) 15) + 16; + fixup_count++; + } + } + } + + /* We always have a NULL fixup as a sentinel */ + size = (fixup_count + 1) * FIXUP_RECORD_SIZE; + if (!bfd_set_section_size (output_bfd, sfixup, size)) + return FALSE; + sfixup->contents = (bfd_byte *) bfd_zalloc (info->input_bfds, size); + if (sfixup->contents == NULL) + return FALSE; + } + return TRUE; +} + #define TARGET_BIG_SYM bfd_elf32_spu_vec #define TARGET_BIG_NAME "elf32-spu" #define ELF_ARCH bfd_arch_spu @@ -3133,15 +5455,15 @@ spu_elf_modify_program_headers (bfd *abfd, struct bfd_link_info *info) #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 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 elf_backend_object_p spu_elf_object_p #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 diff --git a/bfd/elf32-spu.h b/bfd/elf32-spu.h index 1c421d9..a31c76e 100644 --- a/bfd/elf32-spu.h +++ b/bfd/elf32-spu.h @@ -1,6 +1,6 @@ /* SPU specific support for 32-bit ELF. - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -18,6 +18,61 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +struct spu_elf_params +{ + /* Stash various callbacks for --auto-overlay. */ + void (*place_spu_section) (asection *, asection *, const char *); + bfd_size_type (*spu_elf_load_ovl_mgr) (void); + FILE *(*spu_elf_open_overlay_script) (void); + void (*spu_elf_relink) (void); + + /* Bit 0 set if --auto-overlay. + Bit 1 set if --auto-relink. + Bit 2 set if --overlay-rodata. */ + unsigned int auto_overlay : 3; +#define AUTO_OVERLAY 1 +#define AUTO_RELINK 2 +#define OVERLAY_RODATA 4 + + /* Type of overlays, enum _ovly_flavour. */ + unsigned int ovly_flavour : 1; + unsigned int compact_stub : 1; + + /* 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 if lr liveness analysis should be done. */ + unsigned int lrlive_analysis : 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; + + /* Set if non-icache code should be allowed in icache lines. */ + unsigned int non_ia_text : 1; + + /* Set when the .fixup section should be generated. */ + unsigned int emit_fixups : 1; + + /* Range of valid addresses for loadable sections. */ + bfd_vma local_store_lo; + bfd_vma local_store_hi; + + /* Control --auto-overlay feature. */ + unsigned int num_lines; + unsigned int line_size; + unsigned int max_branch; + unsigned int auto_overlay_fixed; + unsigned int auto_overlay_reserved; + int extra_stack_space; +}; + /* Extra info kept for SPU sections. */ struct spu_elf_stack_info; @@ -26,32 +81,44 @@ struct _spu_elf_section_data { struct bfd_elf_section_data elf; - /* Stack analysis info kept for this section. */ + union { + /* Info kept for input sections. */ + struct { + /* Stack analysis info kept for this section. */ + struct spu_elf_stack_info *stack_info; + } i; - struct spu_elf_stack_info *stack_info; - - /* Non-zero for overlay output sections. */ - unsigned int ovl_index; + /* Info kept for output sections. */ + struct { + /* Non-zero for overlay output sections. */ + unsigned int ovl_index; + unsigned int ovl_buf; + } o; + } u; }; #define spu_elf_section_data(sec) \ ((struct _spu_elf_section_data *) elf_section_data (sec)) +enum _ovly_flavour +{ + ovly_normal, + ovly_soft_icache +}; + struct _ovl_stream { const void *start; const void *end; }; +extern void spu_elf_setup (struct bfd_link_info *, struct spu_elf_params *); 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); +extern bfd_boolean spu_elf_create_sections (struct bfd_link_info *); +extern bfd_boolean spu_elf_size_sections (bfd *, struct bfd_link_info *); +extern int spu_elf_find_overlays (struct bfd_link_info *); +extern int spu_elf_size_stubs (struct bfd_link_info *); +extern void spu_elf_place_overlay_data (struct bfd_link_info *); +extern asection *spu_elf_check_vma (struct bfd_link_info *); diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index a5bdc0c..922698f 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, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -52,7 +52,6 @@ v850_elf_check_relocs (bfd *abfd, struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - asection *sreloc; enum v850_reloc_type r_type; int other = 0; const char *common = NULL; @@ -68,7 +67,6 @@ v850_elf_check_relocs (bfd *abfd, dynobj = elf_hash_table (info)->dynobj; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - sreloc = NULL; rel_end = relocs + sec->reloc_count; for (rel = relocs; rel < rel_end; rel++) @@ -116,7 +114,9 @@ v850_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_V850_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -1680,7 +1680,7 @@ v850_elf_relocate_section (bfd *output_bfd, name = bfd_section_name (input_bfd, sec); } - switch (r) + switch ((int) r) { case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) @@ -2095,7 +2095,7 @@ v850_elf_add_symbol_hook (bfd *abfd, return TRUE; } -static bfd_boolean +static int v850_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, @@ -2122,7 +2122,7 @@ v850_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED, sym->st_other &= ~(V850_OTHER_SDA | V850_OTHER_ZDA | V850_OTHER_TDA | V850_OTHER_ERROR); - return TRUE; + return 1; } static bfd_boolean diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c index 5f3fffa..27bb230 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Matt Thomas . This file is part of BFD, the Binary File Descriptor library. @@ -47,6 +47,8 @@ static bfd_boolean elf_vax_finish_dynamic_symbol (bfd *, struct bfd_link_info *, Elf_Internal_Sym *); static bfd_boolean elf_vax_finish_dynamic_sections (bfd *, struct bfd_link_info *); +static bfd_vma elf_vax_plt_sym_val (bfd_vma, const asection *, + const arelent *); static bfd_boolean elf32_vax_set_private_flags (bfd *, flagword); static bfd_boolean elf32_vax_merge_private_bfd_data (bfd *, bfd *); @@ -368,7 +370,7 @@ static const bfd_byte elf_vax_plt0_entry[PLT_ENTRY_SIZE] = static const bfd_byte elf_vax_plt_entry[PLT_ENTRY_SIZE] = { - 0x40, 0x00, /* .word ^M */ + 0xfc, 0x0f, /* .word ^M */ 0x16, 0xef, /* jsb L^(pc) */ 0, 0, 0, 0, /* replaced with offset to start of .plt */ 0, 0, 0, 0, /* index into .rela.plt */ @@ -599,8 +601,15 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, switch (ELF32_R_TYPE (rel->r_info)) { case R_VAX_GOT32: - if (h != NULL - && strcmp (h->root.root.string, "_GLOBAL_OFFSET_TABLE_") == 0) + BFD_ASSERT (h != NULL); + if (h->forced_local + || h == elf_hash_table (info)->hgot + || h == elf_hash_table (info)->hplt) + break; + + /* If this is a local symbol, we resolve it directly without + creating a global offset table entry. */ + if (h == NULL || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) break; /* This symbol requires a global offset table entry. */ @@ -654,10 +663,11 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, h->got.refcount++; if (eh->got_addend != (bfd_vma) rel->r_addend) (*_bfd_error_handler) - (_("%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld"), - bfd_get_filename (abfd), rel->r_addend, - h->root.root.string, - eh->got_addend); + (_("%s: warning: GOT addend of %ld to `%s' does" + " not match previous GOT addend of %ld"), + bfd_get_filename (abfd), rel->r_addend, + h->root.root.string, + eh->got_addend); } } @@ -673,8 +683,9 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, /* If this is a local symbol, we resolve it directly without creating a procedure linkage table entry. */ - if (h == NULL) - continue; + BFD_ASSERT (h != NULL); + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || h->forced_local) + break; h->needs_plt = 1; if (h->plt.refcount == -1) @@ -702,7 +713,9 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, && (!info->symbolic || !h->def_regular))) { - if (h != NULL) + if (h != NULL + && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && !h->forced_local) { /* Make sure a plt entry is created for this symbol if it turns out to be a function defined by a dynamic @@ -714,11 +727,17 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } break; } + /* If this is a local symbol, we can resolve it directly. */ + if (h != NULL + && (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || h->forced_local)) + break; + /* Fall through. */ case R_VAX_8: case R_VAX_16: case R_VAX_32: - if (h != NULL) + if (h != NULL && ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) { /* Make sure a plt entry is created for this symbol if it turns out to be a function defined by a dynamic object. */ @@ -738,34 +757,12 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - const char *name; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) + if (sreloc == NULL) return FALSE; - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - if (sreloc == NULL) - { - sreloc = bfd_make_section_with_flags (dynobj, - name, - (SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (sreloc == NULL - || !bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } if (sec->flags & SEC_READONLY) info->flags |= DF_TEXTREL; } @@ -821,7 +818,9 @@ elf_vax_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_VAX_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -865,6 +864,9 @@ elf_vax_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, asection *sec, const Elf_Internal_Rela *rel, *relend; bfd *dynobj; + if (info->relocatable) + return TRUE; + dynobj = elf_hash_table (info)->dynobj; if (dynobj == NULL) return TRUE; @@ -1322,7 +1324,8 @@ elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, PTR infoptr) srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); if (!elf_hash_table (info)->dynamic_sections_created - || (info->shared && info->symbolic)) + || (info->shared && info->symbolic) + || h->forced_local) { h->got.refcount = 0; h->got.offset = (bfd_vma) -1; @@ -1331,6 +1334,8 @@ elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, PTR infoptr) } else if (h->got.refcount > 0) { + bfd_boolean dyn; + /* Make sure this symbol is output as a dynamic symbol. */ if (h->dynindx == -1) { @@ -1338,9 +1343,15 @@ elf_vax_instantiate_got_entries (struct elf_link_hash_entry *h, PTR infoptr) return FALSE; } + dyn = elf_hash_table (info)->dynamic_sections_created; /* Allocate space in the .got and .rela.got sections. */ - sgot->size += 4; - srelgot->size += sizeof (Elf32_External_Rela); + if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + && (info->shared + || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) + { + sgot->size += 4; + srelgot->size += sizeof (Elf32_External_Rela); + } } return TRUE; @@ -1426,10 +1437,11 @@ elf_vax_relocate_section (bfd *output_bfd, || h->root.type == bfd_link_hash_defweak) && ((r_type == R_VAX_PLT32 && h->plt.offset != (bfd_vma) -1 + && !h->forced_local && elf_hash_table (info)->dynamic_sections_created) || (r_type == R_VAX_GOT32 - && strcmp (h->root.root.string, - "_GLOBAL_OFFSET_TABLE_") != 0 + && h->got.offset != (bfd_vma) -1 + && !h->forced_local && elf_hash_table (info)->dynamic_sections_created && (! info->shared || (! info->symbolic && h->dynindx != -1) @@ -1447,10 +1459,7 @@ elf_vax_relocate_section (bfd *output_bfd, && h->def_dynamic)) && (r_type == R_VAX_8 || r_type == R_VAX_16 - || r_type == R_VAX_32 - || r_type == R_VAX_PC8 - || r_type == R_VAX_PC16 - || r_type == R_VAX_PC32)))) + || r_type == R_VAX_32)))) /* In these cases, we don't need the relocation value. We check specially because in some obscure cases sec->output_section will be NULL. */ @@ -1476,13 +1485,17 @@ elf_vax_relocate_section (bfd *output_bfd, case R_VAX_GOT32: /* Relocation is to the address of the entry for this symbol in the global offset table. */ - if (h == NULL || h->got.offset == (bfd_vma) -1) + if (h == NULL + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || h->got.offset == (bfd_vma) -1 + || h->forced_local) break; /* Relocation is the offset of the entry for this symbol in the global offset table. */ { + bfd_boolean dyn; bfd_vma off; if (sgot == NULL) @@ -1496,9 +1509,10 @@ elf_vax_relocate_section (bfd *output_bfd, BFD_ASSERT (off != (bfd_vma) -1); BFD_ASSERT (off < sgot->size); - if (info->shared - && h->dynindx == -1 - && h->def_regular) + dyn = elf_hash_table (info)->dynamic_sections_created; + if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) + || (info->shared + && SYMBOL_REFERENCES_LOCAL (info, h))) { /* The symbol was forced to be local because of a version file.. We must initialize @@ -1532,13 +1546,23 @@ elf_vax_relocate_section (bfd *output_bfd, } break; + case R_VAX_PC32: + /* If we are creating an executable and the function this + reloc refers to is in a shared lib, then we made a PLT + entry for this symbol and need to handle the reloc like + a PLT reloc. */ + if (info->shared) + goto r_vax_pc32_shared; + /* Fall through. */ case R_VAX_PLT32: /* Relocation is to the entry for this symbol in the procedure linkage table. */ /* Resolve a PLTxx reloc against a local symbol directly, without using the procedure linkage table. */ - if (h == NULL) + if (h == NULL + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || h->forced_local) break; if (h->plt.offset == (bfd_vma) -1 @@ -1591,8 +1615,10 @@ elf_vax_relocate_section (bfd *output_bfd, case R_VAX_PC8: case R_VAX_PC16: - case R_VAX_PC32: - if (h == NULL) + r_vax_pc32_shared: + if (h == NULL + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + || h->forced_local) break; /* Fall through. */ case R_VAX_8: @@ -1617,22 +1643,10 @@ elf_vax_relocate_section (bfd *output_bfd, time. */ if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = FALSE; @@ -2063,6 +2077,29 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) return TRUE; } +static enum elf_reloc_type_class +elf_vax_reloc_type_class (const Elf_Internal_Rela *rela) +{ + switch ((int) ELF32_R_TYPE (rela->r_info)) + { + case R_VAX_RELATIVE: + return reloc_class_relative; + case R_VAX_JMP_SLOT: + return reloc_class_plt; + case R_VAX_COPY: + return reloc_class_copy; + default: + return reloc_class_normal; + } +} + +static bfd_vma +elf_vax_plt_sym_val (bfd_vma i, const asection *plt, + const arelent *rel ATTRIBUTE_UNUSED) +{ + return plt->vma + (i + 1) * PLT_ENTRY_SIZE; +} + #define TARGET_LITTLE_SYM bfd_elf32_vax_vec #define TARGET_LITTLE_NAME "elf32-vax" #define ELF_MACHINE_CODE EM_VAX @@ -2085,8 +2122,10 @@ elf_vax_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) elf_vax_finish_dynamic_symbol #define elf_backend_finish_dynamic_sections \ elf_vax_finish_dynamic_sections +#define elf_backend_reloc_type_class elf_vax_reloc_type_class #define elf_backend_gc_mark_hook elf_vax_gc_mark_hook #define elf_backend_gc_sweep_hook elf_vax_gc_sweep_hook +#define elf_backend_plt_sym_val elf_vax_plt_sym_val #define bfd_elf32_bfd_merge_private_bfd_data \ elf32_vax_merge_private_bfd_data #define bfd_elf32_bfd_set_private_flags \ diff --git a/bfd/elf32-xc16x.c b/bfd/elf32-xc16x.c index 8c06c7f..826b6aa 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, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by KPIT Cummins Infosystems This file is part of BFD, the Binary File Descriptor library. @@ -24,7 +24,7 @@ #include "libbfd.h" #include "elf-bfd.h" #include "elf/xc16x.h" -#include "elf/dwarf2.h" +#include "dwarf2.h" #include "libiberty.h" static reloc_howto_type xc16x_elf_howto_table [] = diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c index f996902..53c40ad 100644 --- a/bfd/elf32-xstormy16.c +++ b/bfd/elf32-xstormy16.c @@ -512,7 +512,9 @@ xstormy16_elf_check_relocs (bfd *abfd, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_XSTORMY16_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 2ade49f..9f961dc 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -1,5 +1,6 @@ /* Xtensa-specific support for 32-bit ELF. - Copyright 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -108,7 +109,8 @@ 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 asection *xtensa_get_property_section (asection *, const char *); +static asection *xtensa_get_property_section (asection *, const char *); +extern asection *xtensa_make_property_section (asection *, const char *); static flagword xtensa_get_property_predef_flags (asection *); /* Other functions called directly by the linker. */ @@ -202,7 +204,10 @@ static reloc_howto_type elf_howto_table[] = bfd_elf_xtensa_reloc, "R_XTENSA_ASM_SIMPLIFY", FALSE, 0, 0, TRUE), EMPTY_HOWTO (13), - EMPTY_HOWTO (14), + + HOWTO (R_XTENSA_32_PCREL, 0, 2, 32, TRUE, 0, complain_overflow_bitfield, + bfd_elf_xtensa_reloc, "R_XTENSA_32_PCREL", + FALSE, 0, 0xffffffff, TRUE), /* GNU extension to record C++ vtable hierarchy. */ HOWTO (R_XTENSA_GNU_VTINHERIT, 0, 2, 0, FALSE, 0, complain_overflow_dont, @@ -284,6 +289,29 @@ static reloc_howto_type elf_howto_table[] = 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, 0, 0, TRUE), + + /* TLS relocations. */ + HOWTO (R_XTENSA_TLSDESC_FN, 0, 2, 32, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLSDESC_FN", + FALSE, 0, 0xffffffff, FALSE), + HOWTO (R_XTENSA_TLSDESC_ARG, 0, 2, 32, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLSDESC_ARG", + FALSE, 0, 0xffffffff, FALSE), + HOWTO (R_XTENSA_TLS_DTPOFF, 0, 2, 32, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLS_DTPOFF", + FALSE, 0, 0xffffffff, FALSE), + HOWTO (R_XTENSA_TLS_TPOFF, 0, 2, 32, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLS_TPOFF", + FALSE, 0, 0xffffffff, FALSE), + HOWTO (R_XTENSA_TLS_FUNC, 0, 0, 0, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLS_FUNC", + FALSE, 0, 0, FALSE), + HOWTO (R_XTENSA_TLS_ARG, 0, 0, 0, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLS_ARG", + FALSE, 0, 0, FALSE), + HOWTO (R_XTENSA_TLS_CALL, 0, 0, 0, FALSE, 0, complain_overflow_dont, + bfd_elf_xtensa_reloc, "R_XTENSA_TLS_CALL", + FALSE, 0, 0, FALSE), }; #if DEBUG_GEN_RELOC @@ -307,6 +335,10 @@ elf_xtensa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, TRACE ("BFD_RELOC_32"); return &elf_howto_table[(unsigned) R_XTENSA_32 ]; + case BFD_RELOC_32_PCREL: + TRACE ("BFD_RELOC_32_PCREL"); + return &elf_howto_table[(unsigned) R_XTENSA_32_PCREL ]; + case BFD_RELOC_XTENSA_DIFF8: TRACE ("BFD_RELOC_XTENSA_DIFF8"); return &elf_howto_table[(unsigned) R_XTENSA_DIFF8 ]; @@ -367,6 +399,34 @@ elf_xtensa_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, TRACE ("BFD_RELOC_VTABLE_ENTRY"); return &elf_howto_table[(unsigned) R_XTENSA_GNU_VTENTRY ]; + case BFD_RELOC_XTENSA_TLSDESC_FN: + TRACE ("BFD_RELOC_XTENSA_TLSDESC_FN"); + return &elf_howto_table[(unsigned) R_XTENSA_TLSDESC_FN ]; + + case BFD_RELOC_XTENSA_TLSDESC_ARG: + TRACE ("BFD_RELOC_XTENSA_TLSDESC_ARG"); + return &elf_howto_table[(unsigned) R_XTENSA_TLSDESC_ARG ]; + + case BFD_RELOC_XTENSA_TLS_DTPOFF: + TRACE ("BFD_RELOC_XTENSA_TLS_DTPOFF"); + return &elf_howto_table[(unsigned) R_XTENSA_TLS_DTPOFF ]; + + case BFD_RELOC_XTENSA_TLS_TPOFF: + TRACE ("BFD_RELOC_XTENSA_TLS_TPOFF"); + return &elf_howto_table[(unsigned) R_XTENSA_TLS_TPOFF ]; + + case BFD_RELOC_XTENSA_TLS_FUNC: + TRACE ("BFD_RELOC_XTENSA_TLS_FUNC"); + return &elf_howto_table[(unsigned) R_XTENSA_TLS_FUNC ]; + + case BFD_RELOC_XTENSA_TLS_ARG: + TRACE ("BFD_RELOC_XTENSA_TLS_ARG"); + return &elf_howto_table[(unsigned) R_XTENSA_TLS_ARG ]; + + case BFD_RELOC_XTENSA_TLS_CALL: + TRACE ("BFD_RELOC_XTENSA_TLS_CALL"); + return &elf_howto_table[(unsigned) R_XTENSA_TLS_CALL ]; + default: if (code >= BFD_RELOC_XTENSA_SLOT0_OP && code <= BFD_RELOC_XTENSA_SLOT14_OP) @@ -471,6 +531,56 @@ static const bfd_byte elf_xtensa_le_plt_entry[PLT_ENTRY_SIZE] = 0 /* unused */ }; +/* The size of the thread control block. */ +#define TCB_SIZE 8 + +struct elf_xtensa_link_hash_entry +{ + struct elf_link_hash_entry elf; + + bfd_signed_vma tlsfunc_refcount; + +#define GOT_UNKNOWN 0 +#define GOT_NORMAL 1 +#define GOT_TLS_GD 2 /* global or local dynamic */ +#define GOT_TLS_IE 4 /* initial or local exec */ +#define GOT_TLS_ANY (GOT_TLS_GD | GOT_TLS_IE) + unsigned char tls_type; +}; + +#define elf_xtensa_hash_entry(ent) ((struct elf_xtensa_link_hash_entry *)(ent)) + +struct elf_xtensa_obj_tdata +{ + struct elf_obj_tdata root; + + /* tls_type for each local got entry. */ + char *local_got_tls_type; + + bfd_signed_vma *local_tlsfunc_refcounts; +}; + +#define elf_xtensa_tdata(abfd) \ + ((struct elf_xtensa_obj_tdata *) (abfd)->tdata.any) + +#define elf_xtensa_local_got_tls_type(abfd) \ + (elf_xtensa_tdata (abfd)->local_got_tls_type) + +#define elf_xtensa_local_tlsfunc_refcounts(abfd) \ + (elf_xtensa_tdata (abfd)->local_tlsfunc_refcounts) + +#define is_xtensa_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == XTENSA_ELF_TDATA) + +static bfd_boolean +elf_xtensa_mkobject (bfd *abfd) +{ + return bfd_elf_allocate_object (abfd, sizeof (struct elf_xtensa_obj_tdata), + XTENSA_ELF_TDATA); +} + /* Xtensa ELF linker hash table. */ struct elf_xtensa_link_hash_table @@ -493,6 +603,8 @@ struct elf_xtensa_link_hash_table needed. It is OK if this count is an overestimate, e.g., some relocations may be removed by GC. */ int plt_reloc_count; + + struct elf_xtensa_link_hash_entry *tlsbase; }; /* Get the Xtensa ELF linker hash table from a link_info structure. */ @@ -500,11 +612,41 @@ struct elf_xtensa_link_hash_table #define elf_xtensa_hash_table(p) \ ((struct elf_xtensa_link_hash_table *) ((p)->hash)) +/* Create an entry in an Xtensa ELF linker hash table. */ + +static struct bfd_hash_entry * +elf_xtensa_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) +{ + /* Allocate the structure if it has not already been allocated by a + subclass. */ + if (entry == NULL) + { + entry = bfd_hash_allocate (table, + sizeof (struct elf_xtensa_link_hash_entry)); + if (entry == NULL) + return entry; + } + + /* Call the allocation method of the superclass. */ + entry = _bfd_elf_link_hash_newfunc (entry, table, string); + if (entry != NULL) + { + struct elf_xtensa_link_hash_entry *eh = elf_xtensa_hash_entry (entry); + eh->tlsfunc_refcount = 0; + eh->tls_type = GOT_UNKNOWN; + } + + return entry; +} + /* Create an Xtensa ELF linker hash table. */ static struct bfd_link_hash_table * elf_xtensa_link_hash_table_create (bfd *abfd) { + struct elf_link_hash_entry *tlsbase; struct elf_xtensa_link_hash_table *ret; bfd_size_type amt = sizeof (struct elf_xtensa_link_hash_table); @@ -513,8 +655,8 @@ elf_xtensa_link_hash_table_create (bfd *abfd) return NULL; if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, - _bfd_elf_link_hash_newfunc, - sizeof (struct elf_link_hash_entry))) + elf_xtensa_link_hash_newfunc, + sizeof (struct elf_xtensa_link_hash_entry))) { free (ret); return NULL; @@ -530,9 +672,46 @@ elf_xtensa_link_hash_table_create (bfd *abfd) ret->plt_reloc_count = 0; + /* Create a hash entry for "_TLS_MODULE_BASE_" to speed up checking + for it later. */ + tlsbase = elf_link_hash_lookup (&ret->elf, "_TLS_MODULE_BASE_", + TRUE, FALSE, FALSE); + tlsbase->root.type = bfd_link_hash_new; + tlsbase->root.u.undef.abfd = NULL; + tlsbase->non_elf = 0; + ret->tlsbase = elf_xtensa_hash_entry (tlsbase); + ret->tlsbase->tls_type = GOT_UNKNOWN; + return &ret->elf.root; } +/* Copy the extra info we tack onto an elf_link_hash_entry. */ + +static void +elf_xtensa_copy_indirect_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *dir, + struct elf_link_hash_entry *ind) +{ + struct elf_xtensa_link_hash_entry *edir, *eind; + + edir = elf_xtensa_hash_entry (dir); + eind = elf_xtensa_hash_entry (ind); + + if (ind->root.type == bfd_link_hash_indirect) + { + edir->tlsfunc_refcount += eind->tlsfunc_refcount; + eind->tlsfunc_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); +} + static inline bfd_boolean elf_xtensa_dynamic_symbol_p (struct elf_link_hash_entry *h, struct bfd_link_info *info) @@ -792,9 +971,11 @@ elf_xtensa_check_relocs (bfd *abfd, const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; - if (info->relocatable) + if (info->relocatable || (sec->flags & SEC_ALLOC) == 0) return TRUE; + BFD_ASSERT (is_xtensa_elf (abfd)); + htab = elf_xtensa_hash_table (info); symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); @@ -804,7 +985,12 @@ elf_xtensa_check_relocs (bfd *abfd, { unsigned int r_type; unsigned long r_symndx; - struct elf_link_hash_entry *h; + struct elf_link_hash_entry *h = NULL; + struct elf_xtensa_link_hash_entry *eh; + int tls_type, old_tls_type; + bfd_boolean is_got = FALSE; + bfd_boolean is_plt = FALSE; + bfd_boolean is_tlsfunc = FALSE; r_symndx = ELF32_R_SYM (rel->r_info); r_type = ELF32_R_TYPE (rel->r_info); @@ -816,38 +1002,91 @@ elf_xtensa_check_relocs (bfd *abfd, return FALSE; } - if (r_symndx < symtab_hdr->sh_info) - h = NULL; - else + if (r_symndx >= symtab_hdr->sh_info) { h = sym_hashes[r_symndx - symtab_hdr->sh_info]; while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; } + eh = elf_xtensa_hash_entry (h); switch (r_type) { - case R_XTENSA_32: - if (h == NULL) - goto local_literal; + case R_XTENSA_TLSDESC_FN: + if (info->shared) + { + tls_type = GOT_TLS_GD; + is_got = TRUE; + is_tlsfunc = TRUE; + } + else + tls_type = GOT_TLS_IE; + break; - if ((sec->flags & SEC_ALLOC) != 0) + case R_XTENSA_TLSDESC_ARG: + if (info->shared) { - if (h->got.refcount <= 0) - h->got.refcount = 1; - else - h->got.refcount += 1; + tls_type = GOT_TLS_GD; + is_got = TRUE; + } + else + { + tls_type = GOT_TLS_IE; + if (h && elf_xtensa_hash_entry (h) != htab->tlsbase) + is_got = TRUE; } break; + case R_XTENSA_TLS_DTPOFF: + if (info->shared) + tls_type = GOT_TLS_GD; + else + tls_type = GOT_TLS_IE; + break; + + case R_XTENSA_TLS_TPOFF: + tls_type = GOT_TLS_IE; + if (info->shared) + info->flags |= DF_STATIC_TLS; + if (info->shared || h) + is_got = TRUE; + break; + + case R_XTENSA_32: + tls_type = GOT_NORMAL; + is_got = TRUE; + break; + case R_XTENSA_PLT: - /* If this relocation is against a local symbol, then it's - exactly the same as a normal local GOT entry. */ - if (h == NULL) - goto local_literal; + tls_type = GOT_NORMAL; + is_plt = TRUE; + break; - if ((sec->flags & SEC_ALLOC) != 0) + case R_XTENSA_GNU_VTINHERIT: + /* This relocation describes the C++ object vtable hierarchy. + Reconstruct it for later use during GC. */ + if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) + return FALSE; + continue; + + case R_XTENSA_GNU_VTENTRY: + /* This relocation describes which C++ vtable entries are actually + used. Record for later use during GC. */ + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + return FALSE; + continue; + + default: + /* Nothing to do for any other relocations. */ + continue; + } + + if (h) + { + if (is_plt) { if (h->plt.refcount <= 0) { @@ -868,88 +1107,82 @@ elf_xtensa_check_relocs (bfd *abfd, return FALSE; } } - break; + else if (is_got) + { + if (h->got.refcount <= 0) + h->got.refcount = 1; + else + h->got.refcount += 1; + } - local_literal: - if ((sec->flags & SEC_ALLOC) != 0) + if (is_tlsfunc) + eh->tlsfunc_refcount += 1; + + old_tls_type = eh->tls_type; + } + else + { + /* Allocate storage the first time. */ + if (elf_local_got_refcounts (abfd) == NULL) { - bfd_signed_vma *local_got_refcounts; + bfd_size_type size = symtab_hdr->sh_info; + void *mem; - /* 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; + mem = bfd_zalloc (abfd, size * sizeof (bfd_signed_vma)); + if (mem == NULL) + return FALSE; + elf_local_got_refcounts (abfd) = (bfd_signed_vma *) mem; - size = symtab_hdr->sh_info; - size *= sizeof (bfd_signed_vma); - local_got_refcounts = - (bfd_signed_vma *) bfd_zalloc (abfd, size); - if (local_got_refcounts == NULL) - return FALSE; - elf_local_got_refcounts (abfd) = local_got_refcounts; - } - local_got_refcounts[r_symndx] += 1; + mem = bfd_zalloc (abfd, size); + if (mem == NULL) + return FALSE; + elf_xtensa_local_got_tls_type (abfd) = (char *) mem; + + mem = bfd_zalloc (abfd, size * sizeof (bfd_signed_vma)); + if (mem == NULL) + return FALSE; + elf_xtensa_local_tlsfunc_refcounts (abfd) + = (bfd_signed_vma *) mem; } - break; - case R_XTENSA_OP0: - case R_XTENSA_OP1: - case R_XTENSA_OP2: - case R_XTENSA_SLOT0_OP: - case R_XTENSA_SLOT1_OP: - case R_XTENSA_SLOT2_OP: - case R_XTENSA_SLOT3_OP: - case R_XTENSA_SLOT4_OP: - case R_XTENSA_SLOT5_OP: - case R_XTENSA_SLOT6_OP: - case R_XTENSA_SLOT7_OP: - case R_XTENSA_SLOT8_OP: - case R_XTENSA_SLOT9_OP: - case R_XTENSA_SLOT10_OP: - case R_XTENSA_SLOT11_OP: - case R_XTENSA_SLOT12_OP: - case R_XTENSA_SLOT13_OP: - case R_XTENSA_SLOT14_OP: - case R_XTENSA_SLOT0_ALT: - case R_XTENSA_SLOT1_ALT: - case R_XTENSA_SLOT2_ALT: - case R_XTENSA_SLOT3_ALT: - case R_XTENSA_SLOT4_ALT: - case R_XTENSA_SLOT5_ALT: - case R_XTENSA_SLOT6_ALT: - case R_XTENSA_SLOT7_ALT: - case R_XTENSA_SLOT8_ALT: - case R_XTENSA_SLOT9_ALT: - case R_XTENSA_SLOT10_ALT: - case R_XTENSA_SLOT11_ALT: - case R_XTENSA_SLOT12_ALT: - case R_XTENSA_SLOT13_ALT: - case R_XTENSA_SLOT14_ALT: - case R_XTENSA_ASM_EXPAND: - case R_XTENSA_ASM_SIMPLIFY: - case R_XTENSA_DIFF8: - case R_XTENSA_DIFF16: - case R_XTENSA_DIFF32: - /* Nothing to do for these. */ - break; + /* This is a global offset table entry for a local symbol. */ + if (is_got || is_plt) + elf_local_got_refcounts (abfd) [r_symndx] += 1; - case R_XTENSA_GNU_VTINHERIT: - /* This relocation describes the C++ object vtable hierarchy. - Reconstruct it for later use during GC. */ - if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset)) - return FALSE; - break; + if (is_tlsfunc) + elf_xtensa_local_tlsfunc_refcounts (abfd) [r_symndx] += 1; - case R_XTENSA_GNU_VTENTRY: - /* This relocation describes which C++ vtable entries are actually - used. Record for later use during GC. */ - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) - return FALSE; - break; + old_tls_type = elf_xtensa_local_got_tls_type (abfd) [r_symndx]; + } - default: - break; + if ((old_tls_type & GOT_TLS_IE) && (tls_type & GOT_TLS_IE)) + tls_type |= old_tls_type; + /* If a TLS symbol is accessed using IE at least once, + there is no point to use a dynamic model for it. */ + else if (old_tls_type != tls_type && old_tls_type != GOT_UNKNOWN + && ((old_tls_type & GOT_TLS_GD) == 0 + || (tls_type & GOT_TLS_IE) == 0)) + { + if ((old_tls_type & GOT_TLS_IE) && (tls_type & GOT_TLS_GD)) + tls_type = old_tls_type; + else if ((old_tls_type & GOT_TLS_GD) && (tls_type & GOT_TLS_GD)) + tls_type |= old_tls_type; + else + { + (*_bfd_error_handler) + (_("%B: `%s' accessed both as normal and thread local symbol"), + abfd, + h ? h->root.root.string : ""); + return FALSE; + } + } + + if (old_tls_type != tls_type) + { + if (eh) + eh->tls_type = tls_type; + else + elf_xtensa_local_got_tls_type (abfd) [r_symndx] = tls_type; } } @@ -1035,21 +1268,25 @@ elf_xtensa_gc_mark_hook (asection *sec, static bfd_boolean elf_xtensa_gc_sweep_hook (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct bfd_link_info *info, asection *sec, const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; - bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + struct elf_xtensa_link_hash_table *htab; + + htab = elf_xtensa_hash_table (info); + + if (info->relocatable) + return TRUE; if ((sec->flags & SEC_ALLOC) == 0) return TRUE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - local_got_refcounts = elf_local_got_refcounts (abfd); relend = relocs + sec->reloc_count; for (rel = relocs; rel < relend; rel++) @@ -1057,6 +1294,10 @@ elf_xtensa_gc_sweep_hook (bfd *abfd, unsigned long r_symndx; unsigned int r_type; struct elf_link_hash_entry *h = NULL; + struct elf_xtensa_link_hash_entry *eh; + bfd_boolean is_got = FALSE; + bfd_boolean is_plt = FALSE; + bfd_boolean is_tlsfunc = FALSE; r_symndx = ELF32_R_SYM (rel->r_info); if (r_symndx >= symtab_hdr->sh_info) @@ -1066,31 +1307,80 @@ elf_xtensa_gc_sweep_hook (bfd *abfd, || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; } + eh = elf_xtensa_hash_entry (h); r_type = ELF32_R_TYPE (rel->r_info); switch (r_type) { - case R_XTENSA_32: - if (h == NULL) - goto local_literal; - if (h->got.refcount > 0) - h->got.refcount--; + case R_XTENSA_TLSDESC_FN: + if (info->shared) + { + is_got = TRUE; + is_tlsfunc = TRUE; + } break; - case R_XTENSA_PLT: - if (h == NULL) - goto local_literal; - if (h->plt.refcount > 0) - h->plt.refcount--; + case R_XTENSA_TLSDESC_ARG: + if (info->shared) + is_got = TRUE; + else + { + if (h && elf_xtensa_hash_entry (h) != htab->tlsbase) + is_got = TRUE; + } break; - local_literal: - if (local_got_refcounts[r_symndx] > 0) - local_got_refcounts[r_symndx] -= 1; + case R_XTENSA_TLS_TPOFF: + if (info->shared || h) + is_got = TRUE; break; - default: + case R_XTENSA_32: + is_got = TRUE; break; + + case R_XTENSA_PLT: + is_plt = TRUE; + break; + + default: + continue; + } + + if (h) + { + if (is_plt) + { + if (h->plt.refcount > 0) + h->plt.refcount--; + } + else if (is_got) + { + if (h->got.refcount > 0) + h->got.refcount--; + } + if (is_tlsfunc) + { + if (eh->tlsfunc_refcount > 0) + eh->tlsfunc_refcount--; + } + } + else + { + if (is_got || is_plt) + { + bfd_signed_vma *got_refcount + = &elf_local_got_refcounts (abfd) [r_symndx]; + if (*got_refcount > 0) + *got_refcount -= 1; + } + if (is_tlsfunc) + { + bfd_signed_vma *tlsfunc_refcount + = &elf_xtensa_local_tlsfunc_refcounts (abfd) [r_symndx]; + if (*tlsfunc_refcount > 0) + *tlsfunc_refcount -= 1; + } } } @@ -1115,6 +1405,7 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) 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"); + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); /* Create any extra PLT sections in case check_relocs has already been called on all the non-dynamic input files. */ @@ -1130,12 +1421,6 @@ elf_xtensa_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) || ! bfd_set_section_flags (dynobj, htab->sgotplt, flags)) return FALSE; - /* Create ".rela.got". */ - 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). */ htab->sgotloc = bfd_make_section_with_flags (dynobj, ".got.loc", flags); if (htab->sgotloc == NULL @@ -1228,7 +1513,7 @@ elf_xtensa_allocate_dynrelocs (struct elf_link_hash_entry *h, void *arg) { struct bfd_link_info *info; struct elf_xtensa_link_hash_table *htab; - bfd_boolean is_dynamic; + struct elf_xtensa_link_hash_entry *eh = elf_xtensa_hash_entry (h); if (h->root.type == bfd_link_hash_indirect) return TRUE; @@ -1239,9 +1524,15 @@ elf_xtensa_allocate_dynrelocs (struct elf_link_hash_entry *h, void *arg) info = (struct bfd_link_info *) arg; htab = elf_xtensa_hash_table (info); - is_dynamic = elf_xtensa_dynamic_symbol_p (h, info); + /* If we saw any use of an IE model for this symbol, we can then optimize + away GOT entries for any TLSDESC_FN relocs. */ + if ((eh->tls_type & GOT_TLS_IE) != 0) + { + BFD_ASSERT (h->got.refcount >= eh->tlsfunc_refcount); + h->got.refcount -= eh->tlsfunc_refcount; + } - if (! is_dynamic) + if (! elf_xtensa_dynamic_symbol_p (h, info)) elf_xtensa_make_sym_local (info, h); if (h->plt.refcount > 0) @@ -1277,6 +1568,16 @@ elf_xtensa_allocate_local_got_size (struct bfd_link_info *info) for (j = 0; j < cnt; ++j) { + /* If we saw any use of an IE model for this symbol, we can + then optimize away GOT entries for any TLSDESC_FN relocs. */ + if ((elf_xtensa_local_got_tls_type (i) [j] & GOT_TLS_IE) != 0) + { + bfd_signed_vma *tlsfunc_refcount + = &elf_xtensa_local_tlsfunc_refcounts (i) [j]; + BFD_ASSERT (local_got_refcounts[j] >= *tlsfunc_refcount); + local_got_refcounts[j] -= *tlsfunc_refcount; + } + if (local_got_refcounts[j] > 0) htab->srelgot->size += (local_got_refcounts[j] * sizeof (Elf32_External_Rela)); @@ -1502,8 +1803,7 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (relplt) { - if (!add_dynamic_entry (DT_PLTGOT, 0) - || !add_dynamic_entry (DT_PLTRELSZ, 0) + if (!add_dynamic_entry (DT_PLTRELSZ, 0) || !add_dynamic_entry (DT_PLTREL, DT_RELA) || !add_dynamic_entry (DT_JMPREL, 0)) return FALSE; @@ -1517,7 +1817,8 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } - if (!add_dynamic_entry (DT_XTENSA_GOT_LOC_OFF, 0) + if (!add_dynamic_entry (DT_PLTGOT, 0) + || !add_dynamic_entry (DT_XTENSA_GOT_LOC_OFF, 0) || !add_dynamic_entry (DT_XTENSA_GOT_LOC_SZ, 0)) return FALSE; } @@ -1526,7 +1827,66 @@ elf_xtensa_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return TRUE; } +static bfd_boolean +elf_xtensa_always_size_sections (bfd *output_bfd, + struct bfd_link_info *info) +{ + struct elf_xtensa_link_hash_table *htab; + asection *tls_sec; + + htab = elf_xtensa_hash_table (info); + tls_sec = htab->elf.tls_sec; + + if (tls_sec && (htab->tlsbase->tls_type & GOT_TLS_ANY) != 0) + { + struct elf_link_hash_entry *tlsbase = &htab->tlsbase->elf; + struct bfd_link_hash_entry *bh = &tlsbase->root; + const struct elf_backend_data *bed = get_elf_backend_data (output_bfd); + + tlsbase->type = STT_TLS; + if (!(_bfd_generic_link_add_one_symbol + (info, output_bfd, "_TLS_MODULE_BASE_", BSF_LOCAL, + tls_sec, 0, NULL, FALSE, + bed->collect, &bh))) + return FALSE; + tlsbase->def_regular = 1; + tlsbase->other = STV_HIDDEN; + (*bed->elf_backend_hide_symbol) (info, tlsbase, TRUE); + } + + return TRUE; +} + +/* Return the base VMA address which should be subtracted from real addresses + when resolving @dtpoff relocation. + This is PT_TLS segment p_vaddr. */ + +static bfd_vma +dtpoff_base (struct bfd_link_info *info) +{ + /* If tls_sec is NULL, we should have signalled an error already. */ + if (elf_hash_table (info)->tls_sec == NULL) + return 0; + return elf_hash_table (info)->tls_sec->vma; +} + +/* Return the relocation value for @tpoff relocation + if STT_TLS virtual address is ADDRESS. */ + +static bfd_vma +tpoff (struct bfd_link_info *info, bfd_vma address) +{ + struct elf_link_hash_table *htab = elf_hash_table (info); + bfd_vma base; + + /* If tls_sec is NULL, we should have signalled an error already. */ + if (htab->tls_sec == NULL) + return 0; + base = align_power ((bfd_vma) TCB_SIZE, htab->tls_sec->alignment_power); + return address - htab->tls_sec->vma + base; +} + /* 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 @@ -1550,7 +1910,7 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, xtensa_isa isa = xtensa_default_isa; static xtensa_insnbuf ibuff = NULL; static xtensa_insnbuf sbuff = NULL; - bfd_vma self_address = 0; + bfd_vma self_address; bfd_size_type input_size; int opnd, slot; uint32 newval; @@ -1563,12 +1923,20 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, input_size = bfd_get_section_limit (abfd, input_section); + /* Calculate the PC address for this instruction. */ + self_address = (input_section->output_section->vma + + input_section->output_offset + + address); + switch (howto->type) { case R_XTENSA_NONE: case R_XTENSA_DIFF8: case R_XTENSA_DIFF16: case R_XTENSA_DIFF32: + case R_XTENSA_TLS_FUNC: + case R_XTENSA_TLS_ARG: + case R_XTENSA_TLS_CALL: return bfd_reloc_ok; case R_XTENSA_ASM_EXPAND: @@ -1580,9 +1948,6 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, input_size - address, 0); if (is_windowed_call_opcode (opcode)) { - self_address = (input_section->output_section->vma - + input_section->output_offset - + address); if ((self_address >> CALL_SEGMENT_BITS) != (relocation >> CALL_SEGMENT_BITS)) { @@ -1605,12 +1970,12 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, /* The CALL needs to be relocated. Continue below for that part. */ address += 3; + self_address += 3; howto = &elf_howto_table[(unsigned) R_XTENSA_SLOT0_OP ]; } break; case R_XTENSA_32: - case R_XTENSA_PLT: { bfd_vma x; x = bfd_get_32 (abfd, contents + address); @@ -1618,6 +1983,18 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, bfd_put_32 (abfd, x, contents + address); } return bfd_reloc_ok; + + case R_XTENSA_32_PCREL: + bfd_put_32 (abfd, relocation - self_address, contents + address); + return bfd_reloc_ok; + + case R_XTENSA_PLT: + case R_XTENSA_TLSDESC_FN: + case R_XTENSA_TLSDESC_ARG: + case R_XTENSA_TLS_DTPOFF: + case R_XTENSA_TLS_TPOFF: + bfd_put_32 (abfd, relocation, contents + address); + return bfd_reloc_ok; } /* Only instruction slot-specific relocations handled below.... */ @@ -1703,11 +2080,6 @@ elf_xtensa_do_reloc (reloc_howto_type *howto, return bfd_reloc_dangerous; } - /* Calculate the PC address for this instruction. */ - self_address = (input_section->output_section->vma - + input_section->output_offset - + address); - newval = relocation; } } @@ -1785,12 +2157,15 @@ vsprint_msg (const char *origmsg, const char *fmt, int arglen, ...) len = orig_len + strlen (fmt) + arglen + 20; if (len > alloc_size) { - message = (char *) bfd_realloc (message, len); + message = (char *) bfd_realloc_or_free (message, len); alloc_size = len; } - if (!is_append) - memcpy (message, origmsg, orig_len); - vsprintf (message + orig_len, fmt, ap); + if (message != NULL) + { + if (!is_append) + memcpy (message, origmsg, orig_len); + vsprintf (message + orig_len, fmt, ap); + } VA_CLOSE (ap); return message; } @@ -1931,34 +2306,216 @@ elf_xtensa_create_plt_entry (struct bfd_link_info *info, plt_base = splt->output_section->vma + splt->output_offset; got_base = sgotplt->output_section->vma + sgotplt->output_offset; - lit_offset = 8 + (reloc_index % PLT_ENTRIES_PER_CHUNK) * 4; - code_offset = (reloc_index % PLT_ENTRIES_PER_CHUNK) * PLT_ENTRY_SIZE; + lit_offset = 8 + (reloc_index % PLT_ENTRIES_PER_CHUNK) * 4; + code_offset = (reloc_index % PLT_ENTRIES_PER_CHUNK) * PLT_ENTRY_SIZE; + + /* Fill in the literal entry. This is the offset of the dynamic + relocation entry. */ + bfd_put_32 (output_bfd, reloc_index * sizeof (Elf32_External_Rela), + sgotplt->contents + lit_offset); + + /* Fill in the entry in the procedure linkage table. */ + memcpy (splt->contents + code_offset, + (bfd_big_endian (output_bfd) + ? elf_xtensa_be_plt_entry + : elf_xtensa_le_plt_entry), + PLT_ENTRY_SIZE); + bfd_put_16 (output_bfd, l32r_offset (got_base + 0, + plt_base + code_offset + 3), + splt->contents + code_offset + 4); + bfd_put_16 (output_bfd, l32r_offset (got_base + 4, + plt_base + code_offset + 6), + splt->contents + code_offset + 7); + bfd_put_16 (output_bfd, l32r_offset (got_base + lit_offset, + plt_base + code_offset + 9), + splt->contents + code_offset + 10); + + return plt_base + code_offset; +} + + +static bfd_boolean get_indirect_call_dest_reg (xtensa_opcode, unsigned *); + +static bfd_boolean +replace_tls_insn (Elf_Internal_Rela *rel, + bfd *abfd, + asection *input_section, + bfd_byte *contents, + bfd_boolean is_ld_model, + char **error_message) +{ + static xtensa_insnbuf ibuff = NULL; + static xtensa_insnbuf sbuff = NULL; + xtensa_isa isa = xtensa_default_isa; + xtensa_format fmt; + xtensa_opcode old_op, new_op; + bfd_size_type input_size; + int r_type; + unsigned dest_reg, src_reg; + + if (ibuff == NULL) + { + ibuff = xtensa_insnbuf_alloc (isa); + sbuff = xtensa_insnbuf_alloc (isa); + } + + input_size = bfd_get_section_limit (abfd, input_section); + + /* Read the instruction into a buffer and decode the opcode. */ + xtensa_insnbuf_from_chars (isa, ibuff, contents + rel->r_offset, + input_size - rel->r_offset); + fmt = xtensa_format_decode (isa, ibuff); + if (fmt == XTENSA_UNDEFINED) + { + *error_message = "cannot decode instruction format"; + return FALSE; + } + + BFD_ASSERT (xtensa_format_num_slots (isa, fmt) == 1); + xtensa_format_get_slot (isa, fmt, 0, ibuff, sbuff); + + old_op = xtensa_opcode_decode (isa, fmt, 0, sbuff); + if (old_op == XTENSA_UNDEFINED) + { + *error_message = "cannot decode instruction opcode"; + return FALSE; + } + + r_type = ELF32_R_TYPE (rel->r_info); + switch (r_type) + { + case R_XTENSA_TLS_FUNC: + case R_XTENSA_TLS_ARG: + if (old_op != get_l32r_opcode () + || xtensa_operand_get_field (isa, old_op, 0, fmt, 0, + sbuff, &dest_reg) != 0) + { + *error_message = "cannot extract L32R destination for TLS access"; + return FALSE; + } + break; + + case R_XTENSA_TLS_CALL: + if (! get_indirect_call_dest_reg (old_op, &dest_reg) + || xtensa_operand_get_field (isa, old_op, 0, fmt, 0, + sbuff, &src_reg) != 0) + { + *error_message = "cannot extract CALLXn operands for TLS access"; + return FALSE; + } + break; + + default: + abort (); + } + + if (is_ld_model) + { + switch (r_type) + { + case R_XTENSA_TLS_FUNC: + case R_XTENSA_TLS_ARG: + /* Change the instruction to a NOP (or "OR a1, a1, a1" for older + versions of Xtensa). */ + new_op = xtensa_opcode_lookup (isa, "nop"); + if (new_op == XTENSA_UNDEFINED) + { + new_op = xtensa_opcode_lookup (isa, "or"); + if (new_op == XTENSA_UNDEFINED + || xtensa_opcode_encode (isa, fmt, 0, sbuff, new_op) != 0 + || xtensa_operand_set_field (isa, new_op, 0, fmt, 0, + sbuff, 1) != 0 + || xtensa_operand_set_field (isa, new_op, 1, fmt, 0, + sbuff, 1) != 0 + || xtensa_operand_set_field (isa, new_op, 2, fmt, 0, + sbuff, 1) != 0) + { + *error_message = "cannot encode OR for TLS access"; + return FALSE; + } + } + else + { + if (xtensa_opcode_encode (isa, fmt, 0, sbuff, new_op) != 0) + { + *error_message = "cannot encode NOP for TLS access"; + return FALSE; + } + } + break; + + case R_XTENSA_TLS_CALL: + /* Read THREADPTR into the CALLX's return value register. */ + new_op = xtensa_opcode_lookup (isa, "rur.threadptr"); + if (new_op == XTENSA_UNDEFINED + || xtensa_opcode_encode (isa, fmt, 0, sbuff, new_op) != 0 + || xtensa_operand_set_field (isa, new_op, 0, fmt, 0, + sbuff, dest_reg + 2) != 0) + { + *error_message = "cannot encode RUR.THREADPTR for TLS access"; + return FALSE; + } + break; + } + } + else + { + switch (r_type) + { + case R_XTENSA_TLS_FUNC: + new_op = xtensa_opcode_lookup (isa, "rur.threadptr"); + if (new_op == XTENSA_UNDEFINED + || xtensa_opcode_encode (isa, fmt, 0, sbuff, new_op) != 0 + || xtensa_operand_set_field (isa, new_op, 0, fmt, 0, + sbuff, dest_reg) != 0) + { + *error_message = "cannot encode RUR.THREADPTR for TLS access"; + return FALSE; + } + break; - /* Fill in the literal entry. This is the offset of the dynamic - relocation entry. */ - bfd_put_32 (output_bfd, reloc_index * sizeof (Elf32_External_Rela), - sgotplt->contents + lit_offset); + case R_XTENSA_TLS_ARG: + /* Nothing to do. Keep the original L32R instruction. */ + return TRUE; + + case R_XTENSA_TLS_CALL: + /* Add the CALLX's src register (holding the THREADPTR value) + to the first argument register (holding the offset) and put + the result in the CALLX's return value register. */ + new_op = xtensa_opcode_lookup (isa, "add"); + if (new_op == XTENSA_UNDEFINED + || xtensa_opcode_encode (isa, fmt, 0, sbuff, new_op) != 0 + || xtensa_operand_set_field (isa, new_op, 0, fmt, 0, + sbuff, dest_reg + 2) != 0 + || xtensa_operand_set_field (isa, new_op, 1, fmt, 0, + sbuff, dest_reg + 2) != 0 + || xtensa_operand_set_field (isa, new_op, 2, fmt, 0, + sbuff, src_reg) != 0) + { + *error_message = "cannot encode ADD for TLS access"; + return FALSE; + } + break; + } + } - /* Fill in the entry in the procedure linkage table. */ - memcpy (splt->contents + code_offset, - (bfd_big_endian (output_bfd) - ? elf_xtensa_be_plt_entry - : elf_xtensa_le_plt_entry), - PLT_ENTRY_SIZE); - bfd_put_16 (output_bfd, l32r_offset (got_base + 0, - plt_base + code_offset + 3), - splt->contents + code_offset + 4); - bfd_put_16 (output_bfd, l32r_offset (got_base + 4, - plt_base + code_offset + 6), - splt->contents + code_offset + 7); - bfd_put_16 (output_bfd, l32r_offset (got_base + lit_offset, - plt_base + code_offset + 9), - splt->contents + code_offset + 10); + xtensa_format_set_slot (isa, fmt, 0, ibuff, sbuff); + xtensa_insnbuf_to_chars (isa, ibuff, contents + rel->r_offset, + input_size - rel->r_offset); - return plt_base + code_offset; + return TRUE; } +#define IS_XTENSA_TLS_RELOC(R_TYPE) \ + ((R_TYPE) == R_XTENSA_TLSDESC_FN \ + || (R_TYPE) == R_XTENSA_TLSDESC_ARG \ + || (R_TYPE) == R_XTENSA_TLS_DTPOFF \ + || (R_TYPE) == R_XTENSA_TLS_TPOFF \ + || (R_TYPE) == R_XTENSA_TLS_FUNC \ + || (R_TYPE) == R_XTENSA_TLS_ARG \ + || (R_TYPE) == R_XTENSA_TLS_CALL) + /* Relocate an Xtensa ELF section. This is invoked by the linker for both relocatable and final links. */ @@ -1979,15 +2536,20 @@ elf_xtensa_relocate_section (bfd *output_bfd, struct elf_link_hash_entry **sym_hashes; property_table_entry *lit_table = 0; int ltblsize = 0; + char *local_got_tls_types; char *error_message = NULL; bfd_size_type input_size; + int tls_type; if (!xtensa_default_isa) xtensa_default_isa = xtensa_isa_init (0, 0); + BFD_ASSERT (is_xtensa_elf (input_bfd)); + htab = elf_xtensa_hash_table (info); symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; sym_hashes = elf_sym_hashes (input_bfd); + local_got_tls_types = elf_xtensa_local_got_tls_type (input_bfd); if (elf_hash_table (info)->dynamic_sections_created) { @@ -2009,12 +2571,15 @@ elf_xtensa_relocate_section (bfd *output_bfd, unsigned long r_symndx; struct elf_link_hash_entry *h; Elf_Internal_Sym *sym; + char sym_type; + const char *name; asection *sec; bfd_vma relocation; bfd_reloc_status_type r; bfd_boolean is_weak_undef; bfd_boolean unresolved_reloc; bfd_boolean warned; + bfd_boolean dynamic_symbol; r_type = ELF32_R_TYPE (rel->r_info); if (r_type == (int) R_XTENSA_GNU_VTINHERIT @@ -2050,6 +2615,7 @@ elf_xtensa_relocate_section (bfd *output_bfd, if (r_symndx < symtab_hdr->sh_info) { sym = local_syms + r_symndx; + sym_type = ELF32_ST_TYPE (sym->st_info); sec = local_sections[r_symndx]; relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); } @@ -2064,6 +2630,8 @@ elf_xtensa_relocate_section (bfd *output_bfd, && !unresolved_reloc && h->root.type == bfd_link_hash_undefweak) is_weak_undef = TRUE; + + sym_type = h->type; } if (sec != NULL && elf_discarded_section (sec)) @@ -2093,7 +2661,6 @@ elf_xtensa_relocate_section (bfd *output_bfd, if (!do_fix_for_relocatable_link (rel, input_bfd, input_section, contents)) return FALSE; - r_type = ELF32_R_TYPE (rel->r_info); } if (r_type == R_XTENSA_ASM_SIMPLIFY) @@ -2163,10 +2730,6 @@ elf_xtensa_relocate_section (bfd *output_bfd, /* Check if this references a section in another input file. */ do_fix_for_final_link (rel, input_bfd, input_section, contents, &relocation); - - /* Update some already cached values. */ - r_type = ELF32_R_TYPE (rel->r_info); - howto = &elf_howto_table[r_type]; } /* Sanity check the address. */ @@ -2180,27 +2743,49 @@ elf_xtensa_relocate_section (bfd *output_bfd, return FALSE; } - /* Generate dynamic relocations. */ - if (elf_hash_table (info)->dynamic_sections_created) + if (h != NULL) + name = h->root.root.string; + else { - bfd_boolean dynamic_symbol = elf_xtensa_dynamic_symbol_p (h, info); + 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 (dynamic_symbol && is_operand_relocation (r_type)) - { - /* This is an error. The symbol's real value won't be known - until runtime and it's likely to be out of range anyway. */ - const char *name = h->root.root.string; - error_message = vsprint_msg ("invalid relocation for dynamic " - "symbol", ": %s", - strlen (name) + 2, name); - if (!((*info->callbacks->reloc_dangerous) - (info, error_message, input_bfd, input_section, - rel->r_offset))) - return FALSE; - } - else if ((r_type == R_XTENSA_32 || r_type == R_XTENSA_PLT) - && (input_section->flags & SEC_ALLOC) != 0 - && (dynamic_symbol || info->shared)) + if (r_symndx != 0 + && r_type != R_XTENSA_NONE + && (h == NULL + || h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && IS_XTENSA_TLS_RELOC (r_type) != (sym_type == STT_TLS)) + { + (*_bfd_error_handler) + ((sym_type == STT_TLS + ? _("%B(%A+0x%lx): %s used with TLS symbol %s") + : _("%B(%A+0x%lx): %s used with non-TLS symbol %s")), + input_bfd, + input_section, + (long) rel->r_offset, + howto->name, + name); + } + + dynamic_symbol = elf_xtensa_dynamic_symbol_p (h, info); + + tls_type = GOT_UNKNOWN; + if (h) + tls_type = elf_xtensa_hash_entry (h)->tls_type; + else if (local_got_tls_types) + tls_type = local_got_tls_types [r_symndx]; + + switch (r_type) + { + case R_XTENSA_32: + case R_XTENSA_PLT: + if (elf_hash_table (info)->dynamic_sections_created + && (input_section->flags & SEC_ALLOC) != 0 + && (dynamic_symbol || info->shared)) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -2277,6 +2862,158 @@ elf_xtensa_relocate_section (bfd *output_bfd, BFD_ASSERT (sizeof (Elf32_External_Rela) * srel->reloc_count <= srel->size); } + else if (r_type == R_XTENSA_ASM_EXPAND && dynamic_symbol) + { + /* This should only happen for non-PIC code, which is not + supposed to be used on systems with dynamic linking. + Just ignore these relocations. */ + continue; + } + break; + + case R_XTENSA_TLS_TPOFF: + /* Switch to LE model for local symbols in an executable. */ + if (! info->shared && ! dynamic_symbol) + { + relocation = tpoff (info, relocation); + break; + } + /* fall through */ + + case R_XTENSA_TLSDESC_FN: + case R_XTENSA_TLSDESC_ARG: + { + if (r_type == R_XTENSA_TLSDESC_FN) + { + if (! info->shared || (tls_type & GOT_TLS_IE) != 0) + r_type = R_XTENSA_NONE; + } + else if (r_type == R_XTENSA_TLSDESC_ARG) + { + if (info->shared) + { + if ((tls_type & GOT_TLS_IE) != 0) + r_type = R_XTENSA_TLS_TPOFF; + } + else + { + r_type = R_XTENSA_TLS_TPOFF; + if (! dynamic_symbol) + { + relocation = tpoff (info, relocation); + break; + } + } + } + + if (r_type == R_XTENSA_NONE) + /* Nothing to do here; skip to the next reloc. */ + continue; + + if (! elf_hash_table (info)->dynamic_sections_created) + { + error_message = + _("TLS relocation invalid without dynamic sections"); + if (!((*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, + rel->r_offset))) + return FALSE; + } + else + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + asection *srel = htab->srelgot; + int indx; + + outrel.r_offset = (input_section->output_section->vma + + input_section->output_offset + + rel->r_offset); + + /* Complain if the relocation is in a read-only section + and not in a literal pool. */ + if ((input_section->flags & SEC_READONLY) != 0 + && ! elf_xtensa_in_literal_pool (lit_table, ltblsize, + outrel.r_offset)) + { + error_message = + _("dynamic relocation in read-only section"); + if (!((*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, + rel->r_offset))) + return FALSE; + } + + indx = h && h->dynindx != -1 ? h->dynindx : 0; + if (indx == 0) + outrel.r_addend = relocation - dtpoff_base (info); + else + outrel.r_addend = 0; + rel->r_addend = 0; + + outrel.r_info = ELF32_R_INFO (indx, r_type); + relocation = 0; + unresolved_reloc = FALSE; + + BFD_ASSERT (srel); + loc = (srel->contents + + srel->reloc_count++ * sizeof (Elf32_External_Rela)); + bfd_elf32_swap_reloca_out (output_bfd, &outrel, loc); + BFD_ASSERT (sizeof (Elf32_External_Rela) * srel->reloc_count + <= srel->size); + } + } + break; + + case R_XTENSA_TLS_DTPOFF: + if (! info->shared) + /* Switch from LD model to LE model. */ + relocation = tpoff (info, relocation); + else + relocation -= dtpoff_base (info); + break; + + case R_XTENSA_TLS_FUNC: + case R_XTENSA_TLS_ARG: + case R_XTENSA_TLS_CALL: + /* Check if optimizing to IE or LE model. */ + if ((tls_type & GOT_TLS_IE) != 0) + { + bfd_boolean is_ld_model = + (h && elf_xtensa_hash_entry (h) == htab->tlsbase); + if (! replace_tls_insn (rel, input_bfd, input_section, contents, + is_ld_model, &error_message)) + { + if (!((*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, + rel->r_offset))) + return FALSE; + } + + if (r_type != R_XTENSA_TLS_ARG || is_ld_model) + { + /* Skip subsequent relocations on the same instruction. */ + while (rel + 1 < relend && rel[1].r_offset == rel->r_offset) + rel++; + } + } + continue; + + default: + if (elf_hash_table (info)->dynamic_sections_created + && dynamic_symbol && (is_operand_relocation (r_type) + || r_type == R_XTENSA_32_PCREL)) + { + error_message = + vsprint_msg ("invalid relocation for dynamic symbol", ": %s", + strlen (name) + 2, name); + if (!((*info->callbacks->reloc_dangerous) + (info, error_message, input_bfd, input_section, + rel->r_offset))) + return FALSE; + continue; + } + break; } /* Dynamic relocs are not propagated for SEC_DEBUGGING sections @@ -2292,10 +3029,13 @@ elf_xtensa_relocate_section (bfd *output_bfd, input_section, (long) rel->r_offset, howto->name, - h->root.root.string); + name); return FALSE; } + /* TLS optimizations may have changed r_type; update "howto". */ + howto = &elf_howto_table[r_type]; + /* There's no point in calling bfd_perform_relocation here. Just go directly to our "special function". */ r = elf_xtensa_do_reloc (howto, input_bfd, input_section, @@ -2305,30 +3045,16 @@ elf_xtensa_relocate_section (bfd *output_bfd, if (r != bfd_reloc_ok && !warned) { - const char *name; - BFD_ASSERT (r == bfd_reloc_dangerous || r == bfd_reloc_other); BFD_ASSERT (error_message != NULL); - if (h) - name = h->root.root.string; + if (rel->r_addend == 0) + error_message = vsprint_msg (error_message, ": %s", + strlen (name) + 2, name); else - { - name = bfd_elf_string_from_elf_section - (input_bfd, symtab_hdr->sh_link, sym->st_name); - if (name && *name == '\0') - name = bfd_section_name (input_bfd, sec); - } - if (name) - { - if (rel->r_addend == 0) - error_message = vsprint_msg (error_message, ": %s", - strlen (name) + 2, name); - else - error_message = vsprint_msg (error_message, ": (%s+0x%x)", - strlen (name) + 22, - name, (int)rel->r_addend); - } + error_message = vsprint_msg (error_message, ": (%s+0x%x)", + strlen (name) + 22, + name, (int) rel->r_addend); if (!((*info->callbacks->reloc_dangerous) (info, error_message, input_bfd, input_section, @@ -2500,7 +3226,7 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, bfd *dynobj; asection *sdyn, *srelplt, *sgot, *sxtlit, *sgotloc; Elf32_External_Dyn *dyncon, *dynconend; - int num_xtlit_entries; + int num_xtlit_entries = 0; if (! elf_hash_table (info)->dynamic_sections_created) return TRUE; @@ -2625,11 +3351,14 @@ elf_xtensa_finish_dynamic_sections (bfd *output_bfd, BFD_ASSERT (! info->relocatable); sxtlit = bfd_get_section_by_name (output_bfd, ".xt.lit"); sgotloc = htab->sgotloc; - BFD_ASSERT (sxtlit && sgotloc); - num_xtlit_entries = - elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc); - if (num_xtlit_entries < 0) - return FALSE; + BFD_ASSERT (sgotloc); + if (sxtlit) + { + num_xtlit_entries = + elf_xtensa_combine_prop_entries (output_bfd, sxtlit, sgotloc); + if (num_xtlit_entries < 0) + return FALSE; + } dyncon = (Elf32_External_Dyn *) sdyn->contents; dynconend = (Elf32_External_Dyn *) (sdyn->contents + sdyn->size); @@ -2844,7 +3573,6 @@ elf_xtensa_discard_info_for_section (bfd *abfd, asection *sec) { bfd_byte *contents; - bfd_vma section_size; bfd_vma offset, actual_offset; bfd_size_type removed_bytes = 0; bfd_size_type entry_size; @@ -2858,8 +3586,7 @@ elf_xtensa_discard_info_for_section (bfd *abfd, else entry_size = 8; - section_size = sec->size; - if (section_size == 0 || section_size % entry_size != 0) + if (sec->size == 0 || sec->size % entry_size != 0) return FALSE; contents = retrieve_contents (abfd, sec, info->keep_memory); @@ -2881,7 +3608,7 @@ elf_xtensa_discard_info_for_section (bfd *abfd, cookie->rel = cookie->rels; cookie->relend = cookie->rels + sec->reloc_count; - for (offset = 0; offset < section_size; offset += entry_size) + for (offset = 0; offset < sec->size; offset += entry_size) { actual_offset = offset - removed_bytes; @@ -2905,10 +3632,10 @@ 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 + entry_size < section_size) + if (offset + entry_size < sec->size) memmove (&contents[actual_offset], &contents[actual_offset + entry_size], - section_size - offset - entry_size); + sec->size - offset - entry_size); removed_bytes += entry_size; } @@ -2942,13 +3669,15 @@ elf_xtensa_discard_info_for_section (bfd *abfd, } /* Clear the removed bytes. */ - memset (&contents[section_size - removed_bytes], 0, removed_bytes); + memset (&contents[sec->size - removed_bytes], 0, removed_bytes); pin_contents (sec, contents); pin_internal_relocs (sec, cookie->rels); /* Shrink size. */ - sec->size = section_size - removed_bytes; + if (sec->rawsize == 0) + sec->rawsize = sec->size; + sec->size -= removed_bytes; if (xtensa_is_littable_section (sec)) { @@ -3129,6 +3858,29 @@ is_windowed_call_opcode (xtensa_opcode opcode) } +static bfd_boolean +get_indirect_call_dest_reg (xtensa_opcode opcode, unsigned *pdst) +{ + unsigned dst = (unsigned) -1; + + init_call_opcodes (); + if (opcode == callx0_op) + dst = 0; + else if (opcode == callx4_op) + dst = 4; + else if (opcode == callx8_op) + dst = 8; + else if (opcode == callx12_op) + dst = 12; + + if (dst == (unsigned) -1) + return FALSE; + + *pdst = dst; + return TRUE; +} + + static xtensa_opcode get_const16_opcode (void) { @@ -4722,12 +5474,20 @@ text_action_add (text_action_list *l, for (m_p = &l->head; *m_p && (*m_p)->offset <= offset; m_p = &(*m_p)->next) { text_action *t = *m_p; - /* When the action is another fill at the same address, - just increase the size. */ - if (t->offset == offset && t->action == ta_fill && action == ta_fill) + + if (action == ta_fill) { - t->removed_bytes += removed; - return; + /* When the action is another fill at the same address, + just increase the size. */ + if (t->offset == offset && t->action == ta_fill) + { + t->removed_bytes += removed; + return; + } + /* Fills need to happen before widens so that we don't + insert fill bytes into the instruction stream. */ + if (t->offset == offset && t->action == ta_widen_insn) + break; } } @@ -4778,20 +5538,45 @@ text_action_add_literal (text_action_list *l, } -static bfd_vma -offset_with_removed_text (text_action_list *action_list, bfd_vma offset) +/* Find the total offset adjustment for the relaxations specified by + text_actions, beginning from a particular starting action. This is + typically used from offset_with_removed_text to search an entire list of + actions, but it may also be called directly when adjusting adjacent offsets + so that each search may begin where the previous one left off. */ + +static int +removed_by_actions (text_action **p_start_action, + bfd_vma offset, + bfd_boolean before_fill) { text_action *r; int removed = 0; - for (r = action_list->head; r && r->offset <= offset; r = r->next) + r = *p_start_action; + while (r) { - if (r->offset < offset - || (r->action == ta_fill && r->removed_bytes < 0)) - removed += r->removed_bytes; + if (r->offset > offset) + break; + + if (r->offset == offset + && (before_fill || r->action != ta_fill || r->removed_bytes >= 0)) + break; + + removed += r->removed_bytes; + + r = r->next; } - return (offset - removed); + *p_start_action = r; + return removed; +} + + +static bfd_vma +offset_with_removed_text (text_action_list *action_list, bfd_vma offset) +{ + text_action *r = action_list->head; + return offset - removed_by_actions (&r, offset, FALSE); } @@ -4808,20 +5593,6 @@ action_list_count (text_action_list *action_list) } -static bfd_vma -offset_with_removed_text_before_fill (text_action_list *action_list, - bfd_vma offset) -{ - text_action *r; - int removed = 0; - - for (r = action_list->head; r && r->offset < offset; r = r->next) - removed += r->removed_bytes; - - return (offset - removed); -} - - /* The find_insn_action routine will only find non-fill actions. */ static text_action * @@ -4872,7 +5643,7 @@ print_action_list (FILE *fp, text_action_list *action_list) case ta_remove_longcall: t = "remove_longcall"; break; case ta_convert_longcall: - t = "remove_longcall"; break; + t = "convert_longcall"; break; case ta_narrow_insn: t = "narrow_insn"; break; case ta_widen_insn: @@ -5119,7 +5890,6 @@ struct reloc_bfd_fix_struct bfd_vma src_offset; unsigned src_type; /* Relocation type. */ - bfd *target_abfd; asection *target_sec; bfd_vma target_offset; bfd_boolean translated; @@ -5132,7 +5902,6 @@ static reloc_bfd_fix * reloc_bfd_fix_init (asection *src_sec, bfd_vma src_offset, unsigned src_type, - bfd *target_abfd, asection *target_sec, bfd_vma target_offset, bfd_boolean translated) @@ -5143,7 +5912,6 @@ reloc_bfd_fix_init (asection *src_sec, fix->src_sec = src_sec; fix->src_offset = src_offset; fix->src_type = src_type; - fix->target_abfd = target_abfd; fix->target_sec = target_sec; fix->target_offset = target_offset; fix->translated = translated; @@ -5843,7 +6611,7 @@ static bfd_boolean move_shared_literal static bfd_boolean relax_section (bfd *, asection *, struct bfd_link_info *); static bfd_boolean translate_section_fixes (asection *); static bfd_boolean translate_reloc_bfd_fix (reloc_bfd_fix *); -static void translate_reloc (const r_reloc *, r_reloc *); +static asection *translate_reloc (const r_reloc *, r_reloc *, asection *); static void shrink_dynamic_reloc_sections (struct bfd_link_info *, bfd *, asection *, Elf_Internal_Rela *); static bfd_boolean move_literal @@ -7170,7 +7938,8 @@ check_section_ebb_pcrels_fit (bfd *abfd, that fit before linking must fit after linking. Thus we only need to deal with relocations to the same section that are PC-relative. */ - if (ELF32_R_TYPE (irel->r_info) == R_XTENSA_ASM_SIMPLIFY + if (r_type == R_XTENSA_ASM_SIMPLIFY + || r_type == R_XTENSA_32_PCREL || !howto->pc_relative) continue; @@ -8089,6 +8858,8 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) if (relax_info->is_relaxable_literal_section || relax_info->is_relaxable_asm_section) { + pin_internal_relocs (sec, internal_relocs); + if (r_type != R_XTENSA_NONE && find_removed_literal (&relax_info->removed_list, irel->r_offset)) @@ -8099,7 +8870,6 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) irel->r_info = ELF32_R_INFO (0, R_XTENSA_NONE); irel->r_offset = offset_with_removed_text (&relax_info->action_list, irel->r_offset); - pin_internal_relocs (sec, internal_relocs); continue; } @@ -8144,17 +8914,62 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) we may need to change the relocation's target offset. */ target_sec = r_reloc_get_section (&r_rel); - target_relax_info = get_xtensa_relax_info (target_sec); + /* For a reference to a discarded section from a DWARF section, + i.e., where action_discarded is PRETEND, the symbol will + eventually be modified to refer to the kept section (at least if + the kept and discarded sections are the same size). Anticipate + that here and adjust things accordingly. */ + if (! elf_xtensa_ignore_discarded_relocs (sec) + && elf_xtensa_action_discarded (sec) == PRETEND + && sec->sec_info_type != ELF_INFO_TYPE_STABS + && target_sec != NULL + && elf_discarded_section (target_sec)) + { + /* It would be natural to call _bfd_elf_check_kept_section + here, but it's not exported from elflink.c. It's also a + fairly expensive check. Adjusting the relocations to the + discarded section is fairly harmless; it will only adjust + some addends and difference values. If it turns out that + _bfd_elf_check_kept_section fails later, it won't matter, + so just compare the section names to find the right group + member. */ + asection *kept = target_sec->kept_section; + if (kept != NULL) + { + if ((kept->flags & SEC_GROUP) != 0) + { + asection *first = elf_next_in_group (kept); + asection *s = first; + + kept = NULL; + while (s != NULL) + { + if (strcmp (s->name, target_sec->name) == 0) + { + kept = s; + break; + } + s = elf_next_in_group (s); + if (s == first) + break; + } + } + } + if (kept != NULL + && ((target_sec->rawsize != 0 + ? target_sec->rawsize : target_sec->size) + == (kept->rawsize != 0 ? kept->rawsize : kept->size))) + target_sec = kept; + } + + target_relax_info = get_xtensa_relax_info (target_sec); if (target_relax_info && (target_relax_info->is_relaxable_literal_section || target_relax_info->is_relaxable_asm_section)) { r_reloc new_reloc; - reloc_bfd_fix *fix; - bfd_vma addend_displacement; - - translate_reloc (&r_rel, &new_reloc); + target_sec = translate_reloc (&r_rel, &new_reloc, target_sec); if (r_type == R_XTENSA_DIFF8 || r_type == R_XTENSA_DIFF16 @@ -8222,20 +9037,29 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) pin_contents (sec, contents); } - /* FIXME: If the relocation still references a section in - the same input file, the relocation should be modified - directly instead of adding a "fix" record. */ - - addend_displacement = - new_reloc.target_offset + new_reloc.virtual_offset; - - fix = reloc_bfd_fix_init (sec, source_offset, r_type, 0, - r_reloc_get_section (&new_reloc), - addend_displacement, TRUE); - add_fix (sec, fix); + /* If the relocation still references a section in the same + input file, modify the relocation directly instead of + adding a "fix" record. */ + if (target_sec->owner == abfd) + { + unsigned r_symndx = ELF32_R_SYM (new_reloc.rela.r_info); + irel->r_info = ELF32_R_INFO (r_symndx, r_type); + irel->r_addend = new_reloc.rela.r_addend; + pin_internal_relocs (sec, internal_relocs); + } + else + { + bfd_vma addend_displacement; + reloc_bfd_fix *fix; + + addend_displacement = + new_reloc.target_offset + new_reloc.virtual_offset; + fix = reloc_bfd_fix_init (sec, source_offset, r_type, + target_sec, + addend_displacement, TRUE); + add_fix (sec, fix); + } } - - pin_internal_relocs (sec, internal_relocs); } } @@ -8247,12 +9071,11 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) of move, copy and fill records. Use the move, copy and fill records to perform the actions once. */ - bfd_size_type size = sec->size; int removed = 0; bfd_size_type final_size, copy_size, orig_insn_size; bfd_byte *scratch = NULL; bfd_byte *dup_contents = NULL; - bfd_size_type orig_size = size; + bfd_size_type orig_size = sec->size; bfd_vma orig_dot = 0; bfd_vma orig_dot_copied = 0; /* Byte copied already from orig dot in physical memory. */ @@ -8406,7 +9229,6 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) break; } - size -= action->removed_bytes; removed += action->removed_bytes; BFD_ASSERT (dup_dot <= final_size); BFD_ASSERT (orig_dot <= orig_size); @@ -8447,6 +9269,8 @@ relax_section (bfd *abfd, asection *sec, struct bfd_link_info *link_info) free (scratch); pin_contents (sec, contents); + if (sec->rawsize == 0) + sec->rawsize = sec->size; sec->size = final_size; } @@ -8568,26 +9392,22 @@ translate_reloc_bfd_fix (reloc_bfd_fix *fix) /* Fix up a relocation to take account of removed literals. */ -static void -translate_reloc (const r_reloc *orig_rel, r_reloc *new_rel) +static asection * +translate_reloc (const r_reloc *orig_rel, r_reloc *new_rel, asection *sec) { - asection *sec; xtensa_relax_info *relax_info; removed_literal *removed; - bfd_vma new_offset, target_offset, removed_bytes; + bfd_vma target_offset, base_offset; + text_action *act; *new_rel = *orig_rel; if (!r_reloc_is_defined (orig_rel)) - return; - sec = r_reloc_get_section (orig_rel); + return sec ; relax_info = get_xtensa_relax_info (sec); - BFD_ASSERT (relax_info); - - if (!relax_info->is_relaxable_literal_section - && !relax_info->is_relaxable_asm_section) - return; + BFD_ASSERT (relax_info && (relax_info->is_relaxable_literal_section + || relax_info->is_relaxable_asm_section)); target_offset = orig_rel->target_offset; @@ -8618,19 +9438,37 @@ translate_reloc (const r_reloc *orig_rel, r_reloc *new_rel) if (!relax_info || (!relax_info->is_relaxable_literal_section && !relax_info->is_relaxable_asm_section)) - return; + return sec; } target_offset = new_rel->target_offset; } - /* ...and the target address may have been moved within its section. */ - new_offset = offset_with_removed_text (&relax_info->action_list, - target_offset); + /* Find the base offset of the reloc symbol, excluding any addend from the + reloc or from the section contents (for a partial_inplace reloc). Then + find the adjusted values of the offsets due to relaxation. The base + offset is needed to determine the change to the reloc's addend; the reloc + addend should not be adjusted due to relaxations located before the base + offset. */ + + base_offset = r_reloc_get_target_offset (new_rel) - new_rel->rela.r_addend; + act = relax_info->action_list.head; + if (base_offset <= target_offset) + { + int base_removed = removed_by_actions (&act, base_offset, FALSE); + int addend_removed = removed_by_actions (&act, target_offset, FALSE); + new_rel->target_offset = target_offset - base_removed - addend_removed; + new_rel->rela.r_addend -= addend_removed; + } + else + { + /* Handle a negative addend. The base offset comes first. */ + int tgt_removed = removed_by_actions (&act, target_offset, FALSE); + int addend_removed = removed_by_actions (&act, base_offset, FALSE); + new_rel->target_offset = target_offset - tgt_removed; + new_rel->rela.r_addend += addend_removed; + } - /* Modify the offset and addend. */ - removed_bytes = target_offset - new_offset; - new_rel->target_offset = new_offset; - new_rel->rela.r_addend -= removed_bytes; + return sec; } @@ -8782,7 +9620,7 @@ move_literal (bfd *abfd, /* Currently, we cannot move relocations during a relocatable link. */ BFD_ASSERT (!link_info->relocatable); - fix = reloc_bfd_fix_init (sec, offset, r_type, r_rel->abfd, + fix = reloc_bfd_fix_init (sec, offset, r_type, r_reloc_get_section (r_rel), r_rel->target_offset + r_rel->virtual_offset, FALSE); @@ -8944,14 +9782,16 @@ relax_property_section (bfd *abfd, || target_relax_info->is_relaxable_asm_section )) { /* Translate the relocation's destination. */ - bfd_vma new_offset, new_end_offset; + bfd_vma old_offset = val.r_rel.target_offset; + bfd_vma new_offset; long old_size, new_size; - - new_offset = offset_with_removed_text - (&target_relax_info->action_list, val.r_rel.target_offset); + text_action *act = target_relax_info->action_list.head; + new_offset = old_offset - + removed_by_actions (&act, old_offset, FALSE); /* Assert that we are not out of bounds. */ old_size = bfd_get_32 (abfd, size_p); + new_size = old_size; if (old_size == 0) { @@ -8963,39 +9803,34 @@ relax_property_section (bfd *abfd, offset before or after the fill address depending on whether the expanding unreachable entry preceeds it. */ - if (last_zfill_target_sec - && last_zfill_target_sec == target_sec - && last_zfill_target_offset == val.r_rel.target_offset) - new_end_offset = new_offset; - else + if (last_zfill_target_sec == 0 + || last_zfill_target_sec != target_sec + || last_zfill_target_offset != old_offset) { - new_end_offset = new_offset; - new_offset = offset_with_removed_text_before_fill - (&target_relax_info->action_list, - val.r_rel.target_offset); + bfd_vma new_end_offset = new_offset; + + /* Recompute the new_offset, but this time don't + include any fill inserted by relaxation. */ + act = target_relax_info->action_list.head; + new_offset = old_offset - + removed_by_actions (&act, old_offset, TRUE); /* If it is not unreachable and we have not yet seen an unreachable at this address, place it before the fill address. */ - if (!flags_p - || (bfd_get_32 (abfd, flags_p) - & XTENSA_PROP_UNREACHABLE) == 0) - new_end_offset = new_offset; - else + if (flags_p && (bfd_get_32 (abfd, flags_p) + & XTENSA_PROP_UNREACHABLE) != 0) { + new_size = new_end_offset - new_offset; + last_zfill_target_sec = target_sec; - last_zfill_target_offset = val.r_rel.target_offset; + last_zfill_target_offset = old_offset; } } } else - { - new_end_offset = offset_with_removed_text_before_fill - (&target_relax_info->action_list, - val.r_rel.target_offset + old_size); - } - - new_size = new_end_offset - new_offset; + new_size -= + removed_by_actions (&act, old_offset + old_size, TRUE); if (new_size != old_size) { @@ -9003,9 +9838,9 @@ relax_property_section (bfd *abfd, pin_contents (sec, contents); } - if (new_offset != val.r_rel.target_offset) + if (new_offset != old_offset) { - bfd_vma diff = new_offset - val.r_rel.target_offset; + bfd_vma diff = new_offset - old_offset; irel->r_addend += diff; pin_internal_relocs (sec, internal_relocs); } @@ -9024,7 +9859,6 @@ relax_property_section (bfd *abfd, Elf_Internal_Rela *irel, *next_rel, *rel_end; int removed_bytes = 0; bfd_vma offset; - bfd_vma section_size; flagword predef_flags; predef_flags = xtensa_get_property_predef_flags (sec); @@ -9040,10 +9874,9 @@ relax_property_section (bfd *abfd, next_rel = internal_relocs; rel_end = internal_relocs + sec->reloc_count; - section_size = sec->size; - BFD_ASSERT (section_size % entry_size == 0); + BFD_ASSERT (sec->size % entry_size == 0); - for (offset = 0; offset < section_size; offset += entry_size) + for (offset = 0; offset < sec->size; offset += entry_size) { Elf_Internal_Rela *offset_rel, *extra_rel; bfd_vma bytes_to_remove, size, actual_offset; @@ -9178,21 +10011,16 @@ relax_property_section (bfd *abfd, if (remove_this_rel) { 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; + offset_rel->r_offset = 0; } if (bytes_to_remove != 0) { removed_bytes += bytes_to_remove; - if (offset + bytes_to_remove < section_size) + if (offset + bytes_to_remove < sec->size) memmove (&contents[actual_offset], &contents[actual_offset + bytes_to_remove], - section_size - offset - bytes_to_remove); + sec->size - offset - bytes_to_remove); } } @@ -9203,9 +10031,11 @@ relax_property_section (bfd *abfd, irel->r_offset -= removed_bytes; /* Clear the removed bytes. */ - memset (&contents[section_size - removed_bytes], 0, removed_bytes); + memset (&contents[sec->size - removed_bytes], 0, removed_bytes); - sec->size = section_size - removed_bytes; + if (sec->rawsize == 0) + sec->rawsize = sec->size; + sec->size -= removed_bytes; if (xtensa_is_littable_section (sec)) { @@ -9258,19 +10088,14 @@ relax_section_symbols (bfd *abfd, asection *sec) if (isym->st_shndx == sec_shndx) { - bfd_vma new_address = offset_with_removed_text - (&relax_info->action_list, isym->st_value); - bfd_vma new_size = isym->st_size; + text_action *act = relax_info->action_list.head; + bfd_vma orig_addr = isym->st_value; - if (ELF32_ST_TYPE (isym->st_info) == STT_FUNC) - { - bfd_vma new_end = offset_with_removed_text - (&relax_info->action_list, isym->st_value + isym->st_size); - new_size = new_end - new_address; - } + isym->st_value -= removed_by_actions (&act, orig_addr, FALSE); - isym->st_value = new_address; - isym->st_size = new_size; + if (ELF32_ST_TYPE (isym->st_info) == STT_FUNC) + isym->st_size -= + removed_by_actions (&act, orig_addr + isym->st_size, FALSE); } } @@ -9288,20 +10113,15 @@ relax_section_symbols (bfd *abfd, asection *sec) || sym_hash->root.type == bfd_link_hash_defweak) && sym_hash->root.u.def.section == sec) { - bfd_vma new_address = offset_with_removed_text - (&relax_info->action_list, sym_hash->root.u.def.value); - bfd_vma new_size = sym_hash->size; + text_action *act = relax_info->action_list.head; + bfd_vma orig_addr = sym_hash->root.u.def.value; - if (sym_hash->type == STT_FUNC) - { - bfd_vma new_end = offset_with_removed_text - (&relax_info->action_list, - sym_hash->root.u.def.value + sym_hash->size); - new_size = new_end - new_address; - } + sym_hash->root.u.def.value -= + removed_by_actions (&act, orig_addr, FALSE); - sym_hash->root.u.def.value = new_address; - sym_hash->size = new_size; + if (sym_hash->type == STT_FUNC) + sym_hash->size -= + removed_by_actions (&act, orig_addr + sym_hash->size, FALSE); } } @@ -9457,15 +10277,12 @@ get_elf_r_symndx_section (bfd *abfd, unsigned long r_symndx) if (section_index == SHN_UNDEF) target_sec = bfd_und_section_ptr; - else if (section_index > 0 && section_index < SHN_LORESERVE) - target_sec = bfd_section_from_elf_index (abfd, section_index); else if (section_index == SHN_ABS) target_sec = bfd_abs_section_ptr; else if (section_index == SHN_COMMON) target_sec = bfd_com_section_ptr; else - /* Who knows? */ - target_sec = NULL; + target_sec = bfd_section_from_elf_index (abfd, section_index); } else { @@ -9673,12 +10490,11 @@ match_section_group (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf) static int linkonce_len = sizeof (".gnu.linkonce.") - 1; -asection * -xtensa_get_property_section (asection *sec, const char *base_name) +static char * +xtensa_property_section_name (asection *sec, const char *base_name) { const char *suffix, *group_name; char *prop_sec_name; - asection *prop_sec; group_name = elf_group_name (sec); if (group_name) @@ -9720,10 +10536,36 @@ xtensa_get_property_section (asection *sec, const char *base_name) else prop_sec_name = strdup (base_name); + return prop_sec_name; +} + + +static asection * +xtensa_get_property_section (asection *sec, const char *base_name) +{ + char *prop_sec_name; + asection *prop_sec; + + prop_sec_name = xtensa_property_section_name (sec, base_name); + prop_sec = bfd_get_section_by_name_if (sec->owner, prop_sec_name, + match_section_group, + (void *) elf_group_name (sec)); + free (prop_sec_name); + return prop_sec; +} + + +asection * +xtensa_make_property_section (asection *sec, const char *base_name) +{ + char *prop_sec_name; + asection *prop_sec; + /* Check if the section already exists. */ + prop_sec_name = xtensa_property_section_name (sec, base_name); prop_sec = bfd_get_section_by_name_if (sec->owner, prop_sec_name, match_section_group, - (void *) group_name); + (void *) elf_group_name (sec)); /* If not, create it. */ if (! prop_sec) { @@ -9736,7 +10578,7 @@ xtensa_get_property_section (asection *sec, const char *base_name) if (! prop_sec) return 0; - elf_group_name (prop_sec) = group_name; + elf_group_name (prop_sec) = elf_group_name (sec); } free (prop_sec_name); @@ -9896,6 +10738,8 @@ static const struct bfd_elf_special_section elf_xtensa_special_sections[] = #define elf_info_to_howto elf_xtensa_info_to_howto_rela +#define bfd_elf32_mkobject elf_xtensa_mkobject + #define bfd_elf32_bfd_merge_private_bfd_data elf_xtensa_merge_private_bfd_data #define bfd_elf32_new_section_hook elf_xtensa_new_section_hook #define bfd_elf32_bfd_print_private_bfd_data elf_xtensa_print_private_bfd_data @@ -9923,9 +10767,11 @@ static const struct bfd_elf_special_section elf_xtensa_special_sections[] = #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_always_size_sections elf_xtensa_always_size_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 +#define elf_backend_copy_indirect_symbol elf_xtensa_copy_indirect_symbol #include "elf32-target.h" diff --git a/bfd/elf32.c b/bfd/elf32.c index 09ba93c..98dacc1 100644 --- a/bfd/elf32.c +++ b/bfd/elf32.c @@ -1,5 +1,6 @@ /* ELF 32-bit executable support for BFD. - Copyright 1993, 2001, 2007 Free Software Foundation, Inc. + Copyright 1993, 2001, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index c0702bb..c22b4fd 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, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008 Free Software Foundation, Inc. Contributed by Richard Henderson . This file is part of BFD, the Binary File Descriptor library. @@ -324,17 +324,16 @@ struct alpha_elf_obj_tdata #define alpha_elf_tdata(abfd) \ ((struct alpha_elf_obj_tdata *) (abfd)->tdata.any) +#define is_alpha_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == ALPHA_ELF_TDATA) + static bfd_boolean elf64_alpha_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct alpha_elf_obj_tdata), + ALPHA_ELF_TDATA); } static bfd_boolean @@ -1234,6 +1233,9 @@ elf64_alpha_create_got_section (bfd *abfd, flagword flags; asection *s; + if (! is_alpha_elf (abfd)) + return FALSE; + flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED); s = bfd_make_section_anyway_with_flags (abfd, ".got", flags); @@ -1260,6 +1262,9 @@ elf64_alpha_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) flagword flags; struct elf_link_hash_entry *h; + if (! is_alpha_elf (abfd)) + return FALSE; + /* We need to create .plt, .rela.plt, .got, and .rela.got sections. */ flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_IN_MEMORY @@ -1743,7 +1748,6 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, { bfd *dynobj; asection *sreloc; - const char *rel_sec_name; Elf_Internal_Shdr *symtab_hdr; struct alpha_elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel, *relend; @@ -1761,14 +1765,15 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, if ((sec->flags & SEC_ALLOC) == 0) return TRUE; - dynobj = elf_hash_table(info)->dynobj; + BFD_ASSERT (is_alpha_elf (abfd)); + + dynobj = elf_hash_table (info)->dynobj; if (dynobj == NULL) - elf_hash_table(info)->dynobj = dynobj = abfd; + elf_hash_table (info)->dynobj = dynobj = abfd; sreloc = NULL; - rel_sec_name = NULL; - symtab_hdr = &elf_tdata(abfd)->symtab_hdr; - sym_hashes = alpha_elf_sym_hashes(abfd); + symtab_hdr = &elf_symtab_hdr (abfd); + sym_hashes = alpha_elf_sym_hashes (abfd); relend = relocs + sec->reloc_count; for (rel = relocs; rel < relend; ++rel) @@ -1916,41 +1921,16 @@ elf64_alpha_check_relocs (bfd *abfd, struct bfd_link_info *info, if (need & NEED_DYNREL) { - if (rel_sec_name == NULL) - { - rel_sec_name = (bfd_elf_string_from_elf_section - (abfd, elf_elfheader(abfd)->e_shstrndx, - elf_section_data(sec)->rel_hdr.sh_name)); - if (rel_sec_name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (rel_sec_name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - rel_sec_name+5) == 0); - } - /* We need to create the section here now whether we eventually use it or not so that it gets mapped to an output section by - the linker. If not used, we'll kill it in - size_dynamic_sections. */ + the linker. If not used, we'll kill it in size_dynamic_sections. */ if (sreloc == NULL) { - sreloc = bfd_get_section_by_name (dynobj, rel_sec_name); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 3, abfd, /*rela?*/ TRUE); + if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY - | SEC_LINKER_CREATED | SEC_READONLY); - if (sec->flags & SEC_ALLOC) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - rel_sec_name, - flags); - if (sreloc == NULL - || !bfd_set_section_alignment (dynobj, sreloc, 3)) - return FALSE; - } + return FALSE; } if (h) @@ -2390,7 +2370,12 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info) { for (i = info->input_bfds; i ; i = i->link_next) { - bfd *this_got = alpha_elf_tdata (i)->gotobj; + bfd *this_got; + + if (! is_alpha_elf (i)) + continue; + + this_got = alpha_elf_tdata (i)->gotobj; if (this_got == NULL) continue; @@ -2421,6 +2406,9 @@ elf64_alpha_size_got_sections (struct bfd_link_info *info) } cur_got_obj = got_list; + if (cur_got_obj == NULL) + return FALSE; + i = alpha_elf_tdata(cur_got_obj)->got_link_next; while (i != NULL) { @@ -3089,7 +3077,7 @@ elf64_alpha_relax_opt_call (struct alpha_relax_info *info, bfd_vma symval) /* We've now determined that we can skip an initial gp load. Verify that the call and the target use the same gp. */ - if (info->link_info->hash->creator != info->tsec->owner->xvec + if (info->link_info->output_bfd->xvec != info->tsec->owner->xvec || info->gotobj != alpha_elf_tdata (info->tsec->owner)->gotobj) return 0; @@ -3612,6 +3600,8 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec, || sec->reloc_count == 0) return TRUE; + BFD_ASSERT (is_alpha_elf (abfd)); + /* Make sure our GOT and PLT tables are up-to-date. */ if (alpha_elf_hash_table(link_info)->relax_trip != link_info->relax_trip) { @@ -3628,7 +3618,7 @@ elf64_alpha_relax_section (bfd *abfd, asection *sec, } } - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); local_got_entries = alpha_elf_tdata(abfd)->local_got_entries; /* Load the relocations for this section. */ @@ -3935,7 +3925,7 @@ elf64_alpha_relocate_section_r (bfd *output_bfd ATTRIBUTE_UNUSED, struct elf_link_hash_entry **sym_hashes; bfd_boolean ret_val = TRUE; - symtab_hdr_sh_info = elf_tdata (input_bfd)->symtab_hdr.sh_info; + symtab_hdr_sh_info = elf_symtab_hdr (input_bfd).sh_info; sym_hashes = elf_sym_hashes (input_bfd); relend = relocs + input_section->reloc_count; @@ -4023,6 +4013,8 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, struct alpha_elf_got_entry **local_got_entries; bfd_boolean ret_val; + BFD_ASSERT (is_alpha_elf (input_bfd)); + /* Handle relocatable links with a smaller loop. */ if (info->relocatable) return elf64_alpha_relocate_section_r (output_bfd, info, input_bfd, @@ -4033,7 +4025,7 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, ret_val = TRUE; - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); dynobj = elf_hash_table (info)->dynobj; if (dynobj) @@ -5043,15 +5035,11 @@ elf64_alpha_final_link (bfd *abfd, struct bfd_link_info *info) input_section = p->u.indirect.section; input_bfd = input_section->owner; - if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour - || (get_elf_backend_data (input_bfd) - ->elf_backend_ecoff_debug_swap) == NULL) - { - /* I don't know what a non ALPHA ELF bfd would be - doing with a .mdebug section, but I don't really - want to deal with it. */ - continue; - } + if (! is_alpha_elf (input_bfd)) + /* I don't know what a non ALPHA ELF bfd would be + doing with a .mdebug section, but I don't really + want to deal with it. */ + continue; input_swap = (get_elf_backend_data (input_bfd) ->elf_backend_ecoff_debug_swap); @@ -5329,6 +5317,8 @@ static const struct elf_size_info alpha_elf_size_info = #define elf_backend_add_symbol_hook \ elf64_alpha_add_symbol_hook +#define elf_backend_relocs_compatible \ + _bfd_elf_relocs_compatible #define elf_backend_check_relocs \ elf64_alpha_check_relocs #define elf_backend_create_dynamic_sections \ diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 9a4eae2..0b762e4 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, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -27,6 +27,8 @@ #include "elf/hppa.h" #include "libhppa.h" #include "elf64-hppa.h" + + #define ARCH_SIZE 64 #define PLT_ENTRY_SIZE 0x10 @@ -48,9 +50,9 @@ static char plt_stub[] = {0x53, 0x61, 0x00, 0x00, 0xe8, 0x20, 0xd0, 0x00, 0x53, 0x7b, 0x00, 0x00 }; -struct elf64_hppa_dyn_hash_entry +struct elf64_hppa_link_hash_entry { - struct bfd_hash_entry root; + struct elf_link_hash_entry eh; /* Offsets for this symbol in various linker sections. */ bfd_vma dlt_offset; @@ -58,9 +60,6 @@ struct elf64_hppa_dyn_hash_entry bfd_vma opd_offset; bfd_vma stub_offset; - /* The symbol table entry, if any, that this was derived from. */ - struct elf_link_hash_entry *h; - /* The index of the (possibly local) symbol in the input bfd and its associated BFD. Needed so that we can have relocs against local symbols in shared libraries. */ @@ -89,6 +88,9 @@ struct elf64_hppa_dyn_hash_entry /* The input section of the relocation. */ asection *sec; + /* Number of relocs copied in this section. */ + bfd_size_type count; + /* The index of the section symbol for the input section of the relocation. Only needed when building shared libraries. */ int sec_symndx; @@ -109,11 +111,6 @@ struct elf64_hppa_dyn_hash_entry unsigned want_stub; }; -struct elf64_hppa_dyn_hash_table -{ - struct bfd_hash_table root; -}; - struct elf64_hppa_link_hash_table { struct elf_link_hash_table root; @@ -140,8 +137,6 @@ struct elf64_hppa_link_hash_table bfd_vma text_segment_base; bfd_vma data_segment_base; - struct elf64_hppa_dyn_hash_table dyn_hash_table; - /* We build tables to map from an input section back to its symbol index. This is the BFD for which we currently have a map. */ @@ -152,158 +147,144 @@ struct elf64_hppa_link_hash_table int *section_syms; }; -#define elf64_hppa_hash_table(p) \ +#define hppa_link_hash_table(p) \ ((struct elf64_hppa_link_hash_table *) ((p)->hash)) +#define hppa_elf_hash_entry(ent) \ + ((struct elf64_hppa_link_hash_entry *)(ent)) + +#define eh_name(eh) \ + (eh ? eh->root.root.string : "") + typedef struct bfd_hash_entry *(*new_hash_entry_func) - PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *)); + (struct bfd_hash_entry *, struct bfd_hash_table *, const char *); -static struct bfd_hash_entry *elf64_hppa_new_dyn_hash_entry - PARAMS ((struct bfd_hash_entry *entry, struct bfd_hash_table *table, - const char *string)); static struct bfd_link_hash_table *elf64_hppa_hash_table_create - PARAMS ((bfd *abfd)); -static struct elf64_hppa_dyn_hash_entry *elf64_hppa_dyn_hash_lookup - PARAMS ((struct elf64_hppa_dyn_hash_table *table, const char *string, - bfd_boolean create, bfd_boolean copy)); -static void elf64_hppa_dyn_hash_traverse - PARAMS ((struct elf64_hppa_dyn_hash_table *table, - bfd_boolean (*func) (struct elf64_hppa_dyn_hash_entry *, PTR), - PTR info)); - -static const char *get_dyn_name - PARAMS ((bfd *, struct elf_link_hash_entry *, - const Elf_Internal_Rela *, char **, size_t *)); + (bfd *abfd); /* This must follow the definitions of the various derived linker hash tables and shared functions. */ #include "elf-hppa.h" static bfd_boolean elf64_hppa_object_p - PARAMS ((bfd *)); + (bfd *); static void elf64_hppa_post_process_headers - PARAMS ((bfd *, struct bfd_link_info *)); + (bfd *, struct bfd_link_info *); static bfd_boolean elf64_hppa_create_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *)); + (bfd *, struct bfd_link_info *); static bfd_boolean elf64_hppa_adjust_dynamic_symbol - PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *)); + (struct bfd_link_info *, struct elf_link_hash_entry *); static bfd_boolean elf64_hppa_mark_milli_and_exported_functions - PARAMS ((struct elf_link_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean elf64_hppa_size_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *)); + (bfd *, struct bfd_link_info *); -static bfd_boolean elf64_hppa_link_output_symbol_hook - PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *, - asection *, struct elf_link_hash_entry *)); +static int elf64_hppa_link_output_symbol_hook + (struct bfd_link_info *, const char *, Elf_Internal_Sym *, + asection *, struct elf_link_hash_entry *); static bfd_boolean elf64_hppa_finish_dynamic_symbol - PARAMS ((bfd *, struct bfd_link_info *, - struct elf_link_hash_entry *, Elf_Internal_Sym *)); + (bfd *, struct bfd_link_info *, + struct elf_link_hash_entry *, Elf_Internal_Sym *); static enum elf_reloc_type_class elf64_hppa_reloc_type_class - PARAMS ((const Elf_Internal_Rela *)); + (const Elf_Internal_Rela *); static bfd_boolean elf64_hppa_finish_dynamic_sections - PARAMS ((bfd *, struct bfd_link_info *)); + (bfd *, struct bfd_link_info *); static bfd_boolean elf64_hppa_check_relocs - PARAMS ((bfd *, struct bfd_link_info *, - asection *, const Elf_Internal_Rela *)); + (bfd *, struct bfd_link_info *, + asection *, const Elf_Internal_Rela *); static bfd_boolean elf64_hppa_dynamic_symbol_p - PARAMS ((struct elf_link_hash_entry *, struct bfd_link_info *)); + (struct elf_link_hash_entry *, struct bfd_link_info *); static bfd_boolean elf64_hppa_mark_exported_functions - PARAMS ((struct elf_link_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean elf64_hppa_finalize_opd - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean elf64_hppa_finalize_dlt - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean allocate_global_data_dlt - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean allocate_global_data_plt - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean allocate_global_data_stub - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean allocate_global_data_opd - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean get_reloc_section - PARAMS ((bfd *, struct elf64_hppa_link_hash_table *, asection *)); + (bfd *, struct elf64_hppa_link_hash_table *, asection *); static bfd_boolean count_dyn_reloc - PARAMS ((bfd *, struct elf64_hppa_dyn_hash_entry *, - int, asection *, int, bfd_vma, bfd_vma)); + (bfd *, struct elf64_hppa_link_hash_entry *, + int, asection *, int, bfd_vma, bfd_vma); static bfd_boolean allocate_dynrel_entries - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean elf64_hppa_finalize_dynreloc - PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); + (struct elf_link_hash_entry *, void *); static bfd_boolean get_opd - PARAMS ((bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *)); + (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *); static bfd_boolean get_plt - PARAMS ((bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *)); + (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *); static bfd_boolean get_dlt - PARAMS ((bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *)); + (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *); static bfd_boolean get_stub - PARAMS ((bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *)); + (bfd *, struct bfd_link_info *, struct elf64_hppa_link_hash_table *); static int elf64_hppa_elf_get_symbol_type - PARAMS ((Elf_Internal_Sym *, int)); + (Elf_Internal_Sym *, int); -static bfd_boolean -elf64_hppa_dyn_hash_table_init (struct elf64_hppa_dyn_hash_table *ht, - bfd *abfd ATTRIBUTE_UNUSED, - new_hash_entry_func new, - unsigned int entsize) -{ - memset (ht, 0, sizeof (*ht)); - return bfd_hash_table_init (&ht->root, new, entsize); -} +/* Initialize an entry in the link hash table. */ -static struct bfd_hash_entry* -elf64_hppa_new_dyn_hash_entry (entry, table, string) - struct bfd_hash_entry *entry; - struct bfd_hash_table *table; - const char *string; +static struct bfd_hash_entry * +hppa64_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { - struct elf64_hppa_dyn_hash_entry *ret; - ret = (struct elf64_hppa_dyn_hash_entry *) entry; - /* Allocate the structure if it has not already been allocated by a subclass. */ - if (!ret) - ret = bfd_hash_allocate (table, sizeof (*ret)); - - if (!ret) - return 0; + if (entry == NULL) + { + entry = bfd_hash_allocate (table, + sizeof (struct elf64_hppa_link_hash_entry)); + if (entry == NULL) + return entry; + } /* Call the allocation method of the superclass. */ - ret = ((struct elf64_hppa_dyn_hash_entry *) - bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string)); + entry = _bfd_elf_link_hash_newfunc (entry, table, string); + if (entry != NULL) + { + struct elf64_hppa_link_hash_entry *hh; - /* Initialize our local data. All zeros. */ - memset (&ret->dlt_offset, 0, - (sizeof (struct elf64_hppa_dyn_hash_entry) - - offsetof (struct elf64_hppa_dyn_hash_entry, dlt_offset))); + /* Initialize our local data. All zeros. */ + hh = hppa_elf_hash_entry (entry); + memset (&hh->dlt_offset, 0, + (sizeof (struct elf64_hppa_link_hash_entry) + - offsetof (struct elf64_hppa_link_hash_entry, dlt_offset))); + } - return &ret->root; + return entry; } /* Create the derived linker hash table. The PA64 ELF port uses this @@ -311,61 +292,34 @@ elf64_hppa_new_dyn_hash_entry (entry, table, string) linker (without using static variables). */ static struct bfd_link_hash_table* -elf64_hppa_hash_table_create (abfd) - bfd *abfd; +elf64_hppa_hash_table_create (bfd *abfd) { - struct elf64_hppa_link_hash_table *ret; - - ret = bfd_zalloc (abfd, (bfd_size_type) sizeof (*ret)); - if (!ret) - return 0; - if (!_bfd_elf_link_hash_table_init (&ret->root, abfd, - _bfd_elf_link_hash_newfunc, - sizeof (struct elf_link_hash_entry))) - { - bfd_release (abfd, ret); - return 0; - } - - if (!elf64_hppa_dyn_hash_table_init (&ret->dyn_hash_table, abfd, - elf64_hppa_new_dyn_hash_entry, - sizeof (struct elf64_hppa_dyn_hash_entry))) - return 0; - return &ret->root.root; -} + struct elf64_hppa_link_hash_table *htab; + bfd_size_type amt = sizeof (*htab); -/* Look up an entry in a PA64 ELF linker hash table. */ + htab = bfd_zalloc (abfd, amt); + if (htab == NULL) + return NULL; -static struct elf64_hppa_dyn_hash_entry * -elf64_hppa_dyn_hash_lookup(table, string, create, copy) - struct elf64_hppa_dyn_hash_table *table; - const char *string; - bfd_boolean create, copy; -{ - return ((struct elf64_hppa_dyn_hash_entry *) - bfd_hash_lookup (&table->root, string, create, copy)); -} + if (!_bfd_elf_link_hash_table_init (&htab->root, abfd, + hppa64_link_hash_newfunc, + sizeof (struct elf64_hppa_link_hash_entry))) + { + bfd_release (abfd, htab); + return NULL; + } -/* Traverse a PA64 ELF linker hash table. */ + htab->text_segment_base = (bfd_vma) -1; + htab->data_segment_base = (bfd_vma) -1; -static void -elf64_hppa_dyn_hash_traverse (table, func, info) - struct elf64_hppa_dyn_hash_table *table; - bfd_boolean (*func) PARAMS ((struct elf64_hppa_dyn_hash_entry *, PTR)); - PTR info; -{ - (bfd_hash_traverse - (&table->root, - (bfd_boolean (*) PARAMS ((struct bfd_hash_entry *, PTR))) func, - info)); + return &htab->root.root; } /* Return nonzero if ABFD represents a PA2.0 ELF64 file. Additionally we set the default architecture and machine. */ static bfd_boolean -elf64_hppa_object_p (abfd) - bfd *abfd; +elf64_hppa_object_p (bfd *abfd) { Elf_Internal_Ehdr * i_ehdrp; unsigned int flags; @@ -440,73 +394,13 @@ elf64_hppa_section_from_shdr (bfd *abfd, return TRUE; } -/* Construct a string for use in the elf64_hppa_dyn_hash_table. The - name describes what was once potentially anonymous memory. We - allocate memory as necessary, possibly reusing PBUF/PLEN. */ - -static const char * -get_dyn_name (abfd, h, rel, pbuf, plen) - bfd *abfd; - struct elf_link_hash_entry *h; - const Elf_Internal_Rela *rel; - char **pbuf; - size_t *plen; -{ - asection *sec = abfd->sections; - size_t nlen, tlen; - char *buf; - size_t len; - - if (h && rel->r_addend == 0) - return h->root.root.string; - - if (h) - nlen = strlen (h->root.root.string); - else - nlen = 8 + 1 + sizeof (rel->r_info) * 2 - 8; - tlen = nlen + 1 + sizeof (rel->r_addend) * 2 + 1; - - len = *plen; - buf = *pbuf; - if (len < tlen) - { - if (buf) - free (buf); - *pbuf = buf = malloc (tlen); - *plen = len = tlen; - if (!buf) - return NULL; - } - - if (h) - { - memcpy (buf, h->root.root.string, nlen); - buf[nlen++] = '+'; - sprintf_vma (buf + nlen, rel->r_addend); - } - else - { - nlen = sprintf (buf, "%x:%lx", - sec->id & 0xffffffff, - (long) ELF64_R_SYM (rel->r_info)); - if (rel->r_addend) - { - buf[nlen++] = '+'; - sprintf_vma (buf + nlen, rel->r_addend); - } - } - - return buf; -} - /* SEC is a section containing relocs for an input BFD when linking; return a suitable section for holding relocs in the output BFD for a link. */ static bfd_boolean -get_reloc_section (abfd, hppa_info, sec) - bfd *abfd; - struct elf64_hppa_link_hash_table *hppa_info; - asection *sec; +get_reloc_section (bfd *abfd, + struct elf64_hppa_link_hash_table *hppa_info, + asection *sec) { const char *srel_name; asection *srel; @@ -555,14 +449,13 @@ get_reloc_section (abfd, hppa_info, sec) output file. */ static bfd_boolean -count_dyn_reloc (abfd, dyn_h, type, sec, sec_symndx, offset, addend) - bfd *abfd; - struct elf64_hppa_dyn_hash_entry *dyn_h; - int type; - asection *sec; - int sec_symndx; - bfd_vma offset; - bfd_vma addend; +count_dyn_reloc (bfd *abfd, + struct elf64_hppa_link_hash_entry *hh, + int type, + asection *sec, + int sec_symndx, + bfd_vma offset, + bfd_vma addend) { struct elf64_hppa_dyn_reloc_entry *rent; @@ -571,26 +464,50 @@ count_dyn_reloc (abfd, dyn_h, type, sec, sec_symndx, offset, addend) if (!rent) return FALSE; - rent->next = dyn_h->reloc_entries; + rent->next = hh->reloc_entries; rent->type = type; rent->sec = sec; rent->sec_symndx = sec_symndx; rent->offset = offset; rent->addend = addend; - dyn_h->reloc_entries = rent; + hh->reloc_entries = rent; return TRUE; } +/* Return a pointer to the local DLT, PLT and OPD reference counts + for ABFD. Returns NULL if the storage allocation fails. */ + +static bfd_signed_vma * +hppa64_elf_local_refcounts (bfd *abfd) +{ + Elf_Internal_Shdr *symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + bfd_signed_vma *local_refcounts; + + local_refcounts = elf_local_got_refcounts (abfd); + if (local_refcounts == NULL) + { + bfd_size_type size; + + /* Allocate space for local DLT, PLT and OPD reference + counts. Done this way to save polluting elf_obj_tdata + with another target specific pointer. */ + size = symtab_hdr->sh_info; + size *= 3 * sizeof (bfd_signed_vma); + local_refcounts = bfd_zalloc (abfd, size); + elf_local_got_refcounts (abfd) = local_refcounts; + } + return local_refcounts; +} + /* Scan the RELOCS and record the type of dynamic entries that each referenced symbol needs. */ static bfd_boolean -elf64_hppa_check_relocs (abfd, info, sec, relocs) - bfd *abfd; - struct bfd_link_info *info; - asection *sec; - const Elf_Internal_Rela *relocs; +elf64_hppa_check_relocs (bfd *abfd, + struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { struct elf64_hppa_link_hash_table *hppa_info; const Elf_Internal_Rela *relend; @@ -599,7 +516,7 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) asection *dlt, *plt, *stubs; char *buf; size_t buf_len; - int sec_symndx; + unsigned int sec_symndx; if (info->relocatable) return TRUE; @@ -612,7 +529,7 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) return FALSE; } - hppa_info = elf64_hppa_hash_table (info); + hppa_info = hppa_link_hash_table (info); symtab_hdr = &elf_tdata (abfd)->symtab_hdr; /* If necessary, build a new table holding section symbols indices @@ -651,7 +568,8 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) isymend = local_syms + symtab_hdr->sh_info; for (isym = local_syms; isym < isymend; isym++) { - if (isym->st_shndx > highest_shndx) + if (isym->st_shndx > highest_shndx + && isym->st_shndx < SHN_LORESERVE) highest_shndx = isym->st_shndx; } @@ -697,10 +615,13 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) /* If we did not find a section symbol for this section, then something went terribly wrong above. */ - if (sec_symndx == -1) + if (sec_symndx == SHN_BAD) return FALSE; - sec_symndx = hppa_info->section_syms[sec_symndx]; + if (sec_symndx < SHN_LORESERVE) + sec_symndx = hppa_info->section_syms[sec_symndx]; + else + sec_symndx = 0; } else sec_symndx = 0; @@ -721,11 +642,9 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) NEED_DYNREL = 16, }; - struct elf_link_hash_entry *h = NULL; unsigned long r_symndx = ELF64_R_SYM (rel->r_info); - struct elf64_hppa_dyn_hash_entry *dyn_h; + struct elf64_hppa_link_hash_entry *hh; int need_entry; - const char *addr_name; bfd_boolean maybe_dynamic; int dynrel_type = R_PARISC_NONE; static reloc_howto_type *howto; @@ -735,24 +654,26 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) /* We're dealing with a global symbol -- find its hash entry and mark it as being referenced. */ long indx = r_symndx - symtab_hdr->sh_info; - h = elf_sym_hashes (abfd)[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; + hh = hppa_elf_hash_entry (elf_sym_hashes (abfd)[indx]); + while (hh->eh.root.type == bfd_link_hash_indirect + || hh->eh.root.type == bfd_link_hash_warning) + hh = hppa_elf_hash_entry (hh->eh.root.u.i.link); - h->ref_regular = 1; + hh->eh.ref_regular = 1; } + else + hh = NULL; /* We can only get preliminary data on whether a symbol is locally or externally defined, as not all of the input files have yet been processed. Do something with what we know, as this may help reduce memory usage and processing time later. */ maybe_dynamic = FALSE; - if (h && ((info->shared + if (hh && ((info->shared && (!info->symbolic || info->unresolved_syms_in_shared_libs == RM_IGNORE)) - || !h->def_regular - || h->root.type == bfd_link_hash_defweak)) + || !hh->eh.def_regular + || hh->eh.root.type == bfd_link_hash_defweak)) maybe_dynamic = TRUE; howto = elf_hppa_howto_table + ELF64_R_TYPE (rel->r_info); @@ -803,7 +724,12 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) case R_PARISC_PCREL16F: case R_PARISC_PCREL16WF: case R_PARISC_PCREL16DF: - need_entry = (NEED_PLT | NEED_STUB); + /* Function calls might need to go through the .plt, and + might need a long branch stub. */ + if (hh != NULL && hh->eh.type != STT_PARISC_MILLI) + need_entry = (NEED_PLT | NEED_STUB); + else + need_entry = 0; break; case R_PARISC_PLTOFF21L: @@ -836,18 +762,18 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) case R_PARISC_LTOFF_FPTR16WF: case R_PARISC_LTOFF_FPTR16DF: if (info->shared || maybe_dynamic) - need_entry = (NEED_DLT | NEED_OPD); + need_entry = (NEED_DLT | NEED_OPD | NEED_PLT); else - need_entry = (NEED_DLT | NEED_OPD); + need_entry = (NEED_DLT | NEED_OPD | NEED_PLT); dynrel_type = R_PARISC_FPTR64; break; /* This is a simple OPD entry. */ case R_PARISC_FPTR64: if (info->shared || maybe_dynamic) - need_entry = (NEED_OPD | NEED_DYNREL); + need_entry = (NEED_OPD | NEED_PLT | NEED_DYNREL); else - need_entry = (NEED_OPD); + need_entry = (NEED_OPD | NEED_PLT); dynrel_type = R_PARISC_FPTR64; break; @@ -857,28 +783,38 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) if (!need_entry) continue; - /* Collect a canonical name for this address. */ - addr_name = get_dyn_name (abfd, h, rel, &buf, &buf_len); - - /* Collect the canonical entry data for this address. */ - dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table, - addr_name, TRUE, TRUE); - BFD_ASSERT (dyn_h); - - /* Stash away enough information to be able to find this symbol - regardless of whether or not it is local or global. */ - dyn_h->h = h; - dyn_h->owner = abfd; - dyn_h->sym_indx = r_symndx; + if (hh) + { + /* Stash away enough information to be able to find this symbol + regardless of whether or not it is local or global. */ + hh->owner = abfd; + hh->sym_indx = r_symndx; + } - /* ?!? We may need to do some error checking in here. */ /* Create what's needed. */ if (need_entry & NEED_DLT) { + /* Allocate space for a DLT entry, as well as a dynamic + relocation for this entry. */ if (! hppa_info->dlt_sec && ! get_dlt (abfd, info, hppa_info)) goto err_out; - dyn_h->want_dlt = 1; + + if (hh != NULL) + { + hh->want_dlt = 1; + hh->eh.got.refcount += 1; + } + else + { + bfd_signed_vma *local_dlt_refcounts; + + /* This is a DLT entry for a local symbol. */ + local_dlt_refcounts = hppa64_elf_local_refcounts (abfd); + if (local_dlt_refcounts == NULL) + return FALSE; + local_dlt_refcounts[r_symndx] += 1; + } } if (need_entry & NEED_PLT) @@ -886,7 +822,25 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) if (! hppa_info->plt_sec && ! get_plt (abfd, info, hppa_info)) goto err_out; - dyn_h->want_plt = 1; + + if (hh != NULL) + { + hh->want_plt = 1; + hh->eh.needs_plt = 1; + hh->eh.plt.refcount += 1; + } + else + { + bfd_signed_vma *local_dlt_refcounts; + bfd_signed_vma *local_plt_refcounts; + + /* This is a PLT entry for a local symbol. */ + local_dlt_refcounts = hppa64_elf_local_refcounts (abfd); + if (local_dlt_refcounts == NULL) + return FALSE; + local_plt_refcounts = local_dlt_refcounts + symtab_hdr->sh_info; + local_plt_refcounts[r_symndx] += 1; + } } if (need_entry & NEED_STUB) @@ -894,7 +848,8 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) if (! hppa_info->stub_sec && ! get_stub (abfd, info, hppa_info)) goto err_out; - dyn_h->want_stub = 1; + if (hh) + hh->want_stub = 1; } if (need_entry & NEED_OPD) @@ -903,15 +858,24 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) && ! get_opd (abfd, info, hppa_info)) goto err_out; - dyn_h->want_opd = 1; + /* FPTRs are not allocated by the dynamic linker for PA64, + though it is possible that will change in the future. */ - /* FPTRs are not allocated by the dynamic linker for PA64, though - it is possible that will change in the future. */ - - /* This could be a local function that had its address taken, in - which case H will be NULL. */ - if (h) - h->needs_plt = 1; + if (hh != NULL) + hh->want_opd = 1; + else + { + bfd_signed_vma *local_dlt_refcounts; + bfd_signed_vma *local_opd_refcounts; + + /* This is a OPD for a local symbol. */ + local_dlt_refcounts = hppa64_elf_local_refcounts (abfd); + if (local_dlt_refcounts == NULL) + return FALSE; + local_opd_refcounts = (local_dlt_refcounts + + 2 * symtab_hdr->sh_info); + local_opd_refcounts[r_symndx] += 1; + } } /* Add a new dynamic relocation to the chain of dynamic @@ -922,8 +886,10 @@ elf64_hppa_check_relocs (abfd, info, sec, relocs) && ! get_reloc_section (abfd, hppa_info, sec)) goto err_out; - if (!count_dyn_reloc (abfd, dyn_h, dynrel_type, sec, - sec_symndx, rel->r_offset, rel->r_addend)) + /* Count dynamic relocations against global symbols. */ + if (hh != NULL + && !count_dyn_reloc (abfd, hh, dynrel_type, sec, + sec_symndx, rel->r_offset, rel->r_addend)) goto err_out; /* If we are building a shared library and we just recorded @@ -956,17 +922,16 @@ struct elf64_hppa_allocate_data /* Should we do dynamic things to this symbol? */ static bfd_boolean -elf64_hppa_dynamic_symbol_p (h, info) - struct elf_link_hash_entry *h; - struct bfd_link_info *info; +elf64_hppa_dynamic_symbol_p (struct elf_link_hash_entry *eh, + struct bfd_link_info *info) { /* ??? What, if anything, needs to happen wrt STV_PROTECTED symbols and relocations that retrieve a function descriptor? Assume the worst for now. */ - if (_bfd_elf_dynamic_symbol_p (h, info, 1)) + if (_bfd_elf_dynamic_symbol_p (eh, info, 1)) { /* ??? Why is this here and not elsewhere is_local_label_name. */ - if (h->root.root.string[0] == '$' && h->root.root.string[1] == '$') + if (eh->root.root.string[0] == '$' && eh->root.root.string[1] == '$') return FALSE; return TRUE; @@ -979,40 +944,32 @@ elf64_hppa_dynamic_symbol_p (h, info) entries in .opd for them. */ static bfd_boolean -elf64_hppa_mark_exported_functions (h, data) - struct elf_link_hash_entry *h; - PTR data; +elf64_hppa_mark_exported_functions (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct bfd_link_info *info = (struct bfd_link_info *)data; struct elf64_hppa_link_hash_table *hppa_info; - hppa_info = elf64_hppa_hash_table (info); + hppa_info = hppa_link_hash_table (info); - if (h->root.type == bfd_link_hash_warning) - h = (struct elf_link_hash_entry *) h->root.u.i.link; + if (eh->root.type == bfd_link_hash_warning) + eh = (struct elf_link_hash_entry *) eh->root.u.i.link; - if (h - && (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && h->root.u.def.section->output_section != NULL - && h->type == STT_FUNC) + if (eh + && (eh->root.type == bfd_link_hash_defined + || eh->root.type == bfd_link_hash_defweak) + && eh->root.u.def.section->output_section != NULL + && eh->type == STT_FUNC) { - struct elf64_hppa_dyn_hash_entry *dyn_h; - - /* Add this symbol to the PA64 linker hash table. */ - dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table, - h->root.root.string, TRUE, TRUE); - BFD_ASSERT (dyn_h); - dyn_h->h = h; - if (! hppa_info->opd_sec && ! get_opd (hppa_info->root.dynobj, info, hppa_info)) return FALSE; - dyn_h->want_opd = 1; + hh->want_opd = 1; + /* Put a flag here for output_symbol_hook. */ - dyn_h->st_shndx = -1; - h->needs_plt = 1; + hh->st_shndx = -1; + eh->needs_plt = 1; } return TRUE; @@ -1021,34 +978,29 @@ elf64_hppa_mark_exported_functions (h, data) /* Allocate space for a DLT entry. */ static bfd_boolean -allocate_global_data_dlt (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +allocate_global_data_dlt (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct elf64_hppa_allocate_data *x = (struct elf64_hppa_allocate_data *)data; - if (dyn_h->want_dlt) + if (hh->want_dlt) { - struct elf_link_hash_entry *h = dyn_h->h; - if (x->info->shared) { /* Possibly add the symbol to the local dynamic symbol table since we might need to create a dynamic relocation against it. */ - if (! h - || (h->dynindx == -1 && h->type != STT_PARISC_MILLI)) + if (eh->dynindx == -1 && eh->type != STT_PARISC_MILLI) { - bfd *owner; - owner = (h ? h->root.u.def.section->owner : dyn_h->owner); + bfd *owner = eh->root.u.def.section->owner; if (! (bfd_elf_link_record_local_dynamic_symbol - (x->info, owner, dyn_h->sym_indx))) + (x->info, owner, hh->sym_indx))) return FALSE; } } - dyn_h->dlt_offset = x->ofs; + hh->dlt_offset = x->ofs; x->ofs += DLT_ENTRY_SIZE; } return TRUE; @@ -1057,25 +1009,24 @@ allocate_global_data_dlt (dyn_h, data) /* Allocate space for a DLT.PLT entry. */ static bfd_boolean -allocate_global_data_plt (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +allocate_global_data_plt (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct elf64_hppa_allocate_data *x = (struct elf64_hppa_allocate_data *)data; - if (dyn_h->want_plt - && elf64_hppa_dynamic_symbol_p (dyn_h->h, x->info) - && !((dyn_h->h->root.type == bfd_link_hash_defined - || dyn_h->h->root.type == bfd_link_hash_defweak) - && dyn_h->h->root.u.def.section->output_section != NULL)) + if (hh->want_plt + && elf64_hppa_dynamic_symbol_p (eh, x->info) + && !((eh->root.type == bfd_link_hash_defined + || eh->root.type == bfd_link_hash_defweak) + && eh->root.u.def.section->output_section != NULL)) { - dyn_h->plt_offset = x->ofs; + hh->plt_offset = x->ofs; x->ofs += PLT_ENTRY_SIZE; - if (dyn_h->plt_offset < 0x2000) - elf64_hppa_hash_table (x->info)->gp_offset = dyn_h->plt_offset; + if (hh->plt_offset < 0x2000) + hppa_link_hash_table (x->info)->gp_offset = hh->plt_offset; } else - dyn_h->want_plt = 0; + hh->want_plt = 0; return TRUE; } @@ -1083,72 +1034,68 @@ allocate_global_data_plt (dyn_h, data) /* Allocate space for a STUB entry. */ static bfd_boolean -allocate_global_data_stub (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +allocate_global_data_stub (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct elf64_hppa_allocate_data *x = (struct elf64_hppa_allocate_data *)data; - if (dyn_h->want_stub - && elf64_hppa_dynamic_symbol_p (dyn_h->h, x->info) - && !((dyn_h->h->root.type == bfd_link_hash_defined - || dyn_h->h->root.type == bfd_link_hash_defweak) - && dyn_h->h->root.u.def.section->output_section != NULL)) + if (hh->want_stub + && elf64_hppa_dynamic_symbol_p (eh, x->info) + && !((eh->root.type == bfd_link_hash_defined + || eh->root.type == bfd_link_hash_defweak) + && eh->root.u.def.section->output_section != NULL)) { - dyn_h->stub_offset = x->ofs; + hh->stub_offset = x->ofs; x->ofs += sizeof (plt_stub); } else - dyn_h->want_stub = 0; + hh->want_stub = 0; return TRUE; } /* Allocate space for a FPTR entry. */ static bfd_boolean -allocate_global_data_opd (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +allocate_global_data_opd (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct elf64_hppa_allocate_data *x = (struct elf64_hppa_allocate_data *)data; - if (dyn_h->want_opd) + if (hh && hh->want_opd) { - struct elf_link_hash_entry *h = dyn_h->h; - - if (h) - 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; + while (hh->eh.root.type == bfd_link_hash_indirect + || hh->eh.root.type == bfd_link_hash_warning) + hh = hppa_elf_hash_entry (hh->eh.root.u.i.link); /* We never need an opd entry for a symbol which is not defined by this output file. */ - if (h && (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak - || h->root.u.def.section->output_section == NULL)) - dyn_h->want_opd = 0; + if (hh && (hh->eh.root.type == bfd_link_hash_undefined + || hh->eh.root.type == bfd_link_hash_undefweak + || hh->eh.root.u.def.section->output_section == NULL)) + hh->want_opd = 0; /* If we are creating a shared library, took the address of a local function or might export this function from this object file, then we have to create an opd descriptor. */ else if (x->info->shared - || h == NULL - || (h->dynindx == -1 && h->type != STT_PARISC_MILLI) - || (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak)) + || hh == NULL + || (hh->eh.dynindx == -1 && hh->eh.type != STT_PARISC_MILLI) + || (hh->eh.root.type == bfd_link_hash_defined + || hh->eh.root.type == bfd_link_hash_defweak)) { /* If we are creating a shared library, then we will have to create a runtime relocation for the symbol to properly initialize the .opd entry. Make sure the symbol gets added to the dynamic symbol table. */ if (x->info->shared - && (h == NULL || (h->dynindx == -1))) + && (hh == NULL || (hh->eh.dynindx == -1))) { bfd *owner; - owner = (h ? h->root.u.def.section->owner : dyn_h->owner); + /* PR 6511: Default to using the dynamic symbol table. */ + owner = (hh->owner ? hh->owner: eh->root.u.def.section->owner); if (!bfd_elf_link_record_local_dynamic_symbol - (x->info, owner, dyn_h->sym_indx)) + (x->info, owner, hh->sym_indx)) return FALSE; } @@ -1157,33 +1104,33 @@ allocate_global_data_opd (dyn_h, data) in dynamic relocs. But name munging does make the result much easier to debug. ie, the EPLT reloc will reference a symbol like .foobar, instead of .text + offset. */ - if (x->info->shared && h) + if (x->info->shared && eh) { char *new_name; struct elf_link_hash_entry *nh; - new_name = alloca (strlen (h->root.root.string) + 2); + new_name = alloca (strlen (eh->root.root.string) + 2); new_name[0] = '.'; - strcpy (new_name + 1, h->root.root.string); + strcpy (new_name + 1, eh->root.root.string); nh = elf_link_hash_lookup (elf_hash_table (x->info), new_name, TRUE, TRUE, TRUE); - nh->root.type = h->root.type; - nh->root.u.def.value = h->root.u.def.value; - nh->root.u.def.section = h->root.u.def.section; + nh->root.type = eh->root.type; + nh->root.u.def.value = eh->root.u.def.value; + nh->root.u.def.section = eh->root.u.def.section; if (! bfd_elf_link_record_dynamic_symbol (x->info, nh)) return FALSE; } - dyn_h->opd_offset = x->ofs; + hh->opd_offset = x->ofs; x->ofs += OPD_ENTRY_SIZE; } /* Otherwise we do not need an opd entry. */ else - dyn_h->want_opd = 0; + hh->want_opd = 0; } return TRUE; } @@ -1192,9 +1139,8 @@ allocate_global_data_opd (dyn_h, data) EI_ABIVERSION may not be strictly necessary. */ static void -elf64_hppa_post_process_headers (abfd, link_info) - bfd * abfd; - struct bfd_link_info * link_info ATTRIBUTE_UNUSED; +elf64_hppa_post_process_headers (bfd *abfd, + struct bfd_link_info *link_info ATTRIBUTE_UNUSED) { Elf_Internal_Ehdr * i_ehdrp; @@ -1210,10 +1156,9 @@ elf64_hppa_post_process_headers (abfd, link_info) of a procedure, thus ensuring a unique address for each procedure. */ static bfd_boolean -get_opd (abfd, info, hppa_info) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elf64_hppa_link_hash_table *hppa_info; +get_opd (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf64_hppa_link_hash_table *hppa_info) { asection *opd; bfd *dynobj; @@ -1247,10 +1192,9 @@ get_opd (abfd, info, hppa_info) /* Create the PLT section. */ static bfd_boolean -get_plt (abfd, info, hppa_info) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elf64_hppa_link_hash_table *hppa_info; +get_plt (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf64_hppa_link_hash_table *hppa_info) { asection *plt; bfd *dynobj; @@ -1284,10 +1228,9 @@ get_plt (abfd, info, hppa_info) /* Create the DLT section. */ static bfd_boolean -get_dlt (abfd, info, hppa_info) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elf64_hppa_link_hash_table *hppa_info; +get_dlt (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf64_hppa_link_hash_table *hppa_info) { asection *dlt; bfd *dynobj; @@ -1321,10 +1264,9 @@ get_dlt (abfd, info, hppa_info) /* Create the stubs section. */ static bfd_boolean -get_stub (abfd, info, hppa_info) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elf64_hppa_link_hash_table *hppa_info; +get_stub (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf64_hppa_link_hash_table *hppa_info) { asection *stub; bfd *dynobj; @@ -1394,22 +1336,21 @@ get_stub (abfd, info, hppa_info) EPLT relocations for symbols exported from shared libraries. */ static bfd_boolean -elf64_hppa_create_dynamic_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; +elf64_hppa_create_dynamic_sections (bfd *abfd, + struct bfd_link_info *info) { asection *s; - if (! get_stub (abfd, info, elf64_hppa_hash_table (info))) + if (! get_stub (abfd, info, hppa_link_hash_table (info))) return FALSE; - if (! get_dlt (abfd, info, elf64_hppa_hash_table (info))) + if (! get_dlt (abfd, info, hppa_link_hash_table (info))) return FALSE; - if (! get_plt (abfd, info, elf64_hppa_hash_table (info))) + if (! get_plt (abfd, info, hppa_link_hash_table (info))) return FALSE; - if (! get_opd (abfd, info, elf64_hppa_hash_table (info))) + if (! get_opd (abfd, info, hppa_link_hash_table (info))) return FALSE; s = bfd_make_section_with_flags (abfd, ".rela.dlt", @@ -1421,7 +1362,7 @@ elf64_hppa_create_dynamic_sections (abfd, info) if (s == NULL || !bfd_set_section_alignment (abfd, s, 3)) return FALSE; - elf64_hppa_hash_table (info)->dlt_rel_sec = s; + hppa_link_hash_table (info)->dlt_rel_sec = s; s = bfd_make_section_with_flags (abfd, ".rela.plt", (SEC_ALLOC | SEC_LOAD @@ -1432,7 +1373,7 @@ elf64_hppa_create_dynamic_sections (abfd, info) if (s == NULL || !bfd_set_section_alignment (abfd, s, 3)) return FALSE; - elf64_hppa_hash_table (info)->plt_rel_sec = s; + hppa_link_hash_table (info)->plt_rel_sec = s; s = bfd_make_section_with_flags (abfd, ".rela.data", (SEC_ALLOC | SEC_LOAD @@ -1443,7 +1384,7 @@ elf64_hppa_create_dynamic_sections (abfd, info) if (s == NULL || !bfd_set_section_alignment (abfd, s, 3)) return FALSE; - elf64_hppa_hash_table (info)->other_rel_sec = s; + hppa_link_hash_table (info)->other_rel_sec = s; s = bfd_make_section_with_flags (abfd, ".rela.opd", (SEC_ALLOC | SEC_LOAD @@ -1454,7 +1395,7 @@ elf64_hppa_create_dynamic_sections (abfd, info) if (s == NULL || !bfd_set_section_alignment (abfd, s, 3)) return FALSE; - elf64_hppa_hash_table (info)->opd_rel_sec = s; + hppa_link_hash_table (info)->opd_rel_sec = s; return TRUE; } @@ -1463,17 +1404,16 @@ elf64_hppa_create_dynamic_sections (abfd, info) to be dynamic. */ static bfd_boolean -allocate_dynrel_entries (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +allocate_dynrel_entries (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct elf64_hppa_allocate_data *x = (struct elf64_hppa_allocate_data *)data; struct elf64_hppa_link_hash_table *hppa_info; struct elf64_hppa_dyn_reloc_entry *rent; bfd_boolean dynamic_symbol, shared; - hppa_info = elf64_hppa_hash_table (x->info); - dynamic_symbol = elf64_hppa_dynamic_symbol_p (dyn_h->h, x->info); + hppa_info = hppa_link_hash_table (x->info); + dynamic_symbol = elf64_hppa_dynamic_symbol_p (eh, x->info); shared = x->info->shared; /* We may need to allocate relocations for a non-dynamic symbol @@ -1483,11 +1423,11 @@ allocate_dynrel_entries (dyn_h, data) /* Take care of the normal data relocations. */ - for (rent = dyn_h->reloc_entries; rent; rent = rent->next) + for (rent = hh->reloc_entries; rent; rent = rent->next) { /* Allocate one iff we are building a shared library, the relocation isn't a R_PARISC_FPTR64, or we don't want an opd entry. */ - if (!shared && rent->type == R_PARISC_FPTR64 && dyn_h->want_opd) + if (!shared && rent->type == R_PARISC_FPTR64 && hh->want_opd) continue; hppa_info->other_rel_sec->size += sizeof (Elf64_External_Rela); @@ -1495,25 +1435,24 @@ allocate_dynrel_entries (dyn_h, data) /* Make sure this symbol gets into the dynamic symbol table if it is not already recorded. ?!? This should not be in the loop since the symbol need only be added once. */ - if (dyn_h->h == 0 - || (dyn_h->h->dynindx == -1 && dyn_h->h->type != STT_PARISC_MILLI)) + if (eh->dynindx == -1 && eh->type != STT_PARISC_MILLI) if (!bfd_elf_link_record_local_dynamic_symbol - (x->info, rent->sec->owner, dyn_h->sym_indx)) + (x->info, rent->sec->owner, hh->sym_indx)) return FALSE; } /* Take care of the GOT and PLT relocations. */ - if ((dynamic_symbol || shared) && dyn_h->want_dlt) + if ((dynamic_symbol || shared) && hh->want_dlt) hppa_info->dlt_rel_sec->size += sizeof (Elf64_External_Rela); /* If we are building a shared library, then every symbol that has an opd entry will need an EPLT relocation to relocate the symbol's address and __gp value based on the runtime load address. */ - if (shared && dyn_h->want_opd) + if (shared && hh->want_opd) hppa_info->opd_rel_sec->size += sizeof (Elf64_External_Rela); - if (dyn_h->want_plt && dynamic_symbol) + if (hh->want_plt && dynamic_symbol) { bfd_size_type t = 0; @@ -1535,9 +1474,8 @@ allocate_dynrel_entries (dyn_h, data) regular object. */ static bfd_boolean -elf64_hppa_adjust_dynamic_symbol (info, h) - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elf_link_hash_entry *h; +elf64_hppa_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf_link_hash_entry *eh) { /* ??? Undefined symbols with PLT entries should be re-defined to be the PLT entry. */ @@ -1545,12 +1483,12 @@ elf64_hppa_adjust_dynamic_symbol (info, h) /* 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) + if (eh->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; + BFD_ASSERT (eh->u.weakdef->root.type == bfd_link_hash_defined + || eh->u.weakdef->root.type == bfd_link_hash_defweak); + eh->root.u.def.section = eh->u.weakdef->root.u.def.section; + eh->root.u.def.value = eh->u.weakdef->root.u.def.value; return TRUE; } @@ -1570,12 +1508,11 @@ elf64_hppa_adjust_dynamic_symbol (info, h) elf64_hppa_mark_exported_functions is called. */ static bfd_boolean -elf64_hppa_mark_milli_and_exported_functions (h, data) - struct elf_link_hash_entry *h; - PTR data; +elf64_hppa_mark_milli_and_exported_functions (struct elf_link_hash_entry *eh, + void *data) { + struct elf_link_hash_entry *elf = eh; struct bfd_link_info *info = (struct bfd_link_info *)data; - struct elf_link_hash_entry *elf = h; if (elf->root.type == bfd_link_hash_warning) elf = (struct elf_link_hash_entry *) elf->root.u.i.link; @@ -1591,26 +1528,25 @@ elf64_hppa_mark_milli_and_exported_functions (h, data) return TRUE; } - return elf64_hppa_mark_exported_functions (h, data); + return elf64_hppa_mark_exported_functions (eh, data); } /* Set the final sizes of the dynamic sections and allocate memory for the contents of our special sections. */ static bfd_boolean -elf64_hppa_size_dynamic_sections (output_bfd, info) - bfd *output_bfd; - struct bfd_link_info *info; +elf64_hppa_size_dynamic_sections (bfd *output_bfd, struct bfd_link_info *info) { + struct elf64_hppa_link_hash_table *hppa_info; + struct elf64_hppa_allocate_data data; bfd *dynobj; - asection *s; + bfd *ibfd; + asection *sec; bfd_boolean plt; bfd_boolean relocs; bfd_boolean reltext; - struct elf64_hppa_allocate_data data; - struct elf64_hppa_link_hash_table *hppa_info; - hppa_info = elf64_hppa_hash_table (info); + hppa_info = hppa_link_hash_table (info); dynobj = elf_hash_table (info)->dynobj; BFD_ASSERT (dynobj != NULL); @@ -1633,10 +1569,10 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) /* Set the contents of the .interp section to the interpreter. */ if (info->executable) { - s = bfd_get_section_by_name (dynobj, ".interp"); - BFD_ASSERT (s != NULL); - s->size = sizeof ELF_DYNAMIC_INTERPRETER; - s->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; + sec = bfd_get_section_by_name (dynobj, ".interp"); + BFD_ASSERT (sec != NULL); + sec->size = sizeof ELF_DYNAMIC_INTERPRETER; + sec->contents = (unsigned char *) ELF_DYNAMIC_INTERPRETER; } } else @@ -1646,65 +1582,192 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) not actually use these entries. Reset the size of .rela.dlt, which will cause it to get stripped from the output file below. */ - s = bfd_get_section_by_name (dynobj, ".rela.dlt"); - if (s != NULL) - s->size = 0; + sec = bfd_get_section_by_name (dynobj, ".rela.dlt"); + if (sec != NULL) + sec->size = 0; + } + + /* Set up DLT, PLT and OPD offsets for local syms, and space for local + dynamic relocs. */ + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + bfd_signed_vma *local_dlt; + bfd_signed_vma *end_local_dlt; + bfd_signed_vma *local_plt; + bfd_signed_vma *end_local_plt; + bfd_signed_vma *local_opd; + bfd_signed_vma *end_local_opd; + bfd_size_type locsymcount; + Elf_Internal_Shdr *symtab_hdr; + asection *srel; + + if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + continue; + + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + { + struct elf64_hppa_dyn_reloc_entry *hdh_p; + + for (hdh_p = ((struct elf64_hppa_dyn_reloc_entry *) + elf_section_data (sec)->local_dynrel); + hdh_p != NULL; + hdh_p = hdh_p->next) + { + if (!bfd_is_abs_section (hdh_p->sec) + && bfd_is_abs_section (hdh_p->sec->output_section)) + { + /* Input section has been discarded, either because + it is a copy of a linkonce section or due to + linker script /DISCARD/, so we'll be discarding + the relocs too. */ + } + else if (hdh_p->count != 0) + { + srel = elf_section_data (hdh_p->sec)->sreloc; + srel->size += hdh_p->count * sizeof (Elf64_External_Rela); + if ((hdh_p->sec->output_section->flags & SEC_READONLY) != 0) + info->flags |= DF_TEXTREL; + } + } + } + + local_dlt = elf_local_got_refcounts (ibfd); + if (!local_dlt) + continue; + + symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + locsymcount = symtab_hdr->sh_info; + end_local_dlt = local_dlt + locsymcount; + sec = hppa_info->dlt_sec; + srel = hppa_info->dlt_rel_sec; + for (; local_dlt < end_local_dlt; ++local_dlt) + { + if (*local_dlt > 0) + { + *local_dlt = sec->size; + sec->size += DLT_ENTRY_SIZE; + if (info->shared) + { + srel->size += sizeof (Elf64_External_Rela); + } + } + else + *local_dlt = (bfd_vma) -1; + } + + local_plt = end_local_dlt; + end_local_plt = local_plt + locsymcount; + if (! hppa_info->root.dynamic_sections_created) + { + /* Won't be used, but be safe. */ + for (; local_plt < end_local_plt; ++local_plt) + *local_plt = (bfd_vma) -1; + } + else + { + sec = hppa_info->plt_sec; + srel = hppa_info->plt_rel_sec; + for (; local_plt < end_local_plt; ++local_plt) + { + if (*local_plt > 0) + { + *local_plt = sec->size; + sec->size += PLT_ENTRY_SIZE; + if (info->shared) + srel->size += sizeof (Elf64_External_Rela); + } + else + *local_plt = (bfd_vma) -1; + } + } + + local_opd = end_local_plt; + end_local_opd = local_opd + locsymcount; + if (! hppa_info->root.dynamic_sections_created) + { + /* Won't be used, but be safe. */ + for (; local_opd < end_local_opd; ++local_opd) + *local_opd = (bfd_vma) -1; + } + else + { + sec = hppa_info->opd_sec; + srel = hppa_info->opd_rel_sec; + for (; local_opd < end_local_opd; ++local_opd) + { + if (*local_opd > 0) + { + *local_opd = sec->size; + sec->size += OPD_ENTRY_SIZE; + if (info->shared) + srel->size += sizeof (Elf64_External_Rela); + } + else + *local_opd = (bfd_vma) -1; + } + } } /* Allocate the GOT entries. */ data.info = info; - if (elf64_hppa_hash_table (info)->dlt_sec) + if (hppa_info->dlt_sec) { - data.ofs = 0x0; - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - allocate_global_data_dlt, &data); + data.ofs = hppa_info->dlt_sec->size; + elf_link_hash_traverse (elf_hash_table (info), + allocate_global_data_dlt, &data); hppa_info->dlt_sec->size = data.ofs; + } - data.ofs = 0x0; - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - allocate_global_data_plt, &data); + if (hppa_info->plt_sec) + { + data.ofs = hppa_info->plt_sec->size; + elf_link_hash_traverse (elf_hash_table (info), + allocate_global_data_plt, &data); hppa_info->plt_sec->size = data.ofs; + } + if (hppa_info->stub_sec) + { data.ofs = 0x0; - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - allocate_global_data_stub, &data); + elf_link_hash_traverse (elf_hash_table (info), + allocate_global_data_stub, &data); hppa_info->stub_sec->size = data.ofs; } /* Allocate space for entries in the .opd section. */ - if (elf64_hppa_hash_table (info)->opd_sec) + if (hppa_info->opd_sec) { - data.ofs = 0; - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - allocate_global_data_opd, &data); + data.ofs = hppa_info->opd_sec->size; + elf_link_hash_traverse (elf_hash_table (info), + allocate_global_data_opd, &data); hppa_info->opd_sec->size = data.ofs; } /* Now allocate space for dynamic relocations, if necessary. */ if (hppa_info->root.dynamic_sections_created) - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - allocate_dynrel_entries, &data); + elf_link_hash_traverse (elf_hash_table (info), + allocate_dynrel_entries, &data); /* The sizes of all the sections are set. Allocate memory for them. */ plt = FALSE; relocs = FALSE; reltext = FALSE; - for (s = dynobj->sections; s != NULL; s = s->next) + for (sec = dynobj->sections; sec != NULL; sec = sec->next) { const char *name; - if ((s->flags & SEC_LINKER_CREATED) == 0) + if ((sec->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); + name = bfd_get_section_name (dynobj, sec); if (strcmp (name, ".plt") == 0) { /* Remember whether there is a PLT. */ - plt = s->size != 0; + plt = sec->size != 0; } else if (strcmp (name, ".opd") == 0 || CONST_STRNEQ (name, ".dlt") @@ -1715,7 +1778,7 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) } else if (CONST_STRNEQ (name, ".rela")) { - if (s->size != 0) + if (sec->size != 0) { asection *target; @@ -1733,7 +1796,7 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) really apply to the .got section, which we created ourselves and so know is not readonly. */ outname = bfd_get_section_name (output_bfd, - s->output_section); + sec->output_section); target = bfd_get_section_by_name (output_bfd, outname + 4); if (target != NULL && (target->flags & SEC_READONLY) != 0 @@ -1743,7 +1806,7 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ - s->reloc_count = 0; + sec->reloc_count = 0; } } else @@ -1752,7 +1815,7 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) continue; } - if (s->size == 0) + if (sec->size == 0) { /* If we don't need this section, strip it from the output file. This is mostly to handle .rela.bss and @@ -1763,11 +1826,11 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) adjust_dynamic_symbol is called, and it is that function which decides whether anything needs to go into these sections. */ - s->flags |= SEC_EXCLUDE; + sec->flags |= SEC_EXCLUDE; continue; } - if ((s->flags & SEC_HAS_CONTENTS) == 0) + if ((sec->flags & SEC_HAS_CONTENTS) == 0) continue; /* Allocate memory for the section contents if it has not @@ -1776,10 +1839,10 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) contents are written out. This should not happen, but this way if it does, we get a R_PARISC_NONE reloc instead of garbage. */ - if (s->contents == NULL) + if (sec->contents == NULL) { - s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size); - if (s->contents == NULL) + sec->contents = (bfd_byte *) bfd_zalloc (dynobj, sec->size); + if (sec->contents == NULL) return FALSE; } } @@ -1851,28 +1914,19 @@ elf64_hppa_size_dynamic_sections (output_bfd, info) the symbols have their expected value in the normal symbol table. Ick. */ -static bfd_boolean -elf64_hppa_link_output_symbol_hook (info, name, sym, input_sec, h) - struct bfd_link_info *info; - const char *name; - Elf_Internal_Sym *sym; - asection *input_sec ATTRIBUTE_UNUSED; - struct elf_link_hash_entry *h; +static int +elf64_hppa_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED, + const char *name, + Elf_Internal_Sym *sym, + asection *input_sec ATTRIBUTE_UNUSED, + struct elf_link_hash_entry *eh) { - struct elf64_hppa_link_hash_table *hppa_info; - struct elf64_hppa_dyn_hash_entry *dyn_h; + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); /* We may be called with the file symbol or section symbols. They never need munging, so it is safe to ignore them. */ - if (!name) - return TRUE; - - /* Get the PA dyn_symbol (if any) associated with NAME. */ - hppa_info = elf64_hppa_hash_table (info); - dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table, - name, FALSE, FALSE); - if (!dyn_h || dyn_h->h != h) - return TRUE; + if (!name || !eh) + return 1; /* Function symbols for which we created .opd entries *may* have been munged by finish_dynamic_symbol and have to be un-munged here. @@ -1880,34 +1934,31 @@ elf64_hppa_link_output_symbol_hook (info, name, sym, input_sec, h) Note that finish_dynamic_symbol sometimes turns dynamic symbols into non-dynamic ones, so we initialize st_shndx to -1 in mark_exported_functions and check to see if it was overwritten - here instead of just checking dyn_h->h->dynindx. */ - if (dyn_h->want_opd && dyn_h->st_shndx != -1) + here instead of just checking eh->dynindx. */ + if (hh->want_opd && hh->st_shndx != -1) { /* Restore the saved value and section index. */ - sym->st_value = dyn_h->st_value; - sym->st_shndx = dyn_h->st_shndx; + sym->st_value = hh->st_value; + sym->st_shndx = hh->st_shndx; } - return TRUE; + return 1; } /* Finish up dynamic symbol handling. We set the contents of various dynamic sections here. */ static bfd_boolean -elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) - bfd *output_bfd; - struct bfd_link_info *info; - struct elf_link_hash_entry *h; - Elf_Internal_Sym *sym; +elf64_hppa_finish_dynamic_symbol (bfd *output_bfd, + struct bfd_link_info *info, + struct elf_link_hash_entry *eh, + Elf_Internal_Sym *sym) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); asection *stub, *splt, *sdlt, *sopd, *spltrel, *sdltrel; struct elf64_hppa_link_hash_table *hppa_info; - struct elf64_hppa_dyn_hash_entry *dyn_h; - hppa_info = elf64_hppa_hash_table (info); - dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table, - h->root.root.string, FALSE, FALSE); + hppa_info = hppa_link_hash_table (info); stub = hppa_info->stub_sec; splt = hppa_info->plt_sec; @@ -1923,18 +1974,18 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) We will store a new value and section index into the symbol long enough to output it into the dynamic symbol table, then we restore the original values (in elf64_hppa_link_output_symbol_hook). */ - if (dyn_h && dyn_h->want_opd) + if (hh->want_opd) { BFD_ASSERT (sopd != NULL); /* Save away the original value and section index so that we can restore them later. */ - dyn_h->st_value = sym->st_value; - dyn_h->st_shndx = sym->st_shndx; + hh->st_value = sym->st_value; + hh->st_shndx = sym->st_shndx; /* For the dynamic symbol table entry, we want the value to be address of this symbol's entry within the .opd section. */ - sym->st_value = (dyn_h->opd_offset + sym->st_value = (hh->opd_offset + sopd->output_offset + sopd->output_section->vma); sym->st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, @@ -1942,8 +1993,8 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) } /* Initialize a .plt entry if requested. */ - if (dyn_h && dyn_h->want_plt - && elf64_hppa_dynamic_symbol_p (dyn_h->h, info)) + if (hh->want_plt + && elf64_hppa_dynamic_symbol_p (eh, info)) { bfd_vma value; Elf_Internal_Rela rel; @@ -1955,10 +2006,10 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) if we are creating a shared library and the symbol is still undefined, we create a dynamic relocation to fill in the correct value. */ - if (info->shared && h->root.type == bfd_link_hash_undefined) + if (info->shared && eh->root.type == bfd_link_hash_undefined) value = 0; else - value = (h->root.u.def.value + h->root.u.def.section->vma); + value = (eh->root.u.def.value + eh->root.u.def.section->vma); /* Fill in the entry in the procedure linkage table. @@ -1971,9 +2022,9 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) We are modifying the in-memory PLT contents here, so we do not add in the output_offset of the PLT section. */ - bfd_put_64 (splt->owner, value, splt->contents + dyn_h->plt_offset); + bfd_put_64 (splt->owner, value, splt->contents + hh->plt_offset); value = _bfd_get_gp_value (splt->output_section->owner); - bfd_put_64 (splt->owner, value, splt->contents + dyn_h->plt_offset + 0x8); + bfd_put_64 (splt->owner, value, splt->contents + hh->plt_offset + 0x8); /* Create a dynamic IPLT relocation for this entry. @@ -1981,9 +2032,9 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) which is included within the DLT secton. So we do need to include the PLT's output_offset in the computation of the relocation's address. */ - rel.r_offset = (dyn_h->plt_offset + splt->output_offset + rel.r_offset = (hh->plt_offset + splt->output_offset + splt->output_section->vma); - rel.r_info = ELF64_R_INFO (h->dynindx, R_PARISC_IPLT); + rel.r_info = ELF64_R_INFO (hh->eh.dynindx, R_PARISC_IPLT); rel.r_addend = 0; loc = spltrel->contents; @@ -1992,8 +2043,8 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) } /* Initialize an external call stub entry if requested. */ - if (dyn_h && dyn_h->want_stub - && elf64_hppa_dynamic_symbol_p (dyn_h->h, info)) + if (hh->want_stub + && elf64_hppa_dynamic_symbol_p (eh, info)) { bfd_vma value; int insn; @@ -2005,7 +2056,7 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) We are modifying the contents of the stub section, so we do not need to include the stub section's output_offset here. */ - memcpy (stub->contents + dyn_h->stub_offset, plt_stub, sizeof (plt_stub)); + memcpy (stub->contents + hh->stub_offset, plt_stub, sizeof (plt_stub)); /* Fix up the first ldd instruction. @@ -2018,9 +2069,9 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) the same address as the start of the PLT section. gp_offset contains the offset of __gp within the PLT section. */ - value = dyn_h->plt_offset - hppa_info->gp_offset; + value = hh->plt_offset - hppa_info->gp_offset; - insn = bfd_get_32 (stub->owner, stub->contents + dyn_h->stub_offset); + insn = bfd_get_32 (stub->owner, stub->contents + hh->stub_offset); if (output_bfd->arch_info->mach >= 25) { /* Wide mode allows 16 bit offsets. */ @@ -2038,17 +2089,17 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) if ((value & 7) || value + max_offset >= 2*max_offset - 8) { (*_bfd_error_handler) (_("stub entry for %s cannot load .plt, dp offset = %ld"), - dyn_h->root.string, + hh->eh.root.root.string, (long) value); return FALSE; } bfd_put_32 (stub->owner, (bfd_vma) insn, - stub->contents + dyn_h->stub_offset); + stub->contents + hh->stub_offset); /* Fix up the second ldd instruction. */ value += 8; - insn = bfd_get_32 (stub->owner, stub->contents + dyn_h->stub_offset + 8); + insn = bfd_get_32 (stub->owner, stub->contents + hh->stub_offset + 8); if (output_bfd->arch_info->mach >= 25) { insn &= ~ 0xfff1; @@ -2060,7 +2111,7 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) insn |= re_assemble_14 ((int) value); } bfd_put_32 (stub->owner, (bfd_vma) insn, - stub->contents + dyn_h->stub_offset + 8); + stub->contents + hh->stub_offset + 8); } return TRUE; @@ -2070,21 +2121,19 @@ elf64_hppa_finish_dynamic_symbol (output_bfd, info, h, sym) exports. Initialize the FPTR entries. */ static bfd_boolean -elf64_hppa_finalize_opd (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +elf64_hppa_finalize_opd (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct bfd_link_info *info = (struct bfd_link_info *)data; struct elf64_hppa_link_hash_table *hppa_info; - struct elf_link_hash_entry *h = dyn_h ? dyn_h->h : NULL; asection *sopd; asection *sopdrel; - hppa_info = elf64_hppa_hash_table (info); + hppa_info = hppa_link_hash_table (info); sopd = hppa_info->opd_sec; sopdrel = hppa_info->opd_rel_sec; - if (h && dyn_h->want_opd) + if (hh->want_opd) { bfd_vma value; @@ -2092,24 +2141,24 @@ elf64_hppa_finalize_opd (dyn_h, data) We are modifying the contents of the OPD section in memory, so we do not need to include its output offset in this computation. */ - memset (sopd->contents + dyn_h->opd_offset, 0, 16); + memset (sopd->contents + hh->opd_offset, 0, 16); - value = (h->root.u.def.value - + h->root.u.def.section->output_section->vma - + h->root.u.def.section->output_offset); + value = (eh->root.u.def.value + + eh->root.u.def.section->output_section->vma + + eh->root.u.def.section->output_offset); /* The next word is the address of the function. */ - bfd_put_64 (sopd->owner, value, sopd->contents + dyn_h->opd_offset + 16); + bfd_put_64 (sopd->owner, value, sopd->contents + hh->opd_offset + 16); /* The last word is our local __gp value. */ value = _bfd_get_gp_value (sopd->output_section->owner); - bfd_put_64 (sopd->owner, value, sopd->contents + dyn_h->opd_offset + 24); + bfd_put_64 (sopd->owner, value, sopd->contents + hh->opd_offset + 24); } /* If we are generating a shared library, we must generate EPLT relocations for each entry in the .opd, even for static functions (they may have had their address taken). */ - if (info->shared && dyn_h && dyn_h->want_opd) + if (info->shared && hh->want_opd) { Elf_Internal_Rela rel; bfd_byte *loc; @@ -2118,16 +2167,16 @@ elf64_hppa_finalize_opd (dyn_h, data) /* We may need to do a relocation against a local symbol, in which case we have to look up it's dynamic symbol index off the local symbol hash table. */ - if (h && h->dynindx != -1) - dynindx = h->dynindx; + if (eh->dynindx != -1) + dynindx = eh->dynindx; else dynindx - = _bfd_elf_link_lookup_local_dynindx (info, dyn_h->owner, - dyn_h->sym_indx); + = _bfd_elf_link_lookup_local_dynindx (info, hh->owner, + hh->sym_indx); /* The offset of this relocation is the absolute address of the .opd entry for this symbol. */ - rel.r_offset = (dyn_h->opd_offset + sopd->output_offset + rel.r_offset = (hh->opd_offset + sopd->output_offset + sopd->output_section->vma); /* If H is non-null, then we have an external symbol. @@ -2157,21 +2206,22 @@ elf64_hppa_finalize_opd (dyn_h, data) We do have to play similar games for FPTR relocations in shared libraries, including those for static symbols. See the FPTR handling in elf64_hppa_finalize_dynreloc. */ - if (h) + if (eh) { char *new_name; struct elf_link_hash_entry *nh; - new_name = alloca (strlen (h->root.root.string) + 2); + new_name = alloca (strlen (eh->root.root.string) + 2); new_name[0] = '.'; - strcpy (new_name + 1, h->root.root.string); + strcpy (new_name + 1, eh->root.root.string); nh = elf_link_hash_lookup (elf_hash_table (info), - new_name, FALSE, FALSE, FALSE); - + new_name, TRUE, TRUE, FALSE); + /* All we really want from the new symbol is its dynamic symbol index. */ - dynindx = nh->dynindx; + if (nh) + dynindx = nh->dynindx; } rel.r_addend = 0; @@ -2189,16 +2239,14 @@ elf64_hppa_finalize_opd (dyn_h, data) we can not depend on finish_dynamic_symbol to initialize the .dlt. */ static bfd_boolean -elf64_hppa_finalize_dlt (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +elf64_hppa_finalize_dlt (struct elf_link_hash_entry *eh, void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct bfd_link_info *info = (struct bfd_link_info *)data; struct elf64_hppa_link_hash_table *hppa_info; asection *sdlt, *sdltrel; - struct elf_link_hash_entry *h = dyn_h ? dyn_h->h : NULL; - hppa_info = elf64_hppa_hash_table (info); + hppa_info = hppa_link_hash_table (info); sdlt = hppa_info->dlt_sec; sdltrel = hppa_info->dlt_rel_sec; @@ -2207,7 +2255,7 @@ elf64_hppa_finalize_dlt (dyn_h, data) address, so there is no need to create a relocation. Just install the proper value into the DLT, note this shortcut can not be skipped when building a shared library. */ - if (! info->shared && h && dyn_h->want_dlt) + if (! info->shared && hh && hh->want_dlt) { bfd_vma value; @@ -2217,21 +2265,21 @@ elf64_hppa_finalize_dlt (dyn_h, data) We include the OPD's output offset in this computation as we are referring to an absolute address in the resulting object file. */ - if (dyn_h->want_opd) + if (hh->want_opd) { - value = (dyn_h->opd_offset + value = (hh->opd_offset + hppa_info->opd_sec->output_offset + hppa_info->opd_sec->output_section->vma); } - else if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && h->root.u.def.section) + else if ((eh->root.type == bfd_link_hash_defined + || eh->root.type == bfd_link_hash_defweak) + && eh->root.u.def.section) { - value = h->root.u.def.value + h->root.u.def.section->output_offset; - if (h->root.u.def.section->output_section) - value += h->root.u.def.section->output_section->vma; + value = eh->root.u.def.value + eh->root.u.def.section->output_offset; + if (eh->root.u.def.section->output_section) + value += eh->root.u.def.section->output_section->vma; else - value += h->root.u.def.section->vma; + value += eh->root.u.def.section->vma; } else /* We have an undefined function reference. */ @@ -2239,13 +2287,13 @@ elf64_hppa_finalize_dlt (dyn_h, data) /* We do not need to include the output offset of the DLT section here because we are modifying the in-memory contents. */ - bfd_put_64 (sdlt->owner, value, sdlt->contents + dyn_h->dlt_offset); + bfd_put_64 (sdlt->owner, value, sdlt->contents + hh->dlt_offset); } /* Create a relocation for the DLT entry associated with this symbol. When building a shared library the symbol does not have to be dynamic. */ - if (dyn_h->want_dlt - && (elf64_hppa_dynamic_symbol_p (dyn_h->h, info) || info->shared)) + if (hh->want_dlt + && (elf64_hppa_dynamic_symbol_p (eh, info) || info->shared)) { Elf_Internal_Rela rel; bfd_byte *loc; @@ -2254,19 +2302,19 @@ elf64_hppa_finalize_dlt (dyn_h, data) /* We may need to do a relocation against a local symbol, in which case we have to look up it's dynamic symbol index off the local symbol hash table. */ - if (h && h->dynindx != -1) - dynindx = h->dynindx; + if (eh && eh->dynindx != -1) + dynindx = eh->dynindx; else dynindx - = _bfd_elf_link_lookup_local_dynindx (info, dyn_h->owner, - dyn_h->sym_indx); + = _bfd_elf_link_lookup_local_dynindx (info, hh->owner, + hh->sym_indx); /* Create a dynamic relocation for this entry. Do include the output offset of the DLT entry since we need an absolute address in the resulting object file. */ - rel.r_offset = (dyn_h->dlt_offset + sdlt->output_offset + rel.r_offset = (hh->dlt_offset + sdlt->output_offset + sdlt->output_section->vma); - if (h && h->type == STT_FUNC) + if (eh && eh->type == STT_FUNC) rel.r_info = ELF64_R_INFO (dynindx, R_PARISC_FPTR64); else rel.r_info = ELF64_R_INFO (dynindx, R_PARISC_DIR64); @@ -2283,46 +2331,44 @@ elf64_hppa_finalize_dlt (dyn_h, data) for dynamic functions used to initialize static data. */ static bfd_boolean -elf64_hppa_finalize_dynreloc (dyn_h, data) - struct elf64_hppa_dyn_hash_entry *dyn_h; - PTR data; +elf64_hppa_finalize_dynreloc (struct elf_link_hash_entry *eh, + void *data) { + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); struct bfd_link_info *info = (struct bfd_link_info *)data; struct elf64_hppa_link_hash_table *hppa_info; - struct elf_link_hash_entry *h; int dynamic_symbol; - dynamic_symbol = elf64_hppa_dynamic_symbol_p (dyn_h->h, info); + dynamic_symbol = elf64_hppa_dynamic_symbol_p (eh, info); if (!dynamic_symbol && !info->shared) return TRUE; - if (dyn_h->reloc_entries) + if (hh->reloc_entries) { struct elf64_hppa_dyn_reloc_entry *rent; int dynindx; - hppa_info = elf64_hppa_hash_table (info); - h = dyn_h->h; + hppa_info = hppa_link_hash_table (info); /* We may need to do a relocation against a local symbol, in which case we have to look up it's dynamic symbol index off the local symbol hash table. */ - if (h && h->dynindx != -1) - dynindx = h->dynindx; + if (eh->dynindx != -1) + dynindx = eh->dynindx; else dynindx - = _bfd_elf_link_lookup_local_dynindx (info, dyn_h->owner, - dyn_h->sym_indx); + = _bfd_elf_link_lookup_local_dynindx (info, hh->owner, + hh->sym_indx); - for (rent = dyn_h->reloc_entries; rent; rent = rent->next) + for (rent = hh->reloc_entries; rent; rent = rent->next) { Elf_Internal_Rela rel; bfd_byte *loc; /* Allocate one iff we are building a shared library, the relocation isn't a R_PARISC_FPTR64, or we don't want an opd entry. */ - if (!info->shared && rent->type == R_PARISC_FPTR64 && dyn_h->want_opd) + if (!info->shared && rent->type == R_PARISC_FPTR64 && hh->want_opd) continue; /* Create a dynamic relocation for this entry. @@ -2352,12 +2398,12 @@ elf64_hppa_finalize_dynreloc (dyn_h, data) We use a section symbol recorded by check_relocs as the base symbol for the relocation. The addend is the difference between the section symbol and the address of the .opd entry. */ - if (info->shared && rent->type == R_PARISC_FPTR64 && dyn_h->want_opd) + if (info->shared && rent->type == R_PARISC_FPTR64 && hh->want_opd) { bfd_vma value, value2; /* First compute the address of the opd entry for this symbol. */ - value = (dyn_h->opd_offset + value = (hh->opd_offset + hppa_info->opd_sec->output_section->vma + hppa_info->opd_sec->output_offset); @@ -2400,8 +2446,7 @@ elf64_hppa_finalize_dynreloc (dyn_h, data) dynamic linker, before writing them out. */ static enum elf_reloc_type_class -elf64_hppa_reloc_type_class (rela) - const Elf_Internal_Rela *rela; +elf64_hppa_reloc_type_class (const Elf_Internal_Rela *rela) { if (ELF64_R_SYM (rela->r_info) == 0) return reloc_class_relative; @@ -2420,31 +2465,30 @@ elf64_hppa_reloc_type_class (rela) /* Finish up the dynamic sections. */ static bfd_boolean -elf64_hppa_finish_dynamic_sections (output_bfd, info) - bfd *output_bfd; - struct bfd_link_info *info; +elf64_hppa_finish_dynamic_sections (bfd *output_bfd, + struct bfd_link_info *info) { bfd *dynobj; asection *sdyn; struct elf64_hppa_link_hash_table *hppa_info; - hppa_info = elf64_hppa_hash_table (info); + hppa_info = hppa_link_hash_table (info); /* Finalize the contents of the .opd section. */ - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - elf64_hppa_finalize_opd, - info); + elf_link_hash_traverse (elf_hash_table (info), + elf64_hppa_finalize_opd, + info); - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - elf64_hppa_finalize_dynreloc, - info); + elf_link_hash_traverse (elf_hash_table (info), + elf64_hppa_finalize_dynreloc, + info); /* Finalize the contents of the .dlt section. */ dynobj = elf_hash_table (info)->dynobj; /* Finalize the contents of the .dlt section. */ - elf64_hppa_dyn_hash_traverse (&hppa_info->dyn_hash_table, - elf64_hppa_finalize_dlt, - info); + elf_link_hash_traverse (elf_hash_table (info), + elf64_hppa_finalize_dlt, + info); sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); @@ -2606,7 +2650,7 @@ elf64_hppa_grok_psinfo (bfd *abfd, Elf_Internal_Note *note) static int elf64_hppa_additional_program_headers (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED) + struct bfd_link_info *info ATTRIBUTE_UNUSED) { asection *s; @@ -2686,9 +2730,8 @@ elf64_hppa_modify_segment_map (bfd *abfd, /* Called when writing out an object file to decide the type of a symbol. */ static int -elf64_hppa_elf_get_symbol_type (elf_sym, type) - Elf_Internal_Sym *elf_sym; - int type; +elf64_hppa_elf_get_symbol_type (Elf_Internal_Sym *elf_sym, + int type) { if (ELF_ST_TYPE (elf_sym->st_info) == STT_PARISC_MILLI) return STT_PARISC_MILLI; @@ -2744,6 +2787,1201 @@ elf64_hppa_section_from_phdr (bfd *abfd, Elf_Internal_Phdr *hdr, int index, return _bfd_elf_make_section_from_phdr (abfd, hdr, index, typename); } +/* Hook called by the linker routine which adds symbols from an object + file. HP's libraries define symbols with HP specific section + indices, which we have to handle. */ + +static bfd_boolean +elf_hppa_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) +{ + unsigned int index = sym->st_shndx; + + switch (index) + { + case SHN_PARISC_ANSI_COMMON: + *secp = bfd_make_section_old_way (abfd, ".PARISC.ansi.common"); + (*secp)->flags |= SEC_IS_COMMON; + *valp = sym->st_size; + break; + + case SHN_PARISC_HUGE_COMMON: + *secp = bfd_make_section_old_way (abfd, ".PARISC.huge.common"); + (*secp)->flags |= SEC_IS_COMMON; + *valp = sym->st_size; + break; + } + + return TRUE; +} + +static bfd_boolean +elf_hppa_unmark_useless_dynamic_symbols (struct elf_link_hash_entry *h, + void *data) +{ + struct bfd_link_info *info = data; + + if (h->root.type == bfd_link_hash_warning) + h = (struct elf_link_hash_entry *) h->root.u.i.link; + + /* If we are not creating a shared library, and this symbol is + referenced by a shared library but is not defined anywhere, then + the generic code will warn that it is undefined. + + This behavior is undesirable on HPs since the standard shared + libraries contain references to undefined symbols. + + So we twiddle the flags associated with such symbols so that they + will not trigger the warning. ?!? FIXME. This is horribly fragile. + + Ultimately we should have better controls over the generic ELF BFD + linker code. */ + if (! info->relocatable + && info->unresolved_syms_in_shared_libs != RM_IGNORE + && h->root.type == bfd_link_hash_undefined + && h->ref_dynamic + && !h->ref_regular) + { + h->ref_dynamic = 0; + h->pointer_equality_needed = 1; + } + + return TRUE; +} + +static bfd_boolean +elf_hppa_remark_useless_dynamic_symbols (struct elf_link_hash_entry *h, + void *data) +{ + struct bfd_link_info *info = data; + + if (h->root.type == bfd_link_hash_warning) + h = (struct elf_link_hash_entry *) h->root.u.i.link; + + /* If we are not creating a shared library, and this symbol is + referenced by a shared library but is not defined anywhere, then + the generic code will warn that it is undefined. + + This behavior is undesirable on HPs since the standard shared + libraries contain references to undefined symbols. + + So we twiddle the flags associated with such symbols so that they + will not trigger the warning. ?!? FIXME. This is horribly fragile. + + Ultimately we should have better controls over the generic ELF BFD + linker code. */ + if (! info->relocatable + && info->unresolved_syms_in_shared_libs != RM_IGNORE + && h->root.type == bfd_link_hash_undefined + && !h->ref_dynamic + && !h->ref_regular + && h->pointer_equality_needed) + { + h->ref_dynamic = 1; + h->pointer_equality_needed = 0; + } + + return TRUE; +} + +static bfd_boolean +elf_hppa_is_dynamic_loader_symbol (const char *name) +{ + return (! strcmp (name, "__CPU_REVISION") + || ! strcmp (name, "__CPU_KEYBITS_1") + || ! strcmp (name, "__SYSTEM_ID_D") + || ! strcmp (name, "__FPU_MODEL") + || ! strcmp (name, "__FPU_REVISION") + || ! strcmp (name, "__ARGC") + || ! strcmp (name, "__ARGV") + || ! strcmp (name, "__ENVP") + || ! strcmp (name, "__TLS_SIZE_D") + || ! strcmp (name, "__LOAD_INFO") + || ! strcmp (name, "__systab")); +} + +/* Record the lowest address for the data and text segments. */ +static void +elf_hppa_record_segment_addrs (bfd *abfd, + asection *section, + void *data) +{ + struct elf64_hppa_link_hash_table *hppa_info = data; + + if ((section->flags & (SEC_ALLOC | SEC_LOAD)) == (SEC_ALLOC | SEC_LOAD)) + { + bfd_vma value; + Elf_Internal_Phdr *p; + + p = _bfd_elf_find_segment_containing_section (abfd, section->output_section); + BFD_ASSERT (p != NULL); + value = p->p_vaddr; + + if (section->flags & SEC_READONLY) + { + if (value < hppa_info->text_segment_base) + hppa_info->text_segment_base = value; + } + else + { + if (value < hppa_info->data_segment_base) + hppa_info->data_segment_base = value; + } + } +} + +/* Called after we have seen all the input files/sections, but before + final symbol resolution and section placement has been determined. + + We use this hook to (possibly) provide a value for __gp, then we + fall back to the generic ELF final link routine. */ + +static bfd_boolean +elf_hppa_final_link (bfd *abfd, struct bfd_link_info *info) +{ + bfd_boolean retval; + struct elf64_hppa_link_hash_table *hppa_info = hppa_link_hash_table (info); + + if (! info->relocatable) + { + struct elf_link_hash_entry *gp; + bfd_vma gp_val; + + /* The linker script defines a value for __gp iff it was referenced + by one of the objects being linked. First try to find the symbol + in the hash table. If that fails, just compute the value __gp + should have had. */ + gp = elf_link_hash_lookup (elf_hash_table (info), "__gp", FALSE, + FALSE, FALSE); + + if (gp) + { + + /* Adjust the value of __gp as we may want to slide it into the + .plt section so that the stubs can access PLT entries without + using an addil sequence. */ + gp->root.u.def.value += hppa_info->gp_offset; + + gp_val = (gp->root.u.def.section->output_section->vma + + gp->root.u.def.section->output_offset + + gp->root.u.def.value); + } + else + { + asection *sec; + + /* First look for a .plt section. If found, then __gp is the + address of the .plt + gp_offset. + + If no .plt is found, then look for .dlt, .opd and .data (in + that order) and set __gp to the base address of whichever + section is found first. */ + + sec = hppa_info->plt_sec; + if (sec && ! (sec->flags & SEC_EXCLUDE)) + gp_val = (sec->output_offset + + sec->output_section->vma + + hppa_info->gp_offset); + else + { + sec = hppa_info->dlt_sec; + if (!sec || (sec->flags & SEC_EXCLUDE)) + sec = hppa_info->opd_sec; + if (!sec || (sec->flags & SEC_EXCLUDE)) + sec = bfd_get_section_by_name (abfd, ".data"); + if (!sec || (sec->flags & SEC_EXCLUDE)) + gp_val = 0; + else + gp_val = sec->output_offset + sec->output_section->vma; + } + } + + /* Install whatever value we found/computed for __gp. */ + _bfd_set_gp_value (abfd, gp_val); + } + + /* We need to know the base of the text and data segments so that we + can perform SEGREL relocations. We will record the base addresses + when we encounter the first SEGREL relocation. */ + hppa_info->text_segment_base = (bfd_vma)-1; + hppa_info->data_segment_base = (bfd_vma)-1; + + /* HP's shared libraries have references to symbols that are not + defined anywhere. The generic ELF BFD linker code will complain + about such symbols. + + So we detect the losing case and arrange for the flags on the symbol + to indicate that it was never referenced. This keeps the generic + ELF BFD link code happy and appears to not create any secondary + problems. Ultimately we need a way to control the behavior of the + generic ELF BFD link code better. */ + elf_link_hash_traverse (elf_hash_table (info), + elf_hppa_unmark_useless_dynamic_symbols, + info); + + /* Invoke the regular ELF backend linker to do all the work. */ + retval = bfd_elf_final_link (abfd, info); + + elf_link_hash_traverse (elf_hash_table (info), + elf_hppa_remark_useless_dynamic_symbols, + info); + + /* If we're producing a final executable, sort the contents of the + unwind section. */ + if (retval) + retval = elf_hppa_sort_unwind (abfd); + + return retval; +} + +/* 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 int +elf_hppa_relocate_insn (int insn, int sym_value, unsigned int r_type) +{ + switch (r_type) + { + /* 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); + + /* This is any 12 bit branch. */ + case R_PARISC_PCREL12F: + return (insn & ~0x1ffd) | re_assemble_12 (sym_value); + + /* 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); + + /* 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); + + /* 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); + + /* 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); + + /* 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)); + + /* 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)); + + default: + return insn; + } +} + +/* Compute the value for a relocation (REL) during a final link stage, + then insert the value into the proper location in CONTENTS. + + VALUE is a tentative value for the relocation and may be overridden + and modified here based on the specific relocation to be performed. + + For example we do conversions for PC-relative branches in this routine + or redirection of calls to external routines to stubs. + + The work of actually applying the relocation is left to a helper + routine in an attempt to reduce the complexity and size of this + function. */ + +static bfd_reloc_status_type +elf_hppa_final_link_relocate (Elf_Internal_Rela *rel, + bfd *input_bfd, + bfd *output_bfd, + asection *input_section, + bfd_byte *contents, + bfd_vma value, + struct bfd_link_info *info, + asection *sym_sec, + struct elf_link_hash_entry *eh) +{ + struct elf64_hppa_link_hash_table *hppa_info = hppa_link_hash_table (info); + struct elf64_hppa_link_hash_entry *hh = hppa_elf_hash_entry (eh); + bfd_vma *local_offsets; + Elf_Internal_Shdr *symtab_hdr; + int insn; + bfd_vma max_branch_offset = 0; + bfd_vma offset = rel->r_offset; + bfd_signed_vma addend = rel->r_addend; + reloc_howto_type *howto = elf_hppa_howto_table + ELF_R_TYPE (rel->r_info); + unsigned int r_symndx = ELF_R_SYM (rel->r_info); + unsigned int r_type = howto->type; + bfd_byte *hit_data = contents + offset; + + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + local_offsets = elf_local_got_offsets (input_bfd); + insn = bfd_get_32 (input_bfd, hit_data); + + switch (r_type) + { + case R_PARISC_NONE: + break; + + /* Basic function call support. + + Note for a call to a function defined in another dynamic library + we want to redirect the call to a stub. */ + + /* PC relative relocs without an implicit offset. */ + case R_PARISC_PCREL21L: + case R_PARISC_PCREL14R: + case R_PARISC_PCREL14F: + case R_PARISC_PCREL14WR: + case R_PARISC_PCREL14DR: + case R_PARISC_PCREL16F: + case R_PARISC_PCREL16WF: + case R_PARISC_PCREL16DF: + { + /* If this is a call to a function defined in another dynamic + library, then redirect the call to the local stub for this + function. */ + if (sym_sec == NULL || sym_sec->output_section == NULL) + value = (hh->stub_offset + hppa_info->stub_sec->output_offset + + hppa_info->stub_sec->output_section->vma); + + /* Turn VALUE into a proper PC relative address. */ + value -= (offset + input_section->output_offset + + input_section->output_section->vma); + + /* Adjust for any field selectors. */ + if (r_type == R_PARISC_PCREL21L) + value = hppa_field_adjust (value, -8 + addend, e_lsel); + else if (r_type == R_PARISC_PCREL14F + || r_type == R_PARISC_PCREL16F + || r_type == R_PARISC_PCREL16WF + || r_type == R_PARISC_PCREL16DF) + value = hppa_field_adjust (value, -8 + addend, e_fsel); + else + value = hppa_field_adjust (value, -8 + addend, e_rsel); + + /* Apply the relocation to the given instruction. */ + insn = elf_hppa_relocate_insn (insn, (int) value, r_type); + break; + } + + case R_PARISC_PCREL12F: + case R_PARISC_PCREL22F: + case R_PARISC_PCREL17F: + case R_PARISC_PCREL22C: + case R_PARISC_PCREL17C: + case R_PARISC_PCREL17R: + { + /* If this is a call to a function defined in another dynamic + library, then redirect the call to the local stub for this + function. */ + if (sym_sec == NULL || sym_sec->output_section == NULL) + value = (hh->stub_offset + hppa_info->stub_sec->output_offset + + hppa_info->stub_sec->output_section->vma); + + /* Turn VALUE into a proper PC relative address. */ + value -= (offset + input_section->output_offset + + input_section->output_section->vma); + addend -= 8; + + if (r_type == (unsigned int) R_PARISC_PCREL22F) + max_branch_offset = (1 << (22-1)) << 2; + else if (r_type == (unsigned int) R_PARISC_PCREL17F) + max_branch_offset = (1 << (17-1)) << 2; + else if (r_type == (unsigned int) R_PARISC_PCREL12F) + max_branch_offset = (1 << (12-1)) << 2; + + /* Make sure we can reach the branch target. */ + if (max_branch_offset != 0 + && value + addend + max_branch_offset >= 2*max_branch_offset) + { + (*_bfd_error_handler) + (_("%B(%A+0x%lx): cannot reach %s"), + input_bfd, + input_section, + offset, + eh->root.root.string); + bfd_set_error (bfd_error_bad_value); + return bfd_reloc_notsupported; + } + + /* Adjust for any field selectors. */ + if (r_type == R_PARISC_PCREL17R) + value = hppa_field_adjust (value, addend, e_rsel); + else + value = hppa_field_adjust (value, addend, e_fsel); + + /* All branches are implicitly shifted by 2 places. */ + value >>= 2; + + /* Apply the relocation to the given instruction. */ + insn = elf_hppa_relocate_insn (insn, (int) value, r_type); + break; + } + + /* Indirect references to data through the DLT. */ + case R_PARISC_DLTIND14R: + case R_PARISC_DLTIND14F: + case R_PARISC_DLTIND14DR: + case R_PARISC_DLTIND14WR: + case R_PARISC_DLTIND21L: + case R_PARISC_LTOFF_FPTR14R: + case R_PARISC_LTOFF_FPTR14DR: + case R_PARISC_LTOFF_FPTR14WR: + case R_PARISC_LTOFF_FPTR21L: + case R_PARISC_LTOFF_FPTR16F: + case R_PARISC_LTOFF_FPTR16WF: + case R_PARISC_LTOFF_FPTR16DF: + case R_PARISC_LTOFF_TP21L: + case R_PARISC_LTOFF_TP14R: + case R_PARISC_LTOFF_TP14F: + case R_PARISC_LTOFF_TP14WR: + case R_PARISC_LTOFF_TP14DR: + case R_PARISC_LTOFF_TP16F: + case R_PARISC_LTOFF_TP16WF: + case R_PARISC_LTOFF_TP16DF: + case R_PARISC_LTOFF16F: + case R_PARISC_LTOFF16WF: + case R_PARISC_LTOFF16DF: + { + bfd_vma off; + + /* If this relocation was against a local symbol, then we still + have not set up the DLT entry (it's not convenient to do so + in the "finalize_dlt" routine because it is difficult to get + to the local symbol's value). + + So, if this is a local symbol (h == NULL), then we need to + fill in its DLT entry. + + Similarly we may still need to set up an entry in .opd for + a local function which had its address taken. */ + if (hh == NULL) + { + bfd_vma *local_opd_offsets, *local_dlt_offsets; + + if (local_offsets == NULL) + abort (); + + /* Now do .opd creation if needed. */ + if (r_type == R_PARISC_LTOFF_FPTR14R + || r_type == R_PARISC_LTOFF_FPTR14DR + || r_type == R_PARISC_LTOFF_FPTR14WR + || r_type == R_PARISC_LTOFF_FPTR21L + || r_type == R_PARISC_LTOFF_FPTR16F + || r_type == R_PARISC_LTOFF_FPTR16WF + || r_type == R_PARISC_LTOFF_FPTR16DF) + { + local_opd_offsets = local_offsets + 2 * symtab_hdr->sh_info; + off = local_opd_offsets[r_symndx]; + + /* The last bit records whether we've already initialised + this local .opd entry. */ + if ((off & 1) != 0) + { + BFD_ASSERT (off != (bfd_vma) -1); + off &= ~1; + } + else + { + local_opd_offsets[r_symndx] |= 1; + + /* The first two words of an .opd entry are zero. */ + memset (hppa_info->opd_sec->contents + off, 0, 16); + + /* The next word is the address of the function. */ + bfd_put_64 (hppa_info->opd_sec->owner, value + addend, + (hppa_info->opd_sec->contents + off + 16)); + + /* The last word is our local __gp value. */ + value = _bfd_get_gp_value + (hppa_info->opd_sec->output_section->owner); + bfd_put_64 (hppa_info->opd_sec->owner, value, + (hppa_info->opd_sec->contents + off + 24)); + } + + /* The DLT value is the address of the .opd entry. */ + value = (off + + hppa_info->opd_sec->output_offset + + hppa_info->opd_sec->output_section->vma); + addend = 0; + } + + local_dlt_offsets = local_offsets; + off = local_dlt_offsets[r_symndx]; + + if ((off & 1) != 0) + { + BFD_ASSERT (off != (bfd_vma) -1); + off &= ~1; + } + else + { + local_dlt_offsets[r_symndx] |= 1; + bfd_put_64 (hppa_info->dlt_sec->owner, + value + addend, + hppa_info->dlt_sec->contents + off); + } + } + else + off = hh->dlt_offset; + + /* We want the value of the DLT offset for this symbol, not + the symbol's actual address. Note that __gp may not point + to the start of the DLT, so we have to compute the absolute + address, then subtract out the value of __gp. */ + value = (off + + hppa_info->dlt_sec->output_offset + + hppa_info->dlt_sec->output_section->vma); + value -= _bfd_get_gp_value (output_bfd); + + /* All DLTIND relocations are basically the same at this point, + except that we need different field selectors for the 21bit + version vs the 14bit versions. */ + if (r_type == R_PARISC_DLTIND21L + || r_type == R_PARISC_LTOFF_FPTR21L + || r_type == R_PARISC_LTOFF_TP21L) + value = hppa_field_adjust (value, 0, e_lsel); + else if (r_type == R_PARISC_DLTIND14F + || r_type == R_PARISC_LTOFF_FPTR16F + || r_type == R_PARISC_LTOFF_FPTR16WF + || r_type == R_PARISC_LTOFF_FPTR16DF + || r_type == R_PARISC_LTOFF16F + || r_type == R_PARISC_LTOFF16DF + || r_type == R_PARISC_LTOFF16WF + || r_type == R_PARISC_LTOFF_TP16F + || r_type == R_PARISC_LTOFF_TP16WF + || r_type == R_PARISC_LTOFF_TP16DF) + value = hppa_field_adjust (value, 0, e_fsel); + else + value = hppa_field_adjust (value, 0, e_rsel); + + insn = elf_hppa_relocate_insn (insn, (int) value, r_type); + break; + } + + case R_PARISC_DLTREL14R: + case R_PARISC_DLTREL14F: + case R_PARISC_DLTREL14DR: + case R_PARISC_DLTREL14WR: + case R_PARISC_DLTREL21L: + case R_PARISC_DPREL21L: + case R_PARISC_DPREL14WR: + case R_PARISC_DPREL14DR: + case R_PARISC_DPREL14R: + case R_PARISC_DPREL14F: + case R_PARISC_GPREL16F: + case R_PARISC_GPREL16WF: + case R_PARISC_GPREL16DF: + { + /* Subtract out the global pointer value to make value a DLT + relative address. */ + value -= _bfd_get_gp_value (output_bfd); + + /* All DLTREL relocations are basically the same at this point, + except that we need different field selectors for the 21bit + version vs the 14bit versions. */ + if (r_type == R_PARISC_DLTREL21L + || r_type == R_PARISC_DPREL21L) + value = hppa_field_adjust (value, addend, e_lrsel); + else if (r_type == R_PARISC_DLTREL14F + || r_type == R_PARISC_DPREL14F + || r_type == R_PARISC_GPREL16F + || r_type == R_PARISC_GPREL16WF + || r_type == R_PARISC_GPREL16DF) + value = hppa_field_adjust (value, addend, e_fsel); + else + value = hppa_field_adjust (value, addend, e_rrsel); + + insn = elf_hppa_relocate_insn (insn, (int) value, r_type); + break; + } + + case R_PARISC_DIR21L: + case R_PARISC_DIR17R: + case R_PARISC_DIR17F: + case R_PARISC_DIR14R: + case R_PARISC_DIR14F: + case R_PARISC_DIR14WR: + case R_PARISC_DIR14DR: + case R_PARISC_DIR16F: + case R_PARISC_DIR16WF: + case R_PARISC_DIR16DF: + { + /* All DIR relocations are basically the same at this point, + except that branch offsets need to be divided by four, and + we need different field selectors. Note that we don't + redirect absolute calls to local stubs. */ + + if (r_type == R_PARISC_DIR21L) + value = hppa_field_adjust (value, addend, e_lrsel); + else if (r_type == R_PARISC_DIR17F + || r_type == R_PARISC_DIR16F + || r_type == R_PARISC_DIR16WF + || r_type == R_PARISC_DIR16DF + || r_type == R_PARISC_DIR14F) + value = hppa_field_adjust (value, addend, e_fsel); + else + 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; + + insn = elf_hppa_relocate_insn (insn, (int) value, r_type); + break; + } + + case R_PARISC_PLTOFF21L: + case R_PARISC_PLTOFF14R: + case R_PARISC_PLTOFF14F: + case R_PARISC_PLTOFF14WR: + case R_PARISC_PLTOFF14DR: + case R_PARISC_PLTOFF16F: + case R_PARISC_PLTOFF16WF: + case R_PARISC_PLTOFF16DF: + { + /* We want the value of the PLT offset for this symbol, not + the symbol's actual address. Note that __gp may not point + to the start of the DLT, so we have to compute the absolute + address, then subtract out the value of __gp. */ + value = (hh->plt_offset + + hppa_info->plt_sec->output_offset + + hppa_info->plt_sec->output_section->vma); + value -= _bfd_get_gp_value (output_bfd); + + /* All PLTOFF relocations are basically the same at this point, + except that we need different field selectors for the 21bit + version vs the 14bit versions. */ + if (r_type == R_PARISC_PLTOFF21L) + value = hppa_field_adjust (value, addend, e_lrsel); + else if (r_type == R_PARISC_PLTOFF14F + || r_type == R_PARISC_PLTOFF16F + || r_type == R_PARISC_PLTOFF16WF + || r_type == R_PARISC_PLTOFF16DF) + value = hppa_field_adjust (value, addend, e_fsel); + else + value = hppa_field_adjust (value, addend, e_rrsel); + + insn = elf_hppa_relocate_insn (insn, (int) value, r_type); + break; + } + + case R_PARISC_LTOFF_FPTR32: + { + /* We may still need to create the FPTR itself if it was for + a local symbol. */ + if (hh == NULL) + { + /* The first two words of an .opd entry are zero. */ + memset (hppa_info->opd_sec->contents + hh->opd_offset, 0, 16); + + /* The next word is the address of the function. */ + bfd_put_64 (hppa_info->opd_sec->owner, value + addend, + (hppa_info->opd_sec->contents + + hh->opd_offset + 16)); + + /* The last word is our local __gp value. */ + value = _bfd_get_gp_value + (hppa_info->opd_sec->output_section->owner); + bfd_put_64 (hppa_info->opd_sec->owner, value, + hppa_info->opd_sec->contents + hh->opd_offset + 24); + + /* The DLT value is the address of the .opd entry. */ + value = (hh->opd_offset + + hppa_info->opd_sec->output_offset + + hppa_info->opd_sec->output_section->vma); + + bfd_put_64 (hppa_info->dlt_sec->owner, + value, + hppa_info->dlt_sec->contents + hh->dlt_offset); + } + + /* We want the value of the DLT offset for this symbol, not + the symbol's actual address. Note that __gp may not point + to the start of the DLT, so we have to compute the absolute + address, then subtract out the value of __gp. */ + value = (hh->dlt_offset + + hppa_info->dlt_sec->output_offset + + hppa_info->dlt_sec->output_section->vma); + value -= _bfd_get_gp_value (output_bfd); + bfd_put_32 (input_bfd, value, hit_data); + return bfd_reloc_ok; + } + + case R_PARISC_LTOFF_FPTR64: + case R_PARISC_LTOFF_TP64: + { + /* We may still need to create the FPTR itself if it was for + a local symbol. */ + if (eh == NULL && r_type == R_PARISC_LTOFF_FPTR64) + { + /* The first two words of an .opd entry are zero. */ + memset (hppa_info->opd_sec->contents + hh->opd_offset, 0, 16); + + /* The next word is the address of the function. */ + bfd_put_64 (hppa_info->opd_sec->owner, value + addend, + (hppa_info->opd_sec->contents + + hh->opd_offset + 16)); + + /* The last word is our local __gp value. */ + value = _bfd_get_gp_value + (hppa_info->opd_sec->output_section->owner); + bfd_put_64 (hppa_info->opd_sec->owner, value, + hppa_info->opd_sec->contents + hh->opd_offset + 24); + + /* The DLT value is the address of the .opd entry. */ + value = (hh->opd_offset + + hppa_info->opd_sec->output_offset + + hppa_info->opd_sec->output_section->vma); + + bfd_put_64 (hppa_info->dlt_sec->owner, + value, + hppa_info->dlt_sec->contents + hh->dlt_offset); + } + + /* We want the value of the DLT offset for this symbol, not + the symbol's actual address. Note that __gp may not point + to the start of the DLT, so we have to compute the absolute + address, then subtract out the value of __gp. */ + value = (hh->dlt_offset + + hppa_info->dlt_sec->output_offset + + hppa_info->dlt_sec->output_section->vma); + value -= _bfd_get_gp_value (output_bfd); + bfd_put_64 (input_bfd, value, hit_data); + return bfd_reloc_ok; + } + + case R_PARISC_DIR32: + bfd_put_32 (input_bfd, value + addend, hit_data); + return bfd_reloc_ok; + + case R_PARISC_DIR64: + bfd_put_64 (input_bfd, value + addend, hit_data); + return bfd_reloc_ok; + + case R_PARISC_GPREL64: + /* Subtract out the global pointer value to make value a DLT + relative address. */ + value -= _bfd_get_gp_value (output_bfd); + + bfd_put_64 (input_bfd, value + addend, hit_data); + return bfd_reloc_ok; + + case R_PARISC_LTOFF64: + /* We want the value of the DLT offset for this symbol, not + the symbol's actual address. Note that __gp may not point + to the start of the DLT, so we have to compute the absolute + address, then subtract out the value of __gp. */ + value = (hh->dlt_offset + + hppa_info->dlt_sec->output_offset + + hppa_info->dlt_sec->output_section->vma); + value -= _bfd_get_gp_value (output_bfd); + + bfd_put_64 (input_bfd, value + addend, hit_data); + return bfd_reloc_ok; + + case R_PARISC_PCREL32: + { + /* If this is a call to a function defined in another dynamic + library, then redirect the call to the local stub for this + function. */ + if (sym_sec == NULL || sym_sec->output_section == NULL) + value = (hh->stub_offset + hppa_info->stub_sec->output_offset + + hppa_info->stub_sec->output_section->vma); + + /* Turn VALUE into a proper PC relative address. */ + value -= (offset + input_section->output_offset + + input_section->output_section->vma); + + value += addend; + value -= 8; + bfd_put_32 (input_bfd, value, hit_data); + return bfd_reloc_ok; + } + + case R_PARISC_PCREL64: + { + /* If this is a call to a function defined in another dynamic + library, then redirect the call to the local stub for this + function. */ + if (sym_sec == NULL || sym_sec->output_section == NULL) + value = (hh->stub_offset + hppa_info->stub_sec->output_offset + + hppa_info->stub_sec->output_section->vma); + + /* Turn VALUE into a proper PC relative address. */ + value -= (offset + input_section->output_offset + + input_section->output_section->vma); + + value += addend; + value -= 8; + bfd_put_64 (input_bfd, value, hit_data); + return bfd_reloc_ok; + } + + case R_PARISC_FPTR64: + { + bfd_vma off; + + /* We may still need to create the FPTR itself if it was for + a local symbol. */ + if (hh == NULL) + { + bfd_vma *local_opd_offsets; + + if (local_offsets == NULL) + abort (); + + local_opd_offsets = local_offsets + 2 * symtab_hdr->sh_info; + off = local_opd_offsets[r_symndx]; + + /* The last bit records whether we've already initialised + this local .opd entry. */ + if ((off & 1) != 0) + { + BFD_ASSERT (off != (bfd_vma) -1); + off &= ~1; + } + else + { + /* The first two words of an .opd entry are zero. */ + memset (hppa_info->opd_sec->contents + off, 0, 16); + + /* The next word is the address of the function. */ + bfd_put_64 (hppa_info->opd_sec->owner, value + addend, + (hppa_info->opd_sec->contents + off + 16)); + + /* The last word is our local __gp value. */ + value = _bfd_get_gp_value + (hppa_info->opd_sec->output_section->owner); + bfd_put_64 (hppa_info->opd_sec->owner, value, + hppa_info->opd_sec->contents + off + 24); + } + } + else + off = hh->opd_offset; + + if (hh == NULL || hh->want_opd) + /* We want the value of the OPD offset for this symbol. */ + value = (off + + hppa_info->opd_sec->output_offset + + hppa_info->opd_sec->output_section->vma); + else + /* We want the address of the symbol. */ + value += addend; + + bfd_put_64 (input_bfd, value, hit_data); + return bfd_reloc_ok; + } + + case R_PARISC_SECREL32: + if (sym_sec) + value -= sym_sec->output_section->vma; + bfd_put_32 (input_bfd, value + addend, hit_data); + return bfd_reloc_ok; + + case R_PARISC_SEGREL32: + case R_PARISC_SEGREL64: + { + /* If this is the first SEGREL relocation, then initialize + the segment base values. */ + if (hppa_info->text_segment_base == (bfd_vma) -1) + bfd_map_over_sections (output_bfd, elf_hppa_record_segment_addrs, + hppa_info); + + /* VALUE holds the absolute address. We want to include the + addend, then turn it into a segment relative address. + + The segment is derived from SYM_SEC. We assume that there are + only two segments of note in the resulting executable/shlib. + A readonly segment (.text) and a readwrite segment (.data). */ + value += addend; + + if (sym_sec->flags & SEC_CODE) + value -= hppa_info->text_segment_base; + else + value -= hppa_info->data_segment_base; + + if (r_type == R_PARISC_SEGREL32) + bfd_put_32 (input_bfd, value, hit_data); + else + bfd_put_64 (input_bfd, value, hit_data); + return bfd_reloc_ok; + } + + /* Something we don't know how to handle. */ + default: + return bfd_reloc_notsupported; + } + + /* Update the instruction word. */ + bfd_put_32 (input_bfd, (bfd_vma) insn, hit_data); + return bfd_reloc_ok; +} + +/* Relocate an HPPA ELF section. */ + +static bfd_boolean +elf64_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) +{ + Elf_Internal_Shdr *symtab_hdr; + Elf_Internal_Rela *rel; + Elf_Internal_Rela *relend; + struct elf64_hppa_link_hash_table *hppa_info; + + hppa_info = hppa_link_hash_table (info); + symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + + rel = relocs; + relend = relocs + input_section->reloc_count; + for (; rel < relend; rel++) + { + 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 *eh; + Elf_Internal_Sym *sym; + asection *sym_sec; + bfd_vma relocation; + bfd_reloc_status_type r; + bfd_boolean warned_undef; + + 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; + } + if (r_type == (unsigned int) R_PARISC_GNU_VTENTRY + || r_type == (unsigned int) R_PARISC_GNU_VTINHERIT) + continue; + + /* This is a final link. */ + r_symndx = ELF_R_SYM (rel->r_info); + eh = NULL; + sym = NULL; + sym_sec = NULL; + warned_undef = FALSE; + if (r_symndx < symtab_hdr->sh_info) + { + /* This is a local symbol, hh defaults to NULL. */ + sym = local_syms + r_symndx; + sym_sec = local_sections[r_symndx]; + relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sym_sec, rel); + } + else + { + /* This is not a local symbol. */ + bfd_boolean unresolved_reloc; + struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (input_bfd); + + /* It seems this can happen with erroneous or unsupported + input (mixing a.out and elf in an archive, for example.) */ + if (sym_hashes == NULL) + return FALSE; + + eh = sym_hashes[r_symndx - symtab_hdr->sh_info]; + + while (eh->root.type == bfd_link_hash_indirect + || eh->root.type == bfd_link_hash_warning) + eh = (struct elf_link_hash_entry *) eh->root.u.i.link; + + warned_undef = FALSE; + unresolved_reloc = FALSE; + relocation = 0; + if (eh->root.type == bfd_link_hash_defined + || eh->root.type == bfd_link_hash_defweak) + { + sym_sec = eh->root.u.def.section; + if (sym_sec == NULL + || sym_sec->output_section == NULL) + /* Set a flag that will be cleared later if we find a + relocation value for this symbol. output_section + is typically NULL for symbols satisfied by a shared + library. */ + unresolved_reloc = TRUE; + else + relocation = (eh->root.u.def.value + + sym_sec->output_section->vma + + sym_sec->output_offset); + } + else if (eh->root.type == bfd_link_hash_undefweak) + ; + else if (info->unresolved_syms_in_objects == RM_IGNORE + && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT) + ; + else if (!info->relocatable + && elf_hppa_is_dynamic_loader_symbol (eh->root.root.string)) + continue; + else if (!info->relocatable) + { + bfd_boolean err; + err = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR + || ELF_ST_VISIBILITY (eh->other) != STV_DEFAULT); + if (!info->callbacks->undefined_symbol (info, + eh->root.root.string, + input_bfd, + input_section, + rel->r_offset, err)) + return FALSE; + warned_undef = TRUE; + } + + 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) + { + if (info->unresolved_syms_in_objects == RM_IGNORE + && ELF_ST_VISIBILITY (eh->other) == STV_DEFAULT + && eh->type == STT_PARISC_MILLI) + { + if (! info->callbacks->undefined_symbol + (info, eh_name (eh), input_bfd, + input_section, rel->r_offset, FALSE)) + return FALSE; + warned_undef = TRUE; + } + } + } + + 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, + eh); + + if (r != bfd_reloc_ok) + { + switch (r) + { + default: + abort (); + case bfd_reloc_overflow: + { + const char *sym_name; + + if (eh != 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, (eh ? &eh->root : NULL), sym_name, + howto->name, (bfd_vma) 0, input_bfd, + input_section, rel->r_offset))) + return FALSE; + } + break; + } + } + } + return TRUE; +} + static const struct bfd_elf_special_section elf64_hppa_special_sections[] = { { STRING_COMMA_LEN (".fini"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, diff --git a/bfd/elf64-hppa.h b/bfd/elf64-hppa.h index 1959c17..addbd81 100644 --- a/bfd/elf64-hppa.h +++ b/bfd/elf64-hppa.h @@ -1,6 +1,6 @@ /* ELF64/HPPA support - Copyright 1999, 2000, 2002, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2002, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -26,11 +26,11 @@ #include "libhppa.h" #include "elf/hppa.h" -elf_hppa_reloc_type elf64_hppa_reloc_final_type - PARAMS ((bfd *, elf_hppa_reloc_type, int, unsigned int)); +extern elf_hppa_reloc_type elf64_hppa_reloc_final_type + (bfd *, elf_hppa_reloc_type, int, unsigned int); extern elf_hppa_reloc_type ** _bfd_elf64_hppa_gen_reloc_type - PARAMS ((bfd *, elf_hppa_reloc_type, int, unsigned int, int, asymbol *)); + (bfd *, elf_hppa_reloc_type, int, unsigned int, int, asymbol *); /* Define groups of basic relocations. FIXME: These should be the only basic relocations created by GAS. The rest diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c index 482d078..312c976 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, - 2007 Free Software Foundation, Inc. + 2006, 2007, 2008 Free Software Foundation, Inc. Ian Lance Taylor, Cygnus Support Linker support added by Mark Mitchell, CodeSourcery, LLC. @@ -1328,7 +1328,20 @@ static reloc_howto_type mips_elf64_howto_table_rela[] = /* TLS relocations. */ EMPTY_HOWTO (R_MIPS_TLS_DTPMOD32), EMPTY_HOWTO (R_MIPS_TLS_DTPREL32), - EMPTY_HOWTO (R_MIPS_TLS_DTPMOD64), + + HOWTO (R_MIPS_TLS_DTPMOD64, /* 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_DTPMOD64", /* name */ + TRUE, /* partial_inplace */ + MINUS_ONE, /* src_mask */ + MINUS_ONE, /* dst_mask */ + FALSE), /* pcrel_offset */ HOWTO (R_MIPS_TLS_DTPREL64, /* type */ 0, /* rightshift */ @@ -1419,8 +1432,22 @@ static reloc_howto_type mips_elf64_howto_table_rela[] = 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ + /* TLS IE dynamic relocations. */ EMPTY_HOWTO (R_MIPS_TLS_TPREL32), - EMPTY_HOWTO (R_MIPS_TLS_TPREL64), + + HOWTO (R_MIPS_TLS_TPREL64, /* 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_TPREL64", /* name */ + TRUE, /* partial_inplace */ + MINUS_ONE, /* src_mask */ + MINUS_ONE, /* dst_mask */ + FALSE), /* pcrel_offset */ /* TLS thread pointer offset. */ HOWTO (R_MIPS_TLS_TPREL_HI16, /* type */ @@ -1503,11 +1530,35 @@ static reloc_howto_type mips16_elf64_howto_table_rel[] = 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 reference to global offset table. */ - EMPTY_HOWTO (R_MIPS16_GOT16), + /* A MIPS16 reference to the global offset table. */ + HOWTO (R_MIPS16_GOT16, /* 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_mips_elf_got16_reloc, /* special_function */ + "R_MIPS16_GOT16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 16 bit call through global offset table. */ - EMPTY_HOWTO (R_MIPS16_CALL16), + /* A MIPS16 call through the global offset table. */ + HOWTO (R_MIPS16_CALL16, /* 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_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_CALL16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ /* MIPS16 high 16 bits of symbol value. */ HOWTO (R_MIPS16_HI16, /* type */ @@ -1575,11 +1626,35 @@ static reloc_howto_type mips16_elf64_howto_table_rela[] = 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 reference to global offset table. */ - EMPTY_HOWTO (R_MIPS16_GOT16), + /* A MIPS16 reference to the global offset table. */ + HOWTO (R_MIPS16_GOT16, /* 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_mips_elf_got16_reloc, /* special_function */ + "R_MIPS16_GOT16", /* name */ + FALSE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 16 bit call through global offset table. */ - EMPTY_HOWTO (R_MIPS16_CALL16), + /* A MIPS16 call through the global offset table. */ + HOWTO (R_MIPS16_CALL16, /* 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_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_CALL16", /* name */ + FALSE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ /* MIPS16 high 16 bits of symbol value. */ HOWTO (R_MIPS16_HI16, /* type */ @@ -1676,6 +1751,38 @@ static reloc_howto_type elf_mips_gnu_rela16_s2 = 0x0000ffff, /* dst_mask */ TRUE); /* pcrel_offset */ +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_copy_howto = + HOWTO (R_MIPS_COPY, /* type */ + 0, /* rightshift */ + 0, /* this one is variable size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_MIPS_COPY", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_jump_slot_howto = + HOWTO (R_MIPS_JUMP_SLOT, /* type */ + 0, /* rightshift */ + 4, /* size (0 = byte, 1 = short, 2 = long) */ + 64, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_MIPS_JUMP_SLOT", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + /* Swap in a MIPS 64-bit Rel reloc. */ static void @@ -2197,6 +2304,8 @@ static const struct elf_reloc_map mips16_reloc_map[] = { { BFD_RELOC_MIPS16_JMP, R_MIPS16_26 - R_MIPS16_min }, { BFD_RELOC_MIPS16_GPREL, R_MIPS16_GPREL - R_MIPS16_min }, + { BFD_RELOC_MIPS16_GOT16, R_MIPS16_GOT16 - R_MIPS16_min }, + { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min }, }; @@ -2233,6 +2342,10 @@ bfd_elf64_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &elf_mips_gnu_vtinherit_howto; case BFD_RELOC_VTABLE_ENTRY: return &elf_mips_gnu_vtentry_howto; + case BFD_RELOC_MIPS_COPY: + return &elf_mips_copy_howto; + case BFD_RELOC_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: bfd_set_error (bfd_error_bad_value); return NULL; @@ -2268,6 +2381,10 @@ bfd_elf64_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &elf_mips_gnu_rel16_s2; if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0) return &elf_mips_gnu_rela16_s2; + if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0) + return &elf_mips_copy_howto; + if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0) + return &elf_mips_jump_slot_howto; return NULL; } @@ -2288,6 +2405,10 @@ mips_elf64_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p) return &elf_mips_gnu_rela16_s2; else return &elf_mips_gnu_rel16_s2; + case R_MIPS_COPY: + return &elf_mips_copy_howto; + case R_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max) { @@ -3107,6 +3228,7 @@ const struct elf_size_info mips_elf64_size_info = #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_get_target_dtag _bfd_mips_elf_get_target_dtag #define elf_backend_adjust_dynamic_symbol \ _bfd_mips_elf_adjust_dynamic_symbol #define elf_backend_always_size_sections \ @@ -3128,7 +3250,6 @@ const struct elf_size_info mips_elf64_size_info = #define elf_backend_gc_sweep_hook _bfd_mips_elf_gc_sweep_hook #define elf_backend_copy_indirect_symbol \ _bfd_mips_elf_copy_indirect_symbol -#define elf_backend_hide_symbol _bfd_mips_elf_hide_symbol #define elf_backend_ignore_discarded_relocs \ _bfd_mips_elf_ignore_discarded_relocs #define elf_backend_mips_irix_compat elf64_mips_irix_compat @@ -3146,6 +3267,11 @@ const struct elf_size_info mips_elf64_size_info = #define elf_backend_may_use_rel_p 1 #define elf_backend_may_use_rela_p 1 #define elf_backend_default_use_rela_p 1 +#define elf_backend_rela_plts_and_copies_p 0 +#define elf_backend_plt_readonly 1 +#define elf_backend_plt_sym_val _bfd_mips_elf_plt_sym_val + +#define elf_backend_sign_extend_vma TRUE #define elf_backend_write_section _bfd_mips_elf_write_section @@ -3158,6 +3284,7 @@ const struct elf_size_info mips_elf64_size_info = #define bfd_elf64_set_section_contents _bfd_mips_elf_set_section_contents #define bfd_elf64_bfd_get_relocated_section_contents \ _bfd_elf_mips_get_relocated_section_contents +#define bfd_elf64_mkobject _bfd_mips_elf_mkobject #define bfd_elf64_bfd_link_hash_table_create \ _bfd_mips_elf_link_hash_table_create #define bfd_elf64_bfd_final_link _bfd_mips_elf_final_link diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c index c1d9a30..b090f23 100644 --- a/bfd/elf64-mmix.c +++ b/bfd/elf64-mmix.c @@ -1,5 +1,5 @@ /* MMIX-specific support for 64-bit ELF. - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by Hans-Peter Nilsson @@ -159,7 +159,7 @@ struct bpo_greg_section_info struct bpo_reloc_request *reloc_request; }; -static bfd_boolean mmix_elf_link_output_symbol_hook +static int mmix_elf_link_output_symbol_hook PARAMS ((struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *)); @@ -1978,15 +1978,12 @@ mmix_elf_check_relocs (abfd, info, sec, relocs) const Elf_Internal_Rela *relocs; { Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf64_External_Sym); - if (!elf_bad_symtab (abfd)) - sym_hashes_end -= symtab_hdr->sh_info; /* First we sort the relocs so that any register relocs come before expansion-relocs to the same insn. FIXME: Not done for mmo. */ @@ -2029,7 +2026,9 @@ mmix_elf_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_MMIX_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; } @@ -2083,7 +2082,7 @@ _bfd_mmix_check_all_relocs (abfd, info) the register section, and scale them down to correspond to the register number. */ -static bfd_boolean +static int mmix_elf_link_output_symbol_hook (info, name, sym, input_sec, h) struct bfd_link_info *info ATTRIBUTE_UNUSED; const char *name ATTRIBUTE_UNUSED; @@ -2100,7 +2099,7 @@ mmix_elf_link_output_symbol_hook (info, name, sym, input_sec, h) sym->st_shndx = SHN_REGISTER; } - return TRUE; + return 1; } /* We fake a register section that holds values that are register numbers. @@ -2558,7 +2557,7 @@ mmix_dump_bpo_gregs (link_info, pf) when the last such reloc is done, an index-array is sorted according to the values and iterated over to produce register numbers (indexed by 0 from the first allocated register number) and offsets for use in real - relocation. + relocation. (N.B.: Relocatable runs are handled, not just punted.) PUSHJ stub accounting is also done here. diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index c55f3e6..35757b8 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -1,6 +1,6 @@ /* PowerPC64-specific support for 64-bit ELF. - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. Written by Linus Nordberg, Swox AB , based on elf32-ppc.c by Ian Lance Taylor. Largely rewritten by Alan Modra @@ -92,10 +92,11 @@ static bfd_vma opd_entry_value #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_check_directives ppc64_elf_process_dot_syms #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_keep ppc64_elf_gc_keep #define elf_backend_gc_mark_dynamic_ref ppc64_elf_gc_mark_dynamic_ref #define elf_backend_gc_mark_hook ppc64_elf_gc_mark_hook #define elf_backend_gc_sweep_hook ppc64_elf_gc_sweep_hook @@ -111,6 +112,7 @@ static bfd_vma opd_entry_value #define elf_backend_finish_dynamic_sections ppc64_elf_finish_dynamic_sections #define elf_backend_link_output_symbol_hook ppc64_elf_output_symbol_hook #define elf_backend_special_sections ppc64_elf_special_sections +#define elf_backend_post_process_headers _bfd_elf_set_osabi /* The name of the dynamic interpreter. This is put in the .interp section. */ @@ -1234,7 +1236,7 @@ static reloc_howto_type ppc64_elf_howto_raw[] = { 0xfffc, /* dst_mask */ FALSE), /* pcrel_offset */ - /* Marker reloc for TLS. */ + /* Marker relocs for TLS. */ HOWTO (R_PPC64_TLS, 0, /* rightshift */ 2, /* size (0 = byte, 1 = short, 2 = long) */ @@ -1249,6 +1251,34 @@ static reloc_howto_type ppc64_elf_howto_raw[] = { 0, /* dst_mask */ FALSE), /* pcrel_offset */ + HOWTO (R_PPC64_TLSGD, + 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_PPC64_TLSGD", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_PPC64_TLSLD, + 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_PPC64_TLSLD", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + /* Computes the load module index of the load module that contains the definition of its TLS sym. */ HOWTO (R_PPC64_DTPMOD64, @@ -1844,6 +1874,95 @@ static reloc_howto_type ppc64_elf_howto_raw[] = { 0xffff, /* dst_mask */ FALSE), /* pcrel_offset */ + HOWTO (R_PPC64_JMP_IREL, /* type */ + 0, /* rightshift */ + 0, /* size (0=byte, 1=short, 2=long, 4=64 bits) */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + ppc64_elf_unhandled_reloc, /* special_function */ + "R_PPC64_JMP_IREL", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0, /* dst_mask */ + FALSE), /* pcrel_offset */ + + HOWTO (R_PPC64_IRELATIVE, /* type */ + 0, /* rightshift */ + 4, /* size (0=byte, 1=short, 2=long, 4=64 bits) */ + 64, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_PPC64_IRELATIVE", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + ONES (64), /* dst_mask */ + FALSE), /* pcrel_offset */ + + /* A 16 bit relative relocation. */ + HOWTO (R_PPC64_REL16, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_PPC64_REL16", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + /* A 16 bit relative relocation without overflow. */ + HOWTO (R_PPC64_REL16_LO, /* type */ + 0, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont,/* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_PPC64_REL16_LO", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + /* The high order 16 bits of a relative address. */ + HOWTO (R_PPC64_REL16_HI, /* type */ + 16, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_PPC64_REL16_HI", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + + /* The high order 16 bits of a relative address, plus 1 if the contents of + the low 16 bits, treated as a signed number, is negative. */ + HOWTO (R_PPC64_REL16_HA, /* type */ + 16, /* rightshift */ + 1, /* size (0 = byte, 1 = short, 2 = long) */ + 16, /* bitsize */ + TRUE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_dont, /* complain_on_overflow */ + ppc64_elf_ha_reloc, /* special_function */ + "R_PPC64_REL16_HA", /* name */ + FALSE, /* partial_inplace */ + 0, /* src_mask */ + 0xffff, /* dst_mask */ + TRUE), /* pcrel_offset */ + /* GNU extension to record C++ vtable hierarchy. */ HOWTO (R_PPC64_GNU_VTINHERIT, /* type */ 0, /* rightshift */ @@ -2030,6 +2149,10 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, break; case BFD_RELOC_PPC_TLS: r = R_PPC64_TLS; break; + case BFD_RELOC_PPC_TLSGD: r = R_PPC64_TLSGD; + break; + case BFD_RELOC_PPC_TLSLD: r = R_PPC64_TLSLD; + break; case BFD_RELOC_PPC_DTPMOD: r = R_PPC64_DTPMOD64; break; case BFD_RELOC_PPC_TPREL16: r = R_PPC64_TPREL16; @@ -2108,6 +2231,14 @@ ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, break; case BFD_RELOC_PPC64_DTPREL16_HIGHESTA: r = R_PPC64_DTPREL16_HIGHESTA; break; + case BFD_RELOC_16_PCREL: r = R_PPC64_REL16; + break; + case BFD_RELOC_LO16_PCREL: r = R_PPC64_REL16_LO; + break; + case BFD_RELOC_HI16_PCREL: r = R_PPC64_REL16_HI; + break; + case BFD_RELOC_HI16_S_PCREL: r = R_PPC64_REL16_HA; + break; case BFD_RELOC_VTABLE_INHERIT: r = R_PPC64_GNU_VTINHERIT; break; case BFD_RELOC_VTABLE_ENTRY: r = R_PPC64_GNU_VTENTRY; @@ -2424,30 +2555,17 @@ struct ppc64_elf_obj_tdata #define ppc64_tlsld_got(bfd) \ (&ppc64_elf_tdata (bfd)->tlsld_got) +#define is_ppc64_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_object_id (bfd) == PPC64_ELF_TDATA) + /* Override the generic function because we store some extras. */ static bfd_boolean ppc64_elf_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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. */ - -static bfd_boolean -is_ppc64_elf_target (const struct bfd_target *targ) -{ - extern const bfd_target bfd_elf64_powerpc_vec; - extern const bfd_target bfd_elf64_powerpcle_vec; - - return targ == &bfd_elf64_powerpc_vec || targ == &bfd_elf64_powerpcle_vec; + return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata), + PPC64_ELF_TDATA); } /* Fix bad default arch selected for a 64 bit input bfd when the @@ -2608,17 +2726,27 @@ struct _ppc64_elf_section_data { struct bfd_elf_section_data elf; - /* An array with one entry for each opd function descriptor. */ union { - /* Points to the function code section for local opd entries. */ - asection **opd_func_sec; - /* After editing .opd, adjust references to opd local syms. */ - 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 with one entry for each opd function descriptor. */ + struct _opd_sec_data + { + /* Points to the function code section for local opd entries. */ + asection **func_sec; + + /* After editing .opd, adjust references to opd local syms. */ + long *adjust; + } opd; + + /* An array for toc sections, indexed by offset/8. */ + struct _toc_sec_data + { + /* Specifies the relocation symbol index used at a given toc offset. */ + unsigned *symndx; + + /* And the relocation addend. */ + bfd_vma *add; + } toc; } u; enum _ppc64_sec_type sec_type:2; @@ -2648,18 +2776,17 @@ ppc64_elf_new_section_hook (bfd *abfd, asection *sec) return _bfd_elf_new_section_hook (abfd, sec); } -static void * +static struct _opd_sec_data * get_opd_info (asection * sec) { if (sec != NULL && ppc64_elf_section_data (sec) != NULL && ppc64_elf_section_data (sec)->sec_type == sec_opd) - return ppc64_elf_section_data (sec)->u.opd_adjust; + return &ppc64_elf_section_data (sec)->u.opd; return NULL; } /* Parameters for the qsort hook. */ -static asection *synthetic_opd; static bfd_boolean synthetic_relocatable; /* qsort comparison function for ppc64_elf_get_synthetic_symtab. */ @@ -2677,9 +2804,11 @@ compare_symbols (const void *ap, const void *bp) return 1; /* then .opd symbols. */ - if (a->section == synthetic_opd && b->section != synthetic_opd) + if (strcmp (a->section->name, ".opd") == 0 + && strcmp (b->section->name, ".opd") != 0) return -1; - if (a->section != synthetic_opd && b->section == synthetic_opd) + if (strcmp (a->section->name, ".opd") != 0 + && strcmp (b->section->name, ".opd") == 0) return 1; /* then other code symbols. */ @@ -2779,8 +2908,17 @@ sym_exists_at (asymbol **syms, long lo, long hi, int id, bfd_vma value) return NULL; } +static bfd_boolean +section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr) +{ + bfd_vma vma = *(bfd_vma *) ptr; + return ((section->flags & SEC_ALLOC) != 0 + && section->vma <= vma + && vma < section->vma + section->size); +} + /* Create synthetic symbols, effectively restoring "dot-symbol" function - entry syms. */ + entry syms. Also generate @plt symbols for the glink branch table. */ static long ppc64_elf_get_synthetic_symtab (bfd *abfd, @@ -2824,7 +2962,6 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, else memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms)); - synthetic_opd = opd; synthetic_relocatable = relocatable; qsort (syms, symcount, sizeof (*syms), compare_symbols); @@ -2842,7 +2979,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, } i = 0; - if (syms[i]->section == opd) + if (strcmp (syms[i]->section->name, ".opd") == 0) ++i; codesecsym = i; @@ -2859,7 +2996,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, secsymend = i; for (; i < symcount; ++i) - if (syms[i]->section != opd) + if (strcmp (syms[i]->section->name, ".opd") != 0) break; opdsymend = i; @@ -2870,8 +3007,6 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, symcount = i; count = 0; - if (opdsymend == secsymend) - goto done; if (relocatable) { @@ -2880,6 +3015,9 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, size_t size; long relcount; + if (opdsymend == secsymend) + goto done; + slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0; if (relcount == 0) @@ -2952,6 +3090,7 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, size_t len; *s = *syms[i]; + s->flags |= BSF_SYNTHETIC; s->section = sym->section; s->value = sym->value + r->addend; s->name = names; @@ -2959,14 +3098,22 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, len = strlen (syms[i]->name); memcpy (names, syms[i]->name, len + 1); names += len + 1; + /* Have udata.p point back to the original symbol this + synthetic symbol was derived from. */ + s->udata.p = syms[i]; s++; } } } else { + bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean); bfd_byte *contents; size_t size; + long plt_count = 0; + bfd_vma glink_vma = 0, resolv_vma = 0; + asection *dynamic, *glink = NULL, *relplt = NULL; + arelent *p; if (!bfd_malloc_and_get_section (abfd, opd, &contents)) { @@ -2984,6 +3131,10 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, { bfd_vma ent; + /* Ignore bogus symbols. */ + if (syms[i]->value > opd->size - 8) + continue; + ent = bfd_get_64 (abfd, contents + syms[i]->value); if (!sym_exists_at (syms, opdsymend, symcount, -1, ent)) { @@ -2993,16 +3144,97 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, } } + /* Get start of .glink stubs from DT_PPC64_GLINK. */ + if (dyn_count != 0 + && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL) + { + bfd_byte *dynbuf, *extdyn, *extdynend; + size_t extdynsize; + void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *); + + if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf)) + goto free_contents_and_exit; + + extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn; + swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in; + + extdyn = dynbuf; + extdynend = extdyn + dynamic->size; + for (; extdyn < extdynend; extdyn += extdynsize) + { + Elf_Internal_Dyn dyn; + (*swap_dyn_in) (abfd, extdyn, &dyn); + + if (dyn.d_tag == DT_NULL) + break; + + if (dyn.d_tag == DT_PPC64_GLINK) + { + /* The first glink stub starts at offset 32; see comment in + ppc64_elf_finish_dynamic_sections. */ + glink_vma = dyn.d_un.d_val + 32; + /* The .glink section usually does not survive the final + link; search for the section (usually .text) where the + glink stubs now reside. */ + glink = bfd_sections_find_if (abfd, section_covers_vma, + &glink_vma); + break; + } + } + + free (dynbuf); + } + + if (glink != NULL) + { + /* Determine __glink trampoline by reading the relative branch + from the first glink stub. */ + bfd_byte buf[4]; + if (bfd_get_section_contents (abfd, glink, buf, + glink_vma + 4 - glink->vma, 4)) + { + unsigned int insn = bfd_get_32 (abfd, buf); + insn ^= B_DOT; + if ((insn & ~0x3fffffc) == 0) + resolv_vma = glink_vma + 4 + (insn ^ 0x2000000) - 0x2000000; + } + + if (resolv_vma) + size += sizeof (asymbol) + sizeof ("__glink_PLTresolve"); + + relplt = bfd_get_section_by_name (abfd, ".rela.plt"); + if (relplt != NULL) + { + slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table; + if (! (*slurp_relocs) (abfd, relplt, dyn_syms, TRUE)) + goto free_contents_and_exit; + + plt_count = relplt->size / sizeof (Elf64_External_Rela); + size += plt_count * sizeof (asymbol); + + p = relplt->relocation; + for (i = 0; i < plt_count; i++, p++) + { + size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt"); + if (p->addend != 0) + size += sizeof ("+0x") - 1 + 16; + } + } + } + s = *ret = bfd_malloc (size); if (s == NULL) goto free_contents_and_exit; - names = (char *) (s + count); + names = (char *) (s + count + plt_count + (resolv_vma != 0)); for (i = secsymend; i < opdsymend; ++i) { bfd_vma ent; + if (syms[i]->value > opd->size - 8) + continue; + ent = bfd_get_64 (abfd, contents + syms[i]->value); if (!sym_exists_at (syms, opdsymend, symcount, -1, ent)) { @@ -3040,16 +3272,88 @@ ppc64_elf_get_synthetic_symtab (bfd *abfd, if ((sec->flags & SEC_CODE) != 0) s->section = sec; } + s->flags |= BSF_SYNTHETIC; s->value = ent - s->section->vma; s->name = names; *names++ = '.'; len = strlen (syms[i]->name); memcpy (names, syms[i]->name, len + 1); names += len + 1; + /* Have udata.p point back to the original symbol this + synthetic symbol was derived from. */ + s->udata.p = syms[i]; s++; } } free (contents); + + if (glink != NULL && relplt != NULL) + { + if (resolv_vma) + { + /* Add a symbol for the main glink trampoline. */ + memset (s, 0, sizeof *s); + s->the_bfd = abfd; + s->flags = BSF_GLOBAL | BSF_SYNTHETIC; + s->section = glink; + s->value = resolv_vma - glink->vma; + s->name = names; + memcpy (names, "__glink_PLTresolve", sizeof ("__glink_PLTresolve")); + names += sizeof ("__glink_PLTresolve"); + s++; + count++; + } + + /* FIXME: It would be very much nicer to put sym@plt on the + stub rather than on the glink branch table entry. The + objdump disassembler would then use a sensible symbol + name on plt calls. The difficulty in doing so is + a) finding the stubs, and, + b) matching stubs against plt entries, and, + c) there can be multiple stubs for a given plt entry. + + Solving (a) could be done by code scanning, but older + ppc64 binaries used different stubs to current code. + (b) is the tricky one since you need to known the toc + pointer for at least one function that uses a pic stub to + be able to calculate the plt address referenced. + (c) means gdb would need to set multiple breakpoints (or + find the glink branch itself) when setting breakpoints + for pending shared library loads. */ + p = relplt->relocation; + for (i = 0; i < plt_count; i++, p++) + { + size_t len; + + *s = **p->sym_ptr_ptr; + /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since + we are defining a symbol, ensure one of them is set. */ + if ((s->flags & BSF_LOCAL) == 0) + s->flags |= BSF_GLOBAL; + s->flags |= BSF_SYNTHETIC; + s->section = glink; + s->value = glink_vma - glink->vma; + s->name = names; + s->udata.p = NULL; + len = strlen ((*p->sym_ptr_ptr)->name); + memcpy (names, (*p->sym_ptr_ptr)->name, len); + names += len; + if (p->addend != 0) + { + memcpy (names, "+0x", sizeof ("+0x") - 1); + names += sizeof ("+0x") - 1; + bfd_sprintf_vma (abfd, names, p->addend); + names += strlen (names); + } + memcpy (names, "@plt", sizeof ("@plt")); + names += sizeof ("@plt"); + s++; + glink_vma += 8; + if (i >= 0x8000) + glink_vma += 4; + } + count += plt_count; + } } done: @@ -3161,7 +3465,8 @@ struct got_entry /* Unlike other ELF targets, we use separate GOT entries for the same symbol referenced from different input files. This is to support automatic multiple TOC/GOT sections, where the TOC base can vary - from one input file to another. + from one input file to another. FIXME: After group_sections we + ought to merge entries within the group. Point to the BFD owning this GOT entry. */ bfd *owner; @@ -3192,14 +3497,38 @@ struct plt_entry } plt; }; -/* Of those relocs that might be copied as dynamic relocs, this macro +/* Of those relocs that might be copied as dynamic relocs, this function selects those that must be copied when linking a shared library, even when the symbol is local. */ -#define MUST_BE_DYN_RELOC(RTYPE) \ - ((RTYPE) != R_PPC64_REL32 \ - && (RTYPE) != R_PPC64_REL64 \ - && (RTYPE) != R_PPC64_REL30) +static int +must_be_dyn_reloc (struct bfd_link_info *info, + enum elf_ppc64_reloc_type r_type) +{ + switch (r_type) + { + default: + return 1; + + case R_PPC64_REL32: + case R_PPC64_REL64: + case R_PPC64_REL30: + return 0; + + case R_PPC64_TPREL16: + case R_PPC64_TPREL16_LO: + case R_PPC64_TPREL16_HI: + case R_PPC64_TPREL16_HA: + case R_PPC64_TPREL16_DS: + case R_PPC64_TPREL16_LO_DS: + case R_PPC64_TPREL16_HIGHER: + case R_PPC64_TPREL16_HIGHERA: + case R_PPC64_TPREL16_HIGHEST: + case R_PPC64_TPREL16_HIGHESTA: + case R_PPC64_TPREL64: + return !info->executable; + } +} /* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid copying dynamic variables from a shared lib into an app's dynbss @@ -3298,6 +3627,7 @@ struct ppc_stub_hash_entry { /* The symbol table entry, if any, that this was derived from. */ struct ppc_link_hash_entry *h; + struct plt_entry *plt_ent; /* And the reloc addend that this was derived from. */ bfd_vma addend; @@ -3366,6 +3696,7 @@ struct ppc_link_hash_entry #define TLS_TLS 16 /* Any TLS reloc. */ #define TLS_EXPLICIT 32 /* Marks TOC section TLS relocs. */ #define TLS_TPRELGD 64 /* TPREL reloc resulting from GD->IE. */ +#define PLT_IFUNC 128 /* STT_GNU_IFUNC. */ char tls_mask; }; @@ -3418,6 +3749,8 @@ struct ppc_link_hash_table asection *got; asection *plt; asection *relplt; + asection *iplt; + asection *reliplt; asection *dynbss; asection *relbss; asection *glink; @@ -3438,6 +3771,9 @@ struct ppc_link_hash_table /* Set if we should emit symbols for stubs. */ unsigned int emit_stub_syms:1; + /* Set if __tls_get_addr optimization should not be done. */ + unsigned int no_tls_get_addr_opt:1; + /* Support for multiple toc sections. */ unsigned int no_multi_toc:1; unsigned int multi_toc_needed:1; @@ -3445,14 +3781,14 @@ struct ppc_link_hash_table /* Set on error. */ unsigned int stub_error:1; - /* Temp used by ppc64_elf_check_directives. */ + /* Temp used by ppc64_elf_process_dot_syms. */ unsigned int twiddled_syms:1; /* Incremented every time we size stubs. */ unsigned int stub_iteration; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; }; /* Rename some of the generic section flags to better document how they @@ -3842,6 +4178,21 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info) || ! bfd_set_section_alignment (dynobj, htab->glink, 3)) return FALSE; + flags = SEC_ALLOC | SEC_LINKER_CREATED; + htab->iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags); + if (htab->iplt == NULL + || ! bfd_set_section_alignment (dynobj, htab->iplt, 3)) + return FALSE; + + flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY + | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED); + htab->reliplt = bfd_make_section_anyway_with_flags (dynobj, + ".rela.iplt", + flags); + if (htab->reliplt == NULL + || ! bfd_set_section_alignment (dynobj, htab->reliplt, 3)) + return FALSE; + /* Create branch lookup table for plt_branch stubs. */ flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED); @@ -3859,7 +4210,7 @@ create_linkage_sections (bfd *dynobj, struct bfd_link_info *info) htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj, ".rela.branch_lt", flags); - if (!htab->relbrlt + if (htab->relbrlt == NULL || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3)) return FALSE; @@ -3876,6 +4227,9 @@ create_got_section (bfd *abfd, struct bfd_link_info *info) flagword flags; struct ppc_link_hash_table *htab = ppc_hash_table (info); + if (!is_ppc64_elf (abfd)) + return FALSE; + if (!htab->got) { if (! _bfd_elf_create_got_section (htab->elf.dynobj, info)) @@ -3931,6 +4285,29 @@ ppc64_elf_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) return TRUE; } +/* Follow indirect and warning symbol links. */ + +static inline struct bfd_link_hash_entry * +follow_link (struct bfd_link_hash_entry *h) +{ + while (h->type == bfd_link_hash_indirect + || h->type == bfd_link_hash_warning) + h = h->u.i.link; + return h; +} + +static inline struct elf_link_hash_entry * +elf_follow_link (struct elf_link_hash_entry *h) +{ + return (struct elf_link_hash_entry *) follow_link (&h->root); +} + +static inline struct ppc_link_hash_entry * +ppc_follow_link (struct ppc_link_hash_entry *h) +{ + return (struct ppc_link_hash_entry *) follow_link (&h->elf.root); +} + /* Merge PLT info on FROM with that on TO. */ static void @@ -4013,6 +4390,8 @@ ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info, edir->is_func |= eind->is_func; edir->is_func_descriptor |= eind->is_func_descriptor; edir->tls_mask |= eind->tls_mask; + if (eind->oh != NULL) + edir->oh = ppc_follow_link (eind->oh); /* If called to transfer flags for a weakdef during processing of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF. @@ -4082,7 +4461,7 @@ ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info, hash entry FH. Link the entries via their OH fields. */ static struct ppc_link_hash_entry * -get_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab) +lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab) { struct ppc_link_hash_entry *fdh = fh->oh; @@ -4092,16 +4471,16 @@ get_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab) fdh = (struct ppc_link_hash_entry *) elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE); - if (fdh != NULL) - { - fdh->is_func_descriptor = 1; - fdh->oh = fh; - fh->is_func = 1; - fh->oh = fdh; - } + if (fdh == NULL) + return fdh; + + fdh->is_func_descriptor = 1; + fdh->oh = fh; + fh->is_func = 1; + fh->oh = fdh; } - return fdh; + return ppc_follow_link (fdh); } /* Make a fake function descriptor sym for the code sym FH. */ @@ -4144,15 +4523,19 @@ make_fdh (struct bfd_link_info *info, static bfd_boolean ppc64_elf_add_symbol_hook (bfd *ibfd ATTRIBUTE_UNUSED, - struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct bfd_link_info *info, Elf_Internal_Sym *isym, const char **name ATTRIBUTE_UNUSED, flagword *flags ATTRIBUTE_UNUSED, asection **sec, bfd_vma *value ATTRIBUTE_UNUSED) { - if (*sec != NULL - && strcmp (bfd_get_section_name (ibfd, *sec), ".opd") == 0) + if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) + elf_tdata (info->output_bfd)->has_ifunc_symbols = TRUE; + else if (ELF_ST_TYPE (isym->st_info) == STT_FUNC) + ; + else if (*sec != NULL + && strcmp (bfd_get_section_name (ibfd, *sec), ".opd") == 0) isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC); return TRUE; @@ -4219,23 +4602,24 @@ add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info) abort (); htab = ppc_hash_table (info); - fdh = get_fdh (eh, htab); - if (fdh == NULL - && !info->relocatable - && (eh->elf.root.type == bfd_link_hash_undefined - || eh->elf.root.type == bfd_link_hash_undefweak) - && eh->elf.ref_regular) - { - /* 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 (info, eh); - if (fdh == NULL) - return FALSE; - else - fdh->elf.ref_regular = 1; + fdh = lookup_fdh (eh, htab); + if (fdh == NULL) + { + if (!info->relocatable + && (eh->elf.root.type == bfd_link_hash_undefined + || eh->elf.root.type == bfd_link_hash_undefweak) + && eh->elf.ref_regular) + { + /* 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 (info, eh); + if (fdh == NULL) + return FALSE; + fdh->elf.ref_regular = 1; + } } - else if (fdh != NULL) + else { unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1; unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1; @@ -4260,16 +4644,16 @@ add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info) /* Process list of dot-symbols we made in link_hash_newfunc. */ static bfd_boolean -ppc64_elf_check_directives (bfd *ibfd, struct bfd_link_info *info) +ppc64_elf_process_dot_syms (bfd *ibfd, struct bfd_link_info *info) { struct ppc_link_hash_table *htab; struct ppc_link_hash_entry **p, *eh; htab = ppc_hash_table (info); - if (!is_ppc64_elf_target (htab->elf.root.creator)) + if (!is_ppc64_elf (info->output_bfd)) return TRUE; - if (is_ppc64_elf_target (ibfd->xvec)) + if (is_ppc64_elf (ibfd)) { p = &htab->dot_syms; while ((eh = *p) != NULL) @@ -4310,25 +4694,28 @@ ppc64_elf_as_needed_cleanup (bfd *ibfd ATTRIBUTE_UNUSED, return TRUE; } -static bfd_boolean +static struct plt_entry ** update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr, unsigned long r_symndx, bfd_vma r_addend, int tls_type) { struct got_entry **local_got_ents = elf_local_got_ents (abfd); + struct plt_entry **local_plt; char *local_got_tls_masks; if (local_got_ents == NULL) { bfd_size_type size = symtab_hdr->sh_info; - size *= sizeof (*local_got_ents) + sizeof (*local_got_tls_masks); + size *= (sizeof (*local_got_ents) + + sizeof (*local_plt) + + sizeof (*local_got_tls_masks)); local_got_ents = bfd_zalloc (abfd, size); if (local_got_ents == NULL) - return FALSE; + return NULL; elf_local_got_ents (abfd) = local_got_ents; } - if ((tls_type & TLS_EXPLICIT) == 0) + if ((tls_type & (PLT_IFUNC | TLS_EXPLICIT)) == 0) { struct got_entry *ent; @@ -4353,17 +4740,19 @@ update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr, ent->got.refcount += 1; } - local_got_tls_masks = (char *) (local_got_ents + symtab_hdr->sh_info); + local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info); + local_got_tls_masks = (char *) (local_plt + symtab_hdr->sh_info); local_got_tls_masks[r_symndx] |= tls_type; - return TRUE; + + return local_plt + r_symndx; } static bfd_boolean -update_plt_info (bfd *abfd, struct ppc_link_hash_entry *eh, bfd_vma addend) +update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend) { struct plt_entry *ent; - for (ent = eh->elf.plt.plist; ent != NULL; ent = ent->next) + for (ent = *plist; ent != NULL; ent = ent->next) if (ent->addend == addend) break; if (ent == NULL) @@ -4372,19 +4761,28 @@ update_plt_info (bfd *abfd, struct ppc_link_hash_entry *eh, bfd_vma addend) ent = bfd_alloc (abfd, amt); if (ent == NULL) return FALSE; - ent->next = eh->elf.plt.plist; + ent->next = *plist; ent->addend = addend; ent->plt.refcount = 0; - eh->elf.plt.plist = ent; + *plist = ent; } ent->plt.refcount += 1; - eh->elf.needs_plt = 1; - if (eh->elf.root.root.string[0] == '.' - && eh->elf.root.root.string[1] != '\0') - eh->is_func = 1; return TRUE; } +static bfd_boolean +is_branch_reloc (enum elf_ppc64_reloc_type r_type) +{ + return (r_type == R_PPC64_REL24 + || r_type == R_PPC64_REL14 + || r_type == R_PPC64_REL14_BRTAKEN + || r_type == R_PPC64_REL14_BRNTAKEN + || r_type == R_PPC64_ADDR24 + || r_type == R_PPC64_ADDR14 + || r_type == R_PPC64_ADDR14_BRTAKEN + || r_type == R_PPC64_ADDR14_BRNTAKEN); +} + /* Look through the relocs for a section during the first phase, and calculate needed space in the global offset table, procedure linkage table, and dynamic reloc sections. */ @@ -4400,6 +4798,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Rela *rel_end; asection *sreloc; asection **opd_sym_map; + struct elf_link_hash_entry *tga, *dottga; if (info->relocatable) return TRUE; @@ -4413,8 +4812,14 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, if ((sec->flags & SEC_ALLOC) == 0) return TRUE; + BFD_ASSERT (is_ppc64_elf (abfd)); + htab = ppc_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr", + FALSE, FALSE, TRUE); + dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr", + FALSE, FALSE, TRUE); + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); sym_hashes_end = (sym_hashes @@ -4431,20 +4836,14 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, if we reference an .opd symbol (a function descriptor), we want to keep the function code symbol's section. This is easy for global symbols, but for local syms we need to keep - information about the associated function section. Later, if - edit_opd deletes entries, we'll use this array to adjust - local syms in .opd. */ - union opd_info { - asection *func_section; - long entry_adjust; - }; + information about the associated function section. */ bfd_size_type amt; - amt = sec->size * sizeof (union opd_info) / 8; + amt = sec->size * sizeof (*opd_sym_map) / 8; opd_sym_map = bfd_zalloc (abfd, amt); if (opd_sym_map == NULL) return FALSE; - ppc64_elf_section_data (sec)->u.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; } @@ -4459,8 +4858,9 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, unsigned long r_symndx; struct elf_link_hash_entry *h; enum elf_ppc64_reloc_type r_type; - int tls_type = 0; + int tls_type; struct _ppc64_elf_section_data *ppc64_sec; + struct plt_entry **ifunc; r_symndx = ELF64_R_SYM (rel->r_info); if (r_symndx < symtab_hdr->sh_info) @@ -4468,24 +4868,73 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, 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; + h = elf_follow_link (h); } - r_type = ELF64_R_TYPE (rel->r_info); - switch (r_type) + tls_type = 0; + ifunc = NULL; + if (h != NULL) { - case R_PPC64_GOT_TLSLD16: - case R_PPC64_GOT_TLSLD16_LO: - case R_PPC64_GOT_TLSLD16_HI: - case R_PPC64_GOT_TLSLD16_HA: - ppc64_tlsld_got (abfd)->refcount += 1; - tls_type = TLS_TLS | TLS_LD; - goto dogottls; - - case R_PPC64_GOT_TLSGD16: - case R_PPC64_GOT_TLSGD16_LO: + if (h->type == STT_GNU_IFUNC) + { + h->needs_plt = 1; + ifunc = &h->plt.plist; + } + } + else + { + Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) + { + ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx, + rel->r_addend, PLT_IFUNC); + if (ifunc == NULL) + return FALSE; + } + } + r_type = ELF64_R_TYPE (rel->r_info); + if (is_branch_reloc (r_type)) + { + if (h != NULL && (h == tga || h == dottga)) + { + if (rel != relocs + && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD + || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD)) + /* We have a new-style __tls_get_addr call with a marker + reloc. */ + ; + else + /* Mark this section as having an old-style call. */ + sec->has_tls_get_addr_call = 1; + } + + /* STT_GNU_IFUNC symbols must have a PLT entry. */ + if (ifunc != NULL + && !update_plt_info (abfd, ifunc, rel->r_addend)) + return FALSE; + } + + switch (r_type) + { + case R_PPC64_TLSGD: + case R_PPC64_TLSLD: + /* These special tls relocs tie a call to __tls_get_addr with + its parameter symbol. */ + break; + + case R_PPC64_GOT_TLSLD16: + case R_PPC64_GOT_TLSLD16_LO: + case R_PPC64_GOT_TLSLD16_HI: + case R_PPC64_GOT_TLSLD16_HA: + tls_type = TLS_TLS | TLS_LD; + goto dogottls; + + case R_PPC64_GOT_TLSGD16: + case R_PPC64_GOT_TLSGD16_LO: case R_PPC64_GOT_TLSGD16_HI: case R_PPC64_GOT_TLSGD16_HA: tls_type = TLS_TLS | TLS_GD; @@ -4495,7 +4944,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_GOT_TPREL16_LO_DS: case R_PPC64_GOT_TPREL16_HI: case R_PPC64_GOT_TPREL16_HA: - if (info->shared) + if (!info->executable) info->flags |= DF_STATIC_TLS; tls_type = TLS_TLS | TLS_TPREL; goto dogottls; @@ -4573,9 +5022,14 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, return FALSE; } else - if (!update_plt_info (abfd, (struct ppc_link_hash_entry *) h, - rel->r_addend)) - return FALSE; + { + if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend)) + return FALSE; + h->needs_plt = 1; + if (h->root.root.string[0] == '.' + && h->root.root.string[1] != '\0') + ((struct ppc_link_hash_entry *) h)->is_func = 1; + } break; /* The following relocations don't need to propagate the @@ -4600,6 +5054,12 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; /* Nor do these. */ + case R_PPC64_REL16: + case R_PPC64_REL16_LO: + case R_PPC64_REL16_HI: + case R_PPC64_REL16_HA: + break; + case R_PPC64_TOC16: case R_PPC64_TOC16_LO: case R_PPC64_TOC16_HI: @@ -4619,7 +5079,9 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_PPC64_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -4639,46 +5101,41 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, dest = h->root.u.def.section; } else - dest = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); + { + Elf_Internal_Sym *isym; + + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + dest = bfd_section_from_elf_index (abfd, isym->st_shndx); + } + if (dest != sec) ppc64_elf_section_data (sec)->has_14bit_branch = 1; } /* Fall through. */ case R_PPC64_REL24: - if (h != NULL) + if (h != NULL && ifunc == NULL) { /* We may need a .plt entry if the function this reloc refers to is in a shared lib. */ - if (!update_plt_info (abfd, (struct ppc_link_hash_entry *) h, - rel->r_addend)) + if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend)) return FALSE; - if (h == &htab->tls_get_addr->elf - || h == &htab->tls_get_addr_fd->elf) + h->needs_plt = 1; + if (h->root.root.string[0] == '.' + && h->root.root.string[1] != '\0') + ((struct ppc_link_hash_entry *) h)->is_func = 1; + if (h == tga || h == dottga) sec->has_tls_reloc = 1; - else if (htab->tls_get_addr == NULL - && CONST_STRNEQ (h->root.root.string, ".__tls_get_addr") - && (h->root.root.string[15] == 0 - || h->root.root.string[15] == '@')) - { - htab->tls_get_addr = (struct ppc_link_hash_entry *) h; - sec->has_tls_reloc = 1; - } - else if (htab->tls_get_addr_fd == NULL - && CONST_STRNEQ (h->root.root.string, "__tls_get_addr") - && (h->root.root.string[14] == 0 - || h->root.root.string[14] == '@')) - { - htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) h; - sec->has_tls_reloc = 1; - } } break; case R_PPC64_TPREL64: tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL; - if (info->shared) + if (!info->executable) info->flags |= DF_STATIC_TLS; goto dotlstoc; @@ -4716,23 +5173,30 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, ppc64_sec = ppc64_elf_section_data (sec); if (ppc64_sec->sec_type != sec_toc) { + bfd_size_type amt; + /* One extra to simplify get_tls_mask. */ - bfd_size_type amt = sec->size * sizeof (unsigned) / 8 + 1; - ppc64_sec->u.t_symndx = bfd_zalloc (abfd, amt); - if (ppc64_sec->u.t_symndx == NULL) + amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned); + ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt); + if (ppc64_sec->u.toc.symndx == NULL) + return FALSE; + amt = sec->size * sizeof (bfd_vma) / 8; + ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt); + if (ppc64_sec->u.toc.add == 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_sec->u.t_symndx[rel->r_offset / 8] = r_symndx; + ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx; + ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend; /* 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_sec->u.t_symndx[rel->r_offset / 8 + 1] = -1; + ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1; else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD)) - ppc64_sec->u.t_symndx[rel->r_offset / 8 + 1] = -2; + ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2; goto dodyn; case R_PPC64_TPREL16: @@ -4747,7 +5211,8 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_PPC64_TPREL16_HIGHESTA: if (info->shared) { - info->flags |= DF_STATIC_TLS; + if (!info->executable) + info->flags |= DF_STATIC_TLS; goto dodyn; } break; @@ -4761,7 +5226,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, { if (h->root.root.string[0] == '.' && h->root.root.string[1] != 0 - && get_fdh ((struct ppc_link_hash_entry *) h, htab)) + && lookup_fdh ((struct ppc_link_hash_entry *) h, htab)) ; else ((struct ppc_link_hash_entry *) h)->is_func = 1; @@ -4769,12 +5234,15 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, else { asection *s; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, sec, - r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; - else if (s != sec) + + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s != NULL && s != sec) opd_sym_map[rel->r_offset / 8] = s; } } @@ -4833,7 +5301,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, symbol. */ dodyn: if ((info->shared - && (MUST_BE_DYN_RELOC (r_type) + && (must_be_dyn_reloc (info, r_type) || (h != NULL && (! info->symbolic || h->root.type == bfd_link_hash_defweak @@ -4842,7 +5310,9 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, && !info->shared && h != NULL && (h->root.type == bfd_link_hash_defweak - || !h->def_regular))) + || !h->def_regular)) + || (!info->shared + && ifunc != NULL)) { struct ppc_dyn_relocs *p; struct ppc_dyn_relocs **head; @@ -4852,43 +5322,11 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, this reloc. */ if (sreloc == NULL) { - const char *name; - bfd *dynobj; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE); - if (! CONST_STRNEQ (name, ".rela") - || strcmp (bfd_get_section_name (abfd, sec), - name + 5) != 0) - { - (*_bfd_error_handler) - (_("%B: bad relocation section name `%s\'"), - abfd, name); - bfd_set_error (bfd_error_bad_value); - } - - dynobj = htab->elf.dynobj; - sreloc = bfd_get_section_by_name (dynobj, name); if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED - | SEC_ALLOC | SEC_LOAD); - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 3)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -4902,15 +5340,19 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct ppc_dyn_relocs **) vpp; } @@ -4929,7 +5371,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, } p->count += 1; - if (!MUST_BE_DYN_RELOC (r_type)) + if (!must_be_dyn_reloc (info, r_type)) p->pc_count += 1; } break; @@ -4982,6 +5424,8 @@ opd_entry_value (asection *opd_sec, return val; } + BFD_ASSERT (is_ppc64_elf (opd_bfd)); + relocs = ppc64_elf_tdata (opd_bfd)->opd_relocs; if (relocs == NULL) relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE); @@ -5000,7 +5444,8 @@ opd_entry_value (asection *opd_sec, hi = look; else { - Elf_Internal_Shdr *symtab_hdr = &elf_tdata (opd_bfd)->symtab_hdr; + Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd); + if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64 && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC) { @@ -5024,11 +5469,7 @@ opd_entry_value (asection *opd_sec, sym += symndx; val = sym->st_value; - sec = NULL; - if ((sym->st_shndx != SHN_UNDEF - && sym->st_shndx < SHN_LORESERVE) - || sym->st_shndx > SHN_HIRESERVE) - sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx); + sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx); BFD_ASSERT ((sec->flags & SEC_MERGE) == 0); } else @@ -5038,9 +5479,7 @@ opd_entry_value (asection *opd_sec, sym_hashes = elf_sym_hashes (opd_bfd); rh = sym_hashes[symndx - symtab_hdr->sh_info]; - while (rh->root.type == bfd_link_hash_indirect - || rh->root.type == bfd_link_hash_warning) - rh = ((struct elf_link_hash_entry *) rh->root.u.i.link); + rh = elf_follow_link (rh); BFD_ASSERT (rh->root.type == bfd_link_hash_defined || rh->root.type == bfd_link_hash_defweak); val = rh->root.u.def.value; @@ -5061,6 +5500,77 @@ opd_entry_value (asection *opd_sec, return val; } +/* If FDH is a function descriptor symbol, return the associated code + entry symbol if it is defined. Return NULL otherwise. */ + +static struct ppc_link_hash_entry * +defined_code_entry (struct ppc_link_hash_entry *fdh) +{ + if (fdh->is_func_descriptor) + { + struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh); + if (fh->elf.root.type == bfd_link_hash_defined + || fh->elf.root.type == bfd_link_hash_defweak) + return fh; + } + return NULL; +} + +/* If FH is a function code entry symbol, return the associated + function descriptor symbol if it is defined. Return NULL otherwise. */ + +static struct ppc_link_hash_entry * +defined_func_desc (struct ppc_link_hash_entry *fh) +{ + if (fh->oh != NULL + && fh->oh->is_func_descriptor) + { + struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh); + if (fdh->elf.root.type == bfd_link_hash_defined + || fdh->elf.root.type == bfd_link_hash_defweak) + return fdh; + } + return NULL; +} + +/* Mark all our entry sym sections, both opd and code section. */ + +static void +ppc64_elf_gc_keep (struct bfd_link_info *info) +{ + struct ppc_link_hash_table *htab = ppc_hash_table (info); + struct bfd_sym_chain *sym; + + for (sym = info->gc_sym_list; sym != NULL; sym = sym->next) + { + struct ppc_link_hash_entry *eh, *fh; + asection *sec; + + eh = (struct ppc_link_hash_entry *) + elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE); + if (eh == NULL) + continue; + if (eh->elf.root.type != bfd_link_hash_defined + && eh->elf.root.type != bfd_link_hash_defweak) + continue; + + fh = defined_code_entry (eh); + if (fh != NULL) + { + sec = fh->elf.root.u.def.section; + sec->flags |= SEC_KEEP; + } + else if (get_opd_info (eh->elf.root.u.def.section) != NULL + && opd_entry_value (eh->elf.root.u.def.section, + eh->elf.root.u.def.value, + &sec, NULL) != (bfd_vma) -1) + sec->flags |= SEC_KEEP; + + sec = eh->elf.root.u.def.section; + sec->flags |= SEC_KEEP; + } +} + /* Mark sections containing dynamically referenced symbols. When building shared libraries, we must assume that any visible symbol is referenced. */ @@ -5070,16 +5580,15 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf) { struct bfd_link_info *info = (struct bfd_link_info *) inf; struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h; + struct ppc_link_hash_entry *fdh; if (eh->elf.root.type == bfd_link_hash_warning) eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link; /* Dynamic linking info is on the func descriptor sym. */ - if (eh->oh != NULL - && eh->oh->is_func_descriptor - && (eh->oh->elf.root.type == bfd_link_hash_defined - || eh->oh->elf.root.type == bfd_link_hash_defweak)) - eh = eh->oh; + fdh = defined_func_desc (eh); + if (fdh != NULL) + eh = fdh; if ((eh->elf.root.type == bfd_link_hash_defined || eh->elf.root.type == bfd_link_hash_defweak) @@ -5090,15 +5599,18 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf) && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN))) { asection *code_sec; + struct ppc_link_hash_entry *fh; eh->elf.root.u.def.section->flags |= SEC_KEEP; /* Function descriptor syms cause the associated function code sym section to be marked. */ - if (eh->is_func_descriptor - && (eh->oh->elf.root.type == bfd_link_hash_defined - || eh->oh->elf.root.type == bfd_link_hash_defweak)) - eh->oh->elf.root.u.def.section->flags |= SEC_KEEP; + fh = defined_code_entry (eh); + if (fh != NULL) + { + code_sec = fh->elf.root.u.def.section; + code_sec->flags |= SEC_KEEP; + } else if (get_opd_info (eh->elf.root.u.def.section) != NULL && opd_entry_value (eh->elf.root.u.def.section, eh->elf.root.u.def.value, @@ -5114,53 +5626,13 @@ ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf) static asection * ppc64_elf_gc_mark_hook (asection *sec, - struct bfd_link_info *info, + struct bfd_link_info *info ATTRIBUTE_UNUSED, Elf_Internal_Rela *rel, struct elf_link_hash_entry *h, Elf_Internal_Sym *sym) { asection *rsec; - /* First mark all our entry sym sections. */ - if (info->gc_sym_list != NULL) - { - struct ppc_link_hash_table *htab = ppc_hash_table (info); - struct bfd_sym_chain *sym = info->gc_sym_list; - - info->gc_sym_list = NULL; - for (; sym != NULL; sym = sym->next) - { - struct ppc_link_hash_entry *eh; - - eh = (struct ppc_link_hash_entry *) - elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, FALSE); - if (eh == NULL) - continue; - if (eh->elf.root.type != bfd_link_hash_defined - && eh->elf.root.type != bfd_link_hash_defweak) - continue; - - if (eh->is_func_descriptor - && (eh->oh->elf.root.type == bfd_link_hash_defined - || eh->oh->elf.root.type == bfd_link_hash_defweak)) - rsec = eh->oh->elf.root.u.def.section; - else if (get_opd_info (eh->elf.root.u.def.section) != NULL - && opd_entry_value (eh->elf.root.u.def.section, - eh->elf.root.u.def.value, - &rsec, NULL) != (bfd_vma) -1) - ; - else - continue; - - if (!rsec->gc_mark) - _bfd_elf_gc_mark (info, rsec, ppc64_elf_gc_mark_hook); - - rsec = eh->elf.root.u.def.section; - if (!rsec->gc_mark) - _bfd_elf_gc_mark (info, rsec, ppc64_elf_gc_mark_hook); - } - } - /* Syms return NULL if we're marking .opd, so we avoid marking all function sections, as all functions are referenced in .opd. */ rsec = NULL; @@ -5170,7 +5642,7 @@ ppc64_elf_gc_mark_hook (asection *sec, if (h != NULL) { enum elf_ppc64_reloc_type r_type; - struct ppc_link_hash_entry *eh; + struct ppc_link_hash_entry *eh, *fh, *fdh; r_type = ELF64_R_TYPE (rel->r_info); switch (r_type) @@ -5185,34 +5657,25 @@ ppc64_elf_gc_mark_hook (asection *sec, case bfd_link_hash_defined: case bfd_link_hash_defweak: eh = (struct ppc_link_hash_entry *) h; - if (eh->oh != NULL - && eh->oh->is_func_descriptor - && (eh->oh->elf.root.type == bfd_link_hash_defined - || eh->oh->elf.root.type == bfd_link_hash_defweak)) - eh = eh->oh; + fdh = defined_func_desc (eh); + if (fdh != NULL) + eh = fdh; /* Function descriptor syms cause the associated function code sym section to be marked. */ - if (eh->is_func_descriptor - && (eh->oh->elf.root.type == bfd_link_hash_defined - || eh->oh->elf.root.type == bfd_link_hash_defweak)) + fh = defined_code_entry (eh); + if (fh != NULL) { /* They also mark their opd section. */ - if (!eh->elf.root.u.def.section->gc_mark) - _bfd_elf_gc_mark (info, eh->elf.root.u.def.section, - ppc64_elf_gc_mark_hook); + eh->elf.root.u.def.section->gc_mark = 1; - rsec = eh->oh->elf.root.u.def.section; + rsec = fh->elf.root.u.def.section; } else if (get_opd_info (eh->elf.root.u.def.section) != NULL && opd_entry_value (eh->elf.root.u.def.section, eh->elf.root.u.def.value, &rsec, NULL) != (bfd_vma) -1) - { - if (!eh->elf.root.u.def.section->gc_mark) - _bfd_elf_gc_mark (info, eh->elf.root.u.def.section, - ppc64_elf_gc_mark_hook); - } + eh->elf.root.u.def.section->gc_mark = 1; else rsec = h->root.u.def.section; break; @@ -5228,16 +5691,15 @@ ppc64_elf_gc_mark_hook (asection *sec, } else { - asection **opd_sym_section; + struct _opd_sec_data *opd; rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx); - opd_sym_section = get_opd_info (rsec); - if (opd_sym_section != NULL) + opd = get_opd_info (rsec); + if (opd != NULL && opd->func_sec != NULL) { - if (!rsec->gc_mark) - _bfd_elf_gc_mark (info, rsec, ppc64_elf_gc_mark_hook); + rsec->gc_mark = 1; - rsec = opd_sym_section[(sym->st_value + rel->r_addend) / 8]; + rsec = opd->func_sec[(sym->st_value + rel->r_addend) / 8]; } } @@ -5257,13 +5719,16 @@ ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, struct got_entry **local_got_ents; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + if ((sec->flags & SEC_ALLOC) == 0) return TRUE; elf_section_data (sec)->local_dynrel = NULL; htab = ppc_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_ents = elf_local_got_ents (abfd); @@ -5284,9 +5749,7 @@ ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, struct ppc_dyn_relocs *p; 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; + h = elf_follow_link (h); eh = (struct ppc_link_hash_entry *) h; for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next) @@ -5298,13 +5761,44 @@ ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, } } + if (is_branch_reloc (r_type)) + { + struct plt_entry **ifunc = NULL; + if (h != NULL) + { + if (h->type == STT_GNU_IFUNC) + ifunc = &h->plt.plist; + } + else if (local_got_ents != NULL) + { + struct plt_entry **local_plt = (struct plt_entry **) + (local_got_ents + symtab_hdr->sh_info); + char *local_got_tls_masks = (char *) + (local_plt + symtab_hdr->sh_info); + if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0) + ifunc = local_plt + r_symndx; + } + if (ifunc != NULL) + { + struct plt_entry *ent; + + for (ent = *ifunc; ent != NULL; ent = ent->next) + if (ent->addend == rel->r_addend) + break; + if (ent == NULL) + abort (); + if (ent->plt.refcount > 0) + ent->plt.refcount -= 1; + continue; + } + } + switch (r_type) { case R_PPC64_GOT_TLSLD16: case R_PPC64_GOT_TLSLD16_LO: case R_PPC64_GOT_TLSLD16_HI: case R_PPC64_GOT_TLSLD16_HA: - ppc64_tlsld_got (abfd)->refcount -= 1; tls_type = TLS_TLS | TLS_LD; goto dogot; @@ -5641,16 +6135,17 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf) in dynamic objects are handled elsewhere. */ if (fh->elf.root.type == bfd_link_hash_undefweak && fh->was_undefined - && (fh->oh->elf.root.type == bfd_link_hash_defined - || fh->oh->elf.root.type == bfd_link_hash_defweak) - && get_opd_info (fh->oh->elf.root.u.def.section) != NULL - && opd_entry_value (fh->oh->elf.root.u.def.section, - fh->oh->elf.root.u.def.value, + && (fdh = defined_func_desc (fh)) != NULL + && get_opd_info (fdh->elf.root.u.def.section) != NULL + && opd_entry_value (fdh->elf.root.u.def.section, + fdh->elf.root.u.def.value, &fh->elf.root.u.def.section, &fh->elf.root.u.def.value) != (bfd_vma) -1) { - fh->elf.root.type = fh->oh->elf.root.type; + fh->elf.root.type = fdh->elf.root.type; fh->elf.forced_local = 1; + fh->elf.def_regular = fdh->elf.def_regular; + fh->elf.def_dynamic = fdh->elf.def_dynamic; } /* If this is a function code symbol, transfer dynamic linking @@ -5669,14 +6164,9 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf) /* Find the corresponding function descriptor symbol. Create it as undefined if necessary. */ - fdh = get_fdh (fh, htab); - if (fdh != NULL) - while (fdh->elf.root.type == bfd_link_hash_indirect - || fdh->elf.root.type == bfd_link_hash_warning) - fdh = (struct ppc_link_hash_entry *) fdh->elf.root.u.i.link; - + fdh = lookup_fdh (fh, htab); if (fdh == NULL - && info->shared + && !info->executable && (fh->elf.root.type == bfd_link_hash_undefined || fh->elf.root.type == bfd_link_hash_undefweak)) { @@ -5709,7 +6199,7 @@ func_desc_adjust (struct elf_link_hash_entry *h, void *inf) if (fdh != NULL && !fdh->elf.forced_local - && (info->shared + && (!info->executable || fdh->elf.def_dynamic || fdh->elf.ref_dynamic || (fdh->elf.root.type == bfd_link_hash_undefweak @@ -5811,6 +6301,7 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info, /* Deal with function syms. */ if (h->type == STT_FUNC + || h->type == STT_GNU_IFUNC || h->needs_plt) { /* Clear procedure linkage table information for any symbol that @@ -5820,9 +6311,10 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info, if (ent->plt.refcount > 0) break; if (ent == NULL - || SYMBOL_CALLS_LOCAL (info, h) - || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT - && h->root.type == bfd_link_hash_undefweak)) + || (h->type != STT_GNU_IFUNC + && (SYMBOL_CALLS_LOCAL (info, h) + || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type == bfd_link_hash_undefweak)))) { h->plt.plist = NULL; h->needs_plt = 0; @@ -6002,7 +6494,7 @@ get_sym_h (struct elf_link_hash_entry **hp, unsigned long r_symndx, bfd *ibfd) { - Elf_Internal_Shdr *symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd); if (r_symndx >= symtab_hdr->sh_info) { @@ -6010,9 +6502,7 @@ get_sym_h (struct elf_link_hash_entry **hp, 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; + h = elf_follow_link (h); if (hp != NULL) *hp = h; @@ -6062,14 +6552,7 @@ get_sym_h (struct elf_link_hash_entry **hp, *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; - } + *symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx); if (tls_maskp != NULL) { @@ -6080,7 +6563,10 @@ get_sym_h (struct elf_link_hash_entry **hp, lgot_ents = elf_local_got_ents (ibfd); if (lgot_ents != NULL) { - char *lgot_masks = (char *) (lgot_ents + symtab_hdr->sh_info); + struct plt_entry **local_plt = (struct plt_entry **) + (lgot_ents + symtab_hdr->sh_info); + char *lgot_masks = (char *) + (local_plt + symtab_hdr->sh_info); tls_mask = &lgot_masks[r_symndx]; } *tls_maskp = tls_mask; @@ -6094,9 +6580,12 @@ get_sym_h (struct elf_link_hash_entry **hp, type suitable for optimization, and 1 otherwise. */ static int -get_tls_mask (char **tls_maskp, unsigned long *toc_symndx, +get_tls_mask (char **tls_maskp, + unsigned long *toc_symndx, + bfd_vma *toc_addend, Elf_Internal_Sym **locsymsp, - const Elf_Internal_Rela *rel, bfd *ibfd) + const Elf_Internal_Rela *rel, + bfd *ibfd) { unsigned long r_symndx; int next_r; @@ -6124,12 +6613,14 @@ 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)->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; + r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8]; + next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1]; if (toc_symndx != NULL) *toc_symndx = r_symndx; + if (toc_addend != NULL) + *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8]; + if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd)) + return 0; if ((h == NULL || ((h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak) @@ -6147,7 +6638,7 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED) { struct ppc_link_hash_entry *eh; asection *sym_sec; - long *opd_adjust; + struct _opd_sec_data *opd; if (h->root.type == bfd_link_hash_indirect) return TRUE; @@ -6164,10 +6655,10 @@ adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED) return TRUE; sym_sec = eh->elf.root.u.def.section; - opd_adjust = get_opd_info (sym_sec); - if (opd_adjust != NULL) + opd = get_opd_info (sym_sec); + if (opd != NULL && opd->adjust != NULL) { - long adjust = opd_adjust[eh->elf.root.u.def.value / 8]; + long adjust = opd->adjust[eh->elf.root.u.def.value / 8]; if (adjust == -1) { /* This entry has been deleted. */ @@ -6269,7 +6760,7 @@ dec_dynrel_count (bfd_vma r_info, } if ((info->shared - && (MUST_BE_DYN_RELOC (r_type) + && (must_be_dyn_reloc (info, r_type) || (h != NULL && (!info->symbolic || h->root.type == bfd_link_hash_defweak @@ -6309,7 +6800,7 @@ dec_dynrel_count (bfd_vma r_info, { if (p->sec == sec) { - if (!MUST_BE_DYN_RELOC (r_type)) + if (!must_be_dyn_reloc (info, r_type)) p->pc_count -= 1; p->count -= 1; if (p->count == 0) @@ -6333,7 +6824,6 @@ dec_dynrel_count (bfd_vma r_info, bfd_boolean ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, - bfd_boolean no_opd_opt, bfd_boolean non_overlapping) { bfd *ibfd; @@ -6348,8 +6838,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, Elf_Internal_Sym *local_syms; struct elf_link_hash_entry **sym_hashes; bfd_vma offset; - bfd_size_type amt; - long *opd_adjust; + struct _opd_sec_data *opd; bfd_boolean need_edit, add_aux_fields; bfd_size_type cnt_16b = 0; @@ -6357,24 +6846,6 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, if (sec == NULL || sec->size == 0) continue; - amt = sec->size * sizeof (long) / 8; - opd_adjust = get_opd_info (sec); - if (opd_adjust == NULL) - { - /* check_relocs hasn't been called. Must be a ld -r link - or --just-symbols object. */ - opd_adjust = bfd_alloc (obfd, amt); - if (opd_adjust == NULL) - return FALSE; - 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); - - if (no_opd_opt) - continue; - if (sec->sec_info_type == ELF_INFO_TYPE_JUST_SYMS) continue; @@ -6386,7 +6857,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, continue; local_syms = NULL; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); sym_hashes = elf_sym_hashes (ibfd); /* Read the relocations. */ @@ -6515,9 +6986,18 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, { Elf_Internal_Rela *write_rel; bfd_byte *rptr, *wptr; - bfd_byte *new_contents = NULL; + bfd_byte *new_contents; bfd_boolean skip; long opd_ent_size; + bfd_size_type amt; + + new_contents = NULL; + amt = sec->size * sizeof (long) / 8; + opd = &ppc64_elf_section_data (sec)->u.opd; + opd->adjust = bfd_zalloc (obfd, amt); + if (opd->adjust == NULL) + return FALSE; + ppc64_elf_section_data (sec)->sec_type = sec_opd; /* This seems a waste of time as input .opd sections are all zeros as generated by gcc, but I suppose there's no reason @@ -6590,8 +7070,8 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, if (h != NULL && h->root.root.string[0] == '.') { - fdh = get_fdh ((struct ppc_link_hash_entry *) h, - ppc_hash_table (info)); + fdh = lookup_fdh ((struct ppc_link_hash_entry *) h, + ppc_hash_table (info)); if (fdh != NULL && fdh->elf.root.type != bfd_link_hash_defined && fdh->elf.root.type != bfd_link_hash_defweak) @@ -6609,7 +7089,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, fdh->elf.root.u.def.value = 0; fdh->elf.root.u.def.section = sym_sec; } - opd_adjust[rel->r_offset / 8] = -1; + opd->adjust[rel->r_offset / 8] = -1; } else { @@ -6634,7 +7114,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, for the function descriptor sym which we don't have at the moment. So keep an array of adjustments. */ - opd_adjust[rel->r_offset / 8] + opd->adjust[rel->r_offset / 8] = (wptr - new_contents) - (rptr - sec->contents); if (wptr != rptr) @@ -6663,7 +7143,7 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, /* We need to adjust any reloc offsets to point to the new opd entries. While we're at it, we may as well remove redundant relocs. */ - rel->r_offset += opd_adjust[(offset - opd_ent_size) / 8]; + rel->r_offset += opd->adjust[(offset - opd_ent_size) / 8]; if (write_rel != rel) memcpy (write_rel, rel, sizeof (*rel)); ++write_rel; @@ -6741,41 +7221,120 @@ ppc64_elf_edit_opd (bfd *obfd, struct bfd_link_info *info, /* Set htab->tls_get_addr and call the generic ELF tls_setup function. */ asection * -ppc64_elf_tls_setup (bfd *obfd, struct bfd_link_info *info) +ppc64_elf_tls_setup (bfd *obfd, + struct bfd_link_info *info, + int no_tls_get_addr_opt) { struct ppc_link_hash_table *htab; htab = ppc_hash_table (info); + htab->tls_get_addr = ((struct ppc_link_hash_entry *) + elf_link_hash_lookup (&htab->elf, ".__tls_get_addr", + FALSE, FALSE, TRUE)); + /* Move dynamic linking info to the function descriptor sym. */ if (htab->tls_get_addr != NULL) - { - struct ppc_link_hash_entry *h = htab->tls_get_addr; + func_desc_adjust (&htab->tls_get_addr->elf, info); + htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *) + elf_link_hash_lookup (&htab->elf, "__tls_get_addr", + FALSE, FALSE, TRUE)); + if (!no_tls_get_addr_opt) + { + struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd; + + opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt", + FALSE, FALSE, TRUE); + if (opt != NULL) + func_desc_adjust (opt, info); + opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt", + FALSE, FALSE, TRUE); + if (opt_fd != NULL + && (opt_fd->root.type == bfd_link_hash_defined + || opt_fd->root.type == bfd_link_hash_defweak)) + { + /* If glibc supports an optimized __tls_get_addr call stub, + signalled by the presence of __tls_get_addr_opt, and we'll + be calling __tls_get_addr via a plt call stub, then + make __tls_get_addr point to __tls_get_addr_opt. */ + tga_fd = &htab->tls_get_addr_fd->elf; + if (htab->elf.dynamic_sections_created + && tga_fd != NULL + && (tga_fd->type == STT_FUNC + || tga_fd->needs_plt) + && !(SYMBOL_CALLS_LOCAL (info, tga_fd) + || (ELF_ST_VISIBILITY (tga_fd->other) != STV_DEFAULT + && tga_fd->root.type == bfd_link_hash_undefweak))) + { + struct plt_entry *ent; - while (h->elf.root.type == bfd_link_hash_indirect - || h->elf.root.type == bfd_link_hash_warning) - h = (struct ppc_link_hash_entry *) h->elf.root.u.i.link; + for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next) + if (ent->plt.refcount > 0) + break; + if (ent != NULL) + { + tga_fd->root.type = bfd_link_hash_indirect; + tga_fd->root.u.i.link = &opt_fd->root; + ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd); + if (opt_fd->dynindx != -1) + { + /* Use __tls_get_addr_opt in dynamic relocations. */ + opt_fd->dynindx = -1; + _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr, + opt_fd->dynstr_index); + if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd)) + return FALSE; + } + htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) opt_fd; + tga = &htab->tls_get_addr->elf; + if (opt != NULL && tga != NULL) + { + tga->root.type = bfd_link_hash_indirect; + tga->root.u.i.link = &opt->root; + ppc64_elf_copy_indirect_symbol (info, opt, tga); + _bfd_elf_link_hash_hide_symbol (info, opt, + tga->forced_local); + htab->tls_get_addr = (struct ppc_link_hash_entry *) opt; + } + htab->tls_get_addr_fd->oh = htab->tls_get_addr; + htab->tls_get_addr_fd->is_func_descriptor = 1; + if (htab->tls_get_addr != NULL) + { + htab->tls_get_addr->oh = htab->tls_get_addr_fd; + htab->tls_get_addr->is_func = 1; + } + } + } + } + else + no_tls_get_addr_opt = TRUE; + } + htab->no_tls_get_addr_opt = no_tls_get_addr_opt; + return _bfd_elf_tls_setup (obfd, info); +} - htab->tls_get_addr = h; +/* Return TRUE iff REL is a branch reloc with a global symbol matching + HASH1 or HASH2. */ - if (htab->tls_get_addr_fd == NULL - && h->oh != NULL - && h->oh->is_func_descriptor - && (h->oh->elf.root.type == bfd_link_hash_defined - || h->oh->elf.root.type == bfd_link_hash_defweak)) - htab->tls_get_addr_fd = h->oh; - } +static bfd_boolean +branch_reloc_hash_match (const bfd *ibfd, + const Elf_Internal_Rela *rel, + const struct ppc_link_hash_entry *hash1, + const struct ppc_link_hash_entry *hash2) +{ + Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd); + enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info); + unsigned int r_symndx = ELF64_R_SYM (rel->r_info); - if (htab->tls_get_addr_fd != NULL) + if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type)) { - struct ppc_link_hash_entry *h = htab->tls_get_addr_fd; - - while (h->elf.root.type == bfd_link_hash_indirect - || h->elf.root.type == bfd_link_hash_warning) - h = (struct ppc_link_hash_entry *) h->elf.root.u.i.link; + struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd); + struct elf_link_hash_entry *h; - htab->tls_get_addr_fd = h; + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + h = elf_follow_link (h); + if (h == &hash1->elf || h == &hash2->elf) + return TRUE; } - - return _bfd_elf_tls_setup (obfd, info); + return FALSE; } /* Run through all the TLS relocs looking for optimization @@ -6791,8 +7350,9 @@ ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) bfd *ibfd; asection *sec; struct ppc_link_hash_table *htab; + int pass; - if (info->relocatable || info->shared) + if (info->relocatable || !info->executable) return TRUE; htab = ppc_hash_table (info); @@ -6802,318 +7362,355 @@ ppc64_elf_tls_optimize (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) asection *toc = bfd_get_section_by_name (ibfd, ".toc"); unsigned char *toc_ref = NULL; - /* Look at all the sections for this file, with TOC last. */ - for (sec = (ibfd->sections == toc && toc && toc->next ? toc->next - : ibfd->sections); - sec != NULL; - sec = (sec == toc ? NULL - : sec->next == NULL ? toc - : sec->next == toc && toc->next ? toc->next - : sec->next)) - if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section)) - { - Elf_Internal_Rela *relstart, *rel, *relend; - int expecting_tls_get_addr; - long toc_ref_index = 0; - - /* Read the relocations. */ - relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, - info->keep_memory); - if (relstart == NULL) - return FALSE; + /* Look at all the sections for this file. Make two passes over + the relocs. On the first pass, mark toc entries involved + with tls relocs, and check that tls relocs involved in + setting up a tls_get_addr call are indeed followed by such a + call. If they are not, exclude them from the optimizations + done on the second pass. */ + for (pass = 0; pass < 2; ++pass) + for (sec = ibfd->sections; sec != NULL; sec = sec->next) + if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section)) + { + Elf_Internal_Rela *relstart, *rel, *relend; - expecting_tls_get_addr = 0; - relend = relstart + sec->reloc_count; - for (rel = relstart; rel < relend; rel++) - { - enum elf_ppc64_reloc_type r_type; - unsigned long r_symndx; - struct elf_link_hash_entry *h; - Elf_Internal_Sym *sym; - asection *sym_sec; - char *tls_mask; - char tls_set, tls_clear, tls_type = 0; - bfd_vma value; - bfd_boolean ok_tprel, is_local; + /* Read the relocations. */ + relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, + info->keep_memory); + if (relstart == NULL) + return FALSE; - r_symndx = ELF64_R_SYM (rel->r_info); - if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms, - r_symndx, ibfd)) - { - err_free_rel: - if (elf_section_data (sec)->relocs != relstart) - free (relstart); - if (toc_ref != NULL) - free (toc_ref); - if (locsyms != NULL - && (elf_tdata (ibfd)->symtab_hdr.contents - != (unsigned char *) locsyms)) - free (locsyms); - return FALSE; - } + relend = relstart + sec->reloc_count; + for (rel = relstart; rel < relend; rel++) + { + enum elf_ppc64_reloc_type r_type; + unsigned long r_symndx; + struct elf_link_hash_entry *h; + Elf_Internal_Sym *sym; + asection *sym_sec; + char *tls_mask; + char tls_set, tls_clear, tls_type = 0; + bfd_vma value; + bfd_boolean ok_tprel, is_local; + long toc_ref_index = 0; + int expecting_tls_get_addr = 0; - if (h != NULL) - { - if (h->root.type != bfd_link_hash_defined - && h->root.type != bfd_link_hash_defweak) - continue; - value = h->root.u.def.value; - } - else - /* Symbols referenced by TLS relocs must be of type - STT_TLS. So no need for .opd local sym adjust. */ - value = sym->st_value; - - ok_tprel = FALSE; - is_local = FALSE; - if (h == NULL - || !h->def_dynamic) - { - is_local = TRUE; - value += sym_sec->output_offset; - value += sym_sec->output_section->vma; - value -= htab->elf.tls_sec->vma; - ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31) - < (bfd_vma) 1 << 32); - } + r_symndx = ELF64_R_SYM (rel->r_info); + if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms, + r_symndx, ibfd)) + { + err_free_rel: + if (elf_section_data (sec)->relocs != relstart) + free (relstart); + if (toc_ref != NULL) + free (toc_ref); + if (locsyms != NULL + && (elf_symtab_hdr (ibfd).contents + != (unsigned char *) locsyms)) + free (locsyms); + return FALSE; + } - r_type = ELF64_R_TYPE (rel->r_info); - switch (r_type) - { - case R_PPC64_GOT_TLSLD16: - case R_PPC64_GOT_TLSLD16_LO: - case R_PPC64_GOT_TLSLD16_HI: - case R_PPC64_GOT_TLSLD16_HA: - /* These relocs should never be against a symbol - defined in a shared lib. Leave them alone if - that turns out to be the case. */ - ppc64_tlsld_got (ibfd)->refcount -= 1; - if (!is_local) - continue; + if (h != NULL) + { + if (h->root.type != bfd_link_hash_defined + && h->root.type != bfd_link_hash_defweak) + continue; + value = h->root.u.def.value; + } + else + /* Symbols referenced by TLS relocs must be of type + STT_TLS. So no need for .opd local sym adjust. */ + value = sym->st_value; + + ok_tprel = FALSE; + is_local = FALSE; + if (h == NULL + || !h->def_dynamic) + { + is_local = TRUE; + value += sym_sec->output_offset; + value += sym_sec->output_section->vma; + value -= htab->elf.tls_sec->vma; + ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31) + < (bfd_vma) 1 << 32); + } - /* LD -> LE */ - tls_set = 0; - tls_clear = TLS_LD; - tls_type = TLS_TLS | TLS_LD; - expecting_tls_get_addr = 1; - break; + r_type = ELF64_R_TYPE (rel->r_info); + switch (r_type) + { + case R_PPC64_GOT_TLSLD16: + case R_PPC64_GOT_TLSLD16_LO: + expecting_tls_get_addr = 1; + /* Fall thru */ + + case R_PPC64_GOT_TLSLD16_HI: + case R_PPC64_GOT_TLSLD16_HA: + /* These relocs should never be against a symbol + defined in a shared lib. Leave them alone if + that turns out to be the case. */ + if (!is_local) + continue; - case R_PPC64_GOT_TLSGD16: - case R_PPC64_GOT_TLSGD16_LO: - case R_PPC64_GOT_TLSGD16_HI: - case R_PPC64_GOT_TLSGD16_HA: - if (ok_tprel) - /* GD -> LE */ + /* LD -> LE */ tls_set = 0; - else - /* GD -> IE */ - tls_set = TLS_TLS | TLS_TPRELGD; - tls_clear = TLS_GD; - tls_type = TLS_TLS | TLS_GD; - expecting_tls_get_addr = 1; - break; + tls_clear = TLS_LD; + tls_type = TLS_TLS | TLS_LD; + break; - case R_PPC64_GOT_TPREL16_DS: - case R_PPC64_GOT_TPREL16_LO_DS: - case R_PPC64_GOT_TPREL16_HI: - case R_PPC64_GOT_TPREL16_HA: - expecting_tls_get_addr = 0; - if (ok_tprel) - { - /* IE -> LE */ + case R_PPC64_GOT_TLSGD16: + case R_PPC64_GOT_TLSGD16_LO: + expecting_tls_get_addr = 1; + /* Fall thru */ + + case R_PPC64_GOT_TLSGD16_HI: + case R_PPC64_GOT_TLSGD16_HA: + if (ok_tprel) + /* GD -> LE */ tls_set = 0; - tls_clear = TLS_TPREL; - tls_type = TLS_TLS | TLS_TPREL; - break; - } - else - continue; + else + /* GD -> IE */ + tls_set = TLS_TLS | TLS_TPRELGD; + tls_clear = TLS_GD; + tls_type = TLS_TLS | TLS_GD; + break; - case R_PPC64_REL14: - case R_PPC64_REL14_BRTAKEN: - case R_PPC64_REL14_BRNTAKEN: - case R_PPC64_REL24: - if (h != NULL - && (h == &htab->tls_get_addr->elf - || h == &htab->tls_get_addr_fd->elf)) - { - if (!expecting_tls_get_addr - && rel != relstart - && ((ELF64_R_TYPE (rel[-1].r_info) - == R_PPC64_TOC16) - || (ELF64_R_TYPE (rel[-1].r_info) - == R_PPC64_TOC16_LO))) - { - /* Check for toc tls entries. */ - char *toc_tls; - int retval; - - retval = get_tls_mask (&toc_tls, NULL, &locsyms, - rel - 1, ibfd); - if (retval == 0) - goto err_free_rel; - if (retval > 1 && toc_tls != NULL) - { - expecting_tls_get_addr = 1; - if (toc_ref != NULL) - toc_ref[toc_ref_index] = 1; - } - } + case R_PPC64_GOT_TPREL16_DS: + case R_PPC64_GOT_TPREL16_LO_DS: + case R_PPC64_GOT_TPREL16_HI: + case R_PPC64_GOT_TPREL16_HA: + if (ok_tprel) + { + /* IE -> LE */ + tls_set = 0; + tls_clear = TLS_TPREL; + tls_type = TLS_TLS | TLS_TPREL; + break; + } + continue; - if (expecting_tls_get_addr) - { - struct plt_entry *ent; - for (ent = h->plt.plist; ent; ent = ent->next) - if (ent->addend == 0) - { - if (ent->plt.refcount > 0) - ent->plt.refcount -= 1; - break; - } - } - } - expecting_tls_get_addr = 0; - continue; + case R_PPC64_TOC16: + case R_PPC64_TOC16_LO: + case R_PPC64_TLS: + case R_PPC64_TLSGD: + case R_PPC64_TLSLD: + if (sym_sec == NULL || sym_sec != toc) + continue; - case R_PPC64_TOC16: - case R_PPC64_TOC16_LO: - case R_PPC64_TLS: - expecting_tls_get_addr = 0; - if (sym_sec == toc && toc != NULL) - { - /* Mark this toc entry as referenced by a TLS - code sequence. We can do that now in the - case of R_PPC64_TLS, and after checking for - tls_get_addr for the TOC16 relocs. */ - if (toc_ref == NULL) - { - toc_ref = bfd_zmalloc (toc->size / 8); - if (toc_ref == NULL) - goto err_free_rel; - } - if (h != NULL) - value = h->root.u.def.value; - else - value = sym->st_value; - value += rel->r_addend; - BFD_ASSERT (value < toc->size && value % 8 == 0); - toc_ref_index = value / 8; - if (r_type == R_PPC64_TLS) + /* Mark this toc entry as referenced by a TLS + code sequence. We can do that now in the + case of R_PPC64_TLS, and after checking for + tls_get_addr for the TOC16 relocs. */ + if (toc_ref == NULL) + { + toc_ref = bfd_zmalloc (toc->size / 8); + if (toc_ref == NULL) + goto err_free_rel; + } + if (h != NULL) + value = h->root.u.def.value; + else + value = sym->st_value; + value += rel->r_addend; + BFD_ASSERT (value < toc->size && value % 8 == 0); + toc_ref_index = value / 8; + if (r_type == R_PPC64_TLS + || r_type == R_PPC64_TLSGD + || r_type == R_PPC64_TLSLD) + { toc_ref[toc_ref_index] = 1; - } - continue; + continue; + } - case R_PPC64_TPREL64: - expecting_tls_get_addr = 0; - if (sec != toc - || toc_ref == NULL - || !toc_ref[rel->r_offset / 8]) - continue; - if (ok_tprel) - { - /* IE -> LE */ - tls_set = TLS_EXPLICIT; - tls_clear = TLS_TPREL; - break; - } - else + if (pass != 0 && toc_ref[toc_ref_index] == 0) + continue; + + tls_set = 0; + tls_clear = 0; + expecting_tls_get_addr = 2; + break; + + case R_PPC64_TPREL64: + if (pass == 0 + || sec != toc + || toc_ref == NULL + || !toc_ref[rel->r_offset / 8]) + continue; + if (ok_tprel) + { + /* IE -> LE */ + tls_set = TLS_EXPLICIT; + tls_clear = TLS_TPREL; + break; + } continue; - case R_PPC64_DTPMOD64: - expecting_tls_get_addr = 0; - if (sec != toc - || toc_ref == NULL - || !toc_ref[rel->r_offset / 8]) + case R_PPC64_DTPMOD64: + if (pass == 0 + || sec != toc + || toc_ref == NULL + || !toc_ref[rel->r_offset / 8]) + continue; + if (rel + 1 < relend + && (rel[1].r_info + == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)) + && rel[1].r_offset == rel->r_offset + 8) + { + if (ok_tprel) + /* GD -> LE */ + tls_set = TLS_EXPLICIT | TLS_GD; + else + /* GD -> IE */ + tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD; + tls_clear = TLS_GD; + } + else + { + if (!is_local) + continue; + + /* LD -> LE */ + tls_set = TLS_EXPLICIT; + tls_clear = TLS_LD; + } + break; + + default: continue; - if (rel + 1 < relend - && (rel[1].r_info - == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)) - && rel[1].r_offset == rel->r_offset + 8) - { - if (ok_tprel) - /* GD -> LE */ - tls_set = TLS_EXPLICIT | TLS_GD; - else - /* GD -> IE */ - tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD; - tls_clear = TLS_GD; - } - else - { - if (!is_local) + } + + if (pass == 0) + { + if (!expecting_tls_get_addr + || !sec->has_tls_get_addr_call) + continue; + + if (rel + 1 < relend + && branch_reloc_hash_match (ibfd, rel + 1, + htab->tls_get_addr, + htab->tls_get_addr_fd)) + { + if (expecting_tls_get_addr == 2) + { + /* Check for toc tls entries. */ + char *toc_tls; + int retval; + + retval = get_tls_mask (&toc_tls, NULL, NULL, + &locsyms, + rel, ibfd); + if (retval == 0) + goto err_free_rel; + if (retval > 1 && toc_tls != NULL) + toc_ref[toc_ref_index] = 1; + } continue; + } - /* LD -> LE */ - tls_set = TLS_EXPLICIT; - tls_clear = TLS_LD; - } - break; + if (expecting_tls_get_addr != 1) + continue; - default: - expecting_tls_get_addr = 0; + /* Uh oh, we didn't find the expected call. We + could just mark this symbol to exclude it + from tls optimization but it's safer to skip + the entire section. */ + sec->has_tls_reloc = 0; + break; + } + + if (expecting_tls_get_addr && htab->tls_get_addr != NULL) + { + struct plt_entry *ent; + for (ent = htab->tls_get_addr->elf.plt.plist; + ent != NULL; + ent = ent->next) + if (ent->addend == 0) + { + if (ent->plt.refcount > 0) + { + ent->plt.refcount -= 1; + expecting_tls_get_addr = 0; + } + break; + } + } + + if (expecting_tls_get_addr && htab->tls_get_addr_fd != NULL) + { + struct plt_entry *ent; + for (ent = htab->tls_get_addr_fd->elf.plt.plist; + ent != NULL; + ent = ent->next) + if (ent->addend == 0) + { + if (ent->plt.refcount > 0) + ent->plt.refcount -= 1; + break; + } + } + + if (tls_clear == 0) continue; - } - if ((tls_set & TLS_EXPLICIT) == 0) - { - struct got_entry *ent; + if ((tls_set & TLS_EXPLICIT) == 0) + { + struct got_entry *ent; - /* Adjust got entry for this reloc. */ - if (h != NULL) - ent = h->got.glist; - else - ent = elf_local_got_ents (ibfd)[r_symndx]; + /* Adjust got entry for this reloc. */ + if (h != NULL) + ent = h->got.glist; + else + ent = elf_local_got_ents (ibfd)[r_symndx]; - for (; ent != NULL; ent = ent->next) - if (ent->addend == rel->r_addend - && ent->owner == ibfd - && ent->tls_type == tls_type) - break; - if (ent == NULL) - abort (); + for (; ent != NULL; ent = ent->next) + if (ent->addend == rel->r_addend + && ent->owner == ibfd + && ent->tls_type == tls_type) + break; + if (ent == NULL) + abort (); - if (tls_set == 0) - { - /* We managed to get rid of a got entry. */ - if (ent->got.refcount > 0) - ent->got.refcount -= 1; - } - } - else - { - /* If we got rid of a DTPMOD/DTPREL reloc pair then - we'll lose one or two dyn relocs. */ - if (!dec_dynrel_count (rel->r_info, sec, info, - NULL, h, sym_sec)) - return FALSE; + if (tls_set == 0) + { + /* We managed to get rid of a got entry. */ + if (ent->got.refcount > 0) + ent->got.refcount -= 1; + } + } + else + { + /* If we got rid of a DTPMOD/DTPREL reloc pair then + we'll lose one or two dyn relocs. */ + if (!dec_dynrel_count (rel->r_info, sec, info, + NULL, h, sym_sec)) + return FALSE; - if (tls_set == (TLS_EXPLICIT | TLS_GD)) - { - if (!dec_dynrel_count ((rel + 1)->r_info, sec, info, - NULL, h, sym_sec)) - return FALSE; - } - } + if (tls_set == (TLS_EXPLICIT | TLS_GD)) + { + if (!dec_dynrel_count ((rel + 1)->r_info, sec, info, + NULL, h, sym_sec)) + return FALSE; + } + } - *tls_mask |= tls_set; - *tls_mask &= ~tls_clear; - } + *tls_mask |= tls_set; + *tls_mask &= ~tls_clear; + } - if (elf_section_data (sec)->relocs != relstart) - free (relstart); - } + if (elf_section_data (sec)->relocs != relstart) + free (relstart); + } if (toc_ref != NULL) free (toc_ref); if (locsyms != NULL - && (elf_tdata (ibfd)->symtab_hdr.contents - != (unsigned char *) locsyms)) + && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms)) { if (!info->keep_memory) free (locsyms); else - elf_tdata (ibfd)->symtab_hdr.contents = (unsigned char *) locsyms; + elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms; } } return TRUE; @@ -7201,7 +7798,7 @@ ppc64_elf_edit_toc (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) continue; local_syms = NULL; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); sym_hashes = elf_sym_hashes (ibfd); /* Look at sections dropped from the final link. */ @@ -7529,10 +8126,7 @@ ppc64_elf_edit_toc (bfd *obfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) for (sym = local_syms; sym < local_syms + symtab_hdr->sh_info; ++sym) - if (sym->st_shndx != SHN_UNDEF - && (sym->st_shndx < SHN_LORESERVE - || sym->st_shndx > SHN_HIRESERVE) - && sym->st_value != 0 + if (sym->st_value != 0 && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc) { if (skip[sym->st_value >> 3] != (unsigned long) -1) @@ -7597,37 +8191,49 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) info = (struct bfd_link_info *) inf; htab = ppc_hash_table (info); - if (htab->elf.dynamic_sections_created - && h->dynindx != -1 - && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + if ((htab->elf.dynamic_sections_created + && h->dynindx != -1 + && WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, info->shared, h)) + || h->type == STT_GNU_IFUNC) { struct plt_entry *pent; bfd_boolean doneone = FALSE; for (pent = h->plt.plist; pent != NULL; pent = pent->next) if (pent->plt.refcount > 0) { - /* If this is the first .plt entry, make room for the special - first entry. */ - s = htab->plt; - if (s->size == 0) - s->size += PLT_INITIAL_ENTRY_SIZE; - - pent->plt.offset = s->size; - - /* Make room for this entry. */ - s->size += PLT_ENTRY_SIZE; - - /* Make room for the .glink code. */ - s = htab->glink; - if (s->size == 0) - s->size += GLINK_CALL_STUB_SIZE; - /* We need bigger stubs past index 32767. */ - if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4) - s->size += 4; - s->size += 2*4; - - /* We also need to make an entry in the .rela.plt section. */ - s = htab->relplt; + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + { + s = htab->iplt; + pent->plt.offset = s->size; + s->size += PLT_ENTRY_SIZE; + s = htab->reliplt; + } + else + { + /* If this is the first .plt entry, make room for the special + first entry. */ + s = htab->plt; + if (s->size == 0) + s->size += PLT_INITIAL_ENTRY_SIZE; + + pent->plt.offset = s->size; + + /* Make room for this entry. */ + s->size += PLT_ENTRY_SIZE; + + /* Make room for the .glink code. */ + s = htab->glink; + if (s->size == 0) + s->size += GLINK_CALL_STUB_SIZE; + /* We need bigger stubs past index 32767. */ + if (s->size >= GLINK_CALL_STUB_SIZE + 32768*2*4) + s->size += 4; + s->size += 2*4; + + /* We also need to make an entry in the .rela.plt section. */ + s = htab->relplt; + } s->size += sizeof (Elf64_External_Rela); doneone = TRUE; } @@ -7675,12 +8281,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (gent->got.refcount > 0) { bfd_boolean dyn; + asection *rsec; /* Make sure this symbol is output as a dynamic symbol. Undefined weak syms won't yet be marked as dynamic, nor will all TLS symbols. */ if (h->dynindx == -1 - && !h->forced_local) + && !h->forced_local + && h->type != STT_GNU_IFUNC + && htab->elf.dynamic_sections_created) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) return FALSE; @@ -7689,28 +8298,38 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if ((gent->tls_type & TLS_LD) != 0 && !h->def_dynamic) { - gent->got.offset = ppc64_tlsld_got (gent->owner)->offset; + ppc64_tlsld_got (gent->owner)->refcount += 1; + gent->got.offset = (bfd_vma) -1; continue; } + if (!is_ppc64_elf (gent->owner)) + continue; + s = ppc64_elf_tdata (gent->owner)->got; gent->got.offset = s->size; s->size += (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)) ? 16 : 8; dyn = htab->elf.dynamic_sections_created; + rsec = NULL; if ((info->shared || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak)) - ppc64_elf_tdata (gent->owner)->relgot->size - += (gent->tls_type & eh->tls_mask & TLS_GD - ? 2 * sizeof (Elf64_External_Rela) - : sizeof (Elf64_External_Rela)); + rsec = ppc64_elf_tdata (gent->owner)->relgot; + else if (h->type == STT_GNU_IFUNC) + rsec = htab->reliplt; + if (rsec != NULL) + rsec->size += (gent->tls_type & eh->tls_mask & TLS_GD + ? 2 * sizeof (Elf64_External_Rela) + : sizeof (Elf64_External_Rela)); } else gent->got.offset = (bfd_vma) -1; - if (eh->dyn_relocs == NULL) + if (eh->dyn_relocs == NULL + || (!htab->elf.dynamic_sections_created + && h->type != STT_GNU_IFUNC)) return TRUE; /* In the shared -Bsymbolic case, discard space allocated for @@ -7722,7 +8341,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) if (info->shared) { /* Relocs that use pc_count are those that appear on a call insn, - or certain REL relocs (see MUST_BE_DYN_RELOC) that can be + or certain REL relocs (see must_be_dyn_reloc) that can be generated via assembly. 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 @@ -7760,6 +8379,11 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) } } } + else if (h->type == STT_GNU_IFUNC) + { + if (!h->non_got_ref) + eh->dyn_relocs = NULL; + } else if (ELIMINATE_COPY_RELOCS) { /* For the non-shared case, discard space for relocs against @@ -7767,7 +8391,6 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) dynamic. */ if (!h->non_got_ref - && h->def_dynamic && !h->def_regular) { /* Make sure this symbol is output as a dynamic symbol. @@ -7794,6 +8417,8 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) for (p = eh->dyn_relocs; p != NULL; p = p->next) { asection *sreloc = elf_section_data (p->sec)->sreloc; + if (!htab->elf.dynamic_sections_created) + sreloc = htab->reliplt; sreloc->size += p->count * sizeof (Elf64_External_Rela); } @@ -7865,28 +8490,16 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { struct got_entry **lgot_ents; struct got_entry **end_lgot_ents; + struct plt_entry **local_plt; + struct plt_entry **end_local_plt; char *lgot_masks; bfd_size_type locsymcount; Elf_Internal_Shdr *symtab_hdr; asection *srel; - if (!is_ppc64_elf_target (ibfd->xvec)) + if (!is_ppc64_elf (ibfd)) continue; - if (ppc64_tlsld_got (ibfd)->refcount > 0) - { - s = ppc64_elf_tdata (ibfd)->got; - ppc64_tlsld_got (ibfd)->offset = s->size; - s->size += 16; - if (info->shared) - { - srel = ppc64_elf_tdata (ibfd)->relgot; - srel->size += sizeof (Elf64_External_Rela); - } - } - else - ppc64_tlsld_got (ibfd)->offset = (bfd_vma) -1; - for (s = ibfd->sections; s != NULL; s = s->next) { struct ppc_dyn_relocs *p; @@ -7904,6 +8517,8 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, else if (p->count != 0) { srel = elf_section_data (p->sec)->sreloc; + if (!htab->elf.dynamic_sections_created) + srel = htab->reliplt; srel->size += p->count * sizeof (Elf64_External_Rela); if ((p->sec->output_section->flags & SEC_READONLY) != 0) info->flags |= DF_TEXTREL; @@ -7915,10 +8530,12 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!lgot_ents) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_lgot_ents = lgot_ents + locsymcount; - lgot_masks = (char *) end_lgot_ents; + local_plt = (struct plt_entry **) end_lgot_ents; + end_local_plt = local_plt + locsymcount; + lgot_masks = (char *) end_local_plt; s = ppc64_elf_tdata (ibfd)->got; srel = ppc64_elf_tdata (ibfd)->relgot; for (; lgot_ents < end_lgot_ents; ++lgot_ents, ++lgot_masks) @@ -7930,41 +8547,70 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { if ((ent->tls_type & *lgot_masks & TLS_LD) != 0) { - if (ppc64_tlsld_got (ibfd)->offset == (bfd_vma) -1) - { - ppc64_tlsld_got (ibfd)->offset = s->size; - s->size += 16; - if (info->shared) - srel->size += sizeof (Elf64_External_Rela); - } - ent->got.offset = ppc64_tlsld_got (ibfd)->offset; + ppc64_tlsld_got (ibfd)->refcount += 1; + ent->got.offset = (bfd_vma) -1; } else { + unsigned int num = 1; ent->got.offset = s->size; if ((ent->tls_type & *lgot_masks & TLS_GD) != 0) - { - s->size += 16; - if (info->shared) - srel->size += 2 * sizeof (Elf64_External_Rela); - } - else - { - s->size += 8; - if (info->shared) - srel->size += sizeof (Elf64_External_Rela); - } + num = 2; + s->size += num * 8; + if (info->shared) + srel->size += num * sizeof (Elf64_External_Rela); + else if ((*lgot_masks & PLT_IFUNC) != 0) + htab->reliplt->size += num * sizeof (Elf64_External_Rela); } } else ent->got.offset = (bfd_vma) -1; } + + /* Allocate space for calls to local STT_GNU_IFUNC syms in .iplt. */ + for (; local_plt < end_local_plt; ++local_plt) + { + struct plt_entry *ent; + + for (ent = *local_plt; ent != NULL; ent = ent->next) + if (ent->plt.refcount > 0) + { + asection *s = htab->iplt; + + ent->plt.offset = s->size; + s->size += PLT_ENTRY_SIZE; + + htab->reliplt->size += sizeof (Elf64_External_Rela); + } + else + ent->plt.offset = (bfd_vma) -1; + } } /* Allocate global sym .plt and .got entries, and space for global sym dynamic relocs. */ elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, info); + for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) + { + if (!is_ppc64_elf (ibfd)) + continue; + + if (ppc64_tlsld_got (ibfd)->refcount > 0) + { + s = ppc64_elf_tdata (ibfd)->got; + ppc64_tlsld_got (ibfd)->offset = s->size; + s->size += 16; + if (info->shared) + { + asection *srel = ppc64_elf_tdata (ibfd)->relgot; + srel->size += sizeof (Elf64_External_Rela); + } + } + else + ppc64_tlsld_got (ibfd)->offset = (bfd_vma) -1; + } + /* We now have determined the sizes of the various dynamic sections. Allocate memory for them. */ relocs = FALSE; @@ -7978,6 +8624,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, continue; else if (s == htab->got || s == htab->plt + || s == htab->iplt || s == htab->glink || s == htab->dynbss) { @@ -8034,7 +8681,7 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link_next) { - if (!is_ppc64_elf_target (ibfd->xvec)) + if (!is_ppc64_elf (ibfd)) continue; s = ppc64_elf_tdata (ibfd)->got; @@ -8098,6 +8745,12 @@ ppc64_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } + if (!htab->no_tls_get_addr_opt + && htab->tls_get_addr_fd != NULL + && htab->tls_get_addr_fd->elf.plt.plist != NULL + && !add_dynamic_entry (DT_PPC64_TLSOPT, 0)) + return FALSE; + if (relocs) { if (!add_dynamic_entry (DT_RELA, 0) @@ -8128,6 +8781,7 @@ static inline enum ppc_stub_type ppc_type_of_stub (asection *input_sec, const Elf_Internal_Rela *rel, struct ppc_link_hash_entry **hash, + struct plt_entry **plt_ent, bfd_vma destination) { struct ppc_link_hash_entry *h = *hash; @@ -8138,23 +8792,20 @@ ppc_type_of_stub (asection *input_sec, if (h != NULL) { + struct plt_entry *ent; struct ppc_link_hash_entry *fdh = h; - if (fdh->oh != NULL - && fdh->oh->is_func_descriptor) - fdh = fdh->oh; - - if (fdh->elf.dynindx != -1) - { - struct plt_entry *ent; + if (h->oh != NULL + && h->oh->is_func_descriptor) + fdh = ppc_follow_link (h->oh); - for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next) - if (ent->addend == rel->r_addend - && ent->plt.offset != (bfd_vma) -1) - { - *hash = fdh; - return ppc_stub_plt_call; - } - } + for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next) + if (ent->addend == rel->r_addend + && ent->plt.offset != (bfd_vma) -1) + { + *hash = fdh; + *plt_ent = ent; + return ppc_stub_plt_call; + } /* Here, we know we don't have a plt entry. If we don't have a either a defined function descriptor or a defined entry symbol @@ -8168,6 +8819,26 @@ ppc_type_of_stub (asection *input_sec, && h->elf.root.u.def.section->output_section != NULL)) return ppc_stub_none; } + else if (elf_local_got_ents (input_sec->owner) != NULL) + { + Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (input_sec->owner); + struct plt_entry **local_plt = (struct plt_entry **) + elf_local_got_ents (input_sec->owner) + symtab_hdr->sh_info; + unsigned long r_symndx = ELF64_R_SYM (rel->r_info); + + if (local_plt[r_symndx] != NULL) + { + struct plt_entry *ent; + + for (ent = local_plt[r_symndx]; ent != NULL; ent = ent->next) + if (ent->addend == rel->r_addend + && ent->plt.offset != (bfd_vma) -1) + { + *plt_ent = ent; + return ppc_stub_plt_call; + } + } + } /* Determine where the call point is. */ location = (input_sec->output_offset @@ -8193,7 +8864,7 @@ ppc_type_of_stub (asection *input_sec, /* Build a .plt call stub. */ static inline bfd_byte * -build_plt_stub (bfd *obfd, bfd_byte *p, int offset) +build_plt_stub (bfd *obfd, bfd_byte *p, int offset, Elf_Internal_Rela *r) { #define PPC_LO(v) ((v) & 0xffff) #define PPC_HI(v) (((v) >> 16) & 0xffff) @@ -8201,6 +8872,28 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset) if (PPC_HA (offset) != 0) { + if (r != NULL) + { + r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA); + r[1].r_offset = r[0].r_offset + 8; + r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS); + r[1].r_addend = r[0].r_addend; + if (PPC_HA (offset + 16) != PPC_HA (offset)) + { + r[2].r_offset = r[1].r_offset + 4; + r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO); + r[2].r_addend = r[0].r_addend; + } + else + { + r[2].r_offset = r[1].r_offset + 8; + r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS); + r[2].r_addend = r[0].r_addend + 8; + r[3].r_offset = r[2].r_offset + 4; + r[3].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS); + r[3].r_addend = r[0].r_addend + 16; + } + } bfd_put_32 (obfd, ADDIS_R12_R2 | PPC_HA (offset), p), p += 4; bfd_put_32 (obfd, STD_R2_40R1, p), p += 4; bfd_put_32 (obfd, LD_R11_0R12 | PPC_LO (offset), p), p += 4; @@ -8216,6 +8909,26 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset) } else { + if (r != NULL) + { + r[0].r_offset += 4; + r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS); + if (PPC_HA (offset + 16) != PPC_HA (offset)) + { + r[1].r_offset = r[0].r_offset + 4; + r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16); + r[1].r_addend = r[0].r_addend; + } + else + { + r[1].r_offset = r[0].r_offset + 8; + r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS); + r[1].r_addend = r[0].r_addend + 16; + r[2].r_offset = r[1].r_offset + 4; + r[2].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS); + r[2].r_addend = r[0].r_addend + 8; + } + } bfd_put_32 (obfd, STD_R2_40R1, p), p += 4; bfd_put_32 (obfd, LD_R11_0R2 | PPC_LO (offset), p), p += 4; if (PPC_HA (offset + 16) != PPC_HA (offset)) @@ -8231,6 +8944,75 @@ build_plt_stub (bfd *obfd, bfd_byte *p, int offset) return p; } +/* Build a special .plt call stub for __tls_get_addr. */ + +#define LD_R11_0R3 0xe9630000 +#define LD_R12_0R3 0xe9830000 +#define MR_R0_R3 0x7c601b78 +#define CMPDI_R11_0 0x2c2b0000 +#define ADD_R3_R12_R13 0x7c6c6a14 +#define BEQLR 0x4d820020 +#define MR_R3_R0 0x7c030378 +#define MFLR_R11 0x7d6802a6 +#define STD_R11_0R1 0xf9610000 +#define BCTRL 0x4e800421 +#define LD_R11_0R1 0xe9610000 +#define LD_R2_0R1 0xe8410000 +#define MTLR_R11 0x7d6803a6 + +static inline bfd_byte * +build_tls_get_addr_stub (bfd *obfd, bfd_byte *p, int offset, + Elf_Internal_Rela *r) +{ + bfd_put_32 (obfd, LD_R11_0R3 + 0, p), p += 4; + bfd_put_32 (obfd, LD_R12_0R3 + 8, p), p += 4; + bfd_put_32 (obfd, MR_R0_R3, p), p += 4; + bfd_put_32 (obfd, CMPDI_R11_0, p), p += 4; + bfd_put_32 (obfd, ADD_R3_R12_R13, p), p += 4; + bfd_put_32 (obfd, BEQLR, p), p += 4; + bfd_put_32 (obfd, MR_R3_R0, p), p += 4; + bfd_put_32 (obfd, MFLR_R11, p), p += 4; + bfd_put_32 (obfd, STD_R11_0R1 + 32, p), p += 4; + + if (r != NULL) + r[0].r_offset += 9 * 4; + p = build_plt_stub (obfd, p, offset, r); + bfd_put_32 (obfd, BCTRL, p - 4); + + bfd_put_32 (obfd, LD_R11_0R1 + 32, p), p += 4; + bfd_put_32 (obfd, LD_R2_0R1 + 40, p), p += 4; + bfd_put_32 (obfd, MTLR_R11, p), p += 4; + bfd_put_32 (obfd, BLR, p), p += 4; + + return p; +} + +static Elf_Internal_Rela * +get_relocs (asection *sec, int count) +{ + Elf_Internal_Rela *relocs; + struct bfd_elf_section_data *elfsec_data; + + elfsec_data = elf_section_data (sec); + relocs = elfsec_data->relocs; + if (relocs == NULL) + { + bfd_size_type relsize; + relsize = sec->reloc_count * sizeof (*relocs); + relocs = bfd_alloc (sec->owner, relsize); + if (relocs == NULL) + return NULL; + elfsec_data->relocs = relocs; + elfsec_data->rel_hdr.sh_size = (sec->reloc_count + * sizeof (Elf64_External_Rela)); + elfsec_data->rel_hdr.sh_entsize = sizeof (Elf64_External_Rela); + sec->reloc_count = 0; + } + relocs += sec->reloc_count; + sec->reloc_count += count; + return relocs; +} + static bfd_boolean ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) { @@ -8240,10 +9022,10 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) struct ppc_link_hash_table *htab; bfd_byte *loc; bfd_byte *p; - unsigned int indx; - struct plt_entry *ent; bfd_vma dest, off; int size; + Elf_Internal_Rela *r; + asection *plt; /* Massage our args to the form they really have. */ stub_entry = (struct ppc_stub_hash_entry *) gen_entry; @@ -8302,25 +9084,9 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) if (info->emitrelocations) { - Elf_Internal_Rela *relocs, *r; - struct bfd_elf_section_data *elfsec_data; - - elfsec_data = elf_section_data (stub_entry->stub_sec); - relocs = elfsec_data->relocs; - if (relocs == NULL) - { - bfd_size_type relsize; - relsize = stub_entry->stub_sec->reloc_count * sizeof (*relocs); - relocs = bfd_alloc (htab->stub_bfd, relsize); - if (relocs == NULL) - return FALSE; - elfsec_data->relocs = relocs; - elfsec_data->rel_hdr.sh_size = relsize; - elfsec_data->rel_hdr.sh_entsize = 24; - stub_entry->stub_sec->reloc_count = 0; - } - r = relocs + stub_entry->stub_sec->reloc_count; - stub_entry->stub_sec->reloc_count += 1; + r = get_relocs (stub_entry->stub_sec, 1); + if (r == NULL) + return FALSE; r->r_offset = loc - stub_entry->stub_sec->contents; r->r_info = ELF64_R_INFO (0, R_PPC64_REL24); r->r_addend = dest; @@ -8347,7 +9113,7 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) hashes[symndx] = &h->elf; r->r_info = ELF64_R_INFO (symndx, R_PPC64_REL24); if (h->oh != NULL && h->oh->is_func) - h = h->oh; + h = ppc_follow_link (h->oh); if (h->elf.root.u.def.section != stub_entry->target_section) /* H is an opd symbol. The addend must be zero. */ r->r_addend = 0; @@ -8375,60 +9141,56 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) return FALSE; } - off = (stub_entry->target_value - + stub_entry->target_section->output_offset - + stub_entry->target_section->output_section->vma); + dest = (stub_entry->target_value + + stub_entry->target_section->output_offset + + stub_entry->target_section->output_section->vma); - bfd_put_64 (htab->brlt->owner, off, + bfd_put_64 (htab->brlt->owner, dest, htab->brlt->contents + br_entry->offset); - if (htab->relbrlt != NULL) - { - /* Create a reloc for the branch lookup table entry. */ - Elf_Internal_Rela rela; - bfd_byte *rl; - - rela.r_offset = (br_entry->offset - + htab->brlt->output_offset - + htab->brlt->output_section->vma); - rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE); - rela.r_addend = off; - - rl = htab->relbrlt->contents; - rl += htab->relbrlt->reloc_count++ * sizeof (Elf64_External_Rela); - bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl); - } - else if (info->emitrelocations) + if (br_entry->iter == htab->stub_iteration) { - Elf_Internal_Rela *relocs, *r; - struct bfd_elf_section_data *elfsec_data; + br_entry->iter = 0; - elfsec_data = elf_section_data (htab->brlt); - relocs = elfsec_data->relocs; - if (relocs == NULL) + if (htab->relbrlt != NULL) + { + /* Create a reloc for the branch lookup table entry. */ + Elf_Internal_Rela rela; + bfd_byte *rl; + + rela.r_offset = (br_entry->offset + + htab->brlt->output_offset + + htab->brlt->output_section->vma); + rela.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE); + rela.r_addend = dest; + + rl = htab->relbrlt->contents; + rl += (htab->relbrlt->reloc_count++ + * sizeof (Elf64_External_Rela)); + bfd_elf64_swap_reloca_out (htab->relbrlt->owner, &rela, rl); + } + else if (info->emitrelocations) { - bfd_size_type relsize; - relsize = htab->brlt->reloc_count * sizeof (*relocs); - relocs = bfd_alloc (htab->brlt->owner, relsize); - if (relocs == NULL) + r = get_relocs (htab->brlt, 1); + if (r == 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; + /* brlt, being SEC_LINKER_CREATED does not go through the + normal reloc processing. Symbols and offsets are not + translated from input file to output file form, so + set up the offset per the output file. */ + 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 = dest; } - 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 - + htab->brlt->output_section->vma + } + + dest = (br_entry->offset + + htab->brlt->output_offset + + htab->brlt->output_section->vma); + + off = (dest - elf_gp (htab->brlt->output_section->owner) - htab->stub_group[stub_entry->id_sec->id].toc_off); @@ -8442,20 +9204,40 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) return FALSE; } - indx = off; + if (info->emitrelocations) + { + r = get_relocs (stub_entry->stub_sec, 1 + (PPC_HA (off) != 0)); + if (r == NULL) + return FALSE; + r[0].r_offset = loc - stub_entry->stub_sec->contents; + if (bfd_big_endian (info->output_bfd)) + r[0].r_offset += 2; + if (stub_entry->stub_type == ppc_stub_plt_branch_r2off) + r[0].r_offset += 4; + r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_DS); + r[0].r_addend = dest; + if (PPC_HA (off) != 0) + { + r[0].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_HA); + r[1].r_offset = r[0].r_offset + 4; + r[1].r_info = ELF64_R_INFO (0, R_PPC64_TOC16_LO_DS); + r[1].r_addend = r[0].r_addend; + } + } + if (stub_entry->stub_type != ppc_stub_plt_branch_r2off) { - if (PPC_HA (indx) != 0) + if (PPC_HA (off) != 0) { size = 16; - bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (indx), loc); + bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (off), loc); loc += 4; - bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (indx), loc); + bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (off), loc); } else { size = 12; - bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (indx), loc); + bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (off), loc); } } else @@ -8467,17 +9249,17 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) bfd_put_32 (htab->stub_bfd, STD_R2_40R1, loc); loc += 4; size = 20; - if (PPC_HA (indx) != 0) + if (PPC_HA (off) != 0) { size += 4; - bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (indx), loc); + bfd_put_32 (htab->stub_bfd, ADDIS_R12_R2 | PPC_HA (off), loc); loc += 4; - bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (indx), loc); + bfd_put_32 (htab->stub_bfd, LD_R11_0R12 | PPC_LO (off), loc); loc += 4; } else { - bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (indx), loc); + bfd_put_32 (htab->stub_bfd, LD_R11_0R2 | PPC_LO (off), loc); loc += 4; } @@ -8496,51 +9278,90 @@ ppc_build_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) break; case ppc_stub_plt_call: - /* Do the best we can for shared libraries built without - exporting ".foo" for each "foo". This can happen when symbol - versioning scripts strip all bar a subset of symbols. */ - if (stub_entry->h->oh != NULL - && stub_entry->h->oh->elf.root.type != bfd_link_hash_defined - && stub_entry->h->oh->elf.root.type != bfd_link_hash_defweak) - { - /* Point the symbol at the stub. There may be multiple stubs, - we don't really care; The main thing is to make this sym - defined somewhere. Maybe defining the symbol in the stub - section is a silly idea. If we didn't do this, htab->top_id - could disappear. */ - stub_entry->h->oh->elf.root.type = bfd_link_hash_defined; - stub_entry->h->oh->elf.root.u.def.section = stub_entry->stub_sec; - stub_entry->h->oh->elf.root.u.def.value = stub_entry->stub_offset; + if (stub_entry->h != NULL + && stub_entry->h->is_func_descriptor + && stub_entry->h->oh != NULL) + { + struct ppc_link_hash_entry *fh = ppc_follow_link (stub_entry->h->oh); + + /* If the old-ABI "dot-symbol" is undefined make it weak so + we don't get a link error from RELOC_FOR_GLOBAL_SYMBOL. + FIXME: We used to define the symbol on one of the call + stubs instead, which is why we test symbol section id + against htab->top_id in various places. Likely all + these checks could now disappear. */ + if (fh->elf.root.type == bfd_link_hash_undefined) + fh->elf.root.type = bfd_link_hash_undefweak; } /* Now build the stub. */ - off = (bfd_vma) -1; - for (ent = stub_entry->h->elf.plt.plist; ent != NULL; ent = ent->next) - if (ent->addend == stub_entry->addend) - { - off = ent->plt.offset; - break; - } - if (off >= (bfd_vma) -2) + dest = stub_entry->plt_ent->plt.offset & ~1; + if (dest >= (bfd_vma) -2) abort (); - off &= ~ (bfd_vma) 1; - off += (htab->plt->output_offset - + htab->plt->output_section->vma - - elf_gp (htab->plt->output_section->owner) - - htab->stub_group[stub_entry->id_sec->id].toc_off); + plt = htab->plt; + if (!htab->elf.dynamic_sections_created + || stub_entry->h == NULL + || stub_entry->h->elf.dynindx == -1) + plt = htab->iplt; + + dest += plt->output_offset + plt->output_section->vma; + + if (stub_entry->h == NULL + && (stub_entry->plt_ent->plt.offset & 1) == 0) + { + Elf_Internal_Rela rela; + bfd_byte *rl; + + rela.r_offset = dest; + rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL); + rela.r_addend = (stub_entry->target_value + + stub_entry->target_section->output_offset + + stub_entry->target_section->output_section->vma); + + rl = (htab->reliplt->contents + + (htab->reliplt->reloc_count++ + * sizeof (Elf64_External_Rela))); + bfd_elf64_swap_reloca_out (info->output_bfd, &rela, rl); + stub_entry->plt_ent->plt.offset |= 1; + } + + off = (dest + - elf_gp (plt->output_section->owner) + - htab->stub_group[stub_entry->id_sec->id].toc_off); if (off + 0x80008000 > 0xffffffff || (off & 7) != 0) { (*_bfd_error_handler) (_("linkage table error against `%s'"), - stub_entry->h->elf.root.root.string); + stub_entry->h != NULL + ? stub_entry->h->elf.root.root.string + : ""); bfd_set_error (bfd_error_bad_value); htab->stub_error = TRUE; return FALSE; } - p = build_plt_stub (htab->stub_bfd, loc, off); + r = NULL; + if (info->emitrelocations) + { + r = get_relocs (stub_entry->stub_sec, + (2 + (PPC_HA (off) != 0) + + (PPC_HA (off + 16) == PPC_HA (off)))); + if (r == NULL) + return FALSE; + r[0].r_offset = loc - stub_entry->stub_sec->contents; + if (bfd_big_endian (info->output_bfd)) + r[0].r_offset += 2; + r[0].r_addend = dest; + } + if (stub_entry->h != NULL + && (stub_entry->h == htab->tls_get_addr_fd + || stub_entry->h == htab->tls_get_addr) + && !htab->no_tls_get_addr_opt) + p = build_tls_get_addr_stub (htab->stub_bfd, loc, off, r); + else + p = build_plt_stub (htab->stub_bfd, loc, off, r); size = p - loc; break; @@ -8610,19 +9431,18 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) if (stub_entry->stub_type == ppc_stub_plt_call) { - struct plt_entry *ent; - off = (bfd_vma) -1; - for (ent = stub_entry->h->elf.plt.plist; ent != NULL; ent = ent->next) - if (ent->addend == stub_entry->addend) - { - off = ent->plt.offset & ~(bfd_vma) 1; - break; - } + asection *plt; + off = stub_entry->plt_ent->plt.offset & ~(bfd_vma) 1; if (off >= (bfd_vma) -2) abort (); - off += (htab->plt->output_offset - + htab->plt->output_section->vma - - elf_gp (htab->plt->output_section->owner) + plt = htab->plt; + if (!htab->elf.dynamic_sections_created + || stub_entry->h == NULL + || stub_entry->h->elf.dynindx == -1) + plt = htab->iplt; + off += (plt->output_offset + + plt->output_section->vma + - elf_gp (plt->output_section->owner) - htab->stub_group[stub_entry->id_sec->id].toc_off); size = PLT_CALL_STUB_SIZE; @@ -8630,6 +9450,17 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) size -= 4; if (PPC_HA (off + 16) != PPC_HA (off)) size += 4; + if (stub_entry->h != NULL + && (stub_entry->h == htab->tls_get_addr_fd + || stub_entry->h == htab->tls_get_addr) + && !htab->no_tls_get_addr_opt) + size += 13 * 4; + if (info->emitrelocations) + { + stub_entry->stub_sec->reloc_count + += 2 + (PPC_HA (off) != 0) + (PPC_HA (off + 16) == PPC_HA (off)); + stub_entry->stub_sec->flags |= SEC_RELOC; + } } else { @@ -8664,7 +9495,6 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) if (off + (1 << 25) >= (bfd_vma) (1 << 26)) { struct ppc_branch_hash_entry *br_entry; - unsigned int indx; br_entry = ppc_branch_hash_lookup (&htab->branch_hash_table, stub_entry->root.string + 9, @@ -8699,17 +9529,22 @@ ppc_size_one_stub (struct bfd_hash_entry *gen_entry, void *in_arg) - elf_gp (htab->brlt->output_section->owner) - htab->stub_group[stub_entry->id_sec->id].toc_off); - indx = off; + if (info->emitrelocations) + { + stub_entry->stub_sec->reloc_count += 1 + (PPC_HA (off) != 0); + stub_entry->stub_sec->flags |= SEC_RELOC; + } + if (stub_entry->stub_type != ppc_stub_plt_branch_r2off) { size = 12; - if (PPC_HA (indx) != 0) + if (PPC_HA (off) != 0) size = 16; } else { size = 20; - if (PPC_HA (indx) != 0) + if (PPC_HA (off) != 0) size += 4; if (PPC_HA (r2off) != 0) @@ -8859,11 +9694,6 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec) if (isec->output_section == NULL) return 0; - /* Hack for linux kernel. .fixup contains branches, but only back to - the function that hit an exception. */ - if (strcmp (isec->name, ".fixup") == 0) - return 0; - if (isec->reloc_count == 0) return 0; @@ -8881,9 +9711,10 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec) enum elf_ppc64_reloc_type r_type; unsigned long r_symndx; struct elf_link_hash_entry *h; + struct ppc_link_hash_entry *eh; Elf_Internal_Sym *sym; asection *sym_sec; - long *opd_adjust; + struct _opd_sec_data *opd; bfd_vma sym_value; bfd_vma dest; @@ -8903,24 +9734,21 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec) } /* Calls to dynamic lib functions go through a plt call stub - that uses r2. Branches to undefined symbols might be a call - using old-style dot symbols that can be satisfied by a plt - call into a new-style dynamic library. */ - if (sym_sec == NULL) + that uses r2. */ + eh = (struct ppc_link_hash_entry *) h; + if (eh != NULL + && (eh->elf.plt.plist != NULL + || (eh->oh != NULL + && ppc_follow_link (eh->oh)->elf.plt.plist != NULL))) { - struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h; - if (eh != NULL - && eh->oh != NULL - && eh->oh->elf.plt.plist != NULL) - { - ret = 1; - break; - } - - /* Ignore other undefined symbols. */ - continue; + ret = 1; + break; } + if (sym_sec == NULL) + /* Ignore other undefined symbols. */ + continue; + /* Assume branches to other sections not included in the link need stubs too, to cover -R and absolute syms. */ if (sym_sec->output_section == NULL) @@ -8941,14 +9769,14 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec) sym_value += rel->r_addend; /* If this branch reloc uses an opd sym, find the code section. */ - opd_adjust = get_opd_info (sym_sec); - if (opd_adjust != NULL) + opd = get_opd_info (sym_sec); + if (opd != NULL) { - if (h == NULL) + if (h == NULL && opd->adjust != NULL) { long adjust; - adjust = opd_adjust[sym->st_value / 8]; + adjust = opd->adjust[sym->st_value / 8]; if (adjust == -1) /* Assume deleted functions won't ever be called. */ continue; @@ -9032,8 +9860,7 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec) } if (local_syms != NULL - && (elf_tdata (isec->owner)->symtab_hdr.contents - != (unsigned char *) local_syms)) + && (elf_symtab_hdr (isec->owner).contents != (unsigned char *) local_syms)) free (local_syms); if (elf_section_data (isec)->relocs != relstart) free (relstart); @@ -9068,8 +9895,13 @@ ppc64_elf_next_input_section (struct bfd_link_info *info, asection *isec) /* If a code section has a function that uses the TOC then we need to use the right TOC (obviously). Also, make sure that .opd gets the correct TOC value for R_PPC64_TOC relocs that don't have or - can't find their function symbol (shouldn't ever happen now). */ - if (isec->has_toc_reloc || (isec->flags & SEC_CODE) == 0) + can't find their function symbol (shouldn't ever happen now). + Also specially treat .fixup for the linux kernel. .fixup + contains branches, but only back to the function that hit an + exception. */ + if (isec->has_toc_reloc + || (isec->flags & SEC_CODE) == 0 + || strcmp (isec->name, ".fixup") == 0) { if (elf_gp (isec->owner) != 0) htab->toc_curr = elf_gp (isec->owner); @@ -9242,11 +10074,11 @@ ppc64_elf_size_stubs (bfd *output_bfd, asection *section; Elf_Internal_Sym *local_syms = NULL; - if (!is_ppc64_elf_target (input_bfd->xvec)) + if (!is_ppc64_elf (input_bfd)) continue; /* We'll need the symbol table in a second. */ - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); if (symtab_hdr->sh_info == 0) continue; @@ -9289,7 +10121,7 @@ ppc64_elf_size_stubs (bfd *output_bfd, enum ppc_stub_type stub_type; struct ppc_stub_hash_entry *stub_entry; asection *sym_sec, *code_sec; - bfd_vma sym_value; + bfd_vma sym_value, code_value; bfd_vma destination; bfd_boolean ok_dest; struct ppc_link_hash_entry *hash; @@ -9298,7 +10130,8 @@ ppc64_elf_size_stubs (bfd *output_bfd, Elf_Internal_Sym *sym; char *stub_name; const asection *id_sec; - long *opd_adjust; + struct _opd_sec_data *opd; + struct plt_entry *plt_ent; r_type = ELF64_R_TYPE (irela->r_info); r_indx = ELF64_R_SYM (irela->r_info); @@ -9345,7 +10178,7 @@ ppc64_elf_size_stubs (bfd *output_bfd, use the func descriptor sym instead if it is defined. */ if (hash->elf.root.root.string[0] == '.' - && (fdh = get_fdh (hash, htab)) != NULL) + && (fdh = lookup_fdh (hash, htab)) != NULL) { if (fdh->elf.root.type == bfd_link_hash_defined || fdh->elf.root.type == bfd_link_hash_defweak) @@ -9375,20 +10208,22 @@ ppc64_elf_size_stubs (bfd *output_bfd, } code_sec = sym_sec; - opd_adjust = get_opd_info (sym_sec); - if (opd_adjust != NULL) + code_value = sym_value; + opd = get_opd_info (sym_sec); + if (opd != NULL) { bfd_vma dest; - if (hash == NULL) + if (hash == NULL && opd->adjust != NULL) { - long adjust = opd_adjust[sym_value / 8]; + long adjust = opd->adjust[sym_value / 8]; if (adjust == -1) continue; + code_value += adjust; sym_value += adjust; } dest = opd_entry_value (sym_sec, sym_value, - &code_sec, &sym_value); + &code_sec, &code_value); if (dest != (bfd_vma) -1) { destination = dest; @@ -9398,14 +10233,15 @@ ppc64_elf_size_stubs (bfd *output_bfd, entry. */ hash->elf.root.type = bfd_link_hash_defweak; hash->elf.root.u.def.section = code_sec; - hash->elf.root.u.def.value = sym_value; + hash->elf.root.u.def.value = code_value; } } } /* Determine what (if any) linker stub is needed. */ + plt_ent = NULL; stub_type = ppc_type_of_stub (section, irela, &hash, - destination); + &plt_ent, destination); if (stub_type != ppc_stub_plt_call) { @@ -9438,7 +10274,7 @@ ppc64_elf_size_stubs (bfd *output_bfd, /* Get tls info. */ char *tls_mask; - if (!get_tls_mask (&tls_mask, NULL, &local_syms, + if (!get_tls_mask (&tls_mask, NULL, NULL, &local_syms, irela - 1, input_bfd)) goto error_ret_free_internal; if (*tls_mask != 0) @@ -9478,9 +10314,18 @@ ppc64_elf_size_stubs (bfd *output_bfd, } stub_entry->stub_type = stub_type; - stub_entry->target_value = sym_value; - stub_entry->target_section = code_sec; + if (stub_type != ppc_stub_plt_call) + { + stub_entry->target_value = code_value; + stub_entry->target_section = code_sec; + } + else + { + stub_entry->target_value = sym_value; + stub_entry->target_section = sym_sec; + } stub_entry->h = hash; + stub_entry->plt_ent = plt_ent; stub_entry->addend = irela->r_addend; if (stub_entry->h != NULL) @@ -9523,6 +10368,13 @@ ppc64_elf_size_stubs (bfd *output_bfd, bfd_hash_traverse (&htab->stub_hash_table, ppc_size_one_stub, info); + if (info->emitrelocations + && htab->glink != NULL && htab->glink->size != 0) + { + htab->glink->reloc_count = 1; + htab->glink->flags |= SEC_RELOC; + } + for (stub_sec = htab->stub_bfd->sections; stub_sec != NULL; stub_sec = stub_sec->next) @@ -9559,13 +10411,13 @@ ppc64_elf_toc (bfd *obfd) /* The TOC consists of sections .got, .toc, .tocbss, .plt in that order. The TOC starts where the first of these sections starts. */ s = bfd_get_section_by_name (obfd, ".got"); - if (s == NULL) + if (s == NULL || (s->flags & SEC_EXCLUDE) != 0) s = bfd_get_section_by_name (obfd, ".toc"); - if (s == NULL) + if (s == NULL || (s->flags & SEC_EXCLUDE) != 0) s = bfd_get_section_by_name (obfd, ".tocbss"); - if (s == NULL) + if (s == NULL || (s->flags & SEC_EXCLUDE) != 0) s = bfd_get_section_by_name (obfd, ".plt"); - if (s == NULL) + if (s == NULL || (s->flags & SEC_EXCLUDE) != 0) { /* This may happen for o references to TOC base (SYM@toc / TOC[tc0]) without a @@ -9578,21 +10430,23 @@ ppc64_elf_toc (bfd *obfd) /* Look for a likely section. We probably won't even be using TOCstart. */ for (s = obfd->sections; s != NULL; s = s->next) - if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY)) + if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_READONLY + | SEC_EXCLUDE)) == (SEC_ALLOC | SEC_SMALL_DATA)) break; if (s == NULL) for (s = obfd->sections; s != NULL; s = s->next) - if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA)) + if ((s->flags & (SEC_ALLOC | SEC_SMALL_DATA | SEC_EXCLUDE)) == (SEC_ALLOC | SEC_SMALL_DATA)) break; if (s == NULL) for (s = obfd->sections; s != NULL; s = s->next) - if ((s->flags & (SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC) + if ((s->flags & (SEC_ALLOC | SEC_READONLY | SEC_EXCLUDE)) + == SEC_ALLOC) break; if (s == NULL) for (s = obfd->sections; s != NULL; s = s->next) - if ((s->flags & SEC_ALLOC) == SEC_ALLOC) + if ((s->flags & (SEC_ALLOC | SEC_EXCLUDE)) == SEC_ALLOC) break; } @@ -9644,7 +10498,8 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms, if (htab->emit_stub_syms) { struct elf_link_hash_entry *h; - h = elf_link_hash_lookup (&htab->elf, "__glink", TRUE, FALSE, FALSE); + h = elf_link_hash_lookup (&htab->elf, "__glink_PLTresolve", + TRUE, FALSE, FALSE); if (h == NULL) return FALSE; if (h->root.type == bfd_link_hash_new) @@ -9659,12 +10514,19 @@ ppc64_elf_build_stubs (bfd_boolean emit_stub_syms, h->non_elf = 0; } } + plt0 = htab->plt->output_section->vma + htab->plt->output_offset - 16; + if (info->emitrelocations) + { + Elf_Internal_Rela *r = get_relocs (htab->glink, 1); + if (r == NULL) + return FALSE; + r->r_offset = (htab->glink->output_offset + + htab->glink->output_section->vma); + r->r_info = ELF64_R_INFO (0, R_PPC64_REL64); + r->r_addend = plt0; + } p = htab->glink->contents; - plt0 = (htab->plt->output_section->vma - + htab->plt->output_offset - - (htab->glink->output_section->vma - + htab->glink->output_offset - + 16)); + plt0 -= htab->glink->output_section->vma + htab->glink->output_offset; bfd_put_64 (htab->glink->owner, plt0, p); p += 8; bfd_put_32 (htab->glink->owner, MFLR_R12, p); @@ -9893,9 +10755,11 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (input_section->owner == htab->stub_bfd) return TRUE; + BFD_ASSERT (is_ppc64_elf (input_bfd)); + local_got_ents = elf_local_got_ents (input_bfd); TOCstart = elf_gp (output_bfd); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); is_opd = ppc64_elf_section_data (input_section)->sec_type == sec_opd; @@ -9913,6 +10777,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, struct ppc_link_hash_entry *fdh; const char *sym_name; unsigned long r_symndx, toc_symndx; + bfd_vma toc_addend; char tls_mask, tls_gd, tls_type; char sym_type; bfd_vma relocation; @@ -9946,17 +10811,17 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (r_symndx < symtab_hdr->sh_info) { /* It's a local symbol. */ - long *opd_adjust; + struct _opd_sec_data *opd; sym = local_syms + r_symndx; sec = local_sections[r_symndx]; sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, sec); sym_type = ELF64_ST_TYPE (sym->st_info); relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); - opd_adjust = get_opd_info (sec); - if (opd_adjust != NULL) + opd = get_opd_info (sec); + if (opd != NULL && opd->adjust != NULL) { - long adjust = opd_adjust[(sym->st_value + rel->r_addend) / 8]; + long adjust = opd->adjust[(sym->st_value + rel->r_addend) / 8]; if (adjust == -1) relocation = 0; else @@ -10006,28 +10871,30 @@ ppc64_elf_relocate_section (bfd *output_bfd, tls_mask = 0; tls_gd = 0; toc_symndx = 0; - if (IS_PPC64_TLS_RELOC (r_type)) + if (h != NULL) + tls_mask = h->tls_mask; + else if (local_got_ents != NULL) { - if (h != NULL) - tls_mask = h->tls_mask; - else if (local_got_ents != NULL) - { - char *lgot_masks; - lgot_masks = (char *) (local_got_ents + symtab_hdr->sh_info); - tls_mask = lgot_masks[r_symndx]; - } - if (tls_mask == 0 && r_type == R_PPC64_TLS) - { - /* Check for toc tls entries. */ - char *toc_tls; + struct plt_entry **local_plt = (struct plt_entry **) + (local_got_ents + symtab_hdr->sh_info); + char *lgot_masks = (char *) + (local_plt + symtab_hdr->sh_info); + tls_mask = lgot_masks[r_symndx]; + } + if (tls_mask == 0 + && (r_type == R_PPC64_TLS + || r_type == R_PPC64_TLSGD + || r_type == R_PPC64_TLSLD)) + { + /* Check for toc tls entries. */ + char *toc_tls; - if (!get_tls_mask (&toc_tls, &toc_symndx, &local_syms, - rel, input_bfd)) - return FALSE; + if (!get_tls_mask (&toc_tls, &toc_symndx, &toc_addend, + &local_syms, rel, input_bfd)) + return FALSE; - if (toc_tls) - tls_mask = *toc_tls; - } + if (toc_tls) + tls_mask = *toc_tls; } /* Check that tls relocs are used with tls syms, and non-tls @@ -10037,14 +10904,20 @@ ppc64_elf_relocate_section (bfd *output_bfd, && (h == NULL || h->elf.root.type == bfd_link_hash_defined || h->elf.root.type == bfd_link_hash_defweak) - && IS_PPC64_TLS_RELOC (r_type) != (sym_type == STT_TLS)) + && (IS_PPC64_TLS_RELOC (r_type) + != (sym_type == STT_TLS + || (sym_type == STT_SECTION + && (sec->flags & SEC_THREAD_LOCAL) != 0)))) { - if (r_type == R_PPC64_TLS && tls_mask != 0) + if (tls_mask != 0 + && (r_type == R_PPC64_TLS + || r_type == R_PPC64_TLSGD + || r_type == R_PPC64_TLSLD)) /* R_PPC64_TLS is OK against a symbol in the TOC. */ ; else (*_bfd_error_handler) - (sym_type == STT_TLS + (!IS_PPC64_TLS_RELOC (r_type) ? _("%B(%A+0x%lx): %s used with TLS symbol %s") : _("%B(%A+0x%lx): %s used with non-TLS symbol %s"), input_bfd, @@ -10081,8 +10954,8 @@ ppc64_elf_relocate_section (bfd *output_bfd, char *toc_tls; int retval; - retval = get_tls_mask (&toc_tls, &toc_symndx, &local_syms, - rel, input_bfd); + retval = get_tls_mask (&toc_tls, &toc_symndx, &toc_addend, + &local_syms, rel, input_bfd); if (retval == 0) return FALSE; @@ -10104,12 +10977,12 @@ ppc64_elf_relocate_section (bfd *output_bfd, { tls_gd = TLS_TPRELGD; if (tls_mask != 0 && (tls_mask & TLS_GD) == 0) - goto tls_get_addr_check; + goto tls_ldgd_opt; } else if (retval == 3) { if (tls_mask != 0 && (tls_mask & TLS_LD) == 0) - goto tls_get_addr_check; + goto tls_ldgd_opt; } } } @@ -10130,6 +11003,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (toc_symndx != 0) { rel->r_info = ELF64_R_INFO (toc_symndx, r_type); + rel->r_addend = toc_addend; /* We changed the symbol. Start over in order to get h, sym, sec etc. right. */ rel--; @@ -10183,6 +11057,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (toc_symndx != 0) { rel->r_info = ELF64_R_INFO (toc_symndx, r_type); + rel->r_addend = toc_addend; /* We changed the symbol. Start over in order to get h, sym, sec etc. right. */ rel--; @@ -10222,99 +11097,199 @@ ppc64_elf_relocate_section (bfd *output_bfd, case R_PPC64_GOT_TLSGD16_LO: tls_gd = TLS_TPRELGD; if (tls_mask != 0 && (tls_mask & TLS_GD) == 0) - goto tls_get_addr_check; + goto tls_ldgd_opt; break; case R_PPC64_GOT_TLSLD16: case R_PPC64_GOT_TLSLD16_LO: if (tls_mask != 0 && (tls_mask & TLS_LD) == 0) { - tls_get_addr_check: - if (rel + 1 < relend) + unsigned int insn1, insn2, insn3; + bfd_vma offset; + + tls_ldgd_opt: + offset = (bfd_vma) -1; + /* If not using the newer R_PPC64_TLSGD/LD to mark + __tls_get_addr calls, we must trust that the call + stays with its arg setup insns, ie. that the next + reloc is the __tls_get_addr call associated with + the current reloc. Edit both insns. */ + if (input_section->has_tls_get_addr_call + && rel + 1 < relend + && branch_reloc_hash_match (input_bfd, rel + 1, + htab->tls_get_addr, + htab->tls_get_addr_fd)) + offset = rel[1].r_offset; + if ((tls_mask & tls_gd) != 0) { - enum elf_ppc64_reloc_type r_type2; - unsigned long r_symndx2; - struct elf_link_hash_entry *h2; - bfd_vma insn1, insn2, insn3; - bfd_vma offset; - - /* The next instruction should be a call to - __tls_get_addr. Peek at the reloc to be sure. */ - r_type2 = ELF64_R_TYPE (rel[1].r_info); - r_symndx2 = ELF64_R_SYM (rel[1].r_info); - if (r_symndx2 < symtab_hdr->sh_info - || (r_type2 != R_PPC64_REL14 - && r_type2 != R_PPC64_REL14_BRTAKEN - && r_type2 != R_PPC64_REL14_BRNTAKEN - && r_type2 != R_PPC64_REL24)) - break; - - h2 = sym_hashes[r_symndx2 - symtab_hdr->sh_info]; - while (h2->root.type == bfd_link_hash_indirect - || h2->root.type == bfd_link_hash_warning) - h2 = (struct elf_link_hash_entry *) h2->root.u.i.link; - if (h2 == NULL || (h2 != &htab->tls_get_addr->elf - && h2 != &htab->tls_get_addr_fd->elf)) - break; - - /* OK, it checks out. Replace the call. */ - offset = rel[1].r_offset; + /* IE */ insn1 = bfd_get_32 (output_bfd, contents + rel->r_offset - d_offset); - insn3 = bfd_get_32 (output_bfd, - contents + offset + 4); - if ((tls_mask & tls_gd) != 0) + insn1 &= (1 << 26) - (1 << 2); + insn1 |= 58 << 26; /* ld */ + insn2 = 0x7c636a14; /* add 3,3,13 */ + if (offset != (bfd_vma) -1) + rel[1].r_info = ELF64_R_INFO (ELF64_R_SYM (rel[1].r_info), + R_PPC64_NONE); + if ((tls_mask & TLS_EXPLICIT) == 0) + r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3) + + R_PPC64_GOT_TPREL16_DS); + else + r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16; + rel->r_info = ELF64_R_INFO (r_symndx, r_type); + } + else + { + /* LE */ + insn1 = 0x3c6d0000; /* addis 3,13,0 */ + insn2 = 0x38630000; /* addi 3,3,0 */ + if (tls_gd == 0) { - /* IE */ - insn1 &= (1 << 26) - (1 << 2); - insn1 |= 58 << 26; /* ld */ - insn2 = 0x7c636a14; /* add 3,3,13 */ - rel[1].r_info = ELF64_R_INFO (r_symndx2, R_PPC64_NONE); - if ((tls_mask & TLS_EXPLICIT) == 0) - r_type = (((r_type - (R_PPC64_GOT_TLSGD16 & 3)) & 3) - + R_PPC64_GOT_TPREL16_DS); - else - r_type += R_PPC64_TOC16_DS - R_PPC64_TOC16; - rel->r_info = ELF64_R_INFO (r_symndx, r_type); + /* Was an LD reloc. */ + if (toc_symndx) + sec = local_sections[toc_symndx]; + for (r_symndx = 0; + r_symndx < symtab_hdr->sh_info; + r_symndx++) + if (local_sections[r_symndx] == sec) + break; + if (r_symndx >= symtab_hdr->sh_info) + r_symndx = 0; + rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; + if (r_symndx != 0) + rel->r_addend -= (local_syms[r_symndx].st_value + + sec->output_offset + + sec->output_section->vma); } - else + else if (toc_symndx != 0) + { + r_symndx = toc_symndx; + rel->r_addend = toc_addend; + } + r_type = R_PPC64_TPREL16_HA; + rel->r_info = ELF64_R_INFO (r_symndx, r_type); + if (offset != (bfd_vma) -1) { - /* LE */ - insn1 = 0x3c6d0000; /* addis 3,13,0 */ - insn2 = 0x38630000; /* addi 3,3,0 */ - if (tls_gd == 0) - { - /* Was an LD reloc. */ - r_symndx = 0; - rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; - rel[1].r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; - } - else if (toc_symndx != 0) - r_symndx = toc_symndx; - r_type = R_PPC64_TPREL16_HA; - 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 += d_offset; + rel[1].r_offset = offset + d_offset; + rel[1].r_addend = rel->r_addend; } + } + bfd_put_32 (output_bfd, insn1, + contents + rel->r_offset - d_offset); + if (offset != (bfd_vma) -1) + { + insn3 = bfd_get_32 (output_bfd, + contents + offset + 4); if (insn3 == NOP || insn3 == CROR_151515 || insn3 == CROR_313131) { - insn3 = insn2; - insn2 = NOP; rel[1].r_offset += 4; + bfd_put_32 (output_bfd, insn2, contents + offset + 4); + insn2 = NOP; } - 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) + } + if ((tls_mask & tls_gd) == 0 + && (tls_gd == 0 || toc_symndx != 0)) + { + /* We changed the symbol. Start over in order + to get h, sym, sec etc. right. */ + rel--; + continue; + } + } + break; + + case R_PPC64_TLSGD: + if (tls_mask != 0 && (tls_mask & TLS_GD) == 0) + { + unsigned int insn2, insn3; + bfd_vma offset = rel->r_offset; + + if ((tls_mask & TLS_TPRELGD) != 0) + { + /* IE */ + r_type = R_PPC64_NONE; + insn2 = 0x7c636a14; /* add 3,3,13 */ + } + else + { + /* LE */ + if (toc_symndx != 0) { - /* We changed the symbol. Start over in order - to get h, sym, sec etc. right. */ - rel--; - continue; + r_symndx = toc_symndx; + rel->r_addend = toc_addend; } + r_type = R_PPC64_TPREL16_LO; + rel->r_offset = offset + d_offset; + insn2 = 0x38630000; /* addi 3,3,0 */ + } + rel->r_info = ELF64_R_INFO (r_symndx, r_type); + /* Zap the reloc on the _tls_get_addr call too. */ + BFD_ASSERT (offset == rel[1].r_offset); + rel[1].r_info = ELF64_R_INFO (ELF64_R_SYM (rel[1].r_info), + R_PPC64_NONE); + insn3 = bfd_get_32 (output_bfd, + contents + offset + 4); + if (insn3 == NOP + || insn3 == CROR_151515 || insn3 == CROR_313131) + { + rel->r_offset += 4; + bfd_put_32 (output_bfd, insn2, contents + offset + 4); + insn2 = NOP; + } + bfd_put_32 (output_bfd, insn2, contents + offset); + if ((tls_mask & TLS_TPRELGD) == 0 && toc_symndx != 0) + { + rel--; + continue; + } + } + break; + + case R_PPC64_TLSLD: + if (tls_mask != 0 && (tls_mask & TLS_LD) == 0) + { + unsigned int insn2, insn3; + bfd_vma offset = rel->r_offset; + + if (toc_symndx) + sec = local_sections[toc_symndx]; + for (r_symndx = 0; + r_symndx < symtab_hdr->sh_info; + r_symndx++) + if (local_sections[r_symndx] == sec) + break; + if (r_symndx >= symtab_hdr->sh_info) + r_symndx = 0; + rel->r_addend = htab->elf.tls_sec->vma + DTP_OFFSET; + if (r_symndx != 0) + rel->r_addend -= (local_syms[r_symndx].st_value + + sec->output_offset + + sec->output_section->vma); + + r_type = R_PPC64_TPREL16_LO; + rel->r_info = ELF64_R_INFO (r_symndx, r_type); + rel->r_offset = offset + d_offset; + /* Zap the reloc on the _tls_get_addr call too. */ + BFD_ASSERT (offset == rel[1].r_offset); + rel[1].r_info = ELF64_R_INFO (ELF64_R_SYM (rel[1].r_info), + R_PPC64_NONE); + insn2 = 0x38630000; /* addi 3,3,0 */ + insn3 = bfd_get_32 (output_bfd, + contents + offset + 4); + if (insn3 == NOP + || insn3 == CROR_151515 || insn3 == CROR_313131) + { + rel->r_offset += 4; + bfd_put_32 (output_bfd, insn2, contents + offset + 4); + insn2 = NOP; } + bfd_put_32 (output_bfd, insn2, contents + offset); + rel--; + continue; } break; @@ -10391,15 +11366,19 @@ ppc64_elf_relocate_section (bfd *output_bfd, base pointer. */ stub_entry = NULL; fdh = h; - if (((h != NULL - && (((fdh = h->oh) != NULL - && fdh->elf.plt.plist != NULL) - || (fdh = h)->elf.plt.plist != NULL)) + if (h != NULL + && h->oh != NULL + && h->oh->is_func_descriptor) + fdh = ppc_follow_link (h->oh); + if (((fdh != NULL + && fdh->elf.plt.plist != NULL) || (sec != NULL && sec->output_section != NULL && sec->id <= htab->top_id && (htab->stub_group[sec->id].toc_off - != htab->stub_group[input_section->id].toc_off))) + != htab->stub_group[input_section->id].toc_off)) + || (h == NULL + && ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)) && (stub_entry = ppc_get_stub_entry (input_section, sec, fdh, rel, htab)) != NULL && (stub_entry->stub_type == ppc_stub_plt_call @@ -10415,8 +11394,16 @@ ppc64_elf_relocate_section (bfd *output_bfd, if (nop == NOP || nop == CROR_151515 || nop == CROR_313131) { - bfd_put_32 (input_bfd, LD_R2_40R1, - contents + rel->r_offset + 4); + if (h != NULL + && (h == htab->tls_get_addr_fd + || h == htab->tls_get_addr) + && !htab->no_tls_get_addr_opt) + { + /* Special stub used, leave nop alone. */ + } + else + bfd_put_32 (input_bfd, LD_R2_40R1, + contents + rel->r_offset + 4); can_plt_call = TRUE; } } @@ -10571,6 +11558,8 @@ ppc64_elf_relocate_section (bfd *output_bfd, case R_PPC64_NONE: case R_PPC64_TLS: + case R_PPC64_TLSGD: + case R_PPC64_TLSLD: case R_PPC64_GNU_VTINHERIT: case R_PPC64_GNU_VTENTRY: continue; @@ -10681,13 +11670,23 @@ ppc64_elf_relocate_section (bfd *output_bfd, /* Generate relocs for the dynamic linker, except in the case of TLSLD where we'll use one entry per module. */ - asection *relgot = ppc64_elf_tdata (input_bfd)->relgot; + asection *relgot; + bfd_boolean ifunc; *offp = off | 1; + relgot = NULL; + ifunc = (h != NULL + ? h->elf.type == STT_GNU_IFUNC + : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC); if ((info->shared || indx != 0) - && (h == NULL + && (offp == &ppc64_tlsld_got (input_bfd)->offset + || h == NULL || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT || h->elf.root.type != bfd_link_hash_undefweak)) + relgot = ppc64_elf_tdata (input_bfd)->relgot; + else if (ifunc) + relgot = htab->reliplt; + if (relgot != NULL) { outrel.r_offset = (got->output_section->vma + got->output_offset @@ -10714,9 +11713,14 @@ ppc64_elf_relocate_section (bfd *output_bfd, outrel.r_info = ELF64_R_INFO (indx, R_PPC64_DTPREL64); else if (tls_type == (TLS_TLS | TLS_TPREL)) outrel.r_info = ELF64_R_INFO (indx, R_PPC64_TPREL64); - else if (indx == 0) + else if (indx != 0) + outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT); + else { - outrel.r_info = ELF64_R_INFO (indx, R_PPC64_RELATIVE); + if (ifunc) + outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE); + else + outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE); /* Write the .got section contents for the sake of prelink. */ @@ -10724,8 +11728,6 @@ ppc64_elf_relocate_section (bfd *output_bfd, bfd_put_64 (output_bfd, outrel.r_addend + relocation, loc); } - else - outrel.r_info = ELF64_R_INFO (indx, R_PPC64_GLOB_DAT); if (indx == 0 && tls_type != (TLS_TLS | TLS_LD)) { @@ -10844,6 +11846,12 @@ ppc64_elf_relocate_section (bfd *output_bfd, addend -= sec->output_section->vma; break; + case R_PPC64_REL16: + case R_PPC64_REL16_LO: + case R_PPC64_REL16_HI: + case R_PPC64_REL16_HA: + break; + case R_PPC64_REL14: case R_PPC64_REL14_BRNTAKEN: case R_PPC64_REL14_BRTAKEN: @@ -10929,15 +11937,18 @@ ppc64_elf_relocate_section (bfd *output_bfd, && (h == NULL || ELF_ST_VISIBILITY (h->elf.other) == STV_DEFAULT || h->elf.root.type != bfd_link_hash_undefweak) - && (MUST_BE_DYN_RELOC (r_type) + && (must_be_dyn_reloc (info, r_type) || !SYMBOL_CALLS_LOCAL (info, &h->elf))) || (ELIMINATE_COPY_RELOCS && !info->shared && h != NULL && h->elf.dynindx != -1 && !h->elf.non_got_ref - && h->elf.def_dynamic - && !h->elf.def_regular)) + && !h->elf.def_regular) + || (!info->shared + && (h != NULL + ? h->elf.type == STT_GNU_IFUNC + : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))) { Elf_Internal_Rela outrel; bfd_boolean skip, relocate; @@ -11002,19 +12013,42 @@ ppc64_elf_relocate_section (bfd *output_bfd, entry in this lib. */ unresolved_reloc = FALSE; } - outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE); + if (!is_opd + && r_type == R_PPC64_ADDR64 + && (h != NULL + ? h->elf.type == STT_GNU_IFUNC + : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)) + outrel.r_info = ELF64_R_INFO (0, R_PPC64_IRELATIVE); + else + { + outrel.r_info = ELF64_R_INFO (0, R_PPC64_RELATIVE); - /* We need to relocate .opd contents for ld.so. - Prelink also wants simple and consistent rules - for relocs. This make all RELATIVE relocs have - *r_offset equal to r_addend. */ - relocate = TRUE; + /* We need to relocate .opd contents for ld.so. + Prelink also wants simple and consistent rules + for relocs. This make all RELATIVE relocs have + *r_offset equal to r_addend. */ + relocate = TRUE; + } } else { long indx = 0; - if (bfd_is_abs_section (sec)) + if (h != NULL + ? h->elf.type == STT_GNU_IFUNC + : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + { + (*_bfd_error_handler) + (_("%B(%A+0x%lx): relocation %s for indirect " + "function %s unsupported"), + input_bfd, + input_section, + (long) rel->r_offset, + ppc64_elf_howto_table[r_type]->name, + sym_name); + ret = FALSE; + } + else if (r_symndx == 0 || bfd_is_abs_section (sec)) ; else if (sec == NULL || sec->owner == NULL) { @@ -11052,6 +12086,8 @@ ppc64_elf_relocate_section (bfd *output_bfd, } sreloc = elf_section_data (input_section)->sreloc; + if (!htab->elf.dynamic_sections_created) + sreloc = htab->reliplt; if (sreloc == NULL) abort (); @@ -11093,6 +12129,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, case R_PPC64_COPY: case R_PPC64_GLOB_DAT: case R_PPC64_JMP_SLOT: + case R_PPC64_JMP_IREL: case R_PPC64_RELATIVE: /* We shouldn't ever see these dynamic relocs in relocatable files. */ @@ -11125,6 +12162,7 @@ ppc64_elf_relocate_section (bfd *output_bfd, break; case R_PPC64_ADDR16_HA: + case R_PPC64_REL16_HA: case R_PPC64_ADDR16_HIGHERA: case R_PPC64_ADDR16_HIGHESTA: case R_PPC64_TOC16_HA: @@ -11290,33 +12328,34 @@ ppc64_elf_relocate_section (bfd *output_bfd, /* Adjust the value of any local symbols in opd sections. */ -static bfd_boolean +static int ppc64_elf_output_symbol_hook (struct bfd_link_info *info, const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *elfsym, asection *input_sec, struct elf_link_hash_entry *h) { - long *opd_adjust, adjust; + struct _opd_sec_data *opd; + long adjust; bfd_vma value; if (h != NULL) - return TRUE; + return 1; - opd_adjust = get_opd_info (input_sec); - if (opd_adjust == NULL) - return TRUE; + opd = get_opd_info (input_sec); + if (opd == NULL || opd->adjust == NULL) + return 1; value = elfsym->st_value - input_sec->output_offset; if (!info->relocatable) value -= input_sec->output_section->vma; - adjust = opd_adjust[value / 8]; + adjust = opd->adjust[value / 8]; if (adjust == -1) - elfsym->st_value = 0; - else - elfsym->st_value += adjust; - return TRUE; + return 2; + + elfsym->st_value += adjust; + return 1; } /* Finish up dynamic symbol handling. We set the contents of various @@ -11340,23 +12379,36 @@ ppc64_elf_finish_dynamic_symbol (bfd *output_bfd, { /* This symbol has an entry in the procedure linkage table. Set it up. */ - - if (htab->plt == NULL - || htab->relplt == NULL - || htab->glink == NULL) - abort (); - - /* Create a JMP_SLOT reloc to inform the dynamic linker to - fill in the PLT entry. */ - rela.r_offset = (htab->plt->output_section->vma - + htab->plt->output_offset - + ent->plt.offset); - rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT); - rela.r_addend = ent->addend; - - loc = htab->relplt->contents; - loc += ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE) / PLT_ENTRY_SIZE - * sizeof (Elf64_External_Rela)); + if (!htab->elf.dynamic_sections_created + || h->dynindx == -1) + { + BFD_ASSERT (h->type == STT_GNU_IFUNC + && h->def_regular + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak)); + rela.r_offset = (htab->iplt->output_section->vma + + htab->iplt->output_offset + + ent->plt.offset); + rela.r_info = ELF64_R_INFO (0, R_PPC64_JMP_IREL); + rela.r_addend = (h->root.u.def.value + + h->root.u.def.section->output_offset + + h->root.u.def.section->output_section->vma + + ent->addend); + loc = (htab->reliplt->contents + + (htab->reliplt->reloc_count++ + * sizeof (Elf64_External_Rela))); + } + else + { + rela.r_offset = (htab->plt->output_section->vma + + htab->plt->output_offset + + ent->plt.offset); + rela.r_info = ELF64_R_INFO (h->dynindx, R_PPC64_JMP_SLOT); + rela.r_addend = ent->addend; + loc = (htab->relplt->contents + + ((ent->plt.offset - PLT_INITIAL_ENTRY_SIZE) + / (PLT_ENTRY_SIZE / sizeof (Elf64_External_Rela)))); + } bfd_elf64_swap_reloca_out (output_bfd, &rela, loc); } @@ -11541,6 +12593,15 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd, NULL)) return FALSE; + if (htab->glink != NULL + && htab->glink->reloc_count != 0 + && !_bfd_elf_link_output_relocs (output_bfd, + htab->glink, + &elf_section_data (htab->glink)->rel_hdr, + elf_section_data (htab->glink)->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. */ @@ -11548,7 +12609,7 @@ ppc64_elf_finish_dynamic_sections (bfd *output_bfd, { asection *s; - if (!is_ppc64_elf_target (dynobj->xvec)) + if (!is_ppc64_elf (dynobj)) continue; s = ppc64_elf_tdata (dynobj)->got; diff --git a/bfd/elf64-ppc.h b/bfd/elf64-ppc.h index cdd79d2..e5f7140 100644 --- a/bfd/elf64-ppc.h +++ b/bfd/elf64-ppc.h @@ -1,5 +1,6 @@ /* PowerPC64-specific support for 64-bit ELF. - Copyright 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2002, 2003, 2004, 2005, 2007, 2008 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -21,9 +22,9 @@ void ppc64_elf_init_stub_bfd (bfd *, struct bfd_link_info *); bfd_boolean ppc64_elf_edit_opd - (bfd *, struct bfd_link_info *, bfd_boolean, bfd_boolean); + (bfd *, struct bfd_link_info *, bfd_boolean); asection *ppc64_elf_tls_setup - (bfd *, struct bfd_link_info *); +(bfd *, struct bfd_link_info *, int); bfd_boolean ppc64_elf_tls_optimize (bfd *, struct bfd_link_info *); bfd_boolean ppc64_elf_edit_toc diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 02dbdec..fbe8668 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, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed Martin Schwidefsky (schwidefsky@de.ibm.com). @@ -629,11 +629,13 @@ struct elf_s390_link_hash_entry #define elf_s390_hash_entry(ent) \ ((struct elf_s390_link_hash_entry *)(ent)) +/* NOTE: Keep this structure in sync with + the one declared in elf32-s390.c. */ struct elf_s390_obj_tdata { struct elf_obj_tdata root; - /* tls_type for each local got entry. */ + /* TLS type for each local got entry. */ char *local_got_tls_type; }; @@ -643,17 +645,16 @@ struct elf_s390_obj_tdata #define elf_s390_local_got_tls_type(abfd) \ (elf_s390_tdata (abfd)->local_got_tls_type) +#define is_s390_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == S390_ELF_TDATA) + static bfd_boolean elf_s390_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct elf_s390_obj_tdata), + S390_ELF_TDATA); } static bfd_boolean @@ -684,8 +685,8 @@ struct elf_s390_link_hash_table bfd_vma offset; } tls_ldm_got; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; }; /* Get the s390 ELF linker hash table from a link_info structure. */ @@ -754,7 +755,7 @@ elf_s390_link_hash_table_create (abfd) ret->sdynbss = NULL; ret->srelbss = NULL; ret->tls_ldm_got.refcount = 0; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; return &ret->elf.root; } @@ -775,18 +776,9 @@ create_got_section (dynobj, info) htab = elf_s390_hash_table (info); htab->sgot = bfd_get_section_by_name (dynobj, ".got"); htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (!htab->sgot || !htab->sgotplt) + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); + if (!htab->sgot || !htab->sgotplt || !htab->srelgot) abort (); - - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 3)) - return FALSE; return TRUE; } @@ -937,8 +929,10 @@ elf_s390_check_relocs (abfd, info, sec, relocs) if (info->relocatable) return TRUE; + BFD_ASSERT (is_s390_elf (abfd)); + htab = elf_s390_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1225,7 +1219,7 @@ elf_s390_check_relocs (abfd, info, sec, relocs) && ELF64_R_TYPE (rel->r_info) != R_390_PC32DBL && ELF64_R_TYPE (rel->r_info) != R_390_PC64) || (h != NULL - && (! info->symbolic + && (! SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak || !h->def_regular)))) || (ELIMINATE_COPY_RELOCS @@ -1243,46 +1237,14 @@ elf_s390_check_relocs (abfd, info, sec, relocs) this reloc. */ if (sreloc == NULL) { - const char *name; - bfd *dynobj; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - if (! CONST_STRNEQ (name, ".rela") - || strcmp (bfd_get_section_name (abfd, sec), - name + 5) != 0) - { - (*_bfd_error_handler) - (_("%B: bad relocation section name `%s\'"), - abfd, name); - } - if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - dynobj = htab->elf.dynobj; - sreloc = bfd_get_section_by_name (dynobj, name); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE); + if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 3)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -1296,15 +1258,19 @@ elf_s390_check_relocs (abfd, info, sec, relocs) /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct elf_s390_dyn_relocs **) vpp; } @@ -1344,7 +1310,9 @@ elf_s390_check_relocs (abfd, info, sec, relocs) /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_390_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -1390,9 +1358,12 @@ elf_s390_gc_sweep_hook (bfd *abfd, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1565,11 +1536,9 @@ elf_s390_adjust_dynamic_symbol (info, h) || h->needs_plt) { if (h->plt.refcount <= 0 - || (! info->shared - && !h->def_dynamic - && !h->ref_dynamic - && h->root.type != bfd_link_hash_undefweak - && h->root.type != bfd_link_hash_undefined)) + || SYMBOL_CALLS_LOCAL (info, h) + || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type == bfd_link_hash_undefweak)) { /* This case can occur if we saw a PLT32 reloc in an input file, but the symbol was never referred to by a dynamic @@ -1708,9 +1677,7 @@ allocate_dynrelocs (h, inf) htab = elf_s390_hash_table (info); if (htab->elf.dynamic_sections_created - && h->plt.refcount > 0 - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak)) + && h->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. Undefined weak syms won't yet be marked as dynamic. */ @@ -1839,7 +1806,7 @@ allocate_dynrelocs (h, inf) if (info->shared) { - if (SYMBOL_REFERENCES_LOCAL (info, h)) + if (SYMBOL_CALLS_LOCAL (info, h)) { struct elf_s390_dyn_relocs **pp; @@ -1988,7 +1955,7 @@ elf_s390_size_dynamic_sections (output_bfd, info) Elf_Internal_Shdr *symtab_hdr; asection *srela; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_s390_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) @@ -2019,7 +1986,7 @@ elf_s390_size_dynamic_sections (output_bfd, info) if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = elf_s390_local_got_tls_type (ibfd); @@ -2238,8 +2205,10 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; + BFD_ASSERT (is_s390_elf (input_bfd)); + htab = elf_s390_hash_table (info); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); @@ -2362,10 +2331,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, dyn = htab->elf.dynamic_sections_created; if (! WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h) || (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular) + && SYMBOL_REFERENCES_LOCAL (info, h)) || (ELF_ST_VISIBILITY (h->other) && h->root.type == bfd_link_hash_undefweak)) { @@ -2541,8 +2507,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, && r_type != R_390_PC32 && r_type != R_390_PC32DBL && r_type != R_390_PC64) - || (h != NULL - && !SYMBOL_REFERENCES_LOCAL (info, h)))) + || !SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS && !info->shared && h != NULL @@ -2585,7 +2550,7 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, || r_type == R_390_PC32DBL || r_type == R_390_PC64 || !info->shared - || !info->symbolic + || !SYMBOLIC_BIND (info, h) || !h->def_regular)) { outrel.r_info = ELF64_R_INFO (h->dynindx, r_type); @@ -3190,11 +3155,10 @@ elf_s390_finish_dynamic_symbol (output_bfd, info, h, sym) The entry in the global offset table will already have been initialized in the relocate_section function. */ if (info->shared - && (info->symbolic - || h->dynindx == -1 - || h->forced_local) - && h->def_regular) + && SYMBOL_REFERENCES_LOCAL (info, h)) { + if (!h->def_regular) + return FALSE; BFD_ASSERT((h->got.offset & 1) != 0); rela.r_info = ELF64_R_INFO (0, R_390_RELATIVE); rela.r_addend = (h->root.u.def.value diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c index bf35ea6..478197d 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, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -1725,22 +1725,10 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, if (sreloc == NULL) { - const char *name; - - name = (bfd_elf_string_from_elf_section - (input_bfd, - elf_elfheader (input_bfd)->e_shstrndx, - elf_section_data (input_section)->rel_hdr.sh_name)); - if (name == NULL) + sreloc = _bfd_elf_get_dynamic_reloc_section + (input_bfd, input_section, /*rela?*/ TRUE); + if (sreloc == NULL) return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (input_bfd, - input_section), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (sreloc != NULL); } skip = FALSE; @@ -2195,17 +2183,12 @@ sh_elf64_get_relocated_section_contents (bfd *output_bfd, if (isymp->st_shndx == SHN_UNDEF) isec = bfd_und_section_ptr; - else if (isymp->st_shndx > 0 && isymp->st_shndx < SHN_LORESERVE) - isec = bfd_section_from_elf_index (input_bfd, isymp->st_shndx); else if (isymp->st_shndx == SHN_ABS) isec = bfd_abs_section_ptr; else if (isymp->st_shndx == SHN_COMMON) isec = bfd_com_section_ptr; else - { - /* Who knows? */ - isec = NULL; - } + isec = bfd_section_from_elf_index (input_bfd, isymp->st_shndx); *secpp = isec; } @@ -2419,7 +2402,7 @@ sh_elf64_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, **sym_hashes_end; + struct elf_link_hash_entry **sym_hashes; const Elf_Internal_Rela *rel; const Elf_Internal_Rela *rel_end; bfd *dynobj; @@ -2437,9 +2420,6 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); - sym_hashes_end = sym_hashes + symtab_hdr->sh_size/sizeof(Elf64_External_Sym); - if (!elf_bad_symtab (abfd)) - sym_hashes_end -= symtab_hdr->sh_info; dynobj = elf_hash_table (info)->dynobj; local_got_offsets = elf_local_got_offsets (abfd); @@ -2508,7 +2488,9 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_SH_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -2717,35 +2699,11 @@ sh_elf64_check_relocs (bfd *abfd, struct bfd_link_info *info, section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - const char *name; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, dynobj, 2, abfd, /*rela?*/ TRUE); - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); - - sreloc = bfd_get_section_by_name (dynobj, name); if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 2)) - return FALSE; - } + return FALSE; } sreloc->size += sizeof (Elf64_External_Rela); @@ -2921,7 +2879,7 @@ sh64_elf64_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, we don't need to look up and make sure to emit the main symbol for each DataLabel symbol. */ -static bfd_boolean +static int sh64_elf64_link_output_symbol_hook (struct bfd_link_info *info, const char *cname, Elf_Internal_Sym *sym, @@ -2936,7 +2894,7 @@ sh64_elf64_link_output_symbol_hook (struct bfd_link_info *info, name[strlen (name) - strlen (DATALABEL_SUFFIX)] = 0; } - return TRUE; + return 1; } /* Set bit 0 on the entry address; it always points to SHmedia code. This diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 459e312..18bdfb4 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -441,7 +441,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, return FALSE; } - if (info->hash->creator != abfd->xvec + if (info->output_bfd->xvec != abfd->xvec || (abfd->flags & DYNAMIC) != 0) { /* STT_REGISTER only works when linking an elf64_sparc object. @@ -510,7 +510,7 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, return TRUE; } else if (*namep && **namep - && info->hash->creator == abfd->xvec) + && info->output_bfd->xvec == abfd->xvec) { int i; struct _bfd_sparc_elf_app_reg *p; @@ -538,10 +538,11 @@ elf64_sparc_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, static bfd_boolean elf64_sparc_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED, struct bfd_link_info *info, - PTR finfo, bfd_boolean (*func) (PTR, const char *, - Elf_Internal_Sym *, - asection *, - struct elf_link_hash_entry *)) + PTR finfo, + int (*func) (PTR, const char *, + Elf_Internal_Sym *, + asection *, + struct elf_link_hash_entry *)) { int reg; struct _bfd_sparc_elf_app_reg *app_regs = @@ -585,10 +586,10 @@ elf64_sparc_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED, sym.st_other = 0; sym.st_info = ELF_ST_INFO (app_regs [reg].bind, STT_REGISTER); sym.st_shndx = app_regs [reg].shndx; - if (! (*func) (finfo, app_regs [reg].name, &sym, - sym.st_shndx == SHN_ABS - ? bfd_abs_section_ptr : bfd_und_section_ptr, - NULL)) + if ((*func) (finfo, app_regs [reg].name, &sym, + sym.st_shndx == SHN_ABS + ? bfd_abs_section_ptr : bfd_und_section_ptr, + NULL) != 1) return FALSE; } @@ -870,6 +871,8 @@ const struct elf_size_info elf64_sparc_size_info = #define elf_backend_create_dynamic_sections \ _bfd_sparc_elf_create_dynamic_sections +#define elf_backend_relocs_compatible \ + _bfd_elf_relocs_compatible #define elf_backend_check_relocs \ _bfd_sparc_elf_check_relocs #define elf_backend_adjust_dynamic_symbol \ diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 389c89a..4fb325a 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, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Jan Hubicka . @@ -25,6 +25,9 @@ #include "bfdlink.h" #include "libbfd.h" #include "elf-bfd.h" +#include "bfd_stdint.h" +#include "objalloc.h" +#include "hashtab.h" #include "elf/x86-64.h" @@ -142,12 +145,15 @@ static reloc_howto_type x86_64_elf_howto_table[] = complain_overflow_bitfield, bfd_elf_generic_reloc, "R_X86_64_TLSDESC", FALSE, MINUS_ONE, MINUS_ONE, FALSE), + HOWTO(R_X86_64_IRELATIVE, 0, 4, 64, FALSE, 0, complain_overflow_bitfield, + bfd_elf_generic_reloc, "R_X86_64_IRELATIVE", FALSE, MINUS_ONE, + MINUS_ONE, FALSE), /* We have a gap in the reloc numbers here. R_X86_64_standard counts the number up to this point, and R_X86_64_vt_offset is the value to subtract from a reloc type of R_X86_64_GNU_VT* to form an index into this table. */ -#define R_X86_64_standard (R_X86_64_TLSDESC + 1) +#define R_X86_64_standard (R_X86_64_IRELATIVE + 1) #define R_X86_64_vt_offset (R_X86_64_GNU_VTINHERIT - R_X86_64_standard) /* GNU extension to record C++ vtable hierarchy. */ @@ -160,6 +166,12 @@ static reloc_howto_type x86_64_elf_howto_table[] = FALSE) }; +#define IS_X86_64_PCREL_TYPE(TYPE) \ + ( ((TYPE) == R_X86_64_PC8) \ + || ((TYPE) == R_X86_64_PC16) \ + || ((TYPE) == R_X86_64_PC32) \ + || ((TYPE) == R_X86_64_PC64)) + /* Map BFD relocs to the x86_64 elf relocs. */ struct elf_reloc_map { @@ -204,6 +216,7 @@ static const struct elf_reloc_map x86_64_reloc_map[] = { BFD_RELOC_X86_64_GOTPC32_TLSDESC, R_X86_64_GOTPC32_TLSDESC, }, { BFD_RELOC_X86_64_TLSDESC_CALL, R_X86_64_TLSDESC_CALL, }, { BFD_RELOC_X86_64_TLSDESC, R_X86_64_TLSDESC, }, + { BFD_RELOC_X86_64_IRELATIVE, R_X86_64_IRELATIVE, }, { BFD_RELOC_VTABLE_INHERIT, R_X86_64_GNU_VTINHERIT, }, { BFD_RELOC_VTABLE_ENTRY, R_X86_64_GNU_VTENTRY, }, }; @@ -383,27 +396,6 @@ static const bfd_byte elf64_x86_64_plt_entry[PLT_ENTRY_SIZE] = 0, 0, 0, 0 /* replaced with offset to start of .plt0. */ }; -/* The x86-64 linker needs to keep track of the number of relocs that - it decides to copy as dynamic relocs in check_relocs for each symbol. - This is so that it can later discard them if they are found to be - unnecessary. We store the information in a field extending the - regular ELF linker hash table. */ - -struct elf64_x86_64_dyn_relocs -{ - /* Next section. */ - struct elf64_x86_64_dyn_relocs *next; - - /* The input section of the reloc. */ - asection *sec; - - /* Total number of relocs copied for the input section. */ - bfd_size_type count; - - /* Number of pc-relative relocs copied for the input section. */ - bfd_size_type pc_count; -}; - /* x86-64 ELF linker hash entry. */ struct elf64_x86_64_link_hash_entry @@ -411,7 +403,7 @@ struct elf64_x86_64_link_hash_entry struct elf_link_hash_entry elf; /* Track dynamic relocs copied for this symbol. */ - struct elf64_x86_64_dyn_relocs *dyn_relocs; + struct elf_dyn_relocs *dyn_relocs; #define GOT_UNKNOWN 0 #define GOT_NORMAL 1 @@ -456,6 +448,18 @@ struct elf64_x86_64_obj_tdata #define elf64_x86_64_local_tlsdesc_gotent(abfd) \ (elf64_x86_64_tdata (abfd)->local_tlsdesc_gotent) +#define is_x86_64_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == X86_64_ELF_TDATA) + +static bfd_boolean +elf64_x86_64_mkobject (bfd *abfd) +{ + return bfd_elf_allocate_object (abfd, sizeof (struct elf64_x86_64_obj_tdata), + X86_64_ELF_TDATA); +} + /* x86-64 ELF linker hash table. */ struct elf64_x86_64_link_hash_table @@ -463,11 +467,6 @@ struct elf64_x86_64_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 *sdynbss; asection *srelbss; @@ -488,8 +487,15 @@ struct elf64_x86_64_link_hash_table /* The amount of space used by the jump slots in the GOT. */ bfd_vma sgotplt_jump_table_size; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; + + /* _TLS_MODULE_BASE_ symbol. */ + struct bfd_link_hash_entry *tls_module_base; + + /* Used by local STT_GNU_IFUNC symbols. */ + htab_t loc_hash_table; + void *loc_hash_memory; }; /* Get the x86-64 ELF linker hash table from a link_info structure. */ @@ -498,20 +504,22 @@ struct elf64_x86_64_link_hash_table ((struct elf64_x86_64_link_hash_table *) ((p)->hash)) #define elf64_x86_64_compute_jump_table_size(htab) \ - ((htab)->srelplt->reloc_count * GOT_ENTRY_SIZE) + ((htab)->elf.srelplt->reloc_count * GOT_ENTRY_SIZE) /* Create an entry in an x86-64 ELF linker hash table. */ static struct bfd_hash_entry * -link_hash_newfunc (struct bfd_hash_entry *entry, struct bfd_hash_table *table, - const char *string) +elf64_x86_64_link_hash_newfunc (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { /* Allocate the structure if it has not already been allocated by a subclass. */ if (entry == NULL) { - entry = bfd_hash_allocate (table, - sizeof (struct elf64_x86_64_link_hash_entry)); + entry = (struct bfd_hash_entry *) + bfd_hash_allocate (table, + sizeof (struct elf64_x86_64_link_hash_entry)); if (entry == NULL) return entry; } @@ -531,6 +539,75 @@ link_hash_newfunc (struct bfd_hash_entry *entry, struct bfd_hash_table *table, return entry; } +/* Compute a hash of a local hash entry. We use elf_link_hash_entry + for local symbol so that we can handle local STT_GNU_IFUNC symbols + as global symbol. We reuse indx and dynstr_index for local symbol + hash since they aren't used by global symbols in this backend. */ + +static hashval_t +elf64_x86_64_local_htab_hash (const void *ptr) +{ + struct elf_link_hash_entry *h + = (struct elf_link_hash_entry *) ptr; + return ELF_LOCAL_SYMBOL_HASH (h->indx, h->dynstr_index); +} + +/* Compare local hash entries. */ + +static int +elf64_x86_64_local_htab_eq (const void *ptr1, const void *ptr2) +{ + struct elf_link_hash_entry *h1 + = (struct elf_link_hash_entry *) ptr1; + struct elf_link_hash_entry *h2 + = (struct elf_link_hash_entry *) ptr2; + + return h1->indx == h2->indx && h1->dynstr_index == h2->dynstr_index; +} + +/* Find and/or create a hash entry for local symbol. */ + +static struct elf_link_hash_entry * +elf64_x86_64_get_local_sym_hash (struct elf64_x86_64_link_hash_table *htab, + bfd *abfd, const Elf_Internal_Rela *rel, + bfd_boolean create) +{ + struct elf64_x86_64_link_hash_entry e, *ret; + asection *sec = abfd->sections; + hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id, + ELF64_R_SYM (rel->r_info)); + void **slot; + + e.elf.indx = sec->id; + e.elf.dynstr_index = ELF64_R_SYM (rel->r_info); + slot = htab_find_slot_with_hash (htab->loc_hash_table, &e, h, + create ? INSERT : NO_INSERT); + + if (!slot) + return NULL; + + if (*slot) + { + ret = (struct elf64_x86_64_link_hash_entry *) *slot; + return &ret->elf; + } + + ret = (struct elf64_x86_64_link_hash_entry *) + objalloc_alloc ((struct objalloc *) htab->loc_hash_memory, + sizeof (struct elf64_x86_64_link_hash_entry)); + if (ret) + { + memset (ret, 0, sizeof (*ret)); + ret->elf.indx = sec->id; + ret->elf.dynstr_index = ELF64_R_SYM (rel->r_info); + ret->elf.dynindx = -1; + ret->elf.plt.offset = (bfd_vma) -1; + ret->elf.got.offset = (bfd_vma) -1; + *slot = ret; + } + return &ret->elf; +} + /* Create an X86-64 ELF linker hash table. */ static struct bfd_link_hash_table * @@ -543,56 +620,50 @@ elf64_x86_64_link_hash_table_create (bfd *abfd) if (ret == NULL) return NULL; - if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, link_hash_newfunc, + if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd, + elf64_x86_64_link_hash_newfunc, sizeof (struct elf64_x86_64_link_hash_entry))) { free (ret); return NULL; } - ret->sgot = NULL; - ret->sgotplt = NULL; - ret->srelgot = NULL; - ret->splt = NULL; - ret->srelplt = NULL; ret->sdynbss = NULL; ret->srelbss = NULL; - ret->sym_sec.abfd = NULL; + ret->sym_cache.abfd = NULL; ret->tlsdesc_plt = 0; ret->tlsdesc_got = 0; ret->tls_ld_got.refcount = 0; ret->sgotplt_jump_table_size = 0; + ret->tls_module_base = NULL; + + ret->loc_hash_table = htab_try_create (1024, + elf64_x86_64_local_htab_hash, + elf64_x86_64_local_htab_eq, + NULL); + ret->loc_hash_memory = objalloc_create (); + if (!ret->loc_hash_table || !ret->loc_hash_memory) + { + free (ret); + return NULL; + } return &ret->elf.root; } -/* Create .got, .gotplt, and .rela.got sections in DYNOBJ, and set up - shortcuts to them in our hash table. */ +/* Destroy an X86-64 ELF linker hash table. */ -static bfd_boolean -create_got_section (bfd *dynobj, struct bfd_link_info *info) +static void +elf64_x86_64_link_hash_table_free (struct bfd_link_hash_table *hash) { - struct elf64_x86_64_link_hash_table *htab; - - if (! _bfd_elf_create_got_section (dynobj, info)) - return FALSE; - - htab = elf64_x86_64_hash_table (info); - htab->sgot = bfd_get_section_by_name (dynobj, ".got"); - htab->sgotplt = bfd_get_section_by_name (dynobj, ".got.plt"); - if (!htab->sgot || !htab->sgotplt) - abort (); - - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (htab->srelgot == NULL - || ! bfd_set_section_alignment (dynobj, htab->srelgot, 3)) - return FALSE; - return TRUE; + struct elf64_x86_64_link_hash_table *htab + = (struct elf64_x86_64_link_hash_table *) hash; + + if (htab->loc_hash_table) + htab_delete (htab->loc_hash_table); + if (htab->loc_hash_memory) + objalloc_free ((struct objalloc *) htab->loc_hash_memory); + _bfd_generic_link_hash_table_free (hash); } /* Create .plt, .rela.plt, .got, .got.plt, .rela.got, .dynbss, and @@ -604,20 +675,15 @@ elf64_x86_64_create_dynamic_sections (bfd *dynobj, struct bfd_link_info *info) { struct elf64_x86_64_link_hash_table *htab; - htab = elf64_x86_64_hash_table (info); - if (!htab->sgot && !create_got_section (dynobj, info)) - return FALSE; - 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 = elf64_x86_64_hash_table (info); htab->sdynbss = bfd_get_section_by_name (dynobj, ".dynbss"); if (!info->shared) htab->srelbss = bfd_get_section_by_name (dynobj, ".rela.bss"); - if (!htab->splt || !htab->srelplt || !htab->sdynbss + if (!htab->sdynbss || (!info->shared && !htab->srelbss)) abort (); @@ -640,14 +706,14 @@ elf64_x86_64_copy_indirect_symbol (struct bfd_link_info *info, { if (edir->dyn_relocs != NULL) { - struct elf64_x86_64_dyn_relocs **pp; - struct elf64_x86_64_dyn_relocs *p; + struct elf_dyn_relocs **pp; + struct elf_dyn_relocs *p; /* Add reloc counts against the indirect sym to the direct sym list. Merge any entries against the same section. */ for (pp = &eind->dyn_relocs; (p = *pp) != NULL; ) { - struct elf64_x86_64_dyn_relocs *q; + struct elf_dyn_relocs *q; for (q = edir->dyn_relocs; q != NULL; q = q->next) if (q->sec == p->sec) @@ -691,19 +757,6 @@ elf64_x86_64_copy_indirect_symbol (struct bfd_link_info *info, _bfd_elf_link_hash_copy_indirect (info, dir, ind); } -static bfd_boolean -elf64_x86_64_mkobject (bfd *abfd) -{ - if (abfd->tdata.any == NULL) - { - 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 elf64_x86_64_elf_object_p (bfd *abfd) { @@ -712,26 +765,278 @@ elf64_x86_64_elf_object_p (bfd *abfd) return TRUE; } -static int -elf64_x86_64_tls_transition (struct bfd_link_info *info, int r_type, int is_local) +typedef union + { + unsigned char c[2]; + uint16_t i; + } +x86_64_opcode16; + +typedef union + { + unsigned char c[4]; + uint32_t i; + } +x86_64_opcode32; + +/* Return TRUE if the TLS access code sequence support transition + from R_TYPE. */ + +static bfd_boolean +elf64_x86_64_check_tls_transition (bfd *abfd, asection *sec, + bfd_byte *contents, + Elf_Internal_Shdr *symtab_hdr, + struct elf_link_hash_entry **sym_hashes, + unsigned int r_type, + const Elf_Internal_Rela *rel, + const Elf_Internal_Rela *relend) { - if (info->shared) - return r_type; + unsigned int val; + unsigned long r_symndx; + struct elf_link_hash_entry *h; + bfd_vma offset; + + /* Get the section contents. */ + if (contents == NULL) + { + if (elf_section_data (sec)->this_hdr.contents != NULL) + contents = elf_section_data (sec)->this_hdr.contents; + else + { + /* FIXME: How to better handle error condition? */ + if (!bfd_malloc_and_get_section (abfd, sec, &contents)) + return FALSE; + + /* Cache the section contents for elf_link_input_bfd. */ + elf_section_data (sec)->this_hdr.contents = contents; + } + } + offset = rel->r_offset; switch (r_type) + { + case R_X86_64_TLSGD: + case R_X86_64_TLSLD: + if ((rel + 1) >= relend) + return FALSE; + + if (r_type == R_X86_64_TLSGD) + { + /* Check transition from GD access model. Only + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .word 0x6666; rex64; call __tls_get_addr + can transit to different access model. */ + + static x86_64_opcode32 leaq = { { 0x66, 0x48, 0x8d, 0x3d } }, + call = { { 0x66, 0x66, 0x48, 0xe8 } }; + if (offset < 4 + || (offset + 12) > sec->size + || bfd_get_32 (abfd, contents + offset - 4) != leaq.i + || bfd_get_32 (abfd, contents + offset + 4) != call.i) + return FALSE; + } + else + { + /* Check transition from LD access model. Only + leaq foo@tlsld(%rip), %rdi; + call __tls_get_addr + can transit to different access model. */ + + static x86_64_opcode32 ld = { { 0x48, 0x8d, 0x3d, 0xe8 } }; + x86_64_opcode32 op; + + if (offset < 3 || (offset + 9) > sec->size) + return FALSE; + + op.i = bfd_get_32 (abfd, contents + offset - 3); + op.c[3] = bfd_get_8 (abfd, contents + offset + 4); + if (op.i != ld.i) + return FALSE; + } + + r_symndx = ELF64_R_SYM (rel[1].r_info); + if (r_symndx < symtab_hdr->sh_info) + return FALSE; + + h = sym_hashes[r_symndx - symtab_hdr->sh_info]; + /* Use strncmp to check __tls_get_addr since __tls_get_addr + may be versioned. */ + return (h != NULL + && h->root.root.string != NULL + && (ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PC32 + || ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PLT32) + && (strncmp (h->root.root.string, + "__tls_get_addr", 14) == 0)); + + case R_X86_64_GOTTPOFF: + /* Check transition from IE access model: + movq foo@gottpoff(%rip), %reg + addq foo@gottpoff(%rip), %reg + */ + + if (offset < 3 || (offset + 4) > sec->size) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 3); + if (val != 0x48 && val != 0x4c) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 2); + if (val != 0x8b && val != 0x03) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 1); + return (val & 0xc7) == 5; + + case R_X86_64_GOTPC32_TLSDESC: + /* Check transition from GDesc access model: + leaq x@tlsdesc(%rip), %rax + + Make sure it's a leaq adding rip to a 32-bit offset + into any register, although it's probably almost always + going to be rax. */ + + if (offset < 3 || (offset + 4) > sec->size) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 3); + if ((val & 0xfb) != 0x48) + return FALSE; + + if (bfd_get_8 (abfd, contents + offset - 2) != 0x8d) + return FALSE; + + val = bfd_get_8 (abfd, contents + offset - 1); + return (val & 0xc7) == 0x05; + + case R_X86_64_TLSDESC_CALL: + /* Check transition from GDesc access model: + call *x@tlsdesc(%rax) + */ + if (offset + 2 <= sec->size) + { + /* Make sure that it's a call *x@tlsdesc(%rax). */ + static x86_64_opcode16 call = { { 0xff, 0x10 } }; + return bfd_get_16 (abfd, contents + offset) == call.i; + } + + return FALSE; + + default: + abort (); + } +} + +/* Return TRUE if the TLS access transition is OK or no transition + will be performed. Update R_TYPE if there is a transition. */ + +static bfd_boolean +elf64_x86_64_tls_transition (struct bfd_link_info *info, bfd *abfd, + asection *sec, bfd_byte *contents, + Elf_Internal_Shdr *symtab_hdr, + struct elf_link_hash_entry **sym_hashes, + unsigned int *r_type, int tls_type, + const Elf_Internal_Rela *rel, + const Elf_Internal_Rela *relend, + struct elf_link_hash_entry *h, + unsigned long r_symndx) +{ + unsigned int from_type = *r_type; + unsigned int to_type = from_type; + bfd_boolean check = TRUE; + + switch (from_type) { case R_X86_64_TLSGD: case R_X86_64_GOTPC32_TLSDESC: case R_X86_64_TLSDESC_CALL: case R_X86_64_GOTTPOFF: - if (is_local) - return R_X86_64_TPOFF32; - return R_X86_64_GOTTPOFF; + if (info->executable) + { + if (h == NULL) + to_type = R_X86_64_TPOFF32; + else + to_type = R_X86_64_GOTTPOFF; + } + + /* When we are called from elf64_x86_64_relocate_section, + CONTENTS isn't NULL and there may be additional transitions + based on TLS_TYPE. */ + if (contents != NULL) + { + unsigned int new_to_type = to_type; + + if (info->executable + && h != NULL + && h->dynindx == -1 + && tls_type == GOT_TLS_IE) + new_to_type = R_X86_64_TPOFF32; + + if (to_type == R_X86_64_TLSGD + || to_type == R_X86_64_GOTPC32_TLSDESC + || to_type == R_X86_64_TLSDESC_CALL) + { + if (tls_type == GOT_TLS_IE) + new_to_type = R_X86_64_GOTTPOFF; + } + + /* We checked the transition before when we were called from + elf64_x86_64_check_relocs. We only want to check the new + transition which hasn't been checked before. */ + check = new_to_type != to_type && from_type == to_type; + to_type = new_to_type; + } + + break; + case R_X86_64_TLSLD: - return R_X86_64_TPOFF32; + if (info->executable) + to_type = R_X86_64_TPOFF32; + break; + + default: + return TRUE; + } + + /* Return TRUE if there is no transition. */ + if (from_type == to_type) + return TRUE; + + /* Check if the transition can be performed. */ + if (check + && ! elf64_x86_64_check_tls_transition (abfd, sec, contents, + symtab_hdr, sym_hashes, + from_type, rel, relend)) + { + reloc_howto_type *from, *to; + const char *name; + + from = elf64_x86_64_rtype_to_howto (abfd, from_type); + to = elf64_x86_64_rtype_to_howto (abfd, to_type); + + if (h) + name = h->root.root.string; + else + { + Elf_Internal_Sym *isym; + struct elf64_x86_64_link_hash_table *htab; + htab = elf64_x86_64_hash_table (info); + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); + } + + (*_bfd_error_handler) + (_("%B: TLS transition from %s to %s against `%s' at 0x%lx " + "in section `%A' failed"), + abfd, sec, from->name, to->name, name, + (unsigned long) rel->r_offset); + bfd_set_error (bfd_error_bad_value); + return FALSE; } - return r_type; + *r_type = to_type; + return TRUE; } /* Look through the relocs for a section during the first phase, and @@ -739,7 +1044,8 @@ elf64_x86_64_tls_transition (struct bfd_link_info *info, int r_type, int is_loca linkage table, and dynamic reloc sections. */ static bfd_boolean -elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, +elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, + asection *sec, const Elf_Internal_Rela *relocs) { struct elf64_x86_64_link_hash_table *htab; @@ -752,8 +1058,10 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, if (info->relocatable) return TRUE; + BFD_ASSERT (is_x86_64_elf (abfd)); + htab = elf64_x86_64_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); sreloc = NULL; @@ -764,6 +1072,8 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, unsigned int r_type; unsigned long r_symndx; struct elf_link_hash_entry *h; + Elf_Internal_Sym *isym; + const char *name; r_symndx = ELF64_R_SYM (rel->r_info); r_type = ELF64_R_TYPE (rel->r_info); @@ -776,16 +1086,145 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } if (r_symndx < symtab_hdr->sh_info) - h = NULL; + { + /* A local symbol. */ + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) + return FALSE; + + /* Check relocation against local STT_GNU_IFUNC symbol. */ + if (ELF64_ST_TYPE (isym->st_info) == STT_GNU_IFUNC) + { + h = elf64_x86_64_get_local_sym_hash (htab, abfd, rel, + TRUE); + if (h == NULL) + return FALSE; + + /* Fake a STT_GNU_IFUNC symbol. */ + h->type = STT_GNU_IFUNC; + h->def_regular = 1; + h->ref_regular = 1; + h->forced_local = 1; + h->root.type = bfd_link_hash_defined; + } + else + h = NULL; + } else { + isym = NULL; h = sym_hashes[r_symndx - symtab_hdr->sh_info]; while (h->root.type == bfd_link_hash_indirect || h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; } - r_type = elf64_x86_64_tls_transition (info, r_type, h == NULL); + if (h != NULL) + { + /* Create the ifunc sections for static executables. If we + never see an indirect function symbol nor we are building + a static executable, those sections will be empty and + won't appear in output. */ + switch (r_type) + { + default: + break; + + case R_X86_64_32S: + case R_X86_64_32: + case R_X86_64_64: + case R_X86_64_PC32: + case R_X86_64_PC64: + case R_X86_64_PLT32: + case R_X86_64_GOTPCREL: + case R_X86_64_GOTPCREL64: + if (!_bfd_elf_create_ifunc_sections (abfd, info)) + return FALSE; + break; + } + + /* Since STT_GNU_IFUNC symbol must go through PLT, we handle + it here if it is defined in a non-shared object. */ + if (h->type == STT_GNU_IFUNC + && h->def_regular) + { + /* It is referenced by a non-shared object. */ + h->ref_regular = 1; + h->needs_plt = 1; + + /* STT_GNU_IFUNC symbol must go through PLT. */ + h->plt.refcount += 1; + + /* STT_GNU_IFUNC needs dynamic sections. */ + if (htab->elf.dynobj == NULL) + htab->elf.dynobj = abfd; + + switch (r_type) + { + default: + if (h->root.root.string) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, + NULL); + (*_bfd_error_handler) + (_("%B: relocation %s against STT_GNU_IFUNC " + "symbol `%s' isn't handled by %s"), abfd, + x86_64_elf_howto_table[r_type].name, + name, __FUNCTION__); + bfd_set_error (bfd_error_bad_value); + return FALSE; + + case R_X86_64_64: + h->non_got_ref = 1; + h->pointer_equality_needed = 1; + if (info->shared) + { + /* We must copy these reloc types into the output + file. Create a reloc section in dynobj and + make room for this reloc. */ + sreloc = _bfd_elf_create_ifunc_dyn_reloc + (abfd, info, sec, sreloc, + &((struct elf64_x86_64_link_hash_entry *) h)->dyn_relocs); + if (sreloc == NULL) + return FALSE; + } + break; + + case R_X86_64_32S: + case R_X86_64_32: + case R_X86_64_PC32: + case R_X86_64_PC64: + h->non_got_ref = 1; + if (r_type != R_X86_64_PC32 + && r_type != R_X86_64_PC64) + h->pointer_equality_needed = 1; + break; + + case R_X86_64_PLT32: + break; + + case R_X86_64_GOTPCREL: + case R_X86_64_GOTPCREL64: + h->got.refcount += 1; + if (htab->elf.sgot == NULL + && !_bfd_elf_create_got_section (htab->elf.dynobj, + info)) + return FALSE; + break; + } + + continue; + } + } + + if (! elf64_x86_64_tls_transition (info, abfd, sec, NULL, + symtab_hdr, sym_hashes, + &r_type, GOT_UNKNOWN, + rel, rel_end, h, r_symndx)) + return FALSE; + switch (r_type) { case R_X86_64_TLSLD: @@ -793,20 +1232,24 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, goto create_got; case R_X86_64_TPOFF32: - if (info->shared) + if (!info->executable) { + if (h) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, + NULL); (*_bfd_error_handler) (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), abfd, - x86_64_elf_howto_table[r_type].name, - (h) ? h->root.root.string : "a local symbol"); + x86_64_elf_howto_table[r_type].name, name); bfd_set_error (bfd_error_bad_value); return FALSE; } break; case R_X86_64_GOTTPOFF: - if (info->shared) + if (!info->executable) info->flags |= DF_STATIC_TLS; /* Fall through */ @@ -886,9 +1329,14 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, tls_type |= old_tls_type; else { + if (h) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, + isym, NULL); (*_bfd_error_handler) - (_("%B: %s' accessed both as normal and thread local symbol"), - abfd, h ? h->root.root.string : ""); + (_("%B: '%s' accessed both as normal and thread local symbol"), + abfd, name); return FALSE; } } @@ -907,11 +1355,12 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, case R_X86_64_GOTPC32: case R_X86_64_GOTPC64: create_got: - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) { if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - if (!create_got_section (htab->elf.dynobj, info)) + if (!_bfd_elf_create_got_section (htab->elf.dynobj, + info)) return FALSE; } break; @@ -955,11 +1404,13 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, && (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_READONLY) != 0) { + if (h) + name = h->root.root.string; + else + name = bfd_elf_sym_name (abfd, symtab_hdr, isym, NULL); (*_bfd_error_handler) (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), - abfd, - x86_64_elf_howto_table[r_type].name, - (h) ? h->root.root.string : "a local symbol"); + abfd, x86_64_elf_howto_table[r_type].name, name); bfd_set_error (bfd_error_bad_value); return FALSE; } @@ -970,7 +1421,7 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, case R_X86_64_PC32: case R_X86_64_PC64: case R_X86_64_64: - if (h != NULL && !info->shared) + if (h != NULL && info->executable) { /* If this reloc is in a read-only section, we might need a copy reloc. We can't check reliably at this @@ -1010,10 +1461,7 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, symbol. */ if ((info->shared && (sec->flags & SEC_ALLOC) != 0 - && (((r_type != R_X86_64_PC8) - && (r_type != R_X86_64_PC16) - && (r_type != R_X86_64_PC32) - && (r_type != R_X86_64_PC64)) + && (! IS_X86_64_PCREL_TYPE (r_type) || (h != NULL && (! SYMBOLIC_BIND (info, h) || h->root.type == bfd_link_hash_defweak @@ -1025,55 +1473,22 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, && (h->root.type == bfd_link_hash_defweak || !h->def_regular))) { - struct elf64_x86_64_dyn_relocs *p; - struct elf64_x86_64_dyn_relocs **head; + struct elf_dyn_relocs *p; + struct elf_dyn_relocs **head; /* We must copy these reloc types into the output file. Create a reloc section in dynobj and make room for this reloc. */ if (sreloc == NULL) { - const char *name; - bfd *dynobj; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - if (! CONST_STRNEQ (name, ".rela") - || strcmp (bfd_get_section_name (abfd, sec), - name + 5) != 0) - { - (*_bfd_error_handler) - (_("%B: bad relocation section name `%s\'"), - abfd, name); - } - if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - dynobj = htab->elf.dynobj; + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE); - sreloc = bfd_get_section_by_name (dynobj, name); if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, 3)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -1084,28 +1499,34 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } else { - void **vpp; /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *s; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + void **vpp; + Elf_Internal_Sym *isym; + + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + /* Beware of type punned pointers vs strict aliasing rules. */ vpp = &(elf_section_data (s)->local_dynrel); - head = (struct elf64_x86_64_dyn_relocs **)vpp; + head = (struct elf_dyn_relocs **)vpp; } p = *head; if (p == NULL || p->sec != sec) { bfd_size_type amt = sizeof *p; - p = ((struct elf64_x86_64_dyn_relocs *) + + p = ((struct elf_dyn_relocs *) bfd_alloc (htab->elf.dynobj, amt)); if (p == NULL) return FALSE; @@ -1117,10 +1538,7 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, } p->count += 1; - if (r_type == R_X86_64_PC8 - || r_type == R_X86_64_PC16 - || r_type == R_X86_64_PC32 - || r_type == R_X86_64_PC64) + if (IS_X86_64_PCREL_TYPE (r_type)) p->pc_count += 1; } break; @@ -1135,7 +1553,9 @@ elf64_x86_64_check_relocs (bfd *abfd, struct bfd_link_info *info, asection *sec, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_X86_64_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -1172,16 +1592,20 @@ elf64_x86_64_gc_mark_hook (asection *sec, static bfd_boolean elf64_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, - asection *sec, const Elf_Internal_Rela *relocs) + asection *sec, + const Elf_Internal_Rela *relocs) { Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + elf_section_data (sec)->local_dynrel = NULL; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1196,8 +1620,8 @@ elf64_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, if (r_symndx >= symtab_hdr->sh_info) { struct elf64_x86_64_link_hash_entry *eh; - struct elf64_x86_64_dyn_relocs **pp; - struct elf64_x86_64_dyn_relocs *p; + struct elf_dyn_relocs **pp; + struct elf_dyn_relocs *p; h = sym_hashes[r_symndx - symtab_hdr->sh_info]; while (h->root.type == bfd_link_hash_indirect @@ -1215,7 +1639,12 @@ elf64_x86_64_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, } r_type = ELF64_R_TYPE (rel->r_info); - r_type = elf64_x86_64_tls_transition (info, r_type, h != NULL); + if (! elf64_x86_64_tls_transition (info, abfd, sec, NULL, + symtab_hdr, sym_hashes, + &r_type, GOT_UNKNOWN, + rel, relend, h, r_symndx)) + return FALSE; + switch (r_type) { case R_X86_64_TLSLD: @@ -1289,6 +1718,17 @@ elf64_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info, struct elf64_x86_64_link_hash_table *htab; asection *s; + /* STT_GNU_IFUNC symbol must go through PLT. */ + if (h->type == STT_GNU_IFUNC) + { + if (h->plt.refcount <= 0) + { + h->plt.offset = (bfd_vma) -1; + h->needs_plt = 0; + } + return TRUE; + } + /* If this is a function, put it in the procedure linkage table. We will fill in the contents of the procedure linkage table later, when we know the address of the .got section. */ @@ -1358,7 +1798,7 @@ elf64_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info, if (ELIMINATE_COPY_RELOCS) { struct elf64_x86_64_link_hash_entry * eh; - struct elf64_x86_64_dyn_relocs *p; + struct elf_dyn_relocs *p; eh = (struct elf64_x86_64_link_hash_entry *) h; for (p = eh->dyn_relocs; p != NULL; p = p->next) @@ -1414,24 +1854,33 @@ elf64_x86_64_adjust_dynamic_symbol (struct bfd_link_info *info, dynamic relocs. */ static bfd_boolean -allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) +elf64_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) { struct bfd_link_info *info; struct elf64_x86_64_link_hash_table *htab; struct elf64_x86_64_link_hash_entry *eh; - struct elf64_x86_64_dyn_relocs *p; + struct elf_dyn_relocs *p; 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; + eh = (struct elf64_x86_64_link_hash_entry *) h; info = (struct bfd_link_info *) inf; htab = elf64_x86_64_hash_table (info); - if (htab->elf.dynamic_sections_created - && h->plt.refcount > 0) + /* Since STT_GNU_IFUNC symbol must go through PLT, we handle it + here if it is defined and referenced in a non-shared object. */ + if (h->type == STT_GNU_IFUNC + && h->def_regular) + return _bfd_elf_allocate_ifunc_dyn_relocs (info, h, + &eh->dyn_relocs, + PLT_ENTRY_SIZE, + GOT_ENTRY_SIZE); + else if (htab->elf.dynamic_sections_created + && h->plt.refcount > 0) { /* Make sure this symbol is output as a dynamic symbol. Undefined weak syms won't yet be marked as dynamic. */ @@ -1445,7 +1894,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) if (info->shared || WILL_CALL_FINISH_DYNAMIC_SYMBOL (1, 0, h)) { - asection *s = htab->splt; + asection *s = htab->elf.splt; /* If this is the first .plt entry, make room for the special first entry. */ @@ -1471,11 +1920,11 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* We also need to make an entry in the .got.plt section, which will be placed in the .got section by the linker script. */ - htab->sgotplt->size += GOT_ENTRY_SIZE; + htab->elf.sgotplt->size += GOT_ENTRY_SIZE; /* We also need to make an entry in the .rela.plt section. */ - htab->srelplt->size += sizeof (Elf64_External_Rela); - htab->srelplt->reloc_count++; + htab->elf.srelplt->size += sizeof (Elf64_External_Rela); + htab->elf.srelplt->reloc_count++; } else { @@ -1489,16 +1938,17 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) h->needs_plt = 0; } - eh = (struct elf64_x86_64_link_hash_entry *) h; eh->tlsdesc_got = (bfd_vma) -1; /* If R_X86_64_GOTTPOFF symbol is now local to the binary, make it a R_X86_64_TPOFF32 requiring no GOT entry. */ if (h->got.refcount > 0 - && !info->shared + && info->executable && h->dynindx == -1 && elf64_x86_64_hash_entry (h)->tls_type == GOT_TLS_IE) - h->got.offset = (bfd_vma) -1; + { + h->got.offset = (bfd_vma) -1; + } else if (h->got.refcount > 0) { asection *s; @@ -1516,15 +1966,15 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) if (GOT_TLS_GDESC_P (tls_type)) { - eh->tlsdesc_got = htab->sgotplt->size + eh->tlsdesc_got = htab->elf.sgotplt->size - elf64_x86_64_compute_jump_table_size (htab); - htab->sgotplt->size += 2 * GOT_ENTRY_SIZE; + htab->elf.sgotplt->size += 2 * GOT_ENTRY_SIZE; h->got.offset = (bfd_vma) -2; } if (! GOT_TLS_GDESC_P (tls_type) || GOT_TLS_GD_P (tls_type)) { - s = htab->sgot; + s = htab->elf.sgot; h->got.offset = s->size; s->size += GOT_ENTRY_SIZE; if (GOT_TLS_GD_P (tls_type)) @@ -1536,18 +1986,18 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) R_X86_64_GOTTPOFF needs one dynamic relocation. */ if ((GOT_TLS_GD_P (tls_type) && h->dynindx == -1) || tls_type == GOT_TLS_IE) - htab->srelgot->size += sizeof (Elf64_External_Rela); + htab->elf.srelgot->size += sizeof (Elf64_External_Rela); else if (GOT_TLS_GD_P (tls_type)) - htab->srelgot->size += 2 * sizeof (Elf64_External_Rela); + htab->elf.srelgot->size += 2 * sizeof (Elf64_External_Rela); else if (! GOT_TLS_GDESC_P (tls_type) && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) && (info->shared || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))) - htab->srelgot->size += sizeof (Elf64_External_Rela); + htab->elf.srelgot->size += sizeof (Elf64_External_Rela); if (GOT_TLS_GDESC_P (tls_type)) { - htab->srelplt->size += sizeof (Elf64_External_Rela); + htab->elf.srelplt->size += sizeof (Elf64_External_Rela); htab->tlsdesc_plt = (bfd_vma) -1; } } @@ -1573,7 +2023,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) should avoid writing weird assembly. */ if (SYMBOL_CALLS_LOCAL (info, h)) { - struct elf64_x86_64_dyn_relocs **pp; + struct elf_dyn_relocs **pp; for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) { @@ -1597,12 +2047,11 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* Make sure undefined weak symbols are output as a dynamic symbol in PIEs. */ else if (h->dynindx == -1 - && !h->forced_local) - { - if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; - } + && ! h->forced_local + && ! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; } + } else if (ELIMINATE_COPY_RELOCS) { @@ -1620,11 +2069,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* Make sure this symbol is output as a dynamic symbol. Undefined weak syms won't yet be marked as dynamic. */ if (h->dynindx == -1 - && !h->forced_local) - { - if (! bfd_elf_link_record_dynamic_symbol (info, h)) - return FALSE; - } + && ! h->forced_local + && ! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; /* If that succeeded, we know we'll be keeping all the relocs. */ @@ -1640,20 +2087,44 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) /* Finally, allocate space. */ for (p = eh->dyn_relocs; p != NULL; p = p->next) { - asection *sreloc = elf_section_data (p->sec)->sreloc; + asection * sreloc; + + sreloc = elf_section_data (p->sec)->sreloc; + + BFD_ASSERT (sreloc != NULL); + sreloc->size += p->count * sizeof (Elf64_External_Rela); } return TRUE; } +/* Allocate space in .plt, .got and associated reloc sections for + local dynamic relocs. */ + +static bfd_boolean +elf64_x86_64_allocate_local_dynrelocs (void **slot, void *inf) +{ + struct elf_link_hash_entry *h + = (struct elf_link_hash_entry *) *slot; + + if (h->type != STT_GNU_IFUNC + || !h->def_regular + || !h->ref_regular + || !h->forced_local + || h->root.type != bfd_link_hash_defined) + abort (); + + return elf64_x86_64_allocate_dynrelocs (h, inf); +} + /* Find any dynamic relocs that apply to read-only sections. */ static bfd_boolean -readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf) +elf64_x86_64_readonly_dynrelocs (struct elf_link_hash_entry *h, void * inf) { struct elf64_x86_64_link_hash_entry *eh; - struct elf64_x86_64_dyn_relocs *p; + struct elf_dyn_relocs *p; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -1718,14 +2189,14 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, Elf_Internal_Shdr *symtab_hdr; asection *srel; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_x86_64_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) { - struct elf64_x86_64_dyn_relocs *p; + struct elf_dyn_relocs *p; - for (p = (struct elf64_x86_64_dyn_relocs *) + for (p = (struct elf_dyn_relocs *) (elf_section_data (s)->local_dynrel); p != NULL; p = p->next) @@ -1744,7 +2215,6 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, srel->size += p->count * sizeof (Elf64_External_Rela); if ((p->sec->output_section->flags & SEC_READONLY) != 0) info->flags |= DF_TEXTREL; - } } } @@ -1753,13 +2223,13 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = elf64_x86_64_local_got_tls_type (ibfd); local_tlsdesc_gotent = elf64_x86_64_local_tlsdesc_gotent (ibfd); - s = htab->sgot; - srel = htab->srelgot; + s = htab->elf.sgot; + srel = htab->elf.srelgot; for (; local_got < end_local_got; ++local_got, ++local_tls_type, ++local_tlsdesc_gotent) { @@ -1768,9 +2238,9 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { if (GOT_TLS_GDESC_P (*local_tls_type)) { - *local_tlsdesc_gotent = htab->sgotplt->size + *local_tlsdesc_gotent = htab->elf.sgotplt->size - elf64_x86_64_compute_jump_table_size (htab); - htab->sgotplt->size += 2 * GOT_ENTRY_SIZE; + htab->elf.sgotplt->size += 2 * GOT_ENTRY_SIZE; *local_got = (bfd_vma) -2; } if (! GOT_TLS_GDESC_P (*local_tls_type) @@ -1787,7 +2257,8 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { if (GOT_TLS_GDESC_P (*local_tls_type)) { - htab->srelplt->size += sizeof (Elf64_External_Rela); + htab->elf.srelplt->size + += sizeof (Elf64_External_Rela); htab->tlsdesc_plt = (bfd_vma) -1; } if (! GOT_TLS_GDESC_P (*local_tls_type) @@ -1804,23 +2275,29 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, { /* Allocate 2 got entries and 1 dynamic reloc for R_X86_64_TLSLD relocs. */ - htab->tls_ld_got.offset = htab->sgot->size; - htab->sgot->size += 2 * GOT_ENTRY_SIZE; - htab->srelgot->size += sizeof (Elf64_External_Rela); + htab->tls_ld_got.offset = htab->elf.sgot->size; + htab->elf.sgot->size += 2 * GOT_ENTRY_SIZE; + htab->elf.srelgot->size += sizeof (Elf64_External_Rela); } else htab->tls_ld_got.offset = -1; /* Allocate global sym .plt and .got entries, and space for global sym dynamic relocs. */ - elf_link_hash_traverse (&htab->elf, allocate_dynrelocs, (PTR) info); + elf_link_hash_traverse (&htab->elf, elf64_x86_64_allocate_dynrelocs, + info); + + /* Allocate .plt and .got entries, and space for local symbols. */ + htab_traverse (htab->loc_hash_table, + elf64_x86_64_allocate_local_dynrelocs, + info); /* For every jump slot reserved in the sgotplt, reloc_count is incremented. However, when we reserve space for TLS descriptors, it's not incremented, so in order to compute the space reserved for them, it suffices to multiply the reloc count by the jump slot size. */ - if (htab->srelplt) + if (htab->elf.srelplt) htab->sgotplt_jump_table_size = elf64_x86_64_compute_jump_table_size (htab); @@ -1832,14 +2309,14 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, htab->tlsdesc_plt = 0; else { - htab->tlsdesc_got = htab->sgot->size; - htab->sgot->size += GOT_ENTRY_SIZE; + htab->tlsdesc_got = htab->elf.sgot->size; + htab->elf.sgot->size += GOT_ENTRY_SIZE; /* Reserve room for the initial entry. FIXME: we could probably do away with it in this case. */ - if (htab->splt->size == 0) - htab->splt->size += PLT_ENTRY_SIZE; - htab->tlsdesc_plt = htab->splt->size; - htab->splt->size += PLT_ENTRY_SIZE; + if (htab->elf.splt->size == 0) + htab->elf.splt->size += PLT_ENTRY_SIZE; + htab->tlsdesc_plt = htab->elf.splt->size; + htab->elf.splt->size += PLT_ENTRY_SIZE; } } @@ -1851,9 +2328,11 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, if ((s->flags & SEC_LINKER_CREATED) == 0) continue; - if (s == htab->splt - || s == htab->sgot - || s == htab->sgotplt + if (s == htab->elf.splt + || s == htab->elf.sgot + || s == htab->elf.sgotplt + || s == htab->elf.iplt + || s == htab->elf.igotplt || s == htab->sdynbss) { /* Strip this section if we don't need it; see the @@ -1861,12 +2340,12 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, } else if (CONST_STRNEQ (bfd_get_section_name (dynobj, s), ".rela")) { - if (s->size != 0 && s != htab->srelplt) + if (s->size != 0 && s != htab->elf.srelplt) relocs = TRUE; /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ - if (s != htab->srelplt) + if (s != htab->elf.srelplt) s->reloc_count = 0; } else @@ -1920,7 +2399,7 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, return FALSE; } - if (htab->splt->size != 0) + if (htab->elf.splt->size != 0) { if (!add_dynamic_entry (DT_PLTGOT, 0) || !add_dynamic_entry (DT_PLTRELSZ, 0) @@ -1944,8 +2423,9 @@ elf64_x86_64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, /* If any dynamic relocs apply to a read-only section, then we need a DT_TEXTREL entry. */ if ((info->flags & DF_TEXTREL) == 0) - elf_link_hash_traverse (&htab->elf, readonly_dynrelocs, - (PTR) info); + elf_link_hash_traverse (&htab->elf, + elf64_x86_64_readonly_dynrelocs, + info); if ((info->flags & DF_TEXTREL) != 0) { @@ -1984,6 +2464,9 @@ elf64_x86_64_always_size_sections (bfd *output_bfd, tls_sec, 0, NULL, FALSE, bed->collect, &bh))) return FALSE; + + elf64_x86_64_hash_table (info)->tls_module_base = bh; + tlsbase = (struct elf_link_hash_entry *)bh; tlsbase->def_regular = 1; tlsbase->other = STV_HIDDEN; @@ -1994,12 +2477,33 @@ elf64_x86_64_always_size_sections (bfd *output_bfd, return TRUE; } +/* _TLS_MODULE_BASE_ needs to be treated especially when linking + executables. Rather than setting it to the beginning of the TLS + section, we have to set it to the end. This function may be called + multiple times, it is idempotent. */ + +static void +elf64_x86_64_set_tls_module_base (struct bfd_link_info *info) +{ + struct bfd_link_hash_entry *base; + + if (!info->executable) + return; + + base = elf64_x86_64_hash_table (info)->tls_module_base; + + if (!base) + return; + + base->u.def.value = elf_hash_table (info)->tls_size; +} + /* Return the base VMA address which should be subtracted from real addresses when resolving @dtpoff relocation. This is PT_TLS segment p_vaddr. */ static bfd_vma -dtpoff_base (struct bfd_link_info *info) +elf64_x86_64_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) @@ -2011,7 +2515,7 @@ dtpoff_base (struct bfd_link_info *info) if STT_TLS virtual address is ADDRESS. */ static bfd_vma -tpoff (struct bfd_link_info *info, bfd_vma address) +elf64_x86_64_tpoff (struct bfd_link_info *info, bfd_vma address) { struct elf_link_hash_table *htab = elf_hash_table (info); @@ -2056,12 +2560,16 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; + BFD_ASSERT (is_x86_64_elf (input_bfd)); + htab = elf64_x86_64_hash_table (info); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); local_tlsdesc_gotents = elf64_x86_64_local_tlsdesc_gotent (input_bfd); + elf64_x86_64_set_tls_module_base (info); + rel = relocs; relend = relocs + input_section->reloc_count; for (; rel < relend; rel++) @@ -2077,6 +2585,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, bfd_boolean unresolved_reloc; bfd_reloc_status_type r; int tls_type; + asection *base_got; r_type = ELF64_R_TYPE (rel->r_info); if (r_type == (int) R_X86_64_GNU_VTINHERIT @@ -2100,7 +2609,22 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, sym = local_syms + r_symndx; sec = local_sections[r_symndx]; - relocation = _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel); + relocation = _bfd_elf_rela_local_sym (output_bfd, sym, + &sec, rel); + + /* Relocate against local STT_GNU_IFUNC symbol. */ + if (!info->relocatable + && ELF64_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + { + h = elf64_x86_64_get_local_sym_hash (htab, input_bfd, + rel, FALSE); + if (h == NULL) + abort (); + + /* Set STT_GNU_IFUNC symbol value. */ + h->root.u.def.value = sym->st_value; + h->root.u.def.section = sec; + } } else { @@ -2126,11 +2650,196 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (info->relocatable) continue; + /* Since STT_GNU_IFUNC symbol must go through PLT, we handle + it here if it is defined in a non-shared object. */ + if (h != NULL + && h->type == STT_GNU_IFUNC + && h->def_regular) + { + asection *plt; + bfd_vma plt_index; + const char *name; + + if ((input_section->flags & SEC_ALLOC) == 0 + || h->plt.offset == (bfd_vma) -1) + abort (); + + /* STT_GNU_IFUNC symbol must go through PLT. */ + plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt; + relocation = (plt->output_section->vma + + plt->output_offset + h->plt.offset); + + switch (r_type) + { + default: + if (h->root.root.string) + name = h->root.root.string; + else + name = bfd_elf_sym_name (input_bfd, symtab_hdr, sym, + NULL); + (*_bfd_error_handler) + (_("%B: relocation %s against STT_GNU_IFUNC " + "symbol `%s' isn't handled by %s"), input_bfd, + x86_64_elf_howto_table[r_type].name, + name, __FUNCTION__); + bfd_set_error (bfd_error_bad_value); + return FALSE; + + case R_X86_64_32S: + if (info->shared) + abort (); + goto do_relocation; + + case R_X86_64_64: + if (rel->r_addend != 0) + { + if (h->root.root.string) + name = h->root.root.string; + else + name = bfd_elf_sym_name (input_bfd, symtab_hdr, + sym, NULL); + (*_bfd_error_handler) + (_("%B: relocation %s against STT_GNU_IFUNC " + "symbol `%s' has non-zero addend: %d"), + input_bfd, x86_64_elf_howto_table[r_type].name, + name, rel->r_addend); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + + /* Generate dynamic relcoation only when there is a + non-GOF reference in a shared object. */ + if (info->shared && h->non_got_ref) + { + Elf_Internal_Rela outrel; + bfd_byte *loc; + asection *sreloc; + + /* Need a dynamic relocation to get the real function + address. */ + outrel.r_offset = _bfd_elf_section_offset (output_bfd, + info, + input_section, + rel->r_offset); + if (outrel.r_offset == (bfd_vma) -1 + || outrel.r_offset == (bfd_vma) -2) + abort (); + + outrel.r_offset += (input_section->output_section->vma + + input_section->output_offset); + + if (h->dynindx == -1 + || h->forced_local + || info->executable) + { + /* This symbol is resolved locally. */ + outrel.r_info = ELF64_R_INFO (0, R_X86_64_IRELATIVE); + outrel.r_addend = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + } + else + { + outrel.r_info = ELF64_R_INFO (h->dynindx, r_type); + outrel.r_addend = 0; + } + + sreloc = htab->elf.irelifunc; + loc = sreloc->contents; + loc += (sreloc->reloc_count++ + * sizeof (Elf64_External_Rela)); + bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc); + + /* If this reloc is against an external symbol, we + do not want to fiddle with the addend. Otherwise, + we need to include the symbol value so that it + becomes an addend for the dynamic reloc. For an + internal symbol, we have updated addend. */ + continue; + } + + case R_X86_64_32: + case R_X86_64_PC32: + case R_X86_64_PC64: + case R_X86_64_PLT32: + goto do_relocation; + + case R_X86_64_GOTPCREL: + case R_X86_64_GOTPCREL64: + base_got = htab->elf.sgot; + off = h->got.offset; + + if (base_got == NULL) + abort (); + + if (off == (bfd_vma) -1) + { + /* We can't use h->got.offset here to save state, or + even just remember the offset, as finish_dynamic_symbol + would use that as offset into .got. */ + + if (htab->elf.splt != NULL) + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; + off = (plt_index + 3) * GOT_ENTRY_SIZE; + base_got = htab->elf.sgotplt; + } + else + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE; + off = plt_index * GOT_ENTRY_SIZE; + base_got = htab->elf.igotplt; + } + + if (h->dynindx == -1 + || h->forced_local + || info->symbolic) + { + /* This references the local defitionion. We must + initialize this entry in the global offset table. + Since the offset must always be a multiple of 8, + we use the least significant bit to record + whether we have initialized it already. + + When doing a dynamic link, we create a .rela.got + relocation entry to initialize the value. This + is done in the finish_dynamic_symbol routine. */ + if ((off & 1) != 0) + off &= ~1; + else + { + bfd_put_64 (output_bfd, relocation, + base_got->contents + off); + /* Note that this is harmless for the GOTPLT64 + case, as -1 | 1 still is -1. */ + h->got.offset |= 1; + } + } + } + + relocation = (base_got->output_section->vma + + base_got->output_offset + off); + + if (r_type != R_X86_64_GOTPCREL + && r_type != R_X86_64_GOTPCREL64) + { + asection *gotplt; + if (htab->elf.splt != NULL) + gotplt = htab->elf.sgotplt; + else + gotplt = htab->elf.igotplt; + relocation -= (gotplt->output_section->vma + - gotplt->output_offset); + } + + goto do_relocation; + } + } + /* When generating a shared object, the relocations handled here are copied into the output file to be resolved at run time. */ switch (r_type) { - asection *base_got; case R_X86_64_GOT32: case R_X86_64_GOT64: /* Relocation is to the entry for this symbol in the global @@ -2145,9 +2854,9 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, offset, if this symbol got a PLT entry (it was global). Additionally if it's computed from the PLT entry, then that GOT offset is relative to .got.plt, not to .got. */ - base_got = htab->sgot; + base_got = htab->elf.sgot; - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) abort (); if (h != NULL) @@ -2165,7 +2874,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, .got. */ bfd_vma plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; off = (plt_index + 3) * GOT_ENTRY_SIZE; - base_got = htab->sgotplt; + base_got = htab->elf.sgotplt; } dyn = htab->elf.dynamic_sections_created; @@ -2226,7 +2935,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, /* We need to generate a R_X86_64_RELATIVE reloc for the dynamic linker. */ - s = htab->srelgot; + s = htab->elf.srelgot; if (s == NULL) abort (); @@ -2250,8 +2959,8 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, relocation = base_got->output_section->vma + base_got->output_offset + off; if (r_type != R_X86_64_GOTPCREL && r_type != R_X86_64_GOTPCREL64) - relocation -= htab->sgotplt->output_section->vma - - htab->sgotplt->output_offset; + relocation -= htab->elf.sgotplt->output_section->vma + - htab->elf.sgotplt->output_offset; break; @@ -2280,15 +2989,15 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, defined _GLOBAL_OFFSET_TABLE_ in a different way, as is permitted by the ABI, we might have to change this calculation. */ - relocation -= htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset; + relocation -= htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset; break; case R_X86_64_GOTPC32: case R_X86_64_GOTPC64: /* Use global offset table as symbol value. */ - relocation = htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset; + relocation = htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset; unresolved_reloc = FALSE; break; @@ -2298,16 +3007,16 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (h != NULL /* See PLT32 handling. */ && h->plt.offset != (bfd_vma) -1 - && htab->splt != NULL) + && htab->elf.splt != NULL) { - relocation = (htab->splt->output_section->vma - + htab->splt->output_offset + relocation = (htab->elf.splt->output_section->vma + + htab->elf.splt->output_offset + h->plt.offset); unresolved_reloc = FALSE; } - relocation -= htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset; + relocation -= htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset; break; case R_X86_64_PLT32: @@ -2320,7 +3029,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, break; if (h->plt.offset == (bfd_vma) -1 - || htab->splt == NULL) + || htab->elf.splt == NULL) { /* We didn't make a PLT entry for this symbol. This happens when statically linking PIC code, or when @@ -2328,8 +3037,8 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, break; } - relocation = (htab->splt->output_section->vma - + htab->splt->output_offset + relocation = (htab->elf.splt->output_section->vma + + htab->elf.splt->output_offset + h->plt.offset); unresolved_reloc = FALSE; break; @@ -2338,30 +3047,63 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_X86_64_PC16: case R_X86_64_PC32: if (info->shared - && !SYMBOL_REFERENCES_LOCAL (info, h) && (input_section->flags & SEC_ALLOC) != 0 && (input_section->flags & SEC_READONLY) != 0 - && (!h->def_regular - || r_type != R_X86_64_PC32 - || h->type != STT_FUNC - || ELF_ST_VISIBILITY (h->other) != STV_PROTECTED - || !is_32bit_relative_branch (contents, - rel->r_offset))) + && h != NULL) { - if (h->def_regular - && r_type == R_X86_64_PC32 - && h->type == STT_FUNC - && ELF_ST_VISIBILITY (h->other) == STV_PROTECTED) - (*_bfd_error_handler) - (_("%B: relocation R_X86_64_PC32 against protected function `%s' can not be used when making a shared object"), - input_bfd, h->root.root.string); + bfd_boolean fail = FALSE; + bfd_boolean branch + = (r_type == R_X86_64_PC32 + && is_32bit_relative_branch (contents, rel->r_offset)); + + if (SYMBOL_REFERENCES_LOCAL (info, h)) + { + /* Symbol is referenced locally. Make sure it is + defined locally or for a branch. */ + fail = !h->def_regular && !branch; + } else - (*_bfd_error_handler) - (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), - input_bfd, x86_64_elf_howto_table[r_type].name, - h->root.root.string); - bfd_set_error (bfd_error_bad_value); - return FALSE; + { + /* Symbol isn't referenced locally. We only allow + branch to symbol with non-default visibility. */ + fail = (!branch + || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT); + } + + if (fail) + { + const char *fmt; + const char *v; + const char *pic = ""; + + switch (ELF_ST_VISIBILITY (h->other)) + { + case STV_HIDDEN: + v = _("hidden symbol"); + break; + case STV_INTERNAL: + v = _("internal symbol"); + break; + case STV_PROTECTED: + v = _("protected symbol"); + break; + default: + v = _("symbol"); + pic = _("; recompile with -fPIC"); + break; + } + + if (h->def_regular) + fmt = _("%B: relocation %s against %s `%s' can not be used when making a shared object%s"); + else + fmt = _("%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s"); + + (*_bfd_error_handler) (fmt, input_bfd, + x86_64_elf_howto_table[r_type].name, + v, h->root.root.string, pic); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } } /* Fall through. */ @@ -2380,11 +3122,8 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, && (h == NULL || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT || h->root.type != bfd_link_hash_undefweak) - && ((r_type != R_X86_64_PC8 - && r_type != R_X86_64_PC16 - && r_type != R_X86_64_PC32 - && r_type != R_X86_64_PC64) - || !SYMBOL_CALLS_LOCAL (info, h))) + && (! IS_X86_64_PCREL_TYPE (r_type) + || ! SYMBOL_CALLS_LOCAL (info, h))) || (ELIMINATE_COPY_RELOCS && !info->shared && h != NULL @@ -2424,13 +3163,10 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, become local. */ else if (h != NULL && h->dynindx != -1 - && (r_type == R_X86_64_PC8 - || r_type == R_X86_64_PC16 - || r_type == R_X86_64_PC32 - || r_type == R_X86_64_PC64 - || !info->shared - || !SYMBOLIC_BIND (info, h) - || !h->def_regular)) + && (IS_X86_64_PCREL_TYPE (r_type) + || ! info->shared + || ! SYMBOLIC_BIND (info, h) + || ! h->def_regular)) { outrel.r_info = ELF64_R_INFO (h->dynindx, r_type); outrel.r_addend = rel->r_addend; @@ -2480,8 +3216,8 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, } sreloc = elf_section_data (input_section)->sreloc; - if (sreloc == NULL) - abort (); + + BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL); loc = sreloc->contents; loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela); @@ -2501,57 +3237,40 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_X86_64_GOTPC32_TLSDESC: case R_X86_64_TLSDESC_CALL: case R_X86_64_GOTTPOFF: - r_type = elf64_x86_64_tls_transition (info, r_type, h == NULL); tls_type = GOT_UNKNOWN; if (h == NULL && local_got_offsets) tls_type = elf64_x86_64_local_got_tls_type (input_bfd) [r_symndx]; else if (h != NULL) - { - tls_type = elf64_x86_64_hash_entry (h)->tls_type; - if (!info->shared && h->dynindx == -1 && tls_type == GOT_TLS_IE) - r_type = R_X86_64_TPOFF32; - } - if (r_type == R_X86_64_TLSGD - || r_type == R_X86_64_GOTPC32_TLSDESC - || r_type == R_X86_64_TLSDESC_CALL) - { - if (tls_type == GOT_TLS_IE) - r_type = R_X86_64_GOTTPOFF; - } + tls_type = elf64_x86_64_hash_entry (h)->tls_type; + + if (! elf64_x86_64_tls_transition (info, input_bfd, + input_section, contents, + symtab_hdr, sym_hashes, + &r_type, tls_type, rel, + relend, h, r_symndx)) + return FALSE; if (r_type == R_X86_64_TPOFF32) { + bfd_vma roff = rel->r_offset; + BFD_ASSERT (! unresolved_reloc); + if (ELF64_R_TYPE (rel->r_info) == R_X86_64_TLSGD) { - unsigned int i; - static unsigned char tlsgd[8] - = { 0x66, 0x48, 0x8d, 0x3d, 0x66, 0x66, 0x48, 0xe8 }; - /* GD->LE transition. .byte 0x66; leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr@plt + .word 0x6666; rex64; call __tls_get_addr Change it into: movq %fs:0, %rax leaq foo@tpoff(%rax), %rax */ - BFD_ASSERT (rel->r_offset >= 4); - for (i = 0; i < 4; i++) - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset - 4 + i) - == tlsgd[i]); - BFD_ASSERT (rel->r_offset + 12 <= input_section->size); - for (i = 0; i < 4; i++) - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset + 4 + i) - == tlsgd[i+4]); - BFD_ASSERT (rel + 1 < relend); - BFD_ASSERT (ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PLT32); - memcpy (contents + rel->r_offset - 4, + memcpy (contents + roff - 4, "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x8d\x80\0\0\0", 16); - bfd_put_32 (output_bfd, tpoff (info, relocation), - contents + rel->r_offset + 8); - /* Skip R_X86_64_PLT32. */ + bfd_put_32 (output_bfd, + elf64_x86_64_tpoff (info, relocation), + contents + roff + 8); + /* Skip R_X86_64_PC32/R_X86_64_PLT32. */ rel++; continue; } @@ -2563,32 +3282,20 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, Change it to: movl $x@tpoff, %rax - - Registers other than %rax may be set up here. */ + */ unsigned int val, type, type2; - bfd_vma roff; - /* First, make sure it's a leaq adding rip to a - 32-bit offset into any register, although it's - probably almost always going to be rax. */ - roff = rel->r_offset; - BFD_ASSERT (roff >= 3); type = bfd_get_8 (input_bfd, contents + roff - 3); - BFD_ASSERT ((type & 0xfb) == 0x48); type2 = bfd_get_8 (input_bfd, contents + roff - 2); - BFD_ASSERT (type2 == 0x8d); val = bfd_get_8 (input_bfd, contents + roff - 1); - BFD_ASSERT ((val & 0xc7) == 0x05); - BFD_ASSERT (roff + 4 <= input_section->size); - - /* Now modify the instruction as appropriate. */ bfd_put_8 (output_bfd, 0x48 | ((type >> 2) & 1), contents + roff - 3); bfd_put_8 (output_bfd, 0xc7, contents + roff - 2); bfd_put_8 (output_bfd, 0xc0 | ((val >> 3) & 7), contents + roff - 1); - bfd_put_32 (output_bfd, tpoff (info, relocation), + bfd_put_32 (output_bfd, + elf64_x86_64_tpoff (info, relocation), contents + roff); continue; } @@ -2598,29 +3305,13 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, It's originally: call *(%rax) Turn it into: - nop; nop. */ - - unsigned int val, type; - bfd_vma roff; - - /* First, make sure it's a call *(%rax). */ - roff = rel->r_offset; - BFD_ASSERT (roff + 2 <= input_section->size); - type = bfd_get_8 (input_bfd, contents + roff); - BFD_ASSERT (type == 0xff); - val = bfd_get_8 (input_bfd, contents + roff + 1); - BFD_ASSERT (val == 0x10); - - /* Now modify the instruction as appropriate. Use - xchg %ax,%ax instead of 2 nops. */ + xchg %ax,%ax. */ bfd_put_8 (output_bfd, 0x66, contents + roff); bfd_put_8 (output_bfd, 0x90, contents + roff + 1); continue; } - else + else if (ELF64_R_TYPE (rel->r_info) == R_X86_64_GOTTPOFF) { - unsigned int val, type, reg; - /* IE->LE transition: Originally it can be one of: movq foo@gottpoff(%rip), %reg @@ -2629,25 +3320,23 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, movq $foo, %reg leaq foo(%reg), %reg addq $foo, %reg. */ - BFD_ASSERT (rel->r_offset >= 3); - val = bfd_get_8 (input_bfd, contents + rel->r_offset - 3); - BFD_ASSERT (val == 0x48 || val == 0x4c); - type = bfd_get_8 (input_bfd, contents + rel->r_offset - 2); - BFD_ASSERT (type == 0x8b || type == 0x03); - reg = bfd_get_8 (input_bfd, contents + rel->r_offset - 1); - BFD_ASSERT ((reg & 0xc7) == 5); + + unsigned int val, type, reg; + + val = bfd_get_8 (input_bfd, contents + roff - 3); + type = bfd_get_8 (input_bfd, contents + roff - 2); + reg = bfd_get_8 (input_bfd, contents + roff - 1); reg >>= 3; - BFD_ASSERT (rel->r_offset + 4 <= input_section->size); if (type == 0x8b) { /* movq */ if (val == 0x4c) bfd_put_8 (output_bfd, 0x49, - contents + rel->r_offset - 3); + contents + roff - 3); bfd_put_8 (output_bfd, 0xc7, - contents + rel->r_offset - 2); + contents + roff - 2); bfd_put_8 (output_bfd, 0xc0 | reg, - contents + rel->r_offset - 1); + contents + roff - 1); } else if (reg == 4) { @@ -2655,30 +3344,33 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, special */ if (val == 0x4c) bfd_put_8 (output_bfd, 0x49, - contents + rel->r_offset - 3); + contents + roff - 3); bfd_put_8 (output_bfd, 0x81, - contents + rel->r_offset - 2); + contents + roff - 2); bfd_put_8 (output_bfd, 0xc0 | reg, - contents + rel->r_offset - 1); + contents + roff - 1); } else { /* addq -> leaq */ if (val == 0x4c) bfd_put_8 (output_bfd, 0x4d, - contents + rel->r_offset - 3); + contents + roff - 3); bfd_put_8 (output_bfd, 0x8d, - contents + rel->r_offset - 2); + contents + roff - 2); bfd_put_8 (output_bfd, 0x80 | reg | (reg << 3), - contents + rel->r_offset - 1); + contents + roff - 1); } - bfd_put_32 (output_bfd, tpoff (info, relocation), - contents + rel->r_offset); + bfd_put_32 (output_bfd, + elf64_x86_64_tpoff (info, relocation), + contents + roff); continue; } + else + BFD_ASSERT (FALSE); } - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) abort (); if (h != NULL) @@ -2704,7 +3396,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, int dr_type, indx; asection *sreloc; - if (htab->srelgot == NULL) + if (htab->elf.srelgot == NULL) abort (); indx = h && h->dynindx != -1 ? h->dynindx : 0; @@ -2713,28 +3405,28 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { outrel.r_info = ELF64_R_INFO (indx, R_X86_64_TLSDESC); BFD_ASSERT (htab->sgotplt_jump_table_size + offplt - + 2 * GOT_ENTRY_SIZE <= htab->sgotplt->size); - outrel.r_offset = (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + + 2 * GOT_ENTRY_SIZE <= htab->elf.sgotplt->size); + outrel.r_offset = (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + offplt + htab->sgotplt_jump_table_size); - sreloc = htab->srelplt; + sreloc = htab->elf.srelplt; loc = sreloc->contents; loc += sreloc->reloc_count++ * sizeof (Elf64_External_Rela); BFD_ASSERT (loc + sizeof (Elf64_External_Rela) <= sreloc->contents + sreloc->size); if (indx == 0) - outrel.r_addend = relocation - dtpoff_base (info); + outrel.r_addend = relocation - elf64_x86_64_dtpoff_base (info); else outrel.r_addend = 0; bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc); } - sreloc = htab->srelgot; + sreloc = htab->elf.srelgot; - outrel.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + off); + outrel.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); if (GOT_TLS_GD_P (tls_type)) dr_type = R_X86_64_DTPMOD64; @@ -2743,11 +3435,11 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, else dr_type = R_X86_64_TPOFF64; - bfd_put_64 (output_bfd, 0, htab->sgot->contents + off); + bfd_put_64 (output_bfd, 0, htab->elf.sgot->contents + off); outrel.r_addend = 0; if ((dr_type == R_X86_64_TPOFF64 || dr_type == R_X86_64_TLSDESC) && indx == 0) - outrel.r_addend = relocation - dtpoff_base (info); + outrel.r_addend = relocation - elf64_x86_64_dtpoff_base (info); outrel.r_info = ELF64_R_INFO (indx, dr_type); loc = sreloc->contents; @@ -2762,13 +3454,13 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { BFD_ASSERT (! unresolved_reloc); bfd_put_64 (output_bfd, - relocation - dtpoff_base (info), - htab->sgot->contents + off + GOT_ENTRY_SIZE); + relocation - elf64_x86_64_dtpoff_base (info), + htab->elf.sgot->contents + off + GOT_ENTRY_SIZE); } else { bfd_put_64 (output_bfd, 0, - htab->sgot->contents + off + GOT_ENTRY_SIZE); + htab->elf.sgot->contents + off + GOT_ENTRY_SIZE); outrel.r_info = ELF64_R_INFO (indx, R_X86_64_DTPOFF64); outrel.r_offset += GOT_ENTRY_SIZE; @@ -2794,156 +3486,120 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { if (r_type == R_X86_64_GOTPC32_TLSDESC || r_type == R_X86_64_TLSDESC_CALL) - relocation = htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + relocation = htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + offplt + htab->sgotplt_jump_table_size; else - relocation = htab->sgot->output_section->vma - + htab->sgot->output_offset + off; + relocation = htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off; unresolved_reloc = FALSE; } - else if (ELF64_R_TYPE (rel->r_info) == R_X86_64_TLSGD) - { - unsigned int i; - static unsigned char tlsgd[8] - = { 0x66, 0x48, 0x8d, 0x3d, 0x66, 0x66, 0x48, 0xe8 }; - - /* GD->IE transition. - .byte 0x66; leaq foo@tlsgd(%rip), %rdi - .word 0x6666; rex64; call __tls_get_addr@plt - Change it into: - movq %fs:0, %rax - addq foo@gottpoff(%rip), %rax */ - BFD_ASSERT (rel->r_offset >= 4); - for (i = 0; i < 4; i++) - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset - 4 + i) - == tlsgd[i]); - BFD_ASSERT (rel->r_offset + 12 <= input_section->size); - for (i = 0; i < 4; i++) - BFD_ASSERT (bfd_get_8 (input_bfd, - contents + rel->r_offset + 4 + i) - == tlsgd[i+4]); - BFD_ASSERT (rel + 1 < relend); - BFD_ASSERT (ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PLT32); - memcpy (contents + rel->r_offset - 4, - "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x03\x05\0\0\0", - 16); - - relocation = (htab->sgot->output_section->vma - + htab->sgot->output_offset + off - - rel->r_offset - - input_section->output_section->vma - - input_section->output_offset - - 12); - bfd_put_32 (output_bfd, relocation, - contents + rel->r_offset + 8); - /* Skip R_X86_64_PLT32. */ - rel++; - continue; - } - else if (ELF64_R_TYPE (rel->r_info) == R_X86_64_GOTPC32_TLSDESC) + else { - /* GDesc -> IE transition. - It's originally something like: - leaq x@tlsdesc(%rip), %rax - - Change it to: - movq x@gottpoff(%rip), %rax # before nop; nop - - Registers other than %rax may be set up here. */ - - unsigned int val, type, type2; - bfd_vma roff; - - /* First, make sure it's a leaq adding rip to a 32-bit - offset into any register, although it's probably - almost always going to be rax. */ - roff = rel->r_offset; - BFD_ASSERT (roff >= 3); - type = bfd_get_8 (input_bfd, contents + roff - 3); - BFD_ASSERT ((type & 0xfb) == 0x48); - type2 = bfd_get_8 (input_bfd, contents + roff - 2); - BFD_ASSERT (type2 == 0x8d); - val = bfd_get_8 (input_bfd, contents + roff - 1); - BFD_ASSERT ((val & 0xc7) == 0x05); - BFD_ASSERT (roff + 4 <= input_section->size); - - /* Now modify the instruction as appropriate. */ - /* To turn a leaq into a movq in the form we use it, it - suffices to change the second byte from 0x8d to - 0x8b. */ - bfd_put_8 (output_bfd, 0x8b, contents + roff - 2); + bfd_vma roff = rel->r_offset; - bfd_put_32 (output_bfd, - htab->sgot->output_section->vma - + htab->sgot->output_offset + off - - rel->r_offset - - input_section->output_section->vma - - input_section->output_offset - - 4, - contents + roff); - continue; - } - else if (ELF64_R_TYPE (rel->r_info) == R_X86_64_TLSDESC_CALL) - { - /* GDesc -> IE transition. - It's originally: - call *(%rax) + if (ELF64_R_TYPE (rel->r_info) == R_X86_64_TLSGD) + { + /* GD->IE transition. + .byte 0x66; leaq foo@tlsgd(%rip), %rdi + .word 0x6666; rex64; call __tls_get_addr@plt + Change it into: + movq %fs:0, %rax + addq foo@gottpoff(%rip), %rax */ + memcpy (contents + roff - 4, + "\x64\x48\x8b\x04\x25\0\0\0\0\x48\x03\x05\0\0\0", + 16); - Change it to: - nop; nop. */ + relocation = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off + - roff + - input_section->output_section->vma + - input_section->output_offset + - 12); + bfd_put_32 (output_bfd, relocation, + contents + roff + 8); + /* Skip R_X86_64_PLT32. */ + rel++; + continue; + } + else if (ELF64_R_TYPE (rel->r_info) == R_X86_64_GOTPC32_TLSDESC) + { + /* GDesc -> IE transition. + It's originally something like: + leaq x@tlsdesc(%rip), %rax - unsigned int val, type; - bfd_vma roff; + Change it to: + movq x@gottpoff(%rip), %rax # before xchg %ax,%ax + */ - /* First, make sure it's a call *(%eax). */ - roff = rel->r_offset; - BFD_ASSERT (roff + 2 <= input_section->size); - type = bfd_get_8 (input_bfd, contents + roff); - BFD_ASSERT (type == 0xff); - val = bfd_get_8 (input_bfd, contents + roff + 1); - BFD_ASSERT (val == 0x10); + unsigned int val, type, type2; - /* 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); + type = bfd_get_8 (input_bfd, contents + roff - 3); + type2 = bfd_get_8 (input_bfd, contents + roff - 2); + val = bfd_get_8 (input_bfd, contents + roff - 1); - continue; + /* Now modify the instruction as appropriate. To + turn a leaq into a movq in the form we use it, it + suffices to change the second byte from 0x8d to + 0x8b. */ + bfd_put_8 (output_bfd, 0x8b, contents + roff - 2); + + bfd_put_32 (output_bfd, + htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off + - rel->r_offset + - input_section->output_section->vma + - input_section->output_offset + - 4, + contents + roff); + continue; + } + else if (ELF64_R_TYPE (rel->r_info) == R_X86_64_TLSDESC_CALL) + { + /* GDesc -> IE transition. + It's originally: + call *(%rax) + + Change it to: + xchg %ax,%ax. */ + + unsigned int val, type; + + type = bfd_get_8 (input_bfd, contents + roff); + val = bfd_get_8 (input_bfd, contents + roff + 1); + bfd_put_8 (output_bfd, 0x66, contents + roff); + bfd_put_8 (output_bfd, 0x90, contents + roff + 1); + continue; + } + else + BFD_ASSERT (FALSE); } - else - BFD_ASSERT (FALSE); break; case R_X86_64_TLSLD: - if (! info->shared) + if (! elf64_x86_64_tls_transition (info, input_bfd, + input_section, contents, + symtab_hdr, sym_hashes, + &r_type, GOT_UNKNOWN, + rel, relend, h, r_symndx)) + return FALSE; + + if (r_type != R_X86_64_TLSLD) { /* LD->LE transition: - Ensure it is: - leaq foo@tlsld(%rip), %rdi; call __tls_get_addr@plt. + leaq foo@tlsld(%rip), %rdi; call __tls_get_addr. We change it into: .word 0x6666; .byte 0x66; movl %fs:0, %rax. */ - BFD_ASSERT (rel->r_offset >= 3); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset - 3) - == 0x48); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset - 2) - == 0x8d); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset - 1) - == 0x3d); - BFD_ASSERT (rel->r_offset + 9 <= input_section->size); - BFD_ASSERT (bfd_get_8 (input_bfd, contents + rel->r_offset + 4) - == 0xe8); - BFD_ASSERT (rel + 1 < relend); - BFD_ASSERT (ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PLT32); + + BFD_ASSERT (r_type == R_X86_64_TPOFF32); memcpy (contents + rel->r_offset - 3, "\x66\x66\x66\x64\x48\x8b\x04\x25\0\0\0", 12); - /* Skip R_X86_64_PLT32. */ + /* Skip R_X86_64_PC32/R_X86_64_PLT32. */ rel++; continue; } - if (htab->sgot == NULL) + if (htab->elf.sgot == NULL) abort (); off = htab->tls_ld_got.offset; @@ -2954,38 +3610,38 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, Elf_Internal_Rela outrel; bfd_byte *loc; - if (htab->srelgot == NULL) + if (htab->elf.srelgot == NULL) abort (); - outrel.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + off); + outrel.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off); bfd_put_64 (output_bfd, 0, - htab->sgot->contents + off); + htab->elf.sgot->contents + off); bfd_put_64 (output_bfd, 0, - htab->sgot->contents + off + GOT_ENTRY_SIZE); + htab->elf.sgot->contents + off + GOT_ENTRY_SIZE); outrel.r_info = ELF64_R_INFO (0, R_X86_64_DTPMOD64); outrel.r_addend = 0; - loc = htab->srelgot->contents; - loc += htab->srelgot->reloc_count++ * sizeof (Elf64_External_Rela); + loc = htab->elf.srelgot->contents; + loc += htab->elf.srelgot->reloc_count++ * sizeof (Elf64_External_Rela); bfd_elf64_swap_reloca_out (output_bfd, &outrel, loc); htab->tls_ld_got.offset |= 1; } - relocation = htab->sgot->output_section->vma - + htab->sgot->output_offset + off; + relocation = htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + off; unresolved_reloc = FALSE; break; case R_X86_64_DTPOFF32: - if (info->shared || (input_section->flags & SEC_CODE) == 0) - relocation -= dtpoff_base (info); + if (!info->executable|| (input_section->flags & SEC_CODE) == 0) + relocation -= elf64_x86_64_dtpoff_base (info); else - relocation = tpoff (info, relocation); + relocation = elf64_x86_64_tpoff (info, relocation); break; case R_X86_64_TPOFF32: - BFD_ASSERT (! info->shared); - relocation = tpoff (info, relocation); + BFD_ASSERT (info->executable); + relocation = elf64_x86_64_tpoff (info, relocation); break; default: @@ -3006,6 +3662,7 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, howto->name, h->root.root.string); +do_relocation: r = _bfd_final_link_relocate (howto, input_bfd, input_section, contents, rel->r_offset, relocation, rel->r_addend); @@ -3068,28 +3725,58 @@ elf64_x86_64_finish_dynamic_symbol (bfd *output_bfd, bfd_vma got_offset; Elf_Internal_Rela rela; bfd_byte *loc; + asection *plt, *gotplt, *relplt; + + /* When building a static executable, use .iplt, .igot.plt and + .rela.iplt sections for STT_GNU_IFUNC symbols. */ + if (htab->elf.splt != NULL) + { + plt = htab->elf.splt; + gotplt = htab->elf.sgotplt; + relplt = htab->elf.srelplt; + } + else + { + plt = htab->elf.iplt; + gotplt = htab->elf.igotplt; + relplt = htab->elf.irelplt; + } /* This symbol has an entry in the procedure linkage table. Set it up. */ - if (h->dynindx == -1 - || htab->splt == NULL - || htab->sgotplt == NULL - || htab->srelplt == NULL) + if ((h->dynindx == -1 + && !((h->forced_local || info->executable) + && h->def_regular + && h->type == STT_GNU_IFUNC)) + || plt == NULL + || gotplt == NULL + || relplt == NULL) abort (); /* Get the index in the procedure linkage table which 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 / PLT_ENTRY_SIZE - 1; - - /* Get the offset into the .got table of the entry that + first entry in the procedure linkage table is reserved. + + Get the offset into the .got table of the entry that corresponds to this function. Each .got entry is GOT_ENTRY_SIZE - bytes. The first three are reserved for the dynamic linker. */ - got_offset = (plt_index + 3) * GOT_ENTRY_SIZE; + bytes. The first three are reserved for the dynamic linker. + + For static executables, we don't reserve anything. */ + + if (plt == htab->elf.splt) + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE - 1; + got_offset = (plt_index + 3) * GOT_ENTRY_SIZE; + } + else + { + plt_index = h->plt.offset / PLT_ENTRY_SIZE; + got_offset = plt_index * GOT_ENTRY_SIZE; + } /* Fill in the entry in the procedure linkage table. */ - memcpy (htab->splt->contents + h->plt.offset, elf64_x86_64_plt_entry, + memcpy (plt->contents + h->plt.offset, elf64_x86_64_plt_entry, PLT_ENTRY_SIZE); /* Insert the relocation positions of the plt section. The magic @@ -3098,35 +3785,56 @@ elf64_x86_64_finish_dynamic_symbol (bfd *output_bfd, /* Put offset for jmp *name@GOTPCREL(%rip), since the instruction uses 6 bytes, subtract this value. */ bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (gotplt->output_section->vma + + gotplt->output_offset + got_offset - - htab->splt->output_section->vma - - htab->splt->output_offset + - plt->output_section->vma + - plt->output_offset - h->plt.offset - 6), - htab->splt->contents + h->plt.offset + 2); - /* Put relocation index. */ - bfd_put_32 (output_bfd, plt_index, - htab->splt->contents + h->plt.offset + 7); - /* Put offset for jmp .PLT0. */ - bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE), - htab->splt->contents + h->plt.offset + 12); + plt->contents + h->plt.offset + 2); + + /* Don't fill PLT entry for static executables. */ + if (plt == htab->elf.splt) + { + /* Put relocation index. */ + bfd_put_32 (output_bfd, plt_index, + plt->contents + h->plt.offset + 7); + /* Put offset for jmp .PLT0. */ + bfd_put_32 (output_bfd, - (h->plt.offset + PLT_ENTRY_SIZE), + plt->contents + h->plt.offset + 12); + } /* Fill in the entry in the global offset table, initially this points to the pushq instruction in the PLT which is at offset 6. */ - bfd_put_64 (output_bfd, (htab->splt->output_section->vma - + htab->splt->output_offset + bfd_put_64 (output_bfd, (plt->output_section->vma + + plt->output_offset + h->plt.offset + 6), - htab->sgotplt->contents + got_offset); + gotplt->contents + got_offset); /* Fill in the entry in the .rela.plt section. */ - rela.r_offset = (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + rela.r_offset = (gotplt->output_section->vma + + gotplt->output_offset + got_offset); - rela.r_info = ELF64_R_INFO (h->dynindx, R_X86_64_JUMP_SLOT); - rela.r_addend = 0; - loc = htab->srelplt->contents + plt_index * sizeof (Elf64_External_Rela); + if (h->dynindx == -1 + || ((info->executable + || ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + && h->def_regular + && h->type == STT_GNU_IFUNC)) + { + /* If an STT_GNU_IFUNC symbol is locally defined, generate + R_X86_64_IRELATIVE instead of R_X86_64_JUMP_SLOT. */ + rela.r_info = ELF64_R_INFO (0, R_X86_64_IRELATIVE); + rela.r_addend = (h->root.u.def.value + + h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset); + } + else + { + rela.r_info = ELF64_R_INFO (h->dynindx, R_X86_64_JUMP_SLOT); + rela.r_addend = 0; + } + loc = relplt->contents + plt_index * sizeof (Elf64_External_Rela); bfd_elf64_swap_reloca_out (output_bfd, &rela, loc); if (!h->def_regular) @@ -3154,11 +3862,11 @@ elf64_x86_64_finish_dynamic_symbol (bfd *output_bfd, /* This symbol has an entry in the global offset table. Set it up. */ - if (htab->sgot == NULL || htab->srelgot == NULL) + if (htab->elf.sgot == NULL || htab->elf.srelgot == NULL) abort (); - rela.r_offset = (htab->sgot->output_section->vma - + htab->sgot->output_offset + rela.r_offset = (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + (h->got.offset &~ (bfd_vma) 1)); /* If this is a static link, or it is a -Bsymbolic link and the @@ -3166,9 +3874,37 @@ elf64_x86_64_finish_dynamic_symbol (bfd *output_bfd, of a version file, we just want to emit a RELATIVE reloc. The entry in the global offset table will already have been initialized in the relocate_section function. */ - if (info->shared - && SYMBOL_REFERENCES_LOCAL (info, h)) + if (h->def_regular + && h->type == STT_GNU_IFUNC) + { + if (info->shared) + { + /* Generate R_X86_64_GLOB_DAT. */ + goto do_glob_dat; + } + else + { + asection *plt; + + if (!h->pointer_equality_needed) + abort (); + + /* For non-shared object, we can't use .got.plt, which + contains the real function addres if we need pointer + equality. We load the GOT entry with the PLT entry. */ + plt = htab->elf.splt ? htab->elf.splt : htab->elf.iplt; + bfd_put_64 (output_bfd, (plt->output_section->vma + + plt->output_offset + + h->plt.offset), + htab->elf.sgot->contents + h->got.offset); + return TRUE; + } + } + else if (info->shared + && SYMBOL_REFERENCES_LOCAL (info, h)) { + if (!h->def_regular) + return FALSE; BFD_ASSERT((h->got.offset & 1) != 0); rela.r_info = ELF64_R_INFO (0, R_X86_64_RELATIVE); rela.r_addend = (h->root.u.def.value @@ -3178,14 +3914,15 @@ elf64_x86_64_finish_dynamic_symbol (bfd *output_bfd, else { BFD_ASSERT((h->got.offset & 1) == 0); +do_glob_dat: bfd_put_64 (output_bfd, (bfd_vma) 0, - htab->sgot->contents + h->got.offset); + htab->elf.sgot->contents + h->got.offset); rela.r_info = ELF64_R_INFO (h->dynindx, R_X86_64_GLOB_DAT); rela.r_addend = 0; } - loc = htab->srelgot->contents; - loc += htab->srelgot->reloc_count++ * sizeof (Elf64_External_Rela); + loc = htab->elf.srelgot->contents; + loc += htab->elf.srelgot->reloc_count++ * sizeof (Elf64_External_Rela); bfd_elf64_swap_reloca_out (output_bfd, &rela, loc); } @@ -3212,14 +3949,31 @@ elf64_x86_64_finish_dynamic_symbol (bfd *output_bfd, bfd_elf64_swap_reloca_out (output_bfd, &rela, loc); } - /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */ - if (strcmp (h->root.root.string, "_DYNAMIC") == 0 - || h == htab->elf.hgot) + /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. SYM may + be NULL for local symbols. */ + if (sym != NULL + && (strcmp (h->root.root.string, "_DYNAMIC") == 0 + || h == htab->elf.hgot)) sym->st_shndx = SHN_ABS; return TRUE; } +/* Finish up local dynamic symbol handling. We set the contents of + various dynamic sections here. */ + +static bfd_boolean +elf64_x86_64_finish_local_dynamic_symbol (void **slot, void *inf) +{ + struct elf_link_hash_entry *h + = (struct elf_link_hash_entry *) *slot; + struct bfd_link_info *info + = (struct bfd_link_info *) inf; + + return elf64_x86_64_finish_dynamic_symbol (info->output_bfd, + info, h, NULL); +} + /* Used to decide how to sort relocs in an optimal manner for the dynamic linker, before writing them out. */ @@ -3256,7 +4010,7 @@ elf64_x86_64_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf { Elf64_External_Dyn *dyncon, *dynconend; - if (sdyn == NULL || htab->sgot == NULL) + if (sdyn == NULL || htab->elf.sgot == NULL) abort (); dyncon = (Elf64_External_Dyn *) sdyn->contents; @@ -3274,16 +4028,16 @@ elf64_x86_64_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf continue; case DT_PLTGOT: - s = htab->sgotplt; + s = htab->elf.sgotplt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_JMPREL: - dyn.d_un.d_ptr = htab->srelplt->output_section->vma; + dyn.d_un.d_ptr = htab->elf.srelplt->output_section->vma; break; case DT_PLTRELSZ: - s = htab->srelplt->output_section; + s = htab->elf.srelplt->output_section; dyn.d_un.d_val = s->size; break; @@ -3295,21 +4049,21 @@ elf64_x86_64_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf linker script arranges for .rela.plt to follow all other relocation sections, we don't have to worry about changing the DT_RELA entry. */ - if (htab->srelplt != NULL) + if (htab->elf.srelplt != NULL) { - s = htab->srelplt->output_section; + s = htab->elf.srelplt->output_section; dyn.d_un.d_val -= s->size; } break; case DT_TLSDESC_PLT: - s = htab->splt; + s = htab->elf.splt; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset + htab->tlsdesc_plt; break; case DT_TLSDESC_GOT: - s = htab->sgot; + s = htab->elf.sgot; dyn.d_un.d_ptr = s->output_section->vma + s->output_offset + htab->tlsdesc_got; break; @@ -3319,97 +4073,102 @@ elf64_x86_64_finish_dynamic_sections (bfd *output_bfd, struct bfd_link_info *inf } /* Fill in the special first entry in the procedure linkage table. */ - if (htab->splt && htab->splt->size > 0) + if (htab->elf.splt && htab->elf.splt->size > 0) { /* Fill in the first entry in the procedure linkage table. */ - memcpy (htab->splt->contents, elf64_x86_64_plt0_entry, + memcpy (htab->elf.splt->contents, elf64_x86_64_plt0_entry, PLT_ENTRY_SIZE); /* Add offset for pushq GOT+8(%rip), since the instruction uses 6 bytes subtract this value. */ bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + 8 - - htab->splt->output_section->vma - - htab->splt->output_offset + - htab->elf.splt->output_section->vma + - htab->elf.splt->output_offset - 6), - htab->splt->contents + 2); + htab->elf.splt->contents + 2); /* Add offset for jmp *GOT+16(%rip). The 12 is the offset to the end of the instruction. */ bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + 16 - - htab->splt->output_section->vma - - htab->splt->output_offset + - htab->elf.splt->output_section->vma + - htab->elf.splt->output_offset - 12), - htab->splt->contents + 8); + htab->elf.splt->contents + 8); - elf_section_data (htab->splt->output_section)->this_hdr.sh_entsize = + elf_section_data (htab->elf.splt->output_section)->this_hdr.sh_entsize = PLT_ENTRY_SIZE; if (htab->tlsdesc_plt) { bfd_put_64 (output_bfd, (bfd_vma) 0, - htab->sgot->contents + htab->tlsdesc_got); + htab->elf.sgot->contents + htab->tlsdesc_got); - memcpy (htab->splt->contents + htab->tlsdesc_plt, + memcpy (htab->elf.splt->contents + htab->tlsdesc_plt, elf64_x86_64_plt0_entry, PLT_ENTRY_SIZE); /* Add offset for pushq GOT+8(%rip), since the instruction uses 6 bytes subtract this value. */ bfd_put_32 (output_bfd, - (htab->sgotplt->output_section->vma - + htab->sgotplt->output_offset + (htab->elf.sgotplt->output_section->vma + + htab->elf.sgotplt->output_offset + 8 - - htab->splt->output_section->vma - - htab->splt->output_offset + - htab->elf.splt->output_section->vma + - htab->elf.splt->output_offset - htab->tlsdesc_plt - 6), - htab->splt->contents + htab->tlsdesc_plt + 2); + htab->elf.splt->contents + htab->tlsdesc_plt + 2); /* Add offset for jmp *GOT+TDG(%rip), where TGD stands for htab->tlsdesc_got. The 12 is the offset to the end of the instruction. */ bfd_put_32 (output_bfd, - (htab->sgot->output_section->vma - + htab->sgot->output_offset + (htab->elf.sgot->output_section->vma + + htab->elf.sgot->output_offset + htab->tlsdesc_got - - htab->splt->output_section->vma - - htab->splt->output_offset + - htab->elf.splt->output_section->vma + - htab->elf.splt->output_offset - htab->tlsdesc_plt - 12), - htab->splt->contents + htab->tlsdesc_plt + 8); + htab->elf.splt->contents + htab->tlsdesc_plt + 8); } } } - if (htab->sgotplt) + if (htab->elf.sgotplt) { /* Fill in the first three entries in the global offset table. */ - if (htab->sgotplt->size > 0) + if (htab->elf.sgotplt->size > 0) { /* Set the first entry in the global offset table to the address of the dynamic section. */ if (sdyn == NULL) - bfd_put_64 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents); + bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents); else bfd_put_64 (output_bfd, sdyn->output_section->vma + sdyn->output_offset, - htab->sgotplt->contents); + htab->elf.sgotplt->contents); /* Write GOT[1] and GOT[2], needed for the dynamic linker. */ - bfd_put_64 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + GOT_ENTRY_SIZE); - bfd_put_64 (output_bfd, (bfd_vma) 0, htab->sgotplt->contents + GOT_ENTRY_SIZE*2); + bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + GOT_ENTRY_SIZE); + bfd_put_64 (output_bfd, (bfd_vma) 0, htab->elf.sgotplt->contents + GOT_ENTRY_SIZE*2); } - elf_section_data (htab->sgotplt->output_section)->this_hdr.sh_entsize = + elf_section_data (htab->elf.sgotplt->output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE; } - if (htab->sgot && htab->sgot->size > 0) - elf_section_data (htab->sgot->output_section)->this_hdr.sh_entsize + if (htab->elf.sgot && htab->elf.sgot->size > 0) + elf_section_data (htab->elf.sgot->output_section)->this_hdr.sh_entsize = GOT_ENTRY_SIZE; + /* Fill PLT and GOT entries for local STT_GNU_IFUNC symbols. */ + htab_traverse (htab->loc_hash_table, + elf64_x86_64_finish_local_dynamic_symbol, + info); + return TRUE; } @@ -3447,11 +4206,12 @@ elf64_x86_64_section_from_shdr (bfd *abfd, static bfd_boolean elf64_x86_64_add_symbol_hook (bfd *abfd, - struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct bfd_link_info *info, Elf_Internal_Sym *sym, const char **namep ATTRIBUTE_UNUSED, flagword *flagsp ATTRIBUTE_UNUSED, - asection **secp, bfd_vma *valp) + asection **secp, + bfd_vma *valp) { asection *lcomm; @@ -3474,6 +4234,10 @@ elf64_x86_64_add_symbol_hook (bfd *abfd, *valp = sym->st_size; break; } + + if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC) + elf_tdata (info->output_bfd)->has_ifunc_symbols = TRUE; + return TRUE; } @@ -3580,7 +4344,7 @@ elf64_x86_64_merge_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED, } else if (sym->st_shndx == SHN_X86_64_LCOMMON && (elf_section_flags (*oldsec) & SHF_X86_64_LARGE) == 0) - *psec = *sec = bfd_com_section_ptr; + *psec = *sec = bfd_com_section_ptr; } return TRUE; @@ -3591,7 +4355,7 @@ elf64_x86_64_additional_program_headers (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED) { asection *s; - int count = 0; + int count = 0; /* Check to see if we need a large readonly segment. */ s = bfd_get_section_by_name (abfd, ".lrodata"); @@ -3621,7 +4385,7 @@ elf64_x86_64_hash_symbol (struct elf_link_hash_entry *h) return _bfd_elf_hash_symbol (h); } -static const struct bfd_elf_special_section +static const struct bfd_elf_special_section elf64_x86_64_special_sections[]= { { STRING_COMMA_LEN (".gnu.linkonce.lb"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_X86_64_LARGE}, @@ -3653,11 +4417,14 @@ 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_link_hash_table_free \ + elf64_x86_64_link_hash_table_free #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_relocs_compatible _bfd_elf_relocs_compatible #define elf_backend_check_relocs elf64_x86_64_check_relocs #define elf_backend_copy_indirect_symbol elf64_x86_64_copy_indirect_symbol #define elf_backend_create_dynamic_sections elf64_x86_64_create_dynamic_sections @@ -3700,6 +4467,9 @@ static const struct bfd_elf_special_section #define elf_backend_hash_symbol \ elf64_x86_64_hash_symbol +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers _bfd_elf_set_osabi + #include "elf64-target.h" /* FreeBSD support. */ @@ -3712,10 +4482,57 @@ static const struct bfd_elf_special_section #undef ELF_OSABI #define ELF_OSABI ELFOSABI_FREEBSD +#undef elf64_bed +#define elf64_bed elf64_x86_64_fbsd_bed + +#include "elf64-target.h" + +/* Intel L1OM support. */ + +static bfd_boolean +elf64_l1om_elf_object_p (bfd *abfd) +{ + /* Set the right machine number for an L1OM elf64 file. */ + bfd_default_set_arch_mach (abfd, bfd_arch_l1om, bfd_mach_l1om); + return TRUE; +} + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM bfd_elf64_l1om_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf64-l1om" +#undef ELF_ARCH +#define ELF_ARCH bfd_arch_l1om + +#undef ELF_MACHINE_CODE +#define ELF_MACHINE_CODE EM_L1OM + +#undef ELF_OSABI + +#undef elf64_bed +#define elf64_bed elf64_l1om_bed + +#undef elf_backend_object_p +#define elf_backend_object_p elf64_l1om_elf_object_p + #undef elf_backend_post_process_headers -#define elf_backend_post_process_headers _bfd_elf_set_osabi + +#include "elf64-target.h" + +/* FreeBSD L1OM support. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM bfd_elf64_l1om_freebsd_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elf64-l1om-freebsd" + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_FREEBSD #undef elf64_bed -#define elf64_bed elf64_x86_64_fbsd_bed +#define elf64_bed elf64_l1om_fbsd_bed + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers _bfd_elf_set_osabi #include "elf64-target.h" diff --git a/bfd/elf64.c b/bfd/elf64.c index e983d2d..04fd3f0 100644 --- a/bfd/elf64.c +++ b/bfd/elf64.c @@ -1,5 +1,5 @@ /* ELF 64-bit executable support for BFD. - Copyright 1993, 2007 Free Software Foundation, Inc. + Copyright 1993, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/elfcode.h b/bfd/elfcode.h index e16f579..f539119 100644 --- a/bfd/elfcode.h +++ b/bfd/elfcode.h @@ -1,6 +1,6 @@ /* ELF executable support for BFD. Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Fred Fish @ Cygnus Support, from information published @@ -176,8 +176,8 @@ elf_swap_symbol_in (bfd *abfd, const void *pshn, Elf_Internal_Sym *dst) { - const Elf_External_Sym *src = psrc; - const Elf_External_Sym_Shndx *shndx = pshn; + const Elf_External_Sym *src = (const Elf_External_Sym *) psrc; + const Elf_External_Sym_Shndx *shndx = (const Elf_External_Sym_Shndx *) pshn; int signed_vma = get_elf_backend_data (abfd)->sign_extend_vma; dst->st_name = H_GET_32 (abfd, src->st_name); @@ -189,12 +189,14 @@ elf_swap_symbol_in (bfd *abfd, dst->st_info = H_GET_8 (abfd, src->st_info); dst->st_other = H_GET_8 (abfd, src->st_other); dst->st_shndx = H_GET_16 (abfd, src->st_shndx); - if (dst->st_shndx == SHN_XINDEX) + if (dst->st_shndx == (SHN_XINDEX & 0xffff)) { if (shndx == NULL) return FALSE; dst->st_shndx = H_GET_32 (abfd, shndx->est_shndx); } + else if (dst->st_shndx >= (SHN_LORESERVE & 0xffff)) + dst->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff); return TRUE; } @@ -208,19 +210,19 @@ elf_swap_symbol_out (bfd *abfd, void *shndx) { unsigned int tmp; - Elf_External_Sym *dst = cdst; + Elf_External_Sym *dst = (Elf_External_Sym *) cdst; H_PUT_32 (abfd, src->st_name, dst->st_name); H_PUT_WORD (abfd, src->st_value, dst->st_value); H_PUT_WORD (abfd, src->st_size, dst->st_size); H_PUT_8 (abfd, src->st_info, dst->st_info); H_PUT_8 (abfd, src->st_other, dst->st_other); tmp = src->st_shndx; - if (tmp > SHN_HIRESERVE) + if (tmp >= (SHN_LORESERVE & 0xffff) && tmp < SHN_LORESERVE) { if (shndx == NULL) abort (); H_PUT_32 (abfd, tmp, shndx); - tmp = SHN_XINDEX; + tmp = SHN_XINDEX & 0xffff; } H_PUT_16 (abfd, tmp, dst->st_shndx); } @@ -280,12 +282,12 @@ elf_swap_ehdr_out (bfd *abfd, H_PUT_16 (abfd, src->e_phnum, dst->e_phnum); H_PUT_16 (abfd, src->e_shentsize, dst->e_shentsize); tmp = src->e_shnum; - if (tmp >= SHN_LORESERVE) + if (tmp >= (SHN_LORESERVE & 0xffff)) tmp = SHN_UNDEF; H_PUT_16 (abfd, tmp, dst->e_shnum); tmp = src->e_shstrndx; - if (tmp >= SHN_LORESERVE) - tmp = SHN_XINDEX; + if (tmp >= (SHN_LORESERVE & 0xffff)) + tmp = SHN_XINDEX & 0xffff; H_PUT_16 (abfd, tmp, dst->e_shstrndx); } @@ -370,11 +372,17 @@ elf_swap_phdr_out (bfd *abfd, const Elf_Internal_Phdr *src, Elf_External_Phdr *dst) { + const struct elf_backend_data *bed; + bfd_vma p_paddr; + + bed = get_elf_backend_data (abfd); + p_paddr = bed->want_p_paddr_set_to_zero ? 0 : src->p_paddr; + /* note that all elements of dst are *arrays of unsigned char* already... */ H_PUT_32 (abfd, src->p_type, dst->p_type); H_PUT_WORD (abfd, src->p_offset, dst->p_offset); H_PUT_WORD (abfd, src->p_vaddr, dst->p_vaddr); - H_PUT_WORD (abfd, src->p_paddr, dst->p_paddr); + H_PUT_WORD (abfd, p_paddr, dst->p_paddr); H_PUT_WORD (abfd, src->p_filesz, dst->p_filesz); H_PUT_WORD (abfd, src->p_memsz, dst->p_memsz); H_PUT_32 (abfd, src->p_flags, dst->p_flags); @@ -431,7 +439,7 @@ elf_swap_dyn_in (bfd *abfd, const void *p, Elf_Internal_Dyn *dst) { - const Elf_External_Dyn *src = p; + const Elf_External_Dyn *src = (const Elf_External_Dyn *) p; dst->d_tag = H_GET_WORD (abfd, src->d_tag); dst->d_un.d_val = H_GET_WORD (abfd, src->d_un.d_val); @@ -442,7 +450,7 @@ elf_swap_dyn_out (bfd *abfd, const Elf_Internal_Dyn *src, void *p) { - Elf_External_Dyn *dst = p; + Elf_External_Dyn *dst = (Elf_External_Dyn *) p; H_PUT_WORD (abfd, src->d_tag, dst->d_tag); H_PUT_WORD (abfd, src->d_un.d_val, dst->d_un.d_val); @@ -464,25 +472,6 @@ elf_file_p (Elf_External_Ehdr *x_ehdrp) && (x_ehdrp->e_ident[EI_MAG3] == ELFMAG3)); } -/* Determines if a given section index is valid. */ - -static inline bfd_boolean -valid_section_index_p (unsigned index, unsigned num_sections) -{ - /* Note: We allow SHN_UNDEF as a valid section index. */ - if (index < SHN_LORESERVE || index > SHN_HIRESERVE) - return index < num_sections; - - /* We disallow the use of reserved indcies, except for those - with OS or Application specific meaning. The test make use - of the knowledge that: - SHN_LORESERVE == SHN_LOPROC - and - SHN_HIPROC == SHN_LOOS - 1 */ - /* XXX - Should we allow SHN_XINDEX as a valid index here ? */ - return (index >= SHN_LOPROC && index <= SHN_HIOS); -} - /* Check to see if the file associated with ABFD matches the target vector that ABFD points to. @@ -585,6 +574,8 @@ elf_object_p (bfd *abfd) goto got_wrong_format_error; ebd = get_elf_backend_data (abfd); + if (ebd->s->arch_size != ARCH_SIZE) + goto got_wrong_format_error; /* Check that the ELF e_machine field matches what this particular BFD format expects. */ @@ -606,6 +597,8 @@ elf_object_p (bfd *abfd) if ((*target_ptr)->flavour != bfd_target_elf_flavour) continue; back = xvec_get_elf_backend_data (*target_ptr); + if (back->s->arch_size != ARCH_SIZE) + continue; if (back->elf_machine_code == i_ehdrp->e_machine || (back->elf_machine_alt1 != 0 && back->elf_machine_alt1 == i_ehdrp->e_machine) @@ -701,7 +694,7 @@ elf_object_p (bfd *abfd) } /* And similarly for the string table index. */ - if (i_ehdrp->e_shstrndx == SHN_XINDEX) + if (i_ehdrp->e_shstrndx == (SHN_XINDEX & 0xffff)) { i_ehdrp->e_shstrndx = i_shdr.sh_link; if (i_ehdrp->e_shstrndx != i_shdr.sh_link) @@ -743,29 +736,18 @@ elf_object_p (bfd *abfd) unsigned int num_sec; amt = sizeof (*i_shdrp) * i_ehdrp->e_shnum; - i_shdrp = bfd_alloc (abfd, amt); + i_shdrp = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt); if (!i_shdrp) goto got_no_match; num_sec = i_ehdrp->e_shnum; - if (num_sec > SHN_LORESERVE) - num_sec += SHN_HIRESERVE + 1 - SHN_LORESERVE; elf_numsections (abfd) = num_sec; amt = sizeof (i_shdrp) * num_sec; - elf_elfsections (abfd) = bfd_alloc (abfd, amt); + elf_elfsections (abfd) = (Elf_Internal_Shdr **) bfd_alloc (abfd, amt); if (!elf_elfsections (abfd)) goto got_no_match; memcpy (i_shdrp, &i_shdr, sizeof (*i_shdrp)); - shdrp = i_shdrp; - shindex = 0; - if (num_sec > SHN_LORESERVE) - { - for ( ; shindex < SHN_LORESERVE; shindex++) - elf_elfsections (abfd)[shindex] = shdrp++; - for ( ; shindex < SHN_HIRESERVE + 1; shindex++) - elf_elfsections (abfd)[shindex] = i_shdrp; - } - for ( ; shindex < num_sec; shindex++) + for (shdrp = i_shdrp, shindex = 0; shindex < num_sec; shindex++) elf_elfsections (abfd)[shindex] = shdrp++; /* Read in the rest of the section header table and convert it @@ -777,13 +759,29 @@ elf_object_p (bfd *abfd) elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex); /* Sanity check sh_link and sh_info. */ - if (! valid_section_index_p (i_shdrp[shindex].sh_link, num_sec)) - goto got_wrong_format_error; + if (i_shdrp[shindex].sh_link >= num_sec) + { + /* PR 10478: Accept sparc binaries with a sh_link + field set to SHN_BEFORE or SHN_AFTER. */ + switch (ebd->elf_machine_code) + { + case EM_OLD_SPARCV9: + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + if (i_shdrp[shindex].sh_link == (SHN_LORESERVE & 0xffff) /* SHN_BEFORE */ + || i_shdrp[shindex].sh_link == ((SHN_LORESERVE + 1) & 0xffff) /* SHN_AFTER */) + break; + /* Otherwise fall through. */ + default: + goto got_wrong_format_error; + } + } if (((i_shdrp[shindex].sh_flags & SHF_INFO_LINK) || i_shdrp[shindex].sh_type == SHT_RELA || i_shdrp[shindex].sh_type == SHT_REL) - && ! valid_section_index_p (i_shdrp[shindex].sh_info, num_sec)) + && i_shdrp[shindex].sh_info >= num_sec) goto got_wrong_format_error; /* If the section is loaded, but not page aligned, clear @@ -801,7 +799,7 @@ elf_object_p (bfd *abfd) /* A further sanity check. */ if (i_ehdrp->e_shnum != 0) { - if (! valid_section_index_p (i_ehdrp->e_shstrndx, elf_numsections (abfd))) + if (i_ehdrp->e_shstrndx >= elf_numsections (abfd)) { /* PR 2257: We used to just goto got_wrong_format_error here @@ -825,7 +823,7 @@ elf_object_p (bfd *abfd) unsigned int i; amt = i_ehdrp->e_phnum * sizeof (Elf_Internal_Phdr); - elf_tdata (abfd)->phdr = bfd_alloc (abfd, amt); + elf_tdata (abfd)->phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt); if (elf_tdata (abfd)->phdr == NULL) goto got_no_match; if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, SEEK_SET) != 0) @@ -850,12 +848,8 @@ elf_object_p (bfd *abfd) a dummy placeholder entry, so we ignore it. */ num_sec = elf_numsections (abfd); for (shindex = 1; shindex < num_sec; shindex++) - { - if (! bfd_section_from_shdr (abfd, shindex)) - goto got_no_match; - if (shindex == SHN_LORESERVE - 1) - shindex += SHN_HIRESERVE + 1 - SHN_LORESERVE; - } + if (!bfd_section_from_shdr (abfd, shindex)) + goto got_no_match; /* Set up ELF sections for SHF_GROUP and SHF_LINK_ORDER. */ if (! _bfd_elf_setup_sections (abfd)) @@ -920,7 +914,7 @@ elf_object_p (bfd *abfd) void elf_write_relocs (bfd *abfd, asection *sec, void *data) { - bfd_boolean *failedp = data; + bfd_boolean *failedp = (bfd_boolean *) data; Elf_Internal_Shdr *rela_hdr; bfd_vma addr_offset; void (*swap_out) (bfd *, const Elf_Internal_Rela *, bfd_byte *); @@ -953,7 +947,7 @@ elf_write_relocs (bfd *abfd, asection *sec, void *data) rela_hdr = &elf_section_data (sec)->rel_hdr; rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count; - rela_hdr->contents = bfd_alloc (abfd, rela_hdr->sh_size); + rela_hdr->contents = (unsigned char *) bfd_alloc (abfd, rela_hdr->sh_size); if (rela_hdr->contents == NULL) { *failedp = TRUE; @@ -1075,15 +1069,15 @@ elf_write_shdrs_and_ehdr (bfd *abfd) /* Some fields in the first section header handle overflow of ehdr fields. */ - if (i_ehdrp->e_shnum >= SHN_LORESERVE) + if (i_ehdrp->e_shnum >= (SHN_LORESERVE & 0xffff)) i_shdrp[0]->sh_size = i_ehdrp->e_shnum; - if (i_ehdrp->e_shstrndx >= SHN_LORESERVE) + if (i_ehdrp->e_shstrndx >= (SHN_LORESERVE & 0xffff)) i_shdrp[0]->sh_link = i_ehdrp->e_shstrndx; /* at this point we've concocted all the ELF sections... */ amt = i_ehdrp->e_shnum; amt *= sizeof (*x_shdrp); - x_shdrp = bfd_alloc (abfd, amt); + x_shdrp = (Elf_External_Shdr *) bfd_alloc (abfd, amt); if (!x_shdrp) return FALSE; @@ -1093,9 +1087,6 @@ elf_write_shdrs_and_ehdr (bfd *abfd) elf_debug_section (count, *i_shdrp); #endif elf_swap_shdr_out (abfd, *i_shdrp, x_shdrp + count); - - if (count == SHN_LORESERVE - 1) - i_shdrp += SHN_HIRESERVE + 1 - SHN_LORESERVE; } if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, SEEK_SET) != 0 || bfd_bwrite (x_shdrp, amt, abfd) != amt) @@ -1214,7 +1205,7 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) amt = symcount; amt *= sizeof (elf_symbol_type); - symbase = bfd_zalloc (abfd, amt); + symbase = (elf_symbol_type *) bfd_zalloc (abfd, amt); if (symbase == (elf_symbol_type *) NULL) goto error_return; @@ -1238,7 +1229,7 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) if (bfd_seek (abfd, verhdr->sh_offset, SEEK_SET) != 0) goto error_return; - xverbuf = bfd_malloc (verhdr->sh_size); + xverbuf = (Elf_External_Versym *) bfd_malloc (verhdr->sh_size); if (xverbuf == NULL && verhdr->sh_size != 0) goto error_return; @@ -1264,19 +1255,6 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) { sym->symbol.section = bfd_und_section_ptr; } - else if (isym->st_shndx < SHN_LORESERVE - || isym->st_shndx > SHN_HIRESERVE) - { - sym->symbol.section = bfd_section_from_elf_index (abfd, - isym->st_shndx); - if (sym->symbol.section == NULL) - { - /* This symbol is in a section for which we did not - create a BFD section. Just use bfd_abs_section, - although it is wrong. FIXME. */ - sym->symbol.section = bfd_abs_section_ptr; - } - } else if (isym->st_shndx == SHN_ABS) { sym->symbol.section = bfd_abs_section_ptr; @@ -1291,7 +1269,17 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) sym->symbol.value = isym->st_size; } else - sym->symbol.section = bfd_abs_section_ptr; + { + sym->symbol.section + = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (sym->symbol.section == NULL) + { + /* This symbol is in a section for which we did not + create a BFD section. Just use bfd_abs_section, + although it is wrong. FIXME. */ + sym->symbol.section = bfd_abs_section_ptr; + } + } /* If this is a relocatable file, then the symbol value is already section relative. */ @@ -1310,6 +1298,9 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) case STB_WEAK: sym->symbol.flags |= BSF_WEAK; break; + case STB_GNU_UNIQUE: + sym->symbol.flags |= BSF_GNU_UNIQUE; + break; } switch (ELF_ST_TYPE (isym->st_info)) @@ -1323,6 +1314,10 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) case STT_FUNC: sym->symbol.flags |= BSF_FUNCTION; break; + case STT_COMMON: + /* FIXME: Do we have to put the size field into the value field + as we do with symbols in SHN_COMMON sections (see above) ? */ + /* Fall through. */ case STT_OBJECT: sym->symbol.flags |= BSF_OBJECT; break; @@ -1335,6 +1330,9 @@ elf_slurp_symbol_table (bfd *abfd, asymbol **symptrs, bfd_boolean dynamic) case STT_SRELC: sym->symbol.flags |= BSF_SRELC; break; + case STT_GNU_IFUNC: + sym->symbol.flags |= BSF_GNU_INDIRECT_FUNCTION; + break; } if (dynamic) @@ -1420,7 +1418,7 @@ elf_slurp_reloc_table_from_section (bfd *abfd, != rel_hdr->sh_size)) goto error_return; - native_relocs = allocated; + native_relocs = (bfd_byte *) allocated; entsize = rel_hdr->sh_entsize; BFD_ASSERT (entsize == sizeof (Elf_External_Rel) @@ -1541,7 +1539,7 @@ elf_slurp_reloc_table (bfd *abfd, } amt = (reloc_count + reloc_count2) * sizeof (arelent); - relents = bfd_alloc (abfd, amt); + relents = (arelent *) bfd_alloc (abfd, amt); if (relents == NULL) return FALSE; @@ -1635,6 +1633,7 @@ NAME(_bfd_elf,bfd_from_remote_memory) int err; unsigned int i; bfd_vma loadbase; + bfd_boolean loadbase_set; /* Read in the ELF header in external format. */ err = target_read_memory (ehdr_vma, (bfd_byte *) &x_ehdr, sizeof x_ehdr); @@ -1691,7 +1690,8 @@ NAME(_bfd_elf,bfd_from_remote_memory) return NULL; } - x_phdrs = bfd_malloc (i_ehdr.e_phnum * (sizeof *x_phdrs + sizeof *i_phdrs)); + x_phdrs = (Elf_External_Phdr *) + bfd_malloc (i_ehdr.e_phnum * (sizeof *x_phdrs + sizeof *i_phdrs)); if (x_phdrs == NULL) { bfd_set_error (bfd_error_no_memory); @@ -1711,13 +1711,11 @@ NAME(_bfd_elf,bfd_from_remote_memory) contents_size = 0; last_phdr = NULL; loadbase = ehdr_vma; + loadbase_set = FALSE; for (i = 0; i < i_ehdr.e_phnum; ++i) { elf_swap_phdr_in (templ, &x_phdrs[i], &i_phdrs[i]); - /* IA-64 vDSO may have two mappings for one segment, where one mapping - is executable only, and one is read only. We must not use the - executable one. */ - if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R)) + if (i_phdrs[i].p_type == PT_LOAD) { bfd_vma segment_end; segment_end = (i_phdrs[i].p_offset + i_phdrs[i].p_filesz @@ -1725,8 +1723,14 @@ NAME(_bfd_elf,bfd_from_remote_memory) if (segment_end > (bfd_vma) contents_size) contents_size = segment_end; - if ((i_phdrs[i].p_offset & -i_phdrs[i].p_align) == 0) - loadbase = ehdr_vma - (i_phdrs[i].p_vaddr & -i_phdrs[i].p_align); + /* LOADADDR is the `Base address' from the gELF specification: + `lowest p_vaddr value for a PT_LOAD segment' is P_VADDR from the + first PT_LOAD as PT_LOADs are ordered by P_VADDR. */ + if (!loadbase_set && (i_phdrs[i].p_offset & -i_phdrs[i].p_align) == 0) + { + loadbase = ehdr_vma - (i_phdrs[i].p_vaddr & -i_phdrs[i].p_align); + loadbase_set = TRUE; + } last_phdr = &i_phdrs[i]; } @@ -1755,7 +1759,7 @@ NAME(_bfd_elf,bfd_from_remote_memory) contents_size = last_phdr->p_offset + last_phdr->p_filesz; /* Now we know the size of the whole image we want read in. */ - contents = bfd_zmalloc (contents_size); + contents = (bfd_byte *) bfd_zmalloc (contents_size); if (contents == NULL) { free (x_phdrs); @@ -1764,10 +1768,7 @@ NAME(_bfd_elf,bfd_from_remote_memory) } for (i = 0; i < i_ehdr.e_phnum; ++i) - /* IA-64 vDSO may have two mappings for one segment, where one mapping - is executable only, and one is read only. We must not use the - executable one. */ - if (i_phdrs[i].p_type == PT_LOAD && (i_phdrs[i].p_flags & PF_R)) + if (i_phdrs[i].p_type == PT_LOAD) { bfd_vma start = i_phdrs[i].p_offset & -i_phdrs[i].p_align; bfd_vma end = (i_phdrs[i].p_offset + i_phdrs[i].p_filesz @@ -1803,7 +1804,7 @@ NAME(_bfd_elf,bfd_from_remote_memory) memcpy (contents, &x_ehdr, sizeof x_ehdr); /* Now we have a memory image of the ELF file contents. Make a BFD. */ - bim = bfd_malloc (sizeof (struct bfd_in_memory)); + bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory)); if (bim == NULL) { free (contents); diff --git a/bfd/elfcore.h b/bfd/elfcore.h index dbf9397..c51c575 100644 --- a/bfd/elfcore.h +++ b/bfd/elfcore.h @@ -1,6 +1,6 @@ /* ELF core file support for BFD. - Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007 - Free Software Foundation, Inc. + Copyright 1995, 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, + 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -159,6 +159,8 @@ elf_core_file_p (bfd *abfd) if ((*target_ptr)->flavour != bfd_target_elf_flavour) continue; back = xvec_get_elf_backend_data (*target_ptr); + if (back->s->arch_size != ARCH_SIZE) + continue; if (back->elf_machine_code == i_ehdrp->e_machine || (back->elf_machine_alt1 != 0 && i_ehdrp->e_machine == back->elf_machine_alt1) @@ -188,7 +190,7 @@ elf_core_file_p (bfd *abfd) /* Allocate space for the program headers. */ amt = sizeof (*i_phdrp) * i_ehdrp->e_phnum; - i_phdrp = bfd_alloc (abfd, amt); + i_phdrp = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt); if (!i_phdrp) goto fail; @@ -227,6 +229,32 @@ elf_core_file_p (bfd *abfd) if (! bfd_section_from_phdr (abfd, i_phdrp + phindex, (int) phindex)) goto fail; + /* Check for core truncation. */ + { + bfd_size_type high = 0; + struct stat statbuf; + for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex) + { + Elf_Internal_Phdr *p = i_phdrp + phindex; + if (p->p_filesz) + { + bfd_size_type current = p->p_offset + p->p_filesz; + if (high < current) + high = current; + } + } + if (bfd_stat (abfd, &statbuf) == 0) + { + if ((bfd_size_type) statbuf.st_size < high) + { + (*_bfd_error_handler) + (_("Warning: %B is truncated: expected core file " + "size >= %lu, found: %lu."), + abfd, (unsigned long) high, (unsigned long) statbuf.st_size); + } + } + } + /* Save the entry point from the ELF header. */ bfd_get_start_address (abfd) = i_ehdrp->e_entry; diff --git a/bfd/elflink.c b/bfd/elflink.c index 6059ab1..c42c6e1 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -1,6 +1,7 @@ /* ELF linking support for BFD. Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -29,6 +30,32 @@ #include "libiberty.h" #include "objalloc.h" +/* This struct is used to pass information to routines called via + elf_link_hash_traverse which must return failure. */ + +struct elf_info_failed +{ + struct bfd_link_info *info; + struct bfd_elf_version_tree *verdefs; + bfd_boolean failed; +}; + +/* This structure is used to pass information to + _bfd_elf_link_find_version_dependencies. */ + +struct elf_find_verdep_info +{ + /* General link information. */ + struct bfd_link_info *info; + /* The number of dependencies. */ + unsigned int vers; + /* Whether we had a failure. */ + bfd_boolean failed; +}; + +static bfd_boolean _bfd_elf_fix_symbol_flags + (struct elf_link_hash_entry *, struct elf_info_failed *); + /* Define a symbol in a dynamic linkage section. */ struct elf_link_hash_entry * @@ -74,58 +101,57 @@ _bfd_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) asection *s; struct elf_link_hash_entry *h; const struct elf_backend_data *bed = get_elf_backend_data (abfd); - int ptralign; + struct elf_link_hash_table *htab = elf_hash_table (info); /* This function may be called more than once. */ s = bfd_get_section_by_name (abfd, ".got"); if (s != NULL && (s->flags & SEC_LINKER_CREATED) != 0) return TRUE; - switch (bed->s->arch_size) - { - case 32: - ptralign = 2; - break; - - case 64: - ptralign = 3; - break; - - default: - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - flags = bed->dynamic_sec_flags; + s = bfd_make_section_with_flags (abfd, + (bed->rela_plts_and_copies_p + ? ".rela.got" : ".rel.got"), + (bed->dynamic_sec_flags + | SEC_READONLY)); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) + return FALSE; + htab->srelgot = s; + s = bfd_make_section_with_flags (abfd, ".got", flags); if (s == NULL - || !bfd_set_section_alignment (abfd, s, ptralign)) + || !bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) return FALSE; + htab->sgot = s; if (bed->want_got_plt) { s = bfd_make_section_with_flags (abfd, ".got.plt", flags); if (s == NULL - || !bfd_set_section_alignment (abfd, s, ptralign)) + || !bfd_set_section_alignment (abfd, s, + bed->s->log_file_align)) return FALSE; + htab->sgotplt = s; } + /* The first bit of the global offset table is the header. */ + s->size += bed->got_header_size; + if (bed->want_got_sym) { /* Define the symbol _GLOBAL_OFFSET_TABLE_ at the start of the .got (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; } - /* The first bit of the global offset table is the header. */ - s->size += bed->got_header_size; - return TRUE; } @@ -276,6 +302,7 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) struct elf_link_hash_entry *h; asection *s; const struct elf_backend_data *bed = get_elf_backend_data (abfd); + struct elf_link_hash_table *htab = elf_hash_table (info); /* We need to create .plt, .rel[a].plt, .got, .got.plt, .dynbss, and .rel[a].bss sections. */ @@ -296,6 +323,7 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (s == NULL || ! bfd_set_section_alignment (abfd, s, bed->plt_alignment)) return FALSE; + htab->splt = s; /* Define the symbol _PROCEDURE_LINKAGE_TABLE_ at the start of the .plt section. */ @@ -309,12 +337,13 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) } s = bfd_make_section_with_flags (abfd, - (bed->default_use_rela_p + (bed->rela_plts_and_copies_p ? ".rela.plt" : ".rel.plt"), flags | SEC_READONLY); if (s == NULL || ! bfd_set_section_alignment (abfd, s, bed->s->log_file_align)) return FALSE; + htab->srelplt = s; if (! _bfd_elf_create_got_section (abfd, info)) return FALSE; @@ -347,7 +376,7 @@ _bfd_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) if (! info->shared) { s = bfd_make_section_with_flags (abfd, - (bed->default_use_rela_p + (bed->rela_plts_and_copies_p ? ".rela.bss" : ".rel.bss"), flags | SEC_READONLY); if (s == NULL @@ -437,7 +466,7 @@ bfd_elf_link_record_dynamic_symbol (struct bfd_link_info *info, /* Mark a symbol dynamic. */ -void +static void bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h, Elf_Internal_Sym *sym) @@ -452,7 +481,7 @@ bfd_elf_link_mark_dynamic_symbol (struct bfd_link_info *info, && (h->type == STT_OBJECT || (sym != NULL && ELF_ST_TYPE (sym->st_info) == STT_OBJECT))) - || (d != NULL + || (d != NULL && h->root.type == bfd_link_hash_new && (*d->match) (&d->head, NULL, h->root.root.string))) h->dynamic = 1; @@ -501,7 +530,7 @@ bfd_elf_record_link_assignment (bfd *output_bfd, break; case bfd_link_hash_indirect: /* We had a versioned symbol in a dynamic library. We make the - the versioned symbol point to this one. */ + the versioned symbol point to this one. */ bed = get_elf_backend_data (output_bfd); hv = h; while (hv->root.type == bfd_link_hash_indirect @@ -605,7 +634,7 @@ bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info, return 1; amt = sizeof (*entry); - entry = bfd_alloc (input_bfd, amt); + entry = (struct elf_link_local_dynamic_entry *) bfd_alloc (input_bfd, amt); if (entry == NULL) return 0; @@ -618,8 +647,7 @@ bfd_elf_link_record_local_dynamic_symbol (struct bfd_link_info *info, } if (entry->isym.st_shndx != SHN_UNDEF - && (entry->isym.st_shndx < SHN_LORESERVE - || entry->isym.st_shndx > SHN_HIRESERVE)) + && entry->isym.st_shndx < SHN_LORESERVE) { asection *s; @@ -691,7 +719,7 @@ static bfd_boolean elf_link_renumber_hash_table_dynsyms (struct elf_link_hash_entry *h, void *data) { - size_t *count = data; + size_t *count = (size_t *) data; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -713,7 +741,7 @@ static bfd_boolean elf_link_renumber_local_hash_table_dynsyms (struct elf_link_hash_entry *h, void *data) { - size_t *count = data; + size_t *count = (size_t *) data; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -823,6 +851,54 @@ _bfd_elf_link_renumber_dynsyms (bfd *output_bfd, return dynsymcount; } +/* Merge st_other field. */ + +static void +elf_merge_st_other (bfd *abfd, struct elf_link_hash_entry *h, + Elf_Internal_Sym *isym, bfd_boolean definition, + bfd_boolean dynamic) +{ + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + + /* If st_other has a processor-specific meaning, specific + code might be needed here. We never merge the visibility + attribute with the one from a dynamic object. */ + if (bed->elf_backend_merge_symbol_attribute) + (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition, + dynamic); + + /* If this symbol has default visibility and the user has requested + we not re-export it, then mark it as hidden. */ + if (definition + && !dynamic + && (abfd->no_export + || (abfd->my_archive && abfd->my_archive->no_export)) + && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL) + isym->st_other = (STV_HIDDEN + | (isym->st_other & ~ELF_ST_VISIBILITY (-1))); + + if (!dynamic && ELF_ST_VISIBILITY (isym->st_other) != 0) + { + unsigned char hvis, symvis, other, nvis; + + /* 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); + symvis = ELF_ST_VISIBILITY (isym->st_other); + if (! hvis) + nvis = symvis; + else if (! symvis) + nvis = hvis; + else + nvis = hvis < symvis ? hvis : symvis; + + h->other = other | nvis; + } +} + /* This function is called when we want to define a new symbol. It handles the various cases which arise when we find a definition in a dynamic object, or when there is already a definition in a @@ -855,7 +931,7 @@ _bfd_elf_merge_symbol (bfd *abfd, int bind; bfd *oldbfd; bfd_boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon; - bfd_boolean newweak, oldweak; + bfd_boolean newweak, oldweak, newfunc, oldfunc; const struct elf_backend_data *bed; *skip = FALSE; @@ -882,9 +958,11 @@ _bfd_elf_merge_symbol (bfd *abfd, return FALSE; *sym_hash = h; + bed = get_elf_backend_data (abfd); + /* This code is for coping with dynamic objects, and is only useful if we are doing an ELF link. */ - if (info->hash->creator != abfd->xvec) + if (!(*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec)) return TRUE; /* For merging, we only care about real symbols. */ @@ -971,7 +1049,15 @@ _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); + /* NEWFUNC and OLDFUNC indicate whether the new or old symbol, + respectively, appear to be a function. */ + + newfunc = (ELF_ST_TYPE (sym->st_info) != STT_NOTYPE + && bed->is_function_type (ELF_ST_TYPE (sym->st_info))); + + oldfunc = (h->type != STT_NOTYPE + && bed->is_function_type (h->type)); + /* 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 @@ -987,8 +1073,7 @@ _bfd_elf_merge_symbol (bfd *abfd, && ELF_ST_TYPE (sym->st_info) != h->type && ELF_ST_TYPE (sym->st_info) != STT_NOTYPE && h->type != STT_NOTYPE - && !(bed->is_function_type (ELF_ST_TYPE (sym->st_info)) - && bed->is_function_type (h->type))) + && !(newfunc && oldfunc)) { *skip = TRUE; return TRUE; @@ -1163,6 +1248,9 @@ _bfd_elf_merge_symbol (bfd *abfd, oldweak = (h->root.type == bfd_link_hash_defweak || h->root.type == bfd_link_hash_undefweak); + if (bind == STB_GNU_UNIQUE) + h->unique_global = 1; + /* If a new weak symbol definition comes from a regular file and the old symbol comes from a dynamic library, we treat the new one as strong. Similarly, an old weak symbol definition from a regular @@ -1179,9 +1267,8 @@ _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)) + /* Allow changes between different types of function symbol. */ + if (newfunc && oldfunc) *type_change_ok = TRUE; /* It's OK to change the type if either the existing symbol or the @@ -1230,7 +1317,7 @@ _bfd_elf_merge_symbol (bfd *abfd, && (sec->flags & SEC_ALLOC) != 0 && (sec->flags & SEC_LOAD) == 0 && sym->st_size > 0 - && !bed->is_function_type (ELF_ST_TYPE (sym->st_info))) + && !newfunc) newdyncommon = TRUE; else newdyncommon = FALSE; @@ -1242,7 +1329,7 @@ _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 - && !bed->is_function_type (h->type)) + && !oldfunc) olddyncommon = TRUE; else olddyncommon = FALSE; @@ -1302,8 +1389,7 @@ _bfd_elf_merge_symbol (bfd *abfd, && newdef && (olddef || (h->root.type == bfd_link_hash_common - && (newweak - || bed->is_function_type (ELF_ST_TYPE (sym->st_info)))))) + && (newweak || newfunc)))) { *override = TRUE; newdef = FALSE; @@ -1341,7 +1427,22 @@ _bfd_elf_merge_symbol (bfd *abfd, /* Skip weak definitions of symbols that are already defined. */ if (newdef && olddef && newweak) - *skip = TRUE; + { + *skip = TRUE; + + /* Merge st_other. If the symbol already has a dynamic index, + but visibility says it should not be visible, turn it into a + local symbol. */ + elf_merge_st_other (abfd, h, sym, newdef, newdyn); + if (h->dynindx != -1) + switch (ELF_ST_VISIBILITY (h->other)) + { + case STV_INTERNAL: + case STV_HIDDEN: + (*bed->elf_backend_hide_symbol) (info, h, TRUE); + break; + } + } /* If the old symbol is from a dynamic object, and the new symbol is a definition which is not from a dynamic object, then the new @@ -1357,8 +1458,7 @@ _bfd_elf_merge_symbol (bfd *abfd, if (!newdyn && (newdef || (bfd_is_com_section (sec) - && (oldweak - || bed->is_function_type (h->type)))) + && (oldweak || oldfunc))) && olddyn && olddef && h->def_dynamic) @@ -1378,7 +1478,17 @@ _bfd_elf_merge_symbol (bfd *abfd, overriding a function. */ if (bfd_is_com_section (sec)) - *type_change_ok = TRUE; + { + if (oldfunc) + { + /* If a common symbol overrides a function, make sure + that it isn't defined dynamically nor has type + function. */ + h->def_dynamic = 0; + h->type = STT_NOTYPE; + } + *type_change_ok = TRUE; + } if ((*sym_hash)->root.type == bfd_link_hash_indirect) flip = *sym_hash; @@ -1459,7 +1569,7 @@ _bfd_elf_merge_symbol (bfd *abfd, symbol is described by H, NAME, SYM, PSEC, VALUE, and OVERRIDE. We set DYNSYM if the new indirect symbol is dynamic. */ -bfd_boolean +static bfd_boolean _bfd_elf_add_default_symbol (bfd *abfd, struct bfd_link_info *info, struct elf_link_hash_entry *h, @@ -1514,7 +1624,7 @@ _bfd_elf_add_default_symbol (bfd *abfd, dynamic = (abfd->flags & DYNAMIC) != 0; shortlen = p - name; - shortname = bfd_hash_allocate (&info->hash->table, shortlen + 1); + shortname = (char *) bfd_hash_allocate (&info->hash->table, shortlen + 1); if (shortname == NULL) return FALSE; memcpy (shortname, name, shortlen); @@ -1625,7 +1735,7 @@ _bfd_elf_add_default_symbol (bfd *abfd, nondefault: len = strlen (name); - shortname = bfd_hash_allocate (&info->hash->table, len); + shortname = (char *) bfd_hash_allocate (&info->hash->table, len); if (shortname == NULL) return FALSE; memcpy (shortname, name, shortlen); @@ -1696,10 +1806,10 @@ nondefault: /* This routine is used to export all defined symbols into the dynamic symbol table. It is called via elf_link_hash_traverse. */ -bfd_boolean +static bfd_boolean _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data) { - struct elf_info_failed *eif = data; + struct elf_info_failed *eif = (struct elf_info_failed *) data; /* Ignore this if we won't export it. */ if (!eif->info->export_dynamic && !h->dynamic) @@ -1716,29 +1826,12 @@ _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data) && (h->def_regular || h->ref_regular)) { - struct bfd_elf_version_tree *t; - struct bfd_elf_version_expr *d; - - for (t = eif->verdefs; t != NULL; t = t->next) - { - if (t->globals.list != NULL) - { - d = (*t->match) (&t->globals, NULL, h->root.root.string); - if (d != NULL) - goto doit; - } - - if (t->locals.list != NULL) - { - d = (*t->match) (&t->locals, NULL, h->root.root.string); - if (d != NULL) - return TRUE; - } - } + bfd_boolean hide; - if (!eif->verdefs) + if (eif->verdefs == NULL + || (bfd_find_version_for_sym (eif->verdefs, h->root.root.string, &hide) + && !hide)) { - doit: if (! bfd_elf_link_record_dynamic_symbol (eif->info, h)) { eif->failed = TRUE; @@ -1755,11 +1848,11 @@ _bfd_elf_export_symbol (struct elf_link_hash_entry *h, void *data) dependencies. This will be put into the .gnu.version_r section. This function is called via elf_link_hash_traverse. */ -bfd_boolean +static bfd_boolean _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, void *data) { - struct elf_find_verdep_info *rinfo = data; + struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data; Elf_Internal_Verneed *t; Elf_Internal_Vernaux *a; bfd_size_type amt; @@ -1776,7 +1869,9 @@ _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, return TRUE; /* See if we already know about this version. */ - for (t = elf_tdata (rinfo->output_bfd)->verref; t != NULL; t = t->vn_nextref) + for (t = elf_tdata (rinfo->info->output_bfd)->verref; + t != NULL; + t = t->vn_nextref) { if (t->vn_bfd != h->verinfo.verdef->vd_bfd) continue; @@ -1793,7 +1888,7 @@ _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, if (t == NULL) { amt = sizeof *t; - t = bfd_zalloc (rinfo->output_bfd, amt); + t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->info->output_bfd, amt); if (t == NULL) { rinfo->failed = TRUE; @@ -1801,12 +1896,17 @@ _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, } t->vn_bfd = h->verinfo.verdef->vd_bfd; - t->vn_nextref = elf_tdata (rinfo->output_bfd)->verref; - elf_tdata (rinfo->output_bfd)->verref = t; + t->vn_nextref = elf_tdata (rinfo->info->output_bfd)->verref; + elf_tdata (rinfo->info->output_bfd)->verref = t; } amt = sizeof *a; - a = bfd_zalloc (rinfo->output_bfd, amt); + a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->info->output_bfd, amt); + if (a == NULL) + { + rinfo->failed = TRUE; + return FALSE; + } /* Note that we are copying a string pointer here, and testing it above. If bfd_elf_string_from_elf_section is ever changed to @@ -1832,17 +1932,17 @@ _bfd_elf_link_find_version_dependencies (struct elf_link_hash_entry *h, files, so until that point we don't know which symbols should be local. This function is called via elf_link_hash_traverse. */ -bfd_boolean +static bfd_boolean _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) { - struct elf_assign_sym_version_info *sinfo; + struct elf_info_failed *sinfo; struct bfd_link_info *info; const struct elf_backend_data *bed; struct elf_info_failed eif; char *p; bfd_size_type amt; - sinfo = data; + sinfo = (struct elf_info_failed *) data; info = sinfo->info; if (h->root.type == bfd_link_hash_warning) @@ -1863,7 +1963,7 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) if (!h->def_regular) return TRUE; - bed = get_elf_backend_data (sinfo->output_bfd); + bed = get_elf_backend_data (info->output_bfd); p = strchr (h->root.root.string, ELF_VER_CHR); if (p != NULL && h->verinfo.vertree == NULL) { @@ -1899,9 +1999,12 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) struct bfd_elf_version_expr *d; len = p - h->root.root.string; - alc = bfd_malloc (len); + alc = (char *) bfd_malloc (len); if (alc == NULL) - return FALSE; + { + sinfo->failed = TRUE; + return FALSE; + } memcpy (alc, h->root.root.string, len - 1); alc[len - 1] = '\0'; if (alc[len - 2] == ELF_VER_CHR) @@ -1943,7 +2046,7 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) return TRUE; amt = sizeof *t; - t = bfd_zalloc (sinfo->output_bfd, amt); + t = (struct bfd_elf_version_tree *) bfd_zalloc (info->output_bfd, amt); if (t == NULL) { sinfo->failed = TRUE; @@ -1972,7 +2075,7 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) generating a shared archive. Return an error. */ (*_bfd_error_handler) (_("%B: version node not found for symbol %s"), - sinfo->output_bfd, h->root.root.string); + info->output_bfd, h->root.root.string); bfd_set_error (bfd_error_bad_value); sinfo->failed = TRUE; return FALSE; @@ -1986,72 +2089,12 @@ _bfd_elf_link_assign_sym_version (struct elf_link_hash_entry *h, void *data) something. */ if (h->verinfo.vertree == NULL && sinfo->verdefs != NULL) { - struct bfd_elf_version_tree *t; - struct bfd_elf_version_tree *local_ver; - struct bfd_elf_version_expr *d; + bfd_boolean hide; - /* See if can find what version this symbol is in. If the - symbol is supposed to be local, then don't actually register - it. */ - local_ver = NULL; - for (t = sinfo->verdefs; t != NULL; t = t->next) - { - if (t->globals.list != NULL) - { - bfd_boolean matched; - - matched = FALSE; - d = NULL; - while ((d = (*t->match) (&t->globals, d, - h->root.root.string)) != NULL) - if (d->symver) - matched = TRUE; - else - { - /* There is a version without definition. Make - the symbol the default definition for this - version. */ - h->verinfo.vertree = t; - local_ver = NULL; - d->script = 1; - break; - } - if (d != NULL) - break; - else if (matched) - /* There is no undefined version for this symbol. Hide the - default one. */ - (*bed->elf_backend_hide_symbol) (info, h, TRUE); - } - - if (t->locals.list != NULL) - { - d = NULL; - while ((d = (*t->match) (&t->locals, d, - h->root.root.string)) != NULL) - { - local_ver = t; - /* If the match is "*", keep looking for a more - explicit, perhaps even global, match. - XXX: Shouldn't this be !d->wildcard instead? */ - if (d->pattern[0] != '*' || d->pattern[1] != '\0') - break; - } - - if (d != NULL) - break; - } - } - - if (local_ver != NULL) - { - h->verinfo.vertree = local_ver; - if (h->dynindx != -1 - && ! info->export_dynamic) - { - (*bed->elf_backend_hide_symbol) (info, h, TRUE); - } - } + h->verinfo.vertree = bfd_find_version_for_sym (sinfo->verdefs, + h->root.root.string, &hide); + if (h->verinfo.vertree != NULL && hide) + (*bed->elf_backend_hide_symbol) (info, h, TRUE); } return TRUE; @@ -2090,7 +2133,7 @@ elf_link_read_relocs_from_section (bfd *abfd, return FALSE; symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - nsyms = symtab_hdr->sh_size / symtab_hdr->sh_entsize; + nsyms = NUM_SHDR_ENTRIES (symtab_hdr); bed = get_elf_backend_data (abfd); @@ -2105,7 +2148,7 @@ elf_link_read_relocs_from_section (bfd *abfd, return FALSE; } - erela = external_relocs; + erela = (const bfd_byte *) external_relocs; erelaend = erela + shdr->sh_size; irela = internal_relocs; while (erela < erelaend) @@ -2116,11 +2159,24 @@ elf_link_read_relocs_from_section (bfd *abfd, r_symndx = ELF32_R_SYM (irela->r_info); if (bed->s->arch_size == 64) r_symndx >>= 24; - if ((size_t) r_symndx >= nsyms) + if (nsyms > 0) + { + if ((size_t) r_symndx >= nsyms) + { + (*_bfd_error_handler) + (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)" + " for offset 0x%lx in section `%A'"), + abfd, sec, + (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + } + else if (r_symndx != 0) { (*_bfd_error_handler) - (_("%B: bad reloc symbol index (0x%lx >= 0x%lx)" - " for offset 0x%lx in section `%A'"), + (_("%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A'" + " when the object file has no symbol table"), abfd, sec, (unsigned long) r_symndx, (unsigned long) nsyms, irela->r_offset); bfd_set_error (bfd_error_bad_value); @@ -2170,9 +2226,9 @@ _bfd_elf_link_read_relocs (bfd *abfd, size = o->reloc_count; size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela); if (keep_memory) - internal_relocs = bfd_alloc (abfd, size); + internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_alloc (abfd, size); else - internal_relocs = alloc2 = bfd_malloc (size); + internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size); if (internal_relocs == NULL) goto error_return; } @@ -2218,14 +2274,19 @@ _bfd_elf_link_read_relocs (bfd *abfd, if (alloc1 != NULL) free (alloc1); if (alloc2 != NULL) - free (alloc2); + { + if (keep_memory) + bfd_release (abfd, alloc2); + else + free (alloc2); + } return NULL; } /* Compute the size of, and allocate space for, REL_HDR which is the section header for a section containing relocations for O. */ -bfd_boolean +static bfd_boolean _bfd_elf_link_size_reloc_section (bfd *abfd, Elf_Internal_Shdr *rel_hdr, asection *o) @@ -2250,7 +2311,7 @@ _bfd_elf_link_size_reloc_section (bfd *abfd, allocate it with bfd_alloc rather than malloc. Also since we cannot be sure that the contents will actually be filled in, we zero the allocated space. */ - rel_hdr->contents = bfd_zalloc (abfd, rel_hdr->sh_size); + rel_hdr->contents = (unsigned char *) bfd_zalloc (abfd, rel_hdr->sh_size); if (rel_hdr->contents == NULL && rel_hdr->sh_size != 0) return FALSE; @@ -2261,7 +2322,8 @@ _bfd_elf_link_size_reloc_section (bfd *abfd, { struct elf_link_hash_entry **p; - p = bfd_zmalloc (num_rel_hashes * sizeof (struct elf_link_hash_entry *)); + p = (struct elf_link_hash_entry **) + bfd_zmalloc (num_rel_hashes * sizeof (struct elf_link_hash_entry *)); if (p == NULL) return FALSE; @@ -2313,7 +2375,7 @@ _bfd_elf_link_output_relocs (bfd *output_bfd, (*_bfd_error_handler) (_("%B: relocation size mismatch in %B section %A"), output_bfd, input_section->owner, input_section); - bfd_set_error (bfd_error_wrong_object_format); + bfd_set_error (bfd_error_wrong_format); return FALSE; } @@ -2364,7 +2426,7 @@ _bfd_elf_link_hash_fixup_symbol (struct bfd_link_info *info, assign_sym_version, which is unnecessary but perhaps more robust in the face of future changes. */ -bfd_boolean +static bfd_boolean _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h, struct elf_info_failed *eif) { @@ -2507,10 +2569,10 @@ _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h, called via elf_link_hash_traverse, and also calls itself recursively. */ -bfd_boolean +static bfd_boolean _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data) { - struct elf_info_failed *eif = data; + struct elf_info_failed *eif = (struct elf_info_failed *) data; bfd *dynobj; const struct elf_backend_data *bed; @@ -2544,6 +2606,7 @@ _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data) about symbols which are defined by one dynamic object and referenced by another one? */ if (!h->needs_plt + && h->type != STT_GNU_IFUNC && (h->def_regular || !h->def_dynamic || (!h->ref_regular @@ -2618,6 +2681,7 @@ _bfd_elf_adjust_dynamic_symbol (struct elf_link_hash_entry *h, void *data) dynobj = elf_hash_table (eif->info)->dynobj; bed = get_elf_backend_data (dynobj); + if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h)) { eif->failed = TRUE; @@ -2676,7 +2740,7 @@ _bfd_elf_adjust_dynamic_copy (struct elf_link_hash_entry *h, /* Adjust all external symbols pointing into SEC_MERGE sections to reflect the object merging within the sections. */ -bfd_boolean +static bfd_boolean _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data) { asection *sec; @@ -2689,7 +2753,7 @@ _bfd_elf_link_sec_merge_syms (struct elf_link_hash_entry *h, void *data) && ((sec = h->root.u.def.section)->flags & SEC_MERGE) && sec->sec_info_type == ELF_INFO_TYPE_MERGE) { - bfd *output_bfd = data; + bfd *output_bfd = (bfd *) data; h->root.u.def.value = _bfd_merged_section_offset (output_bfd, @@ -2781,6 +2845,11 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, if (h == NULL) return TRUE; + /* STV_HIDDEN or STV_INTERNAL ones must be local. */ + if (ELF_ST_VISIBILITY (h->other) == STV_HIDDEN + || ELF_ST_VISIBILITY (h->other) == STV_INTERNAL) + return TRUE; + /* Common symbols that become definitions don't get the DEF_REGULAR flag set, so test it first, and don't bail out. */ if (ELF_COMMON_DEF_P (h)) @@ -2809,10 +2878,6 @@ _bfd_elf_symbol_refs_local_p (struct elf_link_hash_entry *h, if (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT) return FALSE; - /* However, STV_HIDDEN or STV_INTERNAL ones must be local. */ - 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; @@ -3003,7 +3068,7 @@ _bfd_elf_add_dynamic_entry (struct bfd_link_info *info, BFD_ASSERT (s != NULL); newsize = s->size + bed->s->sizeof_dyn; - newcontents = bfd_realloc (s->contents, newsize); + newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize); if (newcontents == NULL) return FALSE; @@ -3080,6 +3145,16 @@ elf_add_dt_needed_tag (bfd *abfd, return 0; } +static bfd_boolean +on_needed_list (const char *soname, struct bfd_link_needed_list *needed) +{ + for (; needed != NULL; needed = needed->next) + if (strcmp (soname, needed->name) == 0) + return TRUE; + + return FALSE; +} + /* Sort symbol by value and section. */ static int elf_sort_symbol (const void *arg1, const void *arg2) @@ -3108,7 +3183,7 @@ elf_sort_symbol (const void *arg1, const void *arg2) static bfd_boolean elf_adjust_dynstr_offsets (struct elf_link_hash_entry *h, void *data) { - struct elf_strtab_hash *dynstr = data; + struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data; if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -3244,11 +3319,46 @@ elf_finalize_dynstr (bfd *output_bfd, struct bfd_link_info *info) return TRUE; } +/* Return TRUE iff relocations for INPUT are compatible with OUTPUT. + The default is to only match when the INPUT and OUTPUT are exactly + the same target. */ + +bfd_boolean +_bfd_elf_default_relocs_compatible (const bfd_target *input, + const bfd_target *output) +{ + return input == output; +} + +/* Return TRUE iff relocations for INPUT are compatible with OUTPUT. + This version is used when different targets for the same architecture + are virtually identical. */ + +bfd_boolean +_bfd_elf_relocs_compatible (const bfd_target *input, + const bfd_target *output) +{ + const struct elf_backend_data *obed, *ibed; + + if (input == output) + return TRUE; + + ibed = xvec_get_elf_backend_data (input); + obed = xvec_get_elf_backend_data (output); + + if (ibed->arch != obed->arch) + return FALSE; + + /* If both backends are using this function, deem them compatible. */ + return ibed->relocs_compatible == obed->relocs_compatible; +} + /* Add symbols from an ELF object file to the linker hash table. */ static bfd_boolean elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) { + Elf_Internal_Ehdr *ehdr; Elf_Internal_Shdr *hdr; bfd_size_type symcount; bfd_size_type extsymcount; @@ -3294,7 +3404,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) the format of the output file. */ if (info->relocatable || !is_elf_hash_table (htab) - || htab->root.creator != abfd->xvec) + || info->output_bfd->xvec != abfd->xvec) { if (info->relocatable) bfd_set_error (bfd_error_invalid_operation); @@ -3304,6 +3414,17 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) } } + ehdr = elf_elfheader (abfd); + if (info->warn_alternate_em + && bed->elf_machine_code != ehdr->e_machine + && ((bed->elf_machine_alt1 != 0 + && ehdr->e_machine == bed->elf_machine_alt1) + || (bed->elf_machine_alt2 != 0 + && ehdr->e_machine == bed->elf_machine_alt2))) + info->callbacks->einfo + (_("%P: alternate ELF machine code found (%d) in %B, expecting %d\n"), + ehdr->e_machine, abfd, bed->elf_machine_code); + /* As a GNU extension, any input sections which are named .gnu.warning.SYMBOL are treated as warning symbols for the given symbol. This differs from .gnu.warning sections, which generate @@ -3353,7 +3474,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) } sz = s->size; - msg = bfd_alloc (abfd, sz + 1); + msg = (char *) bfd_alloc (abfd, sz + 1); if (msg == NULL) goto error_return; @@ -3391,7 +3512,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) format as the output, we can't make a shared library. */ if (info->shared && is_elf_hash_table (htab) - && htab->root.creator == abfd->xvec + && info->output_bfd->xvec == abfd->xvec && !htab->dynamic_sections_created) { if (! _bfd_elf_link_create_dynamic_sections (abfd, info)) @@ -3429,14 +3550,18 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) { bfd_byte *dynbuf; bfd_byte *extdyn; - int elfsec; + unsigned int elfsec; unsigned long shlink; if (!bfd_malloc_and_get_section (abfd, s, &dynbuf)) - goto error_free_dyn; + { +error_free_dyn: + free (dynbuf); + goto error_return; + } elfsec = _bfd_elf_section_from_bfd_section (abfd, s); - if (elfsec == -1) + if (elfsec == SHN_BAD) goto error_free_dyn; shlink = elf_elfsections (abfd)[elfsec]->sh_link; @@ -3461,12 +3586,12 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) unsigned int tagv = dyn.d_un.d_val; amt = sizeof (struct bfd_link_needed_list); - n = bfd_alloc (abfd, amt); + n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (n == NULL || fnm == NULL) goto error_free_dyn; amt = strlen (fnm) + 1; - anm = bfd_alloc (abfd, amt); + anm = (char *) bfd_alloc (abfd, amt); if (anm == NULL) goto error_free_dyn; memcpy (anm, fnm, amt); @@ -3484,12 +3609,12 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) unsigned int tagv = dyn.d_un.d_val; amt = sizeof (struct bfd_link_needed_list); - n = bfd_alloc (abfd, amt); + n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (n == NULL || fnm == NULL) goto error_free_dyn; amt = strlen (fnm) + 1; - anm = bfd_alloc (abfd, amt); + anm = (char *) bfd_alloc (abfd, amt); if (anm == NULL) goto error_free_dyn; memcpy (anm, fnm, amt); @@ -3510,18 +3635,14 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) unsigned int tagv = dyn.d_un.d_val; amt = sizeof (struct bfd_link_needed_list); - n = bfd_alloc (abfd, amt); + n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv); if (n == NULL || fnm == NULL) goto error_free_dyn; amt = strlen (fnm) + 1; - anm = bfd_alloc (abfd, amt); + anm = (char *) bfd_alloc (abfd, amt); if (anm == NULL) - { - error_free_dyn: - free (dynbuf); - goto error_return; - } + goto error_free_dyn; memcpy (anm, fnm, amt); n->name = anm; n->by = abfd; @@ -3623,7 +3744,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* We store a pointer to the hash table entry for each external symbol. */ amt = extsymcount * sizeof (struct elf_link_hash_entry *); - sym_hash = bfd_alloc (abfd, amt); + sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt); if (sym_hash == NULL) goto error_free_sym; elf_sym_hashes (abfd) = sym_hash; @@ -3643,7 +3764,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) Elf_Internal_Shdr *versymhdr; versymhdr = &elf_tdata (abfd)->dynversym_hdr; - extversym = bfd_malloc (versymhdr->sh_size); + extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); if (extversym == NULL) goto error_free_sym; amt = versymhdr->sh_size; @@ -3755,30 +3876,45 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) common = bed->common_definition (isym); bind = ELF_ST_BIND (isym->st_info); - if (bind == STB_LOCAL) + switch (bind) { + case STB_LOCAL: /* This should be impossible, since ELF requires that all global symbols follow all local symbols, and that sh_info point to the first global symbol. Unfortunately, Irix 5 screws this up. */ continue; - } - else if (bind == STB_GLOBAL) - { + + case STB_GLOBAL: if (isym->st_shndx != SHN_UNDEF && !common) flags = BSF_GLOBAL; - } - else if (bind == STB_WEAK) - flags = BSF_WEAK; - else - { + break; + + case STB_WEAK: + flags = BSF_WEAK; + break; + + case STB_GNU_UNIQUE: + flags = BSF_GNU_UNIQUE; + break; + + default: /* Leave it up to the processor backend. */ + break; } if (isym->st_shndx == SHN_UNDEF) sec = bfd_und_section_ptr; - else if (isym->st_shndx < SHN_LORESERVE - || isym->st_shndx > SHN_HIRESERVE) + else if (isym->st_shndx == SHN_ABS) + sec = bfd_abs_section_ptr; + else if (isym->st_shndx == SHN_COMMON) + { + sec = bfd_com_section_ptr; + /* What ELF calls the size we call the value. What ELF + calls the value we call the alignment. */ + value = isym->st_size; + } + else { sec = bfd_section_from_elf_index (abfd, isym->st_shndx); if (sec == NULL) @@ -3793,19 +3929,6 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) else if ((abfd->flags & (EXEC_P | DYNAMIC)) != 0) value -= sec->vma; } - else if (isym->st_shndx == SHN_ABS) - sec = bfd_abs_section_ptr; - else if (isym->st_shndx == SHN_COMMON) - { - sec = bfd_com_section_ptr; - /* What ELF calls the size we call the value. What ELF - calls the value we call the alignment. */ - value = isym->st_size; - } - else - { - /* Leave it up to the processor backend. */ - } name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, isym->st_name); @@ -3957,7 +4080,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) && isym->st_shndx != SHN_UNDEF) ++newlen; - newname = bfd_hash_allocate (&htab->root.table, newlen); + newname = (char *) bfd_hash_allocate (&htab->root.table, newlen); if (newname == NULL) goto error_free_vers; memcpy (newname, name, namelen); @@ -4029,7 +4152,9 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *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_hash = h; + h->unique_global = (flags & BSF_GNU_UNIQUE) != 0; new_weakdef = FALSE; if (dynamic @@ -4168,54 +4293,29 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) if (ELF_ST_TYPE (isym->st_info) != STT_NOTYPE && (definition || h->type == STT_NOTYPE)) { - if (h->type != STT_NOTYPE - && h->type != ELF_ST_TYPE (isym->st_info) - && ! type_change_ok) - (*_bfd_error_handler) - (_("Warning: type of symbol `%s' changed" - " from %d to %d in %B"), - abfd, name, h->type, ELF_ST_TYPE (isym->st_info)); + unsigned int type = ELF_ST_TYPE (isym->st_info); - h->type = ELF_ST_TYPE (isym->st_info); - } + /* Turn an IFUNC symbol from a DSO into a normal FUNC + symbol. */ + if (type == STT_GNU_IFUNC + && (abfd->flags & DYNAMIC) != 0) + type = STT_FUNC; - /* If st_other has a processor-specific meaning, specific - code might be needed here. We never merge the visibility - attribute with the one from a dynamic object. */ - if (bed->elf_backend_merge_symbol_attribute) - (*bed->elf_backend_merge_symbol_attribute) (h, isym, definition, - dynamic); - - /* If this symbol has default visibility and the user has requested - we not re-export it, then mark it as hidden. */ - if (definition && !dynamic - && (abfd->no_export - || (abfd->my_archive && abfd->my_archive->no_export)) - && ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL) - isym->st_other = (STV_HIDDEN - | (isym->st_other & ~ELF_ST_VISIBILITY (-1))); - - if (ELF_ST_VISIBILITY (isym->st_other) != 0 && !dynamic) - { - unsigned char hvis, symvis, other, nvis; - - /* 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); - symvis = ELF_ST_VISIBILITY (isym->st_other); - if (! hvis) - nvis = symvis; - else if (! symvis) - nvis = hvis; - else - nvis = hvis < symvis ? hvis : symvis; + if (h->type != type) + { + if (h->type != STT_NOTYPE && ! type_change_ok) + (*_bfd_error_handler) + (_("Warning: type of symbol `%s' changed" + " from %d to %d in %B"), + abfd, name, h->type, type); - h->other = other | nvis; + h->type = type; + } } + /* Merge st_other field. */ + elf_merge_st_other (abfd, h, isym, definition, dynamic); + /* Set a flag in the hash table entry indicating the type of reference or definition we just found. Keep a count of the number of dynamic symbols we find. A dynamic symbol @@ -4231,7 +4331,15 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) h->ref_regular_nonweak = 1; } else - h->def_regular = 1; + { + h->def_regular = 1; + if (h->def_dynamic) + { + h->def_dynamic = 0; + h->ref_dynamic = 1; + h->dynamic_def = 1; + } + } if (! info->executable || h->def_dynamic || h->ref_dynamic) @@ -4251,7 +4359,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) dynsym = TRUE; } - if (definition && (sec->flags & SEC_DEBUGGING)) + if (definition && (sec->flags & SEC_DEBUGGING) && !info->relocatable) { /* We don't want to make debug symbol dynamic. */ (*bed->elf_backend_hide_symbol) (info, h, TRUE); @@ -4277,7 +4385,10 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) { amt = ((isymend - isym + 1) * sizeof (struct elf_link_hash_entry *)); - nondeflt_vers = bfd_malloc (amt); + nondeflt_vers = + (struct elf_link_hash_entry **) bfd_malloc (amt); + if (!nondeflt_vers) + goto error_free_vers; } nondeflt_vers[nondeflt_vers_cnt++] = h; } @@ -4310,8 +4421,11 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) if (!add_needed && definition - && dynsym - && h->ref_regular) + && ((dynsym + && h->ref_regular) + || (h->ref_dynamic + && (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0 + && !on_needed_list (elf_dt_name (abfd), htab->needed)))) { int ret; const char *soname = elf_dt_name (abfd); @@ -4329,7 +4443,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) goto error_free_vers; } - elf_dyn_lib_class (abfd) &= ~DYN_AS_NEEDED; + elf_dyn_lib_class (abfd) = (enum dynamic_lib_link_class) + (elf_dyn_lib_class (abfd) & ~DYN_AS_NEEDED); add_needed = TRUE; ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); @@ -4435,7 +4550,9 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) continue; amt = p - h->root.root.string; - shortname = bfd_malloc (amt + 1); + shortname = (char *) bfd_malloc (amt + 1); + if (!shortname) + goto error_free_vers; memcpy (shortname, h->root.root.string, amt); shortname[amt] = '\0'; @@ -4491,7 +4608,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) defined symbol, search time for N weak defined symbols will be O(N^2). Binary search will cut it down to O(NlogN). */ amt = extsymcount * sizeof (struct elf_link_hash_entry *); - sorted_sym_hash = bfd_malloc (amt); + sorted_sym_hash = (struct elf_link_hash_entry **) bfd_malloc (amt); if (sorted_sym_hash == NULL) goto error_return; sym_hash = sorted_sym_hash; @@ -4584,7 +4701,11 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) if (hlook->dynindx != -1 && h->dynindx == -1) { if (! bfd_elf_link_record_dynamic_symbol (info, h)) - goto error_return; + { + err_free_sym_hash: + free (sorted_sym_hash); + goto error_return; + } } /* If the real definition is in the list of dynamic @@ -4595,7 +4716,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) if (h->dynindx != -1 && hlook->dynindx == -1) { if (! bfd_elf_link_record_dynamic_symbol (info, hlook)) - goto error_return; + goto err_free_sym_hash; } break; } @@ -4605,8 +4726,9 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) free (sorted_sym_hash); } - if (bed->check_directives) - (*bed->check_directives) (abfd, info); + if (bed->check_directives + && !(*bed->check_directives) (abfd, info)) + return FALSE; /* If this object is the same format as the output object, and it is not a shared library, then let the backend look through the @@ -4627,8 +4749,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) different format. It probably can't be done. */ if (! dynamic && is_elf_hash_table (htab) - && htab->root.creator == abfd->xvec - && bed->check_relocs != NULL) + && bed->check_relocs != NULL + && (*bed->relocs_compatible) (abfd->xvec, info->output_bfd->xvec)) { asection *o; @@ -4699,7 +4821,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info) /* Add this bfd to the loaded list. */ struct elf_link_loaded_list *n; - n = bfd_alloc (abfd, sizeof (struct elf_link_loaded_list)); + n = (struct elf_link_loaded_list *) + bfd_alloc (abfd, sizeof (struct elf_link_loaded_list)); if (n == NULL) goto error_return; n->abfd = abfd; @@ -4750,7 +4873,7 @@ _bfd_elf_archive_symbol_lookup (bfd *abfd, /* First check with only one `@'. */ len = strlen (name); - copy = bfd_alloc (abfd, len); + copy = (char *) bfd_alloc (abfd, len); if (copy == NULL) return (struct elf_link_hash_entry *) 0 - 1; @@ -4827,8 +4950,8 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info) return TRUE; amt = c; amt *= sizeof (bfd_boolean); - defined = bfd_zmalloc (amt); - included = bfd_zmalloc (amt); + defined = (bfd_boolean *) bfd_zmalloc (amt); + included = (bfd_boolean *) bfd_zmalloc (amt); if (defined == NULL || included == NULL) goto error_return; @@ -4980,13 +5103,19 @@ bfd_elf_link_add_symbols (bfd *abfd, struct bfd_link_info *info) } } +struct hash_codes_info +{ + unsigned long *hashcodes; + bfd_boolean error; +}; + /* 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_hash_codes (struct elf_link_hash_entry *h, void *data) { - unsigned long **valuep = data; + struct hash_codes_info *inf = (struct hash_codes_info *) data; const char *name; char *p; unsigned long ha; @@ -5003,7 +5132,12 @@ elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data) p = strchr (name, ELF_VER_CHR); if (p != NULL) { - alc = bfd_malloc (p - name + 1); + alc = (char *) bfd_malloc (p - name + 1); + if (alc == NULL) + { + inf->error = TRUE; + return FALSE; + } memcpy (alc, name, p - name); alc[p - name] = '\0'; name = alc; @@ -5013,7 +5147,7 @@ elf_collect_hash_codes (struct elf_link_hash_entry *h, void *data) ha = bfd_elf_hash (name); /* Store the found hash value in the array given as the argument. */ - *(*valuep)++ = ha; + *(inf->hashcodes)++ = ha; /* And store it in the struct so that we can put it in the hash table later. */ @@ -5043,6 +5177,7 @@ struct collect_gnu_hash_codes long int local_indx; long int shift1, shift2; unsigned long int mask; + bfd_boolean error; }; /* This function will be called though elf_link_hash_traverse to store @@ -5051,7 +5186,7 @@ struct collect_gnu_hash_codes static bfd_boolean elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data) { - struct collect_gnu_hash_codes *s = data; + struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data; const char *name; char *p; unsigned long ha; @@ -5072,7 +5207,12 @@ elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data) p = strchr (name, ELF_VER_CHR); if (p != NULL) { - alc = bfd_malloc (p - name + 1); + alc = (char *) bfd_malloc (p - name + 1); + if (alc == NULL) + { + s->error = TRUE; + return FALSE; + } memcpy (alc, name, p - name); alc[p - name] = '\0'; name = alc; @@ -5101,7 +5241,7 @@ elf_collect_gnu_hash_codes (struct elf_link_hash_entry *h, void *data) static bfd_boolean elf_renumber_gnu_hash_syms (struct elf_link_hash_entry *h, void *data) { - struct collect_gnu_hash_codes *s = data; + struct collect_gnu_hash_codes *s = (struct collect_gnu_hash_codes *) data; unsigned long int bucket; unsigned long int val; @@ -5171,13 +5311,13 @@ 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, unsigned long int *hashcodes, - unsigned long int nsyms, int gnu_hash) +compute_bucket_count (struct bfd_link_info *info, + unsigned long int *hashcodes ATTRIBUTE_UNUSED, + unsigned long int nsyms, + int gnu_hash) { - size_t dynsymcount = elf_hash_table (info)->dynsymcount; size_t best_size = 0; unsigned long int i; - bfd_size_type amt; /* We have a problem here. The following code to optimize the table size requires an integer type with more the 32 bits. If @@ -5189,8 +5329,10 @@ compute_bucket_count (struct bfd_link_info *info, unsigned long int *hashcodes, size_t maxsize; BFD_HOST_U_64_BIT best_chlen = ~((BFD_HOST_U_64_BIT) 0); bfd *dynobj = elf_hash_table (info)->dynobj; + size_t dynsymcount = elf_hash_table (info)->dynsymcount; const struct elf_backend_data *bed = get_elf_backend_data (dynobj); unsigned long int *counts; + bfd_size_type amt; /* Possible optimization parameters: if we have NSYMS symbols we say that the hashing table must at least have NSYMS/4 and at most @@ -5211,7 +5353,7 @@ compute_bucket_count (struct bfd_link_info *info, unsigned long int *hashcodes, since the size could be large. */ amt = maxsize; amt *= sizeof (unsigned long int); - counts = bfd_malloc (amt); + counts = (unsigned long int *) bfd_malloc (amt); if (counts == NULL) return 0; @@ -5317,7 +5459,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, bfd_size_type soname_indx; bfd *dynobj; const struct elf_backend_data *bed; - struct elf_assign_sym_version_info asvinfo; + struct elf_info_failed asvinfo; *sinterpptr = NULL; @@ -5327,7 +5469,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, 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; else if (info->noexecstack) @@ -5344,7 +5485,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, { asection *s; - if (inputobj->flags & (DYNAMIC | BFD_LINKER_CREATED)) + if (inputobj->flags & (DYNAMIC | EXEC_P | BFD_LINKER_CREATED)) continue; s = bfd_get_section_by_name (inputobj, ".note.GNU-stack"); if (s) @@ -5481,20 +5622,20 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, /* Make all global versions with definition. */ for (t = verdefs; t != NULL; t = t->next) for (d = t->globals.list; d != NULL; d = d->next) - if (!d->symver && d->symbol) + if (!d->symver && d->literal) { const char *verstr, *name; size_t namelen, verlen, newlen; char *newname, *p; struct elf_link_hash_entry *newh; - name = d->symbol; + name = d->pattern; namelen = strlen (name); verstr = t->name; verlen = strlen (verstr); newlen = namelen + verlen + 3; - newname = bfd_malloc (newlen); + newname = (char *) bfd_malloc (newlen); if (newname == NULL) return FALSE; memcpy (newname, name, namelen); @@ -5529,7 +5670,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, } /* Attach all the symbols to their version information. */ - asvinfo.output_bfd = output_bfd; asvinfo.info = info; asvinfo.verdefs = verdefs; asvinfo.failed = FALSE; @@ -5546,7 +5686,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, all_defined = TRUE; for (t = verdefs; t != NULL; t = t->next) for (d = t->globals.list; d != NULL; d = d->next) - if (!d->symver && !d->script) + if (d->literal && !d->symver && !d->script) { (*_bfd_error_handler) (_("%s: undefined version: %s"), @@ -5733,7 +5873,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, } s->size = size; - s->contents = bfd_alloc (output_bfd, s->size); + s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); if (s->contents == NULL && s->size != 0) return FALSE; @@ -5934,7 +6074,6 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, { struct elf_find_verdep_info sinfo; - sinfo.output_bfd = output_bfd; sinfo.info = info; sinfo.vers = elf_tdata (output_bfd)->cverdefs; if (sinfo.vers == 0) @@ -5944,6 +6083,8 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, elf_link_hash_traverse (elf_hash_table (info), _bfd_elf_link_find_version_dependencies, &sinfo); + if (sinfo.failed) + return FALSE; if (elf_tdata (output_bfd)->verref == NULL) s->flags |= SEC_EXCLUDE; @@ -5970,7 +6111,7 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd, } s->size = size; - s->contents = bfd_alloc (output_bfd, s->size); + s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); if (s->contents == NULL) return FALSE; @@ -6070,20 +6211,22 @@ _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info) { asection *s; + /* Data first, since setting text_index_section changes + _bfd_elf_link_omit_section_dynsym. */ for (s = output_bfd->sections; s != NULL; s = s->next) - if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) - == (SEC_ALLOC | SEC_READONLY)) + 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)->text_index_section = s; + elf_hash_table (info)->data_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) + 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)->data_index_section = s; + elf_hash_table (info)->text_index_section = s; break; } @@ -6128,7 +6271,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) && (s->flags & SEC_EXCLUDE) == 0) { s->size = dynsymcount * sizeof (Elf_External_Versym); - s->contents = bfd_zalloc (output_bfd, s->size); + s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); if (s->contents == NULL) return FALSE; @@ -6148,7 +6291,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) if (dynsymcount != 0) { - s->contents = bfd_alloc (output_bfd, s->size); + s->contents = (unsigned char *) bfd_alloc (output_bfd, s->size); if (s->contents == NULL) return FALSE; @@ -6165,7 +6308,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) if (info->emit_hash) { unsigned long int *hashcodes; - unsigned long int *hashcodesp; + struct hash_codes_info hashinf; bfd_size_type amt; unsigned long int nsyms; size_t bucketcount; @@ -6175,16 +6318,22 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) 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); + hashcodes = (unsigned long int *) bfd_malloc (amt); if (hashcodes == NULL) return FALSE; - hashcodesp = hashcodes; + hashinf.hashcodes = hashcodes; + hashinf.error = FALSE; /* Put all hash values in HASHCODES. */ elf_link_hash_traverse (elf_hash_table (info), - elf_collect_hash_codes, &hashcodesp); + elf_collect_hash_codes, &hashinf); + if (hashinf.error) + { + free (hashcodes); + return FALSE; + } - nsyms = hashcodesp - hashcodes; + nsyms = hashinf.hashcodes - hashcodes; bucketcount = compute_bucket_count (info, hashcodes, nsyms, 0); free (hashcodes); @@ -6198,7 +6347,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) 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); + s->contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); if (s->contents == NULL) return FALSE; @@ -6221,7 +6370,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) 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); + cinfo.hashcodes = (long unsigned int *) bfd_malloc (amt); if (cinfo.hashcodes == NULL) return FALSE; @@ -6233,6 +6382,11 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) /* Put all hash values in HASHCODES. */ elf_link_hash_traverse (elf_hash_table (info), elf_collect_gnu_hash_codes, &cinfo); + if (cinfo.error) + { + free (cinfo.hashcodes); + return FALSE; + } bucketcount = compute_bucket_count (info, cinfo.hashcodes, cinfo.nsyms, 1); @@ -6252,7 +6406,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) 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); + contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); if (contents == NULL) return FALSE; s->contents = contents; @@ -6296,14 +6450,14 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) maskwords = 1 << (maskbitslog2 - cinfo.shift1); amt = bucketcount * sizeof (unsigned long int) * 2; amt += maskwords * sizeof (bfd_vma); - cinfo.bitmask = bfd_malloc (amt); + cinfo.bitmask = (bfd_vma *) bfd_malloc (amt); if (cinfo.bitmask == NULL) { free (cinfo.hashcodes); return FALSE; } - cinfo.counts = (void *) (cinfo.bitmask + maskwords); + cinfo.counts = (long unsigned int *) (cinfo.bitmask + maskwords); cinfo.indx = cinfo.counts + bucketcount; cinfo.symindx = dynsymcount - cinfo.nsyms; memset (cinfo.bitmask, 0, maskwords * sizeof (bfd_vma)); @@ -6325,7 +6479,7 @@ bfd_elf_size_dynsym_hash_dynstr (bfd *output_bfd, struct bfd_link_info *info) s->size = (4 + bucketcount + cinfo.nsyms) * 4; s->size += cinfo.maskbits / 8; - contents = bfd_zalloc (output_bfd, s->size); + contents = (unsigned char *) bfd_zalloc (output_bfd, s->size); if (contents == NULL) { free (cinfo.bitmask); @@ -6449,7 +6603,8 @@ _bfd_elf_link_hash_newfunc (struct bfd_hash_entry *entry, subclass. */ if (entry == NULL) { - entry = bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)); + entry = (struct bfd_hash_entry *) + bfd_hash_allocate (table, sizeof (struct elf_link_hash_entry)); if (entry == NULL) return entry; } @@ -6536,8 +6691,12 @@ _bfd_elf_link_hash_hide_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h, bfd_boolean force_local) { - h->plt = elf_hash_table (info)->init_plt_offset; - h->needs_plt = 0; + /* STT_GNU_IFUNC symbol must go through PLT. */ + if (h->type != STT_GNU_IFUNC) + { + h->plt = elf_hash_table (info)->init_plt_offset; + h->needs_plt = 0; + } if (force_local) { h->forced_local = 1; @@ -6586,7 +6745,7 @@ _bfd_elf_link_hash_table_create (bfd *abfd) struct elf_link_hash_table *ret; bfd_size_type amt = sizeof (struct elf_link_hash_table); - ret = bfd_malloc (amt); + ret = (struct elf_link_hash_table *) bfd_malloc (amt); if (ret == NULL) return NULL; @@ -6678,7 +6837,7 @@ bfd_elf_get_bfd_needed_list (bfd *abfd, { asection *s; bfd_byte *dynbuf = NULL; - int elfsec; + unsigned int elfsec; unsigned long shlink; bfd_byte *extdyn, *extdynend; size_t extdynsize; @@ -6698,7 +6857,7 @@ bfd_elf_get_bfd_needed_list (bfd *abfd, goto error_return; elfsec = _bfd_elf_section_from_bfd_section (abfd, s); - if (elfsec == -1) + if (elfsec == SHN_BAD) goto error_return; shlink = elf_elfsections (abfd)[elfsec]->sh_link; @@ -6729,7 +6888,7 @@ bfd_elf_get_bfd_needed_list (bfd *abfd, goto error_return; amt = sizeof *l; - l = bfd_alloc (abfd, amt); + l = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt); if (l == NULL) goto error_return; @@ -6796,12 +6955,12 @@ elf_sym_name_compare (const void *arg1, const void *arg2) 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)); + Elf_Internal_Sym **ind, **indbufend, **indbuf; struct elf_symbuf_symbol *ssym; struct elf_symbuf_head *ssymbuf, *ssymhead; - bfd_size_type i, shndx_count; + bfd_size_type i, shndx_count, total_size; + indbuf = (Elf_Internal_Sym **) bfd_malloc2 (symcount, sizeof (*indbuf)); if (indbuf == NULL) return NULL; @@ -6819,15 +6978,16 @@ elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf) if (ind[0]->st_shndx != ind[1]->st_shndx) shndx_count++; - ssymbuf = bfd_malloc ((shndx_count + 1) * sizeof (*ssymbuf) - + (indbufend - indbuf) * sizeof (*ssymbuf)); + total_size = ((shndx_count + 1) * sizeof (*ssymbuf) + + (indbufend - indbuf) * sizeof (*ssym)); + ssymbuf = (struct elf_symbuf_head *) bfd_malloc (total_size); if (ssymbuf == NULL) { free (indbuf); return NULL; } - ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count); + ssym = (struct elf_symbuf_symbol *) (ssymbuf + shndx_count + 1); ssymbuf->ssym = NULL; ssymbuf->count = shndx_count; ssymbuf->st_shndx = 0; @@ -6845,7 +7005,9 @@ elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf) ssym->st_other = (*ind)->st_other; ssymhead->count++; } - BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count); + BFD_ASSERT ((bfd_size_type) (ssymhead - ssymbuf) == shndx_count + && (((bfd_hostptr_t) ssym - (bfd_hostptr_t) ssymbuf) + == total_size)); free (indbuf); return ssymbuf; @@ -6854,7 +7016,7 @@ elf_create_symbuf (bfd_size_type symcount, Elf_Internal_Sym *isymbuf) /* Check if 2 sections define the same set of local and global symbols. */ -bfd_boolean +static bfd_boolean bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, struct bfd_link_info *info) { @@ -6867,19 +7029,12 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, Elf_Internal_Sym *isym, *isymend; struct elf_symbol *symtable1 = NULL, *symtable2 = NULL; bfd_size_type count1, count2, i; - int shndx1, shndx2; + unsigned int shndx1, shndx2; bfd_boolean result; bfd1 = sec1->owner; bfd2 = sec2->owner; - /* If both are .gnu.linkonce sections, they have to have the same - section name. */ - 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; - /* Both sections have to be in ELF. */ if (bfd_get_flavour (bfd1) != bfd_target_elf_flavour || bfd_get_flavour (bfd2) != bfd_target_elf_flavour) @@ -6888,18 +7043,9 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, if (elf_section_type (sec1) != elf_section_type (sec2)) return FALSE; - if ((elf_section_flags (sec1) & SHF_GROUP) != 0 - && (elf_section_flags (sec2) & SHF_GROUP) != 0) - { - /* If both are members of section groups, they have to have the - same group name. */ - if (strcmp (elf_group_name (sec1), elf_group_name (sec2)) != 0) - return FALSE; - } - shndx1 = _bfd_elf_section_from_bfd_section (bfd1, sec1); shndx2 = _bfd_elf_section_from_bfd_section (bfd2, sec2); - if (shndx1 == -1 || shndx2 == -1) + if (shndx1 == SHN_BAD || shndx2 == SHN_BAD) return FALSE; bed1 = get_elf_backend_data (bfd1); @@ -6915,8 +7061,8 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, result = FALSE; isymbuf1 = NULL; isymbuf2 = NULL; - ssymbuf1 = elf_tdata (bfd1)->symbuf; - ssymbuf2 = elf_tdata (bfd2)->symbuf; + ssymbuf1 = (struct elf_symbuf_head *) elf_tdata (bfd1)->symbuf; + ssymbuf2 = (struct elf_symbuf_head *) elf_tdata (bfd2)->symbuf; if (ssymbuf1 == NULL) { @@ -6956,9 +7102,9 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, while (lo < hi) { mid = (lo + hi) / 2; - if ((unsigned int) shndx1 < ssymbuf1[mid].st_shndx) + if (shndx1 < ssymbuf1[mid].st_shndx) hi = mid; - else if ((unsigned int) shndx1 > ssymbuf1[mid].st_shndx) + else if (shndx1 > ssymbuf1[mid].st_shndx) lo = mid + 1; else { @@ -6975,9 +7121,9 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, while (lo < hi) { mid = (lo + hi) / 2; - if ((unsigned int) shndx2 < ssymbuf2[mid].st_shndx) + if (shndx2 < ssymbuf2[mid].st_shndx) hi = mid; - else if ((unsigned int) shndx2 > ssymbuf2[mid].st_shndx) + else if (shndx2 > ssymbuf2[mid].st_shndx) lo = mid + 1; else { @@ -6990,8 +7136,10 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, 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)); + symtable1 = (struct elf_symbol *) + bfd_malloc (count1 * sizeof (struct elf_symbol)); + symtable2 = (struct elf_symbol *) + bfd_malloc (count2 * sizeof (struct elf_symbol)); if (symtable1 == NULL || symtable2 == NULL) goto done; @@ -7032,20 +7180,22 @@ bfd_elf_match_symbols_in_sections (asection *sec1, asection *sec2, goto done; } - symtable1 = bfd_malloc (symcount1 * sizeof (struct elf_symbol)); - symtable2 = bfd_malloc (symcount2 * sizeof (struct elf_symbol)); + symtable1 = (struct elf_symbol *) + bfd_malloc (symcount1 * sizeof (struct elf_symbol)); + symtable2 = (struct elf_symbol *) + bfd_malloc (symcount2 * sizeof (struct elf_symbol)); if (symtable1 == NULL || symtable2 == NULL) goto done; /* Count definitions in the section. */ count1 = 0; for (isym = isymbuf1, isymend = isym + symcount1; isym < isymend; isym++) - if (isym->st_shndx == (unsigned int) shndx1) + if (isym->st_shndx == shndx1) symtable1[count1++].u.isym = isym; count2 = 0; for (isym = isymbuf2, isymend = isym + symcount2; isym < isymend; isym++) - if (isym->st_shndx == (unsigned int) shndx2) + if (isym->st_shndx == shndx2) symtable2[count2++].u.isym = isym; if (count1 == 0 || count2 == 0 || count1 != count2) @@ -7168,7 +7318,7 @@ struct elf_outext_info Complex relocations are generalized, self-describing relocations. The implementation of them consists of two parts: complex symbols, and the - relocations themselves. + 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 @@ -7194,61 +7344,65 @@ struct elf_outext_info := 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) +set_symbol_value (bfd *bfd_with_globals, + Elf_Internal_Sym *isymbuf, + size_t locsymcount, + size_t 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; + struct elf_link_hash_entry **sym_hashes; + struct elf_link_hash_entry *h; + size_t extsymoff = locsymcount; - 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) + if (symidx < locsymcount) { - /* 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; + Elf_Internal_Sym *sym; + + sym = isymbuf + symidx; + if (ELF_ST_BIND (sym->st_info) == STB_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; + return; + } + BFD_ASSERT (elf_bad_symtab (bfd_with_globals)); + extsymoff = 0; } - 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; - + + /* It is a global symbol: set its link type + to "defined" and give it a value. */ + + sym_hashes = elf_sym_hashes (bfd_with_globals); + h = sym_hashes [symidx - 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; + 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, + Elf_Internal_Sym *isymbuf, + size_t locsymcount) +{ + Elf_Internal_Sym *sym; + struct bfd_link_hash_entry *global_entry; + const char *candidate = NULL; + Elf_Internal_Shdr *symtab_hdr; + 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]; + sym = isymbuf + i; if (ELF_ST_BIND (sym->st_info) != STB_LOCAL) continue; @@ -7257,73 +7411,54 @@ resolve_symbol (const char * name, 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); + printf ("Comparing string: '%s' vs. '%s' = 0x%lx\n", + name, candidate, (unsigned long) sym->st_value); #endif if (candidate && strcmp (candidate, name) == 0) { - * result = sym->st_value; + asection *sec = finfo->sections [i]; - 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; - } + *result = _bfd_elf_rel_local_sym (input_bfd, sym, &sec, 0); + *result += sec->output_offset + sec->output_section->vma; #ifdef DEBUG - printf ("Found symbol with effective value %8.8x\n", (unsigned int)* result); + printf ("Found symbol with value %8.8lx\n", + (unsigned long) *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); + 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; + *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 COMMON symbol '%s' with value %8.8x\n", - global_entry->root.string, (unsigned int)*result); + printf ("Found GLOBAL symbol '%s' with value %8.8lx\n", + global_entry->root.string, (unsigned long) *result); #endif return TRUE; } - + return FALSE; } static bfd_boolean -resolve_section (const char * name, - asection * sections, - bfd_vma * result) +resolve_section (const char *name, + asection *sections, + bfd_vma *result) { - asection * curr; - unsigned int len; + asection *curr; + unsigned int len; - for (curr = sections; curr; curr = curr->next) + for (curr = sections; curr; curr = curr->next) if (strcmp (curr->name, name) == 0) { *result = curr->vma; @@ -7331,10 +7466,10 @@ resolve_section (const char * name, } /* Hmm. still haven't found it. try pseudo-section names. */ - for (curr = sections; curr; curr = curr->next) + for (curr = sections; curr; curr = curr->next) { len = strlen (curr->name); - if (len > strlen (name)) + if (len > strlen (name)) continue; if (strncmp (curr->name, name, len) == 0) @@ -7348,94 +7483,95 @@ resolve_section (const char * name, /* Insert more pseudo-section names here, if you like. */ } } - + return FALSE; } static void -undefined_reference (const char * reftype, - const char * name) +undefined_reference (const char *reftype, const char *name) { - _bfd_error_handler (_("undefined %s reference in complex symbol: %s"), reftype, 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; +eval_symbol (bfd_vma *result, + const char **symp, + bfd *input_bfd, + struct elf_final_link_info *finfo, + bfd_vma dot, + Elf_Internal_Sym *isymbuf, + size_t locsymcount, + int signed_p) +{ + size_t len; + size_t symlen; + bfd_vma a; + bfd_vma b; + char symbuf[4096]; + const char *sym = *symp; + const char *symend; + bfd_boolean symbol_is_section = FALSE; len = strlen (sym); symend = sym + len; - if (len < 1 || len > bufsz) + if (len < 1 || len > sizeof (symbuf)) { bfd_set_error (bfd_error_invalid_operation); return FALSE; } - + switch (* sym) { case '.': - * result = addr + section_offset; - * advanced = sym + 1; + *result = dot; + *symp = sym + 1; return TRUE; case '#': - ++ sym; - * result = strtoul (sym, advanced, 16); + ++sym; + *result = strtoul (sym, (char **) symp, 16); return TRUE; case 'S': symbol_is_section = TRUE; - case 's': - ++ sym; - symlen = strtol (sym, &sym, 10); - ++ sym; /* Skip the trailing ':'. */ + case 's': + ++sym; + symlen = strtol (sym, (char **) symp, 10); + sym = *symp + 1; /* Skip the trailing ':'. */ - if ((symend < sym) || ((symlen + 1) > bufsz)) + if (symend < sym || symlen + 1 > sizeof (symbuf)) { 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" + symbuf[symlen] = '\0'; + *symp = 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 (symbol_is_section) { - if ((resolve_section (symbuf, finfo->output_bfd->sections, result) != TRUE) - && (resolve_symbol (symbuf, input_bfd, finfo, result, locsymcount) != TRUE)) + if (!resolve_section (symbuf, finfo->output_bfd->sections, result) + && !resolve_symbol (symbuf, input_bfd, finfo, result, + isymbuf, locsymcount)) { undefined_reference ("section", symbuf); return FALSE; } - } - else + } + else { - if ((resolve_symbol (symbuf, input_bfd, finfo, result, locsymcount) != TRUE) - && (resolve_section (symbuf, finfo->output_bfd->sections, - result) != TRUE)) + if (!resolve_symbol (symbuf, input_bfd, finfo, result, + isymbuf, locsymcount) + && !resolve_section (symbuf, finfo->output_bfd->sections, + result)) { undefined_reference ("symbol", symbuf); return FALSE; @@ -7443,24 +7579,23 @@ eval_symbol (bfd_vma * result, } 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; \ + if (*sym == ':') \ + ++sym; \ + *symp = sym; \ + if (!eval_symbol (&a, symp, input_bfd, finfo, dot, \ + isymbuf, locsymcount, signed_p)) \ + return FALSE; \ + if (signed_p) \ + *result = op ((bfd_signed_vma) a); \ + else \ + *result = op a; \ return TRUE; \ } @@ -7468,22 +7603,20 @@ eval_symbol (bfd_vma * result, 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; \ + if (*sym == ':') \ + ++sym; \ + *symp = sym; \ + if (!eval_symbol (&a, symp, input_bfd, finfo, dot, \ + isymbuf, locsymcount, signed_p)) \ + return FALSE; \ + ++*symp; \ + if (!eval_symbol (&b, symp, input_bfd, finfo, dot, \ + isymbuf, locsymcount, signed_p)) \ + return FALSE; \ + if (signed_p) \ + *result = ((bfd_signed_vma) a) op ((bfd_signed_vma) b); \ + else \ + *result = a op b; \ return TRUE; \ } @@ -7517,150 +7650,16 @@ eval_symbol (bfd_vma * result, } } -/* 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) +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)) + for (; size; size -= chunksz, location -= chunksz, x >>= (chunksz * 8)) { switch (chunksz) { @@ -7687,15 +7686,15 @@ put_value (bfd_vma size, } } -static bfd_vma -get_value (bfd_vma size, - unsigned long chunksz, - bfd * input_bfd, - bfd_byte * location) +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) + for (; size; size -= chunksz, location += chunksz) { switch (chunksz) { @@ -7723,17 +7722,16 @@ get_value (bfd_vma size, 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) +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; @@ -7745,89 +7743,26 @@ decode_complex_addend * 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; +bfd_reloc_status_type +bfd_elf_perform_complex_relocation (bfd *input_bfd, + asection *input_section ATTRIBUTE_UNUSED, + bfd_byte *contents, + Elf_Internal_Rela *rel, + bfd_vma relocation) +{ + bfd_vma shift, x, mask; + unsigned long start, oplen, len, wordsz, chunksz, lsb0_p, signed_p, trunc_p; + bfd_reloc_status_type r; /* 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]; + word size, etc) encoded within it.). */ - 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); + decode_complex_addend (&start, &oplen, &len, &wordsz, + &chunksz, &lsb0_p, &signed_p, + &trunc_p, rel->r_addend); mask = (((1L << (len - 1)) - 1) << 1) | 1; @@ -7836,7 +7771,8 @@ bfd_elf_perform_complex_relocation else shift = (8 * wordsz) - (start + len); - x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset); + /* FIXME: octets_per_byte. */ + x = get_value (wordsz, chunksz, input_bfd, contents + rel->r_offset); #ifdef DEBUG printf ("Doing complex reloc: " @@ -7847,21 +7783,15 @@ bfd_elf_perform_complex_relocation oplen, x, mask, relocation); #endif + r = bfd_reloc_ok; 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); - } - + /* Now do an overflow check. */ + r = bfd_check_overflow ((signed_p + ? complain_overflow_signed + : complain_overflow_unsigned), + len, 0, (8 * wordsz), + relocation); + /* Do the deed. */ x = (x & ~(mask << shift)) | ((relocation & mask) << shift); @@ -7870,10 +7800,12 @@ bfd_elf_perform_complex_relocation " shifted mask: %8.8lx\n" " shifted/masked reloc: %8.8lx\n" " result: %8.8lx\n", - relocation, (mask << shift), + relocation, (mask << shift), ((relocation & mask) << shift), x); #endif + /* FIXME: octets_per_byte. */ put_value (wordsz, chunksz, input_bfd, x, contents + rel->r_offset); + return r; } /* When performing a relocatable link, the input relocations are @@ -7955,8 +7887,8 @@ struct elf_link_sort_rela static int elf_link_sort_cmp1 (const void *A, const void *B) { - const struct elf_link_sort_rela *a = A; - const struct elf_link_sort_rela *b = B; + const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A; + const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B; int relativea, relativeb; relativea = a->type == reloc_class_relative; @@ -7980,8 +7912,8 @@ elf_link_sort_cmp1 (const void *A, const void *B) static int elf_link_sort_cmp2 (const void *A, const void *B) { - const struct elf_link_sort_rela *a = A; - const struct elf_link_sort_rela *b = B; + const struct elf_link_sort_rela *a = (const struct elf_link_sort_rela *) A; + const struct elf_link_sort_rela *b = (const struct elf_link_sort_rela *) B; int copya, copyb; if (a->u.offset < b->u.offset) @@ -8179,7 +8111,9 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) + (i2e - 1) * sizeof (Elf_Internal_Rela)); count = dynamic_relocs->size / ext_size; - sort = bfd_zmalloc (sort_elt * count); + if (count == 0) + return 0; + sort = (bfd_byte *) bfd_zmalloc (sort_elt * count); if (sort == NULL) { @@ -8209,6 +8143,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) } erel = o->contents; erelend = o->contents + o->size; + /* FIXME: octets_per_byte. */ p = sort + o->output_offset / ext_size * sort_elt; while (erel < erelend) @@ -8253,6 +8188,7 @@ elf_link_sort_relocs (bfd *abfd, struct bfd_link_info *info, asection **psec) erel = o->contents; erelend = o->contents + o->size; + /* FIXME: octets_per_byte. */ p = sort + o->output_offset / ext_size * sort_elt; while (erel < erelend) { @@ -8296,7 +8232,7 @@ elf_link_flush_output_syms (struct elf_final_link_info *finfo, /* Add a symbol to the output symbol table. */ -static bfd_boolean +static int elf_link_output_sym (struct elf_final_link_info *finfo, const char *name, Elf_Internal_Sym *elfsym, @@ -8305,7 +8241,7 @@ elf_link_output_sym (struct elf_final_link_info *finfo, { bfd_byte *dest; Elf_External_Sym_Shndx *destshndx; - bfd_boolean (*output_symbol_hook) + int (*output_symbol_hook) (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); const struct elf_backend_data *bed; @@ -8314,8 +8250,9 @@ elf_link_output_sym (struct elf_final_link_info *finfo, output_symbol_hook = bed->elf_backend_link_output_symbol_hook; if (output_symbol_hook != NULL) { - if (! (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h)) - return FALSE; + int ret = (*output_symbol_hook) (finfo->info, name, elfsym, input_sec, h); + if (ret != 1) + return ret; } if (name == NULL || *name == '\0') @@ -8327,13 +8264,13 @@ elf_link_output_sym (struct elf_final_link_info *finfo, elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab, name, TRUE, FALSE); if (elfsym->st_name == (unsigned long) -1) - return FALSE; + return 0; } if (finfo->symbuf_count >= finfo->symbuf_size) { if (! elf_link_flush_output_syms (finfo, bed)) - return FALSE; + return 0; } dest = finfo->symbuf + finfo->symbuf_count * bed->s->sizeof_sym; @@ -8345,9 +8282,11 @@ elf_link_output_sym (struct elf_final_link_info *finfo, bfd_size_type amt; amt = finfo->shndxbuf_size * sizeof (Elf_External_Sym_Shndx); - finfo->symshndxbuf = destshndx = bfd_realloc (destshndx, amt * 2); + destshndx = (Elf_External_Sym_Shndx *) bfd_realloc (destshndx, + amt * 2); if (destshndx == NULL) - return FALSE; + return 0; + finfo->symshndxbuf = destshndx; memset ((char *) destshndx + amt, 0, amt); finfo->shndxbuf_size *= 2; } @@ -8358,7 +8297,7 @@ elf_link_output_sym (struct elf_final_link_info *finfo, finfo->symbuf_count += 1; bfd_get_symcount (finfo->output_bfd) += 1; - return TRUE; + return 1; } /* Return TRUE if the dynamic symbol SYM in ABFD is supported. */ @@ -8366,13 +8305,14 @@ elf_link_output_sym (struct elf_final_link_info *finfo, static bfd_boolean check_dynsym (bfd *abfd, Elf_Internal_Sym *sym) { - if (sym->st_shndx > SHN_HIRESERVE) + if (sym->st_shndx >= (SHN_LORESERVE & 0xffff) + && sym->st_shndx < SHN_LORESERVE) { /* The gABI doesn't support dynamic symbols in output sections - beyond 64k. */ + beyond 64k. */ (*_bfd_error_handler) (_("%B: Too many sections: %d (>= %d)"), - abfd, bfd_count_sections (abfd), SHN_LORESERVE); + abfd, bfd_count_sections (abfd), SHN_LORESERVE & 0xffff); bfd_set_error (bfd_error_nonrepresentable_section); return FALSE; } @@ -8469,7 +8409,7 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info, /* Read in any version definitions. */ versymhdr = &elf_tdata (input)->dynversym_hdr; - extversym = bfd_malloc (versymhdr->sh_size); + extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size); if (extversym == NULL) goto error_ret; @@ -8537,12 +8477,14 @@ elf_link_check_versioned_symbol (struct bfd_link_info *info, static bfd_boolean elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) { - struct elf_outext_info *eoinfo = data; + struct elf_outext_info *eoinfo = (struct elf_outext_info *) data; struct elf_final_link_info *finfo = eoinfo->finfo; bfd_boolean strip; Elf_Internal_Sym sym; asection *input_sec; const struct elf_backend_data *bed; + long indx; + int ret; if (h->root.type == bfd_link_hash_warning) { @@ -8656,6 +8598,8 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) sym.st_other = h->other; if (h->forced_local) sym.st_info = ELF_ST_INFO (STB_LOCAL, h->type); + else if (h->unique_global) + sym.st_info = ELF_ST_INFO (STB_GNU_UNIQUE, h->type); else if (h->root.type == bfd_link_hash_undefweak || h->root.type == bfd_link_hash_defweak) sym.st_info = ELF_ST_INFO (STB_WEAK, h->type); @@ -8703,10 +8647,15 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) sym.st_value += input_sec->output_section->vma; if (h->type == STT_TLS) { - /* STT_TLS symbols are relative to PT_TLS segment - base. */ - BFD_ASSERT (elf_hash_table (finfo->info)->tls_sec != NULL); - sym.st_value -= elf_hash_table (finfo->info)->tls_sec->vma; + asection *tls_sec = elf_hash_table (finfo->info)->tls_sec; + if (tls_sec != NULL) + sym.st_value -= tls_sec->vma; + else + { + /* The TLS section may have been garbage collected. */ + BFD_ASSERT (finfo->info->gc_sections + && !input_sec->gc_mark); + } } } } @@ -8739,14 +8688,18 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) /* Give the processor backend a chance to tweak the symbol value, and also to finish up anything that needs to be done for this symbol. FIXME: Not calling elf_backend_finish_dynamic_symbol for - forced local syms when non-shared is due to a historical quirk. */ - if ((h->dynindx != -1 - || h->forced_local) - && ((finfo->info->shared - && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT - || h->root.type != bfd_link_hash_undefweak)) - || !h->forced_local) - && elf_hash_table (finfo->info)->dynamic_sections_created) + forced local syms when non-shared is due to a historical quirk. + STT_GNU_IFUNC symbol must go through PLT. */ + if ((h->type == STT_GNU_IFUNC + && h->def_regular + && !finfo->info->relocatable) + || ((h->dynindx != -1 + || h->forced_local) + && ((finfo->info->shared + && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT + || h->root.type != bfd_link_hash_undefweak)) + || !h->forced_local) + && elf_hash_table (finfo->info)->dynamic_sections_created)) { if (! ((*bed->elf_backend_finish_dynamic_symbol) (finfo->output_bfd, finfo->info, h, &sym))) @@ -8768,14 +8721,28 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) || ELF_ST_BIND (sym.st_info) == STB_WEAK)) { int bindtype; + unsigned int type = ELF_ST_TYPE (sym.st_info); + + /* Turn an undefined IFUNC symbol into a normal FUNC symbol. */ + if (type == STT_GNU_IFUNC) + type = STT_FUNC; if (h->ref_regular_nonweak) bindtype = STB_GLOBAL; else bindtype = STB_WEAK; - sym.st_info = ELF_ST_INFO (bindtype, ELF_ST_TYPE (sym.st_info)); + sym.st_info = ELF_ST_INFO (bindtype, type); } + /* If this is a symbol defined in a dynamic library, don't use the + symbol size from the dynamic library. Relinking an executable + against a new library may introduce gratuitous changes in the + executable's symbols if we keep the size. */ + if (sym.st_shndx == SHN_UNDEF + && !h->def_regular + && h->def_dynamic) + sym.st_size = 0; + /* If a non-weak symbol with non-default visibility is not defined locally, it is a fatal error. */ if (! finfo->info->relocatable @@ -8871,13 +8838,17 @@ elf_link_output_extsym (struct elf_link_hash_entry *h, void *data) if (strip || (input_sec->flags & SEC_EXCLUDE) != 0) return TRUE; - h->indx = bfd_get_symcount (finfo->output_bfd); - - if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h)) + indx = bfd_get_symcount (finfo->output_bfd); + ret = elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec, h); + if (ret == 0) { eoinfo->failed = TRUE; return FALSE; } + else if (ret == 1) + h->indx = indx; + else if (h->indx == -2) + abort(); return TRUE; } @@ -8967,7 +8938,9 @@ _bfd_elf_check_kept_section (asection *sec, struct bfd_link_info *info) { if ((kept->flags & SEC_GROUP) != 0) kept = match_group_member (sec, kept, info); - if (kept != NULL && sec->size != kept->size) + if (kept != NULL + && ((sec->rawsize != 0 ? sec->rawsize : sec->size) + != (kept->rawsize != 0 ? kept->rawsize : kept->size))) kept = NULL; sec->kept_section = kept; } @@ -9031,15 +9004,6 @@ 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 @@ -9052,6 +9016,8 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) asection *isec; const char *name; Elf_Internal_Sym osym; + long indx; + int ret; *pindex = -1; @@ -9066,28 +9032,26 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) if (isym->st_shndx == SHN_UNDEF) isec = bfd_und_section_ptr; - else if (isym->st_shndx < SHN_LORESERVE - || isym->st_shndx > SHN_HIRESERVE) - { - isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx); - if (isec - && isec->sec_info_type == ELF_INFO_TYPE_MERGE - && ELF_ST_TYPE (isym->st_info) != STT_SECTION) - isym->st_value = - _bfd_merged_section_offset (output_bfd, &isec, - elf_section_data (isec)->sec_info, - isym->st_value); - } 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 { - /* Don't attempt to output symbols with st_shnx in the - reserved range other than SHN_ABS and SHN_COMMON. */ - *ppsection = NULL; - continue; + isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx); + if (isec == NULL) + { + /* Don't attempt to output symbols with st_shnx in the + reserved range other than SHN_ABS and SHN_COMMON. */ + *ppsection = NULL; + continue; + } + else if (isec->sec_info_type == ELF_INFO_TYPE_MERGE + && ELF_ST_TYPE (isym->st_info) != STT_SECTION) + isym->st_value = + _bfd_merged_section_offset (output_bfd, &isec, + elf_section_data (isec)->sec_info, + isym->st_value); } *ppsection = isec; @@ -9120,10 +9084,9 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) /* If this symbol is defined in a section which we are discarding, we don't need to keep it. */ if (isym->st_shndx != SHN_UNDEF - && (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) - && (isec == NULL - || bfd_section_removed_from_list (output_bfd, - isec->output_section))) + && isym->st_shndx < SHN_LORESERVE + && bfd_section_removed_from_list (output_bfd, + isec->output_section)) continue; /* Get the name of the symbol. */ @@ -9142,8 +9105,6 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) && bfd_is_local_label_name (input_bfd, name))) continue; - /* If we get here, we are going to output this symbol. */ - osym = *isym; /* Adjust the section index for the output file. */ @@ -9152,8 +9113,6 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) if (osym.st_shndx == SHN_BAD) return FALSE; - *pindex = bfd_get_symcount (output_bfd); - /* ELF symbols in relocatable files are section relative, but in executable files they are virtual addresses. Note that this code assumes that all ELF sections have an associated @@ -9173,13 +9132,14 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) } } - if (! elf_link_output_sym (finfo, name, &osym, isec, NULL)) + indx = bfd_get_symcount (output_bfd); + ret = elf_link_output_sym (finfo, name, &osym, isec, NULL); + if (ret == 0) return FALSE; + else if (ret == 1) + *pindex = indx; } - 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) @@ -9192,6 +9152,70 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) continue; } + if (finfo->info->relocatable + && (o->flags & (SEC_LINKER_CREATED | SEC_GROUP)) == SEC_GROUP) + { + /* Deal with the group signature symbol. */ + struct bfd_elf_section_data *sec_data = elf_section_data (o); + unsigned long symndx = sec_data->this_hdr.sh_info; + asection *osec = o->output_section; + + if (symndx >= locsymcount + || (elf_bad_symtab (input_bfd) + && finfo->sections[symndx] == NULL)) + { + struct elf_link_hash_entry *h = sym_hashes[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; + /* Arrange for symbol to be output. */ + h->indx = -2; + elf_section_data (osec)->this_hdr.sh_info = -2; + } + else if (ELF_ST_TYPE (isymbuf[symndx].st_info) == STT_SECTION) + { + /* We'll use the output section target_index. */ + asection *sec = finfo->sections[symndx]->output_section; + elf_section_data (osec)->this_hdr.sh_info = sec->target_index; + } + else + { + if (finfo->indices[symndx] == -1) + { + /* Otherwise output the local symbol now. */ + Elf_Internal_Sym sym = isymbuf[symndx]; + asection *sec = finfo->sections[symndx]->output_section; + const char *name; + long indx; + int ret; + + name = bfd_elf_string_from_elf_section (input_bfd, + symtab_hdr->sh_link, + sym.st_name); + if (name == NULL) + return FALSE; + + sym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd, + sec); + if (sym.st_shndx == SHN_BAD) + return FALSE; + + sym.st_value += o->output_offset; + + indx = bfd_get_symcount (output_bfd); + ret = elf_link_output_sym (finfo, name, &sym, o, NULL); + if (ret == 0) + return FALSE; + else if (ret == 1) + finfo->indices[symndx] = indx; + else + abort (); + } + elf_section_data (osec)->this_hdr.sh_info + = finfo->indices[symndx]; + } + } + if ((o->flags & SEC_HAS_CONTENTS) == 0 || (o->size == 0 && (o->flags & SEC_RELOC) == 0)) continue; @@ -9221,8 +9245,10 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) if ((o->flags & SEC_RELOC) != 0) { Elf_Internal_Rela *internal_relocs; + Elf_Internal_Rela *rel, *relend; bfd_vma r_type_mask; int r_sym_shift; + int action_discarded; int ret; /* Get the swapped relocs. */ @@ -9244,76 +9270,108 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) r_sym_shift = 32; } - /* Run through the relocs looking for any against symbols - from discarded sections and section symbols from - removed link-once sections. Complain about relocs - against discarded sections. Zero relocs against removed - link-once sections. */ + action_discarded = -1; if (!elf_section_ignore_discarded_relocs (o)) + action_discarded = (*bed->action_discarded) (o); + + /* Run through the relocs evaluating complex reloc symbols and + looking for relocs against symbols from discarded sections + or section symbols from removed link-once sections. + Complain about relocs against discarded sections. Zero + relocs against removed link-once sections. */ + + rel = internal_relocs; + relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel; + for ( ; rel < relend; rel++) { - Elf_Internal_Rela *rel, *relend; - unsigned int action = (*bed->action_discarded) (o); + unsigned long r_symndx = rel->r_info >> r_sym_shift; + unsigned int s_type; + asection **ps, *sec; + struct elf_link_hash_entry *h = NULL; + const char *sym_name; - rel = internal_relocs; - relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel; - for ( ; rel < relend; rel++) - { - unsigned long r_symndx = rel->r_info >> r_sym_shift; - asection **ps, *sec; - struct elf_link_hash_entry *h = NULL; - const char *sym_name; + if (r_symndx == STN_UNDEF) + continue; - if (r_symndx == STN_UNDEF) - continue; + if (r_symndx >= locsymcount + || (elf_bad_symtab (input_bfd) + && finfo->sections[r_symndx] == NULL)) + { + h = sym_hashes[r_symndx - extsymoff]; - if (r_symndx >= locsymcount - || (elf_bad_symtab (input_bfd) - && finfo->sections[r_symndx] == NULL)) + /* Badly formatted input files can contain relocs that + reference non-existant symbols. Check here so that + we do not seg fault. */ + if (h == NULL) { - h = sym_hashes[r_symndx - extsymoff]; + char buffer [32]; - /* Badly formatted input files can contain relocs that - reference non-existant symbols. Check here so that - we do not seg fault. */ - if (h == NULL) - { - char buffer [32]; + sprintf_vma (buffer, rel->r_info); + (*_bfd_error_handler) + (_("error: %B contains a reloc (0x%s) for section %A " + "that references a non-existent global symbol"), + input_bfd, o, buffer); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } - sprintf_vma (buffer, rel->r_info); - (*_bfd_error_handler) - (_("error: %B contains a reloc (0x%s) for section %A " - "that references a non-existent global symbol"), - input_bfd, o, buffer); - bfd_set_error (bfd_error_bad_value); - return 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; - 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; + s_type = h->type; - if (h->root.type != bfd_link_hash_defined - && h->root.type != bfd_link_hash_defweak) - continue; + ps = NULL; + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + ps = &h->root.u.def.section; - ps = &h->root.u.def.section; - sym_name = h->root.root.string; - } - else - { - Elf_Internal_Sym *sym = isymbuf + r_symndx; - ps = &finfo->sections[r_symndx]; - sym_name = bfd_elf_sym_name (input_bfd, - symtab_hdr, - sym, *ps); - } + sym_name = h->root.root.string; + } + else + { + Elf_Internal_Sym *sym = isymbuf + r_symndx; + + s_type = ELF_ST_TYPE (sym->st_info); + ps = &finfo->sections[r_symndx]; + sym_name = bfd_elf_sym_name (input_bfd, symtab_hdr, + sym, *ps); + } + + if ((s_type == STT_RELC || s_type == STT_SRELC) + && !finfo->info->relocatable) + { + bfd_vma val; + bfd_vma dot = (rel->r_offset + + o->output_offset + o->output_section->vma); +#ifdef DEBUG + printf ("Encountered a complex symbol!"); + printf (" (input_bfd %s, section %s, reloc %ld\n", + input_bfd->filename, o->name, rel - internal_relocs); + printf (" symbol: idx %8.8lx, name %s\n", + r_symndx, sym_name); + printf (" reloc : info %8.8lx, addr %8.8lx\n", + (unsigned long) rel->r_info, + (unsigned long) rel->r_offset); +#endif + if (!eval_symbol (&val, &sym_name, input_bfd, finfo, dot, + isymbuf, locsymcount, s_type == STT_SRELC)) + return FALSE; + + /* Symbol evaluated OK. Update to absolute value. */ + set_symbol_value (input_bfd, isymbuf, locsymcount, + r_symndx, val); + continue; + } + if (action_discarded != -1 && ps != NULL) + { /* Complain if the definition comes from a discarded section. */ if ((sec = *ps) != NULL && elf_discarded_section (sec)) { BFD_ASSERT (r_symndx != 0); - if (action & COMPLAIN) + if (action_discarded & COMPLAIN) (*finfo->info->callbacks->einfo) (_("%X`%s' referenced in section `%A' of %B: " "defined in discarded section `%A' of %B\n"), @@ -9325,7 +9383,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) FIXME: This is quite broken. Modifying the symbol here means we will be changing all later uses of the symbol, not just in this section. */ - if (action & PRETEND) + if (action_discarded & PRETEND) { asection *kept; @@ -9542,6 +9600,7 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) unsigned long shlink; const char *name; asection *osec; + long indx; if (finfo->info->strip == strip_all) { @@ -9581,12 +9640,15 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) } } - finfo->indices[r_symndx] - = bfd_get_symcount (output_bfd); - - if (! elf_link_output_sym (finfo, name, &sym, sec, - NULL)) + indx = bfd_get_symcount (output_bfd); + ret = elf_link_output_sym (finfo, name, &sym, sec, + NULL); + if (ret == 0) return FALSE; + else if (ret == 1) + finfo->indices[r_symndx] = indx; + else + abort (); } r_symndx = finfo->indices[r_symndx]; @@ -9649,7 +9711,9 @@ elf_link_input_bfd (struct elf_final_link_info *finfo, bfd *input_bfd) break; default: { + /* FIXME: octets_per_byte. */ if (! (o->flags & SEC_EXCLUDE) + && ! (o->output_section->flags & SEC_NEVER_LOAD) && ! bfd_set_section_contents (output_bfd, o->output_section, contents, (file_ptr) o->output_offset, @@ -9755,8 +9819,8 @@ elf_reloc_link_order (bfd *output_bfd, bfd_boolean ok; const char *sym_name; - size = bfd_get_reloc_size (howto); - buf = bfd_zmalloc (size); + size = (bfd_size_type) bfd_get_reloc_size (howto); + buf = (bfd_byte *) bfd_zmalloc (size); if (buf == NULL) return FALSE; rstat = _bfd_relocate_contents (howto, output_bfd, addend, buf); @@ -9916,7 +9980,8 @@ elf_fixup_link_order (bfd *abfd, asection *o) && elf_elfheader (sub)->e_ident[EI_CLASS] == bed->s->elfclass && (elfsec = _bfd_elf_section_from_bfd_section (sub, s)) && elfsec < elf_numsections (sub) - && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER) + && elf_elfsections (sub)[elfsec]->sh_flags & SHF_LINK_ORDER + && elf_elfsections (sub)[elfsec]->sh_link < elf_numsections (sub)) { seen_linkorder++; linkorder_sec = s; @@ -9949,7 +10014,9 @@ elf_fixup_link_order (bfd *abfd, asection *o) return TRUE; sections = (struct bfd_link_order **) - xmalloc (seen_linkorder * sizeof (struct bfd_link_order *)); + bfd_malloc (seen_linkorder * sizeof (struct bfd_link_order *)); + if (sections == NULL) + return FALSE; seen_linkorder = 0; for (p = o->map_head.link_order; p != NULL; p = p->next) @@ -9965,12 +10032,14 @@ elf_fixup_link_order (bfd *abfd, asection *o) for (n = 0; n < seen_linkorder; n++) { s = sections[n]->u.indirect.section; - offset &= (bfd_vma)~((1L << s->alignment_power) - 1L); + offset &= ~(bfd_vma) 0 << s->alignment_power; s->output_offset = offset; sections[n]->offset = offset; + /* FIXME: octets_per_byte. */ offset += sections[n]->size; } + free (sections); return TRUE; } @@ -10074,7 +10143,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) elf_link_input_bfd ignores this section. */ input_section->flags &= ~SEC_HAS_CONTENTS; } - + attr_size = bfd_elf_obj_attr_size (abfd); if (attr_size) { @@ -10130,22 +10199,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (info->relocatable || info->emitrelocations) reloc_count = sec->reloc_count; else if (bed->elf_backend_count_relocs) - { - Elf_Internal_Rela * relocs; - - relocs = _bfd_elf_link_read_relocs (sec->owner, sec, - NULL, NULL, - info->keep_memory); - - if (relocs != NULL) - { - reloc_count - = (*bed->elf_backend_count_relocs) (sec, relocs); - - if (elf_section_data (sec)->relocs != relocs) - free (relocs); - } - } + reloc_count = (*bed->elf_backend_count_relocs) (info, sec); if (sec->rawsize > max_contents_size) max_contents_size = sec->rawsize; @@ -10203,8 +10257,13 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) bfd_size_type entsize1; entsize1 = esdi->rel_hdr.sh_entsize; - BFD_ASSERT (entsize1 == bed->s->sizeof_rel - || entsize1 == bed->s->sizeof_rela); + /* PR 9827: If the header size has not been set yet then + assume that it will match the output section's reloc type. */ + if (entsize1 == 0) + entsize1 = o->use_rela_p ? bed->s->sizeof_rela : bed->s->sizeof_rel; + else + BFD_ASSERT (entsize1 == bed->s->sizeof_rel + || entsize1 == bed->s->sizeof_rela); same_size = !o->use_rela_p == (entsize1 == bed->s->sizeof_rel); if (!same_size) @@ -10302,7 +10361,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) /* sh_link is set in assign_section_numbers. */ /* sh_info is set below. */ /* sh_offset is set just below. */ - symtab_hdr->sh_addralign = 1 << bed->s->log_file_align; + symtab_hdr->sh_addralign = (bfd_vma) 1 << bed->s->log_file_align; off = elf_tdata (abfd)->next_file_pos; off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, TRUE); @@ -10319,16 +10378,16 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) finfo.symbuf_size = max_sym_count; amt = finfo.symbuf_size; amt *= bed->s->sizeof_sym; - finfo.symbuf = bfd_malloc (amt); + finfo.symbuf = (bfd_byte *) bfd_malloc (amt); if (finfo.symbuf == NULL) goto error_return; - if (elf_numsections (abfd) > SHN_LORESERVE) + if (elf_numsections (abfd) > (SHN_LORESERVE & 0xFFFF)) { /* Wild guess at number of output symbols. realloc'd as needed. */ amt = 2 * max_sym_count + elf_numsections (abfd) + 1000; finfo.shndxbuf_size = amt; amt *= sizeof (Elf_External_Sym_Shndx); - finfo.symshndxbuf = bfd_zmalloc (amt); + finfo.symshndxbuf = (Elf_External_Sym_Shndx *) bfd_zmalloc (amt); if (finfo.symshndxbuf == NULL) goto error_return; } @@ -10343,8 +10402,8 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) elfsym.st_info = 0; elfsym.st_other = 0; elfsym.st_shndx = SHN_UNDEF; - if (! elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr, - NULL)) + if (elf_link_output_sym (&finfo, NULL, &elfsym, bfd_und_section_ptr, + NULL) != 1) goto error_return; } @@ -10369,11 +10428,9 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) elfsym.st_shndx = i; if (!info->relocatable) elfsym.st_value = o->vma; - if (!elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL)) + if (elf_link_output_sym (&finfo, NULL, &elfsym, o, NULL) != 1) goto error_return; } - if (i == SHN_LORESERVE - 1) - i += SHN_HIRESERVE + 1 - SHN_LORESERVE; } } @@ -10381,7 +10438,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) files. */ if (max_contents_size != 0) { - finfo.contents = bfd_malloc (max_contents_size); + finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size); if (finfo.contents == NULL) goto error_return; } @@ -10397,7 +10454,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) { amt = max_internal_reloc_count * bed->s->int_rels_per_ext_rel; amt *= sizeof (Elf_Internal_Rela); - finfo.internal_relocs = bfd_malloc (amt); + finfo.internal_relocs = (Elf_Internal_Rela *) bfd_malloc (amt); if (finfo.internal_relocs == NULL) goto error_return; } @@ -10405,22 +10462,22 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (max_sym_count != 0) { amt = max_sym_count * bed->s->sizeof_sym; - finfo.external_syms = bfd_malloc (amt); + finfo.external_syms = (bfd_byte *) bfd_malloc (amt); if (finfo.external_syms == NULL) goto error_return; amt = max_sym_count * sizeof (Elf_Internal_Sym); - finfo.internal_syms = bfd_malloc (amt); + finfo.internal_syms = (Elf_Internal_Sym *) bfd_malloc (amt); if (finfo.internal_syms == NULL) goto error_return; amt = max_sym_count * sizeof (long); - finfo.indices = bfd_malloc (amt); + finfo.indices = (long int *) bfd_malloc (amt); if (finfo.indices == NULL) goto error_return; amt = max_sym_count * sizeof (asection *); - finfo.sections = bfd_malloc (amt); + finfo.sections = (asection **) bfd_malloc (amt); if (finfo.sections == NULL) goto error_return; } @@ -10428,7 +10485,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (max_sym_shndx_count != 0) { amt = max_sym_shndx_count * sizeof (Elf_External_Sym_Shndx); - finfo.locsym_shndx = bfd_malloc (amt); + finfo.locsym_shndx = (Elf_External_Sym_Shndx *) bfd_malloc (amt); if (finfo.locsym_shndx == NULL) goto error_return; } @@ -10547,7 +10604,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) table, do it now. */ if (bed->elf_backend_output_arch_local_syms) { - typedef bfd_boolean (*out_sym_func) + typedef int (*out_sym_func) (void *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); @@ -10620,13 +10677,10 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) the original st_name with the dynstr_index. */ sym = e->isym; - if (e->isym.st_shndx != SHN_UNDEF - && (e->isym.st_shndx < SHN_LORESERVE - || e->isym.st_shndx > SHN_HIRESERVE)) + s = bfd_section_from_elf_index (e->input_bfd, + e->isym.st_shndx); + if (s != NULL) { - s = bfd_section_from_elf_index (e->input_bfd, - e->isym.st_shndx); - sym.st_shndx = elf_section_data (s->output_section)->this_idx; if (! check_dynsym (abfd, &sym)) @@ -10661,7 +10715,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) table, do it now. */ if (bed->elf_backend_output_arch_syms) { - typedef bfd_boolean (*out_sym_func) + typedef int (*out_sym_func) (void *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); @@ -10796,16 +10850,16 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) && (h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak)) { - dyn.d_un.d_val = h->root.u.def.value; + dyn.d_un.d_ptr = h->root.u.def.value; o = h->root.u.def.section; if (o->output_section != NULL) - dyn.d_un.d_val += (o->output_section->vma + dyn.d_un.d_ptr += (o->output_section->vma + o->output_offset); else { /* The symbol is imported from another shared library and does not apply to this one. */ - dyn.d_un.d_val = 0; + dyn.d_un.d_ptr = 0; } break; } @@ -10884,6 +10938,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) else type = SHT_RELA; dyn.d_un.d_val = 0; + dyn.d_un.d_ptr = 0; for (i = 1; i < elf_numsections (abfd); i++) { Elf_Internal_Shdr *hdr; @@ -10896,9 +10951,9 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) dyn.d_un.d_val += hdr->sh_size; else { - if (dyn.d_un.d_val == 0 - || hdr->sh_addr < dyn.d_un.d_val) - dyn.d_un.d_val = hdr->sh_addr; + if (dyn.d_un.d_ptr == 0 + || hdr->sh_addr < dyn.d_un.d_ptr) + dyn.d_un.d_ptr = hdr->sh_addr; } } } @@ -10933,7 +10988,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (dyn.d_tag == DT_TEXTREL) { - info->callbacks->einfo + info->callbacks->einfo (_("%P: warning: creating a DT_TEXTREL in a shared object.\n")); break; } @@ -10960,6 +11015,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) != SHT_STRTAB) || strcmp (bfd_get_section_name (abfd, o), ".dynstr") != 0) { + /* FIXME: octets_per_byte. */ if (! bfd_set_section_contents (abfd, o->output_section, o->contents, (file_ptr) o->output_offset, @@ -11034,7 +11090,7 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) if (attr_section) { - bfd_byte *contents = bfd_malloc (attr_size); + bfd_byte *contents = (bfd_byte *) bfd_malloc (attr_size); if (contents == NULL) return FALSE; /* Bail out and fail. */ bfd_elf_set_obj_attr_contents (abfd, contents, attr_size); @@ -11077,6 +11133,139 @@ bfd_elf_final_link (bfd *abfd, struct bfd_link_info *info) return FALSE; } +/* Initialize COOKIE for input bfd ABFD. */ + +static bfd_boolean +init_reloc_cookie (struct elf_reloc_cookie *cookie, + struct bfd_link_info *info, bfd *abfd) +{ + Elf_Internal_Shdr *symtab_hdr; + const struct elf_backend_data *bed; + + bed = get_elf_backend_data (abfd); + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + + cookie->abfd = abfd; + cookie->sym_hashes = elf_sym_hashes (abfd); + cookie->bad_symtab = elf_bad_symtab (abfd); + if (cookie->bad_symtab) + { + cookie->locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; + cookie->extsymoff = 0; + } + else + { + cookie->locsymcount = symtab_hdr->sh_info; + cookie->extsymoff = symtab_hdr->sh_info; + } + + if (bed->s->arch_size == 32) + cookie->r_sym_shift = 8; + else + cookie->r_sym_shift = 32; + + cookie->locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; + if (cookie->locsyms == NULL && cookie->locsymcount != 0) + { + cookie->locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr, + cookie->locsymcount, 0, + NULL, NULL, NULL); + if (cookie->locsyms == NULL) + { + info->callbacks->einfo (_("%P%X: can not read symbols: %E\n")); + return FALSE; + } + if (info->keep_memory) + symtab_hdr->contents = (bfd_byte *) cookie->locsyms; + } + return TRUE; +} + +/* Free the memory allocated by init_reloc_cookie, if appropriate. */ + +static void +fini_reloc_cookie (struct elf_reloc_cookie *cookie, bfd *abfd) +{ + Elf_Internal_Shdr *symtab_hdr; + + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + if (cookie->locsyms != NULL + && symtab_hdr->contents != (unsigned char *) cookie->locsyms) + free (cookie->locsyms); +} + +/* Initialize the relocation information in COOKIE for input section SEC + of input bfd ABFD. */ + +static bfd_boolean +init_reloc_cookie_rels (struct elf_reloc_cookie *cookie, + struct bfd_link_info *info, bfd *abfd, + asection *sec) +{ + const struct elf_backend_data *bed; + + if (sec->reloc_count == 0) + { + cookie->rels = NULL; + cookie->relend = NULL; + } + else + { + bed = get_elf_backend_data (abfd); + + cookie->rels = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL, + info->keep_memory); + if (cookie->rels == NULL) + return FALSE; + cookie->rel = cookie->rels; + cookie->relend = (cookie->rels + + sec->reloc_count * bed->s->int_rels_per_ext_rel); + } + cookie->rel = cookie->rels; + return TRUE; +} + +/* Free the memory allocated by init_reloc_cookie_rels, + if appropriate. */ + +static void +fini_reloc_cookie_rels (struct elf_reloc_cookie *cookie, + asection *sec) +{ + if (cookie->rels && elf_section_data (sec)->relocs != cookie->rels) + free (cookie->rels); +} + +/* Initialize the whole of COOKIE for input section SEC. */ + +static bfd_boolean +init_reloc_cookie_for_section (struct elf_reloc_cookie *cookie, + struct bfd_link_info *info, + asection *sec) +{ + if (!init_reloc_cookie (cookie, info, sec->owner)) + goto error1; + if (!init_reloc_cookie_rels (cookie, info, sec->owner, sec)) + goto error2; + return TRUE; + + error2: + fini_reloc_cookie (cookie, sec->owner); + error1: + return FALSE; +} + +/* Free the memory allocated by init_reloc_cookie_for_section, + if appropriate. */ + +static void +fini_reloc_cookie_for_section (struct elf_reloc_cookie *cookie, + asection *sec) +{ + fini_reloc_cookie_rels (cookie, sec); + fini_reloc_cookie (cookie, sec->owner); +} + /* Garbage collect unused sections. */ /* Default gc_mark_hook. */ @@ -11109,6 +11298,59 @@ _bfd_elf_gc_mark_hook (asection *sec, return NULL; } +/* COOKIE->rel describes a relocation against section SEC, which is + a section we've decided to keep. Return the section that contains + the relocation symbol, or NULL if no section contains it. */ + +asection * +_bfd_elf_gc_mark_rsec (struct bfd_link_info *info, asection *sec, + elf_gc_mark_hook_fn gc_mark_hook, + struct elf_reloc_cookie *cookie) +{ + unsigned long r_symndx; + struct elf_link_hash_entry *h; + + r_symndx = cookie->rel->r_info >> cookie->r_sym_shift; + if (r_symndx == 0) + return NULL; + + if (r_symndx >= cookie->locsymcount + || ELF_ST_BIND (cookie->locsyms[r_symndx].st_info) != STB_LOCAL) + { + h = cookie->sym_hashes[r_symndx - cookie->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; + return (*gc_mark_hook) (sec, info, cookie->rel, h, NULL); + } + + return (*gc_mark_hook) (sec, info, cookie->rel, NULL, + &cookie->locsyms[r_symndx]); +} + +/* COOKIE->rel describes a relocation against section SEC, which is + a section we've decided to keep. Mark the section that contains + the relocation symbol. */ + +bfd_boolean +_bfd_elf_gc_mark_reloc (struct bfd_link_info *info, + asection *sec, + elf_gc_mark_hook_fn gc_mark_hook, + struct elf_reloc_cookie *cookie) +{ + asection *rsec; + + rsec = _bfd_elf_gc_mark_rsec (info, sec, gc_mark_hook, cookie); + if (rsec && !rsec->gc_mark) + { + if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour) + rsec->gc_mark = 1; + else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook)) + return FALSE; + } + return TRUE; +} + /* 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. */ @@ -11119,8 +11361,7 @@ _bfd_elf_gc_mark (struct bfd_link_info *info, elf_gc_mark_hook_fn gc_mark_hook) { bfd_boolean ret; - bfd_boolean is_eh; - asection *group_sec; + asection *group_sec, *eh_frame; sec->gc_mark = 1; @@ -11132,103 +11373,39 @@ _bfd_elf_gc_mark (struct bfd_link_info *info, /* Look through the section relocs. */ ret = TRUE; - is_eh = strcmp (sec->name, ".eh_frame") == 0; - if ((sec->flags & SEC_RELOC) != 0 && sec->reloc_count > 0) + eh_frame = elf_eh_frame_section (sec->owner); + if ((sec->flags & SEC_RELOC) != 0 + && sec->reloc_count > 0 + && sec != eh_frame) { - Elf_Internal_Rela *relstart, *rel, *relend; - Elf_Internal_Shdr *symtab_hdr; - struct elf_link_hash_entry **sym_hashes; - size_t nlocsyms; - size_t extsymoff; - bfd *input_bfd = sec->owner; - const struct elf_backend_data *bed = get_elf_backend_data (input_bfd); - Elf_Internal_Sym *isym = NULL; - int r_sym_shift; - - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; - sym_hashes = elf_sym_hashes (input_bfd); - - /* Read the local symbols. */ - if (elf_bad_symtab (input_bfd)) - { - nlocsyms = symtab_hdr->sh_size / bed->s->sizeof_sym; - extsymoff = 0; - } - else - extsymoff = nlocsyms = symtab_hdr->sh_info; + struct elf_reloc_cookie cookie; - isym = (Elf_Internal_Sym *) symtab_hdr->contents; - if (isym == NULL && nlocsyms != 0) + if (!init_reloc_cookie_for_section (&cookie, info, sec)) + ret = FALSE; + else { - isym = bfd_elf_get_elf_syms (input_bfd, symtab_hdr, nlocsyms, 0, - NULL, NULL, NULL); - if (isym == NULL) - return FALSE; + for (; cookie.rel < cookie.relend; cookie.rel++) + if (!_bfd_elf_gc_mark_reloc (info, sec, gc_mark_hook, &cookie)) + { + ret = FALSE; + break; + } + fini_reloc_cookie_for_section (&cookie, sec); } + } - /* Read the relocations. */ - relstart = _bfd_elf_link_read_relocs (input_bfd, sec, NULL, NULL, - info->keep_memory); - if (relstart == NULL) - { - ret = FALSE; - goto out1; - } - relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel; + if (ret && eh_frame && elf_fde_list (sec)) + { + struct elf_reloc_cookie cookie; - if (bed->s->arch_size == 32) - r_sym_shift = 8; + if (!init_reloc_cookie_for_section (&cookie, info, eh_frame)) + ret = FALSE; else - r_sym_shift = 32; - - for (rel = relstart; rel < relend; rel++) { - unsigned long r_symndx; - asection *rsec; - struct elf_link_hash_entry *h; - - r_symndx = rel->r_info >> r_sym_shift; - if (r_symndx == 0) - continue; - - if (r_symndx >= nlocsyms - || ELF_ST_BIND (isym[r_symndx].st_info) != STB_LOCAL) - { - h = sym_hashes[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; - rsec = (*gc_mark_hook) (sec, info, rel, h, NULL); - } - else - { - rsec = (*gc_mark_hook) (sec, info, rel, NULL, &isym[r_symndx]); - } - - if (rsec && !rsec->gc_mark) - { - if (bfd_get_flavour (rsec->owner) != bfd_target_elf_flavour) - rsec->gc_mark = 1; - else if (is_eh) - rsec->gc_mark_from_eh = 1; - else if (!_bfd_elf_gc_mark (info, rsec, gc_mark_hook)) - { - ret = FALSE; - goto out2; - } - } - } - - out2: - if (elf_section_data (sec)->relocs != relstart) - free (relstart); - out1: - if (isym != NULL && symtab_hdr->contents != (unsigned char *) isym) - { - if (! info->keep_memory) - free (isym); - else - symtab_hdr->contents = (unsigned char *) isym; + if (!_bfd_elf_gc_mark_fdes (info, sec, eh_frame, + gc_mark_hook, &cookie)) + ret = FALSE; + fini_reloc_cookie_for_section (&cookie, eh_frame); } } @@ -11255,7 +11432,8 @@ elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data) && !h->root.u.def.section->gc_mark && !(h->root.u.def.section->owner->flags & DYNAMIC)) { - struct elf_gc_sweep_symbol_info *inf = data; + struct elf_gc_sweep_symbol_info *inf = + (struct elf_gc_sweep_symbol_info *) data; (*inf->hide_symbol) (inf->info, h, TRUE); } @@ -11285,10 +11463,21 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info) for (o = sub->sections; o != NULL; o = o->next) { - /* Keep debug and special sections. */ - if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0 - || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0) - o->gc_mark = 1; + /* When any section in a section group is kept, we keep all + sections in the section group. If the first member of + the section group is excluded, we will also exclude the + group section. */ + if (o->flags & SEC_GROUP) + { + asection *first = elf_next_in_group (o); + o->gc_mark = first->gc_mark; + } + else if ((o->flags & (SEC_DEBUGGING | SEC_LINKER_CREATED)) != 0 + || (o->flags & (SEC_ALLOC | SEC_LOAD | SEC_RELOC)) == 0) + { + /* Keep debug and special sections. */ + o->gc_mark = 1; + } if (o->gc_mark) continue; @@ -11478,6 +11667,29 @@ bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf) return TRUE; } +/* Keep all sections containing symbols undefined on the command-line, + and the section containing the entry symbol. */ + +void +_bfd_elf_gc_keep (struct bfd_link_info *info) +{ + struct bfd_sym_chain *sym; + + for (sym = info->gc_sym_list; sym != NULL; sym = sym->next) + { + struct elf_link_hash_entry *h; + + h = elf_link_hash_lookup (elf_hash_table (info), sym->name, + FALSE, FALSE, FALSE); + + if (h != NULL + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && !bfd_is_abs_section (h->root.u.def.section)) + h->root.u.def.section->flags |= SEC_KEEP; + } +} + /* Do mark and sweep of unused sections. */ bfd_boolean @@ -11489,14 +11701,33 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info) const struct elf_backend_data *bed = get_elf_backend_data (abfd); if (!bed->can_gc_sections - || info->relocatable - || info->emitrelocations || !is_elf_hash_table (info->hash)) { (*_bfd_error_handler)(_("Warning: gc-sections option ignored")); return TRUE; } + bed->gc_keep (info); + + /* Try to parse each bfd's .eh_frame section. Point elf_eh_frame_section + at the .eh_frame section if we can mark the FDEs individually. */ + _bfd_elf_begin_eh_frame_parsing (info); + for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) + { + asection *sec; + struct elf_reloc_cookie cookie; + + sec = bfd_get_section_by_name (sub, ".eh_frame"); + if (sec && init_reloc_cookie_for_section (&cookie, info, sec)) + { + _bfd_elf_parse_eh_frame (sub, info, sec, &cookie); + if (elf_section_data (sec)->sec_info) + elf_eh_frame_section (sub) = sec; + fini_reloc_cookie_for_section (&cookie, sec); + } + } + _bfd_elf_end_eh_frame_parsing (info); + /* Apply transitive closure to the vtable entry usage info. */ elf_link_hash_traverse (elf_hash_table (info), elf_gc_propagate_vtable_entries_used, @@ -11534,69 +11765,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info) /* 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) - { - asection *o; - - if (bfd_get_flavour (sub) != bfd_target_elf_flavour) - continue; - - /* Keep .gcc_except_table.* if the associated .text.* (or the - associated .gnu.linkonce.t.* if .text.* doesn't exist) is - marked. This isn't very nice, but the proper solution, - splitting .eh_frame up and using comdat doesn't pan out - 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 (CONST_STRNEQ (o->name, GCC_EXCEPT_TABLE_PREFIX)) - { - char *fn_name; - const char *sec_name; - asection *fn_text; - 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. */ - 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) - { - sprintf (fn_name, "%s%s", TEXT_PREFIX2, sec_name); - fn_text = bfd_get_section_by_name (sub, fn_name); - } - - free (fn_name); - if (fn_text == NULL || !fn_text->gc_mark) - continue; - } - - /* If not using specially named exception table section, - then keep whatever we are using. */ - if (!_bfd_elf_gc_mark (info, o, gc_mark_hook)) - return FALSE; - } - } + bed->gc_mark_extra_sections (info, gc_mark_hook); /* ... and mark SEC_EXCLUDE for those that go. */ return elf_gc_sweep (abfd, info); @@ -11645,7 +11814,8 @@ bfd_elf_gc_record_vtinherit (bfd *abfd, win: if (!child->vtable) { - child->vtable = bfd_zalloc (abfd, sizeof (*child->vtable)); + child->vtable = (struct elf_link_virtual_table_entry *) + bfd_zalloc (abfd, sizeof (*child->vtable)); if (!child->vtable) return FALSE; } @@ -11677,7 +11847,8 @@ bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED, if (!h->vtable) { - h->vtable = bfd_zalloc (abfd, sizeof (*h->vtable)); + h->vtable = (struct elf_link_virtual_table_entry *) + bfd_zalloc (abfd, sizeof (*h->vtable)); if (!h->vtable) return FALSE; } @@ -11710,7 +11881,7 @@ bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED, if (ptr) { - ptr = bfd_realloc (ptr - 1, bytes); + ptr = (bfd_boolean *) bfd_realloc (ptr - 1, bytes); if (ptr != NULL) { @@ -11722,7 +11893,7 @@ bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED, } } else - ptr = bfd_zmalloc (bytes); + ptr = (bfd_boolean *) bfd_zmalloc (bytes); if (ptr == NULL) return FALSE; @@ -11739,7 +11910,7 @@ bfd_elf_gc_record_vtentry (bfd *abfd ATTRIBUTE_UNUSED, struct alloc_got_off_arg { bfd_vma gotoff; - unsigned int got_elt_size; + struct bfd_link_info *info; }; /* We need a special top-level link routine to convert got reference counts @@ -11748,7 +11919,9 @@ struct alloc_got_off_arg { static bfd_boolean elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg) { - struct alloc_got_off_arg *gofarg = arg; + struct alloc_got_off_arg *gofarg = (struct alloc_got_off_arg *) arg; + bfd *obfd = gofarg->info->output_bfd; + const struct elf_backend_data *bed = get_elf_backend_data (obfd); if (h->root.type == bfd_link_hash_warning) h = (struct elf_link_hash_entry *) h->root.u.i.link; @@ -11756,7 +11929,7 @@ elf_gc_allocate_got_offsets (struct elf_link_hash_entry *h, void *arg) if (h->got.refcount > 0) { h->got.offset = gofarg->gotoff; - gofarg->gotoff += gofarg->got_elt_size; + gofarg->gotoff += bed->got_elt_size (obfd, gofarg->info, h, NULL, 0); } else h->got.offset = (bfd_vma) -1; @@ -11774,9 +11947,10 @@ bfd_elf_gc_common_finalize_got_offsets (bfd *abfd, bfd *i; const struct elf_backend_data *bed = get_elf_backend_data (abfd); bfd_vma gotoff; - unsigned int got_elt_size = bed->s->arch_size / 8; struct alloc_got_off_arg gofarg; + BFD_ASSERT (abfd == info->output_bfd); + if (! is_elf_hash_table (info->hash)) return FALSE; @@ -11812,7 +11986,7 @@ bfd_elf_gc_common_finalize_got_offsets (bfd *abfd, if (local_got[j] > 0) { local_got[j] = gotoff; - gotoff += got_elt_size; + gotoff += bed->got_elt_size (abfd, info, NULL, i, j); } else local_got[j] = (bfd_vma) -1; @@ -11822,7 +11996,7 @@ bfd_elf_gc_common_finalize_got_offsets (bfd *abfd, /* Then the global .got entries. .plt refcounts are handled by adjust_dynamic_symbol */ gofarg.gotoff = gotoff; - gofarg.got_elt_size = got_elt_size; + gofarg.info = info; elf_link_hash_traverse (elf_hash_table (info), elf_gc_allocate_got_offsets, &gofarg); @@ -11845,7 +12019,7 @@ bfd_elf_gc_common_final_link (bfd *abfd, struct bfd_link_info *info) bfd_boolean bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie) { - struct elf_reloc_cookie *rcookie = cookie; + struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *) cookie; if (rcookie->bad_symtab) rcookie->rel = rcookie->rels; @@ -11892,12 +12066,9 @@ bfd_elf_reloc_symbol_deleted_p (bfd_vma offset, void *cookie) /* Need to: get the symbol; get the section. */ isym = &rcookie->locsyms[r_symndx]; - if (isym->st_shndx < SHN_LORESERVE || isym->st_shndx > SHN_HIRESERVE) - { - isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx); - if (isec != NULL && elf_discarded_section (isec)) - return TRUE; - } + isec = bfd_section_from_elf_index (rcookie->abfd, isym->st_shndx); + if (isec != NULL && elf_discarded_section (isec)) + return TRUE; } return FALSE; } @@ -11914,16 +12085,15 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info) { struct elf_reloc_cookie cookie; asection *stab, *eh; - Elf_Internal_Shdr *symtab_hdr; const struct elf_backend_data *bed; bfd *abfd; - unsigned int count; bfd_boolean ret = FALSE; if (info->traditional_format || !is_elf_hash_table (info->hash)) return FALSE; + _bfd_elf_begin_eh_frame_parsing (info); for (abfd = info->input_bfds; abfd != NULL; abfd = abfd->link_next) { if (bfd_get_flavour (abfd) != bfd_target_elf_flavour) @@ -11956,96 +12126,39 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info) && bed->elf_backend_discard_info == NULL) continue; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - cookie.abfd = abfd; - cookie.sym_hashes = elf_sym_hashes (abfd); - cookie.bad_symtab = elf_bad_symtab (abfd); - if (cookie.bad_symtab) - { - cookie.locsymcount = symtab_hdr->sh_size / bed->s->sizeof_sym; - cookie.extsymoff = 0; - } - else - { - cookie.locsymcount = symtab_hdr->sh_info; - cookie.extsymoff = symtab_hdr->sh_info; - } - - if (bed->s->arch_size == 32) - cookie.r_sym_shift = 8; - else - cookie.r_sym_shift = 32; - - cookie.locsyms = (Elf_Internal_Sym *) symtab_hdr->contents; - if (cookie.locsyms == NULL && cookie.locsymcount != 0) - { - cookie.locsyms = bfd_elf_get_elf_syms (abfd, symtab_hdr, - cookie.locsymcount, 0, - NULL, NULL, NULL); - if (cookie.locsyms == NULL) - { - info->callbacks->einfo (_("%P%X: can not read symbols: %E\n")); - return FALSE; - } - } + if (!init_reloc_cookie (&cookie, info, abfd)) + return FALSE; - if (stab != NULL) + if (stab != NULL + && stab->reloc_count > 0 + && init_reloc_cookie_rels (&cookie, info, abfd, stab)) { - cookie.rels = NULL; - count = stab->reloc_count; - if (count != 0) - cookie.rels = _bfd_elf_link_read_relocs (abfd, stab, NULL, NULL, - info->keep_memory); - if (cookie.rels != NULL) - { - cookie.rel = cookie.rels; - cookie.relend = cookie.rels; - cookie.relend += count * bed->s->int_rels_per_ext_rel; - if (_bfd_discard_section_stabs (abfd, stab, - elf_section_data (stab)->sec_info, - bfd_elf_reloc_symbol_deleted_p, - &cookie)) - ret = TRUE; - if (elf_section_data (stab)->relocs != cookie.rels) - free (cookie.rels); - } + if (_bfd_discard_section_stabs (abfd, stab, + elf_section_data (stab)->sec_info, + bfd_elf_reloc_symbol_deleted_p, + &cookie)) + ret = TRUE; + fini_reloc_cookie_rels (&cookie, stab); } - if (eh != NULL) + if (eh != NULL + && init_reloc_cookie_rels (&cookie, info, abfd, eh)) { - cookie.rels = NULL; - count = eh->reloc_count; - if (count != 0) - cookie.rels = _bfd_elf_link_read_relocs (abfd, eh, NULL, NULL, - info->keep_memory); - cookie.rel = cookie.rels; - cookie.relend = cookie.rels; - if (cookie.rels != NULL) - cookie.relend += count * bed->s->int_rels_per_ext_rel; - + _bfd_elf_parse_eh_frame (abfd, info, eh, &cookie); if (_bfd_elf_discard_section_eh_frame (abfd, info, eh, bfd_elf_reloc_symbol_deleted_p, &cookie)) ret = TRUE; - - if (cookie.rels != NULL - && elf_section_data (eh)->relocs != cookie.rels) - free (cookie.rels); + fini_reloc_cookie_rels (&cookie, eh); } if (bed->elf_backend_discard_info != NULL && (*bed->elf_backend_discard_info) (abfd, &cookie, info)) ret = TRUE; - if (cookie.locsyms != NULL - && symtab_hdr->contents != (unsigned char *) cookie.locsyms) - { - if (! info->keep_memory) - free (cookie.locsyms); - else - symtab_hdr->contents = (unsigned char *) cookie.locsyms; - } + fini_reloc_cookie (&cookie, abfd); } + _bfd_elf_end_eh_frame_parsing (info); if (info->eh_frame_hdr && !info->relocatable @@ -12055,8 +12168,21 @@ bfd_elf_discard_info (bfd *output_bfd, struct bfd_link_info *info) return ret; } +/* For a SHT_GROUP section, return the group signature. For other + sections, return the normal section name. */ + +static const char * +section_signature (asection *sec) +{ + if ((sec->flags & SEC_GROUP) != 0 + && elf_next_in_group (sec) != NULL + && elf_group_name (elf_next_in_group (sec)) != NULL) + return elf_group_name (elf_next_in_group (sec)); + return sec->name; +} + void -_bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec, +_bfd_elf_section_already_linked (bfd *abfd, asection *sec, struct bfd_link_info *info) { flagword flags; @@ -12096,7 +12222,7 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec, causes trouble for MIPS ELF, which relies on link once semantics to handle the .reginfo section correctly. */ - name = bfd_get_section_name (abfd, sec); + name = section_signature (sec); if (CONST_STRNEQ (name, ".gnu.linkonce.") && (p = strchr (name + sizeof (".gnu.linkonce.") - 1, '.')) != NULL) @@ -12111,7 +12237,7 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec, /* 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 + && strcmp (name, section_signature (l->sec)) == 0 && bfd_coff_get_comdat_section (l->sec->owner, l->sec) == NULL) { /* The section has already been linked. See if we should @@ -12234,9 +12360,31 @@ _bfd_elf_section_already_linked (bfd *abfd, struct bfd_section *sec, } } + /* Do not complain on unresolved relocations in `.gnu.linkonce.r.F' + referencing its discarded `.gnu.linkonce.t.F' counterpart - g++-3.4 + specific as g++-4.x is using COMDAT groups (without the `.gnu.linkonce' + prefix) instead. `.gnu.linkonce.r.*' were the `.rodata' part of its + matching `.gnu.linkonce.t.*'. If `.gnu.linkonce.r.F' is not discarded + but its `.gnu.linkonce.t.F' is discarded means we chose one-only + `.gnu.linkonce.t.F' section from a different bfd not requiring any + `.gnu.linkonce.r.F'. Thus `.gnu.linkonce.r.F' should be discarded. + The reverse order cannot happen as there is never a bfd with only the + `.gnu.linkonce.r.F' section. The order of sections in a bfd does not + matter as here were are looking only for cross-bfd sections. */ + + if ((flags & SEC_GROUP) == 0 && CONST_STRNEQ (name, ".gnu.linkonce.r.")) + for (l = already_linked_list->entry; l != NULL; l = l->next) + if ((l->sec->flags & SEC_GROUP) == 0 + && CONST_STRNEQ (l->sec->name, ".gnu.linkonce.t.")) + { + if (abfd != l->sec->owner) + sec->output_section = bfd_abs_section_ptr; + break; + } + /* This is the first section with this name. Record it. */ if (! bfd_section_already_linked_table_insert (already_linked_list, sec)) - info->callbacks->einfo (_("%F%P: already_linked_table: %E")); + info->callbacks->einfo (_("%F%P: already_linked_table: %E\n")); } bfd_boolean @@ -12256,3 +12404,139 @@ _bfd_elf_common_section (asection *sec ATTRIBUTE_UNUSED) { return bfd_com_section_ptr; } + +bfd_vma +_bfd_elf_default_got_elt_size (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf_link_hash_entry *h ATTRIBUTE_UNUSED, + bfd *ibfd ATTRIBUTE_UNUSED, + unsigned long symndx ATTRIBUTE_UNUSED) +{ + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + return bed->s->arch_size / 8; +} + +/* Routines to support the creation of dynamic relocs. */ + +/* Return true if NAME is a name of a relocation + section associated with section S. */ + +static bfd_boolean +is_reloc_section (bfd_boolean rela, const char * name, asection * s) +{ + if (rela) + return CONST_STRNEQ (name, ".rela") + && strcmp (bfd_get_section_name (NULL, s), name + 5) == 0; + + return CONST_STRNEQ (name, ".rel") + && strcmp (bfd_get_section_name (NULL, s), name + 4) == 0; +} + +/* Returns the name of the dynamic reloc section associated with SEC. */ + +static const char * +get_dynamic_reloc_section_name (bfd * abfd, + asection * sec, + bfd_boolean is_rela) +{ + const char * name; + unsigned int strndx = elf_elfheader (abfd)->e_shstrndx; + unsigned int shnam = elf_section_data (sec)->rel_hdr.sh_name; + + name = bfd_elf_string_from_elf_section (abfd, strndx, shnam); + if (name == NULL) + return NULL; + + if (! is_reloc_section (is_rela, name, sec)) + { + static bfd_boolean complained = FALSE; + + if (! complained) + { + (*_bfd_error_handler) + (_("%B: bad relocation section name `%s\'"), abfd, name); + complained = TRUE; + } + name = NULL; + } + + return name; +} + +/* Returns the dynamic reloc section associated with SEC. + If necessary compute the name of the dynamic reloc section based + on SEC's name (looked up in ABFD's string table) and the setting + of IS_RELA. */ + +asection * +_bfd_elf_get_dynamic_reloc_section (bfd * abfd, + asection * sec, + bfd_boolean is_rela) +{ + asection * reloc_sec = elf_section_data (sec)->sreloc; + + if (reloc_sec == NULL) + { + const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela); + + if (name != NULL) + { + reloc_sec = bfd_get_section_by_name (abfd, name); + + if (reloc_sec != NULL) + elf_section_data (sec)->sreloc = reloc_sec; + } + } + + return reloc_sec; +} + +/* Returns the dynamic reloc section associated with SEC. If the + section does not exist it is created and attached to the DYNOBJ + bfd and stored in the SRELOC field of SEC's elf_section_data + structure. + + ALIGNMENT is the alignment for the newly created section and + IS_RELA defines whether the name should be .rela. + or .rel.. The section name is looked up in the + string table associated with ABFD. */ + +asection * +_bfd_elf_make_dynamic_reloc_section (asection * sec, + bfd * dynobj, + unsigned int alignment, + bfd * abfd, + bfd_boolean is_rela) +{ + asection * reloc_sec = elf_section_data (sec)->sreloc; + + if (reloc_sec == NULL) + { + const char * name = get_dynamic_reloc_section_name (abfd, sec, is_rela); + + if (name == NULL) + return NULL; + + reloc_sec = bfd_get_section_by_name (dynobj, name); + + if (reloc_sec == NULL) + { + flagword flags; + + flags = (SEC_HAS_CONTENTS | SEC_READONLY | SEC_IN_MEMORY | SEC_LINKER_CREATED); + if ((sec->flags & SEC_ALLOC) != 0) + flags |= SEC_ALLOC | SEC_LOAD; + + reloc_sec = bfd_make_section_with_flags (dynobj, name, flags); + if (reloc_sec != NULL) + { + if (! bfd_set_section_alignment (dynobj, reloc_sec, alignment)) + reloc_sec = NULL; + } + } + + elf_section_data (sec)->sreloc = reloc_sec; + } + + return reloc_sec; +} diff --git a/bfd/elfn32-mips.c b/bfd/elfn32-mips.c index 9052dfd..24f53fb 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Most of the information added by Ian Lance Taylor, Cygnus Support, . @@ -1496,11 +1496,35 @@ static reloc_howto_type elf_mips16_howto_table_rel[] = 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 reference to global offset table. */ - EMPTY_HOWTO (R_MIPS16_GOT16), + /* A MIPS16 reference to the global offset table. */ + HOWTO (R_MIPS16_GOT16, /* 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_mips_elf_got16_reloc, /* special_function */ + "R_MIPS16_GOT16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 16 bit call through global offset table. */ - EMPTY_HOWTO (R_MIPS16_CALL16), + /* A MIPS16 call through the global offset table. */ + HOWTO (R_MIPS16_CALL16, /* 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_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_CALL16", /* name */ + TRUE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ /* MIPS16 high 16 bits of symbol value. */ HOWTO (R_MIPS16_HI16, /* type */ @@ -1568,11 +1592,35 @@ static reloc_howto_type elf_mips16_howto_table_rela[] = 0x0000ffff, /* dst_mask */ FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 reference to global offset table. */ - EMPTY_HOWTO (R_MIPS16_GOT16), + /* A MIPS16 reference to the global offset table. */ + HOWTO (R_MIPS16_GOT16, /* 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_mips_elf_got16_reloc, /* special_function */ + "R_MIPS16_GOT16", /* name */ + FALSE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ - /* A placeholder for MIPS16 16 bit call through global offset table. */ - EMPTY_HOWTO (R_MIPS16_CALL16), + /* A MIPS16 call through the global offset table. */ + HOWTO (R_MIPS16_CALL16, /* 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_mips_elf_generic_reloc, /* special_function */ + "R_MIPS16_CALL16", /* name */ + FALSE, /* partial_inplace */ + 0x0000ffff, /* src_mask */ + 0x0000ffff, /* dst_mask */ + FALSE), /* pcrel_offset */ /* MIPS16 high 16 bits of symbol value. */ HOWTO (R_MIPS16_HI16, /* type */ @@ -1669,6 +1717,38 @@ static reloc_howto_type elf_mips_gnu_rela16_s2 = 0x0000ffff, /* dst_mask */ TRUE); /* pcrel_offset */ +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_copy_howto = + HOWTO (R_MIPS_COPY, /* type */ + 0, /* rightshift */ + 0, /* this one is variable size */ + 0, /* bitsize */ + FALSE, /* pc_relative */ + 0, /* bitpos */ + complain_overflow_bitfield, /* complain_on_overflow */ + bfd_elf_generic_reloc, /* special_function */ + "R_MIPS_COPY", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + +/* Originally a VxWorks extension, but now used for other systems too. */ +static reloc_howto_type elf_mips_jump_slot_howto = + HOWTO (R_MIPS_JUMP_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, /* special_function */ + "R_MIPS_JUMP_SLOT", /* name */ + FALSE, /* partial_inplace */ + 0x0, /* src_mask */ + 0x0, /* dst_mask */ + FALSE); /* pcrel_offset */ + /* Set the GP value for OUTPUT_BFD. Returns FALSE if this is a dangerous relocation. */ @@ -2041,6 +2121,8 @@ static const struct elf_reloc_map mips16_reloc_map[] = { { BFD_RELOC_MIPS16_JMP, R_MIPS16_26 - R_MIPS16_min }, { BFD_RELOC_MIPS16_GPREL, R_MIPS16_GPREL - R_MIPS16_min }, + { BFD_RELOC_MIPS16_GOT16, R_MIPS16_GOT16 - R_MIPS16_min }, + { BFD_RELOC_MIPS16_CALL16, R_MIPS16_CALL16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_HI16_S, R_MIPS16_HI16 - R_MIPS16_min }, { BFD_RELOC_MIPS16_LO16, R_MIPS16_LO16 - R_MIPS16_min }, }; @@ -2077,6 +2159,10 @@ bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &elf_mips_gnu_vtinherit_howto; case BFD_RELOC_VTABLE_ENTRY: return &elf_mips_gnu_vtentry_howto; + case BFD_RELOC_MIPS_COPY: + return &elf_mips_copy_howto; + case BFD_RELOC_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: bfd_set_error (bfd_error_bad_value); return NULL; @@ -2113,6 +2199,10 @@ bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, return &elf_mips_gnu_rel16_s2; if (strcasecmp (elf_mips_gnu_rela16_s2.name, r_name) == 0) return &elf_mips_gnu_rela16_s2; + if (strcasecmp (elf_mips_copy_howto.name, r_name) == 0) + return &elf_mips_copy_howto; + if (strcasecmp (elf_mips_jump_slot_howto.name, r_name) == 0) + return &elf_mips_jump_slot_howto; return NULL; } @@ -2133,6 +2223,10 @@ mips_elf_n32_rtype_to_howto (unsigned int r_type, bfd_boolean rela_p) return &elf_mips_gnu_rela16_s2; else return &elf_mips_gnu_rel16_s2; + case R_MIPS_COPY: + return &elf_mips_copy_howto; + case R_MIPS_JUMP_SLOT: + return &elf_mips_jump_slot_howto; default: if (r_type >= R_MIPS16_min && r_type < R_MIPS16_max) { @@ -2195,7 +2289,7 @@ mips_elf_sym_is_global (bfd *abfd ATTRIBUTE_UNUSED, asymbol *sym) if (SGI_COMPAT (abfd)) return (sym->flags & BSF_SECTION_SYM) == 0; else - return ((sym->flags & (BSF_GLOBAL | BSF_WEAK)) != 0 + return ((sym->flags & (BSF_GLOBAL | BSF_WEAK | BSF_GNU_UNIQUE)) != 0 || bfd_is_und_section (bfd_get_section (sym)) || bfd_is_com_section (bfd_get_section (sym))); } @@ -2361,6 +2455,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #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_get_target_dtag _bfd_mips_elf_get_target_dtag #define elf_backend_adjust_dynamic_symbol \ _bfd_mips_elf_adjust_dynamic_symbol #define elf_backend_always_size_sections \ @@ -2382,7 +2477,6 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #define elf_backend_gc_sweep_hook _bfd_mips_elf_gc_sweep_hook #define elf_backend_copy_indirect_symbol \ _bfd_mips_elf_copy_indirect_symbol -#define elf_backend_hide_symbol _bfd_mips_elf_hide_symbol #define elf_backend_grok_prstatus elf32_mips_grok_prstatus #define elf_backend_grok_psinfo elf32_mips_grok_psinfo #define elf_backend_ecoff_debug_swap &mips_elf32_ecoff_debug_swap @@ -2394,7 +2488,10 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #define elf_backend_may_use_rel_p 1 #define elf_backend_may_use_rela_p 1 #define elf_backend_default_use_rela_p 1 +#define elf_backend_rela_plts_and_copies_p 0 #define elf_backend_sign_extend_vma TRUE +#define elf_backend_plt_readonly 1 +#define elf_backend_plt_sym_val _bfd_mips_elf_plt_sym_val #define elf_backend_discard_info _bfd_mips_elf_discard_info #define elf_backend_ignore_discarded_relocs \ @@ -2408,6 +2505,7 @@ static const struct ecoff_debug_swap mips_elf32_ecoff_debug_swap = { #define bfd_elf32_set_section_contents _bfd_mips_elf_set_section_contents #define bfd_elf32_bfd_get_relocated_section_contents \ _bfd_elf_mips_get_relocated_section_contents +#define bfd_elf32_mkobject _bfd_mips_elf_mkobject #define bfd_elf32_bfd_link_hash_table_create \ _bfd_mips_elf_link_hash_table_create #define bfd_elf32_bfd_final_link _bfd_mips_elf_final_link diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index c25294c..932886b 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -1,6 +1,6 @@ /* IA-64 support for 64-bit ELF - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of BFD, the Binary File Descriptor library. @@ -163,11 +163,8 @@ struct elfNN_ia64_link_hash_table /* The main hash table. */ struct elf_link_hash_table root; - asection *got_sec; /* the linkage table section (or NULL) */ - asection *rel_got_sec; /* dynamic relocation section for same */ asection *fptr_sec; /* function descriptor table (or NULL) */ asection *rel_fptr_sec; /* dynamic relocation section for same */ - asection *plt_sec; /* the primary plt section (or NULL) */ asection *pltoff_sec; /* private descriptors for plt (or NULL) */ asection *rel_pltoff_sec; /* dynamic relocation section for same */ @@ -190,172 +187,45 @@ struct elfNN_ia64_allocate_data #define elfNN_ia64_hash_table(p) \ ((struct elfNN_ia64_link_hash_table *) ((p)->hash)) -static bfd_reloc_status_type elfNN_ia64_reloc - PARAMS ((bfd *abfd, arelent *reloc, asymbol *sym, PTR data, - asection *input_section, bfd *output_bfd, char **error_message)); -static reloc_howto_type * lookup_howto - PARAMS ((unsigned int rtype)); -static reloc_howto_type *elfNN_ia64_reloc_type_lookup - PARAMS ((bfd *abfd, bfd_reloc_code_real_type bfd_code)); -static void elfNN_ia64_info_to_howto - PARAMS ((bfd *abfd, arelent *bfd_reloc, Elf_Internal_Rela *elf_reloc)); -static bfd_boolean elfNN_ia64_relax_section - PARAMS((bfd *abfd, asection *sec, struct bfd_link_info *link_info, - bfd_boolean *again)); -static void elfNN_ia64_relax_ldxmov - PARAMS((bfd_byte *contents, bfd_vma off)); -static bfd_boolean is_unwind_section_name - PARAMS ((bfd *abfd, const char *)); -static bfd_boolean elfNN_ia64_section_flags - PARAMS ((flagword *, const Elf_Internal_Shdr *)); -static bfd_boolean elfNN_ia64_fake_sections - PARAMS ((bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)); -static void elfNN_ia64_final_write_processing - PARAMS ((bfd *abfd, bfd_boolean linker)); -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 bfd_boolean elfNN_ia64_is_local_label_name - PARAMS ((bfd *abfd, const char *name)); +static struct elfNN_ia64_dyn_sym_info * get_dyn_sym_info + (struct elfNN_ia64_link_hash_table *ia64_info, + struct elf_link_hash_entry *h, + bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create); static bfd_boolean elfNN_ia64_dynamic_symbol_p - PARAMS ((struct elf_link_hash_entry *h, struct bfd_link_info *info, int)); -static struct bfd_hash_entry *elfNN_ia64_new_elf_hash_entry - PARAMS ((struct bfd_hash_entry *entry, struct bfd_hash_table *table, - const char *string)); -static void elfNN_ia64_hash_copy_indirect - PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, - struct elf_link_hash_entry *)); -static void elfNN_ia64_hash_hide_symbol - PARAMS ((struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean)); -static hashval_t elfNN_ia64_local_htab_hash PARAMS ((const void *)); -static int elfNN_ia64_local_htab_eq PARAMS ((const void *ptr1, - const void *ptr2)); -static struct bfd_link_hash_table *elfNN_ia64_hash_table_create - PARAMS ((bfd *abfd)); -static void elfNN_ia64_hash_table_free - PARAMS ((struct bfd_link_hash_table *hash)); -static bfd_boolean elfNN_ia64_global_dyn_sym_thunk - PARAMS ((struct bfd_hash_entry *, PTR)); -static int elfNN_ia64_local_dyn_sym_thunk - PARAMS ((void **, PTR)); + (struct elf_link_hash_entry *h, struct bfd_link_info *info, int); +static bfd_reloc_status_type elfNN_ia64_install_value + (bfd_byte *hit_addr, bfd_vma val, unsigned int r_type); +static bfd_boolean elfNN_ia64_choose_gp + (bfd *abfd, struct bfd_link_info *info); +static void elfNN_ia64_relax_ldxmov + (bfd_byte *contents, bfd_vma off); static void elfNN_ia64_dyn_sym_traverse - PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info, - bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR), - PTR info)); -static bfd_boolean elfNN_ia64_create_dynamic_sections - PARAMS ((bfd *abfd, struct bfd_link_info *info)); -static struct elfNN_ia64_local_hash_entry * get_local_sym_hash - PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info, - bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create)); -static struct elfNN_ia64_dyn_sym_info * get_dyn_sym_info - PARAMS ((struct elfNN_ia64_link_hash_table *ia64_info, - struct elf_link_hash_entry *h, - bfd *abfd, const Elf_Internal_Rela *rel, bfd_boolean create)); -static asection *get_got - PARAMS ((bfd *abfd, struct bfd_link_info *info, - struct elfNN_ia64_link_hash_table *ia64_info)); -static asection *get_fptr - PARAMS ((bfd *abfd, struct bfd_link_info *info, - struct elfNN_ia64_link_hash_table *ia64_info)); -static asection *get_pltoff - PARAMS ((bfd *abfd, struct bfd_link_info *info, - struct elfNN_ia64_link_hash_table *ia64_info)); -static asection *get_reloc_section - PARAMS ((bfd *abfd, struct elfNN_ia64_link_hash_table *ia64_info, - asection *sec, bfd_boolean create)); -static bfd_boolean elfNN_ia64_check_relocs - PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *sec, - const Elf_Internal_Rela *relocs)); -static bfd_boolean elfNN_ia64_adjust_dynamic_symbol - PARAMS ((struct bfd_link_info *info, struct elf_link_hash_entry *h)); -static long global_sym_index - PARAMS ((struct elf_link_hash_entry *h)); -static bfd_boolean allocate_fptr - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); + (struct elfNN_ia64_link_hash_table *ia64_info, + bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR), + PTR info); static bfd_boolean allocate_global_data_got - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); + (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data); static bfd_boolean allocate_global_fptr_got - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); + (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data); static bfd_boolean allocate_local_got - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); -static bfd_boolean allocate_pltoff_entries - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); -static bfd_boolean allocate_plt_entries - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); -static bfd_boolean allocate_plt2_entries - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); -static bfd_boolean allocate_dynrel_entries - PARAMS ((struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data)); -static bfd_boolean elfNN_ia64_size_dynamic_sections - PARAMS ((bfd *output_bfd, struct bfd_link_info *info)); -static bfd_reloc_status_type elfNN_ia64_install_value - PARAMS ((bfd_byte *hit_addr, bfd_vma val, unsigned int r_type)); -static void elfNN_ia64_install_dyn_reloc - PARAMS ((bfd *abfd, struct bfd_link_info *info, asection *sec, - asection *srel, bfd_vma offset, unsigned int type, - long dynindx, bfd_vma addend)); -static bfd_vma set_got_entry - PARAMS ((bfd *abfd, struct bfd_link_info *info, - struct elfNN_ia64_dyn_sym_info *dyn_i, long dynindx, - bfd_vma addend, bfd_vma value, unsigned int dyn_r_type)); -static bfd_vma set_fptr_entry - PARAMS ((bfd *abfd, struct bfd_link_info *info, - struct elfNN_ia64_dyn_sym_info *dyn_i, - bfd_vma value)); -static bfd_vma set_pltoff_entry - PARAMS ((bfd *abfd, struct bfd_link_info *info, - struct elfNN_ia64_dyn_sym_info *dyn_i, - bfd_vma value, bfd_boolean)); -static bfd_vma elfNN_ia64_tprel_base - PARAMS ((struct bfd_link_info *info)); -static bfd_vma elfNN_ia64_dtprel_base - PARAMS ((struct bfd_link_info *info)); -static int elfNN_ia64_unwind_entry_compare - PARAMS ((const PTR, const PTR)); -static bfd_boolean elfNN_ia64_choose_gp - PARAMS ((bfd *abfd, struct bfd_link_info *info)); -static bfd_boolean elfNN_ia64_final_link - PARAMS ((bfd *abfd, struct bfd_link_info *info)); -static bfd_boolean elfNN_ia64_relocate_section - PARAMS ((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 bfd_boolean elfNN_ia64_finish_dynamic_symbol - PARAMS ((bfd *output_bfd, struct bfd_link_info *info, - struct elf_link_hash_entry *h, Elf_Internal_Sym *sym)); -static bfd_boolean elfNN_ia64_finish_dynamic_sections - PARAMS ((bfd *abfd, struct bfd_link_info *info)); -static bfd_boolean elfNN_ia64_set_private_flags - PARAMS ((bfd *abfd, flagword flags)); -static bfd_boolean elfNN_ia64_merge_private_bfd_data - PARAMS ((bfd *ibfd, bfd *obfd)); -static bfd_boolean elfNN_ia64_print_private_bfd_data - PARAMS ((bfd *abfd, PTR ptr)); -static enum elf_reloc_type_class elfNN_ia64_reloc_type_class - PARAMS ((const Elf_Internal_Rela *)); + (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data); static bfd_boolean elfNN_ia64_hpux_vec - PARAMS ((const bfd_target *vec)); -static void elfNN_hpux_post_process_headers - PARAMS ((bfd *abfd, struct bfd_link_info *info)); -bfd_boolean elfNN_hpux_backend_section_from_bfd_section - PARAMS ((bfd *abfd, asection *sec, int *retval)); + (const bfd_target *vec); +static bfd_boolean allocate_dynrel_entries + (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data); +static asection *get_pltoff + (bfd *abfd, struct bfd_link_info *info, + struct elfNN_ia64_link_hash_table *ia64_info); /* ia64-specific relocation. */ /* Perform a relocation. Not much to do here as all the hard work is done in elfNN_ia64_final_link_relocate. */ static bfd_reloc_status_type -elfNN_ia64_reloc (abfd, reloc, sym, data, input_section, - output_bfd, error_message) - bfd *abfd ATTRIBUTE_UNUSED; - arelent *reloc; - asymbol *sym ATTRIBUTE_UNUSED; - PTR data ATTRIBUTE_UNUSED; - asection *input_section; - bfd *output_bfd; - char **error_message; +elfNN_ia64_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc, + asymbol *sym ATTRIBUTE_UNUSED, + PTR data ATTRIBUTE_UNUSED, asection *input_section, + bfd *output_bfd, char **error_message) { if (output_bfd) { @@ -481,8 +351,7 @@ static unsigned char elf_code_to_howto_index[R_IA64_MAX_RELOC_CODE + 1]; /* Given a BFD reloc type, return the matching HOWTO structure. */ static reloc_howto_type * -lookup_howto (rtype) - unsigned int rtype; +lookup_howto (unsigned int rtype) { static int inited = 0; int i; @@ -505,9 +374,8 @@ lookup_howto (rtype) } static reloc_howto_type* -elfNN_ia64_reloc_type_lookup (abfd, bfd_code) - bfd *abfd ATTRIBUTE_UNUSED; - bfd_reloc_code_real_type bfd_code; +elfNN_ia64_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type bfd_code) { unsigned int rtype; @@ -633,10 +501,9 @@ elfNN_ia64_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, /* Given a ELF reloc, return the matching HOWTO structure. */ static void -elfNN_ia64_info_to_howto (abfd, bfd_reloc, elf_reloc) - bfd *abfd ATTRIBUTE_UNUSED; - arelent *bfd_reloc; - Elf_Internal_Rela *elf_reloc; +elfNN_ia64_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, + arelent *bfd_reloc, + Elf_Internal_Rela *elf_reloc) { bfd_reloc->howto = lookup_howto ((unsigned int) ELFNN_R_TYPE (elf_reloc->r_info)); @@ -745,7 +612,7 @@ bfd_elfNN_ia64_after_parse (int itanium) static bfd_boolean elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) { - unsigned int template, mlx; + unsigned int template_val, mlx; bfd_vma t0, t1, s0, s1, s2, br_code; long br_slot; bfd_byte *hit_addr; @@ -759,7 +626,7 @@ elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) /* Check if we can turn br into brl. A label is always at the start of the bundle. Even if there are predicates on NOPs, we still perform this optimization. */ - template = t0 & 0x1e; + template_val = t0 & 0x1e; s0 = (t0 >> 5) & 0x1ffffffffffLL; s1 = ((t0 >> 46) | (t1 << 18)) & 0x1ffffffffffLL; s2 = (t1 >> 23) & 0x1ffffffffffLL; @@ -775,9 +642,9 @@ elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) case 1: /* Check if slot 2 is NOP. Possible templates are MBB and BBB. For BBB, slot 0 also has to be nop.b. */ - if (!((template == 0x12 /* MBB */ + if (!((template_val == 0x12 /* MBB */ && IS_NOP_B (s2)) - || (template == 0x16 /* BBB */ + || (template_val == 0x16 /* BBB */ && IS_NOP_B (s0) && IS_NOP_B (s2)))) return FALSE; @@ -786,16 +653,16 @@ elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) case 2: /* Check if slot 1 is NOP. Possible templates are MIB, MBB, BBB, MMB and MFB. For BBB, slot 0 also has to be nop.b. */ - if (!((template == 0x10 /* MIB */ + if (!((template_val == 0x10 /* MIB */ && IS_NOP_I (s1)) - || (template == 0x12 /* MBB */ + || (template_val == 0x12 /* MBB */ && IS_NOP_B (s1)) - || (template == 0x16 /* BBB */ + || (template_val == 0x16 /* BBB */ && IS_NOP_B (s0) && IS_NOP_B (s1)) - || (template == 0x18 /* MMB */ + || (template_val == 0x18 /* MMB */ && IS_NOP_M (s1)) - || (template == 0x1c /* MFB */ + || (template_val == 0x1c /* MFB */ && IS_NOP_F (s1)))) return FALSE; br_code = s2; @@ -804,7 +671,7 @@ elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) /* It should never happen. */ abort (); } - + /* We can turn br.cond/br.call into brl.cond/brl.call. */ if (!(IS_BR_COND (br_code) || IS_BR_CALL (br_code))) return FALSE; @@ -819,7 +686,7 @@ elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) else mlx = 0x4; - if (template == 0x16) + if (template_val == 0x16) { /* For BBB, we need to put nop.m in slot 0. We keep the original predicate only if slot 0 isn't br. */ @@ -848,7 +715,7 @@ elfNN_ia64_relax_br (bfd_byte *contents, bfd_vma off) static void elfNN_ia64_relax_brl (bfd_byte *contents, bfd_vma off) { - int template; + int template_val; bfd_byte *hit_addr; bfd_vma t0, t1, i0, i1, i2; @@ -867,10 +734,10 @@ elfNN_ia64_relax_brl (bfd_byte *contents, bfd_vma off) /* Turn a MLX bundle into a MBB bundle with the same stop-bit variety. */ if (t0 & 0x1) - template = 0x13; + template_val = 0x13; else - template = 0x12; - t0 = (i1 << 46) | (i0 << 5) | template; + template_val = 0x12; + t0 = (i1 << 46) | (i0 << 5) | template_val; t1 = (i2 << 23) | (i1 >> 18); bfd_putl64 (t0, hit_addr); @@ -886,11 +753,9 @@ elfNN_ia64_relax_brl (bfd_byte *contents, bfd_vma off) /* These functions do relaxation for IA-64 ELF. */ static bfd_boolean -elfNN_ia64_relax_section (abfd, sec, link_info, again) - bfd *abfd; - asection *sec; - struct bfd_link_info *link_info; - bfd_boolean *again; +elfNN_ia64_relax_section (bfd *abfd, asection *sec, + struct bfd_link_info *link_info, + bfd_boolean *again) { struct one_fixup { @@ -918,6 +783,10 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) one pass. */ *again = FALSE; + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + /* Don't even try to relax for non-ELF outputs. */ if (!is_elf_hash_table (link_info->hash)) return FALSE; @@ -1060,7 +929,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) if (r_type != R_IA64_PCREL21B) continue; - tsec = ia64_info->plt_sec; + tsec = ia64_info->root.splt; toff = dyn_i->plt2_offset; BFD_ASSERT (irel->r_addend == 0); } @@ -1126,8 +995,20 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) + sec->output_offset + roff) & (bfd_vma) -4; + /* The .plt section is aligned at 32byte and the .text section + is aligned at 64byte. The .text section is right after the + .plt section. After the first relaxation pass, linker may + increase the gap between the .plt and .text sections up + to 32byte. We assume linker will always insert 32byte + between the .plt and .text sections after the the first + relaxation pass. */ + if (tsec == ia64_info->root.splt) + offset = -0x1000000 + 32; + else + offset = -0x1000000; + /* If the branch is in range, no need to do anything. */ - if ((bfd_signed_vma) (symaddr - reladdr) >= -0x1000000 + if ((bfd_signed_vma) (symaddr - reladdr) >= offset && (bfd_signed_vma) (symaddr - reladdr) <= 0x0FFFFF0) { /* If the 60-bit branch is in 21-bit range, optimize it. */ @@ -1192,7 +1073,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) size_t size; - if (tsec == ia64_info->plt_sec) + if (tsec == ia64_info->root.splt) size = sizeof (plt_full_entry); else size = oor_branch_size; @@ -1212,7 +1093,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) goto error_return; sec->size = amt; - if (tsec == ia64_info->plt_sec) + if (tsec == ia64_info->root.splt) { memcpy (contents + trampoff, plt_full_entry, size); @@ -1366,16 +1247,16 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_global_data_got, &data); elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_global_fptr_got, &data); elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_local_got, &data); - ia64_info->got_sec->size = data.ofs; + ia64_info->root.sgot->size = data.ofs; if (ia64_info->root.dynamic_sections_created - && ia64_info->rel_got_sec != NULL) + && ia64_info->root.srelgot != NULL) { /* Resize .rela.got. */ - ia64_info->rel_got_sec->size = 0; + ia64_info->root.srelgot->size = 0; if (link_info->shared && ia64_info->self_dtpmod_offset != (bfd_vma) -1) - ia64_info->rel_got_sec->size += sizeof (ElfNN_External_Rela); + ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); data.only_got = TRUE; elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_dynrel_entries, &data); @@ -1407,9 +1288,7 @@ elfNN_ia64_relax_section (abfd, sec, link_info, again) #undef skip_relax_pass_1 static void -elfNN_ia64_relax_ldxmov (contents, off) - bfd_byte *contents; - bfd_vma off; +elfNN_ia64_relax_ldxmov (bfd_byte *contents, bfd_vma off) { int shift, r1, r3; bfd_vma dword, insn; @@ -1497,9 +1376,8 @@ elfNN_ia64_section_from_shdr (bfd *abfd, flag. */ static bfd_boolean -elfNN_ia64_section_flags (flags, hdr) - flagword *flags; - const Elf_Internal_Shdr *hdr; +elfNN_ia64_section_flags (flagword *flags, + const Elf_Internal_Shdr *hdr) { if (hdr->sh_flags & SHF_IA_64_SHORT) *flags |= SEC_SMALL_DATA; @@ -1511,10 +1389,8 @@ elfNN_ia64_section_flags (flags, hdr) section name, which is a hack, but ought to work. */ static bfd_boolean -elfNN_ia64_fake_sections (abfd, hdr, sec) - bfd *abfd ATTRIBUTE_UNUSED; - Elf_Internal_Shdr *hdr; - asection *sec; +elfNN_ia64_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, + asection *sec) { register const char *name; @@ -1565,9 +1441,8 @@ elfNN_ia64_fake_sections (abfd, hdr, sec) object file. */ static void -elfNN_ia64_final_write_processing (abfd, linker) - bfd *abfd; - bfd_boolean linker ATTRIBUTE_UNUSED; +elfNN_ia64_final_write_processing (bfd *abfd, + bfd_boolean linker ATTRIBUTE_UNUSED) { Elf_Internal_Shdr *hdr; asection *s; @@ -1605,14 +1480,13 @@ elfNN_ia64_final_write_processing (abfd, linker) file. We use it to put .comm items in .sbss, and not .bss. */ static bfd_boolean -elfNN_ia64_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp) - bfd *abfd; - struct bfd_link_info *info; - Elf_Internal_Sym *sym; - const char **namep ATTRIBUTE_UNUSED; - flagword *flagsp ATTRIBUTE_UNUSED; - asection **secp; - bfd_vma *valp; +elfNN_ia64_add_symbol_hook (bfd *abfd, + struct bfd_link_info *info, + Elf_Internal_Sym *sym, + const char **namep ATTRIBUTE_UNUSED, + flagword *flagsp ATTRIBUTE_UNUSED, + asection **secp, + bfd_vma *valp) { if (sym->st_shndx == SHN_COMMON && !info->relocatable @@ -1795,9 +1669,8 @@ elfNN_ia64_modify_program_headers (bfd *abfd, '.' are local. */ static bfd_boolean -elfNN_ia64_is_local_label_name (abfd, name) - bfd *abfd ATTRIBUTE_UNUSED; - const char *name; +elfNN_ia64_is_local_label_name (bfd *abfd ATTRIBUTE_UNUSED, + const char *name) { return name[0] == '.'; } @@ -1805,10 +1678,8 @@ elfNN_ia64_is_local_label_name (abfd, name) /* Should we do dynamic things to this symbol? */ static bfd_boolean -elfNN_ia64_dynamic_symbol_p (h, info, r_type) - struct elf_link_hash_entry *h; - struct bfd_link_info *info; - int r_type; +elfNN_ia64_dynamic_symbol_p (struct elf_link_hash_entry *h, + struct bfd_link_info *info, int r_type) { bfd_boolean ignore_protected = ((r_type & 0xf8) == 0x40 /* FPTR relocs */ @@ -1818,10 +1689,9 @@ elfNN_ia64_dynamic_symbol_p (h, info, r_type) } static struct bfd_hash_entry* -elfNN_ia64_new_elf_hash_entry (entry, table, string) - struct bfd_hash_entry *entry; - struct bfd_hash_table *table; - const char *string; +elfNN_ia64_new_elf_hash_entry (struct bfd_hash_entry *entry, + struct bfd_hash_table *table, + const char *string) { struct elfNN_ia64_link_hash_entry *ret; ret = (struct elfNN_ia64_link_hash_entry *) entry; @@ -1847,9 +1717,9 @@ elfNN_ia64_new_elf_hash_entry (entry, table, string) } static void -elfNN_ia64_hash_copy_indirect (info, xdir, xind) - struct bfd_link_info *info; - struct elf_link_hash_entry *xdir, *xind; +elfNN_ia64_hash_copy_indirect (struct bfd_link_info *info, + struct elf_link_hash_entry *xdir, + struct elf_link_hash_entry *xind) { struct elfNN_ia64_link_hash_entry *dir, *ind; @@ -1910,10 +1780,9 @@ elfNN_ia64_hash_copy_indirect (info, xdir, xind) } static void -elfNN_ia64_hash_hide_symbol (info, xh, force_local) - struct bfd_link_info *info; - struct elf_link_hash_entry *xh; - bfd_boolean force_local; +elfNN_ia64_hash_hide_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *xh, + bfd_boolean force_local) { struct elfNN_ia64_link_hash_entry *h; struct elfNN_ia64_dyn_sym_info *dyn_i; @@ -1935,21 +1804,18 @@ elfNN_ia64_hash_hide_symbol (info, xh, force_local) /* Compute a hash of a local hash entry. */ static hashval_t -elfNN_ia64_local_htab_hash (ptr) - const void *ptr; +elfNN_ia64_local_htab_hash (const void *ptr) { struct elfNN_ia64_local_hash_entry *entry = (struct elfNN_ia64_local_hash_entry *) ptr; - return (((entry->id & 0xff) << 24) | ((entry->id & 0xff00) << 8)) - ^ entry->r_sym ^ (entry->id >> 16); + return ELF_LOCAL_SYMBOL_HASH (entry->id, entry->r_sym); } /* Compare local hash entries. */ static int -elfNN_ia64_local_htab_eq (ptr1, ptr2) - const void *ptr1, *ptr2; +elfNN_ia64_local_htab_eq (const void *ptr1, const void *ptr2) { struct elfNN_ia64_local_hash_entry *entry1 = (struct elfNN_ia64_local_hash_entry *) ptr1; @@ -1964,8 +1830,7 @@ elfNN_ia64_local_htab_eq (ptr1, ptr2) linker (without using static variables). */ static struct bfd_link_hash_table* -elfNN_ia64_hash_table_create (abfd) - bfd *abfd; +elfNN_ia64_hash_table_create (bfd *abfd) { struct elfNN_ia64_link_hash_table *ret; @@ -2041,8 +1906,7 @@ elfNN_ia64_local_dyn_info_free (void **slot, /* Destroy IA-64 linker hash table. */ static void -elfNN_ia64_hash_table_free (hash) - struct bfd_link_hash_table *hash; +elfNN_ia64_hash_table_free (struct bfd_link_hash_table *hash) { struct elfNN_ia64_link_hash_table *ia64_info = (struct elfNN_ia64_link_hash_table *) hash; @@ -2063,14 +1927,13 @@ elfNN_ia64_hash_table_free (hash) struct elfNN_ia64_dyn_sym_traverse_data { - bfd_boolean (*func) PARAMS ((struct elfNN_ia64_dyn_sym_info *, PTR)); + bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR); PTR data; }; static bfd_boolean -elfNN_ia64_global_dyn_sym_thunk (xentry, xdata) - struct bfd_hash_entry *xentry; - PTR xdata; +elfNN_ia64_global_dyn_sym_thunk (struct bfd_hash_entry *xentry, + PTR xdata) { struct elfNN_ia64_link_hash_entry *entry = (struct elfNN_ia64_link_hash_entry *) xentry; @@ -2091,9 +1954,7 @@ elfNN_ia64_global_dyn_sym_thunk (xentry, xdata) } static bfd_boolean -elfNN_ia64_local_dyn_sym_thunk (slot, xdata) - void **slot; - PTR xdata; +elfNN_ia64_local_dyn_sym_thunk (void **slot, PTR xdata) { struct elfNN_ia64_local_hash_entry *entry = (struct elfNN_ia64_local_hash_entry *) *slot; @@ -2111,10 +1972,9 @@ elfNN_ia64_local_dyn_sym_thunk (slot, xdata) } static void -elfNN_ia64_dyn_sym_traverse (ia64_info, func, data) - struct elfNN_ia64_link_hash_table *ia64_info; - bfd_boolean (*func) PARAMS ((struct elfNN_ia64_dyn_sym_info *, PTR)); - PTR data; +elfNN_ia64_dyn_sym_traverse (struct elfNN_ia64_link_hash_table *ia64_info, + bfd_boolean (*func) (struct elfNN_ia64_dyn_sym_info *, PTR), + PTR data) { struct elfNN_ia64_dyn_sym_traverse_data xdata; @@ -2128,9 +1988,8 @@ elfNN_ia64_dyn_sym_traverse (ia64_info, func, data) } static bfd_boolean -elfNN_ia64_create_dynamic_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; +elfNN_ia64_create_dynamic_sections (bfd *abfd, + struct bfd_link_info *info) { struct elfNN_ia64_link_hash_table *ia64_info; asection *s; @@ -2140,14 +1999,12 @@ elfNN_ia64_create_dynamic_sections (abfd, info) ia64_info = elfNN_ia64_hash_table (info); - ia64_info->plt_sec = bfd_get_section_by_name (abfd, ".plt"); - ia64_info->got_sec = bfd_get_section_by_name (abfd, ".got"); - { - flagword flags = bfd_get_section_flags (abfd, ia64_info->got_sec); - bfd_set_section_flags (abfd, ia64_info->got_sec, SEC_SMALL_DATA | flags); + flagword flags = bfd_get_section_flags (abfd, ia64_info->root.sgot); + bfd_set_section_flags (abfd, ia64_info->root.sgot, + SEC_SMALL_DATA | flags); /* The .got section is always aligned at 8 bytes. */ - bfd_set_section_alignment (abfd, ia64_info->got_sec, 3); + bfd_set_section_alignment (abfd, ia64_info->root.sgot, 3); } if (!get_pltoff (abfd, info, ia64_info)) @@ -2164,32 +2021,19 @@ elfNN_ia64_create_dynamic_sections (abfd, info) return FALSE; ia64_info->rel_pltoff_sec = s; - s = bfd_make_section_with_flags (abfd, ".rela.got", - (SEC_ALLOC | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY)); - if (s == NULL - || !bfd_set_section_alignment (abfd, s, LOG_SECTION_ALIGN)) - return FALSE; - ia64_info->rel_got_sec = s; - return TRUE; } /* Find and/or create a hash entry for local symbol. */ static struct elfNN_ia64_local_hash_entry * -get_local_sym_hash (ia64_info, abfd, rel, create) - struct elfNN_ia64_link_hash_table *ia64_info; - bfd *abfd; - const Elf_Internal_Rela *rel; - bfd_boolean create; +get_local_sym_hash (struct elfNN_ia64_link_hash_table *ia64_info, + bfd *abfd, const Elf_Internal_Rela *rel, + bfd_boolean create) { struct elfNN_ia64_local_hash_entry e, *ret; asection *sec = abfd->sections; - hashval_t h = (((sec->id & 0xff) << 24) | ((sec->id & 0xff00) << 8)) - ^ ELFNN_R_SYM (rel->r_info) ^ (sec->id >> 16); + hashval_t h = ELF_LOCAL_SYMBOL_HASH (sec->id, + ELFNN_R_SYM (rel->r_info)); void **slot; e.id = sec->id; @@ -2412,12 +2256,9 @@ sort_dyn_sym_info (struct elfNN_ia64_dyn_sym_info *info, requires a copy which is O(N), but this only happens once. */ static struct elfNN_ia64_dyn_sym_info * -get_dyn_sym_info (ia64_info, h, abfd, rel, create) - struct elfNN_ia64_link_hash_table *ia64_info; - struct elf_link_hash_entry *h; - bfd *abfd; - const Elf_Internal_Rela *rel; - bfd_boolean create; +get_dyn_sym_info (struct elfNN_ia64_link_hash_table *ia64_info, + struct elf_link_hash_entry *h, bfd *abfd, + const Elf_Internal_Rela *rel, bfd_boolean create) { struct elfNN_ia64_dyn_sym_info **info_p, *info, *dyn_i, key; unsigned int *count_p, *sorted_count_p, *size_p; @@ -2515,7 +2356,7 @@ has_space: 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 may have duplicate. */ (*count_p)++; @@ -2554,15 +2395,13 @@ has_space: } static asection * -get_got (abfd, info, ia64_info) - bfd *abfd; - struct bfd_link_info *info; - struct elfNN_ia64_link_hash_table *ia64_info; +get_got (bfd *abfd, struct bfd_link_info *info, + struct elfNN_ia64_link_hash_table *ia64_info) { asection *got; bfd *dynobj; - got = ia64_info->got_sec; + got = ia64_info->root.sgot; if (!got) { flagword flags; @@ -2573,9 +2412,7 @@ get_got (abfd, info, ia64_info) if (!_bfd_elf_create_got_section (dynobj, info)) return 0; - got = bfd_get_section_by_name (dynobj, ".got"); - BFD_ASSERT (got); - ia64_info->got_sec = got; + got = ia64_info->root.sgot; /* The .got section is always aligned at 8 bytes. */ if (!bfd_set_section_alignment (abfd, got, 3)) @@ -2594,10 +2431,8 @@ get_got (abfd, info, ia64_info) of a procedure, thus ensuring a unique address for each procedure. */ static asection * -get_fptr (abfd, info, ia64_info) - bfd *abfd; - struct bfd_link_info *info; - struct elfNN_ia64_link_hash_table *ia64_info; +get_fptr (bfd *abfd, struct bfd_link_info *info, + struct elfNN_ia64_link_hash_table *ia64_info) { asection *fptr; bfd *dynobj; @@ -2650,10 +2485,8 @@ get_fptr (abfd, info, ia64_info) } static asection * -get_pltoff (abfd, info, ia64_info) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elfNN_ia64_link_hash_table *ia64_info; +get_pltoff (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elfNN_ia64_link_hash_table *ia64_info) { asection *pltoff; bfd *dynobj; @@ -2687,11 +2520,9 @@ get_pltoff (abfd, info, ia64_info) } static asection * -get_reloc_section (abfd, ia64_info, sec, create) - bfd *abfd; - struct elfNN_ia64_link_hash_table *ia64_info; - asection *sec; - bfd_boolean create; +get_reloc_section (bfd *abfd, + struct elfNN_ia64_link_hash_table *ia64_info, + asection *sec, bfd_boolean create) { const char *srel_name; asection *srel; @@ -2762,11 +2593,9 @@ count_dyn_reloc (bfd *abfd, struct elfNN_ia64_dyn_sym_info *dyn_i, } static bfd_boolean -elfNN_ia64_check_relocs (abfd, info, sec, relocs) - bfd *abfd; - struct bfd_link_info *info; - asection *sec; - const Elf_Internal_Rela *relocs; +elfNN_ia64_check_relocs (bfd *abfd, struct bfd_link_info *info, + asection *sec, + const Elf_Internal_Rela *relocs) { struct elfNN_ia64_link_hash_table *ia64_info; const Elf_Internal_Rela *relend; @@ -2968,7 +2797,7 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs) } /* Now, we only do lookup without insertion, which is very fast - with the modified get_dyn_sym_info. */ + with the modified get_dyn_sym_info. */ for (rel = relocs; rel < relend; ++rel) { struct elfNN_ia64_dyn_sym_info *dyn_i; @@ -3222,9 +3051,8 @@ elfNN_ia64_check_relocs (abfd, info, sec, relocs) external GOT entries first. */ static bfd_boolean -allocate_global_data_got (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_global_data_got (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3271,9 +3099,8 @@ allocate_global_data_got (dyn_i, data) /* Next, allocate all the GOT entries used by LTOFF_FPTR relocs. */ static bfd_boolean -allocate_global_fptr_got (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_global_fptr_got (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3290,9 +3117,8 @@ allocate_global_fptr_got (dyn_i, data) /* Lastly, allocate all the GOT entries for local data. */ static bfd_boolean -allocate_local_got (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_local_got (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3308,8 +3134,7 @@ allocate_local_got (dyn_i, data) /* Search for the index of a global symbol in it's defining object file. */ static long -global_sym_index (h) - struct elf_link_hash_entry *h; +global_sym_index (struct elf_link_hash_entry *h) { struct elf_link_hash_entry **p; bfd *obj; @@ -3328,9 +3153,7 @@ global_sym_index (h) in a main executable that is not exported. */ static bfd_boolean -allocate_fptr (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_fptr (struct elfNN_ia64_dyn_sym_info *dyn_i, PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3376,9 +3199,8 @@ allocate_fptr (dyn_i, data) /* Allocate all the minimal PLT entries. */ static bfd_boolean -allocate_plt_entries (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_plt_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3414,9 +3236,8 @@ allocate_plt_entries (dyn_i, data) /* Allocate all the full PLT entries. */ static bfd_boolean -allocate_plt2_entries (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_plt2_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3442,9 +3263,8 @@ allocate_plt2_entries (dyn_i, data) ??? Relaxation might be able to determine that they are. */ static bfd_boolean -allocate_pltoff_entries (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_pltoff_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; @@ -3460,9 +3280,8 @@ allocate_pltoff_entries (dyn_i, data) to be dynamic. */ static bfd_boolean -allocate_dynrel_entries (dyn_i, data) - struct elfNN_ia64_dyn_sym_info *dyn_i; - PTR data; +allocate_dynrel_entries (struct elfNN_ia64_dyn_sym_info *dyn_i, + PTR data) { struct elfNN_ia64_allocate_data *x = (struct elfNN_ia64_allocate_data *)data; struct elfNN_ia64_link_hash_table *ia64_info; @@ -3492,14 +3311,14 @@ allocate_dynrel_entries (dyn_i, data) || !x->info->pie || dyn_i->h == NULL || dyn_i->h->root.type != bfd_link_hash_undefweak) - ia64_info->rel_got_sec->size += sizeof (ElfNN_External_Rela); + ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); } if ((dynamic_symbol || shared) && dyn_i->want_tprel) - ia64_info->rel_got_sec->size += sizeof (ElfNN_External_Rela); + ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); if (dynamic_symbol && dyn_i->want_dtpmod) - ia64_info->rel_got_sec->size += sizeof (ElfNN_External_Rela); + ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); if (dynamic_symbol && dyn_i->want_dtprel) - ia64_info->rel_got_sec->size += sizeof (ElfNN_External_Rela); + ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); if (x->only_got) return TRUE; @@ -3577,9 +3396,8 @@ allocate_dynrel_entries (dyn_i, data) } static bfd_boolean -elfNN_ia64_adjust_dynamic_symbol (info, h) - struct bfd_link_info *info ATTRIBUTE_UNUSED; - struct elf_link_hash_entry *h; +elfNN_ia64_adjust_dynamic_symbol (struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct elf_link_hash_entry *h) { /* ??? Undefined symbols with PLT entries should be re-defined to be the PLT entry. */ @@ -3607,9 +3425,8 @@ elfNN_ia64_adjust_dynamic_symbol (info, h) } static bfd_boolean -elfNN_ia64_size_dynamic_sections (output_bfd, info) - bfd *output_bfd ATTRIBUTE_UNUSED; - struct bfd_link_info *info; +elfNN_ia64_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info) { struct elfNN_ia64_allocate_data data; struct elfNN_ia64_link_hash_table *ia64_info; @@ -3635,13 +3452,13 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) /* Allocate the GOT entries. */ - if (ia64_info->got_sec) + if (ia64_info->root.sgot) { data.ofs = 0; elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_global_data_got, &data); elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_global_fptr_got, &data); elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_local_got, &data); - ia64_info->got_sec->size = data.ofs; + ia64_info->root.sgot->size = data.ofs; } /* Allocate the FPTR entries. */ @@ -3680,7 +3497,7 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) BFD_ASSERT (ia64_info->root.dynamic_sections_created); - ia64_info->plt_sec->size = data.ofs; + ia64_info->root.splt->size = data.ofs; /* If we've got a .plt, we need some extra memory for the dynamic linker. We stuff these in .got.plt. */ @@ -3703,7 +3520,7 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) required. */ if (info->shared && ia64_info->self_dtpmod_offset != (bfd_vma) -1) - ia64_info->rel_got_sec->size += sizeof (ElfNN_External_Rela); + ia64_info->root.srelgot->size += sizeof (ElfNN_External_Rela); data.only_got = FALSE; elfNN_ia64_dyn_sym_traverse (ia64_info, allocate_dynrel_entries, &data); } @@ -3727,12 +3544,12 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) strip = (sec->size == 0); - if (sec == ia64_info->got_sec) + if (sec == ia64_info->root.sgot) strip = FALSE; - else if (sec == ia64_info->rel_got_sec) + else if (sec == ia64_info->root.srelgot) { if (strip) - ia64_info->rel_got_sec = NULL; + ia64_info->root.srelgot = NULL; else /* We use the reloc_count field as a counter if we need to copy relocs into the output file. */ @@ -3752,10 +3569,10 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) copy relocs into the output file. */ sec->reloc_count = 0; } - else if (sec == ia64_info->plt_sec) + else if (sec == ia64_info->root.splt) { if (strip) - ia64_info->plt_sec = NULL; + ia64_info->root.splt = NULL; } else if (sec == ia64_info->pltoff_sec) { @@ -3857,10 +3674,8 @@ elfNN_ia64_size_dynamic_sections (output_bfd, info) } static bfd_reloc_status_type -elfNN_ia64_install_value (hit_addr, v, r_type) - bfd_byte *hit_addr; - bfd_vma v; - unsigned int r_type; +elfNN_ia64_install_value (bfd_byte *hit_addr, bfd_vma v, + unsigned int r_type) { const struct ia64_operand *op; int bigendian = 0, shift = 0; @@ -4082,16 +3897,10 @@ elfNN_ia64_install_value (hit_addr, v, r_type) } static void -elfNN_ia64_install_dyn_reloc (abfd, info, sec, srel, offset, type, - dynindx, addend) - bfd *abfd; - struct bfd_link_info *info; - asection *sec; - asection *srel; - bfd_vma offset; - unsigned int type; - long dynindx; - bfd_vma addend; +elfNN_ia64_install_dyn_reloc (bfd *abfd, struct bfd_link_info *info, + asection *sec, asection *srel, + bfd_vma offset, unsigned int type, + long dynindx, bfd_vma addend) { Elf_Internal_Rela outrel; bfd_byte *loc; @@ -4121,14 +3930,10 @@ elfNN_ia64_install_dyn_reloc (abfd, info, sec, srel, offset, type, and return the gp-relative address of the linkage table entry. */ static bfd_vma -set_got_entry (abfd, info, dyn_i, dynindx, addend, value, dyn_r_type) - bfd *abfd; - struct bfd_link_info *info; - struct elfNN_ia64_dyn_sym_info *dyn_i; - long dynindx; - bfd_vma addend; - bfd_vma value; - unsigned int dyn_r_type; +set_got_entry (bfd *abfd, struct bfd_link_info *info, + struct elfNN_ia64_dyn_sym_info *dyn_i, + long dynindx, bfd_vma addend, bfd_vma value, + unsigned int dyn_r_type) { struct elfNN_ia64_link_hash_table *ia64_info; asection *got_sec; @@ -4136,7 +3941,7 @@ set_got_entry (abfd, info, dyn_i, dynindx, addend, value, dyn_r_type) bfd_vma got_offset; ia64_info = elfNN_ia64_hash_table (info); - got_sec = ia64_info->got_sec; + got_sec = ia64_info->root.sgot; switch (dyn_r_type) { @@ -4247,7 +4052,7 @@ set_got_entry (abfd, info, dyn_i, dynindx, addend, value, dyn_r_type) } elfNN_ia64_install_dyn_reloc (abfd, NULL, got_sec, - ia64_info->rel_got_sec, + ia64_info->root.srelgot, got_offset, dyn_r_type, dynindx, addend); } @@ -4265,11 +4070,9 @@ set_got_entry (abfd, info, dyn_i, dynindx, addend, value, dyn_r_type) address and its global pointer. Return the descriptor's address. */ static bfd_vma -set_fptr_entry (abfd, info, dyn_i, value) - bfd *abfd; - struct bfd_link_info *info; - struct elfNN_ia64_dyn_sym_info *dyn_i; - bfd_vma value; +set_fptr_entry (bfd *abfd, struct bfd_link_info *info, + struct elfNN_ia64_dyn_sym_info *dyn_i, + bfd_vma value) { struct elfNN_ia64_link_hash_table *ia64_info; asection *fptr_sec; @@ -4317,12 +4120,9 @@ set_fptr_entry (abfd, info, dyn_i, value) and its global pointer. Return the descriptor's address. */ static bfd_vma -set_pltoff_entry (abfd, info, dyn_i, value, is_plt) - bfd *abfd; - struct bfd_link_info *info; - struct elfNN_ia64_dyn_sym_info *dyn_i; - bfd_vma value; - bfd_boolean is_plt; +set_pltoff_entry (bfd *abfd, struct bfd_link_info *info, + struct elfNN_ia64_dyn_sym_info *dyn_i, + bfd_vma value, bfd_boolean is_plt) { struct elfNN_ia64_link_hash_table *ia64_info; asection *pltoff_sec; @@ -4382,12 +4182,9 @@ set_pltoff_entry (abfd, info, dyn_i, value, is_plt) is assigned offset round(2 * size of pointer, PT_TLS p_align). */ static bfd_vma -elfNN_ia64_tprel_base (info) - struct bfd_link_info *info; +elfNN_ia64_tprel_base (struct bfd_link_info *info) { asection *tls_sec = elf_hash_table (info)->tls_sec; - - BFD_ASSERT (tls_sec != NULL); return tls_sec->vma - align_power ((bfd_vma) ARCH_SIZE / 4, tls_sec->alignment_power); } @@ -4397,10 +4194,8 @@ elfNN_ia64_tprel_base (info) This is PT_TLS segment p_vaddr. */ static bfd_vma -elfNN_ia64_dtprel_base (info) - struct bfd_link_info *info; +elfNN_ia64_dtprel_base (struct bfd_link_info *info) { - BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL); return elf_hash_table (info)->tls_sec->vma; } @@ -4411,9 +4206,7 @@ elfNN_ia64_dtprel_base (info) static bfd *elfNN_ia64_unwind_entry_compare_bfd; static int -elfNN_ia64_unwind_entry_compare (a, b) - const PTR a; - const PTR b; +elfNN_ia64_unwind_entry_compare (const PTR a, const PTR b) { bfd_vma av, bv; @@ -4425,9 +4218,7 @@ elfNN_ia64_unwind_entry_compare (a, b) /* Make sure we've got ourselves a nice fat __gp value. */ static bfd_boolean -elfNN_ia64_choose_gp (abfd, info) - bfd *abfd; - struct bfd_link_info *info; +elfNN_ia64_choose_gp (bfd *abfd, struct bfd_link_info *info) { bfd_vma min_vma = (bfd_vma) -1, max_vma = 0; bfd_vma min_short_vma = min_vma, max_short_vma = 0; @@ -4482,7 +4273,7 @@ elfNN_ia64_choose_gp (abfd, info) { /* Pick a sensible value. */ - asection *got_sec = ia64_info->got_sec; + asection *got_sec = ia64_info->root.sgot; /* Start with just the address of the .got. */ if (got_sec) @@ -4543,9 +4334,7 @@ elfNN_ia64_choose_gp (abfd, info) } static bfd_boolean -elfNN_ia64_final_link (abfd, info) - bfd *abfd; - struct bfd_link_info *info; +elfNN_ia64_final_link (bfd *abfd, struct bfd_link_info *info) { struct elfNN_ia64_link_hash_table *ia64_info; asection *unwind_output_sec; @@ -4614,16 +4403,14 @@ elfNN_ia64_final_link (abfd, info) } static bfd_boolean -elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, - contents, relocs, local_syms, local_sections) - 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; +elfNN_ia64_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 elfNN_ia64_link_hash_table *ia64_info; Elf_Internal_Shdr *symtab_hdr; @@ -5039,8 +4826,8 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, /* Should have caught this earlier. */ BFD_ASSERT (rel->r_addend == 0); - value = (ia64_info->plt_sec->output_section->vma - + ia64_info->plt_sec->output_offset + value = (ia64_info->root.splt->output_section->vma + + ia64_info->root.splt->output_offset + dyn_i->plt2_offset); } else @@ -5101,24 +4888,11 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, case R_IA64_SEGREL64MSB: case R_IA64_SEGREL64LSB: { - struct elf_segment_map *m; - Elf_Internal_Phdr *p; - /* Find the segment that contains the output_section. */ - for (m = elf_tdata (output_bfd)->segment_map, - p = elf_tdata (output_bfd)->phdr; - m != NULL; - m = m->next, p++) - { - int i; - for (i = m->count - 1; i >= 0; i--) - if (m->sections[i] == input_section->output_section) - break; - if (i >= 0) - break; - } + Elf_Internal_Phdr *p = _bfd_elf_find_segment_containing_section + (output_bfd, input_section->output_section); - if (m == NULL) + if (p == NULL) { r = bfd_reloc_notsupported; } @@ -5191,6 +4965,8 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, case R_IA64_TPREL14: case R_IA64_TPREL22: case R_IA64_TPREL64I: + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; value -= elfNN_ia64_tprel_base (info); r = elfNN_ia64_install_value (hit_addr, value, r_type); break; @@ -5202,6 +4978,8 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, case R_IA64_DTPREL32MSB: case R_IA64_DTPREL64LSB: case R_IA64_DTPREL64MSB: + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; value -= elfNN_ia64_dtprel_base (info); r = elfNN_ia64_install_value (hit_addr, value, r_type); break; @@ -5220,6 +4998,8 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, case R_IA64_LTOFF_TPREL22: if (!dynamic_symbol_p) { + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; if (!info->shared) value -= elfNN_ia64_tprel_base (info); else @@ -5237,7 +5017,11 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, break; case R_IA64_LTOFF_DTPREL22: if (!dynamic_symbol_p) - value -= elfNN_ia64_dtprel_base (info); + { + if (elf_hash_table (info)->tls_sec == NULL) + goto missing_tls_sec; + value -= elfNN_ia64_dtprel_base (info); + } got_r_type = R_IA64_DTPRELNNLSB; break; } @@ -5288,6 +5072,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, case bfd_reloc_outofrange: case bfd_reloc_overflow: default: +missing_tls_sec: { const char *name; @@ -5299,6 +5084,25 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, switch (r_type) { + case R_IA64_TPREL14: + case R_IA64_TPREL22: + case R_IA64_TPREL64I: + case R_IA64_DTPREL14: + case R_IA64_DTPREL22: + case R_IA64_DTPREL64I: + case R_IA64_DTPREL32LSB: + case R_IA64_DTPREL32MSB: + case R_IA64_DTPREL64LSB: + case R_IA64_DTPREL64MSB: + case R_IA64_LTOFF_TPREL22: + case R_IA64_LTOFF_DTPMOD22: + case R_IA64_LTOFF_DTPREL22: + (*_bfd_error_handler) + (_("%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'."), + input_bfd, input_section, howto->name, name, + rel->r_offset); + break; + case R_IA64_PCREL21B: case R_IA64_PCREL21BI: case R_IA64_PCREL21M: @@ -5337,11 +5141,10 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, } static bfd_boolean -elfNN_ia64_finish_dynamic_symbol (output_bfd, info, h, sym) - bfd *output_bfd; - struct bfd_link_info *info; - struct elf_link_hash_entry *h; - Elf_Internal_Sym *sym; +elfNN_ia64_finish_dynamic_symbol (bfd *output_bfd, + struct bfd_link_info *info, + struct elf_link_hash_entry *h, + Elf_Internal_Sym *sym) { struct elfNN_ia64_link_hash_table *ia64_info; struct elfNN_ia64_dyn_sym_info *dyn_i; @@ -5362,7 +5165,7 @@ elfNN_ia64_finish_dynamic_symbol (output_bfd, info, h, sym) /* Initialize the minimal PLT entry. */ index = (dyn_i->plt_offset - PLT_HEADER_SIZE) / PLT_MIN_ENTRY_SIZE; - plt_sec = ia64_info->plt_sec; + plt_sec = ia64_info->root.splt; loc = plt_sec->contents + dyn_i->plt_offset; memcpy (loc, plt_min_entry, PLT_MIN_ENTRY_SIZE); @@ -5426,9 +5229,8 @@ elfNN_ia64_finish_dynamic_symbol (output_bfd, info, h, sym) } static bfd_boolean -elfNN_ia64_finish_dynamic_sections (abfd, info) - bfd *abfd; - struct bfd_link_info *info; +elfNN_ia64_finish_dynamic_sections (bfd *abfd, + struct bfd_link_info *info) { struct elfNN_ia64_link_hash_table *ia64_info; bfd *dynobj; @@ -5492,9 +5294,9 @@ elfNN_ia64_finish_dynamic_sections (abfd, info) } /* Initialize the PLT0 entry. */ - if (ia64_info->plt_sec) + if (ia64_info->root.splt) { - bfd_byte *loc = ia64_info->plt_sec->contents; + bfd_byte *loc = ia64_info->root.splt->contents; bfd_vma pltres; memcpy (loc, plt_header, PLT_HEADER_SIZE); @@ -5514,9 +5316,7 @@ elfNN_ia64_finish_dynamic_sections (abfd, info) /* Function to keep IA-64 specific file flags. */ static bfd_boolean -elfNN_ia64_set_private_flags (abfd, flags) - bfd *abfd; - flagword flags; +elfNN_ia64_set_private_flags (bfd *abfd, flagword flags) { BFD_ASSERT (!elf_flags_init (abfd) || elf_elfheader (abfd)->e_flags == flags); @@ -5529,8 +5329,7 @@ elfNN_ia64_set_private_flags (abfd, flags) /* Merge backend specific data from an object file to the output object file when linking. */ static bfd_boolean -elfNN_ia64_merge_private_bfd_data (ibfd, obfd) - bfd *ibfd, *obfd; +elfNN_ia64_merge_private_bfd_data (bfd *ibfd, bfd *obfd) { flagword out_flags; flagword in_flags; @@ -5618,9 +5417,7 @@ elfNN_ia64_merge_private_bfd_data (ibfd, obfd) } static bfd_boolean -elfNN_ia64_print_private_bfd_data (abfd, ptr) - bfd *abfd; - PTR ptr; +elfNN_ia64_print_private_bfd_data (bfd *abfd, PTR ptr) { FILE *file = (FILE *) ptr; flagword flags = elf_elfheader (abfd)->e_flags; @@ -5642,8 +5439,7 @@ elfNN_ia64_print_private_bfd_data (abfd, ptr) } static enum elf_reloc_type_class -elfNN_ia64_reloc_type_class (rela) - const Elf_Internal_Rela *rela; +elfNN_ia64_reloc_type_class (const Elf_Internal_Rela *rela) { switch ((int) ELFNN_R_TYPE (rela->r_info)) { @@ -5770,9 +5566,8 @@ elfNN_ia64_hpux_vec (const bfd_target *vec) } static void -elfNN_hpux_post_process_headers (abfd, info) - bfd *abfd; - struct bfd_link_info *info ATTRIBUTE_UNUSED; +elfNN_hpux_post_process_headers (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED) { Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); @@ -5780,11 +5575,9 @@ elfNN_hpux_post_process_headers (abfd, info) i_ehdrp->e_ident[EI_ABIVERSION] = 1; } -bfd_boolean -elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval) - bfd *abfd ATTRIBUTE_UNUSED; - asection *sec; - int *retval; +static bfd_boolean +elfNN_hpux_backend_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED, + asection *sec, int *retval) { if (bfd_is_com_section (sec)) { @@ -5810,6 +5603,267 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, } } +static bfd_boolean +elfNN_vms_section_from_shdr (bfd *abfd, + Elf_Internal_Shdr *hdr, + const char *name, + int shindex) +{ + asection *newsect; + + switch (hdr->sh_type) + { + case SHT_IA_64_VMS_TRACE: + case SHT_IA_64_VMS_DEBUG: + case SHT_IA_64_VMS_DEBUG_STR: + break; + + default: + return elfNN_ia64_section_from_shdr (abfd, hdr, name, shindex); + } + + if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex)) + return FALSE; + newsect = hdr->bfd_section; + + return TRUE; +} + +static bfd_boolean +elfNN_vms_object_p (bfd *abfd) +{ + Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); + Elf_Internal_Phdr *i_phdr = elf_tdata (abfd)->phdr; + unsigned int i; + unsigned int num_text = 0; + unsigned int num_data = 0; + unsigned int num_rodata = 0; + char name[16]; + + if (!elfNN_ia64_object_p (abfd)) + return FALSE; + + for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++) + { + /* Is there a section for this segment? */ + bfd_vma base_vma = i_phdr->p_vaddr; + bfd_vma limit_vma = base_vma + i_phdr->p_filesz; + + if (i_phdr->p_type != PT_LOAD) + continue; + + again: + while (base_vma < limit_vma) + { + bfd_vma next_vma = limit_vma; + asection *nsec; + asection *sec; + flagword flags; + char *nname = NULL; + + /* Find a section covering base_vma. */ + for (sec = abfd->sections; sec != NULL; sec = sec->next) + { + if ((sec->flags & (SEC_ALLOC | SEC_LOAD)) == 0) + continue; + if (sec->vma <= base_vma && sec->vma + sec->size > base_vma) + { + base_vma = sec->vma + sec->size; + goto again; + } + if (sec->vma < next_vma && sec->vma + sec->size >= base_vma) + next_vma = sec->vma; + } + + /* No section covering [base_vma; next_vma). Create a fake one. */ + flags = SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS; + if (i_phdr->p_flags & PF_X) + { + flags |= SEC_CODE; + if (num_text++ == 0) + nname = ".text"; + else + sprintf (name, ".text$%u", num_text); + } + else if ((i_phdr->p_flags & (PF_R | PF_W)) == PF_R) + { + flags |= SEC_READONLY; + sprintf (name, ".rodata$%u", num_rodata++); + } + else + { + flags |= SEC_DATA; + sprintf (name, ".data$%u", num_data++); + } + + /* Allocate name. */ + if (nname == NULL) + { + size_t name_len = strlen (name) + 1; + nname = bfd_alloc (abfd, name_len); + if (nname == NULL) + return FALSE; + memcpy (nname, name, name_len); + } + + /* Create and fill new section. */ + nsec = bfd_make_section_anyway_with_flags (abfd, nname, flags); + if (nsec == NULL) + return FALSE; + nsec->vma = base_vma; + nsec->size = next_vma - base_vma; + nsec->filepos = i_phdr->p_offset + (base_vma - i_phdr->p_vaddr); + + base_vma = next_vma; + } + } + return TRUE; +} + +static void +elfNN_vms_post_process_headers (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED) +{ + Elf_Internal_Ehdr *i_ehdrp = elf_elfheader (abfd); + + i_ehdrp->e_ident[EI_OSABI] = ELFOSABI_OPENVMS; + i_ehdrp->e_ident[EI_ABIVERSION] = 2; +} + +static bfd_boolean +elfNN_vms_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, ".text") == 0) + hdr->sh_flags |= SHF_IA_64_VMS_SHARED; + else if ((strcmp (name, ".debug") == 0) + || (strcmp (name, ".debug_abbrev") == 0) + || (strcmp (name, ".debug_aranges") == 0) + || (strcmp (name, ".debug_frame") == 0) + || (strcmp (name, ".debug_info") == 0) + || (strcmp (name, ".debug_loc") == 0) + || (strcmp (name, ".debug_macinfo") == 0) + || (strcmp (name, ".debug_pubnames") == 0) + || (strcmp (name, ".debug_pubtypes") == 0)) + hdr->sh_type = SHT_IA_64_VMS_DEBUG; + else if ((strcmp (name, ".debug_line") == 0) + || (strcmp (name, ".debug_ranges") == 0)) + hdr->sh_type = SHT_IA_64_VMS_TRACE; + else if (strcmp (name, ".debug_str") == 0) + hdr->sh_type = SHT_IA_64_VMS_DEBUG_STR; + else if (strcmp (name, ".vms_display_name_info") == 0) + { + int idx, symcount; + asymbol **syms; + struct elf_obj_tdata *t = elf_tdata (abfd); + int buf[2]; + int demangler_sym_idx = -1; + + symcount = bfd_get_symcount (abfd); + syms = bfd_get_outsymbols (abfd); + for (idx = 0; idx < symcount; idx++) + { + asymbol *sym; + sym = syms[idx]; + if ((sym->flags & (BSF_DEBUGGING | BSF_DYNAMIC)) + && strchr (sym->name, '@') + && (strcmp (sym->section->name, BFD_ABS_SECTION_NAME) == 0)) + { + demangler_sym_idx = sym->udata.i; + break; + } + } + + hdr->sh_type = SHT_IA_64_VMS_DISPLAY_NAME_INFO; + hdr->sh_entsize = 4; + hdr->sh_addralign = 0; + hdr->sh_link = t->symtab_section; + + /* Find symtab index of demangler routine and stuff it in + the second long word of section data. */ + + if (demangler_sym_idx > -1) + { + bfd_seek (abfd, hdr->sh_offset, SEEK_SET); + bfd_bread (buf, hdr->sh_size, abfd); + buf [1] = demangler_sym_idx; + bfd_seek (abfd, hdr->sh_offset, SEEK_SET); + bfd_bwrite (buf, hdr->sh_size, abfd); + } + } + } + + return TRUE; +} + +/* The final processing done just before writing out a VMS IA-64 ELF + object file. */ + +static void +elfNN_vms_final_write_processing (bfd *abfd, + bfd_boolean linker ATTRIBUTE_UNUSED) +{ + Elf_Internal_Shdr *hdr; + asection *s; + int unwind_info_sect_idx = 0; + + for (s = abfd->sections; s; s = s->next) + { + hdr = &elf_section_data (s)->this_hdr; + + if (strcmp (bfd_get_section_name (abfd, hdr->bfd_section), + ".IA_64.unwind_info") == 0) + unwind_info_sect_idx = elf_section_data (s)->this_idx; + + switch (hdr->sh_type) + { + case SHT_IA_64_UNWIND: + /* VMS requires sh_info to point to the unwind info section. */ + hdr->sh_info = unwind_info_sect_idx; + break; + } + } + + if (! elf_flags_init (abfd)) + { + unsigned long flags = 0; + + if (abfd->xvec->byteorder == BFD_ENDIAN_BIG) + flags |= EF_IA_64_BE; + if (bfd_get_mach (abfd) == bfd_mach_ia64_elf64) + flags |= EF_IA_64_ABI64; + + elf_elfheader(abfd)->e_flags = flags; + elf_flags_init (abfd) = TRUE; + } +} + +static bfd_boolean +elfNN_vms_close_and_cleanup (bfd *abfd) +{ + if (bfd_get_format (abfd) == bfd_object) + { + long isize, irsize; + + if (elf_shstrtab (abfd) != NULL) + _bfd_elf_strtab_free (elf_shstrtab (abfd)); + + /* Pad to 8 byte boundary for IPF/VMS. */ + isize = bfd_get_size (abfd); + if ((irsize = isize/8*8) < isize) + { + int ishort = (irsize + 8) - isize; + bfd_seek (abfd, isize, SEEK_SET); + bfd_bwrite (bfd_zmalloc (ishort), ishort, abfd); + } + } + + return _bfd_generic_close_and_cleanup (abfd); +} #define TARGET_LITTLE_SYM bfd_elfNN_ia64_little_vec #define TARGET_LITTLE_NAME "elfNN-ia64-little" @@ -5933,8 +5987,6 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, #undef elf_backend_want_p_paddr_set_to_zero #define elf_backend_want_p_paddr_set_to_zero 1 -#undef ELF_MAXPAGESIZE -#define ELF_MAXPAGESIZE 0x1000 /* 4K */ #undef ELF_COMMONPAGESIZE #undef ELF_OSABI #define ELF_OSABI ELFOSABI_HPUX @@ -5944,4 +5996,48 @@ elfNN_hpux_backend_symbol_processing (bfd *abfd ATTRIBUTE_UNUSED, #include "elfNN-target.h" +/* VMS-specific vectors. */ + +#undef TARGET_LITTLE_SYM +#define TARGET_LITTLE_SYM bfd_elfNN_ia64_vms_vec +#undef TARGET_LITTLE_NAME +#define TARGET_LITTLE_NAME "elfNN-ia64-vms" +#undef TARGET_BIG_SYM +#undef TARGET_BIG_NAME + +/* These are VMS specific functions. */ + +#undef elf_backend_object_p +#define elf_backend_object_p elfNN_vms_object_p + +#undef elf_backend_section_from_shdr +#define elf_backend_section_from_shdr elfNN_vms_section_from_shdr + +#undef elf_backend_post_process_headers +#define elf_backend_post_process_headers elfNN_vms_post_process_headers + +#undef elf_backend_section_processing +#define elf_backend_section_processing elfNN_vms_section_processing + +#undef elf_backend_final_write_processing +#define elf_backend_final_write_processing elfNN_vms_final_write_processing + +#undef bfd_elfNN_close_and_cleanup +#define bfd_elfNN_close_and_cleanup elfNN_vms_close_and_cleanup + +#undef elf_backend_section_from_bfd_section + +#undef elf_backend_symbol_processing + #undef elf_backend_want_p_paddr_set_to_zero + +#undef ELF_OSABI +#define ELF_OSABI ELFOSABI_OPENVMS + +#undef ELF_MAXPAGESIZE +#define ELF_MAXPAGESIZE 0x10000 /* 64KB */ + +#undef elfNN_bed +#define elfNN_bed elfNN_ia64_vms_bed + +#include "elfNN-target.h" diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index b1eed9f..3a1c8ba 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Most of the information added by Ian Lance Taylor, Cygnus Support, . @@ -112,6 +112,30 @@ struct mips_got_entry long gotidx; }; +/* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND]. + The structures form a non-overlapping list that is sorted by increasing + MIN_ADDEND. */ +struct mips_got_page_range +{ + struct mips_got_page_range *next; + bfd_signed_vma min_addend; + bfd_signed_vma max_addend; +}; + +/* This structure describes the range of addends that are applied to page + relocations against a given symbol. */ +struct mips_got_page_entry +{ + /* The input bfd in which the symbol is defined. */ + bfd *abfd; + /* The index of the symbol, as stored in the relocation r_info. */ + long symndx; + /* The ranges for this page entry. */ + struct mips_got_page_range *ranges; + /* The maximum number of page entries needed for RANGES. */ + bfd_vma num_pages; +}; + /* This structure is used to hold .got information when linking. */ struct mips_got_info @@ -121,17 +145,23 @@ struct mips_got_info struct elf_link_hash_entry *global_gotsym; /* The number of global .got entries. */ unsigned int global_gotno; + /* The number of global .got entries that are in the GGA_RELOC_ONLY area. */ + unsigned int reloc_only_gotno; /* The number of .got slots used for TLS. */ unsigned int tls_gotno; /* The first unused TLS .got entry. Used only during mips_elf_initialize_tls_index. */ unsigned int tls_assigned_gotno; - /* The number of local .got entries. */ + /* The number of local .got entries, eventually including page entries. */ unsigned int local_gotno; + /* The maximum number of page entries needed. */ + unsigned int page_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; + /* A hash table of mips_got_page_entry structures. */ + struct htab *got_page_entries; /* A hash table mapping input bfds to other mips_got_info. NULL unless multi-got was necessary. */ struct htab *bfd2got; @@ -173,10 +203,8 @@ struct mips_elf_got_per_bfd_arg /* The maximum number of got entries that can be addressed with a 16-bit offset. */ unsigned int max_count; - /* The number of local and global entries in the primary got. */ - unsigned int primary_count; - /* The number of local and global entries in the current got. */ - unsigned int current_count; + /* The maximum number of page entries needed by each got. */ + unsigned int max_pages; /* The total number of global entries which will live in the primary got and be automatically relocated. This includes those not referenced by the primary GOT but included in @@ -208,7 +236,6 @@ struct _mips_elf_section_data struct bfd_elf_section_data elf; union { - struct mips_got_info *got_info; bfd_byte *tdata; } u; }; @@ -216,6 +243,67 @@ struct _mips_elf_section_data #define mips_elf_section_data(sec) \ ((struct _mips_elf_section_data *) elf_section_data (sec)) +#define is_mips_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == MIPS_ELF_TDATA) + +/* The ABI says that every symbol used by dynamic relocations must have + a global GOT entry. Among other things, this provides the dynamic + linker with a free, directly-indexed cache. The GOT can therefore + contain symbols that are not referenced by GOT relocations themselves + (in other words, it may have symbols that are not referenced by things + like R_MIPS_GOT16 and R_MIPS_GOT_PAGE). + + GOT relocations are less likely to overflow if we put the associated + GOT entries towards the beginning. We therefore divide the global + GOT entries into two areas: "normal" and "reloc-only". Entries in + the first area can be used for both dynamic relocations and GP-relative + accesses, while those in the "reloc-only" area are for dynamic + relocations only. + + These GGA_* ("Global GOT Area") values are organised so that lower + values are more general than higher values. Also, non-GGA_NONE + values are ordered by the position of the area in the GOT. */ +#define GGA_NORMAL 0 +#define GGA_RELOC_ONLY 1 +#define GGA_NONE 2 + +/* Information about a non-PIC interface to a PIC function. There are + two ways of creating these interfaces. The first is to add: + + lui $25,%hi(func) + addiu $25,$25,%lo(func) + + immediately before a PIC function "func". The second is to add: + + lui $25,%hi(func) + j func + addiu $25,$25,%lo(func) + + to a separate trampoline section. + + Stubs of the first kind go in a new section immediately before the + target function. Stubs of the second kind go in a single section + pointed to by the hash table's "strampoline" field. */ +struct mips_elf_la25_stub { + /* The generated section that contains this stub. */ + asection *stub_section; + + /* The offset of the stub from the start of STUB_SECTION. */ + bfd_vma offset; + + /* One symbol for the original function. Its location is available + in H->root.root.u.def. */ + struct mips_elf_link_hash_entry *h; +}; + +/* Macros for populating a mips_elf_la25_stub. */ + +#define LA25_LUI(VAL) (0x3c190000 | (VAL)) /* lui t9,VAL */ +#define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */ +#define LA25_ADDIU(VAL) (0x27390000 | (VAL)) /* addiu t9,t9,VAL */ + /* This structure is passed to mips_elf_sort_hash_table_f when sorting the dynamic symbols. */ @@ -246,28 +334,17 @@ struct mips_elf_link_hash_entry /* External symbol information. */ EXTR esym; + /* The la25 stub we have created for ths symbol, if any. */ + struct mips_elf_la25_stub *la25_stub; + /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against this symbol. */ unsigned int possibly_dynamic_relocs; - /* If the R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 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_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition", - p. 4-20. */ - bfd_boolean no_fn_stub; - /* If there is a stub that 32 bit functions should use to call this 16 bit function, this points to the section containing the stub. */ asection *fn_stub; - /* Whether we need the fn_stub; this is set if this symbol appears - in any relocs other than a 16 bit call. */ - bfd_boolean need_fn_stub; - /* If there is a stub that 16 bit functions should use to call this 32 bit function, this points to the section containing the stub. */ asection *call_stub; @@ -276,16 +353,6 @@ struct mips_elf_link_hash_entry being called returns a floating point value. */ asection *call_fp_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; - - /* Are we referenced by some kind of relocation? */ - bfd_boolean is_relocation_target; - - /* Are we referenced by branch relocations? */ - bfd_boolean is_branch_target; - #define GOT_NORMAL 0 #define GOT_TLS_GD 1 #define GOT_TLS_LDM 2 @@ -293,6 +360,7 @@ struct mips_elf_link_hash_entry #define GOT_TLS_OFFSET_DONE 0x40 #define GOT_TLS_DONE 0x80 unsigned char tls_type; + /* This is only used in single-GOT mode; in multi-GOT mode there is one mips_got_entry per GOT entry, so the offset is stored there. In single-GOT mode there may be many mips_got_entry @@ -300,6 +368,37 @@ struct mips_elf_link_hash_entry possible to use root.got.offset instead, but that field is overloaded already. */ bfd_vma tls_got_offset; + + /* The highest GGA_* value that satisfies all references to this symbol. */ + unsigned int global_got_area : 2; + + /* True if one of the relocations described by possibly_dynamic_relocs + is against a readonly section. */ + unsigned int readonly_reloc : 1; + + /* True if there is a relocation against this symbol that must be + resolved by the static linker (in other words, if the relocation + cannot possibly be made dynamic). */ + unsigned int has_static_relocs : 1; + + /* True if we must not create a .MIPS.stubs entry for this symbol. + This is set, for example, if there are relocations related to + taking the function's address, i.e. any but R_MIPS_CALL*16 ones. + See "MIPS ABI Supplement, 3rd Edition", p. 4-20. */ + unsigned int no_fn_stub : 1; + + /* Whether we need the fn_stub; this is true if this symbol appears + in any relocs other than a 16 bit call. */ + unsigned int need_fn_stub : 1; + + /* True if this symbol is referenced by branch relocations from + any non-PIC input file. This is used to determine whether an + la25 stub is required. */ + unsigned int has_nonpic_branches : 1; + + /* Does this symbol need a traditional MIPS lazy-binding stub + (as opposed to a PLT entry)? */ + unsigned int needs_lazy_stub : 1; }; /* MIPS ELF linker hash table. */ @@ -312,23 +411,32 @@ struct mips_elf_link_hash_table /* String section indices for the dynamic section symbols. */ bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES]; #endif + /* The number of .rtproc entries. */ bfd_size_type procedure_count; + /* The size of the .compact_rel section (if SGI_COMPAT). */ bfd_size_type compact_rel_size; + /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry is set to the address of __rld_obj_head as in IRIX5. */ bfd_boolean use_rld_obj_head; + /* This is the value of the __rld_map or __rld_obj_head symbol. */ bfd_vma rld_value; + /* This is set if we see any mips16 stub sections. */ bfd_boolean mips16_stubs_seen; - /* True if we've computed the size of the GOT. */ - bfd_boolean computed_got_sizes; + + /* True if we can generate copy relocs and PLTs. */ + bfd_boolean use_plts_and_copy_relocs; + /* True if we're generating code for VxWorks. */ bfd_boolean is_vxworks; + /* True if we already reported the small-data section overflow. */ bfd_boolean small_data_overflow_reported; + /* Shortcuts to some dynamic sections, or NULL if they are not being used. */ asection *srelbss; @@ -337,12 +445,53 @@ struct mips_elf_link_hash_table asection *srelplt2; asection *sgotplt; asection *splt; - /* The size of the PLT header in bytes (VxWorks only). */ + asection *sstubs; + asection *sgot; + + /* The master GOT information. */ + struct mips_got_info *got_info; + + /* The size of the PLT header in bytes. */ bfd_vma plt_header_size; - /* The size of a PLT entry in bytes (VxWorks only). */ + + /* The size of a PLT entry in bytes. */ bfd_vma plt_entry_size; + + /* The number of functions that need a lazy-binding stub. */ + bfd_vma lazy_stub_count; + /* The size of a function stub entry in bytes. */ bfd_vma function_stub_size; + + /* The number of reserved entries at the beginning of the GOT. */ + unsigned int reserved_gotno; + + /* The section used for mips_elf_la25_stub trampolines. + See the comment above that structure for details. */ + asection *strampoline; + + /* A table of mips_elf_la25_stubs, indexed by (input_section, offset) + pairs. */ + htab_t la25_stubs; + + /* A function FN (NAME, IS, OS) that creates a new input section + called NAME and links it to output section OS. If IS is nonnull, + the new section should go immediately before it, otherwise it + should go at the (current) beginning of OS. + + The function returns the new section on success, otherwise it + returns null. */ + asection *(*add_stub_section) (const char *, asection *, asection *); +}; + +/* A structure used to communicate with htab_traverse callbacks. */ +struct mips_htab_traverse_info { + /* The usual link-wide information. */ + struct bfd_link_info *info; + bfd *output_bfd; + + /* Starts off FALSE and is set to TRUE if the link should be aborted. */ + bfd_boolean error; }; #define TLS_RELOC_P(r_type) \ @@ -493,14 +642,12 @@ typedef struct runtime_pdr { #define rpdNil ((pRPDR) 0) static struct mips_got_entry *mips_elf_create_local_got_entry - (bfd *, struct bfd_link_info *, bfd *, struct mips_got_info *, asection *, - bfd_vma, unsigned long, struct mips_elf_link_hash_entry *, int); + (bfd *, struct bfd_link_info *, bfd *, 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 mips16_stub_section_p - (bfd *, asection *); static bfd_boolean mips_elf_create_dynamic_relocation (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *, struct mips_elf_link_hash_entry *, asection *, bfd_vma, @@ -515,6 +662,27 @@ static struct mips_got_info *mips_elf_got_for_ibfd /* This will be used when we sort the dynamic relocation records. */ static bfd *reldyn_sorting_bfd; +/* True if ABFD is for CPUs with load interlocking that include + non-MIPS1 CPUs and R3900. */ +#define LOAD_INTERLOCKS_P(abfd) \ + ( ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \ + || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900)) + +/* True if ABFD is for CPUs that are faster if JAL is converted to BAL. + This should be safe for all architectures. We enable this predicate + for RM9000 for now. */ +#define JAL_TO_BAL_P(abfd) \ + ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000) + +/* True if ABFD is for CPUs that are faster if JALR is converted to BAL. + This should be safe for all architectures. We enable this predicate for + all CPUs. */ +#define JALR_TO_BAL_P(abfd) 1 + +/* True if ABFD is a PIC object. */ +#define PIC_OBJECT_P(abfd) \ + ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0) + /* Nonzero if ABFD is using the N32 ABI. */ #define ABI_N32_P(abfd) \ ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0) @@ -585,6 +753,10 @@ static bfd *reldyn_sorting_bfd; ? bfd_put_64 (abfd, val, ptr) \ : bfd_put_32 (abfd, val, ptr)) +/* The opcode for word-sized loads (LW or LD). */ +#define MIPS_ELF_LOAD_WORD(abfd) \ + (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000) + /* Add a dynamic symbol table-entry. */ #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \ _bfd_elf_add_dynamic_entry (info, tag, val) @@ -618,9 +790,11 @@ static bfd *reldyn_sorting_bfd; #define MINUS_ONE (((bfd_vma)0) - 1) #define MINUS_TWO (((bfd_vma)0) - 2) -/* The number of local .got entries we reserve. */ -#define MIPS_RESERVED_GOTNO(INFO) \ - (mips_elf_hash_table (INFO)->is_vxworks ? 3 : 2) +/* The value to write into got[1] for SVR4 targets, to identify it is + a GNU object. The dynamic linker can then use got[1] to store the + module pointer. */ +#define MIPS_ELF_GNU_GOT1_MASK(abfd) \ + ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31)) /* The offset of $gp from the beginning of the .got section. */ #define ELF_MIPS_GP_OFFSET(INFO) \ @@ -720,8 +894,59 @@ static bfd *reldyn_sorting_bfd; #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 an O32 executable. */ +static const bfd_vma mips_o32_exec_plt0_entry[] = +{ + 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */ + 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */ + 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */ + 0x031cc023, /* subu $24, $24, $28 */ + 0x03e07821, /* move $15, $31 */ + 0x0018c082, /* srl $24, $24, 2 */ + 0x0320f809, /* jalr $25 */ + 0x2718fffe /* subu $24, $24, 2 */ +}; + +/* The format of the first PLT entry in an N32 executable. Different + because gp ($28) is not available; we use t2 ($14) instead. */ +static const bfd_vma mips_n32_exec_plt0_entry[] = +{ + 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ + 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */ + 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ + 0x030ec023, /* subu $24, $24, $14 */ + 0x03e07821, /* move $15, $31 */ + 0x0018c082, /* srl $24, $24, 2 */ + 0x0320f809, /* jalr $25 */ + 0x2718fffe /* subu $24, $24, 2 */ +}; + +/* The format of the first PLT entry in an N64 executable. Different + from N32 because of the increased size of GOT entries. */ +static const bfd_vma mips_n64_exec_plt0_entry[] = +{ + 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */ + 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */ + 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */ + 0x030ec023, /* subu $24, $24, $14 */ + 0x03e07821, /* move $15, $31 */ + 0x0018c0c2, /* srl $24, $24, 3 */ + 0x0320f809, /* jalr $25 */ + 0x2718fffe /* subu $24, $24, 2 */ +}; + +/* The format of subsequent PLT entries. */ +static const bfd_vma mips_exec_plt_entry[] = +{ + 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */ + 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */ + 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */ + 0x03200008 /* jr $25 */ +}; + /* The format of the first PLT entry in a VxWorks executable. */ -static const bfd_vma mips_vxworks_exec_plt0_entry[] = { +static const bfd_vma mips_vxworks_exec_plt0_entry[] = +{ 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */ 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */ 0x8f390008, /* lw t9, 8(t9) */ @@ -731,7 +956,8 @@ static const bfd_vma mips_vxworks_exec_plt0_entry[] = { }; /* The format of subsequent PLT entries. */ -static const bfd_vma mips_vxworks_exec_plt_entry[] = { +static const bfd_vma mips_vxworks_exec_plt_entry[] = +{ 0x10000000, /* b .PLT_resolver */ 0x24180000, /* li t8, */ 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */ @@ -743,7 +969,8 @@ static const bfd_vma mips_vxworks_exec_plt_entry[] = { }; /* The format of the first PLT entry in a VxWorks shared object. */ -static const bfd_vma mips_vxworks_shared_plt0_entry[] = { +static const bfd_vma mips_vxworks_shared_plt0_entry[] = +{ 0x8f990008, /* lw t9, 8(gp) */ 0x00000000, /* nop */ 0x03200008, /* jr t9 */ @@ -753,7 +980,8 @@ static const bfd_vma mips_vxworks_shared_plt0_entry[] = { }; /* The format of subsequent PLT entries. */ -static const bfd_vma mips_vxworks_shared_plt_entry[] = { +static const bfd_vma mips_vxworks_shared_plt_entry[] = +{ 0x10000000, /* b .PLT_resolver */ 0x24180000 /* li t8, */ }; @@ -829,17 +1057,19 @@ mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry, /* We use -2 as a marker to indicate that the information has not been set. -1 means there is no associated ifd. */ ret->esym.ifd = -2; + ret->la25_stub = 0; ret->possibly_dynamic_relocs = 0; - ret->readonly_reloc = FALSE; - ret->no_fn_stub = FALSE; ret->fn_stub = NULL; - ret->need_fn_stub = FALSE; ret->call_stub = NULL; ret->call_fp_stub = NULL; - ret->forced_local = FALSE; - ret->is_branch_target = FALSE; - ret->is_relocation_target = FALSE; ret->tls_type = GOT_NORMAL; + ret->global_got_area = GGA_NONE; + ret->readonly_reloc = FALSE; + ret->has_static_relocs = FALSE; + ret->no_fn_stub = FALSE; + ret->need_fn_stub = FALSE; + ret->has_nonpic_branches = FALSE; + ret->needs_lazy_stub = FALSE; } return (struct bfd_hash_entry *) ret; @@ -1116,16 +1346,128 @@ mips_elf_create_procedure_table (void *handle, bfd *abfd, free (sv); return FALSE; } + +/* We're going to create a stub for H. Create a symbol for the stub's + value and size, to help make the disassembly easier to read. */ + +static bfd_boolean +mips_elf_create_stub_symbol (struct bfd_link_info *info, + struct mips_elf_link_hash_entry *h, + const char *prefix, asection *s, bfd_vma value, + bfd_vma size) +{ + struct bfd_link_hash_entry *bh; + struct elf_link_hash_entry *elfh; + const char *name; + + /* Create a new symbol. */ + name = ACONCAT ((prefix, h->root.root.root.string, NULL)); + bh = NULL; + if (!_bfd_generic_link_add_one_symbol (info, s->owner, name, + BSF_LOCAL, s, value, NULL, + TRUE, FALSE, &bh)) + return FALSE; + + /* Make it a local function. */ + elfh = (struct elf_link_hash_entry *) bh; + elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC); + elfh->size = size; + elfh->forced_local = 1; + return TRUE; +} + +/* We're about to redefine H. Create a symbol to represent H's + current value and size, to help make the disassembly easier + to read. */ + +static bfd_boolean +mips_elf_create_shadow_symbol (struct bfd_link_info *info, + struct mips_elf_link_hash_entry *h, + const char *prefix) +{ + struct bfd_link_hash_entry *bh; + struct elf_link_hash_entry *elfh; + const char *name; + asection *s; + bfd_vma value; + + /* Read the symbol's value. */ + BFD_ASSERT (h->root.root.type == bfd_link_hash_defined + || h->root.root.type == bfd_link_hash_defweak); + s = h->root.root.u.def.section; + value = h->root.root.u.def.value; + + /* Create a new symbol. */ + name = ACONCAT ((prefix, h->root.root.root.string, NULL)); + bh = NULL; + if (!_bfd_generic_link_add_one_symbol (info, s->owner, name, + BSF_LOCAL, s, value, NULL, + TRUE, FALSE, &bh)) + return FALSE; + + /* Make it local and copy the other attributes from H. */ + elfh = (struct elf_link_hash_entry *) bh; + elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type)); + elfh->other = h->root.other; + elfh->size = h->root.size; + elfh->forced_local = 1; + return TRUE; +} + +/* Return TRUE if relocations in SECTION can refer directly to a MIPS16 + function rather than to a hard-float stub. */ + +static bfd_boolean +section_allows_mips16_refs_p (asection *section) +{ + const char *name; + + name = bfd_get_section_name (section->owner, section); + return (FN_STUB_P (name) + || CALL_STUB_P (name) + || CALL_FP_STUB_P (name) + || strcmp (name, ".pdr") == 0); +} + +/* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16 + stub section of some kind. Return the R_SYMNDX of the target + function, or 0 if we can't decide which function that is. */ + +static unsigned long +mips16_stub_symndx (asection *sec ATTRIBUTE_UNUSED, + const Elf_Internal_Rela *relocs, + const Elf_Internal_Rela *relend) +{ + const Elf_Internal_Rela *rel; + + /* Trust the first R_MIPS_NONE relocation, if any. */ + for (rel = relocs; rel < relend; rel++) + if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE) + return ELF_R_SYM (sec->owner, rel->r_info); + + /* Otherwise trust the first relocation, whatever its kind. This is + the traditional behavior. */ + if (relocs < relend) + return ELF_R_SYM (sec->owner, relocs->r_info); + + return 0; +} /* Check the mips16 stubs for a particular symbol, and see if we can discard them. */ -static bfd_boolean -mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, - void *data ATTRIBUTE_UNUSED) +static void +mips_elf_check_mips16_stubs (struct bfd_link_info *info, + struct mips_elf_link_hash_entry *h) { - if (h->root.root.type == bfd_link_hash_warning) - h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; + /* Dynamic symbols must use the standard call interface, in case other + objects try to call them. */ + if (h->fn_stub != NULL + && h->root.dynindx != -1) + { + mips_elf_create_shadow_symbol (info, h, ".mips16."); + h->need_fn_stub = TRUE; + } if (h->fn_stub != NULL && ! h->need_fn_stub) @@ -1140,7 +1482,7 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, } if (h->call_stub != NULL - && h->root.other == STO_MIPS16) + && ELF_ST_IS_MIPS16 (h->root.other)) { /* We don't need the call_stub; this is a 16 bit function, so calls from other 16 bit functions are OK. Clobber the size @@ -1152,7 +1494,7 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, } if (h->call_fp_stub != NULL - && h->root.other == STO_MIPS16) + && ELF_ST_IS_MIPS16 (h->root.other)) { /* We don't need the call_stub; this is a 16 bit function, so calls from other 16 bit functions are OK. Clobber the size @@ -1162,7 +1504,236 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, h->call_fp_stub->reloc_count = 0; h->call_fp_stub->flags |= SEC_EXCLUDE; } +} + +/* Hashtable callbacks for mips_elf_la25_stubs. */ + +static hashval_t +mips_elf_la25_stub_hash (const void *entry_) +{ + const struct mips_elf_la25_stub *entry; + + entry = (struct mips_elf_la25_stub *) entry_; + return entry->h->root.root.u.def.section->id + + entry->h->root.root.u.def.value; +} + +static int +mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_) +{ + const struct mips_elf_la25_stub *entry1, *entry2; + + entry1 = (struct mips_elf_la25_stub *) entry1_; + entry2 = (struct mips_elf_la25_stub *) entry2_; + return ((entry1->h->root.root.u.def.section + == entry2->h->root.root.u.def.section) + && (entry1->h->root.root.u.def.value + == entry2->h->root.root.u.def.value)); +} + +/* Called by the linker to set up the la25 stub-creation code. FN is + the linker's implementation of add_stub_function. Return true on + success. */ + +bfd_boolean +_bfd_mips_elf_init_stubs (struct bfd_link_info *info, + asection *(*fn) (const char *, asection *, + asection *)) +{ + struct mips_elf_link_hash_table *htab; + + htab = mips_elf_hash_table (info); + htab->add_stub_section = fn; + htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash, + mips_elf_la25_stub_eq, NULL); + if (htab->la25_stubs == NULL) + return FALSE; + + return TRUE; +} + +/* Return true if H is a locally-defined PIC function, in the sense + that it might need $25 to be valid on entry. Note that MIPS16 + functions never need $25 to be valid on entry; they set up $gp + using PC-relative instructions instead. */ + +static bfd_boolean +mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h) +{ + return ((h->root.root.type == bfd_link_hash_defined + || h->root.root.type == bfd_link_hash_defweak) + && h->root.def_regular + && !bfd_is_abs_section (h->root.root.u.def.section) + && !ELF_ST_IS_MIPS16 (h->root.other) + && (PIC_OBJECT_P (h->root.root.u.def.section->owner) + || ELF_ST_IS_MIPS_PIC (h->root.other))); +} + +/* STUB describes an la25 stub that we have decided to implement + by inserting an LUI/ADDIU pair before the target function. + Create the section and redirect the function symbol to it. */ + +static bfd_boolean +mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub, + struct bfd_link_info *info) +{ + struct mips_elf_link_hash_table *htab; + char *name; + asection *s, *input_section; + unsigned int align; + + htab = mips_elf_hash_table (info); + + /* Create a unique name for the new section. */ + name = bfd_malloc (11 + sizeof (".text.stub.")); + if (name == NULL) + return FALSE; + sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs)); + + /* Create the section. */ + input_section = stub->h->root.root.u.def.section; + s = htab->add_stub_section (name, input_section, + input_section->output_section); + if (s == NULL) + return FALSE; + + /* Make sure that any padding goes before the stub. */ + align = input_section->alignment_power; + if (!bfd_set_section_alignment (s->owner, s, align)) + return FALSE; + if (align > 3) + s->size = (1 << align) - 8; + + /* Create a symbol for the stub. */ + mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8); + stub->stub_section = s; + stub->offset = s->size; + + /* Allocate room for it. */ + s->size += 8; + return TRUE; +} + +/* STUB describes an la25 stub that we have decided to implement + with a separate trampoline. Allocate room for it and redirect + the function symbol to it. */ + +static bfd_boolean +mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub, + struct bfd_link_info *info) +{ + struct mips_elf_link_hash_table *htab; + asection *s; + + htab = mips_elf_hash_table (info); + + /* Create a trampoline section, if we haven't already. */ + s = htab->strampoline; + if (s == NULL) + { + asection *input_section = stub->h->root.root.u.def.section; + s = htab->add_stub_section (".text", NULL, + input_section->output_section); + if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4)) + return FALSE; + htab->strampoline = s; + } + /* Create a symbol for the stub. */ + mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16); + stub->stub_section = s; + stub->offset = s->size; + + /* Allocate room for it. */ + s->size += 16; + return TRUE; +} + +/* H describes a symbol that needs an la25 stub. Make sure that an + appropriate stub exists and point H at it. */ + +static bfd_boolean +mips_elf_add_la25_stub (struct bfd_link_info *info, + struct mips_elf_link_hash_entry *h) +{ + struct mips_elf_link_hash_table *htab; + struct mips_elf_la25_stub search, *stub; + bfd_boolean use_trampoline_p; + asection *s; + bfd_vma value; + void **slot; + + /* Prefer to use LUI/ADDIU stubs if the function is at the beginning + of the section and if we would need no more than 2 nops. */ + s = h->root.root.u.def.section; + value = h->root.root.u.def.value; + use_trampoline_p = (value != 0 || s->alignment_power > 4); + + /* Describe the stub we want. */ + search.stub_section = NULL; + search.offset = 0; + search.h = h; + + /* See if we've already created an equivalent stub. */ + htab = mips_elf_hash_table (info); + slot = htab_find_slot (htab->la25_stubs, &search, INSERT); + if (slot == NULL) + return FALSE; + + stub = (struct mips_elf_la25_stub *) *slot; + if (stub != NULL) + { + /* We can reuse the existing stub. */ + h->la25_stub = stub; + return TRUE; + } + + /* Create a permanent copy of ENTRY and add it to the hash table. */ + stub = bfd_malloc (sizeof (search)); + if (stub == NULL) + return FALSE; + *stub = search; + *slot = stub; + + h->la25_stub = stub; + return (use_trampoline_p + ? mips_elf_add_la25_trampoline (stub, info) + : mips_elf_add_la25_intro (stub, info)); +} + +/* A mips_elf_link_hash_traverse callback that is called before sizing + sections. DATA points to a mips_htab_traverse_info structure. */ + +static bfd_boolean +mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data) +{ + struct mips_htab_traverse_info *hti; + + hti = (struct mips_htab_traverse_info *) data; + if (h->root.root.type == bfd_link_hash_warning) + h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; + + if (!hti->info->relocatable) + mips_elf_check_mips16_stubs (hti->info, h); + + if (mips_elf_local_pic_function_p (h)) + { + /* H is a function that might need $25 to be valid on entry. + If we're creating a non-PIC relocatable object, mark H as + being PIC. If we're creating a non-relocatable object with + non-PIC branches and jumps to H, make sure that H has an la25 + stub. */ + if (hti->info->relocatable) + { + if (!PIC_OBJECT_P (hti->output_bfd)) + h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other); + } + else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h)) + { + hti->error = TRUE; + return FALSE; + } + } return TRUE; } @@ -1225,8 +1796,18 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2) ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) - R_MIPS16_GPREL is used for GP-relative addressing in mips16 - mode. A typical instruction will have a format like this: + The table below lists the other MIPS16 instruction relocations. + Each one is calculated in the same way as the non-MIPS16 relocation + given on the right, but using the extended MIPS16 layout of 16-bit + immediate fields: + + R_MIPS16_GPREL R_MIPS_GPREL16 + R_MIPS16_GOT16 R_MIPS_GOT16 + R_MIPS16_CALL16 R_MIPS_CALL16 + R_MIPS16_HI16 R_MIPS_HI16 + R_MIPS16_LO16 R_MIPS_LO16 + + A typical instruction will have a format like this: +--------------+--------------------------------+ | EXTEND | Imm 10:5 | Imm 15:11 | @@ -1237,31 +1818,68 @@ mips_elf_check_mips16_stubs (struct mips_elf_link_hash_entry *h, EXTEND is the five bit value 11110. Major is the instruction opcode. - This is handled exactly like R_MIPS_GPREL16, except that the - addend is retrieved and stored as shown in this diagram; that - is, the Imm fields above replace the V-rel16 field. + All we need to do here is shuffle the bits appropriately. + As above, the two 16-bit halves must be swapped on a + little-endian system. */ + +static inline bfd_boolean +mips16_reloc_p (int r_type) +{ + switch (r_type) + { + case R_MIPS16_26: + case R_MIPS16_GPREL: + case R_MIPS16_GOT16: + case R_MIPS16_CALL16: + case R_MIPS16_HI16: + case R_MIPS16_LO16: + return TRUE; - All we need to do here is shuffle the bits appropriately. As - above, the two 16-bit halves must be swapped on a - little-endian system. + default: + return FALSE; + } +} - R_MIPS16_HI16 and R_MIPS16_LO16 are used in mips16 mode to - access data when neither GP-relative nor PC-relative addressing - can be used. They are handled like R_MIPS_HI16 and R_MIPS_LO16, - except that the addend is retrieved and stored as shown above - for R_MIPS16_GPREL. - */ -void -_bfd_mips16_elf_reloc_unshuffle (bfd *abfd, int r_type, - bfd_boolean jal_shuffle, bfd_byte *data) +static inline bfd_boolean +got16_reloc_p (int r_type) { - bfd_vma extend, insn, val; + return r_type == R_MIPS_GOT16 || r_type == R_MIPS16_GOT16; +} - if (r_type != R_MIPS16_26 && r_type != R_MIPS16_GPREL - && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16) - return; +static inline bfd_boolean +call16_reloc_p (int r_type) +{ + return r_type == R_MIPS_CALL16 || r_type == R_MIPS16_CALL16; +} - /* Pick up the mips16 extend instruction and the real instruction. */ +static inline bfd_boolean +hi16_reloc_p (int r_type) +{ + return r_type == R_MIPS_HI16 || r_type == R_MIPS16_HI16; +} + +static inline bfd_boolean +lo16_reloc_p (int r_type) +{ + return r_type == R_MIPS_LO16 || r_type == R_MIPS16_LO16; +} + +static inline bfd_boolean +mips16_call_reloc_p (int r_type) +{ + return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16; +} + +void +_bfd_mips16_elf_reloc_unshuffle (bfd *abfd, int r_type, + bfd_boolean jal_shuffle, bfd_byte *data) +{ + bfd_vma extend, insn, val; + + if (!mips16_reloc_p (r_type)) + return; + + /* Pick up the mips16 extend instruction and the real instruction. */ extend = bfd_get_16 (abfd, data); insn = bfd_get_16 (abfd, data + 2); if (r_type == R_MIPS16_26) @@ -1284,8 +1902,7 @@ _bfd_mips16_elf_reloc_shuffle (bfd *abfd, int r_type, { bfd_vma extend, insn, val; - if (r_type != R_MIPS16_26 && r_type != R_MIPS16_GPREL - && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16) + if (!mips16_reloc_p (r_type)) return; val = bfd_get_32 (abfd, data); @@ -1414,7 +2031,7 @@ _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry, return bfd_reloc_ok; } -/* A howto special_function for REL R_MIPS_GOT16 relocations. This is just +/* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just like any other 16-bit relocation when applied to global symbols, but is treated in the same as R_MIPS_HI16 when applied to local symbols. */ @@ -1463,13 +2080,15 @@ _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, hi = mips_hi16_list; - /* R_MIPS_GOT16 relocations are something of a special case. We - want to install the addend in the same way as for a R_MIPS_HI16 + /* R_MIPS*_GOT16 relocations are something of a special case. We + want to install the addend in the same way as for a R_MIPS*_HI16 relocation (with a rightshift of 16). However, since GOT16 relocations can also be used with global symbols, their howto has a rightshift of 0. */ if (hi->rel.howto->type == R_MIPS_GOT16) hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE); + else if (hi->rel.howto->type == R_MIPS16_GOT16) + hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE); /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any carry or borrow will induce a change of +1 or -1 in the high part. */ @@ -1897,18 +2516,14 @@ mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data) else h->esym.asym.value = 0; } - else if (h->root.needs_plt) + else { struct mips_elf_link_hash_entry *hd = h; - bfd_boolean no_fn_stub = h->no_fn_stub; while (hd->root.root.type == bfd_link_hash_indirect) - { - hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link; - no_fn_stub = no_fn_stub || hd->no_fn_stub; - } + hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link; - if (!no_fn_stub) + if (hd->needs_lazy_stub) { /* Set type and value for a symbol with a function stub. */ h->esym.asym.st = stProc; @@ -2039,6 +2654,25 @@ mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2) ? e1->abfd == e2->abfd && e1->d.address == e2->d.address : e1->d.h == e2->d.h); } + +static hashval_t +mips_got_page_entry_hash (const void *entry_) +{ + const struct mips_got_page_entry *entry; + + entry = (const struct mips_got_page_entry *) entry_; + return entry->abfd->id + entry->symndx; +} + +static int +mips_got_page_entry_eq (const void *entry1_, const void *entry2_) +{ + const struct mips_got_page_entry *entry1, *entry2; + + entry1 = (const struct mips_got_page_entry *) entry1_; + entry2 = (const struct mips_got_page_entry *) entry2_; + return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx; +} /* Return the dynamic relocation section. If it doesn't exist, try to create a new it if CREATE_P, otherwise return NULL. Also return NULL @@ -2071,40 +2705,6 @@ mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p) return sreloc; } -/* Returns the GOT section for ABFD. */ - -static asection * -mips_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 mips_got_info * -mips_elf_got_info (bfd *abfd, asection **sgotp) -{ - asection *sgot; - struct mips_got_info *g; - - sgot = mips_elf_got_section (abfd, TRUE); - BFD_ASSERT (sgot != NULL); - BFD_ASSERT (mips_elf_section_data (sgot) != NULL); - g = mips_elf_section_data (sgot)->u.got_info; - BFD_ASSERT (g != NULL); - - if (sgotp) - *sgotp = (sgot->flags & SEC_EXCLUDE) == 0 ? sgot : NULL; - - return g; -} - /* Count the number of relocations needed for a TLS GOT entry, with access types from TLS_TYPE, and symbol H (or a local symbol if H is NULL). */ @@ -2200,6 +2800,7 @@ mips_elf_count_global_tls_relocs (void *arg1, void *arg2) static void mips_elf_output_dynamic_relocation (bfd *output_bfd, asection *sreloc, + unsigned long reloc_index, unsigned long indx, int r_type, bfd_vma offset) @@ -2216,14 +2817,13 @@ mips_elf_output_dynamic_relocation (bfd *output_bfd, (*get_elf_backend_data (output_bfd)->s->swap_reloc_out) (output_bfd, &rel[0], (sreloc->contents - + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel))); + + reloc_index * sizeof (Elf64_Mips_External_Rel))); } else bfd_elf32_swap_reloc_out (output_bfd, &rel[0], (sreloc->contents - + sreloc->reloc_count * sizeof (Elf32_External_Rel))); - ++sreloc->reloc_count; + + reloc_index * sizeof (Elf32_External_Rel))); } /* Initialize a set of TLS GOT entries for one symbol. */ @@ -2235,14 +2835,14 @@ mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset, struct mips_elf_link_hash_entry *h, bfd_vma value) { + struct mips_elf_link_hash_table *htab; int indx; asection *sreloc, *sgot; bfd_vma offset, offset2; - bfd *dynobj; bfd_boolean need_relocs = FALSE; - dynobj = elf_hash_table (info)->dynobj; - sgot = mips_elf_got_section (dynobj, FALSE); + htab = mips_elf_hash_table (info); + sgot = htab->sgot; indx = 0; if (h != NULL) @@ -2281,13 +2881,13 @@ mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset, if (need_relocs) { mips_elf_output_dynamic_relocation - (abfd, sreloc, indx, + (abfd, sreloc, sreloc->reloc_count++, indx, ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, sgot->output_offset + sgot->output_section->vma + offset); if (indx) mips_elf_output_dynamic_relocation - (abfd, sreloc, indx, + (abfd, sreloc, sreloc->reloc_count++, indx, ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32, sgot->output_offset + sgot->output_section->vma + offset2); else @@ -2320,7 +2920,7 @@ mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset, sgot->contents + offset); mips_elf_output_dynamic_relocation - (abfd, sreloc, indx, + (abfd, sreloc, sreloc->reloc_count++, indx, ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32, sgot->output_offset + sgot->output_section->vma + offset); } @@ -2342,7 +2942,7 @@ mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset, sgot->contents + got_offset); else mips_elf_output_dynamic_relocation - (abfd, sreloc, indx, + (abfd, sreloc, sreloc->reloc_count++, indx, ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32, sgot->output_offset + sgot->output_section->vma + got_offset); } @@ -2403,6 +3003,10 @@ mips_elf_gotplt_index (struct bfd_link_info *info, htab = mips_elf_hash_table (info); BFD_ASSERT (h->plt.offset != (bfd_vma) -1); + /* This function only works for VxWorks, because a non-VxWorks .got.plt + section starts with reserved entries. */ + BFD_ASSERT (htab->is_vxworks); + /* Calculate the index of the symbol's PLT entry. */ plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size; @@ -2429,20 +3033,18 @@ mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, bfd_vma value, unsigned long r_symndx, struct mips_elf_link_hash_entry *h, int r_type) { - asection *sgot; - struct mips_got_info *g; + struct mips_elf_link_hash_table *htab; struct mips_got_entry *entry; - g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot); - - entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot, - value, r_symndx, h, r_type); + htab = mips_elf_hash_table (info); + entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, + r_symndx, h, r_type); if (!entry) return MINUS_ONE; if (TLS_RELOC_P (r_type)) { - if (entry->symndx == -1 && g->next == NULL) + if (entry->symndx == -1 && htab->got_info->next == NULL) /* A type (3) entry in the single-GOT case. We use the symbol's hash table entry to track the index. */ return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type, @@ -2461,12 +3063,13 @@ static bfd_vma mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h, int r_type, struct bfd_link_info *info) { + struct mips_elf_link_hash_table *htab; bfd_vma index; - asection *sgot; struct mips_got_info *g, *gg; long global_got_dynindx = 0; - gg = g = mips_elf_got_info (abfd, &sgot); + htab = mips_elf_hash_table (info); + gg = g = htab->got_info; if (g->bfd2got && ibfd) { struct mips_got_entry e, *p; @@ -2532,7 +3135,7 @@ mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h, index = ((h->dynindx - global_got_dynindx + g->local_gotno) * MIPS_ELF_GOT_SIZE (abfd)); } - BFD_ASSERT (index < sgot->size); + BFD_ASSERT (index < htab->sgot->size); return index; } @@ -2547,16 +3150,12 @@ static bfd_vma mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, bfd_vma value, bfd_vma *offsetp) { - asection *sgot; - struct mips_got_info *g; bfd_vma page, index; struct mips_got_entry *entry; - g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot); - page = (value + 0x8000) & ~(bfd_vma) 0xffff; - entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot, - page, 0, NULL, R_MIPS_GOT_PAGE); + entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0, + NULL, R_MIPS_GOT_PAGE); if (!entry) return MINUS_ONE; @@ -2569,7 +3168,7 @@ 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. +/* 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. */ @@ -2577,8 +3176,6 @@ static bfd_vma mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, bfd_vma value, bfd_boolean external) { - asection *sgot; - struct mips_got_info *g; struct mips_got_entry *entry; /* GOT16 relocations against local symbols are followed by a LO16 @@ -2588,10 +3185,11 @@ mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, if (! external) value = mips_elf_high (value) << 16; - g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot); - - entry = mips_elf_create_local_got_entry (abfd, info, ibfd, g, sgot, - value, 0, NULL, R_MIPS_GOT16); + /* It doesn't matter whether the original relocation was R_MIPS_GOT16, + R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the + same in all cases. */ + entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0, + NULL, R_MIPS_GOT16); if (entry) return entry->gotidx; else @@ -2602,16 +3200,17 @@ mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info, in the GOT. */ static bfd_vma -mips_elf_got_offset_from_index (bfd *dynobj, bfd *output_bfd, +mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd, bfd *input_bfd, bfd_vma index) { + struct mips_elf_link_hash_table *htab; asection *sgot; bfd_vma gp; - struct mips_got_info *g; - g = mips_elf_got_info (dynobj, &sgot); + htab = mips_elf_hash_table (info); + sgot = htab->sgot; gp = _bfd_get_gp_value (output_bfd) - + mips_elf_adjust_gp (output_bfd, g, input_bfd); + + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd); return sgot->output_section->vma + sgot->output_offset + index - gp; } @@ -2623,8 +3222,7 @@ 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, bfd_vma value, + bfd *ibfd, bfd_vma value, unsigned long r_symndx, struct mips_elf_link_hash_entry *h, int r_type) @@ -2640,10 +3238,10 @@ mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, entry.d.address = value; entry.tls_type = 0; - g = mips_elf_got_for_ibfd (gg, ibfd); + g = mips_elf_got_for_ibfd (htab->got_info, ibfd); if (g == NULL) { - g = mips_elf_got_for_ibfd (gg, abfd); + g = mips_elf_got_for_ibfd (htab->got_info, abfd); BFD_ASSERT (g != NULL); } @@ -2704,7 +3302,7 @@ mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, } MIPS_ELF_PUT_WORD (abfd, value, - (sgot->contents + entry.gotidx)); + (htab->sgot->contents + entry.gotidx)); /* These GOT entries need a dynamic relocation on VxWorks. */ if (htab->is_vxworks) @@ -2715,8 +3313,8 @@ mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, bfd_vma got_address; s = mips_elf_rel_dyn_section (info, FALSE); - got_address = (sgot->output_section->vma - + sgot->output_offset + got_address = (htab->sgot->output_section->vma + + htab->sgot->output_offset + entry.gotidx); loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela)); @@ -2729,36 +3327,55 @@ mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info, return *loc; } +/* Return the number of dynamic section symbols required by OUTPUT_BFD. + The number might be exact or a worst-case estimate, depending on how + much information is available to elf_backend_omit_section_dynsym at + the current linking stage. */ + +static bfd_size_type +count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info) +{ + bfd_size_type count; + + count = 0; + if (info->shared || elf_hash_table (info)->is_relocatable_executable) + { + asection *p; + const struct elf_backend_data *bed; + + 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)) + ++count; + } + return count; +} + /* 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_mips_elf_size_dynamic_sections, this value is 1. Afterward, the - section symbols are added and the count is higher. */ + appear towards the end. */ static bfd_boolean -mips_elf_sort_hash_table (struct bfd_link_info *info, unsigned long max_local) +mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info) { + struct mips_elf_link_hash_table *htab; struct mips_elf_hash_sort_data hsd; struct mips_got_info *g; - bfd *dynobj; - dynobj = elf_hash_table (info)->dynobj; + if (elf_hash_table (info)->dynsymcount == 0) + return TRUE; - g = mips_elf_got_info (dynobj, NULL); + htab = mips_elf_hash_table (info); + g = htab->got_info; + if (g == NULL) + return TRUE; 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; + hsd.max_unref_got_dynindx + = hsd.min_got_dynindx + = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno); + hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1; mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *) elf_hash_table (info)), mips_elf_sort_hash_table_f, @@ -2767,8 +3384,10 @@ mips_elf_sort_hash_table (struct bfd_link_info *info, unsigned long max_local) /* 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); + BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx + == elf_hash_table (info)->dynsymcount); + BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx + == g->global_gotno); /* Now we know which dynamic symbol has the lowest dynamic symbol table index in the GOT. */ @@ -2794,27 +3413,26 @@ mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data) 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. Forced local symbols may also be marked with got offset 1, - but are never given global GOT entries. */ - if (h->root.got.offset == 2) + switch (h->global_got_area) { - BFD_ASSERT (h->tls_type == GOT_NORMAL); + case GGA_NONE: + h->root.dynindx = hsd->max_non_got_dynindx++; + break; - 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->forced_local) - h->root.dynindx = hsd->max_non_got_dynindx++; - else - { + case GGA_NORMAL: BFD_ASSERT (h->tls_type == GOT_NORMAL); h->root.dynindx = --hsd->min_got_dynindx; hsd->low = (struct elf_link_hash_entry *) h; + break; + + case GGA_RELOC_ONLY: + BFD_ASSERT (h->tls_type == GOT_NORMAL); + + 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++; + break; } return TRUE; @@ -2827,10 +3445,15 @@ mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data) static bfd_boolean mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, bfd *abfd, struct bfd_link_info *info, - struct mips_got_info *g, unsigned char tls_flag) { + struct mips_elf_link_hash_table *htab; + struct mips_elf_link_hash_entry *hmips; struct mips_got_entry entry, **loc; + struct mips_got_info *g; + + htab = mips_elf_hash_table (info); + hmips = (struct mips_elf_link_hash_entry *) h; /* A global symbol in the GOT must also be in the dynamic symbol table. */ @@ -2840,7 +3463,7 @@ mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, { case STV_INTERNAL: case STV_HIDDEN: - _bfd_mips_elf_hide_symbol (info, h, TRUE); + _bfd_elf_link_hash_hide_symbol (info, h, TRUE); break; } if (!bfd_elf_link_record_dynamic_symbol (info, h)) @@ -2848,6 +3471,7 @@ mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, } /* Make sure we have a GOT to put this entry into. */ + g = htab->got_info; BFD_ASSERT (g != NULL); entry.abfd = abfd; @@ -2876,18 +3500,8 @@ mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, memcpy (*loc, &entry, sizeof entry); - if (h->got.offset != MINUS_ONE) - return TRUE; - if (tls_flag == 0) - { - /* 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; - if (h->forced_local) - g->local_gotno++; - } + hmips->global_got_area = GGA_NORMAL; return TRUE; } @@ -2897,11 +3511,17 @@ mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h, static bfd_boolean mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend, - struct mips_got_info *g, + struct bfd_link_info *info, unsigned char tls_flag) { + struct mips_elf_link_hash_table *htab; + struct mips_got_info *g; struct mips_got_entry entry, **loc; + htab = mips_elf_hash_table (info); + g = htab->got_info; + BFD_ASSERT (g != NULL); + entry.abfd = abfd; entry.symndx = symndx; entry.d.addend = addend; @@ -2953,238 +3573,545 @@ mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend, return TRUE; } - -/* Compute the hash value of the bfd in a bfd2got hash entry. */ - -static hashval_t -mips_elf_bfd2got_entry_hash (const void *entry_) -{ - const struct mips_elf_bfd2got_hash *entry - = (struct mips_elf_bfd2got_hash *)entry_; - - return entry->bfd->id; -} -/* Check whether two hash entries have the same bfd. */ +/* Return the maximum number of GOT page entries required for RANGE. */ -static int -mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2) +static bfd_vma +mips_elf_pages_for_range (const struct mips_got_page_range *range) { - const struct mips_elf_bfd2got_hash *e1 - = (const struct mips_elf_bfd2got_hash *)entry1; - const struct mips_elf_bfd2got_hash *e2 - = (const struct mips_elf_bfd2got_hash *)entry2; - - return e1->bfd == e2->bfd; + return (range->max_addend - range->min_addend + 0x1ffff) >> 16; } -/* In a multi-got link, determine the GOT to be used for IBFD. G must - be the master GOT data. */ +/* Record that ABFD has a page relocation against symbol SYMNDX and + that ADDEND is the addend for that relocation. -static struct mips_got_info * -mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd) + This function creates an upper bound on the number of GOT slots + required; no attempt is made to combine references to non-overridable + global symbols across multiple input files. */ + +static bfd_boolean +mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd, + long symndx, bfd_signed_vma addend) { - struct mips_elf_bfd2got_hash e, *p; + struct mips_elf_link_hash_table *htab; + struct mips_got_info *g; + struct mips_got_page_entry lookup, *entry; + struct mips_got_page_range **range_ptr, *range; + bfd_vma old_pages, new_pages; + void **loc; - if (! g->bfd2got) - return g; + htab = mips_elf_hash_table (info); + g = htab->got_info; + BFD_ASSERT (g != NULL); - e.bfd = ibfd; - p = htab_find (g->bfd2got, &e); - return p ? p->g : NULL; -} + /* Find the mips_got_page_entry hash table entry for this symbol. */ + lookup.abfd = abfd; + lookup.symndx = symndx; + loc = htab_find_slot (g->got_page_entries, &lookup, INSERT); + if (loc == NULL) + return FALSE; -/* Create one separate got for each bfd that has entries in the global - got, such that we can tell how many local and global entries each - bfd requires. */ + /* Create a mips_got_page_entry if this is the first time we've + seen the symbol. */ + entry = (struct mips_got_page_entry *) *loc; + if (!entry) + { + entry = bfd_alloc (abfd, sizeof (*entry)); + if (!entry) + return FALSE; -static int -mips_elf_make_got_per_bfd (void **entryp, void *p) -{ - struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; - struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p; - htab_t bfd2got = arg->bfd2got; - struct mips_got_info *g; - struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot; - void **bfdgotp; + entry->abfd = abfd; + entry->symndx = symndx; + entry->ranges = NULL; + entry->num_pages = 0; + *loc = entry; + } - /* Find the got_info for this GOT entry's input bfd. Create one if - none exists. */ - bfdgot_entry.bfd = entry->abfd; - bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT); - bfdgot = (struct mips_elf_bfd2got_hash *)*bfdgotp; + /* Skip over ranges whose maximum extent cannot share a page entry + with ADDEND. */ + range_ptr = &entry->ranges; + while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff) + range_ptr = &(*range_ptr)->next; - if (bfdgot != NULL) - g = bfdgot->g; - else + /* If we scanned to the end of the list, or found a range whose + minimum extent cannot share a page entry with ADDEND, create + a new singleton range. */ + range = *range_ptr; + if (!range || addend < range->min_addend - 0xffff) { - bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc - (arg->obfd, sizeof (struct mips_elf_bfd2got_hash)); + range = bfd_alloc (abfd, sizeof (*range)); + if (!range) + return FALSE; - if (bfdgot == NULL) - { - arg->obfd = 0; - return 0; - } + range->next = *range_ptr; + range->min_addend = addend; + range->max_addend = addend; - *bfdgotp = bfdgot; + *range_ptr = range; + entry->num_pages++; + g->page_gotno++; + return TRUE; + } - bfdgot->bfd = entry->abfd; - bfdgot->g = g = (struct mips_got_info *) - bfd_alloc (arg->obfd, sizeof (struct mips_got_info)); - if (g == NULL) - { - arg->obfd = 0; - return 0; - } + /* Remember how many pages the old range contributed. */ + old_pages = mips_elf_pages_for_range (range); - g->global_gotsym = NULL; - g->global_gotno = 0; - g->local_gotno = 0; - g->assigned_gotno = -1; - g->tls_gotno = 0; - g->tls_assigned_gotno = 0; - g->tls_ldm_offset = MINUS_ONE; - g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash, - mips_elf_multi_got_entry_eq, NULL); - if (g->got_entries == NULL) + /* Update the ranges. */ + if (addend < range->min_addend) + range->min_addend = addend; + else if (addend > range->max_addend) + { + if (range->next && addend >= range->next->min_addend - 0xffff) { - arg->obfd = 0; - return 0; + old_pages += mips_elf_pages_for_range (range->next); + range->max_addend = range->next->max_addend; + range->next = range->next->next; } - - g->bfd2got = NULL; - g->next = NULL; + else + range->max_addend = addend; } - /* Insert the GOT entry in the bfd's got entry hash table. */ - entryp = htab_find_slot (g->got_entries, entry, INSERT); - if (*entryp != NULL) - return 1; - - *entryp = entry; - - if (entry->tls_type) + /* Record any change in the total estimate. */ + new_pages = mips_elf_pages_for_range (range); + if (old_pages != new_pages) { - if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM)) - g->tls_gotno += 2; - if (entry->tls_type & GOT_TLS_IE) - g->tls_gotno += 1; + entry->num_pages += new_pages - old_pages; + g->page_gotno += new_pages - old_pages; } - else if (entry->symndx >= 0 || entry->d.h->forced_local) - ++g->local_gotno; - else - ++g->global_gotno; - return 1; + return TRUE; } -/* Attempt to merge gots of different input bfds. Try to use as much - as possible of the primary got, since it doesn't require explicit - dynamic relocations, but don't use bfds that would reference global - symbols out of the addressable range. Failing the primary got, - attempt to merge with the current got, or finish the current got - and then make make the new got current. */ +/* Add room for N relocations to the .rel(a).dyn section in ABFD. */ -static int -mips_elf_merge_gots (void **bfd2got_, void *p) +static void +mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info, + unsigned int n) { - struct mips_elf_bfd2got_hash *bfd2got - = (struct mips_elf_bfd2got_hash *)*bfd2got_; - struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p; - unsigned int lcount = bfd2got->g->local_gotno; - unsigned int gcount = bfd2got->g->global_gotno; - unsigned int tcount = bfd2got->g->tls_gotno; - unsigned int maxcnt = arg->max_count; - bfd_boolean too_many_for_tls = FALSE; + asection *s; + struct mips_elf_link_hash_table *htab; - /* We place TLS GOT entries after both locals and globals. The globals - for the primary GOT may overflow the normal GOT size limit, so be - sure not to merge a GOT which requires TLS with the primary GOT in that - case. This doesn't affect non-primary GOTs. */ - if (tcount > 0) + htab = mips_elf_hash_table (info); + s = mips_elf_rel_dyn_section (info, FALSE); + BFD_ASSERT (s != NULL); + + if (htab->is_vxworks) + s->size += n * MIPS_ELF_RELA_SIZE (abfd); + else { - unsigned int primary_total = lcount + tcount + arg->global_count; - if (primary_total > maxcnt) - too_many_for_tls = TRUE; + if (s->size == 0) + { + /* Make room for a null element. */ + s->size += MIPS_ELF_REL_SIZE (abfd); + ++s->reloc_count; + } + s->size += n * MIPS_ELF_REL_SIZE (abfd); + } +} + +/* A htab_traverse callback for GOT entries. Set boolean *DATA to true + if the GOT entry is for an indirect or warning symbol. */ + +static int +mips_elf_check_recreate_got (void **entryp, void *data) +{ + struct mips_got_entry *entry; + bfd_boolean *must_recreate; + + entry = (struct mips_got_entry *) *entryp; + must_recreate = (bfd_boolean *) data; + if (entry->abfd != NULL && entry->symndx == -1) + { + struct mips_elf_link_hash_entry *h; + + h = entry->d.h; + if (h->root.root.type == bfd_link_hash_indirect + || h->root.root.type == bfd_link_hash_warning) + { + *must_recreate = TRUE; + return 0; + } } + return 1; +} + +/* A htab_traverse callback for GOT entries. Add all entries to + hash table *DATA, converting entries for indirect and warning + symbols into entries for the target symbol. Set *DATA to null + on error. */ - /* If we don't have a primary GOT and this is not too big, use it as - a starting point for the primary GOT. */ - if (! arg->primary && lcount + gcount + tcount <= maxcnt - && ! too_many_for_tls) +static int +mips_elf_recreate_got (void **entryp, void *data) +{ + htab_t *new_got; + struct mips_got_entry *entry; + void **slot; + + new_got = (htab_t *) data; + entry = (struct mips_got_entry *) *entryp; + if (entry->abfd != NULL && entry->symndx == -1) { - arg->primary = bfd2got->g; - arg->primary_count = lcount + gcount; + struct mips_elf_link_hash_entry *h; + + h = entry->d.h; + while (h->root.root.type == bfd_link_hash_indirect + || h->root.root.type == bfd_link_hash_warning) + { + BFD_ASSERT (h->global_got_area == GGA_NONE); + h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link; + } + entry->d.h = h; } - /* If it looks like we can merge this bfd's entries with those of - the primary, merge them. The heuristics is conservative, but we - don't have to squeeze it too hard. */ - else if (arg->primary && ! too_many_for_tls - && (arg->primary_count + lcount + gcount + tcount) <= maxcnt) + slot = htab_find_slot (*new_got, entry, INSERT); + if (slot == NULL) { - struct mips_got_info *g = bfd2got->g; - int old_lcount = arg->primary->local_gotno; - int old_gcount = arg->primary->global_gotno; - int old_tcount = arg->primary->tls_gotno; + *new_got = NULL; + return 0; + } + if (*slot == NULL) + *slot = entry; + else + free (entry); + return 1; +} - bfd2got->g = arg->primary; +/* If any entries in G->got_entries are for indirect or warning symbols, + replace them with entries for the target symbol. */ - htab_traverse (g->got_entries, - mips_elf_make_got_per_bfd, - arg); - if (arg->obfd == NULL) - return 0; +static bfd_boolean +mips_elf_resolve_final_got_entries (struct mips_got_info *g) +{ + bfd_boolean must_recreate; + htab_t new_got; + must_recreate = FALSE; + htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate); + if (must_recreate) + { + new_got = htab_create (htab_size (g->got_entries), + mips_elf_got_entry_hash, + mips_elf_got_entry_eq, NULL); + htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got); + if (new_got == NULL) + return FALSE; + + /* Each entry in g->got_entries has either been copied to new_got + or freed. Now delete the hash table itself. */ htab_delete (g->got_entries); - /* We don't have to worry about releasing memory of the actual - got entries, since they're all in the master got_entries hash - table anyway. */ + g->got_entries = new_got; + } + return TRUE; +} - BFD_ASSERT (old_lcount + lcount >= arg->primary->local_gotno); - BFD_ASSERT (old_gcount + gcount >= arg->primary->global_gotno); - BFD_ASSERT (old_tcount + tcount >= arg->primary->tls_gotno); +/* A mips_elf_link_hash_traverse callback for which DATA points + to a mips_got_info. Count the number of type (3) entries. */ - arg->primary_count = arg->primary->local_gotno - + arg->primary->global_gotno + arg->primary->tls_gotno; +static int +mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data) +{ + struct mips_got_info *g; + + g = (struct mips_got_info *) data; + if (h->global_got_area != GGA_NONE) + { + if (h->root.forced_local || h->root.dynindx == -1) + { + /* We no longer need this entry if it was only used for + relocations; those relocations will be against the + null or section symbol instead of H. */ + if (h->global_got_area != GGA_RELOC_ONLY) + g->local_gotno++; + h->global_got_area = GGA_NONE; + } + else + { + g->global_gotno++; + if (h->global_got_area == GGA_RELOC_ONLY) + g->reloc_only_gotno++; + } } - /* If we can merge with the last-created got, do it. */ - else if (arg->current - && arg->current_count + lcount + gcount + tcount <= maxcnt) + return 1; +} + +/* Compute the hash value of the bfd in a bfd2got hash entry. */ + +static hashval_t +mips_elf_bfd2got_entry_hash (const void *entry_) +{ + const struct mips_elf_bfd2got_hash *entry + = (struct mips_elf_bfd2got_hash *)entry_; + + return entry->bfd->id; +} + +/* Check whether two hash entries have the same bfd. */ + +static int +mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2) +{ + const struct mips_elf_bfd2got_hash *e1 + = (const struct mips_elf_bfd2got_hash *)entry1; + const struct mips_elf_bfd2got_hash *e2 + = (const struct mips_elf_bfd2got_hash *)entry2; + + return e1->bfd == e2->bfd; +} + +/* In a multi-got link, determine the GOT to be used for IBFD. G must + be the master GOT data. */ + +static struct mips_got_info * +mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd) +{ + struct mips_elf_bfd2got_hash e, *p; + + if (! g->bfd2got) + return g; + + e.bfd = ibfd; + p = htab_find (g->bfd2got, &e); + return p ? p->g : NULL; +} + +/* Use BFD2GOT to find ABFD's got entry, creating one if none exists. + Return NULL if an error occured. */ + +static struct mips_got_info * +mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd, + bfd *input_bfd) +{ + struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot; + struct mips_got_info *g; + void **bfdgotp; + + bfdgot_entry.bfd = input_bfd; + bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT); + bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp; + + if (bfdgot == NULL) { - struct mips_got_info *g = bfd2got->g; - int old_lcount = arg->current->local_gotno; - int old_gcount = arg->current->global_gotno; - int old_tcount = arg->current->tls_gotno; + bfdgot = ((struct mips_elf_bfd2got_hash *) + bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash))); + if (bfdgot == NULL) + return NULL; - bfd2got->g = arg->current; + *bfdgotp = bfdgot; - htab_traverse (g->got_entries, - mips_elf_make_got_per_bfd, - arg); - if (arg->obfd == NULL) - return 0; + g = ((struct mips_got_info *) + bfd_alloc (output_bfd, sizeof (struct mips_got_info))); + if (g == NULL) + return NULL; - htab_delete (g->got_entries); + bfdgot->bfd = input_bfd; + bfdgot->g = g; + + g->global_gotsym = NULL; + g->global_gotno = 0; + g->reloc_only_gotno = 0; + g->local_gotno = 0; + g->page_gotno = 0; + g->assigned_gotno = -1; + g->tls_gotno = 0; + g->tls_assigned_gotno = 0; + g->tls_ldm_offset = MINUS_ONE; + g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash, + mips_elf_multi_got_entry_eq, NULL); + if (g->got_entries == NULL) + return NULL; - BFD_ASSERT (old_lcount + lcount >= arg->current->local_gotno); - BFD_ASSERT (old_gcount + gcount >= arg->current->global_gotno); - BFD_ASSERT (old_tcount + tcount >= arg->current->tls_gotno); + g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash, + mips_got_page_entry_eq, NULL); + if (g->got_page_entries == NULL) + return NULL; - arg->current_count = arg->current->local_gotno - + arg->current->global_gotno + arg->current->tls_gotno; + g->bfd2got = NULL; + g->next = NULL; } - /* Well, we couldn't merge, so create a new GOT. Don't check if it - fits; if it turns out that it doesn't, we'll get relocation - overflows anyway. */ + + return bfdgot->g; +} + +/* A htab_traverse callback for the entries in the master got. + Create one separate got for each bfd that has entries in the global + got, such that we can tell how many local and global entries each + bfd requires. */ + +static int +mips_elf_make_got_per_bfd (void **entryp, void *p) +{ + struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; + struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p; + struct mips_got_info *g; + + g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd); + if (g == NULL) + { + arg->obfd = NULL; + return 0; + } + + /* Insert the GOT entry in the bfd's got entry hash table. */ + entryp = htab_find_slot (g->got_entries, entry, INSERT); + if (*entryp != NULL) + return 1; + + *entryp = entry; + + if (entry->tls_type) + { + if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM)) + g->tls_gotno += 2; + if (entry->tls_type & GOT_TLS_IE) + g->tls_gotno += 1; + } + else if (entry->symndx >= 0 || entry->d.h->root.forced_local) + ++g->local_gotno; else + ++g->global_gotno; + + return 1; +} + +/* A htab_traverse callback for the page entries in the master got. + Associate each page entry with the bfd's got. */ + +static int +mips_elf_make_got_pages_per_bfd (void **entryp, void *p) +{ + struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp; + struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p; + struct mips_got_info *g; + + g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd); + if (g == NULL) + { + arg->obfd = NULL; + return 0; + } + + /* Insert the GOT entry in the bfd's got entry hash table. */ + entryp = htab_find_slot (g->got_page_entries, entry, INSERT); + if (*entryp != NULL) + return 1; + + *entryp = entry; + g->page_gotno += entry->num_pages; + return 1; +} + +/* Consider merging the got described by BFD2GOT with TO, using the + information given by ARG. Return -1 if this would lead to overflow, + 1 if they were merged successfully, and 0 if a merge failed due to + lack of memory. (These values are chosen so that nonnegative return + values can be returned by a htab_traverse callback.) */ + +static int +mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got, + struct mips_got_info *to, + struct mips_elf_got_per_bfd_arg *arg) +{ + struct mips_got_info *from = bfd2got->g; + unsigned int estimate; + + /* Work out how many page entries we would need for the combined GOT. */ + estimate = arg->max_pages; + if (estimate >= from->page_gotno + to->page_gotno) + estimate = from->page_gotno + to->page_gotno; + + /* And conservatively estimate how many local, global and TLS entries + would be needed. */ + estimate += (from->local_gotno + + from->global_gotno + + from->tls_gotno + + to->local_gotno + + to->global_gotno + + to->tls_gotno); + + /* Bail out if the combined GOT might be too big. */ + if (estimate > arg->max_count) + return -1; + + /* Commit to the merge. Record that TO is now the bfd for this got. */ + bfd2got->g = to; + + /* Transfer the bfd's got information from FROM to TO. */ + htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg); + if (arg->obfd == NULL) + return 0; + + htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg); + if (arg->obfd == NULL) + return 0; + + /* We don't have to worry about releasing memory of the actual + got entries, since they're all in the master got_entries hash + table anyway. */ + htab_delete (from->got_entries); + htab_delete (from->got_page_entries); + return 1; +} + +/* Attempt to merge gots of different input bfds. Try to use as much + as possible of the primary got, since it doesn't require explicit + dynamic relocations, but don't use bfds that would reference global + symbols out of the addressable range. Failing the primary got, + attempt to merge with the current got, or finish the current got + and then make make the new got current. */ + +static int +mips_elf_merge_gots (void **bfd2got_, void *p) +{ + struct mips_elf_bfd2got_hash *bfd2got + = (struct mips_elf_bfd2got_hash *)*bfd2got_; + struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p; + struct mips_got_info *g; + unsigned int estimate; + int result; + + g = bfd2got->g; + + /* Work out the number of page, local and TLS entries. */ + estimate = arg->max_pages; + if (estimate > g->page_gotno) + estimate = g->page_gotno; + estimate += g->local_gotno + g->tls_gotno; + + /* We place TLS GOT entries after both locals and globals. The globals + for the primary GOT may overflow the normal GOT size limit, so be + sure not to merge a GOT which requires TLS with the primary GOT in that + case. This doesn't affect non-primary GOTs. */ + estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno); + + if (estimate <= arg->max_count) { - bfd2got->g->next = arg->current; - arg->current = bfd2got->g; + /* If we don't have a primary GOT, use it as + a starting point for the primary GOT. */ + if (!arg->primary) + { + arg->primary = bfd2got->g; + return 1; + } - arg->current_count = lcount + gcount + 2 * tcount; + /* Try merging with the primary GOT. */ + result = mips_elf_merge_got_with (bfd2got, arg->primary, arg); + if (result >= 0) + return result; } + /* If we can merge with the last-created got, do it. */ + if (arg->current) + { + result = mips_elf_merge_got_with (bfd2got, arg->current, arg); + if (result >= 0) + return result; + } + + /* Well, we couldn't merge, so create a new GOT. Don't check if it + fits; if it turns out that it doesn't, we'll get relocation + overflows anyway. */ + g->next = arg->current; + arg->current = g; + return 1; } @@ -3268,10 +4195,9 @@ mips_elf_set_global_got_offset (void **entryp, void *p) mips_tls_got_relocs (arg->info, entry->tls_type, entry->symndx == -1 ? &entry->d.h->root : NULL); - if (entry->abfd != NULL && entry->symndx == -1 - && entry->d.h->root.dynindx != -1 - && !entry->d.h->forced_local - && entry->d.h->tls_type == GOT_NORMAL) + if (entry->abfd != NULL + && entry->symndx == -1 + && entry->d.h->global_got_area != GGA_NONE) { if (g) { @@ -3285,91 +4211,37 @@ mips_elf_set_global_got_offset (void **entryp, void *p) ++arg->needed_relocs; } else - entry->d.h->root.got.offset = arg->value; + entry->d.h->global_got_area = arg->value; } return 1; } -/* Mark any global symbols referenced in the GOT we are iterating over - as inelligible for lazy resolution stubs. */ +/* A htab_traverse callback for GOT entries for which DATA is the + bfd_link_info. Forbid any global symbols from having traditional + lazy-binding stubs. */ + static int -mips_elf_set_no_stub (void **entryp, void *p ATTRIBUTE_UNUSED) +mips_elf_forbid_lazy_stubs (void **entryp, void *data) { - struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; + struct bfd_link_info *info; + struct mips_elf_link_hash_table *htab; + struct mips_got_entry *entry; + entry = (struct mips_got_entry *) *entryp; + info = (struct bfd_link_info *) data; + htab = mips_elf_hash_table (info); if (entry->abfd != NULL && entry->symndx == -1 - && entry->d.h->root.dynindx != -1) - entry->d.h->no_fn_stub = TRUE; - - return 1; -} - -/* 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 -mips_elf_resolve_final_got_entry (void **entryp, void *p) -{ - struct mips_got_entry *entry = (struct mips_got_entry *)*entryp; - htab_t got_entries = *(htab_t *)p; - - if (entry->abfd != NULL && entry->symndx == -1) + && entry->d.h->needs_lazy_stub) { - struct mips_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 mips_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. */ + entry->d.h->needs_lazy_stub = FALSE; + htab->lazy_stub_count--; } return 1; } -/* Turn indirect got entries in a got_entries table into their final - locations. */ -static void -mips_elf_resolve_final_got_entries (struct mips_got_info *g) -{ - htab_t got_entries; - - do - { - got_entries = g->got_entries; - - htab_traverse (got_entries, - mips_elf_resolve_final_got_entry, - &got_entries); - } - while (got_entries == NULL); -} - /* Return the offset of an input bfd IBFD's GOT from the beginning of the primary GOT. */ static bfd_vma @@ -3395,14 +4267,18 @@ mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd) static bfd_boolean mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, - struct mips_got_info *g, asection *got, - bfd_size_type pages) + asection *got, bfd_size_type pages) { + struct mips_elf_link_hash_table *htab; struct mips_elf_got_per_bfd_arg got_per_bfd_arg; struct mips_elf_set_global_got_offset_arg set_got_offset_arg; - struct mips_got_info *gg; - unsigned int assign; + struct mips_got_info *g, *gg; + unsigned int assign, needed_relocs; + bfd *dynobj; + dynobj = elf_hash_table (info)->dynobj; + htab = mips_elf_hash_table (info); + g = htab->got_info; g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash, mips_elf_bfd2got_entry_eq, NULL); if (g->bfd2got == NULL) @@ -3418,14 +4294,18 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, if (got_per_bfd_arg.obfd == NULL) return FALSE; + /* Also count how many page entries each input bfd requires. */ + htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd, + &got_per_bfd_arg); + if (got_per_bfd_arg.obfd == NULL) + return FALSE; + got_per_bfd_arg.current = NULL; got_per_bfd_arg.primary = NULL; - /* Taking out PAGES entries is a worst-case estimate. We could - compute the maximum number of pages that each separate input bfd - uses, but it's probably not worth it. */ got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info) / MIPS_ELF_GOT_SIZE (abfd)) - - MIPS_RESERVED_GOTNO (info) - pages); + - htab->reserved_gotno); + got_per_bfd_arg.max_pages = pages; /* The number of globals that will be included in the primary GOT. See the calls to mips_elf_set_global_got_offset below for more information. */ @@ -3448,7 +4328,9 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, g->next->global_gotsym = NULL; g->next->global_gotno = 0; + g->next->reloc_only_gotno = 0; g->next->local_gotno = 0; + g->next->page_gotno = 0; g->next->tls_gotno = 0; g->next->assigned_gotno = 0; g->next->tls_assigned_gotno = 0; @@ -3458,6 +4340,11 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, NULL); if (g->next->got_entries == NULL) return FALSE; + g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash, + mips_got_page_entry_eq, + NULL); + if (g->next->got_page_entries == NULL) + return FALSE; g->next->bfd2got = NULL; } else @@ -3491,51 +4378,19 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, *bfdgotp = bfdgot; } - /* The IRIX dynamic linker requires every symbol that is referenced - in a dynamic relocation to be present in the primary GOT, so - arrange for them to appear after those that are actually - referenced. - - GNU/Linux could very well do without it, but it would slow down - the dynamic linker, since it would have to resolve every dynamic - symbol referenced in other GOTs more than once, without help from - the cache. Also, knowing that every external symbol has a GOT - helps speed up the resolution of local symbols too, so GNU/Linux - follows IRIX's practice. - - The number 2 is used by mips_elf_sort_hash_table_f to count - global GOT symbols that are unreferenced in the primary GOT, with - an initial dynamic index computed from gg->assigned_gotno, where - the number of unreferenced global entries in the primary GOT is - preserved. */ - if (1) - { - gg->assigned_gotno = gg->global_gotno - g->global_gotno; - g->global_gotno = gg->global_gotno; - set_got_offset_arg.value = 2; - } - else - { - /* This could be used for dynamic linkers that don't optimize - symbol resolution while applying relocations so as to use - primary GOT entries or assuming the symbol is locally-defined. - With this code, we assign lower dynamic indices to global - symbols that are not referenced in the primary GOT, so that - their entries can be omitted. */ - gg->assigned_gotno = 0; - set_got_offset_arg.value = -1; - } + /* Every symbol that is referenced in a dynamic relocation must be + present in the primary GOT, so arrange for them to appear after + those that are actually referenced. */ + gg->reloc_only_gotno = gg->global_gotno - g->global_gotno; + g->global_gotno = gg->global_gotno; - /* Reorder dynamic symbols as described above (which behavior - depends on the setting of VALUE). */ set_got_offset_arg.g = NULL; + set_got_offset_arg.value = GGA_RELOC_ONLY; htab_traverse (gg->got_entries, mips_elf_set_global_got_offset, &set_got_offset_arg); - set_got_offset_arg.value = 1; + set_got_offset_arg.value = GGA_NORMAL; htab_traverse (g->got_entries, mips_elf_set_global_got_offset, &set_got_offset_arg); - if (! mips_elf_sort_hash_table (info, 1)) - return FALSE; /* Now go through the GOTs assigning them offset ranges. [assigned_gotno, local_gotno[ will be set to the range of local @@ -3560,9 +4415,10 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, { struct mips_got_info *gn; - assign += MIPS_RESERVED_GOTNO (info); + assign += htab->reserved_gotno; g->assigned_gotno = assign; - g->local_gotno += assign + pages; + g->local_gotno += assign; + g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno); assign = g->local_gotno + g->global_gotno + g->tls_gotno; /* Take g out of the direct list, and push it onto the reversed @@ -3580,16 +4436,49 @@ mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info, /* Move onto the next GOT. It will be a secondary GOT if nonull. */ g = gn; - /* Mark global symbols in every non-primary GOT as ineligible for - stubs. */ + /* Forbid global symbols in every non-primary GOT from having + lazy-binding stubs. */ if (g) - htab_traverse (g->got_entries, mips_elf_set_no_stub, NULL); + htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info); } while (g); got->size = (gg->next->local_gotno - + gg->next->global_gotno - + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd); + + gg->next->global_gotno + + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd); + + needed_relocs = 0; + set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd); + set_got_offset_arg.info = info; + for (g = gg->next; g && g->next != gg; g = g->next) + { + unsigned int save_assign; + + /* Assign offsets to global GOT entries. */ + save_assign = g->assigned_gotno; + g->assigned_gotno = g->local_gotno; + set_got_offset_arg.g = g; + set_got_offset_arg.needed_relocs = 0; + htab_traverse (g->got_entries, + mips_elf_set_global_got_offset, + &set_got_offset_arg); + needed_relocs += set_got_offset_arg.needed_relocs; + BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno); + + g->assigned_gotno = save_assign; + if (info->shared) + { + needed_relocs += g->local_gotno - g->assigned_gotno; + BFD_ASSERT (g->assigned_gotno == g->next->local_gotno + + g->next->global_gotno + + g->next->tls_gotno + + htab->reserved_gotno); + } + } + + if (needed_relocs) + mips_elf_allocate_dynamic_relocations (dynobj, info, + needed_relocs); return TRUE; } @@ -3752,8 +4641,7 @@ mips_elf_create_compact_rel_section /* Create the .got section to hold the global offset table. */ static bfd_boolean -mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info, - bfd_boolean maybe_exclude) +mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info) { flagword flags; register asection *s; @@ -3766,26 +4654,19 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info, htab = mips_elf_hash_table (info); /* This function may be called more than once. */ - s = mips_elf_got_section (abfd, TRUE); - if (s) - { - if (! maybe_exclude) - s->flags &= ~SEC_EXCLUDE; - return TRUE; - } + if (htab->sgot) + 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; + htab->sgot = s; /* 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 @@ -3812,9 +4693,11 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info, return FALSE; g->global_gotsym = NULL; g->global_gotno = 0; + g->reloc_only_gotno = 0; g->tls_gotno = 0; - g->local_gotno = MIPS_RESERVED_GOTNO (info); - g->assigned_gotno = MIPS_RESERVED_GOTNO (info); + g->local_gotno = 0; + g->page_gotno = 0; + g->assigned_gotno = 0; g->bfd2got = NULL; g->next = NULL; g->tls_ldm_offset = MINUS_ONE; @@ -3822,21 +4705,22 @@ mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info, mips_elf_got_entry_eq, NULL); if (g->got_entries == NULL) return FALSE; - mips_elf_section_data (s)->u.got_info = g; + g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash, + mips_got_page_entry_eq, NULL); + if (g->got_page_entries == NULL) + return FALSE; + htab->got_info = g; mips_elf_section_data (s)->elf.this_hdr.sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; - /* VxWorks also needs a .got.plt section. */ - if (htab->is_vxworks) - { - s = bfd_make_section_with_flags (abfd, ".got.plt", - SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if (s == NULL || !bfd_set_section_alignment (abfd, s, 4)) - return FALSE; + /* We also need a .got.plt section when generating PLTs. */ + s = bfd_make_section_with_flags (abfd, ".got.plt", + SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS + | SEC_IN_MEMORY | SEC_LINKER_CREATED); + if (s == NULL) + return FALSE; + htab->sgotplt = s; - htab->sgotplt = s; - } return TRUE; } @@ -3852,6 +4736,34 @@ is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h) && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0)); } + +/* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might + require an la25 stub. See also mips_elf_local_pic_function_p, + which determines whether the destination function ever requires a + stub. */ + +static bfd_boolean +mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type) +{ + /* We specifically ignore branches and jumps from EF_PIC objects, + where the onus is on the compiler or programmer to perform any + necessary initialization of $25. Sometimes such initialization + is unnecessary; for example, -mno-shared functions do not use + the incoming value of $25, and may therefore be called directly. */ + if (PIC_OBJECT_P (input_bfd)) + return FALSE; + + switch (r_type) + { + case R_MIPS_26: + case R_MIPS_PC16: + case R_MIPS16_26: + return TRUE; + + default: + return FALSE; + } +} /* Calculate the value produced by the RELOCATION (which comes from the INPUT_BFD). The ADDEND is the addend to use for this @@ -3884,12 +4796,12 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, bfd_vma symbol = 0; /* The final GP value to be used for the relocatable, executable, or shared object file being produced. */ - bfd_vma gp = MINUS_ONE; + bfd_vma gp; /* The place (section offset or address) of the storage unit being relocated. */ bfd_vma p; /* The value of GP used to create the relocatable object. */ - bfd_vma gp0 = MINUS_ONE; + bfd_vma gp0; /* The offset into the global offset table at which the address of the relocation entry symbol, adjusted by the addend, resides during execution. */ @@ -3967,7 +4879,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, } /* MIPS16 text labels should be treated as odd. */ - if (sym->st_other == STO_MIPS16) + if (ELF_ST_IS_MIPS16 (sym->st_other)) ++symbol; /* Record the name of this symbol, for our caller. */ @@ -3977,7 +4889,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, if (*namep == '\0') *namep = bfd_section_name (input_bfd, sec); - target_is_16_bit_code_p = (sym->st_other == STO_MIPS16); + target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other); } else { @@ -4001,8 +4913,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, { /* Relocations against _gp_disp are permitted only with R_MIPS_HI16 and R_MIPS_LO16 relocations. */ - if (r_type != R_MIPS_HI16 && r_type != R_MIPS_LO16 - && r_type != R_MIPS16_HI16 && r_type != R_MIPS16_LO16) + if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type)) return bfd_reloc_notsupported; gp_disp_p = TRUE; @@ -4073,18 +4984,27 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, symbol = 0; } - target_is_16_bit_code_p = (h->root.other == STO_MIPS16); + target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other); } - /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we - need to redirect the call to the stub, unless we're already *in* - a stub. */ - if (r_type != R_MIPS16_26 && !info->relocatable - && ((h != NULL && h->fn_stub != NULL) + /* If this is a reference to a 16-bit function with a stub, we need + to redirect the relocation to the stub unless: + + (a) the relocation is for a MIPS16 JAL; + + (b) the relocation is for a MIPS16 PIC call, and there are no + non-MIPS16 uses of the GOT slot; or + + (c) the section allows direct references to MIPS16 functions. */ + if (r_type != R_MIPS16_26 + && !info->relocatable + && ((h != NULL + && h->fn_stub != NULL + && (r_type != R_MIPS16_CALL16 || h->need_fn_stub)) || (local_p && elf_tdata (input_bfd)->local_stubs != NULL && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL)) - && !mips16_stub_section_p (input_bfd, input_section)) + && !section_allows_mips16_refs_p (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 @@ -4102,7 +5022,9 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, 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. */ + need to redirect the call to the stub. Note that we specifically + exclude R_MIPS16_CALL16 from this behavior; indirect calls should + use an indirect stub instead. */ else if (r_type == R_MIPS16_26 && !info->relocatable && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL)) || (local_p @@ -4142,6 +5064,13 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, BFD_ASSERT (sec->size > 0); symbol = sec->output_section->vma + sec->output_offset; } + /* If this is a direct call to a PIC function, redirect to the + non-PIC stub. */ + else if (h != NULL && h->la25_stub + && mips_elf_relocation_needs_la25_stub (input_bfd, r_type)) + symbol = (h->la25_stub->stub_section->output_section->vma + + h->la25_stub->stub_section->output_offset + + h->la25_stub->offset); /* Calls from 16-bit code to 32-bit code and vice versa require the special jalx instruction. */ @@ -4152,8 +5081,16 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, local_p = mips_elf_local_relocation_p (input_bfd, relocation, local_sections, TRUE); - /* If we haven't already determined the GOT offset, or the GP value, - and we're going to need it, get it now. */ + gp0 = _bfd_get_gp_value (input_bfd); + gp = _bfd_get_gp_value (abfd); + if (htab->got_info) + gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd); + + if (gnu_local_gp_p) + symbol = gp; + + /* If we haven't already determined the GOT offset, oand we're going + to need it, get it now. */ switch (r_type) { case R_MIPS_GOT_PAGE: @@ -4165,6 +5102,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, break; /* Fall through. */ + case R_MIPS16_CALL16: + case R_MIPS16_GOT16: case R_MIPS_CALL16: case R_MIPS_GOT16: case R_MIPS_GOT_DISP: @@ -4190,7 +5129,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, if (htab->is_vxworks && (r_type == R_MIPS_CALL_HI16 || r_type == R_MIPS_CALL_LO16 - || r_type == R_MIPS_CALL16)) + || call16_reloc_p (r_type))) { BFD_ASSERT (addend == 0); BFD_ASSERT (h->root.needs_plt); @@ -4210,17 +5149,14 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, || (info->shared && (info->symbolic || h->root.forced_local) && 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. */ - asection *sgot = mips_elf_got_section (dynobj, FALSE); - MIPS_ELF_PUT_WORD (dynobj, symbol, sgot->contents + g); - } + /* 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. */ + MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g); } } else if (!htab->is_vxworks - && (r_type == R_MIPS_CALL16 || (r_type == R_MIPS_GOT16))) + && (call16_reloc_p (r_type) || got16_reloc_p (r_type))) /* The calculation below does not involve "g". */ break; else @@ -4232,31 +5168,10 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, } /* Convert GOT indices to actual offsets. */ - g = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, g); - break; - - case R_MIPS_HI16: - case R_MIPS_LO16: - case R_MIPS_GPREL16: - case R_MIPS_GPREL32: - case R_MIPS_LITERAL: - case R_MIPS16_HI16: - case R_MIPS16_LO16: - case R_MIPS16_GPREL: - gp0 = _bfd_get_gp_value (input_bfd); - gp = _bfd_get_gp_value (abfd); - if (dynobj) - gp += mips_elf_adjust_gp (abfd, mips_elf_got_info (dynobj, NULL), - input_bfd); - break; - - default: + g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g); break; } - if (gnu_local_gp_p) - symbol = gp; - /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__ symbols are resolved by the loader. Add them to .rela.dyn. */ if (h != NULL && is_gott_symbol (info, &h->root)) @@ -4300,23 +5215,23 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case R_MIPS_REL32: case R_MIPS_64: if ((info->shared - || (!htab->is_vxworks - && htab->root.dynamic_sections_created + || (htab->root.dynamic_sections_created && h != NULL && h->root.def_dynamic - && !h->root.def_regular)) + && !h->root.def_regular + && !h->has_static_relocs)) && r_symndx != 0 + && (h == NULL + || h->root.root.type != bfd_link_hash_undefweak + || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT) && (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 + /* If we're creating 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. - - In VxWorks executables, references to external symbols - are handled using copy relocs or PLT stubs, so there's - no need to add a dynamic relocation here. */ + linker. We must do the same for executable references to + shared library symbols, unless we've decided to use copy + relocs or PLTs instead. */ value = addend; if (!mips_elf_create_dynamic_relocation (abfd, info, @@ -4468,10 +5383,12 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, overflowed_p = mips_elf_overflow_p (value, 16); break; + case R_MIPS16_GOT16: + case R_MIPS16_CALL16: case R_MIPS_GOT16: case R_MIPS_CALL16: /* VxWorks does not have separate local and global semantics for - R_MIPS_GOT16; every relocation evaluates to "G". */ + R_MIPS*_GOT16; every relocation evaluates to "G". */ if (!htab->is_vxworks && local_p) { bfd_boolean forced; @@ -4483,7 +5400,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, if (value == MINUS_ONE) return bfd_reloc_outofrange; value - = mips_elf_got_offset_from_index (dynobj, abfd, input_bfd, value); + = mips_elf_got_offset_from_index (info, abfd, input_bfd, value); overflowed_p = mips_elf_overflow_p (value, 16); break; } @@ -4537,7 +5454,7 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, 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); + value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value); overflowed_p = mips_elf_overflow_p (value, 16); break; @@ -4572,8 +5489,8 @@ mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd, case R_MIPS_JALR: /* This relocation is only a hint. In some cases, we optimize it into a bal instruction. But we don't try to optimize - branches to the PLT; that will wind up wasting time. */ - if (h != NULL && h->root.plt.offset != (bfd_vma) -1) + when the symbol does not resolve locally. */ + if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root)) return bfd_reloc_continue; value = symbol + addend; break; @@ -4680,15 +5597,15 @@ mips_elf_perform_relocation (struct bfd_link_info *info, x = (x & ~(0x3f << 26)) | (jalx_opcode << 26); } - /* On the RM9000, bal is faster than jal, because bal uses branch - prediction hardware. If we are linking for the RM9000, and we - see jal, and bal fits, use it instead. Note that this - transformation should be safe for all architectures. */ - if (bfd_get_mach (input_bfd) == bfd_mach_mips9000 - && !info->relocatable + /* Try converting JAL and JALR to BAL, if the target is in range. */ + if (!info->relocatable && !require_jalx - && ((r_type == R_MIPS_26 && (x >> 26) == 0x3) /* jal addr */ - || (r_type == R_MIPS_JALR && x == 0x0320f809))) /* jalr t9 */ + && ((JAL_TO_BAL_P (input_bfd) + && r_type == R_MIPS_26 + && (x >> 26) == 0x3) /* jal addr */ + || (JALR_TO_BAL_P (input_bfd) + && r_type == R_MIPS_JALR + && x == 0x0320f809))) /* jalr t9 */ { bfd_vma addr; bfd_vma dest; @@ -4715,44 +5632,7 @@ mips_elf_perform_relocation (struct bfd_link_info *info, return TRUE; } - -/* Returns TRUE if SECTION is a MIPS16 stub section. */ - -static bfd_boolean -mips16_stub_section_p (bfd *abfd ATTRIBUTE_UNUSED, asection *section) -{ - const char *name = bfd_get_section_name (abfd, section); - - 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. */ - -static void -mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info, - unsigned int n) -{ - asection *s; - struct mips_elf_link_hash_table *htab; - - htab = mips_elf_hash_table (info); - s = mips_elf_rel_dyn_section (info, FALSE); - BFD_ASSERT (s != NULL); - - if (htab->is_vxworks) - s->size += n * MIPS_ELF_RELA_SIZE (abfd); - else - { - if (s->size == 0) - { - /* Make room for a null element. */ - s->size += MIPS_ELF_REL_SIZE (abfd); - ++s->reloc_count; - } - s->size += n * MIPS_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 @@ -5015,6 +5895,18 @@ _bfd_elf_mips_mach (flagword flags) case E_MIPS_MACH_SB1: return bfd_mach_mips_sb1; + case E_MIPS_MACH_LS2E: + return bfd_mach_mips_loongson_2e; + + case E_MIPS_MACH_LS2F: + return bfd_mach_mips_loongson_2f; + + case E_MIPS_MACH_OCTEON: + return bfd_mach_mips_octeon; + + case E_MIPS_MACH_XLR: + return bfd_mach_mips_xlr; + default: switch (flags & EF_MIPS_ARCH) { @@ -5097,14 +5989,14 @@ static asection mips_elf_acom_section; static asymbol mips_elf_acom_symbol; static asymbol *mips_elf_acom_symbol_ptr; -/* Handle the special MIPS section numbers that a symbol may use. - This is used for both the 32-bit and the 64-bit ABI. */ +/* This is used for both the 32-bit and the 64-bit ABI. */ void _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym) { elf_symbol_type *elfsym; + /* Handle the special MIPS section numbers that a symbol may use. */ elfsym = (elf_symbol_type *) asym; switch (elfsym->internal_elf_sym.st_shndx) { @@ -5192,6 +6084,15 @@ _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym) } break; } + + /* If this is an odd-valued function symbol, assume it's a MIPS16 one. */ + if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC + && (asym->value & 1) != 0) + { + asym->value--; + elfsym->internal_elf_sym.st_other + = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other); + } } /* Implement elf_backend_eh_frame_address_size. This differs from @@ -5373,6 +6274,13 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) { const char *name = bfd_get_section_name (abfd, hdr->bfd_section); + /* .sbss is not handled specially here because the GNU/Linux + prelinker can convert .sbss from NOBITS to PROGBITS and + changing it back to NOBITS breaks the binary. The entry in + _bfd_mips_elf_special_sections will ensure the correct flags + are set on .sbss if BFD creates it without reading it from an + input file, and without special handling here the flags set + on it in an input file will be followed. */ if (strcmp (name, ".sdata") == 0 || strcmp (name, ".lit8") == 0 || strcmp (name, ".lit4") == 0) @@ -5380,11 +6288,6 @@ _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr) hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; hdr->sh_type = SHT_PROGBITS; } - else if (strcmp (name, ".sbss") == 0) - { - hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL; - hdr->sh_type = SHT_NOBITS; - } else if (strcmp (name, ".srdata") == 0) { hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL; @@ -5477,7 +6380,8 @@ _bfd_mips_elf_section_from_shdr (bfd *abfd, return FALSE; break; case SHT_MIPS_DWARF: - if (! CONST_STRNEQ (name, ".debug_")) + if (! CONST_STRNEQ (name, ".debug_") + && ! CONST_STRNEQ (name, ".zdebug_")) return FALSE; break; case SHT_MIPS_SYMBOL_LIB: @@ -5671,8 +6575,17 @@ _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 (CONST_STRNEQ (name, ".debug_")) - hdr->sh_type = SHT_MIPS_DWARF; + else if (CONST_STRNEQ (name, ".debug_") + || CONST_STRNEQ (name, ".zdebug_")) + { + hdr->sh_type = SHT_MIPS_DWARF; + + /* Irix facilities such as libexc expect a single .debug_frame + per executable, the system ones have NOSTRIP set and the linker + doesn't merge sections with different flags so ... */ + if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame")) + hdr->sh_flags |= SHF_MIPS_NOSTRIP; + } else if (strcmp (name, ".MIPS.symlib") == 0) { hdr->sh_type = SHT_MIPS_SYMBOL_LIB; @@ -5860,7 +6773,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, if (SGI_COMPAT (abfd) && ! info->shared - && info->hash->creator == abfd->xvec + && info->output_bfd->xvec == abfd->xvec && strcmp (*namep, "__rld_obj_head") == 0) { struct elf_link_hash_entry *h; @@ -5887,7 +6800,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, /* If this is a mips16 text symbol, add 1 to the value to make it odd. This will cause something like .word SYM to come up with the right value when it is loaded into the PC. */ - if (sym->st_other == STO_MIPS16) + if (ELF_ST_IS_MIPS16 (sym->st_other)) ++*valp; return TRUE; @@ -5897,7 +6810,7 @@ _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info, symbol. We mark symbols as small common if appropriate. This is also where we undo the increment of the value for a mips16 symbol. */ -bfd_boolean +int _bfd_mips_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym, @@ -5910,10 +6823,10 @@ _bfd_mips_elf_link_output_symbol_hook && strcmp (input_sec->name, ".scommon") == 0) sym->st_shndx = SHN_MIPS_SCOMMON; - if (sym->st_other == STO_MIPS16) + if (ELF_ST_IS_MIPS16 (sym->st_other)) sym->st_value &= ~1; - return TRUE; + return 1; } /* Functions for the dynamic linker. */ @@ -5947,25 +6860,22 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) } /* We need to create .got section. */ - if (! mips_elf_create_got_section (abfd, info, FALSE)) + if (!mips_elf_create_got_section (abfd, info)) return FALSE; if (! mips_elf_rel_dyn_section (info, TRUE)) return FALSE; - /* Create .stub section. */ - if (bfd_get_section_by_name (abfd, - MIPS_ELF_STUB_SECTION_NAME (abfd)) == NULL) - { - s = bfd_make_section_with_flags (abfd, - MIPS_ELF_STUB_SECTION_NAME (abfd), - flags | SEC_CODE); - if (s == NULL - || ! bfd_set_section_alignment (abfd, s, - MIPS_ELF_LOG_FILE_ALIGN (abfd))) - return FALSE; - } - + /* Create .stub section. */ + s = bfd_make_section_with_flags (abfd, + MIPS_ELF_STUB_SECTION_NAME (abfd), + flags | SEC_CODE); + if (s == NULL + || ! bfd_set_section_alignment (abfd, s, + MIPS_ELF_LOG_FILE_ALIGN (abfd))) + return FALSE; + htab->sstubs = s; + if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none) && !info->shared && bfd_get_section_by_name (abfd, ".rld_map") == NULL) @@ -6071,24 +6981,29 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) } } + /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections. + Also create the _PROCEDURE_LINKAGE_TABLE symbol. */ + if (!_bfd_elf_create_dynamic_sections (abfd, info)) + return FALSE; + + /* Cache the sections created above. */ + htab->splt = bfd_get_section_by_name (abfd, ".plt"); + htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss"); if (htab->is_vxworks) { - /* Create the .plt, .rela.plt, .dynbss and .rela.bss sections. - Also create the _PROCEDURE_LINKAGE_TABLE symbol. */ - if (!_bfd_elf_create_dynamic_sections (abfd, info)) - return FALSE; - - /* Cache the sections created above. */ - htab->sdynbss = bfd_get_section_by_name (abfd, ".dynbss"); htab->srelbss = bfd_get_section_by_name (abfd, ".rela.bss"); htab->srelplt = bfd_get_section_by_name (abfd, ".rela.plt"); - htab->splt = bfd_get_section_by_name (abfd, ".plt"); - if (!htab->sdynbss - || (!htab->srelbss && !info->shared) - || !htab->srelplt - || !htab->splt) - abort (); + } + else + htab->srelplt = bfd_get_section_by_name (abfd, ".rel.plt"); + if (!htab->sdynbss + || (htab->is_vxworks && !htab->srelbss && !info->shared) + || !htab->srelplt + || !htab->splt) + abort (); + if (htab->is_vxworks) + { /* Do the usual VxWorks handling. */ if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2)) return FALSE; @@ -6109,10 +7024,137 @@ _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info) = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry); } } + else if (!info->shared) + { + /* All variants of the plt0 entry are the same size. */ + htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry); + htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry); + } return TRUE; } +/* Return true if relocation REL against section SEC is a REL rather than + RELA relocation. RELOCS is the first relocation in the section and + ABFD is the bfd that contains SEC. */ + +static bfd_boolean +mips_elf_rel_relocation_p (bfd *abfd, asection *sec, + const Elf_Internal_Rela *relocs, + const Elf_Internal_Rela *rel) +{ + Elf_Internal_Shdr *rel_hdr; + const struct elf_backend_data *bed; + + /* To determine which flavor or relocation this is, we depend on the + fact that the INPUT_SECTION's REL_HDR is read before its REL_HDR2. */ + rel_hdr = &elf_section_data (sec)->rel_hdr; + bed = get_elf_backend_data (abfd); + if ((size_t) (rel - relocs) + >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel)) + rel_hdr = elf_section_data (sec)->rel_hdr2; + return rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (abfd); +} + +/* Read the addend for REL relocation REL, which belongs to bfd ABFD. + HOWTO is the relocation's howto and CONTENTS points to the contents + of the section that REL is against. */ + +static bfd_vma +mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel, + reloc_howto_type *howto, bfd_byte *contents) +{ + bfd_byte *location; + unsigned int r_type; + bfd_vma addend; + + r_type = ELF_R_TYPE (abfd, rel->r_info); + location = contents + rel->r_offset; + + /* Get the addend, which is stored in the input file. */ + _bfd_mips16_elf_reloc_unshuffle (abfd, r_type, FALSE, location); + addend = mips_elf_obtain_contents (howto, rel, abfd, contents); + _bfd_mips16_elf_reloc_shuffle (abfd, r_type, FALSE, location); + + return addend & howto->src_mask; +} + +/* REL is a relocation in ABFD that needs a partnering LO16 relocation + and *ADDEND is the addend for REL itself. Look for the LO16 relocation + and update *ADDEND with the final addend. Return true on success + or false if the LO16 could not be found. RELEND is the exclusive + upper bound on the relocations for REL's section. */ + +static bfd_boolean +mips_elf_add_lo16_rel_addend (bfd *abfd, + const Elf_Internal_Rela *rel, + const Elf_Internal_Rela *relend, + bfd_byte *contents, bfd_vma *addend) +{ + unsigned int r_type, lo16_type; + const Elf_Internal_Rela *lo16_relocation; + reloc_howto_type *lo16_howto; + bfd_vma l; + + r_type = ELF_R_TYPE (abfd, rel->r_info); + if (mips16_reloc_p (r_type)) + lo16_type = R_MIPS16_LO16; + else + lo16_type = R_MIPS_LO16; + + /* The combined value is the sum of the HI16 addend, left-shifted by + sixteen bits, and the LO16 addend, sign extended. (Usually, the + code does a `lui' of the HI16 value, and then an `addiu' of the + LO16 value.) + + Scan ahead to find a matching LO16 relocation. + + According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must + be immediately following. However, for the IRIX6 ABI, the next + relocation may be a composed relocation consisting of 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 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 (abfd, lo16_type, rel, relend); + if (lo16_relocation == NULL) + return FALSE; + + /* Obtain the addend kept there. */ + lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE); + l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents); + + l <<= lo16_howto->rightshift; + l = _bfd_mips_elf_sign_extend (l, 16); + + *addend <<= 16; + *addend += l; + return TRUE; +} + +/* Try to read the contents of section SEC in bfd ABFD. Return true and + store the contents in *CONTENTS on success. Assume that *CONTENTS + already holds the contents if it is nonull on entry. */ + +static bfd_boolean +mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents) +{ + if (*contents) + return TRUE; + + /* Get cached copy if it exists. */ + if (elf_section_data (sec)->this_hdr.contents != NULL) + { + *contents = elf_section_data (sec)->this_hdr.contents; + return TRUE; + } + + return bfd_malloc_and_get_section (abfd, sec, contents); +} + /* Look through the relocs for a section during the first phase, and allocate space in the global offset table. */ @@ -6124,14 +7166,15 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, bfd *dynobj; Elf_Internal_Shdr *symtab_hdr; struct elf_link_hash_entry **sym_hashes; - struct mips_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; struct mips_elf_link_hash_table *htab; + bfd_byte *contents; + bfd_vma addend; + reloc_howto_type *howto; if (info->relocatable) return TRUE; @@ -6142,6 +7185,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, sym_hashes = elf_sym_hashes (abfd); extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info; + bed = get_elf_backend_data (abfd); + rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel; + /* Check for the mips16 stub sections. */ name = bfd_get_section_name (abfd, sec); @@ -6152,7 +7198,16 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Look at the relocation information to figure out which symbol this is for. */ - r_symndx = ELF_R_SYM (abfd, relocs->r_info); + r_symndx = mips16_stub_symndx (sec, relocs, rel_end); + if (r_symndx == 0) + { + (*_bfd_error_handler) + (_("%B: Warning: cannot determine the target function for" + " stub section `%s'"), + abfd, name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } if (r_symndx < extsymoff || sym_hashes[r_symndx - extsymoff] == NULL) @@ -6170,7 +7225,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 - || mips16_stub_section_p (abfd, o)) + || section_allows_mips16_refs_p (o)) continue; sec_relocs @@ -6182,7 +7237,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, 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) + && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info))) break; if (elf_section_data (o)->relocs != sec_relocs) @@ -6268,7 +7323,16 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Look at the relocation information to figure out which symbol this is for. */ - r_symndx = ELF_R_SYM (abfd, relocs->r_info); + r_symndx = mips16_stub_symndx (sec, relocs, rel_end); + if (r_symndx == 0) + { + (*_bfd_error_handler) + (_("%B: Warning: cannot determine the target function for" + " stub section `%s'"), + abfd, name); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } if (r_symndx < extsymoff || sym_hashes[r_symndx - extsymoff] == NULL) @@ -6286,7 +7350,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 - || mips16_stub_section_p (abfd, o)) + || section_allows_mips16_refs_p (o)) continue; sec_relocs @@ -6375,32 +7439,14 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, } } - if (dynobj == NULL) - { - sgot = NULL; - g = NULL; - } - else - { - sgot = mips_elf_got_section (dynobj, FALSE); - if (sgot == NULL) - g = NULL; - else - { - BFD_ASSERT (mips_elf_section_data (sgot) != NULL); - g = mips_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; + contents = NULL; for (rel = relocs; rel < rel_end; ++rel) { unsigned long r_symndx; unsigned int r_type; struct elf_link_hash_entry *h; + bfd_boolean can_make_dynamic_p; r_symndx = ELF_R_SYM (abfd, rel->r_info); r_type = ELF_R_TYPE (abfd, rel->r_info); @@ -6418,68 +7464,95 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, else { h = sym_hashes[r_symndx - extsymoff]; + while (h != NULL + && (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; + } - /* This may be an indirect symbol created because of a version. */ - if (h != NULL) + /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this + relocation into a dynamic one. */ + can_make_dynamic_p = FALSE; + switch (r_type) + { + case R_MIPS16_GOT16: + case R_MIPS16_CALL16: + case R_MIPS_GOT16: + case R_MIPS_CALL16: + case R_MIPS_CALL_HI16: + case R_MIPS_CALL_LO16: + case R_MIPS_GOT_HI16: + case R_MIPS_GOT_LO16: + case R_MIPS_GOT_PAGE: + case R_MIPS_GOT_OFST: + case R_MIPS_GOT_DISP: + case R_MIPS_TLS_GOTTPREL: + case R_MIPS_TLS_GD: + case R_MIPS_TLS_LDM: + if (dynobj == NULL) + elf_hash_table (info)->dynobj = dynobj = abfd; + if (!mips_elf_create_got_section (dynobj, info)) + return FALSE; + if (htab->is_vxworks && !info->shared) { - while (h->root.type == bfd_link_hash_indirect) - h = (struct elf_link_hash_entry *) h->root.u.i.link; + (*_bfd_error_handler) + (_("%B: GOT reloc at 0x%lx not expected in executables"), + abfd, (unsigned long) rel->r_offset); + bfd_set_error (bfd_error_bad_value); + return FALSE; } - } + break; - /* Some relocs require a global offset table. */ - if (dynobj == NULL || sgot == NULL) - { - switch (r_type) + /* This is just a hint; it can safely be ignored. Don't set + has_static_relocs for the corresponding symbol. */ + case R_MIPS_JALR: + break; + + case R_MIPS_32: + case R_MIPS_REL32: + case R_MIPS_64: + /* In VxWorks executables, references to external symbols + must be handled using copy relocs or PLT entries; it is not + possible to convert this relocation into a dynamic one. + + For executables that use PLTs and copy-relocs, we have a + choice between converting the relocation into a dynamic + one or using copy relocations or PLT entries. It is + usually better to do the former, unless the relocation is + against a read-only section. */ + if ((info->shared + || (h != NULL + && !htab->is_vxworks + && strcmp (h->root.root.string, "__gnu_local_gp") != 0 + && !(!info->nocopyreloc + && !PIC_OBJECT_P (abfd) + && MIPS_ELF_READONLY_SECTION (sec)))) + && (sec->flags & SEC_ALLOC) != 0) { - case R_MIPS_GOT16: - case R_MIPS_CALL16: - case R_MIPS_CALL_HI16: - case R_MIPS_CALL_LO16: - case R_MIPS_GOT_HI16: - case R_MIPS_GOT_LO16: - case R_MIPS_GOT_PAGE: - case R_MIPS_GOT_OFST: - case R_MIPS_GOT_DISP: - case R_MIPS_TLS_GOTTPREL: - case R_MIPS_TLS_GD: - case R_MIPS_TLS_LDM: + can_make_dynamic_p = TRUE; if (dynobj == NULL) elf_hash_table (info)->dynobj = dynobj = abfd; - if (! mips_elf_create_got_section (dynobj, info, FALSE)) - return FALSE; - g = mips_elf_got_info (dynobj, &sgot); - if (htab->is_vxworks && !info->shared) - { - (*_bfd_error_handler) - (_("%B: GOT reloc at 0x%lx not expected in executables"), - abfd, (unsigned long) rel->r_offset); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } break; + } + /* Fall through. */ - case R_MIPS_32: - case R_MIPS_REL32: - case R_MIPS_64: - /* In VxWorks executables, references to external symbols - are handled using copy relocs or PLT stubs, so there's - no need to add a dynamic relocation here. */ - if (dynobj == NULL - && (info->shared || (h != NULL && !htab->is_vxworks)) - && (sec->flags & SEC_ALLOC) != 0) - elf_hash_table (info)->dynobj = dynobj = abfd; - break; + default: + /* Most static relocations require pointer equality, except + for branches. */ + if (h) + h->pointer_equality_needed = TRUE; + /* Fall through. */ - default: - break; - } + case R_MIPS_26: + case R_MIPS_PC16: + case R_MIPS16_26: + if (h) + ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE; + break; } if (h) { - ((struct mips_elf_link_hash_entry *) h)->is_relocation_target = TRUE; - /* Relocations against the special VxWorks __GOTT_BASE__ and __GOTT_INDEX__ symbols must be left to the loader. Allocate room for them in .rela.dyn. */ @@ -6501,24 +7574,28 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, else if (r_type == R_MIPS_CALL_LO16 || r_type == R_MIPS_GOT_LO16 || r_type == R_MIPS_GOT_DISP - || (r_type == R_MIPS_GOT16 && htab->is_vxworks)) + || (got16_reloc_p (r_type) && htab->is_vxworks)) { /* We may need a local GOT entry for this relocation. We don't count R_MIPS_GOT_PAGE because we can estimate the maximum number of pages needed by looking at the size of - the segment. Similar comments apply to R_MIPS_GOT16 and - R_MIPS_CALL16, except on VxWorks, where GOT relocations + the segment. Similar comments apply to R_MIPS*_GOT16 and + R_MIPS*_CALL16, except on VxWorks, where GOT relocations always evaluate to "G". We don't count R_MIPS_GOT_HI16, or R_MIPS_CALL_HI16 because these are always followed by an R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */ - if (! mips_elf_record_local_got_symbol (abfd, r_symndx, - rel->r_addend, g, 0)) + if (!mips_elf_record_local_got_symbol (abfd, r_symndx, + rel->r_addend, info, 0)) return FALSE; } + if (h != NULL && mips_elf_relocation_needs_la25_stub (abfd, r_type)) + ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE; + switch (r_type) { case R_MIPS_CALL16: + case R_MIPS16_CALL16: if (h == NULL) { (*_bfd_error_handler) @@ -6533,11 +7610,11 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_MIPS_CALL_LO16: if (h != NULL) { - /* VxWorks call relocations point the function's .got.plt + /* VxWorks call relocations point at the function's .got.plt entry, which will be allocated by adjust_dynamic_symbol. Otherwise, this symbol requires a global GOT entry. */ if ((!htab->is_vxworks || h->forced_local) - && !mips_elf_record_global_got_symbol (h, abfd, info, g, 0)) + && !mips_elf_record_global_got_symbol (h, abfd, info, 0)) return FALSE; /* We need a stub, not a plt entry for the undefined @@ -6551,30 +7628,53 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_MIPS_GOT_PAGE: /* If this is a global, overridable symbol, GOT_PAGE will decay to GOT_DISP, so we'll need a GOT entry for it. */ - if (h == NULL) - break; - else + if (h) { struct mips_elf_link_hash_entry *hmips = (struct mips_elf_link_hash_entry *) h; - while (hmips->root.root.type == bfd_link_hash_indirect - || hmips->root.root.type == bfd_link_hash_warning) - hmips = (struct mips_elf_link_hash_entry *) - hmips->root.root.u.i.link; - + /* This symbol is definitely not overridable. */ if (hmips->root.def_regular && ! (info->shared && ! info->symbolic && ! hmips->root.forced_local)) - break; + h = NULL; } /* Fall through. */ + case R_MIPS16_GOT16: case R_MIPS_GOT16: case R_MIPS_GOT_HI16: case R_MIPS_GOT_LO16: + if (!h || r_type == R_MIPS_GOT_PAGE) + { + /* This relocation needs (or may need, if h != NULL) a + page entry in the GOT. For R_MIPS_GOT_PAGE we do not + know for sure until we know whether the symbol is + preemptible. */ + if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel)) + { + if (!mips_elf_get_section_contents (abfd, sec, &contents)) + return FALSE; + howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE); + addend = mips_elf_read_rel_addend (abfd, rel, + howto, contents); + if (r_type == R_MIPS_GOT16) + mips_elf_add_lo16_rel_addend (abfd, rel, rel_end, + contents, &addend); + else + addend <<= howto->rightshift; + } + else + addend = rel->r_addend; + if (!mips_elf_record_got_page_entry (info, abfd, r_symndx, + addend)) + return FALSE; + break; + } + /* Fall through. */ + case R_MIPS_GOT_DISP: - if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g, 0)) + if (h && !mips_elf_record_global_got_symbol (h, abfd, info, 0)) return FALSE; break; @@ -6606,15 +7706,17 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, (struct mips_elf_link_hash_entry *) h; hmips->tls_type |= flag; - if (h && ! mips_elf_record_global_got_symbol (h, abfd, info, g, flag)) + if (h && !mips_elf_record_global_got_symbol (h, abfd, + info, flag)) return FALSE; } else { BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != 0); - if (! mips_elf_record_local_got_symbol (abfd, r_symndx, - rel->r_addend, g, flag)) + if (!mips_elf_record_local_got_symbol (abfd, r_symndx, + rel->r_addend, + info, flag)) return FALSE; } } @@ -6626,8 +7728,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* In VxWorks executables, references to external symbols are handled using copy relocs or PLT stubs, so there's no need to add a .rela.dyn entry for this relocation. */ - if ((info->shared || (h != NULL && !htab->is_vxworks)) - && (sec->flags & SEC_ALLOC) != 0) + if (can_make_dynamic_p) { if (sreloc == NULL) { @@ -6635,7 +7736,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, if (sreloc == NULL) return FALSE; } - if (info->shared) + if (info->shared && h == NULL) { /* When creating a shared object, we must copy these reloc types into the output file as R_MIPS_REL32 @@ -6650,8 +7751,17 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, { struct mips_elf_link_hash_entry *hmips; - /* We only need to copy this reloc if the symbol is - defined in a dynamic object. */ + /* For a shared object, we must copy this relocation + unless the symbol turns out to be undefined and + weak with non-default visibility, in which case + it will be left as zero. + + We could elide R_MIPS_REL32 for locally binding symbols + in shared libraries, but do not yet do so. + + For an executable, we only need to copy this + reloc if the symbol is defined in a dynamic + object. */ hmips = (struct mips_elf_link_hash_entry *) h; ++hmips->possibly_dynamic_relocs; if (MIPS_ELF_READONLY_SECTION (sec)) @@ -6659,23 +7769,6 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, are relocations against the text segment. */ hmips->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_MIPS_GOTSYM if there are - dynamic relocations against it. This does not apply - to VxWorks, which does not have the usual coupling - between global GOT entries and .dynsym entries. */ - if (h != NULL && !htab->is_vxworks) - { - if (dynobj == NULL) - elf_hash_table (info)->dynobj = dynobj = abfd; - if (! mips_elf_create_got_section (dynobj, info, TRUE)) - return FALSE; - g = mips_elf_got_info (dynobj, &sgot); - if (! mips_elf_record_global_got_symbol (h, abfd, info, g, 0)) - return FALSE; - } } if (SGI_COMPAT (abfd)) @@ -6683,16 +7776,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, sizeof (Elf32_External_crinfo); break; - case R_MIPS_PC16: - if (h) - ((struct mips_elf_link_hash_entry *) h)->is_branch_target = TRUE; - break; - case R_MIPS_26: - if (h) - ((struct mips_elf_link_hash_entry *) h)->is_branch_target = TRUE; - /* Fall through. */ - case R_MIPS_GPREL16: case R_MIPS_LITERAL: case R_MIPS_GPREL32: @@ -6711,7 +7795,9 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* This relocation describes which C++ vtable entries are actually used. Record for later use during GC. */ case R_MIPS_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset)) return FALSE; break; @@ -6729,6 +7815,7 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, default: ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE; break; + case R_MIPS16_CALL16: case R_MIPS_CALL16: case R_MIPS_CALL_HI16: case R_MIPS_CALL_LO16: @@ -6736,18 +7823,59 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; } - /* If this reloc is not a 16 bit call, and it has a global - symbol, then we will need the fn_stub if there is one. - References from a stub section do not count. */ + /* See if this reloc would need to refer to a MIPS16 hard-float stub, + if there is one. We only need to handle global symbols here; + we decide whether to keep or delete stubs for local symbols + when processing the stub's relocations. */ if (h != NULL - && r_type != R_MIPS16_26 - && !mips16_stub_section_p (abfd, sec)) + && !mips16_call_reloc_p (r_type) + && !section_allows_mips16_refs_p (sec)) { struct mips_elf_link_hash_entry *mh; mh = (struct mips_elf_link_hash_entry *) h; mh->need_fn_stub = TRUE; } + + /* Refuse some position-dependent relocations when creating a + shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're + not PIC, but we can create dynamic relocations and the result + will be fine. Also do not refuse R_MIPS_LO16, which can be + combined with R_MIPS_GOT16. */ + if (info->shared) + { + switch (r_type) + { + case R_MIPS16_HI16: + case R_MIPS_HI16: + case R_MIPS_HIGHER: + case R_MIPS_HIGHEST: + /* Don't refuse a high part relocation if it's against + no symbol (e.g. part of a compound relocation). */ + if (r_symndx == 0) + break; + + /* R_MIPS_HI16 against _gp_disp is used for $gp setup, + and has a special meaning. */ + if (!NEWABI_P (abfd) && h != NULL + && strcmp (h->root.root.string, "_gp_disp") == 0) + break; + + /* FALLTHROUGH */ + + case R_MIPS16_26: + case R_MIPS_26: + howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE); + (*_bfd_error_handler) + (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"), + abfd, howto->name, + (h) ? h->root.root.string : "a local symbol"); + bfd_set_error (bfd_error_bad_value); + return FALSE; + default: + break; + } + } } return TRUE; @@ -6875,17 +8003,8 @@ _bfd_mips_relax_section (bfd *abfd, asection *sec, continue; /* Get the section contents if we haven't done so already. */ - if (contents == NULL) - { - /* Get cached copy if it exists. */ - if (elf_section_data (sec)->this_hdr.contents != NULL) - contents = elf_section_data (sec)->this_hdr.contents; - else - { - if (!bfd_malloc_and_get_section (abfd, sec, &contents)) - goto relax_return; - } - } + if (!mips_elf_get_section_contents (abfd, sec, &contents)) + goto relax_return; instruction = bfd_get_32 (abfd, contents + irel->r_offset); @@ -6923,113 +8042,87 @@ _bfd_mips_relax_section (bfd *abfd, asection *sec, 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. */ +/* Allocate space for global sym dynamic relocs. */ -bfd_boolean -_bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *h) +static bfd_boolean +allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) { + struct bfd_link_info *info = inf; bfd *dynobj; struct mips_elf_link_hash_entry *hmips; - asection *s; struct mips_elf_link_hash_table *htab; htab = mips_elf_hash_table (info); dynobj = elf_hash_table (info)->dynobj; + hmips = (struct mips_elf_link_hash_entry *) h; - /* 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))); + /* VxWorks executables are handled elsewhere; we only need to + allocate relocations in shared objects. */ + if (htab->is_vxworks && !info->shared) + return TRUE; - /* If this symbol is defined in a dynamic object, we need to copy - any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output - file. */ - hmips = (struct mips_elf_link_hash_entry *) h; + /* Ignore indirect and warning symbols. All relocations against + such symbols will be redirected to the target symbol. */ + if (h->root.type == bfd_link_hash_indirect + || h->root.type == bfd_link_hash_warning) + return TRUE; + + /* If this symbol is defined in a dynamic object, or we are creating + a shared library, we will need to copy any R_MIPS_32 or + R_MIPS_REL32 relocs against it into the output file. */ if (! info->relocatable && hmips->possibly_dynamic_relocs != 0 && (h->root.type == bfd_link_hash_defweak - || !h->def_regular)) - { - mips_elf_allocate_dynamic_relocations - (dynobj, info, hmips->possibly_dynamic_relocs); - if (hmips->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 (! hmips->no_fn_stub - && h->needs_plt) + || !h->def_regular + || info->shared)) { - if (! elf_hash_table (info)->dynamic_sections_created) - return TRUE; + bfd_boolean do_copy = 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) + if (h->root.type == bfd_link_hash_undefweak) { - /* We need .stub section. */ - s = bfd_get_section_by_name (dynobj, - MIPS_ELF_STUB_SECTION_NAME (dynobj)); - BFD_ASSERT (s != NULL); + /* Do not copy relocations for undefined weak symbols with + non-default visibility. */ + if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT) + do_copy = FALSE; - 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 sure undefined weak symbols are output as a dynamic + symbol in PIEs. */ + else if (h->dynindx == -1 && !h->forced_local) + { + if (! bfd_elf_link_record_dynamic_symbol (info, h)) + return FALSE; + } + } - /* Make room for this stub code. */ - s->size += htab->function_stub_size; + if (do_copy) + { + /* 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_MIPS_GOTSYM if there are dynamic relocations against it. */ + if (hmips->global_got_area > GGA_RELOC_ONLY) + hmips->global_got_area = GGA_RELOC_ONLY; - /* The last half word of the stub will be filled with the index - of this symbol in .dynsym section. */ - return TRUE; + mips_elf_allocate_dynamic_relocations + (dynobj, info, hmips->possibly_dynamic_relocs); + if (hmips->readonly_reloc) + /* We tell the dynamic linker that there are relocations + against the text segment. */ + info->flags |= DF_TEXTREL; } } - 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; } -/* Likewise, for VxWorks. */ +/* 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. */ bfd_boolean -_bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *h) +_bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info, + struct elf_link_hash_entry *h) { bfd *dynobj; struct mips_elf_link_hash_entry *hmips; @@ -7042,46 +8135,84 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, /* Make sure we know what is going on here. */ BFD_ASSERT (dynobj != NULL && (h->needs_plt - || h->needs_copy || h->u.weakdef != NULL || (h->def_dynamic && h->ref_regular && !h->def_regular))); - /* If the symbol is defined by a dynamic object, we need a PLT stub if - either (a) we want to branch to the symbol or (b) we're linking an - executable that needs a canonical function address. In the latter - case, the canonical address will be the address of the executable's - load stub. */ - if ((hmips->is_branch_target - || (!info->shared - && h->type == STT_FUNC - && hmips->is_relocation_target)) - && h->def_dynamic - && h->ref_regular - && !h->def_regular - && !h->forced_local) - h->needs_plt = 1; - - /* Locally-binding symbols do not need a PLT stub; we can refer to - the functions directly. */ - else if (h->needs_plt - && (SYMBOL_CALLS_LOCAL (info, h) - || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT - && h->root.type == bfd_link_hash_undefweak))) - { - h->needs_plt = 0; - return TRUE; + hmips = (struct mips_elf_link_hash_entry *) h; + + /* If there are call relocations against an externally-defined symbol, + see whether we can create a MIPS lazy-binding stub for it. We can + only do this if all references to the function are through call + relocations, and in that case, the traditional lazy-binding stubs + are much more efficient than PLT entries. + + Traditional stubs are only available on SVR4 psABI-based systems; + VxWorks always uses PLTs instead. */ + if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub) + { + 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) + { + hmips->needs_lazy_stub = TRUE; + htab->lazy_stub_count++; + return TRUE; + } } + /* As above, VxWorks requires PLT entries for externally-defined + functions that are only accessed through call relocations. - if (h->needs_plt) + Both VxWorks and non-VxWorks targets also need PLT entries if there + are static-only relocations against an externally-defined function. + This can technically occur for shared libraries if there are + branches to the symbol, although it is unlikely that this will be + used in practice due to the short ranges involved. It can occur + for any relative or absolute relocation in executables; in that + case, the PLT entry becomes the function's canonical address. */ + else if (((h->needs_plt && !hmips->no_fn_stub) + || (h->type == STT_FUNC && hmips->has_static_relocs)) + && htab->use_plts_and_copy_relocs + && !SYMBOL_CALLS_LOCAL (info, h) + && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT + && h->root.type == bfd_link_hash_undefweak)) { /* If this is the first symbol to need a PLT entry, allocate room - for the header, and for the header's .rela.plt.unloaded entries. */ + for the header. */ if (htab->splt->size == 0) { + BFD_ASSERT (htab->sgotplt->size == 0); + + /* If we're using the PLT additions to the psABI, each PLT + entry is 16 bytes and the PLT0 entry is 32 bytes. + Encourage better cache usage by aligning. We do this + lazily to avoid pessimizing traditional objects. */ + if (!htab->is_vxworks + && !bfd_set_section_alignment (dynobj, htab->splt, 5)) + return FALSE; + + /* Make sure that .got.plt is word-aligned. We do this lazily + for the same reason as above. */ + if (!bfd_set_section_alignment (dynobj, htab->sgotplt, + MIPS_ELF_LOG_FILE_ALIGN (dynobj))) + return FALSE; + htab->splt->size += htab->plt_header_size; - if (!info->shared) + + /* On non-VxWorks targets, the first two entries in .got.plt + are reserved. */ + if (!htab->is_vxworks) + htab->sgotplt->size += 2 * MIPS_ELF_GOT_SIZE (dynobj); + + /* On VxWorks, also allocate room for the header's + .rela.plt.unloaded entries. */ + if (htab->is_vxworks && !info->shared) htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela); } @@ -7090,36 +8221,33 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, htab->splt->size += htab->plt_entry_size; /* If the output file has no definition of the symbol, set the - symbol's value to the address of the stub. For executables, - point at the PLT load stub rather than the lazy resolution stub; - this stub will become the canonical function address. */ - if (!h->def_regular) + symbol's value to the address of the stub. */ + if (!info->shared && !h->def_regular) { h->root.u.def.section = htab->splt; h->root.u.def.value = h->plt.offset; - if (!info->shared) + /* For VxWorks, point at the PLT load stub rather than the + lazy resolution stub; this stub will become the canonical + function address. */ + if (htab->is_vxworks) h->root.u.def.value += 8; } - /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation. */ - htab->sgotplt->size += 4; - htab->srelplt->size += sizeof (Elf32_External_Rela); + /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT + relocation. */ + htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj); + htab->srelplt->size += (htab->is_vxworks + ? MIPS_ELF_RELA_SIZE (dynobj) + : MIPS_ELF_REL_SIZE (dynobj)); /* Make room for the .rela.plt.unloaded relocations. */ - if (!info->shared) + if (htab->is_vxworks && !info->shared) htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela); - return TRUE; - } + /* All relocations against this symbol that could have been made + dynamic will now refer to the PLT entry instead. */ + hmips->possibly_dynamic_relocs = 0; - /* If a function symbol is defined by a dynamic object, and we do not - need a PLT stub for it, the symbol's value should be zero. */ - if (h->type == STT_FUNC - && h->def_dynamic - && h->ref_regular - && !h->def_regular) - { - h->root.u.def.value = 0; return TRUE; } @@ -7135,11 +8263,27 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, return TRUE; } - /* This is a reference to a symbol defined by a dynamic object which - is not a function. */ - if (info->shared) + /* Otherwise, there is nothing further to do for symbols defined + in regular objects. */ + if (h->def_regular) + return TRUE; + + /* There's also nothing more to do if we'll convert all relocations + against this symbol into dynamic relocations. */ + if (!hmips->has_static_relocs) return TRUE; + /* We're now relying on copy relocations. Complain if we have + some that we can't convert. */ + if (!htab->use_plts_and_copy_relocs || info->shared) + { + (*_bfd_error_handler) (_("non-dynamic relocations refer to " + "dynamic symbol %s"), + h->root.root.string); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + /* We must allocate the symbol in our .dynbss section, which will become part of the .bss section of the executable. There will be an entry for this symbol in the .dynsym section. The dynamic @@ -7152,39 +8296,20 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, if ((h->root.u.def.section->flags & SEC_ALLOC) != 0) { - htab->srelbss->size += sizeof (Elf32_External_Rela); + if (htab->is_vxworks) + htab->srelbss->size += sizeof (Elf32_External_Rela); + else + mips_elf_allocate_dynamic_relocations (dynobj, info, 1); h->needs_copy = 1; } + /* All relocations against this symbol that could have been made + dynamic will now refer to the local copy instead. */ + hmips->possibly_dynamic_relocs = 0; + return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss); } -/* Return the number of dynamic section symbols required by OUTPUT_BFD. - The number might be exact or a worst-case estimate, depending on how - much information is available to elf_backend_omit_section_dynsym at - the current linking stage. */ - -static bfd_size_type -count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info) -{ - bfd_size_type count; - - count = 0; - if (info->shared || elf_hash_table (info)->is_relocatable_executable) - { - asection *p; - const struct elf_backend_data *bed; - - 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)) - ++count; - } - return count; -} - /* This function is called after all the input files have been read, and the input sections have been assigned to output sections. We check for any mips16 stub sections that we can discard. */ @@ -7194,38 +8319,66 @@ _bfd_mips_elf_always_size_sections (bfd *output_bfd, struct bfd_link_info *info) { asection *ri; + struct mips_elf_link_hash_table *htab; + struct mips_htab_traverse_info hti; + + htab = mips_elf_hash_table (info); + + /* The .reginfo section has a fixed size. */ + ri = bfd_get_section_by_name (output_bfd, ".reginfo"); + if (ri != NULL) + bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo)); + + hti.info = info; + hti.output_bfd = output_bfd; + hti.error = FALSE; + mips_elf_link_hash_traverse (mips_elf_hash_table (info), + mips_elf_check_symbols, &hti); + if (hti.error) + return FALSE; + return TRUE; +} + +/* If the link uses a GOT, lay it out and work out its size. */ + +static bfd_boolean +mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info) +{ bfd *dynobj; asection *s; struct mips_got_info *g; - int i; bfd_size_type loadable_size = 0; - bfd_size_type local_gotno; - bfd_size_type dynsymcount; + bfd_size_type page_gotno; bfd *sub; struct mips_elf_count_tls_arg count_tls_arg; struct mips_elf_link_hash_table *htab; htab = mips_elf_hash_table (info); + s = htab->sgot; + if (s == NULL) + return TRUE; - /* The .reginfo section has a fixed size. */ - ri = bfd_get_section_by_name (output_bfd, ".reginfo"); - if (ri != NULL) - bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo)); + dynobj = elf_hash_table (info)->dynobj; + g = htab->got_info; - if (! (info->relocatable - || ! mips_elf_hash_table (info)->mips16_stubs_seen)) - mips_elf_link_hash_traverse (mips_elf_hash_table (info), - mips_elf_check_mips16_stubs, NULL); + /* Allocate room for the reserved entries. VxWorks always reserves + 3 entries; other objects only reserve 2 entries. */ + BFD_ASSERT (g->assigned_gotno == 0); + if (htab->is_vxworks) + htab->reserved_gotno = 3; + else + htab->reserved_gotno = 2; + g->local_gotno += htab->reserved_gotno; + g->assigned_gotno = htab->reserved_gotno; - dynobj = elf_hash_table (info)->dynobj; - if (dynobj == NULL) - /* Relocatable links don't have it. */ - return TRUE; + /* Replace entries for indirect and warning symbols with entries for + the target symbol. */ + if (!mips_elf_resolve_final_got_entries (g)) + return FALSE; - g = mips_elf_got_info (dynobj, &s); - if (s == NULL) - return TRUE; + /* Count the number of GOT symbols. */ + mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, g); /* Calculate the total loadable size of the output. That will give us the maximum number of GOT_PAGE entries @@ -7245,53 +8398,24 @@ _bfd_mips_elf_always_size_sections (bfd *output_bfd, } } - /* There has to be a global GOT entry for every symbol with - a dynamic symbol table index of DT_MIPS_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 (! mips_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; - - /* Get a worst-case estimate of the number of dynamic symbols needed. - At this point, dynsymcount does not account for section symbols - and count_section_dynsyms may overestimate the number that will - be needed. */ - dynsymcount = (elf_hash_table (info)->dynsymcount - + count_section_dynsyms (output_bfd, info)); - - /* Determine the size of one stub entry. */ - htab->function_stub_size = (dynsymcount > 0x10000 - ? MIPS_FUNCTION_STUB_BIG_SIZE - : MIPS_FUNCTION_STUB_NORMAL_SIZE); - - /* In the worst case, we'll get one stub per dynamic symbol, plus - one to account for the dummy entry at the end required by IRIX - rld. */ - loadable_size += htab->function_stub_size * (i + 1); - if (htab->is_vxworks) - /* There's no need to allocate page entries for VxWorks; R_MIPS_GOT16 + /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16 relocations against local symbols evaluate to "G", and the EABI does not include R_MIPS_GOT_PAGE. */ - local_gotno = 0; + page_gotno = 0; else /* Assume there are two loadable segments consisting of contiguous sections. Is 5 enough? */ - local_gotno = (loadable_size >> 16) + 5; + page_gotno = (loadable_size >> 16) + 5; - g->local_gotno += local_gotno; - s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd); + /* Choose the smaller of the two estimates; both are intended to be + conservative. */ + if (page_gotno > g->page_gotno) + page_gotno = g->page_gotno; - g->global_gotno = i; - s->size += i * MIPS_ELF_GOT_SIZE (output_bfd); + g->local_gotno += page_gotno; + s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd); + s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd); /* We need to calculate tls_gotno for global symbols at this point instead of building it up earlier, to avoid doublecounting @@ -7304,27 +8428,120 @@ _bfd_mips_elf_always_size_sections (bfd *output_bfd, g->tls_gotno += count_tls_arg.needed; s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd); - mips_elf_resolve_final_got_entries (g); - /* VxWorks does not support multiple GOTs. It initializes $gp to __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the dynamic loader. */ - if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info)) + if (htab->is_vxworks) + { + /* VxWorks executables do not need a GOT. */ + if (info->shared) + { + /* Each VxWorks GOT entry needs an explicit relocation. */ + unsigned int count; + + count = g->global_gotno + g->local_gotno - htab->reserved_gotno; + if (count) + mips_elf_allocate_dynamic_relocations (dynobj, info, count); + } + } + else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info)) { - if (! mips_elf_multi_got (output_bfd, info, g, s, local_gotno)) + if (!mips_elf_multi_got (output_bfd, info, s, page_gotno)) return FALSE; } else { - /* Set up TLS entries for the first GOT. */ + struct mips_elf_count_tls_arg arg; + + /* Set up TLS entries. */ g->tls_assigned_gotno = g->global_gotno + g->local_gotno; htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g); + + /* Allocate room for the TLS relocations. */ + arg.info = info; + arg.needed = 0; + htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg); + elf_link_hash_traverse (elf_hash_table (info), + mips_elf_count_global_tls_relocs, + &arg); + if (arg.needed) + mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed); } - htab->computed_got_sizes = TRUE; return TRUE; } +/* Estimate the size of the .MIPS.stubs section. */ + +static void +mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info) +{ + struct mips_elf_link_hash_table *htab; + bfd_size_type dynsymcount; + + htab = mips_elf_hash_table (info); + if (htab->lazy_stub_count == 0) + return; + + /* IRIX rld assumes that a function stub isn't at the end of the .text + section, so add a dummy entry to the end. */ + htab->lazy_stub_count++; + + /* Get a worst-case estimate of the number of dynamic symbols needed. + At this point, dynsymcount does not account for section symbols + and count_section_dynsyms may overestimate the number that will + be needed. */ + dynsymcount = (elf_hash_table (info)->dynsymcount + + count_section_dynsyms (output_bfd, info)); + + /* Determine the size of one stub entry. */ + htab->function_stub_size = (dynsymcount > 0x10000 + ? MIPS_FUNCTION_STUB_BIG_SIZE + : MIPS_FUNCTION_STUB_NORMAL_SIZE); + + htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size; +} + +/* A mips_elf_link_hash_traverse callback for which DATA points to the + MIPS hash table. If H needs a traditional MIPS lazy-binding stub, + allocate an entry in the stubs section. */ + +static bfd_boolean +mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data) +{ + struct mips_elf_link_hash_table *htab; + + htab = (struct mips_elf_link_hash_table *) data; + if (h->needs_lazy_stub) + { + h->root.root.u.def.section = htab->sstubs; + h->root.root.u.def.value = htab->sstubs->size; + h->root.plt.offset = htab->sstubs->size; + htab->sstubs->size += htab->function_stub_size; + } + return TRUE; +} + +/* Allocate offsets in the stubs section to each symbol that needs one. + Set the final size of the .MIPS.stub section. */ + +static void +mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info) +{ + struct mips_elf_link_hash_table *htab; + + htab = mips_elf_hash_table (info); + if (htab->lazy_stub_count == 0) + return; + + htab->sstubs->size = 0; + mips_elf_link_hash_traverse (mips_elf_hash_table (info), + mips_elf_allocate_lazy_stub, htab); + htab->sstubs->size += htab->function_stub_size; + BFD_ASSERT (htab->sstubs->size + == htab->lazy_stub_count * htab->function_stub_size); +} + /* Set the sizes of the dynamic sections. */ bfd_boolean @@ -7352,13 +8569,37 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, s->contents = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd); } + + /* Create a symbol for the PLT, if we know that we are using it. */ + if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL) + { + struct elf_link_hash_entry *h; + + BFD_ASSERT (htab->use_plts_and_copy_relocs); + + h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt, + "_PROCEDURE_LINKAGE_TABLE_"); + htab->root.hplt = h; + if (h == NULL) + return FALSE; + h->type = STT_FUNC; + } } + /* Allocate space for global sym dynamic relocs. */ + elf_link_hash_traverse (&htab->root, allocate_dynrelocs, (PTR) info); + + mips_elf_estimate_stub_size (output_bfd, info); + + if (!mips_elf_lay_out_got (output_bfd, info)) + return FALSE; + + mips_elf_lay_out_lazy_stubs (info); + /* The check_relocs and adjust_dynamic_symbol entry points have determined the sizes of the various dynamic sections. Allocate memory for them. */ reltext = FALSE; - sreldyn = NULL; for (s = dynobj->sections; s != NULL; s = s->next) { const char *name; @@ -7406,96 +8647,6 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, info->combreloc = 0; } } - else if (htab->is_vxworks && strcmp (name, ".got") == 0) - { - /* Executables do not need a GOT. */ - if (info->shared) - { - /* Allocate relocations for all but the reserved entries. */ - struct mips_got_info *g; - unsigned int count; - - g = mips_elf_got_info (dynobj, NULL); - count = (g->global_gotno - + g->local_gotno - - MIPS_RESERVED_GOTNO (info)); - mips_elf_allocate_dynamic_relocations (dynobj, info, count); - } - } - 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 - to versions that we must now resolve in the got_entries - hash tables. */ - struct mips_got_info *gg = mips_elf_got_info (dynobj, NULL); - struct mips_got_info *g = gg; - struct mips_elf_set_global_got_offset_arg set_got_offset_arg; - unsigned int needed_relocs = 0; - - if (gg->next) - { - set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (output_bfd); - set_got_offset_arg.info = info; - - /* NOTE 2005-02-03: How can this call, or the next, ever - find any indirect entries to resolve? They were all - resolved in mips_elf_multi_got. */ - mips_elf_resolve_final_got_entries (gg); - for (g = gg->next; g && g->next != gg; g = g->next) - { - unsigned int save_assign; - - mips_elf_resolve_final_got_entries (g); - - /* Assign offsets to global GOT entries. */ - save_assign = g->assigned_gotno; - g->assigned_gotno = g->local_gotno; - set_got_offset_arg.g = g; - set_got_offset_arg.needed_relocs = 0; - htab_traverse (g->got_entries, - mips_elf_set_global_got_offset, - &set_got_offset_arg); - needed_relocs += set_got_offset_arg.needed_relocs; - BFD_ASSERT (g->assigned_gotno - g->local_gotno - <= g->global_gotno); - - g->assigned_gotno = save_assign; - if (info->shared) - { - needed_relocs += g->local_gotno - g->assigned_gotno; - BFD_ASSERT (g->assigned_gotno == g->next->local_gotno - + g->next->global_gotno - + g->next->tls_gotno - + MIPS_RESERVED_GOTNO (info)); - } - } - } - else - { - struct mips_elf_count_tls_arg arg; - arg.info = info; - arg.needed = 0; - - htab_traverse (gg->got_entries, mips_elf_count_local_tls_relocs, - &arg); - elf_link_hash_traverse (elf_hash_table (info), - mips_elf_count_global_tls_relocs, - &arg); - - needed_relocs += arg.needed; - } - - if (needed_relocs) - mips_elf_allocate_dynamic_relocations (dynobj, info, - needed_relocs); - } - else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0) - { - /* IRIX rld assumes that the function stub isn't at the end - of .text section. So put a dummy. XXX */ - s->size += htab->function_stub_size; - } else if (! info->shared && ! mips_elf_hash_table (info)->use_rld_obj_head && CONST_STRNEQ (name, ".rld_map")) @@ -7507,9 +8658,20 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, else if (SGI_COMPAT (output_bfd) && CONST_STRNEQ (name, ".compact_rel")) s->size += mips_elf_hash_table (info)->compact_rel_size; + else if (s == htab->splt) + { + /* If the last PLT entry has a branch delay slot, allocate + room for an extra nop to fill the delay slot. This is + for CPUs without load interlocking. */ + if (! LOAD_INTERLOCKS_P (output_bfd) + && ! htab->is_vxworks && s->size > 0) + s->size += 4; + } else if (! CONST_STRNEQ (name, ".init") + && s != htab->sgot && s != htab->sgotplt - && s != htab->splt) + && s != htab->sstubs + && s != htab->sdynbss) { /* It's not one of our sections, so don't allocate space. */ continue; @@ -7524,14 +8686,6 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, if ((s->flags & SEC_HAS_CONTENTS) == 0) continue; - /* Allocate memory for this section last, since we may increase its - size above. */ - if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) == 0) - { - sreldyn = s; - continue; - } - /* Allocate memory for the section contents. */ s->contents = bfd_zalloc (dynobj, s->size); if (s->contents == NULL) @@ -7541,17 +8695,6 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, } } - /* Allocate memory for the .rel(a).dyn section. */ - if (sreldyn != NULL) - { - sreldyn->contents = bfd_zalloc (dynobj, sreldyn->size); - if (sreldyn->contents == NULL) - { - 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 @@ -7592,11 +8735,12 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0)) return FALSE; + sreldyn = mips_elf_rel_dyn_section (info, FALSE); if (htab->is_vxworks) { /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not use any of the DT_MIPS_* tags. */ - if (mips_elf_rel_dyn_section (info, FALSE)) + if (sreldyn && sreldyn->size > 0) { if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0)) return FALSE; @@ -7607,21 +8751,10 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0)) return FALSE; } - if (htab->splt->size > 0) - { - if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0)) - return FALSE; - - if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0)) - return FALSE; - - if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0)) - return FALSE; - } } else { - if (mips_elf_rel_dyn_section (info, FALSE)) + if (sreldyn && sreldyn->size > 0) { if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0)) return FALSE; @@ -7664,6 +8797,23 @@ _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd, && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0)) return FALSE; } + if (htab->splt->size > 0) + { + if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0)) + return FALSE; + + if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0)) + return FALSE; + + if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0)) + return FALSE; + + if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0)) + return FALSE; + } + if (htab->is_vxworks + && !elf_vxworks_add_dynamic_entries (output_bfd, info)) + return FALSE; } return TRUE; @@ -7805,77 +8955,23 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (!use_saved_addend_p) { - Elf_Internal_Shdr *rel_hdr; - /* If these relocations were originally of the REL variety, we must pull the addend out of the field that will be relocated. Otherwise, we simply use the contents of the - RELA relocation. To determine which flavor or relocation - this is, we depend on the fact that the INPUT_SECTION's - REL_HDR is read before its REL_HDR2. */ - rel_hdr = &elf_section_data (input_section)->rel_hdr; - if ((size_t) (rel - relocs) - >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel)) - rel_hdr = elf_section_data (input_section)->rel_hdr2; - if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd)) + RELA relocation. */ + if (mips_elf_rel_relocation_p (input_bfd, input_section, + relocs, rel)) { - bfd_byte *location = contents + rel->r_offset; - - /* Note that this is a REL relocation. */ rela_relocation_p = FALSE; - - /* Get the addend, which is stored in the input file. */ - _bfd_mips16_elf_reloc_unshuffle (input_bfd, r_type, FALSE, - location); - addend = mips_elf_obtain_contents (howto, rel, input_bfd, - contents); - _bfd_mips16_elf_reloc_shuffle(input_bfd, r_type, FALSE, - location); - - addend &= howto->src_mask; - - /* For some kinds of relocations, the ADDEND is a - combination of the addend stored in two different - relocations. */ - if (r_type == R_MIPS_HI16 || r_type == R_MIPS16_HI16 - || (r_type == R_MIPS_GOT16 + addend = mips_elf_read_rel_addend (input_bfd, rel, + howto, contents); + if (hi16_reloc_p (r_type) + || (got16_reloc_p (r_type) && mips_elf_local_relocation_p (input_bfd, rel, local_sections, FALSE))) { - const Elf_Internal_Rela *lo16_relocation; - reloc_howto_type *lo16_howto; - int lo16_type; - - if (r_type == R_MIPS16_HI16) - lo16_type = R_MIPS16_LO16; - else - lo16_type = R_MIPS_LO16; - - /* The combined value is the sum of the HI16 addend, - left-shifted by sixteen bits, and the LO16 - addend, sign extended. (Usually, the code does - a `lui' of the HI16 value, and then an `addiu' of - the LO16 value.) - - Scan ahead to find a matching LO16 relocation. - - According to the MIPS ELF ABI, the R_MIPS_LO16 - relocation must be immediately following. - However, for the IRIX6 ABI, the next relocation - may be a composed relocation consisting of - 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 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) + if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend, + contents, &addend)) { const char *name; @@ -7890,32 +8986,6 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, 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; @@ -7935,8 +9005,7 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, if (!rela_relocation_p && rel->r_addend) { addend += rel->r_addend; - if (r_type == R_MIPS_HI16 - || r_type == R_MIPS_GOT16) + if (hi16_reloc_p (r_type) || got16_reloc_p (r_type)) addend = mips_elf_high (addend); else if (r_type == R_MIPS_HIGHER) addend = mips_elf_higher (addend); @@ -8126,16 +9195,78 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, continue; } - /* Actually perform the relocation. */ - if (! mips_elf_perform_relocation (info, howto, rel, value, - input_bfd, input_section, - contents, require_jalx)) - return FALSE; + /* Actually perform the relocation. */ + if (! mips_elf_perform_relocation (info, howto, rel, value, + input_bfd, input_section, + contents, require_jalx)) + return FALSE; + } + + return TRUE; +} + +/* A function that iterates over each entry in la25_stubs and fills + in the code for each one. DATA points to a mips_htab_traverse_info. */ + +static int +mips_elf_create_la25_stub (void **slot, void *data) +{ + struct mips_htab_traverse_info *hti; + struct mips_elf_link_hash_table *htab; + struct mips_elf_la25_stub *stub; + asection *s; + bfd_byte *loc; + bfd_vma offset, target, target_high, target_low; + + stub = (struct mips_elf_la25_stub *) *slot; + hti = (struct mips_htab_traverse_info *) data; + htab = mips_elf_hash_table (hti->info); + + /* Create the section contents, if we haven't already. */ + s = stub->stub_section; + loc = s->contents; + if (loc == NULL) + { + loc = bfd_malloc (s->size); + if (loc == NULL) + { + hti->error = TRUE; + return FALSE; + } + s->contents = loc; } + /* Work out where in the section this stub should go. */ + offset = stub->offset; + + /* Work out the target address. */ + target = (stub->h->root.root.u.def.section->output_section->vma + + stub->h->root.root.u.def.section->output_offset + + stub->h->root.root.u.def.value); + target_high = ((target + 0x8000) >> 16) & 0xffff; + target_low = (target & 0xffff); + + if (stub->stub_section != htab->strampoline) + { + /* This is a simple LUI/ADIDU stub. Zero out the beginning + of the section and write the two instructions at the end. */ + memset (loc, 0, offset); + loc += offset; + bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc); + bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4); + } + else + { + /* This is trampoline. */ + loc += offset; + bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc); + bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4); + bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8); + bfd_put_32 (hti->output_bfd, 0, loc + 12); + } return TRUE; } - + /* If NAME is one of the special IRIX6 symbols defined by the linker, adjust it appropriately now. */ @@ -8201,23 +9332,97 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, const char *name; int idx; struct mips_elf_link_hash_table *htab; + struct mips_elf_link_hash_entry *hmips; htab = mips_elf_hash_table (info); dynobj = elf_hash_table (info)->dynobj; + hmips = (struct mips_elf_link_hash_entry *) h; - if (h->plt.offset != MINUS_ONE) + BFD_ASSERT (!htab->is_vxworks); + + if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub) { - asection *s; + /* We've decided to create a PLT entry for this symbol. */ + bfd_byte *loc; + bfd_vma header_address, plt_index, got_address; + bfd_vma got_address_high, got_address_low, load; + const bfd_vma *plt_entry; + + BFD_ASSERT (htab->use_plts_and_copy_relocs); + BFD_ASSERT (h->dynindx != -1); + BFD_ASSERT (htab->splt != NULL); + BFD_ASSERT (h->plt.offset <= htab->splt->size); + BFD_ASSERT (!h->def_regular); + + /* Calculate the address of the PLT header. */ + header_address = (htab->splt->output_section->vma + + htab->splt->output_offset); + + /* Calculate the index of the entry. */ + plt_index = ((h->plt.offset - htab->plt_header_size) + / htab->plt_entry_size); + + /* Calculate the address of the .got.plt entry. */ + got_address = (htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset + + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj)); + got_address_high = ((got_address + 0x8000) >> 16) & 0xffff; + got_address_low = got_address & 0xffff; + + /* Initially point the .got.plt entry at the PLT header. */ + loc = (htab->sgotplt->contents + + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj)); + if (ABI_64_P (output_bfd)) + bfd_put_64 (output_bfd, header_address, loc); + else + bfd_put_32 (output_bfd, header_address, loc); + + /* Find out where the .plt entry should go. */ + loc = htab->splt->contents + h->plt.offset; + + /* Pick the load opcode. */ + load = MIPS_ELF_LOAD_WORD (output_bfd); + + /* Fill in the PLT entry itself. */ + plt_entry = mips_exec_plt_entry; + bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc); + bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4); + + if (! LOAD_INTERLOCKS_P (output_bfd)) + { + bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8); + bfd_put_32 (output_bfd, plt_entry[3], loc + 12); + } + else + { + bfd_put_32 (output_bfd, plt_entry[3], loc + 8); + bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12); + } + + /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */ + mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt, + plt_index, h->dynindx, + R_MIPS_JUMP_SLOT, got_address); + + /* We distinguish between PLT entries and lazy-binding stubs by + giving the former an st_other value of STO_MIPS_PLT. Set the + flag and leave the value if there are any relocations in the + binary where pointer equality matters. */ + sym->st_shndx = SHN_UNDEF; + if (h->pointer_equality_needed) + sym->st_other = STO_MIPS_PLT; + else + sym->st_value = 0; + } + else if (h->plt.offset != MINUS_ONE) + { + /* We've decided to create a lazy-binding stub. */ bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE]; /* This symbol has a stub. Set it up. */ BFD_ASSERT (h->dynindx != -1); - s = bfd_get_section_by_name (dynobj, - MIPS_ELF_STUB_SECTION_NAME (dynobj)); - BFD_ASSERT (s != NULL); - BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE) || (h->dynindx <= 0xffff)); @@ -8252,8 +9457,9 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx), stub + idx); - BFD_ASSERT (h->plt.offset <= s->size); - memcpy (s->contents + h->plt.offset, stub, htab->function_stub_size); + BFD_ASSERT (h->plt.offset <= htab->sstubs->size); + memcpy (htab->sstubs->contents + h->plt.offset, + stub, htab->function_stub_size); /* Mark the symbol as undefined. plt.offset != -1 occurs only for the referenced symbol. */ @@ -8262,17 +9468,28 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, /* 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 + sym->st_value = (htab->sstubs->output_section->vma + + htab->sstubs->output_offset + h->plt.offset); } + /* If we have a MIPS16 function with a stub, the dynamic symbol must + refer to the stub, since only the stub uses the standard calling + conventions. */ + if (h->dynindx != -1 && hmips->fn_stub != NULL) + { + BFD_ASSERT (hmips->need_fn_stub); + sym->st_value = (hmips->fn_stub->output_section->vma + + hmips->fn_stub->output_offset); + sym->st_size = hmips->fn_stub->size; + sym->st_other = ELF_ST_VISIBILITY (sym->st_other); + } + BFD_ASSERT (h->dynindx != -1 || h->forced_local); - sgot = mips_elf_got_section (dynobj, FALSE); - BFD_ASSERT (sgot != NULL); - BFD_ASSERT (mips_elf_section_data (sgot) != NULL); - g = mips_elf_section_data (sgot)->u.got_info; + sgot = htab->sgot; + g = htab->got_info; BFD_ASSERT (g != NULL); /* Run through the global symbol table, creating GOT entries for all @@ -8284,7 +9501,8 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, bfd_vma value; value = sym->st_value; - offset = mips_elf_global_got_index (dynobj, output_bfd, h, R_MIPS_GOT16, info); + offset = mips_elf_global_got_index (dynobj, output_bfd, h, + R_MIPS_GOT16, info); MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset); } @@ -8298,7 +9516,7 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, e.abfd = output_bfd; e.symndx = -1; - e.d.h = (struct mips_elf_link_hash_entry *)h; + e.d.h = hmips; e.tls_type = 0; for (g = g->next; g->next != gg; g = g->next) @@ -8385,6 +9603,23 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, } } + /* Emit a copy reloc, if needed. */ + if (h->needs_copy) + { + asection *s; + bfd_vma symval; + + BFD_ASSERT (h->dynindx != -1); + BFD_ASSERT (htab->use_plts_and_copy_relocs); + + s = mips_elf_rel_dyn_section (info, FALSE); + symval = (h->root.u.def.section->output_section->vma + + h->root.u.def.section->output_offset + + h->root.u.def.value); + mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++, + h->dynindx, R_MIPS_COPY, symval); + } + /* Handle the IRIX6-specific symbols. */ if (IRIX_COMPAT (output_bfd) == ict_irix6) mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym); @@ -8414,9 +9649,13 @@ _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd, } } - /* If this is a mips16 symbol, force the value to be even. */ - if (sym->st_other == STO_MIPS16) - sym->st_value &= ~1; + /* Keep dynamic MIPS16 symbols odd. This allows the dynamic linker to + treat MIPS16 symbols like any other. */ + if (ELF_ST_IS_MIPS16 (sym->st_other)) + { + BFD_ASSERT (sym->st_value & 1); + sym->st_other -= STO_MIPS16; + } return TRUE; } @@ -8536,10 +9775,8 @@ _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd, BFD_ASSERT (h->dynindx != -1 || h->forced_local); - sgot = mips_elf_got_section (dynobj, FALSE); - BFD_ASSERT (sgot != NULL); - BFD_ASSERT (mips_elf_section_data (sgot) != NULL); - g = mips_elf_section_data (sgot)->u.got_info; + sgot = htab->sgot; + g = htab->got_info; BFD_ASSERT (g != NULL); /* See if this symbol has an entry in the GOT. */ @@ -8587,12 +9824,53 @@ _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd, } /* If this is a mips16 symbol, force the value to be even. */ - if (sym->st_other == STO_MIPS16) + if (ELF_ST_IS_MIPS16 (sym->st_other)) sym->st_value &= ~1; return TRUE; } +/* Write out a plt0 entry to the beginning of .plt. */ + +static void +mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info) +{ + bfd_byte *loc; + bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low; + static const bfd_vma *plt_entry; + struct mips_elf_link_hash_table *htab; + + htab = mips_elf_hash_table (info); + if (ABI_64_P (output_bfd)) + plt_entry = mips_n64_exec_plt0_entry; + else if (ABI_N32_P (output_bfd)) + plt_entry = mips_n32_exec_plt0_entry; + else + plt_entry = mips_o32_exec_plt0_entry; + + /* Calculate the value of .got.plt. */ + gotplt_value = (htab->sgotplt->output_section->vma + + htab->sgotplt->output_offset); + gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff; + gotplt_value_low = gotplt_value & 0xffff; + + /* The PLT sequence is not safe for N64 if .got.plt's address can + not be loaded in two instructions. */ + BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0 + || ~(gotplt_value | 0x7fffffff) == 0); + + /* Install the PLT header. */ + loc = htab->splt->contents; + bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc); + bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4); + bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8); + bfd_put_32 (output_bfd, plt_entry[3], loc + 12); + bfd_put_32 (output_bfd, plt_entry[4], loc + 16); + bfd_put_32 (output_bfd, plt_entry[5], loc + 20); + bfd_put_32 (output_bfd, plt_entry[6], loc + 24); + bfd_put_32 (output_bfd, plt_entry[7], loc + 28); +} + /* Install the PLT header for a VxWorks executable and finalize the contents of .rela.plt.unloaded. */ @@ -8700,17 +9978,8 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, sdyn = bfd_get_section_by_name (dynobj, ".dynamic"); - sgot = mips_elf_got_section (dynobj, FALSE); - if (sgot == NULL) - gg = g = NULL; - else - { - BFD_ASSERT (mips_elf_section_data (sgot) != NULL); - gg = mips_elf_section_data (sgot)->u.got_info; - BFD_ASSERT (gg != NULL); - g = mips_elf_got_for_ibfd (gg, output_bfd); - BFD_ASSERT (g != NULL); - } + sgot = htab->sgot; + gg = htab->got_info; if (elf_hash_table (info)->dynamic_sections_created) { @@ -8718,6 +9987,9 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, int dyn_to_skip = 0, dyn_skipped = 0; BFD_ASSERT (sdyn != NULL); + BFD_ASSERT (gg != NULL); + + g = mips_elf_got_for_ibfd (gg, output_bfd); BFD_ASSERT (g != NULL); for (b = sdyn->contents; @@ -8754,21 +10026,13 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTGOT: - name = ".got"; - if (htab->is_vxworks) - { - /* _GLOBAL_OFFSET_TABLE_ is defined to be the beginning - of the ".got" section in DYNOBJ. */ - s = bfd_get_section_by_name (dynobj, name); - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; - } - else - { - s = bfd_get_section_by_name (output_bfd, name); - BFD_ASSERT (s != NULL); - dyn.d_un.d_ptr = s->vma; - } + s = htab->sgot; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; + break; + + case DT_MIPS_PLTGOT: + s = htab->sgotplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_MIPS_RLD_VERSION: @@ -8834,7 +10098,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, break; case DT_MIPS_HIPAGENO: - dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO (info); + dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno; break; case DT_MIPS_RLD_MAP: @@ -8855,18 +10119,21 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, break; case DT_PLTREL: - BFD_ASSERT (htab->is_vxworks); - dyn.d_un.d_val = DT_RELA; + BFD_ASSERT (htab->use_plts_and_copy_relocs); + if (htab->is_vxworks) + dyn.d_un.d_val = DT_RELA; + else + dyn.d_un.d_val = DT_REL; break; case DT_PLTRELSZ: - BFD_ASSERT (htab->is_vxworks); + BFD_ASSERT (htab->use_plts_and_copy_relocs); dyn.d_un.d_val = htab->srelplt->size; break; case DT_JMPREL: - BFD_ASSERT (htab->is_vxworks); - dyn.d_un.d_val = (htab->srelplt->output_section->vma + BFD_ASSERT (htab->use_plts_and_copy_relocs); + dyn.d_un.d_ptr = (htab->srelplt->output_section->vma + htab->srelplt->output_offset); break; @@ -8891,6 +10158,9 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, default: swap_out_p = FALSE; + if (htab->is_vxworks + && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) + swap_out_p = TRUE; break; } @@ -8910,7 +10180,8 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, memset (b - dyn_skipped, 0, dyn_skipped); } - if (sgot != NULL && sgot->size > 0) + if (sgot != NULL && sgot->size > 0 + && !bfd_is_abs_section (sgot->output_section)) { if (htab->is_vxworks) { @@ -8934,7 +10205,7 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, runtime. The second entry will be used by some runtime loaders. This isn't the case of IRIX rld. */ MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents); - MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000, + MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd), sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd)); } @@ -8958,7 +10229,8 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents + index++ * MIPS_ELF_GOT_SIZE (output_bfd)); - MIPS_ELF_PUT_WORD (output_bfd, 0x80000000, sgot->contents + MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd), + sgot->contents + index++ * MIPS_ELF_GOT_SIZE (output_bfd)); if (! info->shared) @@ -9053,15 +10325,13 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, s->contents)); /* Clean up a dummy stub function entry in .text. */ - s = bfd_get_section_by_name (dynobj, - MIPS_ELF_STUB_SECTION_NAME (dynobj)); - if (s != NULL) + if (htab->sstubs != NULL) { file_ptr dummy_offset; - BFD_ASSERT (s->size >= htab->function_stub_size); - dummy_offset = s->size - htab->function_stub_size; - memset (s->contents + dummy_offset, 0, + BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size); + dummy_offset = htab->sstubs->size - htab->function_stub_size; + memset (htab->sstubs->contents + dummy_offset, 0, htab->function_stub_size); } } @@ -9091,12 +10361,20 @@ _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd, } } - if (htab->is_vxworks && htab->splt->size > 0) + if (htab->splt && htab->splt->size > 0) { - if (info->shared) - mips_vxworks_finish_shared_plt (output_bfd, info); + if (htab->is_vxworks) + { + if (info->shared) + mips_vxworks_finish_shared_plt (output_bfd, info); + else + mips_vxworks_finish_exec_plt (output_bfd, info); + } else - mips_vxworks_finish_exec_plt (output_bfd, info); + { + BFD_ASSERT (!info->shared); + mips_finish_exec_plt (output_bfd, info); + } } return TRUE; } @@ -9168,6 +10446,8 @@ mips_set_isa_flags (bfd *abfd) case bfd_mach_mips8000: case bfd_mach_mips10000: case bfd_mach_mips12000: + case bfd_mach_mips14000: + case bfd_mach_mips16000: val = E_MIPS_ARCH_4; break; @@ -9175,10 +10455,26 @@ mips_set_isa_flags (bfd *abfd) val = E_MIPS_ARCH_5; break; + case bfd_mach_mips_loongson_2e: + val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E; + break; + + case bfd_mach_mips_loongson_2f: + val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F; + break; + case bfd_mach_mips_sb1: val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1; break; + case bfd_mach_mips_octeon: + val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON; + break; + + case bfd_mach_mips_xlr: + val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR; + break; + case bfd_mach_mipsisa32: val = E_MIPS_ARCH_32; break; @@ -9616,6 +10912,9 @@ _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, unsigned long r_symndx; struct elf_link_hash_entry *h; + if (info->relocatable) + return TRUE; + symtab_hdr = &elf_tdata (abfd)->symtab_hdr; sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -9624,6 +10923,8 @@ _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED, for (rel = relocs; rel < relend; rel++) switch (ELF_R_TYPE (abfd, rel->r_info)) { + case R_MIPS16_GOT16: + case R_MIPS16_CALL16: case R_MIPS_GOT16: case R_MIPS_CALL16: case R_MIPS_CALL_HI16: @@ -9660,103 +10961,50 @@ _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info, _bfd_elf_link_hash_copy_indirect (info, dir, ind); + dirmips = (struct mips_elf_link_hash_entry *) dir; + indmips = (struct mips_elf_link_hash_entry *) ind; + /* Any absolute non-dynamic relocations against an indirect or weak + definition will be against the target symbol. */ + if (indmips->has_static_relocs) + dirmips->has_static_relocs = TRUE; + if (ind->root.type != bfd_link_hash_indirect) return; - dirmips = (struct mips_elf_link_hash_entry *) dir; - indmips = (struct mips_elf_link_hash_entry *) ind; dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs; if (indmips->readonly_reloc) dirmips->readonly_reloc = TRUE; if (indmips->no_fn_stub) dirmips->no_fn_stub = TRUE; - - if (dirmips->tls_type == 0) - dirmips->tls_type = indmips->tls_type; -} - -void -_bfd_mips_elf_hide_symbol (struct bfd_link_info *info, - struct elf_link_hash_entry *entry, - bfd_boolean force_local) -{ - bfd *dynobj; - asection *got; - struct mips_got_info *g; - struct mips_elf_link_hash_entry *h; - struct mips_elf_link_hash_table *htab; - - h = (struct mips_elf_link_hash_entry *) entry; - if (h->forced_local) - return; - h->forced_local = force_local; - - dynobj = elf_hash_table (info)->dynobj; - htab = mips_elf_hash_table (info); - if (dynobj != NULL && force_local && h->root.type != STT_TLS - && (got = mips_elf_got_section (dynobj, TRUE)) != NULL - && (g = mips_elf_section_data (got)->u.got_info) != NULL) + if (indmips->fn_stub) { - if (g->next) - { - struct mips_got_entry e; - struct mips_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; - e.tls_type = 0; - - 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 (h->root.got.offset == 1) - { - /* check_relocs didn't know that this symbol would be - forced-local, so add an extra local got entry. */ - g->local_gotno++; - if (htab->computed_got_sizes) - { - /* We'll have treated this symbol as global rather - than local. */ - BFD_ASSERT (g->global_gotno > 0); - g->global_gotno--; - } - } - else if (htab->is_vxworks && h->root.needs_plt) - { - /* check_relocs didn't know that this symbol would be - forced-local, so add an extra local got entry. */ - g->local_gotno++; - if (htab->computed_got_sizes) - /* The symbol is only used in call relocations, so we'll - have assumed it only needs a .got.plt entry. Increase - the size of .got accordingly. */ - got->size += MIPS_ELF_GOT_SIZE (dynobj); - } + dirmips->fn_stub = indmips->fn_stub; + indmips->fn_stub = NULL; + } + if (indmips->need_fn_stub) + { + dirmips->need_fn_stub = TRUE; + indmips->need_fn_stub = FALSE; + } + if (indmips->call_stub) + { + dirmips->call_stub = indmips->call_stub; + indmips->call_stub = NULL; + } + if (indmips->call_fp_stub) + { + dirmips->call_fp_stub = indmips->call_fp_stub; + indmips->call_fp_stub = NULL; } + if (indmips->global_got_area < dirmips->global_got_area) + dirmips->global_got_area = indmips->global_got_area; + if (indmips->global_got_area < GGA_NONE) + indmips->global_got_area = GGA_NONE; + if (indmips->has_nonpic_branches) + dirmips->has_nonpic_branches = TRUE; - _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local); + if (dirmips->tls_type == 0) + dirmips->tls_type = indmips->tls_type; } #define PDR_SIZE 32 @@ -10184,6 +11432,15 @@ error_return: return NULL; } +/* Allocate ABFD's target-dependent data. */ + +bfd_boolean +_bfd_mips_elf_mkobject (bfd *abfd) +{ + return bfd_elf_allocate_object (abfd, sizeof (struct elf_obj_tdata), + MIPS_ELF_TDATA); +} + /* Create a MIPS ELF linker hash table. */ struct bfd_link_hash_table * @@ -10214,7 +11471,7 @@ _bfd_mips_elf_link_hash_table_create (bfd *abfd) ret->use_rld_obj_head = FALSE; ret->rld_value = 0; ret->mips16_stubs_seen = FALSE; - ret->computed_got_sizes = FALSE; + ret->use_plts_and_copy_relocs = FALSE; ret->is_vxworks = FALSE; ret->small_data_overflow_reported = FALSE; ret->srelbss = NULL; @@ -10223,9 +11480,16 @@ _bfd_mips_elf_link_hash_table_create (bfd *abfd) ret->srelplt2 = NULL; ret->sgotplt = NULL; ret->splt = NULL; + ret->sstubs = NULL; + ret->sgot = NULL; + ret->got_info = NULL; ret->plt_header_size = 0; ret->plt_entry_size = 0; + ret->lazy_stub_count = 0; ret->function_stub_size = 0; + ret->strampoline = NULL; + ret->la25_stubs = NULL; + ret->add_stub_section = NULL; return &ret->root.root; } @@ -10243,10 +11507,20 @@ _bfd_mips_vxworks_link_hash_table_create (bfd *abfd) struct mips_elf_link_hash_table *htab; htab = (struct mips_elf_link_hash_table *) ret; - htab->is_vxworks = 1; + htab->use_plts_and_copy_relocs = TRUE; + htab->is_vxworks = TRUE; } return ret; } + +/* A function that the linker calls if we are allowed to use PLTs + and copy relocs. */ + +void +_bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info) +{ + mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE; +} /* We need to use a special link routine to handle the .reginfo and the .mdebug sections. We need to merge all instances of these @@ -10261,6 +11535,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) asection *rtproc_sec; Elf32_RegInfo reginfo; struct ecoff_debug_info debug; + struct mips_htab_traverse_info hti; const struct elf_backend_data *bed = get_elf_backend_data (abfd); const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap; HDRR *symhdr = &debug.symbolic_header; @@ -10282,39 +11557,19 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) scRData, scSData, scSBss, scBss }; - /* We'd carefully arranged the dynamic symbol indices, and then the - generic size_dynamic_sections renumbered them out from under us. - Rather than trying somehow to prevent the renumbering, just do - the sort again. */ + /* Sort the dynamic symbols so that those with GOT entries come after + those without. */ htab = mips_elf_hash_table (info); - if (elf_hash_table (info)->dynamic_sections_created) - { - bfd *dynobj; - asection *got; - struct mips_got_info *g; - bfd_size_type dynsecsymcount; - - /* When we resort, we must tell mips_elf_sort_hash_table what - the lowest index it may use is. That's the number of section - symbols we're going to add. The generic ELF linker only - adds these symbols when building a shared object. Note that - we count the sections after (possibly) removing the .options - section above. */ - - dynsecsymcount = count_section_dynsyms (abfd, info); - if (! mips_elf_sort_hash_table (info, dynsecsymcount + 1)) - return FALSE; - - /* Make sure we didn't grow the global .got region. */ - dynobj = elf_hash_table (info)->dynobj; - got = mips_elf_got_section (dynobj, FALSE); - g = mips_elf_section_data (got)->u.got_info; + if (!mips_elf_sort_hash_table (abfd, info)) + return FALSE; - if (g->global_gotsym != NULL) - BFD_ASSERT ((elf_hash_table (info)->dynsymcount - - g->global_gotsym->dynindx) - <= g->global_gotno); - } + /* Create any scheduled LA25 stubs. */ + hti.info = info; + hti.output_bfd = abfd; + hti.error = FALSE; + htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti); + if (hti.error) + return FALSE; /* Get a value for the GP register. */ if (elf_gp (abfd) == 0) @@ -10505,9 +11760,7 @@ _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info) input_section = p->u.indirect.section; input_bfd = input_section->owner; - if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour - || (get_elf_backend_data (input_bfd) - ->elf_backend_ecoff_debug_swap) == NULL) + if (!is_mips_elf (input_bfd)) { /* I don't know what a non MIPS ELF bfd would be doing with a .mdebug section, but I don't really @@ -10911,15 +12164,21 @@ struct mips_mach_extension { are ordered topologically with MIPS I extensions listed last. */ static const struct mips_mach_extension mips_mach_extensions[] = { + /* MIPS64r2 extensions. */ + { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 }, + /* MIPS64 extensions. */ { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 }, { bfd_mach_mips_sb1, bfd_mach_mipsisa64 }, + { bfd_mach_mips_xlr, bfd_mach_mipsisa64 }, /* MIPS V extensions. */ { bfd_mach_mipsisa64, bfd_mach_mips5 }, /* R10000 extensions. */ { bfd_mach_mips12000, bfd_mach_mips10000 }, + { bfd_mach_mips14000, bfd_mach_mips10000 }, + { bfd_mach_mips16000, bfd_mach_mips10000 }, /* R5000 extensions. Note: the vr5500 ISA is an extension of the core vr5400 ISA, but doesn't include the multimedia stuff. It seems @@ -10941,6 +12200,8 @@ static const struct mips_mach_extension mips_mach_extensions[] = { { bfd_mach_mips4111, bfd_mach_mips4100 }, /* MIPS III extensions. */ + { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 }, + { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 }, { bfd_mach_mips8000, bfd_mach_mips4000 }, { bfd_mach_mips4650, bfd_mach_mips4000 }, { bfd_mach_mips4600, bfd_mach_mips4000 }, @@ -11038,11 +12299,11 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) 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) + else if (in_attr[Tag_GNU_MIPS_ABI_FP].i > 4) _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) + else if (out_attr[Tag_GNU_MIPS_ABI_FP].i > 4) _bfd_error_handler (_("Warning: %B uses unknown floating point ABI %d"), obfd, out_attr[Tag_GNU_MIPS_ABI_FP].i); @@ -11056,6 +12317,7 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) _bfd_error_handler (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"), obfd, ibfd); + break; case 3: _bfd_error_handler @@ -11063,6 +12325,12 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) obfd, ibfd); break; + case 4: + _bfd_error_handler + (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"), + obfd, ibfd); + break; + default: abort (); } @@ -11075,6 +12343,7 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) _bfd_error_handler (_("Warning: %B uses -msingle-float, %B uses -mdouble-float"), ibfd, obfd); + break; case 3: _bfd_error_handler @@ -11082,6 +12351,12 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) obfd, ibfd); break; + case 4: + _bfd_error_handler + (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"), + obfd, ibfd); + break; + default: abort (); } @@ -11092,6 +12367,7 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) { case 1: case 2: + case 4: _bfd_error_handler (_("Warning: %B uses hard float, %B uses soft float"), ibfd, obfd); @@ -11102,6 +12378,32 @@ mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd) } break; + case 4: + switch (in_attr[Tag_GNU_MIPS_ABI_FP].i) + { + case 1: + _bfd_error_handler + (_("Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64"), + ibfd, obfd); + break; + + case 2: + _bfd_error_handler + (_("Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64"), + ibfd, obfd); + break; + + case 3: + _bfd_error_handler + (_("Warning: %B uses hard float, %B uses soft float"), + obfd, ibfd); + break; + + default: + abort (); + } + break; + default: abort (); } @@ -11134,8 +12436,7 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) return FALSE; } - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour - || bfd_get_flavour (obfd) != bfd_target_elf_flavour) + if (!is_mips_elf (ibfd) || !is_mips_elf (obfd)) return TRUE; if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0) @@ -11188,11 +12489,9 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) new_flags &= ~EF_MIPS_UCODE; old_flags &= ~EF_MIPS_UCODE; - /* Don't care about the PIC flags from dynamic objects; they are - PIC by design. */ - if ((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0 - && (ibfd->flags & DYNAMIC) != 0) - new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC); + /* DSOs should only be linked with CPIC code. */ + if ((ibfd->flags & DYNAMIC) != 0) + new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC; if (new_flags == old_flags) return TRUE; @@ -11224,7 +12523,7 @@ _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)) { (*_bfd_error_handler) - (_("%B: warning: linking PIC files with non-PIC files"), + (_("%B: warning: linking abicalls files with non-abicalls files"), ibfd); ok = TRUE; } @@ -11343,6 +12642,105 @@ _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags) return TRUE; } +char * +_bfd_mips_elf_get_target_dtag (bfd_vma dtag) +{ + switch (dtag) + { + default: return ""; + case DT_MIPS_RLD_VERSION: + return "MIPS_RLD_VERSION"; + case DT_MIPS_TIME_STAMP: + return "MIPS_TIME_STAMP"; + case DT_MIPS_ICHECKSUM: + return "MIPS_ICHECKSUM"; + case DT_MIPS_IVERSION: + return "MIPS_IVERSION"; + case DT_MIPS_FLAGS: + return "MIPS_FLAGS"; + case DT_MIPS_BASE_ADDRESS: + return "MIPS_BASE_ADDRESS"; + case DT_MIPS_MSYM: + return "MIPS_MSYM"; + case DT_MIPS_CONFLICT: + return "MIPS_CONFLICT"; + case DT_MIPS_LIBLIST: + return "MIPS_LIBLIST"; + case DT_MIPS_LOCAL_GOTNO: + return "MIPS_LOCAL_GOTNO"; + case DT_MIPS_CONFLICTNO: + return "MIPS_CONFLICTNO"; + case DT_MIPS_LIBLISTNO: + return "MIPS_LIBLISTNO"; + case DT_MIPS_SYMTABNO: + return "MIPS_SYMTABNO"; + case DT_MIPS_UNREFEXTNO: + return "MIPS_UNREFEXTNO"; + case DT_MIPS_GOTSYM: + return "MIPS_GOTSYM"; + case DT_MIPS_HIPAGENO: + return "MIPS_HIPAGENO"; + case DT_MIPS_RLD_MAP: + return "MIPS_RLD_MAP"; + case DT_MIPS_DELTA_CLASS: + return "MIPS_DELTA_CLASS"; + case DT_MIPS_DELTA_CLASS_NO: + return "MIPS_DELTA_CLASS_NO"; + case DT_MIPS_DELTA_INSTANCE: + return "MIPS_DELTA_INSTANCE"; + case DT_MIPS_DELTA_INSTANCE_NO: + return "MIPS_DELTA_INSTANCE_NO"; + case DT_MIPS_DELTA_RELOC: + return "MIPS_DELTA_RELOC"; + case DT_MIPS_DELTA_RELOC_NO: + return "MIPS_DELTA_RELOC_NO"; + case DT_MIPS_DELTA_SYM: + return "MIPS_DELTA_SYM"; + case DT_MIPS_DELTA_SYM_NO: + return "MIPS_DELTA_SYM_NO"; + case DT_MIPS_DELTA_CLASSSYM: + return "MIPS_DELTA_CLASSSYM"; + case DT_MIPS_DELTA_CLASSSYM_NO: + return "MIPS_DELTA_CLASSSYM_NO"; + case DT_MIPS_CXX_FLAGS: + return "MIPS_CXX_FLAGS"; + case DT_MIPS_PIXIE_INIT: + return "MIPS_PIXIE_INIT"; + case DT_MIPS_SYMBOL_LIB: + return "MIPS_SYMBOL_LIB"; + case DT_MIPS_LOCALPAGE_GOTIDX: + return "MIPS_LOCALPAGE_GOTIDX"; + case DT_MIPS_LOCAL_GOTIDX: + return "MIPS_LOCAL_GOTIDX"; + case DT_MIPS_HIDDEN_GOTIDX: + return "MIPS_HIDDEN_GOTIDX"; + case DT_MIPS_PROTECTED_GOTIDX: + return "MIPS_PROTECTED_GOT_IDX"; + case DT_MIPS_OPTIONS: + return "MIPS_OPTIONS"; + case DT_MIPS_INTERFACE: + return "MIPS_INTERFACE"; + case DT_MIPS_DYNSTR_ALIGN: + return "DT_MIPS_DYNSTR_ALIGN"; + case DT_MIPS_INTERFACE_SIZE: + return "DT_MIPS_INTERFACE_SIZE"; + case DT_MIPS_RLD_TEXT_RESOLVE_ADDR: + return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR"; + case DT_MIPS_PERF_SUFFIX: + return "DT_MIPS_PERF_SUFFIX"; + case DT_MIPS_COMPACT_SIZE: + return "DT_MIPS_COMPACT_SIZE"; + case DT_MIPS_GP_VALUE: + return "DT_MIPS_GP_VALUE"; + case DT_MIPS_AUX_DYNAMIC: + return "DT_MIPS_AUX_DYNAMIC"; + case DT_MIPS_PLTGOT: + return "DT_MIPS_PLTGOT"; + case DT_MIPS_RWPLT: + return "DT_MIPS_RWPLT"; + } +} + bfd_boolean _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr) { @@ -11474,3 +12872,30 @@ _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym) || sym->st_shndx == SHN_MIPS_ACOMMON || sym->st_shndx == SHN_MIPS_SCOMMON); } + +/* Return address for Ith PLT stub in section PLT, for relocation REL + or (bfd_vma) -1 if it should not be included. */ + +bfd_vma +_bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt, + const arelent *rel ATTRIBUTE_UNUSED) +{ + return (plt->vma + + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry) + + i * 4 * ARRAY_SIZE (mips_exec_plt_entry)); +} + +void +_bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info) +{ + struct mips_elf_link_hash_table *htab; + Elf_Internal_Ehdr *i_ehdrp; + + i_ehdrp = elf_elfheader (abfd); + if (link_info) + { + htab = mips_elf_hash_table (link_info); + if (htab->use_plts_and_copy_relocs && !htab->is_vxworks) + i_ehdrp->e_ident[EI_ABIVERSION] = 1; + } +} diff --git a/bfd/elfxx-mips.h b/bfd/elfxx-mips.h index f8635da..0b2226d 100644 --- a/bfd/elfxx-mips.h +++ b/bfd/elfxx-mips.h @@ -1,5 +1,5 @@ /* MIPS ELF specific backend routines. - Copyright 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -41,7 +41,7 @@ extern bfd_boolean _bfd_mips_elf_section_from_bfd_section extern bfd_boolean _bfd_mips_elf_add_symbol_hook (bfd *, struct bfd_link_info *, Elf_Internal_Sym *, const char **, flagword *, asection **, bfd_vma *); -extern bfd_boolean _bfd_mips_elf_link_output_symbol_hook +extern int _bfd_mips_elf_link_output_symbol_hook (struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *, struct elf_link_hash_entry *); extern bfd_boolean _bfd_mips_elf_create_dynamic_sections @@ -50,8 +50,6 @@ extern bfd_boolean _bfd_mips_elf_check_relocs (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); extern bfd_boolean _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *, struct elf_link_hash_entry *); -extern bfd_boolean _bfd_mips_vxworks_adjust_dynamic_symbol - (struct bfd_link_info *, struct elf_link_hash_entry *); extern bfd_boolean _bfd_mips_elf_always_size_sections (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_mips_elf_size_dynamic_sections @@ -81,8 +79,6 @@ extern bfd_boolean _bfd_mips_elf_gc_sweep_hook extern void _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *, struct elf_link_hash_entry *, struct elf_link_hash_entry *); -extern void _bfd_mips_elf_hide_symbol - (struct bfd_link_info *, struct elf_link_hash_entry *, bfd_boolean); extern bfd_boolean _bfd_mips_elf_ignore_discarded_relocs (asection *); extern bfd_boolean _bfd_mips_elf_find_nearest_line @@ -95,6 +91,8 @@ extern bfd_boolean _bfd_mips_elf_set_section_contents extern bfd_byte *_bfd_elf_mips_get_relocated_section_contents (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, bfd_boolean, asymbol **); +extern bfd_boolean _bfd_mips_elf_mkobject + (bfd *); extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create (bfd *); extern struct bfd_link_hash_table *_bfd_mips_vxworks_link_hash_table_create @@ -138,8 +136,18 @@ extern bfd_vma _bfd_mips_elf_sign_extend (bfd_vma, int); extern void _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *, const Elf_Internal_Sym *, bfd_boolean, bfd_boolean); +extern char *_bfd_mips_elf_get_target_dtag (bfd_vma); extern bfd_boolean _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *); +extern void _bfd_mips_elf_use_plts_and_copy_relocs + (struct bfd_link_info *); +extern bfd_boolean _bfd_mips_elf_init_stubs + (struct bfd_link_info *, + asection *(*) (const char *, asection *, asection *)); +extern bfd_vma _bfd_mips_elf_plt_sym_val + (bfd_vma, const asection *, const arelent *rel); +extern void _bfd_mips_post_process_headers + (bfd *abfd, struct bfd_link_info *link_info); extern const struct bfd_elf_special_section _bfd_mips_elf_special_sections []; @@ -152,3 +160,4 @@ extern bfd_boolean _bfd_mips_elf_common_definition (Elf_Internal_Sym *); #define elf_backend_eh_frame_address_size _bfd_mips_elf_eh_frame_address_size #define elf_backend_merge_symbol_attribute _bfd_mips_elf_merge_symbol_attribute #define elf_backend_ignore_undef_symbol _bfd_mips_elf_ignore_undef_symbol +#define elf_backend_post_process_headers _bfd_mips_post_process_headers diff --git a/bfd/elfxx-sparc.c b/bfd/elfxx-sparc.c index 1adbc8d..d3fe1ba 100644 --- a/bfd/elfxx-sparc.c +++ b/bfd/elfxx-sparc.c @@ -1,5 +1,5 @@ /* SPARC-specific support for ELF - Copyright 2005, 2006, 2007 Free Software Foundation, Inc. + Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -258,7 +258,12 @@ static reloc_howto_type _bfd_sparc_elf_howto_table[] = HOWTO(R_SPARC_TLS_DTPOFF32,0,2,32,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF32",FALSE,0,0xffffffff,TRUE), HOWTO(R_SPARC_TLS_DTPOFF64,0,4,64,FALSE,0,complain_overflow_bitfield,bfd_elf_generic_reloc,"R_SPARC_TLS_DTPOFF64",FALSE,0,MINUS_ONE,TRUE), HOWTO(R_SPARC_TLS_TPOFF32,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_TPOFF32",FALSE,0,0x00000000,TRUE), - HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_TPOFF64",FALSE,0,0x00000000,TRUE) + HOWTO(R_SPARC_TLS_TPOFF64,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_TLS_TPOFF64",FALSE,0,0x00000000,TRUE), + HOWTO(R_SPARC_GOTDATA_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_HIX22",FALSE,0,0x003fffff, FALSE), + HOWTO(R_SPARC_GOTDATA_LOX10,0,2,0,FALSE,0,complain_overflow_dont, sparc_elf_lox10_reloc, "R_SPARC_GOTDATA_LOX10",FALSE,0,0x000003ff, FALSE), + HOWTO(R_SPARC_GOTDATA_OP_HIX22,0,2,0,FALSE,0,complain_overflow_bitfield,sparc_elf_hix22_reloc,"R_SPARC_GOTDATA_OP_HIX22",FALSE,0,0x003fffff, FALSE), + HOWTO(R_SPARC_GOTDATA_OP_LOX10,0,2,0,FALSE,0,complain_overflow_dont, sparc_elf_lox10_reloc, "R_SPARC_GOTDATA_OP_LOX10",FALSE,0,0x000003ff, FALSE), + HOWTO(R_SPARC_GOTDATA_OP,0,0, 0,FALSE,0,complain_overflow_dont, bfd_elf_generic_reloc, "R_SPARC_GOTDATA_OP",FALSE,0,0x00000000,TRUE), }; static reloc_howto_type sparc_vtinherit_howto = HOWTO (R_SPARC_GNU_VTINHERIT, 0,2,0,FALSE,0,complain_overflow_dont, NULL, "R_SPARC_GNU_VTINHERIT", FALSE,0, 0, FALSE); @@ -349,6 +354,11 @@ static const struct elf_reloc_map sparc_reloc_map[] = { BFD_RELOC_SPARC_H44, R_SPARC_H44 }, { BFD_RELOC_SPARC_M44, R_SPARC_M44 }, { BFD_RELOC_SPARC_L44, R_SPARC_L44 }, + { BFD_RELOC_SPARC_GOTDATA_HIX22, R_SPARC_GOTDATA_HIX22 }, + { BFD_RELOC_SPARC_GOTDATA_LOX10, R_SPARC_GOTDATA_LOX10 }, + { BFD_RELOC_SPARC_GOTDATA_OP_HIX22, R_SPARC_GOTDATA_OP_HIX22 }, + { BFD_RELOC_SPARC_GOTDATA_OP_LOX10, R_SPARC_GOTDATA_OP_LOX10 }, + { BFD_RELOC_SPARC_GOTDATA_OP, R_SPARC_GOTDATA_OP }, { BFD_RELOC_SPARC_REGISTER, R_SPARC_REGISTER }, { BFD_RELOC_VTABLE_INHERIT, R_SPARC_GNU_VTINHERIT }, { BFD_RELOC_VTABLE_ENTRY, R_SPARC_GNU_VTENTRY }, @@ -510,17 +520,16 @@ struct _bfd_sparc_elf_obj_tdata #define _bfd_sparc_elf_local_got_tls_type(abfd) \ (_bfd_sparc_elf_tdata (abfd)->local_got_tls_type) +#define is_sparc_elf(bfd) \ + (bfd_get_flavour (bfd) == bfd_target_elf_flavour \ + && elf_tdata (bfd) != NULL \ + && elf_object_id (bfd) == SPARC_ELF_TDATA) + bfd_boolean _bfd_sparc_elf_mkobject (bfd *abfd) { - if (abfd->tdata.any == NULL) - { - 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); + return bfd_elf_allocate_object (abfd, sizeof (struct _bfd_sparc_elf_obj_tdata), + SPARC_ELF_TDATA); } static void @@ -890,13 +899,7 @@ create_got_section (bfd *dynobj, struct bfd_link_info *info) htab->sgot = bfd_get_section_by_name (dynobj, ".got"); BFD_ASSERT (htab->sgot != NULL); - htab->srelgot = bfd_make_section_with_flags (dynobj, ".rela.got", - SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS - | SEC_IN_MEMORY - | SEC_LINKER_CREATED - | SEC_READONLY); + htab->srelgot = bfd_get_section_by_name (dynobj, ".rela.got"); if (htab->srelgot == NULL || ! bfd_set_section_alignment (dynobj, htab->srelgot, htab->word_align_power)) @@ -1090,7 +1093,7 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, return TRUE; htab = _bfd_sparc_elf_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_offsets = elf_local_got_offsets (abfd); @@ -1100,6 +1103,9 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, num_relocs = NUM_SHDR_ENTRIES (& elf_section_data (sec)->rel_hdr); else num_relocs = sec->reloc_count; + + BFD_ASSERT (is_sparc_elf (abfd) || num_relocs == 0); + rel_end = relocs + num_relocs; for (rel = relocs; rel < rel_end; rel++) { @@ -1176,6 +1182,10 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_SPARC_GOT10: case R_SPARC_GOT13: case R_SPARC_GOT22: + case R_SPARC_GOTDATA_HIX22: + case R_SPARC_GOTDATA_LOX10: + case R_SPARC_GOTDATA_OP_HIX22: + case R_SPARC_GOTDATA_OP_LOX10: case R_SPARC_TLS_GD_HI22: case R_SPARC_TLS_GD_LO10: /* This symbol requires a global offset table entry. */ @@ -1188,6 +1198,10 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, case R_SPARC_GOT10: case R_SPARC_GOT13: case R_SPARC_GOT22: + case R_SPARC_GOTDATA_HIX22: + case R_SPARC_GOTDATA_LOX10: + case R_SPARC_GOTDATA_OP_HIX22: + case R_SPARC_GOTDATA_OP_LOX10: tls_type = GOT_NORMAL; break; case R_SPARC_TLS_GD_HI22: @@ -1309,6 +1323,9 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, goto r_sparc_plt32; break; } + /* PR 7027: We need similar behaviour for 64-bit binaries. */ + else if (r_type == R_SPARC_WPLT30) + break; /* It does not make sense to have a procedure linkage table entry for a local symbol. */ @@ -1428,42 +1445,15 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, section in dynobj and make room for the reloc. */ if (sreloc == NULL) { - const char *name; - bfd *dynobj; - - name = (bfd_elf_string_from_elf_section - (abfd, - elf_elfheader (abfd)->e_shstrndx, - elf_section_data (sec)->rel_hdr.sh_name)); - if (name == NULL) - return FALSE; - - BFD_ASSERT (CONST_STRNEQ (name, ".rela") - && strcmp (bfd_get_section_name (abfd, sec), - name + 5) == 0); - if (htab->elf.dynobj == NULL) htab->elf.dynobj = abfd; - dynobj = htab->elf.dynobj; - sreloc = bfd_get_section_by_name (dynobj, name); + sreloc = _bfd_elf_make_dynamic_reloc_section + (sec, htab->elf.dynobj, htab->word_align_power, + abfd, /*rela?*/ TRUE); + if (sreloc == NULL) - { - flagword flags; - - flags = (SEC_HAS_CONTENTS | SEC_READONLY - | SEC_IN_MEMORY | SEC_LINKER_CREATED); - if ((sec->flags & SEC_ALLOC) != 0) - flags |= SEC_ALLOC | SEC_LOAD; - sreloc = bfd_make_section_with_flags (dynobj, - name, - flags); - if (sreloc == NULL - || ! bfd_set_section_alignment (dynobj, sreloc, - htab->word_align_power)) - return FALSE; - } - elf_section_data (sec)->sreloc = sreloc; + return FALSE; } /* If this is a global symbol, we count the number of @@ -1475,15 +1465,19 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, /* Track dynamic relocs needed for local syms too. We really need local syms available to do this easily. Oh well. */ - asection *s; void *vpp; + Elf_Internal_Sym *isym; - s = bfd_section_from_r_symndx (abfd, &htab->sym_sec, - sec, r_symndx); - if (s == NULL) + isym = bfd_sym_from_r_symndx (&htab->sym_cache, + abfd, r_symndx); + if (isym == NULL) return FALSE; + s = bfd_section_from_elf_index (abfd, isym->st_shndx); + if (s == NULL) + s = sec; + vpp = &elf_section_data (s)->local_dynrel; head = (struct _bfd_sparc_elf_dyn_relocs **) vpp; } @@ -1516,7 +1510,9 @@ _bfd_sparc_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; case R_SPARC_GNU_VTENTRY: - if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) + BFD_ASSERT (h != NULL); + if (h != NULL + && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend)) return FALSE; break; @@ -1561,10 +1557,15 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, bfd_signed_vma *local_got_refcounts; const Elf_Internal_Rela *rel, *relend; + if (info->relocatable) + return TRUE; + + BFD_ASSERT (is_sparc_elf (abfd) || sec->reloc_count == 0); + elf_section_data (sec)->local_dynrel = NULL; htab = _bfd_sparc_elf_hash_table (info); - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (abfd); sym_hashes = elf_sym_hashes (abfd); local_got_refcounts = elf_local_got_refcounts (abfd); @@ -1613,6 +1614,10 @@ _bfd_sparc_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info, case R_SPARC_GOT10: case R_SPARC_GOT13: case R_SPARC_GOT22: + case R_SPARC_GOTDATA_HIX22: + case R_SPARC_GOTDATA_LOX10: + case R_SPARC_GOTDATA_OP_HIX22: + case R_SPARC_GOTDATA_OP_LOX10: if (h != NULL) { if (h->got.refcount > 0) @@ -2007,6 +2012,19 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, PTR inf) } } + if (htab->is_vxworks) + { + struct _bfd_sparc_elf_dyn_relocs **pp; + + for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) + { + if (strcmp (p->sec->output_section->name, ".tls_vars") == 0) + *pp = p->next; + else + pp = &p->next; + } + } + /* Also discard relocs on undefined weak syms with non-default visibility. */ if (eh->dyn_relocs != NULL @@ -2152,7 +2170,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, Elf_Internal_Shdr *symtab_hdr; asection *srel; - if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour) + if (! is_sparc_elf (ibfd)) continue; for (s = ibfd->sections; s != NULL; s = s->next) @@ -2169,6 +2187,13 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, linker script /DISCARD/, so we'll be discarding the relocs too. */ } + else if (htab->is_vxworks + && strcmp (p->sec->output_section->name, + ".tls_vars") == 0) + { + /* Relocations in vxworks .tls_vars sections are + handled specially by the loader. */ + } else if (p->count != 0) { srel = elf_section_data (p->sec)->sreloc; @@ -2183,7 +2208,7 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, if (!local_got) continue; - symtab_hdr = &elf_tdata (ibfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (ibfd); locsymcount = symtab_hdr->sh_info; end_local_got = local_got + locsymcount; local_tls_type = _bfd_sparc_elf_local_got_tls_type (ibfd); @@ -2394,6 +2419,9 @@ _bfd_sparc_elf_size_dynamic_sections (bfd *output_bfd, eht->dynsymcount++; } } + if (htab->is_vxworks + && !elf_vxworks_add_dynamic_entries (output_bfd, info)) + return FALSE; } #undef add_dynamic_entry @@ -2423,6 +2451,10 @@ _bfd_sparc_elf_relax_section (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *link_info ATTRIBUTE_UNUSED, bfd_boolean *again) { + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + *again = FALSE; sec_do_relax (section) = 1; return TRUE; @@ -2476,9 +2508,10 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, Elf_Internal_Rela *rel; Elf_Internal_Rela *relend; int num_relocs; + bfd_boolean is_vxworks_tls; htab = _bfd_sparc_elf_hash_table (info); - symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr; + symtab_hdr = &elf_symtab_hdr (input_bfd); sym_hashes = elf_sym_hashes (input_bfd); local_got_offsets = elf_local_got_offsets (input_bfd); @@ -2488,6 +2521,11 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, got_base = elf_hash_table (info)->hgot->root.u.def.value; sreloc = elf_section_data (input_section)->sreloc; + /* We have to handle relocations in vxworks .tls_vars sections + specially, because the dynamic loader is 'weird'. */ + is_vxworks_tls = (htab->is_vxworks && info->shared + && !strcmp (input_section->output_section->name, + ".tls_vars")); rel = relocs; if (ABI_64_P (output_bfd)) @@ -2568,6 +2606,20 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, switch (r_type) { + case R_SPARC_GOTDATA_HIX22: + case R_SPARC_GOTDATA_LOX10: + case R_SPARC_GOTDATA_OP_HIX22: + case R_SPARC_GOTDATA_OP_LOX10: + /* We don't support these code transformation optimizations + yet, so just leave the sequence alone and treat as + GOT22/GOT10. */ + if (r_type == R_SPARC_GOTDATA_HIX22 + || r_type == R_SPARC_GOTDATA_OP_HIX22) + r_type = R_SPARC_GOT22; + else + r_type = R_SPARC_GOT10; + /* Fall through. */ + case R_SPARC_GOT10: case R_SPARC_GOT13: case R_SPARC_GOT22: @@ -2686,6 +2738,9 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, if (h == NULL) break; } + /* PR 7027: We need similar behaviour for 64-bit binaries. */ + else if (r_type == R_SPARC_WPLT30 && h == NULL) + break; else { BFD_ASSERT (h != NULL); @@ -2754,7 +2809,8 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, case R_SPARC_L44: case R_SPARC_UA64: r_sparc_plt32: - if ((input_section->flags & SEC_ALLOC) == 0) + if ((input_section->flags & SEC_ALLOC) == 0 + || is_vxworks_tls) break; if ((info->shared @@ -3217,6 +3273,11 @@ _bfd_sparc_elf_relocate_section (bfd *output_bfd, } continue; + case R_SPARC_GOTDATA_OP: + /* We don't support gotdata code transformation optimizations + yet, so simply leave the sequence as-is. */ + continue; + case R_SPARC_TLS_IE_LD: case R_SPARC_TLS_IE_LDX: if (! info->shared && (h == NULL || h->dynindx == -1)) @@ -3844,6 +3905,9 @@ sparc_finish_dyn (bfd *output_bfd, struct bfd_link_info *info, bed->s->swap_dyn_out (output_bfd, &dyn, dyncon); } } + else if (htab->is_vxworks + && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn)) + bed->s->swap_dyn_out (output_bfd, &dyn, dyncon); else if (abi_64_p && dyn.d_tag == DT_SPARC_REGISTER) { if (stt_regidx == -1) diff --git a/bfd/elfxx-sparc.h b/bfd/elfxx-sparc.h index 87ec62a..2be037b 100644 --- a/bfd/elfxx-sparc.h +++ b/bfd/elfxx-sparc.h @@ -1,5 +1,5 @@ /* SPARC ELF specific backend routines. - Copyright 2005, 2007 Free Software Foundation, Inc. + Copyright 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -59,8 +59,8 @@ struct _bfd_sparc_elf_link_hash_table bfd_vma offset; } tls_ldm_got; - /* Small local sym to section mapping cache. */ - struct sym_sec_cache sym_sec; + /* Small local sym cache. */ + struct sym_cache sym_cache; /* True if the target system is VxWorks. */ int is_vxworks; diff --git a/bfd/elfxx-target.h b/bfd/elfxx-target.h index 4eea908..413f273 100644 --- a/bfd/elfxx-target.h +++ b/bfd/elfxx-target.h @@ -1,6 +1,6 @@ /* Target definitions for NN-bit ELF Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -132,6 +132,9 @@ #ifndef elf_backend_want_got_sym #define elf_backend_want_got_sym 1 #endif +#ifndef elf_backend_gc_keep +#define elf_backend_gc_keep _bfd_elf_gc_keep +#endif #ifndef elf_backend_gc_mark_dynamic_ref #define elf_backend_gc_mark_dynamic_ref bfd_elf_gc_mark_dynamic_ref_symbol #endif @@ -166,6 +169,10 @@ _bfd_elf_section_already_linked #endif +#ifndef bfd_elfNN_bfd_define_common_symbol +#define bfd_elfNN_bfd_define_common_symbol bfd_generic_define_common_symbol +#endif + #ifndef bfd_elfNN_bfd_make_debug_symbol #define bfd_elfNN_bfd_make_debug_symbol \ ((asymbol * (*) (bfd *, void *, unsigned long)) bfd_nullvoidptr) @@ -266,7 +273,7 @@ #endif #ifndef bfd_elfNN_mkobject -#define bfd_elfNN_mkobject bfd_elf_mkobject +#define bfd_elfNN_mkobject bfd_elf_make_generic_object #endif #ifndef bfd_elfNN_mkcorefile @@ -298,16 +305,23 @@ #endif #ifndef ELF_MAXPAGESIZE - #error ELF_MAXPAGESIZE is not defined +# error ELF_MAXPAGESIZE is not defined #define ELF_MAXPAGESIZE 1 #endif +#ifndef ELF_COMMONPAGESIZE +#define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE +#endif + #ifndef ELF_MINPAGESIZE -#define ELF_MINPAGESIZE ELF_MAXPAGESIZE +#define ELF_MINPAGESIZE ELF_COMMONPAGESIZE #endif -#ifndef ELF_COMMONPAGESIZE -#define ELF_COMMONPAGESIZE ELF_MAXPAGESIZE +#if ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE +# error ELF_COMMONPAGESIZE > ELF_MAXPAGESIZE +#endif +#if ELF_MINPAGESIZE > ELF_COMMONPAGESIZE +# error ELF_MINPAGESIZE > ELF_COMMONPAGESIZE #endif #ifndef ELF_DYNAMIC_SEC_FLAGS @@ -378,6 +392,9 @@ #ifndef elf_backend_omit_section_dynsym #define elf_backend_omit_section_dynsym _bfd_elf_link_omit_section_dynsym #endif +#ifndef elf_backend_relocs_compatible +#define elf_backend_relocs_compatible _bfd_elf_default_relocs_compatible +#endif #ifndef elf_backend_check_relocs #define elf_backend_check_relocs 0 #endif @@ -433,6 +450,9 @@ #ifndef elf_backend_got_header_size #define elf_backend_got_header_size 0 #endif +#ifndef elf_backend_got_elt_size +#define elf_backend_got_elt_size _bfd_elf_default_got_elt_size +#endif #ifndef elf_backend_obj_attrs_vendor #define elf_backend_obj_attrs_vendor NULL #endif @@ -445,6 +465,9 @@ #ifndef elf_backend_obj_attrs_section_type #define elf_backend_obj_attrs_section_type SHT_GNU_ATTRIBUTES #endif +#ifndef elf_backend_obj_attrs_order +#define elf_backend_obj_attrs_order NULL +#endif #ifndef elf_backend_post_process_headers #define elf_backend_post_process_headers NULL #endif @@ -469,6 +492,9 @@ #ifndef elf_backend_merge_symbol_attribute #define elf_backend_merge_symbol_attribute NULL #endif +#ifndef elf_backend_get_target_dtag +#define elf_backend_get_target_dtag NULL +#endif #ifndef elf_backend_ignore_undef_symbol #define elf_backend_ignore_undef_symbol NULL #endif @@ -487,12 +513,6 @@ #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 -#ifndef elf_backend_fprintf_vma -#define elf_backend_fprintf_vma _bfd_elf_fprintf_vma -#endif #ifndef elf_backend_reloc_type_class #define elf_backend_reloc_type_class _bfd_elf_reloc_type_class #endif @@ -545,6 +565,9 @@ #ifndef elf_backend_default_use_rela_p #define elf_backend_default_use_rela_p !USE_REL #endif +#ifndef elf_backend_rela_plts_and_copies_p +#define elf_backend_rela_plts_and_copies_p elf_backend_default_use_rela_p +#endif #ifndef elf_backend_rela_normal #define elf_backend_rela_normal 0 @@ -636,6 +659,7 @@ static struct elf_backend_data elfNN_bed = elf_backend_link_output_symbol_hook, elf_backend_create_dynamic_sections, elf_backend_omit_section_dynsym, + elf_backend_relocs_compatible, elf_backend_check_relocs, elf_backend_check_directives, elf_backend_as_needed_cleanup, @@ -651,6 +675,7 @@ static struct elf_backend_data elfNN_bed = elf_backend_additional_program_headers, elf_backend_modify_segment_map, elf_backend_modify_program_headers, + elf_backend_gc_keep, elf_backend_gc_mark_dynamic_ref, elf_backend_gc_mark_hook, elf_backend_gc_mark_extra_sections, @@ -663,14 +688,13 @@ static struct elf_backend_data elfNN_bed = elf_backend_hide_symbol, elf_backend_fixup_symbol, elf_backend_merge_symbol_attribute, + elf_backend_get_target_dtag, elf_backend_ignore_undef_symbol, elf_backend_emit_relocs, 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, elf_backend_discard_info, elf_backend_ignore_discarded_relocs, @@ -698,15 +722,18 @@ static struct elf_backend_data elfNN_bed = &elf_backend_size_info, elf_backend_special_sections, elf_backend_got_header_size, + elf_backend_got_elt_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_obj_attrs_order, elf_backend_collect, elf_backend_type_change_ok, elf_backend_may_use_rel_p, elf_backend_may_use_rela_p, elf_backend_default_use_rela_p, + elf_backend_rela_plts_and_copies_p, elf_backend_rela_normal, elf_backend_sign_extend_vma, elf_backend_want_got_plt, diff --git a/bfd/epoc-pe-arm.c b/bfd/epoc-pe-arm.c index c833707..a15f703 100644 --- a/bfd/epoc-pe-arm.c +++ b/bfd/epoc-pe-arm.c @@ -1,5 +1,5 @@ /* BFD back-end for ARM EPOC PE files. - Copyright 1999, 2000, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/epoc-pei-arm.c b/bfd/epoc-pei-arm.c index 2a8e126..13adf2f 100644 --- a/bfd/epoc-pei-arm.c +++ b/bfd/epoc-pei-arm.c @@ -1,5 +1,5 @@ /* BFD back-end for ARM EPOC PE IMAGE COFF files. - Copyright 1999, 2000, 2007 Free Software Foundation, Inc. + Copyright 1999, 2000, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/format.c b/bfd/format.c index cea9a23..4d89a85 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, 2007 Free Software Foundation, Inc. + 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -149,7 +149,7 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) bfd_size_type amt; amt = sizeof (*matching_vector) * 2 * _bfd_target_vector_entries; - matching_vector = bfd_malloc (amt); + matching_vector = (const bfd_target **) bfd_malloc (amt); if (!matching_vector) return FALSE; } @@ -210,7 +210,7 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) temp = BFD_SEND_FMT (abfd, _bfd_check_format, (abfd)); - if (temp) + if (temp && (abfd->format != bfd_archive || bfd_has_map (abfd))) { /* This format checks out as ok! */ right_targ = temp; @@ -228,12 +228,13 @@ bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching) matching_vector[match_count] = temp; match_count++; } - else if ((err = bfd_get_error ()) == bfd_error_wrong_object_format + else if (temp + || (err = bfd_get_error ()) == bfd_error_wrong_object_format || err == bfd_error_file_ambiguously_recognized) { - /* An archive with objects of the wrong type, or an - ambiguous match. We want this target to match if we get - no better matches. */ + /* An archive with no armap or objects of the wrong type, + or an ambiguous match. We want this target to match + if we get no better matches. */ if (ar_right_targ != bfd_default_vector[0]) ar_right_targ = *target; if (matching_vector) diff --git a/bfd/gen-aout.c b/bfd/gen-aout.c index 27f7eaf..45331e0 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, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/hash.c b/bfd/hash.c index 5edccac..5223e21 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, 2007 Free Software Foundation, Inc. + 2006, 2007, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain This file is part of BFD, the Binary File Descriptor library. @@ -374,7 +374,8 @@ bfd_hash_table_init_n (struct bfd_hash_table *table, bfd_set_error (bfd_error_no_memory); return FALSE; } - table->table = objalloc_alloc ((struct objalloc *) table->memory, alloc); + table->table = (struct bfd_hash_entry **) + objalloc_alloc ((struct objalloc *) table->memory, alloc); if (table->table == NULL) { bfd_set_error (bfd_error_no_memory); @@ -407,7 +408,7 @@ bfd_hash_table_init (struct bfd_hash_table *table, void bfd_hash_table_free (struct bfd_hash_table *table) { - objalloc_free (table->memory); + objalloc_free ((struct objalloc *) table->memory); table->memory = NULL; } @@ -451,24 +452,40 @@ bfd_hash_lookup (struct bfd_hash_table *table, if (! create) return NULL; - hashp = (*table->newfunc) (NULL, table, string); - if (hashp == NULL) - return NULL; if (copy) { - char *new; + char *new_string; - new = objalloc_alloc ((struct objalloc *) table->memory, len + 1); - if (!new) + new_string = (char *) objalloc_alloc ((struct objalloc *) table->memory, + len + 1); + if (!new_string) { bfd_set_error (bfd_error_no_memory); return NULL; } - memcpy (new, string, len + 1); - string = new; + memcpy (new_string, string, len + 1); + string = new_string; } + + return bfd_hash_insert (table, string, hash); +} + +/* Insert an entry in a hash table. */ + +struct bfd_hash_entry * +bfd_hash_insert (struct bfd_hash_table *table, + const char *string, + unsigned long hash) +{ + struct bfd_hash_entry *hashp; + unsigned int index; + + hashp = (*table->newfunc) (NULL, table, string); + if (hashp == NULL) + return NULL; hashp->string = string; hashp->hash = hash; + index = hash % table->size; hashp->next = table->table[index]; table->table[index] = hashp; table->count++; @@ -490,6 +507,11 @@ bfd_hash_lookup (struct bfd_hash_table *table, newtable = ((struct bfd_hash_entry **) objalloc_alloc ((struct objalloc *) table->memory, alloc)); + if (newtable == NULL) + { + table->frozen = 1; + return hashp; + } memset ((PTR) newtable, 0, alloc); for (hi = 0; hi < table->size; hi ++) @@ -497,7 +519,6 @@ bfd_hash_lookup (struct bfd_hash_table *table, { 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; @@ -561,7 +582,8 @@ bfd_hash_newfunc (struct bfd_hash_entry *entry, const char *string ATTRIBUTE_UNUSED) { if (entry == NULL) - entry = bfd_hash_allocate (table, sizeof (* entry)); + entry = (struct bfd_hash_entry *) bfd_hash_allocate (table, + sizeof (* entry)); return entry; } @@ -656,7 +678,8 @@ strtab_hash_newfunc (struct bfd_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 (* ret)); + ret = (struct strtab_hash_entry *) bfd_hash_allocate (table, + sizeof (* ret)); if (ret == NULL) return NULL; @@ -688,7 +711,7 @@ _bfd_stringtab_init (void) struct bfd_strtab_hash *table; bfd_size_type amt = sizeof (* table); - table = bfd_malloc (amt); + table = (struct bfd_strtab_hash *) bfd_malloc (amt); if (table == NULL) return NULL; @@ -751,7 +774,8 @@ _bfd_stringtab_add (struct bfd_strtab_hash *tab, } else { - entry = bfd_hash_allocate (&tab->table, sizeof (* entry)); + entry = (struct strtab_hash_entry *) bfd_hash_allocate (&tab->table, + sizeof (* entry)); if (entry == NULL) return (bfd_size_type) -1; if (! copy) @@ -760,7 +784,7 @@ _bfd_stringtab_add (struct bfd_strtab_hash *tab, { char *n; - n = bfd_hash_allocate (&tab->table, strlen (str) + 1); + n = (char *) bfd_hash_allocate (&tab->table, strlen (str) + 1); if (n == NULL) return (bfd_size_type) -1; entry->root.string = n; diff --git a/bfd/host-aout.c b/bfd/host-aout.c index a08c787..5a75910 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, 2007 + Copyright 1990, 1991, 1992, 1994, 1995, 2001, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. Probably John Gilmore's fault. diff --git a/bfd/hosts/alphavms.h b/bfd/hosts/alphavms.h index b2a85c2..2a34212 100644 --- a/bfd/hosts/alphavms.h +++ b/bfd/hosts/alphavms.h @@ -1,5 +1,6 @@ /* alphavms.h -- BFD definitions for an openVMS host - Copyright 1996, 2000, 2001, 2007 Free Software Foundation, Inc. + Copyright 1996, 2000, 2001, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. Written by Klaus Kämpf (kkaempf@progis.de) of proGIS Softwareentwicklung, Aachen, Germany @@ -34,6 +35,7 @@ #include #include "bfd.h" +#include "filenames.h" #ifndef BFD_HOST_64_BIT /* Make the basic types 64-bit quantities on the host. @@ -66,4 +68,14 @@ typedef BFD_HOST_64_BIT int64_type; #define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR) #endif -extern int getpagesize PARAMS ((void)); +extern int getpagesize (void); +extern char *stpcpy (char *, const char *); + +/* No intl. */ +#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) diff --git a/bfd/hosts/delta68.h b/bfd/hosts/delta68.h index 352a579..3788272 100644 --- a/bfd/hosts/delta68.h +++ b/bfd/hosts/delta68.h @@ -1,4 +1,4 @@ -/* Copyright 2007 Free Software Foundation, Inc. +/* Copyright 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/hosts/vaxbsd.h b/bfd/hosts/vaxbsd.h index 5dd8bde..3e02c3d 100644 --- a/bfd/hosts/vaxbsd.h +++ b/bfd/hosts/vaxbsd.h @@ -1,4 +1,4 @@ -/* Copyright 2007 Free Software Foundation, Inc. +/* Copyright 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/hosts/vaxlinux.h b/bfd/hosts/vaxlinux.h index 4dd3f4c..271587e 100644 --- a/bfd/hosts/vaxlinux.h +++ b/bfd/hosts/vaxlinux.h @@ -1,4 +1,4 @@ -/* Copyright 2007 Free Software Foundation, Inc. +/* Copyright 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/hp300bsd.c b/bfd/hp300bsd.c index b150b5b..d498419 100644 --- a/bfd/hp300bsd.c +++ b/bfd/hp300bsd.c @@ -1,5 +1,5 @@ /* BFD back-end for HP 9000/300 (68000-based) machines running BSD Unix. - Copyright 1992, 1994, 1995, 2001, 2003, 2007 + Copyright 1992, 1994, 1995, 2001, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/hp300hpux.c b/bfd/hp300hpux.c index d016e3a..3ca5642 100644 --- a/bfd/hp300hpux.c +++ b/bfd/hp300hpux.c @@ -1,6 +1,6 @@ /* BFD backend for hp-ux 9000/300 Copyright 1990, 1991, 1993, 1994, 1995, 1997, 1999, 2000, 2001, 2002, - 2003, 2004, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2007 Free Software Foundation, Inc. Written by Glenn Engel. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/hpux-core.c b/bfd/hpux-core.c index 15cae10..fdcde7e 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, 2006, - 2007 Free Software Foundation, Inc. + Copyright 1993, 1994, 1996, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008 Free Software Foundation, Inc. Written by Stu Grossman, Cygnus Support. Converted to back-end form by Ian Lance Taylor, Cygnus SUpport @@ -66,7 +66,6 @@ #ifdef HPUX_CORE #include #endif -#include /* After a.out.h */ #include /* Kludge: There's no explicit mechanism provided by sys/core.h to diff --git a/bfd/i386bsd.c b/bfd/i386bsd.c index c8f272e..b59171c 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, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 2001, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/i386dynix.c b/bfd/i386dynix.c index 7326411..30d2450 100644 --- a/bfd/i386dynix.c +++ b/bfd/i386dynix.c @@ -1,5 +1,5 @@ /* BFD back-end for i386 a.out binaries under dynix. - Copyright 1994, 1995, 2001, 2003, 2007 Free Software Foundation, Inc. + Copyright 1994, 1995, 2001, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/i386freebsd.c b/bfd/i386freebsd.c index 57024b0..52a3f6e 100644 --- a/bfd/i386freebsd.c +++ b/bfd/i386freebsd.c @@ -1,5 +1,6 @@ /* BFD back-end for FreeBSD/386 a.out-ish binaries. - Copyright 1990, 1991, 1992, 1996, 2001, 2007 Free Software Foundation, Inc. + Copyright 1990, 1991, 1992, 1996, 2001, 2005, 2007 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/i386linux.c b/bfd/i386linux.c index 52cc36e..dee733d 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -346,9 +346,9 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, If we do, and the defining entry is from a shared library, we need to create the dynamic sections. - FIXME: What if abfd->xvec != info->hash->creator? We may want to - be able to link Linux a.out and ELF objects together, but serious - confusion is possible. */ + FIXME: What if abfd->xvec != info->output_bfd->xvec? We may + want to be able to link Linux a.out and ELF objects together, + but serious confusion is possible. */ insert = FALSE; @@ -356,7 +356,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, && linux_hash_table (info)->dynobj == NULL && strcmp (name, SHARABLE_CONFLICTS) == 0 && (flags & BSF_CONSTRUCTOR) != 0 - && abfd->xvec == info->hash->creator) + && abfd->xvec == info->output_bfd->xvec) { if (! linux_link_create_dynamic_sections (abfd, info)) return FALSE; @@ -365,7 +365,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, } if (bfd_is_abs_section (section) - && abfd->xvec == info->hash->creator) + && abfd->xvec == info->output_bfd->xvec) { h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE, FALSE, FALSE); diff --git a/bfd/i386lynx.c b/bfd/i386lynx.c index f8b8e02..2e85724 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, 2007 Free Software Foundation, Inc. + 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/i386mach3.c b/bfd/i386mach3.c index 06974c1..8402bdf 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, 2007 + Copyright 1990, 1991, 1993, 1994, 1995, 1997, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/i386msdos.c b/bfd/i386msdos.c index 46489fa..2059d9c 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, 2006, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Bryan Ford of the University of Utah. Contributed by the Center for Software Science at the @@ -148,6 +148,7 @@ msdos_set_section_contents (bfd *abfd, #define msdos_bfd_discard_group bfd_generic_discard_group #define msdos_section_already_linked \ _bfd_generic_section_already_linked +#define msdos_bfd_define_common_symbol bfd_generic_define_common_symbol #define msdos_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define msdos_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define msdos_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/i386netbsd.c b/bfd/i386netbsd.c index c80b862..47607b6 100644 --- a/bfd/i386netbsd.c +++ b/bfd/i386netbsd.c @@ -1,5 +1,5 @@ /* BFD back-end for NetBSD/386 a.out-ish binaries. - Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 2001, 2007 + Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 2001, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/i386os9k.c b/bfd/i386os9k.c index fa4fc42..4c33a6e 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, 2006, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -172,6 +172,7 @@ os9k_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #define os9k_bfd_discard_group bfd_generic_discard_group #define os9k_section_already_linked \ _bfd_generic_section_already_linked +#define os9k_bfd_define_common_symbol bfd_generic_define_common_symbol #define os9k_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define os9k_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define os9k_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/ieee.c b/bfd/ieee.c index 6efd978..1fecf5a 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. @@ -3487,6 +3487,12 @@ ieee_write_processor (bfd *abfd) case bfd_mach_mcf_isa_b_float: id = "isa-b:float"; break; case bfd_mach_mcf_isa_b_float_mac: id = "isa-b:float:mac"; break; case bfd_mach_mcf_isa_b_float_emac: id = "isa-b:float:emac"; break; + case bfd_mach_mcf_isa_c: id = "isa-c"; break; + case bfd_mach_mcf_isa_c_mac: id = "isa-c:mac"; break; + case bfd_mach_mcf_isa_c_emac: id = "isa-c:emac"; break; + case bfd_mach_mcf_isa_c_nodiv: id = "isa-c:nodiv"; break; + case bfd_mach_mcf_isa_c_nodiv_mac: id = "isa-c:nodiv:mac"; break; + case bfd_mach_mcf_isa_c_nodiv_emac: id = "isa-c:nodiv:emac"; break; } if (! ieee_write_id (abfd, id)) @@ -3621,12 +3627,12 @@ static asymbol * ieee_make_empty_symbol (bfd *abfd) { bfd_size_type amt = sizeof (ieee_symbol_type); - ieee_symbol_type *new = bfd_zalloc (abfd, amt); + ieee_symbol_type *new_symbol = (ieee_symbol_type *) bfd_zalloc (abfd, amt); - if (!new) + if (!new_symbol) return NULL; - new->symbol.the_bfd = abfd; - return &new->symbol; + new_symbol->symbol.the_bfd = abfd; + return &new_symbol->symbol; } static bfd * @@ -3764,6 +3770,7 @@ ieee_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #define ieee_bfd_discard_group bfd_generic_discard_group #define ieee_section_already_linked \ _bfd_generic_section_already_linked +#define ieee_bfd_define_common_symbol bfd_generic_define_common_symbol #define ieee_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define ieee_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define ieee_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/ihex.c b/bfd/ihex.c index 47e857c..aaad6d7 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, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor of Cygnus Support . This file is part of BFD, the Binary File Descriptor library. @@ -177,7 +177,7 @@ ihex_mkobject (bfd *abfd) { struct ihex_data_struct *tdata; - tdata = bfd_alloc (abfd, sizeof (* tdata)); + tdata = (struct ihex_data_struct *) bfd_alloc (abfd, sizeof (* tdata)); if (tdata == NULL) return FALSE; @@ -309,7 +309,7 @@ ihex_scan (bfd *abfd) chars = len * 2 + 2; if (chars >= bufsize) { - buf = bfd_realloc (buf, (bfd_size_type) chars); + buf = (bfd_byte *) bfd_realloc (buf, (bfd_size_type) chars); if (buf == NULL) goto error_return; bufsize = chars; @@ -361,7 +361,7 @@ ihex_scan (bfd *abfd) sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1); amt = strlen (secbuf) + 1; - secname = bfd_alloc (abfd, amt); + secname = (char *) bfd_alloc (abfd, amt); if (secname == NULL) goto error_return; strcpy (secname, secbuf); @@ -583,7 +583,7 @@ ihex_read_section (bfd *abfd, asection *section, bfd_byte *contents) if (len * 2 > bufsize) { - buf = bfd_realloc (buf, (bfd_size_type) len * 2); + buf = (bfd_byte *) bfd_realloc (buf, (bfd_size_type) len * 2); if (buf == NULL) goto error_return; bufsize = len * 2; @@ -640,7 +640,8 @@ ihex_get_section_contents (bfd *abfd, section->used_by_bfd = bfd_alloc (abfd, section->size); if (section->used_by_bfd == NULL) return FALSE; - if (! ihex_read_section (abfd, section, section->used_by_bfd)) + if (! ihex_read_section (abfd, section, + (bfd_byte *) section->used_by_bfd)) return FALSE; } @@ -668,11 +669,11 @@ ihex_set_section_contents (bfd *abfd, || (section->flags & SEC_LOAD) == 0) return TRUE; - n = bfd_alloc (abfd, sizeof (* n)); + n = (struct ihex_data_list *) bfd_alloc (abfd, sizeof (* n)); if (n == NULL) return FALSE; - data = bfd_alloc (abfd, count); + data = (bfd_byte *) bfd_alloc (abfd, count); if (data == NULL) return FALSE; memcpy (data, location, (size_t) count); @@ -933,6 +934,7 @@ ihex_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #define ihex_bfd_is_group_section bfd_generic_is_group_section #define ihex_bfd_discard_group bfd_generic_discard_group #define ihex_section_already_linked _bfd_generic_section_already_linked +#define ihex_bfd_define_common_symbol bfd_generic_define_common_symbol #define ihex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define ihex_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define ihex_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/init.c b/bfd/init.c index 2ff1554..a023fb6 100644 --- a/bfd/init.c +++ b/bfd/init.c @@ -1,5 +1,5 @@ /* bfd initialization stuff - Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2003, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 1995, 2003, 2005, 2007 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support. diff --git a/bfd/irix-core.c b/bfd/irix-core.c index 41899ac..1feff87 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, 2006, 2007 + Copyright 1993, 1994, 1996, 1999, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Stu Grossman, Cygnus Support. Converted to back-end form by Ian Lance Taylor, Cygnus Support diff --git a/bfd/libaout.h b/bfd/libaout.h index d1d5b0c..ed2ec45 100644 --- a/bfd/libaout.h +++ b/bfd/libaout.h @@ -349,6 +349,21 @@ typedef struct aout_symbol Various things depend on this struct being around any time an a.out file is being handled. An example is dbxread.c in GDB. */ +enum aout_subformat { + default_format = 0, + /* Used on HP 9000/300 running HP/UX. See hp300hpux.c. */ + gnu_encap_format, + /* Used on Linux, 386BSD, etc. See include/aout/aout64.h. */ + q_magic_format +}; + +enum aout_magic { + undecided_magic = 0, + z_magic, + o_magic, + n_magic +}; + struct aoutdata { struct internal_exec *hdr; /* Exec file header. */ @@ -384,22 +399,9 @@ struct aoutdata unsigned vma_adjusted : 1; /* Used when a bfd supports several highly similar formats. */ - enum - { - default_format = 0, - /* Used on HP 9000/300 running HP/UX. See hp300hpux.c. */ - gnu_encap_format, - /* Used on Linux, 386BSD, etc. See include/aout/aout64.h. */ - q_magic_format - } subformat; - - enum - { - undecided_magic = 0, - z_magic, - o_magic, - n_magic - } magic; + enum aout_subformat subformat; + + enum aout_magic magic; /* A buffer for find_nearest_line. */ char *line_buf; diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h index ec11bd5..2e441db 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, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -91,6 +91,7 @@ struct areltdata { char * arch_header; /* it's actually a string */ unsigned int parsed_size; /* octets of filesize not including ar_hdr */ char *filename; /* null-terminated */ + file_ptr origin; /* for element of a thin archive */ }; #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size) @@ -99,6 +100,8 @@ extern void *bfd_malloc (bfd_size_type); extern void *bfd_realloc (void *, bfd_size_type); +extern void *bfd_realloc_or_free + (void *, bfd_size_type); extern void *bfd_zmalloc (bfd_size_type); extern void *bfd_malloc2 @@ -413,6 +416,9 @@ extern bfd_boolean _bfd_generic_set_section_contents ((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false) #define _bfd_nolink_section_already_linked \ ((void (*) (bfd *, struct bfd_section *, struct bfd_link_info *)) bfd_void) +#define _bfd_nolink_bfd_define_common_symbol \ + ((bfd_boolean (*) (bfd *, struct bfd_link_info *, \ + struct bfd_link_hash_entry *)) bfd_false) /* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC diff --git a/bfd/libbfd.c b/bfd/libbfd.c index bf49a2e..f79e190 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Cygnus Support. @@ -265,6 +265,34 @@ bfd_realloc2 (void *ptr, bfd_size_type nmemb, bfd_size_type size) return ret; } +/* Reallocate memory using realloc. + If this fails the pointer is freed before returning. */ + +void * +bfd_realloc_or_free (void *ptr, bfd_size_type size) +{ + size_t amount = (size_t) size; + void *ret; + + if (size != amount) + ret = NULL; + else if (ptr == NULL) + ret = malloc (amount); + else + ret = realloc (ptr, amount); + + if (ret == NULL) + { + if (amount > 0) + bfd_set_error (bfd_error_no_memory); + + if (ptr != NULL) + free (ptr); + } + + return ret; +} + /* Allocate memory using malloc and clear it. */ void * @@ -521,35 +549,35 @@ DESCRIPTION bfd_vma bfd_getb16 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; return (addr[0] << 8) | addr[1]; } bfd_vma bfd_getl16 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; return (addr[1] << 8) | addr[0]; } bfd_signed_vma bfd_getb_signed_16 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; return COERCE16 ((addr[0] << 8) | addr[1]); } bfd_signed_vma bfd_getl_signed_16 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; return COERCE16 ((addr[1] << 8) | addr[0]); } void bfd_putb16 (bfd_vma data, void *p) { - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; addr[0] = (data >> 8) & 0xff; addr[1] = data & 0xff; } @@ -557,7 +585,7 @@ bfd_putb16 (bfd_vma data, void *p) void bfd_putl16 (bfd_vma data, void *p) { - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; addr[0] = data & 0xff; addr[1] = (data >> 8) & 0xff; } @@ -565,7 +593,7 @@ bfd_putl16 (bfd_vma data, void *p) bfd_vma bfd_getb32 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; unsigned long v; v = (unsigned long) addr[0] << 24; @@ -578,7 +606,7 @@ bfd_getb32 (const void *p) bfd_vma bfd_getl32 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; unsigned long v; v = (unsigned long) addr[0]; @@ -591,7 +619,7 @@ bfd_getl32 (const void *p) bfd_signed_vma bfd_getb_signed_32 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; unsigned long v; v = (unsigned long) addr[0] << 24; @@ -604,7 +632,7 @@ bfd_getb_signed_32 (const void *p) bfd_signed_vma bfd_getl_signed_32 (const void *p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; unsigned long v; v = (unsigned long) addr[0]; @@ -618,7 +646,7 @@ bfd_uint64_t bfd_getb64 (const void *p ATTRIBUTE_UNUSED) { #ifdef BFD_HOST_64_BIT - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; bfd_uint64_t v; v = addr[0]; v <<= 8; @@ -641,7 +669,7 @@ bfd_uint64_t bfd_getl64 (const void *p ATTRIBUTE_UNUSED) { #ifdef BFD_HOST_64_BIT - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; bfd_uint64_t v; v = addr[7]; v <<= 8; @@ -665,7 +693,7 @@ bfd_int64_t bfd_getb_signed_64 (const void *p ATTRIBUTE_UNUSED) { #ifdef BFD_HOST_64_BIT - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; bfd_uint64_t v; v = addr[0]; v <<= 8; @@ -688,7 +716,7 @@ bfd_int64_t bfd_getl_signed_64 (const void *p ATTRIBUTE_UNUSED) { #ifdef BFD_HOST_64_BIT - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; bfd_uint64_t v; v = addr[7]; v <<= 8; @@ -710,7 +738,7 @@ bfd_getl_signed_64 (const void *p ATTRIBUTE_UNUSED) void bfd_putb32 (bfd_vma data, void *p) { - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; addr[0] = (data >> 24) & 0xff; addr[1] = (data >> 16) & 0xff; addr[2] = (data >> 8) & 0xff; @@ -720,7 +748,7 @@ bfd_putb32 (bfd_vma data, void *p) void bfd_putl32 (bfd_vma data, void *p) { - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; addr[0] = data & 0xff; addr[1] = (data >> 8) & 0xff; addr[2] = (data >> 16) & 0xff; @@ -731,7 +759,7 @@ void bfd_putb64 (bfd_uint64_t data ATTRIBUTE_UNUSED, void *p ATTRIBUTE_UNUSED) { #ifdef BFD_HOST_64_BIT - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; addr[0] = (data >> (7*8)) & 0xff; addr[1] = (data >> (6*8)) & 0xff; addr[2] = (data >> (5*8)) & 0xff; @@ -749,7 +777,7 @@ void bfd_putl64 (bfd_uint64_t data ATTRIBUTE_UNUSED, void *p ATTRIBUTE_UNUSED) { #ifdef BFD_HOST_64_BIT - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; addr[7] = (data >> (7*8)) & 0xff; addr[6] = (data >> (6*8)) & 0xff; addr[5] = (data >> (5*8)) & 0xff; @@ -766,7 +794,7 @@ bfd_putl64 (bfd_uint64_t data ATTRIBUTE_UNUSED, void *p ATTRIBUTE_UNUSED) void bfd_put_bits (bfd_uint64_t data, void *p, int bits, bfd_boolean big_p) { - bfd_byte *addr = p; + bfd_byte *addr = (bfd_byte *) p; int i; int bytes; @@ -786,7 +814,7 @@ bfd_put_bits (bfd_uint64_t data, void *p, int bits, bfd_boolean big_p) bfd_uint64_t bfd_get_bits (const void *p, int bits, bfd_boolean big_p) { - const bfd_byte *addr = p; + const bfd_byte *addr = (const bfd_byte *) p; bfd_uint64_t data; int i; int bytes; diff --git a/bfd/libbfd.h b/bfd/libbfd.h index 2d5b5b3..2450b2d 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, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -96,6 +96,7 @@ struct areltdata { char * arch_header; /* it's actually a string */ unsigned int parsed_size; /* octets of filesize not including ar_hdr */ char *filename; /* null-terminated */ + file_ptr origin; /* for element of a thin archive */ }; #define arelt_size(bfd) (((struct areltdata *)((bfd)->arelt_data))->parsed_size) @@ -104,6 +105,8 @@ extern void *bfd_malloc (bfd_size_type); extern void *bfd_realloc (void *, bfd_size_type); +extern void *bfd_realloc_or_free + (void *, bfd_size_type); extern void *bfd_zmalloc (bfd_size_type); extern void *bfd_malloc2 @@ -418,6 +421,9 @@ extern bfd_boolean _bfd_generic_set_section_contents ((bfd_boolean (*) (bfd *, struct bfd_section *)) bfd_false) #define _bfd_nolink_section_already_linked \ ((void (*) (bfd *, struct bfd_section *, struct bfd_link_info *)) bfd_void) +#define _bfd_nolink_bfd_define_common_symbol \ + ((bfd_boolean (*) (bfd *, struct bfd_link_info *, \ + struct bfd_link_hash_entry *)) bfd_false) /* Routines to use for BFD_JUMP_TABLE_DYNAMIC for targets which do not have dynamic symbols or relocs. Use BFD_JUMP_TABLE_DYNAMIC @@ -767,6 +773,9 @@ struct bfd_iovec int (*bclose) (struct bfd *abfd); int (*bflush) (struct bfd *abfd); int (*bstat) (struct bfd *abfd, struct stat *sb); + /* Just like mmap: (void*)-1 on failure, mmapped address on success. */ + void *(*bmmap) (struct bfd *abfd, void *addr, bfd_size_type len, + int prot, int flags, file_ptr offset); }; /* Extracted from bfdwin.c. */ struct _bfd_window_internal { @@ -826,6 +835,21 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_68K_GLOB_DAT", "BFD_RELOC_68K_JMP_SLOT", "BFD_RELOC_68K_RELATIVE", + "BFD_RELOC_68K_TLS_GD32", + "BFD_RELOC_68K_TLS_GD16", + "BFD_RELOC_68K_TLS_GD8", + "BFD_RELOC_68K_TLS_LDM32", + "BFD_RELOC_68K_TLS_LDM16", + "BFD_RELOC_68K_TLS_LDM8", + "BFD_RELOC_68K_TLS_LDO32", + "BFD_RELOC_68K_TLS_LDO16", + "BFD_RELOC_68K_TLS_LDO8", + "BFD_RELOC_68K_TLS_IE32", + "BFD_RELOC_68K_TLS_IE16", + "BFD_RELOC_68K_TLS_IE8", + "BFD_RELOC_68K_TLS_LE32", + "BFD_RELOC_68K_TLS_LE16", + "BFD_RELOC_68K_TLS_LE8", "BFD_RELOC_32_BASEREL", "BFD_RELOC_16_BASEREL", "BFD_RELOC_LO16_BASEREL", @@ -859,6 +883,11 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_SPARC_UA16", "BFD_RELOC_SPARC_UA32", "BFD_RELOC_SPARC_UA64", + "BFD_RELOC_SPARC_GOTDATA_HIX22", + "BFD_RELOC_SPARC_GOTDATA_LOX10", + "BFD_RELOC_SPARC_GOTDATA_OP_HIX22", + "BFD_RELOC_SPARC_GOTDATA_OP_LOX10", + "BFD_RELOC_SPARC_GOTDATA_OP", "BFD_RELOC_SPARC_BASE13", "BFD_RELOC_SPARC_BASE22", "BFD_RELOC_SPARC_10", @@ -922,6 +951,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_SPU_HI16", "BFD_RELOC_SPU_PPU32", "BFD_RELOC_SPU_PPU64", + "BFD_RELOC_SPU_ADD_PIC", "BFD_RELOC_ALPHA_GPDISP_HI16", "BFD_RELOC_ALPHA_GPDISP_LO16", "BFD_RELOC_ALPHA_GPDISP", @@ -934,6 +964,10 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_ALPHA_GPREL_HI16", "BFD_RELOC_ALPHA_GPREL_LO16", "BFD_RELOC_ALPHA_BRSGP", + "BFD_RELOC_ALPHA_NOP", + "BFD_RELOC_ALPHA_BSR", + "BFD_RELOC_ALPHA_LDA", + "BFD_RELOC_ALPHA_BOH", "BFD_RELOC_ALPHA_TLSGD", "BFD_RELOC_ALPHA_TLSLDM", "BFD_RELOC_ALPHA_DTPMOD64", @@ -956,6 +990,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_HI16_PCREL", "BFD_RELOC_HI16_S_PCREL", "BFD_RELOC_LO16_PCREL", + "BFD_RELOC_MIPS16_GOT16", + "BFD_RELOC_MIPS16_CALL16", "BFD_RELOC_MIPS16_HI16", "BFD_RELOC_MIPS16_HI16_S", "BFD_RELOC_MIPS16_LO16", @@ -998,6 +1034,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_MIPS_COPY", "BFD_RELOC_MIPS_JUMP_SLOT", + "BFD_RELOC_MOXIE_10_PCREL", + "BFD_RELOC_FRV_LABEL16", "BFD_RELOC_FRV_LABEL24", "BFD_RELOC_FRV_LO16", @@ -1046,6 +1084,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_MN10300_GLOB_DAT", "BFD_RELOC_MN10300_JMP_SLOT", "BFD_RELOC_MN10300_RELATIVE", + "BFD_RELOC_MN10300_SYM_DIFF", + "BFD_RELOC_MN10300_ALIGN", "BFD_RELOC_386_GOT32", "BFD_RELOC_386_PLT32", @@ -1070,6 +1110,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_386_TLS_GOTDESC", "BFD_RELOC_386_TLS_DESC_CALL", "BFD_RELOC_386_TLS_DESC", + "BFD_RELOC_386_IRELATIVE", "BFD_RELOC_X86_64_GOT32", "BFD_RELOC_X86_64_PLT32", "BFD_RELOC_X86_64_COPY", @@ -1096,6 +1137,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_X86_64_GOTPC32_TLSDESC", "BFD_RELOC_X86_64_TLSDESC_CALL", "BFD_RELOC_X86_64_TLSDESC", + "BFD_RELOC_X86_64_IRELATIVE", "BFD_RELOC_NS32K_IMM_8", "BFD_RELOC_NS32K_IMM_16", "BFD_RELOC_NS32K_IMM_32", @@ -1170,6 +1212,8 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_PPC64_PLTGOT16_DS", "BFD_RELOC_PPC64_PLTGOT16_LO_DS", "BFD_RELOC_PPC_TLS", + "BFD_RELOC_PPC_TLSGD", + "BFD_RELOC_PPC_TLSLD", "BFD_RELOC_PPC_DTPMOD", "BFD_RELOC_PPC_TPREL16", "BFD_RELOC_PPC_TPREL16_LO", @@ -1280,6 +1324,7 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_ARM_LDC_SB_G0", "BFD_RELOC_ARM_LDC_SB_G1", "BFD_RELOC_ARM_LDC_SB_G2", + "BFD_RELOC_ARM_V4BX", "BFD_RELOC_ARM_IMMEDIATE", "BFD_RELOC_ARM_ADRL_IMMEDIATE", "BFD_RELOC_ARM_T32_IMMEDIATE", @@ -1651,13 +1696,15 @@ 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_SCORE_IMM30", + "BFD_RELOC_SCORE_IMM32", "BFD_RELOC_SCORE16_JMP", "BFD_RELOC_SCORE16_BRANCH", + "BFD_RELOC_SCORE_BCMP", "BFD_RELOC_SCORE_GOT15", "BFD_RELOC_SCORE_GOT_LO16", "BFD_RELOC_SCORE_CALL15", @@ -1833,6 +1880,12 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_CR16_DISP20", "BFD_RELOC_CR16_DISP24", "BFD_RELOC_CR16_DISP24a", + "BFD_RELOC_CR16_SWITCH8", + "BFD_RELOC_CR16_SWITCH16", + "BFD_RELOC_CR16_SWITCH32", + "BFD_RELOC_CR16_GOT_REGREL20", + "BFD_RELOC_CR16_GOTC_REGREL20", + "BFD_RELOC_CR16_GLOB_DAT", "BFD_RELOC_CRX_REL4", "BFD_RELOC_CRX_REL8", "BFD_RELOC_CRX_REL8_CMP", @@ -1874,6 +1927,18 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_CRIS_32_GOTREL", "BFD_RELOC_CRIS_32_PLT_GOTREL", "BFD_RELOC_CRIS_32_PLT_PCREL", + "BFD_RELOC_CRIS_32_GOT_GD", + "BFD_RELOC_CRIS_16_GOT_GD", + "BFD_RELOC_CRIS_32_GD", + "BFD_RELOC_CRIS_DTP", + "BFD_RELOC_CRIS_32_DTPREL", + "BFD_RELOC_CRIS_16_DTPREL", + "BFD_RELOC_CRIS_32_GOT_TPREL", + "BFD_RELOC_CRIS_16_GOT_TPREL", + "BFD_RELOC_CRIS_32_TPREL", + "BFD_RELOC_CRIS_16_TPREL", + "BFD_RELOC_CRIS_DTPMOD", + "BFD_RELOC_CRIS_32_IE", "BFD_RELOC_860_COPY", "BFD_RELOC_860_GLOB_DAT", "BFD_RELOC_860_JUMP_SLOT", @@ -1985,10 +2050,40 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", "BFD_RELOC_XTENSA_OP2", "BFD_RELOC_XTENSA_ASM_EXPAND", "BFD_RELOC_XTENSA_ASM_SIMPLIFY", + "BFD_RELOC_XTENSA_TLSDESC_FN", + "BFD_RELOC_XTENSA_TLSDESC_ARG", + "BFD_RELOC_XTENSA_TLS_DTPOFF", + "BFD_RELOC_XTENSA_TLS_TPOFF", + "BFD_RELOC_XTENSA_TLS_FUNC", + "BFD_RELOC_XTENSA_TLS_ARG", + "BFD_RELOC_XTENSA_TLS_CALL", "BFD_RELOC_Z80_DISP8", "BFD_RELOC_Z8K_DISP7", "BFD_RELOC_Z8K_CALLR", "BFD_RELOC_Z8K_IMM4L", + "BFD_RELOC_LM32_CALL", + "BFD_RELOC_LM32_BRANCH", + "BFD_RELOC_LM32_16_GOT", + "BFD_RELOC_LM32_GOTOFF_HI16", + "BFD_RELOC_LM32_GOTOFF_LO16", + "BFD_RELOC_LM32_COPY", + "BFD_RELOC_LM32_GLOB_DAT", + "BFD_RELOC_LM32_JMP_SLOT", + "BFD_RELOC_LM32_RELATIVE", + "BFD_RELOC_MACH_O_SECTDIFF", + "BFD_RELOC_MACH_O_PAIR", + "BFD_RELOC_MICROBLAZE_32_LO", + "BFD_RELOC_MICROBLAZE_32_LO_PCREL", + "BFD_RELOC_MICROBLAZE_32_ROSDA", + "BFD_RELOC_MICROBLAZE_32_RWSDA", + "BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM", + "BFD_RELOC_MICROBLAZE_64_NONE", + "BFD_RELOC_MICROBLAZE_64_GOTPC", + "BFD_RELOC_MICROBLAZE_64_GOT", + "BFD_RELOC_MICROBLAZE_64_PLT", + "BFD_RELOC_MICROBLAZE_64_GOTOFF", + "BFD_RELOC_MICROBLAZE_32_GOTOFF", + "BFD_RELOC_MICROBLAZE_COPY", "@@overflow: BFD_RELOC_UNUSED@@", }; #endif @@ -2028,5 +2123,3 @@ bfd_boolean bfd_default_scan (const struct bfd_arch_info *info, const char *string); /* Extracted from elf.c. */ -struct elf_internal_shdr *bfd_elf_find_section (bfd *abfd, char *name); - diff --git a/bfd/libcoff-in.h b/bfd/libcoff-in.h index d8c8ed1..cf0a319 100644 --- a/bfd/libcoff-in.h +++ b/bfd/libcoff-in.h @@ -1,6 +1,6 @@ /* BFD COFF object file private structure. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -106,6 +106,9 @@ typedef struct coff_tdata used by ARM code. */ flagword flags; + /* coff-stgo32 EXE stub header after BFD tdata has been allocated. Its data + is kept in internal_filehdr.go32stub beforehand. */ + char *go32stub; } coff_data_type; /* Tdata for pe image files. */ @@ -117,8 +120,6 @@ typedef struct pe_tdata int has_reloc_section; bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); flagword real_flags; - int target_subsystem; - bfd_boolean force_minimum_alignment; } pe_data_type; #define pe_data(bfd) ((bfd)->tdata.pe_obj_data) @@ -165,7 +166,8 @@ struct xcoff_tdata /* Used by the XCOFF backend linker. */ asection **csects; - unsigned long *debug_indices; + long *debug_indices; + unsigned int *lineno_counts; unsigned int import_file_id; }; @@ -215,8 +217,7 @@ struct xcoff_section_tdata /* The lineno_count field for the enclosing section, because we are going to clobber it there. */ unsigned int lineno_count; - /* The first and one past the last symbol indices for symbols used - by this csect. */ + /* The first and last symbol indices for symbols used by this csect. */ unsigned long first_symndx; unsigned long last_symndx; }; @@ -253,7 +254,7 @@ struct coff_link_hash_entry unsigned short type; /* Symbol class. */ - unsigned char class; + unsigned char symbol_class; /* Number of auxiliary entries. */ char numaux; @@ -393,7 +394,7 @@ struct coff_debug_merge_type struct coff_debug_merge_type *next; /* Class of type. */ - int class; + int type_class; /* Symbol index where this type is defined. */ long indx; @@ -589,15 +590,16 @@ extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_xcoff_bfd_final_link (bfd *, struct bfd_link_info *); +extern bfd_boolean _bfd_xcoff_define_common_symbol + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *); extern bfd_boolean _bfd_ppc_xcoff_relocate_section (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, struct internal_reloc *, struct internal_syment *, asection **); -/* Functions in coff-ppc.c. FIXME: These are called be pe.em in the +/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the linker, and so should start with bfd and be declared in bfd.h. */ extern bfd_boolean ppc_allocate_toc_section (struct bfd_link_info *); extern bfd_boolean ppc_process_before_allocation (bfd *, struct bfd_link_info *); - diff --git a/bfd/libcoff.h b/bfd/libcoff.h index 1e6f1c2..db5e290 100644 --- a/bfd/libcoff.h +++ b/bfd/libcoff.h @@ -4,7 +4,7 @@ /* BFD COFF object file private structure. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, - 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -110,6 +110,9 @@ typedef struct coff_tdata used by ARM code. */ flagword flags; + /* coff-stgo32 EXE stub header after BFD tdata has been allocated. Its data + is kept in internal_filehdr.go32stub beforehand. */ + char *go32stub; } coff_data_type; /* Tdata for pe image files. */ @@ -121,8 +124,6 @@ typedef struct pe_tdata int has_reloc_section; bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *); flagword real_flags; - int target_subsystem; - bfd_boolean force_minimum_alignment; } pe_data_type; #define pe_data(bfd) ((bfd)->tdata.pe_obj_data) @@ -169,7 +170,8 @@ struct xcoff_tdata /* Used by the XCOFF backend linker. */ asection **csects; - unsigned long *debug_indices; + long *debug_indices; + unsigned int *lineno_counts; unsigned int import_file_id; }; @@ -219,8 +221,7 @@ struct xcoff_section_tdata /* The lineno_count field for the enclosing section, because we are going to clobber it there. */ unsigned int lineno_count; - /* The first and one past the last symbol indices for symbols used - by this csect. */ + /* The first and last symbol indices for symbols used by this csect. */ unsigned long first_symndx; unsigned long last_symndx; }; @@ -257,7 +258,7 @@ struct coff_link_hash_entry unsigned short type; /* Symbol class. */ - unsigned char class; + unsigned char symbol_class; /* Number of auxiliary entries. */ char numaux; @@ -397,7 +398,7 @@ struct coff_debug_merge_type struct coff_debug_merge_type *next; /* Class of type. */ - int class; + int type_class; /* Symbol index where this type is defined. */ long indx; @@ -593,18 +594,19 @@ extern bfd_boolean _bfd_xcoff_bfd_link_add_symbols (bfd *, struct bfd_link_info *); extern bfd_boolean _bfd_xcoff_bfd_final_link (bfd *, struct bfd_link_info *); +extern bfd_boolean _bfd_xcoff_define_common_symbol + (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *); extern bfd_boolean _bfd_ppc_xcoff_relocate_section (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, struct internal_reloc *, struct internal_syment *, asection **); -/* Functions in coff-ppc.c. FIXME: These are called be pe.em in the +/* Functions in coff-ppc.c. FIXME: These are called by pe.em in the linker, and so should start with bfd and be declared in bfd.h. */ extern bfd_boolean ppc_allocate_toc_section (struct bfd_link_info *); extern bfd_boolean ppc_process_before_allocation (bfd *, struct bfd_link_info *); - /* Extracted from coffcode.h. */ typedef struct coff_ptr_struct { @@ -715,7 +717,11 @@ typedef struct unsigned int _bfd_linesz; unsigned int _bfd_filnmlen; bfd_boolean _bfd_coff_long_filenames; + bfd_boolean _bfd_coff_long_section_names; + bfd_boolean (*_bfd_coff_set_long_section_names) + (bfd *, int); + unsigned int _bfd_coff_default_section_alignment_power; bfd_boolean _bfd_coff_force_symnames_in_strings; unsigned int _bfd_coff_debug_string_prefix_length; @@ -802,6 +808,9 @@ typedef struct bfd_boolean (*_bfd_coff_final_link_postscript) (bfd *, struct coff_final_link_info *); + bfd_boolean (*_bfd_coff_print_pdata) + (bfd *, void *); + } bfd_coff_backend_data; #define coff_backend_info(abfd) \ @@ -849,6 +858,8 @@ typedef struct (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_set_long_section_names(abfd, enable) \ + ((coff_backend_info (abfd)->_bfd_coff_set_long_section_names) (abfd, enable)) #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) \ @@ -934,3 +945,12 @@ typedef struct #define bfd_coff_final_link_postscript(a,p) \ ((coff_backend_info (a)->_bfd_coff_final_link_postscript) (a, p)) +#define bfd_coff_have_print_pdata(a) \ + (coff_backend_info (a)->_bfd_coff_print_pdata) +#define bfd_coff_print_pdata(a,p) \ + ((coff_backend_info (a)->_bfd_coff_print_pdata) (a, p)) + +/* Macro: Returns true if the bfd is a PE executable as opposed to a + PE object file. */ +#define bfd_pei_p(abfd) \ + (CONST_STRNEQ ((abfd)->xvec->name, "pei-")) diff --git a/bfd/libecoff.h b/bfd/libecoff.h index 9c4161c..0e7ea85 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, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -76,6 +76,11 @@ struct ecoff_backend_data bfd *(*get_elt_at_filepos) (bfd *, file_ptr); }; +/* ECOFF targets don't support COFF long section names, so this + macro is provided to use as an initialiser for the related + members of the embedded bfd_coff_backend_data struct. */ +#define ECOFF_NO_LONG_SECTION_NAMES (FALSE), _bfd_ecoff_no_long_sections + /* This is the target specific information kept for ECOFF files. */ #define ecoff_data(abfd) ((abfd)->tdata.ecoff_obj_data) @@ -229,7 +234,6 @@ extern bfd_boolean _bfd_ecoff_slurp_symbolic_info /* Generic ECOFF BFD backend vectors. */ extern bfd_boolean _bfd_ecoff_write_object_contents (bfd *); -extern const bfd_target *_bfd_ecoff_archive_p (bfd *); #define _bfd_ecoff_close_and_cleanup _bfd_generic_close_and_cleanup #define _bfd_ecoff_bfd_free_cached_info _bfd_generic_bfd_free_cached_info @@ -321,6 +325,8 @@ extern void * _bfd_ecoff_mkobject_hook (bfd *, void *, void *); ((void (*) (bfd *, asection *, void *)) bfd_void) extern bfd_boolean _bfd_ecoff_set_arch_mach_hook (bfd *, void *); +extern bfd_boolean _bfd_ecoff_no_long_sections + (bfd *abfd, int enable); extern bfd_boolean _bfd_ecoff_styp_to_sec_flags (bfd *, void *, const char *, asection *, flagword *); extern bfd_boolean _bfd_ecoff_slurp_symbol_table (bfd *); diff --git a/bfd/libhppa.h b/bfd/libhppa.h index beebb70..5e0b155 100644 --- a/bfd/libhppa.h +++ b/bfd/libhppa.h @@ -1,6 +1,6 @@ /* HP PA-RISC SOM object file format: definitions internal to BFD. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, - 2003, 2007 Free Software Foundation, Inc. + 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). diff --git a/bfd/libieee.h b/bfd/libieee.h index 2d71577..53f4c08 100644 --- a/bfd/libieee.h +++ b/bfd/libieee.h @@ -1,5 +1,5 @@ /* IEEE-695 object file formats: definitions internal to BFD. - Copyright 1990, 1991, 1992, 1994, 1996, 2001, 2002, 2007 + Copyright 1990, 1991, 1992, 1994, 1996, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. Mostly Steve Chamberlain's fault. diff --git a/bfd/liboasys.h b/bfd/liboasys.h index b84a0ea..8228d97 100644 --- a/bfd/liboasys.h +++ b/bfd/liboasys.h @@ -1,5 +1,5 @@ /* BFD internal declarations for Oasys file format handling. - Copyright 1990, 1991, 1992, 1993, 1994, 1997, 2002, 2007 + Copyright 1990, 1991, 1992, 1993, 1994, 1997, 2002, 2005, 2007 Free Software Foundation, Inc. Scrawled by Steve Chamberlain of Cygnus Support. diff --git a/bfd/libpei.h b/bfd/libpei.h index 5e272d0..f8a02b9 100644 --- a/bfd/libpei.h +++ b/bfd/libpei.h @@ -1,6 +1,6 @@ /* Support for the generic parts of PE/PEI; common header information. Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Solutions. This file is part of BFD, the Binary File Descriptor library. @@ -301,28 +301,6 @@ #endif /* !COFF_WITH_pep */ -/* 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 int coff_swap_reloc_out @@ -371,3 +349,8 @@ unsigned _bfd_XX_only_swap_filehdr_out (bfd *, void *, void *); unsigned _bfd_XXi_only_swap_filehdr_out (bfd *, void *, void *); bfd_boolean _bfd_XX_bfd_copy_private_section_data (bfd *, asection *, bfd *, asection *); +bfd_boolean _bfd_pe_print_ce_compressed_pdata (bfd *, void *); +bfd_boolean _bfd_pe64_print_ce_compressed_pdata (bfd *, void *); +bfd_boolean _bfd_pex64_print_ce_compressed_pdata (bfd *, void *); +bfd_boolean _bfd_pep_print_ce_compressed_pdata (bfd *, void *); + diff --git a/bfd/libxcoff.h b/bfd/libxcoff.h index c2f0d1e..3900dd3 100644 --- a/bfd/libxcoff.h +++ b/bfd/libxcoff.h @@ -1,5 +1,5 @@ /* BFD XCOFF object file private structure. - Copyright 2001, 2002, 2005, 2007 Free Software Foundation, Inc. + Copyright 2001, 2002, 2005, 2007, 2009 Free Software Foundation, Inc. Written by Tom Rix, Redhat. This file is part of BFD, the Binary File Descriptor library. @@ -223,6 +223,8 @@ extern bfd_boolean (*xcoff_calculate_relocation[XCOFF_MAX_CALCULATE_RELOCATION]) extern bfd_boolean (*xcoff_complain_overflow[XCOFF_MAX_COMPLAIN_OVERFLOW]) (XCOFF_COMPLAIN_FUNCTION_ARGS); +#define XCOFF_NO_LONG_SECTION_NAMES (FALSE), bfd_coff_set_long_section_names_disallowed + /* Relocation functions */ bfd_boolean xcoff_reloc_type_noop (XCOFF_RELOC_FUNCTION_ARGS); bfd_boolean xcoff_reloc_type_fail (XCOFF_RELOC_FUNCTION_ARGS); diff --git a/bfd/linker.c b/bfd/linker.c index fb293cc..1163a55 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -1,6 +1,6 @@ /* linker.c -- BFD linker routines Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, - 2003, 2004, 2005, 2006, 2007 + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain and Ian Lance Taylor, Cygnus Support @@ -151,9 +151,9 @@ SUBSUBSECTION 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 <> - 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. + <<_bfd_final_link>> function. In such a case the output bfd + xvec 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 @@ -165,7 +165,7 @@ SUBSUBSECTION initialization function. See <> for an example of how to - check the <> field before saving information (in this + check the output bfd before saving information (in this case, the ECOFF external symbol debugging information) in a hash table entry. @@ -444,7 +444,8 @@ _bfd_link_hash_newfunc (struct bfd_hash_entry *entry, subclass. */ if (entry == NULL) { - entry = bfd_hash_allocate (table, sizeof (struct bfd_link_hash_entry)); + entry = (struct bfd_hash_entry *) + bfd_hash_allocate (table, sizeof (struct bfd_link_hash_entry)); if (entry == NULL) return entry; } @@ -471,13 +472,12 @@ _bfd_link_hash_newfunc (struct bfd_hash_entry *entry, bfd_boolean _bfd_link_hash_table_init (struct bfd_link_hash_table *table, - bfd *abfd, + bfd *abfd ATTRIBUTE_UNUSED, struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *), unsigned int entsize) { - table->creator = abfd->xvec; table->undefs = NULL; table->undefs_tail = NULL; table->type = bfd_link_generic_hash_table; @@ -549,7 +549,7 @@ bfd_wrapped_link_hash_lookup (bfd *abfd, references to SYM with references to __wrap_SYM. */ amt = strlen (l) + sizeof WRAP + 1; - n = bfd_malloc (amt); + n = (char *) bfd_malloc (amt); if (n == NULL) return NULL; @@ -580,7 +580,7 @@ bfd_wrapped_link_hash_lookup (bfd *abfd, with references to SYM. */ amt = strlen (l + sizeof REAL - 1) + 2; - n = bfd_malloc (amt); + n = (char *) bfd_malloc (amt); if (n == NULL) return NULL; @@ -679,7 +679,7 @@ _bfd_generic_link_hash_newfunc (struct bfd_hash_entry *entry, subclass. */ if (entry == NULL) { - entry = + entry = (struct bfd_hash_entry *) bfd_hash_allocate (table, sizeof (struct generic_link_hash_entry)); if (entry == NULL) return entry; @@ -708,7 +708,7 @@ _bfd_generic_link_hash_table_create (bfd *abfd) struct generic_link_hash_table *ret; bfd_size_type amt = sizeof (struct generic_link_hash_table); - ret = bfd_malloc (amt); + ret = (struct generic_link_hash_table *) bfd_malloc (amt); if (ret == NULL) return NULL; if (! _bfd_link_hash_table_init (&ret->root, abfd, @@ -738,8 +738,8 @@ _bfd_generic_link_hash_table_free (struct bfd_link_hash_table *hash) the hash table pointing to different instances of the symbol structure. */ -static bfd_boolean -generic_link_read_symbols (bfd *abfd) +bfd_boolean +bfd_generic_link_read_symbols (bfd *abfd) { if (bfd_get_outsymbols (abfd) == NULL) { @@ -749,7 +749,8 @@ generic_link_read_symbols (bfd *abfd) symsize = bfd_get_symtab_upper_bound (abfd); if (symsize < 0) return FALSE; - bfd_get_outsymbols (abfd) = bfd_alloc (abfd, symsize); + bfd_get_outsymbols (abfd) = (struct bfd_symbol **) bfd_alloc (abfd, + symsize); if (bfd_get_outsymbols (abfd) == NULL && symsize != 0) return FALSE; symcount = bfd_canonicalize_symtab (abfd, bfd_get_outsymbols (abfd)); @@ -835,7 +836,7 @@ generic_link_add_object_symbols (bfd *abfd, bfd_size_type symcount; struct bfd_symbol **outsyms; - if (! generic_link_read_symbols (abfd)) + if (!bfd_generic_link_read_symbols (abfd)) return FALSE; symcount = _bfd_generic_link_get_symcount (abfd); outsyms = _bfd_generic_link_get_symbols (abfd); @@ -881,7 +882,8 @@ archive_hash_newfunc (struct bfd_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 archive_hash_entry)); + ret = (struct archive_hash_entry *) + bfd_hash_allocate (table, sizeof (struct archive_hash_entry)); if (ret == NULL) return NULL; @@ -1052,7 +1054,7 @@ _bfd_generic_link_add_archive_symbols if (info->pei386_auto_import) { bfd_size_type amt = strlen (h->root.string) + 10; - char *buf = bfd_malloc (amt); + char *buf = (char *) bfd_malloc (amt); if (buf == NULL) return FALSE; @@ -1165,7 +1167,7 @@ generic_link_check_archive_element (bfd *abfd, *pneeded = FALSE; - if (! generic_link_read_symbols (abfd)) + if (!bfd_generic_link_read_symbols (abfd)) return FALSE; pp = _bfd_generic_link_get_symbols (abfd); @@ -1243,7 +1245,7 @@ generic_link_check_archive_element (bfd *abfd, attached to symbfd to ensure that it is in a BFD which will be linked in. */ h->type = bfd_link_hash_common; - h->u.c.p = + h->u.c.p = (struct bfd_link_hash_common_entry *) bfd_hash_allocate (&info->hash->table, sizeof (struct bfd_link_hash_common_entry)); if (h->u.c.p == NULL) @@ -1359,7 +1361,7 @@ generic_link_add_symbol_list (bfd *abfd, hash table other than the generic hash table, so we only do this if we are certain that the hash table is a generic one. */ - if (info->hash->creator == abfd->xvec) + if (info->output_bfd->xvec == abfd->xvec) { if (h->sym == NULL || (! bfd_is_und_section (bfd_get_section (p)) @@ -1692,7 +1694,7 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, if (h->type == bfd_link_hash_new) bfd_link_add_undef (info->hash, h); h->type = bfd_link_hash_common; - h->u.c.p = + h->u.c.p = (struct bfd_link_hash_common_entry *) bfd_hash_allocate (&info->hash->table, sizeof (struct bfd_link_hash_common_entry)); if (h->u.c.p == NULL) @@ -1973,7 +1975,7 @@ _bfd_generic_link_add_one_symbol (struct bfd_link_info *info, char *w; size_t len = strlen (string) + 1; - w = bfd_hash_allocate (&info->hash->table, len); + w = (char *) bfd_hash_allocate (&info->hash->table, len); if (w == NULL) return FALSE; memcpy (w, string, len); @@ -2060,7 +2062,7 @@ _bfd_generic_final_link (bfd *abfd, struct bfd_link_info *info) input_section); if (relsize < 0) return FALSE; - relocs = bfd_malloc (relsize); + relocs = (arelent **) bfd_malloc (relsize); if (!relocs && relsize != 0) return FALSE; symbols = _bfd_generic_link_get_symbols (input_bfd); @@ -2082,7 +2084,7 @@ _bfd_generic_final_link (bfd *abfd, struct bfd_link_info *info) amt = o->reloc_count; amt *= sizeof (arelent *); - o->orelocation = bfd_alloc (abfd, amt); + o->orelocation = (struct reloc_cache_entry **) bfd_alloc (abfd, amt); if (!o->orelocation) return FALSE; o->flags |= SEC_RELOC; @@ -2136,7 +2138,7 @@ generic_add_output_symbol (bfd *output_bfd, size_t *psymalloc, asymbol *sym) *psymalloc *= 2; amt = *psymalloc; amt *= sizeof (asymbol *); - newsyms = bfd_realloc (bfd_get_outsymbols (output_bfd), amt); + newsyms = (asymbol **) bfd_realloc (bfd_get_outsymbols (output_bfd), amt); if (newsyms == NULL) return FALSE; bfd_get_outsymbols (output_bfd) = newsyms; @@ -2160,7 +2162,7 @@ _bfd_generic_link_output_symbols (bfd *output_bfd, asymbol **sym_ptr; asymbol **sym_end; - if (! generic_link_read_symbols (input_bfd)) + if (!bfd_generic_link_read_symbols (input_bfd)) return FALSE; /* Create a filename symbol if we are supposed to. */ @@ -2213,7 +2215,7 @@ _bfd_generic_link_output_symbols (bfd *output_bfd, || bfd_is_ind_section (bfd_get_section (sym))) { if (sym->udata.p != NULL) - h = sym->udata.p; + h = (struct generic_link_hash_entry *) sym->udata.p; else if ((sym->flags & BSF_CONSTRUCTOR) != 0) { /* This case normally means that the main linker code @@ -2243,7 +2245,7 @@ _bfd_generic_link_output_symbols (bfd *output_bfd, this routine will be called with a hash table other than a generic hash table, so we double check that. */ - if (info->hash->creator == input_bfd->xvec) + if (info->output_bfd->xvec == input_bfd->xvec) { if (h->sym != NULL) *sym_ptr = sym = h->sym; @@ -2452,7 +2454,8 @@ bfd_boolean _bfd_generic_link_write_global_symbol (struct generic_link_hash_entry *h, void *data) { - struct generic_write_global_symbol_info *wginfo = data; + struct generic_write_global_symbol_info *wginfo = + (struct generic_write_global_symbol_info *) data; asymbol *sym; if (h->root.type == bfd_link_hash_warning) @@ -2509,7 +2512,7 @@ _bfd_generic_reloc_link_order (bfd *abfd, if (sec->orelocation == NULL) abort (); - r = bfd_alloc (abfd, sizeof (arelent)); + r = (arelent *) bfd_alloc (abfd, sizeof (arelent)); if (r == NULL) return FALSE; @@ -2557,7 +2560,7 @@ _bfd_generic_reloc_link_order (bfd *abfd, file_ptr loc; size = bfd_get_reloc_size (r->howto); - buf = bfd_zmalloc (size); + buf = (bfd_byte *) bfd_zmalloc (size); if (buf == NULL) return FALSE; rstat = _bfd_relocate_contents (r->howto, abfd, @@ -2605,21 +2608,21 @@ struct bfd_link_order * bfd_new_link_order (bfd *abfd, asection *section) { bfd_size_type amt = sizeof (struct bfd_link_order); - struct bfd_link_order *new; + struct bfd_link_order *new_lo; - new = bfd_zalloc (abfd, amt); - if (!new) + new_lo = (struct bfd_link_order *) bfd_zalloc (abfd, amt); + if (!new_lo) return NULL; - new->type = bfd_undefined_link_order; + new_lo->type = bfd_undefined_link_order; if (section->map_tail.link_order != NULL) - section->map_tail.link_order->next = new; + section->map_tail.link_order->next = new_lo; else - section->map_head.link_order = new; - section->map_tail.link_order = new; + section->map_head.link_order = new_lo; + section->map_tail.link_order = new_lo; - return new; + return new_lo; } /* Default link order processing routine. Note that we can not handle @@ -2672,7 +2675,7 @@ default_data_link_order (bfd *abfd, if (fill_size != 0 && fill_size < size) { bfd_byte *p; - fill = bfd_malloc (size); + fill = (bfd_byte *) bfd_malloc (size); if (fill == NULL) return FALSE; p = fill; @@ -2753,7 +2756,7 @@ default_indirect_link_order (bfd *output_bfd, have retrieved them by this point, but we are being called by a specific linker, presumably because we are linking different types of object files together. */ - if (! generic_link_read_symbols (input_bfd)) + if (!bfd_generic_link_read_symbols (input_bfd)) return FALSE; /* Since we have been called by a specific linker, rather than @@ -2782,7 +2785,7 @@ default_indirect_link_order (bfd *output_bfd, /* sym->udata may have been set by generic_link_add_symbol_list. */ if (sym->udata.p != NULL) - h = sym->udata.p; + h = (struct bfd_link_hash_entry *) sym->udata.p; else if (bfd_is_und_section (bfd_get_section (sym))) h = bfd_wrapped_link_hash_lookup (output_bfd, info, bfd_asymbol_name (sym), @@ -2797,18 +2800,36 @@ default_indirect_link_order (bfd *output_bfd, } } - /* Get and relocate the section contents. */ - sec_size = (input_section->rawsize > input_section->size - ? input_section->rawsize - : input_section->size); - contents = bfd_malloc (sec_size); - if (contents == NULL && sec_size != 0) - goto error_return; - new_contents = (bfd_get_relocated_section_contents - (output_bfd, info, link_order, contents, info->relocatable, - _bfd_generic_link_get_symbols (input_bfd))); - if (!new_contents) - goto error_return; + if ((output_section->flags & (SEC_GROUP | SEC_LINKER_CREATED)) == SEC_GROUP + && input_section->size != 0) + { + /* Group section contents are set by bfd_elf_set_group_contents. */ + if (!output_bfd->output_has_begun) + { + /* FIXME: This hack ensures bfd_elf_set_group_contents is called. */ + if (!bfd_set_section_contents (output_bfd, output_section, "", 0, 1)) + goto error_return; + } + new_contents = output_section->contents; + BFD_ASSERT (new_contents != NULL); + BFD_ASSERT (input_section->output_offset == 0); + } + else + { + /* Get and relocate the section contents. */ + sec_size = (input_section->rawsize > input_section->size + ? input_section->rawsize + : input_section->size); + contents = (bfd_byte *) bfd_malloc (sec_size); + if (contents == NULL && sec_size != 0) + goto error_return; + new_contents = (bfd_get_relocated_section_contents + (output_bfd, info, link_order, contents, + info->relocatable, + _bfd_generic_link_get_symbols (input_bfd))); + if (!new_contents) + goto error_return; + } /* Output the section contents. */ loc = input_section->output_offset * bfd_octets_per_byte (output_bfd); @@ -2932,7 +2953,8 @@ bfd_section_already_linked_table_insert /* Allocate the memory from the same obstack as the hash table is kept in. */ - l = bfd_hash_allocate (&_bfd_section_already_linked_table, sizeof *l); + l = (struct bfd_section_already_linked *) + bfd_hash_allocate (&_bfd_section_already_linked_table, sizeof *l); if (l == NULL) return FALSE; l->sec = sec; @@ -2947,7 +2969,8 @@ already_linked_newfunc (struct bfd_hash_entry *entry ATTRIBUTE_UNUSED, const char *string ATTRIBUTE_UNUSED) { struct bfd_section_already_linked_hash_entry *ret = - bfd_hash_allocate (table, sizeof *ret); + (struct bfd_section_already_linked_hash_entry *) + bfd_hash_allocate (table, sizeof *ret); if (ret == NULL) return NULL; @@ -3078,7 +3101,7 @@ _bfd_generic_section_already_linked (bfd *abfd, asection *sec, /* This is the first section with this name. Record it. */ if (! bfd_section_already_linked_table_insert (already_linked_list, sec)) - info->callbacks->einfo (_("%F%P: already_linked_table: %E")); + info->callbacks->einfo (_("%F%P: already_linked_table: %E\n")); } /* Convert symbols in excluded output sections to use a kept section. */ @@ -3132,10 +3155,16 @@ fix_syms (struct bfd_link_hash_entry *h, void *data) else if (op == NULL) op = op1; else if (((op1->flags ^ op->flags) - & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0) + & (SEC_ALLOC | SEC_THREAD_LOCAL | SEC_LOAD)) != 0) { if (((op->flags ^ s->flags) - & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0) + & (SEC_ALLOC | SEC_THREAD_LOCAL)) != 0 + /* We prefer to choose a loaded section. Section S + doesn't have SEC_LOAD set (it being excluded, that + part of the flag processing didn't happen) so we + can't compare that flag to those of OP and OP1. */ + || ((op1->flags & SEC_LOAD) != 0 + && (op->flags & SEC_LOAD) == 0)) op = op1; } else if (((op1->flags ^ op->flags) & SEC_READONLY) != 0) @@ -3169,3 +3198,169 @@ _bfd_fix_excluded_sec_syms (bfd *obfd, struct bfd_link_info *info) { bfd_link_hash_traverse (info->hash, fix_syms, obfd); } + +/* +FUNCTION + bfd_generic_define_common_symbol + +SYNOPSIS + bfd_boolean bfd_generic_define_common_symbol + (bfd *output_bfd, struct bfd_link_info *info, + struct bfd_link_hash_entry *h); + +DESCRIPTION + Convert common symbol @var{h} into a defined symbol. + Return TRUE on success and FALSE on failure. + +.#define bfd_define_common_symbol(output_bfd, info, h) \ +. BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h)) +. +*/ + +bfd_boolean +bfd_generic_define_common_symbol (bfd *output_bfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct bfd_link_hash_entry *h) +{ + unsigned int power_of_two; + bfd_vma alignment, size; + asection *section; + + BFD_ASSERT (h != NULL && h->type == bfd_link_hash_common); + + size = h->u.c.size; + power_of_two = h->u.c.p->alignment_power; + section = h->u.c.p->section; + + /* Increase the size of the section to align the common symbol. + The alignment must be a power of two. */ + alignment = bfd_octets_per_byte (output_bfd) << power_of_two; + BFD_ASSERT (alignment != 0 && (alignment & -alignment) == alignment); + section->size += alignment - 1; + section->size &= -alignment; + + /* Adjust the section's overall alignment if necessary. */ + if (power_of_two > section->alignment_power) + section->alignment_power = power_of_two; + + /* Change the symbol from common to defined. */ + h->type = bfd_link_hash_defined; + h->u.def.section = section; + h->u.def.value = section->size; + + /* Increase the size of the section. */ + section->size += size; + + /* Make sure the section is allocated in memory, and make sure that + it is no longer a common section. */ + section->flags |= SEC_ALLOC; + section->flags &= ~SEC_IS_COMMON; + return TRUE; +} + +/* +FUNCTION + bfd_find_version_for_sym + +SYNOPSIS + struct bfd_elf_version_tree * bfd_find_version_for_sym + (struct bfd_elf_version_tree *verdefs, + const char *sym_name, bfd_boolean *hide); + +DESCRIPTION + Search an elf version script tree for symbol versioning + info and export / don't-export status for a given symbol. + Return non-NULL on success and NULL on failure; also sets + the output @samp{hide} boolean parameter. + +*/ + +struct bfd_elf_version_tree * +bfd_find_version_for_sym (struct bfd_elf_version_tree *verdefs, + const char *sym_name, + bfd_boolean *hide) +{ + struct bfd_elf_version_tree *t; + struct bfd_elf_version_tree *local_ver, *global_ver, *exist_ver; + struct bfd_elf_version_tree *star_local_ver, *star_global_ver; + + local_ver = NULL; + global_ver = NULL; + star_local_ver = NULL; + star_global_ver = NULL; + exist_ver = NULL; + for (t = verdefs; t != NULL; t = t->next) + { + if (t->globals.list != NULL) + { + struct bfd_elf_version_expr *d = NULL; + + while ((d = (*t->match) (&t->globals, d, sym_name)) != NULL) + { + if (d->literal || strcmp (d->pattern, "*") != 0) + global_ver = t; + else + star_global_ver = t; + if (d->symver) + exist_ver = t; + d->script = 1; + /* If the match is a wildcard pattern, keep looking for + a more explicit, perhaps even local, match. */ + if (d->literal) + break; + } + + if (d != NULL) + break; + } + + if (t->locals.list != NULL) + { + struct bfd_elf_version_expr *d = NULL; + + while ((d = (*t->match) (&t->locals, d, sym_name)) != NULL) + { + if (d->literal || strcmp (d->pattern, "*") != 0) + local_ver = t; + else + star_local_ver = t; + /* If the match is a wildcard pattern, keep looking for + a more explicit, perhaps even global, match. */ + if (d->literal) + { + /* An exact match overrides a global wildcard. */ + global_ver = NULL; + star_global_ver = NULL; + break; + } + } + + if (d != NULL) + break; + } + } + + if (global_ver == NULL && local_ver == NULL) + global_ver = star_global_ver; + + if (global_ver != NULL) + { + /* If we already have a versioned symbol that matches the + node for this symbol, then we don't want to create a + duplicate from the unversioned symbol. Instead hide the + unversioned symbol. */ + *hide = exist_ver == global_ver; + return global_ver; + } + + if (local_ver == NULL) + local_ver = star_local_ver; + + if (local_ver != NULL) + { + *hide = TRUE; + return local_ver; + } + + return NULL; +} diff --git a/bfd/lynx-core.c b/bfd/lynx-core.c index 46b37d3..a432566 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, 2006, 2007 + Copyright 1993, 1994, 1995, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Stu Grossman of Cygnus Support. diff --git a/bfd/m68k4knetbsd.c b/bfd/m68k4knetbsd.c index 6004b84..0722c3a 100644 --- a/bfd/m68k4knetbsd.c +++ b/bfd/m68k4knetbsd.c @@ -1,5 +1,5 @@ /* BFD back-end for NetBSD/m68k a.out-ish binaries. - Copyright 1990, 1991, 1992, 1995, 1998, 2001, 2003, 2007 + Copyright 1990, 1991, 1992, 1995, 1998, 2001, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/m68klinux.c b/bfd/m68klinux.c index 61445d0..403e4f3 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -350,9 +350,9 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, If we do, and the defining entry is from a shared library, we need to create the dynamic sections. - FIXME: What if abfd->xvec != info->hash->creator? We may want to - be able to link Linux a.out and ELF objects together, but serious - confusion is possible. */ + FIXME: What if abfd->xvec != info->output_bfd->xvec? We may + want to be able to link Linux a.out and ELF objects together, + but serious confusion is possible. */ insert = FALSE; @@ -360,7 +360,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, && linux_hash_table (info)->dynobj == NULL && strcmp (name, SHARABLE_CONFLICTS) == 0 && (flags & BSF_CONSTRUCTOR) != 0 - && abfd->xvec == info->hash->creator) + && abfd->xvec == info->output_bfd->xvec) { if (! linux_link_create_dynamic_sections (abfd, info)) return FALSE; @@ -369,7 +369,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, } if (bfd_is_abs_section (section) - && abfd->xvec == info->hash->creator) + && abfd->xvec == info->output_bfd->xvec) { h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE, FALSE, FALSE); diff --git a/bfd/m68knetbsd.c b/bfd/m68knetbsd.c index 59ad355..8ff0bdd 100644 --- a/bfd/m68knetbsd.c +++ b/bfd/m68knetbsd.c @@ -1,6 +1,6 @@ /* BFD back-end for NetBSD/m68k a.out-ish binaries. Copyright 1990, 1991, 1992, 1994, 1995, 1997, 1998, 2000, 2001, 2003, - 2007 Free Software Foundation, Inc. + 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/m88kmach3.c b/bfd/m88kmach3.c index db8cb43..2a0e2f4 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, 2007 + Copyright 1990, 1991, 1993, 1994, 1995, 2001, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/m88kopenbsd.c b/bfd/m88kopenbsd.c index fbdf378..8d9f033 100644 --- a/bfd/m88kopenbsd.c +++ b/bfd/m88kopenbsd.c @@ -1,5 +1,5 @@ /* BFD back-end for OpenBSD/m88k a.out binaries. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/mach-o-i386.c b/bfd/mach-o-i386.c new file mode 100644 index 0000000..53de64e --- /dev/null +++ b/bfd/mach-o-i386.c @@ -0,0 +1,293 @@ +/* Intel i386 Mach-O support for BFD. + Copyright 2009 + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "sysdep.h" +#include "mach-o.h" +#include "bfd.h" +#include "libbfd.h" +#include "libiberty.h" + +#define bfd_mach_o_object_p bfd_mach_o_i386_object_p +#define bfd_mach_o_core_p bfd_mach_o_i386_core_p +#define bfd_mach_o_mkobject bfd_mach_o_i386_mkobject + +static const bfd_target * +bfd_mach_o_i386_object_p (bfd *abfd) +{ + return bfd_mach_o_header_p (abfd, 0, BFD_MACH_O_CPU_TYPE_I386); +} + +static const bfd_target * +bfd_mach_o_i386_core_p (bfd *abfd) +{ + return bfd_mach_o_header_p (abfd, + BFD_MACH_O_MH_CORE, BFD_MACH_O_CPU_TYPE_I386); +} + +static bfd_boolean +bfd_mach_o_i386_mkobject (bfd *abfd) +{ + bfd_mach_o_data_struct *mdata; + + if (!bfd_mach_o_mkobject_init (abfd)) + return FALSE; + + mdata = bfd_mach_o_get_data (abfd); + mdata->header.magic = BFD_MACH_O_MH_MAGIC; + mdata->header.cputype = BFD_MACH_O_CPU_TYPE_I386; + mdata->header.cpusubtype = BFD_MACH_O_CPU_SUBTYPE_X86_ALL; + mdata->header.byteorder = BFD_ENDIAN_LITTLE; + mdata->header.version = 1; + + return TRUE; +} + +static reloc_howto_type i386_howto_table[]= +{ + HOWTO(BFD_RELOC_32, 0, 2, 32, FALSE, 0, + complain_overflow_bitfield, + NULL, "32", + FALSE, 0xffffffff, 0xffffffff, FALSE), + HOWTO(BFD_RELOC_16, 0, 1, 16, FALSE, 0, + complain_overflow_bitfield, + NULL, "16", + FALSE, 0xffff, 0xffff, FALSE), + HOWTO(BFD_RELOC_8, 0, 0, 8, FALSE, 0, + complain_overflow_bitfield, + NULL, "8", + FALSE, 0xff, 0xff, FALSE), + HOWTO(BFD_RELOC_32_PCREL, 0, 2, 32, TRUE, 0, + complain_overflow_bitfield, + NULL, "DISP32", + FALSE, 0xffffffff, 0xffffffff, TRUE), + HOWTO(BFD_RELOC_16_PCREL, 0, 1, 16, TRUE, 0, + complain_overflow_bitfield, + NULL, "DISP16", + FALSE, 0xffff, 0xffff, TRUE), + HOWTO(BFD_RELOC_MACH_O_SECTDIFF, 0, 2, 32, FALSE, 0, + complain_overflow_bitfield, + NULL, "SECTDIFF_32", + FALSE, 0xffffffff, 0xffffffff, FALSE), + HOWTO(BFD_RELOC_MACH_O_PAIR, 0, 2, 32, FALSE, 0, + complain_overflow_bitfield, + NULL, "PAIR_32", + FALSE, 0xffffffff, 0xffffffff, FALSE), +}; + +static bfd_boolean +bfd_mach_o_i386_swap_reloc_in (arelent *res, bfd_mach_o_reloc_info *reloc) +{ + if (reloc->r_scattered) + { + switch (reloc->r_type) + { + case BFD_MACH_O_GENERIC_RELOC_PAIR: + if (reloc->r_length != 2) + return FALSE; + res->howto = &i386_howto_table[6]; + res->address = res[-1].address; + return TRUE; + case BFD_MACH_O_GENERIC_RELOC_SECTDIFF: + case BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF: + if (reloc->r_length != 2) + return FALSE; + res->howto = &i386_howto_table[5]; + return TRUE; + default: + return FALSE; + } + } + else + { + switch (reloc->r_type) + { + case BFD_MACH_O_GENERIC_RELOC_VANILLA: + switch ((reloc->r_length << 1) | reloc->r_pcrel) + { + case 0: /* len = 0, pcrel = 0 */ + res->howto = &i386_howto_table[2]; + return TRUE; + case 2: /* len = 1, pcrel = 0 */ + res->howto = &i386_howto_table[1]; + return TRUE; + case 3: /* len = 1, pcrel = 1 */ + res->howto = &i386_howto_table[4]; + return TRUE; + case 4: /* len = 2, pcrel = 0 */ + res->howto = &i386_howto_table[0]; + return TRUE; + case 5: /* len = 2, pcrel = 1 */ + res->howto = &i386_howto_table[3]; + return TRUE; + default: + return FALSE; + } + break; + default: + return FALSE; + } + } +} + +static bfd_boolean +bfd_mach_o_i386_swap_reloc_out (arelent *rel, bfd_mach_o_reloc_info *rinfo) +{ + rinfo->r_address = rel->address; + switch (rel->howto->type) + { + case BFD_RELOC_32: + case BFD_RELOC_32_PCREL: + case BFD_RELOC_16: + case BFD_RELOC_16_PCREL: + case BFD_RELOC_8: + rinfo->r_scattered = 0; + rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_VANILLA; + rinfo->r_pcrel = rel->howto->pc_relative; + rinfo->r_length = rel->howto->size; /* Correct in practice. */ + if ((*rel->sym_ptr_ptr)->flags & BSF_SECTION_SYM) + { + rinfo->r_extern = 0; + rinfo->r_value = (*rel->sym_ptr_ptr)->section->target_index; + } + else + { + rinfo->r_extern = 1; + rinfo->r_value = (*rel->sym_ptr_ptr)->udata.i; + } + break; + case BFD_RELOC_MACH_O_SECTDIFF: + rinfo->r_scattered = 1; + rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_SECTDIFF; + rinfo->r_pcrel = 0; + rinfo->r_length = 2; + rinfo->r_extern = 0; + rinfo->r_value = (*rel->sym_ptr_ptr)->value + + (*rel->sym_ptr_ptr)->section->vma; + break; + case BFD_RELOC_MACH_O_PAIR: + rinfo->r_address = 0; + rinfo->r_scattered = 1; + rinfo->r_type = BFD_MACH_O_GENERIC_RELOC_PAIR; + rinfo->r_pcrel = 0; + rinfo->r_length = 2; + rinfo->r_extern = 0; + rinfo->r_value = (*rel->sym_ptr_ptr)->value + + (*rel->sym_ptr_ptr)->section->vma; + break; + default: + return FALSE; + } + return TRUE; +} + +static reloc_howto_type * +bfd_mach_o_i386_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED, + bfd_reloc_code_real_type code) +{ + unsigned int i; + + for (i = 0; i < sizeof (i386_howto_table) / sizeof (*i386_howto_table); i++) + if (code == i386_howto_table[i].type) + return &i386_howto_table[i]; + return NULL; +} + +static reloc_howto_type * +bfd_mach_o_i386_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, + const char *name ATTRIBUTE_UNUSED) +{ + return NULL; +} + +static bfd_boolean +bfd_mach_o_i386_print_thread (bfd *abfd, bfd_mach_o_thread_flavour *thread, + void *vfile, char *buf) +{ + FILE *file = (FILE *)vfile; + + switch (thread->flavour) + { + case BFD_MACH_O_x86_THREAD_STATE: + if (thread->size < (8 + 16 * 4)) + return FALSE; + fprintf (file, " x86_THREAD_STATE:\n"); + fprintf (file, " flavor: 0x%08lx count: 0x%08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 0), + (unsigned long)bfd_get_32 (abfd, buf + 4)); + fprintf (file, " eax: %08lx ebx: %08lx ecx: %08lx edx: %08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 8), + (unsigned long)bfd_get_32 (abfd, buf + 12), + (unsigned long)bfd_get_32 (abfd, buf + 16), + (unsigned long)bfd_get_32 (abfd, buf + 20)); + fprintf (file, " edi: %08lx esi: %08lx ebp: %08lx esp: %08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 24), + (unsigned long)bfd_get_32 (abfd, buf + 28), + (unsigned long)bfd_get_32 (abfd, buf + 32), + (unsigned long)bfd_get_32 (abfd, buf + 36)); + fprintf (file, " ss: %08lx flg: %08lx eip: %08lx cs: %08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 40), + (unsigned long)bfd_get_32 (abfd, buf + 44), + (unsigned long)bfd_get_32 (abfd, buf + 48), + (unsigned long)bfd_get_32 (abfd, buf + 52)); + fprintf (file, " ds: %08lx es: %08lx fs: %08lx gs: %08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 56), + (unsigned long)bfd_get_32 (abfd, buf + 60), + (unsigned long)bfd_get_32 (abfd, buf + 64), + (unsigned long)bfd_get_32 (abfd, buf + 68)); + return TRUE; + case BFD_MACH_O_x86_FLOAT_STATE: + if (thread->size < 8) + return FALSE; + fprintf (file, " x86_FLOAT_STATE:\n"); + fprintf (file, " flavor: 0x%08lx count: 0x%08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 0), + (unsigned long)bfd_get_32 (abfd, buf + 4)); + return TRUE; + case BFD_MACH_O_x86_EXCEPTION_STATE: + if (thread->size < 8 + 3 * 4) + return FALSE; + fprintf (file, " x86_EXCEPTION_STATE:\n"); + fprintf (file, " flavor: 0x%08lx count: 0x%08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 0), + (unsigned long)bfd_get_32 (abfd, buf + 4)); + fprintf (file, " trapno: %08lx err: %08lx faultaddr: %08lx\n", + (unsigned long)bfd_get_32 (abfd, buf + 8), + (unsigned long)bfd_get_32 (abfd, buf + 12), + (unsigned long)bfd_get_32 (abfd, buf + 16)); + return TRUE; + default: + break; + } + return FALSE; +} + +#define bfd_mach_o_swap_reloc_in bfd_mach_o_i386_swap_reloc_in +#define bfd_mach_o_swap_reloc_out bfd_mach_o_i386_swap_reloc_out +#define bfd_mach_o_print_thread bfd_mach_o_i386_print_thread + +#define bfd_mach_o_bfd_reloc_type_lookup bfd_mach_o_i386_bfd_reloc_type_lookup +#define bfd_mach_o_bfd_reloc_name_lookup bfd_mach_o_i386_bfd_reloc_name_lookup + +#define TARGET_NAME mach_o_i386_vec +#define TARGET_STRING "mach-o-i386" +#define TARGET_BIG_ENDIAN 0 +#define TARGET_ARCHIVE 0 +#include "mach-o-target.c" diff --git a/bfd/mach-o-target.c b/bfd/mach-o-target.c index fd4d1e1..5ea9412 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, 2007 + Copyright 1999, 2000, 2001, 2002, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -19,6 +19,63 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* Define generic entry points here so that we don't need to duplicate the + defines in every target. But define once as this file may be included + several times. */ +#ifndef MACH_O_TARGET_COMMON_DEFINED +#define MACH_O_TARGET_COMMON_DEFINED + +#define bfd_mach_o_mkarchive _bfd_noarchive_mkarchive +#define bfd_mach_o_read_ar_hdr _bfd_noarchive_read_ar_hdr +#define bfd_mach_o_slurp_armap _bfd_noarchive_slurp_armap +#define bfd_mach_o_slurp_extended_name_table _bfd_noarchive_slurp_extended_name_table +#define bfd_mach_o_construct_extended_name_table _bfd_noarchive_construct_extended_name_table +#define bfd_mach_o_truncate_arname _bfd_noarchive_truncate_arname +#define bfd_mach_o_write_armap _bfd_noarchive_write_armap +#define bfd_mach_o_get_elt_at_index _bfd_noarchive_get_elt_at_index +#define bfd_mach_o_generic_stat_arch_elt _bfd_noarchive_generic_stat_arch_elt +#define bfd_mach_o_update_armap_timestamp _bfd_noarchive_update_armap_timestamp +#define bfd_mach_o_close_and_cleanup _bfd_generic_close_and_cleanup +#define bfd_mach_o_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define bfd_mach_o_new_section_hook _bfd_generic_new_section_hook +#define bfd_mach_o_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_mach_o_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) +#define bfd_mach_o_bfd_is_local_label_name bfd_generic_is_local_label_name +#define bfd_mach_o_get_lineno _bfd_nosymbols_get_lineno +#define bfd_mach_o_find_nearest_line _bfd_nosymbols_find_nearest_line +#define bfd_mach_o_find_inliner_info _bfd_nosymbols_find_inliner_info +#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_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 +#define bfd_mach_o_bfd_link_hash_table_free _bfd_generic_link_hash_table_free +#define bfd_mach_o_bfd_link_add_symbols _bfd_generic_link_add_symbols +#define bfd_mach_o_bfd_link_just_syms _bfd_generic_link_just_syms +#define bfd_mach_o_bfd_final_link _bfd_generic_final_link +#define bfd_mach_o_bfd_link_split_section _bfd_generic_link_split_section +#define bfd_mach_o_set_arch_mach bfd_default_set_arch_mach +#define bfd_mach_o_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data +#define bfd_mach_o_bfd_set_private_flags _bfd_generic_bfd_set_private_flags +#define bfd_mach_o_get_section_contents _bfd_generic_get_section_contents +#define bfd_mach_o_bfd_gc_sections bfd_generic_gc_sections +#define bfd_mach_o_bfd_merge_sections bfd_generic_merge_sections +#define bfd_mach_o_bfd_is_group_section bfd_generic_is_group_section +#define bfd_mach_o_bfd_discard_group bfd_generic_discard_group +#define bfd_mach_o_section_already_linked _bfd_generic_section_already_linked +#define bfd_mach_o_bfd_define_common_symbol bfd_generic_define_common_symbol +#define bfd_mach_o_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data +#define bfd_mach_o_core_file_matches_executable_p generic_core_file_matches_executable_p + +#define bfd_mach_o_get_dynamic_symtab_upper_bound bfd_mach_o_get_symtab_upper_bound +#define bfd_mach_o_canonicalize_dynamic_symtab bfd_mach_o_canonicalize_symtab +#define bfd_mach_o_get_synthetic_symtab _bfd_nodynamic_get_synthetic_symtab + +#define TARGET_NAME_BACKEND XCONCAT2(TARGET_NAME,_backend) + +#endif /* MACH_O_TARGET_COMMON_DEFINED */ + #ifndef TARGET_NAME #error TARGET_NAME must be defined #endif /* TARGET_NAME */ @@ -39,6 +96,13 @@ #error Mach-O fat files must always be big-endian. #endif /* ((TARGET_ARCHIVE) && (! TARGET_BIG_ENDIAN)) */ +static const bfd_mach_o_backend_data TARGET_NAME_BACKEND = +{ + bfd_mach_o_swap_reloc_in, + bfd_mach_o_swap_reloc_out, + bfd_mach_o_print_thread +}; + const bfd_target TARGET_NAME = { TARGET_STRING, /* Name. */ @@ -84,35 +148,41 @@ const bfd_target TARGET_NAME = #else _bfd_dummy_target, bfd_mach_o_object_p, - _bfd_dummy_target, + bfd_generic_archive_p, bfd_mach_o_core_p #endif }, { /* bfd_set_format. */ bfd_false, bfd_mach_o_mkobject, - bfd_false, + _bfd_generic_mkarchive, bfd_mach_o_mkobject, }, { /* bfd_write_contents. */ bfd_false, bfd_mach_o_write_contents, - bfd_false, + _bfd_write_archive_contents, bfd_mach_o_write_contents, }, BFD_JUMP_TABLE_GENERIC (bfd_mach_o), BFD_JUMP_TABLE_COPY (bfd_mach_o), BFD_JUMP_TABLE_CORE (bfd_mach_o), +#if TARGET_ARCHIVE BFD_JUMP_TABLE_ARCHIVE (bfd_mach_o), +#else + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd), +#endif BFD_JUMP_TABLE_SYMBOLS (bfd_mach_o), - BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), + BFD_JUMP_TABLE_RELOCS (bfd_mach_o), BFD_JUMP_TABLE_WRITE (bfd_mach_o), BFD_JUMP_TABLE_LINK (bfd_mach_o), - BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + BFD_JUMP_TABLE_DYNAMIC (bfd_mach_o), + /* Alternative endian target. */ NULL, - NULL + /* Back-end data. */ + &TARGET_NAME_BACKEND }; diff --git a/bfd/mach-o.c b/bfd/mach-o.c index 5ca5816..d1d6e70 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, 2006, 2007 + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -24,104 +24,240 @@ #include "bfd.h" #include "libbfd.h" #include "libiberty.h" +#include "aout/stab_gnu.h" #include -#ifndef BFD_IO_FUNCS -#define BFD_IO_FUNCS 0 -#endif - -#define bfd_mach_o_mkarchive _bfd_noarchive_mkarchive -#define bfd_mach_o_read_ar_hdr _bfd_noarchive_read_ar_hdr -#define bfd_mach_o_slurp_armap _bfd_noarchive_slurp_armap -#define bfd_mach_o_slurp_extended_name_table _bfd_noarchive_slurp_extended_name_table -#define bfd_mach_o_construct_extended_name_table _bfd_noarchive_construct_extended_name_table -#define bfd_mach_o_truncate_arname _bfd_noarchive_truncate_arname -#define bfd_mach_o_write_armap _bfd_noarchive_write_armap -#define bfd_mach_o_get_elt_at_index _bfd_noarchive_get_elt_at_index -#define bfd_mach_o_generic_stat_arch_elt _bfd_noarchive_generic_stat_arch_elt -#define bfd_mach_o_update_armap_timestamp _bfd_noarchive_update_armap_timestamp -#define bfd_mach_o_close_and_cleanup _bfd_generic_close_and_cleanup -#define bfd_mach_o_bfd_free_cached_info _bfd_generic_bfd_free_cached_info -#define bfd_mach_o_new_section_hook _bfd_generic_new_section_hook -#define bfd_mach_o_get_section_contents_in_window _bfd_generic_get_section_contents_in_window -#define bfd_mach_o_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name -#define bfd_mach_o_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) -#define bfd_mach_o_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name -#define bfd_mach_o_get_lineno _bfd_nosymbols_get_lineno -#define bfd_mach_o_find_nearest_line _bfd_nosymbols_find_nearest_line -#define bfd_mach_o_find_inliner_info _bfd_nosymbols_find_inliner_info -#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_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 -#define bfd_mach_o_bfd_link_hash_table_free _bfd_generic_link_hash_table_free -#define bfd_mach_o_bfd_link_add_symbols _bfd_generic_link_add_symbols -#define bfd_mach_o_bfd_link_just_syms _bfd_generic_link_just_syms -#define bfd_mach_o_bfd_final_link _bfd_generic_final_link -#define bfd_mach_o_bfd_link_split_section _bfd_generic_link_split_section -#define bfd_mach_o_set_arch_mach bfd_default_set_arch_mach -#define bfd_mach_o_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data -#define bfd_mach_o_bfd_set_private_flags _bfd_generic_bfd_set_private_flags -#define bfd_mach_o_bfd_print_private_bfd_data _bfd_generic_bfd_print_private_bfd_data -#define bfd_mach_o_get_section_contents _bfd_generic_get_section_contents -#define bfd_mach_o_set_section_contents _bfd_generic_set_section_contents -#define bfd_mach_o_bfd_gc_sections bfd_generic_gc_sections -#define bfd_mach_o_bfd_merge_sections bfd_generic_merge_sections -#define bfd_mach_o_bfd_is_group_section bfd_generic_is_group_section -#define bfd_mach_o_bfd_discard_group bfd_generic_discard_group -#define bfd_mach_o_section_already_linked _bfd_generic_section_already_linked -#define bfd_mach_o_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data -#define bfd_mach_o_core_file_matches_executable_p generic_core_file_matches_executable_p - - -/* The flags field of a section structure is separated into two parts a section - type and section attributes. The section types are mutually exclusive (it - can only have one type) but the section attributes are not (it may have more - than one attribute). */ - -#define SECTION_TYPE 0x000000ff /* 256 section types. */ -#define SECTION_ATTRIBUTES 0xffffff00 /* 24 section attributes. */ - -/* Constants for the section attributes part of the flags field of a section - structure. */ - -#define SECTION_ATTRIBUTES_USR 0xff000000 /* User-settable attributes. */ -#define S_ATTR_PURE_INSTRUCTIONS 0x80000000 /* Section contains only true machine instructions. */ -#define SECTION_ATTRIBUTES_SYS 0x00ffff00 /* System setable attributes. */ -#define S_ATTR_SOME_INSTRUCTIONS 0x00000400 /* Section contains some machine instructions. */ -#define S_ATTR_EXT_RELOC 0x00000200 /* Section has external relocation entries. */ -#define S_ATTR_LOC_RELOC 0x00000100 /* Section has local relocation entries. */ - -#define N_STAB 0xe0 -#define N_TYPE 0x1e -#define N_EXT 0x01 -#define N_UNDF 0x0 -#define N_ABS 0x2 -#define N_SECT 0xe -#define N_INDR 0xa +#define bfd_mach_o_object_p bfd_mach_o_gen_object_p +#define bfd_mach_o_core_p bfd_mach_o_gen_core_p +#define bfd_mach_o_mkobject bfd_false + +#define FILE_ALIGN(off, algn) \ + (((off) + ((file_ptr) 1 << (algn)) - 1) & ((file_ptr) -1 << (algn))) + +static int bfd_mach_o_scan_read_symtab_symbols (bfd *); + +unsigned int +bfd_mach_o_version (bfd *abfd) +{ + bfd_mach_o_data_struct *mdata = NULL; + + BFD_ASSERT (bfd_mach_o_valid (abfd)); + mdata = bfd_mach_o_get_data (abfd); + + return mdata->header.version; +} bfd_boolean bfd_mach_o_valid (bfd *abfd) { if (abfd == NULL || abfd->xvec == NULL) - return 0; + return FALSE; - if (! ((abfd->xvec == &mach_o_be_vec) - || (abfd->xvec == &mach_o_le_vec) - || (abfd->xvec == &mach_o_fat_vec))) - return 0; + if (abfd->xvec->flavour != bfd_target_mach_o_flavour) + return FALSE; - if (abfd->tdata.mach_o_data == NULL) - return 0; - return 1; + if (bfd_mach_o_get_data (abfd) == NULL) + return FALSE; + return TRUE; +} + +static INLINE bfd_boolean +mach_o_wide_p (bfd_mach_o_header *header) +{ + switch (header->version) + { + case 1: + return FALSE; + case 2: + return TRUE; + default: + BFD_FAIL (); + return FALSE; + } +} + +static INLINE bfd_boolean +bfd_mach_o_wide_p (bfd *abfd) +{ + return mach_o_wide_p (&bfd_mach_o_get_data (abfd)->header); +} + +/* Tables to translate well known Mach-O segment/section names to bfd + names. Use of canonical names (such as .text or .debug_frame) is required + by gdb. */ + +struct mach_o_section_name_xlat +{ + const char *bfd_name; + const char *mach_o_name; +}; + +static const struct mach_o_section_name_xlat dwarf_section_names_xlat[] = + { + { ".debug_frame", "__debug_frame" }, + { ".debug_info", "__debug_info" }, + { ".debug_abbrev", "__debug_abbrev" }, + { ".debug_aranges", "__debug_aranges" }, + { ".debug_macinfo", "__debug_macinfo" }, + { ".debug_line", "__debug_line" }, + { ".debug_loc", "__debug_loc" }, + { ".debug_pubnames", "__debug_pubnames" }, + { ".debug_pubtypes", "__debug_pubtypes" }, + { ".debug_str", "__debug_str" }, + { ".debug_ranges", "__debug_ranges" }, + { NULL, NULL} + }; + +static const struct mach_o_section_name_xlat text_section_names_xlat[] = + { + { ".text", "__text" }, + { ".const", "__const" }, + { ".cstring", "__cstring" }, + { ".eh_frame", "__eh_frame" }, + { NULL, NULL} + }; + +static const struct mach_o_section_name_xlat data_section_names_xlat[] = + { + { ".data", "__data" }, + { ".bss", "__bss" }, + { NULL, NULL} + }; + +struct mach_o_segment_name_xlat +{ + const char *segname; + const struct mach_o_section_name_xlat *sections; +}; + +static const struct mach_o_segment_name_xlat segsec_names_xlat[] = + { + { "__DWARF", dwarf_section_names_xlat }, + { "__TEXT", text_section_names_xlat }, + { "__DATA", data_section_names_xlat }, + { NULL, NULL } + }; + + +/* Mach-O to bfd names. */ + +static char * +bfd_mach_o_convert_section_name_to_bfd (bfd *abfd, bfd_mach_o_section *section) +{ + const struct mach_o_segment_name_xlat *seg; + char *res; + unsigned int len; + const char *pfx = ""; + + for (seg = segsec_names_xlat; seg->segname; seg++) + { + if (strcmp (seg->segname, section->segname) == 0) + { + const struct mach_o_section_name_xlat *sec; + + for (sec = seg->sections; sec->mach_o_name; sec++) + { + if (strcmp (sec->mach_o_name, section->sectname) == 0) + { + len = strlen (sec->bfd_name); + res = bfd_alloc (abfd, len + 1); + + if (res == NULL) + return NULL; + strcpy (res, sec->bfd_name); + return res; + } + } + } + } + + len = strlen (section->segname) + 1 + + strlen (section->sectname) + 1; + + /* Put "LC_SEGMENT." prefix if the segment name is weird (ie doesn't start + with an underscore. */ + if (section->segname[0] != '_') + { + static const char seg_pfx[] = "LC_SEGMENT."; + + pfx = seg_pfx; + len += sizeof (seg_pfx) - 1; + } + + res = bfd_alloc (abfd, len); + if (res == NULL) + return NULL; + snprintf (res, len, "%s%s.%s", pfx, section->segname, section->sectname); + return res; +} + +/* Convert a bfd section name to a Mach-O segment + section name. */ + +static void +bfd_mach_o_convert_section_name_to_mach_o (bfd *abfd ATTRIBUTE_UNUSED, + asection *sect, + bfd_mach_o_section *section) +{ + const struct mach_o_segment_name_xlat *seg; + const char *name = bfd_get_section_name (abfd, sect); + const char *dot; + unsigned int len; + unsigned int seglen; + unsigned int seclen; + + /* List of well known names. They all start with a dot. */ + if (name[0] == '.') + for (seg = segsec_names_xlat; seg->segname; seg++) + { + const struct mach_o_section_name_xlat *sec; + + for (sec = seg->sections; sec->mach_o_name; sec++) + { + if (strcmp (sec->bfd_name, name) == 0) + { + strcpy (section->segname, seg->segname); + strcpy (section->sectname, sec->mach_o_name); + return; + } + } + } + + /* Strip LC_SEGMENT. prefix. */ + if (strncmp (name, "LC_SEGMENT.", 11) == 0) + name += 11; + + /* Find a dot. */ + dot = strchr (name, '.'); + len = strlen (name); + + /* Try to split name into segment and section names. */ + if (dot && dot != name) + { + seglen = dot - name; + seclen = len - (dot + 1 - name); + + if (seglen < 16 && seclen < 16) + { + memcpy (section->segname, name, seglen); + section->segname[seglen] = 0; + memcpy (section->sectname, dot + 1, seclen); + section->sectname[seclen] = 0; + return; + } + } + + if (len > 16) + len = 16; + memcpy (section->segname, name, len); + section->segname[len] = 0; + memcpy (section->sectname, name, len); + section->sectname[len] = 0; } /* Copy any private info we understand from the input symbol to the output symbol. */ -static bfd_boolean +bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED, asymbol *isymbol ATTRIBUTE_UNUSED, bfd *obfd ATTRIBUTE_UNUSED, @@ -133,7 +269,7 @@ bfd_mach_o_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED, /* Copy any private info we understand from the input section to the output section. */ -static bfd_boolean +bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED, asection *isection ATTRIBUTE_UNUSED, bfd *obfd ATTRIBUTE_UNUSED, @@ -145,87 +281,70 @@ bfd_mach_o_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED, /* Copy any private info we understand from the input bfd to the output bfd. */ -static bfd_boolean +bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd) { + if (bfd_get_flavour (ibfd) != bfd_target_mach_o_flavour + || bfd_get_flavour (obfd) != bfd_target_mach_o_flavour) + return TRUE; + BFD_ASSERT (bfd_mach_o_valid (ibfd)); BFD_ASSERT (bfd_mach_o_valid (obfd)); - obfd->tdata.mach_o_data = ibfd->tdata.mach_o_data; - obfd->tdata.mach_o_data->ibfd = ibfd; + /* FIXME: copy commands. */ + return TRUE; } +/* Count the total number of symbols. */ + static long bfd_mach_o_count_symbols (bfd *abfd) { - bfd_mach_o_data_struct *mdata = NULL; - long nsyms = 0; - unsigned long i; - - BFD_ASSERT (bfd_mach_o_valid (abfd)); - mdata = abfd->tdata.mach_o_data; - - for (i = 0; i < mdata->header.ncmds; i++) - if (mdata->commands[i].type == BFD_MACH_O_LC_SYMTAB) - { - bfd_mach_o_symtab_command *sym = &mdata->commands[i].command.symtab; - nsyms += sym->nsyms; - } + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); - return nsyms; + if (mdata->symtab == NULL) + return 0; + return mdata->symtab->nsyms; } -static long +long bfd_mach_o_get_symtab_upper_bound (bfd *abfd) { long nsyms = bfd_mach_o_count_symbols (abfd); - if (nsyms < 0) - return nsyms; - return ((nsyms + 1) * sizeof (asymbol *)); } -static long +long bfd_mach_o_canonicalize_symtab (bfd *abfd, asymbol **alocation) { - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); long nsyms = bfd_mach_o_count_symbols (abfd); - asymbol **csym = alocation; - unsigned long i, j; + bfd_mach_o_symtab_command *sym = mdata->symtab; + unsigned long j; if (nsyms < 0) return nsyms; - for (i = 0; i < mdata->header.ncmds; i++) + if (bfd_mach_o_scan_read_symtab_symbols (abfd) != 0) { - if (mdata->commands[i].type == BFD_MACH_O_LC_SYMTAB) - { - bfd_mach_o_symtab_command *sym = &mdata->commands[i].command.symtab; - - if (bfd_mach_o_scan_read_symtab_symbols (abfd, &mdata->commands[i].command.symtab) != 0) - { - fprintf (stderr, "bfd_mach_o_canonicalize_symtab: unable to load symbols for section %lu\n", i); - return 0; - } + fprintf (stderr, + "bfd_mach_o_canonicalize_symtab: unable to load symbols\n"); + return 0; + } - BFD_ASSERT (sym->symbols != NULL); + BFD_ASSERT (sym->symbols != NULL); - for (j = 0; j < sym->nsyms; j++) - { - BFD_ASSERT (csym < (alocation + nsyms)); - *csym++ = &sym->symbols[j]; - } - } - } + for (j = 0; j < sym->nsyms; j++) + alocation[j] = &sym->symbols[j].symbol; - *csym++ = NULL; + alocation[j] = NULL; return nsyms; } -static void +void bfd_mach_o_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, asymbol *symbol, symbol_info *ret) @@ -233,13 +352,15 @@ bfd_mach_o_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, bfd_symbol_info (symbol, ret); } -static void +void bfd_mach_o_print_symbol (bfd *abfd, PTR afile, asymbol *symbol, bfd_print_symbol_type how) { FILE *file = (FILE *) afile; + const char *name; + bfd_mach_o_asymbol *asym = (bfd_mach_o_asymbol *)symbol; switch (how) { @@ -248,7 +369,38 @@ bfd_mach_o_print_symbol (bfd *abfd, break; default: bfd_print_symbol_vandf (abfd, (PTR) file, symbol); - fprintf (file, " %-5s %s", symbol->section->name, symbol->name); + if (asym->n_type & BFD_MACH_O_N_STAB) + name = bfd_get_stab_name (asym->n_type); + else + switch (asym->n_type & BFD_MACH_O_N_TYPE) + { + case BFD_MACH_O_N_UNDF: + name = "UND"; + break; + case BFD_MACH_O_N_ABS: + name = "ABS"; + break; + case BFD_MACH_O_N_INDR: + name = "INDR"; + break; + case BFD_MACH_O_N_PBUD: + name = "PBUD"; + break; + case BFD_MACH_O_N_SECT: + name = "SECT"; + break; + default: + name = "???"; + break; + } + if (name == NULL) + name = ""; + fprintf (file, " %02x %-6s %02x %04x", + asym->n_type, name, asym->n_sect, asym->n_desc); + if ((asym->n_type & BFD_MACH_O_N_STAB) == 0 + && (asym->n_type & BFD_MACH_O_N_TYPE) == BFD_MACH_O_N_SECT) + fprintf (file, " %-5s", symbol->section->name); + fprintf (file, " %s", symbol->name); } } @@ -264,32 +416,47 @@ bfd_mach_o_convert_architecture (bfd_mach_o_cpu_type mtype, { case BFD_MACH_O_CPU_TYPE_VAX: *type = bfd_arch_vax; break; case BFD_MACH_O_CPU_TYPE_MC680x0: *type = bfd_arch_m68k; break; - case BFD_MACH_O_CPU_TYPE_I386: *type = bfd_arch_i386; break; + case BFD_MACH_O_CPU_TYPE_I386: + *type = bfd_arch_i386; + *subtype = bfd_mach_i386_i386; + break; + case BFD_MACH_O_CPU_TYPE_X86_64: + *type = bfd_arch_i386; + *subtype = bfd_mach_x86_64; + break; case BFD_MACH_O_CPU_TYPE_MIPS: *type = bfd_arch_mips; break; case BFD_MACH_O_CPU_TYPE_MC98000: *type = bfd_arch_m98k; break; case BFD_MACH_O_CPU_TYPE_HPPA: *type = bfd_arch_hppa; break; case BFD_MACH_O_CPU_TYPE_ARM: *type = bfd_arch_arm; break; case BFD_MACH_O_CPU_TYPE_MC88000: *type = bfd_arch_m88k; break; - case BFD_MACH_O_CPU_TYPE_SPARC: *type = bfd_arch_sparc; break; + case BFD_MACH_O_CPU_TYPE_SPARC: + *type = bfd_arch_sparc; + *subtype = bfd_mach_sparc; + break; case BFD_MACH_O_CPU_TYPE_I860: *type = bfd_arch_i860; break; case BFD_MACH_O_CPU_TYPE_ALPHA: *type = bfd_arch_alpha; break; - case BFD_MACH_O_CPU_TYPE_POWERPC: *type = bfd_arch_powerpc; break; - default: *type = bfd_arch_unknown; break; - } - - switch (*type) - { - case bfd_arch_i386: *subtype = bfd_mach_i386_i386; break; - case bfd_arch_sparc: *subtype = bfd_mach_sparc; break; + case BFD_MACH_O_CPU_TYPE_POWERPC: + *type = bfd_arch_powerpc; + *subtype = bfd_mach_ppc; + break; + case BFD_MACH_O_CPU_TYPE_POWERPC_64: + *type = bfd_arch_powerpc; + *subtype = bfd_mach_ppc64; + break; default: - *subtype = bfd_arch_unknown; + *type = bfd_arch_unknown; + break; } } -static int +static bfd_boolean bfd_mach_o_write_header (bfd *abfd, bfd_mach_o_header *header) { - unsigned char buf[28]; + unsigned char buf[32]; + unsigned int size; + + size = mach_o_wide_p (header) ? + BFD_MACH_O_HEADER_64_SIZE : BFD_MACH_O_HEADER_SIZE; bfd_h_put_32 (abfd, header->magic, buf + 0); bfd_h_put_32 (abfd, header->cputype, buf + 4); @@ -299,21 +466,23 @@ bfd_mach_o_write_header (bfd *abfd, bfd_mach_o_header *header) bfd_h_put_32 (abfd, header->sizeofcmds, buf + 20); bfd_h_put_32 (abfd, header->flags, buf + 24); - bfd_seek (abfd, 0, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 28, abfd) != 28) - return -1; + if (mach_o_wide_p (header)) + bfd_h_put_32 (abfd, header->reserved, buf + 28); - return 0; + if (bfd_seek (abfd, 0, SEEK_SET) != 0 + || bfd_bwrite ((PTR) buf, size, abfd) != size) + return FALSE; + + return TRUE; } static int -bfd_mach_o_scan_write_thread (bfd *abfd, - bfd_mach_o_load_command *command) +bfd_mach_o_scan_write_thread (bfd *abfd, bfd_mach_o_load_command *command) { bfd_mach_o_thread_command *cmd = &command->command.thread; unsigned int i; unsigned char buf[8]; - bfd_vma offset; + unsigned int offset; unsigned int nflavours; BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD) @@ -329,8 +498,8 @@ bfd_mach_o_scan_write_thread (bfd *abfd, bfd_h_put_32 (abfd, cmd->flavours[i].flavour, buf); bfd_h_put_32 (abfd, (cmd->flavours[i].size / 4), buf + 4); - bfd_seek (abfd, command->offset + offset, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 8, abfd) != 8) + if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0 + || bfd_bwrite ((PTR) buf, 8, abfd) != 8) return -1; offset += cmd->flavours[i].size + 8; @@ -339,12 +508,273 @@ bfd_mach_o_scan_write_thread (bfd *abfd, return 0; } +long +bfd_mach_o_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, + asection *asect) +{ + return (asect->reloc_count + 1) * sizeof (arelent *); +} + static int -bfd_mach_o_scan_write_section (bfd *abfd, - bfd_mach_o_section *section, - bfd_vma offset) +bfd_mach_o_canonicalize_one_reloc (bfd *abfd, char *buf, + arelent *res, asymbol **syms) { - unsigned char buf[68]; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd); + bfd_mach_o_reloc_info reloc; + bfd_vma addr; + bfd_vma symnum; + asymbol **sym; + + addr = bfd_get_32 (abfd, buf + 0); + symnum = bfd_get_32 (abfd, buf + 4); + + if (addr & BFD_MACH_O_SR_SCATTERED) + { + unsigned int j; + + /* Scattered relocation. + Extract section and offset from r_value. */ + res->sym_ptr_ptr = NULL; + res->addend = 0; + for (j = 0; j < mdata->nsects; j++) + { + bfd_mach_o_section *sect = mdata->sections[j]; + if (symnum >= sect->addr && symnum < sect->addr + sect->size) + { + res->sym_ptr_ptr = sect->bfdsection->symbol_ptr_ptr; + res->addend = symnum - sect->addr; + break; + } + } + res->address = BFD_MACH_O_GET_SR_ADDRESS (addr); + reloc.r_type = BFD_MACH_O_GET_SR_TYPE (addr); + reloc.r_length = BFD_MACH_O_GET_SR_LENGTH (addr); + reloc.r_pcrel = addr & BFD_MACH_O_SR_PCREL; + reloc.r_scattered = 1; + } + else + { + unsigned int num = BFD_MACH_O_GET_R_SYMBOLNUM (symnum); + res->addend = 0; + res->address = addr; + if (symnum & BFD_MACH_O_R_EXTERN) + sym = syms + num; + else + { + BFD_ASSERT (num != 0); + BFD_ASSERT (num <= mdata->nsects); + sym = mdata->sections[num - 1]->bfdsection->symbol_ptr_ptr; + } + res->sym_ptr_ptr = sym; + reloc.r_type = BFD_MACH_O_GET_R_TYPE (symnum); + reloc.r_length = BFD_MACH_O_GET_R_LENGTH (symnum); + reloc.r_pcrel = (symnum & BFD_MACH_O_R_PCREL) ? 1 : 0; + reloc.r_scattered = 0; + } + + if (!(*bed->_bfd_mach_o_swap_reloc_in)(res, &reloc)) + return -1; + return 0; +} + +static int +bfd_mach_o_canonicalize_relocs (bfd *abfd, unsigned long filepos, + unsigned long count, + arelent *res, asymbol **syms) +{ + unsigned long i; + char *native_relocs; + bfd_size_type native_size; + + /* Allocate and read relocs. */ + native_size = count * BFD_MACH_O_RELENT_SIZE; + native_relocs = bfd_malloc (native_size); + if (native_relocs == NULL) + return -1; + + if (bfd_seek (abfd, filepos, SEEK_SET) != 0 + || bfd_bread (native_relocs, native_size, abfd) != native_size) + goto err; + + for (i = 0; i < count; i++) + { + char *buf = native_relocs + BFD_MACH_O_RELENT_SIZE * i; + + if (bfd_mach_o_canonicalize_one_reloc (abfd, buf, &res[i], syms) < 0) + goto err; + } + free (native_relocs); + return i; + err: + free (native_relocs); + return -1; +} + +long +bfd_mach_o_canonicalize_reloc (bfd *abfd, asection *asect, + arelent **rels, asymbol **syms) +{ + bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd); + unsigned long i; + arelent *res; + + if (asect->reloc_count == 0) + return 0; + + /* No need to go further if we don't know how to read relocs. */ + if (bed->_bfd_mach_o_swap_reloc_in == NULL) + return 0; + + res = bfd_malloc (asect->reloc_count * sizeof (arelent)); + if (res == NULL) + return -1; + + if (bfd_mach_o_canonicalize_relocs (abfd, asect->rel_filepos, + asect->reloc_count, res, syms) < 0) + { + free (res); + return -1; + } + + for (i = 0; i < asect->reloc_count; i++) + rels[i] = &res[i]; + rels[i] = NULL; + asect->relocation = res; + + return i; +} + +long +bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *abfd) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + + if (mdata->dysymtab == NULL) + return 1; + return (mdata->dysymtab->nextrel + mdata->dysymtab->nlocrel) + * sizeof (arelent *); +} + +long +bfd_mach_o_canonicalize_dynamic_reloc (bfd *abfd, arelent **rels, + struct bfd_symbol **syms) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + bfd_mach_o_dysymtab_command *dysymtab = mdata->dysymtab; + bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd); + unsigned long i; + arelent *res; + + if (dysymtab == NULL) + return 0; + if (dysymtab->nextrel == 0 && dysymtab->nlocrel == 0) + return 0; + + /* No need to go further if we don't know how to read relocs. */ + if (bed->_bfd_mach_o_swap_reloc_in == NULL) + return 0; + + res = bfd_malloc ((dysymtab->nextrel + dysymtab->nlocrel) * sizeof (arelent)); + if (res == NULL) + return -1; + + if (bfd_mach_o_canonicalize_relocs (abfd, dysymtab->extreloff, + dysymtab->nextrel, res, syms) < 0) + { + free (res); + return -1; + } + + if (bfd_mach_o_canonicalize_relocs (abfd, dysymtab->locreloff, + dysymtab->nlocrel, + res + dysymtab->nextrel, syms) < 0) + { + free (res); + return -1; + } + + for (i = 0; i < dysymtab->nextrel + dysymtab->nlocrel; i++) + rels[i] = &res[i]; + rels[i] = NULL; + return i; +} + +static bfd_boolean +bfd_mach_o_scan_write_relocs (bfd *abfd, bfd_mach_o_section *section) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + unsigned int i; + arelent **entries; + asection *sec; + bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd); + + sec = section->bfdsection; + if (sec->reloc_count == 0) + return TRUE; + + if (bed->_bfd_mach_o_swap_reloc_out == NULL) + return TRUE; + + /* Allocate relocation room. */ + mdata->filelen = FILE_ALIGN(mdata->filelen, 2); + section->nreloc = sec->reloc_count; + sec->rel_filepos = mdata->filelen; + section->reloff = sec->rel_filepos; + mdata->filelen += sec->reloc_count * BFD_MACH_O_RELENT_SIZE; + + if (bfd_seek (abfd, section->reloff, SEEK_SET) != 0) + return FALSE; + + /* Convert and write. */ + entries = section->bfdsection->orelocation; + for (i = 0; i < section->nreloc; i++) + { + arelent *rel = entries[i]; + char buf[8]; + bfd_mach_o_reloc_info info, *pinfo = &info; + + /* Convert relocation to an intermediate representation. */ + if (!(*bed->_bfd_mach_o_swap_reloc_out) (rel, pinfo)) + return FALSE; + + /* Lower the relocation info. */ + if (pinfo->r_scattered) + { + unsigned long v; + + v = BFD_MACH_O_SR_SCATTERED + | (pinfo->r_pcrel ? BFD_MACH_O_SR_PCREL : 0) + | BFD_MACH_O_SET_SR_LENGTH(pinfo->r_length) + | BFD_MACH_O_SET_SR_TYPE(pinfo->r_type) + | BFD_MACH_O_SET_SR_ADDRESS(pinfo->r_address); + bfd_put_32 (abfd, v, buf); + bfd_put_32 (abfd, pinfo->r_value, buf + 4); + } + else + { + unsigned long v; + + bfd_put_32 (abfd, pinfo->r_address, buf); + v = BFD_MACH_O_SET_R_SYMBOLNUM (pinfo->r_value) + | (pinfo->r_pcrel ? BFD_MACH_O_R_PCREL : 0) + | BFD_MACH_O_SET_R_LENGTH (pinfo->r_length) + | (pinfo->r_extern ? BFD_MACH_O_R_EXTERN : 0) + | BFD_MACH_O_SET_R_TYPE (pinfo->r_type); + bfd_put_32 (abfd, v, buf + 4); + } + + if (bfd_bwrite ((PTR) buf, BFD_MACH_O_RELENT_SIZE, abfd) + != BFD_MACH_O_RELENT_SIZE) + return FALSE; + } + return TRUE; +} + +static int +bfd_mach_o_scan_write_section_32 (bfd *abfd, bfd_mach_o_section *section) +{ + unsigned char buf[BFD_MACH_O_SECTION_SIZE]; memcpy (buf, section->sectname, 16); memcpy (buf + 16, section->segname, 16); @@ -355,155 +785,263 @@ bfd_mach_o_scan_write_section (bfd *abfd, bfd_h_put_32 (abfd, section->reloff, buf + 48); bfd_h_put_32 (abfd, section->nreloc, buf + 52); bfd_h_put_32 (abfd, section->flags, buf + 56); - /* bfd_h_put_32 (abfd, section->reserved1, buf + 60); */ - /* bfd_h_put_32 (abfd, section->reserved2, buf + 64); */ + bfd_h_put_32 (abfd, section->reserved1, buf + 60); + bfd_h_put_32 (abfd, section->reserved2, buf + 64); - bfd_seek (abfd, offset, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 68, abfd) != 68) + if (bfd_bwrite ((PTR) buf, BFD_MACH_O_SECTION_SIZE, abfd) + != BFD_MACH_O_SECTION_SIZE) return -1; return 0; } static int -bfd_mach_o_scan_write_segment (bfd *abfd, bfd_mach_o_load_command *command) +bfd_mach_o_scan_write_section_64 (bfd *abfd, bfd_mach_o_section *section) { - unsigned char buf[48]; + unsigned char buf[BFD_MACH_O_SECTION_64_SIZE]; + + memcpy (buf, section->sectname, 16); + memcpy (buf + 16, section->segname, 16); + bfd_h_put_64 (abfd, section->addr, buf + 32); + bfd_h_put_64 (abfd, section->size, buf + 40); + bfd_h_put_32 (abfd, section->offset, buf + 48); + bfd_h_put_32 (abfd, section->align, buf + 52); + bfd_h_put_32 (abfd, section->reloff, buf + 56); + bfd_h_put_32 (abfd, section->nreloc, buf + 60); + bfd_h_put_32 (abfd, section->flags, buf + 64); + bfd_h_put_32 (abfd, section->reserved1, buf + 68); + bfd_h_put_32 (abfd, section->reserved2, buf + 72); + bfd_h_put_32 (abfd, section->reserved3, buf + 76); + + if (bfd_bwrite ((PTR) buf, BFD_MACH_O_SECTION_64_SIZE, abfd) + != BFD_MACH_O_SECTION_64_SIZE) + return -1; + + return 0; +} + +static int +bfd_mach_o_scan_write_segment_32 (bfd *abfd, bfd_mach_o_load_command *command) +{ + unsigned char buf[BFD_MACH_O_LC_SEGMENT_SIZE]; bfd_mach_o_segment_command *seg = &command->command.segment; unsigned long i; BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT); + for (i = 0; i < seg->nsects; i++) + if (!bfd_mach_o_scan_write_relocs (abfd, &seg->sections[i])) + return -1; + memcpy (buf, seg->segname, 16); bfd_h_put_32 (abfd, seg->vmaddr, buf + 16); bfd_h_put_32 (abfd, seg->vmsize, buf + 20); bfd_h_put_32 (abfd, seg->fileoff, buf + 24); bfd_h_put_32 (abfd, seg->filesize, buf + 28); - bfd_h_put_32 (abfd, 0 /* seg->maxprot */, buf + 32); - bfd_h_put_32 (abfd, 0 /* seg->initprot */, buf + 36); + bfd_h_put_32 (abfd, seg->maxprot, buf + 32); + bfd_h_put_32 (abfd, seg->initprot, buf + 36); bfd_h_put_32 (abfd, seg->nsects, buf + 40); bfd_h_put_32 (abfd, seg->flags, buf + 44); - - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 48, abfd) != 48) + + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || (bfd_bwrite ((PTR) buf, BFD_MACH_O_LC_SEGMENT_SIZE - 8, abfd) + != BFD_MACH_O_LC_SEGMENT_SIZE - 8)) return -1; - { - char buf[1024]; - bfd_vma nbytes = seg->filesize; - bfd_vma curoff = seg->fileoff; - - while (nbytes > 0) - { - bfd_vma thisread = nbytes; - - if (thisread > 1024) - thisread = 1024; - - bfd_seek (abfd, curoff, SEEK_SET); - if (bfd_bread ((PTR) buf, thisread, abfd) != thisread) - return -1; - - bfd_seek (abfd, curoff, SEEK_SET); - if (bfd_bwrite ((PTR) buf, thisread, abfd) != thisread) - return -1; - - nbytes -= thisread; - curoff += thisread; - } - } - for (i = 0; i < seg->nsects; i++) - { - bfd_vma segoff = command->offset + 48 + 8 + (i * 68); - - if (bfd_mach_o_scan_write_section (abfd, &seg->sections[i], segoff) != 0) - return -1; - } + if (bfd_mach_o_scan_write_section_32 (abfd, &seg->sections[i])) + return -1; return 0; } static int -bfd_mach_o_scan_write_symtab_symbols (bfd *abfd, - bfd_mach_o_load_command *command) +bfd_mach_o_scan_write_segment_64 (bfd *abfd, bfd_mach_o_load_command *command) { - bfd_mach_o_symtab_command *sym = &command->command.symtab; - asymbol *s = NULL; + unsigned char buf[BFD_MACH_O_LC_SEGMENT_64_SIZE]; + bfd_mach_o_segment_command *seg = &command->command.segment; unsigned long i; - for (i = 0; i < sym->nsyms; i++) - { - unsigned char buf[12]; - bfd_vma symoff = sym->symoff + (i * 12); - unsigned char ntype = 0; - unsigned char nsect = 0; - short ndesc = 0; - - s = &sym->symbols[i]; + BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT_64); - /* Instead just set from the stored values. */ - ntype = (s->udata.i >> 24) & 0xff; - nsect = (s->udata.i >> 16) & 0xff; - ndesc = s->udata.i & 0xffff; + for (i = 0; i < seg->nsects; i++) + if (!bfd_mach_o_scan_write_relocs (abfd, &seg->sections[i])) + return -1; - bfd_h_put_32 (abfd, s->name - sym->strtab, buf); - bfd_h_put_8 (abfd, ntype, buf + 4); - bfd_h_put_8 (abfd, nsect, buf + 5); - bfd_h_put_16 (abfd, ndesc, buf + 6); - bfd_h_put_32 (abfd, s->section->vma + s->value, buf + 8); + memcpy (buf, seg->segname, 16); + bfd_h_put_64 (abfd, seg->vmaddr, buf + 16); + bfd_h_put_64 (abfd, seg->vmsize, buf + 24); + bfd_h_put_64 (abfd, seg->fileoff, buf + 32); + bfd_h_put_64 (abfd, seg->filesize, buf + 40); + bfd_h_put_32 (abfd, seg->maxprot, buf + 48); + bfd_h_put_32 (abfd, seg->initprot, buf + 52); + bfd_h_put_32 (abfd, seg->nsects, buf + 56); + bfd_h_put_32 (abfd, seg->flags, buf + 60); + + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || (bfd_bwrite ((PTR) buf, BFD_MACH_O_LC_SEGMENT_64_SIZE - 8, abfd) + != BFD_MACH_O_LC_SEGMENT_64_SIZE - 8)) + return -1; - bfd_seek (abfd, symoff, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 12, abfd) != 12) - { - fprintf (stderr, "bfd_mach_o_scan_write_symtab_symbols: unable to write %d bytes at %lu\n", - 12, (unsigned long) symoff); - return -1; - } - } + for (i = 0; i < seg->nsects; i++) + if (bfd_mach_o_scan_write_section_64 (abfd, &seg->sections[i])) + return -1; return 0; } -static int +static bfd_boolean bfd_mach_o_scan_write_symtab (bfd *abfd, bfd_mach_o_load_command *command) { - bfd_mach_o_symtab_command *seg = &command->command.symtab; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + bfd_mach_o_symtab_command *sym = &command->command.symtab; unsigned char buf[16]; + unsigned long i; + unsigned int wide = bfd_mach_o_wide_p (abfd); + unsigned int symlen = wide ? BFD_MACH_O_NLIST_64_SIZE : BFD_MACH_O_NLIST_SIZE; + struct bfd_strtab_hash *strtab; + asymbol **symbols = bfd_get_outsymbols (abfd); BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB); - bfd_h_put_32 (abfd, seg->symoff, buf); - bfd_h_put_32 (abfd, seg->nsyms, buf + 4); - bfd_h_put_32 (abfd, seg->stroff, buf + 8); - bfd_h_put_32 (abfd, seg->strsize, buf + 12); + /* Write the symbols first. */ + mdata->filelen = FILE_ALIGN(mdata->filelen, wide ? 3 : 2); + sym->symoff = mdata->filelen; + if (bfd_seek (abfd, sym->symoff, SEEK_SET) != 0) + return FALSE; - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 16, abfd) != 16) - return -1; + sym->nsyms = bfd_get_symcount (abfd); + mdata->filelen += sym->nsyms * symlen; - if (bfd_mach_o_scan_write_symtab_symbols (abfd, command) != 0) - return -1; + strtab = _bfd_stringtab_init (); + if (strtab == NULL) + return FALSE; - return 0; + for (i = 0; i < sym->nsyms; i++) + { + unsigned char buf[16]; + bfd_size_type index; + bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i]; + + /* Compute name index. */ + /* An index of 0 always means the empty string. */ + if (s->symbol.name == 0 || s->symbol.name[0] == '\0') + index = 0; + else + { + index = _bfd_stringtab_add (strtab, s->symbol.name, TRUE, FALSE); + if (index == (bfd_size_type) -1) + goto err; + } + bfd_h_put_32 (abfd, index, buf); + bfd_h_put_8 (abfd, s->n_type, buf + 4); + bfd_h_put_8 (abfd, s->n_sect, buf + 5); + bfd_h_put_16 (abfd, s->n_desc, buf + 6); + if (wide) + bfd_h_put_64 (abfd, s->symbol.section->vma + s->symbol.value, buf + 8); + else + bfd_h_put_32 (abfd, s->symbol.section->vma + s->symbol.value, buf + 8); + + if (bfd_bwrite ((PTR) buf, symlen, abfd) != symlen) + goto err; + } + sym->strsize = _bfd_stringtab_size (strtab); + sym->stroff = mdata->filelen; + mdata->filelen += sym->strsize; + + if (_bfd_stringtab_emit (abfd, strtab) != TRUE) + goto err; + _bfd_stringtab_free (strtab); + + /* The command. */ + bfd_h_put_32 (abfd, sym->symoff, buf); + bfd_h_put_32 (abfd, sym->nsyms, buf + 4); + bfd_h_put_32 (abfd, sym->stroff, buf + 8); + bfd_h_put_32 (abfd, sym->strsize, buf + 12); + + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bwrite ((PTR) buf, 16, abfd) != 16) + return FALSE; + + return TRUE; + + err: + _bfd_stringtab_free (strtab); + return FALSE; } +/* Process the symbols and generate Mach-O specific fields. + Number them. */ + static bfd_boolean -bfd_mach_o_write_contents (bfd *abfd) +bfd_mach_o_mangle_symbols (bfd *abfd) { - unsigned int i; - asection *s; + unsigned long i; + asymbol **symbols = bfd_get_outsymbols (abfd); - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + for (i = 0; i < bfd_get_symcount (abfd); i++) + { + bfd_mach_o_asymbol *s = (bfd_mach_o_asymbol *)symbols[i]; + + if (s->n_type == BFD_MACH_O_N_UNDF && !(s->symbol.flags & BSF_DEBUGGING)) + { + /* As genuine Mach-O symbols type shouldn't be N_UNDF (undefined + symbols should be N_UNDEF | N_EXT), we suppose the back-end + values haven't been set. */ + if (s->symbol.section == bfd_abs_section_ptr) + s->n_type = BFD_MACH_O_N_ABS; + else if (s->symbol.section == bfd_und_section_ptr) + { + s->n_type = BFD_MACH_O_N_UNDF; + if (s->symbol.flags & BSF_WEAK) + s->n_desc |= BFD_MACH_O_N_WEAK_REF; + } + else if (s->symbol.section == bfd_com_section_ptr) + s->n_type = BFD_MACH_O_N_UNDF | BFD_MACH_O_N_EXT; + else + s->n_type = BFD_MACH_O_N_SECT; + + if (s->symbol.flags & BSF_GLOBAL) + s->n_type |= BFD_MACH_O_N_EXT; + } + + /* Compute section index. */ + if (s->symbol.section != bfd_abs_section_ptr + && s->symbol.section != bfd_und_section_ptr + && s->symbol.section != bfd_com_section_ptr) + s->n_sect = s->symbol.section->target_index; + + /* Number symbols. */ + s->symbol.udata.i = i; + } + return TRUE; +} - /* Write data sections first in case they overlap header data to be - written later. */ +bfd_boolean +bfd_mach_o_write_contents (bfd *abfd) +{ + unsigned int i; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); - for (s = abfd->sections; s != (asection *) NULL; s = s->next) - ; + if (mdata->header.ncmds == 0) + if (!bfd_mach_o_build_commands (abfd)) + return FALSE; /* Now write header information. */ - if (bfd_mach_o_write_header (abfd, &mdata->header) != 0) + if (mdata->header.filetype == 0) + { + if (abfd->flags & EXEC_P) + mdata->header.filetype = BFD_MACH_O_MH_EXECUTE; + else if (abfd->flags & DYNAMIC) + mdata->header.filetype = BFD_MACH_O_MH_DYLIB; + else + mdata->header.filetype = BFD_MACH_O_MH_OBJECT; + } + if (!bfd_mach_o_write_header (abfd, &mdata->header)) + return FALSE; + + /* Assign a number to each symbols. */ + if (!bfd_mach_o_mangle_symbols (abfd)) return FALSE; for (i = 0; i < mdata->header.ncmds; i++) @@ -512,23 +1050,27 @@ bfd_mach_o_write_contents (bfd *abfd) bfd_mach_o_load_command *cur = &mdata->commands[i]; unsigned long typeflag; - typeflag = cur->type_required ? cur->type & BFD_MACH_O_LC_REQ_DYLD : cur->type; + typeflag = cur->type | (cur->type_required ? BFD_MACH_O_LC_REQ_DYLD : 0); bfd_h_put_32 (abfd, typeflag, buf); bfd_h_put_32 (abfd, cur->len, buf + 4); - bfd_seek (abfd, cur->offset, SEEK_SET); - if (bfd_bwrite ((PTR) buf, 8, abfd) != 8) + if (bfd_seek (abfd, cur->offset, SEEK_SET) != 0 + || bfd_bwrite ((PTR) buf, 8, abfd) != 8) return FALSE; switch (cur->type) { case BFD_MACH_O_LC_SEGMENT: - if (bfd_mach_o_scan_write_segment (abfd, cur) != 0) + if (bfd_mach_o_scan_write_segment_32 (abfd, cur) != 0) + return FALSE; + break; + case BFD_MACH_O_LC_SEGMENT_64: + if (bfd_mach_o_scan_write_segment_64 (abfd, cur) != 0) return FALSE; break; case BFD_MACH_O_LC_SYMTAB: - if (bfd_mach_o_scan_write_symtab (abfd, cur) != 0) + if (!bfd_mach_o_scan_write_symtab (abfd, cur)) return FALSE; break; case BFD_MACH_O_LC_SYMSEG: @@ -547,6 +1089,7 @@ bfd_mach_o_write_contents (bfd *abfd) case BFD_MACH_O_LC_LOAD_DYLIB: case BFD_MACH_O_LC_LOAD_WEAK_DYLIB: case BFD_MACH_O_LC_ID_DYLIB: + case BFD_MACH_O_LC_REEXPORT_DYLIB: case BFD_MACH_O_LC_LOAD_DYLINKER: case BFD_MACH_O_LC_ID_DYLINKER: case BFD_MACH_O_LC_PREBOUND_DYLIB: @@ -556,7 +1099,7 @@ bfd_mach_o_write_contents (bfd *abfd) default: fprintf (stderr, "unable to write unknown load command 0x%lx\n", - (long) cur->type); + (unsigned long) cur->type); return FALSE; } } @@ -564,7 +1107,142 @@ bfd_mach_o_write_contents (bfd *abfd) return TRUE; } -static int +/* Build Mach-O load commands from the sections. */ + +bfd_boolean +bfd_mach_o_build_commands (bfd *abfd) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + unsigned int wide = mach_o_wide_p (&mdata->header); + bfd_mach_o_segment_command *seg; + bfd_mach_o_section *sections; + asection *sec; + bfd_mach_o_load_command *cmd; + bfd_mach_o_load_command *symtab_cmd; + int target_index; + + /* Return now if commands are already built. */ + if (mdata->header.ncmds) + return FALSE; + + /* Very simple version: 1 command (segment) containing all sections. */ + mdata->header.ncmds = 2; + mdata->commands = bfd_alloc (abfd, mdata->header.ncmds + * sizeof (bfd_mach_o_load_command)); + if (mdata->commands == NULL) + return FALSE; + cmd = &mdata->commands[0]; + seg = &cmd->command.segment; + + seg->nsects = bfd_count_sections (abfd); + sections = bfd_alloc (abfd, seg->nsects * sizeof (bfd_mach_o_section)); + if (sections == NULL) + return FALSE; + seg->sections = sections; + + /* Set segment command. */ + if (wide) + { + cmd->type = BFD_MACH_O_LC_SEGMENT_64; + cmd->offset = BFD_MACH_O_HEADER_64_SIZE; + cmd->len = BFD_MACH_O_LC_SEGMENT_64_SIZE + + BFD_MACH_O_SECTION_64_SIZE * seg->nsects; + } + else + { + cmd->type = BFD_MACH_O_LC_SEGMENT; + cmd->offset = BFD_MACH_O_HEADER_SIZE; + cmd->len = BFD_MACH_O_LC_SEGMENT_SIZE + + BFD_MACH_O_SECTION_SIZE * seg->nsects; + } + cmd->type_required = FALSE; + mdata->header.sizeofcmds = cmd->len; + mdata->filelen = cmd->offset + cmd->len; + + /* Set symtab command. */ + symtab_cmd = &mdata->commands[1]; + + symtab_cmd->type = BFD_MACH_O_LC_SYMTAB; + symtab_cmd->offset = cmd->offset + cmd->len; + symtab_cmd->len = 6 * 4; + symtab_cmd->type_required = FALSE; + + mdata->header.sizeofcmds += symtab_cmd->len; + mdata->filelen += symtab_cmd->len; + + /* Fill segment command. */ + memset (seg->segname, 0, sizeof (seg->segname)); + seg->vmaddr = 0; + seg->fileoff = mdata->filelen; + seg->filesize = 0; + seg->maxprot = BFD_MACH_O_PROT_READ | BFD_MACH_O_PROT_WRITE + | BFD_MACH_O_PROT_EXECUTE; + seg->initprot = seg->maxprot; + seg->flags = 0; + + /* Create Mach-O sections. */ + target_index = 0; + for (sec = abfd->sections; sec; sec = sec->next) + { + sections->bfdsection = sec; + bfd_mach_o_convert_section_name_to_mach_o (abfd, sec, sections); + sections->addr = bfd_get_section_vma (abfd, sec); + sections->size = bfd_get_section_size (sec); + sections->align = bfd_get_section_alignment (abfd, sec); + + if (sections->size != 0) + { + mdata->filelen = FILE_ALIGN (mdata->filelen, sections->align); + sections->offset = mdata->filelen; + } + else + sections->offset = 0; + sections->reloff = 0; + sections->nreloc = 0; + sections->reserved1 = 0; + sections->reserved2 = 0; + sections->reserved3 = 0; + + sec->filepos = sections->offset; + sec->target_index = ++target_index; + + mdata->filelen += sections->size; + sections++; + } + seg->filesize = mdata->filelen - seg->fileoff; + seg->vmsize = seg->filesize; + + return TRUE; +} + +/* Set the contents of a section. */ + +bfd_boolean +bfd_mach_o_set_section_contents (bfd *abfd, + asection *section, + const void * location, + file_ptr offset, + bfd_size_type count) +{ + file_ptr pos; + + /* This must be done first, because bfd_set_section_contents is + going to set output_has_begun to TRUE. */ + if (! abfd->output_has_begun && ! bfd_mach_o_build_commands (abfd)) + return FALSE; + + if (count == 0) + return TRUE; + + pos = section->filepos + offset; + if (bfd_seek (abfd, pos, SEEK_SET) != 0 + || bfd_bwrite (location, count, abfd) != count) + return FALSE; + + return TRUE; +} + +int bfd_mach_o_sizeof_headers (bfd *a ATTRIBUTE_UNUSED, struct bfd_link_info *info ATTRIBUTE_UNUSED) { @@ -574,47 +1252,73 @@ bfd_mach_o_sizeof_headers (bfd *a ATTRIBUTE_UNUSED, /* Make an empty symbol. This is required only because bfd_make_section_anyway wants to create a symbol for the section. */ -static asymbol * +asymbol * bfd_mach_o_make_empty_symbol (bfd *abfd) { - asymbol *new; - - new = bfd_zalloc (abfd, sizeof (* new)); - if (new == NULL) - return new; - new->the_bfd = abfd; - return new; + asymbol *new_symbol; + + new_symbol = bfd_zalloc (abfd, sizeof (bfd_mach_o_asymbol)); + if (new_symbol == NULL) + return new_symbol; + new_symbol->the_bfd = abfd; + new_symbol->udata.i = 0; + return new_symbol; } -static int +static bfd_boolean bfd_mach_o_read_header (bfd *abfd, bfd_mach_o_header *header) { - unsigned char buf[28]; + unsigned char buf[32]; + unsigned int size; bfd_vma (*get32) (const void *) = NULL; - bfd_seek (abfd, 0, SEEK_SET); - - if (bfd_bread ((PTR) buf, 28, abfd) != 28) - return -1; + /* Just read the magic number. */ + if (bfd_seek (abfd, 0, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 4, abfd) != 4) + return FALSE; - if (bfd_getb32 (buf) == 0xfeedface) + if (bfd_getb32 (buf) == BFD_MACH_O_MH_MAGIC) + { + header->byteorder = BFD_ENDIAN_BIG; + header->magic = BFD_MACH_O_MH_MAGIC; + header->version = 1; + get32 = bfd_getb32; + } + else if (bfd_getl32 (buf) == BFD_MACH_O_MH_MAGIC) + { + header->byteorder = BFD_ENDIAN_LITTLE; + header->magic = BFD_MACH_O_MH_MAGIC; + header->version = 1; + get32 = bfd_getl32; + } + else if (bfd_getb32 (buf) == BFD_MACH_O_MH_MAGIC_64) { header->byteorder = BFD_ENDIAN_BIG; - header->magic = 0xfeedface; + header->magic = BFD_MACH_O_MH_MAGIC_64; + header->version = 2; get32 = bfd_getb32; } - else if (bfd_getl32 (buf) == 0xfeedface) + else if (bfd_getl32 (buf) == BFD_MACH_O_MH_MAGIC_64) { header->byteorder = BFD_ENDIAN_LITTLE; - header->magic = 0xfeedface; + header->magic = BFD_MACH_O_MH_MAGIC_64; + header->version = 2; get32 = bfd_getl32; } else { header->byteorder = BFD_ENDIAN_UNKNOWN; - return -1; + return FALSE; } + /* Once the size of the header is known, read the full header. */ + size = mach_o_wide_p (header) ? + BFD_MACH_O_HEADER_64_SIZE : BFD_MACH_O_HEADER_SIZE; + + if (bfd_seek (abfd, 0, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, size, abfd) != size) + return FALSE; + header->cputype = (*get32) (buf + 4); header->cpusubtype = (*get32) (buf + 8); header->filetype = (*get32) (buf + 12); @@ -622,30 +1326,44 @@ bfd_mach_o_read_header (bfd *abfd, bfd_mach_o_header *header) header->sizeofcmds = (*get32) (buf + 20); header->flags = (*get32) (buf + 24); - return 0; + if (mach_o_wide_p (header)) + header->reserved = (*get32) (buf + 28); + + return TRUE; } static asection * -bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section) +bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section, + unsigned long prot) { asection *bfdsec; char *sname; - const char *prefix = "LC_SEGMENT"; - unsigned int snamelen; flagword flags; - snamelen = strlen (prefix) + 1 - + strlen (section->segname) + 1 - + strlen (section->sectname) + 1; - - sname = bfd_alloc (abfd, snamelen); + sname = bfd_mach_o_convert_section_name_to_bfd (abfd, section); if (sname == NULL) return NULL; - sprintf (sname, "%s.%s.%s", prefix, section->segname, section->sectname); - flags = SEC_ALLOC; - if (!(section->flags & BFD_MACH_O_S_ZEROFILL)) - flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE; + if (section->flags & BFD_MACH_O_S_ATTR_DEBUG) + flags = SEC_HAS_CONTENTS | SEC_DEBUGGING; + else + { + flags = SEC_ALLOC; + if ((section->flags & BFD_MACH_O_SECTION_TYPE_MASK) + != BFD_MACH_O_S_ZEROFILL) + { + flags |= SEC_HAS_CONTENTS | SEC_LOAD; + if (prot & BFD_MACH_O_PROT_EXECUTE) + flags |= SEC_CODE; + if (prot & BFD_MACH_O_PROT_WRITE) + flags |= SEC_DATA; + else if (prot & BFD_MACH_O_PROT_READ) + flags |= SEC_READONLY; + } + } + if (section->nreloc != 0) + flags |= SEC_RELOC; + bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, flags); if (bfdsec == NULL) return NULL; @@ -655,19 +1373,24 @@ bfd_mach_o_make_bfd_section (bfd *abfd, bfd_mach_o_section *section) bfdsec->size = section->size; bfdsec->filepos = section->offset; bfdsec->alignment_power = section->align; + bfdsec->segment_mark = 0; + bfdsec->reloc_count = section->nreloc; + bfdsec->rel_filepos = section->reloff; return bfdsec; } static int -bfd_mach_o_scan_read_section (bfd *abfd, - bfd_mach_o_section *section, - bfd_vma offset) +bfd_mach_o_scan_read_section_32 (bfd *abfd, + bfd_mach_o_section *section, + unsigned int offset, + unsigned long prot) { - unsigned char buf[68]; + unsigned char buf[BFD_MACH_O_SECTION_SIZE]; - bfd_seek (abfd, offset, SEEK_SET); - if (bfd_bread ((PTR) buf, 68, abfd) != 68) + if (bfd_seek (abfd, offset, SEEK_SET) != 0 + || (bfd_bread ((PTR) buf, BFD_MACH_O_SECTION_SIZE, abfd) + != BFD_MACH_O_SECTION_SIZE)) return -1; memcpy (section->sectname, buf, 16); @@ -683,7 +1406,8 @@ bfd_mach_o_scan_read_section (bfd *abfd, section->flags = bfd_h_get_32 (abfd, buf + 56); section->reserved1 = bfd_h_get_32 (abfd, buf + 60); section->reserved2 = bfd_h_get_32 (abfd, buf + 64); - section->bfdsection = bfd_mach_o_make_bfd_section (abfd, section); + section->reserved3 = 0; + section->bfdsection = bfd_mach_o_make_bfd_section (abfd, section, prot); if (section->bfdsection == NULL) return -1; @@ -691,38 +1415,92 @@ bfd_mach_o_scan_read_section (bfd *abfd, return 0; } -int +static int +bfd_mach_o_scan_read_section_64 (bfd *abfd, + bfd_mach_o_section *section, + unsigned int offset, + unsigned long prot) +{ + unsigned char buf[BFD_MACH_O_SECTION_64_SIZE]; + + if (bfd_seek (abfd, offset, SEEK_SET) != 0 + || (bfd_bread ((PTR) buf, BFD_MACH_O_SECTION_64_SIZE, abfd) + != BFD_MACH_O_SECTION_64_SIZE)) + return -1; + + memcpy (section->sectname, buf, 16); + section->sectname[16] = '\0'; + memcpy (section->segname, buf + 16, 16); + section->segname[16] = '\0'; + section->addr = bfd_h_get_64 (abfd, buf + 32); + section->size = bfd_h_get_64 (abfd, buf + 40); + section->offset = bfd_h_get_32 (abfd, buf + 48); + section->align = bfd_h_get_32 (abfd, buf + 52); + section->reloff = bfd_h_get_32 (abfd, buf + 56); + section->nreloc = bfd_h_get_32 (abfd, buf + 60); + section->flags = bfd_h_get_32 (abfd, buf + 64); + section->reserved1 = bfd_h_get_32 (abfd, buf + 68); + section->reserved2 = bfd_h_get_32 (abfd, buf + 72); + section->reserved3 = bfd_h_get_32 (abfd, buf + 76); + section->bfdsection = bfd_mach_o_make_bfd_section (abfd, section, prot); + + if (section->bfdsection == NULL) + return -1; + + return 0; +} + +static int +bfd_mach_o_scan_read_section (bfd *abfd, + bfd_mach_o_section *section, + unsigned int offset, + unsigned long prot, + unsigned int wide) +{ + if (wide) + return bfd_mach_o_scan_read_section_64 (abfd, section, offset, prot); + else + return bfd_mach_o_scan_read_section_32 (abfd, section, offset, prot); +} + +static int bfd_mach_o_scan_read_symtab_symbol (bfd *abfd, bfd_mach_o_symtab_command *sym, - asymbol *s, + bfd_mach_o_asymbol *s, unsigned long i) { - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; - bfd_vma symoff = sym->symoff + (i * 12); - unsigned char buf[12]; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + unsigned int wide = mach_o_wide_p (&mdata->header); + unsigned int symwidth = + wide ? BFD_MACH_O_NLIST_64_SIZE : BFD_MACH_O_NLIST_SIZE; + unsigned int symoff = sym->symoff + (i * symwidth); + unsigned char buf[16]; unsigned char type = -1; unsigned char section = -1; short desc = -1; - unsigned long value = -1; + symvalue value = -1; unsigned long stroff = -1; unsigned int symtype = -1; BFD_ASSERT (sym->strtab != NULL); - bfd_seek (abfd, symoff, SEEK_SET); - if (bfd_bread ((PTR) buf, 12, abfd) != 12) + if (bfd_seek (abfd, symoff, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, symwidth, abfd) != symwidth) { fprintf (stderr, "bfd_mach_o_scan_read_symtab_symbol: unable to read %d bytes at %lu\n", - 12, (unsigned long) symoff); + symwidth, (unsigned long) symoff); return -1; } stroff = bfd_h_get_32 (abfd, buf); type = bfd_h_get_8 (abfd, buf + 4); - symtype = (type & 0x0e); - section = bfd_h_get_8 (abfd, buf + 5) - 1; + symtype = type & BFD_MACH_O_N_TYPE; + section = bfd_h_get_8 (abfd, buf + 5); desc = bfd_h_get_16 (abfd, buf + 6); - value = bfd_h_get_32 (abfd, buf + 8); + if (wide) + value = bfd_h_get_64 (abfd, buf + 8); + else + value = bfd_h_get_32 (abfd, buf + 8); if (stroff >= sym->strsize) { @@ -731,47 +1509,79 @@ bfd_mach_o_scan_read_symtab_symbol (bfd *abfd, return -1; } - s->the_bfd = abfd; - s->name = sym->strtab + stroff; - s->value = value; - s->udata.i = (type << 24) | (section << 16) | desc; - s->flags = 0x0; + s->symbol.the_bfd = abfd; + s->symbol.name = sym->strtab + stroff; + s->symbol.value = value; + s->symbol.flags = 0x0; + s->symbol.udata.i = 0; + s->n_type = type; + s->n_sect = section; + s->n_desc = desc; if (type & BFD_MACH_O_N_STAB) { - s->flags |= BSF_DEBUGGING; - s->section = bfd_und_section_ptr; + s->symbol.flags |= BSF_DEBUGGING; + s->symbol.section = bfd_und_section_ptr; + switch (type) + { + case N_FUN: + case N_STSYM: + case N_LCSYM: + case N_BNSYM: + case N_SLINE: + case N_ENSYM: + case N_ECOMM: + case N_ECOML: + case N_GSYM: + if ((section > 0) && (section <= mdata->nsects)) + { + s->symbol.section = mdata->sections[section - 1]->bfdsection; + s->symbol.value = + s->symbol.value - mdata->sections[section - 1]->addr; + } + break; + } } else { if (type & BFD_MACH_O_N_PEXT) - { - type &= ~BFD_MACH_O_N_PEXT; - s->flags |= BSF_GLOBAL; - } + s->symbol.flags |= BSF_GLOBAL; if (type & BFD_MACH_O_N_EXT) - { - type &= ~BFD_MACH_O_N_EXT; - s->flags |= BSF_GLOBAL; - } + s->symbol.flags |= BSF_GLOBAL; + + if (!(type & (BFD_MACH_O_N_PEXT | BFD_MACH_O_N_EXT))) + s->symbol.flags |= BSF_LOCAL; switch (symtype) { case BFD_MACH_O_N_UNDF: - s->section = bfd_und_section_ptr; + if (type == (BFD_MACH_O_N_UNDF | BFD_MACH_O_N_EXT) + && s->symbol.value != 0) + { + /* A common symbol. */ + s->symbol.section = bfd_com_section_ptr; + s->symbol.flags = BSF_NO_FLAGS; + } + else + { + s->symbol.section = bfd_und_section_ptr; + if (s->n_desc & BFD_MACH_O_N_WEAK_REF) + s->symbol.flags |= BSF_WEAK; + } break; case BFD_MACH_O_N_PBUD: - s->section = bfd_und_section_ptr; + s->symbol.section = bfd_und_section_ptr; break; case BFD_MACH_O_N_ABS: - s->section = bfd_abs_section_ptr; + s->symbol.section = bfd_abs_section_ptr; break; case BFD_MACH_O_N_SECT: if ((section > 0) && (section <= mdata->nsects)) { - s->section = mdata->sections[section - 1]->bfdsection; - s->value = s->value - mdata->sections[section - 1]->addr; + s->symbol.section = mdata->sections[section - 1]->bfdsection; + s->symbol.value = + s->symbol.value - mdata->sections[section - 1]->addr; } else { @@ -780,22 +1590,22 @@ bfd_mach_o_scan_read_symtab_symbol (bfd *abfd, { fprintf (stderr, "bfd_mach_o_scan_read_symtab_symbol: " "symbol \"%s\" specified invalid section %d (max %lu): setting to undefined\n", - s->name, section, mdata->nsects); + s->symbol.name, section, mdata->nsects); } - s->section = bfd_und_section_ptr; + s->symbol.section = bfd_und_section_ptr; } break; case BFD_MACH_O_N_INDR: fprintf (stderr, "bfd_mach_o_scan_read_symtab_symbol: " "symbol \"%s\" is unsupported 'indirect' reference: setting to undefined\n", - s->name); - s->section = bfd_und_section_ptr; + s->symbol.name); + s->symbol.section = bfd_und_section_ptr; break; default: fprintf (stderr, "bfd_mach_o_scan_read_symtab_symbol: " "symbol \"%s\" specified invalid type field 0x%x: setting to undefined\n", - s->name, symtype); - s->section = bfd_und_section_ptr; + s->symbol.name, symtype); + s->symbol.section = bfd_und_section_ptr; break; } } @@ -803,11 +1613,19 @@ bfd_mach_o_scan_read_symtab_symbol (bfd *abfd, return 0; } -int -bfd_mach_o_scan_read_symtab_strtab (bfd *abfd, - bfd_mach_o_symtab_command *sym) +static int +bfd_mach_o_scan_read_symtab_strtab (bfd *abfd) { - BFD_ASSERT (sym->strtab == NULL); + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + bfd_mach_o_symtab_command *sym = mdata->symtab; + + /* Fail if there is no symtab. */ + if (sym == NULL) + return -1; + + /* Success if already loaded. */ + if (sym->strtab) + return 0; if (abfd->flags & BFD_IN_MEMORY) { @@ -821,33 +1639,36 @@ bfd_mach_o_scan_read_symtab_strtab (bfd *abfd, return -1; } sym->strtab = (char *) b->buffer + sym->stroff; - return 0; } - - sym->strtab = bfd_alloc (abfd, sym->strsize); - if (sym->strtab == NULL) - return -1; - - bfd_seek (abfd, sym->stroff, SEEK_SET); - if (bfd_bread ((PTR) sym->strtab, sym->strsize, abfd) != sym->strsize) + else { - fprintf (stderr, "bfd_mach_o_scan_read_symtab_strtab: unable to read %lu bytes at %lu\n", - sym->strsize, sym->stroff); - return -1; + sym->strtab = bfd_alloc (abfd, sym->strsize); + if (sym->strtab == NULL) + return -1; + + if (bfd_seek (abfd, sym->stroff, SEEK_SET) != 0 + || bfd_bread ((PTR) sym->strtab, sym->strsize, abfd) != sym->strsize) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } } return 0; } -int -bfd_mach_o_scan_read_symtab_symbols (bfd *abfd, - bfd_mach_o_symtab_command *sym) +static int +bfd_mach_o_scan_read_symtab_symbols (bfd *abfd) { + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + bfd_mach_o_symtab_command *sym = mdata->symtab; unsigned long i; int ret; - BFD_ASSERT (sym->symbols == NULL); - sym->symbols = bfd_alloc (abfd, sym->nsyms * sizeof (asymbol)); + if (sym->symbols) + return 0; + + sym->symbols = bfd_alloc (abfd, sym->nsyms * sizeof (bfd_mach_o_asymbol)); if (sym->symbols == NULL) { @@ -855,7 +1676,7 @@ bfd_mach_o_scan_read_symtab_symbols (bfd *abfd, return -1; } - ret = bfd_mach_o_scan_read_symtab_strtab (abfd, sym); + ret = bfd_mach_o_scan_read_symtab_strtab (abfd); if (ret != 0) return ret; @@ -873,7 +1694,7 @@ int bfd_mach_o_scan_read_dysymtab_symbol (bfd *abfd, bfd_mach_o_dysymtab_command *dysym, bfd_mach_o_symtab_command *sym, - asymbol *s, + bfd_mach_o_asymbol *s, unsigned long i) { unsigned long isymoff = dysym->indirectsymoff + (i * 4); @@ -882,8 +1703,8 @@ bfd_mach_o_scan_read_dysymtab_symbol (bfd *abfd, BFD_ASSERT (i < dysym->nindirectsyms); - bfd_seek (abfd, isymoff, SEEK_SET); - if (bfd_bread ((PTR) buf, 4, abfd) != 4) + if (bfd_seek (abfd, isymoff, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 4, abfd) != 4) { fprintf (stderr, "bfd_mach_o_scan_read_dysymtab_symbol: unable to read %lu bytes at %lu\n", (unsigned long) 4, isymoff); @@ -899,18 +1720,19 @@ bfd_mach_o_i386_flavour_string (unsigned int flavour) { switch ((int) flavour) { - case BFD_MACH_O_i386_NEW_THREAD_STATE: return "i386_NEW_THREAD_STATE"; - case BFD_MACH_O_i386_FLOAT_STATE: return "i386_FLOAT_STATE"; - case BFD_MACH_O_i386_ISA_PORT_MAP_STATE: return "i386_ISA_PORT_MAP_STATE"; - case BFD_MACH_O_i386_V86_ASSIST_STATE: return "i386_V86_ASSIST_STATE"; - case BFD_MACH_O_i386_REGS_SEGS_STATE: return "i386_REGS_SEGS_STATE"; - case BFD_MACH_O_i386_THREAD_SYSCALL_STATE: return "i386_THREAD_SYSCALL_STATE"; - case BFD_MACH_O_i386_THREAD_STATE_NONE: return "i386_THREAD_STATE_NONE"; - case BFD_MACH_O_i386_SAVED_STATE: return "i386_SAVED_STATE"; - case BFD_MACH_O_i386_THREAD_STATE: return "i386_THREAD_STATE"; - case BFD_MACH_O_i386_THREAD_FPSTATE: return "i386_THREAD_FPSTATE"; - case BFD_MACH_O_i386_THREAD_EXCEPTSTATE: return "i386_THREAD_EXCEPTSTATE"; - case BFD_MACH_O_i386_THREAD_CTHREADSTATE: return "i386_THREAD_CTHREADSTATE"; + case BFD_MACH_O_x86_THREAD_STATE32: return "x86_THREAD_STATE32"; + case BFD_MACH_O_x86_FLOAT_STATE32: return "x86_FLOAT_STATE32"; + case BFD_MACH_O_x86_EXCEPTION_STATE32: return "x86_EXCEPTION_STATE32"; + case BFD_MACH_O_x86_THREAD_STATE64: return "x86_THREAD_STATE64"; + case BFD_MACH_O_x86_FLOAT_STATE64: return "x86_FLOAT_STATE64"; + case BFD_MACH_O_x86_EXCEPTION_STATE64: return "x86_EXCEPTION_STATE64"; + case BFD_MACH_O_x86_THREAD_STATE: return "x86_THREAD_STATE"; + case BFD_MACH_O_x86_FLOAT_STATE: return "x86_FLOAT_STATE"; + case BFD_MACH_O_x86_EXCEPTION_STATE: return "x86_EXCEPTION_STATE"; + case BFD_MACH_O_x86_DEBUG_STATE32: return "x86_DEBUG_STATE32"; + case BFD_MACH_O_x86_DEBUG_STATE64: return "x86_DEBUG_STATE64"; + case BFD_MACH_O_x86_DEBUG_STATE: return "x86_DEBUG_STATE"; + case BFD_MACH_O_x86_THREAD_STATE_NONE: return "x86_THREAD_STATE_NONE"; default: return "UNKNOWN"; } } @@ -920,10 +1742,12 @@ bfd_mach_o_ppc_flavour_string (unsigned int flavour) { switch ((int) flavour) { - case BFD_MACH_O_PPC_THREAD_STATE: return "PPC_THREAD_STATE"; - case BFD_MACH_O_PPC_FLOAT_STATE: return "PPC_FLOAT_STATE"; - case BFD_MACH_O_PPC_EXCEPTION_STATE: return "PPC_EXCEPTION_STATE"; - case BFD_MACH_O_PPC_VECTOR_STATE: return "PPC_VECTOR_STATE"; + case BFD_MACH_O_PPC_THREAD_STATE: return "PPC_THREAD_STATE"; + case BFD_MACH_O_PPC_FLOAT_STATE: return "PPC_FLOAT_STATE"; + case BFD_MACH_O_PPC_EXCEPTION_STATE: return "PPC_EXCEPTION_STATE"; + case BFD_MACH_O_PPC_VECTOR_STATE: return "PPC_VECTOR_STATE"; + case BFD_MACH_O_PPC_THREAD_STATE64: return "PPC_THREAD_STATE64"; + case BFD_MACH_O_PPC_EXCEPTION_STATE64: return "PPC_EXCEPTION_STATE64"; default: return "UNKNOWN"; } } @@ -935,46 +1759,24 @@ bfd_mach_o_scan_read_dylinker (bfd *abfd, bfd_mach_o_dylinker_command *cmd = &command->command.dylinker; unsigned char buf[4]; unsigned int nameoff; - asection *bfdsec; - char *sname; - const char *prefix; BFD_ASSERT ((command->type == BFD_MACH_O_LC_ID_DYLINKER) || (command->type == BFD_MACH_O_LC_LOAD_DYLINKER)); - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bread ((PTR) buf, 4, abfd) != 4) + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 4, abfd) != 4) return -1; nameoff = bfd_h_get_32 (abfd, buf + 0); cmd->name_offset = command->offset + nameoff; cmd->name_len = command->len - nameoff; - - if (command->type == BFD_MACH_O_LC_LOAD_DYLINKER) - prefix = "LC_LOAD_DYLINKER"; - else if (command->type == BFD_MACH_O_LC_ID_DYLINKER) - prefix = "LC_ID_DYLINKER"; - else - abort (); - - sname = bfd_alloc (abfd, strlen (prefix) + 1); - if (sname == NULL) + cmd->name_str = bfd_alloc (abfd, cmd->name_len); + if (cmd->name_str == NULL) return -1; - strcpy (sname, prefix); - - bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS); - if (bfdsec == NULL) + if (bfd_seek (abfd, cmd->name_offset, SEEK_SET) != 0 + || bfd_bread (cmd->name_str, cmd->name_len, abfd) != cmd->name_len) return -1; - - bfdsec->vma = 0; - bfdsec->lma = 0; - bfdsec->size = command->len - 8; - bfdsec->filepos = command->offset + 8; - bfdsec->alignment_power = 0; - - cmd->section = bfdsec; - return 0; } @@ -984,16 +1786,21 @@ bfd_mach_o_scan_read_dylib (bfd *abfd, bfd_mach_o_load_command *command) bfd_mach_o_dylib_command *cmd = &command->command.dylib; unsigned char buf[16]; unsigned int nameoff; - asection *bfdsec; - char *sname; - const char *prefix; - BFD_ASSERT ((command->type == BFD_MACH_O_LC_ID_DYLIB) - || (command->type == BFD_MACH_O_LC_LOAD_DYLIB) - || (command->type == BFD_MACH_O_LC_LOAD_WEAK_DYLIB)); + switch (command->type) + { + case BFD_MACH_O_LC_LOAD_DYLIB: + case BFD_MACH_O_LC_LOAD_WEAK_DYLIB: + case BFD_MACH_O_LC_ID_DYLIB: + case BFD_MACH_O_LC_REEXPORT_DYLIB: + break; + default: + BFD_FAIL (); + return -1; + } - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bread ((PTR) buf, 16, abfd) != 16) + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 16, abfd) != 16) return -1; nameoff = bfd_h_get_32 (abfd, buf + 0); @@ -1003,33 +1810,12 @@ bfd_mach_o_scan_read_dylib (bfd *abfd, bfd_mach_o_load_command *command) cmd->name_offset = command->offset + nameoff; cmd->name_len = command->len - nameoff; - - if (command->type == BFD_MACH_O_LC_LOAD_DYLIB) - prefix = "LC_LOAD_DYLIB"; - else if (command->type == BFD_MACH_O_LC_LOAD_WEAK_DYLIB) - prefix = "LC_LOAD_WEAK_DYLIB"; - else if (command->type == BFD_MACH_O_LC_ID_DYLIB) - prefix = "LC_ID_DYLIB"; - else - abort (); - - sname = bfd_alloc (abfd, strlen (prefix) + 1); - if (sname == NULL) + cmd->name_str = bfd_alloc (abfd, cmd->name_len); + if (cmd->name_str == NULL) return -1; - strcpy (sname, prefix); - - bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS); - if (bfdsec == NULL) + if (bfd_seek (abfd, cmd->name_offset, SEEK_SET) != 0 + || bfd_bread (cmd->name_str, cmd->name_len, abfd) != cmd->name_len) return -1; - - bfdsec->vma = 0; - bfdsec->lma = 0; - bfdsec->size = command->len - 8; - bfdsec->filepos = command->offset + 8; - bfdsec->alignment_power = 0; - - cmd->section = bfdsec; - return 0; } @@ -1046,19 +1832,17 @@ bfd_mach_o_scan_read_prebound_dylib (bfd *abfd ATTRIBUTE_UNUSED, static int bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command) { - bfd_mach_o_data_struct *mdata = NULL; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); bfd_mach_o_thread_command *cmd = &command->command.thread; unsigned char buf[8]; - bfd_vma offset; + unsigned int offset; unsigned int nflavours; unsigned int i; BFD_ASSERT ((command->type == BFD_MACH_O_LC_THREAD) || (command->type == BFD_MACH_O_LC_UNIXTHREAD)); - BFD_ASSERT (bfd_mach_o_valid (abfd)); - mdata = abfd->tdata.mach_o_data; - + /* Count the number of threads. */ offset = 8; nflavours = 0; while (offset != command->len) @@ -1066,16 +1850,17 @@ bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command) if (offset >= command->len) return -1; - bfd_seek (abfd, command->offset + offset, SEEK_SET); - - if (bfd_bread ((PTR) buf, 8, abfd) != 8) + if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 8, abfd) != 8) return -1; offset += 8 + bfd_h_get_32 (abfd, buf + 4) * 4; nflavours++; } - cmd->flavours = bfd_alloc (abfd, nflavours * sizeof (bfd_mach_o_thread_flavour)); + /* Allocate threads. */ + cmd->flavours = bfd_alloc + (abfd, nflavours * sizeof (bfd_mach_o_thread_flavour)); if (cmd->flavours == NULL) return -1; cmd->nflavours = nflavours; @@ -1090,9 +1875,8 @@ bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command) if (nflavours >= cmd->nflavours) return -1; - bfd_seek (abfd, command->offset + offset, SEEK_SET); - - if (bfd_bread ((PTR) buf, 8, abfd) != 8) + if (bfd_seek (abfd, command->offset + offset, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 8, abfd) != 8) return -1; cmd->flavours[nflavours].flavour = bfd_h_get_32 (abfd, buf); @@ -1114,9 +1898,11 @@ bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command) switch (mdata->header.cputype) { case BFD_MACH_O_CPU_TYPE_POWERPC: + case BFD_MACH_O_CPU_TYPE_POWERPC_64: flavourstr = bfd_mach_o_ppc_flavour_string (cmd->flavours[i].flavour); break; case BFD_MACH_O_CPU_TYPE_I386: + case BFD_MACH_O_CPU_TYPE_X86_64: flavourstr = bfd_mach_o_i386_flavour_string (cmd->flavours[i].flavour); break; default: @@ -1154,33 +1940,175 @@ bfd_mach_o_scan_read_thread (bfd *abfd, bfd_mach_o_load_command *command) static int bfd_mach_o_scan_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command) { - bfd_mach_o_dysymtab_command *seg = &command->command.dysymtab; + bfd_mach_o_dysymtab_command *cmd = &command->command.dysymtab; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); unsigned char buf[72]; BFD_ASSERT (command->type == BFD_MACH_O_LC_DYSYMTAB); - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bread ((PTR) buf, 72, abfd) != 72) + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 72, abfd) != 72) return -1; - seg->ilocalsym = bfd_h_get_32 (abfd, buf + 0); - seg->nlocalsym = bfd_h_get_32 (abfd, buf + 4); - seg->iextdefsym = bfd_h_get_32 (abfd, buf + 8); - seg->nextdefsym = bfd_h_get_32 (abfd, buf + 12); - seg->iundefsym = bfd_h_get_32 (abfd, buf + 16); - seg->nundefsym = bfd_h_get_32 (abfd, buf + 20); - seg->tocoff = bfd_h_get_32 (abfd, buf + 24); - seg->ntoc = bfd_h_get_32 (abfd, buf + 28); - seg->modtaboff = bfd_h_get_32 (abfd, buf + 32); - seg->nmodtab = bfd_h_get_32 (abfd, buf + 36); - seg->extrefsymoff = bfd_h_get_32 (abfd, buf + 40); - seg->nextrefsyms = bfd_h_get_32 (abfd, buf + 44); - seg->indirectsymoff = bfd_h_get_32 (abfd, buf + 48); - seg->nindirectsyms = bfd_h_get_32 (abfd, buf + 52); - seg->extreloff = bfd_h_get_32 (abfd, buf + 56); - seg->nextrel = bfd_h_get_32 (abfd, buf + 60); - seg->locreloff = bfd_h_get_32 (abfd, buf + 64); - seg->nlocrel = bfd_h_get_32 (abfd, buf + 68); + cmd->ilocalsym = bfd_h_get_32 (abfd, buf + 0); + cmd->nlocalsym = bfd_h_get_32 (abfd, buf + 4); + cmd->iextdefsym = bfd_h_get_32 (abfd, buf + 8); + cmd->nextdefsym = bfd_h_get_32 (abfd, buf + 12); + cmd->iundefsym = bfd_h_get_32 (abfd, buf + 16); + cmd->nundefsym = bfd_h_get_32 (abfd, buf + 20); + cmd->tocoff = bfd_h_get_32 (abfd, buf + 24); + cmd->ntoc = bfd_h_get_32 (abfd, buf + 28); + cmd->modtaboff = bfd_h_get_32 (abfd, buf + 32); + cmd->nmodtab = bfd_h_get_32 (abfd, buf + 36); + cmd->extrefsymoff = bfd_h_get_32 (abfd, buf + 40); + cmd->nextrefsyms = bfd_h_get_32 (abfd, buf + 44); + cmd->indirectsymoff = bfd_h_get_32 (abfd, buf + 48); + cmd->nindirectsyms = bfd_h_get_32 (abfd, buf + 52); + cmd->extreloff = bfd_h_get_32 (abfd, buf + 56); + cmd->nextrel = bfd_h_get_32 (abfd, buf + 60); + cmd->locreloff = bfd_h_get_32 (abfd, buf + 64); + cmd->nlocrel = bfd_h_get_32 (abfd, buf + 68); + + if (cmd->nmodtab != 0) + { + char buf[56]; + unsigned int i; + int wide = bfd_mach_o_wide_p (abfd); + unsigned int module_len = wide ? 56 : 52; + + cmd->dylib_module = + bfd_alloc (abfd, cmd->nmodtab * sizeof (bfd_mach_o_dylib_module)); + if (cmd->dylib_module == NULL) + return -1; + + if (bfd_seek (abfd, cmd->modtaboff, SEEK_SET) != 0) + return -1; + + for (i = 0; i < cmd->nmodtab; i++) + { + bfd_mach_o_dylib_module *module = &cmd->dylib_module[i]; + unsigned long v; + + if (bfd_bread ((PTR) buf, module_len, abfd) != module_len) + return -1; + + module->module_name_idx = bfd_h_get_32 (abfd, buf + 0); + module->iextdefsym = bfd_h_get_32 (abfd, buf + 4); + module->nextdefsym = bfd_h_get_32 (abfd, buf + 8); + module->irefsym = bfd_h_get_32 (abfd, buf + 12); + module->nrefsym = bfd_h_get_32 (abfd, buf + 16); + module->ilocalsym = bfd_h_get_32 (abfd, buf + 20); + module->nlocalsym = bfd_h_get_32 (abfd, buf + 24); + module->iextrel = bfd_h_get_32 (abfd, buf + 28); + module->nextrel = bfd_h_get_32 (abfd, buf + 32); + v = bfd_h_get_32 (abfd, buf +36); + module->iinit = v & 0xffff; + module->iterm = (v >> 16) & 0xffff; + v = bfd_h_get_32 (abfd, buf + 40); + module->ninit = v & 0xffff; + module->nterm = (v >> 16) & 0xffff; + if (wide) + { + module->objc_module_info_size = bfd_h_get_32 (abfd, buf + 44); + module->objc_module_info_addr = bfd_h_get_64 (abfd, buf + 48); + } + else + { + module->objc_module_info_addr = bfd_h_get_32 (abfd, buf + 44); + module->objc_module_info_size = bfd_h_get_32 (abfd, buf + 48); + } + } + } + + if (cmd->ntoc != 0) + { + char buf[8]; + unsigned int i; + + cmd->dylib_toc = bfd_alloc + (abfd, cmd->ntoc * sizeof (bfd_mach_o_dylib_table_of_content)); + if (cmd->dylib_toc == NULL) + return -1; + + if (bfd_seek (abfd, cmd->tocoff, SEEK_SET) != 0) + return -1; + + for (i = 0; i < cmd->ntoc; i++) + { + bfd_mach_o_dylib_table_of_content *toc = &cmd->dylib_toc[i]; + + if (bfd_bread ((PTR) buf, 8, abfd) != 8) + return -1; + + toc->symbol_index = bfd_h_get_32 (abfd, buf + 0); + toc->module_index = bfd_h_get_32 (abfd, buf + 4); + } + } + + if (cmd->nindirectsyms != 0) + { + char buf[4]; + unsigned int i; + + cmd->indirect_syms = bfd_alloc + (abfd, cmd->nindirectsyms * sizeof (unsigned int)); + if (cmd->indirect_syms == NULL) + return -1; + + if (bfd_seek (abfd, cmd->indirectsymoff, SEEK_SET) != 0) + return -1; + + for (i = 0; i < cmd->nindirectsyms; i++) + { + unsigned int *is = &cmd->indirect_syms[i]; + + if (bfd_bread ((PTR) buf, 4, abfd) != 4) + return -1; + + *is = bfd_h_get_32 (abfd, buf + 0); + } + } + + if (cmd->nextrefsyms != 0) + { + char buf[4]; + unsigned long v; + unsigned int i; + + cmd->ext_refs = bfd_alloc + (abfd, cmd->nextrefsyms * sizeof (bfd_mach_o_dylib_reference)); + if (cmd->ext_refs == NULL) + return -1; + + if (bfd_seek (abfd, cmd->extrefsymoff, SEEK_SET) != 0) + return -1; + + for (i = 0; i < cmd->nextrefsyms; i++) + { + bfd_mach_o_dylib_reference *ref = &cmd->ext_refs[i]; + + if (bfd_bread ((PTR) buf, 4, abfd) != 4) + return -1; + + /* Fields isym and flags are written as bit-fields, thus we need + a specific processing for endianness. */ + v = bfd_h_get_32 (abfd, buf + 0); + if (bfd_big_endian (abfd)) + { + ref->isym = (v >> 8) & 0xffffff; + ref->flags = v & 0xff; + } + else + { + ref->isym = v & 0xffffff; + ref->flags = (v >> 24) & 0xff; + } + } + } + + if (mdata->dysymtab) + return -1; + mdata->dysymtab = cmd; return 0; } @@ -1188,43 +2116,46 @@ bfd_mach_o_scan_read_dysymtab (bfd *abfd, bfd_mach_o_load_command *command) static int bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command) { - bfd_mach_o_symtab_command *seg = &command->command.symtab; + bfd_mach_o_symtab_command *symtab = &command->command.symtab; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); unsigned char buf[16]; - asection *bfdsec; - char *sname; - const char *prefix = "LC_SYMTAB.stabs"; BFD_ASSERT (command->type == BFD_MACH_O_LC_SYMTAB); - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bread ((PTR) buf, 16, abfd) != 16) + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 16, abfd) != 16) return -1; - seg->symoff = bfd_h_get_32 (abfd, buf); - seg->nsyms = bfd_h_get_32 (abfd, buf + 4); - seg->stroff = bfd_h_get_32 (abfd, buf + 8); - seg->strsize = bfd_h_get_32 (abfd, buf + 12); - seg->symbols = NULL; - seg->strtab = NULL; + symtab->symoff = bfd_h_get_32 (abfd, buf); + symtab->nsyms = bfd_h_get_32 (abfd, buf + 4); + symtab->stroff = bfd_h_get_32 (abfd, buf + 8); + symtab->strsize = bfd_h_get_32 (abfd, buf + 12); + symtab->symbols = NULL; + symtab->strtab = NULL; - sname = bfd_alloc (abfd, strlen (prefix) + 1); - if (sname == NULL) - return -1; - strcpy (sname, prefix); + if (symtab->nsyms != 0) + abfd->flags |= HAS_SYMS; - bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, SEC_HAS_CONTENTS); - if (bfdsec == NULL) + if (mdata->symtab) return -1; + mdata->symtab = symtab; + return 0; +} - bfdsec->vma = 0; - bfdsec->lma = 0; - bfdsec->size = seg->nsyms * 12; - bfdsec->filepos = seg->symoff; - bfdsec->alignment_power = 0; +static int +bfd_mach_o_scan_read_uuid (bfd *abfd, bfd_mach_o_load_command *command) +{ + bfd_mach_o_uuid_command *cmd = &command->command.uuid; + asection *bfdsec; + char *sname; + static const char prefix[] = "LC_UUID"; - seg->stabs_segment = bfdsec; + BFD_ASSERT (command->type == BFD_MACH_O_LC_UUID); + + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) cmd->uuid, 16, abfd) != 16) + return -1; - prefix = "LC_SYMTAB.stabstr"; sname = bfd_alloc (abfd, strlen (prefix) + 1); if (sname == NULL) return -1; @@ -1236,74 +2167,122 @@ bfd_mach_o_scan_read_symtab (bfd *abfd, bfd_mach_o_load_command *command) bfdsec->vma = 0; bfdsec->lma = 0; - bfdsec->size = seg->strsize; - bfdsec->filepos = seg->stroff; + bfdsec->size = command->len - 8; + bfdsec->filepos = command->offset + 8; bfdsec->alignment_power = 0; - seg->stabstr_segment = bfdsec; + cmd->section = bfdsec; return 0; } static int -bfd_mach_o_scan_read_segment (bfd *abfd, bfd_mach_o_load_command *command) +bfd_mach_o_scan_read_linkedit (bfd *abfd, bfd_mach_o_load_command *command) { - unsigned char buf[48]; - bfd_mach_o_segment_command *seg = &command->command.segment; - unsigned long i; - asection *bfdsec; - char *sname; - const char *prefix = "LC_SEGMENT"; - unsigned int snamelen; - flagword flags; + bfd_mach_o_linkedit_command *cmd = &command->command.linkedit; + char buf[8]; - BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT); - - bfd_seek (abfd, command->offset + 8, SEEK_SET); - if (bfd_bread ((PTR) buf, 48, abfd) != 48) + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 8, abfd) != 8) return -1; - memcpy (seg->segname, buf, 16); - seg->vmaddr = bfd_h_get_32 (abfd, buf + 16); - seg->vmsize = bfd_h_get_32 (abfd, buf + 20); - seg->fileoff = bfd_h_get_32 (abfd, buf + 24); - seg->filesize = bfd_h_get_32 (abfd, buf + 28); - /* seg->maxprot = bfd_h_get_32 (abfd, buf + 32); */ - /* seg->initprot = bfd_h_get_32 (abfd, buf + 36); */ - seg->nsects = bfd_h_get_32 (abfd, buf + 40); - seg->flags = bfd_h_get_32 (abfd, buf + 44); - - snamelen = strlen (prefix) + 1 + strlen (seg->segname) + 1; - sname = bfd_alloc (abfd, snamelen); - if (sname == NULL) + cmd->dataoff = bfd_get_32 (abfd, buf + 0); + cmd->datasize = bfd_get_32 (abfd, buf + 4); + return 0; +} + +static int +bfd_mach_o_scan_read_str (bfd *abfd, bfd_mach_o_load_command *command) +{ + bfd_mach_o_str_command *cmd = &command->command.str; + char buf[8]; + unsigned long off; + + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 4, abfd) != 4) return -1; - sprintf (sname, "%s.%s", prefix, seg->segname); - flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC | SEC_CODE; - bfdsec = bfd_make_section_anyway_with_flags (abfd, sname, flags); - if (bfdsec == NULL) + off = bfd_get_32 (abfd, buf + 0); + cmd->stroff = command->offset + off; + cmd->str_len = command->len - off; + cmd->str = bfd_alloc (abfd, cmd->str_len); + if (cmd->str == NULL) + return -1; + if (bfd_seek (abfd, cmd->stroff, SEEK_SET) != 0 + || bfd_bread ((PTR) cmd->str, cmd->str_len, abfd) != cmd->str_len) return -1; + return 0; +} + +static int +bfd_mach_o_scan_read_segment (bfd *abfd, + bfd_mach_o_load_command *command, + unsigned int wide) +{ + unsigned char buf[64]; + bfd_mach_o_segment_command *seg = &command->command.segment; + unsigned long i; + + if (wide) + { + BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT_64); + + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 64, abfd) != 64) + return -1; + + memcpy (seg->segname, buf, 16); + seg->segname[16] = '\0'; + + seg->vmaddr = bfd_h_get_64 (abfd, buf + 16); + seg->vmsize = bfd_h_get_64 (abfd, buf + 24); + seg->fileoff = bfd_h_get_64 (abfd, buf + 32); + seg->filesize = bfd_h_get_64 (abfd, buf + 40); + seg->maxprot = bfd_h_get_32 (abfd, buf + 48); + seg->initprot = bfd_h_get_32 (abfd, buf + 52); + seg->nsects = bfd_h_get_32 (abfd, buf + 56); + seg->flags = bfd_h_get_32 (abfd, buf + 60); + } + else + { + BFD_ASSERT (command->type == BFD_MACH_O_LC_SEGMENT); - bfdsec->vma = seg->vmaddr; - bfdsec->lma = seg->vmaddr; - bfdsec->size = seg->filesize; - bfdsec->filepos = seg->fileoff; - bfdsec->alignment_power = 0x0; + if (bfd_seek (abfd, command->offset + 8, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 48, abfd) != 48) + return -1; - seg->segment = bfdsec; + memcpy (seg->segname, buf, 16); + seg->segname[16] = '\0'; + + seg->vmaddr = bfd_h_get_32 (abfd, buf + 16); + seg->vmsize = bfd_h_get_32 (abfd, buf + 20); + seg->fileoff = bfd_h_get_32 (abfd, buf + 24); + seg->filesize = bfd_h_get_32 (abfd, buf + 28); + seg->maxprot = bfd_h_get_32 (abfd, buf + 32); + seg->initprot = bfd_h_get_32 (abfd, buf + 36); + seg->nsects = bfd_h_get_32 (abfd, buf + 40); + seg->flags = bfd_h_get_32 (abfd, buf + 44); + } if (seg->nsects != 0) { - seg->sections = bfd_alloc (abfd, seg->nsects * sizeof (bfd_mach_o_section)); + seg->sections = bfd_alloc (abfd, seg->nsects + * sizeof (bfd_mach_o_section)); if (seg->sections == NULL) return -1; for (i = 0; i < seg->nsects; i++) { - bfd_vma segoff = command->offset + 48 + 8 + (i * 68); - - if (bfd_mach_o_scan_read_section (abfd, &seg->sections[i], - segoff) != 0) + bfd_vma segoff; + if (wide) + segoff = command->offset + BFD_MACH_O_LC_SEGMENT_64_SIZE + + (i * BFD_MACH_O_SECTION_64_SIZE); + else + segoff = command->offset + BFD_MACH_O_LC_SEGMENT_SIZE + + (i * BFD_MACH_O_SECTION_SIZE); + + if (bfd_mach_o_scan_read_section + (abfd, &seg->sections[i], segoff, seg->initprot, wide) != 0) return -1; } } @@ -1311,24 +2290,41 @@ bfd_mach_o_scan_read_segment (bfd *abfd, bfd_mach_o_load_command *command) return 0; } +static int +bfd_mach_o_scan_read_segment_32 (bfd *abfd, bfd_mach_o_load_command *command) +{ + return bfd_mach_o_scan_read_segment (abfd, command, 0); +} + +static int +bfd_mach_o_scan_read_segment_64 (bfd *abfd, bfd_mach_o_load_command *command) +{ + return bfd_mach_o_scan_read_segment (abfd, command, 1); +} + static int bfd_mach_o_scan_read_command (bfd *abfd, bfd_mach_o_load_command *command) { unsigned char buf[8]; - bfd_seek (abfd, command->offset, SEEK_SET); - if (bfd_bread ((PTR) buf, 8, abfd) != 8) + /* Read command type and length. */ + if (bfd_seek (abfd, command->offset, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 8, abfd) != 8) return -1; - command->type = (bfd_h_get_32 (abfd, buf) & ~BFD_MACH_O_LC_REQ_DYLD); + command->type = bfd_h_get_32 (abfd, buf) & ~BFD_MACH_O_LC_REQ_DYLD; command->type_required = (bfd_h_get_32 (abfd, buf) & BFD_MACH_O_LC_REQ_DYLD - ? 1 : 0); + ? TRUE : FALSE); command->len = bfd_h_get_32 (abfd, buf + 4); switch (command->type) { case BFD_MACH_O_LC_SEGMENT: - if (bfd_mach_o_scan_read_segment (abfd, command) != 0) + if (bfd_mach_o_scan_read_segment_32 (abfd, command) != 0) + return -1; + break; + case BFD_MACH_O_LC_SEGMENT_64: + if (bfd_mach_o_scan_read_segment_64 (abfd, command) != 0) return -1; break; case BFD_MACH_O_LC_SYMTAB: @@ -1350,6 +2346,7 @@ bfd_mach_o_scan_read_command (bfd *abfd, bfd_mach_o_load_command *command) case BFD_MACH_O_LC_LOAD_DYLIB: case BFD_MACH_O_LC_ID_DYLIB: case BFD_MACH_O_LC_LOAD_WEAK_DYLIB: + case BFD_MACH_O_LC_REEXPORT_DYLIB: if (bfd_mach_o_scan_read_dylib (abfd, command) != 0) return -1; break; @@ -1363,18 +2360,30 @@ bfd_mach_o_scan_read_command (bfd *abfd, bfd_mach_o_load_command *command) case BFD_MACH_O_LC_FVMFILE: case BFD_MACH_O_LC_PREPAGE: case BFD_MACH_O_LC_ROUTINES: + break; case BFD_MACH_O_LC_SUB_FRAMEWORK: + case BFD_MACH_O_LC_SUB_UMBRELLA: + case BFD_MACH_O_LC_SUB_LIBRARY: + case BFD_MACH_O_LC_SUB_CLIENT: + if (bfd_mach_o_scan_read_str (abfd, command) != 0) + return -1; break; case BFD_MACH_O_LC_DYSYMTAB: if (bfd_mach_o_scan_read_dysymtab (abfd, command) != 0) return -1; break; - case BFD_MACH_O_LC_SUB_UMBRELLA: - case BFD_MACH_O_LC_SUB_CLIENT: - case BFD_MACH_O_LC_SUB_LIBRARY: case BFD_MACH_O_LC_TWOLEVEL_HINTS: case BFD_MACH_O_LC_PREBIND_CKSUM: break; + case BFD_MACH_O_LC_UUID: + if (bfd_mach_o_scan_read_uuid (abfd, command) != 0) + return -1; + break; + case BFD_MACH_O_LC_CODE_SIGNATURE: + case BFD_MACH_O_LC_SEGMENT_SPLIT_INFO: + if (bfd_mach_o_scan_read_linkedit (abfd, command) != 0) + return -1; + break; default: fprintf (stderr, "unable to read unknown load command 0x%lx\n", (unsigned long) command->type); @@ -1387,15 +2396,17 @@ bfd_mach_o_scan_read_command (bfd *abfd, bfd_mach_o_load_command *command) static void bfd_mach_o_flatten_sections (bfd *abfd) { - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); long csect = 0; unsigned long i, j; + /* Count total number of sections. */ mdata->nsects = 0; for (i = 0; i < mdata->header.ncmds; i++) { - if (mdata->commands[i].type == BFD_MACH_O_LC_SEGMENT) + if (mdata->commands[i].type == BFD_MACH_O_LC_SEGMENT + || mdata->commands[i].type == BFD_MACH_O_LC_SEGMENT_64) { bfd_mach_o_segment_command *seg; @@ -1404,13 +2415,17 @@ bfd_mach_o_flatten_sections (bfd *abfd) } } + /* Allocate sections array. */ mdata->sections = bfd_alloc (abfd, mdata->nsects * sizeof (bfd_mach_o_section *)); + + /* Fill the array. */ csect = 0; for (i = 0; i < mdata->header.ncmds; i++) { - if (mdata->commands[i].type == BFD_MACH_O_LC_SEGMENT) + if (mdata->commands[i].type == BFD_MACH_O_LC_SEGMENT + || mdata->commands[i].type == BFD_MACH_O_LC_SEGMENT_64) { bfd_mach_o_segment_command *seg; @@ -1426,7 +2441,7 @@ bfd_mach_o_flatten_sections (bfd *abfd) int bfd_mach_o_scan_start_address (bfd *abfd) { - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); bfd_mach_o_thread_command *cmd = NULL; unsigned long i; @@ -1449,13 +2464,12 @@ bfd_mach_o_scan_start_address (bfd *abfd) { if ((mdata->header.cputype == BFD_MACH_O_CPU_TYPE_I386) && (cmd->flavours[i].flavour - == (unsigned long) BFD_MACH_O_i386_THREAD_STATE)) + == (unsigned long) BFD_MACH_O_x86_THREAD_STATE32)) { unsigned char buf[4]; - bfd_seek (abfd, cmd->flavours[i].offset + 40, SEEK_SET); - - if (bfd_bread (buf, 4, abfd) != 4) + if (bfd_seek (abfd, cmd->flavours[i].offset + 40, SEEK_SET) != 0 + || bfd_bread (buf, 4, abfd) != 4) return -1; abfd->start_address = bfd_h_get_32 (abfd, buf); @@ -1465,13 +2479,34 @@ bfd_mach_o_scan_start_address (bfd *abfd) { unsigned char buf[4]; - bfd_seek (abfd, cmd->flavours[i].offset + 0, SEEK_SET); - - if (bfd_bread (buf, 4, abfd) != 4) + if (bfd_seek (abfd, cmd->flavours[i].offset + 0, SEEK_SET) != 0 + || bfd_bread (buf, 4, abfd) != 4) return -1; abfd->start_address = bfd_h_get_32 (abfd, buf); } + else if ((mdata->header.cputype == BFD_MACH_O_CPU_TYPE_POWERPC_64) + && (cmd->flavours[i].flavour == BFD_MACH_O_PPC_THREAD_STATE64)) + { + unsigned char buf[8]; + + if (bfd_seek (abfd, cmd->flavours[i].offset + 0, SEEK_SET) != 0 + || bfd_bread (buf, 8, abfd) != 8) + return -1; + + abfd->start_address = bfd_h_get_64 (abfd, buf); + } + else if ((mdata->header.cputype == BFD_MACH_O_CPU_TYPE_X86_64) + && (cmd->flavours[i].flavour == BFD_MACH_O_x86_THREAD_STATE64)) + { + unsigned char buf[8]; + + if (bfd_seek (abfd, cmd->flavours[i].offset + (16 * 8), SEEK_SET) != 0 + || bfd_bread (buf, 8, abfd) != 8) + return -1; + + abfd->start_address = bfd_h_get_64 (abfd, buf); + } } return 0; @@ -1485,12 +2520,28 @@ bfd_mach_o_scan (bfd *abfd, unsigned int i; enum bfd_architecture cputype; unsigned long cpusubtype; + unsigned int hdrsize; + + hdrsize = mach_o_wide_p (header) ? + BFD_MACH_O_HEADER_64_SIZE : BFD_MACH_O_HEADER_SIZE; mdata->header = *header; - mdata->symbols = NULL; - abfd->flags = (abfd->xvec->object_flags - | (abfd->flags & (BFD_IN_MEMORY | BFD_IO_FUNCS))); + abfd->flags = abfd->flags & BFD_IN_MEMORY; + switch (header->filetype) + { + case BFD_MACH_O_MH_OBJECT: + abfd->flags |= HAS_RELOC; + break; + case BFD_MACH_O_MH_EXECUTE: + abfd->flags |= EXEC_P; + break; + case BFD_MACH_O_MH_DYLIB: + case BFD_MACH_O_MH_BUNDLE: + abfd->flags |= DYNAMIC; + break; + } + abfd->tdata.mach_o_data = mdata; bfd_mach_o_convert_architecture (header->cputype, header->cpusubtype, @@ -1506,7 +2557,8 @@ bfd_mach_o_scan (bfd *abfd, if (header->ncmds != 0) { - mdata->commands = bfd_alloc (abfd, header->ncmds * sizeof (bfd_mach_o_load_command)); + mdata->commands = bfd_alloc + (abfd, header->ncmds * sizeof (bfd_mach_o_load_command)); if (mdata->commands == NULL) return -1; @@ -1515,7 +2567,7 @@ bfd_mach_o_scan (bfd *abfd, bfd_mach_o_load_command *cur = &mdata->commands[i]; if (i == 0) - cur->offset = 28; + cur->offset = hdrsize; else { bfd_mach_o_load_command *prev = &mdata->commands[i - 1]; @@ -1535,7 +2587,7 @@ bfd_mach_o_scan (bfd *abfd, } bfd_boolean -bfd_mach_o_mkobject (bfd *abfd) +bfd_mach_o_mkobject_init (bfd *abfd) { bfd_mach_o_data_struct *mdata = NULL; @@ -1553,30 +2605,29 @@ bfd_mach_o_mkobject (bfd *abfd) mdata->header.flags = 0; mdata->header.byteorder = BFD_ENDIAN_UNKNOWN; mdata->commands = NULL; - mdata->nsymbols = 0; - mdata->symbols = NULL; mdata->nsects = 0; mdata->sections = NULL; - mdata->ibfd = NULL; return TRUE; } const bfd_target * -bfd_mach_o_object_p (bfd *abfd) +bfd_mach_o_header_p (bfd *abfd, + bfd_mach_o_filetype filetype, + bfd_mach_o_cpu_type cputype) { struct bfd_preserve preserve; bfd_mach_o_header header; preserve.marker = NULL; - if (bfd_mach_o_read_header (abfd, &header) != 0) + if (!bfd_mach_o_read_header (abfd, &header)) goto wrong; if (! (header.byteorder == BFD_ENDIAN_BIG || header.byteorder == BFD_ENDIAN_LITTLE)) { fprintf (stderr, "unknown header byte-order value 0x%lx\n", - (long) header.byteorder); + (unsigned long) header.byteorder); goto wrong; } @@ -1588,6 +2639,42 @@ bfd_mach_o_object_p (bfd *abfd) && abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE))) goto wrong; + /* Check cputype and filetype. + In case of wildcard, do not accept magics that are handled by existing + targets. */ + if (cputype) + { + if (header.cputype != cputype) + goto wrong; + } + else + { + switch (header.cputype) + { + case BFD_MACH_O_CPU_TYPE_I386: + /* Handled by mach-o-i386 */ + goto wrong; + default: + break; + } + } + if (filetype) + { + if (header.filetype != filetype) + goto wrong; + } + else + { + switch (header.filetype) + { + case BFD_MACH_O_MH_CORE: + /* Handled by core_p */ + goto wrong; + default: + break; + } + } + preserve.marker = bfd_zalloc (abfd, sizeof (bfd_mach_o_data_struct)); if (preserve.marker == NULL || !bfd_preserve_save (abfd, &preserve)) @@ -1609,54 +2696,16 @@ bfd_mach_o_object_p (bfd *abfd) return NULL; } -const bfd_target * -bfd_mach_o_core_p (bfd *abfd) +static const bfd_target * +bfd_mach_o_gen_object_p (bfd *abfd) { - struct bfd_preserve preserve; - bfd_mach_o_header header; - - preserve.marker = NULL; - if (bfd_mach_o_read_header (abfd, &header) != 0) - goto wrong; - - if (! (header.byteorder == BFD_ENDIAN_BIG - || header.byteorder == BFD_ENDIAN_LITTLE)) - { - fprintf (stderr, "unknown header byte-order value 0x%lx\n", - (long) header.byteorder); - abort (); - } - - if (! ((header.byteorder == BFD_ENDIAN_BIG - && abfd->xvec->byteorder == BFD_ENDIAN_BIG - && abfd->xvec->header_byteorder == BFD_ENDIAN_BIG) - || (header.byteorder == BFD_ENDIAN_LITTLE - && abfd->xvec->byteorder == BFD_ENDIAN_LITTLE - && abfd->xvec->header_byteorder == BFD_ENDIAN_LITTLE))) - goto wrong; - - if (header.filetype != BFD_MACH_O_MH_CORE) - goto wrong; - - preserve.marker = bfd_zalloc (abfd, sizeof (bfd_mach_o_data_struct)); - if (preserve.marker == NULL - || !bfd_preserve_save (abfd, &preserve)) - goto fail; - - if (bfd_mach_o_scan (abfd, &header, - (bfd_mach_o_data_struct *) preserve.marker) != 0) - goto wrong; - - bfd_preserve_finish (abfd, &preserve); - return abfd->xvec; - - wrong: - bfd_set_error (bfd_error_wrong_format); + return bfd_mach_o_header_p (abfd, 0, 0); +} - fail: - if (preserve.marker != NULL) - bfd_preserve_restore (abfd, &preserve); - return NULL; +static const bfd_target * +bfd_mach_o_gen_core_p (bfd *abfd) +{ + return bfd_mach_o_header_p (abfd, BFD_MACH_O_MH_CORE, 0); } typedef struct mach_o_fat_archentry @@ -1666,7 +2715,6 @@ typedef struct mach_o_fat_archentry unsigned long offset; unsigned long size; unsigned long align; - bfd *abfd; } mach_o_fat_archentry; typedef struct mach_o_fat_data_struct @@ -1683,8 +2731,8 @@ bfd_mach_o_archive_p (bfd *abfd) unsigned char buf[20]; unsigned long i; - bfd_seek (abfd, 0, SEEK_SET); - if (bfd_bread ((PTR) buf, 8, abfd) != 8) + if (bfd_seek (abfd, 0, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 8, abfd) != 8) goto error; adata = bfd_alloc (abfd, sizeof (mach_o_fat_data_struct)); @@ -1695,24 +2743,27 @@ bfd_mach_o_archive_p (bfd *abfd) adata->nfat_arch = bfd_getb32 (buf + 4); if (adata->magic != 0xcafebabe) goto error; + /* Avoid matching Java bytecode files, which have the same magic number. + In the Java bytecode file format this field contains the JVM version, + which starts at 43.0. */ + if (adata->nfat_arch > 30) + goto error; - adata->archentries = + adata->archentries = bfd_alloc (abfd, adata->nfat_arch * sizeof (mach_o_fat_archentry)); if (adata->archentries == NULL) goto error; for (i = 0; i < adata->nfat_arch; i++) { - bfd_seek (abfd, 8 + 20 * i, SEEK_SET); - - if (bfd_bread ((PTR) buf, 20, abfd) != 20) + if (bfd_seek (abfd, 8 + 20 * i, SEEK_SET) != 0 + || bfd_bread ((PTR) buf, 20, abfd) != 20) goto error; adata->archentries[i].cputype = bfd_getb32 (buf); adata->archentries[i].cpusubtype = bfd_getb32 (buf + 4); adata->archentries[i].offset = bfd_getb32 (buf + 8); adata->archentries[i].size = bfd_getb32 (buf + 12); adata->archentries[i].align = bfd_getb32 (buf + 16); - adata->archentries[i].abfd = NULL; } abfd->tdata.mach_o_fat_data = adata; @@ -1731,6 +2782,9 @@ bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev) mach_o_fat_data_struct *adata; mach_o_fat_archentry *entry = NULL; unsigned long i; + bfd *nbfd; + enum bfd_architecture arch_type; + unsigned long arch_subtype; adata = (mach_o_fat_data_struct *) archive->tdata.mach_o_fat_data; BFD_ASSERT (adata != NULL); @@ -1742,7 +2796,7 @@ bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev) { for (i = 0; i < adata->nfat_arch; i++) { - if (adata->archentries[i].abfd == prev) + if (adata->archentries[i].offset == prev->origin) break; } @@ -1762,25 +2816,95 @@ bfd_mach_o_openr_next_archived_file (bfd *archive, bfd *prev) } entry = &adata->archentries[i]; - if (entry->abfd == NULL) + nbfd = _bfd_new_bfd_contained_in (archive); + if (nbfd == NULL) + return NULL; + + nbfd->origin = entry->offset; + + bfd_mach_o_convert_architecture (entry->cputype, entry->cpusubtype, + &arch_type, &arch_subtype); + /* Create the member filename. + Use FILENAME:ARCH_NAME. */ + { + char *s = NULL; + const char *arch_name; + size_t arch_file_len = strlen (bfd_get_filename (archive)); + + arch_name = bfd_printable_arch_mach (arch_type, arch_subtype); + s = bfd_malloc (arch_file_len + 1 + strlen (arch_name) + 1); + if (s == NULL) + return NULL; + memcpy (s, bfd_get_filename (archive), arch_file_len); + s[arch_file_len] = ':'; + strcpy (s + arch_file_len + 1, arch_name); + nbfd->filename = s; + } + nbfd->iostream = NULL; + bfd_set_arch_mach (nbfd, arch_type, arch_subtype); + + return nbfd; +} + +/* If ABFD format is FORMAT and architecture is ARCH, return it. + If ABFD is a fat image containing a member that corresponds to FORMAT + and ARCH, returns it. + In other case, returns NULL. + This function allows transparent uses of fat images. */ +bfd * +bfd_mach_o_fat_extract (bfd *abfd, + bfd_format format, + const bfd_arch_info_type *arch) +{ + bfd *res; + mach_o_fat_data_struct *adata; + unsigned int i; + + if (bfd_check_format (abfd, format)) { - bfd *nbfd = _bfd_new_bfd_contained_in (archive); - char *s = NULL; + if (bfd_get_arch_info (abfd) == arch) + return abfd; + return NULL; + } + if (!bfd_check_format (abfd, bfd_archive) + || abfd->xvec != &mach_o_fat_vec) + return NULL; - if (nbfd == NULL) - return NULL; + /* This is a Mach-O fat image. */ + adata = (mach_o_fat_data_struct *) abfd->tdata.mach_o_fat_data; + BFD_ASSERT (adata != NULL); + + for (i = 0; i < adata->nfat_arch; i++) + { + struct mach_o_fat_archentry *e = &adata->archentries[i]; + enum bfd_architecture cpu_type; + unsigned long cpu_subtype; - nbfd->origin = entry->offset; - s = bfd_malloc (strlen (archive->filename) + 1); - if (s == NULL) + bfd_mach_o_convert_architecture (e->cputype, e->cpusubtype, + &cpu_type, &cpu_subtype); + if (cpu_type != arch->arch || cpu_subtype != arch->mach) + continue; + + /* The architecture is found. */ + res = _bfd_new_bfd_contained_in (abfd); + if (res == NULL) return NULL; - strcpy (s, archive->filename); - nbfd->filename = s; - nbfd->iostream = NULL; - entry->abfd = nbfd; + + res->origin = e->offset; + + res->filename = strdup (abfd->filename); + res->iostream = NULL; + + if (bfd_check_format (res, format)) + { + BFD_ASSERT (bfd_get_arch_info (res) == arch); + return res; + } + bfd_close (res); + return NULL; } - return entry->abfd; + return NULL; } int @@ -1789,7 +2913,7 @@ bfd_mach_o_lookup_section (bfd *abfd, bfd_mach_o_load_command **mcommand, bfd_mach_o_section **msection) { - struct mach_o_data_struct *md = abfd->tdata.mach_o_data; + struct mach_o_data_struct *md = bfd_mach_o_get_data (abfd); unsigned int i, j, num; bfd_mach_o_load_command *ncmd = NULL; @@ -1804,17 +2928,11 @@ bfd_mach_o_lookup_section (bfd *abfd, struct bfd_mach_o_load_command *cmd = &md->commands[i]; struct bfd_mach_o_segment_command *seg = NULL; - if (cmd->type != BFD_MACH_O_LC_SEGMENT) + if (cmd->type != BFD_MACH_O_LC_SEGMENT + || cmd->type != BFD_MACH_O_LC_SEGMENT_64) continue; seg = &cmd->command.segment; - if (seg->segment == section) - { - if (num == 0) - ncmd = cmd; - num++; - } - for (j = 0; j < seg->nsects; j++) { struct bfd_mach_o_section *sect = &seg->sections[j]; @@ -1822,7 +2940,10 @@ bfd_mach_o_lookup_section (bfd *abfd, if (sect->bfdsection == section) { if (num == 0) - nsect = sect; + { + nsect = sect; + ncmd = cmd; + } num++; } } @@ -1838,12 +2959,10 @@ bfd_mach_o_lookup_command (bfd *abfd, bfd_mach_o_load_command_type type, bfd_mach_o_load_command **mcommand) { - struct mach_o_data_struct *md = NULL; + struct mach_o_data_struct *md = bfd_mach_o_get_data (abfd); bfd_mach_o_load_command *ncmd = NULL; unsigned int i, num; - md = abfd->tdata.mach_o_data; - BFD_ASSERT (md != NULL); BFD_ASSERT (mcommand != NULL); @@ -1888,12 +3007,677 @@ bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type type) } } +typedef struct bfd_mach_o_xlat_name +{ + const char *name; + unsigned long val; +} +bfd_mach_o_xlat_name; + +static void +bfd_mach_o_print_flags (const bfd_mach_o_xlat_name *table, + unsigned long val, + FILE *file) +{ + int first = 1; + + for (; table->name; table++) + { + if (table->val & val) + { + if (!first) + fprintf (file, "+"); + fprintf (file, "%s", table->name); + val &= ~table->val; + first = 0; + } + } + if (val) + { + if (!first) + fprintf (file, "+"); + fprintf (file, "0x%lx", val); + return; + } + if (first) + fprintf (file, "-"); +} + +static const char * +bfd_mach_o_get_name (const bfd_mach_o_xlat_name *table, unsigned long val) +{ + for (; table->name; table++) + if (table->val == val) + return table->name; + return "*UNKNOWN*"; +} + +static bfd_mach_o_xlat_name bfd_mach_o_cpu_name[] = +{ + { "vax", BFD_MACH_O_CPU_TYPE_VAX}, + { "mc680x0", BFD_MACH_O_CPU_TYPE_MC680x0}, + { "i386", BFD_MACH_O_CPU_TYPE_I386}, + { "mips", BFD_MACH_O_CPU_TYPE_MIPS}, + { "mc98000", BFD_MACH_O_CPU_TYPE_MC98000}, + { "hppa", BFD_MACH_O_CPU_TYPE_HPPA}, + { "arm", BFD_MACH_O_CPU_TYPE_ARM}, + { "mc88000", BFD_MACH_O_CPU_TYPE_MC88000}, + { "sparc", BFD_MACH_O_CPU_TYPE_SPARC}, + { "i860", BFD_MACH_O_CPU_TYPE_I860}, + { "alpha", BFD_MACH_O_CPU_TYPE_ALPHA}, + { "powerpc", BFD_MACH_O_CPU_TYPE_POWERPC}, + { "powerpc_64", BFD_MACH_O_CPU_TYPE_POWERPC_64}, + { "x86_64", BFD_MACH_O_CPU_TYPE_X86_64}, + { NULL, 0} +}; + +static bfd_mach_o_xlat_name bfd_mach_o_filetype_name[] = +{ + { "object", BFD_MACH_O_MH_OBJECT}, + { "execute", BFD_MACH_O_MH_EXECUTE}, + { "fvmlib", BFD_MACH_O_MH_FVMLIB}, + { "core", BFD_MACH_O_MH_CORE}, + { "preload", BFD_MACH_O_MH_PRELOAD}, + { "dylib", BFD_MACH_O_MH_DYLIB}, + { "dylinker", BFD_MACH_O_MH_DYLINKER}, + { "bundle", BFD_MACH_O_MH_BUNDLE}, + { NULL, 0} +}; + +static bfd_mach_o_xlat_name bfd_mach_o_header_flags_name[] = +{ + { "noundefs", BFD_MACH_O_MH_NOUNDEFS }, + { "incrlink", BFD_MACH_O_MH_INCRLINK }, + { "dyldlink", BFD_MACH_O_MH_DYLDLINK }, + { "bindatload", BFD_MACH_O_MH_BINDATLOAD }, + { "prebound", BFD_MACH_O_MH_PREBOUND }, + { "split_segs", BFD_MACH_O_MH_SPLIT_SEGS }, + { "lazy_init", BFD_MACH_O_MH_LAZY_INIT }, + { "twolevel", BFD_MACH_O_MH_TWOLEVEL }, + { "force_flat", BFD_MACH_O_MH_FORCE_FLAT }, + { "nomultidefs", BFD_MACH_O_MH_NOMULTIDEFS }, + { "nofixprebinding", BFD_MACH_O_MH_NOFIXPREBINDING }, + { "prebindable", BFD_MACH_O_MH_PREBINDABLE }, + { "allmodsbound", BFD_MACH_O_MH_ALLMODSBOUND }, + { "subsections_via_symbols", BFD_MACH_O_MH_SUBSECTIONS_VIA_SYMBOLS }, + { "canonical", BFD_MACH_O_MH_CANONICAL }, + { "weak_defines", BFD_MACH_O_MH_WEAK_DEFINES }, + { "binds_to_weak", BFD_MACH_O_MH_BINDS_TO_WEAK }, + { "allow_stack_execution", BFD_MACH_O_MH_ALLOW_STACK_EXECUTION }, + { "root_safe", BFD_MACH_O_MH_ROOT_SAFE }, + { "setuid_safe", BFD_MACH_O_MH_SETUID_SAFE }, + { "no_reexported_dylibs", BFD_MACH_O_MH_NO_REEXPORTED_DYLIBS }, + { "pie", BFD_MACH_O_MH_PIE }, + { NULL, 0} +}; + +static bfd_mach_o_xlat_name bfd_mach_o_section_type_name[] = +{ + { "regular", BFD_MACH_O_S_REGULAR}, + { "zerofill", BFD_MACH_O_S_ZEROFILL}, + { "cstring_literals", BFD_MACH_O_S_CSTRING_LITERALS}, + { "4byte_literals", BFD_MACH_O_S_4BYTE_LITERALS}, + { "8byte_literals", BFD_MACH_O_S_8BYTE_LITERALS}, + { "literal_pointers", BFD_MACH_O_S_LITERAL_POINTERS}, + { "non_lazy_symbol_pointers", BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS}, + { "lazy_symbol_pointers", BFD_MACH_O_S_LAZY_SYMBOL_POINTERS}, + { "symbol_stubs", BFD_MACH_O_S_SYMBOL_STUBS}, + { "mod_init_func_pointers", BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS}, + { "mod_fini_func_pointers", BFD_MACH_O_S_MOD_FINI_FUNC_POINTERS}, + { "coalesced", BFD_MACH_O_S_COALESCED}, + { "gb_zerofill", BFD_MACH_O_S_GB_ZEROFILL}, + { "interposing", BFD_MACH_O_S_INTERPOSING}, + { "16byte_literals", BFD_MACH_O_S_16BYTE_LITERALS}, + { "dtrace_dof", BFD_MACH_O_S_DTRACE_DOF}, + { "lazy_dylib_symbol_pointers", BFD_MACH_O_S_LAZY_DYLIB_SYMBOL_POINTERS}, + { NULL, 0} +}; + +static bfd_mach_o_xlat_name bfd_mach_o_section_attribute_name[] = +{ + { "loc_reloc", BFD_MACH_O_S_ATTR_LOC_RELOC }, + { "ext_reloc", BFD_MACH_O_S_ATTR_EXT_RELOC }, + { "some_instructions", BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS }, + { "debug", BFD_MACH_O_S_ATTR_DEBUG }, + { "modifying_code", BFD_MACH_O_S_SELF_MODIFYING_CODE }, + { "live_support", BFD_MACH_O_S_ATTR_LIVE_SUPPORT }, + { "no_dead_strip", BFD_MACH_O_S_ATTR_NO_DEAD_STRIP }, + { "strip_static_syms", BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS }, + { "no_toc", BFD_MACH_O_S_ATTR_NO_TOC }, + { "pure_instructions", BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS }, + { NULL, 0} +}; + +static bfd_mach_o_xlat_name bfd_mach_o_load_command_name[] = +{ + { "segment", BFD_MACH_O_LC_SEGMENT}, + { "symtab", BFD_MACH_O_LC_SYMTAB}, + { "symseg", BFD_MACH_O_LC_SYMSEG}, + { "thread", BFD_MACH_O_LC_THREAD}, + { "unixthread", BFD_MACH_O_LC_UNIXTHREAD}, + { "loadfvmlib", BFD_MACH_O_LC_LOADFVMLIB}, + { "idfvmlib", BFD_MACH_O_LC_IDFVMLIB}, + { "ident", BFD_MACH_O_LC_IDENT}, + { "fvmfile", BFD_MACH_O_LC_FVMFILE}, + { "prepage", BFD_MACH_O_LC_PREPAGE}, + { "dysymtab", BFD_MACH_O_LC_DYSYMTAB}, + { "load_dylib", BFD_MACH_O_LC_LOAD_DYLIB}, + { "id_dylib", BFD_MACH_O_LC_ID_DYLIB}, + { "load_dylinker", BFD_MACH_O_LC_LOAD_DYLINKER}, + { "id_dylinker", BFD_MACH_O_LC_ID_DYLINKER}, + { "prebound_dylib", BFD_MACH_O_LC_PREBOUND_DYLIB}, + { "routines", BFD_MACH_O_LC_ROUTINES}, + { "sub_framework", BFD_MACH_O_LC_SUB_FRAMEWORK}, + { "sub_umbrella", BFD_MACH_O_LC_SUB_UMBRELLA}, + { "sub_client", BFD_MACH_O_LC_SUB_CLIENT}, + { "sub_library", BFD_MACH_O_LC_SUB_LIBRARY}, + { "twolevel_hints", BFD_MACH_O_LC_TWOLEVEL_HINTS}, + { "prebind_cksum", BFD_MACH_O_LC_PREBIND_CKSUM}, + { "load_weak_dylib", BFD_MACH_O_LC_LOAD_WEAK_DYLIB}, + { "segment_64", BFD_MACH_O_LC_SEGMENT_64}, + { "routines_64", BFD_MACH_O_LC_ROUTINES_64}, + { "uuid", BFD_MACH_O_LC_UUID}, + { "rpath", BFD_MACH_O_LC_RPATH}, + { "code_signature", BFD_MACH_O_LC_CODE_SIGNATURE}, + { "segment_split_info", BFD_MACH_O_LC_SEGMENT_SPLIT_INFO}, + { "reexport_dylib", BFD_MACH_O_LC_REEXPORT_DYLIB}, + { "lazy_load_dylib", BFD_MACH_O_LC_LAZY_LOAD_DYLIB}, + { "encryption_info", BFD_MACH_O_LC_ENCRYPTION_INFO}, + { NULL, 0} +}; + +static void +bfd_mach_o_print_private_header (bfd *abfd, FILE *file) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + bfd_mach_o_header *h = &mdata->header; + + fprintf (file, _("Mach-O header:\n")); + fprintf (file, _(" magic : %08lx\n"), h->magic); + fprintf (file, _(" cputype : %08lx (%s)\n"), h->cputype, + bfd_mach_o_get_name (bfd_mach_o_cpu_name, h->cputype)); + fprintf (file, _(" cpusubtype: %08lx\n"), h->cpusubtype); + fprintf (file, _(" filetype : %08lx (%s)\n"), + h->filetype, + bfd_mach_o_get_name (bfd_mach_o_filetype_name, h->filetype)); + fprintf (file, _(" ncmds : %08lx\n"), h->ncmds); + fprintf (file, _(" sizeofcmds: %08lx\n"), h->sizeofcmds); + fprintf (file, _(" flags : %08lx ("), h->flags); + bfd_mach_o_print_flags (bfd_mach_o_header_flags_name, h->flags, file); + fprintf (file, _(")\n")); + fprintf (file, _(" reserved : %08x\n"), h->reserved); +} + +static void +bfd_mach_o_print_section_map (bfd *abfd, FILE *file) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + unsigned int i, j; + unsigned int sec_nbr = 0; + + fprintf (file, _("Segments and Sections:\n")); + fprintf (file, _(" #: Segment name Section name Address\n")); + + for (i = 0; i < mdata->header.ncmds; i++) + { + bfd_mach_o_segment_command *seg; + + if (mdata->commands[i].type != BFD_MACH_O_LC_SEGMENT + && mdata->commands[i].type != BFD_MACH_O_LC_SEGMENT_64) + continue; + + seg = &mdata->commands[i].command.segment; + + fprintf (file, "[Segment %-16s ", seg->segname); + fprintf_vma (file, seg->vmaddr); + fprintf (file, "-"); + fprintf_vma (file, seg->vmaddr + seg->vmsize - 1); + fputc (' ', file); + fputc (seg->initprot & BFD_MACH_O_PROT_READ ? 'r' : '-', file); + fputc (seg->initprot & BFD_MACH_O_PROT_WRITE ? 'w' : '-', file); + fputc (seg->initprot & BFD_MACH_O_PROT_EXECUTE ? 'x' : '-', file); + fprintf (file, "]\n"); + for (j = 0; j < seg->nsects; j++) + { + bfd_mach_o_section *sec = &seg->sections[j]; + fprintf (file, "%02u: %-16s %-16s ", ++sec_nbr, + sec->segname, sec->sectname); + fprintf_vma (file, sec->addr); + fprintf (file, " "); + fprintf_vma (file, sec->size); + fprintf (file, " %08lx\n", sec->flags); + } + } +} + +/* Return the number of indirect symbols for a section. + Must be called only for symbol pointer section and symbol stubs + sections. */ + +static unsigned int +bfd_mach_o_section_get_nbr_indirect (bfd *abfd, bfd_mach_o_section *sec) +{ + unsigned int elsz; + + switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK) + { + case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS: + case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS: + elsz = bfd_mach_o_wide_p (abfd) ? 8 : 4; + return sec->size / elsz; + case BFD_MACH_O_S_SYMBOL_STUBS: + elsz = sec->reserved2; + if (elsz) + return sec->size / elsz; + else + return 0; + default: + BFD_FAIL (); + return 0; + } +} + +static void +bfd_mach_o_print_section (bfd *abfd ATTRIBUTE_UNUSED, + bfd_mach_o_section *sec, FILE *file) +{ + fprintf (file, " Section: %-16s %-16s (bfdname: %s)\n", + sec->sectname, sec->segname, sec->bfdsection->name); + fprintf (file, " addr: "); + fprintf_vma (file, sec->addr); + fprintf (file, " size: "); + fprintf_vma (file, sec->size); + fprintf (file, " offset: "); + fprintf_vma (file, sec->offset); + fprintf (file, "\n"); + fprintf (file, " align: %ld", sec->align); + fprintf (file, " nreloc: %lu reloff: ", sec->nreloc); + fprintf_vma (file, sec->reloff); + fprintf (file, "\n"); + fprintf (file, " flags: %08lx (type: %s", sec->flags, + bfd_mach_o_get_name (bfd_mach_o_section_type_name, + sec->flags & BFD_MACH_O_SECTION_TYPE_MASK)); + fprintf (file, " attr: "); + bfd_mach_o_print_flags (bfd_mach_o_section_attribute_name, + sec->flags & BFD_MACH_O_SECTION_ATTRIBUTES_MASK, + file); + fprintf (file, ")\n"); + switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK) + { + case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS: + case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS: + case BFD_MACH_O_S_SYMBOL_STUBS: + fprintf (file, " first indirect sym: %lu", sec->reserved1); + fprintf (file, " (%u entries)", + bfd_mach_o_section_get_nbr_indirect (abfd, sec)); + break; + default: + fprintf (file, " reserved1: 0x%lx", sec->reserved1); + break; + } + switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK) + { + case BFD_MACH_O_S_SYMBOL_STUBS: + fprintf (file, " stub size: %lu", sec->reserved2); + break; + default: + fprintf (file, " reserved2: 0x%lx", sec->reserved2); + break; + } + fprintf (file, " reserved3: 0x%lx\n", sec->reserved3); +} + +static void +bfd_mach_o_print_segment (bfd *abfd ATTRIBUTE_UNUSED, + bfd_mach_o_load_command *cmd, FILE *file) +{ + bfd_mach_o_segment_command *seg = &cmd->command.segment; + unsigned int i; + + fprintf (file, " name: %s\n", *seg->segname ? seg->segname : "*none*"); + fprintf (file, " vmaddr: "); + fprintf_vma (file, seg->vmaddr); + fprintf (file, " vmsize: "); + fprintf_vma (file, seg->vmsize); + fprintf (file, "\n"); + fprintf (file, " fileoff: "); + fprintf_vma (file, seg->fileoff); + fprintf (file, " filesize: "); + fprintf_vma (file, (bfd_vma)seg->filesize); + fprintf (file, " endoff: "); + fprintf_vma (file, (bfd_vma)(seg->fileoff + seg->filesize)); + fprintf (file, "\n"); + fprintf (file, " nsects: %lu ", seg->nsects); + fprintf (file, " flags: %lx\n", seg->flags); + for (i = 0; i < seg->nsects; i++) + bfd_mach_o_print_section (abfd, &seg->sections[i], file); +} + +static void +bfd_mach_o_print_dysymtab (bfd *abfd ATTRIBUTE_UNUSED, + bfd_mach_o_load_command *cmd, FILE *file) +{ + bfd_mach_o_dysymtab_command *dysymtab = &cmd->command.dysymtab; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + unsigned int i; + + fprintf (file, " local symbols: idx: %10lu num: %-8lu", + dysymtab->ilocalsym, dysymtab->nlocalsym); + fprintf (file, " (nxtidx: %lu)\n", + dysymtab->ilocalsym + dysymtab->nlocalsym); + fprintf (file, " external symbols: idx: %10lu num: %-8lu", + dysymtab->iextdefsym, dysymtab->nextdefsym); + fprintf (file, " (nxtidx: %lu)\n", + dysymtab->iextdefsym + dysymtab->nextdefsym); + fprintf (file, " undefined symbols: idx: %10lu num: %-8lu", + dysymtab->iundefsym, dysymtab->nundefsym); + fprintf (file, " (nxtidx: %lu)\n", + dysymtab->iundefsym + dysymtab->nundefsym); + fprintf (file, " table of content: off: 0x%08lx num: %-8lu", + dysymtab->tocoff, dysymtab->ntoc); + fprintf (file, " (endoff: 0x%08lx)\n", + dysymtab->tocoff + + dysymtab->ntoc * BFD_MACH_O_TABLE_OF_CONTENT_SIZE); + fprintf (file, " module table: off: 0x%08lx num: %-8lu", + dysymtab->modtaboff, dysymtab->nmodtab); + fprintf (file, " (endoff: 0x%08lx)\n", + dysymtab->modtaboff + dysymtab->nmodtab + * (mach_o_wide_p (&mdata->header) ? + BFD_MACH_O_DYLIB_MODULE_64_SIZE : BFD_MACH_O_DYLIB_MODULE_SIZE)); + fprintf (file, " external reference table: off: 0x%08lx num: %-8lu", + dysymtab->extrefsymoff, dysymtab->nextrefsyms); + fprintf (file, " (endoff: 0x%08lx)\n", + dysymtab->extrefsymoff + + dysymtab->nextrefsyms * BFD_MACH_O_REFERENCE_SIZE); + fprintf (file, " indirect symbol table: off: 0x%08lx num: %-8lu", + dysymtab->indirectsymoff, dysymtab->nindirectsyms); + fprintf (file, " (endoff: 0x%08lx)\n", + dysymtab->indirectsymoff + + dysymtab->nindirectsyms * BFD_MACH_O_INDIRECT_SYMBOL_SIZE); + fprintf (file, " external relocation table: off: 0x%08lx num: %-8lu", + dysymtab->extreloff, dysymtab->nextrel); + fprintf (file, " (endoff: 0x%08lx)\n", + dysymtab->extreloff + dysymtab->nextrel * BFD_MACH_O_RELENT_SIZE); + fprintf (file, " local relocation table: off: 0x%08lx num: %-8lu", + dysymtab->locreloff, dysymtab->nlocrel); + fprintf (file, " (endoff: 0x%08lx)\n", + dysymtab->locreloff + dysymtab->nlocrel * BFD_MACH_O_RELENT_SIZE); + + if (dysymtab->ntoc > 0 + || dysymtab->nindirectsyms > 0 + || dysymtab->nextrefsyms > 0) + { + /* Try to read the symbols to display the toc or indirect symbols. */ + bfd_mach_o_scan_read_symtab_symbols (abfd); + } + else if (dysymtab->nmodtab > 0) + { + /* Try to read the strtab to display modules name. */ + bfd_mach_o_scan_read_symtab_strtab (abfd); + } + + for (i = 0; i < dysymtab->nmodtab; i++) + { + bfd_mach_o_dylib_module *module = &dysymtab->dylib_module[i]; + fprintf (file, " module %u:\n", i); + fprintf (file, " name: %lu", module->module_name_idx); + if (mdata->symtab && mdata->symtab->strtab) + fprintf (file, ": %s", + mdata->symtab->strtab + module->module_name_idx); + fprintf (file, "\n"); + fprintf (file, " extdefsym: idx: %8lu num: %lu\n", + module->iextdefsym, module->nextdefsym); + fprintf (file, " refsym: idx: %8lu num: %lu\n", + module->irefsym, module->nrefsym); + fprintf (file, " localsym: idx: %8lu num: %lu\n", + module->ilocalsym, module->nlocalsym); + fprintf (file, " extrel: idx: %8lu num: %lu\n", + module->iextrel, module->nextrel); + fprintf (file, " init: idx: %8u num: %u\n", + module->iinit, module->ninit); + fprintf (file, " term: idx: %8u num: %u\n", + module->iterm, module->nterm); + fprintf (file, " objc_module_info: addr: "); + fprintf_vma (file, module->objc_module_info_addr); + fprintf (file, " size: %lu\n", module->objc_module_info_size); + } + + if (dysymtab->ntoc > 0) + { + bfd_mach_o_symtab_command *symtab = mdata->symtab; + + fprintf (file, " table of content: (symbol/module)\n"); + for (i = 0; i < dysymtab->ntoc; i++) + { + bfd_mach_o_dylib_table_of_content *toc = &dysymtab->dylib_toc[i]; + + fprintf (file, " %4u: ", i); + if (symtab && symtab->symbols && toc->symbol_index < symtab->nsyms) + { + const char *name = symtab->symbols[toc->symbol_index].symbol.name; + fprintf (file, "%s (%lu)", name ? name : "*invalid*", + toc->symbol_index); + } + else + fprintf (file, "%lu", toc->symbol_index); + + fprintf (file, " / "); + if (symtab && symtab->strtab + && toc->module_index < dysymtab->nmodtab) + { + bfd_mach_o_dylib_module *mod; + mod = &dysymtab->dylib_module[toc->module_index]; + fprintf (file, "%s (%lu)", + symtab->strtab + mod->module_name_idx, + toc->module_index); + } + else + fprintf (file, "%lu", toc->module_index); + + fprintf (file, "\n"); + } + } + + if (dysymtab->nindirectsyms != 0) + { + fprintf (file, " indirect symbols:\n"); + + for (i = 0; i < mdata->nsects; i++) + { + bfd_mach_o_section *sec = mdata->sections[i]; + unsigned int j, first, last; + bfd_mach_o_symtab_command *symtab = mdata->symtab; + + switch (sec->flags & BFD_MACH_O_SECTION_TYPE_MASK) + { + case BFD_MACH_O_S_NON_LAZY_SYMBOL_POINTERS: + case BFD_MACH_O_S_LAZY_SYMBOL_POINTERS: + case BFD_MACH_O_S_SYMBOL_STUBS: + first = sec->reserved1; + last = first + bfd_mach_o_section_get_nbr_indirect (abfd, sec); + fprintf (file, " for section %s.%s:\n", + sec->segname, sec->sectname); + for (j = first; j < last; j++) + { + unsigned int isym = dysymtab->indirect_syms[j]; + + fprintf (file, " %5u: 0x%08x (%u)", j, isym, isym); + if (isym & BFD_MACH_O_INDIRECT_SYMBOL_LOCAL) + fprintf (file, " LOCAL"); + if (isym & BFD_MACH_O_INDIRECT_SYMBOL_ABS) + fprintf (file, " ABSOLUTE"); + if (symtab && symtab->symbols + && isym < symtab->nsyms + && symtab->symbols[isym].symbol.name) + fprintf (file, " %s", symtab->symbols[isym].symbol.name); + fprintf (file, "\n"); + } + break; + default: + break; + } + } + } + if (dysymtab->nextrefsyms > 0) + { + bfd_mach_o_symtab_command *symtab = mdata->symtab; + + fprintf (file, " external reference table: (symbol flags)\n"); + for (i = 0; i < dysymtab->nextrefsyms; i++) + { + bfd_mach_o_dylib_reference *ref = &dysymtab->ext_refs[i]; + + fprintf (file, " %4u: %5lu 0x%02lx", i, ref->isym, ref->flags); + if (symtab && symtab->symbols + && ref->isym < symtab->nsyms + && symtab->symbols[ref->isym].symbol.name) + fprintf (file, " %s", symtab->symbols[ref->isym].symbol.name); + fprintf (file, "\n"); + } + } + +} + +bfd_boolean +bfd_mach_o_bfd_print_private_bfd_data (bfd *abfd, PTR ptr) +{ + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); + FILE *file = (FILE *) ptr; + unsigned int i; + + bfd_mach_o_print_private_header (abfd, file); + fputc ('\n', file); + + for (i = 0; i < mdata->header.ncmds; i++) + { + bfd_mach_o_load_command *cmd = &mdata->commands[i]; + + fprintf (file, "Load command %s:", + bfd_mach_o_get_name (bfd_mach_o_load_command_name, cmd->type)); + switch (cmd->type) + { + case BFD_MACH_O_LC_SEGMENT: + case BFD_MACH_O_LC_SEGMENT_64: + bfd_mach_o_print_segment (abfd, cmd, file); + break; + case BFD_MACH_O_LC_UUID: + { + bfd_mach_o_uuid_command *uuid = &cmd->command.uuid; + unsigned int i; + + for (i = 0; i < sizeof (uuid->uuid); i++) + fprintf (file, " %02x", uuid->uuid[i]); + fputc ('\n', file); + } + break; + case BFD_MACH_O_LC_LOAD_DYLIB: + case BFD_MACH_O_LC_LOAD_WEAK_DYLIB: + case BFD_MACH_O_LC_REEXPORT_DYLIB: + case BFD_MACH_O_LC_ID_DYLIB: + { + bfd_mach_o_dylib_command *dylib = &cmd->command.dylib; + fprintf (file, " %s\n", dylib->name_str); + fprintf (file, " time stamp: 0x%08lx\n", + dylib->timestamp); + fprintf (file, " current version: 0x%08lx\n", + dylib->current_version); + fprintf (file, " comptibility version: 0x%08lx\n", + dylib->compatibility_version); + break; + } + case BFD_MACH_O_LC_LOAD_DYLINKER: + case BFD_MACH_O_LC_ID_DYLINKER: + fprintf (file, " %s\n", cmd->command.dylinker.name_str); + break; + case BFD_MACH_O_LC_SYMTAB: + { + bfd_mach_o_symtab_command *symtab = &cmd->command.symtab; + fprintf (file, + "\n" + " symoff: 0x%08x nsyms: %8u (endoff: 0x%08x)\n", + symtab->symoff, symtab->nsyms, + symtab->symoff + symtab->nsyms + * (mach_o_wide_p (&mdata->header) + ? BFD_MACH_O_NLIST_64_SIZE : BFD_MACH_O_NLIST_SIZE)); + fprintf (file, + " stroff: 0x%08x strsize: %8u (endoff: 0x%08x)\n", + symtab->stroff, symtab->strsize, + symtab->stroff + symtab->strsize); + break; + } + case BFD_MACH_O_LC_DYSYMTAB: + fprintf (file, "\n"); + bfd_mach_o_print_dysymtab (abfd, cmd, file); + break; + case BFD_MACH_O_LC_CODE_SIGNATURE: + case BFD_MACH_O_LC_SEGMENT_SPLIT_INFO: + { + bfd_mach_o_linkedit_command *linkedit = &cmd->command.linkedit; + fprintf + (file, "\n" + " dataoff: 0x%08lx datasize: 0x%08lx (endoff: 0x%08lx)\n", + linkedit->dataoff, linkedit->datasize, + linkedit->dataoff + linkedit->datasize); + break; + } + case BFD_MACH_O_LC_SUB_FRAMEWORK: + case BFD_MACH_O_LC_SUB_UMBRELLA: + case BFD_MACH_O_LC_SUB_LIBRARY: + case BFD_MACH_O_LC_SUB_CLIENT: + { + bfd_mach_o_str_command *str = &cmd->command.str; + fprintf (file, " %s\n", str->str); + break; + } + case BFD_MACH_O_LC_THREAD: + case BFD_MACH_O_LC_UNIXTHREAD: + { + bfd_mach_o_thread_command *thread = &cmd->command.thread; + unsigned int j; + bfd_mach_o_backend_data *bed = bfd_mach_o_get_backend_data (abfd); + + fprintf (file, " nflavours: %lu\n", thread->nflavours); + for (j = 0; j < thread->nflavours; j++) + { + bfd_mach_o_thread_flavour *flavour = &thread->flavours[j]; + + fprintf (file, " %2u: flavour: 0x%08lx offset: 0x%08lx" + " size: 0x%08lx\n", + j, flavour->flavour, flavour->offset, + flavour->size); + if (bed->_bfd_mach_o_print_thread) + { + char *buf = bfd_malloc (flavour->size); + + if (buf + && bfd_seek (abfd, flavour->offset, SEEK_SET) == 0 + && (bfd_bread (buf, flavour->size, abfd) + == flavour->size)) + (*bed->_bfd_mach_o_print_thread)(abfd, flavour, + file, buf); + free (buf); + } + } + break; + } + default: + fprintf (file, "\n"); + break; + } + fputc ('\n', file); + } + + bfd_mach_o_print_section_map (abfd, file); + + return TRUE; +} + int bfd_mach_o_core_fetch_environment (bfd *abfd, unsigned char **rbuf, unsigned int *rlen) { - bfd_mach_o_data_struct *mdata = abfd->tdata.mach_o_data; + bfd_mach_o_data_struct *mdata = bfd_mach_o_get_data (abfd); unsigned long stackaddr = bfd_mach_o_stack_addr (mdata->header.cputype); unsigned int i = 0; @@ -1923,13 +3707,23 @@ bfd_mach_o_core_fetch_environment (bfd *abfd, if (size > (end - start)) size = (end - start); - buf = bfd_realloc (buf, size); + buf = bfd_realloc_or_free (buf, size); + if (buf == NULL) + return -1; + + if (bfd_seek (abfd, end - size, SEEK_SET) != 0) + { + free (buf); + return -1; + } - bfd_seek (abfd, end - size, SEEK_SET); nread = bfd_bread (buf, size, abfd); if (nread != size) - return -1; + { + free (buf); + return -1; + } for (offset = 4; offset <= size; offset += 4) { @@ -1952,6 +3746,7 @@ bfd_mach_o_core_fetch_environment (bfd *abfd, *rlen = top - bottom; memcpy (*rbuf, buf + size - *rlen, *rlen); + free (buf); return 0; } } @@ -1961,6 +3756,8 @@ bfd_mach_o_core_fetch_environment (bfd *abfd, size *= 2; } + + free (buf); } } @@ -1987,11 +3784,17 @@ bfd_mach_o_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED) return 0; } +#define bfd_mach_o_bfd_reloc_type_lookup _bfd_norelocs_bfd_reloc_type_lookup +#define bfd_mach_o_bfd_reloc_name_lookup _bfd_norelocs_bfd_reloc_name_lookup + +#define bfd_mach_o_swap_reloc_in NULL +#define bfd_mach_o_swap_reloc_out NULL +#define bfd_mach_o_print_thread NULL + #define TARGET_NAME mach_o_be_vec #define TARGET_STRING "mach-o-be" #define TARGET_BIG_ENDIAN 1 #define TARGET_ARCHIVE 0 - #include "mach-o-target.c" #undef TARGET_NAME diff --git a/bfd/mach-o.h b/bfd/mach-o.h index a504539..0f48324 100644 --- a/bfd/mach-o.h +++ b/bfd/mach-o.h @@ -1,5 +1,5 @@ /* Mach-O support for BFD. - Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007 + Copyright 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -24,39 +24,71 @@ #include "bfd.h" +/* Symbol n_type values. */ #define BFD_MACH_O_N_STAB 0xe0 /* If any of these bits set, a symbolic debugging entry. */ #define BFD_MACH_O_N_PEXT 0x10 /* Private external symbol bit. */ #define BFD_MACH_O_N_TYPE 0x0e /* Mask for the type bits. */ #define BFD_MACH_O_N_EXT 0x01 /* External symbol bit, set for external symbols. */ #define BFD_MACH_O_N_UNDF 0x00 /* Undefined, n_sect == NO_SECT. */ #define BFD_MACH_O_N_ABS 0x02 /* Absolute, n_sect == NO_SECT. */ -#define BFD_MACH_O_N_SECT 0x0e /* Defined in section number n_sect. */ -#define BFD_MACH_O_N_PBUD 0x0c /* Prebound undefined (defined in a dylib). */ #define BFD_MACH_O_N_INDR 0x0a /* Indirect. */ +#define BFD_MACH_O_N_PBUD 0x0c /* Prebound undefined (defined in a dylib). */ +#define BFD_MACH_O_N_SECT 0x0e /* Defined in section number n_sect. */ + +#define BFD_MACH_O_NO_SECT 0 /* Symbol not in any section of the image. */ + +/* Symbol n_desc reference flags. */ +#define BFD_MACH_O_REFERENCE_MASK 0x0f +#define BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_NON_LAZY 0x00 +#define BFD_MACH_O_REFERENCE_FLAG_UNDEFINED_LAZY 0x01 +#define BFD_MACH_O_REFERENCE_FLAG_DEFINED 0x02 +#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_DEFINED 0x03 +#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY 0x04 +#define BFD_MACH_O_REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY 0x05 + +#define BFD_MACH_O_REFERENCED_DYNAMICALLY 0x10 +#define BFD_MACH_O_N_DESC_DISCARDED 0x20 +#define BFD_MACH_O_N_NO_DEAD_STRIP 0x20 +#define BFD_MACH_O_N_WEAK_REF 0x40 +#define BFD_MACH_O_N_WEAK_DEF 0x80 + +typedef enum bfd_mach_o_mach_header_magic +{ + BFD_MACH_O_MH_MAGIC = 0xfeedface, + BFD_MACH_O_MH_CIGAM = 0xcefaedfe, + BFD_MACH_O_MH_MAGIC_64 = 0xfeedfacf, + BFD_MACH_O_MH_CIGAM_64 = 0xcffaedfe +} +bfd_mach_o_mach_header_magic; typedef enum bfd_mach_o_ppc_thread_flavour { - BFD_MACH_O_PPC_THREAD_STATE = 1, - BFD_MACH_O_PPC_FLOAT_STATE = 2, - BFD_MACH_O_PPC_EXCEPTION_STATE = 3, - BFD_MACH_O_PPC_VECTOR_STATE = 4 + BFD_MACH_O_PPC_THREAD_STATE = 1, + BFD_MACH_O_PPC_FLOAT_STATE = 2, + BFD_MACH_O_PPC_EXCEPTION_STATE = 3, + BFD_MACH_O_PPC_VECTOR_STATE = 4, + BFD_MACH_O_PPC_THREAD_STATE64 = 5, + BFD_MACH_O_PPC_EXCEPTION_STATE64 = 6, + BFD_MACH_O_PPC_THREAD_STATE_NONE = 7 } bfd_mach_o_ppc_thread_flavour; +/* Defined in */ typedef enum bfd_mach_o_i386_thread_flavour { - BFD_MACH_O_i386_NEW_THREAD_STATE = 1, - BFD_MACH_O_i386_FLOAT_STATE = 2, - BFD_MACH_O_i386_ISA_PORT_MAP_STATE = 3, - BFD_MACH_O_i386_V86_ASSIST_STATE = 4, - BFD_MACH_O_i386_REGS_SEGS_STATE = 5, - BFD_MACH_O_i386_THREAD_SYSCALL_STATE = 6, - BFD_MACH_O_i386_THREAD_STATE_NONE = 7, - BFD_MACH_O_i386_SAVED_STATE = 8, - BFD_MACH_O_i386_THREAD_STATE = -1, - BFD_MACH_O_i386_THREAD_FPSTATE = -2, - BFD_MACH_O_i386_THREAD_EXCEPTSTATE = -3, - BFD_MACH_O_i386_THREAD_CTHREADSTATE = -4, + BFD_MACH_O_x86_THREAD_STATE32 = 1, + BFD_MACH_O_x86_FLOAT_STATE32 = 2, + BFD_MACH_O_x86_EXCEPTION_STATE32 = 3, + BFD_MACH_O_x86_THREAD_STATE64 = 4, + BFD_MACH_O_x86_FLOAT_STATE64 = 5, + BFD_MACH_O_x86_EXCEPTION_STATE64 = 6, + BFD_MACH_O_x86_THREAD_STATE = 7, + BFD_MACH_O_x86_FLOAT_STATE = 8, + BFD_MACH_O_x86_EXCEPTION_STATE = 9, + BFD_MACH_O_x86_DEBUG_STATE32 = 10, + BFD_MACH_O_x86_DEBUG_STATE64 = 11, + BFD_MACH_O_x86_DEBUG_STATE = 12, + BFD_MACH_O_x86_THREAD_STATE_NONE = 13 } bfd_mach_o_i386_thread_flavour; @@ -89,10 +121,23 @@ typedef enum bfd_mach_o_load_command_type BFD_MACH_O_LC_PREBIND_CKSUM = 0x17, /* Prebind checksum. */ /* Load a dynamically linked shared library that is allowed to be missing (weak). */ - BFD_MACH_O_LC_LOAD_WEAK_DYLIB = 0x18 + BFD_MACH_O_LC_LOAD_WEAK_DYLIB = 0x18, + BFD_MACH_O_LC_SEGMENT_64 = 0x19, /* 64-bit segment of this file to be + mapped. */ + BFD_MACH_O_LC_ROUTINES_64 = 0x1a, /* Address of the dyld init routine + in a dylib. */ + BFD_MACH_O_LC_UUID = 0x1b, /* 128-bit UUID of the executable. */ + BFD_MACH_O_LC_RPATH = 0x1c, /* Run path addiions. */ + BFD_MACH_O_LC_CODE_SIGNATURE = 0x1d, /* Local of code signature. */ + BFD_MACH_O_LC_SEGMENT_SPLIT_INFO = 0x1e, /* Local of info to split seg. */ + BFD_MACH_O_LC_REEXPORT_DYLIB = 0x1f, /* Load and re-export lib. */ + BFD_MACH_O_LC_LAZY_LOAD_DYLIB = 0x20, /* Delay load of lib until use. */ + BFD_MACH_O_LC_ENCRYPTION_INFO = 0x21 /* Encrypted segment info. */ } bfd_mach_o_load_command_type; +#define BFD_MACH_O_CPU_IS64BIT 0x1000000 + typedef enum bfd_mach_o_cpu_type { BFD_MACH_O_CPU_TYPE_VAX = 1, @@ -106,10 +151,18 @@ typedef enum bfd_mach_o_cpu_type BFD_MACH_O_CPU_TYPE_SPARC = 14, BFD_MACH_O_CPU_TYPE_I860 = 15, BFD_MACH_O_CPU_TYPE_ALPHA = 16, - BFD_MACH_O_CPU_TYPE_POWERPC = 18 + BFD_MACH_O_CPU_TYPE_POWERPC = 18, + BFD_MACH_O_CPU_TYPE_POWERPC_64 = (BFD_MACH_O_CPU_TYPE_POWERPC | BFD_MACH_O_CPU_IS64BIT), + BFD_MACH_O_CPU_TYPE_X86_64 = (BFD_MACH_O_CPU_TYPE_I386 | BFD_MACH_O_CPU_IS64BIT) } bfd_mach_o_cpu_type; +typedef enum bfd_mach_o_cpu_subtype +{ + BFD_MACH_O_CPU_SUBTYPE_X86_ALL = 3 +} +bfd_mach_o_cpu_subtype; + typedef enum bfd_mach_o_filetype { BFD_MACH_O_MH_OBJECT = 1, @@ -123,6 +176,33 @@ typedef enum bfd_mach_o_filetype } bfd_mach_o_filetype; +typedef enum bfd_mach_o_header_flags +{ + BFD_MACH_O_MH_NOUNDEFS = 0x000001, + BFD_MACH_O_MH_INCRLINK = 0x000002, + BFD_MACH_O_MH_DYLDLINK = 0x000004, + BFD_MACH_O_MH_BINDATLOAD = 0x000008, + BFD_MACH_O_MH_PREBOUND = 0x000010, + BFD_MACH_O_MH_SPLIT_SEGS = 0x000020, + BFD_MACH_O_MH_LAZY_INIT = 0x000040, + BFD_MACH_O_MH_TWOLEVEL = 0x000080, + BFD_MACH_O_MH_FORCE_FLAT = 0x000100, + BFD_MACH_O_MH_NOMULTIDEFS = 0x000200, + BFD_MACH_O_MH_NOFIXPREBINDING = 0x000400, + BFD_MACH_O_MH_PREBINDABLE = 0x000800, + BFD_MACH_O_MH_ALLMODSBOUND = 0x001000, + BFD_MACH_O_MH_SUBSECTIONS_VIA_SYMBOLS = 0x002000, + BFD_MACH_O_MH_CANONICAL = 0x004000, + BFD_MACH_O_MH_WEAK_DEFINES = 0x008000, + BFD_MACH_O_MH_BINDS_TO_WEAK = 0x010000, + BFD_MACH_O_MH_ALLOW_STACK_EXECUTION = 0x020000, + BFD_MACH_O_MH_ROOT_SAFE = 0x040000, + BFD_MACH_O_MH_SETUID_SAFE = 0x080000, + BFD_MACH_O_MH_NO_REEXPORTED_DYLIBS = 0x100000, + BFD_MACH_O_MH_PIE = 0x200000 +} +bfd_mach_o_header_flags; + /* Constants for the type of a section. */ typedef enum bfd_mach_o_section_type @@ -164,15 +244,85 @@ typedef enum bfd_mach_o_section_type /* Section with only lazy symbol pointers. */ BFD_MACH_O_S_LAZY_SYMBOL_POINTERS = 0x7, - /* Section with only symbol stubs, byte size of stub in the reserved2 field. */ + /* Section with only symbol stubs, byte size of stub in the reserved2 + field. */ BFD_MACH_O_S_SYMBOL_STUBS = 0x8, /* Section with only function pointers for initialization. */ - BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS = 0x9 + BFD_MACH_O_S_MOD_INIT_FUNC_POINTERS = 0x9, + + /* Section with only function pointers for termination. */ + BFD_MACH_O_S_MOD_FINI_FUNC_POINTERS = 0xa, + + /* Section contains symbols that are coalesced by the linkers. */ + BFD_MACH_O_S_COALESCED = 0xb, + + /* Zero fill on demand section (possibly larger than 4 GB). */ + BFD_MACH_O_S_GB_ZEROFILL = 0xc, + + /* Section with only pairs of function pointers for interposing. */ + BFD_MACH_O_S_INTERPOSING = 0xd, + + /* Section with only 16 byte literals. */ + BFD_MACH_O_S_16BYTE_LITERALS = 0xe, + + /* Section contains DTrace Object Format. */ + BFD_MACH_O_S_DTRACE_DOF = 0xf, + + /* Section with only lazy symbol pointers to lazy loaded dylibs. */ + BFD_MACH_O_S_LAZY_DYLIB_SYMBOL_POINTERS = 0x10 } bfd_mach_o_section_type; -typedef unsigned long bfd_mach_o_cpu_subtype; +/* The flags field of a section structure is separated into two parts a section + type and section attributes. The section types are mutually exclusive (it + can only have one type) but the section attributes are not (it may have more + than one attribute). */ + +#define BFD_MACH_O_SECTION_TYPE_MASK 0x000000ff + +/* Constants for the section attributes part of the flags field of a section + structure. */ +#define BFD_MACH_O_SECTION_ATTRIBUTES_MASK 0xffffff00 +/* System setable attributes. */ +#define BFD_MACH_O_SECTION_ATTRIBUTES_SYS 0x00ffff00 +/* User attributes. */ +#define BFD_MACH_O_SECTION_ATTRIBUTES_USR 0xff000000 + +typedef enum bfd_mach_o_section_attribute +{ + /* Section has local relocation entries. */ + BFD_MACH_O_S_ATTR_LOC_RELOC = 0x00000100, + + /* Section has external relocation entries. */ + BFD_MACH_O_S_ATTR_EXT_RELOC = 0x00000200, + + /* Section contains some machine instructions. */ + BFD_MACH_O_S_ATTR_SOME_INSTRUCTIONS = 0x00000400, + + /* A debug section. */ + BFD_MACH_O_S_ATTR_DEBUG = 0x02000000, + + /* Used with i386 stubs. */ + BFD_MACH_O_S_SELF_MODIFYING_CODE = 0x04000000, + + /* Blocks are live if they reference live blocks. */ + BFD_MACH_O_S_ATTR_LIVE_SUPPORT = 0x08000000, + + /* No dead stripping. */ + BFD_MACH_O_S_ATTR_NO_DEAD_STRIP = 0x10000000, + + /* Section symbols can be stripped in files with MH_DYLDLINK flag. */ + BFD_MACH_O_S_ATTR_STRIP_STATIC_SYMS = 0x20000000, + + /* Section contains coalesced symbols that are not to be in the TOC of an + archive. */ + BFD_MACH_O_S_ATTR_NO_TOC = 0x40000000, + + /* Section contains only true machine instructions. */ + BFD_MACH_O_S_ATTR_PURE_INSTRUCTIONS = 0x80000000 +} +bfd_mach_o_section_attribute; typedef struct bfd_mach_o_header { @@ -183,10 +333,16 @@ typedef struct bfd_mach_o_header unsigned long ncmds; unsigned long sizeofcmds; unsigned long flags; + unsigned int reserved; + /* Version 1: 32 bits, version 2: 64 bits. */ + unsigned int version; enum bfd_endian byteorder; } bfd_mach_o_header; +#define BFD_MACH_O_HEADER_SIZE 28 +#define BFD_MACH_O_HEADER_64_SIZE 32 + typedef struct bfd_mach_o_section { asection *bfdsection; @@ -201,33 +357,99 @@ typedef struct bfd_mach_o_section unsigned long flags; unsigned long reserved1; unsigned long reserved2; + unsigned long reserved3; } bfd_mach_o_section; +#define BFD_MACH_O_SECTION_SIZE 68 +#define BFD_MACH_O_SECTION_64_SIZE 80 typedef struct bfd_mach_o_segment_command { - char segname[16]; + char segname[16 + 1]; bfd_vma vmaddr; bfd_vma vmsize; bfd_vma fileoff; unsigned long filesize; + unsigned long maxprot; /* Maximum permitted protection. */ + unsigned long initprot; /* Initial protection. */ unsigned long nsects; unsigned long flags; bfd_mach_o_section *sections; - asection *segment; } bfd_mach_o_segment_command; +#define BFD_MACH_O_LC_SEGMENT_SIZE 56 +#define BFD_MACH_O_LC_SEGMENT_64_SIZE 72 + +/* Protection flags. */ +#define BFD_MACH_O_PROT_READ 0x01 +#define BFD_MACH_O_PROT_WRITE 0x02 +#define BFD_MACH_O_PROT_EXECUTE 0x04 + +/* Generic relocation types (used by i386). */ +#define BFD_MACH_O_GENERIC_RELOC_VANILLA 0 +#define BFD_MACH_O_GENERIC_RELOC_PAIR 1 +#define BFD_MACH_O_GENERIC_RELOC_SECTDIFF 2 +#define BFD_MACH_O_GENERIC_RELOC_PB_LA_PTR 3 +#define BFD_MACH_O_GENERIC_RELOC_LOCAL_SECTDIFF 4 + +/* Size of a relocation entry. */ +#define BFD_MACH_O_RELENT_SIZE 8 + +/* Fields for a normal (non-scattered) entry. */ +#define BFD_MACH_O_R_PCREL 0x01000000 +#define BFD_MACH_O_GET_R_LENGTH(s) (((s) >> 25) & 0x3) +#define BFD_MACH_O_R_EXTERN 0x08000000 +#define BFD_MACH_O_GET_R_TYPE(s) (((s) >> 28) & 0x0f) +#define BFD_MACH_O_GET_R_SYMBOLNUM(s) ((s) & 0x00ffffff) +#define BFD_MACH_O_SET_R_LENGTH(l) (((l) & 0x3) << 25) +#define BFD_MACH_O_SET_R_TYPE(t) (((t) & 0xf) << 28) +#define BFD_MACH_O_SET_R_SYMBOLNUM(s) ((s) & 0x00ffffff) + +/* Fields for a scattered entry. */ +#define BFD_MACH_O_SR_SCATTERED 0x80000000 +#define BFD_MACH_O_SR_PCREL 0x40000000 +#define BFD_MACH_O_GET_SR_LENGTH(s) (((s) >> 28) & 0x3) +#define BFD_MACH_O_GET_SR_TYPE(s) (((s) >> 24) & 0x0f) +#define BFD_MACH_O_GET_SR_ADDRESS(s) ((s) & 0x00ffffff) +#define BFD_MACH_O_SET_SR_LENGTH(l) (((l) & 0x3) << 28) +#define BFD_MACH_O_SET_SR_TYPE(t) (((t) & 0xf) << 24) +#define BFD_MACH_O_SET_SR_ADDRESS(s) ((s) & 0x00ffffff) + +/* Expanded internal representation of a relocation entry. */ +typedef struct bfd_mach_o_reloc_info +{ + bfd_vma r_address; + bfd_vma r_value; + unsigned int r_scattered : 1; + unsigned int r_type : 4; + unsigned int r_pcrel : 1; + unsigned int r_length : 2; + unsigned int r_extern : 1; +} +bfd_mach_o_reloc_info; + +typedef struct bfd_mach_o_asymbol +{ + /* The actual symbol which the rest of BFD works with. */ + asymbol symbol; + + /* Fields from Mach-O symbol. */ + unsigned char n_type; + unsigned char n_sect; + unsigned short n_desc; +} +bfd_mach_o_asymbol; +#define BFD_MACH_O_NLIST_SIZE 12 +#define BFD_MACH_O_NLIST_64_SIZE 16 typedef struct bfd_mach_o_symtab_command { - unsigned long symoff; - unsigned long nsyms; - unsigned long stroff; - unsigned long strsize; - asymbol *symbols; + unsigned int symoff; + unsigned int nsyms; + unsigned int stroff; + unsigned int strsize; + bfd_mach_o_asymbol *symbols; char *strtab; - asection *stabs_segment; - asection *stabstr_segment; } bfd_mach_o_symtab_command; @@ -268,6 +490,88 @@ bfd_mach_o_symtab_command; For executable and object modules the relocation entries continue to hang off the section structures. */ +typedef struct bfd_mach_o_dylib_module +{ + /* Index into the string table indicating the name of the module. */ + unsigned long module_name_idx; + char *module_name; + + /* Index into the symbol table of the first defined external symbol provided + by the module. */ + unsigned long iextdefsym; + + /* Number of external symbols provided by this module. */ + unsigned long nextdefsym; + + /* Index into the external reference table of the first entry + provided by this module. */ + unsigned long irefsym; + + /* Number of external reference entries provided by this module. */ + unsigned long nrefsym; + + /* Index into the symbol table of the first local symbol provided by this + module. */ + unsigned long ilocalsym; + + /* Number of local symbols provided by this module. */ + unsigned long nlocalsym; + + /* Index into the external relocation table of the first entry provided + by this module. */ + unsigned long iextrel; + + /* Number of external relocation entries provided by this module. */ + unsigned long nextrel; + + /* Index in the module initialization section to the pointers for this + module. */ + unsigned short iinit; + + /* Index in the module termination section to the pointers for this + module. */ + unsigned short iterm; + + /* Number of pointers in the module initialization for this module. */ + unsigned short ninit; + + /* Number of pointers in the module termination for this module. */ + unsigned short nterm; + + /* Number of data byte for this module that are used in the __module_info + section of the __OBJC segment. */ + unsigned long objc_module_info_size; + + /* Statically linked address of the start of the data for this module + in the __module_info section of the __OBJC_segment. */ + bfd_vma objc_module_info_addr; +} +bfd_mach_o_dylib_module; +#define BFD_MACH_O_DYLIB_MODULE_SIZE 52 +#define BFD_MACH_O_DYLIB_MODULE_64_SIZE 56 + +typedef struct bfd_mach_o_dylib_table_of_content +{ + /* Index into the symbol table to the defined external symbol. */ + unsigned long symbol_index; + + /* Index into the module table to the module for this entry. */ + unsigned long module_index; +} +bfd_mach_o_dylib_table_of_content; +#define BFD_MACH_O_TABLE_OF_CONTENT_SIZE 8 + +typedef struct bfd_mach_o_dylib_reference +{ + /* Index into the symbol table for the symbol being referenced. */ + unsigned long isym; + + /* Type of the reference being made (use REFERENCE_FLAGS constants). */ + unsigned long flags; +} +bfd_mach_o_dylib_reference; +#define BFD_MACH_O_REFERENCE_SIZE 4 + typedef struct bfd_mach_o_dysymtab_command { /* The symbols indicated by symoff and nsyms of the LC_SYMTAB load command @@ -368,22 +672,30 @@ typedef struct bfd_mach_o_dysymtab_command unsigned long locreloff; /* Offset to local relocation entries. */ unsigned long nlocrel; /* Number of local relocation entries. */ + + bfd_mach_o_dylib_module *dylib_module; + bfd_mach_o_dylib_table_of_content *dylib_toc; + unsigned int *indirect_syms; + bfd_mach_o_dylib_reference *ext_refs; } bfd_mach_o_dysymtab_command; /* An indirect symbol table entry is simply a 32bit index into the symbol table to the symbol that the pointer or stub is refering to. Unless it is for a - non-lazy symbol pointer section for a defined symbol which strip(1) as + non-lazy symbol pointer section for a defined symbol which strip(1) has removed. In which case it has the value INDIRECT_SYMBOL_LOCAL. If the symbol was also absolute INDIRECT_SYMBOL_ABS is or'ed with that. */ -#define INDIRECT_SYMBOL_LOCAL 0x80000000 -#define INDIRECT_SYMBOL_ABS 0x40000000 +#define BFD_MACH_O_INDIRECT_SYMBOL_LOCAL 0x80000000 +#define BFD_MACH_O_INDIRECT_SYMBOL_ABS 0x40000000 +#define BFD_MACH_O_INDIRECT_SYMBOL_SIZE 4 + +/* For LC_THREAD or LC_UNIXTHREAD. */ typedef struct bfd_mach_o_thread_flavour { unsigned long flavour; - bfd_vma offset; + unsigned long offset; unsigned long size; } bfd_mach_o_thread_flavour; @@ -396,46 +708,72 @@ typedef struct bfd_mach_o_thread_command } bfd_mach_o_thread_command; +/* For LC_LOAD_DYLINKER and LC_ID_DYLINKER. */ + typedef struct bfd_mach_o_dylinker_command { - unsigned long cmd; /* LC_ID_DYLIB or LC_LOAD_DYLIB. */ - unsigned long cmdsize; /* Includes pathname string. */ - unsigned long name_offset; /* Offset to library's path name. */ - unsigned long name_len; /* Offset to library's path name. */ - asection *section; + unsigned long name_offset; /* Offset to library's path name. */ + unsigned long name_len; /* Offset to library's path name. */ + char *name_str; } bfd_mach_o_dylinker_command; +/* For LC_LOAD_DYLIB, LC_LOAD_WEAK_DYLIB, LC_ID_DYLIB + or LC_REEXPORT_DYLIB. */ + typedef struct bfd_mach_o_dylib_command { - unsigned long cmd; /* LC_ID_DYLIB or LC_LOAD_DYLIB. */ - unsigned long cmdsize; /* Includes pathname string. */ unsigned long name_offset; /* Offset to library's path name. */ unsigned long name_len; /* Offset to library's path name. */ unsigned long timestamp; /* Library's build time stamp. */ unsigned long current_version; /* Library's current version number. */ unsigned long compatibility_version; /* Library's compatibility vers number. */ - asection *section; + char *name_str; } bfd_mach_o_dylib_command; +/* For LC_PREBOUND_DYLIB. */ + typedef struct bfd_mach_o_prebound_dylib_command { - unsigned long cmd; /* LC_PREBOUND_DYLIB. */ - unsigned long cmdsize; /* Includes strings. */ unsigned long name; /* Library's path name. */ unsigned long nmodules; /* Number of modules in library. */ unsigned long linked_modules; /* Bit vector of linked modules. */ - asection *section; } bfd_mach_o_prebound_dylib_command; +/* For LC_UUID. */ + +typedef struct bfd_mach_o_uuid_command +{ + unsigned char uuid[16]; + asection *section; +} +bfd_mach_o_uuid_command; + +/* For LC_CODE_SIGNATURE or LC_SEGMENT_SPLIT_INFO. */ + +typedef struct bfd_mach_o_linkedit_command +{ + unsigned long dataoff; + unsigned long datasize; +} +bfd_mach_o_linkedit_command; + +typedef struct bfd_mach_o_str_command +{ + unsigned long stroff; + unsigned long str_len; + char *str; +} +bfd_mach_o_str_command; + typedef struct bfd_mach_o_load_command { bfd_mach_o_load_command_type type; - unsigned int type_required; - bfd_vma offset; - bfd_vma len; + bfd_boolean type_required; + unsigned int offset; + unsigned int len; union { bfd_mach_o_segment_command segment; @@ -445,6 +783,9 @@ typedef struct bfd_mach_o_load_command bfd_mach_o_dylib_command dylib; bfd_mach_o_dylinker_command dylinker; bfd_mach_o_prebound_dylib_command prebound_dylib; + bfd_mach_o_uuid_command uuid; + bfd_mach_o_linkedit_command linkedit; + bfd_mach_o_str_command str; } command; } @@ -452,40 +793,82 @@ bfd_mach_o_load_command; typedef struct mach_o_data_struct { + /* Mach-O header. */ bfd_mach_o_header header; + /* Array of load commands (length is given by header.ncmds). */ bfd_mach_o_load_command *commands; - unsigned long nsymbols; - asymbol *symbols; + + /* Flatten array of sections. The array is 0-based. */ unsigned long nsects; bfd_mach_o_section **sections; - bfd *ibfd; + + /* Used while writting: current length of the output file. This is used + to allocate space in the file. */ + ufile_ptr filelen; + + /* As symtab is referenced by other load command, it is handy to have + a direct access to it. Also it is not clearly stated, only one symtab + is expected. */ + bfd_mach_o_symtab_command *symtab; + bfd_mach_o_dysymtab_command *dysymtab; +} +bfd_mach_o_data_struct; + +/* Target specific routines. */ +typedef struct bfd_mach_o_backend_data +{ + bfd_boolean (*_bfd_mach_o_swap_reloc_in)(arelent *, bfd_mach_o_reloc_info *); + bfd_boolean (*_bfd_mach_o_swap_reloc_out)(arelent *, bfd_mach_o_reloc_info *); + bfd_boolean (*_bfd_mach_o_print_thread)(bfd *, bfd_mach_o_thread_flavour *, + void *, char *); } -mach_o_data_struct; - -typedef struct mach_o_data_struct bfd_mach_o_data_struct; - -bfd_boolean bfd_mach_o_valid (bfd *); -int bfd_mach_o_scan_read_symtab_symbol (bfd *, bfd_mach_o_symtab_command *, asymbol *, unsigned long); -int bfd_mach_o_scan_read_symtab_strtab (bfd *, bfd_mach_o_symtab_command *); -int bfd_mach_o_scan_read_symtab_symbols (bfd *, bfd_mach_o_symtab_command *); -int bfd_mach_o_scan_read_dysymtab_symbol (bfd *, bfd_mach_o_dysymtab_command *, bfd_mach_o_symtab_command *, asymbol *, unsigned long); -int bfd_mach_o_scan_start_address (bfd *); -int bfd_mach_o_scan (bfd *, bfd_mach_o_header *, bfd_mach_o_data_struct *); -bfd_boolean bfd_mach_o_mkobject (bfd *); -const bfd_target * bfd_mach_o_object_p (bfd *); -const bfd_target * bfd_mach_o_core_p (bfd *); -const bfd_target * bfd_mach_o_archive_p (bfd *); -bfd * bfd_mach_o_openr_next_archived_file (bfd *, bfd *); -int bfd_mach_o_lookup_section (bfd *, asection *, bfd_mach_o_load_command **, bfd_mach_o_section **); -int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_load_command **); -unsigned long bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type); -int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *); -char * bfd_mach_o_core_file_failing_command (bfd *); -int bfd_mach_o_core_file_failing_signal (bfd *); -bfd_boolean bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *); - -extern const bfd_target mach_o_be_vec; -extern const bfd_target mach_o_le_vec; +bfd_mach_o_backend_data; + +#define bfd_mach_o_get_data(abfd) ((abfd)->tdata.mach_o_data) +#define bfd_mach_o_get_backend_data(abfd) \ + ((bfd_mach_o_backend_data*)(abfd)->xvec->backend_data) + +bfd_boolean bfd_mach_o_valid (bfd *); +int bfd_mach_o_scan_read_dysymtab_symbol (bfd *, bfd_mach_o_dysymtab_command *, bfd_mach_o_symtab_command *, bfd_mach_o_asymbol *, unsigned long); +int bfd_mach_o_scan_start_address (bfd *); +int bfd_mach_o_scan (bfd *, bfd_mach_o_header *, bfd_mach_o_data_struct *); +bfd_boolean bfd_mach_o_mkobject_init (bfd *); +const bfd_target *bfd_mach_o_object_p (bfd *); +const bfd_target *bfd_mach_o_core_p (bfd *); +const bfd_target *bfd_mach_o_archive_p (bfd *); +bfd *bfd_mach_o_openr_next_archived_file (bfd *, bfd *); +int bfd_mach_o_lookup_section (bfd *, asection *, bfd_mach_o_load_command **, bfd_mach_o_section **); +int bfd_mach_o_lookup_command (bfd *, bfd_mach_o_load_command_type, bfd_mach_o_load_command **); +bfd_boolean bfd_mach_o_write_contents (bfd *); +bfd_boolean bfd_mach_o_bfd_copy_private_symbol_data (bfd *, asymbol *, + bfd *, asymbol *); +bfd_boolean bfd_mach_o_bfd_copy_private_section_data (bfd *, asection *, + bfd *, asection *); +bfd_boolean bfd_mach_o_bfd_copy_private_bfd_data (bfd *, bfd *); +long bfd_mach_o_get_symtab_upper_bound (bfd *); +long bfd_mach_o_canonicalize_symtab (bfd *, asymbol **); +long bfd_mach_o_get_reloc_upper_bound (bfd *, asection *); +long bfd_mach_o_canonicalize_reloc (bfd *, asection *, arelent **, asymbol **); +long bfd_mach_o_get_dynamic_reloc_upper_bound (bfd *); +long bfd_mach_o_canonicalize_dynamic_reloc (bfd *, arelent **, asymbol **); +asymbol *bfd_mach_o_make_empty_symbol (bfd *); +void bfd_mach_o_get_symbol_info (bfd *, asymbol *, symbol_info *); +void bfd_mach_o_print_symbol (bfd *, PTR, asymbol *, bfd_print_symbol_type); +bfd_boolean bfd_mach_o_bfd_print_private_bfd_data (bfd *, PTR); +int bfd_mach_o_sizeof_headers (bfd *, struct bfd_link_info *); +unsigned long bfd_mach_o_stack_addr (enum bfd_mach_o_cpu_type); +int bfd_mach_o_core_fetch_environment (bfd *, unsigned char **, unsigned int *); +char *bfd_mach_o_core_file_failing_command (bfd *); +int bfd_mach_o_core_file_failing_signal (bfd *); +bfd_boolean bfd_mach_o_core_file_matches_executable_p (bfd *, bfd *); +bfd *bfd_mach_o_fat_extract (bfd *, bfd_format , const bfd_arch_info_type *); +const bfd_target *bfd_mach_o_header_p (bfd *, bfd_mach_o_filetype, + bfd_mach_o_cpu_type); +bfd_boolean bfd_mach_o_build_commands (bfd *); +bfd_boolean bfd_mach_o_set_section_contents (bfd *, asection *, const void *, + file_ptr, bfd_size_type); +unsigned int bfd_mach_o_version (bfd *); + extern const bfd_target mach_o_fat_vec; #endif /* _BFD_MACH_O_H_ */ diff --git a/bfd/makefile.vms b/bfd/makefile.vms index ad6b1ff..8369098 100644 --- a/bfd/makefile.vms +++ b/bfd/makefile.vms @@ -1,5 +1,5 @@ # -# Makefile for bfd library under openVMS (Alpha and Vax) +# Makefile for bfd library under openVMS # # For use with gnu-make for vms # @@ -7,57 +7,43 @@ # # -CC=cc - +ifeq ($(ARCH),IA64) +HOSTFILE=alphavms.h +OBJS:=cpu-ia64.obj,elf64-ia64.obj,elf-strtab.obj,corefile.obj,stabs.obj,\ + merge.obj,elf-eh-frame.obj,elflink.obj,elf-attrs.obj,dwarf1.obj,elf64.obj +DEFS=SELECT_VECS="&bfd_elf64_ia64_vms_vec",SELECT_ARCHITECTURES="&bfd_ia64_arch" +endif ifeq ($(ARCH),ALPHA) HOSTFILE=alphavms.h -TARGETOBJS = cpu-alpha.obj -else +OBJS:=vms.obj,vms-hdr.obj,vms-gsd.obj,vms-tir.obj,vms-misc.obj,cpu-alpha.obj +DEFS=SELECT_VECS="&vms_alpha_vec",SELECT_ARCHITECTURES="&bfd_alpha_arch" +endif +ifeq ($(ARCH),VAX) HOSTFILE=vaxvms.h -TARGETOBJS = cpu-vax.obj +OBJS:=vms.obj,vms-hdr.obj,vms-gsd.obj,vms-tir.obj,vms-misc.obj,cpu-vax.obj +DEFS=SELECT_VECS="&vms_vax_vec",SELECT_ARCHITECTURES="&bfd_vax_arch" endif - -OBJS=archive.obj,archures.obj,bfd.obj,cache.obj,coffgen.obj,corefile.obj,\ - format.obj,init.obj,libbfd.obj,opncls.obj,reloc.obj,section.obj,syms.obj,\ - targets.obj,hash.obj,linker.obj,elf.obj,srec.obj,binary.obj,tekhex.obj,\ - ihex.obj,stab-syms.obj,vms.obj,vms-hdr.obj,vms-gsd.obj,vms-tir.obj,\ - vms-misc.obj,$(TARGETOBJS) +OBJS:=$(OBJS),archive.obj,archive64.obj,archures.obj,bfd.obj,bfdio.obj,\ + binary.obj,cache.obj,coffgen.obj,compress.obj,corefile.obj,dwarf2.obj,\ + elf.obj,format.obj,hash.obj,ihex.obj,init.obj,libbfd.obj,linker.obj,\ + opncls.obj,reloc.obj,section.obj,simple.obj,srec.obj,stab-syms.obj,\ + syms.obj,targets.obj,tekhex.obj,verilog.obj ifeq ($(CC),gcc) -ifeq ($(ARCH),ALPHA) -DEFS=/define=(SELECT_VECS="&vms_alpha_vec",SELECT_ARCHITECTURES="&bfd_alpha_arch",\ -"HAVE_vms_alpha_vec=1") -else -DEFS=/define=(SELECT_VECS="&vms_vax_vec",SELECT_ARCHITECTURES="&bfd_vax_arch",\ -"HAVE_vms_vax_vec=1","VMS_DEBUG") -endif CFLAGS=/include=([],[-.include])$(DEFS) else -ifeq ($(ARCH),ALPHA) -DEFS=/define=(SELECT_VECS="&vms_alpha_vec",SELECT_ARCHITECTURES="&bfd_alpha_arch",\ -"HAVE_vms_alpha_vec=1","unlink=remove","const=","VMS_DEBUG",) -else -DEFS=/define=(SELECT_VECS="&vms_vax_vec",SELECT_ARCHITECTURES="&bfd_vax_arch",\ -"HAVE_vms_vax_vec=1","unlink=remove","const=","VMS_DEBUG") -endif -CFLAGS=/noopt/debug/include=([],[-.include])$(DEFS)/warnings=disable=(missingreturn,implicitfunc,longextern) +OPT=/noopt/debug +CFLAGS=/name=(as_is,shortened)/include=([],"../include")\ + /define=("unlink=remove",DEBUGDIR="""GNU$$DEBUGDIR:""",$(DEFS))$(OPT) endif - -libbfd.olb: sysdep.h bfd.h $(OBJS) +libbfd.olb: $(OBJS) purge lib/create libbfd $(OBJS) -sysdep.h: [.hosts]$(HOSTFILE) config.h - $(CP) $< $@ - -bfd.h: bfd-in2.h - $$ @configure - targmatch.h: bfd.h config.h: bfd.h - vms.c: vms.h vms-mhd.c: vms.h vms-gsd.c: vms.h @@ -68,8 +54,4 @@ targets.c: targmatch.h clean: $$ purge $(RM) libbfd.olb; - $(RM) sysdep.h; - $(RM) bfd.h; - $(RM) targmatch.h; - $(RM) config.h; $(RM) *.obj; diff --git a/bfd/merge.c b/bfd/merge.c index 2e805c7..80f80b8 100644 --- a/bfd/merge.c +++ b/bfd/merge.c @@ -1,5 +1,5 @@ /* SEC_MERGE support. - Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Jakub Jelinek . @@ -108,7 +108,8 @@ sec_merge_hash_newfunc (struct bfd_hash_entry *entry, /* Allocate the structure if it has not already been allocated by a subclass. */ if (entry == NULL) - entry = bfd_hash_allocate (table, sizeof (struct sec_merge_hash_entry)); + entry = (struct bfd_hash_entry *) + bfd_hash_allocate (table, sizeof (struct sec_merge_hash_entry)); if (entry == NULL) return NULL; @@ -220,16 +221,11 @@ sec_merge_hash_lookup (struct sec_merge_hash *table, const char *string, return NULL; hashp = ((struct sec_merge_hash_entry *) - sec_merge_hash_newfunc (NULL, &table->table, string)); + bfd_hash_insert (&table->table, string, hash)); if (hashp == NULL) return NULL; - hashp->root.string = string; - hashp->root.hash = hash; hashp->len = len; hashp->alignment = alignment; - hashp->root.next = table->table.table[index]; - table->table.table[index] = (struct bfd_hash_entry *) hashp; - return hashp; } @@ -240,7 +236,7 @@ sec_merge_init (unsigned int entsize, bfd_boolean strings) { struct sec_merge_hash *table; - table = bfd_malloc (sizeof (struct sec_merge_hash)); + table = (struct sec_merge_hash *) bfd_malloc (sizeof (struct sec_merge_hash)); if (table == NULL) return NULL; @@ -298,7 +294,7 @@ sec_merge_emit (bfd *abfd, struct sec_merge_hash_entry *entry) if (alignment_power) { - pad = bfd_zmalloc ((bfd_size_type) 1 << alignment_power); + pad = (char *) bfd_zmalloc ((bfd_size_type) 1 << alignment_power); if (pad == NULL) return FALSE; } @@ -395,7 +391,8 @@ _bfd_add_merge_section (bfd *abfd, void **psinfo, asection *sec, if (sinfo == NULL) { /* Initialize the information we need to keep track of. */ - sinfo = bfd_alloc (abfd, sizeof (struct sec_merge_info)); + sinfo = (struct sec_merge_info *) + bfd_alloc (abfd, sizeof (struct sec_merge_info)); if (sinfo == NULL) goto error_return; sinfo->next = (struct sec_merge_info *) *psinfo; @@ -408,7 +405,12 @@ _bfd_add_merge_section (bfd *abfd, void **psinfo, asection *sec, /* Read the section from abfd. */ - amt = sizeof (struct sec_merge_sec_info) + sec->size - 1; + amt = sizeof (struct sec_merge_sec_info) - 1 + sec->size; + if (sec->flags & SEC_STRINGS) + /* Some versions of gcc may emit a string without a zero terminator. + See http://gcc.gnu.org/ml/gcc-patches/2006-06/msg01004.html + Allocate space for an extra zero. */ + amt += sec->entsize; *psecinfo = bfd_alloc (abfd, amt); if (*psecinfo == NULL) goto error_return; @@ -428,6 +430,8 @@ _bfd_add_merge_section (bfd *abfd, void **psinfo, asection *sec, secinfo->first_str = NULL; sec->rawsize = sec->size; + if (sec->flags & SEC_STRINGS) + memset (secinfo->contents + sec->size, 0, sec->entsize); if (! bfd_get_section_contents (sec->owner, sec, secinfo->contents, 0, sec->size)) goto error_return; @@ -599,7 +603,7 @@ merge_strings (struct sec_merge_info *sinfo) /* Now sort the strings */ amt = sinfo->htab->size * sizeof (struct sec_merge_hash_entry *); - array = bfd_malloc (amt); + array = (struct sec_merge_hash_entry **) bfd_malloc (amt); if (array == NULL) goto alloc_failure; @@ -700,7 +704,7 @@ alloc_failure: with _bfd_merge_section. */ bfd_boolean -_bfd_merge_sections (bfd *abfd ATTRIBUTE_UNUSED, +_bfd_merge_sections (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED, void *xsinfo, void (*remove_hook) (bfd *, asection *)) @@ -784,9 +788,13 @@ _bfd_write_merged_section (bfd *output_bfd, asection *sec, void *psecinfo) secinfo = (struct sec_merge_sec_info *) psecinfo; + if (!secinfo) + return FALSE; + if (secinfo->first_str == NULL) return TRUE; + /* FIXME: octets_per_byte. */ pos = sec->output_section->filepos + sec->output_offset; if (bfd_seek (output_bfd, pos, SEEK_SET) != 0) return FALSE; @@ -812,6 +820,9 @@ _bfd_merged_section_offset (bfd *output_bfd ATTRIBUTE_UNUSED, asection **psec, secinfo = (struct sec_merge_sec_info *) psecinfo; + if (!secinfo) + return offset; + if (offset >= sec->rawsize) { if (offset > sec->rawsize) diff --git a/bfd/mipsbsd.c b/bfd/mipsbsd.c index ea51b18..db4c86b 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, - 2007 Free Software Foundation, Inc. + 2005, 2007 Free Software Foundation, Inc. Written by Ralph Campbell. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/mmo.c b/bfd/mmo.c index c0e8082..39cc269 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, 2006, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Hans-Peter Nilsson (hp@bitrange.com). Infrastructure and other bits originally copied from srec.c and @@ -3211,6 +3211,7 @@ mmo_write_object_contents (bfd *abfd) #define mmo_bfd_discard_group bfd_generic_discard_group #define mmo_section_already_linked \ _bfd_generic_section_already_linked +#define mmo_bfd_define_common_symbol bfd_generic_define_common_symbol /* We want to copy time of creation, otherwise we'd use BFD_JUMP_TABLE_COPY (_bfd_generic). */ diff --git a/bfd/newsos3.c b/bfd/newsos3.c index c294164..5f8e1f7 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, 2007 + Copyright 1990, 1991, 1994, 1995, 2000, 2001, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/nlm-target.h b/bfd/nlm-target.h index d346dc5..8090190 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, 2007 Free Software Foundation, Inc. + 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -49,6 +49,7 @@ #define nlm_bfd_is_group_section bfd_generic_is_group_section #define nlm_bfd_discard_group bfd_generic_discard_group #define nlm_section_already_linked _bfd_generic_section_already_linked +#define nlm_bfd_define_common_symbol bfd_generic_define_common_symbol #define nlm_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define nlm_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define nlm_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/nlm.c b/bfd/nlm.c index 5cb8ac1..eb25ab6 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, 2007 + Copyright 1993, 1994, 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.c b/bfd/nlm32.c index d0132b9..99f4b00 100644 --- a/bfd/nlm32.c +++ b/bfd/nlm32.c @@ -1,5 +1,5 @@ /* NLM (NetWare Loadable Module) 32-bit executable support for BFD. - Copyright 1993, 2007 Free Software Foundation, Inc. + Copyright 1993, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/nlm64.c b/bfd/nlm64.c index 6fc845c..02d3613 100644 --- a/bfd/nlm64.c +++ b/bfd/nlm64.c @@ -1,5 +1,5 @@ /* NLM (NetWare Loadable Module) 64-bit executable support for BFD. - Copyright 1993, 2007 Free Software Foundation, Inc. + Copyright 1993, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/oasys.c b/bfd/oasys.c index b1ca527..aad22a1 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, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support, . This file is part of BFD, the Binary File Descriptor library. @@ -1084,12 +1084,12 @@ static asymbol * oasys_make_empty_symbol (bfd *abfd) { bfd_size_type amt = sizeof (oasys_symbol_type); - oasys_symbol_type *new = bfd_zalloc (abfd, amt); + oasys_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt); - if (!new) + if (!new_symbol_type) return NULL; - new->symbol.the_bfd = abfd; - return &new->symbol; + new_symbol_type->symbol.the_bfd = abfd; + return &new_symbol_type->symbol; } /* User should have checked the file flags; perhaps we should return @@ -1198,6 +1198,7 @@ oasys_sizeof_headers (bfd *abfd ATTRIBUTE_UNUSED, #define oasys_bfd_is_group_section bfd_generic_is_group_section #define oasys_bfd_discard_group bfd_generic_discard_group #define oasys_section_already_linked _bfd_generic_section_already_linked +#define oasys_bfd_define_common_symbol bfd_generic_define_common_symbol #define oasys_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define oasys_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define oasys_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/opncls.c b/bfd/opncls.c index 26e139b..3337efe 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, 2007 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -52,7 +52,7 @@ _bfd_new_bfd (void) { bfd *nbfd; - nbfd = bfd_zmalloc (sizeof (bfd)); + nbfd = (bfd *) bfd_zmalloc (sizeof (bfd)); if (nbfd == NULL) return NULL; @@ -342,7 +342,7 @@ DESCRIPTION bfd * bfd_openstreamr (const char *filename, const char *target, void *streamarg) { - FILE *stream = streamarg; + FILE *stream = (FILE *) streamarg; bfd *nbfd; const bfd_target *target_vec; @@ -438,14 +438,14 @@ struct opncls static file_ptr opncls_btell (struct bfd *abfd) { - struct opncls *vec = abfd->iostream; + struct opncls *vec = (struct opncls *) abfd->iostream; return vec->where; } static int opncls_bseek (struct bfd *abfd, file_ptr offset, int whence) { - struct opncls *vec = abfd->iostream; + struct opncls *vec = (struct opncls *) abfd->iostream; switch (whence) { case SEEK_SET: vec->where = offset; break; @@ -458,7 +458,7 @@ opncls_bseek (struct bfd *abfd, file_ptr offset, int whence) static file_ptr opncls_bread (struct bfd *abfd, void *buf, file_ptr nbytes) { - struct opncls *vec = abfd->iostream; + struct opncls *vec = (struct opncls *) abfd->iostream; file_ptr nread = (vec->pread) (abfd, vec->stream, buf, nbytes, vec->where); if (nread < 0) return nread; @@ -477,7 +477,7 @@ opncls_bwrite (struct bfd *abfd ATTRIBUTE_UNUSED, static int opncls_bclose (struct bfd *abfd) { - struct opncls *vec = abfd->iostream; + struct opncls *vec = (struct opncls *) abfd->iostream; /* Since the VEC's memory is bound to the bfd deleting the bfd will free it. */ int status = 0; @@ -496,7 +496,7 @@ opncls_bflush (struct bfd *abfd ATTRIBUTE_UNUSED) static int opncls_bstat (struct bfd *abfd, struct stat *sb) { - struct opncls *vec = abfd->iostream; + struct opncls *vec = (struct opncls *) abfd->iostream; memset (sb, 0, sizeof (*sb)); if (vec->stat == NULL) @@ -505,9 +505,20 @@ opncls_bstat (struct bfd *abfd, struct stat *sb) return (vec->stat) (abfd, vec->stream, sb); } +static void * +opncls_bmmap (struct bfd *abfd ATTRIBUTE_UNUSED, + void *addr ATTRIBUTE_UNUSED, + bfd_size_type len ATTRIBUTE_UNUSED, + int prot ATTRIBUTE_UNUSED, + int flags ATTRIBUTE_UNUSED, + file_ptr offset ATTRIBUTE_UNUSED) +{ + return (void *) -1; +} + static const struct bfd_iovec opncls_iovec = { &opncls_bread, &opncls_bwrite, &opncls_btell, &opncls_bseek, - &opncls_bclose, &opncls_bflush, &opncls_bstat + &opncls_bclose, &opncls_bflush, &opncls_bstat, &opncls_bmmap }; bfd * @@ -545,14 +556,15 @@ bfd_openr_iovec (const char *filename, const char *target, nbfd->filename = filename; nbfd->direction = read_direction; - stream = open (nbfd, open_closure); + /* `open (...)' would get expanded by an the open(2) syscall macro. */ + stream = (*open) (nbfd, open_closure); if (stream == NULL) { _bfd_delete_bfd (nbfd); return NULL; } - vec = bfd_zalloc (nbfd, sizeof (struct opncls)); + vec = (struct opncls *) bfd_zalloc (nbfd, sizeof (struct opncls)); vec->stream = stream; vec->pread = pread; vec->close = close; @@ -617,6 +629,32 @@ bfd_openw (const char *filename, const char *target) return nbfd; } +static inline void +_maybe_make_executable (bfd * abfd) +{ + /* If the file was open for writing and is now executable, + make it so. */ + if (abfd->direction == write_direction + && abfd->flags & EXEC_P) + { + struct stat buf; + + if (stat (abfd->filename, &buf) == 0 + /* Do not attempt to change non-regular files. This is + here especially for configure scripts and kernel builds + which run tests with "ld [...] -o /dev/null". */ + && S_ISREG(buf.st_mode)) + { + unsigned int mask = umask (0); + + umask (mask); + chmod (abfd->filename, + (0777 + & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask)))); + } + } +} + /* FUNCTION @@ -646,6 +684,8 @@ bfd_boolean bfd_close (bfd *abfd) { bfd_boolean ret; + bfd *nbfd; + bfd *next; if (bfd_write_p (abfd)) { @@ -653,34 +693,33 @@ bfd_close (bfd *abfd) return FALSE; } + /* Close nested archives (if this bfd is a thin archive). */ + for (nbfd = abfd->nested_archives; nbfd; nbfd = next) + { + next = nbfd->archive_next; + bfd_close (nbfd); + } + if (! BFD_SEND (abfd, _close_and_cleanup, (abfd))) return FALSE; - /* FIXME: cagney/2004-02-15: Need to implement a BFD_IN_MEMORY io - vector. */ - if (!(abfd->flags & BFD_IN_MEMORY)) - ret = abfd->iovec->bclose (abfd); - else - ret = TRUE; - - /* If the file was open for writing and is now executable, - make it so. */ - if (ret - && abfd->direction == write_direction - && abfd->flags & EXEC_P) + if ((abfd->flags & BFD_IN_MEMORY) != 0) { - struct stat buf; - - if (stat (abfd->filename, &buf) == 0) - { - unsigned int mask = umask (0); - - umask (mask); - chmod (abfd->filename, - (0777 - & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask)))); - } + /* FIXME: cagney/2004-02-15: Need to implement a BFD_IN_MEMORY io + vector. + Until that's done, at least don't leak memory. */ + struct bfd_in_memory *bim = (struct bfd_in_memory *) abfd->iostream; + + if (bim->buffer != NULL) + free (bim->buffer); + free (bim); + ret = TRUE; } + else + ret = abfd->iovec->bclose (abfd); + + if (ret) + _maybe_make_executable (abfd); _bfd_delete_bfd (abfd); @@ -716,24 +755,8 @@ bfd_close_all_done (bfd *abfd) ret = bfd_cache_close (abfd); - /* If the file was open for writing and is now executable, - make it so. */ - if (ret - && abfd->direction == write_direction - && abfd->flags & EXEC_P) - { - struct stat buf; - - if (stat (abfd->filename, &buf) == 0) - { - unsigned int mask = umask (0); - - umask (mask); - chmod (abfd->filename, - (0777 - & (buf.st_mode | ((S_IXUSR | S_IXGRP | S_IXOTH) &~ mask)))); - } - } + if (ret) + _maybe_make_executable (abfd); _bfd_delete_bfd (abfd); @@ -798,7 +821,7 @@ bfd_make_writable (bfd *abfd) return FALSE; } - bim = bfd_malloc (sizeof (struct bfd_in_memory)); + bim = (struct bfd_in_memory *) bfd_malloc (sizeof (struct bfd_in_memory)); if (bim == NULL) return FALSE; /* bfd_error already set. */ abfd->iostream = bim; @@ -896,7 +919,7 @@ bfd_alloc (bfd *abfd, bfd_size_type size) return NULL; } - ret = objalloc_alloc (abfd->memory, (unsigned long) size); + ret = objalloc_alloc ((struct objalloc *) abfd->memory, (unsigned long) size); if (ret == NULL) bfd_set_error (bfd_error_no_memory); return ret; @@ -935,7 +958,7 @@ bfd_alloc2 (bfd *abfd, bfd_size_type nmemb, bfd_size_type size) return NULL; } - ret = objalloc_alloc (abfd->memory, (unsigned long) size); + ret = objalloc_alloc ((struct objalloc *) abfd->memory, (unsigned long) size); if (ret == NULL) bfd_set_error (bfd_error_no_memory); return ret; @@ -1174,19 +1197,19 @@ separate_debug_file_exists (const char *name, const unsigned long crc) { static unsigned char buffer [8 * 1024]; unsigned long file_crc = 0; - int fd; + FILE *f; bfd_size_type count; BFD_ASSERT (name); - fd = open (name, O_RDONLY); - if (fd < 0) + f = real_fopen (name, FOPEN_RB); + if (f == NULL) return FALSE; - while ((count = read (fd, buffer, sizeof (buffer))) > 0) + while ((count = fread (buffer, 1, sizeof (buffer), f)) > 0) file_crc = bfd_calc_gnu_debuglink_crc32 (file_crc, buffer, count); - close (fd); + fclose (f); return crc == file_crc; } @@ -1214,9 +1237,10 @@ find_separate_debug_file (bfd *abfd, const char *debug_file_directory) char *basename; char *dir; char *debugfile; + char *canon_dir; unsigned long crc32; - int i; size_t dirlen; + size_t canon_dirlen; BFD_ASSERT (abfd); if (debug_file_directory == NULL) @@ -1244,7 +1268,7 @@ find_separate_debug_file (bfd *abfd, const char *debug_file_directory) if (IS_DIR_SEPARATOR (abfd->filename[dirlen - 1])) break; - dir = bfd_malloc (dirlen + 1); + dir = (char *) bfd_malloc (dirlen + 1); if (dir == NULL) { free (basename); @@ -1253,15 +1277,25 @@ find_separate_debug_file (bfd *abfd, const char *debug_file_directory) memcpy (dir, abfd->filename, dirlen); dir[dirlen] = '\0'; - debugfile = bfd_malloc (strlen (debug_file_directory) + 1 - + dirlen - + strlen (".debug/") - + strlen (basename) - + 1); + /* Compute the canonical name of the bfd object with all symbolic links + resolved, for use in the global debugfile directory. */ + canon_dir = lrealpath (abfd->filename); + for (canon_dirlen = strlen (canon_dir); canon_dirlen > 0; canon_dirlen--) + if (IS_DIR_SEPARATOR (canon_dir[canon_dirlen - 1])) + break; + canon_dir[canon_dirlen] = '\0'; + + debugfile = (char *) + bfd_malloc (strlen (debug_file_directory) + 1 + + (canon_dirlen > dirlen ? canon_dirlen : dirlen) + + strlen (".debug/") + + strlen (basename) + + 1); if (debugfile == NULL) { free (basename); free (dir); + free (canon_dir); return NULL; } @@ -1273,6 +1307,7 @@ find_separate_debug_file (bfd *abfd, const char *debug_file_directory) { free (basename); free (dir); + free (canon_dir); return debugfile; } @@ -1285,29 +1320,32 @@ find_separate_debug_file (bfd *abfd, const char *debug_file_directory) { free (basename); free (dir); + free (canon_dir); return debugfile; } /* Then try in the global debugfile directory. */ strcpy (debugfile, debug_file_directory); - i = strlen (debug_file_directory) - 1; - if (i > 0 - && debug_file_directory[i] != '/' - && dir[0] != '/') + dirlen = strlen (debug_file_directory) - 1; + if (dirlen > 0 + && debug_file_directory[dirlen] != '/' + && canon_dir[0] != '/') strcat (debugfile, "/"); - strcat (debugfile, dir); + strcat (debugfile, canon_dir); strcat (debugfile, basename); if (separate_debug_file_exists (debugfile, crc32)) { free (basename); free (dir); + free (canon_dir); return debugfile; } free (debugfile); free (basename); free (dir); + free (canon_dir); return NULL; } @@ -1472,7 +1510,7 @@ bfd_fill_in_gnu_debuglink_section (bfd *abfd, debuglink_size &= ~3; debuglink_size += 4; - contents = bfd_malloc (debuglink_size); + contents = (char *) bfd_malloc (debuglink_size); if (contents == NULL) { /* XXX Should we delete the section from the bfd ? */ diff --git a/bfd/osf-core.c b/bfd/osf-core.c index c76e447..513e52a 100644 --- a/bfd/osf-core.c +++ b/bfd/osf-core.c @@ -1,5 +1,5 @@ /* BFD back-end for OSF/1 core files. - Copyright 1993, 1994, 1995, 1998, 1999, 2001, 2002, 2003, 2004, 2006, + 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. diff --git a/bfd/pc532-mach.c b/bfd/pc532-mach.c index f9dd342..e466536 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, 2007 + Copyright 1990, 1991, 1992, 1994, 1995, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/pdp11.c b/bfd/pdp11.c index ed2bec1..620d218 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, 2007 + Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -65,12 +65,9 @@ #define N_FLAGS(exec) 0 #define N_SET_FLAGS(exec, flags) do { } while (0) -#define N_BADMAG(x) (((x).a_info != OMAGIC) \ - && ((x).a_info != NMAGIC) \ - && ((x).a_info != A_MAGIC3) \ - && ((x).a_info != A_MAGIC4) \ - && ((x).a_info != A_MAGIC5) \ - && ((x).a_info != A_MAGIC6)) +#define N_BADMAG(x) (N_MAGIC(x) != OMAGIC \ + && N_MAGIC(x) != NMAGIC \ + && N_MAGIC(x) != ZMAGIC) #include "sysdep.h" #include "bfd.h" @@ -507,19 +504,12 @@ NAME (aout, some_aout_object_p) (bfd *abfd, abfd->flags |= D_PAGED | WP_TEXT; adata (abfd).magic = z_magic; } - else if (N_MAGIC (*execp) == QMAGIC) - { - abfd->flags |= D_PAGED | WP_TEXT; - adata (abfd).magic = z_magic; - adata (abfd).subformat = q_magic_format; - } else if (N_MAGIC (*execp) == NMAGIC) { abfd->flags |= WP_TEXT; adata (abfd).magic = n_magic; } - else if (N_MAGIC (*execp) == OMAGIC - || N_MAGIC (*execp) == BMAGIC) + else if (N_MAGIC (*execp) == OMAGIC) adata (abfd).magic = o_magic; else { @@ -958,10 +948,7 @@ adjust_z_magic (bfd *abfd, struct internal_exec *execp) execp->a_text = obj_textsec(abfd)->size; if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted))) execp->a_text += adata(abfd).exec_bytes_size; - if (obj_aout_subformat (abfd) == q_magic_format) - N_SET_MAGIC (*execp, QMAGIC); - else - N_SET_MAGIC (*execp, ZMAGIC); + N_SET_MAGIC (*execp, ZMAGIC); /* Spec says data section should be rounded up to page boundary. */ obj_datasec(abfd)->size @@ -1446,13 +1433,13 @@ asymbol * NAME (aout, make_empty_symbol) (bfd *abfd) { bfd_size_type amt = sizeof (aout_symbol_type); - aout_symbol_type *new = bfd_zalloc (abfd, amt); + aout_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt); - if (!new) + if (!new_symbol_type) return NULL; - new->symbol.the_bfd = abfd; + new_symbol_type->symbol.the_bfd = abfd; - return &new->symbol; + return &new_symbol_type->symbol; } /* Translate a set of internal symbols into external symbols. */ diff --git a/bfd/pe-arm-wince.c b/bfd/pe-arm-wince.c index 90a53a3..ab86a2c 100644 --- a/bfd/pe-arm-wince.c +++ b/bfd/pe-arm-wince.c @@ -1,5 +1,5 @@ /* BFD back-end for ARM WINCE PE files. - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -35,4 +35,11 @@ #define LOCAL_LABEL_PREFIX "." +#include "sysdep.h" +#include "bfd.h" + +#undef bfd_pe_print_pdata +#define bfd_pe_print_pdata _bfd_pe_print_ce_compressed_pdata + #include "pe-arm.c" + diff --git a/bfd/pe-arm.c b/bfd/pe-arm.c index ce282fd..4c46a7a 100644 --- a/bfd/pe-arm.c +++ b/bfd/pe-arm.c @@ -1,5 +1,5 @@ /* BFD back-end for ARM PECOFF files. - Copyright 1995, 1996, 1999, 2000, 2001, 2002, 2007 + Copyright 1995, 1996, 1999, 2000, 2001, 2002, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/pe-i386.c b/bfd/pe-i386.c index faf8be6..9da6413 100644 --- a/bfd/pe-i386.c +++ b/bfd/pe-i386.c @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 PECOFF files. - Copyright 1995, 1996, 1999, 2001, 2002, 2004, 2007 + Copyright 1995, 1996, 1999, 2001, 2002, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -32,20 +32,6 @@ #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_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 d074466..32791c3 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, 2007 Free Software Foundation, Inc. + Copyright 1999, 2002, 2005, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -34,4 +34,8 @@ #define MCORE_PE +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coff-mcore.c" diff --git a/bfd/pe-mips.c b/bfd/pe-mips.c index 81aeb68..31b87f4 100644 --- a/bfd/pe-mips.c +++ b/bfd/pe-mips.c @@ -1,6 +1,7 @@ /* 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, 2007 Free Software Foundation, Inc. + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 + 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. @@ -21,7 +22,13 @@ MA 02110-1301, USA. */ #define COFF_WITH_PE +/* pei-mips.c may have defined this to default off (0) before + including this file, so don't redefine if that's the case. + Otherwise we're generating objects, not executable images, + so we want to define it to default on. */ +#ifndef COFF_LONG_SECTION_NAMES #define COFF_LONG_SECTION_NAMES +#endif /* COFF_LONG_SECTION_NAMES */ #define PCRELOFFSET TRUE #include "sysdep.h" @@ -851,6 +858,10 @@ coff_mips_is_local_label_name (bfd *abfd, const char *name) #define COFF_NO_HACK_SCNHDR_SIZE +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coffcode.h" const bfd_target diff --git a/bfd/pe-ppc.c b/bfd/pe-ppc.c index e253d38..d36fbfb 100644 --- a/bfd/pe-ppc.c +++ b/bfd/pe-ppc.c @@ -1,5 +1,6 @@ /* BFD back-end for PowerPC PECOFF files. - Copyright 1995, 1996, 1999, 2001, 2007 Free Software Foundation, Inc. + Copyright 1995, 1996, 1999, 2001, 2005, 2007, 2008 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -40,4 +41,8 @@ /* FIXME: This target no longer works. Search for POWERPC_LE_PE in coff-ppc.c and peigen.c. */ +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coff-ppc.c" diff --git a/bfd/pe-sh.c b/bfd/pe-sh.c index 5c35743..dabc3ff 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, 2007 Free Software Foundation, Inc. + Copyright 1995, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c index 2d09561..6ee03a7 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, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Solutions. This file is part of BFD, the Binary File Descriptor library. @@ -129,6 +129,9 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1) they will be handled somewhat correctly in the bfd code. */ if (in->n_sclass == C_SECTION) { + char namebuf[SYMNMLEN + 1]; + const char *name = NULL; + in->n_value = 0x0; /* Create synthetic empty sections as needed. DJ */ @@ -136,33 +139,38 @@ _bfd_XXi_swap_sym_in (bfd * abfd, void * ext1, void * in1) { asection *sec; - for (sec = abfd->sections; sec; sec = sec->next) - { - if (strcmp (sec->name, in->n_name) == 0) - { - in->n_scnum = sec->target_index; - break; - } - } + name = _bfd_coff_internal_syment_name (abfd, in, namebuf); + if (name == NULL) + /* FIXME: Return error. */ + abort (); + sec = bfd_get_section_by_name (abfd, name); + if (sec != NULL) + in->n_scnum = sec->target_index; } if (in->n_scnum == 0) { 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) unused_section_number = sec->target_index + 1; - name = bfd_alloc (abfd, (bfd_size_type) strlen (in->n_name) + 10); - if (name == NULL) - return; - strcpy (name, in->n_name); + if (name == namebuf) + { + name = (const char *) bfd_alloc (abfd, strlen (namebuf) + 1); + if (name == NULL) + /* FIXME: Return error. */ + abort (); + strcpy ((char *) name, namebuf); + } flags = SEC_HAS_CONTENTS | SEC_ALLOC | SEC_DATA | SEC_LOAD; sec = bfd_make_section_anyway_with_flags (abfd, name, flags); + if (sec == NULL) + /* FIXME: Return error. */ + abort (); sec->vma = 0; sec->lma = 0; @@ -223,7 +231,7 @@ void _bfd_XXi_swap_aux_in (bfd * abfd, void * ext1, int type, - int class, + int in_class, int indx ATTRIBUTE_UNUSED, int numaux ATTRIBUTE_UNUSED, void * in1) @@ -231,7 +239,7 @@ _bfd_XXi_swap_aux_in (bfd * abfd, AUXENT *ext = (AUXENT *) ext1; union internal_auxent *in = (union internal_auxent *) in1; - switch (class) + switch (in_class) { case C_FILE: if (ext->x_file.x_fname[0] == 0) @@ -262,7 +270,8 @@ _bfd_XXi_swap_aux_in (bfd * abfd, in->x_sym.x_tagndx.l = H_GET_32 (abfd, ext->x_sym.x_tagndx); in->x_sym.x_tvndx = H_GET_16 (abfd, ext->x_sym.x_tvndx); - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR (abfd, ext); in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX (abfd, ext); @@ -294,7 +303,7 @@ unsigned int _bfd_XXi_swap_aux_out (bfd * abfd, void * inp, int type, - int class, + int in_class, int indx ATTRIBUTE_UNUSED, int numaux ATTRIBUTE_UNUSED, void * extp) @@ -304,7 +313,7 @@ _bfd_XXi_swap_aux_out (bfd * abfd, memset (ext, 0, AUXESZ); - switch (class) + switch (in_class) { case C_FILE: if (in->x_file.x_fname[0] == 0) @@ -336,7 +345,8 @@ _bfd_XXi_swap_aux_out (bfd * abfd, H_PUT_32 (abfd, in->x_sym.x_tagndx.l, ext->x_sym.x_tagndx); H_PUT_16 (abfd, in->x_sym.x_tvndx, ext->x_sym.x_tvndx); - if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class)) + if (in_class == C_BLOCK || in_class == C_FCN || ISFCN (type) + || ISTAG (in_class)) { PUT_FCN_LNNOPTR (abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext); PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext); @@ -540,17 +550,6 @@ _bfd_XXi_swap_aouthdr_out (bfd * abfd, void * in, void * out) bfd_vma sa, fa, ib; IMAGE_DATA_DIRECTORY idata2, idata5, tls; - if (pe->force_minimum_alignment) - { - if (!extra->FileAlignment) - extra->FileAlignment = PE_DEF_FILE_ALIGNMENT; - if (!extra->SectionAlignment) - extra->SectionAlignment = PE_DEF_SECTION_ALIGNMENT; - } - - if (extra->Subsystem == IMAGE_SUBSYSTEM_UNKNOWN) - extra->Subsystem = pe->target_subsystem; - sa = extra->SectionAlignment; fa = extra->FileAlignment; ib = extra->ImageBase; @@ -879,7 +878,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) sometimes). */ if ((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0) { - if (bfd_pe_executable_p (abfd)) + if (bfd_pei_p (abfd)) { ps = scnhdr_int->s_size; ss = 0; @@ -892,7 +891,7 @@ _bfd_XXi_swap_scnhdr_out (bfd * abfd, void * in, void * out) } else { - if (bfd_pe_executable_p (abfd)) + if (bfd_pei_p (abfd)) ps = scnhdr_int->s_paddr; else ps = 0; @@ -1264,7 +1263,7 @@ pe_print_idata (bfd * abfd, void * vfile) else { ft_idx = first_thunk - (ft_section->vma - extra->ImageBase); - ft_data = bfd_malloc (datasize); + ft_data = (bfd_byte *) bfd_malloc (datasize); if (ft_data == NULL) continue; @@ -1310,7 +1309,7 @@ pe_print_idata (bfd * abfd, void * vfile) && first_thunk != 0 && first_thunk != hint_addr) fprintf (file, "\t%04lx", - (long) bfd_get_32 (abfd, ft_data + ft_idx + j)); + (unsigned long) bfd_get_32 (abfd, ft_data + ft_idx + j)); fprintf (file, "\n"); } #else @@ -1342,7 +1341,7 @@ pe_print_idata (bfd * abfd, void * vfile) && first_thunk != 0 && first_thunk != hint_addr) fprintf (file, "\t%04lx", - (long) bfd_get_32 (abfd, ft_data + ft_idx + j)); + (unsigned long) bfd_get_32 (abfd, ft_data + ft_idx + j)); fprintf (file, "\n"); } @@ -1433,7 +1432,7 @@ pe_print_edata (bfd * abfd, void * vfile) fprintf (file, _("\nThere is an export table in %s at 0x%lx\n"), section->name, (unsigned long) addr); - data = bfd_malloc (datasize); + data = (bfd_byte *) bfd_malloc (datasize); if (data == NULL) return FALSE; @@ -1472,7 +1471,7 @@ pe_print_edata (bfd * abfd, void * vfile) fprintf (file, _("Name \t\t\t\t")); - fprintf_vma (file, edt.name); + bfd_fprintf_vma (abfd, file, edt.name); fprintf (file, " %s\n", data + edt.name - adj); @@ -1494,17 +1493,17 @@ pe_print_edata (bfd * abfd, void * vfile) fprintf (file, _("\tExport Address Table \t\t")); - fprintf_vma (file, edt.eat_addr); + bfd_fprintf_vma (abfd, file, edt.eat_addr); fprintf (file, "\n"); fprintf (file, _("\tName Pointer Table \t\t")); - fprintf_vma (file, edt.npt_addr); + bfd_fprintf_vma (abfd, file, edt.npt_addr); fprintf (file, "\n"); fprintf (file, _("\tOrdinal Table \t\t\t")); - fprintf_vma (file, edt.ot_addr); + bfd_fprintf_vma (abfd, file, edt.ot_addr); fprintf (file, "\n"); /* The next table to find is the Export Address Table. It's basically @@ -1581,7 +1580,14 @@ pe_print_edata (bfd * abfd, void * vfile) /* This really is architecture dependent. On IA-64, a .pdata entry consists of three dwords containing relative virtual addresses that specify the start and end address of the code range the entry - covers and the address of the corresponding unwind info data. */ + covers and the address of the corresponding unwind info data. + + On ARM and SH-4, a compressed PDATA structure is used : + _IMAGE_CE_RUNTIME_FUNCTION_ENTRY, whereas MIPS is documented to use + _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY. + See http://msdn2.microsoft.com/en-us/library/ms253988(VS.80).aspx . + + This is the version for uncompressed data. */ static bfd_boolean pe_print_pdata (bfd * abfd, void * vfile) @@ -1662,14 +1668,14 @@ pe_print_pdata (bfd * abfd, void * vfile) prolog_end_addr &= ~(bfd_vma) 0x3; fputc (' ', file); - fprintf_vma (file, i + section->vma); fputc ('\t', file); - fprintf_vma (file, begin_addr); fputc (' ', file); - fprintf_vma (file, end_addr); fputc (' ', file); - fprintf_vma (file, eh_handler); + bfd_fprintf_vma (abfd, file, i + section->vma); fputc ('\t', file); + bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file); + bfd_fprintf_vma (abfd, file, end_addr); fputc (' ', file); + bfd_fprintf_vma (abfd, file, eh_handler); #if !defined(COFF_WITH_pep) || defined(COFF_WITH_pex64) fputc (' ', file); - fprintf_vma (file, eh_data); fputc (' ', file); - fprintf_vma (file, prolog_end_addr); + bfd_fprintf_vma (abfd, file, eh_data); fputc (' ', file); + bfd_fprintf_vma (abfd, file, prolog_end_addr); fprintf (file, " %x", em_data); #endif @@ -1705,8 +1711,190 @@ pe_print_pdata (bfd * abfd, void * vfile) free (data); return TRUE; +#undef PDATA_ROW_SIZE +} + +typedef struct sym_cache +{ + int symcount; + asymbol ** syms; +} sym_cache; + +static asymbol ** +slurp_symtab (bfd *abfd, sym_cache *psc) +{ + asymbol ** sy = NULL; + long storage; + + if (!(bfd_get_file_flags (abfd) & HAS_SYMS)) + { + psc->symcount = 0; + return NULL; + } + + storage = bfd_get_symtab_upper_bound (abfd); + if (storage < 0) + return NULL; + if (storage) + sy = (asymbol **) bfd_malloc (storage); + + psc->symcount = bfd_canonicalize_symtab (abfd, sy); + if (psc->symcount < 0) + return NULL; + return sy; +} + +static const char * +my_symbol_for_address (bfd *abfd, bfd_vma func, sym_cache *psc) +{ + int i; + + if (psc->syms == 0) + psc->syms = slurp_symtab (abfd, psc); + + for (i = 0; i < psc->symcount; i++) + { + if (psc->syms[i]->section->vma + psc->syms[i]->value == func) + return psc->syms[i]->name; + } + + return NULL; +} + +static void +cleanup_syms (sym_cache *psc) +{ + psc->symcount = 0; + free (psc->syms); + psc->syms = NULL; } +/* This is the version for "compressed" pdata. */ + +bfd_boolean +_bfd_XX_print_ce_compressed_pdata (bfd * abfd, void * vfile) +{ +# define PDATA_ROW_SIZE (2 * 4) + FILE *file = (FILE *) vfile; + bfd_byte *data = NULL; + asection *section = bfd_get_section_by_name (abfd, ".pdata"); + bfd_size_type datasize = 0; + bfd_size_type i; + bfd_size_type start, stop; + int onaline = PDATA_ROW_SIZE; + struct sym_cache sym_cache = {0, 0} ; + + if (section == NULL + || coff_section_data (abfd, section) == NULL + || pei_section_data (abfd, section) == NULL) + return TRUE; + + stop = pei_section_data (abfd, section)->virt_size; + if ((stop % onaline) != 0) + fprintf (file, + _("Warning, .pdata section size (%ld) is not a multiple of %d\n"), + (long) stop, onaline); + + fprintf (file, + _("\nThe Function Table (interpreted .pdata section contents)\n")); + + fprintf (file, _("\ + vma:\t\tBegin Prolog Function Flags Exception EH\n\ + \t\tAddress Length Length 32b exc Handler Data\n")); + + datasize = section->size; + if (datasize == 0) + return TRUE; + + if (! bfd_malloc_and_get_section (abfd, section, &data)) + { + if (data != NULL) + free (data); + return FALSE; + } + + start = 0; + + for (i = start; i < stop; i += onaline) + { + bfd_vma begin_addr; + bfd_vma other_data; + bfd_vma prolog_length, function_length; + int flag32bit, exception_flag; + bfd_byte *tdata = 0; + asection *tsection; + + if (i + PDATA_ROW_SIZE > stop) + break; + + begin_addr = GET_PDATA_ENTRY (abfd, data + i ); + other_data = GET_PDATA_ENTRY (abfd, data + i + 4); + + if (begin_addr == 0 && other_data == 0) + /* We are probably into the padding of the section now. */ + break; + + prolog_length = (other_data & 0x000000FF); + function_length = (other_data & 0x3FFFFF00) >> 8; + flag32bit = (int)((other_data & 0x40000000) >> 30); + exception_flag = (int)((other_data & 0x80000000) >> 31); + + fputc (' ', file); + bfd_fprintf_vma (abfd, file, i + section->vma); fputc ('\t', file); + bfd_fprintf_vma (abfd, file, begin_addr); fputc (' ', file); + bfd_fprintf_vma (abfd, file, prolog_length); fputc (' ', file); + bfd_fprintf_vma (abfd, file, function_length); fputc (' ', file); + fprintf (file, "%2d %2d ", flag32bit, exception_flag); + + /* Get the exception handler's address and the data passed from the + .text section. This is really the data that belongs with the .pdata + but got "compressed" out for the ARM and SH4 architectures. */ + tsection = bfd_get_section_by_name (abfd, ".text"); + if (tsection && coff_section_data (abfd, tsection) + && pei_section_data (abfd, tsection)) + { + if (bfd_malloc_and_get_section (abfd, tsection, & tdata)) + { + int xx = (begin_addr - 8) - tsection->vma; + + tdata = (bfd_byte *) bfd_malloc (8); + if (bfd_get_section_contents (abfd, tsection, tdata, (bfd_vma) xx, 8)) + { + bfd_vma eh, eh_data; + + eh = bfd_get_32 (abfd, tdata); + eh_data = bfd_get_32 (abfd, tdata + 4); + fprintf (file, "%08x ", (unsigned int) eh); + fprintf (file, "%08x", (unsigned int) eh_data); + if (eh != 0) + { + const char *s = my_symbol_for_address (abfd, eh, &sym_cache); + + if (s) + fprintf (file, " (%s) ", s); + } + } + free (tdata); + } + else + { + if (tdata) + free (tdata); + } + } + + fprintf (file, "\n"); + } + + free (data); + + cleanup_syms (& sym_cache); + + return TRUE; +#undef PDATA_ROW_SIZE +} + + #define IMAGE_REL_BASED_HIGHADJ 4 static const char * const tbl[] = { @@ -1773,7 +1961,7 @@ pe_print_reloc (bfd * abfd, void * vfile) fprintf (file, _("\nVirtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"), - (unsigned long) virtual_address, size, size, number); + (unsigned long) virtual_address, size, (unsigned long) size, number); for (j = 0; j < number; ++j) { @@ -1786,7 +1974,7 @@ pe_print_reloc (bfd * abfd, void * vfile) fprintf (file, _("\treloc %4d offset %4x [%4lx] %s"), - j, off, (long) (off + virtual_address), tbl[t]); + j, off, (unsigned long) (off + virtual_address), tbl[t]); /* HIGHADJ takes an argument, - the next record *is* the low 16 bits of addend. */ @@ -1876,37 +2064,37 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile) 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, "SizeOfCode\t\t%08lx\n", (unsigned long) i->SizeOfCode); fprintf (file, "SizeOfInitializedData\t%08lx\n", - i->SizeOfInitializedData); + (unsigned long) i->SizeOfInitializedData); fprintf (file, "SizeOfUninitializedData\t%08lx\n", - i->SizeOfUninitializedData); + (unsigned long) i->SizeOfUninitializedData); fprintf (file, "AddressOfEntryPoint\t"); - fprintf_vma (file, i->AddressOfEntryPoint); + bfd_fprintf_vma (abfd, file, i->AddressOfEntryPoint); fprintf (file, "\nBaseOfCode\t\t"); - fprintf_vma (file, i->BaseOfCode); + bfd_fprintf_vma (abfd, 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); + bfd_fprintf_vma (abfd, file, i->BaseOfData); #endif fprintf (file, "\nImageBase\t\t"); - fprintf_vma (file, i->ImageBase); + bfd_fprintf_vma (abfd, file, i->ImageBase); fprintf (file, "\nSectionAlignment\t"); - fprintf_vma (file, i->SectionAlignment); + bfd_fprintf_vma (abfd, file, i->SectionAlignment); fprintf (file, "\nFileAlignment\t\t"); - fprintf_vma (file, i->FileAlignment); + bfd_fprintf_vma (abfd, file, i->FileAlignment); fprintf (file, "\nMajorOSystemVersion\t%d\n", i->MajorOperatingSystemVersion); fprintf (file, "MinorOSystemVersion\t%d\n", i->MinorOperatingSystemVersion); fprintf (file, "MajorImageVersion\t%d\n", i->MajorImageVersion); fprintf (file, "MinorImageVersion\t%d\n", i->MinorImageVersion); fprintf (file, "MajorSubsystemVersion\t%d\n", i->MajorSubsystemVersion); fprintf (file, "MinorSubsystemVersion\t%d\n", i->MinorSubsystemVersion); - fprintf (file, "Win32Version\t\t%08lx\n", i->Reserved1); - fprintf (file, "SizeOfImage\t\t%08lx\n", i->SizeOfImage); - fprintf (file, "SizeOfHeaders\t\t%08lx\n", i->SizeOfHeaders); - fprintf (file, "CheckSum\t\t%08lx\n", i->CheckSum); + fprintf (file, "Win32Version\t\t%08lx\n", (unsigned long) i->Reserved1); + fprintf (file, "SizeOfImage\t\t%08lx\n", (unsigned long) i->SizeOfImage); + fprintf (file, "SizeOfHeaders\t\t%08lx\n", (unsigned long) i->SizeOfHeaders); + fprintf (file, "CheckSum\t\t%08lx\n", (unsigned long) i->CheckSum); switch (i->Subsystem) { @@ -1928,6 +2116,7 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile) case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI: subsystem_name = "Wince CUI"; break; + // These are from UEFI Platform Initialization Specification 1.1. case IMAGE_SUBSYSTEM_EFI_APPLICATION: subsystem_name = "EFI application"; break; @@ -1937,10 +2126,10 @@ _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"; + case IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER: + subsystem_name = "SAL runtime driver"; break; + // This is from revision 8.0 of the MS PE/COFF spec case IMAGE_SUBSYSTEM_XBOX: subsystem_name = "XBOX"; break; @@ -1954,28 +2143,32 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile) fprintf (file, "\t(%s)", subsystem_name); fprintf (file, "\nDllCharacteristics\t%08x\n", i->DllCharacteristics); fprintf (file, "SizeOfStackReserve\t"); - fprintf_vma (file, i->SizeOfStackReserve); + bfd_fprintf_vma (abfd, file, i->SizeOfStackReserve); fprintf (file, "\nSizeOfStackCommit\t"); - fprintf_vma (file, i->SizeOfStackCommit); + bfd_fprintf_vma (abfd, file, i->SizeOfStackCommit); fprintf (file, "\nSizeOfHeapReserve\t"); - fprintf_vma (file, i->SizeOfHeapReserve); + bfd_fprintf_vma (abfd, file, i->SizeOfHeapReserve); fprintf (file, "\nSizeOfHeapCommit\t"); - fprintf_vma (file, i->SizeOfHeapCommit); - fprintf (file, "\nLoaderFlags\t\t%08lx\n", i->LoaderFlags); - fprintf (file, "NumberOfRvaAndSizes\t%08lx\n", i->NumberOfRvaAndSizes); + bfd_fprintf_vma (abfd, file, i->SizeOfHeapCommit); + fprintf (file, "\nLoaderFlags\t\t%08lx\n", (unsigned long) i->LoaderFlags); + fprintf (file, "NumberOfRvaAndSizes\t%08lx\n", + (unsigned long) i->NumberOfRvaAndSizes); fprintf (file, "\nThe Data Directory\n"); for (j = 0; j < IMAGE_NUMBEROF_DIRECTORY_ENTRIES; j++) { fprintf (file, "Entry %1x ", j); - fprintf_vma (file, i->DataDirectory[j].VirtualAddress); - fprintf (file, " %08lx ", i->DataDirectory[j].Size); + bfd_fprintf_vma (abfd, file, i->DataDirectory[j].VirtualAddress); + fprintf (file, " %08lx ", (unsigned long) i->DataDirectory[j].Size); fprintf (file, "%s\n", dir_names[j]); } pe_print_idata (abfd, vfile); pe_print_edata (abfd, vfile); - pe_print_pdata (abfd, vfile); + if (bfd_coff_have_print_pdata (abfd)) + bfd_coff_print_pdata (abfd, vfile); + else + pe_print_pdata (abfd, vfile); pe_print_reloc (abfd, vfile); return TRUE; @@ -1987,13 +2180,22 @@ _bfd_XX_print_private_bfd_data_common (bfd * abfd, void * vfile) bfd_boolean _bfd_XX_bfd_copy_private_bfd_data_common (bfd * ibfd, bfd * obfd) { + pe_data_type *ipe, *ope; + /* One day we may try to grok other private data. */ if (ibfd->xvec->flavour != bfd_target_coff_flavour || obfd->xvec->flavour != bfd_target_coff_flavour) return TRUE; - pe_data (obfd)->pe_opthdr = pe_data (ibfd)->pe_opthdr; - pe_data (obfd)->dll = pe_data (ibfd)->dll; + ipe = pe_data (ibfd); + ope = pe_data (obfd); + + /* pe_opthdr is copied in copy_object. */ + ope->dll = ipe->dll; + + /* Don't copy input subsystem if output is different from input. */ + if (obfd->xvec != ibfd->xvec) + ope->pe_opthdr.Subsystem = IMAGE_SUBSYSTEM_UNKNOWN; /* For strip: if we removed .reloc, we'll make a real mess of things if we don't remove this entry as well. */ @@ -2076,7 +2278,9 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo) /* 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 + if ((h1->root.type == bfd_link_hash_defined + || h1->root.type == bfd_link_hash_defweak) + && 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 @@ -2093,6 +2297,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo) h1 = coff_link_hash_lookup (coff_hash_table (info), ".idata$4", FALSE, FALSE, TRUE); if (h1 != NULL + && (h1->root.type == bfd_link_hash_defined + || h1->root.type == bfd_link_hash_defweak) && h1->root.u.def.section != NULL && h1->root.u.def.section->output_section != NULL) pe_data (abfd)->pe_opthdr.DataDirectory[PE_IMPORT_TABLE].Size = @@ -2113,6 +2319,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo) h1 = coff_link_hash_lookup (coff_hash_table (info), ".idata$5", FALSE, FALSE, TRUE); if (h1 != NULL + && (h1->root.type == bfd_link_hash_defined + || h1->root.type == bfd_link_hash_defweak) && 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 = @@ -2130,6 +2338,8 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo) h1 = coff_link_hash_lookup (coff_hash_table (info), ".idata$6", FALSE, FALSE, TRUE); if (h1 != NULL + && (h1->root.type == bfd_link_hash_defined + || h1->root.type == bfd_link_hash_defweak) && 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 = @@ -2150,7 +2360,9 @@ _bfd_XXi_final_link_postscript (bfd * abfd, struct coff_final_link_info *pfinfo) "__tls_used", FALSE, FALSE, TRUE); if (h1 != NULL) { - if (h1->root.u.def.section != NULL + if ((h1->root.type == bfd_link_hash_defined + || h1->root.type == bfd_link_hash_defweak) + && 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 diff --git a/bfd/pef.c b/bfd/pef.c index a1b71ac..4fcae1e 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, 2006, 2007 + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -52,6 +52,7 @@ #define bfd_pef_bfd_is_group_section bfd_generic_is_group_section #define bfd_pef_bfd_discard_group bfd_generic_discard_group #define bfd_pef_section_already_linked _bfd_generic_section_already_linked +#define bfd_pef_bfd_define_common_symbol bfd_generic_define_common_symbol #define bfd_pef_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define bfd_pef_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define bfd_pef_bfd_link_add_symbols _bfd_generic_link_add_symbols @@ -97,7 +98,7 @@ bfd_pef_parse_traceback_table (bfd *abfd, if (! (table.flags2 & TB_NAME_PRESENT)) return -1; - if (! table.flags1 & TB_HAS_TBOFF) + if (! (table.flags1 & TB_HAS_TBOFF)) return -1; offset = 8; @@ -186,7 +187,7 @@ bfd_pef_parse_traceback_table (bfd *abfd, offset += 4; if (file != NULL) - fprintf (file, " [length = 0x%lx]", (long) offset); + fprintf (file, " [length = 0x%lx]", (unsigned long) offset); return offset; } @@ -360,7 +361,7 @@ bfd_pef_parse_imported_symbol (bfd *abfd ATTRIBUTE_UNUSED, BFD_ASSERT (len == 4); value = bfd_getb32 (buf); - symbol->class = value >> 24; + symbol->symbol_class = value >> 24; symbol->name = value & 0x00ffffff; return 0; diff --git a/bfd/pef.h b/bfd/pef.h index 4d80648..db8d18c 100644 --- a/bfd/pef.h +++ b/bfd/pef.h @@ -1,5 +1,5 @@ /* PEF support for BFD. - Copyright 1999, 2000, 2001, 2002, 2007 + Copyright 1999, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -79,7 +79,7 @@ enum bfd_pef_imported_library_options struct bfd_pef_imported_symbol { - unsigned char class; + unsigned char symbol_class; unsigned long name; }; typedef struct bfd_pef_imported_symbol bfd_pef_imported_symbol; diff --git a/bfd/pei-arm.c b/bfd/pei-arm.c index 0b56bcb..21c37a3 100644 --- a/bfd/pei-arm.c +++ b/bfd/pei-arm.c @@ -1,5 +1,6 @@ /* BFD back-end for arm PE IMAGE COFF files. - Copyright 1995, 1996, 1999, 2002, 2007 Free Software Foundation, Inc. + Copyright 1995, 1996, 1999, 2002, 2005, 2006, 2007, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -31,7 +32,8 @@ #define COFF_IMAGE_WITH_PE #define COFF_WITH_PE #define PCRELOFFSET TRUE -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #define COFF_SECTION_ALIGNMENT_ENTRIES \ { COFF_SECTION_NAME_EXACT_MATCH (".bss"), \ diff --git a/bfd/pei-i386.c b/bfd/pei-i386.c index 70dc972..d17dd65 100644 --- a/bfd/pei-i386.c +++ b/bfd/pei-i386.c @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 PE IMAGE COFF files. - Copyright 1995, 1996, 1999, 2002, 2004, 2007 + Copyright 1995, 1996, 1999, 2002, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -28,25 +28,12 @@ #define COFF_WITH_PE #define PCRELOFFSET TRUE #define TARGET_UNDERSCORE '_' -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #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_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/efi-app-ia64.c b/bfd/pei-ia64.c similarity index 71% rename from bfd/efi-app-ia64.c rename to bfd/pei-ia64.c index 67e137d..745147e 100644 --- a/bfd/efi-app-ia64.c +++ b/bfd/pei-ia64.c @@ -1,7 +1,11 @@ -/* BFD back-end for HP/Intel IA-64 EFI application files. - Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. +/* BFD back-end for HP/Intel IA-64 PE IMAGE COFF files. + Copyright 1999, 2000, 2001, 2002, 2007, 2009 + Free Software Foundation, Inc. Contributed by David Mosberger + This implementation only supports objcopy to ouput IA-64 PE IMAGE COFF + files. + This file is part of BFD, the Binary File Descriptor library. This program is free software; you can redistribute it and/or modify @@ -22,15 +26,14 @@ #include "sysdep.h" #include "bfd.h" -#define TARGET_SYM bfd_efi_app_ia64_vec -#define TARGET_NAME "efi-app-ia64" +#define TARGET_SYM bfd_pei_ia64_vec +#define TARGET_NAME "pei-ia64" #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 +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #include "coff-ia64.c" diff --git a/bfd/pei-mcore.c b/bfd/pei-mcore.c index b1f30cc..bad8108 100644 --- a/bfd/pei-mcore.c +++ b/bfd/pei-mcore.c @@ -1,5 +1,6 @@ /* BFD back-end for MCore PECOFF files. - Copyright 1999, 2002, 2007 Free Software Foundation, Inc. + Copyright 1999, 2002, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -31,8 +32,13 @@ #define COFF_IMAGE_WITH_PE #define COFF_WITH_PE #define PCRELOFFSET TRUE -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #define MCORE_PE +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coff-mcore.c" diff --git a/bfd/pei-mips.c b/bfd/pei-mips.c index 809d754..cb5e962 100644 --- a/bfd/pei-mips.c +++ b/bfd/pei-mips.c @@ -1,5 +1,6 @@ /* BFD back-end for MIPS PE IMAGE COFF files. - Copyright 1995, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 1995, 2000, 2001, 2002, 2005, 2007, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -25,7 +26,8 @@ #define TARGET_NAME "pei-mips" #define COFF_IMAGE_WITH_PE #define PCRELOFFSET TRUE -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #include "pe-mips.c" diff --git a/bfd/pei-ppc.c b/bfd/pei-ppc.c index e109c69..671b2ce 100644 --- a/bfd/pei-ppc.c +++ b/bfd/pei-ppc.c @@ -1,5 +1,6 @@ /* BFD back-end for PowerPC PE IMAGE COFF files. - Copyright 1995, 1996, 1999, 2007 Free Software Foundation, Inc. + Copyright 1995, 1996, 1999, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -35,11 +36,16 @@ #define COFF_IMAGE_WITH_PE #define COFF_WITH_PE -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 /* FIXME: Verify PCRELOFFSET is always false */ /* FIXME: This target no longer works. Search for POWERPC_LE_PE in coff-ppc.c and peigen.c. */ +#ifndef bfd_pe_print_pdata +#define bfd_pe_print_pdata NULL +#endif + #include "coff-ppc.c" diff --git a/bfd/pei-sh.c b/bfd/pei-sh.c index 56c9b18..a7975d8 100644 --- a/bfd/pei-sh.c +++ b/bfd/pei-sh.c @@ -1,5 +1,6 @@ /* BFD back-end for SH PE IMAGE COFF files. - Copyright 1995, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 1995, 2000, 2001, 2002, 2005, 2007, 2009 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -28,7 +29,8 @@ #define COFF_WITH_PE #define PCRELOFFSET TRUE #define TARGET_UNDERSCORE '_' -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #include "coff-sh.c" diff --git a/bfd/pei-x86_64.c b/bfd/pei-x86_64.c index f4dd3e1..f5b8abd 100644 --- a/bfd/pei-x86_64.c +++ b/bfd/pei-x86_64.c @@ -1,5 +1,5 @@ /* BFD back-end for Intel 386 PE IMAGE COFF files. - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -30,9 +30,11 @@ #define COFF_WITH_pex64 #define PCRELOFFSET TRUE #define TARGET_UNDERSCORE '_' -#define COFF_LONG_SECTION_NAMES +/* Long section names not allowed in executable images, only object files. */ +#define COFF_LONG_SECTION_NAMES 0 #define COFF_SUPPORT_GNU_LINKONCE #define COFF_LONG_FILENAMES +#define PDATA_ROW_SIZE (3 * 4) #define COFF_SECTION_ALIGNMENT_ENTRIES \ { COFF_SECTION_NAME_EXACT_MATCH (".bss"), \ @@ -52,4 +54,478 @@ { COFF_SECTION_NAME_PARTIAL_MATCH (".gnu.linkonce.wi."), \ COFF_ALIGNMENT_FIELD_EMPTY, COFF_ALIGNMENT_FIELD_EMPTY, 0 } +/* Note we have to make sure not to include headers twice. + Not all headers are wrapped in #ifdef guards, so we define + PEI_HEADERS to prevent double including in coff-x86_64.c */ +#define PEI_HEADERS +#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 "libpei.h" +#include "libiberty.h" + +#undef AOUTSZ +#define AOUTSZ PEPAOUTSZ +#define PEAOUTHDR PEPAOUTHDR + +static const char *pex_regs[16] = { + "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" +}; + +static void +pex64_get_runtime_function (bfd *abfd, struct pex64_runtime_function *rf, + const void *data) +{ + const struct external_pex64_runtime_function *ex_rf = + (const struct external_pex64_runtime_function *) data; + rf->rva_BeginAddress = bfd_get_32 (abfd, ex_rf->rva_BeginAddress); + rf->rva_EndAddress = bfd_get_32 (abfd, ex_rf->rva_EndAddress); + rf->rva_UnwindData = bfd_get_32 (abfd, ex_rf->rva_UnwindData); + rf->isChained = PEX64_IS_RUNTIME_FUNCTION_CHAINED (rf); + rf->rva_UnwindData = PEX64_GET_UNWINDDATA_UNIFIED_RVA (rf); +} + +static void +pex64_get_unwind_info (bfd *abfd, struct pex64_unwind_info *ui, void *data) +{ + struct external_pex64_unwind_info *ex_ui = + (struct external_pex64_unwind_info *) data; + bfd_byte *ex_dta = (bfd_byte *) data; + + memset (ui, 0, sizeof (struct pex64_unwind_info)); + ui->Version = PEX64_UWI_VERSION (ex_ui->Version_Flags); + ui->Flags = PEX64_UWI_FLAGS (ex_ui->Version_Flags); + ui->SizeOfPrologue = (bfd_vma) ex_ui->SizeOfPrologue; + ui->CountOfCodes = (bfd_vma) ex_ui->CountOfCodes; + ui->FrameRegister = PEX64_UWI_FRAMEREG (ex_ui->FrameRegisterOffset); + ui->FrameOffset = PEX64_UWI_FRAMEOFF (ex_ui->FrameRegisterOffset); + ui->sizeofUnwindCodes = PEX64_UWI_SIZEOF_UWCODE_ARRAY (ui->CountOfCodes); + ui->SizeOfBlock = ui->sizeofUnwindCodes + 4; + ui->rawUnwindCodes = &ex_dta[4]; + ex_dta += ui->SizeOfBlock; + switch (ui->Flags) + { + case UNW_FLAG_EHANDLER: + ui->rva_ExceptionHandler = bfd_get_32 (abfd, ex_dta); + break; + case UNW_FLAG_UHANDLER: + ui->rva_TerminationHandler = bfd_get_32 (abfd, ex_dta); + break; + case UNW_FLAG_FHANDLER: + ui->rva_FrameHandler = bfd_get_32 (abfd, ex_dta); + ui->FrameHandlerArgument = bfd_get_32 (abfd, ex_dta + 4); + ui->SizeOfBlock += 8; + return; + case UNW_FLAG_CHAININFO: + ui->rva_FunctionEntry = bfd_get_32 (abfd, ex_dta); + ui->SizeOfBlock += 4; + return; + default: + return; + } + ex_dta += 4; + ui->SizeOfBlock += 8; + ui->CountOfScopes = bfd_get_32 (abfd, ex_dta); + ex_dta += 4; + ui->rawScopeEntries = ex_dta; + ui->SizeOfBlock += (ui->CountOfScopes * PEX64_SCOPE_ENTRY_SIZE); +} + +static void +pex64_get_scope_entry (bfd *abfd, struct pex64_scope_entry *se, + bfd_vma idx, const bfd_byte *x) +{ + const struct external_pex64_scope_entry *ex_se; + x += (idx * PEX64_SCOPE_ENTRY_SIZE); + ex_se = (const struct external_pex64_scope_entry *) x; + memset (se, 0, sizeof (struct pex64_scope_entry)); + se->rva_BeginAddress = bfd_get_32 (abfd, ex_se->rva_BeginAddress); + se->rva_EndAddress = bfd_get_32 (abfd, ex_se->rva_EndAddress); + se->rva_HandlerAddress = bfd_get_32 (abfd, ex_se->rva_HandlerAddress); + se->rva_JumpAddress = bfd_get_32 (abfd, ex_se->rva_JumpAddress); +} + +static void +pex64_xdata_print_uwd_codes (FILE *file, struct pex64_unwind_info *ui, + bfd_vma pc_addr) +{ + bfd_vma i; + bfd_vma tmp = 0; + const bfd_byte *insns[256]; + bfd_vma insns_count = 0; + const bfd_byte *dta = ui->rawUnwindCodes; + + if (ui->CountOfCodes == 0 || !dta) + return; + + /* Sort array ascending. Note: it is stored in reversed order. */ + for (i = 0; i < ui->CountOfCodes; i++) + { + const bfd_byte *t; + + t = insns[insns_count++] = &dta[i * 2]; + switch (PEX64_UNWCODE_CODE (t[1])) + { + case UWOP_PUSH_NONVOL: + case UWOP_ALLOC_SMALL: + case UWOP_SET_FPREG: + case UWOP_PUSH_MACHFRAME: + break; + case UWOP_ALLOC_LARGE: + if (PEX64_UNWCODE_INFO (t[1]) == 0) + { + i += 1; + break; + } + else if (PEX64_UNWCODE_INFO (t[1]) == 1) + { + i += 2; + break; + } + /* fall through. */ + default: + fprintf (file, "\t contains unknown code (%u).\n", + (unsigned int) PEX64_UNWCODE_CODE (t[1])); + return; + case UWOP_SAVE_NONVOL: + case UWOP_SAVE_XMM: + case UWOP_SAVE_XMM128: + i++; + break; + case UWOP_SAVE_NONVOL_FAR: + case UWOP_SAVE_XMM_FAR: + case UWOP_SAVE_XMM128_FAR: + i += 2; + break; + } + } + fprintf (file, "\t At pc 0x"); + fprintf_vma (file, pc_addr); + fprintf (file, " there are the following saves (in logical order).\n"); + for (i = insns_count; i > 0;) + { + --i; + dta = insns[i]; + fprintf (file, "\t insn ends at pc+0x%02x: ", (unsigned int) dta[0]); + switch (PEX64_UNWCODE_CODE (dta[1])) + { + case UWOP_PUSH_NONVOL: + fprintf (file, "push %s.\n", pex_regs[PEX64_UNWCODE_INFO (dta[1])]); + break; + case UWOP_ALLOC_LARGE: + if (PEX64_UNWCODE_INFO (dta[1]) == 0) + { + tmp = (bfd_vma) (*((unsigned short *) &dta[2])); + tmp *= 8; + } + else + tmp = (bfd_vma) (*((unsigned int *)&dta[2])); + fprintf (file, "save stack region of size 0x"); + fprintf_vma (file, tmp); + fprintf (file,".\n"); + break; + case UWOP_ALLOC_SMALL: + tmp = (bfd_vma) PEX64_UNWCODE_INFO (dta[1]); + tmp += 1; + tmp *= 8; + fprintf (file, "save stack region of size 0x"); + fprintf_vma (file, tmp); + fprintf (file,".\n"); + break; + case UWOP_SET_FPREG: + tmp = (bfd_vma) PEX64_UNWCODE_INFO (dta[1]); + tmp *= 16; + fprintf (file, "FPReg = (FrameReg) + 0x"); + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_SAVE_NONVOL: + fprintf (file, "mov %s at 0x", + pex_regs[PEX64_UNWCODE_INFO (dta[1])]); + tmp = (bfd_vma) (*((unsigned short *) &dta[2])); + tmp *= 8; + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_SAVE_NONVOL_FAR: + fprintf (file, "mov %s at 0x", + pex_regs[PEX64_UNWCODE_INFO (dta[1])]); + tmp = (bfd_vma) (*((unsigned int *) &dta[2])); + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_SAVE_XMM: + tmp = (bfd_vma) (*((unsigned short *) &dta[2])); + tmp *= 8; + fprintf (file, "mov mm%u at 0x", + (unsigned int) PEX64_UNWCODE_INFO (dta[1])); + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_SAVE_XMM_FAR: + tmp = (bfd_vma) (*((unsigned int *) &dta[2])); + fprintf (file, "mov mm%u at 0x", + (unsigned int) PEX64_UNWCODE_INFO (dta[1])); + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_SAVE_XMM128: + tmp = (bfd_vma) (*((unsigned short *) &dta[2])); + tmp *= 16; + fprintf (file, "mov xmm%u at 0x", + (unsigned int) PEX64_UNWCODE_INFO ( dta[1])); + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_SAVE_XMM128_FAR: + tmp = (bfd_vma) (*((unsigned int *) &dta[2])); + fprintf (file, "mov xmm%u at 0x", + (unsigned int) PEX64_UNWCODE_INFO (dta[1])); + fprintf_vma (file, tmp); + fprintf (file, ".\n"); + break; + case UWOP_PUSH_MACHFRAME: + fprintf (file, "interrupt entry (SS, old RSP, EFLAGS, CS, RIP"); + if (PEX64_UNWCODE_INFO (dta[1]) == 0) + { + fprintf (file, ")"); + } + else if (PEX64_UNWCODE_INFO (dta[1]) == 1) + { + fprintf (file, ",ErrorCode)"); + } + else + fprintf (file, ", unknown(%u))", + (unsigned int) PEX64_UNWCODE_INFO (dta[1])); + fprintf (file,".\n"); + break; + default: + fprintf (file, "unknown code %u.\n", + (unsigned int) PEX64_UNWCODE_INFO (dta[1])); + break; + } + } +} + +static asection * +pex64_get_section_by_rva (bfd *abfd, bfd_vma addr, const char *sec_name) +{ + asection *section = bfd_get_section_by_name (abfd, sec_name); + bfd_vma vsize; + bfd_size_type datasize = 0; + + if (section == NULL + || coff_section_data (abfd, section) == NULL + || pei_section_data (abfd, section) == NULL) + return NULL; + vsize = section->vma - pe_data (abfd)->pe_opthdr.ImageBase; + datasize = section->size; + if (!datasize || vsize > addr || (vsize + datasize) < addr) + return NULL; + return section; +} + +static void +pex64_dump_xdata (FILE *file, bfd *abfd, bfd_vma addr, bfd_vma pc_addr) +{ + asection *section = pex64_get_section_by_rva (abfd, addr, ".rdata"); + bfd_vma vsize; + bfd_byte *data = NULL; + bfd_vma i; + + if (!section) + section = pex64_get_section_by_rva (abfd, addr, ".data"); + if (!section) + section = pex64_get_section_by_rva (abfd, addr, ".xdata"); + if (!section) + { + section = pex64_get_section_by_rva (abfd, addr, ".pdata"); + if (section) + { + fprintf (file, "\t Shares information with pdata element at 0x"); + fprintf_vma (file, addr + pe_data (abfd)->pe_opthdr.ImageBase); + fprintf (file, ".\n"); + } + } + if (!section) + return; + vsize = section->vma - pe_data (abfd)->pe_opthdr.ImageBase; + addr -= vsize; + if (bfd_malloc_and_get_section (abfd, section, &data)) + { + struct pex64_unwind_info ui; + + if (!data) + return; + + pex64_get_unwind_info (abfd, &ui, &data[addr]); + + if (ui.Version != 1) + { + fprintf (file, "\tVersion %u (unknown).\n", (unsigned int) ui.Version); + return; + } + + fprintf (file, "\tFlags: "); + switch (ui.Flags) + { + case UNW_FLAG_NHANDLER: + fprintf (file, "UNW_FLAG_NHANDLER"); + break; + case UNW_FLAG_EHANDLER: + fprintf (file, "UNW_FLAG_EHANDLER"); + break; + case UNW_FLAG_UHANDLER: + fprintf (file, "UNW_FLAG_UHANDLER"); + break; + case UNW_FLAG_FHANDLER: + fprintf (file, "UNW_FLAG_FHANDLER = (UNW_FLAG_EHANDLER | UNW_FLAG_UHANDLER)"); + break; + case UNW_FLAG_CHAININFO: + fprintf (file, "UNW_FLAG_CHAININFO"); + break; + default: + fprintf (file, "unknown flags value 0x%x", (unsigned int) ui.Flags); + break; + } + fprintf (file, ".\n"); + if (ui.CountOfCodes != 0) + fprintf (file, "\tEntry has %u codes.", (unsigned int) ui.CountOfCodes); + fprintf (file, "\tPrologue size: %u, Frame offset = 0x%x.\n", + (unsigned int) ui.SizeOfPrologue, (unsigned int) ui.FrameOffset); + fprintf (file, "\tFrame register is %s.\n", + ui.FrameRegister == 0 ? "CFA" + : pex_regs[(unsigned int) ui.FrameRegister]); + + pex64_xdata_print_uwd_codes (file, &ui, pc_addr); + + switch (ui.Flags) + { + case UNW_FLAG_NHANDLER: + return; + case UNW_FLAG_EHANDLER: + fprintf (file, "\texception_handler at 0x%x.\n", (unsigned int) ui.rva_ExceptionHandler); + break; + case UNW_FLAG_UHANDLER: + fprintf (file, "\ttermination_handler at 0x%x.\n", (unsigned int) ui.rva_TerminationHandler); + case UNW_FLAG_FHANDLER: + fprintf (file, "\tframe_handler at 0x%x.\n", (unsigned int) ui.rva_FrameHandler); + fprintf (file, "\t Argument for FrameHandler: 0x%x.\n", + (unsigned int) ui.FrameHandlerArgument); + return; + case UNW_FLAG_CHAININFO: + fprintf (file, "\t Function Entry: 0x%x\n", (unsigned int) ui.rva_FunctionEntry); + return; + default: + fprintf (file, "\t Unknown flag value of 0x%x\n", (unsigned int) ui.Flags); + return; + } + fprintf (file, "\t 0x%x # of scope(s)\n", (unsigned int) ui.CountOfScopes); + for (i = 0; i < ui.CountOfScopes; i++) + { + struct pex64_scope_entry se; + pex64_get_scope_entry (abfd, &se, i, ui.rawScopeEntries); + fprintf (file, "\t scope #%u: BeginAddress: 0x%x, EndAddress: 0x%x," + "\n\t\tHandlerAddress:0x%x, JumpTarget:0x%x\n", + (unsigned int) (i + 1), + (unsigned int) se.rva_BeginAddress, + (unsigned int) se.rva_EndAddress, + (unsigned int) se.rva_HandlerAddress, + (unsigned int) se.rva_JumpAddress); + } + } + if (data != NULL) + free (data); +} + +static bfd_boolean +pex64_bfd_print_pdata (bfd *abfd, void *vfile) +{ + FILE *file = (FILE *) vfile; + bfd_byte *data = NULL; + asection *section = bfd_get_section_by_name (abfd, ".pdata"); + bfd_size_type datasize = 0; + bfd_size_type i; + bfd_size_type start, stop; + int onaline = PDATA_ROW_SIZE; + + if (section == NULL + || coff_section_data (abfd, section) == NULL + || pei_section_data (abfd, section) == NULL) + return TRUE; + + stop = pei_section_data (abfd, section)->virt_size; + if ((stop % onaline) != 0) + fprintf (file, + _("warning: .pdata section size (%ld) is not a multiple of %d\n"), + (long) stop, onaline); + + fprintf (file, + _("\nThe Function Table (interpreted .pdata section contents)\n")); + + fprintf (file, _("vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n")); + + datasize = section->size; + if (datasize == 0) + return TRUE; + + if (!bfd_malloc_and_get_section (abfd, section, &data)) + { + if (data != NULL) + free (data); + return FALSE; + } + + start = 0; + + for (i = start; i < stop; i += onaline) + { + struct pex64_runtime_function rf; + + if (i + PDATA_ROW_SIZE > stop) + break; + pex64_get_runtime_function (abfd, &rf, &data[i]); + + if (rf.rva_BeginAddress == 0 && rf.rva_EndAddress == 0 + && rf.rva_UnwindData == 0) + /* We are probably into the padding of the section now. */ + break; + + fputc (' ', file); + fprintf_vma (file, i + section->vma); + fprintf (file, ":\t"); + rf.rva_BeginAddress += pe_data (abfd)->pe_opthdr.ImageBase; + fprintf_vma (file, rf.rva_BeginAddress); + fputc (' ', file); + rf.rva_EndAddress += pe_data (abfd)->pe_opthdr.ImageBase; + fprintf_vma (file, rf.rva_EndAddress); + fputc (' ', file); + fprintf_vma (file, rf.rva_UnwindData); + fprintf (file, "\n"); + + if (rf.rva_UnwindData != 0) + { + if (rf.isChained) + { + fprintf (file, "\t shares information with pdata element at 0x"); + fprintf_vma (file, rf.rva_UnwindData + pe_data (abfd)->pe_opthdr.ImageBase); + fprintf (file, ".\n"); + } + else + pex64_dump_xdata (file, abfd, rf.rva_UnwindData, rf.rva_BeginAddress); + } + } + + free (data); + + return TRUE; +} + +#define bfd_pe_print_pdata pex64_bfd_print_pdata + #include "coff-x86_64.c" diff --git a/bfd/peicode.h b/bfd/peicode.h index 9a512a7..8f25ef9 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, 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Solutions. This file is part of BFD, the Binary File Descriptor library. @@ -236,8 +236,8 @@ coff_swap_scnhdr_in (bfd * abfd, void * ext, void * in) use the virtual size (stored in s_paddr) instead. */ if (scnhdr_int->s_paddr > 0 && (((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0 - && (! bfd_pe_executable_p (abfd) || scnhdr_int->s_size == 0)) - || (bfd_pe_executable_p (abfd) && scnhdr_int->s_size > scnhdr_int->s_paddr))) + && (! bfd_pei_p (abfd) || scnhdr_int->s_size == 0)) + || (bfd_pei_p (abfd) && (scnhdr_int->s_size > scnhdr_int->s_paddr)))) /* This code used to set scnhdr_int->s_paddr to 0. However, coff_set_alignment_hook stores s_paddr in virt_size, which only works if it correctly holds the virtual size of the @@ -264,13 +264,6 @@ pe_mkobject (bfd * abfd) /* in_reloc_p is architecture dependent. */ pe->in_reloc_p = in_reloc_p; -#ifdef PEI_FORCE_MINIMUM_ALIGNMENT - pe->force_minimum_alignment = 1; -#endif -#ifdef PEI_TARGET_SUBSYSTEM - pe->target_subsystem = PEI_TARGET_SUBSYSTEM; -#endif - return TRUE; } @@ -429,7 +422,6 @@ pe_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd) #define SIZEOF_ILF_SECTIONS (NUM_ILF_SECTIONS * sizeof (struct coff_section_tdata)) #define ILF_DATA_SIZE \ - sizeof (* vars.bim) \ + SIZEOF_ILF_SYMS \ + SIZEOF_ILF_SYM_TABLE \ + SIZEOF_ILF_NATIVE_SYMS \ @@ -787,15 +779,16 @@ pe_ILF_build_a_bfd (bfd * abfd, We are going to construct the contents of the BFD in memory, so allocate all the space that we will need right now. */ - ptr = bfd_zalloc (abfd, (bfd_size_type) ILF_DATA_SIZE); - if (ptr == NULL) + vars.bim + = (struct bfd_in_memory *) bfd_malloc ((bfd_size_type) sizeof (*vars.bim)); + if (vars.bim == NULL) return FALSE; - /* Create a bfd_in_memory structure. */ - vars.bim = (struct bfd_in_memory *) ptr; + ptr = (bfd_byte *) bfd_zmalloc ((bfd_size_type) ILF_DATA_SIZE); vars.bim->buffer = ptr; vars.bim->size = ILF_DATA_SIZE; - ptr += sizeof (* vars.bim); + if (ptr == NULL) + goto error_return; /* Initialise the pointers to regions of the memory and the other contents of the pe_ILF_vars structure as well. */ @@ -849,7 +842,7 @@ pe_ILF_build_a_bfd (bfd * abfd, id4 = pe_ILF_make_a_section (& vars, ".idata$4", SIZEOF_IDATA4, 0); id5 = pe_ILF_make_a_section (& vars, ".idata$5", SIZEOF_IDATA5, 0); if (id4 == NULL || id5 == NULL) - return FALSE; + goto error_return; /* Fill in the contents of these sections. */ if (import_name_type == IMPORT_ORDINAL) @@ -876,7 +869,7 @@ pe_ILF_build_a_bfd (bfd * abfd, /* Create .idata$6 - the Hint Name Table. */ id6 = pe_ILF_make_a_section (& vars, ".idata$6", SIZEOF_IDATA6, 0); if (id6 == NULL) - return FALSE; + goto error_return; /* If necessary, trim the import symbol name. */ symbol = symbol_name; @@ -943,7 +936,7 @@ pe_ILF_build_a_bfd (bfd * abfd, /* Create the .text section. */ text = pe_ILF_make_a_section (& vars, ".text", jtab[i].size, SEC_CODE); if (text == NULL) - return FALSE; + goto error_return; /* Copy in the jump code. */ memcpy (text->contents, jtab[i].data, jtab[i].size); @@ -992,10 +985,10 @@ pe_ILF_build_a_bfd (bfd * abfd, if ( ! bfd_set_start_address (abfd, (bfd_vma) 0) || ! bfd_coff_set_arch_mach_hook (abfd, & internal_f)) - return FALSE; + goto error_return; if (bfd_coff_mkobject_hook (abfd, (void *) & internal_f, NULL) == NULL) - return FALSE; + goto error_return; coff_data (abfd)->pe = 1; #ifdef THUMBPEMAGIC @@ -1057,6 +1050,12 @@ pe_ILF_build_a_bfd (bfd * abfd, abfd->flags |= HAS_SYMS; return TRUE; + + error_return: + if (vars.bim->buffer != NULL) + free (vars.bim->buffer); + free (vars.bim); + return FALSE; } /* We have detected a Image Library Format archive element. @@ -1201,7 +1200,7 @@ pe_ILF_object_p (bfd * abfd) /* ptr += 2; */ /* Now read in the two strings that follow. */ - ptr = bfd_alloc (abfd, size); + ptr = (bfd_byte *) bfd_alloc (abfd, size); if (ptr == NULL) return NULL; @@ -1236,25 +1235,6 @@ 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) { @@ -1262,7 +1242,6 @@ 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 @@ -1327,64 +1306,7 @@ pe_bfd_object_p (bfd * abfd) return NULL; } - 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)); - - /* Don't check PE vs. EFI if arch is unknown. */ - if (arch == arch_type_unknown) - return target; - - 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; + return coff_object_p (abfd); } #define coff_object_p pe_bfd_object_p diff --git a/bfd/plugin.c b/bfd/plugin.c new file mode 100644 index 0000000..a81db6f --- /dev/null +++ b/bfd/plugin.c @@ -0,0 +1,494 @@ +/* Plugin support for BFD. + Copyright 2009 + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +#include "config.h" +#include +#include +#include +#include "plugin-api.h" +#include "sysdep.h" +#include "plugin.h" +#include "libbfd.h" +#include "libiberty.h" +#include + +#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup +#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook +#define bfd_plugin_get_section_contents _bfd_generic_get_section_contents +#define bfd_plugin_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define bfd_plugin_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data +#define bfd_plugin_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data +#define bfd_plugin_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data +#define bfd_plugin_bfd_set_private_flags _bfd_generic_bfd_set_private_flags +#define bfd_plugin_core_file_matches_executable_p generic_core_file_matches_executable_p +#define bfd_plugin_bfd_is_local_label_name _bfd_nosymbols_bfd_is_local_label_name +#define bfd_plugin_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) +#define bfd_plugin_get_lineno _bfd_nosymbols_get_lineno +#define bfd_plugin_find_nearest_line _bfd_nosymbols_find_nearest_line +#define bfd_plugin_find_inliner_info _bfd_nosymbols_find_inliner_info +#define bfd_plugin_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol +#define bfd_plugin_read_minisymbols _bfd_generic_read_minisymbols +#define bfd_plugin_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol +#define bfd_plugin_set_arch_mach bfd_default_set_arch_mach +#define bfd_plugin_set_section_contents _bfd_generic_set_section_contents +#define bfd_plugin_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents +#define bfd_plugin_bfd_relax_section bfd_generic_relax_section +#define bfd_plugin_bfd_link_hash_table_create _bfd_generic_link_hash_table_create +#define bfd_plugin_bfd_link_hash_table_free _bfd_generic_link_hash_table_free +#define bfd_plugin_bfd_link_add_symbols _bfd_generic_link_add_symbols +#define bfd_plugin_bfd_link_just_syms _bfd_generic_link_just_syms +#define bfd_plugin_bfd_final_link _bfd_generic_final_link +#define bfd_plugin_bfd_link_split_section _bfd_generic_link_split_section +#define bfd_plugin_bfd_gc_sections bfd_generic_gc_sections +#define bfd_plugin_bfd_merge_sections bfd_generic_merge_sections +#define bfd_plugin_bfd_is_group_section bfd_generic_is_group_section +#define bfd_plugin_bfd_discard_group bfd_generic_discard_group +#define bfd_plugin_section_already_linked _bfd_generic_section_already_linked +#define bfd_plugin_bfd_define_common_symbol bfd_generic_define_common_symbol + +static enum ld_plugin_status +message (int level ATTRIBUTE_UNUSED, + const char * format, ...) +{ + va_list args; + va_start (args, format); + printf ("bfd plugin: "); + vprintf (format, args); + va_end (args); + return LDPS_OK; +} + +/* Register a claim-file handler. */ +static ld_plugin_claim_file_handler claim_file; + +static enum ld_plugin_status +register_claim_file (ld_plugin_claim_file_handler handler) +{ + claim_file = handler; + return LDPS_OK; +} + +static enum ld_plugin_status +add_symbols (void * handle, + int nsyms, + const struct ld_plugin_symbol * syms) +{ + bfd *abfd = handle; + struct plugin_data_struct *plugin_data = + bfd_alloc (abfd, sizeof (plugin_data_struct));; + + plugin_data->nsyms = nsyms; + plugin_data->syms = syms; + + if (nsyms != 0) + abfd->flags |= HAS_SYMS; + + abfd->tdata.plugin_data = plugin_data; + return LDPS_OK; +} + +static const char *plugin_program_name; + +void +bfd_plugin_set_program_name (const char *program_name) +{ + plugin_program_name = program_name; +} + +static int +try_load_plugin (const char *pname) +{ + static void *plugin_handle; + int tv_size = 4; + struct ld_plugin_tv tv[tv_size]; + int i; + ld_plugin_onload onload; + enum ld_plugin_status status; + + plugin_handle = dlopen (pname, RTLD_NOW); + if (!plugin_handle) + { + (*_bfd_error_handler)("%s\n", dlerror ()); + return 0; + } + + onload = dlsym (plugin_handle, "onload"); + if (!onload) + goto err; + + i = 0; + tv[i].tv_tag = LDPT_MESSAGE; + tv[i].tv_u.tv_message = message; + + ++i; + tv[i].tv_tag = LDPT_REGISTER_CLAIM_FILE_HOOK; + tv[i].tv_u.tv_register_claim_file = register_claim_file; + + ++i; + tv[i].tv_tag = LDPT_ADD_SYMBOLS; + tv[i].tv_u.tv_add_symbols = add_symbols; + + ++i; + tv[i].tv_tag = LDPT_NULL; + tv[i].tv_u.tv_val = 0; + + status = (*onload)(tv); + + if (status != LDPS_OK) + goto err; + + if (!claim_file) + goto err; + + return 1; + + err: + plugin_handle = NULL; + return 0; +} + +static const char *plugin_name; + +void +bfd_plugin_set_plugin (const char *p) +{ + plugin_name = p; +} + +static int +load_plugin (void) +{ + char *plugin_dir; + char *p; + DIR *d; + struct dirent *ent; + int found = 0; + + if (plugin_name) + return try_load_plugin (plugin_name); + + if (plugin_program_name == NULL) + return 0; + + plugin_dir = concat (BINDIR, "/../lib/bfd-plugins", NULL); + p = make_relative_prefix (plugin_program_name, + BINDIR, + plugin_dir); + free (plugin_dir); + plugin_dir = NULL; + + d = opendir (p); + if (!d) + goto out; + + while ((ent = readdir (d))) + { + char *full_name; + struct stat s; + + full_name = concat (p, "/", ent->d_name, NULL); + if (stat(full_name, &s) == 0 && S_ISREG (s.st_mode)) + found = try_load_plugin (full_name); + free (full_name); + if (found) + break; + } + + out: + free (p); + if (d) + closedir (d); + + return found; +} + + +static const bfd_target * +bfd_plugin_object_p (bfd *abfd) +{ + int claimed = 0; + int t = load_plugin (); + struct ld_plugin_input_file file; + if (!t) + return NULL; + + file.name = abfd->filename; + + if (abfd->iostream) + { + file.fd = fileno (abfd->iostream); + file.offset = 0; + file.filesize = 0; /*FIXME*/ + } + else + { + bfd *archive = abfd->my_archive; + BFD_ASSERT (archive); + file.fd = fileno (archive->iostream); + file.offset = abfd->origin; + file.filesize = arelt_size (abfd); + + } + file.handle = abfd; + claim_file (&file, &claimed); + if (!claimed) + return NULL; + + return abfd->xvec; +} + +/* Copy any private info we understand from the input bfd + to the output bfd. */ + +static bfd_boolean +bfd_plugin_bfd_copy_private_bfd_data (bfd *ibfd ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return TRUE; +} + +/* Copy any private info we understand from the input section + to the output section. */ + +static bfd_boolean +bfd_plugin_bfd_copy_private_section_data (bfd *ibfd ATTRIBUTE_UNUSED, + asection *isection ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + asection *osection ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return TRUE; +} + +/* Copy any private info we understand from the input symbol + to the output symbol. */ + +static bfd_boolean +bfd_plugin_bfd_copy_private_symbol_data (bfd *ibfd ATTRIBUTE_UNUSED, + asymbol *isymbol ATTRIBUTE_UNUSED, + bfd *obfd ATTRIBUTE_UNUSED, + asymbol *osymbol ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return TRUE; +} + +static bfd_boolean +bfd_plugin_bfd_print_private_bfd_data (bfd *abfd ATTRIBUTE_UNUSED, PTR ptr ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return TRUE; +} + +static char * +bfd_plugin_core_file_failing_command (bfd *abfd ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return NULL; +} + +static int +bfd_plugin_core_file_failing_signal (bfd *abfd ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return 0; +} + +static long +bfd_plugin_get_symtab_upper_bound (bfd *abfd) +{ + struct plugin_data_struct *plugin_data = abfd->tdata.plugin_data; + long nsyms = plugin_data->nsyms; + + BFD_ASSERT (nsyms >= 0); + + return ((nsyms + 1) * sizeof (asymbol *)); +} + +static flagword +convert_flags (const struct ld_plugin_symbol *sym) +{ + switch (sym->def) + { + case LDPK_DEF: + case LDPK_COMMON: + case LDPK_UNDEF: + return BSF_GLOBAL; + + case LDPK_WEAKUNDEF: + case LDPK_WEAKDEF: + return BSF_GLOBAL | BSF_WEAK; + + default: + BFD_ASSERT (0); + return 0; + } +} + +static long +bfd_plugin_canonicalize_symtab (bfd *abfd, + asymbol **alocation) +{ + struct plugin_data_struct *plugin_data = abfd->tdata.plugin_data; + long nsyms = plugin_data->nsyms; + const struct ld_plugin_symbol *syms = plugin_data->syms; + static asection fake_section; + static asection fake_common_section; + int i; + + fake_section.name = ".text"; + fake_common_section.flags = SEC_IS_COMMON; + + for (i = 0; i < nsyms; i++) + { + asymbol *s = bfd_alloc (abfd, sizeof (asymbol)); + + BFD_ASSERT (s); + alocation[i] = s; + + s->the_bfd = abfd; + s->name = syms[i].name; + s->value = 0; + s->flags = convert_flags (&syms[i]); + switch (syms[i].def) + { + case LDPK_COMMON: + s->section = &fake_common_section; + break; + case LDPK_UNDEF: + case LDPK_WEAKUNDEF: + s->section = bfd_und_section_ptr; + break; + case LDPK_DEF: + case LDPK_WEAKDEF: + s->section = &fake_section; + break; + default: + BFD_ASSERT (0); + } + + s->udata.p = (void *) &syms[i]; + } + + return nsyms; +} + +static void +bfd_plugin_print_symbol (bfd *abfd ATTRIBUTE_UNUSED, + PTR afile ATTRIBUTE_UNUSED, + asymbol *symbol ATTRIBUTE_UNUSED, + bfd_print_symbol_type how ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); +} + +static void +bfd_plugin_get_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, + asymbol *symbol, + symbol_info *ret) +{ + bfd_symbol_info (symbol, ret); +} + +/* Make an empty symbol. */ + +static asymbol * +bfd_plugin_make_empty_symbol (bfd *abfd) +{ + asymbol *new_symbol = bfd_zalloc (abfd, sizeof (asymbol)); + if (new_symbol == NULL) + return new_symbol; + new_symbol->the_bfd = abfd; + return new_symbol; +} + +static int +bfd_plugin_sizeof_headers (bfd *a ATTRIBUTE_UNUSED, + struct bfd_link_info *info ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return 0; +} + +static bfd_boolean +bfd_plugin_mkobject (bfd *abfd ATTRIBUTE_UNUSED) +{ + BFD_ASSERT (0); + return 0; +} + +const bfd_target plugin_vec = +{ + "plugin", /* Name. */ + bfd_target_unknown_flavour, + BFD_ENDIAN_LITTLE, /* Target byte order. */ + BFD_ENDIAN_LITTLE, /* Target headers byte order. */ + (HAS_RELOC | EXEC_P | /* Object flags. */ + HAS_LINENO | HAS_DEBUG | + HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED), + (SEC_CODE | SEC_DATA | SEC_ROM | SEC_HAS_CONTENTS + | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */ + 0, /* symbol_leading_char. */ + '/', /* 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 */ + + { /* bfd_check_format. */ + _bfd_dummy_target, + bfd_plugin_object_p, + bfd_generic_archive_p, + _bfd_dummy_target + }, + { /* bfd_set_format. */ + bfd_false, + bfd_plugin_mkobject, + _bfd_generic_mkarchive, + bfd_false, + }, + { /* bfd_write_contents. */ + bfd_false, + bfd_false, + _bfd_write_archive_contents, + bfd_false, + }, + + BFD_JUMP_TABLE_GENERIC (bfd_plugin), + BFD_JUMP_TABLE_COPY (bfd_plugin), + BFD_JUMP_TABLE_CORE (bfd_plugin), + BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_coff), + BFD_JUMP_TABLE_SYMBOLS (bfd_plugin), + BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), + BFD_JUMP_TABLE_WRITE (bfd_plugin), + BFD_JUMP_TABLE_LINK (bfd_plugin), + BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + + NULL, + + NULL /* backend_data. */ +}; diff --git a/bfd/efi-app-ia32.c b/bfd/plugin.h similarity index 60% rename from bfd/efi-app-ia32.c rename to bfd/plugin.h index e8eef5d..3091f97 100644 --- a/bfd/efi-app-ia32.c +++ b/bfd/plugin.h @@ -1,6 +1,5 @@ -/* BFD back-end for Intel IA-32 EFI application files. - Copyright 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. - Contributed by David Mosberger +/* Plugin support for BFD. + Copyright 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -19,17 +18,19 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "sysdep.h" +#ifndef _PLUGIN_H_ +#define _PLUGIN_H_ + #include "bfd.h" -#define TARGET_SYM bfd_efi_app_ia32_vec -#define TARGET_NAME "efi-app-ia32" -#define COFF_IMAGE_WITH_PE -#define COFF_WITH_PE -#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-i386.c" +void bfd_plugin_set_program_name (const char *); +void bfd_plugin_set_plugin (const char *); + +typedef struct plugin_data_struct +{ + int nsyms; + const struct ld_plugin_symbol *syms; +} +plugin_data_struct; + +#endif diff --git a/bfd/po/.cvsignore b/bfd/po/.cvsignore deleted file mode 100644 index becd153..0000000 --- a/bfd/po/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.gmo diff --git a/bfd/po/Make-in b/bfd/po/Make-in index b24301d..a9d3aea 100644 --- a/bfd/po/Make-in +++ b/bfd/po/Make-in @@ -1,6 +1,6 @@ # Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper -# Copyright 2001, 2003, 2006 Free Software Foundation, Inc. +# Copyright 2001, 2003, 2006, 2007, 2009 Free Software Foundation, Inc. # # This file may be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License @@ -127,6 +127,7 @@ install: install-exec install-data install-exec: install-info: install-html: +install-pdf: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all diff --git a/bfd/po/SRC-POTFILES.in b/bfd/po/SRC-POTFILES.in index 5a3d361..8f39698 100644 --- a/bfd/po/SRC-POTFILES.in +++ b/bfd/po/SRC-POTFILES.in @@ -1,19 +1,19 @@ aix386-core.c aix5ppc-core.c -aout0.c -aout32.c -aout64.c aout-adobe.c aout-arm.c aout-cris.c -aoutf1.h aout-ns32k.c aout-sparcle.c aout-target.h aout-tic30.c +aout0.c +aout32.c +aout64.c +aoutf1.h aoutx.h -archive64.c archive.c +archive64.c archures.c armnetbsd.c bfd.c @@ -25,20 +25,16 @@ cache.c cf-i386lynx.c cf-sparclynx.c cisco-core.c -coff64-rs6000.c coff-alpha.c coff-apollo.c coff-arm.c coff-aux.c -coffcode.h -coffgen.c coff-go32.c coff-h8300.c coff-h8500.c coff-i386.c coff-i860.c coff-i960.c -cofflink.c coff-m68k.c coff-m88k.c coff-maxq.c @@ -49,7 +45,6 @@ coff-sh.c coff-sparc.c coff-stgo32.c coff-svm68k.c -coffswap.h coff-tic30.c coff-tic4x.c coff-tic54x.c @@ -60,6 +55,12 @@ coff-we32k.c coff-x86_64.c coff-z80.c coff-z8k.c +coff64-rs6000.c +coffcode.h +coffgen.c +cofflink.c +coffswap.h +compress.c corefile.c cpu-alpha.c cpu-arc.c @@ -85,6 +86,8 @@ cpu-i960.c cpu-ia64.c cpu-ip2k.c cpu-iq2000.c +cpu-l1om.c +cpu-lm32.c cpu-m10200.c cpu-m10300.c cpu-m32c.c @@ -96,8 +99,10 @@ cpu-m88k.c cpu-maxq.c cpu-mcore.c cpu-mep.c +cpu-microblaze.c cpu-mips.c cpu-mmix.c +cpu-moxie.c cpu-msp430.c cpu-mt.c cpu-ns32k.c @@ -105,6 +110,7 @@ cpu-openrisc.c cpu-or32.c cpu-pdp11.c cpu-pj.c +cpu-plugin.c cpu-powerpc.c cpu-rs6000.c cpu-s390.c @@ -131,15 +137,21 @@ dwarf2.c ecoff.c ecofflink.c ecoffswap.h -efi-app-ia32.c -efi-app-ia64.c -efi-app-x86_64.c +elf-attrs.c +elf-bfd.h +elf-eh-frame.c +elf-hppa.h +elf-ifunc.c +elf-m10200.c +elf-m10300.c +elf-strtab.c +elf-vxworks.c +elf.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 @@ -159,6 +171,7 @@ elf32-i860.c elf32-i960.c elf32-ip2k.c elf32-iq2000.c +elf32-lm32.c elf32-m32c.c elf32-m32r.c elf32-m68hc11.c @@ -168,7 +181,9 @@ elf32-m68k.c elf32-m88k.c elf32-mcore.c elf32-mep.c +elf32-microblaze.c elf32-mips.c +elf32-moxie.c elf32-msp430.c elf32-mt.c elf32-openrisc.c @@ -177,10 +192,11 @@ elf32-pj.c elf32-ppc.c elf32-s390.c elf32-score.c -elf32-sh64.c -elf32-sh64-com.c -elf32-sh.c +elf32-score7.c elf32-sh-symbian.c +elf32-sh.c +elf32-sh64-com.c +elf32-sh64.c elf32-sparc.c elf32-spu.c elf32-v850.c @@ -188,8 +204,8 @@ elf32-vax.c elf32-xc16x.c elf32-xstormy16.c elf32-xtensa.c +elf32.c elf64-alpha.c -elf64.c elf64-gen.c elf64-hppa.c elf64-hppa.h @@ -200,19 +216,11 @@ elf64-s390.c elf64-sh64.c elf64-sparc.c elf64-x86-64.c -elf-attrs.c -elf-bfd.h -elf.c +elf64.c elfcode.h elfcore.h -elf-eh-frame.c -elf-hppa.h elflink.c -elf-m10200.c -elf-m10300.c elfn32-mips.c -elf-strtab.c -elf-vxworks.c elfxx-mips.c elfxx-sparc.c epoc-pe-arm.c @@ -257,6 +265,7 @@ m68klinux.c m68knetbsd.c m88kmach3.c m88kopenbsd.c +mach-o-i386.c mach-o.c mach-o.h merge.c @@ -264,16 +273,16 @@ mipsbsd.c mmo.c netbsd.h newsos3.c +nlm-target.h +nlm.c nlm32-alpha.c -nlm32.c nlm32-i386.c nlm32-ppc.c nlm32-sparc.c +nlm32.c nlm64.c -nlm.c nlmcode.h nlmswap.h -nlm-target.h ns32k.h ns32knetbsd.c oasys.c @@ -281,29 +290,31 @@ opncls.c osf-core.c pc532-mach.c pdp11.c -pe-arm.c pe-arm-wince.c +pe-arm.c +pe-i386.c +pe-mcore.c +pe-mips.c +pe-ppc.c +pe-sh.c +pe-x86_64.c +pef-traceback.h pef.c pef.h -pef-traceback.h -pe-i386.c -pei-arm.c pei-arm-wince.c -peicode.h +pei-arm.c pei-i386.c +pei-ia64.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 +peicode.h +plugin.c ppcboot.c -reloc16.c reloc.c +reloc16.c riscix.c sco5-core.c section.c @@ -314,8 +325,8 @@ sparclinux.c sparclynx.c sparcnetbsd.c srec.c -stabs.c stab-syms.c +stabs.c sunos.c syms.c targets.c @@ -324,16 +335,17 @@ trad-core.c vax1knetbsd.c vaxbsd.c vaxnetbsd.c +verilog.c versados.c version.h -vms.c vms-gsd.c -vms.h vms-hdr.c vms-misc.c vms-tir.c -xcofflink.c +vms.c +vms.h xcoff-target.h +xcofflink.c xsym.c xsym.h xtensa-isa.c diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot index e0b791f..5f00211 100644 --- a/bfd/po/bfd.pot +++ b/bfd/po/bfd.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-08-07 09:50+0100\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:05+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -33,152 +33,152 @@ msgstr "" msgid "%B: Bad relocation record imported: %d" msgstr "" -#: aoutx.h:1268 aoutx.h:1602 +#: aoutx.h:1271 aoutx.h:1609 #, c-format msgid "%s: can not represent section `%s' in a.out object file format" msgstr "" -#: aoutx.h:1568 +#: aoutx.h:1575 #, c-format msgid "" "%s: can not represent section for symbol `%s' in a.out object file format" msgstr "" -#: aoutx.h:1570 +#: aoutx.h:1577 msgid "*unknown*" msgstr "" -#: aoutx.h:3987 aoutx.h:4313 +#: aoutx.h:3994 aoutx.h:4320 msgid "%P: %B: unexpected relocation type\n" msgstr "" -#: aoutx.h:5347 +#: aoutx.h:5354 #, c-format msgid "%s: relocatable link from %s to %s not supported" msgstr "" -#: archive.c:1766 +#: archive.c:2056 msgid "Warning: writing archive was slow: rewriting timestamp\n" msgstr "" -#: archive.c:2029 +#: archive.c:2342 msgid "Reading archive file mod timestamp" msgstr "" -#: archive.c:2053 +#: archive.c:2366 msgid "Writing updated armap timestamp" msgstr "" -#: bfd.c:289 +#: bfd.c:375 msgid "No error" msgstr "" -#: bfd.c:290 +#: bfd.c:376 msgid "System call error" msgstr "" -#: bfd.c:291 +#: bfd.c:377 msgid "Invalid bfd target" msgstr "" -#: bfd.c:292 +#: bfd.c:378 msgid "File in wrong format" msgstr "" -#: bfd.c:293 +#: bfd.c:379 msgid "Archive object file in wrong format" msgstr "" -#: bfd.c:294 +#: bfd.c:380 msgid "Invalid operation" msgstr "" -#: bfd.c:295 +#: bfd.c:381 msgid "Memory exhausted" msgstr "" -#: bfd.c:296 +#: bfd.c:382 msgid "No symbols" msgstr "" -#: bfd.c:297 +#: bfd.c:383 msgid "Archive has no index; run ranlib to add one" msgstr "" -#: bfd.c:298 +#: bfd.c:384 msgid "No more archived files" msgstr "" -#: bfd.c:299 +#: bfd.c:385 msgid "Malformed archive" msgstr "" -#: bfd.c:300 +#: bfd.c:386 msgid "File format not recognized" msgstr "" -#: bfd.c:301 +#: bfd.c:387 msgid "File format is ambiguous" msgstr "" -#: bfd.c:302 +#: bfd.c:388 msgid "Section has no contents" msgstr "" -#: bfd.c:303 +#: bfd.c:389 msgid "Nonrepresentable section on output" msgstr "" -#: bfd.c:304 +#: bfd.c:390 msgid "Symbol needs debug section which does not exist" msgstr "" -#: bfd.c:305 +#: bfd.c:391 msgid "Bad value" msgstr "" -#: bfd.c:306 +#: bfd.c:392 msgid "File truncated" msgstr "" -#: bfd.c:307 +#: bfd.c:393 msgid "File too big" msgstr "" -#: bfd.c:308 +#: bfd.c:394 #, c-format msgid "Error reading %s: %s" msgstr "" -#: bfd.c:309 +#: bfd.c:395 msgid "#" msgstr "" -#: bfd.c:830 +#: bfd.c:919 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "" -#: bfd.c:842 +#: bfd.c:931 #, c-format msgid "BFD %s internal error, aborting at %s line %d in %s\n" msgstr "" -#: bfd.c:846 +#: bfd.c:935 #, c-format msgid "BFD %s internal error, aborting at %s line %d\n" msgstr "" -#: bfd.c:848 +#: bfd.c:937 msgid "Please report this bug.\n" msgstr "" -#: bfdwin.c:208 +#: bfdwin.c:206 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "" -#: bfdwin.c:211 +#: bfdwin.c:209 #, c-format msgid "not mapping: env var not set\n" msgstr "" @@ -188,12 +188,14 @@ msgstr "" msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." msgstr "" -#: cache.c:238 -msgid "reopening %B: %s\n" +#: bout.c:1150 elf-m10300.c:2078 elf32-avr.c:1639 elf32-frv.c:5743 +#: elf32-xtensa.c:6639 elfxx-sparc.c:2456 reloc.c:5386 reloc16.c:162 +#: vms.c:1918 elf32-ia64.c:788 elf64-ia64.c:788 +msgid "%P%F: --relax and -r may not be used together\n" msgstr "" -#: coff64-rs6000.c:2126 coff-rs6000.c:3624 -msgid "%B: symbol `%s' has unrecognized smclas %d" +#: cache.c:226 +msgid "reopening %B: %s\n" msgstr "" #: coff-alpha.c:490 @@ -206,7 +208,7 @@ msgstr "" msgid "%B: unknown/unsupported relocation type %d" msgstr "" -#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1002 +#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1003 msgid "GP relative relocation used when GP not defined" msgstr "" @@ -222,29 +224,29 @@ msgstr "" msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" msgstr "" -#: coff-alpha.c:1574 elf32-m32r.c:2487 elf64-alpha.c:3953 elf64-alpha.c:4106 -#: elf32-ia64.c:4675 elf64-ia64.c:4675 +#: coff-alpha.c:1574 elf32-m32r.c:2477 elf64-alpha.c:3943 elf64-alpha.c:4098 +#: elf32-ia64.c:4462 elf64-ia64.c:4462 msgid "%B: unknown relocation type %d" msgstr "" -#: coff-arm.c:1036 +#: coff-arm.c:1039 #, c-format msgid "%B: unable to find THUMB glue '%s' for `%s'" msgstr "" -#: coff-arm.c:1065 +#: coff-arm.c:1068 #, c-format msgid "%B: unable to find ARM glue '%s' for `%s'" msgstr "" -#: coff-arm.c:1367 elf32-arm.c:4167 +#: coff-arm.c:1370 elf32-arm.c:6372 #, c-format msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: arm call to thumb" msgstr "" -#: coff-arm.c:1457 +#: coff-arm.c:1460 #, c-format msgid "" "%B(%s): warning: interworking not enabled.\n" @@ -252,258 +254,266 @@ msgid "" " consider relinking with --support-old-code enabled" msgstr "" -#: coff-arm.c:1750 cofflink.c:3018 coff-tic80.c:695 +#: coff-arm.c:1755 coff-tic80.c:695 cofflink.c:3027 msgid "%B: bad reloc address 0x%lx in section `%A'" msgstr "" -#: coff-arm.c:2075 +#: coff-arm.c:2080 msgid "%B: illegal symbol index in reloc: %d" msgstr "" -#: coff-arm.c:2206 +#: coff-arm.c:2211 #, c-format -msgid "ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" msgstr "" -#: coff-arm.c:2222 elf32-arm.c:7072 +#: coff-arm.c:2227 elf32-arm.c:10327 #, c-format msgid "" -"ERROR: %B passes floats in float registers, whereas %B passes them in " +"error: %B passes floats in float registers, whereas %B passes them in " "integer registers" msgstr "" -#: coff-arm.c:2225 elf32-arm.c:7076 +#: coff-arm.c:2230 elf32-arm.c:10331 #, c-format msgid "" -"ERROR: %B passes floats in integer registers, whereas %B passes them in " +"error: %B passes floats in integer registers, whereas %B passes them in " "float registers" msgstr "" -#: coff-arm.c:2239 +#: coff-arm.c:2244 #, c-format msgid "" -"ERROR: %B is compiled as position independent code, whereas target %B is " +"error: %B is compiled as position independent code, whereas target %B is " "absolute position" msgstr "" -#: coff-arm.c:2242 +#: coff-arm.c:2247 #, c-format msgid "" -"ERROR: %B is compiled as absolute position code, whereas target %B is " +"error: %B is compiled as absolute position code, whereas target %B is " "position independent" msgstr "" -#: coff-arm.c:2270 elf32-arm.c:7141 +#: coff-arm.c:2275 elf32-arm.c:10396 #, c-format msgid "Warning: %B supports interworking, whereas %B does not" msgstr "" -#: coff-arm.c:2273 elf32-arm.c:7147 +#: coff-arm.c:2278 elf32-arm.c:10402 #, c-format msgid "Warning: %B does not support interworking, whereas %B does" msgstr "" -#: coff-arm.c:2297 +#: coff-arm.c:2302 #, c-format msgid "private flags = %x:" msgstr "" -#: coff-arm.c:2305 elf32-arm.c:7198 +#: coff-arm.c:2310 elf32-arm.c:10453 #, c-format msgid " [floats passed in float registers]" msgstr "" -#: coff-arm.c:2307 +#: coff-arm.c:2312 #, c-format msgid " [floats passed in integer registers]" msgstr "" -#: coff-arm.c:2310 elf32-arm.c:7201 +#: coff-arm.c:2315 elf32-arm.c:10456 #, c-format msgid " [position independent]" msgstr "" -#: coff-arm.c:2312 +#: coff-arm.c:2317 #, c-format msgid " [absolute position]" msgstr "" -#: coff-arm.c:2316 +#: coff-arm.c:2321 #, c-format msgid " [interworking flag not initialised]" msgstr "" -#: coff-arm.c:2318 +#: coff-arm.c:2323 #, c-format msgid " [interworking supported]" msgstr "" -#: coff-arm.c:2320 +#: coff-arm.c:2325 #, c-format msgid " [interworking not supported]" msgstr "" -#: coff-arm.c:2366 elf32-arm.c:6578 +#: coff-arm.c:2371 elf32-arm.c:9360 #, c-format msgid "" "Warning: Not setting interworking flag of %B since it has already been " "specified as non-interworking" msgstr "" -#: coff-arm.c:2370 elf32-arm.c:6582 +#: coff-arm.c:2375 elf32-arm.c:9364 #, c-format msgid "Warning: Clearing the interworking flag of %B due to outside request" msgstr "" -#: coffcode.h:850 -msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +#: coff-h8300.c:1122 +#, c-format +msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" msgstr "" -#. Generate a warning message rather using the 'unhandled' -#. variable as this will allow some .sys files generate by -#. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1062 -msgid "" -"%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +#: coff-i860.c:147 +#, c-format +msgid "Relocation `%s' not yet implemented\n" msgstr "" -#: coffcode.h:1117 -msgid "%B (%s): Section flag %s (0x%x) ignored" +#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:5143 +msgid "%B: warning: illegal symbol index %ld in relocs" msgstr "" -#: coffcode.h:2236 -#, c-format -msgid "Unrecognized TI COFF target id '0x%x'" +#: coff-i960.c:143 coff-i960.c:506 +msgid "uncertain calling convention for non-COFF symbol" msgstr "" -#: coffcode.h:2551 -msgid "%B: reloc against a non-existant symbol index: %ld" +#: coff-m68k.c:506 elf32-bfin.c:5693 elf32-cr16.c:2965 elf32-m68k.c:4615 +msgid "unsupported reloc type" msgstr "" -#: coffcode.h:4296 -msgid "%B: warning: line number table read failed" +#: coff-maxq.c:126 +msgid "Can't Make it a Short Jump" msgstr "" -#: coffcode.h:4329 -msgid "%B: warning: illegal symbol index %ld in line numbers" +#: coff-maxq.c:191 +msgid "Exceeds Long Jump Range" msgstr "" -#: coffcode.h:4343 -msgid "%B: warning: duplicate line number information for `%s'" +#: coff-maxq.c:202 coff-maxq.c:276 +msgid "Absolute address Exceeds 16 bit Range" msgstr "" -#: coffcode.h:4735 -msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +#: coff-maxq.c:240 +msgid "Absolute address Exceeds 8 bit Range" msgstr "" -#: coffcode.h:4861 -msgid "warning: %B: local symbol `%s' has no section" +#: coff-maxq.c:333 +msgid "Unrecognized Reloc Type" msgstr "" -#: coffcode.h:4966 coff-i860.c:601 coff-tic54x.c:393 -msgid "%B: warning: illegal symbol index %ld in relocs" +#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:441 elf32-score7.c:341 +#: elf64-mips.c:2018 elfn32-mips.c:1832 +msgid "GP relative relocation when _gp not defined" msgstr "" -#: coffcode.h:5004 -msgid "%B: illegal relocation type %d at address 0x%lx" +#: coff-or32.c:229 +msgid "Unrecognized reloc" msgstr "" -#: coffgen.c:1518 -msgid "%B: bad string table size %lu" +#: coff-rs6000.c:2787 +#, c-format +msgid "%s: unsupported relocation type 0x%02x" msgstr "" -#: coff-h8300.c:1122 +#: coff-rs6000.c:2880 #, c-format -msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" +msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" +msgstr "" + +#: coff-rs6000.c:3646 coff64-rs6000.c:2168 +msgid "%B: symbol `%s' has unrecognized smclas %d" msgstr "" -#: coff-i860.c:143 +#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458 #, c-format -msgid "Relocation `%s' not yet implemented\n" +msgid "Unrecognized reloc type 0x%x" msgstr "" -#: coff-i960.c:138 coff-i960.c:501 -msgid "uncertain calling convention for non-COFF symbol" +#: coff-tic4x.c:240 +#, c-format +msgid "%s: warning: illegal symbol index %ld in relocs" msgstr "" -#: cofflink.c:513 elflink.c:4175 -msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +#: coff-w65.c:367 +#, c-format +msgid "ignoring reloc %s\n" msgstr "" -#: cofflink.c:2296 -msgid "%B: relocs in section `%A', but it has no contents" +#: coffcode.h:960 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" msgstr "" -#: cofflink.c:2627 coffswap.h:824 -#, c-format -msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1176 +msgid "" +"%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "" + +#: coffcode.h:1240 +msgid "%B (%s): Section flag %s (0x%x) ignored" msgstr "" -#: cofflink.c:2636 coffswap.h:810 +#: coffcode.h:2382 #, c-format -msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgid "Unrecognized TI COFF target id '0x%x'" msgstr "" -#: coff-m68k.c:506 elf32-bfin.c:5434 elf32-m68k.c:2393 -msgid "unsupported reloc type" +#: coffcode.h:2696 +msgid "%B: reloc against a non-existant symbol index: %ld" msgstr "" -#: coff-maxq.c:126 -msgid "Can't Make it a Short Jump" +#: coffcode.h:3669 +msgid "%B: section %s: string table overflow at offset %ld" msgstr "" -#: coff-maxq.c:191 -msgid "Exceeds Long Jump Range" +#: coffcode.h:4477 +msgid "%B: warning: line number table read failed" msgstr "" -#: coff-maxq.c:202 coff-maxq.c:276 -msgid "Absolute address Exceeds 16 bit Range" +#: coffcode.h:4507 +msgid "%B: warning: illegal symbol index %ld in line numbers" msgstr "" -#: coff-maxq.c:240 -msgid "Absolute address Exceeds 8 bit Range" +#: coffcode.h:4521 +msgid "%B: warning: duplicate line number information for `%s'" msgstr "" -#: coff-maxq.c:333 -msgid "Unrecognized Reloc Type" +#: coffcode.h:4912 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" msgstr "" -#: coff-mips.c:687 elf32-mips.c:958 elf32-score.c:345 elf64-mips.c:1911 -#: elfn32-mips.c:1752 -msgid "GP relative relocation when _gp not defined" +#: coffcode.h:5038 +msgid "warning: %B: local symbol `%s' has no section" msgstr "" -#: coff-or32.c:228 -msgid "Unrecognized reloc" +#: coffcode.h:5181 +msgid "%B: illegal relocation type %d at address 0x%lx" msgstr "" -#: coff-rs6000.c:2799 -#, c-format -msgid "%s: unsupported relocation type 0x%02x" +#: coffgen.c:1571 +msgid "%B: bad string table size %lu" msgstr "" -#: coff-rs6000.c:2892 -#, c-format -msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" +#: cofflink.c:513 elflink.c:4307 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" msgstr "" -#: coff-tic4x.c:191 coff-tic54x.c:299 coff-tic80.c:458 -#, c-format -msgid "Unrecognized reloc type 0x%x" +#: cofflink.c:2305 +msgid "%B: relocs in section `%A', but it has no contents" msgstr "" -#: coff-tic4x.c:236 +#: cofflink.c:2636 coffswap.h:826 #, c-format -msgid "%s: warning: illegal symbol index %ld in relocs" +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" msgstr "" -#: coff-w65.c:367 +#: cofflink.c:2645 coffswap.h:812 #, c-format -msgid "ignoring reloc %s\n" +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" msgstr "" #: cpu-arm.c:189 cpu-arm.c:200 -msgid "ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" msgstr "" #: cpu-arm.c:332 @@ -511,729 +521,975 @@ msgstr "" msgid "warning: unable to update contents of %s section in %s" msgstr "" -#: dwarf2.c:481 -msgid "Dwarf Error: Can't find .debug_str section." -msgstr "" - -#: dwarf2.c:499 +#: dwarf2.c:430 #, c-format -msgid "" -"Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str " -"size (%lu)." +msgid "Dwarf Error: Can't find %s section." msgstr "" -#: dwarf2.c:592 -msgid "Dwarf Error: Can't find .debug_abbrev section." +#: dwarf2.c:457 +#, c-format +msgid "Dwarf Error: unable to decompress %s section." msgstr "" -#: dwarf2.c:607 +#: dwarf2.c:468 #, c-format -msgid "" -"Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size " -"(%lu)." +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." msgstr "" -#: dwarf2.c:822 +#: dwarf2.c:865 #, c-format msgid "Dwarf Error: Invalid or unhandled FORM value: %u." msgstr "" -#: dwarf2.c:1025 +#: dwarf2.c:1079 msgid "Dwarf Error: mangled line number section (bad file number)." msgstr "" -#: dwarf2.c:1137 -msgid "Dwarf Error: Can't find .debug_line section." -msgstr "" - -#: dwarf2.c:1154 -#, c-format -msgid "" -"Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%" -"lu)." -msgstr "" - -#: dwarf2.c:1380 +#: dwarf2.c:1413 msgid "Dwarf Error: mangled line number section." msgstr "" -#: dwarf2.c:1568 -msgid "Dwarf Error: Can't find .debug_ranges section." -msgstr "" - -#: dwarf2.c:1731 dwarf2.c:1847 dwarf2.c:2119 +#: dwarf2.c:1760 dwarf2.c:1867 dwarf2.c:2139 #, c-format msgid "Dwarf Error: Could not find abbrev number %u." msgstr "" -#: dwarf2.c:2080 +#: dwarf2.c:2100 #, c-format msgid "" "Dwarf Error: found dwarf version '%u', this reader only handles version 2 " -"information." +"and 3 information." msgstr "" -#: dwarf2.c:2087 +#: dwarf2.c:2107 #, c-format msgid "" "Dwarf Error: found address size '%u', this reader can not handle sizes " "greater than '%u'." msgstr "" -#: dwarf2.c:2110 +#: dwarf2.c:2130 #, c-format msgid "Dwarf Error: Bad abbrev number: %u." msgstr "" -#: ecoff.c:1227 +#: ecoff.c:1238 #, c-format msgid "Unknown basic type %d" msgstr "" -#: ecoff.c:1484 +#: ecoff.c:1495 #, c-format msgid "" "\n" " End+1 symbol: %ld" msgstr "" -#: ecoff.c:1491 ecoff.c:1494 +#: ecoff.c:1502 ecoff.c:1505 #, c-format msgid "" "\n" " First symbol: %ld" msgstr "" -#: ecoff.c:1506 +#: ecoff.c:1517 #, c-format msgid "" "\n" " End+1 symbol: %-7ld Type: %s" msgstr "" -#: ecoff.c:1513 +#: ecoff.c:1524 #, c-format msgid "" "\n" " Local symbol: %ld" msgstr "" -#: ecoff.c:1521 +#: ecoff.c:1532 #, c-format msgid "" "\n" " struct; End+1 symbol: %ld" msgstr "" -#: ecoff.c:1526 +#: ecoff.c:1537 #, c-format msgid "" "\n" " union; End+1 symbol: %ld" msgstr "" -#: ecoff.c:1531 +#: ecoff.c:1542 #, c-format msgid "" "\n" " enum; End+1 symbol: %ld" msgstr "" -#: ecoff.c:1537 +#: ecoff.c:1548 #, c-format msgid "" "\n" " Type: %s" msgstr "" -#: elf32-arm.c:2524 +#: elf-attrs.c:567 +msgid "error: %B: Must be processed by '%s' toolchain" +msgstr "" + +#: elf-attrs.c:575 +msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "" + +#: elf-eh-frame.c:884 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "" + +#: elf-eh-frame.c:1122 +msgid "" +"%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "" + +#: elf-ifunc.c:179 +msgid "" +"%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can " +"not be used when making an executable; recompile with -fPIE and relink with -" +"pie\n" +msgstr "" + +#: elf-m10200.c:456 elf-m10300.c:1575 elf32-avr.c:1251 elf32-bfin.c:3200 +#: elf32-cr16.c:1517 elf32-cr16c.c:790 elf32-cris.c:2089 elf32-crx.c:933 +#: elf32-d10v.c:516 elf32-fr30.c:616 elf32-frv.c:4114 elf32-h8300.c:516 +#: elf32-i860.c:1218 elf32-ip2k.c:1499 elf32-iq2000.c:691 elf32-lm32.c:1171 +#: elf32-m32c.c:560 elf32-m32r.c:3102 elf32-m68hc1x.c:1136 elf32-mep.c:541 +#: elf32-microblaze.c:1226 elf32-moxie.c:291 elf32-msp430.c:493 elf32-mt.c:402 +#: elf32-openrisc.c:411 elf32-score.c:2752 elf32-score7.c:2591 +#: elf32-spu.c:5045 elf32-v850.c:1701 elf32-xstormy16.c:948 elf64-mmix.c:1533 +msgid "internal error: out of range error" +msgstr "" + +#: elf-m10200.c:460 elf-m10300.c:1579 elf32-avr.c:1255 elf32-bfin.c:3204 +#: elf32-cr16.c:1521 elf32-cr16c.c:794 elf32-cris.c:2093 elf32-crx.c:937 +#: elf32-d10v.c:520 elf32-fr30.c:620 elf32-frv.c:4118 elf32-h8300.c:520 +#: elf32-i860.c:1222 elf32-iq2000.c:695 elf32-lm32.c:1175 elf32-m32c.c:564 +#: elf32-m32r.c:3106 elf32-m68hc1x.c:1140 elf32-mep.c:545 +#: elf32-microblaze.c:1230 elf32-moxie.c:295 elf32-msp430.c:497 +#: elf32-openrisc.c:415 elf32-score.c:2756 elf32-score7.c:2595 +#: elf32-spu.c:5049 elf32-v850.c:1705 elf32-xstormy16.c:952 elf64-mmix.c:1537 +#: elfxx-mips.c:9103 +msgid "internal error: unsupported relocation error" +msgstr "" + +#: elf-m10200.c:464 elf32-cr16.c:1525 elf32-cr16c.c:798 elf32-crx.c:941 +#: elf32-d10v.c:524 elf32-h8300.c:524 elf32-lm32.c:1179 elf32-m32r.c:3110 +#: elf32-m68hc1x.c:1144 elf32-microblaze.c:1234 elf32-score.c:2760 +#: elf32-score7.c:2599 elf32-spu.c:5053 +msgid "internal error: dangerous error" +msgstr "" + +#: elf-m10200.c:468 elf-m10300.c:1592 elf32-avr.c:1263 elf32-bfin.c:3212 +#: elf32-cr16.c:1529 elf32-cr16c.c:802 elf32-cris.c:2101 elf32-crx.c:945 +#: elf32-d10v.c:528 elf32-fr30.c:628 elf32-frv.c:4126 elf32-h8300.c:528 +#: elf32-i860.c:1230 elf32-ip2k.c:1514 elf32-iq2000.c:703 elf32-lm32.c:1183 +#: elf32-m32c.c:572 elf32-m32r.c:3114 elf32-m68hc1x.c:1148 elf32-mep.c:553 +#: elf32-microblaze.c:1238 elf32-moxie.c:303 elf32-msp430.c:505 elf32-mt.c:410 +#: elf32-openrisc.c:423 elf32-score.c:2769 elf32-score7.c:2603 +#: elf32-spu.c:5057 elf32-v850.c:1725 elf32-xstormy16.c:960 elf64-mmix.c:1545 +msgid "internal error: unknown error" +msgstr "" + +#: elf-m10300.c:1512 elf32-arm.c:8963 elf32-i386.c:3984 elf32-m32r.c:2588 +#: elf32-m68k.c:4099 elf32-ppc.c:7906 elf32-s390.c:3015 elf32-sh.c:3429 +#: elf32-xtensa.c:3027 elf64-ppc.c:12063 elf64-s390.c:2974 elf64-sh64.c:1648 +#: elf64-x86-64.c:3657 elfxx-sparc.c:3317 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "" + +#: elf-m10300.c:1584 +msgid "" +"error: inappropriate relocation type for shared library (did you forget -" +"fpic?)" +msgstr "" + +#: elf-m10300.c:1587 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "" + +#: elf-m10300.c:4385 elf32-arm.c:11346 elf32-cr16.c:2519 elf32-cris.c:3030 +#: elf32-hppa.c:1891 elf32-i370.c:506 elf32-i386.c:1975 elf32-lm32.c:1873 +#: elf32-m32r.c:1921 elf32-m68k.c:3188 elf32-ppc.c:4953 elf32-s390.c:1650 +#: elf32-sh.c:2574 elf32-vax.c:1052 elf64-ppc.c:6348 elf64-s390.c:1623 +#: elf64-sh64.c:3396 elf64-x86-64.c:1821 elfxx-sparc.c:1802 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "" + +#: elf.c:329 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "" + +#: elf.c:439 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "" + +#: elf.c:595 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "" + +#: elf.c:631 +msgid "%B: invalid SHT_GROUP entry" +msgstr "" + +#: elf.c:701 +msgid "%B: no group info for section %A" +msgstr "" + +#: elf.c:730 elf.c:2960 elflink.c:9912 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "" + +#: elf.c:749 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "" + +#: elf.c:784 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "" + +#: elf.c:1104 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" + +#: elf.c:1146 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" + +#: elf.c:1282 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" + +#: elf.c:1307 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" + +#: elf.c:1312 +#, c-format +msgid " required from %s:\n" +msgstr "" + +#: elf.c:1702 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "" + +#: elf.c:1870 +msgid "" +"%B: don't know how to handle allocated, application specific section `%s' [0x" +"%8x]" +msgstr "" + +#: elf.c:1882 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "" + +#: elf.c:1893 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "" + +#: elf.c:1903 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "" + +#: elf.c:2500 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "" + +#: elf.c:2917 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "" + +#: elf.c:2940 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "" + +#: elf.c:4311 +msgid "" +"%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "" + +#: elf.c:4338 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "" + +#: elf.c:4420 +msgid "%B: section %A vma 0x%lx overlaps previous sections" +msgstr "" + +#: elf.c:4515 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "" + +#: elf.c:4565 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "" + +#: elf.c:5065 +msgid "%B: symbol `%s' required but not present" +msgstr "" + +#: elf.c:5404 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "" + +#: elf.c:6370 +#, c-format +msgid "" +"Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "" + +#: elf.c:7356 +msgid "%B: unsupported relocation type %s" +msgstr "" + +#: elf32-arm.c:3149 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" + +#: elf32-arm.c:3190 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: ARM call to Thumb" +msgstr "" + +#: elf32-arm.c:3387 elf32-arm.c:4692 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "" + +#: elf32-arm.c:4804 #, c-format msgid "unable to find THUMB glue '%s' for '%s'" msgstr "" -#: elf32-arm.c:2557 +#: elf32-arm.c:4838 #, c-format msgid "unable to find ARM glue '%s' for '%s'" msgstr "" -#: elf32-arm.c:3127 +#: elf32-arm.c:5365 msgid "%B: BE8 images only valid in big-endian mode." msgstr "" #. Give a warning, but do as the user requests anyway. -#: elf32-arm.c:3331 +#: elf32-arm.c:5590 msgid "" "%B: warning: selected VFP11 erratum workaround is not necessary for target " "architecture" msgstr "" -#: elf32-arm.c:3865 elf32-arm.c:3885 +#: elf32-arm.c:6130 elf32-arm.c:6150 msgid "%B: unable to find VFP11 veneer `%s'" msgstr "" -#: elf32-arm.c:3930 +#: elf32-arm.c:6196 #, c-format msgid "Invalid TARGET2 relocation type '%s'." msgstr "" -#: elf32-arm.c:4071 +#: elf32-arm.c:6281 msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: thumb call to arm" msgstr "" -#: elf32-arm.c:4759 +#: elf32-arm.c:7003 msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." msgstr "" -#: elf32-arm.c:5059 +#: elf32-arm.c:7405 msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." msgstr "" -#: elf32-arm.c:5689 +#: elf32-arm.c:8085 msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" msgstr "" -#: elf32-arm.c:5890 +#: elf32-arm.c:8300 msgid "" "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group " "relocations" msgstr "" -#: elf32-arm.c:5930 elf32-arm.c:6017 elf32-arm.c:6100 elf32-arm.c:6185 +#: elf32-arm.c:8340 elf32-arm.c:8427 elf32-arm.c:8510 elf32-arm.c:8595 msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" msgstr "" -#: elf32-arm.c:6369 elf32-sh.c:3304 elf64-sh64.c:1556 +#: elf32-arm.c:8821 elf32-sh.c:3325 elf64-sh64.c:1556 msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" msgstr "" -#: elf32-arm.c:6458 elf64-ppc.c:9973 +#: elf32-arm.c:8939 elf32-m68k.c:4134 elf32-xtensa.c:2765 elf64-ppc.c:10743 msgid "%B(%A+0x%lx): %s used with TLS symbol %s" msgstr "" -#: elf32-arm.c:6459 elf64-ppc.c:9974 +#: elf32-arm.c:8940 elf32-m68k.c:4135 elf32-xtensa.c:2766 elf64-ppc.c:10744 msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" msgstr "" -#: elf32-arm.c:6482 elf32-i386.c:3310 elf32-m32r.c:2598 elf32-m68k.c:1982 -#: elf32-ppc.c:6796 elf32-s390.c:3048 elf32-sh.c:3408 elf32-xtensa.c:2290 -#: elf64-ppc.c:11138 elf64-s390.c:3009 elf64-sh64.c:1648 elf64-x86-64.c:3002 -#: elf-hppa.h:2194 elf-m10300.c:1460 elfxx-sparc.c:3256 -msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" -msgstr "" - -#: elf32-arm.c:6516 +#: elf32-arm.c:8997 msgid "out of range" msgstr "" -#: elf32-arm.c:6520 +#: elf32-arm.c:9001 msgid "unsupported relocation" msgstr "" -#: elf32-arm.c:6528 +#: elf32-arm.c:9009 msgid "unknown error" msgstr "" -#: elf32-arm.c:6628 +#: elf32-arm.c:9409 msgid "" "Warning: Clearing the interworking flag of %B because non-interworking code " "in %B has been linked with it" msgstr "" -#: elf32-arm.c:6730 -msgid "ERROR: %B uses VFP register arguments, %B does not" +#: elf32-arm.c:9652 +msgid "error: %B: Unknown CPU architecture" +msgstr "" + +#: elf32-arm.c:9690 +msgid "error: %B: Conflicting CPU architectures %d/%d" msgstr "" -#: elf32-arm.c:6780 -msgid "ERROR: %B: Conflicting architecture profiles %c/%c" +#: elf32-arm.c:9747 +msgid "error: %B uses VFP register arguments, %B does not" msgstr "" -#: elf32-arm.c:6795 +#: elf32-arm.c:9897 +msgid "error: %B: Conflicting architecture profiles %c/%c" +msgstr "" + +#: elf32-arm.c:9921 msgid "Warning: %B: Conflicting platform configuration" msgstr "" -#: elf32-arm.c:6804 -msgid "ERROR: %B: Conflicting use of R9" +#: elf32-arm.c:9930 +msgid "error: %B: Conflicting use of R9" msgstr "" -#: elf32-arm.c:6816 -msgid "ERROR: %B: SB relative addressing conflicts with use of R9" +#: elf32-arm.c:9942 +msgid "error: %B: SB relative addressing conflicts with use of R9" msgstr "" -#: elf32-arm.c:6838 -msgid "ERROR: %B: Conflicting definitions of wchar_t" +#: elf32-arm.c:9955 +msgid "" +"warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; " +"use of wchar_t values across objects may fail" msgstr "" -#: elf32-arm.c:6867 +#: elf32-arm.c:9986 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:6880 -msgid "ERROR: %B uses iWMMXt register arguments, %B does not" +#: elf32-arm.c:9998 +msgid "error: %B uses iWMMXt register arguments, %B does not" msgstr "" -#: elf32-arm.c:6920 +#: elf32-arm.c:10020 +msgid "error: fp16 format mismatch between %B and %B" +msgstr "" + +#: elf32-arm.c:10063 elf32-arm.c:10156 +msgid "%B: Unknown mandatory EABI object attribute %d" +msgstr "" + +#: elf32-arm.c:10071 elf32-arm.c:10164 msgid "Warning: %B: Unknown EABI object attribute %d" msgstr "" -#: elf32-arm.c:7045 +#: elf32-arm.c:10224 +msgid "error: %B is already in final BE8 format" +msgstr "" + +#: elf32-arm.c:10300 msgid "" -"ERROR: Source object %B has EABI version %d, but target %B has EABI version %" +"error: Source object %B has EABI version %d, but target %B has EABI version %" "d" msgstr "" -#: elf32-arm.c:7061 -msgid "ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +#: elf32-arm.c:10316 +msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" msgstr "" -#: elf32-arm.c:7086 -msgid "ERROR: %B uses VFP instructions, whereas %B does not" +#: elf32-arm.c:10341 +msgid "error: %B uses VFP instructions, whereas %B does not" msgstr "" -#: elf32-arm.c:7090 -msgid "ERROR: %B uses FPA instructions, whereas %B does not" +#: elf32-arm.c:10345 +msgid "error: %B uses FPA instructions, whereas %B does not" msgstr "" -#: elf32-arm.c:7100 -msgid "ERROR: %B uses Maverick instructions, whereas %B does not" +#: elf32-arm.c:10355 +msgid "error: %B uses Maverick instructions, whereas %B does not" msgstr "" -#: elf32-arm.c:7104 -msgid "ERROR: %B does not use Maverick instructions, whereas %B does" +#: elf32-arm.c:10359 +msgid "error: %B does not use Maverick instructions, whereas %B does" msgstr "" -#: elf32-arm.c:7123 -msgid "ERROR: %B uses software FP, whereas %B uses hardware FP" +#: elf32-arm.c:10378 +msgid "error: %B uses software FP, whereas %B uses hardware FP" msgstr "" -#: elf32-arm.c:7127 -msgid "ERROR: %B uses hardware FP, whereas %B uses software FP" +#: elf32-arm.c:10382 +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:7174 elf32-bfin.c:4795 elf32-cris.c:3234 elf32-m68hc1x.c:1277 -#: elf32-m68k.c:620 elf32-score.c:3753 elf32-vax.c:538 elfxx-mips.c:11331 +#: elf32-arm.c:10429 elf32-bfin.c:5082 elf32-cris.c:4110 elf32-m68hc1x.c:1280 +#: elf32-m68k.c:1169 elf32-score.c:4039 elf32-score7.c:3876 elf32-vax.c:540 +#: elfxx-mips.c:12755 #, c-format msgid "private flags = %lx:" msgstr "" -#: elf32-arm.c:7183 +#: elf32-arm.c:10438 #, c-format msgid " [interworking enabled]" msgstr "" -#: elf32-arm.c:7191 +#: elf32-arm.c:10446 #, c-format msgid " [VFP float format]" msgstr "" -#: elf32-arm.c:7193 +#: elf32-arm.c:10448 #, c-format msgid " [Maverick float format]" msgstr "" -#: elf32-arm.c:7195 +#: elf32-arm.c:10450 #, c-format msgid " [FPA float format]" msgstr "" -#: elf32-arm.c:7204 +#: elf32-arm.c:10459 #, c-format msgid " [new ABI]" msgstr "" -#: elf32-arm.c:7207 +#: elf32-arm.c:10462 #, c-format msgid " [old ABI]" msgstr "" -#: elf32-arm.c:7210 +#: elf32-arm.c:10465 #, c-format msgid " [software FP]" msgstr "" -#: elf32-arm.c:7219 +#: elf32-arm.c:10474 #, c-format msgid " [Version1 EABI]" msgstr "" -#: elf32-arm.c:7222 elf32-arm.c:7233 +#: elf32-arm.c:10477 elf32-arm.c:10488 #, c-format msgid " [sorted symbol table]" msgstr "" -#: elf32-arm.c:7224 elf32-arm.c:7235 +#: elf32-arm.c:10479 elf32-arm.c:10490 #, c-format msgid " [unsorted symbol table]" msgstr "" -#: elf32-arm.c:7230 +#: elf32-arm.c:10485 #, c-format msgid " [Version2 EABI]" msgstr "" -#: elf32-arm.c:7238 +#: elf32-arm.c:10493 #, c-format msgid " [dynamic symbols use segment index]" msgstr "" -#: elf32-arm.c:7241 +#: elf32-arm.c:10496 #, c-format msgid " [mapping symbols precede others]" msgstr "" -#: elf32-arm.c:7248 +#: elf32-arm.c:10503 #, c-format msgid " [Version3 EABI]" msgstr "" -#: elf32-arm.c:7252 +#: elf32-arm.c:10507 #, c-format msgid " [Version4 EABI]" msgstr "" -#: elf32-arm.c:7256 +#: elf32-arm.c:10511 #, c-format msgid " [Version5 EABI]" msgstr "" -#: elf32-arm.c:7259 +#: elf32-arm.c:10514 #, c-format msgid " [BE8]" msgstr "" -#: elf32-arm.c:7262 +#: elf32-arm.c:10517 #, c-format msgid " [LE8]" msgstr "" -#: elf32-arm.c:7268 +#: elf32-arm.c:10523 #, c-format msgid " " msgstr "" -#: elf32-arm.c:7275 +#: elf32-arm.c:10530 #, c-format msgid " [relocatable executable]" msgstr "" -#: elf32-arm.c:7278 +#: elf32-arm.c:10533 #, c-format msgid " [has entry point]" msgstr "" -#: elf32-arm.c:7283 +#: elf32-arm.c:10538 #, c-format msgid "" msgstr "" -#: elf32-arm.c:7522 elf32-i386.c:961 elf32-s390.c:1003 elf32-xtensa.c:814 -#: elf64-s390.c:958 elf64-x86-64.c:773 elfxx-sparc.c:1115 +#: elf32-arm.c:10783 elf32-i386.c:1300 elf32-s390.c:998 elf32-xtensa.c:1000 +#: elf64-s390.c:952 elf64-x86-64.c:1082 elfxx-sparc.c:1121 msgid "%B: bad symbol index: %d" msgstr "" -#: elf32-arm.c:8080 elf32-cris.c:2400 elf32-hppa.c:1906 elf32-i370.c:506 -#: elf32-i386.c:1522 elf32-m32r.c:1931 elf32-m68k.c:1331 elf32-ppc.c:4314 -#: elf32-s390.c:1679 elf32-sh.c:2584 elf32-vax.c:1050 elf64-ppc.c:5898 -#: elf64-s390.c:1654 elf64-sh64.c:3438 elf64-x86-64.c:1382 elf-m10300.c:4207 -#: elfxx-sparc.c:1797 -#, c-format -msgid "dynamic variable `%s' is zero size" +#: elf32-arm.c:10904 elf64-x86-64.c:1242 elf64-x86-64.c:1411 elfxx-mips.c:7870 +msgid "" +"%B: relocation %s against `%s' can not be used when making a shared object; " +"recompile with -fPIC" msgstr "" -#: elf32-arm.c:8603 +#: elf32-arm.c:11893 #, c-format msgid "Errors encountered processing file %s" msgstr "" -#: elf32-arm.c:9839 elf32-arm.c:9861 -msgid "%B: error: VFP11 veneer out of range" +#: elf32-arm.c:13339 +msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" msgstr "" -#: elf32-avr.c:1253 elf32-bfin.c:2795 elf32-cr16.c:887 elf32-cr16c.c:790 -#: elf32-cris.c:1538 elf32-crx.c:933 elf32-d10v.c:517 elf32-fr30.c:616 -#: elf32-frv.c:4129 elf32-h8300.c:516 elf32-i860.c:1218 elf32-ip2k.c:1499 -#: elf32-iq2000.c:647 elf32-m32c.c:560 elf32-m32r.c:3124 elf32-m68hc1x.c:1133 -#: elf32-mep.c:642 elf32-msp430.c:497 elf32-mt.c:402 elf32-openrisc.c:411 -#: elf32-score.c:2456 elf32-spu.c:2813 elf32-v850.c:1701 elf32-xstormy16.c:946 -#: elf64-mmix.c:1533 elf-m10200.c:456 elf-m10300.c:1523 -msgid "internal error: out of range error" +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:13366 +msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" msgstr "" -#: elf32-avr.c:1257 elf32-bfin.c:2799 elf32-cr16.c:891 elf32-cr16c.c:794 -#: elf32-cris.c:1542 elf32-crx.c:937 elf32-d10v.c:521 elf32-fr30.c:620 -#: elf32-frv.c:4133 elf32-h8300.c:520 elf32-i860.c:1222 elf32-iq2000.c:651 -#: elf32-m32c.c:564 elf32-m32r.c:3128 elf32-m68hc1x.c:1137 elf32-mep.c:646 -#: elf32-msp430.c:501 elf32-openrisc.c:415 elf32-score.c:2460 elf32-spu.c:2817 -#: elf32-v850.c:1705 elf32-xstormy16.c:950 elf64-mmix.c:1537 elf-m10200.c:460 -#: elf-m10300.c:1527 elfxx-mips.c:8025 -msgid "internal error: unsupported relocation error" +#: elf32-arm.c:13457 elf32-arm.c:13479 +msgid "%B: error: VFP11 veneer out of range" msgstr "" -#: elf32-avr.c:1261 elf32-bfin.c:2803 elf32-cris.c:1546 elf32-fr30.c:624 -#: elf32-frv.c:4137 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:655 -#: elf32-m32c.c:568 elf32-mep.c:650 elf32-msp430.c:505 elf32-mt.c:406 -#: elf32-openrisc.c:419 elf32-v850.c:1709 elf32-xstormy16.c:954 +#: elf32-avr.c:1259 elf32-bfin.c:3208 elf32-cris.c:2097 elf32-fr30.c:624 +#: elf32-frv.c:4122 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:699 +#: elf32-m32c.c:568 elf32-mep.c:549 elf32-moxie.c:299 elf32-msp430.c:501 +#: elf32-mt.c:406 elf32-openrisc.c:419 elf32-v850.c:1709 elf32-xstormy16.c:956 #: elf64-mmix.c:1541 msgid "internal error: dangerous relocation" msgstr "" -#: elf32-avr.c:1265 elf32-bfin.c:2807 elf32-cr16.c:899 elf32-cr16c.c:802 -#: elf32-cris.c:1550 elf32-crx.c:945 elf32-d10v.c:529 elf32-fr30.c:628 -#: elf32-frv.c:4141 elf32-h8300.c:528 elf32-i860.c:1230 elf32-ip2k.c:1514 -#: elf32-iq2000.c:659 elf32-m32c.c:572 elf32-m32r.c:3136 elf32-m68hc1x.c:1145 -#: elf32-mep.c:654 elf32-msp430.c:509 elf32-mt.c:410 elf32-openrisc.c:423 -#: elf32-score.c:2468 elf32-spu.c:2825 elf32-v850.c:1725 elf32-xstormy16.c:958 -#: elf64-mmix.c:1545 elf-m10200.c:468 elf-m10300.c:1540 -msgid "internal error: unknown error" +#: elf32-avr.c:2409 elf32-hppa.c:605 elf32-m68hc1x.c:165 elf64-ppc.c:4141 +msgid "%B: cannot create stub entry %s" msgstr "" -#: elf32-avr.c:2369 elf32-hppa.c:595 elf32-m68hc1x.c:164 elf64-ppc.c:3802 -msgid "%B: cannot create stub entry %s" +#: elf32-bfin.c:1581 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "" + +#: elf32-bfin.c:1614 elf32-i386.c:4026 elf32-m68k.c:4176 elf32-s390.c:3067 +#: elf64-s390.c:3026 elf64-x86-64.c:3697 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" msgstr "" -#: elf32-bfin.c:2274 +#: elf32-bfin.c:2714 msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" msgstr "" -#: elf32-bfin.c:2288 elf32-frv.c:2919 +#: elf32-bfin.c:2728 elf32-frv.c:2904 msgid "relocation references symbol not defined in the module" msgstr "" -#: elf32-bfin.c:2385 +#: elf32-bfin.c:2825 msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" msgstr "" -#: elf32-bfin.c:2424 elf32-bfin.c:2547 elf32-frv.c:3656 elf32-frv.c:3777 +#: elf32-bfin.c:2866 elf32-bfin.c:2989 elf32-frv.c:3641 elf32-frv.c:3762 msgid "cannot emit fixups in read-only section" msgstr "" -#: elf32-bfin.c:2452 elf32-bfin.c:2587 elf32-frv.c:3687 elf32-frv.c:3821 +#: elf32-bfin.c:2897 elf32-bfin.c:3027 elf32-frv.c:3672 elf32-frv.c:3806 +#: elf32-lm32.c:1104 msgid "cannot emit dynamic relocations in read-only section" msgstr "" -#: elf32-bfin.c:2505 +#: elf32-bfin.c:2947 msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "" -#: elf32-bfin.c:2673 +#: elf32-bfin.c:3112 msgid "relocations between different segments are not supported" msgstr "" -#: elf32-bfin.c:2674 +#: elf32-bfin.c:3113 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:3116 elf32-i386.c:3351 elf32-m68k.c:2023 elf32-s390.c:3100 -#: elf64-s390.c:3061 elf64-x86-64.c:3041 -msgid "%B(%A+0x%lx): reloc against `%s': error %d" -msgstr "" - -#: elf32-bfin.c:4687 elf32-frv.c:6423 +#: elf32-bfin.c:4974 elf32-frv.c:6408 msgid "%B: unsupported relocation type %i" msgstr "" -#: elf32-bfin.c:4868 elf32-frv.c:6831 +#: elf32-bfin.c:5127 elf32-frv.c:6816 #, c-format msgid "%s: cannot link non-fdpic object file into fdpic executable" msgstr "" -#: elf32-bfin.c:4872 elf32-frv.c:6835 +#: elf32-bfin.c:5131 elf32-frv.c:6820 #, c-format msgid "%s: cannot link fdpic object file into non-fdpic executable" msgstr "" -#: elf32-cr16.c:895 elf32-cr16c.c:798 elf32-crx.c:941 elf32-d10v.c:525 -#: elf32-h8300.c:524 elf32-m32r.c:3132 elf32-m68hc1x.c:1141 elf32-score.c:2464 -#: elf32-spu.c:2821 elf-m10200.c:464 -msgid "internal error: dangerous error" -msgstr "" - -#: elf32-cris.c:1060 +#: elf32-cris.c:1169 msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" msgstr "" -#: elf32-cris.c:1129 +#: elf32-cris.c:1238 msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" msgstr "" -#: elf32-cris.c:1131 +#: elf32-cris.c:1240 msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" msgstr "" -#: elf32-cris.c:1137 elf32-cris.c:1269 +#: elf32-cris.c:1246 elf32-cris.c:1379 elf32-cris.c:1641 elf32-cris.c:1730 +#: elf32-cris.c:1883 msgid "[whose name is lost]" msgstr "" -#: elf32-cris.c:1255 +#: elf32-cris.c:1365 msgid "" "%B, section %A: relocation %s with non-zero addend %d against local symbol" msgstr "" -#: elf32-cris.c:1263 +#: elf32-cris.c:1373 elf32-cris.c:1724 elf32-cris.c:1877 msgid "" "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" msgstr "" -#: elf32-cris.c:1289 +#: elf32-cris.c:1399 msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" msgstr "" -#: elf32-cris.c:1305 +#: elf32-cris.c:1415 msgid "%B, section %A: relocation %s with no GOT created" msgstr "" -#: elf32-cris.c:1423 -msgid "%B: Internal inconsistency; no relocation section %s" +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1632 +msgid "" +"%B, section %A: relocation %s has an undefined reference to `%s', perhaps a " +"declaration mixup?" msgstr "" -#: elf32-cris.c:2511 +#: elf32-cris.c:2010 +msgid "" +"%B, section %A: relocation %s is not allowed for symbol: `%s' which is " +"defined outside the program, perhaps a declaration mixup?" +msgstr "" + +#: elf32-cris.c:2063 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "" + +#: elf32-cris.c:2070 +msgid "" +"(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or " +"-mno-small-tls)" +msgstr "" + +#: elf32-cris.c:3204 msgid "" "%B, section %A:\n" " v10/v32 compatible object %s must not contain a PIC relocation" msgstr "" -#: elf32-cris.c:2698 elf32-cris.c:2766 +#: elf32-cris.c:3309 +msgid "" +"%B, section %A:\n" +" relocation %s not valid in a shared object; typically an option mixup, " +"recompile with -fPIC" +msgstr "" + +#: elf32-cris.c:3523 msgid "" "%B, section %A:\n" " relocation %s should not be used in a shared object; recompile with -fPIC" msgstr "" -#: elf32-cris.c:3183 +#: elf32-cris.c:3940 +msgid "" +"%B, section `%A', to symbol `%s':\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" + +#: elf32-cris.c:4059 msgid "Unexpected machine number" msgstr "" -#: elf32-cris.c:3237 +#: elf32-cris.c:4113 #, c-format msgid " [symbols have a _ prefix]" msgstr "" -#: elf32-cris.c:3240 +#: elf32-cris.c:4116 #, c-format msgid " [v10 and v32]" msgstr "" -#: elf32-cris.c:3243 +#: elf32-cris.c:4119 #, c-format msgid " [v32]" msgstr "" -#: elf32-cris.c:3288 +#: elf32-cris.c:4164 msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" msgstr "" -#: elf32-cris.c:3289 +#: elf32-cris.c:4165 msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" msgstr "" -#: elf32-cris.c:3308 +#: elf32-cris.c:4184 msgid "%B contains CRIS v32 code, incompatible with previous objects" msgstr "" -#: elf32-cris.c:3310 +#: elf32-cris.c:4186 msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" msgstr "" -#: elf32-frv.c:1523 elf32-frv.c:1672 +#: elf32-frv.c:1507 elf32-frv.c:1656 msgid "relocation requires zero addend" msgstr "" -#: elf32-frv.c:2906 +#: elf32-frv.c:2891 msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above" msgstr "" -#: elf32-frv.c:2995 +#: elf32-frv.c:2980 msgid "R_FRV_GETTLSOFF not applied to a call instruction" msgstr "" -#: elf32-frv.c:3037 +#: elf32-frv.c:3022 msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction" msgstr "" -#: elf32-frv.c:3108 +#: elf32-frv.c:3093 msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction" msgstr "" -#: elf32-frv.c:3145 +#: elf32-frv.c:3130 msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction" msgstr "" -#: elf32-frv.c:3193 +#: elf32-frv.c:3178 msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction" msgstr "" -#: elf32-frv.c:3277 +#: elf32-frv.c:3262 msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction" msgstr "" -#: elf32-frv.c:3332 +#: elf32-frv.c:3317 msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction" msgstr "" -#: elf32-frv.c:3362 +#: elf32-frv.c:3347 msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction" msgstr "" -#: elf32-frv.c:3391 +#: elf32-frv.c:3376 msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction" msgstr "" -#: elf32-frv.c:3422 +#: elf32-frv.c:3407 msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction" msgstr "" -#: elf32-frv.c:3467 +#: elf32-frv.c:3452 msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction" msgstr "" -#: elf32-frv.c:3494 +#: elf32-frv.c:3479 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction" msgstr "" -#: elf32-frv.c:3615 +#: elf32-frv.c:3600 msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend" msgstr "" -#: elf32-frv.c:3735 +#: elf32-frv.c:3720 msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "" -#: elf32-frv.c:3992 elf32-frv.c:4148 +#: elf32-frv.c:3977 elf32-frv.c:4133 msgid "%B(%A+0x%lx): reloc against `%s': %s" msgstr "" -#: elf32-frv.c:3994 elf32-frv.c:3998 +#: elf32-frv.c:3979 elf32-frv.c:3983 msgid "relocation references a different segment" msgstr "" -#: elf32-frv.c:6745 +#: elf32-frv.c:6730 #, c-format msgid "" "%s: compiled with %s and linked with modules that use non-pic relocations" msgstr "" -#: elf32-frv.c:6798 elf32-iq2000.c:808 elf32-m32c.c:819 +#: elf32-frv.c:6783 elf32-iq2000.c:852 elf32-m32c.c:814 #, c-format msgid "%s: compiled with %s and linked with modules compiled with %s" msgstr "" -#: elf32-frv.c:6810 +#: elf32-frv.c:6795 #, c-format msgid "" "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%" "lx)" msgstr "" -#: elf32-frv.c:6860 elf32-iq2000.c:845 elf32-m32c.c:855 elf32-mt.c:587 +#: elf32-frv.c:6845 elf32-iq2000.c:889 elf32-m32c.c:850 elf32-mt.c:583 #, c-format msgid "private flags = 0x%lx:" msgstr "" @@ -1242,58 +1498,79 @@ msgstr "" msgid "%B: Relocations in generic ELF (EM: %d)" msgstr "" -#: elf32-hppa.c:844 elf32-hppa.c:3577 +#: elf32-hppa.c:854 elf32-hppa.c:3570 msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" msgstr "" -#: elf32-hppa.c:1253 +#: elf32-hppa.c:1286 msgid "" "%B: relocation %s can not be used when making a shared object; recompile " "with -fPIC" msgstr "" -#: elf32-hppa.c:1506 -#, c-format -msgid "Could not find relocation section for %s" -msgstr "" - -#: elf32-hppa.c:2795 +#: elf32-hppa.c:2780 msgid "%B: duplicate export stub %s" msgstr "" -#: elf32-hppa.c:3413 +#: elf32-hppa.c:3406 msgid "" "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" msgstr "" -#: elf32-hppa.c:4267 +#: elf32-hppa.c:4260 msgid "%B(%A+0x%lx): cannot handle %s for %s" msgstr "" -#: elf32-hppa.c:4574 +#: elf32-hppa.c:4567 msgid ".got section not immediately after .plt section" msgstr "" -#: elf32-i386.c:364 elf32-ppc.c:1616 elf32-s390.c:379 elf64-ppc.c:2148 -#: elf64-s390.c:403 elf64-x86-64.c:221 +#: elf32-i386.c:371 elf32-ppc.c:1666 elf32-s390.c:379 elf64-ppc.c:2283 +#: elf64-s390.c:403 elf64-x86-64.c:234 msgid "%B: invalid relocation type %d" msgstr "" -#: elf32-i386.c:1085 elf32-s390.c:1185 elf32-sh.c:5063 elf64-s390.c:1149 -#: elfxx-sparc.c:1243 -msgid "%B: `%s' accessed both as normal and thread local symbol" +#: elf32-i386.c:1246 elf64-x86-64.c:1029 +msgid "" +"%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" msgstr "" -#: elf32-i386.c:1200 elf32-s390.c:1294 elf64-ppc.c:4864 elf64-s390.c:1261 -#: elf64-x86-64.c:1051 -msgid "%B: bad relocation section name `%s'" +#: elf32-i386.c:1387 elf32-i386.c:2970 elf64-x86-64.c:1171 elf64-x86-64.c:2680 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" msgstr "" -#: elf32-i386.c:2257 +#: elf32-i386.c:1548 elf32-s390.c:1180 elf32-sh.c:5065 elf32-xtensa.c:1173 +#: elf64-s390.c:1143 elfxx-sparc.c:1257 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "" + +#: elf32-i386.c:2805 msgid "%B: unrecognized relocation (0x%x) in section `%A'" msgstr "" -#: elf32-i386.c:2479 +#: elf32-i386.c:3219 elf64-x86-64.c:3081 +msgid "hidden symbol" +msgstr "" + +#: elf32-i386.c:3222 elf64-x86-64.c:3084 +msgid "internal symbol" +msgstr "" + +#: elf32-i386.c:3225 elf64-x86-64.c:3087 +msgid "protected symbol" +msgstr "" + +#: elf32-i386.c:3228 elf64-x86-64.c:3090 +msgid "symbol" +msgstr "" + +#: elf32-i386.c:3233 +msgid "" +"%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when " +"making a shared object" +msgstr "" + +#: elf32-i386.c:3243 msgid "" "%B: relocation R_386_GOTOFF against protected function `%s' can not be used " "when making a shared object" @@ -1323,133 +1600,157 @@ msgstr "" msgid "unsupported relocation between data/insn address spaces" msgstr "" -#: elf32-iq2000.c:821 elf32-m32c.c:831 +#: elf32-iq2000.c:865 elf32-m32c.c:826 #, c-format msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" msgstr "" +#: elf32-lm32.c:698 +msgid "global pointer relative relocation when _gp not defined" +msgstr "" + +#: elf32-lm32.c:753 +msgid "global pointer relative address out of range" +msgstr "" + +#: elf32-lm32.c:1058 +msgid "internal error: addend should be zero for R_LM32_16_GOT" +msgstr "" + #: elf32-m32r.c:1453 msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "" -#: elf32-m32r.c:3061 +#: elf32-m32r.c:3039 msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" msgstr "" -#: elf32-m32r.c:3589 +#: elf32-m32r.c:3567 msgid "%B: Instruction set mismatch with previous modules" msgstr "" -#: elf32-m32r.c:3610 +#: elf32-m32r.c:3588 #, c-format msgid "private flags = %lx" msgstr "" -#: elf32-m32r.c:3615 +#: elf32-m32r.c:3593 #, c-format msgid ": m32r instructions" msgstr "" -#: elf32-m32r.c:3616 +#: elf32-m32r.c:3594 #, c-format msgid ": m32rx instructions" msgstr "" -#: elf32-m32r.c:3617 +#: elf32-m32r.c:3595 #, c-format msgid ": m32r2 instructions" msgstr "" -#: elf32-m68hc1x.c:1045 +#: elf32-m68hc1x.c:1048 #, c-format msgid "" "Reference to the far symbol `%s' using a wrong relocation may result in " "incorrect execution" msgstr "" -#: elf32-m68hc1x.c:1068 +#: elf32-m68hc1x.c:1071 #, 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:1087 +#: elf32-m68hc1x.c:1090 #, c-format msgid "" "reference to a banked address [%lx:%04lx] in the normal address space at %" "04lx" msgstr "" -#: elf32-m68hc1x.c:1220 +#: elf32-m68hc1x.c:1223 msgid "" "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-" "bit integers" msgstr "" -#: elf32-m68hc1x.c:1227 +#: elf32-m68hc1x.c:1230 msgid "" "%B: linking files compiled for 32-bit double (-fshort-double) and others for " "64-bit double" msgstr "" -#: elf32-m68hc1x.c:1236 +#: elf32-m68hc1x.c:1239 msgid "%B: linking files compiled for HCS12 with others compiled for HC12" msgstr "" -#: elf32-m68hc1x.c:1252 elf32-ppc.c:3734 elf64-sparc.c:697 elfxx-mips.c:11292 +#: elf32-m68hc1x.c:1255 elf32-ppc.c:4255 elf64-sparc.c:698 elfxx-mips.c:12617 msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" msgstr "" -#: elf32-m68hc1x.c:1280 +#: elf32-m68hc1x.c:1283 #, c-format msgid "[abi=32-bit int, " msgstr "" -#: elf32-m68hc1x.c:1282 +#: elf32-m68hc1x.c:1285 #, c-format msgid "[abi=16-bit int, " msgstr "" -#: elf32-m68hc1x.c:1285 +#: elf32-m68hc1x.c:1288 #, c-format msgid "64-bit double, " msgstr "" -#: elf32-m68hc1x.c:1287 +#: elf32-m68hc1x.c:1290 #, c-format msgid "32-bit double, " msgstr "" -#: elf32-m68hc1x.c:1290 +#: elf32-m68hc1x.c:1293 #, c-format msgid "cpu=HC11]" msgstr "" -#: elf32-m68hc1x.c:1292 +#: elf32-m68hc1x.c:1295 #, c-format msgid "cpu=HCS12]" msgstr "" -#: elf32-m68hc1x.c:1294 +#: elf32-m68hc1x.c:1297 #, c-format msgid "cpu=HC12]" msgstr "" -#: elf32-m68hc1x.c:1297 +#: elf32-m68hc1x.c:1300 #, c-format msgid " [memory=bank-model]" msgstr "" -#: elf32-m68hc1x.c:1299 +#: elf32-m68hc1x.c:1302 #, c-format msgid " [memory=flat]" msgstr "" -#: elf32-m68k.c:635 elf32-m68k.c:636 +#: elf32-m68k.c:1184 elf32-m68k.c:1185 msgid "unknown" msgstr "" +#: elf32-m68k.c:1645 +msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" +msgstr "" + +#: elf32-m68k.c:1651 +msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" +msgstr "" + +#: elf32-m68k.c:3902 +msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +msgstr "" + #: elf32-mcore.c:99 elf32-mcore.c:442 msgid "%B: Relocation %s (%d) is not currently supported.\n" msgstr "" @@ -1458,190 +1759,213 @@ msgstr "" msgid "%B: Unknown relocation type %d\n" msgstr "" -#: elf32-mep.c:812 +#: elf32-mep.c:654 msgid "%B and %B are for different cores" msgstr "" -#: elf32-mep.c:829 +#: elf32-mep.c:671 msgid "%B and %B are for different configurations" msgstr "" -#: elf32-mep.c:867 +#: elf32-mep.c:708 #, c-format msgid "private flags = 0x%lx" msgstr "" -#: elf32-mips.c:989 elf64-mips.c:1976 elfn32-mips.c:1808 +#: elf32-microblaze.c:737 +#, c-format +msgid "%s: unknown relocation type %d" +msgstr "" + +#: elf32-microblaze.c:862 elf32-microblaze.c:907 +#, c-format +msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +msgstr "" + +#: elf32-microblaze.c:1150 elfxx-sparc.c:2957 +msgid "%B: probably compiled without -fPIC?" +msgstr "" + +#: elf32-microblaze.c:2086 elflink.c:12444 +msgid "%B: bad relocation section name `%s'" +msgstr "" + +#: elf32-mips.c:1045 elf64-mips.c:2083 elfn32-mips.c:1888 msgid "literal relocation occurs for an external symbol" msgstr "" -#: elf32-mips.c:1029 elf32-score.c:484 elf64-mips.c:2019 elfn32-mips.c:1849 +#: elf32-mips.c:1085 elf32-score.c:580 elf32-score7.c:480 elf64-mips.c:2126 +#: elfn32-mips.c:1929 msgid "32bits gp relative relocation occurs for an external symbol" msgstr "" -#: elf32-ppc.c:1681 +#: elf32-ppc.c:1731 #, c-format msgid "generic linker can't handle %s" msgstr "" -#: elf32-ppc.c:2163 +#: elf32-ppc.c:2211 msgid "corrupt or empty %s section in %B" msgstr "" -#: elf32-ppc.c:2170 +#: elf32-ppc.c:2218 msgid "unable to read in %s section from %B" msgstr "" -#: elf32-ppc.c:2176 +#: elf32-ppc.c:2224 msgid "corrupt %s section in %B" msgstr "" -#: elf32-ppc.c:2219 +#: elf32-ppc.c:2267 msgid "warning: unable to set size of %s section in %B" msgstr "" -#: elf32-ppc.c:2267 +#: elf32-ppc.c:2315 msgid "failed to allocate space for new APUinfo section." msgstr "" -#: elf32-ppc.c:2286 +#: elf32-ppc.c:2334 msgid "failed to compute new APUinfo section." msgstr "" -#: elf32-ppc.c:2289 -msgid "failed to install new APUinfo section." +#: elf32-ppc.c:2337 +msgid "failed to install new APUinfo section." +msgstr "" + +#: elf32-ppc.c:3364 +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:3723 +msgid "%B(%A+0x%lx): %s reloc against local symbol" +msgstr "" + +#: elf32-ppc.c:4067 elf32-ppc.c:4082 elfxx-mips.c:12324 elfxx-mips.c:12350 +#: elfxx-mips.c:12372 elfxx-mips.c:12398 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "" + +#: elf32-ppc.c:4070 elf32-ppc.c:4074 +msgid "" +"Warning: %B uses double-precision hard float, %B uses single-precision hard " +"float" +msgstr "" + +#: elf32-ppc.c:4078 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "" + +#: elf32-ppc.c:4085 elf32-ppc.c:4089 elfxx-mips.c:12304 elfxx-mips.c:12308 +msgid "Warning: %B uses unknown floating point ABI %d" msgstr "" -#: elf32-ppc.c:3022 -msgid "%B: relocation %s cannot be used when making a shared object" +#: elf32-ppc.c:4131 elf32-ppc.c:4135 +msgid "Warning: %B uses unknown vector ABI %d" msgstr "" -#. It does not make sense to have a procedure linkage -#. table entry for a local symbol. -#: elf32-ppc.c:3292 -msgid "%B(%A+0x%lx): %s reloc against local symbol" +#: elf32-ppc.c:4139 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" msgstr "" -#: elf32-ppc.c:3633 elf32-ppc.c:3637 elfxx-mips.c:11036 elfxx-mips.c:11055 -#: elfxx-mips.c:11070 -msgid "Warning: %B uses hard float, %B uses soft float" +#: elf32-ppc.c:4156 elf32-ppc.c:4159 +msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" msgstr "" -#: elf32-ppc.c:3640 elf32-ppc.c:3644 elfxx-mips.c:11017 elfxx-mips.c:11021 -msgid "Warning: %B uses unknown floating point ABI %d" +#: elf32-ppc.c:4162 elf32-ppc.c:4166 +msgid "Warning: %B uses unknown small structure return convention %d" msgstr "" -#: elf32-ppc.c:3699 +#: elf32-ppc.c:4220 msgid "" "%B: compiled with -mrelocatable and linked with modules compiled normally" msgstr "" -#: elf32-ppc.c:3707 +#: elf32-ppc.c:4228 msgid "" "%B: compiled normally and linked with modules compiled with -mrelocatable" msgstr "" -#: elf32-ppc.c:3793 +#: elf32-ppc.c:4314 msgid "Using bss-plt due to %B" msgstr "" -#: elf32-ppc.c:6002 elf64-ppc.c:10490 +#: elf32-ppc.c:7056 elf64-ppc.c:11364 msgid "%B: unknown relocation type %d for symbol %s" msgstr "" -#: elf32-ppc.c:6252 +#: elf32-ppc.c:7316 msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" msgstr "" -#: elf32-ppc.c:6597 elf32-ppc.c:6623 elf32-ppc.c:6682 +#: elf32-ppc.c:7499 elf64-ppc.c:11854 +msgid "%B(%A+0x%lx): relocation %s for indirect function %s unsupported" +msgstr "" + +#: elf32-ppc.c:7709 elf32-ppc.c:7736 elf32-ppc.c:7787 msgid "" "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "" -#: elf32-ppc.c:6737 +#: elf32-ppc.c:7847 msgid "%B: relocation %s is not yet supported for symbol %s." msgstr "" -#: elf32-ppc.c:6845 elf64-ppc.c:11185 +#: elf32-ppc.c:7955 elf64-ppc.c:12110 msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" msgstr "" -#: elf32-s390.c:2238 elf64-s390.c:2212 +#: elf32-ppc.c:8423 +#, c-format +msgid "%s not defined in linker created %s" +msgstr "" + +#: elf32-s390.c:2207 elf64-s390.c:2179 msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" msgstr "" -#: elf32-score.c:1418 elfxx-mips.c:2699 +#: elf32-score.c:1533 elf32-score7.c:1424 elfxx-mips.c:3299 msgid "not enough GOT space for local GOT entries" msgstr "" -#: elf32-score.c:2550 +#: elf32-score.c:2765 +msgid "address not word align" +msgstr "" + +#: elf32-score.c:2850 elf32-score7.c:2685 #, c-format msgid "%s: Malformed reloc detected for section %s" msgstr "" -#: elf32-score.c:2601 +#: elf32-score.c:2901 elf32-score7.c:2736 msgid "%B: CALL15 reloc at 0x%lx not against global symbol" msgstr "" -#: elf32-score.c:3756 +#: elf32-score.c:4042 elf32-score7.c:3879 #, c-format msgid " [pic]" msgstr "" -#: elf32-score.c:3760 +#: elf32-score.c:4046 elf32-score7.c:3883 #, c-format msgid " [fix dep]" msgstr "" -#: elf32-score.c:3802 elfxx-mips.c:11201 +#: elf32-score.c:4088 elf32-score7.c:3925 msgid "%B: warning: linking PIC files with non-PIC files" msgstr "" -#: elf32-sh64.c:222 elf64-sh64.c:2350 -#, c-format -msgid "%s: compiled as 32-bit object and %s is 64-bit" -msgstr "" - -#: elf32-sh64.c:225 elf64-sh64.c:2353 -#, c-format -msgid "%s: compiled as 64-bit object and %s is 32-bit" -msgstr "" - -#: elf32-sh64.c:227 elf64-sh64.c:2355 -#, c-format -msgid "%s: object size does not match that of target %s" -msgstr "" - -#: elf32-sh64.c:450 elf64-sh64.c:2894 -#, c-format -msgid "%s: encountered datalabel symbol in input" -msgstr "" - -#: elf32-sh64.c:527 -msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" -msgstr "" - -#: elf32-sh64.c:530 -msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" -msgstr "" - -#: elf32-sh64.c:548 -#, c-format -msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" -msgstr "" - -#: elf32-sh64.c:597 -msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" msgstr "" -#: elf32-sh64.c:673 -#, c-format -msgid "%s: could not write out added .cranges entries" +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" msgstr "" -#: elf32-sh64.c:733 -#, c-format -msgid "%s: could not write out sorted .cranges entries" +#: elf32-sh-symbian.c:503 +msgid "%B: Failed to add renamed symbol %s" msgstr "" #: elf32-sh.c:533 @@ -1676,40 +2000,75 @@ msgstr "" msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" msgstr "" -#: elf32-sh.c:3249 elf64-sh64.c:1526 +#: elf32-sh.c:3270 elf64-sh64.c:1526 msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" msgstr "" -#: elf32-sh.c:3486 +#: elf32-sh.c:3507 msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" msgstr "" -#: elf32-sh.c:3519 elf32-sh.c:3534 +#: elf32-sh.c:3540 elf32-sh.c:3555 msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" msgstr "" -#: elf32-sh.c:3548 +#: elf32-sh.c:3569 msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" msgstr "" -#: elf32-sh.c:3562 +#: elf32-sh.c:3583 msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" msgstr "" -#: elf32-sh.c:5275 elf64-alpha.c:4533 +#: elf32-sh.c:5256 elf64-alpha.c:4525 msgid "%B: TLS local exec code cannot be linked into shared objects" msgstr "" -#: elf32-sh-symbian.c:130 -msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +#: elf32-sh64.c:222 elf64-sh64.c:2333 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" msgstr "" -#: elf32-sh-symbian.c:383 -msgid "%B: Unrecognised .directive command: %s" +#: elf32-sh64.c:225 elf64-sh64.c:2336 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" msgstr "" -#: elf32-sh-symbian.c:504 -msgid "%B: Failed to add renamed symbol %s" +#: elf32-sh64.c:227 elf64-sh64.c:2338 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "" + +#: elf32-sh64.c:450 elf64-sh64.c:2852 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "" + +#: elf32-sh64.c:527 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "" + +#: elf32-sh64.c:530 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "" + +#: elf32-sh64.c:548 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "" + +#: elf32-sh64.c:597 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "" + +#: elf32-sh64.c:673 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "" + +#: elf32-sh64.c:733 +#, c-format +msgid "%s: could not write out sorted .cranges entries" msgstr "" #: elf32-sparc.c:89 @@ -1720,84 +2079,135 @@ msgstr "" msgid "%B: linking little endian files with big endian files" msgstr "" -#: elf32-spu.c:995 +#: elf32-spu.c:723 +msgid "%X%P: overlay section %A does not start on a cache line.\n" +msgstr "" + +#: elf32-spu.c:731 +msgid "%X%P: overlay section %A is larger than a cache line.\n" +msgstr "" + +#: elf32-spu.c:751 +msgid "%X%P: overlay section %A is not in cache area.\n" +msgstr "" + +#: elf32-spu.c:791 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "" + +#: elf32-spu.c:1015 msgid "warning: call to non-function symbol %s defined in %B" msgstr "" -#: elf32-spu.c:1315 +#: elf32-spu.c:1365 +msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "" + +#: elf32-spu.c:1884 msgid "%B is not allowed to define %s" msgstr "" -#: elf32-spu.c:1352 +#: elf32-spu.c:1892 +#, c-format +msgid "you are not allowed to define %s in a script" +msgstr "" + +#: elf32-spu.c:1926 #, c-format msgid "%s in overlay section" msgstr "" -#: elf32-spu.c:1363 +#: elf32-spu.c:1955 msgid "overlay stub relocation overflow" msgstr "" -#: elf32-spu.c:1820 +#: elf32-spu.c:1964 elf64-ppc.c:10441 +msgid "stubs don't match calculated size" +msgstr "" + +#: elf32-spu.c:2546 #, c-format msgid "warning: %s overlaps %s\n" msgstr "" -#: elf32-spu.c:1836 +#: elf32-spu.c:2562 #, c-format msgid "warning: %s exceeds section size\n" msgstr "" -#: elf32-spu.c:1867 +#: elf32-spu.c:2593 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" +#: elf32-spu.c:2740 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" msgstr "" -#: elf32-spu.c:2079 +#: elf32-spu.c:3297 #, c-format -msgid "%A link_order not found\n" +msgid "Stack analysis will ignore the call from %s to %s\n" msgstr "" -#: elf32-spu.c:2358 -#, c-format -msgid "Stack analysis will ignore the call from %s to %s\n" +#: elf32-spu.c:3988 +msgid " %s: 0x%v\n" msgstr "" -#: elf32-spu.c:2513 +#: elf32-spu.c:3989 msgid "%s: 0x%v 0x%v\n" msgstr "" -#: elf32-spu.c:2517 +#: elf32-spu.c:3994 msgid " calls:\n" msgstr "" -#: elf32-spu.c:2524 +#: elf32-spu.c:4002 #, c-format msgid " %s%s %s\n" msgstr "" -#: elf32-spu.c:2585 +#: elf32-spu.c:4304 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "" + +#: elf32-spu.c:4308 +#, c-format +msgid "%s duplicated\n" +msgstr "" + +#: elf32-spu.c:4315 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "" + +#: elf32-spu.c:4356 +msgid "" +"non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local " +"store\n" +msgstr "" + +#: elf32-spu.c:4512 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "" + +#: elf32-spu.c:4669 msgid "Stack size for call graph root nodes.\n" msgstr "" -#: elf32-spu.c:2586 +#: elf32-spu.c:4670 msgid "" "\n" "Stack size for functions. Annotations: '*' max stack, 't' tail call\n" msgstr "" -#: elf32-spu.c:2615 -msgid " %s: 0x%v\n" +#: elf32-spu.c:4680 +msgid "Maximum stack required is 0x%v\n" msgstr "" -#: elf32-spu.c:2625 -msgid "Maximum stack required is 0x%v\n" +#: elf32-spu.c:4771 +msgid "fatal error while creating .fixup" msgstr "" -#: elf32-spu.c:2751 +#: elf32-spu.c:5009 msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" msgstr "" @@ -1871,143 +2281,151 @@ msgstr "" msgid "v850e1 architecture" msgstr "" -#: elf32-vax.c:541 +#: elf32-vax.c:543 #, c-format msgid " [nonpic]" msgstr "" -#: elf32-vax.c:544 +#: elf32-vax.c:546 #, c-format msgid " [d-float]" msgstr "" -#: elf32-vax.c:547 +#: elf32-vax.c:549 #, c-format msgid " [g-float]" msgstr "" -#: elf32-vax.c:657 +#: elf32-vax.c:666 #, c-format msgid "" "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of " "%ld" msgstr "" -#: elf32-vax.c:1584 +#: elf32-vax.c:1608 #, c-format msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" msgstr "" -#: elf32-vax.c:1721 +#: elf32-vax.c:1735 #, c-format msgid "%s: warning: %s relocation against symbol `%s' from %s section" msgstr "" -#: elf32-vax.c:1727 +#: elf32-vax.c:1741 #, c-format msgid "%s: warning: %s relocation to 0x%x from %s section" msgstr "" -#: elf32-xstormy16.c:451 elf32-ia64.c:2962 elf64-ia64.c:2962 +#: elf32-xstormy16.c:451 elf32-ia64.c:2791 elf64-ia64.c:2791 msgid "non-zero addend in @fptr reloc" msgstr "" -#: elf32-xtensa.c:733 +#: elf32-xtensa.c:912 msgid "%B(%A): invalid property table" msgstr "" -#: elf32-xtensa.c:2177 +#: elf32-xtensa.c:2740 msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" msgstr "" -#: elf32-xtensa.c:2234 +#: elf32-xtensa.c:2819 elf32-xtensa.c:2940 msgid "dynamic relocation in read-only section" msgstr "" -#: elf32-xtensa.c:2407 +#: elf32-xtensa.c:2916 +msgid "TLS relocation invalid without dynamic sections" +msgstr "" + +#: elf32-xtensa.c:3133 msgid "internal inconsistency in size of .got.loc section" msgstr "" -#: elf32-xtensa.c:2714 +#: elf32-xtensa.c:3443 msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" msgstr "" -#: elf32-xtensa.c:3920 elf32-xtensa.c:3928 +#: elf32-xtensa.c:4672 elf32-xtensa.c:4680 msgid "Attempt to convert L32R/CALLX to CALL failed" msgstr "" -#: elf32-xtensa.c:5522 elf32-xtensa.c:5598 elf32-xtensa.c:6714 +#: elf32-xtensa.c:6290 elf32-xtensa.c:6366 elf32-xtensa.c:7486 msgid "" "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" msgstr "" -#: elf32-xtensa.c:6454 +#: elf32-xtensa.c:7226 msgid "" "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY " "relocation; possible configuration mismatch" msgstr "" -#: elf32-xtensa.c:8166 +#: elf32-xtensa.c:8987 msgid "invalid relocation address" msgstr "" -#: elf32-xtensa.c:8215 +#: elf32-xtensa.c:9036 msgid "overflow after relaxation" msgstr "" -#: elf32-xtensa.c:9341 +#: elf32-xtensa.c:10167 msgid "%B(%A+0x%lx): unexpected fix for %s relocation" msgstr "" -#: elf64-alpha.c:453 +#: elf64-alpha.c:452 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "" -#: elf64-alpha.c:2404 +#: elf64-alpha.c:2389 msgid "%B: .got subsegment exceeds 64K (size %d)" msgstr "" -#: elf64-alpha.c:4277 elf64-alpha.c:4289 +#: elf64-alpha.c:4269 elf64-alpha.c:4281 msgid "%B: gp-relative relocation against dynamic symbol %s" msgstr "" -#: elf64-alpha.c:4315 elf64-alpha.c:4450 +#: elf64-alpha.c:4307 elf64-alpha.c:4442 msgid "%B: pc-relative relocation against dynamic symbol %s" msgstr "" -#: elf64-alpha.c:4343 +#: elf64-alpha.c:4335 msgid "%B: change in gp: BRSGP %s" msgstr "" -#: elf64-alpha.c:4368 +#: elf64-alpha.c:4360 msgid "" msgstr "" -#: elf64-alpha.c:4373 +#: elf64-alpha.c:4365 msgid "%B: !samegp reloc against symbol without .prologue: %s" msgstr "" -#: elf64-alpha.c:4425 +#: elf64-alpha.c:4417 msgid "%B: unhandled dynamic relocation against %s" msgstr "" -#: elf64-alpha.c:4457 +#: elf64-alpha.c:4449 msgid "%B: pc-relative relocation against undefined weak symbol %s" msgstr "" -#: elf64-alpha.c:4517 +#: elf64-alpha.c:4509 msgid "%B: dtp-relative relocation against dynamic symbol %s" msgstr "" -#: elf64-alpha.c:4540 +#: elf64-alpha.c:4532 msgid "%B: tp-relative relocation against dynamic symbol %s" msgstr "" -#: elf64-hppa.c:2040 +#: elf64-hppa.c:2091 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %ld" msgstr "" +#: elf64-hppa.c:3273 +msgid "%B(%A+0x%lx): cannot reach %s" +msgstr "" + #: elf64-mmix.c:1177 #, c-format msgid "" @@ -2049,89 +2467,85 @@ msgid "" "register is $%ld." msgstr "" -#: elf64-mmix.c:2202 +#: elf64-mmix.c:2201 #, c-format msgid "" "%s: Error: multiple definition of `%s'; start of %s is set in a earlier " "linked file\n" msgstr "" -#: elf64-mmix.c:2260 +#: elf64-mmix.c:2259 msgid "Register section has contents\n" msgstr "" -#: elf64-mmix.c:2452 +#: elf64-mmix.c:2451 #, c-format msgid "" "Internal inconsistency: remaining %u != max %u.\n" " Please report this bug." msgstr "" -#: elf64-ppc.c:2569 libbfd.c:950 +#: elf64-ppc.c:2691 libbfd.c:978 msgid "%B: compiled for a big endian system and target is little endian" msgstr "" -#: elf64-ppc.c:2572 libbfd.c:952 +#: elf64-ppc.c:2694 libbfd.c:980 msgid "%B: compiled for a little endian system and target is big endian" msgstr "" -#: elf64-ppc.c:5888 +#: elf64-ppc.c:6338 #, c-format msgid "" "copy reloc against `%s' requires lazy plt linking; avoid setting " "LD_BIND_NOW=1 or upgrade gcc" msgstr "" -#: elf64-ppc.c:6316 +#: elf64-ppc.c:6767 msgid "dynreloc miscount for %B, section %A" msgstr "" -#: elf64-ppc.c:6420 +#: elf64-ppc.c:6851 msgid "%B: .opd is not a regular array of opd entries" msgstr "" -#: elf64-ppc.c:6429 +#: elf64-ppc.c:6860 msgid "%B: unexpected reloc type %u in .opd section" msgstr "" -#: elf64-ppc.c:6450 +#: elf64-ppc.c:6881 msgid "%B: undefined sym `%s' in .opd section" msgstr "" -#: elf64-ppc.c:7157 elf64-ppc.c:7537 +#: elf64-ppc.c:7640 elf64-ppc.c:8017 #, c-format msgid "%s defined in removed toc entry" msgstr "" -#: elf64-ppc.c:8272 +#: elf64-ppc.c:8910 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "" -#: elf64-ppc.c:8347 +#: elf64-ppc.c:8969 #, c-format msgid "can't find branch stub `%s'" msgstr "" -#: elf64-ppc.c:8413 elf64-ppc.c:8489 +#: elf64-ppc.c:9031 elf64-ppc.c:9169 #, c-format msgid "linkage table error against `%s'" msgstr "" -#: elf64-ppc.c:8618 +#: elf64-ppc.c:9326 #, c-format msgid "can't build branch stub `%s'" msgstr "" -#: elf64-ppc.c:9070 +#: elf64-ppc.c:9799 msgid "%B section %A exceeds stub group size" msgstr "" -#: elf64-ppc.c:9682 -msgid "stubs don't match calculated size" -msgstr "" - -#: elf64-ppc.c:9694 +#: elf64-ppc.c:10453 #, c-format msgid "" "linker stubs in %u group%s\n" @@ -2142,557 +2556,432 @@ msgid "" " plt call %lu" msgstr "" -#: elf64-ppc.c:10378 +#: elf64-ppc.c:11252 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:10386 +#: elf64-ppc.c:11260 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:11037 -msgid "%B: relocation %s is not supported for symbol %s." -msgstr "" - -#: elf64-ppc.c:11119 -msgid "%B: error: relocation %s not a multiple of %d" -msgstr "" - -#: elf64-sh64.c:1701 -#, c-format -msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" -msgstr "" - -#: elf64-sparc.c:439 -msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" -msgstr "" - -#: elf64-sparc.c:459 -msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" -msgstr "" - -#: elf64-sparc.c:482 -msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" -msgstr "" - -#: elf64-sparc.c:527 -msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" -msgstr "" - -#: elf64-sparc.c:678 -msgid "%B: linking UltraSPARC specific with HAL specific code" -msgstr "" - -#: elf64-x86-64.c:799 elf64-x86-64.c:959 elf64-x86-64.c:2360 -msgid "" -"%B: relocation %s against `%s' can not be used when making a shared object; " -"recompile with -fPIC" -msgstr "" - -#: elf64-x86-64.c:890 -msgid "%B: %s' accessed both as normal and thread local symbol" -msgstr "" - -#: elf64-x86-64.c:2272 -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:2356 -msgid "" -"%B: relocation R_X86_64_PC32 against protected function `%s' can not be used " -"when making a shared object" -msgstr "" - -#: elf-attrs.c:582 -msgid "ERROR: %B: Must be processed by '%s' toolchain" -msgstr "" - -#: elf-attrs.c:602 elf-attrs.c:621 -msgid "ERROR: %B: Incompatible object tag '%s':%d" -msgstr "" - -#: elf.c:312 -msgid "%B: invalid string offset %u >= %lu for section `%s'" -msgstr "" - -#: elf.c:414 -msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" -msgstr "" - -#: elf.c:567 -msgid "%B: Corrupt size field in group section header: 0x%lx" -msgstr "" - -#: elf.c:603 -msgid "%B: invalid SHT_GROUP entry" -msgstr "" - -#: elf.c:673 -msgid "%B: no group info for section %A" -msgstr "" - -#: elf.c:703 elf.c:2905 elflink.c:9858 -msgid "%B: warning: sh_link not set for section `%A'" -msgstr "" - -#: elf.c:719 -msgid "%B: sh_link [%d] in section `%A' is incorrect" -msgstr "" - -#: elf.c:754 -msgid "%B: unknown [%d] section `%s' in group [%s]" -msgstr "" - -#: elf.c:1108 -#, c-format -msgid "" -"\n" -"Program Header:\n" -msgstr "" - -#: elf.c:1150 -#, c-format -msgid "" -"\n" -"Dynamic Section:\n" -msgstr "" - -#: elf.c:1276 -#, c-format -msgid "" -"\n" -"Version definitions:\n" -msgstr "" - -#: elf.c:1301 -#, c-format -msgid "" -"\n" -"Version References:\n" -msgstr "" - -#: elf.c:1306 -#, c-format -msgid " required from %s:\n" -msgstr "" - -#: elf.c:1690 -msgid "%B: invalid link %lu for reloc section %s (index %u)" -msgstr "" - -#: elf.c:1858 -msgid "" -"%B: don't know how to handle allocated, application specific section `%s' [0x" -"%8x]" -msgstr "" - -#: elf.c:1870 -msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" + +#: elf64-ppc.c:11961 +msgid "%B: relocation %s is not supported for symbol %s." msgstr "" -#: elf.c:1881 -msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +#: elf64-ppc.c:12044 +msgid "%B: error: relocation %s not a multiple of %d" msgstr "" -#: elf.c:1891 -msgid "%B: don't know how to handle section `%s' [0x%8x]" +#: elf64-sh64.c:1701 +#, c-format +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" msgstr "" -#: elf.c:2862 -msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +#: elf64-sparc.c:439 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" msgstr "" -#: elf.c:2885 -msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +#: elf64-sparc.c:459 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" msgstr "" -#: elf.c:4161 -msgid "" -"%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +#: elf64-sparc.c:482 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" msgstr "" -#: elf.c:4184 -msgid "%B: Not enough room for program headers, try linking with -N" +#: elf64-sparc.c:527 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" msgstr "" -#: elf.c:4262 -msgid "%B: section %A lma 0x%lx overlaps previous sections" +#: elf64-sparc.c:679 +msgid "%B: linking UltraSPARC specific with HAL specific code" msgstr "" -#: elf.c:4360 -msgid "%B: section `%A' can't be allocated in segment %d" +#: elf64-x86-64.c:1337 +msgid "%B: '%s' accessed both as normal and thread local symbol" msgstr "" -#: elf.c:4409 -msgid "%B: warning: allocated section `%s' not in segment" +#: elf64-x86-64.c:2701 +msgid "" +"%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" msgstr "" -#: elf.c:4905 -msgid "%B: symbol `%s' required but not present" +#: elf64-x86-64.c:2980 +msgid "" +"%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be " +"used when making a shared object" msgstr "" -#: elf.c:5218 -msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +#: elf64-x86-64.c:3091 +msgid "; recompile with -fPIC" msgstr "" -#: elf.c:6124 -#, c-format +#: elf64-x86-64.c:3096 msgid "" -"Unable to find equivalent output section for symbol '%s' from section '%s'" +"%B: relocation %s against %s `%s' can not be used when making a shared object" +"%s" msgstr "" -#: elf.c:7098 -msgid "%B: unsupported relocation type %s" +#: elf64-x86-64.c:3098 +msgid "" +"%B: relocation %s against undefined %s `%s' can not be used when making a " +"shared object%s" msgstr "" -#: elfcode.h:813 +#: elfcode.h:795 #, c-format msgid "warning: %s has a corrupt string table index - ignoring" msgstr "" -#: elfcode.h:1226 +#: elfcode.h:1201 #, c-format msgid "%s: version count (%ld) does not match symbol count (%ld)" msgstr "" -#: elfcode.h:1459 +#: elfcode.h:1441 #, c-format msgid "%s(%s): relocation %d has invalid symbol index %ld" msgstr "" -#: elf-eh-frame.c:823 -msgid "" -"%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" -msgstr "" - -#: elf-eh-frame.c:974 -msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" -msgstr "" - -#: elf-hppa.h:2219 elf-hppa.h:2233 -msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" +#: elfcore.h:251 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." msgstr "" -#: elflink.c:1028 +#: elflink.c:1113 msgid "" "%s: TLS definition in %B section %A mismatches non-TLS definition in %B " "section %A" msgstr "" -#: elflink.c:1032 +#: elflink.c:1117 msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" msgstr "" -#: elflink.c:1036 +#: elflink.c:1121 msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" msgstr "" -#: elflink.c:1040 +#: elflink.c:1125 msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" msgstr "" -#: elflink.c:1654 +#: elflink.c:1764 msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" msgstr "" -#: elflink.c:1974 +#: elflink.c:2077 msgid "%B: version node not found for symbol %s" msgstr "" -#: elflink.c:2122 +#: elflink.c:2167 msgid "" "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" msgstr "" -#: elflink.c:2314 +#: elflink.c:2178 +msgid "" +"%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the " +"object file has no symbol table" +msgstr "" + +#: elflink.c:2375 msgid "%B: relocation size mismatch in %B section %A" msgstr "" -#: elflink.c:2616 +#: elflink.c:2678 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "" -#: elflink.c:3910 +#: elflink.c:3424 +msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" +msgstr "" + +#: elflink.c:4032 msgid "%B: %s: invalid version %u (max %d)" msgstr "" -#: elflink.c:3946 +#: elflink.c:4068 msgid "%B: %s: invalid needed version %d" msgstr "" -#: elflink.c:4129 +#: elflink.c:4253 msgid "" "Warning: alignment %u of common symbol `%s' in %B is greater than the " "alignment (%u) of its section %A" msgstr "" -#: elflink.c:4135 +#: elflink.c:4259 msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" msgstr "" -#: elflink.c:4150 +#: elflink.c:4274 msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" msgstr "" -#: elflink.c:4326 +#: elflink.c:4438 #, c-format msgid "%s: invalid DSO for symbol `%s' definition" msgstr "" -#: elflink.c:5552 +#: elflink.c:5688 #, c-format msgid "%s: undefined version: %s" msgstr "" -#: elflink.c:5620 +#: elflink.c:5756 msgid "%B: .preinit_array section is not allowed in DSO" msgstr "" -#: elflink.c:7359 +#: elflink.c:7484 #, c-format msgid "undefined %s reference in complex symbol: %s" msgstr "" -#: elflink.c:7514 +#: elflink.c:7638 #, c-format msgid "unknown operator '%c' in complex symbol" msgstr "" -#: elflink.c:8053 elflink.c:8070 elflink.c:8107 elflink.c:8124 +#: elflink.c:7976 elflink.c:7993 elflink.c:8030 elflink.c:8047 msgid "%B: Unable to sort relocs - they are in more than one size" msgstr "" -#: elflink.c:8084 elflink.c:8138 +#: elflink.c:8007 elflink.c:8061 msgid "%B: Unable to sort relocs - they are of an unknown size" msgstr "" -#: elflink.c:8187 +#: elflink.c:8112 msgid "Not enough memory to sort relocations" msgstr "" -#: elflink.c:8374 +#: elflink.c:8304 msgid "%B: Too many sections: %d (>= %d)" msgstr "" -#: elflink.c:8608 +#: elflink.c:8540 msgid "%B: %s symbol `%s' in %B is referenced by DSO" msgstr "" -#: elflink.c:8691 +#: elflink.c:8625 msgid "%B: could not find output section %A for input section %A" msgstr "" -#: elflink.c:8788 +#: elflink.c:8745 msgid "%B: %s symbol `%s' isn't defined" msgstr "" -#: elflink.c:9284 +#: elflink.c:9301 msgid "" "error: %B contains a reloc (0x%s) for section %A that references a non-" "existent global symbol" msgstr "" -#: elflink.c:9318 +#: elflink.c:9366 msgid "" "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' " "of %B\n" msgstr "" -#: elflink.c:9936 +#: elflink.c:9991 msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" msgstr "" -#: elflink.c:9941 +#: elflink.c:9996 #, c-format msgid "%A has both ordered and unordered sections" msgstr "" -#: elflink.c:10828 elflink.c:10872 +#: elflink.c:10872 elflink.c:10916 msgid "%B: could not find output section %s" msgstr "" -#: elflink.c:10833 +#: elflink.c:10877 #, c-format msgid "warning: %s section has zero size" msgstr "" -#: elflink.c:10937 +#: elflink.c:10982 msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" msgstr "" -#: elflink.c:11305 -msgid "Removing unused section '%s' in file '%B'" +#: elflink.c:11165 +msgid "%P%X: can not read symbols: %E\n" msgstr "" -#: elflink.c:11496 -msgid "Warning: gc-sections option ignored" +#: elflink.c:11483 +msgid "Removing unused section '%s' in file '%B'" msgstr "" -#: elflink.c:11987 -msgid "%P%X: can not read symbols: %E\n" +#: elflink.c:11695 +msgid "Warning: gc-sections option ignored" msgstr "" -#: elflink.c:12129 +#: elflink.c:12242 msgid "%B: ignoring duplicate section `%A'" msgstr "" -#: elflink.c:12136 elflink.c:12143 +#: elflink.c:12249 elflink.c:12256 msgid "%B: duplicate section `%A' has different size" msgstr "" -#: elflink.c:12151 elflink.c:12156 +#: elflink.c:12264 elflink.c:12269 msgid "%B: warning: could not read contents of section `%A'" msgstr "" -#: elflink.c:12160 +#: elflink.c:12273 msgid "%B: warning: duplicate section `%A' has different contents" msgstr "" -#: elflink.c:12239 linker.c:3081 -msgid "%F%P: already_linked_table: %E" -msgstr "" - -#: elf-m10300.c:1532 -msgid "" -"error: inappropriate relocation type for shared library (did you forget -" -"fpic?)" -msgstr "" - -#: elf-m10300.c:1535 -msgid "internal error: suspicious relocation type used in shared library" +#: elflink.c:12374 linker.c:3098 +msgid "%F%P: already_linked_table: %E\n" msgstr "" -#: elfxx-mips.c:990 +#: elfxx-mips.c:1222 msgid "static procedure (no name)" msgstr "" -#: elfxx-mips.c:4663 +#: elfxx-mips.c:5588 msgid "%B: %A+0x%lx: jump to stub routine which is not jal" msgstr "" -#: elfxx-mips.c:5326 elfxx-mips.c:5546 +#: elfxx-mips.c:6235 elfxx-mips.c:6458 msgid "%B: Warning: bad `%s' option size %u smaller than its header" msgstr "" -#: elfxx-mips.c:6405 +#: elfxx-mips.c:7205 elfxx-mips.c:7330 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "" + +#: elfxx-mips.c:7459 msgid "%B: Malformed reloc detected for section %s" msgstr "" -#: elfxx-mips.c:6447 +#: elfxx-mips.c:7499 msgid "%B: GOT reloc at 0x%lx not expected in executables" msgstr "" -#: elfxx-mips.c:6517 +#: elfxx-mips.c:7602 msgid "%B: CALL16 reloc at 0x%lx not against global symbol" msgstr "" -#: elfxx-mips.c:7880 +#: elfxx-mips.c:8280 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "" + +#: elfxx-mips.c:8985 msgid "" "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%" "A'" msgstr "" -#: elfxx-mips.c:8046 +#: elfxx-mips.c:9124 msgid "" "small-data section exceeds 64KB; lower small-data size limit (see option -G)" msgstr "" -#: elfxx-mips.c:10661 +#: elfxx-mips.c:11940 #, c-format msgid "%s: illegal section name `%s'" msgstr "" -#: elfxx-mips.c:11031 elfxx-mips.c:11050 +#: elfxx-mips.c:12318 elfxx-mips.c:12344 msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" msgstr "" -#: elfxx-mips.c:11106 +#: elfxx-mips.c:12330 elfxx-mips.c:12386 +msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +msgstr "" + +#: elfxx-mips.c:12356 elfxx-mips.c:12392 +msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +msgstr "" + +#: elfxx-mips.c:12434 msgid "%B: endianness incompatible with that of the selected emulation" msgstr "" -#: elfxx-mips.c:11118 +#: elfxx-mips.c:12445 msgid "%B: ABI is incompatible with that of the selected emulation" msgstr "" -#: elfxx-mips.c:11218 +#: elfxx-mips.c:12526 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "" + +#: elfxx-mips.c:12543 msgid "%B: linking 32-bit code with 64-bit code" msgstr "" -#: elfxx-mips.c:11246 +#: elfxx-mips.c:12571 msgid "%B: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:11269 +#: elfxx-mips.c:12594 msgid "%B: ABI mismatch: linking %s module with previous %s modules" msgstr "" -#: elfxx-mips.c:11334 +#: elfxx-mips.c:12758 #, c-format msgid " [abi=O32]" msgstr "" -#: elfxx-mips.c:11336 +#: elfxx-mips.c:12760 #, c-format msgid " [abi=O64]" msgstr "" -#: elfxx-mips.c:11338 +#: elfxx-mips.c:12762 #, c-format msgid " [abi=EABI32]" msgstr "" -#: elfxx-mips.c:11340 +#: elfxx-mips.c:12764 #, c-format msgid " [abi=EABI64]" msgstr "" -#: elfxx-mips.c:11342 +#: elfxx-mips.c:12766 #, c-format msgid " [abi unknown]" msgstr "" -#: elfxx-mips.c:11344 +#: elfxx-mips.c:12768 #, c-format msgid " [abi=N32]" msgstr "" -#: elfxx-mips.c:11346 +#: elfxx-mips.c:12770 #, c-format msgid " [abi=64]" msgstr "" -#: elfxx-mips.c:11348 +#: elfxx-mips.c:12772 #, c-format msgid " [no abi set]" msgstr "" -#: elfxx-mips.c:11369 +#: elfxx-mips.c:12793 #, c-format msgid " [unknown ISA]" msgstr "" -#: elfxx-mips.c:11380 +#: elfxx-mips.c:12804 #, c-format msgid " [not 32bitmode]" msgstr "" -#: elfxx-sparc.c:430 +#: elfxx-sparc.c:440 #, c-format msgid "invalid relocation type %d" msgstr "" -#: elfxx-sparc.c:2901 -msgid "%B: probably compiled without -fPIC?" -msgstr "" - #: i386linux.c:455 m68klinux.c:459 sparclinux.c:453 #, c-format msgid "Output file requires shared library `%s'\n" @@ -2776,34 +3065,94 @@ msgstr "" msgid "%s: address 0x%s out of range for Intel Hex file" msgstr "" -#: libbfd.c:980 +#: libbfd.c:1008 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "" -#: libbfd.c:983 +#: libbfd.c:1011 #, c-format msgid "Deprecated %s called\n" msgstr "" -#: linker.c:1875 +#: linker.c:1874 msgid "%B: indirect symbol `%s' to `%s' is a loop" msgstr "" -#: linker.c:2741 +#: linker.c:2740 #, c-format msgid "Attempt to do relocatable link with %s input and %s output" msgstr "" -#: linker.c:3048 +#: linker.c:3065 msgid "%B: warning: ignoring duplicate section `%A'\n" msgstr "" -#: linker.c:3062 +#: linker.c:3079 msgid "%B: warning: duplicate section `%A' has different size\n" msgstr "" -#: merge.c:820 +#: mach-o.c:3195 +#, c-format +msgid "Mach-O header:\n" +msgstr "" + +#: mach-o.c:3196 +#, c-format +msgid " magic : %08lx\n" +msgstr "" + +#: mach-o.c:3197 +#, c-format +msgid " cputype : %08lx (%s)\n" +msgstr "" + +#: mach-o.c:3199 +#, c-format +msgid " cpusubtype: %08lx\n" +msgstr "" + +#: mach-o.c:3200 +#, c-format +msgid " filetype : %08lx (%s)\n" +msgstr "" + +#: mach-o.c:3203 +#, c-format +msgid " ncmds : %08lx\n" +msgstr "" + +#: mach-o.c:3204 +#, c-format +msgid " sizeofcmds: %08lx\n" +msgstr "" + +#: mach-o.c:3205 +#, c-format +msgid " flags : %08lx (" +msgstr "" + +#: mach-o.c:3207 +#, c-format +msgid ")\n" +msgstr "" + +#: mach-o.c:3208 +#, c-format +msgid " reserved : %08x\n" +msgstr "" + +#: mach-o.c:3218 +#, c-format +msgid "Segments and Sections:\n" +msgstr "" + +#: mach-o.c:3219 +#, c-format +msgid " #: Segment name Section name Address\n" +msgstr "" + +#: merge.c:829 #, c-format msgid "%s: access beyond end of merged section (%ld)" msgstr "" @@ -2960,57 +3309,75 @@ msgstr "" msgid "Unhandled OSF/1 core file section type %d\n" msgstr "" +#: pe-mips.c:613 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "" + +#. OK, at this point the following variables are set up: +#. 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:729 +msgid "%B: unimplemented %s\n" +msgstr "" + +#: pe-mips.c:755 +msgid "%B: jump too far away\n" +msgstr "" + +#: pe-mips.c:781 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "" + +#: pei-x86_64.c:465 +#, c-format +msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" +msgstr "" + +#: pei-x86_64.c:469 peigen.c:1620 peigen.c:1799 pepigen.c:1620 pepigen.c:1799 +#: pex64igen.c:1620 pex64igen.c:1799 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" + +#: pei-x86_64.c:471 +#, c-format +msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" +msgstr "" + #. XXX code yet to be written. -#: peicode.h:759 +#: peicode.h:752 msgid "%B: Unhandled import type; %x" msgstr "" -#: peicode.h:764 +#: peicode.h:757 msgid "%B: Unrecognised import type; %x" msgstr "" -#: peicode.h:778 +#: peicode.h:771 msgid "%B: Unrecognised import name type; %x" msgstr "" -#: peicode.h:1161 +#: peicode.h:1154 msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" msgstr "" -#: peicode.h:1173 +#: peicode.h:1166 msgid "" "%B: Recognised but unhandled machine type (0x%x) in Import Library Format " "archive" msgstr "" -#: peicode.h:1191 +#: peicode.h:1184 msgid "%B: size field is zero in Import Library Format header" msgstr "" -#: peicode.h:1222 +#: peicode.h:1215 msgid "%B: string not null terminated in ILF object file." msgstr "" -#: pe-mips.c:606 -msgid "%B: `ld -r' not supported with PE MIPS objects\n" -msgstr "" - -#. OK, at this point the following variables are set up: -#. 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:722 -msgid "%B: unimplemented %s\n" -msgstr "" - -#: pe-mips.c:748 -msgid "%B: jump too far away\n" -msgstr "" - -#: pe-mips.c:774 -msgid "%B: bad pair/reflo after refhi\n" -msgstr "" - #: ppcboot.c:414 #, c-format msgid "" @@ -3023,51 +3390,51 @@ msgstr "" msgid "Entry offset = 0x%.8lx (%ld)\n" msgstr "" -#: ppcboot.c:416 +#: ppcboot.c:417 #, c-format msgid "Length = 0x%.8lx (%ld)\n" msgstr "" -#: ppcboot.c:419 +#: ppcboot.c:421 #, c-format msgid "Flag field = 0x%.2x\n" msgstr "" -#: ppcboot.c:425 +#: ppcboot.c:427 #, c-format msgid "Partition name = \"%s\"\n" msgstr "" -#: ppcboot.c:444 +#: ppcboot.c:446 #, c-format msgid "" "\n" "Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" msgstr "" -#: ppcboot.c:450 +#: ppcboot.c:452 #, c-format msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" msgstr "" -#: ppcboot.c:456 +#: ppcboot.c:458 #, c-format msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" msgstr "" -#: ppcboot.c:457 +#: ppcboot.c:460 #, c-format msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "" -#: som.c:5088 +#: som.c:5114 #, c-format msgid "" "\n" "Exec Auxiliary Header\n" msgstr "" -#: som.c:5349 +#: som.c:5417 msgid "som_sizeof_headers unimplemented" msgstr "" @@ -3075,126 +3442,181 @@ msgstr "" msgid "%B:%d: Unexpected character `%s' in S-record file\n" msgstr "" +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "" + #: stabs.c:279 msgid "%B(%A+0x%lx): Stabs entry has invalid string index." msgstr "" -#: syms.c:1057 +#: syms.c:1079 msgid "Unsupported .stab relocation" msgstr "" -#: vms-gsd.c:338 +#: vms-gsd.c:350 #, c-format msgid "bfd_make_section (%s) failed" msgstr "" -#: vms-gsd.c:353 +#: vms-gsd.c:365 #, c-format msgid "bfd_set_section_flags (%s, %x) failed" msgstr "" -#: vms-gsd.c:388 +#: vms-gsd.c:399 #, c-format msgid "Size mismatch section %s=%lx, %s=%lx" msgstr "" -#: vms-gsd.c:679 +#: vms-gsd.c:754 #, c-format -msgid "unknown gsd/egsd subtype %d" +msgid "Unknown GSD/EGSD subtype %d" msgstr "" -#: vms-hdr.c:328 +#: vms-hdr.c:364 msgid "Object module NOT error-free !\n" msgstr "" -#: vms-misc.c:474 +#: vms-hdr.c:878 +#, c-format +msgid "unknown source command %d" +msgstr "" + +#: vms-hdr.c:951 +msgid "DST_S_C_SET_LINUM_INCR not implemented" +msgstr "" + +#: vms-hdr.c:957 +msgid "DST_S_C_SET_LINUM_INCR_W not implemented" +msgstr "" + +#: vms-hdr.c:963 +msgid "DST_S_C_RESET_LINUM_INCR not implemented" +msgstr "" + +#: vms-hdr.c:969 +msgid "DST_S_C_BEG_STMT_MODE not implemented" +msgstr "" + +#: vms-hdr.c:975 +msgid "DST_S_C_END_STMT_MODE not implemented" +msgstr "" + +#: vms-hdr.c:1008 +msgid "DST_S_C_SET_PC not implemented" +msgstr "" + +#: vms-hdr.c:1014 +msgid "DST_S_C_SET_PC_W not implemented" +msgstr "" + +#: vms-hdr.c:1020 +msgid "DST_S_C_SET_PC_L not implemented" +msgstr "" + +#: vms-hdr.c:1026 +msgid "DST_S_C_SET_STMTNUM not implemented" +msgstr "" + +#: vms-hdr.c:1079 +#, c-format +msgid "unknown line command %d" +msgstr "" + +#: vms-misc.c:588 #, c-format msgid "Stack overflow (%d) in _bfd_vms_push" msgstr "" -#: vms-misc.c:489 +#: vms-misc.c:603 msgid "Stack underflow in _bfd_vms_pop" msgstr "" -#: vms-misc.c:803 +#: vms-misc.c:844 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "" -#: vms-misc.c:808 +#: vms-misc.c:849 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "" -#: vms-misc.c:926 +#: vms-misc.c:967 #, c-format msgid "Symbol %s replaced by %s\n" msgstr "" -#: vms-misc.c:985 +#: vms-misc.c:1026 #, c-format msgid "failed to enter %s" msgstr "" -#: vms-tir.c:57 +#: vms-tir.c:83 msgid "No Mem !" msgstr "" -#: vms-tir.c:300 +#. These names have not yet been added to this switch statement. +#: vms-tir.c:346 #, c-format -msgid "bad section index in %s" +msgid "unknown ETIR command %d" msgstr "" -#: vms-tir.c:313 +#: vms-tir.c:440 #, c-format -msgid "unsupported STA cmd %s" +msgid "bad section index in %s" msgstr "" -#: vms-tir.c:318 vms-tir.c:1120 +#: vms-tir.c:459 #, c-format -msgid "reserved STA cmd %d" +msgid "unsupported STA cmd %s" msgstr "" -#: vms-tir.c:410 vms-tir.c:432 +#: vms-tir.c:464 vms-tir.c:1304 #, c-format -msgid "%s: no symbol \"%s\"" +msgid "reserved STA cmd %d" msgstr "" #. Unsigned shift. #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-tir.c:497 vms-tir.c:606 vms-tir.c:704 vms-tir.c:721 vms-tir.c:728 -#: vms-tir.c:736 vms-tir.c:1440 +#: vms-tir.c:655 vms-tir.c:774 vms-tir.c:894 vms-tir.c:1624 #, c-format msgid "%s: not supported" msgstr "" -#: vms-tir.c:502 vms-tir.c:1297 +#: vms-tir.c:661 vms-tir.c:1481 #, c-format msgid "%s: not implemented" msgstr "" -#: vms-tir.c:506 vms-tir.c:1301 +#: vms-tir.c:666 vms-tir.c:1485 #, c-format msgid "reserved STO cmd %d" msgstr "" -#: vms-tir.c:621 vms-tir.c:1445 +#: vms-tir.c:789 vms-tir.c:1629 #, c-format msgid "reserved OPR cmd %d" msgstr "" -#: vms-tir.c:681 vms-tir.c:1509 +#: vms-tir.c:852 vms-tir.c:1693 #, c-format msgid "reserved CTL cmd %d" msgstr "" +#: vms-tir.c:966 +#, c-format +msgid "reserved STC cmd %d" +msgstr "" + #. stack byte from image #. arg: none. -#: vms-tir.c:1028 +#: vms-tir.c:1212 msgid "stack-from-image not implemented" msgstr "" -#: vms-tir.c:1046 +#: vms-tir.c:1230 msgid "stack-entry-mask not fully implemented" msgstr "" @@ -3205,357 +3627,378 @@ msgstr "" #. #. compare argument descriptor with symbol argument (ARG$V_PASSMECH) #. and stack TRUE (args match) or FALSE (args dont match) value. -#: vms-tir.c:1060 +#: vms-tir.c:1244 msgid "PASSMECH not fully implemented" msgstr "" -#: vms-tir.c:1079 +#: vms-tir.c:1263 msgid "stack-local-symbol not fully implemented" msgstr "" -#: vms-tir.c:1092 +#: vms-tir.c:1276 msgid "stack-literal not fully implemented" msgstr "" -#: vms-tir.c:1113 +#: vms-tir.c:1297 msgid "stack-local-symbol-entry-point-mask not fully implemented" msgstr "" -#: vms-tir.c:1387 vms-tir.c:1399 vms-tir.c:1411 vms-tir.c:1423 vms-tir.c:1488 -#: vms-tir.c:1496 vms-tir.c:1504 +#: vms-tir.c:1571 vms-tir.c:1583 vms-tir.c:1595 vms-tir.c:1607 vms-tir.c:1672 +#: vms-tir.c:1680 vms-tir.c:1688 #, c-format msgid "%s: not fully implemented" msgstr "" -#: vms-tir.c:1562 +#: vms-tir.c:1746 #, c-format msgid "obj code %d not found" msgstr "" -#: vms-tir.c:1870 +#: vms-tir.c:2019 +#, c-format +msgid "Reloc size error in section %s" +msgstr "" + +#: vms-tir.c:2112 vms-tir.c:2129 vms-tir.c:2147 vms-tir.c:2159 vms-tir.c:2170 +#: vms-tir.c:2182 +#, c-format +msgid "Unknown reloc %s + %s" +msgstr "" + +#: vms-tir.c:2249 +#, c-format +msgid "Unknown symbol %s in command %s" +msgstr "" + +#: vms-tir.c:2504 #, c-format msgid "SEC_RELOC with no relocs in section %s" msgstr "" -#: vms-tir.c:2152 +#: vms-tir.c:2556 vms-tir.c:2783 +#, c-format +msgid "Size error in section %s" +msgstr "" + +#: vms-tir.c:2725 +msgid "Spurious ALPHA_R_BSR reloc" +msgstr "" + +#: vms-tir.c:2770 #, c-format msgid "Unhandled relocation %s" msgstr "" -#: xcofflink.c:566 +#: xcofflink.c:836 #, c-format msgid "%s: XCOFF shared object when not producing XCOFF output" msgstr "" -#: xcofflink.c:587 +#: xcofflink.c:857 #, c-format msgid "%s: dynamic object with no .loader section" msgstr "" -#: xcofflink.c:1150 +#: xcofflink.c:1415 msgid "%B: `%s' has line numbers but no enclosing section" msgstr "" -#: xcofflink.c:1202 +#: xcofflink.c:1467 msgid "%B: class %d symbol `%s' has no aux entries" msgstr "" -#: xcofflink.c:1225 +#: xcofflink.c:1489 msgid "%B: symbol `%s' has unrecognized csect type %d" msgstr "" -#: xcofflink.c:1237 +#: xcofflink.c:1501 msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" msgstr "" -#: xcofflink.c:1273 +#: xcofflink.c:1530 msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" msgstr "" -#: xcofflink.c:1419 +#: xcofflink.c:1676 msgid "%B: csect `%s' not in enclosing section" msgstr "" -#: xcofflink.c:1526 +#: xcofflink.c:1783 msgid "%B: misplaced XTY_LD `%s'" msgstr "" -#: xcofflink.c:1842 +#: xcofflink.c:2102 msgid "%B: reloc %s:%d not in csect" msgstr "" -#: xcofflink.c:2640 +#: xcofflink.c:3177 #, c-format msgid "%s: no such symbol" msgstr "" -#: xcofflink.c:2869 +#: xcofflink.c:3282 #, c-format msgid "warning: attempt to export undefined symbol `%s'" msgstr "" -#: xcofflink.c:3036 +#: xcofflink.c:3664 msgid "error: undefined symbol __rtinit" msgstr "" -#: xcofflink.c:3656 -#, c-format -msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" -msgstr "" - -#: xcofflink.c:4492 -msgid "%B: loader reloc in unrecognized section `%A'" +#: xcofflink.c:4041 +msgid "%B: loader reloc in unrecognized section `%s'" msgstr "" -#: xcofflink.c:4513 +#: xcofflink.c:4052 msgid "%B: `%s' in loader reloc but not loader sym" msgstr "" -#: xcofflink.c:4528 +#: xcofflink.c:4068 msgid "%B: loader reloc in read-only section %A" msgstr "" -#: xcofflink.c:4937 xcofflink.c:4999 xcofflink.c:5294 -#, c-format -msgid "%s: loader reloc in unrecognized section `%s'" -msgstr "" - -#: xcofflink.c:5305 +#: xcofflink.c:5086 #, c-format -msgid "%s: `%s' in loader reloc but not loader sym" +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" msgstr "" -#: elf32-ia64.c:1169 elf64-ia64.c:1169 +#: elf32-ia64.c:1050 elf64-ia64.c:1050 msgid "" "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect " "branch." msgstr "" -#: elf32-ia64.c:2910 elf64-ia64.c:2910 +#: elf32-ia64.c:2739 elf64-ia64.c:2739 msgid "@pltoff reloc against local symbol" msgstr "" -#: elf32-ia64.c:4523 elf64-ia64.c:4523 +#: elf32-ia64.c:4314 elf64-ia64.c:4314 #, c-format msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" msgstr "" -#: elf32-ia64.c:4534 elf64-ia64.c:4534 +#: elf32-ia64.c:4325 elf64-ia64.c:4325 #, c-format msgid "%s: __gp does not cover short data segment" msgstr "" -#: elf32-ia64.c:4808 elf64-ia64.c:4808 +#: elf32-ia64.c:4595 elf64-ia64.c:4595 msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "" -#: elf32-ia64.c:4875 elf64-ia64.c:4875 +#: elf32-ia64.c:4662 elf64-ia64.c:4662 msgid "%B: @gprel relocation against dynamic symbol %s" msgstr "" -#: elf32-ia64.c:4938 elf64-ia64.c:4938 +#: elf32-ia64.c:4725 elf64-ia64.c:4725 msgid "%B: linking non-pic code in a position independent executable" msgstr "" -#: elf32-ia64.c:5075 elf64-ia64.c:5075 +#: elf32-ia64.c:4862 elf64-ia64.c:4862 msgid "%B: @internal branch to dynamic symbol %s" msgstr "" -#: elf32-ia64.c:5077 elf64-ia64.c:5077 +#: elf32-ia64.c:4864 elf64-ia64.c:4864 msgid "%B: speculation fixup to dynamic symbol %s" msgstr "" -#: elf32-ia64.c:5079 elf64-ia64.c:5079 +#: elf32-ia64.c:4866 elf64-ia64.c:4866 msgid "%B: @pcrel relocation against dynamic symbol %s" msgstr "" -#: elf32-ia64.c:5279 elf64-ia64.c:5279 +#: elf32-ia64.c:5063 elf64-ia64.c:5063 msgid "unsupported reloc" msgstr "" -#: elf32-ia64.c:5312 elf64-ia64.c:5312 +#: elf32-ia64.c:5101 elf64-ia64.c:5101 +msgid "" +"%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%" +"A'." +msgstr "" + +#: elf32-ia64.c:5116 elf64-ia64.c:5116 msgid "" "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> " "0x1000000)." msgstr "" -#: elf32-ia64.c:5573 elf64-ia64.c:5573 +#: elf32-ia64.c:5372 elf64-ia64.c:5372 msgid "%B: linking trap-on-NULL-dereference with non-trapping files" msgstr "" -#: elf32-ia64.c:5582 elf64-ia64.c:5582 +#: elf32-ia64.c:5381 elf64-ia64.c:5381 msgid "%B: linking big-endian files with little-endian files" msgstr "" -#: elf32-ia64.c:5591 elf64-ia64.c:5591 +#: elf32-ia64.c:5390 elf64-ia64.c:5390 msgid "%B: linking 64-bit files with 32-bit files" msgstr "" -#: elf32-ia64.c:5600 elf64-ia64.c:5600 +#: elf32-ia64.c:5399 elf64-ia64.c:5399 msgid "%B: linking constant-gp files with non-constant-gp files" msgstr "" -#: elf32-ia64.c:5610 elf64-ia64.c:5610 +#: elf32-ia64.c:5409 elf64-ia64.c:5409 msgid "%B: linking auto-pic files with non-auto-pic files" msgstr "" -#: peigen.c:1000 pepigen.c:1000 pex64igen.c:1000 +#: peigen.c:999 pepigen.c:999 pex64igen.c:999 #, c-format msgid "%s: line number overflow: 0x%lx > 0xffff" msgstr "" -#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 +#: peigen.c:1026 pepigen.c:1026 pex64igen.c:1026 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "" -#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 +#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 msgid "Import Directory [parts of .idata]" msgstr "" -#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 +#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 msgid "Resource Directory [.rsrc]" msgstr "" -#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 +#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 msgid "Exception Directory [.pdata]" msgstr "" -#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 +#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 msgid "Security Directory" msgstr "" -#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 +#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 msgid "Base Relocation Directory [.reloc]" msgstr "" -#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 +#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 msgid "Debug Directory" msgstr "" -#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 +#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 msgid "Description Directory" msgstr "" -#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 +#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 msgid "Special Directory" msgstr "" -#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 +#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 msgid "Thread Storage Directory [.tls]" msgstr "" -#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 msgid "Load Configuration Directory" msgstr "" -#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 msgid "Bound Import Directory" msgstr "" -#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 msgid "Import Address Table Directory" msgstr "" -#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 msgid "Delay Import Directory" msgstr "" -#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 msgid "CLR Runtime Header" msgstr "" -#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042 +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 msgid "Reserved" msgstr "" -#: peigen.c:1102 pepigen.c:1102 pex64igen.c:1102 +#: peigen.c:1101 pepigen.c:1101 pex64igen.c:1101 #, c-format msgid "" "\n" "There is an import table, but the section containing it could not be found\n" msgstr "" -#: peigen.c:1107 pepigen.c:1107 pex64igen.c:1107 +#: peigen.c:1106 pepigen.c:1106 pex64igen.c:1106 #, c-format msgid "" "\n" "There is an import table in %s at 0x%lx\n" msgstr "" -#: peigen.c:1150 pepigen.c:1150 pex64igen.c:1150 +#: peigen.c:1149 pepigen.c:1149 pex64igen.c:1149 #, c-format msgid "" "\n" "Function descriptor located at the start address: %04lx\n" msgstr "" -#: peigen.c:1153 pepigen.c:1153 pex64igen.c:1153 +#: peigen.c:1152 pepigen.c:1152 pex64igen.c:1152 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "" -#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161 +#: peigen.c:1160 pepigen.c:1160 pex64igen.c:1160 #, c-format msgid "" "\n" "No reldata section! Function descriptor not decoded.\n" msgstr "" -#: peigen.c:1166 pepigen.c:1166 pex64igen.c:1166 +#: peigen.c:1165 pepigen.c:1165 pex64igen.c:1165 #, c-format msgid "" "\n" "The Import Tables (interpreted %s section contents)\n" msgstr "" -#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169 +#: peigen.c:1168 pepigen.c:1168 pex64igen.c:1168 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" " Table Stamp Chain Name Thunk\n" msgstr "" -#: peigen.c:1217 pepigen.c:1217 pex64igen.c:1217 +#: peigen.c:1216 pepigen.c:1216 pex64igen.c:1216 #, c-format msgid "" "\n" "\tDLL Name: %s\n" msgstr "" -#: peigen.c:1228 pepigen.c:1228 pex64igen.c:1228 +#: peigen.c:1227 pepigen.c:1227 pex64igen.c:1227 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "" -#: peigen.c:1253 pepigen.c:1253 pex64igen.c:1253 +#: peigen.c:1252 pepigen.c:1252 pex64igen.c:1252 #, c-format msgid "" "\n" "There is a first thunk, but the section containing it could not be found\n" msgstr "" -#: peigen.c:1418 pepigen.c:1418 pex64igen.c:1418 +#: peigen.c:1417 pepigen.c:1417 pex64igen.c:1417 #, c-format msgid "" "\n" "There is an export table, but the section containing it could not be found\n" msgstr "" -#: peigen.c:1427 pepigen.c:1427 pex64igen.c:1427 +#: peigen.c:1426 pepigen.c:1426 pex64igen.c:1426 #, c-format msgid "" "\n" "There is an export table in %s, but it does not fit into that section\n" msgstr "" -#: peigen.c:1433 pepigen.c:1433 pex64igen.c:1433 +#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 #, c-format msgid "" "\n" "There is an export table in %s at 0x%lx\n" msgstr "" -#: peigen.c:1461 pepigen.c:1461 pex64igen.c:1461 +#: peigen.c:1460 pepigen.c:1460 pex64igen.c:1460 #, c-format msgid "" "\n" @@ -3563,128 +4006,129 @@ msgid "" "\n" msgstr "" -#: peigen.c:1465 pepigen.c:1465 pex64igen.c:1465 +#: peigen.c:1464 pepigen.c:1464 pex64igen.c:1464 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "" -#: peigen.c:1468 pepigen.c:1468 pex64igen.c:1468 +#: peigen.c:1467 pepigen.c:1467 pex64igen.c:1467 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "" -#: peigen.c:1471 pepigen.c:1471 pex64igen.c:1471 +#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "" -#: peigen.c:1474 pepigen.c:1474 pex64igen.c:1474 +#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 #, c-format msgid "Name \t\t\t\t" msgstr "" -#: peigen.c:1480 pepigen.c:1480 pex64igen.c:1480 +#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "" -#: peigen.c:1483 pepigen.c:1483 pex64igen.c:1483 +#: peigen.c:1482 pepigen.c:1482 pex64igen.c:1482 #, c-format msgid "Number in:\n" msgstr "" -#: peigen.c:1486 pepigen.c:1486 pex64igen.c:1486 +#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "" -#: peigen.c:1490 pepigen.c:1490 pex64igen.c:1490 +#: peigen.c:1489 pepigen.c:1489 pex64igen.c:1489 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "" -#: peigen.c:1493 pepigen.c:1493 pex64igen.c:1493 +#: peigen.c:1492 pepigen.c:1492 pex64igen.c:1492 #, c-format msgid "Table Addresses\n" msgstr "" -#: peigen.c:1496 pepigen.c:1496 pex64igen.c:1496 +#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 #, c-format msgid "\tExport Address Table \t\t" msgstr "" -#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501 +#: peigen.c:1500 pepigen.c:1500 pex64igen.c:1500 #, c-format msgid "\tName Pointer Table \t\t" msgstr "" -#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506 +#: peigen.c:1505 pepigen.c:1505 pex64igen.c:1505 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "" -#: peigen.c:1520 pepigen.c:1520 pex64igen.c:1520 +#: peigen.c:1519 pepigen.c:1519 pex64igen.c:1519 #, c-format msgid "" "\n" "Export Address Table -- Ordinal Base %ld\n" msgstr "" -#: peigen.c:1539 pepigen.c:1539 pex64igen.c:1539 +#: peigen.c:1538 pepigen.c:1538 pex64igen.c:1538 msgid "Forwarder RVA" msgstr "" -#: peigen.c:1550 pepigen.c:1550 pex64igen.c:1550 +#: peigen.c:1549 pepigen.c:1549 pex64igen.c:1549 msgid "Export RVA" msgstr "" -#: peigen.c:1557 pepigen.c:1557 pex64igen.c:1557 +#: peigen.c:1556 pepigen.c:1556 pex64igen.c:1556 #, c-format msgid "" "\n" "[Ordinal/Name Pointer] Table\n" msgstr "" -#: peigen.c:1610 pepigen.c:1610 pex64igen.c:1610 +#: peigen.c:1616 peigen.c:1795 pepigen.c:1616 pepigen.c:1795 pex64igen.c:1616 +#: pex64igen.c:1795 #, c-format msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "" -#: peigen.c:1614 pepigen.c:1614 pex64igen.c:1614 -#, c-format -msgid "" -"\n" -"The Function Table (interpreted .pdata section contents)\n" -msgstr "" - -#: peigen.c:1617 pepigen.c:1617 pex64igen.c:1617 +#: peigen.c:1623 pepigen.c:1623 pex64igen.c:1623 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr "" -#: peigen.c:1619 pepigen.c:1619 pex64igen.c:1619 +#: peigen.c:1625 pepigen.c:1625 pex64igen.c:1625 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" " \t\tAddress Address Handler Data Address Mask\n" msgstr "" -#: peigen.c:1689 pepigen.c:1689 pex64igen.c:1689 +#: peigen.c:1695 pepigen.c:1695 pex64igen.c:1695 #, c-format msgid " Register save millicode" msgstr "" -#: peigen.c:1692 pepigen.c:1692 pex64igen.c:1692 +#: peigen.c:1698 pepigen.c:1698 pex64igen.c:1698 #, c-format msgid " Register restore millicode" msgstr "" -#: peigen.c:1695 pepigen.c:1695 pex64igen.c:1695 +#: peigen.c:1701 pepigen.c:1701 pex64igen.c:1701 #, c-format msgid " Glue code sequence" msgstr "" -#: peigen.c:1745 pepigen.c:1745 pex64igen.c:1745 +#: peigen.c:1801 pepigen.c:1801 pex64igen.c:1801 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" +msgstr "" + +#: peigen.c:1933 pepigen.c:1933 pex64igen.c:1933 #, c-format msgid "" "\n" @@ -3692,14 +4136,14 @@ msgid "" "PE File Base Relocations (interpreted .reloc section contents)\n" msgstr "" -#: peigen.c:1775 pepigen.c:1775 pex64igen.c:1775 +#: peigen.c:1963 pepigen.c:1963 pex64igen.c:1963 #, c-format msgid "" "\n" "Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" msgstr "" -#: peigen.c:1788 pepigen.c:1788 pex64igen.c:1788 +#: peigen.c:1976 pepigen.c:1976 pex64igen.c:1976 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "" @@ -3707,31 +4151,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:1827 pepigen.c:1827 pex64igen.c:1827 +#: peigen.c:2015 pepigen.c:2015 pex64igen.c:2015 #, c-format msgid "" "\n" "Characteristics 0x%x\n" msgstr "" -#: peigen.c:2088 pepigen.c:2088 pex64igen.c:2088 +#: peigen.c:2292 pepigen.c:2292 pex64igen.c:2292 msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" msgstr "" -#: peigen.c:2106 pepigen.c:2106 pex64igen.c:2106 +#: peigen.c:2312 pepigen.c:2312 pex64igen.c:2312 msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" msgstr "" -#: peigen.c:2125 pepigen.c:2125 pex64igen.c:2125 +#: peigen.c:2333 pepigen.c:2333 pex64igen.c:2333 msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" msgstr "" -#: peigen.c:2143 pepigen.c:2143 pex64igen.c:2143 +#: peigen.c:2353 pepigen.c:2353 pex64igen.c:2353 msgid "" "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because ." "idata$6 is missing" msgstr "" -#: peigen.c:2163 pepigen.c:2163 pex64igen.c:2163 +#: peigen.c:2375 pepigen.c:2375 pex64igen.c:2375 msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" msgstr "" diff --git a/bfd/po/es.gmo b/bfd/po/es.gmo index 4097899662a1fb91c4e3a87c8a77b532336f27f8..69d55fc0551dadc1a4512ea29534680b90f3a1c8 100644 GIT binary patch literal 109357 zcmcGX2Yg*+{r_)dw(Py(FhX1CO?N3NElrxV4J1uS(nT%lO>&dmHpvb5=C&ya0uF`@ zWw<~^QQ(IYL6!pr93TQNR8&L-l_eq|s0jb}=lMS8+;cNZi~jE`C-3t-=h^f7jPsnw z_uTfX1i$WW5{ZLh>p_Xc2ewTlE}kvjMBrPVcr@JkBy)F$XT4_{%KX_-{#^4i)~_q5M6lF_G8_COwab<51VayxiTj}P;R(1s{HK4OXfpNQP|pv7vNsd%4wrbY@?7V6rsu_QSIm6^Dm-6+yTIE# z?}Ot}|HSjRo_~P~_e);A<0)1S_JT4$2ObF*LY0GVuYUv?z} z+_uH^4}(g_3a?%a<<4@r7hD7N{B+NYpu%?@+zZ~}`5@dA^%GwG5>$EHp*4{>6V8V@ zco!Uk$z@iKu7@f=-+;%!vgL`yad0wJI(5Pc@It8PH$$b-BeBY2|zZOroEI$HHsjEchUt2;Z>^zu~cvtWKd_0Hvro19e-0T76INTkHb8}IJ?w{HgjC7I!SA&A^}yMvuZ4=|FQDT0I$QuJtf5T79(W`CG^~Ip zokm>YCU`u&4OYXydCq8~4x`@S`9sfOt?3uwg*<-%%AM9!BGCsw1PNl|O{jRUZnx)O zfJ(=wAzmaZI!t{DJO}kp;569MY3chuScm!%I3FIEHuqOS#rOMg27Ci5AEtL%d$$%I zj{019B)kqP{@;g_V4~aNe+-<8aut;O7kS35&kFI#W!PlHFJ-v$-W_j}$2X~GhJ zg%rue{9aRk7-mub391|}Co>fPi(xJN3RL+20jI-R6sAhp1EszWDn5_GW8s@n;W`#a zPlP>?CMIzsRCxXcC%}pUGq)TzpuPg041W)6VDfa!j~tYLS3;%J!|)Ke1C_Y~mczqf zE1U)gq1?Y7mcxf&0AGfR&pvtDYPcFMfggkl=dYl`eZZjgKg(ef^(Udq!Gmx*+>Xko zc+P=SU?)_#u7nE5gZ}w*upagP8?1h%q3m4*75>}c{_tl|_MV3a!d*6+xruNV>Q=Y_ zUgY^hSciJ&A>(qWdU!273O)uE|2N@0IAN2ee;O)XZ-+{!*P-06IK%qCPN?{v3zZ&U zhE?zdsC1ilrn$cn%G@>Zc=!OE3AcThm7C+C(q#=)`dM@{ytPbZ1WyV z*NIT!tA&kl2&$a_04|1mzc-Os3*QM>!EeGAxZnFMTqe;fJqEks?(avIfFEK_=4w=7npl1pz`rTSOaf|)$nzwbUpDxOXm$x?tB_5AAaWb zx4FpY2RsS=6;S#387TLD0T;r9KVV!7Yf*m|o(7+RlVIJ&R^IdQDAb>VN5lKP{C3$KOyzz1Ox{=w_-eyNqG6X0a@SHolA1yJ$11s(zas#vp*Ti z{Hbs;Jm2$S&;34V@os|)czyv?eD8;Hch?VDI#j{qP;Y>h@Jn9(G*mbbzufY(5l%t< zKB(}04NikkK$WLGuds5w6w2Q9Q1Sm6EQf!G)8YPC8c&8wud|`-e*-FCUxQU}?o}3^ zv!LwV0S|-E!mHsoDUEDh`GNCDt$fz70=&6wFmos)XL8(Q1Q9| zsvO(_Pl2yPxx4gZCja%ry-}Y9_kou~`FA5!_#T8R4{yR<;n5$r{$dtvMg1NqbH9W% zEs33o#6)-jTn%rADkr;KW8pa->Ujn>!^@%S%~PI}KVj*UhqKZD5>);^1r^U@K56;X z4wWC5z^U--Q0e;|TmmaTW$CpM%KzJ79sC2F3nyP|>CgkEzQFT7Sb;k6Y2y?)59Mi4 z_OJ2!e}YQieLiF5uokNPydSDw-3;aKui+tZzw0bKvtTvqK`8UL!(R9YxBxbO*4qCM zLgnuxQ0cS(=d7N$LB;PTcrttm%G`<9o4e=3m8c(pGvSdpSU6Y0rKm4}O0Qo)<-?9Q z+Vg2}Pt+-R033vS!As#D@H0^MZiPyZr=arX$p16_9ykm2$Drc>FjRj16Ux15H(7gd zGMs>V9XuLd4p+lF;bOSY=dGPy1CK}jMK~Y+8LFHe{RQ)96>LI%8B}fo!E{&g@wzsK`JsBql`cY_Z>`SUnbd+-XJ1b4c{ z)U%+>pX`~1Nz_-sY4AI+3cdta!CALjK3oQszRy9qH}Pv`uNf+x&VhTw&q2lKF1R0j z0xF$fgR|g1x0$(<;ds<*p~ABs?hh}6N|zg<+`AX<41WoCg-=1%$Cu$QaL?PV90XAL z)CA|icfmv9*P!zCXRr>w3KhPpJ1if%;U1{ZfQrY(P~p89y7Ywmpne?6+{^GVxc!|r zem@#2pO1q(!Ya>`;J&C^pyIg>DjWqU|33%r~i1) z_@=dI88`#||ARB(Z=ve-p5HR_r@-l`&xa?#yP(X!3Kj2T@3wYgDLfJNP4H0ojOVy- zTl!Cgihl!CdTxXV!gJs;@M@@f@jbX7d>-xzxBHH%_lJu2RH*!{gUYvl=-hz{=hgoC zLs0I$1P_A;-ecpYN_YV3cfuOD!Sm}-`I5NT+?@)gu7-+N4(<-W3gzCtQ03r{@Fe&z zcpR*~&)h!?DqbIfiqAdpAov(mx%-Fb&fhinj({>(4VB-gLdE|acrd)e^D9v1egx(3 zQ=U`5XX-Pd>cjV-%FpiKxB7iDl=^&F3-5um;f_DB_WVSs@Ne?!o8c*_pM^??dG}kn z>VpeVe+8=Cz6j^R-~mhT)1dU<2W9V8sCMW{n1Or#(9-=~uoLxn;39bRgUqGDKDZG6 z45}RM|08Qhj)MzOuZAkm*Fc5$=TP~v%R`oLNzW6Z>fI?&<+cl|d|U@B;GOEkC#XzW_>o51bBPg^JfPk6Js>4yFDmRQf#vW$sNF!0Ep*{T8?Y z^?6X`?Ou2!d;>0pNBq*#<8;`F`cp7~FTiPV_g`5#s)l=_&Up2^;NhsRgDMx_g=#OK zgvY@>9NE(D0mN4y8am|ea8RV`ki_x_trth>mzVC_y9Z*KIZuf ztVX^2Z>$`*z++H<6xPFgVW8)~r7po~a4P&fRC)Rhl>6^^+~PkADn9Rna_6%!fDgk% z;NRdraM#~ie|Z!<0QEE&z?0!#uovzP&w(<3mDm5gSKkfyMgQk;claDse*6bcg7r^W zd$0i>hWd+e4*U_^18)C&^Jjn0$({>5TRnTA(&1e&fcL{1_zXN6PWglBFNZ1@8==ba z)$n+DA5?n30cXGi{%HB$0Jle-g-XW_Q1#>*sC>N-DxIH(%EtqrWG)OYhWo)rxC`v| z>H?JgOQ6#8Yf$O)FjRd1uZ1@UP z{3kz6A6JH~2PdGu?HTj`ad-skou9REPk~3Hu7>Q0ce*bJo5b3T1v1 zJP2M3m0#b0O2=P7)teWg;#2m#<@1qH{w{_}=XFr&b*|UH3M&8afQ#YZVI8detEI<# zq5SzaY=*yvYCkGouyTC1=Z|0m`Un5b;;{}^q5ddb1|ReKQ(rXoX;9(570UgG;3@EF zsPNAHyU%a96Y7ng?}6h`Uj~&vAA?ij&G0Dr2Y4vl;U$az(NO7e65Jm4Le;apS6=~T z@8e$oZn!(@-+BJcv+QNl-_!F*xF_ajLWO5B+y$QE*#^g>?(-b-d=K0U{Y#$G2od{;rs_&3ite%^`|K~ z8}*0b6!;@J1O5jd3#a|t%Eub0`g|@_`M(AEDZh!{1Tn`jc*`_AKf|lw%<*Ne9zOtEQU4n%JWV^5xqj@ka0vC&a4u}$xy+^SC!zBBQ8)qavWunL zEGYGAD1Y7qm0yoQ)tha0HT5j0bn5Z^DpdSmhqGYyZe@ucI0O~X-$VI-)b3_~Eeud! z0cG!2sPz07RC%l1qs+;7{ZRg1=hZ)l3sH~X)7)JORbD;>kB9d|`M=FxWr-?yyyuy4 z9qMnwb~thGvP1{`0DK>O0iFyC`;@tI_#L=X`cUb)WM3;c*LXe#7oflYeiolq@C4Ks z!{zXPsPY=@U*^`UPlpQElkgaL-~pDeweS?wSHY9upFO7^=*ux&g#LA&&p_qRw1X`F zRzayh2|IKIMTx10p-svQ1$pJSOfPts?3cePK7GZUxg}PZ$gE8 zMtPa*#|EIncNJ8I+~RJ`EdS<76}U2`Kfiq0(hi()2e#rTeY$Aowa&J=m+l%6TtTx_k;=4xfRl z*Jn+!aNh}49^ZgUkE5qrxom=~QC|jE!DpfBNA0vSxBm8F*p2!f)5{WVa2=FC4?vZN zeP&quTMrAU&xif+KTz#k@60mS-#i7?4$Pfp@hN!T0#(0XgnB-2w#8>7ls`8?rQ<8` zRCwZXR$o636~9NI(s$=M7M_!!>hrl!_2_meb2}ez^<)WDeZ0W)`)~p3?JF(*i=o2t zX()TYhEw5wbFKU?ffcBSpz`AesC<709s!R$!JaRI`=KsCmAgxz+UxH^m9y8N{5fo% zZ>ON*c`-Z&KI&OE-{LhHDqbCM1^gIP`FPQ*=bvc#@L{O*{4rGe9kRgmd!XWT9aQ{( z=Xq$A)weZJ<@w`q0elcDe7jUz{1!vmI|r&Ay&LA?z62Q zpvwF8a1GqKw#?0wtb^^SABL;p^hH)rE`^7o{ssIbd=*ZHA6{(j@4Zmv`Dv(jVUHyi z&r_k=$*a8jFHr5&k#&|{>!JFoJD|$>>u?opILYe84R9CKKZbk3-$CW;OHk>v@5$DG zErH69i=gDpZ^JJ5FjV=UU2pBt=in8nAA`#O{sxQhr=i-pZI@blS3$XV9#nsD2UPt& zxY1aEY8M`Y%7=rSEPq!+mH+FZ(&tGid1#MQEWY(n{l~|k>d({g6j;-2;rlR@{P#ns z`jTw1d^`^-eZJ)RCR90ZYBgR6~%7^*yf4=SH_UvBZA1C<}^;o;i66lv9M@&fkAn+PcSDtr z8=>mW15oAfKTzSE-EHNn#pA8R1eFF^O_dNd$ zk3_v=rp%4=Cc~pp*Fu?J2WP+wq4M#YP~rR)oC$YcXXT;_svUhVR5|??RKD)JzAUi; zUIbNt%6hHbwLq1_3*j;FJ5cHU98~!z>ofnS!y{0i0wtFWLbaE7!d>C7pv?aTDjg5# zxAd6{CBLMg;_)uHJG>eyzF&a5!AGFV!4pvJ(h*rJzbm2Q`4Oo0<^ibizX}!Jx&bQ} zgK$sO7eVQN0xI2q09Bt}fGR)RpKj(3h6?8tDF07^JHeEH-UoL^eGXK(FM%@m1*m-g z22}a@1C+gka#qeJK&9VusCu^^R>K>i%H^|A@!KzN`Pl#!j&q^f(d(evug9VM*?!Rc zpA6N$oeUe{RZ#uVQ*bG)D42U^LAi4?RD1FqRQ?{h!OHn+sPb|R)bk%h$@4pIv~sfq z>iKz4?d|Pe{R*6q`k0|Ix4$q0VHKTm~f2R;S${8v!6VlH$3zr;|!>DS^^iq4yf|+S*Y}V45~dH{{hQ~DR2mNBUF3( z1E}XuLZ!>Ni_M>TQ0XuLRle?mP4G3CgLRjbxp~EJK;_q?Q1#?BsPb{#rN%+1dT_Jn z*Wq~7--U|LBT)5do69Wyr$D98dZ_yOD4YcM{h+ny3p{Uy&FD}3kd^NUY5f@K&gD{|Z#Sn17|I&w~oz524Jz0Ts{LS6O9f zP~~^dhfTijfGQt%LzUaVLACpfK4S4)2P;rt50wu;_v#nDI{2u?`vj4GZfABVfb z-$J!3&q0;%ojzvjYN-57LHYN7sC2mr2Jj6i_YV8GwU;e$H`JFx#qX0)_4V6O zd0u@dRQ!Ge)gL?y)voXLDQhQ}LbXp_@BsL3um3Txz8R`M{1EN|{{+=;y#`euR$Oax z@cB^n?I9@lUxhM1{nOTO)_AV=%z0kuc`Zz1{&si-JmfRhPA!0n-_=m*`BNx=Ux7-W z^6M;JS3~8`4N&FphfwLW_h-x8I@m%e^Cv^OcP>=*zWUXi8Az?@SR)_aaE)KH|*kiflI%y!zwr%JHO_73iWne-{Ag! zuI;&hH`njDpU6eEcE5V=cjCSS)vvg=L#^Kz(d)Nc_dkvLM(*0YUYoZs<^5cDpuQbW z@%n$~UhPx(`#Lu_b1nAnOMe&4-UV-g7kYc|hiWhNJD&RkNu!;;oj*Xe$(O+WxYVz- z^88}%1MbgYA9!wH!0^xKuavI~zTTaI>hU;+dB}3=AKbA|sbzHY{ zeGRqRziD3or=AP&<4o_~SK#5OU&h?kTt7wq9?YrTf3G*sZS+%pEyKKiU-i!qKs_0I zf93j8%+726z8;R_*_B*>;#$q6Ukd%KH?t5oD*gSBJ!R%f{o{8=Oi$_qQD5lYp}9?* z#QjOQQNuOgn{D>|EBp=5eWq1FGKxSqPH97Zb4ne{dVX* z!~HM0{==oVR=+7cy8(3@{5I-8VCP4umvQ}32Kc?3d;R_l_vHEW+}A+;lIX4F{w!~% zpL;~9#H04uwY5j$_AgQY5dGhH{Vu3>Jt=#{FD}{aimcU2g zKQZ?l*Qq?4f_g9iTxRrJgL(ze^!o?q_T;4)p_3@AUXZP~#Qa#}JVe~4w zUPtd~_&slr;f?*!JHq>WAorc=^X+=W0O@@g{LPdhy?fP`?w6 z7kReIKlmU_aW#8Cw&xxZIq@#8SG}15?*D?_XW&ifwZ+`MD|Y`K?joQ|HxG5_NFDrSBN z!`~68mvDWOYdh@qz#X}M;SHRL8|w4F$8}jOOz+3c`KZ6a)xh;P)E(YmS=|HmHCz{X zJ4eH2)GILa3+@l``a5H`m+NP!?}Nwi{QGbnW`7Fx%XqWP(c2I8Ww3%vzw5agxPOdG zvXp+++`rF1|10VrbAOLlzk>QYe=oCt!R;S#{n7g&y@LtEj;QaIg5P1N@5Ro(T;<&F z!Sy`%@8UYfj3oXIpWylj*RQz(%;>{TbXZg8DV_>`|^ya{qwSA&&4U%zhqo3^+)`(lTpWiD>1VGjqkx-u@nBD z3U6XO0=t8#mv}cWhF|77%$xZ)ZhV~k!_oVuH-kv-ercZRH{SDSumbgapk(y@;b*+r zZ*sp2VL24u#&rYFFX!5s=NG^gTpvJRzq7e6;C?aY>wWlFqsI^^(Zh8p*S1^}F!N5H zf1dkZ?vLR*5_5;cAE9>?*F&h^Yvqduiy2kujJY5+%pVLbfP}NJs}NI>-S!R`#+QCzeIl;_Wy>? zT-0CU(r**`M{+;j+cVwb|M}dev3Gau`Rwm)`Wg`IGtcj~>U z@8$}B-Q2v3>vJ)?dbSkxJGefU&7o3%>9b%E8M@xbu^cLm6*xcZDKjkAK>~i z>esPV&)FQT#~B= zy)LeExZen;do!1yzK3fD*J|%yg?FnJ^(pAv%fd7bD}r#S?+iB7Usb!)H~tMolw7>42g5R`We(yF?SpM4|;ze z!?SPl{GVLyvFEc;>(`06F{XLQU9nt@g zdrDi2-N(6(B0U-SA0qxW5| z6{t@{e-VB^!u@=%Z=qj+AB9J7>36;%@m=rUui;}}@Bc8nBla7)PUAi$yIlIMHzZEw z*+uBxiTV|I0_uIanz(P}IuHGo-t1>kzn}X}P`^KL4ROEN`~9NVcMtjZWz;wD>`d-| z&hM0MIv6)@%m?LD=kyMZPmEid>PrVr*-ZanIv2CmnCr~+r+OnD99kVWI>j4UVrnU@+SeOzh33Iu)KNsgA)ys&|q-n-bc|rF$_|KC?5(c6H^`gWL`U ztIKEh4y_5w^NDdA`cjoau!JDW*PtQY*PhNLU1+Mah5pWDYj%8M{J5I>`aqhMSVBF% zsWw=YArYz-nr8Wt8q8$-^T9+H*@0YoFx?qcnD6;?haLtUSrVduFh2u%| zkl)nTp6$iy7=(lbfz#|23bYs1p;e$n)Tz;@C)jKQSBi`NE!5jyy@{GWo$wM?RQ3R8E-~U$dz{)tBiAS}aj2(W)Iv zcLY_1p-gWkmD?07NvAr~Ij28Lu}da{u>82hFYoQd=%PZurEzCE-;v7<3}$nI%M@}U zH5d%`q=WomiZYzCGE8Dmr3_$mX*M92I#YwGz~|H9!Dz1aX9t7Mw2EM71=gByETddq zUEaCIyB*96&QvrjrVmXXgTYy{o6C0RQhh$6N`aQaRLA-tpE)BPbP@6{ADetd5LET! zvlXt&V8SsIg1*#{{OedhIhZgwAs9?$dIK`M7iU_Drmw56jt(o1<@qp*v7+d$MNziO zU0RF>;>i=UYd+TXxop~EADyjSI>_XMRM6#0@L*4&pZK&Fd{)IOOe)i#>F*9QgZNvZ zdMF>-l}uDl3%hr!KS*0MHRzhBOg|M!c~6G8j3#k5W70gwm(FZD?>y;3L1oTTcyPs+ zjm`M@Uk5*9>9_^KkDGj3-Y!q)@@kQq(_JJ=e@8m6QW)xXrn^XV*Pc1;OinFp*!-*N z(7Xo=m1kCFse{2pm(G)dr3JO1w6VN+Ao z@EsY(PpGY`t_wE!0;?_eRp7eU_L0&pXPlAX8JqRLo!53qU{}Uw@SWzFp$cV zN7PTBHaVXy`BBZNPwsYkW|`+qbr%EClgbB_82X+82`h5Lb>kbex%Fy%(*0^uI!EYt z^`^RATj8ops#oP^gdsIp`NDwO$Wfk_Jn2gf49LGQF%Tm<(iFce{a4Nfx-Z?A&25_3 zp6Xwp?4!{2$~&(~Xk5_y(;EX{F8Z^9vK6^U=K8b!1DOuH8w_SlZ_fh?1=?m&ws!W-8X*R-%4b!Fuss7GjgOxTz$3P)pXdiTB2RS*)Ewa zT9wE-Zrr$Pifn(_sLFAKu(&b^mi2EW@q@blE@aTateGuuTDF4PB@VG0Hx12*7 z=tvK!B{xZO+_+GNFZ#5Er0k_~1T~U@^oz^{K|?CPex%>#0VX4_s;eLP`;d8->CJ!+WW~gg=Ssx^K<+Ry|mh%~9Nlq=a+(IeFL%&0b4rb)}V# zU@+A;;PeqrNql~;J91jB>d(frOTMmu168>*Nau3MVrtswC(5fRu=${!niynrh^OT8 z>b2!n6VwEiSFds9vCu#2BQHASM|DKyxM(kCv{L(xdTsVfNJMI1$M;k)d$xDj|ldF`b{Jp3;P7*N)NIst+HU6lA)I zNV-$z6g+`iEy2{hR_DrCrYqB3$eCpN7DlNUGNJJg$(|1uHrKVN_PWHKOb|P=eFM0p zHf3XmB&JQ+kjWPELAHGzVJx*xGnSMK$*pyPR8qPiKV&zOe~5NY(qTC1Jn)Ghkk=H+ zbej5|A1t&7-MMUGz|~|$!rJD5VUxt1^43pvZ|rAs=BRZ z$yNgV^5}6qwRs-%;2E9X_rSXW2}f2-LMiB zk3)0Y>^Ud55%9M9S_*#5sPd8g@550NgM9QkXhnZmV4B;inj8LmXJ`o9Ly<@AT38fG zDmU1Y;8iiq>r`Pdi_A(-*jMNs%nVRhTN@V+FNcM^9N3gC&~h@|R!5tkOLSGkHDTha zce1Y!iK#Euo75Bz`A`^OK#ZW%-O(}3*N&9Nzcjw;q+D&l_=pnXP36+5j-I!CI(bBJ zy21f>ve*EZREFZv)20C8rOFk6m94c)TdLZsS{m9~>KdBr>lUqw1DIu&f#GQ`)!&^C zCTh}Up6mC9SyX6K;fYy5nr`1}77h7>x4O_i>|S zuSUp`<)Rmxx4D7N&ZQy=r()%Y)FyjaZ#WrA!wWJd4IrPVC8_u}bO`)$XUGjUpSh|^+irHr}n=IsdFfD7BBu6Asyi;sZZOO&mdbX zrx9ON`K-H0`pTVTm};fR=b42hk|;__=av-h$)RY1&{s(aVnqz=DjYTxaMD#tzdSc! z{FqUx-bB%L?E@`jpG37$`j@7l;zU6zOR-gGzSC&Wfc6e9XHM-l3k*An^97)zD zP^fL_DYp#-(FA~Bf)~n%~ETO6=#ROzZ^Y*7mqjOzh+wJn!$t~fQoDPz?UDRj z>Acu_M=X`hw&Y2q6}$@LK*yx=?^Y`q6ljg$zlw#cJWK&8(L0ch=po)B$lgY2&tJ|G ziXSly8v~SPb7>O3l~bE5FeUZ4)Y&j3V_9Fzn0&IzK+M3%n*HC^waVb|Jafz416E_A z)bU;_=8`cg$V28~3U1Mmgr_s{!>h_*U4e-Rg;E1d#+QsIkd4Cvp{ltq)oXSbg}Ny- zlK^NE7=%)2q5|I;v~LP(S{g?+o$sHZWh+-lyn*7tv!5|8RVSSNcCweGwW5jWQ6ZS9 zb*J*qNzRoC5`R)1tQ%+m=VnEykW_GFdN*e<*h6_^6k0lFtPCo;i5l~C;S_H;(4IZ> zWD~_AFDkMFjE1ZcP7&Mg0#%p+T#o)8=}k{HWt&M$xWr+m3^WVdW+uY1eCU85@{@XD zO1Z&XWzfZ>7fY|rjM3YgT9#BGp0NLMz>!7_N==i9w4n0 z2byWQlp3NB9L2i=vJ#UtBz51qeYW52v0OaF{<@;ibT-~t=#)n`7JPQ!uyy88KLzLj{3AXcB2+hXhK}vga~uR2#mYQeI*rxi5*%!h&u}X>Tl%qo$*?WEq5PHSiDV!YTeUD$Ws1KN`0Z8o8&2(@)xH>W5LI zdWx#vfu2;*&h8&I+!}EO%W%t24zck;%Ls1Fi?DjC>&Ls({b@uuJax0g-l50|OP6de zR~VpUaT_QyZ0At&`FUH)n#zJ-S++?#XKN8VCkPWw7*iZ%tk#R8^(tQjB|3%ea%F67 zyI9EbmcVn8N{wl=lPs$FMlF~hmba~NWi0E?!(t{Yd83w$xE5F9tlBUK)!5t`RJAZ= zugMZEBKU~`Wd4qHs+Tp?aFRVT?2@IfIAKZ&9E_^^W-4j8Vp2>MjgHvi;dV5{DqcgX zmry8~Ek2!$@@?XR#0!hNPx_^bVt=;K-GhL{`o4nirDC6%loYMmmW~ydx=6TL;Al}e zC@=3`J$=UPHBo#_GHrX&p;}*?fvBOC1 zRMC!_>cCY6=3i^;7X=e*8`PYcIHtKg6SY(h+^UKqszO3sl|ICjz65#GRtJj9DwTmO z4i@^F}^xvRN{%pTsqn zwGhj0mHG3c)LZ6O_Z4BSH=E=6ASp)~+tW=E16JKNF2j3Pc*3=yN>*syEZW#sEy&@* zw%R8bvt?0v3b*o5UFHVmL;k7Tg`r@x@rw0+w@1UTh0z8e^|Din*>FqpWwvP}o+_?% zma{)fr6_zJCXH21){80_cT}W0v)WEY29hu=S(^>@oVE{!tch9>+G&LegVxF{i|v>3 zmEAVk$ctEXVy=xI-FGZEIP$l!dH@wxx}&ZB1y@#4CVLipU|G*Q>5yiJ@ra$qU@b%bJuc&RlC8 zWnE@uUox_*ZJH3K-*SCgc_Bbj>eVv6D}))gz*vV?8Vg_P)vU6hq-Kh`6$<;|bh(nk zjXT4r$~))I%7%q)tqZ4?4mk70M9g>e_ok_VR_8voRQIlDB4-?mwBE;N-ceMYZ0GZMzM1O)cTFvXyqF z_{!E*ZMDtuh%;p!mK~y9V1F5Bjc&Tpyqh+-4oKVQiSqZa-X<*YYuZLZ)h825x0~ z(nD<;y0`gfQRw{ApxZ*=3uSMi_|&E-v{z_I4Xk_MOQTIaS&`F_eN*7;Ob6{Lbrf&A z2aw&HTNXD(kD|1X&3&lIXh&0FsATBxrAMpdsbKa@1WaVXO)SIr*<^%`cIhfudF7b} z&K4v?TMQ>~)D0&_wW&2<#x`bTGzUryjP85Uk5UJ0-o#BL+rm8!n43QH1EEkp_PWVF z-~XxaDRs%&DtYb_z)Jw5yBYfKT?+Tux={-q1Y4-0a>C9CH6EG%Qq3)~X&pv~N|iNl z5>CkZ(W`rBRs$#XfM)00Wa_@gw5@eIHtMH4 zS#BC&8Q(VT|2HlokZKZ4E$Z73*4Pml97vMaRAa<W+EyOY2);_+WWYrw4%%uitOkI$ukWr4P zEU<{1>Ox*s9uZBKmz#G%)2xVCeks?=r9>G@Og3P?usdx+pm&A6w9}?B-^s)$JCtK~ z<6gzm8BtTkG*#U3fM>pO^G+70;$rr^_@&_*TM>tR%U(WU{X+NK$yB!|OTA(-cjFo8 zBEU}MbT^YlqlcuV6Dl!Z(&dm3&VJO2mt=fgI;#j8t$83HseMBg>{L|4;Fab@I6V*( zyi}cComKvm+t~qcRBPJ=-=(a|!|0t+xS>J&s}?smE^Bg~!6xs9%@3);b9=MYT)F5( zt%U|(uA2(jFjrz}WU`e!_8nmO8c{*LvbKLYamvOPE?Ul#pWn|iG-A?vV``ISy~3qT zBoJFNSr!_fG2KloxOH>ah|iuGX*lmfgI?e5y0I?ATXi}mMwj(6=xb@JYGynZHeJr` zB~|rB9k;PvZEEO)HaR3&_;e!%KlhM4H4rlEESjKH>Oj(BUB=uATqThxo#?zYSkMjwUbBj|T!fy5BavPkip1LXSY~tU@>`RFezMH%yKo7} zt}8XwycQUrGxK89=X#| z;K=Q2euqiP2CP^j7Bl;Qm7H6V9a|h)KNbyl)@&w+i$yGI91v7gJc^SEuF{94+9q&H zbJ5$_#Qgb|+G=i_F=uugO9hRK7Ddewl_i`Z52tUoHbaNUXHeofe%9e(cGGO(s-}cbZS^nhkX#PCiTLn= zCcmQ>NB!)Cwp208VdLGHY{rlgk)uEI%oKYYpev`KW}Rd`-sCb}gqP=zmKLU}0@}wRO>N?MRNd+w}g_*iOV2`0|0vPQpI=;!A9PR06JF!A1zu z+Y}5zhIPKa5%npq>fT>q2sftx58Rl!)ovVL z3`bkrU~j(7HfwHWY?^A@Y~i(yw^f>JTUy$9Rj9r;m^f|vq@o8tv1V^BknC#F7Ugce zuIzSZse4j4F(O$p*}7y|L-iJ#EtxNgIT&tOq+d+`C?f!l*nwp2AU^UVq!dnH))k>STCxqUq zP_7D_hgiQJ_F}%N;OL7!-h$D)<^)PFs!MV$)vao+qY}DZD6HYc#Ri)@4_5~56p7d@ zg2Ha2jMe45`D-rQvS2Jk@pdJ2YUJY*f31`8hNr~dn}|0SrSAIGIjyV394{_@$D3;( z(xT84vth1g-r7hQ#?f41JAQrBlB%}mw#7}&we?Ht7BAV1gTqYMH?A}N-m6ItyY(0IACw2gN3Eo^M4scH?Ylxsbr6ENJKrKmG@%SSTc ze2N^X?Hl0LMXk%ZE+7;$!krzw-Khj{y^rJ~=5?v~Ct6*J94SgF#j?Z>Q$Orq^glXdbN$I^^&G@6nk;Ehs~OYK`0Gp(aX(P zmGn6*N#0_@cerUk_3N8PKf!7Hpkh%Smigg?@o2VOy&Yyg=90avN_)UEVr=_IlwuMt zRf+Uoft&m(P6|a@r3n?<;J^a+>eFy*rTV3Iqn(P@V=;s5RvGk`Pm0~ubbAy)C)07D zLO!o8I?8CjGVZqN_&tfk-1Snj8~ynWv+-<{>GCQBt#BW+$@a`;g&A7TZi#BrsG}#{ zu|Chr2km+bGcK-6P{O#3l&NLK*SJ_1wWE`w-gR^W4#Z-n8E3u&P; z(6VnlETyJ`iBX?jUYJZ8De3$?dAYZ(-kZ5WUJCH5+CDPHMdVU9<32}rRgyF_{@**n zBysUrr(mlBv2|8U#Ck1F#Knx^QC?KuRLS^D)nk(zXr(*b+?*S;KDA`Idmf4yV^15o z-p38H(z$>$XxR2mV@nZQ%b?2bWmCx_-`J&1o z>1G9ooSCFvLEPl(Pw3TPmi^-#O5%*K)a!jVgXY=;YfiM$N>L>tOnQlm)-aL4%%pnV z@(MZiJCvB zt>>wrrnRlLc4aHFid-HxohW-N6@sYYh~^xMua{am)w(a~Oyza^W;SP&#?CE%`rSfX zVa@lr<_&w_Qe%0;7`4h34$!IBI+^IQn&^-4(&0yMu zLkp5>>?wuvYLcz^-V|oTnFGB~PLAbR4&-^b5Uw&3SGp{gyzXXmh9$jp6`fc}R7I$O zKCc7G|9Lw>BUY5lJDofbE>8~cQ?Wut;Br=Cn~H58k2Ym@@pHz|+MvlI&byKg^&j53 z;@F6n$Qn4tVFJ<)DW1h?mcdmeP2ALsKxzBt1}L~zt7As9rm}<- zVlE9YT-l|~?#%VYxF*}W271RJIs_0Fv?)-&*YhLUfo7T2zvt6vzWV-cU zO*OImRHtTiZ1NRZy)#R>3~0FgK26#TVO4MqnQuuo0H_j;-F=*SP>wb zOJ+W!?ccbr0m@q#cky})Gov{fH4N7JM$Qb=AI<7!0>3rR4D-pXHu{%h{lf)x$Xf}>y-RyK+m^U^LM~1IlsC9snwI^HHQ`^KmdS{_S{fim1 z$vhY4wl)^bqaj>}8aG_g#%9gBQI*}{c+RNp-K00%lts)#s8a*bmuA;YaSC=KrIm?6 z0u;(>)G*$~iEW;7qV#Y92n+4JDv})NE##AawmQ~WhEpkFh4Cd>Eu=Nh&dayu!bCr} z!Tx$Bx^t)~p7>eQ*cg#)RNJP_(DAul#fmZE7Fy4y*fsbTX4R(o3cFT?XA68)UPskk zt*vdZmP@Acrx3BBjqb;_0apF}a+md3H0Qi!>bk|Cm>_c7$$nj(+5!-p)+S_>bJccx zRD8K4jA3NAXlR7}(d~x2E}7)^yC=LwchZ#WZET-}c@;D6w@-{PZqAe%clDB@Bu9N; z<+Q@NmuN4AH@J1S-8*v3`MM-h+7%17F9Xq={F+N*9iE~^^`Tl-bhy20cJ_{Yca@4# zoXRK~_ebB2YQDH3-+Cw8^W^qWxcIo&W$lzo3JNFv*a?iTKXow;2Od5xoh8Z3es{HR zi=0tO#k^VR4m?u>(wk~$R2d036cttx%%sT`TeBgKy>V7tqlpMF{l>N`lRgy3*v>GW z7v|N))+3afb*>--T)zhA9S@B=0fl$gt<$vefbBu1y>lx|?i^9~N*L9N*@I3eBo^O? z=H+46+QqAJvHx+&5XygjeQq&?w<=bhs&=(EJJ6;k)-|Y3z;xp|^(d0n{CQ#+989xo z#;vJIpZ1DPEo$lI01{ohxe!Lp^1kRJ<)wzsJwJ0K6;10sqmN_$9FX_4P z%p5B~W5>+T=IXqUP8{)h>as-5pjIO%2b&~0P7clx#tKtuLmr+aM}Z^T)w25icxhVn zG_G`=k2;F z9}{xyh-g1jcC{=#lh;LZq=+01(J2VFR%7qs%(OSB&6b^)=XRUx?L+3Mm|acfSV_`x z8M9~2nla0yXBly?A#Pc2QpzkpiyL$N+Ky7o`91b}pMM-%wu|>ywnT*#&&!6iyzzPx zOL4bWhoPy{M;hCxLu!f>&f($M8hcNjzA}U@ta_hahwdtyx-utltc_YDL@8!x+^MFt zR>9j_MN?Et-3b%uZMzq)ra1}7cih7&fRA3xgiF+D9uOHcmZ;&VrzAUk!Hf%CV^~L2 zP_{*{=#F8k@gSH`FDe(p*!WDSfIa%Aw*=(rSFPj5)$aX~cC}RLsGmd;YBU zsQGg1TxpwZiGmZ!gC?q#EN8j&v?>sp_X%nuUG(mU6L^qJCYQ{Hx=I-iKAeoFzM2^u z_s+PVRNJU+EOb|CJC>6f%!ziSP0}WM+*n#3X?wN0jbxV_L~+yS-qcL8FGO>Fex%_i z*tL~X9bmGL6aOM}lW;t29{hyS1`bG2=Di-*d76n5O2$4cUAC;T~&OTnT@{ z9URn~X;)>!7ri^4a0j4}tiD%uvLG`7wkeCu)|^8XN5QhJE^7>BXod!Z`We%kr|8_0 zmD1Hsxa=A;%tX9zZHgVAAK{X?+V15?*?zvLdQnZFQ8H(9@HG>ye(Pf*^a@OV`e)Ht z%MYG7R1u@J;d-~pzria>cdLvO7%XFnv6_uat97hMbMc6T8n@?1ufDIgkLavPxXDJ6)26V$VpY-4v6#n~#o-o9-Hw8DyBXUgXp; z$B}!xb<$3J(Brcpn5Yd2vAIl6Br3_c&Db4gvbcRzhbG&RLu#U;%&v9sp8L6IcjSM- zbOaJrg+6EF=4Hkw-0B#us10Q$AR}%&P0iUA=faqQ*G>|(gf8?l<@=9%jRe%%_%1~H zc9ug_fN9m-H#Y74PZz(YPPm>|RMy-UojVyzcB3p~xR~Pt}g!{sg zcdB`LRbo+9T|LKC&{Mdg90_ep>cYdP#wQkOI@z*J%TlR6M419-?w35!K&d#6ut&pt zE9a1xh0Fx~eZQ;o35Ad_q!B2ipQZV9W{?)y7aWM50?ph1qX`{I^~@pYl_m@*JZ{1b ziE#|`&ZrhaO3l{PwK(_v%f*a0?9C#VKz#qJ$0mzAQxxQwz*1)i`&9XjDy^<#jdCmD zA4eL&YVB!t^98nZcTJ)$oPI1>=ae+p$NH@b5IaLzt90ip7IY?-KV>VIc16S0ZQ9xj zT%u_q*sWC@s^2f_z* z*oPisO>hG{5t5DJv0CF34XJh6+?0k4#|iLhz;WfBQzRA?mpH?-kQzADu+O~#u1}st zyV@y%)I=7%`2wH1{q#@|=Q*>pBC%9E32<>-f;CN^28Zj$i6gpkC-Zp6ttH7z+k`yb zaz+j1Ut8r}-h~Yh{fU=?mQtqtK~wf69o3uSQ9y2AAP(6aTc)3{Of|Oas}$iYyc`Q- z!AW-I(&^xEp8F3RI;qB0Pm-e1Hr%_`!bh9N$=)qPMs(*!t#xDKEi_q?&sI3|O;s%| z4YdoGxDr2drl+a3Dq1&X8IKQBsCneme3D7sxg--M?@kToQ8Oncv}hl`2xG?G2x1h& z(=Z%<2Cw*WE!xy0%JWBzFFtddn>DoLw`HHmi=1^<{S4QLwz|}mGM2J8(v+Q9H@r5D zPc*kxFREMGrg!yfYFo6@8-2$kTp;n|O20r-^8U~;+ilCM>X+4SwHu3?m%sf0#4Z09 z{?nGQVz1R^wV3W;3|d_3fc6c!w>hHrkTjF0kqr(_tFKx)x;?!HGQwh`yi#iOa`SNC zINhhSGqYJ+OX^10qJO7_+^nto#!+o?W)I~B>zp?eBI%&bz zS2d&lWWSUjS;zWH?Pa9d<0B^c$)A7GjV?!DGgI%_9PaVq+`w|35lDTIIe(P8)_822 z0$UM7*^2p}>RIU~y5>jdM-PciotR5t>AfbdPN}x{HYFiC!d)jZkU4^s1bM zheE##UTEL#;Kx1J%}mg%cg_B*WV+$AEFI}$C$7PDKF1f~T53uTJ~j~w&9>^QmfAK~ zdqSy8U-hBZv*9INHg-wt(jyE6k!bOAP{ZGfM8CkAI44$zBYcdyEh)BI@9pVZjx8Dn zjg~;}LD)sbQf?k%FdHHAVxmQdTCgQ6=Fb2=>!VWP3nbMo%@hP=s6>nV{%Z6I3OD;_ z6O*oJxn?k&xTLsg?!v5SdyV@zP`Ep_4Y8|jLtnm)&(ZaGLvEmkq;1V9$GQ)=BQ15@ z8K0|VZqeM*RKGb!{uSNfc$5~u&8u`{qFi)uGb%KZ3HmuZ2f@7<9zAg-sd&ndN{(bk zH@;E%)2`ZBQ4SBov`3-yV>?o6zQn1hR`@XL)N!W!-Sk0NVC>}cXl~uT%#Ww;1TUBP zChpM!S%z8d2v^-y5Rv7IZ**GO%O|ugE6kzz>Y6+KmM=IUXO@17$Q68>vL%HQChdFK zKTR^X+Og&>{&c~pY*CSz?_HD7$LXfjFx#OWlnem<$ZT2c^+?1Z#`+l~d98Jr2pW}P zWvOq&Tt#+eE=(l%?oI41ftJ=rPA#9+#^(|_*9>_!KD`<4O!Tj_C1Uo%z16nx%oA@W zXlz+DWg6`iV@}t6gdW>_TZphlqpsRmE>PK*`4cD?x719j&aX)_UYej)lL@7! ztlpPcw6M4k$^z!2bca? zr35OO&JNXTDZQ1O{AZtl+cco)F{!%Aw&-aARCDDcoKi<%4!INeofB@IiUi$2no z>QB?&^={eRMXcVH54ljoi_~7KPZ`r4O$zE^hgpCX?7Lq1T3}{_LaB{0m*TH(6p8_oHbJUOxy= zm53FMFAoj0eE`tKM@n9;*W`vF27flYMrSkbTFNj<4EQK$Cr$fjlcO z(`nqg24>G3&8A9kZ+fK7xQkn3@2!0F?$X0_WZajh8TV@WhL8Cc1MUMgnxTYUG@qL>B{$QprdfHip@~kR&!stxzMm!gFad2AV5AfJ!0mq(=5R&Y#amsld$mU& z-c?H(FBdL@L*t_d*p`Oe8n=K3kVzfuF}q zi2EKo(~Ja7-6^ty?_!;!PW+R=P_jy(tSDM`U!KLfR)@n7aop9I-i+$LE68cT=s|Ft z$3-{nXb#&;5sLS*_PV#6W}?q&*H28I#d+H;JW|K zI^d>87!?i+eE8OQIAqmkzP#Jjl}m@uqR}g{^0`}32gdM{&#I+3mLwY9y6>+S&#hxQ z-Rb!CdJ3I%Huhw-3t1DSn>&t19VVBy*?I?i zn%ugbjrgLi3U0f3VoR(znZS&PQ;w2l+{Qpx#1dKs3X7HP_E7TX(RXLphqhKzwkyl0 z&g>mpqXip%tJuawn08W?l0tS^(+>Q(`cADB_LH3>+(>B1rf)2UXCC7;r_KAfn)Q&n z9zF}-@GnrC4Nuhlv(fFk(X1Y%G>&P`uLL%`L(J=z*3>oEF7#i%v4s`;2m<1^WqYC{iwI`oaJXg3H5Adb zb#Lm7O@RboHM4YNbA!}|ERuHEDAw1sRpSvSrmvVcO|xwA54>u=MPKW{zhaitz~ikw zz`V9UxCxcvCc@*1-O2}Iv>)ZW<~|xbwY7B&wh!Rm7Mf0Ph1qV*4ix5b0OPbZ;obD` zjx!tAB*Mw#Vm6MRJE6I7ua6BGDA2CDs3ntAmJKwA)-Gy2__#X1il2=xIz^`t6&d>(THW;Us8CG4qjO1t&JiOO+Td zF&AwUudo-StWp`6o6*O8Bt)>~rNp3(z*T3l6mHYu6S{UNjJo@xPvO>6_ffRSjM|U^ zmK=!B*iMgTn*MQ2*GB|p45yXcRZR<9lG+I#OA(SFidoFe*0@rPt&Fg9}c&dS<%q2QtS8rjnyslE#}}z-(o>2`c^tJSlG18K78X( z)X-^WtObu{+{sJcsNQRoEQ^(nDdinwSs~t%WSftV8)(osO_?3>8#8D;m;iN?Xb3F5 z$bgytxN*OPJIMBg396=AF`$0NX8HZM%Ht;D4zyI0uzriA7cDfR({M;*B!4vWs6h?K zMZ;4nbiT!=>HUbwk80c?D%_f*5bLO-VsoHT#xNtHb6o>$`mkm;TG%C}1~+P)gzIi{ ztvWPK!#qG54zT}}Y0Ow3<|Jb^Tf^3@Cu%1JAAFY=`lz7W347wC(7oaYb}y5+wP^z( zV=@z++(KjcMsuEJX}2kb!Oce6&}Ht3UEg(8#B8V?)hBS?!WdPHb_hAL=$HB{t!j>8 zlV^czAZRT$s)`PBsBnT-BK!uE7dT9`^8yzB_`WkdvSWA&ac=@rblppUV;YVnI!!if z0mC-4^klSC+mCS)(Lq7Z8j&5JaAVTwD0TPhu9n|<$3X%SmBdLH%FE`q`i2?Pc_m+G zb&jytsV%UapTpKCz1+8%=fxn8FoaC0+UlY_hCBH}p54=KZKmju%@tFD?5qe{9`5`` zi4mTJQzfH^bBuQ!h8b4fFP=kykP;3iwW*qSBcm@)6n(cMjoLQm!~*Y|gwY;_bKseQ z>FaHtLdP-qQ>q8_)uNb8<=;G?>b9t{S~O@I9HeHeT!|B;50y=4AioVq2s$Sv5Rg2p zDeeoQIxWS{(4RhLeAkf$zEggsu8I5Uqqu!K8GH#hku3-wF zX*b+?4sM*mbbPS+z3*{aL73XQAWWdDV?qgSG7Hbkd#kG|^sSAl<)#jj_2vnv4?1C+OXrtc`Tw zG~MpTM7*&`gy|N2T8Sd+)|}iEmm==-$_6bd$b-DL4GWK8=p^*Itn?^?>zCHcVKrLBmF05__%*SCb`1cut6rT3wb$ zFWcqP>_W6{k4#jlx5DXkPRIT(Y^@JE`dI0c^Ios9sd!ZIEr3lsOM%L zlO=0KVfEnC)75inC^k|Befz!6|CKpdi zXzG&mEFMoGnWS9r3AhO^okzeDUoVrLodaQOs>OeVD1y4#^#6PP1*QGlVvrTCoY{>I9pgd7p*>hwD`QsDQ5y*()~0 zP>rx1@8Y&?U?Hr8xK?Z_!?}SuS(#>wMc(b*Qj2brs~Tm}(`#TDnwaZU z$jCD9gB_$ga#=pRWle>8dXB8*?W|G!DJ0z+_Z#&_Zkuft8{NB7gORVHMN6+O@t8ME zO{TD2M{6~B)&Nuuo=r2xf=M#?7bC)YqUsq>Fdf>V&MTb%WocHG#^gd<4M+yzFsH<2 zYcn}YU;Rii2Z~iv4i~3WBNK09+dyQO70mGEJXZa6uu`%5`nFREQVfohEXi`!`e?ny zo1_SYRbOpMbnSgrOJ~pQ3qN@*=kxoa=B!3jQ!_`Gn>ZLa!OE(>c3kHw%S~ z<2r{~xvnzNl*?*AezLAJxtz~CA+2-x6mLIFub6gx#qm?eH@g=pk`4LpOlPvX(49}V zW-(Fd<|A7D?D*`>FX-+sR4{!pzNxV_xsaw^O?8rr&G9YMr%pXSslVfbX)`OQ&N_A~ zIv7kgr#HC048zQ^T^MsSXC|l4!d!hSKbUM~@SA6@NayY?%yBZ0zFOZn*z;09^XR$3 z=lj!V1cW>loY2u#=uR!juz9SaZ)iTY`@0K_k&>e>()k6w83lO$ z_=dWM+G4b)RZJbf&=NM;%KpAej*}T0oWg2-rhl#-O^_a(SJ%>*oHJ+E@yTgL!wMp! zkYp{RU>)O88O-6WfbofO+5|_jV;b3&_EblPV54-K-x##>bwKvHZK*kTG#{=m&Gzxe zp4`Fl$crX-)DYXTiw=hGQs@N`AC}eLvNt`&8(A|hbiCuG&P;bUspG@+0X~K$YD-dl zqbg~oF4Ku06Zv38x84bv!n+V0tvbofP6=Jfr3*TW*u}SeW+!3QC#KFw^<^lwEFRAs z;_Df1DUx1!9N+h-Cgt7RF>lCQU@MbQSoStQwyfUmEqA`g)Us$5Twbe=bQ$ znMD~6`^2t$jf79vB8O7$8JV&}hM7ON<1gG->|$i8Ndwu+BJ*Imz0@?^LN>g71TWJG9+ zZrR?P&6`2u&QhdDcV?kKKlyp8S_fSKqcUDM8{gtnrY6(>`#v79$#^{Fog=Nz;4|1k zRbeR8n_-YjI@Z#naKhe8{TPXg=Vod^GHKZq7FSZnd1yUl=8TsDj?JP3xfTm?3oq0c zs4i)@irRJdMmaT)m>;EPk%}7Z;m)Udqlvkn-^*Z_y>t*7&m2xkLk|a4Z}~3j*gmn- zc)WXOM&9@jzsR30d?_cMRGq|zW|zIp6nmFMeW@3jzi`!gAVV+*$O4O^igQI!#mIxY zBt>N~;g|`UyO4Pqo*YaVoDlT(;u!DWb!2;yr_^#*Jb*eOY_8y?M6c&U7&(sw}db&POHj zE&MCmrIfx^ER_3C6EsaIY^xF?ZvwzJbLun)(-2%)@dIxZPjr&ZAFGj;2 zMRj?3Ca11NHCf$ID<#}j6Fw}I%buYfNa5i^lY*uHqHT3`NMkTI^AvOroHZoY1g-Wx z9-@zLXQo&;vxe|cG{T0A&?E!wyvjud(2Z(w@7_e)s$t+Hbhbq zPm>}KLD_O^bRdWXC6+0I4Un{|`pm=hllWP*tVJ#6Xy?`Z{t+2@^Ilwl)W=LMN)m2n zWM*V!d}kz%ptB)}paeO**;_Z;pdw8U8ZDlaTkxXOeU3u`_dsA3j&uwgLWUAc?dkjG zCCwr_ybu;KU46IsThc&D4ype@Vo3dmyUicIY5wr7e&E>ya7XqB2t~-JpYDHWt@(Ig zquw>>@vrLJlj_5E@mDo?uIvYsHz}=QDA0kPCzH%J*M=?6mu@QiVb5noM^NSug783x~BW@7w03cgk%t@pDLAG`)+srvHI~}{tKUWCLfN+ug550 zRIv~+Hw9t_wDzg+mmWHS{fFVqapu2jmffxQdLXc6_!yvTN*N34ZU-9kn9OKqSe4m0 zIy*n;=D$F+@-=n4TU>nk0ZdN1Hj}hupPT>R>@@!RaDjlmPLi94bEvP$Wd6a6L0OEr=z_f_YA{C?G}QR6#`qNCkiyoc3{|Ikq`o^%~H zTAax=d!wIp3K0L#&6y*W?ZFFiN1b@W3wB5vpDS<`AO~EvpMgN9d+31|-D4{IQnYVlzR zoJfIUeXYz&m?)0WRKuOl7RUZt(^omkOV(Jp-e90|f_C_vpn!sHryS2_x-;QSj}K_ohz%(JJJ#~O9eZ0 zX3enGlIpdUW&a>Neoh(yI}ICwK8CYQ5P?!U);WhItiy9fM)V`W5EK&^gZCv&^kOkW zDsy^<~4-h_8T+@J~Wzi&YlVyebIOgN7 z^zDl@UaFPam~SB~5yjkPkyYACAq#g4Y|FyIfZ(AATX@>(Li$`n8XwvJ0$GnpFyz)% z3fCG6q7_#)1^7m#Lb|R+mY}Nt#||d_q1<{y-oNQ#cctZC5GB(MP;+pnbU_*XN8^b> znKG#%Avyf!i8f`)o6$aFs;kTzIbs&fILCz{UpwhYK`qJ>AuRQVnqOZUv;hS;Lwsq_ z+#v)oE@aI*Jy7~jDcjBL95hH*SPFgRcWPpq1M-KI6xWWD z&*;0n6X4KMIYlZa^3%2FmN{H)0JuZy3z|&js*E38BsVdObdYR3 zF%%3{F7m-cOANQn9UIsjO)3H2Cev*+Hx?`HIPs?%5=uZPM_nbKejdEpJq@Rl7Uk97 zu#v^fQ2HO_}+KTVSM6W6)tBJ{dL-a|(&|;4@)?6m@IcHpDMXRiZUr!0DkO`MCSeU$8 z$O>DJYww&S5mPVtBdJmdcT{T?0JP(d#bUP5tFgGEQIhk*ABM+}JBBx;mBRV#rWPmO zgdf9V*44?vt-n35o53Z{?Z?k3N3*+^!$=;c5(kD*La8=rWh<*KkT~_Vx9>@k zC)B2Q?3gU*)x&oOM;}<9T@Zu!k&svU1Mtqi<+R9EUjN`(Z-^eQ21)Gr%DJ8370h@+ zOV2GOkB#g=a*IP@&Ev0(PnGc=f`aJO15bPk2 z&>o!)hCFyp%~VQcC)Ap;&bzil*p|6vO0w{WIQx%#!eL;X&TOOW*vohCtgPI3GdM8-zIIC=ya?ww0J3V*5o`Rs2nJ%U54qW{q;Un_kVahO&*oX6_zYJ2vP!D z0n-)`v&NC7Epc3yuEphyED^|CkKH;WF zvS>aP%7XsEZlGGRs5lUn6=h?VQ~J|u4hwS7ZQz1qMO-tOV2vRDWR`=j(n)+K9yimY zV7Y%fMdV#&7>Gf!wUOL*4drVHVPJ`fzWD!$oaRKGqhtAn$Hd2cXE?k2$@L*%#@k$J z)>(f0;ouxEVUn-@uc`i7d9>5JvhF?6V8aP_J^VJV`B2Q86dnaod+_vayRt=#_ey# z@$8HzemX1XT$!?Q+aP@RQ4pTE%e9e+)6|GJx4CW`+oJern$=5*MdK)JL7q5&VPZkQ z(iUv8#jNb%ty|n1)IQ7^VgcBd?hexXkWwGm z0dTEX6D$ZsM!`U{muF^-69S>`l_cqwVoylN-tj5HHxWOUIIez5VG=ic3S?1N4yG#l zq(&r)5z>=q1^)dXNvX2?xX8^6R4hC|PJ9-t1nG>|rwB^QGdEuvug%krb*~A%{{7>T{+~rfCcNY1?M`{r9XmRRa1$ z9EUFhnEdB6o|{WY3~mDIo$0=^I8mM*W~^WROUDf&slxnn_nMC34nC46y0~h$clWwH z3LXSM=57wYKTdq{%_3{od)-*3=Ouvl>^U{GFtIpK`~^ZX##ZNJeL7iom~j<_?wcGX z!mgR6(B*)Os{3c^QfDuyf0j5@c;n)Trk&;VD4AkBX?w1n%a`t>hK{1(qB%?4+tCa!NlVt5W_EbT@je+afdRUtrEE9;EZO)1CTWY= z#EWa*#fr5%LbIi?vo~1#>yzFV?}0Jf5!Jh@rYq?phJjj7UK**ZR+oxdHOZCPnWe=T z1(>A6(W~cpTjRxv=@H5Uin1#bN-P1b-D|2-nXn6GS2X6C0}9nNox9d8V6QYLSVz|lhI zfiF2-y_r*IOe45J0Vf@m6vy+2#8;33uVhz~u~W&~(DJoOhS=^(u*}K^cl76`#hEqX zVpd0ijEsPKKa)#w*e`FsfHgSXei9?7Pf4qWVL@9E&G48i#AM9GU5bNz%tFbQj^jJ) zE`8(Hi}FS`wtA1&2mRG2R_5%<_TFHJAJ()z#i2;-yXQbR>k&xz&8uGCP`QGN7SS~# zSnjBn$H3K!1VcNNGc%H>SCiMXE=h~k`F{HzR-!_ZoANbh?3N2Xsm>pmBEIof z`cgTOY`%tlT2ZA%u)}qTJ&-JxXIra-z18icIKsa(*VKb+*U2^;1}PPRu4%Rjd<7=- zoZ6$cO3%sjGO~eeHNWCQQyRZ^T=KXT^C^g}+#cVx!WE&C7?z)>xu$%kVsS@rM(+ml z4o780+py{+<+LNu!9WEfn<-(|nzmpfea;$Qd6eXdwo}wd_vj{$u&)QO%p`bydawIn zx6kuZ@hNY8I!?A$fIE>VfJ*c5`$HqwgR;%yyiIhfWGm93!N_;t*!z(wE z3wpV&aXtvWJL*<7e#!<6?)smR#O9wbfm3Tc3#uBX0f%{-hRk73&eEL4RjTND0j58Z z(1J0mH>;E$+<>TVweOluWQNUw*_eevEH@nvYyKYF_#i?$;odeEa?iJ>kPmze0->~` zWcSCwOB>HfJeDpQKxfm;G!3d=prLcF3+7jhFxAbP{SR>5FqDgF$tv6bMSeu$Q{l+Y!NmG_^}mQyK?6kjOt93SLk>5+DjvUB~`PGpiAzUkx#jI0FC?Wa5O zU|PBt%p&q+^$Rdp7%L3;lI~Wzn;4PK+Soe=dS^ccLrcH;rc`Gpe0J%Bd#x>MLkhNqLkC~=-ul@>*|SbP^+ zxt5ScTDn0AJk*-yh@b~U8u|^Co$@*JxTxsk>2wUB zkdO4XS3N2RMk?to30M8-Z)w*@QPtd(E6P&RYuoBp{_N1|9RqF_B6iT89^>xl@AP&l zoK%fnZ}YgfSqD`gjC7VFx7EPpx#)=2zt4qKMF{F3TsKLGTf6gVc`dq+IB<4)XtvuDOSV&^|$y4s>)aH}M(`^wu>ekeNl}w_v5fg9D ztR2NrQ7oct8l{^Qz$^APmKk%XyskEZXIPY*YpxP1wZPz%84}TN@+f1c==u%HBNUf0Vu ze0Om7dn<{|o29`V7%n`)99}Bi%Y$&$O)1tnpUm1u<=jb7>T=+hAMP28{O%i-e*U8C zY-|h+3%0HNY!dk+8Sod&g^De8G|oNwhCSFu!BU`* zN|4;rElpaC45gv>QaVKhUm~oT3 zph`8zErTPmKBjD@vJoks6S}?B>$9H#YNV>G%5f6e)FG8LAb*MSI!35P+CE=-6;ojf z$K9((ttG#_=8EQSW>Dl^ElB-J24xadDOjVaoKUDWO({GpNlcE-et*Et?oDdQ z-M(|Z0Xre)yP2s~-gEXpSLo5rCC{5S=_=NJ)t+8f*K)3}(igtt{zZt$U5t6K+QBKc zB#vIeu9RzSld~h$+k2vuk&{G?XV99tkZ@C7(Nhw=i(E6Ba(lVUt1~OJD2f|}3(XaR zYD6YpQn{t2i?vve*rKWCG3BbsQA8GCuuGW9Du)TC{!w1hdX(Gn&wTY58mPtGnkdn>`iL_4U=;}@9FR56= zz5I^(qa7Y(f4uSN@my5T@3y)97wd&w!1Bp=AUs@$4Dd=jNkgI$yG^2v$&Qd~ItYnE zoX}D?g9}iX)8^#C*cf(`w=D(+IwyqH*{JGf%v zVMRnZuZA&5JXG0og>^u+9y87sr79q0s^||?-9$k--%9~xb}s{??3oi6!((ZyORld) zL+T(~Xua@Gn@7$0-hv7P_u3xs7AYTIZkpXlsx05KTEyh z78P4jx7ry3gs5{SkzF^KR<|P}3Ab^dAynAeF*yrz#v$%`B*{%B8?GRw zpz)<1;H4eLxPM99(vq{B&W^I3P=y@Xt#4{#{yyrM1=!yP%BNNXVbEKuEXchi&V&^_?Nn=-f#v` zjoH}Gjvuy|p?82;@E1{z6mQ}*{1B;t6M*U-#B7v|7b1*Kp{*H}%2l#dco7I3&{l_R zR<)?{ocz4HId{l^)(a>0g?^`gvH+}^V?Itqn8`^}QG8*GXBWQK4ipLoiU2auG0S5Q zcIBI`Ym*(0!h79yPZ2A85>Z=BH1-k?40T6zv)Ck#_8stw6?zZFO6|yn#TK|UHW&_T zWUN>Tt8!KXm`A<-J)lle0QY!bxhhd4_UX6C_jo(fI@ugG9c3iNGl~?`NEc|c-OejB z%HLKgP;r4Q_0!9l6n`f_v}N0wR!Rm<8{-wVe|;Yix`TZ{2_Fj?r{^2AkUogFM=P#) zDU2?*4VGfKxy>b0aL=Xqs7U=ADfV{IYg4xr_!Y{5;wAH%Lb*p;)o9vPU;Ms4t53Xl zM&~C{#25dqsi@)j2bV#AA^<&qOI=KDNGMspxpM(PK(k5SL4hLBiq@5(pc7szR0&>c zwr;&kGA5W&TW7;dy+d0w;l4RW1e74PmN5cw(W(O60I(zslP`)*Nv>mEGorcs%$_St!GG`u zOT(HupmbKa_pOEX9{78;6bjJ`FOXHZ7qlvT@R-Av=46d^-(*V4Gjf<)c;Z;f>d=LI zQEnyC-j04EvVo|&#yRp?ie7S|ebAJ6UOfX%aTjv>)n`TX2g3jwF?ra zrkOHRoU}OVk|=g4u+YB@ylaJb)D=GmozQRB&?h6*GsS7#C=N0EQbdwgUftUa_Mf(Q zxWbEMHrbDWI37-ayz(^MWN*;!r%fx^9D7-DsaQ~q<1PhqK+xGwCEU#jg5{{@~&`8L)t>ZXgTbn-a>)-qw~46;CjN0 z6@)(8Z=w_&nRl8p$_j#}O`UdE_Epvf6!@Ke?!SI?PrnBnJ%jU9dV(hoGDIpmq$QWy zja{R2)h9i-Ft$0wZl$*sjIqZd=E-T?GtzhKW@0Jnae*CkZ^S~)6&+g_)8ghvUL--h zQjX;e%x2J&QXdDV>9Bq&?&AKwjppGG+`LiT>u!x8J6t;)d`gfb11h z2O{kcbyg=qnZ7#N{6g4~SE0MN*v;GJMmFf}vQ6}p4C+B4qo_(ZC!Xkm$JuHMh^|BT!>gc2FC{pgO#!x$jW@iauD!iL0}c1OsJrkv0lnCT1z)-QGsWT-C1Ut zm>BO8hQ4YWUh~zW#LHD6< zz5C{t{>x@o%5pQ76ZZirR`^=h*a0k&(x*hJMpV5{wHCko_S?JPdiQ*DYL>JimU;*% z)CTC=$t9xj+ISb=+>}g9YE80eRQLeCpVBhGQ9BH|%9QMELzQ=^aN9Nxjc?s)Y3`~| z@w!>A4aeAeK8rtOV0wjs(yWOIinyE!h+K?YJ6gV6QUwSqfaUazoYTXMBlo4q z*&wd^pXWdGEN@~<3$iw}!^91gSRoB8=T(>)ug$3)%UaWf22}|PlRt$O%JT`8r(?;P z4$QrjU=zozRMA8=?GP-d*Pf%C+e7>(PD`peRSIimjMF zfZ}&UGPe zw&g=v=VM9>Oo?+JFOx?pZ;ud|7$`E8(zE0mkIa(aB$v0H!@nr?Ij zGw)A5k(PUphEIw~;BmuM$G>dOh5YiQ$8iPMZGYgJ*)NU^ZNpSf9RA8{S)XIA0EcxFV4J+TklbeIr+omDSK+Q!SN;R-FvyCd)WIU!eCB}-jI z=3h-Gr{IE~_F^G4_rR=dppWk25WedC+2Tckj5T{h#Hx8Q>~7SIgYfNgI08X?DjvuB#dK?w0FYrEHaI7&c(S@X7u+W`8~kM< zyq(ocJ`Xl8Yp{3#VTqN^0;%ou+US&&Dj8IbjosBd=;*HOU9rbH0?I}EVEV6xg=f&brk_U=C}4A5IR-@}5H?AQwk|f)WWM+0IvHyHqJB zjL6}{k5nsKqf2iynt)$tZW-547gK+@O;*3u>_{QcwyB;*Y3T_Al$+iW+0e;JN%Ilue4WyD4EB%ps>rt8?5>4qA=zX0zSw(&!$`v>-l=={A+0vs*{+^n;E*=wk8de8rIna)h%iA0fQcA+wM}*}X-;PuO`JWApxvlTO zU+=aJn;(4l9dmWs3Z+3e_FQN8TD6(sxk;2n9p5HJgaO6O=R%zAg#ZKVjzE*QUXXW& z{-FADzZnE6V|gL68JAY{!nNt@U!{q$^OhbZ-5LFxbC+pb;wP24p%t-2)eNddSLo0p zt)1O&Vtm4GYfM6o_HYG&m5(zF12%# zZ)??iN1$G#M`nOC6lv#Ol4;K&$s#xo?4FDmLkiw+?J*W{Ag!wqwnCI zk*c(-lH|+B5y>xn!=dDl1{Lk0`$VSfT~EGl zk(sx=&7<;L5)L=FD3v|w>Hr7#|tKiAD_Ma@yBV|;8 z&0w9s{;Feo@AiZ=TKK4OB+ywLcUmXaUKq4{pG^2wuGx$Ml?pewE8=rHuS~})7BJZ9 z_4`}vtB=zmU+CCnTe1&mXRn7t3I=kJ6Fd5kZGsfkyM~#D^Zz~sd0nV3dXeVX>}3{p z(dV}ML?jao=%9M3XDI!C_g|K#|MFF5Cw{c6ZRDZo6x{Frmx;GK?{3Wbv-`iBU9$^( z=JeEuKwwLMnQgU*0l<0(4<2qj8K`Q;+IoK#n)Dhugm4N&IHy+2*c-M!C)tEF_%qMJ zu74K1hr56NG7~ESefGRKxX33fbohbPMZtz&k_)EF2f|vt60ja|>@4a-mG#Y@Z0@$6 z?OnGuoVM%sotA#b2M0&3Bj#?8H(I()M`v#?>4!2hJ5Bmg=}1W7&*}VuLC>7&E*O&#TV#?+S3FE|P4J?My;ejb zoFb%Ir$d|04k>Z}UfHv* z5mDo++J4p4$9qj}TdFYdPyt@&qzWQ?Oiwkq@wmE70f|jrV{i@Fy`J%_1b<=2M8wR> zMb6}ngaK3R8c+l&w54y0Ry0WWh z$6-C>hH4fWfSH+Xiw#TysDZr3-4ELmv$>5|i z-4VAjkEQ8-Y^EE~fc`A!ux?opyePL@c=dXlJCAz<#9es~tmY zhsFSCwomtgiDnLeQ3lAd?vEUr3o7nE5};^|raKJeFARV1c4=S`SdBS8)xzSSGVSKp zyACO3$jg+lCdiW;O@z#cKbf;mRX9egJO#WX?Q5iSaz*uY?!cPQg65kIh3 zhgR=5=b%5WQr5F>%9e@G1iA1}sstwIpQV;zKq^*BV!w)MC!%yxjBOXg^Ge&b69(Uf z5v2q@ogN#+PEHh2m^L?#@yV|)Ga&2{CEf=2CtT_;v@@{Bm4*|i?8*y#oQmR3iaj9Yp#)Gg7T zavWbPA>r$0dj_0TXlQ+J3YN-f=7Ig%ynm|yJlUiz+(ff zNhEW@_>(AH>R|^Gomhy^ve~F;Ddm6+A5wQM$yNS+-2nQeE51J43PLbqzC@nE4^EG!SLZBu)jOIj>$d1YGI?gU6UT z#bXL4Ji|g5tPZ*11qRD8L4VW%=Uk$3#LY{gulqAf&WD4e*OpXS^-a!DgvC`yODsiG zV8ASHr2d`awD!qRnSlZz0n=qH8)elxOlfIbM;$T=&UqkDEbZaa$TTyufR`fKx zvKSu>TI82ZWKb9ij49UUd4nDr5whTRDG}=0DUmsz1&~kvx&-s_yUgl<=r=NK<-`MI zT!dc5v?y+BBl!j)4jPG6_5Rl=vmw;-&Q#2kTZ?IL>P;I%%?{%4Ryi7JY!e7j2#f59 z1#Fe+$BZjWC5;O?>Bz`ZD`@cb{xVZk;l61=EhR>U1e;lP1;kziGHT_p>vbUgy@cR# zlKK6W9>-Cs^PSKqE94GCW*PFl5t^MeUar$xp{6~?fIkU|>KsbjIDdQKN|0T(raJ^ag zX!a&=yYpT)(>E#oD;+k-GbgfP${oSe^RvPJmTbva`0P`wU&F zmICoG@^Sqkws~-TmuA6r+CzTr}hPpRA)4dDCC#8Rs|%m+NX zk_$d1N$tuSE`{PLUFbk}5xwqqtxwI`YwKftqU^%LErqf&9_nVVjsSQFMj^IQ6vA(X zR2=WC_s-cR3|3kwyY^<^#*?*;-SySI@PmP*bic(W2Z6A?zVl^gA!;nC1}@P|ok^As zg)F{g)}U?uFeXQjLQ-PpNs^FAw>Egd1O`vG|8oB}j`4Iz$*O<7zYm3b{13}e9@6vE zl;ZZF^~>05v`KD?A(h*0<}oMVG97}qyFkKuAa)azopc9-{j*o6pV58vIh|jhcJ@!t z@AEjs?HBR4JMlMOl&E_z!+~-MDX{I?j?7(L-k2{hxeUcBI`x<6#TFYxlL7F_YvQCm z>Up-I84sd~R28I7a!PCG*t%1%BK@VFDGT_|EmUe!J@zRTbC5D2mf{X53&q+{{1)U| zPd3;Z;%7VB|68l^RP{$sF-GWYDiS;%tbdQ2pWtq>C~KwzSX}+BZXY3aU3p43O^1zf zAu`K0mA3)K3q@l7QykUo7K}N!`=tZ3b2GD@zfRk$-p*=&S(odYhG=7gW#g-XtV3*I zN!DZ<`Vwe#T;KWa-P>G?yvh`x^@%l(3Ye!uhAOhR*yqAVggB~*h;hE+>+FbfB^tn5 zKRE(<+UC;+O`WegR&$QUpzWvS;ZAQBHkN%witYX8pRy}-ri9=X2PNI*T%IWT&*kn* zaj&Zbc(|jEvUABT9L%@trMS>1UmDFEYjdle0v6rZxo&S-MT^>J%GtaY#V+rPQAU-o-S%&pb}JnsIs zY|)o}fli+D2^9uGY@`cpPK)B2W@4G2JCoJD?j{WQ>~yUipuRRPAC^_9rhSK+$w zLBz<6nkJ9YBF_?R-ld?ui5>Z^S{SASNUckR)}{d)DVOa%`h}P}JSCx#vGD0J7^Nc~ zM29wyH1dosLT5vv3klqwl637K8(8{o?5-&-x zmG#C>Cl#h%Bd1ep(+hf~+|AY`%-9cn*4)cMD>k|eL%$qAQAuB_Igd`rFCQLIA3?6q zbi>7iRxx&GPOUYVBm~nMf7iV;3X5RT zq@Y&Xgo1ABV}Q@}cw^h*@t#DoX{RF4qtiQoqu>KKW6aHywc+I0eE*vBFHVjMe#?@^ z!NZv+!Rg;5wl`t5gP=_R`N@I#&KE)xO{+rOr0X-ofG$!~Wdgzo{(f|}|0b+E7(ugB zt(mw@nes2Opo{C!aJfPHXK+ir&OupPJli?0@7!~bTr^*Kge zISht5QJ25q1>@J@59hiYp<<2ppZ{uYm6w=0%(S&{{%b_iWiabMe(f;dg7okt!%$#T zmt8Durd`Zj8)1Rdv-4Mmxzhh((~)h+PNes4&1sR$FMHBANhe#eMW6&J=Uskn zDGr`(vAVY@zkO2e$o%)8w|92ie(vw}+J9bc|9QLqGx!Z9(eH-awV`zAWnX{y&A&hR z9n+rjYSp=%INW;r1$V1dph5^2ov&R`9T>PNcD4NIdS^O*JD48*G#Vcc-f&(=6Hjod z(h(;edHEF$t|K%BnDPzcT;0V;gt@#vPtnf$0jeJECC^bNkt!Y%nbG5_#$7Z{_NmM% z%3}RE#0R5gs>q|4ni^i4v>=D9xGKb?o1}~VpVTX_Mw;*Vqt>LmXa_t&1|A#(#3Ct= zB9ZSwm+K<_z*2B1W6VpIwwFBnx)_53j|{y5CDa3hr^c-gI-(z!^Q zbi2b_iubs&v}O*H4J%&#tFHg+A&2c(U7n;c|AKUdHI+H_JF%!# zwJe{}$@yC=D>ytqk>C=?_F$2`w(-?UWGAmmEJfcEB3zfjTWWdlGV6zv#yEc``*Jd{ z2rXK;*H>;GvZZ0$=+Vq2;Nl5T{<@-nQ~5m31%nbD&itK7P9V(@hbU(882a-c1hb&h0h?MN-Ua!keac+wt2!pP2k$a z;x5YtKuh*o0>aE>(5l#wSN?Xk7^k&lDP~$!-Hcb2wgVg}YeDhys~9=Km{f2depfBA zIJPJzwd+{3I#{vfuMTD2k$p*xui@XM(}!xj)Ze?|kmV_grVr%$zx8W;WhWepvmp zC#(6tXk2xp!S+UwVYI}&riQVniec=Gl~Ti4+ubml<2r1Ok0Vu#H?T3D!uEI>Q?Pjt z!wAQr7=Z=Y0M}z5d8RWcvqfSqKf%djNQ4Sc3a>427z@;cB-j33M*HIeqIX1&f z7>zZ18Adlu!Bi|n+GaeAjqsFR{u8EgeIu&3VRU9k9uCHPF$&M(0Bn%X-QYNs@`vsC z9c)4z#%)Q1k}v}YVryK5a>1P#g8Q*09>ZX~gkgR%Rr~55a9~~HZde`rqf{Jb$4-=? zm|>SM#)iZjZMWN&+aAIC?Ee^R;W?~_KiL}n=>OUj)F&f`+O|h&aRS!F47+?7%2)T@=L8`=b=Cmfmdzf_2)K)SN4U11Q)9b}`l zxB#U=%TUI8BeuYucKKnHq505`e?S?+zfdM&wf=^&0DItEd;w+dB>9;`%qT&S>)PAV-Aw# z>YqTSl*}rOz$!!Z1*5Qtcoy4hZm!86UrSNz(o83<-`t}El$M* zyx;a6l&<~D-k&)}UvLS^5Il>r3O+^Y$=@(Z)_>AieSut*6K+6hz-xB=J<1cT^*G%V z6H)3}D0g%iJK!&vf-T4Mu)>i@CmK7@gI7^*aK;3A@-f%YpG@X3nND~OrKJfI^&}dP zy@{8g48d!5tQa49+316EK@(-t9!9D61InC3=yeZi=3K zW6(jo09iT47L*nbk` zI-$9`$9nn6$O)!nOWcBTM|-e0eq+axdHMunPX*$M;cs>;=30Ym~8U?A6C5p)}|wl!h+Hwz$vsB+BtYKKfrSlt^X(PO*K& z_9CWJ-nm5g#B7ukzKC*X-=i$6cBT4(G6^N#gmQs*urvOF379-vH!KH}h*!;~|E1!~ z6v&A$+B)Xwo*0cX=IgL89>qS`aIU^!7Rqs}a1Hk|O$eFLl?j-W?GHNc+EzUz3(+!w~FJXUd$U)*bOvC#z6+gxXs9R+7I&jezMpK{EYdwT66LtnDEm*K zbbXD*dMLY~%#FDylhVJ9jGXW&w!&Js>4rq2boq3Y10F+JHXmR*_PJd@pl(B%JFlSh zNbMzh_K!lju`M_R&!W^zTB^@G568>;-$zC!QjbkJdDJJ z*a5fWBs_`(FlvQ<&EAaNh!0{f{2gU-rro8_Ux*`#x1luTXH4MwM)FGie$K&K#Q#AV ziqBBS?ix10=v8{C(oo{rD0jLHL-1bPUD%TNHI(z6#>se>k1?6JzNP0< zAM8v#&yIJY?El73M(&`+-TEVRAUcR=Vl>``a>u(-hU6>`N5?&S3_aM4cmv9q??k!K z8yJFrV{Ht%SNCW*HYe_fEzm!ij8vS1b#W!u$9qsF;SQ{auVVs!fYS9w7!ln=E2geYU16H6+ zk^?9gxQr>7_>jKSJe)*)2g(V*!q(Vso9^PiC_R>sEwC5^a|-1_wj2F2c|Ip2WAqEk z*wlPj4?!GC+#AC&58L1p48`r3fd_1>J)-BxV3Z-8kJ7M}C`0)+%6UG=rugS0^#5Qo zA=~vbnTm2^3#FycpfvC^l)3S<9oK$T4@Fy)h7ZJ+ILUS{%6T{1p0bVEp(p2Tlp#H^ z!>=C*zuN^}9@Fn}FUo9x3}tzKjBc#)xW40?F^_mR_Q$X%SW=jSG6dVP9Uj7TJdZLL zqIc>W%|+>n&3-b{RWI5eMVX~1QO5jdlsS;}q@J94C_Q4LG~fx8J8$@u?vXf@cr?o7 zEk>DJD=`ueVi!D*Q_$aLm!8Fbl(D@V<8Uv=;5plnr}Z*Sw;hbN*`JMa;;Gmc@4)u> zILZayMF++`qgTan>_EH-89Kl5s9mrZrRz@X9sFL_T@;LR!W5JXjK@~E0AukUOvcwy zX8CWnA!T|wCSV5TUW~?a9Ex9}L)L%7b37y{7>SAaCPv`zC=F`!ygo1;9mKOx8n6L6ws=AJOg5$vd$0{|L%($GAu@937f>cm*dE=|F4%~8xE)W! zF2r-NIqtIeAHl}NpP)4SBFY?6d-a79P|iOJWvFh$p7{J;`aglpWeTJR+P%nHR=k2y zCe^lm`b2M`jQwvY7i#&EzVigkBp!=$!7V6v{w6lV%QzA1?AP_Dquk&sY=MvMr~gCA zyhcF-`~szGzDMcGhA-<2cfzK`<52Ff$S%JPyAeNv1Mnmc!pH;qxpFhgg`UI_cm!qa zn;+EX`^gNWU^mJgRDDH%a3tdx;u4hdH|_W;N`r^Ls!u!vM-ktSZSgqD&|F1naHH4s zTB^^2#_k}>7@xAstGuD_tSQO` zx?pw8z`i&H7vgH1kM-Wv=f4wW52)~~2N2(lvOG^=1U7tI4?!xr zi07cJ=g(2j)9|Q%%VlC5@j{g6#ZDZFXRsf3euwu2&U=Uck0qnt)fbG%HN>+qAFIEo z8&rgu#5*wxf5HT8`M&;hhD39e1I0Wf{s)d~L_gKh_5fvE7JrCnvEpMtmZF#p25cd*W-@9fLmA=j(+I z;+s*9TaVHsCol#5%|Fv)Hx%Wk6=&YW0;POP6c|{Z)A~)r(iSoz&CLU);O)l%7r6|_hBK{`%*Vx0Y(!) zk0bCD4#vcG_$bOM>gT_zTXd`Kizp}h4JTs8Z+e|SfO5cb?1~Mp=^h)1or&jT zHa?BrvD)vtejk*00mfrFCgRt2>~Hpmo=p8wPP`o3;wvZzoW*7s@~0k>Sd^a1Lm6WW zrD6N+@~b$AIOZ?CztnaMrc(YYN`tQ<4fY#}f9tVXigE}4!66uFs6bEnFpYRW%ANd% zy|A;=mS7L!GEBfrn2wGh6=;|f<;FH+PyE0xZ(Kz&$NXHJj4Y=m=)%J|1>>r!z@)kh zbBHhDBph8$1=js8oIw0D%A6QpT^aJ+n2U0Udodp`VG)k6p>N#4x{Ux-fPGL)fcQeU@trtNl=uKdzAtbx98Hp+R{qs)afwyhhgz+4!Q zvU(munLBTyEZ;vHD*fO8GaISE&**#%v>ZE8;WsS6_{J*m#j+XY&M%-euxqdiyna{V zIO5YN4e1u5jOln6$`Jj8^86UuL~BurW2N+^wjex`)jw-Lo^g`C-yHR zQ%`oZ)_2kzrDAVvgp08sns)pV${n7^Cis_aNVp2TtfEoQH`b2xP?qIdl;_C-lx6$_ z#>x7Rap(#YFr6LCu?@b7GFiSunRMZ8^ohr#Os46!t8I6q4BZ#l9GkXPf$#qWY)zbv zDd2pvRN#GnE6UKkgz5MP$`JKzug7*i7Rr8{ zAHIh&WEmawq>*J#+FPq&c=l=#HuvUT!y!I0kSpPCsgDGf;x!4X%umRqU zy>SQ1*quWel9q|Op_5Rac&ky?{fj6Kte2!GXIE@YJRGImi87Z~qAc4(Nq$}NJG){~ zvc7N=tV4weloKRjUCcna^HC@bEJnGbMJOlUj&j^dl-d3*%4%tmqK7I0`w|ym4DRxi zkxB6>${jZ9q`N8;<=LH&fk!9Gh2BJIz$KJ1ZO~Z{(Rh^OA4NItQz$ zx({VeeTp(v_0x2DcWfr>e|B`9<2C6o()h%K;6Pi5SMt+9u!|69qlq+l<~^7sg)VuN1VXq4HTi85yS7>Xv! zBzh9%UGM=;#Gh~s4(qMmhS|iwp^W|TblsEdFpcXQACi#^H|nGBcn~HLFGP93JdLBV zbzjyidT|Q=goANpKYfRrQ5tjv```~K=S|Ac?+iD}9NCQ_cme&A`I`)5VT5GrNfL`P zDGO1CVjG6zF`SE+Q68ZM{q-aEPLvZri87R@QC_bh1N0oa2}crdK_6a3=|Sf}`~AOQ zpkCMap*&(gvke`jC(~HlX;_>6Gf^&7iZUcSP+lq@;7n{dSU;E+pp@T_vK&7_X?U$6 zI*u5^`j>CFYzkx!EJT^Lo3TCaMR_2dL)yKA!Um{5(Podl1C-q)t{uw`$ z#!)yP``J6Ek}o95(8$K8fRSzQo1=@2mc-IiGLf9@mu{EskjD6pvUf=fNX@C+*e-8E zyoUT&=zoQO=$XJqXBbsU4eSg3P5D>E+ei~{8d!g=@|Wv9tElrr-5a4GRU z5?84df?L??@2+zl}`gZ4>c+DplU(@mfw9&ne>rQaqC7_B&N zA&$YjNz>TBoAjg9BaR`-=A({myjIwFdK|QONcfDMe^COq&7^TuT#gOR#eIXFw-N23 zmdttChLe{k#~+lJkv|bQE&mnRK2tNim9l&iYuk98I37#zCc91uamCiv{4q0legCTd zjqH4h^d~!S!KbP57-<%9G1kIT`~;sQt+P+Yd)fGm#CkP0lH`@d^ER+$YxJ)~^1&SQ zJl3`%@$T71BtgY%OUu=`yiAW@M8Gt88hM zmvVd22bdiI<>kpK6S~?32wxr=6c+`wMknVBb6p zvyYRy>+Sq+ z{87?mBb4?@J5#SHPSu~Y+&z~_uEY3Y+`vS%T}9wb$h?WYuNt__D8;0 zjj<>j3n%b5lOoD)A^#NLSVk2B4;8ABipfWi-jmvFN67EdS>p+`NKw>#l=4nEoA@sB z7qABLH{>g}8Fv0A+urQ>(avwcho~>_SfeJvYXnN3Xwj_5o5Sm3$97K7&3E zsMzAkze>>AE*pTq6Ms%U`96xYD;_8A$-cFAT)|Z`_1Tw&TSy%%)_({=3I|+6*+yuL z_oy5~c?(h-%5qS)(WDma3w#_&0b8Et`oEXi{|;$8B~NkOe$smT_zRSWQhrRnaVoYS z?94@6WS2jPZad$Wg9nlCK-y!M-Amo>_DRoE_J)0qPs!gd`$%KSd+}{j45<-uKay}y3{wwXAXw2kB-&0_x`(opgW=ThfG z^0I9pUV+c!&3L!W|2qg~+ZF2JBg7Tk!^Cw6R+6@o4<|iFlI<*(>uliPCpfOJee7tw zm-Hxm29koPI~CLIV;^JRo#ele^)Fi%K`3bl`AK+^^fmeM_6f_#KSzoq$yQHeEMk8j z(h|F#6nE#?OyU9Lo0FeF`jGtnlpQ7=A%6>HvUTXnKVOiZBz-`VEu2dKu`4XqMS*|k zQ}zI<3Q?>%s(-NmB2jx%0qJ8(YmwRp>hc2TEV4OCv&nZLjVFJOx{)N=Mri{7-c6Yt zQVomkV`ayS#Epm#;das+q!JRFKk%QifFw#C~XkZ^-y2L&^AIt#{lOIc}P5Cb3 zGvr^#fut#c0R{hDz>?H;u#BMN%H+b4Z2ca{@;&r^zQ#CfmKX z4ana|zAx!7yG-_fO#T3AZKbj~94|u`*bZv~zvrh>=^*i|*aTgqm&mWfaFT3SNC}k5 zR-06Xll3M|Cv73MBW+^;4E7C{O7=Dh7gHX@{yuX2RMMBEss#5?xDFpAmhC4}C}mAa zACZ5EeMOi`T!-{M`HHOd9Equ)e)P_2S(1SmRnq!l5AEV)!FPn>ho%;T@w=%&DL3wRq_hwn(0{`rxv=4 zeMzZP49BEEt|F6Mkx8kP^Zt{s*xjij)43v(dc7#MlQ-GS%gQj<9}6~L$=YJp%q};R z$NX-t7#nS>af{5Y<08!3QBCpHmDVXidDR7xLJKLHcPp(_m zd3=&8%b3_fmEAe%1y#0q%3Njkn0l+3JMFS*I$M{8=fo-VQf{!hKR4O@KCgy3H}5O+ z4cC72SV^k6bb9}?s`+jiDvS0MDf8>%wPqb}2Xo-+ z#${gbIaT&h$%?9G%KXD+k1pUp74|X5Eq0hk7U!6oZhOIeeMuv8_L2!@QA?*O^V?;! z>SawG-!*k=YNx3q`!P~6%O;!m-QiRP=HGWjnQD0(^Yc5~mt`#9rpyT|hnjD$jCAC= zrn`%{{%n`mN0Z6<<`w363LHhwLYE`LS9W3LyeefY*P20QnHf>ma>IMd{PS*~`OZC) z%evirLY4L0vQwGy_ve~DN~6kF-+xw>nOh&KVJ0k&F_U);Y*=x+wh_LzMuacTbnb0d zwtB~_s;v0&;Z-7|ON(X|dFB*F8}a!C?xI-^XHlLbzPO;oQR4A9raQe3XR*^;V&*>e zR$1n*#zE%HXIgaZ=P517qpM3Cv_0>C>+tCwFKsuEKI@Nk&vwg=IdbMX=DWO}c!!a} z{Fv^@^m;wsG)JGD9ItD(!(*!FB0}TyTsfurQ=PiZ=brC!bc`q{jfyu1m-TG&uf2L~ z&BC%4!S)_*z*RBkQeJU{*IAVB@>Skb+djfq;x(6-W!BFaH?{wWtYK4$i*;Knj-|x$ zPeaU?%lcFwDwhc~xK5=Dn;oBf#yt6)uUckS)`%?g#s74(b8U}}wR5*#&rSQFiFxr@ ztX;07MrOtb&90a9)4BD>o0|JS=vfhrw)c-eo@nP*9q(-C4qq?(<9NJXmhfSUoy-3) z$nSW|t@3d72z9TZi7nv53r|X*IKZ>@S ze&nN6I~RFku({~@4rQmGe?O=*^H$odpMLgvd=7U}iHAw(U@jIqOB`-rV8;4Ni;F$p z5?7x2^a~F2)C-Yik$YwZm4)oPR>h1v(AJ!HV5>R!U>EbV)~FURR~ z=Q>K}6|*Gs%sz)!mYqFxUYQ|BQp;X`^ROzr_;&N4vX<{YSjD_@;z{$+$KmFv3?qq*$dc5}k{ zu<5Ds-BN02x#a%hhWYZ{d2xM9^L=sIo-{}8kt4F>`gvV}=VDxjv&5C=NKQ=b9G8?B zm)zNroSc^2DJHR7N+K2GvRr!2{!=eCj;hIB97#!ODP`ZE|GsKj!Vk5SIs8%!bMcQ& z%^8T(d~dWuTit|C{UO8k%6|3{VJ+6IlE?(({da@|fJQ_wNi zJoMvpoxCni=ym6LDDqLtQ>?b(=n;5gay3da`}7^8AN^d@lk3iNn$<45>+tgQI0CQH zDdw!pd(G6Ji|kkE)}IHMDZeCGSJtbBX3{T5HUWslka>g(pB-!7P8*IJlMt_3&j%R|)1Yk9QG;m$Aec+G~tw>OvkzRZmIqhnQH zNokJx)E}`b%If1(O{^_dRf2hHay9d-KRVP244>|VvW9>5P-e#88_jS2ZrxZqJFxS5 z7j3Mrwmg4C)d(sNt)iY)R(LfvwAKIUAUV#-6J|DDY~5E~gxF<7AF9vH$N&)Zr+H(@`>`v@pkNTSIj#53i|mmGx^aHLU!T+NzPV^6IMNHF-ig zb8}rj>xtINVLe+x-tUm+EIZnyL1Em|?Px9EF$jN(($bM=>u;w?{r_(i}WKc|3EOz=F{|QREDK z192}Dmb!{ctX5I<@|rLeTI-){FKnh(v}RV6I(V+-7ttJFET2Mr332~UFBgcijxY>#A5+4raTDM?Eca7P)3Rz1Gg=sz=ID=M8tsQ@3M8UX%=Vsk5MvX1K1; zn2I%JH49a@S>J}LO;+bH)zR7zrt&+E@aDOS9PxQ>uE;D29QDt|c}?j%&$ha?R4oIu z@SnZi9T9V_L~gWM<*}kaBIX9VOW(_l1NlUA)w5&20w?{&K+#lZu8R*Zo?7zmkZ&CB ztK#0RR;^U~Y86YUnKiYQI%xS?Gj4%7bFA`mDPJ0{HdM8Ik*b+BJVL!^-BwFAwhq)# z)vaccYDS&>VoqGZ(|ESi8Wo}1$?OZ9+1k}dg_VC0ss2>8ZkSV1mBPBwDyCA{Ct4*` z3g<P{2s?17z zQ{&VV*6>tSy>_K8yb`C{SjF*bq4iRNYFf3xQJfpN{~N;)>q3H>X;n{F(bj88YPz*P zS>0is@1z=7y=toJl{?xhPEldj$P^X&@6s}BeJ3@}D(;{6^*|>Tt|F~V$vo?N zcUH?(f%ST4m1ylsRfDa5UDVxm7;c{Eg>F`ab*_sVQLpm&d#pNLRai4$VJ`FK-;={* zE$XUHn5%!RZM~SLrZw?hl#h6iV;WyFtjxeyzT2wTL$!!4@)YvPEAy?Qk}U9ww;4-E zR+m1&TRx||sufhH(yPe2tEU=aeH^Kp)N==F+HWL_{~tt)divl>MWHtwJEE70jjD7q zKEH>K9N1@S*39U)+7B? z+uC`2eDZwHEje%9oS_`$6EakfpvEQcVqVBITyq1DCRvHryJ4)SR{d2|YxrQb)EYcQ z&9{yXQ7N3L`cU;;jS_FEe1ceehpHENcqR2x!L?j-D;~M#FjZN#2sYH)p-I&v@P zx$~_LN2|Dh7nVn6tC}@JVj!Wfu5wkQYX;Nou`yYLaTvsPcf;Hu%o5PG|B? z4w=lmC~dMbt@&|G;FEEx+6^<)X&srY#)Zz6SAl~UQpLQg_|0djZK}Q1Yl;fHVU0|i zqQ14p-=x9=4^o$}

4megkM6S2JUG?f`-PmY^%RF5irvsw4$sHZwb^NnXea6Q+5l+M#XNu`Oh zGzxiZ(MF!vyn%RkSt?KE-S9~D=BZnwd-U@Z%`BBCIpfIRQUafp(r!K)Z@3v>d9q7A zqiQ*Gdu#a7N&lF6U;t zIdTI(b*-0Xs&;MU%_2W?-OiFy#y#+h)kU7^-D>y-V&)3Vm{#*m*4 zRt`D45{1QfcCpFpDAH8TE5}n!)#{(v{z-1_F;$Q1`WLnJ^ajIwXe4|L7{^20sbS?K(cPf5li@VmY8 zA^I1$)qSIC)wR+kGE3b21S{duu79Spq~s?$1D<>R_xttV>(-Qw%KqDj_5DUQ*lzZW zO}vZ`7O2?rltMK~)#x7>G>^5sNEOu?F!G+{UzL%{Z|0)iYKA|?H~9v05h`E&zTaJb-0-IT>WMhRX*xw z^+%8yvad<`A0;Zj%IKl4c`lv;assC}cZPd*peuQF^MlgOWYeGW^hF`N1D(Q|`LL&Z zxTL->V@#2J6IcA4wdTxKpIb}k@p*rKp4!eA%DtzR{1Q27byH1xYNQEJ`rY;+n~m43a%`%0WSm7ng`-bE}bdDz8T z4Q}HtmAF`~Qn}Xt#cCMTy-jVcp}$6)RSX$Iz3v>hjE!~l4pnUJxKrI^zeVaTS1-lUTmMv%ckRChsJ2o0 z6p3?rG}Kz5hSuWayV&jGw}<6ip&nC5%MWNRw`ymNx<}2h>fOsH6#vw0&anRT zld#hFn3Z*}>S5h~ugbD|Y*tNcPIngYJ}PmQ*WavSf~r2U#OK9%PNQdPub|-|~=pR9Sl-R_<*13zB?IF=wy;Rf(TBmEN_6 zC-Bp2bao$y{RwJ+MH>I5t%mjE02R`%QtSU)O>6ab6, 2002, 2003, 2004, 2005, 2006. +# Mensajes en español para bfd 2.19.90. +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the binutils package. +# Cristian Othón Martínez Vera , 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # msgid "" msgstr "" -"Project-Id-Version: bfd 2.16.93\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-10-25 22:24+0930\n" -"PO-Revision-Date: 2006-05-27 11:34-0500\n" +"Project-Id-Version: bfd 2.19.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:05+0200\n" +"PO-Revision-Date: 2009-09-12 14:44-0500\n" "Last-Translator: Cristian Othón Martínez Vera \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" @@ -18,170 +19,185 @@ msgstr "" msgid "%B: Unknown section type in a.out.adobe file: %x\n" msgstr "%B: Tipo de sección desconocido en el fichero a.out.adobe: %x\n" -#: aout-cris.c:202 +#: aout-cris.c:204 #, c-format msgid "%s: Invalid relocation type exported: %d" -msgstr "%s: Tipo de reubicación exportado inválido: %d" +msgstr "%s: Se exportó un tipo de reubicación inválido: %d" -#: aout-cris.c:245 +#: aout-cris.c:247 msgid "%B: Invalid relocation type imported: %d" -msgstr "%B: Tipo de reubicación importado inválido: %d" +msgstr "%B: Se importó un tipo de reubicación inválido: %d" -#: aout-cris.c:256 +#: aout-cris.c:258 msgid "%B: Bad relocation record imported: %d" -msgstr "%B: Registro de reubicación importado erróneo: %d" +msgstr "%B: Se importó un registro de reubicación erróneo: %d" -#: aoutx.h:1244 aoutx.h:1578 +#: aoutx.h:1271 aoutx.h:1609 #, c-format msgid "%s: can not represent section `%s' in a.out object file format" -msgstr "%s: no se puede representar la sección `%s' en el fichero objeto de formato a.out" +msgstr "%s: no se puede representar la sección `%s' en el formato de fichero objeto a.out" -#: aoutx.h:1544 +#: aoutx.h:1575 #, c-format msgid "%s: can not represent section for symbol `%s' in a.out object file format" -msgstr "%s: no se puede representar la sección para el símbolo `%s' en el fichero objeto de formato a.out" +msgstr "%s: no se puede representar la sección para el símbolo `%s' en el formato de fichero objeto a.out" -#: aoutx.h:1546 +#: aoutx.h:1577 msgid "*unknown*" msgstr "*desconocido*" -#: aoutx.h:5281 +#: aoutx.h:3994 aoutx.h:4320 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: tipo de reubicación inesperado\n" + +#: aoutx.h:5354 #, c-format msgid "%s: relocatable link from %s to %s not supported" -msgstr "%s: el enlace reubicable de %s a %s no está soportado" +msgstr "%s: no se admite el enlace reubicable de %s a %s" -#: archive.c:1760 +#: archive.c:2056 msgid "Warning: writing archive was slow: rewriting timestamp\n" -msgstr "Aviso: la escritura del fichero fue lenta: reescribiendo la marca de tiempo\n" +msgstr "Aviso: la escritura del fichero fue lenta: se reescribe la marca de tiempo\n" # ¡Uff! Si utilizáramos file=archivo, esta traducción sería imposible. cfuga -#: archive.c:2019 +#: archive.c:2342 msgid "Reading archive file mod timestamp" -msgstr "Leyendo el archivo de la modificación de marca de tiempo del fichero" +msgstr "Se lee la marca de tiempo modificada del fichero en el archivo" -#: archive.c:2043 +#: archive.c:2366 msgid "Writing updated armap timestamp" -msgstr "Escribiendo la marca de tiempo actualizada de armap" +msgstr "Se escribe la marca de tiempo actualizada de armap" -#: bfd.c:279 +#: bfd.c:375 msgid "No error" msgstr "No hay error" -#: bfd.c:280 +#: bfd.c:376 msgid "System call error" msgstr "Error en la llamada al sistema" -#: bfd.c:281 +#: bfd.c:377 msgid "Invalid bfd target" msgstr "Objetivo bfd inválido" -#: bfd.c:282 +#: bfd.c:378 msgid "File in wrong format" msgstr "Fichero en formato erróneo" -#: bfd.c:283 +#: bfd.c:379 msgid "Archive object file in wrong format" msgstr "Archivo de ficheros objeto en formato erróneo" -#: bfd.c:284 +#: bfd.c:380 msgid "Invalid operation" msgstr "Operación inválida" -#: bfd.c:285 +#: bfd.c:381 msgid "Memory exhausted" msgstr "Memoria agotada" -#: bfd.c:286 +#: bfd.c:382 msgid "No symbols" msgstr "No hay símbolos" -#: bfd.c:287 +#: bfd.c:383 msgid "Archive has no index; run ranlib to add one" msgstr "El archivo no tiene índice; ejecute ranlib para agregar uno" -#: bfd.c:288 +#: bfd.c:384 msgid "No more archived files" msgstr "No hay más ficheros archivados" -#: bfd.c:289 +#: bfd.c:385 msgid "Malformed archive" msgstr "Archivo malformado" -#: bfd.c:290 +#: bfd.c:386 msgid "File format not recognized" msgstr "No se reconoce el formato del fichero" -#: bfd.c:291 +#: bfd.c:387 msgid "File format is ambiguous" msgstr "El formato del fichero es ambiguo" -#: bfd.c:292 +#: bfd.c:388 msgid "Section has no contents" -msgstr "La sección no tiene contenidos" +msgstr "La sección no tiene contenido" -#: bfd.c:293 +#: bfd.c:389 msgid "Nonrepresentable section on output" msgstr "Sección no representable en la salida" -#: bfd.c:294 +#: bfd.c:390 msgid "Symbol needs debug section which does not exist" msgstr "Un símbolo requiere de una sección de depuración, la cual no existe" -#: bfd.c:295 +#: bfd.c:391 msgid "Bad value" msgstr "Valor erróneo" -#: bfd.c:296 +#: bfd.c:392 msgid "File truncated" msgstr "Fichero truncado" -#: bfd.c:297 +#: bfd.c:393 msgid "File too big" -msgstr "Fichero demasiado grande" +msgstr "El fichero es demasiado grande" + +#: bfd.c:394 +#, c-format +msgid "Error reading %s: %s" +msgstr "Error al leer %s: %s" -#: bfd.c:298 +#: bfd.c:395 msgid "#" msgstr "#" -#: bfd.c:771 +#: bfd.c:919 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "falló la aseveración BFD %s %s:%d" -#: bfd.c:787 +#: bfd.c:931 #, c-format msgid "BFD %s internal error, aborting at %s line %d in %s\n" -msgstr "error interno de BFD %s, abortando en %s línea %d en %s\n" +msgstr "error interno de BFD %s, se aborta en %s línea %d en %s\n" -#: bfd.c:791 +#: bfd.c:935 #, c-format msgid "BFD %s internal error, aborting at %s line %d\n" -msgstr "error interno de BFD %s, abortando en %s línea %d\n" +msgstr "error interno de BFD %s, se aborta en %s línea %d\n" -#: bfd.c:793 +#: bfd.c:937 msgid "Please report this bug.\n" msgstr "Por favor reporte este bicho.\n" -#: bfdwin.c:202 +#: bfdwin.c:206 #, c-format msgid "not mapping: data=%lx mapped=%d\n" msgstr "no se mapea: datos=%lx mapeados%d\n" -#: bfdwin.c:205 +#: bfdwin.c:209 #, c-format msgid "not mapping: env var not set\n" msgstr "no se mapea: no se estableció la variable de ambiente\n" -#: binary.c:285 +#: binary.c:284 #, c-format msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." -msgstr "Aviso: Escribiendo la sección `%s' a un desplazamiento de fichero grande (pe negativo) 0x%lx." +msgstr "Aviso: Se escribe la sección `%s' a un desplazamiento de fichero grande (pe negativo) 0x%lx." -#: coff64-rs6000.c:2109 coff-rs6000.c:3610 -msgid "%B: symbol `%s' has unrecognized smclas %d" -msgstr "%B: el símbolo `%s' tiene smclas %d no reconocido" +#: bout.c:1150 elf-m10300.c:2078 elf32-avr.c:1639 elf32-frv.c:5743 +#: elf32-xtensa.c:6639 elfxx-sparc.c:2456 reloc.c:5386 reloc16.c:162 +#: vms.c:1918 elf32-ia64.c:788 elf64-ia64.c:788 +msgid "%P%F: --relax and -r may not be used together\n" +msgstr "%P%F: --relax y -r no se pueden usar juntos\n" + +#: cache.c:226 +msgid "reopening %B: %s\n" +msgstr "se reabre %B: %s\n" -#: coff-alpha.c:489 +#: coff-alpha.c:490 msgid "" "%B: Cannot handle compressed Alpha binaries.\n" " Use compiler flags, or objZ, to generate uncompressed binaries." @@ -189,374 +205,371 @@ msgstr "" "%B: No se pueden manejar binarios Alpha comprimidos.\n" " Use las opciones del compilador, o objZ, para generar binarios sin comprimir." -#: coff-alpha.c:646 +#: coff-alpha.c:647 msgid "%B: unknown/unsupported relocation type %d" -msgstr "%B: tipo de reubicación %d desconocida/sin soporte" +msgstr "%B: tipo de reubicación %d desconocida/no admitida" -#: coff-alpha.c:898 coff-alpha.c:935 coff-alpha.c:2007 coff-mips.c:985 +#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1003 msgid "GP relative relocation used when GP not defined" -msgstr "se usó una reubicación GP relativa cuando GP no estaba definido" +msgstr "se usó una reubicación relativa a GP cuando GP no estaba definido" -#: coff-alpha.c:1484 +#: coff-alpha.c:1501 msgid "using multiple gp values" -msgstr "usando valores múltiples de gp" +msgstr "se usan valores múltiples de gp" -#: coff-alpha.c:1543 +#: coff-alpha.c:1560 msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" -msgstr "%B: tipo de reubicación sin soporte: ALPHA_R_GPRELHIGH" +msgstr "%B: tipo de reubicación no admitida: ALPHA_R_GPRELHIGH" -#: coff-alpha.c:1550 +#: coff-alpha.c:1567 msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" -msgstr "%B: tipo de reubicación sin soporte: ALPHA_R_GPRELLOW" +msgstr "%B: tipo de reubicación no admitida: ALPHA_R_GPRELLOW" -#: 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:1574 elf32-m32r.c:2477 elf64-alpha.c:3943 elf64-alpha.c:4098 +#: elf32-ia64.c:4462 elf64-ia64.c:4462 msgid "%B: unknown relocation type %d" msgstr "%B: tipo de reubicación %d desconocido" -#: coff-arm.c:990 elf32-arm.c:1926 +#: coff-arm.c:1039 #, c-format msgid "%B: unable to find THUMB glue '%s' for `%s'" msgstr "%B: no se puede encontrar el pegamento THUMB '%s' para `%s'" -#: coff-arm.c:1019 elf32-arm.c:1960 +#: coff-arm.c:1068 #, c-format msgid "%B: unable to find ARM glue '%s' for `%s'" msgstr "%B: no se puede encontrar el pegamento ARM '%s' para `%s'" -#: coff-arm.c:1319 elf32-arm.c:2683 +#: coff-arm.c:1370 elf32-arm.c:6372 #, c-format msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: arm call to thumb" msgstr "" -"%B(%s): aviso: interoperabilidad no activada.\n" +"%B(%s): aviso: no se activó la interoperabilidad.\n" " primer suceso: %B: llamada arm a thumb" -#: coff-arm.c:1409 +#: coff-arm.c:1460 #, c-format msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: thumb call to arm\n" " consider relinking with --support-old-code enabled" msgstr "" -"%B(%s): aviso: interoperabilidad no activada.\n" -" primer suceso: %B: llamada arm a thumb\n" +"%B(%s): aviso: no se activó la interoperabilidad.\n" +" primer suceso: %B: llamada thumb a arm\n" " considere reenlazar con --support-old-code activado" -#: coff-arm.c:1702 cofflink.c:3015 coff-tic80.c:695 +#: coff-arm.c:1755 coff-tic80.c:695 cofflink.c:3027 msgid "%B: bad reloc address 0x%lx in section `%A'" msgstr "%B: dirección de reubicación 0x%lx errónea en la sección `%A'" -#: coff-arm.c:2028 +#: coff-arm.c:2080 msgid "%B: illegal symbol index in reloc: %d" msgstr "%B: índice de símbolos ilegal en la reubicación: %d" -#: coff-arm.c:2158 +#: coff-arm.c:2211 #, c-format -msgid "ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" -msgstr "ERROR: %B está compilado para APCS-%d, mientras que %B está compilado para APCS-%d" +msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "error: %B está compilado para APCS-%d, mientras que %B está compilado para APCS-%d" -#: coff-arm.c:2174 elf32-arm.c:5093 +#: coff-arm.c:2227 elf32-arm.c:10327 #, c-format -msgid "ERROR: %B passes floats in float registers, whereas %B passes them in integer registers" -msgstr "ERROR: %B pasa números de coma flotante en registros de coma flotante, mientras que %B los pasa en registros enteros" +msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "error: %B pasa números de coma flotante en registros de coma flotante, mientras que %B los pasa en registros enteros" -#: coff-arm.c:2177 elf32-arm.c:5097 +#: coff-arm.c:2230 elf32-arm.c:10331 #, c-format -msgid "ERROR: %B passes floats in integer registers, whereas %B passes them in float registers" -msgstr "ERROR: %B pasa números de coma flotante en registros enteros, mientras que %B los pasa en registros de coma flotante" +msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "error: %B pasa números de coma flotante en registros enteros, mientras que %B los pasa en registros de coma flotante" -#: coff-arm.c:2191 +#: coff-arm.c:2244 #, c-format -msgid "ERROR: %B is compiled as position independent code, whereas target %B is absolute position" -msgstr "ERROR: %B está compilado como código independiente de posición, mientras que el objetivo %B es de posición absoluta" +msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "error: %B está compilado como código independiente de posición, mientras que el objetivo %B es de posición absoluta" -#: coff-arm.c:2194 +#: coff-arm.c:2247 #, c-format -msgid "ERROR: %B is compiled as absolute position code, whereas target %B is position independent" -msgstr "ERROR: %B está compilado como código de posición absoluta, mientras que el objetivo %B es independiente de posición" +msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "error: %B está compilado como código de posición absoluta, mientras que el objetivo %B es independiente de posición" -#: coff-arm.c:2222 elf32-arm.c:5162 +#: coff-arm.c:2275 elf32-arm.c:10396 #, c-format msgid "Warning: %B supports interworking, whereas %B does not" -msgstr "Aviso: %B soporta interoperabilidad, mientras que %B no" +msgstr "Aviso: %B admite interoperabilidad, mientras que %B no" -#: coff-arm.c:2225 elf32-arm.c:5168 +#: coff-arm.c:2278 elf32-arm.c:10402 #, c-format msgid "Warning: %B does not support interworking, whereas %B does" -msgstr "Aviso: %B no soporta interoperabilidad, mientras que %B sí" +msgstr "Aviso: %B no admite interoperabilidad, mientras que %B sí" -#: coff-arm.c:2249 +#: coff-arm.c:2302 #, c-format msgid "private flags = %x:" msgstr "opciones privadas = %x:" -#: coff-arm.c:2257 elf32-arm.c:5219 +#: coff-arm.c:2310 elf32-arm.c:10453 #, c-format msgid " [floats passed in float registers]" msgstr "[números de coma flotante pasados en registros de coma flotante]" -#: coff-arm.c:2259 +#: coff-arm.c:2312 #, c-format msgid " [floats passed in integer registers]" msgstr "[números de coma flotante pasados en registros enteros]" -#: coff-arm.c:2262 elf32-arm.c:5222 +#: coff-arm.c:2315 elf32-arm.c:10456 #, c-format msgid " [position independent]" msgstr "[independiente de posición]" -#: coff-arm.c:2264 +#: coff-arm.c:2317 #, c-format msgid " [absolute position]" msgstr "[posición absoluta]" -#: coff-arm.c:2268 +#: coff-arm.c:2321 #, c-format msgid " [interworking flag not initialised]" -msgstr "[opción de interoperabilidad no iniciada]" +msgstr "[no se inicializó la opción de interoperabilidad]" -#: coff-arm.c:2270 +#: coff-arm.c:2323 #, c-format msgid " [interworking supported]" -msgstr "[soporte para interoperabilidad]" +msgstr "[admite interoperabilidad]" -#: coff-arm.c:2272 +#: coff-arm.c:2325 #, c-format msgid " [interworking not supported]" -msgstr "[sin soporte para interoperabilidad]" +msgstr "[no admite interoperabilidad]" -#: coff-arm.c:2318 elf32-arm.c:4571 +#: coff-arm.c:2371 elf32-arm.c:9360 #, c-format msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" msgstr "Aviso: No se establece la opción de interoperabilidad de %B ya que se había especificado con anterioridad como no interoperable" -#: coff-arm.c:2322 elf32-arm.c:4575 +#: coff-arm.c:2375 elf32-arm.c:9364 #, c-format msgid "Warning: Clearing the interworking flag of %B due to outside request" -msgstr "Aviso: Limpiando la opción de interoperabilidad de %B debido a una petición externa" - -#: coffcode.h:849 -msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" -msgstr "%B: aviso: el símbolo COMDAT '%s' no coincide con el nombre de sección '%s'" - -#. Generate a warning message rather using the 'unhandled' -#. variable as this will allow some .sys files generate by -#. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1061 -msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" -msgstr "%B: Aviso: Se ignora la opción de sección IMAGE_SCN_MEM_NOT_PAGED en la sección %s" - -#: coffcode.h:1116 -msgid "%B (%s): Section flag %s (0x%x) ignored" -msgstr "%B (%s): Se ignora la opción de sección %s (0x%x)" - -#: coffcode.h:2204 -#, c-format -msgid "Unrecognized TI COFF target id '0x%x'" -msgstr "Id de objetivo TI COFF '0x%x' no reconocido" - -#: coffcode.h:4211 -msgid "%B: warning: line number table read failed" -msgstr "%B: aviso: falló la lectura de tabla de números de línea" - -#: coffcode.h:4243 -msgid "%B: warning: illegal symbol index %ld in line numbers" -msgstr "%B: aviso: índice de símbolos %ld ilegal en los números de línea" - -#: coffcode.h:4257 -msgid "%B: warning: duplicate line number information for `%s'" -msgstr "%B: aviso: información duplicada de números de línea para `%s'" - -#: coffcode.h:4597 -msgid "%B: Unrecognized storage class %d for %s symbol `%s'" -msgstr "%B: Clase de almacenamiento %d no reconocida para %s símbolo `%s'" - -#: coffcode.h:4723 -msgid "warning: %B: local symbol `%s' has no section" -msgstr "aviso: %B: el símbolo local `%s' no tiene sección" - -#: coffcode.h:4827 coff-i860.c:586 coff-tic54x.c:376 -msgid "%B: warning: illegal symbol index %ld in relocs" -msgstr "%B: aviso: índice de símbolos %ld ilegal en reubicaciones" - -#: coffcode.h:4865 -msgid "%B: illegal relocation type %d at address 0x%lx" -msgstr "%B: tipo de reubicación %d ilegal en la dirección 0x%lx" - -#: coffgen.c:1511 -msgid "%B: bad string table size %lu" -msgstr "%B: tamaño de tabla de cadenas %lu erróneo" +msgstr "Aviso: Se limpia la opción de interoperabilidad de %B debido a una petición externa" -#: coff-h8300.c:1126 +#: coff-h8300.c:1122 #, c-format msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" msgstr "no se puede manejar la reubicación R_MEM_INDIRECT cuando se utiliza la salida %s" -#: coff-i860.c:142 +#: coff-i860.c:147 #, c-format msgid "Relocation `%s' not yet implemented\n" msgstr "La reubicación `%s' aún no está implementada\n" -#: coff-i960.c:137 coff-i960.c:486 +#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:5143 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: aviso: índice de símbolos %ld ilegal en reubicaciones" + +#: coff-i960.c:143 coff-i960.c:506 msgid "uncertain calling convention for non-COFF symbol" msgstr "convención de llamada incierta para un símbolo que no es COFF" -#: cofflink.c:507 elflink.c:3948 -msgid "Warning: type of symbol `%s' changed from %d to %d in %B" -msgstr "Aviso: el tipo del símbolo `%s' cambió de %d a %d en %B" - -#: cofflink.c:2293 -msgid "%B: relocs in section `%A', but it has no contents" -msgstr "%B: reubicaciones en la sección `%A', pero no tiene contenido" - -#: cofflink.c:2624 coffswap.h:823 -#, c-format -msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" -msgstr "%s: %s: desbordamiento de reubicación: 0x%lx > 0xffff" - -#: cofflink.c:2633 coffswap.h:809 -#, c-format -msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%s: aviso: %s: desbordamiento de número de línea: 0x%lx > 0xffff" - -#: coff-m68k.c:482 elf32-bfin.c:2722 elf32-m68k.c:2193 +#: coff-m68k.c:506 elf32-bfin.c:5693 elf32-cr16.c:2965 elf32-m68k.c:4615 msgid "unsupported reloc type" -msgstr "tipo de reubicación sin soporte" +msgstr "no se admite el tipo de reubicación" -#: coff-maxq.c:128 +#: coff-maxq.c:126 msgid "Can't Make it a Short Jump" msgstr "No se Puede Convertir en un Salto Corto" -#: coff-maxq.c:193 +#: coff-maxq.c:191 msgid "Exceeds Long Jump Range" msgstr "Excede el Rango de Salto Largo" -#: coff-maxq.c:204 coff-maxq.c:278 +#: coff-maxq.c:202 coff-maxq.c:276 msgid "Absolute address Exceeds 16 bit Range" msgstr "La dirección Absoluta Excede el Rango de 16 bit" -#: coff-maxq.c:242 +#: coff-maxq.c:240 msgid "Absolute address Exceeds 8 bit Range" msgstr "La dirección Absoluta Excede el Rango de 8 bit" -#: coff-maxq.c:335 +#: coff-maxq.c:333 msgid "Unrecognized Reloc Type" -msgstr "Tipo de Reubicación no Reconocida" +msgstr "No se reconoce el Tipo de Reubicación" -#: coff-mips.c:686 elf32-mips.c:940 elf64-mips.c:1864 elfn32-mips.c:1718 +#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:441 elf32-score7.c:341 +#: elf64-mips.c:2018 elfn32-mips.c:1832 msgid "GP relative relocation when _gp not defined" -msgstr "reubicación GP relativa cuando _gp no está definido" +msgstr "reubicación relativa a GP cuando _gp no está definido" -#: coff-or32.c:227 +#: coff-or32.c:229 msgid "Unrecognized reloc" -msgstr "Reubicación no reconocida" +msgstr "No se reconoce la reubicación" -#: coff-rs6000.c:2785 +#: coff-rs6000.c:2787 #, c-format msgid "%s: unsupported relocation type 0x%02x" -msgstr "%s: tipo de reubicación 0x%02x sin soporte" +msgstr "%s: no se admite el tipo de reubicación 0x%02x" -#: coff-rs6000.c:2878 +#: coff-rs6000.c:2880 #, c-format msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" msgstr "%s: reubicación de TOC en 0x%x al símbolo `%s' sin entrada TOC" -#: coff-tic4x.c:174 coff-tic54x.c:282 coff-tic80.c:458 +#: coff-rs6000.c:3646 coff64-rs6000.c:2168 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: el símbolo `%s' tiene smclas %d que no se reconoce" + +#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458 #, c-format msgid "Unrecognized reloc type 0x%x" -msgstr "Tipo de reubicación 0x%x no reconocida" +msgstr "No se reconoce el tipo de reubicación 0x%x" -#: coff-tic4x.c:219 +#: coff-tic4x.c:240 #, c-format msgid "%s: warning: illegal symbol index %ld in relocs" -msgstr "%s: aviso: íncide de símbolos %ld ilegal en reubicaciones" +msgstr "%s: aviso: índice de símbolos %ld ilegal en reubicaciones" -#: coff-w65.c:366 +#: coff-w65.c:367 #, c-format msgid "ignoring reloc %s\n" -msgstr "ignorando la reubicación %s\n" +msgstr "se descarta la reubicación %s\n" + +#: coffcode.h:960 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%B: aviso: el símbolo COMDAT '%s' no coincide con el nombre de sección '%s'" + +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1176 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Aviso: Se descarta la opción de sección IMAGE_SCN_MEM_NOT_PAGED en la sección %s" -#: cpu-arm.c:184 cpu-arm.c:193 -msgid "ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale" -msgstr "ERROR: %B está compilado para el EP9312, mientras que %B está compilado para XScale" +#: coffcode.h:1240 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): Se descarta la opción de sección %s (0x%x)" -#: cpu-arm.c:324 +#: coffcode.h:2382 #, c-format -msgid "warning: unable to update contents of %s section in %s" -msgstr "aviso: no se puede actualizar el contenido de la sección %s en %s" +msgid "Unrecognized TI COFF target id '0x%x'" +msgstr "No se reconoce el id de objetivo COFF TI '0x%x'" + +#: coffcode.h:2696 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: reubicación contra un índice de símbolo que no existe: %ld" + +#: coffcode.h:3669 +msgid "%B: section %s: string table overflow at offset %ld" +msgstr "%B: sección %s: desbordamiento de tabla de cadenas en el desplazamiento %ld" + +#: coffcode.h:4477 +msgid "%B: warning: line number table read failed" +msgstr "%B: aviso: falló la lectura de tabla de números de línea" -#: dwarf2.c:315 -msgid "Dwarf Error: Can't find .debug_str section." -msgstr "Error de Dwarf: No se puede encontrar la sección .debug_str." +#: coffcode.h:4507 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: aviso: índice de símbolos %ld ilegal en los números de línea" + +#: coffcode.h:4521 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: aviso: información de números de línea duplicada para `%s'" -#: dwarf2.c:333 +#: coffcode.h:4912 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: No se reconoce la clase de almacenamiento %d para %s símbolo `%s'" + +#: coffcode.h:5038 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "aviso: %B: el símbolo local `%s' no tiene sección" + +#: coffcode.h:5181 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: tipo de reubicación %d ilegal en la dirección 0x%lx" + +#: coffgen.c:1571 +msgid "%B: bad string table size %lu" +msgstr "%B: tamaño de tabla de cadenas %lu erróneo" + +#: cofflink.c:513 elflink.c:4307 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Aviso: el tipo del símbolo `%s' cambió de %d a %d en %B" + +#: cofflink.c:2305 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: reubicaciones en la sección `%A', pero no tiene contenido" + +#: cofflink.c:2636 coffswap.h:826 +#, c-format +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%s: %s: desbordamiento de reubicación: 0x%lx > 0xffff" + +#: cofflink.c:2645 coffswap.h:812 #, c-format -msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)." -msgstr "Error de Dwarf: El desplazamiento DW_FROM_strp (%lu) es más grande o igual que el tamaño de .debug_str (%lu)." +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: aviso: %s: desbordamiento de número de línea: 0x%lx > 0xffff" -#: dwarf2.c:426 -msgid "Dwarf Error: Can't find .debug_abbrev section." -msgstr "Error de Dwarf: No se puede encontrar la sección .debug_abbrev." +#: cpu-arm.c:189 cpu-arm.c:200 +msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "error: %B está compilado para el EP9312, mientras que %B está compilado para XScale" -#: dwarf2.c:441 +#: cpu-arm.c:332 #, c-format -msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)." -msgstr "Error de Dwarf: El desplazamiento de abreviatura (%lu) es más grande o igual que el tamaño de .debug_abbrev (%lu)." +msgid "warning: unable to update contents of %s section in %s" +msgstr "aviso: no se puede actualizar el contenido de la sección %s en %s" -#: dwarf2.c:656 +#: dwarf2.c:430 #, c-format -msgid "Dwarf Error: Invalid or unhandled FORM value: %u." -msgstr "Error de Dwarf: Valor de FORM inválido o no manejado: %u." +msgid "Dwarf Error: Can't find %s section." +msgstr "Error de Dwarf: No se puede encontrar la sección %s." -#: dwarf2.c:856 -msgid "Dwarf Error: mangled line number section (bad file number)." -msgstr "Error de Dwarf: sección de números de línea revuelta (número erróneo de fichero)." +#: dwarf2.c:457 +#, c-format +msgid "Dwarf Error: unable to decompress %s section." +msgstr "Error de Dwarf: no se puede descomprimir la sección %s." -#: dwarf2.c:947 -msgid "Dwarf Error: Can't find .debug_line section." -msgstr "Error de Dwarf: No se puede encontrar lan sección .debug_line." +#: dwarf2.c:468 +#, c-format +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "Error de Dwarf: El desplazamiento (%lu) es mayor que o igual que el tamaño de %s (%lu)." -#: dwarf2.c:964 +#: dwarf2.c:865 #, c-format -msgid "Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)." -msgstr "Error de Dwarf: El desplazamiento de línea (%lu) es más grande o igual que el tamaño de .debug_line (%lu)." +msgid "Dwarf Error: Invalid or unhandled FORM value: %u." +msgstr "Error de Dwarf: Valor de FORM sin manejar o inválido: %u." -#: dwarf2.c:1192 +#: dwarf2.c:1079 +msgid "Dwarf Error: mangled line number section (bad file number)." +msgstr "Error de Dwarf: sección de números de línea revuelta (número de fichero erróneo)." + +#: dwarf2.c:1413 msgid "Dwarf Error: mangled line number section." msgstr "Error de Dwarf: sección de números de línea revuelta." -#: dwarf2.c:1382 -msgid "Dwarf Error: Can't find .debug_ranges section." -msgstr "Error de Dwarf: No se puede encontrar lan sección .debug_ranges." - -#: dwarf2.c:1544 dwarf2.c:1660 dwarf2.c:1930 +#: dwarf2.c:1760 dwarf2.c:1867 dwarf2.c:2139 #, c-format msgid "Dwarf Error: Could not find abbrev number %u." msgstr "Error de Dwarf: No se puede encontrar el número de abreviatura %u." -#: dwarf2.c:1891 +#: dwarf2.c:2100 #, c-format -msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information." -msgstr "Error de Dwarf: se encontró la versión de dwarf '%u', este lector solamente maneja información de la versión 2." +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 and 3 information." +msgstr "Error de Dwarf: se encontró la versión de dwarf '%u', este lector solamente maneja información de las versiones 2 y 3." -#: dwarf2.c:1898 +#: dwarf2.c:2107 #, c-format msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." msgstr "Error de Dwarf: se encontró el tamaño de dirección '%u', este lector no puede manejar tamaños más grandes que '%u'." -#: dwarf2.c:1921 +#: dwarf2.c:2130 #, c-format msgid "Dwarf Error: Bad abbrev number: %u." msgstr "Error de Dwarf: Número de abreviación erróneo: %u." -#: ecoff.c:1227 +#: ecoff.c:1238 #, c-format msgid "Unknown basic type %d" msgstr "Tipo básico %d desconocido" -#: ecoff.c:1484 +#: ecoff.c:1495 #, c-format msgid "" "\n" @@ -565,7 +578,7 @@ msgstr "" "\n" " Símbolo final+1: %ld" -#: ecoff.c:1491 ecoff.c:1494 +#: ecoff.c:1502 ecoff.c:1505 #, c-format msgid "" "\n" @@ -574,7 +587,7 @@ msgstr "" "\n" " Primer símbolo: %ld" -#: ecoff.c:1506 +#: ecoff.c:1517 #, c-format msgid "" "\n" @@ -583,7 +596,7 @@ msgstr "" "\n" " Símbolo final+1: %-7ld Tipo: %s" -#: ecoff.c:1513 +#: ecoff.c:1524 #, c-format msgid "" "\n" @@ -592,7 +605,7 @@ msgstr "" "\n" " Símbolo local: %ld" -#: ecoff.c:1521 +#: ecoff.c:1532 #, c-format msgid "" "\n" @@ -601,7 +614,7 @@ msgstr "" "\n" " struct; símbolo final+1: %ld" -#: ecoff.c:1526 +#: ecoff.c:1537 #, c-format msgid "" "\n" @@ -610,7 +623,7 @@ msgstr "" "\n" " union; símbolo final+1: %ld" -#: ecoff.c:1531 +#: ecoff.c:1542 #, c-format msgid "" "\n" @@ -619,7 +632,7 @@ msgstr "" "\n" " enum; símbolo final+1: %ld" -#: ecoff.c:1537 +#: ecoff.c:1548 #, c-format msgid "" "\n" @@ -628,352 +641,694 @@ msgstr "" "\n" " Tipo: %s" -#: elf32-arm.c:2315 +#: elf-attrs.c:567 +msgid "error: %B: Must be processed by '%s' toolchain" +msgstr "error: %B: Se debe procesar por la cadena de compilación '%s'" + +#: elf-attrs.c:575 +msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "error: %B: La etiqueta de objeto '%d, %s' es incompatible con la etiqueta '%d, %s'" + +#: elf-eh-frame.c:884 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "%P: error en %B(%A); no se creará la tabla .eh_frame_hdr.\n" + +#: elf-eh-frame.c:1122 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: la codificación fde en %B(%A) previene la creación de la tabla .eh_frame_hdr.\n" + +#: elf-ifunc.c:179 +msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" +msgstr "%F%P: el símbolo STT_GNU_IFUNC dinámico `%s' con igualdad de puntero en `%B' no se puede usar al hacer un ejecutable; recompile con -fPIE y reenlace con -pie\n" + +#: elf-m10200.c:456 elf-m10300.c:1575 elf32-avr.c:1251 elf32-bfin.c:3200 +#: elf32-cr16.c:1517 elf32-cr16c.c:790 elf32-cris.c:2089 elf32-crx.c:933 +#: elf32-d10v.c:516 elf32-fr30.c:616 elf32-frv.c:4114 elf32-h8300.c:516 +#: elf32-i860.c:1218 elf32-ip2k.c:1499 elf32-iq2000.c:691 elf32-lm32.c:1171 +#: elf32-m32c.c:560 elf32-m32r.c:3102 elf32-m68hc1x.c:1136 elf32-mep.c:541 +#: elf32-microblaze.c:1226 elf32-moxie.c:291 elf32-msp430.c:493 elf32-mt.c:402 +#: elf32-openrisc.c:411 elf32-score.c:2752 elf32-score7.c:2591 +#: elf32-spu.c:5045 elf32-v850.c:1701 elf32-xstormy16.c:948 elf64-mmix.c:1533 +msgid "internal error: out of range error" +msgstr "error interno: error fuera de rango" + +#: elf-m10200.c:460 elf-m10300.c:1579 elf32-avr.c:1255 elf32-bfin.c:3204 +#: elf32-cr16.c:1521 elf32-cr16c.c:794 elf32-cris.c:2093 elf32-crx.c:937 +#: elf32-d10v.c:520 elf32-fr30.c:620 elf32-frv.c:4118 elf32-h8300.c:520 +#: elf32-i860.c:1222 elf32-iq2000.c:695 elf32-lm32.c:1175 elf32-m32c.c:564 +#: elf32-m32r.c:3106 elf32-m68hc1x.c:1140 elf32-mep.c:545 +#: elf32-microblaze.c:1230 elf32-moxie.c:295 elf32-msp430.c:497 +#: elf32-openrisc.c:415 elf32-score.c:2756 elf32-score7.c:2595 +#: elf32-spu.c:5049 elf32-v850.c:1705 elf32-xstormy16.c:952 elf64-mmix.c:1537 +#: elfxx-mips.c:9103 +msgid "internal error: unsupported relocation error" +msgstr "error interno: no se admite el error de reubicación" + +#: elf-m10200.c:464 elf32-cr16.c:1525 elf32-cr16c.c:798 elf32-crx.c:941 +#: elf32-d10v.c:524 elf32-h8300.c:524 elf32-lm32.c:1179 elf32-m32r.c:3110 +#: elf32-m68hc1x.c:1144 elf32-microblaze.c:1234 elf32-score.c:2760 +#: elf32-score7.c:2599 elf32-spu.c:5053 +msgid "internal error: dangerous error" +msgstr "error interno: error peligroso" + +#: elf-m10200.c:468 elf-m10300.c:1592 elf32-avr.c:1263 elf32-bfin.c:3212 +#: elf32-cr16.c:1529 elf32-cr16c.c:802 elf32-cris.c:2101 elf32-crx.c:945 +#: elf32-d10v.c:528 elf32-fr30.c:628 elf32-frv.c:4126 elf32-h8300.c:528 +#: elf32-i860.c:1230 elf32-ip2k.c:1514 elf32-iq2000.c:703 elf32-lm32.c:1183 +#: elf32-m32c.c:572 elf32-m32r.c:3114 elf32-m68hc1x.c:1148 elf32-mep.c:553 +#: elf32-microblaze.c:1238 elf32-moxie.c:303 elf32-msp430.c:505 elf32-mt.c:410 +#: elf32-openrisc.c:423 elf32-score.c:2769 elf32-score7.c:2603 +#: elf32-spu.c:5057 elf32-v850.c:1725 elf32-xstormy16.c:960 elf64-mmix.c:1545 +msgid "internal error: unknown error" +msgstr "error interno: error desconocido" + +#: elf-m10300.c:1512 elf32-arm.c:8963 elf32-i386.c:3984 elf32-m32r.c:2588 +#: elf32-m68k.c:4099 elf32-ppc.c:7906 elf32-s390.c:3015 elf32-sh.c:3429 +#: elf32-xtensa.c:3027 elf64-ppc.c:12063 elf64-s390.c:2974 elf64-sh64.c:1648 +#: elf64-x86-64.c:3657 elfxx-sparc.c:3317 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): reubicación %s sin resolución contra el símbolo `%s'" + +#: elf-m10300.c:1584 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "error: tipo de reubicación inapropiada para la biblioteca compartida (¿olvidó -fpic?)" + +#: elf-m10300.c:1587 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "error interno: se usó un tipo de reubicación sospechosa en la biblioteca compartida" + +#: elf-m10300.c:4385 elf32-arm.c:11346 elf32-cr16.c:2519 elf32-cris.c:3030 +#: elf32-hppa.c:1891 elf32-i370.c:506 elf32-i386.c:1975 elf32-lm32.c:1873 +#: elf32-m32r.c:1921 elf32-m68k.c:3188 elf32-ppc.c:4953 elf32-s390.c:1650 +#: elf32-sh.c:2574 elf32-vax.c:1052 elf64-ppc.c:6348 elf64-s390.c:1623 +#: elf64-sh64.c:3396 elf64-x86-64.c:1821 elfxx-sparc.c:1802 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "la variable dinámica `%s' es de tamaño cero" + +#: elf.c:329 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: desplazamiento de cadena inválido %u >= %lu para la sección `%s'" + +#: elf.c:439 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "%B el número de símbolo %lu hace referencia a la sección inexistente SHT_SYMTAB_SHNDX" + +#: elf.c:595 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Campo de tamaño corrupto en el encabezado de la sección de grupo: 0x%lx" + +#: elf.c:631 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: entrada SHT_GROUP inválida" + +#: elf.c:701 +msgid "%B: no group info for section %A" +msgstr "%B: no hay información de grupo para la sección %A" + +#: elf.c:730 elf.c:2960 elflink.c:9912 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: aviso: no se estableció sh_link para la sección `%A'" + +#: elf.c:749 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: sh_link [%d] en la sección `%A', es incorrecto" + +#: elf.c:784 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: sección [%d] desconocida `%s' en el grupo [%s]" + +#: elf.c:1104 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" +"\n" +"Encabezado del Programa:\n" + +#: elf.c:1146 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" +"\n" +"Sección Dinámica:\n" + +#: elf.c:1282 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" +"\n" +"Definiciones de versión:\n" + +#: elf.c:1307 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" +"\n" +"Referencias de versión:\n" + +#: elf.c:1312 +#, c-format +msgid " required from %s:\n" +msgstr " se requere desde %s:\n" + +#: elf.c:1702 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: enlace %lu inválido para la sección de reubicación %s (índice %u)" + +#: elf.c:1870 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: no se sabe cómo manejar la sección específica alojada de la aplicación `%s' [0x%8x]" + +#: elf.c:1882 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: no se sabe cómo manejar la sección específica de procesador `%s' [0x%8x]" + +#: elf.c:1893 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: no se sabe cómo manejar la sección específica de SO `%s' [0x%8x]" + +#: elf.c:1903 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: no se sabe cómo manejar la sección `%s' [0x%8x]" + +#: elf.c:2500 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "aviso: el tipo de la sección `%A' cambió a PROGBITS" + +#: elf.c:2917 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: sh_link de la sección `%A' apunta a la sección descartada `%A' de `%B'" + +#: elf.c:2940 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: sh_link de la sección `%A' apunta a la sección eliminada `%A' de `%B'" + +#: elf.c:4311 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: La primera sección en el segmento PT_DYNAMIC no es la sección .dynamic" + +#: elf.c:4338 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: No hay suficiente espacio para los encabezados del programa, pruebe enlazar con -N" + +#: elf.c:4420 +msgid "%B: section %A vma 0x%lx overlaps previous sections" +msgstr "%B: la sección %A vma 0x%lx traslapa las secciones anteriores" + +#: elf.c:4515 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: la sección `%A' no se puede asignar en el segmento %d" + +#: elf.c:4565 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: aviso: la sección asignada `%s' no está en el segmento" + +#: elf.c:5065 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: se requiere el símbolo `%s' pero no está presente" + +#: elf.c:5404 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: aviso: Se detectó un segmento cargable vacío, ¿ esto es intencional ?\n" + +#: elf.c:6370 +#, c-format +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "No se puede encontrar la sección de salida equivalente para el símbolo '%s' de la sección '%s'" + +#: elf.c:7356 +msgid "%B: unsupported relocation type %s" +msgstr "%B: no se admite el tipo de reubicación %s" + +#: elf32-arm.c:3149 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" +"%B(%s): aviso: no se activó la interoperabilidad.\n" +" primer suceso: %B: llamada Thumb a ARM" + +#: elf32-arm.c:3190 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: ARM call to Thumb" +msgstr "" +"%B(%s): aviso: no se activó la interoperabilidad.\n" +" primer suceso: %B: llamada ARM a Thumb" + +#: elf32-arm.c:3387 elf32-arm.c:4692 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "%s: no se puede crear la entrada de cabo %s" + +#: elf32-arm.c:4804 +#, c-format +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "no se puede encontrar el pegamento THUMB '%s' para `%s'" + +#: elf32-arm.c:4838 +#, c-format +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "no se puede encontrar el pegamento ARM '%s' para `%s'" + +#: elf32-arm.c:5365 msgid "%B: BE8 images only valid in big-endian mode." msgstr "%B: las imágenes BE8 sólo son válidas en modo big-endian." -#: elf32-arm.c:2471 +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:5590 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: aviso: no se necesita la alternativa para evitar la errata del VFP11 seleccionado para la arquitectura objetivo" + +#: elf32-arm.c:6130 elf32-arm.c:6150 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: no se puede encontrar la chapa de VFP11 `%s'" + +#: elf32-arm.c:6196 #, c-format msgid "Invalid TARGET2 relocation type '%s'." msgstr "Tipo de reubicación TARGET2 '%s' inválido." -#: elf32-arm.c:2578 +#: elf32-arm.c:6281 msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: thumb call to arm" msgstr "" -"%s(%s): aviso: interoperabilidad no activada.\n" -" primer suceso: %B: llamada thumb para arm" +"%s(%s): aviso: no se activó la interoperabilidad.\n" +" primer suceso: %B: llamada thumb a arm" -#: elf32-arm.c:3044 +#: elf32-arm.c:7003 msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." msgstr "\\%B: Aviso: La instrucción Arm BLX apunta a la función Arm '%s'." -#: elf32-arm.c:3227 +#: elf32-arm.c:7405 msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." msgstr "%B: Aviso: La instrucción Thumb BLX apunta a la función thumb '%s'." -#: elf32-arm.c:3889 +#: elf32-arm.c:8085 msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" msgstr "%B(%A+0x%lx): la reubicación R_ARM_TLS_LE32 no se permite en objetos compartidos" -#: elf32-arm.c:4290 elf32-sh.c:4618 elf64-sh64.c:1537 +#: elf32-arm.c:8300 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): Sólo se permiten las instrucciones ADD o SUB en las reubicaciones de grupo ALU" + +#: elf32-arm.c:8340 elf32-arm.c:8427 elf32-arm.c:8510 elf32-arm.c:8595 +msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" +msgstr "%B(%A+0x%lx): Desborde al dividirse 0x%lx para la reubicación de grupo %s" + +#: elf32-arm.c:8821 elf32-sh.c:3325 elf64-sh64.c:1556 msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" msgstr "%B(%A+0x%lx): reubicación %s contra la sección SEC_MERGE" -#: elf32-arm.c:4351 elf64-ppc.c:9672 +#: elf32-arm.c:8939 elf32-m68k.c:4134 elf32-xtensa.c:2765 elf64-ppc.c:10743 msgid "%B(%A+0x%lx): %s used with TLS symbol %s" msgstr "%B(%A+0x%lx): se usó %s con el símbolo TLS %s" -#: elf32-arm.c:4352 elf64-ppc.c:9673 +#: elf32-arm.c:8940 elf32-m68k.c:4135 elf32-xtensa.c:2766 elf64-ppc.c:10744 msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" msgstr "%B(%A+0x%lx): se usó %s con el símbolo %s que no es TLS" -#: 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 -msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" -msgstr "%B(%A+0x%lx): reubicación %s sin resolución contra el símbolo `%s'" +#: elf32-arm.c:8997 +msgid "out of range" +msgstr "fuera de rango" -#: 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" -msgstr "error interno: error fuera de rango" +#: elf32-arm.c:9001 +msgid "unsupported relocation" +msgstr "no se admite la reubicación" -#: 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" -msgstr "error interno: error de reubicación sin soporte" +#: elf32-arm.c:9009 +msgid "unknown error" +msgstr "error desconocido" -#: 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" -msgstr "error interno: error peligroso" +#: elf32-arm.c:9409 +msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" +msgstr "Aviso: Se limpia la opción de interoperación en %B porque se ha enlazado con él código no interoperable en %B" -#: 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 "error interno: error desconocido" +#: elf32-arm.c:9652 +msgid "error: %B: Unknown CPU architecture" +msgstr "error: %B: Arquitectura de CPU desconocida" -#: elf32-arm.c:4664 -msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" -msgstr "Aviso: Limpiando la opción de interoperación en %B porque se ha enlazado con él código no interoperable en %B" +#: elf32-arm.c:9690 +msgid "error: %B: Conflicting CPU architectures %d/%d" +msgstr "error: %B: Arquitecturas de CPU en conflicto %d/%d" -#: elf32-arm.c:4751 -msgid "ERROR: %B uses VFP register arguments, %B does not" -msgstr "ERROR: %B utiliza argumentos de registro VFP, mientras que %B no" +#: elf32-arm.c:9747 +msgid "error: %B uses VFP register arguments, %B does not" +msgstr "error: %B utiliza argumentos de registro VFP, mientras que %B no" -#: elf32-arm.c:4798 -msgid "ERROR: %B: Conflicting architecture profiles %c/%c" -msgstr "ERROR: %B: Perfiles de arquitecturas en conflicto %c/%c" +#: elf32-arm.c:9897 +msgid "error: %B: Conflicting architecture profiles %c/%c" +msgstr "error: %B: Perfiles de arquitecturas en conflicto %c/%c" -#: elf32-arm.c:4813 +#: elf32-arm.c:9921 msgid "Warning: %B: Conflicting platform configuration" msgstr "Aviso: %B: Configuración de plataformas en conflicto" -#: elf32-arm.c:4821 -msgid "ERROR: %B: Conflicting use of R9" -msgstr "ERROR: %B: Uso en conflicto de R9" +#: elf32-arm.c:9930 +msgid "error: %B: Conflicting use of R9" +msgstr "error: %B: Uso en conflicto de R9" -#: elf32-arm.c:4833 -msgid "ERROR: %B: SB relative addressing conflicts with use of R9" -msgstr "ERROR: %B: El direccionamiento relativo a SB tiene conflictos con el uso de R9" +#: elf32-arm.c:9942 +msgid "error: %B: SB relative addressing conflicts with use of R9" +msgstr "error: %B: El direccionamiento relativo a SB tiene conflictos con el uso de R9" -#: elf32-arm.c:4855 -msgid "ERROR: %B: Conflicting definitions of wchar_t" -msgstr "ERROR: %B: Definiciones en conflicto de wchar_t" +#: elf32-arm.c:9955 +msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" +msgstr "aviso: %B usa wchar_t de %u bytes aunque la salida usa wchar_t de %u bytes; el uso de valores wchar_t entre objetos puede fallar" -#: elf32-arm.c:4881 -msgid "ERROR: %B: Conflicting enum sizes" -msgstr "ERROR: %B: Tamaños de enum en conflicto" +#: elf32-arm.c:9986 +msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "aviso: %B usa enums %s aunque la salida usa enums %s; el uso de valores enum entre objetos puede fallar" -#: elf32-arm.c:4892 -msgid "ERROR: %B uses iWMMXt register arguments, %B does not" -msgstr "ERROR: %B utiliza argumentos de registro iWMMXt, mientras que %B no" +#: elf32-arm.c:9998 +msgid "error: %B uses iWMMXt register arguments, %B does not" +msgstr "error: %B utiliza argumentos de registro iWMMXt, mientras que %B no" -#: elf32-arm.c:4912 -msgid "ERROR: %B: Must be processed by '%s' toolchain" -msgstr "ERROR: %B: Se debe procesar por la cadena de compilación '%s'" +#: elf32-arm.c:10020 +msgid "error: fp16 format mismatch between %B and %B" +msgstr "error: no coincide el formato fp16 entre %B y %B" -#: elf32-arm.c:4932 elf32-arm.c:4951 -msgid "ERROR: %B: Incompatible object tag '%s':%d" -msgstr "ERROR: %B: Etiqueta de objeto '%s' incompatible:%d" +#: elf32-arm.c:10063 elf32-arm.c:10156 +msgid "%B: Unknown mandatory EABI object attribute %d" +msgstr "%B: Atributo de objeto EABI obligatorio %d desconocido" -#: elf32-arm.c:4961 +#: elf32-arm.c:10071 elf32-arm.c:10164 msgid "Warning: %B: Unknown EABI object attribute %d" msgstr "Aviso: %B: Atributo de objeto EABI %d desconocido" -#: elf32-arm.c:5069 -msgid "ERROR: Source object %B has EABI version %d, but target %B has EABI version %d" -msgstr "ERROR: El objeto fuente %B tiene EABI versión %d, pero el objetivo %B tiene EABI versión %d" +#: elf32-arm.c:10224 +msgid "error: %B is already in final BE8 format" +msgstr "error: %B ya está en el formato BE8 final" + +#: elf32-arm.c:10300 +msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d" +msgstr "error: El objeto fuente %B tiene EABI versión %d, pero el objetivo %B tiene EABI versión %d" -#: elf32-arm.c:5082 -msgid "ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" -msgstr "ERROR: %B está compilado para APCS-%d mientras que el objetivo %B usa APCS-%d" +#: elf32-arm.c:10316 +msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "error: %B está compilado para APCS-%d mientras que el objetivo %B usa APCS-%d" -#: elf32-arm.c:5107 -msgid "ERROR: %B uses VFP instructions, whereas %B does not" -msgstr "ERROR: %B utiliza instrucciones VFP, mientras que %B no" +#: elf32-arm.c:10341 +msgid "error: %B uses VFP instructions, whereas %B does not" +msgstr "error: %B utiliza instrucciones VFP, mientras que %B no" -#: elf32-arm.c:5111 -msgid "ERROR: %B uses FPA instructions, whereas %B does not" -msgstr "ERROR: %B utiliza instrucciones FPA, mientras que %B no" +#: elf32-arm.c:10345 +msgid "error: %B uses FPA instructions, whereas %B does not" +msgstr "error: %B utiliza instrucciones FPA, mientras que %B no" -#: elf32-arm.c:5121 -msgid "ERROR: %B uses Maverick instructions, whereas %B does not" -msgstr "ERROR: %B utiliza instrucciones Maverick, mientras que %B no" +#: elf32-arm.c:10355 +msgid "error: %B uses Maverick instructions, whereas %B does not" +msgstr "error: %B utiliza instrucciones Maverick, mientras que %B no" -#: elf32-arm.c:5125 -msgid "ERROR: %B does not use Maverick instructions, whereas %B does" -msgstr "ERROR: %B no utiliza instrucciones Maverick, mientras que %B sí" +#: elf32-arm.c:10359 +msgid "error: %B does not use Maverick instructions, whereas %B does" +msgstr "error: %B no utiliza instrucciones Maverick, mientras que %B sí" -#: elf32-arm.c:5144 -msgid "ERROR: %B uses software FP, whereas %B uses hardware FP" -msgstr "ERROR: %B utiliza FP de software, mientras que %B utiliza FP de hardware" +#: elf32-arm.c:10378 +msgid "error: %B uses software FP, whereas %B uses hardware FP" +msgstr "error: %B utiliza FP de software, mientras que %B utiliza FP de hardware" -#: elf32-arm.c:5148 -msgid "ERROR: %B uses hardware FP, whereas %B uses software FP" -msgstr "ERROR: %B utiliza FP de hardware, mientras que %B utiliza FP de software" +#: elf32-arm.c:10382 +msgid "error: %B uses hardware FP, whereas %B uses software FP" +msgstr "error: %B utiliza FP de hardware, mientras que %B utiliza FP de software" #. 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:10429 elf32-bfin.c:5082 elf32-cris.c:4110 elf32-m68hc1x.c:1280 +#: elf32-m68k.c:1169 elf32-score.c:4039 elf32-score7.c:3876 elf32-vax.c:540 +#: elfxx-mips.c:12755 #, c-format msgid "private flags = %lx:" msgstr "opciones privadas = %lx:" -#: elf32-arm.c:5204 +#: elf32-arm.c:10438 #, c-format msgid " [interworking enabled]" msgstr " [interoperabilidad activada]" -#: elf32-arm.c:5212 +#: elf32-arm.c:10446 #, c-format msgid " [VFP float format]" msgstr " [formato de coma flotante VFP]" -#: elf32-arm.c:5214 +#: elf32-arm.c:10448 #, c-format msgid " [Maverick float format]" msgstr " [formato de coma flotante Maverick]" -#: elf32-arm.c:5216 +#: elf32-arm.c:10450 #, c-format msgid " [FPA float format]" msgstr " [formato de coma flotante FPA]" -#: elf32-arm.c:5225 +#: elf32-arm.c:10459 #, c-format msgid " [new ABI]" msgstr " [ABI nuevo]" -#: elf32-arm.c:5228 +#: elf32-arm.c:10462 #, c-format msgid " [old ABI]" msgstr " [ABI antiguo]" -#: elf32-arm.c:5231 +#: elf32-arm.c:10465 #, c-format msgid " [software FP]" msgstr " [FP por software]" -#: elf32-arm.c:5240 +#: elf32-arm.c:10474 #, c-format msgid " [Version1 EABI]" msgstr " [EABI Version1]" -#: elf32-arm.c:5243 elf32-arm.c:5254 +#: elf32-arm.c:10477 elf32-arm.c:10488 #, c-format msgid " [sorted symbol table]" msgstr " [tabla de símbolos ordenados]" -#: elf32-arm.c:5245 elf32-arm.c:5256 +#: elf32-arm.c:10479 elf32-arm.c:10490 #, c-format msgid " [unsorted symbol table]" msgstr " [tabla de símbolos sin ordenar]" -#: elf32-arm.c:5251 +#: elf32-arm.c:10485 #, c-format msgid " [Version2 EABI]" msgstr " [EABI Version2]" -#: elf32-arm.c:5259 +#: elf32-arm.c:10493 #, c-format msgid " [dynamic symbols use segment index]" msgstr " [los símbolos dinámicos utilizan índices de segmento]" -#: elf32-arm.c:5262 +#: elf32-arm.c:10496 #, c-format msgid " [mapping symbols precede others]" msgstr " [el mapeo de símbolos precede a otros]" -#: elf32-arm.c:5269 +#: elf32-arm.c:10503 #, c-format msgid " [Version3 EABI]" msgstr " [EABI Version3]" -#: elf32-arm.c:5273 +#: elf32-arm.c:10507 #, c-format msgid " [Version4 EABI]" msgstr " [EABI Version4]" -#: elf32-arm.c:5276 +#: elf32-arm.c:10511 +#, c-format +msgid " [Version5 EABI]" +msgstr " [EABI Version5]" + +#: elf32-arm.c:10514 #, c-format msgid " [BE8]" msgstr " [BE8]" -#: elf32-arm.c:5279 +#: elf32-arm.c:10517 #, c-format msgid " [LE8]" msgstr " [LE8]" -#: elf32-arm.c:5285 +#: elf32-arm.c:10523 #, c-format msgid " " -msgstr " " +msgstr " " -#: elf32-arm.c:5292 +#: elf32-arm.c:10530 #, c-format msgid " [relocatable executable]" msgstr " [ejecutable reubicable]" -#: elf32-arm.c:5295 +#: elf32-arm.c:10533 #, c-format msgid " [has entry point]" msgstr " [tiene punto de entrada]" -#: elf32-arm.c:5300 +#: elf32-arm.c:10538 #, c-format msgid "" -msgstr "" +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:10783 elf32-i386.c:1300 elf32-s390.c:998 elf32-xtensa.c:1000 +#: elf64-s390.c:952 elf64-x86-64.c:1082 elfxx-sparc.c:1121 msgid "%B: bad symbol index: %d" msgstr "%B: índice de símbolos erróneo: %d" -#: 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:10904 elf64-x86-64.c:1242 elf64-x86-64.c:1411 elfxx-mips.c:7870 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: no se puede usar la reubicación %s contra `%s' cuando se hace un objeto compartido; recompile con -fPIC" + +#: elf32-arm.c:11893 #, c-format -msgid "dynamic variable `%s' is zero size" -msgstr "la variable dinámica `%s' es de tamaño cero" +msgid "Errors encountered processing file %s" +msgstr "Se encontraron errores al procesar el fichero %s" -#: 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:13339 +msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" +msgstr "%B: error: el cabo de errores Cortex-A8 se aloja en una ubicación insegura" + +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:13366 +msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" +msgstr "%B: error: el cabo de errores Cortex-A8 está fuera de rango (el fichero de entrada es demasiado grande)" + +#: elf32-arm.c:13457 elf32-arm.c:13479 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: error: la chapa VFP11 está fuera de rango" + +#: elf32-avr.c:1259 elf32-bfin.c:3208 elf32-cris.c:2097 elf32-fr30.c:624 +#: elf32-frv.c:4122 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:699 +#: elf32-m32c.c:568 elf32-mep.c:549 elf32-moxie.c:299 elf32-msp430.c:501 +#: elf32-mt.c:406 elf32-openrisc.c:419 elf32-v850.c:1709 elf32-xstormy16.c:956 +#: elf64-mmix.c:1541 msgid "internal error: dangerous relocation" msgstr "error interno: reubicación peligrosa" -#: elf32-bfin.c:96 -msgid "Division by zero. " -msgstr "División por cero. " +#: elf32-avr.c:2409 elf32-hppa.c:605 elf32-m68hc1x.c:165 elf64-ppc.c:4141 +msgid "%B: cannot create stub entry %s" +msgstr "%B: no se puede crear la entrada de cabo %s" -#: elf32-bfin.c:1958 +#: elf32-bfin.c:1581 msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" msgstr "%B(%A+0x%lx): reubicación sin resolución contra el símbolo `%s'" -#: 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:1614 elf32-i386.c:4026 elf32-m68k.c:4176 elf32-s390.c:3067 +#: elf64-s390.c:3026 elf64-x86-64.c:3697 msgid "%B(%A+0x%lx): reloc against `%s': error %d" msgstr "%B(%A+0x%lx): reubicación contra `%s': error %d" -#: elf32-cris.c:1050 +#: elf32-bfin.c:2714 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B: la reubicación en `%A+0x%x' referencía al símbolo `%s' con adición que no es cero" + +#: elf32-bfin.c:2728 elf32-frv.c:2904 +msgid "relocation references symbol not defined in the module" +msgstr "la reubicación referencía un símbolo que no está definido en el módulo" + +#: elf32-bfin.c:2825 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC referencía un símbolo dinámico con adición que no es cero" + +#: elf32-bfin.c:2866 elf32-bfin.c:2989 elf32-frv.c:3641 elf32-frv.c:3762 +msgid "cannot emit fixups in read-only section" +msgstr "no se pueden emitir composturas en la sección de sólo lectura" + +#: elf32-bfin.c:2897 elf32-bfin.c:3027 elf32-frv.c:3672 elf32-frv.c:3806 +#: elf32-lm32.c:1104 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "no se pueden emitir reubicaciones dinámicas en la sección de sólo lectura" + +#: elf32-bfin.c:2947 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC_VALUE referencía un símbolo dinámico con adición que no es cero" + +#: elf32-bfin.c:3112 +msgid "relocations between different segments are not supported" +msgstr "no se admiten las reubicaciones entre segmentos diferentes" + +#: elf32-bfin.c:3113 +msgid "warning: relocation references a different segment" +msgstr "aviso: la reubicación referencía un segmento diferente" + +#: elf32-bfin.c:4974 elf32-frv.c:6408 +msgid "%B: unsupported relocation type %i" +msgstr "%B: no se admite el tipo de reubicación %i" + +#: elf32-bfin.c:5127 elf32-frv.c:6816 +#, c-format +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: no se puede enlazar el fichero objeto que no es fdpic en un ejecutable fdpic" + +#: elf32-bfin.c:5131 elf32-frv.c:6820 +#, c-format +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: no se puede enlazar el fichero objeto fdpic en un ejecutable que no es fdpic" + +#: elf32-cris.c:1169 msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" msgstr "%B, sección %A: reubicación %s sin resolución contra el símbolo `%s'" -#: elf32-cris.c:1105 +#: elf32-cris.c:1238 msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" msgstr "%B, sección %A: No hay PLT ni GOT para la reubicación %s contra el símbolo `%s'" -#: elf32-cris.c:1107 +#: elf32-cris.c:1240 msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" msgstr "%B, sección %A: No hay PLT para la reubicación %s contra el símbolo `%s'" -#: elf32-cris.c:1113 elf32-cris.c:1245 +#: elf32-cris.c:1246 elf32-cris.c:1379 elf32-cris.c:1641 elf32-cris.c:1730 +#: elf32-cris.c:1883 msgid "[whose name is lost]" -msgstr "[cuyo nombre se pierde]" +msgstr "[cuyo nombre está perdido]" -#: elf32-cris.c:1231 +#: elf32-cris.c:1365 msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" msgstr "%B, sección %A: reubicación %s con adición %d que no es cero contra el símbolo local" -#: elf32-cris.c:1239 +#: elf32-cris.c:1373 elf32-cris.c:1724 elf32-cris.c:1877 msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" msgstr "%B, sección %A: reubicación %s con adición %d que no es cero contra el símbolo `%s'" -#: elf32-cris.c:1265 +#: elf32-cris.c:1399 msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" msgstr "%B, sección %A: no se permite la reubicación %s para el símbolo global: `%s'" -#: elf32-cris.c:1281 +#: elf32-cris.c:1415 msgid "%B, section %A: relocation %s with no GOT created" msgstr "%B, sección %A: la reubicación %s sin GOT creado" -#: elf32-cris.c:1399 -msgid "%B: Internal inconsistency; no relocation section %s" -msgstr "%B: Inconsistencia interna; no se encuentra la sección de reubicación %s" +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1632 +msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" +msgstr "%B, sección %A: la reubicación %s tiene una referencia sin definir a `%s', ¿tal vez una confusión en la declaración?" + +#: elf32-cris.c:2010 +msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" +msgstr "%B, sección %A: no se permite la reubicación %s para el símbolo: `%s' el cual se define fuera del programa, ¿tal vez una confusión en la declaración?" + +#: elf32-cris.c:2063 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "(demasiadas variables globales para -fpic: recompile con -fPIC)" -#: elf32-cris.c:2520 +#: elf32-cris.c:2070 +msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" +msgstr "(datos thread-local demasiado grandes para -fpic o -msmall-tls: recompile con -fPIC o -mno-small-tls)" + +#: elf32-cris.c:3204 msgid "" "%B, section %A:\n" " v10/v32 compatible object %s must not contain a PIC relocation" @@ -981,7 +1336,15 @@ msgstr "" "%B, sección %A:\n" " el objeto %s compatible con v10/v32 no debe contener una reubicación PIC" -#: elf32-cris.c:2707 elf32-cris.c:2775 +#: elf32-cris.c:3309 +msgid "" +"%B, section %A:\n" +" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" +msgstr "" +"%B, sección %A:\n" +" la reubicación %s no es válida en un objeto compartido; es una confusión de opción típica, recompile con -fPIC" + +#: elf32-cris.c:3523 msgid "" "%B, section %A:\n" " relocation %s should not be used in a shared object; recompile with -fPIC" @@ -989,784 +1352,1041 @@ msgstr "" "%B, sección %A:\n" " la reubicación %s no se debe usar en un objeto compartido; recompile con -fPIC" -#: elf32-cris.c:3192 +#: elf32-cris.c:3940 +msgid "" +"%B, section `%A', to symbol `%s':\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"%B, sección `%A', para el símbolo `%s':\n" +" la reubicación %s no se debe usar en un objeto compartido; recompile con -fPIC" + +#: elf32-cris.c:4059 msgid "Unexpected machine number" msgstr "Número de máquina inesperado" -#: elf32-cris.c:3246 +#: elf32-cris.c:4113 #, c-format msgid " [symbols have a _ prefix]" msgstr " [los símbolos tiene un prefijo _]" -#: elf32-cris.c:3249 +#: elf32-cris.c:4116 #, c-format msgid " [v10 and v32]" msgstr " [v10 y v32]" -#: elf32-cris.c:3252 +#: elf32-cris.c:4119 #, c-format msgid " [v32]" msgstr " [v32]" -#: elf32-cris.c:3297 +#: elf32-cris.c:4164 msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" -msgstr "%B: utiliza símbolos con prefijo _, pero escribe el fichero con símbolos sin prefijo" +msgstr "%B: se usan símbolos con prefijo _, pero se escribe el fichero con símbolos sin prefijo" -#: elf32-cris.c:3298 +#: elf32-cris.c:4165 msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" -msgstr "%B: utiliza símbolos sin prefijo, pero escribe el fichero con símbolos con prefijo _" +msgstr "%B: se usan símbolos sin prefijo, pero se escribe el fichero con símbolos con prefijo _" -#: elf32-cris.c:3317 +#: elf32-cris.c:4184 msgid "%B contains CRIS v32 code, incompatible with previous objects" msgstr "%B contiene código CRIS v32, incompatible con objetos previos" -#: elf32-cris.c:3319 +#: elf32-cris.c:4186 msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" msgstr "%B contiene código que no es CRIS v32, incompatible con objetos previos" -#: elf32-frv.c:1522 elf32-frv.c:1671 +#: elf32-frv.c:1507 elf32-frv.c:1656 msgid "relocation requires zero addend" msgstr "la reubicación requiere una adición cero" -#: elf32-frv.c:2901 +#: elf32-frv.c:2891 msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above" msgstr "%B(%A+0x%x): la reubicación a `%s+%x' tal vez causó el error anterior" -#: elf32-frv.c:2914 -msgid "relocation references symbol not defined in the module" -msgstr "la reubicación referencía un símbolo que no está definido en el módulo" - -#: elf32-frv.c:2990 +#: elf32-frv.c:2980 msgid "R_FRV_GETTLSOFF not applied to a call instruction" msgstr "no se aplicó R_FRV_GETTLSOFF a una instrucción call" -#: elf32-frv.c:3032 +#: elf32-frv.c:3022 msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction" msgstr "no se aplicó R_FRV_GOTTLSDESC12 a una instrucción lddi" -#: elf32-frv.c:3103 +#: elf32-frv.c:3093 msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction" msgstr "no se aplicó R_FRV_GOTTLSDESCHI a una instrucción sethi" -#: elf32-frv.c:3140 +#: elf32-frv.c:3130 msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction" msgstr "no se aplicó R_FRV_GOTTLSDESCLO a una instrucción setlo o setlos" -#: elf32-frv.c:3188 +#: elf32-frv.c:3178 msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction" msgstr "no se aplicó R_FRV_GOTTLSDESC_RELAX a una instrucción ldd" -#: elf32-frv.c:3272 +#: elf32-frv.c:3262 msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction" msgstr "no se aplicó R_FRV_GETTLSOFF_RELAX a una instrucción calll" -#: elf32-frv.c:3327 +#: elf32-frv.c:3317 msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction" msgstr "no se aplicó R_FRV_GOTTLSOFF12 a una instrucción ldi" -#: elf32-frv.c:3357 +#: elf32-frv.c:3347 msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction" msgstr "no se aplicó R_FRV_GOTTLSOFFHI a una instrucción sethi" -#: elf32-frv.c:3386 +#: elf32-frv.c:3376 msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction" msgstr "no se aplicó R_FRV_GOTTLSOFFLO a una instrucción setlo o setlos" -#: elf32-frv.c:3417 +#: elf32-frv.c:3407 msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction" msgstr "no se aplicó R_FRV_TLSOFF_RELAX a una instrucción ld" -#: elf32-frv.c:3462 +#: elf32-frv.c:3452 msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction" msgstr "no se aplicó R_FRV_TLSMOFFHI a una instrucción sethi" -#: elf32-frv.c:3489 +#: elf32-frv.c:3479 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction" msgstr "no se aplicó R_FRV_TLSMOFFLO a una instrucción setlo o setlos" -#: elf32-frv.c:3610 +#: elf32-frv.c:3600 msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend" msgstr "R_FRV_FUNCDESC referencía un símbolo dinámico con adición que no es cero" -#: elf32-frv.c:3649 elf32-frv.c:3762 -msgid "cannot emit fixups in read-only section" -msgstr "no se pueden emitir composturas en la sección de sólo lectura" - -#: elf32-frv.c:3675 elf32-frv.c:3802 -msgid "cannot emit dynamic relocations in read-only section" -msgstr "no se pueden emitri reubicaciones dinámicas en la sección de sólo lectura" - #: elf32-frv.c:3720 msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend" msgstr "R_FRV_FUNCDESC_VALUE referencía un símbolo dinámico con adición que no es cero" -#: elf32-frv.c:3970 elf32-frv.c:4126 +#: elf32-frv.c:3977 elf32-frv.c:4133 msgid "%B(%A+0x%lx): reloc against `%s': %s" msgstr "%B(%A+0x%lx): reubicación contra `%s': %s" -#: elf32-frv.c:3972 elf32-frv.c:3976 +#: elf32-frv.c:3979 elf32-frv.c:3983 msgid "relocation references a different segment" msgstr "la reubicación referencía un segmento diferente" -#: elf32-frv.c:6324 -msgid "%B: unsupported relocation type %i" -msgstr "%B: tipo de reubicación %i sin soporte" - -#: elf32-frv.c:6642 +#: elf32-frv.c:6730 #, c-format msgid "%s: compiled with %s and linked with modules that use non-pic relocations" msgstr "%s: compilado con %s y enlazado con módulos que usan reubicaciones que no son pic" -#: elf32-frv.c:6695 elf32-iq2000.c:801 elf32-m32c.c:785 +#: elf32-frv.c:6783 elf32-iq2000.c:852 elf32-m32c.c:814 #, c-format msgid "%s: compiled with %s and linked with modules compiled with %s" msgstr "%s: compilado con %s y enlazado con módulos compilados con %s" -#: elf32-frv.c:6707 -#, c-format -msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: usa campos e_flags desconocidos (0x%lx) diferentes a aquéllos de los módulos previos (0x%lx)" - -#: elf32-frv.c:6728 +#: elf32-frv.c:6795 #, c-format -msgid "%s: cannot link non-fdpic object file into fdpic executable" -msgstr "%s: enlazando código que no es fdpic en un ejecutable fdpic" - -#: elf32-frv.c:6732 -#, c-format -msgid "%s: cannot link fdpic object file into non-fdpic executable" -msgstr "%s: enlazando código fdpic en un ejecutable que no es fdpic" +msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: usa campos e_flags desconocidos (0x%lx) diferentes a aquéllos de los módulos previos (0x%lx)" -#: elf32-frv.c:6757 elf32-iq2000.c:838 elf32-m32c.c:821 elf32-ms1.c:596 +#: elf32-frv.c:6845 elf32-iq2000.c:889 elf32-m32c.c:850 elf32-mt.c:583 #, c-format msgid "private flags = 0x%lx:" msgstr "opciones privadas = 0x%lx:" -#: elf32-gen.c:68 elf64-gen.c:68 +#: elf32-gen.c:69 elf64-gen.c:69 msgid "%B: Relocations in generic ELF (EM: %d)" msgstr "%B: Reubicaciones en ELF genérico (EM: %d)" -#: elf32-hppa.c:569 elf32-m68hc1x.c:161 elf64-ppc.c:3660 -msgid "%B: cannot create stub entry %s" -msgstr "%B: no se puede crear la entrada de cabo %s" - -#: elf32-hppa.c:822 elf32-hppa.c:3411 +#: elf32-hppa.c:854 elf32-hppa.c:3570 msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" msgstr "%B(%A+0x%lx): no se puede alcanzar %s, recompile con -ffuntion-sections" -#: elf32-hppa.c:1212 +#: elf32-hppa.c:1286 msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" msgstr "%B: no se puede usar la reubicación %s cuando se hace un objeto compartido; recompile con -fPIC" -#: elf32-hppa.c:1405 -#, c-format -msgid "Could not find relocation section for %s" -msgstr "No se puede encontrar la sección de reubicación para %s" - -#: elf32-hppa.c:2677 +#: elf32-hppa.c:2780 msgid "%B: duplicate export stub %s" msgstr "%B: cabo de exportación %s duplicado" -#: elf32-hppa.c:3266 +#: elf32-hppa.c:3406 msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" -msgstr "%B(%A+0x%lx): la compostura %s para la insn 0x%x no tiene soporte en un enlazado que no es compartido" +msgstr "%B(%A+0x%lx): la compostura %s para la insn 0x%x no se admite en un enlazado que no es compartido" -#: elf32-hppa.c:3895 +#: elf32-hppa.c:4260 msgid "%B(%A+0x%lx): cannot handle %s for %s" msgstr "%B(%A+0x%lx): no se puede manejar %s para %s" -#: elf32-hppa.c:4189 +#: elf32-hppa.c:4567 msgid ".got section not immediately after .plt section" msgstr "la sección .got no está inmediatamente después de la sección .plt" -#: elf32-i386.c:327 elf32-s390.c:368 elf64-ppc.c:2124 elf64-s390.c:390 -#: elf64-x86-64.c:204 +#: elf32-i386.c:371 elf32-ppc.c:1666 elf32-s390.c:379 elf64-ppc.c:2283 +#: elf64-s390.c:403 elf64-x86-64.c:234 msgid "%B: invalid relocation type %d" msgstr "%B: tipo de reubicación %d inválido" -#: elf32-i386.c:1015 elf32-s390.c:1171 elf32-sh.c:6389 elf64-s390.c:1133 -#: elfxx-sparc.c:1144 -msgid "%B: `%s' accessed both as normal and thread local symbol" -msgstr "%B: se accesó `%s' como un símbolo normal y un símbolo local de hilo" +#: elf32-i386.c:1246 elf64-x86-64.c:1029 +msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" +msgstr "%B: falló la transición TLS de %s para %s contra `%s' en 0x%lx en la sección `%A'" -#: elf32-i386.c:1130 elf32-s390.c:1280 elf64-ppc.c:4731 elf64-s390.c:1245 -#: elf64-x86-64.c:910 -msgid "%B: bad relocation section name `%s'" -msgstr "%B: nombre de sección de reubicación `%s' erróneo" +#: elf32-i386.c:1387 elf32-i386.c:2970 elf64-x86-64.c:1171 elf64-x86-64.c:2680 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +msgstr "%B: la reubicación %s contra el símbolo STT_GNU_IFUNC `%s' no es manejada por %s" + +#: elf32-i386.c:1548 elf32-s390.c:1180 elf32-sh.c:5065 elf32-xtensa.c:1173 +#: elf64-s390.c:1143 elfxx-sparc.c:1257 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: se accedió `%s' como un símbolo normal y un símbolo local de hilo" -#: elf32-i386.c:2149 +#: elf32-i386.c:2805 msgid "%B: unrecognized relocation (0x%x) in section `%A'" msgstr "%B: no se reconoce la dirección de reubicación (0x%lx) en la sección `%A'" -#: elf32-i386.c:2409 +#: elf32-i386.c:3219 elf64-x86-64.c:3081 +msgid "hidden symbol" +msgstr "símbolo oculto" + +#: elf32-i386.c:3222 elf64-x86-64.c:3084 +msgid "internal symbol" +msgstr "símbolo interno" + +#: elf32-i386.c:3225 elf64-x86-64.c:3087 +msgid "protected symbol" +msgstr "símbolo protegido" + +#: elf32-i386.c:3228 elf64-x86-64.c:3090 +msgid "symbol" +msgstr "símbolo" + +#: elf32-i386.c:3233 +msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%B: no se puede usar la reubicación R_386_GOTOFF contra %s indefinida `%s' cuando se hace un objeto compartido" + +#: elf32-i386.c:3243 msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" msgstr "%B: no se puede usar la reubicación R_386_GOTOFF contra la función protegida `%s' cuando se hace un objeto compartido" -#: 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 "relajador ip2k: tabla switch sin información completa de reubicación de coincidencias." -#: elf32-ip2k.c:876 elf32-ip2k.c:959 +#: elf32-ip2k.c:891 elf32-ip2k.c:974 msgid "ip2k relaxer: switch table header corrupt." msgstr "relajador ip2k: encabezado de tabla switch corrupto." -#: elf32-ip2k.c:1301 +#: elf32-ip2k.c:1316 #, c-format msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "enlazador ip2k: instrucción de página faltante en 0x%08lx (dest = 0x%08lx)." +msgstr "enlazador ip2k: falta la instrucción de página en 0x%08lx (dest = 0x%08lx)." -#: elf32-ip2k.c:1317 +#: elf32-ip2k.c:1332 #, c-format msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." msgstr "enlazador ip2k: instrucción de página redundante en 0x%08lx (dest = 0x%08lx)." #. 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 "reubicación sin soporte entre espacios de direcciones datos/insn" +msgstr "no se admite la reubicación entre espacios de direcciones datos/insn" -#: elf32-iq2000.c:814 elf32-m32c.c:797 +#: elf32-iq2000.c:865 elf32-m32c.c:826 #, c-format msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" msgstr "%s: usa campos de e_flags diferentes (0x%lx) que los módulos previos (0x%lx)" -#: elf32-m32r.c:1436 +#: elf32-lm32.c:698 +msgid "global pointer relative relocation when _gp not defined" +msgstr "reubicación relativa al puntero global cuando _gp no está definido" + +#: elf32-lm32.c:753 +msgid "global pointer relative address out of range" +msgstr "dirección relativa al puntero global fuera de rango" + +#: elf32-lm32.c:1058 +msgid "internal error: addend should be zero for R_LM32_16_GOT" +msgstr "error interno: addend debe ser cero para R_LM32_16_GOT" + +#: elf32-m32r.c:1453 msgid "SDA relocation when _SDA_BASE_ not defined" msgstr "reubicación SDA cuando _SDA_BASE_ no está definido" -#: elf32-m32r.c:3048 +#: elf32-m32r.c:3039 msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" msgstr "%B: El objetivo (%s) de una reubicación %s está en la sección errónea (%A)" -#: elf32-m32r.c:3576 +#: elf32-m32r.c:3567 msgid "%B: Instruction set mismatch with previous modules" -msgstr "%B: Conjunto de instrucciones no coincidente con módulos previos" +msgstr "%B: El conjunto de instrucciones no coincide con módulos previos" -#: elf32-m32r.c:3597 +#: elf32-m32r.c:3588 #, c-format msgid "private flags = %lx" msgstr "opciones privadas = %lx" -#: elf32-m32r.c:3602 +#: elf32-m32r.c:3593 #, c-format msgid ": m32r instructions" msgstr ": instrucciones m32r" -#: elf32-m32r.c:3603 +#: elf32-m32r.c:3594 #, c-format msgid ": m32rx instructions" msgstr ": instrucciones m32rx" -#: elf32-m32r.c:3604 +#: elf32-m32r.c:3595 #, c-format msgid ": m32r2 instructions" msgstr ": instrucciones m32r2" -#: elf32-m68hc1x.c:1106 +#: elf32-m68hc1x.c:1048 #, c-format msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" -msgstr "Una referencia al símbolo far `%s' usando una reubicación incorrecta puede resultar en una ejecución incorrecta" +msgstr "El referenciar al símbolo far `%s' usando una reubicación incorrecta puede resultar en una ejecución incorrecta" -#: elf32-m68hc1x.c:1129 +#: elf32-m68hc1x.c:1071 #, c-format msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" msgstr "la dirección almacenada [%lx:%04lx] (%lx) no está en el mismo banco que la dirección almacenada actual [%lx:%04lx] (%lx)" -#: elf32-m68hc1x.c:1148 +#: elf32-m68hc1x.c:1090 #, c-format msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" msgstr "referencia a una dirección almacenada [%lx:%04lx] en el espacio normal de direcciones en %04lx" -#: elf32-m68hc1x.c:1281 +#: elf32-m68hc1x.c:1223 msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" -msgstr "%B: enlazando ficheros compilados con enteros de 16-bit (-mshort) y otros con enteros de 32-bit" +msgstr "%B: se enlazan ficheros compilados con enteros de 16-bit (-mshort) y otros con enteros de 32-bit" -#: elf32-m68hc1x.c:1288 +#: elf32-m68hc1x.c:1230 msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" -msgstr "%B: enlazando ficheros compilados con dobles de 32-bit (-fshort-double) y otros con dobles de 64-bit" +msgstr "%B: se enlazan ficheros compilados con dobles de 32-bit (-fshort-double) y otros con dobles de 64-bit" -#: elf32-m68hc1x.c:1297 +#: elf32-m68hc1x.c:1239 msgid "%B: linking files compiled for HCS12 with others compiled for HC12" -msgstr "%B: enlazando ficheros compilados para HCS12, con otros compilados para HC12" +msgstr "%B: se enlazan ficheros compilados para HCS12, con otros compilados para HC12" -#: elf32-m68hc1x.c:1313 elf32-ppc.c:3576 elf64-sparc.c:696 elfxx-mips.c:9894 +#: elf32-m68hc1x.c:1255 elf32-ppc.c:4255 elf64-sparc.c:698 elfxx-mips.c:12617 msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" msgstr "%B: usa campos de e_flags diferentes (0x%lx) que los módulos previos (0x%lx)" -#: elf32-m68hc1x.c:1341 +#: elf32-m68hc1x.c:1283 #, c-format msgid "[abi=32-bit int, " msgstr "[abi=int de 32-bit, " -#: elf32-m68hc1x.c:1343 +#: elf32-m68hc1x.c:1285 #, c-format msgid "[abi=16-bit int, " msgstr "[abi=int de 16-bit, " -#: elf32-m68hc1x.c:1346 +#: elf32-m68hc1x.c:1288 #, c-format msgid "64-bit double, " msgstr "doble de 64-bit, " -#: elf32-m68hc1x.c:1348 +#: elf32-m68hc1x.c:1290 #, c-format msgid "32-bit double, " msgstr "doble de 32-bit, " -#: elf32-m68hc1x.c:1351 +#: elf32-m68hc1x.c:1293 #, c-format msgid "cpu=HC11]" msgstr "cpu=HC11]" -#: elf32-m68hc1x.c:1353 +#: elf32-m68hc1x.c:1295 #, c-format msgid "cpu=HCS12]" msgstr "cpu=HCS12]" -#: elf32-m68hc1x.c:1355 +#: elf32-m68hc1x.c:1297 #, c-format msgid "cpu=HC12]" msgstr "cpu=HC12]" -#: elf32-m68hc1x.c:1358 +#: elf32-m68hc1x.c:1300 #, c-format msgid " [memory=bank-model]" msgstr " [memoria=modelo de bancos]" -#: elf32-m68hc1x.c:1360 +#: elf32-m68hc1x.c:1302 #, c-format msgid " [memory=flat]" msgstr " [memoria=plana]" -#: elf32-m68k.c:431 -#, c-format -msgid " [cpu32]" -msgstr " [cpu32]" +#: elf32-m68k.c:1184 elf32-m68k.c:1185 +msgid "unknown" +msgstr "desconocido" -#: elf32-m68k.c:434 -#, c-format -msgid " [m68000]" -msgstr " [m68000]" +#: elf32-m68k.c:1645 +msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" +msgstr "%B: desbordamiento de GOT: Número de reubicaciones con desplazamiento de 8-bit > %d" + +#: elf32-m68k.c:1651 +msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" +msgstr "%B: desbordamiento de GOT: Número de reubicaciones con desplazamiento de 8 o 16-bit > %d" + +#: elf32-m68k.c:3902 +msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): la reubicación R_68K_TLS_LE32 no se permite en objetos compartidos" -#: elf32-mcore.c:98 elf32-mcore.c:428 +#: elf32-mcore.c:99 elf32-mcore.c:442 msgid "%B: Relocation %s (%d) is not currently supported.\n" -msgstr "%B: La reubicación %s (%d) actualmente no tiene soporte.\n" +msgstr "%B: Actualmente no se admite la reubicación %s (%d).\n" -#: elf32-mcore.c:414 +#: elf32-mcore.c:428 msgid "%B: Unknown relocation type %d\n" msgstr "%B: Tipo de reubicación %d desconocido\n" -#: elf32-mips.c:971 elf64-mips.c:1929 elfn32-mips.c:1774 +#: elf32-mep.c:654 +msgid "%B and %B are for different cores" +msgstr "%B y %B son para núcleos diferentes" + +#: elf32-mep.c:671 +msgid "%B and %B are for different configurations" +msgstr "%B y %B son para configuraciones diferentes" + +#: elf32-mep.c:708 +#, c-format +msgid "private flags = 0x%lx" +msgstr "opciones privadas = 0x%lx" + +#: elf32-microblaze.c:737 +#, c-format +msgid "%s: unknown relocation type %d" +msgstr "%s: tipo de reubicación %d desconocido" + +#: elf32-microblaze.c:862 elf32-microblaze.c:907 +#, c-format +msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +msgstr "%s: El objetivo (%s) de una reubicación %s está en la sección errónea (%s)" + +#: elf32-microblaze.c:1150 elfxx-sparc.c:2957 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: ¿Compilado probablemente sin -fPIC?" + +#: elf32-microblaze.c:2086 elflink.c:12444 +msgid "%B: bad relocation section name `%s'" +msgstr "%B: nombre de sección de reubicación `%s' erróneo" + +#: elf32-mips.c:1045 elf64-mips.c:2083 elfn32-mips.c:1888 msgid "literal relocation occurs for an external symbol" msgstr "la reubicación literal sucede para un símbolo externo" -#: elf32-mips.c:1011 elf64-mips.c:1972 elfn32-mips.c:1815 +#: elf32-mips.c:1085 elf32-score.c:580 elf32-score7.c:480 elf64-mips.c:2126 +#: elfn32-mips.c:1929 msgid "32bits gp relative relocation occurs for an external symbol" -msgstr "la reubicación gp relativa de 32bits sucede para un símbolo externo" - -#: elf32-mips.c:1134 elf64-mips.c:2066 elfn32-mips.c:1915 -#, c-format -msgid "Linking mips16 objects into %s format is not supported" -msgstr "Enlazar objetos mips16 en el formato %s no tiene soporte" +msgstr "la reubicación relativa a gp de 32bits sucede para un símbolo externo" -#: elf32-ppc.c:1652 +#: elf32-ppc.c:1731 #, c-format msgid "generic linker can't handle %s" msgstr "el enlazador genérico no puede manejar %s" -#: elf32-ppc.c:2080 +#: elf32-ppc.c:2211 msgid "corrupt or empty %s section in %B" msgstr "sección %s corrupta o vacía en %B" -#: elf32-ppc.c:2087 +#: elf32-ppc.c:2218 msgid "unable to read in %s section from %B" msgstr "no se puede leer en la sección %s desde %B" -#: elf32-ppc.c:2093 +#: elf32-ppc.c:2224 msgid "corrupt %s section in %B" msgstr "sección %s corrupta en %B" -#: elf32-ppc.c:2136 +#: elf32-ppc.c:2267 msgid "warning: unable to set size of %s section in %B" msgstr "aviso: no se puede establecer el tamaño de la sección %s en %B" -#: elf32-ppc.c:2183 +#: elf32-ppc.c:2315 msgid "failed to allocate space for new APUinfo section." msgstr "no se puede reservar espacio para la nueva sección APUinfo." -#: elf32-ppc.c:2202 +#: elf32-ppc.c:2334 msgid "failed to compute new APUinfo section." msgstr "no se puede calcular la nueva sección APUinfo." -#: elf32-ppc.c:2205 +#: elf32-ppc.c:2337 msgid "failed to install new APUinfo section." msgstr "no se puede instalar la nueva sección APUinfo." -#: elf32-ppc.c:2941 +#: elf32-ppc.c:3364 msgid "%B: relocation %s cannot be used when making a shared object" msgstr "%B: no se puede usar la reubicación %s cuando se hace un objeto compartido" #. It does not make sense to have a procedure linkage #. table entry for a local symbol. -#: elf32-ppc.c:3211 +#: elf32-ppc.c:3723 msgid "%B(%A+0x%lx): %s reloc against local symbol" msgstr "%B(%A+0x%lx): reubicación %s contra un símbolo local" -#: elf32-ppc.c:3541 +#: elf32-ppc.c:4067 elf32-ppc.c:4082 elfxx-mips.c:12324 elfxx-mips.c:12350 +#: elfxx-mips.c:12372 elfxx-mips.c:12398 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Aviso: %B usa coma flotante hard, %B usa coma flotante soft" + +#: elf32-ppc.c:4070 elf32-ppc.c:4074 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Aviso: %B usa coma flotante hard de doble precisión, %B usa coma flotante hard de precisión simple" + +#: elf32-ppc.c:4078 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Aviso: %B usa coma flotante soft, %B usa coma flotante hard de precisión simple" + +#: elf32-ppc.c:4085 elf32-ppc.c:4089 elfxx-mips.c:12304 elfxx-mips.c:12308 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Aviso: %B usa la ABI de coma flotante desconocida %d" + +#: elf32-ppc.c:4131 elf32-ppc.c:4135 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Aviso: %B usa la ABI de vector desconocida %d" + +#: elf32-ppc.c:4139 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Aviso: %B usa la ABI de vector \"%s\", %B usa \"%s\"" + +#: elf32-ppc.c:4156 elf32-ppc.c:4159 +msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" +msgstr "Aviso: %B usa r3/r4 para devoluciones de estructura small, %B usa memoria" + +#: elf32-ppc.c:4162 elf32-ppc.c:4166 +msgid "Warning: %B uses unknown small structure return convention %d" +msgstr "Aviso: %B usa la convención de devolución de estructura small %d" + +#: elf32-ppc.c:4220 msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" msgstr "%B: compilado con -mrelocatable y enlazado con módulos compilados de forma normal" -#: elf32-ppc.c:3549 +#: elf32-ppc.c:4228 msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" msgstr "%B: compilado de forma normal y enlazado con módulos compilados con -mrelocatable" -#: elf32-ppc.c:5768 elf64-ppc.c:10186 +#: elf32-ppc.c:4314 +msgid "Using bss-plt due to %B" +msgstr "Se usa bss-plt debido a %B" + +#: elf32-ppc.c:7056 elf64-ppc.c:11364 msgid "%B: unknown relocation type %d for symbol %s" msgstr "%B: tipo de reubicación %d desconocido para el símbolo %s" -#: elf32-ppc.c:6018 +#: elf32-ppc.c:7316 msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" msgstr "%B(%A+0x%lx): adición que no es cero en la reubicación %s contra `%s'" -#: elf32-ppc.c:6365 elf32-ppc.c:6391 elf32-ppc.c:6450 +#: elf32-ppc.c:7499 elf64-ppc.c:11854 +msgid "%B(%A+0x%lx): relocation %s for indirect function %s unsupported" +msgstr "%B(%A+0x%lx): no se admite la reubicación %s para la función indirecta %s" + +#: elf32-ppc.c:7709 elf32-ppc.c:7736 elf32-ppc.c:7787 msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" msgstr "%B: el objetivo (%s) de una reubicación %s está en la sección de salida errónea (%s)" -#: elf32-ppc.c:6505 +#: elf32-ppc.c:7847 msgid "%B: relocation %s is not yet supported for symbol %s." -msgstr "%B: la reubicación %s aún no tiene soporte para el símbolo %s." +msgstr "%B: la reubicación %s aún no se admite para el símbolo %s." -#: elf32-ppc.c:6610 elf64-ppc.c:10872 +#: elf32-ppc.c:7955 elf64-ppc.c:12110 msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" msgstr "%B(%A+0x%lx): reubicación %s contra `%s': error %d" -#: elf32-s390.c:2253 elf64-s390.c:2225 +#: elf32-ppc.c:8423 +#, c-format +msgid "%s not defined in linker created %s" +msgstr "no se definió %s en el %s creado por el enlazador" + +#: elf32-s390.c:2207 elf64-s390.c:2179 msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" msgstr "%B(%A+0x%lx): instrucción inválida para la reubicación TLS %s" -#: elf32-sh64.c:218 elf64-sh64.c:2322 -#, c-format -msgid "%s: compiled as 32-bit object and %s is 64-bit" -msgstr "%s: compilado como un objeto de 32-bit y %s es de 64-bit" - -#: elf32-sh64.c:221 elf64-sh64.c:2325 -#, c-format -msgid "%s: compiled as 64-bit object and %s is 32-bit" -msgstr "%s: compilado como un objeto de 64-bit y %s es de 32-bit" +#: elf32-score.c:1533 elf32-score7.c:1424 elfxx-mips.c:3299 +msgid "not enough GOT space for local GOT entries" +msgstr "no hay suficiente espacio GOT para entradas GOT locales" -#: elf32-sh64.c:223 elf64-sh64.c:2327 -#, c-format -msgid "%s: object size does not match that of target %s" -msgstr "%s: el tamaño del objeto no coincide con el tamaño del objetivo %s" +#: elf32-score.c:2765 +msgid "address not word align" +msgstr "la dirección no está alineada a word" -#: elf32-sh64.c:446 elf64-sh64.c:2899 +#: elf32-score.c:2850 elf32-score7.c:2685 #, c-format -msgid "%s: encountered datalabel symbol in input" -msgstr "%s: se encontró un símbolo datalabel en la entrada" +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: Se detectó una reubicación malformada para la sección %s" -#: elf32-sh64.c:523 -msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" -msgstr "No coincide PTB: una dirección SHmedia (bit 0 == 1)" +#: elf32-score.c:2901 elf32-score7.c:2736 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: la reubicación CALL15 en 0x%lx no es contra un símbolo global" -#: elf32-sh64.c:526 -msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" -msgstr "No coincide PTA: una dirección SHcompact (bit 0 == 0)" +#: elf32-score.c:4042 elf32-score7.c:3879 +#, c-format +msgid " [pic]" +msgstr " [pic]" -#: elf32-sh64.c:544 +#: elf32-score.c:4046 elf32-score7.c:3883 #, c-format -msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" -msgstr "%s: error de GAS: instrucción PTB inesperada con R_SH_PT_16" +msgid " [fix dep]" +msgstr " [fix dep]" -#: elf32-sh64.c:593 -msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" -msgstr "%B: error: tipo de reubicación %d sin alinear en %08x reubicación %p\n" +#: elf32-score.c:4088 elf32-score7.c:3925 +msgid "%B: warning: linking PIC files with non-PIC files" +msgstr "%B: aviso: se enlazan ficheros PIC con ficheros que no son PIC" -#: elf32-sh64.c:669 -#, c-format -msgid "%s: could not write out added .cranges entries" -msgstr "%s: no se pueden escribir las entradas .cranges agregadas" +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +msgstr "%B: la directiva IMPORT AS para %s oculta un IMPORT AS previo" -#: elf32-sh64.c:729 -#, c-format -msgid "%s: could not write out sorted .cranges entries" -msgstr "%s: no se pueden escribir las entradas .cranges ordenadas" +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: No se reconoce la orden .directive: %s" -#: elf32-sh.c:2176 +#: elf32-sh-symbian.c:503 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Falló al agregar el símbolo renombrado %s" + +#: elf32-sh.c:533 msgid "%B: 0x%lx: warning: bad R_SH_USES offset" msgstr "%B: 0x%lx: aviso: desplazamiento R_SH_USES erróneo" -#: elf32-sh.c:2188 +#: elf32-sh.c:545 msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" -msgstr "%B: 0x%lx: aviso: R_SH_USES señala al insn 0x%x no reconocido" +msgstr "%B: 0x%lx: aviso: R_SH_USES señala al insn 0x%x que no se reconoce" -#: elf32-sh.c:2205 +#: elf32-sh.c:562 msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" msgstr "%B: 0x%lx: aviso: desplazamiento de carga R_SH_USES erróneo" -#: elf32-sh.c:2220 +#: elf32-sh.c:577 msgid "%B: 0x%lx: warning: could not find expected reloc" msgstr "%B: 0x%lx: aviso: no se puede encontrar la reubicación esperada" -#: elf32-sh.c:2248 +#: elf32-sh.c:605 msgid "%B: 0x%lx: warning: symbol in unexpected section" msgstr "%B: 0x%lx: aviso: símbolo en una sección inesperada" -#: elf32-sh.c:2361 +#: elf32-sh.c:731 msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" msgstr "%B: 0x%lx: aviso: no se puede encontrar la reubicación COUNT esperada" -#: elf32-sh.c:2370 +#: elf32-sh.c:740 msgid "%B: 0x%lx: warning: bad count" msgstr "%B: 0x%lx: aviso: cuenta errónea" -#: elf32-sh.c:2765 elf32-sh.c:3135 +#: elf32-sh.c:1144 elf32-sh.c:1514 msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" msgstr "%B: 0x%lx: fatal: desbordamiento de reubicación durante la relajación" -#: elf32-sh.c:4566 elf64-sh64.c:1509 +#: elf32-sh.c:3270 elf64-sh64.c:1526 msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" msgstr "No se maneja un STO_SH5_ISA32 inesperado en un símbolo local" -#: elf32-sh.c:4791 +#: elf32-sh.c:3507 msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" msgstr "%B: 0x%lx: fatal: objetivo de ramificación sin alineación para la reubicación de soporte de relajamiento" -#: elf32-sh.c:4824 elf32-sh.c:4839 +#: elf32-sh.c:3540 elf32-sh.c:3555 msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" msgstr "%B: 0x%lx: fatal: reubicación %s sin alineación 0x%lx" -#: elf32-sh.c:4853 +#: elf32-sh.c:3569 msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" msgstr "%B: 0x%lx: fatal: la reubicación R_SH_PSHA %d no está en el rango -32..32" -#: elf32-sh.c:4867 +#: elf32-sh.c:3583 msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" msgstr "%B: 0x%lx: fatal: la reubicación R_SH_PSHL %d no está en el rango -32..32" -#: elf32-sh.c:6601 elf64-alpha.c:4466 +#: elf32-sh.c:5256 elf64-alpha.c:4525 msgid "%B: TLS local exec code cannot be linked into shared objects" msgstr "%B: el código de ejecución local TLS no se puede enlazar en objetos compartidos" -#: elf32-sh-symbian.c:128 -msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" -msgstr "%B: la directiva IMPORT AS para %s oculta un IMPORT AS previo" +#: elf32-sh64.c:222 elf64-sh64.c:2333 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: compilado como un objeto de 32-bit y %s es de 64-bit" -#: elf32-sh-symbian.c:381 -msgid "%B: Unrecognised .directive command: %s" -msgstr "%B: Orden .directive no reconocida: %s" +#: elf32-sh64.c:225 elf64-sh64.c:2336 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: compilado como un objeto de 64-bit y %s es de 32-bit" -#: elf32-sh-symbian.c:502 -msgid "%B: Failed to add renamed symbol %s" -msgstr "%B: Falló al agregar el símbolo renombrado %s" +#: elf32-sh64.c:227 elf64-sh64.c:2338 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: el tamaño del objeto no coincide con el tamaño del objetivo %s" + +#: elf32-sh64.c:450 elf64-sh64.c:2852 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: se encontró un símbolo datalabel en la entrada" + +#: elf32-sh64.c:527 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "No coincide PTB: una dirección SHmedia (bit 0 == 1)" + +#: elf32-sh64.c:530 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "No coincide PTA: una dirección SHcompact (bit 0 == 0)" + +#: elf32-sh64.c:548 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: error de GAS: insn PTB inesperada con R_SH_PT_16" + +#: elf32-sh64.c:597 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: error: tipo de reubicación %d sin alinear en %08x reubicación %p\n" + +#: elf32-sh64.c:673 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "%s: no se pueden escribir las entradas .cranges agregadas" + +#: elf32-sh64.c:733 +#, c-format +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: no se pueden escribir las entradas .cranges ordenadas" -#: elf32-sparc.c:87 +#: elf32-sparc.c:89 msgid "%B: compiled for a 64 bit system and target is 32 bit" msgstr "%B: compilado para un sistema de 64 bit y el objetivo es de 32 bit" -#: elf32-sparc.c:100 +#: elf32-sparc.c:102 msgid "%B: linking little endian files with big endian files" -msgstr "%B: enlazando ficheros little endian con ficheros big endian" +msgstr "%B: se enlazan ficheros little endian con ficheros big endian" + +#: elf32-spu.c:723 +msgid "%X%P: overlay section %A does not start on a cache line.\n" +msgstr "%X%P: la sección de sobreescritura %A no inicia en una línea de caché.\n" + +#: elf32-spu.c:731 +msgid "%X%P: overlay section %A is larger than a cache line.\n" +msgstr "%X%P: la sección de sobreescritura %A es más grande que una línea de caché.\n" + +#: elf32-spu.c:751 +msgid "%X%P: overlay section %A is not in cache area.\n" +msgstr "%X%P: la sección de sobreescritura %A no está en el área de caché.\n" + +#: elf32-spu.c:791 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "%X%P: las secciones de sobreescritura %A y %A no inician en la misma dirección.\n" + +#: elf32-spu.c:1015 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "aviso: se llama al símbolo %s que no es función, definido en %B" + +#: elf32-spu.c:1365 +msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "%A:0x%v lrlive .brinfo (%u) difiere del análisis (%u)\n" + +#: elf32-spu.c:1884 +msgid "%B is not allowed to define %s" +msgstr "%B no tiene permitido definir %s" + +#: elf32-spu.c:1892 +#, c-format +msgid "you are not allowed to define %s in a script" +msgstr "no se le permite definir %s en un guión" + +#: elf32-spu.c:1926 +#, c-format +msgid "%s in overlay section" +msgstr "%s en la sección de sobreescritura" + +#: elf32-spu.c:1955 +msgid "overlay stub relocation overflow" +msgstr "desbordamiento de la reubicación de cabo de sobreescritura" + +#: elf32-spu.c:1964 elf64-ppc.c:10441 +msgid "stubs don't match calculated size" +msgstr "los cabos no coinciden con el tamaño calculado" + +#: elf32-spu.c:2546 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "aviso: %s sobreescribe %s\n" + +#: elf32-spu.c:2562 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "aviso: %s excede el tamaño de la sección\n" + +#: elf32-spu.c:2593 +msgid "%A:0x%v not found in function table\n" +msgstr "%A:0x%v no se encuentra en la tabla de función\n" + +#: elf32-spu.c:2740 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" +msgstr "%B(%A+0x%v): se llama a la sección %B(%A) que no es de código, análisis incompleto\n" + +#: elf32-spu.c:3297 +#, c-format +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "El análisis de pila descartará la llamada de %s a %s\n" + +#: elf32-spu.c:3988 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3989 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3994 +msgid " calls:\n" +msgstr " llama:\n" + +#: elf32-spu.c:4002 +#, c-format +msgid " %s%s %s\n" +msgstr " %s%s %s\n" + +#: elf32-spu.c:4304 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "%s duplicado en %s\n" + +#: elf32-spu.c:4308 +#, c-format +msgid "%s duplicated\n" +msgstr "%s duplicado\n" + +#: elf32-spu.c:4315 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "perdón, no se admiten ficheros objeto duplicados en el guión de sobreescritura automática\n" + +#: elf32-spu.c:4356 +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "eltamaño 0x%v que no es de sobreescritura mas el tamaño de sobreescritura máximo de 0x%v excede el almacenamiento local\n" + +#: elf32-spu.c:4512 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "%B:%A%s excede el tamaño de sobreescritura\n" + +#: elf32-spu.c:4669 +msgid "Stack size for call graph root nodes.\n" +msgstr "Tamaño de la pila para los nodos raíz del grafo de llamadas.\n" + +#: elf32-spu.c:4670 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Tamaño de la pila para funciones. Anotaciones: '*' max de pila, 't' llamada cola\n" + +#: elf32-spu.c:4680 +msgid "Maximum stack required is 0x%v\n" +msgstr "La pila máxima requerida es 0x%v\n" + +#: elf32-spu.c:4771 +msgid "fatal error while creating .fixup" +msgstr "error fatal al crear .fixup" -#: elf32-v850.c:160 +#: elf32-spu.c:5009 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s+0x%lx): reubicación %s sin resolución contra el símbolo `%s'" + +#: elf32-v850.c:163 #, c-format msgid "Variable `%s' cannot occupy in multiple small data regions" msgstr "La variable `%s' no puede ocupar múltiples regiones de datos small" -#: elf32-v850.c:163 +#: elf32-v850.c:166 #, c-format msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" -msgstr "La variable `%s' solamente puede estar en una de las regiones de datos small, cero, y tiny" +msgstr "La variable `%s' solamente puede estar en una de las regiones de datos small, zero, y tiny" -#: elf32-v850.c:166 +#: elf32-v850.c:169 #, c-format msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" -msgstr "La variable `%s' no puede estar simultáneamente en las regiones de datos small y cero" +msgstr "La variable `%s' no puede estar simultáneamente en las regiones de datos small y zero" -#: elf32-v850.c:169 +#: elf32-v850.c:172 #, c-format msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" msgstr "La variable `%s' no puede estar simultáneamente en las regiones de datos small y tiny" -#: elf32-v850.c:172 +#: elf32-v850.c:175 #, c-format msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" -msgstr "La variable `%s' no puede estar simultáneamente en las regiones de datos cero y tiny" +msgstr "La variable `%s' no puede estar simultáneamente en las regiones de datos zero y tiny" -#: elf32-v850.c:475 +#: elf32-v850.c:478 #, c-format msgid "FAILED to find previous HI16 reloc\n" msgstr "FALLO para encontrar la reubicación HI16 previa\n" -#: elf32-v850.c:1684 +#: elf32-v850.c:1713 msgid "could not locate special linker symbol __gp" msgstr "no se puede localizar el símbolo especial del enlazador __gp" -#: elf32-v850.c:1688 +#: elf32-v850.c:1717 msgid "could not locate special linker symbol __ep" msgstr "no se puede localizar el símbolo especial del enlazador __ep" -#: elf32-v850.c:1692 +#: elf32-v850.c:1721 msgid "could not locate special linker symbol __ctbp" msgstr "no se puede localizar el símbolo especial del enlazador __ctbp" -#: elf32-v850.c:1870 +#: elf32-v850.c:1871 msgid "%B: Architecture mismatch with previous modules" msgstr "%B: No coincide la arquitectura con los módulos previos" -#: elf32-v850.c:1889 +#: elf32-v850.c:1890 #, c-format msgid "private flags = %lx: " msgstr "opciones privadas = %lx: " -#: elf32-v850.c:1894 +#: elf32-v850.c:1895 #, c-format msgid "v850 architecture" msgstr "arquitectura v850" -#: elf32-v850.c:1895 +#: elf32-v850.c:1896 #, c-format msgid "v850e architecture" msgstr "arquitectura v850e" -#: elf32-v850.c:1896 +#: elf32-v850.c:1897 #, c-format msgid "v850e1 architecture" msgstr "arquitectura v850e1" -#: elf32-vax.c:531 +#: elf32-vax.c:543 #, c-format msgid " [nonpic]" msgstr " [no pic]" -#: elf32-vax.c:534 +#: elf32-vax.c:546 #, c-format msgid " [d-float]" msgstr " [flotante-d]" -#: elf32-vax.c:537 +#: elf32-vax.c:549 #, c-format msgid " [g-float]" msgstr " [flotante-g]" -#: elf32-vax.c:647 +#: elf32-vax.c:666 #, c-format msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" msgstr "%s: aviso: la adición GOT de %ld a `%s' no coincide con la adición previa GOT de %ld" -#: elf32-vax.c:1604 +#: elf32-vax.c:1608 #, c-format msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" -msgstr "%s: aviso: se ignora la adición PLT de %d a `%s' de la sección %s" +msgstr "%s: aviso: se descarta la adición PLT de %d a `%s' de la sección %s" -#: elf32-vax.c:1728 +#: elf32-vax.c:1735 #, c-format msgid "%s: warning: %s relocation against symbol `%s' from %s section" msgstr "%s: aviso: reubicación %s contra el símbolo `%s' de la sección %s" -#: elf32-vax.c:1734 +#: elf32-vax.c:1741 #, c-format msgid "%s: warning: %s relocation to 0x%x from %s section" msgstr "%s: aviso: reubicación %s a 0x%x de la sección %s" -#: elf32-xstormy16.c:425 elf32-ia64.c:2563 elf64-ia64.c:2563 +#: elf32-xstormy16.c:451 elf32-ia64.c:2791 elf64-ia64.c:2791 msgid "non-zero addend in @fptr reloc" msgstr "adición que no es cero en la reubicación @fptr" -#: elf32-xtensa.c:705 +#: elf32-xtensa.c:912 msgid "%B(%A): invalid property table" msgstr "%B(%A): tabla de propiedades inválida" -#: elf32-xtensa.c:2199 +#: elf32-xtensa.c:2740 msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" msgstr "%B(%A+0x%lx): desplazamiento de reubicación fuera de rango (tamaño=0x%x)" -#: elf32-xtensa.c:2256 +#: elf32-xtensa.c:2819 elf32-xtensa.c:2940 msgid "dynamic relocation in read-only section" msgstr "reubicación dinámica en la sección de sólo lectura" -#: elf32-xtensa.c:2421 +#: elf32-xtensa.c:2916 +msgid "TLS relocation invalid without dynamic sections" +msgstr "reubicación TLS inválida sin secciones dinámicas" + +#: elf32-xtensa.c:3133 msgid "internal inconsistency in size of .got.loc section" msgstr "inconsistencia interna en el tamaño de la sección .got.loc" -#: elf32-xtensa.c:2735 +#: elf32-xtensa.c:3443 msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" msgstr "%B: tipo de máquina incompatible. La salida es 0x%x. La entrada es 0x%x" -#: elf32-xtensa.c:3881 elf32-xtensa.c:3889 +#: elf32-xtensa.c:4672 elf32-xtensa.c:4680 msgid "Attempt to convert L32R/CALLX to CALL failed" msgstr "Falló el intento de convertir L32R/CALLX a CALL" -#: elf32-xtensa.c:5467 elf32-xtensa.c:5543 elf32-xtensa.c:6496 -#: elf32-xtensa.c:6550 +#: elf32-xtensa.c:6290 elf32-xtensa.c:6366 elf32-xtensa.c:7486 msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" msgstr "%B(%A+0x%lx): no se puede decodificar la instrucción; posible falta de coincidencia de la configuración" -#: elf32-xtensa.c:6369 elf32-xtensa.c:6532 +#: elf32-xtensa.c:7226 msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" msgstr "%B(%A+0x%lx): no se puede decodificar la instrucción para la reubicación XTENSA_ASM_SIMPLIFY; posible falta de coincidencia de la configuración" -#: elf32-xtensa.c:7855 +#: elf32-xtensa.c:8987 msgid "invalid relocation address" msgstr "dirección de reubicación inválida" -#: elf32-xtensa.c:7904 +#: elf32-xtensa.c:9036 msgid "overflow after relaxation" msgstr "desbordamiento después de la relajación" -#: elf32-xtensa.c:9032 +#: elf32-xtensa.c:10167 msgid "%B(%A+0x%lx): unexpected fix for %s relocation" msgstr "%B(%A+0x%lx): compostura inesperada para la reubicación %s" -#: elf64-alpha.c:443 +#: elf64-alpha.c:452 msgid "GPDISP relocation did not find ldah and lda instructions" msgstr "la reubicación GPDISP no encontró las instrucciones ldah y lda" -#: elf64-alpha.c:2363 +#: elf64-alpha.c:2389 msgid "%B: .got subsegment exceeds 64K (size %d)" msgstr "%B: el subsegmento .got excede los 64K (tamaño %d)" -#: elf64-alpha.c:4210 elf64-alpha.c:4222 +#: elf64-alpha.c:4269 elf64-alpha.c:4281 msgid "%B: gp-relative relocation against dynamic symbol %s" -msgstr "%B: reubicación gp relativa contra el símbolo dinámico %s" +msgstr "%B: reubicación relativa a gp contra el símbolo dinámico %s" -#: elf64-alpha.c:4248 elf64-alpha.c:4383 +#: elf64-alpha.c:4307 elf64-alpha.c:4442 msgid "%B: pc-relative relocation against dynamic symbol %s" -msgstr "%B: reubicación relativa al pc contra el símbolo dinámico %s" +msgstr "%B: reubicación relativa a pc contra el símbolo dinámico %s" -#: elf64-alpha.c:4276 +#: elf64-alpha.c:4335 msgid "%B: change in gp: BRSGP %s" msgstr "%B: cambio en gp: BRSGP %s" -#: elf64-alpha.c:4301 +#: elf64-alpha.c:4360 msgid "" msgstr "" -#: elf64-alpha.c:4306 +#: elf64-alpha.c:4365 msgid "%B: !samegp reloc against symbol without .prologue: %s" msgstr "%B: reubicación !samegp contra un símbolo sin .prologue: %s" -#: elf64-alpha.c:4358 +#: elf64-alpha.c:4417 msgid "%B: unhandled dynamic relocation against %s" msgstr "%B: reubicación dinámica sin manejar contra %s" -#: elf64-alpha.c:4390 +#: elf64-alpha.c:4449 msgid "%B: pc-relative relocation against undefined weak symbol %s" -msgstr "%B: reubicación relativa al pc contra el símbolo débil sin definir %s" +msgstr "%B: reubicación relativa a pc contra el símbolo débil sin definir %s" -#: elf64-alpha.c:4450 +#: elf64-alpha.c:4509 msgid "%B: dtp-relative relocation against dynamic symbol %s" msgstr "%B: reubicación relativa a dtp contra el símbolo dinámico %s" -#: elf64-alpha.c:4473 +#: elf64-alpha.c:4532 msgid "%B: tp-relative relocation against dynamic symbol %s" msgstr "%B: reubicación relativa a tp contra el símbolo dinámico %s" -#: elf64-hppa.c:2046 +#: elf64-hppa.c:2091 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %ld" msgstr "la entrada de cabo para %s no puede cargar .plt, desplazamiento dp = %ld" -#: elf64-mmix.c:1163 +#: elf64-hppa.c:3273 +msgid "%B(%A+0x%lx): cannot reach %s" +msgstr "%B(%A+0x%lx): no se puede alcanzar %s" + +#: elf64-mmix.c:1177 #, c-format msgid "" "%s: Internal inconsistency error for value for\n" @@ -1775,46 +2395,46 @@ msgstr "" "%s: Error de inconsistencia interna para el valor para\n" " un registro global colocado por el enlazador: enlazado: 0x%lx%08lx != relajado: 0x%lx%08lx\n" -#: elf64-mmix.c:1602 +#: elf64-mmix.c:1618 #, c-format msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" msgstr "%s: reubicación base-más-desplazamiento contra un símbolo de registro: (desconocido) en %s" -#: elf64-mmix.c:1607 +#: elf64-mmix.c:1623 #, c-format msgid "%s: base-plus-offset relocation against register symbol: %s in %s" msgstr "%s: reubicación base-más-desplazamiento contra un símbolo de registro: %s en %s" -#: elf64-mmix.c:1651 +#: elf64-mmix.c:1667 #, c-format msgid "%s: register relocation against non-register symbol: (unknown) in %s" msgstr "%s: reubicación de registro contra un símbolo que no es registro: (desconocido) en %s" -#: elf64-mmix.c:1656 +#: elf64-mmix.c:1672 #, c-format msgid "%s: register relocation against non-register symbol: %s in %s" msgstr "%s: reubicación de registro contra un símbolo que no es registro: %s en %s" -#: elf64-mmix.c:1693 +#: elf64-mmix.c:1709 #, c-format msgid "%s: directive LOCAL valid only with a register or absolute value" msgstr "%s: la directiva LOCAL sólo es válida con un registro o un valor absoluto" -#: elf64-mmix.c:1721 +#: elf64-mmix.c:1737 #, c-format msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." msgstr "%s: directiva LOCAL: El registro $%ld no es un registro local. El primer registro global es $%ld." -#: elf64-mmix.c:2207 +#: elf64-mmix.c:2201 #, c-format msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" msgstr "%s: Error: definición múltiple de `%s'; el inicio de %s está definido en un fichero enlazado con anterioridad\n" -#: elf64-mmix.c:2265 +#: elf64-mmix.c:2259 msgid "Register section has contents\n" msgstr "La sección de registros no tiene contenido\n" -#: elf64-mmix.c:2457 +#: elf64-mmix.c:2451 #, c-format msgid "" "Internal inconsistency: remaining %u != max %u.\n" @@ -1823,73 +2443,65 @@ msgstr "" "Inconsistencia interna: %u restante != %u máximo.\n" " Por favor reporte este bicho." -#: elf64-ppc.c:2500 libbfd.c:931 +#: elf64-ppc.c:2691 libbfd.c:978 msgid "%B: compiled for a big endian system and target is little endian" msgstr "%B: compilado para un sistema big endian y el objetivo es little endian" -#: elf64-ppc.c:2503 libbfd.c:933 +#: elf64-ppc.c:2694 libbfd.c:980 msgid "%B: compiled for a little endian system and target is big endian" msgstr "%B: compilado para un sistema little endian y el objetivo es big endian" -#: elf64-ppc.c:5707 +#: elf64-ppc.c:6338 #, c-format msgid "copy reloc against `%s' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc" -msgstr "la reubicación de copia contra `%s' requiere de enlazado plt suelto; evite establecer LD_BIND_NOW=1 o actualice gcc" +msgstr "la reubicación de copia contra `%s' requiere de enlazado plt flojo; evite establecer LD_BIND_NOW=1 o actualice gcc" -#: elf64-ppc.c:6155 +#: elf64-ppc.c:6767 msgid "dynreloc miscount for %B, section %A" msgstr "cuenta errónea de la reubicación dinámica de %B, sección %A" -#: elf64-ppc.c:6257 +#: elf64-ppc.c:6851 msgid "%B: .opd is not a regular array of opd entries" msgstr "%B: .opd no es una matriz regular de entradas opd" -#: elf64-ppc.c:6266 +#: elf64-ppc.c:6860 msgid "%B: unexpected reloc type %u in .opd section" msgstr "%B: tipo de reubicación %u inesperado en la sección .opd" -#: elf64-ppc.c:6287 +#: elf64-ppc.c:6881 msgid "%B: undefined sym `%s' in .opd section" -msgstr "%B: símbolo `%s' indefinido en la sección .opd" +msgstr "%B: símbolo `%s' sin definir en la sección .opd" -#: elf64-ppc.c:6939 elf64-ppc.c:7318 +#: elf64-ppc.c:7640 elf64-ppc.c:8017 #, c-format msgid "%s defined in removed toc entry" msgstr "se definió %s en la entrada toc eliminada" -#: elf64-ppc.c:8041 +#: elf64-ppc.c:8910 #, c-format msgid "long branch stub `%s' offset overflow" msgstr "desbordamiento del desplazamiento de stub de ramificación long `%s'" -#: elf64-ppc.c:8116 +#: elf64-ppc.c:8969 #, c-format msgid "can't find branch stub `%s'" msgstr "no se puede encontrar la ramificación de cabo `%s'" -#: elf64-ppc.c:8155 elf64-ppc.c:8231 +#: elf64-ppc.c:9031 elf64-ppc.c:9169 #, c-format msgid "linkage table error against `%s'" msgstr "error de la tabla de enlazado contra `%s'" -#: elf64-ppc.c:8360 +#: elf64-ppc.c:9326 #, c-format msgid "can't build branch stub `%s'" msgstr "no se puede construir la ramificación de cabos `%s'" -#: elf64-ppc.c:8784 +#: elf64-ppc.c:9799 msgid "%B section %A exceeds stub group size" -msgstr "%B sección %A excede el tamaño de grupo de stub" - -#: elf64-ppc.c:9295 -msgid ".glink and .plt too far apart" -msgstr ".glink y .plt están demasiado alejados" +msgstr "%B sección %A excede el tamaño de grupo de cabos" -#: elf64-ppc.c:9408 -msgid "stubs don't match calculated size" -msgstr "los cabos no coinciden con el tamaño calculado" - -#: elf64-ppc.c:9420 +#: elf64-ppc.c:10453 #, c-format msgid "" "linker stubs in %u group%s\n" @@ -1906,582 +2518,500 @@ msgstr "" " ajuste toc long %lu\n" " llamada plt %lu" -#: elf64-ppc.c:10075 +#: elf64-ppc.c:11252 msgid "%B(%A+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc" -msgstr "%B(%A+0x%lx): los TOCs múltiples automáticos no tienen soporte utilizando sus ficheros crt; recompile con -mminimal-toc o actualice gcc" +msgstr "%B(%A+0x%lx): no se admiten los TOCs múltiples automáticos, utilizando sus ficheros crt; recompile con -mminimal-toc o actualice gcc" -#: elf64-ppc.c:10083 +#: elf64-ppc.c:11260 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 "%B(%A+0x%lx): la optimización de llamada hermana a `%s' no permite TOCs múltiples automáticos; recompile con -mminimal-toc ó -fno-optimize-sibling-calls, o vuelva `%s' externa" -#: elf64-ppc.c:10727 +#: elf64-ppc.c:11961 msgid "%B: relocation %s is not supported for symbol %s." -msgstr "%B: la reubicación %s no tiene soporte para el símbolo %s." +msgstr "%B: no se admite la reubicación %s para el símbolo %s." -#: elf64-ppc.c:10806 +#: elf64-ppc.c:12044 msgid "%B: error: relocation %s not a multiple of %d" -msgstr "%B: error: la reubicación %s no es un múltiplo de %d" - -#: elf64-sh64.c:1676 -#, c-format -msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" -msgstr "%s: error: tipo de reubicación %d sin alinear en %08x reubicación %08x\n" - -#: elf64-sparc.c:438 -msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" -msgstr "%B: Solamente los registros %%g[2367] se pueden declarar utilizando STT_REGISTER" - -#: elf64-sparc.c:458 -msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" -msgstr "El registro %%g%d se usó de forma incompatible: %s en %B, previamente %s en %B" - -#: elf64-sparc.c:481 -msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" -msgstr "El símbolo `%s' tiene tipos divergentes: REGISTER en %B, previamente %s en %B" - -#: elf64-sparc.c:526 -msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" -msgstr "El símbolo `%s' tiene tipos divergentes: %s en %B, previamente REGISTER en %B" - -#: elf64-sparc.c:677 -msgid "%B: linking UltraSPARC specific with HAL specific code" -msgstr "%B: enlazando código específico de UltraSPARC con código específico de HAL" - -#: elf64-x86-64.c:692 elf64-x86-64.c:818 elf64-x86-64.c:2069 -msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" -msgstr "%B: no se puede usar la reubicación %s contra `%s' cuando se hace un objeto compartido; recompile con -fPIC" - -#: elf64-x86-64.c:760 -msgid "%B: %s' accessed both as normal and thread local symbol" -msgstr "%B: se accesó `%s' como un símbolo normal y como un símbolo local de hilo" - -#: elf64-x86-64.c:2000 -msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" -msgstr "%B: no se puede usar la reubicación R_X86_64_GOTOFF contra la función protegida `%s' cuando se hace un objeto compartido" - -#: elf64-x86-64.c:2065 -msgid "%B: relocation R_X86_64_PC32 against protected function `%s' can not be used when making a shared object" -msgstr "%B: no se puede usar la reubicación R_X86_64_PC32 contra la función protegida `%' cuando se hace un objeto compartido" - -#: elf.c:288 -msgid "%B: invalid string offset %u >= %lu for section `%s'" -msgstr "%B: desplazamiento de cadena inválido %u >= %lu para la sección `%s'" - -#: elf.c:552 -msgid "%B: invalid SHT_GROUP entry" -msgstr "%B: entrada SHT_GROUP inválida" - -#: elf.c:622 -msgid "%B: no group info for section %A" -msgstr "%B: no hay información de grupo para la sección %A" - -#: elf.c:652 elf.c:3091 elflink.c:7588 -msgid "%B: warning: sh_link not set for section `%A'" -msgstr "%B: aviso: no se estableción sh_link para la sección `%A'" - -#: elf.c:688 -msgid "%B: unknown [%d] section `%s' in group [%s]" -msgstr "%B: sección [%d] desconocida `%s' en el grupo [%s]" - -#: elf.c:1071 -#, c-format -msgid "" -"\n" -"Program Header:\n" -msgstr "" -"\n" -"Encabezado del Programa:\n" - -#: elf.c:1123 -#, c-format -msgid "" -"\n" -"Dynamic Section:\n" -msgstr "" -"\n" -"Sección Dinámica:\n" - -#: elf.c:1248 -#, c-format -msgid "" -"\n" -"Version definitions:\n" -msgstr "" -"\n" -"Definiciones de versión:\n" +msgstr "%B: error: la reubicación %s no es un múltiplo de %d" -#: elf.c:1273 +#: elf64-sh64.c:1701 #, c-format -msgid "" -"\n" -"Version References:\n" -msgstr "" -"\n" -"Referencias de Versión:\n" +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +msgstr "%s: error: tipo de reubicación %d sin alinear en %08x reubicación %08x\n" -#: elf.c:1278 -#, c-format -msgid " required from %s:\n" -msgstr " requerido desde %s:\n" +#: elf64-sparc.c:439 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%B: Solamente los registros %%g[2367] se pueden declarar utilizando STT_REGISTER" -#: elf.c:1985 -msgid "%B: invalid link %lu for reloc section %s (index %u)" -msgstr "%B: enlace %lu inválido para la sección de reubicación %s (índice %u)" +#: elf64-sparc.c:459 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" +msgstr "El registro %%g%d se usó de forma incompatible: %s en %B, previamente %s en %B" -#: elf.c:3062 -msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" -msgstr "%B: sh_link de la sección `%A' apunta a la sección descartada `%A' de `%B'" +#: elf64-sparc.c:482 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" +msgstr "El símbolo `%s' tiene tipos divergentes: REGISTER en %B, previamente %s en %B" -#: elf.c:4070 -msgid "%B: Not enough room for program headers (allocated %u, need %u)" -msgstr "%B: No hay suficiente espacio para los encabezados del programa (%u asignados, %u necesarios)" +#: elf64-sparc.c:527 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" +msgstr "El símbolo `%s' tiene tipos divergentes: %s en %B, previamente REGISTER en %B" -#: elf.c:4173 -msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" -msgstr "%B: La primera sección en el segmento PT_DYNAMIC no es la sección .dynamic" +#: elf64-sparc.c:679 +msgid "%B: linking UltraSPARC specific with HAL specific code" +msgstr "%B: se enlaza código específico de UltraSPARC con código específico de HAL" -#: elf.c:4217 -msgid "%B: Not enough room for program headers, try linking with -N" -msgstr "%B: No hay suficiente espacio para los encabezados del programa, pruebe enlazar con -N" +#: elf64-x86-64.c:1337 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B: se accedió a '%s' como un símbolo normal y como un símbolo local de hilo" -#: elf.c:4308 -msgid "%B: section %A lma 0x%lx overlaps previous sections" -msgstr "%B: la sección %A lma 0x%lx traslapa las secciones anteriores" +#: elf64-x86-64.c:2701 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" +msgstr "%B: la reubicación %s contra el símbolo STT_GNU_IFUNC `%s' con adición que no es cero: %d" -#: elf.c:4709 -msgid "%B: warning: allocated section `%s' not in segment" -msgstr "%B: aviso: la sección asignada `%s' no está en el segmento" +#: elf64-x86-64.c:2980 +msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" +msgstr "%B: no se puede usar la reubicación R_X86_64_GOTOFF contra la función protegida `%s' cuando se hace un objeto compartido" -#: elf.c:5002 -msgid "%B: symbol `%s' required but not present" -msgstr "%B: se requiere el símbolo `%s' pero no está presente" +#: elf64-x86-64.c:3091 +msgid "; recompile with -fPIC" +msgstr "; recompile con -fPIC" -#: elf.c:5299 -msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" -msgstr "%B: aviso: Se detectó un segmento cargable vacío, ¿ esto es intencional ?\n" +#: elf64-x86-64.c:3096 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: no se puede usar la reubicación %s contra %s `%s' cuando se hace un objeto compartido%s" -#: elf.c:5961 -#, c-format -msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" -msgstr "No se puede encontrar la sección de salida equivalente para el símbolo '%s' de la sección '%s'" +#: elf64-x86-64.c:3098 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: no se puede usar la reubicación %s contra %s sin definir `%s' cuando se hace un objeto compartido%s" -#: elf.c:6917 -msgid "%B: unsupported relocation type %s" -msgstr "%B: tipo de reubicación %s sin soporte" +#: elfcode.h:795 +#, c-format +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "aviso: %s tiene un índice de tablas de cadenas corrupto - se descarta" -#: elfcode.h:1110 +#: elfcode.h:1201 #, c-format msgid "%s: version count (%ld) does not match symbol count (%ld)" msgstr "%s: la cuenta de versión (%ld) no coincide con la cuenta de símbolos (%ld)" -#: elfcode.h:1337 +#: elfcode.h:1441 #, c-format msgid "%s(%s): relocation %d has invalid symbol index %ld" msgstr "%s(%s): la reubicación %d tiene un índice de símbolo %ld inválido" -#: elf-hppa.h:1443 elf-hppa.h:1458 -msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" -msgstr "%B(%A): aviso: reubicación sin resolución contra el símbolo `%s'" +#: elfcore.h:251 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Aviso: se truncó %B: se esperaba el tamaño de fichero core >= %lu, se encontró: %lu." -#: elflink.c:907 +#: elflink.c:1113 msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" msgstr "%s: la definición TLS en %B sección %A no coincide con la definición que no es TLS en %B sección %A" -#: elflink.c:911 +#: elflink.c:1117 msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" -msgstr "%s: la referencia TLS en %b no coincide con la referencia que no es TLS en %B" +msgstr "%s: la referencia TLS en %B no coincide con la referencia que no es TLS en %B" -#: elflink.c:915 +#: elflink.c:1121 msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" msgstr "%s: la definición TLS en %B sección %A no coincide con la referencia que no es TLS en %B" -#: elflink.c:919 +#: elflink.c:1125 msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" msgstr "%s: la referencia TLS en %B no coincide con la definición que no es TLS en %B sección %A" -#: elflink.c:1491 +#: elflink.c:1764 msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" msgstr "%B: redefinición inesperada del símbolo con versión indirecta `%s'" -#: elflink.c:1807 -msgid "%B: undefined versioned symbol name %s" -msgstr "%B: nombre de símbolo con versión %s sin definir" +#: elflink.c:2077 +msgid "%B: version node not found for symbol %s" +msgstr "%B: no se encuentra la versión del nodo para el símbolo %s" -#: elflink.c:1955 +#: elflink.c:2167 msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" msgstr "%B: índice de símbolos de reubicación inválido (0x%lx >= 0x%lx) erróneo para el desplazamiento 0x%lx en la sección `%A'" -#: elflink.c:2147 +#: elflink.c:2178 +msgid "%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table" +msgstr "%B: índice de símbolos que no es cero (0x%lx) para el desplazamiento 0x%lx) en la sección `%A' cuando el fichero objeto no tiene tabla de símbolos" + +#: elflink.c:2375 msgid "%B: relocation size mismatch in %B section %A" msgstr "%B: el tamaño de reubicación no coincide en %B sección %A" -#: elflink.c:2437 +#: elflink.c:2678 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" msgstr "aviso: el tipo y tamaño del símbolo dinámico `%s' no están definidos" -#: elflink.c:2761 -msgid "warning: creating a DT_TEXTREL in a shared object." -msgstr "aviso: se crea un DT_TEXTREL en un objeto compartido." +#: elflink.c:3424 +msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" +msgstr "%P: se encontró código máquina ELF alternativo (%d) en %B, se espera %d\n" -#: elflink.c:3696 +#: elflink.c:4032 msgid "%B: %s: invalid version %u (max %d)" msgstr "%B: %s: versión %u inválida (máximo %d)" -#: elflink.c:3732 +#: elflink.c:4068 msgid "%B: %s: invalid needed version %d" msgstr "%B: %s: versión requerida %d inválida" -#: elflink.c:3912 +#: elflink.c:4253 +msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" +msgstr "Aviso: la alineación %u del símbolo común `%s' en %B es más grande que la alineación (%u) de su sección %A" + +#: elflink.c:4259 msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" msgstr "Aviso: la alineación %u del símbolo `%s' en %B es más pequeña que %u en %B" -#: elflink.c:3924 +#: elflink.c:4274 msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" msgstr "Aviso: el tamaño del símbolo `%s' cambió de %lu en %B a %lu en %B" -#: elflink.c:4091 +#: elflink.c:4438 #, c-format msgid "%s: invalid DSO for symbol `%s' definition" msgstr "%s: DSO inválido para la definición del símbolo `%s'" -#: elflink.c:5152 +#: elflink.c:5688 #, c-format msgid "%s: undefined version: %s" msgstr "%s: versión sin definir: %s" -#: elflink.c:5219 +#: elflink.c:5756 msgid "%B: .preinit_array section is not allowed in DSO" msgstr "%B: no se permite la sección .preinit_array en DSO" -#: elflink.c:5978 +#: elflink.c:7484 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "referencia %s sin definir en el símbolo complejo: %s" + +#: elflink.c:7638 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "operador desconocido '%c' en el símbolo complejo" + +#: elflink.c:7976 elflink.c:7993 elflink.c:8030 elflink.c:8047 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: No se pueden ordenar las reubicaciones - son de tamaños diferentes" + +#: elflink.c:8007 elflink.c:8061 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: No se pueden ordenar las reubicaciones - son de tamaño desconocido" + +#: elflink.c:8112 msgid "Not enough memory to sort relocations" msgstr "No hay suficiente memoria para ordenar las reubicaciones" -#: elflink.c:6369 +#: elflink.c:8304 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: Demasiadas secciones: %d (>= %d)" + +#: elflink.c:8540 msgid "%B: %s symbol `%s' in %B is referenced by DSO" msgstr "%B: el símbolo %s `%s' en %B está referenciado por DSO" -#: elflink.c:6452 +#: elflink.c:8625 msgid "%B: could not find output section %A for input section %A" msgstr "%B: no se puede encontrar la sección de salida %A para la sección de entrada %A" -#: elflink.c:6549 +#: elflink.c:8745 msgid "%B: %s symbol `%s' isn't defined" msgstr "%B: el símbolo %s `%s' no está definido" -#: elflink.c:7024 +#: elflink.c:9301 msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" msgstr "error: %B contiene una reubicación (0x%s) para la sección %A que refiere a un símbolo global que no existe" -#: elflink.c:7058 +#: elflink.c:9366 msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" msgstr "%X`%s' referido en la sección `%A' de %B: se definió en la sección descartada `%A' de %B\n" -#: elflink.c:7665 +#: elflink.c:9991 msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" msgstr "%A tiene tanto secciones ordenadas [`%A' en %B] como desordenadas [`%A' en %B]" -#: elflink.c:7670 +#: elflink.c:9996 #, c-format msgid "%A has both ordered and unordered sections" -msgstr "%A tiene tanto secciones ordenadas como desordenadas" +msgstr "%A tiene secciones tanto ordenadas como desordenadas" -#: elflink.c:8487 elflink.c:8528 +#: elflink.c:10872 elflink.c:10916 msgid "%B: could not find output section %s" msgstr "%B: no se puede encontrar la sección de salida %s" -#: elflink.c:8492 +#: elflink.c:10877 #, c-format msgid "warning: %s section has zero size" msgstr "aviso: la sección %s es de tamaño cero" -#: elflink.c:9087 +#: elflink.c:10982 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: aviso: se crea un DT_TEXTREL en un objeto compartido.\n" + +#: elflink.c:11165 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: no se pueden leer símbolos: %E\n" + +#: elflink.c:11483 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Se elimina la sección sin uso '%s' en el fichero '%B'" + +#: elflink.c:11695 msgid "Warning: gc-sections option ignored" -msgstr "Aviso: se ignora la opción gc-sections" +msgstr "Aviso: se descarta la opción gc-sections" -#: elflink.c:9704 +#: elflink.c:12242 msgid "%B: ignoring duplicate section `%A'" -msgstr "%B: se ignora la sección duplicada `%A'" +msgstr "%B: se descarta la sección duplicada `%A'" -#: elflink.c:9711 elflink.c:9718 +#: elflink.c:12249 elflink.c:12256 msgid "%B: duplicate section `%A' has different size" msgstr "%B: la sección duplicada `%A' tiene tamaño diferente" -#: elflink.c:9726 elflink.c:9731 +#: elflink.c:12264 elflink.c:12269 msgid "%B: warning: could not read contents of section `%A'" msgstr "%B: aviso: no se puede leer el contenido de la sección `%A'" -#: elflink.c:9735 +#: elflink.c:12273 msgid "%B: warning: duplicate section `%A' has different contents" msgstr "%B: aviso: la sección duplicada `%A' tiene contenido diferente" -#: elfxx-mips.c:866 +#: elflink.c:12374 linker.c:3098 +msgid "%F%P: already_linked_table: %E\n" +msgstr "%F%P: already_linked_table: %E\n" + +#: elfxx-mips.c:1222 msgid "static procedure (no name)" msgstr "procedimiento estático (sin nombre)" -#: elfxx-mips.c:2513 -msgid "not enough GOT space for local GOT entries" -msgstr "no hay suficiente espacio GOT para entradas GOT locales" - -#: elfxx-mips.c:4356 +#: elfxx-mips.c:5588 msgid "%B: %A+0x%lx: jump to stub routine which is not jal" msgstr "%B: %A+0x%lx: salto a una rutina cabo la cual no es jal" -#: elfxx-mips.c:4993 elfxx-mips.c:5214 +#: elfxx-mips.c:6235 elfxx-mips.c:6458 msgid "%B: Warning: bad `%s' option size %u smaller than its header" msgstr "%B: Aviso: el tamaño de opción `%s' %u erróneo es más pequeño que su encabezado" -#: elfxx-mips.c:5965 +#: elfxx-mips.c:7205 elfxx-mips.c:7330 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: Aviso: no se puede determinar la función objetivo para la sección de cabo `%s'" + +#: elfxx-mips.c:7459 msgid "%B: Malformed reloc detected for section %s" msgstr "%B: Se detectó una reubicación malformada para la sección %s" -#: elfxx-mips.c:6041 +#: elfxx-mips.c:7499 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: no se esperaba la reubicación GOT en 0x%lx en ejecutables" + +#: elfxx-mips.c:7602 msgid "%B: CALL16 reloc at 0x%lx not against global symbol" msgstr "%B: la reubicación CALL16 en 0x%lx no es contra un símbolo global" -#: elfxx-mips.c:9380 +#: elfxx-mips.c:8280 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "reubicaciones que no son dinámicas se refieren al símbolo dinámico %s" + +#: elfxx-mips.c:8985 +msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" +msgstr "%B: No se puede encontrar una reubicación LO16 coincidente contra `%s' para %s en 0x%lx en la sección `%A'" + +#: elfxx-mips.c:9124 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "la sección small-data excede los 64KB; disminuya el límite de tamaño de small-data (vea la opción -G)" + +#: elfxx-mips.c:11940 #, c-format msgid "%s: illegal section name `%s'" msgstr "%s: nombre de sección `%s' ilegal" -#: elfxx-mips.c:9719 +#: elfxx-mips.c:12318 elfxx-mips.c:12344 +msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" +msgstr "Aviso: %B usa -msingle-float, %B usa -mdouble-float" + +#: elfxx-mips.c:12330 elfxx-mips.c:12386 +msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +msgstr "Aviso: %B usa -msingle-float, %B usa -mips32r2 -mfp64" + +#: elfxx-mips.c:12356 elfxx-mips.c:12392 +msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +msgstr "Aviso: %B usa -mdouble-float, %B usa -mips32r2 -mfp64" + +#: elfxx-mips.c:12434 msgid "%B: endianness incompatible with that of the selected emulation" msgstr "%B: la endianez es incompatible con aquella de la emulación seleccionada" -#: elfxx-mips.c:9731 +#: elfxx-mips.c:12445 msgid "%B: ABI is incompatible with that of the selected emulation" msgstr "%B: la ABI es incompatible con aquella de la emulación seleccionada" -#: elfxx-mips.c:9803 -msgid "%B: warning: linking PIC files with non-PIC files" -msgstr "%B: aviso: enlazando ficheros PIC con ficheros que no son PIC" +#: elfxx-mips.c:12526 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: aviso: se enlazan ficheros de llamadas abi con ficheros que no son de llamadas abi" -#: elfxx-mips.c:9820 +#: elfxx-mips.c:12543 msgid "%B: linking 32-bit code with 64-bit code" -msgstr "%B: enlazando código de 32-bit con código de 64-bit" +msgstr "%B: se enlaza código de 32-bit con código de 64-bit" -#: elfxx-mips.c:9848 +#: elfxx-mips.c:12571 msgid "%B: linking %s module with previous %s modules" -msgstr "%B: enlazando el módulo %s con módulos %s previos" +msgstr "%B: se enlaza el módulo %s con módulos %s previos" -#: elfxx-mips.c:9871 +#: elfxx-mips.c:12594 msgid "%B: ABI mismatch: linking %s module with previous %s modules" -msgstr "%B: no coincide el ABI: enlazando el módulo %s con módulos %s previos" +msgstr "%B: no coincide ABI: se enlaza el módulo %s con módulos %s previos" -#: elfxx-mips.c:9936 +#: elfxx-mips.c:12758 #, c-format msgid " [abi=O32]" msgstr " [abi=O32]" -#: elfxx-mips.c:9938 +#: elfxx-mips.c:12760 #, c-format msgid " [abi=O64]" msgstr " [abi=O64]" -#: elfxx-mips.c:9940 +#: elfxx-mips.c:12762 #, c-format msgid " [abi=EABI32]" msgstr " [abi=EABI32]" -#: elfxx-mips.c:9942 +#: elfxx-mips.c:12764 #, c-format msgid " [abi=EABI64]" msgstr " [abi=EABI64]" -#: elfxx-mips.c:9944 +#: elfxx-mips.c:12766 #, c-format msgid " [abi unknown]" msgstr " [abi desconocido]" -#: elfxx-mips.c:9946 +#: elfxx-mips.c:12768 #, c-format msgid " [abi=N32]" msgstr " [abi=N32]" -#: elfxx-mips.c:9948 +#: elfxx-mips.c:12770 #, c-format msgid " [abi=64]" msgstr " [abi=64]" -#: elfxx-mips.c:9950 +#: elfxx-mips.c:12772 #, c-format msgid " [no abi set]" msgstr " [no hay conjunto abi]" -#: elfxx-mips.c:9953 -#, c-format -msgid " [mips1]" -msgstr " [mips1]" - -#: elfxx-mips.c:9955 -#, c-format -msgid " [mips2]" -msgstr " [mips2]" - -#: elfxx-mips.c:9957 -#, c-format -msgid " [mips3]" -msgstr " [mips3]" - -#: elfxx-mips.c:9959 -#, c-format -msgid " [mips4]" -msgstr " [mips4]" - -#: elfxx-mips.c:9961 -#, c-format -msgid " [mips5]" -msgstr " [mips5]" - -#: elfxx-mips.c:9963 -#, c-format -msgid " [mips32]" -msgstr " [mips32]" - -#: elfxx-mips.c:9965 -#, c-format -msgid " [mips64]" -msgstr " [mips64]" - -#: elfxx-mips.c:9967 -#, c-format -msgid " [mips32r2]" -msgstr " [mips32r2]" - -#: elfxx-mips.c:9969 -#, c-format -msgid " [mips64r2]" -msgstr " [mips64r2]" - -#: elfxx-mips.c:9971 +#: elfxx-mips.c:12793 #, c-format msgid " [unknown ISA]" msgstr " [ISA desconocido]" -#: elfxx-mips.c:9974 -#, c-format -msgid " [mdmx]" -msgstr " [mdmx]" - -#: elfxx-mips.c:9977 -#, c-format -msgid " [mips16]" -msgstr " [mips16]" - -#: elfxx-mips.c:9980 -#, c-format -msgid " [32bitmode]" -msgstr " [modo 32bit]" - -#: elfxx-mips.c:9982 +#: elfxx-mips.c:12804 #, c-format msgid " [not 32bitmode]" msgstr " [no es modo 32bit]" -#: elfxx-sparc.c:402 +#: elfxx-sparc.c:440 #, c-format msgid "invalid relocation type %d" msgstr "tipo de reubicación %d inválido" -#: elfxx-sparc.c:2783 -msgid "%B: probably compiled without -fPIC?" -msgstr "%B: ¿Compilado probablemente sin -fPIC?" - -#: i386linux.c:457 m68klinux.c:461 sparclinux.c:458 +#: i386linux.c:455 m68klinux.c:459 sparclinux.c:453 #, c-format msgid "Output file requires shared library `%s'\n" msgstr "El fichero de salida requiere la biblioteca compartida `%s'\n" -#: i386linux.c:465 m68klinux.c:469 sparclinux.c:466 +#: i386linux.c:463 m68klinux.c:467 sparclinux.c:461 #, c-format msgid "Output file requires shared library `%s.so.%s'\n" msgstr "El fichero de salida requiere la biblioteca compartida `%s.so.%s'\n" -#: i386linux.c:654 i386linux.c:704 m68klinux.c:661 m68klinux.c:709 -#: sparclinux.c:656 sparclinux.c:706 +#: i386linux.c:652 i386linux.c:702 m68klinux.c:659 m68klinux.c:707 +#: sparclinux.c:651 sparclinux.c:701 #, c-format msgid "Symbol %s not defined for fixups\n" msgstr "El símbolo %s no está definido para composturas\n" -#: i386linux.c:728 m68klinux.c:733 sparclinux.c:730 +#: i386linux.c:726 m68klinux.c:731 sparclinux.c:725 msgid "Warning: fixup count mismatch\n" msgstr "Aviso: no coincide la cuenta de composturas\n" -#: ieee.c:157 +#: ieee.c:159 #, c-format msgid "%s: string too long (%d chars, max 65535)" msgstr "%s: la cadena es demasiado larga (%d caracteres, máximo 65535)" -#: ieee.c:284 +#: ieee.c:286 #, c-format msgid "%s: unrecognized symbol `%s' flags 0x%x" -msgstr "%s: símbolo `%s' no reconocido opciones 0x%x" +msgstr "%s: no se reconoce el símbolo `%s' opciones 0x%x" -#: ieee.c:786 +#: ieee.c:788 msgid "%B: unimplemented ATI record %u for symbol %u" msgstr "%B: grabación ATI %u sin implementar para el símbolo %u" -#: ieee.c:810 +#: ieee.c:812 msgid "%B: unexpected ATN type %d in external part" msgstr "%B: tipo ATN %d inesperado en la parte externa" -#: ieee.c:832 +#: ieee.c:834 msgid "%B: unexpected type after ATN" msgstr "%B: tipo inesperado después de ATN" -#: ihex.c:228 +#: ihex.c:230 msgid "%B:%d: unexpected character `%s' in Intel Hex file" msgstr "%B:%d: carácter `%s' inesperado en el fichero Hexadecimal de Intel" -#: ihex.c:335 +#: ihex.c:337 msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" msgstr "%B:%u: suma de comprobación errónea en el fichero Hexadecimal de Intel (se esperaba %u, se obtuvo %u)" -#: ihex.c:389 +#: ihex.c:392 msgid "%B:%u: bad extended address record length in Intel Hex file" msgstr "%B:%u: longitud de registro de dirección extendida errónea en el fichero Hexadecimal de Intel" -#: ihex.c:406 +#: ihex.c:409 msgid "%B:%u: bad extended start address length in Intel Hex file" msgstr "%B:%u: longitud de dirección de inicio extendida errónea en el fichero Hexadecimal de Intel" -#: ihex.c:423 +#: ihex.c:426 msgid "%B:%u: bad extended linear address record length in Intel Hex file" msgstr "%B:%u: longitud de registro de dirección lineal extendida errónea en el fichero Hexadecimal de Intel" -#: ihex.c:440 +#: ihex.c:443 msgid "%B:%u: bad extended linear start address length in Intel Hex file" msgstr "%B:%u: longitud de dirección de inicio lineal extendida errónea en el fichero Hexadecimal de Intel" -#: ihex.c:457 +#: ihex.c:460 msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" -msgstr "%B:%u: tipo ihex %u no reconocido en el fichero Hexadecimal de Intel" +msgstr "%B:%u: no se reconoce el tipo ihex %u en el fichero Hexadecimal de Intel" -#: ihex.c:578 +#: ihex.c:579 msgid "%B: internal error in ihex_read_section" msgstr "%B: error interno en ihex_read_section" -#: ihex.c:612 +#: ihex.c:613 msgid "%B: bad section length in ihex_read_section" msgstr "%B: longitud de sección errónea en ihex_read_section" -#: ihex.c:824 +#: ihex.c:825 #, c-format msgid "%s: address 0x%s out of range for Intel Hex file" msgstr "%s: la dirección 0x%s está fuera de rango en el fichero Hexadecimal de Intel" -#: libbfd.c:961 +#: libbfd.c:1008 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" msgstr "Se llamó a %s que es obsoleto en %s línea %d en %s\n" -#: libbfd.c:964 +#: libbfd.c:1011 #, c-format msgid "Deprecated %s called\n" msgstr "Se llamó a %s que es obsoleto\n" -#: linker.c:1873 +#: linker.c:1874 msgid "%B: indirect symbol `%s' to `%s' is a loop" msgstr "%B: el símbolo indirecto `%s' para `%s' es un ciclo" @@ -2490,15 +3020,75 @@ msgstr "%B: el s msgid "Attempt to do relocatable link with %s input and %s output" msgstr "Se intentó hacer un enlace reubicable con entrada %s y salida %s" -#: linker.c:3037 +#: linker.c:3065 msgid "%B: warning: ignoring duplicate section `%A'\n" -msgstr "%B: aviso: se ignora la sección duplicada `%A'\n" +msgstr "%B: aviso: se descarta la sección duplicada `%A'\n" -#: linker.c:3051 +#: linker.c:3079 msgid "%B: warning: duplicate section `%A' has different size\n" msgstr "%B: aviso: la sección duplicada `%A' es de tamaño diferente\n" -#: merge.c:817 +#: mach-o.c:3195 +#, c-format +msgid "Mach-O header:\n" +msgstr "encabezado de Mach-O:\n" + +#: mach-o.c:3196 +#, c-format +msgid " magic : %08lx\n" +msgstr " magic : %08lx\n" + +#: mach-o.c:3197 +#, c-format +msgid " cputype : %08lx (%s)\n" +msgstr " tipocpu : %08lx (%s)\n" + +#: mach-o.c:3199 +#, c-format +msgid " cpusubtype: %08lx\n" +msgstr " subtipocpu: %08lx\n" + +#: mach-o.c:3200 +#, c-format +msgid " filetype : %08lx (%s)\n" +msgstr " tipofich : %08lx (%s)\n" + +#: mach-o.c:3203 +#, c-format +msgid " ncmds : %08lx\n" +msgstr " nordenes : %08lx\n" + +#: mach-o.c:3204 +#, c-format +msgid " sizeofcmds: %08lx\n" +msgstr " tamordenes: %08lx\n" + +#: mach-o.c:3205 +#, c-format +msgid " flags : %08lx (" +msgstr " opciones : %08lx (" + +#: mach-o.c:3207 +#, c-format +msgid ")\n" +msgstr ")\n" + +#: mach-o.c:3208 +#, c-format +msgid " reserved : %08x\n" +msgstr " reservado : %08x\n" + +#: mach-o.c:3218 +#, c-format +msgid "Segments and Sections:\n" +msgstr "Segmentos y Secciones:\n" + +#: mach-o.c:3219 +#, c-format +msgid " #: Segment name Section name Address\n" +msgstr " #: Nombre segmento Nombre sección Dirección\n" + +#: merge.c:829 #, c-format msgid "%s: access beyond end of merged section (%ld)" msgstr "%s: acceso más allá del final de la sección mezclada (%ld)" @@ -2521,12 +3111,12 @@ msgstr "%s: fichero mmo inv #: mmo.c:1332 #, c-format msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" -msgstr "%s: secuencia de caracteres anchos 0x%02X 0x%02X sin soporte después del nombre de símbolo que inicia con `%s'\n" +msgstr "%s: no se admite la secuencia de caracteres anchos 0x%02X 0x%02X después del nombre de símbolo que inicia con `%s'\n" #: mmo.c:1566 #, c-format msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" -msgstr "%s: fichero mmo inválido: código de operación-l `%d' sin soporte\n" +msgstr "%s: fichero mmo inválido: no se admite el código de operación-l `%d'\n" #: mmo.c:1576 #, c-format @@ -2556,7 +3146,7 @@ msgstr "%s: fichero mmo inv #: mmo.c:1729 #, c-format msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" -msgstr "%s: fichero mmo inválido: el byte inicial de la palabra operando debe ser 0 ó 1, se obtuvo %d para lop_fixrx\n" +msgstr "%s: fichero mmo inválido: el byte inicial del operando word debe ser 0 ó 1, se obtuvo %d para lop_fixrx\n" #: mmo.c:1752 #, c-format @@ -2588,106 +3178,126 @@ msgstr "%s: fichero mmo inv msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" msgstr "%s: fichero mmo inválido: YZ de lop_end (%ld) no es igual al número de tetras del lop_stab precedente (%ld)\n" -#: mmo.c:2649 +#: mmo.c:2651 #, c-format msgid "%s: invalid symbol table: duplicate symbol `%s'\n" msgstr "%s: tabla de símbolos inválida: símbolo `%s' duplicado\n" -#: mmo.c:2892 +#: mmo.c:2894 #, c-format msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" -msgstr "%s: Definición de símbolo errónea: `Main' se estableción como %s en lugar de la dirección de inicio %s\n" +msgstr "%s: Definición de símbolo errónea: `Main' se estableció como %s en lugar de la dirección de inicio %s\n" -#: mmo.c:2984 +#: mmo.c:2986 #, c-format msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" msgstr "%s: aviso: la tabla de símbolos es demasiado grande para mmo, es más grande que 65535 words de 32-bit: %d. Sólo se emitirá `Main'.\n" -#: mmo.c:3029 +#: mmo.c:3031 #, c-format msgid "%s: internal error, symbol table changed size from %d to %d words\n" msgstr "%s: error interno, la tabla de símbolos cambió de tamaño de %d a %d words\n" -#: mmo.c:3081 +#: mmo.c:3083 #, c-format msgid "%s: internal error, internal register section %s had contents\n" msgstr "%s: error interno, la sección interna de registros %s tiene contenido\n" -#: mmo.c:3132 +#: mmo.c:3134 #, c-format msgid "%s: no initialized registers; section length 0\n" msgstr "%s: no hay registros iniciados; longitud de sección 0\n" -#: mmo.c:3138 +#: mmo.c:3140 #, c-format msgid "%s: too many initialized registers; section length %ld\n" msgstr "%s: demasiados registros iniciados: longitud de sección %ld\n" -#: mmo.c:3143 +#: mmo.c:3145 #, c-format msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" -msgstr "%s: dirección de inicio inválida para los registros iniciados de longitud %ld: 0x%lx%08lx\n" +msgstr "%s: dirección de inicio inválida para los registros inicializados de longitud %ld: 0x%lx%08lx\n" -#: oasys.c:876 +#: oasys.c:881 #, c-format msgid "%s: can not represent section `%s' in oasys" msgstr "%s: no se puede representar la sección `%s' en oasys" -#: osf-core.c:137 +#: osf-core.c:139 #, c-format msgid "Unhandled OSF/1 core file section type %d\n" msgstr "Tipo de sección de fichero núcleo OSF/1 %d sin manejar\n" +#: pe-mips.c:613 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "%B: `ld -r' no se admite con objetos PE MIPS\n" + +#. OK, at this point the following variables are set up: +#. 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:729 +msgid "%B: unimplemented %s\n" +msgstr "%B: %s sin implementar\n" + +#: pe-mips.c:755 +msgid "%B: jump too far away\n" +msgstr "%B: salto demasiado lejos\n" + +#: pe-mips.c:781 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: pair/reflo erróneo después de refhi\n" + +#: pei-x86_64.c:465 +#, c-format +msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" +msgstr "aviso: el tamaño de la sección .pdata (%ld) no es un múltiplo de %d\n" + +#: pei-x86_64.c:469 peigen.c:1620 peigen.c:1799 pepigen.c:1620 pepigen.c:1799 +#: pex64igen.c:1620 pex64igen.c:1799 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"La Tabla de Funciones (se interpretaron los contenidos de la sección .pdata)\n" + +#: pei-x86_64.c:471 +#, c-format +msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" +msgstr "vma:\t\t\tDireccInicio\t DireccFin \t InformaciónDesenvuelta\n" + #. XXX code yet to be written. -#: peicode.h:731 +#: peicode.h:752 msgid "%B: Unhandled import type; %x" msgstr "%B: Tipo de importación sin manejar; %x" -#: peicode.h:736 +#: peicode.h:757 msgid "%B: Unrecognised import type; %x" -msgstr "%B: Tipo de importación no reconocida; %x" +msgstr "%B: No se reconocer el tipo de importación; %x" -#: peicode.h:750 +#: peicode.h:771 msgid "%B: Unrecognised import name type; %x" -msgstr "%B: Tipo de nombre de importación no reconocida; %x" +msgstr "%B: No se reconoce el tipo de nombre de importación; %x" -#: peicode.h:1120 +#: peicode.h:1154 msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" -msgstr "%B: Tipo de máquina (0x%x) no reconocida en el archivo de Formato de Importación de Bibliotecas" +msgstr "%B: No se reconoce el tipo de máquina (0x%x) en el archivo de Formato de Importación de Bibliotecas" -#: peicode.h:1132 +#: peicode.h:1166 msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" -msgstr "%B: Tipo de máquina (0x%x) reconocida pero sin manejar en el archivo de Formato de Importación de Bibliotecas" +msgstr "%B: Se reconoce el tipo de máquina (0x%x) pero no se maneja en el archivo de Formato de Importación de Bibliotecas" -#: peicode.h:1150 +#: peicode.h:1184 msgid "%B: size field is zero in Import Library Format header" msgstr "%B: el tamaño del campo es cero en el encabezado del Formato de Importación de Bibliotecas" -#: peicode.h:1181 +#: peicode.h:1215 msgid "%B: string not null terminated in ILF object file." -msgstr "%B: cadena no terminada en null en el fichero objeto ILF." +msgstr "%B: cadena que no termina en null en el fichero objeto ILF." -#: pe-mips.c:588 -msgid "%B: `ld -r' not supported with PE MIPS objects\n" -msgstr "%B: `ld -r' no tiene soporte con objetos PE MIPS\n" - -#. OK, at this point the following variables are set up: -#. 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 -msgid "%B: unimplemented %s\n" -msgstr "%B: %s sin implementar\n" - -#: pe-mips.c:730 -msgid "%B: jump too far away\n" -msgstr "%B: salto demasiado lejos\n" - -#: pe-mips.c:756 -msgid "%B: bad pair/reflo after refhi\n" -msgstr "%B: pair/reflo erróneo después de refhi\n" - -#: ppcboot.c:419 +#: ppcboot.c:414 #, c-format msgid "" "\n" @@ -2696,27 +3306,27 @@ msgstr "" "\n" "encabezado de ppcboot:\n" -#: ppcboot.c:420 +#: ppcboot.c:415 #, c-format msgid "Entry offset = 0x%.8lx (%ld)\n" msgstr "Desplazamiento de entrada = 0x%.8lx (%ld)\n" -#: ppcboot.c:421 +#: ppcboot.c:417 #, c-format msgid "Length = 0x%.8lx (%ld)\n" msgstr "Longitud = 0x%.8lx (%ld)\n" -#: ppcboot.c:424 +#: ppcboot.c:421 #, c-format msgid "Flag field = 0x%.2x\n" msgstr "Campo de opciones = 0x%.2x\n" -#: ppcboot.c:430 +#: ppcboot.c:427 #, c-format msgid "Partition name = \"%s\"\n" msgstr "Nombre de la partición = \"%s\"\n" -#: ppcboot.c:449 +#: ppcboot.c:446 #, c-format msgid "" "\n" @@ -2725,22 +3335,22 @@ msgstr "" "\n" "Partición[%d] inicio = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -#: ppcboot.c:455 +#: ppcboot.c:452 #, c-format msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" msgstr "Partición[%d] fin = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -#: ppcboot.c:461 +#: ppcboot.c:458 #, c-format msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" msgstr "Partición[%d] sector = 0x%.8lx (%ld)\n" -#: ppcboot.c:462 +#: ppcboot.c:460 #, c-format msgid "Partition[%d] length = 0x%.8lx (%ld)\n" msgstr "Partición[%d] longitud = 0x%.8lx (%ld)\n" -#: som.c:5069 +#: som.c:5114 #, c-format msgid "" "\n" @@ -2749,134 +3359,189 @@ msgstr "" "\n" "Encabezado Auxiliar de Ejecución\n" -#: som.c:5330 +#: som.c:5417 msgid "som_sizeof_headers unimplemented" msgstr "som_sizeof_headers sin implementar" -#: srec.c:259 +#: srec.c:261 msgid "%B:%d: Unexpected character `%s' in S-record file\n" -msgstr "%B:%d: Caractér `%s' inesperado en el fichero S-record\n" +msgstr "%B:%d: Carácter `%s' inesperado en el fichero S-record\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: Suma de comprobación errónea en el fichero S-record\n" -#: stabs.c:276 +#: stabs.c:279 msgid "%B(%A+0x%lx): Stabs entry has invalid string index." msgstr "%B(%A+0x%lx): La entrada de cabos tiene una cadena índice inválida." -#: syms.c:1048 +#: syms.c:1079 msgid "Unsupported .stab relocation" -msgstr "Reubicación .stab sin soporte" +msgstr "No se admite la reubicación .stab" -#: vms-gsd.c:337 +#: vms-gsd.c:350 #, c-format msgid "bfd_make_section (%s) failed" msgstr "bfd_make_section (%s) falló" -#: vms-gsd.c:352 +#: vms-gsd.c:365 #, c-format msgid "bfd_set_section_flags (%s, %x) failed" msgstr "bfd_set_section_flags (%s, %x) falló" -#: vms-gsd.c:387 +#: vms-gsd.c:399 #, c-format msgid "Size mismatch section %s=%lx, %s=%lx" msgstr "No coincide el tamaño de la sección %s=%lx, %s=%lx" -#: vms-gsd.c:678 +#: vms-gsd.c:754 #, c-format -msgid "unknown gsd/egsd subtype %d" -msgstr "subtipo de gsd/egsd %d desconocido" +msgid "Unknown GSD/EGSD subtype %d" +msgstr "Subtipo de GSD/EGSD %d desconocido" -#: vms-hdr.c:327 +#: vms-hdr.c:364 msgid "Object module NOT error-free !\n" msgstr "¡ El módulo objeto NO está libre de errores !\n" -#: vms-misc.c:473 +#: vms-hdr.c:878 +#, c-format +msgid "unknown source command %d" +msgstr "orden fuente %d desconocida" + +#: vms-hdr.c:951 +msgid "DST_S_C_SET_LINUM_INCR not implemented" +msgstr "DST_S_C_SET_LINUM_INCR sin implementar" + +#: vms-hdr.c:957 +msgid "DST_S_C_SET_LINUM_INCR_W not implemented" +msgstr "DST_S_C_SET_LINUM_INCR_W sin implementar" + +#: vms-hdr.c:963 +msgid "DST_S_C_RESET_LINUM_INCR not implemented" +msgstr "DST_S_C_RESET_LINUM_INCR sin implementar" + +#: vms-hdr.c:969 +msgid "DST_S_C_BEG_STMT_MODE not implemented" +msgstr "DST_S_C_BEG_STMT_MODE sin implementar" + +#: vms-hdr.c:975 +msgid "DST_S_C_END_STMT_MODE not implemented" +msgstr "DST_S_C_END_STMT_MODE sin implementar" + +#: vms-hdr.c:1008 +msgid "DST_S_C_SET_PC not implemented" +msgstr "DST_S_C_SET_PC sin implementar" + +#: vms-hdr.c:1014 +msgid "DST_S_C_SET_PC_W not implemented" +msgstr "DST_S_C_SET_PC_W sin implementar" + +#: vms-hdr.c:1020 +msgid "DST_S_C_SET_PC_L not implemented" +msgstr "DST_S_C_SET_PC_L sin implementar" + +#: vms-hdr.c:1026 +msgid "DST_S_C_SET_STMTNUM not implemented" +msgstr "DST_S_C_SET_STMTNUM sin implementar" + +#: vms-hdr.c:1079 +#, c-format +msgid "unknown line command %d" +msgstr "orden de línea %d desconocida" + +#: vms-misc.c:588 #, c-format msgid "Stack overflow (%d) in _bfd_vms_push" msgstr "Desbordamiento de la pila (%d) en _bfd_vms_push" -#: vms-misc.c:488 +#: vms-misc.c:603 msgid "Stack underflow in _bfd_vms_pop" msgstr "Desbordamiento por debajo de la pila en _bfd_vms_pop" -#: vms-misc.c:802 +#: vms-misc.c:844 msgid "_bfd_vms_output_counted called with zero bytes" msgstr "se llamó _bfd_vms_output_counted con cero bytes" -#: vms-misc.c:807 +#: vms-misc.c:849 msgid "_bfd_vms_output_counted called with too many bytes" msgstr "se llamó _bfd_vms_output_counted con demasiados bytes" -#: vms-misc.c:925 +#: vms-misc.c:967 #, c-format msgid "Symbol %s replaced by %s\n" -msgstr "El símbolo %s fue reemplazado por %s\n" +msgstr "Se reemplazó el símbolo %s por %s\n" -#: vms-misc.c:984 +#: vms-misc.c:1026 #, c-format msgid "failed to enter %s" msgstr "falló la introducción de %s" -#: vms-tir.c:55 +#: vms-tir.c:83 msgid "No Mem !" msgstr "¡ No hay Memoria !" -#: vms-tir.c:298 +#. These names have not yet been added to this switch statement. +#: vms-tir.c:346 +#, c-format +msgid "unknown ETIR command %d" +msgstr "orden ETIR %d desconocida" + +#: vms-tir.c:440 #, c-format msgid "bad section index in %s" -msgstr "Índice de sección erróneo en %s" +msgstr "índice de sección erróneo en %s" -#: vms-tir.c:311 +#: vms-tir.c:459 #, c-format msgid "unsupported STA cmd %s" -msgstr "orden STA %s sin soporte" +msgstr "no se admite la orden STA %s" -#: vms-tir.c:316 vms-tir.c:1118 +#: vms-tir.c:464 vms-tir.c:1304 #, c-format msgid "reserved STA cmd %d" msgstr "orden STA %d reservada" -#: vms-tir.c:408 vms-tir.c:430 -#, c-format -msgid "%s: no symbol \"%s\"" -msgstr "%s: no existe el símbolo \"%s\"" - #. Unsigned shift. #. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-tir.c:495 vms-tir.c:604 vms-tir.c:702 vms-tir.c:719 vms-tir.c:726 -#: vms-tir.c:734 vms-tir.c:1438 +#: vms-tir.c:655 vms-tir.c:774 vms-tir.c:894 vms-tir.c:1624 #, c-format msgid "%s: not supported" -msgstr "%s: no tiene soporte" +msgstr "%s: no se admite" -#: vms-tir.c:500 vms-tir.c:1295 +#: vms-tir.c:661 vms-tir.c:1481 #, c-format msgid "%s: not implemented" msgstr "%s: sin implementar" -#: vms-tir.c:504 vms-tir.c:1299 +#: vms-tir.c:666 vms-tir.c:1485 #, c-format msgid "reserved STO cmd %d" msgstr "orden STO %d reservada" -#: vms-tir.c:619 vms-tir.c:1443 +#: vms-tir.c:789 vms-tir.c:1629 #, c-format msgid "reserved OPR cmd %d" msgstr "orden OPR %d reservada" -#: vms-tir.c:679 vms-tir.c:1507 +#: vms-tir.c:852 vms-tir.c:1693 #, c-format msgid "reserved CTL cmd %d" msgstr "orden CTL %d reservada" +#: vms-tir.c:966 +#, c-format +msgid "reserved STC cmd %d" +msgstr "orden STC %d reservada" + #. stack byte from image #. arg: none. -#: vms-tir.c:1026 +#: vms-tir.c:1212 msgid "stack-from-image not implemented" msgstr "pila-desde-imagen sin implementar" -#: vms-tir.c:1044 +#: vms-tir.c:1230 msgid "stack-entry-mask not fully implemented" msgstr "pila-máscara-entrada no está completamente implementado" @@ -2887,271 +3552,294 @@ msgstr "pila-m #. #. compare argument descriptor with symbol argument (ARG$V_PASSMECH) #. and stack TRUE (args match) or FALSE (args dont match) value. -#: vms-tir.c:1058 +#: vms-tir.c:1244 msgid "PASSMECH not fully implemented" msgstr "PASSMECH no está completamente implementado" -#: vms-tir.c:1077 +#: vms-tir.c:1263 msgid "stack-local-symbol not fully implemented" msgstr "pila-símbolo-local no está completamente implementado" -#: vms-tir.c:1090 +#: vms-tir.c:1276 msgid "stack-literal not fully implemented" msgstr "pila-literal no está completamente implementado" -#: vms-tir.c:1111 +#: vms-tir.c:1297 msgid "stack-local-symbol-entry-point-mask not fully implemented" msgstr "pila-símbolo-local-máscara-punto-entrada no está completamente implementado" -#: vms-tir.c:1385 vms-tir.c:1397 vms-tir.c:1409 vms-tir.c:1421 vms-tir.c:1486 -#: vms-tir.c:1494 vms-tir.c:1502 +#: vms-tir.c:1571 vms-tir.c:1583 vms-tir.c:1595 vms-tir.c:1607 vms-tir.c:1672 +#: vms-tir.c:1680 vms-tir.c:1688 #, c-format msgid "%s: not fully implemented" msgstr "%s: no está completamente implementado" -#: vms-tir.c:1560 +#: vms-tir.c:1746 #, c-format msgid "obj code %d not found" msgstr "no se encontró el código objeto %d" -#: vms-tir.c:1868 +#: vms-tir.c:2019 +#, c-format +msgid "Reloc size error in section %s" +msgstr "Error del tamaño de reubicación en la sección %s" + +#: vms-tir.c:2112 vms-tir.c:2129 vms-tir.c:2147 vms-tir.c:2159 vms-tir.c:2170 +#: vms-tir.c:2182 +#, c-format +msgid "Unknown reloc %s + %s" +msgstr "Reubicación %s + %s desconocida" + +#: vms-tir.c:2249 +#, c-format +msgid "Unknown symbol %s in command %s" +msgstr "Símbolo %s desconocido en la orden %s" + +#: vms-tir.c:2504 #, c-format msgid "SEC_RELOC with no relocs in section %s" msgstr "SEC_RELOC sin reubicaciones en la sección %s" -#: vms-tir.c:2150 +#: vms-tir.c:2556 vms-tir.c:2783 +#, c-format +msgid "Size error in section %s" +msgstr "Error de tamaño en la sección %s" + +#: vms-tir.c:2725 +msgid "Spurious ALPHA_R_BSR reloc" +msgstr "Reubicación ALPHA_R_BSR espuria" + +#: vms-tir.c:2770 #, c-format msgid "Unhandled relocation %s" msgstr "Reubicación %s sin manejar" -#: xcofflink.c:564 +#: xcofflink.c:836 #, c-format msgid "%s: XCOFF shared object when not producing XCOFF output" msgstr "%s: objeto compartido XCOFF cuando no se produce salida XCOFF" -#: xcofflink.c:585 +#: xcofflink.c:857 #, c-format msgid "%s: dynamic object with no .loader section" msgstr "%s: objeto dinámico sin sección .loader" -#: xcofflink.c:1148 +#: xcofflink.c:1415 msgid "%B: `%s' has line numbers but no enclosing section" msgstr "%B: `%s' tiene números de línea pero no una sección contenedora" -#: xcofflink.c:1200 +#: xcofflink.c:1467 msgid "%B: class %d symbol `%s' has no aux entries" msgstr "%B: clase %d símbolo `%s' no tiene entradas auxiliares" -#: xcofflink.c:1223 +#: xcofflink.c:1489 msgid "%B: symbol `%s' has unrecognized csect type %d" -msgstr "%B: el símbolo `%s' tiene un tipo csect %d no reconocido" +msgstr "%B: el símbolo `%s' tiene un tipo csect %d que no se reconoce" -#: xcofflink.c:1235 +#: xcofflink.c:1501 msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" msgstr "%B: símbolo XTY_ER `%s' erróneo: clase %d scnum %d scnlen %d" -#: xcofflink.c:1271 +#: xcofflink.c:1530 msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" msgstr "%B: símbolo XMC_TCO `%s' es clase %d scnlen %d" -#: xcofflink.c:1417 +#: xcofflink.c:1676 msgid "%B: csect `%s' not in enclosing section" msgstr "%B: csect `%s' no está contenido en una sección" -#: xcofflink.c:1524 +#: xcofflink.c:1783 msgid "%B: misplaced XTY_LD `%s'" msgstr "%B: XTY_LD `%s' mal ubicado" -#: xcofflink.c:1839 +#: xcofflink.c:2102 msgid "%B: reloc %s:%d not in csect" msgstr "%B: la reubicación %s:%d no está en csect" -#: xcofflink.c:2637 +#: xcofflink.c:3177 #, c-format msgid "%s: no such symbol" msgstr "%s: no hay tal símbolo" -#: xcofflink.c:2866 +#: xcofflink.c:3282 #, c-format msgid "warning: attempt to export undefined symbol `%s'" -msgstr "aviso: intento de exportar el símbolo sin definir `%s'" +msgstr "aviso: se intenta exportar el símbolo sin definir `%s'" -#: xcofflink.c:3033 +#: xcofflink.c:3664 msgid "error: undefined symbol __rtinit" -msgstr "error: símbolo __rtinit indefinido" - -#: xcofflink.c:3653 -#, c-format -msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" -msgstr "Desbordamiento de TOC: 0x%lx > 0x10000; pruebe -mminimal-toc al compilar" +msgstr "error: símbolo __rtinit sin definir" -#: xcofflink.c:4489 -msgid "%B: loader reloc in unrecognized section `%A'" -msgstr "%B: reubicación del cargador en la sección `%A' no reconocida" +#: xcofflink.c:4041 +msgid "%B: loader reloc in unrecognized section `%s'" +msgstr "%B: reubicación del cargador en la sección `%s' que no se reconoce" -#: xcofflink.c:4510 +#: xcofflink.c:4052 msgid "%B: `%s' in loader reloc but not loader sym" msgstr "%B: `%s' en la reubicación del cargador pero no es un símbolo del cargador" -#: xcofflink.c:4525 +#: xcofflink.c:4068 msgid "%B: loader reloc in read-only section %A" msgstr "%B: reubicación del cargador en la sección de sólo lectura %A" -#: xcofflink.c:4934 xcofflink.c:4996 xcofflink.c:5291 -#, c-format -msgid "%s: loader reloc in unrecognized section `%s'" -msgstr "%s: reubicación del cargador en la sección `%s' no reconocida" - -#: xcofflink.c:5302 +#: xcofflink.c:5086 #, c-format -msgid "%s: `%s' in loader reloc but not loader sym" -msgstr "%s: `%s' en la reubicación del cargador pero no es un símbolo del cargador" +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "Desbordamiento de TOC: 0x%lx > 0x10000; pruebe -mminimal-toc al compilar" -#: elf32-ia64.c:1139 elf64-ia64.c:1139 +#: elf32-ia64.c:1050 elf64-ia64.c:1050 msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." msgstr "%B: No se puede relajar br en 0x%lx en la sección `%A'. Por favor use brl o ramificación indirecta." -#: elf32-ia64.c:2508 elf64-ia64.c:2508 +#: elf32-ia64.c:2739 elf64-ia64.c:2739 msgid "@pltoff reloc against local symbol" msgstr "reubicación @pltoff contra un símbolo local" -#: elf32-ia64.c:3955 elf64-ia64.c:3955 +#: elf32-ia64.c:4314 elf64-ia64.c:4314 #, c-format msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" msgstr "%s: segmento de datos short desbordado (0x%lx >= 0x400000)" -#: elf32-ia64.c:3966 elf64-ia64.c:3966 +#: elf32-ia64.c:4325 elf64-ia64.c:4325 #, c-format msgid "%s: __gp does not cover short data segment" msgstr "%s: __gp no cubre el segmento de datos short" -#: elf32-ia64.c:4213 elf64-ia64.c:4213 +#: elf32-ia64.c:4595 elf64-ia64.c:4595 msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" msgstr "%B: código que no es pic con reubicación imm contra el símbolo dinámico %s" -#: elf32-ia64.c:4280 elf64-ia64.c:4280 +#: elf32-ia64.c:4662 elf64-ia64.c:4662 msgid "%B: @gprel relocation against dynamic symbol %s" msgstr "%B: reubicación @gprel contra el símbolo dinámico %s" -#: elf32-ia64.c:4343 elf64-ia64.c:4343 +#: elf32-ia64.c:4725 elf64-ia64.c:4725 msgid "%B: linking non-pic code in a position independent executable" -msgstr "%B: enlazando código que no es pic en un ejecutable independiente de posición" +msgstr "%B: se enlaza código que no es pic en un ejecutable independiente de posición" -#: elf32-ia64.c:4480 elf64-ia64.c:4480 +#: elf32-ia64.c:4862 elf64-ia64.c:4862 msgid "%B: @internal branch to dynamic symbol %s" msgstr "%B: ramificación @internal al símbolo dinámico %s" -#: elf32-ia64.c:4482 elf64-ia64.c:4482 +#: elf32-ia64.c:4864 elf64-ia64.c:4864 msgid "%B: speculation fixup to dynamic symbol %s" msgstr "%B: compostura de especulación al símbolo dinámico %s" -#: elf32-ia64.c:4484 elf64-ia64.c:4484 +#: elf32-ia64.c:4866 elf64-ia64.c:4866 msgid "%B: @pcrel relocation against dynamic symbol %s" msgstr "%B: reubicación @pcrel contra el símbolo dinámico %s" -#: elf32-ia64.c:4691 elf64-ia64.c:4691 +#: elf32-ia64.c:5063 elf64-ia64.c:5063 msgid "unsupported reloc" -msgstr "reubicación sin soporte" +msgstr "no se admite la reubicación" -#: elf32-ia64.c:4724 elf64-ia64.c:4724 +#: elf32-ia64.c:5101 elf64-ia64.c:5101 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: falta la sección TLS para la reubicación %s contra `%s' en 0x%lx en la sección `%A'." + +#: elf32-ia64.c:5116 elf64-ia64.c:5116 msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." msgstr "%B: No se puede relajar br (%s) a `%s' en 0x%lx en la sección `%A' con tamaño 0x%lx (> 0x1000000)." -#: elf32-ia64.c:4985 elf64-ia64.c:4985 +#: elf32-ia64.c:5372 elf64-ia64.c:5372 msgid "%B: linking trap-on-NULL-dereference with non-trapping files" -msgstr "%B: enlazando deferencias-captura-en-NULL con ficheros que no son de captura" +msgstr "%B: se enlaza deferencias-captura-en-NULL con ficheros que no son de captura" -#: elf32-ia64.c:4994 elf64-ia64.c:4994 +#: elf32-ia64.c:5381 elf64-ia64.c:5381 msgid "%B: linking big-endian files with little-endian files" -msgstr "%B: enlazando ficheros big-endian con ficheros little-endian" +msgstr "%B: se enlazan ficheros big-endian con ficheros little-endian" -#: elf32-ia64.c:5003 elf64-ia64.c:5003 +#: elf32-ia64.c:5390 elf64-ia64.c:5390 msgid "%B: linking 64-bit files with 32-bit files" -msgstr "%B: enlazando ficheros de 64-bit con ficheros de 32-bit" +msgstr "%B: se enlazan ficheros de 64-bit con ficheros de 32-bit" -#: elf32-ia64.c:5012 elf64-ia64.c:5012 +#: elf32-ia64.c:5399 elf64-ia64.c:5399 msgid "%B: linking constant-gp files with non-constant-gp files" -msgstr "%B: enlazando ficheros de gp constante con ficheros con gp no constante" +msgstr "%B: se enlazan ficheros de gp constante con ficheros con gp no constante" -#: elf32-ia64.c:5022 elf64-ia64.c:5022 +#: elf32-ia64.c:5409 elf64-ia64.c:5409 msgid "%B: linking auto-pic files with non-auto-pic files" -msgstr "%B: enlazando ficheros de pic automático con ficheros sin pic automático" +msgstr "%B: se enlazan ficheros de pic automático con ficheros sin pic automático" -#: peigen.c:979 pepigen.c:979 +#: peigen.c:999 pepigen.c:999 pex64igen.c:999 #, c-format msgid "%s: line number overflow: 0x%lx > 0xffff" msgstr "%s: desbordamiento de número de línea: 0x%lx > 0xffff" -#: peigen.c:1006 pepigen.c:1006 +#: peigen.c:1026 pepigen.c:1026 pex64igen.c:1026 msgid "Export Directory [.edata (or where ever we found it)]" msgstr "Directorio de Exportación [.edata (o donde quiera que se encuentre)]" -#: peigen.c:1007 pepigen.c:1007 +#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 msgid "Import Directory [parts of .idata]" msgstr "Directorio de Importación [partes de .idata]" -#: peigen.c:1008 pepigen.c:1008 +#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 msgid "Resource Directory [.rsrc]" msgstr "Directorio de Recursos [.rsrc]" -#: peigen.c:1009 pepigen.c:1009 +#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 msgid "Exception Directory [.pdata]" msgstr "Directorio de Excepciones [.pdata]" -#: peigen.c:1010 pepigen.c:1010 +#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 msgid "Security Directory" msgstr "Directorio de Seguridad" -#: peigen.c:1011 pepigen.c:1011 +#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 msgid "Base Relocation Directory [.reloc]" msgstr "Directorio de Reubicación Base [.reloc]" -#: peigen.c:1012 pepigen.c:1012 +#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 msgid "Debug Directory" msgstr "Directorio de Depuración" -#: peigen.c:1013 pepigen.c:1013 +#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 msgid "Description Directory" msgstr "Directorio de Descripciones" -#: peigen.c:1014 pepigen.c:1014 +#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 msgid "Special Directory" msgstr "Directorio Especial" -#: peigen.c:1015 pepigen.c:1015 +#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 msgid "Thread Storage Directory [.tls]" msgstr "Directorio de Almacenamiento de Hilos [.tls]" -#: peigen.c:1016 pepigen.c:1016 +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 msgid "Load Configuration Directory" msgstr "Directorio de Carga de Configuraciones" -#: peigen.c:1017 pepigen.c:1017 +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 msgid "Bound Import Directory" msgstr "Directorio de Importación de Relaciones" -#: peigen.c:1018 pepigen.c:1018 +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 msgid "Import Address Table Directory" -msgstr "Directorio de Importación de Tablas de Direcciones" +msgstr "Directorio de Tablas de Direcciones de Importación" -#: peigen.c:1019 pepigen.c:1019 +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 msgid "Delay Import Directory" msgstr "Directorio de Retardo de Importación" -#: peigen.c:1020 peigen.c:1021 pepigen.c:1020 pepigen.c:1021 +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +msgid "CLR Runtime Header" +msgstr "Encabezado de Tiempo de Ejecución CLR" + +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 msgid "Reserved" msgstr "Reservado" -#: peigen.c:1081 pepigen.c:1081 +#: peigen.c:1101 pepigen.c:1101 pex64igen.c:1101 #, c-format msgid "" "\n" "There is an import table, but the section containing it could not be found\n" msgstr "" "\n" -"Hay una tabla de importación, pero la sección que la contiene no se puede encontrar\n" +"Hay una tabla de importación, pero no se puede encontrar la sección que la contiene\n" -#: peigen.c:1086 pepigen.c:1086 +#: peigen.c:1106 pepigen.c:1106 pex64igen.c:1106 #, c-format msgid "" "\n" @@ -3160,7 +3848,7 @@ msgstr "" "\n" "Hay una tabla de importación en %s en 0x%lx\n" -#: peigen.c:1129 pepigen.c:1129 +#: peigen.c:1149 pepigen.c:1149 pex64igen.c:1149 #, c-format msgid "" "\n" @@ -3169,12 +3857,12 @@ msgstr "" "\n" "Se localizó el descriptor de función en la dirección de inicio: %04lx\n" -#: peigen.c:1132 pepigen.c:1132 +#: peigen.c:1152 pepigen.c:1152 pex64igen.c:1152 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" msgstr "\tcódigo-base %08lx tabla-de-contenidos (cargable/actual) %08lx/%08lx\n" -#: peigen.c:1140 pepigen.c:1140 +#: peigen.c:1160 pepigen.c:1160 pex64igen.c:1160 #, c-format msgid "" "\n" @@ -3183,7 +3871,7 @@ msgstr "" "\n" "¡No está la sección reldata! No se decodificó el descriptor de función.\n" -#: peigen.c:1145 pepigen.c:1145 +#: peigen.c:1165 pepigen.c:1165 pex64igen.c:1165 #, c-format msgid "" "\n" @@ -3192,7 +3880,7 @@ msgstr "" "\n" "Las Tablas de Importación (se interpretaron los contenidos de la sección %s)\n" -#: peigen.c:1148 pepigen.c:1148 +#: peigen.c:1168 pepigen.c:1168 pex64igen.c:1168 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" @@ -3201,7 +3889,7 @@ msgstr "" " vma: Pista Fecha Adelante DLL Primero\n" " Tabla Estampa Cadena Nombre Thunk\n" -#: peigen.c:1196 pepigen.c:1196 +#: peigen.c:1216 pepigen.c:1216 pex64igen.c:1216 #, c-format msgid "" "\n" @@ -3210,30 +3898,30 @@ msgstr "" "\n" "\tNombre de la DLL: %s\n" -#: peigen.c:1207 pepigen.c:1207 +#: peigen.c:1227 pepigen.c:1227 pex64igen.c:1227 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" msgstr "\tvma: Pista/Ord Nombre-Miembro Unido-A\n" -#: peigen.c:1232 pepigen.c:1232 +#: peigen.c:1252 pepigen.c:1252 pex64igen.c:1252 #, c-format msgid "" "\n" "There is a first thunk, but the section containing it could not be found\n" msgstr "" "\n" -"Hay un thunk inicial, pero la sección que lo contiene no se puede encontrar\n" +"Hay un thunk inicial, pero no se puede encontrar la sección que lo contiene\n" -#: peigen.c:1365 pepigen.c:1365 +#: peigen.c:1417 pepigen.c:1417 pex64igen.c:1417 #, c-format msgid "" "\n" "There is an export table, but the section containing it could not be found\n" msgstr "" "\n" -"Hay una tabla de exportación, pero la sección que la contiene no se puede encontrar\n" +"Hay una tabla de exportación, pero no se puede encontrar la sección que la contiene\n" -#: peigen.c:1374 pepigen.c:1374 +#: peigen.c:1426 pepigen.c:1426 pex64igen.c:1426 #, c-format msgid "" "\n" @@ -3242,7 +3930,7 @@ msgstr "" "\n" "Hay una tabla de exportación en %s, pero no cabe en esa sección\n" -#: peigen.c:1380 pepigen.c:1380 +#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 #, c-format msgid "" "\n" @@ -3251,7 +3939,7 @@ msgstr "" "\n" "Hay una tabla de exportación en %s en 0x%lx\n" -#: peigen.c:1408 pepigen.c:1408 +#: peigen.c:1460 pepigen.c:1460 pex64igen.c:1460 #, c-format msgid "" "\n" @@ -3262,68 +3950,68 @@ msgstr "" "Las Tablas de Exportación (se interpretaron los contenidos de la sección %s)\n" "\n" -#: peigen.c:1412 pepigen.c:1412 +#: peigen.c:1464 pepigen.c:1464 pex64igen.c:1464 #, c-format msgid "Export Flags \t\t\t%lx\n" msgstr "Opciones de Exportación \t\t\t%lx\n" -#: peigen.c:1415 pepigen.c:1415 +#: peigen.c:1467 pepigen.c:1467 pex64igen.c:1467 #, c-format msgid "Time/Date stamp \t\t%lx\n" msgstr "marca de Hora/Fecha \t\t%lx\n" -#: peigen.c:1418 pepigen.c:1418 +#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" msgstr "Mayor/Menor \t\t\t%d/%d\n" -#: peigen.c:1421 pepigen.c:1421 +#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 #, c-format msgid "Name \t\t\t\t" msgstr "Nombre \t\t\t\t" -#: peigen.c:1427 pepigen.c:1427 +#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 #, c-format msgid "Ordinal Base \t\t\t%ld\n" msgstr "Base Ordinal \t\t\t%ld\n" -#: peigen.c:1430 pepigen.c:1430 +#: peigen.c:1482 pepigen.c:1482 pex64igen.c:1482 #, c-format msgid "Number in:\n" msgstr "Número en:\n" -#: peigen.c:1433 pepigen.c:1433 +#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 #, c-format msgid "\tExport Address Table \t\t%08lx\n" msgstr "\tTabla de Exportación de Direcciones \t\t%08lx\n" -#: peigen.c:1437 pepigen.c:1437 +#: peigen.c:1489 pepigen.c:1489 pex64igen.c:1489 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" msgstr "\tTabla [Nombre Puntero/Ordinal]\t%08lx\n" -#: peigen.c:1440 pepigen.c:1440 +#: peigen.c:1492 pepigen.c:1492 pex64igen.c:1492 #, c-format msgid "Table Addresses\n" msgstr "Direcciones de la Tabla\n" -#: peigen.c:1443 pepigen.c:1443 +#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 #, c-format msgid "\tExport Address Table \t\t" msgstr "\tTabla de Exportación de Direcciones \t\t" -#: peigen.c:1448 pepigen.c:1448 +#: peigen.c:1500 pepigen.c:1500 pex64igen.c:1500 #, c-format msgid "\tName Pointer Table \t\t" msgstr "\tNombre de la Tabla de Punteros \t\t" # continuar aqui -#: peigen.c:1453 pepigen.c:1453 +#: peigen.c:1505 pepigen.c:1505 pex64igen.c:1505 #, c-format msgid "\tOrdinal Table \t\t\t" msgstr "\tTabla Ordinal \t\t\t" -#: peigen.c:1467 pepigen.c:1467 +#: peigen.c:1519 pepigen.c:1519 pex64igen.c:1519 #, c-format msgid "" "\n" @@ -3332,15 +4020,15 @@ msgstr "" "\n" "Tabla de Exportación de Direcciones -- Base Ordinal %ld\n" -#: peigen.c:1486 pepigen.c:1486 +#: peigen.c:1538 pepigen.c:1538 pex64igen.c:1538 msgid "Forwarder RVA" msgstr "RVA Adelantador" -#: peigen.c:1497 pepigen.c:1497 +#: peigen.c:1549 pepigen.c:1549 pex64igen.c:1549 msgid "Export RVA" msgstr "RVA Exportador" -#: peigen.c:1504 pepigen.c:1504 +#: peigen.c:1556 pepigen.c:1556 pex64igen.c:1556 #, c-format msgid "" "\n" @@ -3349,26 +4037,18 @@ msgstr "" "\n" "Tabla [Puntero a Ordinal/Nombre]\n" -#: peigen.c:1557 pepigen.c:1557 +#: peigen.c:1616 peigen.c:1795 pepigen.c:1616 pepigen.c:1795 pex64igen.c:1616 +#: pex64igen.c:1795 #, c-format msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" msgstr "Aviso, el tamaño de la sección .pdata (%ld) no es un múltiplo de %d\n" -#: peigen.c:1561 pepigen.c:1561 -#, c-format -msgid "" -"\n" -"The Function Table (interpreted .pdata section contents)\n" -msgstr "" -"\n" -"La Tabla de Funciones (se interpretaron los contenidos de la sección .pdata)\n" - -#: peigen.c:1564 pepigen.c:1564 +#: peigen.c:1623 pepigen.c:1623 pex64igen.c:1623 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" msgstr " vma:\t\t\tDirección Inicio Dirección Fin Información Desenvuelta\n" -#: peigen.c:1566 pepigen.c:1566 +#: peigen.c:1625 pepigen.c:1625 pex64igen.c:1625 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" @@ -3377,22 +4057,31 @@ msgstr "" " vma:\t\tInicio Fin EH EH FinPrólogo Excepción\n" " \t\tDirecc Direcc Asa Datos Dirección Máscara\n" -#: peigen.c:1636 pepigen.c:1636 +#: peigen.c:1695 pepigen.c:1695 pex64igen.c:1695 #, c-format msgid " Register save millicode" msgstr " Registro para guardar milicódigo" -#: peigen.c:1639 pepigen.c:1639 +#: peigen.c:1698 pepigen.c:1698 pex64igen.c:1698 #, c-format msgid " Register restore millicode" msgstr " Registro para restaurar milicódigo" -#: peigen.c:1642 pepigen.c:1642 +#: peigen.c:1701 pepigen.c:1701 pex64igen.c:1701 #, c-format msgid " Glue code sequence" msgstr " Secuencia de código pegamento" -#: peigen.c:1692 pepigen.c:1692 +#: peigen.c:1801 pepigen.c:1801 pex64igen.c:1801 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" +msgstr "" +" vma:\t\tInicio Prólogo Función Opciones Excepción EH\n" +" \t\tDirecc Longitud Longitud 32b exc Manejador Datos\n" + +#: peigen.c:1933 pepigen.c:1933 pex64igen.c:1933 #, c-format msgid "" "\n" @@ -3403,7 +4092,7 @@ msgstr "" "\n" "Reubicaciones de Fichero Base PE (se interpretaron los contenidos de la sección .reloc)\n" -#: peigen.c:1722 pepigen.c:1722 +#: peigen.c:1963 pepigen.c:1963 pex64igen.c:1963 #, c-format msgid "" "\n" @@ -3412,7 +4101,7 @@ msgstr "" "\n" "Dirección Virtual: %08lx Tamaño del trozo %ld (0x%lx) Número de composturas %ld\n" -#: peigen.c:1735 pepigen.c:1735 +#: peigen.c:1976 pepigen.c:1976 pex64igen.c:1976 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" msgstr "\treubicación %4d desplazamiento %4x [%4lx] %s" @@ -3420,7 +4109,7 @@ msgstr "\treubicaci #. 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:2015 pepigen.c:2015 pex64igen.c:2015 #, c-format msgid "" "\n" @@ -3429,6 +4118,131 @@ msgstr "" "\n" "Características 0x%x\n" +#: peigen.c:2292 pepigen.c:2292 pex64igen.c:2292 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: no se puede llenar DataDictionary[1] porque falta .idata$2" + +#: peigen.c:2312 pepigen.c:2312 pex64igen.c:2312 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: no se puede llenar DataDictionary[1] porque falta .idata$4" + +#: peigen.c:2333 pepigen.c:2333 pex64igen.c:2333 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: no se puede llenar DataDictionary[12] porque falta .idata$5" + +#: peigen.c:2353 pepigen.c:2353 pex64igen.c:2353 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: no se puede llenar DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] porque falta .idata$6" + +#: peigen.c:2375 pepigen.c:2375 pex64igen.c:2375 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: no se puede llenar DataDictionary[9] porque falta __tls_used" + +#~ msgid "ERROR: %B: Incompatible object tag '%s':%d" +#~ msgstr "ERROR: %B: Etiqueta de objeto '%s' incompatible:%d" + +#~ msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" +#~ msgstr "%B(%A): aviso: reubicación sin resolución contra el símbolo `%s'" + +#~ msgid "%B: Internal inconsistency; no relocation section %s" +#~ msgstr "%B: Inconsistencia interna; no se encuentra la sección de reubicación %s" + +#~ msgid "Could not find relocation section for %s" +#~ msgstr "No se puede encontrar la sección de reubicación para %s" + +#~ msgid "%B: GOT overflow: Number of R_68K_GOT8O and R_68K_GOT16O relocations > %d" +#~ msgstr "%B desbordamiento de GOT: Número de reubicaciones R_68K_GOT80 Y R_68K_GOT160 > %d" + +#~ msgid "%A link_order not found\n" +#~ msgstr "no se encontró link_order %A\n" + +#~ msgid "%s: no symbol \"%s\"" +#~ msgstr "%s: no existe el símbolo \"%s\"" + +#~ msgid "%s: loader reloc in unrecognized section `%s'" +#~ msgstr "%s: reubicación del cargador en la sección `%s' no reconocida" + +#~ msgid "%s: `%s' in loader reloc but not loader sym" +#~ msgstr "%s: `%s' en la reubicación del cargador pero no es un símbolo del cargador" + +#~ msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)." +#~ msgstr "Error de Dwarf: El desplazamiento DW_FROM_strp (%lu) es más grande o igual que el tamaño de .debug_str (%lu)." + +#~ msgid "Dwarf Error: Can't find .debug_abbrev section." +#~ msgstr "Error de Dwarf: No se puede encontrar la sección .debug_abbrev." + +#~ msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)." +#~ msgstr "Error de Dwarf: El desplazamiento de abreviatura (%lu) es más grande o igual que el tamaño de .debug_abbrev (%lu)." + +#~ msgid "Dwarf Error: Can't find .debug_line section." +#~ msgstr "Error de Dwarf: No se puede encontrar lan sección .debug_line." + +#~ msgid "Dwarf Error: Can't find .debug_ranges section." +#~ msgstr "Error de Dwarf: No se puede encontrar lan sección .debug_ranges." + +#~ msgid "ERROR: %B: Conflicting definitions of wchar_t" +#~ msgstr "ERROR: %B: Definiciones en conflicto de wchar_t" + +#~ msgid "%B: relocation R_X86_64_PC32 against protected function `%s' can not be used when making a shared object" +#~ msgstr "%B: no se puede usar la reubicación R_X86_64_PC32 contra la función protegida `%' cuando se hace un objeto compartido" + +#~ msgid "ERROR: %B: Conflicting enum sizes" +#~ msgstr "ERROR: %B: Tamaños de enum en conflicto" + +#~ msgid "Division by zero. " +#~ msgstr "División por cero. " + +#~ msgid " [cpu32]" +#~ msgstr " [cpu32]" + +#~ msgid " [m68000]" +#~ msgstr " [m68000]" + +#~ msgid "Linking mips16 objects into %s format is not supported" +#~ msgstr "No se admite enlazar objetos mips16 en el formato %s" + +#~ msgid ".glink and .plt too far apart" +#~ msgstr ".glink y .plt están demasiado alejados" + +#~ msgid "%B: Not enough room for program headers (allocated %u, need %u)" +#~ msgstr "%B: No hay suficiente espacio para los encabezados del programa (%u asignados, %u necesarios)" + +#~ msgid " [mips1]" +#~ msgstr " [mips1]" + +#~ msgid " [mips2]" +#~ msgstr " [mips2]" + +#~ msgid " [mips3]" +#~ msgstr " [mips3]" + +#~ msgid " [mips4]" +#~ msgstr " [mips4]" + +#~ msgid " [mips5]" +#~ msgstr " [mips5]" + +#~ msgid " [mips32]" +#~ msgstr " [mips32]" + +#~ msgid " [mips64]" +#~ msgstr " [mips64]" + +#~ msgid " [mips32r2]" +#~ msgstr " [mips32r2]" + +#~ msgid " [mips64r2]" +#~ msgstr " [mips64r2]" + +#~ msgid " [mdmx]" +#~ msgstr " [mdmx]" + +#~ msgid " [mips16]" +#~ msgstr " [mips16]" + +#~ msgid " [32bitmode]" +#~ msgstr " [modo 32bit]" + #~ msgid "Missing IHCONST" #~ msgstr "IHCONST faltante" @@ -3469,10 +4283,7 @@ msgstr "" #~ msgstr " considere el reenlace con --support-old-code activado" #~ msgid "reloc against unsupported section" -#~ msgstr "reubicación contra una sección sin soporte" - -#~ msgid "reloc not properly aligned" -#~ msgstr "reubicación no alineada adecuadamente" +#~ msgstr "reubicación contra una sección no admitida" #~ msgid "Error: First section in segment (%s) starts at 0x%x whereas the segment starts at 0x%x" #~ msgstr "Error: La primera sección en el segmento (%s) inicia en 0x%x mientras que el segmento inicia en 0x%x" @@ -3487,13 +4298,13 @@ msgstr "" #~ msgstr "%s: no se debe usar la reubicación %s cuando se hace un objeto compartido; recompile con -fPIC" #~ msgid "%s(%s+0x%lx): fixing %s" -#~ msgstr "%s(%s+0x%lx): componiendo %s" +#~ msgstr "%s(%s+0x%lx): fijando %s" #~ msgid "%s: unresolvable relocation against symbol `%s' from %s section" #~ msgstr "%s: reubicación sin resolución contra el símbolo `%s' de la sección %s" #~ msgid "%s: linking non-pic code in a shared library" -#~ msgstr "%s: enlazando código que no es pic en una biblioteca compartida" +#~ msgstr "%s: se enlaza código que no es pic en una biblioteca compartida" #~ msgid "%s: reloc overflow 1: 0x%lx > 0xffff" #~ msgstr "%s: desbordamiento de reubicación 1: 0x%lx > 0xffff" @@ -3511,14 +4322,11 @@ msgstr "" #~ msgstr "Error: memoria agotada" #~ msgid "warning: relocation against removed section; zeroing" -#~ msgstr "aviso: reubicación contra una sección eliminada; cambiando a ceros" +#~ msgstr "aviso: reubicación contra una sección eliminada; se cambia a ceros" #~ msgid "local symbols in discarded section %s" #~ msgstr "símbolos locales en la sección descartada %s" -#~ msgid "%s: linking abicalls files with non-abicalls files" -#~ msgstr "%s: enlazando ficheros de llamadas abi con ficheros que no son de llamadas abi" - #~ msgid "%s: ISA mismatch (-mips%d) with previous modules (-mips%d)" #~ msgstr "%s: no coincide el ISA (-mips%d) con módulos previos (-mips%d)" @@ -3550,10 +4358,10 @@ msgstr "" #~ msgstr "%s: ERROR: pasan números de coma flotante en registros enteros mientras que el objetivo %s usa registros de coma flotante" #~ msgid "Warning: input file %s supports interworking, whereas %s does not." -#~ msgstr "Aviso: el fichero de entrada %s soporta interoperabilidad, mientras que %s no." +#~ msgstr "Aviso: el fichero de entrada %s admite interoperabilidad, mientras que %s no." #~ msgid "Warning: input file %s does not support interworking, whereas %s does." -#~ msgstr "Aviso: el fichero de entrada %s no soporta interoperabilidad, mientras que %s sí." +#~ msgstr "Aviso: el fichero de entrada %s no admite interoperabilidad, mientras que %s sí." # FIXME: Revisar en el código si son abreviaturas comunes, o corresponden a # partes fijas dentro del programa. cfuga @@ -3564,10 +4372,10 @@ msgstr "" #~ msgstr "elf_symbol_from_bfd_symbol 0x%.8lx, nombre = %s, núm sim = %d, opciones = 0x%.8lx%s\n" #~ msgid "Warning: Not setting interwork flag of %s since it has already been specified as non-interworking" -#~ msgstr "Aviso: No se activa la opción de interoperación de %s ya que ya había sido especificada como no interoperable" +#~ msgstr "Aviso: No se activa la opción de interoperación de %s ya que se había especificado como no interoperable" #~ msgid "Warning: Clearing the interwork flag of %s due to outside request" -#~ msgstr "Aviso: Limpiando la opción de interoperación de %s debido a una petición externa" +#~ msgstr "Aviso: Se limpia la opción de interoperación de %s debido a una petición externa" #~ msgid " [APCS-26]" #~ msgstr " [APCS-26]" @@ -3591,43 +4399,37 @@ msgstr "" #~ msgstr "ETIR_S_C_STO_CA: no está el símbolo \"%s\"" #~ msgid "ETIR_S_C_STO_RB/AB: Not supported" -#~ msgstr "ETIR_S_C_STO_RB/AB: Sin soporte" +#~ msgstr "ETIR_S_C_STO_RB/AB: No se admite" #~ msgid "ETIR_S_C_STO_LP_PSB: Not supported" -#~ msgstr "ETIR_S_C_STO_LP_PSB: Sin soporte" - -#~ msgid "ETIR_S_C_STO_HINT_GBL: not implemented" -#~ msgstr "ETIR_S_C_STO_HINT_GBL: sin implementar" - -#~ msgid "ETIR_S_C_STO_HINT_PS: not implemented" -#~ msgstr "ETIR_S_C_STO_HINT_PS: sin implementar" +#~ msgstr "ETIR_S_C_STO_LP_PSB: No se admite" #~ msgid "ETIR_S_C_OPR_INSV: Not supported" -#~ msgstr "ETIR_S_C_OPR_INSV: Sin soporte" +#~ msgstr "ETIR_S_C_OPR_INSV: No se admite" #~ msgid "ETIR_S_C_OPR_USH: Not supported" -#~ msgstr "ETIR_S_C_OPR_USH: Sin soporte" +#~ msgstr "ETIR_S_C_OPR_USH: No se admite" #~ msgid "ETIR_S_C_OPR_ROT: Not supported" -#~ msgstr "ETIR_S_C_OPR_ROT: Sin soporte" +#~ msgstr "ETIR_S_C_OPR_ROT: No se admite" #~ msgid "ETIR_S_C_OPR_REDEF: Not supported" -#~ msgstr "ETIR_S_C_OPR_REDEF: Sin soporte" +#~ msgstr "ETIR_S_C_OPR_REDEF: No se admite" #~ msgid "ETIR_S_C_OPR_DFLIT: Not supported" -#~ msgstr "ETIR_S_C_OPR_DFLIT: Sin soporte" +#~ msgstr "ETIR_S_C_OPR_DFLIT: No se admite" #~ msgid "ETIR_S_C_STC_LP: not supported" -#~ msgstr "ETIR_S_C_STC_LP: sin soporte" +#~ msgstr "ETIR_S_C_STC_LP: no se admite" #~ msgid "ETIR_S_C_STC_GBL: not supported" -#~ msgstr "ETIR_S_C_STC_GBL: sin soporte" +#~ msgstr "ETIR_S_C_STC_GBL: no se admite" #~ msgid "ETIR_S_C_STC_GCA: not supported" -#~ msgstr "ETIR_S_C_STC_GCA: sin soporte" +#~ msgstr "ETIR_S_C_STC_GCA: no se admite" #~ msgid "ETIR_S_C_STC_PS: not supported" -#~ msgstr "ETIR_S_C_STC_PS: sin soporte" +#~ msgstr "ETIR_S_C_STC_PS: no se admite" #~ msgid "Unimplemented STO cmd %d" #~ msgstr "Orden STO %d sin implementar" @@ -3642,10 +4444,10 @@ msgstr "" #~ msgstr "TIR_S_C_OPR_ROT incompleto" #~ msgid "TIR_S_C_OPR_REDEF not supported" -#~ msgstr "TIR_S_C_OPR_REDEF sin soporte" +#~ msgstr "TIR_S_C_OPR_REDEF no se admite" #~ msgid "TIR_S_C_OPR_DFLIT not supported" -#~ msgstr "TIR_S_C_OPR_DFLIT sin soporte" +#~ msgstr "TIR_S_C_OPR_DFLIT no se admite" #~ msgid "TIR_S_C_CTL_DFLOC not fully implemented" #~ msgstr "TIR_S_C_CTL_DFLOC no está completamente implementado" @@ -3676,7 +4478,7 @@ msgstr "" #~ msgstr "Aviso: %s %s interoperatibilidad, mientras que %s %s" #~ msgid "supports" -#~ msgstr "tiene soporte para" +#~ msgstr "admite" #~ msgid "does not" #~ msgstr "no" @@ -3691,7 +4493,7 @@ msgstr "" #~ msgstr "%s(%s+0x%lx): no se puede reubicar %s, recompile con -ffuncion-sections" #~ msgid "creating section symbol, name = %s, value = 0x%.8lx, index = %d, section = 0x%.8lx\n" -#~ msgstr "creando el símbolo de sección, nombre = %s, valor = 0x%.8lx, índice = %d, sección 0x%.8lx\n" +#~ msgstr "se crea el símbolo de sección, nombre = %s, valor = 0x%.8lx, índice = %d, sección 0x%.8lx\n" #~ msgid " whereas segment starts at 0x%x" #~ msgstr " mientras que el segmento inicia en 0x%x" diff --git a/bfd/po/fi.gmo b/bfd/po/fi.gmo new file mode 100644 index 0000000000000000000000000000000000000000..7fef84830aa98526384cfd9c6367ffa5e7e84f76 GIT binary patch literal 111132 zcmcGX2Vh-g{l9NzNXy=3A4a-w+H_G;3Qf|a4J1uS(gCHUH_1(M+ax#Ko7;ha2qGI4 z5K&wRE=0wJ;1&=U2nsG#L=jYmz|V!C@P9t<_dVyHo6&*(Z+r5b_dV~P-*=q%Jigz~ z?@sXR*(s4Y9JU>nNL;aVB5~z>=_V3)ElVUO!n@&-@F(yf_!8U??pB{j90w1BbKqil z6dZzO@Orp6{0gjsKY)|q9;cYQb37Y7(@^Hmhw|@g7{E_Mx%(q1|NjEz|1PH{5(mSH za2lKiPk?KnqVR6G5Iz9+g}XH*5_RxUsOKqI32%h+;3E*H6XP2biK(y+E`{eq9wqMg z`ui_8^&)s6`j%(vf{4!Md{|)8uVNHp|?l9?j0vwOJ79IebU^(o9%7^RV{_qY+ zmL%?j%7-W5uJB*}d7|0W2S7bP49ebIxDQ2cW`pJKPiA>3JWV zfcht%zw!JNRJi}@)w`W$k*vc$t6xKB#p1D3m|9L%Dk&lsk_@<=6A@P`Goe z=^q7^j^$px6v~~IaDTWK>iOB8mqUf`7PvpW%ku%aAL=K(`ma#s?agh8#9QD=FbBT^ zH^bx#D@PxLDnDO?)8M$3iNx`622?tA!O8G4sOO)9N~d4LMesGKdUoO}D}U!hrT+(@ z+`ZT9@3z{?`DB2&;t(;-=%SPg68C!y-m3!d}Ou=;-l8M95wD|SH`KUh(70;hT#qZy6F`T@XG6j3#C*aMn9G-F( zafMsp3Ghx>4PW$}(@q^mz0vcBp20fPFTl%q{sSm?+ER%`KYSM?h>6#s;=QKBp5G3Y zj(>)Dktpvp^;Pf!)IWh0u(iw5_hML&`eAqyJTz_YpAHq@@4`9oHK=@;-EHmNI(Rhd zx4~oKEl~0QE}RMzJr@6Ia2Cqbq1?aR^ZRfn>fL&c3t%1UUMO>)h4Sw&a0)y;WBF7I zk4N1J6_1;s+rmmEj-w~T zUPu#@_ykmVUV)Qg`JkCw2^&#g2Tz5+gG*rYY|D=vlz-PlrPD+32>50yb2%)7N5M8& z0f(U6{}?QTKY{`L8&rG_%+prGHEg!)fV`TROmIV(Tk+*t+ZqrMO-U+#vA&vS4AJm#%d&ey;*P=5hd!@Vvr zbEm;Ys4syE-*=$gf79D6e$(M0s85H@Fb@NGA6yKdf*atZ3oZQD!iA{63zZK$U1aGx z1uA^CunBI4D(ByWOW^@;PbAjCGvVp*>#!9be6fXV15|!}0xEuw!5+BJJCLQ|W=Pdd zJO=CF(n~D-S3~*xH8=;p;Cbw&=H4o(e7p=UfnSEz@ZV7Bdh%tK&KsfJxfv=S9`*V= zUGDP(o`U`=sC@hglzTsiHSq8&jO$=6>RaJi@EJH2)?aDmJr9pV{UJCB-skn7h03Rc zud;q|1v~=vg>X9jFgy@G0F&_dUVopftvsCwXQ00ZPJ@?1#pes~82Gg3_-oAm3@Gzw zz@_jK&xbq@ey7E|9WLhirBLzxK9swAz01;}3LcMoBdmm<@#;TAh4biZEkB#!Ow<=c zh3`wS0zLs%p7y)W%JFh2dmn>}|D&)B{vVtTCthzn6)L^XhqC`QsC<1HR>6huw(y(> zW$!L{6nqxm1b4r|^7-RX`agrm!hgV%;Gyp^_fLmPpZ7q;^S4m#!NE6L`8f?LUYA0Z zgS+5q@ZV7GE`P7de*^FU)aSti;k8iyeF7?c4?vZN*Wq4p()+BxmUke5N1eFYI1?^Hc@~uY z_j~=Pq0;xjk61aZg(^SqfT~xYgL3y*@CbPDEf$`6up0Fcl=&~iKKOgM7&hH%?f*NW z^7mn=^qKfktLN=d@w*M43jYda?&Ob|yO+S#sDA+G!ec*f;am-uqrMa>y?zdr54(NB zo>##AP^aJ_a0u=XuZH`=k3iY`B2;=j1(h$ye$w=N;XKsug^K?}Q2F&QDEBIEv-aRr zI2rYNI0;@0*TB2sQh4B}tesv9PeA=?coO_0R5_b;yZLiEY({+zRCu0%%8w&IZSvG| zcqZy^K;^?>pP_GotKfKe29)_OxHr5W%G|A9{RC9}Uxcb3JAc-A2s{XNIXoQJLb=xg zkAZ!#3|<3|gI|Kv;bZVvxa%F(zDv z2@i!CDF5E>c^jO9`eCT_{g+no&MI{1KEtk3+Qwe}_}y?q4wV zJSg+0dS+n~^>wfUej8T7zrxeuyf0clTmzN9&q292jLdEAR@L>1^ zR64&5=fMN-G;^oI38>dWg=Yht2(N)kmrp>scQ4!n{sQg=pMt87e}j9%{l0AFAb`rJ zX1D;J3y*|fg38xNVLkjORQRgyvV7=)`=UMvDjruth4*vNr6)WP_2W?H{sxbNyWVZ% z_eoIsd_3F@R(YNR4?^7v70>lh;V3})e*HQ2AL8m2U&kxdRo>oBZ=1 zLAm!=coaPJ9ve4R!b4D>375c)o?nH^m&Cp1?kp&EHB`KEa3A=2DEID#DhE%(Q{XG` zcvyR%xqlv1yxs#9pL^h8@G+=z_YcoKzGLnk17)rnD!Tg!1<( z&sq1I`YllP;eM#{v(I;}exC}Zz6937d*FPy+xM(JKN%|gTfF*n@HEuVLZ!o^?_0U* zhl^3)0ab2af{S4A1559-p!6?>viC)(cIXc<1NZx(rTe+C3-z~Q9h~$4b7`<2*1$)h z%F)CJtsOZYE=Iiusyx3RD!f01%8xyNWcil#JQ=Fqod#8IyP?X*EwCK^3@ZP2dC1c9 zaH#Oig-Y-D!ZLWLSN|F+|NaG4PY!(8`pZ+G!jXe(;cZambhjT{c{>^=QP;rf@NCZy z!11WR@A(LvfciIZGW-)f2JZ6{EAMll++Piq-gm+&@Ne)8c*G;d%~1LK2&{sKJZk;- z8n_DeEuOE!xu{!zYWaUDl=>bx8~zh2UekVN?LY^V`bMbqdl<^x>o9<`e{TA%a53r& zp~~C6@L2d7Tn>-y(lS~;qQ`=QQw^||n9)VDyDi|;_Smw$lA z!+jsKexn}B-YO{l^-$&GBk(wQ4^+DT5h{Hq{L1>B1}OK|L&fVoaBuhncqn|#^Y5@4 z^*+D0a@-21p}r9|z;X&yC6z&6`gUXNpz^Sm|32P5F z!lO`s8ZLkj!hPYczcYU(dd~1%?Ahko3zZJ%!T^3BE`iU$NpR-xO@Ad+x!43%j&Fh| z!26)m`!zTR9`dB+dn4QxbrvceH$v5u_e16DeNgHAXQ+HU^bgF1!KLtE*aY{4Jziaa zvVRp+dVUEieI9~}@6%rWvgh7US$UcSC-VF(D07>j%G+g7`S5x=&R_n_L9=b++!*k7zYYJf_Qw?UQL zuft~eBRB&d^@62O15~&!gv;P(y!xL|<@neat$dvcUHIXN=-&es-q)e>f8UpE96bdp z{u`m5e*o?dKkNBbI05x{p~}NgU^#pi9u5!vKTG%H;c=)NJ#%nZ)bH`?4|?^zQ2Fr# zDEFR%`@q*c_x`J?1J4T2YPc`vTA})rG~5$rJeW!@u7rETk3p5UJE7A1c{m%+|GU}Cc)kxRUO$8i=hIN>_%hrd?)(o+ zpNVik)QjLAuo)^H*TMtfIj{^~0}p~XYI5a5LNj{|PUJXaCFM`3lUVKJXQjV=jYp zQ9lS3{x`j9=`#hYUYrhR!t-D&{4{Kajq4%ean6Wj>v z$BlFLzXj)`KJZPZZh)!>H^W8nVR$m!Yo~FpeOV6iGI0Y`d3pEF<6OMH2NlloyNq+? zsS38Ez8t;{KI7T9>$t=vsQ&_`zwyoE65oO^!^QCK-Nq%}1z&+@!z;&+OZ39mpwhQz z!Z7PB;V?9W*X+4*Wd48YT}mcfJNsLj5wl03JVaoLkqt3wEHMbjUb2 zA8{E}Iy?y_j~srerE48jxZVy`FMa`2aOz>>T)T7yRC)U*RDS*iDm=>%ALqtL_d>;Q zuOr5}`c@BBZ~CFq=WaL&z6w=ejyZCi>xWlCiO59;{Si}M0oHF%cnND1ob9(5d0cceR%{b zfA>sUeL5AYK3xYd(sQVIt}3_i-wxHD>@stlYyUSvrRP7O(sR))%eQOb8K|F!a(`Kc zx%&>N_TYY~a{m_?z|&@1xy``~Q2zwh!qz!fFWw6kzrRAYD^uoLd{)3SQNIs%!GA*4 z`!nZ_OI!?ZgL*z|{-yb4ys*Pz^~I^Obm0OnAC1a5{0E*O{C1h0mjaMu$oz1Bme z_pMOv&y!H;JiXG~>4mCi?}utHe-2e|r!BO6KOZWezX?_EUVuuUiW7}lsB-sdsQmgJ zlzWpFS^Y}EWvD;p`8TNYvgjlW=cUkfbX^<#b||<=3fD?Li-$25*9L=YDt;e8uz7YHP9@yHE1xT%(&Y{qz~`ar+g{6zbx`%>e0Vy%3#y&luYQ~xH=YUA-hB!xA6|t@_qtOo z9o`0?LVYuo{w1ecdvXs{`}7AW_jYTrc(uUgsIP~M;geqfxJD}v-B9)5Q&9Ev38-=( zEI0EP!^2VE50wv3!UNz=O_uKyq2jv?s{CIJ_ky2?{qWnc1I}!=@Lmhwj`~5U{;1_N zYk$v$N|&dg^6RJ;s~7z+gZg&31|HOE>6U})ZytaHaAKQJ52*5b4^;Vj6)IfiE6lw$ zQ0~7Eu7ZDpYHt>=9OvY_OQ71FyWwKE`zlM<2B>fk!gJx@q2ireZTu`$`}-VR4{J`h zeEf{(Yf$aa@-xhz>tPc0{ZRS!H>mtOX^oY`4k-QGpz6=x;1)RjOe@D9g=$Ct1=qsm zYpovK4%eX`f0l7QRDJlN=d^a~KQDv5=>H6=oSnSR((iJpbomZk439`ze|Hv~h5BNs z_Wn+I1bh(g3!jC1!v8>(%iTMy{?x$+)R)1<@Mlo%)4`qAudVQW7d!_22VnqTgi4=% zyDVK!hU-vwLe=y8pvviiX)6ckK((XyL-m)tbX&Qug4dwl2vy&9?XhsIgBPN{8D0dB z>$P})0=@}#A~Vj7mv(~6w|(G|a3xfH3SNB=RC)g$+#9~=nOJY_&pt3f|3tV4Tnm+- z>!IRzGgSF}2rhyD_WD&DtQ=%LzYHhw{B@{!PU^F8q@mLN^HBBkTkv4`1XRAf43C2o z`mNob>A4E3oqa1*J9?W}KLP{PuR-OR&^p!?diq zTM3Uw-3b-Xi=o2*d8l-J32uZZ4O%<#C8%_mc(%oNEtGuncBpWE1uA||!V35*R5+8l zac(@^3{}21!2RJTq3YGwq3Y}Jpwi>Wyp`V?sC-R9^-mW-*}DPC-P@qT{UB6*dj;0O zrXedw*TF+kKMLi~3-F_G|AOW3-B9)Ak5KNv1{IG3Hd?#72r9kKfQP~LQ2F={sQUFW z|NK5U9`&Pe5BRv}vry^#vR5Cv$?Q#rs;{+hKe!PpK9@oHb30V}eGeWFU-8dpZ?<-L z1(g0ZQ1SXMRK0!{svJz(Vr+niqt3z8;5Bd+{2f&Lb;3E;4qgOR-X4Jp*K1Jy`^>jk zJ?(^Qhi`-m*KeVo?|ZJ*zgj5u6;RK=36&2odG);W%>5pycI{et7JL;dJ^ zIqHj{()){W5_|~01^xpnKXTVvI^O_Q{_pkbzeCBb$6V*f6L2N!TcPBISE1^C;d(3g zH$tVu{ZQ@UF7Gy0LzUmRdcG6xi~44$`uYW^dh-Xb-tPv>=Nfo2`nN#UgD1WIp6{`I z?S~EMKLnM|hu>)Bb3M$X{vuR3r@YtF?;}v|JqzpL^!HhL$w8&}9dI!mf0LKL*@^|8gtR63b3sG-?%HNMewY$$k)%Vw+%E@sbw*1IL>E8fVuD%A=T)e1ANmnX*AA%ibUT!Pzk>2-+AZS}55s1t_#J(#wdbu+ z>2@_d3*Has!?KTByL~29cy5QX_amrsn)sNtONT+VCv%|E<20!D=4}7`QmAtOVXuF; zS3eBZ?)(|5-0k#nlV1;j0qV1%!f`EBetsV+UN1q}3qE1~RC=D~+3WdM&l_L{^Ph(5 z_YeN0rSpkU{n5Li>c`ih{P`_Ze!uxP%m2Ah@y|h(pX;Ie@87{U!wH|V_GCY(_NETX zpL3zg$<0vt`w*M}cfQ@yZ*Qo0PlJljLa6?21yufC29<6fg-XwFc>WZsTs;Tn-|JBA z#k^0O{+V!p)LD1{ya>*OH^OV-_u%bt&1WoryM5M|H>mMcFH|~z5h`7tgp#Lry~FC= z63>gF((it#cH||f{=WQk7Ou^3G3w7irRNK99DFNR_&elHjNiDFj{2R-y?*m{qTcxX zz2QgEI}E+aT!*2)o9i6(@Y4O>YjA&m?(Mw|UdyFCtK|9+_Y?t_7vDzxgg56b;qJe9 zwm*6wi0kw4Ij%i;{xbS+#?0s7)36`bd$U9EZ|JFi{VhC`>qlJGs9%NMTrY6x_f=R0 z=VRwrTu-6ih3jkFf1hht?%&GwTkfZD(cHOT1NXag--+s%T)UvwkL+~gUsEBUqy7Yn zcCXRy?MwN6uDeiw8P4?j|Hr-Bk?{9bZa&Ag)VnYJJu&+g_yu^GxAzXXLJ#?!!2O}5 z(H`E;@8N9puYw12jpx3N=T~wcaDNG;*t++KPD4NZ{h6Cuo~hmX9@Os!uH~5d80I^i zj{T|P`FpuOiL#pKzx3wy^ct?eqW%b^xl7FAT8WuOT&g?zosXX6r^~qxkJ)_|bq~*e z&2=>Q3%K&!Pv_EaJ=YhxzJz)&SmE^_@m!1_Z}INk0gp!gH_Y9{^$6;VFsJt6?cO}M z(NFbu9Om`=ynlWO>KWMk3l~*3`n~M$8{l}JUC;G2*BUPUQs`&BnHt=v^!GpZl$q=G zhu=9dJ*f{xeVKQM?kI5z_ov{-60VcH*%r^gz+dzHx3b9ZajqYDyE%9l*9XwcdGqCP zXWY^6GhE-|`N^nhb`z(<)8Q#xm+|Z=p8b?d4aY-3zXLFHv-J4=9sT(4yXgPSKieB~ z@8tPDT+7iLId<81D~ zzw;xxQOTQUjU-$3l zl8o`Ve|9g=uGRy7H=tL^^>6h44Da{$&I|3McZ~P>C7zw`AG{N$xLUj)yK;XO&(G!hr#Cam{hzS=47?4!_L#e0 ziQRvjdyV-5%ss$$ByO&N`dtkd`+KP$!tAa*f0}#A1N(CAjNWVT9C#kQmFo!Z^*h3c z?>F9!v(fA4dWGxrnE4?Lf5)I+#`Qt2U9i^+cjNlGH}DqRsOA2Cu4`gpdIx4MLH#wZ zMy?l8cY1$ibzju)=epF}nFL!HU!2;e=r~ z)b~ok?PGVb@~dY=1pxu%(s#H;WLu77a-iYvg3ejmn64Ll3=A8>Oc*9Py` z&FFuVYYAp%qxUwhuW~;Tv)@C14)=9Xzh<8OjO&Bk|G?=GM|d1&KZUt6o;`s2J^tCL zsN=uYm|2X*{ctbrgukc4n;4J5?hxu_-i<5aXSt5@W?sdO_i=wTdSCZu7`nJ$nrHe= z@O%`OqrM1ACY}gC;>~`Y`#lNEk?>BgkMsOmu042uDO|;M1^W7(&vhyHOEKTz!@mYS zhJcA)t|Pg2=9-L|GkN|g?)$i(#&s;_j)o7ScO2J`P`}Q#lxq`e{pMq5I%f2{4z{BI zI^2xx4_BwxKNI_Z;5rCHr^9t{3)g?RPV{Da(BHt7 zM14B;cjlRXQ@Otpy&gD&>q_+AiMfDFzjyQOH1Eby=zW5V;bx-1bui}tXvPx1^X9(; z|ID)&(9dxH74GZ&vyGmzvKIXxqW&&ifICyWl48)Z0;ilPmo7aC0u#M`L#NY&q&TaeaX61k?}v=VjcF^Y*90m8f%E zAN6`)<6ggg2^GcyInSxRclaE9NF+?w4G5aQ_n5 zBrg3bF_W>|#7dt3fa}Mo|Bd}Ga;@=h{1bisz6HO}^=_Ws>Gf{sUcZODTK6^FFF=2H zt`6MT3H4+C`5e^Ga$gJo4^G0&1n$4V{c+qM1h3<2#GPAFAJ4NXT;cCR^sYm3Ic6S& zO{nK`|7Of|b1mfhEc!R2cL7u>$wg@{XWz+T+6txfcv9=1@|w) zpK`qiz3|tM8t0?m0@QQ3?n37k%uVI~&2W}CF&_1YxnBhJdj(#=^F3p39&e8l<8io| zE9pHr3bQj~<_^PLlB*THZmtWs-vnoSGgqO$hieYk8t-4ZcdHHcY3S=$%l+^C^M$a? z+h54Daj5gC_w)7^b6vr_s7SmtC{rR}}9M2x*{uZuJ`{x7b@5*%r&+_OsbDe;C0z3`s zcLM(H#C@yx_hjyOL;qdwDQzuwALlxj>nA)rfa_xJKhN{~;0vhRxbNj^;#!M(9+!U4 z^IX4g!@qKU$?G4E-gmfGp*|V?I{bc^`;)l7fqntr2#?{??-E1eJKnut!N5P=B+lU3<>=jw`tR^W)CX}jbKk~wA^NMm*^i)p2lrc`e!u71%>7dD z_e);iJ><`4QGc9gZ{hx@T%Sh$4X!89dlFW|&v7+z={FsJ&#>FXZ{UHb8@a;YA>5>; z7+<@2Fq<0+s=B&z>3lwDOLg?6gYo0Xd{8!PLEq*HiSf%*{pp}Nn;95N=VG>+a$T8$ zR9~cnLu=wjXLgm%=kM)j3p1^-Z;BGebMM zbRVY5=5__y?(Tegh}+GPYhCrH?SVBFaxi+ZFkO|icEl}{lvVAz6Jif0B{kAQGc%d{CFk<%f#)iw_zI zP~T_|%48H3!eCf9itglxa)r*Jtr#c_5VKLA*Yu`x!eSbkjMm-TgFw5~8< zY2200cjhvKL)l#5GKE}74FyBJ=^#Ipq70|343pTiCY}j8kwBbYoiIT%W1`T{b$4`_XMRM728@KA4IfcSJ2 zd{)IOOe!;w8R!WzL-<>udMF<{luT4k3%hq}AV^y?HRPJ7%m5Wgc~6G8j3#lmV$wXv zm#%C&?>y;7L1oTTcyPs+jjj0jUk5*9>9`%ikDGi$-mXmN@@kP<(%mG=KxaCyQW)xX zrMpRV*Pc1;OinFp*!-*N(7XpV$}=mo)WKkiOXsP<@`74WT3fPqb73$aSOs0$2F+tD zX<2&uX=Vf3nKaG>VN+Ao@EsY(Ppqw~t`9c)WnS8qIq(rc^uaKtHbKCI(_e zXPV-drT@ygK=-Hnv$-vcI#L50lKm9AK6&Rg35^T-KzdW)%f&!8P_`oX$lO47U@+5Z zcSFIP*&Uf7xgm`#HQ3wnM#B6ejY;}6e=K2~NJDQa5im{1U2wN@BcJUa+LWS7)HRz@ z5%zJRo5F(AcEV0R=v5s_1?>TmB!BhDm%gCBwaS!vmu4fJ*jOYx9UM%Hb-$I zk`m7C=j358GLIQGQ)fsIt8-jT~t3W6zRg{eVTrkh?nZ@pfMfz*~fqLdy@zzegdM#qUru89nVV^;|=RE_EU zRP~f5G`n_;&Q^W+=BYuZhlr%RWKO{osMQio&1-e8jAgnrJ%yY}rrR(|#gGY&e@OOx zP}5T1s@m%kcLqW1%=QoBlG>C_8IqVbVPhs+$OqYu^@Oq1HqBU4E+lu<1yV`rg8Y!( zME)V#IZ21%r1QWhen4JRB-3f?cYdhQ5%lD;g+W)76$xvb1BOi!bISS(RQphf!uf&p zX2}PnQ0ua`_SVxI+p4PDTbC_gvN{wYab!wa6{(-`MpcIfhwR7=qCG*4mo(#@d#pwWTqS`#^8sWjWr~&>AMK%Z*_{DH>E9w`RC$ zpl?f1wPXp^G-zE>O~Tk1mNt;#0OdH$ewF8{h7~@0eYYl4!y?y&V1~G|DcIDT>CB1Jc>M8)IK(msE|sqF;3y`h$ZA2X_aB>($yl*Aw(eGXdD9~PLF z_Ntb~|K1rI!j4enQM(ovMUu)5wj_9!5A!-z7|J5E(i8R<`i3%t)YZ18n&IWJke35n zvISaBhTH0B^9zZtYPcp$T=h=&_aia&r}~nb!XY0DgA9lfbb2~Fhxyu>()gFgSDlor z4HzF$LcFP5I@Q^`&8IU)1gAS3a3_lma7kq-4n1uOAYQ6m0a)EuyS%lky{fgby|uov zxuL%9^jID*l=Pc-&09&k$>1SRl6LkEk90KB9qHYUx)o+^tRA=!s}99V;fN$vJv%3z zLxAi;^ke$Wji;TBsD`hj0T~wbkp|R;ZHFQ2ZAUaiB|-F!U>AeFPRdr;t0pW`T^6~1ZFiu8l5i?ken@SyhxLXtkTkp?W6}Wf zd0LW+Z$mfZM9e$Of$3$NH66Ca#uA+=*GXuq&&pD&BfBx}oRF-8sHlk~b-SctII>gQ z;zxJo$c;7|mF?^-8}k`tYvnZJiz=UW7fD~alMGX>^!PlpkVFziN$K34qCF!NO%VDj z2|=ugVO@p8h5}ByD(ROO28z>BxXQy6 zkP^KU*@zxu8$tFqN_+k?mQehNVb~a;G@DD4a9d7ot-zGj<5FkCkc?%09b@ttDg!YC zBWw15SJx_oqw~xy_Y7K%iBiXVshCT~C?^k@hbg#4LlU0O#1F43gY^X_A{0suFd1Jm zoB&`)qM2`x=6sSWzO12{J;LWQJ)Bh$M%gP~r^8>7(D zF=J&=-b2)wrwgZe!-4kvxu=>a7I{&g9b`0Qjc|(C_7teX4B&F~_egJgswvw{TEZm` zGi9Jz*mg4!j^#rK{E(m23scGs-YSD`CcRjCZDEYw-rTyZ%Cgj&3JSh*0!t<GZdp*@1RH&ozTj?UzOhu(sxy4TEm&E9Ny3d9cX-536O1MzT zZa8qQbQ4XI)Ff79y9(hDKbpad^eswNxz66q5Y86d+L;Z1hfVsKJ7%7hvw)d`o-}iT zn%Rluv5rhnl5uGUDL{)Dnysj0JBB0yxA3p!P03135ZiKTx{J0=9bjcpQ`OK=G0#j! zOT@0Ohuup_Z(p=Ce+TWP)cm?)=Z5)8r-r7A$d%YUTsUkC7p&FlgpHW`Gz)`sj|kEf zcjVk8ZYb^)qcO~)rLEgq;F^bE%1KOIRm^g~sg`UtrS6UuhVr1fFP&n64&fC485QRU zrXP)4360!S!|5k&H1)%%Q9VUf-(YVl=wSDc8g7laf)%*sCx_Vhpk)L%=0#XN!}a4m z>47w&8=ksZV((Dogr!S1mn#g?vA7Ks8MbpM`TV>sWld$luPoc7owHTP&I!Uq6UGz= z8LRc;XuZnUK#5LayIdJt+b$Neye060q*9||ev(Bs->3yAh2?DrTp7!{^RSr7O5Ug? zBd*1jIIA|yK{d6s1y!v~*=w>yiwJ&V0GYoto$6x^HJoIR47+5hFHV?J0*9iizLiQE zu9y^4MWZ8jc(@%6v5ME2>LV0NW{Xc3qkNmVAo0TD?vsAGqBxK(^z8#V0k};mg#jzeT}(I7ej%&5_=W2w13|s*-Dt>A4G2=5Ti!=n!LXZyK*A_COEig7 zkfcKC#wHtvXxySXEOr>FohsT8XV@ODa{`~=Orx-bnWeS~AxbsL1({to zeikJ(fnjwf&28;VPG4Tt$T%|;{=9Ier{z(%X4N%v%S$R+uaekD?h&e3Idh$u^I%gh zOY<7~%DjBhykna8kgZc zD?H&^P$et0ZWe89s}|&NVO#B!i`j~(JcV0%s4feGvd#Xf+l8TEv+;`cez!-%uZ7VD zAoa3SirH{W@)fpeBc3X*be6F{N~I`#9wv=dP1cLb8F!SYy0Y3%MFx^EELock^_;d3 zhOCKN5ZY;l34_+ktcdNG@s-^+*~p7nbYiZJ9^aUOH(bG@z(@|&-W-I6fN?(?R>^SR z_{D}&E~cx(S;2a(d8&U7Q^~D~);Cryt!;0uSD8>VprmGsx)loh;dHr@!i_t_sLDI%&g#aR_O_Z?r321~pp`op$~Q6y zbQU#(L(7!*E2*rlGh}A6f^AlPY!xczgbSIoLOs-&fkd$0!)y$Nn&hpSrTb6jCOdg9 zYEiBCV%u(GeRFHLtZb!SDZaYx^!D18c*L2q4$BVFF0j9hQdJUv*&9q{ax)o<_aQ`d z+qSUo-b~S53n=o1O~I*)TTD zX15|Uz?Vjw zda@#?A^VoV*O^Y*Q|c(*_6#Dsx3n&8jvhs6ADjD7kPxAk2+Dc>DZ{B?qa!VkY#+^wEy3@h(M}IFtw;}JXm8#WN0u+UQ>+`-+iX5 zPY9*5NNBQ3;;U6x!J?-9d2VO6YwSlnEc%KBr>a%l+!M(uR@?{FcD#oUc&po;)Ik<&d)7L6W~l1`|^d`Xu>J~;bPD_)ZEap|l)XtL&k ze5CemE@!8r8V0X4FT&}8nBb-A?CPxYpWMz4dZSv~CipI8RUSs~jKU2K+F!M_rD;X8 z>kPJdH*9`L4W8SZrRK^-Cu%J;_;TG;z=pXJOCyu5Xo(q%ZXDqws6sM zmi+vFmZ1@o)|*mWEbA36Wg>ytp2@P%_?+2pTEVTGyGDHe+(^TD7aH{XZr6=OLf zDKWaDk3nB+b5#rDv9RfKZZE59DC)S4?P^m)AGFCK$-<`_G5EO;t?8HQm-rN$sfz{7 z`pa+%Z)Eti7(A337)r9t60>Ie2ZlW=@y-mF2nBvxMzg7G1E&Ba`&j|X4NY~uqwTJC z`RG$CG`KByz45MWK|2?xB)grfNmGw-+-HtG-ImkKYFaC1TNe88mBeUSO@*yPg!xh` ze#8>2D0EmdmUyhxRA#!8MU6{E+w`e_(YEi{>{5ws3eaE@7nZMRXh>>LtltM|!Is-H z;dZpg@;5HQyT&Hfg(I5%@Rg{n%6u7Suw){ExchQOQE;fUmZ$QM@hNa@N{HAn@cZ5pB z6GWyCB-bsaQmuO9r1mmsY2NSkp_!~?)a4~bCp*R-hKXp~Ufs4^nv2l0a3s=aLy=h9 z9?NWQU4Cm)&`*}ReHShP*>$C+n%4s3b7o$Q8r?ljBQ9OOqP@Ou#d4a}5kr@fb@ix& z-BGtPZc#U!kYw?9t6|#F2#(yY=69HsY`}^oVllJ-SIM~p*|FWB^<&X+XU$e}xLCxZ z#sNV^#iKZx;3|Dss%-+NG#9;%EzF;9udSB$ISb~uvsBPjR~I!$RF-gtJeIxC$rT{qQB<+b+?8SK)bmndp|dK;^yrk`F?pXKYbb*tLysf2D9 z3TrrVvBBof!<9ihMIttfps?F0V@(-v{+i3SEEo$>yj=;M8u_@yU+ZMN;hC}bCgP1n zsk?r4PU~th$BT>K@#flxv?%n%Y?!N=Z5s*0IGQVL$8Ts}R@L6pzO=cewqaTQ(q&t5 zaG2?ard4J*pUwyENt#f)gQ!HYpFoZ4rW}P2$=?l|LeXJ_*`hnedDC>e+rSc?h0v|7 zC|dMmd=Yi_;iSGF&K2Ep!^Z6l(a5kncf$Re1MG-$BCEXv8ZUR2w$YBhnx@7jRc&FF za;-;n0*2eO6m`aK`A7zwPmu$){e!%^sC7Bl1%zToxU++|JCy*g_mN!0ye<|0WUDKY zBSlH2SeDpf>PLRw%~F4h+xpy2(@^YElTmcT@0*JJDNddu{De!7R5cPvueLF@Uea`q zVlVFYuvzmk2&LgHdbt&=l0Jte$u=f@hnx0OzrJbo6P&gWDi+mYnIBFVk7mo&+hOKo zF4@bfv2lMi}0>kQOQfE&Im9Qfexg67|_-g&CxglFrYQmwDUjy_p;2r2xOG?ITlM zL@sqR?sH^UB}p^m|Gg7T5*Lqk3U(+EJ7%>+tk=>+T+A3A<+`%wO2%KR9$VZ%E8W%Z z=G>U|sU^$Z^H9VXd)mnLK5mee&IO!7!?tf4TZ+&+232k^n@Z-WlN#|ofuqin)Vj%U zs=0=N&LgIRRUDhk>MDbzn-$#b%p~;+;ucqbLa&Ch>>uY)5@&q1UhlIRG}j(jbE1t_ ziYf_V(o0mdhKU4bCe`Pbf7sTf?QP*Ylbe{fVrX0DG%%l`g-yvyT1n9+C%lLjjqH8G zg@iUJPxrQW^Ab(Ey|+u1-HsPvd_pYz`!L#QhwW~Ko+S=P{SGOUn$mL>U*o>C~QCfSPbO<^{iInev$rORT; z>uxq@Skg;Z(TRmbRfG!Y^E#0HpSKem z*rlc&P;t035dp9&@muFco(H>OxKlxoOYD@eawB7+5N>l6E0&5W* z&3stjoFpF>2Q7=miU8SMGV>X2|HgFMa)B} zQv=YSX4gz{3U&&mm5D(D6v}GUFy6(9ZJu$W^l$+P3mv>Fk{s+SDE z@g-R;q&3dY%Qxi06hF7Y{(2?4bEqhu_*v7~7?EsL+osLX@wr{aiZS7KTF<7~HMkA4 zYSVm$U8lmc9lk2Bqw22K*0xv6B~$rRh}h6Z_v6|CtNwnu%X%!DbKWv_-C|Ho5V`GS zzwRz=0f4-Ci|2d&j-IN<}G7WfYD3qwhvFU)+#yy_4;Ea(gITeBA4@c1k4$g_C~l1V-1N zx|oIo51*FKlH_H-yV|!!&Zwkf-mG*7o~Z%pOLZ`+jD#DC3abca(&UOA*$~IxI4iEv zM1+@qV_TI;ABtmaXPC|l^Xg*j5lYQESC9d&UxV|GhsK?N!aM8MY1(+e_8`;Vxs@e% zj;MPjjOxVfL6;K}i|<48@~~^|;?=m=|F~ob<-h)Zw-~}(6{nw}cC{}%*sdnlHK^tb3nH-`^=fA|jsdh>#)gwD{gmL#Q_nM?7erZVKG#xPKo#nOB*ievWdDIXwM)Pf+57#Wq7R=`hyy0&ladk_{ z*3DWr6Gz4Ms_4mRdeORzGv#{;*Fr{urL7IPo=|O;yni!j+@{bIBOL^UOPZh;&o z^hHmLz3SF&k0$VWyKc(Igd95}+K-f7Eep@&b&(t?B1c1X3WBZG*n2p0?agVkW#{F& z-R64xkU1)5S5rAwl5||g{CV@{%rog(M%-(N+n1Y^GRx26#vH%4qttSKkGbV_0#MA=}rwL>}o4bxEi+*HmXppDK!Ss5q3g8XqlV zj<8W0ah(1KdU`zzT7%j+9q3~;6(DEiE1UwSuQ=T3Pk38f|^Jdz5C$=9wd_) zC9|QfQig*MC*!HFX2!<7GwvtVHfb9R-BsF-pY( zG+)%GCG32iP>QDEXXi2EBU99Rz0AF#SU%W?h+#$&B|F$>1gLpGF3bMmcDo7 z4#u+}G2b6;^f!s=??>#=QTq$Y>j#x+M>v#3d&7`^7J z^Ca9$x-P^_QJ$1I(Wk>niN!>cSqH0pQTJha=Yv}nj*G&Hjaq-`FXwaU1;Q4+oR}EX z)PlGnd(S`IW9^D7;V-y@gZeTZs!aHzcgGX%02Gqd_o_}7WG28iWs%vMbEx7dSeDgg zjiC(9&`{7YXLid>om;Y6y1EIMU1Nrsi1)2cvE%b2ToPB?z5FQK&lgqKEeSMA=4=kW zW}?+^eN2R2fyqz*EE;S1!4ronVw5&q?>6~2cqQrXkZ}ToWh^mPvr%cajumMs9+9xb z?fKEG?`!NMI%^Z|b3EZ*zvy|QrlBQhVT7tw7s>hv8}zaX-TaUy5n+CXsUMklI<|X-mTiU_J;c9D;nGDm)Eq6 z>D(JK*1l@1?lsqJ<8gb#whV0D1Emr%8|g^8qtFu+^I-|?#g>uTvm~t%tlK|HanZtl zn$j|wZfS`Mi^vlHJs*|Mm}j*7-Qh}xN>Qq#gVRj>D4O=XP@Y&4H)BP@z0*oCeCs#d zOf+lb%#}Df(#3i|@}+q$o(@vi#6CP%qDKislYM}S2>=dp?{Vvfez68OqR9XSPjeB@ z*su`VLTK1tIb)N{3T#1k8*H@pnr4;CFU9&dW@U;7J?@?CjOuciOR`Yx8R@i}VlsF0 z(Xnx}U86FG471jYoEqjha&M1L+KCT(d=>;#v>_ojm&u7lB^kFByTeQtw~y-3WIJ+5 zO;nWGweH<>KNsze{12FpK%y$w=WN`(%!Gtn9itVsp{xXC#BHakIlJOq7&GwNNurj} zgZgW>< z;g>j~Tp6V<~BELXvuH;K9LtW>#X`2t`Ti@ zsVQYFWpAV@JF{+hZJLm1X|JxUU*4{F^_JAOYNa>&jz_pa;>VSKfu!X9p<%Y$S5`Hw zsNG>V>RML5@c_gv{}=w#mat;4)n>Jr?qCdBTiToRa?vIN7$l&r-j_At%jyiZE*Xs?r zff|ywHK!cwKIo3L)NyBgu9mq)b4yeG<{0@`bcf?nTKzV!(v697(Y?*6&_pKa=jCioneKPf2VsG+ zlh32Mb@wtqp1KpfT;iL!M+;;bX0;<+byGn^mMgx|X=N{;(6+2FhvKVi?(|!};DDT2 z`Y9q;@NLSL6iS%1?`8iq$=qhgnz#DX1*5V>MPj~pZ9*TXo4JJ94(*_10O&_%D`Kxl zA_g(m&mhTbt;0mns0=GheH-Q~vMY08BDr^OVs8nwwl#5T`Mh>Mm&mzh$g}b3&2VR; zf1NE6vls5IwuNV&cr!s$Yu(HW+9}4IuK5T(w)eIWVT(pxwXs~Fvaj$bP%dps(Po(RUz)B9;p+hI_d2uWnw5aB~Z)IaIrq3I9 zZtI+1lVrR!S*s?KOHEn5FR^H0aUqli%tz~>K{@%!LH*HyE3v{2{X6n`cDPaU*r=*@ zp*peBPu$z$iRNP5qzOw2R5G0%s?}0@D>wPiJ^{CBK+$7Tb&GA$(*mgG%11b*j=&sp zC+<5Z+^BVgT{;(iq$@R$roHRivI9=JcdFe4gb&7!I^`S~HA36vl9m_--75~!SH>)! z@h~M;*|D87IQHM^hb7guw6?=0+L;@#47Gb(;U2h5S}U@t3B$z?2IV?CJkQpF);v*R7^md9tC2PNC1GIgEaQCHpV|Z5Cjp6Z*jI ze--9%McTz%U9fw#M<3o*OBpX0E`vkkqX*cQhTI#KTeZE>#>HcK5__y+dodNHiib(Z z_ziS(Xrf#GLC6@Qx8ieC@%f=r^I^B(zOn7syGl+kj$&NH7~P$|tEMqt6>No1HMg3k z&(06f7LpP(;ptVFk%ZHcX09;4>yr~dcg!c>oYOhG@9}81hEYe+k>xbRj2m4-l!U~s zM_Onp%!t~|t0+j}W-J%9;`T0{43A9FlU4pT9`_v|scfIL_mu8+J5@?WG9C`&fJ3(;0o9G5p?ExOpH7hU)+bX59O5i>C?j zoY-gaRev2SieYfw|5hDvQzMKDhXp=-YdjpXYBOKn?dr;hRto#c&Jk`TG-T5^ z7Q-`-ahlWS{aej?NL>$~g>U$mslUK~Zwf(AXYLd-EOhv9wYW|9s$U6v=oT7Ad#0q& zK9gwtQWP`Ys9K9rB`4&`!N`)0096{tH0M_WTihY$^~;ykx7617FW=b0ihTqDaoe&z z(V0aAGjTZFvg8_yXxh3jbLqy%W2^8)*fJ9+aKJ7%5W3m@x*TB12Ni<@?CQujh))tJBK<3ac?_Kr+2_? z4`v4oi#UL>Vr_UgJG|q}#9SWoF zzUWi9_0)Y7Ei$7vWRN8X;xo3>qnW0E9Mkm?K^enoC3jVGO>0s+!DA^x5=1eJnb{Fn zim`PPqW5JhE~r(kZ9ZX61v~J!5|q`gH1X+}JA>L3#8xj!=&luVcN8mo!Lc-}y0Sx?bU3O@KQFZ5ACw-ff{ zsiAwt4eVYfZ*SKILdIk!I=O|$@Qvm?%hGOB3WJ+Xw4p295xc(YDv#MvJE~9MY{M8; zi*^V(vgnukE3ImdVUuTpYanPXHL8jZawvC#RwDcclNUHlwDSTM{`kH#JhEeW32|=% zQgq!*fMXhtB|1$uYXQSHv-D=PQ`?Vm6460H&Ki-OkZ@zt=qPpf>aLdGdB;Hl5tYPA z7|P3*_J+nevw0<7XLXLS*QG76oS(ziC%xRamFLAEk1&KxsoLtIJcc{@LZ02zZf&OM zkj)iSf$XdZS|0BFMu`!ggi|G>hjWZ~9EKTI-7lU)fRGXnCbg-WcO#=OP85B&B8}QM z=EMT;n}pFGg>&GU!Py&Zo9xWaIk?LBnjv&z39xWY+5E+eW zd86KxMlx=hNv>fEpJ_MTc@A!z!E}7E^}X+Lf1-h3I3*J^xCJ z7(Vn(B@K$K$i6n$hUF2Vej}qVswI2I+-9m#O@wDsDGI!@%bFE0eabzXqPMp_DCUd1 z2Z#Ju5_lZ#h0+Ti#rD`7ksfWT`|7TYGH0RV-FelGSA(_e>U7dwi!{+*Vjw-Rk&Usr zK$?saCnV_IoUDy>;56Ot#zefaNQCJYeOiek>eigx6PF_H^U2YwOtjdSp!?dW{!0^b zd8!OS8%?irRLx+d?&gsu-9+06lTKHL!*iQ`6A=x!Tz|KUW0~>z9jZs z6RsvpjPRTgA+@?Jk6yORrP+mO+a8&yQg4OR>70)Jt!ZlrI{R7alk;A$skvo@UMm~g zhMQ|`s~JVFDb#Z_kI9m?qOf}K>FMf)G!&btf^lP7zUj+oUS>)@jlgMJc#}(~Ci2<- zcGbmfce^!^d3IsMc4uH9m)kOfh=+%NyAgQtbx<$anW#&;yN_o?b+|K^8Ki_-^q2xN&@5D30pK}#>g##=7_7~$ym|Y9)muFPU6`{ zIEPpOcH()LmR+WhJes;BJ&VUvNG2)Mdjf8POXm@=#Mj4UXV+lZnyNB)IXmnkaNmit zH`8e3+#$~tBsX{BD_(J1xSN0*c~GufRv%_+v_o=-nbT~W>I|U`r&er&xjMn-XWpk_ zz~MR-KPup>L-vXdF;pXL$Gf;~8(0V{A+8l$3OV3<)6HJiQ+>g(I|epnP}^2d6$ux~ zyCQv)ZbHF`z7%10q$%4HOqeE@b-E)-N_~u6^IL~XTqrJ&M>SHxD{8y8XQYmk>_%!^ z(>}t!?J|hk7&@An$VXHfKcDMbM*MXP^3h^1BC~rBBcIr~VBV~f0jbkrZ6o$2YSXG1 zrq`dUWbo2^K5)jJJ1!~2P+0PG10VyAWcXx23M=*=HcAHoUBZ<#Uk(aZmC7L z$yJRq>FG5v3{5O_Dr97t_rVTQow+QZ-Lj@aJv~QO@^;oJ{uGk#jr&b{Be&hQijD4F zslmwC(4wW+_IS)2rY2L^uA_AtJZk`|2G6D$W5FaD{EHD`JyG?HCzuZHQ0EoS|FSfz zN@H@Ntp+56aF|o#vbC8UrLTUZm;=QsDTj;Gsga2{ux%i+%L-=ravrPxI#{V#eSO=h z1Stl`NtR@}YJIfc;!RQn!m6*fq`GKp^nQD^9zF_Ln7-~S0B)2KE`8y9b4%0G>iV|U zq7Tl52LGX4IZXO=*&24>;r74Cvto;hI2SoVe8Nx+i%-$KEqRgK49<19A_ae#wR}SJ z38B}F*6EzxvYUlM#&Mm)tXx-_XwGG|A3s^&m0Zc^osiZ!e2TXpW|vo-P=3O!2`%nL ziezKHC)1UzF7)J+ZCOkddiaRe06RYW@{4;03gt{+OlWRuOV-e|tEo;>u{pkF_N-Ya zB=!IJpki+2ta;OCp@YF>OM0W*%P`CwUznR+QCZ>5HKg)G$uLjrxy3{Qb=Dp&Fo1N8W?>S7$7Cv(y9K+pe{2okjeK3CvrTD zb4@`U;!(0Yv$&7re)7B!p#7b09;SSN7h)$g);HD`)1;z&)`S{M^<*2H|0+3aX7kWY zmhv+L3+>#3^w6ReZFR{7MRW3u(MhtF(Xo#As0# zksQqSu21R9eT-)~m+;<(#KKPLqn;JshLBp74)fR9hhpyXNK;$ z+M688u(gDCey-|RhAEW13%GPP^W_bVI`@M2d$Z| z?9fnQLSn-BC46TKK{I1=^Mnb_weq5ib>Hj;#{KNDTTi+aHmF8U87lN`;G?C5;P)4N zz}}(dhS%47H?WZ6BgMPp43hP0$PNw`rdN1DLp~&rcQ0+VZP~&YkKhr|G0h^7`DeAv zp!E0Od#e&9=2+1{b1Jie8a?Lo(7&R0>J=A`62PLHwwGt?W{}Xcl=6}Blrs$lRSRAM z;-kr_OuoR-nt>c|s7+Y1WgwN(rrYt( zl?u(g>a~G?+C!kQ>&ymDQE1IaD z*k+^RZAs?pW4!p%*bgtX81|91dR|)A-IhSy9;K|eDW5aj;{_=kFUfqjdtiflZ^bm| zyZ6p5Lt8Q&@=~A>1f(>zHEJqu-FWY<_uguOMlg)W%f}>7>q5V$M$Gb6rOjn)EDgxH zUjI~^4T@f|?>`tSWP9C?Uy5XQV7Mnc6uelPY%_QzW=HtqvMDtqSWjzIObwEP)KL&! z-@Gy7B0Z!cWID7K)C=kMZ87akZm5u=WLRsdLa(M64d;U^bpNlob6sxhNb)?s+E0Ow zX+}sh26eN&Zn@pvltfEfQzC<;-STK1SV)9Kh#PU>SJUadml2%%u{PtFBwFfM3m_*!vD-C-)lB(yF0ryBgXb<{%5&vdYJjRpq#B3J@MlR43ocfoG3h|M#?G#VWqECA3O z$4AFdwy8Dpw&65wX>mS0LeLp4clFbzCY=^5Sm}ei%@6K1Klrlw!B_bMUIoyGA(Csi z1eH&|`})iHO=I07D8oP3U)6Wdt1q^TU!#G_CbF+a`+4X6=x87?2OczAEqpwJbJ{n~ zDoh+U#R${U(T88bj}IaVvU^&h%X~!m;=vGN_~BReJ96}$EzTDUatOLF)7G8iIH8{` zH$t(zp{MEOhqw$JLVE|@6LB*g>2ja9E7t*CL3W_?;oMfdfDD0ZQ}Fg&oDrsn!^;>8 zQaD@;#-#KETkD74Vp6Tm3<|yu$YmX@?V^!VF)b=TlluYJ(stAvir}__h6*EWwM}_t z7q#~>#CXqUu9R_X3pPDYji0AS!v($P1fd67{jF}0g` z1thilHhl#F4o;%@KAME&Ry9~^!tQem>;E#84kFC};}C~c{Hvxg!ALzTzR|DMw|GM& zm&IoYbsU$1K~QEV#^bDO(ZTIe8zB-7?fWFUJFE0h+$`m)0fuBfJ%}Mo{d#I(BCvkj zeA4625>?gHuhth;dOUrLk&7w>Q%K&B>dh|MfA(1(BLBj9joxu7x}LZq2>H8i_hiUv zFAwiSjCvuj_PSfK$$3ZsF{7n{Pf%_kK!A>4s8=QP5{%du5)(pmNAj|TYf|ygG%Oan zfePa5{hx#R(RBRb*Fz*%X;*4l3Vune2>|?bi4)J_5OceIel(oFOVV`k_We>^{Jiro zfBtE7dN@qFV)tBs*!BKPXKmwtx+m~>a1<>KaeAfgAab`@_o_z z!>;eWd>v?y~g8)>sT7QMf?hVQ@kHz5RpCV^iHswNf z{h5+Jr=a1+ed`1%a}j#7kT=4FYTH+&9$G!H09A# zTb(`gSMS{b?xB04kN^{VmSL497p+|vXQqn-p~cXcrY7g&(lpAhh|_MM02hM|N#YQU z<(|$$p-D=Mezr+nmZXla>|s*UkUR0=*GZRz*5q%KwUqq`L}~7mFf%%_A6M%4lRQwo zE!l%+VMhA#fl>P-uAJSIndBADm8(PPii8Z(Vv`LiU4wEaKXccm2z-GGG{I;;K0;Ih zLnf}jb{(NI1kgZEj>fL-_P_q-hdwLlZ*3ybRIRzXBa@SLrHa|v;kz{P>K)33Nft{$ zaqRuxK=<%K%z8-{J|H00y3%YwTqO18ZkrY!|Q|fA?wE3 zsA$)NgGlrwA^z*rdA9Fq{j<@xx+x&ege!b@CgY=G_(YM8u~EU0#yuii^moL1a*6{x z{}XI-=OfYLx36C}Cdsgb?+kW<>ekcm ze=d-XWqphIc6cyNw#XXGV4G$}Qu&{;RW!5Zb+rxqX+UeZ)-`pWD=9=ImVK>$%a@FH8!@Skc|bF{W38%s@+NqYt1u$G=^A7goBQ9fJ}J^vPvJ3 z%_8Ij$3tP8X?cywM*q5*U7D{R5#o;AkVO3*tcRQ(4C7NwwPQB3iA*r(0kLi~Gw~?o zNjVB;~?GfPq@Om2yZAHYxBZ~3Oc`nA-?U& z!zfl)yY*BBgzR&JWAf~6J`Qbx6qm*}PUUKF!&BzXYqR>bX>>t}5f?~$8;2K1ab-NK z0ciGyg~g<+fzOd1?1VrEm&HuP!3NCi9D-%#Q5k~ZllcO!iA3a;1loj~O{e&w5i*m#flk#M1+Rm3?$|xOARJT<1dv&(Cej`o!)eO(31hV zJ3wl^pWq=E^mGeRhZklMwHnk>{)4Q}qoN6yIAka9|Gg3J|0#G-Wz#jmbACb-4} z#a${3WGt;H!^+3sVxf3EFtqIo4LzqC=u<$Z=%DPn=-RN zH$T)&AeiP@$|&;J#s*b8mv>!yk!Zcv;D&sJ5A$Ohd_> zCf8nrRxrXzi*dbq0CJ7V_o>@lo@FfG7r#P`w2eQwL^J+as8>X~I@u|weFXp#A!J00 z$Dd$O8B?xBkUru18v^}dM#L+zi6$+JWnmveo~-}jp( z1J{RN8yyQmk;bSHdmf`SY(k{0p@yQaC2yzMW3;43yZHL7dm{x7V7lQg71qsGxCHKw zSh*m~c4{H>u!ISUw3$bdphidBVoklm-h?m4*bJERd$hfD%`Q4_5VN#B{rbxz9M7mz zR?q((x671?ayskNlLH`xw8^-pr2jTKCd$Jc1T+Xsf|&%3Djpq8V?mrV?+K6QebkS^ zqB?AWbX$n&&m4nPIL^g7nkh|k<`K#-Z+kG6*$9bUxtB4itPJTk_wL!Pw7dUgWlKlUSOsxRgxtuTE25Ndy0vPXaMAv7fK!FQ6NWGq z)J8;|lgdcsJohYEp14pQScvMji9hab?xg??m~i2dH*1dhI=M#+Gkozt4oI075pZg{ zdlj(bsFUtU&vJG~-Jxl?dPlkXkl(XW8JMzG&WDG%(eRRRRB3>T z95F?A2Uzb*ln4|d zI1VhaKf;;jXD|WT=E)}Kb(1?^)eKh!XEOZFn_38Ig_YjOx`Fw6nbq0_vS|&H-I|S% z;$2F7HDH_WuR2)7epx^V%K-Pbwxgte?Q&QMh4br*UnS-q42WVs$*Pr158$}3E->A? zN^r4#VH#Z2L`4UrH70h>M66IjfF&`!?yNI*bbj zy>!;=-5<=BVH@@8)Gm)pAWT`-sch)On^%$U`JgtmdVsWMmPW84=vuVNyrUcAlf!|c zxamB6$7A(4WMfFW!Gu9@P|=)-?{L^@P?W5Hzdz6)4yU67cfY%_r;B?)h9gD>uq%<8xS42|9A^+m zHfVLvi9rVc5Dnf<&yem463eMxLSTO?V+1mR^thHffqZtxLMiW=t&hovQQM_Mq%9M) zGcieO12-BW{A4K1W@E+(I7$7q*hgqOYv(0X^lK*VHUoa+cWu;j{jaod*rLtX7(r$P zP*FJh<=uN<|Bqipu?{p*DdLWyTuh6JV=wpi_bDd*`03vM=59Db{e1R42vR~w#JlO^sSCc5SL>bn`Umgy??l@aWjL3p@l1j0PKZryp z(lxR{%kY?F)!W(cKl=Ik#c9c34KaMssiIR zV?=*E!6qsgpp3%U?Og}l8X;-$0>^}tuy5Zc zm=%qc@E7hMFfBefSqE`PoQ_^uXljsWZcB=Q&D)sng%a_FxkU@xuJkqMVK3jW4-TfU z%*MdxSV9Rn%!U$`mU>qq$sz;mqL;X7&#h02Tcf=jCer0iN}MlKp;60AEugO2jiSjX z-S@_%CfE=Ebvz{r!ix zgSJ;~xgWmsy0ow#bYcUSBKwlq5pzd66cPMHJCD;oMy5CfiGP+S7R-fJ@*>0$9=$|Q zvY6n#n2EB{hpAA84#&xe>@fw9+-@BiPOXwW87x8HA9Q=C{50XfB9OH$JDc5SPj^ff z@p~>dY|(HH!`O@cpZgWJ%sYx&XqepC&j{zbV3TXuazY*6Tcn_q=*IsKN0|R4KO+K> z!XZ*nYh4N)De`j#AGx@1l6NC6zV_a-g2kX}mDR&USc?=RDa4Q_?n2g-YLg7clCO8( zv*k&ZILM*k(tY1orhkuD0IbkLcTM? z2^yU*Tj{_u2^1fGRmh;~J!#*Xnm|1SSKQ9R3jJ;u!@Y#IeDnU7n6d+IgA4OgXg$X@ zqe8%#WRhzFZJn+8Q7zx#n$X&&n2rQYasE=S?O=X_L*9e$O!^B7mTi=)&70>ibrOt3 zJCI@}{F8M##T-thCRO+pDRM$+RL~>KYfa3-0D^lQb@EWuOnMZsFgLs@g;)=Wdvp2tLZQkwP(=OaqsM*{Y z95G7*;$u>Tr7`C_38)$FbPPEz3|5{4TeBKoQ$SGo{Nvs2A9u1Z&>`3MP=x^>xZON>a`_mhpS^p^*r*klj~TGn60dsBp=k#;BgMNX)e5|dHTd#~su z=go32OCl+|UAP8Lt@6h3hcp$_>5(e<(}k<#tf_r{(Z=9o9!*O+6F_YR_U%a4kG3YQ zvnBK_pHr4;kU6vQT4qQ#i%X6;Fg`n{xIQ1;=p9qX^mKkxGLo_}t3z(>P@K`K5kqv< z;SQ-Oc7_NS`Mu}nHonn&V}thm%WCWj?N)TX!thTXQa1iR{iQ~-o^mrNGjCrNU`!;< z$5_e8jZ>~kyVZ9W9dU_w^69CqUBvPWFgX0NWy+{@i#X5Fjp{e+Xh>8#WfNu=s;>6g z@sUHf6wd3-1P}$y(x6HcH2d?c|H*7wcqse$7WK3%< z&#rc;7+5XDwgddH^ruJeL9o=!#buFis_yJmxEhh{MC)q1 z>(VH0@nq=?gpz|YiBd_G^`JsK%;dXJ(gRNIkClF|0wqjfC{W>okdgS1m`BXSu>s~z z@YVUPJ=05U=tfE-D0FKN)U$BZtSl0rr}#uY4qo`Xh>b!NOdC*WVsX!EjTs`mD;y0f zzQs=PQ7OzAw0t(RZl+WhA3iM+S*%c^T zP93$Rl_bl*96*ns|JZ-3SD3>}Sg3pnOOV6@&z5prvhk#C1@2;M8R37cW?h2Ls#sC- zEj6Z`+(Robs_zKank(-~djd!u58z}Wayl{N+T>j`A@z4Wm9)g`o^AU&KowhxelD3n z>L+yF0ZU9$S(dmFDO)b#wvoP>6UP{@XpDY525ndO+3nx^#;T$7Tyc&o5)m|ZqL8R; z;jZpQg-GtdyD~D^npO?Dg5H!z|7ioq{;<5={tK4<^_Qvx&&t34@;`IIF>WFQ!CWnz z)pBkk^EjO;oHj_1EO2Un5k;sWiUdfg^imjA7c%RGPBIHh9Mi~YcnJ~W^Y@yASX7w% zoq~HlHzDXBezk$EIShY8NWhHe-8| zv2mp-G_qzC*S1jdsG5Y+QDdr^Oo1@UlB~IDlae?)>`P*!Fx|l~h+!Vvvb1>Ze5p?Q zW_wpRjoVq-sIL3NcMg>}g+ZBsNdpLs*vtkFJmB*yfu!KD#Q~kcfUXKtxDX3t3MPnZ zA}d1%Qb2@^5I(7sAtjPX2%}V6N?i{*sWoh{I=L*s7!p_jlaG%w{dDX5UPIzxz(m5_ zHlnlDj+yD6sTXo8e-$!8HoW+JuhJX1v*XvuPy7PSKA(m+BHg}fU_=Ns*D4|dtTG?M zMBV~-a~PwnIrLMc9aM{%*1YZ{pbTfgOLXqm|m{Do>5Vbo+STd>+@2dm(4g) z2qs?mc5PECA(%lerz#OQSpqW8MjL^FxZvTp6|=D?zIw>Mn+4~!PdD}nW=_>mbHykV z)f^w8XA!_+1uBiAS0|AQODLx3 zkuE3wgw%$tlguhA2NPO3-V)0-i^5*HPZPL2NenQIw=>-^z$Y$csAQ4FTqS`Bk;~)H zsRHUvn*djgd*NJHtT1a@elw~0cZ`T%qd9+!(>+~#I~l`TXn3WYh0o&{f}1tBQ>4;m+Qfi%mJwlM`v^Av_;o+h&4f!f^v|YY#>t!(`v7BWOB8U zm-m*HC^VH802TD4IOr&k&9JM*c|bZ9(3{&<^XNd{*ySSY7{jQdBx~*nG>Td?ERE)K zskf3rIVv0}Yb|b3-B3(bLZ94uh=#nFAV>b>{E;hj)tCILO~S$uhW1 zpOQm@&6&{3RjP7hxa^HhN!n2;MqEC&(2F=0MpxZ0sXpqwwt>uBr4c6WZ$T`AD)y?u z0kMQ-(6_F$as;qlAEP@GJZvm8_5pm&{kDrr9j;~M%XDGCQhI3idkPO8_b5#_L&3>W zpf*#Ib86Vwm}z^@?hTEG#HV!IHR8BK9Q40U)?aHvM!SM+m_m_?3Hm0az`*vATIX0o z0>g&nh@^_bmqENTIMvbixVKN6-hd=9j{O>->LQ5T&{+&U>#o|Q@7H#C3~;P~wuR~X z!-KvBEMY_41hwq@P-qeIYS!7HUzH^7=QEmEtTYP#XtuB-E8^$wPET5^l=`HD)h(s- zA@s;i$E7o=k})XxfRwUS@yhNwWl@Y3$lkbFMNBbz7M`Iom`W&4;|+;;WtBT?-;4O@ z3u1i<0#|m);JqO9czIg+wl#C^0w0Z{(5>r>`)MJGEoPx7Z6O;h;k3MFAs@PQDkvIW zL3||QSrr~-58z;)cu~lFO%`ax2RDnoRO-I5B#Z_Y*eysRAhkA%k^ffIV10Ple{)L0 zdH?W00jDJ9S=|SgNOYi;gx6f&P%m0^nh@M2IHYYrC)v`K;IO`Up43D+61KEV))mIc zR3Gj4_cvecBcmc#8`DwfpiBnFf!$ZYuLAHwATp_Rp#@W#Xf0e{gqsKNppoKsl3+MT z5LJwhM;fS?vl0S~-Uvbtcy5DbfGz;SG$b_@U9G$n0?CR_bJ+nwEL#HI=C%xq0N@Ui zj>xrF*oh~YDCFCvGub~C!RAt%ma4DJrdHi7;h9|?5_KrVyGT~HMLlC8cf18+vOPQ{ zqyvpU$&6+vK~tBcimFw77O^T;0Z#zfO68DJ^?ab98JN1ByBbUkdR1;?nl``9iDgW(ypN3iGV=A=l9V zqlEE|3qJ z#4d<^g1iMr$8LIdstivGv!qb#Xb!g|Mb)?FGH9-5nO+K3`T+sbBK?_+ve!yX3oM2j zl|^OQHKykN6}Hf7la}2==5OzA8}njl=`6Y0 zcALtVhCJ!j2(VkuGP~dexF7Kv72;fcFbevM-0})ja=%|E@lLjRy1uZ7 z3!Qz3pWmVYw4+EBiXgQ%#x~4F<6|<#J}+7GLz{mjFBHF9SQS6*ZO&YMB@q~t17^e= zqHzK^JUvPn93vQwsp4qPFq@bQ&)OIsjA;+kZ4-=5(_>xC;T5#Ar+0OG(>HG@&#!3( zMX4x3BKlzh6+0 z2-mIz(K z|Apw2RO4w;UdbS|!8T-wiJDo(C$Th$n>3f_R#S^w29LR~9GnJHpP2rlij=g1NNEmK zOOk+UVqJtY!uo9HW#{I3$G|zV8V^W5EW$+ZGtIe95;Pe(&dGD4h3&sPIBNAzwrhs zWWA7H%(q~2v5jV|&qOY3O$v}nsVPlAZ;ADmVkN{Mqw~j;cp*G3!*R2<>Cj1khm8>j z0E~nCQs-tAw9?Nt@;3O@6{3dWjLKb=6vwvO#Is5!4I&s)ZL!D4(;UOA1fG*Vxp7>n zpZ`7aLTHTH^AWLKt$<*i4raZS|0&lBl*cF>DDKu7iA@5P1Ll(Uj;Qu3e;Hoes#w-AOn3BbZTQeSQ33s@%~a^G-|kl6 z^=BLS>2;=jJ?JO_*9QKzRjskPe|h=judp|9<|4_2`N%4<5c&M4KMdgU+2Ap@0W|Qz z`3NtdsZn2a|0!+i(iH@YRPKD&G0<7K#0a5j=m%!DkhPbYI5GY$?%xIIpTV1Opd*Zn zgn5j+{B9ZqTPh>($nwCdTTn!%FP*(TK6OSNa3WzUeE#FzufB@u10|{Wmjbi*wJD1w zf`F@u`af1jP=wl|g1fivbnjFL+lG->JXB~xOc9Oan1X_AEQWy*4#Uczf9aenS2LJm z)qu6XiXmy~TADBN!(E=L5yaLC%1AjiyR4P1L4IFWL=O)JKqb*$NkO?Lh>Nunp9U*OLN+0c z^tHre#16B5lQc`m3+*edT?qaXZr^#=k0Z3aO;C47WIJibGQ0Y5fo?^cA`-Amh1 zHVbP*asSX+&0lA_f1E^+hHATHQcJ}cUEEa7OiiV=d%7^XBRcPl14$2W>5COR7c#k! z;8g?uyj(~QbY9A-DEOX8zu0D-Mn$Mj%J)l=$SKO84PuRcRr9gT=$)}GffFr`yzES2)ahjc?0broC5<%-3^rDP?#MuIx{Iz1g{uX(FRqI;YYS^-z@b%I45l z9qML>2jKoSZuNBXuN}6bsJv`9Bug*y^AVw;+%)A)sp-ks406`4DoWEStPYLT%_AZX zYG0SBsqJ}U3KCIq)ClC%1_wzXA|y;8b|$qnQ5y?)+`YR|lylzkKkud@PVx8q{C9S3 zn;oP&CQk*T5D%VPDt(!|<tm>oJ8T?D<&(+TUMLYX9whJq!V>y3E^kq0V zOkZ`ODlD0ujcgsz0+T%z!lFd>@o)`QBko%3gmb|gs{?t;1O!PdRIySG#o)@y6o zLmhmqPqaf;ONt5(Mw-gFn7kBhZjtUN7_^_%h&F8B$3*xLrQJ?#p$fq`!3bMv6%~lNW$+vD~2ZaBH_acsG?-EfpBsvzmKsvuxRE zQ^$+Lg;k`a%m77$N1aD|JT=&V*nhD3xWBjmY`_0(`_X1#Pa#=HyUpj1uGEh3_RanN z*3;)dKI=by{&4pKkRREw|MyE^?mWD-L4WJ=CYKGPU1OCkfPS*5GmOIMEnM#EtbU>b zDoSeo0Dq8b&Vxi^W;yLfxE%HOKkr=D#BNWef~s?YwoSbI!CqsoX7%VFgVQ(RrOrqR z#+d2AtN`%Wv-M7`;byMd%uO`5K~7Cui}^z3uWR7Ay-jewXUQ)tYZ78>qaNw^+dRi4 zp}A!?dquJqRSYN#MpZM)aGU5La27?SPk^inluX)mLu=ZYxL0_BOxXkS)(i@^cEhN{Te6miP)LxO@sg{)G3`FX!Cq2-d?+K*%M55v^%tKY6$}ff{L*5Xg z!F7=`VYW)@fMKCBlcu9b#_)+vZbolcJwN;GGqU)#GVU6OSd*JVE_5{PY(DL7KYva! z-yiq)e>9+uii(7YWJd;m@-!-@M|`VZ{oPO0!9pg2WQh?V6lj(b3+j#Run>EsKf{dA z^0zAlf*7GP5+F=ho#wnOWq=l)ExoxOiGs!3&*{MLvLE^3Xd+CAK)QHiOzW~uD#|mN z1Qs>{?wyFNNrFnLFGW?y%BI;A4B=&yCQu1(!J^G8&+V+7?n^Kp?>u_Cw^KQ}!G0qx zoEQ|5zT<rYU8dOJC)`?Nw?|6%z>3qvjGBE{Gty zZ4lrT!@1&IUCW#I?-XC1h$2WAesf6yOB=cGC45BZxppEL$*2AzW3@gO-ZT+1Ti zh(CHBmmpiBC9Q-M4MA1Ys(5(}7#MG~O#W1}$XO^;=eauxl68eLnV)yIU)h6lo@CU8 zYUy4$d$FvyKXAR%Gwgc4^N2TmI4dpFOn>4AA{2>W!Q2LD2iy>gP?4(`FCd1U&RxS=h0I|JBMyh} zz^lcSK*OI zn|lxW61?G#Mf|%+L(=^{HbMNHW5ovB{@894V*jU&tsggk7r5W={&dBOuAZKB(A|Cs z=_(Vv3Owi`5qwmQ5T1I)O&R7~pEg#pn53a|Q_B8tZM?Wbhi$>u0o}Po-XwvuIupPPFve;oyJp*WCk;S0SZK5<=E^+>vUHSOpj|%mOh^}*R-*1 zN5RV2+?Msx=h^k6@FYBhp_3xv=mOU(rNi)b^R##kdzB8z*?*l87t zlF|?!G-(m!eQ4IewYc%dmlb&9mx)g0h!#klRg;q1XERK8bW=|d!E%KmwlSOfoh5p$ zob1)wroUR z_k+D%H{d2k32|{UC6HjubM$VeWNC*=zagd2>8)f$t7OVI6`F{bDW^dFEn?Q+<7=cB z^^sQl=f|`D35&P3LK%nqmgxOAqjxe-On4s{$#@74ZNSSyR<{B*J?ZR)otX)>oE|eq zWI97I4@)!>tatGxSm|Ga@RCDF3(GA6z05@=?u;y8BKZ*Yr1cv46^d79V!P~?#juwE zZSAWY+I~A@Ey%6Bd`WzLq7xIjTM<@~F@=#H{}@=AB~UAoZmiVqZU=ITzGj7gDtaTe z&m%}fdSNdODgw1BS!G~(g#jrB!!lm%*{^To*&l9NPqYRyiAQPrS~rgypF&BYe-_@i zuY@uaFR^>iITXBCq+}6zHlOC}!`;Ru^-E_13U+IU7UxDZ>~$A(SOV6PjbSqz?35ri zks}x^PSU@vh8R0X4C#bS$;p*{rKa&oXS>Rd<>S5mZ63z_s{eFvg9n$h2gHmn30@)x z5+q;==5i@ufF$g&DH5`DHmrWzd*9!>BN;@sWm@t!lAfSgJB~T&i&DjwK?S1$!#kBj zr~7#C(XCDX*OT`x7xu*^6g4wWWSVdN#wcMpf4G1DCeTICw0^&6R4ABuolI*}1SU8K z@e$O$_=-*6f7(@60Kd7i%hb&%qXUsIn;(r%<+R$r@@1-bhwdnasUpWZ2mMMT#a_AX zIk`}~uVyns_~%$*-*R5mu;L<+D2Mft_Ym+ZJWH<3j4NgxCI3jY2m4ked+K}hiE5}X z^w&R!r!E4zDP&IGtG<(6jdMA}7=u2)3?70f`>T!M&(xNX(?hj<)B+EhWEUZ^e&m8r zfFIK@=KJyR1K962eGZey$|wmt)1%vVlk@J^W{iEpV=um7&$@2!)G^rIGInLA*x)l3 zU!dq7OHss(S%qFaP#ciSUSOB02%Yv^*da{7xB^2}iGv7S(31do00#p~4?dtDPWn2u zY(K=;;kk4&N`{zp5nZrp>)onx%8^GbfOU=WK-A`IgMQR>eWi71iD1btqYXSxb&q-Z z#h*({u6`^ZNGuOx9l81FWQMc*Znt;*=HzRYs*3l8NU6SfAbd`5DX@IifmYA!cOB-V z){}w|RSn@t4t!|5-rN%{AP^PHk*r5c`zNcmEMuY=7j|5^z^jZ>*+8qAtOR&^@7C#; z_9B!dI}E8Q;aP>p19_;v^k7rZA|^?5F)WxBL;&=#sl&?{t9&!mcVI^sJWomq?uRMYD0&4%uE z@uvbvMZ${KXm8XOa?4n7fcn(ifJ2SV4u|>t9hyN3+BrGn;*snDN}Nz`a^i050vbYQ zRBf?U*))lBs!g7xofT}LwjKh_P0dq;h!XJI7A0kjch0L_{lN>AyOF}!Rw0Y1nt^4R z-I&kTyOZHtnU;C+78p0P#k}-FD$z#T9fH#MeaSDBZo}5#FY%=nf^J|JYcW;PbRV5h zc!6Pc97KX}gLfv(S?FT68gCTKsm8g=2=zDTm|Qu90&1$RS&zf4snv+u$Ed+2OJ`kg zU-JT`Rev<&T*bpoAW-~F)|ZRX(#$K9J<~$*MIZ#Pa0pMa_p|JAeY)0&U2A^63^+;V zdEW!DKIck9e%46gHi=gkAkt_g2(3LRz$KFwB1sgvN3Ntc7!@p;Af;WDxGs&Vs2`Y{ zqHmO#M{X^MvM>jLu6cE`1k4U(ztODgG9Ng}d4JW%yn5`*)No8}Py= zz5=%Ch$kj_a1pQH|Kj3xs|&%X8>h$ZPag6`ul2#hY+#t4%?Xk2zn+S?v2%**lH8Sp z80EwRm+kq8LFdwbMpJV0t* zRgGl&nR)Qk25WXSi5h)tGk8*(R@IoUQf55HPPR|I+HIlG_F_}g{K%H>qs-Ik z#RK0LG#2==`E$7zT#Uk=krY0&6J@N9vfSFFAW#~#38%0zE%k+ySl8(!dcs-54xpv% z+5?_XpFeuKyZLax8B-~ZLArslCuE0LG9!Po9S{FKgCbf6RA zHm9TScva=jFO3iGHa_4@mR~wWYHXMrD%$I)XH{u3<`o?xI40i(5kaFaqLUWRLTfjK zU=dSE9!y@mks@ESACN?G+5Qc@*sjqWRKo|jB#4|)N+&yB8dIP}Dw@ePw@wCOL!n+! z;_z_BLnPps#hE1b$D`5}e2&@h8Su{rL~e~aPM{rA>QpJG^QHF}GL*QsBnU!@VAc2ll?0u1|DDyJEUm0+!ca?R_2=a&BH7jF%f=8VRmFZNy|M=<{a5-6HO(oA))UPvN#GIZTYD>Exjef1@PN%^o7&$cA@ znDx5qn5DE)190K6wW+Tjx!BjdwxiML@L++RjxRm@sXkJ5Wr`&ffG)d7m-SDoV>O?T zn+CNpt6afsCbd$(;OJ$OXt6vfl(a;qV#zIr02~q(dKOJbe}DGu#rzXy);iY8nYFH? znpsWPmSd{o9x~Y=H%sF@W!DhbiL1JxXW4!Pm^Y)**!sP`wf1^NKZ%sPe^P#S@+y?= z_RW1lf<~pUP?+n(Z^-^wCFk#46fyY){=l^>JEz#E(n7zc$|{lKB{5eD<8UG?2q9R} zk{L;4$!$|QTs}*}h91;kElqwQeBf4Fgi3B^ys$EI#p*u%Cf#5HhbZS+*ecq$eiW@0 z{dX`-nX=+DPHD};;UUKyQ7#Q#2tL}tdaD5W<^;9J0#Vt(%9EQ^PG`>c*d0R&10I-Y zhN4mJb@eD}2o6aJv@kKTWr?Bklj-*xXA_w)Mkt+@&-K@vF_o|{lsTq}U+X;jec~M_ zBV|TOv`TWll!9}-aL9=8c-I!@6id!euE8vR98KO#-E7Vb)*HP|5V78F5wEo$G#V#? zS|TaK;a{rH1aTFSW;HP04jh1JhDk<9tfCK))+zOHcG7vP$5RlFq-G`AvdajP@VOpY zPB)$?S)2(};j?o~Y^_BtCl$<0v-oWQTYJj2>RSZsYVbHno1^wV7qeQ5M>ye*s}vUJ zkPgfCq-KApiETdb&pRg8*;3QR^1EoqK^q(s%A=R*SQ;sctqGKcxVYQjdUo$Fwfgjs z&oVe{OQ%uW&PKSnNi2D}73*KIfqdhs8q1xO?lcH7ik-y4(q3U~gShX!We;&qR=Oq2L4p z!z+`6?r-fMMmrjW7WJE@Y!D?yKMQ9{ZM~IeV6;Q4wO9=RN?`yHe{bHxzQ-C*92kG#A%$BTw=<(6@qjWJzc;tI7eb$SwN_n*N=FH)<^w$E;fd z4o2w+Frb0>f;$`LXPPX1N{C>s9_g8)1ZT;eXYkTuTw6(V{?svjkm${K5uSdNKXJ$u3?tWE`%?0 z?s&R@)BaR-B}M+XBWwn52Fu#e!g#6EmMP3w;!cAOOEYI%l?g68xnkXPJtRv!+}AtQ z3Tv5yLiywEo!z#N_ec$BX}!0vr>&QO5F}N8%x$X$V7Lh?-Ct<-*I&Ywk#SUa_FL+O z;4WT{+OSSY_mGHF_y}1zl>Mv<7)-jo$2U8(>2ZHH`sZ-^rhiCbdXfrtH*|H1BwyPk z6}C%qengkHyf7kpx_D6AOi%fy%#Kb+Cn_Eef9SwpuxhcJr;8re)T2Bu%&Jk)$D6)6 zogVjaue>E_cxj5>#A*0Af4>S8QU!r^E<0SSahflAxRd!6W)0q$IB81Mfn}H8VD30& zC=J8r*UDxVa-@f9niYK@`e)*hmtgp!dvFpVh<*jhydX2ifRTKqvkLxBJOma^L^MFl z$mDunh)lFh&VdaQXItL*a;Zlr3O<^S+Nt`id>O30m#qZ_Sqg&dJ(`e|b~pE* z)^2ds%C(}ht@2`v>svInQe&LA(qXh+9<#YTkrJ9*EeAY1kjX(ME7!<}bh;3tOLOz` z$L7T>J`N(>@{uvtTP~JnT0Yg4&eXAEhY$*ZqQf|3_+q+ik+-O zCW@bzjDv1+1cfmN;R#e|wEfopW@aph4X|Yk@todyP+TM&nBrHe8{!1*Q#!+4iRTmA z)cwcn!@+4EnlaQiF^3CgcR{yr9nc&|F-c9DoJ-59D`%?2^7>q7j9Z&5%1%gS&2Zef z@m+4bxPdVfPP$rZ`MQpMD;iTfA87)Xv{kAr&G%HpZQHYvYC3v-G%m?-=@nPBji77w zp`FI0@w4BjfXD)`9luzuexaZfFH1uG+5^tBjUXlRQ<2XKfGZ+g>+r8TrBVPwI0#|_EcijGx!s-J?Z*$E?(Y?ylbT{V zH9p76@R_0}WQ8*=BjHMHg#@<(65omoxc{``17ZUz, 2007, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: bfd 2.19.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:05+0200\n" +"PO-Revision-Date: 2009-09-11 21:15+0200\n" +"Last-Translator: Jorma Karvonen \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: KBabel 1.11.2\n" + +#: aout-adobe.c:127 +msgid "%B: Unknown section type in a.out.adobe file: %x\n" +msgstr "%B: Tuntematon lohkotyyppi ”a.out.adobe”-tiedostossa: %x\n" + +#: aout-cris.c:204 +#, c-format +msgid "%s: Invalid relocation type exported: %d" +msgstr "%s: Virheellinen sijoitustyyppi viety: %d" + +#: aout-cris.c:247 +msgid "%B: Invalid relocation type imported: %d" +msgstr "%B: Virheellinen sijoitustyyppi tuotu: %d" + +#: aout-cris.c:258 +msgid "%B: Bad relocation record imported: %d" +msgstr "%B: Väärä sijoitustietue tuotu: %d" + +#: aoutx.h:1271 aoutx.h:1609 +#, c-format +msgid "%s: can not represent section `%s' in a.out object file format" +msgstr "%s: ei voi edustaa lohkoa ’%s’ ”a.out”-objektitiedostomuodossa" + +#: aoutx.h:1575 +#, c-format +msgid "%s: can not represent section for symbol `%s' in a.out object file format" +msgstr "%s: ei voi edustaa lohkoa symbolille ’%s’ ”a.out”-objektitiedostomuodossa" + +#: aoutx.h:1577 +msgid "*unknown*" +msgstr "*tuntematon*" + +#: aoutx.h:3994 aoutx.h:4320 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: odottamaton sijoitustyyppi\n" + +#: aoutx.h:5354 +#, c-format +msgid "%s: relocatable link from %s to %s not supported" +msgstr "%s: sijoitettava linkki kohteesta %s kohteeseen %s ei ole tuettu" + +#: archive.c:2056 +msgid "Warning: writing archive was slow: rewriting timestamp\n" +msgstr "Varoitus: arkiston kirjoitus oli hidasta: aikaleiman uudelleenkirjoitus\n" + +#: archive.c:2342 +msgid "Reading archive file mod timestamp" +msgstr "Luetaan arkistotiedoston muokkausaikaleima" + +# Intel coff armap +#: archive.c:2366 +msgid "Writing updated armap timestamp" +msgstr "Kirjoitetaan päivitetty ”armap”-aikaleima" + +#: bfd.c:375 +msgid "No error" +msgstr "Ei virhettä" + +#: bfd.c:376 +msgid "System call error" +msgstr "Järjestelmäkutsuvirhe" + +#: bfd.c:377 +msgid "Invalid bfd target" +msgstr "Virheellinen bfd-kohde" + +#: bfd.c:378 +msgid "File in wrong format" +msgstr "Tiedosto väärässä muodossa" + +#: bfd.c:379 +msgid "Archive object file in wrong format" +msgstr "Arkisto-objektitiedosto väärässä muodossa" + +#: bfd.c:380 +msgid "Invalid operation" +msgstr "Virheellinen toiminta" + +#: bfd.c:381 +msgid "Memory exhausted" +msgstr "Muisti loppunut" + +#: bfd.c:382 +msgid "No symbols" +msgstr "Ei symboleja" + +#: bfd.c:383 +msgid "Archive has no index; run ranlib to add one" +msgstr "Arkistossa ei ole hakemistoa; lisää sellainen suorittamalla ranlib" + +#: bfd.c:384 +msgid "No more archived files" +msgstr "Ei enää arkistoituja tiedostoja" + +#: bfd.c:385 +msgid "Malformed archive" +msgstr "Muodoltaan virheellinen arkisto" + +#: bfd.c:386 +msgid "File format not recognized" +msgstr "Tiedostomuotoa ei tunnistettu" + +#: bfd.c:387 +msgid "File format is ambiguous" +msgstr "Tiedostomuoto ei ole yksiselitteinen" + +#: bfd.c:388 +msgid "Section has no contents" +msgstr "Lohkossa ei ole sisältöä" + +#: bfd.c:389 +msgid "Nonrepresentable section on output" +msgstr "Ei-edustava lohko tulosteessa" + +#: bfd.c:390 +msgid "Symbol needs debug section which does not exist" +msgstr "Symboli tarvitsee virheenjäljityslohkon, jota ei ole" + +#: bfd.c:391 +msgid "Bad value" +msgstr "Väärä arvo" + +#: bfd.c:392 +msgid "File truncated" +msgstr "Tiedosto typistetty" + +#: bfd.c:393 +msgid "File too big" +msgstr "Tiedosto on liian iso" + +#: bfd.c:394 +#, c-format +msgid "Error reading %s: %s" +msgstr "Virhe luettaessa %s: %s" + +#: bfd.c:395 +msgid "#" +msgstr "#" + +#: bfd.c:919 +#, c-format +msgid "BFD %s assertion fail %s:%d" +msgstr "BFD %s suoritusehto epäonnistui %s:%d" + +#: bfd.c:931 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d in %s\n" +msgstr "BFD %s sisäinen virhe, lopetetaan tiedostossa %s rivillä %d funktiossa %s\n" + +#: bfd.c:935 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d\n" +msgstr "BFD %s sisäinen virhe, lopetetaan tiedostossa %s rivillä %d\n" + +#: bfd.c:937 +msgid "Please report this bug.\n" +msgstr "Ilmoita tästä virheestä.\n" + +#: bfdwin.c:206 +#, c-format +msgid "not mapping: data=%lx mapped=%d\n" +msgstr "ei kuvausta: data=%lx kuvattu=%d\n" + +# Ilmeisesti debug_windows-ympäristömuuttuja +#: bfdwin.c:209 +#, c-format +msgid "not mapping: env var not set\n" +msgstr "ei kuvausta: ympäristömuuttuja ei ole asetettu\n" + +#: binary.c:284 +#, c-format +msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." +msgstr "Varoitus: Kirjoitetaan lohko ”%s” valtavaan (ts. negatiiviseen) tiedostosiirrososoitteeseen 0x%lx." + +#: bout.c:1150 elf-m10300.c:2078 elf32-avr.c:1639 elf32-frv.c:5743 +#: elf32-xtensa.c:6639 elfxx-sparc.c:2456 reloc.c:5386 reloc16.c:162 +#: vms.c:1918 elf32-ia64.c:788 elf64-ia64.c:788 +msgid "%P%F: --relax and -r may not be used together\n" +msgstr "%P%F: valitsimia --relax ja -r ei saa käyttää yhdessä\n" + +#: cache.c:226 +msgid "reopening %B: %s\n" +msgstr "avataan uudelleen %B: %s\n" + +#: coff-alpha.c:490 +msgid "" +"%B: Cannot handle compressed Alpha binaries.\n" +" Use compiler flags, or objZ, to generate uncompressed binaries." +msgstr "" +"%B: Ei voi käsitellä tiivistettyjä Alpha-binaareja.\n" +" Käytä kääntäjälippuja, tai objZ:aa, tiivistämättömien binaarien luomiseksi." + +#: coff-alpha.c:647 +msgid "%B: unknown/unsupported relocation type %d" +msgstr "%B: tuntematon/ei-tuettu sijoitustyyppi %d" + +#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1003 +msgid "GP relative relocation used when GP not defined" +msgstr "Yleisosoitinsuhteellista sijoitusta käytetty kun yleisosoitinta ei ole määritelty" + +#: coff-alpha.c:1501 +msgid "using multiple gp values" +msgstr "käytetään useita yleisosoitinarvoja" + +#: coff-alpha.c:1560 +msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +msgstr "%B: ei-tuettu sijoitus: ALPHA_R_GPRELHIGH" + +#: coff-alpha.c:1567 +msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +msgstr "%B: ei-tuettu sijoitus: ALPHA_R_GPRELLOW" + +#: coff-alpha.c:1574 elf32-m32r.c:2477 elf64-alpha.c:3943 elf64-alpha.c:4098 +#: elf32-ia64.c:4462 elf64-ia64.c:4462 +msgid "%B: unknown relocation type %d" +msgstr "%B: tuntematon sijoitustyyppi %d" + +#: coff-arm.c:1039 +#, c-format +msgid "%B: unable to find THUMB glue '%s' for `%s'" +msgstr "%B: ei löydetty THUMB-vihjettä ”%s” nimelle ”%s”" + +#: coff-arm.c:1068 +#, c-format +msgid "%B: unable to find ARM glue '%s' for `%s'" +msgstr "%B: ei löydetty ARM-vihjettä ”%s” nimelle ”%s”" + +#: coff-arm.c:1370 elf32-arm.c:6372 +#, c-format +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: arm call to thumb" +msgstr "" +"%B(%s): varoitus: yhteistoimivuus vanhan koodin kanssa ei ole käytössä.\n" +" ensimmäinen esiintymä: %B: ”arm”-kutsu thumb-koodiin" + +#: coff-arm.c:1460 +#, c-format +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: thumb call to arm\n" +" consider relinking with --support-old-code enabled" +msgstr "" +"%B(%s): varoitus: yhteistoimivuus vanhan koodin kanssa ei ole käytössä.\n" +" ensimmäinen esiintymä: %B: thumb-kutsu arm-koodiin\n" +" harkitse uudelleenlinkitystä --support-old-code aktivoituna" + +#: coff-arm.c:1755 coff-tic80.c:695 cofflink.c:3027 +msgid "%B: bad reloc address 0x%lx in section `%A'" +msgstr "%B: virheellinen reloc-tietueosoite 0x%lx lohkossa ”%A”" + +#: coff-arm.c:2080 +msgid "%B: illegal symbol index in reloc: %d" +msgstr "%B: virheellinen symboli-indeksi reloc-tietueessa: %d" + +#: coff-arm.c:2211 +#, c-format +msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "virhe: %B on käännetty APCS-%d:lle, kun taas %B on käännetty APCS-%d:lle" + +#: coff-arm.c:2227 elf32-arm.c:10327 +#, c-format +msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "virhe: %B välittää float-liukuluvut liukulukurekistereissa, kun taas %B välittää ne kokonaislukurekistereissa" + +#: coff-arm.c:2230 elf32-arm.c:10331 +#, c-format +msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "virhe: %B välittää float-liukuluvut kokonaislukurekistereissa, kun taas %B välittää ne float-liukulukurekistereissa" + +#: coff-arm.c:2244 +#, c-format +msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "virhe: %B käännetään paikkariippumattomana koodina, kun taas kohde %B on absoluuttipaikkainen" + +#: coff-arm.c:2247 +#, c-format +msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "virhe: %B käännetään absoluuttisella paikkakoodilla, kun taas kohde %B on paikkariippumaton" + +#: coff-arm.c:2275 elf32-arm.c:10396 +#, c-format +msgid "Warning: %B supports interworking, whereas %B does not" +msgstr "Varoitus: %B tukee yhteistoimivuutta vanhan koodin kanssa, kun taas %B ei tue" + +#: coff-arm.c:2278 elf32-arm.c:10402 +#, c-format +msgid "Warning: %B does not support interworking, whereas %B does" +msgstr "Varoitus: %B ei tue yhteistoimivuutta vanhan koodin kanssa, kun taas %B tukee" + +#: coff-arm.c:2302 +#, c-format +msgid "private flags = %x:" +msgstr "yksityiset liput = %x:" + +#: coff-arm.c:2310 elf32-arm.c:10453 +#, c-format +msgid " [floats passed in float registers]" +msgstr " [liukuluvut välitetty liukulukurekistereissä]" + +#: coff-arm.c:2312 +#, c-format +msgid " [floats passed in integer registers]" +msgstr " [liukuluvut välitetty kokonaislukurekistereissä]" + +#: coff-arm.c:2315 elf32-arm.c:10456 +#, c-format +msgid " [position independent]" +msgstr " [paikkariippumaton]" + +#: coff-arm.c:2317 +#, c-format +msgid " [absolute position]" +msgstr " [absoluuttinen paikka]" + +#: coff-arm.c:2321 +#, c-format +msgid " [interworking flag not initialised]" +msgstr " [vanhan koodin kanssa toimimisen yhteistoimivuulippua ei ole alustettu]" + +#: coff-arm.c:2323 +#, c-format +msgid " [interworking supported]" +msgstr " [yhteistoimivuutta vanhan koodin kanssa tuettu]" + +#: coff-arm.c:2325 +#, c-format +msgid " [interworking not supported]" +msgstr " [yhteistoimivuutta vanhan koodin kanssa ei tueta]" + +#: coff-arm.c:2371 elf32-arm.c:9360 +#, c-format +msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" +msgstr "Varoitus: Ei aseteta %B:n lippua yhteistoimivuudesta vanhan koodin kanssa koska se on jo määritelty ei-yhteistoimivuuskohteena" + +#: coff-arm.c:2375 elf32-arm.c:9364 +#, c-format +msgid "Warning: Clearing the interworking flag of %B due to outside request" +msgstr "Varoitus: %B:n yhteistoimivuuslipun nollaus johtuu ulkopuolisesta pyynnöstä" + +#: coff-h8300.c:1122 +#, c-format +msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" +msgstr "ei voi käsitellä ”R_MEM_INDIRECT reloc”-tietuetta kun käytetään %s tulostetta" + +#: coff-i860.c:147 +#, c-format +msgid "Relocation `%s' not yet implemented\n" +msgstr "Sijoitusta ”%s” ei ole vielä toteutettu\n" + +#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:5143 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: varoitus: virheellinen symboli-indeksi %ld relocs-tietueissa" + +#: coff-i960.c:143 coff-i960.c:506 +msgid "uncertain calling convention for non-COFF symbol" +msgstr "epävarma kutsukäytäntö ei-COFF-symbolille" + +#: coff-m68k.c:506 elf32-bfin.c:5693 elf32-cr16.c:2965 elf32-m68k.c:4615 +msgid "unsupported reloc type" +msgstr "ei-tuettu reloc-tyyppi" + +#: coff-maxq.c:126 +msgid "Can't Make it a Short Jump" +msgstr "Sitä ei voi tehdä lyhyeksi hypyksi" + +#: coff-maxq.c:191 +msgid "Exceeds Long Jump Range" +msgstr "Ylittää pitkän hypyn arvoalueen" + +#: coff-maxq.c:202 coff-maxq.c:276 +msgid "Absolute address Exceeds 16 bit Range" +msgstr "Absoluuttinen osoite ylittää 16-bittialueen" + +#: coff-maxq.c:240 +msgid "Absolute address Exceeds 8 bit Range" +msgstr "Absoluuttinen osoite ylittää 8-bittialueen" + +#: coff-maxq.c:333 +msgid "Unrecognized Reloc Type" +msgstr "Tunnistamaton Reloc-tyyppi" + +#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:441 elf32-score7.c:341 +#: elf64-mips.c:2018 elfn32-mips.c:1832 +msgid "GP relative relocation when _gp not defined" +msgstr "Yleisosoitinsuhteellinen sijoitus kun ”_gp” ei ole määritelty" + +#: coff-or32.c:229 +msgid "Unrecognized reloc" +msgstr "Tunnistamaton reloc-tietue" + +#: coff-rs6000.c:2787 +#, c-format +msgid "%s: unsupported relocation type 0x%02x" +msgstr "%s: ei-tuettu sijoitustyyppi 0x%02x" + +#: coff-rs6000.c:2880 +#, c-format +msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" +msgstr "%s: ”Sisältöluettelo-reloc”-tietue osoitteessa 0x%x symboliin ”%s” ilman sisältöluettelotulokohtaa" + +#: coff-rs6000.c:3646 coff64-rs6000.c:2168 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: symbolissa ”%s” on tunnistamaton ”smclas”-arvo %d" + +#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458 +#, c-format +msgid "Unrecognized reloc type 0x%x" +msgstr "Tunnistamaton reloc-tyyppi 0x%x" + +#: coff-tic4x.c:240 +#, c-format +msgid "%s: warning: illegal symbol index %ld in relocs" +msgstr "%s: varoitus: virheellinen symboli-indeksi %ld relocs-tietueissa" + +#: coff-w65.c:367 +#, c-format +msgid "ignoring reloc %s\n" +msgstr "ei oteta huomioon reloc-tietuetta %s\n" + +# C++-kielessä on monia tilanteita, joissa kääntäjän on lähetettävä koodia tai dataa, +# mutta se ei kykenen tunnistamaan uniikkia käännösyksikköä, mihin se tulisi lähettää. +# C++ ABI-ryhmä on pyrkinyt ratkaisemaan tämän pulman sallimalla kääntäjän lähettää vaaditut +# tiedot useisiin käännösyksiköihin, mikä sallii linkkerin poistaa kaikki muuta paitsi yhden +# kopion. Tätä ominaisuutta kutsutaan useissa olemassa olevissa toteutuksissa nimellä COMDAT. +#: coffcode.h:960 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%B: varoitus: COMDAT-symboli ”%s” ei täsmää lohkonimen ”%s” kanssa" + +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1176 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Varoitus: Ei oteta huomioon lohkolippua IMAGE_SCN_MEM_NOT_PAGED lohkossa %s" + +#: coffcode.h:1240 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): Lohkolippua %s (0x%x) ei oteta huomioon" + +# TI tarkoittaa luultavasti Texas Instruments +#: coffcode.h:2382 +#, c-format +msgid "Unrecognized TI COFF target id '0x%x'" +msgstr "Tunnistamaton ”TI COFF”-kohdetunniste ”0x%x”" + +#: coffcode.h:2696 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: reloc-tietue käyttäen ei-olemassaolevaa symboli-indeksiä: %ld" + +#: coffcode.h:3669 +msgid "%B: section %s: string table overflow at offset %ld" +msgstr "%B: lohko %s: merkkijonotaulun ylitys siirrososoitteessa %ld" + +#: coffcode.h:4477 +msgid "%B: warning: line number table read failed" +msgstr "%B: varoitus: rivinumerotaulun lukeminen ei onnistunut" + +#: coffcode.h:4507 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: varoitus: virheellinen symboli-indeksi %ld rivinumeroissa" + +#: coffcode.h:4521 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: varoitus: rivinumerojen kaksoiskappaleita symbolille ”%s”" + +#: coffcode.h:4912 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: Tunnistamaton tallennusluokka: %d lohkonimi: %s symbolinimi: ”%s”" + +#: coffcode.h:5038 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "varoitus: %B: paikallisessa symbolissa ”%s” ei ole lohkoa" + +#: coffcode.h:5181 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: virheellinen sijoitustyyppi %d osoitteessa 0x%lx" + +#: coffgen.c:1571 +msgid "%B: bad string table size %lu" +msgstr "%B: virheellinen merkkijonotaulukoko %lu" + +# Epäilen, että lähdekoodissa on virhe: tyypit ovat kaksi viimeistä parametriä. +#: cofflink.c:513 elflink.c:4307 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Varoitus: symbolityyppi ”%s” vaihtui tyypistä %d tyyppiin %d kohteessa %B" + +#: cofflink.c:2305 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: relocs-tietueet lohkossa ”%A”, mutta ilman sisältöä" + +#: cofflink.c:2636 coffswap.h:826 +#, c-format +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%s: %s: reloc-tietueylivuoto: 0x%lx > 0xffff" + +#: cofflink.c:2645 coffswap.h:812 +#, c-format +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: varoitus: %s: rivinumeroylivuoto: 0x%lx > 0xffff" + +#: cpu-arm.c:189 cpu-arm.c:200 +msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "virhe: %B on käännetty EP9312:lle, kun taas %B on käännetty XScalelle" + +#: cpu-arm.c:332 +#, c-format +msgid "warning: unable to update contents of %s section in %s" +msgstr "varoitus: ei voi päivittää %s-lohkon sisältöä kohteessa %s" + +#: dwarf2.c:430 +#, c-format +msgid "Dwarf Error: Can't find %s section." +msgstr "Dwarf-virhe: Ei löydy %s-lohkoa." + +#: dwarf2.c:457 +#, c-format +msgid "Dwarf Error: unable to decompress %s section." +msgstr "Dwarf-virhe: lohkon %s pakkausta ei kyetä purkamaan." + +#: dwarf2.c:468 +#, c-format +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "Dwarf-virhe: Siirrososoite (%lu) suurempi tai yhtäsuuri kuin %s-koko (%lu)." + +#: dwarf2.c:865 +#, c-format +msgid "Dwarf Error: Invalid or unhandled FORM value: %u." +msgstr "Dwarf-virhe: Virheellinen tai käsittelemätön FORM-arvo: %u." + +#: dwarf2.c:1079 +msgid "Dwarf Error: mangled line number section (bad file number)." +msgstr "Dwarf-virhe: runneltu rivinumerolohko (virheellinen tiedostonumero)." + +#: dwarf2.c:1413 +msgid "Dwarf Error: mangled line number section." +msgstr "Dwarf-virhe: runneltu rivinumerolohko." + +#: dwarf2.c:1760 dwarf2.c:1867 dwarf2.c:2139 +#, c-format +msgid "Dwarf Error: Could not find abbrev number %u." +msgstr "Dwarf-virhe: Ei löytynyt lyhennenumeroa %u." + +#: dwarf2.c:2100 +#, c-format +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 and 3 information." +msgstr "Dwarf-virhe: löytyi dwarf-versio ”%u”, tämä lukija käsittelee vain version 2 ja 3 tietoja." + +#: dwarf2.c:2107 +#, c-format +msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." +msgstr "Dwarf-virhe: löytyi osoitekoko ”%u”, tämä lukija ei voi käsitellä kokoja, jotka ovat suurempia kuin ”%u”." + +#: dwarf2.c:2130 +#, c-format +msgid "Dwarf Error: Bad abbrev number: %u." +msgstr "Dwarf-virhe: Väärä lyhennenumero: %u." + +#: ecoff.c:1238 +#, c-format +msgid "Unknown basic type %d" +msgstr "Tuntematon perustyyppi %d" + +#: ecoff.c:1495 +#, c-format +msgid "" +"\n" +" End+1 symbol: %ld" +msgstr "" +"\n" +" Loppu+1 symboli: %ld" + +#: ecoff.c:1502 ecoff.c:1505 +#, c-format +msgid "" +"\n" +" First symbol: %ld" +msgstr "" +"\n" +" Ensimmäinen symboli: %ld" + +#: ecoff.c:1517 +#, c-format +msgid "" +"\n" +" End+1 symbol: %-7ld Type: %s" +msgstr "" +"\n" +" Loppu+1 symboli: %-7ld Tyyppi: %s" + +#: ecoff.c:1524 +#, c-format +msgid "" +"\n" +" Local symbol: %ld" +msgstr "" +"\n" +" Paikallinen symboli: %ld" + +#: ecoff.c:1532 +#, c-format +msgid "" +"\n" +" struct; End+1 symbol: %ld" +msgstr "" +"\n" +" struct; Loppu+1 symboli: %ld" + +#: ecoff.c:1537 +#, c-format +msgid "" +"\n" +" union; End+1 symbol: %ld" +msgstr "" +"\n" +" union; Loppu+1 symboli: %ld" + +#: ecoff.c:1542 +#, c-format +msgid "" +"\n" +" enum; End+1 symbol: %ld" +msgstr "" +"\n" +" enum; Loppu+1 symboli: %ld" + +#: ecoff.c:1548 +#, c-format +msgid "" +"\n" +" Type: %s" +msgstr "" +"\n" +" Tyyppi: %s" + +#: elf-attrs.c:567 +msgid "error: %B: Must be processed by '%s' toolchain" +msgstr "virhe: %B: Tämän on ”%s”-työkaluketjun käsiteltävä" + +#: elf-attrs.c:575 +msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "virhe: %B: Objektitunniste ”%d, %s” ei ole yhteensopiva tunnisteen ”%d, %s” kanssa" + +#: elf-eh-frame.c:884 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "%P: virhe kohteessa %B(%A); ”.eh_frame_hdr”-taulua ei luotu.\n" + +#: elf-eh-frame.c:1122 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: fde-koodaus kohteessa %B(%A) estää ”.eh_frame_hdr”-taulun luomisen.\n" + +#: elf-ifunc.c:179 +msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" +msgstr "%F%P: dynaamista STT_GNU_IFUNC symbolia ”%s” osoitinyhtäläisyydellä kohteessa ”%B” ei voida käyttää tekemään suoritettavaa tiedostoa; käännä uudelleen valitsimella -fPIE ja linkitä uudelleen valitsemella -pie\n" + +#: elf-m10200.c:456 elf-m10300.c:1575 elf32-avr.c:1251 elf32-bfin.c:3200 +#: elf32-cr16.c:1517 elf32-cr16c.c:790 elf32-cris.c:2089 elf32-crx.c:933 +#: elf32-d10v.c:516 elf32-fr30.c:616 elf32-frv.c:4114 elf32-h8300.c:516 +#: elf32-i860.c:1218 elf32-ip2k.c:1499 elf32-iq2000.c:691 elf32-lm32.c:1171 +#: elf32-m32c.c:560 elf32-m32r.c:3102 elf32-m68hc1x.c:1136 elf32-mep.c:541 +#: elf32-microblaze.c:1226 elf32-moxie.c:291 elf32-msp430.c:493 elf32-mt.c:402 +#: elf32-openrisc.c:411 elf32-score.c:2752 elf32-score7.c:2591 +#: elf32-spu.c:5045 elf32-v850.c:1701 elf32-xstormy16.c:948 elf64-mmix.c:1533 +msgid "internal error: out of range error" +msgstr "sisäinen virhe: ”lukualueen ulkopuolella”-virhe" + +#: elf-m10200.c:460 elf-m10300.c:1579 elf32-avr.c:1255 elf32-bfin.c:3204 +#: elf32-cr16.c:1521 elf32-cr16c.c:794 elf32-cris.c:2093 elf32-crx.c:937 +#: elf32-d10v.c:520 elf32-fr30.c:620 elf32-frv.c:4118 elf32-h8300.c:520 +#: elf32-i860.c:1222 elf32-iq2000.c:695 elf32-lm32.c:1175 elf32-m32c.c:564 +#: elf32-m32r.c:3106 elf32-m68hc1x.c:1140 elf32-mep.c:545 +#: elf32-microblaze.c:1230 elf32-moxie.c:295 elf32-msp430.c:497 +#: elf32-openrisc.c:415 elf32-score.c:2756 elf32-score7.c:2595 +#: elf32-spu.c:5049 elf32-v850.c:1705 elf32-xstormy16.c:952 elf64-mmix.c:1537 +#: elfxx-mips.c:9103 +msgid "internal error: unsupported relocation error" +msgstr "sisäinen virhe: ei-tuettu sijoitusvirhe" + +#: elf-m10200.c:464 elf32-cr16.c:1525 elf32-cr16c.c:798 elf32-crx.c:941 +#: elf32-d10v.c:524 elf32-h8300.c:524 elf32-lm32.c:1179 elf32-m32r.c:3110 +#: elf32-m68hc1x.c:1144 elf32-microblaze.c:1234 elf32-score.c:2760 +#: elf32-score7.c:2599 elf32-spu.c:5053 +msgid "internal error: dangerous error" +msgstr "sisäinen virhe: vaarallinen virhe" + +#: elf-m10200.c:468 elf-m10300.c:1592 elf32-avr.c:1263 elf32-bfin.c:3212 +#: elf32-cr16.c:1529 elf32-cr16c.c:802 elf32-cris.c:2101 elf32-crx.c:945 +#: elf32-d10v.c:528 elf32-fr30.c:628 elf32-frv.c:4126 elf32-h8300.c:528 +#: elf32-i860.c:1230 elf32-ip2k.c:1514 elf32-iq2000.c:703 elf32-lm32.c:1183 +#: elf32-m32c.c:572 elf32-m32r.c:3114 elf32-m68hc1x.c:1148 elf32-mep.c:553 +#: elf32-microblaze.c:1238 elf32-moxie.c:303 elf32-msp430.c:505 elf32-mt.c:410 +#: elf32-openrisc.c:423 elf32-score.c:2769 elf32-score7.c:2603 +#: elf32-spu.c:5057 elf32-v850.c:1725 elf32-xstormy16.c:960 elf64-mmix.c:1545 +msgid "internal error: unknown error" +msgstr "sisäinen virhe: tuntematon virhe" + +#: elf-m10300.c:1512 elf32-arm.c:8963 elf32-i386.c:3984 elf32-m32r.c:2588 +#: elf32-m68k.c:4099 elf32-ppc.c:7906 elf32-s390.c:3015 elf32-sh.c:3429 +#: elf32-xtensa.c:3027 elf64-ppc.c:12063 elf64-s390.c:2974 elf64-sh64.c:1648 +#: elf64-x86-64.c:3657 elfxx-sparc.c:3317 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): ratkaisematon %s sijoitus symbolia ”%s” varten" + +#: elf-m10300.c:1584 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "virhe: sopimaton sijoitustyyppi jaetulle kirjastolle (unohtuiko -fpic?)" + +#: elf-m10300.c:1587 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "sisäinen virhe: epäilyttävää sijoitustyyppiä käytetään jaetussa kirjastossa" + +#: elf-m10300.c:4385 elf32-arm.c:11346 elf32-cr16.c:2519 elf32-cris.c:3030 +#: elf32-hppa.c:1891 elf32-i370.c:506 elf32-i386.c:1975 elf32-lm32.c:1873 +#: elf32-m32r.c:1921 elf32-m68k.c:3188 elf32-ppc.c:4953 elf32-s390.c:1650 +#: elf32-sh.c:2574 elf32-vax.c:1052 elf64-ppc.c:6348 elf64-s390.c:1623 +#: elf64-sh64.c:3396 elf64-x86-64.c:1821 elfxx-sparc.c:1802 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "dynaaminen muuttuja ”%s” on nollakokoinen" + +#: elf.c:329 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: virheellinen merkkijonosiirrososoite %u >= %lu lohkolle ”%s”" + +#: elf.c:439 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "%B symbolinumero %lu viittaa puuttuvaan SHT_SYMTAB_SHNDX-lohkoon" + +#: elf.c:595 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Rikkinäinen kokokenttä ryhmälohko-otsakkeessa: 0x%lx" + +#: elf.c:631 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: virheellinen SHT_GROUP-tulokohta" + +#: elf.c:701 +msgid "%B: no group info for section %A" +msgstr "%B: ei ryhmätietoja lohkolle %A" + +#: elf.c:730 elf.c:2960 elflink.c:9912 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: varoitus: sh_link-kenttää ei aseteta lohkolle ”%A”" + +#: elf.c:749 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: sh_link [%d]-kenttä lohkossa ”%A” on virheellinen" + +#: elf.c:784 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: tuntematon [%d] lohko ”%s” ryhmässä [%s]" + +#: elf.c:1104 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" +"\n" +"Ohjelmaotsake:\n" + +#: elf.c:1146 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" +"\n" +"Dynaaminen lohko:\n" + +#: elf.c:1282 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" +"\n" +"Versiomäärittelyt:\n" + +#: elf.c:1307 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" +"\n" +"Versioviitteet:\n" + +#: elf.c:1312 +#, c-format +msgid " required from %s:\n" +msgstr " kysytty kohteesta %s:\n" + +#: elf.c:1702 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: virheellinen linkki %lu reloc-tietueelle %s (indeksi %u)" + +#: elf.c:1870 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: ei tiedä kuinka käsitellä varattua, sovelluskohtaista lohkoa ”%s” [0x%8x]" + +#: elf.c:1882 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: ei tiedä, kuinka käsitellä prosessorikohtaista lohkoa ”%s” [0x%8x]" + +#: elf.c:1893 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: ei tiedä, kuinka käsitellä käyttöjärjestelmäkohtaista lohkoa ”%s” [0x%8x]" + +#: elf.c:1903 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: ei tiedä kuinka käsitellä lohkoa ”%s” [0x%8x]" + +#: elf.c:2500 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "varoitus: lohkon ”%A” tyyppi vaihtunut tyypiksi PROGBITS" + +#: elf.c:2917 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: sh_link-lohko ”%A” osoittaa hylättyyn lohkoon ”%A” kohteessa ”%B”" + +#: elf.c:2940 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: sh_link-lohko ”%A” osoittaa poistettuun lohkoon ”%A” kohteessa ”%B”" + +#: elf.c:4311 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: Ensimmäinen lohko PT_DYNAMIC-segmentissä ei ole ”.dynamic”-lohko" + +#: elf.c:4338 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: Ei tarpeeksi tilaa ohjelmaotsakkeille, yritä linkittää ”-N”-argumentilla" + +#: elf.c:4420 +msgid "%B: section %A vma 0x%lx overlaps previous sections" +msgstr "%B: lohkon %A vma 0x%lx menee päällekkäin edellisten lohkojen kanssa" + +#: elf.c:4515 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: lohkoa ”%A” ei voida varata segmentissä %d" + +#: elf.c:4565 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: varoitus: varattu lohko ”%s” ei ole segmentissä" + +#: elf.c:5065 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: symboli ”%s” vaadittu, mutta ei ole annettu" + +#: elf.c:5404 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: varoitus: Tyhjä ladattava segmentti havaittu, onko tämä tarkoituksellinen ?\n" + +#: elf.c:6370 +#, c-format +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "Ei löydy samanlaista tulostelohkoa symbolille ”%s” lohkosta ”%s”" + +#: elf.c:7356 +msgid "%B: unsupported relocation type %s" +msgstr "%B: ei-tuettu sijoitustyyppi %s" + +#: elf32-arm.c:3149 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" +"%B(%s): varoitus: yhteistoimivuus vanhan koodin kanssa ei ole käytössä.\n" +" ensimmäinen esiintymä: %B: Thumb-kutsu ARM-koodiin" + +#: elf32-arm.c:3190 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: ARM call to Thumb" +msgstr "" +"%B(%s): varoitus: yhteistoimivuus vanhan koodin kanssa ei ole käytössä.\n" +" ensimmäinen esiintymä: %B: ARM-kutsu Thumb-koodiin" + +#: elf32-arm.c:3387 elf32-arm.c:4692 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "%s: ei voi luoda stub-tulokohtaa %s" + +#: elf32-arm.c:4804 +#, c-format +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "ei löydy THUMB-vihjettä ”%s” kohteelle ”%s”" + +#: elf32-arm.c:4838 +#, c-format +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "ei löydy ARM-vihjettä ”%s” kohteelle ”%s”" + +#: elf32-arm.c:5365 +msgid "%B: BE8 images only valid in big-endian mode." +msgstr "%B: BE8-vedokset ovat oikeita vain big-endian-tavujärjestyksessä." + +# Vector Floating Point (VFP) +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:5590 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: varoitus: valittu VFP11-virheenkiertotapa ei ole välttämätön kohdearkkitehtuurille" + +#: elf32-arm.c:6130 elf32-arm.c:6150 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: ei löydy VFP11-julkisivua ”%s”" + +#: elf32-arm.c:6196 +#, c-format +msgid "Invalid TARGET2 relocation type '%s'." +msgstr "Virheellinen TARGET2-sijoitustyyppi ”%s”." + +#: elf32-arm.c:6281 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: thumb call to arm" +msgstr "" +"%B(%s): varoitus: yhteistoimivuus vanhan koodin kanssa ei ole käytössä.\n" +" ensimmäinen esiintymä: %B: thumb-kutsu arm-koodiin" + +#: elf32-arm.c:7003 +msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." +msgstr "\\%B: Varoitus: ”Arm BLX”-käskykohteet Arm-funktiossa ”%s”." + +#: elf32-arm.c:7405 +msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." +msgstr "%B: Varoitus: ”Thumb BLX”-käskykohteet thumb-funktiossa ”%s”." + +#: elf32-arm.c:8085 +msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_ARM_TLS_LE32-sijoitukset eivät ole sallittuja jaetuissa objekteissa" + +#: elf32-arm.c:8300 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): Vain ADD- tai SUB-käskyt ovat sallittuja ALU-ryhmän sijoituksille" + +#: elf32-arm.c:8340 elf32-arm.c:8427 elf32-arm.c:8510 elf32-arm.c:8595 +msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" +msgstr "%B(%A+0x%lx): Ylivuoto, kun halkaistaan 0x%lx ryhmäsijoitukselle %s" + +#: elf32-arm.c:8821 elf32-sh.c:3325 elf64-sh64.c:1556 +msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" +msgstr "%B(%A+0x%lx): %s sijoitus SEC_MERGE-lohkoa varten" + +# TLS: transport layer security +#: elf32-arm.c:8939 elf32-m68k.c:4134 elf32-xtensa.c:2765 elf64-ppc.c:10743 +msgid "%B(%A+0x%lx): %s used with TLS symbol %s" +msgstr "%B(%A+0x%lx): %s käytetään TLS-symbolin %s kanssa" + +#: elf32-arm.c:8940 elf32-m68k.c:4135 elf32-xtensa.c:2766 elf64-ppc.c:10744 +msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" +msgstr "%B(%A+0x%lx): %s käytetään ei-TLS-symbolin %s kanssa" + +#: elf32-arm.c:8997 +msgid "out of range" +msgstr "lukualueen ulkopuolella" + +#: elf32-arm.c:9001 +msgid "unsupported relocation" +msgstr "ei-tuettu sijoitus" + +#: elf32-arm.c:9009 +msgid "unknown error" +msgstr "tuntematon virhe" + +#: elf32-arm.c:9409 +msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" +msgstr "Varoitus: Nollataan %B:n vanhan koodin kanssa toimimisen yhteistoimivuuslippu, koska se on linkitetty ei-yhteistoimivuuskoodiin %B:ssa" + +#: elf32-arm.c:9652 +msgid "error: %B: Unknown CPU architecture" +msgstr "virhe: %B: Tuntematon prosessoriarkkitehtuuri" + +#: elf32-arm.c:9690 +msgid "error: %B: Conflicting CPU architectures %d/%d" +msgstr "virhe: %B: Ristiriitaisia prosessoriarkkitehtuureja %d/%d" + +#: elf32-arm.c:9747 +msgid "error: %B uses VFP register arguments, %B does not" +msgstr "virhe: %B käyttää VFP-rekisteriargumentteja, %B ei käytä" + +#: elf32-arm.c:9897 +msgid "error: %B: Conflicting architecture profiles %c/%c" +msgstr "virhe: %B: Ristiriitaisia arkkitehtuuriprofiileja %c/%c" + +#: elf32-arm.c:9921 +msgid "Warning: %B: Conflicting platform configuration" +msgstr "Varoitus: %B: Ristiriitainen käyttöjärjestemäkonfiguraatio" + +#: elf32-arm.c:9930 +msgid "error: %B: Conflicting use of R9" +msgstr "virhe: %B: Ristiriitainen R9:n käyttö" + +#: elf32-arm.c:9942 +msgid "error: %B: SB relative addressing conflicts with use of R9" +msgstr "virhe: %B: SB-suhteellinen osoitteitus on ristiriidassa R9:n käytön kanssa" + +#: elf32-arm.c:9955 +msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" +msgstr "varoitus: %B käyttää %u-tavuista wchar_t-merkkiä vaikka tuloste käyttää %u-tavuista wchar_t-merkkiä; wchart_t-käyttöarvot objekteissa saattavat olla virheellisiä" + +#: elf32-arm.c:9986 +msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "varoitus: %B käyttää %s enums-alkioita vaikka tuloste käyttää %s enums-alkioita; enum-arvojen käyttö objekteissa saattaa olla virheellinen" + +#: elf32-arm.c:9998 +msgid "error: %B uses iWMMXt register arguments, %B does not" +msgstr "virhe: %B käyttää iWMMXt-rekisteriargumentteja, %B ei käytä" + +#: elf32-arm.c:10020 +msgid "error: fp16 format mismatch between %B and %B" +msgstr "virhe: fp16-muototäsmäämättömyys kohteiden %B ja %B välillä" + +#: elf32-arm.c:10063 elf32-arm.c:10156 +msgid "%B: Unknown mandatory EABI object attribute %d" +msgstr "%B: Tuntematon pakollinen EABI-objektiattribuutti %d" + +#: elf32-arm.c:10071 elf32-arm.c:10164 +msgid "Warning: %B: Unknown EABI object attribute %d" +msgstr "Varoitus: %B: Tuntematon EABI-objektiattribuutti %d" + +#: elf32-arm.c:10224 +msgid "error: %B is already in final BE8 format" +msgstr "virhe: %B on jo lopullisessa BE8-muodossa" + +#: elf32-arm.c:10300 +msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d" +msgstr "virhe: Lähdeobjektissa %B on EABI-versio %d, mutta kohteessa %B on EABI-versio %d" + +#: elf32-arm.c:10316 +msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "virhe: %B on käännetty APCS-%d:lle, kun taas kohde %B käyttää APCS-%d:ta" + +# Vector floating point (coprosessor) +#: elf32-arm.c:10341 +msgid "error: %B uses VFP instructions, whereas %B does not" +msgstr "virhe: %B käyttää vektoriliukulukukäskyjä, kun taas %B ei käytä" + +# Floating Point Accelerator (chip) +#: elf32-arm.c:10345 +msgid "error: %B uses FPA instructions, whereas %B does not" +msgstr "virhe: %B käyttää liukulukukiihdytinkäskyjä, kun taas %B ei käytä" + +#: elf32-arm.c:10355 +msgid "error: %B uses Maverick instructions, whereas %B does not" +msgstr "virhe: %B käyttää Maverick-käskyjä, kun taas %B ei käytä" + +#: elf32-arm.c:10359 +msgid "error: %B does not use Maverick instructions, whereas %B does" +msgstr "virhe: %B ei käytä Maverick-käskyjä, kun taas %B käyttää" + +#: elf32-arm.c:10378 +msgid "error: %B uses software FP, whereas %B uses hardware FP" +msgstr "virhe: %B käyttää ohjelmistoliukulukuja, kun taas %B käyttää laitteistoliukulukuja" + +#: elf32-arm.c:10382 +msgid "error: %B uses hardware FP, whereas %B uses software FP" +msgstr "virhe: %B käyttää laitteistoliukulukuja, kun taas %B käyttää ohjelmistoliukulukuja" + +#. 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:10429 elf32-bfin.c:5082 elf32-cris.c:4110 elf32-m68hc1x.c:1280 +#: elf32-m68k.c:1169 elf32-score.c:4039 elf32-score7.c:3876 elf32-vax.c:540 +#: elfxx-mips.c:12755 +#, c-format +msgid "private flags = %lx:" +msgstr "yksityiset liput = %lx:" + +#: elf32-arm.c:10438 +#, c-format +msgid " [interworking enabled]" +msgstr " [yhteistoimivuus vanhan koodin kanssa on käytössä]" + +#: elf32-arm.c:10446 +#, c-format +msgid " [VFP float format]" +msgstr " [vektoriliukulukumuoto]" + +#: elf32-arm.c:10448 +#, c-format +msgid " [Maverick float format]" +msgstr " [Maverick-liukulukumuoto]" + +#: elf32-arm.c:10450 +#, c-format +msgid " [FPA float format]" +msgstr " [Liukulukukiihdytin-liukulukumuoto]" + +#: elf32-arm.c:10459 +#, c-format +msgid " [new ABI]" +msgstr " [uusi ABI]" + +#: elf32-arm.c:10462 +#, c-format +msgid " [old ABI]" +msgstr " [vanha ABI]" + +#: elf32-arm.c:10465 +#, c-format +msgid " [software FP]" +msgstr " [ohjelmistoliukuluku]" + +#: elf32-arm.c:10474 +#, c-format +msgid " [Version1 EABI]" +msgstr " [Versio 1 EABI]" + +#: elf32-arm.c:10477 elf32-arm.c:10488 +#, c-format +msgid " [sorted symbol table]" +msgstr " [lajiteltu symbolitaulu]" + +#: elf32-arm.c:10479 elf32-arm.c:10490 +#, c-format +msgid " [unsorted symbol table]" +msgstr " [lajittelematon symbolitaulu]" + +#: elf32-arm.c:10485 +#, c-format +msgid " [Version2 EABI]" +msgstr " [Versio 2 EABI]" + +#: elf32-arm.c:10493 +#, c-format +msgid " [dynamic symbols use segment index]" +msgstr " [dynaamiset symbolit käyttävät segmentti-indeksiä]" + +#: elf32-arm.c:10496 +#, c-format +msgid " [mapping symbols precede others]" +msgstr " [kuvaussymbolit ylittävät tärkeydessä muut]" + +#: elf32-arm.c:10503 +#, c-format +msgid " [Version3 EABI]" +msgstr " [Versio 3 EABI]" + +#: elf32-arm.c:10507 +#, c-format +msgid " [Version4 EABI]" +msgstr " [Versio 4 EABI]" + +#: elf32-arm.c:10511 +#, c-format +msgid " [Version5 EABI]" +msgstr " [Versio 5 EABI]" + +#: elf32-arm.c:10514 +#, c-format +msgid " [BE8]" +msgstr " [BE8]" + +#: elf32-arm.c:10517 +#, c-format +msgid " [LE8]" +msgstr " [LE8]" + +#: elf32-arm.c:10523 +#, c-format +msgid " " +msgstr " " + +#: elf32-arm.c:10530 +#, c-format +msgid " [relocatable executable]" +msgstr " [sijoitettava suoritettava tiedosto]" + +#: elf32-arm.c:10533 +#, c-format +msgid " [has entry point]" +msgstr " [on tulokohta]" + +#: elf32-arm.c:10538 +#, c-format +msgid "" +msgstr "" + +#: elf32-arm.c:10783 elf32-i386.c:1300 elf32-s390.c:998 elf32-xtensa.c:1000 +#: elf64-s390.c:952 elf64-x86-64.c:1082 elfxx-sparc.c:1121 +msgid "%B: bad symbol index: %d" +msgstr "%B: virheellinen symboli-indeksi: %d" + +#: elf32-arm.c:10904 elf64-x86-64.c:1242 elf64-x86-64.c:1411 elfxx-mips.c:7870 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: sijoitusta %s kohdetta ”%s” varten ei voida käyttää kun tehdään jaettua objektia; käännä uudelleen -fPIC-argumentilla" + +#: elf32-arm.c:11893 +#, c-format +msgid "Errors encountered processing file %s" +msgstr "Kohdattiin virheitä prosessoitaessa tiedostoa %s" + +#: elf32-arm.c:13339 +msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" +msgstr "%B: virhe: Cortex-A8 virhe-stub on varattu turvattomaan paikkaan" + +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:13366 +msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" +msgstr "%B: virhe: Cortex-A8 virhe-stub lukualueen ulkopuolella (syötetiedoston on liian iso)" + +#: elf32-arm.c:13457 elf32-arm.c:13479 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: virhe: VFP11-julkisivu lukualueen ulkopuolella" + +#: elf32-avr.c:1259 elf32-bfin.c:3208 elf32-cris.c:2097 elf32-fr30.c:624 +#: elf32-frv.c:4122 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:699 +#: elf32-m32c.c:568 elf32-mep.c:549 elf32-moxie.c:299 elf32-msp430.c:501 +#: elf32-mt.c:406 elf32-openrisc.c:419 elf32-v850.c:1709 elf32-xstormy16.c:956 +#: elf64-mmix.c:1541 +msgid "internal error: dangerous relocation" +msgstr "sisäinen virhe: vaarallinen sijoitus" + +#: elf32-avr.c:2409 elf32-hppa.c:605 elf32-m68hc1x.c:165 elf64-ppc.c:4141 +msgid "%B: cannot create stub entry %s" +msgstr "%B: ei voi luoda stub-tulokohtaa %s" + +#: elf32-bfin.c:1581 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): ratkaisematon sijoitus symboliin ”%s”" + +#: elf32-bfin.c:1614 elf32-i386.c:4026 elf32-m68k.c:4176 elf32-s390.c:3067 +#: elf64-s390.c:3026 elf64-x86-64.c:3697 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): reloc-tietue kohdetta ”%s” varten: virhe %d" + +#: elf32-bfin.c:2714 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B: sijoitus kohteessa ”%A+0x%x” viittaa symboliin ”%s”, jossa on ei-nolla-yhteenlaskettava" + +#: elf32-bfin.c:2728 elf32-frv.c:2904 +msgid "relocation references symbol not defined in the module" +msgstr "sijoitusviitteet-symboli ei ole määritelty modulissa" + +#: elf32-bfin.c:2825 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC viittaa dynaamiseen symboliin, jossa on ei-nolla-yhteenlaskettava" + +#: elf32-bfin.c:2866 elf32-bfin.c:2989 elf32-frv.c:3641 elf32-frv.c:3762 +msgid "cannot emit fixups in read-only section" +msgstr "ei voi lähettää korjauksia kirjoitussuojattuun lohkoon" + +#: elf32-bfin.c:2897 elf32-bfin.c:3027 elf32-frv.c:3672 elf32-frv.c:3806 +#: elf32-lm32.c:1104 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "ei voi lähettää dynaamisia sijoituksia kirjoitussuojattussa lohkossa" + +#: elf32-bfin.c:2947 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC_VALUE viittaa dynaamiseen symboliin, jossa on ei-nolla-yhteenlaskettava" + +#: elf32-bfin.c:3112 +msgid "relocations between different segments are not supported" +msgstr "sijoituksia eri segmenttien välillä ei tueta" + +#: elf32-bfin.c:3113 +msgid "warning: relocation references a different segment" +msgstr "varoitus: sijoitus viittaa eri segmenttiin" + +#: elf32-bfin.c:4974 elf32-frv.c:6408 +msgid "%B: unsupported relocation type %i" +msgstr "%B: ei-tuettu sijoitustyyppi %i" + +# The FR-V FDPIC ABI: The FDPIC register is used as a base register for accessing the global offset table (GOT) and function descriptors. +# Yksi prosessorin rekistereistä on nimetty fdpic-rekisteriksi milloin data- ja tekstilohkot ovat sijoitettavia (eli niiden siirros ei ole vakio). +#: elf32-bfin.c:5127 elf32-frv.c:6816 +#, c-format +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: ei voi linkittää objektitiedostoa ilman fdpic-rekisteriä suoritettavaan tiedostoon, joka käyttää fdpic-rekisteriä" + +#: elf32-bfin.c:5131 elf32-frv.c:6820 +#, c-format +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: ei voi linkittää fdpic-rekisteriä käyttävää objektitiedostoa suoritettavaan tiedostoon, joka ei käytä fdpic-rekisteriä" + +#: elf32-cris.c:1169 +msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" +msgstr "%B, lohko %A: ratkaisematon sijoitus %s symbolia ”%s” varten" + +# Procedure Linkage Table (PLT) and Global Offset Table (GOT) +#: elf32-cris.c:1238 +msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" +msgstr "%B, lohko %A: Ei proseduurilinkitystaulua eikä yleissiirrostaulua sijoitukselle %s symbolia ”%s” varten" + +#: elf32-cris.c:1240 +msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" +msgstr "%B, lohko %A: Ei proseduurilinkitystaulua sijoituksille %s symbolia ”%s” varten" + +#: elf32-cris.c:1246 elf32-cris.c:1379 elf32-cris.c:1641 elf32-cris.c:1730 +#: elf32-cris.c:1883 +msgid "[whose name is lost]" +msgstr "[jonka nimi on kadonnut]" + +#: elf32-cris.c:1365 +msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" +msgstr "%B, lohko %A: sijoitus %s ei-nolla-yhteenlaskettavalla %d paikallista symbolia varten" + +#: elf32-cris.c:1373 elf32-cris.c:1724 elf32-cris.c:1877 +msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" +msgstr "%B, lohko %A: sijoitus %s ei-nolla-yhteenlaskettavalla %d symbolia ”%s” varten" + +#: elf32-cris.c:1399 +msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" +msgstr "%B, lohko %A: sijoitusta %s ei sallita yleissymbolille: ”%s”" + +#: elf32-cris.c:1415 +msgid "%B, section %A: relocation %s with no GOT created" +msgstr "%B, lohko %A: sijoitus %s ilman yleissiirrostaulun luontia" + +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1632 +msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" +msgstr "%B, lohkon %A: sijoituksella %s on määrittelemätön viite ”%s”, ehkä esittelysekaannus?" + +#: elf32-cris.c:2010 +msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" +msgstr "%B, lohko %A: sijoitusta %s ei sallita symbolille: ”%s”, joka määritellään ohjelman ulkopuolella, ehkä esittelysekaannus?" + +#: elf32-cris.c:2063 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "(liian monta yleismuuttujaa valitsimelle -fpic: käännä uudelleen valitsimella -fPIC)" + +#: elf32-cris.c:2070 +msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" +msgstr "(säikeen paikallinen data liian iso valitsimelle -fpic tai -msmall-tls: käännä uudelleen valitsimella -fPIC tai -mno-small-tls)" + +# position-independent code (PIC) +#: elf32-cris.c:3204 +msgid "" +"%B, section %A:\n" +" v10/v32 compatible object %s must not contain a PIC relocation" +msgstr "" +"%B, lohko %A:\n" +" v10/v32 yhteensopiva objekti %s ei saa sisältää sijaintiriippumatonta koodisijoitusta" + +#: elf32-cris.c:3309 +msgid "" +"%B, section %A:\n" +" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" +msgstr "" +"%B, lohko %A:\n" +" sijoitusta %s ei pitäisi käyttää jaetussa objektissa; tyypillisesti valitsinsekaannus, käännä uudelleen argumentilla -fPIC" + +#: elf32-cris.c:3523 +msgid "" +"%B, section %A:\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"%B, lohko %A:\n" +" sijoitusta %s ei pitäisi käyttää jaettussa objektissa; käännä uudelleen argumentilla -fPIC" + +#: elf32-cris.c:3940 +msgid "" +"%B, section `%A', to symbol `%s':\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"%B, lohko ”%A”, symboliin ”%s”:\n" +" sijoitusta %s ei pitäisi käyttää jaettussa objektissa; käännä uudelleen argumentilla -fPIC" + +#: elf32-cris.c:4059 +msgid "Unexpected machine number" +msgstr "Odottamaton konenumero" + +#: elf32-cris.c:4113 +#, c-format +msgid " [symbols have a _ prefix]" +msgstr " [symboleissa on ”_”-etuliite]" + +#: elf32-cris.c:4116 +#, c-format +msgid " [v10 and v32]" +msgstr " [v10 ja v32]" + +#: elf32-cris.c:4119 +#, c-format +msgid " [v32]" +msgstr " [v32]" + +#: elf32-cris.c:4164 +msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" +msgstr "%B: käyttää ”_”-etuliitesymboleja, mutta kirjoittaa tiedoston ilman etuliitesymboleja" + +#: elf32-cris.c:4165 +msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" +msgstr "%B: käyttää ilman etuliitesymboleja, mutta kirjoittaa tiedoston ”_”-etuliitesymboleilla" + +# CRIS v32 info: The chip with the CRIS v32 core. +#: elf32-cris.c:4184 +msgid "%B contains CRIS v32 code, incompatible with previous objects" +msgstr "%B sisältää ”CRIS v32”-koodia, ei ole yhteensopiva aiempien objektien kanssa" + +#: elf32-cris.c:4186 +msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" +msgstr "%B ei sisällä ”CRIS-v32”-koodia, yhteensopimaton aiempien objektien kanssa" + +#: elf32-frv.c:1507 elf32-frv.c:1656 +msgid "relocation requires zero addend" +msgstr "sijoitus vaatii nolla-yhteenlaskettavan" + +#: elf32-frv.c:2891 +msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above" +msgstr "%B(%A+0x%x): sijoitus kohteeseen ”%s+%x” saatta olla yläpuolella olevan virheen aiheuttama" + +#: elf32-frv.c:2980 +msgid "R_FRV_GETTLSOFF not applied to a call instruction" +msgstr "R_FRV_GETTLSOFF ei sovelleta kutsukäskyyn" + +#: elf32-frv.c:3022 +msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction" +msgstr "R_FRV_GOTTLSDESC12 ei sovelleta ”lddi”-käskyyn" + +#: elf32-frv.c:3093 +msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction" +msgstr "R_FRV_GOTTLSDESCHI ei sovelleta ”sethi”-käskyyn" + +#: elf32-frv.c:3130 +msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_GOTTLSDESCLO ei sovelleta ”setlo”- tai ”setlos”-käskyyn" + +#: elf32-frv.c:3178 +msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction" +msgstr "R_FRV_TLSDESC_RELAX ei sovelleta ”ldd”-käskyyn" + +# msgid-virhe: calll, eli yksi ällä liikaa +#: elf32-frv.c:3262 +msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction" +msgstr "R_FRV_GETTLSOFF_RELAX ei sovelleta kutsukäskyyn" + +#: elf32-frv.c:3317 +msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction" +msgstr "R_FRV_GOTTLSOFF12 ei sovelleta ”ldi”-käskyyn" + +#: elf32-frv.c:3347 +msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction" +msgstr "R_FRV_GOTTLSOFFHI ei sovelleta ”sethi”-käskyyn" + +#: elf32-frv.c:3376 +msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_GOTTLSOFFLO ei sovelleta ”setlo”- tai ”setlos”-käskyyn" + +#: elf32-frv.c:3407 +msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction" +msgstr "R_FRV_TLSOFF_RELAX ei sovelleta ”ld”-käskyyn" + +#: elf32-frv.c:3452 +msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction" +msgstr "R_FRV_TLSMOFFHI ei sovelleta ”sethi”-käskyyn" + +#: elf32-frv.c:3479 +msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_TLSMOFFLO ei sovelleta ”setlo”- tai ”setlos”-käskyyn" + +#: elf32-frv.c:3600 +msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC viittaa dynaamiseen symboliin ei-nolla-yhteenlaskettavalla" + +#: elf32-frv.c:3720 +msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC_VALUE viittaa dynaamiseen symboliin ei-nolla-yhteenlaskettavalla" + +#: elf32-frv.c:3977 elf32-frv.c:4133 +msgid "%B(%A+0x%lx): reloc against `%s': %s" +msgstr "%B(%A+0x%lx): reloc-tietue ”%s”: %s varten" + +#: elf32-frv.c:3979 elf32-frv.c:3983 +msgid "relocation references a different segment" +msgstr "sijoitus viittaa eri segmenttiin" + +#: elf32-frv.c:6730 +#, c-format +msgid "%s: compiled with %s and linked with modules that use non-pic relocations" +msgstr "%s: käännetty %s:n kanssa ja linkitetty paikkariippuvaisia koodisijoituksia käyttävien modulien kanssa" + +#: elf32-frv.c:6783 elf32-iq2000.c:852 elf32-m32c.c:814 +#, c-format +msgid "%s: compiled with %s and linked with modules compiled with %s" +msgstr "%s: käännetty %s:n kanssa ja linkitetty moduleihin, jotka on käännetty %s:n kanssa" + +#: elf32-frv.c:6795 +#, c-format +msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: käyttää erilaisia tuntemattomia ”e_flags (0x%lx)”-kenttiä kuin edelliset modulit (0x%lx)" + +#: elf32-frv.c:6845 elf32-iq2000.c:889 elf32-m32c.c:850 elf32-mt.c:583 +#, c-format +msgid "private flags = 0x%lx:" +msgstr "yksityiset liput = 0x%lx:" + +#: elf32-gen.c:69 elf64-gen.c:69 +msgid "%B: Relocations in generic ELF (EM: %d)" +msgstr "%B: Sijoituksia geneerisessä ELF (EM: %d):ssa" + +#: elf32-hppa.c:854 elf32-hppa.c:3570 +msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" +msgstr "%B(%A+0x%lx): ei tavoita kohdetta %s, käännä uudelleen ”-ffunction-sections”-valitsimilla" + +#: elf32-hppa.c:1286 +msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: sijoitusta %s ei voi käyttää kun tehdään jaettua objektia; käännä uudelleen ”-fPIC”-argumentilla" + +#: elf32-hppa.c:2780 +msgid "%B: duplicate export stub %s" +msgstr "%B: vienti-stubin %s kaksoiskappale" + +#: elf32-hppa.c:3406 +msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" +msgstr "%B(%A+0x%lx): %s korjaus käskylle 0x%x ei ole tuettu ei-jaetussa linkissä" + +#: elf32-hppa.c:4260 +msgid "%B(%A+0x%lx): cannot handle %s for %s" +msgstr "%B(%A+0x%lx): ei voi käsitellä %s kohteelle %s" + +#: elf32-hppa.c:4567 +msgid ".got section not immediately after .plt section" +msgstr "”.got”-alilohko ei ole välittömästi ”.plt”-lohkon jälkeen" + +#: elf32-i386.c:371 elf32-ppc.c:1666 elf32-s390.c:379 elf64-ppc.c:2283 +#: elf64-s390.c:403 elf64-x86-64.c:234 +msgid "%B: invalid relocation type %d" +msgstr "%B: virheellinen sijoitustyyppi %d" + +#: elf32-i386.c:1246 elf64-x86-64.c:1029 +msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" +msgstr "%B: TLS-siirros kohteesta %s kohteeseen %s kohdetta ”%s” varten osoitteessa 0x%lx lohkossa ”%A” epäonnistui" + +#: elf32-i386.c:1387 elf32-i386.c:2970 elf64-x86-64.c:1171 elf64-x86-64.c:2680 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +msgstr "%B: sijoitusta %s kohteen STT_GNU_IFUNC-symbolia `%s' varten ei käsittele %s" + +#: elf32-i386.c:1548 elf32-s390.c:1180 elf32-sh.c:5065 elf32-xtensa.c:1173 +#: elf64-s390.c:1143 elfxx-sparc.c:1257 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: ”%s” haettu sekä normaalina että säikeisenä paikallissymbolina" + +#: elf32-i386.c:2805 +msgid "%B: unrecognized relocation (0x%x) in section `%A'" +msgstr "%B: tunnistamaton sijoitus (0x%x) lohkossa ”%A”" + +#: elf32-i386.c:3219 elf64-x86-64.c:3081 +msgid "hidden symbol" +msgstr "piilotettu symboli" + +#: elf32-i386.c:3222 elf64-x86-64.c:3084 +msgid "internal symbol" +msgstr "sisäinen symboli" + +#: elf32-i386.c:3225 elf64-x86-64.c:3087 +msgid "protected symbol" +msgstr "suojattu symboli" + +#: elf32-i386.c:3228 elf64-x86-64.c:3090 +msgid "symbol" +msgstr "symboli" + +#: elf32-i386.c:3233 +msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%B: R_386_GOTOFF-sijoitusta määrittelemätöntä %s ”%s” varten ei voida käyttää kun tehdään jaettua objektia" + +#: elf32-i386.c:3243 +msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" +msgstr "%B: R_386_GOTOFF-sijoitusta suojattua funktiota ”%s” varten ei voida käyttää kun tehdään jaettua objektia" + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: 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 "ip2k-avartaja: kytkintaulu ilman täydellisesti täsmääviä sijoitustietoja." + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf32-ip2k.c:891 elf32-ip2k.c:974 +msgid "ip2k relaxer: switch table header corrupt." +msgstr "ip2k-avartaja: kytkintauluotsake rikkinäinen." + +#: elf32-ip2k.c:1316 +#, c-format +msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k-linkkeri: puuttuva sivukäsky kohteessa 0x%08lx (kohde = 0x%08lx)." + +#: elf32-ip2k.c:1332 +#, c-format +msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k-linkkeri: redundanssisivukäsky kohteessa 0x%08lx (kohde = 0x%08lx)." + +#. Only if it's not an unresolved symbol. +#: elf32-ip2k.c:1506 +msgid "unsupported relocation between data/insn address spaces" +msgstr "ei-tuettu sijoitus data/käskyosoitetilojen välillä" + +#: elf32-iq2000.c:865 elf32-m32c.c:826 +#, c-format +msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: käyttää eri ”e_flags (0x%lx)”-kenttiä kuin edelliset modulit (0x%lx)" + +#: elf32-lm32.c:698 +msgid "global pointer relative relocation when _gp not defined" +msgstr "yleisosoitinsuhteellinen sijoitus kun ”_gp” ei ole määritelty" + +#: elf32-lm32.c:753 +msgid "global pointer relative address out of range" +msgstr "yleisosoittimen suhteellinen osoite lukualueen ulkopuolella" + +#: elf32-lm32.c:1058 +msgid "internal error: addend should be zero for R_LM32_16_GOT" +msgstr "sisäinen virhe: yhteenlaskettavan pitäisi olla nolla kohteelle R_LM32_16_GOT" + +#: elf32-m32r.c:1453 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "SDA-sijoitus kun ”_SDA_BASE_” ei ole määritelty" + +#: elf32-m32r.c:3039 +msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" +msgstr "%B: Kohteen (%s) sijoitus %s on väärässä lohkossa (%A)" + +#: elf32-m32r.c:3567 +msgid "%B: Instruction set mismatch with previous modules" +msgstr "%B: Käskyjoukko ei täsmää edellisten modulien kanssa" + +#: elf32-m32r.c:3588 +#, c-format +msgid "private flags = %lx" +msgstr "yksityiset liput = %lx" + +#: elf32-m32r.c:3593 +#, c-format +msgid ": m32r instructions" +msgstr ": m32r-käskyt" + +#: elf32-m32r.c:3594 +#, c-format +msgid ": m32rx instructions" +msgstr ": m32rx-käskyt" + +#: elf32-m32r.c:3595 +#, c-format +msgid ": m32r2 instructions" +msgstr ": m32r2-käskyt" + +#: elf32-m68hc1x.c:1048 +#, c-format +msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" +msgstr "Viite etäsymboliin ”%s” väärää sijoitusta käyttäen saattaa aiheuttaa virheellisen suorituksen" + +# memory bank: A physical section of memory. +#: elf32-m68hc1x.c:1071 +#, c-format +msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" +msgstr "muistilohkottu osoite [%lx:%04lx] (%lx) ei ole samassa muistilohkossa kuin nykyinen muistilohkottu osoite [%lx:%04lx] (%lx)" + +#: elf32-m68hc1x.c:1090 +#, c-format +msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" +msgstr "viite muistilohkottuun osoitteeseen [%lx:%04lx] tavallisessa osoitetilassa osoitteessa %04lx" + +#: elf32-m68hc1x.c:1223 +msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" +msgstr "%B: linkitystiedostot käännetty 16-bittisille kokonaisluvuille (-mshort) ja muut 32-bittisille kokonaisluvuille" + +#: elf32-m68hc1x.c:1230 +msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" +msgstr "%B: linkitystiedostot käännetty 32-bittiselle double-liukuluvulle (-fshort-double) ja muut 64-bittiselle double-liukuluvulle" + +#: elf32-m68hc1x.c:1239 +msgid "%B: linking files compiled for HCS12 with others compiled for HC12" +msgstr "%B: linkitystiedostot käännetty HCS12:lle, muut käännetty HC12:lle" + +#: elf32-m68hc1x.c:1255 elf32-ppc.c:4255 elf64-sparc.c:698 elfxx-mips.c:12617 +msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%B: käyttää eri ”e_flags (0x%lx)”-kenttiä kuin edelliset modulit (0x%lx)" + +#: elf32-m68hc1x.c:1283 +#, c-format +msgid "[abi=32-bit int, " +msgstr "[abi=32-bittinen kokonaisluku, " + +#: elf32-m68hc1x.c:1285 +#, c-format +msgid "[abi=16-bit int, " +msgstr "[abi=16-bittinen kokonaisluku, " + +#: elf32-m68hc1x.c:1288 +#, c-format +msgid "64-bit double, " +msgstr "64-bittinen double-liukuluku, " + +#: elf32-m68hc1x.c:1290 +#, c-format +msgid "32-bit double, " +msgstr "32-bittinen double-liukuluku, " + +#: elf32-m68hc1x.c:1293 +#, c-format +msgid "cpu=HC11]" +msgstr "prosessori=HC11]" + +#: elf32-m68hc1x.c:1295 +#, c-format +msgid "cpu=HCS12]" +msgstr "prosessori=HCS12]" + +#: elf32-m68hc1x.c:1297 +#, c-format +msgid "cpu=HC12]" +msgstr "prosessori=HC12]" + +#: elf32-m68hc1x.c:1300 +#, c-format +msgid " [memory=bank-model]" +msgstr " [muisti=muistilohkomalli]" + +#: elf32-m68hc1x.c:1302 +#, c-format +msgid " [memory=flat]" +msgstr " [muisti=litteä]" + +#: elf32-m68k.c:1184 elf32-m68k.c:1185 +msgid "unknown" +msgstr "tuntematon" + +#: elf32-m68k.c:1645 +msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" +msgstr "%B: Yleissiirrostaulun ylivuoto: 8-bittisellä siirrososoitteella varustettujen sijoitusten lukumäärä > %d" + +#: elf32-m68k.c:1651 +msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" +msgstr "%B: Yleissiirrostaulun ylivuoto: 8-bittisellä tai 16-bittisellä siirrososoitteella varustettujen sijoitusten lukumäärä > %d" + +#: elf32-m68k.c:3902 +msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_68K_TLS_LE32-sijoitukset eivät ole sallittuja jaetuissa objekteissa" + +#: elf32-mcore.c:99 elf32-mcore.c:442 +msgid "%B: Relocation %s (%d) is not currently supported.\n" +msgstr "%B: Sijoitusta %s (%d) ei tällä hetkellä tueta.\n" + +#: elf32-mcore.c:428 +msgid "%B: Unknown relocation type %d\n" +msgstr "%B: Tuntematon sijoitustyyppi %d\n" + +#: elf32-mep.c:654 +msgid "%B and %B are for different cores" +msgstr "%B ja %B ovat eri käyttöjärjestelmäytimille" + +#: elf32-mep.c:671 +msgid "%B and %B are for different configurations" +msgstr "%B ja %B ovat eri konfiguraatioille" + +#: elf32-mep.c:708 +#, c-format +msgid "private flags = 0x%lx" +msgstr "yksityiset liput = 0x%lx" + +#: elf32-microblaze.c:737 +#, c-format +msgid "%s: unknown relocation type %d" +msgstr "%s: tuntematon sijoitustyyppi %d" + +#: elf32-microblaze.c:862 elf32-microblaze.c:907 +#, c-format +msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +msgstr "%s: Kohteen (%s) sijoitus %s on väärässä lohkossa (%s)" + +#: elf32-microblaze.c:1150 elfxx-sparc.c:2957 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: luultavasti käännetty ilman -fPIC-argumenttia?" + +#: elf32-microblaze.c:2086 elflink.c:12444 +msgid "%B: bad relocation section name `%s'" +msgstr "%B: virheellinen sijoituslohkonimi ”%s”" + +#: elf32-mips.c:1045 elf64-mips.c:2083 elfn32-mips.c:1888 +msgid "literal relocation occurs for an external symbol" +msgstr "literaali sijoitus tapahtuu ulkoiselle symbolille" + +#: elf32-mips.c:1085 elf32-score.c:580 elf32-score7.c:480 elf64-mips.c:2126 +#: elfn32-mips.c:1929 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "32-bittinen yleisosoitinsuhteellinen sijoitus tapahtuu ulkoiselle symbolille" + +#: elf32-ppc.c:1731 +#, c-format +msgid "generic linker can't handle %s" +msgstr "geneerinen linkkeri ei voi käsitellä kohdetta %s" + +#: elf32-ppc.c:2211 +msgid "corrupt or empty %s section in %B" +msgstr "rikkinäinen tai tyhjä %s-lohko kohteessa %B" + +#: elf32-ppc.c:2218 +msgid "unable to read in %s section from %B" +msgstr "ei voi lukea %s-lohkoon kohteesta %B" + +#: elf32-ppc.c:2224 +msgid "corrupt %s section in %B" +msgstr "rikkinäinen %s-lohko kohteessa %B" + +#: elf32-ppc.c:2267 +msgid "warning: unable to set size of %s section in %B" +msgstr "varoitus: ei voi asettaa %s-lohkon kokoa kohteessa %B" + +#: elf32-ppc.c:2315 +msgid "failed to allocate space for new APUinfo section." +msgstr "ei onnistuttu varaamaan muistitilaa uudelle APUinfo-lohkolle." + +#: elf32-ppc.c:2334 +msgid "failed to compute new APUinfo section." +msgstr "ei onnistuttu laskemaan uutta APUinfo-lohkoa" + +#: elf32-ppc.c:2337 +msgid "failed to install new APUinfo section." +msgstr "ei onnistuttu asentamaan uutta APUinfo-lohkoa" + +#: elf32-ppc.c:3364 +msgid "%B: relocation %s cannot be used when making a shared object" +msgstr "%B: sijoitusta %s ei voi käyttää kun tehdään jaettua objektia" + +#. It does not make sense to have a procedure linkage +#. table entry for a local symbol. +#: elf32-ppc.c:3723 +msgid "%B(%A+0x%lx): %s reloc against local symbol" +msgstr "%B(%A+0x%lx): %s reloc-tietue paikallista symbolia varten" + +# Otaksun tässä että hard float tarkoittaa tässä muistipaikkaa (esim. rekisteriä), joka on varattu float-tyyppisille liukuluvuille +#: elf32-ppc.c:4067 elf32-ppc.c:4082 elfxx-mips.c:12324 elfxx-mips.c:12350 +#: elfxx-mips.c:12372 elfxx-mips.c:12398 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Varoitus: %B käyttää laitteistoliukulukua, %B käyttää ohjelmistoliukulukua" + +# Otaksun tässä että hard float tarkoittaa tässä muistipaikkaa (esim. rekisteriä), joka on varattu float-tyyppisille liukuluvuille +#: elf32-ppc.c:4070 elf32-ppc.c:4074 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Varoitus: %B käyttää kaksoistarkkuuden laitteistoliukulukua, %B käyttää yksittäistarkkuuden laitteistoliukulukua" + +# Otaksun tässä että hard float tarkoittaa tässä muistipaikkaa (esim. rekisteriä), joka on varattu float-tyyppisille liukuluvuille +#: elf32-ppc.c:4078 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Varoitus: %B käyttää ohjelmistoliukulukua, %B käyttää yksittäistarkkuuden laitteistoliukulukua" + +#: elf32-ppc.c:4085 elf32-ppc.c:4089 elfxx-mips.c:12304 elfxx-mips.c:12308 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Varoitus: %B käyttää tuntematonta liukuluku-ABI:a %d" + +#: elf32-ppc.c:4131 elf32-ppc.c:4135 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Varoitus: %B käyttää tuntematonta vektori-ABI:a %d" + +#: elf32-ppc.c:4139 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Varoitus: %B käyttää vektori-ABI:a ”%s”, %B käyttää ”%s”" + +#: elf32-ppc.c:4156 elf32-ppc.c:4159 +msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" +msgstr "Varoitus: %B käyttää r3/r4 pienille rakennepaluille, %B käyttää muistia" + +#: elf32-ppc.c:4162 elf32-ppc.c:4166 +msgid "Warning: %B uses unknown small structure return convention %d" +msgstr "Varoitus: %B käyttää tuntematonta pientä rakennepaluusopimusta %d" + +#: elf32-ppc.c:4220 +msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%B: käännetty ”-mrelocatable”-argumentilla ja linkitetty tavallisesti käännetyillä moduleilla" + +#: elf32-ppc.c:4228 +msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%B: käännetty tavallisesti ja linkitetty moduleilla, jotka on käännetty ”-mrelocatable”-argumentilla" + +#: elf32-ppc.c:4314 +msgid "Using bss-plt due to %B" +msgstr "Käytetään bss-plt-argumenttia %B:n vuoksi" + +#: elf32-ppc.c:7056 elf64-ppc.c:11364 +msgid "%B: unknown relocation type %d for symbol %s" +msgstr "%B: tuntematon sijoitustyyppi %d symbolille %s" + +#: elf32-ppc.c:7316 +msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" +msgstr "%B(%A+0x%lx): ei-nolla-yhteenlaskettava %s reloc-tietueessa symbolia ”%s” varten" + +#: elf32-ppc.c:7499 elf64-ppc.c:11854 +msgid "%B(%A+0x%lx): relocation %s for indirect function %s unsupported" +msgstr "%B(%A+0x%lx): sijoitusta %s epäsuoralle funktiolle %s ei tueta" + +#: elf32-ppc.c:7709 elf32-ppc.c:7736 elf32-ppc.c:7787 +msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%B: kohde (%s) sijoituksessa %s on väärässä tulostelohkossa (%s)" + +#: elf32-ppc.c:7847 +msgid "%B: relocation %s is not yet supported for symbol %s." +msgstr "%B: sijoitus %s ei ole vielä tuettu symbolille %s." + +#: elf32-ppc.c:7955 elf64-ppc.c:12110 +msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): %s reloc-tietuetta ”%s” varten: virhe %d" + +#: elf32-ppc.c:8423 +#, c-format +msgid "%s not defined in linker created %s" +msgstr "%s ei ole määritelty linkkerissä luodussa %s" + +#: elf32-s390.c:2207 elf64-s390.c:2179 +msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" +msgstr "%B(%A+0x%lx): virheellinen käsky TLS-sijoitukselle %s" + +#: elf32-score.c:1533 elf32-score7.c:1424 elfxx-mips.c:3299 +msgid "not enough GOT space for local GOT entries" +msgstr "ei tarpeeksi yleissiirrostaulutilaa paikallisille yleissiirrostaulutulokohdille" + +#: elf32-score.c:2765 +msgid "address not word align" +msgstr "osoite ei ole word-tasattu" + +#: elf32-score.c:2850 elf32-score7.c:2685 +#, c-format +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: Väärän muotoinen reloc-tietue havaittu lohkolle %s" + +#: elf32-score.c:2901 elf32-score7.c:2736 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: CALL15 reloc-tietue kohteessa 0x%lx ei ole yleissymbolia varten" + +#: elf32-score.c:4042 elf32-score7.c:3879 +#, c-format +msgid " [pic]" +msgstr " [sijaintiriippumaton koodi]" + +#: elf32-score.c:4046 elf32-score7.c:3883 +#, c-format +msgid " [fix dep]" +msgstr " [korjaussyvyys]" + +#: elf32-score.c:4088 elf32-score7.c:3925 +msgid "%B: warning: linking PIC files with non-PIC files" +msgstr "%B: varoitus: linkitetään sijaintiriippumattomia kooditiedostoja sijaintiriippuvaisten kooditiedostojen kanssa" + +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +msgstr "%B: ”IMPORT AS”-direktiivi kohteelle %s kätkee edellisen ”IMPORT AS”-direktiivin" + +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: Tunnistamaton ”.directive”-komento: %s" + +#: elf32-sh-symbian.c:503 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Ei onnistuttu lisäämään uudelleennimettyä symbolia %s" + +#: elf32-sh.c:533 +msgid "%B: 0x%lx: warning: bad R_SH_USES offset" +msgstr "%B: 0x%lx: varoitus: virheellinen R_SH_USES-siirrososoite" + +#: elf32-sh.c:545 +msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" +msgstr "%B: 0x%lx: varoitus: R_SH_USES osoittaa tunnistamattomaan käskyyn 0x%x" + +#: elf32-sh.c:562 +msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" +msgstr "%B: 0x%lx: varoitus: virheellinen R_SH_USES lataussiirrososoite" + +#: elf32-sh.c:577 +msgid "%B: 0x%lx: warning: could not find expected reloc" +msgstr "%B: 0x%lx: varoitus: ei voitu löytää odotettua reloc-tietuetta" + +#: elf32-sh.c:605 +msgid "%B: 0x%lx: warning: symbol in unexpected section" +msgstr "%B: 0x%lx: varoitus: symboli odottamattomassa lohkossa" + +#: elf32-sh.c:731 +msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" +msgstr "%B: 0x%lx: varoitus: ei voitu löytää odotettua ”COUNT reloc”-tietuetta" + +#: elf32-sh.c:740 +msgid "%B: 0x%lx: warning: bad count" +msgstr "%B: 0x%lx: varoitus: virheellinen lukumäärä" + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf32-sh.c:1144 elf32-sh.c:1514 +msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" +msgstr "%B: 0x%lx: vakava: reloc-tietue ylivuoto avartamisen aikana" + +#: elf32-sh.c:3270 elf64-sh64.c:1526 +msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" +msgstr "Odottamatonta STO_SH5_ISA32 paikallisessa symbolissa ei käsitellä" + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf32-sh.c:3507 +msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" +msgstr "%B: 0x%lx: vakava: tasaamaton haarautumiskohde avarrustuetulle sijoitukselle" + +#: elf32-sh.c:3540 elf32-sh.c:3555 +msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" +msgstr "%B: 0x%lx: vakava: tasaamaton %s sijoitus 0x%lx" + +#: elf32-sh.c:3569 +msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" +msgstr "%B: 0x%lx: vakava: R_SH_PSHA-sijoitus %d ei ole lukualueella -32..32" + +#: elf32-sh.c:3583 +msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" +msgstr "%B: 0x%lx: vakava: R_SH_PSHL-sijoitus %d ei ole lukualueella -32..32" + +#: elf32-sh.c:5256 elf64-alpha.c:4525 +msgid "%B: TLS local exec code cannot be linked into shared objects" +msgstr "%B: TLS-tyyppistä paikallista suoritettavaa koodia ei voida linkittää jaettuihin objekteihin" + +#: elf32-sh64.c:222 elf64-sh64.c:2333 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: käännetty 32-bittisenä objektina ja %s on 64-bittinen" + +#: elf32-sh64.c:225 elf64-sh64.c:2336 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: käännetty 64-bittisenä objektina ja %s on 32-bittinen" + +#: elf32-sh64.c:227 elf64-sh64.c:2338 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: objektikoko ei täsmää kohteen %s objektikoon kanssa" + +#: elf32-sh64.c:450 elf64-sh64.c:2852 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: kohdattiin datalabel-symboli syötteessä" + +# prepare-to-branch (PTB) instruction +#: elf32-sh64.c:527 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "PTB-täsmäämättömyys: SHmedia-osoite (bitti 0 == 1)" + +#: elf32-sh64.c:530 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "PTA-täsmäämättömyys: SHcompact-osoite (bitti 0 == 0)" + +#: elf32-sh64.c:548 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: GAS-virhe: odottamaton PTB-käsky R_SH_PT_16-tyypillä" + +#: elf32-sh64.c:597 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: virhe: tasaamaton sijoitustyyppi %d siirroksessa %08x reloc-tietue %p\n" + +#: elf32-sh64.c:673 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "%s: ei voitu kirjoittaa lisättyjä ”.cranges”-tulokohtia kokonaisuudessaan" + +#: elf32-sh64.c:733 +#, c-format +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: ei voitu kirjoittaa lajiteltuja ”.cranges”-tulokohtia kokonaisuudessaan" + +#: elf32-sparc.c:89 +msgid "%B: compiled for a 64 bit system and target is 32 bit" +msgstr "%B: käännetty 64-bittiselle järjestelmälle ja kohde on 32-bittinen" + +#: elf32-sparc.c:102 +msgid "%B: linking little endian files with big endian files" +msgstr "%B: linkitetty ”little endian”-tiedostoja ”big endian”-tiedostojen kanssa" + +#: elf32-spu.c:723 +msgid "%X%P: overlay section %A does not start on a cache line.\n" +msgstr "%X%P: päällyslohko %A ei ala välimuistissa olevalta riviltä.\n" + +#: elf32-spu.c:731 +msgid "%X%P: overlay section %A is larger than a cache line.\n" +msgstr "%X%P: päällyslohko %A on laajempi kuin välimuistissa oleva rivi.\n" + +#: elf32-spu.c:751 +msgid "%X%P: overlay section %A is not in cache area.\n" +msgstr "%X%P: päällyslohko %A ei ole välimuistialueella.\n" + +#: elf32-spu.c:791 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "%X%P: päällyslohkot %A ja %A eivät ala samasta osoitteesta.\n" + +#: elf32-spu.c:1015 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "varoitus: kutsu ei-funktiosymboliin %s määritelty kohteessa %B" + +#: elf32-spu.c:1365 +msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "%A:0x%v lrlive .brinfo (%u) eroaa analyysistä (%u)\n" + +#: elf32-spu.c:1884 +msgid "%B is not allowed to define %s" +msgstr "%B ei saa määritellä kohdetta %s" + +#: elf32-spu.c:1892 +#, c-format +msgid "you are not allowed to define %s in a script" +msgstr "et saa määritellä kohdetta %s skriptissä" + +#: elf32-spu.c:1926 +#, c-format +msgid "%s in overlay section" +msgstr "%s päällyslohkossa" + +#: elf32-spu.c:1955 +msgid "overlay stub relocation overflow" +msgstr "päällys-stub-sijoitusylivuoto" + +#: elf32-spu.c:1964 elf64-ppc.c:10441 +msgid "stubs don't match calculated size" +msgstr "stubit ei täsmää lasketun koon kanssa" + +#: elf32-spu.c:2546 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "varoitus: %s menee päällekkäin %s:n kanssa\n" + +#: elf32-spu.c:2562 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "varoitus: %s ylittää lohkokoon\n" + +#: elf32-spu.c:2593 +msgid "%A:0x%v not found in function table\n" +msgstr "%A:0x%v ei löytynyt funktiotaulusta\n" + +#: elf32-spu.c:2740 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" +msgstr "%B(%A+0x%v): kutsu ei-koodilohkoon %B(%A), analyysi ei ole täydellinen\n" + +#: elf32-spu.c:3297 +#, c-format +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "Pinoanalyysi ei ota huomioon kutsua kohteesta %s kohteeseen %s\n" + +#: elf32-spu.c:3988 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3989 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3994 +msgid " calls:\n" +msgstr " kutsut:\n" + +#: elf32-spu.c:4002 +#, c-format +msgid " %s%s %s\n" +msgstr " %s%s %s\n" + +#: elf32-spu.c:4304 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "%s kaksoiskappale kohteessa %s\n" + +#: elf32-spu.c:4308 +#, c-format +msgid "%s duplicated\n" +msgstr "%s on tehty kahteen kertaan\n" + +#: elf32-spu.c:4315 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "ei tukea objektitiedostojen kaksoiskappaleille automaattisessa päällysskriptissä\n" + +#: elf32-spu.c:4356 +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "ei-päällyksen koko 0x%v plus päällyksen maksimikoko 0x%v ylittävät paikallisen varaston\n" + +#: elf32-spu.c:4512 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "%B:%A%s ylittää päällyskoon\n" + +#: elf32-spu.c:4669 +msgid "Stack size for call graph root nodes.\n" +msgstr "Pinokoko kutsugraafijuurinodeille.\n" + +# Wikipedia: A tail call is a subroutine call just before the end of a subroutine. +#: elf32-spu.c:4670 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Pinokoko funktioille. Sivuhuomautukset: ”*” maksimipino, ”t” alikutsu\n" + +#: elf32-spu.c:4680 +msgid "Maximum stack required is 0x%v\n" +msgstr "Vaadittu maksimipino on 0x%v\n" + +#: elf32-spu.c:4771 +msgid "fatal error while creating .fixup" +msgstr "vakava virhe kun luodaan .fixup" + +#: elf32-spu.c:5009 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s+0x%lx): ratkaisematon %s sijoitus symbolia ”%s” varten" + +# small data region on sama kuin .scommon data region +#: elf32-v850.c:163 +#, c-format +msgid "Variable `%s' cannot occupy in multiple small data regions" +msgstr "Muuttuja ”%s” ei voi sijaita useissa ”small”-data-alueissa" + +# small on .scommon, zero on .zcommon ja tiny on .tcommon +#: elf32-v850.c:166 +#, c-format +msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "Muuttuja ”%s” voi olla vain yhdessä ”small”-, ”zero”- ja ”tiny”-data-alueista" + +#: elf32-v850.c:169 +#, c-format +msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "Muuttuja ”%s” ei voi olla sekä ”small”- että ”zero”-data-alueissa samanaikaisesti" + +#: elf32-v850.c:172 +#, c-format +msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "Muuttuja ”%s” ei voi olla sekä ”small”- että ”tiny”-data-alueissa samanaikaisesti" + +#: elf32-v850.c:175 +#, c-format +msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "Muuttuja ”%s” ei voi olla sekä ”zero”- että ”tiny”-data-alueissa samanaikaisesti" + +#: elf32-v850.c:478 +#, c-format +msgid "FAILED to find previous HI16 reloc\n" +msgstr "EI ONNISTUTTU löytämään edellistä HI16 reloc-tietuetta\n" + +#: elf32-v850.c:1713 +msgid "could not locate special linker symbol __gp" +msgstr "ei voitu paikallistaa erityistä linkkerisymbolia ”__gp”" + +#: elf32-v850.c:1717 +msgid "could not locate special linker symbol __ep" +msgstr "ei voitu paikallistaa erityistä linkkerisymbolia ”__ep”" + +#: elf32-v850.c:1721 +msgid "could not locate special linker symbol __ctbp" +msgstr "ei voitu paikallistaa erityistä linkkerisymbolia ”__ctbp”" + +#: elf32-v850.c:1871 +msgid "%B: Architecture mismatch with previous modules" +msgstr "%B: Arkkitehtuuri ei täsmännyt edellisten modulien kanssa" + +#: elf32-v850.c:1890 +#, c-format +msgid "private flags = %lx: " +msgstr "yksityiset liput = %lx: " + +#: elf32-v850.c:1895 +#, c-format +msgid "v850 architecture" +msgstr "v850-arkkitehtuuri" + +#: elf32-v850.c:1896 +#, c-format +msgid "v850e architecture" +msgstr "v850e-arkkitehtuuri" + +#: elf32-v850.c:1897 +#, c-format +msgid "v850e1 architecture" +msgstr "v850e1-arkkitehtuuri" + +#: elf32-vax.c:543 +#, c-format +msgid " [nonpic]" +msgstr " [sijaintiriippuvaisen koodin lippu]" + +#: elf32-vax.c:546 +#, c-format +msgid " [d-float]" +msgstr " [d-float-liukulukulippu]" + +#: elf32-vax.c:549 +#, c-format +msgid " [g-float]" +msgstr " [g-float-liukulukulippu]" + +#: elf32-vax.c:666 +#, c-format +msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" +msgstr "%s: varoitus: Yleissiirrostaulun %ld-yhteenlaskettava kohteelle ”%s” ei täsmää edellisen yleissiirrostaulun %ld-yhteenlaskettavan kanssa" + +#: elf32-vax.c:1608 +#, c-format +msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" +msgstr "%s: varoitus: %d:n PLT-yhteenlaskettavaa kohteelle ”%s” lohkosta %s ei oteta huomioon" + +#: elf32-vax.c:1735 +#, c-format +msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgstr "%s: varoitus: %s sijoitus symbolia ”%s” varten %s-lohkosta" + +#: elf32-vax.c:1741 +#, c-format +msgid "%s: warning: %s relocation to 0x%x from %s section" +msgstr "%s: varoitus: %s sijoitus kohteeseen 0x%x ”%s”-lohkosta" + +#: elf32-xstormy16.c:451 elf32-ia64.c:2791 elf64-ia64.c:2791 +msgid "non-zero addend in @fptr reloc" +msgstr "ei-nolla-yhteenlaskettava ”@fptr reloc”-tietueessa" + +#: elf32-xtensa.c:912 +msgid "%B(%A): invalid property table" +msgstr "%B(%A): virheellinen ominaisuustaulu" + +#: elf32-xtensa.c:2740 +msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" +msgstr "%B(%A+0x%lx): sijoitussiirrososoite lukualueen (koko=0x%x) ulkopuolella" + +#: elf32-xtensa.c:2819 elf32-xtensa.c:2940 +msgid "dynamic relocation in read-only section" +msgstr "dynaaminen sijoitus kirjoitussuojatussa lohkossa" + +#: elf32-xtensa.c:2916 +msgid "TLS relocation invalid without dynamic sections" +msgstr "TLS-siirros virheellinen ilman dynaamisia lohkoja" + +#: elf32-xtensa.c:3133 +msgid "internal inconsistency in size of .got.loc section" +msgstr "sisäinen epäjohdonmukaisuus ”.got.loc”-alilohkokoossa" + +#: elf32-xtensa.c:3443 +msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" +msgstr "%B: yhteensopimaton konetyyppi. Tuloste on 0x%x. Syöte on 0x%x" + +#: elf32-xtensa.c:4672 elf32-xtensa.c:4680 +msgid "Attempt to convert L32R/CALLX to CALL failed" +msgstr "Yritys muuttaa ”L32R/CALLX”-kutsu ”CALL”-kutsuksi ei onnistunut" + +#: elf32-xtensa.c:6290 elf32-xtensa.c:6366 elf32-xtensa.c:7486 +msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" +msgstr "%B(%A+0x%lx): ei voitu avata käskyä; mahdollinen konfiguraatiotäsmäämättömyys" + +#: elf32-xtensa.c:7226 +msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" +msgstr "%B(%A+0x%lx): ei voitu avata käskyä XTENSA_ASM_SIMPLIFY-sijoitukselle; mahdollinen konfiguraatiotäsmäämättömyys" + +#: elf32-xtensa.c:8987 +msgid "invalid relocation address" +msgstr "virheellinen sijoitusosoite" + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf32-xtensa.c:9036 +msgid "overflow after relaxation" +msgstr "ylivuoto avartamisen jälkeen" + +#: elf32-xtensa.c:10167 +msgid "%B(%A+0x%lx): unexpected fix for %s relocation" +msgstr "%B(%A+0x%lx): odottamaton korjaus %s-sijoitukselle" + +#: elf64-alpha.c:452 +msgid "GPDISP relocation did not find ldah and lda instructions" +msgstr "GPDISP-sijoitus ei löytänyt ”ldah”- ja ”lda”-käskyjä" + +#: elf64-alpha.c:2389 +msgid "%B: .got subsegment exceeds 64K (size %d)" +msgstr "%B: ”.got”-alisegmentti ylittää 64kilotavun rajan (koko %d)" + +#: elf64-alpha.c:4269 elf64-alpha.c:4281 +msgid "%B: gp-relative relocation against dynamic symbol %s" +msgstr "%B: yleisosoitinsuhteellinen sijoitus dynaamista symbolia %s varten" + +#: elf64-alpha.c:4307 elf64-alpha.c:4442 +msgid "%B: pc-relative relocation against dynamic symbol %s" +msgstr "%B: ohjelmalaskurisuhteellinen sijoitus dynaamista symbolia %s varten" + +#: elf64-alpha.c:4335 +msgid "%B: change in gp: BRSGP %s" +msgstr "%B: vaihto yleisosoittimessa: BRSGP %s" + +#: elf64-alpha.c:4360 +msgid "" +msgstr "" + +#: elf64-alpha.c:4365 +msgid "%B: !samegp reloc against symbol without .prologue: %s" +msgstr "%B: ”!samegp reloc”-tietue symbolia varten ilman ”.prologue”-lohkoa: %s" + +#: elf64-alpha.c:4417 +msgid "%B: unhandled dynamic relocation against %s" +msgstr "%B: käsittelemätön dynaaminen sijoitus %s:ta varten" + +#: elf64-alpha.c:4449 +msgid "%B: pc-relative relocation against undefined weak symbol %s" +msgstr "%B: ohjelmalaskurisuhteellinen sijoitus määrittelemätöntä heikkoa symbolia %s varten" + +#: elf64-alpha.c:4509 +msgid "%B: dtp-relative relocation against dynamic symbol %s" +msgstr "%B: dtp-suhteellinen sijoitus dynaamista symbolia %s varten" + +#: elf64-alpha.c:4532 +msgid "%B: tp-relative relocation against dynamic symbol %s" +msgstr "%B: tp-suhteellinen sijoitus dynaamista symbolia %s varten" + +#: elf64-hppa.c:2091 +#, c-format +msgid "stub entry for %s cannot load .plt, dp offset = %ld" +msgstr "stub-tulokohta kohteelle %s ei voi ladata ”.plt”, dp-siirrososoite = %ld" + +#: elf64-hppa.c:3273 +msgid "%B(%A+0x%lx): cannot reach %s" +msgstr "%B(%A+0x%lx): kohdetta %s ei voi tavoittaa" + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf64-mmix.c:1177 +#, c-format +msgid "" +"%s: Internal inconsistency error for value for\n" +" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n" +msgstr "" +"%s: Sisäinen yhteensopimattomuusvirhe linkkerin varaamalle\n" +" yleisrekisteriarvolle: linkitetty: 0x%lx%08lx != avarrettu: 0x%lx%08lx\n" + +#: elf64-mmix.c:1618 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" +msgstr "%s: ”base-plus-offset”-sijoitus rekisterisymbolia varten: (tuntematon) kohteessa %s" + +#: elf64-mmix.c:1623 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: %s in %s" +msgstr "%s: ”base-plus-offset”-sijoitus rekisterisymbolia varten: %s kohteessa %s" + +#: elf64-mmix.c:1667 +#, c-format +msgid "%s: register relocation against non-register symbol: (unknown) in %s" +msgstr "%s: rekisterisijoitus ei-rekisterisymbolia varten: (tuntematon) kohteessa %s" + +#: elf64-mmix.c:1672 +#, c-format +msgid "%s: register relocation against non-register symbol: %s in %s" +msgstr "%s: rekisterisijoitus ei-rekisterisymbolia varten: %s kohteessa %s" + +#: elf64-mmix.c:1709 +#, c-format +msgid "%s: directive LOCAL valid only with a register or absolute value" +msgstr "%s: direktiivi LOCAL on oikea vain rekisterissä tai absoluuttiarvona" + +#: elf64-mmix.c:1737 +#, c-format +msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." +msgstr "%s: LOCAL-direktiivi: Rekisteri $%ld ei ole paikallinen rekisteri. Ensimmäinen yleisrekisteri on $%ld." + +#: elf64-mmix.c:2201 +#, c-format +msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" +msgstr "%s: Virhe: useita ”%s”-määrittelyjä; %s-alku on asetettu aiemmin linkitetyssä tiedostossa\n" + +#: elf64-mmix.c:2259 +msgid "Register section has contents\n" +msgstr "Rekisterilohkossa on sisältö\n" + +#: elf64-mmix.c:2451 +#, c-format +msgid "" +"Internal inconsistency: remaining %u != max %u.\n" +" Please report this bug." +msgstr "" +"Sisäinen yhteensopimattomuus: jäljelle jäävä %u != maksimi %u.\n" +" Lähetä raportit ohjelmistovioista (englanniksi) osoitteeseen http://sourceware.org/bugzilla/." + +#: elf64-ppc.c:2691 libbfd.c:978 +msgid "%B: compiled for a big endian system and target is little endian" +msgstr "%B: käännetty ”big endian”-järjestelmälle ja kohde on ”little endian”" + +#: elf64-ppc.c:2694 libbfd.c:980 +msgid "%B: compiled for a little endian system and target is big endian" +msgstr "%B: käännetty ”little endian”-järjestelmälle ja kohde on ”big endian”" + +#: elf64-ppc.c:6338 +#, c-format +msgid "copy reloc against `%s' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc" +msgstr "kopio-reloc-tietue ”%s”:ta varten vaatii laiskan plt-linkityksen; vältä asettamasta LD_BIND_NOW=1 tai päivitä gcc" + +#: elf64-ppc.c:6767 +msgid "dynreloc miscount for %B, section %A" +msgstr "dynreloc-väärinlaskenta kohteelle %B, lohko %A" + +#: elf64-ppc.c:6851 +msgid "%B: .opd is not a regular array of opd entries" +msgstr "%B: ”.opd” ei ole säännönmukainen opd-tulokohtien taulukko" + +#: elf64-ppc.c:6860 +msgid "%B: unexpected reloc type %u in .opd section" +msgstr "%B: odottamaton reloc-tyyppi %u ”.opd”-lohkossa" + +#: elf64-ppc.c:6881 +msgid "%B: undefined sym `%s' in .opd section" +msgstr "%B: määrittelemätön symboli ”%s” ”.opd”-lohkossa" + +#: elf64-ppc.c:7640 elf64-ppc.c:8017 +#, c-format +msgid "%s defined in removed toc entry" +msgstr "%s määritelty poistetussa ”sisällysluettelo”-tulokohdassa" + +#: elf64-ppc.c:8910 +#, c-format +msgid "long branch stub `%s' offset overflow" +msgstr "pitkä haarautumis-stub ”%s” siirrososoitteen ylivuoto" + +#: elf64-ppc.c:8969 +#, c-format +msgid "can't find branch stub `%s'" +msgstr "ei löydy haarautumis-stub-kohdetta ”%s”" + +#: elf64-ppc.c:9031 elf64-ppc.c:9169 +#, c-format +msgid "linkage table error against `%s'" +msgstr "linkitystauluvirhe ”%s”:ta varten" + +#: elf64-ppc.c:9326 +#, c-format +msgid "can't build branch stub `%s'" +msgstr "ei voi muodostaa haaroitus-stub-kohdetta ”%s”" + +#: elf64-ppc.c:9799 +msgid "%B section %A exceeds stub group size" +msgstr "%B lohko %A ylittää stub-ryhmäkoon" + +#: elf64-ppc.c:10453 +#, c-format +msgid "" +"linker stubs in %u group%s\n" +" branch %lu\n" +" toc adjust %lu\n" +" long branch %lu\n" +" long toc adj %lu\n" +" plt call %lu" +msgstr "" +"linkkeristubit %u-ryhmä%s:ssä\n" +" haarautuminen %lu\n" +" sisältöluettelosäätö %lu\n" +" pitkä haarautuminen %lu\n" +" pitkä sisältöluettelosäätö %lu\n" +" plt-kutsu %lu" + +#: elf64-ppc.c:11252 +msgid "%B(%A+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc" +msgstr "%B(%A+0x%lx): automaattisia useita sisältöluettelotauluja ei ole tuettu crt-tiedostoissasi; käännä uudelleen ”-mminimal-toc”-argumentilla tai päivitä gcc" + +#: elf64-ppc.c:11260 +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 "%B(%A+0x%lx): sisarruskutsuoptimointi kohteeseen ”%s” ei salli automaattisia useita sisällysluettelotauluja; käännä uudelleen ”-mminimal-toc”-argumentilla tai ”-fno-optimize-sibling-calls”-argumentilla, tai tee kohteesta ”%s” ulkoinen" + +#: elf64-ppc.c:11961 +msgid "%B: relocation %s is not supported for symbol %s." +msgstr "%B: sijoitus %s ei ole tuettu symbolille %s." + +#: elf64-ppc.c:12044 +msgid "%B: error: relocation %s not a multiple of %d" +msgstr "%B: virhe: sijoitus %s ei ole %d:n kerrannainen" + +#: elf64-sh64.c:1701 +#, c-format +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +msgstr "%s: virhe: tasaamaton sijoitustyyppi %d kohteessa %08x reloc-tietue %08x\n" + +#: elf64-sparc.c:439 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%B: Vain rekisterit %%g[2367] voidaan esitellä käyttäen STT_REGISTER-symbolia" + +#: elf64-sparc.c:459 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" +msgstr "Rekisteriä %%g%d käytetty yhteensopimattomasti: %s kohteessa %B, aikaisemmin %s kohteessa %B" + +#: elf64-sparc.c:482 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" +msgstr "Symbolissa ”%s” on eri tyyppejä: REGISTER kohteessa %B, aiemmin %s kohteessa %B" + +#: elf64-sparc.c:527 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" +msgstr "Symbolissa ”%s” on eri tyyppejä: %s kohteessa %B, aiemmin REGISTER kohteessa %B" + +#: elf64-sparc.c:679 +msgid "%B: linking UltraSPARC specific with HAL specific code" +msgstr "%B: linkitetään UltraSPARC-kohtainen HAL-kohtaisella koodilla" + +#: elf64-x86-64.c:1337 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B: ”%s” kutsuttu sekä normaalina että säikeisenä paikallissymbolina" + +#: elf64-x86-64.c:2701 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" +msgstr "%B: sijoituksella %s kohteen STT_GNU_IFUNC-symbolia ”%s” varten on ei-nolla-yhteenlaskettava: %d" + +#: elf64-x86-64.c:2980 +msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" +msgstr "%B: sijoitusta R_X86_64_GOTOFF64 suojattua funktiota ”%s” varten ei voida käyttää kun tehdään jaettua objektia" + +#: elf64-x86-64.c:3091 +msgid "; recompile with -fPIC" +msgstr "; käännetty uudelleen -fPIC-parametrillä" + +#: elf64-x86-64.c:3096 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: sijoitusta %s kohteeseen %s ”%s” ei voi käyttää kun tehdään jaettua objektia %s" + +#: elf64-x86-64.c:3098 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: sijoitusta %s kohteeseen %s ”%s” ei voi käyttää kun tehdään jaettua objektia %s" + +#: elfcode.h:795 +#, c-format +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "varoitus: %s:ssa on rikkinäinen merkkijonotauluindeksi - ei oteta huomioon" + +#: elfcode.h:1201 +#, c-format +msgid "%s: version count (%ld) does not match symbol count (%ld)" +msgstr "%s: versiolukumäärä (%ld) ei täsmää symbolilukumäärän (%ld) kanssa" + +#: elfcode.h:1441 +#, c-format +msgid "%s(%s): relocation %d has invalid symbol index %ld" +msgstr "%s(%s): sijoituksessa %d on virheellinen symboli-indeksi %ld" + +#: elfcore.h:251 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Varoitus: %B typistettiin: odotettu käyttöjärjestelmäydintiedoston koko >= %lu, löytyi: %lu." + +#: elflink.c:1113 +msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS-määrittely kohteessa %B lohko %A ei täsmää ei-TLS-määrittelyn kanssa kohteessa %B lohko %A" + +#: elflink.c:1117 +msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" +msgstr "%s: TLS-viite kohteessa %B ei täsmää ei-TLS-viitteen kanssa kohteessa %B" + +#: elflink.c:1121 +msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" +msgstr "%s: TLS-määrittely kohteessa %B lohko %A ei täsmää ei-TLS-viitteen kanssa kohteessa %B" + +#: elflink.c:1125 +msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS-viite kohteessa %B ei täsmää ei-TLS-määrittelyn kanssa kohteessa %B lohko %A" + +#: elflink.c:1764 +msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" +msgstr "%B: epäsuoran versioidun symbolin ”%s” odottamaton uudelleenmäärittely" + +#: elflink.c:2077 +msgid "%B: version node not found for symbol %s" +msgstr "%B: versiosolmua ei löydetty symbolille %s" + +#: elflink.c:2167 +msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" +msgstr "%B: virheellinen reloc-tietuesymboli-indeksi (0x%lx >= 0x%lx) siirrososoitteelle 0x%lx lohkossa ”%A”" + +#: elflink.c:2178 +msgid "%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table" +msgstr "%B: ei-nolla symboli-indeksi (0x%lx) siirrososoitetta 0x%lx varten lohkossa ”%A” kun objektitiedostolla ei ole symbolitaulua" + +#: elflink.c:2375 +msgid "%B: relocation size mismatch in %B section %A" +msgstr "%B: sijoituskokotäsmäämättömyys %B:n tulolohkossa %A" + +#: elflink.c:2678 +#, c-format +msgid "warning: type and size of dynamic symbol `%s' are not defined" +msgstr "varoitus: dynaamisen symbolin ”%s” tyyppi ja koko ei ole määritelty" + +# USA:ssa alternate-sanaa käytetään yleisesti, kun tarkoitetaan alternative. +#: elflink.c:3424 +msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" +msgstr "%P: vaihtoehtoinen ELF-konekoodi löydetty (%d) kohteessa %B, otetaan %d\n" + +#: elflink.c:4032 +msgid "%B: %s: invalid version %u (max %d)" +msgstr "%B: %s: virheellinen versio %u (maksimi %d)" + +#: elflink.c:4068 +msgid "%B: %s: invalid needed version %d" +msgstr "%B: %s: virheellinen tarvittu versio %d" + +#: elflink.c:4253 +msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" +msgstr "Varoitus: tasaus %u yhteissymbolissa ”%s” kohteessa %B on suurempi kuin tasaus (%u) sen lohkossa %A" + +#: elflink.c:4259 +msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" +msgstr "Varoitus: tasaus %u symbolissa ”%s” kohteessa %B on pienempi kuin %u kohteessa %B" + +#: elflink.c:4274 +msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" +msgstr "Varoitus: symbolin ”%s” koko vaihtui koosta %lu kohteessa %B kokoon %lu kohteessa %B" + +#: elflink.c:4438 +#, c-format +msgid "%s: invalid DSO for symbol `%s' definition" +msgstr "%s: virheellinen DSO symbolin ”%s” määrittelylle" + +#: elflink.c:5688 +#, c-format +msgid "%s: undefined version: %s" +msgstr "%s: määrittelemätön versio: %s" + +#: elflink.c:5756 +msgid "%B: .preinit_array section is not allowed in DSO" +msgstr "%B: ”.preinit_array”-lohkoa ei sallita kohteessa DSO" + +#: elflink.c:7484 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "määrittelemätön %s-viite kompleksisymbolissa: %s" + +#: elflink.c:7638 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "tuntematon operaattori ”%c” kompleksisymbolissa" + +#: elflink.c:7976 elflink.c:7993 elflink.c:8030 elflink.c:8047 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: Ei voi lajitella relocs-tietueita - niitä on useampia kuin yhtä kokoa" + +#: elflink.c:8007 elflink.c:8061 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: Ei voi lajitella relocs-tietueita - niiden koko on tuntematon" + +#: elflink.c:8112 +msgid "Not enough memory to sort relocations" +msgstr "Ei tarpeeksi muistia sijoitusten lajittelemiseen" + +#: elflink.c:8304 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: Liian monia lohkoja: %d (>= %d)" + +#: elflink.c:8540 +msgid "%B: %s symbol `%s' in %B is referenced by DSO" +msgstr "%B: %s symboli ”%s” kohteessa %B on DSO:n viitteenä" + +#: elflink.c:8625 +msgid "%B: could not find output section %A for input section %A" +msgstr "%B: ei löytynyt tulostelohkoa %A syötelohkolle %A" + +#: elflink.c:8745 +msgid "%B: %s symbol `%s' isn't defined" +msgstr "%B: %s symbolia ”%s” ei ole määritelty" + +#: elflink.c:9301 +msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" +msgstr "virhe: %B sisältää reloc-tietueen (0x%s) lohkolle %A, joka viittaa puuttuvaan yleissymboliin" + +#: elflink.c:9366 +msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" +msgstr "%X”%s” viitattu lohkossa ”%A” kohteessa %B: määritelty hylätyssä lohkossa ”%A” / %B\n" + +#: elflink.c:9991 +msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" +msgstr "%A:ssa on sekä järjestettyjä [”%A” kohteessa %B] että järjestämättömiä [”%A” kohteessa %B] lohkoja" + +#: elflink.c:9996 +#, c-format +msgid "%A has both ordered and unordered sections" +msgstr "%A:ssa on sekä järjestettyjä että järjestämättömiä lohkoja" + +#: elflink.c:10872 elflink.c:10916 +msgid "%B: could not find output section %s" +msgstr "%B: ei löytynyt tulostelohkoa %s" + +#: elflink.c:10877 +#, c-format +msgid "warning: %s section has zero size" +msgstr "varoitus: %s-lohkossa on nollakoko" + +#: elflink.c:10982 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: varoitus: luodaan DT_TEXTREL-tunniste jaettussa objektissa.\n" + +#: elflink.c:11165 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: ei voi lukea symboleja: %E\n" + +#: elflink.c:11483 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Poistetaan käyttämätön lohko ”%s” tiedostossa ”%B”" + +#: elflink.c:11695 +msgid "Warning: gc-sections option ignored" +msgstr "Varoitus: ”gc-sections”-valitsinta ei oteta huomioon" + +#: elflink.c:12242 +msgid "%B: ignoring duplicate section `%A'" +msgstr "%B: ei oteta huomioon lohkon ”%A” kaksoiskappaletta" + +#: elflink.c:12249 elflink.c:12256 +msgid "%B: duplicate section `%A' has different size" +msgstr "%B: lohkon ”%A” kaksoiskappaleessa on eri koko" + +#: elflink.c:12264 elflink.c:12269 +msgid "%B: warning: could not read contents of section `%A'" +msgstr "%B: varoitus: ei voitu lukea lohkon ”%A” sisältöä" + +#: elflink.c:12273 +msgid "%B: warning: duplicate section `%A' has different contents" +msgstr "%B: varoitus: lohkon ”%A” kaksoiskappaleella on erilainen sisältö" + +#: elflink.c:12374 linker.c:3098 +msgid "%F%P: already_linked_table: %E\n" +msgstr "%F%P: already_linked_table: %E\n" + +#: elfxx-mips.c:1222 +msgid "static procedure (no name)" +msgstr "staattinen proseduuri (ei nimeä)" + +#: elfxx-mips.c:5588 +msgid "%B: %A+0x%lx: jump to stub routine which is not jal" +msgstr "%B: %A+0x%lx: hyppää stub-rutiiniin, joka ei ole jal-käsky" + +#: elfxx-mips.c:6235 elfxx-mips.c:6458 +msgid "%B: Warning: bad `%s' option size %u smaller than its header" +msgstr "%B: Varoitus: virheellinen ”%s”-valitsinkoko %u pienempi kuin sen otsake" + +#: elfxx-mips.c:7205 elfxx-mips.c:7330 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: varoitus: ei voi määritellä stub-lohkon ”%s” kohdefunktiota" + +#: elfxx-mips.c:7459 +msgid "%B: Malformed reloc detected for section %s" +msgstr "%B: Muodoltaan virheellinen reloc-tietue havaittu lohkossa %s" + +#: elfxx-mips.c:7499 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: Yleissiirrostaulu-reloc-tietue siirroksessa 0x%lx ei ole odotettu suoritettavissa tiedostoissa" + +#: elfxx-mips.c:7602 +msgid "%B: CALL16 reloc at 0x%lx not against global symbol" +msgstr "%B: ”CALL16 reloc”-tietue siirroksessa 0x%lx ei ole yleissymbolia varten" + +#: elfxx-mips.c:8280 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "ei-dynaaminen sijoitus viittaa dynaamiseen symboliin %s" + +#: elfxx-mips.c:8985 +msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" +msgstr "%B: Ei löydy täsmäävää ”LO16 reloc”-tietuetta tulolohkoa ”%s” varten symbolinimelle %s kohteessa 0x%lx lohkossa ”%A”" + +#: elfxx-mips.c:9124 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "”small”-datalohko ylittää 64 kilotavua; alenna ”small”-datalohkon kokorajaa (katso valitsin -G)" + +#: elfxx-mips.c:11940 +#, c-format +msgid "%s: illegal section name `%s'" +msgstr "%s: virheellinen lohkonimi ”%s”" + +#: elfxx-mips.c:12318 elfxx-mips.c:12344 +msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" +msgstr "Varoitus: %B käyttää ”-msingle-float”-valitsinta, %B käyttää ”-mdouble-float”-valitsinta" + +#: elfxx-mips.c:12330 elfxx-mips.c:12386 +msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +msgstr "Varoitus: %B käyttää ”-msingle-float”-valitsinta, %B käyttää ”-mips32r2 -mfp64”-valitsimia" + +#: elfxx-mips.c:12356 elfxx-mips.c:12392 +msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +msgstr "Varoitus: %B käyttää ”-mdouble-float”-valitsinta, %B käyttää ”-mips32r2 -mfp64”-valitsimia" + +#: elfxx-mips.c:12434 +msgid "%B: endianness incompatible with that of the selected emulation" +msgstr "%B: tavujärjestys tyypiltään sopimaton valitun emuloinnin tavujärjestystyypin kanssa" + +#: elfxx-mips.c:12445 +msgid "%B: ABI is incompatible with that of the selected emulation" +msgstr "%B: ABI ei ole yhteensopiva valitun emuloinnin ABIn kanssa" + +#: elfxx-mips.c:12526 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: varoitus: linkitetään abi-kutsutiedostoja ei-abi-kutsutiedostoihin" + +#: elfxx-mips.c:12543 +msgid "%B: linking 32-bit code with 64-bit code" +msgstr "%B: linkitetään 32-bittinen koodi 64-bittisen koodin kanssa" + +#: elfxx-mips.c:12571 +msgid "%B: linking %s module with previous %s modules" +msgstr "%B: linkitetään %s-moduli edellisten %s-modulien kanssa" + +#: elfxx-mips.c:12594 +msgid "%B: ABI mismatch: linking %s module with previous %s modules" +msgstr "%B: ABI-täsmäämättömyys: linkitetään %s-moduli edellisten %s-modulien kanssa" + +#: elfxx-mips.c:12758 +#, c-format +msgid " [abi=O32]" +msgstr " [abi=O32]" + +#: elfxx-mips.c:12760 +#, c-format +msgid " [abi=O64]" +msgstr " [abi=O64]" + +#: elfxx-mips.c:12762 +#, c-format +msgid " [abi=EABI32]" +msgstr " [abi=EABI32]" + +#: elfxx-mips.c:12764 +#, c-format +msgid " [abi=EABI64]" +msgstr " [abi=EABI64]" + +#: elfxx-mips.c:12766 +#, c-format +msgid " [abi unknown]" +msgstr " [abi tuntematon]" + +#: elfxx-mips.c:12768 +#, c-format +msgid " [abi=N32]" +msgstr " [abi=N32]" + +#: elfxx-mips.c:12770 +#, c-format +msgid " [abi=64]" +msgstr " [abi=64]" + +#: elfxx-mips.c:12772 +#, c-format +msgid " [no abi set]" +msgstr " [ei abia asetettu]" + +#: elfxx-mips.c:12793 +#, c-format +msgid " [unknown ISA]" +msgstr " [tuntematon ISA]" + +#: elfxx-mips.c:12804 +#, c-format +msgid " [not 32bitmode]" +msgstr " [ei 32-bittitila]" + +#: elfxx-sparc.c:440 +#, c-format +msgid "invalid relocation type %d" +msgstr "virheellinen sijoitustyyppi %d" + +#: i386linux.c:455 m68klinux.c:459 sparclinux.c:453 +#, c-format +msgid "Output file requires shared library `%s'\n" +msgstr "Tulostetiedosto vaatii jaetun kirjaston ”%s”\n" + +#: i386linux.c:463 m68klinux.c:467 sparclinux.c:461 +#, c-format +msgid "Output file requires shared library `%s.so.%s'\n" +msgstr "Tulostetiedosto vaatii jaetun kirjaston ”%s.so.%s”\n" + +#: i386linux.c:652 i386linux.c:702 m68klinux.c:659 m68klinux.c:707 +#: sparclinux.c:651 sparclinux.c:701 +#, c-format +msgid "Symbol %s not defined for fixups\n" +msgstr "Symbolia %s ei ole määritelty korjauksia varten\n" + +#: i386linux.c:726 m68klinux.c:731 sparclinux.c:725 +msgid "Warning: fixup count mismatch\n" +msgstr "Varoitus: korjauslukumäärän täsmäämättömyys\n" + +#: ieee.c:159 +#, c-format +msgid "%s: string too long (%d chars, max 65535)" +msgstr "%s: merkkijono on liian pitkä (%d merkkiä, maksimi 65535)" + +#: ieee.c:286 +#, c-format +msgid "%s: unrecognized symbol `%s' flags 0x%x" +msgstr "%s: tunnistamaton symboli ”%s” liput 0x%x" + +#: ieee.c:788 +msgid "%B: unimplemented ATI record %u for symbol %u" +msgstr "%B: toteuttamaton ATI-tietue %u symbolille %u" + +#: ieee.c:812 +msgid "%B: unexpected ATN type %d in external part" +msgstr "%B: odottamaton ATN-tyyppi %d ulkoisessa osassa" + +#: ieee.c:834 +msgid "%B: unexpected type after ATN" +msgstr "%B: odottamaton tyyppi ATN:n jälkeen" + +#: ihex.c:230 +msgid "%B:%d: unexpected character `%s' in Intel Hex file" +msgstr "%B:%d: odottamaton merkki ”%s” Intel-heksatiedostossa" + +#: ihex.c:337 +msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" +msgstr "%B:%u: virheellinen tarkistussumma Intel-heksatiedostossa (odotettiin %u, löydettiin %u)" + +#: ihex.c:392 +msgid "%B:%u: bad extended address record length in Intel Hex file" +msgstr "%B:%u: virheellinen laajennettu osoitetietuepituus Intel-heksatiedostossa" + +#: ihex.c:409 +msgid "%B:%u: bad extended start address length in Intel Hex file" +msgstr "%B:%u: virheellinen laajennettu aloitusosoitepituus Intel-heksatiedostossa" + +#: ihex.c:426 +msgid "%B:%u: bad extended linear address record length in Intel Hex file" +msgstr "%B:%u: virheellinen laajennettu lineaariosoitetietuepituus Intel-heksatiedosto" + +#: ihex.c:443 +msgid "%B:%u: bad extended linear start address length in Intel Hex file" +msgstr "%B:%u: virheellinen laajennettu lineaarialkuosoitepituus Intel-heksatiedostossa" + +#: ihex.c:460 +msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" +msgstr "%B:%u: tunnistamaton ihex-tyyppi %u Intel-heksatiedostossa" + +#: ihex.c:579 +msgid "%B: internal error in ihex_read_section" +msgstr "%B: sisäinen virhe ”ihex_read_section”-lohkossa" + +#: ihex.c:613 +msgid "%B: bad section length in ihex_read_section" +msgstr "%B: virheellinen lohkopituus ”ihex_read_section”-lohkossa" + +#: ihex.c:825 +#, c-format +msgid "%s: address 0x%s out of range for Intel Hex file" +msgstr "%s: osoite 0x%s lukualueen ulkopuolella Intel-heksatiedostolle" + +#: libbfd.c:1008 +#, c-format +msgid "Deprecated %s called at %s line %d in %s\n" +msgstr "Käytöstä poistettu %s kutsuttiin tiedostossa %s rivillä %d funktiossa %s\n" + +#: libbfd.c:1011 +#, c-format +msgid "Deprecated %s called\n" +msgstr "Käytöstä poistettu %s kutsuttu\n" + +#: linker.c:1874 +msgid "%B: indirect symbol `%s' to `%s' is a loop" +msgstr "%B: epäsuora symboli ”%s” kohteeseen ”%s” on silmukka" + +#: linker.c:2740 +#, c-format +msgid "Attempt to do relocatable link with %s input and %s output" +msgstr "Yritettiin tehdä sijoitettava linkki %s-syötteellä ja %s-tulosteella" + +#: linker.c:3065 +msgid "%B: warning: ignoring duplicate section `%A'\n" +msgstr "%B: varoitus: ei oteta huomioon lohkon ”%A” kaksoiskappaletta\n" + +#: linker.c:3079 +msgid "%B: warning: duplicate section `%A' has different size\n" +msgstr "%B: varoitus: lohkon ”%A” kaksoiskappaleessa on eri koko\n" + +#: mach-o.c:3195 +#, c-format +msgid "Mach-O header:\n" +msgstr "Mach-O otsake:\n" + +#: mach-o.c:3196 +#, c-format +msgid " magic : %08lx\n" +msgstr " maaginen : %08lx\n" + +#: mach-o.c:3197 +#, c-format +msgid " cputype : %08lx (%s)\n" +msgstr " prosessorityyppi : %08lx (%s)\n" + +#: mach-o.c:3199 +#, c-format +msgid " cpusubtype: %08lx\n" +msgstr " prosessorialityyppi : %08lx\n" + +#: mach-o.c:3200 +#, c-format +msgid " filetype : %08lx (%s)\n" +msgstr " tiedostotyyppi : %08lx (%s)\n" + +#: mach-o.c:3203 +#, c-format +msgid " ncmds : %08lx\n" +msgstr " ncmds : %08lx\n" + +#: mach-o.c:3204 +#, c-format +msgid " sizeofcmds: %08lx\n" +msgstr " komentojenkoko : %08lx\n" + +#: mach-o.c:3205 +#, c-format +msgid " flags : %08lx (" +msgstr " liput : %08lx (" + +#: mach-o.c:3207 +#, c-format +msgid ")\n" +msgstr ")\n" + +#: mach-o.c:3208 +#, c-format +msgid " reserved : %08x\n" +msgstr " varattu : %08x\n" + +#: mach-o.c:3218 +#, c-format +msgid "Segments and Sections:\n" +msgstr "Segmentit ja lohkot:\n" + +#: mach-o.c:3219 +#, c-format +msgid " #: Segment name Section name Address\n" +msgstr " #: Segmenttinimi Lohkonnimi Osoite\n" + +#: merge.c:829 +#, c-format +msgid "%s: access beyond end of merged section (%ld)" +msgstr "%s: pääsy lomitetun lohkon (%ld) lopun yli" + +#: mmo.c:456 +#, c-format +msgid "%s: No core to allocate section name %s\n" +msgstr "%s: Ei käyttöjärjestelmäydintä lohkonimen %s varaamiseen\n" + +#: mmo.c:531 +#, c-format +msgid "%s: No core to allocate a symbol %d bytes long\n" +msgstr "%s: Ei käyttöjärjestelmäydintä symbolin varaamiseksi %d tavua pitkänä\n" + +#: mmo.c:1187 +#, c-format +msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" +msgstr "%s: virheellinen mmo-tiedosto: alustusarvo kohteelle $255 ei ole ”Main”\n" + +#: mmo.c:1332 +#, c-format +msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" +msgstr "%s: ei-tuettu leveämerkkisekvenssi 0x%02X 0x%02X symbolinimen jälkeen alkaen arvolla ”%s”\n" + +#: mmo.c:1566 +#, c-format +msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" +msgstr "%s: virheellinen mmo-tiedosto: ei-tuettu lopcode ”%d”\n" + +#: mmo.c:1576 +#, c-format +msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" +msgstr "%s: virheellinen mmo-tiedosto: odotettu YZ = 1 saatiin YZ = %d kohteelle lop_quote\n" + +#: mmo.c:1612 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" +msgstr "%s: virheellinen mmo-tiedosto: odotettiin z = 1 tai z = 2, saatiin z = %d kohteelle lop_loc\n" + +#: mmo.c:1658 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" +msgstr "%s: virheellinen mmo-tiedosto: odotettiin z = 1 tai z = 2, saatiin z = %d kohteelle lop_fixo\n" + +#: mmo.c:1697 +#, c-format +msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" +msgstr "%s: virheellinen mmo-tiedosto: odotettiin y = 0, saatiin y = %d kohteelle lop_fixrx\n" + +#: mmo.c:1706 +#, c-format +msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" +msgstr "%s: virheellinen mmo-tiedosto: odotettiin z = 16 tai z = 24, saatiin z = %d kohteelle lop_fixrx\n" + +#: mmo.c:1729 +#, c-format +msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" +msgstr "%s: virheellinen mmo-tiedosto: operandisanan etutavun on oltava 0 tai 1, saatiin %d kohteelle lop_fixrx\n" + +#: mmo.c:1752 +#, c-format +msgid "%s: cannot allocate file name for file number %d, %d bytes\n" +msgstr "%s: ei voi varata tiedostonimeä tiedostonumerolle %d, %d tavua\n" + +#: mmo.c:1772 +#, c-format +msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" +msgstr "%s: virheellinen mmo-tiedosto: tiedostonumero %d ”%s”, oli jo kirjoitettu arvona ”%s”\n" + +#: mmo.c:1785 +#, c-format +msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" +msgstr "%s: virheellinen mmo-tiedosto: tiedostonimi numerolle %d ei ole määritelty ennen käyttöä\n" + +#: mmo.c:1892 +#, c-format +msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" +msgstr "%s: virheellinen mmo-tiedosto: lop_stab:n kentät y ja z ovat nollasta poikkeavia, y: %d, z: %d\n" + +#: mmo.c:1928 +#, c-format +msgid "%s: invalid mmo file: lop_end not last item in file\n" +msgstr "%s: virheellinen mmo-tiedosto: lop_end ei ole viimeinen alkio tiedostossa\n" + +#: mmo.c:1941 +#, c-format +msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" +msgstr "%s: virheellinen mmo-tiedosto: lop_end:n YZ (%ld) ei ole sama kuin tetras-numero edeltävään kohteeseen lop_stab (%ld)\n" + +#: mmo.c:2651 +#, c-format +msgid "%s: invalid symbol table: duplicate symbol `%s'\n" +msgstr "%s: virheellinen symbolitaulu: symbolin ”%s” kaksoiskappale\n" + +#: mmo.c:2894 +#, c-format +msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" +msgstr "%s: Virheellinen symbolimäärittely: ”Main” asetettu kohteeseen %s pikemmin kuin aloitusosoitteeseen %s\n" + +#: mmo.c:2986 +#, c-format +msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" +msgstr "%s: varoitus: symbolitaulu liian laaja kohteelle mmo, laajempi kuin 65535 32-bittistä sanaa: %d. Vain ”Main” lähetetään.\n" + +#: mmo.c:3031 +#, c-format +msgid "%s: internal error, symbol table changed size from %d to %d words\n" +msgstr "%s: sisäinen virhe, symbolitaulu vaihtoi kokoa %d:sta sanasta %d sanaan\n" + +#: mmo.c:3083 +#, c-format +msgid "%s: internal error, internal register section %s had contents\n" +msgstr "%s: sisäinen virhe, sisäisessä rekisterilohkossa %s oli sisältöä\n" + +#: mmo.c:3134 +#, c-format +msgid "%s: no initialized registers; section length 0\n" +msgstr "%s: ei alustettuja rekistereitä; lohkopituus 0\n" + +#: mmo.c:3140 +#, c-format +msgid "%s: too many initialized registers; section length %ld\n" +msgstr "%s: liian monia alustettuja rekistereitä; lohkopituus %ld\n" + +#: mmo.c:3145 +#, c-format +msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" +msgstr "%s: virheellinen aloitusosoite alustetuille rekistereille pituudeltaan %ld: 0x%lx%08lx\n" + +#: oasys.c:881 +#, c-format +msgid "%s: can not represent section `%s' in oasys" +msgstr "%s: ei voi edustaa lohkoa ”%s” oasys-lohkossa" + +#: osf-core.c:139 +#, c-format +msgid "Unhandled OSF/1 core file section type %d\n" +msgstr "Käsittelemätön OSF/1-käyttöjärjestelmäydintiedoston lohkotyyppi %d\n" + +#: pe-mips.c:613 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "%B: ”ld -r” ei tuettu ”PE MIPS”-objekteilla\n" + +#. OK, at this point the following variables are set up: +#. 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:729 +msgid "%B: unimplemented %s\n" +msgstr "%B: toteuttamaton %s\n" + +#: pe-mips.c:755 +msgid "%B: jump too far away\n" +msgstr "%B: hyppy liian kauas\n" + +#: pe-mips.c:781 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: virheellinen pari/reflo refhi:n jälkeen\n" + +#: pei-x86_64.c:465 +#, c-format +msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" +msgstr "varoitus: ”.pdata”-lohkokoko (%ld) ei ole %d:n monikerta\n" + +#: pei-x86_64.c:469 peigen.c:1620 peigen.c:1799 pepigen.c:1620 pepigen.c:1799 +#: pex64igen.c:1620 pex64igen.c:1799 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"Funktiotaulu (tulkittu ”.pdata”-lohkosisältö)\n" + +#: pei-x86_64.c:471 +#, c-format +msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" +msgstr "vma:\t\t\tAlkuosoite\t Loppuosoite\t Unwind-tiedot\n" + +#. XXX code yet to be written. +#: peicode.h:752 +msgid "%B: Unhandled import type; %x" +msgstr "%B: Käsittelemätön tuontityyppi; %x" + +#: peicode.h:757 +msgid "%B: Unrecognised import type; %x" +msgstr "%B: Tunnistamaton tuontityyppi; %x" + +#: peicode.h:771 +msgid "%B: Unrecognised import name type; %x" +msgstr "%B: Tunnistamaton tuontinimityyppi; %x" + +#: peicode.h:1154 +msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" +msgstr "%B: Tunnistamaton konetyyppi (0x%x) ”Import Library Format”-arkistossa" + +#: peicode.h:1166 +msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" +msgstr "%B: Tunnistettu, mutta käsittelemätön konetyyppi (0x%x) ”Import Library Format”-arkistossa" + +#: peicode.h:1184 +msgid "%B: size field is zero in Import Library Format header" +msgstr "%B: kokokenttä on nolla ”Import Library Format”-otsakkeessa" + +#: peicode.h:1215 +msgid "%B: string not null terminated in ILF object file." +msgstr "%B: merkkijonoa ei ole päätetty nollaan ILF-objektitiedostossa." + +#: ppcboot.c:414 +#, c-format +msgid "" +"\n" +"ppcboot header:\n" +msgstr "" +"\n" +"ppcboot-otsake:\n" + +#: ppcboot.c:415 +#, c-format +msgid "Entry offset = 0x%.8lx (%ld)\n" +msgstr "Tulokohtasiirrososoite = 0x%.8lx (%ld)\n" + +#: ppcboot.c:417 +#, c-format +msgid "Length = 0x%.8lx (%ld)\n" +msgstr "Pituus = 0x%.8lx (%ld)\n" + +#: ppcboot.c:421 +#, c-format +msgid "Flag field = 0x%.2x\n" +msgstr "Lippukenttä = 0x%.2x\n" + +#: ppcboot.c:427 +#, c-format +msgid "Partition name = \"%s\"\n" +msgstr "Osionimi = ”%s”\n" + +#: ppcboot.c:446 +#, c-format +msgid "" +"\n" +"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "" +"\n" +"Osio[%d] alku = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:452 +#, c-format +msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "Osio[%d] loppu = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:458 +#, c-format +msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" +msgstr "Osio[%d] sektori = 0x%.8lx (%ld)\n" + +#: ppcboot.c:460 +#, c-format +msgid "Partition[%d] length = 0x%.8lx (%ld)\n" +msgstr "Osio[%d] pituus = 0x%.8lx (%ld)\n" + +#: som.c:5114 +#, c-format +msgid "" +"\n" +"Exec Auxiliary Header\n" +msgstr "" +"\n" +"Suoritettavan tiedoston apuotsake\n" + +#: som.c:5417 +msgid "som_sizeof_headers unimplemented" +msgstr "som_sizeof_headers ei ole toteutettu" + +#: srec.c:261 +msgid "%B:%d: Unexpected character `%s' in S-record file\n" +msgstr "%B:%d: Odottamaton merkki ”%s” S-tietuetiedostossa\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: Virheellinen tarkistussumma S-tietuetiedostossa\n" + +#: stabs.c:279 +msgid "%B(%A+0x%lx): Stabs entry has invalid string index." +msgstr "%B(%A+0x%lx): Stabs-tulokohdassa on virheellinen merkkijonoindeksi." + +#: syms.c:1079 +msgid "Unsupported .stab relocation" +msgstr "”Ei-tuettu .stab”-sijoitus" + +#: vms-gsd.c:350 +#, c-format +msgid "bfd_make_section (%s) failed" +msgstr "bfd_make_section (%s) ei onnistunut" + +#: vms-gsd.c:365 +#, c-format +msgid "bfd_set_section_flags (%s, %x) failed" +msgstr "bfd_set_section_flags (%s, %x) ei onnistunut" + +#: vms-gsd.c:399 +#, c-format +msgid "Size mismatch section %s=%lx, %s=%lx" +msgstr "Kokotäsmäämätön lohko %s=%lx, %s=%lx" + +#: vms-gsd.c:754 +#, c-format +msgid "Unknown GSD/EGSD subtype %d" +msgstr "tuntematon GSD/EGSD-alityyppi %d" + +#: vms-hdr.c:364 +msgid "Object module NOT error-free !\n" +msgstr "Objektimoduli EI ole virheetön !\n" + +#: vms-hdr.c:878 +#, c-format +msgid "unknown source command %d" +msgstr "tuntematon lähdekomento %d" + +#: vms-hdr.c:951 +msgid "DST_S_C_SET_LINUM_INCR not implemented" +msgstr "DST_S_C_SET_LINUM_INCR ei ole toteutettu" + +#: vms-hdr.c:957 +msgid "DST_S_C_SET_LINUM_INCR_W not implemented" +msgstr "DST_S_C_SET_LINUM_INCR_W ei ole toteutettu" + +#: vms-hdr.c:963 +msgid "DST_S_C_RESET_LINUM_INCR not implemented" +msgstr "DST_S_C_RESET_LINUM_INCR ei ole toteutettu" + +#: vms-hdr.c:969 +msgid "DST_S_C_BEG_STMT_MODE not implemented" +msgstr "DST_S_C_BEG_STMT_MODE ei ole toteutettu" + +#: vms-hdr.c:975 +msgid "DST_S_C_END_STMT_MODE not implemented" +msgstr "DST_S_C_END_STMT_MODE ei ole toteutettu" + +#: vms-hdr.c:1008 +msgid "DST_S_C_SET_PC not implemented" +msgstr "DST_S_C_SET_PC ei ole toteutettu" + +#: vms-hdr.c:1014 +msgid "DST_S_C_SET_PC_W not implemented" +msgstr "DST_S_C_SET_PC_W ei ole toteutettu" + +#: vms-hdr.c:1020 +msgid "DST_S_C_SET_PC_L not implemented" +msgstr "DST_S_C_SET_PC_L ei ole toteutettu" + +#: vms-hdr.c:1026 +msgid "DST_S_C_SET_STMTNUM not implemented" +msgstr "DST_S_C_SET_STMTNUM ei ole toteutettu" + +#: vms-hdr.c:1079 +#, c-format +msgid "unknown line command %d" +msgstr "tuntematon rivikomento %d" + +#: vms-misc.c:588 +#, c-format +msgid "Stack overflow (%d) in _bfd_vms_push" +msgstr "Pinon ylivuoto (%d) kohteessa _bfd_vms_push" + +#: vms-misc.c:603 +msgid "Stack underflow in _bfd_vms_pop" +msgstr "Pinon ylivuoto kohteessa _bfd_vms_pop" + +#: vms-misc.c:844 +msgid "_bfd_vms_output_counted called with zero bytes" +msgstr "_bfd_vms_output_counted kutsuttu nollatavuilla" + +#: vms-misc.c:849 +msgid "_bfd_vms_output_counted called with too many bytes" +msgstr "_bfd_vms_output_counted kutsuttu liian monilla tavuilla" + +#: vms-misc.c:967 +#, c-format +msgid "Symbol %s replaced by %s\n" +msgstr "Symboli %s korvattu kohteella %s\n" + +#: vms-misc.c:1026 +#, c-format +msgid "failed to enter %s" +msgstr "ei onnistuttu kirjoittamaan %s" + +#: vms-tir.c:83 +msgid "No Mem !" +msgstr "Ei muistia !" + +#. These names have not yet been added to this switch statement. +#: vms-tir.c:346 +#, c-format +msgid "unknown ETIR command %d" +msgstr "tuntematon ETIR-komento %d" + +#: vms-tir.c:440 +#, c-format +msgid "bad section index in %s" +msgstr "virheellinen lohkoindeksi kohteessa %s" + +#: vms-tir.c:459 +#, c-format +msgid "unsupported STA cmd %s" +msgstr "ei-tuettu STA-komento %s" + +#: vms-tir.c:464 vms-tir.c:1304 +#, c-format +msgid "reserved STA cmd %d" +msgstr "varattu STA-komento %d" + +#. Unsigned shift. +#. Rotate. +#. Redefine symbol to current location. +#. Define a literal. +#: vms-tir.c:655 vms-tir.c:774 vms-tir.c:894 vms-tir.c:1624 +#, c-format +msgid "%s: not supported" +msgstr "%s: ei tuettu" + +#: vms-tir.c:661 vms-tir.c:1481 +#, c-format +msgid "%s: not implemented" +msgstr "%s: ei toteutettu" + +#: vms-tir.c:666 vms-tir.c:1485 +#, c-format +msgid "reserved STO cmd %d" +msgstr "varattu STO-komento %d" + +#: vms-tir.c:789 vms-tir.c:1629 +#, c-format +msgid "reserved OPR cmd %d" +msgstr "varattu OPR-komento %d" + +#: vms-tir.c:852 vms-tir.c:1693 +#, c-format +msgid "reserved CTL cmd %d" +msgstr "varattu CTL-komento %d" + +#: vms-tir.c:966 +#, c-format +msgid "reserved STC cmd %d" +msgstr "varattu STC-komento %d" + +#. stack byte from image +#. arg: none. +#: vms-tir.c:1212 +msgid "stack-from-image not implemented" +msgstr "stack-from-image ei ole toteutettu" + +#: vms-tir.c:1230 +msgid "stack-entry-mask not fully implemented" +msgstr "stack-entry-mask ei ole täysin toteutettu" + +#. compare procedure argument +#. arg: cs symbol name +#. by argument index +#. da argument descriptor +#. +#. compare argument descriptor with symbol argument (ARG$V_PASSMECH) +#. and stack TRUE (args match) or FALSE (args dont match) value. +#: vms-tir.c:1244 +msgid "PASSMECH not fully implemented" +msgstr "PASSMECH ei ole täysin toteutettu" + +#: vms-tir.c:1263 +msgid "stack-local-symbol not fully implemented" +msgstr "stack-local-symbol ei ole täysin toteutettu" + +#: vms-tir.c:1276 +msgid "stack-literal not fully implemented" +msgstr "stack-literal ei ole täysin toteutettu" + +#: vms-tir.c:1297 +msgid "stack-local-symbol-entry-point-mask not fully implemented" +msgstr "stack-local-symbol-entry-point-mask ei ole täysin toteutettu" + +#: vms-tir.c:1571 vms-tir.c:1583 vms-tir.c:1595 vms-tir.c:1607 vms-tir.c:1672 +#: vms-tir.c:1680 vms-tir.c:1688 +#, c-format +msgid "%s: not fully implemented" +msgstr "%s: ei ole täysin toteutettu" + +#: vms-tir.c:1746 +#, c-format +msgid "obj code %d not found" +msgstr "obj-koodia %d ei löytynyt" + +#: vms-tir.c:2019 +#, c-format +msgid "Reloc size error in section %s" +msgstr "Reloc-kokovirhe lohkossa %s" + +#: vms-tir.c:2112 vms-tir.c:2129 vms-tir.c:2147 vms-tir.c:2159 vms-tir.c:2170 +#: vms-tir.c:2182 +#, c-format +msgid "Unknown reloc %s + %s" +msgstr "Tuntematon reloc-tietue %s + %s" + +#: vms-tir.c:2249 +#, c-format +msgid "Unknown symbol %s in command %s" +msgstr "Tuntematon symboli %s komennossa %s" + +#: vms-tir.c:2504 +#, c-format +msgid "SEC_RELOC with no relocs in section %s" +msgstr "SEC_RELOC ilman relocs-tietueita lohkossa %s" + +#: vms-tir.c:2556 vms-tir.c:2783 +#, c-format +msgid "Size error in section %s" +msgstr "Kokovirhe lohkossa %s" + +#: vms-tir.c:2725 +msgid "Spurious ALPHA_R_BSR reloc" +msgstr "Väärä ALPHA_R_BSR reloc-tietue" + +#: vms-tir.c:2770 +#, c-format +msgid "Unhandled relocation %s" +msgstr "Käsittelemätön sijoitus %s" + +#: xcofflink.c:836 +#, c-format +msgid "%s: XCOFF shared object when not producing XCOFF output" +msgstr "%s: XCOFF jaettu objekti kun ei tuoteta XCOFF-tulostetta" + +#: xcofflink.c:857 +#, c-format +msgid "%s: dynamic object with no .loader section" +msgstr "%s: dynaaminen objekti ilman ”.loader”-lohkoa" + +#: xcofflink.c:1415 +msgid "%B: `%s' has line numbers but no enclosing section" +msgstr "%B: ”%s” on rivinumerot, mutta ei sulkevaa lohkoa" + +#: xcofflink.c:1467 +msgid "%B: class %d symbol `%s' has no aux entries" +msgstr "%B: luokassa %d symbolissa ”%s” ei ole aputulokohtia" + +#: xcofflink.c:1489 +msgid "%B: symbol `%s' has unrecognized csect type %d" +msgstr "%B: symbolissa ”%s” on tunnistamaton ohjauslohkotyyppi %d" + +#: xcofflink.c:1501 +msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" +msgstr "%B: virheellinen XTY_ER-symboli ”%s”: luokka %d ohjauslohkonumero %d ohjauslohkopituus %d" + +#: xcofflink.c:1530 +msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" +msgstr "%B: XMC_TC0-symboli ”%s” on luokka %d ohjauslohkopituus %d" + +#: xcofflink.c:1676 +msgid "%B: csect `%s' not in enclosing section" +msgstr "%B: ohjauslohkoa ”%s” ei ole sulkeutuvassa lohkossa" + +#: xcofflink.c:1783 +msgid "%B: misplaced XTY_LD `%s'" +msgstr "%B: väärin sijoitettu XTY_LD ”%s”" + +#: xcofflink.c:2102 +msgid "%B: reloc %s:%d not in csect" +msgstr "%B: reloc-tietue %s:%d ei ole ohjauslohkossa" + +#: xcofflink.c:3177 +#, c-format +msgid "%s: no such symbol" +msgstr "%s: tuntematon symboli" + +#: xcofflink.c:3282 +#, c-format +msgid "warning: attempt to export undefined symbol `%s'" +msgstr "varoitus: yritettiin viedä määrittelemätön symboli ”%s”" + +#: xcofflink.c:3664 +msgid "error: undefined symbol __rtinit" +msgstr "virhe: määrittelemätön symboli ”__rtinit”" + +#: xcofflink.c:4041 +msgid "%B: loader reloc in unrecognized section `%s'" +msgstr "%B: ”loader reloc”-tietue tunnistamattomassa lohkossa ”%s" + +#: xcofflink.c:4052 +msgid "%B: `%s' in loader reloc but not loader sym" +msgstr "%B: ”%s” ”loader reloc”-tietueessa, mutta ei ”loader.sym”-binaarissa" + +#: xcofflink.c:4068 +msgid "%B: loader reloc in read-only section %A" +msgstr "%B: ”loader reloc”-tietue kirjoitussuojatussa lohkossa %A" + +#: xcofflink.c:5086 +#, c-format +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "Sisältöluettelon ylivuoto: 0x%lx > 0x10000; yritä ”-mminimal-toc” käännettäessä" + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf32-ia64.c:1050 elf64-ia64.c:1050 +msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." +msgstr "%B: Ei voi avartaa br-käskyä kohteessa 0x%lx lohkossa ”%A”. Käytä ”brl”-käskyä tai epäsuoraa haarautumista." + +#: elf32-ia64.c:2739 elf64-ia64.c:2739 +msgid "@pltoff reloc against local symbol" +msgstr "”@pltoff reloc”-tietue paikallista symbolia varten" + +#: elf32-ia64.c:4314 elf64-ia64.c:4314 +#, c-format +msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" +msgstr "%s: ”short”-datasegmentti ylivuotanut (0x%lx >= 0x400000)" + +#: elf32-ia64.c:4325 elf64-ia64.c:4325 +#, c-format +msgid "%s: __gp does not cover short data segment" +msgstr "%s: ”__gp” ei kata ”short”-datasegmenttiä" + +#: elf32-ia64.c:4595 elf64-ia64.c:4595 +msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" +msgstr "%B: paikkariippuvainen koodi välittömällä sijoituksella dynaamista symbolia ”%s” varten" + +#: elf32-ia64.c:4662 elf64-ia64.c:4662 +msgid "%B: @gprel relocation against dynamic symbol %s" +msgstr "%B: ”@gprel”-sijoitus dynaamista symbolia %s varten" + +#: elf32-ia64.c:4725 elf64-ia64.c:4725 +msgid "%B: linking non-pic code in a position independent executable" +msgstr "%B: linkitetään paikkariippuvainen koodi paikkariippumattomassa suoritettavassa tiedostossa" + +#: elf32-ia64.c:4862 elf64-ia64.c:4862 +msgid "%B: @internal branch to dynamic symbol %s" +msgstr "%B: @sisäinen haarautuminen dynaamiseen symboliin %s" + +#: elf32-ia64.c:4864 elf64-ia64.c:4864 +msgid "%B: speculation fixup to dynamic symbol %s" +msgstr "%B: spekulaatiokorjaus dynaamiseen symboliin %s" + +#: elf32-ia64.c:4866 elf64-ia64.c:4866 +msgid "%B: @pcrel relocation against dynamic symbol %s" +msgstr "%B: ”@pcrel”-sijoitus dynaamista symbolia %s varten" + +#: elf32-ia64.c:5063 elf64-ia64.c:5063 +msgid "unsupported reloc" +msgstr "ei-tuettu reloc-tietue" + +#: elf32-ia64.c:5101 elf64-ia64.c:5101 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: siirroksen %s puuttuva TLS-lohko kohdetta ”%s” varten osoitteessa 0x%lx lohkossa ”%A”." + +# Kun käskykohdemuuttuja on sen lukualueen ulkopuolella, joka sallitaan kullekin käskykentälle, +# assembler voi muuntaa koodin käyttämään toiminnallisesti samanlaista käskyä tai käskysekvenssiä. +# Tämä prosessi tunnetaan nimellä relaxation. Tätä tehdään tyypillisesti haarautumiskäskyissä, koska +# haarautumiskohteen etäisyyttä ei tunneta ennen linkitystä. Tavallaan tällä tavalla kumotaan lukualueen +# rajoitteet (constraints). Siksi olen suomentanut sen termillä avartaminen. +#: elf32-ia64.c:5116 elf64-ia64.c:5116 +msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." +msgstr "%B: Ei voi avartaa br-käskyä (%s) kohteelle ”%s” kohteessa 0x%lx lohkossa ”%A” koolla 0x%lx (> 0x1000000)." + +#: elf32-ia64.c:5372 elf64-ia64.c:5372 +msgid "%B: linking trap-on-NULL-dereference with non-trapping files" +msgstr "%B: linkitetään keskeytysnollassa uudelleenviite ”ei-keskeytetä”-tiedostojen kanssa" + +#: elf32-ia64.c:5381 elf64-ia64.c:5381 +msgid "%B: linking big-endian files with little-endian files" +msgstr "%B: linkitetään ”big-endian”-tiedostoja ”little-endian”-tiedostojen kanssa" + +#: elf32-ia64.c:5390 elf64-ia64.c:5390 +msgid "%B: linking 64-bit files with 32-bit files" +msgstr "%B: linkitetään 64-bittiset tiedostot 32-bittisten tiedostojen kanssa" + +#: elf32-ia64.c:5399 elf64-ia64.c:5399 +msgid "%B: linking constant-gp files with non-constant-gp files" +msgstr "%B: linkitetään vakioyleisosoitintiedostot ei-vakioiden yleisosoitintiedostojen kanssa" + +#: elf32-ia64.c:5409 elf64-ia64.c:5409 +msgid "%B: linking auto-pic files with non-auto-pic files" +msgstr "%B: linkitetään automaattiset paikkariippumattomat kooditiedostot ei-automaattisten paikkariippumattomien kooditiedostojen kanssa" + +#: peigen.c:999 pepigen.c:999 pex64igen.c:999 +#, c-format +msgid "%s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: rivinumeroylivuoto: 0x%lx > 0xffff" + +#: peigen.c:1026 pepigen.c:1026 pex64igen.c:1026 +msgid "Export Directory [.edata (or where ever we found it)]" +msgstr "Vientihakemisto [.edata (tai missä sen sitten löysimmekin)]" + +#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 +msgid "Import Directory [parts of .idata]" +msgstr "Tuontihakemisto [”.idata”-osat]" + +#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 +msgid "Resource Directory [.rsrc]" +msgstr "Resurssihakemisto [.rsrc]" + +#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 +msgid "Exception Directory [.pdata]" +msgstr "Poikkeushakemisto [.pdata]" + +#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 +msgid "Security Directory" +msgstr "Turvallisuushakemisto" + +#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 +msgid "Base Relocation Directory [.reloc]" +msgstr "Perussijoitushakemisto [.reloc]" + +#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 +msgid "Debug Directory" +msgstr "Virheenetsintähakemisto" + +#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 +msgid "Description Directory" +msgstr "Kuvaushakemisto" + +#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 +msgid "Special Directory" +msgstr "Erityishakemisto" + +#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 +msgid "Thread Storage Directory [.tls]" +msgstr "Säievarastohakemisto [.tls]" + +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 +msgid "Load Configuration Directory" +msgstr "Lataa konfigurationhakemisto" + +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 +msgid "Bound Import Directory" +msgstr "Sidottu tuontihakemisto" + +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 +msgid "Import Address Table Directory" +msgstr "Tuontiosoitetauluhakemisto" + +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 +msgid "Delay Import Directory" +msgstr "Viivetuontihakemisto" + +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +msgid "CLR Runtime Header" +msgstr "CLR ajoaikaotsake" + +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 +msgid "Reserved" +msgstr "Varattu" + +#: peigen.c:1101 pepigen.c:1101 pex64igen.c:1101 +#, c-format +msgid "" +"\n" +"There is an import table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Tuontitaulu löytyi, mutta ei lohkoa, joka sisältää sen\n" + +#: peigen.c:1106 pepigen.c:1106 pex64igen.c:1106 +#, c-format +msgid "" +"\n" +"There is an import table in %s at 0x%lx\n" +msgstr "" +"\n" +"Tuontitaulu lohkossa %s osoitteessa 0x%lx\n" + +#: peigen.c:1149 pepigen.c:1149 pex64igen.c:1149 +#, c-format +msgid "" +"\n" +"Function descriptor located at the start address: %04lx\n" +msgstr "" +"\n" +"Funktiokuvaaja sijaitsi alkuosoitteessa: %04lx\n" + +#: peigen.c:1152 pepigen.c:1152 pex64igen.c:1152 +#, c-format +msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" +msgstr "\tkoodipohja %08lx sisältöluettelo (ladattava/todellinen) %08lx/%08lx\n" + +#: peigen.c:1160 pepigen.c:1160 pex64igen.c:1160 +#, c-format +msgid "" +"\n" +"No reldata section! Function descriptor not decoded.\n" +msgstr "" +"\n" +"Ei reldata-lohkoa! Funktiokuvaaja ei ole koodattu.\n" + +#: peigen.c:1165 pepigen.c:1165 pex64igen.c:1165 +#, c-format +msgid "" +"\n" +"The Import Tables (interpreted %s section contents)\n" +msgstr "" +"\n" +"Tuontitaulut (tulkittu %s lohkosisältö)\n" + +# Taulukko-otsake, jossa sanat on kahdella rivillä (ilman tavuviivaa), esimerkiksi: Vihjetaulu +#: peigen.c:1168 pepigen.c:1168 pex64igen.c:1168 +#, c-format +msgid "" +" vma: Hint Time Forward DLL First\n" +" Table Stamp Chain Name Thunk\n" +msgstr "" +" vma: Vihje- Aika- Jatkoläh. DLL- Ensimmäinen\n" +" taulu leima ketju nimi Thunk-funktio\n" + +#: peigen.c:1216 pepigen.c:1216 pex64igen.c:1216 +#, c-format +msgid "" +"\n" +"\tDLL Name: %s\n" +msgstr "" +"\n" +"\tDLL-nimi: %s\n" + +#: peigen.c:1227 pepigen.c:1227 pex64igen.c:1227 +#, c-format +msgid "\tvma: Hint/Ord Member-Name Bound-To\n" +msgstr "\tvma: Vihje/Jär Jäsen-Nimi Sidottu\n" + +#: peigen.c:1252 pepigen.c:1252 pex64igen.c:1252 +#, c-format +msgid "" +"\n" +"There is a first thunk, but the section containing it could not be found\n" +msgstr "" +"\n" +"Ensimmäinen thunk-funktio löytyi, mutta ei sen sisältävää lohkoa\n" + +#: peigen.c:1417 pepigen.c:1417 pex64igen.c:1417 +#, c-format +msgid "" +"\n" +"There is an export table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Vientitaulu löytyi, mutta ei sen sisältävää lohkoa\n" + +#: peigen.c:1426 pepigen.c:1426 pex64igen.c:1426 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but it does not fit into that section\n" +msgstr "" +"\n" +"Vientitaulu kohteessa %s, mutta ei sovi tuohon lohkoon\n" + +#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 +#, c-format +msgid "" +"\n" +"There is an export table in %s at 0x%lx\n" +msgstr "" +"\n" +"Vientitaulu lohkossa %s osoitteessa 0x%lx\n" + +#: peigen.c:1460 pepigen.c:1460 pex64igen.c:1460 +#, c-format +msgid "" +"\n" +"The Export Tables (interpreted %s section contents)\n" +"\n" +msgstr "" +"\n" +"Vientitaulut (tulkittu %s lohkosisältö)\n" +"\n" + +#: peigen.c:1464 pepigen.c:1464 pex64igen.c:1464 +#, c-format +msgid "Export Flags \t\t\t%lx\n" +msgstr "Vientiliput \t\t\t%lx\n" + +#: peigen.c:1467 pepigen.c:1467 pex64igen.c:1467 +#, c-format +msgid "Time/Date stamp \t\t%lx\n" +msgstr "Aika/Päivämääräleima \t\t%lx\n" + +#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 +#, c-format +msgid "Major/Minor \t\t\t%d/%d\n" +msgstr "Suurempi/Pienempi \t\t\t%d/%d\n" + +#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 +#, c-format +msgid "Name \t\t\t\t" +msgstr "Nimi \t\t\t\t" + +#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 +#, c-format +msgid "Ordinal Base \t\t\t%ld\n" +msgstr "Järjestyslukukanta \t\t\t%ld\n" + +#: peigen.c:1482 pepigen.c:1482 pex64igen.c:1482 +#, c-format +msgid "Number in:\n" +msgstr "Numero kohteessa:\n" + +#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 +#, c-format +msgid "\tExport Address Table \t\t%08lx\n" +msgstr "\tVientiosoitetaulu \t\t%08lx\n" + +#: peigen.c:1489 pepigen.c:1489 pex64igen.c:1489 +#, c-format +msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" +msgstr "\t[Nimiosoitin/Järjestysnumero] taulu\t%08lx\n" + +#: peigen.c:1492 pepigen.c:1492 pex64igen.c:1492 +#, c-format +msgid "Table Addresses\n" +msgstr "Tauluosoitteet\n" + +#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 +#, c-format +msgid "\tExport Address Table \t\t" +msgstr "\tVientiosoitetaulu \t\t" + +#: peigen.c:1500 pepigen.c:1500 pex64igen.c:1500 +#, c-format +msgid "\tName Pointer Table \t\t" +msgstr "\tNimiosoitintaulu \t\t" + +#: peigen.c:1505 pepigen.c:1505 pex64igen.c:1505 +#, c-format +msgid "\tOrdinal Table \t\t\t" +msgstr "\tJärjestysnumerotaulu \t\t\t" + +#: peigen.c:1519 pepigen.c:1519 pex64igen.c:1519 +#, c-format +msgid "" +"\n" +"Export Address Table -- Ordinal Base %ld\n" +msgstr "" +"\n" +"Vientiosoitetaulu -- Järjestyslukukanta %ld\n" + +#: peigen.c:1538 pepigen.c:1538 pex64igen.c:1538 +msgid "Forwarder RVA" +msgstr "Jatkolähetyksen suhteellinen muuttujaosoite" + +#: peigen.c:1549 pepigen.c:1549 pex64igen.c:1549 +msgid "Export RVA" +msgstr "Viennin suhteellinen muuttujaosoite" + +#: peigen.c:1556 pepigen.c:1556 pex64igen.c:1556 +#, c-format +msgid "" +"\n" +"[Ordinal/Name Pointer] Table\n" +msgstr "" +"\n" +"[Järjestysnumero/Nimiosoitin] Taulu\n" + +#: peigen.c:1616 peigen.c:1795 pepigen.c:1616 pepigen.c:1795 pex64igen.c:1616 +#: pex64igen.c:1795 +#, c-format +msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" +msgstr "Varoitus,” .pdata”-lohkokoko (%ld) ei ole %d:n monikerta\n" + +#: peigen.c:1623 pepigen.c:1623 pex64igen.c:1623 +#, c-format +msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" +msgstr " vma:\t\t\tAlkuosoite Loppuosoite Unwind-tiedot\n" + +# Taulukko-otsake, jossa sanat jakautuvat taas alekkain kahdelle riville ilman tavuviivoja +#: peigen.c:1625 pepigen.c:1625 pex64igen.c:1625 +#, c-format +msgid "" +" vma:\t\tBegin End EH EH PrologEnd Exception\n" +" \t\tAddress Address Handler Data Address Mask\n" +msgstr "" +" vma:\t\tAlku- Loppu- EH-käsit- EH- PrologEnd Poikkeus-\n" +" \t\tosoite osoite telijä data osoite peite\n" + +#: peigen.c:1695 pepigen.c:1695 pex64igen.c:1695 +#, c-format +msgid " Register save millicode" +msgstr " Rekisteri tallentaa millicode-bitin" + +#: peigen.c:1698 pepigen.c:1698 pex64igen.c:1698 +#, c-format +msgid " Register restore millicode" +msgstr " Rekisteri palauttaa millicode-bitin" + +#: peigen.c:1701 pepigen.c:1701 pex64igen.c:1701 +#, c-format +msgid " Glue code sequence" +msgstr " Vihje-koodisekvenssi" + +#: peigen.c:1801 pepigen.c:1801 pex64igen.c:1801 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" +msgstr "" +" vma:\t\tAlku- Prologi- Funktio- Liput Poikkeus- EH-\n" +" \t\tosoite pituus pituus 32b exc käsittelijä Data\n" + +#: peigen.c:1933 pepigen.c:1933 pex64igen.c:1933 +#, c-format +msgid "" +"\n" +"\n" +"PE File Base Relocations (interpreted .reloc section contents)\n" +msgstr "" +"\n" +"\n" +"PE-tiedostokantasijoitukset (tulkittu ”.reloc”-lohkosisältö)\n" + +# Esimerkiksi välimuistissa RAM-alue koostuu usein pienistä palasista, joita kutsutaan nimellä chunk. Suomensin sen tässä sanalla alilohko +#: peigen.c:1963 pepigen.c:1963 pex64igen.c:1963 +#, c-format +msgid "" +"\n" +"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" +msgstr "" +"\n" +"Virtuaaliosoite: %08lx alilohkokoko %ld (0x%lx) Korjausten lukumäärä %ld\n" + +#: peigen.c:1976 pepigen.c:1976 pex64igen.c:1976 +#, c-format +msgid "\treloc %4d offset %4x [%4lx] %s" +msgstr "\treloc-tietue %4d siirrososoite %4x [%4lx] %s" + +#. The MS dumpbin program reportedly ands with 0xff0f before +#. printing the characteristics field. Not sure why. No reason to +#. emulate it here. +#: peigen.c:2015 pepigen.c:2015 pex64igen.c:2015 +#, c-format +msgid "" +"\n" +"Characteristics 0x%x\n" +msgstr "" +"\n" +"Luonteenominaisuus 0x%x\n" + +#: peigen.c:2292 pepigen.c:2292 pex64igen.c:2292 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: DataDictionary[1]:ia ei voi täyttää, koska ”.idata$2” puuttuu" + +#: peigen.c:2312 pepigen.c:2312 pex64igen.c:2312 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: DataDictionary[1]:ia ei voi täyttää, koska ”.idata$4” puuttuu" + +#: peigen.c:2333 pepigen.c:2333 pex64igen.c:2333 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: DataDictionary[12]:ia ei voi täyttää, koska ”.idata$5” puuttuu" + +#: peigen.c:2353 pepigen.c:2353 pex64igen.c:2353 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)]:ia ei voi täyttää, koska ”.idata$6” puuttuu" + +#: peigen.c:2375 pepigen.c:2375 pex64igen.c:2375 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: DataDictionary[9]:ia ei voi täyttää, koska ”__tls_used” puuttuu" + +#~ msgid "ERROR: %B: Incompatible object tag '%s':%d" +#~ msgstr "VIRHE: %B: Yhteensopimaton objektitunnus ”%s”:%d" + +#~ msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" +#~ msgstr "%B(%A): varoitus: ratkaisematon sijoitus symbolia ”%s” varten" + +#~ msgid "%B: Internal inconsistency; no relocation section %s" +#~ msgstr "%B: Sisäinen epäjohdonmukaisuus; ei sijoituslohkoa %s" + +#~ msgid "Could not find relocation section for %s" +#~ msgstr "Ei löytynyt sijoituslohkoa kohteelle %s" + +#~ msgid "%B: GOT overflow: Number of R_68K_GOT8O and R_68K_GOT16O relocations > %d" +#~ msgstr "%B: Yleissiirrostaulun ylivuoto: R_68K_GOT8O- ja R_68K_GOT16O-sijoitusten lukumäärä > %d" + +#~ msgid "%A link_order not found\n" +#~ msgstr "%A link_order ei löytynyt\n" + +#~ msgid "%s: no symbol \"%s\"" +#~ msgstr "%s: ei symbolia ”%s”" + +#~ msgid "%s: loader reloc in unrecognized section `%s'" +#~ msgstr "%s: ”loader reloc”-tietue tunnistamattomassa lohkossa ”%s”" + +#~ msgid "%s: `%s' in loader reloc but not loader sym" +#~ msgstr "%s: ”%s” ”loader reloc”-tietueessa, mutta ei ”loader.sym”-binaarissa" + +#~ msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)." +#~ msgstr "Dwarf-virhe: DW_FORM_strp siirrososoite (%lu) suurempi tai sama kuin ”.debug_str”-koko (%lu)." + +#~ msgid "Dwarf Error: Can't find .debug_abbrev section." +#~ msgstr "Dwarf-virhe: Ei löydy ”.debug_abbrev”-lohkoa." + +#~ msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)." +#~ msgstr "Dwarf-virhe: Lyhennesiirrososoite (%lu) suurempi tai sama kuin ”.debug_abbrev”-koko (%lu)." + +#~ msgid "Dwarf Error: Can't find .debug_line section." +#~ msgstr "Dwarf-virhe: Ei löydy ”.debug_line”-lohkoa." + +#~ msgid "Dwarf Error: Can't find .debug_ranges section." +#~ msgstr "Dwarf-virhe: Ei löydy ”.debug_ranges”-lohkoa." + +#~ msgid "ERROR: %B: Conflicting definitions of wchar_t" +#~ msgstr "VIRHE: %B: Ristiriitaisia wchar_t-määrittelyjä" + +#~ msgid "%B: relocation R_X86_64_PC32 against protected function `%s' can not be used when making a shared object" +#~ msgstr "%B: sijoitusta R_X86_64_PC32 suojattua funktiota ”%s” varten ei voida käyttää kun tehdään jaettua objektia" diff --git a/bfd/po/id.gmo b/bfd/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..29789af32d8ec2fa24e3925fe0a44394717da712 GIT binary patch literal 97793 zcmcGX34B~t+5e{qNXx$Oa0`UCw3F_oq_i|!+t8#bNeYEh(n)5L44urxnM@Z{5EU2P zS43GvToFZa!3D(ya6^3EK-?D)!4**i^wt0Ocb;?a+?h-_eE;*w&G(*j&%Qoqx##}; zu)W`w;5YqwiNp!;;$stubM{UouA3*_MB*K-iNrDRT6hw?9UcY03lD?8gQvlN!uc?0 zOC(N)eXs$J!-L^FVKcl1o(}&2`TI|}KRgh}#be=Q*Z_}!v!T+z4IU0t z@OW5;N~br$ec>(s`NzHb9{>D4um1=<1ar@LPFZd0<2`42E`moF_gV=cp|(OQuGpc zz^U-NQ2sm#70&&-%$=j5!g&f*xaUB{w+YIh)llhlK9oNjq1-J)x$_37e7XT12S4TY z{|73af8o_nL%H+(HC9dzf-gkf4vX;1a2s6EZTbHZsC@q_JOl2x*4ϊ*sM4ZZ;C z`L$5-yc;fszlEwFr=4fzW(X?%u7Yy+!(RU{@NCov_gFdYgh|xbz?twKsB-)SoDQe; zCK9vYT8I~k7elH_;(kaKNF32;^>za+qkaRFzx%AS@XUmH)T59rP5cy|38$ZL>9Pqb ze%C<7>rS{BJ_^LB{WiNAZEd!easgs(>bZ&3Cx zzbKK|06z~EpQBMoe*`L>-skx^oQrz)#guZ3_1>O54u-T~*pufb*TY0oqJ@f-CP&-X*6_XAMoPTXYvT?~~^SHlzG zC!o^zyHMeuoHF;9K)IKL^8Y%oz85Y*{S-VK&Kodu1*rJk2v3LKhV$XyJf{yP5){?M z#gHsX-0IbPr^yr4eQ+VX8!GICW*sCaFKDwpqu z3g3P395{J6k)S9iI-tV!E~xtP9Vm1EfK3P|q)co$zXS8hp^}{|hSI)2U>~z!gy8?}uuiu7I-tPN@92 z7cPhY@?1)0b)df7^XpLc>##B3?m)%=1#l_67AoBzgi6mDFR*mVL%IKMcmjL?CgGD% z`8Bm@?xmpgUjgOMC!x~sPf+FL)RLvcO4xvUD^xmO56^%
L<Ni7$?`}8@pM_NI#K4P)tMuUtIQPXC&TUZsydTbo4?($e z;N|xG9H@LAg^K^}a1s1FRDR65!t7rFmCjc~>3)`3AFN4y*2`+`-hO^-QFSGiv80z`?@JRSlsC;>c z*S{B@g!->g_6~iyg?kxPdSu}#@H)@CpzQw|%KRZ$S-oEBd6nn4q2hhyD=eRv!8X)a zK)HK2RKEWMo(X5Y(%PXkl=?;}e;$O&$9-O9^_(3Rt@AsT^wWZerDEmd&0zV3y;S;b4&VP;B%R{BpP4Hy+C3q_QB~-fa{aQdi)HY z37>z1xpxknhWbLN@^vNL06z#7pS^Fi_O%n9h59g-4)&foBdLh5AZ(0(=LQd!K@*z`LO8 z^RMA)aKD?ayd|OP-hv!`RusG^7nEm^=F{+ z_m5EJCHS!A^Li-t>!F_C3j_EJJOdtgtEFcW@EWdkT2kJ6xfOkRV`y){G?P;iZO!=6FcQ#ahcS1cMfG5LocnEweoDAOw z_k*{2eg>*seHki#KY}W6zk%|1-;dio#w;lJ7DL5zJ)8kY;cR#fRQSIJ8{u!^EO_MY zR=!)H^5GIFcdzxl3o0ESfhtG;hOO}IPnf*)64-+J3vez>eA3cu9#sBp_Phz6gZe=@ zA0GWFD?h8D+KHDynZFCpgMWu-!|9(k^BJgkUkf+DJE7b=<_?S3dZ_f?3Kj3`pwjVP zsCxJvsB-r>RQq-0XRJJ(4G%-z2W5X49tvLz6^Y zsC@rER6W`E9!s}{Fpatko&ax$4e&c&{dagg>cj4}a@`20p&o?t|21$U{3<*KPW_sd zpC+hyUkugWTa($ zai~{&4#5`GSHd=UH#`GQzR$+v3t*tqgRQc(5d3U~l~8$1@i2L|v?csTqSRQ^8!Wq#l9nEnY+>N!yLas^a<-3ZsfJe&c) z0979zg(t(4{>RGQGN^L470RDidtUGPanE~TC(j>(0X+S?mOd+?^6Rxw`k#O*-#>uU z;nPs{Z|e6foi{+Wt6ShycnjPY-Un4qzYkSzo`K5Gso%HsT>)pI-U^=&-wO|fw?dWY z&q3LH04g2+4G)D!{=n4JJeNV0^L0?=`*l#}-VYChpMi(NZ^2>s3%Cug{GpZqFF}R- zPf+e0@_@Os3Q9i(=fIc2h47Pb9()`&!V@2~{;3nrMtwD01V0D2O(K8cQK&C{$m;Kv zQ0g0?!uKhtbon}*5B~_|@6;b#dbh%ZQRiSYd=XUsd=VTF`9<=RrL$z*FEWq0HR^4}y0=rQiMV5cp%L_UZRf;d$CW-~Tt3PDewf!%6U1*a+p$ zDky(0fTzF$R64vFDjXkzGWRv8^nL)U{QL~Q7#{nut)E;2FGD@$5p(}4xDNG=Q0>Cs zq4NKf-&+6F4At(9LZ#O=Q1#|3uo*rISHc;OTD^V&JRS9o@EmwARCxFOo%Pc*;Dx9! zg>&KEQ04b2sCsz%W2U|cs@`7>6}~UQ7I@U-HotKpT!#7s@Cx`_D0hZ_Z{zN_!vgAG zL$$X(f3WuRMz|dHLvT7g?vK`af)cu~Jy7ZQgy)faO>*Hl3o5;~LfN|s2JmZeCHx&!de3>@Bsag3 zg9`r_pq~E|%HP(#C%JgM0V(Oqz6B~i4@1TOfPE*q`SN8@ z;e0cc`A@^C@KJaoocw&VHw^};yWwIu2Gve{2zJ8XdoJE@lFP@d;70U+4cp-I$&*~U zx(X`(w?mbqpThIt$x|k|e(nWu5$exDmFFkm3Gnp&E!?ee8R{}rJ^v(BdHxwx{P#a# zk}KycpxU#`;7oWUJOh3UD!-qCst?TvntmB7-tUHI!>_;q{s$_)!9kN;zjh&9h`I=s zULS-C=R;88I_O}t-v!S>eKl14zX`MO;6o<4_22EV5B2Y$%q>0C((%Pm`TR|&cpY|_ zg>yMnI*dc5*PEc~>2ILQ=OKrixjrcMtKcc{KB#o~GgP`BafId1YM4j;L0EuCA2}(J zg0F-f@G&?W&OgdH2***s1#W@+9X-j(_g6sW|1(hae8n+VUbjQ3?|@3b$D!Oi^;nBv zujjj<%J*-e@^k8OX8v5LbbT3AI)4T#A0LCN_eUOY@y$S`*R@df@>fvxVfqPHp7K!f zx&x}*AA6$NTMgyj6<+;esCxek=<@L-GuH)GF0O&izpF zemPY6y2JDLQ1$HOz}O1q-!N1@za1)H?}n=1M@=>L093kt5-NTV!&PwRDVCq(Q0e<& zsPg}?=gFs9{k#Y&->-ve2fpvs2cBl>(FT{JzXhsZ+yMvRUJX{xGcZ8?E~xT$CzOAW zd7g5*<^Kk#`ustt^7DJBd|5cn!tr7#dw0Q;;L}j;-_g@8J(fbnE9H3$RD7R=D$h+b zCM5>p+_C|x+<)Bj-%#OP-DvTC15~|!5USlddbau30u`?9 zQ03=lD0@GFJ@Di?*3T57;_)ST5quV^T&$aG?eR^p3-vcVkDh1lWjwEkO3xp{3*brf zEk0YIYqy}DKjigKSzzJpgKGb-fXBl-q2m7|sBj*&(8}#au#EcEP~rNI=juh4KG#6C zZ-0dAVau6Tp5FyGNgt{nuUTyAbpsqm{adK|yXGt_FK>mi|81yxc6yVw6C0rF*UO>m z>t|p9{{fGM$1IuTI>mvumqLQuYk?)cDM%q4XQr2p6%Or=+X%)JP*N>;mJ$Q z|8w9p)FV*k>5Wk7@DJDzTbEgS-3(O@9))Tbrk!K)x(LeNTcGmcS*Uv2x_naNmGCln zDBP>r{5b+1jQVW29Cmv3>);`%uZJ@KQO_^IV^Dt&2JrV#_77;WbU6V|N8Rd~gX*W= z1{JR#L$y15wOaV+LG?dHsC0h=R5|%7+#e>|terdn9*MFMD!tpF()9w*S3rg1Q&8sa zfePnOpwjzq@Cew@ZtX)8RQtFID*s;(mET{5Y9IDmF)48=?0_ogpM)x}2duRCoeLF@ z5>)(dhNr{d!Smt4t4vNAf_i>8TnQ(4SbKIJT!;Fto{vL?WBIvOKg&?++dLnJa_899 zRv#~cQokLl9ry_h;J%#}u4$eZK$&|bRJiVgr@>RZEIn31wHq7ZsWJzZA0LL27rzb< zhkLJ?Yv6u-wu^-cS5xX4?xxT6Z)*4kH8Mpw?g%UPeJA9S?jF6UJljX+y%Sfr1PyD zcf;kVUk}xve8;O#xWJxogzC4h^Xf;T()0B7CfBTnYQH`Lm4E+&dVbu67T_`C+L1x(BKpJ`EM` zBQLT1n-5ic^q_*S3D^pKgRo?y z{9mZ{x;tg&UjfyQf7h#z8!$N{1DB)!btrq22QB?KK-qsSRR8c*I14^6ZRK(fETJBP za`(qD2T#pde!mfpqy7a{`1^*eyxsSA!ZG-ySEsX9-d^JQKB)BnCR`4mfQsk5ORZdF;V9})LzRcq zHkm%fGbgd1S)_24qpL}eu34u8=(BXAI{ZtsQzwR(fXAu zU=sB$Q1*WW)lWPN<^M?~YhRn-ai~{A#cK$voxTdHpSTvP-TbK6zuT*S1XZ8@1P_Dz zj9Yk*fog9y!L#61Q2yQp)lU2dDxD86TYAp)Y=f%L8@+lf>_z=XsQh{uD*q1LV&(4= zsQAAbs(gGFs{MW(Dj$Na)_x2_mD^WB)u(&lzVNS5>GKR!xTbBha&Q4u`Ft6ayPtyx z!rw!s!!uCvIe5E;V?I>64MWB26;SzlgI9kZo{9SVQ0>kBmsvTO0S`fa7F4}E7rqEy z3||W$g0eUCLW}1OQ0?YDQ29CeMOIE{LY1F&P|x21C4c-BD*T7O*wUi~s=azOl)Us6 zI0=4J|M(HS#H8oZj=`B;?;m@y?#Q!7sGsV?@!Sg=uKjF>fJugCEzYlOVbA6mk`56B_pt%F`-H)*iRtz_%x>_0Uh3(MB=*IQ+5(ls?{RJC`PE$SjhS1{ z{dc%ZUauKGh}o~fX@p6?4|AQw{rr zFsBvXz*~9tKbXG>(lsT1fZlyvS8%C5{)Foh^!0l&*OxGNh!4;8+&{@R74;vynU|n` z73Lm<`dxwk*<8y|&xbGN`ZxEjTut80i{P)(KNa(z;r=o1-^#tp*OyT*LHz*y6zXH~ z>j>`WqIU!898F1Fo#<;^pr6{=d6?~ohhcBNH2F z-_f}9Jg&t&`!HAd`!+Y-p#pvNA)C1V!~GjDuivTo75;wD&3@>AhpU6D3v-8Y{fg^y zuBW`gaqd$*@8$X%_xklt-i+>FAG?1>8vGvd=FafE$g~qTqJ9bY?}K0GT94foTqkh-*1K~Y+~n;o<9-

L;`!cHj z@@Dj25!1hz`&+Sdl-FD2?Qg^Eo4NlJ{0i)Z`c30r?eCZ18(<6k4VQizXVDzG_lu;y z0ykH4y&S#wp;kM4I@d4IYees2u77!d5BB77f-W{O4fR{NKZvsOX6}zdZyfdKy}1Wu zke~XR12NO#RF!{wb9*A!1K88=H(dL3orc-TTnljL1g=5!K7yH#a?R!b8uWU&|0Mh- zmwsR5+K2n=;41IljqpLPH*tLx{r7U!{$^q46#P=Zsvn|7;)mYNUzk?(|J7dq*Iwrv zp6a9Y8|3+U-pn6yr-l2YaQly5?_=ma&ZS?I=W9&q{_lm})!bc%`5$>Zdhj*$m%|T9 z;eXxe^16}!6vT1asOGU-(;SzL;WM}@8bFg*UwSE2mNQ^2x|Qf;C?Uk4ksNB=K3r5 z`aQ`d+3OOnpLjiPqu*5Y_VxO&^85-s4mVyGnL_sW&k#l2?^ymHiQc!p8WAY*F0Q|D z9l*0YdA11di#s3kW+uZF`YX^s7B1w{?``P+(%n(-;Z0UQ@;v_gA&Rx=Nj5rxa4f;@elY_ZQD2GrE_k}q z9kajXKEsvfnuPj}nECMbb3AKB@pYcRoBJoBexHNS$DIuKS8;zN_lUBI&8VO9W;!un z`x`=UDcAeCUW>UeavhJ|GzJgh{sykuF-t%2ZhQbs})Z|HAWsa(w~&mvGJC{vq^F~eKYr4xM#?ccq2T8>lUu?_apQV zMct0Zhu~Dy`r&P2tDeDkp#L&>CF&!1(17}%+#dt)=K3sG{P((;`t970ay^0h?|J>3 zyx}jPz7GArbLsbK|J+pcQRu%Fy$xvG&XwiN;Ra~b><&mM*S z-mHv1#rrX}hZq#q&n!@!0^k46v9Vtuvq-;=v_}?4QXbBZ?AMEXq-XFL> zm;23J`n|@p6&BZQ^8}y$SUQ*UPwOqPI8v4cGU% z4nci6W=`kYo9iyFBG+1;g}=QBUmiXE-o{nn{!Xrw(f_&AwSQmrW`^O2zi)&0`1>Eg zKl%F)z;#%AhgWZer*a*Dn;H0?n7h#}&-7c(^Xs|Ra(|!?=RZ&{M12I;<6KL){_dY0 z%d%dMj7=L&y+;Q8xO{Eh2r?jM6U!22=#3UBC9)PLrB z33@N%((lz=Kju0J{hxBJ=6<$+_8IOI+ z+zda+^?j~Y-p(fO2Qa%B^?BUS;r<-%f5H6=xfXbH!go=hh&$im{@vW)%cb8K*LSh^ zHFz=CO{T_oqg;TiJd%bVKHm--b8nEBV z^?UBG<$5RAE4hA%-WgnnbAKpdJP-TZx%4}W>ytc7Om5#cRw#}K&FOS8Qz`|0sexQ3 zm^^uh4;tny&TX5Ln7k%6nhDkxvib2$F=nf~n9k-?xkv|xHpGq2_69bZiOHdJgN1Y^ zIgl!40;dy<7Y2jrxk4(f@XSsPj+axp8TM>;Xs4LTVX9$4Iw%Ycl``YpZVNUvEXZx! z7&Md;ledhfnu1^zL6omSS7vk|Q%t(hv=qwubh587B{5}kTW4n=%_c0Np0c(*Sdk?W zS`?Zd`H>pW7V@QFx{K^sF*BY?2aV=?DKn^t!C--e$d8w1;6mVj?fLY~xj||B=s+Qd z)5$Y)Y4rQHkKvJmSKnAJ9X?o*EtbYB_A3uM2~e)y19Q9LbS7UOT@uuUqvB3!yjUI_ z--&^8o|x5r-a3*hk|&vBwltm{ECqA6HBcs|v~AC)Mze!KuO&(oTJ761gF$n7TQ-+X z6}JbgGO2W?==AFpyJRv5%a2R^hFlt>E6RCG<8-DpSj>)%7m9()6mlUo9*mD~^ppm#hqxH%|gFUtf&gnY=yrqmb&&3Syb!qpT^J7Zcf zn%XA+1~<t}}g;9(ZMQ<&NvQ_TtVmua4o|s+p zv18O_({B6dY!x#>wiKj-AyDp*DGQnszm&?jf>{%(brRu?kmiEOP6TyZRYny{1dZ2Mt+tJjx z^g8WP7gmZ{YIW`N^H;2$sAu7w8z}U0#An64T8;U&8VhPQ7DgJWfown){bAOfXg`xiTU*(n%LfckA1C>(oj?nGUj)86KtM zqdKKC+hmBML1Q}RZk2qcU@TQ4k1*lWrs%V!RM(6;*FszUVSc$>7|W0qmM~66q5G3em!T&vyIZ+YDh!QpO;IIQ ztTm+~?Bhbeg9WGUq?b}KqB@ca`U4_K{_2r0eL+WWvnfk1%_capW$v6Hl}`s-th5;< znN6NNxrKs|58EDE1<5LLWe}{(Z>3-b9r+IEpJ-3g7#Gou^YPKTwz$w(P<85 z#?;`Mz%_YtDC$;xT15bJ6uF>HqJn;rnIPy&l{QcG+dRNz)VZ#pe3fK3@{n*%@Ut_M zA08jURCGhuk~f10s$nQxFua#?F#Ji9)qP(U(cAr26pCabk(3PUwbbc)+0ttXeXa}y z0n*6mnA1mwBk}pUR@-Uyso9^BIQ8s~{1z%mI>;1@h%9O_mn9mSDF&rrfbty_ib!#k zmkpa5ny0B^H?(YYxm?cIedK%CQe8(>Ix6g(_1Y#EG&DD^{C;tU1g9Nm6cF1*{5=!zz+2L~0 zB(z-^rHhdXjRQ#6QqbDd(W^r5Qg0SP94w5E;gYK2)+}jARoap*luJQj;8J9wYTMNQ zq+CeusS5~RYQyM93tPz`L>$-SGpuqR_|y%^Ov+p)lSXVDFAoI6#X@<^b@+;eHE99E z2X*%ixiTGSC`{mdKC?~TDuuCkRbPMagqyl2X`{CB`nKjLOzTr)*Fc`YP|5d?jd5Ss_w!kE=~@ZXYoihez3W;?7#j$Z z+{n~ag0SqUGBkIt^JSxwDJn>D-@6fp5D~TpTSu}v<<(d&J3g+i(dCiL7%N{DH>^0u zUFqp>?&<0$;QgKL)S8%46h}!6^3ms@)tj2Y(7p|X@`0MGumBQAg~&-MjWu>s zCj0i0L6WUUW91%C~7^Q!>$jnwOgR)iY$> z4`+huniE*+x}zFDl-w$88V&^ogqP9mW!7}io-5#$k*uq% z!469Bu8U`KC|^i=A2LbrZ_*9JW~um&rZ#8H$ILbcQu&&Imgx${=)9mOf zJ;8Xam9H`wWsC26>g3LI>LRw#2f0)v;Z!R80MX`?tdp9B0FcUUFVSOIC!J${PXdH* zowngbB}VE|3Ea$vZJMpwZj$j}$~C{5iL#=Q8YpbZI42~6M7>xvv8jm=#7YC!OCwQ>$J~`G2u{|h z>ZK;u#G$nvtpu#rZH7y;P3DWFMeFBOu|~^uuPQfQ%0!~Ul~{Oc9SoQOUEA5`DrR-4 zLlLLCzEy=Lw2Yt}tn7ZSj#PVFBc7_k7|s<2BDtx_H8vBXQSFG!Zbr)r)F3@0&Cl-H zsO}XSm_GL6WsT@ooeXt7-=R}GOVFy4SM6*Vl4|Qs!PF8f6T@Sc$5D8_DJ6uult#pB zhP!3Agh5i!c6d3pDY&%Ec#lTQiTOzR2xiDCBU!`=pBa~?a%P9J?8f`n;JZJDs(jYQ8C(ktl$}4BRw@)Ndxj5mo4bA9#^^VM;kExG5N7Zh?iM z9!5(2YkOBU$Eqzsan%}2CK@E?&ueU)KhODB-+JeBv+fFAK<8AE*fVk|wT*VPj(26c zMuy5HeRV_W0<}}~1H^jmy z*M_gBl$V$U=1ZcpuzZ+Onu{fJ)O4h)=5WbYGw(zbE!>9r#>7E=lVdcwd*Ct?m8x75 z=Re%i3-wDrp>lQj)^AJp5#tgvRIqo;Z zlC8Dc-5ojA7_7}@wET`Zh5rnKiujghL1>T_Lf5iH?!^Yt8j3T*P*2gE8yiWHb@`MU zZVA}II^6Pub(Uc@TkD26h*uZQQsjm+`3!S?c2u{=h{;+Au>EG{b* z{OlQl)0~xG=d#%kXKMxPxP%Em7?6^&tdgVjmDtxn2{U24+!R}B>*-&#cy&Kd7k9h< zE>h23)Ez5j1cCQ z{w@D0Tw0^59-^#qF?Ta?(IQyT&@jAV-uy*pZe;XCYm?Dd1SAl`VN*`MeSQ5s?JGNa z``UY){hnyu)2*tP^EQW+WpC6bD-?)qI66*y7%hIWMM6zm#g1Bct36DiwRf%vrnh&g1vCjxlQkxtsqnbza79!l zi?}L%h$-Ctf>hgP4|M~5ZCtxk1xHLq;%?`>Vfsz6u& zn(n^-wP>`dc7^7AQbZ2f{7_5hdJIL=_+IEnW_Ghj;RJD@v6OY2k$uU@uKH*WkiN_H zYYpW9X(^`_QCF(6tl?XuRvimpi`7mtJFj+!$`T6v;d-2s!i_z{D9AhK&iby_{=U{Z zVL#}CL5+zLu{4;^WvEhCcirRXG7xkYwG=>8lksa>EMqckrrV(Z$g$UczW{_5mI*PZ$W61A4y(`xS;iD++ zWAh&>GL(>1d0W-+-%F5I$5X+g1qhj1pF|cJwFwCu@lujm#^RX;&K8M6TMQ|1)D0=> z+SCFX;~O(l&w(lf^?k4SQSE@uozS6c-P?D+Zbr=yhC&(HuRA73eTSx{*=m<;+BN=s z*KUTsdzZppe{SSL2Qfyq49f{?)M`Ak`D)GGv1uK~pj@)%P0|KAU%$Gi3mQDBTMI_G z=xeP547yozWqBhzgj^Gb%C!v}s1A$S2BQMGL)%)KVe4=v%?iU9YofM|_`h)x2~!hc zYEhqiuy!1g@v$U%O*KY{_n97FgO8*jt0cbeq{|jHZ7_0sMO|Y*;bFyBHjJohRkm3~ zf`=9NyxOkkG+p4{X1dxVh}|hGOwUW>fJZuFP ze$;waC3svaY7DxqTGF6V>bEtr8A}z?E6s~=XdV-IRE?}3)mGqKp)lr+`XQVxlvD{qde=7hFt7=m4CnT$=FW`Ah_LhuQ9xFAKnXY6}<5JQ7UfNl<>eB9NGgoD9r^+@3 zXe@~fYu0skCbjL)?*yxq3YlqI+YzA zjkn67XEpt%8bufNvBBri-R{B?FHYDJT(C8hVh4X!SB>~EfE2gATEbHgnbd0ZIWAPz zjD*>Os&MF8D3#|-ERVIfu?*nWbq<>G@-snh<$UW1BR)2r zsQKijo%n>17b)tyx2KNna6P_iuSYDvm4yAj3i=*IeYZpF$3Wpegq@^jB|D?aL65Gi zs0?CVpBI)Os}>n_I7t|_4LnQyhzj8-78i^)scc3PPK;9278*JwehLz&wrJP z6Ma}uOcpKhkzpVh){FlS(Lu(f5!4nI_8mn{aP@+{YlCQ&Vmsez!|bMa!WA_Qh_u}GVs2WowzSE&4`SQ}92Gi;m{8f3u64t+oGptX!#ig$#f>3?sm+KwF8bT9)j zN^LY`QrN(rnPxI@#3@?r3tLHEvxTTM=9 zOM~p4r!T28fQ3yBE!INs+L0o!cx>6J6S0M&QsAKQmsnMG^JVr6+GL!@ol2z+rsMqvBK6Kzi{oOtGPJ7GwNbMl+_(a?Q{$yk&0K}! zrMS`P6|QjROlxx#8s}zgsxX>94`^Cr4UEfEH>YT`=QYy2~%7jaj`UdD=n^dc2_FeBQMq6Wo~hf8fS~J$B=)N;vxa z$8)8A+oraMv02;RZ%cUnY#;Aw@9php<9}y+Fn#X485IwFVlCQPAenh$FC$yOcxTV; z@KINzCVxV*VzO`5x~`VpG+Q z47$g7HMrI+D|M2&+zWGB20{R`g=)X2NzFrLUU8yrW{JFCTCC4}CoaJ43E z9%5A}?2&v^!3*7^>~7cldIU0bNv{tl>$5sAXhvEI5UCviTjaW?M?NwEC7Bf>>5skO_J}5hJHM?sgVHoSV z(!^U7YgaY*_w=t^+tc2;s$=DG@K0il=? zF8A}UmJ-1AK9X^m0;S@gV|68Rq#~(Q$`X5P{D{fBS?zCSdzjm?7>ZD8GAeHP{Wp<6 zm5D%vpK$q#sz$}sD=RG7RW+S;?8V)#nRyL^P#w;Smpid4NwOwMb}@NbYuZm^`liuO z*4ciVSX8ZIMbQc;KkM0YHND1s%q4sEjJA!XsMwx>$Y}|eszlmR?ItoRH7U}nPN>iZ zZ|%A_CTgu!>sQ;2cDz}S#cXJ5oMk_~#GGQ6F5Mml(8+YXRa`1*--a^Uudcei8-8zF zjk{h-b|X2z@iLx`GTqROpcU?iH94JmnJ_~eSaEM5jRr?DgPTi)iFUo0nF`k>C}CVi z%GA2b+aD~h*?}NY?^@qVY`fw_E85+-& z&-pfZ+v>fU7h$`%Um5k0sVqcRyBYU6va6D$S>FHN2_`%%hm{0-6o@^uTGbC~tu-!Y z)JAzl!`ddsU#cG4-9Rgo?sv`9BR|uloVuBCj zo@O_@4AOeTh=~x(U4Ph#wx{?amxdiRh7DY9I`^KgMq8+77Imx7W3-DtliX6V}c)3I!9NW10I-`78Pk&Bh8*u?FM{uME`<}70|0OD?n`BzL<#0tMJINT;^Yctwe z>{8Q?X_>lIX`MnIjB8tx?r7U1L3al=kX20360y#1HYr!OZ)#(oKQ-kvo&DmwAuZw2 z$>EhxWnga9E+Q`P93%_!%YUt-5_3p`dhD|)|qq7Ls zGauF^C;5fNK}!O$B0x4*&3Z)}PjOuW?JkVFcWN& zyzB30oiCEs2i4~2{W-cre+rd5OU4=9q?VGr+T|WBijHjyqrcc*p!cV*S3Mui@a9Qn za&J0?lKCQ;uI!IutAA{NfRnIl`$a4auoFEwmMfQ%epxuyCWa&IuwMAYQ$uL&tMl?X zxiH-idD)9gkwvg2D3u=APo~9&4whbSpJjZ?PqAXCu$$HkDK;eS!mOIEco|W{sokAB z@m1v_s?};#16M`mlBxVr6YQ0tmvL3yYPnz0sK2Yr5=3sRxkfzDDraoAlZ2xr`wh*b*~l+^-N%FmBFN8+UX16s6tUs}&ZK z(6e3HcCX+t73h*kX;&%Oz6?aKwrYxjvyI4Pst?twanQY~W=Ac!SL2kRb&UICf$EyC z?De%y$hLL3WnvffRMg$*1rQE)u+ynrx9QR;obvK%=~qC4M&D@o?!Xz9+{lYt?${bN zHo4RQgAHGdDZy@=nVB^4VNdq_u>Hr1YcxLf6JxPmkfaaA(F6h~NHEb5sw=IBw?~$b zXbk3;S-j(+ac|uR-Xvz*-bj1r798B6Y3_{^suP3Cw3G8HFJ$s=qHFEq)wt5lxMT>$ zywOoNN6v=r3olZ;nk$U;tBG|Ds%!8$Zw<+SnkJFV9~y(f@eCUS+)|75X|GtfSFa!k z5ZngLg)nNC_Z80~5er|J26F?w&gpK6keUs-@`5t!hP!lNJNDSB?B}q64iOcIUNM#o#lc5w)wP;em%Pk`v|eXedufvNZsEM__@y*=e@?hJ9XW(hyDW zkTHXpDzZYM*ZCJMTsVKBiQnVlJ5Rfp!4y-=;>zX?zh~a(uj+PJMEalXGe=_5I$$#`Vh7v=S!RG@?CXQXXiwcO;LM= zu*DQibi&+oTYgbgs@(|}<({*9;WCVqk$l%)Q^I}pVkTUoMssP1EU`ol$3@UnIiP6e!)jEhvPb=e*d7q#r^rN}Wi|3|=HNWmJY|gm1yy}K=$t>VXSNO}ST9}Ogll3k!^~*=8eQo7p08}_XU7(BUbc0(c0M)^e|4;5v!|^12e@$ ztJ|H{rIXOe$5hbkCalioT%AN~G~jhFF!|I{)I%{vg_~}wEi+Ia4l3TXQ608V^t~;k zVUpXsMQUhKF+*b1)2&XhFa_HD3Hb^^%rhE~p>S4QiIf@`;GKLgw$UV%8xw7DGZteP zC4%9jQfsC<>Qzoobg{z^uSku`>*_1I*#qPTt8G~!h7 zG~ji{YC>phfnjxY#-=rt*~;h^_qB$Fi{XTtf8$H0Xs_bl$xdCD(=N%vo^ztpZXUzj zEk#EksjaeVNgmZW%iGSwIwvA7Q-|ef`T+SBn=0cxjjAl$iQO8Ll}&3ppwSM@P~D5N zxxJ^SyN4WUsm#=Bjwm|xJl?J{MAOmxjLE$5M8!5M0pZw<3QB2Wl0b*7_*SXPVD#Dp zE=BV^(W%xN^Hh8aMQm1H*j?&RDkoW^HyNtK5O=zsY1+gcx;`N&J8)XHym@VFZ&E|% zSc(w9$orU?J#nQHTPO2*Uv}bxCR^Iqo;80iQx!W2%KBcKmrTqZcS<|GF#|QaY~`5l z=mGpO>{YIL!}#UKuWHt-&TQYAyAurW%;lOu#N2hsp+ow2S{^kIQEO@UN^(7$I^Tbf zy_2Od6*;nDxUBtmjEiCwtTu!UoYcDLboQ#madD0v-Ck=idqG#%`bwVdrf)F^C;Ao( zO2s!0HsWk-UTL+yJATpWq069U!CVZVcs zY(;))vvk!*C{*9I1Fup`>ljJ2yU!K)#Upppdcgc41Dr;EY{N~YPD!-8v)0uuDQFt6 zA~!fqO|n-euYHtd$n^&@nf~|8%V;~$b6MWJr@8qY1LP!`g zjPIhKrTILjd{@}P`9x2F<|Kfqc*JBl$^(;rTGqsX!sBMh3Cs@6JEL0RtTx-$(d*pT z%it2s(j2TW6E1=HI?;%&?xa&yO-sVRBhc(uEBl-b9_3c}IMN6lCr{)|!Thbv{}fIS56yv4H4$nvLd6*I1AI5`QqwGo#P(+GB7GpCjJ%~NWH zv2n8}s-YEA14E2~-8@)i(M_Q$_KD8$0|-&B)Ts-dY|eB|OmzHyOq}gXU0Nv4?#gnM z03Rxw+>oBF5kqCGL3prH7l#^-vVV=a7(Ue!y^TPLqvo;kgztfAM3C7w!tuRq4oa-i zZXH~loM3MOPlKttaU&JoxMOy_<0gxhq;2Cr-7=JpbyoeP@`Sdz+LSVuvNzF`omp2~d!{6M`de0Xtm$8|ZcS@jd#`p}L|;<~S1|pw zj$gs7dWWmVcK`X!o$K27*o_rE=RfxV#4Z09{?m4_b4FW7)c(0cF({JMfs`BT#@j#A zOrAzII03D*d3}9*dVMFF6bdbN%PXZeFId<5#;%fdI=fR_t2!pwVuVDCxKmr5-F0no zUJvC3>zp;TL;EDl4uZO4Ke4mt0magD3#U)e9b|<|)H<=lR@WYe(_4AYp~SnL1hP7e zUf%NUx`|Z0@DOMQh@OKv?z%2G_dhME=oVP_-plg{3~oJqq| z>8D*tRT1>IZfvPbhIofj(m*-y{12USuU5E`JL1|jy%X6(=T_u(N8Olc91}kpi=`sp ztLkm5I@#D{A~gG3ntR*(UG)gXD1HBgYR%5FaN~wcI~UPb@Vm|0c_UYd;TIwGwmqxrHH}j;?zjKEpBFEgJkve~jFIqC+ zZfJ&+y;aar{4+2)@^;jz}rG)k@hB*{plXgeaE^)_mR)4R>6;_+DA%zkqa(e+h zLo)Z-S>wI_xWA|XF{t9D%8dzqm}_<$GnJA#8HM@b(Yn~XrpP8tUS<)e5fi;!7!_0% z65p`6%I6l4!bFlzBKFEfZ(lb@i7)Ku18f{LhL9OwjtIBy`ga54_QJz`Y`X?eyctfr zS}}VrjR(^XPIL@Cb`ris?26G?E>J<&`6D0M<;Wf~Zyepq@GWo+k^A^1$`QPcN!vlVcfD z8|Y22%M7-@JCw?27z5|F?}1b9b#gam_rcgxrzy;u#N9 z;sQJMauz4&JN>X+xpvWZkufH7GFrtQQeH*Q+pV6B_BoBetO@9iDJpB##Fbi-Dyz63 z%?$8Cukb+QSXo!cVMjgrmx%B($GS*70N!8qPdo8gF{!dfr^<<~qjn;YeaF&G{(1fE zSc!Gbd6*a)TeP5_O_knUW}?lwi+f^kS3Y`o=?@08?o+aw1GMSjO2B=f>KU3Cmbwn` z1xj;tqIu0o{#PD`8zS8Fv3fgq?t{LXNwJ#fUub-bjqG-0EcRFf&q`vr9Y(RDQawLP zk36pFE;rv8&1l3!Q8_l(%`W=I+|)RmYM5QjRE4>fQKmaPRxMM!B$8lEd8y*G(DK;H z1=?g(WyWnEa~;0x$p`)Nfj1vmHvF37kF!~&v`+yj+2zQ@E!Eo&_ z!Hjz!?jp9WE1Y|0@l|&jDk@=cJ^fA{aD#isH8p_`-&YR@UD_{NavKMWnebUO{vuXB zcgyNOR210Nz=0^y0L^{=xN`a%dqtd%-;6?`lg`$Wf;PHqijUl5AkJ5IFV?$uQF=5} zLw9tNvYyqPqa2C)6nzdv?6(+UN`qfLt=NVxGvd@Ysoh(KejJO=~znW zgThJ%KQp|6Lfqs&dB0I>3HrFHb*Gqi(u?9OJE}weJa?zwnHvcWWc2m7@MvC~=9F{) z;2sC@sVxO0+OYNOZ0m2qBM$byVCh^<2*tk*si^^dSOWhl zSuPnhe1Lgv;&EgDS`*4i_bl6VO3GqV9QS}@cORXz#E&GjU8^M4x#!pE#7suG>owvH^wM}PC6Df*D^W} zs%PD&Ywd?mh{|()7AZNzTQ}#-2t!-h;_BPv{(kL_qEEIO<)%u*cOy$<9E9j%;l3fh zcAYz@(8s7TW_;uABi4RRcPz-p&fLU;1KlF$5A`GCQ#d2TrBXuC#d%* z9F1qk=56*_#YRehSmu~MS`eE%_b-9YajVkIO^w?cht%vhs&az0BucA}eS8j%5OiKz z<`wM{GN=1UnBMuf%!#2v}`u~ezrXr)rB*xJ&Z%Z#dK zJP|gQd=1-mFo<04G$V>?5cXbf(MggJT6)JmmA+K_5CX5|Hop7LEUx8^dM))3ZcZHj7VcNy3M|t)b4!itKA|Vptw& zEVt0BQ7u^}cI&BiO@zmZ_(>>c$apbJ?%5QB?YE|wFCQ8k_lGs}I9d+X7VAobW{yaY zM#+76Peu{?bjmERqwxBkW^|oSCcRV>1yu$z`7P`#EC$k~_nnepKt;J?c!De{O}C*T z5pOIKVY)?MR-lNw1zGpRrHDS1UP;MlYB53kzeOE@Ml>a=3_+`>*Hl+Cn5esLqDePW znPAfC%5Zpmrf(vmZp?KUJCpUih-jzsM-rvwgge)K0da}NIdWOuY2`hJ@Vuk?CVc@@ z!iSUB-d{Ues@el)M_Dtm{+@=7)!f)~KHQNR->O0D1kVW(GnX#QqxV^g88#l+P6s4? z^*T81mN0_WzRqB9l(S;wyw~eq+cQD0mo@ELb4w;&UYwT#rI!cNv@ocC>2KgRqqNz{ni-jXvWxD4F-zE?X!qvc;2e(|0}O& z#dd+aM$Dbp9o5&tVs?zmK%YLinIpM5A0#=NDs8qJF<~*^jAoaWY(T@~5w4m3_2s5Hs;SLpNbxW2)X+ zhBf9iVxd!xj|6Nq-jZN%6Fch>W?cuO?hfIW4;|QMd*oR)xOOyyTlT?1SmB6!RCndN z^_<(he5SgAVRu?zNH0Ex!p?9hJv+lcO5Q*yRD{oLcMtwgYZ!EgHdMQgi^ zRK6SObeP(ipf$HzZ)^BrC#K%qv@Xe=VS%OOR$Da)w?U*v=JdQ6QT93$OPmUsRVp74 z4zws1_zH$qXZ5_C{>8f#iHZJ{lkP3mt$Nq4-xhc4dsl5R@-?(*DX=>p^Ujq!3C36F zP2r-T8YLS}#ezvB{ocfIsHG}2rOJex^b5s4R?cj4)2++ctVh!3t|;$S_N-mwgkiPo zm6WLrpyhC7*ch2$S~YwfhLr#vK2oVBu}D>%bkZ8xrrH%v0(p~UV_3yhXIm<^>i329 zdd(R3Y3-KCo)mSSf))ouext8omC(q|&46KoHjtct%=QYkft8wm>9=F3V z*;N|Orjsq@;Zm}%fPwNbpK!>tH6mA9KAbN%GD@DZw!1IcN~5SoF4=~h)fCK|GiPyf z&RP5ga~C!(Tr_jeS@Y*$FxivY;#Mpw<}kD{Id4%gXK~Y<{pN0#zC>Le0yr7P-vt*TZX;-aG5bgvM-YwZ3;T_ zbP}18J_~y`2OT)q6vT0!CbQ|~IX+KWV&|N;5WC@iW1g4FrgU|5wO5j4ZsVLOt(K0- zJ{IJgI5lD0_-s}TviT+U0&Qk|X-98&a`EDYXC>!W49iCZ`D8o0MYLnMDOk+jx+#gt ztXgxhMRP7i?-jV6xvWF)K-(Q771?3`BOjD6xPf`hPPoTV8zU!gh#Q*iA8ibrr;|hH zBx)yh=8Zm#gPg7b&~){=s?@W2m6r1&X4tdYp&eD1%`6}X4GVO9kIH1jf^D4kjRd-p z@|Bp(+2Tz>(8ubP{0$V4WOII)@p3BY%M`PlQ{&0iv@KI6yD+wOcACgHWlBqiQx!{` z@XR@iZYkP%#OK+Vk8!bO6>A*7H<|9`sG)jSWo6A%_Ix1}|=2gKmCl9%(GzQH`!7>$0J7b#0%Vua+Fl~GqGY`BB zsjfuvadp)7KD#J`%v46^S6G7WqR_fU_KGF9jeNH}X(oC3VkGMXzJ&6o9Mxhhst?;~ z0FkaJA?!#TFS7!pTuGs6tG)&=^@n)5=x#6y&lSxq74Z%tT%@ z`|15*s6tAcBfb<6h>31QR=uG;2{pqTq*x0Op(LzhDs&S=>kK|upL%RVA*txPMwO{H zcY=6a$2Z_zsqJbhTr=8|QTsJk80R$)3Ly02=zp=tZyE=XxcpR?mgoWk|pxMzA5KX8oc{J-=~YuZ}GPCR`woyU>6 zim}Lmx>Ba_Wn{P#7T$Eo(s(K{)Umi~EF;Vvr;5qVnc}6XfQ~0SBu$D3^)3D=YR_p2 z5Vnx2XkcsY`<5u1E^nrdtbNL&OQi2pMhnQK3NPQ3bLDK{+6c*9vTCnpEY*r>k_oCz zE~d#8pGyMm5E)1n%X&1RW{V5CxQ!81S zF)z6BT`f0mP8XfXO9C{(*R`qqrRp4m=!Oi}&^HL8aJYa>NthHX&-_mUt!^)%5|o|Z z3VS(?pmQvP{nnby=%q!kDfGDxHVAs%hEwVEsP-r}uDO>^z*nO4o2MjBJ$toUUR(UI zD&v-tmL(c^Zzrs#Y%M7BNpfTXD^0-$Hyri7cgseX{l0IFDyND^t-&f+Lkr$b6`?B2 zGOQ(-{sMvL-E1Jw7?Sz|W<7&1M!u0OF~p%8p$3GlpAu)H%h8ZE z3W!3${!;fQFAED3!ZOi@54s!p?T&e$O?q{rtDToIC)!CZPWz2h_-SaN1$%A!o?ixkLhWa&O?`Gu@ z8Dnd(IfJ0U=Xf)WG>83I!Pm^tsuju!(dp@D8or+}_jk6lDLyhC=5{<#)}UDhBm?VY zahFCMQ~*YLtO-XAq)keO^OUZLxU$QU*DBvp+9IbTj!OIrH%IG*gfJ++;KfBVD!!&E z2K99SL=zoZq!vRP7JXJ$zpmgCKfZ~m+JEnp8=m0}{Zop;6g9%?!i2=DF+Ye!8J|@r z7(+C*?n_zGF2kC**SMvzxZh}?B4Pnp-`BpTx4FN$x2wOG?@D!cthg}Bu_Yv0ewbZU z3>GSFvAH@}7%Xhw6aV(qG20QLfSQLccWVn^-HKs#CeI`hvl?!qMCHdul9j?3Hd|^f zYT{AfklL}`G`NGd$0pPw*VEZtnW3a)mdz=8dsZTumS3utkwf~bN^vPWK)=jNlQsfr zt#UN$kJjWoB*nldl4@(%%hWCTyH}i(L-|6|dy`3e&y(_;g6Il7^9uf>?sj5WO?YF6 z^J{2hMJgmknVj`|jAM`Si?)py*zRLq7wg>_Lox4MOnDH=-q5PJE@3Xl^XTsF)g z(u|$AGsg4jtXGsbr`$)zePg43E((Zc%1nJGGOR(={p}1d22>QSc<2PTl$EHG!V>Fi zCl0;b*i455U`*l|uISEYFj-YcxEvj@;(_P1zb->|?Jj}PsE<(X#BsLzhDk-Ypy{bm zi6QoBivKR$&aEiic(j}D?pC-f*=ybqc6{)O$dJudJogQD+bbG1@JYWUnk?kfNw;Oi zrILkB71W6}dtPcerX&>bng~WzUMTRT3~PtwlDhPmEPy!7(Frz-SJg?@tH=6$FhQ*G zgt6jmq+c)O#)MxybzX*|uJ$! zB4OE3PuB5GhV2^VLnhYJSA{6(eb5~)Q z;Gmj~I_~W>N)yXxZE(ExreG@4c7`SRC^>3PG6Wb)v01~7{>v=2xHcSkNlWX|T0cealkTlt;aC+Iq95V~k-FYnfSOwvA?}0``az*im5W z+l{iYG8EnX|7ttarZ|slkI&oqQ%tHtSxOnSSkiUm>%<_?QUXB%a+LV0Ml2)1Ai-rA zNAjn?zyDeK>F1dl7TGs1V)0D(>FxCCv!5f3n>!z8!HH|*I2uT7opV3g^BTmD2jIPX z>`v80q~bkD)sMy3-A?>iq$-CD6@9imqteOs0ZWtYQ>DBm#*9T7dkHIA)p z`k63=M>t&N;aFM^5leH+6fOs-@^?#7CC7;o8amXLsjxF>?OvTOSdQT{%%N~(*&u^R z+AWuYT)DjF(ad9ZmOxD;B{YIJpj-tptX=RKJ>OL#}H2VnZ z`RGe}ZU>2KUs^c4F66dlV5dhaH==>M~DE@w%W96;37W9=o!yF3=8}*I8Ark zzY0PgLg?^}7WHo_Bfn)oxO*3ee(mn`L1x2UKzDBb=c#1cJ;z)xEf8uE%fk`Q@{{1f zvCu)_V}IIS&~ShVRTg| z7z$2b{Z2SH*kZlHcYkYTY4O?O3lJ0~6k=L~vh2fWWc~5S&t_xpwC`N^E!=osSaPOD zopLpic%e`vg$DU#Q2`xMV6m*j`qe&W9Hj0r| z3Aj;H#ifeF^%?DPtzcP^g_Si&9w5i=Cz4zF4c>9P)XeKhcdu-VU42^2rlkJ)`Tn<$ z{!5k>ccnmG2FC?X8!@gf!`AjT8FQY!*xFv%G*HWKTW4kFs8R5qTVvY33+)Aoj8LSd z@xv&^3pqMm^jD8~kjR0D#Yx^`5szz-H;X?Ob`xc{8ST)bamPrbDh@WHBc-{c)XFO5 z;q2-{u~ybZq@Bx@+RV69_a8D%N1$XZzIlcmR7?1@u>`|B?&OGKY$=o!lF0wJ$!tM- zhZGlF1h#*mJ8jV7D_2%JjkprQE^llPmjCr?agCC|IZ27d(Pbh0Eqzj6_`{-PZB8N7 zGO2=FD0pQaY0bun;D|#xWSbXblN5r3Z3SlRGafcRoc0h3uDV0fs{QyJ$Ob2bDZ|Zk z^4wlTpn6<0?)bKis5u-~9$&+?A=(P#ZD}z|Fw63E2yh^uJ<`n^9EkZnal%cTGUJ9{ zcf5AovI`x19>>7XHcsxPYtF3--NMfP>8`{?Rdxb1H>BO7aeu+zC$a$KVfr96l`f15 zlsbRAG4-VPy;Xb0S2k$fxn|NLYJU7z-@s$ue7tb>W*d zP=Kuy=OE!FR?c9(S$i_resVV%apR{#{4F~_+WUyUl{2s&)&#&VgPTw;4Vg-v)S@_= zaEJ-~n$5?Fou5wwr5Kako{B4p6udPN$AEx$RdK#+x;pxlD!BYnZZUKt>Dlo8Aub=fYI=ltPRc60p>wG%@>sZGB||99V}jELFTt0K~h=x8zmDC<6TqpA&ScfnSwlLcb-U{~A z;>+RN`~v|+-tE^mUc+cfE-scx^jbl!z%g;3puErK;EX!Tn_J{2jt0$HxsQ;euaWpN z12<9uBSx?pKwZM@=+`G+GULHM^dCL2QYEHz@=G7L22C#>=+}UNgh#ZCBs``LNozqN zp6mjHr~iHpV6FC3;5CDFfKBSq_KzywLqszr;Yv_x8DoV%Bz2aTRtIY!kgi9TLz8_of4hi_rjaqQ9q55Wf)FPwbEE zf#QF?R|Qs2vL2Tm*Stz%ayB$3Nn(o8(Rst=>XKv?rpWa>v#Ex_LMSWdhCChzd zh}}t{VMe!#cZ*$=8%!+#O?2D8IHSTF9)n^z3au$DY7nuGuE>HpO>&9gBzv{uO2;`h zZH$*Kw>cOx*u7nMS;7~^?iq0^DKY74Gb6cWUqex3_QJ<~{AKUmLt9PqMijvv#V3n(>$a#^#{0=n-u+V>*w>C&9BYaxuuLZTQ zKIW*dVF}DJgiBRWG!9yQa!TG%-S?t-49l-ga{9xSltSKH&obU{=>yGsp*%U z@u71W5THt{$&_4?d4*Q9-7B(4nV=dSqcWL3+4$`a;l-2X%lsXQk6Gf`n1Fh2uTKzY zw>B0xpD25e6Ui9u`QmEx?eZ}#+#8SLyxB3T;uiC#*%NN`uAT1w!p>JO^3(+r4k(HL zVjg2&Og+XoLVz*5{62dUotM^et4Zx;MP_czf3O;rx9vf-9&+6dGD+1pO6+Q_o-RKWV3s2>Y56)!~3*Qt;6@U`^Whh zQv2x`));XJ3etF;_hl7I=kzHX3g(`XifjJW>($kHWRa3Cdm0v~v9fp=oRCur(QrmK z9=Y9}y`A~d4$%R@x?I{i_!F1adBH=6?ur!;FzZX6SzWg0-G)C@D9b@U3DPP#zLohv zG0JOg#I~bQikWIOmvemQ$>?H+#fs*&zigggPhkDX%c~TAjqlGNx}q-~Ve*_EQpEDaRSj&J8~Od4vbO8B-yD4V-6NS~C>_vXRHI8m zHgKE3bUd)gs%vapdr{K|ZKH90_pX81RKT9%veg~-4QqY$AeM_fUoPMO^MWCt&`LQ- zDU1u&J2+e9 zYC?Bh!(`^TlO5uAQiiMpILKq*s#CoSErA=AhfA@d8$OvZG=%PFbT}{`o0OjWG6z-0 zh6>m&a6uz+FIf|+#O-G}Uvc5n(uIY;SL^rDm_Y^y~tSWz}VBF`QN#xl--Z=;T`d(w~ zFAw|9MEP1OT7Nm5E|~kj7mSht{N=$HLHS#m%wRwjhk+%5{E}5|tPI>3J|Hq?b7gC5 zKmgP#Nha>yzg@Le{?y#)6|Ae-cnELz2$i{?On2U#_Ds1!Grd!w2m zqcxW#Jt$j#4KZXjL(5m-L)xuJ-#1nPKBjGxDgaX{mkSBAW%E)7ujs$CQP}4=Fj8@0 zweKr(zEQSze_f>Lg^F8{!vxKSpHeJu&J6@PDjbE3sU$(+H7MjA{~;#@=C$(k9EC@G zu-1+=hY(P%Y9!NSdop76DU%X>SAe;be@6gQSFK~ilzq&`?vL1VK`849QLO_ggKyGY zHD&qpa>|&C4oq*^M=P=W0o4)b3;7Fazq00gHbbovzCJ)V_0!A|f#00D< z<6Uotxh#X|UZw80ockFuxl@p(9ZK?KeQkM>w4Q!*jU+jUmIIL4+yWOY6P|FnQP|46 zo5xT2VS`nQXWodD@#Oe~oxy+~nsW-(7Z0Q}_=n%X8c^_Ft&0?EGJ@vtZP|6VY~pri zLO1r1?$hz4(f~|!Y_#-^GN3m1cIb0GX4ADApt2h>d|<`IsIisWo^kkf^^M~ztV`QU zFu6~{@$?sPXxQkw;3m7pIZNsLNrHM?FJ3KtV#?FB=>p(XE@{a`w=>0u?(M)zyLq)5 zqH^!4w^b`^Onh-aQCQ?1jW4d4@gS5oE=~nN<_C*Un+hd=oS3~I$6=UO(9YwFL#&gW z>!_Z*BjYG|FSB{xJ63XHVv!@xPUU=S7SxF$lB-Vu%BkgjJG6Ih5iYYE_AQq~(%#xZ z&+X%fdpO)X9x+F^Z2RHFj%}fZ(t}nSXEG^JuS5v8-)1L{6CHD|#yP-i68$s`i(G3& zxd@*0pAXH8Xm0$NTxqkXR~jo165ANA+&sVEVBSf37KRD|^Cc?25NxK>0=zIfqjUm@ z$NTd6Ob3BM!x2a8B z9zB`di^Qje;o;!@Il)GQ!~M+hWQuoF-gv;3oEaJHy|QF{L@SG;I#%ZJxFqZsj4M^7deR<;^y%NQ^K|aijUX(Tw84#+~e=jIg{Fix$EwWx|or0dL4+ zthA*OTZKn8FzgzNr>=sV{K)DD#!a-mzg*Se#~V#WG-Ra6F4gD}=9U=4bmiGC)|4hi zB>?0eo8CYz%hP22%3rzHVxMVbuW}3)XiVPbr2=g7r{6KNYXh5X=o2CtM>$wG>}9%uxa9A|yTmndYNB@}X&T8q49*)% zxb2F@D6$@w0PkZwW5%ZxwVm~{{(}Jq^K5!@M5z{06N}cAR!b})@c`D;CuC%?%si~3 zGyOk7M)y|@w;iJ@fkU{5A8=u<2BQrSYyj60^4oFqN!HP6O<}35ANJuPwKd11`KYW` zre{>Y%F&aTkL#NhKCaA{z_{i6h85B^B{I<)^7}1}UxTrrG%jIAuANLQznJr))*LEvi9Q&x^2mu z;BghIV1L6|HYkPRwMoprlB6K6xtZ49 zx8a6>jK33YNp)1Ya=ugS{j}{h%~X=G;{Cg@hwJFUa2mF{F01s2{B5lc`S!+B>>-}c zc*UN?iF`ii@ApaDKgmdQpyqV(+1<#Smzn9;DRN`9y{ zmuAu1bs5QKx{r4TNH|BhZ;U4Y&zkFt>pM<_eOoj4&R;QCuiKD80H|#lSJ`?#?*HrG z%pD%|)5_ z^-ps7HDL9j3-@Wa{gLGt?69+SI)i=poBn5U z;}po&e=eWutVfA$^dJ$$oN$1Q_{S7-ihs%#1GL{b6R4#4b`dJ+SUwKA99O_IS;uTs z2-r$K8z}jg`wt(6c;RB;<#2Q{#B_Y7P?YVXt}l5suSOET*HuTB zm)A~*G~HMcd2`G}&bVTZ9N{mYEl@1^P(1bNMDuQLKenrpYliJ7z#1!YXr#>xL7xeDy1^5Iw0jK$Crhhgh4|J5nZSJWi|yJ2Z!a~V0zb|GBZmW*!{-v{HxsKQ$k03FD8g&<8z_rO?-Ow2Uxm5eu<;N(2ZBco3qx$5Sn{wBJp+>oT8u7^QG)CC3!U$<@kH@>0j96m|0i zpq8>XVs$iKf8=uKtlLI)B<=SlZ?5^R`P&6k`Ax(j@7ib0$P~JE<@+H|{s(gxOPkwY zP>OF>9J*k`yD%xZwuj9`2mjZ+h@qpTP}Ix zpiF%_5nJ}l4q}Y2B&4puH`Jz}Aorlx3RwUk_v+jG=h6y$3g7r}f8xuh>dQ=@=KtRI z7<1|yHcQs^V{|mwfA9Tw>+|1xKe9;FMvXGAds9qp+go%aT*!-%f~Zo^qy{73jsj5I z4VC_4qUCqqP-WdpHh@MnlfLbHWsIW&07wplc5<{Ed&&_tSzs{P_7($3h!LqS5Tg~E z8}rcXtqm#EL`slAGEUlZ$E<#PfAfw~7roI9&_BX<-EE%;ZTj{k*2&I79>k#+?ILtx z>FIKx&pRV(TUvcU%Xq;jobmHV6FG|n%Dcv_teM?^uB9AY6`3xsJ^qVuZu!tL zKq}b8BdYu?OW!#815N6Utv0EQgkj?2FAPR3eQ%lSaPQM-^eVEiD^1shTd5&IR_v^Xw*Wd8!gtJa5A>{dW=;aej(4KT+w-9^lKXWMO z5%%p^CI@omS2IN8`s4lXci}RX6PVE;`1Q+89aH7n55i)1hooJtvm@`+jNYAwekNu8 z2YL(;3UgQ?#meU9`X*a?YVBzY5zXcGvwRjTEnW~>u1&JS4Ugn0ZhB3jqlO>(dBLg*)|{Ew z^!s@M!5#I=Eql2gQ_se5qLe?-!{E;|gyQzwo}cK7O72o!^iO0mXFc}U=1+^gXQUfk zZMfrj*9%kj`~}>7BVWRfx?wYTYdz$oT*BIAN7xl)povi+l*+7b}M=vR+my|9@u6#!6RAT_Fkm< z%f~Ir8d0PvIU~M-c=}jM>#>r1M*2{q=T3220y$x^Vc8d8&TF-mUEJ+OD%@<}k8Lt; zlXiZQR7}`MwC}xjlnheN*WWg>ELR+t{xfl<8Y~x0%Cb*OsJ%Y+sJ?i5erN57MB9e4 z`*$P>rO4+)aTJbCv?ddp5^`f6p)_a}`ehD9hq}!8lf5M0zVcQo8#fHzQSTKbNZ|hz z0*X}4YxYzB&+*BmuJ|_<$;|y*E?=o)oX^yaOXeZ$B7bkmkIUzo$tAmP5QrlwH^u;- z-O?x5+{lUif<2c;>_Sobam^wVoE&bO2w>dSybFwfMjo>AyX)tQtvPWDAhFW#aZW*d zQp!pqc3XN%wpf^F+RhvIpak=RDI+%)x3<<+o;(i}0qD_8wfe?(*2XinAGqui<<@hR zwx@z|dfwhbemP`r_5#>FZZdmRGjqP8IH@8T651RPmU)O{yE! z+krCpX>s-S$``|Wy7|-fC&cTX`pYsmR#n5e=5#KB1PR02&H~F*GA_6L*rhp*(>+0g027{*qD&4KT$w>lP*F1DkWF9HB>naE*`};=|0G?;saW2tS0MPjz zPC{5+zy1_}KrTV!FzlbBoKJ4-&DPVN4CnIuRs(=PVliYrkVL(ftov z3KO~cN?=c&uif=G0gow=giNX!CC*B6;>|*2P?&~pTPdI17FLT$g^ltU>8yuj%6YXr zOs`C|Aw-_TJh-ZMGd+mO%#3BCVch)EG;)Zz@6_K>sik30>+igKToPr!40)Ot&I{ra zMFtJcJj?H7%CoROY0B%TiMQ2etDyVfKYb?6%#2-f);2cpYsL0&;_rC=>kt$nvEBH5 zZ`kN9rEMLZQ=)cjxhlI6tm%M{gQdl-l|ge$3%{w_gODNIXD2+g%8vU~VzLMxEl#A~ zfQkWqIfM^FHP?IXdD^R&G?zU$`T?;43D*8w_1%)s2&RoK=kT0*H!u$%hKkoxC604yYGd|sxG1rs zwqX}0Y1+2J4?MF8aQeB|!F^c?OHH!0N#JrhQVeL|qFcrJ&-8i+>N3sQa6VrkOL)_aSA(1K8c^)GZsWZg| z=b&JLt*)0wswX2+4&+XSJ(Xb0Qx4}73;eLE2;Y0w_I8!UxDp~5;pvG8!aa?;#$WZe zz4Xo&HiDgl_6;MSz}ub`_PvAji*3bZ1Bh9OzuPVQMJlsn%7rC{HXX4fbVtE1_(8{= z$8ZuI^dVSy^HIw%x2^4U>aac>Q1F=?t?>InH9Z_6NeSB}ZGCX{p1<0E6G9SX6`=Vm znxQd%53Gvs~Hq;P({SH7T%g!<++Fmx>%OIY10cQoA2y|9#l_oMvV~aDFt_wo^$DeU2YKpa z{*`>ssJgsi-iOeiUay-p7ZW>b4vp>pkNar>kitE+ZfEG=rA+J0kr1Yfb1EX@zPGD- z>84u`nv$VE-Ic9@+@7b3OAOhqu4i27rKH*}`n%nc1TN?E$HQ|{NI0RArN&K}li9)L z!C5cs24hBa)!Fd;14knoTm#xRzJQZK-i?|Km&~7O#2m#pHQv(_NGt@#7C2u)Xbr}! zJzt4y3+>$kP@@Yclkc$qkz~l&M{eh%UuD;C(<8j34?Z$=j|zu&2DdT(K<)qoUN)BJ zP;S{>`@1vT((IfO7(YZcE)K{u%a+n z8(2n+B*Yd3G*>!)$VKRo`zZf+cP`A^(hvi`PH0Gx#7!KvA1GrWM*H&l?{y77i0TTz?u7;XWV+*`yWO6*ZZ|d3E-vGmyJ#=os{)MtI|l3 z)TjbV80BCO=OG0o7oVIWuqJj#eI0!AN4;zJ{*4F~581``fm;y=WsHz#e26_B^{^ih z`$jDBK2e7wayXrQdOUac!O5q$GUk1{o#fTn4K;RUzInf-i?{<*3%UEK4T=h-`9GM1 z*OQ$3Vdr?5)hHNdbUVDs^c%D!f65F)s_st7?`RYhwehCXpbWN0R!J396`Jm8pg%K)J7g`I{LFAP#GX}lg`Q7eoEzO?n{PwvoIY18TJhHJugTXE224v8|VDDo0th>cwD4f-0c+(CCXT80%@ej|R+`IQS|8+nAMfU5ry|S}c;6f25 zyxp-sBSps%6cv%8r;1#Hy4U}3G_w02GIOhva?dme#*9NKB|(G+zD!7&%D6l(Z>Jh- zF~i)7okIr9=<09m@DqjV^2Li1lQEc4>N0>ImmKLclLARNnfg8`ioy;oP8XWLjpI8(r7Tit7QL3U+Cud5rK@jv zxL>2KIWNe&u>*teB3V-*=*EDW2lxt{HwA2i2Bo8(?xHI_Sm#J;Br0O{Y+;d%q-?A- zVZ1M%#KLWl{{Nh`Jk^oM+CNw69cDL~2!=P9ZAcgi$0JVY=oCF|`?MQHt>4%7QMbX6 z*}^9rH#!;IiB@IF*)T-F&eZ%@=#bY?48mD+A%Wj=L?^a(uNlbqych3JXFNB%x7S(J zIR4|&+5O|l5Arw?ULttuHLFZqQb=*z?wXg&KFWT#K>1<1<38p)9{q!~3yTZnqmt?D?EivSnf>4&qb0g%`NKy` zE7TgzY3nWZOetSkK;i7peQdbQ^yF==}N zZq!qH_qfv8fJ3`r>}oDE5keFlAr$kZO6^VFSwjDGHxnm-6&-dwF>M>R;in!iM(Fa%r=APP`HOvfJgwp5{$$fnlPx&|fF`&c z$i6p$6Eh0>t7RPjpmHsy!)jm_2%RipkEjw|~_EEtTY3nqY8mr6y7wnHk|a&aC#cuCe* zoRhz8^SItyKQCIkSh#`8|G- zw&$i12c~Qf$!?W6Uv^HaP*?hdEHu72Ewo{@hwRS%F>BmBnO)95&%LwoDP&Qai02i77!Viz30tK;6cb3%4@Cs)@H);d6@BPdTY;VeRX?x9&kJfUem-V z>F<|fCS-I(TZVHiuOv}AARU|$h0S=teI5!+Hd9hCKQi5tJA?ZOtcJP-ALlQl?1Cpe zkGjCQ;?SB-XXRp@$=dY~_D6Sy2P4v4k9RLVWB1~^TWSDlW4n#Np4%fWmAzd-zHLXncSA1x4#ABQupp<4_9q9jxJ0|-k! z;c_V&N|C$cDczD6sXGO&vV59$6=`IuV0fa9&GlzXFSfT@qgW%^ieob>{V$V*)I<8K taOQr4EOApq9Y6LC%Cvz~BJi0pXaO5Y|cHhUEioJ>I#{|~_^*lhp+ literal 0 HcmV?d00001 diff --git a/bfd/po/id.po b/bfd/po/id.po new file mode 100644 index 0000000..8659962 --- /dev/null +++ b/bfd/po/id.po @@ -0,0 +1,3837 @@ +# Pesan Bahasa Indonesia untuk BFD +# Copyright (C) 2008 Free Software Foundation, Inc. +# This file is distributed under the same license as the binutils package. +# Arif E. Nugroho , 2008, 2009. +# +msgid "" +msgstr "" +"Project-Id-Version: bfd 2.19.1\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2008-09-09 15:56+0930\n" +"PO-Revision-Date: 2009-05-26 08:00+0700\n" +"Last-Translator: Arif E. Nugroho \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: aout-adobe.c:127 +msgid "%B: Unknown section type in a.out.adobe file: %x\n" +msgstr "%B: Tipe bagian tidak diketahui dalam berkas a.out.adobe: %x\n" + +#: aout-cris.c:204 +#, c-format +msgid "%s: Invalid relocation type exported: %d" +msgstr "%s: Tipe relokasi tidak valid terekspor: %d" + +#: aout-cris.c:247 +msgid "%B: Invalid relocation type imported: %d" +msgstr "%B: Tipe relokasi tidak valid terimpor: %d" + +#: aout-cris.c:258 +msgid "%B: Bad relocation record imported: %d" +msgstr "%B: Catatan relokasi buruk terimpor: %d" + +#: aoutx.h:1268 aoutx.h:1604 +#, c-format +msgid "%s: can not represent section `%s' in a.out object file format" +msgstr "%s: tidak dapat merepresentasikan bagian `%s' dalam a.out objek format berkas" + +#: aoutx.h:1570 +#, c-format +msgid "%s: can not represent section for symbol `%s' in a.out object file format" +msgstr "%s: tidak dapat merepresentasikan bagian untuk simbol `%s' dalam format berkas a.out objek" + +#: aoutx.h:1572 +msgid "*unknown*" +msgstr "*tidak diketahui*" + +#: aoutx.h:3989 aoutx.h:4315 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: tipe relokasi tidak diduga\n" + +#: aoutx.h:5349 +#, c-format +msgid "%s: relocatable link from %s to %s not supported" +msgstr "%s: link relokasi dari %s ke %s tidak didukung" + +#: archive.c:2046 +msgid "Warning: writing archive was slow: rewriting timestamp\n" +msgstr "Peringatan: penulisan archive lambat: menulis ulang timestamp\n" + +#: archive.c:2309 +msgid "Reading archive file mod timestamp" +msgstr "Membaca berkas mod timestamp archive" + +#: archive.c:2333 +msgid "Writing updated armap timestamp" +msgstr "Menulis armap timestamp terupdate" + +#: bfd.c:368 +msgid "No error" +msgstr "Tidak error" + +#: bfd.c:369 +msgid "System call error" +msgstr "Pemanggilan sistem error" + +#: bfd.c:370 +msgid "Invalid bfd target" +msgstr "Target bfd tidak valid" + +#: bfd.c:371 +msgid "File in wrong format" +msgstr "Berkas dalam format salah" + +#: bfd.c:372 +msgid "Archive object file in wrong format" +msgstr "Archive berkas objek dalam format salah" + +#: bfd.c:373 +msgid "Invalid operation" +msgstr "Operasi tidak valid" + +#: bfd.c:374 +msgid "Memory exhausted" +msgstr "Kehabisan memori" + +#: bfd.c:375 +msgid "No symbols" +msgstr "Bukan simbol" + +#: bfd.c:376 +msgid "Archive has no index; run ranlib to add one" +msgstr "Archive tidak memiliki indek; jalankan ranlib untuk menambahkan satu" + +#: bfd.c:377 +msgid "No more archived files" +msgstr "Tidak lagi berkas yang ter-archive" + +#: bfd.c:378 +msgid "Malformed archive" +msgstr "Archive tidak terformat" + +#: bfd.c:379 +msgid "File format not recognized" +msgstr "Berkas format tidak dikenal" + +#: bfd.c:380 +msgid "File format is ambiguous" +msgstr "Berkas format ambigu" + +#: bfd.c:381 +msgid "Section has no contents" +msgstr "Bagian tidak memiliki isi" + +#: bfd.c:382 +msgid "Nonrepresentable section on output" +msgstr "Bagian tidak dapat direpresentasikan di keluaran" + +#: bfd.c:383 +msgid "Symbol needs debug section which does not exist" +msgstr "Simbol membutuhkan bagian debug yang mana bagian tersebut tidak ada" + +#: bfd.c:384 +msgid "Bad value" +msgstr "Nilai buruk" + +#: bfd.c:385 +msgid "File truncated" +msgstr "Berkas terpotong" + +#: bfd.c:386 +msgid "File too big" +msgstr "Berkas terlalu besar" + +#: bfd.c:387 +#, c-format +msgid "Error reading %s: %s" +msgstr "Error membaca %s: %s" + +#: bfd.c:388 +msgid "#" +msgstr "#" + +#: bfd.c:912 +#, c-format +msgid "BFD %s assertion fail %s:%d" +msgstr "BFD %s assertion gagal %s:%d" + +#: bfd.c:924 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d in %s\n" +msgstr "BFD %s error internal, menggagalkan di %s baris %d dalam %s\n" + +#: bfd.c:928 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d\n" +msgstr "BFD %s error internal, menggagalkan di %s baris %d\n" + +#: bfd.c:930 +msgid "Please report this bug.\n" +msgstr "Tolong laporkan bug ini.\n" + +#: bfdwin.c:208 +#, c-format +msgid "not mapping: data=%lx mapped=%d\n" +msgstr "tidak termap: data=%lx mapped=%d\n" + +#: bfdwin.c:211 +#, c-format +msgid "not mapping: env var not set\n" +msgstr "tidak termap; env var tidak terset\n" + +#: binary.c:284 +#, c-format +msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." +msgstr "Peringatan: Menulis bagian `%s' terlalu besar (ie negatif) berkas ofset 0x%lx." + +#: cache.c:222 +msgid "reopening %B: %s\n" +msgstr "membuka kembali %B: %s\n" + +#: coff-alpha.c:490 +msgid "" +"%B: Cannot handle compressed Alpha binaries.\n" +" Use compiler flags, or objZ, to generate uncompressed binaries." +msgstr "" +"%B: Tidak dapat menangani binari yang dikompres Alpha.\n" +" Menggunakan tanda kompiler, atau objZ, untuk menghasilkan binari tidak terkompres." + +#: coff-alpha.c:647 +msgid "%B: unknown/unsupported relocation type %d" +msgstr "%B; tidak diketahui/tidak didukung tipe relokasi %d" + +#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1003 +msgid "GP relative relocation used when GP not defined" +msgstr "GP relatif relokasi digunakan ketika GP tidak didefinisikan" + +#: coff-alpha.c:1501 +msgid "using multiple gp values" +msgstr "menggunakan nilai gp multiple" + +#: coff-alpha.c:1560 +msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +msgstr "%B: relokasi tidak didukung: ALPHA_R_GPRELHIGH" + +#: coff-alpha.c:1567 +msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +msgstr "%B: relokasi tidak didukung: ALPHA_R_GPRELLOW" + +#: coff-alpha.c:1574 elf32-m32r.c:2487 elf64-alpha.c:3970 elf64-alpha.c:4125 +#: elf32-ia64.c:4465 elf64-ia64.c:4465 +msgid "%B: unknown relocation type %d" +msgstr "%B: tipe relokasi %d tidak diketahui" + +#: coff-arm.c:1039 +#, c-format +msgid "%B: unable to find THUMB glue '%s' for `%s'" +msgstr "%B: tidak dapat menemukan lem THUMB '%s' untuk `%s'" + +#: coff-arm.c:1068 +#, c-format +msgid "%B: unable to find ARM glue '%s' for `%s'" +msgstr "%B: tidak dapat menemukan lem ARM '%s' untuk `%s'" + +#: coff-arm.c:1370 elf32-arm.c:5453 +#, c-format +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: arm call to thumb" +msgstr "" +"%B(%s): peringatan: antar-kerja tidak diaktifkan.\n" +" pertemuan pertama: %B: arm panggil ke thumb" + +#: coff-arm.c:1460 +#, c-format +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: thumb call to arm\n" +" consider relinking with --support-old-code enabled" +msgstr "" +"%B(%s): peringatan: antar-kerja tidak diaktifkan.\n" +" pertemuan pertama: %B: panggilan thumb ke arm\n" +" pertimbangkan relinking dengan --support-old-code aktif" + +#: coff-arm.c:1755 coff-tic80.c:695 cofflink.c:3018 +msgid "%B: bad reloc address 0x%lx in section `%A'" +msgstr "%B: alamat relokasi buruk 0x%lx dalam bagian `%A'" + +#: coff-arm.c:2080 +msgid "%B: illegal symbol index in reloc: %d" +msgstr "%B: indek simbol ilegal dalam relokasi: %d" + +#: coff-arm.c:2211 +#, c-format +msgid "ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "ERROR: %B dikompile untuk APCS-%d, dimana %B dikompile untuk APCS-%d" + +#: coff-arm.c:2227 elf32-arm.c:8563 +#, c-format +msgid "ERROR: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "ERROR: %B melewati float dalam register float, dimana %B melewatinya register integer" + +#: coff-arm.c:2230 elf32-arm.c:8567 +#, c-format +msgid "ERROR: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "ERROR: %B melewati float dalam register integer, dimana %B melewatinya float register" + +#: coff-arm.c:2244 +#, c-format +msgid "ERROR: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "ERROR: %B dikompile sebagai kode bebas posisi, dimana target %B yang memiliki posisi absolute" + +#: coff-arm.c:2247 +#, c-format +msgid "ERROR: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "ERROR: %B dikompile sebagai kode absolute posisi, dimana target %B adalah bebas posisi" + +#: coff-arm.c:2275 elf32-arm.c:8632 +#, c-format +msgid "Warning: %B supports interworking, whereas %B does not" +msgstr "Peringatan: %B mendukung antar-kerja, dimana %B tidak" + +#: coff-arm.c:2278 elf32-arm.c:8638 +#, c-format +msgid "Warning: %B does not support interworking, whereas %B does" +msgstr "Peringatan: %B tidak mendukung antar-kerja, dimana %B ya" + +#: coff-arm.c:2302 +#, c-format +msgid "private flags = %x:" +msgstr "tanda private = %x:" + +#: coff-arm.c:2310 elf32-arm.c:8689 +#, c-format +msgid " [floats passed in float registers]" +msgstr " [floats melewati dalam register float]" + +#: coff-arm.c:2312 +#, c-format +msgid " [floats passed in integer registers]" +msgstr " [float melewati register integer]" + +#: coff-arm.c:2315 elf32-arm.c:8692 +#, c-format +msgid " [position independent]" +msgstr " [bebas posisi]" + +#: coff-arm.c:2317 +#, c-format +msgid " [absolute position]" +msgstr " [absolute posisi]" + +#: coff-arm.c:2321 +#, c-format +msgid " [interworking flag not initialised]" +msgstr " [tanda antar-kerja tidak terinisialisasi]" + +#: coff-arm.c:2323 +#, c-format +msgid " [interworking supported]" +msgstr " [antar-kerja didukung]" + +#: coff-arm.c:2325 +#, c-format +msgid " [interworking not supported]" +msgstr " [antar-kerja tidak didukung]" + +#: coff-arm.c:2371 elf32-arm.c:8050 +#, c-format +msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" +msgstr "Peringatan: Tidak menset tanda antar-kerja dari %B karena itu telah terspesifikasi sebagai bukan-antar-kerja" + +#: coff-arm.c:2375 elf32-arm.c:8054 +#, c-format +msgid "Warning: Clearing the interworking flag of %B due to outside request" +msgstr "Peringatan: Menghapus tanda antar-kerja dari %B karena diluar permintaan" + +#: coff-h8300.c:1122 +#, c-format +msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" +msgstr "tidak dapat menangani R_MEM_INDIRECT relokasi ketika menggunakan keluaran %s" + +#: coff-i860.c:147 +#, c-format +msgid "Relocation `%s' not yet implemented\n" +msgstr "Relokasi `%s' belum terimplementasi\n" + +#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:4975 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: peringatan: indek simbol ilegal %ld dalam relokasi" + +#: coff-i960.c:143 coff-i960.c:506 +msgid "uncertain calling convention for non-COFF symbol" +msgstr "tidak tentu pemanggilan konvensi untuk non-COFF simbol" + +#: coff-m68k.c:506 elf32-bfin.c:5510 elf32-m68k.c:3938 +msgid "unsupported reloc type" +msgstr "tipe relokasi tidak didukung" + +#: coff-maxq.c:126 +msgid "Can't Make it a Short Jump" +msgstr "Tidak dapat membuka ini sebuah lompatan pendek" + +#: coff-maxq.c:191 +msgid "Exceeds Long Jump Range" +msgstr "Melewati jangkauan lompatan panjang" + +#: coff-maxq.c:202 coff-maxq.c:276 +msgid "Absolute address Exceeds 16 bit Range" +msgstr "Alamat absolut melewati jangkauan 16 bit" + +#: coff-maxq.c:240 +msgid "Absolute address Exceeds 8 bit Range" +msgstr "Alamat absolute melewati jangkauan 8 bit" + +#: coff-maxq.c:333 +msgid "Unrecognized Reloc Type" +msgstr "Tipe relokasi tidak dikenal" + +#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:345 elf64-mips.c:1991 +#: elfn32-mips.c:1832 +msgid "GP relative relocation when _gp not defined" +msgstr "GP relokasi relatif ketika _gp tidak terdefinisi" + +#: coff-or32.c:229 +msgid "Unrecognized reloc" +msgstr "Relokasi tidak dikenal" + +#: coff-rs6000.c:2803 +#, c-format +msgid "%s: unsupported relocation type 0x%02x" +msgstr "%s: tipe relokasi tidak didukung 0x%02x" + +#: coff-rs6000.c:2896 +#, c-format +msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" +msgstr "%s: TOC relokasi di 0x%x untuk simbol `%s' dengan tidak ada masukan TOC" + +#: coff-rs6000.c:3628 coff64-rs6000.c:2130 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: simbol `%s' memiliki smclas tidak dikenal %d" + +#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458 +#, c-format +msgid "Unrecognized reloc type 0x%x" +msgstr "Tipe relokasi tidak dikenal 0x%x" + +#: coff-tic4x.c:240 +#, c-format +msgid "%s: warning: illegal symbol index %ld in relocs" +msgstr "%s: peringatan: indek simbol ilegal %ld dalam relokasi" + +#: coff-w65.c:367 +#, c-format +msgid "ignoring reloc %s\n" +msgstr "mengabaikan relokasi %s\n" + +#: coffcode.h:850 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%B: peringatan: COMDAT simbol '%s' tidak cocok dengan nama bagian '%s'" + +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1062 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Peringatan: Mengabaikan tanda bagian IMAGE_SCN_MEM_NOT_PAGED dalam bagian %s" + +#: coffcode.h:1117 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): Tanda bagian %s (0x%x) diabaikan" + +#: coffcode.h:2244 +#, c-format +msgid "Unrecognized TI COFF target id '0x%x'" +msgstr "Target id '0x%x' TI COFF tidak dikenal" + +#: coffcode.h:2559 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: relokasi terhadap simbol indek yang tidak ada: %ld" + +#: coffcode.h:4309 +msgid "%B: warning: line number table read failed" +msgstr "%B: peringatan: pembacaan tabel nomor baris gagal" + +#: coffcode.h:4339 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: peringatan: simbol index %ld ilegal dalam nomor baris" + +#: coffcode.h:4353 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: peringatan: duplikasi informasi nomor baris untuk `%s'" + +#: coffcode.h:4744 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: kelas %d penyimpanan tidak dikenal untuk %s simbol `%s'" + +#: coffcode.h:4870 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "peringatan: %B: simbol lokal `%s' tidak memiliki bagian" + +#: coffcode.h:5013 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: tipe relokasi %d ilegal di alamat 0x%lx" + +#: coffgen.c:1518 +msgid "%B: bad string table size %lu" +msgstr "%B: string buruk ukuran tabel %lu" + +#: cofflink.c:513 elflink.c:4218 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Peringatan: tipe dari simbole `%s' berubah dari %d ke %d dalam %B" + +#: cofflink.c:2296 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: relokasi dalam bagian `%A', tetapi ini tidak memiliki isi" + +#: cofflink.c:2627 coffswap.h:824 +#, c-format +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%s: %s: relokasi overflow: 0x%lx > 0xffff" + +#: cofflink.c:2636 coffswap.h:810 +#, c-format +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: peringatan: %s: nomor baris overflow: 0x%lx > 0xffff" + +#: cpu-arm.c:189 cpu-arm.c:200 +msgid "ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "ERROR: %B dikompile untuk EP9312, dimana %B dikompile untuk XScale" + +#: cpu-arm.c:332 +#, c-format +msgid "warning: unable to update contents of %s section in %s" +msgstr "peringatan: tidak dapat mengupdate isi dari %s bagian dalam %s" + +#: dwarf2.c:424 +#, c-format +msgid "Dwarf Error: Can't find %s section." +msgstr "Dwarf Error: Tidak dapat menemukan bagian %s." + +#: dwarf2.c:452 +#, c-format +msgid "Dwarf Error: unable to decompress %s section." +msgstr "Dwarf Error: tidak dapat mengekstrak bagian %s." + +#: dwarf2.c:462 +#, c-format +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "Dwarf Error: Ofset (%lu) lebih besar atau sama dengan %s ukuran (%lu)." + +#: dwarf2.c:849 +#, c-format +msgid "Dwarf Error: Invalid or unhandled FORM value: %u." +msgstr "Dwarf Error: Tidak valid atau nilai FORM tidak tertangani: %u." + +#: dwarf2.c:1063 +msgid "Dwarf Error: mangled line number section (bad file number)." +msgstr "Dwarf Error: mangled bagian nomor baris (nomor berkas buruk)." + +#: dwarf2.c:1393 +msgid "Dwarf Error: mangled line number section." +msgstr "Dwarf Error: mangled bagian nomor baris." + +#: dwarf2.c:1726 dwarf2.c:1842 dwarf2.c:2114 +#, c-format +msgid "Dwarf Error: Could not find abbrev number %u." +msgstr "Dwarf Error: Tidak dapat menemukan nomor singkat %u." + +#: dwarf2.c:2075 +#, c-format +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information." +msgstr "Dwarf Error: menemukan versi dwarf '%u', pembaca ini hanya menangani informasi versi 2." + +#: dwarf2.c:2082 +#, c-format +msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." +msgstr "Dwarf Error: menemukan ukuran alamat '%u', pembaca ini tidak dapat menangani ukuran lebih besar dari '%u'." + +#: dwarf2.c:2105 +#, c-format +msgid "Dwarf Error: Bad abbrev number: %u." +msgstr "Dwarf Error: Nomor singkat buruk: %u." + +#: ecoff.c:1227 +#, c-format +msgid "Unknown basic type %d" +msgstr "Tipe dasar %d tidak diketahui" + +#: ecoff.c:1484 +#, c-format +msgid "" +"\n" +" End+1 symbol: %ld" +msgstr "" +"\n" +" Simbol End+1: %ld" + +#: ecoff.c:1491 ecoff.c:1494 +#, c-format +msgid "" +"\n" +" First symbol: %ld" +msgstr "" +"\n" +" Simbol pertama: %ld" + +#: ecoff.c:1506 +#, c-format +msgid "" +"\n" +" End+1 symbol: %-7ld Type: %s" +msgstr "" +"\n" +" Simbol End+1: %-7ld Tipe: %s" + +#: ecoff.c:1513 +#, c-format +msgid "" +"\n" +" Local symbol: %ld" +msgstr "" +"\n" +" Simbol lokal: %ld" + +#: ecoff.c:1521 +#, c-format +msgid "" +"\n" +" struct; End+1 symbol: %ld" +msgstr "" +"\n" +" struct; simbol End+1: %ld" + +#: ecoff.c:1526 +#, c-format +msgid "" +"\n" +" union; End+1 symbol: %ld" +msgstr "" +"\n" +" union: End+1 simbol: %ld" + +#: ecoff.c:1531 +#, c-format +msgid "" +"\n" +" enum; End+1 symbol: %ld" +msgstr "" +"\n" +" enum; End+1 simbol: %ld" + +#: ecoff.c:1537 +#, c-format +msgid "" +"\n" +" Type: %s" +msgstr "" +"\n" +" Tipe: %s" + +#: elf-attrs.c:582 +msgid "ERROR: %B: Must be processed by '%s' toolchain" +msgstr "ERROR: %B: Harus diproses dengan '%s' toolchain" + +#: elf-attrs.c:602 elf-attrs.c:621 +msgid "ERROR: %B: Incompatible object tag '%s':%d" +msgstr "ERROR: %B: Tanda objek tidak kompatibel '%s':%d" + +#: elf-eh-frame.c:866 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "%P: error dalam %B(%A); tidak ada .eh_frame_hdr tabel yang akan dibuat.\n" + +#: elf-eh-frame.c:1102 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: fde enkoding dalam %B(%A) menjaga .eh_frame_hdr tabel untuk dibuat.\n" + +#: elf-hppa.h:2241 elf-m10300.c:1546 elf32-arm.c:7954 elf32-i386.c:3582 +#: elf32-m32r.c:2598 elf32-m68k.c:3516 elf32-ppc.c:7223 elf32-s390.c:3058 +#: elf32-sh.c:3438 elf32-xtensa.c:3021 elf64-ppc.c:11528 elf64-s390.c:3019 +#: elf64-sh64.c:1648 elf64-x86-64.c:3239 elfxx-sparc.c:3336 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): tidak teresolf %s relokasi terhadap simbol `%s'" + +#: elf-hppa.h:2266 elf-hppa.h:2280 +msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" +msgstr "%B(%A): peringatan: tidak teresolf relokasi terhadap simbol `%s'" + +#: elf-m10200.c:456 elf-m10300.c:1609 elf32-avr.c:1250 elf32-bfin.c:3214 +#: elf32-cr16.c:959 elf32-cr16c.c:790 elf32-cris.c:1538 elf32-crx.c:933 +#: elf32-d10v.c:516 elf32-fr30.c:616 elf32-frv.c:4114 elf32-h8300.c:516 +#: elf32-i860.c:1218 elf32-ip2k.c:1499 elf32-iq2000.c:691 elf32-m32c.c:560 +#: elf32-m32r.c:3124 elf32-m68hc1x.c:1135 elf32-mep.c:541 elf32-msp430.c:493 +#: elf32-mt.c:402 elf32-openrisc.c:411 elf32-score.c:2451 elf32-spu.c:4132 +#: elf32-v850.c:1703 elf32-xstormy16.c:948 elf64-mmix.c:1533 +msgid "internal error: out of range error" +msgstr "internal error: diluar jangkauan error" + +#: elf-m10200.c:460 elf-m10300.c:1613 elf32-avr.c:1254 elf32-bfin.c:3218 +#: elf32-cr16.c:963 elf32-cr16c.c:794 elf32-cris.c:1542 elf32-crx.c:937 +#: elf32-d10v.c:520 elf32-fr30.c:620 elf32-frv.c:4118 elf32-h8300.c:520 +#: elf32-i860.c:1222 elf32-iq2000.c:695 elf32-m32c.c:564 elf32-m32r.c:3128 +#: elf32-m68hc1x.c:1139 elf32-mep.c:545 elf32-msp430.c:497 +#: elf32-openrisc.c:415 elf32-score.c:2455 elf32-spu.c:4136 elf32-v850.c:1707 +#: elf32-xstormy16.c:952 elf64-mmix.c:1537 elfxx-mips.c:9065 +msgid "internal error: unsupported relocation error" +msgstr "internal error: relokasi tidak didukung error" + +#: elf-m10200.c:464 elf32-cr16.c:967 elf32-cr16c.c:798 elf32-crx.c:941 +#: elf32-d10v.c:524 elf32-h8300.c:524 elf32-m32r.c:3132 elf32-m68hc1x.c:1143 +#: elf32-score.c:2459 elf32-spu.c:4140 +msgid "internal error: dangerous error" +msgstr "internal error error berbahaya" + +#: elf-m10200.c:468 elf-m10300.c:1626 elf32-avr.c:1262 elf32-bfin.c:3226 +#: elf32-cr16.c:971 elf32-cr16c.c:802 elf32-cris.c:1550 elf32-crx.c:945 +#: elf32-d10v.c:528 elf32-fr30.c:628 elf32-frv.c:4126 elf32-h8300.c:528 +#: elf32-i860.c:1230 elf32-ip2k.c:1514 elf32-iq2000.c:703 elf32-m32c.c:572 +#: elf32-m32r.c:3136 elf32-m68hc1x.c:1147 elf32-mep.c:553 elf32-msp430.c:505 +#: elf32-mt.c:410 elf32-openrisc.c:423 elf32-score.c:2463 elf32-spu.c:4144 +#: elf32-v850.c:1727 elf32-xstormy16.c:960 elf64-mmix.c:1545 +msgid "internal error: unknown error" +msgstr "internal error: error tidak diketahui" + +#: elf-m10300.c:1618 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "error: tipe relokasi tidak sesuai untuk shared library (apakah anda lupa -fpic?)" + +#: elf-m10300.c:1621 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "internal erro: suspicious tipe relokasi digunakan dalam shared library" + +#: elf-m10300.c:4397 elf32-arm.c:9578 elf32-cris.c:2403 elf32-hppa.c:1921 +#: elf32-i370.c:506 elf32-i386.c:1807 elf32-m32r.c:1931 elf32-m68k.c:2787 +#: elf32-ppc.c:4693 elf32-s390.c:1687 elf32-sh.c:2583 elf32-vax.c:1055 +#: elf64-ppc.c:6075 elf64-s390.c:1662 elf64-sh64.c:3432 elf64-x86-64.c:1641 +#: elfxx-sparc.c:1828 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "variabel dinamik `%s' memiliki ukuran nol" + +#: elf.c:328 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: string ofset tidak valid %u >= %lu untuk bagian `%s'" + +#: elf.c:438 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "%B nomor simbol %lu referensi tidak ada SHT_SYMTAB_SHNDX bagian" + +#: elf.c:594 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Ukuran bagian korup dalam grup bagian kepala: 0x%lx" + +#: elf.c:630 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: masukan SHT_GROUP tidak valid" + +#: elf.c:700 +msgid "%B: no group info for section %A" +msgstr "%B: tidak ada informasi grup untuk bagian %A" + +#: elf.c:729 elf.c:2976 elflink.c:9746 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: peringatan: sh_link tidak diset untuk bagian `%A'" + +#: elf.c:748 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: sh_link [%ld] dalam bagian `%A' tidak benar" + +#: elf.c:783 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: tidak diketahui [%d] bagian `%s' dalam grup [%s]" + +#: elf.c:1159 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" +"\n" +"Kepala Aplikasi:\n" + +#: elf.c:1201 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" +"\n" +"Bagian Dinamis:\n" + +#: elf.c:1337 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" +"\n" +"Definisi Versi:\n" + +#: elf.c:1362 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" +"\n" +"Referensi Versi:\n" + +#: elf.c:1367 +#, c-format +msgid " required from %s:\n" +msgstr " dibutuhkan dari %s:\n" + +#: elf.c:1755 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: link tidak valid %lu untuk bagian relokasi %s (indek %u)" + +#: elf.c:1924 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: tidak tahu bagaimana menangani alokasi, bagian spesifik aplikasi `%s' [0x%8x]" + +#: elf.c:1936 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: tidak tahu bagaimana menangani bagian spesifik prosesor `%s' [0x%8x]" + +#: elf.c:1947 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: tidak tahu bagaimana menangani bagian spesifik OS `%s' [0x%8x]" + +#: elf.c:1957 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: tidak tahu bagaimana menangani bagian `%s' [0x%8x]" + +#: elf.c:2555 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "peringatan: bagian `%A' tipe berubah ke PROGBITS" + +#: elf.c:2933 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: sh_link dari bagian `%A' menunjuk ke bagian terbuang `%A' dari `%B'" + +#: elf.c:2956 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: sh_link dari bagian `%A' menunjuk ke bagian terhapus `%A' dari `%B'" + +#: elf.c:4300 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: bagian pertama dalam segmen PT_DYNAMIC tidak dalam bagian .dynamic" + +#: elf.c:4327 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: tidak cukup ruang untuk kepala aplikasi, coba linking dengan -N" + +#: elf.c:4404 +msgid "%B: section %A vma 0x%lx overlaps previous sections" +msgstr "%B: bagian %A vma 0x%lx overlaps bagian sebelumnya" + +#: elf.c:4499 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: bagian `%A' tidak dapat dialokasikan dalam segmen %d" + +#: elf.c:4549 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: peringatan: alokasi bagian `%s' tidak dalam segmen" + +#: elf.c:5064 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: simbol `%s' dibutuhkan tetapi tidak ada" + +#: elf.c:5403 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: peringatan: loadable segmen kosong terdeteksi, apakah ini sengaja ?\n" + +#: elf.c:6366 +#, c-format +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "Tidak dapat menemukan bagian keluaran ekuivalen untuk simbol '%s' dari bagian '%s'" + +#: elf.c:7346 +msgid "%B: unsupported relocation type %s" +msgstr "%B: tipe relokasi tidak didukung %s" + +#: elf32-arm.c:2846 elf32-arm.c:2878 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" +"%B(%s): peringatan: antar-kerja tidak aktif.\n" +" pertemuan pertama: %B: Thumb call ke ARM" + +#: elf32-arm.c:3041 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "%s: tidak dapat membuat masukan stub %s" + +#: elf32-arm.c:3825 +#, c-format +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "tidak dapat menemukan THUMB lem '%s' untuk '%s'" + +#: elf32-arm.c:3859 +#, c-format +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "tidak dapat menemukan ARM lem '%s' untuk '%s'" + +#: elf32-arm.c:4463 +msgid "%B: BE8 images only valid in big-endian mode." +msgstr "%B: hanya images BE8 valid dalam mode big-endian." + +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:4678 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: peringatan: memilih VFP11 erratum penyelesaian adalah tidak diperlukan untuk arsitektur target" + +#: elf32-arm.c:5212 elf32-arm.c:5232 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: tidak dapat menemukan VFP11 veneer `%s'" + +#: elf32-arm.c:5278 +#, c-format +msgid "Invalid TARGET2 relocation type '%s'." +msgstr "Tipe relokasi '%s' TARGET2 tidak valid." + +#: elf32-arm.c:5362 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: thumb call to arm" +msgstr "" +"%B(%s): peringatan: antar-kerja tidak aktif.\n" +" pertemuan pertama: %B: thumb call ke arm" + +#: elf32-arm.c:6094 +msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." +msgstr "\\%B: Peringatan: Arm BLK instruksi target Arm fungsi '%s'." + +#: elf32-arm.c:6418 +msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." +msgstr "%B: Peringatan: Thumb BLX instruksi target thumb fungsi '%s'." + +#: elf32-arm.c:7095 +msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_ARM_TLS_LE32 relokasi tidak diperbolehkan dalam objek terbagi" + +#: elf32-arm.c:7310 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): Hanya ADD atau SUB instruksi yang diperbolehkan untuk grup ALU relokasi" + +#: elf32-arm.c:7350 elf32-arm.c:7437 elf32-arm.c:7520 elf32-arm.c:7605 +msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" +msgstr "%B(%A+0x%lx): Overflow ketika membagi 0x%lx untuk relokasi grup %s" + +#: elf32-arm.c:7812 elf32-sh.c:3334 elf64-sh64.c:1556 +msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" +msgstr "%B(%A+0x%lx): %s relokasi terhadap bagian SEC_MERGE" + +#: elf32-arm.c:7930 elf32-xtensa.c:2759 elf64-ppc.c:10374 +msgid "%B(%A+0x%lx): %s used with TLS symbol %s" +msgstr "%B(%A+0x%lx): %s digunakan dengan simbol TLS %s" + +#: elf32-arm.c:7931 elf32-xtensa.c:2760 elf64-ppc.c:10375 +msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" +msgstr "%B(%A+0x%lx): %s digunakan dengan simbol bukan-TLS %s" + +#: elf32-arm.c:7988 +msgid "out of range" +msgstr "diluar jangkauan" + +#: elf32-arm.c:7992 +msgid "unsupported relocation" +msgstr "relokasi tidak didukung" + +#: elf32-arm.c:8000 +msgid "unknown error" +msgstr "error tidak diketahui" + +#: elf32-arm.c:8099 +msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" +msgstr "Peringatan: Menghapus tanda antar-kerja dari %B karena bukan kode antar-kerja dalam %B telah dihubungkan dengan itu" + +#: elf32-arm.c:8205 +msgid "ERROR: %B uses VFP register arguments, %B does not" +msgstr "ERROR: %B menggunakan reguster argumen VFP, %B tidak" + +#: elf32-arm.c:8254 +msgid "ERROR: %B: Conflicting architecture profiles %c/%c" +msgstr "ERROR: %B: Profil arsitektur konflik %c/%c" + +#: elf32-arm.c:8274 +msgid "Warning: %B: Conflicting platform configuration" +msgstr "Peringatan: %B: Konflik konfigurasi platform" + +#: elf32-arm.c:8283 +msgid "ERROR: %B: Conflicting use of R9" +msgstr "ERROR: %B: Konflik penggunaan R9" + +#: elf32-arm.c:8295 +msgid "ERROR: %B: SB relative addressing conflicts with use of R9" +msgstr "ERROR: %B: SB pengalamatan relatif konflik dengan penggunaan dari R9" + +#: elf32-arm.c:8318 +msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" +msgstr "peringatan: %B menggunakan %u-byte wchar_t tapi keluaran menggunakan %u-byte wchar_t; menggunakan nilai wchar_t melewati objek mungkin gagal" + +#: elf32-arm.c:8347 +msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "peringatan: %B menggunakan %s enums tapi keluaran menggunakan %s enums; menggunakan nilai dari enum dari objek mungkin gagal" + +#: elf32-arm.c:8360 +msgid "ERROR: %B uses iWMMXt register arguments, %B does not" +msgstr "ERROR: %B menggunakan iWMMXt argumen register, %B tidak" + +#: elf32-arm.c:8400 +msgid "Warning: %B: Unknown EABI object attribute %d" +msgstr "Peringatan: %B: atribut objek EABI tidak diketahui %d" + +#: elf32-arm.c:8460 +msgid "ERROR: %B is already in final BE8 format" +msgstr "ERROR: %B telah dalam format akhir BE8" + +#: elf32-arm.c:8536 +msgid "ERROR: Source object %B has EABI version %d, but target %B has EABI version %d" +msgstr "ERROR: Sumber objek %B memiliki versi EABI %d, tetapi target %B memiliki versi EABI %d" + +#: elf32-arm.c:8552 +msgid "ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "ERROR: %B dikompile untuk APCS-%d, dimana target %B menggunakan APCS-%d" + +#: elf32-arm.c:8577 +msgid "ERROR: %B uses VFP instructions, whereas %B does not" +msgstr "ERROR: %B menggunakan VFP instruksi, dimana %B tidak" + +#: elf32-arm.c:8581 +msgid "ERROR: %B uses FPA instructions, whereas %B does not" +msgstr "ERROR: %B menggunakan FPA instruksi, dimana %B tidak" + +#: elf32-arm.c:8591 +msgid "ERROR: %B uses Maverick instructions, whereas %B does not" +msgstr "ERROR: %B menggunakan Maverick instruksi, dimana %B tidak" + +#: elf32-arm.c:8595 +msgid "ERROR: %B does not use Maverick instructions, whereas %B does" +msgstr "ERROR: %B tidak menggunakan Maveric instruksi, dimana %B menggunakan" + +#: elf32-arm.c:8614 +msgid "ERROR: %B uses software FP, whereas %B uses hardware FP" +msgstr "ERROR: %B menggunakan software FP, dimana %B menggunakan hardware FP" + +#: elf32-arm.c:8618 +msgid "ERROR: %B uses hardware FP, whereas %B uses software FP" +msgstr "ERROR: %B menggunakan hardware FP, dimana %B menggunakan software FP" + +#. 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:8665 elf32-bfin.c:4899 elf32-cris.c:3235 elf32-m68hc1x.c:1279 +#: elf32-m68k.c:774 elf32-score.c:3750 elf32-vax.c:538 elfxx-mips.c:12699 +#, c-format +msgid "private flags = %lx:" +msgstr "tanda private = %lx:" + +#: elf32-arm.c:8674 +#, c-format +msgid " [interworking enabled]" +msgstr " [antar-kerja aktif]" + +#: elf32-arm.c:8682 +#, c-format +msgid " [VFP float format]" +msgstr " [VFP float format]" + +#: elf32-arm.c:8684 +#, c-format +msgid " [Maverick float format]" +msgstr " [Maverick float format]" + +#: elf32-arm.c:8686 +#, c-format +msgid " [FPA float format]" +msgstr " [FPA float format]" + +#: elf32-arm.c:8695 +#, c-format +msgid " [new ABI]" +msgstr " [ABI baru]" + +#: elf32-arm.c:8698 +#, c-format +msgid " [old ABI]" +msgstr " [ABI lama]" + +#: elf32-arm.c:8701 +#, c-format +msgid " [software FP]" +msgstr " [software FP]" + +#: elf32-arm.c:8710 +#, c-format +msgid " [Version1 EABI]" +msgstr " [EABI Versi 1]" + +#: elf32-arm.c:8713 elf32-arm.c:8724 +#, c-format +msgid " [sorted symbol table]" +msgstr " [simbol tabel terurut]" + +#: elf32-arm.c:8715 elf32-arm.c:8726 +#, c-format +msgid " [unsorted symbol table]" +msgstr " [simbol tabel tidak terurut]" + +#: elf32-arm.c:8721 +#, c-format +msgid " [Version2 EABI]" +msgstr " [EABI Versi 2]" + +#: elf32-arm.c:8729 +#, c-format +msgid " [dynamic symbols use segment index]" +msgstr " [simbol dinamis menggunakan segmen indek]" + +#: elf32-arm.c:8732 +#, c-format +msgid " [mapping symbols precede others]" +msgstr " [simbol map mendahului yang lain]" + +#: elf32-arm.c:8739 +#, c-format +msgid " [Version3 EABI]" +msgstr " [EABI Versi 3]" + +#: elf32-arm.c:8743 +#, c-format +msgid " [Version4 EABI]" +msgstr " [EABI Versi 4]" + +#: elf32-arm.c:8747 +#, c-format +msgid " [Version5 EABI]" +msgstr " [EABI Versi 5]" + +#: elf32-arm.c:8750 +#, c-format +msgid " [BE8]" +msgstr " [BE8]" + +#: elf32-arm.c:8753 +#, c-format +msgid " [LE8]" +msgstr " [LE8]" + +#: elf32-arm.c:8759 +#, c-format +msgid " " +msgstr " " + +#: elf32-arm.c:8766 +#, c-format +msgid " [relocatable executable]" +msgstr " [relocatable executable]" + +#: elf32-arm.c:8769 +#, c-format +msgid " [has entry point]" +msgstr " [memiliki titik masuk]" + +#: elf32-arm.c:8774 +#, c-format +msgid "" +msgstr "" + +#: elf32-arm.c:9013 elf32-i386.c:1236 elf32-s390.c:1006 elf32-xtensa.c:999 +#: elf64-s390.c:961 elf64-x86-64.c:1016 elfxx-sparc.c:1127 +msgid "%B: bad symbol index: %d" +msgstr "%B: memiliki indek simbol: %d" + +#: elf32-arm.c:10125 +#, c-format +msgid "Errors encountered processing file %s" +msgstr "Errors ditemui dalam pemrosesan berkas %s" + +#: elf32-arm.c:11526 elf32-arm.c:11548 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: error: VFP11 veneer diluar jangkauan" + +#: elf32-avr.c:1258 elf32-bfin.c:3222 elf32-cris.c:1546 elf32-fr30.c:624 +#: elf32-frv.c:4122 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:699 +#: elf32-m32c.c:568 elf32-mep.c:549 elf32-msp430.c:501 elf32-mt.c:406 +#: elf32-openrisc.c:419 elf32-v850.c:1711 elf32-xstormy16.c:956 +#: elf64-mmix.c:1541 +msgid "internal error: dangerous relocation" +msgstr "internal error: relokasi berbahaya" + +#: elf32-avr.c:2396 elf32-hppa.c:605 elf32-m68hc1x.c:164 elf64-ppc.c:3983 +msgid "%B: cannot create stub entry %s" +msgstr "%B: tidak dapat membuat masukan stub %s" + +#: elf32-bfin.c:1585 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): relokasi tidak teresolf terhadap simbol `%s'" + +#: elf32-bfin.c:1618 elf32-i386.c:3623 elf32-m68k.c:3557 elf32-s390.c:3110 +#: elf64-s390.c:3071 elf64-x86-64.c:3278 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): relokasi terhadap `%s': error %d" + +#: elf32-bfin.c:2711 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B: relokasi di `%A+0x%x' simbol referensi `%s' dengan bukan nol ditambahkan" + +#: elf32-bfin.c:2725 elf32-frv.c:2904 +msgid "relocation references symbol not defined in the module" +msgstr "relokasi referensi simbol tidak didefinisikan dalam modul" + +#: elf32-bfin.c:2822 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC referensi simbol dinamis dengan bukan nol ditambahkan" + +#: elf32-bfin.c:2861 elf32-bfin.c:2987 elf32-frv.c:3641 elf32-frv.c:3762 +msgid "cannot emit fixups in read-only section" +msgstr "tidak dapat mengeluarkan fixups dalam bagian baca-saja" + +#: elf32-bfin.c:2889 elf32-bfin.c:3036 elf32-frv.c:3672 elf32-frv.c:3806 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "tidak dapat mengeluarkan relokasi dinamis dalam bagian baca-saja" + +#: elf32-bfin.c:2945 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC_VALUE referensi simbol dinamis dengan bukan nol ditambahkan" + +#: elf32-bfin.c:3126 +msgid "relocations between different segments are not supported" +msgstr "relokasi diantara segmen berbeda tidak didukung" + +#: elf32-bfin.c:3127 +msgid "warning: relocation references a different segment" +msgstr "peringatan: relokasi referensi sebuah segmen berbeda" + +#: elf32-bfin.c:4791 elf32-frv.c:6404 +msgid "%B: unsupported relocation type %i" +msgstr "%B: tipe relokasi %i tidak didukung" + +#: elf32-bfin.c:4944 elf32-frv.c:6812 +#, c-format +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: tidak dapat menghubungkan berkas objek bukan-fdpic kedalam aplikasi fdpic" + +#: elf32-bfin.c:4948 elf32-frv.c:6816 +#, c-format +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: tidak dapat menghubungkan berkas objek fdpic kedalam aplikasi bukan-fdpic" + +#: elf32-cris.c:1060 +msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" +msgstr "%B, bagian %A: relokasi tidak teresolf %s terhadap simbol `%s'" + +#: elf32-cris.c:1129 +msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" +msgstr "%B, bagian %A: Bukan PLT atau GOT untuk relokasi %s terhadap simbol `%s'" + +#: elf32-cris.c:1131 +msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" +msgstr "%B, bagian %A: Bukan PLT untuk relokasi %s terhadap simbol `%s'" + +#: elf32-cris.c:1137 elf32-cris.c:1269 +msgid "[whose name is lost]" +msgstr "[yang namanya hilang]" + +#: elf32-cris.c:1255 +msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" +msgstr "%B, bagian %A: relokasi %s dengan bukan-nol ditambahkan %d terhadap simbol lokal" + +#: elf32-cris.c:1263 +msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" +msgstr "%B, bagian %A: relokasi %s dengan bukan-nol ditambakan %d terhadap simbol `%s'" + +#: elf32-cris.c:1289 +msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" +msgstr "%B, bagian %A: relokasi %s tidak diperbolehkan untuk simbol global: `%s'" + +#: elf32-cris.c:1305 +msgid "%B, section %A: relocation %s with no GOT created" +msgstr "%B, bagian %A: relokasi %s dengan tidak GOT dibuat" + +#: elf32-cris.c:1423 +msgid "%B: Internal inconsistency; no relocation section %s" +msgstr "%B: Internal tidak konsisten; bagian %s tidak bisa direlokasi" + +#: elf32-cris.c:2510 +msgid "" +"%B, section %A:\n" +" v10/v32 compatible object %s must not contain a PIC relocation" +msgstr "" +"%B, bagian %A:\n" +" v10/v32 objek kompatibel %s harus berisi sebuah relokasi PIC" + +#: 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 "" +"%B, bagian %A:\n" +" relokasi %s seharusnya digunakan dalam sebuah objek terbagi; rekompile dengan -fPIC" + +#: elf32-cris.c:3184 +msgid "Unexpected machine number" +msgstr "Nomor mesin tidak terduga" + +#: elf32-cris.c:3238 +#, c-format +msgid " [symbols have a _ prefix]" +msgstr " [simbol memiliki sebuah awalan _]" + +#: elf32-cris.c:3241 +#, c-format +msgid " [v10 and v32]" +msgstr " [v10 dan v32]" + +#: elf32-cris.c:3244 +#, c-format +msgid " [v32]" +msgstr " [v32]" + +#: elf32-cris.c:3289 +msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" +msgstr "%B: menggunakan awalan _ simbol, tetapi menulis berkas dengan simbol tanpa awalan" + +#: elf32-cris.c:3290 +msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" +msgstr "%B: menggunakan simbol tanpa awalan, tetapi menulis berkas dengan simbol awalan _" + +#: elf32-cris.c:3309 +msgid "%B contains CRIS v32 code, incompatible with previous objects" +msgstr "%B berisi kode CRIS v32, tidak kompatibel dengan objek sebelumnya" + +#: elf32-cris.c:3311 +msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" +msgstr "%B berisi kode bukan CRIS v32, tidak kompatibel dengan objek sebelumnya" + +#: elf32-frv.c:1507 elf32-frv.c:1656 +msgid "relocation requires zero addend" +msgstr "relokasi membutuhkan penambahan nol" + +#: elf32-frv.c:2891 +msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above" +msgstr "%B(%A+0x%x): relokasi ke `%s+%x' mungkin menyebabkan error diatas" + +#: elf32-frv.c:2980 +msgid "R_FRV_GETTLSOFF not applied to a call instruction" +msgstr "R_FRV_GETTLSOFF tidak teraplikasi untuk sebuah panggilan instruksi" + +#: elf32-frv.c:3022 +msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction" +msgstr "R_FRV_GOTTLSDESC12 tidak teraplikasi untuk sebuah instruksi lddi" + +#: elf32-frv.c:3093 +msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction" +msgstr "R_FRV_GOTTLSDESCHI tidak teraplikasi untuk sebuah instruksi sethi" + +#: elf32-frv.c:3130 +msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_GOTTLSDESCLO tidak teraplikasi untuk sebuah instruksi setlo atau setlos" + +#: elf32-frv.c:3178 +msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction" +msgstr "R_FRV_TLSDESC_RELAX tidak teraplikasi untuk sebuah instruksi ldd" + +#: elf32-frv.c:3262 +msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction" +msgstr "R_FRV_GETTLSOFF_RELAX tidak teraplikasi untuk sebuah instruksi calll" + +#: elf32-frv.c:3317 +msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction" +msgstr "R_FRV_GETTLSOFF12 tidak teraplikasi untuk sebuah instruksi ldi" + +#: elf32-frv.c:3347 +msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction" +msgstr "R_FRV_GOTTLSOFFHI tidak teraplikasi untuk sebuah instruksi sethi" + +#: elf32-frv.c:3376 +msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_GOTTLSOFFLO tidak teraplikasi untuk sebuah instruksi setlo atau setlos" + +#: elf32-frv.c:3407 +msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction" +msgstr "R_FRV_TLSOFF_RELAX tidak teraplikasi untuk sebuah instruksi ld" + +#: elf32-frv.c:3452 +msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction" +msgstr "R_FRV_TLSMOFFHI tidak teraplikasi untuk sebuah instruksi sethi" + +#: elf32-frv.c:3479 +msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_TLSMOFFLO tidak teraplikasi untuk sebuah instruksi setlo atau setlos" + +#: elf32-frv.c:3600 +msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC referensi simbol dinamis dengan penambahan bukan nol" + +#: elf32-frv.c:3720 +msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC_VALUE referensi simbol dinamis dengan penambahan bukan nol" + +#: elf32-frv.c:3977 elf32-frv.c:4133 +msgid "%B(%A+0x%lx): reloc against `%s': %s" +msgstr "%B(%A+0x%lx): relokasi terhadap `%s': %s" + +#: elf32-frv.c:3979 elf32-frv.c:3983 +msgid "relocation references a different segment" +msgstr "relokasi referensi ke segmen berbeda" + +#: elf32-frv.c:6726 +#, c-format +msgid "%s: compiled with %s and linked with modules that use non-pic relocations" +msgstr "%s: terkompile dengan %s dan terhubung dengan modul yang menggunakan relokasi bukan-pic" + +#: elf32-frv.c:6779 elf32-iq2000.c:852 elf32-m32c.c:814 +#, c-format +msgid "%s: compiled with %s and linked with modules compiled with %s" +msgstr "%s: terkompile dengan %s dan terhubung dengan modul terkompile dengan %s" + +#: elf32-frv.c:6791 +#, c-format +msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: menggunakan bagian e_flags (0x%lx) berbeda yang tidak dikenal dari modul sebelumnya (0x%lx)" + +#: elf32-frv.c:6841 elf32-iq2000.c:889 elf32-m32c.c:850 elf32-mt.c:583 +#, c-format +msgid "private flags = 0x%lx:" +msgstr "private flags = 0x%lx:" + +#: elf32-gen.c:69 elf64-gen.c:69 +msgid "%B: Relocations in generic ELF (EM: %d)" +msgstr "%B: Relokasi dalam ELF standar (EM: %d)" + +#: elf32-hppa.c:854 elf32-hppa.c:3600 +msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" +msgstr "%B(%A+0x%lx): tidak dapat mencapai %s, rekompile dengan -ffunction-sections" + +#: elf32-hppa.c:1263 +msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: relokasi %s tidak dapat digunakan ketika membuat sebuah objek terbagi; rekompile dengan -fPIC" + +#: elf32-hppa.c:1518 +#, c-format +msgid "Could not find relocation section for %s" +msgstr "Tidak dapat menemukan bagian relokasi untuk %s" + +#: elf32-hppa.c:2810 +msgid "%B: duplicate export stub %s" +msgstr "%B: duplikasi export stub %s" + +#: elf32-hppa.c:3436 +msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" +msgstr "%B(%A+0x%lx): %s fixup untuk insn 0x%x tidak didukung dalam sebuah sambunga tidak terbagi" + +#: elf32-hppa.c:4290 +msgid "%B(%A+0x%lx): cannot handle %s for %s" +msgstr "%B(%A+0x%lx): tidak dapat menangani %s untuk %s" + +#: elf32-hppa.c:4597 +msgid ".got section not immediately after .plt section" +msgstr "bagian .got tidak mengikuti bagian .plt" + +#: elf32-i386.c:362 elf32-ppc.c:1616 elf32-s390.c:379 elf64-ppc.c:2153 +#: elf64-s390.c:403 elf64-x86-64.c:222 +msgid "%B: invalid relocation type %d" +msgstr "%B: tipe relokasi %d tidak valid" + +#: elf32-i386.c:1183 elf64-x86-64.c:964 +msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" +msgstr "%B: TLS transisi dari %s ke %s terhadap `%s' di 0x%lx dalam bagian `%A' gagal" + +#: elf32-i386.c:1364 elf32-s390.c:1188 elf32-sh.c:5098 elf32-xtensa.c:1162 +#: elf64-s390.c:1152 elfxx-sparc.c:1263 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: `%s' terakses kedua sebagai normal dan memperlakukan lokal simbol" + +#: elf32-i386.c:1479 elf32-s390.c:1297 elf64-ppc.c:5046 elf64-s390.c:1264 +#: elf64-x86-64.c:1299 +msgid "%B: bad relocation section name `%s'" +msgstr "%B: relokasi bagian nama `%s' buruk" + +#: elf32-i386.c:2598 +msgid "%B: unrecognized relocation (0x%x) in section `%A'" +msgstr "%B: relokasi tidak dikenal (0x%x) dalam bagian `%A'" + +#: elf32-i386.c:2822 elf64-x86-64.c:2660 +msgid "hidden symbol" +msgstr "simbol tersembunyi" + +#: elf32-i386.c:2825 elf64-x86-64.c:2663 +msgid "internal symbol" +msgstr "internal simbol" + +#: elf32-i386.c:2828 elf64-x86-64.c:2666 +msgid "protected symbol" +msgstr "simbol terproteksi" + +#: elf32-i386.c:2831 elf64-x86-64.c:2669 +msgid "symbol" +msgstr "simbol" + +#: elf32-i386.c:2836 +msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%B: relokasi R_386_GOTOFF terhadap %s `%s' tidak terdefinisi tidak dapat digunakan ketika membuah sebuah objek terbagi" + +#: elf32-i386.c:2846 +msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" +msgstr "%B: relokasi R_386_GOTOFF terhadap fungsi terproteksi `%s' tidak dapat digunakan ketika membuat sebuah objek terbagi" + +#: 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 "ip2k relaxer: tabel switch tanpa pencocokan informasi relokasi lengkap." + +#: elf32-ip2k.c:891 elf32-ip2k.c:974 +msgid "ip2k relaxer: switch table header corrupt." +msgstr "ip2k relaxer: switch tabel header terkorupsi." + +#: elf32-ip2k.c:1316 +#, c-format +msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k linker: hilang halaman instruksi di 0x%08lx (dest = 0x%08lx)." + +#: elf32-ip2k.c:1332 +#, c-format +msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k linker: redundant halaman instruksi di 0x%08lx (dest = 0x%08lx)." + +#. Only if it's not an unresolved symbol. +#: elf32-ip2k.c:1506 +msgid "unsupported relocation between data/insn address spaces" +msgstr "relokasi tidak didukung diantara data/insn ruang alamat" + +#: elf32-iq2000.c:865 elf32-m32c.c:826 +#, c-format +msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: menggunakan e_flags (0x%lx) field berbeda dari modul sebelumnya (0x%lx)" + +#: elf32-m32r.c:1453 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "SDA relokasi ketika _SDA_BASE_ tidak terdefinisi" + +#: elf32-m32r.c:3061 +msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" +msgstr "%B: Target (%s) dari sebuah %s relokasi berada dalam bagian yang salah (%A)" + +#: elf32-m32r.c:3589 +msgid "%B: Instruction set mismatch with previous modules" +msgstr "%B: Set Instruksi tidak cocok dengan modul sebelumnya" + +#: elf32-m32r.c:3610 +#, c-format +msgid "private flags = %lx" +msgstr "private flags = %lx" + +#: elf32-m32r.c:3615 +#, c-format +msgid ": m32r instructions" +msgstr ": m32r instruksi" + +#: elf32-m32r.c:3616 +#, c-format +msgid ": m32rx instructions" +msgstr ": m32rx instruksi" + +#: elf32-m32r.c:3617 +#, c-format +msgid ": m32r2 instructions" +msgstr ": m32r2 instruksi" + +#: elf32-m68hc1x.c:1047 +#, c-format +msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" +msgstr "Referensi ke simbol jauh `%s' menggunakan relokasi salah mungkin akan menghasilkan eksekusi salah" + +#: elf32-m68hc1x.c:1070 +#, c-format +msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" +msgstr "banked address [%lx:%04lx] (%lx) tidak dalam bank yang sama seperti dalam alamat bank sekarang [%lx:%04lx] (%lx)" + +#: elf32-m68hc1x.c:1089 +#, c-format +msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" +msgstr "referensi ke alamat bank [%lx:%04lx] dalam ruang alamat normal di %04lx" + +#: elf32-m68hc1x.c:1222 +msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" +msgstr "%B: menghubungkan berkas yang dikompile untuk 16-bit integer (-mshort) dan yang lain untuk 32-bit integer" + +#: elf32-m68hc1x.c:1229 +msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" +msgstr "%B: menghubungkan berkas yang dikompile untuk 32-bit double (-fshort-double) dan yang lain untuk 64-bit double" + +#: elf32-m68hc1x.c:1238 +msgid "%B: linking files compiled for HCS12 with others compiled for HC12" +msgstr "%B: menghubungkan berkas dikompile untuk HCS12 dengan yang lain dikompile untuk HC12" + +#: elf32-m68hc1x.c:1254 elf32-ppc.c:4046 elf64-sparc.c:697 elfxx-mips.c:12561 +msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%B: menggunakan field e_flags (0x%lx) berbeda dari modul sebelumnya (0x%lx)" + +#: elf32-m68hc1x.c:1282 +#, c-format +msgid "[abi=32-bit int, " +msgstr "[abi=32-bit int, " + +#: elf32-m68hc1x.c:1284 +#, c-format +msgid "[abi=16-bit int, " +msgstr "[abi=16-bit int, " + +#: elf32-m68hc1x.c:1287 +#, c-format +msgid "64-bit double, " +msgstr "64-bit double, " + +#: elf32-m68hc1x.c:1289 +#, c-format +msgid "32-bit double, " +msgstr "32-bit double, " + +#: elf32-m68hc1x.c:1292 +#, c-format +msgid "cpu=HC11]" +msgstr "cpu=HC11]" + +#: elf32-m68hc1x.c:1294 +#, c-format +msgid "cpu=HCS12]" +msgstr "cpu=HCS12]" + +#: elf32-m68hc1x.c:1296 +#, c-format +msgid "cpu=HC12]" +msgstr "cpu=HC12]" + +#: elf32-m68hc1x.c:1299 +#, c-format +msgid " [memory=bank-model]" +msgstr " [memory=bank-model]" + +#: elf32-m68hc1x.c:1301 +#, c-format +msgid " [memory=flat]" +msgstr " [memory=flat]" + +#: elf32-m68k.c:789 elf32-m68k.c:790 +msgid "unknown" +msgstr "tidak dikenal" + +#: elf32-m68k.c:1216 +msgid "%B: GOT overflow: Number of R_68K_GOT8O relocations > %d" +msgstr "%B: GOT overflow: Jumlah dari R_68K_GOT80 relokasi > %d" + +#: elf32-m68k.c:1221 +msgid "%B: GOT overflow: Number of R_68K_GOT8O and R_68K_GOT16O relocations > %d" +msgstr "%B: Memperoleh overflow: Jumlah dari R_68K_GOT80 dan R_68K_GOT160 relokasi > %d" + +#: elf32-mcore.c:99 elf32-mcore.c:442 +msgid "%B: Relocation %s (%d) is not currently supported.\n" +msgstr "%B: Relokasi %s (%d) saat ini tidak didukung.\n" + +#: elf32-mcore.c:428 +msgid "%B: Unknown relocation type %d\n" +msgstr "%B: Tipe relokasi %d tidak dikenal\n" + +#: elf32-mep.c:654 +msgid "%B and %B are for different cores" +msgstr "%B dan %B adalah untuk cores berbeda" + +#: elf32-mep.c:671 +msgid "%B and %B are for different configurations" +msgstr "%B dan %B adalah untuk konfigurasi berbeda" + +#: elf32-mep.c:709 +#, c-format +msgid "private flags = 0x%lx" +msgstr "private flags = 0x%lx" + +#: elf32-mips.c:1045 elf64-mips.c:2056 elfn32-mips.c:1888 +msgid "literal relocation occurs for an external symbol" +msgstr "literal relokasi terjadi untuk simbol eksternal" + +#: elf32-mips.c:1085 elf32-score.c:484 elf64-mips.c:2099 elfn32-mips.c:1929 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "32bit gp relative relokasi terjadi untuk sebuah simbol eksternal" + +#: elf32-ppc.c:1681 +#, c-format +msgid "generic linker can't handle %s" +msgstr "linker generik tidak dapat menangani %s" + +#: elf32-ppc.c:2161 +msgid "corrupt or empty %s section in %B" +msgstr "korup atau kosong %s bagian dalam %B" + +#: elf32-ppc.c:2168 +msgid "unable to read in %s section from %B" +msgstr "tidak dapat membaca dalam bagian %s dari %B" + +#: elf32-ppc.c:2174 +msgid "corrupt %s section in %B" +msgstr "korup bagian %s dalam %B" + +#: elf32-ppc.c:2217 +msgid "warning: unable to set size of %s section in %B" +msgstr "peringatan: tidak dapat menset ukuran bagian %s dalam %B" + +#: elf32-ppc.c:2265 +msgid "failed to allocate space for new APUinfo section." +msgstr "gagal mengalokasikan ruang untuk bagian baru APUinfo." + +#: elf32-ppc.c:2284 +msgid "failed to compute new APUinfo section." +msgstr "gagal untuk menghitung bagian baru APUinfo." + +#: elf32-ppc.c:2287 +msgid "failed to install new APUinfo section." +msgstr "gagal untuk memasang bagian baru APUinfo." + +#: elf32-ppc.c:3263 +msgid "%B: relocation %s cannot be used when making a shared object" +msgstr "%B: relokasi %s tidak dapat digunakan ketika membuat sebuah objek terbagi" + +#. It does not make sense to have a procedure linkage +#. table entry for a local symbol. +#: elf32-ppc.c:3534 +msgid "%B(%A+0x%lx): %s reloc against local symbol" +msgstr "%B(%A+0x%lx): %s relokasi terhadap simbol lokal" + +#: elf32-ppc.c:3885 elf32-ppc.c:3900 elfxx-mips.c:12268 elfxx-mips.c:12294 +#: elfxx-mips.c:12316 elfxx-mips.c:12342 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Peringatan: %B menggunakan hard float, %B menggunakan soft float" + +#: elf32-ppc.c:3888 elf32-ppc.c:3892 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Peringatan: %B menggunakan double-precision hard float, %B menggunakan single-precision hard float" + +#: elf32-ppc.c:3896 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Peringatan: %B menggunakan soft float, %B menggunakan single-precision hard float" + +#: elf32-ppc.c:3903 elf32-ppc.c:3907 elfxx-mips.c:12248 elfxx-mips.c:12252 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Peringatan: %B menggunkaan floating point ABI %d" + +#: elf32-ppc.c:3949 elf32-ppc.c:3953 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Peringatan: %B menggunakan vector ABI %d tidak dikenal" + +#: elf32-ppc.c:3957 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Peringatan: %B menggunakan vector ABI \"%s\", %B menggunakan \"%s\"" + +#: elf32-ppc.c:4011 +msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%B: dikompile dengan -mrelocatable dan dihubungkan dengan module yang dikompile secara normal" + +#: elf32-ppc.c:4019 +msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%B: dikompile secara normal dan dihubungkan dengan modul yang dikompile dengan -mrelocatable" + +#: elf32-ppc.c:4105 +msgid "Using bss-plt due to %B" +msgstr "Menggunakan bss-plt karena %B" + +#: elf32-ppc.c:6418 elf64-ppc.c:10881 +msgid "%B: unknown relocation type %d for symbol %s" +msgstr "%B: tipe relokasi %d tidak dikenal untuk simbol %s" + +#: elf32-ppc.c:6668 +msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" +msgstr "%B(%A+0x%lx): bukan-nol ditambahkan di %s relokasi terhadap `%s'" + +#: elf32-ppc.c:7024 elf32-ppc.c:7050 elf32-ppc.c:7109 +msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%B: target (%s) dari sebuah relokasi %s berada dalam daerah keluaran salah (%s)" + +#: elf32-ppc.c:7164 +msgid "%B: relocation %s is not yet supported for symbol %s." +msgstr "%B: relokasi %s tidak didukung untuk simbol %s." + +#: elf32-ppc.c:7272 elf64-ppc.c:11575 +msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): %s relokasi terhadap `%s': error %d" + +#: elf32-s390.c:2246 elf64-s390.c:2220 +msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" +msgstr "%B(%A+0x%lx): instruksi tidak valid untuk relokasi TLS %s" + +#: elf32-score.c:1415 elfxx-mips.c:3273 +msgid "not enough GOT space for local GOT entries" +msgstr "tidak cukup ruang GOT untuk masukan lokal GOT" + +#: elf32-score.c:2545 +#, c-format +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: relokasi malformat terdeteksi untuk bagian %s" + +#: elf32-score.c:2596 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: CALL15 relokasi di 0x%lx tidak terhadap simbol global" + +#: elf32-score.c:3753 +#, c-format +msgid " [pic]" +msgstr " [pic]" + +#: elf32-score.c:3757 +#, c-format +msgid " [fix dep]" +msgstr " [fix dep]" + +#: elf32-score.c:3799 +msgid "%B: warning: linking PIC files with non-PIC files" +msgstr "%B: peringatan: menghubungkan berkas PIC dengan berkas bukan-PIC" + +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +msgstr "%B: IMPORT SEBAGAI direktif untuk %s menyembunyikan IMPORT SEBAGAI sebelumnya" + +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: Perintah .directive tidak dikenal: %s" + +#: elf32-sh-symbian.c:504 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Gagal menambahkan simbol diubah namanya %s" + +#: elf32-sh.c:533 +msgid "%B: 0x%lx: warning: bad R_SH_USES offset" +msgstr "%B: 0x%lx: peringatan: ofset R_SH_USES buruk" + +#: elf32-sh.c:545 +msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" +msgstr "%B: 0x%lx: peringatan: R_SH_USES titik tidak dikenal insn 0x%x" + +#: elf32-sh.c:562 +msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" +msgstr "%B: 0x%lx: peringatan: ofset R_SH_USES beban buruk" + +#: elf32-sh.c:577 +msgid "%B: 0x%lx: warning: could not find expected reloc" +msgstr "%B: 0x%lx: peringatan: tidak dapat menemukan relokasi yang diperkirakan" + +#: elf32-sh.c:605 +msgid "%B: 0x%lx: warning: symbol in unexpected section" +msgstr "%B: 0x%lx: peringatan: simbol dalam bagian yang tidak diperkirakan" + +#: elf32-sh.c:731 +msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" +msgstr "%B: 0x%lx: peringatan: tidak dapat menemukan COUNT relokasi" + +#: elf32-sh.c:740 +msgid "%B: 0x%lx: warning: bad count" +msgstr "%B: 0x%lx: peringatan: jumlah buruk" + +#: elf32-sh.c:1144 elf32-sh.c:1514 +msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" +msgstr "%B: 0x%lx: fatal: relokasi overflow ketika relaxing" + +#: elf32-sh.c:3279 elf64-sh64.c:1526 +msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" +msgstr "Tidak diperkirakan STO_SH5_ISA32 di simbol lokal tidak ditangani" + +#: elf32-sh.c:3516 +msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" +msgstr "%B: 0x%lx: fatal: unaligned branch target untuk relax-support relokasi" + +#: elf32-sh.c:3549 elf32-sh.c:3564 +msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" +msgstr "%B: 0x%lx: fatal: unaligned %s relokasi 0x%lx" + +#: elf32-sh.c:3578 +msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" +msgstr "%B: 0x%lx: fatal: R_SH_PSHA relokasi %d tidak dalam jangkauan -32..32" + +#: elf32-sh.c:3592 +msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" +msgstr "%B: 0x%lx: fatal: R_SH_PSHL relokasi %d tidak dalam jangkauan -32..32" + +#: elf32-sh.c:5310 elf64-alpha.c:4552 +msgid "%B: TLS local exec code cannot be linked into shared objects" +msgstr "%B: TLS lokal exec kode tidak dapat dihubungkan dalam objek terbagi" + +#: elf32-sh64.c:222 elf64-sh64.c:2345 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: dikompile sebagai 32-bit objek dan %s adalah 64-bit" + +#: elf32-sh64.c:225 elf64-sh64.c:2348 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: dikompile sebagai 64-bit objek dan %s adalah 32-bit" + +#: elf32-sh64.c:227 elf64-sh64.c:2350 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: ukuran objek tidak cocok dari target %s" + +#: elf32-sh64.c:450 elf64-sh64.c:2888 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: ditemui datalabel simbol dalam masukan" + +#: elf32-sh64.c:527 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "PTB tidak cocok: sebuah SHmedia alamat (bit 0 ==1)" + +#: elf32-sh64.c:530 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "PTA tidak cocok: sebuah SHcompact alamat (bit 0 == 0)" + +#: elf32-sh64.c:548 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: GAS error: tidak diduga PTB insn dengan R_SH_PT_16" + +#: elf32-sh64.c:597 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: error: tipe relokasi unaligned %d di %08x relokasi %p\n" + +#: elf32-sh64.c:673 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "%s: tidak dapat menulis masukan tambahan .cranges" + +#: elf32-sh64.c:733 +#, c-format +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: tidak dapat menulis masukan terurut .cranges" + +#: elf32-sparc.c:89 +msgid "%B: compiled for a 64 bit system and target is 32 bit" +msgstr "%B: dikompile untuk sebuah sistem 64 bit dan target adalah 32 bit" + +#: elf32-sparc.c:102 +msgid "%B: linking little endian files with big endian files" +msgstr "%B: menghubungkan berkas little endian dengan berkas big endian" + +#: elf32-spu.c:607 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "%X%P: bagian overlay %A dan %A jangan diawali di alamat yang sama.\n" + +#: elf32-spu.c:805 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "peringatan: panggilan bukan-fungsi simbol %s didefinisikan dalam %B" + +#: elf32-spu.c:1406 +msgid "%B is not allowed to define %s" +msgstr "%B tidak diperbolehkan untuk didefinisikan %s" + +#: elf32-spu.c:1453 +#, c-format +msgid "%s in overlay section" +msgstr "%s dalam daerah overlay" + +#: elf32-spu.c:1469 +msgid "overlay stub relocation overflow" +msgstr "relokasi stub overlay overflow" + +#: elf32-spu.c:1478 elf64-ppc.c:10078 +msgid "stubs don't match calculated size" +msgstr "stub tidak cocok dengan ukuran yang dihitung" + +#: elf32-spu.c:1976 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "peringatan: %s timpang tindih %s\n" + +#: elf32-spu.c:1992 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "peringatan: %s melebihi ukuran daerah\n" + +#: elf32-spu.c:2023 +msgid "%A:0x%v not found in function table\n" +msgstr "%A:0x%v tidak ditemukan dalam tabel fungsi\n" + +#: elf32-spu.c:2165 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" +msgstr "%B(%A+0x%v): panggilan untuk daerah bukan-kode %B(%A), analysis tidak lengkap\n" + +#: elf32-spu.c:2339 +#, c-format +msgid "%A link_order not found\n" +msgstr "%A link_order tidak ditemukan\n" + +#: elf32-spu.c:2706 +#, c-format +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "Stack analysis akan mengabaikan panggilan dari %s ke %s\n" + +#: elf32-spu.c:3348 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3349 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3354 +msgid " calls:\n" +msgstr " panggilan:\n" + +#: elf32-spu.c:3362 +#, c-format +msgid " %s%s %s\n" +msgstr " %s%s %s\n" + +#: elf32-spu.c:3564 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "%s duplikasi dalam %s\n" + +#: elf32-spu.c:3568 +#, c-format +msgid "%s duplicated\n" +msgstr "%s duplikasi\n" + +#: elf32-spu.c:3575 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "maaf, tidak ada dukungan untuk duplikasi berkas objek dalam auto-overlay script\n" + +#: elf32-spu.c:3605 +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "ukuran non-overlay dari 0x%v plus maksimul overlay size dari 0x%v melebihi lokal store\n" + +#: elf32-spu.c:3741 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "%B:%A%s melebihi ukuran overlay\n" + +#: elf32-spu.c:3862 +msgid "Stack size for call graph root nodes.\n" +msgstr "Ukuran stack untuk panggilan graph titik root.\n" + +#: elf32-spu.c:3863 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Ukuran stack untuk fungsi. Anotasi: '*' max stack, 't' tail call\n" + +#: elf32-spu.c:3871 +msgid "Maximum stack required is 0x%v\n" +msgstr "Maksimal stack dibutuhkan adalah 0x%v\n" + +#: elf32-spu.c:4067 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s=0x%lx): tidak teresolf %s relokasi terhadap simbol `%s'" + +#: elf32-v850.c:165 +#, c-format +msgid "Variable `%s' cannot occupy in multiple small data regions" +msgstr "Variabel `%s' tidak dapat mengisi dalam beberapa daerah data kecil" + +#: elf32-v850.c:168 +#, c-format +msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "Variabel `%s' hanya dapat berada dalam satu dari kecil, nol, dan sangat kecil daerah data" + +#: elf32-v850.c:171 +#, c-format +msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "Variabel `%s' tidak dapat berada dalam kecil dan nol daerah data secara bersamaan" + +#: elf32-v850.c:174 +#, c-format +msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "Variabel `%s' tidak dapat berada dalam kecil dan sangat kecil daerah data secara bersamaan" + +#: elf32-v850.c:177 +#, c-format +msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "variabel `%s' tidak dapat dalam nol dan kecil daerah data secara bersamaan" + +#: elf32-v850.c:480 +#, c-format +msgid "FAILED to find previous HI16 reloc\n" +msgstr "GAGAL untuk menemukan relokasi HI16 sebelumnya\n" + +#: elf32-v850.c:1715 +msgid "could not locate special linker symbol __gp" +msgstr "tidak dapat menemukan simbol linker spesial __gp" + +#: elf32-v850.c:1719 +msgid "could not locate special linker symbol __ep" +msgstr "tidak dapat menemukan simbol linker spesial __ep" + +#: elf32-v850.c:1723 +msgid "could not locate special linker symbol __ctbp" +msgstr "tidak dapat menemukan simbol linker spesial __ctbp" + +#: elf32-v850.c:1873 +msgid "%B: Architecture mismatch with previous modules" +msgstr "%B: Arsitektur tidak cocok dengan modul sebelumnya" + +#: elf32-v850.c:1892 +#, c-format +msgid "private flags = %lx: " +msgstr "private flags = %lx: " + +#: elf32-v850.c:1897 +#, c-format +msgid "v850 architecture" +msgstr "v850 arsitektur" + +#: elf32-v850.c:1898 +#, c-format +msgid "v850e architecture" +msgstr "v850e arsitektur" + +#: elf32-v850.c:1899 +#, c-format +msgid "v850e1 architecture" +msgstr "v850e1 arsitektur" + +#: elf32-vax.c:541 +#, c-format +msgid " [nonpic]" +msgstr " [bukan-pic]" + +#: elf32-vax.c:544 +#, c-format +msgid " [d-float]" +msgstr " [d-float]" + +#: elf32-vax.c:547 +#, c-format +msgid " [g-float]" +msgstr " [g-float]" + +#: elf32-vax.c:657 +#, c-format +msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" +msgstr "%s: peringatan: GOT ditambahkan dari %ld ke `%s' tidak cocok dengan penambahan GOT sebelumnya dari %ld" + +#: elf32-vax.c:1589 +#, c-format +msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" +msgstr "%s: peringatan: PLT ditambahkan dari %d ke `%s' dari %s bagian diabaikan" + +#: elf32-vax.c:1726 +#, c-format +msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgstr "%s: peringatan: %s relokasi terhadap simbol `%s' dari bagian %s" + +#: elf32-vax.c:1732 +#, c-format +msgid "%s: warning: %s relocation to 0x%x from %s section" +msgstr "%s: peringatan: relokasi %s ke 0x%x dari daerah %s" + +#: elf32-xstormy16.c:451 elf32-ia64.c:2794 elf64-ia64.c:2794 +msgid "non-zero addend in @fptr reloc" +msgstr "bukan-nol ditambahkan dalam @fptr relokasi" + +#: elf32-xtensa.c:911 +msgid "%B(%A): invalid property table" +msgstr "%B(%A): tabel properti tidak valid" + +#: elf32-xtensa.c:2734 +msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" +msgstr "%B(%A+0x%lx): ofset relokasi diluar jangkauan (size=0x%x)" + +#: elf32-xtensa.c:2813 elf32-xtensa.c:2934 +msgid "dynamic relocation in read-only section" +msgstr "relokasi dinamis dalam bagian baca-saja" + +#: elf32-xtensa.c:2910 +msgid "TLS relocation invalid without dynamic sections" +msgstr "relokasi TLS tidak valid tanpa bagian dinamis" + +#: elf32-xtensa.c:3127 +msgid "internal inconsistency in size of .got.loc section" +msgstr "internal tidak konsisten dalam ukuran dari daerah .got.loc" + +#: elf32-xtensa.c:3437 +msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" +msgstr "%B: tipe mesin tidak kompatibel. Keluaran adalah 0x%x. Masukan adalah 0x%x" + +#: elf32-xtensa.c:4666 elf32-xtensa.c:4674 +msgid "Attempt to convert L32R/CALLX to CALL failed" +msgstr "Mencoba untuk mengubah L32R/CALLX ke CALL gagal" + +#: elf32-xtensa.c:6276 elf32-xtensa.c:6352 elf32-xtensa.c:7468 +msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" +msgstr "%B(%A+0x%lx): tidak dapat mendeko instruksi; mungkin konfigurasi tidak cocok" + +#: elf32-xtensa.c:7208 +msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" +msgstr "%B(%A+0x%lx): tidak dapat mendeko instruksi untuk XTENSA_ASM_SIMPLIFY relokasi; mungkin konfigurasi tidak cocok" + +#: elf32-xtensa.c:8969 +msgid "invalid relocation address" +msgstr "alamat relokasi tidak valid" + +#: elf32-xtensa.c:9018 +msgid "overflow after relaxation" +msgstr "overflow setelah relaksasi" + +#: elf32-xtensa.c:10154 +msgid "%B(%A+0x%lx): unexpected fix for %s relocation" +msgstr "%B(%A+0x%lx): unexpected fix untuk relokasi %s" + +#: elf64-alpha.c:452 +msgid "GPDISP relocation did not find ldah and lda instructions" +msgstr "GPDISP relokasi tidak dapat menemukan instruksi ldah dan lda" + +#: elf64-alpha.c:2416 +msgid "%B: .got subsegment exceeds 64K (size %d)" +msgstr "%B: .got subsegmen melebihi 64K (size %d)" + +#: elf64-alpha.c:4296 elf64-alpha.c:4308 +msgid "%B: gp-relative relocation against dynamic symbol %s" +msgstr "%B: gp-relative relokasi terhadap simbol dinamis %s" + +#: elf64-alpha.c:4334 elf64-alpha.c:4469 +msgid "%B: pc-relative relocation against dynamic symbol %s" +msgstr "%B: pc-relative relokasi terhadap simbol dinamis %s" + +#: elf64-alpha.c:4362 +msgid "%B: change in gp: BRSGP %s" +msgstr "%B: perubahan dalam gp: BRSGP %s" + +#: elf64-alpha.c:4387 +msgid "" +msgstr "" + +#: elf64-alpha.c:4392 +msgid "%B: !samegp reloc against symbol without .prologue: %s" +msgstr "%B: !samegp relokasi terhadap simbol tanpa .prologue: %s" + +#: elf64-alpha.c:4444 +msgid "%B: unhandled dynamic relocation against %s" +msgstr "%B: relokasi dinamis tidak ditangani terhadap %s" + +#: elf64-alpha.c:4476 +msgid "%B: pc-relative relocation against undefined weak symbol %s" +msgstr "%B: pc-relative relokasi terhadap simbol lemah tidak terdefinisi %s" + +#: elf64-alpha.c:4536 +msgid "%B: dtp-relative relocation against dynamic symbol %s" +msgstr "%B: dtp-relative relokasi terhadap simbol dinamis %s" + +#: elf64-alpha.c:4559 +msgid "%B: tp-relative relocation against dynamic symbol %s" +msgstr "%B: tp-relative relokasi terhadap simbol dinamis %s" + +#: elf64-hppa.c:2071 +#, c-format +msgid "stub entry for %s cannot load .plt, dp offset = %ld" +msgstr "masukan stub untuk %s tidak dapat diload .plt, dp ofset = %ld" + +#: elf64-mmix.c:1177 +#, c-format +msgid "" +"%s: Internal inconsistency error for value for\n" +" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n" +msgstr "" +"%s: Internal tidak konsisten error untuk nilai untuk\n" +" linker-allocated global register: terhubung: 0x%lx%08lx != relaxed: 0x%lx%08lx\n" + +#: elf64-mmix.c:1618 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" +msgstr "%s: base-plus-offset relokasi terhadap simbol register: (tidak diketahui) dalam %s" + +#: elf64-mmix.c:1623 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: %s in %s" +msgstr "%s: base-plus-offset relokasi terhadap simbol register: %s dalam %s" + +#: elf64-mmix.c:1667 +#, c-format +msgid "%s: register relocation against non-register symbol: (unknown) in %s" +msgstr "%s: register relokasi terhadap non-register simbol: (tidak diketahui) dalam %s" + +#: elf64-mmix.c:1672 +#, c-format +msgid "%s: register relocation against non-register symbol: %s in %s" +msgstr "%s: register relokasi terhadap bukan-register simbol: %s dalam %s" + +#: elf64-mmix.c:1709 +#, c-format +msgid "%s: directive LOCAL valid only with a register or absolute value" +msgstr "%s: direktif LOKAL hanya valid dengan sebuah register atau nilai absolut" + +#: elf64-mmix.c:1737 +#, c-format +msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." +msgstr "%s: LOKAL direktif: Register $%ld bukan sebuah lokal register. Pertama global registar adala $%ld." + +#: elf64-mmix.c:2201 +#, c-format +msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" +msgstr "%s: Error: multiple definisi dari `%s'; awal dari %s adalah diset dalam sebuah sebelum berkas terlink\n" + +#: elf64-mmix.c:2259 +msgid "Register section has contents\n" +msgstr "Daerah register memiliki isi\n" + +#: elf64-mmix.c:2451 +#, c-format +msgid "" +"Internal inconsistency: remaining %u != max %u.\n" +" Please report this bug." +msgstr "" +"Internal tidak konsisten: sisa %u != max %u.\n" +" Tolong laporkan bug ini." + +#: elf64-ppc.c:2561 libbfd.c:978 +msgid "%B: compiled for a big endian system and target is little endian" +msgstr "%B: dikompile untuk sebuah sistem big endian dan target adalah little endian" + +#: elf64-ppc.c:2564 libbfd.c:980 +msgid "%B: compiled for a little endian system and target is big endian" +msgstr "%B: dikompile untuk sebuah sistem little endian dan target adalah big endian" + +#: elf64-ppc.c:6065 +#, c-format +msgid "copy reloc against `%s' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc" +msgstr "salin relokasi terhadap `%s' membutuhkan lazy plt linking; hindari konfigurasi LD_BIND_NOW=1 atau upgrade gcc" + +#: elf64-ppc.c:6486 +msgid "dynreloc miscount for %B, section %A" +msgstr "dynareloc miscount untuk %B, bagian %A" + +#: elf64-ppc.c:6570 +msgid "%B: .opd is not a regular array of opd entries" +msgstr "%B: .opd adalah bukan array regular dari masukan opd" + +#: elf64-ppc.c:6579 +msgid "%B: unexpected reloc type %u in .opd section" +msgstr "%B: tipe relokasi %u tidak diduga dalam bagian .opd" + +#: elf64-ppc.c:6600 +msgid "%B: undefined sym `%s' in .opd section" +msgstr "%B: tidak terdefinisi simbol `%s' dalam bagian .opd" + +#: elf64-ppc.c:7377 elf64-ppc.c:7754 +#, c-format +msgid "%s defined in removed toc entry" +msgstr "%s terdefinisi dalam masukan toc terhapus" + +#: elf64-ppc.c:8581 +#, c-format +msgid "long branch stub `%s' offset overflow" +msgstr "stub brach panjang `%s' ofset overflow" + +#: elf64-ppc.c:8640 +#, c-format +msgid "can't find branch stub `%s'" +msgstr "tidak dapat menemukan branch stub `%s'" + +#: elf64-ppc.c:8702 elf64-ppc.c:8822 +#, c-format +msgid "linkage table error against `%s'" +msgstr "linkage tabel error terhadap `%s'" + +#: elf64-ppc.c:8978 +#, c-format +msgid "can't build branch stub `%s'" +msgstr "tidak dapat membuat branch stub `%s'" + +#: elf64-ppc.c:9451 +msgid "%B section %A exceeds stub group size" +msgstr "%B bagian %A melebihi ukuran grup stub" + +#: elf64-ppc.c:10090 +#, c-format +msgid "" +"linker stubs in %u group%s\n" +" branch %lu\n" +" toc adjust %lu\n" +" long branch %lu\n" +" long toc adj %lu\n" +" plt call %lu" +msgstr "" +"linker stubs dalam %u grup %s\n" +" cabang %lu\n" +" toc adjust %lu\n" +" cabang panjang %lu\n" +" long toc adj %lu\n" +" plt call %lu" + +#: elf64-ppc.c:10769 +msgid "%B(%A+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc" +msgstr "%B(%A+0x%lx): otomatis multiple TOC tidak didukung menggunakan berkas crt anda; rekompile dengan -mminimal-toc atau upgrade gcc" + +#: elf64-ppc.c:10777 +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 "%B(%A+0x%lx): sibling call optimization ke `%s' tidak membolehkan otomatis multiple TOC; rekompile dengan -mminimal-toc atau -fno-optimize-sibling-calls, atau buat `%s' extern" + +#: elf64-ppc.c:11427 +msgid "%B: relocation %s is not supported for symbol %s." +msgstr "%B: relokasi %s tidak didukung untuk simbol %s." + +#: elf64-ppc.c:11509 +msgid "%B: error: relocation %s not a multiple of %d" +msgstr "%B: error: relokasi %s bukan multiple dari %d" + +#: elf64-sh64.c:1701 +#, c-format +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +msgstr "%s: error: tipe relokasi %d unaligned di %08x relokasi %08x\n" + +#: elf64-sparc.c:439 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%B: Hanya register %%g[2367] dapat dideklarasikan menggunakan STT_REGISTER" + +#: elf64-sparc.c:459 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" +msgstr "Register %%g%d digunakan tidak kompatibel: %s dalam %B, sebelumnya %s dalam %B" + +#: elf64-sparc.c:482 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" +msgstr "Simbol `%s' memiliki tipe berbeda: REGISTER dalam %B, sebelumnya %s dalam %B" + +#: elf64-sparc.c:527 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" +msgstr "Simbol `%s' memiliki tipe berbeda: %s dalam %B, sebelumnya REGISTER dalam %B" + +#: elf64-sparc.c:678 +msgid "%B: linking UltraSPARC specific with HAL specific code" +msgstr "%B: menghubungkan UltraSPARC spesifik dengan HAL spesifik kode" + +#: elf64-x86-64.c:1047 elf64-x86-64.c:1207 elfxx-mips.c:7834 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: relokasi %s terhadap `%s' tidak dapat digunkan ketika membuat sebuah objek terbagi; rekompile dengan -fPIC" + +#: elf64-x86-64.c:1138 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B: '%s' keduanya diakses secara normal dan thread simbol lokal" + +#: elf64-x86-64.c:2559 +msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" +msgstr "%B: relokasi R_X86_64_GOTOFF64 terhadap fungsi terproteksi `%s' tidak dapat digunakan ketika membuat sebuah objek terbagi" + +#: elf64-x86-64.c:2670 +msgid "; recompile with -fPIC" +msgstr "; rekompile dengan -fPIC" + +#: elf64-x86-64.c:2675 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: relokasi %s terhadap %s `%s' tidak dapat digunakan ketika membuat sebuah objek terbagi%s" + +#: elf64-x86-64.c:2677 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: relokasi %s terhadap tidak terdefinisi %s `%s' tidak dapat digunakan ketika membuat sebuah objek terbagi %s" + +#: elfcode.h:795 +#, c-format +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "peringatan: %s memiliki sebuah string tabel korup index - diabaikan" + +#: elfcode.h:1201 +#, c-format +msgid "%s: version count (%ld) does not match symbol count (%ld)" +msgstr "%s: versi terhitung (%ld) tidak cocok dengan simbol terhitung (%ld)" + +#: elfcode.h:1435 +#, c-format +msgid "%s(%s): relocation %d has invalid symbol index %ld" +msgstr "%s(%s): relokasi %d memiliki indek simbol tidak valid %ld" + +#: elfcore.h:251 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Peringatan: %B terpotong: diperkirakan ukuran berkas core >= %lu, ditemukan: %lu." + +#: elflink.c:1028 +msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS definisi dalam %B bagian %A tidak cocok bukan-TLS definisi dalam %B bagian %A" + +#: elflink.c:1032 +msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" +msgstr "%s: TLS referensi dalam %B tidak cocok bukan-TLS referensi dalam %B" + +#: elflink.c:1036 +msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" +msgstr "%s: TLS definisi dalam %B bagian %A tidak cocok bukan-TLS referensi dalam %B" + +#: elflink.c:1040 +msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS referensi dalam %B tidak cocok bukan-TLS definisi dalam %B bagian %A" + +#: elflink.c:1654 +msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" +msgstr "%B: tidak diduga redefinisi dari indirek versioned simbol `%s'" + +#: elflink.c:1982 +msgid "%B: version node not found for symbol %s" +msgstr "%B: titik versi tidak ditemukan untuk simbol %s" + +#: elflink.c:2130 +msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" +msgstr "%B: bad relokasi simbol indeks (0x%lx >= 0x%lx) untuk ofset 0x%lx dalam daerah `%A'" + +#: elflink.c:2327 +msgid "%B: relocation size mismatch in %B section %A" +msgstr "%B: ukuran relokasi tidak cocok dalam %B bagian %A" + +#: elflink.c:2629 +#, c-format +msgid "warning: type and size of dynamic symbol `%s' are not defined" +msgstr "peringatan: tipe dan ukuran dari simbol dinamis `%s' tidak terdefinisi" + +#: elflink.c:3953 +msgid "%B: %s: invalid version %u (max %d)" +msgstr "%B: %s: versi %u tidak valid (max %d)" + +#: elflink.c:3989 +msgid "%B: %s: invalid needed version %d" +msgstr "%B: %s: tidak valid dibutuhkan versi %d" + +#: elflink.c:4172 +msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" +msgstr "Peringatan: alignmen %u dari simbol umum `%s' dalam %B adalah lebih besar daripada alignment (%u) dari bagian ini %A" + +#: elflink.c:4178 +msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" +msgstr "Peringatan: alignment %u dari simbol `%s' dalam %B adalah lebih kecil daripada %u dalam %B" + +#: elflink.c:4193 +msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" +msgstr "Peringatan: ukuran dari simbol `%s' berubah dari %lu dalam %B ke %lu dalam %B" + +#: elflink.c:4371 +#, c-format +msgid "%s: invalid DSO for symbol `%s' definition" +msgstr "%s: tidak valid DSO untuk simbol `%s' definisi" + +#: elflink.c:5621 +#, c-format +msgid "%s: undefined version: %s" +msgstr "%s: versi tidak terdefinisi: %s" + +#: elflink.c:5689 +msgid "%B: .preinit_array section is not allowed in DSO" +msgstr "%B: .preinit_array bagian tidak diperbolehkan dalam DSO" + +#: elflink.c:7414 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "undefined %s referensi dalam simbol kompleks: %s" + +#: elflink.c:7568 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "operator tidak diketahui '%c' dalam simbol kompleks" + +#: elflink.c:7904 elflink.c:7921 elflink.c:7958 elflink.c:7975 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: Tidak dapat mengurutkan relokasi - mereka berada dalam lebih dari satu ukuran" + +#: elflink.c:7935 elflink.c:7989 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: Tidak dapat mengurutkan relokasi - mereka dari ukuran yang tidak diketahui" + +#: elflink.c:8038 +msgid "Not enough memory to sort relocations" +msgstr "Tidak cukup memori untuk mengurutkan relokasi" + +#: elflink.c:8227 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: Terlalu banyak bagian: %d (>= %d)" + +#: elflink.c:8461 +msgid "%B: %s symbol `%s' in %B is referenced by DSO" +msgstr "%B: %s simbol `%s' dalam %B adalah direferensikan oleh DSO" + +#: elflink.c:8544 +msgid "%B: could not find output section %A for input section %A" +msgstr "%B: tidak dapat menemukan bagian keluaran %A untuk daerah masukan %A" + +#: elflink.c:8655 +msgid "%B: %s symbol `%s' isn't defined" +msgstr "%B: %s simbol `%s' tidak didefinisikan" + +#: elflink.c:9141 +msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" +msgstr "error: %B berisi sebuah relokasi (0x%s) untuk daerah %A yang mereferensikan sebuah bukan-exist simbol global" + +#: elflink.c:9205 +msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" +msgstr "%X`%s' direferensikan dalam daerah `%A' dari %B: didefinisikan dalam daerah diabaikan `%A' dari %B\n" + +#: elflink.c:9825 +msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" +msgstr "%A memiliki keduanya terurut [`%A' dalam %B] dan daerah tidak terurut [`%A' dalam %B]" + +#: elflink.c:9830 +#, c-format +msgid "%A has both ordered and unordered sections" +msgstr "%A memiliki daerah terurut dan tidak terurut" + +#: elflink.c:10715 elflink.c:10759 +msgid "%B: could not find output section %s" +msgstr "%B: tidak dapat menemukan daerah keluaran %s" + +#: elflink.c:10720 +#, c-format +msgid "warning: %s section has zero size" +msgstr "peringatan: %s daerah memiliki ukuran nol" + +#: elflink.c:10824 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: peringatan: membuat sebuah DT_TEXTREL dalam sebuah objek terbagi.\n" + +#: elflink.c:11006 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: tidak dapat membaca simbol: %E\n" + +#: elflink.c:11313 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Menghapus daerah tidak digunakan '%s' dalam berkas '%B'" + +#: elflink.c:11525 +msgid "Warning: gc-sections option ignored" +msgstr "Peringatan: gc-sections pilihan diabaikan" + +#: elflink.c:12056 +msgid "%B: ignoring duplicate section `%A'" +msgstr "%B: peringatan daerah duplikasi `%A'" + +#: elflink.c:12063 elflink.c:12070 +msgid "%B: duplicate section `%A' has different size" +msgstr "%B: daerah duplikasi `%A' memiliki ukuran berbeda" + +#: elflink.c:12078 elflink.c:12083 +msgid "%B: warning: could not read contents of section `%A'" +msgstr "%B: peringatan: tidak dapat membaca isi dari daerah `%A'" + +#: elflink.c:12087 +msgid "%B: warning: duplicate section `%A' has different contents" +msgstr "%B: peringatan: duplikasi daerah `%A' memiliki isi berbeda" + +#: elflink.c:12166 linker.c:3080 +msgid "%F%P: already_linked_table: %E" +msgstr "%F%P: already_linked_table: %E" + +#: elfxx-mips.c:1197 +msgid "static procedure (no name)" +msgstr "prosedur statis (tidak bernama)" + +#: elfxx-mips.c:5562 +msgid "%B: %A+0x%lx: jump to stub routine which is not jal" +msgstr "%B: %A+0x%lx: lompat ke routine stub dimana bukan jal" + +#: elfxx-mips.c:6206 elfxx-mips.c:6427 +msgid "%B: Warning: bad `%s' option size %u smaller than its header" +msgstr "%B: Peringatan: pilihan `%s' buruk ukuran %u lebih kecil dari headernya" + +#: elfxx-mips.c:7174 elfxx-mips.c:7299 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: Peringatan: tidak dapat menentukan fungsi terget untuk daerah stub `%s'" + +#: elfxx-mips.c:7428 +msgid "%B: Malformed reloc detected for section %s" +msgstr "%B: Malformed relokasi terdeteksi untuk daerah %s" + +#: elfxx-mips.c:7468 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: GOT relokasi di 0x%lx tidak diduga dalam aplikasi" + +#: elfxx-mips.c:7566 +msgid "%B: CALL16 reloc at 0x%lx not against global symbol" +msgstr "%B: CALL16 relokasi di 0x%lx tidak terhadap simbol global" + +#: elfxx-mips.c:8244 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "bukan-dinamis relokasi refer ke simbol dinamis %s" + +#: elfxx-mips.c:8947 +msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" +msgstr "%B: Tidak dapat menemukan cocok LO16 relokasi terhadap `%s' untuk %s di 0x%lx di daerah `%A'" + +#: elfxx-mips.c:9086 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "daerah data-kecil melebihi 64KB; dibawah data-kecil batas ukuran (lihat pilihan -G)" + +#: elfxx-mips.c:11887 +#, c-format +msgid "%s: illegal section name `%s'" +msgstr "%s: nama daerah `%s' ilegal" + +#: elfxx-mips.c:12262 elfxx-mips.c:12288 +msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" +msgstr "Peringatan: %B menggunakan 0msingle-float, %B menggunakan -mdouble-float" + +#: elfxx-mips.c:12274 elfxx-mips.c:12330 +msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +msgstr "Peringatan: %B menggunakan -msingle-float, %B menggunakan -mips32r2 -mfp64" + +#: elfxx-mips.c:12300 elfxx-mips.c:12336 +msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +msgstr "Peringatan: %B menggunakan -mdouble-float, %B menggunakan -mips32r2 -mfp64" + +#: elfxx-mips.c:12378 +msgid "%B: endianness incompatible with that of the selected emulation" +msgstr "%B: endianness tidak kompatibel dengan yang dipilih di emulasi" + +#: elfxx-mips.c:12389 +msgid "%B: ABI is incompatible with that of the selected emulation" +msgstr "%B: ABI tidak kompatibel dengan yang dipilih di emulasi" + +#: elfxx-mips.c:12470 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: peringatan: menghubungkan berkas abicalls dengan berkas bukan-abicalls" + +#: elfxx-mips.c:12487 +msgid "%B: linking 32-bit code with 64-bit code" +msgstr "%B: menghubungkan 32-bit kode dengan 64-bit kode" + +#: elfxx-mips.c:12515 +msgid "%B: linking %s module with previous %s modules" +msgstr "%B: menghubungkan %s modul dengan modul %s sebelumnya" + +#: elfxx-mips.c:12538 +msgid "%B: ABI mismatch: linking %s module with previous %s modules" +msgstr "%B: ABI tidak cocok: menghubungkan modul %s dengan modul %s sebelumnya" + +#: elfxx-mips.c:12702 +#, c-format +msgid " [abi=O32]" +msgstr " [abi=032]" + +#: elfxx-mips.c:12704 +#, c-format +msgid " [abi=O64]" +msgstr " [abi=064]" + +#: elfxx-mips.c:12706 +#, c-format +msgid " [abi=EABI32]" +msgstr " [abi=EABI32]" + +#: elfxx-mips.c:12708 +#, c-format +msgid " [abi=EABI64]" +msgstr " [abi=EABI64]" + +#: elfxx-mips.c:12710 +#, c-format +msgid " [abi unknown]" +msgstr " [abi tidak diketahui]" + +#: elfxx-mips.c:12712 +#, c-format +msgid " [abi=N32]" +msgstr " [abi=N32]" + +#: elfxx-mips.c:12714 +#, c-format +msgid " [abi=64]" +msgstr " [abi=64]" + +#: elfxx-mips.c:12716 +#, c-format +msgid " [no abi set]" +msgstr " [bukan abi set]" + +#: elfxx-mips.c:12737 +#, c-format +msgid " [unknown ISA]" +msgstr " [ISA tidak diketahui]" + +#: elfxx-mips.c:12748 +#, c-format +msgid " [not 32bitmode]" +msgstr " [bukan 32bitmode]" + +#: elfxx-sparc.c:440 +#, c-format +msgid "invalid relocation type %d" +msgstr "tipe relokasi %d tidak valid" + +#: elfxx-sparc.c:2976 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: mungkin dikompile tanpa -fPIC?" + +#: i386linux.c:455 m68klinux.c:459 sparclinux.c:453 +#, c-format +msgid "Output file requires shared library `%s'\n" +msgstr "Berkas keluaran membutuhkan library terbagi `%s'\n" + +#: i386linux.c:463 m68klinux.c:467 sparclinux.c:461 +#, c-format +msgid "Output file requires shared library `%s.so.%s'\n" +msgstr "Berkas keluaran membutuhkan library terbagi `%s.so.%s'\n" + +#: i386linux.c:652 i386linux.c:702 m68klinux.c:659 m68klinux.c:707 +#: sparclinux.c:651 sparclinux.c:701 +#, c-format +msgid "Symbol %s not defined for fixups\n" +msgstr "Simbol %s tidak terdefinisi untuk fixups\n" + +#: i386linux.c:726 m68klinux.c:731 sparclinux.c:725 +msgid "Warning: fixup count mismatch\n" +msgstr "Peringatan: jumlah fixup tidak cocok\n" + +#: ieee.c:159 +#, c-format +msgid "%s: string too long (%d chars, max 65535)" +msgstr "%s: string terlalu panjang (%d chars, max 65535)" + +#: ieee.c:286 +#, c-format +msgid "%s: unrecognized symbol `%s' flags 0x%x" +msgstr "%s: simbol tidak dikenal `%s' flags 0x%x" + +#: ieee.c:788 +msgid "%B: unimplemented ATI record %u for symbol %u" +msgstr "%B: tidak terimplementasi ATI record %u untuk simbol %u" + +#: ieee.c:812 +msgid "%B: unexpected ATN type %d in external part" +msgstr "%B: tipe ATN %d tidak diduga dalam bagian luar" + +#: ieee.c:834 +msgid "%B: unexpected type after ATN" +msgstr "%B: tidak diduga tipe sesudah ATN" + +#: ihex.c:230 +msgid "%B:%d: unexpected character `%s' in Intel Hex file" +msgstr "%B:%d: tidak diduga karakter `%s' dalam berkas Intel Hex" + +#: ihex.c:337 +msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" +msgstr "%B:%u: checksum buruk dalam berkas Intel Hex (diperkirakan %u, ditemukan %u)" + +#: ihex.c:392 +msgid "%B:%u: bad extended address record length in Intel Hex file" +msgstr "%B:%u: buruk extended alamat panjang record dalam berkas Intel Hex" + +#: ihex.c:409 +msgid "%B:%u: bad extended start address length in Intel Hex file" +msgstr "%B:%u: buruk extended awal panjang alamat dalam berkas Intel Hex " + +#: ihex.c:426 +msgid "%B:%u: bad extended linear address record length in Intel Hex file" +msgstr "%B:%u: buruk extended alamat linear panjang record dalam berkas Intel Hex" + +#: ihex.c:443 +msgid "%B:%u: bad extended linear start address length in Intel Hex file" +msgstr "%B:%u: buruk extended panjang awal alamat linear dalam berkas Intel Hex" + +#: ihex.c:460 +msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" +msgstr "%B:%u: tidak dikenal ihex tipe %u dalam berkas Intel Hex" + +#: ihex.c:579 +msgid "%B: internal error in ihex_read_section" +msgstr "%B: internal error dalam ihex_read_section" + +#: ihex.c:613 +msgid "%B: bad section length in ihex_read_section" +msgstr "%B: buruk panjang bagian dalam ihex_read_section" + +#: ihex.c:825 +#, c-format +msgid "%s: address 0x%s out of range for Intel Hex file" +msgstr "%s: alamat 0x%s diluar jangkauan untuk berkas Intel Hex" + +#: libbfd.c:1008 +#, c-format +msgid "Deprecated %s called at %s line %d in %s\n" +msgstr "Deprecated %s dipanggil di %s baris %d dalam %s\n" + +#: libbfd.c:1011 +#, c-format +msgid "Deprecated %s called\n" +msgstr "Deprecated %s dipanggil\n" + +#: linker.c:1874 +msgid "%B: indirect symbol `%s' to `%s' is a loop" +msgstr "%B: indirect simbol `%s' ke `%s' adalah sebuah loop" + +#: linker.c:2740 +#, c-format +msgid "Attempt to do relocatable link with %s input and %s output" +msgstr "Mencoba untuk merelokasi link dengan masukan %s dan keluaran %s" + +#: linker.c:3047 +msgid "%B: warning: ignoring duplicate section `%A'\n" +msgstr "%B: peringatan: mengabaikan bagiann terduplikasi `%A'\n" + +#: linker.c:3061 +msgid "%B: warning: duplicate section `%A' has different size\n" +msgstr "%B: peringatan: bagian terduplikasi `%A' memiliki ukuran berbeda\n" + +#: merge.c:828 +#, c-format +msgid "%s: access beyond end of merged section (%ld)" +msgstr "%s: akses diluar dari daerah merged (%ld)" + +#: mmo.c:456 +#, c-format +msgid "%s: No core to allocate section name %s\n" +msgstr "%s: Tidak ada core untuk alokasi daerah nama %s\n" + +#: mmo.c:531 +#, c-format +msgid "%s: No core to allocate a symbol %d bytes long\n" +msgstr "%s: Tidak ada core untuk alokasi sebuah simbol %d bytes long\n" + +#: mmo.c:1187 +#, c-format +msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" +msgstr "%s: berkas mmo tidak valid: nilai inisialisasi untuk $255 bukan `Main'\n" + +#: mmo.c:1332 +#, c-format +msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" +msgstr "%s: tidak didukung dengan urutan karakter lebar 0x%02X 0x%02X sesudah nama simbol dimulai dengan `%s'\n" + +#: mmo.c:1566 +#, c-format +msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" +msgstr "%s: berkas mmo tidak valid: lopcode tidak didukung `%d'\n" + +#: mmo.c:1576 +#, c-format +msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" +msgstr "%s: berka mmo tidak valid: diduga YZ = 1 diperoleh YZ = %d untuk lop_quote\n" + +#: mmo.c:1612 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" +msgstr "%s: berkas mmo tidak valid: diduga z = 1 atau z = 2, diperoleh z = %d untuk lop_loc\n" + +#: mmo.c:1658 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" +msgstr "%s: berkas mmo tidak valid: diduga z = 1 atau z = 2, diperoleh z = %d untuk lop_fixo\n" + +#: mmo.c:1697 +#, c-format +msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" +msgstr "%s: berkas mmo tidak valid: diduga y = 0, diperoleh y = %d untuk lop_fixrx\n" + +#: mmo.c:1706 +#, c-format +msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" +msgstr "%s: berkas mmo tidak valid: diduga z = 16 atau z = 24, diperoleh z = %d untuk lop_fixrx\n" + +#: mmo.c:1729 +#, c-format +msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" +msgstr "%s: berkas mmo tidak valid: awalan byte dari kata operand harus 0 atau 1, diperoleh %d untuk lop_fixrx\n" + +#: mmo.c:1752 +#, c-format +msgid "%s: cannot allocate file name for file number %d, %d bytes\n" +msgstr "%s: tidak dapat mengalokasikan nama berkas untuk nomor berkas %d, %d bytes\n" + +#: mmo.c:1772 +#, c-format +msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" +msgstr "%s: berkas mmo tidak valid: nomor berkas %d `%s', telah dimasukan sebagai `%s'\n" + +#: mmo.c:1785 +#, c-format +msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" +msgstr "%s: berkas mmo tidak valid: nama berkas untuk nomor %d telah dispesifikasikan sebelum digunakan\n" + +#: mmo.c:1892 +#, c-format +msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" +msgstr "%s: berkas mmo tidak valid: daerah y dan z dari lop_stab bukan-nol, y: %d, z: %d\n" + +#: mmo.c:1928 +#, c-format +msgid "%s: invalid mmo file: lop_end not last item in file\n" +msgstr "%s: berkas mmo tidak valid: lop_end bukan item terakhir dalam berkas\n" + +#: mmo.c:1941 +#, c-format +msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" +msgstr "%s: berkas mmo tidak valid: YZ dari lop_end (%ld) tidak sama dengan jumlah dari tetras yang mengawali lop_stab (%ld)\n" + +#: mmo.c:2651 +#, c-format +msgid "%s: invalid symbol table: duplicate symbol `%s'\n" +msgstr "%s: tabel simbol tidak valid: duplikasi simbol `%s'\n" + +#: mmo.c:2894 +#, c-format +msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" +msgstr "%s: Definisi simbol buruk: `Main' di set ke %s daripada ke awal alamat %s\n" + +#: mmo.c:2986 +#, c-format +msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" +msgstr "%s: Peringatan: tabel simbol terlalu besar untuk mmo, lebih besar daripada 65535 32-bit words: %d. Hanya `Main' yang akan dikeluarkan.\n" + +#: mmo.c:3031 +#, c-format +msgid "%s: internal error, symbol table changed size from %d to %d words\n" +msgstr "%s: internal error, tabel simbol berubah ukuran dari %d ke %d kata\n" + +#: mmo.c:3083 +#, c-format +msgid "%s: internal error, internal register section %s had contents\n" +msgstr "%s: internal error, daerah internal register %s memiliki isi\n" + +#: mmo.c:3134 +#, c-format +msgid "%s: no initialized registers; section length 0\n" +msgstr "%s: tidak ada register yang terinisialisasi; panjang daerah 0\n" + +#: mmo.c:3140 +#, c-format +msgid "%s: too many initialized registers; section length %ld\n" +msgstr "%s: terlalu banyak register yang terinisialisasi; panjang daerah %ld\n" + +#: mmo.c:3145 +#, c-format +msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" +msgstr "%s: awal alaman tidak valid untuk register terinisialisasi dari panjang %ld: 0x%lx%08lx\n" + +#: oasys.c:881 +#, c-format +msgid "%s: can not represent section `%s' in oasys" +msgstr "%s: tidak dapat merepresentasikan daerah `%s' dalam oasys" + +#: osf-core.c:139 +#, c-format +msgid "Unhandled OSF/1 core file section type %d\n" +msgstr "Tidak tertangani berkas core OSF/1 daerah tipe %d\n" + +#: pe-mips.c:607 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "%B: `ld -r' tidak didukung dengan PE MIPS objek\n" + +#. OK, at this point the following variables are set up: +#. 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:723 +msgid "%B: unimplemented %s\n" +msgstr "%B: tidak terimplementasi %s\n" + +#: pe-mips.c:749 +msgid "%B: jump too far away\n" +msgstr "%B: lompat terlalu jauh\n" + +#: pe-mips.c:775 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: pasangan/reflo buruk setelah refhi\n" + +#. XXX code yet to be written. +#: peicode.h:759 +msgid "%B: Unhandled import type; %x" +msgstr "%B: Tipe impor tidak tertangani; %x" + +#: peicode.h:764 +msgid "%B: Unrecognised import type; %x" +msgstr "%B: Tipe impor tidak dikenal; %x" + +#: peicode.h:778 +msgid "%B: Unrecognised import name type; %x" +msgstr "%B: Nama tipe impor tidak dikenal; %x" + +#: peicode.h:1161 +msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" +msgstr "%B: Tipe mesin (0x%x) tidak dikenal dalam Import Library Format archive" + +#: peicode.h:1173 +msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" +msgstr "%B: Dikenal tetapi tidak tertangani tipe mesin (0x%x) dalam Import Library Format archive" + +#: peicode.h:1191 +msgid "%B: size field is zero in Import Library Format header" +msgstr "%B: besar field adalah nol dalam Import Library Format header" + +#: peicode.h:1222 +msgid "%B: string not null terminated in ILF object file." +msgstr "%B: string tidak diakhiri kosong dalam berkas objek ILF." + +#: ppcboot.c:414 +#, c-format +msgid "" +"\n" +"ppcboot header:\n" +msgstr "" +"\n" +"ppcboot header:\n" + +#: ppcboot.c:415 +#, c-format +msgid "Entry offset = 0x%.8lx (%ld)\n" +msgstr "Ofset masukan = 0x%.8lx (%ld)\n" + +#: ppcboot.c:417 +#, c-format +msgid "Length = 0x%.8lx (%ld)\n" +msgstr "Panjang = 0x%.8lx (%ld)\n" + +#: ppcboot.c:421 +#, c-format +msgid "Flag field = 0x%.2x\n" +msgstr "Tanda daerah = 0x%.2x\n" + +#: ppcboot.c:427 +#, c-format +msgid "Partition name = \"%s\"\n" +msgstr "Nama partisi = \"%s\"\n" + +#: ppcboot.c:446 +#, c-format +msgid "" +"\n" +"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "" +"\n" +"Awal partisi[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:452 +#, c-format +msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "Akhir partisi[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:458 +#, c-format +msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" +msgstr "Daerah partisi[%d] = 0x%.8lx (%ld)\n" + +#: ppcboot.c:460 +#, c-format +msgid "Partition[%d] length = 0x%.8lx (%ld)\n" +msgstr "Panjang partisi[%d] = 0x%.8lx (%ld)\n" + +#: som.c:5137 +#, c-format +msgid "" +"\n" +"Exec Auxiliary Header\n" +msgstr "" +"\n" +"Tambahan exec header\n" + +#: som.c:5440 +msgid "som_sizeof_headers unimplemented" +msgstr "som_sizeof_headers tidak terimplementasi" + +#: srec.c:261 +msgid "%B:%d: Unexpected character `%s' in S-record file\n" +msgstr "%B:%d: Karakter `%s' tidak diduga dalam berkas S-record\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: Checksum buruk dalam berkas S-record\n" + +#: stabs.c:279 +msgid "%B(%A+0x%lx): Stabs entry has invalid string index." +msgstr "%B(%A+0x%lx): Masukan stabs memiliki index string tidak valid." + +#: syms.c:1067 +msgid "Unsupported .stab relocation" +msgstr "Relokasi .stab tidak didukung" + +#: vms-gsd.c:338 +#, c-format +msgid "bfd_make_section (%s) failed" +msgstr "bfd_make_section (%s) gagal" + +#: vms-gsd.c:353 +#, c-format +msgid "bfd_set_section_flags (%s, %x) failed" +msgstr "bfd_set_section_flags (%s, %x) gagal" + +#: vms-gsd.c:388 +#, c-format +msgid "Size mismatch section %s=%lx, %s=%lx" +msgstr "Ukuran tidak cocok daerah %s=%lx, %s=%lx" + +#: vms-gsd.c:679 +#, c-format +msgid "unknown gsd/egsd subtype %d" +msgstr "tidak diketahui gds/egsd subtype %d" + +#: vms-hdr.c:328 +msgid "Object module NOT error-free !\n" +msgstr "Modul objek Tidak bebas-error !\n" + +#: vms-misc.c:474 +#, c-format +msgid "Stack overflow (%d) in _bfd_vms_push" +msgstr "Stack overflow (%d) dalam _bfd_vms_push" + +#: vms-misc.c:489 +msgid "Stack underflow in _bfd_vms_pop" +msgstr "Stack underflow dalam _bfd_vms_pop" + +#: vms-misc.c:808 +msgid "_bfd_vms_output_counted called with zero bytes" +msgstr "_bfd_vms_output_counted dipanggil dengan zero bytes" + +#: vms-misc.c:813 +msgid "_bfd_vms_output_counted called with too many bytes" +msgstr "_bfd_vms_output_counted dipanggil dengan terlalu banyak bytes" + +#: vms-misc.c:931 +#, c-format +msgid "Symbol %s replaced by %s\n" +msgstr "Simbol %s digantikan oleh %s\n" + +#: vms-misc.c:990 +#, c-format +msgid "failed to enter %s" +msgstr "gagal untuk memasuki %s" + +#: vms-tir.c:57 +msgid "No Mem !" +msgstr "Tidak ada Memori !" + +#: vms-tir.c:300 +#, c-format +msgid "bad section index in %s" +msgstr "Indek daerah buruk dalam %s" + +#: vms-tir.c:313 +#, c-format +msgid "unsupported STA cmd %s" +msgstr "perintah %s STA tidak didukung" + +#: vms-tir.c:318 vms-tir.c:1120 +#, c-format +msgid "reserved STA cmd %d" +msgstr "perintah %d STA direserve" + +#: vms-tir.c:410 vms-tir.c:432 +#, c-format +msgid "%s: no symbol \"%s\"" +msgstr "%s: tidak ada simbol \"%s\"" + +#. Unsigned shift. +#. Rotate. +#. Redefine symbol to current location. +#. Define a literal. +#: vms-tir.c:497 vms-tir.c:606 vms-tir.c:704 vms-tir.c:721 vms-tir.c:728 +#: vms-tir.c:736 vms-tir.c:1440 +#, c-format +msgid "%s: not supported" +msgstr "%s: tidak didukung" + +#: vms-tir.c:502 vms-tir.c:1297 +#, c-format +msgid "%s: not implemented" +msgstr "%s: tidak terimplementasi" + +#: vms-tir.c:506 vms-tir.c:1301 +#, c-format +msgid "reserved STO cmd %d" +msgstr "reserved STO perintah %d" + +#: vms-tir.c:621 vms-tir.c:1445 +#, c-format +msgid "reserved OPR cmd %d" +msgstr "reserved OPR perintah %d" + +#: vms-tir.c:681 vms-tir.c:1509 +#, c-format +msgid "reserved CTL cmd %d" +msgstr "reserved CTL perintah %d" + +#. stack byte from image +#. arg: none. +#: vms-tir.c:1028 +msgid "stack-from-image not implemented" +msgstr "stack-from-image tidak terimplementasi" + +#: vms-tir.c:1046 +msgid "stack-entry-mask not fully implemented" +msgstr "stack-entry-mask tidak terimplementasi secara penuh" + +#. compare procedure argument +#. arg: cs symbol name +#. by argument index +#. da argument descriptor +#. +#. compare argument descriptor with symbol argument (ARG$V_PASSMECH) +#. and stack TRUE (args match) or FALSE (args dont match) value. +#: vms-tir.c:1060 +msgid "PASSMECH not fully implemented" +msgstr "PASSMECH tidak terimplementasi secara penuh" + +#: vms-tir.c:1079 +msgid "stack-local-symbol not fully implemented" +msgstr "stack-local-symbol tidak terimplementasi secara penuh" + +#: vms-tir.c:1092 +msgid "stack-literal not fully implemented" +msgstr "stack-literal tidak terimplementasi secara penuh" + +#: vms-tir.c:1113 +msgid "stack-local-symbol-entry-point-mask not fully implemented" +msgstr "stack-local-symbol-entry-point-mask tidak terimplementasi secara penuh" + +#: vms-tir.c:1387 vms-tir.c:1399 vms-tir.c:1411 vms-tir.c:1423 vms-tir.c:1488 +#: vms-tir.c:1496 vms-tir.c:1504 +#, c-format +msgid "%s: not fully implemented" +msgstr "%s: tidak terimplementasi secara penuh" + +#: vms-tir.c:1562 +#, c-format +msgid "obj code %d not found" +msgstr "obj kode %d tidak ditemukan" + +#: vms-tir.c:1870 +#, c-format +msgid "SEC_RELOC with no relocs in section %s" +msgstr "SEC_RELOC dengan tidak ada relokasi dalam daerah %s" + +#: vms-tir.c:2152 +#, c-format +msgid "Unhandled relocation %s" +msgstr "Relokasi %s tidak tertangani" + +#: xcofflink.c:566 +#, c-format +msgid "%s: XCOFF shared object when not producing XCOFF output" +msgstr "%s: XCOFF objek shared ketika tidak menghasilkan keluaran XCOFF" + +#: xcofflink.c:587 +#, c-format +msgid "%s: dynamic object with no .loader section" +msgstr "%s: objek dinamis dengan tidak ada daerah .loader" + +#: xcofflink.c:1150 +msgid "%B: `%s' has line numbers but no enclosing section" +msgstr "%B: `%s' memiliki nomor baris tetapi tidak ditutupi daerah" + +#: xcofflink.c:1202 +msgid "%B: class %d symbol `%s' has no aux entries" +msgstr "%B: kelas %d simbol `%s' tidak memiliki tambahan masukan" + +#: xcofflink.c:1225 +msgid "%B: symbol `%s' has unrecognized csect type %d" +msgstr "%B: simbol `%s' memiliki tipe %d csect tidak dikenal" + +#: xcofflink.c:1237 +msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" +msgstr "%B: simbol XTY_ER buruk `%s': kelas %d scnum %d scnlen %d" + +#: xcofflink.c:1273 +msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" +msgstr "%B: XMC_TC0 simbol `%s' adalah kelas %d scnlen %d" + +#: xcofflink.c:1419 +msgid "%B: csect `%s' not in enclosing section" +msgstr "%B: csect `%s' tidak dalam lingkup daerah" + +#: xcofflink.c:1526 +msgid "%B: misplaced XTY_LD `%s'" +msgstr "%B: salah tempat XTY_LD `%s'" + +#: xcofflink.c:1842 +msgid "%B: reloc %s:%d not in csect" +msgstr "%B: relokasi %s:%d tidak dalam csect" + +#: xcofflink.c:2640 +#, c-format +msgid "%s: no such symbol" +msgstr "%s: tidak ada simbol seperti itu" + +#: xcofflink.c:2869 +#, c-format +msgid "warning: attempt to export undefined symbol `%s'" +msgstr "peringatan: mencoba untuk mengekspor simbol tidak terdefinisi `%s'" + +#: xcofflink.c:3036 +msgid "error: undefined symbol __rtinit" +msgstr "error: simbol tidak terdefinisi __rtinit" + +#: xcofflink.c:3656 +#, c-format +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "TOC overflow: 0x%lx > 0x10000; coba -mminimal-toc ketika mengkompile" + +#: xcofflink.c:4492 +msgid "%B: loader reloc in unrecognized section `%A'" +msgstr "%B: loader relokasi dalam daerah tidak dikenal `%A'" + +#: xcofflink.c:4513 +msgid "%B: `%s' in loader reloc but not loader sym" +msgstr "%B: `%s' dalam relokasi loader tetapi bukan loader sym" + +#: xcofflink.c:4528 +msgid "%B: loader reloc in read-only section %A" +msgstr "%B: loader relokasi dalam daerah baca-saja %A" + +#: xcofflink.c:4937 xcofflink.c:4999 xcofflink.c:5294 +#, c-format +msgid "%s: loader reloc in unrecognized section `%s'" +msgstr "%s: loader relokasi dalam daerah `%s' tidak dikenal" + +#: xcofflink.c:5305 +#, c-format +msgid "%s: `%s' in loader reloc but not loader sym" +msgstr "%s: `%s' dalam relokasi loader tetapi bukan loader sym" + +#: elf32-ia64.c:1037 elf64-ia64.c:1037 +msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." +msgstr "%B: Tidak dapat relaks br di 0x%lx dalam daerah `%A'. Tolong gunakan brl atau indirect branch." + +#: elf32-ia64.c:2742 elf64-ia64.c:2742 +msgid "@pltoff reloc against local symbol" +msgstr "@pltoff relokasi terhadap simbol lokal" + +#: elf32-ia64.c:4317 elf64-ia64.c:4317 +#, c-format +msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" +msgstr "%s: short data segment overflowed (0x%lx >= 0x400000)" + +#: elf32-ia64.c:4328 elf64-ia64.c:4328 +#, c-format +msgid "%s: __gp does not cover short data segment" +msgstr "%s: __gp tidak meliputi segmen data pendek" + +#: elf32-ia64.c:4598 elf64-ia64.c:4598 +msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" +msgstr "%B: bukan-pic kode dengan relokasi imm terhadap simbol dinamis `%s'" + +#: elf32-ia64.c:4665 elf64-ia64.c:4665 +msgid "%B: @gprel relocation against dynamic symbol %s" +msgstr "%B: @gprel relokasi terhadap simbol dinamis %s" + +#: elf32-ia64.c:4728 elf64-ia64.c:4728 +msgid "%B: linking non-pic code in a position independent executable" +msgstr "%B: menghubungkan dengan kode bukan-pic dalam sebuah executable bebas posisi" + +#: elf32-ia64.c:4865 elf64-ia64.c:4865 +msgid "%B: @internal branch to dynamic symbol %s" +msgstr "%B: @internal branck ke simbol dinamis %s" + +#: elf32-ia64.c:4867 elf64-ia64.c:4867 +msgid "%B: speculation fixup to dynamic symbol %s" +msgstr "%B: spekulasi fixup ke simbol dinamis %s" + +#: elf32-ia64.c:4869 elf64-ia64.c:4869 +msgid "%B: @pcrel relocation against dynamic symbol %s" +msgstr "%B: @pcrel relokasi terhadap simbol dinamis %s" + +#: elf32-ia64.c:5066 elf64-ia64.c:5066 +msgid "unsupported reloc" +msgstr "relokasi tidak didukung" + +#: elf32-ia64.c:5104 elf64-ia64.c:5104 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: hilang daerah TLS untuk relokasi %s terhadap `%s' di 0x%lx dalam daerah `%A'." + +#: elf32-ia64.c:5119 elf64-ia64.c:5119 +msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." +msgstr "%B: Tidak dapat relaks br (%s) ke `%s' di 0x%lx dalam daerah `%A' dengan ukuran 0x%lx (> 0x1000000)." + +#: elf32-ia64.c:5375 elf64-ia64.c:5375 +msgid "%B: linking trap-on-NULL-dereference with non-trapping files" +msgstr "%B: menghubungkan trap-on-NULL-dereference dengan berkas bukan-trapping" + +#: elf32-ia64.c:5384 elf64-ia64.c:5384 +msgid "%B: linking big-endian files with little-endian files" +msgstr "%B: menghubungkan berkas big-endian dengan berkas little-endian" + +#: elf32-ia64.c:5393 elf64-ia64.c:5393 +msgid "%B: linking 64-bit files with 32-bit files" +msgstr "%B: menghubungkan berkas 64-bit dengan berkas 32-bit" + +#: elf32-ia64.c:5402 elf64-ia64.c:5402 +msgid "%B: linking constant-gp files with non-constant-gp files" +msgstr "%B: menghubungkan berkas constant-gp dengan berkas bukan-constant-gp" + +#: elf32-ia64.c:5412 elf64-ia64.c:5412 +msgid "%B: linking auto-pic files with non-auto-pic files" +msgstr "%B: menghubungkan berkas auto-pic dengan berkas non-auto-pic" + +#: peigen.c:1000 pepigen.c:1000 pex64igen.c:1000 +#, c-format +msgid "%s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: nomor baris overflow: 0x%lx > 0xffff" + +#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 +msgid "Export Directory [.edata (or where ever we found it)]" +msgstr "Direktori expor [.edata (atau dimanapun kita menemukannya)]" + +#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 +msgid "Import Directory [parts of .idata]" +msgstr "Impor Direktori [bagian dari .idata]" + +#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 +msgid "Resource Directory [.rsrc]" +msgstr "Resource Direktori [.rsrc]" + +#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 +msgid "Exception Directory [.pdata]" +msgstr "Exception Direktori [.pdata]" + +#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 +msgid "Security Directory" +msgstr "Direktori Keamanan" + +#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 +msgid "Base Relocation Directory [.reloc]" +msgstr "Dasar Relokasi Direktori [.reloc]" + +#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 +msgid "Debug Directory" +msgstr "Debug Direktori" + +#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 +msgid "Description Directory" +msgstr "Direktori Penjelasan" + +#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 +msgid "Special Directory" +msgstr "Direktori Spesial" + +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 +msgid "Thread Storage Directory [.tls]" +msgstr "Thread Storage Direktori [.tls]" + +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 +msgid "Load Configuration Directory" +msgstr "Direktori Konfigurasi Beban" + +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 +msgid "Bound Import Directory" +msgstr "Direktori Bound Impor" + +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 +msgid "Import Address Table Directory" +msgstr "Direktori Impor Tabel Alamat" + +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +msgid "Delay Import Directory" +msgstr "Delay Impor Direktori" + +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 +msgid "CLR Runtime Header" +msgstr "CLR Runtime Header" + +#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042 +msgid "Reserved" +msgstr "Reserved" + +#: peigen.c:1102 pepigen.c:1102 pex64igen.c:1102 +#, c-format +msgid "" +"\n" +"There is an import table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Ada tabel impor, tetapi daerah yang berisi itu tidak dapat ditemukan\n" + +#: peigen.c:1107 pepigen.c:1107 pex64igen.c:1107 +#, c-format +msgid "" +"\n" +"There is an import table in %s at 0x%lx\n" +msgstr "" +"\n" +"Ada impor tabel di %s pada 0x%lx\n" + +#: peigen.c:1150 pepigen.c:1150 pex64igen.c:1150 +#, c-format +msgid "" +"\n" +"Function descriptor located at the start address: %04lx\n" +msgstr "" +"\n" +"Deskripsi fungsi ditempatkan di awal alamat: %04lx\n" + +#: peigen.c:1153 pepigen.c:1153 pex64igen.c:1153 +#, c-format +msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" +msgstr "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" + +#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161 +#, c-format +msgid "" +"\n" +"No reldata section! Function descriptor not decoded.\n" +msgstr "" +"\n" +"Tidak ada daerah reldata! Deskripsi fungsi tidak terdekode.\n" + +#: peigen.c:1166 pepigen.c:1166 pex64igen.c:1166 +#, c-format +msgid "" +"\n" +"The Import Tables (interpreted %s section contents)\n" +msgstr "" +"\n" +"Tabel Impor (diinterpretasikan isi daerah %s)\n" + +#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169 +#, c-format +msgid "" +" vma: Hint Time Forward DLL First\n" +" Table Stamp Chain Name Thunk\n" +msgstr "" +"vma: Tips Waktu Forward DLL Pertama\n" +" Tabel Stamp Rantai Nama Thunk\n" + +#: peigen.c:1217 pepigen.c:1217 pex64igen.c:1217 +#, c-format +msgid "" +"\n" +"\tDLL Name: %s\n" +msgstr "" +"\n" +"\tNama DLL: %s\n" + +#: peigen.c:1228 pepigen.c:1228 pex64igen.c:1228 +#, c-format +msgid "\tvma: Hint/Ord Member-Name Bound-To\n" +msgstr "\tvma: Tips/Ord Nama-Anggota Terikat-Ke\n" + +#: peigen.c:1253 pepigen.c:1253 pex64igen.c:1253 +#, c-format +msgid "" +"\n" +"There is a first thunk, but the section containing it could not be found\n" +msgstr "" +"\n" +"Ada thunk pertama, tetapi daerah yang berisi itu tidak dapat ditemukan\n" + +#: peigen.c:1418 pepigen.c:1418 pex64igen.c:1418 +#, c-format +msgid "" +"\n" +"There is an export table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Ada tabel expor, tetapi daerah yang berisi itu tidak dapat ditemukan\n" + +#: peigen.c:1427 pepigen.c:1427 pex64igen.c:1427 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but it does not fit into that section\n" +msgstr "" +"\n" +"Ada tabel expor dalam %s, tetapi ini tidak masuk dalam daerah itu\n" + +#: peigen.c:1433 pepigen.c:1433 pex64igen.c:1433 +#, c-format +msgid "" +"\n" +"There is an export table in %s at 0x%lx\n" +msgstr "" +"\n" +"Ada sebuah tabel expor dalam %s di 0x%lx\n" + +#: peigen.c:1461 pepigen.c:1461 pex64igen.c:1461 +#, c-format +msgid "" +"\n" +"The Export Tables (interpreted %s section contents)\n" +"\n" +msgstr "" +"\n" +"Tabel expor (diinterpretasikan isi daerah %s)\n" + +#: peigen.c:1465 pepigen.c:1465 pex64igen.c:1465 +#, c-format +msgid "Export Flags \t\t\t%lx\n" +msgstr "Tanda Expor \t\t\t%lx\n" + +#: peigen.c:1468 pepigen.c:1468 pex64igen.c:1468 +#, c-format +msgid "Time/Date stamp \t\t%lx\n" +msgstr "Waktu/Tanggal stamp \t\t%lx\n" + +#: peigen.c:1471 pepigen.c:1471 pex64igen.c:1471 +#, c-format +msgid "Major/Minor \t\t\t%d/%d\n" +msgstr "Mayor/Minor \t\t\t%d/%d\n" + +#: peigen.c:1474 pepigen.c:1474 pex64igen.c:1474 +#, c-format +msgid "Name \t\t\t\t" +msgstr "Nama \t\t\t\t" + +#: peigen.c:1480 pepigen.c:1480 pex64igen.c:1480 +#, c-format +msgid "Ordinal Base \t\t\t%ld\n" +msgstr "Dasar Ordinal \t\t\t%ld\n" + +#: peigen.c:1483 pepigen.c:1483 pex64igen.c:1483 +#, c-format +msgid "Number in:\n" +msgstr "Nomor dalam:\n" + +#: peigen.c:1486 pepigen.c:1486 pex64igen.c:1486 +#, c-format +msgid "\tExport Address Table \t\t%08lx\n" +msgstr "\tTabel Alamat Expor \t\t%08lx\n" + +#: peigen.c:1490 pepigen.c:1490 pex64igen.c:1490 +#, c-format +msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" +msgstr "\t[Nama Pointer/Ordinal] Tabel\t%08lx\n" + +#: peigen.c:1493 pepigen.c:1493 pex64igen.c:1493 +#, c-format +msgid "Table Addresses\n" +msgstr "Tabel Alamat\n" + +#: peigen.c:1496 pepigen.c:1496 pex64igen.c:1496 +#, c-format +msgid "\tExport Address Table \t\t" +msgstr "\tTabel Alamat Expor \t\t" + +#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501 +#, c-format +msgid "\tName Pointer Table \t\t" +msgstr "\tTabel Nama Pointer \t\t" + +#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506 +#, c-format +msgid "\tOrdinal Table \t\t\t" +msgstr "\tTabel Ordinal \t\t\t" + +#: peigen.c:1520 pepigen.c:1520 pex64igen.c:1520 +#, c-format +msgid "" +"\n" +"Export Address Table -- Ordinal Base %ld\n" +msgstr "" +"\n" +"Tabel Alamat Expor -- Ordinal Base %ld\n" + +#: peigen.c:1539 pepigen.c:1539 pex64igen.c:1539 +msgid "Forwarder RVA" +msgstr "Forwarder RVA" + +#: peigen.c:1550 pepigen.c:1550 pex64igen.c:1550 +msgid "Export RVA" +msgstr "Expor RVA" + +#: peigen.c:1557 pepigen.c:1557 pex64igen.c:1557 +#, c-format +msgid "" +"\n" +"[Ordinal/Name Pointer] Table\n" +msgstr "" +"\n" +"[Ordinal/Nama Pointer] Tabel\n" + +#: peigen.c:1617 peigen.c:1796 pepigen.c:1617 pepigen.c:1796 pex64igen.c:1617 +#: pex64igen.c:1796 +#, c-format +msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" +msgstr "Peringatan, besar (%ld) daerah .pdata tidak dalam kelipatan dari %d\n" + +#: peigen.c:1621 peigen.c:1800 pepigen.c:1621 pepigen.c:1800 pex64igen.c:1621 +#: pex64igen.c:1800 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"Tabel Fungsi (diinterpretasikan isi daerah .pdata)\n" + +#: peigen.c:1624 pepigen.c:1624 pex64igen.c:1624 +#, c-format +msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" +msgstr " vma:\t\t\tAwal Alamat Akhir Alamat Unwind Informasi\n" + +#: peigen.c:1626 pepigen.c:1626 pex64igen.c:1626 +#, c-format +msgid "" +" vma:\t\tBegin End EH EH PrologEnd Exception\n" +" \t\tAddress Address Handler Data Address Mask\n" +msgstr "" +" vma:\t\tAwal Akhir EH EH PrologEnd Exception\n" +" \t\tAlamat Alamat Handler Data Alamat Topeng\n" + +#: peigen.c:1696 pepigen.c:1696 pex64igen.c:1696 +#, c-format +msgid " Register save millicode" +msgstr " Register simpan millicode" + +#: peigen.c:1699 pepigen.c:1699 pex64igen.c:1699 +#, c-format +msgid " Register restore millicode" +msgstr " Register restore millicode" + +#: peigen.c:1702 pepigen.c:1702 pex64igen.c:1702 +#, c-format +msgid " Glue code sequence" +msgstr " Urutan kode pengikat" + +#: peigen.c:1802 pepigen.c:1802 pex64igen.c:1802 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" +msgstr "" +" vma:\t\tMulai Prolog Fungsi Flags Exception EH\n" +" \t\tAlamat Panjang Panjang 32b exc Handler Data\n" + +#: peigen.c:1933 pepigen.c:1933 pex64igen.c:1933 +#, c-format +msgid "" +"\n" +"\n" +"PE File Base Relocations (interpreted .reloc section contents)\n" +msgstr "" +"\n" +"\n" +"Berkas Dasar Relokasi PE (diinterpretasikan isi daerah .reloc)\n" + +#: peigen.c:1963 pepigen.c:1963 pex64igen.c:1963 +#, c-format +msgid "" +"\n" +"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" +msgstr "" +"\n" +"Alamat Maya: %08lx Besar potongan %ld (0x%lx) Jumlah dari perbaikan %ld\n" + +#: peigen.c:1976 pepigen.c:1976 pex64igen.c:1976 +#, c-format +msgid "\treloc %4d offset %4x [%4lx] %s" +msgstr "\trelokasi %4d ofset %4x [%4lx] %s" + +#. The MS dumpbin program reportedly ands with 0xff0f before +#. printing the characteristics field. Not sure why. No reason to +#. emulate it here. +#: peigen.c:2015 pepigen.c:2015 pex64igen.c:2015 +#, c-format +msgid "" +"\n" +"Characteristics 0x%x\n" +msgstr "" +"\n" +"Karakteristik 0x%x\n" + +#: peigen.c:2289 pepigen.c:2289 pex64igen.c:2289 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: tidak dapat mengisi dalam DataDictionary[1] karena .idata$2 hilang" + +#: peigen.c:2307 pepigen.c:2307 pex64igen.c:2307 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: tidak dapat mengisi dalam DataDictionary[1] karena .data$4 hilang" + +#: peigen.c:2326 pepigen.c:2326 pex64igen.c:2326 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: tidak dapat mengisi dalam DataDictionary[12] karena .idata$5 hilang" + +#: peigen.c:2344 pepigen.c:2344 pex64igen.c:2344 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: tidak dapat mengisi dalam DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] karena .idata$6 hilang" + +#: peigen.c:2364 pepigen.c:2364 pex64igen.c:2364 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: tidak dapat mengisi dalam DataDictionary[9] karena __tls_used hilang" diff --git a/bfd/po/ru.gmo b/bfd/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..8ec7aba903255832292dedabdb136722d5d34d2e GIT binary patch literal 128466 zcmcGX2Vh-g`TuVmXe)b*jKc_Rp-G!AN=i$UHf;mxFiD|MO1MdG(?Axvxg8*T$VL%m z$aEm`LqMSHAu>c!NgX(G{Z!nF2;%;KzR&ZXbI(oEg};B`^mE?#yn8(F^Nw@wk9K~? zM>G75eS0ReH$36Jnaq*z$YgGqB->2p+Buobp71)jFT5A-4mZG^;jiF9@E>q8jOJ!C z`@v>d4hP^4@OoGS?|=ux-$8}DOPzCkU>%hE6QSbkff2kMD%`uE;{Q5S{J(&Ez&GI` zaL0L>%;9hboCXVU2D}sQ1b+qjKl69~(es-5nM^fY3#Y>S;8F0`a2%YnAd}%Xb0Tbj zw?Wyz7R>w9XEM8CJ{c-qXG5}YMNsKj0k?x4fdx1k z^Lc?+1YQS~-cJSd!|))?&jj@B1yx`5Q1x{Jl)nME54;Z2^fC{^ z{ow|vcwU1_=erkrID0^)^8l!HPlU>EHB>xDLzUApQ1PsQ3bz0i&XrL0bQ9bQt`GKu zQ04sNV15%SoOdnqcCtM@9djM*hfl$^aLQt@|Ib0y`_u3c`0gbh-ejnJHo!6PRH*0I zLFMxqI1~O7s(&2xes4D`p~~+9sBr%$*#8M0fq92UZ>J5g0`oQSQ1~oVJAM_8g=3mB znelK5B#O)#kgk&XI;0C^c5U{4yBroUUkMfOJC}NT4uw6KyCGGY`5`@XJu?eiN#HPFRBYsQmvOs{HoNc{!|tlQ7>3B|pCv%sZ^4PhhTv%GVmGc6kd_ z`o0Q}grhn#8JcpY9x7cQhw2|MLb>}Zqzh)ItnzkuE}V<`>u`U#OQ**>6{@`Ypvv!d zxF38Ds{DQl74DuVd%K^={p)K9hbuS@Oh~6+_B5^KMN}V zYv7^q4ygKh2`W9?bbC5xK|MbaHo!~ZLGU}l{-03k9!n?N6V8K5e+!g+It$AG^-%Tk z9GngR890;5s>gh0;PX)ZYv;ZoccAirDx3+ggDUs$K$YjXQ@xyepu)ce?hRjp74S8v z`r5zW!^=Y1UkDY?{ZQri2dH*(VBX7NJ}k$)2C5uygonWIL#5}P13tc0K>4qS`@%DW z`9`=q=5N4C_-i;8?pg3~YM}aW7n}q?38%uB;B>g{YH!zd5K)o25!S*tq1??_SO#_?*CY*a=rx0{$Z%{_&GcZZg;llcNtW8m%};m8-cr@ ziIEnH+U{oy<8jY zpM(2i{xg)nozC}k&w?tCPIv&kA@E5k|38CrzvBhouV)5c5coByeD8Ll*Yhkm7xP(A z;XVUZ?|+4d!SNq-In)kiz8NZ>??Bb#J1_G7FaxSwPl2kRkHH!6d3Y>*$HngN1h^08 zOJF&?9V*_h2bNvp(S=Zj$@=CyDhd?9e>4|_h3gKE!LL#6)(cnEy^RUTd? ztiXIcoCq(1DyN6x0{9O&3(ozByFU-sW4;@zeE$YjZd0#z^U}Z%!%FPG7Whx7@;vmT z?!Oc2`F&9N`5BxIcm9~CuL+LBd?r*pw?ozY&!N)uwrjjzYoPLTKJ0>b!`X1}Yh5m{ zfb%im2vt76fJedc*LnWdz@ssL0m|LB*L%3la2e)n;1u{LsC1TpoH+qp3RPa8f~u!) zLzUydq1=tX!S(qQ0(;?mu|F5?0&jpj!F!;>`65*Lyav^us%~`q)o?22&p?&O%kVJx zuA4l(BjFg#$3eBPbKr7#J5+w&akIbhH++L`7uYx z9jJU{KJD&ygu7uJ16AHLgSi79i201bTcPUvSy%;MgEg@HHXpw_;4zq=f-0XqKjYyw zL-{)ss+{kHO2=>D@o<;hojtG)^OvE*-QlxdpYMmqV!kf$RjBq^e}~uanNa43pz8Pc zQ0*o9AFtA4z!z19>2i$!QD&N<^^>7dPEZhyg9L%pl z)!Ta>^ZZmn^^>`QStx&JLWTdaz@G+=f85*i8d%Nqr{E0u&tRVZgv*IMoQD0w@NoDi zsB|9kq?=pe`!U}DmES+W*>K-4c)M$XD#t5=c|DZ7pTi2c>r?0`uokL3?}Y8}RX7hG z^F`*2@J6V1_>QN&{ujUlF?Yb(@KQJ(eibTx?|jC~c_vi-t_bXfyJ9{E9sxfFRqx+~ z>L=Sg>*Y2Twqsrh_lEbva`<8}zYgDrdFSW6U01>}nA@P@zZ9;3Ps2Uo{$KL;Qw^2x z6QJbHC4mn>$%CH-{tk}D{01BY%bxfCFb*DsxdAHtQ{iIxB8=dEU-o`E8y<|gAF91y z7tD9UeKCI%O8)&hJkNZ^%WD^?@F&9q;4)YPPlx-!$D!oN51`8J-7ok!Hv{g4`RKrv zuom+1S)m-9lX@bgglyA3McZ$O2!+t=OyY^Zc) zq58*Ja9j9M_+I!47{SNjF7Rcj`hOM5{WdSU{oYXKiBSD=9#nr_0T;m@I1WAz)gNAg z`@ww&z1_`%YG-Sp;<-5R#=y@9J_{Ro{yiAMgEx5j%!jJ4%b@JRC|5|%HK;+ zUhd)1aJL`09Lz$=g&Uyq^F4SH{4G?x4L|gDcsf)$Uk?w3Ux0G|JE-#hH&lHd z__Dh@3aUQ)pz8B#D0%fbTn*oV3t;z;7+c^2a6a7q$L{__coyalLfOCTC+>bRRR6jb zo(W%u&G3Yu`h4&6@Dj|GKl66?FuVx!Hvj8#?MkTh-U&~G8=(9*{M`H1t?)gVpA38f z?uhw2a9{Wv1(i_Y-!z|`If_d9tdHL-DRUaRN3TL}t zd%f)m)eet<^I<=n2OohouJJma=0BToCjbYJ`QP$nX2ED7P$Q%kcDs% zj)9l|(dF-Y*n)Y&pIrW231?!y2hM?ifXe@*SG_&2g6hv#z%$^x{_N?!03L(+At<@N z!)x9TFNWu0ejZ*5kN%6d+wZ_e%zMA?@$|yEnD2x2@J;vuSo?;z|0ki^>5+f+`g;Tt zRc7xu-QNy>qYq(jhR?w-!mHuMfA@a8?>~H<>?}A1`yWB&bC-WIcEk6>hBC?<9*_BL z|Mu`!z>_h*09)a-|M^)x zJ9sSYe@9s+2fqSUUK8J0X5-BrQ11Q)3-GLM%4~h_b+{07^SjEdJU;((Ple}iTW0O* z4R`|Plea6g`Tdt*KjuBRFSGTMOW}!_--L?q*d5AD5B(gJ`Aw+$U9@9aW&mCbRZiRO zNgy**w574Exdl-YRD1vSp!1sA}>j_~?F8!F$w zfhvb%XO@{B@*P--dB<7q?nrnu=Fh^XVEvJ0nJ3_TW|w8w!>_=z;n_8wud-S%ujTL= z?4N*Ngy+pE%X}Hmo9pd;$2#wqmqDfX=TP!*!Mrk)w|BwWm`Ba`dOr%Povw!}zr7cD z{j7#+SKow-;M96=kLN?R!>>Y>(;i28elLP*C$9%{+tF@62-WUpHk4&P2=9dR;FN`4 zZl^@QV*AA|f3r~I##Qh@_{?c40@9n3KFc&x5Lmi{P>F zIjDBLZ`Rw%rO@OmJO}$#t=^7)1NXvwXj@q(g7aWG?0{-_mqVrVHMl*T(O#Ch93BNf z4ZjQLz%z4YnSaACLiM|+R+eRMgS&LNoOuMQeeSu+>#-k7&v_n7PBeEqpMg!7r=0BZ zUj!vz{s2|K^H1^i{!zFD^FN{5-NLRi(@U>`mtfw$+rzsKs=bfuaebi~o{RbWQ1&Z& zeLT87aQ{9}=kz|wj+JO?U0FF}=S-Ps=B^Dv9~fOEXQ&xdDY{ywaN%g^=rFNdnXZ^5VFzUR4I{z+ix z`JS#nL&>KV7r6X*0jfV9e4)$XE1~-Bgb#Xs-2uOidCWy+Hm~>>R6E-B;xe0$cSFhd z3xj!^OUi8Cv>)6X`x$}D;B3qVcqDuPYM$~2RJymj)XU*msCIiNR6EUF=KXLHlzhGo zO7Gh4@*uCE>i>DDbiMD2GFv|xfQsiPI34~7R>M86^mrPftAQV7coB(c*Vy&zb9T(X7lZ5;rTqDdu>_f_wdW`EAYYVyuY4%y@&TVxElMy z$6en34qk#edqY`f4g4LHx&21hOaBNPFfY2v%k$$<{(l3{hS{4v{+~hVBiUPAzFh-V zZx2D0n2rN8VmWj2p4hudPVg1f+3Q2n_P?g1}=v*3+T>H8tv0ZzT$-PJ+0zqL^9 zQ2DBS!2O>NS782RVA+FS?k%tq`wdY2HuI3%w?WD4Z$qWy zFHr4e?89E3jZpIa8&LH>^AVTJeNb}YIVgYsf~wD|N4?w!pzNQ4l1p#GnQ;1JWwuVg z8h#4%r{G6n{o}4z{W$Q{C%hlN{Ymdf=fZ1n_f2>PJmm{s|G$PBM^1jq^_K5Jndg16 zEb}H@4{I3ne9W|2sJ*u?KwC1L6!Hn;TPbPFS-199lnhD?B~le z55g0_T$Z^L?*0`I?`f!Vo%({y^J}5P{T@59{j4Q~(c z`=;01QBd(+4%^^sfyaKU%+~834SWv1hvyrh^7}HBT$=rDZ}->3Co%sJYCO2%CGX!= z-|>9)L+OQIhmudbf7kofba*W0bK(2o_o3R)8&GoOkncHjQ2pu_cm;eND*xwy-}Uhq zpz3ex4?O&cP`Xro-dGyabU5lam-N)d2;j?f${4rb#_xxY)w>@yI+(Grf zCxiX3gL$W)m)ZWz45)Hj2|ofaf~xnuf8lyf2UPhCLbbp0U-~%n5m#w|>-3kxE{9~x{9Q|uAr#h%{?gBUyz687AuD|hd;T*Uv=I=wv zhgYD==aAp}_|XfSFy95=58w8?GTTRLh6iHqgc=7fhYR5o@KCtz?_EEh4rgKR3+B7w z*_dB}s>fA-@b+{&lz#RM+z0*?{t5m^&#C7>{n6Y1wy%1A`r(;8e;O*?wSV?Te9!Z@B+A&p*ZWFU(JIjmFUUqANu@m%fW zzTl=O@ObR?_ZhAluFrF+KGT1H3vMRDh%}6a=i~pQTpIhw$sRt#^;Pcmcb~)d#B_TD zZkLBRPYw)DGTY!sZC~x-8(iynehJs7QtoDR{~}jD*ww)A;Py*!3~AEe|8VWg{d)*+ zzS*#E4L`*7I@f7jQ+akB*EhM>-`jEjuMno&Alu>_cqh*grI}k{3;Y&#U*(c)-I?nL zTy#16JA;3}fV&+-dT!+YHLm?J(|qmkY|IyN_Z_Iev#>vcYZm6o@LaBcb3ccxI=J}& zL~K~Uc!+ztn#owT|EDm|!2A+ikNLgCwJY~k*xiJ=k?RXw`rD7|dh8{a^tUJ1B;2;Z zo$)tWmi&#zPBKJ)XK-J~wHNn~b4h2`-yVeXcCP6>`ya0O?`zyFjt$t4;{GJA|8RdL z?)7&dam9bX<>uYkGmK^GxfbGXXRe=eoyqk^a5%tymgh}ef8kz#zjtI1h4%L={=J)L zhjN|E{TI0=aj8G+Z)I>Nz2HW(VLS=^34Zif5!~qhiq!qzWWnDrg1bWkk9X_L&6v;T z{?qVzu4VY0$F(=tFGDzc!IOf&S=@Kv{_~jc;`$Hwx5MqB{x0PCqTp8M_1q(>?C&{; zjla6RpKC{+BbqW_4sN7lK9TY-cja84#O}hB{R!OPiJ#qr-L&9evhFJG{{X)T8=(Hi zaK8uq0=yE|LWU~)(>U<~?oW4P<}AWIn(KV*K8@XBTnBUg7`saBPT=}yhmb~Y;+jG@ zdvmp6_c`3$#Z|@qHP|(Be?R;Rm;RpMdMEcczy%?^n<1)9=EGc1WB)0xp?~A?a{zH^ zeAizeZoeJE{IOdl|6UyIe->=M9C%q^8_(Y#+%UvtYPsK?uzw%y?!k^B*8ZvkFAaW$ zw_$e)JPr5X4Sr<*CG2Oz&&m+~7Gu|pn@_`UaOv-e;O9-ucVNDXYy0r5jAzrh{>IgX z{i9ri!9BMbhWN}GTzg@+JLYZSHgG(4cSGqF440XQq5ekkd@1Jda{naPU%61nGM~Wy z?{F1n{cX$r+pyb(a@c|E&)njy(e;>vECw51_hZk@~ zJbM89r?@J(@5Qc_`#rh#!@ON^KbiYGu=@#DH<$jT%lwe*aGrgfOMmYm9Y6Qm%&XWP z74A`WlfQ`jYcO2{uMM_4asNT?kAXXLNne@`>j~o@!A&7B#&$eU|9u<766~bI?M*sn z;P>4r2P-h2gZW8#u*w~`zvMp0)y`Fh`N5R?`1TQ=&B5?I&u`%#^~?Sqf$t)m9HtAn z-;MhMJO%R`!A%41hyJa^ZYI}lT$kbQ39k3yw;hK&a(@%ogp{Xmg)lw?kLB6DT(9zc z3j93RSFzuN>(AJo4%fh=VEV5I!}GzS6aIAp)EB&_u!@E;jLaY`g<4lALGHvxLwNqC%LcTel_<4 z@I&wbt~A%ZU z=8tjT&GjnozY*+j4UQkjd;|8cbLsDa@Z3#|QP^LN-Eu7MF?6OIj~oO@b@3?+qm8n!aI!nV|eyG_;sE?$Nin~11Sg82uqnd=_xj^SF!b!>3QZDv27eHim9 zuJgDK#qJ&Of4RQNwIk*;adR-&JGh?Y>gQU*v-t0Aq^}1%{e6_Hm;1-K_QU>1X6yev z9o%%lRpEXvd^X&F3;rS8e+Dka+qJ>G0v^b;C|(LBGAYYF$;g>?QE z^Hj{ca{Y#D2G{H1*?W2RVa#{KeX+Y3cELO>z(4YAad6A6{XL8MWv+{G^CS2We3K{t zvD>6qWo{Y37Mhxb!)I+2oK=;ICgL6`6sylRe08c`E%I!!SmsPP=CLMKZK*X zmIb>n!?|4F<0{901J`f4zmDsAt`Bm38@ofecHw>}()fP-ujA6+;avCgEHkQZZC`Ky zKvdJ--k;0oqvmXDS1uYgYNHRzCrut|fv}W_U$ZVp4-nM9LS8ujm>6wsi8z^ME#`&`ev7i227p}^u zv`4)wSLSmA+^&t5mrvSg+&elm zdeq#8hDesxc)~n-NnJFrlR~IfY8n+scA&GjCm)Tq%=Y!?26F9DrN^GnwdrBh)=NS3 z4CKcVLS%n+J?)29Mfr8zt-W0YU2#}fJNC`%`iMx$8`)V`d;DNtXMcX6=)d@&fdqAp z^uWU|2A%6EbkB%}q@x&4exSe5Hn0f?g&uM?;`2GHvi;OauD>%s(Ak!cCax`~O^lwq zt|!~w*%mcH-n)fCotc6Da^*F_6*+4fw&*^kidDk`G5{aE3bceUemUZKa! zxILF|>+kFv= z??BX^Qxj~j#M=@A>r|~SFK=HF!j5J}rz@M4lh%&k2%|IPx4*ZeKieHLsuE}#$hMsl zS)X%W1{ZtTE*9P%J^u^z?f(t+u0RS*%CE;*-)+^j#W9+%{#?|VkFwE9YrzAn3O(ef zwGgT*)nT%oJ)J!rQRe{h7U&+ThgKC6ozv4Eg6fHKE~W-dJazWafmHWYh*dO&vk8|T zIkB|&=JFQFN(^-7UK$UfgtoDX82{_!cX~N)LGsfs-%_;4N<$`XpZX4+bn%B8f)b|E?QKO1V!3XwQCD~`N%uy^3Z7~ zqy>Et@I>9$*Vfug&91V(PppW+@;ntNajV;E)#Ga2tF0@!5&ibmLT5icd}V)cx7=WP zL|sj7eY85{uh7#^m+k23%;(x?Wup0Ag&fVO9btf1BjYc}r@dm5e|G>bBk40ogV9qlI|s@1$1`eSXZmCByAJy;YG? zuRuaoOd4u2d8oydp%zmUi)?FWL>2Y)uIW*b7-vqK65lDJ$&=Ei;h4xk|wzx$%yu0_A9%x z9oG4+{b#$>ZiYFM1j-lsB=kmjTJoej+t;V~;=({LXv@+3dKr-VEz#Y%?%w`&Gh4Gg zr&M&)==k_gv^-dn8cTXlZcP;0MNe;}YDJNeyPn>jzRotk8;B-PYV90Q7_#W4O9nr| zNnBr63w=4N!VAW96ox47x z&l(z5RNu1_RV{LF?kl*Kuc&T;A$7wr+|}Em;21R9a(xnbu5gVS6|1_%m==)0E}C34 zSE_>k5;sw_Fq=PRc-$TVE|bA^9_=eHze$9oYgn8Oxt@-JRk%uSs9Nf#4MjChg(V|I zsQ}|YX|lR+?nL#rzj?j=R3e#_4jZgA=my;~SP9M62BHXUq`S}T(cvh3{!D6{RkOtY z=*)pf)c35WgS1Dv{(e*z3CvlU@*0{!K5C_XN4@=MakQ7^CzaQXQO7Q?U17Cc=o#@* z7-91x2BOwc^p|$p)!B1Oiv{STw(AAuHPsp~idH6BVkObq?&wT;Z8Ww#Kdw5~MG-x8 ze+C_mWoySpogJh!*DiO8U!XHcL2K_^X#=N}lAe{F9ff|^&^F_gAx17V51?H0(VWKm zCN+91z40Wmt+%_6kkl2|bW(vE?gb_;X(PNE{;{vRfkScuC_v^(h--s)|@1smuL_jIj`YUa+R6Gu%;Ybh9?2vXeW)O3Ql?Wi-g-Zo^>uX)3}|SyI!Two2q7x^$jGYg;umTggmrcywDER$O_hCTb~G z^G-F8VTGnHa9XY(eX1Qzh~*)hFPe{}^PMzYlni$u@iHWTBRTS6a+rijB{3{e^)d-& z_SB#4>BvQ6wI(prhNB^IsJPYGG#!e1QC_+`Pjk_MJXgYtGg<4b(MDSE=9_25%AVee z5JRpa#9Lw0u<>fX-Pu!e9%F7T6RDmd2`w-b^f7qRFQxWNVjz!;`5xvxCFM&TCe;## zo)K#2Ee#Q?8H218DLA!?FhTV7Bp;;4qX1;P*5w&7e30&9eNPHRkWOm}qL?F%s3h*t z^0iv6S?8K@Th_#{R-(KqWLtYz=PU@RAjv3KGEY(G4|A1D^fg~B>1}H(^xLeRrdL}X zp^^%EDp6=8Z- z!TiW8Iux&`BpFsq8q$`u!twF=jM`L93R0~B@A*}U#AEHs8iMH>C8N~vp15*J{TvcD zG;F3z6I|y@v_&81)Umn?46kZ8LCZv=A(T{lh6Wh10=lH3**a!vs$&(Ww7-?4CiaY? z9L-<+Rs$)Gc8Gc^fzi>`+nVT2)h29)Wur6@t8Qk?N>m#oBjRVve3Xs~T>n zR$2@rM!wOYHdUY{Ew41#I3=attE2t%>`Zj@c^xO|4X#uW8d54zubJ)^Yzu>;Kz0N@ zwK_Vvz`FZQ17gF7RzuCpU@i-yXHDi{>^h9?^Ba zXN(rnSzWZ+(8yU-|9hBeFh;~ncQ#U%x=0=sqOn>9FK-`b(Tve(mu+JeQ<|_%KGEuE zlIU1Aa~oJi3qYMORlcjE$`1NTzR()4PsP)nX;Y5&kvEB=vbPVlGR&LEZAYOi+m9yP zk9cRW)>ExFb>^fB5HJ%rEg`kIi+DyA2M{J+lwMp?rUh3=D_L7$BdC#?Qp=L21vRN| zOH!;`Xv@tejI@p<0N4IEVA)QKoI+$drv|?J?RM+IIe0eotbst;tJ&p7vQ@s(rx6&kv zL1-T_>=AB(YuD8_>JWXpXJEvqMNOMtK%LeoA{uX<(rx znupmPw9>9rAt$1vy<`oSYIXOfnrP!Tt~VAAMt0eU$lZ#NS*TR!8ovHvTQBr4X-)ZD zmurzZW?-i2TB_tXo@P|rj9sI>2EyLzfV?%EWLO* z?w)1;h?!eQjujbAk$nY>B5v*Ms9+Y+ne9=$In5rc*&J?9m#!Kn>u|n#lWRw|X-KM$ z=F~JaR84i4$%d8n^;qDS41YyG)3(x2R^r#1olVMAP7RBzl2F1pcao%O(9+}WGpZ)h zZ%$%4&(mPxS&yYf*iu^1e38as-)*QzFI(H_H1QCPoy7`3)kOOn=fyUsG~A5^RT(Ym z%4z!@b&B|z1oabJI~zi6>=2q{Ny1A_qBRv~hM|$7rmJsNma6N?N^ncTj+PQun5?r6 ztJPYY;-Fp~KVF&Z$o1q{>myQIs|x`oL3p|J_V*Y17+7pOx0B6fl|ooOBXL@@3j18X z`eDB2v5!ldh=U0!70WI;#?XmF50o+!%jN3SPFrKkwCP8;@O1iO8}AZx)wIQ_7MPD_ z#cgg&LNd`}9c_q5dr+)mo20~YjGPuX5xmo|Ua+{aIjU)5*;JL&$v#17U+Ac9xoj8P zKk-6m;@AqMzPRp0`x{6)`X;()y$+j5NJ*M73(z8D+qxO_r&LKKjX4x-yp~TC8#HOpV8u!WmovqfA19lmya~c5y7h@@+$x^skub$+1BQNDI zZcp)91iH(NsC;b*)pniJ*|g?X&WQ~*i>1CR9p@1~+4iVj! zBXrbY5P_-bl;!l;c)O!syH6UU;}&7NQ}qjL=GV0}%~`~*z`~YAiUXhiV&^;V4l93)&=zoaSN;Pck55?|JQTuWVJI^(QT#%+ge7dY`kt18LA{Pkr! z`zJ6R??RDS>E~KjuIem?>*E$WhIE&(`;uxriFT*3+-)+E;P6H`<`W@(On)0^%{Z)F zyGFOkzhKYg;sZZwb$eZhgDPHgiLx*nlBxYkbdhdfknkBVEtzdBo_XSYlPLDZl!8EQN-?5OZJ;r~aVH}MP~u?Z z*o$$L2H0l3j0Uxxn^b zsv{2JRaLRp$f6@>6;nHIR$akSDu3u~Y986*?k|c_5GuiSaTzS-FQ`45EOBabZIGzt zeJ+nX-b!KGsT7Sy#ZpZdoMnI`jJXcxKqIH5MEIAuFA??h1@oUs&yoU9YekjOV(*p+ zG+O=IN)BVGLk6Qq5l_ui3Xi&xkE1#Y+|}FL7o3JEoNttEbP$NQes#iRe&gb$OH2r_ z3t{-$jD(k+PLY_f>?FNZvlts5qVj^P+Hruxi>)Nga84k8p`f7APzPX4jd3O2vSpsa z+IlZ@3>J*nWY>AsD_yEY60s!PVtJ#z| zUE0O$scA_~BNLlgWLVe>Y8r|*b|O}?ERI3@$rYR}G)+D4acKLr)V?I9)GApjVLnd9 z%V)#Wr)m5^wr8M%Esm5o->Mz*s3bafTrwC}O|#HjX!pqD6T99_jP4CW@{>R!`xz5A zS}=&cC1SxfQ@Z08tr++e3DwV+^*T9wTGIVP%1cVs`c!9kcUmgPkqsF)B@`{|eQj@H zxZR8=UYzhPxM)o-%L)FHp&Ip}6)kREsfMQ!vO>GjM_Q^}jb%(iBDeINiPTmm15-Zwl=Vh z?#Gv$^++YSSg`+BN#BaBZ*gkF94J1Au!+(vR%g;V7|~S~#YwDDC)1{c%rFs*`^Eo< z?4V;J1a*Xkb4Q5?F5R#<8H7|yoqQXbW?SBgchoc?(qZ3HfowHwE4uLmN#EoZsxT|o z0TjjzpJ&AmnXqv}Kdd`wFQY5VJ3`6we{fdnM}ccOmtO0G(dA?gKSMhu)?KF9XD_%L%-W-j_!b~j{ zCd=m$qBSL8tWIrB(O1uhEDy+=2lZBFTFmIA%~7fpi#C+(rHi?p)~47cSza}11ufD} z_C=MQdP(x2shaczMZ;p=d?3TZnDl=T#+0oN#jI|=#r^TZRw{t(C?}vDkBO5i%i+tw-EeNN6_?1a_AFl=vb<0kjbS`^gPTN2z zK)z8O&NN9p6xS7p`(~9W#8uc_vaDD7(l03tLB+c@v3N*zp?E|JqJkH?yE)yi_w`7W zUcc0&uhh1txt>mFry1A>NUH$8{u*x=`Mc4n8L`st8uRjUUVrnDH?~)_na3sZ`hXGQ zolxj0sv4=BrsY+MI7_)H?ue!(en`qDLhanVlQ@kdg;LF16iXJ=v^2KNU(#6Du%Lea zf=vWC#C5~sW8HB+mycR15TOhQNsD5WS;BQqKaCHKSrWcDEgR~#7*28RE!ScPA(A(I zSL#TEHjdEClYu*47!I!i7sIhB&=#g>c-k$T_}pI)Cu>aow3oj}sQ=_-*qp@+=higG zUCN|K@?N){eM!c1+k%h-izx}9uDg#Hk+ipCLqM!%#M}M6tEB?4(MLKCOQ3Z8BfYOA zffO~BVq4;DO_(u-FiYbt9uKnjIoWDupDJ}$}{KVT=bTvArURhzwu0(W> z;4dBakd@as38m>QM!5;E(jS!M=QdQ)VRzNeZiKUKL&6POvd!ee!OL_t%5`}SidK9c z*7bDOW#S4gXUDykGHP3uYda-Rnvm;FtW?;Lpn|cAl&hu1w?Eii^ACa~qwC0CQpXjC zd(rWpF20<>izGy2DJ}ShUpg(NuA;HYm|b2NPZ_D`!kTY+@U79CbrFtxhn>-onc_xd zX_)Dl6TfOnTIK!kgJ8k4__2~`s}iwwUQ5P7?X{-WjGfc^A})l{#7ko_)kmsv|Y0c)n(AGH;h;a@!Aa^JJIo! z&}1wOsiejEyXltc-l?%b#Tcurq-5jM)bd(V#YS3K@WX998`Zmq6i7eYB|MKe=yX6Q zZL|`U4rsIeAvwd=-=9uZV|lxcAMsAgP#KID8UdGiNgZbNvjaK|x{^P0hSh2<6!6s# z`H;K`!4-9B-UV66+rMKN9VyLTg64EQ^Tu#0MKj3K{$L6%q1EZF_3GkwUNK0O?@3g_ zjNntnP3~DoAquN@`gm6-QAoBUF@n4!(D|HkwAL$yIcelen(YPJ9v>_GY=3i0)ileM zy4djJis2P8NprTbm;iA%+T-i5D5@3VTyT6$(D!C^ve-(~Khv`ROqF#OeK2k9MY^$L zk0jkb)Ie3SKug9N7IR3sczja_`@&aK4$`+@!Z4&QJO(-9^M`!B$UjguB%N|Ee=IZ* z_7)$h#OYIJbOl#?44UCX041xRPLo*pK9O6N%rNV1~rxUKfYg$HI|ch6qj?7H6xm z4x|^N6OmFKEt{j|+mhvZ-YH_~UJ{Vy&-Ox_q^djfbsLMWrG zRQ4?yb9#~_C3UsgGgveoKNiM#v96cVpRr#3ygSF6C&k6Ru{287i{!d^K8mCMsq+D* zVGSJ@@zBai^oqW&LcStw3#VjaJj0IrMJPN8LYJ==J$n&P~Lsc9HaI3DwBDs6uj6_|ybv zWf*0wt9vgGI~pUO>hc0n*b>*M2ioOKt#(pyG-q{cf0W+g9OAd=Xqf+z{l*8nSo;hc z#KEI|PQ(Tk-wO7^OgRrb#KW9>Fs06IO`oQ;WoNbGMiNK1Ip6jQ4oiVnL@K*t!wzjA zd9_tb41C*&N~ZhJtt#8>O*Q}2g1s820v*A5_$<(f?u%!AeGu|v9kxwuNzW$3ja~rZ z!w&v+DjPPfoZ=;~P?li_B&rNTBMb-TRC*&XZrNvRBy75}txPsTGo}UGF*A4R>ciHY z`QiAFH`io-8WzS z)dW7@TSGITr%5FXAC1A`K#qd}w$&ngSmG$q}$Sf_&${c z^zc$kGO`8Xpkr-WFw@i_EIm^;mY|L2EG+W*3DDExI<+d17}O@!_-LIJ#PQK-!p726 zD#+u{1<~NBcAE?Nk)s?EJx86{>s*@-D;@?+OCN6mg*mCT59_>yeGx-UMKWcup#BA5s9NGa+@5q#!8%SiYd|(1HE@HTux-SwkFs zTC^}7ji->Yyew9LmPL|2k2mgIW?{*J&Df3wqlg#-J%(4;Av-XUWJG271$g-=mnfys2((AF( zVSScJ^HNW+^bN^yvi~*AM`_0Oft6H%#qh$XYZH-W8zebjbxD$wXpG)&OZGvmJiU!4 z?n8mP(x<+}tD?NtB8iXgGTx10iOhOkJUuZjP@_3ZH}(cK%an(N z=5$ELKcW%qvJ9LYaYTt@DOK-}*eghteO)Yix|2-FQQ7ekW==HcdErJ)W7vxY_OT;A z-$&9}SWfoXJ%^c+gS3Rjg5Kmw8rG8c-15PWGZn)v`2=9vawA9Rj#!$0snFiSvlO!) zI4g5RD2G{@*<_Nrzc=ti2K$OwNN!C$JBgPU>caOGc?n;~x*PTOQD&pArl%eGo4K~w zY6BrJXOaGbeI2B$vsDe2SoF4M#=dgE`x;?rGL4MU)lbY&vYPqV@Zmi6JmrlE1zmk0 zYM4B!ae_WhuuQhPiTA`(j#<$TJ-Rr0#8XOtD<{l#!wOIByt$F)s=R>D2h_DSsqdE~ zd0A-;&ypEWn8NU(ESw@I^%6yRMNj(XRyn7p@r);COg=ZP)wcs0i!U|LwF4P^j5k_d zX<1s4v0ng)4`L2cQj{X$_pH2w9S3( zVG&}ypcdZvk}Kp@Iy(6oG30hDvUubi9<;4vc)0oG(?^n3-Yu!4A;I#tbBDeYk=Ci> zb~Lt?dP^;p@jZ=_D%*tLAufxD*7Si!|6qptUQ*3IJ@9G45evE2R)K&Wa36cAC{Dj1g&0Pvt&+Fg{I7@5+Q*}^eH!66G}0+rt^hZHW7jr zTk4h^KDmmeicKVCSrg(VmkP(e(#~kiM2#U^HKsd8fbbdilF))<;N zFvpt;c}OBs;aYL%BmJ9fk6MQq>S@bb@<=}QegCbFPM+dY)OD(b&7q3H><;cbZxeBUg zgJ#}ROoFy4d;hLOq70w_*)P7Vz>~eMn|_kBUAVCbGZP$9j=_x=iICWKAZcJ+;%lCL z?4D2f+wZT0pc;><$;_*%Z{U*^D3zu@By*?*_3_83MrY<}|HnrGiSTSUZ?6^j5_-u4 zEllW~4&Mdg6C3_$sA6jYX%0jH?t-5*>M{K(qZE>c9P_*6&&zxgOTP2`!}(-SiRMcH zN%KhQaI^;&{j{x#1Et4S$Vtpb+?!MFaF)8ATi;~i>t%2$X6<}fUoNbG_;sRHzPr<& zEfFo5@Qy%D*sW|f9XzS6_;F$pE!Wv(Tj28(*ef#i@qU3`jYvM1r1Kfw^bc!gg@`i* z_Pxb|zL6Eay49bvreS&#dTS*ip{9}S<{G|M-aJXA73aoQPt-$;u3A?z2ex&v#G@^t zD)*U&_y-V@S{b1)G;lc6L`?Ge{ggVpFne-u|Ad8|d`f^HDjQYaK0z~v;!%V6!$u4F zs9`tf*I0|;r&^M?5omGrJPw}ldtjOolFv9t5|iT%EJU{5w)J{v9Ct?&w!|(6u;|Z&4Yk^5xld9 z-@IAes^12PUnAy|FrJ)>mHoL~v_H?o&#l>n$GRg$vDjbOHt7(uje3V5H{H@d0(Fut zNo}Fa%6xC7xnEM#)U>c}&H``0!&Xw4G}k2O7uaX#=K)NhlYv+ZAFHYG#Aqfxaa=}+ zXX2NU+_^0-jNrHm$MKJH`OdMmo|%!Bc1IVV*`ai;?C`f`KiHK7YhJ^m@-W$4>Pi($ z+Z*o6zgai5_l(Xow$#q6U(_;h>7qGv>zZ`pBKb9icn32q>x3Q5l6Sa<_-;9-reSH_ zR);aK@tC)sfVAiTB7S5CCuekYMDou*ib0d44`gkwo0fl+nIcVm@CCGnnq?#V)9X9Q zqEPH{v7%CG^Mduz*f>?v-rl)MUkmDo`C^8IMBJpWhQ%ZL;(I-`7rgVWp^f^dST>T> zjmL?ftxqVP-dZ|Cfo`NKtWZbD9ljQBWjceGx136%+e9Ku(-`!vAlF@`;)RDuD?p4K zEb=tQy;Ut$vnze=A@o;?(eRnRY*=(ljg9(1JOcthDnXq5A6`&o$k9(RX*6t%&)V@3 zz;b=?kNzNcK@HX>te+#|L*cP5#nNkRS@a(dHc~$s?Cs@D1W$3Cwv?(P=xyE9R+k*{ z4x_YzLXX8C2W78T*vuVuZH(TDY-Dij=XFQjxN4kIKPvn4{rp~4)7+9T8@o<~WlL>M zQ(cR7k64Y;@1M}EIawAT+_18<49AH;yKM^V&&pblEn)hrr`Q)bmBJ^fVHXsxlyyyyU%c0AGH z^~uDZs0H1pWp#JHrLT}*6&%^hlV<-G4xfnZvyVpV`(yl~CF|`TmiD(iu##~2Zc0-) z1L>RUq4aFo++Gb;Y7!R=KK_9OKGkjMOl^m$0DbRCwJpWXCK*b%K182tU-9QA{ZSnJ zNowpP22$$2B&ejRhBWF^;3UJ=L*q*J&ygqFFZM+NBDGIyS)sWOhFG9GC7NfvSFOf_ zf>nGy*4s-yqce+f4W;*_?US@K?DL$Zzt>`o)fa3ip^U5CK>^QE%+3C-@uu*(zoY>% zsp6%|6&d|7*MzyOR7&S$78a&QOH=QfqMNXI*@-%hni%xLq@k*j1i@mR&o+?aLXu4; z^~yz4^I|?FKDC7(VB9PI1ysICHIDT$?$Dj{}>kZY^6&!M0}0x&mE7 z-_q2EJ_6sqhR9hMI~b!q50*XF`H@vE>@c?)9+X6_2V@_uw;*hyH_R_9*!ta}Y)_6k zaM!x62+Ce3w>f)A#?}U90gRZTEec5+czqnE;FBHk4<~s((`m{a>tDSb&zJMfK5kbg z7yT3&b28J>is4Z5YI4DE>1uSSY2sy1KyOUZSxXkKBuPrV5`MBWzz=%GA2d$2bqyT; zsi*J~5m9!rFOp6`h*#s&CL&f&O1v?s^2OF}|00n8j-@UB1^dpvJo}oHaIvy)+LV!e zs`Yl|hWkv1xHbMZ7h?#Q@u02Keo9trfW91DOn6AtNREc5WyApZ1xgQexO=Tg{#Oyk z2O@0wSfibN_d&m!NwXRrU+jFf&+InlEcI9u&thTN38Pd~DP13BL>|y`m#sG@D;nuk z6hE75tBYYXH#@+g8deu`C25|+EYrRnE6J2@i4+)1Ug|itNFM)kfesm!xUu77HsISx z-kM`|OUHuHJ534WdzDE(wkW0`O&Ngot2{_uPRQg_fhiOfVoHwY%%p_^3T5;{3|)33}HqDUTX@=*GUJtY<^MqnxPv zG<`mZ*y1bnoO-ied+$xjSvPy5A+sf3Y)E$J+VYLtkDm)tIp#C^L17g`SQ%bUBd)fe zykDWc1pT~Yr;eY+9}&>+ z6Y9rRgDVs&eb%SY$r^n4SrPjl^FlG`rI1YyST6eWov7znQjPR2@r2asbFALbAfzl|7B$ zq(;G%JY~$85oK5RqS40EuVHRWEfMiy?_+0HX+bFc+mKos&<{%xU$M%iqs9+#uR}aG z_aEva{)(DTfdOVQczwE$UPT;nm3jHlv>7SjHWhfHH7UB29{8JI>M@^ ztjShbTHy6vJHVS-m`#1$P6I;e&$NWlInvO_c3dB`2nOj?)=V;51f{F)W3~6gPlzgV z{VY<&O5VCTa$KC+;t|&%lUrJJI*Kvbdz3Ae#_vYv`}h!|<-&eLe92P#P+`bXWy*&p zv{E8AY4=FXSn7`{m_gKt7WU%Wp&WN`^%e zYl|bNb0epWhd3_Tl8X>j@o20gm%P7}d~muLySE99EvdKAybJNqV`5~_-W zl;LBUefrUY)Y^G?33Q_EO0zaK;Cmc0bKa;V2=D45iB?VTf;Jr}2`HnznwflPyfbk)EF_m6C&2YNg7pZ_Qa{l!)<6EG+poY#U%u zx$J93G}R~`y=>D-nh;ic$3EMBvd$qy!O9N4hruju6`TeujS#k|rO*hAnCW=*gH+Nt zeKIy3Pcop!I&Hk*m67TnOVeV|I;73!lO##}FvuGEth~s-&L+m~5n;KSQH^fNHnHue zj_4x(oJd%NVug$svlN~$G5C3Fn)&RNeFNcR%{)%FLv_TuD9}6**&&qdhxgC zYU}1(F$zA|End<%%&v(&?V;{idX4RDnpRP=t`&C$erd9H1~ZK{bhorKEj4xVlgbG8B=>TIOy+RH=az!-&?iuzxaAq>J+#MG5cP3 z(qG&9JNxJijOlHs@JVjI4^q*c&7a~uV%TQBJJUq4!hROdoRuWT!ilAqb*qg8V*R-y z)eMHegypfN9flOz!p&yVsh@7QV^Qt;t-rApkLG!lr+Tbq)XE9nI!qGuG8)T~UCa#I z`(nwdj@xd2*q^YUgz#6p5Z3lBPNqwye}+z0JV$GjnBm_uv<3Siu15Nn;ShJ4u`np7 zX97MOug!3_iIepxvo?TexI?++hYtL(J^HK!u78@rwtesrcR2E%^j(GSBj?(npQ&%) z*uK^mGpJ9oveS`opOE7pT3&0cRK(BxbPw^5DQ~lnHk5`=h{eVEq(3RbqP0nm;Wnn1 z4Yzi|Jj}mY7bOJ4#00b(zD^Kk$|l!{*R}(aC2J0B*&+0NX7%)`6Okgt-;FdImUf0& zRh8PUiGSFMr8isFrMPo!u;gvGRg-X^L~3Tv$cqzIueq3ECUjPrLPGeUMSm~9g5lj+ zBQIb7;$4c&@OTOp_Lk}zy=&Lvo4X@NSL!f{HTLKwuq6@m&Xs)$CUobM;!QybC7({E zl1V1R*~ECNr7kqO#Dy*T#cCfrXTG>;`!c@jQQ>P>wD%H!F4y?Nu;hBNWQr4L1zemq zCN5Z3jbDdhCqN$`DRz@oriwwDwnnw7cO{EJ!6nrgcQN(Z+M=(K$HI|D%_L=U8QGVL zt&_#;am2o)aq;}x`sSu$4CX?+H?giZM5D8+i3i1y%A)V0WI{zsf*?O}Du(2z=-$`i zBztTlUK6e%-tw6x{k=N5R#D$xaST7kz#bXjQQ=(Rq{^zpE2~B~+6lvoh53%o_KMm< zN4}!D7YBt7e!`)LqY+*C*&RKFN@mHUmn?3sn1fK1kgJ%Bo>d)9nmBQK#l*w;KdPEq zJ$2fl6Azy}5r-9xxz)B~QFMo+X%(ESsXDxRO4Xqgd1ZBU18-heG&4oavo5a>MIFa6 zg6Qbp)4FuiDJBW=@J99Wir?Zq3KUBdR7wANYWK z!Og^R_^HCrq;WGwXGRTvV(^~9&ksI2_|S$62k(hCTt4{7hI0m=9DHKK*&EKq^6U-g z4Xz)2Y{R7+E{Je>|Aw;%*W=)c!F$;f|1Z7Um#;=h!+C>`5Y>Z&_mG11ByIiR!_nYF zB;vz^kB<~u_AwHBc1Y~-)GjA)8;@zi76iLuRGbG*Nhsi2p%mmJpMuXQd{}3g0 zr6uw4ior)lXGV{5=h57T2G_7hj~={{TKJ$6JNQI2V!EiBd!r?F6&udS)x(O1d_OVx zc_L85dP4D0ZDxFs8lpm@N)xE#h|;IwgSV=B2k*t-qfuQ?`=M3DUvZe7_a6KN&z>Yx zWN%Z>(f8uVH(T-13}`nLSQ0dWrd)lT*i`#THEhCdNJB9R8sTS@cu3M+jKU8xZq^y| zf?h;PI;ACn4St$BP-#A*{-BE6a1M75k@|=1)oRLd@M_GD=68eq|5B8DOo_@s&>$;Xw^hV$vwk5g6`lK+RO@`-c~4`}^{b4$vDjzB}ygm3?7 z@TMUlT{a{nC2hTVr}Qr(((@@=l@YC*gI}qH(o@on$p1F(R-DX6E@ryf+Uhct){mku2{?%BK)VC8=FkZ?2trR(qE&4=PA zQ6x*!EtCXN{g0`o+d#I3$sv$iH=HM#Yx%xcgCC8CVASt|M7fCay<+ge@zz+qSx}r3 zev)pbq7Fy*MpTQ$ASt2f9#f;mk;YKmWA^}6aW3&)sXUAnJ$^SaMpNVWN@-JGBOHby zdc%2=4c_$Ma-eY@NwHd%dVr##U^Or?qItrVf(@5j7E62BTg*`$t;M&sMXNTnk;1*o z%1P~FeUkJcg*&9x{C9;~8rc80T&We2WyGDj@HzBR$&N=%NZiCodY)-U56Tnnk5G5O!9Cf-TmxrT;!vh~;G@|HSvih6|Jre8(+hxWDDR?!6)tE!SJRsCtrR3>z*RAH^@@ zU`Q`Ihh*IcrGUssgL_Qg)ZIGYdgFHMd<kb&1saEL#YBy>x%!90| z8Iir^Y4XMtVenxE-|oi?b&LCv)I#)_lv-?KB^C-wZSg^CdI<7!2=P7>mYOx#R7D-& zaZ3dXgJR%#2CF80x~0m!=Su)9WgBf5Pe{{?Cpk20T8<5XG-jzziZyAn^#9F=_J0`t zg(_idzn&R&39_za3`?1!?MRh&GO{FHfKiz4e1UrE;60W~n>#0x(S-#eCvzor=trbs zP@Ia}eVuQGd7tV;JvhD3vx2cw@QiCQnI7}dHVeB^Mswv#BY9?iIXs>ys#`z| z;V-!#{7|gc$B(24SRw}R@nsJp7~*J{S-M~%X(X+g-AAk(nASqmT2J7fbFBs18j)*l ztP}9$TID$=n*{2W_$&{Z?$WGzf zHVb)pqBZoSvK*=>q{ID`>ZI5W-b4>jS36fiLKe5ta_MFiqFaQOwh#=8o+PKu7sH}d zcw!j*q<)gm;yChoT@KDwGg{)Msh)TItcUTpa%Gs)oS_M`sQ^f@Zaz&Z_uA zQw@6I6I!J}8sT?VhEs7RT@n$+AYoZ>ZChChLmlm4xoul$URk?BUC8>v7CN^k7FL`# zT)MR}Z$7f&;p@Cl3m9`rnUL`_QHNXs_HpOWPVeAn7( z*=kkrefXB*8%C_4v(VwC=rA^`Z-tB#HggRBl`@4vw)AgUnsJA&RZu^O8WW87F>Le5 zbh(E&?aO9J)VW*@t5^&2{%B5PeUpSA^G@O*pAzpHdaNYOS5cEdc-vSR)J)vnPiiiv z1uRWg>#X*Rw#$!*caCHRmfrgfvIkRvJG81QKYObT3zs@ zWX;JYQbQMS`2s_8OVe=+`JG1I6hG?C1P_!xfvcPRzv|AlxvuNH?|AEc zisMW;p;CbosY?~5atudMFm)Wsw>MC@lfP zW}1Ale`f%e+Q(`Z7*Gg)u+u781pd-N2SITZH3)uJtY0H)@gW^LwF>CYM0>K&u5!xD zz!;6281Wt`N{;mpCTz`Ju3%8k(((hlRm7Sxh_LSKSLTnj|BFegkxA%A7z^Zjh*@O#D^##7jWbL(+9b9BPYjOXzpyodn+c2q& z_lf3GU{Nb~Kg5UT+{~8(J|5?1TeWM~hFjc2M2>y~)eT}k7sdi&t9?TtIP~#<=DxEm9$rX4sk>@iJ>mzwP$`rW>392vd z-uQ!7Ny*5n8el#!dweeK1o(O;%4^a+v6e5{!MRPd{x%hP6><~%FviCQTJf0PzH;$m zcgf-)Y1z-LWBy5x%OVxtEwd@lCv6wx>odjRAZU22M$qWjG3%M*W~^@ca&B{Jc9AUv zvY1K3l0Y(fg<*jWD!L-})4Y%dp28#`C9kiqzPh$DU0FLjUE|W>GpAqr4wUI3iAAF< z6nH`q>*^$l0;BIB$?{grHiERpm+`QG8ZylTXe4JG{2&E9g34i5`3h|(Q5H&VCdH>p z$)-fGKEx1aZYiiEx3uBIH~S`e@EuQ~5~E&_+3r$eXd+(vBE2x%Xu<;}fV?*_9Fwy= zC@!4cWvyZv6((g8j>53|OT*lLL7svx7q56lzLF~F__jP~k6S~E-Q~N;4HqMtrJ|dp zsSW6hyp|EgOkBaR%NltiIt=ST6*fk6AYXCd#e-H~%a^b1EUQI%o4&o}y{m5#H(gm) zM;v?ofLIpN5~vskHEICMRX z!T1VQ6OYT89zt>G0i^a{aV&?JFU&9X?T=w{Yxe*wa(@`E92(?k(4APV&x;f7S@%34 zxFZfxR>8kjVMNmG5=puDtO9v6vQvvtT23eTt%D5HNKdx1cVJAWzo;0iYHH;NcT+1U@ZLT$z&E z$@9wW4On8J+j#pwv@_Q*&^;H)c#(#SK@V>^b*wM%Y+YJb`(9w8^%Ijb5k}L8HAa{`V%CU!dg^0qzDj-u)|2H7DDh8FBatiIhMm_ehdnAl;N&VbYllN zk~=ao0+=*!EJl$$u2f45u3xl&?ZM76u-e2yLY6h-XZ)+QmZHrj)+0rrq=Edq)Hg7Y zG~l}3@a6i{8^ltY`D3Q~taJgwmMfA30fWpiV>pFYtOeISd8Z+Z;^&Tcs{8`2t&~a^ z%7+|iQHOwHQQ`ISDoV|FPewU$)M9^gkNr>VYf0?a0S;7(X2;kvwY78QCf(_FqWF=* z@OIp&LQ759Kz~ho#O7Mja4)TiuR+))$5jiIa9M`Un{FnOdckFo;`tA3cs=T)s#n;+ zaE4^O{B7s+N@&fKnqDdE)OZa`$k)gt*{|U~!x^s|j9xcHdV$4?;|2pReIdORwRlm= z%PQM+oWK*@v&N}jxJiE^17UrB01L;mecYR1kf&pRMH&xu@>rw-evC()YBi+R(-#%% zhZ;?44Fv=t?3*`6#S2E^5wQdZG9kIviEsHy4j5Jw?GZ_FHZaz4Q3LL=o$K_84-(e+ z%D`eqgfdd5P)W`h^@6&sT!9gT8MGQGPL|Tq2h)vRHe{s9O1Hk?fKMiw{!XqziO71$ z*JA>9Y>@q)o?m-K*?Snr`8j^J2{%*;@R?8gvElMlCypI^>V#pOGr^gMH9-S+c4?&G z9UToU$aalYss;nlkaQYiA5lVqJSSe3qoBWXY$oSoU@pvnadOB}8Gaz* zle|!F&;n+f>Bz(>0?&Sd@;(%+ddt4|vkJf*qYTC!=9bsiR@Vkpju?>u9mI%RL9Xc0 zbn#gPn_9!-Gip2wpb{_y)zRDsYLyO1$zU=SQUOe-3?y<@@^1t31DNw+4Q}M13;z7x zd+0cK5*!d(X^<*MD&|qjL5$uc6QWWxfTUCBUVBv@Nz45+*}z1(zbO}=45T-D+U8aq z(XJ_k5bbFV7<$|FCq#HyD8GFL1-jM9&rna_Q0XYU0(sQr0DQYStp%*W|3kyM_*gC@ zc@=r64$FS~I+uDM9zdF`l2NF;+rT2?0SaNaNT7o|e#aCM>-<;hGI*9WeR-#c=_5LW ze(Ae9iOdwBR~p580xWw96dSdyHUFqS{|olEJDCN@yFRaFFY9GKe9P%vDm!Tx)0`s0o& z35+&*fgLpi)V*E-vXI1Af=|VMSVSgBy30Fl6sajOWTjaLt=eo8)_?HpJHDIl_%nK$ z5t@c7yiZ%5U;)_CvD_kIPAq2#lr-0~bLL8P)*?gkr&Q&^qOAbqeGoQF!^pUN8X^eG z%3ZlLIdhJiR7Q{mTHYjx%TgaEdl+wZ;Lo^k9$8Uw9a;}U)ml^>O9=YbZkz}Q?!Qix zj*)0^D#=W6C7dN=D(5h0dQ=w&`;g`*pXA)31Hm-PCxbw+!$}QlLbGfxP0T5S{njp; zDYDzf8s1Kv_veo?Y&J#8>Tb>Nd{%Ddkr4$k5UNzA9a!3K|_J*Mr^{3A40Z zAb?W{{v@sO17MBvHi_DMxucwA7=x^*q9`K(g*_M{Sno1Z^N@oNP1AJGB*WZLyob*= z4-ib431QnQ`e=&WnW$ck!l-7&n?*lBmYEGlnrsEU|JQ~zRh_{E)M?0VM$Iw9=L8kc zKKJjYy!PBVP}Tl<{MmC{ecjb+4|KZz@U=VW)Dts~Ys}WQXyWLSW8lWr2wZa2NB4dd zw88vC=}`7=^qx?oJ$GS!va(j_9?;*kyCUKd_@_9tHDf9dG;e3pM`!zOv0$fiEbkto zjTuR4IbX%8i5ci#2Or!>?m2lOhD z?7yZV)ie=>LoKKMZPES@1X8a78xP+53$_XTbh5U-&IJ`OpI%#Ey%3ZA5-e0PAM0_V zRV)c0Rm+AlI7)x0r8b+6MA2ySw0;!Xa0Es7d?D|2TIB_d6+%nkf#)OO)BBG>HBN5kT4xSK*&jnRs|$YUuY!W zgxPw()Sb!s_34Y>d3ELN=~ICemPSv87MK*MWhr+Iivq{eu`e;1n#{p`a?Y}`E4T)V z#*$(4X!g!|g>HDs7%PdUA41i;JnmpfTrJ|e@vzhzh`jhj{C2Nol!&;r&u#bA-Y<7%>Ge3cTWv; zw7DWf_zTWK1^xjiCbzFv(*(oJG67&YiLS6b`f|lG_R1PZ@y=x97-v%*+qkszmI?u! zdXRCbw;+=AMw8&;6BL5Ez}g0#1ONH{9Zpy0{nl;_y`Hpzlo(hQ54ARK94n(EC1uLO z#}GRDDsMa>#SG@hXJPA$kf>OvyIoc(=g>GhHXB516%v$RJDdtKe8A8yxFk2G>W?_^ z?t;^2S6*J7uAO?-hhD#WZhd;559oC5sW|B9!_mEKW)uLoPYn2I@Q4ml*RbWzh`SuJ zO!oq(#Ob!kusAcKYEVd|^1>}4{v6r~hdxpaI9xV_F7IDiWV@Dj61M?M3vX1hSk4;7cZe)iOK{nV2Y zeD}-*LYi0)mU69h@8UHs9YSSznPKK0Ma9W8N!!Ej5)~g^A$$N=$PU~O%A~=+$o>@m zOje^`%KUkIgNRq*N*(x7w-&PvnGU7kj83%e4+-#{cHaLePXmWlq9-qI;PIG-0}GaS zvHW_;YH`G!V#I*H+Wf+KN0YOs&#xr~E8e#Ikc~sB0A64J&UE#HDT_U8C@I?t6*(s` zeksT)pz?TD($_bx?moehkK8>dSi!&idOmpjY5~EJbit?TIFLb%BHXhaqmUs%GdOnH z2Hv4p6*v{xz{JR1<|ql=3jcy!C&8)eAcutvPJ^JRU)i?W{it9HXCtRA#MYyWH3Z?45PU-wLWpW$o(XOF6;}nQhl_^`~W`DjMxORxH zrn4A31r<83D(3bTS9S;FnS{;H*%rk0%Jt_bCoimVnR0%tV)Rnifx*yM7Cjlt*lsXT zOy0N|?i8PJ?j%WWU)(p#;f-OTT;36C+Wkt(6TaP zDZi)|2#1JZYX&M27I!gZVk!zqgcORWq&lgJ`_ayl-0woG z(EyYgmo#ttR4>q@yLjb6Oc&9@MV&ZW3iv^czYSj%`AGUwe@u2EI{A0$c-8;P97X9@ z=wP=G1E4oBIM3bsZoAk6O%=G6m-82qg_F89gU$y*=2PtJlnASozi1_Re;_HKo40yR z?N%>Tm!tHofA4SVlGA!Cxpd?DGLsJO0}X#mzGFB4mDDUhY-c6^a`KZtG2a#jk7Z<2 zqo~$@{dIr}ch2-67SD&WRX5P*5|assC2=Gy@%!^hJ%N4 zE)-#Z(J@NEddnZTHt2J?{wY(2b!Q5qC$OA^w}3oZlGr&WZdd+_MAbdojx5&J{qi*< z3GVV=AO>D6Ye3M5h@fCyt$&8&K1iwBMb?J=moJ=q?ffVu093UI{uhUMptCp%Ap4Vr z4n=kcCGm5V94)40q(v&Eov(^I=ZIVTR%dM>)seGpn+c(2MCm6Bway;l2A#N3bp&{s z0FRGOQwmzjC@&~EAM&t7r#AB(<#q4ROkr$x^|BM?VG7qs*s!|?VDsB&8UryjY#9Ya z3fM7*lAz2`#1oJX4_!kDZC?f!heoX4DNC*B35{9Is4?Za<`RECQG>ffw{Glites!E za7ugdlX>SkcNLhO3`)0&iQ!*aIWzFe!qEGA5e}njfl6S@4lMV-Z9yIeC@(FKvQSJR zG}TBkxfc#)#)-oL_gqVI?Zz^l^vw(zHmz{*fdedZUZ|o55j2 z`k>eH$|U5cW!m7j;>rrimflQ6m3fEZ=7ozrT>UjU&)PFKy5$ z#mLFZ{Ki?6QqlNDBWKj%En9u5Rj4Qvk57o!yUrb;%dft6=FBn&Iq71vP2D7n92giq zpew^#=`Dm)db01thTC5!i)HnBRO$PsKVpRp2)f+{PiI^yn8q!~k~ygXy|U=i@2r%P z1Grer!DiMiLwgqIBj4V9+XnfXI`}L6eGAqYi~$F zM?TeBRrC@Ud6n64J4#7CQur~72||O(+7CGI_DTm3td*o1k=BpnhCc(xr!0zHI8q>B zx#=ELl$f$^C043jg$`a!{244i!~_uX>h^XXj4>CCEwx1B?)t??7|Pz)WMY%v#was$ zik)NcNUC=iPBt!24v52_{2FK3!8?MHwN2s6)vFR#_ChouYLn0V%VQ^J)SU_7|=C@#H16g#f zGzv`3q#%~0qw?eougU^)<5XsfM*!NVZx_s}HV*(zzNK84ri7&XF+NFN{5<#`IdBKt z9!yDV-U>v}8I1XxOMpkn5eG$jrMAV)j}X>*a%E7I9T_XBX3btmvQ<#B5##)%K^+o4 zoGC6$pL*_DH36S{>7~YEkUFGU|87qD0s+;fx)b7&i|8y03@!qE{f0^4>?OPo9iDwU zk>c5>|Gy;$o{x@`;II|UMkIl}2Plk)i^+u$gds`}ud-J-&(5tX0ionWZ`-`Fm~?>? z(1Y4o21^oy>696x$i--eLsnV4u?w>$Nlf*i0YTJIJqKF;9i9SiGftcuWi6g?N z{UX^Wmay9uXI`C@oI4Wo?ESWLVMqqJp8={D!c2Gjvk2P0zRU;UXasrZF+5ZFuzfGO z>h5fk;Sw!;B%%xfYS3W?po9ZZcXYZmyW|Bp znKji`)Sj$#W|258$QT3Qlzhf-C&QIJ%v6BjG+kTrs<>rnnzWLJ9~DKVf{N3;tU;`; zJ}QcXQJPVlDBjeTlGEG1$Z@D~T0-zEvv0}_Mim9GmoM5VD79lP=;|lm7n#iYPB3g1 z7HlHGS8g>@)j2orrX{>5$xIc_?A@j4G3UQn&zYCPvX!nYh*J#J3W;VE=EQs~rU?zr zOpsf92kbyM+4;i{x3_(9i~BTFJ;%$gZ#n4=U5WQ#G-+lQcLwOH-0_zZ$w#^8X-qH4 zbrJr`?q#poC8e@rP|Amg^n{PL&?s5&cF~xDgZ-2iP`4l#TW-8~^`b7h+}M5hjpHZ2 zOHxTYBq#=oo%k_`!pX6#x{K_0p2@g8)NBWwEM=<>xwHdL_VoR%?DrR)Y&yNMwKwHr z-WknL^T~F8bsAflrW_!9VRdb7%E`-TRwqY~pLlFhND@JxZI&&S9%T=un|@+-p1L_W zt4#TO)v{d9CDzR+iAaA+Uo0|=Z>3&%pgudd?Ij&xqPARtfu8CZO7x<4M)bUzz6I2| zBh7*ssW?B-W2~&dx}5Z$atO$s{*ji{S%lhYhK^A`Ho9?S97ZMakR6E%*hV{n@S*_8 z8%mZi5z5$FFy%S@aj6zD!(Ci-SCF7@04VBf5R{VI!I9DqDWKH_3YyB*cQ!47DdS)` z?^PhDfK51y+*{5Hfo@rS-&rb`f-$27i=F^((Q=+egc*7SeqymJ>!*DjCb&=!9jD*2 z`jp@+cty@<(ezmL=a?z%O;x5qL=YmY+~FHX_Qu+Lf9g*T4J8?TrwlQpxNz(?beFS&D~i`D)gL)V1j{HA#A&St;8!|$OUai zwNr9P*sea1QPOS{iT((lW~}mgjt@Wo%F6V@^yTvxR?ob0`sG*V0=4*XXU_d`j8^3g z$+zcgtx8sKlWz)ONP_!19H#nmGR;mF!9wyL!#xg}>0E$RNR4)VM@BZ(aWQJzMb&`| z&Lat*o0xp^kkHy?b%Z`$Z9%Scb9#Ae<4RmKVUs5*C>2M7#sZ=x-~}uwus23{8>I5)>?@>GcpFxB06>M?29Yw zRR%kmcq>>%=L+luib{oTp$5tz?o3b0xrp(AMjk>eVCKxaUPsWo7Uo^WV!*g8LJ2K< zLs5Jw?x_}}#RYJX+*f=yzO2F{HS4PXS@wVcOuGFKlSP;bk=DWR=^3U;m)eDTE*6;r zC1FVBvVv$o_Kf6F042t&cUFnDdtSR9RHKT@@Of`C_^-1Rwt8);P!>O{#F>k;f=V5U zsW%KG2yV!p^h#g)&{Yp~K-f@L*@U9h#e(5lXXBt#AGD=0C5k$zScJ=@m+NI8bZ+ci z(B7z6gpok#{Ws_>G?Dm735YB>2xV|4EW#P1jcDb;{0hgaY&IltkqnfOE8}j*GdUgD zB$yHKoo{AZ$H`6acFg~|`VTxSSoHoNtzFe7+(M_x}t zv6yovA6QTRn#;Kv06Ay)oOvgS6OyT9rVJGY?lsQt!s@QZ! zw>bYAF~Nt{C`F{F*K$Hi_z_jRqU#x*+X1(|A{ZLG0K^8!NDqFf5`FhL*-Yz%)}5Le zvv#+jS0k}z%-P^z*%#8_);tVU?G1n{xHrlJR8DdBWMb^Wugo0Es<|{$u2ZbmK{!vT zyaLM&cy~OnY*bxivdQSWu-2lAaCMG#X(3@rcT#cEl~23Mvn1Ed#$f#9;&cWaC#XGn z>oWfbwEpNF)p+005&`^uF%Ec<;didG!gw=74HX9koZYy3O(jwVOE9Hg&KDkqFzZqq zelsIN|4Jv?ap$ePIo@eZLG!nb%k>d|ja<(YgrK1dfyr~`Eqy*pEa`sYI;c1ZqH@f^ z#K6aREU)W$`UEIe1#dOQ#DuffG5l!q^2!>JYLvbXJimT&;vQifm!D#@aV|IVwR&>A?*pabVK0kUUyTZdAr=4 z-^GObZ{oAG;Z2dUI521qo)V+6dyJC>zWIWLUD@%7MgXk*KB4d*%N>G^f|j#uTqcf; z0B@EhK`4vY+>y6roM`ZYoIG2c_jS?;;1xrBI_#z|s;Vz%=^%T1()+ zp-#mv0$Q3zRW21wwLi)#Dr~#sXM$rXuC#x?)e{FDIjO#ZyjhlaA0#%caBQP1JELVL z%Vw#lTWOSDgs8ss5-KLE+^&@0+$=EMZv*Zg5-jM)y#36nKDi#ImD|7DFOvu4MTDF4 z5Y|@!bCCIp*XlKlm_05}a|DC|$SOWg8743*xDA57>GDy!_@p-BAL$M@W2!X5;Uk6Q z6+Y7B^;7N|Oe2+EqLroCUK~z59glk8=~NecNEKM0Rjp2r3z=EE7r#;U&MNsSg<}(; zO++3o)`F?aR=TJW;gz9loAc+D`INxtl7qETi5Vaoc-+%4ukyUU+QLtz2o}lzGdU>H z=xhhC@sH%*l~@D|M^S@>q*59Uk>nT1?Fp1l$eTpapcyB+dC@@@^BtvF{cmah4Pr0OjH1I)X#vG?vFLC-WR`8G@R z171*TwW7tx+#{@FJCh$&)M&E1hKl>5ao)UlLBcNYMeeRpeB{#O1Ey{Wr!Zg&Jdr$T zSm~-HtPnokN?x%;mplyB^EEx_T`idZ{goo9t$}0llr0nWWNTjb81cO-@GbPA17pK1X9}s^GOsNXSHM*Etk)Tl+D?ZD6z~z$dA#Y*rv#l)?{~s?neWMg`Sf``-Q}ydc4vsd0Nw}I_kArdD<}QI9{S!| z^?7gZo%>zsA*bHjx%fb4=I)kI$zJu-i!S@1C=b5*+2mcOn|wd>y%|)>GPIL)0SWoE zwc_!~yGl$wKKZ_W9Bi>kSi~_0>S~gL^cC?eBD4kb zbnI=`cE5AtnP+;6D00;Y17RRto$_IgE(Qxg6d0EtQ*OalOci0WYer2(3!xPC*^`-P zhcr@8LJ!EQSs$A|W)NSrKP8%QkH>^{)x6W5!xifkan2!y}jG(Vnr2 zTCH`S%ml^)cPY~q@VhM0@dnk=)AiYGE?uKWHpzDk{^!T2bwwM4tLl86v4hqS>+ zlU4Dsg(GoXmPzXoV@}k7ha17tkj!NZNdh{7S=Vh6qiIijd0U}vXtWMCCo*dxng@Ig zwIUBx-PFan_q^YU;~_fYw+ODOyr8H|DBNjrd_LnN{VA{Dqsf!49FkAAccjqD8L9$- z`zfQOW$;+_&E&U_?ESXA6;nLxh^*pJgS?e&AiqYoj7v!TioY9vul;_Qw-t({uqdrB zTr|LMoO$U0%?`w4?WEDhDRGQ;Aqut;5gDrH$`vsM|9K%IWsmZWS%`1DFZMCoNt-?V z>E@@)vTOuXM-?jd8Re`w2*m<`BeAvqZHU`bJ_Ugqap_5&f@5MEM?($YDeDLf*l*?6 zq{^8Fi;h+)56pi0N&R1>O|4t2ZDH>S@taEh z$L@!voM{-AyWHqGGyEiV{p1M_HB32+v5{gKrD?R zT=|nHUe7-?pE&|~EmD!?OOfrDt;-!5I@|{_jiB!brOl|Ex5ziam1IG5?CGI)3>;#^ zfKd6H0th%NF1tk)$h?^*>~K&iqfoou!kJ>x>UH=VBUsTU1_}1b>GR=!_F84RiVB}g zF@-|zjQgh89Fl$3wTU_Zci7p!5bNDK{Lq$^yqKPrY<&}~cdN^|W0YBSe*iz5o|3FB z;Lcc0y#t_|9TfliT0QG^HD{*-My=YxpG2}eCP98+MpJQRt1w>Y9Ua|NV=qF{fl(&s z&#VV(<&$Ud2C1mW23z14nHonelc4bH)E91k_5!=zLM4N#F*jUh>6F|;ggh)TxqYwH zW`~g~hZP0%0TvB4=+w8el*)Pjgb!>Ag4;>ICW|eN(5Hl<5Gb5G2az= zS(MRJC;sp4zvOdmevzDEGUSff^!UTZ6zQu0{$S%xQR}Dylg@@GEV5wti*&r(_ERTz zmu7r-V%C?pmKHl8NkVHZikG8xoO=K+vk_qF-?%kp*h?TC4vNG?_qe7q@L~qczQae~ z;{5@_e`{$NJCkoiyPeCIvr2aERLO{{A*#~-~e zQ!+o)pwAV@lMauG;qxtr!j%dKB6ya4-GYWBP`6j#8=8xX%huJmGA8(_?VrVo1HwF7 zRwQLGlk)y$`B7w$E-u^XZBEM)^_?Ypq~t{EYDy3f7xRi*J9fm@fdb{$onEP$D9Wc(*FhONx{8+;lQs+;UDM&glYe`2`}$)egG$e(+e2zZ z1aJEAhSHWLGlQ?#MXW4_S}Z?Rd@}N_iXpP5;+r9q{Q`u@lEPUbT0)ntynku526vhEI#Ox7yoo)_cEqTJZTk? zG?%QM^7N|dm`&Xmu{6Dty;aRTA9NYACh!E7OX9>sKrJOC##REz>CMvDZD#<| z6C*%LIONczhGC1S7oVA!@e|kcvy?k_t%-L^!D*i@Dm;%p@R>&j1R9Z0DYsm*)k;_( zd*OqK!D_bbNT-Xq$F>1kb-x)r;@y_P%)r;T5w1OIt zFWX>K0a1!Zy=84_#cPwl33T2CM? zPN$Zfj|FEd-mFEXv+i{vxB8&F_aRq9rDEIY3FER8pB`#GCBO^Kaz9Hlm; z#Yjffw{rf}+Oo>KGua0Y9(!|enlQW=KIEV%xEx^8Ox`i(og}~yGQD(Ota|nQ??0sj z`sXcrWF755udlIzd$SJ&>=&gBbiqB{FoPgT1a%gOQ$Tija98LdmbIdSB1c@;ousyO z3vpWriEaLp5P3>tFV0y}4=P|HJA>kg@=Y9LAt>!?xn|IZ<6x^j=;()Df|TAt@inlN z0Yy2ShIr|`PWzv!bY%~QRQdf(yQso{7;|%Sz(Zbghug6C_yZtOxtL!i??_?lk9CRx zun;}YFqw`1-H@@!7Ml-*{js z7=wEry$6vnjL#kl2z)*ey1==1xhdX}!{Jl16Va6&;%je(1CzHMAHfd>7oQ|Th$9!D zICAkI!^>T+1rwq*T}6`%zdtnC`#={7efj%J!m7W?8|P#kn^RlEgB8%f@~KMBkaXNU zmj0Ja83!)lvt{c_jzQdQ1y9rj{_QZ2f(l0d+h2srVG5xE=ZId#2D zrVY&XF+K++rV@@g7zl#o{3Bjl5%(lu))30OeKhLusEns&;U64oSqdPMn~KOp`~wP7 zSqx!ZT{(H07~9+)wu+RPBtPntk#+Asugpc!kOP+S&%66|XeXo&bWHm_U40`(REFqP zkfuVD5*T7zP~K84YVeGnn~;>&@&hccNSUj#?&~H2K(a$45yD_lxnMzJr+JH zG9Oi@1`T-h%np~?q*P5O`ylb;98kQB$RjA#^Tx63Ivlo_prWO!xayLD-#E6Z2YqWC zew_A)61Zqp&arT7-@W%38y(R#{YfPRm^QqZQHX zzfJc49@+T${{MhmKHUF5DR&`h3+7czUap*(X|t;(sca+vS56;)mKpy6bl+BVDj%#R zj$#|up>8ro9HNmCH1h?=-yk%ce&qqa((|OjlooY1bFqYSeuuF}%2GIi?a(Mb_Uox= ztO-8=Vjb7XYUBzkPx#3s|6lO(3E}z!$pfowq_d0b|DKlOJzg3`3sL}i&b^jDDOk2lm9@L#Oh#`p?2JMbEDEoy@AopiA_8q$uen%ez3fCY2$4vCVu8f z0AdE33hqJYzI^`0(`)Cuxk%twZAUcwvzVhu+m?C|WOm=Rs*)DJtx+a#z;8MYM!Ees z+ZPe~h24cXlSu*}?9F<+CX(VXsyyY=6<^p;a1yF^tfyWaCCPqkGTHwS(n?Y3>IsaJ z#P?&pn>R|_AqfEj!CaN13&ZxwWPRnr%d6`r6rbqe@DY6J^uRPuO2@FeWV+z5$y=AH z5@?q4TTN)}yCwD>6`a2mZpAE_pVQC2itgw+m5Ea8pskVO zb`_G!$z*_kl80frT7zl_E^9CC|B}a34$k5ox=rd=D~qC8@_%v#*`ABHCI_|Qsd$(d z!qB5$n#D<@$D2$Zf{~L2-rX}Gno^7J1EQpr0_!KwgTun9uzQF{((YpenX)OHySqEP z%a?aIHz(iZmG?n(bEZ;odWfd7{6dk!4#tsnh^cJCRF{H9MR!^3_E34#yR|L@^k!T$ zHp8{sr`&u%kvMb;D98-+ru)nv*<8o=c8+<*^DAp>XID?XB1_jhqdBQ|SwF7g3(Df6 z{&Y#2N)&{7L|f^6d31Ls=hs(IQ;h+dti5t^XZ!jF*Sa5N$*3cG$X`IVDKU)?ak4YS z_U5Il@=1yTjx#_=32-+|TWFCN+-D2*{u(GX)t}{DdKjpWd>ZrwSMWdC89Z_8@sXdC z{~SCJ)Epb7>rj3uMPM1YJ@`srzsbt$09Cde`5tiu&bu)Oba~T+3rSj~{##2IrYB!I z{p$3k*IqsK;_4a)7^V#t7ShPpgA3=x`m8BOu~Z5CVfxELL4Lceq=g|i<^(wNc1gD_ zb*G;G(aM?ERv#?@FJ1Vff1#z9GyhAi9FxtV96m<^b`Qr{>OCYA^_VrU_*g0$i`aJ9 z=uk>%sD(5GO*!Rj<@Kxskh6mg*Nk^gfQcWEpE%TDTbC|f&9F6Ny>j|cW9@C;c)LH? znRAC7Y->k;r$Qx0-rCu#;Di{5UUCg2BR#MMGu8uNZzAx0a12CFxMQrd4`#h-q=&Iu z0KBioF75v>oBptx_Bhf8=T6&)99R3FDDLQkC}P^}9enJ+x6>+5FAbJ7eD+OydR?xD zmAmXZih=9tR8wngNpjnw>0-bm3n$p^8Q612XG-R!1eqF6WpMp@xQy9H))k!gv$8{B z-6VJ7{l=Y;??q+mS}O- zhlE`ExGWrKOb}6m!b@>@-u^{!&`2* zlXe4DJ;@q%z^{EeH8kz*UL-snpgv1kdr@@|_;E7j*XhZXwbf}-phLm>+UhCEijGxE zEq_D9;(N1>(wP&{miB)Ma`JMG$d)d0SGqL8FYhidX5~pG{C^<0gTqR;tG(C+hT{MQ zb0t(t^SwZBi?dh!b7}uWqe(g0Bytf+KzaCB6i05wcKnWLCJulh+Gvqjy=f(``muv% zaA3MRRzZrnN8H(ND=PS~5-qV^I}00meA>^H(0uyN_TKdR&AqoXf+OZBo`x%P*pnHS zbf8cnW^=m$e~42Z7|GSs#RqUUozDBe$ib3hP%+0{#O5oqk|>&}mGBWc6?HIL6IxI{ znY6&|To-C3X^v1q_YjZW^IqKqYgQg2bp*B1LWT+irtV-;nY;m19z$x=jbi0I7O^T^-r!CA+fPOy z1Gxjw>fS6{@_7<)(4$CKbQYo1))e|V-2>jqoHK7CXR-CGVOlbRm}DKK)l0xJym_gU zlG4;kXADKt-r7_OC*0R6t*$6=B3rou0_1e|#jjd&!)Vlw7a8kP$fj@Fr81TS&e_d*V$-N&L&yonS5q)A756$aTJ@=2H zdH)6+rS9X(BX~mA0x*6|dMGmN?+f0#1qoCZotmh~NL-L!QnnmaH-ZxOSOUhdIYQ{L zPZ*hj?IXTGM7EpP^T8ESwZKNKpPR0|^33$~+R9TWCRPkcI4VVlu_s5S=2G(*U*%h< znzEQM0auYMtf!LEwTqx!zrx@=H=-%)i89Kse{q)2K6#gzrj$1evBje3j z{pdTPcZ^*;$-Z7-Et=Htd;Ps_vzZA7UWU_;>7)x%MQQC~zt0es?9{!rx3|o03tLm) zF=h|(gBA|+l#+I#s>N`a6uG_mz);AD9qG}hOqso}T*iWZm}U>r(LFs5G9 z&pXMH@G(vj`qG?gA6e9c+fAzGRC%^=bST3pXpfvB-!$t;dG&-BL1I0MhO$Kh@wkYF z!mZHveu%gb7$9Y`Rf^nH8vzG8j!&bH3=A*&>2bK2sVTCmw$|9Np@Xclg=iwJk0#&Z zRH7|imtkwm;uOw)P5il~UiEpikHLNa2oaO~mjwXmMVL@yc{?@ ztJn9~m3M+SE?D6ZP8e9gH!Ye*HqJfkxLM6QBCMe=Wloy72WN7G3<gxXAs3M+%2z#a%iyW$ zm?I*Yi?RI=9Wjy9YWsuKaV~tfR+Yb?wrqP?RZf&5Kbov)6#DQ9?A7W#v^M-z@l+$> zEjZ`1|7niM=T9L%42PPT)kQFT!ouG=ULy{c-BO^}EM$RYpv07>N{#?7g4mI0P)zB3 zvwSE^w$c}KNVT6j+731^QxSkW?;)QmDx@+uM?>q!ga=BVrDr z`6%}n?cX`ZSC9~nre!mH#2oPR&|^ZY{Jhk%ho47mw{>ftv*ZM$;1X>Eul8JNcM>S- zbBZh#!4?aQl9jVW?Ii3c1X3ZuG7Z_c8WITs>CJ?J~Ra&dWY^Wu%GJJ(2g zRvBv;I7#uGF%ze0M52x%%E^iuFU*i!a(3cwC9K%(ZvUJ!n-M8c(~$R+@n$2=xcu8Ka!t)#z+b3EW(i1SyV-g}A_ z11h@9ud@pOPI4f>j)f|t^1G9b-R+I*OK)(qwR$XhaWDD18;xj;1QG zbMwaan>VHxcW!c9qR%B$+a0(cJnF?JO^Mvd*Qd-if6LN=Q zUph3}2;?6%bVvM-^i{7)97kUrg5p;Ir-k1ZA%O`q9uN%{FyvznWG)va&yapP=7 zWKiC#rbuZzy?Em-intGZmd!^n#}(%IpZg!Y@XD#<$EnVxUr#i@t{vC!Ln7`9)iAps zM#P7vu*XqM0mj1(2@hCgit2T1#bDkP52nQL5_He4r1C)IMf})-nIte|;O^woyVrcw zjibk!FL8{E5y*nFMPE7@waSB(2MKV8X4q68@igEz*4&uV{V16U}M5RRo&P41472~6>R(+JX&(r zNQg8h5N<;u+GT}dj#TyQUJs&3q7YexOa>7SS^^o5>Q!rr*cE~NDc@txSGXdZB@?+A zJeD+`|IF)AFZ z2azLnAITC(K%@ekauN%60!?uN%r$92B^tos__|jqUZF_j{qxustj{?Q7Qndd!3{(-k{lbYpk%N_rIV zga#1dP(ER`H^Iz-5uP*%I9G_irM=(rio+4va%V}l3IO~o4=w3+M{|IY^Wqw%lyBiA zA`+#koQURWNF@wfoItG(mlx(CMdl7EmXyogzq8bQoS7q>M*NyO>kDi2NY!0q9;+X% zFS8(_RJq7@TiuM{j`i590!s?Te=0YW*N1IJSMxcRlm?TCNsG!AraWtUng^14l}33- znDG^%(PyI_@zSBCi&4E(jtY&^5Ihn+wH#HOLmU1`yU1gNTQ~ zq+ake@?i8yI8@QAO9KU9OQQ?RchqV<_}B|>#AD5a-!e$CMhyn-e>T~?29f-ZSTLsf z2-FFL`ZN#o{--Gk%pBsllq0gi)V$)vj;E6+?aBbqfH@&T;Odu9Zk7?XHjcj7;XFXa zp!EbOzg~zWqcV|JW{WBG2TGgr8cI?vEVmYY?)iluoGkX_t;I$}Fct*TPd;y3Aa&2q zmf`RS@c18BKS{1k+%{plQ2tdyB-AQImR2O8+_*ydgIsk?9!e&IIJ4u9IH}w6KtV+K zrB+~}5ki4kS)%3Kb`S=Y*A7x8fkxa$)AiybSUmd1sH9l4&3S-9KML z4MMM1wK}E7aC4-9wA~=L;p<>bxV^vu5BRi9OS{Ce<95pu2%>g2>7wcuZ3CrL%TFg%+3TO|(Xzg^?3O+k#cMv@1>av%@$J?ImtTHtX>VtHx_9;an>&}MZ*S@%P|AcN zghx^yLa~)J8+u*@D5+zK)JL_$P2+4ZP)AqmT>iZKNw$Um=Q$mqB$a=gnJ9tXys@*q z!?BrL8}ABWo6`hQbLh67|E(qZg)e?@dGp$h-FKI_H}<|a2y(pYf$Dwn@%H82o$Y0I z2VB{lvFdnq>*|fo-Holo%tGkK{)4@Dx8K^i@AuP!ukTRyJH)a!!e@^y)egddaSPX?+5b~CVcQN`4eAV0#k{)sfC_)*a>96*uG`en zepH)ID}TGFV;5dI!;v=>*oMMBYI)Fl7){C=rx}X^tCaz>6nB*vvkM_4O;#?P)h+Tw zSFkBh=bubn-4xIw}$X-Otpn;`a%T`ZOliooy&?x3yt?dN10`aV4B`uhDU?dsXa;pO-J0d7Q}DWcN;Z%2 zuMXpG(X1nJQf^QX+eH^A@?=a?e`uC0qRfG3?AM1r5}{}gxUzTYiB0}tCYVRCSA)h2 zsx>*s!b{pY@w-PZvTIC=Xa?*tTCMw1*HFr?G&+B8=Cj}hv=3Nd*=IpKYmT(cq1R;_ zXS{ycX=l7wns|gO@1l}*#lZ@`ZSpNvI?7P>(7HE^*|4e?ub*U(tA zHG;5t?dCRWjZ7=+Ku*%J&DAPdk_>9J%A|KFOb$IG`wq`^7p_^%x1rj=yLNt*23LpD zqUD;sC0d1;HnOBjy6}9Hm4^Qgx8R$)MkGq8@&lAT`O}MUZ|qK`+Yf+*@o^4@m^AsL z#SJlRCz=jNzcDjuQxY64jVjMsyOh$r^C*C_4-$c8=$2Z?VhEeI&UggNGf9dm zlim*hO}w5tT-#6?zSt(IG>)KDo~h`22s9Yg;R-kUsVnb~;@46KW3nxvp;I$Wwnw==;=@M`jnD9L27YA#0-R^p;M zi$SrY`}~D-FP}WUzBUK^YzB!UOWub+`^m;s6DIx4a~(1AJ_9p9+6C@XpXwbcu8u-g5kck{|7Uaz7qfd literal 0 HcmV?d00001 diff --git a/bfd/po/ru.po b/bfd/po/ru.po new file mode 100644 index 0000000..f04f460 --- /dev/null +++ b/bfd/po/ru.po @@ -0,0 +1,3840 @@ +# translation of bfd-2.19.1.ru.po to Russian +# Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc. +# This file is distributed under the same license as the binutils package. +# +# Yuri Kozlov , 2009. +msgid "" +msgstr "" +"Project-Id-Version: bfd 2.19.1\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2008-09-09 15:56+0930\n" +"PO-Revision-Date: 2009-06-12 19:41+0400\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: aout-adobe.c:127 +msgid "%B: Unknown section type in a.out.adobe file: %x\n" +msgstr "%B: Неизвестный тип раздела в файле a.out.adobe: %x\n" + +#: aout-cris.c:204 +#, c-format +msgid "%s: Invalid relocation type exported: %d" +msgstr "%s: Экспортирован неверный тип перемещения: %d" + +#: aout-cris.c:247 +msgid "%B: Invalid relocation type imported: %d" +msgstr "%s: Импортирован неверный тип перемещения: %d" + +#: aout-cris.c:258 +msgid "%B: Bad relocation record imported: %d" +msgstr "%B: Импортирована некорректная запись о перемещении: %d" + +#: aoutx.h:1268 aoutx.h:1604 +#, c-format +msgid "%s: can not represent section `%s' in a.out object file format" +msgstr "%s: нельзя представить раздел `%s' в объектном файле формата a.out" + +#: aoutx.h:1570 +#, c-format +msgid "%s: can not represent section for symbol `%s' in a.out object file format" +msgstr "%s: нельзя представить раздел для символа `%s' в объектном файле формата a.out" + +#: aoutx.h:1572 +msgid "*unknown*" +msgstr "*неизвестно*" + +#: aoutx.h:3989 aoutx.h:4315 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: неожиданный тип перемещения\n" + +#: aoutx.h:5349 +#, c-format +msgid "%s: relocatable link from %s to %s not supported" +msgstr "%s: перемещаемая ссылка из %s в %s не поддерживается" + +#: archive.c:2046 +msgid "Warning: writing archive was slow: rewriting timestamp\n" +msgstr "Предупреждение: медленная запись в архив: обновляется метка времени\n" + +#: archive.c:2309 +msgid "Reading archive file mod timestamp" +msgstr "Чтение метки времени архивного файла mod" + +#: archive.c:2333 +msgid "Writing updated armap timestamp" +msgstr "Запись обновлённой метки времени armap" + +#: bfd.c:368 +msgid "No error" +msgstr "Нет ошибки" + +#: bfd.c:369 +msgid "System call error" +msgstr "Ошибка системного вызова" + +#: bfd.c:370 +msgid "Invalid bfd target" +msgstr "Неверная цель bfd" + +#: bfd.c:371 +msgid "File in wrong format" +msgstr "Файл в неправильном формате" + +#: bfd.c:372 +msgid "Archive object file in wrong format" +msgstr "Архивный объектный файл в неправильном формате" + +#: bfd.c:373 +msgid "Invalid operation" +msgstr "Неверная операция" + +#: bfd.c:374 +msgid "Memory exhausted" +msgstr "Закончилась память" + +#: bfd.c:375 +msgid "No symbols" +msgstr "Нет символов" + +#: bfd.c:376 +msgid "Archive has no index; run ranlib to add one" +msgstr "Архив без индекса; запуск ranlib для создания" + +#: bfd.c:377 +msgid "No more archived files" +msgstr "Архивные файлы закончились" + +#: bfd.c:378 +msgid "Malformed archive" +msgstr "Искажённый архив" + +#: bfd.c:379 +msgid "File format not recognized" +msgstr "Формат файла не распознан" + +#: bfd.c:380 +msgid "File format is ambiguous" +msgstr "Формат файла неоднозначен" + +#: bfd.c:381 +msgid "Section has no contents" +msgstr "Раздел не имеет содержимого" + +#: bfd.c:382 +msgid "Nonrepresentable section on output" +msgstr "Раздел, непредставимый для вывода" + +#: bfd.c:383 +msgid "Symbol needs debug section which does not exist" +msgstr "Для символа требуется отладочный раздел, но его не существует" + +#: bfd.c:384 +msgid "Bad value" +msgstr "Некорректное значение" + +#: bfd.c:385 +msgid "File truncated" +msgstr "Файл усечён" + +#: bfd.c:386 +msgid "File too big" +msgstr "Файл слишком большой" + +#: bfd.c:387 +#, c-format +msgid "Error reading %s: %s" +msgstr "Ошибка чтения %s: %s" + +#: bfd.c:388 +msgid "#" +msgstr "#<Неверный код ошибки>" + +#: bfd.c:912 +#, c-format +msgid "BFD %s assertion fail %s:%d" +msgstr "Оператор контроля BFD %s обнаружил ошибку %s:%d" + +#: bfd.c:924 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d in %s\n" +msgstr "Внутренняя ошибка BFD %s, останов на %s, строка %d в %s\n" + +#: bfd.c:928 +#, c-format +msgid "BFD %s internal error, aborting at %s line %d\n" +msgstr "Внутренняя ошибка BFD %s, останов на %s, строка %d\n" + +#: bfd.c:930 +msgid "Please report this bug.\n" +msgstr "Пожалуйста, сообщите об этой ошибке.\n" + +#: bfdwin.c:208 +#, c-format +msgid "not mapping: data=%lx mapped=%d\n" +msgstr "не отображено: данные=%lx отображено=%d\n" + +#: bfdwin.c:211 +#, c-format +msgid "not mapping: env var not set\n" +msgstr "не отображено: переменная env не задана\n" + +#: binary.c:284 +#, c-format +msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." +msgstr "Предупреждение: Выполняется запись раздела `%s' в файл по огромному (т.е. отрицательному) смещению 0x%lx." + +#: cache.c:222 +msgid "reopening %B: %s\n" +msgstr "переоткрывается %B: %s\n" + +#: coff-alpha.c:490 +msgid "" +"%B: Cannot handle compressed Alpha binaries.\n" +" Use compiler flags, or objZ, to generate uncompressed binaries." +msgstr "" +"%B: Не удалось обработать сжатые двоичные файлы Alpha.\n" +" Для создания несжатых файлов используйте параметры компилятора или objZ." + +#: coff-alpha.c:647 +msgid "%B: unknown/unsupported relocation type %d" +msgstr "%B: неизвестный/неподдерживаемый тип перемещения %d" + +#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1003 +msgid "GP relative relocation used when GP not defined" +msgstr "Использовано относительное перемещение GP, но GP не определена" + +#: coff-alpha.c:1501 +msgid "using multiple gp values" +msgstr "используется несколько значений gp" + +#: coff-alpha.c:1560 +msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +msgstr "%B: неподдерживаемое перемещение: ALPHA_R_GPRELHIGH" + +#: coff-alpha.c:1567 +msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +msgstr "%B: неподдерживаемое перемещение: ALPHA_R_GPRELLOW" + +#: coff-alpha.c:1574 elf32-m32r.c:2487 elf64-alpha.c:3970 elf64-alpha.c:4125 +#: elf32-ia64.c:4465 elf64-ia64.c:4465 +msgid "%B: unknown relocation type %d" +msgstr "%B: неизвестный тип перемещения: %d" + +#: coff-arm.c:1039 +#, c-format +msgid "%B: unable to find THUMB glue '%s' for `%s'" +msgstr "%B: не удалось найти THUMB-склейку '%s' для `%s'" + +#: coff-arm.c:1068 +#, c-format +msgid "%B: unable to find ARM glue '%s' for `%s'" +msgstr "%B: не удалось найти ARM-склейку '%s' для `%s'" + +#: coff-arm.c:1370 elf32-arm.c:5453 +#, c-format +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: arm call to thumb" +msgstr "" +"%B(%s): предупреждение: совместная работа не включена.\n" +" первое упоминание: %B: arm-вызов в thumb" + +#: coff-arm.c:1460 +#, c-format +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: thumb call to arm\n" +" consider relinking with --support-old-code enabled" +msgstr "" +"%B(%s): предупреждение: совместная работа не включена.\n" +" первое упоминание: %B: thumb-вызов в arm\n" +" выполните пересборку с включённым параметром --support-old-code" + +#: coff-arm.c:1755 coff-tic80.c:695 cofflink.c:3018 +msgid "%B: bad reloc address 0x%lx in section `%A'" +msgstr "%B: неправильный адрес перемещения 0x%lx в разделе `%A'" + +#: coff-arm.c:2080 +msgid "%B: illegal symbol index in reloc: %d" +msgstr "%B: недопустимый символьный индекс в перемещении: %d" + +#: coff-arm.c:2211 +#, c-format +msgid "ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "ОШИБКА: %B собран для APCS-%d, в то время как %B собран для APCS-%d" + +#: coff-arm.c:2227 elf32-arm.c:8563 +#, c-format +msgid "ERROR: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "ОШИБКА: %B передаёт числа с плавающей точкой в регистрах с плавающей точкой, в то время как %B передаёт их в целочисленных регистрах" + +#: coff-arm.c:2230 elf32-arm.c:8567 +#, c-format +msgid "ERROR: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "ОШИБКА: %B передаёт числа в целочисленных регистрах, в то время как %B передаёт их в регистрах с плавающей точкой" + +#: coff-arm.c:2244 +#, c-format +msgid "ERROR: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "ОШИБКА: %B скомпилирован как позиционно-независимый код, в то время как целью %B является код с абсолютной позицией" + +#: coff-arm.c:2247 +#, c-format +msgid "ERROR: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "ОШИБКА: %B скомпилирован как код с абсолютной позицией, в то время как целью %B является позиционно-независимый код" + +#: coff-arm.c:2275 elf32-arm.c:8632 +#, c-format +msgid "Warning: %B supports interworking, whereas %B does not" +msgstr "Предупреждение: %B поддерживает совместную работу, в то время как %B нет" + +#: coff-arm.c:2278 elf32-arm.c:8638 +#, c-format +msgid "Warning: %B does not support interworking, whereas %B does" +msgstr "Предупреждение: %B не поддерживает совместную работу, в то время как %B поддерживает" + +#: coff-arm.c:2302 +#, c-format +msgid "private flags = %x:" +msgstr "собственные флаги = %x:" + +#: coff-arm.c:2310 elf32-arm.c:8689 +#, c-format +msgid " [floats passed in float registers]" +msgstr " [числа с плавающей точкой передаются в регистрах с плавающей точкой]" + +#: coff-arm.c:2312 +#, c-format +msgid " [floats passed in integer registers]" +msgstr " [числа с плавающей точкой передаются в целочисленных регистрах]" + +#: coff-arm.c:2315 elf32-arm.c:8692 +#, c-format +msgid " [position independent]" +msgstr " [позиционно-независимый]" + +#: coff-arm.c:2317 +#, c-format +msgid " [absolute position]" +msgstr " [с определённой позицией]" + +#: coff-arm.c:2321 +#, c-format +msgid " [interworking flag not initialised]" +msgstr " [флаг совместной работы не установлен]" + +#: coff-arm.c:2323 +#, c-format +msgid " [interworking supported]" +msgstr " [поддерживается совместная работа]" + +#: coff-arm.c:2325 +#, c-format +msgid " [interworking not supported]" +msgstr " [совместная работа не поддерживается]" + +#: coff-arm.c:2371 elf32-arm.c:8050 +#, c-format +msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" +msgstr "Предупреждение: Флаг совместной работы для %B не устанавливается, так как так как он уже указывает на несовместную работу" + +#: coff-arm.c:2375 elf32-arm.c:8054 +#, c-format +msgid "Warning: Clearing the interworking flag of %B due to outside request" +msgstr "Предупреждение: Очищается флаг совместной работы для %B по внешнему запросу" + +#: coff-h8300.c:1122 +#, c-format +msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" +msgstr "невозможно обработать перемещение R_MEM_INDIRECT, если для вывода используется %s" + +#: coff-i860.c:147 +#, c-format +msgid "Relocation `%s' not yet implemented\n" +msgstr "Перемещение `%s' пока не реализовано\n" + +#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:4975 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: предупреждение: недопустимый символьный индекс %ld в перемещениях" + +#: coff-i960.c:143 coff-i960.c:506 +msgid "uncertain calling convention for non-COFF symbol" +msgstr "неясное соглашение о вызове для не-COFF символа" + +#: coff-m68k.c:506 elf32-bfin.c:5510 elf32-m68k.c:3938 +msgid "unsupported reloc type" +msgstr "неподдерживаемый тип перемещения" + +#: coff-maxq.c:126 +msgid "Can't Make it a Short Jump" +msgstr "Невозможно выполнить короткий переход (Short Jump)" + +#: coff-maxq.c:191 +msgid "Exceeds Long Jump Range" +msgstr "Превышен диапазон длинного перехода (Long Jump)" + +#: coff-maxq.c:202 coff-maxq.c:276 +msgid "Absolute address Exceeds 16 bit Range" +msgstr "Абсолютный адрес выходит за 16-битный диапазон" + +#: coff-maxq.c:240 +msgid "Absolute address Exceeds 8 bit Range" +msgstr "Абсолютный адрес выходит за 8-битный диапазон" + +#: coff-maxq.c:333 +msgid "Unrecognized Reloc Type" +msgstr "Не распознан тип перемещения (Reloc Type)" + +#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:345 elf64-mips.c:1991 +#: elfn32-mips.c:1832 +msgid "GP relative relocation when _gp not defined" +msgstr "Относительное перемещение GP, но _gp не определена" + +#: coff-or32.c:229 +msgid "Unrecognized reloc" +msgstr "Нераспознанное перемещение" + +#: coff-rs6000.c:2803 +#, c-format +msgid "%s: unsupported relocation type 0x%02x" +msgstr "%s: неподдерживаемый тип перемещения 0x%02x" + +#: coff-rs6000.c:2896 +#, c-format +msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" +msgstr "%s: перемещение TOC по адресу 0x%x символа `%s' без элемента TOC" + +#: coff-rs6000.c:3628 coff64-rs6000.c:2130 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: символ `%s' имеет нераспознанный smclas %d" + +#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458 +#, c-format +msgid "Unrecognized reloc type 0x%x" +msgstr "Нераспознанный тип перемещения 0x%x" + +#: coff-tic4x.c:240 +#, c-format +msgid "%s: warning: illegal symbol index %ld in relocs" +msgstr "%s: предупреждение: в перемещениях недопустимый символьный индекс %ld" + +#: coff-w65.c:367 +#, c-format +msgid "ignoring reloc %s\n" +msgstr "игнорируется перемещение %s\n" + +#: coffcode.h:850 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%B: предупреждение: COMDAT символ '%s' не соответствует имени раздела '%s'" + +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1062 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Предупреждение: Игнорируется флаг раздела IMAGE_SCN_MEM_NOT_PAGED в разделе %s" + +#: coffcode.h:1117 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): Игнорируется флаг раздела %s (0x%x)" + +#: coffcode.h:2244 +#, c-format +msgid "Unrecognized TI COFF target id '0x%x'" +msgstr "Нераспознанный идентификатор цели TI COFF '0x%x'" + +#: coffcode.h:2559 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: перемещение по несуществующему символьному индексу: %ld" + +#: coffcode.h:4309 +msgid "%B: warning: line number table read failed" +msgstr "%B: предупреждение: не удалось прочитать таблицу номеров строк" + +#: coffcode.h:4339 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: предупреждение: недопустимый символьный индекс %ld в номерах строк" + +#: coffcode.h:4353 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: предупреждение: повторяющаяся информация о номере строки для `%s'" + +#: coffcode.h:4744 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: Нераспознанный класс хранения %d для %s, символ `%s'" + +#: coffcode.h:4870 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "предупреждение: %B: локальный символ `%s' не имеет раздела" + +#: coffcode.h:5013 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: недопустимый тип перемещения %d по адресу 0x%lx" + +#: coffgen.c:1518 +msgid "%B: bad string table size %lu" +msgstr "%B: неправильный размер таблицы строк %lu" + +#: cofflink.c:513 elflink.c:4218 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Предупреждение: в %B изменён тип символа `%s' с %d на %d" + +#: cofflink.c:2296 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: перемещения в разделе `%A', но он не имеет содержимого" + +#: cofflink.c:2627 coffswap.h:824 +#, c-format +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%s: %s: переполнение перемещения: 0x%lx > 0xffff" + +#: cofflink.c:2636 coffswap.h:810 +#, c-format +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: предупреждение: %s: переполнение номера строки: 0x%lx > 0xffff" + +#: cpu-arm.c:189 cpu-arm.c:200 +msgid "ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "ОШИБКА: %B скомпилирована для EP9312, в то время как %B скомпилирована для XScale" + +#: cpu-arm.c:332 +#, c-format +msgid "warning: unable to update contents of %s section in %s" +msgstr "предупреждение: не удалось обновить содержимое раздела %s в %s" + +#: dwarf2.c:424 +#, c-format +msgid "Dwarf Error: Can't find %s section." +msgstr "Ошибка Dwarf: Раздел %s не найден." + +#: dwarf2.c:452 +#, c-format +msgid "Dwarf Error: unable to decompress %s section." +msgstr "Ошибка Dwarf: не удалось расжать раздел %s." + +#: dwarf2.c:462 +#, c-format +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "Ошибка Dwarf: Смещение (%lu) больше или равно размеру %s (%lu)." + +#: dwarf2.c:849 +#, c-format +msgid "Dwarf Error: Invalid or unhandled FORM value: %u." +msgstr "Ошибка Dwarf: Недопустимое или необработанное значение FORM: %u." + +#: dwarf2.c:1063 +msgid "Dwarf Error: mangled line number section (bad file number)." +msgstr "Ошибка Dwarf: искажённый раздел номеров строк (неверный номер файла)." + +#: dwarf2.c:1393 +msgid "Dwarf Error: mangled line number section." +msgstr "Ошибка Dwarf: искажённый раздел номеров строк." + +#: dwarf2.c:1726 dwarf2.c:1842 dwarf2.c:2114 +#, c-format +msgid "Dwarf Error: Could not find abbrev number %u." +msgstr "Ошибка Dwarf: Невозможно найти укороченный номер %u." + +#: dwarf2.c:2075 +#, c-format +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information." +msgstr "Ошибка Dwarf: найдена версия dwarf '%u', текущая функция чтения понимает только версии 2." + +#: dwarf2.c:2082 +#, c-format +msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." +msgstr "Ошибка Dwarf: найден размер адреса '%u', текущая функция чтения не умеет работать с размерами более чем '%u'." + +#: dwarf2.c:2105 +#, c-format +msgid "Dwarf Error: Bad abbrev number: %u." +msgstr "Ошибка Dwarf: Неверный укороченный номер: %u." + +#: ecoff.c:1227 +#, c-format +msgid "Unknown basic type %d" +msgstr "Неизвестный начальный тип %d" + +#: ecoff.c:1484 +#, c-format +msgid "" +"\n" +" End+1 symbol: %ld" +msgstr "" +"\n" +" Символ End+1: %ld" + +#: ecoff.c:1491 ecoff.c:1494 +#, c-format +msgid "" +"\n" +" First symbol: %ld" +msgstr "" +"\n" +" Первый символ: %ld" + +#: ecoff.c:1506 +#, c-format +msgid "" +"\n" +" End+1 symbol: %-7ld Type: %s" +msgstr "" +"\n" +" Символ End+1: %-7ld Тип: %s" + +#: ecoff.c:1513 +#, c-format +msgid "" +"\n" +" Local symbol: %ld" +msgstr "" +"\n" +" Локальный символ: %ld" + +#: ecoff.c:1521 +#, c-format +msgid "" +"\n" +" struct; End+1 symbol: %ld" +msgstr "" +"\n" +" struct; символ End+1: %ld" + +#: ecoff.c:1526 +#, c-format +msgid "" +"\n" +" union; End+1 symbol: %ld" +msgstr "" +"\n" +" union; символ End+1: %ld" + +#: ecoff.c:1531 +#, c-format +msgid "" +"\n" +" enum; End+1 symbol: %ld" +msgstr "" +"\n" +" enum; символ End+1: %ld" + +#: ecoff.c:1537 +#, c-format +msgid "" +"\n" +" Type: %s" +msgstr "" +"\n" +" Тип: %s" + +#: elf-attrs.c:582 +msgid "ERROR: %B: Must be processed by '%s' toolchain" +msgstr "ОШИБКА: %B: Должно обрабатываться цепочкой компиляции и сборки '%s'" + +#: elf-attrs.c:602 elf-attrs.c:621 +msgid "ERROR: %B: Incompatible object tag '%s':%d" +msgstr "ОШИБКА: %B: Несовместимый объектный тег '%s':%d" + +#: elf-eh-frame.c:866 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "%P: ошибка в %B(%A); таблиц .eh_frame_hdr создана не будет.\n" + +#: elf-eh-frame.c:1102 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: из-за кодировки fde в %B(%A) таблица .eh_frame_hdr создана не будет.\n" + +#: elf-hppa.h:2241 elf-m10300.c:1546 elf32-arm.c:7954 elf32-i386.c:3582 +#: elf32-m32r.c:2598 elf32-m68k.c:3516 elf32-ppc.c:7223 elf32-s390.c:3058 +#: elf32-sh.c:3438 elf32-xtensa.c:3021 elf64-ppc.c:11528 elf64-s390.c:3019 +#: elf64-sh64.c:1648 elf64-x86-64.c:3239 elfxx-sparc.c:3336 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): неразрешимое перемещение %s относительно символа `%s'" + +#: elf-hppa.h:2266 elf-hppa.h:2280 +msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" +msgstr "%B(%A): предупреждение: неразрешимое перемещение относительно символа `%s'" + +#: elf-m10200.c:456 elf-m10300.c:1609 elf32-avr.c:1250 elf32-bfin.c:3214 +#: elf32-cr16.c:959 elf32-cr16c.c:790 elf32-cris.c:1538 elf32-crx.c:933 +#: elf32-d10v.c:516 elf32-fr30.c:616 elf32-frv.c:4114 elf32-h8300.c:516 +#: elf32-i860.c:1218 elf32-ip2k.c:1499 elf32-iq2000.c:691 elf32-m32c.c:560 +#: elf32-m32r.c:3124 elf32-m68hc1x.c:1135 elf32-mep.c:541 elf32-msp430.c:493 +#: elf32-mt.c:402 elf32-openrisc.c:411 elf32-score.c:2451 elf32-spu.c:4132 +#: elf32-v850.c:1703 elf32-xstormy16.c:948 elf64-mmix.c:1533 +msgid "internal error: out of range error" +msgstr "внутренняя ошибка: ошибка выхода из диапазона" + +#: elf-m10200.c:460 elf-m10300.c:1613 elf32-avr.c:1254 elf32-bfin.c:3218 +#: elf32-cr16.c:963 elf32-cr16c.c:794 elf32-cris.c:1542 elf32-crx.c:937 +#: elf32-d10v.c:520 elf32-fr30.c:620 elf32-frv.c:4118 elf32-h8300.c:520 +#: elf32-i860.c:1222 elf32-iq2000.c:695 elf32-m32c.c:564 elf32-m32r.c:3128 +#: elf32-m68hc1x.c:1139 elf32-mep.c:545 elf32-msp430.c:497 +#: elf32-openrisc.c:415 elf32-score.c:2455 elf32-spu.c:4136 elf32-v850.c:1707 +#: elf32-xstormy16.c:952 elf64-mmix.c:1537 elfxx-mips.c:9065 +msgid "internal error: unsupported relocation error" +msgstr "внутренняя ошибка: ошибка неподдерживаемого перемещения" + +#: elf-m10200.c:464 elf32-cr16.c:967 elf32-cr16c.c:798 elf32-crx.c:941 +#: elf32-d10v.c:524 elf32-h8300.c:524 elf32-m32r.c:3132 elf32-m68hc1x.c:1143 +#: elf32-score.c:2459 elf32-spu.c:4140 +msgid "internal error: dangerous error" +msgstr "внутренняя ошибка: ошибка риска" + +#: elf-m10200.c:468 elf-m10300.c:1626 elf32-avr.c:1262 elf32-bfin.c:3226 +#: elf32-cr16.c:971 elf32-cr16c.c:802 elf32-cris.c:1550 elf32-crx.c:945 +#: elf32-d10v.c:528 elf32-fr30.c:628 elf32-frv.c:4126 elf32-h8300.c:528 +#: elf32-i860.c:1230 elf32-ip2k.c:1514 elf32-iq2000.c:703 elf32-m32c.c:572 +#: elf32-m32r.c:3136 elf32-m68hc1x.c:1147 elf32-mep.c:553 elf32-msp430.c:505 +#: elf32-mt.c:410 elf32-openrisc.c:423 elf32-score.c:2463 elf32-spu.c:4144 +#: elf32-v850.c:1727 elf32-xstormy16.c:960 elf64-mmix.c:1545 +msgid "internal error: unknown error" +msgstr "внутренняя ошибка: неизвестная ошибка" + +#: elf-m10300.c:1618 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "ошибка: неподходящий тип перемещения для динамической библиотеки (не указан -fpic?)" + +#: elf-m10300.c:1621 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "внутренняя ошибка: подозрительный тип перемещения в динамической библиотеке" + +#: elf-m10300.c:4397 elf32-arm.c:9578 elf32-cris.c:2403 elf32-hppa.c:1921 +#: elf32-i370.c:506 elf32-i386.c:1807 elf32-m32r.c:1931 elf32-m68k.c:2787 +#: elf32-ppc.c:4693 elf32-s390.c:1687 elf32-sh.c:2583 elf32-vax.c:1055 +#: elf64-ppc.c:6075 elf64-s390.c:1662 elf64-sh64.c:3432 elf64-x86-64.c:1641 +#: elfxx-sparc.c:1828 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "динамическая переменная `%s' имеет нулевой размер" + +#: elf.c:328 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: недопустимое смещение строки %u >= %lu для раздела `%s'" + +#: elf.c:438 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "%B символьный номер %lu ссылается на несуществующий раздел SHT_SYMTAB_SHNDX" + +#: elf.c:594 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Повреждённое поле размера в заголовке раздела групп: 0x%lx" + +#: elf.c:630 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: недопустимый элемент SHT_GROUP" + +#: elf.c:700 +msgid "%B: no group info for section %A" +msgstr "%B: нет информации о группе для раздела %A" + +#: elf.c:729 elf.c:2976 elflink.c:9746 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: предупреждение: не задан sh_link для раздела `%A'" + +#: elf.c:748 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: некорректный sh_link [%d] в разделе `%A'" + +#: elf.c:783 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: неизвестный [%d] раздел `%s' в группе [%s]" + +#: elf.c:1159 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" +"\n" +"Заголовок программы:\n" + +#: elf.c:1201 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" +"\n" +"Динамический раздел:\n" + +#: elf.c:1337 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" +"\n" +"Объявления версий:\n" + +#: elf.c:1362 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" +"\n" +"Версии ссылок:\n" + +#: elf.c:1367 +#, c-format +msgid " required from %s:\n" +msgstr " требуется из %s:\n" + +#: elf.c:1755 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: недопустимая ссылка %lu для раздела перемещений %s (индекс %u)" + +#: elf.c:1924 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: неизвестно как обработать размещённый, специальный раздел приложения `%s' [0x%8x]" + +#: elf.c:1936 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: неизвестно как обработать специальный раздел процессора `%s' [0x%8x]" + +#: elf.c:1947 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: неизвестно как обработать специальный раздел ОС `%s' [0x%8x]" + +#: elf.c:1957 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: неизвестно как обработать раздел `%s' [0x%8x]" + +#: elf.c:2555 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "предупреждение: тип раздела `%A' изменён на PROGBITS" + +#: elf.c:2933 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: sh_link раздела `%A' указывает на отброшенный раздел `%A' из `%B'" + +#: elf.c:2956 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: sh_link раздела `%A' указывает на удалённый раздел `%A' из `%B'" + +#: elf.c:4300 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: Первый раздел в сегменте PT_DYNAMIC не является разделом .dynamic" + +#: elf.c:4327 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: Недостаточно места для заголовков программы, попытайтесь скомпоновать с параметром -N" + +#: elf.c:4404 +msgid "%B: section %A vma 0x%lx overlaps previous sections" +msgstr "%B: раздел %A vma 0x%lx перекрывается с предыдущими разделами" + +#: elf.c:4499 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: раздел `%A' не может быть распределён в сегмент %d" + +#: elf.c:4549 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: предупреждение: распределённый раздел `%s' не в сегменте" + +#: elf.c:5064 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: требуется символ `%s', но он отсутствует" + +#: elf.c:5403 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: предупреждение: Обнаружен пустой загружаемый сегмент, это так задумывалось?\n" + +#: elf.c:6366 +#, c-format +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "Не удалось найти подходящее место вывода для символа '%s' из раздела '%s'" + +#: elf.c:7346 +msgid "%B: unsupported relocation type %s" +msgstr "%B: неподдерживаемый тип перемещения %s" + +#: elf32-arm.c:2846 elf32-arm.c:2878 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" +"%B(%s): предупреждение: совместная работа не включена.\n" +" первое упоминание: %B: Thumb-вызов в ARM" + +#: elf32-arm.c:3041 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "%s: невозможно создать элемент заглушки %s" + +#: elf32-arm.c:3825 +#, c-format +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "не удалось найти THUMB-склейку '%s' для '%s'" + +#: elf32-arm.c:3859 +#, c-format +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "не удалось найти ARM-склейку '%s' для '%s'" + +#: elf32-arm.c:4463 +msgid "%B: BE8 images only valid in big-endian mode." +msgstr "%B: образы BE8 разрешены только в режиме big-endian." + +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:4678 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: предупреждение: выбранный обход ошибки VFP11 не требуется для целевой архитектуры" + +#: elf32-arm.c:5212 elf32-arm.c:5232 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: невозможно найти склейку VFP11 `%s'" + +#: elf32-arm.c:5278 +#, c-format +msgid "Invalid TARGET2 relocation type '%s'." +msgstr "Недопустимый в TARGET2 тип перемещения '%s'." + +#: elf32-arm.c:5362 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: thumb call to arm" +msgstr "" +"%B(%s): предупреждение: interworking not enabled.\n" +" первое упоминание: %B: thumb-вызов в arm" + +#: elf32-arm.c:6094 +msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." +msgstr "\\%B: Предупреждение: Arm инструкция BLX в функции Arm '%s'." + +#: elf32-arm.c:6418 +msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." +msgstr "\\%B: Предупреждение: Thumb инструкция BLX в функции thumb '%s'." + +#: elf32-arm.c:7095 +msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): перемещение R_ARM_TLS_LE32 не разрешено для разделяемого объекта" + +#: elf32-arm.c:7310 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): В группе перемещений ALU разрешена только инструкция ADD или SUB" + +#: elf32-arm.c:7350 elf32-arm.c:7437 elf32-arm.c:7520 elf32-arm.c:7605 +msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" +msgstr "%B(%A+0x%lx): Переполнение во время разделения 0x%lx для перемещение группы %s" + +#: elf32-arm.c:7812 elf32-sh.c:3334 elf64-sh64.c:1556 +msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" +msgstr "%B(%A+0x%lx): %s перемещение в разделе SEC_MERGE" + +#: elf32-arm.c:7930 elf32-xtensa.c:2759 elf64-ppc.c:10374 +msgid "%B(%A+0x%lx): %s used with TLS symbol %s" +msgstr "%B(%A+0x%lx): %s используется с TLS-символом %s" + +#: elf32-arm.c:7931 elf32-xtensa.c:2760 elf64-ppc.c:10375 +msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" +msgstr "%B(%A+0x%lx): %s используется с не-TLS символом %s" + +#: elf32-arm.c:7988 +msgid "out of range" +msgstr "вне диапазона" + +#: elf32-arm.c:7992 +msgid "unsupported relocation" +msgstr "неподдерживаемое перемещение" + +#: elf32-arm.c:8000 +msgid "unknown error" +msgstr "неизвестная ошибка" + +#: elf32-arm.c:8099 +msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" +msgstr "Предупреждение: Сброс флага совместной работы %B, как с ним был скомпонован код без совместной работы из %B" + +#: elf32-arm.c:8205 +msgid "ERROR: %B uses VFP register arguments, %B does not" +msgstr "ОШИБКА: %B использует регистровые аргументы VFP, а %B не использует" + +#: elf32-arm.c:8254 +msgid "ERROR: %B: Conflicting architecture profiles %c/%c" +msgstr "ОШИБКА: %B: Противоречащие архитектурные профили %c/%c" + +#: elf32-arm.c:8274 +msgid "Warning: %B: Conflicting platform configuration" +msgstr "Предупреждение: %B: Противоречивые настройки платформы" + +#: elf32-arm.c:8283 +msgid "ERROR: %B: Conflicting use of R9" +msgstr "ОШИБКА: %B: Противоречащее использование R9" + +#: elf32-arm.c:8295 +msgid "ERROR: %B: SB relative addressing conflicts with use of R9" +msgstr "ОШИБКА: %B: противоречащее использование относительной адресации SB и R9" + +#: elf32-arm.c:8318 +msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" +msgstr "предупреждение: %B использует %u-байтовый wchar_t, хотя уже использовался %u-байтовый wchar_t; использование значений wchar_t в разных объектах может привести к ошибке" + +#: elf32-arm.c:8347 +msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "предупреждение: %B использует %s enum, хотя уже использовался %s enum; использование значений enum в разных объектах может привести к ошибке" + +#: elf32-arm.c:8360 +msgid "ERROR: %B uses iWMMXt register arguments, %B does not" +msgstr "ОШИБКА: %B использует регистровые аргументы iWMMXt, а %B не использует" + +#: elf32-arm.c:8400 +msgid "Warning: %B: Unknown EABI object attribute %d" +msgstr "Предупреждение: %B: Неизвестный атрибут EABI-объекта %d" + +#: elf32-arm.c:8460 +msgid "ERROR: %B is already in final BE8 format" +msgstr "ОШИБКА: %B уже в конечном формате BE8" + +#: elf32-arm.c:8536 +msgid "ERROR: Source object %B has EABI version %d, but target %B has EABI version %d" +msgstr "ОШИБКА: Объект-источник %B имеет версию EABI %d, а цель %B имеет версию EABI %d" + +#: elf32-arm.c:8552 +msgid "ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "ОШИБКА: %B скомпилирован для APCS-%d, в то время как цель %B использует APCS-%d" + +#: elf32-arm.c:8577 +msgid "ERROR: %B uses VFP instructions, whereas %B does not" +msgstr "ОШИБКА: %B использует инструкции VFP, в то время как %B не использует" + +#: elf32-arm.c:8581 +msgid "ERROR: %B uses FPA instructions, whereas %B does not" +msgstr "ОШИБКА: %B использует инструкции FPA, в то время как %B не использует" + +#: elf32-arm.c:8591 +msgid "ERROR: %B uses Maverick instructions, whereas %B does not" +msgstr "ОШИБКА: %B использует инструкции Maverick, в то время как %B не использует" + +#: elf32-arm.c:8595 +msgid "ERROR: %B does not use Maverick instructions, whereas %B does" +msgstr "ОШИБКА: %B не использует инструкции Maverick, в то время как %B использует" + +#: elf32-arm.c:8614 +msgid "ERROR: %B uses software FP, whereas %B uses hardware FP" +msgstr "ОШИБКА: %B использует программную FP, в то время как %B использует аппаратную FP" + +#: elf32-arm.c:8618 +msgid "ERROR: %B uses hardware FP, whereas %B uses software FP" +msgstr "ОШИБКА: %B использует аппаратную FP, в то время как %B использует программную FP" + +#. 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:8665 elf32-bfin.c:4899 elf32-cris.c:3235 elf32-m68hc1x.c:1279 +#: elf32-m68k.c:774 elf32-score.c:3750 elf32-vax.c:538 elfxx-mips.c:12699 +#, c-format +msgid "private flags = %lx:" +msgstr "собственные флаги = %lx:" + +#: elf32-arm.c:8674 +#, c-format +msgid " [interworking enabled]" +msgstr " [совместная работа включена]" + +#: elf32-arm.c:8682 +#, c-format +msgid " [VFP float format]" +msgstr " [VFP формат плавающей точки]" + +#: elf32-arm.c:8684 +#, c-format +msgid " [Maverick float format]" +msgstr " [Maverick формат плавающей точки]" + +#: elf32-arm.c:8686 +#, c-format +msgid " [FPA float format]" +msgstr " [FPA формат плавающей точки]" + +#: elf32-arm.c:8695 +#, c-format +msgid " [new ABI]" +msgstr " [новый ABI]" + +#: elf32-arm.c:8698 +#, c-format +msgid " [old ABI]" +msgstr " [старый ABI]" + +#: elf32-arm.c:8701 +#, c-format +msgid " [software FP]" +msgstr " [программная FP]" + +#: elf32-arm.c:8710 +#, c-format +msgid " [Version1 EABI]" +msgstr " [Версия1 EABI]" + +#: elf32-arm.c:8713 elf32-arm.c:8724 +#, c-format +msgid " [sorted symbol table]" +msgstr " [отсортированная таблица символов]" + +#: elf32-arm.c:8715 elf32-arm.c:8726 +#, c-format +msgid " [unsorted symbol table]" +msgstr " [несортированная таблица символов]" + +#: elf32-arm.c:8721 +#, c-format +msgid " [Version2 EABI]" +msgstr " [Версия2 EABI]" + +#: elf32-arm.c:8729 +#, c-format +msgid " [dynamic symbols use segment index]" +msgstr " [динамические символы используют сегментный индекс]" + +#: elf32-arm.c:8732 +#, c-format +msgid " [mapping symbols precede others]" +msgstr " [проецируемые символы указываются раньше]" + +#: elf32-arm.c:8739 +#, c-format +msgid " [Version3 EABI]" +msgstr " [Версия3 EABI]" + +#: elf32-arm.c:8743 +#, c-format +msgid " [Version4 EABI]" +msgstr " [Версия4 EABI]" + +#: elf32-arm.c:8747 +#, c-format +msgid " [Version5 EABI]" +msgstr " [Версия5 EABI]" + +#: elf32-arm.c:8750 +#, c-format +msgid " [BE8]" +msgstr " [BE8]" + +#: elf32-arm.c:8753 +#, c-format +msgid " [LE8]" +msgstr " [LE8]" + +#: elf32-arm.c:8759 +#, c-format +msgid " " +msgstr " <нераспознанная версия EABI>" + +#: elf32-arm.c:8766 +#, c-format +msgid " [relocatable executable]" +msgstr " [перемещаемый исполняемый]" + +#: elf32-arm.c:8769 +#, c-format +msgid " [has entry point]" +msgstr " [имеет точку входа]" + +#: elf32-arm.c:8774 +#, c-format +msgid "" +msgstr "<Нераспознанный набор битов флага>" + +#: elf32-arm.c:9013 elf32-i386.c:1236 elf32-s390.c:1006 elf32-xtensa.c:999 +#: elf64-s390.c:961 elf64-x86-64.c:1016 elfxx-sparc.c:1127 +msgid "%B: bad symbol index: %d" +msgstr "%B: неправильный символьный индекс: %d" + +#: elf32-arm.c:10125 +#, c-format +msgid "Errors encountered processing file %s" +msgstr "При обработке файла %s обнаружены ошибки" + +#: elf32-arm.c:11526 elf32-arm.c:11548 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: ошибка: склейка VFP11 вне диапазона" + +#: elf32-avr.c:1258 elf32-bfin.c:3222 elf32-cris.c:1546 elf32-fr30.c:624 +#: elf32-frv.c:4122 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:699 +#: elf32-m32c.c:568 elf32-mep.c:549 elf32-msp430.c:501 elf32-mt.c:406 +#: elf32-openrisc.c:419 elf32-v850.c:1711 elf32-xstormy16.c:956 +#: elf64-mmix.c:1541 +msgid "internal error: dangerous relocation" +msgstr "внутренняя ошибка: ошибка риска" + +#: elf32-avr.c:2396 elf32-hppa.c:605 elf32-m68hc1x.c:164 elf64-ppc.c:3983 +msgid "%B: cannot create stub entry %s" +msgstr "%B: невозможно создать элемент заглушки %s" + +#: elf32-bfin.c:1585 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): неразрешимое перемещение относительно символа `%s'" + +#: elf32-bfin.c:1618 elf32-i386.c:3623 elf32-m68k.c:3557 elf32-s390.c:3110 +#: elf64-s390.c:3071 elf64-x86-64.c:3278 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): перемещение к `%s': ошибка %d" + +#: elf32-bfin.c:2711 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B: перемещение `%A+0x%x' ссылается на символ `%s' с ненулевым добавлением" + +#: elf32-bfin.c:2725 elf32-frv.c:2904 +msgid "relocation references symbol not defined in the module" +msgstr "перемещение указывает на неопределённый символ в модуле" + +#: elf32-bfin.c:2822 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC указывает на динамический символ с ненулевым добавлением" + +#: elf32-bfin.c:2861 elf32-bfin.c:2987 elf32-frv.c:3641 elf32-frv.c:3762 +msgid "cannot emit fixups in read-only section" +msgstr "невозможно сгенерировать местоположения в разделе только для чтения" + +#: elf32-bfin.c:2889 elf32-bfin.c:3036 elf32-frv.c:3672 elf32-frv.c:3806 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "невозможно сгенерировать динамические перемещения в разделе только для чтения" + +#: elf32-bfin.c:2945 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_BFIN_FUNCDESC_VALUE указывает на динамический символ с ненулевым добавлением" + +#: elf32-bfin.c:3126 +msgid "relocations between different segments are not supported" +msgstr "перемещения между различными сегментами не поддерживаются" + +#: elf32-bfin.c:3127 +msgid "warning: relocation references a different segment" +msgstr "предупреждение: перемещение ссылается на другой сегмент" + +#: elf32-bfin.c:4791 elf32-frv.c:6404 +msgid "%B: unsupported relocation type %i" +msgstr "%B: неподдерживаемый тип перемещения %i" + +#: elf32-bfin.c:4944 elf32-frv.c:6812 +#, c-format +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: невозможно скомпоновать не-fdpic объектный файл в исполняемый fdpic" + +#: elf32-bfin.c:4948 elf32-frv.c:6816 +#, c-format +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: невозможно скомпоновать fdpic объектный файл в исполняемый не-fdpic" + +#: elf32-cris.c:1060 +msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" +msgstr "%B, раздел %A: неразрешимое перемещение %s у символа `%s'" + +#: elf32-cris.c:1129 +msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" +msgstr "%B, раздел %A: Нет ни PLT ни GOT для перемещения %s у символа `%s'" + +#: elf32-cris.c:1131 +msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" +msgstr "%B, раздел %A: Нет PLT для перемещения %s у символа `%s'" + +#: elf32-cris.c:1137 elf32-cris.c:1269 +msgid "[whose name is lost]" +msgstr "[чьё имя потеряно]" + +#: elf32-cris.c:1255 +msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" +msgstr "%B, раздел %A: перемещение %s с ненулевым добавлением %d у локального символа" + +#: elf32-cris.c:1263 +msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" +msgstr "%B, раздел %A: перемещение %s с ненулевым добавлением %d у символа `%s'" + +#: elf32-cris.c:1289 +msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" +msgstr "%B, раздел %A: перемещение %s не разрешено для глобального символа: `%s'" + +#: elf32-cris.c:1305 +msgid "%B, section %A: relocation %s with no GOT created" +msgstr "%B, раздел %A: перемещение %s без созданного GOT" + +#: elf32-cris.c:1423 +msgid "%B: Internal inconsistency; no relocation section %s" +msgstr "%B: Внутреннее несоответствие; нет перемещаемого раздела %s" + +#: elf32-cris.c:2510 +msgid "" +"%B, section %A:\n" +" v10/v32 compatible object %s must not contain a PIC relocation" +msgstr "" +"%B, раздел %A:\n" +" v10/v32 совместимый объект %s не должен содержать перемещения PIC" + +#: 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 "" +"%B, раздел %A:\n" +" перемещение %s не должно использоваться в разделяемом объекте; перекомпилируйте с -fPIC" + +#: elf32-cris.c:3184 +msgid "Unexpected machine number" +msgstr "Неожидаемое машинное число" + +#: elf32-cris.c:3238 +#, c-format +msgid " [symbols have a _ prefix]" +msgstr " [символы содержат префикс _]" + +#: elf32-cris.c:3241 +#, c-format +msgid " [v10 and v32]" +msgstr " [v10 и v32]" + +#: elf32-cris.c:3244 +#, c-format +msgid " [v32]" +msgstr " [v32]" + +#: elf32-cris.c:3289 +msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" +msgstr "%B: используются символы с префиксом _, но в файл записываются символы без префиксов" + +#: elf32-cris.c:3290 +msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" +msgstr "%B: используются символы без префикса _, но в файл записываются символы с префиксом _" + +#: elf32-cris.c:3309 +msgid "%B contains CRIS v32 code, incompatible with previous objects" +msgstr "%B содержит код CRIS v32, который не совместим с предыдущими объектами" + +#: elf32-cris.c:3311 +msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" +msgstr "%B содержит код не-CRIS v32, который не совместим с предыдущими объектами" + +#: elf32-frv.c:1507 elf32-frv.c:1656 +msgid "relocation requires zero addend" +msgstr "для перемещения требуется нулевое добавление" + +#: elf32-frv.c:2891 +msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above" +msgstr "%B(%A+0x%x): перемещение в `%s+%x' может быть вызвано предыдущей ошибкой" + +#: elf32-frv.c:2980 +msgid "R_FRV_GETTLSOFF not applied to a call instruction" +msgstr "R_FRV_GETTLSOFF не применимо для инструкции call" + +#: elf32-frv.c:3022 +msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction" +msgstr "R_FRV_GOTTLSDESC12 не применимо для инструкции lddi" + +#: elf32-frv.c:3093 +msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction" +msgstr "R_FRV_GOTTLSDESCHI не применимо для инструкции sethi" + +#: elf32-frv.c:3130 +msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_GOTTLSDESCLO не применимо для инструкции setlo или setlos" + +#: elf32-frv.c:3178 +msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction" +msgstr "R_FRV_TLSDESC_RELAX не применимо для инструкции ldd" + +#: elf32-frv.c:3262 +msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction" +msgstr "R_FRV_GETTLSOFF_RELAX не применимо для инструкции calll" + +#: elf32-frv.c:3317 +msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction" +msgstr "R_FRV_GOTTLSOFF12 не применимо для инструкции ldi" + +#: elf32-frv.c:3347 +msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction" +msgstr "R_FRV_GOTTLSOFFHI не применимо для инструкции sethi" + +#: elf32-frv.c:3376 +msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_GOTTLSOFFLO не применимо для инструкции setlo или setlos" + +#: elf32-frv.c:3407 +msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction" +msgstr "R_FRV_TLSOFF_RELAX не применимо для инструкции ld" + +#: elf32-frv.c:3452 +msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction" +msgstr "R_FRV_TLSMOFFHI не применимо для инструкции sethi" + +#: elf32-frv.c:3479 +msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction" +msgstr "R_FRV_TLSMOFFLO не применимо для инструкции setlo или setlos" + +#: elf32-frv.c:3600 +msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC указывает на динамический символ с ненулевым добавлением" + +#: elf32-frv.c:3720 +msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC_VALUE указывает на динамический символ с ненулевым добавлением" + +#: elf32-frv.c:3977 elf32-frv.c:4133 +msgid "%B(%A+0x%lx): reloc against `%s': %s" +msgstr "%B(%A+0x%lx): перемещение для `%s': %s" + +#: elf32-frv.c:3979 elf32-frv.c:3983 +msgid "relocation references a different segment" +msgstr "перемещение указывает на другой сегмент" + +#: elf32-frv.c:6726 +#, c-format +msgid "%s: compiled with %s and linked with modules that use non-pic relocations" +msgstr "%s: компилируется с %s и компонуется с модулями, в которых используются не-pic перемещения" + +#: elf32-frv.c:6779 elf32-iq2000.c:852 elf32-m32c.c:814 +#, c-format +msgid "%s: compiled with %s and linked with modules compiled with %s" +msgstr "%s: компилируется с %s и компонуется с модулями, скомпилированными с %s" + +#: elf32-frv.c:6791 +#, c-format +msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: использует другие неизвестные флаги e_flags (0x%lx) чем предыдущие модули (0x%lx)" + +#: elf32-frv.c:6841 elf32-iq2000.c:889 elf32-m32c.c:850 elf32-mt.c:583 +#, c-format +msgid "private flags = 0x%lx:" +msgstr "собственные флаги = 0x%lx:" + +#: elf32-gen.c:69 elf64-gen.c:69 +msgid "%B: Relocations in generic ELF (EM: %d)" +msgstr "%B: Перемещения в универсальном ELF (EM: %d)" + +#: elf32-hppa.c:854 elf32-hppa.c:3600 +msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" +msgstr "%B(%A+0x%lx): невозможно достичь %s, перекомпилируйте с -ffunction-sections" + +#: elf32-hppa.c:1263 +msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: перемещение %s не может использоваться при создании разделяемого объекта; перекомпилируйте с -fPIC" + +#: elf32-hppa.c:1518 +#, c-format +msgid "Could not find relocation section for %s" +msgstr "Невозможно найти перемещаемый раздел для %s" + +#: elf32-hppa.c:2810 +msgid "%B: duplicate export stub %s" +msgstr "%B: повторный экспорт заглушки %s" + +#: elf32-hppa.c:3436 +msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" +msgstr "%B(%A+0x%lx): %s местоположение для insn 0x%x не поддерживается в неразделяемой ссылке" + +#: elf32-hppa.c:4290 +msgid "%B(%A+0x%lx): cannot handle %s for %s" +msgstr "%B(%A+0x%lx): невозможно обработать %s для %s" + +#: elf32-hppa.c:4597 +msgid ".got section not immediately after .plt section" +msgstr "раздел .got не может стоять сразу после раздела .plt" + +#: elf32-i386.c:362 elf32-ppc.c:1616 elf32-s390.c:379 elf64-ppc.c:2153 +#: elf64-s390.c:403 elf64-x86-64.c:222 +msgid "%B: invalid relocation type %d" +msgstr "%B: неверный тип перемещения %d" + +#: elf32-i386.c:1183 elf64-x86-64.c:964 +msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" +msgstr "%B: TLS-переход из %s в %s для `%s' по 0x%lx в разделе `%A' завершился неудачно" + +#: elf32-i386.c:1364 elf32-s390.c:1188 elf32-sh.c:5098 elf32-xtensa.c:1162 +#: elf64-s390.c:1152 elfxx-sparc.c:1263 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: `%s' доступен как обычный и как локальный для нити символ" + +#: elf32-i386.c:1479 elf32-s390.c:1297 elf64-ppc.c:5046 elf64-s390.c:1264 +#: elf64-x86-64.c:1299 +msgid "%B: bad relocation section name `%s'" +msgstr "%B: неправильное имя перемещаемого раздела `%s'" + +#: elf32-i386.c:2598 +msgid "%B: unrecognized relocation (0x%x) in section `%A'" +msgstr "%B: нераспознанное перемещение (0x%x) в разделе `%A'" + +#: elf32-i386.c:2822 elf64-x86-64.c:2660 +msgid "hidden symbol" +msgstr "скрытый символ" + +#: elf32-i386.c:2825 elf64-x86-64.c:2663 +msgid "internal symbol" +msgstr "внутренний символ" + +#: elf32-i386.c:2828 elf64-x86-64.c:2666 +msgid "protected symbol" +msgstr "защищённый символ" + +#: elf32-i386.c:2831 elf64-x86-64.c:2669 +msgid "symbol" +msgstr "символ" + +#: elf32-i386.c:2836 +msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%B: перемещение R_386_GOTOFF для неопределённого %s `%s' не может использоваться при создании разделяемого объекта" + +#: elf32-i386.c:2846 +msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" +msgstr "%B: перемещение R_386_GOTOFF для защищённой функции `%s' не может использоваться при создании разделяемого объекта" + +#: 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 "ip2k relaxer: таблица переключений без полного совпадения информации о перемещении." + +#: elf32-ip2k.c:891 elf32-ip2k.c:974 +msgid "ip2k relaxer: switch table header corrupt." +msgstr "ip2k relaxer: испорчен заголовок у таблицы переключений." + +#: elf32-ip2k.c:1316 +#, c-format +msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k linker: отсутствует страница инструкций по адресу 0x%08lx (назнач = 0x%08lx)." + +#: elf32-ip2k.c:1332 +#, c-format +msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." +msgstr "ip2k linker: повторяющаяся страница инструкций по адресу 0x%08lx (назнач = 0x%08lx)." + +#. Only if it's not an unresolved symbol. +#: elf32-ip2k.c:1506 +msgid "unsupported relocation between data/insn address spaces" +msgstr "неподдерживаемое перемещение между адресным пространством данных/insn" + +#: elf32-iq2000.c:865 elf32-m32c.c:826 +#, c-format +msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%s: использует другие неизвестные флаги e_flags (0x%lx) чем предыдущие модули (0x%lx)" + +#: elf32-m32r.c:1453 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "перемещение SDA, но _SDA_BASE_ не определена" + +#: elf32-m32r.c:3061 +msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" +msgstr "%B: Цель (%s) перемещения %s в ошибочном разделе (%A)" + +#: elf32-m32r.c:3589 +msgid "%B: Instruction set mismatch with previous modules" +msgstr "%B: Набор инструкций не совпадает с набором у предыдущих модулей" + +#: elf32-m32r.c:3610 +#, c-format +msgid "private flags = %lx" +msgstr "собственные флаги = %lx" + +#: elf32-m32r.c:3615 +#, c-format +msgid ": m32r instructions" +msgstr ": инструкции m32r" + +#: elf32-m32r.c:3616 +#, c-format +msgid ": m32rx instructions" +msgstr ": инструкции m32rx" + +#: elf32-m32r.c:3617 +#, c-format +msgid ": m32r2 instructions" +msgstr ": инструкции m32r2" + +#: elf32-m68hc1x.c:1047 +#, c-format +msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" +msgstr "Указание на дальний символ `%s' с помощью ошибочного перемещения может привести к неправильному выполнению" + +#: elf32-m68hc1x.c:1070 +#, c-format +msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" +msgstr "банкируемый адрес [%lx:%04lx] (%lx) не совпадает с банком текущего банкируемого адреса [%lx:%04lx] (%lx)" + +#: elf32-m68hc1x.c:1089 +#, c-format +msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" +msgstr "ссылка на банкируемый адрес [%lx:%04lx] в обычном адресном пространстве по адресу %04lx" + +#: elf32-m68hc1x.c:1222 +msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" +msgstr "%B: компоновка файлов, скомпилированных для 16-битных целых (-mshort), с файлами, скомпилированными для 32-битных целых" + +#: elf32-m68hc1x.c:1229 +msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" +msgstr "%B: компоновка файлов, скомпилированных для 32-битных double (-fshort-double), с файлами, скомпилированными для 64-битных double" + +#: elf32-m68hc1x.c:1238 +msgid "%B: linking files compiled for HCS12 with others compiled for HC12" +msgstr "%B: компоновка файлов, скомпилированных для HCS12, с файлами, скомпилированными для HC12" + +#: elf32-m68hc1x.c:1254 elf32-ppc.c:4046 elf64-sparc.c:697 elfxx-mips.c:12561 +msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" +msgstr "%B: использует другие неизвестные флаги e_flags (0x%lx), чем предыдущие модули (0x%lx)" + +#: elf32-m68hc1x.c:1282 +#, c-format +msgid "[abi=32-bit int, " +msgstr "[abi=32-битное int, " + +#: elf32-m68hc1x.c:1284 +#, c-format +msgid "[abi=16-bit int, " +msgstr "[abi=16-битное int, " + +#: elf32-m68hc1x.c:1287 +#, c-format +msgid "64-bit double, " +msgstr "64-битное double, " + +#: elf32-m68hc1x.c:1289 +#, c-format +msgid "32-bit double, " +msgstr "32-битное double, " + +#: elf32-m68hc1x.c:1292 +#, c-format +msgid "cpu=HC11]" +msgstr "ЦП=HC11]" + +#: elf32-m68hc1x.c:1294 +#, c-format +msgid "cpu=HCS12]" +msgstr "ЦП=HCS12]" + +#: elf32-m68hc1x.c:1296 +#, c-format +msgid "cpu=HC12]" +msgstr "ЦП=HC12]" + +#: elf32-m68hc1x.c:1299 +#, c-format +msgid " [memory=bank-model]" +msgstr " [память=модель с банками]" + +#: elf32-m68hc1x.c:1301 +#, c-format +msgid " [memory=flat]" +msgstr " [память=плоская]" + +#: elf32-m68k.c:789 elf32-m68k.c:790 +msgid "unknown" +msgstr "неизвестно" + +#: elf32-m68k.c:1216 +msgid "%B: GOT overflow: Number of R_68K_GOT8O relocations > %d" +msgstr "%B: переполнение GOT: Количество перемещений R_68K_GOT8O > %d" + +#: elf32-m68k.c:1221 +msgid "%B: GOT overflow: Number of R_68K_GOT8O and R_68K_GOT16O relocations > %d" +msgstr "%B: переполнение GOT: Количество перемещений R_68K_GOT8O и R_68K_GOT16O > %d" + +#: elf32-mcore.c:99 elf32-mcore.c:442 +msgid "%B: Relocation %s (%d) is not currently supported.\n" +msgstr "%B: Перемещение %s (%d) в данный момент не поддерживается.\n" + +#: elf32-mcore.c:428 +msgid "%B: Unknown relocation type %d\n" +msgstr "%B: Неизвестный тип перемещения %d\n" + +#: elf32-mep.c:654 +msgid "%B and %B are for different cores" +msgstr "%B и %B для разных ядер" + +#: elf32-mep.c:671 +msgid "%B and %B are for different configurations" +msgstr "%B и %B для разных конфигураций" + +#: elf32-mep.c:709 +#, c-format +msgid "private flags = 0x%lx" +msgstr "собственные флаги = 0x%lx" + +#: elf32-mips.c:1045 elf64-mips.c:2056 elfn32-mips.c:1888 +msgid "literal relocation occurs for an external symbol" +msgstr "для внешнего символа обнаружено константное перемещение" + +#: elf32-mips.c:1085 elf32-score.c:484 elf64-mips.c:2099 elfn32-mips.c:1929 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "для внешнего символа обнаружено 32—битное относительное перемещение" + +#: elf32-ppc.c:1681 +#, c-format +msgid "generic linker can't handle %s" +msgstr "универсальный компоновщик не смог обработать %s" + +#: elf32-ppc.c:2161 +msgid "corrupt or empty %s section in %B" +msgstr "повреждённый или пустой раздел %s в %B" + +#: elf32-ppc.c:2168 +msgid "unable to read in %s section from %B" +msgstr "не удалось прочитать раздел %s из %B" + +#: elf32-ppc.c:2174 +msgid "corrupt %s section in %B" +msgstr "повреждённый раздел %s в %B" + +#: elf32-ppc.c:2217 +msgid "warning: unable to set size of %s section in %B" +msgstr "предупреждение: не удалось установить размер раздела %s в %B" + +#: elf32-ppc.c:2265 +msgid "failed to allocate space for new APUinfo section." +msgstr "не удалось выделить место для нового раздела APUinfo." + +#: elf32-ppc.c:2284 +msgid "failed to compute new APUinfo section." +msgstr "не удалось вычислить новый раздел APUinfo." + +#: elf32-ppc.c:2287 +msgid "failed to install new APUinfo section." +msgstr "не удалось установить новый раздел APUinfo." + +#: elf32-ppc.c:3263 +msgid "%B: relocation %s cannot be used when making a shared object" +msgstr "%B: раздел %s не может использоваться при создании разделяемого объекта" + +#. It does not make sense to have a procedure linkage +#. table entry for a local symbol. +#: elf32-ppc.c:3534 +msgid "%B(%A+0x%lx): %s reloc against local symbol" +msgstr "%B(%A+0x%lx): %s перемещение для локального символа" + +#: elf32-ppc.c:3885 elf32-ppc.c:3900 elfxx-mips.c:12268 elfxx-mips.c:12294 +#: elfxx-mips.c:12316 elfxx-mips.c:12342 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Предупреждение: %B использует аппаратную плавающую точку, %B использует программную плавающую точку" + +#: elf32-ppc.c:3888 elf32-ppc.c:3892 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Предупреждение: %B использует аппаратную плавающую точку двойной точности, %B использует аппаратную плавающую точку одинарной точности" + +#: elf32-ppc.c:3896 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Предупреждение: %B использует программную плавающую точку, %B аппаратную плавающую точку одинарной точности" + +#: elf32-ppc.c:3903 elf32-ppc.c:3907 elfxx-mips.c:12248 elfxx-mips.c:12252 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Предупреждение: %B использует неизвестный ABI плавающей точки %d" + +#: elf32-ppc.c:3949 elf32-ppc.c:3953 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Предупреждение: %B использует неизвестный ABI векторов %d" + +#: elf32-ppc.c:3957 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Предупреждение: %B использует ABI векторов \"%s\", %B использует \"%s\"" + +#: elf32-ppc.c:4011 +msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%B: скомпилирована с параметром -mrelocatable и нормально скомпонована со скомпилированными модулями" + +#: elf32-ppc.c:4019 +msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%B: нормально скомпилирована и скомпонована с модулями, скомпилированными с параметром -mrelocatable" + +#: elf32-ppc.c:4105 +msgid "Using bss-plt due to %B" +msgstr "Используется bss-plt из-за %B" + +#: elf32-ppc.c:6418 elf64-ppc.c:10881 +msgid "%B: unknown relocation type %d for symbol %s" +msgstr "%B: неизвестный тип перемещения %d для символа %s" + +#: elf32-ppc.c:6668 +msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" +msgstr "%B(%A+0x%lx): ненулевое добавление в перемещении %s для `%s'" + +#: elf32-ppc.c:7024 elf32-ppc.c:7050 elf32-ppc.c:7109 +msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%B: назначение (%s) перемещения %s в ошибочный выходной раздел (%s)" + +#: elf32-ppc.c:7164 +msgid "%B: relocation %s is not yet supported for symbol %s." +msgstr "%B: перемещение %s пока не поддерживается для символа %s." + +#: elf32-ppc.c:7272 elf64-ppc.c:11575 +msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): %s перемещение для `%s': ошибка %d" + +#: elf32-s390.c:2246 elf64-s390.c:2220 +msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" +msgstr "%B(%A+0x%lx): недопустимая инструкция для TLS-перемещения %s" + +#: elf32-score.c:1415 elfxx-mips.c:3273 +msgid "not enough GOT space for local GOT entries" +msgstr "недостаточно пространства GOT для локальных элементов GOT" + +#: elf32-score.c:2545 +#, c-format +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: Обнаружено искажённое перемещение для раздела %s" + +#: elf32-score.c:2596 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: перемещение CALL15 по адресу 0x%lx не для глобального символа" + +#: elf32-score.c:3753 +#, c-format +msgid " [pic]" +msgstr " [pic]" + +#: elf32-score.c:3757 +#, c-format +msgid " [fix dep]" +msgstr " [fix dep]" + +#: elf32-score.c:3799 +msgid "%B: warning: linking PIC files with non-PIC files" +msgstr "%B: предупреждение: выполняется компоновка PIC-файлов с не-PIC файлами" + +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +msgstr "%B: директива IMPORT AS для %s скрывается предыдущей IMPORT AS" + +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: Нераспознанная команда .directive: %s" + +#: elf32-sh-symbian.c:504 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Не удалось добавить переименованный символ %s" + +#: elf32-sh.c:533 +msgid "%B: 0x%lx: warning: bad R_SH_USES offset" +msgstr "%B: 0x%lx: предупреждение: неправильное смещение R_SH_USES" + +#: elf32-sh.c:545 +msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" +msgstr "%B: 0x%lx: предупреждение: R_SH_USES указывает на нераспознанный insn 0x%x" + +#: elf32-sh.c:562 +msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" +msgstr "%B: 0x%lx: предупреждение: неправильное загрузочное смещение R_SH_USES" + +#: elf32-sh.c:577 +msgid "%B: 0x%lx: warning: could not find expected reloc" +msgstr "%B: 0x%lx: предупреждение: невозможно найти ожидаемое смещение" + +#: elf32-sh.c:605 +msgid "%B: 0x%lx: warning: symbol in unexpected section" +msgstr "%B: 0x%lx: предупреждение: символ в неожиданном разделе" + +#: elf32-sh.c:731 +msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" +msgstr "%B: 0x%lx: предупреждение: невозможно найти ожидаемое смещение COUNT" + +#: elf32-sh.c:740 +msgid "%B: 0x%lx: warning: bad count" +msgstr "%B: 0x%lx: предупреждение: неправильный счётчик" + +#: elf32-sh.c:1144 elf32-sh.c:1514 +msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" +msgstr "%B: 0x%lx: останов: переполнение перемещения при ослаблении" + +#: elf32-sh.c:3279 elf64-sh64.c:1526 +msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" +msgstr "Неожиданное STO_SH5_ISA32 локального символа не обрабатывается" + +#: elf32-sh.c:3516 +msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" +msgstr "%B: 0x%lx: останов: невыровненное назначение ветви для перемещения с поддержкой ослабления" + +#: elf32-sh.c:3549 elf32-sh.c:3564 +msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" +msgstr "%B: 0x%lx: останов: невыровненное %s перемещение 0x%lx" + +#: elf32-sh.c:3578 +msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" +msgstr "%B: 0x%lx: останов: R_SH_PSHA перемещение %d вне диапазона -32..32" + +#: elf32-sh.c:3592 +msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" +msgstr "%B: 0x%lx: останов: R_SH_PSHL перемещение %d вне диапазона -32..32" + +#: elf32-sh.c:5310 elf64-alpha.c:4552 +msgid "%B: TLS local exec code cannot be linked into shared objects" +msgstr "%B: локальный исполняемый код TLS не может быть скомпонован с разделяемыми объектами" + +#: elf32-sh64.c:222 elf64-sh64.c:2345 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: скомпилирован как 32-битный объект, а %s 64-битный" + +#: elf32-sh64.c:225 elf64-sh64.c:2348 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: скомпилирован как 64-битный объект, а %s 32-битный" + +#: elf32-sh64.c:227 elf64-sh64.c:2350 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: размер объекта не соответствует этой цели %s" + +#: elf32-sh64.c:450 elf64-sh64.c:2888 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: во входных данных обнаружен символ метки данных" + +#: elf32-sh64.c:527 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "несовпадение PTB: адрес SHmedia (бит 0 == 1)" + +#: elf32-sh64.c:530 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "несовпадение PTA: адрес SHcompact (бит 0 == 0)" + +#: elf32-sh64.c:548 +#, c-format +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: ошибка GAS: неожиданный PTB insn с R_SH_PT_16" + +#: elf32-sh64.c:597 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: ошибка: невыровненный тип перемещения %d по адресу %08x перемещение %p\n" + +#: elf32-sh64.c:673 +#, c-format +msgid "%s: could not write out added .cranges entries" +msgstr "%s: не удалось записать добавленные элементы .cranges" + +#: elf32-sh64.c:733 +#, c-format +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: не удалось записать отсортированные элементы .cranges" + +#: elf32-sparc.c:89 +msgid "%B: compiled for a 64 bit system and target is 32 bit" +msgstr "%B: скомпилирован для 64-битной системы, а цель 32-битная" + +#: elf32-sparc.c:102 +msgid "%B: linking little endian files with big endian files" +msgstr "%B: производится компоновка файлов с обратным порядком байт с файлами с прямым порядком байт" + +#: elf32-spu.c:607 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "%X%P: разделы оверлеев %A и %A не начинаются с одинакового адреса.\n" + +#: elf32-spu.c:805 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "предупреждение: в %B определён вызов символа не-функции %s" + +#: elf32-spu.c:1406 +msgid "%B is not allowed to define %s" +msgstr "%B не разрешает определять %s" + +#: elf32-spu.c:1453 +#, c-format +msgid "%s in overlay section" +msgstr "%s в разделе оверлеев" + +#: elf32-spu.c:1469 +msgid "overlay stub relocation overflow" +msgstr "переполнение оверлейной заглушки перемещения" + +#: elf32-spu.c:1478 elf64-ppc.c:10078 +msgid "stubs don't match calculated size" +msgstr "заглушка не соответствует вычисленному размеру" + +#: elf32-spu.c:1976 +#, c-format +msgid "warning: %s overlaps %s\n" +msgstr "предупреждение: %s перекрывается с %s\n" + +#: elf32-spu.c:1992 +#, c-format +msgid "warning: %s exceeds section size\n" +msgstr "предупреждение: %s превышает размер раздела\n" + +#: elf32-spu.c:2023 +msgid "%A:0x%v not found in function table\n" +msgstr "%A:0x%v не найдена в таблице функций\n" + +#: elf32-spu.c:2165 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" +msgstr "%B(%A+0x%v): вызов не кодового раздела %B(%A), анализ не полон\n" + +#: elf32-spu.c:2339 +#, c-format +msgid "%A link_order not found\n" +msgstr "%A link_order не найден\n" + +#: elf32-spu.c:2706 +#, c-format +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "В анализе стека будет игнорироваться вызов из %s в %s\n" + +#: elf32-spu.c:3348 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3349 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3354 +msgid " calls:\n" +msgstr " вызовы:\n" + +#: elf32-spu.c:3362 +#, c-format +msgid " %s%s %s\n" +msgstr " %s%s %s\n" + +#: elf32-spu.c:3564 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "%s повторяется в %s\n" + +#: elf32-spu.c:3568 +#, c-format +msgid "%s duplicated\n" +msgstr "%s повторяется\n" + +#: elf32-spu.c:3575 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "поддержка повторяющихся объектных файлов в сценарии auto-overlay пока не сделана\n" + +#: elf32-spu.c:3605 +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "неоверлейный размер 0x%v плюс максимальный размер оверлея 0x%v превышает локальное хранилище\n" + +#: elf32-spu.c:3741 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "%B:%A%s превышает размер оверлея\n" + +#: elf32-spu.c:3862 +msgid "Stack size for call graph root nodes.\n" +msgstr "Размер стека для вызова графа корневых узлов.\n" + +#: elf32-spu.c:3863 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" +msgstr "" +"\n" +"Размер стека для функций. Примечания: '*' макс стек, 't' хвостовой вызов\n" + +#: elf32-spu.c:3871 +msgid "Maximum stack required is 0x%v\n" +msgstr "Для максимального стека требуется 0x%v\n" + +#: elf32-spu.c:4067 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s+0x%lx): неразрешённое перемещение %s для символа `%s'" + +#: elf32-v850.c:165 +#, c-format +msgid "Variable `%s' cannot occupy in multiple small data regions" +msgstr "Переменная `%s' не может занимать несколько маленьких областей данных" + +#: elf32-v850.c:168 +#, c-format +msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "Переменная `%s' может быть только в одном из маленьких, нулевых и крошечных областей данных" + +#: elf32-v850.c:171 +#, c-format +msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "Переменная `%s' не может быть в маленьких и нулевых областях данных одновременно" + +#: elf32-v850.c:174 +#, c-format +msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "Переменная `%s' не может быть в маленьких и крошечных областях данных одновременно" + +#: elf32-v850.c:177 +#, c-format +msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "Переменная `%s' не может быть в нулевых и крошечных областях данных одновременно" + +#: elf32-v850.c:480 +#, c-format +msgid "FAILED to find previous HI16 reloc\n" +msgstr "НЕ УДАЛОСЬ найти предыдущее перемещение HI16\n" + +#: elf32-v850.c:1715 +msgid "could not locate special linker symbol __gp" +msgstr "невозможно отыскать специальный символ компоновки __gp" + +#: elf32-v850.c:1719 +msgid "could not locate special linker symbol __ep" +msgstr "невозможно отыскать специальный символ компоновки __ep" + +#: elf32-v850.c:1723 +msgid "could not locate special linker symbol __ctbp" +msgstr "невозможно отыскать специальный символ компоновки __ctbp" + +#: elf32-v850.c:1873 +msgid "%B: Architecture mismatch with previous modules" +msgstr "%B: Архитектура не совпадает с предыдущими модулями" + +#: elf32-v850.c:1892 +#, c-format +msgid "private flags = %lx: " +msgstr "собственные флаги = %lx: " + +#: elf32-v850.c:1897 +#, c-format +msgid "v850 architecture" +msgstr "архитектура v850" + +#: elf32-v850.c:1898 +#, c-format +msgid "v850e architecture" +msgstr "архитектура v850e" + +#: elf32-v850.c:1899 +#, c-format +msgid "v850e1 architecture" +msgstr "архитектура v850e1" + +#: elf32-vax.c:541 +#, c-format +msgid " [nonpic]" +msgstr " [не-pic]" + +#: elf32-vax.c:544 +#, c-format +msgid " [d-float]" +msgstr " [d-float]" + +#: elf32-vax.c:547 +#, c-format +msgid " [g-float]" +msgstr " [g-float]" + +#: elf32-vax.c:657 +#, c-format +msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" +msgstr "%s: предупреждение: добавление GOT из %ld к `%s' не совпадает с предыдущим добавлением GOT из %ld" + +#: elf32-vax.c:1589 +#, c-format +msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" +msgstr "%s: предупреждение: добавление PLT из %d к `%s' из раздела %s игнорируется" + +#: elf32-vax.c:1726 +#, c-format +msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgstr "%s: предупреждение: перемещение %s для символа `%s' из раздела %s" + +#: elf32-vax.c:1732 +#, c-format +msgid "%s: warning: %s relocation to 0x%x from %s section" +msgstr "%s: предупреждение: перемещение %s к 0x%x из раздела %s" + +#: elf32-xstormy16.c:451 elf32-ia64.c:2794 elf64-ia64.c:2794 +msgid "non-zero addend in @fptr reloc" +msgstr "ненулевое добавление в перемещение @fptr" + +#: elf32-xtensa.c:911 +msgid "%B(%A): invalid property table" +msgstr "%B(%A): недопустимая таблица свойств" + +#: elf32-xtensa.c:2734 +msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" +msgstr "%B(%A+0x%lx): смещение перемещения вне диапазона (размер=0x%x)" + +#: elf32-xtensa.c:2813 elf32-xtensa.c:2934 +msgid "dynamic relocation in read-only section" +msgstr "динамическое перемещение в разделе только для чтения" + +#: elf32-xtensa.c:2910 +msgid "TLS relocation invalid without dynamic sections" +msgstr "TLS-перемещение недопустимо без динамических разделов" + +#: elf32-xtensa.c:3127 +msgid "internal inconsistency in size of .got.loc section" +msgstr "внутренняя несогласованность размера раздела .got.loc" + +#: elf32-xtensa.c:3437 +msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" +msgstr "%B: несовместимый машинный тип. Выходной 0x%x. Входной 0x%x" + +#: elf32-xtensa.c:4666 elf32-xtensa.c:4674 +msgid "Attempt to convert L32R/CALLX to CALL failed" +msgstr "Попытка преобразования L32R/CALLX в CALL завершилась неудачно" + +#: elf32-xtensa.c:6276 elf32-xtensa.c:6352 elf32-xtensa.c:7468 +msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" +msgstr "%B(%A+0x%lx): невозможно декодировать инструкцию; возможно несовпадение конфигурации" + +#: elf32-xtensa.c:7208 +msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" +msgstr "%B(%A+0x%lx): невозможно декодировать инструкцию для перемещения XTENSA_ASM_SIMPLIFY; возможно несовпадение конфигурации" + +#: elf32-xtensa.c:8969 +msgid "invalid relocation address" +msgstr "недопустимый адрес перемещения" + +#: elf32-xtensa.c:9018 +msgid "overflow after relaxation" +msgstr "переполнение после ослабления" + +#: elf32-xtensa.c:10154 +msgid "%B(%A+0x%lx): unexpected fix for %s relocation" +msgstr "%B(%A+0x%lx): неожиданное назначение для перемещения %s" + +#: elf64-alpha.c:452 +msgid "GPDISP relocation did not find ldah and lda instructions" +msgstr "Не найдены инструкции ldah и lda для перемещения GPDISP" + +#: elf64-alpha.c:2416 +msgid "%B: .got subsegment exceeds 64K (size %d)" +msgstr "%B: подраздел .got превышает 64K (размер %d)" + +#: elf64-alpha.c:4296 elf64-alpha.c:4308 +msgid "%B: gp-relative relocation against dynamic symbol %s" +msgstr "%B: gp-относительное перемещение для динамического символа %s" + +#: elf64-alpha.c:4334 elf64-alpha.c:4469 +msgid "%B: pc-relative relocation against dynamic symbol %s" +msgstr "%B: pc-относительное перемещение для динамического символа %s" + +#: elf64-alpha.c:4362 +msgid "%B: change in gp: BRSGP %s" +msgstr "%B: изменение в gp: BRSGP %s" + +#: elf64-alpha.c:4387 +msgid "" +msgstr "<неизвестно>" + +#: elf64-alpha.c:4392 +msgid "%B: !samegp reloc against symbol without .prologue: %s" +msgstr "%B: перемещение !samegp для символа без .prologue: %s" + +#: elf64-alpha.c:4444 +msgid "%B: unhandled dynamic relocation against %s" +msgstr "%B: необработанное динамическое перемещение для %s" + +#: elf64-alpha.c:4476 +msgid "%B: pc-relative relocation against undefined weak symbol %s" +msgstr "%B: pc-относительное перемещение для неопределённого слабого символа %s" + +#: elf64-alpha.c:4536 +msgid "%B: dtp-relative relocation against dynamic symbol %s" +msgstr "%B: dtp-относительное перемещение для динамического символа %s" + +#: elf64-alpha.c:4559 +msgid "%B: tp-relative relocation against dynamic symbol %s" +msgstr "%B: tp-относительное перемещение для динамического символа %s" + +#: elf64-hppa.c:2071 +#, c-format +msgid "stub entry for %s cannot load .plt, dp offset = %ld" +msgstr "элемент заглушки для %s не может загрузить .plt, смещение dp = %ld" + +#: elf64-mmix.c:1177 +#, c-format +msgid "" +"%s: Internal inconsistency error for value for\n" +" linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n" +msgstr "" +"%s: Ошибка внутреннего несоответствия для значения\n" +" глобального регистра назначаемого компоновщиком: скомпонован: 0x%lx%08lx != ослаблен: 0x%lx%08lx\n" + +#: elf64-mmix.c:1618 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" +msgstr "%s: перемещение база-плюс-смещение для регистрового символа: (неизвестно) в %s" + +#: elf64-mmix.c:1623 +#, c-format +msgid "%s: base-plus-offset relocation against register symbol: %s in %s" +msgstr "%s: перемещение база-плюс-смещение для регистрового символа: %s в %s" + +#: elf64-mmix.c:1667 +#, c-format +msgid "%s: register relocation against non-register symbol: (unknown) in %s" +msgstr "%s: регистровое перемещение для нерегистрового символа: (неизвестно) в %s" + +#: elf64-mmix.c:1672 +#, c-format +msgid "%s: register relocation against non-register symbol: %s in %s" +msgstr "%s: регистровое перемещение для нерегистрового символа: %s в %s" + +#: elf64-mmix.c:1709 +#, c-format +msgid "%s: directive LOCAL valid only with a register or absolute value" +msgstr "%s: директива LOCAL разрешена только с регистром или абсолютным значением" + +#: elf64-mmix.c:1737 +#, c-format +msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." +msgstr "%s: директива LOCAL: Регистр $%ld не является локальным регистром. Первый глобальный регистр: $%ld." + +#: elf64-mmix.c:2201 +#, c-format +msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" +msgstr "%s: Ошибка: множественные объявления `%s'; начало %s установлено в ранее скомпонованном файле\n" + +#: elf64-mmix.c:2259 +msgid "Register section has contents\n" +msgstr "В регистровом разделе имеется содержимое\n" + +#: elf64-mmix.c:2451 +#, c-format +msgid "" +"Internal inconsistency: remaining %u != max %u.\n" +" Please report this bug." +msgstr "" +"Внутреннее противоречие: остаётся %u != макс %u.\n" +" Сообщите об ошибке." + +#: elf64-ppc.c:2561 libbfd.c:978 +msgid "%B: compiled for a big endian system and target is little endian" +msgstr "%B: скомпилировано для системы с прямым порядком байт, а цель с обратным порядком байт" + +#: elf64-ppc.c:2564 libbfd.c:980 +msgid "%B: compiled for a little endian system and target is big endian" +msgstr "%B: скомпилировано для системы с обратным порядком байт, а цель с прямым порядком байт" + +#: elf64-ppc.c:6065 +#, c-format +msgid "copy reloc against `%s' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc" +msgstr "копирование перемещения для `%s' требует ленивой plt-компоновки; не задавайте LD_BIND_NOW=1 или обновите gcc" + +#: elf64-ppc.c:6486 +msgid "dynreloc miscount for %B, section %A" +msgstr "ошибка в вычислении dynreloc %B, раздел %A" + +#: elf64-ppc.c:6570 +msgid "%B: .opd is not a regular array of opd entries" +msgstr "%B: .opd не является обычным массивом элементов opd" + +#: elf64-ppc.c:6579 +msgid "%B: unexpected reloc type %u in .opd section" +msgstr "%B: неожиданный тип перемещения %u в разделе .opd" + +#: elf64-ppc.c:6600 +msgid "%B: undefined sym `%s' in .opd section" +msgstr "%B: неопределённый символ `%s' в разделе .opd" + +#: elf64-ppc.c:7377 elf64-ppc.c:7754 +#, c-format +msgid "%s defined in removed toc entry" +msgstr "%s определён в удалённом элементе toc" + +#: elf64-ppc.c:8581 +#, c-format +msgid "long branch stub `%s' offset overflow" +msgstr "переполнение смещения заглушки длинного перехода `%s'" + +#: elf64-ppc.c:8640 +#, c-format +msgid "can't find branch stub `%s'" +msgstr "не найдена заглушка перехода `%s'" + +#: elf64-ppc.c:8702 elf64-ppc.c:8822 +#, c-format +msgid "linkage table error against `%s'" +msgstr "ошибка в таблице компоновки для `%s'" + +#: elf64-ppc.c:8978 +#, c-format +msgid "can't build branch stub `%s'" +msgstr "невозможно собрать заглушку перехода `%s'" + +#: elf64-ppc.c:9451 +msgid "%B section %A exceeds stub group size" +msgstr "%B раздел %A превышает групповой размер заглушки" + +#: elf64-ppc.c:10090 +#, c-format +msgid "" +"linker stubs in %u group%s\n" +" branch %lu\n" +" toc adjust %lu\n" +" long branch %lu\n" +" long toc adj %lu\n" +" plt call %lu" +msgstr "" +"заглушки компоновщика в %u группе%s\n" +" переход %lu\n" +" исправление toc %lu\n" +" длинный переход %lu\n" +" исправление длинного long %lu\n" +" plt-вызовl %lu" + +#: elf64-ppc.c:10769 +msgid "%B(%A+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc" +msgstr "%B(%A+0x%lx): автоматические множественные TOC не поддерживаются через ваши файлы crt; перекомпилируйте с параметром -mminimal-toc или обновите gcc" + +#: elf64-ppc.c:10777 +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 "%B(%A+0x%lx): оптимизация одноуровневых вызовов к `%s' не разрешена из-за автоматических множественных TOC; перекомпилируйте с параметром -mminimal-toc или -fno-optimize-sibling-calls, или создайте внешний `%s'" + +#: elf64-ppc.c:11427 +msgid "%B: relocation %s is not supported for symbol %s." +msgstr "%B: перемещение %s не поддерживается для символа %s." + +#: elf64-ppc.c:11509 +msgid "%B: error: relocation %s not a multiple of %d" +msgstr "%B: ошибка: перемещение %s не кратно %d" + +#: elf64-sh64.c:1701 +#, c-format +msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" +msgstr "%s: ошибка: невыровненный тип перемещения %d по адресу %08x перемещение %08x\n" + +#: elf64-sparc.c:439 +msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" +msgstr "%B: Только регистры %%g[2367] могут объявляться с помощью STT_REGISTER" + +#: elf64-sparc.c:459 +msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" +msgstr "Несовместимое использование регистра %%g%d: %s в %B, ранее %s в %B" + +#: elf64-sparc.c:482 +msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" +msgstr "Символ `%s' имеет различные типы: REGISTER в %B, ранее %s в %B" + +#: elf64-sparc.c:527 +msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" +msgstr "Символ `%s' имеет различные типы: %s в %B, ранее REGISTER в %B" + +#: elf64-sparc.c:678 +msgid "%B: linking UltraSPARC specific with HAL specific code" +msgstr "%B: UltraSPARC-специфичная компоновка с HAL-специфичным кодом" + +#: elf64-x86-64.c:1047 elf64-x86-64.c:1207 elfxx-mips.c:7834 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: перемещение %s для `%s' не может использоваться при создании разделяемого объекта; перекомпилируйте с -fPIC" + +#: elf64-x86-64.c:1138 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B: '%s' доступен как обычный и как локальный для нити символ" + +#: elf64-x86-64.c:2559 +msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" +msgstr "%B: перемещение R_X86_64_GOTOFF64 для защищённой функции `%s' не может использоваться при создании разделяемого объекта" + +#: elf64-x86-64.c:2670 +msgid "; recompile with -fPIC" +msgstr "; перекомпилируйте с параметром -fPIC" + +#: elf64-x86-64.c:2675 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: перемещение %s для %s `%s' не может использоваться при создании разделяемого объекта(ов)" + +#: elf64-x86-64.c:2677 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: перемещение %s для неопределённого %s `%s' не может использоваться при создании разделяемого объекта(ов)" + +#: elfcode.h:795 +#, c-format +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "предупреждение: у %s повреждена таблица индексов строк - игнорируется" + +#: elfcode.h:1201 +#, c-format +msgid "%s: version count (%ld) does not match symbol count (%ld)" +msgstr "%s: счётчик версии (%ld) не совпадает со счётчиком символа (%ld)" + +#: elfcode.h:1435 +#, c-format +msgid "%s(%s): relocation %d has invalid symbol index %ld" +msgstr "%s(%s): перемещение %d имеет недопустимый индекс символа %ld" + +#: elfcore.h:251 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Предупреждение: %B усечён: ожидался размер ядра файла >= %lu, найдено: %lu." + +#: elflink.c:1028 +msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS-определение в %B раздела %A не совпадает с не-TLS определением в %B раздела %A" + +#: elflink.c:1032 +msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" +msgstr "%s: TLS-ссылка в %B не совпадает с не-TLS ссылкой в %B" + +#: elflink.c:1036 +msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" +msgstr "%s: TLS-определение в %B раздела %A не совпадает с не-TLS ссылкой в %B" + +#: elflink.c:1040 +msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" +msgstr "%s: TLS-ссылка в %B не совпадает с не-TLS определением в %B раздела %A" + +#: elflink.c:1654 +msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" +msgstr "%B: неожиданное переопределение косвенного версионного символа `%s'" + +#: elflink.c:1982 +msgid "%B: version node not found for symbol %s" +msgstr "%B: версия узла не найдена для символа %s" + +#: elflink.c:2130 +msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" +msgstr "%B: неправильный индекс перемещаемого символа (0x%lx >= 0x%lx) для смещения 0x%lx в разделе `%A'" + +#: elflink.c:2327 +msgid "%B: relocation size mismatch in %B section %A" +msgstr "%B: размер перемещения не совпадает в %B раздела %A" + +#: elflink.c:2629 +#, c-format +msgid "warning: type and size of dynamic symbol `%s' are not defined" +msgstr "предупреждение: тип и размер динамического символа `%s' не определён" + +#: elflink.c:3953 +msgid "%B: %s: invalid version %u (max %d)" +msgstr "%B: %s: недопустимая версия %u (макс %d)" + +#: elflink.c:3989 +msgid "%B: %s: invalid needed version %d" +msgstr "%B: %s: недопустимая необходимая версия %d" + +#: elflink.c:4172 +msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" +msgstr "Предупреждение: выравнивание %u общего символа `%s' в %B больше, чем выравнивание (%u) его раздела %A" + +#: elflink.c:4178 +msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" +msgstr "Предупреждение: выравнивание %u символа `%s' в %B меньше, чем %u в %B" + +#: elflink.c:4193 +msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" +msgstr "Предупреждение: размер символа `%s' изменился с %lu в %B на %lu в %B" + +#: elflink.c:4371 +#, c-format +msgid "%s: invalid DSO for symbol `%s' definition" +msgstr "%s: недопустимый DSO для определения символа `%s'" + +#: elflink.c:5621 +#, c-format +msgid "%s: undefined version: %s" +msgstr "%s: неопределённая версия: %s" + +#: elflink.c:5689 +msgid "%B: .preinit_array section is not allowed in DSO" +msgstr "%B: раздел .preinit_array не разрешается в DSO" + +#: elflink.c:7414 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "неопределённая ссылка %s в сложном символе: %s" + +#: elflink.c:7568 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "неизвестный оператор '%c' в сложном символе" + +#: elflink.c:7904 elflink.c:7921 elflink.c:7958 elflink.c:7975 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: Невозможно отсортировать перемещения - они разных размеров" + +#: elflink.c:7935 elflink.c:7989 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: Невозможно отсортировать перемещения - они неизвестного размера" + +#: elflink.c:8038 +msgid "Not enough memory to sort relocations" +msgstr "Недостаточно памяти для сортировки перемещений" + +#: elflink.c:8227 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: Слишком много разделов: %d (>= %d)" + +#: elflink.c:8461 +msgid "%B: %s symbol `%s' in %B is referenced by DSO" +msgstr "%B: %s символ `%s' в %B указывается из DSO" + +#: elflink.c:8544 +msgid "%B: could not find output section %A for input section %A" +msgstr "%B: невозможно найти выходной раздел %A для входного раздела %A" + +#: elflink.c:8655 +msgid "%B: %s symbol `%s' isn't defined" +msgstr "%B: %s символ `%s' не определён" + +#: elflink.c:9141 +msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" +msgstr "ошибка: %B содержит перемещение (0x%s) для раздела %A, который ссылается на несуществующий глобальный символ" + +#: elflink.c:9205 +msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" +msgstr "%X`%s' указывает в раздел `%A' из %B: определён в отброшенном разделе `%A' из %B\n" + +#: elflink.c:9825 +msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" +msgstr "%A содержит упорядоченные [`%A' в %B] и неупорядоченные [`%A' в %B] разделы" + +#: elflink.c:9830 +#, c-format +msgid "%A has both ordered and unordered sections" +msgstr "%A содержит упорядоченные и неупорядоченные разделы" + +#: elflink.c:10715 elflink.c:10759 +msgid "%B: could not find output section %s" +msgstr "%B: невозможно найти выходной раздел %s" + +#: elflink.c:10720 +#, c-format +msgid "warning: %s section has zero size" +msgstr "предупреждение: раздел %s имеет нулевой размер" + +#: elflink.c:10824 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: предупреждение: создаётся DT_TEXTREL в разделяемом объекте.\n" + +#: elflink.c:11006 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: невозможно прочитать символы: %E\n" + +#: elflink.c:11313 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Удаляется неиспользуемый раздел '%s' в файле '%B'" + +#: elflink.c:11525 +msgid "Warning: gc-sections option ignored" +msgstr "Предупреждение: параметр gc-sections игнорируется" + +#: elflink.c:12056 +msgid "%B: ignoring duplicate section `%A'" +msgstr "%B: игнорируется повторяющийся раздел `%A'" + +#: elflink.c:12063 elflink.c:12070 +msgid "%B: duplicate section `%A' has different size" +msgstr "%B: повторяющийся раздел `%A' имеет другой размер" + +#: elflink.c:12078 elflink.c:12083 +msgid "%B: warning: could not read contents of section `%A'" +msgstr "%B: предупреждение: невозможно прочитать содержимое раздела `%A'" + +#: elflink.c:12087 +msgid "%B: warning: duplicate section `%A' has different contents" +msgstr "%B: предупреждение: повторяющийся раздел `%A' имеет другое содержимое" + +#: elflink.c:12166 linker.c:3080 +msgid "%F%P: already_linked_table: %E" +msgstr "%F%P: already_linked_table: %E" + +#: elfxx-mips.c:1197 +msgid "static procedure (no name)" +msgstr "статическая процедура (без имени)" + +#: elfxx-mips.c:5562 +msgid "%B: %A+0x%lx: jump to stub routine which is not jal" +msgstr "%B: %A+0x%lx: переход в процедуру заглушки, которая не не является jal (Jump And Link)" + +#: elfxx-mips.c:6206 elfxx-mips.c:6427 +msgid "%B: Warning: bad `%s' option size %u smaller than its header" +msgstr "%B: Предупреждение: неправильный размер параметра `%s' (%u) меньше, чем его заголовок" + +#: elfxx-mips.c:7174 elfxx-mips.c:7299 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: Предупреждение: невозможно определить функцию назначения для раздела заглушки `%s'" + +#: elfxx-mips.c:7428 +msgid "%B: Malformed reloc detected for section %s" +msgstr "%B: Обнаружено искажённое перемещение в разделе %s" + +#: elfxx-mips.c:7468 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: перемещение GOT по адресу 0x%lx не ожидается в исполняемых файлах" + +#: elfxx-mips.c:7566 +msgid "%B: CALL16 reloc at 0x%lx not against global symbol" +msgstr "%B: перемещение CALL16 по адресу 0x%lx не предназначено для глобального символа" + +#: elfxx-mips.c:8244 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "не-динамические перемещения указывают на динамический символ %s" + +#: elfxx-mips.c:8947 +msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" +msgstr "%B: Невозможно найти подходящее LO16 перемещение у `%s' для %s по адресу 0x%lx в разделе `%A'" + +#: elfxx-mips.c:9086 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "раздел small-data превышает 64КБ - нижний предел small-data (см. параметр -G)" + +#: elfxx-mips.c:11887 +#, c-format +msgid "%s: illegal section name `%s'" +msgstr "%s: недопустимое имя раздела `%s'" + +#: elfxx-mips.c:12262 elfxx-mips.c:12288 +msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" +msgstr "Предупреждение: %B использует -msingle-float, %B использует -mdouble-float" + +#: elfxx-mips.c:12274 elfxx-mips.c:12330 +msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +msgstr "Предупреждение: %B использует -msingle-float, %B использует -mips32r2 -mfp64" + +#: elfxx-mips.c:12300 elfxx-mips.c:12336 +msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +msgstr "Предупреждение: %B использует -mdouble-float, %B использует -mips32r2 -mfp64" + +#: elfxx-mips.c:12378 +msgid "%B: endianness incompatible with that of the selected emulation" +msgstr "%B: порядок байт не совместим с выбранным в эмуляции" + +#: elfxx-mips.c:12389 +msgid "%B: ABI is incompatible with that of the selected emulation" +msgstr "%B: ABI не совместим с выбранным в эмуляции" + +#: elfxx-mips.c:12470 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: предупреждение: компоновка файлов abicalls с файлами не-abicalls" + +#: elfxx-mips.c:12487 +msgid "%B: linking 32-bit code with 64-bit code" +msgstr "%B: компоновка 32-битного кода с 64-битным кодом" + +#: elfxx-mips.c:12515 +msgid "%B: linking %s module with previous %s modules" +msgstr "%B: компоновка модуля %s с предыдущими модулями %s" + +#: elfxx-mips.c:12538 +msgid "%B: ABI mismatch: linking %s module with previous %s modules" +msgstr "%B: несовпадение ABI: компоновка модуля %s с предыдущими модулями %s" + +#: elfxx-mips.c:12702 +#, c-format +msgid " [abi=O32]" +msgstr " [abi=O32]" + +#: elfxx-mips.c:12704 +#, c-format +msgid " [abi=O64]" +msgstr " [abi=O64]" + +#: elfxx-mips.c:12706 +#, c-format +msgid " [abi=EABI32]" +msgstr " [abi=EABI32]" + +#: elfxx-mips.c:12708 +#, c-format +msgid " [abi=EABI64]" +msgstr " [abi=EABI64]" + +#: elfxx-mips.c:12710 +#, c-format +msgid " [abi unknown]" +msgstr " [abi неизвестен]" + +#: elfxx-mips.c:12712 +#, c-format +msgid " [abi=N32]" +msgstr " [abi=N32]" + +#: elfxx-mips.c:12714 +#, c-format +msgid " [abi=64]" +msgstr " [abi=64]" + +#: elfxx-mips.c:12716 +#, c-format +msgid " [no abi set]" +msgstr " [abi не задан]" + +#: elfxx-mips.c:12737 +#, c-format +msgid " [unknown ISA]" +msgstr " [неизвестный ISA]" + +#: elfxx-mips.c:12748 +#, c-format +msgid " [not 32bitmode]" +msgstr " [не 32-битный режим]" + +#: elfxx-sparc.c:440 +#, c-format +msgid "invalid relocation type %d" +msgstr "недопустимый тип перемещения %d" + +#: elfxx-sparc.c:2976 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: вероятно, компиляция без -fPIC?" + +#: i386linux.c:455 m68klinux.c:459 sparclinux.c:453 +#, c-format +msgid "Output file requires shared library `%s'\n" +msgstr "Для выходного файла требуется динамическая библиотека `%s'\n" + +#: i386linux.c:463 m68klinux.c:467 sparclinux.c:461 +#, c-format +msgid "Output file requires shared library `%s.so.%s'\n" +msgstr "Для выходного файла требуется динамическая библиотека `%s.so.%s'\n" + +#: i386linux.c:652 i386linux.c:702 m68klinux.c:659 m68klinux.c:707 +#: sparclinux.c:651 sparclinux.c:701 +#, c-format +msgid "Symbol %s not defined for fixups\n" +msgstr "Символ %s не определён для местоположений\n" + +#: i386linux.c:726 m68klinux.c:731 sparclinux.c:725 +msgid "Warning: fixup count mismatch\n" +msgstr "Предупреждение: не совпадает счётчик местоположения\n" + +#: ieee.c:159 +#, c-format +msgid "%s: string too long (%d chars, max 65535)" +msgstr "%s: слишком длинная строка (%d символов, макс. 65535)" + +#: ieee.c:286 +#, c-format +msgid "%s: unrecognized symbol `%s' flags 0x%x" +msgstr "%s: нераспознанные флаги символа `%s' (0x%x)" + +#: ieee.c:788 +msgid "%B: unimplemented ATI record %u for symbol %u" +msgstr "%B: нереализованная ATI-запись %u для символа %u" + +#: ieee.c:812 +msgid "%B: unexpected ATN type %d in external part" +msgstr "%B: неожиданный ATN-тип %d во внешней части" + +#: ieee.c:834 +msgid "%B: unexpected type after ATN" +msgstr "%B: неожиданный тип после ATN" + +#: ihex.c:230 +msgid "%B:%d: unexpected character `%s' in Intel Hex file" +msgstr "%B:%d: неожиданный символ `%s' в Intel Hex файле" + +#: ihex.c:337 +msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" +msgstr "%B:%u: неправильная контрольная сумма в Intel Hex файле (должна быть %u, получена %u)" + +#: ihex.c:392 +msgid "%B:%u: bad extended address record length in Intel Hex file" +msgstr "%B:%u: неправильная длина записи расширенного адреса в Intel Hex файле" + +#: ihex.c:409 +msgid "%B:%u: bad extended start address length in Intel Hex file" +msgstr "%B:%u: неправильная длина расширенного начального адреса в Intel Hex файле" + +#: ihex.c:426 +msgid "%B:%u: bad extended linear address record length in Intel Hex file" +msgstr "%B:%u: неправильная длина записи расширенного прямолинейного адреса в Intel Hex файле" + +#: ihex.c:443 +msgid "%B:%u: bad extended linear start address length in Intel Hex file" +msgstr "%B:%u: неправильная длина расширенного прямолинейного начального адреса в Intel Hex файле" + +#: ihex.c:460 +msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" +msgstr "%B:%u: нераспознанный ihex-тип %u в Intel Hex файле" + +#: ihex.c:579 +msgid "%B: internal error in ihex_read_section" +msgstr "%B: внутренняя ошибка в ihex_read_section" + +#: ihex.c:613 +msgid "%B: bad section length in ihex_read_section" +msgstr "%B: неправильная длина раздела в ihex_read_section" + +#: ihex.c:825 +#, c-format +msgid "%s: address 0x%s out of range for Intel Hex file" +msgstr "%s: адрес 0x%s вне диапазона для Intel Hex файла" + +#: libbfd.c:1008 +#, c-format +msgid "Deprecated %s called at %s line %d in %s\n" +msgstr "Вызван нерекомендуемый %s рядом с %s в строке %d в %s\n" + +#: libbfd.c:1011 +#, c-format +msgid "Deprecated %s called\n" +msgstr "Вызван нерекомендуемый %s\n" + +#: linker.c:1874 +msgid "%B: indirect symbol `%s' to `%s' is a loop" +msgstr "%B: косвенный символ `%s' к `%s' создаёт зацикливание" + +#: linker.c:2740 +#, c-format +msgid "Attempt to do relocatable link with %s input and %s output" +msgstr "Попытка сделать перемещаемую ссылку с входом %s и выходом %s" + +#: linker.c:3047 +msgid "%B: warning: ignoring duplicate section `%A'\n" +msgstr "%B: предупреждение: игнорируется повторяющийся раздел `%A'\n" + +#: linker.c:3061 +msgid "%B: warning: duplicate section `%A' has different size\n" +msgstr "%B: предупреждение: повторяющийся раздел `%A' имеет другой размер\n" + +#: merge.c:828 +#, c-format +msgid "%s: access beyond end of merged section (%ld)" +msgstr "%s: доступ за конец объединённого раздела (%ld)" + +#: mmo.c:456 +#, c-format +msgid "%s: No core to allocate section name %s\n" +msgstr "%s: Нет основания для выделения имени раздела %s\n" + +#: mmo.c:531 +#, c-format +msgid "%s: No core to allocate a symbol %d bytes long\n" +msgstr "%s: Нет основания для выделения символьных %d байт\n" + +#: mmo.c:1187 +#, c-format +msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" +msgstr "%s: недопустимый mmo-файл: инициализационное значение для $255 не равно `Main'\n" + +#: mmo.c:1332 +#, c-format +msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" +msgstr "%s: неподдерживаемая последовательность широких символов 0x%02X 0x%02X после имени символа, начинающегося с `%s'\n" + +#: mmo.c:1566 +#, c-format +msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" +msgstr "%s: недопустимый mmo-файл: неподдерживаемый lopcode `%d'\n" + +#: mmo.c:1576 +#, c-format +msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" +msgstr "%s: недопустимый mmo-файл: ожидалось YZ = 1, получено YZ = %d для lop_quote\n" + +#: mmo.c:1612 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" +msgstr "%s: недопустимый mmo-файл: ожидалось z = 1 или z = 2, получено z = %d для lop_loc\n" + +#: mmo.c:1658 +#, c-format +msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" +msgstr "%s: недопустимый mmo-файл: ожидалось z = 1 или z = 2, получено z = %d для lop_fixo\n" + +#: mmo.c:1697 +#, c-format +msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" +msgstr "%s: недопустимый mmo-файл: ожидалось y = 0, получено y = %d для lop_fixrx\n" + +#: mmo.c:1706 +#, c-format +msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" +msgstr "%s: недопустимый mmo-файл: ожидалось z = 16 или z = 24, получено z = %d для lop_fixrx\n" + +#: mmo.c:1729 +#, c-format +msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" +msgstr "%s: недопустимый mmo-файл: начальный байт слова операнда должен быть равен 0 или 1, получено %d для lop_fixrx\n" + +#: mmo.c:1752 +#, c-format +msgid "%s: cannot allocate file name for file number %d, %d bytes\n" +msgstr "%s: невозможно выделить место для имени файла к файлу с номером %d, %d байт\n" + +#: mmo.c:1772 +#, c-format +msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" +msgstr "%s: недопустимый mmo-файл: номер файла %d `%s', был уже введён как `%s'\n" + +#: mmo.c:1785 +#, c-format +msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" +msgstr "%s: недопустимый mmo-файл: имя файла для номера %d не указано перед использованием\n" + +#: mmo.c:1892 +#, c-format +msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" +msgstr "%s: недопустимый mmo-файл: поля y и z в lop_stab не равны нулю, y: %d, z: %d\n" + +#: mmo.c:1928 +#, c-format +msgid "%s: invalid mmo file: lop_end not last item in file\n" +msgstr "%s: недопустимый mmo-файл: lop_end не последний элемент в файле\n" + +#: mmo.c:1941 +#, c-format +msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" +msgstr "%s: недопустимый mmo-файл: YZ в lop_end (%ld) не равно числу тетрад в указанной ранее lop_stab (%ld)\n" + +#: mmo.c:2651 +#, c-format +msgid "%s: invalid symbol table: duplicate symbol `%s'\n" +msgstr "%s: ошибка в таблице символов: повторяющийся символ `%s'\n" + +#: mmo.c:2894 +#, c-format +msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" +msgstr "%s: Неверное определение символа: `Main' установлена в %s, а не в начальный адрес %s\n" + +#: mmo.c:2986 +#, c-format +msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" +msgstr "%s: предупреждение: таблица символов слишком большая для mmo, больше чем 65535 32-битных слов: %d. Будет выделена только `Main'.\n" + +#: mmo.c:3031 +#, c-format +msgid "%s: internal error, symbol table changed size from %d to %d words\n" +msgstr "%s: внутренняя ошибка, у таблицы символов изменился размер с %d слов до %d\n" + +#: mmo.c:3083 +#, c-format +msgid "%s: internal error, internal register section %s had contents\n" +msgstr "%s: внутренняя ошибка, внутренний раздел регистров %s содержит данные\n" + +#: mmo.c:3134 +#, c-format +msgid "%s: no initialized registers; section length 0\n" +msgstr "%s:нет инициализированных регистров; длина раздела равна 0\n" + +#: mmo.c:3140 +#, c-format +msgid "%s: too many initialized registers; section length %ld\n" +msgstr "%s: слишком много инициализированных регистров; длина раздела равна %ld\n" + +#: mmo.c:3145 +#, c-format +msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" +msgstr "%s: недопустимый начальный адрес для инициализированных регистров длины %ld: 0x%lx%08lx\n" + +#: oasys.c:881 +#, c-format +msgid "%s: can not represent section `%s' in oasys" +msgstr "%s: невозможно представить раздел `%s' в oasys" + +#: osf-core.c:139 +#, c-format +msgid "Unhandled OSF/1 core file section type %d\n" +msgstr "Необработанный файл ядра OSF/1 раздела с типом %d\n" + +#: pe-mips.c:607 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "%B: `ld -r' не поддерживается с объектами PE MIPS\n" + +#. OK, at this point the following variables are set up: +#. 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:723 +msgid "%B: unimplemented %s\n" +msgstr "%B: не реализовано %s\n" + +#: pe-mips.c:749 +msgid "%B: jump too far away\n" +msgstr "%B: точка перехода слишком далеко\n" + +#: pe-mips.c:775 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: неверная pair/reflo после refhi\n" + +#. XXX code yet to be written. +#: peicode.h:759 +msgid "%B: Unhandled import type; %x" +msgstr "%B: Необработанный тип импорта; %x" + +#: peicode.h:764 +msgid "%B: Unrecognised import type; %x" +msgstr "%B: Нераспознанный тип импорта; %x" + +#: peicode.h:778 +msgid "%B: Unrecognised import name type; %x" +msgstr "%B: Нераспознанный именной тип импорта; %x" + +#: peicode.h:1161 +msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" +msgstr "%B: Нераспознанный машинный тип (0x%x) в архиве Import Library Format" + +#: peicode.h:1173 +msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" +msgstr "%B: Распознан, но не обработан машинный тип (0x%x) в архиве Import Library Format" + +#: peicode.h:1191 +msgid "%B: size field is zero in Import Library Format header" +msgstr "%B: размер поля равен нулю в заголовке Import Library Format" + +#: peicode.h:1222 +msgid "%B: string not null terminated in ILF object file." +msgstr "%B: строка не заканчивается нулём в объектном файле ILF." + +#: ppcboot.c:414 +#, c-format +msgid "" +"\n" +"ppcboot header:\n" +msgstr "" +"\n" +"заголовок ppcboot:\n" + +#: ppcboot.c:415 +#, c-format +msgid "Entry offset = 0x%.8lx (%ld)\n" +msgstr "Начальное смещение = 0x%.8lx (%ld)\n" + +#: ppcboot.c:417 +#, c-format +msgid "Length = 0x%.8lx (%ld)\n" +msgstr "Длина = 0x%.8lx (%ld)\n" + +#: ppcboot.c:421 +#, c-format +msgid "Flag field = 0x%.2x\n" +msgstr "Поле флагов = 0x%.2x\n" + +#: ppcboot.c:427 +#, c-format +msgid "Partition name = \"%s\"\n" +msgstr "Имя раздела = \"%s\"\n" + +#: ppcboot.c:446 +#, c-format +msgid "" +"\n" +"Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "" +"\n" +"Начало раздела[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:452 +#, c-format +msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" +msgstr "Конец раздела[%d] = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" + +#: ppcboot.c:458 +#, c-format +msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" +msgstr "Сектор раздела[%d] = 0x%.8lx (%ld)\n" + +#: ppcboot.c:460 +#, c-format +msgid "Partition[%d] length = 0x%.8lx (%ld)\n" +msgstr "Длина раздела[%d] = 0x%.8lx (%ld)\n" + +#: som.c:5137 +#, c-format +msgid "" +"\n" +"Exec Auxiliary Header\n" +msgstr "" +"\n" +"Вспомогательный заголовок Exec\n" + +#: som.c:5440 +msgid "som_sizeof_headers unimplemented" +msgstr "som_sizeof_headers не реализован" + +#: srec.c:261 +msgid "%B:%d: Unexpected character `%s' in S-record file\n" +msgstr "%B:%d: Неожиданный символ `%s' в файле S-record\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: Неверная контрольная сумма в файле S-record\n" + +#: stabs.c:279 +msgid "%B(%A+0x%lx): Stabs entry has invalid string index." +msgstr "%B(%A+0x%lx): Элемент Stabs имеет недопустимый индекс строки." + +#: syms.c:1067 +msgid "Unsupported .stab relocation" +msgstr "Неподдерживаемое перемещение .stab" + +#: vms-gsd.c:338 +#, c-format +msgid "bfd_make_section (%s) failed" +msgstr "bfd_make_section (%s) завершилась неудачно" + +#: vms-gsd.c:353 +#, c-format +msgid "bfd_set_section_flags (%s, %x) failed" +msgstr "bfd_set_section_flags (%s, %x) завершилась неудачно" + +#: vms-gsd.c:388 +#, c-format +msgid "Size mismatch section %s=%lx, %s=%lx" +msgstr "Несовпадение размера раздела %s=%lx, %s=%lx" + +#: vms-gsd.c:679 +#, c-format +msgid "unknown gsd/egsd subtype %d" +msgstr "неизвестный подтип gsd/egsd: %d" + +#: vms-hdr.c:328 +msgid "Object module NOT error-free !\n" +msgstr "Объектный модуль НЕ error-free !\n" + +#: vms-misc.c:474 +#, c-format +msgid "Stack overflow (%d) in _bfd_vms_push" +msgstr "Переполнение стека (%d) в _bfd_vms_push" + +#: vms-misc.c:489 +msgid "Stack underflow in _bfd_vms_pop" +msgstr "Выход за нижнюю границу стека в _bfd_vms_pop" + +#: vms-misc.c:808 +msgid "_bfd_vms_output_counted called with zero bytes" +msgstr "Вызов _bfd_vms_output_counted с нулевым количеством байт" + +#: vms-misc.c:813 +msgid "_bfd_vms_output_counted called with too many bytes" +msgstr "Вызов _bfd_vms_output_counted со слишком большим количеством байт" + +#: vms-misc.c:931 +#, c-format +msgid "Symbol %s replaced by %s\n" +msgstr "Символ %s заменён на %s\n" + +#: vms-misc.c:990 +#, c-format +msgid "failed to enter %s" +msgstr "не удалось войти %s" + +#: vms-tir.c:57 +msgid "No Mem !" +msgstr "Нет Mem !" + +#: vms-tir.c:300 +#, c-format +msgid "bad section index in %s" +msgstr "неверный индекс раздела в %s" + +#: vms-tir.c:313 +#, c-format +msgid "unsupported STA cmd %s" +msgstr "неподдерживаемый STA cmd %s" + +#: vms-tir.c:318 vms-tir.c:1120 +#, c-format +msgid "reserved STA cmd %d" +msgstr "зарезервированный STA cmd %d" + +#: vms-tir.c:410 vms-tir.c:432 +#, c-format +msgid "%s: no symbol \"%s\"" +msgstr "%s: нет символа \"%s\"" + +#. Unsigned shift. +#. Rotate. +#. Redefine symbol to current location. +#. Define a literal. +#: vms-tir.c:497 vms-tir.c:606 vms-tir.c:704 vms-tir.c:721 vms-tir.c:728 +#: vms-tir.c:736 vms-tir.c:1440 +#, c-format +msgid "%s: not supported" +msgstr "%s: не поддерживается" + +#: vms-tir.c:502 vms-tir.c:1297 +#, c-format +msgid "%s: not implemented" +msgstr "%s: не реализовано" + +#: vms-tir.c:506 vms-tir.c:1301 +#, c-format +msgid "reserved STO cmd %d" +msgstr "зарезервированный STO cmd %d" + +#: vms-tir.c:621 vms-tir.c:1445 +#, c-format +msgid "reserved OPR cmd %d" +msgstr "зарезервированный OPR cmd %d" + +#: vms-tir.c:681 vms-tir.c:1509 +#, c-format +msgid "reserved CTL cmd %d" +msgstr "зарезервированный CTL cmd %d" + +#. stack byte from image +#. arg: none. +#: vms-tir.c:1028 +msgid "stack-from-image not implemented" +msgstr "stack-from-image не реализован" + +#: vms-tir.c:1046 +msgid "stack-entry-mask not fully implemented" +msgstr "stack-entry-mask реализован не полностью" + +#. compare procedure argument +#. arg: cs symbol name +#. by argument index +#. da argument descriptor +#. +#. compare argument descriptor with symbol argument (ARG$V_PASSMECH) +#. and stack TRUE (args match) or FALSE (args dont match) value. +#: vms-tir.c:1060 +msgid "PASSMECH not fully implemented" +msgstr "PASSMECH реализован не полностью" + +#: vms-tir.c:1079 +msgid "stack-local-symbol not fully implemented" +msgstr "stack-local-symbol реализован не полностью" + +#: vms-tir.c:1092 +msgid "stack-literal not fully implemented" +msgstr "stack-literal реализован не полностью" + +#: vms-tir.c:1113 +msgid "stack-local-symbol-entry-point-mask not fully implemented" +msgstr "stack-local-symbol-entry-point-mask реализован не полностью" + +#: vms-tir.c:1387 vms-tir.c:1399 vms-tir.c:1411 vms-tir.c:1423 vms-tir.c:1488 +#: vms-tir.c:1496 vms-tir.c:1504 +#, c-format +msgid "%s: not fully implemented" +msgstr "%s: реализовано не полностью" + +#: vms-tir.c:1562 +#, c-format +msgid "obj code %d not found" +msgstr "объектный код %d не найден" + +#: vms-tir.c:1870 +#, c-format +msgid "SEC_RELOC with no relocs in section %s" +msgstr "SEC_RELOC без перемещений в разделе %s" + +#: vms-tir.c:2152 +#, c-format +msgid "Unhandled relocation %s" +msgstr "Необработанное перемещение %s" + +#: xcofflink.c:566 +#, c-format +msgid "%s: XCOFF shared object when not producing XCOFF output" +msgstr "%s: разделяемый объект XCOFF без создания вывода XCOFF" + +#: xcofflink.c:587 +#, c-format +msgid "%s: dynamic object with no .loader section" +msgstr "%s: динамический объект без раздела .loader" + +#: xcofflink.c:1150 +msgid "%B: `%s' has line numbers but no enclosing section" +msgstr "%B: `%s' содержит номера строк, но в обрамляющем разделе" + +#: xcofflink.c:1202 +msgid "%B: class %d symbol `%s' has no aux entries" +msgstr "%B: класс %d символа `%s' не имеет элементов aux" + +#: xcofflink.c:1225 +msgid "%B: symbol `%s' has unrecognized csect type %d" +msgstr "%B: символ `%s' имеет нераспознанный тип csect: %d" + +#: xcofflink.c:1237 +msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" +msgstr "%B: неверный символ XTY_ER `%s': класс %d scnum %d scnlen %d" + +#: xcofflink.c:1273 +msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" +msgstr "%B: символ XMC_TC0 `%s' является классом %d scnlen %d" + +#: xcofflink.c:1419 +msgid "%B: csect `%s' not in enclosing section" +msgstr "%B: csect `%s' не в обрамляющем разделе" + +#: xcofflink.c:1526 +msgid "%B: misplaced XTY_LD `%s'" +msgstr "%B: неправильно расположенный XTY_LD `%s'" + +#: xcofflink.c:1842 +msgid "%B: reloc %s:%d not in csect" +msgstr "%B: перемещение %s:%d не в csect" + +#: xcofflink.c:2640 +#, c-format +msgid "%s: no such symbol" +msgstr "%s: нет такого символа" + +#: xcofflink.c:2869 +#, c-format +msgid "warning: attempt to export undefined symbol `%s'" +msgstr "предупреждение: попытка экспортировать неопределённый символ `%s'" + +#: xcofflink.c:3036 +msgid "error: undefined symbol __rtinit" +msgstr "ошибка: неопределённый символ __rtinit" + +#: xcofflink.c:3656 +#, c-format +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "переполнение TOC: 0x%lx > 0x10000; попробуйте скомпилировать с -mminimal-toc" + +#: xcofflink.c:4492 +msgid "%B: loader reloc in unrecognized section `%A'" +msgstr "%B: перемещение загрузчика в нераспознанном разделе `%A'" + +#: xcofflink.c:4513 +msgid "%B: `%s' in loader reloc but not loader sym" +msgstr "%B: `%s' в перемещении загрузчика, но не символе загрузчика" + +#: xcofflink.c:4528 +msgid "%B: loader reloc in read-only section %A" +msgstr "%B: перемещение загрузчика в разделе %A, доступном только для чтения" + +#: xcofflink.c:4937 xcofflink.c:4999 xcofflink.c:5294 +#, c-format +msgid "%s: loader reloc in unrecognized section `%s'" +msgstr "%s: перемещение загрузчика в нераспознанном разделе `%s'" + +#: xcofflink.c:5305 +#, c-format +msgid "%s: `%s' in loader reloc but not loader sym" +msgstr "%s: `%s' в перемещении загрузчика, но не символе загрузчика" + +#: elf32-ia64.c:1037 elf64-ia64.c:1037 +msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." +msgstr "%B: Невозможно ослабить br по адресу 0x%lx в разделе `%A'. Используйте brl или косвенный переход." + +#: elf32-ia64.c:2742 elf64-ia64.c:2742 +msgid "@pltoff reloc against local symbol" +msgstr "перемещение @pltoff для локального символа" + +#: elf32-ia64.c:4317 elf64-ia64.c:4317 +#, c-format +msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" +msgstr "%s: переполнение короткого сегмента данных (0x%lx >= 0x400000)" + +#: elf32-ia64.c:4328 elf64-ia64.c:4328 +#, c-format +msgid "%s: __gp does not cover short data segment" +msgstr "%s: __gp не покрывает короткий сегмент данных" + +#: elf32-ia64.c:4598 elf64-ia64.c:4598 +msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" +msgstr "%B: не-pic код с перемещением imm для динамического символа `%s'" + +#: elf32-ia64.c:4665 elf64-ia64.c:4665 +msgid "%B: @gprel relocation against dynamic symbol %s" +msgstr "%B: перемещение @gprel для динамического символа %s" + +#: elf32-ia64.c:4728 elf64-ia64.c:4728 +msgid "%B: linking non-pic code in a position independent executable" +msgstr "%B: компоновка не-pic кода в позиционно-независимый исполняемый" + +#: elf32-ia64.c:4865 elf64-ia64.c:4865 +msgid "%B: @internal branch to dynamic symbol %s" +msgstr "%B: переход @internal на динамический символ %s" + +#: elf32-ia64.c:4867 elf64-ia64.c:4867 +msgid "%B: speculation fixup to dynamic symbol %s" +msgstr "%B: догадка местоположения динамического символа %s" + +#: elf32-ia64.c:4869 elf64-ia64.c:4869 +msgid "%B: @pcrel relocation against dynamic symbol %s" +msgstr "%B: перемещение @pcrel для динамического символа %s" + +#: elf32-ia64.c:5066 elf64-ia64.c:5066 +msgid "unsupported reloc" +msgstr "неподдерживаемое перемещение" + +#: elf32-ia64.c:5104 elf64-ia64.c:5104 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: отсутствует TLS-раздел для перемещения %s для `%s' по адресу 0x%lx в разделе `%A'." + +#: elf32-ia64.c:5119 elf64-ia64.c:5119 +msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." +msgstr "%B: Невозможно ослабить br (%s) до `%s' по адресу 0x%lx в разделе `%A' с размером 0x%lx (> 0x1000000)." + +#: elf32-ia64.c:5375 elf64-ia64.c:5375 +msgid "%B: linking trap-on-NULL-dereference with non-trapping files" +msgstr "%B: компоновка trap-on-NULL-dereference с не-trapping файлами" + +#: elf32-ia64.c:5384 elf64-ia64.c:5384 +msgid "%B: linking big-endian files with little-endian files" +msgstr "%B: компоновка файлов с прямым порядком байт с файлами с обратным порядком байт" + +#: elf32-ia64.c:5393 elf64-ia64.c:5393 +msgid "%B: linking 64-bit files with 32-bit files" +msgstr "%B: компоновка 64-битных файлов с 32-битными файлами" + +#: elf32-ia64.c:5402 elf64-ia64.c:5402 +msgid "%B: linking constant-gp files with non-constant-gp files" +msgstr "%B: компоновка constant-gp файлов с не-constant-gp файлами" + +#: elf32-ia64.c:5412 elf64-ia64.c:5412 +msgid "%B: linking auto-pic files with non-auto-pic files" +msgstr "%B: компоновка auto-pic файлов с не-auto-pic файлами" + +#: peigen.c:1000 pepigen.c:1000 pex64igen.c:1000 +#, c-format +msgid "%s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: переполнение номеров строк: 0x%lx > 0xffff" + +#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 +msgid "Export Directory [.edata (or where ever we found it)]" +msgstr "Каталог экспорта [.edata (или где он нашёлся)]" + +#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 +msgid "Import Directory [parts of .idata]" +msgstr "Каталог импорта [часть .idata]" + +#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 +msgid "Resource Directory [.rsrc]" +msgstr "Каталог ресурсов [.rsrc]" + +#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 +msgid "Exception Directory [.pdata]" +msgstr "Каталог исключений [.pdata]" + +#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 +msgid "Security Directory" +msgstr "Каталог безопасности" + +#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 +msgid "Base Relocation Directory [.reloc]" +msgstr "Каталог базового перемещения [.reloc]" + +#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 +msgid "Debug Directory" +msgstr "Каталог отладки" + +#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 +msgid "Description Directory" +msgstr "Каталог описаний" + +#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 +msgid "Special Directory" +msgstr "Специальный каталог" + +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 +msgid "Thread Storage Directory [.tls]" +msgstr "Каталог хранилища нитей [.tls]" + +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 +msgid "Load Configuration Directory" +msgstr "Каталог загрузки конфигурации" + +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 +msgid "Bound Import Directory" +msgstr "Каталог обязательного импорта" + +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 +msgid "Import Address Table Directory" +msgstr "Каталог таблицы импорта адресов" + +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +msgid "Delay Import Directory" +msgstr "Каталог отложенного импорта" + +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 +msgid "CLR Runtime Header" +msgstr "Заголовок времени выполнения CLR" + +#: peigen.c:1042 pepigen.c:1042 pex64igen.c:1042 +msgid "Reserved" +msgstr "Зарезервировано" + +#: peigen.c:1102 pepigen.c:1102 pex64igen.c:1102 +#, c-format +msgid "" +"\n" +"There is an import table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Существует таблица импорта, но не найден раздел, в котором она содержится\n" + +#: peigen.c:1107 pepigen.c:1107 pex64igen.c:1107 +#, c-format +msgid "" +"\n" +"There is an import table in %s at 0x%lx\n" +msgstr "" +"\n" +"В %s имеется таблица импорта по адресу 0x%lx\n" + +#: peigen.c:1150 pepigen.c:1150 pex64igen.c:1150 +#, c-format +msgid "" +"\n" +"Function descriptor located at the start address: %04lx\n" +msgstr "" +"\n" +"Начальный адрес описателя функции: %04lx\n" + +#: peigen.c:1153 pepigen.c:1153 pex64igen.c:1153 +#, c-format +msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" +msgstr "\tcode-base %08lx toc (загружаемый/реальный) %08lx/%08lx\n" + +#: peigen.c:1161 pepigen.c:1161 pex64igen.c:1161 +#, c-format +msgid "" +"\n" +"No reldata section! Function descriptor not decoded.\n" +msgstr "" +"\n" +"Нет раздела reldata! Описатель функции не расшифрован.\n" + +#: peigen.c:1166 pepigen.c:1166 pex64igen.c:1166 +#, c-format +msgid "" +"\n" +"The Import Tables (interpreted %s section contents)\n" +msgstr "" +"\n" +"Таблицы импорта (обработан раздел %s)\n" + +#: peigen.c:1169 pepigen.c:1169 pex64igen.c:1169 +#, c-format +msgid "" +" vma: Hint Time Forward DLL First\n" +" Table Stamp Chain Name Thunk\n" +msgstr "" +" vma: Таблица Отметка Цепочка Имя Первый\n" +" Указаний Времени Пересылки DLL Шлюз\n" + +#: peigen.c:1217 pepigen.c:1217 pex64igen.c:1217 +#, c-format +msgid "" +"\n" +"\tDLL Name: %s\n" +msgstr "" +"\n" +"\tИмя DLL: %s\n" + +#: peigen.c:1228 pepigen.c:1228 pex64igen.c:1228 +#, c-format +msgid "\tvma: Hint/Ord Member-Name Bound-To\n" +msgstr "\tvma: Hint/Ord Имя-элемента Привязан-к\n" + +#: peigen.c:1253 pepigen.c:1253 pex64igen.c:1253 +#, c-format +msgid "" +"\n" +"There is a first thunk, but the section containing it could not be found\n" +msgstr "" +"\n" +"Существует первый шлюз, но не найден раздел, в котором он содержится\n" + +#: peigen.c:1418 pepigen.c:1418 pex64igen.c:1418 +#, c-format +msgid "" +"\n" +"There is an export table, but the section containing it could not be found\n" +msgstr "" +"\n" +"Существует таблица экспорта, но не найден раздел, в котором она содержится\n" + +#: peigen.c:1427 pepigen.c:1427 pex64igen.c:1427 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but it does not fit into that section\n" +msgstr "" +"\n" +"Существует таблица экспорта в %s, но она не помещается в этот раздел\n" + +#: peigen.c:1433 pepigen.c:1433 pex64igen.c:1433 +#, c-format +msgid "" +"\n" +"There is an export table in %s at 0x%lx\n" +msgstr "" +"\n" +"Существует таблица экспорта в %s по адресу 0x%lx\n" + +#: peigen.c:1461 pepigen.c:1461 pex64igen.c:1461 +#, c-format +msgid "" +"\n" +"The Export Tables (interpreted %s section contents)\n" +"\n" +msgstr "" +"\n" +"Таблицы экспорта (обработан раздел %s)\n" +"\n" + +#: peigen.c:1465 pepigen.c:1465 pex64igen.c:1465 +#, c-format +msgid "Export Flags \t\t\t%lx\n" +msgstr "Флаги экспорта \t\t\t%lx\n" + +#: peigen.c:1468 pepigen.c:1468 pex64igen.c:1468 +#, c-format +msgid "Time/Date stamp \t\t%lx\n" +msgstr "Метка времени/даты \t\t%lx\n" + +#: peigen.c:1471 pepigen.c:1471 pex64igen.c:1471 +#, c-format +msgid "Major/Minor \t\t\t%d/%d\n" +msgstr "Старший/Младший \t\t\t%d/%d\n" + +#: peigen.c:1474 pepigen.c:1474 pex64igen.c:1474 +#, c-format +msgid "Name \t\t\t\t" +msgstr "Имя \t\t\t\t" + +#: peigen.c:1480 pepigen.c:1480 pex64igen.c:1480 +#, c-format +msgid "Ordinal Base \t\t\t%ld\n" +msgstr "Начальный порядковый номер \t\t\t%ld\n" + +#: peigen.c:1483 pepigen.c:1483 pex64igen.c:1483 +#, c-format +msgid "Number in:\n" +msgstr "Номер в:\n" + +#: peigen.c:1486 pepigen.c:1486 pex64igen.c:1486 +#, c-format +msgid "\tExport Address Table \t\t%08lx\n" +msgstr "\tТаблица экспортируемых адресов \t\t%08lx\n" + +#: peigen.c:1490 pepigen.c:1490 pex64igen.c:1490 +#, c-format +msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" +msgstr "\tТаблица [указателей имён/порядковых номеров]\t%08lx\n" + +#: peigen.c:1493 pepigen.c:1493 pex64igen.c:1493 +#, c-format +msgid "Table Addresses\n" +msgstr "Таблица адресов\n" + +#: peigen.c:1496 pepigen.c:1496 pex64igen.c:1496 +#, c-format +msgid "\tExport Address Table \t\t" +msgstr "\tТаблица экспортируемых адресов \t\t" + +#: peigen.c:1501 pepigen.c:1501 pex64igen.c:1501 +#, c-format +msgid "\tName Pointer Table \t\t" +msgstr "\tТаблица указателей имён \t\t" + +#: peigen.c:1506 pepigen.c:1506 pex64igen.c:1506 +#, c-format +msgid "\tOrdinal Table \t\t\t" +msgstr "\tТаблица порядковых номеров \t\t\t" + +#: peigen.c:1520 pepigen.c:1520 pex64igen.c:1520 +#, c-format +msgid "" +"\n" +"Export Address Table -- Ordinal Base %ld\n" +msgstr "" +"\n" +"Таблица экспортируемых адресов -- Начальный порядковый номер %ld\n" + +#: peigen.c:1539 pepigen.c:1539 pex64igen.c:1539 +msgid "Forwarder RVA" +msgstr "Переадресуемый RVA" + +#: peigen.c:1550 pepigen.c:1550 pex64igen.c:1550 +msgid "Export RVA" +msgstr "Экспортируемый RVA" + +#: peigen.c:1557 pepigen.c:1557 pex64igen.c:1557 +#, c-format +msgid "" +"\n" +"[Ordinal/Name Pointer] Table\n" +msgstr "" +"\n" +"Таблица [порядковых номеров/указателей имён]\n" + +#: peigen.c:1617 peigen.c:1796 pepigen.c:1617 pepigen.c:1796 pex64igen.c:1617 +#: pex64igen.c:1796 +#, c-format +msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" +msgstr "Внимание, размер раздела .pdata (%ld) не кратен %d\n" + +#: peigen.c:1621 peigen.c:1800 pepigen.c:1621 pepigen.c:1800 pex64igen.c:1621 +#: pex64igen.c:1800 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" +msgstr "" +"\n" +"Таблица функций (обработан раздел .pdata)\n" + +#: peigen.c:1624 pepigen.c:1624 pex64igen.c:1624 +#, c-format +msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" +msgstr " vma:\t\t\tНачальный адрес Конечный адрес Раскрывающая Информация\n" + +#: peigen.c:1626 pepigen.c:1626 pex64igen.c:1626 +#, c-format +msgid "" +" vma:\t\tBegin End EH EH PrologEnd Exception\n" +" \t\tAddress Address Handler Data Address Mask\n" +msgstr "" +" vma:\t\tНачальный Конечный EH EH Адрес Маска\n" +" \t\tАдрес Адрес Обработчик Данные КонцаПролога Исключения\n" + +#: peigen.c:1696 pepigen.c:1696 pex64igen.c:1696 +#, c-format +msgid " Register save millicode" +msgstr " Милликод сохранения регистра" + +#: peigen.c:1699 pepigen.c:1699 pex64igen.c:1699 +#, c-format +msgid " Register restore millicode" +msgstr " Милликод восстановления регистра" + +#: peigen.c:1702 pepigen.c:1702 pex64igen.c:1702 +#, c-format +msgid " Glue code sequence" +msgstr " Последовательность связующего кода" + +#: peigen.c:1802 pepigen.c:1802 pex64igen.c:1802 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" +msgstr "" +" vma:\t\tНачальный Длина Длина Флаги Обработчик EH\n" +" \t\tАдрес Пролога Функции 32b exc Исключений Данные\n" + +#: peigen.c:1933 pepigen.c:1933 pex64igen.c:1933 +#, c-format +msgid "" +"\n" +"\n" +"PE File Base Relocations (interpreted .reloc section contents)\n" +msgstr "" +"\n" +"\n" +"Начало перемещений в PE-файле (обработан раздел .reloc)\n" + +#: peigen.c:1963 pepigen.c:1963 pex64igen.c:1963 +#, c-format +msgid "" +"\n" +"Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" +msgstr "" +"\n" +"Виртуальный адрес: %08lx Размер блока %ld (0x%lx) Число местоположений %ld\n" + +#: peigen.c:1976 pepigen.c:1976 pex64igen.c:1976 +#, c-format +msgid "\treloc %4d offset %4x [%4lx] %s" +msgstr "\tперемещение %4d смещение %4x [%4lx] %s" + +#. The MS dumpbin program reportedly ands with 0xff0f before +#. printing the characteristics field. Not sure why. No reason to +#. emulate it here. +#: peigen.c:2015 pepigen.c:2015 pex64igen.c:2015 +#, c-format +msgid "" +"\n" +"Characteristics 0x%x\n" +msgstr "" +"\n" +"Характеристики 0x%x\n" + +#: peigen.c:2289 pepigen.c:2289 pex64igen.c:2289 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: невозможно заполнить DataDictionary[1], так как отсутствует .idata$2" + +#: peigen.c:2307 pepigen.c:2307 pex64igen.c:2307 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: невозможно заполнить DataDictionary[1], так как отсутствует .idata$4" + +#: peigen.c:2326 pepigen.c:2326 pex64igen.c:2326 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: невозможно заполнить DataDictionary[12], так как отсутствует .idata$5" + +#: peigen.c:2344 pepigen.c:2344 pex64igen.c:2344 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: невозможно заполнить DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)], так как отсутствует .idata$6" + +#: peigen.c:2364 pepigen.c:2364 pex64igen.c:2364 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: невозможно заполнить DataDictionary[9], так как отсутствует __tls_used" diff --git a/bfd/po/vi.gmo b/bfd/po/vi.gmo index f5683c6169d664882e9ee3553ecd6f256310e40a..a229a881d793e754346f4c5bb44f07bfd5f96fcb 100644 GIT binary patch literal 118338 zcmcGX2Yg*+{r_)R(z46m2TD3t>Cb2|VLaWDjB z4?zJDL<9v{G8Cc65)cs=EClW`%1K|`n z7aj`xU@^QD?gsCNgfwmq_dj z_k%~miEt)d2^EFQ;4Jtw+ym}dlSs^m2S7bf!ZLUzoCbdcaXK-qHjx+$8{q-vjFsiJf4H=S(;ZbrswT*1=NP3Y8C+z&+vZ zkSs|&3Y8Bp!5!c~{qw|PQ||@!{6HvsQ{nD#q2~(ElRZ!KJRk0gxi3J4=T^82yvOrV zI2`r!p1<;Z9V*;^^XeUsw{oy2l=&HOB&>ug2kl<}0;qhu5-Q)m233AG!h_-KaDTW% zeIjuf450j}fC}d_DEHf-!g&f*xIYGWhv)j|pNC4P8=?HU70TU5q1^d3RDS&l9ssv% zF#SWJ(y`R57eKkQ6z&OEK|Mdk^E{~V-2nH5-|~DKjzImASN{#FynUoGkvI*`fxYm4 zxE_`)v2t`1RQY)j9tn$e^U<&b{a!c@UI(Yar{Ng5%?kX6;~-g`SPrY;SE1_B+n&=;u=@W|m_z># zD1S$Nr=Z+vOePXt@FGYM6CXgudu6jdzZEJS z{{ZnKQQBha3*eckpNErRL#w6lr(iYe=inT8K+4=-0TtiJ;S~5EsC<~*X6@Z-co^!B z!;$a?sQ5n)$HGLr#s5e+5#7z9V~24DoR7K#%G@`g{Cf+Ifd{26pQ_+d zs9T`oaW$0t&p^5NA2=44o^0yna2D!wpwjPAuV1vr+@AzTq2B}*&rf^a4{5>@Z$XM= zVos;2FNfWzUxO-#OUVqy|9n^lZ-)y1-{E99jlxt0JD}7zK*i@La2)&qDqQ1m^cdIy zX<`yLLxtyGa5OCKF>^~{E$U0)aqwk050;!_`OypI-=$FL^aFS>{0Nn~6c)onVI!Ob z`=H#v2^Pa=VF2HOiqGCz+G@BGE`%3Ch4bf7;oiT``k$q+1oao8%E8lcGTffZrg+YP z6JRS;xGseX$J74#o3IA;erv6MrJ(Gc2NnK%;C}E0D0_c`2f$s{nYl4=8tO(k7oO+& zeOQfp=k>;=Q1$RScm#YAD*hk9*>Lm*OaBy9y50+wPVYmxUwW$bf2~mQ{Ww&5d;^xl zx1rK)(rM=YIw*73z?twVI2CSpx|N%mQ0cM?D*Z2jN5ebek?_w@;XCl7*3VW#*>8e} zz)QXQPPh;1*P-(H1E_LVdWN~P3{FRV7F5362Nj<;;S6~A$E=*MgeRcB6IQ@o&opz# z!`Z0Mh6>;Jpxoc);}*YhaDUV*;9{7C0elqBg|EUjaMW2A{)^!()Q>~u!?vHWbR7c~ zzA9J;*F%-_C*T6O*C!K+)$l~P0)87dz z4JW~upvu#TORO9(g0goLRQz9n#qh6iGTiS{<8e^wbq19E2ch!yJy;HBU1s6=D3rZ# z!9(F2@M^fz<(AK1fztm890~sp=fDH5F!xtLrOy>m@%#-`d$8}7R(_6$iq|<%<=|WJ zc=$e)yNj+e`7ZH8*J2urWE^jZhy|2?o8z5-{#@z+^8bU>-k@q84PqE1|IoB(H|JPFGFHD3QU zsPx_YOI8l6pvupuq3YEgQ11Q$9t`)r!NM~QR-o>KGJh}Zgs;H4u372ls@Zg?qp+LD{%9oK}HT@1a4fRz}@&5r-e*F{5y-BxNdvF{ajrwFb z3SJCX!u#L?xcAqron8fJqP`8zfxm|;XQOU4e^$W7s6Pi4o|mBV~M?MExD8 zd^qsy^eu2190pH-GT#b!gO@^?`?6QR1Qq{3L)DM%zG2)S?t{7%9t5kP+-ru1!%kQX zKL?M1cf)b;MK}`faJ#i{N5V4H%iw|VVps~l4wY}ef^v7n9p>&qQ2rhRl}}6I0Wb~a z-zPn9fn!iV2bI46^y=W7mj2Z+K)=KDT&Qr}0(XPYLizJ+sP^DpI2P`7r>UnwnLp06 z82xOC3*HD7pZnpy@Fl2peh*HA zd*5T`j)TKduZ9ZG8n_?)98|j84CUTNxHJ42+!ekGRUhAhyTB3mS~&=y@@X-g0Z)gA zz`LRH^#xcB{{a=g@^4u_w8K46p9&R^^P$3f2XyHP_eT9|D0Az_IsRJXS!Juk~;|{0daL zdjXcgKSQ}Y?g8WRa6i=Rpz7C!uo6BCkA@>2wDzVBD&H@LGvK38`SfqkDc`pCEDfii z|5Z2@{tBvIkNA$6KORm-eKtHA-VbH|A5ifg_mH&{i{LS+Z-IxvKY9-PuBHDNsQA}H zrRO?$06Y^O39p8#7mvYx;h*3Lxc$SX-VZ9?6QT068Yk5x%<24&fhcl4u>*V0hQk;K*j$|co4kA^L8k6&p`S6s^`SVOnn+u zeRvG2{Ota?)$ik=)Mvvg_z0X1cYMOy^JAdGzrm~TfXAbL11cS6KWXKv3(iG-J5;&- z3!Dvur!2isg3|vKl)by4+M(aUG#v4LOZU@ZE9!^gd^qZ9=F(sntb{K>m81Qhv3BGr zI2ZLwsPcRbRCs?3l^?r2Yx!2!I@ZN3b03|AO`3E8#NKH+cRZ zoQk^P$Cm%+K&c;rli@$0;&tRttQ}~EQeO#`e$PRf`v3-T@=r~_0nSBz7F2oL2uH&I zz(w%zpILgG0_#v;3j_EzoCJ6Oxs{^|I0ALrt51iAp}qmCTzn6zz5E?K3hwcu^&8bt z_Lf2EpA1z#z66hek3gmC@1fFX_%E#Asey9uWT<#u0e6E>!2{rnp6|j6)Vu%E%5eic z67`j^25y9bp8txv1Si3X@M}=z>6cLMZ}V%5|1_xhdJ*t zBjEn1C&2(72ls@Xa4&c!l=;iN{@1+vA-E6vKZd)*H=*+5-*7CfdCA&?weV2Xx4{|k z8Mp`B;brq@KhN==b3Ge9JD}3xbQr)V;XL?9I0{a9#q^g#m5X&y<@jni6Fv%+-v5D9 z;Qqh0e6NK&pzelB$F)%P!%-|A9We2w4vv zf_mFGES(OAO5X)g@ok3V;07r7ZiFfizlC$*E^k^rSOk}#J_#y*cfo_;D{v(I03HrU z{>jo~K0E^T3Mlu^@Vpr+ot}p-ouTZ%2bKQ^y=CQPDXc+#HJk%qhXEY@wuNIMl=&}0 z#rtPoz1yE{{8bH0(Z3AV!bjnJIN~p+zXD2q4pcmT0E^+9uwLf=YU&hJet!n;1i$Qg zJKP=hgHYw?88{jK9+toZ{$}-XAq-HT1m(`h;12Lgcp$vis~>;?>PNi(Z=v$%1J8Zl zF?EUOJkOPI56tz#Vepf17x-DvYv6Fyw|L&|`CTagzwgz*hh?b$3Ika3uBGcDsB-Zs zD0eo(J>j!(G<*e4fy4i9={g5WzYC6mm%#vj2ks4j19yh+LbF{T8VFIs>YmyAmoK--3I= zr@i`RxDV=gq0I06Pm`-g!JAO`z|-Nr|6+~?UJ6yuM*N@2Ig?;H>Z{>Q_$#P#vG4m< zPO9LMsMkZ4{~O@(@Nu{d?*DJoKLt)ieHmO0AA#rKMLo=9X~LC>)=tS zFM_k-lkgPykwlSe_cy@RsGoq%aBNXg;y8Fdd;tCoD!i9&Q{=+;2s{z>Yw!$Mxowe~ zk9`DIquyt`A~(OW8kV8H56*?}zy>&N`y$tVoC`_P#Bbm{__G}>90z}-$jLWnz+=(> zC9H#^cPvVr3D?0>;d@@49cJox;P=t*9&X{AwNp{zVboW`E8z({7bQC2-{5k1;x0vr z7I-)OG~9pJqC^wC4t@hBb}Mr2&FwIa@@?1-SL|MtNWzEVeQ@L+mR`Stvrvy6QRLD& z1=a4{0HyytoB?;;vnX*gTmYs1CR_;LfJ(2ads+OuJ)ePkK5p+Km#=+r4eAHrQaE~_ zB3G`?fU1Arf+OLZa0T3bUrWc6p~}VGumZjhRUVGnugJ;8ABAdX?}sXXAKAaimA4hJ z3iWw#Dtr#ATyB4W<>M-tLwzSa9gaP)$jz7C1iy)T&x49wJNg)u{rwLva`Tdlpvub) zFa`evPk;@FSUA59k3sz|RQ;KDXpt+o>tG}5KR}g(If1!zADn=C+r!MgDNyD7Dp(J9 zI=slW|0hB9N4LV2@Q0oyBQ3t?LWT2wI3B(Yl}-m8VeX#*_53`qeh8{OybV>3k1w`# zzZ@i1i)2TmSq;kf~- zUHK7|xm}Jda{ccVsPHfK>Q6wW=S@)VzXlcViQ|kH!#>pSc&5i&Jbn#T|7Vm~xZ9xW z;}>Bkd<&{Rtt_?jd>34W`cLoxc-#aFXB$-eayeAF{HJHbM058xsPuakDqoJAWc)N7 zi~1F)eAs!i@mQ$(dJbF+Ux$<7%qbS{PN;Hv6_oy8-~xEW)FRj4bwZV^bKoTS6qNh# z!&+E2&C2~bQ0>;UQ0?O3(~A-pzzjSMz7Lfj>yI*Xe}ErDJ$r_gyKloesCS=f?NS|7 zzj!Nj`3==h%qcVbUGQ?$4@0HH@>y2D?t-efM;=||sCc{xPlD5{%$>`i`jH<)wJ($Bo4xg(x4~BQUxBi} zV1cz`H$au&w>)Pow0t=W%KWoX^&eJsP^G| zunX>0XXeg=itiKf6Yz+|=I+f<>HBvm|7IU={$Bu9zP=CDpA4_Ja#RUbUax>h!{2&! z&|vL$CzQXBK&9uz#v&(QoeGto*F)8p7ogJTpe5Emr(g%_??RRPu}iHT`#emcE?Q>o zK|4HD<{+YB;w7kh`jh3>9*kaL{w#xv&v{VceGw|XN1b5(TNWxDPr))cVx`5q7OGx; z1}dF?1CN}z0^9cN;o}Xmp^jq*w z)bDxqtxZ<{--OE7Q&(Gheitfy`y`7JYvJ**7e3)RtJ%`+>rnZ-Z;O@xEL6F94yt?| z(rW3@0GFV?7S_Xeq3X-Rl(nNbLY4C!+brA_Q03!JsCNHfQ0>C#b}Q#!fGU5xbQtTQ z{JjFMhOa`E=lN+X|DS}CQ=Whd*OZgZUI$e8Z-a-xVQVbBW1!miKB#c~6e=AL=`?q4 zfXe?}yG-tCg6f|)!ZtW9W9fDcR6gw4ZT3D1)z7>QFMucZm_L7n$D^)2#oW0TDt>$P zTKQTE)n0xY9s!?(N|(1_01wPs_>YEaM^{3*cRN)4w&^qdlc3W1PN;PF6I3}mJZI(S zWH=7>)llus<52D7f8eQb&RQ#P_d)fOJFc^Ol!Pk355l={_x08v9S>E0E`bWy@C}x3 zO;F|hcK9_o^;D~GFTrh4&p)lmjfbjX3F;G}%Jq3r<>)G}ejAQJ{U5j|+~ag(F&u?@ zCR9CI4R?muLdE}9&)1;Znc$;V-d8}GzZ6b{KY~qgyECkxYlW&8=fg_)I8?ZH`k0wN z0FFd`98`VnhU!-?fNF;x^872DhPwDnlXF)>sXqsm{@;U&_g_2@{kXYb3-?C<47e}6 z6c)o<;avDUR66W=mW6jT)Of58%KcNJ%GK>q`SmWm6jpztC~-dgHCzJMeA3K643!T5 zfRbCre9Gcg59MzUl>3*%06q-W{=Nbgj`5!^a^v2)Q04VFco^}_T?v)$UxCNMH=x2X{Ty@uM5uPs{Pe7Hs-9BUW z=^!Y78=&%`2Pz(SLzNQ-s;+!ahDV|7gepg0hN_2;K*e{P3oPBnKs|4Os$ZwT6X0WB zeb{GBy%wrm{}5Ke-9Kmbb1AGqeI-=;`3oq2#$IU8)365h*Sz{YsOM!DS-4MyQhyJs zUTuGIQR1`k7}yS!M#Xk#`USEUCpC_Qo z$#0aFw;!Ux4MPAAyShcAqzU)1dmD6;SnH zJydvZfK%WPJ-5Hw%J)pD__aYjzZ@O_pMqKVD(r?Ut}#9dbEs#2!OGh=p!$V(;37Ex zi`Kqf22~EA3v%XxExC;IODm_1Oqq+AwRJ?e=zvF{z6l-*zYp(#Z@>V4;j30|z5`29 zzYfR1eQ&XJn+uh{pMgr3XW;d)_-mHGk3*%$Yf%0ka;vpZt2{pshoS#d&zIqF)Neq= z_wP{s$C0<0JFDQQQC|kt9v<{{Gq)OMP+tmr;kMr}xpOU)T>1=DdL4YbrE{<6&!PIY zxp!E7J`GC!093mE9V*@Ce$(pJ`B3VgL&;gicUr!-z;UQ=f=9#Wq4IaPyDVKg;V9IP zLY1dC;9OXDx5)_?LY4oI++*>Y2FIh`0C#~mL8Zf8p1+5aP# z3YE??AFz3?bD`?>yYN~VJZS0pU8r~t|F+ei8SrG(=R%c}ccALY`0rRgbVKzkw?MUD zuR(=p_lK;UkAjLYqck z$1@+cbm)b0{~oA%@&nJeJ$HM=^e1@M!H;3C8>-!U8#cp3H(L987F0Ss2-QCP5h|XC zJ!<7_6B7N~LCvry0X{hrm21~?7%Nl@u_DOCA;8Xg1RgY|I6V`ly{Q0?vIQ2qGb zQ1N&Ss=U4i4}&8gw{TT?X5m!yulMSoz#i1wJz?f^a1Yd1z!C7Pa8LLkRJfmmx5E9O zwE5V_pxWEDPg#HPFjPDGSE%q+e&5P@Gdv#kWl-jS4;7!uPn)}+f~ud-!sT$kXRKd6 z1*(4D3)S9i`)pC72r4ha-~QW>PFx@H8pm<3-?VM1m;Qb?cq4iTqBolBK-Bkfor)e! zhWn|V4u3!O_C5|T=29Q5cH~;_Z^pdR@L{f(yg6Rq+Y`Mn#PxafCfCk9e-HhS zVCD|^8tj7A-fSOy2R)_FZ{UesMAy}y|ATE@Z*%EKHB6Ml>Dc)N*Q=6&E)<7(r9OI=M^{^{R`l}T*J6; zcAou`>oD%s_GGyq$EDxNTz7HN zO*lDylGp!{=Un_a&AWFyJPh?an7^9qN2ou6Ikl6Y^yayZeyXoUnAeYP&HeUAJsx{+ zanYqlzxVuo4IIX^OSxX-TFIqf68&y(rV=;G{QVC-W#&@-<9BLIPwE3upX=SZj{9S| zKNdIUan12&>pkCszvTIEWRc&mxt{WNd*QdZzJOk@H(v_3!yWy;&h=fMAA=fkCUG2G z0gvT6muIi??8jVcIDP>1+Y2+-OOM~X=*NGLqyH2CY&XnZ$n)K~7NOU}rS|=5c&)dz zn)}~z|98x+=b~#!tj6Bm=shYs-rO|wB?E-NC73yy=kKBM4%BZsdb?rnPSoYxZ;##| zx&Im0zq!=c>o^y^d3D<9BfZxZs*YEdm1keA({XD2&33{u!|EM>U z;r=47pV(tJ7d{fVe}gL)5ef?T+;}q`i$?8^P7hrQdk3ulsAbPU8Bte@0j9#%g+YIeKMW z@1yqz_?Wl%(a=76hkJhy;Jy`o^)Ji)^J?xV^L%ff9f{t4T#|>bfv2Ds|6PPyGTL8w zw!%NS5GJ|my&pSpe*w===lX{?)5HDi*!?5C1-+)2yZ6WLALd>%K!7>A#l#`FxdiI> zSvc3{G-l35{UBE@*Pl_hczx1ocaMvrEz27xm|0DVKgXan*AFB9~-* z{VKTslz;vf>K}6dh*!Uh`UZb5v#;YeVo&0?-Vf;=L>P8Ny-^B&hoatyoqf29x!;59 zPu!o*b)*?d{2zRY>+f8@;0iFK-*uR&geRf?9d54WTI2n?9{q>7=3!cr<@LPghycZYnUtM+0&@6@XwAz9se!I%v>}cgS%oU{Jk39 z#CSM%`%o|RZk!Ll!F8xN^MAPUdF~HGk0F5jUF(_RnSR4PUw|5ed;*Sv`@t`Hv)|@^ z7s7G~yoc*6JinN0XP%z}mvMatef`ehI*0oOn6L5SUy0sTnC;*?gljvl(U>`r=U?N# zllvpNMq=(T_zZeSa6OCq1Fi*J>rm@A9XsPNqu(X40sRl)dejGUzYDB}d%>5vcIEzJ zuJG5#{Tv^z7O#II_J7B<4~AC2)o=sXzqyX~X4=tT!&QQM1@^b&nSNurzY@K6IG*c# z^e)6)z@^`1JUiaIaVUB>bA1tYj%#1c|K5xxUiRj{2mipcx6w~?e?Ry0{j;^6va$;O z@1uSk&cL0|`e)VL>vt3COL_J__m{&~)JMA~q#_} zIi2gqm|ZJIf zcep=-`+eXgT(!9KWzPoJK+)sjgqW>B0{|tZ3bp?9iuM0KKN52`Ur*M4>oqu6& zEcYLQ6TOLHsITLGHq`H5@JycX5_9t?dz2W4!;85}ya$J3c0$bDftV}dYCx}z>rC#~ z!O7mt1*jk4n!>fx`&a7SYD9fJ`ubII|FVBR3l@9(vv^j7I*WRQw>Ovj`RLsXzsB>a z=x@V4f1CV$fSqH!i7#`%tG6&4mZRPYckYAw?PN%t>D7NkJrQ&Fz<;Cn*C9OnHqZab z)f{_14Yhu)xPJ?Fo4LktJ&T!>;J#dA&4~Md7V1$xuF`lu_UtI0-OF_=dLNJJ&*T0K z+=1t~#z&sHbu1_a~m~_b~h$*WF(KAoRY+wG8z!=+DRR z=eVE4^&Rwc@Je_%mwsm(65sRg{Q|z|^}dSP9kE}>brSbU+2zu2jUjOY&(1^dKGg5R zqfzg}wV3-xuCvfz?#+G)^{2Vt0QGx?Yd!Z1yx)KE`tBkBzJdBHJUfm1A9LM?`a4`N zq4!%@0q@|dEO`HxX}sTz$!B_EOf4=yERqP zoXn;IrxWybw*+H4yOXU7&xB-4UoP1>)}BoW?ewNPF;zUZHRx_@%clCcT_3D0p4z#7 zRZyHw3|rfkEDM5#1W~>QwW+S=RBwq3O+|Mu(^}HlJv=dd*u0vWK$>M(LOpzORWLtI zB2*|e_3|Uxm+sDFgE20$J-w;ERBKRbzGqV{dKk2HlMtD{>{wg~+^;IrI&M;s-O$zC z-HFpBM|HNM-?*U%j}*MYjdiw$59X(PvweB{`3E%wsB^Ff=62rcR3_IoE9e)FygS*x z-ds!HCJf{<#B9*#l^w}m@+8%p&i18Svcbgl#gvKR^EPCXUFnvf!4jnmt*Z5@mY_Vh zKHZs4_HGCkrjo6xUZ+1uu`4MF!t&!1zqqp%qw{kaOXJp5wxu`S)7RY_xJ)4zl6^s6 zM=HqnB`L#6E5juAM9Kg*7j*~ZQfsm=8TfoUEEvqSOm|<*Zg|n(@KtzR^KnGTj-F*_}AkNHl$2b#=5~aV*Y;QH&KuZ!LdmS}s!z3%D4CX2R;4i1ZB4b2=&n6;+UZ`ktYP!7szdW0 zR4UJ`%u)w~F)p3Q28(iPL1}Ht+V#1fY+x01rLVLT;tjoT;PJYrr=_`@ob7ORA75z( zi?d{)np@qLDIeGBUS(au4XC%Ldl$`YKs%GdnILRx@*2J) z!}!rv1D}*k2~w<`_KXP96Vk|}g06ID zXIh40&$7w21rJtMRLxkG2v*KtTpqO1VfCq&cP0CzS7VQAvC^BS5$OMX>HNh5^(?%T z0)<|V_?(;EUt>ytjj8=LrbQab=5#=gX1dp9^3xz z?e5I=rGlRBtSeG-qqW4v(%t&*!1};!kfT4%`V35GT2t#~h>}Fx+v9GPeA%EUnI(^? zpFVAReYRu=HKRVc-Q}5Oo-@^+4@5^Y8&G2CdwL|S$PL$xuj}qzqsAwdQIpa-K)|}!u)sbY- z6c9=BSC4$@3#uE+O__CRHo%FslO_hqOlz>#N}HjjCzs7N_c_tY3x5H6(x3?l8?7l%&dL4qE)9f3tZuZatpmaf(UgXqyDqugV zh@@I&PQeqX)e=n2Yjv)SW!lp1xn7e@H)E8FArl(^knGu@vc9@Owbv!?c!Jo{-PMCj zYE#ywNn+ZBwdw9$Ht23XnJ^aGrWq@d3ng3Y0;!~QL4N37NB$w&IZ21%r1QWhen4JR zBvUEsceXFr9JKd#=XzXCRwS%#4j48`%qi~7QSCz^3g%Ufab!$!IjNua<*cW-yC>D#x53&-dpyphDH;v(S#p$1e$p-@IcU9P=YoDk z*_@R3C0T}DM6NTPSu@Zn8;>U2l?#2r>f-F^GGEM#mED9Z?s1`M4X45(%XsYOCrOR29ZN?gPDjtL1oOO+%QpE;srGC2vr1+?3(EOy`E6eBL~&Y0$8wf`qX# zENvje0m^Zh{VLDpHA{T<`fg38`bDk|!3=R_U9her-Ko)bPiMNXPu;Z3BbPB&MDlJ} ziHgUezG?c5D2YKn`W&>P-!CxrP385q|GhIbgw3JIqjoJU ziX@dAY)SAc?dNqe*Vm2AN>A98>+DPSP*)r4D*KniTviTj=+4n{GTc^2o1H~;Rl_x5 z;;MH^R~HgfSF*E2Q#j;9u7?3Jf=+u&OFv&*k{bWg_^Oj~wE^P;N{Bbrn@YBHZ1(B+ z0l{et2izt32DqRyz%w-}$dN9ANVe&J8-OMsDJnc

{a!zd$}g2=jW>gCgs86cspbwHhhm@9k1Ham0XiDA5-fYdS?0sG)JG)LxRwHXrQEajTFfz+yLWr$K9Q4olI0ZkkPdK^)TeFC zrjf0c(}*vseAZo*_{v?vFx5(r&oc{2BvBNU&Mhh0<3rH|p|6Y(#EKZ!RXA)Y;H0a9 zetA~F_%W?gy@8_Z+6P+5E{SS`^e>C6D+%hReam)4tv>Uct}GAcZU3&cZE&|4BTq2- zIFhVQpitY;l|znE?7T#d=!h$^*!K@?z%2RVnnu^Q6sA!q>=iZ{1u+dRGpGm_)O}b- z3cZ!kLb5Xlthq{BzDNj{Sg(d_yo9QbBomNH&D(df7~vLSToxTOAcBR?_ZumwNp0`! zZjR*NGUvtCJ7TG1wk1y@t>9G{2RbH|f45q}pg?N`|5Yqp~48 zd#uJpspGv=%q3%#l84O06iN*+8DBDD`<`UkBxlQE1_qu`DQUCu+>og;TuY zKzsVs<4hEbyeRGNVKiioaFW=z=cvLA;Ckurk>2!FQ?}`pgi9P|%0RQQO=cn-%ZCp5 zAwQ`Xrj#4Jl?81~da?9c<UFal^uL%TjA9DEP_=ESaoWGG%gU>6FRNzrn57d^qc_ zhzCe3`GICiE+yB~2M*$04q1sw8j`-SlXHREr1@rILZib{Xgh1+YS)}MVFw!ve%zTz zc5=zIq@k+8Cd#ua!qKA1se~t*p%~P9GesirgjVkTs{9t1HsO6pgN)EJeS<#DkKL#R z6q-<0uB=+4RrXwF4Qj*JQ_4$BB=;rJS(w{SDea6Ua@2IR7A%91t!CcIs@f_M z<{ML1gPZK3f!_+3nd?{O8aVUj7CWh55~H)JP8(LF81cI*;X)<5;lQ=bO*BbTlUUK+ znhS^c(F|UsZ&51mZRtq&;cU*Wo!RiW-=v?pW9C^o3z#WrPcav$nVm=;YfiV9FfL6a z1!xgNvlV4*$B-o87XG!oDOrgLVp}dvwbHh!11t+F%WG;TO*50x60xi6VfRwd+vn{} z-%2}4HNURdxnaK2sitmHFB{XtR4X2;9 z(bNy4M)efsojo1Npqbr2YPdDx3YOrOpB!T2gO(B8m=|I71lNzZr!px-H#~K-#NMIE z2}_sm-rigf9gEvQk!CxGlF!fEQr1)!{K~RT+BsYE**QU&Xu_D{AY-*&9IaRR8Ys~z zY?sSoYuoukmbC<)QKHnCG`)mHHQ%TObHehr6|M|r-FcYLWF>FZk`dSZN}N?2=Ai28 z8-wx&rtCFYqD2HhF@Vh9l1g^6h8j+?M}}RpROcs5DS>@aRo_G<4OdL^siM&lJ3QQu zhFHa`O?DCrC9}n+l~KM;T#$HSara5TNKwpm=h{0EkXYYW@V!**Gn0~{HQU0m;vyFb zHwzps3J1l-?JFlwnSRtNhOwD|;gyXD2#3vAHZ(Ri)mJU3ZfLBkclPU}eE@D#N-kq% zxs~Y#+Am}^7r$`5BokEI-i?|x)qo()cgy=oD;Rcj5J(vLW{DgqLWojLazSR7jh{scO<-7^$>PSQ zc`Fu`*D}rwg+DKx>1k=ytyy)A-13r&)~h7;k$Z$HR?b`}<~&%}+fDNt`pUeKPn+&; zGA%>mn#)>-}zzhF=S#4M6H;rxdf{mgGxp z(?&d1T+4J{YnlYC&kH6($T? zE3+iFU&dE<+hijzV$q4YHh6qv20nBJivlA#RC{v}8Un`sY*;13ed8A!O1YRW3ugtZ zwdSe*IZP$DCR$xvzM!h9p>h!mS+z}z>KdCCqcJaD0en(K4%xh3Ma^;yMJrEU;6`57 zq+EXHTH`3|G9&wvkzH-mgfRV<>(h#J0g_Uumg!v~OtS^XI<&%A_)4#4l?5d=Q`D_c z*bk@6l@xB=8Aes!Id_)VRyH+OPAnX7X7h=dZOL?|sDW1QTqr-xAkbOV3=S<*%CDrd zw$6~5$qKevb+T0`pA#-*&I1q<6HF=b{$XdM~!^)>bcW z2$z+uv@6AzH?C-^s*gvUDeJK85bYfM%P3U^@t3`xWV&|(L-9_8h&J06*4B~EyK4bO zzL4DF7YzHgo-WLC%gjcD2$tadrn-Q}%E@kHT`~5{7$(ha(lHyxhS}`)!$o;5AHyeP zs`h2zR=Oj#zDYy(CjTr7onIPsTL^ri?9An#+7yNM3awWI>mK;hXj4yCVER-9Ok}|gEW>x%WQ2`& z=_*)x<(UP}79>Mk3@32Z4JQV*sWo55HfCfn2MP=f?t9*kLI-T##7!jI!aWU`n?Cac zp-?{dx+Pt{|5M*n=#sNl@Z2SUmjDKLGxXiN6z;KgqZT>{wopaogq;y;Jkps$%`LHM z9Y%{vl{Ie?PRRMet9xs=22Sb)gAOkGS3j1hW0wGHUFkN&ps@71wqYgJVFtU%)O`(U zTkCXe)K9gt+|ViatjB-R}fkoV88}h31h-kXJ+_VdtW<|vEOSx7qCCX4@x&!75+fyb4dRN#>J82U0 zolJbPLpf$Q?o}+E5j9mzlldJFc;*{7?__=|E@sb*UmC8l6>+_9*^7IuUugd@ndu-5uZLa(s15|2ED%9bz@zKx9W5Xj4tV9(ATiI zyq@t`*mOC!7naxLb=<~wwW*;G+T>8e!lxTC__+_Q=@;r3_!OI|iv`U3%Ww*BVED8c z+?UMsm9Webvu67T`aLS}&I}g_1%6sav#D$YrvQ|6u>#cFH`euzw!7Npqff2S;O5-* z##_5{+POHUq|LcnV(I~o`^>SYn{#?$Wy7S&mW4ii1u=XjbirGtGo_PiKrMiY`$O%yA6(XojExIka@#^nGUXZG;PNloL;;nM%S-<`}ii{j^d#?&w=I{+0 z`M9Yu0PBbh(lqk(EB;D+*TWNX@1hgqU2J+)n$c`-ztsjeqJ8L$P!}%f>H4X?WDjxaC z1Xt<9Qf(7Bg}LZ$Y+(L;OKsIRO_?#hiKT+N`SYXZh{_VqkcZPZTbrT%<1?r~|5YXq z^kF$MnLgD=h5>n4SN}gmhqjtIXl(&wGhoyO6>gevZ7_{$Y(H!NFuQ5Ca8*;nr?&bR zc1SLV-9&u&K$G9mi=%#aLR+es<*@N?Xpn(3ukZNzAFU^KYGYEg0OO7Iv%^ev!K6#L z4y9p5D24jwE%e9D##7W8JX6vO23O&vyC1$}JDMaq@G3m7FB9DY7bv}w`q=~7Vv{AI zX@)-q2Hop&ZWlmnI@`j_IP|{-2C%TYxWc;V%{$V|+iiM(YG@~73w+tYWhY@DeDNhV zKPmy&uV5nt>1_&zApJUD--!AYS9QA~0Mk^(B3vrpl<*AbjY@vh>H$ICaYv$C4 z8J#i;mIO?yB5QOirSvk{ytG?-WkGD^q{*u&k#37_P@2~3g&ul*=EhHjLqVzCR=!I;%$}ss)mLpUKOgT3dT&DJT~uvPps*i z3M9K)v_-jHuPeKqS?ZqDO$BrwFIWw<&Fqo)E4R5| zxmsz{_Jq(o70Oj%^APLT!(Plc6&!uh#al3X*PKAa3xzeDxY%HG z=i$nrogxvNMNrsnl(DjyH-F7#TNaFkDBiAwP7Qoq;IDNu-tdIjdlT`-qR?HxI;VBD znB)1y?|5_VLz)+QVm8dx^yZC(VI0gAw&T|IDlo;b1@0HFe9( za5j|^VTcBX-MJI)*UYdZ%89J@4rsjGS=vTB`YP*c=an~xRm!y<(FquC z&r;MGyX7Mpa6Uy2RCV?6>Y~==To(|E8R5Z5R$)SgHaM`rz53MOTA_ZS-Dszx^;paxyHy6g<&$K0 zHQgQs(8+WhsF2NSi;gnduZ+8GI(|=LKX<*9>_&fn!)!boWxBW=K`Y$HY_dIbSz(42 zvsJIQ5|l75BV}qy{xvQZM(yaNsCOOQN^G0yKr7XBOP!oC z#2aCF<3gG%3$*MT4@;q`U`*6!7w5*4MoKzAPhRY8tM_JZke34dsWMOS)VGh z+&vFPjG?EET<_xsS*hNDGiccMO=C+DTFs!!?PXKR9CT76z9(?dS&}L@`As#~Fwl9# zRIrNU;^O&bL5Z6cT<^@3=oQ2buKt8x^>wpR@#T8G&t}kEdtl9pHd-mFB!o#X zQPJur5}27}r(6DETa&i8h3iaiV%mzKZJE=+e7qJmB`awqMVp-PB3d-E_X%ea+MqPm z(bUFEG^wVJR#kR8UV!llvGDK1Xrmpr+vqM?iSFiHI*yu>AKE|W`fQEm2X(2L_YHVE zlo%uad3U1b&uQyH2(ykU%5?g|HJ)oYzhbXiUGM|kP*C11Ur8yY^)UHBye zHx7umr0Ta-Ov0fBNj3D8LU9GjmVa*wv*FBv-X|x=dRY$SdAJa+G7?w1ES9|PW^?)_ zy>u0wSV&YwsDM7N1IhncJ3%8>l#5%PJP+v%F1Z2`R)}8eX`vOPk%9#tWAqbo|zT;phT(8oMf}0Z>%Y7dN`|7c$no*gH0j zO_Qd(SgFZ$>%E$4V)v;|&1l)+E3$fLmU0=;ayQ)k>n+KPiGF{6xWm`hC$-VorKTNF zcGzsCbrShLu5C#=)Q)9>?#>({t5`T7Vl{QVERf$stv$K^0I(x;>X{cSw2Y0=f`9gq zbNlRQ#(v?HdD&y)2)DO*H#BA!b+cZgJ*ez|^1E2nmiReny#v;lqSmto)*?8V`LMn@ zNj@wNS{92H0kXMZ<}=#wR ziFx$aT#Nb_GiH-{F3e3$ESN__xE3{TxT1~CnsuWpyTkFEQQNyoZ@8fwF%O|m4M10l zT{HP9*fEq=CI$&mD63J!co!$OdB%y-{RJQ_H1n!RNl#}kTjFP{V~u4vl@eAMUy{{A zTI1}z{7^28@pBvOuUDcwhw|cypEZq*5y?iiZQ2YSpW9We7!z)x_3k9Q1~+3?ZJMvJ zt5tZmz*psURNd9u+V*O>WGa6O5gXd*eq0-1)!#37S&v0?&ReFgTMY6EBDbCF*Vd{n z0I_LpLPj}PZMR4HmrKGJMt1Xt2G}3mZn*1`Np8P;!drAFO}XC2_DPsmG2?#w!~o;w zOrddCFDXiL)b~|RE1Y|Y_ELC*TW8z7BgdStOCqIRzF_+@5WUH-xg^%%DOyw?s#R%= z+pA`0@3?nYsVMoWjJ$Dw^xdH5^BeN5cd|WCZV!cvk9%F#PN}4zaMF*R!07r@7t?Uy z;nUJtlDzD9SNpce8I@Gbo0aasGc_Qc$!12Ck#Iv%VHLqlnq09p8{*g-XT>#|i15;H zY^yTqLvf7l4AXgGUY&0}LaABj3Npa;YjEE2(6|#&cxT-@O&br`9%R}(x3c8U5p}PG zQJt7QXmvtj{(Wd(9(Ju=yc*~GAD0ZF{MXgx7DITeV#Nt+S3A3Vn$*O)2Gt3eZak+R zMY5VdPYi>7DR#}cH8tteUa_e~ExjB-qH8u6!l+r^=RJ#LFMORHObYbAwYw!kYBuD` zDLEFEH|xL#>`xr;9MEmdK69qMVaEA0%mxX-sm_1A)XijbNVkO!ak8O0mw~AkMPv)y zLHOD-XQt~VJr|y-Lj`E)nEBaUo%hj-BR)@EmZ%xjYUKD}gCxiC!KuPfVJd9M!;|DF zaAdn$R=*!FMT?#y&)oZ#n|3Sg2Audl-Z|taAJpu-%8T2p>2-#3Cp^K_A8{1P-oX)* zr@56n1X98e!nk{)dri_3zpx|>o$z7RalKBGqf2O0 z-9%b`{4ucn#8)^+>R_U5$Nvh(uXZgahT z$Q%{3tI1wgl5||g^l8(kOf%_OM%-(NTb7%YGRx2W#vH%4qttSK553;!AIFyM;{BB^ zQ6a_ivLP*Ryq?5T+^yANXyW97#@6YOn*4-wcsRDk-V-M;4`BbLs)T>AzRkEL>}o4bxEi+*HmXppDK!SC_j|68XqlV4zN)e zah(_;y;|KyNt+u)ant4A z)GT3Ni01nINW)LCYb&KXz>+Rb{EN(u#qqFt@DoOBIUqre7pK35jt}nI*aWBk9_fqv zkqJ9rCzPUT_}O`k_{bEsUN3WRD3;|DU;QqvZsoVh_Jev^?GdE8K}vjwsFlt*DNX%M@O&u>O2Ye zlCBFeQmr z4D|&yQzq9>(77ecrK_88*)?XEiFn`I*G#nf zt&fS&D=_)#pG9LWKX~F$MU2vh>)j^*2CpRDtujtvu#6?fYBnmZ(6J)*`6CkMxjjF6 z^?jv%L}yjPeU2yG>lZywRMyl7^^8z;Eciks&{S`t(rtjO)v1}}V=`!P(_hDO49G;a$`v3IMgv8kqd(URJx>P40HLpt}N zj5RIWqm<@C!)tqY&^7$~2_F}`p?3tI+2-fYNq_}8dKSgO7 zOt-K^g+*kZ|DKOZXUsEN{L!~I$+{|eveiTi6o-0kvi<_|`;ofN_7{2xEZzh_x zapnq~9Oz=TANkTe=T8TjU&lT?SE2_AL!EtqiU|M?ac_6)hJLXIH=@Y^1y6Gk&RD+? z+Cpg9UO8i>22^n_@C|v(d3} zlU<`Sg$%RSi=67`IC5{hPTGkNdVCfHW3(Y5HkZkXL~J zWNW_r>H^=Aa9=p`PSr0hPs}f`uHl#pdJ0#RBcW|!b$IyH@WgygCtH?jSt{9uD3jyN z{elM?DCNfy_Naev6+LjA{|2(CobG2IszixtQ^Wy;46T+wiKo3^$TmuOlDc4Ik*>NieSYK5_J!!Ou{h`gnIc_MwMZ6I{zqgp#`OSgqlS+T_XIy%TEF94El10f!a0PLNoTU*ZhU zLaOCZ!!Gv*xITFn?P{k4QWIJ5<_mo4_EYOSIM11#6^TXKNq~#P60B+RG&oE*P8`vV zJDJBjZY@bx+9u@bmNRN7|Jo|=@-A$6=uf;9w1_h051O(s>8Rf1j{5abQ5iXGUaiw1%DR_UVpY5il^t%cPCY|+2dLT=JlP2HfjIJ1ZHf_2Ut8qz+=GDJ{^ z_7gi>A5biPxN!Oe9U?1Sq7D)}Y}IaMIK7n*9ZJ00L?8>p=;bfpuA7L(;%%T|9@B`7 z#Lekf3jcFkE~;TrS>w??C}v3{N&HS=th^LubHWLtPl72aBg6+ z&IqJF$ece)U28nHO@Xb5p=`zcN~oE)A9gl+H!!~_>BhMx<-2Z7!3a$vN4m$h8{I`j z^+Yd{#zv?#UV2qd!b2|Of*0C%JNR+Wbu**&>RrA6Dw%HhEK5r&--&B*o$cj|a1HYc z4n8&!3eBd9@`kD=S9?OKOJDV&*0bRyTsC$|>(V0(1d(X)b5Q-?ibOxhnm8v`ha-H9 zx-BWTTJP=YTaFDH1`U=#?m^f^#ZqoIVlW#avSOk^hgz^DE9OrRKI@}W;R_@c4fPZR zWT-@g`~GV52?{s+XA_gIXt`!EoVcX8Y3{C`wiOctdWW zhNNxHDaX3^xFaof+!>#%Wp2^j(p0}WM*ij9;dqn=zs;*~W1?JiZ!;=1kqP=aI|sqN z7#=-wB`JT(k4lbYMmN4u`O~i2SWylS!?Z`C^FupQXuiOys8;we>eO+j``z?GSYYhr z^Js3}z08lN?gTHF_$Kbr0$GMx?Fd)hR1lHn@^5rn*~=!hEi25S`0AQF{gy8{AZHeS zipUjwo3bT^5+?0?**`@xH`=l04gPe&sBBS@nD1Sc(8uW}%wx7gJ17|d`jOd^*z1vq zL5%g&Nb*|iFcCB=!^%?MhPjID%3PR8?%kW%TLKM@b(~s0t%=Via;_QjY_qGsW^G02@v0R|CFYzZ(E@+rHp^ASj zLAoz7GOr#zV=oswWxP|7u5*X_6pZ6vr0bKwN)FkfLnrNdek>Z)tLD0IWn(X<&l`7c z>zrScWV|$5t0tohO&D(PL6|gKg2%0;uN72RNmUz#MWX z?mH*ksC9r{Iv0JUE15~r-gR!+3a8vV)oud92V-lUat;g{p)GPrOAI~k6^H06V;0YN zm=eqE*v|1B`|tF_lImJo+hG&!%#Ga9!WMMc}75AfQ4qiV9PnD0=9(7-KMwEY(1}{6An2ZO&`>Wn_6CSGrF0kfSI!n6jC?Wff zEgfHlt$>zvrF*ihyiBHXYwMXlbugPMy`8CnHsdaCjlIqJ=-s7evj78~&9i9xx)CaPfq;YI-h)VPUq~t$D`RAMjd%a7SRwhZgdGz5E8c@ zX`!VsBWg3Rq9BEvv0Tvd+q-zuKQehwmigC^!?w){Uvx4ZIeoS+%>qA%{b_}kQ(-lg z>nFD9x;puGV-#Wcr4aW$bfy^znz~bD1>eOwN1ga5fuUfPKv|Ku?7lpUb*&DEA>z2J zA-x&YeOHiEe$j*AIFIvg*wGxemm(DJW9@Z&OZ0ih@OxX~=7A^}t^**Laqq(|o+iL^ zVxPrV{dK6whrxCKn{>cUjW8nh&3sw6tE)E^K8r@L#LDMxP8}G-OFpZX zC(plHhtzF2PASL&h#^5vGC+aP#C_T!lp+lWTt!L3U z6m9M}8g-al+GOh;>}hiAb~fURwko*o=7}w_;$#9d9!@z*mT?;cT@g!Y6(}rLw%bF= zn?>K9T_4(7N!czdo;bC0{VFZk=v&1$Cc?Cns+1J6!Z=+uI)zB4jaXqc}*2~#EI$4W>3;ATl@pB zns3q9I`A)_rcw)Emff(&a`L4N-#!gL5Eq%>BxVMF-Q(IxS z9kV^T*&M()X;pYPIlSY{##M=M@;IN3gXd0YF5K&5Lk0@8t1fEE9SWoF zKJQbw_0)Y7Ei$7vq=zL3;xn|W@c+# z$;Z}7h~Ae?xS&?CYVph|lh}d3iJ&ZRpove#-09J#Ahvo*LU*l@yQ5gy3yy_Z?G59X z+mGaAZ)qc!_=Z#-FI6)67^49?H0rm%LHE*C<&QD=ia>TZXbiyd}xj&x{+W)i+I< z9q}78Xgrtzb(3faES<=J=}g?XU&8HUd%|c{Q>_?KKV!4}{#)g76LAL`Do9wrMbe8F z8qsMuq%o2|8hOy5hU23CDHS^3VAJ$|#N z)uJ6jj?DX|{z|KwL)he5;2H>8OO2|cgB(hopp^)}!Q=%F6Yac!g+IRU43F&SUqalQ zfD~Q#65x=AV~I|a&00Xe%`6>h?bP;ToJ4d`kh4Z)hbP>aG&)M%y}GOAciwT3Ktv^R z5{B}!zNw~m%4A;2*IAtd?6qnOEa&I2^+_-HZQ^-8$O8-^Q>wPQC=cOIHkW1hv|F3W zJ7jakR3JMmf|iFnzfod)%l0oZkVi|0e$=>M2L*W zw7gMoN+TJ!%p}(^h0nAb?mP!K&R{w|*!14_xIfXrFPxGIm!J}w>P#RVG^OOVE9-RsW?4 zxhz$Npbe&1HmGJWPG*dW$MN=wWb^zJMt={K7tsj`P=EkuUUs^-4BOSg%3DMqd(p zt_fF@B?fp-h>%)cmPaq!^`_W`Xxko{s8Vl*)2Ut^`&-#q6SQ=((kJJ=UftsQ0eTH= zXzOpTp|Nrhy}D4(%{-PAtQCdTgHKOa%%Y)KM-_}4)ACJcTJthvvMB^k+rnG2U~D4W z-PNSJ*xlA-4P=&G7_r?M80hWYFrJ8qhkv^fc>Z-zFWH%>OS-#{XGC?lr8nI}1wl+{ zS;O}+SfwuMN@mwsEgA40ry0}SW{LYwt}|8;80SvdqA4>5ZV@y`Tpcfo6^$)1=tJlv zp3Q`_j|E^Sp0{e*WemxqsY}u`e>{a`l489l;3l|q9sx^yolJJN_JpmeDs!u|!!82% zohW-VjYiHL@=QT;b0@yy<+p{q3Alj=<+^3{ex?RHB)6YA&9@UmJCdZ($H+Cmb*R9F{PK8IBNe>7wrhI^>Nv@6 zptd#b1MJ%_gQ$(6qnUtwM5XcbxvpizU$-D1E%qWZyZ11%iM2DPO)MCYIvv(FVqc;* ztx5g#x{_sV-mPHxoGCZYh6Pob*62Q1l3B+@(>#JSJi!=Tt(u#Ma|3g-GQ}2)tlPV# z7TqRSHOi!?*T66|G0Ultk!9WoJ4m+lcJtXSYbw;!b7UoNXAR;{uEf1@zfN!DHrZCO z!M!Uq82K7nwDj5%k9ot?WD47Lv|58_4M5f4*)(G;m?VRLF(Rxds-E!#)1e*eyu$fk zmS$CHOfIz5fRZ2_<`lSWZ6-(Qs~^edK)y=K;rw)JWa2|?8;I<(f*HP?$Ev>$R?1gj z-*zfN^1*SEC0VXoAFa1|lN5ol>Z>iO$lDsc-yW=ok3trvulovs8)bw`U--VbzHUK9 zbz?)`2WLWq|4^>%Cw;nX4Lk5~`(NZ)zQshGi<}@nVJP~=CvV=CyvS_^=Q>=Gg5S?t zHlg{1&}&BPbk1(s%|apLxXxi#uB%Ke?(Noo{F3U{lBIm!32B|fr+E8ea_OX*r86fE zuXis}l+c#p?R-Ql!;a6+?A-QDu9WGE;fw1UODbvF)l`>Iu{pkF z^2CWVOZ0bCFllPp#A)LuqJzPb`qWytm!Y4zNi+Bic-ge+<0j6WGI4lKGTT?u$ly22 zT#?S*tL)s+$Kq`RV|YzN9Nps7bCFjiC7xUrXbZfdr9N`k{Nk(3Mqq;k}3wnI?bajn8C{d!xwkv7!Q@qXR@9xgBb=ND6_LC z&C)o8+u0Lm4PRcez`oV4Xx4PM%;yyYUgfB2O@m-k>5SotVHGdme*;zf(F_Wyc?ApuTKY+&V|N}w`Ah>8`1r0(D?ELcj(2D#IThz z+vI#}>ci{=XP~JM1FHfH(y-9=mdCCSnia~RYvT?2d>?}vjTXmbUcUeOp5W1o9=rYJ z2X1JY(AV+u{kQQ2F=t{zX#3HNh*+j0SPOzqY@~zYsZ6Q2-kE7{TJ!S#5A`+S^woS}cK9$C>v=Ub zCPfb)?h>`o?|fwX2(8waGXdYg9n;g{+-)V4jP)}wKX6r=J#1u553%|RhxxnKhd0X^ zLhE6afkJEsnC+$6j#Im*4$bsV~%$OS}&NDXZoiEZFR66^l2DqW#Ko;K+P;9!QLQ24H?UFvl(3Q-v%K4NhMKzklk>ffx-bMDeY`ilp z0+awZTskaRy75*8_x^{duaDiH4BFFply=p_}DnfHhw7+tlfBDrro{2<9*x0 zcYk6DsN|BLk6kZupm*b~nGU7raT{-=)KW68cd@!i0q$vXy`PKR>PTB~NZcSQ}AJ9z%_&m zBM1UlaC?KmFcQTuT-7z))Gmrh2m*wz{}1&qxu5S^Yi7^hXP?7E$&P=J_rJZMRqH$WdLSGu9O>@9u(-$8EOwWlKKX@y+uQ#_{Dh2H3}KK&QiD%WJAJGo z9*MoXDAYH)^tF$QMRh9&yeet3)$BcJz)7}goi&gESi!&-7BVB@c7idM{FZO2lK|j9 zB4h8QDM9#%r0@RcHj4zyq~3D(u8ZT{ZH3O5fs>ELHAZNjhX;C^0ut+!1@=z>V+vnB z7&dqY@~msvaCDBk25)}YQRi0{D1SpNKK`S)+9aysu+Hp!pz69mXRy92cS7Da8 z#wkb~96VkWujgka<{;+ojwAqoeCj;?*+LcvreRIxF*_;PN@TnwopFP0tb~+_q^-r9 zo144L8(DvJhfS9~t$$k8Jf||dRMS*UV-1m{XbR3=Nh^uLK2dv`{v|h{n$~)-iR9S; zWY>R)z1RPj3qR8N-b{f#Ph-W-Cv^)^!yvj(Q$*7C^ULi&ztaBmtNNKo6A~A0@Be%Ja^^Mb!nZS;(#tkn z`oHSi)#}5w;-B8Y3>-xAr`_GXdl&}0E{az*1V4kgCH-?zLbXuHlE-L8Bit_L$4C6z zi4=LprhVx&qpnWd+@UIrEhrg44eLn@#-&4?}JU;HOW1&C(#vPq-MLqs+8~G!YMg~x2}`;L5DxAfJ2aMbjs{l>Z=5)y#LBGn%o z!>%JDB7G|XTKvyP`lsQk-rQ^|mr>dbx4_xvPt~ller4gv_PTF>W(!OkXzQsP@9Imv zMhGre@%FlY3QbvH&USa_>Eq9~gug#-+1x5SRHKH%hF;!AY>KRU*2>j1+}Y(IPdoHP zEj93WPM)w?-*Mjbzut1Q*hFAg^#!3&5X+q4_ayWJ~B|MDnXrs)%5dXo|fX3+CL z<(!yw`?SvO|3(Ojzu+Fl-n!ktE~Zw_Ed~!v*k9(5cC`kaQx@=nf1H<=-vToCPWgY1 z)^O_LH~n>1SYW5SS6B8yhyFXa|J!@|+pGfpgZ;v6J<|Eh?@3>SADA;I3jy;%@BxC@RF$qdnb^G}!`6Wu>O3BiB#><#0NKGtb#d8m;jDf*xS;WQ@l zo$eYBByhXe_)S8Xw>RN1?)q^7XMQ`PM7|LYBOZ)Ca?4}%4Dnvt>u$e>v=JfD`mAy7 zX-LXZ_W}3_?E#;DEE^Mgx4eYE(55b$Gk-ZR%2#qXctsvnOixOxwdvaazuWF0qf?u3 zAhdatvzO+&$etGkMlR%Ta@SUDjlOErxl$KQl?Lo_p<6U+0nxGbb-;}oX}zHR(Uwqf zSGqS!T&#(u&_hd*op}B@yGe^dw9~pzI1Y4gze&UlW$4;m; zd(Z=3vCqEqV#^)al9Yk5Ik{b1;9+1CdKMD@$iqR00ps&Zd%ywqD^uK{(*_|V%aURj zG9liF^eZ*4^T$Rr>`;9H!}~c&xAva2U8+b_jF5IMG&awJc8{@e?B?U$6*LnOr@1$f z12O_Xk$5o`X%t;-gA*;ck~G#izl}x?DXFfza0CiEy-uv%yPr9v4_@E$XM3-`e!0im zdec)JL(UYFc&>#&oZ5m+vN*t#ZY8qW9y!~uV*uaOMO4pn10`3Csv>AGN8X7HG!~oh z1zZ8i(XCxg@sx`gHj{%%1g%YOjyRgck3y$!@7XIMfuA-e)MmsSC8R2IY;ty9HW;!U znedRcxJi!srElTc`?z=2HFRYi)heR_rm04W9~6Iw~z1QN|`kS z|B62QcD~k{Wy33@wP7{~F5q^`lvQWG{?rsdwFwka$&!aO^A-}kK0kGJZlX6accnMS zE4RIK_gLk?oRN0rmhYw*z}8WqX=M{*qKuwF zXVNa(>R;NHCLNh}sL}?*g~>Arf+PnRa_lyD5UZ+bopk)z&gxA{M3%>ttk$MyiLs`r zwq}%P$uHmv*#lPaHyR6PL#mJ@@`}vfE>1t5gsr)i8~gU8Wg8Opg0=f81@X6po)mm+ zQf{HL)2th_Jmdgs&UQLq426CNlgtwfVQx6@SuW8GyB9&`S7cF2M*tF$O4gsU@I#%* zx@(!IOIlmkUt!hZ@l*LWDS!T&U27ROTp?P`lfWE zLSXb8x8H>U<#bmvkxRSZQdq+nGnPg)a3mv1*U6iL{o8S=B-{JAMFA=v zkmTyO)sHS2!MB+nwMa;fM!)Wn5~4>~QEZ%(S-3=pGt%-(G^*mcTyEYB!=wp)^RoId zlCITQ`_>L6d(=w+O;c#;o$)aaQl%wG{vpx6$=z}qp#%fgYhD4-@P z!DqGsdY)`SOUpgtTxNWK`G67!y+z7tjWmO5Dcr?%PbMx!G;VQd+$wS>PbdNPfAd3Em;Y26MSQmt0tbhdQhF8c}cY6!l+Z2fB><1fbT`fqQLa(Ho z{zC=h+z&k~n-2>oy zCdrBy5p7hiwQSeqwKuNLcaJ&1<6OqhZmHRaibxEc@hFf-162u^CZ{0&8i5a+QOg>B zxC{exHnYV&QEP>elc+NgL1RD62fV3DR_(4TFOK&s$^;{HO4|gsIN&~f0?}Dz93hFC zM!V@}x(JxXom(_hG{ee$mD3$~MJ^cRXpaLBlduL4&>c7ax!C5BH~=;iS_6mKA+x+JjJ zYBWr z*Ac{o>wMlOo@-!AAsO~}3u*#3^NDmp`Tml6gwprhQD2pf}9=6eD z=PmC4TXv!H=b|jl>w$vAFy6XW2yHcWD8WGBJZmPwWw^d-G-N}kRxC9iY}!E(FHw@< zjfIvElr}Y*&g1iIn7JGcag_-O#w#GXxR{zg&#vec(y^&4+I;zX+>D~I3s5rE7am$y zsn0}|v{B(gpry7yDhSo)m*q!gy}{`U2v$Evysd%BP}+Pyrw%n3MmK7Th_Vb8{tl>_ z0{96ptYYz+B&=z;8IWs^GIVI(iZW&9Z6%j;X1;gsCs!w~5af+DhA|*NGU#7cAU$aMsmQXPPW468!IP^=AXZvv}{9TK21q`lI$%CKqpg`&~k*uVA5e*WP8W)GLIr-Gw0A*lg(wi?L>#4o6^3s)w z3sb$h$*XpsDzAU_X87S;%s=)luv|bU>FP?sRq4DXEOj^Umk++Y&s92BW~8%_lnf~6 z?&-8NPq!88;0ohwcmMZI+d9GdR6cCgF-@3bU}M`-F->-2<|&-y%1GN) z>bonKX688j>(Zj!nfagere@70&npQg@{Qq6ioPA%T3FqFiJMAzLrXeC)BPRj+ToxJ zzpkwMC`K{zS7Zy>|J3!qy1EnQs0;LJ8rc!_&dwdhtOr1oiNk?yX(;=b8@{zb)j&~geTjSWtsophztECFch~Vrb64 z*5E<+^%zYZbom*?JbCx|MlcYAN3bAKjDQ7O!$e#5!DL=32%L+}j3Rtxv9KBt|IV(A zt=nmRZlTeYeWB6}+-U9Xbikp9Z>+&q8Zs&9um~6hJ9z;}R1v}Ah4!G1HJ_LXswF40 zi6E#!J_x4UHjBE0By(vZSWN<9TN5>PNgngR=|@_HdL4(0GT2Ha*pYuiAds+DaPiB( zzgP|SCi3O=yEn>N9{^9GQ7gzL#)F^h>1>1w24*z~dWqrU#AIg0!w=SkYZ@l6@tFa) zc5IQ+DRQ7sIjg<2%gJ~C7=w$fYe73@eooj)beR{tEr4nu~kHJRA{NW z*~y?bZ^QP9GdCzE%IVE?EagO^=oANN9BLufkm|AzhLNxRszpLkSdn`>Fd zCSFGZhU;2VgFHzl^mAs%S=*QnM`A7ZYm*-VvVgRduvQ*LaGafckp^=IFd*|6b5XW)mlPAr`?E_lQsAc;xykiN$j1u=E!Bw}v#7?2pV({>UT441j+OSfj{7{`I zUccLBZyen!?2@`E(n^>l?vE`Wk}N%y!J6K+W615K=+eQRskWsd4$SD%#@Y8|M49no zy$6^DqMekr?T1`h3_f=0m?aDlgC#;f-o1QqwNH$Fcf344Xi*Ddj3%ga3twB6 z9V;W=m6-J8WfmI@$|WOg9uGR3V!vbNH__hz*fM}_Wf@V#B^)NXhM8A2<3uN~F3etg zV6y+udH6o0*uMlwN$a%g$12PkDyrBNaAepBifP;>7fUbFtevIgZ{p8(rX*J{}0A z)FP6gT!>@ysuowaDDBbaI;$SKpPEPgcE@zPVFQ{bS9~8ZKQkvQfLZ0#EJaCSbBE*J z19BwTuiS$=w$2se+gy63a+wAw2$TYrzOEE=()D>};}F$|(-?j`= z8Q?%w4ZK8Q!1yrW7Ecq6U43JEdW_d=^P9{~>J0H^49PPMPal7BFF+0pmefpjm#z}M zzu-C?cMDuA3`z-^hVZaU4N{&=Uk0TnKXWq=RfC;hcCQmGnLd}*n61IDz}ZV)zp@0H zW$PhI)P%le(>D!xP{zQ+e=#HNC<@a~TU*Ljr<09j!rBPzl+=-=nMQA<0#?_l#~HN( zrPOhSZO+W#eiIroNsq*M{3VjELn1FmhZW5Rjxb5k(wOkY!Xr{rjXj8tl08$y_ZAoV zZ7m+o(P%;0v%}VbCBM|H$l%usEyIVw86hF$TkXUY)LN4{1!5qjvD;pEZ^hhF@_ll?dBc3>LAcE1;lgDw5g1KYhuN_=xq43qM-1s@5n1iD&aloQa7<%gYFW9-+zbd{;)s?kMLDgA$*6@7>F*F-Wl(qB(~lhr zuAM($=XuL8nKJP(CdP~Dr*|rTd?w5sEPV#g33mEgXmJp`&i1Z@jn`h$Lp&e^3pR6a zO1RnmVSSh|*ZFJV>p@df6hcgAM-uGBX?bWsTc=!AK~b4Q-3+vyjGO`!MQZwVZ9Jtq z;;4O*4{4!AS5xJEEraG;GxluaM8)&%j>W~466)0rodzyjP`W)Tl2Z`jKasDbI48c= zs+&>|&N6uESRAq)@B#5b&HtLyui^93RTB_F-B{`YK3IHbuO4lYqeUAIiIY#40E zccb1=0VkuZMEm)q0#!AlNoo#L)za|VCezpaQJq`g;Xnq+*0lkd3k&)dbrzB6MvO*y zBhTQ;4!BcQ$opR;8o-^SlF9dTu)%w2`uup;_Ny3HD9Xl21V%m85h%zC-Qu}c6P7ZB z#N#ZjU4yZ+zPQE(`O&+zQ&4Wz4ZPxM^0T6Y_4K&S7XtLVt)8_8sg@+l3p1+LeRMHM zpJm%>k}I)r*t|j_CpbYaoYK0w%$Qu19(p*Z_s=&s7Pjxb$y=}d{x99}Rb7<)?N>dI z8Q!4pU74313aSR_)Yk^-mFIx;9iLOLx4X8}vuD^WPy0;ko0;l)X=;zljAp0i=6YO# zHO)ojCr=%(E&a8@6E0GJZ&3xp_Pp2CRRa}iV%DVpsiD8Er@!!$np@l|{m-Dj3dFSJ zL2BJ1AaRe2pv#CdZqwWAKaewAGp5?j+M4>(DKeXoLk_N=n7^tZiYf+y=yz)<`%#L( z;_zz$fJIQGnbd1sOYB9}O@J=R3;9!v&8xFWiJ<;`B2 zMyfmkE9KthtY#LAY1x=1sfblSNt9?FqL#Z zk;TO0Jbaeg5wZYtsWvG)$u0A2cB>Rpt#Y|QOs*0-aCUhci@6+Kb#gf+^CA3buK1nNESZ$!k~6P0VLKlx(YHop>3?ov%nz zmvv?}!C8l0JN)3`x8w#;-TF&JR}~}lSa%{<`6Ed=K!jvFH}-#{gT|lhe%C~Ec}pBI zKXA!bpF?n*Ipd{QlBS(jSyq(CB-^l6w~8#DUwL8STeLBGeNx4SnHwNs`^b%4uicFD z4=pr{-8AEtX~l?bMI*)RjH(aUyKrl*cN>PCE6owo<>l>jY3n#36sujLf`DpKR~weS zYDH7aT1JGKD5%n=25T}{gTHjq6b1*k`>HKz8??8=`J+x`SQ1T>C>g{`B3)E9dLZyfxb3+K5TJ0gCS6&^bS3L1aMF$k4_?Xj; zIxFNRbLC&siW*_RN_&(u+3}Rws^$uPfu9&%+d2XsiC3n z$LU31p1pmc>&Xx z9{(Y26$D0!Td2YDTPwZW+guRTTUp{!SVBxXA_*){@hW|Pdx`ha%`3KRA&>jMZ!B{b zSXzXl)4>n}m^I7yKDrw8PHs(}oA1p}U7yDviIMzg;T*H6KesBd*EP$~GNwEf7Y^md z;y$z2V8p}{eh$xVGSxY~Z*yKB2nQTeEoCQ`4%;=Rpqb@LZ+nMK%-%P!$g;Tz(c+M` z_|>fyhSDR3wwTP>6$O=7!TUbOfNEQW(!C}x+-0F&H5w6}sr4HijX!#pjZt|?K&b_n z90v17QJP!LTYx-jXwY&DUft~%f()<&0$2~DwfvY!l1HNWTAQCygMMvTCoQvKs9)7Y zOrE-vry?;s3i-BIGH|MI-vvslxhzCO5CWT??oPJc3ppCyIpukpgk}U)M1$f&0#5Ls zxO0B;i8B;P*-ggD5I^4$)8K*w@kxU4BJkG2q-TGj< zwv_hRwePRn{EA6*FHFp(^GJS(ac2Ikgjp>P>2lvMnVRpNe9ac&7NSeX^?eSe>J05; zy^RDB`296zxhllS_Gm{u{8$~HFK#at5z z;bNx302qnh<43B_1zt?m=fmUzA;@I+nN6afirUkOf7!*EOdO|{_0bg(*_SY8%tx}t zdG;=dl$L?MFLjjn#AjY`hO?@IF>yo=uR*U?JEkvtMBpH(WyBHR5!$JrI&dN26IAl=J$m{DLs6y7CZOB2yIe%@^>;yX@$`ib{ zO$9|Ik(c;J#8cC60C3oU-=2^(*S&=+5SnEiEA(~X7O|rAx+fyVHXuyb$3$yqq5$^tykT>Gb53V9R9)nYZS{bbR-qf0NM z2MZaW$QpHc-x%9Y`c&plQdvkz3l7v2!1yAM*)QLc4ZQy$o6gl@&)mDX zea2u6x9wD%ko*pB8K^_(D$^8C(x$873Zu9Fm?}dhQJej6AxB}P;3v^nsHpL^%>~Y2 z*!(;iQK(B?I)VkI3US$0{t}KM+rDW)%v?tt4h*cgkLS3NQ^VQZC3E=)9>C;arki}F zEhnL}o`q^LfA<#(7a<27DjXJH!IscbWovw>GBQ)N&M&MLSPDw1E=VYXhE z7&oVs@0ou1X+e-iRzbBvi&9obg8uW1-FtG6U+n%=e~pOG7CR$M443RNVs>FoAy7q= ziCgBk8Rer6n5ig@lep9e%p(;7Gda_#<%mNSqF+VOyaSC4AVMtK{`RR?Uv03q(8&nR z5Yvc*$>BEk)KwDDSrsU%>^4NmL%tTXH9MIUH#gHw#=$}o!;ORaz z8ZSNa=-Cz+DHOar$)G{?%VElv(m1^3YSVMgV1WUK!VSr7M)F*9>#7QI7{mh|*MhuD zFGky~QiXI7xNU9q+bs>RDOm2$Ak^$d3qnLKSKPVv$_f4F(S%eNpRX0c%plGQF^fL! zVGnkRj8ylvS6_YkRqtetQ*^t+OdoZ2d0VlCJmE4Y&_)s0SLGq5GJdZea{6&|OXZPk zTB{eWG|tLKXg3HdECy^V-!I+WmlS|IB+%3cc5#LeG0>78Oxx;x;uLpK!Xit$Svuh_ z6%`!R^}0jQJ%er->XJ4S_yv*Gl6G#orG+>;5iZ$3tIEort>%xF3Tf7nesEkND%c59;8QAX~sjqBge7J&WA+N2de9tmsV2aoARxqK;q zZF0@`-J>mT{ch+ina|GiEl3a+*);1&DjzH5EeMSKPdInP%!P-1Hq98wdZ+~a7NnkX23G@mBb74Wqga#crp6@AFFrG3Dq$bp9?vz@FH&?Y4MML0aXRiwL--L1Yc-Y@H`g*Iz!h-Rb}7 zRLgI7JG>camyJUUKgTo~urr+6PbZP#bC6bl?e&>6Y)ct-N zN`APtwo9}O!ZB>DfrwTz^Ja9g{da=_;G_SnUJ;Z{h-(>_ua6iTYh2()c)5^^QO3D#y$8QT) z5AN2Se)-hwOL~9fI`oGG*FQV+))Y5xy;k`!f@$W=3~YIA3ej~@H;T~4Plyn7%GvYh z^t)B0x|3&mCydnU2~GlkLx!Q}KTG*jGgZ2O^e!OVdGZR6ss$hDoDoA1r_CVOY6F7)Q+ugv$ZTst=f$eLwY zb8$MU%hc6#hwZ{4xvBZy^rfqBT9-Kl#Z3a`9Vp&-MnVe06HA+`617!iPk*s0!}#DV6fm=g^aNXPD4W{IE{I{m42mnfLmd&f(YDS*Q83St-T zImougjpdX}E?R5HQgNR7WO!!P9RS$Ky75zus4KN&FS(dM6ER{F-_O?|IWw@ z8Ygs?(iIo5T&(;by`~^k+jmw@Dg0K$oJH+MVVy3wnZqpqQj0XS;3|2r`UDSLnCVPn2aM9tD9&YHZD4A6GRg}p=EBUmOLO`5 z(NbzzDB0QForATd1)j%&llezUbZ1?7)+}r{f67*25WQ(&gG*gj_(cUbIw+Ojadks` z6(&xJPQAF3fo!8zlDLH_KP=3>ao$I_m&QU8*{kJn0URhX3il3-am`Q6UYMFc1>Q`C zL3t@hE_oW-LL)ECoBpBU=rTcD;v@QSK;`r zhOu~MVR2>bTKDu32un4*FU>HGkGf*SrI%y_%i{=#K=!M4L>Jmuh=Q<-6JAQ&AiAg^ zW@PRZf%bpp73rOMg#rNlLSjPk)s&H(B2OnlP?DEC^ zf4F+Vrbo_s9pd`GB2LlUw?Joh4T?~g$xAk=5T zKPJ!rME4AYf4o!c$@P1!J=bq7vEZuT$>UCrUgYNICXA=fbpPV$&R?(stA4W&c11y? z=xB4M`@c*%pSt_vfWN!{yT89ZmeI$k%~7^7$XB|`>h?7qCW(%8W_#ynf7H`Ge&?p< zCY6*~2lq0jb-IkdYL`|CttzZ>N84;6SpzacEvMtG(E!@}(Zuu{Q{M>aZv^N!FkfUk zwaQ-RYJz?Lp`IOl@{tQfimRRYN)4yewt>mqou}@mC$1;iJ|d6|<(ej;ZRWz>5Mm>M zSX)|JP4mbQE?znW1Zr1T`aw+Ra-b0=0SKPaQC!vjwNslAcs=Bb>a(H$bFK#nU&nG{ zdk($JY*8Qt2v?qGInn=XS`0IJhP7ZSC>AJLBgfN<@}#;re6YN_V6R(p3z?5tBT*gq<4AlR8q|a6C4=hX>QUv%b^Y+S^&_T&}1xwG{+&(3*G8 zFwg_fl)Yz6$2quS24n;o6AxlzIl@v2pkuTecXNwj|Bx;ngrS^JGMCm|RsoUaUfqC* zi&N`u@dRtpr%yk7r7#4YRoP6<(&Q()eSC{ekU%CJret-jO5vt1( zoh(AjG5?wemK1@A(VkZpH&o7P_P(6o0zx9I982OBXuv4{(E=U$rP51_WRS3Gx3G5-p@@fgy!~Dn-4h zm=W}^CuM0pIMmZzQ;saAx#k~0^oNo>50JkmCb>w@&djmjR`X&}p*}5shyem^;-Cft z3Vs`7j+ceZd0#+#6phkHCV;E@o2xrJV-yv1m(U4kJ7-R9#ZI{&^F>f&Scu&g#bUK@c0GJ~zCPXNV@_F(h_GmHd9sM7os1N}B4c zAJQ82J80HruO>eI8}jSz^+DaYUw&!(6*H=-wb5B-(IJU1NQ>Az0I0_Z*_O8{m_k3l zKL~Cybo;DYu`*EspJ? zwPSox@c2`^n`-zhaz8aoN~ejJ^n2e@$n})F!FHM*s|@{JonAMqbGN12WjFMMC0*np z4+$p&m_4a5M8t#?-?lpKDb9R;$=^K$RFV+ zm4)yg;nmCM^}UU0aqaua)3U?a_f+={CMnD+3jpiDV`Hgycf{IVeTP`Q%9H9#s=08| z7BR#?+%%VKQ&C(!_%6|jRG}*BieimQ?z_sw2&4q!7^d>0MblLKzg<5rgKh0@Q|4O^ z6t4YLp7m#2dfXli92Lg2w}r9kvf3|B$aBg2sTKOLc5O~O*kfGO7l30?-234J_3w8( zh_;!v&&I@;U*bcjG|>i@6<&)RPMEp4&OEp!Cxbuon*&YFzPtZ>?rKF6a&6@D;+S4E z=HB@zI7;D(##n`-?n7=~f)SB<@nTjBGb*aV3zumHvJMoTDt~K^GDe zJ2)G6vowH;6rnmV#bD`=KgGb3%jQg@&#puI;-)z&N0Yvf-G%M-g{TmOODX*@>AKr_ zlZ!pi*rud_+sW6)$f8ja-2cf-fc1%Rm%Ktv%(1+%dZY6{bc0u&<0sj?RPQ^nz1}@b zCFqwAzP!(~3Fde168uvZnp#kOP6!j-aWgh4wB*sU+Tb*mSQ z#$0xe%l=jsD%oahKz=5DPnTUE-62NFq>Gk;G%gqgF4eo`jWF&O*fTc%IHSWI5HPceh)lSxA$q*>c! zidamalRewJGNlsMbC+hPCg<7QdRn3u7$T<7vYZ{tKCp2gZB?b`33=hipnA30a=mo{ zt|_Gru1Li9vFbPnO8?^V)YjaE_PC-?cb#kG8D~dQyS&>9qZB%>kX;># zA0Y9sg zWT^?(V)@xpE@Q+9D}{qGq$^vgex{?EM@$^t41PtnoMK4q_TfeVR*fvnaM1h?T%q=J zVrFt~OxF@5zquV5Mbl>h%cj`D;aiXA-5>vL3C+$w-# zF?_19pIlsBFz;d~r&#<;wSI3N<*9A$jrGE6I>az#w?m9(^Dc%N#2n{mCMu}L7fweb zbRED~BlqX7_d^Y>RG63(PBf%cTX9H8=Vy{Q!WbnSRL!EqQq>B{M9`*U#IluT>)L0v z`r|8Cu45S|4mlXRjUlV9<%m@ypM5nktZ6It%=ud4MUyjclz|B`J>^Aq#k3V>_Vq>< zz1Q7QSfvD0#5QUm7GFBL=pep}LO9($xBq)I^z3&+CkQ($<@n`rGaj_fENMrz7p)$O zm3@@WJq{2e*w^;|PUHUSu%A4*^x*U%Cxl+h~j$)~6flun#d8vvQTZ&DIDc zk&cE;%)GI>aoaA~dw+F2V0eHoOqYWio6Ceb9>c3BMRa5jeucF?XtZUTr9&B9R*V6z z2P727NY<`=00K%}b2H9`F?(Ab2uIZzrIG7Vpu7Vz+Y{#~^*D^0ohgc&^X;M$aiN|g zQZ9tN2o)55f99I?_AQpQQSEZ4M&g4fUoYW@S1=EexoL*5S}gj689Qe2sO#xfKv*% zd{apBZjnFOgdX}S8#)mYHTs+fo%Rq2-3TG+)CeJ3{y&`(v<*XgQSp;LMYKtk_QRT! zCshLnS5};LDQ)nMPLOrk7?;s&+|LeiH9{@EWrqL~63`Tco{?cy?xAg57&7c<$v?MU z+T8F$>T0Ld80Aqgqyv)A`mwSXcNEc8E0^*`LvKRx)8w?h41EViAuCnCbQ!7ZnnuF& zNXI0yGz>6(tdJ$Xt1aa7!`oZC+ns2o?;lI7R~p|gWzi^3EmCS0&L%kJ*R}A2#;!n! zaV^Nj-4zeHL`ZwJrU2=lN-H5A-242U%MXtX?3!u_%@Bwn4cEcSv6O7)fo2_za>Jku zXEK0R0_sqve!T+nr(Hid0qDjKY15KNC0n447MwXf*%mn$u>~JQaV^(_`~#VcyZs-| z=;zb@zek7D-TqH>Y3pGEuzd(iiJdM*ys3W)1b@=L(?+*N5Xwd7&wQI$`@vCkCoK=F z8L|?HB)6N>{DZANeB3lEKA4Y{;*>9$lAbD6_0AhMSz9 zmIOsOdPTR?Yx(`!%@MfB{ZJAd%P~asEWCK zHVR3D^MoCIY!hLn=6;wYj>nd&t!a4<8Hj=#t$pAF&JR&OupL%6uO0z!7{6)#CzKE(g(y z*d777uX;z0gN>7Wd65s5R_`utah#8P#azfbfYdX}g57WLQ^lsR%$qI5YU1_sVD$*k zgr^Y;ZIycsdm=pbvo(t5IL+g77ZMfQfd^$u6=x_ag*%eL?(6m7U zsS>v14s}f!1HD1IwPFyTNg;2=H<%ET_giKG<@%k3H-&LZi8VEUX;xCq-L;sp{HE%k zwf5_4@Pa>yZk zFAp^>*+2?hwJ7v(_)4)(;6@ac3J*ekxyzi2Rf|i9x$od|85+Iw`l~1Uf4SB2)5*@A z^@Y>823FE86T?G96hZM{{!ufLKY>ivfAdw43TuQ2(DnkF6k`Y(V^;}SD$b{iCO65i zoSxF`7J9Dbi!Jcc*7&3f(k<0q$JR5jG_?n3y?22T_C^CL=@BMDO`!~$?B6Y} zENu67@zBOpMsdJw8?B#Xx(U+A^R3+`T)8S$fI6^L^P$b!Yc750d$P#DzKum_u@`RJ zI*qy#sl0d$HQisIef85G+u|3$#(ILseKE5qcrZs1}WYGOEw6MG)2Wj4{JT zY+21XZU72wY3BZ_p)jt9A|;X9PN3dnYF=;V{5Lau?ZVkh^K%VIj+oly1CT^pu|d#o zy?jvMWh4$jU*>+9C0ZE4>^^W6&A6iK!&nUp$jsGb#hKKuPpuCYkp~xl9<^6R3#5;V RtgV(k^s${$3R}4I{{fGw{HFi_ literal 39617 zcmcJY3!Gh5b^nhq)JOq&C~pssAqixLNdg!K5}8b%f02>d+Q1^x?oDtIO@e>r#=sC)z9dEhumm4Y{eR5^G6 zya4KT9B#*uLUKqz5e+Ir2CoPI8tewU5b9;%Ab2Hs2dMgf3{?5AfUgA43xnV) za671a|0Z}T_yl+@_*L*~@GL655*!4Fz~Axs9q=t&Uw2^;+ywq9xD~tvA*=iza25EJ z$De?Uxn9A`#P1}y9y|=L0AB!;mxHT7UDrX?=Sgq@coakg!90{r{4W4S?-sBZya!bN zX^{Vd@AJOq$tH84t z(w5+>LCN_YAXNyS2F2euK(*_05vJ&!1Fi?J@%SbX6$$;+z(35-vrgp7gG5#@J3Me{zDMb!4JUe!Sj290M>#c2&v#5 zpx*N|2#Mfppvt`jW@yS_1-KT>d3?m<_rdG9e>Fl^JKPTH{T~H+6nq=hd(T9OYKH+( zbZ-R_VQ@bvy?X{!JO3vr`CLn;Yrr>q{9_Q7g8%Z^O`|R6`Zb{PzZ=x^Z-9F5X*8DV zHvqyyQ1bX*P<;FusQUaHxCLAR)8hMW{G;+mK(+G^!54$eVN&>EO3K{s*Y`eJR3Gd-j0Rk0DTU-wVp%Q1B<9>hVnw)`HVfF1>#}C_6C- zN^WIv5WE*u`R{-#cQQ((_FDmp{w|Ov5AFqbfS(2tad2**)q6Ae%Ur(~)bk&Ms@E3& zk^J_7lJm#FSA#$BxEWTl5+{9X@d8G(yuRjJZZq}$0`t&4c-V!E}sAqN$@>T`4?e~Q2AgO6#aLC%KruM zLhu9{;U;h)cro}UQ2p&gpyc=^Q1ba6C^?+B#^ioEcox@V;2GeZpz_}fc7cz9lHZrW zbHQ(es7CMt8d-9@4lIIuKv)Tmf_d-~It^KaeW2?71yJq$lJ#c)20-yK;;{j$UGD}} zzxRNm^H-qcu>xZ?AFP3*a{!dQzX)CceiwW(c+v*LGr@UWUkFP6-QXqQPLFQ}&*%D4 zQ1$yP_zLiELCNoDpyYb-Mzh~*LA7%Mr0IftK-Kq4;HBW%n}UF!!D>);<{nV;oc8!v zV9519f#-pzpyaX>J)r8n(qG>IO5b*Y{1?1|e-?tzf|B=7LGig{i}AS))cf{;D)&K9 z@_8DRe0~IWgQsk@_Fn;tP8pnh4)z9I#P!RzS^Exv7jb4)|JseLEO(eW$1Pdz;A*lf~QCA*lL4?*_9|^S~uscY!o{a3iSx`2i4B4W4_W+3ihW zh3kW$^1l=#top73uK<4yd?olK_!{s#;5FbnjPQE!jiB1&^Wf#+k3q5o3wRk#8@vHT zm4h#WcYv>e$lc)kz{BADo6TSQI;j3udaafF0!WeIqMbG#+yTlS{ROxSJmVJn0(d8g z=!0*8%fM@Mrne1H^*I7czkURY&x?n>zXGbC?*}mr!RJBIfBA^jdk46h>wVw=_$;XU zodJ`t0#}2&eiJD9ehk!mo(EH_z+O=F8=&OzQIIMJCyt_59PtkfAO3NAPNJLD9+&gLiX%H`oAAzSaD&H-Wcv{XJ0f z9Y>fde+1kIK6k?CybbK-`ZFL+8vF#5-Vc?m-fsZK??*wE{~CB5crMIJ?l*(HB6vHv z9{eeY2!hop+XnE%;C0}SK=H9`((eB@xQ^?;1EqHhZ!>+%fs*(AU_badQ0;zl6<-j{ zgL}beKu8AH)r|h*9={K6;{KAl<$pb>_WpZN?Rf!0(sd5R6a)`|s`n4U1>lz5R*xx= zE)@K+zdn19@tp@zq2O`wMDVmJ<2M9P;(9Bndhhht9|m8}^&#*~@CzQl1J39A`BX;j zxd>baj)Kyw_kmY|-vAeb=g^pv_a^Wf@b%y+;2(f`{yA_d_%m<^xb$^qUw;Fu0aed$f#-oIpbYAl7lSVYhd|}q1#SZ025ttw z3Q{Dv>}{q8p8(&^_36K5difBjeE$J%0XOh)6?gzV75qDoKLGXq6ZU(31QA8B7gYV9 zdynb!D)4`BJq4Zx{wcT!{08`9@TKoCJO`Y|br-k>>;=^?_IP|0yoT$qgQtS8_-*Sy zOTb>PcYvaMH>i3)1@?e{3Elvn@J_4WYeDhzF_5kpyzqC-ZoUCLgX=%^_!r<(uD=Uj z35NHY|FZ);o9l7#bnq^Z?*cIy!K0wcUGgroGp`00bNvBO{CpXdUcK->Yqw3{cCL4U z7l3~RN>9HIZUE=M+uE-NK8Ne)=^y^O!GE=%!T$wM;kphU_4f{Yd=~s9>5u*O8^FD! zM@U~GNfzo~M@V!5H^!+QP9!aY=9A#dNvMgl1J{H9izMEnzYp=_HqtuMpOgAX>dX53 zozeM^c(tgtSN%~t(dO18qe=p+qMO^%pbP{O+*QfdC zPjP)KiEi)yB;(iH&)|>150kz_`XOl{WiXq;MZWAi`K`Yfa(xSksNJ9XrT%UpT}^s5 zNqt9p`x0N4pTSE=Z`2R|{*oj;J(1^^f*&LODJk^%KgaLr?*i^gcmI~ODY^;XPnsgF zAbo>$vM)QvZ~dJ@`W6Y*bbn9qZx4Akg1tVk9!TF_!1dR4!QTOc;9tPYNIxQ}&nzUJ zLDJu1@*f0GAPtg!LV6$RRPKKkd=cq6{8qeonBV$aMS3pRL+;A{`2*nNscZe5Abp86 zsSEyoi83dUa{T^0=`P*$f6w)J63@@!_dk3N7U*q2gNL@#M!H=0JpI4s=L>Yr-w#OVa{uqa zmy(L42T50v^!Gf{Sv-H*UD-d=!2cor18FhoBP9LZOByAeP5$ST-oo!skPeZ4jdTY0 z^j9LC?|$LmdaQaBe1^1}w1#vl=}cd4DZit?Z}Q{sNSE^LV$wE#H%RX#y^!=jNn1!4 zlI|nv@5`jWA-#&!O`7NF@-ui$|M(l^R#}C z-inAz2E)9XZ85o9?u3}=6|pB_*Rb*yoMhY(g^8B(jBCC zk>9M<-hhAR_&VORGn zC-U4M+B;e33&XBjhinu1=)sy|wN_8cCl5AOMsgGF9vJO}bfMfRT@yC(kg~bVx`>fd3f#W{*~*)-Gyq69ATqeEsRvg%EekCzaj{4TDf}J&A^(i{o&|DC07qe zE7el2u6rBp(WV?_izB;Qp6^(*we_C8W^t&OipUPTv84IN(&igi#5Z!owaP@JUI-^E zwPGEnMQ3EPv2=-kSqOevGAN-dns)u<-7J)hOW zSg}@zqqcd9<$7VPPz^J=#&fk0($&3iLk1O8zUrPzbyu-G#=@7M3gG zi8|yaB=43?dR}WxPFAY*HcvB8N>?rG?d=tXQf_imZ#HeEk~C-`UkEGpabL4ip;W2v zT|S&E@9Hj9@`VXk%x=P$t3dFS(WNjK?iACbMb}h~a?Mr0rOfWdy`{Ru9e|}uG+%BaIi2UeWA4xepfAA&^y&NwJl`GXk zUin5U<$A7Iu7v~J)(?ubBe973j#NsMxq4AG+*7QNi^JW;N~0E5hHr&zEmOK&DR+xP z_c2mf(A5u{>Vv5GZYNGJTCtrQ6Kjzj32*7D&F8IF1{s%W_0EO6@}0|Hh8!lQcr!9V z?2SqFa_U?whmufOtT|PU6^=)=k}6pnr)~4$M6tZfSV@y|tjBK^yM4Z0x+H8E@0?ru z6dA@2d1;N5PzF~I?A)|^+uGIicGt>HrABgPb*FJuh9*=+sUr3@%ZJZZE#yYVdAf+s zu7)p0t=>I4+9*5n-TpPr6pCH})l#y_PTzRd(8fWCxo)CcEpL`IZ!c6UVJ=Uv%7-qG zmB@&&iQ#rKZlT>SlXZ}mhREn1QcAJhQT^gp%oLt$N$FiGZ@nVLzN~9%ept%wHH$Ek z!;0ra44BuS+;C-g!AU~hI@bM+)XRHKI(?x%E(BgS}l}E7`VGu_Jz4>DMZmG zLS9=RZ$ zuw{CYH@cVLIQUdGdnt3E7a$ZdzOqNl}5Qe8J_qKHH!axL8d17y9t`hl&i(}mkI>lT$ zltb9#$ge~^DaDhNt5}1Qxue)m>1kiMJ~hxG%CJ)Ke}c>Vpp|W0vBImq9{<)t+iaj=1+a z<)}F#+snJkl|AKj8CR38yfG6!j|y5fak+Xbje1WmU%@hu(pO+>Dk_oc1GRdkN*jkG z6HIU5+(4Xru@YX#@>dZoH99iT7jjqOZEAk^dCVhYwRUaTMl8Mhb2=Hq1mNWL5=FB~(N% zetjIfh?kl53Hw6zXD4_$P58_;GcaiuZ|Ul{+Qxa!ZH%hGWU&yLHzNq+l7&rXYQ@`e z7AG1`U?LIsF=mo+7w}%AS?{n`Zw&i6p%;)JD>baDPUxR%r6C(T;JS(L9Snue+4Oh2 zOJ1!s6L2id@O*Zf(c2xRd}DH=$ec|RHuY#@+cWH(L(L_aOO2IbGNs;LRYPI{UA@bu zd;@e%nkE(}CJJLTTl)f;W^!yq`O|V$`?>P5fFq~6m8v5WIX~(YwM2#*j~8FnJzUf* z+s)mX@^zPRajNx&PFyx8b{%Btl1#?g==$vWN<%Zk1>K{LYPVgt5WngQN8FyyMta@A z;Nm5w7M{Pj)m5W)1B;h95-DL|fY3qbOhsPXp78?4Jm;Lkxw>x|N8D(p9l;q$wqeNI z+`X8}*xEWt`=;)yS?^C(W82Q9%dXmqceZ8Cn%IY!tXAqaV#cP!8H{77aKfE4%~9W% zZCDfzH&72v3}tehFG^6u#wpLKd!3$VT#Z^u1~wW6W$v2?hH&O_0b@SNyCZHio;XJ7 zb#Z#+T|Qtw|&#f&UrfxI-XRg$JsXXnN!0}s{NvPN-{#k z=9e%|6v%3|4Mn3`qx0_Uw$KkY$E433TrISxN|+3@tS)YSLlfraya}Cradfo6M2|V( zP7P-k>>yQ33(uLD~)t?D0&h7gT^VZK70 z)yK?bigdw^O3IKWkl1W2ULhnTJX}zm2D3o7+WtYC=W7It9oelzE8!RS-VK<} zjo&)7bMaNKNGIpe#w8hUbHGa9^7X2*U&!g#>GP=O7qaPWYY5|q0Nv)!$ zx<$>19G!FKgMp@{)+)0Umqky%eh!qRE*kN|(flMns-IB1j=?ZjL7mFo_9zL(MqI>Y zlT0n;+n0?T6HJ~T`+PyUG8j6{y^V7As#JDA__bs=GTH1-`cRvjeuy27^=f37*sh3DG*^?oA!d%{Q9Ldm_KZ|>Wlfx<6U9R3>^@rEHb1i*O%t(8`7p0J zaBjFT5j8(8Uo0~qxGH&JIrp>4Mz~5a@9?9Imw~T|8#zols+CfRBvAz zn?Of6>Lu?jL~yCE?4?1^n3};)veYESQmMeKyI#YQs?I#YFIT-Eg6nOndk z`q*HCkSk9Vho#=Ug>VK0ecr4=^OJCIj90E%rS710zp4$Gj85F?BbeczxgfHF6K)c; zC?wWQR$LEFcxt9=nyDXCc8w5SH3~6>B#gm6-GN+rem&fj+eHKeBNGm4RuW#{C`|?f z*@#i9i6h<7s6oeHg+7mltF_eC7xoVivn1sMT0|!%8VkcQ7f-C3vqPD}Z4D}h%zE;L z;l|j`oRx8A#+B&F(iFQsk2xERqm8CKRuSi_Hc>T2pEbMdy}o9%W=1ii9@LySE42*U ztz56VVdt7H+cxcl-sG{#%yFQwKs$j&eh9K|lx?jkAL>Qc>TSfgQJ$Oy7w6b$Ca+E$ zj55N|Xg(g|T6TU{gLzJUoFQ5s8CE88XZ&iIa$#1|%Azt&0yfHdr*qMEfmYHkuxNB^ z@vZ`y6zhRFsZC@{SOXlyj1iCYe1SqP&a*M~TR8W!J;Ca2+qP^&;wuv`Tblvm{R(M= zwutC6!?NacmOWJ(vBe$+8Ctd<@HAgY2t?yD-YSdlev1P2&lmiHd1un?a?eD)g_RDZ zWiI-+4h(j8W{XkAv61%WRD2N5>t+3s!S1MW+ z@fSE83YF%AwOi$JwYXl$ijb`$Ze-9q@@!urZrUlo%eoUkE}b_TJBIq%#W1u)FVdzO zP3v9E)dJ>GuHjMQ;%+4(h;CIT3ssjtU{G;^zfy6shSOy-SFf?zKq4i*KbaS7%1!7I zb;+486>M_5f^a6sS%Q}UHWh0%IYaB$4Q$ywIF!0xzpj7dnt&x*=QrsGyNuY)W0cH{ z*L2&*b@+)7>8I0f-V#}TDr~W_VCztSyq?5jeK@#ImN;4U2iiry-ROu*#Cp)Soolx3*tur==7CkK2Nf-Ffh1NZ!tCC%I1H8A zw$W60=Z^l3+gBeK2~>bBBMOA7jo8yQQKVhu?%K|RR6qAGjZ5s@wt8d#jqS^6%`JBB zqk>!XDpi)abMxDX5asj58B48O-%<)64T;WJYU7r+r6wvNqZP#`DpJ_?ydstktag4U zWsaRu3LPJxUZ5SC!U?ra?I^YB82R)?j+;wfHv^Md9&sMsM95FHoMT4hG^`g(g<3tw z)MZ=LS){2N>PK_g_*TPNkDRx-DHEs7K7`g9On=>o&0;f#n((dLPKXhNc5DxCQP54A zs?`Nnq$dj6-&tT*Hn^%EGI2&TwA|devVU;(PFE(f&4Yd-?&p@;g#wXUFz7ZThGjQp zb@QZX#-S|=ENsUCnZguH*W|}C`fWsJ`?e=h%fX>7>{+;S=la2ZHWOmm(uQQi0%xXuUY?QTxGzHY42NH@#-u0SPNp)R%ChQRgC(OHynATWzbds8sq@7J48W z22aBUw@-|cC$W|tK$qjx*BpNkcpMb0J z25bKdiYyPX5UUuGmOOBc{2Y^}oS5oK$T(esrF0N_1ce;q{T9h`qfVDwEa+O96pU76 z`~Xixj@@JI<57q|dKMdoc|pW(W0J_H>c*1AWXf{flp8KCPgZM*P`Nuk1cnrKXU}+r zA=|Bv&~+Fg*sJ`S%wC3mHuQDcfS_mb8lrhq+5;_S{B-#yZBOdzy<%eOW=+PmH`sb8 z+9PXL({2HkQPcR{B<^}98UeFy_3}cA){b0=#74QvjGDjOO`UynW(v7IxijbUGx=?9 zv&Q<(tJZH@J>Yj2nPX~(mjIS`tz=&tlP;tcX^`t8LG(c3qS9o2FM+1m{`nk}jpeLD zFTOco*S&tR@!o#1aD8)N3qHdw%MZ1JFbhnSO=$aS(;q3%ZwPIKek-CVRcg5eo{V@U*qasHZc`0$YY{H z++m33a8ABjXNs?X5ED8b3D`@ZK(rJ+HRb*XsKJHqjPSI9}2{i+0a$dxi77^O`(Ph z^*tJJ)xww4ZCJ!jORE-`%`D-Q7Ew#BySUhWEg)WEr!6%0WIQ@I3VV+-GUajZq|)d~ z=wh>S2Ab__oBTFvs`}1Hm0@WrRtvUPD+;Z2ug`b;Q&nteBTBHOXYrLiS6?-6o15u& zZ>o(I^W7^OW3}#~N?$l{>z1MJ0UALNX-{LDSTim;} zmyF%pIP;=oVwrqbbuU>$k-px=m-SxJ+dFS#u2%0J!tT`wlxSsQE5Pruueg%cfV-3t#_fR2M>LYidu3?_h{#te?mUwSBXQb-a>7QCp z&Bc<4Rg4vS$}Bm}+q8bu>ZI0-dwS;$n5epk+#$U>%VC#KPM}KHgm^bqmOuu_Ii?o{N^o7faEzG;Id#yHuT1_^rbSt)td#>(TJTE%jw_*B|;dt@r;kz4l zK97*IKOng3=%IrmL|e^}c_Kb0n4)xK|ItGaH}H?9KU9Wb+dSo?hwm$f!~C1c5xq5e zsfazz@xfiKoF;@vjvji57gnbajm(mB7t|P0j~;$-vQtifs&H~#{KMj*2g~8E@#&}N z!sYR!haT1XUFvut3?ANxX5^i~#KcoY;*tG2GUksNw#^cSN|mo|1|p(*=E96y)6C$! zw7cz&5Vq!C+CKLcy1g6L#qpzIy|EW9sE6WYe^JlkQ;8$f2S?K4SC;z_M(ya~N2&GU zhh*E3=v%@P7bD>$LVDO8Y&2OM*5IdYU}P2(Y-Pdeh9=c+LKh4z`!paC}Wa z376>XT_t;=ZbJ1@%=z^1^9D88csTyd<3|s_kIRXphd#{qLV|#2Rru*i$5PV4^$rN! zSLZY(jo2gynm0pi#5HLXHJz~BjeOkEN)%lOEibxugLUI0`=<{gBQ!rpgF0Fqg=jcRdE*C|nqW;X|&tO22-t?oml?dqo^wgDh zJ6-j%^)1{)Eoq)Z4;JI|oX1bw&RMoLSj_D7M@nkvLl5nB%170W;govbVq5x*6b4tF zY_7t~1^K&IZy}_b($;F9RedAu(iTYu4HUmx_ev)|}v3krf?uQf7@bm-j-hVS6u`?WVV<(D?3F3+FL~M~U z{h7xJji?it^~&_h)}yhmiQs)vJU+Q|v9ZbUCL-;swb2(8IBh-C15|7_ubI_kM8{}- z_qG$dXz*rsbC=I9@q==;I@HzV#PE zyFGWl{$hV}eEN||SCNz%saK??bkTsVwbW#4T1y9hKYdm1 zrWtQ1I0hm+a=cPaW-l`DDXO-gFEFD(RMs8bbfGl;)RFyc8jdD|?$tx%3}ccf9&*yv zh-jEC)R6D1-nP57um+G8(rlD6 zJu(uO6>n(HW$Tf$c{UDJ8~9jGI5N#lEDIb?q(b31E#h1pe1FB$>L?Ml;+N*?so`US zh{QX%o#?iyEE>O$O+@hW7H@-H?~;{dl_OK#`1oF3-c(a>NcGG_=DVD}8BYgBtV=7j z1uskk?M2afYGVO~d?*te%l37zS$<;dMrSL5E4+V%hWC|X?9NQZhMir?3dcz{?HRT) z5g8)(y!9BiBQ#r1*B;0G$|k;D?fk4DsxfWkf^>?ZP_e_U(hH1+x9 z?9mdNmBf*->~zb|!H%DS!(MzX!zUw0%P_2VPZ`qar23qNk~zmNp5s^`ov&mHX(j}N zUeREFx3i$m2cAuoR+Gqi))?yTvK?pF(7-**MR7HpvFJr+z)uE$%o5r=iXcMceW?~ zz2>es+MV-a?^4-YRHKt#wMf$+j&DD{c7DC5gN2G#PrA(gx4xNDQ?+$A*1yO(3JBaS z6~)HQEJCWJe}@ZlDL{&IhR(|DJn5>J?u)zK(9?Ww6ACUWuK<0ilJT`&tUo$a-@1CCr7zjX+-5xUtO*U~+&Sv5xCr*vi~-(ROyEm6nXwTVwaFEdx=nKqe0$ z>=AYFK&Nq)%slOOX1mVH<@7<#?WG;e1rM^KZO&%q*#Ac7B69e@&lW4Ro8PxnYSQVa zbxr60-89m>Nxm<2o`=C-@)-b`+oFpQNVqVVwT~(NG`EwIu9gvJ(@#+jw>%ys?Y+?~ zM{3~PG8()*f0Rnke2#@^WP}nkZrU>UH<&w}c7+pm(&M*%3jiM}8r+j?UH}?=SYNY@ z&Vrz*O$(msy3O^??Z~J2nEibj=f+K#THO=xmdOXi510VV<8lnog@AX^QUoFw5hcqI zFr&*`ls7GSdk{q^+Lmc$XO7g;hC5OYibkP>NXEsHbPH*)V91UY+9D`!mKJ~2z-G#1*8Timgw0$!UEf4hz(CkdsO80_@Ghp`s~azt;N2cS!-`1lvMD} zctl(cs#Ht?6HO~=L0>R6`0f@9Bbf$FlpbQ*65%Aw9PLp*9MDZa3`K8WJZWzQ%uu#? zpqR(#3k>Nt{5b|+YSWpLujeq~S9bRJkKm~Gvk&Uf&5Upon;S1|SUk2NAVcZr8PA%z z>a6@}t@FxYnvqh$TbvPBD|%O(HoVl!3?K5+z~6S?ckuT`OHs)37*WPrt`Qa02Ojv4 zLo%;pUwa$wB3<YwzvRk6U9chPPt6YInxVz{l<;PRf zeJdguiic8#1bqXjTc%XVuf1{S&_ONWy01q_x*DrkL~kOJHXo91+X0raMD!U5RQ`!@ zN}~3n@LZ(5BWytGI}yu+ z<%bPX+)#Djs0nEqQJGGyR09#WQzh8kuz8IAMdctWk(zjUjc=p5Qc(Jbd2{Xy74f$z z?4uOa;y{_bWz6&Z(jY6aPtaAGVu#tUN%*fVWXKL`mf}D35Je67JVho?XWldPkF^xL zk@-yOvAv12jI$SUw$nP8ubIBMk$F+(+ZD$pQ+>mtoj_B%;yzlTxSMaISf8aeZtq~S zj|QK=g-16jIxglU+P2)KO?8v5I6aJvj{hh{)kT2ygqciv`hmTXWoY6)@pPJqP9%zI zpTo$sLYf=&lF; z7k!jtwzd!h(Wg1)$glrQN1Af9QCX30qvH0iS`11XyPIUJJ)+v$JTmTLgUv;pM*HY} zMl3VECtc{+UWeQMR5A6Q8I_+M>P^(0-kXZemB>sz=-4Q++5MQ=@n(PlN6u;sfpqnK zRvZPlE4f4cnsPNU)P`RC>WH8m$n=zq#@9lo%!+)vjCpih_4VBlANEckB4PAybMD1^9eP zFo=JUoyfX{`REHK3ZnM7Ouk*rui;RVyUCXf`A7gGN+ibAJUbg9(ZK`@9QiMrXx85> zYn;vvSTHvpBDZ^s!GPLNH~g;ufb&Ppa2xU0OOk8*ddUVGg{`!|7{QZCr4783;(K~bq5JSxNv@!kvK-`F}j5eP>nLs?dn266 z+46RJ^iNqT-kTb+H0P8NHG6N}Rpt}RL-{A%{p2W>LNEhv8y)K|3Z7I6&~mcF;;IVV z%?reR(|)xYvT;rL2EhgAX6a+i&+eu8N*3vgb>xvA_WQvTRVkD}kKOwNl#rqXt z@l+5Fz6>%v=-f<9uGu2Qc(<$D{=}_lo+M^JCgTaF*T!tHNg3$W-mgIgORNP;(}ciU zi$_CPYRlfpGY9>)Og00oGIwa3&W?v0Y^aPqpQvzrBjignnPETr5RL!*jJ1&GA}$rZ zr2SLd$;+^wEbk`s)RgyN8QjLW?D54Wca$cTlaQfy9Awg7e}1@ojBfTjpGJgzx8M z#HOV-Ih4-V$C4g;l(X-)!%dI83qON-#<;nCt;#*488?pYqdQ*EiNUu|?Xc=z_o4Xc z>pSk2tv%?L+aO_-{A}Gh+a;Y@@*m>KR1cGr-5ERJ-l^k59X7=#8Eo$0Om`I5z8`Gewd&~Y=dN~fOU$F^xQ~=U8eUl^0iP8BI-O>__Jj|(Jgtx_Ij^*v4hJf zo26hQgbFdN&RV8<9EdxKS;?l4{%Bki{m2LAEjIU1Sl)Bi#s6#7LWZ$oCQn?W`o}){ z8y_vy$}3vzKm60_6F{~H0*ac*d(k;>LLnyqqJIAsARGbhx`-AflFcMNL4EpBd;<>d zFpHaesS&2`Y9cMg&b<^vrw%ft?Wpai_ndWX1B8kZv0dfX9$IzrvniA!`a*-h!y$Zk zyzj13n>^vBk-j0+N3XGIwHt5` zpdse9)%EQob9H1)?K4E)B}jjWXa>5hxpF|lElM3P+4PyB(D?OQ;X8&IG#8|FJJtD! zgF71R`ev#xppT{_Z78BDO~r63GP^Ld6Mk0uIQ3*l(#$e3R748^ty<6%wB8GMbBw?{ zXX;kwP^WyqqsgLh)IiyfA0>CwA3w5YcZQl3frHvs9&f#H-$8Q2NBrD<52>Y0+-Y1d zbo&Zec(#zRT9e}n^8y5ae^`~{GRB9g^pzxAlh$p15z~{scTf5(bLK7|OUhDkd&>HP zbQey~|D6bD8%xX_diI^k$`p%Q$*H8yTsTLbP4xPxQkyo4M*vMTfMf$3`CeW(sbrj0=STNq8EEwD0lkLk#u>ocv*lu}vu zVW%KH9+oxMvv@g{EQ}M%#KBEZ1K9f$&F_*qlsS4)rEytfL*kk=OT%ZQJ{pK(**2{) gn(^^;B, 2005. +# Vietnamese translation for BFD. +# Copyright © 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the binutils package. +# Phần Vĩnh Thịnh , 2005. +# Clytie Siddall , 2008-2009. # msgid "" msgstr "" -"Project-Id-Version: bfd 2.15.96\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-03-05 22:14+1030\n" -"PO-Revision-Date: 2005-06-22 20:01+0400\n" -"Last-Translator: Phan Vinh Thinh \n" -"Language-Team: Vietnamese \n" +"Project-Id-Version: bfd 2.19.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:05+0200\n" +"PO-Revision-Date: 2009-09-18 16:56+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.9.1\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.8\n" -#: aout-adobe.c:204 +#: aout-adobe.c:127 msgid "%B: Unknown section type in a.out.adobe file: %x\n" -msgstr "%B: Không rõ dạng phân đoạn trong tập tin a.out.adobe: %x\n" +msgstr "%B: Không rõ kiểu phần trong tập tin a.out.adobe: %x\n" -#: aout-cris.c:207 +#: aout-cris.c:204 #, c-format msgid "%s: Invalid relocation type exported: %d" -msgstr "%s: Đã xuất dạng phân chia lại sai: %d" +msgstr "%s: Đã xuất kiểu định vị lại không hợp lệ: %d" -#: aout-cris.c:251 +#: aout-cris.c:247 msgid "%B: Invalid relocation type imported: %d" -msgstr "%B: Đã nhập dạng phân chia lại sai: %d" +msgstr "%B: Đã nhập kiểu định vị lại không hợp lệ: %d" -#: aout-cris.c:262 +#: aout-cris.c:258 msgid "%B: Bad relocation record imported: %d" -msgstr "%B: Đã nhập bản ghi phân chia lại xấu: %d" +msgstr "%B: Đã nhập mục ghi định vị lại sai: %d" -#: aoutx.h:1287 aoutx.h:1626 +#: aoutx.h:1271 aoutx.h:1609 #, c-format msgid "%s: can not represent section `%s' in a.out object file format" -msgstr "%s: không mô tả được phân đoạn `%s' trong định dạng tập tin a.out" +msgstr "%s: không thể đại diện phân « %s » trong định dạng tập tin đối tượng a.out" -#: aoutx.h:1592 +#: aoutx.h:1575 #, c-format msgid "%s: can not represent section for symbol `%s' in a.out object file format" -msgstr "%s: không mô tả được phân đoạn cho ký tự `%s' trong định dạng tập tin a.out" +msgstr "%s: không thể đại diện phân cho ký hiệu « %s » trong định dạng tập tin đối tượng a.ou" -#: aoutx.h:1594 +#: aoutx.h:1577 msgid "*unknown*" -msgstr "*không rõ*" +msgstr "• không rõ •" -#: aoutx.h:3682 +#: aoutx.h:3994 aoutx.h:4320 +msgid "%P: %B: unexpected relocation type\n" +msgstr "%P: %B: kiểu định vị lại bất thường\n" + +#: aoutx.h:5354 #, c-format msgid "%s: relocatable link from %s to %s not supported" -msgstr "%s: không hỗ trợ việc liên kết có thể đặt vị trí lại từ %s tới %s" +msgstr "%s: không hỗ trợ liên kết có khả năng định vị lại từ %s sang %s" -#: archive.c:1729 +#: archive.c:2056 msgid "Warning: writing archive was slow: rewriting timestamp\n" -msgstr "Cảnh báo: ghi kho quá chậm: đang ghi lại tem đánh dấu thời gian\n" +msgstr "Cảnh báo : ghi kho quá chậm nên đang ghi lại nhãn thời gian\n" -#: archive.c:1992 +#: archive.c:2342 msgid "Reading archive file mod timestamp" -msgstr "Đang đọc tem đánh dấu thời gian sử đổi của tập tin kho chứa" +msgstr "Đang đọc nhãn thời gian sửa đổi tập tin kho" -#: archive.c:2018 +#: archive.c:2366 msgid "Writing updated armap timestamp" -msgstr "Đang ghi tem đánh dấu thời gian của armap đã đánh dấu" +msgstr "Đang ghi nhãn thời gian armap đã cập nhật" -#: bfd.c:279 +#: bfd.c:375 msgid "No error" -msgstr "Không lỗi" +msgstr "Không có lỗi" -#: bfd.c:280 +#: bfd.c:376 msgid "System call error" msgstr "Lỗi gọi hệ thống" -#: bfd.c:281 +#: bfd.c:377 msgid "Invalid bfd target" -msgstr "Sai đích của bfd" +msgstr "Đích bfd không hợp lệ" -#: bfd.c:282 +#: bfd.c:378 msgid "File in wrong format" -msgstr "Tập tin ở trong định dạng sai" +msgstr "Tập tin có định dạng không đúng" -#: bfd.c:283 +#: bfd.c:379 msgid "Archive object file in wrong format" -msgstr "Tập tin kho vật thể ở trong định dạng sai" +msgstr "Tập tin đối tượng kho có định dạng không đúng" -#: bfd.c:284 +#: bfd.c:380 msgid "Invalid operation" -msgstr "Sai thao tác" +msgstr "Thao tác không hợp lệ" -#: bfd.c:285 +#: bfd.c:381 msgid "Memory exhausted" msgstr "Cạn bộ nhớ" -#: bfd.c:286 +#: bfd.c:382 msgid "No symbols" -msgstr "Không ký tự" +msgstr "Không có ký hiệu" -#: bfd.c:287 +#: bfd.c:383 msgid "Archive has no index; run ranlib to add one" -msgstr "Tập tin kho không có chỉ mục; hãy chạy ranlib để thêm" +msgstr "Kho không có chỉ mục: hãy chạy ranlib để thêm" -#: bfd.c:288 +#: bfd.c:384 msgid "No more archived files" -msgstr "Không còn tập tin kho nào" +msgstr "Không còn có tập tin đã lưu trữ nào nữa" -#: bfd.c:289 +#: bfd.c:385 msgid "Malformed archive" -msgstr "Kho bị lỗi" +msgstr "Kho dạng sai" -#: bfd.c:290 +#: bfd.c:386 msgid "File format not recognized" msgstr "Không nhận ra định dạng tập tin" -#: bfd.c:291 +#: bfd.c:387 msgid "File format is ambiguous" -msgstr "Dạng tập tin không rõ ràng" +msgstr "Định dạng tập tin mơ hồ" -#: bfd.c:292 +#: bfd.c:388 msgid "Section has no contents" msgstr "Phần không có nội dung" -#: bfd.c:293 +#: bfd.c:389 msgid "Nonrepresentable section on output" -msgstr "Không có phần nào trên đầu ra" +msgstr "Kết xuất có phần không thể đại diện được" -#: bfd.c:294 +#: bfd.c:390 msgid "Symbol needs debug section which does not exist" -msgstr "Ký tự cần phần tìm sửa lỗi, và nó không tồn tại" +msgstr "Ký hiệu cần phần gỡ lỗi mà không tồn tại" -#: bfd.c:295 +#: bfd.c:391 msgid "Bad value" -msgstr "Giá trị xấu" +msgstr "Giá trị sai" -#: bfd.c:296 +#: bfd.c:392 msgid "File truncated" -msgstr "Đã cắt ngắn tập tin" +msgstr "Tập tin bị cắt ngắn" -#: bfd.c:297 +#: bfd.c:393 msgid "File too big" msgstr "Tập tin quá lớn" -#: bfd.c:298 +#: bfd.c:394 +#, c-format +msgid "Error reading %s: %s" +msgstr "Gặp lỗi khi đọc %s: %s" + +#: bfd.c:395 msgid "#" -msgstr "#" +msgstr "#" -#: bfd.c:768 +#: bfd.c:919 #, c-format msgid "BFD %s assertion fail %s:%d" -msgstr "BFD %s sự xác nhận không thành công %s:%d" +msgstr "BFD %s khắng định bị lỗi %s:%d" -#: bfd.c:784 +#: bfd.c:931 #, c-format msgid "BFD %s internal error, aborting at %s line %d in %s\n" -msgstr "BFD %s lỗi nội bộ, thoát tại %s dòng %d trong %s\n" +msgstr "BFD %s lỗi nội bộ nên hủy bỏ tại %s dòng %d trong %s\n" -#: bfd.c:788 +#: bfd.c:935 #, c-format msgid "BFD %s internal error, aborting at %s line %d\n" -msgstr "BFD %s lỗi nội bộ, thoát tại %s dòng %d\n" +msgstr "BFD %s lỗi nội bộ nên hủy bỏ tại %s dòng %d\n" -#: bfd.c:790 +#: bfd.c:937 msgid "Please report this bug.\n" -msgstr "Xin hãy báo cáo lỗi này.\n" +msgstr "Hãy thông báo lỗi này.\n" -#: bfdwin.c:202 +#: bfdwin.c:206 #, c-format msgid "not mapping: data=%lx mapped=%d\n" -msgstr "chưa ánh xạ: dữ liệu=%lx đã ánh xạ=%d\n" +msgstr "không đang ánh xạ: dữ liệu=%lx đã ánh xạ=%d\n" -#: bfdwin.c:205 +#: bfdwin.c:209 #, c-format msgid "not mapping: env var not set\n" -msgstr "chưa ánh xạ: không đặt biến môi trường\n" +msgstr "không đang ánh xạ: chưa đặt biến môi trường\n" -#: binary.c:309 +#: binary.c:284 #, c-format msgid "Warning: Writing section `%s' to huge (ie negative) file offset 0x%lx." -msgstr "Cảnh báo: Ghi phần `%s' tới bộ tập tin to lớn (có nghĩa là âm) 0x%lx." - -#: coff64-rs6000.c:2107 coff-rs6000.c:3608 -msgid "%B: symbol `%s' has unrecognized smclas %d" -msgstr "%B: ký tự `%s' có smclas không nhận ra %d" - -#: coff-a29k.c:120 -msgid "Missing IHCONST" -msgstr "Thiếu IHCONST" +msgstr "Cảnh báo : đang ghi phần « %s » vào khoảng bù tập tin rất lớn (tức là âm) 0x%lx." -#: coff-a29k.c:181 -msgid "Missing IHIHALF" -msgstr "Thiếu IHIHALF" +#: bout.c:1150 elf-m10300.c:2078 elf32-avr.c:1639 elf32-frv.c:5743 +#: elf32-xtensa.c:6639 elfxx-sparc.c:2456 reloc.c:5386 reloc16.c:162 +#: vms.c:1918 elf32-ia64.c:788 elf64-ia64.c:788 +msgid "%P%F: --relax and -r may not be used together\n" +msgstr "%P%F: không thể dùng với nhau hai tuỳ chọn « --relax » và « -r »\n" -#: coff-a29k.c:213 coff-or32.c:227 -msgid "Unrecognized reloc" -msgstr "reloc không nhận ra" +#: cache.c:226 +msgid "reopening %B: %s\n" +msgstr "đang mở lại %B: %s\n" -#: coff-a29k.c:409 -msgid "missing IHCONST reloc" -msgstr "thiếu IHCONST reloc" +#: coff-alpha.c:490 +msgid "" +"%B: Cannot handle compressed Alpha binaries.\n" +" Use compiler flags, or objZ, to generate uncompressed binaries." +msgstr "" +"%B: Không thể xử lý tập tin nhị phân Alpha chưa được nén.\n" +"\tHãy dùng các cờ biên dịch, hoặc objZ, để tạo tập tin nhị phân chưa được nén." -#: coff-a29k.c:499 -msgid "missing IHIHALF reloc" -msgstr "thiếu IHIHALF reloc" +#: coff-alpha.c:647 +msgid "%B: unknown/unsupported relocation type %d" +msgstr "%B: kiểu định vị lại không rõ hoặc không được hỗ trợ : %d" -#: coff-alpha.c:881 coff-alpha.c:918 coff-alpha.c:1972 coff-mips.c:985 +#: coff-alpha.c:899 coff-alpha.c:936 coff-alpha.c:2024 coff-mips.c:1003 msgid "GP relative relocation used when GP not defined" -msgstr "Sử dụng định vị lại tương đối GP khi chưa xác định GP" +msgstr "Chưa xác định GP thì sử dụng định vị lại tương đối GP" -#: coff-alpha.c:1467 +#: coff-alpha.c:1501 msgid "using multiple gp values" -msgstr "sử dụng nhiều giá trị gp" +msgstr "đang dùng nhiều giá trị GP" + +#: coff-alpha.c:1560 +msgid "%B: unsupported relocation: ALPHA_R_GPRELHIGH" +msgstr "%B: định vị lại không được hỗ trợ : ALPHA_R_GPRELHIGH" + +#: coff-alpha.c:1567 +msgid "%B: unsupported relocation: ALPHA_R_GPRELLOW" +msgstr "%B: định vị lại không được hỗ trợ : ALPHA_R_GPRELLOW" + +#: coff-alpha.c:1574 elf32-m32r.c:2477 elf64-alpha.c:3943 elf64-alpha.c:4098 +#: elf32-ia64.c:4462 elf64-ia64.c:4462 +msgid "%B: unknown relocation type %d" +msgstr "%B: không rõ kiểu định vị lại %d" -#: coff-arm.c:1066 elf32-arm.c:1425 +#: coff-arm.c:1039 #, c-format msgid "%B: unable to find THUMB glue '%s' for `%s'" -msgstr "%B: không tìm thấy dán THUMB '%s' cho `%s'" +msgstr "%B: không tìm thấy keo hồ THUMB « %s » cho « %s »" -#: coff-arm.c:1096 elf32-arm.c:1459 +#: coff-arm.c:1068 #, c-format msgid "%B: unable to find ARM glue '%s' for `%s'" -msgstr "%B: không tìm thấy dán ARM '%s' cho `%s'" +msgstr "%B: không tìm thấy keo hồ ARM « %s » cho « %s »" -#: coff-arm.c:1394 elf32-arm.c:2165 +#: coff-arm.c:1370 elf32-arm.c:6372 #, c-format msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: arm call to thumb" msgstr "" -"%B(%s): cảnh báo: chưa bật dùng ảnh hưởng lẫn nhau.\n" +"%B(%s): cảnh báo : chưa bật dùng ảnh hưởng lẫn nhau.\n" " lần xuất hiện đầu tiên: %B: gọi arm tới thumb" -#: coff-arm.c:1484 +#: coff-arm.c:1460 #, c-format msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: thumb call to arm\n" " consider relinking with --support-old-code enabled" msgstr "" -"%B(%s): cảnh báo: chưa bật dùng ảnh hưởng lẫn nhau.\n" +"%B(%s): cảnh báo : chưa bật dùng ảnh hưởng lẫn nhau.\n" " lần xuất hiện đầu tiên: %B: gọi thumb tới arm\n" -" coi như liên kết lại với --support-old-code bật" +" coi như liên kết lại với « --support-old-code » được bật" -#: coff-arm.c:1776 cofflink.c:3013 coff-tic80.c:687 +#: coff-arm.c:1755 coff-tic80.c:695 cofflink.c:3027 msgid "%B: bad reloc address 0x%lx in section `%A'" -msgstr "%B: địa chỉ reloc xấu 0x%lx trong phần `%A'" +msgstr "%B: địa chỉ định vị lại sai 0x%lx trong phần « %A »" -#: coff-arm.c:2110 +#: coff-arm.c:2080 msgid "%B: illegal symbol index in reloc: %d" -msgstr "%B: chỉ mục ký tự không cho phép trong reloc: %d" +msgstr "%B: chỉ mục ký hiệu cấm trong định vị lại: %d" -#: coff-arm.c:2243 +#: coff-arm.c:2211 #, c-format -msgid "ERROR: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" -msgstr "LỖI: %B được biên dịch cho APCS-%d, trong khi %B được biên dịch cho APCS-%d" +msgid "error: %B is compiled for APCS-%d, whereas %B is compiled for APCS-%d" +msgstr "lỗi: %B được biên dịch cho APCS-%d, còn %B được biên dịch cho APCS-%d" -#: coff-arm.c:2259 elf32-arm.c:3583 +#: coff-arm.c:2227 elf32-arm.c:10327 #, c-format -msgid "ERROR: %B passes floats in float registers, whereas %B passes them in integer registers" -msgstr "LỖI: %B đi qua trôi trong bản ghi trôi, trong khi %B đi qua chúng trong bản ghi số nguyên" +msgid "error: %B passes floats in float registers, whereas %B passes them in integer registers" +msgstr "lỗi: %B gửi trôi qua trong thanh ghi trôi, còn %B gửi chúng qua trong thanh ghi số nguyên" -#: coff-arm.c:2262 elf32-arm.c:3587 +#: coff-arm.c:2230 elf32-arm.c:10331 #, c-format -msgid "ERROR: %B passes floats in integer registers, whereas %B passes them in float registers" -msgstr "LỖI: %B đi qua trôi trong bản ghi số nguyên, trong khi %B đi qua chúng trong bản ghi trôi" +msgid "error: %B passes floats in integer registers, whereas %B passes them in float registers" +msgstr "lỗi: %B gửi trôi qua trong thanh ghi số nguyên, còn %B gửi chúng qua trong thanh ghi trôi" -#: coff-arm.c:2276 +#: coff-arm.c:2244 #, c-format -msgid "ERROR: %B is compiled as position independent code, whereas target %B is absolute position" -msgstr "LỖI: %B được biên dịch như mã không phụ thuộc vị trí, trong khi %B là vị trí tuyệt đối" +msgid "error: %B is compiled as position independent code, whereas target %B is absolute position" +msgstr "lỗi: %B được biên dịch như mã không phụ thuộc vào vị trí, còn %B là vị trí tuyệt đối" -#: coff-arm.c:2279 +#: coff-arm.c:2247 #, c-format -msgid "ERROR: %B is compiled as absolute position code, whereas target %B is position independent" -msgstr "LỖI: %B được biên dịch như mã vị trí tuyệt đối, trong khi %B phụ thuộc vị trí" +msgid "error: %B is compiled as absolute position code, whereas target %B is position independent" +msgstr "lỗi: %B được biên dịch như mã vị trí tuyệt đối, còn %B không phụ thuộc vào vị trí" -#: coff-arm.c:2307 elf32-arm.c:3652 +#: coff-arm.c:2275 elf32-arm.c:10396 #, c-format msgid "Warning: %B supports interworking, whereas %B does not" -msgstr "Cảnh báo: %B hỗ trợ ảnh hưởng lẫn nhau, trong khi %B thì không" +msgstr "Cảnh báo : %B hỗ trợ ảnh hưởng lẫn nhau, còn %B thì không" -#: coff-arm.c:2310 elf32-arm.c:3658 +#: coff-arm.c:2278 elf32-arm.c:10402 #, c-format msgid "Warning: %B does not support interworking, whereas %B does" -msgstr "Cảnh báo: %B không hỗ trợ ảnh hưởng lẫn nhau, trong khi %B có" +msgstr "Cảnh báo : %B không hỗ trợ ảnh hưởng lẫn nhau, còn %B thì có" -#: coff-arm.c:2336 +#: coff-arm.c:2302 #, c-format msgid "private flags = %x:" -msgstr "cờ cá nhân = %x:" +msgstr "các cờ riêng = %x:" -#: coff-arm.c:2344 elf32-arm.c:3709 +#: coff-arm.c:2310 elf32-arm.c:10453 #, c-format msgid " [floats passed in float registers]" -msgstr " [trôi đi qua trong bản ghi trôi]" +msgstr " [các trôi được gửi qua trong thanh ghi trôi]" -#: coff-arm.c:2346 +#: coff-arm.c:2312 #, c-format msgid " [floats passed in integer registers]" -msgstr " [trôi đi qua trong bản ghi số nguyên]" +msgstr " [các trôi được gửi qua trong thanh ghi số nguyên]" -#: coff-arm.c:2349 elf32-arm.c:3712 +#: coff-arm.c:2315 elf32-arm.c:10456 #, c-format msgid " [position independent]" -msgstr " [không phụ thuộc vị trí]" +msgstr " [không phụ thuộc vào vị trí]" -#: coff-arm.c:2351 +#: coff-arm.c:2317 #, c-format msgid " [absolute position]" msgstr " [vị trí tuyệt đối]" -#: coff-arm.c:2355 +#: coff-arm.c:2321 #, c-format msgid " [interworking flag not initialised]" -msgstr " [chưa đặt cờ ảnh hưởng lẫn nhau]" +msgstr " [chưa sở khởi cờ ảnh hưởng lẫn nhau]" -#: coff-arm.c:2357 +#: coff-arm.c:2323 #, c-format msgid " [interworking supported]" msgstr " [hỗ trợ ảnh hưởng lẫn nhau]" -#: coff-arm.c:2359 +#: coff-arm.c:2325 #, c-format msgid " [interworking not supported]" msgstr " [không hỗ trợ ảnh hưởng lẫn nhau]" -#: coff-arm.c:2407 elf32-arm.c:3390 +#: coff-arm.c:2371 elf32-arm.c:9360 #, c-format msgid "Warning: Not setting interworking flag of %B since it has already been specified as non-interworking" -msgstr "Cảnh báo: Chưa thiết lập cờ ảnh hưởng lẫn nhau của %B vì nó đã được xác định là không ảnh hưởng lẫn nhau" +msgstr "Cảnh báo : không đang đặt cờ ảnh hưởng lẫn nhau của %B vì nó đã được xác định là không ảnh hưởng lẫn nhau" -#: coff-arm.c:2411 elf32-arm.c:3394 +#: coff-arm.c:2375 elf32-arm.c:9364 #, c-format msgid "Warning: Clearing the interworking flag of %B due to outside request" -msgstr "Cảnh báo: Đang xoá cờ ảnh hưởng lẫn nhau của %B theo yêu cầu bên ngoài" - -#: coffcode.h:859 -msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" -msgstr "%B: cảnh báo: ký tự COMDAT '%s' không tương ứng tên phần '%s'" - -#. Generate a warning message rather using the 'unhandled' -#. variable as this will allow some .sys files generate by -#. other toolchains to be processed. See bugzilla issue 196. -#: coffcode.h:1072 -msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" -msgstr "%B: Cảnh báo: Đang lờ đi cờ của phần IMAGE_SCN_MEM_NOT_PAGED trong phần %s" - -#: coffcode.h:1127 -msgid "%B (%s): Section flag %s (0x%x) ignored" -msgstr "%B (%s): Đã lờ đi cờ của phần %s (0x%x)" - -#: coffcode.h:2255 -#, c-format -msgid "Unrecognized TI COFF target id '0x%x'" -msgstr "Không nhận ra id đích của TI COFF '0x%x'" - -#: coffcode.h:4375 -msgid "%B: warning: line number table read failed" -msgstr "%B: cảnh báo: đọc bảng số thứ tự dòng không thành công" - -#: coffcode.h:4407 -msgid "%B: warning: illegal symbol index %ld in line numbers" -msgstr "%B: cảnh báo: chỉ mục ký tự không cho phép %ld trong các số thứ tự dòng" - -#: coffcode.h:4421 -msgid "%B: warning: duplicate line number information for `%s'" -msgstr "%B: cảnh báo: thông tin về số dòng lặp lại cho `%s'" - -#: coffcode.h:4771 -msgid "%B: Unrecognized storage class %d for %s symbol `%s'" -msgstr "%B: Không nhận ra lớp của kho %d cho %s ký tự `%s'" - -#: coffcode.h:4904 -msgid "warning: %B: local symbol `%s' has no section" -msgstr "cảnh báo: %B: ký tự nội bộ `%s' không có phần đoạn" - -#: coffcode.h:5010 coff-i860.c:586 coff-tic54x.c:376 -msgid "%B: warning: illegal symbol index %ld in relocs" -msgstr "%B: cảnh báo: chỉ mục ký tự không cho phép %ld trong các reloc" - -#: coffcode.h:5048 -msgid "%B: illegal relocation type %d at address 0x%lx" -msgstr "%B: dạng reloc không cho phép %d tại địa chỉ 0x%lx" - -#: coffgen.c:1594 -msgid "%B: bad string table size %lu" -msgstr "%B: kích thước bảng chuỗi xấu %lu" +msgstr "Cảnh báo : Đang xoá cờ ảnh hưởng lẫn nhau của %B theo yêu cầu bên ngoài" -#: coff-h8300.c:1126 +#: coff-h8300.c:1122 #, c-format msgid "cannot handle R_MEM_INDIRECT reloc when using %s output" -msgstr "không điều khiển được reloc R_MEM_INDIRECT khi sử dụng đầu ra %s" +msgstr "không thể xử lý định vị lại R_MEM_INDIRECT khi sử dụng kết xuất %s" -#: coff-i860.c:142 +#: coff-i860.c:147 #, c-format msgid "Relocation `%s' not yet implemented\n" -msgstr "Chưa phát triển reloc `%s'\n" - -#: coff-i960.c:137 coff-i960.c:486 -msgid "uncertain calling convention for non-COFF symbol" -msgstr "quy ước gọi không chắc chắn cho ký tự không phải COFF" - -#: cofflink.c:507 elflink.c:3955 -msgid "Warning: type of symbol `%s' changed from %d to %d in %B" -msgstr "Cảnh báo: dạng của ký tự `%s' thay đổi từ %d thành %d trong %B" - -#: cofflink.c:2293 -msgid "%B: relocs in section `%A', but it has no contents" -msgstr "%B: reloc trong phần `%A', nhưng không có nội dung" +msgstr "Chưa thực hiện định vị lại « %s »\n" -#: cofflink.c:2624 coffswap.h:890 -#, c-format -msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" -msgstr "%s: %s: reloc vượt quá giới hạn: 0x%lx > 0xffff" +#: coff-i860.c:605 coff-tic54x.c:398 coffcode.h:5143 +msgid "%B: warning: illegal symbol index %ld in relocs" +msgstr "%B: cảnh báo : chỉ mục ký hiệu cấm %ld trong định vị lại" -#: cofflink.c:2633 coffswap.h:876 -#, c-format -msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" -msgstr "%s: cảnh báo: %s: số dòng vượt quá giới hạn: 0x%lx > 0xffff" +#: coff-i960.c:143 coff-i960.c:506 +msgid "uncertain calling convention for non-COFF symbol" +msgstr "quy ước gọi không chắc chắn cho ký hiệu khác COFF" -#: coff-m68k.c:482 elf32-m68k.c:2128 +#: coff-m68k.c:506 elf32-bfin.c:5693 elf32-cr16.c:2965 elf32-m68k.c:4615 msgid "unsupported reloc type" -msgstr "dạng reloc chưa hỗ trợ" +msgstr "kiểu định vị lại không được hỗ trợ" -#: coff-maxq.c:128 +#: coff-maxq.c:126 msgid "Can't Make it a Short Jump" -msgstr "Không thể Làm nó một Bước nhảy Ngắn" +msgstr "Không thể làm nó một bước nhảy ngắn" -#: coff-maxq.c:193 +#: coff-maxq.c:191 msgid "Exceeds Long Jump Range" -msgstr "Vượt quá Phạm vi Bước nhảy Dài" +msgstr "Vượt quá phạm vi bước nhảy dài" -#: coff-maxq.c:204 coff-maxq.c:278 +#: coff-maxq.c:202 coff-maxq.c:276 msgid "Absolute address Exceeds 16 bit Range" -msgstr "Địa chỉ tuyệt đối Vượt quá Phạm vi 16 bit" +msgstr "Địa chỉ tuyệt đối vượt quá phạm vi 16 bit" -#: coff-maxq.c:242 +#: coff-maxq.c:240 msgid "Absolute address Exceeds 8 bit Range" -msgstr "Địa chỉ tuyệt đối Vượt quá Phạm vi 8 bit" +msgstr "Địa chỉ tuyệt đối vượt quá phạm vi 8 bit" -#: coff-maxq.c:335 +#: coff-maxq.c:333 msgid "Unrecognized Reloc Type" -msgstr "Dạng Reloc Không nhận ra" +msgstr "Kiểu định vị lại không được nhận ra" -#: coff-mips.c:686 elf32-mips.c:940 elf64-mips.c:1864 elfn32-mips.c:1718 +#: coff-mips.c:688 elf32-mips.c:1014 elf32-score.c:441 elf32-score7.c:341 +#: elf64-mips.c:2018 elfn32-mips.c:1832 msgid "GP relative relocation when _gp not defined" -msgstr "Reloc GP tương ứng khi chưa xác định _gp" +msgstr "Có định vị lại tương đối GP khi chưa xác định _gp" + +#: coff-or32.c:229 +msgid "Unrecognized reloc" +msgstr "Định vị lại không được nhận ra" -#: coff-rs6000.c:2783 +#: coff-rs6000.c:2787 #, c-format msgid "%s: unsupported relocation type 0x%02x" -msgstr "%s: dạng reloc chưa hỗ trợ 0x%02x" +msgstr "%s: kiểu định vị lại không được hỗ trợ 0x%02x" -#: coff-rs6000.c:2876 +#: coff-rs6000.c:2880 #, c-format msgid "%s: TOC reloc at 0x%x to symbol `%s' with no TOC entry" -msgstr "%s: TOC reloc tại 0x%x tới ký tự `%s' không có mục TOC" +msgstr "%s: định vị lại TOC tại 0x%x tới ký hiệu « %s » không có mục nhập TOC" + +#: coff-rs6000.c:3646 coff64-rs6000.c:2168 +msgid "%B: symbol `%s' has unrecognized smclas %d" +msgstr "%B: ký tự « %s » có smclas không nhận ra %d" -#: coff-tic4x.c:174 coff-tic54x.c:282 coff-tic80.c:450 +#: coff-tic4x.c:195 coff-tic54x.c:299 coff-tic80.c:458 #, c-format msgid "Unrecognized reloc type 0x%x" -msgstr "Dạng reloc không nhận ra 0x%x" +msgstr "Không nhận ra kiểu định vị lại 0x%x" -#: coff-tic4x.c:219 +#: coff-tic4x.c:240 #, c-format msgid "%s: warning: illegal symbol index %ld in relocs" -msgstr "%s: cảnh báo: chỉ mục ký tự không cho phép %ld trong các reloc" +msgstr "%s: cảnh báo : chỉ mục ký hiệu cấm %ld trong các định vị lại" -#: coff-w65.c:366 +#: coff-w65.c:367 #, c-format msgid "ignoring reloc %s\n" -msgstr "lờ đi reloc %s\n" +msgstr "Đang lờ đi định vị lại %s\n" + +#: coffcode.h:960 +msgid "%B: warning: COMDAT symbol '%s' does not match section name '%s'" +msgstr "%B: cảnh báo : ký hiệu COMDAT « %s » không tương ứng vơi tên phần « %s »" + +#. Generate a warning message rather using the 'unhandled' +#. variable as this will allow some .sys files generate by +#. other toolchains to be processed. See bugzilla issue 196. +#: coffcode.h:1176 +msgid "%B: Warning: Ignoring section flag IMAGE_SCN_MEM_NOT_PAGED in section %s" +msgstr "%B: Cảnh báo: Đang lờ đi cờ của phần IMAGE_SCN_MEM_NOT_PAGED trong phần %s" -#: cpu-arm.c:184 cpu-arm.c:193 -msgid "ERROR: %B is compiled for the EP9312, whereas %B is compiled for XScale" -msgstr "LỖI: %B được biên dịch cho EP9312, trong khi %B được biên dịch cho XScale" +#: coffcode.h:1240 +msgid "%B (%s): Section flag %s (0x%x) ignored" +msgstr "%B (%s): Đã lờ đi cờ của phần %s (0x%x)" -#: cpu-arm.c:324 +#: coffcode.h:2382 #, c-format -msgid "warning: unable to update contents of %s section in %s" -msgstr "cảnh báo: không cập nhật được nội dung của phần %s trong %s" +msgid "Unrecognized TI COFF target id '0x%x'" +msgstr "Không nhận ra mã số đích TI COFF « 0x%x »" + +#: coffcode.h:2696 +msgid "%B: reloc against a non-existant symbol index: %ld" +msgstr "%B: định vị lại so với một chỉ mục ký hiệu không tồn tại: %ld" + +#: coffcode.h:3669 +msgid "%B: section %s: string table overflow at offset %ld" +msgstr "%B: phần %s: tràn bảng chuỗi ở hiệu %ld" + +#: coffcode.h:4477 +msgid "%B: warning: line number table read failed" +msgstr "%B: Cảnh bảo : lỗi đọc bảng số thứ tự dòng" + +#: coffcode.h:4507 +msgid "%B: warning: illegal symbol index %ld in line numbers" +msgstr "%B: cảnh báo : chỉ mục ký hiệu cấm %ld trong các số thứ tự dòng" + +#: coffcode.h:4521 +msgid "%B: warning: duplicate line number information for `%s'" +msgstr "%B: cảnh báo : thông tin số thứ tự dòng trùng đối với « %s »" + +#: coffcode.h:4912 +msgid "%B: Unrecognized storage class %d for %s symbol `%s'" +msgstr "%B: Không nhận ra hạng lưu trữ %d cho ký hiệu %s « %s »" + +#: coffcode.h:5038 +msgid "warning: %B: local symbol `%s' has no section" +msgstr "cảnh báo : %B: ký hiệu cục bộ « %s » không có phần đoạn" + +#: coffcode.h:5181 +msgid "%B: illegal relocation type %d at address 0x%lx" +msgstr "%B: kiểu định vị lại cấm %d ở địa chỉ 0x%lx" + +#: coffgen.c:1571 +msgid "%B: bad string table size %lu" +msgstr "%B: kích cỡ bảng chuỗi sai %lu" + +#: cofflink.c:513 elflink.c:4307 +msgid "Warning: type of symbol `%s' changed from %d to %d in %B" +msgstr "Cảnh báo : kiểu ký hiệu « %s » bị thay đổi từ %d thành %d trong %B" + +#: cofflink.c:2305 +msgid "%B: relocs in section `%A', but it has no contents" +msgstr "%B: định vị lại trong phần « %A », nhưng nó không có nội dung" -#: dwarf2.c:296 -msgid "Dwarf Error: Can't find .debug_str section." -msgstr "Lỗi Dwarf: Không tìm thấy phần .debug_str." +#: cofflink.c:2636 coffswap.h:826 +#, c-format +msgid "%s: %s: reloc overflow: 0x%lx > 0xffff" +msgstr "%s: %s: tràn định vị lại: 0x%lx > 0xffff" -#: dwarf2.c:314 +#: cofflink.c:2645 coffswap.h:812 #, c-format -msgid "Dwarf Error: DW_FORM_strp offset (%lu) greater than or equal to .debug_str size (%lu)." -msgstr "Lỗi Dwarf: DW_FORM_strp (%lu) lớn hơn hoặc bằng kích thước .debug_str (%lu)." +msgid "%s: warning: %s: line number overflow: 0x%lx > 0xffff" +msgstr "%s: cảnh báo : %s: tràn số thứ tự dòng: 0x%lx > 0xffff" -#: dwarf2.c:388 -msgid "Dwarf Error: Can't find .debug_abbrev section." -msgstr "Lỗi Dwarf: Không tìm thấy phần .debug_abbrev." +#: cpu-arm.c:189 cpu-arm.c:200 +msgid "error: %B is compiled for the EP9312, whereas %B is compiled for XScale" +msgstr "lỗi: %B được biên dịch cho EP9312, còn %B được biên dịch cho XScale" -#: dwarf2.c:403 +#: cpu-arm.c:332 #, c-format -msgid "Dwarf Error: Abbrev offset (%lu) greater than or equal to .debug_abbrev size (%lu)." -msgstr "Lỗi Dwarf: Abbrev (%lu) lớn hơn hoặc bằng kích thước .debug_abbrev (%lu)." +msgid "warning: unable to update contents of %s section in %s" +msgstr "cảnh báo : không thể cập nhật nội dung của phần %s trong %s" -#: dwarf2.c:601 +#: dwarf2.c:430 #, c-format -msgid "Dwarf Error: Invalid or unhandled FORM value: %u." -msgstr "Lỗi Dwarf: Giá trị FORM sai hoặc không thể điều khiển: %u." +msgid "Dwarf Error: Can't find %s section." +msgstr "Lỗi Dwarf: không tìm thấy phần %s." -#: dwarf2.c:773 -msgid "Dwarf Error: mangled line number section (bad file number)." -msgstr "Lỗi Dwarf: phần số dòng bị hỏng (số của tập tin xấu)." +#: dwarf2.c:457 +#, c-format +msgid "Dwarf Error: unable to decompress %s section." +msgstr "Lỗi Dwarf: không thể giải nén phần %s." -#: dwarf2.c:866 -msgid "Dwarf Error: Can't find .debug_line section." -msgstr "Lỗi Dwarf: Không tìm thấy phần .debug_line." +#: dwarf2.c:468 +#, c-format +msgid "Dwarf Error: Offset (%lu) greater than or equal to %s size (%lu)." +msgstr "Lỗi Dwarf: Khoảng bù dòng (%lu) lớn hơn hoặc bằng kích cỡ %s (%lu)." -#: dwarf2.c:883 +#: dwarf2.c:865 #, c-format -msgid "Dwarf Error: Line offset (%lu) greater than or equal to .debug_line size (%lu)." -msgstr "Lỗi Dwarf: Dòng (%lu) lớn hơn hoặc bằng kích thước .debug_line (%lu)." +msgid "Dwarf Error: Invalid or unhandled FORM value: %u." +msgstr "Lỗi Dwarf: Giá trị FORM sai hoặc chưa được xử lý: %u." -#: dwarf2.c:1088 +#: dwarf2.c:1079 +msgid "Dwarf Error: mangled line number section (bad file number)." +msgstr "Lỗi Dwarf: phần số thứ tự dòng đã rối (số thứ tự tập tin sai)." + +#: dwarf2.c:1413 msgid "Dwarf Error: mangled line number section." -msgstr "Lỗi Dwarf: phần số dòng xấu." +msgstr "Lỗi Dwarf: phần số thứ tự dòng đã rối." -#: dwarf2.c:1285 dwarf2.c:1343 dwarf2.c:1498 +#: dwarf2.c:1760 dwarf2.c:1867 dwarf2.c:2139 #, c-format msgid "Dwarf Error: Could not find abbrev number %u." -msgstr "Lỗi Dwarf: Không tìm thấy số của abbrev %u." +msgstr "Lỗi Dwarf: Không tìm thấy số viết tắt %u." -#: dwarf2.c:1459 +#: dwarf2.c:2100 #, c-format -msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 information." -msgstr "Lỗi Dwarf: tìm thấy dwarf phiên bản '%u', trình đọc này chỉ điều khiển thông tin phiên bản 2." +msgid "Dwarf Error: found dwarf version '%u', this reader only handles version 2 and 3 information." +msgstr "Lỗi Dwarf: tìm thấy dwarf phiên bản « %u », nhưng trình đọc này chỉ điều khiển thông tin của phiên bản 2 và 3." -#: dwarf2.c:1466 +#: dwarf2.c:2107 #, c-format msgid "Dwarf Error: found address size '%u', this reader can not handle sizes greater than '%u'." -msgstr "Lỗi Dwarf: tìm thấy kích thước địa chỉ '%u', trình đọc này không điều khiển được kích thước lớn hơn '%u'." +msgstr "Lỗi Dwarf: tìm thấy kích cỡ địa chỉ « %u », nhưng trình đọc này không điều khiển được kích cỡ lớn hơn « %u »." -#: dwarf2.c:1489 +#: dwarf2.c:2130 #, c-format msgid "Dwarf Error: Bad abbrev number: %u." -msgstr "Lỗi Dwarf: Số abbrev xấu: %u." +msgstr "Lỗi Dwarf: Số viết tắt sai: %u." -#: ecoff.c:1269 +#: ecoff.c:1238 #, c-format msgid "Unknown basic type %d" -msgstr "Không rõ dạng cơ bản %d" +msgstr "Không rõ kiểu cơ bản %d" -#: ecoff.c:1529 +#: ecoff.c:1495 #, c-format msgid "" "\n" @@ -552,7 +580,7 @@ msgstr "" "\n" " Ký hiệu End+1: %ld" -#: ecoff.c:1536 ecoff.c:1539 +#: ecoff.c:1502 ecoff.c:1505 #, c-format msgid "" "\n" @@ -561,25 +589,25 @@ msgstr "" "\n" " Ký hiệu đầu tiên: %ld" -#: ecoff.c:1551 +#: ecoff.c:1517 #, c-format msgid "" "\n" " End+1 symbol: %-7ld Type: %s" msgstr "" "\n" -" Ký hiệu End+1: %-7ld Dạng: %s" +" Ký hiệu End+1: %-7ld Kiểu : %s" -#: ecoff.c:1558 +#: ecoff.c:1524 #, c-format msgid "" "\n" " Local symbol: %ld" msgstr "" "\n" -" Ký hiệu nội bộ: %ld" +" Ký hiệu cục bộ : %ld" -#: ecoff.c:1566 +#: ecoff.c:1532 #, c-format msgid "" "\n" @@ -588,7 +616,7 @@ msgstr "" "\n" " cấu trúc; ký hiệu End+1: %ld" -#: ecoff.c:1571 +#: ecoff.c:1537 #, c-format msgid "" "\n" @@ -597,7 +625,7 @@ msgstr "" "\n" " kết hợp; ký hiệu End+1: %ld" -#: ecoff.c:1576 +#: ecoff.c:1542 #, c-format msgid "" "\n" @@ -606,1212 +634,1883 @@ msgstr "" "\n" " đếm; ký hiệu End+1: %ld" -#: ecoff.c:1582 +#: ecoff.c:1548 #, c-format msgid "" "\n" " Type: %s" msgstr "" "\n" -" Dạng: %s" +" Kiểu : %s" + +#: elf-attrs.c:567 +msgid "error: %B: Must be processed by '%s' toolchain" +msgstr "lỗi: %B: Phải được dãy công cụ « %s » xử lý" + +#: elf-attrs.c:575 +msgid "error: %B: Object tag '%d, %s' is incompatible with tag '%d, %s'" +msgstr "lỗi: %B: thẻ đối tượng « %d, %s » không tương thích với thẻ « %d, %s »" + +#: elf-eh-frame.c:884 +msgid "%P: error in %B(%A); no .eh_frame_hdr table will be created.\n" +msgstr "%P: gặp lỗi trong %B(%A); sẽ không tạo bảng .eh_frame_hdr nào.\n" + +#: elf-eh-frame.c:1122 +msgid "%P: fde encoding in %B(%A) prevents .eh_frame_hdr table being created.\n" +msgstr "%P: biên mã fde trong %B(%A) thì ngăn cản tạo bảng .eh_frame_hdr.\n" + +#: elf-ifunc.c:179 +msgid "%F%P: dynamic STT_GNU_IFUNC symbol `%s' with pointer equality in `%B' can not be used when making an executable; recompile with -fPIE and relink with -pie\n" +msgstr "%F%P: ký hiệu STT_GNU_IFUNC động « %s » với tình trạng chất lượng con trỏ trong « %B » thì không dùng được khi tạo bản thực thi; hãy biên dịch lại với « -fPIE » và liên kết lại với « -pie »\n" + +#: elf-m10200.c:456 elf-m10300.c:1575 elf32-avr.c:1251 elf32-bfin.c:3200 +#: elf32-cr16.c:1517 elf32-cr16c.c:790 elf32-cris.c:2089 elf32-crx.c:933 +#: elf32-d10v.c:516 elf32-fr30.c:616 elf32-frv.c:4114 elf32-h8300.c:516 +#: elf32-i860.c:1218 elf32-ip2k.c:1499 elf32-iq2000.c:691 elf32-lm32.c:1171 +#: elf32-m32c.c:560 elf32-m32r.c:3102 elf32-m68hc1x.c:1136 elf32-mep.c:541 +#: elf32-microblaze.c:1226 elf32-moxie.c:291 elf32-msp430.c:493 elf32-mt.c:402 +#: elf32-openrisc.c:411 elf32-score.c:2752 elf32-score7.c:2591 +#: elf32-spu.c:5045 elf32-v850.c:1701 elf32-xstormy16.c:948 elf64-mmix.c:1533 +msgid "internal error: out of range error" +msgstr "lỗi nội bộ : lỗi ở ngoại phạm vi" + +#: elf-m10200.c:460 elf-m10300.c:1579 elf32-avr.c:1255 elf32-bfin.c:3204 +#: elf32-cr16.c:1521 elf32-cr16c.c:794 elf32-cris.c:2093 elf32-crx.c:937 +#: elf32-d10v.c:520 elf32-fr30.c:620 elf32-frv.c:4118 elf32-h8300.c:520 +#: elf32-i860.c:1222 elf32-iq2000.c:695 elf32-lm32.c:1175 elf32-m32c.c:564 +#: elf32-m32r.c:3106 elf32-m68hc1x.c:1140 elf32-mep.c:545 +#: elf32-microblaze.c:1230 elf32-moxie.c:295 elf32-msp430.c:497 +#: elf32-openrisc.c:415 elf32-score.c:2756 elf32-score7.c:2595 +#: elf32-spu.c:5049 elf32-v850.c:1705 elf32-xstormy16.c:952 elf64-mmix.c:1537 +#: elfxx-mips.c:9103 +msgid "internal error: unsupported relocation error" +msgstr "lỗi nội bộ : lỗi định vị lại không được hỗ trợ" + +#: elf-m10200.c:464 elf32-cr16.c:1525 elf32-cr16c.c:798 elf32-crx.c:941 +#: elf32-d10v.c:524 elf32-h8300.c:524 elf32-lm32.c:1179 elf32-m32r.c:3110 +#: elf32-m68hc1x.c:1144 elf32-microblaze.c:1234 elf32-score.c:2760 +#: elf32-score7.c:2599 elf32-spu.c:5053 +msgid "internal error: dangerous error" +msgstr "lỗi nội bộ : lỗi nguy hiểm" + +#: elf-m10200.c:468 elf-m10300.c:1592 elf32-avr.c:1263 elf32-bfin.c:3212 +#: elf32-cr16.c:1529 elf32-cr16c.c:802 elf32-cris.c:2101 elf32-crx.c:945 +#: elf32-d10v.c:528 elf32-fr30.c:628 elf32-frv.c:4126 elf32-h8300.c:528 +#: elf32-i860.c:1230 elf32-ip2k.c:1514 elf32-iq2000.c:703 elf32-lm32.c:1183 +#: elf32-m32c.c:572 elf32-m32r.c:3114 elf32-m68hc1x.c:1148 elf32-mep.c:553 +#: elf32-microblaze.c:1238 elf32-moxie.c:303 elf32-msp430.c:505 elf32-mt.c:410 +#: elf32-openrisc.c:423 elf32-score.c:2769 elf32-score7.c:2603 +#: elf32-spu.c:5057 elf32-v850.c:1725 elf32-xstormy16.c:960 elf64-mmix.c:1545 +msgid "internal error: unknown error" +msgstr "lỗi nội bộ : lỗi không rõ" + +#: elf-m10300.c:1512 elf32-arm.c:8963 elf32-i386.c:3984 elf32-m32r.c:2588 +#: elf32-m68k.c:4099 elf32-ppc.c:7906 elf32-s390.c:3015 elf32-sh.c:3429 +#: elf32-xtensa.c:3027 elf64-ppc.c:12063 elf64-s390.c:2974 elf64-sh64.c:1648 +#: elf64-x86-64.c:3657 elfxx-sparc.c:3317 +msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): định vị lại không thể giải quyết %s đối với ký hiệu « %s »" + +#: elf-m10300.c:1584 +msgid "error: inappropriate relocation type for shared library (did you forget -fpic?)" +msgstr "lỗi: kiểu định vị lại không thích hợp cho thư viện chia sẻ (bạn đã quên đặt -fpic không?)" + +#: elf-m10300.c:1587 +msgid "internal error: suspicious relocation type used in shared library" +msgstr "lỗi nội bộ: kiểu định vị lại đáng ngờ được dùng trong thư viện chia sẻ" + +#: elf-m10300.c:4385 elf32-arm.c:11346 elf32-cr16.c:2519 elf32-cris.c:3030 +#: elf32-hppa.c:1891 elf32-i370.c:506 elf32-i386.c:1975 elf32-lm32.c:1873 +#: elf32-m32r.c:1921 elf32-m68k.c:3188 elf32-ppc.c:4953 elf32-s390.c:1650 +#: elf32-sh.c:2574 elf32-vax.c:1052 elf64-ppc.c:6348 elf64-s390.c:1623 +#: elf64-sh64.c:3396 elf64-x86-64.c:1821 elfxx-sparc.c:1802 +#, c-format +msgid "dynamic variable `%s' is zero size" +msgstr "biến động « %s » có kích cỡ số không" + +#: elf.c:329 +msgid "%B: invalid string offset %u >= %lu for section `%s'" +msgstr "%B: khoảng bù chuỗi không hợp lệ %u≥%lu cho phần « %s »" + +#: elf.c:439 +msgid "%B symbol number %lu references nonexistent SHT_SYMTAB_SHNDX section" +msgstr "%B số thứ tự ký hiệu %lu tham chiếu đến phần SHT_SYMTAB_SHNDX không tồn tại" + +#: elf.c:595 +msgid "%B: Corrupt size field in group section header: 0x%lx" +msgstr "%B: Trường kích cỡ bị hỏng trong phần đầu của phần nhóm: 0x%lx" + +#: elf.c:631 +msgid "%B: invalid SHT_GROUP entry" +msgstr "%B: mục nhập SHT_GROUP không hợp lệ" + +#: elf.c:701 +msgid "%B: no group info for section %A" +msgstr "%B: không có thông tin nhóm về phần %A" + +#: elf.c:730 elf.c:2960 elflink.c:9912 +msgid "%B: warning: sh_link not set for section `%A'" +msgstr "%B: cảnh báo : « sh_link » chưa được đặt cho phần « %A »" + +#: elf.c:749 +msgid "%B: sh_link [%d] in section `%A' is incorrect" +msgstr "%B: sh_link [%d] không đúng trong phần « %A »" + +#: elf.c:784 +msgid "%B: unknown [%d] section `%s' in group [%s]" +msgstr "%B: không rõ [%d] phần « %s » trong nhóm [%s]" + +#: elf.c:1104 +#, c-format +msgid "" +"\n" +"Program Header:\n" +msgstr "" +"\n" +"Phần đầu chương trình:\n" + +#: elf.c:1146 +#, c-format +msgid "" +"\n" +"Dynamic Section:\n" +msgstr "" +"\n" +"Phần động:\n" + +#: elf.c:1282 +#, c-format +msgid "" +"\n" +"Version definitions:\n" +msgstr "" +"\n" +"Phần định nghĩa phiên bản:\n" + +#: elf.c:1307 +#, c-format +msgid "" +"\n" +"Version References:\n" +msgstr "" +"\n" +"Tham chiếu phiên bản:\n" + +#: elf.c:1312 +#, c-format +msgid " required from %s:\n" +msgstr " cần thiết từ %s:\n" + +#: elf.c:1702 +msgid "%B: invalid link %lu for reloc section %s (index %u)" +msgstr "%B: liên kết không hợp lệ %lu cho phần định vị lại %s (chỉ mục %u)" + +#: elf.c:1870 +msgid "%B: don't know how to handle allocated, application specific section `%s' [0x%8x]" +msgstr "%B: không biết cách xử lý phần đã cấp phát mà đặc trưng cho ứng dụng « %s » [0x%8x]" + +#: elf.c:1882 +msgid "%B: don't know how to handle processor specific section `%s' [0x%8x]" +msgstr "%B: không biết cách xử lý phần đặc trưng cho bộ xử lý « %s » [0x%8x]" + +#: elf.c:1893 +msgid "%B: don't know how to handle OS specific section `%s' [0x%8x]" +msgstr "%B: không biết cách xử lý phần đặc trưng cho HĐH « %s » [0x%8x]" + +#: elf.c:1903 +msgid "%B: don't know how to handle section `%s' [0x%8x]" +msgstr "%B: không biết cách xử lý phần « %s » [0x%8x]" + +#: elf.c:2500 +#, c-format +msgid "warning: section `%A' type changed to PROGBITS" +msgstr "cảnh báo : phần « %A » có kiểu bị thay đổi thành PROGBITS" + +#: elf.c:2917 +msgid "%B: sh_link of section `%A' points to discarded section `%A' of `%B'" +msgstr "%B: sh_link của phần « %A » chỉ tới phần bị hủy « %A » của « %B »" + +#: elf.c:2940 +msgid "%B: sh_link of section `%A' points to removed section `%A' of `%B'" +msgstr "%B: sh_link của phần « %A » chỉ tới phần bị gỡ bỏ « %A » của « %B »" + +#: elf.c:4311 +msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" +msgstr "%B: Phần thứ nhất trong đoạn PT_DYNAMIC không phải là phần .dynamic" + +#: elf.c:4338 +msgid "%B: Not enough room for program headers, try linking with -N" +msgstr "%B: Không đủ sức chứa cho các phần đầu của chương trình: hãy thử liên kết với « -N »" + +#: elf.c:4420 +msgid "%B: section %A vma 0x%lx overlaps previous sections" +msgstr "%B: phần %A vma 0x%lx đè lên phần trước" + +#: elf.c:4515 +msgid "%B: section `%A' can't be allocated in segment %d" +msgstr "%B: phần « %A » không thể được cấp phát trong đoạn %d" + +#: elf.c:4565 +msgid "%B: warning: allocated section `%s' not in segment" +msgstr "%B: cảnh báo : phần đã cấp phát « %s » không nằm trong đoạn" + +#: elf.c:5065 +msgid "%B: symbol `%s' required but not present" +msgstr "%B: ký hiệu « %s » cần thiết mà không có" + +#: elf.c:5404 +msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" +msgstr "%B: cảnh báo : Phát hiện một đoạn rỗng có thể nạp được: trường hợp này có ý định trước không?\n" + +#: elf.c:6370 +#, c-format +msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" +msgstr "Không tìm thấy phần kết xuất tương đương cho ký hiệu « %s » từ phần « %s »" + +#: elf.c:7356 +msgid "%B: unsupported relocation type %s" +msgstr "%B: kiểu định vị lại không được hỗ trợ %s" + +#: elf32-arm.c:3149 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: Thumb call to ARM" +msgstr "" +"%B(%s): cảnh báo : chưa bật dùng ảnh hưởng lẫn nhau.\n" +" lần xuất hiện đầu: %B: thumb gọi tới ARM" + +#: elf32-arm.c:3190 +msgid "" +"%B(%s): warning: interworking not enabled.\n" +" first occurrence: %B: ARM call to Thumb" +msgstr "" +"%B(%s): cảnh báo : chưa bật dùng ảnh hưởng lẫn nhau.\n" +" lần xuất hiện đầu tiên: %B: gọi ARM tới Thumb" -#: elf32-arm.c:1794 +#: elf32-arm.c:3387 elf32-arm.c:4692 +#, c-format +msgid "%s: cannot create stub entry %s" +msgstr "%s: không thể tạo mục nhập mẩu %s" + +#: elf32-arm.c:4804 +#, c-format +msgid "unable to find THUMB glue '%s' for '%s'" +msgstr "không tìm thấy keo hồ THUMB « %s » cho « %s »" + +#: elf32-arm.c:4838 +#, c-format +msgid "unable to find ARM glue '%s' for '%s'" +msgstr "không tìm thấy keo hồ ARM « %s » cho « %s »" + +#: elf32-arm.c:5365 msgid "%B: BE8 images only valid in big-endian mode." -msgstr "%B: hình ảnh BE8 chỉ đúng trong chế độ big-endian." +msgstr "%B: hình ảnh BE8 chỉ đúng trong chế độ về cuối lớn." + +#. Give a warning, but do as the user requests anyway. +#: elf32-arm.c:5590 +msgid "%B: warning: selected VFP11 erratum workaround is not necessary for target architecture" +msgstr "%B: cảnh báo : sự khắc phúc các lỗi VFP11 đã chọn không cần thiết cho kiến trúc đích" + +#: elf32-arm.c:6130 elf32-arm.c:6150 +msgid "%B: unable to find VFP11 veneer `%s'" +msgstr "%B: không tìm thấy lớp gỗ mặt VFP11 « %s »" -#: elf32-arm.c:1953 +#: elf32-arm.c:6196 #, c-format msgid "Invalid TARGET2 relocation type '%s'." -msgstr "Sai dạng reloc của TARGET2 '%s'." +msgstr "Kiểu định vị lại TARGET2 không hợp lệ « %s »" -#: elf32-arm.c:2060 +#: elf32-arm.c:6281 msgid "" "%B(%s): warning: interworking not enabled.\n" " first occurrence: %B: thumb call to arm" msgstr "" -"%B(%s): cảnh báo: chưa bật dùng ảnh hưởng lẫn nhau.\n" -" lần xuất hiện đầu: %B: gọi ngón tay cái tới bàn tay" +"%B(%s): cảnh báo : chưa bật dùng ảnh hưởng lẫn nhau.\n" +" lần xuất hiện đầu: %B: thumb gọi tới arm" -#: elf32-arm.c:2476 +#: elf32-arm.c:7003 msgid "\\%B: Warning: Arm BLX instruction targets Arm function '%s'." -msgstr "\\%B: Cảnh báo: Sự chỉ thị Cánh tay BLX tới chức năng Cánh tay '%s'." +msgstr "\\%B: Cảnh báo : Chỉ dẫn Arm BLX đăt mục tiêu hàm Arm « %s »." -#: elf32-arm.c:2665 +#: elf32-arm.c:7405 msgid "%B: Warning: Thumb BLX instruction targets thumb function '%s'." -msgstr "%B: Cảnh báo: Sự chỉ thị Ngón tay cái BLX tới chức năng Ngón tay cái '%s'." +msgstr "%B: Cảnh báo : Chỉ dẫn Thumb BLX đăt mục tiêu hàm thumb « %s »." -#: elf32-arm.c:3185 elf32-sh.c:4610 elf64-sh64.c:1537 +#: elf32-arm.c:8085 +msgid "%B(%A+0x%lx): R_ARM_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_ARM_TLS_LE32 không cho phép định vị lại trong đối tượng dùng chung" + +#: elf32-arm.c:8300 +msgid "%B(%A+0x%lx): Only ADD or SUB instructions are allowed for ALU group relocations" +msgstr "%B(%A+0x%lx): Chỉ cho phép chỉ dẫn kiểu ADD (cộng) hoặc SUB (trừ) khi định vị lại nhóm ALU" + +#: elf32-arm.c:8340 elf32-arm.c:8427 elf32-arm.c:8510 elf32-arm.c:8595 +msgid "%B(%A+0x%lx): Overflow whilst splitting 0x%lx for group relocation %s" +msgstr "%B(%A+0x%lx): Tràn trong khi tách ra 0x%lx để định vị lại nhóm %s" + +#: elf32-arm.c:8821 elf32-sh.c:3325 elf64-sh64.c:1556 msgid "%B(%A+0x%lx): %s relocation against SEC_MERGE section" -msgstr "%B(%A+0x%lx): %s reloc đối lại phần SEC_MERGE" - -#: elf32-arm.c:3277 -msgid "%B(%A): warning: unresolvable relocation %d against symbol `%s'" -msgstr "%B(%A): cảnh báo: không thể tìm thấy reloc %d đối lại ký hiệu `%s'" - -#: elf32-arm.c:3329 elf32-avr.c:875 elf32-cr16c.c:773 elf32-cris.c:1502 -#: elf32-crx.c:911 elf32-d10v.c:564 elf32-fr30.c:595 elf32-frv.c:4107 -#: elf32-h8300.c:494 elf32-i860.c:1189 elf32-ip2k.c:1550 elf32-iq2000.c:611 -#: elf32-m32r.c:3250 elf32-m68hc1x.c:1189 elf32-msp430.c:503 -#: elf32-openrisc.c:415 elf32-v850.c:1749 elf32-xstormy16.c:954 -#: elf64-mmix.c:1517 elf-m10200.c:427 elf-m10300.c:1527 -msgid "internal error: out of range error" -msgstr "lỗi nội bộ: lỗi vượt giới hạn" - -#: elf32-arm.c:3333 elf32-avr.c:879 elf32-cr16c.c:777 elf32-cris.c:1506 -#: elf32-crx.c:915 elf32-d10v.c:568 elf32-fr30.c:599 elf32-frv.c:4111 -#: elf32-h8300.c:498 elf32-i860.c:1193 elf32-iq2000.c:615 elf32-m32r.c:3254 -#: elf32-m68hc1x.c:1193 elf32-msp430.c:507 elf32-openrisc.c:419 -#: elf32-v850.c:1753 elf32-xstormy16.c:958 elf64-mmix.c:1521 elf-m10200.c:431 -#: elf-m10300.c:1531 elfxx-mips.c:7179 -msgid "internal error: unsupported relocation error" -msgstr "lỗi nội bộ: lỗi reloc chưa hỗ trợ" +msgstr "%B(%A+0x%lx): %s định vị lại đối lại phần SEC_MERGE" -#: elf32-arm.c:3337 elf32-cr16c.c:781 elf32-crx.c:919 elf32-d10v.c:572 -#: elf32-h8300.c:502 elf32-m32r.c:3258 elf32-m68hc1x.c:1197 elf-m10200.c:435 -#: elf-m10300.c:1535 -msgid "internal error: dangerous error" -msgstr "lỗi nội bộ: lỗi nguy hiểm" - -#: elf32-arm.c:3341 elf32-avr.c:887 elf32-cr16c.c:785 elf32-cris.c:1514 -#: elf32-crx.c:923 elf32-d10v.c:576 elf32-fr30.c:607 elf32-frv.c:4119 -#: elf32-h8300.c:506 elf32-i860.c:1201 elf32-ip2k.c:1565 elf32-iq2000.c:623 -#: elf32-m32r.c:3262 elf32-m68hc1x.c:1201 elf32-msp430.c:515 -#: elf32-openrisc.c:427 elf32-v850.c:1773 elf32-xstormy16.c:966 -#: elf64-mmix.c:1529 elf-m10200.c:439 elf-m10300.c:1539 -msgid "internal error: unknown error" -msgstr "lỗi nội bộ: lỗi không rõ" +#: elf32-arm.c:8939 elf32-m68k.c:4134 elf32-xtensa.c:2765 elf64-ppc.c:10743 +msgid "%B(%A+0x%lx): %s used with TLS symbol %s" +msgstr "%B(%A+0x%lx): %s được dùng với ký hiệu TLS %s" -#: elf32-arm.c:3440 +#: elf32-arm.c:8940 elf32-m68k.c:4135 elf32-xtensa.c:2766 elf64-ppc.c:10744 +msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" +msgstr "%B(%A+0x%lx): %s được dùng với ký hiệu khác TLS %s" + +#: elf32-arm.c:8997 +msgid "out of range" +msgstr "ở ngoại phạm vi" + +#: elf32-arm.c:9001 +msgid "unsupported relocation" +msgstr "định vị lại không được hỗ trợ" + +#: elf32-arm.c:9009 +msgid "unknown error" +msgstr "lỗi không rõ" + +#: elf32-arm.c:9409 msgid "Warning: Clearing the interworking flag of %B because non-interworking code in %B has been linked with it" -msgstr "Cảnh báo: Đang xóa cờ ảnh hưởng lẫn nhau của %B vì mã không ảnh hưởng lẫn nhau trong %B đã liên kết với nó" +msgstr "Cảnh báo : Đang xóa cờ ảnh hưởng lẫn nhau của %B vì mã không ảnh hưởng lẫn nhau trong %B đã được liên kết với nó" + +#: elf32-arm.c:9652 +msgid "error: %B: Unknown CPU architecture" +msgstr "lỗi: %B: không rõ kiến trúc CPU" + +#: elf32-arm.c:9690 +msgid "error: %B: Conflicting CPU architectures %d/%d" +msgstr "lỗi: %B: Các kiến trúc CPU xung đột với nhau %d/%d" + +#: elf32-arm.c:9747 +msgid "error: %B uses VFP register arguments, %B does not" +msgstr "lỗi: %B sử dụng các đối số thanh ghi VFP, còn %B thì không" + +#: elf32-arm.c:9897 +msgid "error: %B: Conflicting architecture profiles %c/%c" +msgstr "lỗi: %B: Các hồ sơ kiến trúc xung đột với nhau %c/%c" + +#: elf32-arm.c:9921 +msgid "Warning: %B: Conflicting platform configuration" +msgstr "Cảnh báo : %B: cấu trúc nền tảng xung đột" + +#: elf32-arm.c:9930 +msgid "error: %B: Conflicting use of R9" +msgstr "lỗi; %B: Dùng R9 một cách xung đột" + +#: elf32-arm.c:9942 +msgid "error: %B: SB relative addressing conflicts with use of R9" +msgstr "lỗi: %B: đạt địa chỉ tương đối SB cũng xung đột với cách dùng R9" + +#: elf32-arm.c:9955 +msgid "warning: %B uses %u-byte wchar_t yet the output is to use %u-byte wchar_t; use of wchar_t values across objects may fail" +msgstr "cảnh báo : %B dùng wchar_t %u-byte, còn kết xuất nên dùng wchar_t %u-byte; vì vậy có thể không thành công dùng giá trị wchar_t qua các đối tượng" + +#: elf32-arm.c:9986 +msgid "warning: %B uses %s enums yet the output is to use %s enums; use of enum values across objects may fail" +msgstr "cảnh báo : %B dùng sự đếm %s, còn kết xuất nên dùng sự đếm %s; vì vậy có thể không thành công dùng giá trị đếm qua các đối tượng" + +#: elf32-arm.c:9998 +msgid "error: %B uses iWMMXt register arguments, %B does not" +msgstr "lỗi: %B sử dụng các đối số thanh ghi iWMMXt, còn %B thì không" + +#: elf32-arm.c:10020 +msgid "error: fp16 format mismatch between %B and %B" +msgstr "lỗi: định dạng fp16 không tương ứng giữa %B và %B" -#: elf32-arm.c:3559 -msgid "ERROR: Source object %B has EABI version %d, but target %B has EABI version %d" -msgstr "LỖI: Đối tượng nguồn %B có phiên bản EABI %d, nhưng đích %B có phiên bản EABI %d" +#: elf32-arm.c:10063 elf32-arm.c:10156 +msgid "%B: Unknown mandatory EABI object attribute %d" +msgstr "%B: Không rõ thuộc tính đối tượng EABI %d" -#: elf32-arm.c:3572 -msgid "ERROR: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" -msgstr "LỖI: %B được biên dịch cho APCS-%d, trong khi đích %B sử dụng APCS-%d" +#: elf32-arm.c:10071 elf32-arm.c:10164 +msgid "Warning: %B: Unknown EABI object attribute %d" +msgstr "Cảnh báo : %B: Không rõ thuộc tính đối tượng EABI %d" -#: elf32-arm.c:3597 -msgid "ERROR: %B uses VFP instructions, whereas %B does not" -msgstr "LỖI: %B sử dụng các chỉ dẫn VFP, trong khi %B thì không" +#: elf32-arm.c:10224 +msgid "error: %B is already in final BE8 format" +msgstr "lỗi: %B đã theo định dạng BE8 cuối cùng" -#: elf32-arm.c:3601 -msgid "ERROR: %B uses FPA instructions, whereas %B does not" -msgstr "LỖI: %B sử dụng các chỉ dẫn FPA, trong khi %B thì không" +#: elf32-arm.c:10300 +msgid "error: Source object %B has EABI version %d, but target %B has EABI version %d" +msgstr "lỗi: Đối tượng nguồn %B có phiên bản EABI %d, còn đích %B có phiên bản EABI %d" -#: elf32-arm.c:3611 -msgid "ERROR: %B uses Maverick instructions, whereas %B does not" -msgstr "LỖI: %B sử dụng các chỉ dẫn Maverick, trong khi %B thì không" +#: elf32-arm.c:10316 +msgid "error: %B is compiled for APCS-%d, whereas target %B uses APCS-%d" +msgstr "lỗi: %B được biên dịch cho APCS-%d, còn đích %B sử dụng APCS-%d" -#: elf32-arm.c:3615 -msgid "ERROR: %B does not use Maverick instructions, whereas %B does" -msgstr "LỖI: %B không sử dụng các chỉ dẫn Maverick, trong khi %B thì có" +#: elf32-arm.c:10341 +msgid "error: %B uses VFP instructions, whereas %B does not" +msgstr "lỗi: %B sử dụng chỉ dẫn VFP, còn %B thì không" -#: elf32-arm.c:3634 -msgid "ERROR: %B uses software FP, whereas %B uses hardware FP" -msgstr "LỖI: %B sử dụng phần mềm FP, trong khi %B sử dụng phần cứng FP" +#: elf32-arm.c:10345 +msgid "error: %B uses FPA instructions, whereas %B does not" +msgstr "lỗi: %B sử dụng chỉ dẫn FPA, còn %B thì không" -#: elf32-arm.c:3638 -msgid "ERROR: %B uses hardware FP, whereas %B uses software FP" -msgstr "LỖI: %B sử dụng phần cứng FP, trong khi %B sử dụng phần mềm FP" +#: elf32-arm.c:10355 +msgid "error: %B uses Maverick instructions, whereas %B does not" +msgstr "lỗi: %B sử dụng chỉ dẫn Maverick, còn %B thì không" + +#: elf32-arm.c:10359 +msgid "error: %B does not use Maverick instructions, whereas %B does" +msgstr "lỗi: %B không sử dụng chỉ dẫn Maverick, còn %B thì có" + +#: elf32-arm.c:10378 +msgid "error: %B uses software FP, whereas %B uses hardware FP" +msgstr "lỗi: %B sử dụng FP phần mềm, còn %B sử dụng FP phần cứng" + +#: elf32-arm.c:10382 +msgid "error: %B uses hardware FP, whereas %B uses software FP" +msgstr "lỗi: %B sử dụng FP phần cứng, còn %B sử dụng FP phần mềm" #. 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:3685 elf32-cris.c:3243 elf32-m68hc1x.c:1333 elf32-m68k.c:397 -#: elf32-vax.c:546 elfxx-mips.c:9846 +#: elf32-arm.c:10429 elf32-bfin.c:5082 elf32-cris.c:4110 elf32-m68hc1x.c:1280 +#: elf32-m68k.c:1169 elf32-score.c:4039 elf32-score7.c:3876 elf32-vax.c:540 +#: elfxx-mips.c:12755 #, c-format msgid "private flags = %lx:" -msgstr "các cờ cá nhân = %lx:" +msgstr "các cờ riêng = %lx:" -#: elf32-arm.c:3694 +#: elf32-arm.c:10438 #, c-format msgid " [interworking enabled]" -msgstr " [bật dùng ảnh hưởng lẫn nhau]" +msgstr " [ảnh hưởng lẫn nhau đã bật]" -#: elf32-arm.c:3702 +#: elf32-arm.c:10446 #, c-format msgid " [VFP float format]" -msgstr " [định dạng trôi VFP]" +msgstr " [Định dạng trôi VFP]" -#: elf32-arm.c:3704 +#: elf32-arm.c:10448 #, c-format msgid " [Maverick float format]" -msgstr " [định dạng trôi Maverick]" +msgstr " [Định dạng trôi Maverick]" -#: elf32-arm.c:3706 +#: elf32-arm.c:10450 #, c-format msgid " [FPA float format]" -msgstr " [định dạng trôi FPA]" +msgstr " [Định dạng trôi FPA]" -#: elf32-arm.c:3715 +#: elf32-arm.c:10459 #, c-format msgid " [new ABI]" msgstr " [ABI mới]" -#: elf32-arm.c:3718 +#: elf32-arm.c:10462 #, c-format msgid " [old ABI]" msgstr " [ABI cũ]" -#: elf32-arm.c:3721 +#: elf32-arm.c:10465 #, c-format msgid " [software FP]" -msgstr " [phần mềm FP]" +msgstr " [FP phần mềm]" -#: elf32-arm.c:3730 +#: elf32-arm.c:10474 #, c-format msgid " [Version1 EABI]" -msgstr " [EABI Phiên bản 1]" +msgstr " [EABI phiên bản 1]" -#: elf32-arm.c:3733 elf32-arm.c:3744 +#: elf32-arm.c:10477 elf32-arm.c:10488 #, c-format msgid " [sorted symbol table]" msgstr " [bảng ký hiệu đã sắp xếp]" -#: elf32-arm.c:3735 elf32-arm.c:3746 +#: elf32-arm.c:10479 elf32-arm.c:10490 #, c-format msgid " [unsorted symbol table]" msgstr " [bảng ký hiệu chưa sắp xếp]" -#: elf32-arm.c:3741 +#: elf32-arm.c:10485 #, c-format msgid " [Version2 EABI]" -msgstr " [EABI Phiên bản 2]" +msgstr " [EABI phiên bản 2]" -#: elf32-arm.c:3749 +#: elf32-arm.c:10493 #, c-format msgid " [dynamic symbols use segment index]" -msgstr " [các ký hiệu động sử dụng chỉ mục phần]" +msgstr " [các ký hiệu động sử dụng chỉ mục đoạn]" -#: elf32-arm.c:3752 +#: elf32-arm.c:10496 #, c-format msgid " [mapping symbols precede others]" msgstr " [ký hiệu ánh xạ đứng trước]" -#: elf32-arm.c:3759 +#: elf32-arm.c:10503 #, c-format msgid " [Version3 EABI]" -msgstr " [EABI Phiên bản 3]" +msgstr " [EABI phiên bản 3]" -#: elf32-arm.c:3763 +#: elf32-arm.c:10507 #, c-format msgid " [Version4 EABI]" -msgstr " [EABI Phiên bản 4]" +msgstr " [EABI phiên bản 4]" + +#: elf32-arm.c:10511 +#, c-format +msgid " [Version5 EABI]" +msgstr " [EABI phiên bản 5]" -#: elf32-arm.c:3766 +#: elf32-arm.c:10514 #, c-format msgid " [BE8]" msgstr " [BE8]" -#: elf32-arm.c:3769 +#: elf32-arm.c:10517 #, c-format msgid " [LE8]" msgstr " [LE8]" -#: elf32-arm.c:3775 +#: elf32-arm.c:10523 #, c-format msgid " " -msgstr " " +msgstr "" -#: elf32-arm.c:3782 +#: elf32-arm.c:10530 #, c-format msgid " [relocatable executable]" -msgstr " [có thể thực hiện có thể định vị lại]" +msgstr " [tập tin có thể thực hiện và định vị lại]" -#: elf32-arm.c:3785 +#: elf32-arm.c:10533 #, c-format msgid " [has entry point]" -msgstr " [có điểm mục]" +msgstr " [có điểm vào]" -#: elf32-arm.c:3790 +#: elf32-arm.c:10538 #, c-format msgid "" -msgstr "" +msgstr "" -#: elf32-avr.c:883 elf32-cris.c:1510 elf32-fr30.c:603 elf32-frv.c:4115 -#: elf32-i860.c:1197 elf32-ip2k.c:1561 elf32-iq2000.c:619 elf32-msp430.c:511 -#: elf32-openrisc.c:423 elf32-v850.c:1757 elf32-xstormy16.c:962 -#: elf64-mmix.c:1525 -msgid "internal error: dangerous relocation" -msgstr "lỗi nội bộ: định vị lại nguy hiểm" +#: elf32-arm.c:10783 elf32-i386.c:1300 elf32-s390.c:998 elf32-xtensa.c:1000 +#: elf64-s390.c:952 elf64-x86-64.c:1082 elfxx-sparc.c:1121 +msgid "%B: bad symbol index: %d" +msgstr "%B: chỉ mục ký hiệu sai: %d" -#: elf32-cris.c:1050 -msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" -msgstr "%B, phần %A: định vị lại không tìm thấy %s đối với ký hiệu `%s'" +#: elf32-arm.c:10904 elf64-x86-64.c:1242 elf64-x86-64.c:1411 elfxx-mips.c:7870 +msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" +msgstr "%B: định vị lại %s so với « %s » không thể được dùng khi tạo một đối tượng chia sẻ; hãy biên dịch lại với « -fPIC »" -#: elf32-cris.c:1105 -msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" -msgstr "%B, phần %A: Không PLT hoặc GOT cho định vị lại %s đối với ký hiệu `%s'" +#: elf32-arm.c:11893 +#, c-format +msgid "Errors encountered processing file %s" +msgstr "Gặp lỗi khi xử lý tập tin %s" -#: elf32-cris.c:1107 -msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" -msgstr "%B, phần %A: Không PLT cho định vị lại %s đối với ký hiệu `%s'" +#: elf32-arm.c:13339 +msgid "%B: error: Cortex-A8 erratum stub is allocated in unsafe location" +msgstr "%B: lỗi: mẩu mục lỗi Cortex-A8 được cấp phát ở vị trí không an toàn" -#: elf32-cris.c:1113 elf32-cris.c:1245 -msgid "[whose name is lost]" -msgstr "[tên của chúng bị mất]" +#. There's not much we can do apart from complain if this +#. happens. +#: elf32-arm.c:13366 +msgid "%B: error: Cortex-A8 erratum stub out of range (input file too large)" +msgstr "%B: lỗi: mẩu mục lỗi Cortex-A8 ở ngoại phạm vi (tập tin nhập quá dài)" -#: elf32-cris.c:1231 -msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" -msgstr "%B, phần %A: định vị lại %s với phần thêm không rỗng %d đối với ký hiệu nội bộ" +#: elf32-arm.c:13457 elf32-arm.c:13479 +msgid "%B: error: VFP11 veneer out of range" +msgstr "%B: lỗi: lớp gỗ mặt VFP11 ở ngoại phạm vi" -#: elf32-cris.c:1239 -msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" -msgstr "%B, phần %A: định vị lại %s với phần thêm không rỗng %d đối với ký hiệu `%s'" +#: elf32-avr.c:1259 elf32-bfin.c:3208 elf32-cris.c:2097 elf32-fr30.c:624 +#: elf32-frv.c:4122 elf32-i860.c:1226 elf32-ip2k.c:1510 elf32-iq2000.c:699 +#: elf32-m32c.c:568 elf32-mep.c:549 elf32-moxie.c:299 elf32-msp430.c:501 +#: elf32-mt.c:406 elf32-openrisc.c:419 elf32-v850.c:1709 elf32-xstormy16.c:956 +#: elf64-mmix.c:1541 +msgid "internal error: dangerous relocation" +msgstr "lỗi nội bộ : định vị lại nguy hiểm" -#: elf32-cris.c:1265 -msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" -msgstr "%B, phần %A: định vị lại %s không cho phép cho ký hiệu toàn cầu: `%s'" +#: elf32-avr.c:2409 elf32-hppa.c:605 elf32-m68hc1x.c:165 elf64-ppc.c:4141 +msgid "%B: cannot create stub entry %s" +msgstr "%B: không thể tạo mục nhập mẩu %s" -#: elf32-cris.c:1281 -msgid "%B, section %A: relocation %s with no GOT created" -msgstr "%B, phần %A: đã tạo định vị lại %s không có GOT" +#: elf32-bfin.c:1581 +msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" +msgstr "%B(%A+0x%lx): định vị lại không thể giải quyết đối với ký hiệu « %s »" -#: elf32-cris.c:1399 -msgid "%B: Internal inconsistency; no relocation section %s" -msgstr "%B: Thay đổi nội bộ; không có phần định vị lại %s" +#: elf32-bfin.c:1614 elf32-i386.c:4026 elf32-m68k.c:4176 elf32-s390.c:3067 +#: elf64-s390.c:3026 elf64-x86-64.c:3697 +msgid "%B(%A+0x%lx): reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): định vị lại đối với « %s »: lỗi %d" -#: elf32-cris.c:2507 -msgid "" -"%B, section %A:\n" -" v10/v32 compatible object %s must not contain a PIC relocation" -msgstr "" -"%B, phần %A:\n" -" vật thể tương thích v10/v32 %s không được chứa định vị lại PIC" +#: elf32-bfin.c:2714 +msgid "%B: relocation at `%A+0x%x' references symbol `%s' with nonzero addend" +msgstr "%B: định vị lại ở « %A+0x%x » tham chiếu đến ký hiệu « %s » với số hạng khác không" -#: elf32-cris.c:2694 elf32-cris.c:2762 -msgid "" -"%B, section %A:\n" -" relocation %s should not be used in a shared object; recompile with -fPIC" -msgstr "" +#: elf32-bfin.c:2728 elf32-frv.c:2904 +msgid "relocation references symbol not defined in the module" +msgstr "định vị lại tham chiếu đến ký hiệu không được định nghĩa trong mô-đun" + +#: elf32-bfin.c:2825 +msgid "R_BFIN_FUNCDESC references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC tham chiếu đến ký hiệu động với số hạng khác không" + +#: elf32-bfin.c:2866 elf32-bfin.c:2989 elf32-frv.c:3641 elf32-frv.c:3762 +msgid "cannot emit fixups in read-only section" +msgstr "Không thể phát ra sự sửa chữa trong phần chỉ đọc" + +#: elf32-bfin.c:2897 elf32-bfin.c:3027 elf32-frv.c:3672 elf32-frv.c:3806 +#: elf32-lm32.c:1104 +msgid "cannot emit dynamic relocations in read-only section" +msgstr "không thể phát ra định vị lại động trong phần chỉ đọc" + +#: elf32-bfin.c:2947 +msgid "R_BFIN_FUNCDESC_VALUE references dynamic symbol with nonzero addend" +msgstr "R_FRV_FUNCDESC_VALUE tham chiếu đến ký hiệu động với số hạng khác không" + +#: elf32-bfin.c:3112 +msgid "relocations between different segments are not supported" +msgstr "không hỗ trợ định vị lại giữa các đoạn khác nhau" + +#: elf32-bfin.c:3113 +msgid "warning: relocation references a different segment" +msgstr "cảnh báo : định vị lại tham chiếu đến một đoạn khác" + +#: elf32-bfin.c:4974 elf32-frv.c:6408 +msgid "%B: unsupported relocation type %i" +msgstr "%B: kiểu định vị lại không được hỗ trợ %i" + +#: elf32-bfin.c:5127 elf32-frv.c:6816 +#, c-format +msgid "%s: cannot link non-fdpic object file into fdpic executable" +msgstr "%s: không thể liên kết tập tin đối tượng khác fdpic vào tập tin fdpic có thể thực hiện" + +#: elf32-bfin.c:5131 elf32-frv.c:6820 +#, c-format +msgid "%s: cannot link fdpic object file into non-fdpic executable" +msgstr "%s: không thể liên kết tập tin đối tượng khác fdpic vào tập tin khác fdpic có thể thực hiện" + +#: elf32-cris.c:1169 +msgid "%B, section %A: unresolvable relocation %s against symbol `%s'" +msgstr "%B, phần %A: định vị lại không thể giải quyết %s đối với ký hiệu « %s »" + +#: elf32-cris.c:1238 +msgid "%B, section %A: No PLT nor GOT for relocation %s against symbol `%s'" +msgstr "%B, phần %A: Không có PLT hoặc GOT cho định vị lại %s đối với ký hiệu « %s »" + +#: elf32-cris.c:1240 +msgid "%B, section %A: No PLT for relocation %s against symbol `%s'" +msgstr "%B, phần %A: Không có PLT cho định vị lại %s đối với ký hiệu « %s »" + +#: elf32-cris.c:1246 elf32-cris.c:1379 elf32-cris.c:1641 elf32-cris.c:1730 +#: elf32-cris.c:1883 +msgid "[whose name is lost]" +msgstr "[mất tên của ai]" + +#: elf32-cris.c:1365 +msgid "%B, section %A: relocation %s with non-zero addend %d against local symbol" +msgstr "%B, phần %A: định vị lại %s với số hạng khác không %d đối với ký hiệu cục bộ" + +#: elf32-cris.c:1373 elf32-cris.c:1724 elf32-cris.c:1877 +msgid "%B, section %A: relocation %s with non-zero addend %d against symbol `%s'" +msgstr "%B, phần %A: định vị lại %s với số hạng khác không %d đối với ký hiệu « %s »" + +#: elf32-cris.c:1399 +msgid "%B, section %A: relocation %s is not allowed for global symbol: `%s'" +msgstr "%B, phần %A: định vị lại %s không được phép cho ký hiệu toàn cục: « %s »" + +#: elf32-cris.c:1415 +msgid "%B, section %A: relocation %s with no GOT created" +msgstr "%B, phần %A: đã tạo định vị lại %s không có GOT" + +#. We shouldn't get here for GCC-emitted code. +#: elf32-cris.c:1632 +msgid "%B, section %A: relocation %s has an undefined reference to `%s', perhaps a declaration mixup?" +msgstr "%B: phần %A: sự định vị lại $s có một thàm chiếu chưa xác định đến « %s », có thể khai báo không rõ ?" + +#: elf32-cris.c:2010 +msgid "%B, section %A: relocation %s is not allowed for symbol: `%s' which is defined outside the program, perhaps a declaration mixup?" +msgstr "%B, phần %A: sự định vị lại %s không được phép cho ký hiệu « %s » mà được xác định bên ngoài chương trình, có thể khai báo không rõ ?" + +#: elf32-cris.c:2063 +msgid "(too many global variables for -fpic: recompile with -fPIC)" +msgstr "(quá nhiều biến toàn cục đối với « -fpic »: hãy biên dịch lại với « -fPIC »)" + +#: elf32-cris.c:2070 +msgid "(thread-local data too big for -fpic or -msmall-tls: recompile with -fPIC or -mno-small-tls)" +msgstr "(dữ liệu cục bộ với mạch cũng quá lớn đối với « fpic » hoặc « -msmall-tls »: hãy biên dịch lại với « -fPIC » hay « -mno-small-tls »)" + +#: elf32-cris.c:3204 +msgid "" +"%B, section %A:\n" +" v10/v32 compatible object %s must not contain a PIC relocation" +msgstr "" +"%B, phần %A:\n" +" đối tượng tương thích v10/v32 %s không được chứa định vị lại PIC" + +#: elf32-cris.c:3309 +msgid "" +"%B, section %A:\n" +" relocation %s not valid in a shared object; typically an option mixup, recompile with -fPIC" +msgstr "" +"%B, phần %A:\n" +" không được sử dụng sự định vị lại %s trong một đối tượng chia sẻ; bình thường do khai báo không rõ, hãy biên dịch lại với « -fPIC »" + +#: elf32-cris.c:3523 +msgid "" +"%B, section %A:\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" "%B, phần %A:\n" -" không được sử dụng định vị lại %s trong một vật thể chia sẻ; hãy biên dịch lại với -fPIC" +" không được sử dụng sự định vị lại %s trong một đối tượng chia sẻ; hãy biên dịch lại với « -fPIC »" + +#: elf32-cris.c:3940 +msgid "" +"%B, section `%A', to symbol `%s':\n" +" relocation %s should not be used in a shared object; recompile with -fPIC" +msgstr "" +"%B, phần « %A », tới ký hiệu « %s »:\n" +" không được sử dụng sự định vị lại %s trong một đối tượng chia sẻ; hãy biên dịch lại với « -fPIC »" -#: elf32-cris.c:3192 +#: elf32-cris.c:4059 msgid "Unexpected machine number" -msgstr "Số của máy không mong đợi" +msgstr "Số thứ tự máy bất thường" -#: elf32-cris.c:3246 +#: elf32-cris.c:4113 #, c-format msgid " [symbols have a _ prefix]" -msgstr " [ký hiệu có một _ ở trước]" +msgstr " [ký hiệu có một tiền tố _]" -#: elf32-cris.c:3249 +#: elf32-cris.c:4116 #, c-format msgid " [v10 and v32]" msgstr " [v10 và v32]" -#: elf32-cris.c:3252 +#: elf32-cris.c:4119 #, c-format msgid " [v32]" msgstr " [v32]" -#: elf32-cris.c:3297 +#: elf32-cris.c:4164 msgid "%B: uses _-prefixed symbols, but writing file with non-prefixed symbols" -msgstr "%B: dùng ký hiệu có _ ở trước, nhưng ghi tập tin với ký hiệu không có tiền tố đó" +msgstr "%B: dùng ký hiệu tiền tố _, nhưng đang ghi tập tin với ký hiệu không phải tiền tố" -#: elf32-cris.c:3298 +#: elf32-cris.c:4165 msgid "%B: uses non-prefixed symbols, but writing file with _-prefixed symbols" -msgstr "%B: dùng ký hiệu không có tiền tố, nhưng ghi tập tin với ký hiệu có _ ở trước" +msgstr "%B: dùng ký hiệu không phải tiền tố, nhưng đang ghi tập tin với ký hiệu có tiền tố _" -#: elf32-cris.c:3317 +#: elf32-cris.c:4184 msgid "%B contains CRIS v32 code, incompatible with previous objects" -msgstr "%B chứa mã CRIS v32, không tương thích với các vật thể trước" +msgstr "%B chứa mã CRIS v32, không tương thích với các đối tượng trước" -#: elf32-cris.c:3319 +#: elf32-cris.c:4186 msgid "%B contains non-CRIS-v32 code, incompatible with previous objects" -msgstr "%B chứa mã không phải CRIS v32, không tương thích với các vật thể trước" +msgstr "%B chứa mã khác CRIS v32, không tương thích với các đối tượng trước" -#: elf32-frv.c:1522 elf32-frv.c:1671 +#: elf32-frv.c:1507 elf32-frv.c:1656 msgid "relocation requires zero addend" -msgstr "định vị lại yêu cầu phần thêm rỗng" +msgstr "định vị lại cần thiết số hạng số không" -#: elf32-frv.c:2901 +#: elf32-frv.c:2891 msgid "%B(%A+0x%x): relocation to `%s+%x' may have caused the error above" -msgstr "%B(%A+0x%x): định vị lại tới `%s+%x' có thể gây ra lỗi trên" - -#: elf32-frv.c:2914 -msgid "relocation references symbol not defined in the module" -msgstr "định vị lại chỉ đến ký hiệu chưa xác định trong môđun" +msgstr "%B(%A+0x%x): định vị lại tới « %s+%x » có thể gây ra lỗi trên" -#: elf32-frv.c:2990 +#: elf32-frv.c:2980 msgid "R_FRV_GETTLSOFF not applied to a call instruction" -msgstr "R_FRV_GETTLSOFF không áp dụng tới một chỉ dẫn gọi call" +msgstr "R_FRV_GETTLSOFF không áp dụng tới một chỉ dẫn call" -#: elf32-frv.c:3032 +#: elf32-frv.c:3022 msgid "R_FRV_GOTTLSDESC12 not applied to an lddi instruction" msgstr "R_FRV_GOTTLSDESC12 không áp dụng tới một chỉ dẫn lddi" -#: elf32-frv.c:3103 +#: elf32-frv.c:3093 msgid "R_FRV_GOTTLSDESCHI not applied to a sethi instruction" msgstr "R_FRV_GOTTLSDESCHI không áp dụng tới một chỉ dẫn sethi" -#: elf32-frv.c:3140 +#: elf32-frv.c:3130 msgid "R_FRV_GOTTLSDESCLO not applied to a setlo or setlos instruction" msgstr "R_FRV_GOTTLSDESCLO không áp dụng tới một chỉ dẫn setlo hay setlos" -#: elf32-frv.c:3188 +#: elf32-frv.c:3178 msgid "R_FRV_TLSDESC_RELAX not applied to an ldd instruction" msgstr "R_FRV_TLSDESC_RELAX không áp dụng tới một chỉ dẫn ldd" -#: elf32-frv.c:3272 +#: elf32-frv.c:3262 msgid "R_FRV_GETTLSOFF_RELAX not applied to a calll instruction" msgstr "R_FRV_GETTLSOFF_RELAX không áp dụng tới một chỉ dẫn calll" -#: elf32-frv.c:3327 +#: elf32-frv.c:3317 msgid "R_FRV_GOTTLSOFF12 not applied to an ldi instruction" msgstr "R_FRV_GOTTLSOFF12 không áp dụng tới một chỉ dẫn ldi" -#: elf32-frv.c:3357 +#: elf32-frv.c:3347 msgid "R_FRV_GOTTLSOFFHI not applied to a sethi instruction" msgstr "R_FRV_GOTTLSOFFHI không áp dụng tới một chỉ dẫn sethi" -#: elf32-frv.c:3386 +#: elf32-frv.c:3376 msgid "R_FRV_GOTTLSOFFLO not applied to a setlo or setlos instruction" msgstr "R_FRV_GOTTLSOFFLO không áp dụng tới một chỉ dẫn setlo hay setlos" -#: elf32-frv.c:3417 +#: elf32-frv.c:3407 msgid "R_FRV_TLSOFF_RELAX not applied to an ld instruction" msgstr "R_FRV_TLSOFF_RELAX không áp dụng tới một chỉ dẫn ld" -#: elf32-frv.c:3462 +#: elf32-frv.c:3452 msgid "R_FRV_TLSMOFFHI not applied to a sethi instruction" msgstr "R_FRV_TLSMOFFHI không áp dụng tới một chỉ dẫn sethi" -#: elf32-frv.c:3489 +#: elf32-frv.c:3479 msgid "R_FRV_TLSMOFFLO not applied to a setlo or setlos instruction" msgstr "R_FRV_TLSMOFFLO không áp dụng tới một chỉ dẫn setlo hay setlos" -#: elf32-frv.c:3610 +#: elf32-frv.c:3600 msgid "R_FRV_FUNCDESC references dynamic symbol with nonzero addend" -msgstr "R_FRV_FUNCDESC chỉ đến ký hiệu động với phần thêm không rỗng" - -#: elf32-frv.c:3649 elf32-frv.c:3762 -msgid "cannot emit fixups in read-only section" -msgstr "không thể sửa đổi trong phần chỉ đọc" - -#: elf32-frv.c:3675 elf32-frv.c:3802 -msgid "cannot emit dynamic relocations in read-only section" -msgstr "không thể định vị lại động trong phần chỉ đọc" +msgstr "R_FRV_FUNCDESC tham chiếu đến ký hiệu động với số hạng khác không" #: elf32-frv.c:3720 msgid "R_FRV_FUNCDESC_VALUE references dynamic symbol with nonzero addend" -msgstr "R_FRV_FUNCDESC_VALUE chỉ đến ký hiệu động với phần thêm không rỗng" +msgstr "R_FRV_FUNCDESC_VALUE tham chiếu đến ký hiệu động với số hạng khác không" -#: elf32-frv.c:3970 elf32-frv.c:4126 +#: elf32-frv.c:3977 elf32-frv.c:4133 msgid "%B(%A+0x%lx): reloc against `%s': %s" -msgstr "%B(%A+0x%lx): reloc đối với `%s': %s" +msgstr "%B(%A+0x%lx): định vị lại đối với « %s »: %s" -#: elf32-frv.c:3972 elf32-frv.c:3976 +#: elf32-frv.c:3979 elf32-frv.c:3983 msgid "relocation references a different segment" -msgstr "định vị lại chỉ đến một đoạn khác" - -#: elf32-frv.c:6344 -msgid "%B: unsupported relocation type %i" -msgstr "%B: dạng định vị lại không hỗ trợ %i" +msgstr "định vị lại tham chiếu đến một đoạn khác" -#: elf32-frv.c:6662 +#: elf32-frv.c:6730 #, c-format msgid "%s: compiled with %s and linked with modules that use non-pic relocations" -msgstr "%s: biên dịch với %s và liên kết với môđun sử dụng định vị lại không pic" +msgstr "%s: biên dịch với %s và liên kết với môđun sử dụng định vị lại khác pic" -#: elf32-frv.c:6715 elf32-iq2000.c:796 +#: elf32-frv.c:6783 elf32-iq2000.c:852 elf32-m32c.c:814 #, c-format msgid "%s: compiled with %s and linked with modules compiled with %s" msgstr "%s: biên dịch với %s và liên kết với môđun biên dịch với %s" -#: elf32-frv.c:6727 +#: elf32-frv.c:6795 #, c-format msgid "%s: uses different unknown e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: sử dụng vùng e_flags không biết (0x%lx) khác với mođun trước (0x%lx)" - -#: elf32-frv.c:6748 -#, c-format -msgid "%s: cannot link non-fdpic object file into fdpic executable" -msgstr "%s: không thể liên kết tập tin vật thể không phải fdpic vào một fdpic có thể thực hiện" - -#: elf32-frv.c:6752 -#, c-format -msgid "%s: cannot link fdpic object file into non-fdpic executable" -msgstr "%s: không thể liên kết tập tin vật thể fdpic vào một tập tin không phải fdpic có thể thực hiện" +msgstr "%s: sử dụng trường e_flags không rõ (0x%lx) khác với mođun trước (0x%lx)" -#: elf32-frv.c:6777 elf32-iq2000.c:833 +#: elf32-frv.c:6845 elf32-iq2000.c:889 elf32-m32c.c:850 elf32-mt.c:583 #, c-format msgid "private flags = 0x%lx:" -msgstr "cờ riêng = 0x%lx:" +msgstr "các cờ riêng = 0x%lx:" -#: elf32-gen.c:83 elf64-gen.c:83 +#: elf32-gen.c:69 elf64-gen.c:69 msgid "%B: Relocations in generic ELF (EM: %d)" msgstr "%B: Định vị lại trong ELF chung (EM: %d)" -#: elf32-hppa.c:542 elf32-m68hc1x.c:161 elf64-ppc.c:3644 -msgid "%B: cannot create stub entry %s" -msgstr "%B: không thể tạo mục gốc %s" - -#: elf32-hppa.c:795 elf32-hppa.c:3359 +#: elf32-hppa.c:854 elf32-hppa.c:3570 msgid "%B(%A+0x%lx): cannot reach %s, recompile with -ffunction-sections" -msgstr "%B(%A+0x%lx): không thể tìm đến %s, hãy biên dịch lại với -ffunction-sections" +msgstr "%B(%A+0x%lx): không thể tới %s, hãy biên dịch lại với « -ffunction-sections »" -#: elf32-hppa.c:1176 +#: elf32-hppa.c:1286 msgid "%B: relocation %s can not be used when making a shared object; recompile with -fPIC" -msgstr "%B: không dùng được định vị lại %s khi tạo một vật thể chia sẽ, hãy biên dịch lại với -fPIC" - -#: elf32-hppa.c:1370 -#, c-format -msgid "Could not find relocation section for %s" -msgstr "Không tìm thấy phần định vị lại cho %s" +msgstr "%B: không dùng được định vị lại %s khi tạo một đối tượng chia sẽ, hãy biên dịch lại với « -fPIC »" -#: elf32-hppa.c:2623 +#: elf32-hppa.c:2780 msgid "%B: duplicate export stub %s" -msgstr "%B: xuất gốc %s trùng nhau" +msgstr "%B: mẩu xuất trùng %s" -#: elf32-hppa.c:3214 +#: elf32-hppa.c:3406 msgid "%B(%A+0x%lx): %s fixup for insn 0x%x is not supported in a non-shared link" -msgstr "%B(%A+0x%lx): %s sửa đổi cho insn 0x%x không được hỗ trợ trong một liên kết không chia sẻ" +msgstr "%B(%A+0x%lx): %s sự sửa chữa cho chỉ dẫn 0x%x không được hỗ trợ trong một liên kết không chia sẻ" -#: elf32-hppa.c:3844 +#: elf32-hppa.c:4260 msgid "%B(%A+0x%lx): cannot handle %s for %s" -msgstr "%B(%A+0x%lx): không điều khiển được %s cho %s" +msgstr "%B(%A+0x%lx): không thể xử lý %s cho %s" -#: elf32-hppa.c:4137 +#: elf32-hppa.c:4567 msgid ".got section not immediately after .plt section" -msgstr "phần .got không đứng ngay sau phần .plt" +msgstr "Phần .got không nằm ngay sau phần .pit" -#: elf32-i386.c:326 +#: elf32-i386.c:371 elf32-ppc.c:1666 elf32-s390.c:379 elf64-ppc.c:2283 +#: elf64-s390.c:403 elf64-x86-64.c:234 msgid "%B: invalid relocation type %d" -msgstr "%B: dạng định vị lại sai %d" +msgstr "%B: kiểu định vị lại không hợp lệ %d" -#: elf32-i386.c:865 elf32-s390.c:985 elf32-sparc.c:910 elf32-xtensa.c:788 -#: elf64-s390.c:938 elf64-x86-64.c:646 -msgid "%B: bad symbol index: %d" -msgstr "%B: chỉ mục ký hiệu xấu: %d" +#: elf32-i386.c:1246 elf64-x86-64.c:1029 +msgid "%B: TLS transition from %s to %s against `%s' at 0x%lx in section `%A' failed" +msgstr "%B: không thành công chuyển tiếp TLS từ %s sang %s đối với « %s » ở 0x%lx trong phần « %A »" -#: elf32-i386.c:973 elf32-s390.c:1162 elf32-sh.c:6388 elf32-sparc.c:1033 -#: elf64-s390.c:1124 -msgid "%B: `%s' accessed both as normal and thread local symbol" -msgstr "%B: đã truy cập `%s' theo cả hai như thông thường và ký hiệu luồng nội bộ" +#: elf32-i386.c:1387 elf32-i386.c:2970 elf64-x86-64.c:1171 elf64-x86-64.c:2680 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' isn't handled by %s" +msgstr "%B: sự định vị lại %s đối với ký hiệu STT_GNU_IFUNC « %s » không phải được %s quản lý" -#: elf32-i386.c:1088 elf32-s390.c:1271 elf64-ppc.c:4676 elf64-s390.c:1236 -#: elf64-x86-64.c:882 -msgid "%B: bad relocation section name `%s'" -msgstr "%B: tên phần định lại xấu `%s'" +#: elf32-i386.c:1548 elf32-s390.c:1180 elf32-sh.c:5065 elf32-xtensa.c:1173 +#: elf64-s390.c:1143 elfxx-sparc.c:1257 +msgid "%B: `%s' accessed both as normal and thread local symbol" +msgstr "%B: đã truy cập « %s » theo ký hiệu cả hai kiểu bình thường và cục bộ cho mạch" -#: elf32-i386.c:2043 +#: elf32-i386.c:2805 msgid "%B: unrecognized relocation (0x%x) in section `%A'" -msgstr "%B: định vị lại không nhận ra (0x%x) trong phần `%A'" +msgstr "%B: định vị lại không được nhận ra (0x%x) trong phần « %A »" -#: elf32-i386.c:2287 -msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" -msgstr "%B: không dùng được định vị lại R_386_GOTOFF đối với hàm số đã bảo vệ `%s' khi tạo một vật thể chia sẻ" +#: elf32-i386.c:3219 elf64-x86-64.c:3081 +msgid "hidden symbol" +msgstr "ký hiệu bị ẩn" -#: elf32-i386.c:2931 elf32-m68k.c:1700 elf32-s390.c:2993 elf32-sparc.c:2859 -#: elf32-xtensa.c:2321 elf64-s390.c:2990 elf64-sparc.c:2684 -#: elf64-x86-64.c:2438 -msgid "%B(%A+0x%lx): unresolvable relocation against symbol `%s'" -msgstr "%B(%A+0x%lx): định vị lại không tìm thấy đối với ký hiệu `%s'" +#: elf32-i386.c:3222 elf64-x86-64.c:3084 +msgid "internal symbol" +msgstr "ký hiệu nội bộ" -#: elf32-i386.c:2971 elf32-m68k.c:1740 elf32-s390.c:3044 elf64-s390.c:3041 -#: elf64-x86-64.c:2482 -msgid "%B(%A+0x%lx): reloc against `%s': error %d" -msgstr "%B(%A+0x%lx): reloc đối với `%s': lỗi %d" +#: elf32-i386.c:3225 elf64-x86-64.c:3087 +msgid "protected symbol" +msgstr "ký hiệu bị bảo vệ" + +#: elf32-i386.c:3228 elf64-x86-64.c:3090 +msgid "symbol" +msgstr "ký hiệu" + +#: elf32-i386.c:3233 +msgid "%B: relocation R_386_GOTOFF against undefined %s `%s' can not be used when making a shared object" +msgstr "%B: không dùng được định vị lại R_386_GOTOFF đối với %s chưa xác định « %s » khi tạo một đối tượng chia sẻ" + +#: elf32-i386.c:3243 +msgid "%B: relocation R_386_GOTOFF against protected function `%s' can not be used when making a shared object" +msgstr "%B: không dùng được định vị lại R_386_GOTOFF đối với hàm số đã bảo vệ « %s » khi tạo một đối tượng chia sẻ" -#: elf32-ip2k.c:557 elf32-ip2k.c:563 elf32-ip2k.c:726 elf32-ip2k.c:732 +#: 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 "trình giảm nhẹ ip2k: chuyển đổi bảng không có tương ứng hoàn toàn với thông tin định vị lại." +msgstr "trình giảm nhẹ ip2k: chuyển đổi bảng mà không có thông tin định vị lại hoàn thành." -#: elf32-ip2k.c:580 elf32-ip2k.c:759 +#: elf32-ip2k.c:891 elf32-ip2k.c:974 msgid "ip2k relaxer: switch table header corrupt." -msgstr "trình giảm nhẹ ip2k: phần đầu của bảng chuyển đổi bị hỏng." +msgstr "trình giảm nhẹ ip2k: bảng chuyển đổi có phần đầu bị hỏng." -#: elf32-ip2k.c:1377 +#: elf32-ip2k.c:1316 #, c-format msgid "ip2k linker: missing page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "trình liên kết ip2k: thiếu hướng dẫn trang tại 0x%08lx (đích = 0x%08lx)." +msgstr "trình liên kết ip2k: thiếu chỉ dẫn trang tại 0x%08lx (đích = 0x%08lx)." -#: elf32-ip2k.c:1391 +#: elf32-ip2k.c:1332 #, c-format msgid "ip2k linker: redundant page instruction at 0x%08lx (dest = 0x%08lx)." -msgstr "trình liên kết ip2k: thừa hướng dẫn trang tại 0x%08lx (đích = 0x%08lx)." +msgstr "trình liên kết ip2k: thừa chủ dẫn trang tại 0x%08lx (đích = 0x%08lx)." #. Only if it's not an unresolved symbol. -#: elf32-ip2k.c:1557 +#: elf32-ip2k.c:1506 msgid "unsupported relocation between data/insn address spaces" -msgstr "định vị lại không hỗ trợ giữa không gian địa chỉ dữ liệu/insn" +msgstr "gặp định vị lại không được hỗ trợ giữa vùng địa chỉ kiểu dữ liệu và chỉ dẫn" -#: elf32-iq2000.c:809 +#: elf32-iq2000.c:865 elf32-m32c.c:826 #, c-format msgid "%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%s: sử dụng vùng e_flags (0x%lx) khác với mođun trước (0x%lx)" +msgstr "%s: sử dụng trường e_flags (0x%lx) khác với mo-đun trước (0x%lx)" -#: elf32-m32r.c:1530 -msgid "SDA relocation when _SDA_BASE_ not defined" -msgstr "định vị lại SDA khi chưa xác định _SDA_BASE_" +#: elf32-lm32.c:698 +msgid "global pointer relative relocation when _gp not defined" +msgstr "có định vị lại tương đối với con trỏ toàn cục khi chưa xác định _gp" -#: elf32-m32r.c:2604 elf64-alpha.c:4181 elf64-alpha.c:4307 elf32-ia64.c:3910 -#: elf64-ia64.c:3910 -msgid "%B: unknown relocation type %d" -msgstr "%B: dạng định vị lại không rõ %d" +#: elf32-lm32.c:753 +msgid "global pointer relative address out of range" +msgstr "địa chỉ tương đối với con trỏ toàn cục vẫn ở ngoại phạm vi" -#: elf32-m32r.c:2789 elf64-sh64.c:1626 elf-m10300.c:1481 -#, c-format -msgid "%s: warning: unresolvable relocation against symbol `%s' from %s section" -msgstr "%s: cảnh báo: định vị lại không tìm thấy đối với ký hiệu `%s' từ phần %s" +#: elf32-lm32.c:1058 +msgid "internal error: addend should be zero for R_LM32_16_GOT" +msgstr "lỗi nội bộ : phần cộng nên là số không cho R_LM32_16_GOT" -#: elf32-m32r.c:3187 +#: elf32-m32r.c:1453 +msgid "SDA relocation when _SDA_BASE_ not defined" +msgstr "định vị lại SDA khi chưa xác định _SDA_BASE_" + +#: elf32-m32r.c:3039 msgid "%B: The target (%s) of an %s relocation is in the wrong section (%A)" msgstr "%B: Đích (%s) của một định vị lại %s nằm trong phần sai (%A)" -#: elf32-m32r.c:3719 +#: elf32-m32r.c:3567 msgid "%B: Instruction set mismatch with previous modules" -msgstr "%B: Bộ chỉ dẫn không tương ứng với các môđun trước" +msgstr "%B: Bộ chỉ dẫn không tương ứng với các mô-đun trước" -#: elf32-m32r.c:3741 +#: elf32-m32r.c:3588 #, c-format msgid "private flags = %lx" -msgstr "cờ riêng = %lx" +msgstr "các cờ riêng — %lx" -#: elf32-m32r.c:3746 +#: elf32-m32r.c:3593 #, c-format msgid ": m32r instructions" -msgstr ": các chỉ dẫn m32r" +msgstr ": chỉ dẫn m32r" -#: elf32-m32r.c:3747 +#: elf32-m32r.c:3594 #, c-format msgid ": m32rx instructions" -msgstr ": các chỉ dẫn m32rx" +msgstr ": chỉ dẫn m32rx" -#: elf32-m32r.c:3748 +#: elf32-m32r.c:3595 #, c-format msgid ": m32r2 instructions" -msgstr ": các chỉ dẫn m32r2" +msgstr ": chỉ dẫn m32r2" -#: elf32-m68hc1x.c:1101 +#: elf32-m68hc1x.c:1048 #, c-format msgid "Reference to the far symbol `%s' using a wrong relocation may result in incorrect execution" -msgstr "Liên kết tới ký hiệu xa `%s' sử dụng một định vị lại sai có thể dẫn đến sự thực hiện sai" +msgstr "Tham chiếu đến ký hiệu ở xa « %s » khi sử dụng một định vị lại sai thì có thể dẫn đến sự thực hiện sai" -#: elf32-m68hc1x.c:1124 +#: elf32-m68hc1x.c:1071 #, c-format msgid "banked address [%lx:%04lx] (%lx) is not in the same bank as current banked address [%lx:%04lx] (%lx)" -msgstr "địa chỉ ngân hàng [%lx:%04lx] (%lx) không trong cùng ngân hàng với địa chỉ ngân hàng hiện thời [%lx:%04lx] (%lx)" +msgstr "địa chỉ đã đặt vào khối nhớ [%lx:%04lx] (%lx) không trong cùng khối nhớ với địa chỉ được đặt hiện thời vào khối nhớ [%lx:%04lx] (%lx)" -#: elf32-m68hc1x.c:1143 +#: elf32-m68hc1x.c:1090 #, c-format msgid "reference to a banked address [%lx:%04lx] in the normal address space at %04lx" -msgstr "liên kết tới một địa chỉ ngân hàng [%lx:%04lx] trong không gian địa chỉ thông thường tại %04lx" +msgstr "tham chiếu đến một địa chỉ đã đặt vào khối nhớ [%lx:%04lx] trong vùng địa chỉ thông thường tại %04lx" -#: elf32-m68hc1x.c:1276 +#: elf32-m68hc1x.c:1223 msgid "%B: linking files compiled for 16-bit integers (-mshort) and others for 32-bit integers" -msgstr "%B: đang liên kết các tập tin biên dịch cho số nguyên 16 bit (-mshort) và những tập tin khác cho số nguyên 32 bit" +msgstr "%B: đang liên kết các tập tin được biên dịch cho số nguyên 16 bit (-mshort) và các tập tin khác cho số nguyên 32 bit" -#: elf32-m68hc1x.c:1283 +#: elf32-m68hc1x.c:1230 msgid "%B: linking files compiled for 32-bit double (-fshort-double) and others for 64-bit double" -msgstr "%B: đang liên kết các tập tin biên dịch 32 bit đôi (-mshort) và những tập tin khác cho 64 bit đôi" +msgstr "%B: đang liên kết các tập tin được biên dịch 32 bit đôi (-mshort) và các tập tin khác cho 64 bit đôi" -#: elf32-m68hc1x.c:1292 +#: elf32-m68hc1x.c:1239 msgid "%B: linking files compiled for HCS12 with others compiled for HC12" -msgstr "%B: đang liên kết tập tin biên dịch cho HCS12 với các tập tin khác biên dịch cho HC12" +msgstr "%B: đang liên kết tập tin được biên dịch cho HCS12 với các tập tin khác biên dịch cho HC12" -#: elf32-m68hc1x.c:1308 elf32-ppc.c:2298 elf64-sparc.c:3090 elfxx-mips.c:9807 +#: elf32-m68hc1x.c:1255 elf32-ppc.c:4255 elf64-sparc.c:698 elfxx-mips.c:12617 msgid "%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)" -msgstr "%B: sử dụng vùng e_flags (0x%lx) khác với mođun trước (0x%lx)" +msgstr "%B: sử dụng trường e_flags (0x%lx) khác với mo-đun trước (0x%lx)" -#: elf32-m68hc1x.c:1336 +#: elf32-m68hc1x.c:1283 #, c-format msgid "[abi=32-bit int, " -msgstr "[abi= int 32 bit, " +msgstr "[abi=số nguyên 32-bit, " -#: elf32-m68hc1x.c:1338 +#: elf32-m68hc1x.c:1285 #, c-format msgid "[abi=16-bit int, " -msgstr "[abi= int 16 bit, " +msgstr "[abi=số nguyên 16-bit, " -#: elf32-m68hc1x.c:1341 +#: elf32-m68hc1x.c:1288 #, c-format msgid "64-bit double, " -msgstr "64 bit đôi, " +msgstr "64-bit đôi, " -#: elf32-m68hc1x.c:1343 +#: elf32-m68hc1x.c:1290 #, c-format msgid "32-bit double, " -msgstr "32 bit đôi, " +msgstr "32-bit đôi, " -#: elf32-m68hc1x.c:1346 +#: elf32-m68hc1x.c:1293 #, c-format msgid "cpu=HC11]" msgstr "cpu=HC11]" -#: elf32-m68hc1x.c:1348 +#: elf32-m68hc1x.c:1295 #, c-format msgid "cpu=HCS12]" msgstr "cpu=HCS12]" -#: elf32-m68hc1x.c:1350 +#: elf32-m68hc1x.c:1297 #, c-format msgid "cpu=HC12]" msgstr "cpu=HC12]" -#: elf32-m68hc1x.c:1353 +#: elf32-m68hc1x.c:1300 #, c-format msgid " [memory=bank-model]" -msgstr " [bộ nhớ=kiểu nhà băng]" +msgstr " [bộ nhớ=chế độ khối]" -#: elf32-m68hc1x.c:1355 +#: elf32-m68hc1x.c:1302 #, c-format msgid " [memory=flat]" msgstr " [bộ nhớ=phẳng]" -#: elf32-m68k.c:400 -#, c-format -msgid " [cpu32]" -msgstr " [cpu32]" +#: elf32-m68k.c:1184 elf32-m68k.c:1185 +msgid "unknown" +msgstr "không rõ" -#: elf32-m68k.c:403 -#, c-format -msgid " [m68000]" -msgstr " [m68000]" +#: elf32-m68k.c:1645 +msgid "%B: GOT overflow: Number of relocations with 8-bit offset > %d" +msgstr "%B: tràn GOT: số các sự định vị lại với hiệu 8-bit > %d" + +#: elf32-m68k.c:1651 +msgid "%B: GOT overflow: Number of relocations with 8- or 16-bit offset > %d" +msgstr "%B: tràn GOT: số các sự định vị lại với hiệu 8-bit hay 16-bit > %d" -#: elf32-mcore.c:353 elf32-mcore.c:455 +#: elf32-m68k.c:3902 +msgid "%B(%A+0x%lx): R_68K_TLS_LE32 relocation not permitted in shared object" +msgstr "%B(%A+0x%lx): R_68K_TLS_LE32 không cho phép định vị lại trong đối tượng chia sẻ" + +#: elf32-mcore.c:99 elf32-mcore.c:442 msgid "%B: Relocation %s (%d) is not currently supported.\n" -msgstr "%B: Hiện thời chưa hỗ trợ định vị lại %s (%d).\n" +msgstr "%B: Định vị lại %s (%d) hiện thời không được hỗ trợ.\n" -#: elf32-mcore.c:441 +#: elf32-mcore.c:428 msgid "%B: Unknown relocation type %d\n" -msgstr "%B: Dạng định vị lại không rõ %d\n" +msgstr "%B: Kiểu định vị lại không rõ %d\n" -#: elf32-mips.c:971 elf64-mips.c:1929 elfn32-mips.c:1774 -msgid "literal relocation occurs for an external symbol" -msgstr "định vị lại văn bản cho một ký hiệu ở ngoài" +#: elf32-mep.c:654 +msgid "%B and %B are for different cores" +msgstr "%B và %B dành cho lõi khác nhau" -#: elf32-mips.c:1011 elf64-mips.c:1972 elfn32-mips.c:1815 -msgid "32bits gp relative relocation occurs for an external symbol" -msgstr "định vị lại tương đối 32 bit gp cho một ký hiệu ở ngoài" +#: elf32-mep.c:671 +msgid "%B and %B are for different configurations" +msgstr "%B và %B dành cho cấu hình khác nhau" + +#: elf32-mep.c:708 +#, c-format +msgid "private flags = 0x%lx" +msgstr "các cờ riêng = 0x%lx" + +#: elf32-microblaze.c:737 +#, c-format +msgid "%s: unknown relocation type %d" +msgstr "%s: không rõ loại định vị lại %d" -#: elf32-mips.c:1134 elf64-mips.c:2066 elfn32-mips.c:1915 +#: elf32-microblaze.c:862 elf32-microblaze.c:907 #, c-format -msgid "Linking mips16 objects into %s format is not supported" -msgstr "Không hỗ trợ liên kết vật thể mips16 vào định dạng %s" +msgid "%s: The target (%s) of an %s relocation is in the wrong section (%s)" +msgstr "%s: Đích (%s) của một sự định vị lại %s nằm trong phần không đúng (%s)" + +#: elf32-microblaze.c:1150 elfxx-sparc.c:2957 +msgid "%B: probably compiled without -fPIC?" +msgstr "%B: rất có thể được biên dịch không có « -fPIC » ?" + +#: elf32-microblaze.c:2086 elflink.c:12444 +msgid "%B: bad relocation section name `%s'" +msgstr "%B: tên phần định vị lại sai « %s »" + +#: elf32-mips.c:1045 elf64-mips.c:2083 elfn32-mips.c:1888 +msgid "literal relocation occurs for an external symbol" +msgstr "định vị lại nghĩa chữ xảy ra cho một ký hiệu bên ngoài" + +#: elf32-mips.c:1085 elf32-score.c:580 elf32-score7.c:480 elf64-mips.c:2126 +#: elfn32-mips.c:1929 +msgid "32bits gp relative relocation occurs for an external symbol" +msgstr "định vị lại tương đối 32-bit gp xảy ra cho một ký hiệu bên ngoài" -#: elf32-ppc.c:2181 +#: elf32-ppc.c:1731 #, c-format msgid "generic linker can't handle %s" -msgstr "trình liên kết chung không điều khiển được %s" +msgstr "trình liên kết chung không thể xử lý %s" -#: elf32-ppc.c:2263 -msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" -msgstr "%B: đã biên dịch với -mrelocatable và đã liên kết với các môđun biên dịch bình thường" +#: elf32-ppc.c:2211 +msgid "corrupt or empty %s section in %B" +msgstr "Gặp phần %s bị hỏng hoặc còn rỗng trong %B" -#: elf32-ppc.c:2271 -msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" -msgstr "%B: đã biên dịch bình thường và đã liên kết với các môđun biên dịch với -mrelocatable" +#: elf32-ppc.c:2218 +msgid "unable to read in %s section from %B" +msgstr "không thể đọc trong phần %s từ %B" + +#: elf32-ppc.c:2224 +msgid "corrupt %s section in %B" +msgstr "phần %s bị hỏng trong %b" + +#: elf32-ppc.c:2267 +msgid "warning: unable to set size of %s section in %B" +msgstr "cảnh báo : không thể đặt kích cỡ của phần %s trong %B" + +#: elf32-ppc.c:2315 +msgid "failed to allocate space for new APUinfo section." +msgstr "lỗi cấp phát sức chứa cho phần thông tin APUinfo mới." + +#: elf32-ppc.c:2334 +msgid "failed to compute new APUinfo section." +msgstr "lỗi tính phần thông tin APUinfo mới." + +#: elf32-ppc.c:2337 +msgid "failed to install new APUinfo section." +msgstr "lỗi cài đặt phần thông tin APUinfo mới." -#: elf32-ppc.c:3526 +#: elf32-ppc.c:3364 msgid "%B: relocation %s cannot be used when making a shared object" -msgstr "%B: không sử dụng được định vị lại %s khi tạo một vật thể chia sẻ" +msgstr "%B: không dùng được định vị lại %s khi tạo một đối tượng chia sẻ" #. It does not make sense to have a procedure linkage #. table entry for a local symbol. -#: elf32-ppc.c:3731 +#: elf32-ppc.c:3723 msgid "%B(%A+0x%lx): %s reloc against local symbol" -msgstr "%B(%A+0x%lx): %s reloc đối với ký hiệu nội bộ" +msgstr "%B(%A+0x%lx): %s định vị lại đối với ký hiệu cục bộ" -#: elf32-ppc.c:4935 elf64-ppc.c:9967 -msgid "%B: unknown relocation type %d for symbol %s" -msgstr "%B: dạng định vị lại %d không rõ cho ký hiệu %s" +#: elf32-ppc.c:4067 elf32-ppc.c:4082 elfxx-mips.c:12324 elfxx-mips.c:12350 +#: elfxx-mips.c:12372 elfxx-mips.c:12398 +msgid "Warning: %B uses hard float, %B uses soft float" +msgstr "Cảnh báo : %B dùng trôi cứng, còn %B dùng trôi mềm" -#: elf32-ppc.c:5184 -msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" -msgstr "%B(%A+0x%lx): phần thêm không rỗng trên reloc %s đối với `%s'" +#: elf32-ppc.c:4070 elf32-ppc.c:4074 +msgid "Warning: %B uses double-precision hard float, %B uses single-precision hard float" +msgstr "Cảnh báo : %B dùng trôi cứng chính xác đôi, còn %B dùng trôi cứng chính xác đơn" -#: elf32-ppc.c:5510 elf32-ppc.c:5536 elf32-ppc.c:5595 -msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" -msgstr "%B: đích (%s) của một định vị lại %s nằm trong phần ra không đúng (%s)" +#: elf32-ppc.c:4078 +msgid "Warning: %B uses soft float, %B uses single-precision hard float" +msgstr "Cảnh báo : %B dùng trôi mềm, còn %B dùng trôi cứng chính xác đơn" -#: elf32-ppc.c:5650 -msgid "%B: relocation %s is not yet supported for symbol %s." -msgstr "%B: định vị lại %s chưa hỗ trợ cho ký hiệu %s." +#: elf32-ppc.c:4085 elf32-ppc.c:4089 elfxx-mips.c:12304 elfxx-mips.c:12308 +msgid "Warning: %B uses unknown floating point ABI %d" +msgstr "Cảnh báo : %B dùng điểm trôi không rõ ABI %d" -#: elf32-ppc.c:5705 elf64-ppc.c:10606 -msgid "%B(%A+0x%lx): unresolvable %s relocation against symbol `%s'" -msgstr "%B(%A+0x%lx): định vị lại không thể tìm thấy %s đối với ký hiệu `%s'" +#: elf32-ppc.c:4131 elf32-ppc.c:4135 +msgid "Warning: %B uses unknown vector ABI %d" +msgstr "Cảnh báo : %B dùng véc-tơ không nhận ra ABI %d" -#: elf32-ppc.c:5756 elf64-ppc.c:10653 -msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" -msgstr "%B(%A+0x%lx): %s reloc đối với `%s': lỗi %d" +#: elf32-ppc.c:4139 +msgid "Warning: %B uses vector ABI \"%s\", %B uses \"%s\"" +msgstr "Cảnh báo : %B dùng véc-tơ ABI « %s », còn %B dùng « %s »" -#: elf32-ppc.c:5999 -msgid "corrupt or empty %s section in %B" -msgstr "phần %s bị hỏng hoặc rỗng trong %B" +#: elf32-ppc.c:4156 elf32-ppc.c:4159 +msgid "Warning: %B uses r3/r4 for small structure returns, %B uses memory" +msgstr "Cảnh báo : %B dùng r3/r4 để trả lại cấu trúc nhỏ, %B dùng phần nhớ" -#: elf32-ppc.c:6006 -msgid "unable to read in %s section from %B" -msgstr "không đọc được trong phần %s từ %B" +#: elf32-ppc.c:4162 elf32-ppc.c:4166 +msgid "Warning: %B uses unknown small structure return convention %d" +msgstr "Cảnh báo : %B dùng quy ước trả lại cấu trúc nhỏ không rõ %d" -#: elf32-ppc.c:6012 -msgid "corrupt %s section in %B" -msgstr "phần %s hỏng trong %B" +#: elf32-ppc.c:4220 +msgid "%B: compiled with -mrelocatable and linked with modules compiled normally" +msgstr "%B: đã biên dịch với « -mrelocatable » và đã liên kết với các môđun biên dịch bình thường" -#: elf32-ppc.c:6055 -msgid "warning: unable to set size of %s section in %B" -msgstr "cảnh báo: không đặt được kích thước của phần %s trong %B" +#: elf32-ppc.c:4228 +msgid "%B: compiled normally and linked with modules compiled with -mrelocatable" +msgstr "%B: đã biên dịch bình thường và đã liên kết với các môđun biên dịch với « -mrelocatable »" -#: elf32-ppc.c:6104 -msgid "failed to allocate space for new APUinfo section." -msgstr "phân phối không gian cho phần APUinfo mới không thành công." +#: elf32-ppc.c:4314 +msgid "Using bss-plt due to %B" +msgstr "Đang dùng biss-pit do %B" -#: elf32-ppc.c:6123 -msgid "failed to compute new APUinfo section." -msgstr "tính toán phần APUinfo mới không thành công." +#: elf32-ppc.c:7056 elf64-ppc.c:11364 +msgid "%B: unknown relocation type %d for symbol %s" +msgstr "%B: không rõ kiểu định vị lại %d cho ký hiệu %s" -#: elf32-ppc.c:6126 -msgid "failed to install new APUinfo section." -msgstr "cài đặt phần APUinfo mới không thành công." +#: elf32-ppc.c:7316 +msgid "%B(%A+0x%lx): non-zero addend on %s reloc against `%s'" +msgstr "%B(%A+0x%lx): số hạng khác không trên định vị lại %s đối với « %s »" -#: elf32-s390.c:2234 elf64-s390.c:2205 -msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" -msgstr "%B(%A+0x%lx): chỉ dẫn sai cho định vị lại TLS %s" +#: elf32-ppc.c:7499 elf64-ppc.c:11854 +msgid "%B(%A+0x%lx): relocation %s for indirect function %s unsupported" +msgstr "%B(%A+0x%lx): không hỗ trợ sự định vị lại %s cho hàm gián tiếp %s" -#: elf32-sh64.c:218 elf64-sh64.c:2319 -#, c-format -msgid "%s: compiled as 32-bit object and %s is 64-bit" -msgstr "%s: biên dịch như một vật thể 32 bit và %s là 64 bit" +#: elf32-ppc.c:7709 elf32-ppc.c:7736 elf32-ppc.c:7787 +msgid "%B: the target (%s) of a %s relocation is in the wrong output section (%s)" +msgstr "%B: đích (%s) của một định vị lại %s nằm trong phần kết xuất không đúng (%s)" -#: elf32-sh64.c:221 elf64-sh64.c:2322 -#, c-format -msgid "%s: compiled as 64-bit object and %s is 32-bit" -msgstr "%s: biên dịch như một vật thể 64 bit và %s là 32 bit" +#: elf32-ppc.c:7847 +msgid "%B: relocation %s is not yet supported for symbol %s." +msgstr "%B: định vị lại %s chưa được hỗ trợ cho ký hiệu %s." -#: elf32-sh64.c:223 elf64-sh64.c:2324 -#, c-format -msgid "%s: object size does not match that of target %s" -msgstr "%s: kích thước vật thể không tương ứng với đối tượng đích %s" +#: elf32-ppc.c:7955 elf64-ppc.c:12110 +msgid "%B(%A+0x%lx): %s reloc against `%s': error %d" +msgstr "%B(%A+0x%lx): %s định vị lại đối với « %s »: lỗi %d" -#: elf32-sh64.c:445 elf64-sh64.c:2890 +#: elf32-ppc.c:8423 #, c-format -msgid "%s: encountered datalabel symbol in input" -msgstr "%s: tìm thấy ký hiệu nhãn dữ liệu trong nhập vào" +msgid "%s not defined in linker created %s" +msgstr "%s chưa được xác định trong bộ liên kết được tạo %s" -#: elf32-sh64.c:522 -msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" -msgstr "không tương ứng PTB: một địa chỉ SHmedia (bit 0 == 1)" +#: elf32-s390.c:2207 elf64-s390.c:2179 +msgid "%B(%A+0x%lx): invalid instruction for TLS relocation %s" +msgstr "%B(%A+0x%lx): chỉ dẫn không hợp lệ cho định vị lại TLS %s" -#: elf32-sh64.c:525 -msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" -msgstr "không tương ứng PTA: một địa chỉ SHcompact (bit 0 == 0)" +#: elf32-score.c:1533 elf32-score7.c:1424 elfxx-mips.c:3299 +msgid "not enough GOT space for local GOT entries" +msgstr "không đủ sức chứa GOT cho các mục nhập GOT cục bộ" + +#: elf32-score.c:2765 +msgid "address not word align" +msgstr "địa chỉ không sắp hàng từ" -#: elf32-sh64.c:543 +#: elf32-score.c:2850 elf32-score7.c:2685 #, c-format -msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" -msgstr "%s: Lỗi GAS: insn PTB không mong đợi với R_SH_PT_16" +msgid "%s: Malformed reloc detected for section %s" +msgstr "%s: định vị lại dạng sai được phát hiện cho phần %s" -#: elf32-sh64.c:592 -msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" -msgstr "%B: lỗi: dạng định vị lại chưa sắp hàng %d tại %08x reloc %p\n" +#: elf32-score.c:2901 elf32-score7.c:2736 +msgid "%B: CALL15 reloc at 0x%lx not against global symbol" +msgstr "%B: CALL15 định vị lại tại 0x%lx không phải so với ký hiệu toàn cục" -#: elf32-sh64.c:668 +#: elf32-score.c:4042 elf32-score7.c:3879 #, c-format -msgid "%s: could not write out added .cranges entries" -msgstr "%s: không ghi ra được các mục .cranges đã thêm vào" +msgid " [pic]" +msgstr " [ảnh]" -#: elf32-sh64.c:728 +#: elf32-score.c:4046 elf32-score7.c:3883 #, c-format -msgid "%s: could not write out sorted .cranges entries" -msgstr "%s: không ghi ra được các mục .cranges đã sắp xếp" +msgid " [fix dep]" +msgstr " [sửa quan hệ phụ thuộc]" + +#: elf32-score.c:4088 elf32-score7.c:3925 +msgid "%B: warning: linking PIC files with non-PIC files" +msgstr "%B: cảnh báo : đang liên kết tập tin PIC với tập tin khác PIC" -#: elf32-sh.c:2176 +#: elf32-sh-symbian.c:130 +msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" +msgstr "%B: chỉ thị IMPORT AS (nhập dạng) cho %s cũng ẩn chỉ thị IMPORT AS trước" + +#: elf32-sh-symbian.c:383 +msgid "%B: Unrecognised .directive command: %s" +msgstr "%B: Không nhận ra câu lệnh .directive: %s" + +#: elf32-sh-symbian.c:503 +msgid "%B: Failed to add renamed symbol %s" +msgstr "%B: Lỗi thêm ký hiệu đã đặt tên lại %s" + +#: elf32-sh.c:533 msgid "%B: 0x%lx: warning: bad R_SH_USES offset" -msgstr "%B: 0x%lx: cảnh báo: bộ R_SH_USES xấu" +msgstr "%B: 0x%lx: cảnh báo : khoảng bù R_SH_USES sai" -#: elf32-sh.c:2188 +#: elf32-sh.c:545 msgid "%B: 0x%lx: warning: R_SH_USES points to unrecognized insn 0x%x" -msgstr "%B: 0x%lx: cảnh báo: R_SH_USES chỉ tới một insn không nhận ra 0x%x" +msgstr "%B: 0x%lx: cảnh báo : R_SH_USES chỉ tới một chỉ dẫn không nhận ra 0x%x" -#: elf32-sh.c:2205 +#: elf32-sh.c:562 msgid "%B: 0x%lx: warning: bad R_SH_USES load offset" -msgstr "%B: 0x%lx: cảnh báo: bộ nạp R_SH_USES xấu" +msgstr "%B: 0x%lx: cảnh báo : khoảng bù nạp R_SH_USES sai" -#: elf32-sh.c:2220 +#: elf32-sh.c:577 msgid "%B: 0x%lx: warning: could not find expected reloc" -msgstr "%B: 0x%lx: cảnh báo: không tìm thấy reloc mong đợi" +msgstr "%B: 0x%lx: cảnh báo : không tìm thấy định vị lại mong đợi" -#: elf32-sh.c:2248 +#: elf32-sh.c:605 msgid "%B: 0x%lx: warning: symbol in unexpected section" -msgstr "%B: 0x%lx: cảnh báo: ký hiệu nằm trong phần không mong đợi" +msgstr "%B: 0x%lx: cảnh báo : ký hiệu nằm trong phần bất thường" -#: elf32-sh.c:2361 +#: elf32-sh.c:731 msgid "%B: 0x%lx: warning: could not find expected COUNT reloc" -msgstr "%B: 0x%lx: cảnh báo: không tìm thấy reloc COUNT mong đợi" +msgstr "%B: 0x%lx: cảnh báo : không tìm thấy định vị lại COUNT (đếm) mong đợi" -#: elf32-sh.c:2370 +#: elf32-sh.c:740 msgid "%B: 0x%lx: warning: bad count" -msgstr "%B: 0x%lx: cảnh báo: số đếm xấu" +msgstr "%B: 0x%lx: cảnh báo : đếm sai" -#: elf32-sh.c:2765 elf32-sh.c:3135 +#: elf32-sh.c:1144 elf32-sh.c:1514 msgid "%B: 0x%lx: fatal: reloc overflow while relaxing" -msgstr "%B: 0x%lx: lỗi nặng: reloc tràn ra khi giảm nhẹ" +msgstr "%B: 0x%lx: lỗi nặng: tràn định vị lại trong khi giảm nhẹ" -#: elf32-sh.c:4558 elf64-sh64.c:1509 +#: elf32-sh.c:3270 elf64-sh64.c:1526 msgid "Unexpected STO_SH5_ISA32 on local symbol is not handled" -msgstr "Không điều khiển STO_SH5_ISA32 không mong đợi trên ký hiệu nội bộ" +msgstr "Không xử lý được STO_SH5_ISA32 không mong đợi trên ký hiệu cục bộ" -#: elf32-sh.c:4709 -msgid "%B(%A): unresolvable relocation against symbol `%s'" -msgstr "%B(%A): định vị lại không tìm thấy đối với ký hiệu `%s'" - -#: elf32-sh.c:4779 +#: elf32-sh.c:3507 msgid "%B: 0x%lx: fatal: unaligned branch target for relax-support relocation" -msgstr "" +msgstr "%B: 0x%lx: lỗi nặng: có đích nhánh chưa sắp hàng cho định vị lại hỗ trợ giảm nhẹ" -#: elf32-sh.c:4812 elf32-sh.c:4827 +#: elf32-sh.c:3540 elf32-sh.c:3555 msgid "%B: 0x%lx: fatal: unaligned %s relocation 0x%lx" -msgstr "" +msgstr "%B: 0x%lx: lỗi nặng: định vị lại %s chưa sắp hàng 0x%lx" -#: elf32-sh.c:4841 +#: elf32-sh.c:3569 msgid "%B: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32" -msgstr "" +msgstr "%B: 0x%lx: lỗi nặng: R_SH_PSHA định vị lại %d không nằm trong phạm vi -32..32" -#: elf32-sh.c:4855 +#: elf32-sh.c:3583 msgid "%B: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32" -msgstr "" +msgstr "%B: 0x%lx: lỗi nặng: R_SH_PSHL định vị lại %d không nằm trong phạm vi -32..32" -#: elf32-sh.c:6599 elf64-alpha.c:4725 +#: elf32-sh.c:5256 elf64-alpha.c:4525 msgid "%B: TLS local exec code cannot be linked into shared objects" -msgstr "" +msgstr "%B: mã thực hiện cục bộ TLS không thể được liên kết vào đối tượng chia sẻ" -#: elf32-sh-symbian.c:128 -msgid "%B: IMPORT AS directive for %s conceals previous IMPORT AS" -msgstr "" +#: elf32-sh64.c:222 elf64-sh64.c:2333 +#, c-format +msgid "%s: compiled as 32-bit object and %s is 64-bit" +msgstr "%s: biên dịch như một đối tượng 32-bit và %s là 64-bit" -#: elf32-sh-symbian.c:381 -msgid "%B: Unrecognised .directive command: %s" -msgstr "" +#: elf32-sh64.c:225 elf64-sh64.c:2336 +#, c-format +msgid "%s: compiled as 64-bit object and %s is 32-bit" +msgstr "%s: biên dịch như một đối tượng 64-bit và %s là 32-bit" -#: elf32-sh-symbian.c:502 -msgid "%B: Failed to add renamed symbol %s" -msgstr "" +#: elf32-sh64.c:227 elf64-sh64.c:2338 +#, c-format +msgid "%s: object size does not match that of target %s" +msgstr "%s: kích cỡ đối tượng không tương ứng với kích cỡ của đích %s" -#: elf32-sparc.c:2501 elf64-sparc.c:2340 -msgid "%B: probably compiled without -fPIC?" -msgstr "" +#: elf32-sh64.c:450 elf64-sh64.c:2852 +#, c-format +msgid "%s: encountered datalabel symbol in input" +msgstr "%s: gặp ký hiệu nhãn dữ liệu trong dữ liệu nhập vào" -#: elf32-sparc.c:3324 -msgid "%B: compiled for a 64 bit system and target is 32 bit" -msgstr "" +#: elf32-sh64.c:527 +msgid "PTB mismatch: a SHmedia address (bit 0 == 1)" +msgstr "Sai khớp PTB: một địa chỉ SHmedia (bit 0 == 1)" -#: elf32-sparc.c:3337 -msgid "%B: linking little endian files with big endian files" -msgstr "" +#: elf32-sh64.c:530 +msgid "PTA mismatch: a SHcompact address (bit 0 == 0)" +msgstr "Sai khớp PTA: một địa chỉ SHcompact (bit 0 == 0)" -#: elf32-v850.c:769 +#: elf32-sh64.c:548 #, c-format -msgid "Variable `%s' cannot occupy in multiple small data regions" -msgstr "" +msgid "%s: GAS error: unexpected PTB insn with R_SH_PT_16" +msgstr "%s: Lỗi GAS: chỉ dẫn PTB bất thường với R_SH_PT_16" -#: elf32-v850.c:772 -#, c-format -msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" -msgstr "" +#: elf32-sh64.c:597 +msgid "%B: error: unaligned relocation type %d at %08x reloc %p\n" +msgstr "%B: lỗi: kiểu định vị lại chưa sắp hàng %d tại %08x định vị lại %p\n" -#: elf32-v850.c:775 +#: elf32-sh64.c:673 #, c-format -msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" -msgstr "" +msgid "%s: could not write out added .cranges entries" +msgstr "%s: không thể ghi ra các mục nhập .cranges đã thêm" -#: elf32-v850.c:778 +#: elf32-sh64.c:733 #, c-format -msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" -msgstr "" +msgid "%s: could not write out sorted .cranges entries" +msgstr "%s: không thể ghi ra các mục nhập .cranges đã sắp xếp" -#: elf32-v850.c:781 -#, c-format -msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" -msgstr "" +#: elf32-sparc.c:89 +msgid "%B: compiled for a 64 bit system and target is 32 bit" +msgstr "%B: được biên dịch cho hệ thống 64-bit, còn đích là 32-bit" -#: elf32-v850.c:1090 -#, c-format -msgid "FAILED to find previous HI16 reloc\n" -msgstr "" +#: elf32-sparc.c:102 +msgid "%B: linking little endian files with big endian files" +msgstr "%B: đang liên kết tập tin về cuối nhỏ với tập tin về cuối lớn" -#: elf32-v850.c:1761 -msgid "could not locate special linker symbol __gp" -msgstr "" +#: elf32-spu.c:723 +msgid "%X%P: overlay section %A does not start on a cache line.\n" +msgstr "%X%P: phần phủ %A không bắt đầu ở một dòng nhớ tạm.\n" -#: elf32-v850.c:1765 -msgid "could not locate special linker symbol __ep" -msgstr "" +#: elf32-spu.c:731 +msgid "%X%P: overlay section %A is larger than a cache line.\n" +msgstr "%X%P: phần phủ %A lớn hơn một dòng nhớ tạm.\n" -#: elf32-v850.c:1769 -msgid "could not locate special linker symbol __ctbp" -msgstr "" +#: elf32-spu.c:751 +msgid "%X%P: overlay section %A is not in cache area.\n" +msgstr "%X%P: phần phủ %A không phải trong vùng nhớ tạm.\n" -#: elf32-v850.c:1954 -msgid "%B: Architecture mismatch with previous modules" -msgstr "" +#: elf32-spu.c:791 +msgid "%X%P: overlay sections %A and %A do not start at the same address.\n" +msgstr "%X%P: hai phần phủ %A và %A không bắt đầu ở cùng một địa chỉ.\n" -#: elf32-v850.c:1975 -#, c-format -msgid "private flags = %lx: " -msgstr "" +#: elf32-spu.c:1015 +msgid "warning: call to non-function symbol %s defined in %B" +msgstr "cảnh báo : cuộc gọi ký hiệu khác hàm %s được xác định trong %B" -#: elf32-v850.c:1980 -#, c-format -msgid "v850 architecture" -msgstr "" +#: elf32-spu.c:1365 +msgid "%A:0x%v lrlive .brinfo (%u) differs from analysis (%u)\n" +msgstr "%A:0x%v lrlive .brinfo (%u) khác với phân tích (%u)\n" -#: elf32-v850.c:1981 -#, c-format -msgid "v850e architecture" -msgstr "" +#: elf32-spu.c:1884 +msgid "%B is not allowed to define %s" +msgstr "không cho phép %B xác định %s" -#: elf32-v850.c:1982 +#: elf32-spu.c:1892 #, c-format -msgid "v850e1 architecture" -msgstr "" +msgid "you are not allowed to define %s in a script" +msgstr "không cho phép bạn xác định %s trong một văn lệnh" -#: elf32-vax.c:549 +#: elf32-spu.c:1926 #, c-format -msgid " [nonpic]" -msgstr "" +msgid "%s in overlay section" +msgstr "%s trong phần phủ" -#: elf32-vax.c:552 -#, c-format -msgid " [d-float]" -msgstr "" +#: elf32-spu.c:1955 +msgid "overlay stub relocation overflow" +msgstr "tràn định vị lại mẩu phủ" -#: elf32-vax.c:555 -#, c-format -msgid " [g-float]" -msgstr "" +#: elf32-spu.c:1964 elf64-ppc.c:10441 +msgid "stubs don't match calculated size" +msgstr "các mẩu không tương ứng với kích cỡ đã tính" -#: elf32-vax.c:663 +#: elf32-spu.c:2546 #, c-format -msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" -msgstr "" +msgid "warning: %s overlaps %s\n" +msgstr "cảnh báo : %s đè lên %s\n" -#: elf32-vax.c:1636 +#: elf32-spu.c:2562 #, c-format -msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" -msgstr "" +msgid "warning: %s exceeds section size\n" +msgstr "cảnh báo : %s vượt quá kích cỡ phần\n" -#: elf32-vax.c:1760 +#: elf32-spu.c:2593 +msgid "%A:0x%v not found in function table\n" +msgstr "%A:0x%v không tìm thấy trong bảng hàm\n" + +#: elf32-spu.c:2740 +msgid "%B(%A+0x%v): call to non-code section %B(%A), analysis incomplete\n" +msgstr "%B(%A+0x%v): gọi phần khác mã %B(%A), chưa phân tích hoàn toàn\n" + +#: elf32-spu.c:3297 #, c-format -msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgid "Stack analysis will ignore the call from %s to %s\n" +msgstr "Tiến trình phân tích đống sẽ bỏ qua cuộc gọi từ %s cho %s\n" + +#: elf32-spu.c:3988 +msgid " %s: 0x%v\n" +msgstr " %s: 0x%v\n" + +#: elf32-spu.c:3989 +msgid "%s: 0x%v 0x%v\n" +msgstr "%s: 0x%v 0x%v\n" + +#: elf32-spu.c:3994 +msgid " calls:\n" +msgstr " cuộc gọi:\n" + +#: elf32-spu.c:4002 +#, c-format +msgid " %s%s %s\n" +msgstr " %s%s %s\n" + +#: elf32-spu.c:4304 +#, c-format +msgid "%s duplicated in %s\n" +msgstr "%s bị nhân đôi trong %s\n" + +#: elf32-spu.c:4308 +#, c-format +msgid "%s duplicated\n" +msgstr "%s bị nhân đôi\n" + +#: elf32-spu.c:4315 +msgid "sorry, no support for duplicate object files in auto-overlay script\n" +msgstr "tiếc là văn lệnh tự động phủ không hỗ trợ tập tin đối tượng tăng đôi\n" + +#: elf32-spu.c:4356 +msgid "non-overlay size of 0x%v plus maximum overlay size of 0x%v exceeds local store\n" +msgstr "kích cỡ khác phủ 0x%v cộng với kích cỡ phủ tối đa 0x%v thì vượt quá kho cục bộ\n" + +#: elf32-spu.c:4512 +msgid "%B:%A%s exceeds overlay size\n" +msgstr "%B:%A%s vượt quá kích cỡ phủ\n" + +#: elf32-spu.c:4669 +msgid "Stack size for call graph root nodes.\n" +msgstr "Kích cỡ đống cho các nút thông tin gốc đồ thị cuộc gọi.\n" + +#: elf32-spu.c:4670 +msgid "" +"\n" +"Stack size for functions. Annotations: '*' max stack, 't' tail call\n" msgstr "" +"\n" +"Kích cỡ đống cho hàm, Ghi chú :\n" +" *\tđống tối đa\n" +" t\tcuộc gọi đuôi\n" + +#: elf32-spu.c:4680 +msgid "Maximum stack required is 0x%v\n" +msgstr "Đống tối đa cần thiết là 0x%v\n" -#: elf32-vax.c:1766 +#: elf32-spu.c:4771 +msgid "fatal error while creating .fixup" +msgstr "gặp lỗi nghiêm trọng trong khi tạo .fixup" + +#: elf32-spu.c:5009 +msgid "%B(%s+0x%lx): unresolvable %s relocation against symbol `%s'" +msgstr "%B(%s+0x%lx): không thể giải quyết định vị lại %s so với ký hiệu « %s »" + +#: elf32-v850.c:163 +#, c-format +msgid "Variable `%s' cannot occupy in multiple small data regions" +msgstr "Biến « %s » không thể chiếm nhiều vùng dữ liệu nhỏ" + +#: elf32-v850.c:166 +#, c-format +msgid "Variable `%s' can only be in one of the small, zero, and tiny data regions" +msgstr "Biến « %s » chỉ có thể nằm trong một của vùng dữ liệu kiểu nhỏ, số không và rất nhỏ" + +#: elf32-v850.c:169 +#, c-format +msgid "Variable `%s' cannot be in both small and zero data regions simultaneously" +msgstr "Biến « %s » không thể nằm đồng thời trong cả hai vùng dữ liệu kiểu nhỏ và số không" + +#: elf32-v850.c:172 +#, c-format +msgid "Variable `%s' cannot be in both small and tiny data regions simultaneously" +msgstr "Biến « %s » không thể nằm đồng thời trong cả hai vùng dữ liệu kiểu nhỏ và rất nhỏ" + +#: elf32-v850.c:175 +#, c-format +msgid "Variable `%s' cannot be in both zero and tiny data regions simultaneously" +msgstr "Biến « %s » không thể nằm đồng thời trong cả hai vùng dữ liệu kiểu rất nhỏ và số không" + +#: elf32-v850.c:478 +#, c-format +msgid "FAILED to find previous HI16 reloc\n" +msgstr "LỖI tìm định vị lại HI16 trước\n" + +#: elf32-v850.c:1713 +msgid "could not locate special linker symbol __gp" +msgstr "không tìm thấy ký hiệu liên kết đặc biệt __gp" + +#: elf32-v850.c:1717 +msgid "could not locate special linker symbol __ep" +msgstr "không tìm thấy ký hiệu liên kết đặc biệt __ep" + +#: elf32-v850.c:1721 +msgid "could not locate special linker symbol __ctbp" +msgstr "không tìm thấy ký hiệu liên kết đặc biệt __ctbp" + +#: elf32-v850.c:1871 +msgid "%B: Architecture mismatch with previous modules" +msgstr "%B: sai khớp kiến trúc với mô-đun khác" + +#: elf32-v850.c:1890 +#, c-format +msgid "private flags = %lx: " +msgstr "các cờ riêng — %lx: " + +#: elf32-v850.c:1895 +#, c-format +msgid "v850 architecture" +msgstr "Kiến trúc v850" + +#: elf32-v850.c:1896 +#, c-format +msgid "v850e architecture" +msgstr "Kiến trúc v850e" + +#: elf32-v850.c:1897 +#, c-format +msgid "v850e1 architecture" +msgstr "Kiến trúc v850e1" + +#: elf32-vax.c:543 +#, c-format +msgid " [nonpic]" +msgstr " [khác pic]" + +#: elf32-vax.c:546 +#, c-format +msgid " [d-float]" +msgstr " [trôi d]" + +#: elf32-vax.c:549 +#, c-format +msgid " [g-float]" +msgstr " [trôi g]" + +#: elf32-vax.c:666 +#, c-format +msgid "%s: warning: GOT addend of %ld to `%s' does not match previous GOT addend of %ld" +msgstr "%s: cảnh báo : số hạng GOT của %ld cho « %s » không tương ứng với số hạng GOT trước của %ld" + +#: elf32-vax.c:1608 +#, c-format +msgid "%s: warning: PLT addend of %d to `%s' from %s section ignored" +msgstr "%s: cảnh báo : số hạng PLT của %d cho « %s » từ phần %s bị bỏ qua" + +#: elf32-vax.c:1735 +#, c-format +msgid "%s: warning: %s relocation against symbol `%s' from %s section" +msgstr "%s: cảnh báo : định vị lại %s so với ký hiệu « %s » từ phần %s" + +#: elf32-vax.c:1741 #, c-format msgid "%s: warning: %s relocation to 0x%x from %s section" -msgstr "" +msgstr "%s: cảnh báo : định vị lại %s sang 0x%x từ phần %s" -#: elf32-xstormy16.c:462 elf32-ia64.c:2394 elf64-ia64.c:2394 +#: elf32-xstormy16.c:451 elf32-ia64.c:2791 elf64-ia64.c:2791 msgid "non-zero addend in @fptr reloc" -msgstr "" +msgstr "số hạng khác không trong định vị lại @fptr" -#: elf32-xtensa.c:709 +#: elf32-xtensa.c:912 msgid "%B(%A): invalid property table" -msgstr "" +msgstr "%B(%A): bảng thuộc tính sai" -#: elf32-xtensa.c:2209 +#: elf32-xtensa.c:2740 msgid "%B(%A+0x%lx): relocation offset out of range (size=0x%x)" -msgstr "" +msgstr "%B(%A+0x%lx): khoảng bù định vị lại ở ngoại phạm vi (kích cỡ=0x%x)" -#: elf32-xtensa.c:2266 +#: elf32-xtensa.c:2819 elf32-xtensa.c:2940 msgid "dynamic relocation in read-only section" -msgstr "" +msgstr "định vị lại động trong vùng chỉ đọc" + +#: elf32-xtensa.c:2916 +msgid "TLS relocation invalid without dynamic sections" +msgstr "Định vị lại TLS không hợp lệ mà không có phần động" -#: elf32-xtensa.c:2430 +#: elf32-xtensa.c:3133 msgid "internal inconsistency in size of .got.loc section" -msgstr "" +msgstr "sự mâu thuẫn nội bộ trong kích cỡ của phần .got.loc" -#: elf32-xtensa.c:2744 +#: elf32-xtensa.c:3443 msgid "%B: incompatible machine type. Output is 0x%x. Input is 0x%x" -msgstr "" +msgstr "%B: kiểu máy không tương thích. Kết xuất là 0x%x. Dữ liệu nhập vào là 0x%x." -#: elf32-xtensa.c:3890 elf32-xtensa.c:3898 +#: elf32-xtensa.c:4672 elf32-xtensa.c:4680 msgid "Attempt to convert L32R/CALLX to CALL failed" -msgstr "" +msgstr "Lỗi thử chuyển đổi L32R/CALLX sang CALL" -#: elf32-xtensa.c:5476 elf32-xtensa.c:5552 elf32-xtensa.c:6505 -#: elf32-xtensa.c:6559 +#: elf32-xtensa.c:6290 elf32-xtensa.c:6366 elf32-xtensa.c:7486 msgid "%B(%A+0x%lx): could not decode instruction; possible configuration mismatch" -msgstr "" +msgstr "%B(%A+0x%lx): không thể giải mã chỉ dẫn; có thể sai khớp cấu hình" -#: elf32-xtensa.c:6378 elf32-xtensa.c:6541 +#: elf32-xtensa.c:7226 msgid "%B(%A+0x%lx): could not decode instruction for XTENSA_ASM_SIMPLIFY relocation; possible configuration mismatch" -msgstr "" +msgstr "%B(%A+0x%lx): không thể giải mã chỉ dẫn cho định vị lại XTENSA_ASM_SIMPLIFY; có thể sai khớp cấu hình" -#: elf32-xtensa.c:7859 +#: elf32-xtensa.c:8987 msgid "invalid relocation address" -msgstr "" +msgstr "địa chỉ định vị lại không hợp lệ" -#: elf32-xtensa.c:7908 +#: elf32-xtensa.c:9036 msgid "overflow after relaxation" -msgstr "" +msgstr "tràn sau khi giảm nhẹ" -#: elf32-xtensa.c:9036 +#: elf32-xtensa.c:10167 msgid "%B(%A+0x%lx): unexpected fix for %s relocation" -msgstr "" +msgstr "%B(%A+0x%lx): sửa chữa bất thường cho định vị lại %s" -#: elf64-alpha.c:1069 +#: elf64-alpha.c:452 msgid "GPDISP relocation did not find ldah and lda instructions" -msgstr "" +msgstr "Định vị lại GPDISP không tìm thấy các chỉ dẫn ldah và lda" -#: elf64-alpha.c:3557 -#, c-format -msgid "Symbol %s has no GOT subsection for offset 0x%x" -msgstr "" - -#: elf64-alpha.c:3642 +#: elf64-alpha.c:2389 msgid "%B: .got subsegment exceeds 64K (size %d)" -msgstr "" +msgstr "%B: đoạn phụ .got vượt quá 64 K (kích cỡ %d)" -#: elf64-alpha.c:4479 elf64-alpha.c:4491 +#: elf64-alpha.c:4269 elf64-alpha.c:4281 msgid "%B: gp-relative relocation against dynamic symbol %s" -msgstr "" +msgstr "%B: định vị lại tương đối với gp (gp-relative) so với ký hiệu động %s" -#: elf64-alpha.c:4517 elf64-alpha.c:4650 +#: elf64-alpha.c:4307 elf64-alpha.c:4442 msgid "%B: pc-relative relocation against dynamic symbol %s" -msgstr "" +msgstr "%B: định vị lại tương đối với pc (pc-relative) so với ký hiệu động %s" -#: elf64-alpha.c:4545 +#: elf64-alpha.c:4335 msgid "%B: change in gp: BRSGP %s" -msgstr "" +msgstr "%B: thay đổi trong gp: BRSGP %s" -#: elf64-alpha.c:4570 +#: elf64-alpha.c:4360 msgid "" -msgstr "" +msgstr "" -#: elf64-alpha.c:4575 +#: elf64-alpha.c:4365 msgid "%B: !samegp reloc against symbol without .prologue: %s" -msgstr "" +msgstr "%B: định vị lại !samegp so với ký hiệu không có .prologue: %s" -#: elf64-alpha.c:4626 +#: elf64-alpha.c:4417 msgid "%B: unhandled dynamic relocation against %s" -msgstr "" +msgstr "%B: không xử lý được định vị lại động so với %s" -#: elf64-alpha.c:4709 +#: elf64-alpha.c:4449 +msgid "%B: pc-relative relocation against undefined weak symbol %s" +msgstr "%B: định vị lại tương đối với pc (pc-relative) so với ký hiệu yếu chưa được xác định %s" + +#: elf64-alpha.c:4509 msgid "%B: dtp-relative relocation against dynamic symbol %s" -msgstr "" +msgstr "%B: định vị lại tương đối với dtp (dtp-relative) so với ký hiệu động %s" -#: elf64-alpha.c:4732 +#: elf64-alpha.c:4532 msgid "%B: tp-relative relocation against dynamic symbol %s" -msgstr "" +msgstr "%B: định vị lại tương đối với tp (tp-relative) so với ký hiệu động %s" -#: elf64-hppa.c:2085 +#: elf64-hppa.c:2091 #, c-format msgid "stub entry for %s cannot load .plt, dp offset = %ld" -msgstr "" +msgstr "mục nhập mẩu cho %s không thể nạp .plt, khoảng bù dp = %ld" + +#: elf64-hppa.c:3273 +msgid "%B(%A+0x%lx): cannot reach %s" +msgstr "%B(%A+0x%lx): không thể tới %s" -#: elf64-mmix.c:1163 +#: elf64-mmix.c:1177 #, c-format msgid "" "%s: Internal inconsistency error for value for\n" " linker-allocated global register: linked: 0x%lx%08lx != relaxed: 0x%lx%08lx\n" msgstr "" +"%s: Gặp lỗi mâu thuẫn nội bộ cho giá trị của thanh ghi toàn cục\n" +"cấp phát cho bộ liên kết:\n" +"đã liên kết: 0x%lx%08lx != đã giảm nhẹ: 0x%lx%08lx\n" -#: elf64-mmix.c:1602 +#: elf64-mmix.c:1618 #, c-format msgid "%s: base-plus-offset relocation against register symbol: (unknown) in %s" -msgstr "" +msgstr "%s: định vị lại base-plus-offset so với ký hiệu thanh ghi: (không rõ) trong %s" -#: elf64-mmix.c:1607 +#: elf64-mmix.c:1623 #, c-format msgid "%s: base-plus-offset relocation against register symbol: %s in %s" -msgstr "" +msgstr "%s: định vị lại base-plus-offset so với ký hiệu thanh ghi: %s trong %s" -#: elf64-mmix.c:1651 +#: elf64-mmix.c:1667 #, c-format msgid "%s: register relocation against non-register symbol: (unknown) in %s" -msgstr "" +msgstr "%s: định vị lại thanh ghi so với ký hiệu khác thanh ghi: (không rõ) trong %s" -#: elf64-mmix.c:1656 +#: elf64-mmix.c:1672 #, c-format msgid "%s: register relocation against non-register symbol: %s in %s" -msgstr "" +msgstr "%s: định vị lại thanh ghi so với ký hiệu khác thanh ghi: %s trong %s" -#: elf64-mmix.c:1693 +#: elf64-mmix.c:1709 #, c-format msgid "%s: directive LOCAL valid only with a register or absolute value" -msgstr "" +msgstr "%s: chỉ thị LOCAL (cục bộ) hợp lệ chỉ với một thanh ghi hoặc giá trị tuyệt đối" -#: elf64-mmix.c:1721 +#: elf64-mmix.c:1737 #, c-format msgid "%s: LOCAL directive: Register $%ld is not a local register. First global register is $%ld." msgstr "" +"%s: chỉ thị LOCAL (cục bộ): Thanh ghi $%ld không phải là một thanh ghi cục bộ.\n" +"Thanh ghi toàn cục thứ nhất là $%ld." #: elf64-mmix.c:2201 #, c-format msgid "%s: Error: multiple definition of `%s'; start of %s is set in a earlier linked file\n" msgstr "" +"%s: Lỗi: định nghĩa nhiều lần « %s »; đầu của %s được đặt\n" +"trong một tập tin đã liên kết sớm hơn\n" -#: elf64-mmix.c:2260 +#: elf64-mmix.c:2259 msgid "Register section has contents\n" -msgstr "" +msgstr "Phần thanh ghi có nội dung\n" -#: elf64-mmix.c:2453 +#: elf64-mmix.c:2451 #, c-format msgid "" "Internal inconsistency: remaining %u != max %u.\n" " Please report this bug." msgstr "" +"Sự mâu thuẫn nội bộ : còn lại %u != tối đa %u.\n" +" Hãy thông báo lỗi này." -#: elf64-ppc.c:2490 libbfd.c:826 +#: elf64-ppc.c:2691 libbfd.c:978 msgid "%B: compiled for a big endian system and target is little endian" -msgstr "" +msgstr "%B: được biên dịch cho một hệ thống về cuối lớn, còn đích về cuối nhỏ" -#: elf64-ppc.c:2493 libbfd.c:828 +#: elf64-ppc.c:2694 libbfd.c:980 msgid "%B: compiled for a little endian system and target is big endian" -msgstr "" +msgstr "%B: được biên dịch cho một hệ thống về cuối nhỏ, còn đích về cuối lớn" -#: elf64-ppc.c:5640 +#: elf64-ppc.c:6338 #, c-format msgid "copy reloc against `%s' requires lazy plt linking; avoid setting LD_BIND_NOW=1 or upgrade gcc" -msgstr "" +msgstr "định vị lại sao chép so với « %s » thì cần thiết chức năng liên kết plt uể oải; hãy tránh đặtLD_BIND_NOW=1, hoặc nân cấp GCC" -#: elf64-ppc.c:6043 +#: elf64-ppc.c:6767 +msgid "dynreloc miscount for %B, section %A" +msgstr "sai đếm định vị lại động cho %B, phần %A" + +#: elf64-ppc.c:6851 msgid "%B: .opd is not a regular array of opd entries" -msgstr "" +msgstr "%B: .opd không phải là một mảng chính quy các mục nhập opd" -#: elf64-ppc.c:6052 +#: elf64-ppc.c:6860 msgid "%B: unexpected reloc type %u in .opd section" -msgstr "" +msgstr "%B: gặp kiểu định vị lại bất thường %u trong phần .opd" -#: elf64-ppc.c:6072 +#: elf64-ppc.c:6881 msgid "%B: undefined sym `%s' in .opd section" -msgstr "" +msgstr "%B: gặp sym (liên kết mềm?) chưa được xác định « %s » trong phần .opd" -#: elf64-ppc.c:6757 elf64-ppc.c:7132 +#: elf64-ppc.c:7640 elf64-ppc.c:8017 #, c-format msgid "%s defined in removed toc entry" -msgstr "" +msgstr "%s được xác định trong mục nhập toc bị gỡ bỏ" -#: elf64-ppc.c:7921 +#: elf64-ppc.c:8910 +#, c-format +msgid "long branch stub `%s' offset overflow" +msgstr "mẩu nhánh dài « %s » tràn khoảng bù" + +#: elf64-ppc.c:8969 #, c-format msgid "can't find branch stub `%s'" -msgstr "" +msgstr "không tìm thấy mẩu nhánh « %s »" -#: elf64-ppc.c:7960 elf64-ppc.c:8036 +#: elf64-ppc.c:9031 elf64-ppc.c:9169 #, c-format msgid "linkage table error against `%s'" -msgstr "" +msgstr "lỗi bảng liên kết so với « %s »" -#: elf64-ppc.c:8165 +#: elf64-ppc.c:9326 #, c-format msgid "can't build branch stub `%s'" -msgstr "" +msgstr "không thể xây dựng mẩu nhánh « %s »" -#: elf64-ppc.c:9093 -msgid ".glink and .plt too far apart" -msgstr "" +#: elf64-ppc.c:9799 +msgid "%B section %A exceeds stub group size" +msgstr "%B phần %A vượt quá kích cỡ nhóm mẩu" -#: elf64-ppc.c:9206 -msgid "stubs don't match calculated size" -msgstr "" - -#: elf64-ppc.c:9218 +#: elf64-ppc.c:10453 #, c-format msgid "" "linker stubs in %u group%s\n" @@ -1821,954 +2520,1039 @@ msgid "" " long toc adj %lu\n" " plt call %lu" msgstr "" +"các mẩu liên kết trong nhóm %u%s\n" +" nhánh\t\t\t\t%lu\n" +" điều chỉnh toc\t\t%lu\n" +" nhánh dài\t\t\t%lu\n" +" điều chỉnh toc dài\t\t%lu\n" +" cuộc gọi pit\t\t\t%lu" -#: elf64-ppc.c:9455 -msgid "%B(%A+0x%lx): %s used with TLS symbol %s" -msgstr "" - -#: elf64-ppc.c:9456 -msgid "%B(%A+0x%lx): %s used with non-TLS symbol %s" -msgstr "" - -#: elf64-ppc.c:9856 +#: elf64-ppc.c:11252 msgid "%B(%A+0x%lx): automatic multiple TOCs not supported using your crt files; recompile with -mminimal-toc or upgrade gcc" -msgstr "" +msgstr "%B(%A+0x%lx): tự động tạo nhiều TOC không được hỗ trợ khi dùng các tập tin CRT của bạn; hãy biên dịch lại với « -mminimal-toc », hoặc nâng cấp GCC" -#: elf64-ppc.c:9864 +#: elf64-ppc.c:11260 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 "" +msgstr "%B(%A+0x%lx): tối ưu hoá cuộc gọi cùng chỗ cho « %s » không cho phép tự động tạo nhiều TOC; hãy biên dịch lại với « -mminimal-toc » hoặc « -fno-optimize-sibling-calls », hoặc làm cho « %s » là bên ngoài" -#: elf64-ppc.c:10508 +#: elf64-ppc.c:11961 msgid "%B: relocation %s is not supported for symbol %s." -msgstr "" +msgstr "%B: không hỗ trợ định vị lại %s cho ký hiệu %s." -#: elf64-ppc.c:10587 +#: elf64-ppc.c:12044 msgid "%B: error: relocation %s not a multiple of %d" -msgstr "" +msgstr "%B: lỗi: định vị lại %s không phải là bội số cho %d" -#: elf64-sh64.c:1673 +#: elf64-sh64.c:1701 #, c-format msgid "%s: error: unaligned relocation type %d at %08x reloc %08x\n" -msgstr "" - -#: elf64-sparc.c:1419 -msgid "%B: check_relocs: unhandled reloc type %d" -msgstr "" +msgstr "%s: lỗi: kiểu định vị lại chưa sắp hàng %d ở %08x định vị lại %08x\n" -#: elf64-sparc.c:1455 +#: elf64-sparc.c:439 msgid "%B: Only registers %%g[2367] can be declared using STT_REGISTER" -msgstr "" +msgstr "%B: Chỉ các thanh ghi %%g[2367] có thể được tuyên bố dùng STT_REGISTER" -#: elf64-sparc.c:1475 +#: elf64-sparc.c:459 msgid "Register %%g%d used incompatibly: %s in %B, previously %s in %B" -msgstr "" +msgstr "Thanh ghi %%g%d được dùng một cách không tương thích: %s trong %B, trước là %s trong %b" -#: elf64-sparc.c:1498 +#: elf64-sparc.c:482 msgid "Symbol `%s' has differing types: REGISTER in %B, previously %s in %B" -msgstr "" +msgstr "Ký hiệu « %s » có các kiểu khác hau: REGISTER (thanh ghi) trong %B, trước là %s trong %B" -#: elf64-sparc.c:1543 +#: elf64-sparc.c:527 msgid "Symbol `%s' has differing types: %s in %B, previously REGISTER in %B" -msgstr "" +msgstr "Ký hiệu « %s » có các kiểu khác hau: %s trong %b, trước là REGISTER (thanh ghi) trong %B" -#: elf64-sparc.c:3071 +#: elf64-sparc.c:679 msgid "%B: linking UltraSPARC specific with HAL specific code" -msgstr "" - -#: elf64-x86-64.c:667 elf64-x86-64.c:792 elf64-x86-64.c:1988 -msgid "%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC" -msgstr "" +msgstr "%B: đang liên kết UltraSPARC dứt khoát với mã đặc trưng cho HAL" -#: elf64-x86-64.c:735 -msgid "%B: %s' accessed both as normal and thread local symbol" -msgstr "" +#: elf64-x86-64.c:1337 +msgid "%B: '%s' accessed both as normal and thread local symbol" +msgstr "%B; « %s » được truy cập như là ký hiệu cả hai kiểu bình thường và mạch cục bộ" -#: elf64-x86-64.c:1984 -msgid "%B: relocation R_X86_64_PC32 against protected function `%s' can not be used when making a shared object" -msgstr "" - -#: elf.c:296 -msgid "%B: invalid string offset %u >= %lu for section `%s'" -msgstr "" - -#: elf.c:543 -msgid "%B: invalid SHT_GROUP entry" -msgstr "" - -#: elf.c:613 -msgid "%B: no group info for section %A" -msgstr "" - -#: elf.c:650 -msgid "%B: unknown [%d] section `%s' in group [%s]" -msgstr "" - -#: elf.c:1011 -#, c-format -msgid "" -"\n" -"Program Header:\n" -msgstr "" - -#: elf.c:1063 -#, c-format -msgid "" -"\n" -"Dynamic Section:\n" -msgstr "" - -#: elf.c:1188 -#, c-format -msgid "" -"\n" -"Version definitions:\n" -msgstr "" - -#: elf.c:1211 -#, c-format -msgid "" -"\n" -"Version References:\n" -msgstr "" - -#: elf.c:1216 -#, c-format -msgid " required from %s:\n" -msgstr "" - -#: elf.c:1905 -msgid "%B: invalid link %lu for reloc section %s (index %u)" -msgstr "" - -#: elf.c:2910 -msgid "%B: warning: sh_link not set for section `%S'" -msgstr "" - -#: elf.c:3904 -msgid "%B: Not enough room for program headers (allocated %u, need %u)" -msgstr "" - -#: elf.c:4010 -msgid "%B: The first section in the PT_DYNAMIC segment is not the .dynamic section" -msgstr "" - -#: elf.c:4054 -msgid "%B: Not enough room for program headers, try linking with -N" -msgstr "" +#: elf64-x86-64.c:2701 +msgid "%B: relocation %s against STT_GNU_IFUNC symbol `%s' has non-zero addend: %d" +msgstr "%B: sự định vị lại %s đối với ký hiệu STT_GNU_IFUNC « %s » có phần cộng khác số không: %d" -#: elf.c:4145 -msgid "%B: section %A lma 0x%lx overlaps previous sections" -msgstr "" +#: elf64-x86-64.c:2980 +msgid "%B: relocation R_X86_64_GOTOFF64 against protected function `%s' can not be used when making a shared object" +msgstr "%B: định vị lại R_X86_64_GOTOFF64 so với hàm đã bảo vệ « %s » thì không thể được dùng khi tạo một đối tượng chia sẻ" -#: elf.c:4546 -msgid "%B: warning: allocated section `%s' not in segment" -msgstr "" +#: elf64-x86-64.c:3091 +msgid "; recompile with -fPIC" +msgstr "; biên dịch lại với « -fPIC »" -#: elf.c:4850 -msgid "%B: symbol `%s' required but not present" -msgstr "" +#: elf64-x86-64.c:3096 +msgid "%B: relocation %s against %s `%s' can not be used when making a shared object%s" +msgstr "%B: không dùng được định vị lại %s đối với %s « %s » khi tạo một đối tượng chia sẻ %s" -#: elf.c:5147 -msgid "%B: warning: Empty loadable segment detected, is this intentional ?\n" -msgstr "" +#: elf64-x86-64.c:3098 +msgid "%B: relocation %s against undefined %s `%s' can not be used when making a shared object%s" +msgstr "%B: không dùng được định vị lại %s đối với %s chưa xác định « %s » khi tạo một đối tượng chia sẻ %s" -#: elf.c:5761 +#: elfcode.h:795 #, c-format -msgid "Unable to find equivalent output section for symbol '%s' from section '%s'" -msgstr "" +msgid "warning: %s has a corrupt string table index - ignoring" +msgstr "cảnh báo : %s có một chỉ mục bảng chuỗi bị hỏng: nên bỏ qua" -#: elf.c:6620 -msgid "%B: unsupported relocation type %s" -msgstr "" - -#: elfcode.h:1039 +#: elfcode.h:1201 #, c-format msgid "%s: version count (%ld) does not match symbol count (%ld)" -msgstr "" +msgstr "%s: số đếm phiên bản (%ld) không tương ứng với số đếm ký hiệu (%ld)" -#: elfcode.h:1266 +#: elfcode.h:1441 #, c-format msgid "%s(%s): relocation %d has invalid symbol index %ld" -msgstr "" +msgstr "%s(%s): định vị lại %d có chỉ mục ký hiệu không hợp lệ %ld" -#: elf-hppa.h:1401 elf-hppa.h:1427 elf-hppa.h:1442 -msgid "%B(%A): warning: unresolvable relocation against symbol `%s'" -msgstr "" +#: elfcore.h:251 +msgid "Warning: %B is truncated: expected core file size >= %lu, found: %lu." +msgstr "Cảnh báo : %B bị cắt ngắn: kích cỡ tập tin lõi mong đợi ≥%lu còn tìm %lu." -#: elflink.c:941 +#: elflink.c:1113 msgid "%s: TLS definition in %B section %A mismatches non-TLS definition in %B section %A" -msgstr "" +msgstr "%s: lời định nghĩa TLS trong %B phần %A không tương ứng với lời định nghĩa TLS trong %B phần %A" -#: elflink.c:945 +#: elflink.c:1117 msgid "%s: TLS reference in %B mismatches non-TLS reference in %B" -msgstr "" +msgstr "%s: lời định nghĩa TLS trong %B không tương ứng với lời định nghĩa khác TLS trong %B" -#: elflink.c:949 +#: elflink.c:1121 msgid "%s: TLS definition in %B section %A mismatches non-TLS reference in %B" -msgstr "" +msgstr "%s: lời định nghĩa TLS trong %B phần %A không tương ứng với lời định nghĩa khác TLS trong %B" -#: elflink.c:953 +#: elflink.c:1125 msgid "%s: TLS reference in %B mismatches non-TLS definition in %B section %A" -msgstr "" +msgstr "%s: lời định nghĩa TLS trong %B không tương ứng với lời định nghĩa khác TLS trong %B phần %A" -#: elflink.c:1508 +#: elflink.c:1764 msgid "%B: unexpected redefinition of indirect versioned symbol `%s'" -msgstr "" +msgstr "%B: gặp lời định nghĩa lại bất thường của ký hiệu gián tiếp đặt phiên bản « %s »" -#: elflink.c:1825 -msgid "%B: undefined versioned symbol name %s" -msgstr "" +#: elflink.c:2077 +msgid "%B: version node not found for symbol %s" +msgstr "%B: không tìm thấy nút thông tin phiên bản cho ký hiệu %s" -#: elflink.c:1974 +#: elflink.c:2167 msgid "%B: bad reloc symbol index (0x%lx >= 0x%lx) for offset 0x%lx in section `%A'" -msgstr "" +msgstr "%B: chỉ mục ký hiệu định vị lại sai (0x%lx ≥ 0x%lx) cho khoảng bù 0x%lx trong phần « %A »" + +#: elflink.c:2178 +msgid "%B: non-zero symbol index (0x%lx) for offset 0x%lx in section `%A' when the object file has no symbol table" +msgstr "%B: chỉ mục ký hiệu khác số không (0x%lx) cho hiệu 0x%lx trong phần « %A » mà tập tin đối tượng không có bảng ký hiệu" -#: elflink.c:2164 +#: elflink.c:2375 msgid "%B: relocation size mismatch in %B section %A" -msgstr "" +msgstr "%B: sai khớp kích cỡ định vị lại trong %B phần %A" -#: elflink.c:2454 +#: elflink.c:2678 #, c-format msgid "warning: type and size of dynamic symbol `%s' are not defined" -msgstr "" +msgstr "cảnh báo : chưa xác định kiểu và kích cỡ của ký hiệu động « %s »" -#: elflink.c:2775 -msgid "warning: creating a DT_TEXTREL in a shared object." -msgstr "" +#: elflink.c:3424 +msgid "%P: alternate ELF machine code found (%d) in %B, expecting %d\n" +msgstr "%P: mã máy ELF luân phiên được tìm (%d) trong %B, còn mong đợi %d\n" -#: elflink.c:3702 +#: elflink.c:4032 msgid "%B: %s: invalid version %u (max %d)" -msgstr "" +msgstr "%B: %s: phiên bản không hợp lệ %u (tối đa %d)" -#: elflink.c:3738 +#: elflink.c:4068 msgid "%B: %s: invalid needed version %d" -msgstr "" +msgstr "%B: %s: phiên bản cần thiết mà không hợp lệ %d" -#: elflink.c:3919 +#: elflink.c:4253 +msgid "Warning: alignment %u of common symbol `%s' in %B is greater than the alignment (%u) of its section %A" +msgstr "Cảnh báo : vị trí sắp hàng %u của ký hiệu dùng chung « %s » trong %B là lớn hơn vị trí sắp hàng (%u) của phần %A của nó" + +#: elflink.c:4259 msgid "Warning: alignment %u of symbol `%s' in %B is smaller than %u in %B" -msgstr "" +msgstr "Cảnh báo : vị trí sắp hàng %u của ký hiệu « %s » trong %B là nhỏ hơn %u trong %B" -#: elflink.c:3931 +#: elflink.c:4274 msgid "Warning: size of symbol `%s' changed from %lu in %B to %lu in %B" -msgstr "" +msgstr "Cảnh báo : kích cỡ của ký hiệu « %s » đã thay đổi từ %lu trong %B thành %lu trong %B" -#: elflink.c:4098 +#: elflink.c:4438 #, c-format msgid "%s: invalid DSO for symbol `%s' definition" -msgstr "" +msgstr "%s: DSO không hợp lệ cho lời định nghĩa ký hiệu « %s »" -#: elflink.c:5155 +#: elflink.c:5688 #, c-format msgid "%s: undefined version: %s" -msgstr "" +msgstr "%s: phiên bản chưa được xác định: %s" -#: elflink.c:5221 +#: elflink.c:5756 msgid "%B: .preinit_array section is not allowed in DSO" -msgstr "" +msgstr "%B: không cho phép phần « .preinit_array » trong DSO" + +#: elflink.c:7484 +#, c-format +msgid "undefined %s reference in complex symbol: %s" +msgstr "gặp tham chiếu %s chưa được xác định trong ký hiệu phức tạp %s" + +#: elflink.c:7638 +#, c-format +msgid "unknown operator '%c' in complex symbol" +msgstr "không rõ toán tử « %c » trong ký hiệu phức tạp" + +#: elflink.c:7976 elflink.c:7993 elflink.c:8030 elflink.c:8047 +msgid "%B: Unable to sort relocs - they are in more than one size" +msgstr "%B: Không thể sắp xếp các sự định vị lại: chúng có kích cỡ khác nhau" -#: elflink.c:5961 +#: elflink.c:8007 elflink.c:8061 +msgid "%B: Unable to sort relocs - they are of an unknown size" +msgstr "%B: Không thể sắp xếp các sự định vị lại: chúng có kích cỡ không rõ" + +#: elflink.c:8112 msgid "Not enough memory to sort relocations" -msgstr "" +msgstr "Không đủ bộ nhớ để sắp xếp các sự định vị lại" -#: elflink.c:6352 +#: elflink.c:8304 +msgid "%B: Too many sections: %d (>= %d)" +msgstr "%B: Quá nhiều phần: %d (≥ %d)" + +#: elflink.c:8540 msgid "%B: %s symbol `%s' in %B is referenced by DSO" -msgstr "" +msgstr "%B: %s ký hiệu « %s » trong %B được DSO tham chiếu" -#: elflink.c:6433 +#: elflink.c:8625 msgid "%B: could not find output section %A for input section %A" -msgstr "" +msgstr "%B: không thể tìm thấy phần kết xuất %A cho phần dữ liệu nhập vào %A" -#: elflink.c:6530 +#: elflink.c:8745 msgid "%B: %s symbol `%s' isn't defined" -msgstr "" +msgstr "%B: %s: chưa xác định ký hiệu « %s »" -#: elflink.c:7017 -msgid "`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" -msgstr "" +#: elflink.c:9301 +msgid "error: %B contains a reloc (0x%s) for section %A that references a non-existent global symbol" +msgstr "lỗi: %B chứa một định vị lại (0x%s) cho phần %A mà tham chiếu đến một ký hiệu toàn cục không tồn tại" -#: elflink.c:7551 -msgid "%B: warning: sh_link not set for section `%A'" -msgstr "" +#: elflink.c:9366 +msgid "%X`%s' referenced in section `%A' of %B: defined in discarded section `%A' of %B\n" +msgstr "%X« %s » được tham chiếu trong phần « %A » của %B: được định nghĩa trong phần bị hủy « %A » của %B\n" + +#: elflink.c:9991 +msgid "%A has both ordered [`%A' in %B] and unordered [`%A' in %B] sections" +msgstr "%A có phần cả hai được sắp xếp [« %A » trong %B] và chưa sắp xếp [« %A » trong %B]" -#: elflink.c:7624 +#: elflink.c:9996 #, c-format msgid "%A has both ordered and unordered sections" -msgstr "" +msgstr "%A có phần cả hai được sắp xếp và chưa sắp xếp" -#: elflink.c:8437 elflink.c:8478 +#: elflink.c:10872 elflink.c:10916 msgid "%B: could not find output section %s" -msgstr "" +msgstr "%B: không tìm thấy phần kết xuất %s" -#: elflink.c:8442 +#: elflink.c:10877 #, c-format msgid "warning: %s section has zero size" -msgstr "" +msgstr "cảnh báo : phần %s có kích cỡ số không" -#: elflink.c:9017 +#: elflink.c:10982 +msgid "%P: warning: creating a DT_TEXTREL in a shared object.\n" +msgstr "%P: cảnh báo : đang tạo một DT_TEXTREL trong một đối tượng chia sẻ.\n" + +#: elflink.c:11165 +msgid "%P%X: can not read symbols: %E\n" +msgstr "%P%X: không thể đọc các ký hiệu : %E\n" + +#: elflink.c:11483 +msgid "Removing unused section '%s' in file '%B'" +msgstr "Đang gỡ bỏ phần không dùng « %s » trong tập tin « %B »" + +#: elflink.c:11695 msgid "Warning: gc-sections option ignored" -msgstr "" +msgstr "Cảnh báo : tùy chọn gc-sections bị bỏ qua" -#: elflink.c:9606 -msgid "%B: ignoring duplicate section `%A'\n" -msgstr "" +#: elflink.c:12242 +msgid "%B: ignoring duplicate section `%A'" +msgstr "%B: đang bỏ qua phần trùng « %A »" -#: elflink.c:9613 elflink.c:9620 -msgid "%B: duplicate section `%A' has different size\n" -msgstr "" +#: elflink.c:12249 elflink.c:12256 +msgid "%B: duplicate section `%A' has different size" +msgstr "%B: phần trùng « %A » có kích cỡ khác" -#: elflink.c:9628 elflink.c:9633 -msgid "%B: warning: could not read contents of section `%A'\n" -msgstr "" +#: elflink.c:12264 elflink.c:12269 +msgid "%B: warning: could not read contents of section `%A'" +msgstr "%B: cảnh báo : không thể đọc nội dung của phần « %A »" -#: elflink.c:9637 -msgid "%B: warning: duplicate section `%A' has different contents\n" -msgstr "" +#: elflink.c:12273 +msgid "%B: warning: duplicate section `%A' has different contents" +msgstr "%B: cảnh báo : phần trùng « %A » có nội dung khác" -#: elfxx-mips.c:860 -msgid "static procedure (no name)" -msgstr "" +#: elflink.c:12374 linker.c:3098 +msgid "%F%P: already_linked_table: %E\n" +msgstr "%F%P: already_linked_table: %E\n" -#: elfxx-mips.c:2508 -msgid "not enough GOT space for local GOT entries" -msgstr "" +#: elfxx-mips.c:1222 +msgid "static procedure (no name)" +msgstr "thủ tục tĩnh (không có tên)" -#: elfxx-mips.c:4353 +#: elfxx-mips.c:5588 msgid "%B: %A+0x%lx: jump to stub routine which is not jal" -msgstr "" +msgstr "%B: %A+0x%lx: nhảy tới hàm mẩu mà không phải jal" + +#: elfxx-mips.c:6235 elfxx-mips.c:6458 +msgid "%B: Warning: bad `%s' option size %u smaller than its header" +msgstr "%B: Cảnh báo : kích cỡ tùy chọn « %s » sai: nhỏ hơn phần đầu của nó" -#: elfxx-mips.c:5919 +#: elfxx-mips.c:7205 elfxx-mips.c:7330 +msgid "%B: Warning: cannot determine the target function for stub section `%s'" +msgstr "%B: cảnh báo : không thể quyết định hàm đích cho phần mẩu « %s »" + +#: elfxx-mips.c:7459 msgid "%B: Malformed reloc detected for section %s" -msgstr "" +msgstr "%B: Phát hiện sự định vị lại dạng sai cho phần %s" -#: elfxx-mips.c:5995 +#: elfxx-mips.c:7499 +msgid "%B: GOT reloc at 0x%lx not expected in executables" +msgstr "%B: định vị lại GOT ở 0x%lx không mong đợi trong tập tin có khả năng thực hiện" + +#: elfxx-mips.c:7602 msgid "%B: CALL16 reloc at 0x%lx not against global symbol" -msgstr "" +msgstr "%B: định vị lại CALL16 ở 0x%lx không phải so với ký hiệu toàn cục" -#: elfxx-mips.c:9308 +#: elfxx-mips.c:8280 +#, c-format +msgid "non-dynamic relocations refer to dynamic symbol %s" +msgstr "định vị lại khác động cũng tham chiếu đến ký hiệu động %s" + +#: elfxx-mips.c:8985 +msgid "%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'" +msgstr "%B: Không tìm thấy định vị lại LO16 tương ứng so với « %s » cho %s ở 0x%lx trong phần « %A »" + +#: elfxx-mips.c:9124 +msgid "small-data section exceeds 64KB; lower small-data size limit (see option -G)" +msgstr "Phần small-data (dữ liệu nhỏ) vượt quá 64 KB; hãy giảm giới hạn dữ liệu nhỏ (xem tùy chọn « -G »)" + +#: elfxx-mips.c:11940 #, c-format msgid "%s: illegal section name `%s'" -msgstr "" +msgstr "%s: tên phần cấm « %s »" + +#: elfxx-mips.c:12318 elfxx-mips.c:12344 +msgid "Warning: %B uses -msingle-float, %B uses -mdouble-float" +msgstr "Cảnh báo : %B dùng « -msingle-float », còn %B dùng « -mdouble-float »" + +#: elfxx-mips.c:12330 elfxx-mips.c:12386 +msgid "Warning: %B uses -msingle-float, %B uses -mips32r2 -mfp64" +msgstr "Cảnh báo : %B dùng « -msingle-float », còn %B dùng « -mips32r2 -mfp64 »" -#: elfxx-mips.c:9632 +#: elfxx-mips.c:12356 elfxx-mips.c:12392 +msgid "Warning: %B uses -mdouble-float, %B uses -mips32r2 -mfp64" +msgstr "Cảnh báo : %B dùng « -mdouble-float », còn %B dùng « -mips32r2 -mfp64 »" + +#: elfxx-mips.c:12434 msgid "%B: endianness incompatible with that of the selected emulation" -msgstr "" +msgstr "%B: tình trạng về cuối không tương thích với cái của bản mô phỏng đã chọn" -#: elfxx-mips.c:9644 +#: elfxx-mips.c:12445 msgid "%B: ABI is incompatible with that of the selected emulation" -msgstr "" +msgstr "%B: ABI không tương thích với cái của bản mô phỏng đã chọn" -#: elfxx-mips.c:9716 -msgid "%B: warning: linking PIC files with non-PIC files" -msgstr "" +#: elfxx-mips.c:12526 +msgid "%B: warning: linking abicalls files with non-abicalls files" +msgstr "%B: cảnh báo : đang liên kết tập tin abicalls với tập tin khác abicalls" -#: elfxx-mips.c:9733 +#: elfxx-mips.c:12543 msgid "%B: linking 32-bit code with 64-bit code" -msgstr "" +msgstr "%B: đang liên kết mã 32-bit với mã 64-bit" -#: elfxx-mips.c:9761 +#: elfxx-mips.c:12571 msgid "%B: linking %s module with previous %s modules" -msgstr "" +msgstr "%B: đang liên kết mô-đun %s với các mô-đun %s trước" -#: elfxx-mips.c:9784 +#: elfxx-mips.c:12594 msgid "%B: ABI mismatch: linking %s module with previous %s modules" -msgstr "" +msgstr "%B: sai khớp ABI: đang liên kết mô-đun %s với các mô-đun %s trước" -#: elfxx-mips.c:9849 +#: elfxx-mips.c:12758 #, c-format msgid " [abi=O32]" -msgstr "" +msgstr " [abi=O32]" -#: elfxx-mips.c:9851 +#: elfxx-mips.c:12760 #, c-format msgid " [abi=O64]" -msgstr "" +msgstr " [abi=O64]" -#: elfxx-mips.c:9853 +#: elfxx-mips.c:12762 #, c-format msgid " [abi=EABI32]" -msgstr "" +msgstr " [abi=EABI32]" -#: elfxx-mips.c:9855 +#: elfxx-mips.c:12764 #, c-format msgid " [abi=EABI64]" -msgstr "" +msgstr " [abi=EABI64]" -#: elfxx-mips.c:9857 +#: elfxx-mips.c:12766 #, c-format msgid " [abi unknown]" -msgstr "" +msgstr " [abi không rõ]" -#: elfxx-mips.c:9859 +#: elfxx-mips.c:12768 #, c-format msgid " [abi=N32]" -msgstr "" +msgstr " [abi=N32]" -#: elfxx-mips.c:9861 +#: elfxx-mips.c:12770 #, c-format msgid " [abi=64]" -msgstr "" +msgstr " [abi=64]" -#: elfxx-mips.c:9863 +#: elfxx-mips.c:12772 #, c-format msgid " [no abi set]" -msgstr "" - -#: elfxx-mips.c:9866 -#, c-format -msgid " [mips1]" -msgstr "" - -#: elfxx-mips.c:9868 -#, c-format -msgid " [mips2]" -msgstr "" - -#: elfxx-mips.c:9870 -#, c-format -msgid " [mips3]" -msgstr "" - -#: elfxx-mips.c:9872 -#, c-format -msgid " [mips4]" -msgstr "" - -#: elfxx-mips.c:9874 -#, c-format -msgid " [mips5]" -msgstr "" - -#: elfxx-mips.c:9876 -#, c-format -msgid " [mips32]" -msgstr "" - -#: elfxx-mips.c:9878 -#, c-format -msgid " [mips64]" -msgstr "" - -#: elfxx-mips.c:9880 -#, c-format -msgid " [mips32r2]" -msgstr "" +msgstr " [chưa đặt abi]" -#: elfxx-mips.c:9882 -#, c-format -msgid " [mips64r2]" -msgstr "" - -#: elfxx-mips.c:9884 +#: elfxx-mips.c:12793 #, c-format msgid " [unknown ISA]" -msgstr "" - -#: elfxx-mips.c:9887 -#, c-format -msgid " [mdmx]" -msgstr "" +msgstr " [không rõ ISA]" -#: elfxx-mips.c:9890 +#: elfxx-mips.c:12804 #, c-format -msgid " [mips16]" -msgstr "" +msgid " [not 32bitmode]" +msgstr " [không phải 32bitmode]" -#: elfxx-mips.c:9893 +#: elfxx-sparc.c:440 #, c-format -msgid " [32bitmode]" -msgstr "" +msgid "invalid relocation type %d" +msgstr "kiểu định vị lại không hợp lệ %d" -#: elfxx-mips.c:9895 -#, c-format -msgid " [not 32bitmode]" -msgstr "" - -#: i386linux.c:457 m68klinux.c:461 sparclinux.c:458 +#: i386linux.c:455 m68klinux.c:459 sparclinux.c:453 #, c-format msgid "Output file requires shared library `%s'\n" -msgstr "" +msgstr "Tập tin kết xuất cần thiết thư viện chia sẻ « %s »\n" -#: i386linux.c:465 m68klinux.c:469 sparclinux.c:466 +#: i386linux.c:463 m68klinux.c:467 sparclinux.c:461 #, c-format msgid "Output file requires shared library `%s.so.%s'\n" -msgstr "" +msgstr "Tập tin kết xuất cần thiết thư viện chia sẻ « %s.so.%s »\n" -#: i386linux.c:654 i386linux.c:704 m68klinux.c:661 m68klinux.c:709 -#: sparclinux.c:656 sparclinux.c:706 +#: i386linux.c:652 i386linux.c:702 m68klinux.c:659 m68klinux.c:707 +#: sparclinux.c:651 sparclinux.c:701 #, c-format msgid "Symbol %s not defined for fixups\n" -msgstr "" +msgstr "Ký hiệu %s chưa được xác định để sửa chữa\n" -#: i386linux.c:728 m68klinux.c:733 sparclinux.c:730 +#: i386linux.c:726 m68klinux.c:731 sparclinux.c:725 msgid "Warning: fixup count mismatch\n" -msgstr "" +msgstr "Cảnh báo : sai khớp số đếm sự sửa chữa\n" -#: ieee.c:293 +#: ieee.c:159 #, c-format msgid "%s: string too long (%d chars, max 65535)" -msgstr "" +msgstr "%s: chuỗi quá dài (%d ký tự, tối đa 65535)" -#: ieee.c:428 +#: ieee.c:286 #, c-format msgid "%s: unrecognized symbol `%s' flags 0x%x" -msgstr "" +msgstr "%s: không nhận ra ký hiêu « %s » các cờ 0x%x" -#: ieee.c:938 +#: ieee.c:788 msgid "%B: unimplemented ATI record %u for symbol %u" -msgstr "" +msgstr "%B: mục ghi ATI %u chưa được thực hiện đối với ký hiệu %u" -#: ieee.c:962 +#: ieee.c:812 msgid "%B: unexpected ATN type %d in external part" -msgstr "" +msgstr "%B: gặp kiểu ATN bất thường %d trong phần bên ngoài" -#: ieee.c:984 +#: ieee.c:834 msgid "%B: unexpected type after ATN" -msgstr "" +msgstr "%B: gặp kiểu bất thường đằng sau ATN" -#: ihex.c:264 +#: ihex.c:230 msgid "%B:%d: unexpected character `%s' in Intel Hex file" -msgstr "" +msgstr "%B:%d: gặp ký tự bất thường trong tập tin thập lục Intel" -#: ihex.c:372 +#: ihex.c:337 msgid "%B:%u: bad checksum in Intel Hex file (expected %u, found %u)" -msgstr "" +msgstr "%B:%d: gặp tổng kiểm sai trong tập tin thập lục Intel (đợi %u còn tìm %u)" -#: ihex.c:426 +#: ihex.c:392 msgid "%B:%u: bad extended address record length in Intel Hex file" -msgstr "" +msgstr "%B:%d: gặp chiều dài mục ghi địa chỉ đã mở rộng sai trong tập tin thập lục Intel" -#: ihex.c:443 +#: ihex.c:409 msgid "%B:%u: bad extended start address length in Intel Hex file" -msgstr "" +msgstr "%B:%d: gặp chiều dài địa chỉ đầu đã mở rộng sai trong tập tin thập lục Intel" -#: ihex.c:460 +#: ihex.c:426 msgid "%B:%u: bad extended linear address record length in Intel Hex file" -msgstr "" +msgstr "%B:%d: gặp chiều dài mục ghi địa chỉ tuyến đã mở rộng sai trong tập tin thập lục Intel" -#: ihex.c:477 +#: ihex.c:443 msgid "%B:%u: bad extended linear start address length in Intel Hex file" -msgstr "" +msgstr "%B:%d: gặp chiều dài địa chỉ tuyến đã mở rộng sai trong tập tin thập lục Intel" -#: ihex.c:494 +#: ihex.c:460 msgid "%B:%u: unrecognized ihex type %u in Intel Hex file" -msgstr "" +msgstr "%B:%d: gặp kiểu ihex không được nhận ra %u trong tập tin thập lục Intel" -#: ihex.c:619 +#: ihex.c:579 msgid "%B: internal error in ihex_read_section" -msgstr "" +msgstr "%B: gặp lỗi nội bộ trong ihex_read_section" -#: ihex.c:653 +#: ihex.c:613 msgid "%B: bad section length in ihex_read_section" -msgstr "" +msgstr "%B: gặp chiều dài phần sai trong ihex_read_section" -#: ihex.c:870 +#: ihex.c:825 #, c-format msgid "%s: address 0x%s out of range for Intel Hex file" -msgstr "" +msgstr "%s: địa chỉ 0x%s ở ngoại phạm vi đối với tập tin thập lục Intel" -#: libbfd.c:856 +#: libbfd.c:1008 #, c-format msgid "Deprecated %s called at %s line %d in %s\n" -msgstr "" +msgstr "%s bị phản đối được gọi tại dòng %s %d trong %s\n" -#: libbfd.c:859 +#: libbfd.c:1011 #, c-format msgid "Deprecated %s called\n" -msgstr "" +msgstr "%s bị phản đối được gọi\n" -#: linker.c:1873 +#: linker.c:1874 msgid "%B: indirect symbol `%s' to `%s' is a loop" -msgstr "" +msgstr "%B: ký hiệu gián tiếp « %s » tới « %s » thì tạo một vòng lặp" -#: linker.c:2741 +#: linker.c:2740 #, c-format msgid "Attempt to do relocatable link with %s input and %s output" -msgstr "" +msgstr "Thử làm liên kết có khả năng định vị lại với đầu vào %s và đầu ra %s" -#: linker.c:3038 +#: linker.c:3065 msgid "%B: warning: ignoring duplicate section `%A'\n" -msgstr "" +msgstr "%B: cảnh báo : đang bỏ qua phần trùng « %A »\n" -#: linker.c:3052 +#: linker.c:3079 msgid "%B: warning: duplicate section `%A' has different size\n" -msgstr "" +msgstr "%B: cảnh báo : phần trùng « %A » có kích cỡ khác\n" + +#: mach-o.c:3195 +#, c-format +msgid "Mach-O header:\n" +msgstr "Phần đầu Mach-O :\n" + +#: mach-o.c:3196 +#, c-format +msgid " magic : %08lx\n" +msgstr " ma thuật : %08lx\n" + +#: mach-o.c:3197 +#, c-format +msgid " cputype : %08lx (%s)\n" +msgstr " kiểu CPU : %08lx (%s)\n" + +#: mach-o.c:3199 +#, c-format +msgid " cpusubtype: %08lx\n" +msgstr " kiểu phụ CPU : %08lx\n" + +#: mach-o.c:3200 +#, c-format +msgid " filetype : %08lx (%s)\n" +msgstr " kiểu tập tin : %08lx (%s)\n" + +#: mach-o.c:3203 +#, c-format +msgid " ncmds : %08lx\n" +msgstr " ncmds : %08lx\n" + +#: mach-o.c:3204 +#, c-format +msgid " sizeofcmds: %08lx\n" +msgstr " kích cỡ cmds : %08lx\n" + +#: mach-o.c:3205 +#, c-format +msgid " flags : %08lx (" +msgstr " cờ : %08lx (" + +#: mach-o.c:3207 +#, c-format +msgid ")\n" +msgstr ")\n" + +#: mach-o.c:3208 +#, c-format +msgid " reserved : %08x\n" +msgstr " dành riêng : %08x\n" -#: merge.c:796 +#: mach-o.c:3218 +#, c-format +msgid "Segments and Sections:\n" +msgstr "Đoạn và Phần:\n" + +#: mach-o.c:3219 +#, c-format +msgid " #: Segment name Section name Address\n" +msgstr " #: Tên đoạn Tên phần Địa chỉ\n" + +#: merge.c:829 #, c-format msgid "%s: access beyond end of merged section (%ld)" -msgstr "" +msgstr "%s: truy cập vượt quá kết thúc của phần đã gộp lại (%ld)" #: mmo.c:456 #, c-format msgid "%s: No core to allocate section name %s\n" -msgstr "" +msgstr "%s: Không có lõi nào để cấp phát tên phần %s\n" #: mmo.c:531 #, c-format msgid "%s: No core to allocate a symbol %d bytes long\n" -msgstr "" +msgstr "%s: Không có lõi nào để cấp phát một ký hiệu có chiều dài %d byte\n" #: mmo.c:1187 #, c-format msgid "%s: invalid mmo file: initialization value for $255 is not `Main'\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: giá trị khởi tạo cho $255 không phải là « Main » (chính)\n" #: mmo.c:1332 #, c-format msgid "%s: unsupported wide character sequence 0x%02X 0x%02X after symbol name starting with `%s'\n" -msgstr "" +msgstr "%s: dãy ký tự rộng không được hỗ trợ 0x%02X 0x%02X đằng sau tên ký hiệu bắt đầu với « %s »\n" #: mmo.c:1566 #, c-format msgid "%s: invalid mmo file: unsupported lopcode `%d'\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: mã lop không được hỗ trợ « %d »\n" #: mmo.c:1576 #, c-format msgid "%s: invalid mmo file: expected YZ = 1 got YZ = %d for lop_quote\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: đợi YZ=1, còn nhận YZ=%d đối với lop_quote (trích dẫn)\n" #: mmo.c:1612 #, c-format msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_loc\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: đợi z=1 hoặc z=2, còn nhận z=%d đối với lop_loc (định vị)\n" #: mmo.c:1658 #, c-format msgid "%s: invalid mmo file: expected z = 1 or z = 2, got z = %d for lop_fixo\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: đợi z=1 hoặc z=2, còn nhận z=%d đối với lop_fixo\n" #: mmo.c:1697 #, c-format msgid "%s: invalid mmo file: expected y = 0, got y = %d for lop_fixrx\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: đợi y=0, còn nhận y=%d cho lop_fixrx\n" #: mmo.c:1706 #, c-format msgid "%s: invalid mmo file: expected z = 16 or z = 24, got z = %d for lop_fixrx\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: đợi z=16 hoặc z=24, còn nhận z=%d đối với lop_fixrx\n" #: mmo.c:1729 #, c-format msgid "%s: invalid mmo file: leading byte of operand word must be 0 or 1, got %d for lop_fixrx\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: byte đứng đầu của tên số hạng phải là 0 hoặc 1, còn nhận %d đối với lop_fixrx\n" #: mmo.c:1752 #, c-format msgid "%s: cannot allocate file name for file number %d, %d bytes\n" -msgstr "" +msgstr "%s: không thể cấp phát tên tập tin cho tên số %d, %d byte\n" #: mmo.c:1772 #, c-format msgid "%s: invalid mmo file: file number %d `%s', was already entered as `%s'\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: tập tin số %d « %s » đã được nhập vào dạng « %s »\n" #: mmo.c:1785 #, c-format msgid "%s: invalid mmo file: file name for number %d was not specified before use\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: tên tập tin cho số %d đã không được ghi rõ trước khi dùng\n" -#: mmo.c:1891 +#: mmo.c:1892 #, c-format msgid "%s: invalid mmo file: fields y and z of lop_stab non-zero, y: %d, z: %d\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: hai trường y và z của lop_stab không phải là số không, y: %d, z: %d\n" -#: mmo.c:1927 +#: mmo.c:1928 #, c-format msgid "%s: invalid mmo file: lop_end not last item in file\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: lop_end không phải là mục cuối cùng trong tập tin\n" -#: mmo.c:1940 +#: mmo.c:1941 #, c-format msgid "%s: invalid mmo file: YZ of lop_end (%ld) not equal to the number of tetras to the preceding lop_stab (%ld)\n" -msgstr "" +msgstr "%s: tập tin mmo không hợp lệ: YZ của lop_end (%ld) không phải bằng với số tetra tới lop_stab đi trước (%ld)\n" -#: mmo.c:2647 +#: mmo.c:2651 #, c-format msgid "%s: invalid symbol table: duplicate symbol `%s'\n" -msgstr "" +msgstr "%s: bảng ký hiệu không hợp lệ: ký hiệu trùng « %s »\n" -#: mmo.c:2890 +#: mmo.c:2894 #, c-format msgid "%s: Bad symbol definition: `Main' set to %s rather than the start address %s\n" -msgstr "" +msgstr "%s: Sai xác định ký hiệu : « Main » (chính) được đặt thành %s hơn là địa chỉ đầu %s\n" -#: mmo.c:2982 +#: mmo.c:2986 #, c-format msgid "%s: warning: symbol table too large for mmo, larger than 65535 32-bit words: %d. Only `Main' will be emitted.\n" -msgstr "" +msgstr "%s: cảnh báo : bảng ký hiệu quá lớn cho mmo, lớn hơn 65535 từ 32-bit: %d, nên chỉ phát ra « Main » (chính).\n" -#: mmo.c:3027 +#: mmo.c:3031 #, c-format msgid "%s: internal error, symbol table changed size from %d to %d words\n" -msgstr "" +msgstr "%s: gặp lỗi nội bộ : bảng ký hiệu đã thay đổi kích cỡ từ %d thành %d từ\n" -#: mmo.c:3079 +#: mmo.c:3083 #, c-format msgid "%s: internal error, internal register section %s had contents\n" -msgstr "" +msgstr "%s: gặp lỗi nội bộ : phần thanh ghi nội bộ %s có nội dung\n" -#: mmo.c:3130 +#: mmo.c:3134 #, c-format msgid "%s: no initialized registers; section length 0\n" -msgstr "" +msgstr "%s: không có thanh ghi đã khởi tạo, chiều dài phần 0\n" -#: mmo.c:3136 +#: mmo.c:3140 #, c-format msgid "%s: too many initialized registers; section length %ld\n" -msgstr "" +msgstr "%s: quá nhiều thanh ghi đã khởi tạo ; chiều dài phần %ld\n" -#: mmo.c:3141 +#: mmo.c:3145 #, c-format msgid "%s: invalid start address for initialized registers of length %ld: 0x%lx%08lx\n" -msgstr "" +msgstr "%s: địa chỉ đầu không hợp lệ cho các thanh ghi đã khởi tạo có chiều dài %ld: 0x%lx% 08lx\n" -#: oasys.c:1033 +#: oasys.c:881 #, c-format msgid "%s: can not represent section `%s' in oasys" -msgstr "" +msgstr "%s: không thể đại diện phần « %s » theo oasys" -#: osf-core.c:137 +#: osf-core.c:139 #, c-format msgid "Unhandled OSF/1 core file section type %d\n" +msgstr "Kiểu phần tập tin lõi OSF/1 không được quản lý %d\n" + +#: pe-mips.c:613 +msgid "%B: `ld -r' not supported with PE MIPS objects\n" +msgstr "%B: « ld -r » không được hỗ trợ với đối tượng MIPS PE\n" + +#. OK, at this point the following variables are set up: +#. 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:729 +msgid "%B: unimplemented %s\n" +msgstr "%B: %s chưa được thực hiện\n" + +#: pe-mips.c:755 +msgid "%B: jump too far away\n" +msgstr "%B: bước nhảy quá xa\n" + +#: pe-mips.c:781 +msgid "%B: bad pair/reflo after refhi\n" +msgstr "%B: pair/reflo sai đằng sau refhi\n" + +#: pei-x86_64.c:465 +#, c-format +msgid "warning: .pdata section size (%ld) is not a multiple of %d\n" +msgstr "cảnh báo : kích cỡ phần .pdata (%ld) không phải là bội số cho %d\n" + +#: pei-x86_64.c:469 peigen.c:1620 peigen.c:1799 pepigen.c:1620 pepigen.c:1799 +#: pex64igen.c:1620 pex64igen.c:1799 +#, c-format +msgid "" +"\n" +"The Function Table (interpreted .pdata section contents)\n" msgstr "" +"\n" +"Bảng Hàm (phiên dịch nội dung phần .pdata)\n" + +#: pei-x86_64.c:471 +#, c-format +msgid "vma:\t\t\tBeginAddress\t EndAddress\t UnwindData\n" +msgstr "vma:\t\t\tĐịa chi đầu Địa chỉ cuối Thông tin tháo ra\n" #. XXX code yet to be written. -#: peicode.h:760 +#: peicode.h:752 msgid "%B: Unhandled import type; %x" -msgstr "" +msgstr "%B: Kiểu nhập không được quản lý; %x" -#: peicode.h:765 +#: peicode.h:757 msgid "%B: Unrecognised import type; %x" -msgstr "" +msgstr "%B: Kiểu nhập không được nhận ra; %x" -#: peicode.h:779 +#: peicode.h:771 msgid "%B: Unrecognised import name type; %x" -msgstr "" +msgstr "%B: Kiểu tên nhập không được nhận ra; %x" -#: peicode.h:1169 +#: peicode.h:1154 msgid "%B: Unrecognised machine type (0x%x) in Import Library Format archive" -msgstr "" +msgstr "%B: Kiểu máy không được nhận ra (0x%x) trong kho lưu Định dạng Thư viện Nhập" -#: peicode.h:1181 +#: peicode.h:1166 msgid "%B: Recognised but unhandled machine type (0x%x) in Import Library Format archive" -msgstr "" +msgstr "%B: Kiểu máy được nhận ra còn không được quản lý (0x%x) trong kho lưu Định dạng Thư viện Nhập" -#: peicode.h:1199 +#: peicode.h:1184 msgid "%B: size field is zero in Import Library Format header" -msgstr "" +msgstr "%B: trường kích cỡ là số không trong phần đầu Định dạng Thư viện Nhập" -#: peicode.h:1230 +#: peicode.h:1215 msgid "%B: string not null terminated in ILF object file." -msgstr "" - -#: pe-mips.c:627 -msgid "%B: `ld -r' not supported with PE MIPS objects\n" -msgstr "" - -#. OK, at this point the following variables are set up: -#. 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:749 -msgid "%B: unimplemented %s\n" -msgstr "" - -#: pe-mips.c:775 -msgid "%B: jump too far away\n" -msgstr "" - -#: pe-mips.c:801 -msgid "%B: bad pair/reflo after refhi\n" -msgstr "" +msgstr "%B: chuỗi không phải kết thúc vô hiệu lực trong tập tin đối tượng ILF. " -#: ppcboot.c:418 +#: ppcboot.c:414 #, c-format msgid "" "\n" "ppcboot header:\n" msgstr "" +"\n" +"Phần đầu ppcboot:\n" -#: ppcboot.c:419 +#: ppcboot.c:415 #, c-format msgid "Entry offset = 0x%.8lx (%ld)\n" -msgstr "" +msgstr "Khoảng bù vào = 0x%.8lx (%ld)\n" -#: ppcboot.c:420 +#: ppcboot.c:417 #, c-format msgid "Length = 0x%.8lx (%ld)\n" -msgstr "" +msgstr "Dài = 0x%.8lx (%ld)\n" -#: ppcboot.c:423 +#: ppcboot.c:421 #, c-format msgid "Flag field = 0x%.2x\n" -msgstr "" +msgstr "Trường cờ = 0x%.2x\n" -#: ppcboot.c:429 +#: ppcboot.c:427 #, c-format msgid "Partition name = \"%s\"\n" -msgstr "" +msgstr "Tên phân vùng = \"%s\"\n" -#: ppcboot.c:448 +#: ppcboot.c:446 #, c-format msgid "" "\n" "Partition[%d] start = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" msgstr "" +"\n" +"Phân vùng[%d] đầu = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -#: ppcboot.c:454 +#: ppcboot.c:452 #, c-format msgid "Partition[%d] end = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -msgstr "" +msgstr "Phân vùng[%d] cuối = { 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x }\n" -#: ppcboot.c:460 +#: ppcboot.c:458 #, c-format msgid "Partition[%d] sector = 0x%.8lx (%ld)\n" -msgstr "" +msgstr "Phân vùng[%d] rãnh ghi = 0x%.8lx (%ld)\n" -#: ppcboot.c:461 +#: ppcboot.c:460 #, c-format msgid "Partition[%d] length = 0x%.8lx (%ld)\n" -msgstr "" +msgstr "Phân vùng[%d] dài = 0x%.8lx (%ld)\n" -#: som.c:5269 +#: som.c:5114 #, c-format msgid "" "\n" "Exec Auxiliary Header\n" msgstr "" +"\n" +"Phần đầu phụ thực hiện\n" -#: som.c:5543 +#: som.c:5417 msgid "som_sizeof_headers unimplemented" -msgstr "" +msgstr "som_sizeof_headers chưa được thực hiện" -#: srec.c:302 +#: srec.c:261 msgid "%B:%d: Unexpected character `%s' in S-record file\n" -msgstr "" +msgstr "%B:%d Gặp ký tự bất thường « %s » trong tập tin S-record\n" + +#: srec.c:567 srec.c:600 +msgid "%B:%d: Bad checksum in S-record file\n" +msgstr "%B:%d: sai tổng kiểm trong tập tin S-record\n" -#: stabs.c:296 +#: stabs.c:279 msgid "%B(%A+0x%lx): Stabs entry has invalid string index." -msgstr "" +msgstr "%B(%A+0x%lx): Mục nhập Stabs có chỉ mục chuỗi không hợp lệ." -#: syms.c:1048 +#: syms.c:1079 msgid "Unsupported .stab relocation" -msgstr "" +msgstr "Định vị lại .stab không được hỗ trợ" -#: vms-gsd.c:356 +#: vms-gsd.c:350 #, c-format msgid "bfd_make_section (%s) failed" -msgstr "" +msgstr "bfd_make_section (%s) bị lỗi" -#: vms-gsd.c:371 +#: vms-gsd.c:365 #, c-format msgid "bfd_set_section_flags (%s, %x) failed" -msgstr "" +msgstr "bfd_set_section_flags (%s, %x) bị lỗi" -#: vms-gsd.c:407 +#: vms-gsd.c:399 #, c-format msgid "Size mismatch section %s=%lx, %s=%lx" -msgstr "" +msgstr "Sai khớp phần %s=%lx, %s=%lx" -#: vms-gsd.c:702 +#: vms-gsd.c:754 #, c-format -msgid "unknown gsd/egsd subtype %d" -msgstr "" +msgid "Unknown GSD/EGSD subtype %d" +msgstr "Không rõ kiểu phụ GSD/EGSD %d" -#: vms-hdr.c:409 +#: vms-hdr.c:364 msgid "Object module NOT error-free !\n" -msgstr "" +msgstr "Mô-đun đối tượng KHÔNG phải miễn lỗi !\n" + +#: vms-hdr.c:878 +#, c-format +msgid "unknown source command %d" +msgstr "không rõ câu lệnh nguồn %d" + +#: vms-hdr.c:951 +msgid "DST_S_C_SET_LINUM_INCR not implemented" +msgstr "DST_S_C_SET_LINUM_INCR chưa được thực hiện" + +#: vms-hdr.c:957 +msgid "DST_S_C_SET_LINUM_INCR_W not implemented" +msgstr "DST_S_C_SET_LINUM_INCR_W chưa được thực hiện" + +#: vms-hdr.c:963 +msgid "DST_S_C_RESET_LINUM_INCR not implemented" +msgstr "DST_S_C_RESET_LINUM_INCR chưa được thực hiện" + +#: vms-hdr.c:969 +msgid "DST_S_C_BEG_STMT_MODE not implemented" +msgstr "DST_S_C_BEG_STMT_MODE chưa được thực hiện" + +#: vms-hdr.c:975 +msgid "DST_S_C_END_STMT_MODE not implemented" +msgstr "DST_S_C_END_STMT_MODE chưa được thực hiện" + +#: vms-hdr.c:1008 +msgid "DST_S_C_SET_PC not implemented" +msgstr "DST_S_C_SET_PC chưa được thực hiện" + +#: vms-hdr.c:1014 +msgid "DST_S_C_SET_PC_W not implemented" +msgstr "DST_S_C_SET_PC_W chưa được thực hiện" -#: vms-misc.c:541 +#: vms-hdr.c:1020 +msgid "DST_S_C_SET_PC_L not implemented" +msgstr "DST_S_C_SET_PC_L chưa được thực hiện" + +#: vms-hdr.c:1026 +msgid "DST_S_C_SET_STMTNUM not implemented" +msgstr "DST_S_C_SET_STMTNUM chưa được thực hiện" + +#: vms-hdr.c:1079 +#, c-format +msgid "unknown line command %d" +msgstr "không rõ câu lệnh dòng %d" + +#: vms-misc.c:588 #, c-format msgid "Stack overflow (%d) in _bfd_vms_push" -msgstr "" +msgstr "Tràn đống (%d) trong _bfd_vms_push" -#: vms-misc.c:559 +#: vms-misc.c:603 msgid "Stack underflow in _bfd_vms_pop" -msgstr "" +msgstr "Trán ngược đống trong _bfd_vms_pop" -#: vms-misc.c:912 +#: vms-misc.c:844 msgid "_bfd_vms_output_counted called with zero bytes" -msgstr "" +msgstr "_bfd_vms_output_counted được gọi với số không byte" -#: vms-misc.c:917 +#: vms-misc.c:849 msgid "_bfd_vms_output_counted called with too many bytes" -msgstr "" +msgstr "_bfd_vms_output_counted được gọi với quá nhiều byte" -#: vms-misc.c:1048 +#: vms-misc.c:967 #, c-format msgid "Symbol %s replaced by %s\n" -msgstr "" +msgstr "Ký hiệu %s đã bị thay thế bằng %s\n" -#: vms-misc.c:1111 +#: vms-misc.c:1026 #, c-format msgid "failed to enter %s" -msgstr "" +msgstr "lỗi vào %s" -#: vms-tir.c:102 +#: vms-tir.c:83 msgid "No Mem !" -msgstr "" +msgstr "Không có Mem !" + +#. These names have not yet been added to this switch statement. +#: vms-tir.c:346 +#, c-format +msgid "unknown ETIR command %d" +msgstr "không rõ câu lệnh ETIR %d" -#: vms-tir.c:383 +#: vms-tir.c:440 #, c-format msgid "bad section index in %s" -msgstr "" +msgstr "chỉ mục phần sai trong %s" -#: vms-tir.c:396 +#: vms-tir.c:459 #, c-format msgid "unsupported STA cmd %s" -msgstr "" +msgstr "câu lệnh STA không được hỗ trợ %s" -#: vms-tir.c:401 vms-tir.c:1247 +#: vms-tir.c:464 vms-tir.c:1304 #, c-format msgid "reserved STA cmd %d" -msgstr "" +msgstr "câu lệnh STA dành riêng %d" -#: vms-tir.c:502 vms-tir.c:525 -#, c-format -msgid "%s: no symbol \"%s\"" -msgstr "" - -#. unsigned shift -#. rotate +#. Unsigned shift. +#. Rotate. #. Redefine symbol to current location. #. Define a literal. -#: vms-tir.c:592 vms-tir.c:704 vms-tir.c:814 vms-tir.c:832 vms-tir.c:840 -#: vms-tir.c:849 vms-tir.c:1570 +#: vms-tir.c:655 vms-tir.c:774 vms-tir.c:894 vms-tir.c:1624 #, c-format msgid "%s: not supported" -msgstr "" +msgstr "%s: không được hỗ trợ" -#: vms-tir.c:597 vms-tir.c:1425 +#: vms-tir.c:661 vms-tir.c:1481 #, c-format msgid "%s: not implemented" -msgstr "" +msgstr "%s: chưa được thực hiện" -#: vms-tir.c:601 vms-tir.c:1429 +#: vms-tir.c:666 vms-tir.c:1485 #, c-format msgid "reserved STO cmd %d" -msgstr "" +msgstr "câu lệnh STO dành riêng %d" -#: vms-tir.c:719 vms-tir.c:1575 +#: vms-tir.c:789 vms-tir.c:1629 #, c-format msgid "reserved OPR cmd %d" -msgstr "" +msgstr "câu lệnh OPR dành riêng %d" -#: vms-tir.c:787 vms-tir.c:1639 +#: vms-tir.c:852 vms-tir.c:1693 #, c-format msgid "reserved CTL cmd %d" -msgstr "" +msgstr "câu lệnh CTL dành riêng %d" + +#: vms-tir.c:966 +#, c-format +msgid "reserved STC cmd %d" +msgstr "câu lệnh STC dành riêng %d" #. stack byte from image #. arg: none. -#: vms-tir.c:1155 +#: vms-tir.c:1212 msgid "stack-from-image not implemented" -msgstr "" +msgstr "stack-from-image chưa được thực hiện" -#: vms-tir.c:1173 +#: vms-tir.c:1230 msgid "stack-entry-mask not fully implemented" -msgstr "" +msgstr "stack-entry-mask chưa được thực hiện hoàn toàn" #. compare procedure argument #. arg: cs symbol name @@ -2777,496 +3561,586 @@ msgstr "" #. #. compare argument descriptor with symbol argument (ARG$V_PASSMECH) #. and stack TRUE (args match) or FALSE (args dont match) value. -#: vms-tir.c:1187 +#: vms-tir.c:1244 msgid "PASSMECH not fully implemented" -msgstr "" +msgstr "PASSMECH chưa được thực hiện hoàn toàn" -#: vms-tir.c:1206 +#: vms-tir.c:1263 msgid "stack-local-symbol not fully implemented" -msgstr "" +msgstr "stack-local-symbol chưa được thực hiện hoàn toàn" -#: vms-tir.c:1219 +#: vms-tir.c:1276 msgid "stack-literal not fully implemented" -msgstr "" +msgstr "stack-literal chưa được thực hiện hoàn toàn" -#: vms-tir.c:1240 +#: vms-tir.c:1297 msgid "stack-local-symbol-entry-point-mask not fully implemented" -msgstr "" +msgstr "stack-local-symbol-entry-point-mask chưa được thực hiện hoàn toàn" -#: vms-tir.c:1517 vms-tir.c:1529 vms-tir.c:1541 vms-tir.c:1553 vms-tir.c:1618 -#: vms-tir.c:1626 vms-tir.c:1634 +#: vms-tir.c:1571 vms-tir.c:1583 vms-tir.c:1595 vms-tir.c:1607 vms-tir.c:1672 +#: vms-tir.c:1680 vms-tir.c:1688 #, c-format msgid "%s: not fully implemented" -msgstr "" +msgstr "%s: chưa được thực hiện hoàn toàn" -#: vms-tir.c:1691 +#: vms-tir.c:1746 #, c-format msgid "obj code %d not found" -msgstr "" +msgstr "Không tìm thấy mã đối tượng %d" + +#: vms-tir.c:2019 +#, c-format +msgid "Reloc size error in section %s" +msgstr "Gặp lỗi kích cỡ sự định vị lại trong phần %s" + +#: vms-tir.c:2112 vms-tir.c:2129 vms-tir.c:2147 vms-tir.c:2159 vms-tir.c:2170 +#: vms-tir.c:2182 +#, c-format +msgid "Unknown reloc %s + %s" +msgstr "Không rõ sự định vị lại %s + %s" + +#: vms-tir.c:2249 +#, c-format +msgid "Unknown symbol %s in command %s" +msgstr "Gặp ký hiệu lạ %s trong câu lệnh %s" -#: vms-tir.c:2029 +#: vms-tir.c:2504 #, c-format msgid "SEC_RELOC with no relocs in section %s" -msgstr "" +msgstr "SEC_RELOC không có định vị lại trong phần %s" + +#: vms-tir.c:2556 vms-tir.c:2783 +#, c-format +msgid "Size error in section %s" +msgstr "Gặp lỗi kích cỡ trong phần %s" + +#: vms-tir.c:2725 +msgid "Spurious ALPHA_R_BSR reloc" +msgstr "Gặp sự định vị lại ALPHA_R_BSR giả" -#: vms-tir.c:2304 +#: vms-tir.c:2770 #, c-format msgid "Unhandled relocation %s" -msgstr "" +msgstr "Định vị lại không được quản lý %s" + +#: xcofflink.c:836 +#, c-format +msgid "%s: XCOFF shared object when not producing XCOFF output" +msgstr "%s: có đối tượng dùng chung XCOFF khi không xuất dữ liệu XCOFF" -#: xcofflink.c:1243 +#: xcofflink.c:857 +#, c-format +msgid "%s: dynamic object with no .loader section" +msgstr "%s đối tượng động không có phần .loader" + +#: xcofflink.c:1415 msgid "%B: `%s' has line numbers but no enclosing section" -msgstr "" +msgstr "%B: « %s » có số thứ tự dòng mà không có phần bao bọc" -#: xcofflink.c:1296 +#: xcofflink.c:1467 msgid "%B: class %d symbol `%s' has no aux entries" -msgstr "" +msgstr "%B: hạng %d ký hiệu « %s » không có mục nhập phụ" -#: xcofflink.c:1319 +#: xcofflink.c:1489 msgid "%B: symbol `%s' has unrecognized csect type %d" -msgstr "" +msgstr "%B: ký hiệu « %s » có kiểu csect không được nhận ra %d" -#: xcofflink.c:1331 +#: xcofflink.c:1501 msgid "%B: bad XTY_ER symbol `%s': class %d scnum %d scnlen %d" -msgstr "" +msgstr "%B: ký hiệu XTY_ER sai « %s » hạng %d scnum %d scnlen %d" -#: xcofflink.c:1367 +#: xcofflink.c:1530 msgid "%B: XMC_TC0 symbol `%s' is class %d scnlen %d" -msgstr "" +msgstr "%B: ký hiệu XMC_TC0 « %s » là hạng %d scnlen %d" -#: xcofflink.c:1518 +#: xcofflink.c:1676 msgid "%B: csect `%s' not in enclosing section" -msgstr "" +msgstr "%B: csect « %s » không phải trong phần bao bọc" -#: xcofflink.c:1625 +#: xcofflink.c:1783 msgid "%B: misplaced XTY_LD `%s'" -msgstr "" +msgstr "%B: không đúng chỗ XTY_LD « %s »" -#: xcofflink.c:1956 +#: xcofflink.c:2102 msgid "%B: reloc %s:%d not in csect" -msgstr "" - -#: xcofflink.c:2093 -#, c-format -msgid "%s: XCOFF shared object when not producing XCOFF output" -msgstr "" - -#: xcofflink.c:2114 -#, c-format -msgid "%s: dynamic object with no .loader section" -msgstr "" +msgstr "%B: định vị lại %s:%d không phải trong csect" -#: xcofflink.c:2759 +#: xcofflink.c:3177 #, c-format msgid "%s: no such symbol" -msgstr "" +msgstr "%s: không có ký hiệu như vậy" -#: xcofflink.c:2892 -msgid "error: undefined symbol __rtinit" -msgstr "" - -#: xcofflink.c:3449 +#: xcofflink.c:3282 #, c-format msgid "warning: attempt to export undefined symbol `%s'" -msgstr "" +msgstr "cảnh báo : thử xuất ký hiệu chưa được xác định « %s »" -#: xcofflink.c:4444 -#, c-format -msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" -msgstr "" +#: xcofflink.c:3664 +msgid "error: undefined symbol __rtinit" +msgstr "lỗi: chưa xác định ký hiệu __rtinit" -#: xcofflink.c:5285 -msgid "%B: loader reloc in unrecognized section `%A'" -msgstr "" +#: xcofflink.c:4041 +msgid "%B: loader reloc in unrecognized section `%s'" +msgstr "%B: gặp sự định vị lại bộ nạp trong phần không được nhận ra « %s »" -#: xcofflink.c:5306 +#: xcofflink.c:4052 msgid "%B: `%s' in loader reloc but not loader sym" -msgstr "" +msgstr "%B: « %s » trong định vị lại bộ nạp nhưng không phải liên kết mềm đến bộ nạp" -#: xcofflink.c:5321 +#: xcofflink.c:4068 msgid "%B: loader reloc in read-only section %A" -msgstr "" - -#: xcofflink.c:5747 xcofflink.c:5809 xcofflink.c:6111 -#, c-format -msgid "%s: loader reloc in unrecognized section `%s'" -msgstr "" +msgstr "%B: định vị lại bộ nạp trong phần chỉ đọc %A" -#: xcofflink.c:6122 +#: xcofflink.c:5086 #, c-format -msgid "%s: `%s' in loader reloc but not loader sym" -msgstr "" +msgid "TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling" +msgstr "Tràn TOC: 0x%lx > 0x10000; hãy thử « -mminimal-toc » khi biên dịch" -#: elf32-ia64.c:987 elf64-ia64.c:987 +#: elf32-ia64.c:1050 elf64-ia64.c:1050 msgid "%B: Can't relax br at 0x%lx in section `%A'. Please use brl or indirect branch." -msgstr "" +msgstr "%B: Không thể giảm nhẹ br ở 0x%lx trong phần « %A ». Hãy dùng brl hoặc nhánh gián tiếp." -#: elf32-ia64.c:2339 elf64-ia64.c:2339 +#: elf32-ia64.c:2739 elf64-ia64.c:2739 msgid "@pltoff reloc against local symbol" -msgstr "" +msgstr "định vị lại @pltoff so với ký hiệu cục bộ" -#: elf32-ia64.c:3757 elf64-ia64.c:3757 +#: elf32-ia64.c:4314 elf64-ia64.c:4314 #, c-format msgid "%s: short data segment overflowed (0x%lx >= 0x400000)" -msgstr "" +msgstr "%s: tràn đoạn dữ liệu ngắn (0x%lx ≥ 0x400000)" -#: elf32-ia64.c:3768 elf64-ia64.c:3768 +#: elf32-ia64.c:4325 elf64-ia64.c:4325 #, c-format msgid "%s: __gp does not cover short data segment" -msgstr "" +msgstr "%s: __gp không trải ra đoạn dữ liệu ngắn" -#: elf32-ia64.c:4015 elf64-ia64.c:4015 +#: elf32-ia64.c:4595 elf64-ia64.c:4595 msgid "%B: non-pic code with imm relocation against dynamic symbol `%s'" -msgstr "" +msgstr "%B: mã khác pic với định vị lại imm so với ký hiệu động « %s »" -#: elf32-ia64.c:4080 elf64-ia64.c:4080 +#: elf32-ia64.c:4662 elf64-ia64.c:4662 msgid "%B: @gprel relocation against dynamic symbol %s" -msgstr "" +msgstr "%B: định vị lại @gprel so với ký hiệu động « %s »" -#: elf32-ia64.c:4140 elf64-ia64.c:4140 +#: elf32-ia64.c:4725 elf64-ia64.c:4725 msgid "%B: linking non-pic code in a position independent executable" -msgstr "" +msgstr "%B: đang liên kết mã khác pin trong một tập tin có khả năng thực hiện mà không phụ thuộc vào vị trí" -#: elf32-ia64.c:4277 elf64-ia64.c:4277 +#: elf32-ia64.c:4862 elf64-ia64.c:4862 msgid "%B: @internal branch to dynamic symbol %s" -msgstr "" +msgstr "%B: nhánh @internal (nội bộ) tới ký hiệu động %s" -#: elf32-ia64.c:4279 elf64-ia64.c:4279 +#: elf32-ia64.c:4864 elf64-ia64.c:4864 msgid "%B: speculation fixup to dynamic symbol %s" -msgstr "" +msgstr "%B: sự sửa chữa suy đoán so với ký hiệu động %s" -#: elf32-ia64.c:4281 elf64-ia64.c:4281 +#: elf32-ia64.c:4866 elf64-ia64.c:4866 msgid "%B: @pcrel relocation against dynamic symbol %s" -msgstr "" +msgstr "%B: định vị lại @pcrel so với ký hiệu động %s" -#: elf32-ia64.c:4488 elf64-ia64.c:4488 +#: elf32-ia64.c:5063 elf64-ia64.c:5063 msgid "unsupported reloc" -msgstr "" +msgstr "định vị lại không được hỗ trợ" + +#: elf32-ia64.c:5101 elf64-ia64.c:5101 +msgid "%B: missing TLS section for relocation %s against `%s' at 0x%lx in section `%A'." +msgstr "%B: thiếu phần TLS để định vị lại %s đối với « %s » ở 0x%lx trong phần « %A »." -#: elf32-ia64.c:4528 elf64-ia64.c:4528 +#: elf32-ia64.c:5116 elf64-ia64.c:5116 msgid "%B: Can't relax br (%s) to `%s' at 0x%lx in section `%A' with size 0x%lx (> 0x1000000)." -msgstr "" +msgstr "%B: Không thể giảm nhẹ br (%s) tới « %s » tại 0x%lx trong phần « %A » với kích cỡ 0x%lx (> 0x1000000)." -#: elf32-ia64.c:4789 elf64-ia64.c:4789 +#: elf32-ia64.c:5372 elf64-ia64.c:5372 msgid "%B: linking trap-on-NULL-dereference with non-trapping files" -msgstr "" +msgstr "%B: đang liên kết trap-on-NULL-dereference với tập tin không đặt bẫy" -#: elf32-ia64.c:4798 elf64-ia64.c:4798 +#: elf32-ia64.c:5381 elf64-ia64.c:5381 msgid "%B: linking big-endian files with little-endian files" -msgstr "" +msgstr "%B: đang liên kết tập tin về cuối lớn với tập tin về cuối nhỏ" -#: elf32-ia64.c:4807 elf64-ia64.c:4807 +#: elf32-ia64.c:5390 elf64-ia64.c:5390 msgid "%B: linking 64-bit files with 32-bit files" -msgstr "" +msgstr "%B: đang liên kết tập tin 64-bit với tập tin 32-bit" -#: elf32-ia64.c:4816 elf64-ia64.c:4816 +#: elf32-ia64.c:5399 elf64-ia64.c:5399 msgid "%B: linking constant-gp files with non-constant-gp files" -msgstr "" +msgstr "%B: đang liên kết tập tin constant-gp với tập tin non-constant-gp" -#: elf32-ia64.c:4826 elf64-ia64.c:4826 +#: elf32-ia64.c:5409 elf64-ia64.c:5409 msgid "%B: linking auto-pic files with non-auto-pic files" -msgstr "" +msgstr "%B: đang liên kết tập tin auto-pic với tập tin non-auto-pic" -#: peigen.c:1014 pepigen.c:1014 +#: peigen.c:999 pepigen.c:999 pex64igen.c:999 #, c-format msgid "%s: line number overflow: 0x%lx > 0xffff" -msgstr "" +msgstr "%s: tràn số thứ tự dòng: 0x%lx > 0xffff" -#: peigen.c:1041 pepigen.c:1041 +#: peigen.c:1026 pepigen.c:1026 pex64igen.c:1026 msgid "Export Directory [.edata (or where ever we found it)]" -msgstr "" +msgstr "Thư mục Xuất [.edata (hoặc ở nơi nào chúng ta đã tìm nó)]" -#: peigen.c:1042 pepigen.c:1042 +#: peigen.c:1027 pepigen.c:1027 pex64igen.c:1027 msgid "Import Directory [parts of .idata]" -msgstr "" +msgstr "Thư mục Nhập [các phần của .idata]" -#: peigen.c:1043 pepigen.c:1043 +#: peigen.c:1028 pepigen.c:1028 pex64igen.c:1028 msgid "Resource Directory [.rsrc]" -msgstr "" +msgstr "Thư mục Tài nguyên [.rsrc]" -#: peigen.c:1044 pepigen.c:1044 +#: peigen.c:1029 pepigen.c:1029 pex64igen.c:1029 msgid "Exception Directory [.pdata]" -msgstr "" +msgstr "Thư mục Ngoại lệ [.pdata]" -#: peigen.c:1045 pepigen.c:1045 +#: peigen.c:1030 pepigen.c:1030 pex64igen.c:1030 msgid "Security Directory" -msgstr "" +msgstr "Thư mục Bảo mật" -#: peigen.c:1046 pepigen.c:1046 +#: peigen.c:1031 pepigen.c:1031 pex64igen.c:1031 msgid "Base Relocation Directory [.reloc]" -msgstr "" +msgstr "Thư mục Định vị lại Cơ bản [.reloc]" -#: peigen.c:1047 pepigen.c:1047 +#: peigen.c:1032 pepigen.c:1032 pex64igen.c:1032 msgid "Debug Directory" -msgstr "" +msgstr "Thư mục Gỡ lỗi" -#: peigen.c:1048 pepigen.c:1048 +#: peigen.c:1033 pepigen.c:1033 pex64igen.c:1033 msgid "Description Directory" -msgstr "" +msgstr "Thư mục Mô tả" -#: peigen.c:1049 pepigen.c:1049 +#: peigen.c:1034 pepigen.c:1034 pex64igen.c:1034 msgid "Special Directory" -msgstr "" +msgstr "Thư mục Đặc biệt" -#: peigen.c:1050 pepigen.c:1050 +#: peigen.c:1035 pepigen.c:1035 pex64igen.c:1035 msgid "Thread Storage Directory [.tls]" -msgstr "" +msgstr "Thư mục Lưu trữ Mạch [.tls]" -#: peigen.c:1051 pepigen.c:1051 +#: peigen.c:1036 pepigen.c:1036 pex64igen.c:1036 msgid "Load Configuration Directory" -msgstr "" +msgstr "Thư mục Cấu hình Nạp" -#: peigen.c:1052 pepigen.c:1052 +#: peigen.c:1037 pepigen.c:1037 pex64igen.c:1037 msgid "Bound Import Directory" -msgstr "" +msgstr "Thư mục Nhập đã Đóng kết" -#: peigen.c:1053 pepigen.c:1053 +#: peigen.c:1038 pepigen.c:1038 pex64igen.c:1038 msgid "Import Address Table Directory" -msgstr "" +msgstr "Thư mục Bảng Địa chỉ Nhập" -#: peigen.c:1054 pepigen.c:1054 +#: peigen.c:1039 pepigen.c:1039 pex64igen.c:1039 msgid "Delay Import Directory" -msgstr "" +msgstr "Thư mục Nhập Hoãn" + +#: peigen.c:1040 pepigen.c:1040 pex64igen.c:1040 +msgid "CLR Runtime Header" +msgstr "Phần đầu Lúc chạy CLR" -#: peigen.c:1055 peigen.c:1056 pepigen.c:1055 pepigen.c:1056 +#: peigen.c:1041 pepigen.c:1041 pex64igen.c:1041 msgid "Reserved" -msgstr "" +msgstr "Dành riêng" -#: peigen.c:1118 pepigen.c:1118 +#: peigen.c:1101 pepigen.c:1101 pex64igen.c:1101 #, c-format msgid "" "\n" "There is an import table, but the section containing it could not be found\n" msgstr "" +"\n" +"Có một bảng nhập, nhưng không tìm thấy phần chứa nó\n" -#: peigen.c:1123 pepigen.c:1123 +#: peigen.c:1106 pepigen.c:1106 pex64igen.c:1106 #, c-format msgid "" "\n" "There is an import table in %s at 0x%lx\n" msgstr "" +"\n" +"Có một bảng nhập trong %s tại 0x%lx\n" -#: peigen.c:1159 pepigen.c:1159 +#: peigen.c:1149 pepigen.c:1149 pex64igen.c:1149 #, c-format msgid "" "\n" "Function descriptor located at the start address: %04lx\n" msgstr "" +"\n" +"Bộ mô tả hàm được tìm tại địa chỉ đầu : %04lx\n" -#: peigen.c:1162 pepigen.c:1162 +#: peigen.c:1152 pepigen.c:1152 pex64igen.c:1152 #, c-format msgid "\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n" -msgstr "" +msgstr "\tcơ bản mã %08lx toc (nạp được/thật) %08lx/%08lx\n" -#: peigen.c:1170 pepigen.c:1170 +#: peigen.c:1160 pepigen.c:1160 pex64igen.c:1160 #, c-format msgid "" "\n" "No reldata section! Function descriptor not decoded.\n" msgstr "" +"\n" +"Không có phần reldata ! Vì thế chưa giải mã bộ mô tả hàm.\n" -#: peigen.c:1175 pepigen.c:1175 +#: peigen.c:1165 pepigen.c:1165 pex64igen.c:1165 #, c-format msgid "" "\n" "The Import Tables (interpreted %s section contents)\n" msgstr "" +"\n" +"Các Bảng Nhập (phiên dịch %s nội dung phần)\n" -#: peigen.c:1178 pepigen.c:1178 +#: peigen.c:1168 pepigen.c:1168 pex64igen.c:1168 #, c-format msgid "" " vma: Hint Time Forward DLL First\n" " Table Stamp Chain Name Thunk\n" msgstr "" +" vma: Gợi ý Giờ Tiếp DLL Đầu\n" +" Bảng Nhãn Dây Tên Thunk\n" -#: peigen.c:1223 pepigen.c:1223 +#: peigen.c:1216 pepigen.c:1216 pex64igen.c:1216 #, c-format msgid "" "\n" "\tDLL Name: %s\n" msgstr "" +"\n" +"\tTên DLL: %s\n" -#: peigen.c:1234 pepigen.c:1234 +#: peigen.c:1227 pepigen.c:1227 pex64igen.c:1227 #, c-format msgid "\tvma: Hint/Ord Member-Name Bound-To\n" -msgstr "" +msgstr "\tvma: Gợi_ý/Thứ_tự Tên_thành_viên Đóng_kết_với\n" -#: peigen.c:1259 pepigen.c:1259 +#: peigen.c:1252 pepigen.c:1252 pex64igen.c:1252 #, c-format msgid "" "\n" "There is a first thunk, but the section containing it could not be found\n" msgstr "" +"\n" +"Có một thunk đầu tiên, nhưng không tìm thấy phần chứa nó\n" -#: peigen.c:1399 pepigen.c:1399 +#: peigen.c:1417 pepigen.c:1417 pex64igen.c:1417 #, c-format msgid "" "\n" "There is an export table, but the section containing it could not be found\n" msgstr "" +"\n" +"Có một bảng xuất, nhưng không tìm thấy phần chứa nó\n" + +#: peigen.c:1426 pepigen.c:1426 pex64igen.c:1426 +#, c-format +msgid "" +"\n" +"There is an export table in %s, but it does not fit into that section\n" +msgstr "" +"\n" +"Có một bảng xuất trong %s, nhưng nó không vừa trong phần đó\n" -#: peigen.c:1404 pepigen.c:1404 +#: peigen.c:1432 pepigen.c:1432 pex64igen.c:1432 #, c-format msgid "" "\n" "There is an export table in %s at 0x%lx\n" msgstr "" +"\n" +"Có một bảng xuất trong %s tại 0x%lx\n" -#: peigen.c:1435 pepigen.c:1435 +#: peigen.c:1460 pepigen.c:1460 pex64igen.c:1460 #, c-format msgid "" "\n" "The Export Tables (interpreted %s section contents)\n" "\n" msgstr "" +"\n" +"Các Bảng Xuất (phiên dịch %s nội dung phần)\n" -#: peigen.c:1439 pepigen.c:1439 +#: peigen.c:1464 pepigen.c:1464 pex64igen.c:1464 #, c-format msgid "Export Flags \t\t\t%lx\n" -msgstr "" +msgstr "Cờ xuất \t\t\t%lx\n" -#: peigen.c:1442 pepigen.c:1442 +#: peigen.c:1467 pepigen.c:1467 pex64igen.c:1467 #, c-format msgid "Time/Date stamp \t\t%lx\n" -msgstr "" +msgstr "Nhãn Ngày/Giờ \t\t%lx\n" -#: peigen.c:1445 pepigen.c:1445 +#: peigen.c:1470 pepigen.c:1470 pex64igen.c:1470 #, c-format msgid "Major/Minor \t\t\t%d/%d\n" -msgstr "" +msgstr "Chính/Phụ \t\t\t%d/%d\n" -#: peigen.c:1448 pepigen.c:1448 +#: peigen.c:1473 pepigen.c:1473 pex64igen.c:1473 #, c-format msgid "Name \t\t\t\t" -msgstr "" +msgstr "Tên \t\t\t\t" -#: peigen.c:1454 pepigen.c:1454 +#: peigen.c:1479 pepigen.c:1479 pex64igen.c:1479 #, c-format msgid "Ordinal Base \t\t\t%ld\n" -msgstr "" +msgstr "Cơ bản thứ tự \t\t\t%ld\n" -#: peigen.c:1457 pepigen.c:1457 +#: peigen.c:1482 pepigen.c:1482 pex64igen.c:1482 #, c-format msgid "Number in:\n" -msgstr "" +msgstr "Số trong:\n" -#: peigen.c:1460 pepigen.c:1460 +#: peigen.c:1485 pepigen.c:1485 pex64igen.c:1485 #, c-format msgid "\tExport Address Table \t\t%08lx\n" -msgstr "" +msgstr "\tBảng Địa chỉ Xuất \t\t%08lx\n" -#: peigen.c:1464 pepigen.c:1464 +#: peigen.c:1489 pepigen.c:1489 pex64igen.c:1489 #, c-format msgid "\t[Name Pointer/Ordinal] Table\t%08lx\n" -msgstr "" +msgstr "\t[Cái_chỉ_tên/Thứ_tự] Bảng\t%08lx\n" -#: peigen.c:1467 pepigen.c:1467 +#: peigen.c:1492 pepigen.c:1492 pex64igen.c:1492 #, c-format msgid "Table Addresses\n" -msgstr "" +msgstr "Địa chỉ bảng\n" -#: peigen.c:1470 pepigen.c:1470 +#: peigen.c:1495 pepigen.c:1495 pex64igen.c:1495 #, c-format msgid "\tExport Address Table \t\t" -msgstr "" +msgstr "\tBảng Địa chỉ Xuất \t\t" -#: peigen.c:1475 pepigen.c:1475 +#: peigen.c:1500 pepigen.c:1500 pex64igen.c:1500 #, c-format msgid "\tName Pointer Table \t\t" -msgstr "" +msgstr "\tBảng Cái Chỉ Tên \t\t" -#: peigen.c:1480 pepigen.c:1480 +#: peigen.c:1505 pepigen.c:1505 pex64igen.c:1505 #, c-format msgid "\tOrdinal Table \t\t\t" -msgstr "" +msgstr "\tBảng Thứ Tự \t\t\t" -#: peigen.c:1495 pepigen.c:1495 +#: peigen.c:1519 pepigen.c:1519 pex64igen.c:1519 #, c-format msgid "" "\n" "Export Address Table -- Ordinal Base %ld\n" msgstr "" +"\n" +"Bảng Địa chỉ Xuất — Cơ bản Thứ tự %ld\n" -#: peigen.c:1514 pepigen.c:1514 +#: peigen.c:1538 pepigen.c:1538 pex64igen.c:1538 msgid "Forwarder RVA" -msgstr "" +msgstr "Bộ chuyển tiếp RVA" -#: peigen.c:1525 pepigen.c:1525 +#: peigen.c:1549 pepigen.c:1549 pex64igen.c:1549 msgid "Export RVA" -msgstr "" +msgstr "Xuất RVA" -#: peigen.c:1532 pepigen.c:1532 +#: peigen.c:1556 pepigen.c:1556 pex64igen.c:1556 #, c-format msgid "" "\n" "[Ordinal/Name Pointer] Table\n" msgstr "" +"\n" +"Bảng [Cái chỉ Thứ tự/Tên]\n" -#: peigen.c:1587 pepigen.c:1587 +#: peigen.c:1616 peigen.c:1795 pepigen.c:1616 pepigen.c:1795 pex64igen.c:1616 +#: pex64igen.c:1795 #, c-format msgid "Warning, .pdata section size (%ld) is not a multiple of %d\n" -msgstr "" - -#: peigen.c:1591 pepigen.c:1591 -#, c-format -msgid "" -"\n" -"The Function Table (interpreted .pdata section contents)\n" -msgstr "" +msgstr "Cảnh báo : kích cỡ phần .pdata (%ld) không phải là bội số cho %d\n" -#: peigen.c:1594 pepigen.c:1594 +#: peigen.c:1623 pepigen.c:1623 pex64igen.c:1623 #, c-format msgid " vma:\t\t\tBegin Address End Address Unwind Info\n" -msgstr "" +msgstr " vma:\t\t\tĐịa chi đầu Địa chỉ cuối Thông tin tháo ra\n" -#: peigen.c:1596 pepigen.c:1596 +#: peigen.c:1625 pepigen.c:1625 pex64igen.c:1625 #, c-format msgid "" " vma:\t\tBegin End EH EH PrologEnd Exception\n" " \t\tAddress Address Handler Data Address Mask\n" msgstr "" +" vma:\t\tĐầu Cuối EH EH PrologEnd Ngoại lệ\n" +" \t\tĐịa chỉ Địa chỉ Bộ quản lý Dữ liệu Địa chỉ Mặt nạ\n" -#: peigen.c:1666 pepigen.c:1666 +#: peigen.c:1695 pepigen.c:1695 pex64igen.c:1695 #, c-format msgid " Register save millicode" -msgstr "" +msgstr " Mili-mã lưu thanh ghi" -#: peigen.c:1669 pepigen.c:1669 +#: peigen.c:1698 pepigen.c:1698 pex64igen.c:1698 #, c-format msgid " Register restore millicode" -msgstr "" +msgstr " Mili-mã phục hồi thanh ghi" -#: peigen.c:1672 pepigen.c:1672 +#: peigen.c:1701 pepigen.c:1701 pex64igen.c:1701 #, c-format msgid " Glue code sequence" +msgstr " Dãy mã nối lại" + +#: peigen.c:1801 pepigen.c:1801 pex64igen.c:1801 +#, c-format +msgid "" +" vma:\t\tBegin Prolog Function Flags Exception EH\n" +" \t\tAddress Length Length 32b exc Handler Data\n" msgstr "" +" vma:\t\tĐầu Prolog Cờ hàm Ngoại lệ EH\n" +" \t\tĐịa chỉ Dài Dài 32b exc Quản lý Dữ liệu\n" -#: peigen.c:1724 pepigen.c:1724 +#: peigen.c:1933 pepigen.c:1933 pex64igen.c:1933 #, c-format msgid "" "\n" "\n" "PE File Base Relocations (interpreted .reloc section contents)\n" msgstr "" +"\n" +"\n" +"Định vị lại cơ bản tập tin PE (phiên dịch nội dung phần .reloc)\n" -#: peigen.c:1754 pepigen.c:1754 +#: peigen.c:1963 pepigen.c:1963 pex64igen.c:1963 #, c-format msgid "" "\n" "Virtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n" msgstr "" +"\n" +"Địa chỉ ảo: %08lx Kích cỡ khúc %ld (0x%lx) Số sự sửa chữa %ld\n" -#: peigen.c:1767 pepigen.c:1767 +#: peigen.c:1976 pepigen.c:1976 pex64igen.c:1976 #, c-format msgid "\treloc %4d offset %4x [%4lx] %s" -msgstr "" +msgstr "\tđịnh vị lại %4d bù %4x [%4lx] %s" #. The MS dumpbin program reportedly ands with 0xff0f before #. printing the characteristics field. Not sure why. No reason to #. emulate it here. -#: peigen.c:1807 pepigen.c:1807 +#: peigen.c:2015 pepigen.c:2015 pex64igen.c:2015 #, c-format msgid "" "\n" "Characteristics 0x%x\n" msgstr "" +"\n" +"Đặc tính 0x%x\n" + +#: peigen.c:2292 pepigen.c:2292 pex64igen.c:2292 +msgid "%B: unable to fill in DataDictionary[1] because .idata$2 is missing" +msgstr "%B: không thể điền vào DataDictionary[1] vì .idata$2 còn thiếu" + +#: peigen.c:2312 pepigen.c:2312 pex64igen.c:2312 +msgid "%B: unable to fill in DataDictionary[1] because .idata$4 is missing" +msgstr "%B: không thể điền vào DataDictionary[1] vì .idata$4 còn thiếu" + +#: peigen.c:2333 pepigen.c:2333 pex64igen.c:2333 +msgid "%B: unable to fill in DataDictionary[12] because .idata$5 is missing" +msgstr "%B: không thể điền vào DataDictionary[12] vì .idata$5 còn thiếu" + +#: peigen.c:2353 pepigen.c:2353 pex64igen.c:2353 +msgid "%B: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because .idata$6 is missing" +msgstr "%B: không thể điền vào DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] vì .idata$6 còn thiếu" + +#: peigen.c:2375 pepigen.c:2375 pex64igen.c:2375 +msgid "%B: unable to fill in DataDictionary[9] because __tls_used is missing" +msgstr "%B: không thể điền vào DataDictionary[9] vì __tls_used còn thiếu" diff --git a/bfd/ppcboot.c b/bfd/ppcboot.c index b4b6e7a..0d9a3bc 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, 2006, - 2007 Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2008, 2009 Free Software Foundation, Inc. Written by Michael Meissner, Cygnus Support, This file is part of BFD, the Binary File Descriptor library. @@ -412,8 +412,10 @@ ppcboot_bfd_print_private_bfd_data (abfd, farg) int i; fprintf (f, _("\nppcboot header:\n")); - fprintf (f, _("Entry offset = 0x%.8lx (%ld)\n"), entry_offset, entry_offset); - fprintf (f, _("Length = 0x%.8lx (%ld)\n"), length, length); + fprintf (f, _("Entry offset = 0x%.8lx (%ld)\n"), + (unsigned long) entry_offset, entry_offset); + fprintf (f, _("Length = 0x%.8lx (%ld)\n"), + (unsigned long) length, length); if (tdata->header.flags) fprintf (f, _("Flag field = 0x%.2x\n"), tdata->header.flags); @@ -453,8 +455,10 @@ ppcboot_bfd_print_private_bfd_data (abfd, farg) tdata->header.partition[i].partition_end.sector, tdata->header.partition[i].partition_end.cylinder); - fprintf (f, _("Partition[%d] sector = 0x%.8lx (%ld)\n"), i, sector_begin, sector_begin); - fprintf (f, _("Partition[%d] length = 0x%.8lx (%ld)\n"), i, sector_length, sector_length); + fprintf (f, _("Partition[%d] sector = 0x%.8lx (%ld)\n"), + i, (unsigned long) sector_begin, sector_begin); + fprintf (f, _("Partition[%d] length = 0x%.8lx (%ld)\n"), + i, (unsigned long) sector_length, sector_length); } fprintf (f, "\n"); @@ -471,6 +475,7 @@ ppcboot_bfd_print_private_bfd_data (abfd, farg) #define ppcboot_bfd_discard_group bfd_generic_discard_group #define ppcboot_section_already_linked \ _bfd_generic_section_already_linked +#define ppcboot_bfd_define_common_symbol bfd_generic_define_common_symbol #define ppcboot_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define ppcboot_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define ppcboot_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/ptrace-core.c b/bfd/ptrace-core.c index a1aa34c..ce62154 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, - 2006, 2007 Free Software Foundation, Inc. + 2005, 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. diff --git a/bfd/reloc.c b/bfd/reloc.c index cb9269b..3be29fe 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -1734,6 +1734,36 @@ ENUMX BFD_RELOC_68K_JMP_SLOT ENUMX BFD_RELOC_68K_RELATIVE +ENUMX + BFD_RELOC_68K_TLS_GD32 +ENUMX + BFD_RELOC_68K_TLS_GD16 +ENUMX + BFD_RELOC_68K_TLS_GD8 +ENUMX + BFD_RELOC_68K_TLS_LDM32 +ENUMX + BFD_RELOC_68K_TLS_LDM16 +ENUMX + BFD_RELOC_68K_TLS_LDM8 +ENUMX + BFD_RELOC_68K_TLS_LDO32 +ENUMX + BFD_RELOC_68K_TLS_LDO16 +ENUMX + BFD_RELOC_68K_TLS_LDO8 +ENUMX + BFD_RELOC_68K_TLS_IE32 +ENUMX + BFD_RELOC_68K_TLS_IE16 +ENUMX + BFD_RELOC_68K_TLS_IE8 +ENUMX + BFD_RELOC_68K_TLS_LE32 +ENUMX + BFD_RELOC_68K_TLS_LE16 +ENUMX + BFD_RELOC_68K_TLS_LE8 ENUMDOC Relocations used by 68K ELF. @@ -1830,6 +1860,16 @@ ENUMX BFD_RELOC_SPARC_UA32 ENUMX BFD_RELOC_SPARC_UA64 +ENUMX + BFD_RELOC_SPARC_GOTDATA_HIX22 +ENUMX + BFD_RELOC_SPARC_GOTDATA_LOX10 +ENUMX + BFD_RELOC_SPARC_GOTDATA_OP_HIX22 +ENUMX + BFD_RELOC_SPARC_GOTDATA_OP_LOX10 +ENUMX + BFD_RELOC_SPARC_GOTDATA_OP ENUMDOC SPARC ELF relocations. There is probably some overlap with other relocation types already defined. @@ -1977,6 +2017,8 @@ ENUMX BFD_RELOC_SPU_PPU32 ENUMX BFD_RELOC_SPU_PPU64 +ENUMX + BFD_RELOC_SPU_ADD_PIC ENUMDOC SPU Relocations. @@ -2069,6 +2111,30 @@ ENUMDOC share a common GP, and the target address is adjusted for STO_ALPHA_STD_GPLOAD. +ENUM + BFD_RELOC_ALPHA_NOP +ENUMDOC + The NOP relocation outputs a NOP if the longword displacement + between two procedure entry points is < 2^21. + +ENUM + BFD_RELOC_ALPHA_BSR +ENUMDOC + The BSR relocation outputs a BSR if the longword displacement + between two procedure entry points is < 2^21. + +ENUM + BFD_RELOC_ALPHA_LDA +ENUMDOC + The LDA relocation outputs a LDA if the longword displacement + between two procedure entry points is < 2^16. + +ENUM + BFD_RELOC_ALPHA_BOH +ENUMDOC + The BOH relocation outputs a BSR if the longword displacement + between two procedure entry points is < 2^21, or else a hint. + ENUM BFD_RELOC_ALPHA_TLSGD ENUMX @@ -2143,6 +2209,13 @@ ENUM ENUMDOC Low 16 bits of pc-relative value +ENUM + BFD_RELOC_MIPS16_GOT16 +ENUMX + BFD_RELOC_MIPS16_CALL16 +ENUMDOC + Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of + 16-bit immediate fields ENUM BFD_RELOC_MIPS16_HI16 ENUMDOC @@ -2241,7 +2314,13 @@ ENUM ENUMX BFD_RELOC_MIPS_JUMP_SLOT ENUMDOC - MIPS ELF relocations (VxWorks extensions). + MIPS ELF relocations (VxWorks and PLT extensions). +COMMENT + +ENUM + BFD_RELOC_MOXIE_10_PCREL +ENUMDOC + Moxie ELF relocations. COMMENT ENUM @@ -2361,6 +2440,18 @@ ENUM BFD_RELOC_MN10300_RELATIVE ENUMDOC Adjust by program base. +ENUM + BFD_RELOC_MN10300_SYM_DIFF +ENUMDOC + Together with another reloc targeted at the same location, + allows for a value that is the difference of two symbols + in the same section. +ENUM + BFD_RELOC_MN10300_ALIGN +ENUMDOC + The addend of this reloc is an alignment power that must + be honoured at the offset's location, regardless of linker + relaxation. COMMENT ENUM @@ -2409,6 +2500,8 @@ ENUMX BFD_RELOC_386_TLS_DESC_CALL ENUMX BFD_RELOC_386_TLS_DESC +ENUMX + BFD_RELOC_386_IRELATIVE ENUMDOC i386/elf relocations @@ -2464,6 +2557,8 @@ ENUMX BFD_RELOC_X86_64_TLSDESC_CALL ENUMX BFD_RELOC_X86_64_TLSDESC +ENUMX + BFD_RELOC_X86_64_IRELATIVE ENUMDOC x86-64/elf relocations @@ -2627,6 +2722,10 @@ ENUMDOC ENUM BFD_RELOC_PPC_TLS +ENUMX + BFD_RELOC_PPC_TLSGD +ENUMX + BFD_RELOC_PPC_TLSLD ENUMX BFD_RELOC_PPC_DTPMOD ENUMX @@ -2912,6 +3011,11 @@ ENUMX ENUMDOC ARM group relocations. +ENUM + BFD_RELOC_ARM_V4BX +ENUMDOC + Annotation of BX instructions. + ENUM BFD_RELOC_ARM_IMMEDIATE ENUMX @@ -4106,13 +4210,10 @@ ENUMX ENUMDOC Long displacement extension. -ENUM - BFD_RELOC_SCORE_DUMMY1 -ENUMDOC - Score relocations ENUM BFD_RELOC_SCORE_GPREL15 ENUMDOC + Score relocations Low 16 bit for load/store ENUM BFD_RELOC_SCORE_DUMMY2 @@ -4124,6 +4225,14 @@ ENUM BFD_RELOC_SCORE_BRANCH ENUMDOC This is a 19-bit reloc with the right 1 bit assumed to be 0 +ENUM + BFD_RELOC_SCORE_IMM30 +ENUMDOC + This is a 32-bit reloc for 48-bit instructions. +ENUM + BFD_RELOC_SCORE_IMM32 +ENUMDOC + This is a 32-bit reloc for 48-bit instructions. ENUM BFD_RELOC_SCORE16_JMP ENUMDOC @@ -4132,6 +4241,10 @@ 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_BCMP +ENUMDOC + This is a 9-bit reloc with the right 1 bit assumed to be 0 ENUM BFD_RELOC_SCORE_GOT15 ENUMX @@ -4570,6 +4683,18 @@ ENUMX BFD_RELOC_CR16_DISP24 ENUMX BFD_RELOC_CR16_DISP24a +ENUMX + BFD_RELOC_CR16_SWITCH8 +ENUMX + BFD_RELOC_CR16_SWITCH16 +ENUMX + BFD_RELOC_CR16_SWITCH32 +ENUMX + BFD_RELOC_CR16_GOT_REGREL20 +ENUMX + BFD_RELOC_CR16_GOTC_REGREL20 +ENUMX + BFD_RELOC_CR16_GLOB_DAT ENUMDOC NS CR16 Relocations. @@ -4678,6 +4803,33 @@ ENUM ENUMDOC 32-bit offset to symbol with PLT entry, relative to this relocation. +ENUM + BFD_RELOC_CRIS_32_GOT_GD +ENUMX + BFD_RELOC_CRIS_16_GOT_GD +ENUMX + BFD_RELOC_CRIS_32_GD +ENUMX + BFD_RELOC_CRIS_DTP +ENUMX + BFD_RELOC_CRIS_32_DTPREL +ENUMX + BFD_RELOC_CRIS_16_DTPREL +ENUMX + BFD_RELOC_CRIS_32_GOT_TPREL +ENUMX + BFD_RELOC_CRIS_16_GOT_TPREL +ENUMX + BFD_RELOC_CRIS_32_TPREL +ENUMX + BFD_RELOC_CRIS_16_TPREL +ENUMX + BFD_RELOC_CRIS_DTPMOD +ENUMX + BFD_RELOC_CRIS_32_IE +ENUMDOC + Relocs used in TLS code for CRIS. + ENUM BFD_RELOC_860_COPY ENUMX @@ -4975,6 +5127,22 @@ ENUMDOC assembler-expanded instructions. This is commonly used internally by the linker after analysis of a BFD_RELOC_XTENSA_ASM_EXPAND. +ENUM + BFD_RELOC_XTENSA_TLSDESC_FN +ENUMX + BFD_RELOC_XTENSA_TLSDESC_ARG +ENUMX + BFD_RELOC_XTENSA_TLS_DTPOFF +ENUMX + BFD_RELOC_XTENSA_TLS_TPOFF +ENUMX + BFD_RELOC_XTENSA_TLS_FUNC +ENUMX + BFD_RELOC_XTENSA_TLS_ARG +ENUMX + BFD_RELOC_XTENSA_TLS_CALL +ENUMDOC + Xtensa TLS relocations. ENUM BFD_RELOC_Z80_DISP8 @@ -4994,6 +5162,105 @@ ENUM ENUMDOC 4 bit value. +ENUM + BFD_RELOC_LM32_CALL +ENUMX + BFD_RELOC_LM32_BRANCH +ENUMX + BFD_RELOC_LM32_16_GOT +ENUMX + BFD_RELOC_LM32_GOTOFF_HI16 +ENUMX + BFD_RELOC_LM32_GOTOFF_LO16 +ENUMX + BFD_RELOC_LM32_COPY +ENUMX + BFD_RELOC_LM32_GLOB_DAT +ENUMX + BFD_RELOC_LM32_JMP_SLOT +ENUMX + BFD_RELOC_LM32_RELATIVE +ENUMDOC + Lattice Mico32 relocations. + +ENUM + BFD_RELOC_MACH_O_SECTDIFF +ENUMDOC + Difference between two section addreses. Must be followed by a + BFD_RELOC_MACH_O_PAIR. +ENUM + BFD_RELOC_MACH_O_PAIR +ENUMDOC + Mach-O generic relocations. + +ENUM + BFD_RELOC_MICROBLAZE_32_LO +ENUMDOC + This is a 32 bit reloc for the microblaze that stores the + low 16 bits of a value +ENUM + BFD_RELOC_MICROBLAZE_32_LO_PCREL +ENUMDOC + This is a 32 bit pc-relative reloc for the microblaze that + stores the low 16 bits of a value +ENUM + BFD_RELOC_MICROBLAZE_32_ROSDA +ENUMDOC + This is a 32 bit reloc for the microblaze that stores a + value relative to the read-only small data area anchor +ENUM + BFD_RELOC_MICROBLAZE_32_RWSDA +ENUMDOC + This is a 32 bit reloc for the microblaze that stores a + value relative to the read-write small data area anchor +ENUM + BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM +ENUMDOC + This is a 32 bit reloc for the microblaze to handle + expressions of the form "Symbol Op Symbol" +ENUM + BFD_RELOC_MICROBLAZE_64_NONE +ENUMDOC + This is a 64 bit reloc that stores the 32 bit pc relative + value in two words (with an imm instruction). No relocation is + done here - only used for relaxing +ENUM + BFD_RELOC_MICROBLAZE_64_GOTPC +ENUMDOC + This is a 64 bit reloc that stores the 32 bit pc relative + value in two words (with an imm instruction). The relocation is + PC-relative GOT offset +ENUM + BFD_RELOC_MICROBLAZE_64_GOT +ENUMDOC + This is a 64 bit reloc that stores the 32 bit pc relative + value in two words (with an imm instruction). The relocation is + GOT offset +ENUM + BFD_RELOC_MICROBLAZE_64_PLT +ENUMDOC + This is a 64 bit reloc that stores the 32 bit pc relative + value in two words (with an imm instruction). The relocation is + PC-relative offset into PLT +ENUM + BFD_RELOC_MICROBLAZE_64_GOTOFF +ENUMDOC + This is a 64 bit reloc that stores the 32 bit GOT relative + value in two words (with an imm instruction). The relocation is + relative offset from _GLOBAL_OFFSET_TABLE_ +ENUM + BFD_RELOC_MICROBLAZE_32_GOTOFF +ENUMDOC + This is a 32 bit reloc that stores the 32 bit GOT relative + value in a word. The relocation is relative offset from + _GLOBAL_OFFSET_TABLE_ +ENUM + BFD_RELOC_MICROBLAZE_COPY +ENUMDOC + This is used to tell the dynamic linker to copy the value out of + the dynamic object into the runtime process image. + + ENDSENUM BFD_RELOC_UNUSED CODE_FRAGMENT @@ -5114,6 +5381,10 @@ bfd_generic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *link_info ATTRIBUTE_UNUSED, bfd_boolean *again) { + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + *again = FALSE; return TRUE; } @@ -5204,7 +5475,7 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, if (reloc_size == 0) return data; - reloc_vector = bfd_malloc (reloc_size); + reloc_vector = (arelent **) bfd_malloc (reloc_size); if (reloc_vector == NULL) return NULL; diff --git a/bfd/reloc16.c b/bfd/reloc16.c index 4e3107f..768b288 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, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -76,6 +76,10 @@ bfd_coff_reloc16_get_value (reloc, link_info, input_section) else if (h != (struct bfd_link_hash_entry *) NULL && h->type == bfd_link_hash_common) value = h->u.c.size; + else if (h != (struct bfd_link_hash_entry *) NULL + && h->type == bfd_link_hash_undefweak) + /* This is a GNU extension. */ + value = 0; else { if (!((*link_info->callbacks->undefined_symbol) @@ -153,6 +157,10 @@ bfd_coff_reloc16_relax_section (abfd, input_section, link_info, again) arelent **reloc_vector = NULL; long reloc_count; + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + /* We only do global relaxation once. It is not safe to do it multiple times (see discussion of the "shrinks" array below). */ *again = FALSE; diff --git a/bfd/rs6000-core.c b/bfd/rs6000-core.c index eb0eb52..d9c06b6 100644 --- a/bfd/rs6000-core.c +++ b/bfd/rs6000-core.c @@ -1,6 +1,6 @@ /* IBM RS/6000 "XCOFF" back-end for BFD. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, - 2001, 2002, 2004, 2006, 2007 + 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Metin G. Ozisik, Mimi Phuong-Thao Vo, and John Gilmore. Archive support from Damon A. Permezel. @@ -107,9 +107,9 @@ typedef union { typedef union { #ifdef AIX_CORE_DUMPX_CORE - struct core_dumpx new; /* new AIX 4.3+ core dump */ + struct core_dumpx new_dump; /* new AIX 4.3+ core dump */ #else - struct core_dump new; /* for simpler coding */ + struct core_dump new_dump; /* for simpler coding */ #endif struct core_dump old; /* old AIX 4.2- core dump, still used on 4.3+ with appropriate SMIT config */ @@ -120,9 +120,9 @@ typedef union { #ifdef CORE_VERSION_1 typedef union { #ifdef AIX_CORE_DUMPX_CORE - struct vm_infox new; + struct vm_infox new_dump; #else - struct vm_info new; + struct vm_info new_dump; #endif struct vm_info old; } VmInfo; @@ -136,6 +136,19 @@ typedef union { # define CORE_NEW(c) 0 #endif +/* Return whether CoreHdr C usese core_dumpxx structure. + + FIXME: the core file format version number used here definitely indicates + that struct core_dumpxx should be used to represent the core file header, + but that may not be the only such format version number. */ + +#ifdef AIX_5_CORE +# define CORE_DUMPXX_VERSION 267312562 +# define CNEW_IS_CORE_DUMPXX(c) ((c).new_dump.c_version == CORE_DUMPXX_VERSION) +#else +# define CNEW_IS_CORE_DUMPXX(c) 0 +#endif + /* Return the c_stackorg field from struct core_dumpx C. */ #ifdef AIX_CORE_DUMPX_CORE @@ -278,7 +291,7 @@ read_hdr (bfd *abfd, CoreHdr *core) /* Read the trailing portion of the structure. */ if (CORE_NEW (*core)) - size = sizeof (core->new); + size = sizeof (core->new_dump); else size = sizeof (core->old); size -= CORE_COMMONSZ; @@ -329,16 +342,23 @@ rs6000coff_core_p (bfd *abfd) return NULL; } + /* This isn't the right handler for 64-bit core files on AIX 5.x. */ + if (CORE_NEW (core) && CNEW_IS_CORE_DUMPXX (core)) + { + bfd_set_error (bfd_error_wrong_format); + return NULL; + } + /* Copy fields from new or old core structure. */ if (CORE_NEW (core)) { - c_flag = core.new.c_flag; - c_stack = (file_ptr) core.new.c_stack; - c_size = core.new.c_size; - c_stackend = CNEW_STACKORG (core.new) + c_size; - c_lsize = CNEW_LSIZE (core.new); - c_loader = CNEW_LOADER (core.new); - proc64 = CNEW_PROC64 (core.new); + c_flag = core.new_dump.c_flag; + c_stack = (file_ptr) core.new_dump.c_stack; + c_size = core.new_dump.c_size; + c_stackend = CNEW_STACKORG (core.new_dump) + c_size; + c_lsize = CNEW_LSIZE (core.new_dump); + c_loader = CNEW_LOADER (core.new_dump); + proc64 = CNEW_PROC64 (core.new_dump); } else { @@ -353,13 +373,13 @@ rs6000coff_core_p (bfd *abfd) if (proc64) { - c_regsize = sizeof (CNEW_CONTEXT64 (core.new)); - c_regptr = &CNEW_CONTEXT64 (core.new); + c_regsize = sizeof (CNEW_CONTEXT64 (core.new_dump)); + c_regptr = &CNEW_CONTEXT64 (core.new_dump); } else if (CORE_NEW (core)) { - c_regsize = sizeof (CNEW_MSTSAVE (core.new)); - c_regptr = &CNEW_MSTSAVE (core.new); + c_regsize = sizeof (CNEW_MSTSAVE (core.new_dump)); + c_regptr = &CNEW_MSTSAVE (core.new_dump); } else { @@ -429,7 +449,7 @@ rs6000coff_core_p (bfd *abfd) bfd_get_filename (abfd)); /* Allocate core file header. */ - size = CORE_NEW (core) ? sizeof (core.new) : sizeof (core.old); + size = CORE_NEW (core) ? sizeof (core.new_dump) : sizeof (core.old); tmpptr = (char *) bfd_zalloc (abfd, (bfd_size_type) size); if (!tmpptr) return NULL; @@ -444,7 +464,7 @@ rs6000coff_core_p (bfd *abfd) enum bfd_architecture arch; unsigned long mach; - switch (CNEW_IMPL (core.new)) + switch (CNEW_IMPL (core.new_dump)) { case POWER_RS1: case POWER_RSC: @@ -517,10 +537,10 @@ rs6000coff_core_p (bfd *abfd) if (CORE_NEW (core)) { - c_datasize = CNEW_DATASIZE (core.new); - c_data = (file_ptr) core.new.c_data; - c_vmregions = core.new.c_vmregions; - c_vmm = (file_ptr) core.new.c_vmm; + c_datasize = CNEW_DATASIZE (core.new_dump); + c_data = (file_ptr) core.new_dump.c_data; + c_vmregions = core.new_dump.c_vmregions; + c_vmm = (file_ptr) core.new_dump.c_vmm; } else { @@ -595,15 +615,15 @@ rs6000coff_core_p (bfd *abfd) file_ptr vminfo_offset; bfd_vma vminfo_addr; - size = CORE_NEW (core) ? sizeof (vminfo.new) : sizeof (vminfo.old); + size = CORE_NEW (core) ? sizeof (vminfo.new_dump) : sizeof (vminfo.old); if (bfd_bread (&vminfo, size, abfd) != size) goto fail; if (CORE_NEW (core)) { - vminfo_addr = (bfd_vma) vminfo.new.vminfo_addr; - vminfo_size = vminfo.new.vminfo_size; - vminfo_offset = vminfo.new.vminfo_offset; + vminfo_addr = (bfd_vma) vminfo.new_dump.vminfo_addr; + vminfo_size = vminfo.new_dump.vminfo_size; + vminfo_offset = vminfo.new_dump.vminfo_offset; } else { @@ -649,11 +669,11 @@ rs6000coff_core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd) return FALSE; if (CORE_NEW (core)) - c_loader = CNEW_LOADER (core.new); + c_loader = CNEW_LOADER (core.new_dump); else c_loader = (file_ptr) (ptr_to_uint) COLD_LOADER (core.old); - if (CORE_NEW (core) && CNEW_PROC64 (core.new)) + if (CORE_NEW (core) && CNEW_PROC64 (core.new_dump)) size = (int) ((LdInfo *) 0)->l64.ldinfo_filename; else size = (int) ((LdInfo *) 0)->l32.ldinfo_filename; @@ -715,7 +735,7 @@ rs6000coff_core_file_failing_command (bfd *abfd) { CoreHdr *core = core_hdr (abfd); char *com = CORE_NEW (*core) ? - CNEW_COMM (core->new) : COLD_COMM (core->old); + CNEW_COMM (core->new_dump) : COLD_COMM (core->old); if (*com) return com; @@ -727,7 +747,7 @@ int rs6000coff_core_file_failing_signal (bfd *abfd) { CoreHdr *core = core_hdr (abfd); - return CORE_NEW (*core) ? core->new.c_signo : core->old.c_signo; + return CORE_NEW (*core) ? core->new_dump.c_signo : core->old.c_signo; } #endif /* AIX_CORE */ diff --git a/bfd/section.c b/bfd/section.c index 008d2e5..d92dc2d 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -268,7 +268,7 @@ CODE_FRAGMENT . . {* If SEC_LINK_ONCE is set, this bitfield describes how the linker . should handle duplicate sections. *} -.#define SEC_LINK_DUPLICATES 0x40000 +.#define SEC_LINK_DUPLICATES 0xc0000 . . {* This value for SEC_LINK_DUPLICATES means that duplicate . sections with the same name should simply be discarded. *} @@ -277,11 +277,11 @@ CODE_FRAGMENT . {* 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 +.#define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000 . . {* 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 +.#define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000 . . {* This value for SEC_LINK_DUPLICATES means that the linker . should warn if any duplicate sections contain different @@ -293,28 +293,28 @@ CODE_FRAGMENT . 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 +.#define SEC_LINKER_CREATED 0x100000 . . {* 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 +.#define SEC_KEEP 0x200000 . . {* This section contains "short" data, and should be placed . "near" the GP. *} -.#define SEC_SMALL_DATA 0x800000 +.#define SEC_SMALL_DATA 0x400000 . . {* Attempt to merge identical entities in the section. . Entity size is given in the entsize field. *} -.#define SEC_MERGE 0x1000000 +.#define SEC_MERGE 0x800000 . . {* 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 +.#define SEC_STRINGS 0x1000000 . . {* This section contains data about section groups. *} -.#define SEC_GROUP 0x4000000 +.#define SEC_GROUP 0x2000000 . . {* The section is a COFF shared library section. This flag is . only for the linker. If this type of section appears in @@ -325,23 +325,27 @@ CODE_FRAGMENT . 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 +.#define SEC_COFF_SHARED_LIBRARY 0x4000000 . . {* This section contains data which may be shared with other . executables or shared objects. This is for COFF only. *} -.#define SEC_COFF_SHARED 0x20000000 +.#define SEC_COFF_SHARED 0x8000000 . . {* 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 +.#define SEC_TIC54X_BLOCK 0x10000000 . . {* 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 +.#define SEC_TIC54X_CLINK 0x20000000 +. +. {* Indicate that section has the no read flag set. This happens +. when memory read flag isn't set. *} +.#define SEC_COFF_NOREAD 0x40000000 . . {* End of section flags. *} . @@ -357,9 +361,8 @@ CODE_FRAGMENT . output sections that have an input section. *} . unsigned int linker_has_input : 1; . -. {* Mark flags used by some linker backends for garbage collection. *} +. {* Mark flag 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. *} . @@ -383,6 +386,9 @@ CODE_FRAGMENT . {* Nonzero if this section has TLS related relocations. *} . unsigned int has_tls_reloc:1; . +. {* Nonzero if this section has a call to __tls_get_addr. *} +. unsigned int has_tls_get_addr_call:1; +. . {* Nonzero if this section has a gp reloc. *} . unsigned int has_gp_reloc:1; . @@ -413,15 +419,22 @@ CODE_FRAGMENT . 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. *} +. octets. This field should be set for any section whose size is +. changed by linker relaxation. It is required 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; . +. {* Relaxation table. *} +. struct relax_table *relax; +. +. {* Count of used relaxation table entries. *} +. int relax_count; +. +. . {* 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 @@ -511,6 +524,17 @@ CODE_FRAGMENT . } map_head, map_tail; .} asection; . +.{* Relax table contains information about instructions which can +. be removed by relaxation -- replacing a long address with a +. short address. *} +.struct relax_table { +. {* Address where bytes may be deleted. *} +. bfd_vma addr; +. +. {* Number of bytes to be deleted. *} +. int size; +.}; +. .{* 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 @@ -637,17 +661,17 @@ CODE_FRAGMENT . {* 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, \ +. {* linker_mark, linker_has_input, gc_mark, *} \ +. 0, 0, 1, \ . \ . {* 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, \ +. {* has_tls_get_addr_call, has_gp_reloc, need_finalize_relax, *} \ +. 0, 0, 0, \ . \ -. {* vma, lma, size, rawsize *} \ -. 0, 0, 0, 0, \ +. {* reloc_done, vma, lma, size, rawsize, relax, relax_count, *} \ +. 0, 0, 0, 0, 0, 0, 0, \ . \ . {* output_offset, output_section, alignment_power, *} \ . 0, (struct bfd_section *) &SEC, 0, \ @@ -913,7 +937,7 @@ bfd_get_unique_section_name (bfd *abfd, const char *templat, int *count) char *sname; len = strlen (templat); - sname = bfd_malloc (len + 8); + sname = (char *) bfd_malloc (len + 8); if (sname == NULL) return NULL; memcpy (sname, templat, len); @@ -1430,6 +1454,16 @@ bfd_get_section_contents (bfd *abfd, if ((section->flags & SEC_IN_MEMORY) != 0) { + if (section->contents == NULL) + { + /* This can happen because of errors earlier on in the linking process. + We do not want to seg-fault here, so clear the flag and return an + error code. */ + section->flags &= ~ SEC_IN_MEMORY; + bfd_set_error (bfd_error_invalid_operation); + return FALSE; + } + memcpy (location, section->contents + offset, (size_t) count); return TRUE; } @@ -1461,7 +1495,8 @@ bfd_malloc_and_get_section (bfd *abfd, sec_ptr sec, bfd_byte **buf) if (sz == 0) return TRUE; - p = bfd_malloc (sec->rawsize > sec->size ? sec->rawsize : sec->size); + p = (bfd_byte *) + bfd_malloc (sec->rawsize > sec->size ? sec->rawsize : sec->size); if (p == NULL) return FALSE; *buf = p; diff --git a/bfd/simple.c b/bfd/simple.c index 1b92a05..9a8397f 100644 --- a/bfd/simple.c +++ b/bfd/simple.c @@ -1,5 +1,5 @@ /* simple.c -- BFD simple client routines - Copyright 2002, 2003, 2004, 2005, 2007 + Copyright 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by MontaVista Software, Inc. @@ -109,7 +109,7 @@ simple_save_output_info (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr) { - struct saved_output_info *output_info = ptr; + struct saved_output_info *output_info = (struct saved_output_info *) ptr; output_info[section->index].offset = section->output_offset; output_info[section->index].section = section->output_section; if ((section->flags & SEC_DEBUGGING) != 0 @@ -125,7 +125,7 @@ simple_restore_output_info (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr) { - struct saved_output_info *output_info = ptr; + struct saved_output_info *output_info = (struct saved_output_info *) ptr; section->output_offset = output_info[section->index].offset; section->output_section = output_info[section->index].section; } @@ -171,7 +171,7 @@ bfd_simple_get_relocated_section_contents (bfd *abfd, bfd_size_type size = sec->rawsize ? sec->rawsize : sec->size; if (outbuf == NULL) - contents = bfd_malloc (amt); + contents = (bfd_byte *) bfd_malloc (amt); else contents = outbuf; @@ -186,6 +186,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.output_bfd = abfd; link_info.input_bfds = abfd; link_info.input_bfds_tail = &abfd->link_next; @@ -209,7 +210,8 @@ bfd_simple_get_relocated_section_contents (bfd *abfd, data = NULL; if (outbuf == NULL) { - data = bfd_malloc (sec->size); + bfd_size_type amt = sec->rawsize > sec->size ? sec->rawsize : sec->size; + data = (bfd_byte *) bfd_malloc (amt); if (data == NULL) return NULL; outbuf = data; @@ -239,7 +241,7 @@ bfd_simple_get_relocated_section_contents (bfd *abfd, _bfd_generic_link_add_symbols (abfd, &link_info); storage_needed = bfd_get_symtab_upper_bound (abfd); - symbol_table = bfd_malloc (storage_needed); + symbol_table = (asymbol **) bfd_malloc (storage_needed); bfd_canonicalize_symtab (abfd, symbol_table); } else diff --git a/bfd/som.c b/bfd/som.c index e267658..0fb8e1d 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by the Center for Software Science at the @@ -328,7 +328,7 @@ static const struct fixup_format som_fixup_formats[256] = /* R_DATA_ONE_SYMBOL. */ { 0, "L4=Sb=" }, /* 0x25 */ { 1, "L4=Sd=" }, /* 0x26 */ - /* R_DATA_PLEBEL. */ + /* R_DATA_PLABEL. */ { 0, "L4=Sb=" }, /* 0x27 */ { 1, "L4=Sd=" }, /* 0x28 */ /* R_SPACE_REF. */ @@ -412,8 +412,9 @@ static const struct fixup_format som_fixup_formats[256] = { 31, "L4=SD=" }, /* 0x6f */ { 32, "L4=Sb=" }, /* 0x70 */ { 33, "L4=Sd=" }, /* 0x71 */ + /* R_DATA_GPREL. */ + { 0, "L4=Sd=" }, /* 0x72 */ /* R_RESERVED. */ - { 0, "" }, /* 0x72 */ { 0, "" }, /* 0x73 */ { 0, "" }, /* 0x74 */ { 0, "" }, /* 0x75 */ @@ -800,7 +801,7 @@ static reloc_howto_type som_hppa_howto_table[] = SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), - SOM_HOWTO (R_DP_RELATIVE, "R_DP_RELATIVE"), + SOM_HOWTO (R_DATA_GPREL, "R_DATA_GPREL"), SOM_HOWTO (R_RESERVED, "R_RESERVED"), SOM_HOWTO (R_RESERVED, "R_RESERVED"), SOM_HOWTO (R_RESERVED, "R_RESERVED"), @@ -1546,6 +1547,8 @@ hppa_som_gen_reloc_type (bfd *abfd, || field == e_lpsel || field == e_rpsel) *final_type = R_DATA_PLABEL; + else if (field == e_fsel && format == 32) + *final_type = R_DATA_GPREL; break; case R_HPPA_COMPLEX: @@ -2774,6 +2777,24 @@ som_write_fixups (bfd *abfd, abort (); break; + case R_DATA_GPREL: + /* Account for any addend. */ + if (bfd_reloc->addend) + p = som_reloc_addend (abfd, bfd_reloc->addend, p, + &subspace_reloc_size, reloc_queue); + + if (sym_num < 0x10000000) + { + bfd_put_8 (abfd, bfd_reloc->howto->type, p); + bfd_put_8 (abfd, sym_num >> 16, p + 1); + bfd_put_16 (abfd, (bfd_vma) sym_num, p + 2); + p = try_prev_fixup (abfd, &subspace_reloc_size, + p, 4, reloc_queue); + } + else + abort (); + break; + case R_DATA_ONE_SYMBOL: case R_DATA_PLABEL: case R_CODE_PLABEL: @@ -3969,7 +3990,9 @@ som_bfd_derive_misc_symbol_info (bfd *abfd ATTRIBUTE_UNUSED, section (ST_DATA for DATA sections, ST_CODE for CODE sections). */ else if (som_symbol_data (sym)->som_type == SYMBOL_TYPE_UNKNOWN) { - if (sym->section->flags & SEC_CODE) + if (bfd_is_abs_section (sym->section)) + info->symbol_type = ST_ABSOLUTE; + else if (sym->section->flags & SEC_CODE) info->symbol_type = ST_CODE; else info->symbol_type = ST_DATA; @@ -4449,13 +4472,13 @@ static asymbol * som_make_empty_symbol (bfd *abfd) { bfd_size_type amt = sizeof (som_symbol_type); - som_symbol_type *new = bfd_zalloc (abfd, amt); + som_symbol_type *new_symbol_type = bfd_zalloc (abfd, amt); - if (new == NULL) + if (new_symbol_type == NULL) return NULL; - new->symbol.the_bfd = abfd; + new_symbol_type->symbol.the_bfd = abfd; - return &new->symbol; + return &new_symbol_type->symbol; } /* Print symbol information. */ @@ -4939,8 +4962,11 @@ som_get_reloc_upper_bound (bfd *abfd, sec_ptr asect) return -1; return (asect->reloc_count + 1) * sizeof (arelent *); } - /* There are no relocations. */ - return 0; + + /* There are no relocations. Return enough space to hold the + NULL pointer which will be installed if som_canonicalize_reloc + is called. */ + return sizeof (arelent *); } /* Convert relocations from SOM (external) form into BFD internal @@ -5331,15 +5357,57 @@ som_set_arch_mach (bfd *abfd, } static bfd_boolean -som_find_nearest_line (bfd *abfd ATTRIBUTE_UNUSED, - asection *section ATTRIBUTE_UNUSED, - asymbol **symbols ATTRIBUTE_UNUSED, - bfd_vma offset ATTRIBUTE_UNUSED, - const char **filename_ptr ATTRIBUTE_UNUSED, - const char **functionname_ptr ATTRIBUTE_UNUSED, - unsigned int *line_ptr ATTRIBUTE_UNUSED) +som_find_nearest_line (bfd *abfd, + asection *section, + asymbol **symbols, + bfd_vma offset, + const char **filename_ptr, + const char **functionname_ptr, + unsigned int *line_ptr) { - return FALSE; + bfd_boolean found; + asymbol *func; + bfd_vma low_func; + asymbol **p; + + if (! _bfd_stab_section_find_nearest_line (abfd, symbols, section, offset, + & found, filename_ptr, + functionname_ptr, line_ptr, + & somdata (abfd).line_info)) + return FALSE; + + if (found) + return TRUE; + + if (symbols == NULL) + return FALSE; + + /* Fallback: find function name from symbols table. */ + func = NULL; + low_func = 0; + + for (p = symbols; *p != NULL; p++) + { + som_symbol_type *q = (som_symbol_type *) *p; + + if (q->som_type == SYMBOL_TYPE_ENTRY + && q->symbol.section == section + && q->symbol.value >= low_func + && q->symbol.value <= offset) + { + func = (asymbol *) q; + low_func = q->symbol.value; + } + } + + if (func == NULL) + return FALSE; + + *filename_ptr = NULL; + *functionname_ptr = bfd_asymbol_name (func); + *line_ptr = 0; + + return TRUE; } static int @@ -6281,6 +6349,7 @@ som_bfd_link_split_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) #define som_bfd_is_group_section bfd_generic_is_group_section #define som_bfd_discard_group bfd_generic_discard_group #define som_section_already_linked _bfd_generic_section_already_linked +#define som_bfd_define_common_symbol bfd_generic_define_common_symbol #define som_bfd_merge_private_bfd_data _bfd_generic_bfd_merge_private_bfd_data #define som_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data #define som_bfd_set_private_flags _bfd_generic_bfd_set_private_flags diff --git a/bfd/som.h b/bfd/som.h index 708f0ae..016c518 100644 --- a/bfd/som.h +++ b/bfd/som.h @@ -1,6 +1,6 @@ /* HP PA-RISC SOM object file format: definitions internal to BFD. Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2000, 2001, - 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. Contributed by the Center for Software Science at the University of Utah (pa-gdb-bugs@cs.utah.edu). @@ -136,6 +136,7 @@ struct somdata file_ptr str_filepos; file_ptr reloc_filepos; unsigned stringtab_size; + void * line_info; }; struct som_data_struct diff --git a/bfd/sparclinux.c b/bfd/sparclinux.c index 4144ce7..f0c1e4a 100644 --- a/bfd/sparclinux.c +++ b/bfd/sparclinux.c @@ -1,6 +1,6 @@ /* BFD back-end for linux flavored sparc a.out binaries. Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, - 2003, 2004, 2006, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -346,9 +346,9 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, If we do, and the defining entry is from a shared library, we need to create the dynamic sections. - FIXME: What if abfd->xvec != info->hash->creator? We may want to - be able to link Linux a.out and ELF objects together, but serious - confusion is possible. */ + FIXME: What if abfd->xvec != info->output_bfd->xvec? We may + want to be able to link Linux a.out and ELF objects together, + but serious confusion is possible. */ insert = FALSE; @@ -356,7 +356,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, && linux_hash_table (info)->dynobj == NULL && strcmp (name, SHARABLE_CONFLICTS) == 0 && (flags & BSF_CONSTRUCTOR) != 0 - && abfd->xvec == info->hash->creator) + && abfd->xvec == info->output_bfd->xvec) { if (! linux_link_create_dynamic_sections (abfd, info)) return FALSE; @@ -365,7 +365,7 @@ linux_add_one_symbol (info, abfd, name, flags, section, value, string, } if (bfd_is_abs_section (section) - && abfd->xvec == info->hash->creator) + && abfd->xvec == info->output_bfd->xvec) { h = linux_link_hash_lookup (linux_hash_table (info), name, FALSE, FALSE, FALSE); diff --git a/bfd/sparcnetbsd.c b/bfd/sparcnetbsd.c index dcabce6..0bde25e 100644 --- a/bfd/sparcnetbsd.c +++ b/bfd/sparcnetbsd.c @@ -1,6 +1,6 @@ /* BFD back-end for NetBSD/sparc a.out-ish binaries. Copyright 1990, 1991, 1992, 1994, 1995, 1997, 1998, 2000, 2001, 2003, - 2007 Free Software Foundation, Inc. + 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/srec.c b/bfd/srec.c index 371e53a..d66fa6d 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support . @@ -198,7 +198,7 @@ srec_mkobject (bfd *abfd) srec_init (); - tdata = bfd_alloc (abfd, sizeof (tdata_type)); + tdata = (tdata_type *) bfd_alloc (abfd, sizeof (tdata_type)); if (tdata == NULL) return FALSE; @@ -271,7 +271,7 @@ srec_new_symbol (bfd *abfd, const char *name, bfd_vma val) { struct srec_symbol *n; - n = bfd_alloc (abfd, sizeof (* n)); + n = (struct srec_symbol *) bfd_alloc (abfd, sizeof (* n)); if (n == NULL) return FALSE; @@ -363,7 +363,7 @@ srec_scan (bfd *abfd) } alc = 10; - symbuf = bfd_malloc (alc + 1); + symbuf = (char *) bfd_malloc (alc + 1); if (symbuf == NULL) goto error_return; @@ -378,7 +378,7 @@ srec_scan (bfd *abfd) char *n; alc *= 2; - n = bfd_realloc (symbuf, alc + 1); + n = (char *) bfd_realloc (symbuf, alc + 1); if (n == NULL) goto error_return; p = n + (p - symbuf); @@ -395,7 +395,7 @@ srec_scan (bfd *abfd) } *p++ = '\0'; - symname = bfd_alloc (abfd, (bfd_size_type) (p - symbuf)); + symname = (char *) bfd_alloc (abfd, (bfd_size_type) (p - symbuf)); if (symname == NULL) goto error_return; strcpy (symname, symbuf); @@ -458,6 +458,7 @@ srec_scan (bfd *abfd) unsigned int bytes; bfd_vma address; bfd_byte *data; + unsigned char check_sum; /* Starting an S-record. */ @@ -476,12 +477,12 @@ srec_scan (bfd *abfd) goto error_return; } - bytes = HEX (hdr + 1); + check_sum = bytes = HEX (hdr + 1); if (bytes * 2 > bufsize) { if (buf != NULL) free (buf); - buf = bfd_malloc ((bfd_size_type) bytes * 2); + buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2); if (buf == NULL) goto error_return; bufsize = bytes * 2; @@ -505,18 +506,22 @@ srec_scan (bfd *abfd) break; case '3': + check_sum += HEX (data); address = HEX (data); data += 2; --bytes; /* Fall through. */ case '2': + check_sum += HEX (data); address = (address << 8) | HEX (data); data += 2; --bytes; /* Fall through. */ case '1': + check_sum += HEX (data); address = (address << 8) | HEX (data); data += 2; + check_sum += HEX (data); address = (address << 8) | HEX (data); data += 2; bytes -= 2; @@ -537,7 +542,7 @@ srec_scan (bfd *abfd) sprintf (secbuf, ".sec%d", bfd_count_sections (abfd) + 1); amt = strlen (secbuf) + 1; - secname = bfd_alloc (abfd, amt); + secname = (char *) bfd_alloc (abfd, amt); strcpy (secname, secbuf); flags = SEC_HAS_CONTENTS | SEC_LOAD | SEC_ALLOC; sec = bfd_make_section_with_flags (abfd, secname, flags); @@ -548,25 +553,56 @@ srec_scan (bfd *abfd) sec->size = bytes; sec->filepos = pos; } + + while (bytes > 0) + { + check_sum += HEX (data); + data += 2; + bytes--; + } + check_sum = 255 - (check_sum & 0xff); + if (check_sum != HEX (data)) + { + (*_bfd_error_handler) + (_("%B:%d: Bad checksum in S-record file\n"), + abfd, lineno); + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + break; case '7': + check_sum += HEX (data); address = HEX (data); data += 2; /* Fall through. */ case '8': + check_sum += HEX (data); address = (address << 8) | HEX (data); data += 2; /* Fall through. */ case '9': + check_sum += HEX (data); address = (address << 8) | HEX (data); data += 2; + check_sum += HEX (data); address = (address << 8) | HEX (data); data += 2; /* This is a termination record. */ abfd->start_address = address; + check_sum = 255 - (check_sum & 0xff); + if (check_sum != HEX (data)) + { + (*_bfd_error_handler) + (_("%B:%d: Bad checksum in S-record file\n"), + abfd, lineno); + bfd_set_error (bfd_error_bad_value); + goto error_return; + } + if (buf != NULL) free (buf); @@ -702,7 +738,7 @@ srec_read_section (bfd *abfd, asection *section, bfd_byte *contents) { if (buf != NULL) free (buf); - buf = bfd_malloc ((bfd_size_type) bytes * 2); + buf = (bfd_byte *) bfd_malloc ((bfd_size_type) bytes * 2); if (buf == NULL) goto error_return; bufsize = bytes * 2; @@ -802,7 +838,8 @@ srec_get_section_contents (bfd *abfd, if (section->used_by_bfd == NULL) return FALSE; - if (! srec_read_section (abfd, section, section->used_by_bfd)) + if (! srec_read_section (abfd, section, + (bfd_byte *) section->used_by_bfd)) return FALSE; } @@ -836,7 +873,7 @@ srec_set_section_contents (bfd *abfd, tdata_type *tdata = abfd->tdata.srec_data; srec_data_list_type *entry; - entry = bfd_alloc (abfd, sizeof (* entry)); + entry = (srec_data_list_type *) bfd_alloc (abfd, sizeof (* entry)); if (entry == NULL) return FALSE; @@ -846,7 +883,7 @@ srec_set_section_contents (bfd *abfd, { bfd_byte *data; - data = bfd_alloc (abfd, bytes_to_do); + data = (bfd_byte *) bfd_alloc (abfd, bytes_to_do); if (data == NULL) return FALSE; memcpy ((void *) data, location, (size_t) bytes_to_do); @@ -1145,7 +1182,7 @@ srec_canonicalize_symtab (bfd *abfd, asymbol **alocation) asymbol *c; struct srec_symbol *s; - csymbols = bfd_alloc (abfd, symcount * sizeof (asymbol)); + csymbols = (asymbol *) bfd_alloc (abfd, symcount * sizeof (asymbol)); if (csymbols == NULL) return -1; abfd->tdata.srec_data->csymbols = csymbols; @@ -1219,6 +1256,7 @@ srec_print_symbol (bfd *abfd, #define srec_bfd_is_group_section bfd_generic_is_group_section #define srec_bfd_discard_group bfd_generic_discard_group #define srec_section_already_linked _bfd_generic_section_already_linked +#define srec_bfd_define_common_symbol bfd_generic_define_common_symbol #define srec_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define srec_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define srec_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/stab-syms.c b/bfd/stab-syms.c index 8ecd21e..9e9274f 100644 --- a/bfd/stab-syms.c +++ b/bfd/stab-syms.c @@ -1,5 +1,5 @@ /* Table of stab names for the BFD library. - Copyright 1990, 1991, 1992, 1994, 1995, 1996, 2000, 2007 + Copyright 1990, 1991, 1992, 1994, 1995, 1996, 2000, 2005, 2007 Free Software Foundation, Inc. Written by Cygnus Support. diff --git a/bfd/stabs.c b/bfd/stabs.c index a9fe409..8a1cd87 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, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -127,8 +127,8 @@ stab_link_includes_newfunc (struct bfd_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 stab_link_includes_entry)); + ret = (struct stab_link_includes_entry *) + bfd_hash_allocate (table, sizeof (struct stab_link_includes_entry)); if (ret == NULL) return NULL; @@ -337,7 +337,7 @@ _bfd_link_section_stabs (bfd *abfd, if (num_chars >= buf_len) { buf_len += 32 * 1024; - symb = bfd_realloc (symb, buf_len); + symb = (char *) bfd_realloc_or_free (symb, buf_len); if (symb == NULL) goto error_return; symb_rover = symb + num_chars; @@ -375,7 +375,7 @@ _bfd_link_section_stabs (bfd *abfd, /* Record this symbol, so that we can set the value correctly. */ amt = sizeof *ne; - ne = bfd_alloc (abfd, amt); + ne = (struct stab_excl_list *) bfd_alloc (abfd, amt); if (ne == NULL) goto error_return; ne->offset = sym - stabbuf; @@ -388,12 +388,14 @@ _bfd_link_section_stabs (bfd *abfd, { /* This is the first time we have seen this header file with this set of stabs strings. */ - t = bfd_hash_allocate (&sinfo->includes, sizeof *t); + t = (struct stab_link_includes_totals *) + bfd_hash_allocate (&sinfo->includes, sizeof *t); if (t == NULL) goto error_return; t->sum_chars = sum_chars; t->num_chars = num_chars; - t->symb = bfd_realloc (symb, num_chars); /* Trim data down. */ + /* Trim data down. */ + t->symb = symb = (char *) bfd_realloc_or_free (symb, num_chars); t->next = incl_entry->totals; incl_entry->totals = t; } @@ -471,7 +473,7 @@ _bfd_link_section_stabs (bfd *abfd, bfd_size_type *pskips; amt = count * sizeof (bfd_size_type); - secinfo->cumulative_skips = bfd_alloc (abfd, amt); + secinfo->cumulative_skips = (bfd_size_type *) bfd_alloc (abfd, amt); if (secinfo->cumulative_skips == NULL) goto error_return; @@ -624,7 +626,7 @@ _bfd_discard_section_stabs (bfd *abfd, if (secinfo->cumulative_skips == NULL) { amt = count * sizeof (bfd_size_type); - secinfo->cumulative_skips = bfd_alloc (abfd, amt); + secinfo->cumulative_skips = (bfd_size_type *) bfd_alloc (abfd, amt); if (secinfo->cumulative_skips == NULL) goto error_return; } diff --git a/bfd/sunos.c b/bfd/sunos.c index 1c17dce..67880b2 100644 --- a/bfd/sunos.c +++ b/bfd/sunos.c @@ -1,6 +1,7 @@ /* BFD backend for SunOS binaries. Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. Written by Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -829,7 +830,7 @@ sunos_add_dynamic_symbols (bfd *abfd, unsigned long need; /* Make sure we have all the required sections. */ - if (info->hash->creator == abfd->xvec) + if (info->output_bfd->xvec == abfd->xvec) { if (! sunos_create_dynamic_sections (abfd, info, ((abfd->flags & DYNAMIC) != 0 @@ -870,7 +871,7 @@ sunos_add_dynamic_symbols (bfd *abfd, /* There's no hope of using a dynamic object which does not exactly match the format of the output file. */ - if (info->hash->creator != abfd->xvec) + if (info->output_bfd->xvec != abfd->xvec) { bfd_set_error (bfd_error_invalid_operation); return FALSE; @@ -1121,7 +1122,7 @@ sunos_add_one_symbol (struct bfd_link_info *info, } if ((abfd->flags & DYNAMIC) != 0 - && abfd->xvec == info->hash->creator + && abfd->xvec == info->output_bfd->xvec && (h->flags & SUNOS_CONSTRUCTOR) != 0) /* The existing symbol is a constructor symbol, and this symbol is from a dynamic object. A constructor symbol is actually a @@ -1145,7 +1146,7 @@ sunos_add_one_symbol (struct bfd_link_info *info, hashp)) return FALSE; - if (abfd->xvec == info->hash->creator) + if (abfd->xvec == info->output_bfd->xvec) { /* Set a flag in the hash table entry indicating the type of reference or definition we just found. Keep a count of the @@ -1191,7 +1192,7 @@ struct bfd_link_needed_list * bfd_sunos_get_needed_list (bfd *abfd ATTRIBUTE_UNUSED, struct bfd_link_info *info) { - if (info->hash->creator != &MY (vec)) + if (info->output_bfd->xvec != &MY (vec)) return NULL; return sunos_hash_table (info)->needed; } diff --git a/bfd/syms.c b/bfd/syms.c index 9d42568..1f25d33 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -205,97 +205,107 @@ CODE_FRAGMENT . symvalue value; . . {* Attributes of a symbol. *} -.#define BSF_NO_FLAGS 0x00 +.#define BSF_NO_FLAGS 0x00 . . {* The symbol has local scope; <> in <>. The value . is the offset into the section of the data. *} -.#define BSF_LOCAL 0x01 +.#define BSF_LOCAL (1 << 0) . . {* The symbol has global scope; initialized data in <>. The . value is the offset into the section of the data. *} -.#define BSF_GLOBAL 0x02 +.#define BSF_GLOBAL (1 << 1) . . {* 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: -. <>, <>, <> or +. <>, <>, <> or . <>. *} . . {* The symbol is a debugging record. The value has an arbitrary . meaning, unless BSF_DEBUGGING_RELOC is also set. *} -.#define BSF_DEBUGGING 0x08 +.#define BSF_DEBUGGING (1 << 2) . . {* The symbol denotes a function entry point. Used in ELF, . perhaps others someday. *} -.#define BSF_FUNCTION 0x10 +.#define BSF_FUNCTION (1 << 3) . . {* Used by the linker. *} -.#define BSF_KEEP 0x20 -.#define BSF_KEEP_G 0x40 +.#define BSF_KEEP (1 << 5) +.#define BSF_KEEP_G (1 << 6) . . {* A weak global symbol, overridable without warnings by . a regular global symbol of the same name. *} -.#define BSF_WEAK 0x80 +.#define BSF_WEAK (1 << 7) . . {* This symbol was created to point to a section, e.g. ELF's . STT_SECTION symbols. *} -.#define BSF_SECTION_SYM 0x100 +.#define BSF_SECTION_SYM (1 << 8) . . {* 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 +.#define BSF_OLD_COMMON (1 << 9) . . {* In some files the type of a symbol sometimes alters its . location in an output file - ie in coff a <> symbol . which is also <> 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 +.#define BSF_NOT_AT_END (1 << 10) . . {* Signal that the symbol is the label of constructor section. *} -.#define BSF_CONSTRUCTOR 0x800 +.#define BSF_CONSTRUCTOR (1 << 11) . . {* 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 +.#define BSF_WARNING (1 << 12) . . {* 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 +.#define BSF_INDIRECT (1 << 13) . . {* BSF_FILE marks symbols that contain a file name. This is used . for ELF STT_FILE symbols. *} -.#define BSF_FILE 0x4000 +.#define BSF_FILE (1 << 14) . . {* Symbol is from dynamic linking information. *} -.#define BSF_DYNAMIC 0x8000 +.#define BSF_DYNAMIC (1 << 15) . . {* The symbol denotes a data object. Used in ELF, and perhaps . others someday. *} -.#define BSF_OBJECT 0x10000 +.#define BSF_OBJECT (1 << 16) . . {* 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 +.#define BSF_DEBUGGING_RELOC (1 << 17) . . {* This symbol is thread local. Used in ELF. *} -.#define BSF_THREAD_LOCAL 0x40000 +.#define BSF_THREAD_LOCAL (1 << 18) . . {* This symbol represents a complex relocation expression, . with the expression tree serialized in the symbol name. *} -.#define BSF_RELC 0x80000 +.#define BSF_RELC (1 << 19) . . {* This symbol represents a signed complex relocation expression, . with the expression tree serialized in the symbol name. *} -.#define BSF_SRELC 0x100000 +.#define BSF_SRELC (1 << 20) +. +. {* This symbol was created by bfd_get_synthetic_symtab. *} +.#define BSF_SYNTHETIC (1 << 21) +. +. {* This symbol is an indirect code object. Unrelated to BSF_INDIRECT. +. The dynamic linker will compute the value of this symbol by +. calling the function that it points to. BSF_FUNCTION must +. also be also set. *} +.#define BSF_GNU_INDIRECT_FUNCTION (1 << 22) +. {* This symbol is a globally unique data object. The dynamic linker +. will make sure that in the entire process there is just one symbol +. with this name and type in use. BSF_OBJECT must also be set. *} +.#define BSF_GNU_UNIQUE (1 << 23) . . flagword flags; . @@ -464,7 +474,7 @@ DESCRIPTION void bfd_print_symbol_vandf (bfd *abfd, void *arg, asymbol *symbol) { - FILE *file = arg; + FILE *file = (FILE *) arg; flagword type = symbol->flags; @@ -479,11 +489,12 @@ bfd_print_symbol_vandf (bfd *abfd, void *arg, asymbol *symbol) fprintf (file, " %c%c%c%c%c%c%c", ((type & BSF_LOCAL) ? (type & BSF_GLOBAL) ? '!' : 'l' - : (type & BSF_GLOBAL) ? 'g' : ' '), + : (type & BSF_GLOBAL) ? 'g' + : (type & BSF_GNU_UNIQUE) ? 'u' : ' '), (type & BSF_WEAK) ? 'w' : ' ', (type & BSF_CONSTRUCTOR) ? 'C' : ' ', (type & BSF_WARNING) ? 'W' : ' ', - (type & BSF_INDIRECT) ? 'I' : ' ', + (type & BSF_INDIRECT) ? 'I' : (type & BSF_GNU_INDIRECT_FUNCTION) ? 'i' : ' ', (type & BSF_DEBUGGING) ? 'd' : (type & BSF_DYNAMIC) ? 'D' : ' ', ((type & BSF_FUNCTION) ? 'F' @@ -528,10 +539,10 @@ asymbol * _bfd_generic_make_empty_symbol (bfd *abfd) { bfd_size_type amt = sizeof (asymbol); - asymbol *new = bfd_zalloc (abfd, amt); - if (new) - new->the_bfd = abfd; - return new; + asymbol *new_symbol = (asymbol *) bfd_zalloc (abfd, amt); + if (new_symbol) + new_symbol->the_bfd = abfd; + return new_symbol; } /* @@ -669,6 +680,8 @@ bfd_decode_symclass (asymbol *symbol) } if (bfd_is_ind_section (symbol->section)) return 'I'; + if (symbol->flags & BSF_GNU_INDIRECT_FUNCTION) + return 'i'; if (symbol->flags & BSF_WEAK) { /* If weak, determine if it's specifically an object @@ -678,6 +691,8 @@ bfd_decode_symclass (asymbol *symbol) else return 'W'; } + if (symbol->flags & BSF_GNU_UNIQUE) + return 'u'; if (!(symbol->flags & (BSF_GLOBAL | BSF_LOCAL))) return '?'; @@ -796,7 +811,7 @@ _bfd_generic_read_minisymbols (bfd *abfd, if (storage == 0) return 0; - syms = bfd_malloc (storage); + syms = (asymbol **) bfd_malloc (storage); if (syms == NULL) goto error_return; @@ -863,8 +878,8 @@ struct indexentry static int cmpindexentry (const void *a, const void *b) { - const struct indexentry *contestantA = a; - const struct indexentry *contestantB = b; + const struct indexentry *contestantA = (const struct indexentry *) a; + const struct indexentry *contestantB = (const struct indexentry *) b; if (contestantA->val < contestantB->val) return -1; @@ -951,7 +966,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, #define VALOFF (8) #define STABSIZE (12) - info = *pinfo; + info = (struct stab_find_info *) *pinfo; if (info != NULL) { if (info->stabsec == NULL || info->strsec == NULL) @@ -976,7 +991,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, char *function_name; bfd_size_type amt = sizeof *info; - info = bfd_zalloc (abfd, amt); + info = (struct stab_find_info *) bfd_zalloc (abfd, amt); if (info == NULL) return FALSE; @@ -989,10 +1004,17 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, if (info->stabsec == NULL || info->strsec == NULL) { - /* No stabs debugging information. Set *pinfo so that we - can return quickly in the info != NULL case above. */ - *pinfo = info; - return TRUE; + /* Try SOM section names. */ + info->stabsec = bfd_get_section_by_name (abfd, "$GDB_SYMBOLS$"); + info->strsec = bfd_get_section_by_name (abfd, "$GDB_STRINGS$"); + + if (info->stabsec == NULL || info->strsec == NULL) + { + /* No stabs debugging information. Set *pinfo so that we + can return quickly in the info != NULL case above. */ + *pinfo = info; + return TRUE; + } } stabsize = (info->stabsec->rawsize @@ -1002,8 +1024,8 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, ? info->strsec->rawsize : info->strsec->size); - info->stabs = bfd_alloc (abfd, stabsize); - info->strs = bfd_alloc (abfd, strsize); + info->stabs = (bfd_byte *) bfd_alloc (abfd, stabsize); + info->strs = (bfd_byte *) bfd_alloc (abfd, strsize); if (info->stabs == NULL || info->strs == NULL) return FALSE; @@ -1020,7 +1042,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, reloc_size = bfd_get_reloc_upper_bound (abfd, info->stabsec); if (reloc_size < 0) return FALSE; - reloc_vector = bfd_malloc (reloc_size); + reloc_vector = (arelent **) bfd_malloc (reloc_size); if (reloc_vector == NULL && reloc_size != 0) return FALSE; reloc_count = bfd_canonicalize_reloc (abfd, info->stabsec, reloc_vector, @@ -1117,7 +1139,7 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, amt = info->indextablesize; amt *= sizeof (struct indexentry); - info->indextable = bfd_alloc (abfd, amt); + info->indextable = (struct indexentry *) bfd_alloc (abfd, amt); if (info->indextable == NULL) return FALSE; @@ -1369,10 +1391,11 @@ _bfd_stab_section_find_nearest_line (bfd *abfd, { size_t len; - if (info->filename != NULL) - free (info->filename); + /* Don't free info->filename here. objdump and other + apps keep a copy of a previously returned file name + pointer. */ len = strlen (file_name) + 1; - info->filename = bfd_malloc (dirlen + len); + info->filename = (char *) bfd_alloc (abfd, dirlen + len); if (info->filename == NULL) return FALSE; memcpy (info->filename, directory_name, dirlen); diff --git a/bfd/sysdep.h b/bfd/sysdep.h index 9695190..20ef56d 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, 2007 + Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2005, 2007, 2009 Free Software Foundation, Inc. Written by Cygnus Support. diff --git a/bfd/targets.c b/bfd/targets.c index d408a21..a33790b 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, 2006, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Cygnus Support. @@ -157,6 +157,7 @@ DESCRIPTION . bfd_target_oasys_flavour, . bfd_target_tekhex_flavour, . bfd_target_srec_flavour, +. bfd_target_verilog_flavour, . bfd_target_ihex_flavour, . bfd_target_som_flavour, . bfd_target_os9k_flavour, @@ -441,7 +442,8 @@ BFD_JUMP_TABLE macros. . NAME##_bfd_merge_sections, \ . NAME##_bfd_is_group_section, \ . NAME##_bfd_discard_group, \ -. NAME##_section_already_linked \ +. NAME##_section_already_linked, \ +. NAME##_bfd_define_common_symbol . . int (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *); . bfd_byte * (*_bfd_get_relocated_section_contents) @@ -489,6 +491,10 @@ BFD_JUMP_TABLE macros. . void (*_section_already_linked) (bfd *, struct bfd_section *, . struct bfd_link_info *); . +. {* Define a common symbol. *} +. bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *, +. struct bfd_link_hash_entry *); +. . {* Routines to handle dynamic symbols and relocs. *} .#define BFD_JUMP_TABLE_DYNAMIC(NAME) \ . NAME##_get_dynamic_symtab_upper_bound, \ @@ -560,9 +566,7 @@ extern const bfd_target armpei_big_vec; 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_pei_ia64_vec; extern const bfd_target bfd_elf32_avr_vec; extern const bfd_target bfd_elf32_bfin_vec; extern const bfd_target bfd_elf32_bfinfdpic_vec; @@ -583,6 +587,7 @@ extern const bfd_target bfd_elf32_dlx_big_vec; extern const bfd_target bfd_elf32_fr30_vec; extern const bfd_target bfd_elf32_frv_vec; extern const bfd_target bfd_elf32_frvfdpic_vec; +extern const bfd_target bfd_elf32_moxie_vec; extern const bfd_target bfd_elf32_h8300_vec; extern const bfd_target bfd_elf32_hppa_linux_vec; extern const bfd_target bfd_elf32_hppa_nbsd_vec; @@ -598,6 +603,8 @@ extern const bfd_target bfd_elf32_ia64_big_vec; extern const bfd_target bfd_elf32_ia64_hpux_big_vec; extern const bfd_target bfd_elf32_ip2k_vec; extern const bfd_target bfd_elf32_iq2000_vec; +extern const bfd_target bfd_elf32_lm32_vec; +extern const bfd_target bfd_elf32_lm32fdpic_vec; extern const bfd_target bfd_elf32_little_generic_vec; extern const bfd_target bfd_elf32_littlearc_vec; extern const bfd_target bfd_elf32_littlearm_vec; @@ -618,6 +625,7 @@ 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_microblaze_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; @@ -672,6 +680,7 @@ extern const bfd_target bfd_elf64_hppa_vec; extern const bfd_target bfd_elf64_ia64_big_vec; extern const bfd_target bfd_elf64_ia64_hpux_big_vec; extern const bfd_target bfd_elf64_ia64_little_vec; +extern const bfd_target bfd_elf64_ia64_vms_vec; extern const bfd_target bfd_elf64_little_generic_vec; extern const bfd_target bfd_elf64_littlemips_vec; extern const bfd_target bfd_elf64_mmix_vec; @@ -690,6 +699,8 @@ 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_elf64_l1om_freebsd_vec; +extern const bfd_target bfd_elf64_l1om_vec; extern const bfd_target bfd_mmo_vec; extern const bfd_target bfd_powerpc_pe_vec; extern const bfd_target bfd_powerpc_pei_vec; @@ -739,6 +750,7 @@ extern const bfd_target m88kopenbsd_vec; extern const bfd_target mach_o_be_vec; extern const bfd_target mach_o_le_vec; extern const bfd_target mach_o_fat_vec; +extern const bfd_target mach_o_i386_vec; extern const bfd_target maxqcoff_vec; extern const bfd_target mcore_pe_big_vec; extern const bfd_target mcore_pe_little_vec; @@ -758,6 +770,7 @@ extern const bfd_target pc532netbsd_vec; extern const bfd_target pdp11_aout_vec; extern const bfd_target pef_vec; extern const bfd_target pef_xlib_vec; +extern const bfd_target plugin_vec; extern const bfd_target pmac_xcoff_vec; extern const bfd_target ppcboot_vec; extern const bfd_target riscix_vec; @@ -809,6 +822,7 @@ extern const bfd_target z8kcoff_vec; /* These are always included. */ extern const bfd_target srec_vec; +extern const bfd_target verilog_vec; extern const bfd_target symbolsrec_vec; extern const bfd_target tekhex_vec; extern const bfd_target binary_vec; @@ -878,10 +892,8 @@ static const bfd_target * const _bfd_target_vector[] = &armpei_little_vec, &b_out_vec_big_host, &b_out_vec_little_host, - &bfd_efi_app_ia32_vec, #ifdef BFD64 - &bfd_efi_app_x86_64_vec, - &bfd_efi_app_ia64_vec, + &bfd_pei_ia64_vec, #endif &bfd_elf32_avr_vec, &bfd_elf32_bfin_vec, @@ -908,6 +920,7 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf32_fr30_vec, &bfd_elf32_frv_vec, &bfd_elf32_frvfdpic_vec, + &bfd_elf32_moxie_vec, &bfd_elf32_h8300_vec, &bfd_elf32_hppa_linux_vec, &bfd_elf32_hppa_nbsd_vec, @@ -927,6 +940,7 @@ static const bfd_target * const _bfd_target_vector[] = #endif &bfd_elf32_ip2k_vec, &bfd_elf32_iq2000_vec, + &bfd_elf32_lm32_vec, &bfd_elf32_little_generic_vec, &bfd_elf32_littlearc_vec, &bfd_elf32_littlearm_vec, @@ -946,6 +960,7 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf32_mcore_big_vec, &bfd_elf32_mcore_little_vec, &bfd_elf32_mep_vec, + &bfd_elf32_microblaze_vec, &bfd_elf32_mn10200_vec, &bfd_elf32_mn10300_vec, &bfd_elf32_mt_vec, @@ -964,8 +979,10 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf32_powerpc_vxworks_vec, &bfd_elf32_powerpcle_vec, &bfd_elf32_s390_vec, +#ifdef BFD64 &bfd_elf32_bigscore_vec, - &bfd_elf32_littlescore_vec, + &bfd_elf32_littlescore_vec, +#endif &bfd_elf32_sh_vec, &bfd_elf32_shblin_vec, &bfd_elf32_shl_vec, @@ -1005,6 +1022,7 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf64_ia64_big_vec, &bfd_elf64_ia64_hpux_big_vec, &bfd_elf64_ia64_little_vec, + &bfd_elf64_ia64_vms_vec, &bfd_elf64_little_generic_vec, &bfd_elf64_littlemips_vec, &bfd_elf64_mmix_vec, @@ -1023,6 +1041,8 @@ static const bfd_target * const _bfd_target_vector[] = &bfd_elf64_tradlittlemips_vec, &bfd_elf64_x86_64_freebsd_vec, &bfd_elf64_x86_64_vec, + &bfd_elf64_l1om_freebsd_vec, + &bfd_elf64_l1om_vec, &bfd_mmo_vec, #endif &bfd_powerpc_pe_vec, @@ -1102,6 +1122,7 @@ static const bfd_target * const _bfd_target_vector[] = &mach_o_be_vec, &mach_o_le_vec, &mach_o_fat_vec, + &mach_o_i386_vec, &maxqcoff_vec, &mcore_pe_big_vec, &mcore_pe_little_vec, @@ -1132,6 +1153,9 @@ static const bfd_target * const _bfd_target_vector[] = &pdp11_aout_vec, &pef_vec, &pef_xlib_vec, +#if BFD_SUPPORTS_PLUGINS + &plugin_vec, +#endif #if 0 /* This has the same magic number as RS/6000. */ &pmac_xcoff_vec, @@ -1189,6 +1213,8 @@ static const bfd_target * const _bfd_target_vector[] = /* Always support S-records, for convenience. */ &srec_vec, &symbolsrec_vec, +/* And verilog. */ + &verilog_vec, /* And tekhex */ &tekhex_vec, /* Likewise for binary output. */ @@ -1429,7 +1455,7 @@ bfd_target_list (void) vec_length++; amt = (vec_length + 1) * sizeof (char **); - name_ptr = name_list = bfd_malloc (amt); + name_ptr = name_list = (const char **) bfd_malloc (amt); if (name_list == NULL) return NULL; diff --git a/bfd/tekhex.c b/bfd/tekhex.c index 2df774f..0be3ab9 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, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support . This file is part of BFD, the Binary File Descriptor library. @@ -324,7 +324,8 @@ find_chunk (bfd *abfd, bfd_vma vma) if (!d) { /* No chunk for this address, so make one up. */ - d = bfd_zalloc (abfd, (bfd_size_type) sizeof (struct data_struct)); + d = (struct data_struct *) + bfd_zalloc (abfd, (bfd_size_type) sizeof (struct data_struct)); if (!d) return NULL; @@ -383,7 +384,7 @@ first_phase (bfd *abfd, int type, char *src) section = bfd_get_section_by_name (abfd, sym); if (section == NULL) { - char *n = bfd_alloc (abfd, (bfd_size_type) len + 1); + char *n = (char *) bfd_alloc (abfd, (bfd_size_type) len + 1); if (!n) return FALSE; @@ -415,31 +416,33 @@ first_phase (bfd *abfd, int type, char *src) /* Symbols, add to section. */ { bfd_size_type amt = sizeof (tekhex_symbol_type); - tekhex_symbol_type *new = bfd_alloc (abfd, amt); + tekhex_symbol_type *new_symbol = (tekhex_symbol_type *) + bfd_alloc (abfd, amt); char stype = (*src); - if (!new) + if (!new_symbol) return FALSE; - new->symbol.the_bfd = abfd; + new_symbol->symbol.the_bfd = abfd; src++; abfd->symcount++; abfd->flags |= HAS_SYMS; - new->prev = abfd->tdata.tekhex_data->symbols; - abfd->tdata.tekhex_data->symbols = new; + new_symbol->prev = abfd->tdata.tekhex_data->symbols; + abfd->tdata.tekhex_data->symbols = new_symbol; if (!getsym (sym, &src, &len)) return FALSE; - new->symbol.name = bfd_alloc (abfd, (bfd_size_type) len + 1); - if (!new->symbol.name) + new_symbol->symbol.name = (const char *) + bfd_alloc (abfd, (bfd_size_type) len + 1); + if (!new_symbol->symbol.name) return FALSE; - memcpy ((char *) (new->symbol.name), sym, len + 1); - new->symbol.section = section; + memcpy ((char *) (new_symbol->symbol.name), sym, len + 1); + new_symbol->symbol.section = section; if (stype <= '4') - new->symbol.flags = (BSF_GLOBAL | BSF_EXPORT); + new_symbol->symbol.flags = (BSF_GLOBAL | BSF_EXPORT); else - new->symbol.flags = BSF_LOCAL; + new_symbol->symbol.flags = BSF_LOCAL; if (!getvalue (&src, &val)) return FALSE; - new->symbol.value = val - section->vma; + new_symbol->symbol.value = val - section->vma; break; } default: @@ -532,7 +535,7 @@ tekhex_mkobject (bfd *abfd) { tdata_type *tdata; - tdata = bfd_alloc (abfd, (bfd_size_type) sizeof (tdata_type)); + tdata = (tdata_type *) bfd_alloc (abfd, (bfd_size_type) sizeof (tdata_type)); if (!tdata) return FALSE; abfd->tdata.tekhex_data = tdata; @@ -880,13 +883,14 @@ static asymbol * tekhex_make_empty_symbol (bfd *abfd) { bfd_size_type amt = sizeof (struct tekhex_symbol_struct); - tekhex_symbol_type *new = bfd_zalloc (abfd, amt); + tekhex_symbol_type *new_symbol = (tekhex_symbol_type *) bfd_zalloc (abfd, + amt); - if (!new) + if (!new_symbol) return NULL; - new->symbol.the_bfd = abfd; - new->prev = NULL; - return &(new->symbol); + new_symbol->symbol.the_bfd = abfd; + new_symbol->prev = NULL; + return &(new_symbol->symbol); } static void @@ -943,6 +947,7 @@ tekhex_print_symbol (bfd *abfd, #define tekhex_bfd_is_group_section bfd_generic_is_group_section #define tekhex_bfd_discard_group bfd_generic_discard_group #define tekhex_section_already_linked _bfd_generic_section_already_linked +#define tekhex_bfd_define_common_symbol bfd_generic_define_common_symbol #define tekhex_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define tekhex_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define tekhex_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/ticoff.h b/bfd/ticoff.h index 50f0577..e2c9316 100644 --- a/bfd/ticoff.h +++ b/bfd/ticoff.h @@ -1,4 +1,4 @@ -/* Copyright 2002, 2007 Free Software Foundation, Inc. +/* Copyright 2002, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -68,7 +68,7 @@ ticoff_bfd_is_local_label_name (abfd, name) #include "coffcode.h" /* COFF0 differs in file/section header size and relocation entry size. */ -static const bfd_coff_backend_data ticoff0_swap_table = +static bfd_coff_backend_data ticoff0_swap_table = { coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in, coff_SWAP_aux_out, coff_SWAP_sym_out, @@ -81,10 +81,7 @@ static const bfd_coff_backend_data ticoff0_swap_table = #else FALSE, #endif -#ifdef COFF_LONG_SECTION_NAMES - TRUE, -#else - FALSE, + COFF_DEFAULT_LONG_SECTION_NAMES, #endif COFF_DEFAULT_SECTION_ALIGNMENT_POWER, coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in, @@ -99,7 +96,7 @@ static const bfd_coff_backend_data ticoff0_swap_table = }; /* COFF1 differs in section header size. */ -static const bfd_coff_backend_data ticoff1_swap_table = +static bfd_coff_backend_data ticoff1_swap_table = { coff_SWAP_aux_in, coff_SWAP_sym_in, coff_SWAP_lineno_in, coff_SWAP_aux_out, coff_SWAP_sym_out, @@ -112,11 +109,7 @@ static const bfd_coff_backend_data ticoff1_swap_table = #else FALSE, #endif -#ifdef COFF_LONG_SECTION_NAMES - TRUE, -#else - FALSE, -#endif + COFF_DEFAULT_LONG_SECTION_NAMES, COFF_DEFAULT_SECTION_ALIGNMENT_POWER, coff_SWAP_filehdr_in, coff_SWAP_aouthdr_in, coff_SWAP_scnhdr_in, coff_SWAP_reloc_in, ticoff1_bad_format_hook, coff_set_arch_mach_hook, diff --git a/bfd/vax1knetbsd.c b/bfd/vax1knetbsd.c index f511429..22f5a13 100644 --- a/bfd/vax1knetbsd.c +++ b/bfd/vax1knetbsd.c @@ -1,5 +1,5 @@ /* BFD back-end for NetBSD/VAX (1K page size) a.out-ish binaries. - Copyright 1998, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 1998, 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/vaxbsd.c b/bfd/vaxbsd.c index b0ba653..cf566b9 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, 2007 Free Software Foundation, Inc. + Copyright 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/vaxnetbsd.c b/bfd/vaxnetbsd.c index b692ffa..033cec9 100644 --- a/bfd/vaxnetbsd.c +++ b/bfd/vaxnetbsd.c @@ -1,5 +1,6 @@ /* BFD back-end for NetBSD/VAX (4K page size) a.out-ish binaries. - Copyright 1998, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. + Copyright 1998, 2000, 2001, 2002, 2005, 2007 + Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. diff --git a/bfd/verilog.c b/bfd/verilog.c new file mode 100644 index 0000000..2c60849 --- /dev/null +++ b/bfd/verilog.c @@ -0,0 +1,377 @@ +/* BFD back-end for verilog hex memory dump files. + Copyright 2009 + Free Software Foundation, Inc. + Written by Anthony Green + + 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 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + + +/* SUBSECTION + Verilog hex memory file handling + + DESCRIPTION + + Verilog hex memory files cannot hold anything but addresses + and data, so that's all that we implement. + + The syntax of the text file is described in the IEEE standard + for Verilog. Briefly, the file contains two types of tokens: + data and optional addresses. The tokens are separated by + whitespace and comments. Comments may be single line or + multiline, using syntax similar to C++. Addresses are + specified by a leading "at" character (@) and are always + hexadecimal strings. Data and addresses may contain + underscore (_) characters. + + If no address is specified, the data is assumed to start at + address 0. Similarly, if data exists before the first + specified address, then that data is assumed to start at + address 0. + + + EXAMPLE + @1000 + 01 ae 3f 45 12 + + DESCRIPTION + @1000 specifies the starting address for the memory data. + The following characters describe the 5 bytes at 0x1000. */ + + +#include "sysdep.h" +#include "bfd.h" +#include "libbfd.h" +#include "libiberty.h" +#include "safe-ctype.h" + +/* Macros for converting between hex and binary. */ + +static const char digs[] = "0123456789ABCDEF"; + +#define NIBBLE(x) hex_value(x) +#define HEX(buffer) ((NIBBLE ((buffer)[0])<<4) + NIBBLE ((buffer)[1])) +#define TOHEX(d, x) \ + d[1] = digs[(x) & 0xf]; \ + d[0] = digs[((x) >> 4) & 0xf]; + +/* When writing a verilog memory dump file, we write them in the order + in which they appear in memory. This structure is used to hold them + in memory. */ + +struct verilog_data_list_struct +{ + struct verilog_data_list_struct *next; + bfd_byte * data; + bfd_vma where; + bfd_size_type size; +}; + +typedef struct verilog_data_list_struct verilog_data_list_type; + +/* The verilog tdata information. */ + +typedef struct verilog_data_struct +{ + verilog_data_list_type *head; + verilog_data_list_type *tail; +} +tdata_type; + +static bfd_boolean +verilog_set_arch_mach (bfd *abfd, enum bfd_architecture arch, unsigned long mach) +{ + if (arch != bfd_arch_unknown) + return bfd_default_set_arch_mach (abfd, arch, mach); + + abfd->arch_info = & bfd_default_arch_struct; + return TRUE; +} + +/* We have to save up all the outpu for a splurge before output. */ + +static bfd_boolean +verilog_set_section_contents (bfd *abfd, + sec_ptr section, + const void * location, + file_ptr offset, + bfd_size_type bytes_to_do) +{ + tdata_type *tdata = abfd->tdata.verilog_data; + verilog_data_list_type *entry; + + entry = (verilog_data_list_type *) bfd_alloc (abfd, sizeof (* entry)); + if (entry == NULL) + return FALSE; + + if (bytes_to_do + && (section->flags & SEC_ALLOC) + && (section->flags & SEC_LOAD)) + { + bfd_byte *data; + + data = (bfd_byte *) bfd_alloc (abfd, bytes_to_do); + if (data == NULL) + return FALSE; + memcpy ((void *) data, location, (size_t) bytes_to_do); + + entry->data = data; + entry->where = section->lma + offset; + entry->size = bytes_to_do; + + /* Sort the records by address. Optimize for the common case of + adding a record to the end of the list. */ + if (tdata->tail != NULL + && entry->where >= tdata->tail->where) + { + tdata->tail->next = entry; + entry->next = NULL; + tdata->tail = entry; + } + else + { + verilog_data_list_type **look; + + for (look = &tdata->head; + *look != NULL && (*look)->where < entry->where; + look = &(*look)->next) + ; + entry->next = *look; + *look = entry; + if (entry->next == NULL) + tdata->tail = entry; + } + } + return TRUE; +} + +static bfd_boolean +verilog_write_address (bfd *abfd, bfd_vma address) +{ + char buffer[12]; + char *dst = buffer; + bfd_size_type wrlen; + + /* Write the address. */ + *dst++ = '@'; + TOHEX (dst, (address >> 24)); + dst += 2; + TOHEX (dst, (address >> 16)); + dst += 2; + TOHEX (dst, (address >> 8)); + dst += 2; + TOHEX (dst, (address)); + dst += 2; + *dst++ = '\r'; + *dst++ = '\n'; + wrlen = dst - buffer; + + return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen; +} + +/* Write a record of type, of the supplied number of bytes. The + supplied bytes and length don't have a checksum. That's worked out + here. */ + +static bfd_boolean +verilog_write_record (bfd *abfd, + const bfd_byte *data, + const bfd_byte *end) +{ + char buffer[48]; + const bfd_byte *src = data; + char *dst = buffer; + bfd_size_type wrlen; + + /* Write the data. */ + for (src = data; src < end; src++) + { + TOHEX (dst, *src); + dst += 2; + *dst++ = ' '; + } + *dst++ = '\r'; + *dst++ = '\n'; + wrlen = dst - buffer; + + return bfd_bwrite ((void *) buffer, wrlen, abfd) == wrlen; +} + +static bfd_boolean +verilog_write_section (bfd *abfd, + tdata_type *tdata ATTRIBUTE_UNUSED, + verilog_data_list_type *list) +{ + unsigned int octets_written = 0; + bfd_byte *location = list->data; + + verilog_write_address (abfd, list->where); + while (octets_written < list->size) + { + bfd_vma address; + unsigned int octets_this_chunk = list->size - octets_written; + + if (octets_this_chunk > 16) + octets_this_chunk = 16; + + address = list->where + octets_written / bfd_octets_per_byte (abfd); + + if (! verilog_write_record (abfd, + location, + location + octets_this_chunk)) + return FALSE; + + octets_written += octets_this_chunk; + location += octets_this_chunk; + } + + return TRUE; +} + +static bfd_boolean +verilog_write_object_contents (bfd *abfd) +{ + tdata_type *tdata = abfd->tdata.verilog_data; + verilog_data_list_type *list; + + /* Now wander though all the sections provided and output them. */ + list = tdata->head; + + while (list != (verilog_data_list_type *) NULL) + { + if (! verilog_write_section (abfd, tdata, list)) + return FALSE; + list = list->next; + } + return TRUE; +} + +/* Initialize by filling in the hex conversion array. */ + +static void +verilog_init (void) +{ + static bfd_boolean inited = FALSE; + + if (! inited) + { + inited = TRUE; + hex_init (); + } +} + +/* Set up the verilog tdata information. */ + +static bfd_boolean +verilog_mkobject (bfd *abfd) +{ + tdata_type *tdata; + + verilog_init (); + + tdata = (tdata_type *) bfd_alloc (abfd, sizeof (tdata_type)); + if (tdata == NULL) + return FALSE; + + abfd->tdata.verilog_data = tdata; + tdata->head = NULL; + tdata->tail = NULL; + + return TRUE; +} + +#define verilog_close_and_cleanup _bfd_generic_close_and_cleanup +#define verilog_bfd_free_cached_info _bfd_generic_bfd_free_cached_info +#define verilog_new_section_hook _bfd_generic_new_section_hook +#define verilog_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) +#define verilog_bfd_is_local_label_name bfd_generic_is_local_label_name +#define verilog_get_lineno _bfd_nosymbols_get_lineno +#define verilog_find_nearest_line _bfd_nosymbols_find_nearest_line +#define verilog_find_inliner_info _bfd_nosymbols_find_inliner_info +#define verilog_make_empty_symbol _bfd_generic_make_empty_symbol +#define verilog_bfd_make_debug_symbol _bfd_nosymbols_bfd_make_debug_symbol +#define verilog_read_minisymbols _bfd_generic_read_minisymbols +#define verilog_minisymbol_to_symbol _bfd_generic_minisymbol_to_symbol +#define verilog_get_section_contents_in_window _bfd_generic_get_section_contents_in_window +#define verilog_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents +#define verilog_bfd_relax_section bfd_generic_relax_section +#define verilog_bfd_gc_sections bfd_generic_gc_sections +#define verilog_bfd_merge_sections bfd_generic_merge_sections +#define verilog_bfd_is_group_section bfd_generic_is_group_section +#define verilog_bfd_discard_group bfd_generic_discard_group +#define verilog_section_already_linked _bfd_generic_section_already_linked +#define verilog_bfd_link_hash_table_create _bfd_generic_link_hash_table_create +#define verilog_bfd_link_hash_table_free _bfd_generic_link_hash_table_free +#define verilog_bfd_link_add_symbols _bfd_generic_link_add_symbols +#define verilog_bfd_link_just_syms _bfd_generic_link_just_syms +#define verilog_bfd_final_link _bfd_generic_final_link +#define verilog_bfd_link_split_section _bfd_generic_link_split_section + +const bfd_target verilog_vec = +{ + "verilog", /* Name. */ + bfd_target_verilog_flavour, + BFD_ENDIAN_UNKNOWN, /* Target byte order. */ + BFD_ENDIAN_UNKNOWN, /* Target headers byte order. */ + (HAS_RELOC | EXEC_P | /* Object flags. */ + HAS_LINENO | HAS_DEBUG | + HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), + (SEC_CODE | SEC_DATA | SEC_ROM | SEC_HAS_CONTENTS + | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* Section flags. */ + 0, /* Leading underscore. */ + ' ', /* AR_pad_char. */ + 16, /* AR_max_namelen. */ + bfd_getb64, bfd_getb_signed_64, bfd_putb64, + bfd_getb32, bfd_getb_signed_32, bfd_putb32, + bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Data. */ + bfd_getb64, bfd_getb_signed_64, bfd_putb64, + bfd_getb32, bfd_getb_signed_32, bfd_putb32, + bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* Hdrs. */ + + { + _bfd_dummy_target, + _bfd_dummy_target, + _bfd_dummy_target, + _bfd_dummy_target, + }, + { + bfd_false, + verilog_mkobject, + bfd_false, + bfd_false, + }, + { /* bfd_write_contents. */ + bfd_false, + verilog_write_object_contents, + bfd_false, + bfd_false, + }, + + BFD_JUMP_TABLE_GENERIC (_bfd_generic), + BFD_JUMP_TABLE_COPY (_bfd_generic), + BFD_JUMP_TABLE_CORE (_bfd_nocore), + BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive), + BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols), + BFD_JUMP_TABLE_RELOCS (_bfd_norelocs), + BFD_JUMP_TABLE_WRITE (verilog), + BFD_JUMP_TABLE_LINK (_bfd_nolink), + BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic), + + NULL, + + NULL +}; diff --git a/bfd/versados.c b/bfd/versados.c index c4decd6..8fbc17b 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, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2009 Free Software Foundation, Inc. Written by Steve Chamberlain of Cygnus Support . Versados is a Motorola trademark. @@ -808,6 +808,7 @@ versados_canonicalize_reloc (bfd *abfd, #define versados_bfd_is_group_section bfd_generic_is_group_section #define versados_bfd_discard_group bfd_generic_discard_group #define versados_section_already_linked _bfd_generic_section_already_linked +#define versados_bfd_define_common_symbol bfd_generic_define_common_symbol #define versados_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define versados_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define versados_bfd_link_add_symbols _bfd_generic_link_add_symbols diff --git a/bfd/version.h b/bfd/version.h index fc6c8b8..b580166 100644 --- a/bfd/version.h +++ b/bfd/version.h @@ -1,4 +1,4 @@ -#define BFD_VERSION_DATE 20080103 +#define BFD_VERSION_DATE 20091016 #define BFD_VERSION @bfd_version@ #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 4bdc27c..e641d0d 100644 --- a/bfd/vms-gsd.c +++ b/bfd/vms-gsd.c @@ -1,9 +1,12 @@ /* 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, - 2007 Free Software Foundation, Inc. + 2007, 2009 Free Software Foundation, Inc. - go and read the openVMS linker manual (esp. appendix B) + GSD record handling functions + EGSD record handling functions + + Go and read the openVMS linker manual (esp. appendix B) if you don't know what's going on here :-) Written by Klaus K"ampf (kkaempf@rmi.de) @@ -46,6 +49,7 @@ #define EVAX_READONLYADDR_NAME "$READONLY_ADDR$" #define EVAX_READONLY_NAME "$READONLY$" #define EVAX_LITERAL_NAME "$LITERAL$" +#define EVAX_LITERALS_NAME "$LITERALS" #define EVAX_COMMON_NAME "$COMMON$" #define EVAX_LOCAL_NAME "$LOCAL$" @@ -133,6 +137,11 @@ static struct sec_flags_struct evax_section_flags[] = (SEC_DATA), (EGPS_S_V_REL | EGPS_S_V_RD | EGPS_S_V_WRT), (SEC_IN_MEMORY | SEC_DATA | SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD) }, + { EVAX_LITERALS_NAME, + (EGPS_S_V_PIC | EGPS_S_V_OVR), + (SEC_DATA | SEC_READONLY), + (EGPS_S_V_PIC | EGPS_S_V_OVR), + (SEC_IN_MEMORY | SEC_DATA | SEC_HAS_CONTENTS | SEC_ALLOC | SEC_READONLY | SEC_LOAD) }, { NULL, (EGPS_S_V_REL | EGPS_S_V_RD | EGPS_S_V_WRT), (SEC_DATA), @@ -197,6 +206,37 @@ vms_esecflag_by_name (struct sec_flags_struct *section_flags, struct flagdescstruct { char *name; flagword value; }; +static const struct flagdescstruct gpsflagdesc[] = +{ + { "PIC", GPS_S_M_PIC }, + { "LIB", GPS_S_M_LIB }, + { "OVR", GPS_S_M_OVR }, + { "REL", GPS_S_M_REL }, + { "GBL", GPS_S_M_GBL }, + { "SHR", GPS_S_M_SHR }, + { "EXE", GPS_S_M_EXE }, + { "RD", GPS_S_M_RD }, + { "WRT", GPS_S_M_WRT }, + { "VEC", GPS_S_M_VEC }, + { "NOMOD", EGPS_S_V_NOMOD }, + { "COM", EGPS_S_V_COM }, + { NULL, 0 } +}; + +static const struct flagdescstruct gsyflagdesc[] = +{ + { "WEAK", GSY_S_M_WEAK }, + { "DEF", GSY_S_M_DEF }, + { "UNI", GSY_S_M_UNI }, + { "REL", GSY_S_M_REL }, + { "COMM", EGSY_S_V_COMM }, + { "VECEP", EGSY_S_V_VECEP }, + { "NORM", EGCY_S_V_NORM }, + { NULL, 0 } +}; + +static char *flag2str (struct flagdescstruct *, flagword); + /* Convert flag to printable string. */ static char * @@ -224,43 +264,15 @@ flag2str (struct flagdescstruct * flagdesc, flagword flags) /* Input routines. */ +static int register_universal_symbol (bfd *abfd, asymbol *symbol, + int vms_flags); + /* Process GSD/EGSD record return 0 on success, -1 on error. */ int _bfd_vms_slurp_gsd (bfd * abfd, int objtype) { -#if VMS_DEBUG - static struct flagdescstruct gpsflagdesc[] = - { - { "PIC", 0x0001 }, - { "LIB", 0x0002 }, - { "OVR", 0x0004 }, - { "REL", 0x0008 }, - { "GBL", 0x0010 }, - { "SHR", 0x0020 }, - { "EXE", 0x0040 }, - { "RD", 0x0080 }, - { "WRT", 0x0100 }, - { "VEC", 0x0200 }, - { "NOMOD", 0x0400 }, - { "COM", 0x0800 }, - { NULL, 0 } - }; - - static struct flagdescstruct gsyflagdesc[] = - { - { "WEAK", 0x0001 }, - { "DEF", 0x0002 }, - { "UNI", 0x0004 }, - { "REL", 0x0008 }, - { "COMM", 0x0010 }, - { "VECEP", 0x0020 }, - { "NORM", 0x0040 }, - { NULL, 0 } - }; -#endif - int gsd_type, gsd_size; asection *section; unsigned char *vms_rec; @@ -300,7 +312,7 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) vms_rec = PRIV (vms_rec); if (objtype == OBJ_S_C_GSD) - gsd_type = *vms_rec; + gsd_type = vms_rec[0]; else { _bfd_vms_get_header_values (abfd, vms_rec, &gsd_type, &gsd_size); @@ -322,7 +334,7 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) vms_debug (4, "GSD_S_C_PSC\n"); #endif /* If this section isn't a bfd section. */ - if (PRIV (is_vax) && (psect_idx < (abfd->section_count-1))) + if (PRIV (is_vax) && (psect_idx < (abfd->section_count - 1))) { /* Check for temporary section from TIR record. */ if (psect_idx < PRIV (section_count)) @@ -362,7 +374,6 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) base_addr += section->size; /* Global section is common symbol. */ - if (old_flags & GPS_S_M_GBL) { entry = _bfd_vms_enter_symbol (abfd, name); @@ -496,21 +507,20 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) else psect = vms_rec[value_offset-1]; - symbol->section = (asection *) (size_t) psect; + symbol->section = (asection *)(unsigned long)psect; #if VMS_DEBUG - vms_debug (4, "gsd sym def #%d (%s, %d [%p], %04x=%s)\n", abfd->symcount, - symbol->name, (int)symbol->section, symbol->section, old_flags, flag2str (gsyflagdesc, old_flags)); + vms_debug (4, "gsd sym def #%d (%s, %ld, %04x=%s)\n", abfd->symcount, + symbol->name, (long)symbol->section, old_flags, flag2str(gsyflagdesc, old_flags)); #endif } else { /* Symbol reference. */ - symbol->section = bfd_make_section (abfd, BFD_UND_SECTION_NAME); #if VMS_DEBUG - vms_debug (4, "gsd sym ref #%d (%s, %s [%p], %04x=%s)\n", - abfd->symcount, symbol->name, symbol->section->name, - symbol->section, old_flags, flag2str (gsyflagdesc, old_flags)); + vms_debug (4, "gsd sym ref #%d (%s, %04x=%s)\n", abfd->symcount, + symbol->name, old_flags, flag2str (gsyflagdesc, old_flags)); #endif + symbol->section = (asection *)(unsigned long)-1; } gsd_size = vms_rec[name_offset] + name_offset + 1; @@ -574,19 +584,19 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) case EGSD_S_C_PSC + EVAX_OFFSET: { /* Program section definition. */ - name = _bfd_vms_save_counted_string (vms_rec + 12); + name = _bfd_vms_save_counted_string (vms_rec + EGPS_S_B_NAMLNG); section = bfd_make_section (abfd, name); if (!section) return -1; - old_flags = bfd_getl16 (vms_rec + 6); - section->size = bfd_getl32 (vms_rec + 8); /* Allocation. */ + old_flags = bfd_getl16 (vms_rec + EGPS_S_W_FLAGS); + section->size = bfd_getl32 (vms_rec + EGPS_S_L_ALLOC); new_flags = vms_secflag_by_name (abfd, evax_section_flags, name, section->size > 0); if (old_flags & EGPS_S_V_REL) new_flags |= SEC_RELOC; if (!bfd_set_section_flags (abfd, section, new_flags)) return -1; - section->alignment_power = vms_rec[4]; + section->alignment_power = vms_rec[EGPS_S_B_ALIGN]; align_addr = (1 << section->alignment_power); if ((base_addr % align_addr) != 0) base_addr += (align_addr - (base_addr % align_addr)); @@ -595,9 +605,10 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) section->contents = bfd_zmalloc (section->size); if (section->contents == NULL) return -1; + section->filepos = (unsigned int)-1; #if VMS_DEBUG - vms_debug (4, "egsd psc %d (%s, flags %04x=%s) ", - section->index, name, old_flags, flag2str (gpsflagdesc, old_flags)); + vms_debug (4, "EGSD P-section %d (%s, flags %04x=%s) ", + section->index, name, old_flags, flag2str(gpsflagdesc, old_flags)); vms_debug (4, "%d bytes at 0x%08lx (mem %p)\n", section->size, section->vma, section->contents); #endif @@ -606,50 +617,52 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) case EGSD_S_C_SYM + EVAX_OFFSET: { - /* Symbol specification (definition or reference). */ + /* Global symbol specification (definition or reference). */ symbol = bfd_make_empty_symbol (abfd); if (symbol == 0) return -1; - old_flags = bfd_getl16 (vms_rec + 6); + old_flags = bfd_getl16 (vms_rec + EGSY_S_W_FLAGS); new_flags = BSF_NO_FLAGS; if (old_flags & EGSY_S_V_WEAK) new_flags |= BSF_WEAK; - if (vms_rec[6] & EGSY_S_V_DEF) + if (old_flags & EGSY_S_V_DEF) { /* Symbol definition. */ - symbol->name = _bfd_vms_save_counted_string (vms_rec + 32); if (old_flags & EGSY_S_V_NORM) - /* Proc def. */ new_flags |= BSF_FUNCTION; - - symbol->value = bfd_getl64 (vms_rec + 8); - symbol->section = (asection *) ((unsigned long) bfd_getl32 (vms_rec + 28)); + symbol->name = + _bfd_vms_save_counted_string (vms_rec + ESDF_S_B_NAMLNG); + symbol->value = bfd_getl64 (vms_rec + ESDF_S_L_VALUE); + symbol->section = + (asection *)(unsigned long) bfd_getl32 (vms_rec + ESDF_S_L_PSINDX); #if VMS_DEBUG - vms_debug (4, "egsd sym def #%d (%s, %d, %04x=%s)\n", abfd->symcount, - symbol->name, (int) symbol->section, old_flags, - flag2str (gsyflagdesc, old_flags)); + vms_debug (4, "EGSD sym def #%d (%s, %ld, %04x=%s)\n", + abfd->symcount, symbol->name, (long)symbol->section, + old_flags, flag2str (gsyflagdesc, old_flags)); #endif } else { /* Symbol reference. */ - symbol->name = _bfd_vms_save_counted_string (vms_rec + 8); + symbol->name = + _bfd_vms_save_counted_string (vms_rec + ESRF_S_B_NAMLNG); #if VMS_DEBUG - vms_debug (4, "egsd sym ref #%d (%s, %04x=%s)\n", abfd->symcount, - symbol->name, old_flags, flag2str (gsyflagdesc, old_flags)); + vms_debug (4, "EGSD sym ref #%d (%s, %04x=%s)\n", + abfd->symcount, symbol->name, old_flags, + flag2str (gsyflagdesc, old_flags)); #endif - symbol->section = bfd_make_section (abfd, BFD_UND_SECTION_NAME); + symbol->section = (asection *)(unsigned long)-1; } symbol->flags = new_flags; - /* Save symbol in vms_symbol_table. */ - entry = (vms_symbol_entry *) bfd_hash_lookup (PRIV (vms_symbol_table), - symbol->name, - TRUE, FALSE); + /* Register symbol in VMS symbol table. */ + entry = (vms_symbol_entry *) bfd_hash_lookup + (PRIV (vms_symbol_table), symbol->name, TRUE, FALSE); + if (entry == NULL) { bfd_set_error (bfd_error_no_memory); @@ -672,11 +685,73 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) } break; - case EGSD_S_C_IDC + EVAX_OFFSET: + case EGSD_S_C_SYMG + EVAX_OFFSET: + { + /* Universal symbol specification (definition). */ + symbol = bfd_make_empty_symbol (abfd); + if (symbol == 0) + return -1; + + old_flags = bfd_getl16 (vms_rec + EGST_S_W_FLAGS); + new_flags = BSF_NO_FLAGS; + + if (old_flags & EGSY_S_V_WEAK) + new_flags |= BSF_WEAK; + + if (old_flags & EGSY_S_V_DEF) /* symbol definition */ + { + if (old_flags & EGSY_S_V_NORM) + new_flags |= BSF_FUNCTION; + + symbol->name = + _bfd_vms_save_counted_string (vms_rec + EGST_S_B_NAMLNG); + + /* For BSF_FUNCTION symbols, the entry point is in LP_1 + and the descriptor in LP_2. For other symbols, the + unique value is in LP_2. */ + symbol->value = bfd_getl64 (vms_rec + EGST_S_Q_LP_2); + + /* Adding this offset is necessary in order for GDB to + read the DWARF-2 debug info from shared libraries. */ + if (abfd->flags & DYNAMIC + && strstr (symbol->name, "$DWARF2.DEBUG") != 0) + symbol->value += PRIV (symvva); + } + else /* symbol reference */ + (*_bfd_error_handler) ("Invalid EGST reference"); + + symbol->flags = new_flags; + + if (register_universal_symbol (abfd, symbol, old_flags) < 0) + return -1; + + /* Make a second symbol for the entry point. */ + if (symbol->flags & BSF_FUNCTION) + { + asymbol *en_sym; + char *name = bfd_alloc (abfd, strlen (symbol->name) + 5); + + en_sym = bfd_make_empty_symbol (abfd); + if (en_sym == 0) + return -1; + + strcpy (name, symbol->name); + strcat (name, "..en"); + + en_sym->name = name; + en_sym->value = bfd_getl64 (vms_rec + EGST_S_Q_LP_1); + + if (register_universal_symbol (abfd, en_sym, old_flags) < 0) + return -1; + } + } break; + case EGSD_S_C_IDC + EVAX_OFFSET: + break; + default: - (*_bfd_error_handler) (_("unknown gsd/egsd subtype %d"), gsd_type); + (*_bfd_error_handler) (_("Unknown GSD/EGSD subtype %d"), gsd_type); bfd_set_error (bfd_error_bad_value); return -1; } @@ -691,7 +766,79 @@ _bfd_vms_slurp_gsd (bfd * abfd, int objtype) return 0; } -/* Output routines. */ +/* Register a universal symbol in the VMS symbol table. */ + +static int +register_universal_symbol (bfd *abfd, asymbol *symbol, int vms_flags) +{ + bfd_vma sbase = 0; + asection *s, *sec = NULL; + vms_symbol_entry *entry; + + /* A universal symbol is by definition global... */ + symbol->flags |= BSF_GLOBAL; + + /* ...and dynamic in shared libraries. */ + if (abfd->flags & DYNAMIC) + symbol->flags |= BSF_DYNAMIC; + + /* Find containing section. */ + for (s = abfd->sections; s; s = s->next) + { + if (symbol->value >= s->vma + && s->vma > sbase + && !(s->flags & SEC_COFF_SHARED_LIBRARY) + && (s->size > 0 || !(vms_flags & EGSY_S_V_REL))) + { + sbase = s->vma; + sec = s; + } + } + + symbol->value -= sbase; + symbol->section = sec; + +#if VMS_DEBUG + vms_debug (4, "EGST sym def #%d (%s, 0x%llx => 0x%llx, %04x=%s)\n", + abfd->symcount, symbol->name, symbol->value + sbase, + symbol->value, vms_flags, + flag2str(gsyflagdesc, vms_flags)); +#endif + + entry = (vms_symbol_entry *) bfd_hash_lookup (PRIV (vms_symbol_table), + symbol->name, + TRUE, FALSE); + + if (entry == NULL) + { + bfd_set_error (bfd_error_no_memory); + return -1; + } + + if (entry->symbol) /* FIXME: DEC C generates this */ + { +#if VMS_DEBUG + vms_debug (4, "EGSD_S_C_SYMG: duplicate \"%s\"\n", symbol->name); +#endif + } + else + { + entry->symbol = symbol; + PRIV (gsd_sym_count)++; + abfd->symcount++; + } + + return 0; +} + +/* Set section VMS flags. */ + +void +bfd_vms_set_section_flags (bfd *abfd ATTRIBUTE_UNUSED, + asection *sec, flagword flags) +{ + vms_section_data (sec)->vflags = flags; +} /* Write section and symbol directory of bfd abfd. */ @@ -705,6 +852,7 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) char dummy_name[10]; char *sname; flagword new_flags, old_flags; + int abs_section_index = 0; #if VMS_DEBUG vms_debug (2, "vms_write_gsd (%p, %d)\n", abfd, objtype); @@ -730,6 +878,11 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) vms_debug (3, "Section #%d %s, %d bytes\n", section->index, section->name, (int)section->size); #endif + /* Don't write out the VMS debug info section since it is in the + ETBT and EDBG sections in etir. */ + if (!strcmp (section->name, ".vmsdebug")) + goto done; + /* 13 bytes egsd, max 31 chars name -> should be 44 bytes. */ if (_bfd_vms_output_check (abfd, 64) < 0) { @@ -775,6 +928,11 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) sname = EVAX_READONLY_NAME; else if ((*sname == 'l') && (strcmp (sname, "literal") == 0)) sname = EVAX_LITERAL_NAME; + else if ((*sname == 'l') && (strcmp (sname, "literals") == 0)) + { + sname = EVAX_LITERALS_NAME; + abs_section_index = section->index; + } else if ((*sname == 'c') && (strcmp (sname, "comm") == 0)) sname = EVAX_COMMON_NAME; else if ((*sname == 'l') && (strcmp (sname, "lcomm") == 0)) @@ -785,18 +943,34 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) _bfd_vms_output_begin (abfd, EGSD_S_C_PSC, -1); _bfd_vms_output_short (abfd, section->alignment_power & 0xff); + if (bfd_is_com_section (section)) - new_flags = (EGPS_S_V_OVR | EGPS_S_V_REL | EGPS_S_V_GBL | EGPS_S_V_RD | EGPS_S_V_WRT | EGPS_S_V_NOMOD | EGPS_S_V_COM); + new_flags = (EGPS_S_V_OVR | EGPS_S_V_REL | EGPS_S_V_GBL | EGPS_S_V_RD + | EGPS_S_V_WRT | EGPS_S_V_NOMOD | EGPS_S_V_COM); else new_flags = vms_esecflag_by_name (evax_section_flags, sname, section->size > 0); + /* Modify them as directed. */ + if (section->flags & SEC_READONLY) + new_flags &= ~EGPS_S_V_WRT; + + new_flags |= vms_section_data (section)->vflags & 0xffff; + new_flags &= + ~((vms_section_data (section)->vflags >> EGPS_S_V_NO_SHIFT) & 0xffff); + +#if VMS_DEBUG + vms_debug (3, "sec flags %x\n", section->flags); + vms_debug (3, "new_flags %x, _raw_size %d\n", new_flags, section->size); +#endif + _bfd_vms_output_short (abfd, new_flags); _bfd_vms_output_long (abfd, (unsigned long) section->size); _bfd_vms_output_counted (abfd, sname); _bfd_vms_output_flush (abfd); last_index = section->index; +done: section = section->next; } @@ -822,9 +996,11 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) if (old_flags & BSF_FILE) continue; - if (((old_flags & (BSF_GLOBAL | BSF_WEAK)) == 0) /* Not xdef... */ - && (!bfd_is_und_section (symbol->section))) /* ...and not xref. */ - continue; /* Dont output. */ + if ((old_flags & BSF_GLOBAL) == 0 /* Not xdef... */ + && !bfd_is_und_section (symbol->section) /* and not xref... */ + && !((old_flags & BSF_SECTION_SYM) != 0 /* and not LIB$INITIALIZE. */ + && strcmp (symbol->section->name, "LIB$INITIALIZE") == 0)) + continue; /* 13 bytes egsd, max 64 chars name -> should be 77 bytes. */ if (_bfd_vms_output_check (abfd, 80) < 0) @@ -846,7 +1022,7 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) if (old_flags & BSF_WEAK) new_flags |= EGSY_S_V_WEAK; - if (bfd_is_com_section (symbol->section)) + if (bfd_is_com_section (symbol->section)) /* .comm */ new_flags |= (EGSY_S_V_WEAK | EGSY_S_V_COMM); if (old_flags & BSF_FUNCTION) @@ -854,7 +1030,7 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) new_flags |= EGSY_S_V_NORM; new_flags |= EGSY_S_V_REL; } - if (old_flags & (BSF_GLOBAL | BSF_WEAK)) + if (old_flags & BSF_GLOBAL) { new_flags |= EGSY_S_V_DEF; if (!bfd_is_abs_section (symbol->section)) @@ -862,7 +1038,7 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) } _bfd_vms_output_short (abfd, new_flags); - if (old_flags & (BSF_GLOBAL | BSF_WEAK)) + if (old_flags & BSF_GLOBAL) { /* Symbol definition. */ uquad code_address = 0; @@ -871,10 +1047,19 @@ _bfd_vms_write_gsd (bfd *abfd, int objtype ATTRIBUTE_UNUSED) if ((old_flags & BSF_FUNCTION) && symbol->udata.p != NULL) { - code_address = ((asymbol *) (symbol->udata.p))->value; - ca_psindx = ((asymbol *) (symbol->udata.p))->section->index; + asymbol *sym; + + if (bfd_get_flavour (abfd) == bfd_target_evax_flavour) + sym = ((struct evax_private_udata_struct *)symbol->udata.p)->enbsym; + else + sym = (asymbol *)symbol->udata.p; + code_address = sym->value; + ca_psindx = sym->section->index; } - psindx = symbol->section->index; + if (bfd_is_abs_section (symbol->section)) + psindx = abs_section_index; + else + psindx = symbol->section->index; _bfd_vms_output_quad (abfd, symbol->value); _bfd_vms_output_quad (abfd, code_address); diff --git a/bfd/vms-hdr.c b/bfd/vms-hdr.c index 8e34bee..8c10df6 100644 --- a/bfd/vms-hdr.c +++ b/bfd/vms-hdr.c @@ -1,14 +1,31 @@ /* 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, 2006, - 2007 Free Software Foundation, Inc. + 2007, 2008, 2009 Free Software Foundation, Inc. HDR record handling functions EMH record handling functions - and + EOM record handling functions EEOM record handling functions + IHD record handling functions + EIHD record handling functions + + ISD record handling functions + EISD record handling functions + + IHS record handling functions + EIHS record handling functions + + DBG record handling functions + EDBG record handling functions + + TBT record handling functions + ETBT record handling functions + + DST/DMT section handling functions + Written by Klaus K"ampf (kkaempf@rmi.de) This program is free software; you can redistribute it and/or modify @@ -35,9 +52,19 @@ #include "vms.h" -#ifdef HAVE_ALLOCA_H -#include -#endif +static struct module *new_module (bfd *); +static void parse_module + (bfd *, struct module *, unsigned char *, unsigned int); +static struct module *build_module_list (bfd *); +static bfd_boolean module_find_nearest_line + (bfd *, struct module *, bfd_vma, const char **, const char **, + unsigned int *); +static int vms_slurp_debug (bfd *); + +#define SET_MODULE_PARSED(m) \ + do { if ((m)->name == NULL) (m)->name = ""; } while (0) +#define IS_MODULE_PARSED(m) ((m)->name != NULL) + /* Read & process emh record return 0 on success, -1 on error. */ @@ -85,15 +112,15 @@ _bfd_vms_slurp_hdr (bfd *abfd, int objtype) break; case MHD_S_C_LNM: - PRIV (hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 2)); + PRIV (hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_size - 2)); break; case MHD_S_C_SRC: - PRIV (hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 2)); + PRIV (hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_size - 2)); break; case MHD_S_C_TTL: - PRIV (hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 2)); + PRIV (hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_size - 2)); break; case EMH_S_C_MHD + EVAX_OFFSET: @@ -110,15 +137,15 @@ _bfd_vms_slurp_hdr (bfd *abfd, int objtype) break; case EMH_S_C_LNM + EVAX_OFFSET: - PRIV (hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 6)); + PRIV (hdr_data).hdr_c_lnm = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_size - 6)); break; case EMH_S_C_SRC + EVAX_OFFSET: - PRIV (hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 6)); + PRIV (hdr_data).hdr_c_src = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_size - 6)); break; case EMH_S_C_TTL + EVAX_OFFSET: - PRIV (hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_length - 6)); + PRIV (hdr_data).hdr_c_ttl = _bfd_vms_save_sized_string (vms_rec, PRIV (rec_size - 6)); break; case MHD_S_C_CPR: @@ -189,6 +216,7 @@ _bfd_vms_write_hdr (bfd *abfd, int objtype) unsigned int symnum; int had_case = 0; int had_file = 0; + char version [256]; #if VMS_DEBUG vms_debug (2, "vms_write_hdr (%p)\n", abfd); @@ -212,44 +240,52 @@ _bfd_vms_write_hdr (bfd *abfd, int objtype) char *fname, *fout, *fptr; fptr = bfd_get_filename (abfd); - fname = alloca (strlen (fptr) + 1); - strcpy (fname, fptr); + fname = strdup (fptr); + + /* Strip VMS path. */ fout = strrchr (fname, ']'); - if (fout == 0) + if (fout == NULL) fout = strchr (fname, ':'); - if (fout != 0) + if (fout != NULL) fout++; else fout = fname; + /* Strip UNIX path. */ + fptr = strrchr (fout, '/'); + if (fptr != NULL) + fout = fptr + 1; + /* Strip .obj suffix. */ - fptr = strrchr (fname, '.'); - if ((fptr != 0) - && (strcasecmp (fptr, ".OBJ") == 0)) + fptr = strrchr (fout, '.'); + if (fptr != 0 && strcasecmp (fptr, ".OBJ") == 0) *fptr = 0; + /* Convert to upper case and truncate at 31 characters. + (VMS object file format restricts module name length to 31). */ fptr = fout; while (*fptr != 0) { *fptr = TOUPPER (*fptr); fptr++; - if ((*fptr == ';') - || ((fptr - fout) > 31)) + if (*fptr == ';' || (fptr - fout) >= 31) *fptr = 0; } _bfd_vms_output_counted (abfd, fout); + free (fname); } else _bfd_vms_output_counted (abfd, "NONAME"); _bfd_vms_output_counted (abfd, BFD_VERSION_STRING); - _bfd_vms_output_dump (abfd, get_vms_time_string (), 17); - _bfd_vms_output_fill (abfd, 0, 17); + _bfd_vms_output_dump (abfd, get_vms_time_string (), EMH_DATE_LENGTH); + _bfd_vms_output_fill (abfd, 0, EMH_DATE_LENGTH); _bfd_vms_output_flush (abfd); /* LMN. */ _bfd_vms_output_begin (abfd, EOBJ_S_C_EMH, EMH_S_C_LNM); - _bfd_vms_output_dump (abfd, (unsigned char *) STRING_COMMA_LEN ("GAS proGIS")); + snprintf (version, sizeof (version), "GAS BFD v%s", BFD_VERSION_STRING); + _bfd_vms_output_dump (abfd, (unsigned char *)version, strlen (version)); _bfd_vms_output_flush (abfd); /* SRC. */ @@ -320,10 +356,10 @@ _bfd_vms_slurp_eom (bfd *abfd, int objtype) } else { - PRIV (eom_data).eom_l_total_lps = bfd_getl32 (vms_rec + 4); - PRIV (eom_data).eom_b_comcod = *(vms_rec + 8); - - if (PRIV (eom_data).eom_b_comcod > 1) + PRIV (eom_data).eom_l_total_lps + = bfd_getl32 (vms_rec + EEOM_S_L_TOTAL_LPS); + PRIV (eom_data).eom_w_comcod = bfd_getl16 (vms_rec + EEOM_S_W_COMCOD); + if (PRIV (eom_data).eom_w_comcod > 1) { (*_bfd_error_handler) (_("Object module NOT error-free !\n")); bfd_set_error (bfd_error_bad_value); @@ -333,9 +369,11 @@ _bfd_vms_slurp_eom (bfd *abfd, int objtype) if (PRIV (rec_size) > 10) { PRIV (eom_data).eom_has_transfer = TRUE; - PRIV (eom_data).eom_b_tfrflg = *(vms_rec + 9); - PRIV (eom_data).eom_l_psindx = bfd_getl32 (vms_rec + 12); - PRIV (eom_data).eom_l_tfradr = bfd_getl32 (vms_rec + 16); + PRIV (eom_data).eom_b_tfrflg = vms_rec[EEOM_S_B_TFRFLG]; + PRIV (eom_data).eom_l_psindx + = bfd_getl32 (vms_rec + EEOM_S_L_PSINDX); + PRIV (eom_data).eom_l_tfradr + = bfd_getl32 (vms_rec + EEOM_S_L_TFRADR); abfd->start_address = PRIV (eom_data).eom_l_tfradr; } @@ -377,3 +415,1001 @@ _bfd_vms_write_eom (bfd *abfd, int objtype) _bfd_vms_output_end (abfd); return 0; } + +/* Read & process IHD/EIHD record. + Return 0 on success, -1 on error */ +int +_bfd_vms_slurp_ihd (bfd *abfd, unsigned int *isd_offset, + unsigned int *ihs_offset) +{ + unsigned int imgtype, size; + bfd_vma symvva; + +#if VMS_DEBUG + vms_debug (8, "_bfd_vms_slurp_ihd\n"); +#endif + + size = bfd_getl32 (PRIV (vms_rec) + EIHD_S_L_SIZE); + imgtype = bfd_getl32 (PRIV (vms_rec) + EIHD_S_L_IMGTYPE); + + if (imgtype == EIHD_S_K_EXE) + abfd->flags |= EXEC_P; + + symvva = bfd_getl64 (PRIV (vms_rec) + EIHD_S_Q_SYMVVA); + if (symvva != 0) + { + PRIV (symvva) = symvva; + abfd->flags |= DYNAMIC; + } + + *isd_offset = bfd_getl32 (PRIV (vms_rec) + EIHD_S_L_ISDOFF); + *ihs_offset = bfd_getl32 (PRIV (vms_rec) + EIHD_S_L_SYMDBGOFF); + +#if VMS_DEBUG + vms_debug (4, "EIHD record size %d imgtype %d symvva 0x%llx isd %d ihs %d\n", + size, imgtype, symvva, *isd_offset, *ihs_offset); +#endif + + return 0; +} + +/* Read & process ISD/EISD record + return 0 on success, -1 on error */ + +int +_bfd_vms_slurp_isd (bfd *abfd, unsigned int offset) +{ + int section_count = 0; + unsigned char *p; + unsigned int rec_size; + +#if VMS_DEBUG + vms_debug (8, "_bfd_vms_slurp_isd\n"); +#endif + + for (p = PRIV (vms_rec) + offset; + (rec_size = bfd_getl32 (p + EISD_S_L_EISDSIZE)) != 0; + p += rec_size) + { + unsigned long long vaddr = bfd_getl64 (p + EISD_S_Q_VIR_ADDR); + unsigned int size = bfd_getl32 (p + EISD_S_L_SECSIZE); + unsigned int flags = bfd_getl32 (p + EISD_S_L_FLAGS); + unsigned int vbn = bfd_getl32 (p + EISD_S_L_VBN); + char *name = NULL; + asection *section; + flagword bfd_flags; + +#if VMS_DEBUG + vms_debug (4, "EISD record at 0x%x size 0x%x addr 0x%x bfd_flags 0x%x block %d\n", + p - PRIV (vms_rec), size, vaddr, flags, vbn); +#endif + + /* VMS combines psects from .obj files into isects in the .exe. This + process doesn't preserve enough information to reliably determine + what's in each section without examining the data. This is + especially true of DWARF debug sections. */ + bfd_flags = SEC_ALLOC; + + if (flags & EISD_S_M_EXE) + bfd_flags |= SEC_CODE | SEC_HAS_CONTENTS | SEC_LOAD; + + if (flags & EISD_S_M_NONSHRADR) + bfd_flags |= SEC_DATA | SEC_HAS_CONTENTS | SEC_LOAD; + + if (!(flags & EISD_S_M_WRT)) + bfd_flags |= SEC_READONLY; + + if (flags & EISD_S_M_DZRO) + bfd_flags |= SEC_DATA; + + if (flags & EISD_S_M_FIXUPVEC) + bfd_flags |= SEC_DATA | SEC_HAS_CONTENTS | SEC_LOAD; + + if (flags & EISD_S_M_CRF) + bfd_flags |= SEC_HAS_CONTENTS | SEC_LOAD; + + if (flags & EISD_S_M_GBL) + { + name = _bfd_vms_save_counted_string (p + EISD_S_T_GBLNAM); + bfd_flags |= SEC_COFF_SHARED_LIBRARY; + bfd_flags &= ~(SEC_ALLOC | SEC_LOAD); + } + else + { + name = (char*) bfd_alloc (abfd, 32); + sprintf (name, "$LOCAL_%03d$", section_count++); + } + + section = bfd_make_section (abfd, name); + + if (!section) + return -1; + + section->filepos = vbn ? VMS_BLOCK_SIZE * (vbn - 1) : (unsigned int)-1; + section->size = size; + section->vma = vaddr; + + if (!bfd_set_section_flags (abfd, section, bfd_flags)) + return -1; + } + + return 0; +} + +/* Read & process IHS/EIHS record + return 0 on success, -1 on error */ +int +_bfd_vms_slurp_ihs (bfd *abfd, unsigned int offset) +{ + unsigned char *p = PRIV (vms_rec) + offset; + unsigned int gstvbn = bfd_getl32 (p + EIHS_S_L_GSTVBN); + unsigned int gstsize ATTRIBUTE_UNUSED = bfd_getl32 (p + EIHS_S_L_GSTSIZE); + unsigned int dstvbn = bfd_getl32 (p + EIHS_S_L_DSTVBN); + unsigned int dstsize = bfd_getl32 (p + EIHS_S_L_DSTSIZE); + unsigned int dmtvbn = bfd_getl32 (p + EIHS_S_L_DMTVBN); + unsigned int dmtbytes = bfd_getl32 (p + EIHS_S_L_DMTBYTES); + asection *section; + +#if VMS_DEBUG + vms_debug (8, "_bfd_vms_slurp_ihs\n"); + vms_debug (4, "EIHS record gstvbn %d gstsize %d dstvbn %d dstsize %d dmtvbn %d dmtbytes %d\n", + gstvbn, gstsize, dstvbn, dstsize, dmtvbn, dmtbytes); +#endif + + if (dstvbn) + { + flagword bfd_flags = SEC_HAS_CONTENTS | SEC_DEBUGGING; + + section = bfd_make_section (abfd, "$DST$"); + if (!section) + return -1; + + section->size = dstsize; + section->filepos = VMS_BLOCK_SIZE * (dstvbn - 1); + + if (!bfd_set_section_flags (abfd, section, bfd_flags)) + return -1; + + PRIV (dst_section) = section; + abfd->flags |= (HAS_DEBUG | HAS_LINENO); + } + + if (dmtvbn) + { + flagword bfd_flags = SEC_HAS_CONTENTS | SEC_DEBUGGING; + + section = bfd_make_section (abfd, "$DMT$"); + if (!section) + return -1; + + section->size = dmtbytes; + section->filepos = VMS_BLOCK_SIZE * (dmtvbn - 1); + + if (!bfd_set_section_flags (abfd, section, bfd_flags)) + return -1; + } + + if (gstvbn) + { + flagword bfd_flags = SEC_HAS_CONTENTS; + + section = bfd_make_section (abfd, "$GST$"); + if (!section) + return -1; + + if (bfd_seek (abfd, VMS_BLOCK_SIZE * (gstvbn - 1), SEEK_SET)) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } + + if (_bfd_vms_slurp_object_records (abfd) != 0) + return -1; + + section->filepos = VMS_BLOCK_SIZE * (gstvbn - 1); + section->size = bfd_tell (abfd) - section->filepos; + + if (!bfd_set_section_flags (abfd, section, bfd_flags)) + return -1; + + abfd->flags |= HAS_SYMS; + } + + return 0; +} + +/* Build a new module for the specified BFD. */ + +static struct module * +new_module (bfd *abfd) +{ + struct module *module + = (struct module *) bfd_zalloc (abfd, sizeof (struct module)); + module->file_table_count = 16; /* Arbitrary. */ + module->file_table + = bfd_malloc (module->file_table_count * sizeof (struct fileinfo)); + return module; +} + +/* Parse debug info for a module and internalize it. */ + +static void +parse_module (bfd *abfd, struct module *module, unsigned char *ptr, + unsigned int length) +{ + unsigned char *maxptr = ptr + length, *src_ptr, *pcl_ptr; + unsigned int prev_linum = 0, curr_linenum = 0; + bfd_vma prev_pc = 0, curr_pc = 0; + struct srecinfo *curr_srec, *srec; + struct lineinfo *curr_line, *line; + struct funcinfo *funcinfo; + + /* Initialize tables with zero element. */ + curr_srec = (struct srecinfo *) bfd_zalloc (abfd, sizeof (struct srecinfo)); + module->srec_table = curr_srec; + + curr_line = (struct lineinfo *) bfd_zalloc (abfd, sizeof (struct lineinfo)); + module->line_table = curr_line; + + while (ptr < maxptr) + { + /* The first byte is not counted in the recorded length. */ + int rec_length = bfd_getl16 (ptr) + 1; + int rec_type = bfd_getl16 (ptr + 2); + +#if VMS_DEBUG + _bfd_vms_debug (2, "DST record: length %d, type %d\n", + rec_length, rec_type); +#endif + + switch (rec_type) + { + case DST_S_C_MODBEG: + module->name + = _bfd_vms_save_counted_string (ptr + DST_S_B_MODBEG_NAME); + + curr_pc = 0; + prev_pc = 0; + curr_linenum = 0; + prev_linum = 0; + +#if VMS_DEBUG + _bfd_vms_debug (3, "module: %s\n", module->name); +#endif + break; + + case DST_S_C_MODEND: +#if VMS_DEBUG + _bfd_vms_debug (3, "end module\n"); +#endif + break; + + case DST_S_C_RTNBEG: + funcinfo = (struct funcinfo *) + bfd_zalloc (abfd, sizeof (struct funcinfo)); + funcinfo->name + = _bfd_vms_save_counted_string (ptr + DST_S_B_RTNBEG_NAME); + funcinfo->low = bfd_getl32 (ptr + DST_S_L_RTNBEG_ADDRESS); + funcinfo->next = module->func_table; + module->func_table = funcinfo; + +#if VMS_DEBUG + _bfd_vms_debug (3, "routine: %s at 0x%x\n", + funcinfo->name, funcinfo->low); +#endif + break; + + case DST_S_C_RTNEND: + module->func_table->high = module->func_table->low + + bfd_getl32 (ptr + DST_S_L_RTNEND_SIZE) - 1; + + if (module->func_table->high > module->high) + module->high = module->func_table->high; + +#if VMS_DEBUG + _bfd_vms_debug (3, "end routine\n"); +#endif + break; + + case DST_S_C_PROLOG: +#if VMS_DEBUG + _bfd_vms_debug (3, "prologue\n"); +#endif + break; + + case DST_S_C_EPILOG: +#if VMS_DEBUG + _bfd_vms_debug (3, "epilog\n"); +#endif + break; + + case DST_S_C_BLKBEG: +#if VMS_DEBUG + _bfd_vms_debug (3, "block\n"); +#endif + break; + + case DST_S_C_BLKEND: +#if VMS_DEBUG + _bfd_vms_debug (3, "end block\n"); +#endif + break; + + case DST_S_C_SOURCE: + src_ptr = ptr + DST_S_C_SOURCE_HEADER_SIZE; + +#if VMS_DEBUG + _bfd_vms_debug (3, "source info\n"); +#endif + + while (src_ptr < ptr + rec_length) + { + int cmd = src_ptr[0], cmd_length, data; + + switch (cmd) + { + case DST_S_C_SRC_DECLFILE: + { + unsigned int fileid + = bfd_getl16 (src_ptr + DST_S_W_SRC_DF_FILEID); + char *filename + = _bfd_vms_save_counted_string (src_ptr + + DST_S_B_SRC_DF_FILENAME); + + while (fileid >= module->file_table_count) + { + module->file_table_count *= 2; + module->file_table + = bfd_realloc (module->file_table, + module->file_table_count + * sizeof (struct fileinfo)); + } + + module->file_table [fileid].name = filename; + module->file_table [fileid].srec = 1; + cmd_length = src_ptr[DST_S_B_SRC_DF_LENGTH] + 2; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_DECLFILE: %d, %s\n", + fileid, + module->file_table [fileid].name); +#endif + } + break; + + case DST_S_C_SRC_DEFLINES_B: + /* Perform the association and set the next higher index + to the limit. */ + data = src_ptr[DST_S_B_SRC_UNSBYTE]; + srec = (struct srecinfo *) + bfd_zalloc (abfd, sizeof (struct srecinfo)); + srec->line = curr_srec->line + data; + srec->srec = curr_srec->srec + data; + srec->sfile = curr_srec->sfile; + curr_srec->next = srec; + curr_srec = srec; + cmd_length = 2; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_DEFLINES_B: %d\n", data); +#endif + break; + + case DST_S_C_SRC_DEFLINES_W: + /* Perform the association and set the next higher index + to the limit. */ + data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD); + srec = (struct srecinfo *) + bfd_zalloc (abfd, sizeof (struct srecinfo)); + srec->line = curr_srec->line + data; + srec->srec = curr_srec->srec + data, + srec->sfile = curr_srec->sfile; + curr_srec->next = srec; + curr_srec = srec; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_DEFLINES_W: %d\n", data); +#endif + break; + + case DST_S_C_SRC_INCRLNUM_B: + data = src_ptr[DST_S_B_SRC_UNSBYTE]; + curr_srec->line += data; + cmd_length = 2; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_INCRLNUM_B: %d\n", data); +#endif + break; + + case DST_S_C_SRC_SETFILE: + data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD); + curr_srec->sfile = data; + curr_srec->srec = module->file_table[data].srec; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_SETFILE: %d\n", data); +#endif + break; + + case DST_S_C_SRC_SETLNUM_L: + data = bfd_getl32 (src_ptr + DST_S_L_SRC_UNSLONG); + curr_srec->line = data; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_SETLNUM_L: %d\n", data); +#endif + break; + + case DST_S_C_SRC_SETLNUM_W: + data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD); + curr_srec->line = data; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_SETLNUM_W: %d\n", data); +#endif + break; + + case DST_S_C_SRC_SETREC_L: + data = bfd_getl32 (src_ptr + DST_S_L_SRC_UNSLONG); + curr_srec->srec = data; + module->file_table[curr_srec->sfile].srec = data; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_SETREC_L: %d\n", data); +#endif + break; + + case DST_S_C_SRC_SETREC_W: + data = bfd_getl16 (src_ptr + DST_S_W_SRC_UNSWORD); + curr_srec->srec = data; + module->file_table[curr_srec->sfile].srec = data; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_SETREC_W: %d\n", data); +#endif + break; + + case DST_S_C_SRC_FORMFEED: + cmd_length = 1; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SRC_FORMFEED\n"); +#endif + break; + + default: + (*_bfd_error_handler) (_("unknown source command %d"), + cmd); + cmd_length = 2; + break; + } + + src_ptr += cmd_length; + } + break; + + case DST_S_C_LINE_NUM: + pcl_ptr = ptr + DST_S_C_LINE_NUM_HEADER_SIZE; + +#if VMS_DEBUG + _bfd_vms_debug (3, "line info\n"); +#endif + + while (pcl_ptr < ptr + rec_length) + { + /* The command byte is signed so we must sign-extend it. */ + int cmd = ((signed char *)pcl_ptr)[0], cmd_length, data; + + switch (cmd) + { + case DST_S_C_DELTA_PC_W: + data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD); + curr_pc += data; + curr_linenum += 1; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_DELTA_PC_W: %d\n", data); +#endif + break; + + case DST_S_C_DELTA_PC_L: + data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG); + curr_pc += data; + curr_linenum += 1; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_DELTA_PC_L: %d\n", data); +#endif + break; + + case DST_S_C_INCR_LINUM: + data = pcl_ptr[DST_S_B_PCLINE_UNSBYTE]; + curr_linenum += data; + cmd_length = 2; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_INCR_LINUM: %d\n", data); +#endif + break; + + case DST_S_C_INCR_LINUM_W: + data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD); + curr_linenum += data; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_INCR_LINUM_W: %d\n", data); +#endif + break; + + case DST_S_C_INCR_LINUM_L: + data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG); + curr_linenum += data; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_INCR_LINUM_L: %d\n", data); +#endif + break; + + case DST_S_C_SET_LINUM_INCR: + (*_bfd_error_handler) + (_("DST_S_C_SET_LINUM_INCR not implemented")); + cmd_length = 2; + break; + + case DST_S_C_SET_LINUM_INCR_W: + (*_bfd_error_handler) + (_("DST_S_C_SET_LINUM_INCR_W not implemented")); + cmd_length = 3; + break; + + case DST_S_C_RESET_LINUM_INCR: + (*_bfd_error_handler) + (_("DST_S_C_RESET_LINUM_INCR not implemented")); + cmd_length = 1; + break; + + case DST_S_C_BEG_STMT_MODE: + (*_bfd_error_handler) + (_("DST_S_C_BEG_STMT_MODE not implemented")); + cmd_length = 1; + break; + + case DST_S_C_END_STMT_MODE: + (*_bfd_error_handler) + (_("DST_S_C_END_STMT_MODE not implemented")); + cmd_length = 1; + break; + + case DST_S_C_SET_LINUM_B: + data = pcl_ptr[DST_S_B_PCLINE_UNSBYTE]; + curr_linenum = data; + cmd_length = 2; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SET_LINUM_B: %d\n", data); +#endif + break; + + case DST_S_C_SET_LINE_NUM: + data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD); + curr_linenum = data; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SET_LINE_NUM: %d\n", data); +#endif + break; + + case DST_S_C_SET_LINUM_L: + data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG); + curr_linenum = data; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SET_LINUM_L: %d\n", data); +#endif + break; + + case DST_S_C_SET_PC: + (*_bfd_error_handler) + (_("DST_S_C_SET_PC not implemented")); + cmd_length = 2; + break; + + case DST_S_C_SET_PC_W: + (*_bfd_error_handler) + (_("DST_S_C_SET_PC_W not implemented")); + cmd_length = 3; + break; + + case DST_S_C_SET_PC_L: + (*_bfd_error_handler) + (_("DST_S_C_SET_PC_L not implemented")); + cmd_length = 5; + break; + + case DST_S_C_SET_STMTNUM: + (*_bfd_error_handler) + (_("DST_S_C_SET_STMTNUM not implemented")); + cmd_length = 2; + break; + + case DST_S_C_TERM: + data = pcl_ptr[DST_S_B_PCLINE_UNSBYTE]; + curr_pc += data; + cmd_length = 2; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_TERM: %d\n", data); +#endif + break; + + case DST_S_C_TERM_W: + data = bfd_getl16 (pcl_ptr + DST_S_W_PCLINE_UNSWORD); + curr_pc += data; + cmd_length = 3; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_TERM_W: %d\n", data); +#endif + break; + + case DST_S_C_TERM_L: + data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG); + curr_pc += data; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_TERM_L: %d\n", data); +#endif + break; + + case DST_S_C_SET_ABS_PC: + data = bfd_getl32 (pcl_ptr + DST_S_L_PCLINE_UNSLONG); + curr_pc = data; + cmd_length = 5; +#if VMS_DEBUG + _bfd_vms_debug (4, "DST_S_C_SET_ABS_PC: 0x%x\n", data); +#endif + break; + + default: + if (cmd <= 0) + { + curr_pc -= cmd; + curr_linenum += 1; + cmd_length = 1; +#if VMS_DEBUG + _bfd_vms_debug (4, "bump pc to 0x%llx and line to %d\n", + curr_pc, curr_linenum); +#endif + } + else + { + (*_bfd_error_handler) (_("unknown line command %d"), + cmd); + cmd_length = 2; + } + break; + } + + if ((curr_linenum != prev_linum && curr_pc != prev_pc) + || cmd <= 0 + || cmd == DST_S_C_DELTA_PC_L + || cmd == DST_S_C_DELTA_PC_W) + { + line = (struct lineinfo *) + bfd_zalloc (abfd, sizeof (struct lineinfo)); + line->address = curr_pc; + line->line = curr_linenum; + + curr_line->next = line; + curr_line = line; + + prev_linum = curr_linenum; + prev_pc = curr_pc; +#if VMS_DEBUG + _bfd_vms_debug (4, "-> correlate pc 0x%llx with line %d\n", + curr_pc, curr_linenum); +#endif + } + + pcl_ptr += cmd_length; + } + break; + + case 0x17: /* Undocumented type used by DEC C to declare equates. */ +#if VMS_DEBUG + _bfd_vms_debug (3, "undocumented type 0x17\n"); +#endif + break; + + default: +#if VMS_DEBUG + _bfd_vms_debug (3, "ignoring record\n"); +#endif + break; + + } + + ptr += rec_length; + } + + /* Finalize tables with EOL marker. */ + srec = (struct srecinfo *) bfd_zalloc (abfd, sizeof (struct srecinfo)); + srec->line = (unsigned int) -1; + srec->srec = (unsigned int) -1; + curr_srec->next = srec; + + line = (struct lineinfo *) bfd_zalloc (abfd, sizeof (struct lineinfo)); + line->line = (unsigned int) -1; + line->address = (bfd_vma) -1; + curr_line->next = line; + + /* Advertise that this module has been parsed. This is needed + because parsing can be either performed at module creation + or deferred until debug info is consumed. */ + SET_MODULE_PARSED (module); +} + +/* Build the list of modules for the specified BFD. */ + +static struct module * +build_module_list (bfd *abfd) +{ + struct module *module, *list = NULL; + asection *dmt; + + if ((dmt = bfd_get_section_by_name (abfd, "$DMT$"))) + { + /* We have a DMT section so this must be an image. Parse the + section and build the list of modules. This is sufficient + since we can compute the start address and the end address + of every module from the section contents. */ + bfd_size_type size = bfd_get_section_size (dmt); + unsigned char *ptr, *end; + + ptr = (unsigned char *) bfd_alloc (abfd, size); + if (! ptr) + return NULL; + + if (! bfd_get_section_contents (abfd, dmt, ptr, 0, size)) + return NULL; + +#if VMS_DEBUG + _bfd_vms_debug (2, "DMT\n"); +#endif + + end = ptr + size; + + while (ptr < end) + { + /* Each header declares a module with its start offset and size + of debug info in the DST section, as well as the count of + program sections (i.e. address spans) it contains. */ + int modbeg = bfd_getl32 (ptr + DBG_S_L_DMT_MODBEG); + int size = bfd_getl32 (ptr + DBG_S_L_DST_SIZE); + int count = bfd_getl16 (ptr + DBG_S_W_DMT_PSECT_COUNT); + ptr += DBG_S_C_DMT_HEADER_SIZE; + +#if VMS_DEBUG + _bfd_vms_debug (3, "module: modbeg = %d, size = %d, count = %d\n", + modbeg, size, count); +#endif + + /* We create a 'module' structure for each program section since + we only support contiguous addresses in a 'module' structure. + As a consequence, the actual debug info in the DST section is + shared and can be parsed multiple times; that doesn't seem to + cause problems in practice. */ + while (count-- > 0) + { + int start = bfd_getl32 (ptr + DBG_S_L_DMT_PSECT_START); + int length = bfd_getl32 (ptr + DBG_S_L_DMT_PSECT_LENGTH); + module = new_module (abfd); + module->modbeg = modbeg; + module->size = size; + module->low = start; + module->high = start + length; + module->next = list; + list = module; + ptr += DBG_S_C_DMT_PSECT_SIZE; + +#if VMS_DEBUG + _bfd_vms_debug (4, "section: start = 0x%x, length = %d\n", + start, length); +#endif + } + } + } + else + { + /* We don't have a DMT section so this must be an object. Parse + the module right now in order to compute its start address and + end address. */ + module = new_module (abfd); + parse_module (abfd, module, PRIV (dst_section)->contents, + PRIV (dst_ptr_end) - PRIV (dst_section)->contents); + list = module; + } + + return list; +} + +/* Calculate and return the name of the source file and the line nearest + to the wanted location in the specified module. */ + +static bfd_boolean +module_find_nearest_line (bfd *abfd, struct module *module, bfd_vma addr, + const char **file, const char **func, + unsigned int *line) +{ + struct funcinfo *funcinfo; + struct lineinfo *lineinfo; + struct srecinfo *srecinfo; + bfd_boolean ret = FALSE; + + /* Parse this module if that was not done at module creation. */ + if (! IS_MODULE_PARSED (module)) + { + unsigned int size = module->size; + unsigned int modbeg = PRIV (dst_section)->filepos + module->modbeg; + unsigned char *buffer = (unsigned char *) bfd_malloc (module->size); + + if (bfd_seek (abfd, modbeg, SEEK_SET) != 0 + || bfd_bread (buffer, size, abfd) != size) + { + bfd_set_error (bfd_error_no_debug_section); + return FALSE; + } + + parse_module (abfd, module, buffer, size); + free (buffer); + } + + /* Find out the function (if any) that contains the address. */ + for (funcinfo = module->func_table; funcinfo; funcinfo = funcinfo->next) + if (addr >= funcinfo->low && addr <= funcinfo->high) + { + *func = funcinfo->name; + ret = TRUE; + break; + } + + /* Find out the source file and the line nearest to the address. */ + for (lineinfo = module->line_table; lineinfo; lineinfo = lineinfo->next) + if (lineinfo->next && addr < lineinfo->next->address) + { + for (srecinfo = module->srec_table; srecinfo; srecinfo = srecinfo->next) + if (srecinfo->next && lineinfo->line < srecinfo->next->line) + { + if (srecinfo->sfile > 0) + { + *file = module->file_table[srecinfo->sfile].name; + *line = srecinfo->srec + lineinfo->line - srecinfo->line; + } + else + { + *file = module->name; + *line = lineinfo->line; + } + return TRUE; + } + + break; + } + + return ret; +} + +/* Provided a BFD, a section and an offset into the section, calculate and + return the name of the source file and the line nearest to the wanted + location. */ + +bfd_boolean +_bfd_vms_find_nearest_dst_line (bfd *abfd, asection *section, + asymbol **symbols ATTRIBUTE_UNUSED, + bfd_vma offset, const char **file, + const char **func, unsigned int *line) +{ + struct module *module; + + /* What address are we looking for? */ + bfd_vma addr = section->vma + offset; + + *file = NULL; + *func = NULL; + *line = 0; + + if (PRIV (dst_section) == NULL) + return FALSE; + + if (PRIV (modules) == NULL) + { + PRIV (modules) = build_module_list (abfd); + if (PRIV (modules) == NULL) + return FALSE; + } + + for (module = PRIV (modules); module; module = module->next) + if (addr >= module->low && addr <= module->high) + return module_find_nearest_line (abfd, module, addr, file, func, line); + + return FALSE; +} + +/* Process EDBG/ETBT record. + Return 0 on success, -1 on error */ + +static int +vms_slurp_debug (bfd *abfd) +{ + if (PRIV (dst_section) == NULL) + { + /* We have no way to find out beforehand how much debug info there + is in an object file, so pick an initial amount and grow it as + needed later. */ + flagword flags = SEC_HAS_CONTENTS | SEC_DEBUGGING | SEC_RELOC; + asection *section = bfd_make_section (abfd, "$DST$"); + if (!section) + return -1; + section->size = 1024; + if (!bfd_set_section_flags (abfd, section, flags)) + return -1; + section->contents = ((unsigned char *) + bfd_zmalloc (section->size)); + if (section->contents == NULL) + return -1; + section->filepos = (unsigned int)-1; + PRIV (dst_section) = section; + } + + PRIV (image_section) = PRIV (dst_section); + PRIV (image_ptr) = PRIV (dst_section)->contents; + + return _bfd_vms_slurp_tir (abfd, EOBJ_S_C_ETIR); +} + +/* Process DBG/EDBG record. + Return 0 on success, -1 on error. */ + +int +_bfd_vms_slurp_dbg (bfd *abfd, int objtype ATTRIBUTE_UNUSED) +{ +#if VMS_DEBUG + _bfd_vms_debug (2, "DBG/EDBG\n"); +#endif + + abfd->flags |= (HAS_DEBUG | HAS_LINENO); + + return vms_slurp_debug (abfd); +} + +/* Process TBT/ETBT record. + Return 0 on success, -1 on error. */ + +int +_bfd_vms_slurp_tbt (bfd *abfd, int objtype ATTRIBUTE_UNUSED) +{ +#if VMS_DEBUG + _bfd_vms_debug (2, "TBT/ETBT\n"); +#endif + + abfd->flags |= HAS_LINENO; + + return vms_slurp_debug (abfd); +} + +/* Write DBG/EDBG record. */ + +int +_bfd_vms_write_dbg (bfd *abfd ATTRIBUTE_UNUSED, int objtype ATTRIBUTE_UNUSED) +{ +#if VMS_DEBUG + _bfd_vms_debug (2, "vms_write_dbg (%p, objtype)\n", abfd, objtype); +#endif + + return 0; +} + +/* Write TBT/ETBT record. */ + +int +_bfd_vms_write_tbt (bfd *abfd ATTRIBUTE_UNUSED, int objtype ATTRIBUTE_UNUSED) +{ +#if VMS_DEBUG + _bfd_vms_debug (2, "vms_write_tbt (%p, %d)\n", abfd, objtype); +#endif + + return 0; +} diff --git a/bfd/vms-misc.c b/bfd/vms-misc.c index 1492f14..2181658 100644 --- a/bfd/vms-misc.c +++ b/bfd/vms-misc.c @@ -1,7 +1,9 @@ -/* vms-misc.c -- Miscellaneous functions for VAX (openVMS/VAX) and +/* vms-misc.c -- BFD back-end for VMS/VAX (openVMS/VAX) and EVAX (openVMS/Alpha) files. Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2007 Free Software Foundation, Inc. + 2007, 2008, 2009 Free Software Foundation, Inc. + + Miscellaneous functions. Written by Klaus K"ampf (kkaempf@rmi.de) @@ -30,22 +32,29 @@ #include "libbfd.h" #include "vms.h" - + +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + +static int hash_string PARAMS ((const char *)); +static asymbol *new_symbol PARAMS ((bfd *, char *)); +static void maybe_adjust_record_pointer_for_object PARAMS ((bfd *)); +static int vms_get_remaining_object_record PARAMS ((bfd *, int )); +static int vms_get_remaining_image_record PARAMS ((bfd *, int )); + #if VMS_DEBUG /* Debug functions. */ -/* Debug function for all vms extensions - evaluates environment variable VMS_DEBUG for a - numerical value on the first call - all error levels below this value are printed +/* Debug function for all vms extensions evaluates environment + variable VMS_DEBUG for a numerical value on the first call all + error levels below this value are printed: - levels: + Levels: 1 toplevel bfd calls (functions from the bfd vector) 2 functions called by bfd calls ... 9 almost everything - level is also indentation level. Indentation is performed + Level is also indentation level. Indentation is performed if level > 0. */ void @@ -167,22 +176,23 @@ _bfd_vms_hash_newfunc (struct bfd_hash_entry *entry, /* Object file input functions. */ -/* Return type and length from record header (buf) on Alpha. */ +/* Return type and size from record header (buf) on Alpha. */ void _bfd_vms_get_header_values (bfd * abfd ATTRIBUTE_UNUSED, unsigned char *buf, int *type, - int *length) + int *size) { - if (type != 0) + if (type) *type = bfd_getl16 (buf); - buf += 2; - if (length != 0) - *length = bfd_getl16 (buf); + + if (size) + *size = bfd_getl16 (buf+2); #if VMS_DEBUG - vms_debug (10, "_bfd_vms_get_header_values type %x, length %x\n", (type?*type:0), (length?*length:0)); + vms_debug (10, "_bfd_vms_get_header_values type %x, size %x\n", + type ? *type : 0, size ? *size : 0); #endif } @@ -193,237 +203,341 @@ _bfd_vms_get_header_values (bfd * abfd ATTRIBUTE_UNUSED, The openVMS object file has 'variable length' which means that read() returns data in chunks of (hopefully) correct and expected - size. The linker (and other tools on vms) depend on that. Unix doesn't - know about 'formatted' files, so reading and writing such an object - file in a unix environment is not trivial. + size. The linker (and other tools on VMS) depend on that. Unix + doesn't know about 'formatted' files, so reading and writing such + an object file in a Unix environment is not trivial. - With the tool 'file' (available on all vms ftp sites), one - can view and change the attributes of a file. Changing from + With the tool 'file' (available on all VMS FTP sites), one + can view and change the attributes of a file. Changing from 'variable length' to 'fixed length, 512 bytes' reveals the - record length at the first 2 bytes of every record. The same - happens during the transfer of object files from vms to unix, - at least with ucx, dec's implementation of tcp/ip. + record size at the first 2 bytes of every record. The same + happens during the transfer of object files from VMS to Unix, + at least with UCX, the DEC implementation of TCP/IP. - The vms format repeats the length at bytes 2 & 3 of every record. + The VMS format repeats the size at bytes 2 & 3 of every record. On the first call (file_format == FF_UNKNOWN) we check if the first and the third byte pair (!) of the record match. - If they do it's an object file in an unix environment or with - wrong attributes (FF_FOREIGN), else we should be in a vms + If they do it's an object file in an Unix environment or with + wrong attributes (FF_FOREIGN), else we should be in a VMS environment where read() returns the record size (FF_NATIVE). - Reading is always done in 2 steps. - First just the record header is read and the length extracted - by get_header_values, - then the read buffer is adjusted and the remaining bytes are - read in. + Reading is always done in 2 steps: + 1. first just the record header is read and the size extracted, + 2. then the read buffer is adjusted and the remaining bytes are + read in. + + All file I/O is done on even file positions. */ - All file i/o is always done on even file positions. */ +#define VMS_OBJECT_ADJUSTMENT 2 + +static void +maybe_adjust_record_pointer_for_object (bfd *abfd) +{ + /* Set the file format once for all on the first invocation. */ + if (PRIV (file_format) == FF_UNKNOWN) + { + if (PRIV (vms_rec)[0] == PRIV (vms_rec)[4] + && PRIV (vms_rec)[1] == PRIV (vms_rec)[5]) + PRIV (file_format) = FF_FOREIGN; + else + PRIV (file_format) = FF_NATIVE; + } + + /* The adjustment is needed only in an Unix environment. */ + if (PRIV (file_format) == FF_FOREIGN) + PRIV (vms_rec) += VMS_OBJECT_ADJUSTMENT; +} + +/* Get first record from file and return the file type. */ int -_bfd_vms_get_record (bfd * abfd) +_bfd_vms_get_first_record (bfd *abfd) { - int test_len, test_start, remaining; - unsigned char *vms_buf; + unsigned int test_len; #if VMS_DEBUG - vms_debug (8, "_bfd_vms_get_record\n"); + vms_debug (8, "_bfd_vms_get_first_record\n"); #endif - /* Minimum is 6 bytes on Alpha - (2 bytes length, 2 bytes record id, 2 bytes length repeated) - - On the VAX there's no length information in the record - so start with OBJ_S_C_MAXRECSIZ. */ + if (PRIV (is_vax)) + test_len = 0; + else + /* Minimum is 6 bytes for objects (2 bytes size, 2 bytes record id, + 2 bytes size repeated) and 12 bytes for images (4 bytes major id, + 4 bytes minor id, 4 bytes length). */ + test_len = 12; + /* Size the main buffer. */ if (PRIV (buf_size) == 0) { - bfd_size_type amt; - - if (PRIV (is_vax)) - { - amt = OBJ_S_C_MAXRECSIZ; - PRIV (file_format) = FF_VAX; - } - else - amt = 6; - PRIV (vms_buf) = bfd_malloc (amt); + /* On VAX there's no size information in the record, so + start with OBJ_S_C_MAXRECSIZ. */ + bfd_size_type amt = (test_len ? test_len : OBJ_S_C_MAXRECSIZ); + PRIV (vms_buf) = (unsigned char *) bfd_malloc (amt); PRIV (buf_size) = amt; } - vms_buf = PRIV (vms_buf); + /* Initialize the record pointer. */ + PRIV (vms_rec) = PRIV (vms_buf); - if (vms_buf == 0) - return -1; - - switch (PRIV (file_format)) + /* We only support modules on VAX. */ + if (PRIV (is_vax)) { - case FF_UNKNOWN: - case FF_FOREIGN: - test_len = 6; /* Probe 6 bytes. */ - test_start = 2; /* Where the record starts. */ - break; - - case FF_NATIVE: - test_len = 4; - test_start = 0; - break; - - default: - case FF_VAX: - test_len = 0; - test_start = 0; - break; + if (vms_get_remaining_object_record (abfd, test_len) <= 0) + return FT_UNKNOWN; + +#if VMS_DEBUG + vms_debug (2, "file type is VAX module\n"); +#endif + + return FT_MODULE; } - /* Skip odd alignment byte. */ + if (bfd_bread (PRIV (vms_buf), test_len, abfd) != test_len) + { + bfd_set_error (bfd_error_file_truncated); + return FT_UNKNOWN; + } - if (bfd_tell (abfd) & 1) + /* Is it an image? */ + if ((bfd_getl32 (PRIV (vms_rec)) == EIHD_S_K_MAJORID) + && (bfd_getl32 (PRIV (vms_rec) + 4) == EIHD_S_K_MINORID)) { - if (bfd_bread (PRIV (vms_buf), (bfd_size_type) 1, abfd) != 1) - { - bfd_set_error (bfd_error_file_truncated); - return 0; - } + if (vms_get_remaining_image_record (abfd, test_len) <= 0) + return FT_UNKNOWN; + +#if VMS_DEBUG + vms_debug (2, "file type is image\n"); +#endif + + return FT_IMAGE; } - /* Read the record header on Alpha. */ - if ((test_len != 0) - && (bfd_bread (PRIV (vms_buf), (bfd_size_type) test_len, abfd) - != (bfd_size_type) test_len)) + /* Assume it's a module and adjust record pointer if necessary. */ + maybe_adjust_record_pointer_for_object (abfd); + + /* But is it really a module? */ + if (bfd_getl16 (PRIV (vms_rec)) <= EOBJ_S_C_MAXRECTYP + && bfd_getl16 (PRIV (vms_rec) + 2) <= EOBJ_S_C_MAXRECSIZ) { - bfd_set_error (bfd_error_file_truncated); - return 0; + if (vms_get_remaining_object_record (abfd, test_len) <= 0) + return FT_UNKNOWN; + +#if VMS_DEBUG + vms_debug (2, "file type is module\n"); +#endif + + return FT_MODULE; } - /* Check file format on first call. */ - if (PRIV (file_format) == FF_UNKNOWN) - { /* Record length repeats ? */ - if (vms_buf[0] == vms_buf[4] - && vms_buf[1] == vms_buf[5]) +#if VMS_DEBUG + vms_debug (2, "file type is unknown\n"); +#endif + + return FT_UNKNOWN; +} + +/* Implement step #1 of the object record reading procedure. + Return the record type or -1 on failure. */ + +int +_bfd_vms_get_object_record (bfd *abfd) +{ + unsigned int test_len; + int type; + +#if VMS_DEBUG + vms_debug (8, "_bfd_vms_get_obj_record\n"); +#endif + + if (PRIV (is_vax)) + test_len = 0; + else + { + /* See _bfd_vms_get_first_record. */ + test_len = 6; + + /* Skip odd alignment byte. */ + if (bfd_tell (abfd) & 1) { - PRIV (file_format) = FF_FOREIGN; /* Y: foreign environment. */ - test_start = 2; + if (bfd_bread (PRIV (vms_buf), 1, abfd) != 1) + { + bfd_set_error (bfd_error_file_truncated); + return -1; + } } - else + + /* Read the record header */ + if (bfd_bread (PRIV (vms_buf), test_len, abfd) != test_len) { - PRIV (file_format) = FF_NATIVE; /* N: native environment. */ - test_start = 0; + bfd_set_error (bfd_error_file_truncated); + return -1; } + + /* Reset the record pointer. */ + PRIV (vms_rec) = PRIV (vms_buf); + maybe_adjust_record_pointer_for_object (abfd); } + if (vms_get_remaining_object_record (abfd, test_len) <= 0) + return -1; + + if (PRIV (is_vax)) + type = PRIV (vms_rec) [0]; + else + type = bfd_getl16 (PRIV (vms_rec)); + +#if VMS_DEBUG + vms_debug (8, "_bfd_vms_get_obj_record: rec %p, size %d, type %d\n", + PRIV (vms_rec), PRIV (rec_size), type); +#endif + + return type; +} + +/* Implement step #2 of the object record reading procedure. + Return the size of the record or 0 on failure. */ + +static int +vms_get_remaining_object_record (bfd *abfd, int read_so_far) +{ +#if VMS_DEBUG + vms_debug (8, "vms_get_remaining_obj_record\n"); +#endif + if (PRIV (is_vax)) { - PRIV (rec_length) = bfd_bread (vms_buf, (bfd_size_type) PRIV (buf_size), - abfd); - if (PRIV (rec_length) <= 0) + if (read_so_far != 0) + abort (); + + PRIV (rec_size) = bfd_bread (PRIV (vms_buf), PRIV (buf_size), abfd); + + if (PRIV (rec_size) <= 0) { bfd_set_error (bfd_error_file_truncated); return 0; } - PRIV (vms_rec) = vms_buf; + + /* Reset the record pointer. */ + PRIV (vms_rec) = PRIV (vms_buf); } else { - /* Alpha. */ - /* Extract vms record length. */ + unsigned int to_read; - _bfd_vms_get_header_values (abfd, vms_buf + test_start, NULL, - & PRIV (rec_length)); + /* Extract record size. */ + PRIV (rec_size) = bfd_getl16 (PRIV (vms_rec) + 2); - if (PRIV (rec_length) <= 0) + if (PRIV (rec_size) <= 0) { bfd_set_error (bfd_error_file_truncated); return 0; } /* That's what the linker manual says. */ - - if (PRIV (rec_length) > EOBJ_S_C_MAXRECSIZ) + if (PRIV (rec_size) > EOBJ_S_C_MAXRECSIZ) { bfd_set_error (bfd_error_file_truncated); return 0; } - /* Adjust the buffer. */ + /* Take into account object adjustment. */ + to_read = PRIV (rec_size); + if (PRIV (file_format) == FF_FOREIGN) + to_read += VMS_OBJECT_ADJUSTMENT; - if (PRIV (rec_length) > PRIV (buf_size)) + /* Adjust the buffer. */ + if (to_read > PRIV (buf_size)) { - PRIV (vms_buf) = bfd_realloc (vms_buf, - (bfd_size_type) PRIV (rec_length)); - vms_buf = PRIV (vms_buf); - if (vms_buf == 0) - return -1; - PRIV (buf_size) = PRIV (rec_length); + PRIV (vms_buf) + = (unsigned char *) bfd_realloc (PRIV (vms_buf), to_read); + if (PRIV (vms_buf) == NULL) + return 0; + PRIV (buf_size) = to_read; } /* Read the remaining record. */ - remaining = PRIV (rec_length) - test_len + test_start; + to_read -= read_so_far; #if VMS_DEBUG - vms_debug (10, "bfd_bread remaining %d\n", remaining); + vms_debug (8, "vms_get_remaining_obj_record: to_read %d\n", to_read); #endif - if (bfd_bread (vms_buf + test_len, (bfd_size_type) remaining, abfd) != - (bfd_size_type) remaining) + + if (bfd_bread (PRIV (vms_buf) + read_so_far, to_read, abfd) != to_read) { bfd_set_error (bfd_error_file_truncated); return 0; } - PRIV (vms_rec) = vms_buf + test_start; + + /* Reset the record pointer. */ + PRIV (vms_rec) = PRIV (vms_buf); + maybe_adjust_record_pointer_for_object (abfd); } #if VMS_DEBUG - vms_debug (11, "bfd_bread rec_length %d\n", PRIV (rec_length)); + vms_debug (8, "vms_get_remaining_obj_record: size %d\n", PRIV (rec_size)); #endif - return PRIV (rec_length); + return PRIV (rec_size); } -/* Get next vms record from file - update vms_rec and rec_length to new (remaining) values. */ +/* Implement step #2 of the record reading procedure for images. + Return the size of the record or 0 on failure. */ -int -_bfd_vms_next_record (bfd * abfd) +static int +vms_get_remaining_image_record (bfd *abfd, int read_so_far) { -#if VMS_DEBUG - vms_debug (8, "_bfd_vms_next_record (len %d, size %d)\n", - PRIV (rec_length), PRIV (rec_size)); -#endif + unsigned int to_read; + int remaining; - if (PRIV (rec_length) > 0) - PRIV (vms_rec) += PRIV (rec_size); - else + /* Extract record size. */ + PRIV (rec_size) = bfd_getl32 (PRIV (vms_rec) + EIHD_S_L_SIZE); + + if (PRIV (rec_size) > PRIV (buf_size)) { - if (_bfd_vms_get_record (abfd) <= 0) - return -1; + PRIV (vms_buf) = bfd_realloc (PRIV (vms_buf), PRIV (rec_size)); + + if (PRIV (vms_buf) == NULL) + { + bfd_set_error (bfd_error_no_memory); + return 0; + } + + PRIV (buf_size) = PRIV (rec_size); } - if (!PRIV (vms_rec) || !PRIV (vms_buf) - || PRIV (vms_rec) >= (PRIV (vms_buf) + PRIV (buf_size))) - return -1; + /* Read the remaining record. */ + remaining = PRIV (rec_size) - read_so_far; + to_read = MIN (VMS_BLOCK_SIZE - read_so_far, remaining); - if (PRIV (is_vax)) + while (remaining > 0) { - PRIV (rec_type) = *(PRIV (vms_rec)); - PRIV (rec_size) = PRIV (rec_length); - } - else - _bfd_vms_get_header_values (abfd, PRIV (vms_rec), &PRIV (rec_type), - &PRIV (rec_size)); + if (bfd_bread (PRIV (vms_buf) + read_so_far, to_read, abfd) != to_read) + { + bfd_set_error (bfd_error_file_truncated); + return 0; + } - PRIV (rec_length) -= PRIV (rec_size); + read_so_far += to_read; + remaining -= to_read; -#if VMS_DEBUG - vms_debug (8, "_bfd_vms_next_record: rec %p, size %d, length %d, type %d\n", - PRIV (vms_rec), PRIV (rec_size), PRIV (rec_length), - PRIV (rec_type)); -#endif + /* Eat trailing 0xff's. */ + if (remaining > 0) + while (PRIV (vms_buf) [read_so_far - 1] == 0xff) + read_so_far--; + + to_read = MIN (VMS_BLOCK_SIZE, remaining); + } + + /* Reset the record pointer. */ + PRIV (vms_rec) = PRIV (vms_buf); - return PRIV (rec_type); + return PRIV (rec_size); } - -/* Copy sized string (string with fixed length) to new allocated area - size is string length (size of record) */ + +/* Copy sized string (string with fixed size) to new allocated area + size is string size (size of record) */ char * _bfd_vms_save_sized_string (unsigned char *str, int size) @@ -438,8 +552,8 @@ _bfd_vms_save_sized_string (unsigned char *str, int size) return newstr; } -/* Copy counted string (string with length at first byte) to new allocated area - ptr points to length byte on entry */ +/* Copy counted string (string with size at first byte) to new allocated area + ptr points to size byte on entry */ char * _bfd_vms_save_counted_string (unsigned char *ptr) @@ -501,83 +615,12 @@ _bfd_vms_pop (bfd * abfd, int *psect) return value; } -/* Object file output functions. */ - -/* GAS tends to write sections in little chunks (bfd_set_section_contents) - which we can't use directly. So we save the little chunks in linked - lists (one per section) and write them later. */ - -/* Add a new vms_section structure to vms_section_table - - forward chaining -. */ - -static vms_section * -add_new_contents (bfd * abfd, sec_ptr section) -{ - vms_section *sptr, *newptr; - - sptr = PRIV (vms_section_table)[section->index]; - if (sptr != NULL) - return sptr; - - newptr = bfd_alloc (abfd, (bfd_size_type) sizeof (vms_section)); - if (newptr == NULL) - return NULL; - newptr->contents = bfd_alloc (abfd, section->size); - if (newptr->contents == NULL) - return NULL; - newptr->offset = 0; - newptr->size = section->size; - newptr->next = 0; - PRIV (vms_section_table)[section->index] = newptr; - return newptr; -} - -/* Save section data & offset to a vms_section structure - vms_section_table[] holds the vms_section chain. */ - -bfd_boolean -_bfd_save_vms_section (bfd * abfd, - sec_ptr section, - const void * data, - file_ptr offset, - bfd_size_type count) -{ - vms_section *sptr; - - if (section->index >= VMS_SECTION_COUNT) - { - bfd_set_error (bfd_error_nonrepresentable_section); - return FALSE; - } - if (count == (bfd_size_type)0) - return TRUE; - sptr = add_new_contents (abfd, section); - if (sptr == NULL) - return FALSE; - memcpy (sptr->contents + offset, data, (size_t) count); - - return TRUE; -} - -/* Get vms_section pointer to saved contents for section # index */ - -vms_section * -_bfd_get_vms_section (bfd * abfd, int index) -{ - if (index >= VMS_SECTION_COUNT) - { - bfd_set_error (bfd_error_nonrepresentable_section); - return NULL; - } - return PRIV (vms_section_table)[index]; -} - /* Object output routines. */ /* Begin new record or record header write 2 bytes rectype write 2 bytes record length (filled in at flush) - write 2 bytes header type (ommitted if rechead == -1). */ + write 2 bytes header type (ommitted if rechead == -1). */ void _bfd_vms_output_begin (bfd * abfd, int rectype, int rechead) @@ -691,13 +734,11 @@ _bfd_vms_output_flush (bfd * abfd) if (PRIV (push_level) == 0) { -#ifndef VMS - /* Write length first, see FF_FOREIGN in the input routines. */ - fwrite (PRIV (output_buf) + 2, 2, 1, (FILE *) abfd->iostream); -#endif - fwrite (PRIV (output_buf), (size_t) real_size, 1, - (FILE *) abfd->iostream); - + /* File is open in undefined (UDF) format on VMS, but ultimately will be + converted to variable length (VAR) format. VAR format has a length + word first which must be explicitly output in UDF format. */ + bfd_bwrite (PRIV (output_buf) + 2, 2, abfd); + bfd_bwrite (PRIV (output_buf), (size_t) real_size, abfd); PRIV (output_size) = 0; } else @@ -870,7 +911,7 @@ hash_string (const char *ptr) char * _bfd_vms_length_hash_symbol (bfd * abfd, const char *in, int maxlen) { - long int result; + unsigned long result; int in_len; char *new_name; const char *old_name; @@ -943,7 +984,7 @@ new_symbol (bfd * abfd, char *name) if (symbol == 0) return symbol; symbol->name = name; - symbol->section = bfd_make_section (abfd, BFD_UND_SECTION_NAME); + symbol->section = (asection *)(unsigned long)-1; return symbol; } diff --git a/bfd/vms-tir.c b/bfd/vms-tir.c index de20d4f..5bc61da 100644 --- a/bfd/vms-tir.c +++ b/bfd/vms-tir.c @@ -1,12 +1,12 @@ /* 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, 2007 - Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2007, + 2008, 2009 Free Software Foundation, Inc. TIR record handling functions ETIR record handling functions - go and read the openVMS linker manual (esp. appendix B) + Go and read the openVMS linker manual (esp. appendix B) if you don't know what's going on here :-) Written by Klaus K"ampf (kkaempf@rmi.de) @@ -26,7 +26,6 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - /* The following type abbreviations are used: cs counted string (ascii string with length byte) @@ -41,6 +40,33 @@ #include "bfdlink.h" #include "libbfd.h" #include "vms.h" + +static int check_section (bfd *, int); +static void image_set_ptr (bfd *abfd, int psect, uquad offset); +static void image_inc_ptr (bfd *abfd, uquad offset); +static void dst_define_location (bfd *abfd, uquad loc); +static void dst_restore_location (bfd *abfd, uquad loc); +static unsigned int dst_retrieve_location (bfd *abfd, uquad loc); +static void dst_check_allocation (bfd *abfd, unsigned int size); +static void image_dump (bfd *abfd, unsigned char *ptr, int size, int offset); +static void image_write_b (bfd *abfd, unsigned int value); +static void image_write_w (bfd *abfd, unsigned int value); +static void image_write_l (bfd *abfd, unsigned long value); +static void image_write_q (bfd *abfd, uquad value); +static bfd_boolean etir_sta (bfd *, int, unsigned char *, int *); +static bfd_boolean etir_sto (bfd *, int, unsigned char *, int *); +static bfd_boolean etir_opr (bfd *, int, unsigned char *, int *); +static bfd_boolean etir_ctl (bfd *, int, unsigned char *, int *); +static bfd_boolean etir_stc (bfd *, int, unsigned char *, int *); +static asection *new_section (bfd *, int); +static int alloc_section (bfd *, unsigned int); +static int etir_cmd (bfd *, int, unsigned char *, int *); +static int analyze_tir (bfd *, unsigned char *, unsigned int); +static int analyze_etir (bfd *, unsigned char *, unsigned int); +static unsigned char *tir_opr (bfd *, unsigned char *); +static const char *tir_cmd_name (int); +static const char *cmd_name (int); + static int check_section (bfd * abfd, int size) @@ -51,8 +77,8 @@ check_section (bfd * abfd, int size) if (offset + size > PRIV (image_section)->size) { PRIV (image_section)->contents - = bfd_realloc (PRIV (image_section)->contents, offset + size); - if (PRIV (image_section)->contents == 0) + = bfd_realloc_or_free (PRIV (image_section)->contents, offset + size); + if (PRIV (image_section)->contents == NULL) { (*_bfd_error_handler) (_("No Mem !")); return -1; @@ -92,6 +118,77 @@ image_inc_ptr (bfd * abfd, uquad offset) PRIV (image_ptr) += offset; } +/* Save current DST location counter under specified index. */ + +static void +dst_define_location (bfd *abfd, uquad loc) +{ + asection *dst_section = PRIV (dst_section); + +#if VMS_DEBUG + _bfd_vms_debug (4, "dst_define_location (%d)\n", (int)loc); +#endif + + /* Grow the ptr offset table if necessary. */ + if (loc + 1 > PRIV (dst_ptr_offsets_count)) + { + PRIV (dst_ptr_offsets) = bfd_realloc (PRIV (dst_ptr_offsets), + (loc + 1) * sizeof (unsigned int)); + PRIV (dst_ptr_offsets_count) = loc + 1; + } + + PRIV (dst_ptr_offsets)[loc] = PRIV (image_ptr) - dst_section->contents; +} + +/* Restore saved DST location counter from specified index. */ + +static void +dst_restore_location (bfd *abfd, uquad loc) +{ + asection *dst_section = PRIV (dst_section); + +#if VMS_DEBUG + _bfd_vms_debug (4, "dst_restore_location (%d)\n", (int)loc); +#endif + + PRIV (image_ptr) = dst_section->contents + PRIV (dst_ptr_offsets)[loc]; +} + +/* Retrieve saved DST location counter from specified index. */ + +static unsigned int +dst_retrieve_location (bfd *abfd, uquad loc) +{ +#if VMS_DEBUG + _bfd_vms_debug (4, "dst_retrieve_location (%d)\n", (int)loc); +#endif + + return PRIV (dst_ptr_offsets)[loc]; +} + +/* Check that the DST section is big enough for the specified + amount of bytes. */ + +static void +dst_check_allocation (bfd *abfd, unsigned int size) +{ + asection *dst_section = PRIV (dst_section); + + bfd_size_type used = PRIV (image_ptr) - dst_section->contents; + bfd_size_type left = dst_section->size - used; + + /* Grow the DST section as necessary */ + if (size > left) + { + dst_section->size *= 2; + dst_section->contents + = bfd_realloc (dst_section->contents, dst_section->size); + PRIV (image_ptr) = dst_section->contents + used; + + dst_check_allocation (abfd, size); + } +} + /* Dump multiple bytes to section image. */ static void @@ -109,6 +206,9 @@ image_dump (bfd * abfd, if (PRIV (is_vax) && check_section (abfd, size)) return; + if (PRIV (dst_section)) + dst_check_allocation (abfd, size); + while (size-- > 0) *PRIV (image_ptr)++ = *ptr++; } @@ -125,6 +225,9 @@ image_write_b (bfd * abfd, unsigned int value) if (PRIV (is_vax) && check_section (abfd, 1)) return; + if (PRIV (dst_section)) + dst_check_allocation (abfd, 1); + *PRIV (image_ptr)++ = (value & 0xff); } @@ -140,6 +243,9 @@ image_write_w (bfd * abfd, unsigned int value) if (PRIV (is_vax) && check_section (abfd, 2)) return; + if (PRIV (dst_section)) + dst_check_allocation (abfd, 2); + bfd_putl16 ((bfd_vma) value, PRIV (image_ptr)); PRIV (image_ptr) += 2; } @@ -156,6 +262,9 @@ image_write_l (bfd * abfd, unsigned long value) if (PRIV (is_vax) && check_section (abfd, 4)) return; + if (PRIV (dst_section)) + dst_check_allocation (abfd, 4); + bfd_putl32 ((bfd_vma) value, PRIV (image_ptr)); PRIV (image_ptr) += 4; } @@ -172,6 +281,9 @@ image_write_q (bfd * abfd, uquad value) if (PRIV (is_vax) && check_section (abfd, 8)) return; + if (PRIV (dst_section)) + dst_check_allocation (abfd, 8); + bfd_putl64 (value, PRIV (image_ptr)); PRIV (image_ptr) += 8; } @@ -182,6 +294,8 @@ cmd_name (int cmd) switch (cmd) { case ETIR_S_C_STA_GBL: return "ETIR_S_C_STA_GBL"; + case ETIR_S_C_STA_LW: return "ETIR_S_C_STA_LW"; + case ETIR_S_C_STA_QW: return "ETIR_S_C_STA_QW"; case ETIR_S_C_STA_PQ: return "ETIR_S_C_STA_PQ"; case ETIR_S_C_STA_LI: return "ETIR_S_C_STA_LI"; case ETIR_S_C_STA_MOD: return "ETIR_S_C_STA_MOD"; @@ -192,10 +306,16 @@ cmd_name (int cmd) case ETIR_S_C_STO_CA: return "ETIR_S_C_STO_CA"; case ETIR_S_C_STO_RB: return "ETIR_S_C_STO_RB"; case ETIR_S_C_STO_AB: return "ETIR_S_C_STO_AB"; + case ETIR_S_C_STO_OFF: return "ETIR_S_C_STO_OFF"; + case ETIR_S_C_STO_IMM: return "ETIR_S_C_STO_IMM"; + case ETIR_S_C_STO_IMMR: return "ETIR_S_C_STO_IMMR"; + case ETIR_S_C_STO_LW: return "ETIR_S_C_STO_LW"; + case ETIR_S_C_STO_QW: return "ETIR_S_C_STO_QW"; case ETIR_S_C_STO_GBL_LW: return "ETIR_S_C_STO_GBL_LW"; case ETIR_S_C_STO_LP_PSB: return "ETIR_S_C_STO_LP_PSB"; case ETIR_S_C_STO_HINT_GBL: return "ETIR_S_C_STO_HINT_GBL"; case ETIR_S_C_STO_HINT_PS: return "ETIR_S_C_STO_HINT_PS"; + case ETIR_S_C_OPR_ADD: return "ETIR_S_C_OPR_ADD"; case ETIR_S_C_OPR_INSV: return "ETIR_S_C_OPR_INSV"; case ETIR_S_C_OPR_USH: return "ETIR_S_C_OPR_USH"; case ETIR_S_C_OPR_ROT: return "ETIR_S_C_OPR_ROT"; @@ -215,34 +335,41 @@ cmd_name (int cmd) case ETIR_S_C_STC_BOH_GBL: return "ETIR_S_C_STC_BOH_GBL"; case ETIR_S_C_STC_BOH_PS: return "ETIR_S_C_STC_BOH_PS"; case ETIR_S_C_STC_NBH_GBL: return "ETIR_S_C_STC_NBH_GBL"; + case ETIR_S_C_CTL_SETRB: return "ETIR_S_C_CTL_SETRB"; + case ETIR_S_C_STC_LP_PSB: return "ETIR_S_C_STC_LP_PSB"; + case ETIR_S_C_CTL_DFLOC: return "ETIR_S_C_CTL_DFLOC"; + case ETIR_S_C_CTL_STLOC: return "ETIR_S_C_CTL_STLOC"; + case ETIR_S_C_CTL_STKDL: return "ETIR_S_C_CTL_STKDL"; default: /* These names have not yet been added to this switch statement. */ - abort (); + (*_bfd_error_handler) (_("unknown ETIR command %d"), cmd); } + + return NULL; } #define HIGHBIT(op) ((op & 0x80000000L) == 0x80000000L) /* etir_sta - vms stack commands + Vms stack commands. - handle sta_xxx commands in etir section - ptr points to data area in record + Handle sta_xxx commands in etir section, + ptr points to data area in record. - see table B-8 of the openVMS linker manual. */ + See table B-8 of the openVMS linker manual. */ static bfd_boolean -etir_sta (bfd * abfd, int cmd, unsigned char *ptr) +etir_sta (bfd *abfd, int cmd, unsigned char *ptr, int *quarter_relocs) { #if VMS_DEBUG _bfd_vms_debug (5, "etir_sta %d/%x\n", cmd, cmd); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif switch (cmd) { - /* stack global + /* Stack global arg: cs symbol name stack 32 bit value of symbol (high bits set to 0). */ @@ -265,37 +392,50 @@ etir_sta (bfd * abfd, int cmd, unsigned char *ptr) else _bfd_vms_push (abfd, (uquad) (entry->symbol->value), -1); } + *quarter_relocs = 1; break; - /* stack longword + /* Stack longword arg: lw value stack 32 bit value, sign extend to 64 bit. */ case ETIR_S_C_STA_LW: _bfd_vms_push (abfd, (uquad) bfd_getl32 (ptr), -1); + /* This one is special as it is both part of the section header + and of the ALPHA_R_REFLONG relocation. */ + if (bfd_getl16 (ptr - 4 + bfd_getl16 (ptr - 2)) == ETIR_S_C_CTL_DFLOC) + *quarter_relocs = 0; + else if (*quarter_relocs) + *quarter_relocs += 1; + else + *quarter_relocs = 2; break; - /* stack global + /* Stack quadword arg: qw value stack 64 bit value of symbol. */ case ETIR_S_C_STA_QW: _bfd_vms_push (abfd, (uquad) bfd_getl64 (ptr), -1); + if (*quarter_relocs) + *quarter_relocs += 1; + else + *quarter_relocs = 2; break; - /* stack psect base plus quadword offset + /* Stack psect base plus quadword offset arg: lw section index qw signed quadword offset (low 32 bits) - stack qw argument and section index + Stack qw argument and section index (see ETIR_S_C_STO_OFF, ETIR_S_C_CTL_SETRB). */ case ETIR_S_C_STA_PQ: { uquad dummy; - unsigned int psect; + int psect; psect = bfd_getl32 (ptr); - if (psect >= PRIV (section_count)) + if ((unsigned int) psect >= PRIV (section_count)) { (*_bfd_error_handler) (_("bad section index in %s"), cmd_name (cmd)); @@ -305,23 +445,31 @@ etir_sta (bfd * abfd, int cmd, unsigned char *ptr) dummy = bfd_getl64 (ptr + 4); _bfd_vms_push (abfd, dummy, (int) psect); } + /* This one is special as it is both part of the section header + and of the ALPHA_R_REFLONG and ALPHA_R_REFQUAD relocations. */ + if (bfd_getl16 (ptr - 4 + bfd_getl16 (ptr - 2)) == ETIR_S_C_CTL_SETRB) + *quarter_relocs = 0; + else + *quarter_relocs = 2; break; case ETIR_S_C_STA_LI: case ETIR_S_C_STA_MOD: case ETIR_S_C_STA_CKARG: (*_bfd_error_handler) (_("unsupported STA cmd %s"), cmd_name (cmd)); + *quarter_relocs = 0; return FALSE; - break; default: (*_bfd_error_handler) (_("reserved STA cmd %d"), cmd); + *quarter_relocs = 0; return FALSE; - break; } + #if VMS_DEBUG _bfd_vms_debug (5, "etir_sta true\n"); #endif + return TRUE; } @@ -335,14 +483,14 @@ etir_sta (bfd * abfd, int cmd, unsigned char *ptr) see table B-9 of the openVMS linker manual. */ static bfd_boolean -etir_sto (bfd * abfd, int cmd, unsigned char *ptr) +etir_sto (bfd *abfd, int cmd, unsigned char *ptr, int *quarter_relocs) { uquad dummy; int psect; #if VMS_DEBUG _bfd_vms_debug (5, "etir_sto %d/%x\n", cmd, cmd); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif switch (cmd) @@ -353,6 +501,7 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) dummy = _bfd_vms_pop (abfd, &psect); /* FIXME: check top bits. */ image_write_b (abfd, (unsigned int) dummy & 0xff); + *quarter_relocs = 0; break; /* Store word: pop stack, write word @@ -361,6 +510,7 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) dummy = _bfd_vms_pop (abfd, &psect); /* FIXME: check top bits */ image_write_w (abfd, (unsigned int) dummy & 0xffff); + *quarter_relocs = 0; break; /* Store longword: pop stack, write longword @@ -370,6 +520,10 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) dummy += (PRIV (sections)[psect])->vma; /* FIXME: check top bits. */ image_write_l (abfd, (unsigned int) dummy & 0xffffffff); + if (*quarter_relocs == 2) + *quarter_relocs = 4; + else + *quarter_relocs += 1; break; /* Store quadword: pop stack, write quadword @@ -379,6 +533,10 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) dummy += (PRIV (sections)[psect])->vma; /* FIXME: check top bits. */ image_write_q (abfd, dummy); + if (*quarter_relocs == 2) + *quarter_relocs = 4; + else + *quarter_relocs += 1; break; /* Store immediate repeated: pop stack for repeat count @@ -393,6 +551,7 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) while (dummy-- > 0) image_dump (abfd, ptr+4, size, 0); } + *quarter_relocs = 0; break; /* Store global: write symbol value @@ -406,15 +565,13 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) entry = (vms_symbol_entry *) bfd_hash_lookup (PRIV (vms_symbol_table), name, FALSE, FALSE); if (entry == NULL) - { - (*_bfd_error_handler) (_("%s: no symbol \"%s\""), - cmd_name (cmd), name); - return FALSE; - } + /* FIXME, reloc. */ + image_write_q (abfd, (uquad) (0)); else /* FIXME, reloc. */ image_write_q (abfd, (uquad) (entry->symbol->value)); } + *quarter_relocs = 4; break; /* Store code address: write address of entry point @@ -428,15 +585,13 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) entry = (vms_symbol_entry *) bfd_hash_lookup (PRIV (vms_symbol_table), name, FALSE, FALSE); if (entry == NULL) - { - (*_bfd_error_handler) (_("%s: no symbol \"%s\""), - cmd_name (cmd), name); - return FALSE; - } + /* FIXME, reloc. */ + image_write_q (abfd, (uquad) (0)); else /* FIXME, reloc. */ image_write_q (abfd, (uquad) (entry->symbol->value)); } + *quarter_relocs = 4; break; /* Store offset to psect: pop stack, add low 32 bits to base of psect @@ -450,6 +605,7 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) q += (PRIV (sections)[psect1])->vma; image_write_q (abfd, q); } + *quarter_relocs += 2; break; /* Store immediate @@ -462,6 +618,7 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) size = bfd_getl32 (ptr); image_dump (abfd, ptr+4, size, 0); } + *quarter_relocs = 0; break; /* This code is 'reserved to digital' according to the openVMS @@ -489,22 +646,26 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) /* FIXME, reloc. */ image_write_l (abfd, (unsigned long) (entry->symbol->value)); } + *quarter_relocs = 4; break; case ETIR_S_C_STO_RB: case ETIR_S_C_STO_AB: case ETIR_S_C_STO_LP_PSB: (*_bfd_error_handler) (_("%s: not supported"), cmd_name (cmd)); - break; + *quarter_relocs = 0; + return FALSE; case ETIR_S_C_STO_HINT_GBL: case ETIR_S_C_STO_HINT_PS: (*_bfd_error_handler) (_("%s: not implemented"), cmd_name (cmd)); - break; + *quarter_relocs = 0; + return FALSE; default: (*_bfd_error_handler) (_("reserved STO cmd %d"), cmd); - break; + *quarter_relocs = 0; + return FALSE; } return TRUE; @@ -518,15 +679,22 @@ etir_sto (bfd * abfd, int cmd, unsigned char *ptr) see table B-10 of the openVMS linker manual. */ static bfd_boolean -etir_opr (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) +etir_opr (bfd *abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED, + int *quarter_relocs) { long op1, op2; #if VMS_DEBUG _bfd_vms_debug (5, "etir_opr %d/%x\n", cmd, cmd); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif + /* No relocation uses OPR commands except ETIR_S_C_OPR_ADD. */ + if (cmd == ETIR_S_C_OPR_ADD) + *quarter_relocs += 1; + else + *quarter_relocs = 0; + switch (cmd) { case ETIR_S_C_OPR_NOP: /* No-op. */ @@ -604,7 +772,7 @@ etir_opr (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) case ETIR_S_C_OPR_REDEF: /* Redefine symbol to current location. */ case ETIR_S_C_OPR_DFLIT: /* Define a literal. */ (*_bfd_error_handler) (_("%s: not supported"), cmd_name (cmd)); - break; + return FALSE; case ETIR_S_C_OPR_SEL: /* Select. */ if ((long) _bfd_vms_pop (abfd, NULL) & 0x01L) @@ -619,7 +787,7 @@ etir_opr (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) default: (*_bfd_error_handler) (_("reserved OPR cmd %d"), cmd); - break; + return FALSE; } return TRUE; @@ -630,16 +798,19 @@ etir_opr (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) See table B-11 of the openVMS linker manual. */ static bfd_boolean -etir_ctl (bfd * abfd, int cmd, unsigned char *ptr) +etir_ctl (bfd *abfd, int cmd, unsigned char *ptr, int *quarter_relocs) { - uquad dummy; + uquad dummy; int psect; #if VMS_DEBUG _bfd_vms_debug (5, "etir_ctl %d/%x\n", cmd, cmd); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif + /* No relocation uses CTL commands. */ + *quarter_relocs = 0; + switch (cmd) { /* Det relocation base: pop stack, set image location counter @@ -660,27 +831,28 @@ etir_ctl (bfd * abfd, int cmd, unsigned char *ptr) arg: none. */ case ETIR_S_C_CTL_DFLOC: dummy = _bfd_vms_pop (abfd, NULL); - /* FIXME */ + dst_define_location (abfd, dummy); break; /* Set location: pop index, restore location counter from index arg: none. */ case ETIR_S_C_CTL_STLOC: - dummy = _bfd_vms_pop (abfd, &psect); - /* FIXME */ + dummy = _bfd_vms_pop (abfd, NULL); + dst_restore_location (abfd, dummy); break; /* Stack defined location: pop index, push location counter from index arg: none. */ case ETIR_S_C_CTL_STKDL: - dummy = _bfd_vms_pop (abfd, &psect); - /* FIXME. */ + dummy = _bfd_vms_pop (abfd, NULL); + _bfd_vms_push (abfd, dst_retrieve_location (abfd, dummy), -1); break; default: (*_bfd_error_handler) (_("reserved CTL cmd %d"), cmd); - break; + return FALSE; } + return TRUE; } @@ -689,11 +861,12 @@ etir_ctl (bfd * abfd, int cmd, unsigned char *ptr) See table B-12 and B-13 of the openVMS linker manual. */ static bfd_boolean -etir_stc (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) +etir_stc (bfd *abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED, + int *quarter_relocs) { #if VMS_DEBUG _bfd_vms_debug (5, "etir_stc %d/%x\n", cmd, cmd); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif switch (cmd) @@ -701,32 +874,17 @@ etir_stc (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) /* 200 Store-conditional Linkage Pair arg: none. */ case ETIR_S_C_STC_LP: - (*_bfd_error_handler) (_("%s: not supported"), cmd_name (cmd)); - break; - - /* 201 Store-conditional Linkage Pair with Procedure Signature - arg: lw linkage index - cs procedure name - by signature length - da signature. */ - case ETIR_S_C_STC_LP_PSB: - image_inc_ptr (abfd, (uquad) 16); /* skip entry,procval */ - break; /* 202 Store-conditional Address at global address arg: lw linkage index cs global name. */ case ETIR_S_C_STC_GBL: - (*_bfd_error_handler) (_("%s: not supported"), cmd_name (cmd)); - break; /* 203 Store-conditional Code Address at global address arg: lw linkage index cs procedure name. */ case ETIR_S_C_STC_GCA: - (*_bfd_error_handler) (_("%s: not supported"), cmd_name (cmd)); - break; /* 204 Store-conditional Address at psect + offset arg: lw linkage index @@ -734,56 +892,82 @@ etir_stc (bfd * abfd, int cmd, unsigned char *ptr ATTRIBUTE_UNUSED) qw offset. */ case ETIR_S_C_STC_PS: (*_bfd_error_handler) (_("%s: not supported"), cmd_name (cmd)); + *quarter_relocs = 0; + return FALSE; + + /* 201 Store-conditional Linkage Pair with Procedure Signature + arg: lw linkage index + cs procedure name + by signature length + da signature. */ + + case ETIR_S_C_STC_LP_PSB: + image_inc_ptr (abfd, (uquad) 16); /* skip entry,procval */ + *quarter_relocs = 4; break; /* 205 Store-conditional NOP at address of global arg: none. */ case ETIR_S_C_STC_NOP_GBL: - - /* 206 Store-conditional NOP at pect + offset - arg: none. */ - case ETIR_S_C_STC_NOP_PS: + /* ALPHA_R_NOP */ /* 207 Store-conditional BSR at global address arg: none. */ - case ETIR_S_C_STC_BSR_GBL: - /* 208 Store-conditional BSR at pect + offset - arg: none. */ - case ETIR_S_C_STC_BSR_PS: + case ETIR_S_C_STC_BSR_GBL: + /* ALPHA_R_BSR */ /* 209 Store-conditional LDA at global address arg: none. */ - case ETIR_S_C_STC_LDA_GBL: - /* 210 Store-conditional LDA at psect + offset - arg: none. */ - case ETIR_S_C_STC_LDA_PS: + case ETIR_S_C_STC_LDA_GBL: + /* ALPHA_R_LDA */ /* 211 Store-conditional BSR or Hint at global address arg: none. */ - case ETIR_S_C_STC_BOH_GBL: - /* 212 Store-conditional BSR or Hint at pect + offset - arg: none. */ - case ETIR_S_C_STC_BOH_PS: + case ETIR_S_C_STC_BOH_GBL: + *quarter_relocs = 4; + break; /* 213 Store-conditional NOP,BSR or HINT at global address arg: none. */ + case ETIR_S_C_STC_NBH_GBL: - /* 214 Store-conditional NOP,BSR or HINT at psect + offset + /* 206 Store-conditional NOP at pect + offset + arg: none. */ + + case ETIR_S_C_STC_NOP_PS: + + /* 208 Store-conditional BSR at pect + offset + arg: none. */ + + case ETIR_S_C_STC_BSR_PS: + + /* 210 Store-conditional LDA at psect + offset + arg: none. */ + + case ETIR_S_C_STC_LDA_PS: + + /* 212 Store-conditional BSR or Hint at pect + offset + arg: none. */ + + case ETIR_S_C_STC_BOH_PS: + + /* 214 Store-conditional NOP, BSR or HINT at psect + offset arg: none. */ case ETIR_S_C_STC_NBH_PS: - /* FIXME */ - break; + (*_bfd_error_handler) ("%s: not supported", cmd_name (cmd)); + *quarter_relocs = 0; + return FALSE; default: -#if VMS_DEBUG - _bfd_vms_debug (3, "reserved STC cmd %d", cmd); -#endif - break; + (*_bfd_error_handler) (_("reserved STC cmd %d"), cmd); + *quarter_relocs = 0; + return FALSE; } + return TRUE; } @@ -833,8 +1017,8 @@ alloc_section (bfd * abfd, unsigned int idx) amt = idx + 1; amt *= sizeof (asection *); - PRIV (sections) = bfd_realloc (PRIV (sections), amt); - if (PRIV (sections) == 0) + PRIV (sections) = bfd_realloc_or_free (PRIV (sections), amt); + if (PRIV (sections) == NULL) return -1; while (PRIV (section_count) <= idx) @@ -851,10 +1035,10 @@ alloc_section (bfd * abfd, unsigned int idx) /* tir_sta - vax stack commands + Vax stack commands. - Handle sta_xxx commands in tir section - ptr points to data area in record + Handle sta_xxx commands in tir section, + ptr points to data area in record. See table 7-3 of the VAX/VMS linker manual. */ @@ -924,7 +1108,7 @@ tir_sta (bfd * abfd, unsigned char *ptr) by signed byte offset. */ { unsigned long dummy; - unsigned int psect; + int psect; if (cmd == TIR_S_C_STA_PB) psect = *ptr++; @@ -934,12 +1118,12 @@ tir_sta (bfd * abfd, unsigned char *ptr) ptr += 2; } - if (psect >= PRIV (section_count)) + if ((unsigned int) psect >= PRIV (section_count)) alloc_section (abfd, psect); dummy = (long) *ptr++; dummy += (PRIV (sections)[psect])->vma; - _bfd_vms_push (abfd, (uquad) dummy, (int) psect); + _bfd_vms_push (abfd, (uquad) dummy, psect); } break; @@ -951,7 +1135,7 @@ tir_sta (bfd * abfd, unsigned char *ptr) sh signed short offset. */ { unsigned long dummy; - unsigned int psect; + int psect; if (cmd == TIR_S_C_STA_PW) psect = *ptr++; @@ -961,12 +1145,12 @@ tir_sta (bfd * abfd, unsigned char *ptr) ptr += 2; } - if (psect >= PRIV (section_count)) + if ((unsigned int) psect >= PRIV (section_count)) alloc_section (abfd, psect); dummy = bfd_getl16 (ptr); ptr+=2; dummy += (PRIV (sections)[psect])->vma; - _bfd_vms_push (abfd, (uquad) dummy, (int) psect); + _bfd_vms_push (abfd, (uquad) dummy, psect); } break; @@ -978,7 +1162,7 @@ tir_sta (bfd * abfd, unsigned char *ptr) lw signed longword offset. */ { unsigned long dummy; - unsigned int psect; + int psect; if (cmd == TIR_S_C_STA_PL) psect = *ptr++; @@ -988,12 +1172,12 @@ tir_sta (bfd * abfd, unsigned char *ptr) ptr += 2; } - if (psect >= PRIV (section_count)) + if ((unsigned int) psect >= PRIV (section_count)) alloc_section (abfd, psect); dummy = bfd_getl32 (ptr); ptr += 4; dummy += (PRIV (sections)[psect])->vma; - _bfd_vms_push (abfd, (uquad) dummy, (int) psect); + _bfd_vms_push (abfd, (uquad) dummy, psect); } break; @@ -1457,7 +1641,7 @@ static unsigned char * tir_ctl (bfd * abfd, unsigned char *ptr) { unsigned long dummy; - unsigned int psect; + int psect; #if VMS_DEBUG _bfd_vms_debug (5, "tir_ctl %d\n", *ptr); @@ -1468,10 +1652,10 @@ tir_ctl (bfd * abfd, unsigned char *ptr) case TIR_S_C_CTL_SETRB: /* Set relocation base: pop stack, set image location counter arg: none. */ - dummy = _bfd_vms_pop (abfd, (int *) &psect); - if (psect >= PRIV (section_count)) + dummy = _bfd_vms_pop (abfd, &psect); + if ((unsigned int) psect >= PRIV (section_count)) alloc_section (abfd, psect); - image_set_ptr (abfd, (int) psect, (uquad) dummy); + image_set_ptr (abfd, psect, (uquad) dummy); break; case TIR_S_C_CTL_AUGRB: @@ -1492,7 +1676,7 @@ tir_ctl (bfd * abfd, unsigned char *ptr) case TIR_S_C_CTL_STLOC: /* Set location: pop index, restore location counter from index arg: none. */ - dummy = _bfd_vms_pop (abfd, (int *) &psect); + dummy = _bfd_vms_pop (abfd, &psect); (*_bfd_error_handler) (_("%s: not fully implemented"), tir_cmd_name (ptr[-1])); break; @@ -1500,7 +1684,7 @@ tir_ctl (bfd * abfd, unsigned char *ptr) case TIR_S_C_CTL_STKDL: /* Stack defined location: pop index, push location counter from index arg: none. */ - dummy = _bfd_vms_pop (abfd, (int *) &psect); + dummy = _bfd_vms_pop (abfd, &psect); (*_bfd_error_handler) (_("%s: not fully implemented"), tir_cmd_name (ptr[-1])); break; @@ -1517,7 +1701,7 @@ tir_ctl (bfd * abfd, unsigned char *ptr) static unsigned char * tir_cmd (bfd * abfd, unsigned char *ptr) { - struct + static const struct { int mincod; int maxcod; @@ -1535,7 +1719,7 @@ tir_cmd (bfd * abfd, unsigned char *ptr) #if VMS_DEBUG _bfd_vms_debug (4, "tir_cmd %d/%x\n", *ptr, *ptr); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif if (*ptr & 0x80) @@ -1570,13 +1754,13 @@ tir_cmd (bfd * abfd, unsigned char *ptr) /* Handle command from ETIR section. */ static int -etir_cmd (bfd * abfd, int cmd, unsigned char *ptr) +etir_cmd (bfd *abfd, int cmd, unsigned char *ptr, int *quarter_relocs) { - static struct + static const struct { int mincod; int maxcod; - bfd_boolean (*explain) (bfd *, int, unsigned char *); + bfd_boolean (*explain) (bfd *, int, unsigned char *, int *); } etir_table[] = { @@ -1591,8 +1775,8 @@ etir_cmd (bfd * abfd, int cmd, unsigned char *ptr) int i = 0; #if VMS_DEBUG - _bfd_vms_debug (4, "etir_cmd %d/%x\n", cmd, cmd); - _bfd_hexdump (8, ptr, 16, (int) ptr); + _bfd_vms_debug (4, "etir_cmd: %s(%d)\n", cmd_name (cmd), cmd); + _bfd_hexdump (8, ptr, 16, (long) ptr); #endif while (etir_table[i].mincod >= 0) @@ -1600,7 +1784,7 @@ etir_cmd (bfd * abfd, int cmd, unsigned char *ptr) if ( (etir_table[i].mincod <= cmd) && (cmd <= etir_table[i].maxcod)) { - if (!etir_table[i].explain (abfd, cmd, ptr)) + if (!etir_table[i].explain (abfd, cmd, ptr, quarter_relocs)) return -1; break; } @@ -1608,7 +1792,7 @@ etir_cmd (bfd * abfd, int cmd, unsigned char *ptr) } #if VMS_DEBUG - _bfd_vms_debug (4, "etir_cmd: = 0\n"); + _bfd_vms_debug (4, "etir_cmd: result = 0\n"); #endif return 0; } @@ -1643,28 +1827,67 @@ analyze_tir (bfd * abfd, unsigned char *ptr, unsigned int length) static int analyze_etir (bfd * abfd, unsigned char *ptr, unsigned int length) { - int cmd; - unsigned char *maxptr; + unsigned char *maxptr = ptr + length; + /* Relocations are made of 1, 2 or 4 ETIR commands. + We therefore count them using quarters. */ + int quarter_relocs = 0; int result = 0; #if VMS_DEBUG _bfd_vms_debug (3, "analyze_etir: %d bytes\n", length); #endif - maxptr = ptr + length; - while (ptr < maxptr) { - cmd = bfd_getl16 (ptr); - length = bfd_getl16 (ptr + 2); - result = etir_cmd (abfd, cmd, ptr+4); + int cmd = bfd_getl16 (ptr); + int cmd_length = bfd_getl16 (ptr + 2); + result = etir_cmd (abfd, cmd, ptr + 4, &quarter_relocs); if (result != 0) break; - ptr += length; + + /* If we have a relocation, we record its length to size + future buffers and bump the reloc count of the section. */ + if (quarter_relocs) + { + vms_section_data (PRIV (image_section))->reloc_size += cmd_length; + abfd->flags |= HAS_RELOC; + + if (quarter_relocs == 4) + { + PRIV (image_section)->reloc_count++; + +#if VMS_DEBUG + _bfd_vms_debug (4, "-> reloc %d at 0x%x\n", + PRIV (image_section)->reloc_count-1, + ptr - (maxptr - length)); +#endif + + quarter_relocs = 0; + } + else if (quarter_relocs > 4) + { + +#if VMS_DEBUG + _bfd_vms_debug (4, "Reloc count error (%d) in section %s\n", + PRIV (image_section)->reloc_count, + PRIV (image_section)->name); +#endif + + quarter_relocs = 0; + } + } + + /* If we have a Store Immediate, we reserve space for the + count argument. */ + else if (cmd == ETIR_S_C_STO_IMM) + vms_section_data (PRIV (image_section))->reloc_size + += ETIR_S_C_HEADER_SIZE + 4; + + ptr += cmd_length; } #if VMS_DEBUG - _bfd_vms_debug (3, "analyze_etir: = %d\n", result); + _bfd_vms_debug (3, "analyze_etir: result = %d\n", result); #endif return result; @@ -1685,8 +1908,8 @@ _bfd_vms_slurp_tir (bfd * abfd, int objtype) switch (objtype) { case EOBJ_S_C_ETIR: - PRIV (vms_rec) += 4; /* Skip type, size. */ - PRIV (rec_size) -= 4; + PRIV (vms_rec) += ETIR_S_C_HEADER_SIZE; + PRIV (rec_size) -= ETIR_S_C_HEADER_SIZE; result = analyze_etir (abfd, PRIV (vms_rec), (unsigned) PRIV (rec_size)); break; case OBJ_S_C_TIR: @@ -1702,33 +1925,361 @@ _bfd_vms_slurp_tir (bfd * abfd, int objtype) return result; } -/* Process EDBG record - Return 0 on success, -1 on error - - Not implemented yet. */ + /* Slurp relocs from ETIR sections and (temporarily) save them + in the per-section reloc buffer. */ int -_bfd_vms_slurp_dbg (bfd * abfd, int objtype ATTRIBUTE_UNUSED) +_bfd_vms_slurp_relocs (bfd *abfd) { + struct vms_section_data_struct *vsd; + unsigned char *begin = PRIV (vms_rec) + 4; + unsigned char *end = PRIV (vms_rec) + PRIV (rec_size); + unsigned char *ptr; + int cmd, length, slurped_length; + #if VMS_DEBUG - _bfd_vms_debug (2, "DBG/EDBG\n"); + _bfd_vms_debug (3, "_bfd_vms_slurp_relocs: %d bytes\n", PRIV (rec_size)); +#endif + + for (ptr = begin; ptr < end; ptr += length) + { + cmd = bfd_getl16 (ptr); + length = bfd_getl16 (ptr + 2); + slurped_length = length; + + switch (cmd) + { + case ETIR_S_C_STA_PQ: /* ALPHA_R_REF{LONG|QUAD}, others part 1 */ + /* This one is special as it is both part of the section header + and of the ALPHA_R_REFLONG and ALPHA_R_REFQUAD relocations. */ + if (bfd_getl16 (ptr + length) == ETIR_S_C_CTL_SETRB) + { + int psect = bfd_getl32 (ptr + ETIR_S_C_HEADER_SIZE); + PRIV (image_section) = PRIV (sections)[psect]; + continue; + } + + case ETIR_S_C_STA_GBL: /* ALPHA_R_REFLONG und_section, step 1 */ + /* ALPHA_R_REFQUAD und_section, step 1 */ + break; + + case ETIR_S_C_STA_LW: /* ALPHA_R_REFLONG und_section, step 2 */ + /* ALPHA_R_REFLONG abs_section, step 1 */ + /* This one is special as it is both part of the section header + and of the ALPHA_R_REFLONG relocation. */ + if (bfd_getl16 (ptr + length) == ETIR_S_C_CTL_DFLOC) + { + PRIV (image_section) = PRIV (dst_section); + continue; + } + + case ETIR_S_C_STA_QW: /* ALPHA_R_REFQUAD und_section, step 2 */ + /* ALPHA_R_REFQUAD abs_section, step 1 */ + + case ETIR_S_C_STO_LW: /* ALPHA_R_REFLONG und_section, step 4 */ + /* ALPHA_R_REFLONG abs_section, step 2 */ + /* ALPHA_R_REFLONG others, step 2 */ + + case ETIR_S_C_STO_QW: /* ALPHA_R_REFQUAD und_section, step 4 */ + /* ALPHA_R_REFQUAD abs_section, step 2 */ + + case ETIR_S_C_STO_OFF: /* ALPHA_R_REFQUAD others, step 2 */ + + case ETIR_S_C_OPR_ADD: /* ALPHA_R_REFLONG und_section, step 3 */ + /* ALPHA_R_REFQUAD und_section, step 3 */ + + case ETIR_S_C_STO_CA: /* ALPHA_R_CODEADDR */ + case ETIR_S_C_STO_GBL: /* ALPHA_R_REFQUAD und_section */ + case ETIR_S_C_STO_GBL_LW: /* ALPHA_R_REFLONG und_section */ + case ETIR_S_C_STC_LP_PSB: /* ALPHA_R_LINKAGE */ + case ETIR_S_C_STC_NOP_GBL: /* ALPHA_R_NOP */ + case ETIR_S_C_STC_BSR_GBL: /* ALPHA_R_BSR */ + case ETIR_S_C_STC_LDA_GBL: /* ALPHA_R_LDA */ + case ETIR_S_C_STC_BOH_GBL: /* ALPHA_R_BOH */ + break; + + case ETIR_S_C_STO_IMM: + if (PRIV (image_section)->reloc_count == 0) + continue; + /* This is not a relocation, but we nevertheless slurp the + count argument. We'll use it to compute the addresses + of the relocations. */ + slurped_length = ETIR_S_C_HEADER_SIZE + 4; + break; + + default: + continue; + } + + vsd = vms_section_data (PRIV (image_section)); + memcpy (vsd->reloc_stream + vsd->reloc_offset, ptr, slurped_length); + vsd->reloc_offset += slurped_length; + if (vsd->reloc_offset > vsd->reloc_size) + { + (*_bfd_error_handler) (_("Reloc size error in section %s"), + PRIV (image_section)->name); + return -1; + } + } + +#if VMS_DEBUG + _bfd_vms_debug (3, "_bfd_vms_slurp_relocs: result = 0\n"); #endif - abfd->flags |= (HAS_DEBUG | HAS_LINENO); return 0; } -/* Process ETBT record - Return 0 on success, -1 on error - - Not implemented yet. */ +/* Decode relocs from the reloc buffer of the specified section + and internalize them in the specified buffer. */ int -_bfd_vms_slurp_tbt (bfd * abfd ATTRIBUTE_UNUSED, - int objtype ATTRIBUTE_UNUSED) +_bfd_vms_decode_relocs (bfd *abfd, arelent *relocs, asection *section, + asymbol **symbols ATTRIBUTE_UNUSED) { + int saved_cmd, saved_sym_offset, saved_sec_offset, saved_addend_offset; + int cmd, sym_offset, sec_offset, address_offset, addend_offset; + struct vms_section_data_struct *vsd = vms_section_data (section); + bfd_reloc_code_real_type reloc_code; + vms_symbol_entry *entry; + bfd_vma vaddr = 0; + unsigned char *begin = vsd->reloc_stream; + unsigned char *end = vsd->reloc_stream + vsd->reloc_size; + unsigned char *ptr, *arg_ptr; + const char *name; + int length; + #if VMS_DEBUG - _bfd_vms_debug (2, "TBT/ETBT\n"); + _bfd_vms_debug (3, "_bfd_vms_decode_relocs: %d bytes\n", vsd->reloc_size); +#endif + + #define PUSH_CMD() \ + { \ + saved_cmd = cmd; \ + saved_sym_offset = sym_offset - length; \ + saved_sec_offset = sec_offset - length; \ + saved_addend_offset = addend_offset - length; \ + continue; \ + } + + #define POP_CMD() \ + { \ + cmd = saved_cmd; \ + saved_cmd = ETIR_S_C_MAXSTCCOD + 1; \ + sym_offset = saved_sym_offset; \ + sec_offset = saved_sec_offset; \ + addend_offset= saved_addend_offset; \ + } + + #define CMD_PUSHED (saved_cmd != ETIR_S_C_MAXSTCCOD + 1) + + #define NO_OFFSET -128 + + saved_cmd = ETIR_S_C_MAXSTCCOD + 1; + saved_sym_offset = NO_OFFSET; + saved_sec_offset = NO_OFFSET; + saved_addend_offset = NO_OFFSET; + + for (ptr = begin; ptr < end; ptr += length) + { + cmd = bfd_getl16 (ptr); + length = bfd_getl16 (ptr + 2); + + arg_ptr = ptr + ETIR_S_C_HEADER_SIZE; + sym_offset = NO_OFFSET; + sec_offset = NO_OFFSET; + address_offset = NO_OFFSET; + addend_offset = NO_OFFSET; + + switch (cmd) + { + case ETIR_S_C_STA_GBL: /* ALPHA_R_REFLONG und_section, step 1 */ + /* ALPHA_R_REFQUAD und_section, step 1 */ + sym_offset = 0; + PUSH_CMD () + + case ETIR_S_C_STA_PQ: /* ALPHA_R_REF{LONG|QUAD}, others part 1 */ + sec_offset = 0; + addend_offset = 4; + PUSH_CMD () + + case ETIR_S_C_STA_LW: /* ALPHA_R_REFLONG abs_section, step 1 */ + /* ALPHA_R_REFLONG und_section, step 2 */ + if (CMD_PUSHED) + { + POP_CMD () + if (cmd != ETIR_S_C_STA_GBL) + { + (*_bfd_error_handler) (_("Unknown reloc %s + %s"), + cmd_name (cmd), + cmd_name (ETIR_S_C_STA_LW)); + return 0; + } + cmd = ETIR_S_C_STA_LW; + } + addend_offset = 0; + PUSH_CMD () + + case ETIR_S_C_STA_QW: /* ALPHA_R_REFQUAD abs_section, step 1 */ + /* ALPHA_R_REFQUAD und_section, step 2 */ + if (CMD_PUSHED) + { + POP_CMD () + if (cmd != ETIR_S_C_STA_GBL) + { + (*_bfd_error_handler) (_("Unknown reloc %s + %s"), + cmd_name (cmd), + cmd_name (ETIR_S_C_STA_QW)); + return 0; + } + cmd = ETIR_S_C_STA_QW; + } + addend_offset = 0; + PUSH_CMD () + + case ETIR_S_C_STO_LW: /* ALPHA_R_REFLONG und_section, step 4 */ + /* ALPHA_R_REFLONG abs_section, step 2 */ + /* ALPHA_R_REFLONG others, step 2 */ + POP_CMD () + if (cmd != ETIR_S_C_OPR_ADD + && cmd != ETIR_S_C_STA_LW + && cmd != ETIR_S_C_STA_PQ) + { + (*_bfd_error_handler) (_("Unknown reloc %s + %s"), + cmd_name (cmd), cmd_name (ETIR_S_C_STO_LW)); + return 0; + } + reloc_code = BFD_RELOC_32; + break; + + case ETIR_S_C_STO_QW: /* ALPHA_R_REFQUAD und_section, step 4 */ + /* ALPHA_R_REFQUAD abs_section, step 2 */ + POP_CMD () + if (cmd != ETIR_S_C_OPR_ADD && cmd != ETIR_S_C_STA_QW) + { + (*_bfd_error_handler) (_("Unknown reloc %s + %s"), + cmd_name (cmd), cmd_name (ETIR_S_C_STO_QW)); + return 0; + } + reloc_code = BFD_RELOC_64; + break; + + case ETIR_S_C_STO_OFF: /* ALPHA_R_REFQUAD others, step 2 */ + POP_CMD () + if (cmd != ETIR_S_C_STA_PQ) + { + (*_bfd_error_handler) (_("Unknown reloc %s + %s"), + cmd_name (cmd), cmd_name (ETIR_S_C_STO_OFF)); + return 0; + } + reloc_code = BFD_RELOC_64; + break; + + case ETIR_S_C_OPR_ADD: /* ALPHA_R_REFLONG und_section, step 3 */ + /* ALPHA_R_REFQUAD und_section, step 3 */ + POP_CMD () + if (cmd != ETIR_S_C_STA_LW && cmd != ETIR_S_C_STA_QW) + { + (*_bfd_error_handler) (_("Unknown reloc %s + %s"), + cmd_name (cmd), cmd_name (ETIR_S_C_OPR_ADD)); + return 0; + } + cmd = ETIR_S_C_OPR_ADD; + PUSH_CMD () + + case ETIR_S_C_STO_CA: /* ALPHA_R_CODEADDR */ + reloc_code = BFD_RELOC_ALPHA_CODEADDR; + sym_offset = 0; + break; + + case ETIR_S_C_STO_GBL: /* ALPHA_R_REFQUAD und_section */ + reloc_code = BFD_RELOC_64; + sym_offset = 0; + break; + + case ETIR_S_C_STO_GBL_LW: /* ALPHA_R_REFLONG und_section */ + reloc_code = BFD_RELOC_32; + sym_offset = 0; + break; + + case ETIR_S_C_STC_LP_PSB: /* ALPHA_R_LINKAGE */ + reloc_code = BFD_RELOC_ALPHA_LINKAGE; + sym_offset = 4; + break; + + case ETIR_S_C_STC_NOP_GBL: /* ALPHA_R_NOP */ + reloc_code = BFD_RELOC_ALPHA_NOP; + goto call_reloc; + + case ETIR_S_C_STC_BSR_GBL: /* ALPHA_R_BSR */ + reloc_code = BFD_RELOC_ALPHA_BSR; + goto call_reloc; + + case ETIR_S_C_STC_LDA_GBL: /* ALPHA_R_LDA */ + reloc_code = BFD_RELOC_ALPHA_LDA; + goto call_reloc; + + case ETIR_S_C_STC_BOH_GBL: /* ALPHA_R_BOH */ + reloc_code = BFD_RELOC_ALPHA_BOH; + goto call_reloc; + + call_reloc: + sym_offset = 32; + address_offset = 8; + addend_offset = 24; + break; + + case ETIR_S_C_STO_IMM: + vaddr += bfd_getl32 (arg_ptr); + length = ETIR_S_C_HEADER_SIZE + 4; + continue; + + default: + continue; + } + + relocs->howto = bfd_reloc_type_lookup (abfd, reloc_code); + + if (sym_offset > NO_OFFSET) + { + name = _bfd_vms_save_counted_string (arg_ptr + sym_offset); + entry = (vms_symbol_entry *) + bfd_hash_lookup (PRIV (vms_symbol_table), name, FALSE, FALSE); + if (entry == NULL) + { + (*_bfd_error_handler) (_("Unknown symbol %s in command %s"), + name, cmd_name (cmd)); + relocs->sym_ptr_ptr = NULL; + } + else + /* ??? This is a hack. We should point in 'symbols'. */ + relocs->sym_ptr_ptr = &entry->symbol; + } + else if (sec_offset > NO_OFFSET) + relocs->sym_ptr_ptr + = PRIV (sections)[bfd_getl32 (arg_ptr + sec_offset)]->symbol_ptr_ptr; + else + relocs->sym_ptr_ptr = NULL; + + if (address_offset > NO_OFFSET) + relocs->address = bfd_getl64 (arg_ptr + address_offset); + else + relocs->address = vaddr; + + if (addend_offset > NO_OFFSET) + relocs->addend = bfd_getl64 (arg_ptr + addend_offset); + else + relocs->addend = 0; + + vaddr += bfd_get_reloc_size (relocs->howto); + relocs++; + } + + #undef PUSH_CMD + #undef POP_CMD + #undef NO_OFFSET + +#if VMS_DEBUG + _bfd_vms_debug (3, "_bfd_vms_decode_relocs: result = 0\n"); #endif return 0; @@ -1750,6 +2301,20 @@ _bfd_vms_slurp_lnk (bfd * abfd ATTRIBUTE_UNUSED, return 0; } +/* WRITE ETIR SECTION + + This is still under construction and therefore not documented. */ + +static void start_etir_record (bfd *abfd, int index, uquad offset, + bfd_boolean justoffset); +static void start_first_etbt_record (bfd *abfd); +static void start_another_etbt_record (bfd *abfd); +static void sto_imm (bfd *abfd, bfd_size_type, unsigned char *, bfd_vma vaddr, + int index, const char *name); +static void end_etir_record (bfd *abfd); +static void etir_output_check (bfd *abfd, asection *section, bfd_vma vaddr, + int checklen); + /* Start ETIR record for section #index at virtual addr offset. */ static void @@ -1780,25 +2345,20 @@ end_etir_record (bfd * abfd) _bfd_vms_output_end (abfd); } -/* WRITE ETIR SECTION - - This is still under construction and therefore not documented. */ +/* Output a STO_IMM command for SSIZE bytes of data from CPR at virtual + address VADDR in section specified by INDEX and NAME. */ static void -sto_imm (bfd * abfd, vms_section *sptr, bfd_vma vaddr, int index) +sto_imm (bfd *abfd, bfd_size_type ssize, unsigned char *cptr, bfd_vma vaddr, + int index, const char *name) { - int size; - int ssize; - unsigned char *cptr; + bfd_size_type size; #if VMS_DEBUG - _bfd_vms_debug (8, "sto_imm %d bytes\n", sptr->size); - _bfd_hexdump (9, sptr->contents, (int) sptr->size, (int) vaddr); + _bfd_vms_debug (8, "sto_imm %d bytes\n", ssize); + _bfd_hexdump (9, cptr, (int) ssize, (int) vaddr); #endif - ssize = sptr->size; - cptr = sptr->contents; - while (ssize > 0) { /* Try all the rest. */ @@ -1808,11 +2368,14 @@ sto_imm (bfd * abfd, vms_section *sptr, bfd_vma vaddr, int index) { /* Doesn't fit, split ! */ end_etir_record (abfd); - start_etir_record (abfd, index, vaddr, FALSE); - /* Get max size. */ - size = _bfd_vms_output_check (abfd, 0); - /* More than what's left ? */ - if (size > ssize) + + if (name [0] && name[1] == 'v' && !strcmp (name, ".vmsdebug")) + start_another_etbt_record (abfd); + else + start_etir_record (abfd, index, vaddr, FALSE); + + size = _bfd_vms_output_check (abfd, 0); /* get max size */ + if (size > ssize) /* more than what's left ? */ size = ssize; } @@ -1827,8 +2390,63 @@ sto_imm (bfd * abfd, vms_section *sptr, bfd_vma vaddr, int index) #endif vaddr += size; - ssize -= size; cptr += size; + ssize -= size; + } +} + +/* Start ETBT record for section #index at virtual addr offset. */ + +static void +start_first_etbt_record (bfd *abfd) +{ + _bfd_vms_output_begin (abfd, EOBJ_S_C_ETBT, -1); + _bfd_vms_output_push (abfd); + + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_LW, -1); /* push start offset */ + _bfd_vms_output_long (abfd, (unsigned long) 0); + _bfd_vms_output_flush (abfd); + + _bfd_vms_output_begin (abfd, ETIR_S_C_CTL_DFLOC, -1); /* start = pop() */ + _bfd_vms_output_flush (abfd); +} + +static void +start_another_etbt_record (bfd *abfd) +{ + _bfd_vms_output_begin (abfd, EOBJ_S_C_ETBT, -1); + _bfd_vms_output_push (abfd); +} + +static void +etir_output_check (bfd *abfd, asection *section, bfd_vma vaddr, int checklen) +{ + if (_bfd_vms_output_check (abfd, checklen) < 0) + { + end_etir_record (abfd); + if (section->name[0] && section->name[1] == 'v' + && !strcmp (section->name, ".vmsdebug")) + start_another_etbt_record (abfd); + else + start_etir_record (abfd, section->index, vaddr, FALSE); + } +} + +/* Return whether RELOC must be deferred till the end. */ + +static int +defer_reloc_p (arelent *reloc) +{ + switch (reloc->howto->type) + { + case ALPHA_R_NOP: + case ALPHA_R_LDA: + case ALPHA_R_BSR: + case ALPHA_R_BOH: + return 1; + + default: + return 0; } } @@ -1838,8 +2456,6 @@ int _bfd_vms_write_tir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) { asection *section; - vms_section *sptr; - int nextoffset; #if VMS_DEBUG _bfd_vms_debug (2, "vms_write_tir (%p, %d)\n", abfd, objtype); @@ -1847,391 +2463,346 @@ _bfd_vms_write_tir (bfd * abfd, int objtype ATTRIBUTE_UNUSED) _bfd_vms_output_alignment (abfd, 4); - nextoffset = 0; PRIV (vms_linkage_index) = 1; - /* Dump all other sections. */ - section = abfd->sections; - - while (section != NULL) + for (section = abfd->sections; section; section = section->next) { - #if VMS_DEBUG _bfd_vms_debug (4, "writing %d. section '%s' (%d bytes)\n", section->index, section->name, (int) (section->size)); #endif + if (!(section->flags & SEC_HAS_CONTENTS) + || bfd_is_com_section (section)) + continue; + + if (!section->contents) + { + bfd_set_error (bfd_error_no_contents); + return -1; + } + + if (section->name[0] + && section->name[1] == 'v' + && !strcmp (section->name, ".vmsdebug")) + start_first_etbt_record (abfd); + else + start_etir_record (abfd, section->index, 0, FALSE); + if (section->flags & SEC_RELOC) { - int i; + bfd_vma curr_addr = 0; + unsigned char *curr_data = section->contents; + bfd_size_type size; + int pass2_needed = 0; + int pass2_in_progress = 0; + unsigned int irel; + + if (section->reloc_count <= 0) + (*_bfd_error_handler) + (_("SEC_RELOC with no relocs in section %s"), section->name); - if ((i = section->reloc_count) <= 0) - (*_bfd_error_handler) (_("SEC_RELOC with no relocs in section %s"), - section->name); #if VMS_DEBUG else { - arelent **rptr; + int i = section->reloc_count; + arelent **rptr = section->orelocation; _bfd_vms_debug (4, "%d relocations:\n", i); - rptr = section->orelocation; while (i-- > 0) { - _bfd_vms_debug (4, "sym %s in sec %s, value %08lx, addr %08lx, off %08lx, len %d: %s\n", + _bfd_vms_debug (4, "sym %s in sec %s, value %08lx, " + "addr %08lx, off %08lx, len %d: %s\n", (*(*rptr)->sym_ptr_ptr)->name, (*(*rptr)->sym_ptr_ptr)->section->name, (long) (*(*rptr)->sym_ptr_ptr)->value, (*rptr)->address, (*rptr)->addend, bfd_get_reloc_size ((*rptr)->howto), - (*rptr)->howto->name); + ( *rptr)->howto->name); rptr++; } } #endif - } - if ((section->flags & SEC_HAS_CONTENTS) - && (! bfd_is_com_section (section))) - { - /* Virtual addr in section. */ - bfd_vma vaddr; - - sptr = _bfd_get_vms_section (abfd, section->index); - if (sptr == NULL) + new_pass: + for (irel = 0; irel < section->reloc_count; irel++) { - bfd_set_error (bfd_error_no_contents); - return -1; - } + struct evax_private_udata_struct *udata; + arelent *rptr = section->orelocation [irel]; + bfd_vma addr = rptr->address; + asymbol *sym = *rptr->sym_ptr_ptr; + asection *sec = sym->section; + int defer = defer_reloc_p (rptr); + unsigned int slen; + char *hash; + + if (pass2_in_progress) + { + /* Non-deferred relocs have already been output. */ + if (!defer) + continue; + } + else + { + /* Deferred relocs must be output at the very end. */ + if (defer) + { + pass2_needed = 1; + continue; + } - vaddr = (bfd_vma) (sptr->offset); + /* Regular relocs are intertwined with binary data. */ + if (curr_addr > addr) + (*_bfd_error_handler) (_("Size error in section %s"), + section->name); + size = addr - curr_addr; + sto_imm (abfd, size, curr_data, curr_addr, + section->index, section->name); + curr_data += size; + curr_addr += size; + } - start_etir_record (abfd, section->index, (uquad) sptr->offset, - FALSE); + size = bfd_get_reloc_size (rptr->howto); - while (sptr != NULL) - { - /* One STA_PQ, CTL_SETRB per vms_section. */ - if (section->flags & SEC_RELOC) - { - /* Check for relocs. */ - arelent **rptr = section->orelocation; - int i = section->reloc_count; + switch (rptr->howto->type) + { + case ALPHA_R_IGNORE: + break; - for (;;) + case ALPHA_R_REFLONG: + if (bfd_is_und_section (sym->section)) { - bfd_size_type addr = (*rptr)->address; - bfd_size_type len = bfd_get_reloc_size ((*rptr)->howto); - if (sptr->offset < addr) - { - /* Sptr starts before reloc. */ - bfd_size_type before = addr - sptr->offset; - if (sptr->size <= before) - { - /* Complete before. */ - sto_imm (abfd, sptr, vaddr, section->index); - vaddr += sptr->size; - break; - } - else - { - /* Partly before. */ - int after = sptr->size - before; - - sptr->size = before; - sto_imm (abfd, sptr, vaddr, section->index); - vaddr += sptr->size; - sptr->contents += before; - sptr->offset += before; - sptr->size = after; - } - } - else if (sptr->offset == addr) + bfd_vma addend = rptr->addend; + slen = strlen ((char *) sym->name); + hash = _bfd_vms_length_hash_symbol + (abfd, sym->name, EOBJ_S_C_SYMSIZ); + etir_output_check (abfd, section, curr_addr, slen); + if (addend) { - /* Sptr starts at reloc. */ - asymbol *sym = *(*rptr)->sym_ptr_ptr; - asection *sec = sym->section; - - switch ((*rptr)->howto->type) - { - case ALPHA_R_IGNORE: - break; - - case ALPHA_R_REFLONG: - { - if (bfd_is_und_section (sym->section)) - { - int slen = strlen ((char *) sym->name); - char *hash; - - if (_bfd_vms_output_check (abfd, slen) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_GBL_LW, - -1); - hash = (_bfd_vms_length_hash_symbol - (abfd, sym->name, EOBJ_S_C_SYMSIZ)); - _bfd_vms_output_counted (abfd, hash); - _bfd_vms_output_flush (abfd); - } - else if (bfd_is_abs_section (sym->section)) - { - if (_bfd_vms_output_check (abfd, 16) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STA_LW, - -1); - _bfd_vms_output_quad (abfd, - (uquad) sym->value); - _bfd_vms_output_flush (abfd); - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_LW, - -1); - _bfd_vms_output_flush (abfd); - } - else - { - if (_bfd_vms_output_check (abfd, 32) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STA_PQ, - -1); - _bfd_vms_output_long (abfd, - (unsigned long) (sec->index)); - _bfd_vms_output_quad (abfd, - ((uquad) (*rptr)->addend - + (uquad) sym->value)); - _bfd_vms_output_flush (abfd); - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_LW, - -1); - _bfd_vms_output_flush (abfd); - } - } - break; - - case ALPHA_R_REFQUAD: - { - if (bfd_is_und_section (sym->section)) - { - int slen = strlen ((char *) sym->name); - char *hash; - - if (_bfd_vms_output_check (abfd, slen) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_GBL, - -1); - hash = (_bfd_vms_length_hash_symbol - (abfd, sym->name, EOBJ_S_C_SYMSIZ)); - _bfd_vms_output_counted (abfd, hash); - _bfd_vms_output_flush (abfd); - } - else if (bfd_is_abs_section (sym->section)) - { - if (_bfd_vms_output_check (abfd, 16) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STA_QW, - -1); - _bfd_vms_output_quad (abfd, - (uquad) sym->value); - _bfd_vms_output_flush (abfd); - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_QW, - -1); - _bfd_vms_output_flush (abfd); - } - else - { - if (_bfd_vms_output_check (abfd, 32) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STA_PQ, - -1); - _bfd_vms_output_long (abfd, - (unsigned long) (sec->index)); - _bfd_vms_output_quad (abfd, - ((uquad) (*rptr)->addend - + (uquad) sym->value)); - _bfd_vms_output_flush (abfd); - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_OFF, - -1); - _bfd_vms_output_flush (abfd); - } - } - break; - - case ALPHA_R_HINT: - { - int hint_size; - char *hash ATTRIBUTE_UNUSED; - - hint_size = sptr->size; - sptr->size = len; - sto_imm (abfd, sptr, vaddr, section->index); - sptr->size = hint_size; - } - break; - case ALPHA_R_LINKAGE: - { - char *hash; - - if (_bfd_vms_output_check (abfd, 64) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STC_LP_PSB, - -1); - _bfd_vms_output_long (abfd, - (unsigned long) PRIV (vms_linkage_index)); - PRIV (vms_linkage_index) += 2; - hash = (_bfd_vms_length_hash_symbol - (abfd, sym->name, EOBJ_S_C_SYMSIZ)); - _bfd_vms_output_counted (abfd, hash); - _bfd_vms_output_byte (abfd, 0); - _bfd_vms_output_flush (abfd); - } - break; - - case ALPHA_R_CODEADDR: - { - int slen = strlen ((char *) sym->name); - char *hash; - if (_bfd_vms_output_check (abfd, slen) < 0) - { - end_etir_record (abfd); - start_etir_record (abfd, - section->index, - vaddr, FALSE); - } - _bfd_vms_output_begin (abfd, - ETIR_S_C_STO_CA, - -1); - hash = (_bfd_vms_length_hash_symbol - (abfd, sym->name, EOBJ_S_C_SYMSIZ)); - _bfd_vms_output_counted (abfd, hash); - _bfd_vms_output_flush (abfd); - } - break; - - default: - (*_bfd_error_handler) (_("Unhandled relocation %s"), - (*rptr)->howto->name); - break; - } - - vaddr += len; - - if (len == sptr->size) - { - break; - } - else - { - sptr->contents += len; - sptr->offset += len; - sptr->size -= len; - i--; - rptr++; - } + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_GBL, -1); + _bfd_vms_output_counted (abfd, hash); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_LW, -1); + _bfd_vms_output_long (abfd, (unsigned long) addend); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_OPR_ADD, -1); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_LW, -1); + _bfd_vms_output_flush (abfd); } else { - /* Sptr starts after reloc. */ - i--; - /* Check next reloc. */ - rptr++; + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_GBL_LW, -1); + _bfd_vms_output_counted (abfd, hash); + _bfd_vms_output_flush (abfd); } + } + else if (bfd_is_abs_section (sym->section)) + { + etir_output_check (abfd, section, curr_addr, 16); + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_LW, -1); + _bfd_vms_output_long (abfd, (unsigned long) sym->value); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_LW, -1); + _bfd_vms_output_flush (abfd); + } + else + { + etir_output_check (abfd, section, curr_addr, 32); + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_PQ, -1); + _bfd_vms_output_long (abfd, (unsigned long) sec->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->addend + + (uquad) sym->value); + _bfd_vms_output_flush (abfd); + /* ??? Table B-8 of the OpenVMS Linker Utilily Manual + says that we should have a ETIR_S_C_STO_OFF here. + But the relocation would not be BFD_RELOC_32 then. + This case is very likely unreachable. */ + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_LW, -1); + _bfd_vms_output_flush (abfd); + } + break; - if (i == 0) + case ALPHA_R_REFQUAD: + if (bfd_is_und_section (sym->section)) + { + bfd_vma addend = rptr->addend; + slen = strlen ((char *) sym->name); + hash = _bfd_vms_length_hash_symbol + (abfd, sym->name, EOBJ_S_C_SYMSIZ); + etir_output_check (abfd, section, curr_addr, slen); + if (addend) + { + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_GBL, -1); + _bfd_vms_output_counted (abfd, hash); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_QW, -1); + _bfd_vms_output_quad (abfd, (uquad) addend); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_OPR_ADD, -1); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_QW, -1); + _bfd_vms_output_flush (abfd); + } + else { - /* All reloc checked. */ - if (sptr->size > 0) - { - /* Dump rest. */ - sto_imm (abfd, sptr, vaddr, section->index); - vaddr += sptr->size; - } - break; + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_GBL, -1); + _bfd_vms_output_counted (abfd, hash); + _bfd_vms_output_flush (abfd); } } + else if (bfd_is_abs_section (sym->section)) + { + etir_output_check (abfd, section, curr_addr, 16); + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_QW, -1); + _bfd_vms_output_quad (abfd, (uquad) sym->value); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_QW, -1); + _bfd_vms_output_flush (abfd); + } + else + { + etir_output_check (abfd, section, curr_addr, 32); + _bfd_vms_output_begin (abfd, ETIR_S_C_STA_PQ, -1); + _bfd_vms_output_long (abfd, (unsigned long) sec->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->addend + + (uquad) sym->value); + _bfd_vms_output_flush (abfd); + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_OFF, -1); + _bfd_vms_output_flush (abfd); + } + break; + + case ALPHA_R_HINT: + sto_imm (abfd, size, curr_data, curr_addr, + section->index, section->name); + break; + + case ALPHA_R_LINKAGE: + etir_output_check (abfd, section, curr_addr, 64); + _bfd_vms_output_begin (abfd, ETIR_S_C_STC_LP_PSB, -1); + _bfd_vms_output_long + (abfd, (unsigned long) PRIV (vms_linkage_index)); + PRIV (vms_linkage_index) += 2; + hash = _bfd_vms_length_hash_symbol + (abfd, sym->name, EOBJ_S_C_SYMSIZ); + _bfd_vms_output_counted (abfd, hash); + _bfd_vms_output_byte (abfd, 0); + _bfd_vms_output_flush (abfd); + break; + + case ALPHA_R_CODEADDR: + slen = strlen ((char *) sym->name); + hash = _bfd_vms_length_hash_symbol + (abfd, sym->name, EOBJ_S_C_SYMSIZ); + etir_output_check (abfd, section, curr_addr, slen); + _bfd_vms_output_begin (abfd, ETIR_S_C_STO_CA, -1); + _bfd_vms_output_counted (abfd, hash); + _bfd_vms_output_flush (abfd); + break; + + case ALPHA_R_NOP: + udata + = (struct evax_private_udata_struct *) rptr->sym_ptr_ptr; + etir_output_check (abfd, section, curr_addr, + 32 + 1 + strlen (udata->origname)); + _bfd_vms_output_begin (abfd, ETIR_S_C_STC_NOP_GBL, -1); + _bfd_vms_output_long (abfd, (unsigned long) udata->lkindex); + _bfd_vms_output_long + (abfd, (unsigned long) udata->enbsym->section->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->address); + _bfd_vms_output_long (abfd, (unsigned long) 0x47ff041f); + _bfd_vms_output_long + (abfd, (unsigned long) udata->enbsym->section->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->addend); + _bfd_vms_output_counted + (abfd, _bfd_vms_length_hash_symbol + (abfd, udata->origname, EOBJ_S_C_SYMSIZ)); + _bfd_vms_output_flush (abfd); + break; + + case ALPHA_R_BSR: + (*_bfd_error_handler) (_("Spurious ALPHA_R_BSR reloc")); + break; + + case ALPHA_R_LDA: + udata + = (struct evax_private_udata_struct *) rptr->sym_ptr_ptr; + etir_output_check (abfd, section, curr_addr, + 32 + 1 + strlen (udata->origname)); + _bfd_vms_output_begin (abfd, ETIR_S_C_STC_LDA_GBL, -1); + _bfd_vms_output_long + (abfd, (unsigned long) udata->lkindex + 1); + _bfd_vms_output_long + (abfd, (unsigned long) udata->enbsym->section->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->address); + _bfd_vms_output_long (abfd, (unsigned long) 0x237B0000); + _bfd_vms_output_long + (abfd, (unsigned long) udata->bsym->section->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->addend); + _bfd_vms_output_counted + (abfd, _bfd_vms_length_hash_symbol + (abfd, udata->origname, EOBJ_S_C_SYMSIZ)); + _bfd_vms_output_flush (abfd); + break; + + case ALPHA_R_BOH: + udata + = (struct evax_private_udata_struct *) rptr->sym_ptr_ptr; + etir_output_check (abfd, section, curr_addr, + 32 + 1 + strlen (udata->origname)); + _bfd_vms_output_begin (abfd, ETIR_S_C_STC_BOH_GBL, -1); + _bfd_vms_output_long (abfd, (unsigned long) udata->lkindex); + _bfd_vms_output_long + (abfd, (unsigned long) udata->enbsym->section->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->address); + _bfd_vms_output_long (abfd, (unsigned long) 0xD3400000); + _bfd_vms_output_long + (abfd, (unsigned long) udata->enbsym->section->index); + _bfd_vms_output_quad (abfd, (uquad) rptr->addend); + _bfd_vms_output_counted + (abfd, _bfd_vms_length_hash_symbol + (abfd, udata->origname, EOBJ_S_C_SYMSIZ)); + _bfd_vms_output_flush (abfd); + break; + + default: + (*_bfd_error_handler) (_("Unhandled relocation %s"), + rptr->howto->name); + break; } - else + + curr_data += size; + curr_addr += size; + } /* End of relocs loop. */ + + if (!pass2_in_progress) + { + /* Output rest of section. */ + if (curr_addr > section->size) + (*_bfd_error_handler) (_("Size error in section %s"), + section->name); + size = section->size - curr_addr; + sto_imm (abfd, size, curr_data, curr_addr, + section->index, section->name); + curr_data += size; + curr_addr += size; + + if (pass2_needed) { - /* No relocs, just dump. */ - sto_imm (abfd, sptr, vaddr, section->index); - vaddr += sptr->size; + pass2_in_progress = 1; + goto new_pass; } - - sptr = sptr->next; } - - end_etir_record (abfd); } + + else /* (section->flags & SEC_RELOC) */ + sto_imm (abfd, section->size, section->contents, 0, + section->index, section->name); - section = section->next; + end_etir_record (abfd); } _bfd_vms_output_alignment (abfd, 2); return 0; } - -/* Write traceback data for bfd abfd. */ - -int -_bfd_vms_write_tbt (bfd * abfd ATTRIBUTE_UNUSED, - int objtype ATTRIBUTE_UNUSED) -{ -#if VMS_DEBUG - _bfd_vms_debug (2, "vms_write_tbt (%p, %d)\n", abfd, objtype); -#endif - - return 0; -} - -/* Write debug info for bfd abfd. */ - -int -_bfd_vms_write_dbg (bfd * abfd ATTRIBUTE_UNUSED, - int objtype ATTRIBUTE_UNUSED) -{ -#if VMS_DEBUG - _bfd_vms_debug (2, "vms_write_dbg (%p, objtype)\n", abfd, objtype); -#endif - - return 0; -} diff --git a/bfd/vms.c b/bfd/vms.c index 457aea8..61f485e 100644 --- a/bfd/vms.c +++ b/bfd/vms.c @@ -1,7 +1,9 @@ /* 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, 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + + Main file. Written by Klaus K"ampf (kkaempf@rmi.de) @@ -20,6 +22,14 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#ifdef VMS +#include +#include +#include +#define RME$C_SETRFM 0x00000001 +#include +#endif + #include "sysdep.h" #include "bfd.h" #include "bfdlink.h" @@ -27,51 +37,148 @@ #include "vms.h" +static bfd_boolean vms_initialize (bfd *); +static bfd_boolean fill_section_ptr (struct bfd_hash_entry *, PTR); +static bfd_boolean vms_fixup_sections (bfd *); +static bfd_boolean copy_symbols (struct bfd_hash_entry *, PTR); +static bfd_reloc_status_type reloc_nil (bfd *, arelent *, asymbol *, PTR, + asection *, bfd *, char **); +static int vms_slurp_module (bfd *abfd); +static int vms_slurp_image (bfd *abfd); +static const struct bfd_target *vms_object_p (bfd *abfd); +static const struct bfd_target *vms_archive_p (bfd *abfd); +static bfd_boolean vms_mkobject (bfd *abfd); +static bfd_boolean vms_write_object_contents (bfd *abfd); +static void free_reloc_stream (bfd *abfd, asection *section, void *data); +static bfd_boolean vms_close_and_cleanup (bfd *abfd); +static bfd_boolean vms_bfd_free_cached_info (bfd *abfd); +static bfd_boolean vms_new_section_hook (bfd *abfd, asection *section); +static bfd_boolean vms_get_section_contents + (bfd *abfd, asection *section, PTR x1, file_ptr x2, bfd_size_type x3); +static bfd_boolean vms_get_section_contents_in_window + (bfd *abfd, asection *section, bfd_window *w, file_ptr offset, + bfd_size_type count); +static bfd_boolean vms_bfd_copy_private_bfd_data (bfd *src, bfd *dest); +static bfd_boolean vms_bfd_copy_private_section_data + (bfd *srcbfd, asection *srcsec, bfd *dstbfd, asection *dstsec); +static bfd_boolean vms_bfd_copy_private_symbol_data + (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym); +static bfd_boolean vms_bfd_print_private_bfd_data (bfd *abfd, void *file); +static char *vms_core_file_failing_command (bfd *abfd); +static int vms_core_file_failing_signal (bfd *abfd); +static bfd_boolean vms_core_file_matches_executable_p (bfd *abfd, bfd *bbfd); +static bfd_boolean vms_slurp_armap (bfd *abfd); +static bfd_boolean vms_slurp_extended_name_table (bfd *abfd); +static bfd_boolean vms_construct_extended_name_table + (bfd *abfd, char **tabloc, bfd_size_type *tablen, const char **name); +static void vms_truncate_arname (bfd *abfd, const char *pathname, char *arhdr); +static bfd_boolean vms_write_armap + (bfd *arch, unsigned int elen, struct orl *map, unsigned int cnt, int idx); +static PTR vms_read_ar_hdr (bfd *abfd); +static bfd *vms_get_elt_at_index (bfd *abfd, symindex index); +static bfd *vms_openr_next_archived_file (bfd *arch, bfd *prev); +static bfd_boolean vms_update_armap_timestamp (bfd *abfd); +static int vms_generic_stat_arch_elt (bfd *, struct stat *); +static long vms_get_symtab_upper_bound (bfd *abfd); +static long vms_canonicalize_symtab (bfd *abfd, asymbol **symbols); +static void vms_print_symbol (bfd *abfd, PTR file, asymbol *symbol, + bfd_print_symbol_type how); +static void vms_get_symbol_info (bfd *abfd, asymbol *symbol, symbol_info *ret); +static bfd_boolean vms_bfd_is_local_label_name (bfd *abfd, const char *); +static alent *vms_get_lineno (bfd *abfd, asymbol *symbol); +static bfd_boolean vms_find_nearest_line + (bfd *abfd, asection *section, asymbol **symbols, bfd_vma offset, + const char **file, const char **func, unsigned int *line); +static asymbol *vms_bfd_make_debug_symbol (bfd *abfd, void *ptr, + unsigned long size); +static long vms_read_minisymbols (bfd *abfd, bfd_boolean dynamic, + PTR *minisymsp, unsigned int *sizep); +static asymbol *vms_minisymbol_to_symbol + (bfd *abfd, bfd_boolean dynamic, const PTR minisym, asymbol *sym); +static void alloc_reloc_stream (bfd *abfd, asection *section, + void *alloc_error); +static bfd_boolean vms_slurp_reloc_table (bfd *abfd, asection *section, + asymbol **symbols); +static long vms_get_reloc_upper_bound (bfd *abfd, asection *sect); +static long vms_canonicalize_reloc (bfd *abfd, asection *srcsec, + arelent **location, asymbol **symbols); +static const struct reloc_howto_struct *vms_bfd_reloc_type_lookup + (bfd *abfd, bfd_reloc_code_real_type code); +static bfd_boolean vms_set_arch_mach + (bfd *abfd, enum bfd_architecture arch, unsigned long mach); +static bfd_boolean vms_set_section_contents + (bfd *abfd, asection *section, const PTR location, file_ptr offset, + bfd_size_type count); +static int vms_sizeof_headers (bfd *abfd, + struct bfd_link_info *info ATTRIBUTE_UNUSED); +static bfd_byte *vms_bfd_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); +static bfd_boolean vms_bfd_relax_section + (bfd *abfd, asection *section, struct bfd_link_info *link_info, + bfd_boolean *again); +static bfd_boolean vms_bfd_gc_sections + (bfd *abfd, struct bfd_link_info *link_info); +static bfd_boolean vms_bfd_merge_sections + (bfd *abfd, struct bfd_link_info *link_info); +static struct bfd_link_hash_table *vms_bfd_link_hash_table_create (bfd *abfd); +static void vms_bfd_link_hash_table_free (struct bfd_link_hash_table *hash); +static bfd_boolean vms_bfd_link_add_symbols + (bfd *abfd, struct bfd_link_info *link_info); +static bfd_boolean vms_bfd_final_link (bfd *abfd, + struct bfd_link_info *link_info); +static bfd_boolean vms_bfd_link_split_section (bfd *abfd, asection *section); +static long vms_get_dynamic_symtab_upper_bound (bfd *abfd); +static long vms_canonicalize_dynamic_symtab (bfd *abfd, asymbol **symbols); +static long vms_get_dynamic_reloc_upper_bound (bfd *abfd); +static long vms_canonicalize_dynamic_reloc + (bfd *abfd, arelent **arel, asymbol **symbols); +static bfd_boolean vms_bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd); +static bfd_boolean vms_bfd_set_private_flags (bfd *abfd, flagword flags); + #define vms_bfd_is_target_special_symbol ((bfd_boolean (*) (bfd *, asymbol *)) bfd_false) #define vms_make_empty_symbol _bfd_generic_make_empty_symbol #define vms_bfd_link_just_syms _bfd_generic_link_just_syms #define vms_bfd_is_group_section bfd_generic_is_group_section #define vms_bfd_discard_group bfd_generic_discard_group #define vms_section_already_linked _bfd_generic_section_already_linked +#define vms_bfd_define_common_symbol bfd_generic_define_common_symbol #define vms_bfd_copy_private_header_data _bfd_generic_bfd_copy_private_header_data #define vms_get_synthetic_symtab _bfd_nodynamic_get_synthetic_symtab -static unsigned int priv_section_count; + +#ifdef VMS_DEBUG +/* Cause debug info to be emitted for the structure. */ +struct vms_private_data_struct _vms_private_data_struct_dummy; +struct vms_section_data_struct _vms_section_data_struct_dummy; +#endif + extern const bfd_target vms_vax_vec; extern const bfd_target vms_alpha_vec; - -/* Initialize private data. */ +/* Initialize private data */ static bfd_boolean vms_initialize (bfd * abfd) { - int i; bfd_size_type amt; bfd_set_start_address (abfd, (bfd_vma) -1); amt = sizeof (struct vms_private_data_struct); - abfd->tdata.any = bfd_alloc (abfd, amt); + abfd->tdata.any = bfd_zalloc (abfd, amt); if (abfd->tdata.any == NULL) return FALSE; -#ifdef __ALPHA - PRIV (is_vax) = FALSE; -#else - PRIV (is_vax) = TRUE; -#endif - PRIV (vms_buf) = NULL; - PRIV (buf_size) = 0; - PRIV (rec_length) = 0; + if (bfd_get_flavour (abfd) == bfd_target_ovax_flavour) + PRIV (is_vax) = TRUE; + PRIV (file_format) = FF_UNKNOWN; - PRIV (fixup_done) = FALSE; - PRIV (sections) = NULL; amt = sizeof (struct stack_struct) * STACKSIZE; PRIV (stack) = bfd_alloc (abfd, amt); if (PRIV (stack) == NULL) goto error_ret1; - PRIV (stackptr) = 0; amt = sizeof (struct bfd_hash_table); PRIV (vms_symbol_table) = bfd_alloc (abfd, amt); @@ -82,24 +189,12 @@ vms_initialize (bfd * abfd) sizeof (vms_symbol_entry))) goto error_ret1; - amt = sizeof (struct location_struct) * LOCATION_SAVE_SIZE; - PRIV (location_stack) = bfd_alloc (abfd, amt); - if (PRIV (location_stack) == NULL) - goto error_ret2; - - for (i = 0; i < VMS_SECTION_COUNT; i++) - PRIV (vms_section_table)[i] = NULL; - amt = MAX_OUTREC_SIZE; PRIV (output_buf) = bfd_alloc (abfd, amt); if (PRIV (output_buf) == NULL) goto error_ret2; - PRIV (push_level) = 0; - PRIV (pushed_size) = 0; PRIV (length_pos) = 2; - PRIV (output_size) = 0; - PRIV (output_alignment) = 1; return TRUE; @@ -111,154 +206,127 @@ vms_initialize (bfd * abfd) return FALSE; } -/* Fill symbol->section with section ptr +struct pair +{ + unsigned int section_count; + asection **sections; +}; + +/* Fill symbol->section with section pointer. + symbol->section is filled with the section index for defined symbols - during reading the GSD/EGSD section. But we need the pointer to the + during reading the GSD/EGSD section. But we need the pointer to the bfd section later. - It has the correct value for referenced (undefined section) symbols + It has the correct value for referenced (undefined section) symbols. - called from bfd_hash_traverse in vms_fixup_sections. */ + Called from bfd_hash_traverse in vms_fixup_sections. */ static bfd_boolean -fill_section_ptr (struct bfd_hash_entry * entry, void * sections) +fill_section_ptr (struct bfd_hash_entry *entry, void *sections) { - asection *sec; - asymbol *sym; - - sym = ((vms_symbol_entry *) entry)->symbol; - sec = sym->section; + asymbol *sym = ((vms_symbol_entry *)entry)->symbol; + struct pair *data = (struct pair *)sections; + unsigned long sec = (unsigned long)sym->section; #if VMS_DEBUG vms_debug (6, "fill_section_ptr: sym %p, sec %p\n", sym, sec); #endif - /* Fill forward references (these contain section number, not section ptr). */ - if ((unsigned int) (size_t) sec < priv_section_count) - sec = ((vms_symbol_entry *) entry)->symbol->section = - ((asection **) sections)[(unsigned int) (size_t) sec]; - - if (strcmp (sym->name, sec->name) == 0) - sym->flags |= BSF_SECTION_SYM; + if (sec < data->section_count) + { + sym->section = data->sections[sec]; + if (strcmp (sym->name, sym->section->name) == 0) + sym->flags |= BSF_SECTION_SYM; + } + else if (sec == (unsigned long)-1) + sym->section = &bfd_und_section; + return TRUE; } -/* Fixup sections - set up all pointers and arrays, counters and sizes are fixed now - - we build a private sections vector for easy access since sections - are always referenced by an index number. - - alloc PRIV(sections) according to abfd->section_count - copy abfd->sections to PRIV(sections). */ - +/* Fixup section pointers in symbols. */ static bfd_boolean vms_fixup_sections (bfd * abfd) { + struct pair data; + if (PRIV (fixup_done)) return TRUE; - /* Traverse symbol table and fill in all section pointers. */ - - /* Can't provide section count as argument to fill_section_ptr(). */ - priv_section_count = PRIV (section_count); - bfd_hash_traverse (PRIV (vms_symbol_table), fill_section_ptr, (PRIV (sections))); + data.section_count = PRIV (section_count); + data.sections = PRIV (sections); + bfd_hash_traverse (PRIV (vms_symbol_table), fill_section_ptr, &data); PRIV (fixup_done) = TRUE; - return TRUE; } - -/* Check the format for a file being read. - Return a (bfd_target *) if it's an object file or zero if not. */ -static const struct bfd_target * -vms_object_p (bfd * abfd) +/* Slurp an ordered set of VMS object records. */ +int +_bfd_vms_slurp_object_records (bfd * abfd) { - int err = 0; - int prev_type; - const struct bfd_target *target_vector = NULL; - const bfd_arch_info_type *arch = NULL; - void * tdata_save = abfd->tdata.any; - bfd_vma saddr_save = bfd_get_start_address (abfd); - -#if VMS_DEBUG - vms_debug (1, "vms_object_p (%p)\n", abfd); -#endif - - if (!vms_initialize (abfd)) - goto error_ret; - - if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET)) - goto err_wrong_format; - - prev_type = -1; + int err, new_type, type = -1; do { #if VMS_DEBUG vms_debug (7, "reading at %08lx\n", bfd_tell (abfd)); #endif - if (_bfd_vms_next_record (abfd) < 0) + new_type = _bfd_vms_get_object_record (abfd); + if (new_type < 0) { #if VMS_DEBUG vms_debug (2, "next_record failed\n"); #endif - goto err_wrong_format; + return -1; } - if ((prev_type == EOBJ_S_C_EGSD) - && (PRIV (rec_type) != EOBJ_S_C_EGSD)) + if (type == EOBJ_S_C_EGSD && new_type != EOBJ_S_C_EGSD) { if (! vms_fixup_sections (abfd)) { #if VMS_DEBUG vms_debug (2, "vms_fixup_sections failed\n"); #endif - goto err_wrong_format; + return -1; } } - prev_type = PRIV (rec_type); - - if (target_vector == NULL) - { - if (prev_type <= OBJ_S_C_MAXRECTYP) - target_vector = & vms_vax_vec; - else - target_vector = & vms_alpha_vec; - } + type = new_type; - switch (prev_type) + switch (type) { case OBJ_S_C_HDR: case EOBJ_S_C_EMH: - err = _bfd_vms_slurp_hdr (abfd, prev_type); + err = _bfd_vms_slurp_hdr (abfd, type); break; case OBJ_S_C_EOM: case OBJ_S_C_EOMW: case EOBJ_S_C_EEOM: - err = _bfd_vms_slurp_eom (abfd, prev_type); + err = _bfd_vms_slurp_eom (abfd, type); break; case OBJ_S_C_GSD: case EOBJ_S_C_EGSD: - err = _bfd_vms_slurp_gsd (abfd, prev_type); + err = _bfd_vms_slurp_gsd (abfd, type); break; case OBJ_S_C_TIR: case EOBJ_S_C_ETIR: - err = _bfd_vms_slurp_tir (abfd, prev_type); + err = _bfd_vms_slurp_tir (abfd, type); break; case OBJ_S_C_DBG: case EOBJ_S_C_EDBG: - err = _bfd_vms_slurp_dbg (abfd, prev_type); + err = _bfd_vms_slurp_dbg (abfd, type); + PRIV (dst_ptr_end) = PRIV (image_ptr); break; case OBJ_S_C_TBT: case EOBJ_S_C_ETBT: - err = _bfd_vms_slurp_tbt (abfd, prev_type); + err = _bfd_vms_slurp_tbt (abfd, type); + PRIV (dst_ptr_end) = PRIV (image_ptr); break; case OBJ_S_C_LNK: - err = _bfd_vms_slurp_lnk (abfd, prev_type); + err = _bfd_vms_slurp_lnk (abfd, type); break; default: err = -1; @@ -266,14 +334,105 @@ vms_object_p (bfd * abfd) if (err != 0) { #if VMS_DEBUG - vms_debug (2, "slurp type %d failed with %d\n", prev_type, err); + vms_debug (2, "slurp type %d failed with %d\n", type, err); #endif - goto err_wrong_format; + return err; } } - while ((prev_type != EOBJ_S_C_EEOM) && (prev_type != OBJ_S_C_EOM) && (prev_type != OBJ_S_C_EOMW)); + while (type != EOBJ_S_C_EEOM && type != OBJ_S_C_EOM && type != OBJ_S_C_EOMW); + + return 0; +} + +/* Slurp a VMS module and return an error status. */ + +static int +vms_slurp_module (bfd *abfd) +{ + int type, err; + + if (PRIV (is_vax)) + type = PRIV (vms_rec)[0]; + else + type = bfd_getl16 (PRIV (vms_rec)); + + err = _bfd_vms_slurp_hdr (abfd, type); + if (err != 0) + { + bfd_set_error (bfd_error_wrong_format); + return err; + } + + return _bfd_vms_slurp_object_records (abfd); +} + +/* Slurp a VMS image and return an error status. */ + +static int +vms_slurp_image (bfd *abfd) +{ + unsigned int isd_offset, ihs_offset; + int err; + + err = _bfd_vms_slurp_ihd (abfd, &isd_offset, &ihs_offset); + if (err != 0) + { + bfd_set_error (bfd_error_wrong_format); + return err; + } - if (target_vector == & vms_vax_vec) + err = _bfd_vms_slurp_isd (abfd, isd_offset); + if (err != 0) + { + bfd_set_error (bfd_error_wrong_format); + return err; + } + + return _bfd_vms_slurp_ihs (abfd, ihs_offset); +} + +/* Check the format for a file being read. + Return a (bfd_target *) if it's an object file or zero if not. */ + +static const struct bfd_target * +vms_object_p (bfd *abfd) +{ + const struct bfd_target *target_vector; + const bfd_arch_info_type *arch; + PTR tdata_save = abfd->tdata.any; + bfd_vma saddr_save = bfd_get_start_address (abfd); + int err = 0; + +#if VMS_DEBUG + vms_debug (1, "vms_object_p(%p)\n", abfd); +#endif + + if (!vms_initialize (abfd)) + goto error_ret; + + if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET)) + goto err_wrong_format; + + switch (_bfd_vms_get_first_record (abfd)) + { + case FT_UNKNOWN: + default: + err = -1; + break; + + case FT_MODULE: + err = vms_slurp_module (abfd); + break; + + case FT_IMAGE: + err = vms_slurp_image (abfd); + break; + } + + if (err != 0) + goto err_wrong_format; + + if (PRIV (is_vax)) { if (! vms_fixup_sections (abfd)) { @@ -283,38 +442,29 @@ vms_object_p (bfd * abfd) goto err_wrong_format; } - /* Set arch_info to vax. */ - + target_vector = &vms_vax_vec; arch = bfd_scan_arch ("vax"); - PRIV (is_vax) = TRUE; + #if VMS_DEBUG vms_debug (2, "arch is vax\n"); #endif } - else if (target_vector == & vms_alpha_vec) + else { /* Set arch_info to alpha. */ - + target_vector = &vms_alpha_vec; arch = bfd_scan_arch ("alpha"); - PRIV (is_vax) = FALSE; #if VMS_DEBUG vms_debug (2, "arch is alpha\n"); #endif } - if (arch == NULL) - { -#if VMS_DEBUG - vms_debug (2, "arch not found\n"); -#endif - goto err_wrong_format; - } abfd->arch_info = arch; - return target_vector; err_wrong_format: bfd_set_error (bfd_error_wrong_format); + error_ret: if (abfd->tdata.any != tdata_save && abfd->tdata.any != NULL) bfd_release (abfd, abfd->tdata.any); @@ -341,6 +491,8 @@ vms_archive_p (bfd * abfd ATTRIBUTE_UNUSED) static bfd_boolean vms_mkobject (bfd * abfd) { + const bfd_arch_info_type *arch; + #if VMS_DEBUG vms_debug (1, "vms_mkobject (%p)\n", abfd); #endif @@ -348,20 +500,18 @@ vms_mkobject (bfd * abfd) if (!vms_initialize (abfd)) return FALSE; - { -#ifdef __VAX - const bfd_arch_info_type *arch = bfd_scan_arch ("vax"); -#else - const bfd_arch_info_type *arch = bfd_scan_arch ("alpha"); -#endif - if (arch == NULL) - { - bfd_set_error (bfd_error_wrong_format); - return FALSE; - } - abfd->arch_info = arch; - } + if (PRIV (is_vax)) + arch = bfd_scan_arch ("vax"); + else + arch = bfd_scan_arch ("alpha"); + + if (arch == 0) + { + bfd_set_error(bfd_error_wrong_format); + return FALSE; + } + abfd->arch_info = arch; return TRUE; } @@ -420,6 +570,62 @@ vms_write_object_contents (bfd * abfd) /* 4.1, generic. */ +/* Free the reloc buffer for the specified section. */ + +static void +free_reloc_stream (bfd *abfd ATTRIBUTE_UNUSED, asection *section, + void *data ATTRIBUTE_UNUSED) +{ + if (vms_section_data (section)->reloc_stream) + free (vms_section_data (section)->reloc_stream); +} + +#ifdef VMS +/* Convert the file to variable record length format. This is done + using undocumented system call sys$modify(). + Pure VMS version. */ + +static void +vms_convert_to_var (char *vms_filename) +{ + struct FAB fab = cc$rms_fab; + + fab.fab$l_fna = vms_filename; + fab.fab$b_fns = strlen (vms_filename); + fab.fab$b_fac = FAB$M_PUT; + fab.fab$l_fop = FAB$M_ESC; + fab.fab$l_ctx = RME$C_SETRFM; + + sys$open (&fab); + + fab.fab$b_rfm = FAB$C_VAR; + + sys$modify (&fab); + sys$close (&fab); +} + +static int +vms_convert_to_var_1 (char *filename, int type) +{ + if (type != DECC$K_FILE) + return FALSE; + vms_convert_to_var (filename); + return TRUE; +} + +/* Convert the file to variable record length format. This is done + using undocumented system call sys$modify(). + Unix filename version. */ + +static int +vms_convert_to_var_unix_filename (const char *unix_filename) +{ + if (decc$to_vms (unix_filename, &vms_convert_to_var_1, 0, 1) != 1) + return FALSE; + return TRUE; +} +#endif /* VMS */ + /* Called when the BFD is being closed to do any necessary cleanup. */ static bfd_boolean @@ -428,7 +634,7 @@ vms_close_and_cleanup (bfd * abfd) #if VMS_DEBUG vms_debug (1, "vms_close_and_cleanup (%p)\n", abfd); #endif - if (abfd == NULL) + if (abfd == NULL || abfd->tdata.any == NULL) return TRUE; if (PRIV (vms_buf) != NULL) @@ -440,9 +646,23 @@ vms_close_and_cleanup (bfd * abfd) if (PRIV (vms_symbol_table)) bfd_hash_table_free (PRIV (vms_symbol_table)); + bfd_map_over_sections (abfd, free_reloc_stream, NULL); + bfd_release (abfd, abfd->tdata.any); abfd->tdata.any = NULL; +#ifdef VMS + if (abfd->direction == write_direction) + { + /* Last step on VMS is to convert the file to variable record length + format. */ + if (bfd_cache_close (abfd) != TRUE) + return FALSE; + if (vms_convert_to_var_unix_filename (abfd->filename) != TRUE) + return FALSE; + } +#endif + return TRUE; } @@ -462,6 +682,8 @@ vms_bfd_free_cached_info (bfd * abfd ATTRIBUTE_UNUSED) static bfd_boolean vms_new_section_hook (bfd * abfd, asection *section) { + bfd_size_type amt; + /* Count hasn't been incremented yet. */ unsigned int section_count = abfd->section_count + 1; @@ -469,25 +691,34 @@ vms_new_section_hook (bfd * abfd, asection *section) vms_debug (1, "vms_new_section_hook (%p, [%d]%s), count %d\n", abfd, section->index, section->name, section_count); #endif - bfd_set_section_alignment (abfd, section, 4); + + bfd_set_section_alignment (abfd, section, 0); if (section_count > PRIV (section_count)) { bfd_size_type amt = section_count; amt *= sizeof (asection *); - PRIV (sections) = bfd_realloc (PRIV (sections), amt); + PRIV (sections) = bfd_realloc_or_free (PRIV (sections), amt); if (PRIV (sections) == NULL) return FALSE; PRIV (section_count) = section_count; } + #if VMS_DEBUG vms_debug (6, "section_count: %d\n", PRIV (section_count)); #endif + PRIV (sections)[section->index] = section; + #if VMS_DEBUG vms_debug (7, "%d: %s\n", section->index, section->name); #endif + amt = sizeof (struct vms_section_data_struct); + section->used_by_bfd = (PTR) bfd_zalloc (abfd, amt); + if (section->used_by_bfd == NULL) + return FALSE; + return _bfd_generic_new_section_hook (abfd, section); } @@ -502,13 +733,42 @@ vms_get_section_contents (bfd * abfd ATTRIBUTE_UNUSED, file_ptr offset ATTRIBUTE_UNUSED, bfd_size_type buf_size ATTRIBUTE_UNUSED) { + bfd_size_type size = section->size; + #if VMS_DEBUG vms_debug (1, "vms_get_section_contents (%p, %s, %p, off %ld, size %d)\n", abfd, section->name, buf, offset, (int)buf_size); #endif - /* Shouldn't be called, since all sections are IN_MEMORY. */ - return FALSE; + if (section->contents) + abort (); + + section->contents = (unsigned char *) bfd_malloc (size); + + if (section->contents == NULL) + { + bfd_set_error (bfd_error_no_memory); + return FALSE; + } + + if (bfd_seek (abfd, section->filepos, SEEK_SET)) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + + if (bfd_bread (section->contents, size, abfd) != size) + { + bfd_set_error (bfd_error_file_truncated); + return FALSE; + } + + section->flags |= SEC_IN_MEMORY; + + if (buf) + memcpy (buf, section->contents + offset, (size_t) buf_size); + + return TRUE; } /* Read the contents of a section. @@ -702,7 +962,6 @@ vms_truncate_arname (bfd * abfd ATTRIBUTE_UNUSED, #if VMS_DEBUG vms_debug (1, "vms_truncate_arname (%p, %s, %s)\n", abfd, pathname, arhdr); #endif - return; } /* ??? write archive map. */ @@ -905,7 +1164,9 @@ vms_get_symbol_info (bfd * abfd ATTRIBUTE_UNUSED, if (ret == NULL) return; - if (bfd_is_com_section (sec)) + if (sec == 0) + ret->type = 'U'; + else if (bfd_is_com_section (sec)) ret->type = 'C'; else if (bfd_is_abs_section (sec)) ret->type = 'A'; @@ -971,7 +1232,7 @@ vms_find_nearest_line (bfd * abfd ATTRIBUTE_UNUSED, vms_debug (1, "vms_find_nearest_line (%p, %s, %p, %ld, , , )\n", abfd, section->name, symbols, (long int)offset); #endif - return FALSE; + return _bfd_vms_find_nearest_dst_line (abfd, section, symbols, offset, file, func, line); } static bfd_boolean @@ -1036,36 +1297,160 @@ vms_minisymbol_to_symbol (bfd * abfd, /* Part 4.6, relocations. */ -/* 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. */ +/* Allocate the reloc buffer for the specified section. */ -static long -vms_get_reloc_upper_bound (bfd * abfd ATTRIBUTE_UNUSED, - asection *section ATTRIBUTE_UNUSED) +static void +alloc_reloc_stream (bfd *abfd ATTRIBUTE_UNUSED, asection *section, + void *alloc_error) { + unsigned char *ptr; + + /* If there were no relocations, there is nothing to do. */ + if (section->reloc_count == 0) + return; + + ptr = bfd_malloc (vms_section_data (section)->reloc_size); + if (ptr == NULL) + { + *(bfd_boolean *)alloc_error = TRUE; + return; + } + + vms_section_data (section)->reloc_stream = ptr; +} + +/* Read in the relocs for the specified section and internalize them. + + The implementation is loosely based on the SOM code and made up + of 3 distinct phases: + + 1. When the VMS object is opened and parsed, the number and the size + of the relocations are computed for all sections. This makes it + possible to know upfront both which sections have no relocs and + the size of the reloc buffers for the other sections, at virtually + no cost for consumers that don't care about relocs at all. + + 2. When vms_slurp_reloc_table is invoked for the first time on a section + with relocs, the object is traversed and all the reloc information + is saved in per-section reloc buffers. It would be very inefficient + to scan the whole file on each invocation, so we slurp for all the + sections at once. + + 3. On subsequent invocations of vms_slurp_reloc_table, the relocs for the + specified section are fetched from the buffer, decoded and internalized. + The buffer is then freed since the internalized relocs are attached to + the section, turning additional invocations of vms_slurp_reloc_table + on the same section into no-ops. + + Since VMS objects have very few sections, it could be profitable to merge + phase #2 and phase #3, i.e. to decode and internalize the relocs for all + the sections at once. The current implementation is more elegant. */ + +static bfd_boolean +vms_slurp_reloc_table (bfd *abfd, asection *section, asymbol **symbols) +{ + arelent *internal_relocs; + bfd_size_type amt; + int err; + + /* If there were no relocations, there is nothing to do. */ + if (section->reloc_count == 0) + return TRUE; + + /* Return saved information about the relocations if it is available. */ + if (section->relocation != NULL) + return TRUE; + + /* If the relocation stream has not been slurped, do it now. */ + if (vms_section_data (section)->reloc_stream == NULL) + { + bfd_boolean alloc_error = FALSE; + int type; + + /* Size the reloc buffer for each section. */ + bfd_map_over_sections (abfd, alloc_reloc_stream, &alloc_error); + if (alloc_error) + return FALSE; + + if (bfd_seek (abfd, 0, SEEK_SET) != 0) + return FALSE; + + /* Reset section pointer. */ + PRIV (image_section) = NULL; + + do + { + type = _bfd_vms_get_object_record (abfd); + if (type != EOBJ_S_C_ETIR + && type != EOBJ_S_C_EDBG + && type != EOBJ_S_C_ETBT) + continue; + err = _bfd_vms_slurp_relocs (abfd); + if (err != 0) + { #if VMS_DEBUG - vms_debug (1, "vms_get_reloc_upper_bound (%p, %s)\n", abfd, section->name); + vms_debug (2, "slurp relocs failed with %d\n", err); #endif - return -1L; + return FALSE; + } + } + while (type != EOBJ_S_C_EEOM); + } + + amt = section->reloc_count * sizeof (arelent); + internal_relocs = (arelent *) bfd_zalloc (abfd, amt); + if (internal_relocs == NULL) + return FALSE; + + /* Decode and internalize the relocations. */ + err = _bfd_vms_decode_relocs (abfd, internal_relocs, section, symbols); + if (err != 0) + { +#if VMS_DEBUG + vms_debug (2, "decode relocs failed with %d\n", err); +#endif + return FALSE; + } + + /* We're done with the external relocations. Free them. */ + free (vms_section_data (section)->reloc_stream); + vms_section_data (section)->reloc_stream = NULL; + + /* Save our results and return success. */ + section->relocation = internal_relocs; + return TRUE; } -/* 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. */ +/* Return the number of bytes required to store the relocation + information associated with the given section. */ static long -vms_canonicalize_reloc (bfd * abfd ATTRIBUTE_UNUSED, - asection *section ATTRIBUTE_UNUSED, - arelent **location ATTRIBUTE_UNUSED, - asymbol **symbols ATTRIBUTE_UNUSED) +vms_get_reloc_upper_bound (bfd *abfd ATTRIBUTE_UNUSED, asection *section) { -#if VMS_DEBUG - vms_debug (1, "vms_canonicalize_reloc (%p, %s, , )\n", abfd, section->name); -#endif - return FALSE; + return (section->reloc_count + 1) * sizeof (arelent *); +} + +/* Convert relocations from VMS (external) form into BFD internal + form. Return the number of relocations. */ + +static long +vms_canonicalize_reloc (bfd *abfd, asection *section, arelent **relptr, + asymbol **symbols) +{ + arelent *tblptr; + int count; + + if (! vms_slurp_reloc_table (abfd, section, symbols)) + return -1; + + count = section->reloc_count; + tblptr = section->relocation; + + while (count--) + *relptr++ = tblptr++; + + *relptr = (arelent *) NULL; + return section->reloc_count; } /* This is just copied from ecoff-alpha, needs to be fixed probably. */ @@ -1316,6 +1701,64 @@ static reloc_howto_type alpha_howto_table[] = 0xffffffff, /* Dest mask. */ FALSE), /* PC rel offset. */ + HOWTO (ALPHA_R_NOP, /* Type. */ + 0, /* Rightshift. */ + 3, /* Size (0 = byte, 1 = short, 2 = long). */ + 0, /* Bitsize. */ + /* The following value must match that of ALPHA_R_BSR/ALPHA_R_BOH + because the calculations for the 3 relocations are the same. + See B.4.5.2 of the OpenVMS Linker Utility Manual. */ + TRUE, /* PC relative. */ + 0, /* Bitpos. */ + complain_overflow_dont,/* Complain_on_overflow. */ + reloc_nil, /* Special_function. */ + "NOP", /* Name. */ + FALSE, /* Partial_inplace. */ + 0xffffffff, /* Source mask. */ + 0xffffffff, /* Dest mask. */ + FALSE), /* PC rel offset. */ + + HOWTO (ALPHA_R_BSR, /* Type. */ + 0, /* Rightshift. */ + 3, /* Size (0 = byte, 1 = short, 2 = long). */ + 0, /* Bitsize. */ + TRUE, /* PC relative. */ + 0, /* Bitpos. */ + complain_overflow_dont,/* Complain_on_overflow. */ + reloc_nil, /* Special_function. */ + "BSR", /* Name. */ + FALSE, /* Partial_inplace. */ + 0xffffffff, /* Source mask. */ + 0xffffffff, /* Dest mask. */ + FALSE), /* PC rel offset. */ + + HOWTO (ALPHA_R_LDA, /* Type. */ + 0, /* Rightshift. */ + 3, /* Size (0 = byte, 1 = short, 2 = long). */ + 0, /* Bitsize. */ + FALSE, /* PC relative. */ + 0, /* Bitpos. */ + complain_overflow_dont,/* Complain_on_overflow. */ + reloc_nil, /* Special_function. */ + "LDA", /* Name. */ + FALSE, /* Partial_inplace. */ + 0xffffffff, /* Source mask. */ + 0xffffffff, /* Dest mask. */ + FALSE), /* PC rel offset. */ + + HOWTO (ALPHA_R_BOH, /* Type. */ + 0, /* Rightshift. */ + 3, /* Size (0 = byte, 1 = short, 2 = long, 3 = nil). */ + 0, /* Bitsize. */ + TRUE, /* PC relative. */ + 0, /* Bitpos. */ + complain_overflow_dont,/* Complain_on_overflow. */ + reloc_nil, /* Special_function. */ + "BOH", /* Name. */ + FALSE, /* Partial_inplace. */ + 0xffffffff, /* Source mask. */ + 0xffffffff, /* Dest mask. */ + FALSE), /* PC rel offset. */ }; /* Return a pointer to a howto structure which, when invoked, will perform @@ -1344,6 +1787,10 @@ vms_bfd_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, case BFD_RELOC_64_PCREL: alpha_type = ALPHA_R_SREL64; break; case BFD_RELOC_ALPHA_LINKAGE: alpha_type = ALPHA_R_LINKAGE; break; case BFD_RELOC_ALPHA_CODEADDR: alpha_type = ALPHA_R_CODEADDR; break; + case BFD_RELOC_ALPHA_NOP: alpha_type = ALPHA_R_NOP; break; + case BFD_RELOC_ALPHA_BSR: alpha_type = ALPHA_R_BSR; break; + case BFD_RELOC_ALPHA_LDA: alpha_type = ALPHA_R_LDA; break; + case BFD_RELOC_ALPHA_BOH: alpha_type = ALPHA_R_BOH; break; default: (*_bfd_error_handler) ("reloc (%d) is *UNKNOWN*", code); return NULL; @@ -1384,14 +1831,18 @@ vms_set_arch_mach (bfd * abfd, #if VMS_DEBUG vms_debug (1, "vms_set_arch_mach (%p, %d, %ld)\n", abfd, arch, mach); #endif - abfd->arch_info = bfd_scan_arch ("alpha"); - return TRUE; + if (arch != bfd_arch_alpha + && arch != bfd_arch_vax + && arch != bfd_arch_unknown) + return FALSE; + + return bfd_default_set_arch_mach (abfd, arch, mach); } /* 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 bytes. + in memory at LOCATION. The data is written to the output section starting + at offset offset for count bytes. Normally TRUE is returned, else FALSE. Possible error returns are: o bfd_error_no_contents - The output section does not have the @@ -1410,7 +1861,16 @@ vms_set_section_contents (bfd * abfd, abfd, section->name, location, (long int)offset, (int)count); vms_debug (2, "size %d\n", (int) section->size); #endif - return _bfd_save_vms_section (abfd, section, location, offset, count); + if (count == (bfd_size_type)0) + return TRUE; + + if (section->contents == NULL) + section->contents = bfd_alloc (abfd, section->size); + if (section->contents == NULL) + return FALSE; + + memcpy (section->contents + offset, location, (size_t) count); + return TRUE; } /* Part 4.8, linker. */ @@ -1453,6 +1913,10 @@ vms_bfd_relax_section (bfd * abfd ATTRIBUTE_UNUSED, struct bfd_link_info *link_info ATTRIBUTE_UNUSED, bfd_boolean *again ATTRIBUTE_UNUSED) { + if (link_info->relocatable) + (*link_info->callbacks->einfo) + (_("%P%F: --relax and -r may not be used together\n")); + #if VMS_DEBUG vms_debug (1, "vms_bfd_relax_section (%p, %s, %p, )\n", abfd, section->name, link_info); @@ -1549,7 +2013,7 @@ vms_get_dynamic_symtab_upper_bound (bfd * abfd ATTRIBUTE_UNUSED) #if VMS_DEBUG vms_debug (1, "vms_get_dynamic_symtab_upper_bound (%p)\n", abfd); #endif - return 0; + return 0L; } static bfd_boolean @@ -1605,14 +2069,14 @@ const bfd_target vms_alpha_vec = BFD_ENDIAN_LITTLE, /* Data byte order is little. */ BFD_ENDIAN_LITTLE, /* Header byte order is little. */ - (HAS_RELOC | HAS_SYMS + (HAS_RELOC | EXEC_P | HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS | WP_TEXT | D_PAGED), /* Object flags. */ (SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY | SEC_CODE | SEC_DATA | SEC_HAS_CONTENTS | SEC_IN_MEMORY), /* Sect flags. */ - 0, /* Symbol_leading_char. */ - ' ', /* AR_pad_char. */ - 15, /* AR_max_namelen. */ + 0, /* symbol_leading_char. */ + ' ', /* 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, @@ -1639,7 +2103,7 @@ const bfd_target vms_alpha_vec = NULL, - NULL + (PTR) 0 }; const bfd_target vms_vax_vec = @@ -1656,15 +2120,15 @@ const bfd_target vms_vax_vec = (SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_READONLY | SEC_CODE | SEC_DATA | SEC_HAS_CONTENTS | SEC_IN_MEMORY), /* Sect flags. */ - 0, /* Symbol_leading_char. */ - ' ', /* AR_pad_char. */ - 15, /* AR_max_namelen. */ + 0, /* symbol_leading_char */ + ' ', /* 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, /* Headers. */ + bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* Hdrs. */ {_bfd_dummy_target, vms_object_p, /* bfd_check_format. */ vms_archive_p, _bfd_dummy_target}, @@ -1685,5 +2149,5 @@ const bfd_target vms_vax_vec = NULL, - NULL + (PTR) 0 }; diff --git a/bfd/vms.h b/bfd/vms.h index 2235540..0d6e215 100644 --- a/bfd/vms.h +++ b/bfd/vms.h @@ -1,6 +1,8 @@ /* vms.h -- Header file for VMS (Alpha and Vax) support. - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007 - Free Software Foundation, Inc. + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. + + Main header file. Written by Klaus K"ampf (kkaempf@rmi.de) @@ -25,9 +27,12 @@ #ifndef VMS_H #define VMS_H -/* Constants starting with 'Exxx_' are for openVMS/Alpha (EVAX object language) */ +/* Constants starting with 'Exxx_' are for openVMS/Alpha (EVAX object + language). */ + +#define VMS_BLOCK_SIZE 512 -/* VMS Text, information and relocation record (TIR/ETIR) definitions. */ +/* VMS Text Information and Relocation Records (TIR/ETIR). */ #define TIR_S_C_STA_GBL 0 #define TIR_S_C_STA_SB 1 @@ -107,7 +112,7 @@ #define ETIR_S_C_STA_GBL 0 /* Stack global symbol value. */ #define ETIR_S_C_STA_LW 1 /* Stack longword. */ #define ETIR_S_C_STA_QW 2 /* Stack quadword. */ -#define ETIR_S_C_STA_PQ 3 /* Stack psect base plus quadword offset. */ +#define ETIR_S_C_STA_PQ 3 /* Stack psect base + quadword off. */ #define ETIR_S_C_STA_LI 4 /* Stack literal. */ #define ETIR_S_C_STA_MOD 5 /* Stack module. */ #define ETIR_S_C_STA_CKARG 6 /* Check Arguments. */ @@ -173,7 +178,9 @@ #define ETIR_S_C_STC_NBH_PS 214 /* Store-conditional NOP,BSR or HINT at psect + offset. */ #define ETIR_S_C_MAXSTCCOD 214 /* Maximum store-conditional code. */ -/* VMS Global symbol definition record (GSD/EGSD). */ +#define ETIR_S_C_HEADER_SIZE 4 /* Size of the header of a command */ + +/* VMS Global Symbol Directory Records (GSD/EGSD). */ #define GSD_S_K_ENTRIES 1 #define GSD_S_C_ENTRIES 1 @@ -206,6 +213,7 @@ #define EGSD_S_C_SYMG 8 /* EGST - gst version of SYM. */ #define EGSD_S_C_MAXRECTYP 8 /* Maximum entry type defined. */ +/* Program Section Definition. */ #define GPS_S_M_PIC 1 #define GPS_S_M_LIB 2 #define GPS_S_M_OVR 4 @@ -219,31 +227,41 @@ #define GPS_S_K_NAME 9 #define GPS_S_C_NAME 9 -#define EGPS_S_V_PIC 0x0001 -#define EGPS_S_V_LIB 0x0002 -#define EGPS_S_V_OVR 0x0004 -#define EGPS_S_V_REL 0x0008 -#define EGPS_S_V_GBL 0x0010 -#define EGPS_S_V_SHR 0x0020 -#define EGPS_S_V_EXE 0x0040 -#define EGPS_S_V_RD 0x0080 -#define EGPS_S_V_WRT 0x0100 -#define EGPS_S_V_VEC 0x0200 -#define EGPS_S_V_NOMOD 0x0400 -#define EGPS_S_V_COM 0x0800 - +#define EGPS_S_B_ALIGN 4 +#define EGPS_S_W_FLAGS 6 +#define EGPS_S_L_ALLOC 8 +#define EGPS_S_B_NAMLNG 12 + +#define EGPS_S_V_PIC 0x0001 +#define EGPS_S_V_LIB 0x0002 +#define EGPS_S_V_OVR 0x0004 +#define EGPS_S_V_REL 0x0008 +#define EGPS_S_V_GBL 0x0010 +#define EGPS_S_V_SHR 0x0020 +#define EGPS_S_V_EXE 0x0040 +#define EGPS_S_V_RD 0x0080 +#define EGPS_S_V_WRT 0x0100 +#define EGPS_S_V_VEC 0x0200 +#define EGPS_S_V_NOMOD 0x0400 +#define EGPS_S_V_COM 0x0800 +#define EGPS_S_V_ALLOC_64BIT 0x1000 + +/* Symbol Defintion or Reference. */ #define GSY_S_M_WEAK 1 #define GSY_S_M_DEF 2 #define GSY_S_M_UNI 4 #define GSY_S_M_REL 8 -#define EGSY_S_V_WEAK 0x0001 -#define EGSY_S_V_DEF 0x0002 -#define EGSY_S_V_UNI 0x0004 -#define EGSY_S_V_REL 0x0008 -#define EGSY_S_V_COMM 0x0010 -#define EGSY_S_V_VECEP 0x0020 -#define EGSY_S_V_NORM 0x0040 +#define EGSY_S_W_FLAGS 6 + +#define EGSY_S_V_WEAK 0x0001 +#define EGSY_S_V_DEF 0x0002 +#define EGSY_S_V_UNI 0x0004 +#define EGSY_S_V_REL 0x0008 +#define EGSY_S_V_COMM 0x0010 +#define EGSY_S_V_VECEP 0x0020 +#define EGSY_S_V_NORM 0x0040 +#define EGSY_S_V_QUAD_VAL 0x0080 #define LSY_S_M_DEF 2 #define LSY_S_M_REL 8 @@ -251,10 +269,26 @@ #define ENV_S_M_DEF 1 #define ENV_S_M_NESTED 2 +/* Symbol Definition. */ +#define ESDF_S_L_VALUE 8 +#define ESDF_S_L_PSINDX 28 +#define ESDF_S_B_NAMLNG 32 + +/* Universal Symbol Definition. */ +#define EGST_S_W_FLAGS 6 +#define EGST_S_Q_LP_1 16 +#define EGST_S_Q_LP_2 24 +#define EGST_S_L_PSINDX 32 +#define EGST_S_B_NAMLNG 36 + +/* Symbol Reference. */ +#define ESRF_S_B_NAMLNG 8 + /* Debugger symbol definitions: These are done by hand, as no machine-readable version seems to be available. */ #define DST_S_C_C 7 /* Language == "C". */ #define DST_S_C_CXX 15 /* Language == "C++". */ +#define DST_S_C_EPILOG 127 #define DST_S_C_VERSION 153 #define DST_S_C_SOURCE 155 /* Source file. */ #define DST_S_C_PROLOG 162 @@ -269,15 +303,19 @@ #define DST_S_C_MODEND 189 /* End of module. */ #define DST_S_C_RTNBEG 190 /* Beginning of routine.*/ #define DST_S_C_RTNEND 191 /* End of routine. */ -#define DST_S_C_DELTA_PC_W 1 /* Incr PC. */ -#define DST_S_C_INCR_LINUM 2 /* Incr Line #. */ -#define DST_S_C_INCR_LINUM_W 3 /* Incr Line #. */ -#define DST_S_C_SET_LINUM_INCR 4 + +/* These are used with DST_S_C_LINE_NUM. */ +#define DST_S_C_LINE_NUM_HEADER_SIZE 4 + +#define DST_S_C_DELTA_PC_W 1 /* Incr PC. */ +#define DST_S_C_INCR_LINUM 2 /* Incr Line #. */ +#define DST_S_C_INCR_LINUM_W 3 /* Incr Line #. */ +#define DST_S_C_SET_LINUM_INCR 4 #define DST_S_C_SET_LINUM_INCR_W 5 #define DST_S_C_RESET_LINUM_INCR 6 -#define DST_S_C_BEG_STMT_MODE 7 -#define DST_S_C_END_STMT_MODE 8 -#define DST_S_C_SET_LINE_NUM 9 /* Set Line #. */ +#define DST_S_C_BEG_STMT_MODE 7 +#define DST_S_C_END_STMT_MODE 8 +#define DST_S_C_SET_LINE_NUM 9 /* Set Line #. */ #define DST_S_C_SET_PC 10 #define DST_S_C_SET_PC_W 11 #define DST_S_C_SET_PC_L 12 @@ -295,9 +333,32 @@ #define DST_S_C_SRC_SETFILE 2 /* Set source file. */ #define DST_S_C_SRC_SETREC_L 3 /* Set record, longword value. */ #define DST_S_C_SRC_SETREC_W 4 /* Set record, word value. */ +#define DST_S_C_SRC_SETLNUM_L 5 /* Set line, longword value. */ +#define DST_S_C_SRC_SETLNUM_W 6 /* Set line, word value. */ +#define DST_S_C_SRC_INCRLNUM_B 7 /* Increment line. */ #define DST_S_C_SRC_DEFLINES_W 10 /* # of line, word counter. */ #define DST_S_C_SRC_DEFLINES_B 11 /* # of line, byte counter. */ #define DST_S_C_SRC_FORMFEED 16 /* ^L counts as a record. */ + +#define DST_S_B_PCLINE_UNSBYTE 1 +#define DST_S_W_PCLINE_UNSWORD 1 +#define DST_S_L_PCLINE_UNSLONG 1 + +#define DST_S_B_MODBEG_NAME 14 +#define DST_S_L_RTNBEG_ADDRESS 5 +#define DST_S_B_RTNBEG_NAME 13 +#define DST_S_L_RTNEND_SIZE 5 + +/* These are used with DST_S_C_SOURCE. */ +#define DST_S_C_SOURCE_HEADER_SIZE 4 + +#define DST_S_B_SRC_DF_LENGTH 1 +#define DST_S_W_SRC_DF_FILEID 3 +#define DST_S_B_SRC_DF_FILENAME 20 +#define DST_S_B_SRC_UNSBYTE 1 +#define DST_S_W_SRC_UNSWORD 1 +#define DST_S_L_SRC_UNSLONG 1 + /* The following are the codes for the various data types. Anything not on the list is included under 'advanced_type'. */ #define DBG_S_C_UCHAR 0x02 @@ -328,6 +389,7 @@ #define DSC_K_CLASS_D 0x02 /* Dynamic string (not via malloc!). */ #define DSC_K_CLASS_A 0x04 /* Array. */ #define DSC_K_CLASS_UBS 0x0d /* Unaligned bit string. */ + /* These are the codes that are used to generate the definitions of struct union and enum records. */ #define DBG_S_C_ENUM_ITEM 0xa4 @@ -336,7 +398,7 @@ #define DBG_S_C_STRUCT_ITEM DST_K_VFLAGS_BITOFFS /* 0xff */ #define DBG_S_C_STRUCT_START 0xab #define DBG_S_C_STRUCT_END 0xac -#define DST_K_TYPSPEC 0xaf /* Type specification. */ +#define DST_K_TYPSPEC 0xaf /* Type specification. */ /* These codes are used in the generation of the symbol definition records. */ #define DST_K_VFLAGS_NOVAL 0x80 /* Struct definition only. */ #define DST_K_VFLAGS_DSC 0xfa /* Descriptor used. */ @@ -379,7 +441,7 @@ #define DBG_S_C_VOID DST_K_TS_PTR #define DBG_S_C_COMPLEX_ARRAY DST_K_TS_ARRAY -/* VMS Module header record (EMH) definitions. */ +/* VMS Module Header Records (MHD/EMH). */ #define MHD_S_C_MHD 0 #define MHD_S_C_LNM 1 @@ -402,48 +464,68 @@ /* vms.c. */ extern asymbol *_bfd_vms_make_empty_symbol (bfd *); +extern int _bfd_vms_slurp_object_records (bfd *abfd); /* vms-gsd.c. */ -extern int _bfd_vms_slurp_gsd (bfd *, int); -extern int _bfd_vms_write_gsd (bfd *, int); +extern int _bfd_vms_slurp_gsd (bfd *abfd, int objtype); +extern int _bfd_vms_write_gsd (bfd *abfd, int objtype); +extern int _bfd_vms_slurp_dbg (bfd *abfd, int objtype); +extern int _bfd_vms_write_dbg (bfd *abfd, int objtype); +extern int _bfd_vms_slurp_tbt (bfd *abfd, int objtype); +extern int _bfd_vms_write_tbt (bfd *abfd, int objtype); -/* vms-mhd.c. */ +/* vms-misc.c. */ -extern int _bfd_vms_slurp_hdr (bfd *, int); -extern int _bfd_vms_write_hdr (bfd *, int); -extern int _bfd_vms_slurp_eom (bfd *, int); -extern int _bfd_vms_write_eom (bfd *, int); +extern int _bfd_vms_get_object_record (bfd *abfd); +extern int _bfd_vms_get_first_record (bfd *abfd); + +/* vms-hdr.c. */ + +extern int _bfd_vms_slurp_hdr (bfd *abfd, int objtype); +extern int _bfd_vms_write_hdr (bfd *abfd, int objtype); +extern int _bfd_vms_slurp_eom (bfd *abfd, int objtype); +extern int _bfd_vms_write_eom (bfd *abfd, int objtype); +extern bfd_boolean _bfd_vms_find_nearest_dst_line + (bfd *abfd, asection *section, asymbol **symbols, bfd_vma offset, + const char **file, const char **func, unsigned int *line); +extern int _bfd_vms_slurp_ihd + (bfd *abfd, unsigned int *isd_offset, unsigned int *ihs_offset); +extern int _bfd_vms_slurp_isd (bfd *abfd, unsigned int offset); +extern int _bfd_vms_slurp_ihs (bfd *abfd, unsigned int offset); /* vms-tir.c. */ -extern int _bfd_vms_slurp_tir (bfd *, int); -extern int _bfd_vms_slurp_dbg (bfd *, int); -extern int _bfd_vms_slurp_tbt (bfd *, int); -extern int _bfd_vms_slurp_lnk (bfd *, int); - -extern int _bfd_vms_write_tir (bfd *, int); -extern int _bfd_vms_write_tbt (bfd *, int); -extern int _bfd_vms_write_dbg (bfd *, int); - -/* The r_type field in a reloc is one of he following values. */ -#define ALPHA_R_IGNORE 0 -#define ALPHA_R_REFQUAD 1 -#define ALPHA_R_BRADDR 2 -#define ALPHA_R_HINT 3 -#define ALPHA_R_SREL16 4 -#define ALPHA_R_SREL32 5 -#define ALPHA_R_SREL64 6 -#define ALPHA_R_OP_PUSH 7 -#define ALPHA_R_OP_STORE 8 -#define ALPHA_R_OP_PSUB 9 -#define ALPHA_R_OP_PRSHIFT 10 -#define ALPHA_R_LINKAGE 11 -#define ALPHA_R_REFLONG 12 -#define ALPHA_R_CODEADDR 13 - -/* Object language definitions. */ - +extern int _bfd_vms_slurp_tir (bfd *abfd, int objtype); +extern int _bfd_vms_write_tir (bfd *abfd, int objtype); +extern int _bfd_vms_slurp_lnk (bfd *abfd, int objtype); + +extern int _bfd_vms_slurp_relocs (bfd *abfd); +extern int _bfd_vms_decode_relocs + (bfd *abfd, arelent *relocs, asection *section, asymbol **symbols); + +/* The r_type field in a reloc is one of the following values. */ +#define ALPHA_R_IGNORE 0 +#define ALPHA_R_REFQUAD 1 +#define ALPHA_R_BRADDR 2 +#define ALPHA_R_HINT 3 +#define ALPHA_R_SREL16 4 +#define ALPHA_R_SREL32 5 +#define ALPHA_R_SREL64 6 +#define ALPHA_R_OP_PUSH 7 +#define ALPHA_R_OP_STORE 8 +#define ALPHA_R_OP_PSUB 9 +#define ALPHA_R_OP_PRSHIFT 10 +#define ALPHA_R_LINKAGE 11 +#define ALPHA_R_REFLONG 12 +#define ALPHA_R_CODEADDR 13 +#define ALPHA_R_NOP 14 +#define ALPHA_R_BSR 15 +#define ALPHA_R_LDA 16 +#define ALPHA_R_BOH 17 + +/* VMS Object Language (OBJ/EOBJ). */ + #define OBJ_S_C_HDR 0 /* VAX moule header record. */ #define OBJ_S_C_GSD 1 /* VAX glbal symbol definition record. */ #define OBJ_S_C_TIR 2 /* VAX tet information record. */ @@ -453,13 +535,15 @@ extern int _bfd_vms_write_dbg (bfd *, int); #define OBJ_S_C_LNK 6 /* VAX liker options record. */ #define OBJ_S_C_EOMW 7 /* VAX en of module word-psect record. */ #define OBJ_S_C_MAXRECTYP 7 /* VAX Lat assigned record type. */ + #define EOBJ_S_C_EMH 8 /* EVAX mdule header record. */ #define EOBJ_S_C_EEOM 9 /* EVAX ed of module record. */ -#define EOBJ_S_C_EGSD 10 /* EVAX gobal symbol definition record.*/ -#define EOBJ_S_C_ETIR 11 /* EVAX txt information record. */ +#define EOBJ_S_C_EGSD 10 /* EVAX gobal symbol definition record. */ +#define EOBJ_S_C_ETIR 11 /* EVAX txt information record. */ #define EOBJ_S_C_EDBG 12 /* EVAX Dbugger information record. */ #define EOBJ_S_C_ETBT 13 /* EVAX Taceback information record. */ #define EOBJ_S_C_MAXRECTYP 13 /* EVAX Lst assigned record type. */ + #define OBJ_S_K_SUBTYP 1 #define OBJ_S_C_SUBTYP 1 #define EOBJ_S_K_SUBTYP 4 @@ -475,8 +559,9 @@ extern int _bfd_vms_write_dbg (bfd *, int); #define EOBJ_S_C_STOREPLIM -1 /* Maximu repeat count on store commands. */ #define OBJ_S_C_PSCALILIM 9 /* Maximu p-sect alignment. */ #define EOBJ_S_C_PSCALILIM 16 /* Maximu p-sect alignment. */ - + #define EVAX_OFFSET 256 /* Type ofset for EVAX codes in switch. */ + /* Miscellaneous definitions. */ #if __GNUC__ @@ -484,140 +569,286 @@ typedef unsigned long long uquad; #else typedef unsigned long uquad; #endif - -#define MAX_OUTREC_SIZE 4096 -#define MIN_OUTREC_LUFT 64 - -typedef struct _vms_section -{ - unsigned char *contents; - bfd_vma offset; - bfd_size_type size; - struct _vms_section *next; -} vms_section; - -extern vms_section * _bfd_get_vms_section (bfd *, int); - -typedef struct _vms_reloc -{ - struct _vms_reloc *next; - arelent *reloc; - asection *section; -} vms_reloc; - + +#define MAX_OUTREC_SIZE 4096 +#define MIN_OUTREC_LUFT 64 + /* VMS module header. */ - -struct hdr_struc -{ - int hdr_b_strlvl; - long hdr_l_arch1; - long hdr_l_arch2; - long hdr_l_recsiz; - char * hdr_t_name; - char * hdr_t_version; - char * hdr_t_date; - char * hdr_c_lnm; - char * hdr_c_src; - char * hdr_c_ttl; -}; - -/* VMS end of module. */ - -struct eom_struc -{ - long eom_l_total_lps; - unsigned char eom_b_comcod; - bfd_boolean eom_has_transfer; - unsigned char eom_b_tfrflg; - long eom_l_psindx; - long eom_l_tfradr; -}; - -enum file_format_enum { FF_UNKNOWN, FF_FOREIGN, FF_NATIVE, FF_VAX }; - -typedef struct vms_symbol_struct -{ - struct bfd_hash_entry bfd_hash; - asymbol *symbol; -} vms_symbol_entry; - + +struct hdr_struct +{ + char hdr_b_strlvl; + int hdr_l_arch1; + int hdr_l_arch2; + int hdr_l_recsiz; + char *hdr_t_name; + char *hdr_t_version; + char *hdr_t_date; + char *hdr_c_lnm; + char *hdr_c_src; + char *hdr_c_ttl; + char *hdr_c_cpr; +}; + +#define EMH_S_W_HDRTYP 4 +#define EMH_S_B_STRLVL 6 +#define EMH_S_L_ARCH1 8 +#define EMH_S_L_ARCH2 12 +#define EH_S_L_RECSIZ 16 +#define EMH_S_B_NAMLNG 20 + +#define EMH_DATE_LENGTH 17 + +/* VMS End-Of-Module records (EOM/EEOM). */ + +struct eom_struct +{ + int eom_l_total_lps; + short eom_w_comcod; + bfd_boolean eom_has_transfer; + char eom_b_tfrflg; + int eom_l_psindx; + int eom_l_tfradr; +}; + +#define EEOM_S_L_TOTAL_LPS 4 +#define EEOM_S_W_COMCOD 8 +#define EEOM_S_B_TFRFLG 10 +#define EEOM_S_L_PSINDX 12 +#define EEOM_S_L_TFRADR 16 + +/* VMS Image Header Records (IHD/EIHD). */ + +#define EIHD_S_K_MAJORID 3 /* Major id constant */ +#define EIHD_S_K_MINORID 0 /* Minor id constant */ +#define EIHD_S_K_EXE 1 /* Executable image */ + +#define EIHD_S_L_SIZE 8 +#define EIHD_S_L_ISDOFF 12 +#define EIHD_S_L_SYMDBGOFF 20 +#define EIHD_S_Q_SYMVVA 40 +#define EIHD_S_L_IMGTYPE 52 + +/* VMS Image Section Description Records (ISD/EISD). */ + +#define EISD_S_L_EISDSIZE 8 +#define EISD_S_L_SECSIZE 12 +#define EISD_S_Q_VIR_ADDR 16 +#define EISD_S_L_FLAGS 24 +#define EISD_S_L_VBN 28 +#define EISD_S_R_CONTROL 32 +#define EISD_S_L_IDENT 36 +#define EISD_S_T_GBLNAM 40 + +#define EISD_S_M_GBL 0x0001 +#define EISD_S_M_CRF 0x0002 +#define EISD_S_M_DZRO 0x0004 +#define EISD_S_M_WRT 0x0008 +#define EISD_S_M_INITALCODE 0x0010 +#define EISD_S_M_BASED 0x0020 +#define EISD_S_M_FIXUPVEC 0x0040 +#define EISD_S_M_RESIDENT 0x0080 +#define EISD_S_M_VECTOR 0x0100 +#define EISD_S_M_PROTECT 0x0200 +#define EISD_S_M_LASTCLU 0x0400 +#define EISD_S_M_EXE 0x0800 +#define EISD_S_M_NONSHRADR 0x1000 +#define EISD_S_M_QUAD_LENGTH 0x2000 +#define EISD_S_M_ALLOC_64BIT 0x4000 + +/* VMS Image Header Symbol Records (IHS/EIHS). */ + +#define EIHS_S_L_DSTVBN 8 +#define EIHS_S_L_DSTSIZE 12 +#define EIHS_S_L_GSTVBN 16 +#define EIHS_S_L_GSTSIZE 20 +#define EIHS_S_L_DMTVBN 24 +#define EIHS_S_L_DMTBYTES 28 + +/* Debugger symbol definitions. */ + +#define DBG_S_L_DMT_MODBEG 0 +#define DBG_S_L_DST_SIZE 4 +#define DBG_S_W_DMT_PSECT_COUNT 8 +#define DBG_S_C_DMT_HEADER_SIZE 12 + +#define DBG_S_L_DMT_PSECT_START 0 +#define DBG_S_L_DMT_PSECT_LENGTH 4 +#define DBG_S_C_DMT_PSECT_SIZE 8 + + +enum file_format_enum { FF_UNKNOWN, FF_FOREIGN, FF_NATIVE }; +enum file_type_enum { FT_UNKNOWN, FT_MODULE, FT_IMAGE }; + +typedef struct vms_symbol_struct +{ + struct bfd_hash_entry bfd_hash; + asymbol *symbol; +} vms_symbol_entry; + /* Stack value for push/pop commands. */ - -struct stack_struct -{ - uquad value; - int psect; -}; -#define STACKSIZE 8192 - -/* location stack definitions for CTL_DFLC, CTL_STLOC, and CTL_STKDL */ - -struct location_struct -{ - unsigned long value; - int psect; -}; -#define LOCATION_SAVE_SIZE 32 - -#define VMS_SECTION_COUNT 1024 - -struct vms_private_data_struct -{ - bfd_boolean is_vax; + +struct stack_struct +{ + uquad value; + int psect; +}; + +#define STACKSIZE 8192 + +/* A minimal decoding of DST compilation units. We only decode + what's needed to get to the line number information. */ + +struct fileinfo +{ + char *name; + unsigned int srec; +}; + +struct srecinfo +{ + struct srecinfo *next; + unsigned int line; + unsigned int sfile; + unsigned int srec; +}; + +struct lineinfo +{ + struct lineinfo *next; + bfd_vma address; + unsigned int line; +}; + +struct funcinfo +{ + struct funcinfo *next; + char *name; + bfd_vma low; + bfd_vma high; +}; + +struct module +{ + /* Chain the previously read compilation unit. */ + struct module *next; + + /* The module name. */ + char *name; + + /* The start offset and size of debug info in the DST section. */ + unsigned int modbeg; + unsigned int size; + + /* The lowest and highest addresses contained in this compilation + unit as specified in the compilation unit header. */ + bfd_vma low; + bfd_vma high; + + /* The listing line table. */ + struct lineinfo *line_table; + + /* The source record table. */ + struct srecinfo *srec_table; + + /* A list of the functions found in this module. */ + struct funcinfo *func_table; + + /* Current allocation of file_table. */ + unsigned int file_table_count; + + /* An array of the files making up this module. */ + struct fileinfo *file_table; +}; + +struct vms_private_data_struct +{ + bfd_boolean is_vax; bfd_boolean fixup_done; /* Flag to indicate if all section pointers and PRIV(sections) are set up correctly. */ - unsigned char *vms_buf; /* Buffer to record. */ - int buf_size; /* Max size of buffer. */ - unsigned char *vms_rec; /* Actual record ptr. */ - int rec_length; /* Remaining record length. */ - int rec_size; /* Actual record size. */ - int rec_type; /* Actual record type. */ - enum file_format_enum file_format; - - struct hdr_struc hdr_data; /* Data from HDR/EMH record. */ - struct eom_struc eom_data; /* Data from EOM/EEOM record. */ - unsigned int section_count; /* # of sections in following array. */ - asection **sections; /* Array of GSD/EGSD sections. */ - int gsd_sym_count; /* # of GSD/EGSD symbols. */ - asymbol **symbols; /* Vector of GSD/EGSD symbols. */ - struct proc_value *procedure; - - struct stack_struct *stack; - int stackptr; - - vms_section *vms_section_table[VMS_SECTION_COUNT]; - + unsigned char *vms_buf; /* record buffer */ + unsigned int buf_size; /* size of record buffer */ + unsigned char *vms_rec; /* record pointer in record buffer */ + unsigned int rec_size; /* record size */ + enum file_format_enum file_format; + + struct hdr_struct hdr_data; /* data from HDR/EMH record */ + struct eom_struct eom_data; /* data from EOM/EEOM record */ + unsigned int section_count; /* # of sections in following array */ + asection **sections; /* array of GSD/EGSD sections */ + unsigned int gsd_sym_count; /* # of GSD/EGSD symbols */ + asymbol **symbols; /* vector of GSD/EGSD symbols */ + struct proc_value *procedure; + + struct stack_struct *stack; + int stackptr; + struct bfd_hash_table *vms_symbol_table; - struct bfd_symbol **symcache; - int symnum; - - struct location_struct *location_stack; - - asection *image_section; /* Section for image_ptr. */ - unsigned char *image_ptr; /* A pointer to section->contents. */ - - unsigned char pdsc[8]; /* Procedure descriptor. */ - - /* Output routine storage. */ - unsigned char *output_buf; /* Output data. */ - int push_level; - int pushed_size; - int length_pos; - int output_size; - int output_alignment; - - /* Linkage index counter - used by conditional store commands (TIR_S_C_STC_). */ - int vms_linkage_index; - - /* see tc-alpha.c of gas for a descripton. */ - int flag_hash_long_names; /* -+, hash instead of truncate. */ - int flag_show_after_trunc; /* -H, shw hashing/truncation. */ -}; - -#define PRIV(name) ((struct vms_private_data_struct *) abfd->tdata.any)->name - + struct bfd_symbol **symcache; + int symnum; + + asection *image_section; /* section for image_ptr */ + unsigned char *image_ptr; /* a pointer to section->contents */ + + unsigned char pdsc[8]; /* procedure descriptor */ + + struct module *modules; /* list of all compilation units */ + + struct dst_info *dst_info; + asection *dst_section; + unsigned char *dst_ptr_end; + unsigned int dst_ptr_offsets_count; /* # of offsets in following array */ + unsigned int *dst_ptr_offsets; /* array of saved image_ptr offsets */ + + /* Shared library support */ + bfd_vma symvva; /* relative virtual address of symbol vector */ + + /* Output routine storage */ + unsigned char *output_buf; /* output data */ + int push_level; + int pushed_size; + int length_pos; + int output_size; + int output_alignment; + + /* linkage index counter used by conditional store commands */ + int vms_linkage_index; + + /* see tc-alpha.c of gas for a description. */ + int flag_hash_long_names; /* -+, hash instead of truncate */ + int flag_show_after_trunc; /* -H, show hashing/truncation */ +}; + +#define PRIV(name) ((struct vms_private_data_struct *)abfd->tdata.any)->name + +/* Used to keep extra VMS specific information for a given section. + + reloc_size holds the size of the relocation stream, note this + is very different from the number of relocations as VMS relocations + are variable length. + + reloc_stream is the actual stream of relocation entries. */ + +struct vms_section_data_struct +{ + bfd_size_type reloc_size; + unsigned char *reloc_stream; + bfd_size_type reloc_offset; + flagword vflags; +}; + +#define vms_section_data(sec) \ + ((struct vms_section_data_struct *)sec->used_by_bfd) + +struct evax_private_udata_struct +{ + asymbol *bsym; + asymbol *enbsym; + char *origname; + int lkindex; +}; + #define SECTION_NAME_TEMPLATE "__SEC__%d" #if VMS_DEBUG @@ -635,7 +866,6 @@ extern char * _bfd_vms_save_sized_string (unsigned char *, int); extern char * _bfd_vms_save_counted_string (unsigned char *); extern void _bfd_vms_push (bfd *, uquad, int); extern uquad _bfd_vms_pop (bfd *, int *); -extern bfd_boolean _bfd_save_vms_section (bfd *, asection *, const void *, file_ptr, bfd_size_type); extern void _bfd_vms_output_begin (bfd *, int, int); extern void _bfd_vms_output_alignment (bfd *, int); extern void _bfd_vms_output_push (bfd *); @@ -653,4 +883,7 @@ extern void _bfd_vms_output_fill (bfd *, int, int); extern char * _bfd_vms_length_hash_symbol (bfd *, const char *, int); extern vms_symbol_entry * _bfd_vms_enter_symbol (bfd *, char *); +#define EGPS_S_V_NO_SHIFT 16 + +extern void bfd_vms_set_section_flags (bfd *, asection *, flagword); #endif /* VMS_H */ diff --git a/bfd/warning.m4 b/bfd/warning.m4 index b366cad..0b0bf2f 100644 --- a/bfd/warning.m4 +++ b/bfd/warning.m4 @@ -11,6 +11,16 @@ AC_ARG_ENABLE(werror, *) AC_MSG_ERROR(bad value ${enableval} for --enable-werror) ;; esac]) +# Enable -Wno-format by default when using gcc on mingw +case "${host}" in + *-*-mingw32*) + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wno-format" + fi + ;; + *) ;; +esac + # Enable -Werror by default when using gcc if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then ERROR_ON_WARNING=yes diff --git a/bfd/xcoff-target.h b/bfd/xcoff-target.h index 8212a0d..4837fdf 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, 2006, 2007 + Copyright 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by Cygnus Support. @@ -57,6 +57,7 @@ #define _bfd_xcoff_bfd_merge_sections coff_bfd_merge_sections #define _bfd_xcoff_bfd_discard_group bfd_generic_discard_group #define _bfd_xcoff_section_already_linked _bfd_generic_section_already_linked +#define _bfd_xcoff_bfd_define_common_symbol _bfd_xcoff_define_common_symbol #define _bfd_xcoff_bfd_link_split_section coff_bfd_link_split_section #define CORE_FILE_P _bfd_dummy_target diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index f14c62b..8885ca3 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, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor , Cygnus Support. This file is part of BFD, the Binary File Descriptor library. @@ -28,6 +28,7 @@ #include "coff/xcoff.h" #include "libcoff.h" #include "libxcoff.h" +#include "libiberty.h" /* This file holds the XCOFF linker code. */ @@ -75,6 +76,88 @@ struct xcoff_link_section_info } *toc_rel_hashes; }; +/* Information that the XCOFF linker collects about an archive. */ +struct xcoff_archive_info +{ + /* The archive described by this entry. */ + bfd *archive; + + /* The import path and import filename to use when referring to + this archive in the .loader section. */ + const char *imppath; + const char *impfile; + + /* True if the archive contains a dynamic object. */ + unsigned int contains_shared_object_p : 1; + + /* True if the previous field is valid. */ + unsigned int know_contains_shared_object_p : 1; +}; + +struct xcoff_link_hash_table +{ + struct bfd_link_hash_table root; + + /* The .debug string hash table. We need to compute this while + reading the input files, so that we know how large the .debug + section will be before we assign section positions. */ + struct bfd_strtab_hash *debug_strtab; + + /* The .debug section we will use for the final output. */ + asection *debug_section; + + /* The .loader section we will use for the final output. */ + asection *loader_section; + + /* A count of non TOC relative relocs which will need to be + allocated in the .loader section. */ + size_t ldrel_count; + + /* The .loader section header. */ + struct internal_ldhdr ldhdr; + + /* The .gl section we use to hold global linkage code. */ + asection *linkage_section; + + /* The .tc section we use to hold toc entries we build for global + linkage code. */ + asection *toc_section; + + /* The .ds section we use to hold function descriptors which we + create for exported symbols. */ + asection *descriptor_section; + + /* The list of import files. */ + struct xcoff_import_file *imports; + + /* Required alignment of sections within the output file. */ + unsigned long file_align; + + /* Whether the .text section must be read-only. */ + bfd_boolean textro; + + /* Whether -brtl was specified. */ + bfd_boolean rtld; + + /* Whether garbage collection was done. */ + bfd_boolean gc; + + /* A linked list of symbols for which we have size information. */ + struct xcoff_link_size_list + { + struct xcoff_link_size_list *next; + struct xcoff_link_hash_entry *h; + bfd_size_type size; + } + *size_list; + + /* Information about archives. */ + htab_t archive_info; + + /* Magic sections: _text, _etext, _data, _edata, _end, end. */ + asection *special_sections[XCOFF_NUMBER_OF_SPECIAL_SECTIONS]; +}; + /* Information that we pass around while doing the final link step. */ struct xcoff_final_link_info @@ -258,7 +341,12 @@ _bfd_xcoff_canonicalize_dynamic_symtab (bfd *abfd, asymbol **psyms) symbuf->symbol.flags = BSF_NO_FLAGS; if ((ldsym.l_smtype & L_EXPORT) != 0) - symbuf->symbol.flags |= BSF_GLOBAL; + { + if ((ldsym.l_smtype & L_WEAK) != 0) + symbuf->symbol.flags |= BSF_WEAK; + else + symbuf->symbol.flags |= BSF_GLOBAL; + } /* FIXME: We have no way to record the other information stored with the loader symbol. */ @@ -398,6 +486,56 @@ _bfd_xcoff_canonicalize_dynamic_reloc (bfd *abfd, return ldhdr.l_nreloc; } +/* Hash functions for xcoff_link_hash_table's archive_info. */ + +static hashval_t +xcoff_archive_info_hash (const void *data) +{ + const struct xcoff_archive_info *info; + + info = (const struct xcoff_archive_info *) data; + return htab_hash_pointer (info->archive); +} + +static int +xcoff_archive_info_eq (const void *data1, const void *data2) +{ + const struct xcoff_archive_info *info1; + const struct xcoff_archive_info *info2; + + info1 = (const struct xcoff_archive_info *) data1; + info2 = (const struct xcoff_archive_info *) data2; + return info1->archive == info2->archive; +} + +/* Return information about archive ARCHIVE. Return NULL on error. */ + +static struct xcoff_archive_info * +xcoff_get_archive_info (struct bfd_link_info *info, bfd *archive) +{ + struct xcoff_link_hash_table *htab; + struct xcoff_archive_info *entryp, entry; + void **slot; + + htab = xcoff_hash_table (info); + entry.archive = archive; + slot = htab_find_slot (htab->archive_info, &entry, INSERT); + if (!slot) + return NULL; + + entryp = *slot; + if (!entryp) + { + entryp = bfd_zalloc (archive, sizeof (entry)); + if (!entryp) + return NULL; + + entryp->archive = archive; + *slot = entryp; + } + return entryp; +} + /* Routine to create an entry in an XCOFF link hash table. */ static struct bfd_hash_entry * @@ -464,6 +602,8 @@ _bfd_xcoff_bfd_link_hash_table_create (bfd *abfd) ret->file_align = 0; ret->textro = FALSE; ret->gc = FALSE; + ret->archive_info = htab_create (37, xcoff_archive_info_hash, + xcoff_archive_info_eq, NULL); memset (ret->special_sections, 0, sizeof ret->special_sections); /* The linker will always generate a full a.out header. We need to @@ -540,6 +680,139 @@ xcoff_read_internal_relocs (bfd *abfd, require_internal, internal_relocs); } +/* Split FILENAME into an import path and an import filename, + storing them in *IMPPATH and *IMPFILE respectively. */ + +bfd_boolean +bfd_xcoff_split_import_path (bfd *abfd, const char *filename, + const char **imppath, const char **impfile) +{ + const char *basename; + size_t length; + char *path; + + basename = lbasename (filename); + length = basename - filename; + if (length == 0) + /* The filename has no directory component, so use an empty path. */ + *imppath = ""; + else if (length == 1) + /* The filename is in the root directory. */ + *imppath = "/"; + else + { + /* Extract the (non-empty) directory part. Note that we don't + need to strip duplicate directory separators from any part + of the string; the native linker doesn't do that either. */ + path = bfd_alloc (abfd, length); + if (path == NULL) + return FALSE; + memcpy (path, filename, length - 1); + path[length - 1] = 0; + *imppath = path; + } + *impfile = basename; + return TRUE; +} + +/* Set ARCHIVE's import path as though its filename had been given + as FILENAME. */ + +bfd_boolean +bfd_xcoff_set_archive_import_path (struct bfd_link_info *info, + bfd *archive, const char *filename) +{ + struct xcoff_archive_info *archive_info; + + archive_info = xcoff_get_archive_info (info, archive); + return (archive_info != NULL + && bfd_xcoff_split_import_path (archive, filename, + &archive_info->imppath, + &archive_info->impfile)); +} + +/* H is an imported symbol. Set the import module's path, file and member + to IMPATH, IMPFILE and IMPMEMBER respectively. All three are null if + no specific import module is specified. */ + +static bfd_boolean +xcoff_set_import_path (struct bfd_link_info *info, + struct xcoff_link_hash_entry *h, + const char *imppath, const char *impfile, + const char *impmember) +{ + unsigned int c; + struct xcoff_import_file **pp; + + /* We overload the ldindx field to hold the l_ifile value for this + symbol. */ + BFD_ASSERT (h->ldsym == NULL); + BFD_ASSERT ((h->flags & XCOFF_BUILT_LDSYM) == 0); + if (imppath == NULL) + h->ldindx = -1; + else + { + /* We start c at 1 because the first entry in the import list is + reserved for the library search path. */ + for (pp = &xcoff_hash_table (info)->imports, c = 1; + *pp != NULL; + pp = &(*pp)->next, ++c) + { + if (strcmp ((*pp)->path, imppath) == 0 + && strcmp ((*pp)->file, impfile) == 0 + && strcmp ((*pp)->member, impmember) == 0) + break; + } + + if (*pp == NULL) + { + struct xcoff_import_file *n; + bfd_size_type amt = sizeof (* n); + + n = bfd_alloc (info->output_bfd, amt); + if (n == NULL) + return FALSE; + n->next = NULL; + n->path = imppath; + n->file = impfile; + n->member = impmember; + *pp = n; + } + h->ldindx = c; + } + return TRUE; +} + +/* H is the bfd symbol associated with exported .loader symbol LDSYM. + Return true if LDSYM defines H. */ + +static bfd_boolean +xcoff_dynamic_definition_p (struct xcoff_link_hash_entry *h, + struct internal_ldsym *ldsym) +{ + /* If we didn't know about H before processing LDSYM, LDSYM + definitely defines H. */ + if (h->root.type == bfd_link_hash_new) + return TRUE; + + /* If H is currently a weak dynamic symbol, and if LDSYM is a strong + dynamic symbol, LDSYM trumps the current definition of H. */ + if ((ldsym->l_smtype & L_WEAK) == 0 + && (h->flags & XCOFF_DEF_DYNAMIC) != 0 + && (h->flags & XCOFF_DEF_REGULAR) == 0 + && (h->root.type == bfd_link_hash_defweak + || h->root.type == bfd_link_hash_undefweak)) + return TRUE; + + /* If H is currently undefined, LDSYM defines it. */ + if ((h->flags & XCOFF_DEF_DYNAMIC) == 0 + && (h->root.type == bfd_link_hash_undefined + || h->root.type == bfd_link_hash_undefweak)) + return TRUE; + + return FALSE; +} + /* This function is used to add symbols from a dynamic object to the global symbol table. */ @@ -552,15 +825,12 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info) const char *strings; bfd_byte *elsym, *elsymend; struct xcoff_import_file *n; - const char *bname; - const char *mname; - const char *s; unsigned int c; struct xcoff_import_file **pp; /* We can only handle a dynamic object if we are generating an XCOFF output file. */ - if (info->hash->creator != abfd->xvec) + if (info->output_bfd->xvec != abfd->xvec) { (*_bfd_error_handler) (_("%s: XCOFF shared object when not producing XCOFF output"), @@ -638,43 +908,33 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info) if (h == NULL) return FALSE; - h->flags |= XCOFF_DEF_DYNAMIC; - - /* If the symbol is undefined, and the BFD it was found in is - not a dynamic object, change the BFD to this dynamic object, - so that we can get the correct import file ID. */ - if ((h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak) - && (h->root.u.undef.abfd == NULL - || (h->root.u.undef.abfd->flags & DYNAMIC) == 0)) - h->root.u.undef.abfd = abfd; - - if (h->root.type == bfd_link_hash_new) - { - h->root.type = bfd_link_hash_undefined; - h->root.u.undef.abfd = abfd; - /* We do not want to add this to the undefined symbol list. */ - } - - if (h->smclas == XMC_UA - || h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak) - h->smclas = ldsym.l_smclas; - - /* Unless this is an XMC_XO symbol, we don't bother to actually - define it, since we don't have a section to put it in anyhow. - Instead, the relocation routines handle the DEF_DYNAMIC flag - correctly. */ + if (!xcoff_dynamic_definition_p (h, &ldsym)) + continue; - if (h->smclas == XMC_XO - && (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak)) + h->flags |= XCOFF_DEF_DYNAMIC; + h->smclas = ldsym.l_smclas; + if (h->smclas == XMC_XO) { /* This symbol has an absolute value. */ - h->root.type = bfd_link_hash_defined; + if ((ldsym.l_smtype & L_WEAK) != 0) + h->root.type = bfd_link_hash_defweak; + else + h->root.type = bfd_link_hash_defined; h->root.u.def.section = bfd_abs_section_ptr; h->root.u.def.value = ldsym.l_value; } + else + { + /* Otherwise, we don't bother to actually define the symbol, + since we don't have a section to put it in anyhow. + We assume instead that an undefined XCOFF_DEF_DYNAMIC symbol + should be imported from the symbol's undef.abfd. */ + if ((ldsym.l_smtype & L_WEAK) != 0) + h->root.type = bfd_link_hash_undefweak; + else + h->root.type = bfd_link_hash_undefined; + h->root.u.undef.abfd = abfd; + } /* If this symbol defines a function descriptor, then it implicitly defines the function code as well. */ @@ -701,33 +961,30 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info) if (hds == NULL) return FALSE; - if (hds->root.type == bfd_link_hash_new) - { - hds->root.type = bfd_link_hash_undefined; - hds->root.u.undef.abfd = abfd; - /* We do not want to add this to the undefined - symbol list. */ - } - hds->descriptor = h; h->descriptor = hds; } - hds->flags |= XCOFF_DEF_DYNAMIC; - if (hds->smclas == XMC_UA) - hds->smclas = XMC_PR; - - /* An absolute symbol appears to actually define code, not a - function descriptor. This is how some math functions are - implemented on AIX 4.1. */ - if (h->smclas == XMC_XO - && (hds->root.type == bfd_link_hash_undefined - || hds->root.type == bfd_link_hash_undefweak)) + if (xcoff_dynamic_definition_p (hds, &ldsym)) { - hds->smclas = XMC_XO; - hds->root.type = bfd_link_hash_defined; - hds->root.u.def.section = bfd_abs_section_ptr; - hds->root.u.def.value = ldsym.l_value; + hds->root.type = h->root.type; + hds->flags |= XCOFF_DEF_DYNAMIC; + if (h->smclas == XMC_XO) + { + /* An absolute symbol appears to actually define code, not a + function descriptor. This is how some math functions are + implemented on AIX 4.1. */ + hds->smclas = XMC_XO; + hds->root.u.def.section = bfd_abs_section_ptr; + hds->root.u.def.value = ldsym.l_value; + } + else + { + hds->smclas = XMC_PR; + hds->root.u.undef.abfd = abfd; + /* We do not want to add this to the undefined + symbol list. */ + } } } } @@ -744,25 +1001,30 @@ xcoff_link_add_dynamic_symbols (bfd *abfd, struct bfd_link_info *info) return FALSE; n->next = NULL; - /* For some reason, the path entry in the import file list for a - shared object appears to always be empty. The file name is the - base name. */ - n->path = ""; if (abfd->my_archive == NULL) { - bname = bfd_get_filename (abfd); - mname = ""; + if (!bfd_xcoff_split_import_path (abfd, abfd->filename, + &n->path, &n->file)) + return FALSE; + n->member = ""; } else { - bname = bfd_get_filename (abfd->my_archive); - mname = bfd_get_filename (abfd); + struct xcoff_archive_info *archive_info; + + archive_info = xcoff_get_archive_info (info, abfd->my_archive); + if (!archive_info->impfile) + { + if (!bfd_xcoff_split_import_path (archive_info->archive, + archive_info->archive->filename, + &archive_info->imppath, + &archive_info->impfile)) + return FALSE; + } + n->path = archive_info->imppath; + n->file = archive_info->impfile; + n->member = bfd_get_filename (abfd); } - s = strrchr (bname, '/'); - if (s != NULL) - bname = s + 1; - n->file = bname; - n->member = mname; /* We start c at 1 because the first import file number is reserved for LIBPATH. */ @@ -786,13 +1048,14 @@ xcoff_link_create_extra_sections (bfd * abfd, struct bfd_link_info *info) { bfd_boolean return_value = FALSE; - if (info->hash->creator == abfd->xvec) + if (info->output_bfd->xvec == abfd->xvec) { /* We need to build a .loader section, so we do it here. This won't work if we're producing an XCOFF output file with no XCOFF input files. FIXME. */ - if (xcoff_hash_table (info)->loader_section == NULL) + if (!info->relocatable + && xcoff_hash_table (info)->loader_section == NULL) { asection *lsec; flagword flags = SEC_HAS_CONTENTS | SEC_IN_MEMORY; @@ -947,6 +1210,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) bfd_size_type symcount; struct xcoff_link_hash_entry **sym_hash; asection **csect_cache; + unsigned int *lineno_counts; bfd_size_type linesz; asection *o; asection *last_real; @@ -1013,6 +1277,15 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) goto error_return; xcoff_data (abfd)->csects = csect_cache; + /* We garbage-collect line-number information on a symbol-by-symbol + basis, so we need to have quick access to the number of entries + per symbol. */ + amt = symcount * sizeof (unsigned int); + lineno_counts = bfd_zalloc (abfd, amt); + if (lineno_counts == NULL && symcount != 0) + goto error_return; + xcoff_data (abfd)->lineno_counts = lineno_counts; + /* While splitting sections into csects, we need to assign the relocs correctly. The relocs and the csects must both be in order by VMA within a given section, so we handle this by @@ -1077,7 +1350,6 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) const char *name; char buf[SYMNMLEN + 1]; int smtyp; - flagword flags; asection *section; bfd_vma value; struct xcoff_link_hash_entry *set_toc; @@ -1086,23 +1358,15 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) /* In this pass we are only interested in symbols with csect information. */ - if (sym.n_sclass != C_EXT && sym.n_sclass != C_HIDEXT) + if (!CSECT_SYM_P (sym.n_sclass)) { /* Set csect_cache, Normally csect is a .pr, .rw etc. created in the loop If C_FILE or first time, handle special - Advance esym, sym_hash, csect_hash ptr's - Keep track of the last_symndx for the current file. */ - if (sym.n_sclass == C_FILE && csect != NULL) - { - xcoff_section_data (abfd, csect)->last_symndx = - ((esym - - (bfd_byte *) obj_coff_external_syms (abfd)) - / symesz); - csect = NULL; - } - + Advance esym, sym_hash, csect_hash ptrs. */ + if (sym.n_sclass == C_FILE) + csect = NULL; if (csect != NULL) *csect_cache = csect; else if (first_csect == NULL || sym.n_sclass == C_FILE) @@ -1112,6 +1376,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) esym += (sym.n_numaux + 1) * symesz; sym_hash += sym.n_numaux + 1; csect_cache += sym.n_numaux + 1; + lineno_counts += sym.n_numaux + 1; continue; } @@ -1182,7 +1447,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if (lin.l_lnno == 0) break; } - csect->lineno_count += (linp - linpstart) / linesz; + *lineno_counts = (linp - linpstart) / linesz; /* The setting of line_filepos will only be useful if all the line number entries for a csect are contiguous; this only matters for @@ -1213,7 +1478,6 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) smtyp = SMTYP_SMTYP (aux.x_csect.x_smtyp); - flags = BSF_GLOBAL; section = NULL; value = 0; set_toc = NULL; @@ -1253,13 +1517,6 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) break; case XTY_SD: - /* This is a csect definition. */ - if (csect != NULL) - { - xcoff_section_data (abfd, csect)->last_symndx = - ((esym - (bfd_byte *) obj_coff_external_syms (abfd)) / symesz); - } - csect = NULL; csect_index = -(unsigned) 1; @@ -1294,7 +1551,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) place. */ if (aux.x_csect.x_smclas == XMC_TC && sym.n_sclass == C_HIDEXT - && info->hash->creator == abfd->xvec + && info->output_bfd->xvec == abfd->xvec && ((bfd_xcoff_is_xcoff32 (abfd) && aux.x_csect.x_scnlen.l == 4) || (bfd_xcoff_is_xcoff64 (abfd) @@ -1331,7 +1588,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) erelsym = ((bfd_byte *) obj_coff_external_syms (abfd) + rel->r_symndx * symesz); bfd_coff_swap_sym_in (abfd, (void *) erelsym, (void *) &relsym); - if (relsym.n_sclass == C_EXT) + if (EXTERN_SYM_P (relsym.n_sclass)) { const char *relname; char relbuf[SYMNMLEN + 1]; @@ -1486,9 +1743,9 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if (first_csect == NULL) first_csect = csect; - /* If this symbol is C_EXT, we treat it as starting at the + /* If this symbol is external, we treat it as starting at the beginning of the newly created section. */ - if (sym.n_sclass == C_EXT) + if (EXTERN_SYM_P (sym.n_sclass)) { section = csect; value = 0; @@ -1541,14 +1798,6 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) named .tocbss, and rely on the linker script to put that in the TOC area. */ - if (csect != NULL) - { - xcoff_section_data (abfd, csect)->last_symndx = - ((esym - - (bfd_byte *) obj_coff_external_syms (abfd)) - / symesz); - } - if (aux.x_csect.x_smclas == XMC_TD) { /* The linker script puts the .td section in the data @@ -1585,7 +1834,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) if (first_csect == NULL) first_csect = csect; - if (sym.n_sclass == C_EXT) + if (EXTERN_SYM_P (sym.n_sclass)) { csect->flags |= SEC_IS_COMMON; csect->size = 0; @@ -1626,9 +1875,10 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) /* Now we have enough information to add the symbol to the linker hash table. */ - if (sym.n_sclass == C_EXT) + if (EXTERN_SYM_P (sym.n_sclass)) { bfd_boolean copy; + flagword flags; BFD_ASSERT (section != NULL); @@ -1639,6 +1889,15 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) || sym._n._n_n._n_offset == 0) copy = TRUE; + /* Ignore global linkage code when linking statically. */ + if (info->static_link + && (smtyp == XTY_SD || smtyp == XTY_LD) + && aux.x_csect.x_smclas == XMC_GL) + { + section = bfd_und_section_ptr; + value = 0; + } + /* The AIX linker appears to only detect multiple symbol definitions when there is a reference to the symbol. If a symbol is defined multiple times, and the only @@ -1663,8 +1922,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) We also have to handle the case of statically linking a shared object, which will cause symbol redefinitions, although this is an easier case to detect. */ - - if (info->hash->creator == abfd->xvec) + else if (info->output_bfd->xvec == abfd->xvec) { if (! bfd_is_und_section (section)) *sym_hash = xcoff_link_hash_lookup (xcoff_hash_table (info), @@ -1684,23 +1942,8 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) && ! bfd_is_com_section (section)) { /* This is a second definition of a defined symbol. */ - if ((abfd->flags & DYNAMIC) != 0 - && ((*sym_hash)->smclas != XMC_GL - || aux.x_csect.x_smclas == XMC_GL - || ((*sym_hash)->root.u.def.section->owner->flags - & DYNAMIC) == 0)) - { - /* The new symbol is from a shared library, and - either the existing symbol is not global - linkage code or this symbol is global linkage - code. If the existing symbol is global - linkage code and the new symbol is not, then - we want to use the new symbol. */ - section = bfd_und_section_ptr; - value = 0; - } - else if (((*sym_hash)->root.u.def.section->owner->flags - & DYNAMIC) != 0) + if (((*sym_hash)->flags & XCOFF_DEF_REGULAR) == 0 + && ((*sym_hash)->flags & XCOFF_DEF_DYNAMIC) != 0) { /* The existing symbol is from a shared library. Replace it. */ @@ -1716,6 +1959,12 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) section = bfd_und_section_ptr; value = 0; } + else if (sym.n_sclass == C_AIX_WEAKEXT + || (*sym_hash)->root.type == bfd_link_hash_defweak) + { + /* At least one of the definitions is weak. + Allow the normal rules to take effect. */ + } else if ((*sym_hash)->root.u.undef.next != NULL || info->hash->undefs_tail == &(*sym_hash)->root) { @@ -1735,8 +1984,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) } } else if (((*sym_hash)->flags & XCOFF_MULTIPLY_DEFINED) != 0 - && ((*sym_hash)->root.type == bfd_link_hash_defined - || (*sym_hash)->root.type == bfd_link_hash_defweak) + && (*sym_hash)->root.type == bfd_link_hash_defined && (bfd_is_und_section (section) || bfd_is_com_section (section))) { @@ -1771,6 +2019,7 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) a second time from the csects. */ BFD_ASSERT (last_real->next == first_csect); last_real->next = NULL; + flags = (sym.n_sclass == C_EXT ? BSF_GLOBAL : BSF_WEAK); if (! (_bfd_generic_link_add_one_symbol (info, abfd, name, flags, section, value, NULL, copy, TRUE, @@ -1789,11 +2038,13 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) = csect->alignment_power; } - if (info->hash->creator == abfd->xvec) + if (info->output_bfd->xvec == abfd->xvec) { int flag; - if (smtyp == XTY_ER || smtyp == XTY_CM) + if (smtyp == XTY_ER + || smtyp == XTY_CM + || section == bfd_und_section_ptr) flag = XCOFF_REF_REGULAR; else flag = XCOFF_DEF_REGULAR; @@ -1805,11 +2056,20 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) } } - *csect_cache = csect; + if (smtyp == XTY_ER) + *csect_cache = section; + else + { + *csect_cache = csect; + if (csect != NULL) + xcoff_section_data (abfd, csect)->last_symndx + = (esym - (bfd_byte *) obj_coff_external_syms (abfd)) / symesz; + } esym += (sym.n_numaux + 1) * symesz; sym_hash += sym.n_numaux + 1; csect_cache += sym.n_numaux + 1; + lineno_counts += sym.n_numaux + 1; } BFD_ASSERT (last_real == NULL || last_real->next == first_csect); @@ -1845,19 +2105,16 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) goto error_return; } - /* We identify all symbols which are called, so that we - can create glue code for calls to functions imported - from dynamic objects. */ - if (info->hash->creator == abfd->xvec + /* We identify all function symbols that are the target + of a relocation, so that we can create glue code for + functions imported from dynamic objects. */ + if (info->output_bfd->xvec == abfd->xvec && *rel_csect != bfd_und_section_ptr - && (rel->r_type == R_BR - || rel->r_type == R_RBR) && obj_xcoff_sym_hashes (abfd)[rel->r_symndx] != NULL) { struct xcoff_link_hash_entry *h; h = obj_xcoff_sym_hashes (abfd)[rel->r_symndx]; - h->flags |= XCOFF_CALLED; /* If the symbol name starts with a period, it is the code of a function. If the symbol is currently undefined, then add an undefined symbol @@ -1890,11 +2147,12 @@ xcoff_link_add_symbols (bfd *abfd, struct bfd_link_info *info) hds = (struct xcoff_link_hash_entry *) bh; } hds->flags |= XCOFF_DESCRIPTOR; - BFD_ASSERT ((hds->flags & XCOFF_CALLED) == 0 - && (h->flags & XCOFF_DESCRIPTOR) == 0); + BFD_ASSERT ((h->flags & XCOFF_DESCRIPTOR) == 0); hds->descriptor = h; h->descriptor = hds; } + if (h->root.root.string[0] == '.') + h->flags |= XCOFF_CALLED; } } @@ -2066,7 +2324,7 @@ xcoff_link_check_ar_symbols (bfd *abfd, if ((abfd->flags & DYNAMIC) != 0 && ! info->static_link - && info->hash->creator == abfd->xvec) + && info->output_bfd->xvec == abfd->xvec) return xcoff_link_check_dynamic_ar_symbols (abfd, info, pneeded); symesz = bfd_coff_symesz (abfd); @@ -2078,7 +2336,7 @@ xcoff_link_check_ar_symbols (bfd *abfd, bfd_coff_swap_sym_in (abfd, (void *) esym, (void *) &sym); - if (sym.n_sclass == C_EXT && sym.n_scnum != N_UNDEF) + if (EXTERN_SYM_P (sym.n_sclass) && sym.n_scnum != N_UNDEF) { const char *name; char buf[SYMNMLEN + 1]; @@ -2099,7 +2357,7 @@ xcoff_link_check_ar_symbols (bfd *abfd, undefined references in shared objects. */ if (h != NULL && h->type == bfd_link_hash_undefined - && (info->hash->creator != abfd->xvec + && (info->output_bfd->xvec != abfd->xvec || (((struct xcoff_link_hash_entry *) h)->flags & XCOFF_DEF_DYNAMIC) == 0)) { @@ -2127,6 +2385,9 @@ xcoff_link_check_archive_element (bfd *abfd, struct bfd_link_info *info, bfd_boolean *pneeded) { + bfd_boolean keep_syms_p; + + keep_syms_p = (obj_coff_external_syms (abfd) != NULL); if (! _bfd_coff_get_external_symbols (abfd)) return FALSE; @@ -2137,9 +2398,11 @@ xcoff_link_check_archive_element (bfd *abfd, { if (! xcoff_link_add_symbols (abfd, info)) return FALSE; + if (info->keep_memory) + keep_syms_p = TRUE; } - if (! info->keep_memory || ! *pneeded) + if (!keep_syms_p) { if (! _bfd_coff_free_symbols (abfd)) return FALSE; @@ -2180,7 +2443,7 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info) while (member != NULL) { if (bfd_check_format (member, bfd_object) - && (info->hash->creator == member->xvec) + && (info->output_bfd->xvec == member->xvec) && (! bfd_has_map (abfd) || (member->flags & DYNAMIC) != 0)) { bfd_boolean needed; @@ -2203,38 +2466,406 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info) } } -/* Mark a symbol as not being garbage, including the section in which - it is defined. */ - -static inline bfd_boolean -xcoff_mark_symbol (struct bfd_link_info *info, struct xcoff_link_hash_entry *h) +bfd_boolean +_bfd_xcoff_define_common_symbol (bfd *output_bfd ATTRIBUTE_UNUSED, + struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct bfd_link_hash_entry *harg) { - if ((h->flags & XCOFF_MARK) != 0) - return TRUE; + struct xcoff_link_hash_entry *h; - h->flags |= XCOFF_MARK; - if (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) + if (!bfd_generic_define_common_symbol (output_bfd, info, harg)) + return FALSE; + + h = (struct xcoff_link_hash_entry *) harg; + h->flags |= XCOFF_DEF_REGULAR; + return TRUE; +} + +/* If symbol H has not been interpreted as a function descriptor, + see whether it should be. Set up its descriptor information if so. */ + +static bfd_boolean +xcoff_find_function (struct bfd_link_info *info, + struct xcoff_link_hash_entry *h) +{ + if ((h->flags & XCOFF_DESCRIPTOR) == 0 + && h->root.root.string[0] != '.') { - asection *hsec; + char *fnname; + struct xcoff_link_hash_entry *hfn; + bfd_size_type amt; - hsec = h->root.u.def.section; - if (! bfd_is_abs_section (hsec) - && (hsec->flags & SEC_MARK) == 0) + amt = strlen (h->root.root.string) + 2; + fnname = bfd_malloc (amt); + if (fnname == NULL) + return FALSE; + fnname[0] = '.'; + strcpy (fnname + 1, h->root.root.string); + hfn = xcoff_link_hash_lookup (xcoff_hash_table (info), + fnname, FALSE, FALSE, TRUE); + free (fnname); + if (hfn != NULL + && hfn->smclas == XMC_PR + && (hfn->root.type == bfd_link_hash_defined + || hfn->root.type == bfd_link_hash_defweak)) { - if (! xcoff_mark (info, hsec)) - return FALSE; + h->flags |= XCOFF_DESCRIPTOR; + h->descriptor = hfn; + hfn->descriptor = h; } } + return TRUE; +} + +/* Return true if the given bfd contains at least one shared object. */ - if (h->toc_section != NULL - && (h->toc_section->flags & SEC_MARK) == 0) +static bfd_boolean +xcoff_archive_contains_shared_object_p (struct bfd_link_info *info, + bfd *archive) +{ + struct xcoff_archive_info *archive_info; + bfd *member; + + archive_info = xcoff_get_archive_info (info, archive); + if (!archive_info->know_contains_shared_object_p) { - if (! xcoff_mark (info, h->toc_section)) - return FALSE; - } + member = bfd_openr_next_archived_file (archive, NULL); + while (member != NULL && (member->flags & DYNAMIC) == 0) + member = bfd_openr_next_archived_file (archive, member); - return TRUE; + archive_info->contains_shared_object_p = (member != NULL); + archive_info->know_contains_shared_object_p = 1; + } + return archive_info->contains_shared_object_p; +} + +/* Symbol H qualifies for export by -bexpfull. Return true if it also + qualifies for export by -bexpall. */ + +static bfd_boolean +xcoff_covered_by_expall_p (struct xcoff_link_hash_entry *h) +{ + /* Exclude symbols beginning with '_'. */ + if (h->root.root.string[0] == '_') + return FALSE; + + /* Exclude archive members that would otherwise be unreferenced. */ + if ((h->flags & XCOFF_MARK) == 0 + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h->root.u.def.section->owner != NULL + && h->root.u.def.section->owner->my_archive != NULL) + return FALSE; + + return TRUE; +} + +/* Return true if symbol H qualifies for the forms of automatic export + specified by AUTO_EXPORT_FLAGS. */ + +static bfd_boolean +xcoff_auto_export_p (struct bfd_link_info *info, + struct xcoff_link_hash_entry *h, + unsigned int auto_export_flags) +{ + /* Don't automatically export things that were explicitly exported. */ + if ((h->flags & XCOFF_EXPORT) != 0) + return FALSE; + + /* Don't export things that we don't define. */ + if ((h->flags & XCOFF_DEF_REGULAR) == 0) + return FALSE; + + /* Don't export functions; export their descriptors instead. */ + if (h->root.root.string[0] == '.') + return FALSE; + + /* We don't export a symbol which is being defined by an object + included from an archive which contains a shared object. The + rationale is that if an archive contains both an unshared and + a shared object, then there must be some reason that the + unshared object is unshared, and we don't want to start + providing a shared version of it. In particular, this solves + a bug involving the _savefNN set of functions. gcc will call + those functions without providing a slot to restore the TOC, + so it is essential that these functions be linked in directly + and not from a shared object, which means that a shared + object which also happens to link them in must not export + them. This is confusing, but I haven't been able to think of + a different approach. Note that the symbols can, of course, + be exported explicitly. */ + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + { + bfd *owner; + + owner = h->root.u.def.section->owner; + if (owner != NULL + && owner->my_archive != NULL + && xcoff_archive_contains_shared_object_p (info, owner->my_archive)) + return FALSE; + } + + /* Otherwise, all symbols are exported by -bexpfull. */ + if ((auto_export_flags & XCOFF_EXPFULL) != 0) + return TRUE; + + /* Despite its name, -bexpall exports most but not all symbols. */ + if ((auto_export_flags & XCOFF_EXPALL) != 0 + && xcoff_covered_by_expall_p (h)) + return TRUE; + + return FALSE; +} + +/* Return true if relocation REL needs to be copied to the .loader section. + If REL is against a global symbol, H is that symbol, otherwise it + is null. */ + +static bfd_boolean +xcoff_need_ldrel_p (struct bfd_link_info *info, struct internal_reloc *rel, + struct xcoff_link_hash_entry *h) +{ + if (!xcoff_hash_table (info)->loader_section) + return FALSE; + + switch (rel->r_type) + { + case R_TOC: + case R_GL: + case R_TCL: + case R_TRL: + case R_TRLA: + /* We should never need a .loader reloc for a TOC-relative reloc. */ + return FALSE; + + default: + /* In this case, relocations against defined symbols can be resolved + statically. */ + if (h == NULL + || h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak + || h->root.type == bfd_link_hash_common) + return FALSE; + + /* We will always provide a local definition of function symbols, + even if we don't have one yet. */ + if ((h->flags & XCOFF_CALLED) != 0) + return FALSE; + + return TRUE; + + case R_POS: + case R_NEG: + case R_RL: + case R_RLA: + /* Absolute relocations against absolute symbols can be + resolved statically. */ + if (h != NULL + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && bfd_is_abs_section (h->root.u.def.section)) + return FALSE; + + return TRUE; + } +} + +/* Mark a symbol as not being garbage, including the section in which + it is defined. */ + +static inline bfd_boolean +xcoff_mark_symbol (struct bfd_link_info *info, struct xcoff_link_hash_entry *h) +{ + if ((h->flags & XCOFF_MARK) != 0) + return TRUE; + + h->flags |= XCOFF_MARK; + + /* If we're marking an undefined symbol, try find some way of + defining it. */ + if (!info->relocatable + && (h->flags & XCOFF_IMPORT) == 0 + && (h->flags & XCOFF_DEF_REGULAR) == 0 + && (h->root.type == bfd_link_hash_undefined + || h->root.type == bfd_link_hash_undefweak)) + { + /* First check whether this symbol can be interpreted as an + undefined function descriptor for a defined function symbol. */ + if (!xcoff_find_function (info, h)) + return FALSE; + + if ((h->flags & XCOFF_DESCRIPTOR) != 0 + && (h->descriptor->root.type == bfd_link_hash_defined + || h->descriptor->root.type == bfd_link_hash_defweak)) + { + /* This is a descriptor for a defined symbol, but the input + objects have not defined the descriptor itself. Fill in + the definition automatically. + + Note that we do this even if we found a dynamic definition + of H. The local function definition logically overrides + the dynamic one. */ + asection *sec; + + sec = xcoff_hash_table (info)->descriptor_section; + h->root.type = bfd_link_hash_defined; + h->root.u.def.section = sec; + h->root.u.def.value = sec->size; + h->smclas = XMC_DS; + h->flags |= XCOFF_DEF_REGULAR; + + /* The size of the function descriptor depends on whether this + is xcoff32 (12) or xcoff64 (24). */ + sec->size += bfd_xcoff_function_descriptor_size (sec->owner); + + /* A function descriptor uses two relocs: one for the + associated code, and one for the TOC address. */ + xcoff_hash_table (info)->ldrel_count += 2; + sec->reloc_count += 2; + + /* Mark the function itself. */ + if (!xcoff_mark_symbol (info, h->descriptor)) + return FALSE; + + /* Mark the TOC section, so that we get an anchor + to relocate against. */ + if (!xcoff_mark (info, xcoff_hash_table (info)->toc_section)) + return FALSE; + + /* We handle writing out the contents of the descriptor in + xcoff_write_global_symbol. */ + } + else if (info->static_link) + /* We can't get a symbol value dynamically, so just assume + that it's undefined. */ + h->flags |= XCOFF_WAS_UNDEFINED; + else if ((h->flags & XCOFF_CALLED) != 0) + { + /* This is a function symbol for which we need to create + linkage code. */ + asection *sec; + struct xcoff_link_hash_entry *hds; + + /* Mark the descriptor (and its TOC section). */ + hds = h->descriptor; + BFD_ASSERT ((hds->root.type == bfd_link_hash_undefined + || hds->root.type == bfd_link_hash_undefweak) + && (hds->flags & XCOFF_DEF_REGULAR) == 0); + if (!xcoff_mark_symbol (info, hds)) + return FALSE; + + /* Treat this symbol as undefined if the descriptor was. */ + if ((hds->flags & XCOFF_WAS_UNDEFINED) != 0) + h->flags |= XCOFF_WAS_UNDEFINED; + + /* Allocate room for the global linkage code itself. */ + sec = xcoff_hash_table (info)->linkage_section; + h->root.type = bfd_link_hash_defined; + h->root.u.def.section = sec; + h->root.u.def.value = sec->size; + h->smclas = XMC_GL; + h->flags |= XCOFF_DEF_REGULAR; + sec->size += bfd_xcoff_glink_code_size (info->output_bfd); + + /* The global linkage code requires a TOC entry for the + descriptor. */ + if (hds->toc_section == NULL) + { + int byte_size; + + /* 32 vs 64 + xcoff32 uses 4 bytes in the toc. + xcoff64 uses 8 bytes in the toc. */ + if (bfd_xcoff_is_xcoff64 (info->output_bfd)) + byte_size = 8; + else if (bfd_xcoff_is_xcoff32 (info->output_bfd)) + byte_size = 4; + else + return FALSE; + + /* Allocate room in the fallback TOC section. */ + hds->toc_section = xcoff_hash_table (info)->toc_section; + hds->u.toc_offset = hds->toc_section->size; + hds->toc_section->size += byte_size; + if (!xcoff_mark (info, hds->toc_section)) + return FALSE; + + /* Allocate room for a static and dynamic R_TOC + relocation. */ + ++xcoff_hash_table (info)->ldrel_count; + ++hds->toc_section->reloc_count; + + /* Set the index to -2 to force this symbol to + get written out. */ + hds->indx = -2; + hds->flags |= XCOFF_SET_TOC | XCOFF_LDREL; + } + } + else if ((h->flags & XCOFF_DEF_DYNAMIC) == 0) + { + /* Record that the symbol was undefined, then import it. + -brtl links use a special fake import file. */ + h->flags |= XCOFF_WAS_UNDEFINED | XCOFF_IMPORT; + if (xcoff_hash_table (info)->rtld) + { + if (!xcoff_set_import_path (info, h, "", "..", "")) + return FALSE; + } + else + { + if (!xcoff_set_import_path (info, h, NULL, NULL, NULL)) + return FALSE; + } + } + } + + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + { + asection *hsec; + + hsec = h->root.u.def.section; + if (! bfd_is_abs_section (hsec) + && (hsec->flags & SEC_MARK) == 0) + { + if (! xcoff_mark (info, hsec)) + return FALSE; + } + } + + if (h->toc_section != NULL + && (h->toc_section->flags & SEC_MARK) == 0) + { + if (! xcoff_mark (info, h->toc_section)) + return FALSE; + } + + return TRUE; +} + +/* Look for a symbol called NAME. If the symbol is defined, mark it. + If the symbol exists, set FLAGS. */ + +static bfd_boolean +xcoff_mark_symbol_by_name (struct bfd_link_info *info, + const char *name, unsigned int flags) +{ + struct xcoff_link_hash_entry *h; + + h = xcoff_link_hash_lookup (xcoff_hash_table (info), name, + FALSE, FALSE, TRUE); + if (h != NULL) + { + h->flags |= flags; + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + { + if (!xcoff_mark (info, h->root.u.def.section)) + return FALSE; + } + } + return TRUE; } /* The mark phase of garbage collection. For a given section, mark @@ -2252,30 +2883,28 @@ xcoff_mark (struct bfd_link_info *info, asection *sec) sec->flags |= SEC_MARK; - if (sec->owner->xvec == info->hash->creator + if (sec->owner->xvec == info->output_bfd->xvec && coff_section_data (sec->owner, sec) != NULL && xcoff_section_data (sec->owner, sec) != NULL) { - struct xcoff_link_hash_entry **hp, **hpend; + struct xcoff_link_hash_entry **syms; struct internal_reloc *rel, *relend; + asection **csects; + unsigned long i, first, last; /* Mark all the symbols in this section. */ - hp = (obj_xcoff_sym_hashes (sec->owner) - + xcoff_section_data (sec->owner, sec)->first_symndx); - hpend = (obj_xcoff_sym_hashes (sec->owner) - + xcoff_section_data (sec->owner, sec)->last_symndx); - for (; hp < hpend; hp++) - { - struct xcoff_link_hash_entry *h; - - h = *hp; - if (h != NULL - && (h->flags & XCOFF_MARK) == 0) - { - if (! xcoff_mark_symbol (info, h)) - return FALSE; - } - } + syms = obj_xcoff_sym_hashes (sec->owner); + csects = xcoff_data (sec->owner)->csects; + first = xcoff_section_data (sec->owner, sec)->first_symndx; + last = xcoff_section_data (sec->owner, sec)->last_symndx; + for (i = first; i <= last; i++) + if (csects[i] == sec + && syms[i] != NULL + && (syms[i]->flags & XCOFF_MARK) == 0) + { + if (!xcoff_mark_symbol (info, syms[i])) + return FALSE; + } /* Look through the section relocs. */ if ((sec->flags & SEC_RELOC) != 0 @@ -2288,7 +2917,6 @@ xcoff_mark (struct bfd_link_info *info, asection *sec) relend = rel + sec->reloc_count; for (; rel < relend; rel++) { - asection *rsec; struct xcoff_link_hash_entry *h; if ((unsigned int) rel->r_symndx @@ -2296,57 +2924,34 @@ xcoff_mark (struct bfd_link_info *info, asection *sec) continue; h = obj_xcoff_sym_hashes (sec->owner)[rel->r_symndx]; - if (h != NULL - && (h->flags & XCOFF_MARK) == 0) + if (h != NULL) { - if (! xcoff_mark_symbol (info, h)) - return FALSE; + if ((h->flags & XCOFF_MARK) == 0) + { + if (!xcoff_mark_symbol (info, h)) + return FALSE; + } } - - rsec = xcoff_data (sec->owner)->csects[rel->r_symndx]; - if (rsec != NULL - && (rsec->flags & SEC_MARK) == 0) + else { - if (! xcoff_mark (info, rsec)) - return FALSE; + asection *rsec; + + rsec = xcoff_data (sec->owner)->csects[rel->r_symndx]; + if (rsec != NULL + && (rsec->flags & SEC_MARK) == 0) + { + if (!xcoff_mark (info, rsec)) + return FALSE; + } } /* See if this reloc needs to be copied into the .loader section. */ - switch (rel->r_type) + if (xcoff_need_ldrel_p (info, rel, h)) { - default: - if (h == NULL - || h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak - || h->root.type == bfd_link_hash_common - || ((h->flags & XCOFF_CALLED) != 0 - && (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak) - && h->root.root.string[0] == '.' - && h->descriptor != NULL - && ((h->descriptor->flags & XCOFF_DEF_DYNAMIC) != 0 - || ((h->descriptor->flags & XCOFF_IMPORT) != 0 - && (h->descriptor->flags - & XCOFF_DEF_REGULAR) == 0)))) - break; - /* Fall through. */ - case R_POS: - case R_NEG: - case R_RL: - case R_RLA: ++xcoff_hash_table (info)->ldrel_count; if (h != NULL) h->flags |= XCOFF_LDREL; - break; - case R_TOC: - case R_GL: - case R_TCL: - case R_TRL: - case R_TRLA: - /* We should never need a .loader reloc for a TOC - relative reloc. */ - break; } } @@ -2386,11 +2991,10 @@ xcoff_sweep (struct bfd_link_info *info) /* Keep all sections from non-XCOFF input files. Keep special sections. Keep .debug sections for the moment. */ - if (sub->xvec != info->hash->creator + if (sub->xvec != info->output_bfd->xvec || o == xcoff_hash_table (info)->debug_section || o == xcoff_hash_table (info)->loader_section || o == xcoff_hash_table (info)->linkage_section - || o == xcoff_hash_table (info)->toc_section || o == xcoff_hash_table (info)->descriptor_section || strcmp (o->name, ".debug") == 0) o->flags |= SEC_MARK; @@ -2398,7 +3002,6 @@ xcoff_sweep (struct bfd_link_info *info) { o->size = 0; o->reloc_count = 0; - o->lineno_count = 0; } } } @@ -2478,8 +3081,7 @@ bfd_xcoff_import_symbol (bfd *output_bfd, hds->root.u.undef.abfd = h->root.u.undef.abfd; } hds->flags |= XCOFF_DESCRIPTOR; - BFD_ASSERT ((hds->flags & XCOFF_CALLED) == 0 - && (h->flags & XCOFF_DESCRIPTOR) == 0); + BFD_ASSERT ((h->flags & XCOFF_DESCRIPTOR) == 0); hds->descriptor = h; h->descriptor = hds; } @@ -2509,48 +3111,11 @@ bfd_xcoff_import_symbol (bfd *output_bfd, h->root.type = bfd_link_hash_defined; h->root.u.def.section = bfd_abs_section_ptr; h->root.u.def.value = val; + h->smclas = XMC_XO; } - /* We overload the ldindx field to hold the l_ifile value for this - symbol. */ - BFD_ASSERT (h->ldsym == NULL); - BFD_ASSERT ((h->flags & XCOFF_BUILT_LDSYM) == 0); - if (imppath == NULL) - h->ldindx = -1; - else - { - unsigned int c; - struct xcoff_import_file **pp; - - /* We start c at 1 because the first entry in the import list is - reserved for the library search path. */ - for (pp = &xcoff_hash_table (info)->imports, c = 1; - *pp != NULL; - pp = &(*pp)->next, ++c) - { - if (strcmp ((*pp)->path, imppath) == 0 - && strcmp ((*pp)->file, impfile) == 0 - && strcmp ((*pp)->member, impmember) == 0) - break; - } - - if (*pp == NULL) - { - struct xcoff_import_file *n; - bfd_size_type amt = sizeof (* n); - - n = bfd_alloc (output_bfd, amt); - if (n == NULL) - return FALSE; - n->next = NULL; - n->path = imppath; - n->file = impfile; - n->member = impmember; - *pp = n; - } - - h->ldindx = c; - } + if (!xcoff_set_import_path (info, h, imppath, impfile, impmember)) + return FALSE; return TRUE; } @@ -2572,46 +3137,18 @@ bfd_xcoff_export_symbol (bfd *output_bfd, /* FIXME: I'm not at all sure what syscall is supposed to mean, so I'm just going to ignore it until somebody explains it. */ - /* See if this is a function descriptor. It may be one even though - it is not so marked. */ - if ((h->flags & XCOFF_DESCRIPTOR) == 0 - && h->root.root.string[0] != '.') - { - char *fnname; - struct xcoff_link_hash_entry *hfn; - bfd_size_type amt = strlen (h->root.root.string) + 2; + /* Make sure we don't garbage collect this symbol. */ + if (! xcoff_mark_symbol (info, h)) + return FALSE; - fnname = bfd_malloc (amt); - if (fnname == NULL) - return FALSE; - fnname[0] = '.'; - strcpy (fnname + 1, h->root.root.string); - hfn = xcoff_link_hash_lookup (xcoff_hash_table (info), - fnname, FALSE, FALSE, TRUE); - free (fnname); - if (hfn != NULL - && hfn->smclas == XMC_PR - && (hfn->root.type == bfd_link_hash_defined - || hfn->root.type == bfd_link_hash_defweak)) - { - h->flags |= XCOFF_DESCRIPTOR; - h->descriptor = hfn; - hfn->descriptor = h; - } - } - - /* Make sure we don't garbage collect this symbol. */ - if (! xcoff_mark_symbol (info, h)) - return FALSE; - - /* If this is a function descriptor, make sure we don't garbage - collect the associated function code. We normally don't have to - worry about this, because the descriptor will be attached to a - section with relocs, but if we are creating the descriptor - ourselves those relocs will not be visible to the mark code. */ - if ((h->flags & XCOFF_DESCRIPTOR) != 0) - { - if (! xcoff_mark_symbol (info, h->descriptor)) + /* If this is a function descriptor, make sure we don't garbage + collect the associated function code. We normally don't have to + worry about this, because the descriptor will be attached to a + section with relocs, but if we are creating the descriptor + ourselves those relocs will not be visible to the mark code. */ + if ((h->flags & XCOFF_DESCRIPTOR) != 0) + { + if (! xcoff_mark_symbol (info, h->descriptor)) return FALSE; } @@ -2642,8 +3179,12 @@ bfd_xcoff_link_count_reloc (bfd *output_bfd, return FALSE; } - h->flags |= XCOFF_REF_REGULAR | XCOFF_LDREL; - ++xcoff_hash_table (info)->ldrel_count; + h->flags |= XCOFF_REF_REGULAR; + if (xcoff_hash_table (info)->loader_section) + { + h->flags |= XCOFF_LDREL; + ++xcoff_hash_table (info)->ldrel_count; + } /* Mark the symbol to avoid garbage collection. */ if (! xcoff_mark_symbol (info, h)) @@ -2675,244 +3216,84 @@ bfd_xcoff_record_link_assignment (bfd *output_bfd, return TRUE; } -/* Add a symbol to the .loader symbols, if necessary. */ +/* An xcoff_link_hash_traverse callback for which DATA points to an + xcoff_loader_info. Mark all symbols that should be automatically + exported. */ static bfd_boolean -xcoff_build_ldsyms (struct xcoff_link_hash_entry *h, void * p) +xcoff_mark_auto_exports (struct xcoff_link_hash_entry *h, void *data) { - struct xcoff_loader_info *ldinfo = (struct xcoff_loader_info *) p; - bfd_size_type amt; + struct xcoff_loader_info *ldinfo; - if (h->root.type == bfd_link_hash_warning) - h = (struct xcoff_link_hash_entry *) h->root.u.i.link; - - /* __rtinit, this symbol has special handling. */ - if (h->flags & XCOFF_RTINIT) - return TRUE; - - /* If this is a final link, and the symbol was defined as a common - symbol in a regular object file, and there was no definition in - any dynamic object, then the linker will have allocated space for - the symbol in a common section but the XCOFF_DEF_REGULAR flag - will not have been set. */ - if (h->root.type == bfd_link_hash_defined - && (h->flags & XCOFF_DEF_REGULAR) == 0 - && (h->flags & XCOFF_REF_REGULAR) != 0 - && (h->flags & XCOFF_DEF_DYNAMIC) == 0 - && (bfd_is_abs_section (h->root.u.def.section) - || (h->root.u.def.section->owner->flags & DYNAMIC) == 0)) - h->flags |= XCOFF_DEF_REGULAR; - - /* If all defined symbols should be exported, mark them now. We - don't want to export the actual functions, just the function - descriptors. */ - if (ldinfo->export_defineds - && (h->flags & XCOFF_DEF_REGULAR) != 0 - && h->root.root.string[0] != '.') + ldinfo = (struct xcoff_loader_info *) data; + if (xcoff_auto_export_p (ldinfo->info, h, ldinfo->auto_export_flags)) { - bfd_boolean export; - - /* We don't export a symbol which is being defined by an object - included from an archive which contains a shared object. The - rationale is that if an archive contains both an unshared and - a shared object, then there must be some reason that the - unshared object is unshared, and we don't want to start - providing a shared version of it. In particular, this solves - a bug involving the _savefNN set of functions. gcc will call - those functions without providing a slot to restore the TOC, - so it is essential that these functions be linked in directly - and not from a shared object, which means that a shared - object which also happens to link them in must not export - them. This is confusing, but I haven't been able to think of - a different approach. Note that the symbols can, of course, - be exported explicitly. */ - export = TRUE; - if ((h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && h->root.u.def.section->owner != NULL - && h->root.u.def.section->owner->my_archive != NULL) - { - bfd *arbfd, *member; - - arbfd = h->root.u.def.section->owner->my_archive; - member = bfd_openr_next_archived_file (arbfd, NULL); - while (member != NULL) - { - if ((member->flags & DYNAMIC) != 0) - { - export = FALSE; - break; - } - member = bfd_openr_next_archived_file (arbfd, member); - } - } - - if (export) - h->flags |= XCOFF_EXPORT; + if (!xcoff_mark_symbol (ldinfo->info, h)) + ldinfo->failed = TRUE; } + return TRUE; +} - /* We don't want to garbage collect symbols which are not defined in - XCOFF files. This is a convenient place to mark them. */ - if (xcoff_hash_table (ldinfo->info)->gc - && (h->flags & XCOFF_MARK) == 0 - && (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - && (h->root.u.def.section->owner == NULL - || (h->root.u.def.section->owner->xvec - != ldinfo->info->hash->creator))) - h->flags |= XCOFF_MARK; - - /* If this symbol is called and defined in a dynamic object, or it - is imported, then we need to set up global linkage code for it. - (Unless we did garbage collection and we didn't need this - symbol.) */ - if ((h->flags & XCOFF_CALLED) != 0 - && (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak) - && h->root.root.string[0] == '.' - && h->descriptor != NULL - && ((h->descriptor->flags & XCOFF_DEF_DYNAMIC) != 0 - || ((h->descriptor->flags & XCOFF_IMPORT) != 0 - && (h->descriptor->flags & XCOFF_DEF_REGULAR) == 0)) - && (! xcoff_hash_table (ldinfo->info)->gc - || (h->flags & XCOFF_MARK) != 0)) - { - asection *sec; - struct xcoff_link_hash_entry *hds; - - sec = xcoff_hash_table (ldinfo->info)->linkage_section; - h->root.type = bfd_link_hash_defined; - h->root.u.def.section = sec; - h->root.u.def.value = sec->size; - h->smclas = XMC_GL; - h->flags |= XCOFF_DEF_REGULAR; - sec->size += bfd_xcoff_glink_code_size(ldinfo->output_bfd); - - /* The global linkage code requires a TOC entry for the - descriptor. */ - hds = h->descriptor; - BFD_ASSERT ((hds->root.type == bfd_link_hash_undefined - || hds->root.type == bfd_link_hash_undefweak) - && (hds->flags & XCOFF_DEF_REGULAR) == 0); - hds->flags |= XCOFF_MARK; - if (hds->toc_section == NULL) - { - int byte_size; - - /* 32 vs 64 - xcoff32 uses 4 bytes in the toc. - xcoff64 uses 8 bytes in the toc. */ - if (bfd_xcoff_is_xcoff64 (ldinfo->output_bfd)) - byte_size = 8; - else if (bfd_xcoff_is_xcoff32 (ldinfo->output_bfd)) - byte_size = 4; - else - return FALSE; +/* Add a symbol to the .loader symbols, if necessary. */ - hds->toc_section = xcoff_hash_table (ldinfo->info)->toc_section; - hds->u.toc_offset = hds->toc_section->size; - hds->toc_section->size += byte_size; - ++xcoff_hash_table (ldinfo->info)->ldrel_count; - ++hds->toc_section->reloc_count; - hds->indx = -2; - hds->flags |= XCOFF_SET_TOC | XCOFF_LDREL; - - /* We need to call xcoff_build_ldsyms recursively here, - because we may already have passed hds on the traversal. */ - xcoff_build_ldsyms (hds, p); - } - } +/* INPUT_BFD has an external symbol associated with hash table entry H + and csect CSECT. Return true if INPUT_BFD defines H. */ - /* If this symbol is exported, but not defined, we need to try to - define it. */ - if ((h->flags & XCOFF_EXPORT) != 0 - && (h->flags & XCOFF_IMPORT) == 0 - && (h->flags & XCOFF_DEF_REGULAR) == 0 - && (h->flags & XCOFF_DEF_DYNAMIC) == 0 - && (h->root.type == bfd_link_hash_undefined - || h->root.type == bfd_link_hash_undefweak)) +static bfd_boolean +xcoff_final_definition_p (bfd *input_bfd, struct xcoff_link_hash_entry *h, + asection *csect) +{ + switch (h->root.type) { - if ((h->flags & XCOFF_DESCRIPTOR) != 0 - && (h->descriptor->root.type == bfd_link_hash_defined - || h->descriptor->root.type == bfd_link_hash_defweak)) - { - asection *sec; - - /* This is an undefined function descriptor associated with - a defined entry point. We can build up a function - descriptor ourselves. Believe it or not, the AIX linker - actually does this, and there are cases where we need to - do it as well. */ - sec = xcoff_hash_table (ldinfo->info)->descriptor_section; - h->root.type = bfd_link_hash_defined; - h->root.u.def.section = sec; - h->root.u.def.value = sec->size; - h->smclas = XMC_DS; - h->flags |= XCOFF_DEF_REGULAR; + case bfd_link_hash_defined: + case bfd_link_hash_defweak: + /* No input bfd owns absolute symbols. They are written by + xcoff_write_global_symbol instead. */ + return (!bfd_is_abs_section (csect) + && h->root.u.def.section == csect); + + case bfd_link_hash_common: + return h->root.u.c.p->section->owner == input_bfd; + + case bfd_link_hash_undefined: + case bfd_link_hash_undefweak: + /* We can't treat undef.abfd as the owner because that bfd + might be a dynamic object. Allow any bfd to claim it. */ + return TRUE; - /* The size of the function descriptor depends if this is an - xcoff32 (12) or xcoff64 (24). */ - sec->size += - bfd_xcoff_function_descriptor_size(ldinfo->output_bfd); + default: + abort (); + } +} - /* A function descriptor uses two relocs: one for the - associated code, and one for the TOC address. */ - xcoff_hash_table (ldinfo->info)->ldrel_count += 2; - sec->reloc_count += 2; +/* See if H should have a loader symbol associated with it. */ - /* We handle writing out the contents of the descriptor in - xcoff_write_global_symbol. */ - } - else - { - (*_bfd_error_handler) - (_("warning: attempt to export undefined symbol `%s'"), - h->root.root.string); - h->ldsym = NULL; - return TRUE; - } - } +static bfd_boolean +xcoff_build_ldsym (struct xcoff_loader_info *ldinfo, + struct xcoff_link_hash_entry *h) +{ + bfd_size_type amt; - /* If this is still a common symbol, and it wasn't garbage - collected, we need to actually allocate space for it in the .bss - section. */ - if (h->root.type == bfd_link_hash_common - && (! xcoff_hash_table (ldinfo->info)->gc - || (h->flags & XCOFF_MARK) != 0) - && h->root.u.c.p->section->size == 0) + /* Warn if this symbol is exported but not defined. */ + if ((h->flags & XCOFF_EXPORT) != 0 + && (h->flags & XCOFF_WAS_UNDEFINED) != 0) { - BFD_ASSERT (bfd_is_com_section (h->root.u.c.p->section)); - h->root.u.c.p->section->size = h->root.u.c.size; + (*_bfd_error_handler) + (_("warning: attempt to export undefined symbol `%s'"), + h->root.root.string); + return TRUE; } /* We need to add a symbol to the .loader section if it is mentioned in a reloc which we are copying to the .loader section and it was not defined or common, or if it is the entry point, or if it is being exported. */ - if (((h->flags & XCOFF_LDREL) == 0 || h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak || h->root.type == bfd_link_hash_common) && (h->flags & XCOFF_ENTRY) == 0 && (h->flags & XCOFF_EXPORT) == 0) - { - h->ldsym = NULL; - return TRUE; - } - - /* We don't need to add this symbol if we did garbage collection and - we did not mark this symbol. */ - if (xcoff_hash_table (ldinfo->info)->gc - && (h->flags & XCOFF_MARK) == 0) - { - h->ldsym = NULL; - return TRUE; - } - - /* We may have already processed this symbol due to the recursive - call above. */ - if ((h->flags & XCOFF_BUILT_LDSYM) != 0) return TRUE; /* We need to add this symbol to the .loader symbols. */ @@ -2927,7 +3308,12 @@ xcoff_build_ldsyms (struct xcoff_link_hash_entry *h, void * p) } if ((h->flags & XCOFF_IMPORT) != 0) - h->ldsym->l_ifile = h->ldindx; + { + /* Give imported descriptors class XMC_DS rather than XMC_UA. */ + if ((h->flags & XCOFF_DESCRIPTOR) != 0) + h->smclas = XMC_DS; + h->ldsym->l_ifile = h->ldindx; + } /* The first 3 symbol table indices are reserved to indicate the data, text and bss sections. */ @@ -2935,14 +3321,271 @@ xcoff_build_ldsyms (struct xcoff_link_hash_entry *h, void * p) ++ldinfo->ldsym_count; - if (! bfd_xcoff_put_ldsymbol_name (ldinfo->output_bfd, ldinfo, - h->ldsym, h->root.root.string)) - return FALSE; + if (! bfd_xcoff_put_ldsymbol_name (ldinfo->output_bfd, ldinfo, + h->ldsym, h->root.root.string)) + return FALSE; + + h->flags |= XCOFF_BUILT_LDSYM; + return TRUE; +} + +/* An xcoff_htab_traverse callback that is called for each symbol + once garbage collection is complete. */ + +static bfd_boolean +xcoff_post_gc_symbol (struct xcoff_link_hash_entry *h, void * p) +{ + struct xcoff_loader_info *ldinfo = (struct xcoff_loader_info *) p; + + if (h->root.type == bfd_link_hash_warning) + h = (struct xcoff_link_hash_entry *) h->root.u.i.link; + + /* __rtinit, this symbol has special handling. */ + if (h->flags & XCOFF_RTINIT) + return TRUE; + + /* We don't want to garbage collect symbols which are not defined in + XCOFF files. This is a convenient place to mark them. */ + if (xcoff_hash_table (ldinfo->info)->gc + && (h->flags & XCOFF_MARK) == 0 + && (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && (h->root.u.def.section->owner == NULL + || (h->root.u.def.section->owner->xvec + != ldinfo->info->output_bfd->xvec))) + h->flags |= XCOFF_MARK; + + /* Skip discarded symbols. */ + if (xcoff_hash_table (ldinfo->info)->gc + && (h->flags & XCOFF_MARK) == 0) + return TRUE; + + /* If this is still a common symbol, and it wasn't garbage + collected, we need to actually allocate space for it in the .bss + section. */ + if (h->root.type == bfd_link_hash_common + && h->root.u.c.p->section->size == 0) + { + BFD_ASSERT (bfd_is_com_section (h->root.u.c.p->section)); + h->root.u.c.p->section->size = h->root.u.c.size; + } + + if (xcoff_hash_table (ldinfo->info)->loader_section) + { + if (xcoff_auto_export_p (ldinfo->info, h, ldinfo->auto_export_flags)) + h->flags |= XCOFF_EXPORT; + + if (!xcoff_build_ldsym (ldinfo, h)) + return FALSE; + } + + return TRUE; +} + +/* INPUT_BFD includes XCOFF symbol ISYM, which is associated with linker + hash table entry H and csect CSECT. AUX contains ISYM's auxillary + csect information, if any. NAME is the function's name if the name + is stored in the .debug section, otherwise it is null. + + Return 1 if we should include an appropriately-adjusted ISYM + in the output file, 0 if we should discard ISYM, or -1 if an + error occured. */ + +static int +xcoff_keep_symbol_p (struct bfd_link_info *info, bfd *input_bfd, + struct internal_syment *isym, + union internal_auxent *aux, + struct xcoff_link_hash_entry *h, + asection *csect, const char *name) +{ + int smtyp; + + /* If we are skipping this csect, we want to strip the symbol too. */ + if (csect == NULL) + return 0; + + /* Likewise if we garbage-collected the csect. */ + if (xcoff_hash_table (info)->gc + && !bfd_is_abs_section (csect) + && !bfd_is_und_section (csect) + && (csect->flags & SEC_MARK) == 0) + return 0; + + /* An XCOFF linker always removes C_STAT symbols. */ + if (isym->n_sclass == C_STAT) + return 0; + + /* We generate the TOC anchor separately. */ + if (isym->n_sclass == C_HIDEXT + && aux->x_csect.x_smclas == XMC_TC0) + return 0; + + /* If we are stripping all symbols, we want to discard this one. */ + if (info->strip == strip_all) + return 0; + + /* Discard symbols that are defined elsewhere. */ + if (EXTERN_SYM_P (isym->n_sclass)) + { + if ((h->flags & XCOFF_ALLOCATED) != 0) + return 0; + if (!xcoff_final_definition_p (input_bfd, h, csect)) + return 0; + } + + /* If we're discarding local symbols, check whether ISYM is local. */ + smtyp = SMTYP_SMTYP (aux->x_csect.x_smtyp); + if (info->discard == discard_all + && !EXTERN_SYM_P (isym->n_sclass) + && (isym->n_sclass != C_HIDEXT || smtyp != XTY_SD)) + return 0; + + /* If we're stripping debugging symbols, check whether ISYM is one. */ + if (info->strip == strip_debugger + && isym->n_scnum == N_DEBUG) + return 0; + + /* If we are stripping symbols based on name, check how ISYM's + name should be handled. */ + if (info->strip == strip_some + || info->discard == discard_l) + { + char buf[SYMNMLEN + 1]; + + if (name == NULL) + { + name = _bfd_coff_internal_syment_name (input_bfd, isym, buf); + if (name == NULL) + return -1; + } + + if (info->strip == strip_some + && bfd_hash_lookup (info->keep_hash, name, FALSE, FALSE) == NULL) + return 0; + + if (info->discard == discard_l + && !EXTERN_SYM_P (isym->n_sclass) + && (isym->n_sclass != C_HIDEXT || smtyp != XTY_SD) + && bfd_is_local_label_name (input_bfd, name)) + return 0; + } + + return 1; +} + +/* Lay out the .loader section, filling in the header and the import paths. + LIBPATH is as for bfd_xcoff_size_dynamic_sections. */ + +static bfd_boolean +xcoff_build_loader_section (struct xcoff_loader_info *ldinfo, + const char *libpath) +{ + bfd *output_bfd; + struct xcoff_link_hash_table *htab; + struct internal_ldhdr *ldhdr; + struct xcoff_import_file *fl; + bfd_size_type stoff; + size_t impsize, impcount; + asection *lsec; + char *out; + + /* Work out the size of the import file names. Each import file ID + consists of three null terminated strings: the path, the file + name, and the archive member name. The first entry in the list + of names is the path to use to find objects, which the linker has + passed in as the libpath argument. For some reason, the path + entry in the other import file names appears to always be empty. */ + output_bfd = ldinfo->output_bfd; + htab = xcoff_hash_table (ldinfo->info); + impsize = strlen (libpath) + 3; + impcount = 1; + for (fl = htab->imports; fl != NULL; fl = fl->next) + { + ++impcount; + impsize += (strlen (fl->path) + + strlen (fl->file) + + strlen (fl->member) + + 3); + } + + /* Set up the .loader section header. */ + ldhdr = &htab->ldhdr; + ldhdr->l_version = bfd_xcoff_ldhdr_version(output_bfd); + ldhdr->l_nsyms = ldinfo->ldsym_count; + ldhdr->l_nreloc = htab->ldrel_count; + ldhdr->l_istlen = impsize; + ldhdr->l_nimpid = impcount; + ldhdr->l_impoff = (bfd_xcoff_ldhdrsz (output_bfd) + + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd) + + ldhdr->l_nreloc * bfd_xcoff_ldrelsz (output_bfd)); + ldhdr->l_stlen = ldinfo->string_size; + stoff = ldhdr->l_impoff + impsize; + if (ldinfo->string_size == 0) + ldhdr->l_stoff = 0; + else + ldhdr->l_stoff = stoff; + + /* 64 bit elements to ldhdr + The swap out routine for 32 bit will ignore them. + Nothing fancy, symbols come after the header and relocs come + after symbols. */ + ldhdr->l_symoff = bfd_xcoff_ldhdrsz (output_bfd); + ldhdr->l_rldoff = (bfd_xcoff_ldhdrsz (output_bfd) + + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd)); + + /* We now know the final size of the .loader section. Allocate + space for it. */ + lsec = htab->loader_section; + lsec->size = stoff + ldhdr->l_stlen; + lsec->contents = bfd_zalloc (output_bfd, lsec->size); + if (lsec->contents == NULL) + return FALSE; + + /* Set up the header. */ + bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents); + + /* Set up the import file names. */ + out = (char *) lsec->contents + ldhdr->l_impoff; + strcpy (out, libpath); + out += strlen (libpath) + 1; + *out++ = '\0'; + *out++ = '\0'; + for (fl = htab->imports; fl != NULL; fl = fl->next) + { + const char *s; + + s = fl->path; + while ((*out++ = *s++) != '\0') + ; + s = fl->file; + while ((*out++ = *s++) != '\0') + ; + s = fl->member; + while ((*out++ = *s++) != '\0') + ; + } + + BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == stoff); + + /* Set up the symbol string table. */ + if (ldinfo->string_size > 0) + { + memcpy (out, ldinfo->strings, ldinfo->string_size); + free (ldinfo->strings); + ldinfo->strings = NULL; + } - h->flags |= XCOFF_BUILT_LDSYM; + /* We can't set up the symbol table or the relocs yet, because we + don't yet know the final position of the various sections. The + .loader symbols are written out when the corresponding normal + symbols are written out in xcoff_link_input_bfd or + xcoff_write_global_symbol. The .loader relocs are written out + when the corresponding normal relocs are handled in + xcoff_link_input_bfd. */ return TRUE; } + /* Build the .loader section. This is called by the XCOFF linker emulation before_allocation routine. We must set the size of the .loader section before the linker lays out the output file. @@ -2955,10 +3598,9 @@ xcoff_build_ldsyms (struct xcoff_link_hash_entry *h, void * p) -bmaxdata linker option). GC is whether to do garbage collection (the -bgc linker option). MODTYPE is the module type (the -bmodtype linker option). TEXTRO is whether the text section must - be read only (the -btextro linker option). EXPORT_DEFINEDS is - whether all defined symbols should be exported (the -unix linker - option). SPECIAL_SECTIONS is set by this routine to csects with - magic names like _end. */ + be read only (the -btextro linker option). AUTO_EXPORT_FLAGS + is a mask of XCOFF_EXPALL and XCOFF_EXPFULL. SPECIAL_SECTIONS + is set by this routine to csects with magic names like _end. */ bfd_boolean bfd_xcoff_size_dynamic_sections (bfd *output_bfd, @@ -2971,19 +3613,12 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, bfd_boolean gc, int modtype, bfd_boolean textro, - bfd_boolean export_defineds, + unsigned int auto_export_flags, asection **special_sections, bfd_boolean rtld) { - struct xcoff_link_hash_entry *hentry; - asection *lsec; struct xcoff_loader_info ldinfo; int i; - size_t impsize, impcount; - struct xcoff_import_file *fl; - struct internal_ldhdr *ldhdr; - bfd_size_type stoff; - char *out; asection *sec; bfd *sub; struct bfd_strtab_hash *debug_strtab; @@ -3000,7 +3635,7 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, ldinfo.failed = FALSE; ldinfo.output_bfd = output_bfd; ldinfo.info = info; - ldinfo.export_defineds = export_defineds; + ldinfo.auto_export_flags = auto_export_flags; ldinfo.ldsym_count = 0; ldinfo.string_size = 0; ldinfo.strings = NULL; @@ -3012,18 +3647,11 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, xcoff_hash_table (info)->file_align = file_align; xcoff_hash_table (info)->textro = textro; - - hentry = NULL; - if (entry != NULL) - { - hentry = xcoff_link_hash_lookup (xcoff_hash_table (info), entry, - FALSE, FALSE, TRUE); - if (hentry != NULL) - hentry->flags |= XCOFF_ENTRY; - } + xcoff_hash_table (info)->rtld = rtld; /* __rtinit */ - if (info->init_function || info->fini_function || rtld) + if (xcoff_hash_table (info)->loader_section + && (info->init_function || info->fini_function || rtld)) { struct xcoff_link_hash_entry *hsym; struct internal_ldsym *ldsym; @@ -3074,11 +3702,7 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, } /* Garbage collect unused sections. */ - if (info->relocatable - || ! gc - || hentry == NULL - || (hentry->root.type != bfd_link_hash_defined - && hentry->root.type != bfd_link_hash_defweak)) + if (info->relocatable || !gc) { gc = FALSE; xcoff_hash_table (info)->gc = FALSE; @@ -3091,7 +3715,12 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, for (o = sub->sections; o != NULL; o = o->next) { - if ((o->flags & SEC_MARK) == 0) + /* We shouldn't unconditionaly mark the TOC section. + The output file should only have a TOC if either + (a) one of the input files did or (b) we end up + creating TOC references as part of the link process. */ + if (o != xcoff_hash_table (info)->toc_section + && (o->flags & SEC_MARK) == 0) { if (! xcoff_mark (info, o)) goto error_return; @@ -3101,8 +3730,22 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, } else { - if (! xcoff_mark (info, hentry->root.u.def.section)) + if (entry != NULL + && !xcoff_mark_symbol_by_name (info, entry, XCOFF_ENTRY)) goto error_return; + if (info->init_function != NULL + && !xcoff_mark_symbol_by_name (info, info->init_function, 0)) + goto error_return; + if (info->fini_function != NULL + && !xcoff_mark_symbol_by_name (info, info->fini_function, 0)) + goto error_return; + if (auto_export_flags != 0) + { + xcoff_link_hash_traverse (xcoff_hash_table (info), + xcoff_mark_auto_exports, &ldinfo); + if (ldinfo.failed) + goto error_return; + } xcoff_sweep (info); xcoff_hash_table (info)->gc = TRUE; } @@ -3124,103 +3767,15 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, /* I'm not sure what to do in this bizarre case. */ return TRUE; - xcoff_link_hash_traverse (xcoff_hash_table (info), xcoff_build_ldsyms, + xcoff_link_hash_traverse (xcoff_hash_table (info), xcoff_post_gc_symbol, (void *) &ldinfo); if (ldinfo.failed) goto error_return; - /* Work out the size of the import file names. Each import file ID - consists of three null terminated strings: the path, the file - name, and the archive member name. The first entry in the list - of names is the path to use to find objects, which the linker has - passed in as the libpath argument. For some reason, the path - entry in the other import file names appears to always be empty. */ - impsize = strlen (libpath) + 3; - impcount = 1; - for (fl = xcoff_hash_table (info)->imports; fl != NULL; fl = fl->next) - { - ++impcount; - impsize += (strlen (fl->path) - + strlen (fl->file) - + strlen (fl->member) - + 3); - } - - /* Set up the .loader section header. */ - ldhdr = &xcoff_hash_table (info)->ldhdr; - ldhdr->l_version = bfd_xcoff_ldhdr_version(output_bfd); - ldhdr->l_nsyms = ldinfo.ldsym_count; - ldhdr->l_nreloc = xcoff_hash_table (info)->ldrel_count; - ldhdr->l_istlen = impsize; - ldhdr->l_nimpid = impcount; - ldhdr->l_impoff = (bfd_xcoff_ldhdrsz(output_bfd) - + ldhdr->l_nsyms * bfd_xcoff_ldsymsz(output_bfd) - + ldhdr->l_nreloc * bfd_xcoff_ldrelsz(output_bfd)); - ldhdr->l_stlen = ldinfo.string_size; - stoff = ldhdr->l_impoff + impsize; - if (ldinfo.string_size == 0) - ldhdr->l_stoff = 0; - else - ldhdr->l_stoff = stoff; - - /* 64 bit elements to ldhdr - The swap out routine for 32 bit will ignore them. - Nothing fancy, symbols come after the header and relocs come - after symbols. */ - ldhdr->l_symoff = bfd_xcoff_ldhdrsz (output_bfd); - ldhdr->l_rldoff = (bfd_xcoff_ldhdrsz (output_bfd) - + ldhdr->l_nsyms * bfd_xcoff_ldsymsz (output_bfd)); - - /* We now know the final size of the .loader section. Allocate - space for it. */ - lsec = xcoff_hash_table (info)->loader_section; - lsec->size = stoff + ldhdr->l_stlen; - lsec->contents = bfd_zalloc (output_bfd, lsec->size); - if (lsec->contents == NULL) + if (xcoff_hash_table (info)->loader_section + && !xcoff_build_loader_section (&ldinfo, libpath)) goto error_return; - /* Set up the header. */ - bfd_xcoff_swap_ldhdr_out (output_bfd, ldhdr, lsec->contents); - - /* Set up the import file names. */ - out = (char *) lsec->contents + ldhdr->l_impoff; - strcpy (out, libpath); - out += strlen (libpath) + 1; - *out++ = '\0'; - *out++ = '\0'; - for (fl = xcoff_hash_table (info)->imports; fl != NULL; fl = fl->next) - { - const char *s; - - s = fl->path; - while ((*out++ = *s++) != '\0') - ; - s = fl->file; - while ((*out++ = *s++) != '\0') - ; - s = fl->member; - while ((*out++ = *s++) != '\0') - ; - } - - BFD_ASSERT ((bfd_size_type) ((bfd_byte *) out - lsec->contents) == stoff); - - /* Set up the symbol string table. */ - if (ldinfo.string_size > 0) - { - memcpy (out, ldinfo.strings, ldinfo.string_size); - free (ldinfo.strings); - ldinfo.strings = NULL; - } - - /* We can't set up the symbol table or the relocs yet, because we - don't yet know the final position of the various sections. The - .loader symbols are written out when the corresponding normal - symbols are written out in xcoff_link_input_bfd or - xcoff_write_global_symbol. The .loader relocs are written out - when the corresponding normal relocs are handled in - xcoff_link_input_bfd. */ - /* Allocate space for the magic sections. */ sec = xcoff_hash_table (info)->linkage_section; if (sec->size > 0) @@ -3244,96 +3799,142 @@ bfd_xcoff_size_dynamic_sections (bfd *output_bfd, goto error_return; } - /* Now that we've done garbage collection, figure out the contents - of the .debug section. */ + /* Now that we've done garbage collection, decide which symbols to keep, + and figure out the contents of the .debug section. */ debug_strtab = xcoff_hash_table (info)->debug_strtab; for (sub = info->input_bfds; sub != NULL; sub = sub->link_next) { asection *subdeb; bfd_size_type symcount; - unsigned long *debug_index; + long *debug_index; asection **csectpp; + unsigned int *lineno_counts; + struct xcoff_link_hash_entry **sym_hash; bfd_byte *esym, *esymend; bfd_size_type symesz; - if (sub->xvec != info->hash->creator) - continue; - subdeb = bfd_get_section_by_name (sub, ".debug"); - if (subdeb == NULL || subdeb->size == 0) + if (sub->xvec != info->output_bfd->xvec) continue; - if (info->strip == strip_all - || info->strip == strip_debugger - || info->discard == discard_all) - { - subdeb->size = 0; - continue; - } + if ((sub->flags & DYNAMIC) != 0 + && !info->static_link) + continue; if (! _bfd_coff_get_external_symbols (sub)) goto error_return; symcount = obj_raw_syment_count (sub); - debug_index = bfd_zalloc (sub, symcount * sizeof (unsigned long)); + debug_index = bfd_zalloc (sub, symcount * sizeof (long)); if (debug_index == NULL) goto error_return; xcoff_data (sub)->debug_indices = debug_index; - /* Grab the contents of the .debug section. We use malloc and - copy the names into the debug stringtab, rather than - bfd_alloc, because I expect that, when linking many files - together, many of the strings will be the same. Storing the - strings in the hash table should save space in this case. */ - if (! bfd_malloc_and_get_section (sub, subdeb, &debug_contents)) - goto error_return; + if (info->strip == strip_all + || info->strip == strip_debugger + || info->discard == discard_all) + /* We're stripping all debugging information, so there's no need + to read SUB's .debug section. */ + subdeb = NULL; + else + { + /* Grab the contents of SUB's .debug section, if any. */ + subdeb = bfd_get_section_by_name (sub, ".debug"); + if (subdeb != NULL && subdeb->size > 0) + { + /* We use malloc and copy the names into the debug + stringtab, rather than bfd_alloc, because I expect + that, when linking many files together, many of the + strings will be the same. Storing the strings in the + hash table should save space in this case. */ + if (!bfd_malloc_and_get_section (sub, subdeb, &debug_contents)) + goto error_return; + } + } csectpp = xcoff_data (sub)->csects; + lineno_counts = xcoff_data (sub)->lineno_counts; + sym_hash = obj_xcoff_sym_hashes (sub); + symesz = bfd_coff_symesz (sub); + esym = (bfd_byte *) obj_coff_external_syms (sub); + esymend = esym + symcount * symesz; - /* Dynamic object do not have csectpp's. */ - if (NULL != csectpp) + while (esym < esymend) { - symesz = bfd_coff_symesz (sub); - esym = (bfd_byte *) obj_coff_external_syms (sub); - esymend = esym + symcount * symesz; + struct internal_syment sym; + union internal_auxent aux; + asection *csect; + const char *name; + int keep_p; - while (esym < esymend) + bfd_coff_swap_sym_in (sub, esym, &sym); + + /* Read in the csect information, if any. */ + if (CSECT_SYM_P (sym.n_sclass)) { - struct internal_syment sym; + BFD_ASSERT (sym.n_numaux > 0); + bfd_coff_swap_aux_in (sub, esym + symesz * sym.n_numaux, + sym.n_type, sym.n_sclass, + sym.n_numaux - 1, sym.n_numaux, &aux); + } - bfd_coff_swap_sym_in (sub, (void *) esym, (void *) &sym); + /* If this symbol's name is stored in the debug section, + get a pointer to it. */ + if (debug_contents != NULL + && sym._n._n_n._n_zeroes == 0 + && bfd_coff_symname_in_debug (sub, &sym)) + name = (const char *) debug_contents + sym._n._n_n._n_offset; + else + name = NULL; - *debug_index = (unsigned long) -1; + /* Decide whether to copy this symbol to the output file. */ + csect = *csectpp; + keep_p = xcoff_keep_symbol_p (info, sub, &sym, &aux, + *sym_hash, csect, name); + if (keep_p < 0) + return FALSE; - if (sym._n._n_n._n_zeroes == 0 - && *csectpp != NULL - && (! gc - || ((*csectpp)->flags & SEC_MARK) != 0 - || *csectpp == bfd_abs_section_ptr) - && bfd_coff_symname_in_debug (sub, &sym)) + if (!keep_p) + /* Use a debug_index of -2 to record that a symbol should + be stripped. */ + *debug_index = -2; + else + { + /* See whether we should store the symbol name in the + output .debug section. */ + if (name != NULL) { - char *name; bfd_size_type indx; - name = (char *) debug_contents + sym._n._n_n._n_offset; indx = _bfd_stringtab_add (debug_strtab, name, TRUE, TRUE); if (indx == (bfd_size_type) -1) goto error_return; *debug_index = indx; } - - esym += (sym.n_numaux + 1) * symesz; - csectpp += sym.n_numaux + 1; - debug_index += sym.n_numaux + 1; + else + *debug_index = -1; + if (*sym_hash != 0) + (*sym_hash)->flags |= XCOFF_ALLOCATED; + if (*lineno_counts > 0) + csect->output_section->lineno_count += *lineno_counts; } + + esym += (sym.n_numaux + 1) * symesz; + csectpp += sym.n_numaux + 1; + sym_hash += sym.n_numaux + 1; + lineno_counts += sym.n_numaux + 1; + debug_index += sym.n_numaux + 1; } - free (debug_contents); - debug_contents = NULL; + if (debug_contents) + { + free (debug_contents); + debug_contents = NULL; - /* Clear the size of subdeb, so that it is not included directly - in the output file. */ - subdeb->size = 0; + /* Clear the size of subdeb, so that it is not included directly + in the output file. */ + subdeb->size = 0; + } if (! info->keep_memory) { @@ -3389,6 +3990,91 @@ bfd_xcoff_link_generate_rtinit (bfd *abfd, return TRUE; } +/* Return the section that defines H. Return null if no section does. */ + +static asection * +xcoff_symbol_section (struct xcoff_link_hash_entry *h) +{ + 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; + } +} + +/* Add a .loader relocation for input relocation IREL. If the loader + relocation should be against an output section, HSEC points to the + input section that IREL is against, otherwise HSEC is null. H is the + symbol that IREL is against, or null if it isn't against a global symbol. + REFERENCE_BFD is the bfd to use in error messages about the relocation. */ + +static bfd_boolean +xcoff_create_ldrel (bfd *output_bfd, struct xcoff_final_link_info *finfo, + asection *output_section, bfd *reference_bfd, + struct internal_reloc *irel, asection *hsec, + struct xcoff_link_hash_entry *h) +{ + struct internal_ldrel ldrel; + + ldrel.l_vaddr = irel->r_vaddr; + if (hsec != NULL) + { + const char *secname; + + secname = hsec->output_section->name; + if (strcmp (secname, ".text") == 0) + ldrel.l_symndx = 0; + else if (strcmp (secname, ".data") == 0) + ldrel.l_symndx = 1; + else if (strcmp (secname, ".bss") == 0) + ldrel.l_symndx = 2; + else + { + (*_bfd_error_handler) + (_("%B: loader reloc in unrecognized section `%s'"), + reference_bfd, secname); + bfd_set_error (bfd_error_nonrepresentable_section); + return FALSE; + } + } + else if (h != NULL) + { + if (h->ldindx < 0) + { + (*_bfd_error_handler) + (_("%B: `%s' in loader reloc but not loader sym"), + reference_bfd, h->root.root.string); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + ldrel.l_symndx = h->ldindx; + } + else + ldrel.l_symndx = -(bfd_size_type) 1; + + ldrel.l_rtype = (irel->r_size << 8) | irel->r_type; + ldrel.l_rsecnm = output_section->target_index; + if (xcoff_hash_table (finfo->info)->textro + && strcmp (output_section->name, ".text") == 0) + { + (*_bfd_error_handler) + (_("%B: loader reloc in read-only section %A"), + reference_bfd, output_section); + bfd_set_error (bfd_error_invalid_operation); + return FALSE; + } + bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, finfo->ldrel); + finfo->ldrel += bfd_xcoff_ldrelsz (output_bfd); + return TRUE; +} + /* Link an input file into the linker output file. This function handles all the sections and relocations of the input file at once. */ @@ -3410,7 +4096,8 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, struct xcoff_link_hash_entry **sym_hash; struct internal_syment *isymp; asection **csectpp; - unsigned long *debug_index; + unsigned int *lineno_counts; + long *debug_index; long *indexp; unsigned long output_index; bfd_byte *outsym; @@ -3450,6 +4137,9 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, if (! _bfd_coff_get_external_symbols (input_bfd)) return FALSE; + /* Make one pass over the symbols and assign indices to symbols that + we have decided to keep. Also use create .loader symbol information + and update information in hash table entries. */ esym = (bfd_byte *) obj_coff_external_syms (input_bfd); esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz; sym_hash = obj_xcoff_sym_hashes (input_bfd); @@ -3458,24 +4148,16 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, isymp = finfo->internal_syms; indexp = finfo->sym_indices; output_index = syment_base; - outsym = finfo->outsyms; - incls = 0; - oline = NULL; - while (esym < esym_end) { - struct internal_syment isym; union internal_auxent aux; int smtyp = 0; - bfd_boolean skip; - bfd_boolean require; int add; bfd_coff_swap_sym_in (input_bfd, (void *) esym, (void *) isymp); - /* If this is a C_EXT or C_HIDEXT symbol, we need the csect - information. */ - if (isymp->n_sclass == C_EXT || isymp->n_sclass == C_HIDEXT) + /* Read in the csect information, if any. */ + if (CSECT_SYM_P (isymp->n_sclass)) { BFD_ASSERT (isymp->n_numaux > 0); bfd_coff_swap_aux_in (input_bfd, @@ -3487,39 +4169,32 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, smtyp = SMTYP_SMTYP (aux.x_csect.x_smtyp); } - /* Make a copy of *isymp so that the relocate_section function - always sees the original values. This is more reliable than - always recomputing the symbol value even if we are stripping - the symbol. */ - isym = *isymp; - /* If this symbol is in the .loader section, swap out the .loader symbol information. If this is an external symbol reference to a defined symbol, though, then wait until we get to the definition. */ - if (isym.n_sclass == C_EXT + if (EXTERN_SYM_P (isymp->n_sclass) && *sym_hash != NULL && (*sym_hash)->ldsym != NULL - && (smtyp != XTY_ER - || (*sym_hash)->root.type == bfd_link_hash_undefined)) + && xcoff_final_definition_p (input_bfd, *sym_hash, *csectpp)) { struct xcoff_link_hash_entry *h; struct internal_ldsym *ldsym; h = *sym_hash; ldsym = h->ldsym; - if (isym.n_scnum > 0) + if (isymp->n_scnum > 0) { ldsym->l_scnum = (*csectpp)->output_section->target_index; - ldsym->l_value = (isym.n_value + ldsym->l_value = (isymp->n_value + (*csectpp)->output_section->vma + (*csectpp)->output_offset - (*csectpp)->vma); } else { - ldsym->l_scnum = isym.n_scnum; - ldsym->l_value = isym.n_value; + ldsym->l_scnum = isymp->n_scnum; + ldsym->l_value = isymp->n_value; } ldsym->l_smtype = smtyp; @@ -3533,6 +4208,8 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, ldsym->l_smtype |= L_EXPORT; if ((h->flags & XCOFF_ENTRY) != 0) ldsym->l_smtype |= L_ENTRY; + if (isymp->n_sclass == C_AIX_WEAKEXT) + ldsym->l_smtype |= L_WEAK; ldsym->l_smclas = aux.x_csect.x_smclas; @@ -3584,184 +4261,82 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } - *indexp = -1; - - skip = FALSE; - require = FALSE; - add = 1 + isym.n_numaux; - - /* If we are skipping this csect, we want to skip this symbol. */ - if (*csectpp == NULL) - skip = TRUE; - - /* If we garbage collected this csect, we want to skip this - symbol. */ - if (! skip - && xcoff_hash_table (finfo->info)->gc - && ((*csectpp)->flags & SEC_MARK) == 0 - && *csectpp != bfd_abs_section_ptr) - skip = TRUE; - - /* An XCOFF linker always skips C_STAT symbols. */ - if (! skip - && isymp->n_sclass == C_STAT) - skip = TRUE; - - /* We skip all but the first TOC anchor. */ - if (! skip - && isymp->n_sclass == C_HIDEXT - && aux.x_csect.x_smclas == XMC_TC0) - { - if (finfo->toc_symindx != -1) - skip = TRUE; - else - { - bfd_vma tocval, tocend; - bfd *inp; - - tocval = ((*csectpp)->output_section->vma - + (*csectpp)->output_offset - + isym.n_value - - (*csectpp)->vma); - - /* We want to find out if tocval is a good value to use - as the TOC anchor--that is, whether we can access all - of the TOC using a 16 bit offset from tocval. This - test assumes that the TOC comes at the end of the - output section, as it does in the default linker - script. */ - tocend = ((*csectpp)->output_section->vma - + (*csectpp)->output_section->size); - for (inp = finfo->info->input_bfds; - inp != NULL; - inp = inp->link_next) - { - - for (o = inp->sections; o != NULL; o = o->next) - if (strcmp (o->name, ".tocbss") == 0) - { - bfd_vma new_toc_end; - new_toc_end = (o->output_section->vma - + o->output_offset - + o->size); - if (new_toc_end > tocend) - tocend = new_toc_end; - } - - } - - if (tocval + 0x10000 < tocend) - { - (*_bfd_error_handler) - (_("TOC overflow: 0x%lx > 0x10000; try -mminimal-toc when compiling"), - (unsigned long) (tocend - tocval)); - bfd_set_error (bfd_error_file_too_big); - return FALSE; - } - - if (tocval + 0x8000 < tocend) - { - bfd_vma tocadd; + add = 1 + isymp->n_numaux; - tocadd = tocend - (tocval + 0x8000); - tocval += tocadd; - isym.n_value += tocadd; - } + if (*debug_index == -2) + /* We've decided to strip this symbol. */ + *indexp = -1; + else + { + /* Assign the next unused index to this symbol. */ + *indexp = output_index; - finfo->toc_symindx = output_index; - xcoff_data (finfo->output_bfd)->toc = tocval; - xcoff_data (finfo->output_bfd)->sntoc = - (*csectpp)->output_section->target_index; - require = TRUE; + if (EXTERN_SYM_P (isymp->n_sclass)) + { + BFD_ASSERT (*sym_hash != NULL); + (*sym_hash)->indx = output_index; + } + /* If this is a symbol in the TOC which we may have merged + (class XMC_TC), remember the symbol index of the TOC + symbol. */ + if (isymp->n_sclass == C_HIDEXT + && aux.x_csect.x_smclas == XMC_TC + && *sym_hash != NULL) + { + BFD_ASSERT (((*sym_hash)->flags & XCOFF_SET_TOC) == 0); + BFD_ASSERT ((*sym_hash)->toc_section != NULL); + (*sym_hash)->u.toc_indx = output_index; } - } - /* If we are stripping all symbols, we want to skip this one. */ - if (! skip - && finfo->info->strip == strip_all) - skip = TRUE; - - /* We can skip resolved external references. */ - if (! skip - && isym.n_sclass == C_EXT - && smtyp == XTY_ER - && (*sym_hash)->root.type != bfd_link_hash_undefined) - skip = TRUE; - - /* We can skip common symbols if they got defined somewhere - else. */ - if (! skip - && isym.n_sclass == C_EXT - && smtyp == XTY_CM - && ((*sym_hash)->root.type != bfd_link_hash_common - || (*sym_hash)->root.u.c.p->section != *csectpp) - && ((*sym_hash)->root.type != bfd_link_hash_defined - || (*sym_hash)->root.u.def.section != *csectpp)) - skip = TRUE; - - /* Skip local symbols if we are discarding them. */ - if (! skip - && finfo->info->discard == discard_all - && isym.n_sclass != C_EXT - && (isym.n_sclass != C_HIDEXT - || smtyp != XTY_SD)) - skip = TRUE; - - /* If we stripping debugging symbols, and this is a debugging - symbol, then skip it. */ - if (! skip - && finfo->info->strip == strip_debugger - && isym.n_scnum == N_DEBUG) - skip = TRUE; - - /* If some symbols are stripped based on the name, work out the - name and decide whether to skip this symbol. We don't handle - this correctly for symbols whose names are in the .debug - section; to get it right we would need a new bfd_strtab_hash - function to return the string given the index. */ - if (! skip - && (finfo->info->strip == strip_some - || finfo->info->discard == discard_l) - && (debug_index == NULL || *debug_index == (unsigned long) -1)) - { - const char *name; - char buf[SYMNMLEN + 1]; + output_index += add; + } - name = _bfd_coff_internal_syment_name (input_bfd, &isym, buf); + esym += add * isymesz; + isymp += add; + csectpp += add; + sym_hash += add; + debug_index += add; + ++indexp; + for (--add; add > 0; --add) + *indexp++ = -1; + } - if (name == NULL) - return FALSE; + /* Now write out the symbols that we decided to keep. */ - if ((finfo->info->strip == strip_some - && (bfd_hash_lookup (finfo->info->keep_hash, name, FALSE, - FALSE) == NULL)) - || (finfo->info->discard == discard_l - && (isym.n_sclass != C_EXT - && (isym.n_sclass != C_HIDEXT - || smtyp != XTY_SD)) - && bfd_is_local_label_name (input_bfd, name))) - skip = TRUE; - } + esym = (bfd_byte *) obj_coff_external_syms (input_bfd); + esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz; + sym_hash = obj_xcoff_sym_hashes (input_bfd); + isymp = finfo->internal_syms; + indexp = finfo->sym_indices; + csectpp = xcoff_data (input_bfd)->csects; + lineno_counts = xcoff_data (input_bfd)->lineno_counts; + debug_index = xcoff_data (input_bfd)->debug_indices; + outsym = finfo->outsyms; + incls = 0; + oline = NULL; + while (esym < esym_end) + { + int add; - /* We can not skip the first TOC anchor. */ - if (skip - && require - && finfo->info->strip != strip_all) - skip = FALSE; + add = 1 + isymp->n_numaux; - /* We now know whether we are to skip this symbol or not. */ - if (! skip) + if (*indexp < 0) + esym += add * isymesz; + else { - /* Adjust the symbol in order to output it. */ + struct internal_syment isym; + int i; + /* Adjust the symbol in order to output it. */ + isym = *isymp; if (isym._n._n_n._n_zeroes == 0 && isym._n._n_n._n_offset != 0) { /* This symbol has a long name. Enter it in the string table we are building. If *debug_index != -1, the name has already been entered in the .debug section. */ - if (debug_index != NULL && *debug_index != (unsigned long) -1) + if (*debug_index >= 0) isym._n._n_n._n_offset = *debug_index; else { @@ -3779,16 +4354,15 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } - if (isym.n_sclass != C_BSTAT - && isym.n_sclass != C_ESTAT - && isym.n_sclass != C_DECL - && isym.n_scnum > 0) - { - isym.n_scnum = (*csectpp)->output_section->target_index; - isym.n_value += ((*csectpp)->output_section->vma - + (*csectpp)->output_offset - - (*csectpp)->vma); - } + /* Make __rtinit C_HIDEXT rather than C_EXT. This avoids + multiple definition problems when linking a shared object + statically. (The native linker doesn't enter __rtinit into + the normal table at all, but having a local symbol can make + the objdump output easier to read.) */ + if (isym.n_sclass == C_EXT + && *sym_hash + && ((*sym_hash)->flags & XCOFF_RTINIT) != 0) + isym.n_sclass = C_HIDEXT; /* The value of a C_FILE symbol is the symbol index of the next C_FILE symbol. The value of the last C_FILE symbol @@ -3798,10 +4372,10 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, if (isym.n_sclass == C_FILE) { if (finfo->last_file_index != -1 - && finfo->last_file.n_value != (bfd_vma) output_index) + && finfo->last_file.n_value != (bfd_vma) *indexp) { /* We must correct the value of the last C_FILE entry. */ - finfo->last_file.n_value = output_index; + finfo->last_file.n_value = *indexp; if ((bfd_size_type) finfo->last_file_index >= syment_base) { /* The last C_FILE symbol is in this input file. */ @@ -3832,7 +4406,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } - finfo->last_file_index = output_index; + finfo->last_file_index = *indexp; finfo->last_file = isym; } @@ -3845,84 +4419,12 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, isym.n_value = finfo->line_filepos; ++incls; } - - /* Output the symbol. */ - - bfd_coff_swap_sym_out (output_bfd, (void *) &isym, (void *) outsym); - - *indexp = output_index; - - if (isym.n_sclass == C_EXT) - { - long indx; - struct xcoff_link_hash_entry *h; - - indx = ((esym - (bfd_byte *) obj_coff_external_syms (input_bfd)) - / isymesz); - h = obj_xcoff_sym_hashes (input_bfd)[indx]; - BFD_ASSERT (h != NULL); - h->indx = output_index; - } - - /* If this is a symbol in the TOC which we may have merged - (class XMC_TC), remember the symbol index of the TOC - symbol. */ - if (isym.n_sclass == C_HIDEXT - && aux.x_csect.x_smclas == XMC_TC - && *sym_hash != NULL) - { - BFD_ASSERT (((*sym_hash)->flags & XCOFF_SET_TOC) == 0); - BFD_ASSERT ((*sym_hash)->toc_section != NULL); - (*sym_hash)->u.toc_indx = output_index; - } - - output_index += add; - outsym += add * osymesz; - } - - esym += add * isymesz; - isymp += add; - csectpp += add; - sym_hash += add; - if (debug_index != NULL) - debug_index += add; - ++indexp; - for (--add; add > 0; --add) - *indexp++ = -1; - } - - /* Fix up the aux entries and the C_BSTAT symbols. This must be - done in a separate pass, because we don't know the correct symbol - indices until we have already decided which symbols we are going - to keep. */ - - esym = (bfd_byte *) obj_coff_external_syms (input_bfd); - esym_end = esym + obj_raw_syment_count (input_bfd) * isymesz; - isymp = finfo->internal_syms; - indexp = finfo->sym_indices; - csectpp = xcoff_data (input_bfd)->csects; - outsym = finfo->outsyms; - while (esym < esym_end) - { - int add; - - add = 1 + isymp->n_numaux; - - if (*indexp < 0) - esym += add * isymesz; - else - { - int i; - - if (isymp->n_sclass == C_BSTAT) + /* The value of a C_BSTAT symbol is the symbol table + index of the containing csect. */ + else if (isym.n_sclass == C_BSTAT) { - struct internal_syment isym; - bfd_vma indx; - /* The value of a C_BSTAT symbol is the symbol table - index of the containing csect. */ - bfd_coff_swap_sym_in (output_bfd, (void *) outsym, (void *) &isym); indx = isym.n_value; if (indx < obj_raw_syment_count (input_bfd)) { @@ -3933,10 +4435,20 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, isym.n_value = 0; else isym.n_value = symindx; - bfd_coff_swap_sym_out (output_bfd, (void *) &isym, - (void *) outsym); } } + else if (isym.n_sclass != C_ESTAT + && isym.n_sclass != C_DECL + && isym.n_scnum > 0) + { + isym.n_scnum = (*csectpp)->output_section->target_index; + isym.n_value += ((*csectpp)->output_section->vma + + (*csectpp)->output_offset + - (*csectpp)->vma); + } + + /* Output the symbol. */ + bfd_coff_swap_sym_out (output_bfd, (void *) &isym, (void *) outsym); esym += isymesz; outsym += osymesz; @@ -3976,8 +4488,7 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, aux.x_file.x_n.x_offset = STRING_SIZE_SIZE + indx; } } - else if ((isymp->n_sclass == C_EXT - || isymp->n_sclass == C_HIDEXT) + else if (CSECT_SYM_P (isymp->n_sclass) && i + 1 == isymp->n_numaux) { @@ -4056,15 +4567,13 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, /* Copy over the line numbers, unless we are stripping them. We do this on a symbol by symbol basis in order to more easily handle garbage collection. */ - if ((isymp->n_sclass == C_EXT - || isymp->n_sclass == C_HIDEXT) + if (CSECT_SYM_P (isymp->n_sclass) && i == 0 && isymp->n_numaux > 1 && ISFCN (isymp->n_type) && aux.x_sym.x_fcnary.x_fcn.x_lnnoptr != 0) { - if (finfo->info->strip != strip_none - && finfo->info->strip != strip_some) + if (*lineno_counts == 0) aux.x_sym.x_fcnary.x_fcn.x_lnnoptr = 0; else { @@ -4072,14 +4581,21 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, unsigned int enc_count; bfd_signed_vma linoff; struct internal_lineno lin; + bfd_byte *linp; + bfd_byte *linpend; + bfd_vma offset; + file_ptr pos; + bfd_size_type amt; + /* Read in the enclosing section's line-number + information, if we haven't already. */ o = *csectpp; enclosing = xcoff_section_data (abfd, o)->enclosing; enc_count = xcoff_section_data (abfd, o)->lineno_count; if (oline != enclosing) { - file_ptr pos = enclosing->line_filepos; - bfd_size_type amt = linesz * enc_count; + pos = enclosing->line_filepos; + amt = linesz * enc_count; if (bfd_seek (input_bfd, pos, SEEK_SET) != 0 || (bfd_bread (finfo->linenos, amt, input_bfd) != amt)) @@ -4087,114 +4603,82 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, oline = enclosing; } + /* Copy across the first entry, adjusting its + symbol index. */ linoff = (aux.x_sym.x_fcnary.x_fcn.x_lnnoptr - enclosing->line_filepos); - - bfd_coff_swap_lineno_in (input_bfd, - (void *) (finfo->linenos + linoff), - (void *) &lin); - if (lin.l_lnno != 0 - || ((bfd_size_type) lin.l_addr.l_symndx - != ((esym - - isymesz - - ((bfd_byte *) - obj_coff_external_syms (input_bfd))) - / isymesz))) - aux.x_sym.x_fcnary.x_fcn.x_lnnoptr = 0; - else + linp = finfo->linenos + linoff; + bfd_coff_swap_lineno_in (input_bfd, linp, &lin); + lin.l_addr.l_symndx = *indexp; + bfd_coff_swap_lineno_out (output_bfd, &lin, linp); + + /* Copy the other entries, adjusting their addresses. */ + linpend = linp + *lineno_counts * linesz; + offset = (o->output_section->vma + + o->output_offset + - o->vma); + for (linp += linesz; linp < linpend; linp += linesz) { - bfd_byte *linpend, *linp; - bfd_vma offset; - bfd_size_type count; - - lin.l_addr.l_symndx = *indexp; - bfd_coff_swap_lineno_out (output_bfd, (void *) &lin, - (void *) (finfo->linenos - + linoff)); - - linpend = (finfo->linenos - + enc_count * linesz); - offset = (o->output_section->vma - + o->output_offset - - o->vma); - for (linp = finfo->linenos + linoff + linesz; - linp < linpend; - linp += linesz) - { - bfd_coff_swap_lineno_in (input_bfd, (void *) linp, - (void *) &lin); - if (lin.l_lnno == 0) - break; - lin.l_addr.l_paddr += offset; - bfd_coff_swap_lineno_out (output_bfd, - (void *) &lin, - (void *) linp); - } - - count = (linp - (finfo->linenos + linoff)) / linesz; + bfd_coff_swap_lineno_in (input_bfd, linp, &lin); + lin.l_addr.l_paddr += offset; + bfd_coff_swap_lineno_out (output_bfd, &lin, linp); + } - aux.x_sym.x_fcnary.x_fcn.x_lnnoptr = - (o->output_section->line_filepos + /* Write out the entries we've just processed. */ + pos = (o->output_section->line_filepos + o->output_section->lineno_count * linesz); + amt = linesz * *lineno_counts; + if (bfd_seek (output_bfd, pos, SEEK_SET) != 0 + || bfd_bwrite (finfo->linenos + linoff, + amt, output_bfd) != amt) + return FALSE; + o->output_section->lineno_count += *lineno_counts; - if (bfd_seek (output_bfd, - aux.x_sym.x_fcnary.x_fcn.x_lnnoptr, - SEEK_SET) != 0 - || (bfd_bwrite (finfo->linenos + linoff, - linesz * count, output_bfd) - != linesz * count)) - return FALSE; - - o->output_section->lineno_count += count; + /* Record the offset of the symbol's line numbers + in the output file. */ + aux.x_sym.x_fcnary.x_fcn.x_lnnoptr = pos; - if (incls > 0) + if (incls > 0) + { + struct internal_syment *iisp, *iispend; + long *iindp; + bfd_byte *oos; + bfd_vma range_start, range_end; + int iiadd; + + /* Update any C_BINCL or C_EINCL symbols + that refer to a line number in the + range we just output. */ + iisp = finfo->internal_syms; + iispend = iisp + obj_raw_syment_count (input_bfd); + iindp = finfo->sym_indices; + oos = finfo->outsyms; + range_start = enclosing->line_filepos + linoff; + range_end = range_start + *lineno_counts * linesz; + while (iisp < iispend) { - struct internal_syment *iisp, *iispend; - long *iindp; - bfd_byte *oos; - int iiadd; - - /* Update any C_BINCL or C_EINCL symbols - that refer to a line number in the - range we just output. */ - iisp = finfo->internal_syms; - iispend = (iisp - + obj_raw_syment_count (input_bfd)); - iindp = finfo->sym_indices; - oos = finfo->outsyms; - while (iisp < iispend) + if (*iindp >= 0 + && (iisp->n_sclass == C_BINCL + || iisp->n_sclass == C_EINCL) + && iisp->n_value >= range_start + && iisp->n_value < range_end) { - if (*iindp >= 0 - && (iisp->n_sclass == C_BINCL - || iisp->n_sclass == C_EINCL) - && ((bfd_size_type) iisp->n_value - >= (bfd_size_type)(enclosing->line_filepos + linoff)) - && ((bfd_size_type) iisp->n_value - < (enclosing->line_filepos - + enc_count * linesz))) - { - struct internal_syment iis; - - bfd_coff_swap_sym_in (output_bfd, - (void *) oos, - (void *) &iis); - iis.n_value = - (iisp->n_value - - enclosing->line_filepos - - linoff - + aux.x_sym.x_fcnary.x_fcn.x_lnnoptr); - bfd_coff_swap_sym_out (output_bfd, - (void *) &iis, - (void *) oos); - --incls; - } - - iiadd = 1 + iisp->n_numaux; - if (*iindp >= 0) - oos += iiadd * osymesz; - iisp += iiadd; - iindp += iiadd; + struct internal_syment iis; + + bfd_coff_swap_sym_in (output_bfd, oos, &iis); + iis.n_value = (iisp->n_value + - range_start + + pos); + bfd_coff_swap_sym_out (output_bfd, + &iis, oos); + --incls; } + + iiadd = 1 + iisp->n_numaux; + if (*iindp >= 0) + oos += iiadd * osymesz; + iisp += iiadd; + iindp += iiadd; } } } @@ -4208,9 +4692,12 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } + sym_hash += add; indexp += add; isymp += add; csectpp += add; + lineno_counts += add; + debug_index += add; } /* If we swapped out a C_FILE symbol, guess that the next C_FILE @@ -4312,8 +4799,6 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, for (; irel < irelend; irel++, rel_hash++) { struct xcoff_link_hash_entry *h = NULL; - struct internal_ldrel ldrel; - bfd_boolean quiet; *rel_hash = NULL; @@ -4446,104 +4931,20 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo, } } - quiet = FALSE; - switch (irel->r_type) + if (xcoff_need_ldrel_p (finfo->info, irel, h)) { - default: - if (h == NULL - || h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak - || h->root.type == bfd_link_hash_common) - break; - /* Fall through. */ - case R_POS: - case R_NEG: - case R_RL: - case R_RLA: - /* This reloc needs to be copied into the .loader - section. */ - ldrel.l_vaddr = irel->r_vaddr; - if (r_symndx == -1) - ldrel.l_symndx = -(bfd_size_type ) 1; - else if (h == NULL - || (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak - || h->root.type == bfd_link_hash_common)) - { - asection *sec; + asection *sec; - if (h == NULL) - sec = xcoff_data (input_bfd)->csects[r_symndx]; - else if (h->root.type == bfd_link_hash_common) - sec = h->root.u.c.p->section; - else - sec = h->root.u.def.section; - sec = sec->output_section; - - if (strcmp (sec->name, ".text") == 0) - ldrel.l_symndx = 0; - else if (strcmp (sec->name, ".data") == 0) - ldrel.l_symndx = 1; - else if (strcmp (sec->name, ".bss") == 0) - ldrel.l_symndx = 2; - else - { - (*_bfd_error_handler) - (_("%B: loader reloc in unrecognized section `%A'"), - input_bfd, sec); - bfd_set_error (bfd_error_nonrepresentable_section); - return FALSE; - } - } + if (r_symndx == -1) + sec = NULL; + else if (h == NULL) + sec = xcoff_data (input_bfd)->csects[r_symndx]; else - { - if (! finfo->info->relocatable - && (h->flags & XCOFF_DEF_DYNAMIC) == 0 - && (h->flags & XCOFF_IMPORT) == 0) - { - /* We already called the undefined_symbol - callback for this relocation, in - _bfd_ppc_xcoff_relocate_section. Don't - issue any more warnings. */ - quiet = TRUE; - } - if (h->ldindx < 0 && ! quiet) - { - (*_bfd_error_handler) - (_("%B: `%s' in loader reloc but not loader sym"), - input_bfd, - h->root.root.string); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - ldrel.l_symndx = h->ldindx; - } - ldrel.l_rtype = (irel->r_size << 8) | irel->r_type; - ldrel.l_rsecnm = o->output_section->target_index; - if (xcoff_hash_table (finfo->info)->textro - && strcmp (o->output_section->name, ".text") == 0 - && ! quiet) - { - (*_bfd_error_handler) - (_("%B: loader reloc in read-only section %A"), - input_bfd, o->output_section); - bfd_set_error (bfd_error_invalid_operation); - return FALSE; - } - bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, - finfo->ldrel); - - finfo->ldrel += bfd_xcoff_ldrelsz(output_bfd); - break; - - case R_TOC: - case R_GL: - case R_TCL: - case R_TRL: - case R_TRLA: - /* We should never need a .loader reloc for a TOC - relative reloc. */ - break; + sec = xcoff_symbol_section (h); + if (!xcoff_create_ldrel (output_bfd, finfo, + o->output_section, input_bfd, + irel, sec, h)) + return FALSE; } } @@ -4587,6 +4988,144 @@ xcoff_sort_relocs (const void * p1, const void * p2) return 0; } +/* Return true if section SEC is a TOC section. */ + +static inline bfd_boolean +xcoff_toc_section_p (asection *sec) +{ + const char *name; + + name = sec->name; + if (name[0] == '.' && name[1] == 't') + { + if (name[2] == 'c') + { + if (name[3] == '0' && name[4] == 0) + return TRUE; + if (name[3] == 0) + return TRUE; + } + if (name[2] == 'd' && name[3] == 0) + return TRUE; + } + return FALSE; +} + +/* See if the link requires a TOC (it usually does!). If so, find a + good place to put the TOC anchor csect, and write out the associated + symbol. */ + +static bfd_boolean +xcoff_find_tc0 (bfd *output_bfd, struct xcoff_final_link_info *finfo) +{ + bfd_vma toc_start, toc_end, start, end, best_address; + asection *sec; + bfd *input_bfd; + int section_index; + struct internal_syment irsym; + union internal_auxent iraux; + file_ptr pos; + size_t size; + + /* Set [TOC_START, TOC_END) to the range of the TOC. Record the + index of a csect at the beginning of the TOC. */ + toc_start = ~(bfd_vma) 0; + toc_end = 0; + section_index = -1; + for (input_bfd = finfo->info->input_bfds; + input_bfd != NULL; + input_bfd = input_bfd->link_next) + for (sec = input_bfd->sections; sec != NULL; sec = sec->next) + if ((sec->flags & SEC_MARK) != 0 && xcoff_toc_section_p (sec)) + { + start = sec->output_section->vma + sec->output_offset; + if (toc_start > start) + { + toc_start = start; + section_index = sec->output_section->target_index; + } + + end = start + sec->size; + if (toc_end < end) + toc_end = end; + } + + /* There's no need for a TC0 symbol if we don't have a TOC. */ + if (toc_end < toc_start) + { + xcoff_data (output_bfd)->toc = toc_start; + return TRUE; + } + + if (toc_end - toc_start < 0x8000) + /* Every TOC csect can be accessed from TOC_START. */ + best_address = toc_start; + else + { + /* Find the lowest TOC csect that is still within range of TOC_END. */ + best_address = toc_end; + for (input_bfd = finfo->info->input_bfds; + input_bfd != NULL; + input_bfd = input_bfd->link_next) + for (sec = input_bfd->sections; sec != NULL; sec = sec->next) + if ((sec->flags & SEC_MARK) != 0 && xcoff_toc_section_p (sec)) + { + start = sec->output_section->vma + sec->output_offset; + if (start < best_address + && start + 0x8000 >= toc_end) + { + best_address = start; + section_index = sec->output_section->target_index; + } + } + + /* Make sure that the start of the TOC is also within range. */ + if (best_address > toc_start + 0x8000) + { + (*_bfd_error_handler) + (_("TOC overflow: 0x%lx > 0x10000; try -mminimal-toc " + "when compiling"), + (unsigned long) (toc_end - toc_start)); + bfd_set_error (bfd_error_file_too_big); + return FALSE; + } + } + + /* Record the chosen TOC value. */ + finfo->toc_symindx = obj_raw_syment_count (output_bfd); + xcoff_data (output_bfd)->toc = best_address; + xcoff_data (output_bfd)->sntoc = section_index; + + /* Fill out the TC0 symbol. */ + if (!bfd_xcoff_put_symbol_name (output_bfd, finfo->strtab, &irsym, "TOC")) + return FALSE; + irsym.n_value = best_address; + irsym.n_scnum = section_index; + irsym.n_sclass = C_HIDEXT; + irsym.n_type = T_NULL; + irsym.n_numaux = 1; + bfd_coff_swap_sym_out (output_bfd, &irsym, finfo->outsyms); + + /* Fill out the auxillary csect information. */ + memset (&iraux, 0, sizeof iraux); + iraux.x_csect.x_smtyp = XTY_SD; + iraux.x_csect.x_smclas = XMC_TC0; + iraux.x_csect.x_scnlen.l = 0; + bfd_coff_swap_aux_out (output_bfd, &iraux, T_NULL, C_HIDEXT, 0, 1, + finfo->outsyms + bfd_coff_symesz (output_bfd)); + + /* Write the contents to the file. */ + pos = obj_sym_filepos (output_bfd); + pos += obj_raw_syment_count (output_bfd) * bfd_coff_symesz (output_bfd); + size = 2 * bfd_coff_symesz (output_bfd); + if (bfd_seek (output_bfd, pos, SEEK_SET) != 0 + || bfd_bwrite (finfo->outsyms, size, output_bfd) != size) + return FALSE; + obj_raw_syment_count (output_bfd) += 2; + + return TRUE; +} + /* Write out a non-XCOFF global symbol. */ static bfd_boolean @@ -4762,7 +5301,6 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) asection *osec; int oindx; struct internal_reloc *irel; - struct internal_ldrel ldrel; struct internal_syment irsym; union internal_auxent iraux; @@ -4815,12 +5353,9 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) finfo->section_info[oindx].rel_hashes[osec->reloc_count] = NULL; ++osec->reloc_count; - ldrel.l_vaddr = irel->r_vaddr; - ldrel.l_symndx = h->ldindx; - ldrel.l_rtype = (irel->r_size << 8) | R_POS; - ldrel.l_rsecnm = oindx; - bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, finfo->ldrel); - finfo->ldrel += bfd_xcoff_ldrelsz(output_bfd); + if (!xcoff_create_ldrel (output_bfd, finfo, osec, + output_bfd, irel, NULL, h)) + return FALSE; /* We need to emit a symbol to define a csect which holds the reloc. */ @@ -4886,7 +5421,6 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) struct xcoff_link_hash_entry *hentry; asection *esec; struct internal_reloc *irel; - struct internal_ldrel ldrel; asection *tsec; unsigned int reloc_size, byte_size; @@ -4924,26 +5458,9 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) finfo->section_info[oindx].rel_hashes[osec->reloc_count] = NULL; ++osec->reloc_count; - ldrel.l_vaddr = irel->r_vaddr; - if (strcmp (esec->output_section->name, ".text") == 0) - ldrel.l_symndx = 0; - else if (strcmp (esec->output_section->name, ".data") == 0) - ldrel.l_symndx = 1; - else if (strcmp (esec->output_section->name, ".bss") == 0) - ldrel.l_symndx = 2; - else - { - (*_bfd_error_handler) - (_("%s: loader reloc in unrecognized section `%s'"), - bfd_get_filename (output_bfd), - esec->output_section->name); - bfd_set_error (bfd_error_nonrepresentable_section); - return FALSE; - } - ldrel.l_rtype = (reloc_size << 8) | R_POS; - ldrel.l_rsecnm = oindx; - bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, finfo->ldrel); - finfo->ldrel += bfd_xcoff_ldrelsz(output_bfd); + if (!xcoff_create_ldrel (output_bfd, finfo, osec, + output_bfd, irel, esec, NULL)) + return FALSE; /* There are three items to write out, the address of the code @@ -4986,26 +5503,9 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) finfo->section_info[oindx].rel_hashes[osec->reloc_count] = NULL; ++osec->reloc_count; - ldrel.l_vaddr = irel->r_vaddr; - if (strcmp (tsec->output_section->name, ".text") == 0) - ldrel.l_symndx = 0; - else if (strcmp (tsec->output_section->name, ".data") == 0) - ldrel.l_symndx = 1; - else if (strcmp (tsec->output_section->name, ".bss") == 0) - ldrel.l_symndx = 2; - else - { - (*_bfd_error_handler) - (_("%s: loader reloc in unrecognized section `%s'"), - bfd_get_filename (output_bfd), - tsec->output_section->name); - bfd_set_error (bfd_error_nonrepresentable_section); - return FALSE; - } - ldrel.l_rtype = (reloc_size << 8) | R_POS; - ldrel.l_rsecnm = oindx; - bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, finfo->ldrel); - finfo->ldrel += bfd_xcoff_ldrelsz(output_bfd); + if (!xcoff_create_ldrel (output_bfd, finfo, osec, + output_bfd, irel, tsec, NULL)) + return FALSE; } if (h->indx >= 0 || finfo->info->strip == strip_all) @@ -5045,7 +5545,11 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) { isym.n_value = 0; isym.n_scnum = N_UNDEF; - isym.n_sclass = C_EXT; + if (h->root.type == bfd_link_hash_undefweak + && C_WEAKEXT == C_AIX_WEAKEXT) + isym.n_sclass = C_WEAKEXT; + else + isym.n_sclass = C_EXT; aux.x_csect.x_smtyp = XTY_ER; } else if ((h->root.type == bfd_link_hash_defined @@ -5055,7 +5559,11 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) BFD_ASSERT (bfd_is_abs_section (h->root.u.def.section)); isym.n_value = h->root.u.def.value; isym.n_scnum = N_UNDEF; - isym.n_sclass = C_EXT; + if (h->root.type == bfd_link_hash_undefweak + && C_WEAKEXT == C_AIX_WEAKEXT) + isym.n_sclass = C_WEAKEXT; + else + isym.n_sclass = C_EXT; aux.x_csect.x_smtyp = XTY_ER; } else if (h->root.type == bfd_link_hash_defined @@ -5117,7 +5625,11 @@ xcoff_write_global_symbol (struct xcoff_link_hash_entry *h, void * inf) /* We just output an SD symbol. Now output an LD symbol. */ h->indx += 2; - isym.n_sclass = C_EXT; + if (h->root.type == bfd_link_hash_undefweak + && C_WEAKEXT == C_AIX_WEAKEXT) + isym.n_sclass = C_WEAKEXT; + else + isym.n_sclass = C_EXT; bfd_coff_swap_sym_out (output_bfd, (void *) &isym, (void *) outsym); outsym += bfd_coff_symesz (output_bfd); @@ -5155,7 +5667,6 @@ xcoff_reloc_link_order (bfd *output_bfd, bfd_vma addend; struct internal_reloc *irel; struct xcoff_link_hash_entry **rel_hash_ptr; - struct internal_ldrel ldrel; if (link_order->type == bfd_section_reloc_link_order) /* We need to somehow locate a symbol in the right section. The @@ -5183,22 +5694,12 @@ xcoff_reloc_link_order (bfd *output_bfd, return TRUE; } - if (h->root.type == bfd_link_hash_common) - { - hsec = h->root.u.c.p->section; - hval = 0; - } - else if (h->root.type == bfd_link_hash_defined - || h->root.type == bfd_link_hash_defweak) - { - hsec = h->root.u.def.section; - hval = h->root.u.def.value; - } + hsec = xcoff_symbol_section (h); + if (h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + hval = h->root.u.def.value; else - { - hsec = NULL; - hval = 0; - } + hval = 0; addend = link_order->u.reloc.p->addend; if (hsec != NULL) @@ -5273,49 +5774,13 @@ xcoff_reloc_link_order (bfd *output_bfd, ++output_section->reloc_count; /* Now output the reloc to the .loader section. */ - - ldrel.l_vaddr = irel->r_vaddr; - - if (hsec != NULL) - { - const char *secname; - - secname = hsec->output_section->name; - - if (strcmp (secname, ".text") == 0) - ldrel.l_symndx = 0; - else if (strcmp (secname, ".data") == 0) - ldrel.l_symndx = 1; - else if (strcmp (secname, ".bss") == 0) - ldrel.l_symndx = 2; - else - { - (*_bfd_error_handler) - (_("%s: loader reloc in unrecognized section `%s'"), - bfd_get_filename (output_bfd), secname); - bfd_set_error (bfd_error_nonrepresentable_section); - return FALSE; - } - } - else + if (xcoff_hash_table (finfo->info)->loader_section) { - if (h->ldindx < 0) - { - (*_bfd_error_handler) - (_("%s: `%s' in loader reloc but not loader sym"), - bfd_get_filename (output_bfd), - h->root.root.string); - bfd_set_error (bfd_error_bad_value); - return FALSE; - } - ldrel.l_symndx = h->ldindx; + if (!xcoff_create_ldrel (output_bfd, finfo, output_section, + output_bfd, irel, hsec, h)) + return FALSE; } - ldrel.l_rtype = (irel->r_size << 8) | irel->r_type; - ldrel.l_rsecnm = output_section->target_index; - bfd_xcoff_swap_ldrel_out (output_bfd, &ldrel, finfo->ldrel); - finfo->ldrel += bfd_xcoff_ldrelsz(output_bfd); - return TRUE; } @@ -5361,12 +5826,20 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) finfo.contents = NULL; finfo.external_relocs = NULL; - finfo.ldsym = (xcoff_hash_table (info)->loader_section->contents - + bfd_xcoff_ldhdrsz (abfd)); - finfo.ldrel = (xcoff_hash_table (info)->loader_section->contents - + bfd_xcoff_ldhdrsz(abfd) - + (xcoff_hash_table (info)->ldhdr.l_nsyms - * bfd_xcoff_ldsymsz(abfd))); + if (xcoff_hash_table (info)->loader_section) + { + finfo.ldsym = (xcoff_hash_table (info)->loader_section->contents + + bfd_xcoff_ldhdrsz (abfd)); + finfo.ldrel = (xcoff_hash_table (info)->loader_section->contents + + bfd_xcoff_ldhdrsz (abfd) + + (xcoff_hash_table (info)->ldhdr.l_nsyms + * bfd_xcoff_ldsymsz (abfd))); + } + else + { + finfo.ldsym = NULL; + finfo.ldrel = NULL; + } xcoff_data (abfd)->coff.link_info = info; @@ -5374,15 +5847,15 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) if (finfo.strtab == NULL) goto error_return; - /* Count the line number and relocation entries required for the - output file. Determine a few maximum sizes. */ + /* Count the relocation entries required for the output file. + (We've already counted the line numbers.) Determine a few + maximum sizes. */ max_contents_size = 0; max_lineno_count = 0; max_reloc_count = 0; for (o = abfd->sections; o != NULL; o = o->next) { o->reloc_count = 0; - o->lineno_count = 0; for (p = o->map_head.link_order; p != NULL; p = p->next) { if (p->type == bfd_indirect_link_order) @@ -5397,18 +5870,12 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) the linker has decided to not include. */ sec->linker_mark = TRUE; - if (info->strip == strip_none - || info->strip == strip_some) - o->lineno_count += sec->lineno_count; - o->reloc_count += sec->reloc_count; if (sec->rawsize > max_contents_size) max_contents_size = sec->rawsize; if (sec->size > max_contents_size) max_contents_size = sec->size; - if (sec->lineno_count > max_lineno_count) - max_lineno_count = sec->lineno_count; if (coff_section_data (sec->owner, sec) != NULL && xcoff_section_data (sec->owner, sec) != NULL && (xcoff_section_data (sec->owner, sec)->lineno_count @@ -5663,7 +6130,10 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) goto error_return; obj_raw_syment_count (abfd) = 0; - xcoff_data (abfd)->toc = (bfd_vma) -1; + + /* Find a TOC symbol, if we need one. */ + if (!xcoff_find_tc0 (abfd, &finfo)) + goto error_return; /* We now know the position of everything in the file, except that we don't know the size of the symbol table and therefore we don't @@ -5856,13 +6326,16 @@ _bfd_xcoff_bfd_final_link (bfd *abfd, struct bfd_link_info *info) } /* Write out the loader section contents. */ - BFD_ASSERT ((bfd_byte *) finfo.ldrel - == (xcoff_hash_table (info)->loader_section->contents - + xcoff_hash_table (info)->ldhdr.l_impoff)); o = xcoff_hash_table (info)->loader_section; - if (! bfd_set_section_contents (abfd, o->output_section, o->contents, - (file_ptr) o->output_offset, o->size)) - goto error_return; + if (o) + { + BFD_ASSERT ((bfd_byte *) finfo.ldrel + == (xcoff_hash_table (info)->loader_section->contents + + xcoff_hash_table (info)->ldhdr.l_impoff)); + if (!bfd_set_section_contents (abfd, o->output_section, o->contents, + (file_ptr) o->output_offset, o->size)) + goto error_return; + } /* Write out the magic sections. */ o = xcoff_hash_table (info)->linkage_section; diff --git a/bfd/xsym.c b/bfd/xsym.c index 49a1d60..706310a 100644 --- a/bfd/xsym.c +++ b/bfd/xsym.c @@ -1,6 +1,6 @@ /* xSYM symbol-file support for BFD. - Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "alloca-conf.h" #include "sysdep.h" #include "xsym.h" #include "bfd.h" @@ -45,6 +46,7 @@ #define bfd_sym_bfd_is_group_section bfd_generic_is_group_section #define bfd_sym_bfd_discard_group bfd_generic_discard_group #define bfd_sym_section_already_linked _bfd_generic_section_already_linked +#define bfd_sym_bfd_define_common_symbol bfd_generic_define_common_symbol #define bfd_sym_bfd_link_hash_table_create _bfd_generic_link_hash_table_create #define bfd_sym_bfd_link_hash_table_free _bfd_generic_link_hash_table_free #define bfd_sym_bfd_link_add_symbols _bfd_generic_link_add_symbols @@ -1640,7 +1642,7 @@ bfd_sym_print_type_information (bfd *abfd, bfd_sym_symbol_name (abfd, tinfo.nte_index)[0], &bfd_sym_symbol_name (abfd, tinfo.nte_index)[1]); } - fprintf (f, " (TTE %lu)", value); + fprintf (f, " (TTE %lu)", (unsigned long) value); break; } @@ -1701,13 +1703,13 @@ bfd_sym_print_type_information (bfd *abfd, fprintf (f, "union (0x%x) of ", type); bfd_sym_fetch_long (buf, len, offset, &offset, &nrec); - fprintf (f, "%lu elements: ", nrec); + fprintf (f, "%lu elements: ", (unsigned long) nrec); for (i = 0; i < nrec; i++) { bfd_sym_fetch_long (buf, len, offset, &offset, &eloff); fprintf (f, "\n "); - fprintf (f, "offset %lu: ", eloff); + fprintf (f, "offset %lu: ", (unsigned long) eloff); bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset); } break; @@ -1735,7 +1737,7 @@ bfd_sym_print_type_information (bfd *abfd, bfd_sym_symbol_name (abfd, value)[0], &bfd_sym_symbol_name (abfd, value)[1]); - fprintf (f, " (NTE %lu) with type ", value); + fprintf (f, " (NTE %lu) with type ", (unsigned long) value); bfd_sym_print_type_information (abfd, f, buf, len, offset, &offset); break; } diff --git a/bfd/xtensa-isa.c b/bfd/xtensa-isa.c index ced8257..138f6ec 100644 --- a/bfd/xtensa-isa.c +++ b/bfd/xtensa-isa.c @@ -1,5 +1,5 @@ /* Configurable Xtensa ISA support. - Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2003, 2004, 2005, 2007, 2008 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -411,7 +411,12 @@ xtensa_isa_num_pipe_stages (xtensa_isa isa) xtensa_opcode opcode; xtensa_funcUnit_use *use; int num_opcodes, num_uses; - int i, stage, max_stage = XTENSA_UNDEFINED; + int i, stage; + static int max_stage = XTENSA_UNDEFINED; + + /* Only compute the value once. */ + if (max_stage != XTENSA_UNDEFINED) + return max_stage + 1; num_opcodes = xtensa_isa_num_opcodes (isa); for (opcode = 0; opcode < num_opcodes; opcode++) @@ -1521,6 +1526,17 @@ xtensa_state_is_exported (xtensa_isa isa, xtensa_state st) } +int +xtensa_state_is_shared_or (xtensa_isa isa, xtensa_state st) +{ + xtensa_isa_internal *intisa = (xtensa_isa_internal *) isa; + CHECK_STATE (intisa, st, XTENSA_UNDEFINED); + if ((intisa->states[st].flags & XTENSA_STATE_IS_SHARED_OR) != 0) + return 1; + return 0; +} + + /* Sysregs. */ diff --git a/bfd/xtensa-modules.c b/bfd/xtensa-modules.c index 805667b..3b2ddea 100644 --- a/bfd/xtensa-modules.c +++ b/bfd/xtensa-modules.c @@ -1,5 +1,5 @@ /* Xtensa configuration-specific ISA information. - Copyright 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -30,6 +30,7 @@ static xtensa_sysreg_internal sysregs[] = { { "LEND", 1, 0 }, { "LCOUNT", 2, 0 }, { "PTEVADDR", 83, 0 }, + { "MMID", 89, 0 }, { "DDR", 104, 0 }, { "176", 176, 0 }, { "208", 208, 0 }, @@ -41,17 +42,27 @@ static xtensa_sysreg_internal sysregs[] = { { "CCOMPARE0", 240, 0 }, { "CCOMPARE1", 241, 0 }, { "CCOMPARE2", 242, 0 }, + { "VECBASE", 231, 0 }, { "EPC1", 177, 0 }, { "EPC2", 178, 0 }, { "EPC3", 179, 0 }, { "EPC4", 180, 0 }, + { "EPC5", 181, 0 }, + { "EPC6", 182, 0 }, + { "EPC7", 183, 0 }, { "EXCSAVE1", 209, 0 }, { "EXCSAVE2", 210, 0 }, { "EXCSAVE3", 211, 0 }, { "EXCSAVE4", 212, 0 }, + { "EXCSAVE5", 213, 0 }, + { "EXCSAVE6", 214, 0 }, + { "EXCSAVE7", 215, 0 }, { "EPS2", 194, 0 }, { "EPS3", 195, 0 }, { "EPS4", 196, 0 }, + { "EPS5", 197, 0 }, + { "EPS6", 198, 0 }, + { "EPS7", 199, 0 }, { "EXCCAUSE", 232, 0 }, { "DEPC", 192, 0 }, { "EXCVADDR", 238, 0 }, @@ -74,12 +85,15 @@ static xtensa_sysreg_internal sysregs[] = { { "DEBUGCAUSE", 233, 0 }, { "RASID", 90, 0 }, { "ITLBCFG", 91, 0 }, - { "DTLBCFG", 92, 0 } + { "DTLBCFG", 92, 0 }, + { "CPENABLE", 224, 0 }, + { "SCOMPARE1", 12, 0 }, + { "THREADPTR", 231, 1 } }; -#define NUM_SYSREGS 49 +#define NUM_SYSREGS 63 #define MAX_SPECIAL_REG 245 -#define MAX_USER_REG 0 +#define MAX_USER_REG 231 /* Processor states. */ @@ -89,20 +103,30 @@ static xtensa_state_internal states[] = { { "PC", 32, 0 }, { "ICOUNT", 32, 0 }, { "DDR", 32, 0 }, - { "INTERRUPT", 17, 0 }, + { "INTERRUPT", 22, 0 }, { "CCOUNT", 32, 0 }, { "XTSYNC", 1, 0 }, + { "VECBASE", 22, 0 }, { "EPC1", 32, 0 }, { "EPC2", 32, 0 }, { "EPC3", 32, 0 }, { "EPC4", 32, 0 }, + { "EPC5", 32, 0 }, + { "EPC6", 32, 0 }, + { "EPC7", 32, 0 }, { "EXCSAVE1", 32, 0 }, { "EXCSAVE2", 32, 0 }, { "EXCSAVE3", 32, 0 }, { "EXCSAVE4", 32, 0 }, + { "EXCSAVE5", 32, 0 }, + { "EXCSAVE6", 32, 0 }, + { "EXCSAVE7", 32, 0 }, { "EPS2", 15, 0 }, { "EPS3", 15, 0 }, { "EPS4", 15, 0 }, + { "EPS5", 15, 0 }, + { "EPS6", 15, 0 }, + { "EPS7", 15, 0 }, { "EXCCAUSE", 6, 0 }, { "PSINTLEVEL", 4, 0 }, { "PSUM", 1, 0 }, @@ -111,19 +135,20 @@ static xtensa_state_internal states[] = { { "PSEXCM", 1, 0 }, { "DEPC", 32, 0 }, { "EXCVADDR", 32, 0 }, - { "WindowBase", 4, 0 }, - { "WindowStart", 16, 0 }, + { "WindowBase", 3, 0 }, + { "WindowStart", 8, 0 }, { "PSCALLINC", 2, 0 }, { "PSOWB", 4, 0 }, { "LBEG", 32, 0 }, { "LEND", 32, 0 }, { "SAR", 6, 0 }, + { "THREADPTR", 32, 0 }, { "LITBADDR", 20, 0 }, { "LITBEN", 1, 0 }, { "MISC0", 32, 0 }, { "MISC1", 32, 0 }, { "InOCDMode", 1, 0 }, - { "INTENABLE", 17, 0 }, + { "INTENABLE", 22, 0 }, { "DBREAKA0", 32, 0 }, { "DBREAKC0", 8, 0 }, { "DBREAKA1", 32, 0 }, @@ -142,72 +167,86 @@ static xtensa_state_internal states[] = { { "ASID1", 8, 0 }, { "INSTPGSZID4", 2, 0 }, { "DATAPGSZID4", 2, 0 }, - { "PTBASE", 10, 0 } -}; - -#define NUM_STATES 58 - -/* Macros for xtensa_state numbers (for use in iclasses because the - state numbers are not available when the iclass table is generated). */ - -#define STATE_LCOUNT 0 -#define STATE_PC 1 -#define STATE_ICOUNT 2 -#define STATE_DDR 3 -#define STATE_INTERRUPT 4 -#define STATE_CCOUNT 5 -#define STATE_XTSYNC 6 -#define STATE_EPC1 7 -#define STATE_EPC2 8 -#define STATE_EPC3 9 -#define STATE_EPC4 10 -#define STATE_EXCSAVE1 11 -#define STATE_EXCSAVE2 12 -#define STATE_EXCSAVE3 13 -#define STATE_EXCSAVE4 14 -#define STATE_EPS2 15 -#define STATE_EPS3 16 -#define STATE_EPS4 17 -#define STATE_EXCCAUSE 18 -#define STATE_PSINTLEVEL 19 -#define STATE_PSUM 20 -#define STATE_PSWOE 21 -#define STATE_PSRING 22 -#define STATE_PSEXCM 23 -#define STATE_DEPC 24 -#define STATE_EXCVADDR 25 -#define STATE_WindowBase 26 -#define STATE_WindowStart 27 -#define STATE_PSCALLINC 28 -#define STATE_PSOWB 29 -#define STATE_LBEG 30 -#define STATE_LEND 31 -#define STATE_SAR 32 -#define STATE_LITBADDR 33 -#define STATE_LITBEN 34 -#define STATE_MISC0 35 -#define STATE_MISC1 36 -#define STATE_InOCDMode 37 -#define STATE_INTENABLE 38 -#define STATE_DBREAKA0 39 -#define STATE_DBREAKC0 40 -#define STATE_DBREAKA1 41 -#define STATE_DBREAKC1 42 -#define STATE_IBREAKA0 43 -#define STATE_IBREAKA1 44 -#define STATE_IBREAKENABLE 45 -#define STATE_ICOUNTLEVEL 46 -#define STATE_DEBUGCAUSE 47 -#define STATE_DBNUM 48 -#define STATE_CCOMPARE0 49 -#define STATE_CCOMPARE1 50 -#define STATE_CCOMPARE2 51 -#define STATE_ASID3 52 -#define STATE_ASID2 53 -#define STATE_ASID1 54 -#define STATE_INSTPGSZID4 55 -#define STATE_DATAPGSZID4 56 -#define STATE_PTBASE 57 + { "PTBASE", 10, 0 }, + { "CPENABLE", 8, 0 }, + { "SCOMPARE1", 32, 0 } +}; + +#define NUM_STATES 71 + +enum xtensa_state_id { + STATE_LCOUNT, + STATE_PC, + STATE_ICOUNT, + STATE_DDR, + STATE_INTERRUPT, + STATE_CCOUNT, + STATE_XTSYNC, + STATE_VECBASE, + STATE_EPC1, + STATE_EPC2, + STATE_EPC3, + STATE_EPC4, + STATE_EPC5, + STATE_EPC6, + STATE_EPC7, + STATE_EXCSAVE1, + STATE_EXCSAVE2, + STATE_EXCSAVE3, + STATE_EXCSAVE4, + STATE_EXCSAVE5, + STATE_EXCSAVE6, + STATE_EXCSAVE7, + STATE_EPS2, + STATE_EPS3, + STATE_EPS4, + STATE_EPS5, + STATE_EPS6, + STATE_EPS7, + STATE_EXCCAUSE, + STATE_PSINTLEVEL, + STATE_PSUM, + STATE_PSWOE, + STATE_PSRING, + STATE_PSEXCM, + STATE_DEPC, + STATE_EXCVADDR, + STATE_WindowBase, + STATE_WindowStart, + STATE_PSCALLINC, + STATE_PSOWB, + STATE_LBEG, + STATE_LEND, + STATE_SAR, + STATE_THREADPTR, + STATE_LITBADDR, + STATE_LITBEN, + STATE_MISC0, + STATE_MISC1, + STATE_InOCDMode, + STATE_INTENABLE, + STATE_DBREAKA0, + STATE_DBREAKC0, + STATE_DBREAKA1, + STATE_DBREAKC1, + STATE_IBREAKA0, + STATE_IBREAKA1, + STATE_IBREAKENABLE, + STATE_ICOUNTLEVEL, + STATE_DEBUGCAUSE, + STATE_DBNUM, + STATE_CCOMPARE0, + STATE_CCOMPARE1, + STATE_CCOMPARE2, + STATE_ASID3, + STATE_ASID2, + STATE_ASID1, + STATE_INSTPGSZID4, + STATE_DATAPGSZID4, + STATE_PTBASE, + STATE_CPENABLE, + STATE_SCOMPARE1 +}; /* Field definitions. */ @@ -359,6 +398,25 @@ Field_sr_Slot_inst_set (xtensa_insnbuf insn, uint32 val) insn[0] = (insn[0] & ~0xf000) | (tie_t << 12); } +static unsigned +Field_st_Slot_inst_get (const xtensa_insnbuf insn) +{ + unsigned tie_t = 0; + tie_t = (tie_t << 4) | ((insn[0] << 16) >> 28); + tie_t = (tie_t << 4) | ((insn[0] << 12) >> 28); + return tie_t; +} + +static void +Field_st_Slot_inst_set (xtensa_insnbuf insn, uint32 val) +{ + uint32 tie_t; + tie_t = (val << 28) >> 28; + insn[0] = (insn[0] & ~0xf0000) | (tie_t << 16); + tie_t = (val << 24) >> 28; + insn[0] = (insn[0] & ~0xf000) | (tie_t << 12); +} + static unsigned Field_thi3_Slot_inst_get (const xtensa_insnbuf insn) { @@ -815,25 +873,6 @@ Field_sr_Slot_inst16b_set (xtensa_insnbuf insn, uint32 val) insn[0] = (insn[0] & ~0xf0) | (tie_t << 4); } -static unsigned -Field_st_Slot_inst_get (const xtensa_insnbuf insn) -{ - unsigned tie_t = 0; - tie_t = (tie_t << 4) | ((insn[0] << 16) >> 28); - tie_t = (tie_t << 4) | ((insn[0] << 12) >> 28); - return tie_t; -} - -static void -Field_st_Slot_inst_set (xtensa_insnbuf insn, uint32 val) -{ - uint32 tie_t; - tie_t = (val << 28) >> 28; - insn[0] = (insn[0] & ~0xf0000) | (tie_t << 16); - tie_t = (val << 24) >> 28; - insn[0] = (insn[0] & ~0xf000) | (tie_t << 12); -} - static unsigned Field_st_Slot_inst16a_get (const xtensa_insnbuf insn) { @@ -1175,6 +1214,38 @@ Field_imm7_Slot_inst16b_set (xtensa_insnbuf insn, uint32 val) insn[0] = (insn[0] & ~0x700) | (tie_t << 8); } +static unsigned +Field_xt_wbr15_imm_Slot_inst_get (const xtensa_insnbuf insn) +{ + unsigned tie_t = 0; + tie_t = (tie_t << 15) | ((insn[0] << 8) >> 17); + return tie_t; +} + +static void +Field_xt_wbr15_imm_Slot_inst_set (xtensa_insnbuf insn, uint32 val) +{ + uint32 tie_t; + tie_t = (val << 17) >> 17; + insn[0] = (insn[0] & ~0xfffe00) | (tie_t << 9); +} + +static unsigned +Field_xt_wbr18_imm_Slot_inst_get (const xtensa_insnbuf insn) +{ + unsigned tie_t = 0; + tie_t = (tie_t << 18) | ((insn[0] << 8) >> 14); + return tie_t; +} + +static void +Field_xt_wbr18_imm_Slot_inst_set (xtensa_insnbuf insn, uint32 val) +{ + uint32 tie_t; + tie_t = (val << 14) >> 14; + insn[0] = (insn[0] & ~0xffffc0) | (tie_t << 6); +} + static void Implicit_Field_set (xtensa_insnbuf insn ATTRIBUTE_UNUSED, uint32 val ATTRIBUTE_UNUSED) @@ -1206,6 +1277,50 @@ Implicit_Field_ar12_get (const xtensa_insnbuf insn ATTRIBUTE_UNUSED) return 12; } +enum xtensa_field_id { + FIELD_t, + FIELD_bbi4, + FIELD_bbi, + FIELD_imm12, + FIELD_imm8, + FIELD_s, + FIELD_imm12b, + FIELD_imm16, + FIELD_m, + FIELD_n, + FIELD_offset, + FIELD_op0, + FIELD_op1, + FIELD_op2, + FIELD_r, + FIELD_sa4, + FIELD_sae4, + FIELD_sae, + FIELD_sal, + FIELD_sargt, + FIELD_sas4, + FIELD_sas, + FIELD_sr, + FIELD_st, + FIELD_thi3, + FIELD_imm4, + FIELD_mn, + FIELD_i, + FIELD_imm6lo, + FIELD_imm6hi, + FIELD_imm7lo, + FIELD_imm7hi, + FIELD_z, + FIELD_imm6, + FIELD_imm7, + FIELD_xt_wbr15_imm, + FIELD_xt_wbr18_imm, + FIELD__ar0, + FIELD__ar4, + FIELD__ar8, + FIELD__ar12 +}; + /* Functional units. */ @@ -1216,8 +1331,12 @@ static xtensa_funcUnit_internal funcUnits[] = { /* Register files. */ +enum xtensa_regfile_id { + REGFILE_AR +}; + static xtensa_regfile_internal regfiles[] = { - { "AR", "a", 0, 32, 64 } + { "AR", "a", REGFILE_AR, 32, 32 } }; @@ -1422,7 +1541,7 @@ static int Operand_ar0_encode (uint32 *valp) { int error; - error = (*valp & ~0x3f) != 0; + error = (*valp & ~0x1f) != 0; return error; } @@ -1436,7 +1555,7 @@ static int Operand_ar4_encode (uint32 *valp) { int error; - error = (*valp & ~0x3f) != 0; + error = (*valp & ~0x1f) != 0; return error; } @@ -1450,7 +1569,7 @@ static int Operand_ar8_encode (uint32 *valp) { int error; - error = (*valp & ~0x3f) != 0; + error = (*valp & ~0x1f) != 0; return error; } @@ -1464,7 +1583,7 @@ static int Operand_ar12_encode (uint32 *valp) { int error; - error = (*valp & ~0x3f) != 0; + error = (*valp & ~0x1f) != 0; return error; } @@ -1478,7 +1597,7 @@ static int Operand_ars_entry_encode (uint32 *valp) { int error; - error = (*valp & ~0x3f) != 0; + error = (*valp & ~0x1f) != 0; return error; } @@ -1487,7 +1606,7 @@ Operand_immrx4_decode (uint32 *valp) { unsigned immrx4_0, r_0; r_0 = *valp & 0xf; - immrx4_0 = ((((0xfffffff)) << 4) | r_0) << 2; + immrx4_0 = (((0xfffffff) << 4) | r_0) << 2; *valp = immrx4_0; return 0; } @@ -1547,7 +1666,7 @@ Operand_uimm6_decode (uint32 *valp) { unsigned uimm6_0, imm6_0; imm6_0 = *valp & 0x3f; - uimm6_0 = 0x4 + ((((0)) << 6) | imm6_0); + uimm6_0 = 0x4 + (((0) << 6) | imm6_0); *valp = uimm6_0; return 0; } @@ -1909,7 +2028,7 @@ Operand_ulabel8_decode (uint32 *valp) { unsigned ulabel8_0, imm8_0; imm8_0 = *valp & 0xff; - ulabel8_0 = 0x4 + ((((0)) << 8) | imm8_0); + ulabel8_0 = 0x4 + (((0) << 8) | imm8_0); *valp = ulabel8_0; return 0; } @@ -2011,7 +2130,7 @@ Operand_uimm16x4_decode (uint32 *valp) { unsigned uimm16x4_0, imm16_0; imm16_0 = *valp & 0xffff; - uimm16x4_0 = ((((0xffff)) << 16) | imm16_0) << 2; + uimm16x4_0 = (((0xffff) << 16) | imm16_0) << 2; *valp = uimm16x4_0; return 0; } @@ -2080,182 +2199,362 @@ Operand_imms_encode (uint32 *valp) return 0; } +static int +Operand_tp7_decode (uint32 *valp) +{ + unsigned tp7_0, t_0; + t_0 = *valp & 0xf; + tp7_0 = t_0 + 0x7; + *valp = tp7_0; + return 0; +} + +static int +Operand_tp7_encode (uint32 *valp) +{ + unsigned t_0, tp7_0; + tp7_0 = *valp; + t_0 = (tp7_0 - 0x7) & 0xf; + *valp = t_0; + return 0; +} + +static int +Operand_xt_wbr15_label_decode (uint32 *valp) +{ + unsigned xt_wbr15_label_0, xt_wbr15_imm_0; + xt_wbr15_imm_0 = *valp & 0x7fff; + xt_wbr15_label_0 = 0x4 + (((int) xt_wbr15_imm_0 << 17) >> 17); + *valp = xt_wbr15_label_0; + return 0; +} + +static int +Operand_xt_wbr15_label_encode (uint32 *valp) +{ + unsigned xt_wbr15_imm_0, xt_wbr15_label_0; + xt_wbr15_label_0 = *valp; + xt_wbr15_imm_0 = (xt_wbr15_label_0 - 0x4) & 0x7fff; + *valp = xt_wbr15_imm_0; + return 0; +} + +static int +Operand_xt_wbr15_label_ator (uint32 *valp, uint32 pc) +{ + *valp -= pc; + return 0; +} + +static int +Operand_xt_wbr15_label_rtoa (uint32 *valp, uint32 pc) +{ + *valp += pc; + return 0; +} + +static int +Operand_xt_wbr18_label_decode (uint32 *valp) +{ + unsigned xt_wbr18_label_0, xt_wbr18_imm_0; + xt_wbr18_imm_0 = *valp & 0x3ffff; + xt_wbr18_label_0 = 0x4 + (((int) xt_wbr18_imm_0 << 14) >> 14); + *valp = xt_wbr18_label_0; + return 0; +} + +static int +Operand_xt_wbr18_label_encode (uint32 *valp) +{ + unsigned xt_wbr18_imm_0, xt_wbr18_label_0; + xt_wbr18_label_0 = *valp; + xt_wbr18_imm_0 = (xt_wbr18_label_0 - 0x4) & 0x3ffff; + *valp = xt_wbr18_imm_0; + return 0; +} + +static int +Operand_xt_wbr18_label_ator (uint32 *valp, uint32 pc) +{ + *valp -= pc; + return 0; +} + +static int +Operand_xt_wbr18_label_rtoa (uint32 *valp, uint32 pc) +{ + *valp += pc; + return 0; +} + static xtensa_operand_internal operands[] = { - { "soffsetx4", 10, -1, 0, + { "soffsetx4", FIELD_offset, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_soffsetx4_encode, Operand_soffsetx4_decode, Operand_soffsetx4_ator, Operand_soffsetx4_rtoa }, - { "uimm12x8", 3, -1, 0, + { "uimm12x8", FIELD_imm12, -1, 0, 0, Operand_uimm12x8_encode, Operand_uimm12x8_decode, 0, 0 }, - { "simm4", 26, -1, 0, + { "simm4", FIELD_mn, -1, 0, 0, Operand_simm4_encode, Operand_simm4_decode, 0, 0 }, - { "arr", 14, 0, 1, + { "arr", FIELD_r, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER, Operand_arr_encode, Operand_arr_decode, 0, 0 }, - { "ars", 5, 0, 1, + { "ars", FIELD_s, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER, Operand_ars_encode, Operand_ars_decode, 0, 0 }, - { "*ars_invisible", 5, 0, 1, + { "*ars_invisible", FIELD_s, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER | XTENSA_OPERAND_IS_INVISIBLE, Operand_ars_encode, Operand_ars_decode, 0, 0 }, - { "art", 0, 0, 1, + { "art", FIELD_t, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER, Operand_art_encode, Operand_art_decode, 0, 0 }, - { "ar0", 35, 0, 1, + { "ar0", FIELD__ar0, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER | XTENSA_OPERAND_IS_INVISIBLE, Operand_ar0_encode, Operand_ar0_decode, 0, 0 }, - { "ar4", 36, 0, 1, + { "ar4", FIELD__ar4, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER | XTENSA_OPERAND_IS_INVISIBLE, Operand_ar4_encode, Operand_ar4_decode, 0, 0 }, - { "ar8", 37, 0, 1, + { "ar8", FIELD__ar8, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER | XTENSA_OPERAND_IS_INVISIBLE, Operand_ar8_encode, Operand_ar8_decode, 0, 0 }, - { "ar12", 38, 0, 1, + { "ar12", FIELD__ar12, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER | XTENSA_OPERAND_IS_INVISIBLE, Operand_ar12_encode, Operand_ar12_decode, 0, 0 }, - { "ars_entry", 5, 0, 1, + { "ars_entry", FIELD_s, REGFILE_AR, 1, XTENSA_OPERAND_IS_REGISTER, Operand_ars_entry_encode, Operand_ars_entry_decode, 0, 0 }, - { "immrx4", 14, -1, 0, + { "immrx4", FIELD_r, -1, 0, 0, Operand_immrx4_encode, Operand_immrx4_decode, 0, 0 }, - { "lsi4x4", 14, -1, 0, + { "lsi4x4", FIELD_r, -1, 0, 0, Operand_lsi4x4_encode, Operand_lsi4x4_decode, 0, 0 }, - { "simm7", 34, -1, 0, + { "simm7", FIELD_imm7, -1, 0, 0, Operand_simm7_encode, Operand_simm7_decode, 0, 0 }, - { "uimm6", 33, -1, 0, + { "uimm6", FIELD_imm6, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_uimm6_encode, Operand_uimm6_decode, Operand_uimm6_ator, Operand_uimm6_rtoa }, - { "ai4const", 0, -1, 0, + { "ai4const", FIELD_t, -1, 0, 0, Operand_ai4const_encode, Operand_ai4const_decode, 0, 0 }, - { "b4const", 14, -1, 0, + { "b4const", FIELD_r, -1, 0, 0, Operand_b4const_encode, Operand_b4const_decode, 0, 0 }, - { "b4constu", 14, -1, 0, + { "b4constu", FIELD_r, -1, 0, 0, Operand_b4constu_encode, Operand_b4constu_decode, 0, 0 }, - { "uimm8", 4, -1, 0, + { "uimm8", FIELD_imm8, -1, 0, 0, Operand_uimm8_encode, Operand_uimm8_decode, 0, 0 }, - { "uimm8x2", 4, -1, 0, + { "uimm8x2", FIELD_imm8, -1, 0, 0, Operand_uimm8x2_encode, Operand_uimm8x2_decode, 0, 0 }, - { "uimm8x4", 4, -1, 0, + { "uimm8x4", FIELD_imm8, -1, 0, 0, Operand_uimm8x4_encode, Operand_uimm8x4_decode, 0, 0 }, - { "uimm4x16", 13, -1, 0, + { "uimm4x16", FIELD_op2, -1, 0, 0, Operand_uimm4x16_encode, Operand_uimm4x16_decode, 0, 0 }, - { "simm8", 4, -1, 0, + { "simm8", FIELD_imm8, -1, 0, 0, Operand_simm8_encode, Operand_simm8_decode, 0, 0 }, - { "simm8x256", 4, -1, 0, + { "simm8x256", FIELD_imm8, -1, 0, 0, Operand_simm8x256_encode, Operand_simm8x256_decode, 0, 0 }, - { "simm12b", 6, -1, 0, + { "simm12b", FIELD_imm12b, -1, 0, 0, Operand_simm12b_encode, Operand_simm12b_decode, 0, 0 }, - { "msalp32", 18, -1, 0, + { "msalp32", FIELD_sal, -1, 0, 0, Operand_msalp32_encode, Operand_msalp32_decode, 0, 0 }, - { "op2p1", 13, -1, 0, + { "op2p1", FIELD_op2, -1, 0, 0, Operand_op2p1_encode, Operand_op2p1_decode, 0, 0 }, - { "label8", 4, -1, 0, + { "label8", FIELD_imm8, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_label8_encode, Operand_label8_decode, Operand_label8_ator, Operand_label8_rtoa }, - { "ulabel8", 4, -1, 0, + { "ulabel8", FIELD_imm8, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_ulabel8_encode, Operand_ulabel8_decode, Operand_ulabel8_ator, Operand_ulabel8_rtoa }, - { "label12", 3, -1, 0, + { "label12", FIELD_imm12, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_label12_encode, Operand_label12_decode, Operand_label12_ator, Operand_label12_rtoa }, - { "soffset", 10, -1, 0, + { "soffset", FIELD_offset, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_soffset_encode, Operand_soffset_decode, Operand_soffset_ator, Operand_soffset_rtoa }, - { "uimm16x4", 7, -1, 0, + { "uimm16x4", FIELD_imm16, -1, 0, XTENSA_OPERAND_IS_PCRELATIVE, Operand_uimm16x4_encode, Operand_uimm16x4_decode, Operand_uimm16x4_ator, Operand_uimm16x4_rtoa }, - { "immt", 0, -1, 0, + { "immt", FIELD_t, -1, 0, 0, Operand_immt_encode, Operand_immt_decode, 0, 0 }, - { "imms", 5, -1, 0, + { "imms", FIELD_s, -1, 0, 0, Operand_imms_encode, Operand_imms_decode, 0, 0 }, - { "t", 0, -1, 0, 0, 0, 0, 0, 0 }, - { "bbi4", 1, -1, 0, 0, 0, 0, 0, 0 }, - { "bbi", 2, -1, 0, 0, 0, 0, 0, 0 }, - { "imm12", 3, -1, 0, 0, 0, 0, 0, 0 }, - { "imm8", 4, -1, 0, 0, 0, 0, 0, 0 }, - { "s", 5, -1, 0, 0, 0, 0, 0, 0 }, - { "imm12b", 6, -1, 0, 0, 0, 0, 0, 0 }, - { "imm16", 7, -1, 0, 0, 0, 0, 0, 0 }, - { "m", 8, -1, 0, 0, 0, 0, 0, 0 }, - { "n", 9, -1, 0, 0, 0, 0, 0, 0 }, - { "offset", 10, -1, 0, 0, 0, 0, 0, 0 }, - { "op0", 11, -1, 0, 0, 0, 0, 0, 0 }, - { "op1", 12, -1, 0, 0, 0, 0, 0, 0 }, - { "op2", 13, -1, 0, 0, 0, 0, 0, 0 }, - { "r", 14, -1, 0, 0, 0, 0, 0, 0 }, - { "sa4", 15, -1, 0, 0, 0, 0, 0, 0 }, - { "sae4", 16, -1, 0, 0, 0, 0, 0, 0 }, - { "sae", 17, -1, 0, 0, 0, 0, 0, 0 }, - { "sal", 18, -1, 0, 0, 0, 0, 0, 0 }, - { "sargt", 19, -1, 0, 0, 0, 0, 0, 0 }, - { "sas4", 20, -1, 0, 0, 0, 0, 0, 0 }, - { "sas", 21, -1, 0, 0, 0, 0, 0, 0 }, - { "sr", 22, -1, 0, 0, 0, 0, 0, 0 }, - { "st", 23, -1, 0, 0, 0, 0, 0, 0 }, - { "thi3", 24, -1, 0, 0, 0, 0, 0, 0 }, - { "imm4", 25, -1, 0, 0, 0, 0, 0, 0 }, - { "mn", 26, -1, 0, 0, 0, 0, 0, 0 }, - { "i", 27, -1, 0, 0, 0, 0, 0, 0 }, - { "imm6lo", 28, -1, 0, 0, 0, 0, 0, 0 }, - { "imm6hi", 29, -1, 0, 0, 0, 0, 0, 0 }, - { "imm7lo", 30, -1, 0, 0, 0, 0, 0, 0 }, - { "imm7hi", 31, -1, 0, 0, 0, 0, 0, 0 }, - { "z", 32, -1, 0, 0, 0, 0, 0, 0 }, - { "imm6", 33, -1, 0, 0, 0, 0, 0, 0 }, - { "imm7", 34, -1, 0, 0, 0, 0, 0, 0 } + { "tp7", FIELD_t, -1, 0, + 0, + Operand_tp7_encode, Operand_tp7_decode, + 0, 0 }, + { "xt_wbr15_label", FIELD_xt_wbr15_imm, -1, 0, + XTENSA_OPERAND_IS_PCRELATIVE, + Operand_xt_wbr15_label_encode, Operand_xt_wbr15_label_decode, + Operand_xt_wbr15_label_ator, Operand_xt_wbr15_label_rtoa }, + { "xt_wbr18_label", FIELD_xt_wbr18_imm, -1, 0, + XTENSA_OPERAND_IS_PCRELATIVE, + Operand_xt_wbr18_label_encode, Operand_xt_wbr18_label_decode, + Operand_xt_wbr18_label_ator, Operand_xt_wbr18_label_rtoa }, + { "t", FIELD_t, -1, 0, 0, 0, 0, 0, 0 }, + { "bbi4", FIELD_bbi4, -1, 0, 0, 0, 0, 0, 0 }, + { "bbi", FIELD_bbi, -1, 0, 0, 0, 0, 0, 0 }, + { "imm12", FIELD_imm12, -1, 0, 0, 0, 0, 0, 0 }, + { "imm8", FIELD_imm8, -1, 0, 0, 0, 0, 0, 0 }, + { "s", FIELD_s, -1, 0, 0, 0, 0, 0, 0 }, + { "imm12b", FIELD_imm12b, -1, 0, 0, 0, 0, 0, 0 }, + { "imm16", FIELD_imm16, -1, 0, 0, 0, 0, 0, 0 }, + { "m", FIELD_m, -1, 0, 0, 0, 0, 0, 0 }, + { "n", FIELD_n, -1, 0, 0, 0, 0, 0, 0 }, + { "offset", FIELD_offset, -1, 0, 0, 0, 0, 0, 0 }, + { "op0", FIELD_op0, -1, 0, 0, 0, 0, 0, 0 }, + { "op1", FIELD_op1, -1, 0, 0, 0, 0, 0, 0 }, + { "op2", FIELD_op2, -1, 0, 0, 0, 0, 0, 0 }, + { "r", FIELD_r, -1, 0, 0, 0, 0, 0, 0 }, + { "sa4", FIELD_sa4, -1, 0, 0, 0, 0, 0, 0 }, + { "sae4", FIELD_sae4, -1, 0, 0, 0, 0, 0, 0 }, + { "sae", FIELD_sae, -1, 0, 0, 0, 0, 0, 0 }, + { "sal", FIELD_sal, -1, 0, 0, 0, 0, 0, 0 }, + { "sargt", FIELD_sargt, -1, 0, 0, 0, 0, 0, 0 }, + { "sas4", FIELD_sas4, -1, 0, 0, 0, 0, 0, 0 }, + { "sas", FIELD_sas, -1, 0, 0, 0, 0, 0, 0 }, + { "sr", FIELD_sr, -1, 0, 0, 0, 0, 0, 0 }, + { "st", FIELD_st, -1, 0, 0, 0, 0, 0, 0 }, + { "thi3", FIELD_thi3, -1, 0, 0, 0, 0, 0, 0 }, + { "imm4", FIELD_imm4, -1, 0, 0, 0, 0, 0, 0 }, + { "mn", FIELD_mn, -1, 0, 0, 0, 0, 0, 0 }, + { "i", FIELD_i, -1, 0, 0, 0, 0, 0, 0 }, + { "imm6lo", FIELD_imm6lo, -1, 0, 0, 0, 0, 0, 0 }, + { "imm6hi", FIELD_imm6hi, -1, 0, 0, 0, 0, 0, 0 }, + { "imm7lo", FIELD_imm7lo, -1, 0, 0, 0, 0, 0, 0 }, + { "imm7hi", FIELD_imm7hi, -1, 0, 0, 0, 0, 0, 0 }, + { "z", FIELD_z, -1, 0, 0, 0, 0, 0, 0 }, + { "imm6", FIELD_imm6, -1, 0, 0, 0, 0, 0, 0 }, + { "imm7", FIELD_imm7, -1, 0, 0, 0, 0, 0, 0 }, + { "xt_wbr15_imm", FIELD_xt_wbr15_imm, -1, 0, 0, 0, 0, 0, 0 }, + { "xt_wbr18_imm", FIELD_xt_wbr18_imm, -1, 0, 0, 0, 0, 0, 0 } +}; + +enum xtensa_operand_id { + OPERAND_soffsetx4, + OPERAND_uimm12x8, + OPERAND_simm4, + OPERAND_arr, + OPERAND_ars, + OPERAND__ars_invisible, + OPERAND_art, + OPERAND_ar0, + OPERAND_ar4, + OPERAND_ar8, + OPERAND_ar12, + OPERAND_ars_entry, + OPERAND_immrx4, + OPERAND_lsi4x4, + OPERAND_simm7, + OPERAND_uimm6, + OPERAND_ai4const, + OPERAND_b4const, + OPERAND_b4constu, + OPERAND_uimm8, + OPERAND_uimm8x2, + OPERAND_uimm8x4, + OPERAND_uimm4x16, + OPERAND_simm8, + OPERAND_simm8x256, + OPERAND_simm12b, + OPERAND_msalp32, + OPERAND_op2p1, + OPERAND_label8, + OPERAND_ulabel8, + OPERAND_label12, + OPERAND_soffset, + OPERAND_uimm16x4, + OPERAND_immt, + OPERAND_imms, + OPERAND_tp7, + OPERAND_xt_wbr15_label, + OPERAND_xt_wbr18_label, + OPERAND_t, + OPERAND_bbi4, + OPERAND_bbi, + OPERAND_imm12, + OPERAND_imm8, + OPERAND_s, + OPERAND_imm12b, + OPERAND_imm16, + OPERAND_m, + OPERAND_n, + OPERAND_offset, + OPERAND_op0, + OPERAND_op1, + OPERAND_op2, + OPERAND_r, + OPERAND_sa4, + OPERAND_sae4, + OPERAND_sae, + OPERAND_sal, + OPERAND_sargt, + OPERAND_sas4, + OPERAND_sas, + OPERAND_sr, + OPERAND_st, + OPERAND_thi3, + OPERAND_imm4, + OPERAND_mn, + OPERAND_i, + OPERAND_imm6lo, + OPERAND_imm6hi, + OPERAND_imm7lo, + OPERAND_imm7hi, + OPERAND_z, + OPERAND_imm6, + OPERAND_imm7, + OPERAND_xt_wbr15_imm, + OPERAND_xt_wbr18_imm }; @@ -2274,8 +2573,8 @@ static xtensa_arg_internal Iclass_xt_iclass_rfde_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_call12_args[] = { - { { 0 /* soffsetx4 */ }, 'i' }, - { { 10 /* ar12 */ }, 'o' } + { { OPERAND_soffsetx4 }, 'i' }, + { { OPERAND_ar12 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_call12_stateArgs[] = { @@ -2283,8 +2582,8 @@ static xtensa_arg_internal Iclass_xt_iclass_call12_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_call8_args[] = { - { { 0 /* soffsetx4 */ }, 'i' }, - { { 9 /* ar8 */ }, 'o' } + { { OPERAND_soffsetx4 }, 'i' }, + { { OPERAND_ar8 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_call8_stateArgs[] = { @@ -2292,8 +2591,8 @@ static xtensa_arg_internal Iclass_xt_iclass_call8_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_call4_args[] = { - { { 0 /* soffsetx4 */ }, 'i' }, - { { 8 /* ar4 */ }, 'o' } + { { OPERAND_soffsetx4 }, 'i' }, + { { OPERAND_ar4 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_call4_stateArgs[] = { @@ -2301,8 +2600,8 @@ static xtensa_arg_internal Iclass_xt_iclass_call4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_callx12_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 10 /* ar12 */ }, 'o' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_ar12 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_callx12_stateArgs[] = { @@ -2310,8 +2609,8 @@ static xtensa_arg_internal Iclass_xt_iclass_callx12_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_callx8_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 9 /* ar8 */ }, 'o' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_ar8 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_callx8_stateArgs[] = { @@ -2319,8 +2618,8 @@ static xtensa_arg_internal Iclass_xt_iclass_callx8_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_callx4_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 8 /* ar4 */ }, 'o' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_ar4 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_callx4_stateArgs[] = { @@ -2328,9 +2627,9 @@ static xtensa_arg_internal Iclass_xt_iclass_callx4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_entry_args[] = { - { { 11 /* ars_entry */ }, 's' }, - { { 4 /* ars */ }, 'i' }, - { { 1 /* uimm12x8 */ }, 'i' } + { { OPERAND_ars_entry }, 's' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm12x8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_entry_stateArgs[] = { @@ -2342,8 +2641,8 @@ static xtensa_arg_internal Iclass_xt_iclass_entry_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_movsp_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_movsp_stateArgs[] = { @@ -2352,7 +2651,7 @@ static xtensa_arg_internal Iclass_xt_iclass_movsp_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rotw_args[] = { - { { 2 /* simm4 */ }, 'i' } + { { OPERAND_simm4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_rotw_stateArgs[] = { @@ -2362,7 +2661,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rotw_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_retw_args[] = { - { { 5 /* *ars_invisible */ }, 'i' } + { { OPERAND__ars_invisible }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_retw_stateArgs[] = { @@ -2382,9 +2681,9 @@ static xtensa_arg_internal Iclass_xt_iclass_rfwou_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_l32e_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 12 /* immrx4 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_immrx4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_l32e_stateArgs[] = { @@ -2393,9 +2692,9 @@ static xtensa_arg_internal Iclass_xt_iclass_l32e_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_s32e_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' }, - { { 12 /* immrx4 */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_immrx4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_s32e_stateArgs[] = { @@ -2404,7 +2703,7 @@ static xtensa_arg_internal Iclass_xt_iclass_s32e_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_windowbase_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_windowbase_stateArgs[] = { @@ -2414,7 +2713,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_windowbase_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_windowbase_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_windowbase_stateArgs[] = { @@ -2424,7 +2723,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_windowbase_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_windowbase_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_windowbase_stateArgs[] = { @@ -2434,7 +2733,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_windowbase_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_windowstart_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_windowstart_stateArgs[] = { @@ -2444,7 +2743,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_windowstart_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_windowstart_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_windowstart_stateArgs[] = { @@ -2454,7 +2753,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_windowstart_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_windowstart_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_windowstart_stateArgs[] = { @@ -2464,147 +2763,163 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_windowstart_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_add_n_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_addi_n_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 16 /* ai4const */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_ai4const }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bz6_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 15 /* uimm6 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm6 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_loadi4_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 13 /* lsi4x4 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_lsi4x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_mov_n_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_movi_n_args[] = { - { { 4 /* ars */ }, 'o' }, - { { 14 /* simm7 */ }, 'i' } + { { OPERAND_ars }, 'o' }, + { { OPERAND_simm7 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_retn_args[] = { - { { 5 /* *ars_invisible */ }, 'i' } + { { OPERAND__ars_invisible }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_storei4_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' }, - { { 13 /* lsi4x4 */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_lsi4x4 }, 'i' } +}; + +static xtensa_arg_internal Iclass_rur_threadptr_args[] = { + { { OPERAND_arr }, 'o' } +}; + +static xtensa_arg_internal Iclass_rur_threadptr_stateArgs[] = { + { { STATE_THREADPTR }, 'i' } +}; + +static xtensa_arg_internal Iclass_wur_threadptr_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_wur_threadptr_stateArgs[] = { + { { STATE_THREADPTR }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_addi_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 23 /* simm8 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_simm8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_addmi_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 24 /* simm8x256 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_simm8x256 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_addsub_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bit_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bsi8_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 17 /* b4const */ }, 'i' }, - { { 28 /* label8 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_b4const }, 'i' }, + { { OPERAND_label8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bsi8b_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 37 /* bbi */ }, 'i' }, - { { 28 /* label8 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_bbi }, 'i' }, + { { OPERAND_label8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bsi8u_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 18 /* b4constu */ }, 'i' }, - { { 28 /* label8 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_b4constu }, 'i' }, + { { OPERAND_label8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bst8_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 6 /* art */ }, 'i' }, - { { 28 /* label8 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' }, + { { OPERAND_label8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_bsz12_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 30 /* label12 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_label12 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_call0_args[] = { - { { 0 /* soffsetx4 */ }, 'i' }, - { { 7 /* ar0 */ }, 'o' } + { { OPERAND_soffsetx4 }, 'i' }, + { { OPERAND_ar0 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_callx0_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 7 /* ar0 */ }, 'o' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_ar0 }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_exti_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 6 /* art */ }, 'i' }, - { { 52 /* sae */ }, 'i' }, - { { 27 /* op2p1 */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_art }, 'i' }, + { { OPERAND_sae }, 'i' }, + { { OPERAND_op2p1 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_jump_args[] = { - { { 31 /* soffset */ }, 'i' } + { { OPERAND_soffset }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_jumpx_args[] = { - { { 4 /* ars */ }, 'i' } + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_l16ui_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 20 /* uimm8x2 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x2 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_l16si_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 20 /* uimm8x2 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x2 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_l32i_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_l32r_args[] = { - { { 6 /* art */ }, 'o' }, - { { 32 /* uimm16x4 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_uimm16x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_l32r_stateArgs[] = { @@ -2613,14 +2928,14 @@ static xtensa_arg_internal Iclass_xt_iclass_l32r_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_l8i_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 19 /* uimm8 */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_loop_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 29 /* ulabel8 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_ulabel8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_loop_stateArgs[] = { @@ -2630,8 +2945,8 @@ static xtensa_arg_internal Iclass_xt_iclass_loop_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_loopz_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 29 /* ulabel8 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_ulabel8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_loopz_stateArgs[] = { @@ -2641,45 +2956,45 @@ static xtensa_arg_internal Iclass_xt_iclass_loopz_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_movi_args[] = { - { { 6 /* art */ }, 'o' }, - { { 25 /* simm12b */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_simm12b }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_movz_args[] = { - { { 3 /* arr */ }, 'm' }, - { { 4 /* ars */ }, 'i' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'm' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_neg_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_return_args[] = { - { { 5 /* *ars_invisible */ }, 'i' } + { { OPERAND__ars_invisible }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_s16i_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' }, - { { 20 /* uimm8x2 */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x2 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_s32i_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_s8i_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' }, - { { 19 /* uimm8 */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sar_args[] = { - { { 4 /* ars */ }, 'i' } + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sar_stateArgs[] = { @@ -2687,7 +3002,7 @@ static xtensa_arg_internal Iclass_xt_iclass_sar_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_sari_args[] = { - { { 56 /* sas */ }, 'i' } + { { OPERAND_sas }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sari_stateArgs[] = { @@ -2695,8 +3010,8 @@ static xtensa_arg_internal Iclass_xt_iclass_sari_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_shifts_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_shifts_stateArgs[] = { @@ -2704,9 +3019,9 @@ static xtensa_arg_internal Iclass_xt_iclass_shifts_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_shiftst_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_shiftst_stateArgs[] = { @@ -2714,8 +3029,8 @@ static xtensa_arg_internal Iclass_xt_iclass_shiftst_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_shiftt_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 6 /* art */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_shiftt_stateArgs[] = { @@ -2723,21 +3038,21 @@ static xtensa_arg_internal Iclass_xt_iclass_shiftt_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_slli_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 4 /* ars */ }, 'i' }, - { { 26 /* msalp32 */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_msalp32 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_srai_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 6 /* art */ }, 'i' }, - { { 54 /* sargt */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_art }, 'i' }, + { { OPERAND_sargt }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_srli_args[] = { - { { 3 /* arr */ }, 'o' }, - { { 6 /* art */ }, 'i' }, - { { 40 /* s */ }, 'i' } + { { OPERAND_arr }, 'o' }, + { { OPERAND_art }, 'i' }, + { { OPERAND_s }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sync_stateArgs[] = { @@ -2745,8 +3060,8 @@ static xtensa_arg_internal Iclass_xt_iclass_sync_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsil_args[] = { - { { 6 /* art */ }, 'o' }, - { { 40 /* s */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_s }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_rsil_stateArgs[] = { @@ -2760,7 +3075,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsil_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_lend_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_lend_stateArgs[] = { @@ -2768,7 +3083,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_lend_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_lend_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_lend_stateArgs[] = { @@ -2776,7 +3091,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_lend_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_lend_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_lend_stateArgs[] = { @@ -2784,7 +3099,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_lend_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_lcount_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_lcount_stateArgs[] = { @@ -2792,7 +3107,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_lcount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_lcount_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_lcount_stateArgs[] = { @@ -2801,7 +3116,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_lcount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_lcount_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_lcount_stateArgs[] = { @@ -2810,7 +3125,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_lcount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_lbeg_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_lbeg_stateArgs[] = { @@ -2818,7 +3133,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_lbeg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_lbeg_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_lbeg_stateArgs[] = { @@ -2826,7 +3141,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_lbeg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_lbeg_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_lbeg_stateArgs[] = { @@ -2834,7 +3149,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_lbeg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_sar_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_sar_stateArgs[] = { @@ -2842,7 +3157,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_sar_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_sar_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_sar_stateArgs[] = { @@ -2851,7 +3166,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_sar_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_sar_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_sar_stateArgs[] = { @@ -2859,7 +3174,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_sar_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_litbase_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_litbase_stateArgs[] = { @@ -2868,7 +3183,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_litbase_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_litbase_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_litbase_stateArgs[] = { @@ -2877,7 +3192,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_litbase_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_litbase_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_litbase_stateArgs[] = { @@ -2886,7 +3201,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_litbase_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_176_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_176_stateArgs[] = { @@ -2894,8 +3209,17 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_176_stateArgs[] = { { { STATE_PSRING }, 'i' } }; +static xtensa_arg_internal Iclass_xt_iclass_wsr_176_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_176_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' } +}; + static xtensa_arg_internal Iclass_xt_iclass_rsr_208_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_208_stateArgs[] = { @@ -2904,7 +3228,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_208_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ps_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ps_stateArgs[] = { @@ -2918,7 +3242,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ps_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ps_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ps_stateArgs[] = { @@ -2932,7 +3256,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ps_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ps_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ps_stateArgs[] = { @@ -2946,7 +3270,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ps_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc1_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc1_stateArgs[] = { @@ -2956,7 +3280,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_epc1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc1_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc1_stateArgs[] = { @@ -2966,7 +3290,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_epc1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc1_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc1_stateArgs[] = { @@ -2976,7 +3300,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_epc1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave1_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave1_stateArgs[] = { @@ -2986,7 +3310,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave1_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave1_stateArgs[] = { @@ -2996,7 +3320,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave1_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave1_stateArgs[] = { @@ -3006,7 +3330,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc2_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc2_stateArgs[] = { @@ -3016,7 +3340,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_epc2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc2_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc2_stateArgs[] = { @@ -3026,7 +3350,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_epc2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc2_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc2_stateArgs[] = { @@ -3036,7 +3360,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_epc2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave2_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave2_stateArgs[] = { @@ -3046,7 +3370,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave2_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave2_stateArgs[] = { @@ -3056,7 +3380,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave2_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave2_stateArgs[] = { @@ -3066,7 +3390,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc3_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc3_stateArgs[] = { @@ -3076,7 +3400,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_epc3_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc3_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc3_stateArgs[] = { @@ -3086,7 +3410,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_epc3_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc3_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc3_stateArgs[] = { @@ -3096,7 +3420,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_epc3_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave3_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave3_stateArgs[] = { @@ -3106,7 +3430,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave3_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave3_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave3_stateArgs[] = { @@ -3116,7 +3440,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave3_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave3_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave3_stateArgs[] = { @@ -3126,7 +3450,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave3_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc4_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_epc4_stateArgs[] = { @@ -3136,7 +3460,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_epc4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc4_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_epc4_stateArgs[] = { @@ -3146,7 +3470,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_epc4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc4_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_epc4_stateArgs[] = { @@ -3156,7 +3480,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_epc4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave4_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave4_stateArgs[] = { @@ -3166,7 +3490,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave4_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave4_stateArgs[] = { @@ -3176,7 +3500,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave4_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave4_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave4_stateArgs[] = { @@ -3185,280 +3509,592 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave4_stateArgs[] = { { { STATE_EXCSAVE4 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_eps2_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_epc5_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_eps2_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_epc5_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS2 }, 'i' } + { { STATE_EPC5 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_eps2_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_epc5_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_eps2_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_epc5_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS2 }, 'o' } + { { STATE_EPC5 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_eps2_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_epc5_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_eps2_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_epc5_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS2 }, 'm' } + { { STATE_EPC5 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_eps3_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave5_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_eps3_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave5_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS3 }, 'i' } + { { STATE_EXCSAVE5 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_eps3_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave5_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_eps3_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave5_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS3 }, 'o' } + { { STATE_EXCSAVE5 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_eps3_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave5_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_eps3_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave5_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS3 }, 'm' } + { { STATE_EXCSAVE5 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_eps4_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_epc6_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_eps4_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_epc6_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS4 }, 'i' } + { { STATE_EPC6 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_eps4_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_epc6_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_eps4_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_epc6_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS4 }, 'o' } + { { STATE_EPC6 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_eps4_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_epc6_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_eps4_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_epc6_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EPS4 }, 'm' } + { { STATE_EPC6 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_excvaddr_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave6_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_excvaddr_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave6_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EXCVADDR }, 'i' } + { { STATE_EXCSAVE6 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_excvaddr_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave6_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_excvaddr_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave6_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EXCVADDR }, 'o' } + { { STATE_EXCSAVE6 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_excvaddr_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave6_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_excvaddr_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave6_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EXCVADDR }, 'm' } + { { STATE_EXCSAVE6 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_depc_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_epc7_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_depc_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_epc7_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_DEPC }, 'i' } + { { STATE_EPC7 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_depc_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_epc7_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_depc_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_epc7_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_DEPC }, 'o' } + { { STATE_EPC7 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_depc_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_epc7_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_depc_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_epc7_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_DEPC }, 'm' } + { { STATE_EPC7 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_exccause_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave7_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_exccause_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_excsave7_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EXCCAUSE }, 'i' }, - { { STATE_XTSYNC }, 'i' } + { { STATE_EXCSAVE7 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_exccause_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave7_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_exccause_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_excsave7_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EXCCAUSE }, 'o' } + { { STATE_EXCSAVE7 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_exccause_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave7_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_exccause_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_excsave7_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_EXCCAUSE }, 'm' } + { { STATE_EXCSAVE7 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_misc0_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps2_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_misc0_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps2_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_MISC0 }, 'i' } + { { STATE_EPS2 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_misc0_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps2_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_misc0_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps2_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_MISC0 }, 'o' } + { { STATE_EPS2 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_misc0_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps2_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_misc0_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps2_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_MISC0 }, 'm' } + { { STATE_EPS2 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_misc1_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps3_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_misc1_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps3_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_MISC1 }, 'i' } + { { STATE_EPS3 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_misc1_args[] = { - { { 6 /* art */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps3_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_wsr_misc1_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps3_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_MISC1 }, 'o' } + { { STATE_EPS3 }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_misc1_args[] = { - { { 6 /* art */ }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps3_args[] = { + { { OPERAND_art }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_xsr_misc1_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps3_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, { { STATE_PSRING }, 'i' }, - { { STATE_MISC1 }, 'm' } + { { STATE_EPS3 }, 'm' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_prid_args[] = { - { { 6 /* art */ }, 'o' } +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps4_args[] = { + { { OPERAND_art }, 'o' } }; -static xtensa_arg_internal Iclass_xt_iclass_rsr_prid_stateArgs[] = { +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps4_stateArgs[] = { { { STATE_PSEXCM }, 'i' }, - { { STATE_PSRING }, 'i' } + { { STATE_PSRING }, 'i' }, + { { STATE_EPS4 }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_rfi_args[] = { - { { 40 /* s */ }, 'i' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps4_args[] = { + { { OPERAND_art }, 'i' } }; -static xtensa_arg_internal Iclass_xt_iclass_rfi_stateArgs[] = { - { { STATE_PSWOE }, 'o' }, - { { STATE_PSCALLINC }, 'o' }, - { { STATE_PSOWB }, 'o' }, - { { STATE_PSRING }, 'm' }, - { { STATE_PSUM }, 'o' }, - { { STATE_PSEXCM }, 'm' }, - { { STATE_PSINTLEVEL }, 'o' }, - { { STATE_EPC1 }, 'i' }, - { { STATE_EPC2 }, 'i' }, - { { STATE_EPC3 }, 'i' }, - { { STATE_EPC4 }, 'i' }, - { { STATE_EPS2 }, 'i' }, - { { STATE_EPS3 }, 'i' }, - { { STATE_EPS4 }, 'i' }, - { { STATE_InOCDMode }, 'm' } +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps4_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS4 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps4_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps4_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS4 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps5_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps5_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS5 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps5_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps5_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS5 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps5_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps5_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS5 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps6_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps6_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS6 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps6_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps6_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS6 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps6_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps6_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS6 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps7_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_eps7_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS7 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps7_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_eps7_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS7 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps7_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_eps7_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EPS7 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_excvaddr_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_excvaddr_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EXCVADDR }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_excvaddr_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_excvaddr_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EXCVADDR }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_excvaddr_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_excvaddr_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EXCVADDR }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_depc_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_depc_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_DEPC }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_depc_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_depc_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_DEPC }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_depc_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_depc_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_DEPC }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_exccause_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_exccause_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EXCCAUSE }, 'i' }, + { { STATE_XTSYNC }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_exccause_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_exccause_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EXCCAUSE }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_exccause_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_exccause_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_EXCCAUSE }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_misc0_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_misc0_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_MISC0 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_misc0_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_misc0_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_MISC0 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_misc0_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_misc0_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_MISC0 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_misc1_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_misc1_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_MISC1 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_misc1_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_misc1_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_MISC1 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_misc1_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_misc1_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_MISC1 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_prid_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_prid_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_vecbase_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_vecbase_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_VECBASE }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_vecbase_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_vecbase_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_VECBASE }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_vecbase_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_vecbase_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_VECBASE }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_mul16_args[] = { + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rfi_args[] = { + { { OPERAND_s }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rfi_stateArgs[] = { + { { STATE_PSWOE }, 'o' }, + { { STATE_PSCALLINC }, 'o' }, + { { STATE_PSOWB }, 'o' }, + { { STATE_PSRING }, 'm' }, + { { STATE_PSUM }, 'o' }, + { { STATE_PSEXCM }, 'm' }, + { { STATE_PSINTLEVEL }, 'o' }, + { { STATE_EPC1 }, 'i' }, + { { STATE_EPC2 }, 'i' }, + { { STATE_EPC3 }, 'i' }, + { { STATE_EPC4 }, 'i' }, + { { STATE_EPC5 }, 'i' }, + { { STATE_EPC6 }, 'i' }, + { { STATE_EPC7 }, 'i' }, + { { STATE_EPS2 }, 'i' }, + { { STATE_EPS3 }, 'i' }, + { { STATE_EPS4 }, 'i' }, + { { STATE_EPS5 }, 'i' }, + { { STATE_EPS6 }, 'i' }, + { { STATE_EPS7 }, 'i' }, + { { STATE_InOCDMode }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_wait_args[] = { - { { 40 /* s */ }, 'i' } + { { OPERAND_s }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wait_stateArgs[] = { @@ -3468,7 +4104,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wait_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_interrupt_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_interrupt_stateArgs[] = { @@ -3478,7 +4114,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_interrupt_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_intset_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_intset_stateArgs[] = { @@ -3489,7 +4125,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_intset_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_intclear_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_intclear_stateArgs[] = { @@ -3500,7 +4136,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_intclear_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_intenable_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_intenable_stateArgs[] = { @@ -3510,7 +4146,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_intenable_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_intenable_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_intenable_stateArgs[] = { @@ -3520,7 +4156,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_intenable_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_intenable_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_intenable_stateArgs[] = { @@ -3530,8 +4166,8 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_intenable_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_break_args[] = { - { { 34 /* imms */ }, 'i' }, - { { 33 /* immt */ }, 'i' } + { { OPERAND_imms }, 'i' }, + { { OPERAND_immt }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_break_stateArgs[] = { @@ -3540,7 +4176,7 @@ static xtensa_arg_internal Iclass_xt_iclass_break_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_break_n_args[] = { - { { 34 /* imms */ }, 'i' } + { { OPERAND_imms }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_break_n_stateArgs[] = { @@ -3549,7 +4185,7 @@ static xtensa_arg_internal Iclass_xt_iclass_break_n_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreaka0_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreaka0_stateArgs[] = { @@ -3559,7 +4195,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreaka0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreaka0_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreaka0_stateArgs[] = { @@ -3570,7 +4206,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreaka0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreaka0_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreaka0_stateArgs[] = { @@ -3581,7 +4217,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreaka0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreakc0_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreakc0_stateArgs[] = { @@ -3591,7 +4227,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreakc0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreakc0_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreakc0_stateArgs[] = { @@ -3602,7 +4238,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreakc0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreakc0_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreakc0_stateArgs[] = { @@ -3613,7 +4249,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreakc0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreaka1_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreaka1_stateArgs[] = { @@ -3623,7 +4259,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreaka1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreaka1_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreaka1_stateArgs[] = { @@ -3634,7 +4270,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreaka1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreaka1_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreaka1_stateArgs[] = { @@ -3645,7 +4281,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreaka1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreakc1_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreakc1_stateArgs[] = { @@ -3655,7 +4291,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_dbreakc1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreakc1_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreakc1_stateArgs[] = { @@ -3666,7 +4302,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_dbreakc1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreakc1_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreakc1_stateArgs[] = { @@ -3677,7 +4313,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_dbreakc1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreaka0_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreaka0_stateArgs[] = { @@ -3687,7 +4323,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreaka0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreaka0_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreaka0_stateArgs[] = { @@ -3697,7 +4333,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreaka0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreaka0_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreaka0_stateArgs[] = { @@ -3707,7 +4343,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreaka0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreaka1_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreaka1_stateArgs[] = { @@ -3717,7 +4353,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreaka1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreaka1_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreaka1_stateArgs[] = { @@ -3727,7 +4363,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreaka1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreaka1_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreaka1_stateArgs[] = { @@ -3737,7 +4373,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreaka1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreakenable_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreakenable_stateArgs[] = { @@ -3747,7 +4383,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ibreakenable_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreakenable_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreakenable_stateArgs[] = { @@ -3757,7 +4393,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ibreakenable_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreakenable_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreakenable_stateArgs[] = { @@ -3767,7 +4403,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ibreakenable_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_debugcause_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_debugcause_stateArgs[] = { @@ -3778,7 +4414,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_debugcause_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_debugcause_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_debugcause_stateArgs[] = { @@ -3789,7 +4425,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_debugcause_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_debugcause_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_debugcause_stateArgs[] = { @@ -3800,7 +4436,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_debugcause_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_icount_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_icount_stateArgs[] = { @@ -3810,7 +4446,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_icount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_icount_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_icount_stateArgs[] = { @@ -3821,7 +4457,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_icount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_icount_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_icount_stateArgs[] = { @@ -3832,7 +4468,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_icount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_icountlevel_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_icountlevel_stateArgs[] = { @@ -3842,7 +4478,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_icountlevel_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_icountlevel_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_icountlevel_stateArgs[] = { @@ -3852,7 +4488,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_icountlevel_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_icountlevel_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_icountlevel_stateArgs[] = { @@ -3862,7 +4498,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_icountlevel_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ddr_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ddr_stateArgs[] = { @@ -3872,7 +4508,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ddr_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ddr_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ddr_stateArgs[] = { @@ -3883,7 +4519,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ddr_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ddr_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ddr_stateArgs[] = { @@ -3893,9 +4529,13 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ddr_stateArgs[] = { { { STATE_DDR }, 'm' } }; +static xtensa_arg_internal Iclass_xt_iclass_rfdo_args[] = { + { { OPERAND_imms }, 'i' } +}; + static xtensa_arg_internal Iclass_xt_iclass_rfdo_stateArgs[] = { { { STATE_InOCDMode }, 'm' }, - { { STATE_EPC4 }, 'i' }, + { { STATE_EPC6 }, 'i' }, { { STATE_PSWOE }, 'o' }, { { STATE_PSCALLINC }, 'o' }, { { STATE_PSOWB }, 'o' }, @@ -3903,15 +4543,25 @@ static xtensa_arg_internal Iclass_xt_iclass_rfdo_stateArgs[] = { { { STATE_PSUM }, 'o' }, { { STATE_PSEXCM }, 'o' }, { { STATE_PSINTLEVEL }, 'o' }, - { { STATE_EPS4 }, 'i' } + { { STATE_EPS6 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_rfdd_stateArgs[] = { { { STATE_InOCDMode }, 'm' } }; +static xtensa_arg_internal Iclass_xt_iclass_wsr_mmid_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_mmid_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_XTSYNC }, 'o' } +}; + static xtensa_arg_internal Iclass_xt_iclass_rsr_ccount_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccount_stateArgs[] = { @@ -3921,7 +4571,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ccount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccount_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccount_stateArgs[] = { @@ -3932,7 +4582,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ccount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccount_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccount_stateArgs[] = { @@ -3943,7 +4593,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ccount_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare0_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare0_stateArgs[] = { @@ -3953,7 +4603,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare0_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare0_stateArgs[] = { @@ -3964,7 +4614,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare0_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare0_stateArgs[] = { @@ -3975,7 +4625,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare0_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare1_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare1_stateArgs[] = { @@ -3985,7 +4635,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare1_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare1_stateArgs[] = { @@ -3996,7 +4646,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare1_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare1_stateArgs[] = { @@ -4007,7 +4657,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare1_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare2_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare2_stateArgs[] = { @@ -4017,7 +4667,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ccompare2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare2_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare2_stateArgs[] = { @@ -4028,7 +4678,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ccompare2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare2_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare2_stateArgs[] = { @@ -4039,13 +4689,23 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ccompare2_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_icache_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_icache_lock_args[] = { + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm4x16 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_icache_lock_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_icache_inv_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_icache_inv_stateArgs[] = { @@ -4054,8 +4714,8 @@ static xtensa_arg_internal Iclass_xt_iclass_icache_inv_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_licx_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_licx_stateArgs[] = { @@ -4064,8 +4724,8 @@ static xtensa_arg_internal Iclass_xt_iclass_licx_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_sicx_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sicx_stateArgs[] = { @@ -4074,13 +4734,13 @@ static xtensa_arg_internal Iclass_xt_iclass_sicx_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_dcache_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_dcache_ind_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 22 /* uimm4x16 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm4x16 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_dcache_ind_stateArgs[] = { @@ -4089,8 +4749,8 @@ static xtensa_arg_internal Iclass_xt_iclass_dcache_ind_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_dcache_inv_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_dcache_inv_stateArgs[] = { @@ -4099,13 +4759,23 @@ static xtensa_arg_internal Iclass_xt_iclass_dcache_inv_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_dpf_args[] = { - { { 4 /* ars */ }, 'i' }, - { { 21 /* uimm8x4 */ }, 'i' } + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_dcache_lock_args[] = { + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm4x16 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_dcache_lock_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sdct_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_sdct_stateArgs[] = { @@ -4114,8 +4784,8 @@ static xtensa_arg_internal Iclass_xt_iclass_sdct_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_ldct_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_ldct_stateArgs[] = { @@ -4124,7 +4794,7 @@ static xtensa_arg_internal Iclass_xt_iclass_ldct_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ptevaddr_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_ptevaddr_stateArgs[] = { @@ -4135,7 +4805,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_ptevaddr_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ptevaddr_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_ptevaddr_stateArgs[] = { @@ -4146,7 +4816,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_ptevaddr_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ptevaddr_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_ptevaddr_stateArgs[] = { @@ -4158,7 +4828,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_ptevaddr_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_rasid_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_rasid_stateArgs[] = { @@ -4170,7 +4840,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_rasid_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_rasid_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_rasid_stateArgs[] = { @@ -4183,7 +4853,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_rasid_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_rasid_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_rasid_stateArgs[] = { @@ -4196,7 +4866,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_rasid_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_itlbcfg_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_itlbcfg_stateArgs[] = { @@ -4206,7 +4876,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_itlbcfg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_itlbcfg_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_itlbcfg_stateArgs[] = { @@ -4217,7 +4887,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_itlbcfg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_itlbcfg_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_itlbcfg_stateArgs[] = { @@ -4228,7 +4898,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_itlbcfg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dtlbcfg_args[] = { - { { 6 /* art */ }, 'o' } + { { OPERAND_art }, 'o' } }; static xtensa_arg_internal Iclass_xt_iclass_rsr_dtlbcfg_stateArgs[] = { @@ -4238,7 +4908,7 @@ static xtensa_arg_internal Iclass_xt_iclass_rsr_dtlbcfg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dtlbcfg_args[] = { - { { 6 /* art */ }, 'i' } + { { OPERAND_art }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wsr_dtlbcfg_stateArgs[] = { @@ -4249,7 +4919,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wsr_dtlbcfg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dtlbcfg_args[] = { - { { 6 /* art */ }, 'm' } + { { OPERAND_art }, 'm' } }; static xtensa_arg_internal Iclass_xt_iclass_xsr_dtlbcfg_stateArgs[] = { @@ -4260,7 +4930,7 @@ static xtensa_arg_internal Iclass_xt_iclass_xsr_dtlbcfg_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_idtlb_args[] = { - { { 4 /* ars */ }, 'i' } + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_idtlb_stateArgs[] = { @@ -4270,8 +4940,8 @@ static xtensa_arg_internal Iclass_xt_iclass_idtlb_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_rdtlb_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_rdtlb_stateArgs[] = { @@ -4280,8 +4950,8 @@ static xtensa_arg_internal Iclass_xt_iclass_rdtlb_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_wdtlb_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_wdtlb_stateArgs[] = { @@ -4291,7 +4961,7 @@ static xtensa_arg_internal Iclass_xt_iclass_wdtlb_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_iitlb_args[] = { - { { 4 /* ars */ }, 'i' } + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_iitlb_stateArgs[] = { @@ -4300,8 +4970,8 @@ static xtensa_arg_internal Iclass_xt_iclass_iitlb_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_ritlb_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_ritlb_stateArgs[] = { @@ -4310,8 +4980,8 @@ static xtensa_arg_internal Iclass_xt_iclass_ritlb_stateArgs[] = { }; static xtensa_arg_internal Iclass_xt_iclass_witlb_args[] = { - { { 6 /* art */ }, 'i' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' } }; static xtensa_arg_internal Iclass_xt_iclass_witlb_stateArgs[] = { @@ -4332,9 +5002,116 @@ static xtensa_arg_internal Iclass_xt_iclass_hwwdtlba_stateArgs[] = { { { STATE_EXCVADDR }, 'i' } }; +static xtensa_arg_internal Iclass_xt_iclass_rsr_cpenable_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_cpenable_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_CPENABLE }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_cpenable_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_cpenable_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_CPENABLE }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_cpenable_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_cpenable_stateArgs[] = { + { { STATE_PSEXCM }, 'i' }, + { { STATE_PSRING }, 'i' }, + { { STATE_CPENABLE }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_clamp_args[] = { + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_tp7 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_minmax_args[] = { + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } +}; + static xtensa_arg_internal Iclass_xt_iclass_nsa_args[] = { - { { 6 /* art */ }, 'o' }, - { { 4 /* ars */ }, 'i' } + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_sx_args[] = { + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_tp7 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_l32ai_args[] = { + { { OPERAND_art }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_s32ri_args[] = { + { { OPERAND_art }, 'i' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_s32c1i_args[] = { + { { OPERAND_art }, 'm' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_uimm8x4 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_s32c1i_stateArgs[] = { + { { STATE_SCOMPARE1 }, 'i' }, + { { STATE_SCOMPARE1 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_scompare1_args[] = { + { { OPERAND_art }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_rsr_scompare1_stateArgs[] = { + { { STATE_SCOMPARE1 }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_scompare1_args[] = { + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_wsr_scompare1_stateArgs[] = { + { { STATE_SCOMPARE1 }, 'o' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_scompare1_args[] = { + { { OPERAND_art }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_xsr_scompare1_stateArgs[] = { + { { STATE_SCOMPARE1 }, 'm' } +}; + +static xtensa_arg_internal Iclass_xt_iclass_div_args[] = { + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } +}; + +static xtensa_arg_internal Iclass_xt_mul32_args[] = { + { { OPERAND_arr }, 'o' }, + { { OPERAND_ars }, 'i' }, + { { OPERAND_art }, 'i' } }; static xtensa_iclass_internal iclasses[] = { @@ -4406,6 +5183,10 @@ static xtensa_iclass_internal iclasses[] = { 0, 0, 0, 0 }, { 3, Iclass_xt_iclass_storei4_args, 0, 0, 0, 0 }, + { 1, Iclass_rur_threadptr_args, + 1, Iclass_rur_threadptr_stateArgs, 0, 0 }, + { 1, Iclass_wur_threadptr_args, + 1, Iclass_wur_threadptr_stateArgs, 0, 0 }, { 3, Iclass_xt_iclass_addi_args, 0, 0, 0, 0 }, { 3, Iclass_xt_iclass_addmi_args, @@ -4524,6 +5305,8 @@ static xtensa_iclass_internal iclasses[] = { 2, Iclass_xt_iclass_xsr_litbase_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_176_args, 2, Iclass_xt_iclass_rsr_176_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_176_args, + 2, Iclass_xt_iclass_wsr_176_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_208_args, 2, Iclass_xt_iclass_rsr_208_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_ps_args, @@ -4580,6 +5363,42 @@ static xtensa_iclass_internal iclasses[] = { 3, Iclass_xt_iclass_wsr_excsave4_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_xsr_excsave4_args, 3, Iclass_xt_iclass_xsr_excsave4_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_epc5_args, + 3, Iclass_xt_iclass_rsr_epc5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_epc5_args, + 3, Iclass_xt_iclass_wsr_epc5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_epc5_args, + 3, Iclass_xt_iclass_xsr_epc5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_excsave5_args, + 3, Iclass_xt_iclass_rsr_excsave5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_excsave5_args, + 3, Iclass_xt_iclass_wsr_excsave5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_excsave5_args, + 3, Iclass_xt_iclass_xsr_excsave5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_epc6_args, + 3, Iclass_xt_iclass_rsr_epc6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_epc6_args, + 3, Iclass_xt_iclass_wsr_epc6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_epc6_args, + 3, Iclass_xt_iclass_xsr_epc6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_excsave6_args, + 3, Iclass_xt_iclass_rsr_excsave6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_excsave6_args, + 3, Iclass_xt_iclass_wsr_excsave6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_excsave6_args, + 3, Iclass_xt_iclass_xsr_excsave6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_epc7_args, + 3, Iclass_xt_iclass_rsr_epc7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_epc7_args, + 3, Iclass_xt_iclass_wsr_epc7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_epc7_args, + 3, Iclass_xt_iclass_xsr_epc7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_excsave7_args, + 3, Iclass_xt_iclass_rsr_excsave7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_excsave7_args, + 3, Iclass_xt_iclass_wsr_excsave7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_excsave7_args, + 3, Iclass_xt_iclass_xsr_excsave7_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_eps2_args, 3, Iclass_xt_iclass_rsr_eps2_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_wsr_eps2_args, @@ -4598,6 +5417,24 @@ static xtensa_iclass_internal iclasses[] = { 3, Iclass_xt_iclass_wsr_eps4_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_xsr_eps4_args, 3, Iclass_xt_iclass_xsr_eps4_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_eps5_args, + 3, Iclass_xt_iclass_rsr_eps5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_eps5_args, + 3, Iclass_xt_iclass_wsr_eps5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_eps5_args, + 3, Iclass_xt_iclass_xsr_eps5_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_eps6_args, + 3, Iclass_xt_iclass_rsr_eps6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_eps6_args, + 3, Iclass_xt_iclass_wsr_eps6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_eps6_args, + 3, Iclass_xt_iclass_xsr_eps6_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_eps7_args, + 3, Iclass_xt_iclass_rsr_eps7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_eps7_args, + 3, Iclass_xt_iclass_wsr_eps7_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_eps7_args, + 3, Iclass_xt_iclass_xsr_eps7_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_excvaddr_args, 3, Iclass_xt_iclass_rsr_excvaddr_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_wsr_excvaddr_args, @@ -4630,8 +5467,16 @@ static xtensa_iclass_internal iclasses[] = { 3, Iclass_xt_iclass_xsr_misc1_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_prid_args, 2, Iclass_xt_iclass_rsr_prid_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_vecbase_args, + 3, Iclass_xt_iclass_rsr_vecbase_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_vecbase_args, + 3, Iclass_xt_iclass_wsr_vecbase_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_vecbase_args, + 3, Iclass_xt_iclass_xsr_vecbase_stateArgs, 0, 0 }, + { 3, Iclass_xt_iclass_mul16_args, + 0, 0, 0, 0 }, { 1, Iclass_xt_iclass_rfi_args, - 15, Iclass_xt_iclass_rfi_stateArgs, 0, 0 }, + 21, Iclass_xt_iclass_rfi_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_wait_args, 3, Iclass_xt_iclass_wait_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_interrupt_args, @@ -4716,10 +5561,12 @@ static xtensa_iclass_internal iclasses[] = { 4, Iclass_xt_iclass_wsr_ddr_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_xsr_ddr_args, 4, Iclass_xt_iclass_xsr_ddr_stateArgs, 0, 0 }, - { 0, 0 /* xt_iclass_rfdo */, + { 1, Iclass_xt_iclass_rfdo_args, 10, Iclass_xt_iclass_rfdo_stateArgs, 0, 0 }, { 0, 0 /* xt_iclass_rfdd */, 1, Iclass_xt_iclass_rfdd_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_mmid_args, + 3, Iclass_xt_iclass_wsr_mmid_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_rsr_ccount_args, 3, Iclass_xt_iclass_rsr_ccount_stateArgs, 0, 0 }, { 1, Iclass_xt_iclass_wsr_ccount_args, @@ -4746,6 +5593,8 @@ static xtensa_iclass_internal iclasses[] = { 4, Iclass_xt_iclass_xsr_ccompare2_stateArgs, 0, 0 }, { 2, Iclass_xt_iclass_icache_args, 0, 0, 0, 0 }, + { 2, Iclass_xt_iclass_icache_lock_args, + 2, Iclass_xt_iclass_icache_lock_stateArgs, 0, 0 }, { 2, Iclass_xt_iclass_icache_inv_args, 2, Iclass_xt_iclass_icache_inv_stateArgs, 0, 0 }, { 2, Iclass_xt_iclass_licx_args, @@ -4760,6 +5609,8 @@ static xtensa_iclass_internal iclasses[] = { 2, Iclass_xt_iclass_dcache_inv_stateArgs, 0, 0 }, { 2, Iclass_xt_iclass_dpf_args, 0, 0, 0, 0 }, + { 2, Iclass_xt_iclass_dcache_lock_args, + 2, Iclass_xt_iclass_dcache_lock_stateArgs, 0, 0 }, { 2, Iclass_xt_iclass_sdct_args, 2, Iclass_xt_iclass_sdct_stateArgs, 0, 0 }, { 2, Iclass_xt_iclass_ldct_args, @@ -4806,10 +5657,327 @@ static xtensa_iclass_internal iclasses[] = { 1, Iclass_xt_iclass_hwwitlba_stateArgs, 0, 0 }, { 0, 0 /* xt_iclass_hwwdtlba */, 1, Iclass_xt_iclass_hwwdtlba_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_cpenable_args, + 3, Iclass_xt_iclass_rsr_cpenable_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_cpenable_args, + 3, Iclass_xt_iclass_wsr_cpenable_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_cpenable_args, + 3, Iclass_xt_iclass_xsr_cpenable_stateArgs, 0, 0 }, + { 3, Iclass_xt_iclass_clamp_args, + 0, 0, 0, 0 }, + { 3, Iclass_xt_iclass_minmax_args, + 0, 0, 0, 0 }, { 2, Iclass_xt_iclass_nsa_args, + 0, 0, 0, 0 }, + { 3, Iclass_xt_iclass_sx_args, + 0, 0, 0, 0 }, + { 3, Iclass_xt_iclass_l32ai_args, + 0, 0, 0, 0 }, + { 3, Iclass_xt_iclass_s32ri_args, + 0, 0, 0, 0 }, + { 3, Iclass_xt_iclass_s32c1i_args, + 2, Iclass_xt_iclass_s32c1i_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_rsr_scompare1_args, + 1, Iclass_xt_iclass_rsr_scompare1_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_wsr_scompare1_args, + 1, Iclass_xt_iclass_wsr_scompare1_stateArgs, 0, 0 }, + { 1, Iclass_xt_iclass_xsr_scompare1_args, + 1, Iclass_xt_iclass_xsr_scompare1_stateArgs, 0, 0 }, + { 3, Iclass_xt_iclass_div_args, + 0, 0, 0, 0 }, + { 3, Iclass_xt_mul32_args, 0, 0, 0, 0 } }; +enum xtensa_iclass_id { + ICLASS_xt_iclass_excw, + ICLASS_xt_iclass_rfe, + ICLASS_xt_iclass_rfde, + ICLASS_xt_iclass_syscall, + ICLASS_xt_iclass_simcall, + ICLASS_xt_iclass_call12, + ICLASS_xt_iclass_call8, + ICLASS_xt_iclass_call4, + ICLASS_xt_iclass_callx12, + ICLASS_xt_iclass_callx8, + ICLASS_xt_iclass_callx4, + ICLASS_xt_iclass_entry, + ICLASS_xt_iclass_movsp, + ICLASS_xt_iclass_rotw, + ICLASS_xt_iclass_retw, + ICLASS_xt_iclass_rfwou, + ICLASS_xt_iclass_l32e, + ICLASS_xt_iclass_s32e, + ICLASS_xt_iclass_rsr_windowbase, + ICLASS_xt_iclass_wsr_windowbase, + ICLASS_xt_iclass_xsr_windowbase, + ICLASS_xt_iclass_rsr_windowstart, + ICLASS_xt_iclass_wsr_windowstart, + ICLASS_xt_iclass_xsr_windowstart, + ICLASS_xt_iclass_add_n, + ICLASS_xt_iclass_addi_n, + ICLASS_xt_iclass_bz6, + ICLASS_xt_iclass_ill_n, + ICLASS_xt_iclass_loadi4, + ICLASS_xt_iclass_mov_n, + ICLASS_xt_iclass_movi_n, + ICLASS_xt_iclass_nopn, + ICLASS_xt_iclass_retn, + ICLASS_xt_iclass_storei4, + ICLASS_rur_threadptr, + ICLASS_wur_threadptr, + ICLASS_xt_iclass_addi, + ICLASS_xt_iclass_addmi, + ICLASS_xt_iclass_addsub, + ICLASS_xt_iclass_bit, + ICLASS_xt_iclass_bsi8, + ICLASS_xt_iclass_bsi8b, + ICLASS_xt_iclass_bsi8u, + ICLASS_xt_iclass_bst8, + ICLASS_xt_iclass_bsz12, + ICLASS_xt_iclass_call0, + ICLASS_xt_iclass_callx0, + ICLASS_xt_iclass_exti, + ICLASS_xt_iclass_ill, + ICLASS_xt_iclass_jump, + ICLASS_xt_iclass_jumpx, + ICLASS_xt_iclass_l16ui, + ICLASS_xt_iclass_l16si, + ICLASS_xt_iclass_l32i, + ICLASS_xt_iclass_l32r, + ICLASS_xt_iclass_l8i, + ICLASS_xt_iclass_loop, + ICLASS_xt_iclass_loopz, + ICLASS_xt_iclass_movi, + ICLASS_xt_iclass_movz, + ICLASS_xt_iclass_neg, + ICLASS_xt_iclass_nop, + ICLASS_xt_iclass_return, + ICLASS_xt_iclass_s16i, + ICLASS_xt_iclass_s32i, + ICLASS_xt_iclass_s8i, + ICLASS_xt_iclass_sar, + ICLASS_xt_iclass_sari, + ICLASS_xt_iclass_shifts, + ICLASS_xt_iclass_shiftst, + ICLASS_xt_iclass_shiftt, + ICLASS_xt_iclass_slli, + ICLASS_xt_iclass_srai, + ICLASS_xt_iclass_srli, + ICLASS_xt_iclass_memw, + ICLASS_xt_iclass_extw, + ICLASS_xt_iclass_isync, + ICLASS_xt_iclass_sync, + ICLASS_xt_iclass_rsil, + ICLASS_xt_iclass_rsr_lend, + ICLASS_xt_iclass_wsr_lend, + ICLASS_xt_iclass_xsr_lend, + ICLASS_xt_iclass_rsr_lcount, + ICLASS_xt_iclass_wsr_lcount, + ICLASS_xt_iclass_xsr_lcount, + ICLASS_xt_iclass_rsr_lbeg, + ICLASS_xt_iclass_wsr_lbeg, + ICLASS_xt_iclass_xsr_lbeg, + ICLASS_xt_iclass_rsr_sar, + ICLASS_xt_iclass_wsr_sar, + ICLASS_xt_iclass_xsr_sar, + ICLASS_xt_iclass_rsr_litbase, + ICLASS_xt_iclass_wsr_litbase, + ICLASS_xt_iclass_xsr_litbase, + ICLASS_xt_iclass_rsr_176, + ICLASS_xt_iclass_wsr_176, + ICLASS_xt_iclass_rsr_208, + ICLASS_xt_iclass_rsr_ps, + ICLASS_xt_iclass_wsr_ps, + ICLASS_xt_iclass_xsr_ps, + ICLASS_xt_iclass_rsr_epc1, + ICLASS_xt_iclass_wsr_epc1, + ICLASS_xt_iclass_xsr_epc1, + ICLASS_xt_iclass_rsr_excsave1, + ICLASS_xt_iclass_wsr_excsave1, + ICLASS_xt_iclass_xsr_excsave1, + ICLASS_xt_iclass_rsr_epc2, + ICLASS_xt_iclass_wsr_epc2, + ICLASS_xt_iclass_xsr_epc2, + ICLASS_xt_iclass_rsr_excsave2, + ICLASS_xt_iclass_wsr_excsave2, + ICLASS_xt_iclass_xsr_excsave2, + ICLASS_xt_iclass_rsr_epc3, + ICLASS_xt_iclass_wsr_epc3, + ICLASS_xt_iclass_xsr_epc3, + ICLASS_xt_iclass_rsr_excsave3, + ICLASS_xt_iclass_wsr_excsave3, + ICLASS_xt_iclass_xsr_excsave3, + ICLASS_xt_iclass_rsr_epc4, + ICLASS_xt_iclass_wsr_epc4, + ICLASS_xt_iclass_xsr_epc4, + ICLASS_xt_iclass_rsr_excsave4, + ICLASS_xt_iclass_wsr_excsave4, + ICLASS_xt_iclass_xsr_excsave4, + ICLASS_xt_iclass_rsr_epc5, + ICLASS_xt_iclass_wsr_epc5, + ICLASS_xt_iclass_xsr_epc5, + ICLASS_xt_iclass_rsr_excsave5, + ICLASS_xt_iclass_wsr_excsave5, + ICLASS_xt_iclass_xsr_excsave5, + ICLASS_xt_iclass_rsr_epc6, + ICLASS_xt_iclass_wsr_epc6, + ICLASS_xt_iclass_xsr_epc6, + ICLASS_xt_iclass_rsr_excsave6, + ICLASS_xt_iclass_wsr_excsave6, + ICLASS_xt_iclass_xsr_excsave6, + ICLASS_xt_iclass_rsr_epc7, + ICLASS_xt_iclass_wsr_epc7, + ICLASS_xt_iclass_xsr_epc7, + ICLASS_xt_iclass_rsr_excsave7, + ICLASS_xt_iclass_wsr_excsave7, + ICLASS_xt_iclass_xsr_excsave7, + ICLASS_xt_iclass_rsr_eps2, + ICLASS_xt_iclass_wsr_eps2, + ICLASS_xt_iclass_xsr_eps2, + ICLASS_xt_iclass_rsr_eps3, + ICLASS_xt_iclass_wsr_eps3, + ICLASS_xt_iclass_xsr_eps3, + ICLASS_xt_iclass_rsr_eps4, + ICLASS_xt_iclass_wsr_eps4, + ICLASS_xt_iclass_xsr_eps4, + ICLASS_xt_iclass_rsr_eps5, + ICLASS_xt_iclass_wsr_eps5, + ICLASS_xt_iclass_xsr_eps5, + ICLASS_xt_iclass_rsr_eps6, + ICLASS_xt_iclass_wsr_eps6, + ICLASS_xt_iclass_xsr_eps6, + ICLASS_xt_iclass_rsr_eps7, + ICLASS_xt_iclass_wsr_eps7, + ICLASS_xt_iclass_xsr_eps7, + ICLASS_xt_iclass_rsr_excvaddr, + ICLASS_xt_iclass_wsr_excvaddr, + ICLASS_xt_iclass_xsr_excvaddr, + ICLASS_xt_iclass_rsr_depc, + ICLASS_xt_iclass_wsr_depc, + ICLASS_xt_iclass_xsr_depc, + ICLASS_xt_iclass_rsr_exccause, + ICLASS_xt_iclass_wsr_exccause, + ICLASS_xt_iclass_xsr_exccause, + ICLASS_xt_iclass_rsr_misc0, + ICLASS_xt_iclass_wsr_misc0, + ICLASS_xt_iclass_xsr_misc0, + ICLASS_xt_iclass_rsr_misc1, + ICLASS_xt_iclass_wsr_misc1, + ICLASS_xt_iclass_xsr_misc1, + ICLASS_xt_iclass_rsr_prid, + ICLASS_xt_iclass_rsr_vecbase, + ICLASS_xt_iclass_wsr_vecbase, + ICLASS_xt_iclass_xsr_vecbase, + ICLASS_xt_iclass_mul16, + ICLASS_xt_iclass_rfi, + ICLASS_xt_iclass_wait, + ICLASS_xt_iclass_rsr_interrupt, + ICLASS_xt_iclass_wsr_intset, + ICLASS_xt_iclass_wsr_intclear, + ICLASS_xt_iclass_rsr_intenable, + ICLASS_xt_iclass_wsr_intenable, + ICLASS_xt_iclass_xsr_intenable, + ICLASS_xt_iclass_break, + ICLASS_xt_iclass_break_n, + ICLASS_xt_iclass_rsr_dbreaka0, + ICLASS_xt_iclass_wsr_dbreaka0, + ICLASS_xt_iclass_xsr_dbreaka0, + ICLASS_xt_iclass_rsr_dbreakc0, + ICLASS_xt_iclass_wsr_dbreakc0, + ICLASS_xt_iclass_xsr_dbreakc0, + ICLASS_xt_iclass_rsr_dbreaka1, + ICLASS_xt_iclass_wsr_dbreaka1, + ICLASS_xt_iclass_xsr_dbreaka1, + ICLASS_xt_iclass_rsr_dbreakc1, + ICLASS_xt_iclass_wsr_dbreakc1, + ICLASS_xt_iclass_xsr_dbreakc1, + ICLASS_xt_iclass_rsr_ibreaka0, + ICLASS_xt_iclass_wsr_ibreaka0, + ICLASS_xt_iclass_xsr_ibreaka0, + ICLASS_xt_iclass_rsr_ibreaka1, + ICLASS_xt_iclass_wsr_ibreaka1, + ICLASS_xt_iclass_xsr_ibreaka1, + ICLASS_xt_iclass_rsr_ibreakenable, + ICLASS_xt_iclass_wsr_ibreakenable, + ICLASS_xt_iclass_xsr_ibreakenable, + ICLASS_xt_iclass_rsr_debugcause, + ICLASS_xt_iclass_wsr_debugcause, + ICLASS_xt_iclass_xsr_debugcause, + ICLASS_xt_iclass_rsr_icount, + ICLASS_xt_iclass_wsr_icount, + ICLASS_xt_iclass_xsr_icount, + ICLASS_xt_iclass_rsr_icountlevel, + ICLASS_xt_iclass_wsr_icountlevel, + ICLASS_xt_iclass_xsr_icountlevel, + ICLASS_xt_iclass_rsr_ddr, + ICLASS_xt_iclass_wsr_ddr, + ICLASS_xt_iclass_xsr_ddr, + ICLASS_xt_iclass_rfdo, + ICLASS_xt_iclass_rfdd, + ICLASS_xt_iclass_wsr_mmid, + ICLASS_xt_iclass_rsr_ccount, + ICLASS_xt_iclass_wsr_ccount, + ICLASS_xt_iclass_xsr_ccount, + ICLASS_xt_iclass_rsr_ccompare0, + ICLASS_xt_iclass_wsr_ccompare0, + ICLASS_xt_iclass_xsr_ccompare0, + ICLASS_xt_iclass_rsr_ccompare1, + ICLASS_xt_iclass_wsr_ccompare1, + ICLASS_xt_iclass_xsr_ccompare1, + ICLASS_xt_iclass_rsr_ccompare2, + ICLASS_xt_iclass_wsr_ccompare2, + ICLASS_xt_iclass_xsr_ccompare2, + ICLASS_xt_iclass_icache, + ICLASS_xt_iclass_icache_lock, + ICLASS_xt_iclass_icache_inv, + ICLASS_xt_iclass_licx, + ICLASS_xt_iclass_sicx, + ICLASS_xt_iclass_dcache, + ICLASS_xt_iclass_dcache_ind, + ICLASS_xt_iclass_dcache_inv, + ICLASS_xt_iclass_dpf, + ICLASS_xt_iclass_dcache_lock, + ICLASS_xt_iclass_sdct, + ICLASS_xt_iclass_ldct, + ICLASS_xt_iclass_wsr_ptevaddr, + ICLASS_xt_iclass_rsr_ptevaddr, + ICLASS_xt_iclass_xsr_ptevaddr, + ICLASS_xt_iclass_rsr_rasid, + ICLASS_xt_iclass_wsr_rasid, + ICLASS_xt_iclass_xsr_rasid, + ICLASS_xt_iclass_rsr_itlbcfg, + ICLASS_xt_iclass_wsr_itlbcfg, + ICLASS_xt_iclass_xsr_itlbcfg, + ICLASS_xt_iclass_rsr_dtlbcfg, + ICLASS_xt_iclass_wsr_dtlbcfg, + ICLASS_xt_iclass_xsr_dtlbcfg, + ICLASS_xt_iclass_idtlb, + ICLASS_xt_iclass_rdtlb, + ICLASS_xt_iclass_wdtlb, + ICLASS_xt_iclass_iitlb, + ICLASS_xt_iclass_ritlb, + ICLASS_xt_iclass_witlb, + ICLASS_xt_iclass_ldpte, + ICLASS_xt_iclass_hwwitlba, + ICLASS_xt_iclass_hwwdtlba, + ICLASS_xt_iclass_rsr_cpenable, + ICLASS_xt_iclass_wsr_cpenable, + ICLASS_xt_iclass_xsr_cpenable, + ICLASS_xt_iclass_clamp, + ICLASS_xt_iclass_minmax, + ICLASS_xt_iclass_nsa, + ICLASS_xt_iclass_sx, + ICLASS_xt_iclass_l32ai, + ICLASS_xt_iclass_s32ri, + ICLASS_xt_iclass_s32c1i, + ICLASS_xt_iclass_rsr_scompare1, + ICLASS_xt_iclass_wsr_scompare1, + ICLASS_xt_iclass_xsr_scompare1, + ICLASS_xt_iclass_div, + ICLASS_xt_mul32 +}; + /* Opcode encodings. */ @@ -5035,6 +6203,18 @@ Opcode_s32i_n_Slot_inst16a_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0x9000; } +static void +Opcode_rur_threadptr_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x7e03e; +} + +static void +Opcode_wur_threadptr_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe73f; +} + static void Opcode_addi_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -5623,6 +6803,12 @@ Opcode_rsr_176_Slot_inst_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0xb030; } +static void +Opcode_wsr_176_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb031; +} + static void Opcode_rsr_208_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -5636,159 +6822,267 @@ Opcode_rsr_ps_Slot_inst_encode (xtensa_insnbuf slotbuf) } static void -Opcode_wsr_ps_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_ps_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe631; +} + +static void +Opcode_xsr_ps_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe616; +} + +static void +Opcode_rsr_epc1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb130; +} + +static void +Opcode_wsr_epc1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb131; +} + +static void +Opcode_xsr_epc1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb116; +} + +static void +Opcode_rsr_excsave1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd130; +} + +static void +Opcode_wsr_excsave1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd131; +} + +static void +Opcode_xsr_excsave1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd116; +} + +static void +Opcode_rsr_epc2_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb230; +} + +static void +Opcode_wsr_epc2_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb231; +} + +static void +Opcode_xsr_epc2_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb216; +} + +static void +Opcode_rsr_excsave2_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd230; +} + +static void +Opcode_wsr_excsave2_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd231; +} + +static void +Opcode_xsr_excsave2_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd216; +} + +static void +Opcode_rsr_epc3_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb330; +} + +static void +Opcode_wsr_epc3_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb331; +} + +static void +Opcode_xsr_epc3_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb316; +} + +static void +Opcode_rsr_excsave3_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd330; +} + +static void +Opcode_wsr_excsave3_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xe631; + slotbuf[0] = 0xd331; } static void -Opcode_xsr_ps_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_excsave3_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xe616; + slotbuf[0] = 0xd316; } static void -Opcode_rsr_epc1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_epc4_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb130; + slotbuf[0] = 0xb430; } static void -Opcode_wsr_epc1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_epc4_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb131; + slotbuf[0] = 0xb431; } static void -Opcode_xsr_epc1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_epc4_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb116; + slotbuf[0] = 0xb416; } static void -Opcode_rsr_excsave1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_excsave4_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd130; + slotbuf[0] = 0xd430; } static void -Opcode_wsr_excsave1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_excsave4_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd131; + slotbuf[0] = 0xd431; } static void -Opcode_xsr_excsave1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_excsave4_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd116; + slotbuf[0] = 0xd416; } static void -Opcode_rsr_epc2_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_epc5_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb230; + slotbuf[0] = 0xb530; } static void -Opcode_wsr_epc2_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_epc5_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb231; + slotbuf[0] = 0xb531; } static void -Opcode_xsr_epc2_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_epc5_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb216; + slotbuf[0] = 0xb516; } static void -Opcode_rsr_excsave2_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_excsave5_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd230; + slotbuf[0] = 0xd530; } static void -Opcode_wsr_excsave2_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_excsave5_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd231; + slotbuf[0] = 0xd531; } static void -Opcode_xsr_excsave2_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_excsave5_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd216; + slotbuf[0] = 0xd516; } static void -Opcode_rsr_epc3_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_epc6_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb330; + slotbuf[0] = 0xb630; } static void -Opcode_wsr_epc3_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_epc6_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb331; + slotbuf[0] = 0xb631; } static void -Opcode_xsr_epc3_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_epc6_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb316; + slotbuf[0] = 0xb616; } static void -Opcode_rsr_excsave3_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_excsave6_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd330; + slotbuf[0] = 0xd630; } static void -Opcode_wsr_excsave3_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_excsave6_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd331; + slotbuf[0] = 0xd631; } static void -Opcode_xsr_excsave3_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_excsave6_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd316; + slotbuf[0] = 0xd616; } static void -Opcode_rsr_epc4_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_epc7_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb430; + slotbuf[0] = 0xb730; } static void -Opcode_wsr_epc4_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_epc7_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb431; + slotbuf[0] = 0xb731; } static void -Opcode_xsr_epc4_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_epc7_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb416; + slotbuf[0] = 0xb716; } static void -Opcode_rsr_excsave4_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_excsave7_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd430; + slotbuf[0] = 0xd730; } static void -Opcode_wsr_excsave4_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_excsave7_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd431; + slotbuf[0] = 0xd731; } static void -Opcode_xsr_excsave4_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_excsave7_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd416; + slotbuf[0] = 0xd716; } static void @@ -5845,6 +7139,60 @@ Opcode_xsr_eps4_Slot_inst_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0xc416; } +static void +Opcode_rsr_eps5_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc530; +} + +static void +Opcode_wsr_eps5_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc531; +} + +static void +Opcode_xsr_eps5_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc516; +} + +static void +Opcode_rsr_eps6_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc630; +} + +static void +Opcode_wsr_eps6_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc631; +} + +static void +Opcode_xsr_eps6_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc616; +} + +static void +Opcode_rsr_eps7_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc730; +} + +static void +Opcode_wsr_eps7_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc731; +} + +static void +Opcode_xsr_eps7_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xc716; +} + static void Opcode_rsr_excvaddr_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -5941,6 +7289,36 @@ Opcode_rsr_prid_Slot_inst_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0xeb30; } +static void +Opcode_rsr_vecbase_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe730; +} + +static void +Opcode_wsr_vecbase_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe731; +} + +static void +Opcode_xsr_vecbase_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe716; +} + +static void +Opcode_mul16u_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x1c; +} + +static void +Opcode_mul16s_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x1d; +} + static void Opcode_rfi_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -6211,6 +7589,12 @@ Opcode_rfdd_Slot_inst_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0x10e1f; } +static void +Opcode_wsr_mmid_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x5931; +} + static void Opcode_rsr_ccount_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -6295,6 +7679,24 @@ Opcode_ihi_Slot_inst_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0x2e0700; } +static void +Opcode_ipfl_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x2d0700; +} + +static void +Opcode_ihu_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x2d0720; +} + +static void +Opcode_iiu_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x2d0730; +} + static void Opcode_iii_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -6385,6 +7787,24 @@ Opcode_dpfwo_Slot_inst_encode (xtensa_insnbuf slotbuf) slotbuf[0] = 0x230700; } +static void +Opcode_dpfl_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x280700; +} + +static void +Opcode_dhu_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x280720; +} + +static void +Opcode_diu_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x280730; +} + static void Opcode_sdct_Slot_inst_encode (xtensa_insnbuf slotbuf) { @@ -6476,87 +7896,207 @@ Opcode_idtlb_Slot_inst_encode (xtensa_insnbuf slotbuf) } static void -Opcode_pdtlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_pdtlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xd05; +} + +static void +Opcode_rdtlb0_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xb05; +} + +static void +Opcode_rdtlb1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xf05; +} + +static void +Opcode_wdtlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe05; +} + +static void +Opcode_iitlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x405; +} + +static void +Opcode_pitlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x505; +} + +static void +Opcode_ritlb0_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x305; +} + +static void +Opcode_ritlb1_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x705; +} + +static void +Opcode_witlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x605; +} + +static void +Opcode_ldpte_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xf1f; +} + +static void +Opcode_hwwitlba_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x105; +} + +static void +Opcode_hwwdtlba_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x905; +} + +static void +Opcode_rsr_cpenable_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe030; +} + +static void +Opcode_wsr_cpenable_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe031; +} + +static void +Opcode_xsr_cpenable_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0xe016; +} + +static void +Opcode_clamps_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x33; +} + +static void +Opcode_min_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x34; +} + +static void +Opcode_max_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x35; +} + +static void +Opcode_minu_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x36; +} + +static void +Opcode_maxu_Slot_inst_encode (xtensa_insnbuf slotbuf) +{ + slotbuf[0] = 0x37; +} + +static void +Opcode_nsa_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xd05; + slotbuf[0] = 0xe04; } static void -Opcode_rdtlb0_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_nsau_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xb05; + slotbuf[0] = 0xf04; } static void -Opcode_rdtlb1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_sext_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xf05; + slotbuf[0] = 0x32; } static void -Opcode_wdtlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_l32ai_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xe05; + slotbuf[0] = 0x200b00; } static void -Opcode_iitlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_s32ri_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x405; + slotbuf[0] = 0x200f00; } static void -Opcode_pitlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_s32c1i_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x505; + slotbuf[0] = 0x200e00; } static void -Opcode_ritlb0_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rsr_scompare1_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x305; + slotbuf[0] = 0xc30; } static void -Opcode_ritlb1_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_wsr_scompare1_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x705; + slotbuf[0] = 0xc31; } static void -Opcode_witlb_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_xsr_scompare1_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x605; + slotbuf[0] = 0xc16; } static void -Opcode_ldpte_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_quou_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xf1f; + slotbuf[0] = 0x2c; } static void -Opcode_hwwitlba_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_quos_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x105; + slotbuf[0] = 0x2d; } static void -Opcode_hwwdtlba_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_remu_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0x905; + slotbuf[0] = 0x2e; } static void -Opcode_nsa_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_rems_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xe04; + slotbuf[0] = 0x2f; } static void -Opcode_nsau_Slot_inst_encode (xtensa_insnbuf slotbuf) +Opcode_mull_Slot_inst_encode (xtensa_insnbuf slotbuf) { - slotbuf[0] = 0xf04; + slotbuf[0] = 0x28; } xtensa_opcode_encode_fn Opcode_excw_encode_fns[] = { @@ -6707,6 +8247,14 @@ xtensa_opcode_encode_fn Opcode_s32i_n_encode_fns[] = { 0, Opcode_s32i_n_Slot_inst16a_encode, 0 }; +xtensa_opcode_encode_fn Opcode_rur_threadptr_encode_fns[] = { + Opcode_rur_threadptr_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wur_threadptr_encode_fns[] = { + Opcode_wur_threadptr_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_addi_encode_fns[] = { Opcode_addi_Slot_inst_encode, 0, 0 }; @@ -7099,6 +8647,10 @@ xtensa_opcode_encode_fn Opcode_rsr_176_encode_fns[] = { Opcode_rsr_176_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_wsr_176_encode_fns[] = { + Opcode_wsr_176_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_rsr_208_encode_fns[] = { Opcode_rsr_208_Slot_inst_encode, 0, 0 }; @@ -7211,6 +8763,78 @@ xtensa_opcode_encode_fn Opcode_xsr_excsave4_encode_fns[] = { Opcode_xsr_excsave4_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_rsr_epc5_encode_fns[] = { + Opcode_rsr_epc5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_epc5_encode_fns[] = { + Opcode_wsr_epc5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_epc5_encode_fns[] = { + Opcode_xsr_epc5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_excsave5_encode_fns[] = { + Opcode_rsr_excsave5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_excsave5_encode_fns[] = { + Opcode_wsr_excsave5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_excsave5_encode_fns[] = { + Opcode_xsr_excsave5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_epc6_encode_fns[] = { + Opcode_rsr_epc6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_epc6_encode_fns[] = { + Opcode_wsr_epc6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_epc6_encode_fns[] = { + Opcode_xsr_epc6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_excsave6_encode_fns[] = { + Opcode_rsr_excsave6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_excsave6_encode_fns[] = { + Opcode_wsr_excsave6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_excsave6_encode_fns[] = { + Opcode_xsr_excsave6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_epc7_encode_fns[] = { + Opcode_rsr_epc7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_epc7_encode_fns[] = { + Opcode_wsr_epc7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_epc7_encode_fns[] = { + Opcode_xsr_epc7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_excsave7_encode_fns[] = { + Opcode_rsr_excsave7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_excsave7_encode_fns[] = { + Opcode_wsr_excsave7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_excsave7_encode_fns[] = { + Opcode_xsr_excsave7_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_rsr_eps2_encode_fns[] = { Opcode_rsr_eps2_Slot_inst_encode, 0, 0 }; @@ -7247,6 +8871,42 @@ xtensa_opcode_encode_fn Opcode_xsr_eps4_encode_fns[] = { Opcode_xsr_eps4_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_rsr_eps5_encode_fns[] = { + Opcode_rsr_eps5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_eps5_encode_fns[] = { + Opcode_wsr_eps5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_eps5_encode_fns[] = { + Opcode_xsr_eps5_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_eps6_encode_fns[] = { + Opcode_rsr_eps6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_eps6_encode_fns[] = { + Opcode_wsr_eps6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_eps6_encode_fns[] = { + Opcode_xsr_eps6_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_eps7_encode_fns[] = { + Opcode_rsr_eps7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_eps7_encode_fns[] = { + Opcode_wsr_eps7_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_eps7_encode_fns[] = { + Opcode_xsr_eps7_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_rsr_excvaddr_encode_fns[] = { Opcode_rsr_excvaddr_Slot_inst_encode, 0, 0 }; @@ -7311,6 +8971,26 @@ xtensa_opcode_encode_fn Opcode_rsr_prid_encode_fns[] = { Opcode_rsr_prid_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_rsr_vecbase_encode_fns[] = { + Opcode_rsr_vecbase_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_vecbase_encode_fns[] = { + Opcode_wsr_vecbase_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_vecbase_encode_fns[] = { + Opcode_xsr_vecbase_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_mul16u_encode_fns[] = { + Opcode_mul16u_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_mul16s_encode_fns[] = { + Opcode_mul16s_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_rfi_encode_fns[] = { Opcode_rfi_Slot_inst_encode, 0, 0 }; @@ -7491,6 +9171,10 @@ xtensa_opcode_encode_fn Opcode_rfdd_encode_fns[] = { Opcode_rfdd_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_wsr_mmid_encode_fns[] = { + Opcode_wsr_mmid_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_rsr_ccount_encode_fns[] = { Opcode_rsr_ccount_Slot_inst_encode, 0, 0 }; @@ -7547,6 +9231,18 @@ xtensa_opcode_encode_fn Opcode_ihi_encode_fns[] = { Opcode_ihi_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_ipfl_encode_fns[] = { + Opcode_ipfl_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_ihu_encode_fns[] = { + Opcode_ihu_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_iiu_encode_fns[] = { + Opcode_iiu_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_iii_encode_fns[] = { Opcode_iii_Slot_inst_encode, 0, 0 }; @@ -7607,6 +9303,18 @@ xtensa_opcode_encode_fn Opcode_dpfwo_encode_fns[] = { Opcode_dpfwo_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_dpfl_encode_fns[] = { + Opcode_dpfl_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_dhu_encode_fns[] = { + Opcode_dhu_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_diu_encode_fns[] = { + Opcode_diu_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_sdct_encode_fns[] = { Opcode_sdct_Slot_inst_encode, 0, 0 }; @@ -7715,6 +9423,38 @@ xtensa_opcode_encode_fn Opcode_hwwdtlba_encode_fns[] = { Opcode_hwwdtlba_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_rsr_cpenable_encode_fns[] = { + Opcode_rsr_cpenable_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_cpenable_encode_fns[] = { + Opcode_wsr_cpenable_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_cpenable_encode_fns[] = { + Opcode_xsr_cpenable_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_clamps_encode_fns[] = { + Opcode_clamps_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_min_encode_fns[] = { + Opcode_min_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_max_encode_fns[] = { + Opcode_max_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_minu_encode_fns[] = { + Opcode_minu_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_maxu_encode_fns[] = { + Opcode_maxu_Slot_inst_encode, 0, 0 +}; + xtensa_opcode_encode_fn Opcode_nsa_encode_fns[] = { Opcode_nsa_Slot_inst_encode, 0, 0 }; @@ -7723,883 +9463,1473 @@ xtensa_opcode_encode_fn Opcode_nsau_encode_fns[] = { Opcode_nsau_Slot_inst_encode, 0, 0 }; +xtensa_opcode_encode_fn Opcode_sext_encode_fns[] = { + Opcode_sext_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_l32ai_encode_fns[] = { + Opcode_l32ai_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_s32ri_encode_fns[] = { + Opcode_s32ri_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_s32c1i_encode_fns[] = { + Opcode_s32c1i_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rsr_scompare1_encode_fns[] = { + Opcode_rsr_scompare1_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_wsr_scompare1_encode_fns[] = { + Opcode_wsr_scompare1_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_xsr_scompare1_encode_fns[] = { + Opcode_xsr_scompare1_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_quou_encode_fns[] = { + Opcode_quou_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_quos_encode_fns[] = { + Opcode_quos_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_remu_encode_fns[] = { + Opcode_remu_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_rems_encode_fns[] = { + Opcode_rems_Slot_inst_encode, 0, 0 +}; + +xtensa_opcode_encode_fn Opcode_mull_encode_fns[] = { + Opcode_mull_Slot_inst_encode, 0, 0 +}; + /* Opcode table. */ static xtensa_opcode_internal opcodes[] = { - { "excw", 0 /* xt_iclass_excw */, + { "excw", ICLASS_xt_iclass_excw, 0, Opcode_excw_encode_fns, 0, 0 }, - { "rfe", 1 /* xt_iclass_rfe */, + { "rfe", ICLASS_xt_iclass_rfe, XTENSA_OPCODE_IS_JUMP, Opcode_rfe_encode_fns, 0, 0 }, - { "rfde", 2 /* xt_iclass_rfde */, + { "rfde", ICLASS_xt_iclass_rfde, XTENSA_OPCODE_IS_JUMP, Opcode_rfde_encode_fns, 0, 0 }, - { "syscall", 3 /* xt_iclass_syscall */, + { "syscall", ICLASS_xt_iclass_syscall, 0, Opcode_syscall_encode_fns, 0, 0 }, - { "simcall", 4 /* xt_iclass_simcall */, + { "simcall", ICLASS_xt_iclass_simcall, 0, Opcode_simcall_encode_fns, 0, 0 }, - { "call12", 5 /* xt_iclass_call12 */, + { "call12", ICLASS_xt_iclass_call12, XTENSA_OPCODE_IS_CALL, Opcode_call12_encode_fns, 0, 0 }, - { "call8", 6 /* xt_iclass_call8 */, + { "call8", ICLASS_xt_iclass_call8, XTENSA_OPCODE_IS_CALL, Opcode_call8_encode_fns, 0, 0 }, - { "call4", 7 /* xt_iclass_call4 */, + { "call4", ICLASS_xt_iclass_call4, XTENSA_OPCODE_IS_CALL, Opcode_call4_encode_fns, 0, 0 }, - { "callx12", 8 /* xt_iclass_callx12 */, + { "callx12", ICLASS_xt_iclass_callx12, XTENSA_OPCODE_IS_CALL, Opcode_callx12_encode_fns, 0, 0 }, - { "callx8", 9 /* xt_iclass_callx8 */, + { "callx8", ICLASS_xt_iclass_callx8, XTENSA_OPCODE_IS_CALL, Opcode_callx8_encode_fns, 0, 0 }, - { "callx4", 10 /* xt_iclass_callx4 */, + { "callx4", ICLASS_xt_iclass_callx4, XTENSA_OPCODE_IS_CALL, Opcode_callx4_encode_fns, 0, 0 }, - { "entry", 11 /* xt_iclass_entry */, + { "entry", ICLASS_xt_iclass_entry, 0, Opcode_entry_encode_fns, 0, 0 }, - { "movsp", 12 /* xt_iclass_movsp */, + { "movsp", ICLASS_xt_iclass_movsp, 0, Opcode_movsp_encode_fns, 0, 0 }, - { "rotw", 13 /* xt_iclass_rotw */, + { "rotw", ICLASS_xt_iclass_rotw, 0, Opcode_rotw_encode_fns, 0, 0 }, - { "retw", 14 /* xt_iclass_retw */, + { "retw", ICLASS_xt_iclass_retw, XTENSA_OPCODE_IS_JUMP, Opcode_retw_encode_fns, 0, 0 }, - { "retw.n", 14 /* xt_iclass_retw */, + { "retw.n", ICLASS_xt_iclass_retw, XTENSA_OPCODE_IS_JUMP, Opcode_retw_n_encode_fns, 0, 0 }, - { "rfwo", 15 /* xt_iclass_rfwou */, + { "rfwo", ICLASS_xt_iclass_rfwou, XTENSA_OPCODE_IS_JUMP, Opcode_rfwo_encode_fns, 0, 0 }, - { "rfwu", 15 /* xt_iclass_rfwou */, + { "rfwu", ICLASS_xt_iclass_rfwou, XTENSA_OPCODE_IS_JUMP, Opcode_rfwu_encode_fns, 0, 0 }, - { "l32e", 16 /* xt_iclass_l32e */, + { "l32e", ICLASS_xt_iclass_l32e, 0, Opcode_l32e_encode_fns, 0, 0 }, - { "s32e", 17 /* xt_iclass_s32e */, + { "s32e", ICLASS_xt_iclass_s32e, 0, Opcode_s32e_encode_fns, 0, 0 }, - { "rsr.windowbase", 18 /* xt_iclass_rsr.windowbase */, + { "rsr.windowbase", ICLASS_xt_iclass_rsr_windowbase, 0, Opcode_rsr_windowbase_encode_fns, 0, 0 }, - { "wsr.windowbase", 19 /* xt_iclass_wsr.windowbase */, + { "wsr.windowbase", ICLASS_xt_iclass_wsr_windowbase, 0, Opcode_wsr_windowbase_encode_fns, 0, 0 }, - { "xsr.windowbase", 20 /* xt_iclass_xsr.windowbase */, + { "xsr.windowbase", ICLASS_xt_iclass_xsr_windowbase, 0, Opcode_xsr_windowbase_encode_fns, 0, 0 }, - { "rsr.windowstart", 21 /* xt_iclass_rsr.windowstart */, + { "rsr.windowstart", ICLASS_xt_iclass_rsr_windowstart, 0, Opcode_rsr_windowstart_encode_fns, 0, 0 }, - { "wsr.windowstart", 22 /* xt_iclass_wsr.windowstart */, + { "wsr.windowstart", ICLASS_xt_iclass_wsr_windowstart, 0, Opcode_wsr_windowstart_encode_fns, 0, 0 }, - { "xsr.windowstart", 23 /* xt_iclass_xsr.windowstart */, + { "xsr.windowstart", ICLASS_xt_iclass_xsr_windowstart, 0, Opcode_xsr_windowstart_encode_fns, 0, 0 }, - { "add.n", 24 /* xt_iclass_add.n */, + { "add.n", ICLASS_xt_iclass_add_n, 0, Opcode_add_n_encode_fns, 0, 0 }, - { "addi.n", 25 /* xt_iclass_addi.n */, + { "addi.n", ICLASS_xt_iclass_addi_n, 0, Opcode_addi_n_encode_fns, 0, 0 }, - { "beqz.n", 26 /* xt_iclass_bz6 */, + { "beqz.n", ICLASS_xt_iclass_bz6, XTENSA_OPCODE_IS_BRANCH, Opcode_beqz_n_encode_fns, 0, 0 }, - { "bnez.n", 26 /* xt_iclass_bz6 */, + { "bnez.n", ICLASS_xt_iclass_bz6, XTENSA_OPCODE_IS_BRANCH, Opcode_bnez_n_encode_fns, 0, 0 }, - { "ill.n", 27 /* xt_iclass_ill.n */, + { "ill.n", ICLASS_xt_iclass_ill_n, 0, Opcode_ill_n_encode_fns, 0, 0 }, - { "l32i.n", 28 /* xt_iclass_loadi4 */, + { "l32i.n", ICLASS_xt_iclass_loadi4, 0, Opcode_l32i_n_encode_fns, 0, 0 }, - { "mov.n", 29 /* xt_iclass_mov.n */, + { "mov.n", ICLASS_xt_iclass_mov_n, 0, Opcode_mov_n_encode_fns, 0, 0 }, - { "movi.n", 30 /* xt_iclass_movi.n */, + { "movi.n", ICLASS_xt_iclass_movi_n, 0, Opcode_movi_n_encode_fns, 0, 0 }, - { "nop.n", 31 /* xt_iclass_nopn */, + { "nop.n", ICLASS_xt_iclass_nopn, 0, Opcode_nop_n_encode_fns, 0, 0 }, - { "ret.n", 32 /* xt_iclass_retn */, + { "ret.n", ICLASS_xt_iclass_retn, XTENSA_OPCODE_IS_JUMP, Opcode_ret_n_encode_fns, 0, 0 }, - { "s32i.n", 33 /* xt_iclass_storei4 */, + { "s32i.n", ICLASS_xt_iclass_storei4, 0, Opcode_s32i_n_encode_fns, 0, 0 }, - { "addi", 34 /* xt_iclass_addi */, + { "rur.threadptr", ICLASS_rur_threadptr, + 0, + Opcode_rur_threadptr_encode_fns, 0, 0 }, + { "wur.threadptr", ICLASS_wur_threadptr, + 0, + Opcode_wur_threadptr_encode_fns, 0, 0 }, + { "addi", ICLASS_xt_iclass_addi, 0, Opcode_addi_encode_fns, 0, 0 }, - { "addmi", 35 /* xt_iclass_addmi */, + { "addmi", ICLASS_xt_iclass_addmi, 0, Opcode_addmi_encode_fns, 0, 0 }, - { "add", 36 /* xt_iclass_addsub */, + { "add", ICLASS_xt_iclass_addsub, 0, Opcode_add_encode_fns, 0, 0 }, - { "sub", 36 /* xt_iclass_addsub */, + { "sub", ICLASS_xt_iclass_addsub, 0, Opcode_sub_encode_fns, 0, 0 }, - { "addx2", 36 /* xt_iclass_addsub */, + { "addx2", ICLASS_xt_iclass_addsub, 0, Opcode_addx2_encode_fns, 0, 0 }, - { "addx4", 36 /* xt_iclass_addsub */, + { "addx4", ICLASS_xt_iclass_addsub, 0, Opcode_addx4_encode_fns, 0, 0 }, - { "addx8", 36 /* xt_iclass_addsub */, + { "addx8", ICLASS_xt_iclass_addsub, 0, Opcode_addx8_encode_fns, 0, 0 }, - { "subx2", 36 /* xt_iclass_addsub */, + { "subx2", ICLASS_xt_iclass_addsub, 0, Opcode_subx2_encode_fns, 0, 0 }, - { "subx4", 36 /* xt_iclass_addsub */, + { "subx4", ICLASS_xt_iclass_addsub, 0, Opcode_subx4_encode_fns, 0, 0 }, - { "subx8", 36 /* xt_iclass_addsub */, + { "subx8", ICLASS_xt_iclass_addsub, 0, Opcode_subx8_encode_fns, 0, 0 }, - { "and", 37 /* xt_iclass_bit */, + { "and", ICLASS_xt_iclass_bit, 0, Opcode_and_encode_fns, 0, 0 }, - { "or", 37 /* xt_iclass_bit */, + { "or", ICLASS_xt_iclass_bit, 0, Opcode_or_encode_fns, 0, 0 }, - { "xor", 37 /* xt_iclass_bit */, + { "xor", ICLASS_xt_iclass_bit, 0, Opcode_xor_encode_fns, 0, 0 }, - { "beqi", 38 /* xt_iclass_bsi8 */, + { "beqi", ICLASS_xt_iclass_bsi8, XTENSA_OPCODE_IS_BRANCH, Opcode_beqi_encode_fns, 0, 0 }, - { "bnei", 38 /* xt_iclass_bsi8 */, + { "bnei", ICLASS_xt_iclass_bsi8, XTENSA_OPCODE_IS_BRANCH, Opcode_bnei_encode_fns, 0, 0 }, - { "bgei", 38 /* xt_iclass_bsi8 */, + { "bgei", ICLASS_xt_iclass_bsi8, XTENSA_OPCODE_IS_BRANCH, Opcode_bgei_encode_fns, 0, 0 }, - { "blti", 38 /* xt_iclass_bsi8 */, + { "blti", ICLASS_xt_iclass_bsi8, XTENSA_OPCODE_IS_BRANCH, Opcode_blti_encode_fns, 0, 0 }, - { "bbci", 39 /* xt_iclass_bsi8b */, + { "bbci", ICLASS_xt_iclass_bsi8b, XTENSA_OPCODE_IS_BRANCH, Opcode_bbci_encode_fns, 0, 0 }, - { "bbsi", 39 /* xt_iclass_bsi8b */, + { "bbsi", ICLASS_xt_iclass_bsi8b, XTENSA_OPCODE_IS_BRANCH, Opcode_bbsi_encode_fns, 0, 0 }, - { "bgeui", 40 /* xt_iclass_bsi8u */, + { "bgeui", ICLASS_xt_iclass_bsi8u, XTENSA_OPCODE_IS_BRANCH, Opcode_bgeui_encode_fns, 0, 0 }, - { "bltui", 40 /* xt_iclass_bsi8u */, + { "bltui", ICLASS_xt_iclass_bsi8u, XTENSA_OPCODE_IS_BRANCH, Opcode_bltui_encode_fns, 0, 0 }, - { "beq", 41 /* xt_iclass_bst8 */, + { "beq", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_beq_encode_fns, 0, 0 }, - { "bne", 41 /* xt_iclass_bst8 */, + { "bne", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bne_encode_fns, 0, 0 }, - { "bge", 41 /* xt_iclass_bst8 */, + { "bge", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bge_encode_fns, 0, 0 }, - { "blt", 41 /* xt_iclass_bst8 */, + { "blt", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_blt_encode_fns, 0, 0 }, - { "bgeu", 41 /* xt_iclass_bst8 */, + { "bgeu", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bgeu_encode_fns, 0, 0 }, - { "bltu", 41 /* xt_iclass_bst8 */, + { "bltu", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bltu_encode_fns, 0, 0 }, - { "bany", 41 /* xt_iclass_bst8 */, + { "bany", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bany_encode_fns, 0, 0 }, - { "bnone", 41 /* xt_iclass_bst8 */, + { "bnone", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bnone_encode_fns, 0, 0 }, - { "ball", 41 /* xt_iclass_bst8 */, + { "ball", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_ball_encode_fns, 0, 0 }, - { "bnall", 41 /* xt_iclass_bst8 */, + { "bnall", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bnall_encode_fns, 0, 0 }, - { "bbc", 41 /* xt_iclass_bst8 */, + { "bbc", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bbc_encode_fns, 0, 0 }, - { "bbs", 41 /* xt_iclass_bst8 */, + { "bbs", ICLASS_xt_iclass_bst8, XTENSA_OPCODE_IS_BRANCH, Opcode_bbs_encode_fns, 0, 0 }, - { "beqz", 42 /* xt_iclass_bsz12 */, + { "beqz", ICLASS_xt_iclass_bsz12, XTENSA_OPCODE_IS_BRANCH, Opcode_beqz_encode_fns, 0, 0 }, - { "bnez", 42 /* xt_iclass_bsz12 */, + { "bnez", ICLASS_xt_iclass_bsz12, XTENSA_OPCODE_IS_BRANCH, Opcode_bnez_encode_fns, 0, 0 }, - { "bgez", 42 /* xt_iclass_bsz12 */, + { "bgez", ICLASS_xt_iclass_bsz12, XTENSA_OPCODE_IS_BRANCH, Opcode_bgez_encode_fns, 0, 0 }, - { "bltz", 42 /* xt_iclass_bsz12 */, + { "bltz", ICLASS_xt_iclass_bsz12, XTENSA_OPCODE_IS_BRANCH, Opcode_bltz_encode_fns, 0, 0 }, - { "call0", 43 /* xt_iclass_call0 */, + { "call0", ICLASS_xt_iclass_call0, XTENSA_OPCODE_IS_CALL, Opcode_call0_encode_fns, 0, 0 }, - { "callx0", 44 /* xt_iclass_callx0 */, + { "callx0", ICLASS_xt_iclass_callx0, XTENSA_OPCODE_IS_CALL, Opcode_callx0_encode_fns, 0, 0 }, - { "extui", 45 /* xt_iclass_exti */, + { "extui", ICLASS_xt_iclass_exti, 0, Opcode_extui_encode_fns, 0, 0 }, - { "ill", 46 /* xt_iclass_ill */, + { "ill", ICLASS_xt_iclass_ill, 0, Opcode_ill_encode_fns, 0, 0 }, - { "j", 47 /* xt_iclass_jump */, + { "j", ICLASS_xt_iclass_jump, XTENSA_OPCODE_IS_JUMP, Opcode_j_encode_fns, 0, 0 }, - { "jx", 48 /* xt_iclass_jumpx */, + { "jx", ICLASS_xt_iclass_jumpx, XTENSA_OPCODE_IS_JUMP, Opcode_jx_encode_fns, 0, 0 }, - { "l16ui", 49 /* xt_iclass_l16ui */, + { "l16ui", ICLASS_xt_iclass_l16ui, 0, Opcode_l16ui_encode_fns, 0, 0 }, - { "l16si", 50 /* xt_iclass_l16si */, + { "l16si", ICLASS_xt_iclass_l16si, 0, Opcode_l16si_encode_fns, 0, 0 }, - { "l32i", 51 /* xt_iclass_l32i */, + { "l32i", ICLASS_xt_iclass_l32i, 0, Opcode_l32i_encode_fns, 0, 0 }, - { "l32r", 52 /* xt_iclass_l32r */, + { "l32r", ICLASS_xt_iclass_l32r, 0, Opcode_l32r_encode_fns, 0, 0 }, - { "l8ui", 53 /* xt_iclass_l8i */, + { "l8ui", ICLASS_xt_iclass_l8i, 0, Opcode_l8ui_encode_fns, 0, 0 }, - { "loop", 54 /* xt_iclass_loop */, + { "loop", ICLASS_xt_iclass_loop, XTENSA_OPCODE_IS_LOOP, Opcode_loop_encode_fns, 0, 0 }, - { "loopnez", 55 /* xt_iclass_loopz */, + { "loopnez", ICLASS_xt_iclass_loopz, XTENSA_OPCODE_IS_LOOP, Opcode_loopnez_encode_fns, 0, 0 }, - { "loopgtz", 55 /* xt_iclass_loopz */, + { "loopgtz", ICLASS_xt_iclass_loopz, XTENSA_OPCODE_IS_LOOP, Opcode_loopgtz_encode_fns, 0, 0 }, - { "movi", 56 /* xt_iclass_movi */, + { "movi", ICLASS_xt_iclass_movi, 0, Opcode_movi_encode_fns, 0, 0 }, - { "moveqz", 57 /* xt_iclass_movz */, + { "moveqz", ICLASS_xt_iclass_movz, 0, Opcode_moveqz_encode_fns, 0, 0 }, - { "movnez", 57 /* xt_iclass_movz */, + { "movnez", ICLASS_xt_iclass_movz, 0, Opcode_movnez_encode_fns, 0, 0 }, - { "movltz", 57 /* xt_iclass_movz */, + { "movltz", ICLASS_xt_iclass_movz, 0, Opcode_movltz_encode_fns, 0, 0 }, - { "movgez", 57 /* xt_iclass_movz */, + { "movgez", ICLASS_xt_iclass_movz, 0, Opcode_movgez_encode_fns, 0, 0 }, - { "neg", 58 /* xt_iclass_neg */, + { "neg", ICLASS_xt_iclass_neg, 0, Opcode_neg_encode_fns, 0, 0 }, - { "abs", 58 /* xt_iclass_neg */, + { "abs", ICLASS_xt_iclass_neg, 0, Opcode_abs_encode_fns, 0, 0 }, - { "nop", 59 /* xt_iclass_nop */, + { "nop", ICLASS_xt_iclass_nop, 0, Opcode_nop_encode_fns, 0, 0 }, - { "ret", 60 /* xt_iclass_return */, + { "ret", ICLASS_xt_iclass_return, XTENSA_OPCODE_IS_JUMP, Opcode_ret_encode_fns, 0, 0 }, - { "s16i", 61 /* xt_iclass_s16i */, + { "s16i", ICLASS_xt_iclass_s16i, 0, Opcode_s16i_encode_fns, 0, 0 }, - { "s32i", 62 /* xt_iclass_s32i */, + { "s32i", ICLASS_xt_iclass_s32i, 0, Opcode_s32i_encode_fns, 0, 0 }, - { "s8i", 63 /* xt_iclass_s8i */, + { "s8i", ICLASS_xt_iclass_s8i, 0, Opcode_s8i_encode_fns, 0, 0 }, - { "ssr", 64 /* xt_iclass_sar */, + { "ssr", ICLASS_xt_iclass_sar, 0, Opcode_ssr_encode_fns, 0, 0 }, - { "ssl", 64 /* xt_iclass_sar */, + { "ssl", ICLASS_xt_iclass_sar, 0, Opcode_ssl_encode_fns, 0, 0 }, - { "ssa8l", 64 /* xt_iclass_sar */, + { "ssa8l", ICLASS_xt_iclass_sar, 0, Opcode_ssa8l_encode_fns, 0, 0 }, - { "ssa8b", 64 /* xt_iclass_sar */, + { "ssa8b", ICLASS_xt_iclass_sar, 0, Opcode_ssa8b_encode_fns, 0, 0 }, - { "ssai", 65 /* xt_iclass_sari */, + { "ssai", ICLASS_xt_iclass_sari, 0, Opcode_ssai_encode_fns, 0, 0 }, - { "sll", 66 /* xt_iclass_shifts */, + { "sll", ICLASS_xt_iclass_shifts, 0, Opcode_sll_encode_fns, 0, 0 }, - { "src", 67 /* xt_iclass_shiftst */, + { "src", ICLASS_xt_iclass_shiftst, 0, Opcode_src_encode_fns, 0, 0 }, - { "srl", 68 /* xt_iclass_shiftt */, + { "srl", ICLASS_xt_iclass_shiftt, 0, Opcode_srl_encode_fns, 0, 0 }, - { "sra", 68 /* xt_iclass_shiftt */, + { "sra", ICLASS_xt_iclass_shiftt, 0, Opcode_sra_encode_fns, 0, 0 }, - { "slli", 69 /* xt_iclass_slli */, + { "slli", ICLASS_xt_iclass_slli, 0, Opcode_slli_encode_fns, 0, 0 }, - { "srai", 70 /* xt_iclass_srai */, + { "srai", ICLASS_xt_iclass_srai, 0, Opcode_srai_encode_fns, 0, 0 }, - { "srli", 71 /* xt_iclass_srli */, + { "srli", ICLASS_xt_iclass_srli, 0, Opcode_srli_encode_fns, 0, 0 }, - { "memw", 72 /* xt_iclass_memw */, + { "memw", ICLASS_xt_iclass_memw, 0, Opcode_memw_encode_fns, 0, 0 }, - { "extw", 73 /* xt_iclass_extw */, + { "extw", ICLASS_xt_iclass_extw, 0, Opcode_extw_encode_fns, 0, 0 }, - { "isync", 74 /* xt_iclass_isync */, + { "isync", ICLASS_xt_iclass_isync, 0, Opcode_isync_encode_fns, 0, 0 }, - { "rsync", 75 /* xt_iclass_sync */, + { "rsync", ICLASS_xt_iclass_sync, 0, Opcode_rsync_encode_fns, 0, 0 }, - { "esync", 75 /* xt_iclass_sync */, + { "esync", ICLASS_xt_iclass_sync, 0, Opcode_esync_encode_fns, 0, 0 }, - { "dsync", 75 /* xt_iclass_sync */, + { "dsync", ICLASS_xt_iclass_sync, 0, Opcode_dsync_encode_fns, 0, 0 }, - { "rsil", 76 /* xt_iclass_rsil */, + { "rsil", ICLASS_xt_iclass_rsil, 0, Opcode_rsil_encode_fns, 0, 0 }, - { "rsr.lend", 77 /* xt_iclass_rsr.lend */, + { "rsr.lend", ICLASS_xt_iclass_rsr_lend, 0, Opcode_rsr_lend_encode_fns, 0, 0 }, - { "wsr.lend", 78 /* xt_iclass_wsr.lend */, + { "wsr.lend", ICLASS_xt_iclass_wsr_lend, 0, Opcode_wsr_lend_encode_fns, 0, 0 }, - { "xsr.lend", 79 /* xt_iclass_xsr.lend */, + { "xsr.lend", ICLASS_xt_iclass_xsr_lend, 0, Opcode_xsr_lend_encode_fns, 0, 0 }, - { "rsr.lcount", 80 /* xt_iclass_rsr.lcount */, + { "rsr.lcount", ICLASS_xt_iclass_rsr_lcount, 0, Opcode_rsr_lcount_encode_fns, 0, 0 }, - { "wsr.lcount", 81 /* xt_iclass_wsr.lcount */, + { "wsr.lcount", ICLASS_xt_iclass_wsr_lcount, 0, Opcode_wsr_lcount_encode_fns, 0, 0 }, - { "xsr.lcount", 82 /* xt_iclass_xsr.lcount */, + { "xsr.lcount", ICLASS_xt_iclass_xsr_lcount, 0, Opcode_xsr_lcount_encode_fns, 0, 0 }, - { "rsr.lbeg", 83 /* xt_iclass_rsr.lbeg */, + { "rsr.lbeg", ICLASS_xt_iclass_rsr_lbeg, 0, Opcode_rsr_lbeg_encode_fns, 0, 0 }, - { "wsr.lbeg", 84 /* xt_iclass_wsr.lbeg */, + { "wsr.lbeg", ICLASS_xt_iclass_wsr_lbeg, 0, Opcode_wsr_lbeg_encode_fns, 0, 0 }, - { "xsr.lbeg", 85 /* xt_iclass_xsr.lbeg */, + { "xsr.lbeg", ICLASS_xt_iclass_xsr_lbeg, 0, Opcode_xsr_lbeg_encode_fns, 0, 0 }, - { "rsr.sar", 86 /* xt_iclass_rsr.sar */, + { "rsr.sar", ICLASS_xt_iclass_rsr_sar, 0, Opcode_rsr_sar_encode_fns, 0, 0 }, - { "wsr.sar", 87 /* xt_iclass_wsr.sar */, + { "wsr.sar", ICLASS_xt_iclass_wsr_sar, 0, Opcode_wsr_sar_encode_fns, 0, 0 }, - { "xsr.sar", 88 /* xt_iclass_xsr.sar */, + { "xsr.sar", ICLASS_xt_iclass_xsr_sar, 0, Opcode_xsr_sar_encode_fns, 0, 0 }, - { "rsr.litbase", 89 /* xt_iclass_rsr.litbase */, + { "rsr.litbase", ICLASS_xt_iclass_rsr_litbase, 0, Opcode_rsr_litbase_encode_fns, 0, 0 }, - { "wsr.litbase", 90 /* xt_iclass_wsr.litbase */, + { "wsr.litbase", ICLASS_xt_iclass_wsr_litbase, 0, Opcode_wsr_litbase_encode_fns, 0, 0 }, - { "xsr.litbase", 91 /* xt_iclass_xsr.litbase */, + { "xsr.litbase", ICLASS_xt_iclass_xsr_litbase, 0, Opcode_xsr_litbase_encode_fns, 0, 0 }, - { "rsr.176", 92 /* xt_iclass_rsr.176 */, + { "rsr.176", ICLASS_xt_iclass_rsr_176, 0, Opcode_rsr_176_encode_fns, 0, 0 }, - { "rsr.208", 93 /* xt_iclass_rsr.208 */, + { "wsr.176", ICLASS_xt_iclass_wsr_176, + 0, + Opcode_wsr_176_encode_fns, 0, 0 }, + { "rsr.208", ICLASS_xt_iclass_rsr_208, 0, Opcode_rsr_208_encode_fns, 0, 0 }, - { "rsr.ps", 94 /* xt_iclass_rsr.ps */, + { "rsr.ps", ICLASS_xt_iclass_rsr_ps, 0, Opcode_rsr_ps_encode_fns, 0, 0 }, - { "wsr.ps", 95 /* xt_iclass_wsr.ps */, + { "wsr.ps", ICLASS_xt_iclass_wsr_ps, 0, Opcode_wsr_ps_encode_fns, 0, 0 }, - { "xsr.ps", 96 /* xt_iclass_xsr.ps */, + { "xsr.ps", ICLASS_xt_iclass_xsr_ps, 0, Opcode_xsr_ps_encode_fns, 0, 0 }, - { "rsr.epc1", 97 /* xt_iclass_rsr.epc1 */, + { "rsr.epc1", ICLASS_xt_iclass_rsr_epc1, 0, Opcode_rsr_epc1_encode_fns, 0, 0 }, - { "wsr.epc1", 98 /* xt_iclass_wsr.epc1 */, + { "wsr.epc1", ICLASS_xt_iclass_wsr_epc1, 0, Opcode_wsr_epc1_encode_fns, 0, 0 }, - { "xsr.epc1", 99 /* xt_iclass_xsr.epc1 */, + { "xsr.epc1", ICLASS_xt_iclass_xsr_epc1, 0, Opcode_xsr_epc1_encode_fns, 0, 0 }, - { "rsr.excsave1", 100 /* xt_iclass_rsr.excsave1 */, + { "rsr.excsave1", ICLASS_xt_iclass_rsr_excsave1, 0, Opcode_rsr_excsave1_encode_fns, 0, 0 }, - { "wsr.excsave1", 101 /* xt_iclass_wsr.excsave1 */, + { "wsr.excsave1", ICLASS_xt_iclass_wsr_excsave1, 0, Opcode_wsr_excsave1_encode_fns, 0, 0 }, - { "xsr.excsave1", 102 /* xt_iclass_xsr.excsave1 */, + { "xsr.excsave1", ICLASS_xt_iclass_xsr_excsave1, 0, Opcode_xsr_excsave1_encode_fns, 0, 0 }, - { "rsr.epc2", 103 /* xt_iclass_rsr.epc2 */, + { "rsr.epc2", ICLASS_xt_iclass_rsr_epc2, 0, Opcode_rsr_epc2_encode_fns, 0, 0 }, - { "wsr.epc2", 104 /* xt_iclass_wsr.epc2 */, + { "wsr.epc2", ICLASS_xt_iclass_wsr_epc2, 0, Opcode_wsr_epc2_encode_fns, 0, 0 }, - { "xsr.epc2", 105 /* xt_iclass_xsr.epc2 */, + { "xsr.epc2", ICLASS_xt_iclass_xsr_epc2, 0, Opcode_xsr_epc2_encode_fns, 0, 0 }, - { "rsr.excsave2", 106 /* xt_iclass_rsr.excsave2 */, + { "rsr.excsave2", ICLASS_xt_iclass_rsr_excsave2, 0, Opcode_rsr_excsave2_encode_fns, 0, 0 }, - { "wsr.excsave2", 107 /* xt_iclass_wsr.excsave2 */, + { "wsr.excsave2", ICLASS_xt_iclass_wsr_excsave2, 0, Opcode_wsr_excsave2_encode_fns, 0, 0 }, - { "xsr.excsave2", 108 /* xt_iclass_xsr.excsave2 */, + { "xsr.excsave2", ICLASS_xt_iclass_xsr_excsave2, 0, Opcode_xsr_excsave2_encode_fns, 0, 0 }, - { "rsr.epc3", 109 /* xt_iclass_rsr.epc3 */, + { "rsr.epc3", ICLASS_xt_iclass_rsr_epc3, 0, Opcode_rsr_epc3_encode_fns, 0, 0 }, - { "wsr.epc3", 110 /* xt_iclass_wsr.epc3 */, + { "wsr.epc3", ICLASS_xt_iclass_wsr_epc3, 0, Opcode_wsr_epc3_encode_fns, 0, 0 }, - { "xsr.epc3", 111 /* xt_iclass_xsr.epc3 */, + { "xsr.epc3", ICLASS_xt_iclass_xsr_epc3, 0, Opcode_xsr_epc3_encode_fns, 0, 0 }, - { "rsr.excsave3", 112 /* xt_iclass_rsr.excsave3 */, + { "rsr.excsave3", ICLASS_xt_iclass_rsr_excsave3, 0, Opcode_rsr_excsave3_encode_fns, 0, 0 }, - { "wsr.excsave3", 113 /* xt_iclass_wsr.excsave3 */, + { "wsr.excsave3", ICLASS_xt_iclass_wsr_excsave3, 0, Opcode_wsr_excsave3_encode_fns, 0, 0 }, - { "xsr.excsave3", 114 /* xt_iclass_xsr.excsave3 */, + { "xsr.excsave3", ICLASS_xt_iclass_xsr_excsave3, 0, Opcode_xsr_excsave3_encode_fns, 0, 0 }, - { "rsr.epc4", 115 /* xt_iclass_rsr.epc4 */, + { "rsr.epc4", ICLASS_xt_iclass_rsr_epc4, 0, Opcode_rsr_epc4_encode_fns, 0, 0 }, - { "wsr.epc4", 116 /* xt_iclass_wsr.epc4 */, + { "wsr.epc4", ICLASS_xt_iclass_wsr_epc4, 0, Opcode_wsr_epc4_encode_fns, 0, 0 }, - { "xsr.epc4", 117 /* xt_iclass_xsr.epc4 */, + { "xsr.epc4", ICLASS_xt_iclass_xsr_epc4, 0, Opcode_xsr_epc4_encode_fns, 0, 0 }, - { "rsr.excsave4", 118 /* xt_iclass_rsr.excsave4 */, + { "rsr.excsave4", ICLASS_xt_iclass_rsr_excsave4, 0, Opcode_rsr_excsave4_encode_fns, 0, 0 }, - { "wsr.excsave4", 119 /* xt_iclass_wsr.excsave4 */, + { "wsr.excsave4", ICLASS_xt_iclass_wsr_excsave4, 0, Opcode_wsr_excsave4_encode_fns, 0, 0 }, - { "xsr.excsave4", 120 /* xt_iclass_xsr.excsave4 */, + { "xsr.excsave4", ICLASS_xt_iclass_xsr_excsave4, 0, Opcode_xsr_excsave4_encode_fns, 0, 0 }, - { "rsr.eps2", 121 /* xt_iclass_rsr.eps2 */, + { "rsr.epc5", ICLASS_xt_iclass_rsr_epc5, + 0, + Opcode_rsr_epc5_encode_fns, 0, 0 }, + { "wsr.epc5", ICLASS_xt_iclass_wsr_epc5, + 0, + Opcode_wsr_epc5_encode_fns, 0, 0 }, + { "xsr.epc5", ICLASS_xt_iclass_xsr_epc5, + 0, + Opcode_xsr_epc5_encode_fns, 0, 0 }, + { "rsr.excsave5", ICLASS_xt_iclass_rsr_excsave5, + 0, + Opcode_rsr_excsave5_encode_fns, 0, 0 }, + { "wsr.excsave5", ICLASS_xt_iclass_wsr_excsave5, + 0, + Opcode_wsr_excsave5_encode_fns, 0, 0 }, + { "xsr.excsave5", ICLASS_xt_iclass_xsr_excsave5, + 0, + Opcode_xsr_excsave5_encode_fns, 0, 0 }, + { "rsr.epc6", ICLASS_xt_iclass_rsr_epc6, + 0, + Opcode_rsr_epc6_encode_fns, 0, 0 }, + { "wsr.epc6", ICLASS_xt_iclass_wsr_epc6, + 0, + Opcode_wsr_epc6_encode_fns, 0, 0 }, + { "xsr.epc6", ICLASS_xt_iclass_xsr_epc6, + 0, + Opcode_xsr_epc6_encode_fns, 0, 0 }, + { "rsr.excsave6", ICLASS_xt_iclass_rsr_excsave6, + 0, + Opcode_rsr_excsave6_encode_fns, 0, 0 }, + { "wsr.excsave6", ICLASS_xt_iclass_wsr_excsave6, + 0, + Opcode_wsr_excsave6_encode_fns, 0, 0 }, + { "xsr.excsave6", ICLASS_xt_iclass_xsr_excsave6, + 0, + Opcode_xsr_excsave6_encode_fns, 0, 0 }, + { "rsr.epc7", ICLASS_xt_iclass_rsr_epc7, + 0, + Opcode_rsr_epc7_encode_fns, 0, 0 }, + { "wsr.epc7", ICLASS_xt_iclass_wsr_epc7, + 0, + Opcode_wsr_epc7_encode_fns, 0, 0 }, + { "xsr.epc7", ICLASS_xt_iclass_xsr_epc7, + 0, + Opcode_xsr_epc7_encode_fns, 0, 0 }, + { "rsr.excsave7", ICLASS_xt_iclass_rsr_excsave7, + 0, + Opcode_rsr_excsave7_encode_fns, 0, 0 }, + { "wsr.excsave7", ICLASS_xt_iclass_wsr_excsave7, + 0, + Opcode_wsr_excsave7_encode_fns, 0, 0 }, + { "xsr.excsave7", ICLASS_xt_iclass_xsr_excsave7, + 0, + Opcode_xsr_excsave7_encode_fns, 0, 0 }, + { "rsr.eps2", ICLASS_xt_iclass_rsr_eps2, 0, Opcode_rsr_eps2_encode_fns, 0, 0 }, - { "wsr.eps2", 122 /* xt_iclass_wsr.eps2 */, + { "wsr.eps2", ICLASS_xt_iclass_wsr_eps2, 0, Opcode_wsr_eps2_encode_fns, 0, 0 }, - { "xsr.eps2", 123 /* xt_iclass_xsr.eps2 */, + { "xsr.eps2", ICLASS_xt_iclass_xsr_eps2, 0, Opcode_xsr_eps2_encode_fns, 0, 0 }, - { "rsr.eps3", 124 /* xt_iclass_rsr.eps3 */, + { "rsr.eps3", ICLASS_xt_iclass_rsr_eps3, 0, Opcode_rsr_eps3_encode_fns, 0, 0 }, - { "wsr.eps3", 125 /* xt_iclass_wsr.eps3 */, + { "wsr.eps3", ICLASS_xt_iclass_wsr_eps3, 0, Opcode_wsr_eps3_encode_fns, 0, 0 }, - { "xsr.eps3", 126 /* xt_iclass_xsr.eps3 */, + { "xsr.eps3", ICLASS_xt_iclass_xsr_eps3, 0, Opcode_xsr_eps3_encode_fns, 0, 0 }, - { "rsr.eps4", 127 /* xt_iclass_rsr.eps4 */, + { "rsr.eps4", ICLASS_xt_iclass_rsr_eps4, 0, Opcode_rsr_eps4_encode_fns, 0, 0 }, - { "wsr.eps4", 128 /* xt_iclass_wsr.eps4 */, + { "wsr.eps4", ICLASS_xt_iclass_wsr_eps4, 0, Opcode_wsr_eps4_encode_fns, 0, 0 }, - { "xsr.eps4", 129 /* xt_iclass_xsr.eps4 */, + { "xsr.eps4", ICLASS_xt_iclass_xsr_eps4, 0, Opcode_xsr_eps4_encode_fns, 0, 0 }, - { "rsr.excvaddr", 130 /* xt_iclass_rsr.excvaddr */, + { "rsr.eps5", ICLASS_xt_iclass_rsr_eps5, + 0, + Opcode_rsr_eps5_encode_fns, 0, 0 }, + { "wsr.eps5", ICLASS_xt_iclass_wsr_eps5, + 0, + Opcode_wsr_eps5_encode_fns, 0, 0 }, + { "xsr.eps5", ICLASS_xt_iclass_xsr_eps5, + 0, + Opcode_xsr_eps5_encode_fns, 0, 0 }, + { "rsr.eps6", ICLASS_xt_iclass_rsr_eps6, + 0, + Opcode_rsr_eps6_encode_fns, 0, 0 }, + { "wsr.eps6", ICLASS_xt_iclass_wsr_eps6, + 0, + Opcode_wsr_eps6_encode_fns, 0, 0 }, + { "xsr.eps6", ICLASS_xt_iclass_xsr_eps6, + 0, + Opcode_xsr_eps6_encode_fns, 0, 0 }, + { "rsr.eps7", ICLASS_xt_iclass_rsr_eps7, + 0, + Opcode_rsr_eps7_encode_fns, 0, 0 }, + { "wsr.eps7", ICLASS_xt_iclass_wsr_eps7, + 0, + Opcode_wsr_eps7_encode_fns, 0, 0 }, + { "xsr.eps7", ICLASS_xt_iclass_xsr_eps7, + 0, + Opcode_xsr_eps7_encode_fns, 0, 0 }, + { "rsr.excvaddr", ICLASS_xt_iclass_rsr_excvaddr, 0, Opcode_rsr_excvaddr_encode_fns, 0, 0 }, - { "wsr.excvaddr", 131 /* xt_iclass_wsr.excvaddr */, + { "wsr.excvaddr", ICLASS_xt_iclass_wsr_excvaddr, 0, Opcode_wsr_excvaddr_encode_fns, 0, 0 }, - { "xsr.excvaddr", 132 /* xt_iclass_xsr.excvaddr */, + { "xsr.excvaddr", ICLASS_xt_iclass_xsr_excvaddr, 0, Opcode_xsr_excvaddr_encode_fns, 0, 0 }, - { "rsr.depc", 133 /* xt_iclass_rsr.depc */, + { "rsr.depc", ICLASS_xt_iclass_rsr_depc, 0, Opcode_rsr_depc_encode_fns, 0, 0 }, - { "wsr.depc", 134 /* xt_iclass_wsr.depc */, + { "wsr.depc", ICLASS_xt_iclass_wsr_depc, 0, Opcode_wsr_depc_encode_fns, 0, 0 }, - { "xsr.depc", 135 /* xt_iclass_xsr.depc */, + { "xsr.depc", ICLASS_xt_iclass_xsr_depc, 0, Opcode_xsr_depc_encode_fns, 0, 0 }, - { "rsr.exccause", 136 /* xt_iclass_rsr.exccause */, + { "rsr.exccause", ICLASS_xt_iclass_rsr_exccause, 0, Opcode_rsr_exccause_encode_fns, 0, 0 }, - { "wsr.exccause", 137 /* xt_iclass_wsr.exccause */, + { "wsr.exccause", ICLASS_xt_iclass_wsr_exccause, 0, Opcode_wsr_exccause_encode_fns, 0, 0 }, - { "xsr.exccause", 138 /* xt_iclass_xsr.exccause */, + { "xsr.exccause", ICLASS_xt_iclass_xsr_exccause, 0, Opcode_xsr_exccause_encode_fns, 0, 0 }, - { "rsr.misc0", 139 /* xt_iclass_rsr.misc0 */, + { "rsr.misc0", ICLASS_xt_iclass_rsr_misc0, 0, Opcode_rsr_misc0_encode_fns, 0, 0 }, - { "wsr.misc0", 140 /* xt_iclass_wsr.misc0 */, + { "wsr.misc0", ICLASS_xt_iclass_wsr_misc0, 0, Opcode_wsr_misc0_encode_fns, 0, 0 }, - { "xsr.misc0", 141 /* xt_iclass_xsr.misc0 */, + { "xsr.misc0", ICLASS_xt_iclass_xsr_misc0, 0, Opcode_xsr_misc0_encode_fns, 0, 0 }, - { "rsr.misc1", 142 /* xt_iclass_rsr.misc1 */, + { "rsr.misc1", ICLASS_xt_iclass_rsr_misc1, 0, Opcode_rsr_misc1_encode_fns, 0, 0 }, - { "wsr.misc1", 143 /* xt_iclass_wsr.misc1 */, + { "wsr.misc1", ICLASS_xt_iclass_wsr_misc1, 0, Opcode_wsr_misc1_encode_fns, 0, 0 }, - { "xsr.misc1", 144 /* xt_iclass_xsr.misc1 */, + { "xsr.misc1", ICLASS_xt_iclass_xsr_misc1, 0, Opcode_xsr_misc1_encode_fns, 0, 0 }, - { "rsr.prid", 145 /* xt_iclass_rsr.prid */, + { "rsr.prid", ICLASS_xt_iclass_rsr_prid, 0, Opcode_rsr_prid_encode_fns, 0, 0 }, - { "rfi", 146 /* xt_iclass_rfi */, + { "rsr.vecbase", ICLASS_xt_iclass_rsr_vecbase, + 0, + Opcode_rsr_vecbase_encode_fns, 0, 0 }, + { "wsr.vecbase", ICLASS_xt_iclass_wsr_vecbase, + 0, + Opcode_wsr_vecbase_encode_fns, 0, 0 }, + { "xsr.vecbase", ICLASS_xt_iclass_xsr_vecbase, + 0, + Opcode_xsr_vecbase_encode_fns, 0, 0 }, + { "mul16u", ICLASS_xt_iclass_mul16, + 0, + Opcode_mul16u_encode_fns, 0, 0 }, + { "mul16s", ICLASS_xt_iclass_mul16, + 0, + Opcode_mul16s_encode_fns, 0, 0 }, + { "rfi", ICLASS_xt_iclass_rfi, XTENSA_OPCODE_IS_JUMP, Opcode_rfi_encode_fns, 0, 0 }, - { "waiti", 147 /* xt_iclass_wait */, + { "waiti", ICLASS_xt_iclass_wait, 0, Opcode_waiti_encode_fns, 0, 0 }, - { "rsr.interrupt", 148 /* xt_iclass_rsr.interrupt */, + { "rsr.interrupt", ICLASS_xt_iclass_rsr_interrupt, 0, Opcode_rsr_interrupt_encode_fns, 0, 0 }, - { "wsr.intset", 149 /* xt_iclass_wsr.intset */, + { "wsr.intset", ICLASS_xt_iclass_wsr_intset, 0, Opcode_wsr_intset_encode_fns, 0, 0 }, - { "wsr.intclear", 150 /* xt_iclass_wsr.intclear */, + { "wsr.intclear", ICLASS_xt_iclass_wsr_intclear, 0, Opcode_wsr_intclear_encode_fns, 0, 0 }, - { "rsr.intenable", 151 /* xt_iclass_rsr.intenable */, + { "rsr.intenable", ICLASS_xt_iclass_rsr_intenable, 0, Opcode_rsr_intenable_encode_fns, 0, 0 }, - { "wsr.intenable", 152 /* xt_iclass_wsr.intenable */, + { "wsr.intenable", ICLASS_xt_iclass_wsr_intenable, 0, Opcode_wsr_intenable_encode_fns, 0, 0 }, - { "xsr.intenable", 153 /* xt_iclass_xsr.intenable */, + { "xsr.intenable", ICLASS_xt_iclass_xsr_intenable, 0, Opcode_xsr_intenable_encode_fns, 0, 0 }, - { "break", 154 /* xt_iclass_break */, + { "break", ICLASS_xt_iclass_break, 0, Opcode_break_encode_fns, 0, 0 }, - { "break.n", 155 /* xt_iclass_break.n */, + { "break.n", ICLASS_xt_iclass_break_n, 0, Opcode_break_n_encode_fns, 0, 0 }, - { "rsr.dbreaka0", 156 /* xt_iclass_rsr.dbreaka0 */, + { "rsr.dbreaka0", ICLASS_xt_iclass_rsr_dbreaka0, 0, Opcode_rsr_dbreaka0_encode_fns, 0, 0 }, - { "wsr.dbreaka0", 157 /* xt_iclass_wsr.dbreaka0 */, + { "wsr.dbreaka0", ICLASS_xt_iclass_wsr_dbreaka0, 0, Opcode_wsr_dbreaka0_encode_fns, 0, 0 }, - { "xsr.dbreaka0", 158 /* xt_iclass_xsr.dbreaka0 */, + { "xsr.dbreaka0", ICLASS_xt_iclass_xsr_dbreaka0, 0, Opcode_xsr_dbreaka0_encode_fns, 0, 0 }, - { "rsr.dbreakc0", 159 /* xt_iclass_rsr.dbreakc0 */, + { "rsr.dbreakc0", ICLASS_xt_iclass_rsr_dbreakc0, 0, Opcode_rsr_dbreakc0_encode_fns, 0, 0 }, - { "wsr.dbreakc0", 160 /* xt_iclass_wsr.dbreakc0 */, + { "wsr.dbreakc0", ICLASS_xt_iclass_wsr_dbreakc0, 0, Opcode_wsr_dbreakc0_encode_fns, 0, 0 }, - { "xsr.dbreakc0", 161 /* xt_iclass_xsr.dbreakc0 */, + { "xsr.dbreakc0", ICLASS_xt_iclass_xsr_dbreakc0, 0, Opcode_xsr_dbreakc0_encode_fns, 0, 0 }, - { "rsr.dbreaka1", 162 /* xt_iclass_rsr.dbreaka1 */, + { "rsr.dbreaka1", ICLASS_xt_iclass_rsr_dbreaka1, 0, Opcode_rsr_dbreaka1_encode_fns, 0, 0 }, - { "wsr.dbreaka1", 163 /* xt_iclass_wsr.dbreaka1 */, + { "wsr.dbreaka1", ICLASS_xt_iclass_wsr_dbreaka1, 0, Opcode_wsr_dbreaka1_encode_fns, 0, 0 }, - { "xsr.dbreaka1", 164 /* xt_iclass_xsr.dbreaka1 */, + { "xsr.dbreaka1", ICLASS_xt_iclass_xsr_dbreaka1, 0, Opcode_xsr_dbreaka1_encode_fns, 0, 0 }, - { "rsr.dbreakc1", 165 /* xt_iclass_rsr.dbreakc1 */, + { "rsr.dbreakc1", ICLASS_xt_iclass_rsr_dbreakc1, 0, Opcode_rsr_dbreakc1_encode_fns, 0, 0 }, - { "wsr.dbreakc1", 166 /* xt_iclass_wsr.dbreakc1 */, + { "wsr.dbreakc1", ICLASS_xt_iclass_wsr_dbreakc1, 0, Opcode_wsr_dbreakc1_encode_fns, 0, 0 }, - { "xsr.dbreakc1", 167 /* xt_iclass_xsr.dbreakc1 */, + { "xsr.dbreakc1", ICLASS_xt_iclass_xsr_dbreakc1, 0, Opcode_xsr_dbreakc1_encode_fns, 0, 0 }, - { "rsr.ibreaka0", 168 /* xt_iclass_rsr.ibreaka0 */, + { "rsr.ibreaka0", ICLASS_xt_iclass_rsr_ibreaka0, 0, Opcode_rsr_ibreaka0_encode_fns, 0, 0 }, - { "wsr.ibreaka0", 169 /* xt_iclass_wsr.ibreaka0 */, + { "wsr.ibreaka0", ICLASS_xt_iclass_wsr_ibreaka0, 0, Opcode_wsr_ibreaka0_encode_fns, 0, 0 }, - { "xsr.ibreaka0", 170 /* xt_iclass_xsr.ibreaka0 */, + { "xsr.ibreaka0", ICLASS_xt_iclass_xsr_ibreaka0, 0, Opcode_xsr_ibreaka0_encode_fns, 0, 0 }, - { "rsr.ibreaka1", 171 /* xt_iclass_rsr.ibreaka1 */, + { "rsr.ibreaka1", ICLASS_xt_iclass_rsr_ibreaka1, 0, Opcode_rsr_ibreaka1_encode_fns, 0, 0 }, - { "wsr.ibreaka1", 172 /* xt_iclass_wsr.ibreaka1 */, + { "wsr.ibreaka1", ICLASS_xt_iclass_wsr_ibreaka1, 0, Opcode_wsr_ibreaka1_encode_fns, 0, 0 }, - { "xsr.ibreaka1", 173 /* xt_iclass_xsr.ibreaka1 */, + { "xsr.ibreaka1", ICLASS_xt_iclass_xsr_ibreaka1, 0, Opcode_xsr_ibreaka1_encode_fns, 0, 0 }, - { "rsr.ibreakenable", 174 /* xt_iclass_rsr.ibreakenable */, + { "rsr.ibreakenable", ICLASS_xt_iclass_rsr_ibreakenable, 0, Opcode_rsr_ibreakenable_encode_fns, 0, 0 }, - { "wsr.ibreakenable", 175 /* xt_iclass_wsr.ibreakenable */, + { "wsr.ibreakenable", ICLASS_xt_iclass_wsr_ibreakenable, 0, Opcode_wsr_ibreakenable_encode_fns, 0, 0 }, - { "xsr.ibreakenable", 176 /* xt_iclass_xsr.ibreakenable */, + { "xsr.ibreakenable", ICLASS_xt_iclass_xsr_ibreakenable, 0, Opcode_xsr_ibreakenable_encode_fns, 0, 0 }, - { "rsr.debugcause", 177 /* xt_iclass_rsr.debugcause */, + { "rsr.debugcause", ICLASS_xt_iclass_rsr_debugcause, 0, Opcode_rsr_debugcause_encode_fns, 0, 0 }, - { "wsr.debugcause", 178 /* xt_iclass_wsr.debugcause */, + { "wsr.debugcause", ICLASS_xt_iclass_wsr_debugcause, 0, Opcode_wsr_debugcause_encode_fns, 0, 0 }, - { "xsr.debugcause", 179 /* xt_iclass_xsr.debugcause */, + { "xsr.debugcause", ICLASS_xt_iclass_xsr_debugcause, 0, Opcode_xsr_debugcause_encode_fns, 0, 0 }, - { "rsr.icount", 180 /* xt_iclass_rsr.icount */, + { "rsr.icount", ICLASS_xt_iclass_rsr_icount, 0, Opcode_rsr_icount_encode_fns, 0, 0 }, - { "wsr.icount", 181 /* xt_iclass_wsr.icount */, + { "wsr.icount", ICLASS_xt_iclass_wsr_icount, 0, Opcode_wsr_icount_encode_fns, 0, 0 }, - { "xsr.icount", 182 /* xt_iclass_xsr.icount */, + { "xsr.icount", ICLASS_xt_iclass_xsr_icount, 0, Opcode_xsr_icount_encode_fns, 0, 0 }, - { "rsr.icountlevel", 183 /* xt_iclass_rsr.icountlevel */, + { "rsr.icountlevel", ICLASS_xt_iclass_rsr_icountlevel, 0, Opcode_rsr_icountlevel_encode_fns, 0, 0 }, - { "wsr.icountlevel", 184 /* xt_iclass_wsr.icountlevel */, + { "wsr.icountlevel", ICLASS_xt_iclass_wsr_icountlevel, 0, Opcode_wsr_icountlevel_encode_fns, 0, 0 }, - { "xsr.icountlevel", 185 /* xt_iclass_xsr.icountlevel */, + { "xsr.icountlevel", ICLASS_xt_iclass_xsr_icountlevel, 0, Opcode_xsr_icountlevel_encode_fns, 0, 0 }, - { "rsr.ddr", 186 /* xt_iclass_rsr.ddr */, + { "rsr.ddr", ICLASS_xt_iclass_rsr_ddr, 0, Opcode_rsr_ddr_encode_fns, 0, 0 }, - { "wsr.ddr", 187 /* xt_iclass_wsr.ddr */, + { "wsr.ddr", ICLASS_xt_iclass_wsr_ddr, 0, Opcode_wsr_ddr_encode_fns, 0, 0 }, - { "xsr.ddr", 188 /* xt_iclass_xsr.ddr */, + { "xsr.ddr", ICLASS_xt_iclass_xsr_ddr, 0, Opcode_xsr_ddr_encode_fns, 0, 0 }, - { "rfdo", 189 /* xt_iclass_rfdo */, + { "rfdo", ICLASS_xt_iclass_rfdo, XTENSA_OPCODE_IS_JUMP, Opcode_rfdo_encode_fns, 0, 0 }, - { "rfdd", 190 /* xt_iclass_rfdd */, + { "rfdd", ICLASS_xt_iclass_rfdd, XTENSA_OPCODE_IS_JUMP, Opcode_rfdd_encode_fns, 0, 0 }, - { "rsr.ccount", 191 /* xt_iclass_rsr.ccount */, + { "wsr.mmid", ICLASS_xt_iclass_wsr_mmid, + 0, + Opcode_wsr_mmid_encode_fns, 0, 0 }, + { "rsr.ccount", ICLASS_xt_iclass_rsr_ccount, 0, Opcode_rsr_ccount_encode_fns, 0, 0 }, - { "wsr.ccount", 192 /* xt_iclass_wsr.ccount */, + { "wsr.ccount", ICLASS_xt_iclass_wsr_ccount, 0, Opcode_wsr_ccount_encode_fns, 0, 0 }, - { "xsr.ccount", 193 /* xt_iclass_xsr.ccount */, + { "xsr.ccount", ICLASS_xt_iclass_xsr_ccount, 0, Opcode_xsr_ccount_encode_fns, 0, 0 }, - { "rsr.ccompare0", 194 /* xt_iclass_rsr.ccompare0 */, + { "rsr.ccompare0", ICLASS_xt_iclass_rsr_ccompare0, 0, Opcode_rsr_ccompare0_encode_fns, 0, 0 }, - { "wsr.ccompare0", 195 /* xt_iclass_wsr.ccompare0 */, + { "wsr.ccompare0", ICLASS_xt_iclass_wsr_ccompare0, 0, Opcode_wsr_ccompare0_encode_fns, 0, 0 }, - { "xsr.ccompare0", 196 /* xt_iclass_xsr.ccompare0 */, + { "xsr.ccompare0", ICLASS_xt_iclass_xsr_ccompare0, 0, Opcode_xsr_ccompare0_encode_fns, 0, 0 }, - { "rsr.ccompare1", 197 /* xt_iclass_rsr.ccompare1 */, + { "rsr.ccompare1", ICLASS_xt_iclass_rsr_ccompare1, 0, Opcode_rsr_ccompare1_encode_fns, 0, 0 }, - { "wsr.ccompare1", 198 /* xt_iclass_wsr.ccompare1 */, + { "wsr.ccompare1", ICLASS_xt_iclass_wsr_ccompare1, 0, Opcode_wsr_ccompare1_encode_fns, 0, 0 }, - { "xsr.ccompare1", 199 /* xt_iclass_xsr.ccompare1 */, + { "xsr.ccompare1", ICLASS_xt_iclass_xsr_ccompare1, 0, Opcode_xsr_ccompare1_encode_fns, 0, 0 }, - { "rsr.ccompare2", 200 /* xt_iclass_rsr.ccompare2 */, + { "rsr.ccompare2", ICLASS_xt_iclass_rsr_ccompare2, 0, Opcode_rsr_ccompare2_encode_fns, 0, 0 }, - { "wsr.ccompare2", 201 /* xt_iclass_wsr.ccompare2 */, + { "wsr.ccompare2", ICLASS_xt_iclass_wsr_ccompare2, 0, Opcode_wsr_ccompare2_encode_fns, 0, 0 }, - { "xsr.ccompare2", 202 /* xt_iclass_xsr.ccompare2 */, + { "xsr.ccompare2", ICLASS_xt_iclass_xsr_ccompare2, 0, Opcode_xsr_ccompare2_encode_fns, 0, 0 }, - { "ipf", 203 /* xt_iclass_icache */, + { "ipf", ICLASS_xt_iclass_icache, 0, Opcode_ipf_encode_fns, 0, 0 }, - { "ihi", 203 /* xt_iclass_icache */, + { "ihi", ICLASS_xt_iclass_icache, 0, Opcode_ihi_encode_fns, 0, 0 }, - { "iii", 204 /* xt_iclass_icache_inv */, + { "ipfl", ICLASS_xt_iclass_icache_lock, + 0, + Opcode_ipfl_encode_fns, 0, 0 }, + { "ihu", ICLASS_xt_iclass_icache_lock, + 0, + Opcode_ihu_encode_fns, 0, 0 }, + { "iiu", ICLASS_xt_iclass_icache_lock, + 0, + Opcode_iiu_encode_fns, 0, 0 }, + { "iii", ICLASS_xt_iclass_icache_inv, 0, Opcode_iii_encode_fns, 0, 0 }, - { "lict", 205 /* xt_iclass_licx */, + { "lict", ICLASS_xt_iclass_licx, 0, Opcode_lict_encode_fns, 0, 0 }, - { "licw", 205 /* xt_iclass_licx */, + { "licw", ICLASS_xt_iclass_licx, 0, Opcode_licw_encode_fns, 0, 0 }, - { "sict", 206 /* xt_iclass_sicx */, + { "sict", ICLASS_xt_iclass_sicx, 0, Opcode_sict_encode_fns, 0, 0 }, - { "sicw", 206 /* xt_iclass_sicx */, + { "sicw", ICLASS_xt_iclass_sicx, 0, Opcode_sicw_encode_fns, 0, 0 }, - { "dhwb", 207 /* xt_iclass_dcache */, + { "dhwb", ICLASS_xt_iclass_dcache, 0, Opcode_dhwb_encode_fns, 0, 0 }, - { "dhwbi", 207 /* xt_iclass_dcache */, + { "dhwbi", ICLASS_xt_iclass_dcache, 0, Opcode_dhwbi_encode_fns, 0, 0 }, - { "diwb", 208 /* xt_iclass_dcache_ind */, + { "diwb", ICLASS_xt_iclass_dcache_ind, 0, Opcode_diwb_encode_fns, 0, 0 }, - { "diwbi", 208 /* xt_iclass_dcache_ind */, + { "diwbi", ICLASS_xt_iclass_dcache_ind, 0, Opcode_diwbi_encode_fns, 0, 0 }, - { "dhi", 209 /* xt_iclass_dcache_inv */, + { "dhi", ICLASS_xt_iclass_dcache_inv, 0, Opcode_dhi_encode_fns, 0, 0 }, - { "dii", 209 /* xt_iclass_dcache_inv */, + { "dii", ICLASS_xt_iclass_dcache_inv, 0, Opcode_dii_encode_fns, 0, 0 }, - { "dpfr", 210 /* xt_iclass_dpf */, + { "dpfr", ICLASS_xt_iclass_dpf, 0, Opcode_dpfr_encode_fns, 0, 0 }, - { "dpfw", 210 /* xt_iclass_dpf */, + { "dpfw", ICLASS_xt_iclass_dpf, 0, Opcode_dpfw_encode_fns, 0, 0 }, - { "dpfro", 210 /* xt_iclass_dpf */, + { "dpfro", ICLASS_xt_iclass_dpf, 0, Opcode_dpfro_encode_fns, 0, 0 }, - { "dpfwo", 210 /* xt_iclass_dpf */, + { "dpfwo", ICLASS_xt_iclass_dpf, 0, Opcode_dpfwo_encode_fns, 0, 0 }, - { "sdct", 211 /* xt_iclass_sdct */, + { "dpfl", ICLASS_xt_iclass_dcache_lock, + 0, + Opcode_dpfl_encode_fns, 0, 0 }, + { "dhu", ICLASS_xt_iclass_dcache_lock, + 0, + Opcode_dhu_encode_fns, 0, 0 }, + { "diu", ICLASS_xt_iclass_dcache_lock, + 0, + Opcode_diu_encode_fns, 0, 0 }, + { "sdct", ICLASS_xt_iclass_sdct, 0, Opcode_sdct_encode_fns, 0, 0 }, - { "ldct", 212 /* xt_iclass_ldct */, + { "ldct", ICLASS_xt_iclass_ldct, 0, Opcode_ldct_encode_fns, 0, 0 }, - { "wsr.ptevaddr", 213 /* xt_iclass_wsr.ptevaddr */, + { "wsr.ptevaddr", ICLASS_xt_iclass_wsr_ptevaddr, 0, Opcode_wsr_ptevaddr_encode_fns, 0, 0 }, - { "rsr.ptevaddr", 214 /* xt_iclass_rsr.ptevaddr */, + { "rsr.ptevaddr", ICLASS_xt_iclass_rsr_ptevaddr, 0, Opcode_rsr_ptevaddr_encode_fns, 0, 0 }, - { "xsr.ptevaddr", 215 /* xt_iclass_xsr.ptevaddr */, + { "xsr.ptevaddr", ICLASS_xt_iclass_xsr_ptevaddr, 0, Opcode_xsr_ptevaddr_encode_fns, 0, 0 }, - { "rsr.rasid", 216 /* xt_iclass_rsr.rasid */, + { "rsr.rasid", ICLASS_xt_iclass_rsr_rasid, 0, Opcode_rsr_rasid_encode_fns, 0, 0 }, - { "wsr.rasid", 217 /* xt_iclass_wsr.rasid */, + { "wsr.rasid", ICLASS_xt_iclass_wsr_rasid, 0, Opcode_wsr_rasid_encode_fns, 0, 0 }, - { "xsr.rasid", 218 /* xt_iclass_xsr.rasid */, + { "xsr.rasid", ICLASS_xt_iclass_xsr_rasid, 0, Opcode_xsr_rasid_encode_fns, 0, 0 }, - { "rsr.itlbcfg", 219 /* xt_iclass_rsr.itlbcfg */, + { "rsr.itlbcfg", ICLASS_xt_iclass_rsr_itlbcfg, 0, Opcode_rsr_itlbcfg_encode_fns, 0, 0 }, - { "wsr.itlbcfg", 220 /* xt_iclass_wsr.itlbcfg */, + { "wsr.itlbcfg", ICLASS_xt_iclass_wsr_itlbcfg, 0, Opcode_wsr_itlbcfg_encode_fns, 0, 0 }, - { "xsr.itlbcfg", 221 /* xt_iclass_xsr.itlbcfg */, + { "xsr.itlbcfg", ICLASS_xt_iclass_xsr_itlbcfg, 0, Opcode_xsr_itlbcfg_encode_fns, 0, 0 }, - { "rsr.dtlbcfg", 222 /* xt_iclass_rsr.dtlbcfg */, + { "rsr.dtlbcfg", ICLASS_xt_iclass_rsr_dtlbcfg, 0, Opcode_rsr_dtlbcfg_encode_fns, 0, 0 }, - { "wsr.dtlbcfg", 223 /* xt_iclass_wsr.dtlbcfg */, + { "wsr.dtlbcfg", ICLASS_xt_iclass_wsr_dtlbcfg, 0, Opcode_wsr_dtlbcfg_encode_fns, 0, 0 }, - { "xsr.dtlbcfg", 224 /* xt_iclass_xsr.dtlbcfg */, + { "xsr.dtlbcfg", ICLASS_xt_iclass_xsr_dtlbcfg, 0, Opcode_xsr_dtlbcfg_encode_fns, 0, 0 }, - { "idtlb", 225 /* xt_iclass_idtlb */, + { "idtlb", ICLASS_xt_iclass_idtlb, 0, Opcode_idtlb_encode_fns, 0, 0 }, - { "pdtlb", 226 /* xt_iclass_rdtlb */, + { "pdtlb", ICLASS_xt_iclass_rdtlb, 0, Opcode_pdtlb_encode_fns, 0, 0 }, - { "rdtlb0", 226 /* xt_iclass_rdtlb */, + { "rdtlb0", ICLASS_xt_iclass_rdtlb, 0, Opcode_rdtlb0_encode_fns, 0, 0 }, - { "rdtlb1", 226 /* xt_iclass_rdtlb */, + { "rdtlb1", ICLASS_xt_iclass_rdtlb, 0, Opcode_rdtlb1_encode_fns, 0, 0 }, - { "wdtlb", 227 /* xt_iclass_wdtlb */, + { "wdtlb", ICLASS_xt_iclass_wdtlb, 0, Opcode_wdtlb_encode_fns, 0, 0 }, - { "iitlb", 228 /* xt_iclass_iitlb */, + { "iitlb", ICLASS_xt_iclass_iitlb, 0, Opcode_iitlb_encode_fns, 0, 0 }, - { "pitlb", 229 /* xt_iclass_ritlb */, + { "pitlb", ICLASS_xt_iclass_ritlb, 0, Opcode_pitlb_encode_fns, 0, 0 }, - { "ritlb0", 229 /* xt_iclass_ritlb */, + { "ritlb0", ICLASS_xt_iclass_ritlb, 0, Opcode_ritlb0_encode_fns, 0, 0 }, - { "ritlb1", 229 /* xt_iclass_ritlb */, + { "ritlb1", ICLASS_xt_iclass_ritlb, 0, Opcode_ritlb1_encode_fns, 0, 0 }, - { "witlb", 230 /* xt_iclass_witlb */, + { "witlb", ICLASS_xt_iclass_witlb, 0, Opcode_witlb_encode_fns, 0, 0 }, - { "ldpte", 231 /* xt_iclass_ldpte */, + { "ldpte", ICLASS_xt_iclass_ldpte, 0, Opcode_ldpte_encode_fns, 0, 0 }, - { "hwwitlba", 232 /* xt_iclass_hwwitlba */, + { "hwwitlba", ICLASS_xt_iclass_hwwitlba, XTENSA_OPCODE_IS_BRANCH, Opcode_hwwitlba_encode_fns, 0, 0 }, - { "hwwdtlba", 233 /* xt_iclass_hwwdtlba */, + { "hwwdtlba", ICLASS_xt_iclass_hwwdtlba, 0, Opcode_hwwdtlba_encode_fns, 0, 0 }, - { "nsa", 234 /* xt_iclass_nsa */, + { "rsr.cpenable", ICLASS_xt_iclass_rsr_cpenable, 0, - Opcode_nsa_encode_fns, 0, 0 }, - { "nsau", 234 /* xt_iclass_nsa */, + Opcode_rsr_cpenable_encode_fns, 0, 0 }, + { "wsr.cpenable", ICLASS_xt_iclass_wsr_cpenable, + 0, + Opcode_wsr_cpenable_encode_fns, 0, 0 }, + { "xsr.cpenable", ICLASS_xt_iclass_xsr_cpenable, 0, - Opcode_nsau_encode_fns, 0, 0 } + Opcode_xsr_cpenable_encode_fns, 0, 0 }, + { "clamps", ICLASS_xt_iclass_clamp, + 0, + Opcode_clamps_encode_fns, 0, 0 }, + { "min", ICLASS_xt_iclass_minmax, + 0, + Opcode_min_encode_fns, 0, 0 }, + { "max", ICLASS_xt_iclass_minmax, + 0, + Opcode_max_encode_fns, 0, 0 }, + { "minu", ICLASS_xt_iclass_minmax, + 0, + Opcode_minu_encode_fns, 0, 0 }, + { "maxu", ICLASS_xt_iclass_minmax, + 0, + Opcode_maxu_encode_fns, 0, 0 }, + { "nsa", ICLASS_xt_iclass_nsa, + 0, + Opcode_nsa_encode_fns, 0, 0 }, + { "nsau", ICLASS_xt_iclass_nsa, + 0, + Opcode_nsau_encode_fns, 0, 0 }, + { "sext", ICLASS_xt_iclass_sx, + 0, + Opcode_sext_encode_fns, 0, 0 }, + { "l32ai", ICLASS_xt_iclass_l32ai, + 0, + Opcode_l32ai_encode_fns, 0, 0 }, + { "s32ri", ICLASS_xt_iclass_s32ri, + 0, + Opcode_s32ri_encode_fns, 0, 0 }, + { "s32c1i", ICLASS_xt_iclass_s32c1i, + 0, + Opcode_s32c1i_encode_fns, 0, 0 }, + { "rsr.scompare1", ICLASS_xt_iclass_rsr_scompare1, + 0, + Opcode_rsr_scompare1_encode_fns, 0, 0 }, + { "wsr.scompare1", ICLASS_xt_iclass_wsr_scompare1, + 0, + Opcode_wsr_scompare1_encode_fns, 0, 0 }, + { "xsr.scompare1", ICLASS_xt_iclass_xsr_scompare1, + 0, + Opcode_xsr_scompare1_encode_fns, 0, 0 }, + { "quou", ICLASS_xt_iclass_div, + 0, + Opcode_quou_encode_fns, 0, 0 }, + { "quos", ICLASS_xt_iclass_div, + 0, + Opcode_quos_encode_fns, 0, 0 }, + { "remu", ICLASS_xt_iclass_div, + 0, + Opcode_remu_encode_fns, 0, 0 }, + { "rems", ICLASS_xt_iclass_div, + 0, + Opcode_rems_encode_fns, 0, 0 }, + { "mull", ICLASS_xt_mul32, + 0, + Opcode_mull_encode_fns, 0, 0 } +}; + +enum xtensa_opcode_id { + OPCODE_EXCW, + OPCODE_RFE, + OPCODE_RFDE, + OPCODE_SYSCALL, + OPCODE_SIMCALL, + OPCODE_CALL12, + OPCODE_CALL8, + OPCODE_CALL4, + OPCODE_CALLX12, + OPCODE_CALLX8, + OPCODE_CALLX4, + OPCODE_ENTRY, + OPCODE_MOVSP, + OPCODE_ROTW, + OPCODE_RETW, + OPCODE_RETW_N, + OPCODE_RFWO, + OPCODE_RFWU, + OPCODE_L32E, + OPCODE_S32E, + OPCODE_RSR_WINDOWBASE, + OPCODE_WSR_WINDOWBASE, + OPCODE_XSR_WINDOWBASE, + OPCODE_RSR_WINDOWSTART, + OPCODE_WSR_WINDOWSTART, + OPCODE_XSR_WINDOWSTART, + OPCODE_ADD_N, + OPCODE_ADDI_N, + OPCODE_BEQZ_N, + OPCODE_BNEZ_N, + OPCODE_ILL_N, + OPCODE_L32I_N, + OPCODE_MOV_N, + OPCODE_MOVI_N, + OPCODE_NOP_N, + OPCODE_RET_N, + OPCODE_S32I_N, + OPCODE_RUR_THREADPTR, + OPCODE_WUR_THREADPTR, + OPCODE_ADDI, + OPCODE_ADDMI, + OPCODE_ADD, + OPCODE_SUB, + OPCODE_ADDX2, + OPCODE_ADDX4, + OPCODE_ADDX8, + OPCODE_SUBX2, + OPCODE_SUBX4, + OPCODE_SUBX8, + OPCODE_AND, + OPCODE_OR, + OPCODE_XOR, + OPCODE_BEQI, + OPCODE_BNEI, + OPCODE_BGEI, + OPCODE_BLTI, + OPCODE_BBCI, + OPCODE_BBSI, + OPCODE_BGEUI, + OPCODE_BLTUI, + OPCODE_BEQ, + OPCODE_BNE, + OPCODE_BGE, + OPCODE_BLT, + OPCODE_BGEU, + OPCODE_BLTU, + OPCODE_BANY, + OPCODE_BNONE, + OPCODE_BALL, + OPCODE_BNALL, + OPCODE_BBC, + OPCODE_BBS, + OPCODE_BEQZ, + OPCODE_BNEZ, + OPCODE_BGEZ, + OPCODE_BLTZ, + OPCODE_CALL0, + OPCODE_CALLX0, + OPCODE_EXTUI, + OPCODE_ILL, + OPCODE_J, + OPCODE_JX, + OPCODE_L16UI, + OPCODE_L16SI, + OPCODE_L32I, + OPCODE_L32R, + OPCODE_L8UI, + OPCODE_LOOP, + OPCODE_LOOPNEZ, + OPCODE_LOOPGTZ, + OPCODE_MOVI, + OPCODE_MOVEQZ, + OPCODE_MOVNEZ, + OPCODE_MOVLTZ, + OPCODE_MOVGEZ, + OPCODE_NEG, + OPCODE_ABS, + OPCODE_NOP, + OPCODE_RET, + OPCODE_S16I, + OPCODE_S32I, + OPCODE_S8I, + OPCODE_SSR, + OPCODE_SSL, + OPCODE_SSA8L, + OPCODE_SSA8B, + OPCODE_SSAI, + OPCODE_SLL, + OPCODE_SRC, + OPCODE_SRL, + OPCODE_SRA, + OPCODE_SLLI, + OPCODE_SRAI, + OPCODE_SRLI, + OPCODE_MEMW, + OPCODE_EXTW, + OPCODE_ISYNC, + OPCODE_RSYNC, + OPCODE_ESYNC, + OPCODE_DSYNC, + OPCODE_RSIL, + OPCODE_RSR_LEND, + OPCODE_WSR_LEND, + OPCODE_XSR_LEND, + OPCODE_RSR_LCOUNT, + OPCODE_WSR_LCOUNT, + OPCODE_XSR_LCOUNT, + OPCODE_RSR_LBEG, + OPCODE_WSR_LBEG, + OPCODE_XSR_LBEG, + OPCODE_RSR_SAR, + OPCODE_WSR_SAR, + OPCODE_XSR_SAR, + OPCODE_RSR_LITBASE, + OPCODE_WSR_LITBASE, + OPCODE_XSR_LITBASE, + OPCODE_RSR_176, + OPCODE_WSR_176, + OPCODE_RSR_208, + OPCODE_RSR_PS, + OPCODE_WSR_PS, + OPCODE_XSR_PS, + OPCODE_RSR_EPC1, + OPCODE_WSR_EPC1, + OPCODE_XSR_EPC1, + OPCODE_RSR_EXCSAVE1, + OPCODE_WSR_EXCSAVE1, + OPCODE_XSR_EXCSAVE1, + OPCODE_RSR_EPC2, + OPCODE_WSR_EPC2, + OPCODE_XSR_EPC2, + OPCODE_RSR_EXCSAVE2, + OPCODE_WSR_EXCSAVE2, + OPCODE_XSR_EXCSAVE2, + OPCODE_RSR_EPC3, + OPCODE_WSR_EPC3, + OPCODE_XSR_EPC3, + OPCODE_RSR_EXCSAVE3, + OPCODE_WSR_EXCSAVE3, + OPCODE_XSR_EXCSAVE3, + OPCODE_RSR_EPC4, + OPCODE_WSR_EPC4, + OPCODE_XSR_EPC4, + OPCODE_RSR_EXCSAVE4, + OPCODE_WSR_EXCSAVE4, + OPCODE_XSR_EXCSAVE4, + OPCODE_RSR_EPC5, + OPCODE_WSR_EPC5, + OPCODE_XSR_EPC5, + OPCODE_RSR_EXCSAVE5, + OPCODE_WSR_EXCSAVE5, + OPCODE_XSR_EXCSAVE5, + OPCODE_RSR_EPC6, + OPCODE_WSR_EPC6, + OPCODE_XSR_EPC6, + OPCODE_RSR_EXCSAVE6, + OPCODE_WSR_EXCSAVE6, + OPCODE_XSR_EXCSAVE6, + OPCODE_RSR_EPC7, + OPCODE_WSR_EPC7, + OPCODE_XSR_EPC7, + OPCODE_RSR_EXCSAVE7, + OPCODE_WSR_EXCSAVE7, + OPCODE_XSR_EXCSAVE7, + OPCODE_RSR_EPS2, + OPCODE_WSR_EPS2, + OPCODE_XSR_EPS2, + OPCODE_RSR_EPS3, + OPCODE_WSR_EPS3, + OPCODE_XSR_EPS3, + OPCODE_RSR_EPS4, + OPCODE_WSR_EPS4, + OPCODE_XSR_EPS4, + OPCODE_RSR_EPS5, + OPCODE_WSR_EPS5, + OPCODE_XSR_EPS5, + OPCODE_RSR_EPS6, + OPCODE_WSR_EPS6, + OPCODE_XSR_EPS6, + OPCODE_RSR_EPS7, + OPCODE_WSR_EPS7, + OPCODE_XSR_EPS7, + OPCODE_RSR_EXCVADDR, + OPCODE_WSR_EXCVADDR, + OPCODE_XSR_EXCVADDR, + OPCODE_RSR_DEPC, + OPCODE_WSR_DEPC, + OPCODE_XSR_DEPC, + OPCODE_RSR_EXCCAUSE, + OPCODE_WSR_EXCCAUSE, + OPCODE_XSR_EXCCAUSE, + OPCODE_RSR_MISC0, + OPCODE_WSR_MISC0, + OPCODE_XSR_MISC0, + OPCODE_RSR_MISC1, + OPCODE_WSR_MISC1, + OPCODE_XSR_MISC1, + OPCODE_RSR_PRID, + OPCODE_RSR_VECBASE, + OPCODE_WSR_VECBASE, + OPCODE_XSR_VECBASE, + OPCODE_MUL16U, + OPCODE_MUL16S, + OPCODE_RFI, + OPCODE_WAITI, + OPCODE_RSR_INTERRUPT, + OPCODE_WSR_INTSET, + OPCODE_WSR_INTCLEAR, + OPCODE_RSR_INTENABLE, + OPCODE_WSR_INTENABLE, + OPCODE_XSR_INTENABLE, + OPCODE_BREAK, + OPCODE_BREAK_N, + OPCODE_RSR_DBREAKA0, + OPCODE_WSR_DBREAKA0, + OPCODE_XSR_DBREAKA0, + OPCODE_RSR_DBREAKC0, + OPCODE_WSR_DBREAKC0, + OPCODE_XSR_DBREAKC0, + OPCODE_RSR_DBREAKA1, + OPCODE_WSR_DBREAKA1, + OPCODE_XSR_DBREAKA1, + OPCODE_RSR_DBREAKC1, + OPCODE_WSR_DBREAKC1, + OPCODE_XSR_DBREAKC1, + OPCODE_RSR_IBREAKA0, + OPCODE_WSR_IBREAKA0, + OPCODE_XSR_IBREAKA0, + OPCODE_RSR_IBREAKA1, + OPCODE_WSR_IBREAKA1, + OPCODE_XSR_IBREAKA1, + OPCODE_RSR_IBREAKENABLE, + OPCODE_WSR_IBREAKENABLE, + OPCODE_XSR_IBREAKENABLE, + OPCODE_RSR_DEBUGCAUSE, + OPCODE_WSR_DEBUGCAUSE, + OPCODE_XSR_DEBUGCAUSE, + OPCODE_RSR_ICOUNT, + OPCODE_WSR_ICOUNT, + OPCODE_XSR_ICOUNT, + OPCODE_RSR_ICOUNTLEVEL, + OPCODE_WSR_ICOUNTLEVEL, + OPCODE_XSR_ICOUNTLEVEL, + OPCODE_RSR_DDR, + OPCODE_WSR_DDR, + OPCODE_XSR_DDR, + OPCODE_RFDO, + OPCODE_RFDD, + OPCODE_WSR_MMID, + OPCODE_RSR_CCOUNT, + OPCODE_WSR_CCOUNT, + OPCODE_XSR_CCOUNT, + OPCODE_RSR_CCOMPARE0, + OPCODE_WSR_CCOMPARE0, + OPCODE_XSR_CCOMPARE0, + OPCODE_RSR_CCOMPARE1, + OPCODE_WSR_CCOMPARE1, + OPCODE_XSR_CCOMPARE1, + OPCODE_RSR_CCOMPARE2, + OPCODE_WSR_CCOMPARE2, + OPCODE_XSR_CCOMPARE2, + OPCODE_IPF, + OPCODE_IHI, + OPCODE_IPFL, + OPCODE_IHU, + OPCODE_IIU, + OPCODE_III, + OPCODE_LICT, + OPCODE_LICW, + OPCODE_SICT, + OPCODE_SICW, + OPCODE_DHWB, + OPCODE_DHWBI, + OPCODE_DIWB, + OPCODE_DIWBI, + OPCODE_DHI, + OPCODE_DII, + OPCODE_DPFR, + OPCODE_DPFW, + OPCODE_DPFRO, + OPCODE_DPFWO, + OPCODE_DPFL, + OPCODE_DHU, + OPCODE_DIU, + OPCODE_SDCT, + OPCODE_LDCT, + OPCODE_WSR_PTEVADDR, + OPCODE_RSR_PTEVADDR, + OPCODE_XSR_PTEVADDR, + OPCODE_RSR_RASID, + OPCODE_WSR_RASID, + OPCODE_XSR_RASID, + OPCODE_RSR_ITLBCFG, + OPCODE_WSR_ITLBCFG, + OPCODE_XSR_ITLBCFG, + OPCODE_RSR_DTLBCFG, + OPCODE_WSR_DTLBCFG, + OPCODE_XSR_DTLBCFG, + OPCODE_IDTLB, + OPCODE_PDTLB, + OPCODE_RDTLB0, + OPCODE_RDTLB1, + OPCODE_WDTLB, + OPCODE_IITLB, + OPCODE_PITLB, + OPCODE_RITLB0, + OPCODE_RITLB1, + OPCODE_WITLB, + OPCODE_LDPTE, + OPCODE_HWWITLBA, + OPCODE_HWWDTLBA, + OPCODE_RSR_CPENABLE, + OPCODE_WSR_CPENABLE, + OPCODE_XSR_CPENABLE, + OPCODE_CLAMPS, + OPCODE_MIN, + OPCODE_MAX, + OPCODE_MINU, + OPCODE_MAXU, + OPCODE_NSA, + OPCODE_NSAU, + OPCODE_SEXT, + OPCODE_L32AI, + OPCODE_S32RI, + OPCODE_S32C1I, + OPCODE_RSR_SCOMPARE1, + OPCODE_WSR_SCOMPARE1, + OPCODE_XSR_SCOMPARE1, + OPCODE_QUOU, + OPCODE_QUOS, + OPCODE_REMU, + OPCODE_REMS, + OPCODE_MULL }; @@ -8625,57 +10955,57 @@ Slot_inst_decode (const xtensa_insnbuf insn) case 0: if (Field_s_Slot_inst_get (insn) == 0 && Field_n_Slot_inst_get (insn) == 0) - return 77; /* ill */ + return OPCODE_ILL; break; case 2: switch (Field_n_Slot_inst_get (insn)) { case 0: - return 96; /* ret */ + return OPCODE_RET; case 1: - return 14; /* retw */ + return OPCODE_RETW; case 2: - return 79; /* jx */ + return OPCODE_JX; } break; case 3: switch (Field_n_Slot_inst_get (insn)) { case 0: - return 75; /* callx0 */ + return OPCODE_CALLX0; case 1: - return 10; /* callx4 */ + return OPCODE_CALLX4; case 2: - return 9; /* callx8 */ + return OPCODE_CALLX8; case 3: - return 8; /* callx12 */ + return OPCODE_CALLX12; } break; } break; case 1: - return 12; /* movsp */ + return OPCODE_MOVSP; case 2: if (Field_s_Slot_inst_get (insn) == 0) { switch (Field_t_Slot_inst_get (insn)) { case 0: - return 114; /* isync */ + return OPCODE_ISYNC; case 1: - return 115; /* rsync */ + return OPCODE_RSYNC; case 2: - return 116; /* esync */ + return OPCODE_ESYNC; case 3: - return 117; /* dsync */ + return OPCODE_DSYNC; case 8: - return 0; /* excw */ + return OPCODE_EXCW; case 12: - return 112; /* memw */ + return OPCODE_MEMW; case 13: - return 113; /* extw */ + return OPCODE_EXTW; case 15: - return 95; /* nop */ + return OPCODE_NOP; } } break; @@ -8686,139 +11016,139 @@ Slot_inst_decode (const xtensa_insnbuf insn) switch (Field_s_Slot_inst_get (insn)) { case 0: - return 1; /* rfe */ + return OPCODE_RFE; case 2: - return 2; /* rfde */ + return OPCODE_RFDE; case 4: - return 16; /* rfwo */ + return OPCODE_RFWO; case 5: - return 17; /* rfwu */ + return OPCODE_RFWU; } break; case 1: - return 188; /* rfi */ + return OPCODE_RFI; } break; case 4: - return 196; /* break */ + return OPCODE_BREAK; case 5: switch (Field_s_Slot_inst_get (insn)) { case 0: if (Field_t_Slot_inst_get (insn) == 0) - return 3; /* syscall */ + return OPCODE_SYSCALL; break; case 1: if (Field_t_Slot_inst_get (insn) == 0) - return 4; /* simcall */ + return OPCODE_SIMCALL; break; } break; case 6: - return 118; /* rsil */ + return OPCODE_RSIL; case 7: if (Field_t_Slot_inst_get (insn) == 0) - return 189; /* waiti */ + return OPCODE_WAITI; break; } break; case 1: - return 47; /* and */ + return OPCODE_AND; case 2: - return 48; /* or */ + return OPCODE_OR; case 3: - return 49; /* xor */ + return OPCODE_XOR; case 4: switch (Field_r_Slot_inst_get (insn)) { case 0: if (Field_t_Slot_inst_get (insn) == 0) - return 100; /* ssr */ + return OPCODE_SSR; break; case 1: if (Field_t_Slot_inst_get (insn) == 0) - return 101; /* ssl */ + return OPCODE_SSL; break; case 2: if (Field_t_Slot_inst_get (insn) == 0) - return 102; /* ssa8l */ + return OPCODE_SSA8L; break; case 3: if (Field_t_Slot_inst_get (insn) == 0) - return 103; /* ssa8b */ + return OPCODE_SSA8B; break; case 4: if (Field_thi3_Slot_inst_get (insn) == 0) - return 104; /* ssai */ + return OPCODE_SSAI; break; case 8: if (Field_s_Slot_inst_get (insn) == 0) - return 13; /* rotw */ + return OPCODE_ROTW; break; case 14: - return 289; /* nsa */ + return OPCODE_NSA; case 15: - return 290; /* nsau */ + return OPCODE_NSAU; } break; case 5: switch (Field_r_Slot_inst_get (insn)) { case 1: - return 287; /* hwwitlba */ + return OPCODE_HWWITLBA; case 3: - return 283; /* ritlb0 */ + return OPCODE_RITLB0; case 4: if (Field_t_Slot_inst_get (insn) == 0) - return 281; /* iitlb */ + return OPCODE_IITLB; break; case 5: - return 282; /* pitlb */ + return OPCODE_PITLB; case 6: - return 285; /* witlb */ + return OPCODE_WITLB; case 7: - return 284; /* ritlb1 */ + return OPCODE_RITLB1; case 9: - return 288; /* hwwdtlba */ + return OPCODE_HWWDTLBA; case 11: - return 278; /* rdtlb0 */ + return OPCODE_RDTLB0; case 12: if (Field_t_Slot_inst_get (insn) == 0) - return 276; /* idtlb */ + return OPCODE_IDTLB; break; case 13: - return 277; /* pdtlb */ + return OPCODE_PDTLB; case 14: - return 280; /* wdtlb */ + return OPCODE_WDTLB; case 15: - return 279; /* rdtlb1 */ + return OPCODE_RDTLB1; } break; case 6: switch (Field_s_Slot_inst_get (insn)) { case 0: - return 93; /* neg */ + return OPCODE_NEG; case 1: - return 94; /* abs */ + return OPCODE_ABS; } break; case 8: - return 39; /* add */ + return OPCODE_ADD; case 9: - return 41; /* addx2 */ + return OPCODE_ADDX2; case 10: - return 42; /* addx4 */ + return OPCODE_ADDX4; case 11: - return 43; /* addx8 */ + return OPCODE_ADDX8; case 12: - return 40; /* sub */ + return OPCODE_SUB; case 13: - return 44; /* subx2 */ + return OPCODE_SUBX2; case 14: - return 45; /* subx4 */ + return OPCODE_SUBX4; case 15: - return 46; /* subx8 */ + return OPCODE_SUBX8; } break; case 1: @@ -8826,148 +11156,189 @@ Slot_inst_decode (const xtensa_insnbuf insn) { case 0: case 1: - return 109; /* slli */ + return OPCODE_SLLI; case 2: case 3: - return 110; /* srai */ + return OPCODE_SRAI; case 4: - return 111; /* srli */ + return OPCODE_SRLI; case 6: switch (Field_sr_Slot_inst_get (insn)) { case 0: - return 127; /* xsr.lbeg */ + return OPCODE_XSR_LBEG; case 1: - return 121; /* xsr.lend */ + return OPCODE_XSR_LEND; case 2: - return 124; /* xsr.lcount */ + return OPCODE_XSR_LCOUNT; case 3: - return 130; /* xsr.sar */ + return OPCODE_XSR_SAR; case 5: - return 133; /* xsr.litbase */ + return OPCODE_XSR_LITBASE; + case 12: + return OPCODE_XSR_SCOMPARE1; case 72: - return 22; /* xsr.windowbase */ + return OPCODE_XSR_WINDOWBASE; case 73: - return 25; /* xsr.windowstart */ + return OPCODE_XSR_WINDOWSTART; case 83: - return 266; /* xsr.ptevaddr */ + return OPCODE_XSR_PTEVADDR; case 90: - return 269; /* xsr.rasid */ + return OPCODE_XSR_RASID; case 91: - return 272; /* xsr.itlbcfg */ + return OPCODE_XSR_ITLBCFG; case 92: - return 275; /* xsr.dtlbcfg */ + return OPCODE_XSR_DTLBCFG; case 96: - return 218; /* xsr.ibreakenable */ + return OPCODE_XSR_IBREAKENABLE; case 104: - return 230; /* xsr.ddr */ + return OPCODE_XSR_DDR; case 128: - return 212; /* xsr.ibreaka0 */ + return OPCODE_XSR_IBREAKA0; case 129: - return 215; /* xsr.ibreaka1 */ + return OPCODE_XSR_IBREAKA1; case 144: - return 200; /* xsr.dbreaka0 */ + return OPCODE_XSR_DBREAKA0; case 145: - return 206; /* xsr.dbreaka1 */ + return OPCODE_XSR_DBREAKA1; case 160: - return 203; /* xsr.dbreakc0 */ + return OPCODE_XSR_DBREAKC0; case 161: - return 209; /* xsr.dbreakc1 */ + return OPCODE_XSR_DBREAKC1; case 177: - return 141; /* xsr.epc1 */ + return OPCODE_XSR_EPC1; case 178: - return 147; /* xsr.epc2 */ + return OPCODE_XSR_EPC2; case 179: - return 153; /* xsr.epc3 */ + return OPCODE_XSR_EPC3; case 180: - return 159; /* xsr.epc4 */ + return OPCODE_XSR_EPC4; + case 181: + return OPCODE_XSR_EPC5; + case 182: + return OPCODE_XSR_EPC6; + case 183: + return OPCODE_XSR_EPC7; case 192: - return 177; /* xsr.depc */ + return OPCODE_XSR_DEPC; case 194: - return 165; /* xsr.eps2 */ + return OPCODE_XSR_EPS2; case 195: - return 168; /* xsr.eps3 */ + return OPCODE_XSR_EPS3; case 196: - return 171; /* xsr.eps4 */ + return OPCODE_XSR_EPS4; + case 197: + return OPCODE_XSR_EPS5; + case 198: + return OPCODE_XSR_EPS6; + case 199: + return OPCODE_XSR_EPS7; case 209: - return 144; /* xsr.excsave1 */ + return OPCODE_XSR_EXCSAVE1; case 210: - return 150; /* xsr.excsave2 */ + return OPCODE_XSR_EXCSAVE2; case 211: - return 156; /* xsr.excsave3 */ + return OPCODE_XSR_EXCSAVE3; case 212: - return 162; /* xsr.excsave4 */ + return OPCODE_XSR_EXCSAVE4; + case 213: + return OPCODE_XSR_EXCSAVE5; + case 214: + return OPCODE_XSR_EXCSAVE6; + case 215: + return OPCODE_XSR_EXCSAVE7; + case 224: + return OPCODE_XSR_CPENABLE; case 228: - return 195; /* xsr.intenable */ + return OPCODE_XSR_INTENABLE; case 230: - return 138; /* xsr.ps */ + return OPCODE_XSR_PS; + case 231: + return OPCODE_XSR_VECBASE; case 232: - return 180; /* xsr.exccause */ + return OPCODE_XSR_EXCCAUSE; case 233: - return 221; /* xsr.debugcause */ + return OPCODE_XSR_DEBUGCAUSE; case 234: - return 235; /* xsr.ccount */ + return OPCODE_XSR_CCOUNT; case 236: - return 224; /* xsr.icount */ + return OPCODE_XSR_ICOUNT; case 237: - return 227; /* xsr.icountlevel */ + return OPCODE_XSR_ICOUNTLEVEL; case 238: - return 174; /* xsr.excvaddr */ + return OPCODE_XSR_EXCVADDR; case 240: - return 238; /* xsr.ccompare0 */ + return OPCODE_XSR_CCOMPARE0; case 241: - return 241; /* xsr.ccompare1 */ + return OPCODE_XSR_CCOMPARE1; case 242: - return 244; /* xsr.ccompare2 */ + return OPCODE_XSR_CCOMPARE2; case 244: - return 183; /* xsr.misc0 */ + return OPCODE_XSR_MISC0; case 245: - return 186; /* xsr.misc1 */ + return OPCODE_XSR_MISC1; } break; case 8: - return 106; /* src */ + return OPCODE_SRC; case 9: if (Field_s_Slot_inst_get (insn) == 0) - return 107; /* srl */ + return OPCODE_SRL; break; case 10: if (Field_t_Slot_inst_get (insn) == 0) - return 105; /* sll */ + return OPCODE_SLL; break; case 11: if (Field_s_Slot_inst_get (insn) == 0) - return 108; /* sra */ + return OPCODE_SRA; break; + case 12: + return OPCODE_MUL16U; + case 13: + return OPCODE_MUL16S; case 15: switch (Field_r_Slot_inst_get (insn)) { case 0: - return 248; /* lict */ + return OPCODE_LICT; case 1: - return 250; /* sict */ + return OPCODE_SICT; case 2: - return 249; /* licw */ + return OPCODE_LICW; case 3: - return 251; /* sicw */ + return OPCODE_SICW; case 8: - return 263; /* ldct */ + return OPCODE_LDCT; case 9: - return 262; /* sdct */ + return OPCODE_SDCT; case 14: - if (Field_t_Slot_inst_get (insn) == 0 && - Field_s_Slot_inst_get (insn) == 0) - return 231; /* rfdo */ - if (Field_t_Slot_inst_get (insn) == 1 && - Field_s_Slot_inst_get (insn) == 0) - return 232; /* rfdd */ + if (Field_t_Slot_inst_get (insn) == 0) + return OPCODE_RFDO; + if (Field_t_Slot_inst_get (insn) == 1) + return OPCODE_RFDD; break; case 15: - return 286; /* ldpte */ + return OPCODE_LDPTE; } break; } break; + case 2: + switch (Field_op2_Slot_inst_get (insn)) + { + case 8: + return OPCODE_MULL; + case 12: + return OPCODE_QUOU; + case 13: + return OPCODE_QUOS; + case 14: + return OPCODE_REMU; + case 15: + return OPCODE_REMS; + } + break; case 3: switch (Field_op2_Slot_inst_get (insn)) { @@ -8975,351 +11346,446 @@ Slot_inst_decode (const xtensa_insnbuf insn) switch (Field_sr_Slot_inst_get (insn)) { case 0: - return 125; /* rsr.lbeg */ + return OPCODE_RSR_LBEG; case 1: - return 119; /* rsr.lend */ + return OPCODE_RSR_LEND; case 2: - return 122; /* rsr.lcount */ + return OPCODE_RSR_LCOUNT; case 3: - return 128; /* rsr.sar */ + return OPCODE_RSR_SAR; case 5: - return 131; /* rsr.litbase */ + return OPCODE_RSR_LITBASE; + case 12: + return OPCODE_RSR_SCOMPARE1; case 72: - return 20; /* rsr.windowbase */ + return OPCODE_RSR_WINDOWBASE; case 73: - return 23; /* rsr.windowstart */ + return OPCODE_RSR_WINDOWSTART; case 83: - return 265; /* rsr.ptevaddr */ + return OPCODE_RSR_PTEVADDR; case 90: - return 267; /* rsr.rasid */ + return OPCODE_RSR_RASID; case 91: - return 270; /* rsr.itlbcfg */ + return OPCODE_RSR_ITLBCFG; case 92: - return 273; /* rsr.dtlbcfg */ + return OPCODE_RSR_DTLBCFG; case 96: - return 216; /* rsr.ibreakenable */ + return OPCODE_RSR_IBREAKENABLE; case 104: - return 228; /* rsr.ddr */ + return OPCODE_RSR_DDR; case 128: - return 210; /* rsr.ibreaka0 */ + return OPCODE_RSR_IBREAKA0; case 129: - return 213; /* rsr.ibreaka1 */ + return OPCODE_RSR_IBREAKA1; case 144: - return 198; /* rsr.dbreaka0 */ + return OPCODE_RSR_DBREAKA0; case 145: - return 204; /* rsr.dbreaka1 */ + return OPCODE_RSR_DBREAKA1; case 160: - return 201; /* rsr.dbreakc0 */ + return OPCODE_RSR_DBREAKC0; case 161: - return 207; /* rsr.dbreakc1 */ + return OPCODE_RSR_DBREAKC1; case 176: - return 134; /* rsr.176 */ + return OPCODE_RSR_176; case 177: - return 139; /* rsr.epc1 */ + return OPCODE_RSR_EPC1; case 178: - return 145; /* rsr.epc2 */ + return OPCODE_RSR_EPC2; case 179: - return 151; /* rsr.epc3 */ + return OPCODE_RSR_EPC3; case 180: - return 157; /* rsr.epc4 */ + return OPCODE_RSR_EPC4; + case 181: + return OPCODE_RSR_EPC5; + case 182: + return OPCODE_RSR_EPC6; + case 183: + return OPCODE_RSR_EPC7; case 192: - return 175; /* rsr.depc */ + return OPCODE_RSR_DEPC; case 194: - return 163; /* rsr.eps2 */ + return OPCODE_RSR_EPS2; case 195: - return 166; /* rsr.eps3 */ + return OPCODE_RSR_EPS3; case 196: - return 169; /* rsr.eps4 */ + return OPCODE_RSR_EPS4; + case 197: + return OPCODE_RSR_EPS5; + case 198: + return OPCODE_RSR_EPS6; + case 199: + return OPCODE_RSR_EPS7; case 208: - return 135; /* rsr.208 */ + return OPCODE_RSR_208; case 209: - return 142; /* rsr.excsave1 */ + return OPCODE_RSR_EXCSAVE1; case 210: - return 148; /* rsr.excsave2 */ + return OPCODE_RSR_EXCSAVE2; case 211: - return 154; /* rsr.excsave3 */ + return OPCODE_RSR_EXCSAVE3; case 212: - return 160; /* rsr.excsave4 */ + return OPCODE_RSR_EXCSAVE4; + case 213: + return OPCODE_RSR_EXCSAVE5; + case 214: + return OPCODE_RSR_EXCSAVE6; + case 215: + return OPCODE_RSR_EXCSAVE7; + case 224: + return OPCODE_RSR_CPENABLE; case 226: - return 190; /* rsr.interrupt */ + return OPCODE_RSR_INTERRUPT; case 228: - return 193; /* rsr.intenable */ + return OPCODE_RSR_INTENABLE; case 230: - return 136; /* rsr.ps */ + return OPCODE_RSR_PS; + case 231: + return OPCODE_RSR_VECBASE; case 232: - return 178; /* rsr.exccause */ + return OPCODE_RSR_EXCCAUSE; case 233: - return 219; /* rsr.debugcause */ + return OPCODE_RSR_DEBUGCAUSE; case 234: - return 233; /* rsr.ccount */ + return OPCODE_RSR_CCOUNT; case 235: - return 187; /* rsr.prid */ + return OPCODE_RSR_PRID; case 236: - return 222; /* rsr.icount */ + return OPCODE_RSR_ICOUNT; case 237: - return 225; /* rsr.icountlevel */ + return OPCODE_RSR_ICOUNTLEVEL; case 238: - return 172; /* rsr.excvaddr */ + return OPCODE_RSR_EXCVADDR; case 240: - return 236; /* rsr.ccompare0 */ + return OPCODE_RSR_CCOMPARE0; case 241: - return 239; /* rsr.ccompare1 */ + return OPCODE_RSR_CCOMPARE1; case 242: - return 242; /* rsr.ccompare2 */ + return OPCODE_RSR_CCOMPARE2; case 244: - return 181; /* rsr.misc0 */ + return OPCODE_RSR_MISC0; case 245: - return 184; /* rsr.misc1 */ + return OPCODE_RSR_MISC1; } break; case 1: switch (Field_sr_Slot_inst_get (insn)) { case 0: - return 126; /* wsr.lbeg */ + return OPCODE_WSR_LBEG; case 1: - return 120; /* wsr.lend */ + return OPCODE_WSR_LEND; case 2: - return 123; /* wsr.lcount */ + return OPCODE_WSR_LCOUNT; case 3: - return 129; /* wsr.sar */ + return OPCODE_WSR_SAR; case 5: - return 132; /* wsr.litbase */ + return OPCODE_WSR_LITBASE; + case 12: + return OPCODE_WSR_SCOMPARE1; case 72: - return 21; /* wsr.windowbase */ + return OPCODE_WSR_WINDOWBASE; case 73: - return 24; /* wsr.windowstart */ + return OPCODE_WSR_WINDOWSTART; case 83: - return 264; /* wsr.ptevaddr */ + return OPCODE_WSR_PTEVADDR; + case 89: + return OPCODE_WSR_MMID; case 90: - return 268; /* wsr.rasid */ + return OPCODE_WSR_RASID; case 91: - return 271; /* wsr.itlbcfg */ + return OPCODE_WSR_ITLBCFG; case 92: - return 274; /* wsr.dtlbcfg */ + return OPCODE_WSR_DTLBCFG; case 96: - return 217; /* wsr.ibreakenable */ + return OPCODE_WSR_IBREAKENABLE; case 104: - return 229; /* wsr.ddr */ + return OPCODE_WSR_DDR; case 128: - return 211; /* wsr.ibreaka0 */ + return OPCODE_WSR_IBREAKA0; case 129: - return 214; /* wsr.ibreaka1 */ + return OPCODE_WSR_IBREAKA1; case 144: - return 199; /* wsr.dbreaka0 */ + return OPCODE_WSR_DBREAKA0; case 145: - return 205; /* wsr.dbreaka1 */ + return OPCODE_WSR_DBREAKA1; case 160: - return 202; /* wsr.dbreakc0 */ + return OPCODE_WSR_DBREAKC0; case 161: - return 208; /* wsr.dbreakc1 */ + return OPCODE_WSR_DBREAKC1; + case 176: + return OPCODE_WSR_176; case 177: - return 140; /* wsr.epc1 */ + return OPCODE_WSR_EPC1; case 178: - return 146; /* wsr.epc2 */ + return OPCODE_WSR_EPC2; case 179: - return 152; /* wsr.epc3 */ + return OPCODE_WSR_EPC3; case 180: - return 158; /* wsr.epc4 */ + return OPCODE_WSR_EPC4; + case 181: + return OPCODE_WSR_EPC5; + case 182: + return OPCODE_WSR_EPC6; + case 183: + return OPCODE_WSR_EPC7; case 192: - return 176; /* wsr.depc */ + return OPCODE_WSR_DEPC; case 194: - return 164; /* wsr.eps2 */ + return OPCODE_WSR_EPS2; case 195: - return 167; /* wsr.eps3 */ + return OPCODE_WSR_EPS3; case 196: - return 170; /* wsr.eps4 */ + return OPCODE_WSR_EPS4; + case 197: + return OPCODE_WSR_EPS5; + case 198: + return OPCODE_WSR_EPS6; + case 199: + return OPCODE_WSR_EPS7; case 209: - return 143; /* wsr.excsave1 */ + return OPCODE_WSR_EXCSAVE1; case 210: - return 149; /* wsr.excsave2 */ + return OPCODE_WSR_EXCSAVE2; case 211: - return 155; /* wsr.excsave3 */ + return OPCODE_WSR_EXCSAVE3; case 212: - return 161; /* wsr.excsave4 */ + return OPCODE_WSR_EXCSAVE4; + case 213: + return OPCODE_WSR_EXCSAVE5; + case 214: + return OPCODE_WSR_EXCSAVE6; + case 215: + return OPCODE_WSR_EXCSAVE7; + case 224: + return OPCODE_WSR_CPENABLE; case 226: - return 191; /* wsr.intset */ + return OPCODE_WSR_INTSET; case 227: - return 192; /* wsr.intclear */ + return OPCODE_WSR_INTCLEAR; case 228: - return 194; /* wsr.intenable */ + return OPCODE_WSR_INTENABLE; case 230: - return 137; /* wsr.ps */ + return OPCODE_WSR_PS; + case 231: + return OPCODE_WSR_VECBASE; case 232: - return 179; /* wsr.exccause */ + return OPCODE_WSR_EXCCAUSE; case 233: - return 220; /* wsr.debugcause */ + return OPCODE_WSR_DEBUGCAUSE; case 234: - return 234; /* wsr.ccount */ + return OPCODE_WSR_CCOUNT; case 236: - return 223; /* wsr.icount */ + return OPCODE_WSR_ICOUNT; case 237: - return 226; /* wsr.icountlevel */ + return OPCODE_WSR_ICOUNTLEVEL; case 238: - return 173; /* wsr.excvaddr */ + return OPCODE_WSR_EXCVADDR; case 240: - return 237; /* wsr.ccompare0 */ + return OPCODE_WSR_CCOMPARE0; case 241: - return 240; /* wsr.ccompare1 */ + return OPCODE_WSR_CCOMPARE1; case 242: - return 243; /* wsr.ccompare2 */ + return OPCODE_WSR_CCOMPARE2; case 244: - return 182; /* wsr.misc0 */ + return OPCODE_WSR_MISC0; case 245: - return 185; /* wsr.misc1 */ + return OPCODE_WSR_MISC1; } break; + case 2: + return OPCODE_SEXT; + case 3: + return OPCODE_CLAMPS; + case 4: + return OPCODE_MIN; + case 5: + return OPCODE_MAX; + case 6: + return OPCODE_MINU; + case 7: + return OPCODE_MAXU; case 8: - return 89; /* moveqz */ + return OPCODE_MOVEQZ; case 9: - return 90; /* movnez */ + return OPCODE_MOVNEZ; case 10: - return 91; /* movltz */ + return OPCODE_MOVLTZ; case 11: - return 92; /* movgez */ + return OPCODE_MOVGEZ; + case 14: + if (Field_st_Slot_inst_get (insn) == 231) + return OPCODE_RUR_THREADPTR; + break; + case 15: + if (Field_sr_Slot_inst_get (insn) == 231) + return OPCODE_WUR_THREADPTR; + break; } break; case 4: case 5: - return 76; /* extui */ + return OPCODE_EXTUI; case 9: switch (Field_op2_Slot_inst_get (insn)) { case 0: - return 18; /* l32e */ + return OPCODE_L32E; case 4: - return 19; /* s32e */ + return OPCODE_S32E; } break; } break; case 1: - return 83; /* l32r */ + return OPCODE_L32R; case 2: switch (Field_r_Slot_inst_get (insn)) { case 0: - return 84; /* l8ui */ + return OPCODE_L8UI; case 1: - return 80; /* l16ui */ + return OPCODE_L16UI; case 2: - return 82; /* l32i */ + return OPCODE_L32I; case 4: - return 99; /* s8i */ + return OPCODE_S8I; case 5: - return 97; /* s16i */ + return OPCODE_S16I; case 6: - return 98; /* s32i */ + return OPCODE_S32I; case 7: switch (Field_t_Slot_inst_get (insn)) { case 0: - return 258; /* dpfr */ + return OPCODE_DPFR; case 1: - return 259; /* dpfw */ + return OPCODE_DPFW; case 2: - return 260; /* dpfro */ + return OPCODE_DPFRO; case 3: - return 261; /* dpfwo */ + return OPCODE_DPFWO; case 4: - return 252; /* dhwb */ + return OPCODE_DHWB; case 5: - return 253; /* dhwbi */ + return OPCODE_DHWBI; case 6: - return 256; /* dhi */ + return OPCODE_DHI; case 7: - return 257; /* dii */ + return OPCODE_DII; case 8: switch (Field_op1_Slot_inst_get (insn)) { + case 0: + return OPCODE_DPFL; + case 2: + return OPCODE_DHU; + case 3: + return OPCODE_DIU; case 4: - return 254; /* diwb */ + return OPCODE_DIWB; case 5: - return 255; /* diwbi */ + return OPCODE_DIWBI; } break; case 12: - return 245; /* ipf */ + return OPCODE_IPF; + case 13: + switch (Field_op1_Slot_inst_get (insn)) + { + case 0: + return OPCODE_IPFL; + case 2: + return OPCODE_IHU; + case 3: + return OPCODE_IIU; + } + break; case 14: - return 246; /* ihi */ + return OPCODE_IHI; case 15: - return 247; /* iii */ + return OPCODE_III; } break; case 9: - return 81; /* l16si */ + return OPCODE_L16SI; case 10: - return 88; /* movi */ + return OPCODE_MOVI; + case 11: + return OPCODE_L32AI; case 12: - return 37; /* addi */ + return OPCODE_ADDI; case 13: - return 38; /* addmi */ + return OPCODE_ADDMI; + case 14: + return OPCODE_S32C1I; + case 15: + return OPCODE_S32RI; } break; case 5: switch (Field_n_Slot_inst_get (insn)) { case 0: - return 74; /* call0 */ + return OPCODE_CALL0; case 1: - return 7; /* call4 */ + return OPCODE_CALL4; case 2: - return 6; /* call8 */ + return OPCODE_CALL8; case 3: - return 5; /* call12 */ + return OPCODE_CALL12; } break; case 6: switch (Field_n_Slot_inst_get (insn)) { case 0: - return 78; /* j */ + return OPCODE_J; case 1: switch (Field_m_Slot_inst_get (insn)) { case 0: - return 70; /* beqz */ + return OPCODE_BEQZ; case 1: - return 71; /* bnez */ + return OPCODE_BNEZ; case 2: - return 73; /* bltz */ + return OPCODE_BLTZ; case 3: - return 72; /* bgez */ + return OPCODE_BGEZ; } break; case 2: switch (Field_m_Slot_inst_get (insn)) { case 0: - return 50; /* beqi */ + return OPCODE_BEQI; case 1: - return 51; /* bnei */ + return OPCODE_BNEI; case 2: - return 53; /* blti */ + return OPCODE_BLTI; case 3: - return 52; /* bgei */ + return OPCODE_BGEI; } break; case 3: switch (Field_m_Slot_inst_get (insn)) { case 0: - return 11; /* entry */ + return OPCODE_ENTRY; case 1: switch (Field_r_Slot_inst_get (insn)) { case 8: - return 85; /* loop */ + return OPCODE_LOOP; case 9: - return 86; /* loopnez */ + return OPCODE_LOOPNEZ; case 10: - return 87; /* loopgtz */ + return OPCODE_LOOPGTZ; } break; case 2: - return 57; /* bltui */ + return OPCODE_BLTUI; case 3: - return 56; /* bgeui */ + return OPCODE_BGEUI; } break; } @@ -9328,35 +11794,35 @@ Slot_inst_decode (const xtensa_insnbuf insn) switch (Field_r_Slot_inst_get (insn)) { case 0: - return 65; /* bnone */ + return OPCODE_BNONE; case 1: - return 58; /* beq */ + return OPCODE_BEQ; case 2: - return 61; /* blt */ + return OPCODE_BLT; case 3: - return 63; /* bltu */ + return OPCODE_BLTU; case 4: - return 66; /* ball */ + return OPCODE_BALL; case 5: - return 68; /* bbc */ + return OPCODE_BBC; case 6: case 7: - return 54; /* bbci */ + return OPCODE_BBCI; case 8: - return 64; /* bany */ + return OPCODE_BANY; case 9: - return 59; /* bne */ + return OPCODE_BNE; case 10: - return 60; /* bge */ + return OPCODE_BGE; case 11: - return 62; /* bgeu */ + return OPCODE_BGEU; case 12: - return 67; /* bnall */ + return OPCODE_BNALL; case 13: - return 69; /* bbs */ + return OPCODE_BBS; case 14: case 15: - return 55; /* bbsi */ + return OPCODE_BBSI; } break; } @@ -9372,14 +11838,14 @@ Slot_inst16b_decode (const xtensa_insnbuf insn) switch (Field_i_Slot_inst16b_get (insn)) { case 0: - return 33; /* movi.n */ + return OPCODE_MOVI_N; case 1: switch (Field_z_Slot_inst16b_get (insn)) { case 0: - return 28; /* beqz.n */ + return OPCODE_BEQZ_N; case 1: - return 29; /* bnez.n */ + return OPCODE_BNEZ_N; } break; } @@ -9388,23 +11854,23 @@ Slot_inst16b_decode (const xtensa_insnbuf insn) switch (Field_r_Slot_inst16b_get (insn)) { case 0: - return 32; /* mov.n */ + return OPCODE_MOV_N; case 15: switch (Field_t_Slot_inst16b_get (insn)) { case 0: - return 35; /* ret.n */ + return OPCODE_RET_N; case 1: - return 15; /* retw.n */ + return OPCODE_RETW_N; case 2: - return 197; /* break.n */ + return OPCODE_BREAK_N; case 3: if (Field_s_Slot_inst16b_get (insn) == 0) - return 34; /* nop.n */ + return OPCODE_NOP_N; break; case 6: if (Field_s_Slot_inst16b_get (insn) == 0) - return 30; /* ill.n */ + return OPCODE_ILL_N; break; } break; @@ -9420,13 +11886,13 @@ Slot_inst16a_decode (const xtensa_insnbuf insn) switch (Field_op0_Slot_inst16a_get (insn)) { case 8: - return 31; /* l32i.n */ + return OPCODE_L32I_N; case 9: - return 36; /* s32i.n */ + return OPCODE_S32I_N; case 10: - return 26; /* add.n */ + return OPCODE_ADD_N; case 11: - return 27; /* addi.n */ + return OPCODE_ADDI_N; } return 0; } @@ -9513,6 +11979,8 @@ Slot_inst_get_field_fns[] = { 0, 0, 0, + Field_xt_wbr15_imm_Slot_inst_get, + Field_xt_wbr18_imm_Slot_inst_get, Implicit_Field_ar0_get, Implicit_Field_ar4_get, Implicit_Field_ar8_get, @@ -9556,6 +12024,8 @@ Slot_inst_set_field_fns[] = { 0, 0, 0, + Field_xt_wbr15_imm_Slot_inst_set, + Field_xt_wbr18_imm_Slot_inst_set, Implicit_Field_set, Implicit_Field_set, Implicit_Field_set, @@ -9599,6 +12069,8 @@ Slot_inst16a_get_field_fns[] = { Field_z_Slot_inst16a_get, Field_imm6_Slot_inst16a_get, Field_imm7_Slot_inst16a_get, + 0, + 0, Implicit_Field_ar0_get, Implicit_Field_ar4_get, Implicit_Field_ar8_get, @@ -9642,6 +12114,8 @@ Slot_inst16a_set_field_fns[] = { Field_z_Slot_inst16a_set, Field_imm6_Slot_inst16a_set, Field_imm7_Slot_inst16a_set, + 0, + 0, Implicit_Field_set, Implicit_Field_set, Implicit_Field_set, @@ -9685,6 +12159,8 @@ Slot_inst16b_get_field_fns[] = { Field_z_Slot_inst16b_get, Field_imm6_Slot_inst16b_get, Field_imm7_Slot_inst16b_get, + 0, + 0, Implicit_Field_ar0_get, Implicit_Field_ar4_get, Implicit_Field_ar8_get, @@ -9728,6 +12204,8 @@ Slot_inst16b_set_field_fns[] = { Field_z_Slot_inst16b_set, Field_imm6_Slot_inst16b_set, Field_imm7_Slot_inst16b_set, + 0, + 0, Implicit_Field_set, Implicit_Field_set, Implicit_Field_set, @@ -9829,10 +12307,10 @@ xtensa_isa_internal xtensa_modules = { 3 /* insn_size */, 0, 3, formats, format_decoder, length_decoder, 3, slots, - 39 /* num_fields */, - 70, operands, - 235, iclasses, - 291, opcodes, 0, + 41 /* num_fields */, + 75, operands, + 286, iclasses, + 353, opcodes, 0, 1, regfiles, NUM_STATES, states, 0, NUM_SYSREGS, sysregs, 0, diff --git a/binutils/BRANCHES b/binutils/BRANCHES index 303f0dc..f38fc91 100644 --- a/binutils/BRANCHES +++ b/binutils/BRANCHES @@ -33,3 +33,5 @@ binutils-2_14-branch binutils-2_15-branch binutils-2_16-branch binutils-2_17-branch +binutils-2_18-branch +binutils-2_19-branch diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 4394743..bee7b35 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,829 +1,1006 @@ -2007-08-28 Nick Clifton +2009-10-01 Alan Modra - * NEWS: Mention Coverity's contribution. + * addr2line.c (slurp_symtab): Don't use bfd_read_minisymbols. -2007-08-25 Ulrich Weigand +2009-09-29 Nick Clifton - * readelf.c (process_note): Recognize SPU core file notes. + * doc/binutils.texi (c++filt): Remove spurious description of + nonexistent --java command line switch for cxxfilt. -2007-08-24 Daniel Jacobowitz +2009-09-22 Richard Sandiford - * po/uk.po: Updated Ukrainian translation. + * objdump.c (disassemble_section): Use bfd_get_arch_size + instead of assuming that the address size is 32 bits. -2007-08-17 Alan Modra +2009-09-21 Alan Modra - * po/Make-in: Add --msgid-bugs-address to xgettext invocation. + * readelf.c (get_ppc_dynamic_type): Add TLSOPT. + (get_ppc64_dynamic_type): Likewise. -2007-08-12 Matthias Klose +2009-09-18 Nick Clifton - * doc/Makefile.am (AM_MAKEINFOFLAGS, TEXI2DVI): Include - $(top_srcdir)/../../bfd/doc. - * doc/Makefile.in: Regenerate. + * po/es.po: Updated Spanish translation. + * po/vi.po: Updated Vietnamese translation. -2007-08-10 Nick Clifton +2009-09-11 Nick Clifton + + * po/binutils.pot: Updated by the Translation project. + +2009-09-10 Martin Thuresson + + Update sources to compile cleanly with -Wc++-compat: + * addr2line.c (slurp_symtab): Fix casts. Introduce variable + minisyms to avoid aliasing varning. + * ar.c: Add casts. + (normalize): Use name del instead of delete. + (display_target_list,display_info_table): Change loop counter + variable a to int. + * bucomm.c: Add casts. + * debug.c: Update function to use new names. + (struct debug_baseclass): Rename member from virtual to + is_virtual. + (struct debug_type_s, struct debug_field_s, struct + debug_baseclass_s, struct debug_method_s, struct + debug_method_variant_s, struct debug_type_s): Rename struct from + avoid name collision. + * debug.h: Use new struct names. + * dwarf.c: Add casts. + (free_debug_memory): Change loop counter variable a to int. + * ieee.c: Add casts. + (enum ieee_var_kind): Move to top level. + (ieee_class_baseclass): Rename parameter virtual to is_virtual. + (ieee_class_method_var): Rename variable virtual to is_virtual. + * nm.c: Add casts. + * objcopy.c: Add casts. + (copy_archive): Rename variable delete to del. + * objdump.c: Add casts. + (dump_dwarf_section): Change loop counter variable i to int. + * prdbg.c: Add casts. + (pr_class_baseclass,tg_class_baseclass): Rename parameters virtual + to is_virtual. + * readelf.c: Add casts. + (struct ia64_unw_table_entry,struct hppa_unw_table_entry): Move to + top level. + * size.c: Add casts. + * stabs.c (parse_stab_type, parse_stab_range_type, + (parse_stab_cpp_abbrev): Rename parameter from typename to + type_name. + (parse_stab_baseclasses): Rename variable virtual to is_virtual. + * strings.c: Add casts. + * wrstabs.c (stab_class_baseclass): Rename parameter virtual to + is_virtual. + +2009-09-09 Nick Clifton + + PR 10478: + readelf.c (get_elf_section_flags): Add support for SHF_EXCLUDE and + SHF_ORDERED. + (process_section_headers): Warn about out of range sh_link + values. When displaying detailed section header information + annote the SHN_BEFORE and SHN_AFTER values. + +2009-09-08 Alan Modra + + * dwarf.c (byte_get_little_endian): Handle size of 3. + (byte_get_big_endian): Likewise. + * readelf.c (byte_put_little_endian): Likewise. + (byte_put_big_endian): Likewise. + (is_24bit_abs_reloc): New function. + (is_none_reloc): Formatting. + (apply_relocations): Use is_24bit_abs_reloc. Handle pj and xtensa + reloc peculiarity. + +2009-09-07 Jan Kratochvil + + * readelf.c (is_none_reloc , is_none_reloc ): + New. - * po/fi.po: Updated Finish translation. - * po/vi.po: Updated Vietnamese translation. +2009-09-07 Jan Kratochvil -2007-08-06 Daniel Jacobowitz + * dwarf.c (process_debug_info): Support section padding abbrev codes. - * po/POTFILES.in: Regenerate. +2009-09-07 Jan Kratochvil -2007-08-04 Alan Modra + * Makefile.am (sysdump.o): Depend on sysroff.c. + * Makefile.in: Regenerate. - PR 4888 - * objcopy.c (setup_section): Do modify section flags for ELF - STRIP_NONDEBUG (reverting part of 2007-05-30 change). Prevent - header rewrite by twiddling input section flags instead. - Simplify code setting SHT_NOBITS. +2009-09-07 Tristan Gingold -2007-07-28 Christopher Faylor + * po/binutils.pot: Regenerate. - * MAINTAINERS: Update my email address. +2009-09-05 Martin Thuresson -2007-07-26 Adam Nemet + * ieee.c (ieee_read_cxx_misc, ieee_read_cxx_class, + ieee_read_reference): Rename variables named class to cxxclass. - * readelf.c (process_archive): Also skip Irix6-style archive symbol - tables. +2009-09-04 Tristan Gingold -2007-07-24 Nick Clifton + * NEWS: Add marker for 2.20. - * readelf.c (NUM_ELEM): Remove redundant macro; replace references - to it with references to ARRAY_SIZE. - Add support for CR16. - Fix formatting. +2009-09-04 Timo Kreuzer -2007-07-19 Nick Clifton + * dlltool.c (delayimp_name): Add new global variable + (usage, long_options, main): Add new option "-y" / "--output-delaylib" + (struct mac): Add fields how_dljtab_size, how_dljtab_roff1, + how_dljtab_roff2, how_dljtab, trampoline. + (i386_dljtab): Add binary stub for x86 delay import. + (i386_trampoline): Add text assembly stub for x86 delay import. + (mtable): Add delay import data for M386 and MX86 only. + (make_delay_head): New function. + (make_one_lib_file): New arg delay creates delay-load import stub. + (gen_lib_file): New arg delay likewise. + (HOW_JTAB, HOW_JTAB_SIZE, HOW_JTAB_ROFF): New arg delay likewise. + (HOW_JTAB_ROFF2, HOW_JTAB_ROFF3): New macros for delay import. + (make_tail): Convert hard TABS embedded in strings to "\t" escapes. + * NEWS: Mention new feature. Also fix whitespace. + * doc/binutils.texi: Updated dlltool documentation. - PR binutils/4802 - * srconv.c (strip_suffix): Add const qualifier to argument. +2009-09-02 Tristan Gingold -2007-07-16 Nick Clifton + * configure.com: Do not copy makefile.vms-in to makefile.vms + * makefile.vms-in: Renamed to... + * makefile.vms: ... this usual name as it is not processed anymore. + Remove WRITE_DEBUG_OBJS (unused) and reorder object files for + objdump.exe. - * po/uk.po: New Ukrainian translation. - * configure.in (ALL_LINGUAS): Add 'uk'. - * configure: Regenerate. +2009-09-01 Ralf Wildenhues -2007-07-10 Alan Modra + * Makefile.am (arparse.o, arlex.o, sysroff.o, defparse.o) + (deflex.o, nlmheaders.o, rcparse.o, mcparse.o): Supply correct + source file name for generated files which may be in $(srcdir). + * Makefile.in: Regenerate. - * objdump.c (dump_dwarf): Correct setting of is_relocatable. +2009-09-01 H.J. Lu -2007-07-09 Roland McGrath + * version.c (print_version): Change to "Copyright 2009". - * readelf.c (get_gnu_elf_note_type): New function. - (process_note): Use it for "GNU" name. +2009-09-01 Tristan Gingold -2007-07-08 Andreas Schwab + * makefile.vms-in: Remove unused VERSION variable. Remove unused + dependencies. + * configure.com: Ported to Itanium VMS. Create build.com DCL script. - * Makefile.am (HFILES): Add dwarf.h, sysdep.h and unwind-ia64.h. - (CFILES): Add unwind-ia64.c. - Regenerate dependencies. - * Makefile.in: Regenerate. +2009-08-29 Martin Thuresson -2007-07-05 Nick Clifton - - * addr2line.c: Update copyright notice to refer to GPLv3. - * ar.c, arlex.l, arparse.y, arsup.c, arsup.h, bin2c.c, binemul.c, - binemul.h, bucomm.c, bucomm.h, budbg.h, coffdump.c, coffgrok.c, - coffgrok.h, cxxfilt.c, debug.c, debug.h, deflex.l, defparse.y, - dlltool.c, dlltool.h, dllwrap.c, dwarf.c, dwarf.h, embedspu.sh, - emul_aix.c, emul_vanilla.c, filemode.c, ieee.c, mclex.c, - mcparse.y, nlmconv.c, nlmconv.h, nlmheader.y, nm.c, objcopy.c, - objdump.c, prdbg.c, rclex.c, rcparse.y, rdcoff.c, rddbg.c, - readelf.c, rename.c, resbin.c, rescoff.c, resrc.c, resres.c, - size.c, srconv.c, stabs.c, strings.c, sysdep.h, sysdump.c, - sysinfo.y, syslex.l, unwind-ia64.c, unwind-ia64.h, version.c, - windint.h, windmc.c, windmc.h, windres.c, windres.h, winduni.c, - winduni.h, wrstabs.c: Likewise. - * is-ranlib.c, is-strip.c, maybe-ranlib.c, maybe-strip.c, - not-ranlib.c, not-strip.c, ranlib.sh, sanity.sh: Add a copyright - notice. - * NEWS: Mention that the sources are now released under GPLv3. - Add a marker for the changes that went into v2.17. - * version.c (print_version): Specify that the program is released - under version 3 of the GPL. - -2007-07-05 Kai Tietz - - * resrc.c: (read_rc_file): Add include path of user passed rc - input file. - * windres.c: (windres_add_include_dir): New. - (main): Use of windres_add_include_dir. - * windres.h: (windres_add_include_dir): Add prototype. - -2007-07-05 Alan Modra - - * doc/binutils.texi (size): Document --common. - * size.c: Make a number of vars static. Delete unnecessary - function declarations. - (show_common, common_size): New vars. - (usage): Describe --common. - (OPTION_FORMAT, OPTION_RADIX, OPTION_TARGET): Define and use. - (long_options): Add common. - (calculate_common_size): New function. - (print_berkeley_format): Add common_size to bsssize. - (sysv_one_line): New function split out from.. - (sysv_internal_printer): ..here. - (print_sysv_format): Handle display of *COM*. - (print_sizes): Call calculate_common_size. - -2007-07-05 Alan Modra - - * emul_aix.c (ar_emul_aix_internal): Rename "next" to "archive_next". - -2007-07-02 Alan Modra - - PR 4716 - * objcopy.c (filter_symbols): Correct relocatable file test. - -2007-07-02 Alan Modra + * nlmconv.c (main): Rename variable new to new_name. - * 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. +2009-08-28 H.J. Lu -2007-06-30 H.J. Lu + * Makefile.am (sysinfo$(EXEEXT_FOR_BUILD)): Replace + CFLAGS/LDFLAGS with CFLAGS_FOR_BUILD/LDFLAGS_FOR_BUILD. + (syslex.o): Likewise. + (sysinfo.o): Likewise. + (bin2c$(EXEEXT_FOR_BUILD)): Likewise. + * Makefile.in: Regenerated. - * aclocal.m4: Regenerated. - * doc/Makefile.in: Likewise. - * Makefile.in: Likewise. +2009-08-27 Dave Korn -2007-06-29 Joseph Myers + * doc/binutils.texi (--only-keep-debug): Relocate stray para here ... + (--subsystem): ... from here. - * readelf.c (display_power_gnu_attribute, process_power_specific): - New. - (process_arch_specific): Call process_power_specific. +2009-08-24 Cary Coutant -2007-06-29 Joseph Myers + * objdump.c (find_symbol_for_address): Avoid costly call to + bfd_octets_per_byte. - * readelf.c (display_mips_gnu_attribute): New. - (process_mips_specific): Call process_attributes. +2009-08-24 Ralf Wildenhues -2007-06-29 Joseph Myers + * Makefile.am (am__skiplex, am__skipyacc): New. + * Makefile.in: Regenerate. - * readelf.c (display_gnu_attribute): New. - (process_arm_specific): Rearrange as process_attributes. - (process_arm_specific): Replace by wrapper of process_attributes. +2009-08-23 Ralf Wildenhues -2007-06-28 Roland McGrath + * Makefile.am (syslex.o): Depend on sysinfo.h config.h. + * Makefile.in: Regenerate. - * 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. +2009-08-22 Ralf Wildenhues -2007-06-27 Alan Modra + * Makefile.am (AM_CPPFLAGS): Renamed from ... + (INCLUDES): ... this. + (bin2c$(EXEEXT_FOR_BUILD): Adjust rule. + (installcheck-local): Renamed from ... + (installcheck): ... this. + * Makefile.in: Regenerate. - * ar.c: Rename uses of bfd.next to bfd.archive_next throughout. - * arsup.c: Likewise. - * binemul.c: Likewise. - * objcopy.c: Likewise. - * dlltool.c: Likewise. + * Makefile.am (AUTOMAKE_OPTIONS): Remove cygnus, add no-dist and + foreign. + (MKDEP, CLEANFILES): Remove now-unneeded variables. + (DEP, DEP1, dep.sed, dep, dep-in, dep-am): Remove. + (mkdep section): Remove. + (BUILT_SOURCES): New variable, list $(GENERATED_HFILES). + (EXTRA_ar_SOURCES): New, list $(CFILES). + (syslex.o): Depend on syslex.c. + (sysinfo.o): Depend on sysinfo.c. + (arparse.h, defparse.h, nlmheaders.h rcparse.h mcparse.h): + Remove dependencies, now tracked by automake. + (srconv.o): Depend on sysroff.c. + (objdump.o, arparse.o, arlex.o, sysroff.o, defparse.o, deflex.o) + (nlmheader.o, rcparse.o, mcparse.o, rclex.o, mclex.o, dlltool.o) + (rescoff.o, nlmconv.o): Rewrite using automake-style dependency + tracking rules; only list the dependency upon the primary source + file, but no included headers. + * Makefile.in: Regenerate. -2007-06-26 Shantonu Sen + * Makefile.am (install-pdf, install-pdf-recursive, install-html) + (install-html-recursive): Remove. + * Makefile.in: Regenerate. + * doc/Makefile.am (pdf__strip_dir, install-pdf, install-pdf-am) + (html__strip_dir, install-html, install-html-am): Remove. + * doc/Makefile.in: Regenerate. - PR binutils/4693 - * Makefile.am (windres_DEPENDENCIES, windmc_DEPENDENCIES): Move - dependency on $(LIBICONV) to ... - (windres_LDADD, windmc_LDADD) ... here. * Makefile.in: Regenerate. + * aclocal.m4: Likewise. + * config.in: Likewise. + * configure: Likewise. + * doc/Makefile.in: Likewise. -2007-06-21 Alan Modra +2009-08-17 Nick Clifton - * embedspu.sh (relas): Correct sh_info parsing. + * readelf.c (is_32bit_abs_reloc): Treat R_PARISC_SECREL32 as a + 32-bit absolute reloc for the purposes of processing debug + sections. -2007-06-19 Danny Smith +2009-08-10 Daniel Gutson - * objdump.c: Include sys/stat.h. + * readelf.c (get_arm_section_type_name): Added support for + new sections headers. -2007-06-19 Kai Tietz +2009-08-03 H.J. Lu - * 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. + PR binutils/10364 + * objcopy.c (strip_main): Check return from smart_rename. + (copy_main): Likewise. + +2009-07-27 Nick Clifton + + PR 10413 + * objdump.c (dump_section_header): Skip sections that we are + ignoring. + +2009-07-25 H.J. Lu -2007-06-18 Andi Kleen + * readelf.c (guess_is_rela): Handle EM_L1OM. + (dump_relocations): Likewise. + (get_machine_name): Likewise. + (get_section_type_name): Likewise. + (get_elf_section_flags): Likewise. + (get_symbol_index_type): Likewise. + (is_32bit_abs_reloc): Likewise. + (is_32bit_pcrel_reloc): Likewise. + (is_64bit_abs_reloc): Likewise. + (is_64bit_pcrel_reloc): Likewise. + (is_none_reloc): Likewise. - * 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. +2009-07-23 Ulrich Drepper -2007-06-18 Thomas Weidenmueller + * readelf.c (get_symbol_binding): For Linux targeted files return + UNIQUE for symbols with the STB_GNU_UNIQUE binding. + * doc/binutils.texi: Document the meaning of the 'u' symbol + binding in the output of nm and objdump --syms. - * resres.c (probe_binary): Fix test for badly formatted headers. +2009-07-20 H.J. Lu -2007-06-18 Kai Tietz + * NEWS: Mention --insn-width. - * 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. + * objdump.c (insn_width): New. + (usage): Display --insn-width. + (option_values): Add OPTION_INSN_WIDTH. + (long_options): Add --insn-width. + (disassemble_bytes): Handle insn_width. + (main): Handle OPTION_INSN_WIDTH. -2007-06-18 Brian D. Watt + * doc/binutils.texi: Document --insn-width. - * embedspu.sh: Parse _SPUEAR_ symbol values as hex. +2009-07-17 Nick Clifton -2007-06-14 H.J. Lu + * dwarf.c (display_debug_lines): If do_debug_lines has not been + set then default to displaying raw .debug_line section contents. - * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd. +2009-07-14 Jan Kratochvil - * acinclude.m4: Removed. + Support unordered .debug_info references to .debug_ranges. + * dwarf.c (struct range_entry, range_entry_compar): New. + (display_debug_ranges): Remove variables last_offset, first, j, + seen_first_offset, use_debug_info and next. New variables + range_entries and range_entry_fill. Create the sorted copy + range_entries. Remove the FIXME error on detected unordered references. + * dwarf.h (debug_info ): New comment. +2009-07-14 Nick Clifton + + PR 10380 + * README: Document use of LDFLAGS="--static". + +2009-07-10 H.J. Lu + + * Makefile.am: Run "make dep-am". * Makefile.in: Regenerated. - * aclocal.m4: Likewise. - * configure: Likewise. -2007-06-11 Nathan Sidwell +2009-07-10 Tom Tromey - * dwarf.c (decode_location_expression): Add DW_OP_form_tls_address. + * Makefile.am (dwarf.o): Refer to dwarf2.h, not elf/dwarf2.h. + * Makefile.in: Rebuild. + * dwarf.c: Include dwarf2.h, not elf/dwarf2.h. -2007-06-06 Kai Tietz +2009-07-06 Tristan Gingold - 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. + * objdump.c (dump_dwarf_section): Handle .eh_frame like other dwarf + sections. + * dwarf.h (struct dwarf_section_display): Remove eh_frame field. + * dwarf.c (debug_displays): Adjust for removed field. -2007-06-06 Ben Elliston +2009-07-03 Jakub Jelinek - * doc/binutils.texi (objdump): Fix capitalisation of "PowerPC". + * dwarf.c (decode_location_expression): Handle DW_OP_stack_value + and DW_OP_implicit_value. -2007-06-05 Kai Tietz +2009-07-01 Nick Clifton - * 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. + PR 6714 + * rclex.c (handle_quotes): Do not complain about whitespace + separating quoted strings. + (rclex_string): Ignore whitespace when looking for a new opening + quote following a closing quote. -2007-06-05 Alan Modra +2009-06-27 H.J. Lu - * embedspu.sh: Handle R_SPU_PPU* relocs with no symbol. + PR binutils/10321 + * bucomm.c (get_file_size): Return -1 on error. -2007-05-30 Alan Modra + * objcopy.c (copy_file): Report empty file. - * 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. +2009-06-23 Nick Clifton -2007-05-29 Alan Modra + * dwarf.c (display_debug_lines_raw): Include the name of the + section in warning message. + (struct debug_display): Enable reloc processing for .debug_line + and .debug_ranges sections. - * embedspu.sh: Emit SPU ELF image to .data.rel.ro.speelf if - pic or pie and image needs relocs. + * readelf.c: Add --relocated-dump command line option to dump the + relocated contents of a specified section. + (request_dump): New function. + (parse_args): Use it. + (dump_section_as_bytes): Add parameter to indicate whether the + contents should be relocated. + (target_specific_reloc_handling): Add code for a R_MN10300_16 + reloc found after a R_MN10300_SYM_DIFF reloc. + (debug_apply_relocations): Rename to apply_relocations. + (get_section_contents): New function. Replaces common code found + in dump_section_as_strings and dump_section_as_bytes. + * doc/binutils.texi: Document new command line option. + * NEWS: Mention the new feature. -2007-05-24 Steve Ellcey +2009-06-22 Nick Clifton - * Makefile.in: Regenerate. - * configure: Regenerate. - * aclocal.m4: Regenerate. - * doc/Makefile.in: Regenerate. + * readelf.c (target_specific_reloc_handling): New function: + Processes relocs in a target specific manner. + (debug_apply_relocations): Use the new function. + * dwarf.c (display_debug_loc): End the dump with a blank line. + (struct debug_display): Enable reloc processing for .debug_aranges + and .debug_loc sections. -2007-05-24 Kai Tietz +2009-06-19 Nick Clifton - * rcparse.y: Join strings for elements having no side-effects in - "rc"-grammar. + * ar.c (usage): Do not use #ifdef inside _("...). + * nm.c (usage): Likewise. -2007-05-23 Kai Tietz +2009-06-18 Nick Clifton - * 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. + PR 10288 + * objdump.c (disassemble_bytes): Set the + USER_SPECIFIED_MACHINE_TYPE flag in the disassemble_info structure + if the user has invoked the -m switch. + * doc/binutils.texi: Document the additional behaviour of + objdump's -m switch for ARM targets. -2007-05-22 Paul Brook +2009-06-18 Dave Korn - * objdump.c (find_symbol_for_address): Merge section and target - specific filtering code. + * configure.in: Merge cegcc and mingw32ce target name changes from + CeGCC project. -2007-05-22 Nick Clifton +2007-12-25 Pedro Alves - * doc/binutils.texi: Use @copying around the copyright notice. + * configure.in: Add arm*-*-cegcc* and arm*-*-mingw32ce* targets. + * configure: Regenerate. -2007-05-21 Richard Sandiford +2009-06-15 Nick Clifton - * objdump.c (disassemble_bytes): Ignore disassembler_needs_relocs - for executables and shared libraries. + PR 10263 + * objdump.c (disassemble_bytes): Set the DISASSEMBLE_DATA bit in + the flags field of the disassemble_info structure if the -D switch + is in operation. -2007-05-18 Nathan Sidwell +2009-06-12 Homer Xing - * objcopy.c (strip_main): Detect identical input and output file - names. - (copy_main): Refactor tempname detection and use. + * NEWS: Mention new feature added to gprof. -2007-05-17 Nick Clifton +2009-06-12 John Reiser - * objdump.c (load_debug_section): Select bias for DWARF debug - addresses based on the flavour of the bfd. + * readelf.c (process_symbol_table): Set gnubuckets to NULL after + freeing it and before returning. -2007-05-11 Alan Modra +2009-06-12 Jakub Jelinek - PR 4479 - * objcopy.c (copy_object): Don't copy ELF program headers for - --only-keep-debug. + * readelf.c (process_symbol_table): Don't return early if + .hash/.gnu.hash is empty/unusable and not -D. -2007-05-11 Alan Modra +2009-06-09 Tom Bramer - * 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. + PR 10165 + * winduni.c (wind_MultiByteToWideChar): Do not pass MB_PRECOMPOSED + to MultiByteToWideChar when using the CP_UTF8 or CO_UTF7 types. -2007-04-28 Alan Modra +2009-06-04 Alan Modra - * prdbg.c (tg_variable): Adjust for changed demangler. - (tg_start_function): Likewise. + * strings.c (main): Delay parsing of decimal digits. -2007-04-27 Alan Modra +2009-06-04 Alan Modra - * 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". + * dep-in.sed: Don't use \n in replacement part of s command. + * Makefile.am (DEP1): LC_ALL for uniq. + Run "make dep-am". * Makefile.in: Regenerate. -2007-04-24 Nick Clifton +2009-06-03 Tristan Gingold + + * MAINTAINERS: Add myself as Mach-O maintainer. + +2009-06-01 Alan Modra + + PR 10199 + * doc/binutils.texi (nm): Correct -S description. + +2009-05-28 Nick Clifton - * srconv.c (walk_tree_type_1): Initialise dpt.dunno. + * po/da.po: Updated Danish translation. -2007-04-24 Nathan Froyd - Phil Edwards +2009-05-28 Nick Clifton - * objcopy.c (filter_symbols): Explicitly stripping a symbol - used in relocations is an error. - Retype 'keep' to bfd_boolean. + * readelf.c (display_debug_section): Do not display debug sections + with the NOBITS section type. -2007-04-24 Alan Modra +2009-05-27 Rafael Avila de Espindola + * aclocal.m4: Include ../config/plugins.m4. + * configure.in: Use AC_PLUGINS. + * configure: Regenerate. * Makefile.in: Regenerate. * doc/Makefile.in: Regenerate. -2007-04-20 Nathan Froyd - Phil Edwards - Thomas de Lellis +2009-05-27 Rafael Avila de Espindola - * 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. + * ar.c (main): Call bfd_plugin_set_program_name. + * nm.c (main): Call bfd_plugin_set_program_name. -2007-04-20 Nick Clifton +2009-05-27 Nathan Sidwell - * rclex.l: Allow underscores at the start of identifiers. + * sysdump.c (tab): Use puts rather than two printfs. -2007-04-19 Alan Modra +2009-05-26 Nick Clifton - * 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 ): 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. + * po/id.po: Updated Indonesian translation. + * po/binutils.pot: Updated template file. -2007-04-14 Steve Ellcey +2009-05-26 Rafael Avila de Espindola - * Makefile.am: Add ACLOCAL_AMFLAGS. - * configure.in: Change macro call order. - * Makefile.in: Regenerate. + * ar.c: Include plugin.h. + (main): Handle the --plugin option. + * nm.c: Include plugin.h. + (OPTION_PLUGIN): New. + (long_options): Add plugin. + (main): Handle OPTION_PLUGIN. + * NEWS: Mention the new feature. + * doc/binutils: Documement the new command line options. + * configure.in: Check for --enable-plugins. * configure: Regenerate. -2007-04-13 Nathan Sidwell +2009-05-26 Alan Modra - * Makefile.am (TOOL_PROGS): Add objcopy. - * Makefile.in: Rebuilt. + * dep-in.sed: Output one filename per line with all lines having + continuation backslash. Prefix first line with "A", following + lines with "B". + * Makefile.am (DEP): Don't use dep.sed here. + (DEP1): Run $MKDEP on single files, use dep.sed here on dependencies, + sort and uniq. + * Makefile.in: Regenerate. -2007-04-12 H.J. Lu +2009-05-25 Tristan Gingold - PR binutils/4348 - * objcopy.c (copy_object): Don't stop when there are no - sections to be copied. + * makefile.vms-in: Fix CFLAGS, add addr2line.exe target. -2007-04-10 Vladimir Prus + * configure.com: Fix it: handle alloca and define TARGET in config.h. - * NEWS: Mention disjoint histograms support in - gprof. +2009-05-22 Alan Modra -2007-04-09 Daniel Jacobowitz + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. - * dwarf.c (process_debug_info): Do not require DW_AT_frame_base for - DW_TAG_inlined_subroutine. +2009-05-12 Alan Modra -2007-04-06 Matt Thomas + * objcopy.c (set_long_section_mode): Check input_bfd is coff + before accessing coff specific fields of bfd. - * MAINTAINERS: Add myself as VAX and NetBSD support maintainer. +2009-05-09 Dave Korn -2007-04-05 Alan Modra + * MAINTAINERS: Add myself as PE/COFF co-maintainer. - PR binutils/4292 - * nm.c (print_value): Cast bfd_vma to unsigned long to suit - value_format_32bit. +2009-05-08 Kai Tietz -2007-04-02 Nick Clifton + * winduni.c (iconv_onechar): Only define when HAVE_ICONV + is defined, but not when __CYGWIN__ or _WIN32 are defined. + See wind_iconv_cp for call logic of this local funtion. - 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. +2009-05-05 Guillaume Duhamel -2007-03-28 Richard Sandiford - Phil Edwards + PR 10109 + * winduni.c: Replace test of HAVE_ICONV_H with a test of + HAVE_ICONV. + (iconv_onechar): Use ICONV_CONST instead of "const". + (wind_MultiByteToWideChar): Initialise local strings. - * doc/binutils.texi: Put the contents after the title page rather - than at the end of the document. +2009-04-30 Nick Clifton -2007-03-28 Nick Clifton + * readelf.c (dump_relocations): Display a relocation against an + ifunc symbol as if it were a function invocation. + (get_symbol_type): Handle STT_GNU_IFUNC. - * 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. +2009-04-29 Anthony Green -2007-03-28 Alan Modra + * NEWS: Tweak verilog support description. - * MAINTAINERS: Update mailing list addresses. Add myself - as PPC maintainer. +2009-04-29 Alan Modra + Denis Scherbakov -2007-03-27 Alan Modra + * readelf.c (slurp_ia64_unwind_table): Correct 64-bit unwind table + read, and merge with 32-bit case. - * embedspu.sh: Correct toe_addr quoting. +2009-04-27 Anthony Green -2007-03-27 Alan Modra + * NEWS: Mention verilog support added to bfd. - * 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. +2009-04-27 H.J. Lu -2007-03-23 Kaz Kojima + * objcopy.c (copy_object): Copy pe_opthdr before changing PE + parameters. - PR gas/3811 - * readelf.c (debug_apply_rela_addends): Do nothing for SH. +2009-04-24 Cary Coutant -2007-03-22 Joseph Myers + * dwarf.c (process_extended_line_op): Add DW_LNE_set_discriminator. + Add missing newlines to HP extensions. - * doc/binutils.texi: Include VERSION_PACKAGE when reporting - version. +2009-04-17 H.J. Lu -2007-03-16 Kai Tietz + * objcopy.c (set_pe_subsystem): Replace efi-rom with sal-rtd. + * doc/binutils.texi: Likewise. - * dlltool.c (make_one_lib_file): Use pc-relative relocation - instead of an absolute relocation for x86_64-pc-mingw32 target. +2009-04-17 H.J. Lu -2007-03-15 H.J. Lu + PR binutils/10074 + * objcopy.c: Include coff/i386.h and coff/pe.h. + (pe_file_alignment): New. + (pe_heap_commit): Likewise. + (pe_heap_reserve): Likewise. + (pe_image_base): Likewise. + (pe_section_alignment): Likewise. + (pe_stack_commit): Likewise. + (pe_stack_reserve): Likewise. + (pe_subsystem): Likewise. + (pe_major_subsystem_version): Likewise. + (pe_minor_subsystem_version): Likewise. + (set_pe_subsystem): Likewise. + (convert_efi_target): Likewise. + (command_line_switch): Add OPTION_FILE_ALIGNMENT, + OPTION_HEAP, OPTION_IMAGE_BASE, OPTION_SECTION_ALIGNMENT, + OPTION_STACK and OPTION_SUBSYSTEM. + (copy_options): Likewise. + (copy_usage): Add --file-alignment, --heap, --image-base, + --section-alignment, --stack and --subsystem. + (copy_object): Set up PE parameters. + (copy_main): Process Add OPTION_FILE_ALIGNMENT, + OPTION_HEAP, OPTION_IMAGE_BASE, OPTION_SECTION_ALIGNMENT, + OPTION_STACK and OPTION_SUBSYSTEM. Convert EFI target to + PEI target. - * Makefile.am (REPORT_BUGS_TO): Removed. - (INCLUDES): Remove -DREPORT_BUGS_TO. - * Makefile.in: Regenerated. + * NEWS: Mention --file-alignment, --heap, --image-base, + --section-alignment, --stack and --subsystem command line + options for objcopy. - * bucomm.c: Don't include bfdver.h. - * objdump.c: Likewise. - * version.c: Likewise. + * doc/binutils.texi: Document --file-alignment, --heap, + --image-base, --section-alignment, --stack and --subsystem + command line options for objcopy. - * bucomm.h: Include bfdver.h. +2009-04-15 Anthony Green - * configure.in (--with-bugurl): Removed. - * configure: Regenerated. + * MAINTAINERS: Add myself as Moxie port maintainer. - * 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. +2009-04-14 Dave Korn - * doc/binutils.texi: Include bfdver.texi instead of - config.texi. + * objcopy.c (enum long_section_name_handling): New enum type. + (enum command_line_switch): Add OPTION_LONG_SECTION_NAMES. + (copy_options[]): Add entry for --long-section-names option. + (copy_usage): Document it. + (set_long_section_mode): New subroutine. + (copy_file): Call it. + (copy_main): Accept OPTION_LONG_SECTION_NAMES and parse arg. + * doc/binutils.texi: Update objcopy documentation with details + of new option. -2007-03-13 Nick Clifton +2009-04-01 Dave Korn - * readelf.c (dump_section): Also test for SHT_REL sections when - producing the warning about unapplied relocs. + * dlltool.c (set_dll_name_from_def): Accept new second arg that + indicates if we are building DLL or EXE, and use it to add a + default suffix to the output filename when none is already present. + (def_name): Indicate we are building an EXE when calling it. + (def_library): Indicate we are building a DLL when calling it. -2007-03-07 Joseph Myers +2009-04-01 Jari Aalto - * 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. + PR 9972 + * doc/binutils.texi (strings): Document the -V alias for the + --version option. + * strings.c (usage): Likewise. -2007-03-01 Phil Edwards - Richard Sandiford +2009-03-31 Nick Clifton - * 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. + PR 9992 + * configure.in: Import Solaris specific largefile test from + bfd/configure.in. + * configure: Regenerate. -2007-03-01 Paul Brook +2009-03-30 Richard Sandiford - * MAINTAINERS: Update my entry. + * MAINTAINERS: Add self. -2007-03-01 Joseph Myers +2009-03-27 Nick Clifton - * version.c: Update copyright date. + * dwarf.c (display_debug_ranges): Add the base address to the + displayed values for 'Begin' and 'End'. -2007-03-01 Daniel Jacobowitz +2009-03-25 Ryan Mansfield - * Makefile.am (install-exec-local): Depend on $(noinst_PROGRAMS). - Adjust $(EXEEXT) handling for $(RENAMED_PROGS). - * Makefile.in, doc/Makefile.in: Regenerate. + * readelf.c (process_file_header): Don't report a corrupt string + table index if it is zero. -2007-03-01 Alan Modra +2009-03-19 H.J. Lu - * embedspu.sh: Set type and size of global program handle symbol. + * dwarf.c (dwarf_regnames): Moved before frame_need_space. + (dwarf_regnames_count): Likewise. + (frame_need_space): Return int. + (display_debug_frames): Check invalid registers. -2007-02-28 Alan Modra +2009-03-19 H.J. Lu - * Makefile.am (PROGS): Delete. - (RENAMED_PROGS): Define. Extracted from.. - (noinst_PROGRAMS): ..here. Add BUILD_MISC. - (install-exec-local): Adjust. - * Makefile.in: Regenerate. + * readelf.c (debug_apply_relocations): Check relocations + against STT_SECTION symbol. -2007-02-28 Alan Modra - - * 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. +2009-03-18 H.J. Lu + + * readelf.c (debug_apply_relocations): Allow relocations + against function symbols. -2007-02-27 Alan Modra +2009-03-18 Alan Modra - * 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. + * sysdep.h: Include alloca-conf.h instead of config.h and remove + existing #if's handling alloca. + * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. - * configure: Regenerate. -2007-02-17 Mark Mitchell - Nathan Sidwell - Vladimir Prus +2009-03-14 Richard Sandiford - * configure.in (--with-bugurl): New option. + * configure.tgt: Extend AIX 5 behavior to AIX 6 and above. + * configure.in: Likewise. * 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 +2009-03-13 H.J. Lu - * embedspu.sh: Add -W to readelf invocation. + PR binutils/9945 + * objcopy.c (copy_object): Clear HAS_RELOC when stripping all. -2007-02-06 Dave Brolley +2009-03-11 Chris Demetriou - * MAINTAINERS: Add myself as the maintainer of the MeP port. + * ar.c (deterministic): New global variable. + (main): Recognize new 'D' option, which enables 'deterministic mode'. + (usage): Document new 'D' option. + (write_archive): Set BFD_DETERMINISTIC_OUTPUT in output archive's + flags if deterministic mode was requested. + * doc/binutils.texi (ar): Document deterministic mode ('D' option). -2007-02-06 Nick Clifton +2009-03-09 H.J. Lu - 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/9933 + * objcopy.c (filter_symbols): Properly handle common symbols + in relocatable file. -2007-02-05 Dave Brolley +2009-03-06 Nick Clifton - * readelf.c (dump_relocations): Don't check for - (rtype == NULL && type == R_RELC). + * po/es.po: Updated Spanish translation. -2007-02-05 Dave Brolley +2009-03-05 Nick Clifton - * Makefile.am (readelf.o): Depends on $(INCDIR)/elf/mep.h. - * Makefile.in: Regenerated. - * Contribute the following changes: - 2003-10-29 Dave Brolley + * objdump.c (disassemble_section): If the computed next offset is + not beyond the current offset then just continue to the end. + +2009-03-04 Tristan Gingold - * configure.in: Define SKIP_ZEROES and SKIP_ZEROES_AT_END for mep. - * configure: Regenerated. + * MAINTAINERS: Add myself as VMS maintainer. - 2001-04-03 Ben Elliston +2009-03-03 Nick Clifton - * readelf.c: Include "elf/mep.h". - (guess_is_rela): Handle EM_CYGNUS_MEP. - (get_machine_name): Ditto. - (dump_relocations): Ditto. + * readelf.c: Update formatting. -2007-02-02 H.J. Lu +2009-03-03 Alan Modra - * MAINTAINERS: Add a space between H.J. and Lu. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. -2007-02-02 H.J. Lu +2009-03-03 Alan Modra - * doc/binutils.texi (objdump): Document the new addr64 option - for i386 disassembler. + * objdump.c (disassemble_section): Mask address before sign extending. -2007-02-02 H.J. Lu +2009-03-02 Sebastian Biallas - PR binutils/3945 - * configure.in (DLLTOOL_DEFAULT): New. Defined for the first PE - target. - (DLLTOOL_DEFS): Add $DLLTOOL_DEFAULT. - * configure: Regenerated. + * ieee.c (parse_ieee_ty): Add support for undocumented 'v' type. + (parse_ieee_bb): Set the filename if it has not already been + discovered. - * dlltool.c (mname): Defined with DLLTOOL_DEFAULT_XXX. +2009-03-02 Cary Coutant -2007-02-02 Nick Clifton + * readelf.c (adjust_relative_path): New function. + (struct archive_info): New type. + (setup_archive): New function. + (release_archive): New function. + (setup_nested_archive): New function. + (get_archive_member_name): New function. + (get_archive_member_name_at): New function. + (make_qualified_name): New function. + (process_archive): Factor out code for reading archive index and + long filename table to setup_archive. Add support for thin archives. - * doc/binutils.texi (objdump): Document support for disassembling - the 440 PowerPC architecture. +2009-03-02 Nick Clifton -2007-01-31 Nathan Sidwell + * po/sk.po: Updated Slovak translation. - * dwarf.c (process_debug_info): Protect against bogus length and - abbrev offsets. +2009-03-01 Ralf Wildenhues -2007-01-25 Kazu Hirata + * configure: Regenerate. - * ar.c (print_contents, extract_file): Cast the return value - of fwrite to size_t. +2009-02-23 Cary Coutant -2007-01-12 Alan Modra + * objdump.c (load_specific_debug_section): New function, from + load_debug_section. + (load_debug_section): Use load_specific_debug_section. + (dump_dwarf_section): Likewise. - * 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. +2009-02-23 Cary Coutant -2007-01-11 H.J. Lu + * readelf.c (parse_args): Select all sections explicitly for -w. - * bucomm.c (template_in_dir): Fix typo. +2009-02-09 Kai Tietz -2007-01-11 Alan Modra + * windres.c (set_endianess): Copy name without leading '-'. - * embedspu.sh: New file. - * Makefile.am (embedspu): Add rule. - * configure.in (BUILD_MISC): Add embedspu for powerpc-linux. - * Makefile.in: Regenerate. +2009-02-09 Tristan Gingold + + * NEWS: Mention feature match between objdump and readelf for dumping + dwarf info. + + * doc/binutils.texi (objdump): Document -W/--dwarf improvments to + objdump. + + * objdump.c (usage): Update documentation for -W/--dwarf. + (enum option_values): Add OPTION_DWARF. + (long_options): --dwarf can accept arguments. + (dump_dwarf_section): Also check enabled field. + (main): Option -W can accept arguments, code moved to + dwarf.c and call dwarf_select_sections_all instead. + * readelf.c (process_section_headers): Remove do_debug_lines_decoded. + (parse_args): Move code to... + * dwarf.c (dwarf_select_sections_by_letters, + dwarf_select_sections_by_names): : ...here (new functions). + (do_debug_lines_decoded): Remove and replaced by ... + (FLAG_DEBUG_LINES_RAW, FLAG_DEBUG_LINES_DECODED): ... new macros. + (display_debug_lines): Adjust for previous change. + (dwarf_select_sections_all): New function. + (debug_displays): Add initializer for enabled field. + * dwarf.h (do_debug_lines_decoded): Remove. + Add prototypes for the new functions. + (struct dwarf_section_display): Add enabled field. + +2009-02-06 Nick Clifton + + * po/vi.po: Updated Vietnamese translation. + +2009-02-03 Sandip Matte + + * readelf.c (get_machine_flags): Handle E_MIPS_MACH_XLR. + +2009-02-03 H.J. Lu + + * NEWS: Move --as-needed change to ... + * ../ld/NEWS: Here. + +2009-02-03 Carlos O'Donell + + * configure.in: AC_SUBST pdfdir. + * Makefile.am: Add install-pdf, install-pdf-am, + and install-pdf-recursive targets. + * doc/Makefile.am: Define pdf__strip_dir. Add + install-pdf and install-pdf-am targets. + * po/Make-in: Add install-pdf target. * configure: Regenerate. + * Makefile.in: Regenerate. + * doc/Makefile.in: Regenerate. + +2009-02-03 H.J. Lu + + PR binutils/9784 + * NEWS: Mention --prefix=PREFIX and --prefix-strip=LEVEL. + + * doc/binutils.texi: Document --prefix=PREFIX and + --prefix-strip=LEVEL. + + * objdump.c: Include "filenames.h". + (prefix): New. + (prefix_strip): Likewise. + (prefix_length): Likewise. + (usage): Add --prefix=PREFIX and --prefix-strip=LEVEL. + (option_values): Add OPTION_PREFIX and OPTION_PREFIX_STRIP. + (long_options): Likewise. + (show_line): Handle prefix and prefix_strip. + (main): Handle OPTION_PREFIX and OPTION_PREFIX_STRIP. -2007-01-11 Alan Modra + * readelf.c (PATH_MAX): Moved to ... + * sysdep.h: Here. - * 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. +2009-01-31 Alan Modra -2007-01-08 Kazu Hirata + * NEWS: Mention --as-needed change. - * readelf.c (get_machine_flags): Treat Fido as an architecture - by itself. +2009-01-29 Alan Modra -2007-01-08 Kai Tietz + PR 9798 + * bucomm.c (bfd_nonfatal_message): Use bfd_get_archive_filename. + (bfd_get_archive_filename): Constify param. + * bucomm.h (bfd_get_archive_filename): Update prototype. + * objcopy.c (RETURN_NONFATAL): Delete. + (copy_unknown_object): Don't call bfd_get_archive_filename for + bfd_nonfatal_message filename, instead just pass bfd. + (copy_object): Likewise. + (copy_archive, copy_file): Likewise. Expand RETURN_NONFATAL. On + bfd_close errors, do not pass the bfd to bfd_nonfatal_message. + (setup_bfd_headers): Fix error message. - * configure.in: Renamed target x86_64-*-mingw64 to - x86_64-*-mingw*. - * configure: Regenerated. +2009-01-27 Nick Clifton -2007-01-05 Alan Modra + PR 9774 + * objdump.c (disassemble_section): When the target uses signed + addresses make sure that we compute signed values. - * readelf.c (dump_section): Don't print 32-bit values, which - were done incorrectly for little-endian. Instead print bytes. +2009-01-27 Nick Clifton + + * MAINTAINERS: Remove Thiemo Seufer's name from the list of MIPS + maintainers. + +2009-01-26 Nick Clifton + + PR 9766 + * dlltool.c (xlate): When strip text after the @ sign, look for + the last one not the first one. + +2009-01-16 Alan Modra + + * configure.in (commonbfdlib): Delete. + * configure: Regenerate. -For older changes see ChangeLog-2006 +2008-01-14 Charles Wilson + + Cleanup code related to --identify option. + + * dlltool.c (file scope): Removed globals identify_ms, + identify_member_contains_symname_result, + identify_dll_name_list_head, and identify_dll_name_list_tail. + Renamed existing typedef dll_name_list_type to + dll_name_list_node_type. + Added new typedefs dll_name_list_type, symname_search_data_type, + and identify_data_type. + (identify_append_dll_name_to_list): Renamed to... + (dll_name_list_append): ...here. Changed signature to accept list + argument rather than use global. + (identify_count_dll_name_list): Renamed to... + (dll_name_list_count): ...here. Changed signature to accept list + argument rather than use global. + (identify_print_dll_name_list): Renamed to... + (dll_name_list_print): ...here. Changed signature to accept list + argument rather than use global. + (identify_free_dll_name_list): Renamed to... + (dll_name_list_free_contents): ...here. + (dll_name_list_free): New function. + (dll_name_list_create): New function. + (identify_process_section_p): Changed signature to accept + ms_style_implib argument rather than use global. + (identify_member_contains_symname): Expect incoming void * data to + be symname_search_data_type. + (identify_dll_for_implib): Use new functions dll_name_list_create + and dll_name_list_free. Use new types symname_search_data_type + and identify_data_type to communicate with search routines. + (identify_search_section): Expect incoming void * data to be + identify_data_type. Use its contents rather than global + variables. + +2009-01-13 Charles Wilson + + Add --identify-strict option. Handle ms-style implibs: + + * dlltool.c (file scope): Added new globals identify_ms and + identify_strict. New typedef dll_name_list_type, and globals + identify_dll_name_list_head and identify_dll_name_list_tail. Added + new global identify_member_contains_symname_result. + (identify_append_dll_name_to_list): New function. + (identify_count_dll_name_list): New function. + (identify_print_dll_name_list): New function. + (identify_free_dll_name_list): New function. + (identify_search_archive): Changed signature to take function + pointer to operation to apply to each member, and data to pass on + to that function. + (identify_search_member): Changed signature to accept user data + from caller. + (identify_member_contains_symname): New function. + (identify_dll_for_implib): Rewrite. Now determines whether implib + is ms- or binutils- style, before searching sections for + dllname. Allows multiple dllnames. + (identify_process_section_p): Search alternate section for dllname + when implib is ms-style. + (identify_search_section): Add additional conditions to excludes + candidate sections from consideration. + (usage): Added --identify-strict. + (long_options): Added --identify-strict. + (main): Handle --identify-strict option. + * doc/binutils.texi: Document --identify-strict option. + * NEWS: Document --identify and --identify-strict options. + +2009-01-13 Alan Modra + + PR 7034 + * doc/binutils.texi (objdump -R): Note effect of -d or -D. + +2009-01-13 Alan Modra + + * objdump.c (disassemble_section): Don't assume non-instruction + data if object symbol at given address is in different section. + +2009-01-12 Kai Tietz + + * dlltool.c (create_for_pep): New. + (flush_page): Use create_for_pep instead of using + macro DLLTOOL_MX86_64 clause. + (generate_idata_ofile): Likewise. + (make_one_lib_file): Likewise. + (make_head): Likewise. + (make_tail): Likewise. + (main): Initialize create_for_pep. + +2009-01-08 Kai Tietz + + * dlltool.c (use_nul_prefixed_import_tables): New. + (make_head): Make prefix leading zero prefix element for + idata$4 and idata$5 dependent to new flag. + (usage): Add new option --use-nul-prefixed-import-tables. + (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES): New. + (long_options): Add --use-nul-prefixed-import-tables. + (main): Likewise. + * doc/binutils.texi: Add new option documentation for + --use-nul-prefixed-import-tables. + * NEWS: Add new option. + +2009-01-06 Kai Tietz + + * windres.c (set_endianess): Get architecture name + for internal target names like "pe-arm-wince-little". + (find_arch_match): New helper. + * ChangeLog: Reset it. + * ChangeLog-2008: Moved old ChangeLog. + +For older changes see ChangeLog-2008 Local Variables: mode: change-log diff --git a/binutils/ChangeLog-2007 b/binutils/ChangeLog-2007 new file mode 100644 index 0000000..605c233 --- /dev/null +++ b/binutils/ChangeLog-2007 @@ -0,0 +1,1165 @@ +2007-12-24 Nick Clifton + + * po/ru.po: Updated Russian translation. + +2007-12-22 H.J. Lu + + * doc/binutils.texi: Document the new intel-mnemonic and + intel-mnemonic options for i386 disassembler. + +2007-12-07 Bob Wilson + + * readelf.c (is_32bit_pcrel_reloc): Add Xtensa. + +2007-12-04 Alan Modra + + * readelf.c (is_32bit_abs_reloc, is_32bit_pcrel_reloc): Add SPU. + +2007-11-29 Mark Shinwell + + * readelf.c (get_machine_flags): Handle Loongson-2E and -2F + flags. + +2007-11-26 Alan Modra + + * cxxfilt.c (demangle_it): Don't call printf without format string. + +2007-11-21 Hans-Peter Nilsson + + * dwarf.c (display_debug_loc): Cast section_end - start to long + for output format. + +2007-11-20 Nick Clifton + + * dwarf.c (display_debug_loc): Issue a warning if there are bytes + at the end of the .debug_loc section which are not referenced by + any attribute in the .debug_info section. + +2007-11-19 Nick Clifton + + * readelf.c (is_32bit_abs_reloc): Add support for NIOS relocs. + (is_64bit_abs_reloc): Add support for HPPA relocs. + (is_16bit_abs_reloc): Add support for NIOS relocs. + +2007-11-17 Thiemo Seufer + + * readelf.c (display_mips_gnu_attribute): Recognize -mips32r2 -mfp64 + objects. + +2007-11-16 Nick Clifton + + * dwarf.c (process_extended_line_op): Add cases for HP extensions + to the line ops. Mention if an unknown op code is in the user + defined range. + (decode_location_expression): Add cases for HP extensions, the + DW_OP_GNU_uninit extension and the DW_OP_call_frame_cfa and + DW_OP_bit_piece DWARF3 operators. + (read_and_display_attr): Correct list of attributes which can + reference a location list. + (read_and_display_attr_value): Add cases for DWARF3 values and HP + extensions. + Correct list of attributes which can reference a location list. + (get_AT_name): Add cases for DWARF3 values and HP and PGI + extensions. + +2007-11-07 Karl Berry + + * doc/binutils.texi: Update to FDL 1.2. + (Top): consistent punctuation in menu entries. + (Index): Rename from Binutils Index. + * doc/fdl.texi: Update from http://www.gnu.org/licenses/fdl.texi. + +2007-10-31 Nick Clifton + + * dwarf.c (is_relocatable): Remove definition. + (display_debug_frames): Remove check in is_relocatable. + * dwarf.h (is_relocatable): Remove declaration. + * objdump.c (is_relocatable): New static definition. + * readelf.c (dump_relocations): Make the function void. + (is_32bit_abs_reloc): Add support for x86, Arc, Arm, D10V, Dlx, + OR32 and Score. + (is_32bit_pcrel_reloc): Add support for x86 and Arm. + (is_16bit_abs_reloc): Add support for D10V. + (debug_apply_rela_addends): Rename to debug_apply_relocations. + Add code to support rel relocations. + (load_debug_section): Fix call to debug_apply_relocations. + (get_file_header): Remove setting of is_relocatable. + +2007-10-31 Alan Modra + + * readelf.c (debug_apply_rela_addends): Clarify FIXME. + +2007-10-29 Nick Clifton + + * readelf.c (is_32bit_abs_reloc): Add knowledge of reloc used by + IA64. + (is_64bit_abs_reloc): Likewise. + +2007-10-28 Nick Clifton + + * dwarf.c (process_debug_info): Check for corrupt lengths. + * readelf.c (get_reloc_type): New function. Returns the reloc + number extracted from the info field of a reloc. + (get_reloc_symindex): New function. Returns the symbol index + extracted from the info field of a reloc. + (dump_relocations): Use the new functions. + (slurp_ia64_unwind_table): Use the new functions. + (slurp_hppa_unwind_table): Use the new functions. + (dump_section_as_bytes): Use the new functions. + (get_reloc_size): Delete function. + (is_32bit_abs_reloc): New function. Determines if a given reloc + type is a 32-bit absolute relocation. + (is_32bit_pcrel_reloc): New function. Like is_32bit_abs_reloc but + for pc-relative relocations. + (is_64bit_abs_reloc): New function. Like is_32bit_abs_reloc but + for 64-bit absolute relocations. + (is_16bit_abs_reloc): New function. Like is_32bit_abs_reloc but + for 32-bit absolute relocations. + (debug_apply_rela_addends): Use the new functions. Skip and warn + about any unrecognised relocations. + +2007-10-26 Karl Berry + + * doc/binutils.texi: Move top stuff to the top. + Use @direntry/@dircategory, format entries to play nicely with + others. + Avoid duplicate copying strings. + Don't misspell "Texinfo". + +2007-10-25 Daniel Jacobowitz + + * readelf.c (display_power_gnu_attribute): Add support for + Tag_GNU_Power_ABI_Vector. + +2007-10-25 Carlos Eduardo Seo + + * readelf.c (get_note_type): Handle NT_PPC_VMX. + +2007-10-24 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * po/POTFILES.in: Regenerate. + +2007-10-24 Alan Modra + + * strings.c (print_strings): Don't use %L, use %ll in printf + format strings. + +2007-10-24 Tristan Gingold + Alan Modra + + * readelf.c (process_program_headers): Use dynamic segment unless + dynamic section is found. + +2007-10-16 Bob Wilson + + * doc/binutils.texi (objcopy, strip): Replace hyphens with em-dashes. + (objdump, strip, c++filt): Correct punctuation for "e.g." and "i.e." + and change to spell out "for example" in two places. + +2007-10-16 Nick Clifton + + * configure.in: Build windows tools for --enable-targets=all. + * configure: Regenerate. + +2007-10-15 Alan Modra + + * objdump.c (print_line): Check fwrite return value. + * srconv.c (checksum, wr_tr, wr_cs): Likewise. + * sysdump.c (fillup): Return zero on getc or fread EOF. Return count + read. + +2007-10-10 Jim Blandy + + * dwarf.c (process_debug_info): Line up section offsets of + attribute values with those of dies. + (read_and_display_attr): Reduce spacing here. + + * dwarf.c (display_debug_lines): Print the offset of each line + number program header. + +2007-10-09 H.J. Lu + + PR binutils/4476 + * readelf.c (print_dynamic_symbol): New. + (process_symbol_table): Handle DT_GNU_HASH for dynamic symbols. + +2007-10-08 Carlos O'Donell + + * resrc.c (read_rc_file): Rename e to edit, and c to dir. + Pass dir to windres_add_include_dir. Add comments. + (close_input_stream): Check pclose error, and call fatal if + the preprocessor failed. + * windres.c (windres_add_include_dir): Assert that p is non-NULL, + and not an empty string. + +2007-10-04 Nick Clifton + + PR binutils/5098 + * dlltool.c: Fix spelling typos. + +2007-10-03 Masaki Muranaka + + * readelf.c (dump_section_as_strings): Use %6tx instead of %6zx. + +2007-09-25 Thien-Thi Nguyen + + * MAINTAINERS: Fix typo. + +2007-09-17 Shen Feng + + * readelf.c (do_archive_index): New. + (options): Add -c and --archive-index option. + (usage): Add -c option. + (parse_args): Add c option parsing. + (process_archive): Dump archive index. + * NEWS: Mention the new feature. + * doc/binutils.texi: Document the new feature. + +2007-09-17 Nick Clifton + + * po/es.po: Updated Spanish translation. + +2007-09-17 Nick Clifton + + * doc/binutils.texi (objdump): Describe the output of the --syms + option in more detail. + +2007-09-17 Alon Bar-Lev + + PR binutils/4987 + * resrc.c: (read_rc_file): Move 'filename' default initialization + to start of function. + +2007-08-31 Michael Meissner + Dwarakanath Rajagopal + + * NEWS: Add note about SSE5 being added on i386. + +2007-09-13 Alan Modra + Zhou Drangon + + * nm.c (value_format_64bit, set_print_radix, print_value): Handle + BFD_HOST_64BIT_LONG_LONG. + * readelf.c (print_dec_vma): Don't define if BFD_HOST_64BIT_LONG_LONG. + (print_vma): Handle BFD_HOST_64BIT_LONG_LONG. + (dump_relocations): Likewise. Expand _bfd_int64_low in a + number of places. + +2007-09-11 Kai Tietz + + * rcparse.y: (string_data): Removed ill token removal. + +2007-09-10 Alan Modra + + PR 5011 + * readelf.c (process_version_sections): Don't read past end of + various section buffers. + +2007-08-31 H.J. Lu + + * Makefile.am (INCLUDES): Remove -D_GNU_SOURCE. + * Makefile.in: Regenerated. + + * sysdep.h: Include "config.h" first. + +2007-08-31 Nick Clifton + + * po/sk.po: New Slovakian translation. + * configure.in (LINGUAS): Add sk. + * configure: Regenerate. + +2007-08-30 Nick Clifton + + * readelf.c (dump_type): New type used to classify the kinds of + dump requested by the user. + (dump_sects, cmdline_dump_sects): Use the new type. + (options): Add --string-dump option. + (request_dump): Rename to request_dump_bynumber. Use dump_type. + (request_dump_byname): Use dump_type. + (parse_args): Parse --string-dump option. + (process_section_headers): Fix calls to request_dump. + (initialise_dumps_byname): Likewise. + (dump_section): Rename to dump_section_as_bytes. + (dump_section_as_strings): New function. Display the contents of + a section as printable strings. + (process_section_contents): String dump the section if requested. + (process_object): Use dump_type. + (main): Likewise. + * Makefile.am: Add dependency for readelf.c on safe-ctype.h. + * Makefile.in: Regenerate. + * NEWS: Mention the new feature. + * doc/binutils.texi: Document the new feature. + +2007-08-30 Nathan Sidwell + + * bucomm.c (bfd_nonfatal_message): New. + * bucomm.h (bfd_nonfatal_message): Declare. + * objcopy.c (RETURN_NONFATAL): Take BFD not NAME, use + bfd_nonfatal_message. + (copy_unknown_object): Adjust bfd_nonfatal and RETURN_NONFATAL + calls, or replace with bfd_nonfatal_message calls as appropriate. + (copy_object, copy_archive, copy_file, setup_section, + copy_section, write_debugging_info): Likewise. + +2007-08-28 Nick Clifton + + * NEWS: Mention Coverity's contribution. + +2007-08-25 Ulrich Weigand + + * readelf.c (process_note): Recognize SPU core file notes. + +2007-08-24 Daniel Jacobowitz + + * configure.in: Install embedspu on powerpc*-*-eabi* also. + * configure: Regenerated. + +2007-08-24 Daniel Jacobowitz + + * po/uk.po: Updated Ukrainian translation. + +2007-08-22 Ben Elliston + + * doc/binutils.texi (objdump): Document -Mppcps. + +2007-08-17 Alan Modra + + * po/Make-in: Add --msgid-bugs-address to xgettext invocation. + +2007-08-16 H.J. Lu + + * readelf.c: Revert last change. + +2007-08-16 H.J. Lu + + * readelf.c (get_segment_type): Change PT_GNU_STACK to + PT_GNU_ATTR. + +2007-08-12 Daniel Jacobowitz + + * NEWS: Add a marker for the 2.18 features. + +2007-08-12 Matthias Klose + + * doc/Makefile.am (AM_MAKEINFOFLAGS, TEXI2DVI): Include + $(top_srcdir)/../../bfd/doc. + * doc/Makefile.in: Regenerate. + +2007-08-10 M R Swami Reddy + + * MAINTAINERS: Add myself as CR16 support maintainer and + update myself as CRX support maintainer. + +2007-08-10 Nick Clifton + + * po/fi.po: Updated Finnish translation. + * po/vi.po: Updated Vietnamese translation. + +2007-08-10 Kai Tietz + + * doc/binutils.texi: (windmc): Correct incorrect desciption. + +2007-08-04 Alan Modra + + PR 4888 + * objcopy.c (setup_section): Do modify section flags for ELF + STRIP_NONDEBUG (reverting part of 2007-05-30 change). Prevent + header rewrite by twiddling input section flags instead. + Simplify code setting SHT_NOBITS. + +2007-07-28 Christopher Faylor + + * MAINTAINERS: Update my email address. + +2007-07-26 Adam Nemet + + * readelf.c (process_archive): Also skip Irix6-style archive symbol + tables. + +2007-07-24 Nick Clifton + + * readelf.c (NUM_ELEM): Remove redundant macro; replace references + to it with references to ARRAY_SIZE. + Add support for CR16. + Fix formatting. + +2007-07-19 Nick Clifton + + PR binutils/4802 + * srconv.c (strip_suffix): Add const qualifier to argument. + +2007-07-16 Nick Clifton + + * po/uk.po: New Ukrainian translation. + * configure.in (ALL_LINGUAS): Add 'uk'. + * configure: Regenerate. + +2007-07-10 Alan Modra + + * objdump.c (dump_dwarf): Correct setting of is_relocatable. + +2007-07-09 Roland McGrath + + * readelf.c (get_gnu_elf_note_type): New function. + (process_note): Use it for "GNU" name. + +2007-07-08 Andreas Schwab + + * Makefile.am (HFILES): Add dwarf.h, sysdep.h and unwind-ia64.h. + (CFILES): Add unwind-ia64.c. + Regenerate dependencies. + * Makefile.in: Regenerate. + +2007-07-05 Nick Clifton + + * addr2line.c: Update copyright notice to refer to GPLv3. + * ar.c, arlex.l, arparse.y, arsup.c, arsup.h, bin2c.c, binemul.c, + binemul.h, bucomm.c, bucomm.h, budbg.h, coffdump.c, coffgrok.c, + coffgrok.h, cxxfilt.c, debug.c, debug.h, deflex.l, defparse.y, + dlltool.c, dlltool.h, dllwrap.c, dwarf.c, dwarf.h, embedspu.sh, + emul_aix.c, emul_vanilla.c, filemode.c, ieee.c, mclex.c, + mcparse.y, nlmconv.c, nlmconv.h, nlmheader.y, nm.c, objcopy.c, + objdump.c, prdbg.c, rclex.c, rcparse.y, rdcoff.c, rddbg.c, + readelf.c, rename.c, resbin.c, rescoff.c, resrc.c, resres.c, + size.c, srconv.c, stabs.c, strings.c, sysdep.h, sysdump.c, + sysinfo.y, syslex.l, unwind-ia64.c, unwind-ia64.h, version.c, + windint.h, windmc.c, windmc.h, windres.c, windres.h, winduni.c, + winduni.h, wrstabs.c: Likewise. + * is-ranlib.c, is-strip.c, maybe-ranlib.c, maybe-strip.c, + not-ranlib.c, not-strip.c, ranlib.sh, sanity.sh: Add a copyright + notice. + * NEWS: Mention that the sources are now released under GPLv3. + Add a marker for the changes that went into v2.17. + * version.c (print_version): Specify that the program is released + under version 3 of the GPL. + +2007-07-05 Kai Tietz + + * resrc.c: (read_rc_file): Add include path of user passed rc + input file. + * windres.c: (windres_add_include_dir): New. + (main): Use of windres_add_include_dir. + * windres.h: (windres_add_include_dir): Add prototype. + +2007-07-05 Alan Modra + + * doc/binutils.texi (size): Document --common. + * size.c: Make a number of vars static. Delete unnecessary + function declarations. + (show_common, common_size): New vars. + (usage): Describe --common. + (OPTION_FORMAT, OPTION_RADIX, OPTION_TARGET): Define and use. + (long_options): Add common. + (calculate_common_size): New function. + (print_berkeley_format): Add common_size to bsssize. + (sysv_one_line): New function split out from.. + (sysv_internal_printer): ..here. + (print_sysv_format): Handle display of *COM*. + (print_sizes): Call calculate_common_size. + +2007-07-05 Alan Modra + + * emul_aix.c (ar_emul_aix_internal): Rename "next" to "archive_next". + +2007-07-02 Alan Modra + + PR 4716 + * objcopy.c (filter_symbols): Correct relocatable file test. + +2007-07-02 Alan Modra + + * 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. + +2007-06-30 H.J. Lu + + * aclocal.m4: Regenerated. + * doc/Makefile.in: Likewise. + * Makefile.in: Likewise. + +2007-06-29 Joseph Myers + + * readelf.c (display_power_gnu_attribute, process_power_specific): + New. + (process_arch_specific): Call process_power_specific. + +2007-06-29 Joseph Myers + + * readelf.c (display_mips_gnu_attribute): New. + (process_mips_specific): Call process_attributes. + +2007-06-29 Joseph Myers + + * 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 + + * 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 + + * 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 + + 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 + + * embedspu.sh (relas): Correct sh_info parsing. + +2007-06-19 Danny Smith + + * objdump.c: Include sys/stat.h. + +2007-06-19 Kai Tietz + + * 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 + + * 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 + + * resres.c (probe_binary): Fix test for badly formatted headers. + +2007-06-18 Kai Tietz + + * 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 + + * embedspu.sh: Parse _SPUEAR_ symbol values as hex. + +2007-06-14 H.J. Lu + + * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd. + + * acinclude.m4: Removed. + + * Makefile.in: Regenerated. + * aclocal.m4: Likewise. + * configure: Likewise. + +2007-06-11 Nathan Sidwell + + * dwarf.c (decode_location_expression): Add DW_OP_form_tls_address. + +2007-06-06 Kai Tietz + + 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. + +2007-06-06 Ben Elliston + + * doc/binutils.texi (objdump): Fix capitalisation of "PowerPC". + +2007-06-05 Kai Tietz + + * 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 + + * embedspu.sh: Handle R_SPU_PPU* relocs with no symbol. + +2007-05-30 Alan Modra + + * 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. + +2007-05-29 Alan Modra + + * embedspu.sh: Emit SPU ELF image to .data.rel.ro.speelf if + pic or pie and image needs relocs. + +2007-05-24 Steve Ellcey + + * Makefile.in: Regenerate. + * configure: Regenerate. + * aclocal.m4: Regenerate. + * doc/Makefile.in: Regenerate. + +2007-05-24 Kai Tietz + + * rcparse.y: Join strings for elements having no side-effects in + "rc"-grammar. + +2007-05-23 Kai Tietz + + * 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. + +2007-05-22 Paul Brook + + * objdump.c (find_symbol_for_address): Merge section and target + specific filtering code. + +2007-05-22 Nick Clifton + + * doc/binutils.texi: Use @copying around the copyright notice. + +2007-05-21 Richard Sandiford + + * objdump.c (disassemble_bytes): Ignore disassembler_needs_relocs + for executables and shared libraries. + +2007-05-18 Nathan Sidwell + + * objcopy.c (strip_main): Detect identical input and output file + names. + (copy_main): Refactor tempname detection and use. + +2007-05-17 Nick Clifton + + * objdump.c (load_debug_section): Select bias for DWARF debug + addresses based on the flavour of the bfd. + +2007-05-11 Alan Modra + + PR 4479 + * objcopy.c (copy_object): Don't copy ELF program headers for + --only-keep-debug. + +2007-05-11 Alan Modra + + * 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. + +2007-04-28 Alan Modra + + * prdbg.c (tg_variable): Adjust for changed demangler. + (tg_start_function): Likewise. + +2007-04-27 Alan Modra + + * 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. + +2007-04-24 Nick Clifton + + * srconv.c (walk_tree_type_1): Initialise dpt.dunno. + +2007-04-24 Nathan Froyd + Phil Edwards + + * objcopy.c (filter_symbols): Explicitly stripping a symbol + used in relocations is an error. + Retype 'keep' to bfd_boolean. + +2007-04-24 Alan Modra + + * Makefile.in: Regenerate. + * doc/Makefile.in: Regenerate. + +2007-04-20 Nathan Froyd + Phil Edwards + Thomas de Lellis + + * 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. + +2007-04-20 Nick Clifton + + * rclex.l: Allow underscores at the start of identifiers. + +2007-04-19 Alan Modra + + * 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 ): 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. + +2007-04-14 Steve Ellcey + + * Makefile.am: Add ACLOCAL_AMFLAGS. + * configure.in: Change macro call order. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2007-04-13 Nathan Sidwell + + * Makefile.am (TOOL_PROGS): Add objcopy. + * Makefile.in: Rebuilt. + +2007-04-12 H.J. Lu + + PR binutils/4348 + * objcopy.c (copy_object): Don't stop when there are no + sections to be copied. + +2007-04-10 Vladimir Prus + + * NEWS: Mention disjoint histograms support in + gprof. + +2007-04-09 Daniel Jacobowitz + + * dwarf.c (process_debug_info): Do not require DW_AT_frame_base for + DW_TAG_inlined_subroutine. + +2007-04-06 Matt Thomas + + * MAINTAINERS: Add myself as VAX and NetBSD support maintainer. + +2007-04-05 Alan Modra + + PR binutils/4292 + * nm.c (print_value): Cast bfd_vma to unsigned long to suit + value_format_32bit. + +2007-04-02 Nick Clifton + + 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 + Phil Edwards + + * doc/binutils.texi: Put the contents after the title page rather + than at the end of the document. + +2007-03-28 Nick Clifton + + * 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 + + * MAINTAINERS: Update mailing list addresses. Add myself + as PPC maintainer. + +2007-03-27 Alan Modra + + * embedspu.sh: Correct toe_addr quoting. + +2007-03-27 Alan Modra + + * 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 + + PR gas/3811 + * readelf.c (debug_apply_rela_addends): Do nothing for SH. + +2007-03-22 Joseph Myers + + * doc/binutils.texi: Include VERSION_PACKAGE when reporting + version. + +2007-03-16 Kai Tietz + + * dlltool.c (make_one_lib_file): Use pc-relative relocation + instead of an absolute relocation for x86_64-pc-mingw32 target. + +2007-03-15 H.J. Lu + + * Makefile.am (REPORT_BUGS_TO): Removed. + (INCLUDES): Remove -DREPORT_BUGS_TO. + * Makefile.in: Regenerated. + + * bucomm.c: Don't include bfdver.h. + * objdump.c: Likewise. + * version.c: Likewise. + + * bucomm.h: Include bfdver.h. + + * configure.in (--with-bugurl): Removed. + * configure: Regenerated. + + * 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 + + * readelf.c (dump_section): Also test for SHT_REL sections when + producing the warning about unapplied relocs. + +2007-03-07 Joseph Myers + + * 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 + Richard Sandiford + + * 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 + + * MAINTAINERS: Update my entry. + +2007-03-01 Joseph Myers + + * version.c: Update copyright date. + +2007-03-01 Daniel Jacobowitz + + * 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 + + * embedspu.sh: Set type and size of global program handle symbol. + +2007-02-28 Alan Modra + + * 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 + + * 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. + +2007-02-27 Alan Modra + + * 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. + +2007-02-17 Mark Mitchell + Nathan Sidwell + Vladimir Prus + + * 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 + + * embedspu.sh: Add -W to readelf invocation. + +2007-02-06 Dave Brolley + + * MAINTAINERS: Add myself as the maintainer of the MeP port. + +2007-02-06 Nick Clifton + + 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. + +2007-02-05 Dave Brolley + + * readelf.c (dump_relocations): Don't check for + (rtype == NULL && type == R_RELC). + +2007-02-05 Dave Brolley + + * Makefile.am (readelf.o): Depends on $(INCDIR)/elf/mep.h. + * Makefile.in: Regenerated. + * Contribute the following changes: + 2003-10-29 Dave Brolley + + * configure.in: Define SKIP_ZEROES and SKIP_ZEROES_AT_END for mep. + * configure: Regenerated. + + 2001-04-03 Ben Elliston + + * 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 + + * MAINTAINERS: Add a space between H.J. and Lu. + +2007-02-02 H.J. Lu + + * doc/binutils.texi (objdump): Document the new addr64 option + for i386 disassembler. + +2007-02-02 H.J. Lu + + 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 + + * doc/binutils.texi (objdump): Document support for disassembling + the 440 PowerPC architecture. + +2007-01-31 Nathan Sidwell + + * dwarf.c (process_debug_info): Protect against bogus length and + abbrev offsets. + +2007-01-25 Kazu Hirata + + * ar.c (print_contents, extract_file): Cast the return value + of fwrite to size_t. + +2007-01-12 Alan Modra + + * 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 + + * bucomm.c (template_in_dir): Fix typo. + +2007-01-11 Alan Modra + + * embedspu.sh: New file. + * Makefile.am (embedspu): Add rule. + * configure.in (BUILD_MISC): Add embedspu for powerpc-linux. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2007-01-11 Alan Modra + + * 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 + + * readelf.c (get_machine_flags): Treat Fido as an architecture + by itself. + +2007-01-08 Kai Tietz + + * configure.in: Renamed target x86_64-*-mingw64 to + x86_64-*-mingw*. + * configure: Regenerated. + +2007-01-05 Alan Modra + + * 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-2006 + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff --git a/binutils/ChangeLog-2008 b/binutils/ChangeLog-2008 new file mode 100644 index 0000000..df6af6c --- /dev/null +++ b/binutils/ChangeLog-2008 @@ -0,0 +1,874 @@ +2008-12-23 Jon Beniston + + * MAINTAINERS: Added Jon Beniston as maintainer for LM32 port. + * readelf.c: Add support for LM32 machine number. + +2008-12-23 Kai Tietz + + * rcparse.y (rcdata_data): Allow empty comma elements. + +2008-12-23 Nick Clifton + + * objdump.c (dump_reloc_set): Remove STT_IFUNC support. + * readelf.c (dump_relocations): Likewise. + (get_symbol_type): Likewise. + * doc/binutils.texi: Likewise. + +2008-12-18 Ralf Wildenhues + + * configure: Regenerate. + +2008-12-09 Tom Tromey + + * srconv.c (wr_hd): Add parens to placate gcc 4.4. + +2008-12-09 Andrew Stubbs + + * readelf.c (arm_attr_tag_CPU_arch): Add "v6-M" and "v6S-M". + (arm_attr_tag_WMMX_arch): Add "WMMXv2". + (arm_attr_tag_NEON_arch): Rename to ... + (arm_attr_tag_Advanced_SIMD_arch): ... official name. + (arm_attr_tag_ABI_PCS_config): Rename to ... + (arm_attr_tag_PCS_config): ... official name. + (arm_attr_tag_ABI_PCS_RO_DATA): Rename to ... + (arm_attr_tag_ABI_PCS_RO_data): ... official name. + (arm_attr_tag_ABI_FP_denormal): Add "Sign only". + (arm_attr_tag_CPU_unaligned_access): New array. + (arm_attr_tag_T2EE_use): New array. + (arm_attr_tag_Virtualization_use): New array. + (arm_attr_tag_MPextension_use): New array. + (arm_attr_publ): NEON_arch -> Advanced_SIMD_arch. + ABI_PCS_config -> PCS_config. + ABI_PCS_RO_DATA -> ABI_PCS_RO_data. + Add CPU_unaligned_access, nodefaults, also_compatible_with, + T2EE_use, conformance, Virtualization_use and MPextension_use. + (display_arm_attribute): Handle Tag_nodefaults and + Tag_also_compatible_with. + +2008-12-04 Ben Elliston + + * doc/binutils.texi (objdump): Update booke documentation. + * NEWS: Document user-visible changes to command line options. + +2008-12-04 Nick Clifton + + * objdump.c (dump_reloc_set): Append "()" to symbol names which + have the BSF_INDIRECT_FUNCTION type. + * readelf.c (print_symbol): Fix handling of negative widths. + (dump_relocations): Append "()" to symbol names which have the + STT_IFUNC type. Display negative offsets as a positive number with + a "-" prefix. + (get_symbol_type): Return "IFUNC" for STT_IFUNC symbols. + * doc/binutils.texi: Document 'i' symbol type. + +2008-11-26 Jan Kratochvil + + * strings.c (main): New variable `s'. Have string_min parsing + call fatal for invalid input strings. + +2008-11-25 Nick Clifton + + PR7044 + * dlltool.c (run): Use formatting string to avoid compile time + warning. + (gen_exp_file): Check return value from fread. + * windmc.c (main): Check return value from fread. + +2008-11-21 Sterling Augustine + + * MAINTAINERS: Take over from Bob Wilson as Xtensa maintainer. + +2008-11-19 Nick Clifton + + * doc/fdl.texi: Update to v1.3 + * doc/binutils.texinfo: Change license to v1.3. + +2008-11-18 Catherine Moore + + * readelf.c (arm_attr_tag_ABI_FP_16bit_format): New. + (arm_attr_tag_VFP_HP_extension): New. + (arm_attr_public_tag arm_attr_public_tags): Support + new attributes. + +2008-11-17 Nick Clifton + + * version.c (print_version): Update copyright year. + +2008-11-16 Danny Smith + + * dlltool.c (identify_search_section): Cast argument, not return + value, of xstrdup to 'char*'. + +2008-11-15 Charles Wilson + + Added --identify option to dlltool. + * binutils/dlltool.c: Add new global variables + identify_imp_name and identify_dll_name. + (identify_dll_for_implib, identify_search_archive, + identify_search_member, identify_process_section_p, + identify_search_section): New functions. + (usage): Added --identify. + (long_options): Added --identify. + (main): Handle --identify option. + * binutils/doc/binutils.texi: Document --identify. + +2008-11-14 Tristan Gingold + + Remove outdated mach-o specific tests. + * objdump.c (load_debug_section): Remove mach-o specific test. + (mach_o_uncompressed_dwarf_sections): Removed. + (mach_o_compressed_dwarf_sections): Removed. + (generic_uncompressed_dwarf_sections): Removed. + (generic_compressed_dwarf_sections): Removed. + (check_mach_o_dwarf): Removed. + (dump_dwarf): Remove call to check_mach_o_dwarf. + +2008-11-14 Tristan Gingold + + * configure.com: Get version from configure.in of bfd. + * makefile.vms-in (DEBUG_OBJS): Add dwarf.obj. + (CFLAGS): Update flags. + +2008-11-13 Hans-Peter Nilsson + Alan Modra + + * nm.c (filter_symbols): Only call memcpy when from != to. + +2008-11-10 Tristan Gingold + Alan Modra + + * objdump.c (disassemble_bytes): Don't skip leading zeros when + end of section calculation overflows. + +2008-11-07 Prafulla Thakare + + * MAINTAINERS: Take over from Anil Paranjpe as H8300 maintainer. + +2008-10-31 Alan Modra + + * po/id.po: New file. + * configure.in (ALL_LINGUAS): Add id. + * configure: Regenerate. + +2008-10-21 Alan Modra + + * windmc.c (res_alloc): Remove unnecessary cast. + * windres.c (res_alloc, reswr_alloc): Likewise. + +2008-10-20 Nick Clifton + + * readelf.c: Tidy up code formatting. + +2008-10-10 Nathan Froyd + + * readelf.c (display_power_gnu_attribute): Decode + Tag_GNU_Power_ABI_Struct_Return. + +2008-10-10 Alan Modra + + * embedspu.sh: Pass -Wa,-noexecstack to $CC. + +2008-10-09 Kai Tietz + + * dlltool.c (PAGE_SIZE): Make sure it has bfd_vma type. + (PAGE_MASK): Likewise. + (sfunc): Change to address size of bfd_vma for base-file. + (flush_page): Likewise. + (gen_exp_file): Likewise. + +2008-10-07 Jan Kratochvil + + * readelf.c (process_section_headers): Do not cut the section names and + types if running with --wide. + +2008-10-06 Tom Tromey + + * dwarf.c (display_debug_frames): Change text for uniformity. + (process_debug_info): Likewise. + (display_debug_aranges): Likewise. Indent address output. + (display_debug_pubnames): Print offset in hex. + +2008-10-02 Andrew Paprocki + + PR 6934 + * stabs.c (parse_stab_string): Parse and ignore =Y strings + generated by the SUNPro C++ compiler. + +2008-09-30 Andrew Paprocki + + PR 6922 + * stabs.c (parse_stab_sun_builtin_type): Parse, but ignore SUN's + 'b' and 'v' extensions. + +2008-09-29 Peter O'Gorman + Steve Ellcey + + * configure: Regenerate for new libtool. + * aclocal.m4: Ditto. + * Makefile.in: Ditto. + * doc/Makefile.in: Ditto. + +2008-09-28 Alan Modra + + * objcopy.c (setup_section): Set elf_group_id. + +2008-09-24 Richard Henderson + + * dwarf.c (size_of_encoded_value, get_encoded_value): Move up. + (decode_location_expression): Add section parameter. Handle + DW_OP_GNU_encoded_addr. + (read_and_display_attr_value): Update decode_location_expression call. + (display_debug_loc, display_debug_frames): Likewise. + +2008-09-25 Alan Modra + + PR 6913 + * dwarf.c (print_dwarf_vma): Don't call printf without format string. + +2008-09-17 Jan Kratochvil + + Suppress warnings on NONE relocations to discarded sections. + * readelf.c (is_none_reloc): New function. + (debug_apply_relocations): Ignore is_none_reloc() relocations. + +2008-09-11 Jan Kratochvil + + Fix loading large elf64 binaries on 32bit hosts. + * configure.in: Call AC_SYS_LARGEFILE. + * config.in: Regenerate. + * configure: Regenerate. + +2008-09-11 Alan Modra + + * po/sv.po: Update. + +2008-09-08 Tristan Gingold + + * BRANCHES: Add 2.18 and 2.19 release branches. + +2008-09-08 Tristan Gingold + + * NEWS: Add a marker for the 2.19 features. + +2008-09-05 Daniel Jacobowitz + + * readelf.c (load_specific_debug_section): New function, from + load_debug_section. + (load_debug_section): Use load_specific_debug_section. + (display_debug_section): Use load_specific_debug_section. Check for + multiple sections with the same name. + +2008-08-28 Tristan Gingold + + * objdump.c (dump_stabs): Add sections for Darwin. + +2008-08-25 Alan Modra + + * sysdep.h: Include "binary-io.h". + (O_BINARY): Don't define here. + * bin2c.c (O_BINARY, O_TEXT, SET_BINARY): Don't define here. + * strings.c: Likewise. + (main): Remove #ifdef SET_BINARY. + * Makefile.am: Run "make dep-am" + * Makefile.in: Regenerate. + +2008-08-24 Alan Modra + + * configure.in: Update a number of obsolete autoconf macros. + * configure: Regenerate. + * aclocal.m4: Regenerate. + +2008-08-21 Richard Henderson + + * readelf.c (is_32bit_pcrel_reloc): Fix hppa entry. + (is_64bit_pcrel_reloc): New. + (debug_apply_relocations): Use it. Handle hppa pcrel bias. + +2008-08-15 Alan Modra + + PR 6526 + * configure.in: Invoke AC_USE_SYSTEM_EXTENSIONS. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + * doc/Makefile.in: Regenerate. + +2008-08-09 Alan Modra + + PR 6615 + * rename.c (smart_rename): Punctuate error messages. + +2008-08-08 Richard Sandiford + Daniel Jacobowitz + Catherine Moore + Mark Shinwell + + * readelf.c (get_mips_symbol_other): Handle STO_MIPS_PLT and + STO_MIPS_PIC. + (slurp_rela_relocs, slurp_rel_relocs): Handle MIPS ELF64 here. + (dump_relocations, debug_apply_relocations): Don't handle it here. + (get_mips_dynamic_type): Handle DT_MIPS_PLTGOT and DT_MIPS_RWPLT. + (print_mips_pltgot_entry): New function. + (process_mips_specific): Dump the PLT GOT. + +2008-08-08 Alan Modra + + * readelf.c (is_64bit_abs_reloc): Return true for R_MIPS_64. + +2008-08-06 Alan Modra + + PR 6774 + * objcopy.c (copy_object): Don't setup_bfd_headers when extract_symbol. + (setup_section): Don't zero vma and lma when extract_symbol. + (copy_section): Discard relocations when extract_symbol. + * doc/binutils.texi: Update --extract-symbol description. + +2008-08-04 Alan Modra + + * Makefile.am (POTFILES.in): Set LC_ALL=C. + * Makefile.in: Regenerate. + +2008-08-04 Markus Weiss + + * readelf.c (get_osabi_name ): Change name. + +2008-08-01 H.J. Lu + + * dwarf.c (dwarf_regnames_i386): Remove AVX registers. + (dwarf_regnames_x86_64): Likewise. + +2008-07-30 Alan Modra + + * dlltool.c, dwarf.c, objdump.c, readelf.c, resrc.c, resres.c, + windmc.c: Silence gcc warnings. + +2008-07-28 Alan Modra + + * readelf.c (print_vma): Typo fix. + +2008-07-28 Alan Modra + + PR 6769 + * readelf.c (print_dec_vma, print_hex_vma): Delete. + (print_vma): Use BFD_VMA_FMT. + * size.c (size_number, rprint_number): Likewise. + +2008-07-26 Michael Eager + + * readelf.c (display_power_gnu_attribute): Display + single-precision hard float. + +2008-07-21 Luis Machado + + * readelf.c (get_note_type): Handle VSX notes. + +2008-07-15 H.J. Lu + + * objdump.c (load_debug_section): Initialize section_is_compressed + for gcc 3.4/ia64. + * readelf.c (load_debug_section): Likewise. + +2008-07-12 Jie Zhang + + Revert + 2008-07-12 Jie Zhang + * readelf.c (get_machine_flags): Deal with Blackfin specific + flags. + +2008-07-12 Jie Zhang + + * readelf.c (get_machine_flags): Deal with Blackfin specific + flags. + +2008-07-09 Craig Silverstein + + * config.in: Add HAVE_ZLIB_H + * configure.in: Add test for libz and zlib.h + * configure: Regenerate. + * dwarf.c (debug_displays): Add .zdebug_* strings. + * dwarf.h (struct dwarf_section): Add fields uncompressed_namd + and compressed_name. + * objdump.c (load_debug_section): Call + bfd_uncompress_section_contents when loading a compressed + section. + (dump_dwarf_section): Recognize compressed section name. + (mach_o_dwarf_sections): Rename as + mach_o_uncompressed_dwarf_sections. + (mach_o_compressed_dwarf_sections): New variable. + (generic_dwarf_section): Rename as + generic_uncompressed_dwarf_sections. + (generic_compressed_dwarf_sections): New variable. + (check_mach_o_dwarf): Save and restore + mach_o_compressed_dwarf_sections. + * readelf.c: Add #include for config.h and zlib.h + (process_section_headers): Recognize compressed section name. + (uncompress_section_contents): New function. + (load_debug_section): Call uncompress_section_contents when + loading a compressed section. + (display_debug_section): Recognize compressed section name. + +2008-07-07 Alan Modra + + * objdump.c (find_symbol_for_address): Prefer symbols in current + section. + +2008-07-07 Alan Modra + + * ieee.c (write_ieee_debugging_info): Use bfd_make_section_with_flags. + * nlmconv.c (main, powerpc_build_stubs): Likewise. + * rescoff.c (write_coff_file): Likewise. + * resres.c (write_res_file): Likewise. + * windmc.c (windmc_write_bin): Likewise. + +2008-06-18 M R Swami Reddy + + * readelf.c (guess_is_rela): Add EM_CR16_OLD. + (dump_relocations): Likewise. + (get_machine_name): Likewise. + (is_32bit_abs_reloc): Likewise. + +2008-06-17 Ralf Wildenhues + + * configure: Regenerate. + +2008-06-12 DJ Delorie + + * readelf.c (guess_is_rela): Add EM_M32C_OLD. + (dump_relocations): Likewise. + (process_section_headers): Likewise. + (is_32bit_abs_reloc): Likewise. + (is_16bit_abs_reloc): Likewise. + +2008-06-12 Nick Clifton + + PR binutils/6483 + * objdump.c (dump_bfd): If the -g option found no STABS or IEEE + debug information to display, try dumping DWARF information + instead. + * rddbg.c (read_debugging_info): Add a parameter to suppress the + display of a warning message when no debug information is found. + * budbg.h (read_debugging_info): Update prototype. + * objcopy.c (copy_object): Continue to allow read_debugging_info + to produce warning messages. + * doc/binutils.texi (--debugging): Document new behaviour of the + -g/--debugging option. + +2008-06-10 Ben Elliston + + * MAINTAINERS: Remove myself as m68k maintainer. + +2008-05-14 Alan Modra + + * Makefile.in: Regenerate. + * doc/Makefile.in: Regenerate. + +2008-05-12 Alan Modra + + * embedspu.sh: Test for presence of ._ea by looking at section + table rather than looking at relocs. Correct toe_addr substitution. + +2008-05-08 Alan Modra + + * embedspu.sh: Take note of R_SPU_PPU32/64 relocs without a symbol, + and if present, put image in ".data.speelf". Put program handle + in ".data.spehandle". + +2008-05-01 Nick Clifton + + * readelf.c (print_symbol): Add code to display non-printing + characters. + +2008-04-30 John Heidemann + + * doc/binutils.texi (strings): Add "unicode" to the documentation + of strings in order to make explicit that it supports this + feature. + +2008-04-30 Alan Modra + + * readelf.c (process_program_headers): Correct section in segment + display. + +2008-04-28 M Thomas + Nick Clifton + + PR binutils/6449 + * objdump.c (slurp_file): Open the file in binary mode. + * ar.c: Remove conditional definition of O_BINARY. + * bin2.c: Likewise. + * rename.c: Likewise. + * strings.c: Likewise. + * sysdep.h: Add conditional definition of O_BINARY. + +2008-04-23 Paolo Bonzini + + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2008-04-16 Jean-Yves Lefort + + PR binutils/6034 + * objcopy.c (stuct symlist): Rename to + is_specified_symbol_predicate_data. + (strip_specific_list): Rename to strip_specific_htab. + (strip_unneeded_list): Rename to strip_unneeded_htab. + (keep_specific_list): Rename to keep_specific_htab. + (localize_specific_list): Rename to localize_specific_htab. + (globalize_specific_list): Rename to globalize_specific_htab. + (keepglobal_specific_list): Rename to keepglobal_specific_htab. + (weaken_specific_list): Rename to weaken_specific_htab. + (eq_string): New function. + (create_symbol_htab): New function. + (create_symbol_htabs): New function. + (add_specific_symbol): Change to use hash tables. + (is_specified_symbol_predicate): New function. + (is_specified_symbol): Use hash table lookup. + (is_strip_section): Update to use new functions and hash tables. + (filter_symbols): Likewise. + (copy_object): Likewise. + (copy_section): Likewise. + (strip_main): Likewise. + (copy_main): Likewise. + (main): Likewise. + +2008-04-14 David S. Miller + + * readelf.c (get_gnu_elf_note_type): Recognize NT_GNU_GOLD_VERSION. + +2008-04-11 Torleif Sandnes + + * dwarf.c (display_debug_lines): Rename to + display_debug_lines_raw. + (display_debug_lines_decoded): New function. Displays the + interpreted contents of a .debug_line section. + (display_debug_lines): New function: Selects either a raw dump or + a decoded dump (or both) as requested by the user. + * dwarf.h (do_debug_lines_decoded): New extern. + * readelf.c: Add support for -wL or --debug-dump=decodedline + option to display the decoded contents of a .debug_line section. + * doc/binutils.texi: Document the new option. + * NEWS: Mention the new feature. + +2008-04-08 Alan Modra + + * dwarf.c: Remove trailing whitespace throughout file. + +2008-04-04 Nick Clifton + + * po/sk.po: Updated Slovak translation. + +2008-04-03 H.J. Lu + + * dwarf.c (dwarf_regnames_i386): Add AVX registers. + (dwarf_regnames_x86_64): Likewise. + +2008-03-27 Cary Coutant + + Add support for thin archives. + * ar.c (make_thin_archive): New global flag. + (map_over_members): Deal with full pathnames in thin archives. + (usage, main): Add 'T' option for building thin archives. + (replace_members): Pass thin archive flag to ar_emul_append. + * arsup.c (ar_open): Initialize new flag. + * binemul.c (ar_emul_append): Add new parameter for + flattening nested archives. + (do_ar_emul_default_append): New function. + (ar_emul_default_append): Factored out recursive code. + * binutils/binemul.h (ar_emul_default_append): Add new parameter. + (struct bin_emulation_xfer_struct): New parameter for ar_append. + * dlltool.c (gen_lib_file): Initialize thin archive flag. + * emul_aix.c (ar_emul_aix_internal): Add new flatten + parameter, currently unimplemented. + All callers changed. + * objcopy.c (copy_archive): Preserve thin archive flag. + * doc/binutils.texi: Update ar documentation. + * NEWS: Mention the new feature. + +2008-03-20 H.J. Lu + + * readelf.c (process_mips_specific): Declare addr_size as int. + +2008-03-20 Richard Sandiford + + * readelf.c (print_mips_got_entry): New function. + (process_mips_specific): Print GOT information. + +2008-03-17 Ralf Wildenhues + + * aclocal.m4: Regenerate. + * configure: Likewise. + * Makefile.in: Likewise. + * doc/Makefile.in: Likewise. + +2008-03-16 Brian Dessent + + * rcparse.y (resid): Allow control text to span multiple lines. + +2008-03-13 Alan Modra + + * readelf.c: Use %u throughout when printing sh_link or sh_info, + %lu when printing sh_addralign. + (process_version_sections): Use identical formats when printing + all offset and sh_link fields. + +2008-03-13 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * doc/Makefile.in: Regenerate. + * configure: Regenerate. + +2008-03-12 Alan Modra + + PR 5900 + * readelf.c (SECTION_HEADER_INDEX, SECTION_HEADER_NUM): Delete. + Remove use throughout file. + (SECTION_HEADER): Likewise. + (dump_relocations): Don't adjust st_shndx for reserved range. + (process_file_header): Mask SHN_XINDEX to values seen in external + elf structs. Simplify valid section index tests. + (get_32bit_elf_symbols, get_64bit_elf_symbols): Mask SHN_XINDEX. + Map reserved st_shndx to internal form. + (process_section_groups): Test that group symbol st_shndx is in + range, not just non-zero. Delete reserved range check. + (get_symbol_index_type): Mask "type" to 16 bits when printing PRC, + OS or RSV. + +2008-03-09 Paul Brook + + * readelf.c (arm_attr_tag_VFP_arch): Add "VFPv3-D16". + +2008-03-03 James E. Wilson + + * MAINTAINERS: Update my email address. + +2008-03-03 Nick Clifton + + * dwarf.c (decode_location_expression): Handle + DW_OP_PGI_omp_thread_num. + +2008-03-01 Alan Modra + + * objdump.c (objdump_print_addr): Initialise "sym". + +2008-02-27 Justin Pryzby + Nick Clifton + + * ar.c (usage): Mention -t command line switch. + * doc/binutils.texi (ranlib): Document -t command line switch. + +2008-02-26 Nick Clifton + + * objdump.c (objdump_print_addr): If displaying file offsets, show + the offset even if there are no symbols available. + (dump_section): Display nothing if none of the section is going to + be dumped. Display the file offset, if requested, of the location + from where the dump starts. + * doc/binutils.texi (objdump): Mention that dumping via the -s + switch is also affected by the -F option. + +2008-02-26 Nick Clifton + + Re-apply this patch which was accidentally deleted: + 2006-05-16 Carlos O'Donell + + * doc/binutils.texi: Use "Binutils Index" for index name. + +2008-02-22 Nick Clifton + + * objdump.c (display_file_offsets): New variable. + (long_options): Add -F/--file-offsets. + (objdump_print_addr_with_sym): If displaying file offsets, print + the offset of the given address. + (disassemble_bytes): If displaying file offsets, tell the user how + many zeroes are skipped and the file offset of the point where + dumping resumes. + (disassemble_section): Only display the name of the section if + data is going to be dumped from it. + (main): Handle new option. Produce error messages if the start or + stop addresses do not make sense. + * doc/binutils.texi: Document the new feature. + * NEWS: Mention the new feature. + +2008-02-15 Chu Li + Nick Clifton + + PR binutils/5713 + * strings.c (integer_arg): Delete function. + (string_min): Initialise to 4. + (main): Use strtoul to parse integer arguments. + Move check for an invalid string length to after all the arguments + have been parsed. + (usage): Use indentation to indicate that - is a another form + of the --bytes= command line option. + +2008-02-12 Nick Clifton + + * dlltool.c (mcore_elf_cache_filename): Add a const qualifier to + the argument. + (scan_obj_filename): Do not drop the const qualifier when calling + mcore_elf_cache_filename. + (struct fname_cache): Add const qualifier to filename field. + +2008-02-08 H.J. Lu + + PR binutils/5713 + * strings.c (main): Set string_min to 4 if it is <= 0. + +2008-02-07 Alan Modra + + * objdump.c (main): Don't pass unadorned NULL to concat. + +2008-02-04 H.J. Lu + + PR 5715 + * configure: Regenerated. + +2008-02-03 Adam Nemet + + * readelf.c (get_machine_flags): Handle Octeon. + +2008-01-30 Tristan Gingold + + * readelf.c (dump_relocations): Decode OpenVMS-specific sections. + (get_ia64_dynamic_type): Decode OpenVMS-specific tags. + (get_dynamic_type): Handle IA64-specific tags. + (get_ia64_section_type_name): Handle OpenVMS-specific sections. + (get_section_type_name): Handle OS-specific sections (and + particularly IA64 OpenVMS one). + (get_elf_section_flags): Makes flags static. Add entries for IA64 and + decode them. + +2008-01-29 Nick Clifton + + * dwarf.c (print_dwarf_vma): New function. Display the value of a + dwarf_vma type at a specified precision. Use mingw field type + specifier if necessary. + (display_debug_loc): Use dwarf_vma type for begin and end values. + Use print_dwarf_vma to display their values. Use byte_get_signed + in order to correctly detect the -1 escape value. + (display_debug_aranges): Likewise. + (display_debug_ranges): Likewise. + +2008-01-29 Alan Modra + + * dwarf.c (display_debug_loc): Correct test for base address + entry when 64-bit host dumping 32-bit object. + +2008-01-29 Alan Modra + + * MAINTAINERS: Remove myself as ix86 maintainer. Add for SPU. + +2008-01-28 Nick Clifton + + PR binutils/5529 + * rclex.c (yylex): Also allow the hypen character. + +2008-01-28 H.J. Lu + + * dwarf.c: Include "elf/common.h". + (eh_addr_size): Changed to int. + (dwarf_regnames_i386): New. + (dwarf_regnames_x86_64): Likewise. + (dwarf_regnames): Likewise. + (dwarf_regnames_count): Likewise. + (init_dwarf_regnames): Likewise. + (regname): Likewise. + (frame_display_row): Properly support different address size. + Call regname to get register name. + (display_debug_frames): Call regname to get register name. + Display DW_CFA_def_cfa_register as DW_CFA_def_cfa_register + instead of DW_CFA_def_cfa_reg. + + * dwarf.h (init_dwarf_regnames): New. + + * objdump.c: Include "elf-bfd.h". + (dump_dwarf): Call init_dwarf_regnames on ELF input. + + * readelf.c (guess_is_rela): Change argument to int. + (parse_args): Remove the undocumented upper case options for + -wX. + (process_file_header): Call init_dwarf_regnames. + +2008-01-25 DJ Delorie + + * readelf.c (process_section_headers): Add m16c handler. + (is_16bit_abs_reloc): Recognize R_M32C_16. + +2008-01-25 Kai Tietz + + * prdbg.c: Correct formatter style use. + * readelf.c: Likewise. + * strings.c: Likewise. + +2008-01-25 Nick Clifton + + * po/ru.po: Updated Russian translation. + +2008-01-17 H.J. Lu + + * MAINTAINERS: Update my email address. + +2008-01-14 Nick Clifton + + * dwarf.c (process_debug_info): Include the CU offset and corrupt + version value when reporting unrecognised DWARF version numbers. + (load_debug_info): Remember a failed attempt to load and parse the + .debug_info section and do not repeat such attempts. + (display_debug_lines): Check the return value from load_debug_info + and return whilst displaying a warning message if the load failed. + (display_debug_loc): Likewise. + (display_debug_ranges): Likewise. + (DEBUG_INFO_UNAVAILABLE): Value stored in num_debug_info_entries + when the .debug_info section could not be loaded/parsed. + (process_debug_info): Display the length of the compilation unit + in hex, so that it corresponds with the offsets that will follow. + Tell the user if the length was 32-bit or 64-bit. + If a DIE abbreviation could not be found, tell the user the offset + of the DIE. + (free_debug_memory): Do not attempt to free any entries in the + debug_information array if num_debug_info_entries is set to + DEBUG_INFO_UNAVAILABLE. + +2008-01-10 Andreas Schwab + + * readelf.c (is_64bit_abs_reloc): Handle R_S390_64. + +2008-01-09 Jakub Zawadzki + + PR binutils/55326 + * bucomm.c (list_supported_architectures): Free architecture list + after use. + * windres.c (set_endianess): Likewise. + * windmc.c (set_endianess): Likewise. + +2008-01-08 Kai Tietz + + PR binutils/5529 + * binutils/rclex.c: (yylex): Add ':', '_', '\\', and '/' to post + characters for name tokens. + +2008-01-04 Greg McGary + + * prdbg.c (print_vma): Print as long long, if host supports it. + +2008-01-03 Nick Clifton + + * dwarf.c (read_and_display_attr_value): Prefix values that are + displayed in hexadecimal with 0x. + For the DW_AT_import attribute display the abbreviation number and + tag of the imported DIE. + (process_debug_info): Warn about lengths that reserved by the + DWARF3 specification. + Provide more information when corrupted DIEs are detected. + Warn if DIE corruption makes the sibling level negative. + +For older changes see ChangeLog-2007 + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff --git a/binutils/MAINTAINERS b/binutils/MAINTAINERS index 1542e71..6d31632 100644 --- a/binutils/MAINTAINERS +++ b/binutils/MAINTAINERS @@ -36,11 +36,12 @@ repository without obtaining approval first: Richard Henderson Ian Lance Taylor Jeff Law - Jim Wilson + Jim Wilson DJ Delorie Alan Modra Michael Meissner Daniel Jacobowitz + Richard Sandiford --------- Maintainers --------- @@ -66,35 +67,38 @@ responsibility among the other maintainers. BFIN Bernd Schmidt BUILD SYSTEM Ben Elliston BUILD SYSTEM Daniel Jacobowitz + CR16 M R Swami Reddy CRIS Hans-Peter Nilsson - CRX Tomer Levi + CRX M R Swami Reddy DLX Nikolaos Kavvadias DWARF2 Jason Merrill FR30 Dave Brolley FRV Dave Brolley FRV Alexandre Oliva - H8300 Anil Paranjpe + H8300 Prafulla Thakare HPPA Dave Anglin HPPA elf32 Alan Modra HPPA elf64 Jeff Law [Basic maintainance only] - IA-64 Jim Wilson + IA-64 Jim Wilson IQ2000 Stan Cox i860 Jason Eckhardt - ix86 Alan Modra + ix86 H.J. Lu ix86 PE Christopher Faylor ix86 COFF DJ Delorie - ix86 H.J. Lu + ix86 PE/COFF Dave Korn ix86 INTEL MODE Jan Beulich + LM32 Jon Beniston M68HC11 M68HC12 Stephane Carrez - M68k Ben Elliston M88k Mark Kettenis + MACH-O Tristan Gingold MAXQ Inderpreet Singh MEP Dave Brolley + MICROBLAZE Michael Eager MIPS Eric Christopher - MIPS Thiemo Seufer MMIX Hans-Peter Nilsson MN10300 Eric Christopher MN10300 Alexandre Oliva + Moxie Anthony Green MSP430 Dmitry Diky NetBSD support Matt Thomas PPC Geoff Keating @@ -105,15 +109,18 @@ responsibility among the other maintainers. SH Alexandre Oliva SH Kaz Kojima SPARC Jakub Jelinek + SPU Alan Modra TESTSUITES Ben Elliston TIC4X Svein Seldal TIC54X Timothy Wall VAX Matt Thomas VAX Jan-Benedict Glaw + VMS Tristan Gingold x86_64 Jan Hubicka x86_64 Andreas Jaeger - x86_64 H.J. Lu - Xtensa Bob Wilson + x86_64 H.J. Lu + XCOFF Richard Sandiford + Xtensa Sterling Augustine z80 Arnold Metselaar z8k Christian Groessler @@ -212,7 +219,7 @@ choice of branch name would be: binutils-tgc-fm -A data stamp is not required as part of the name field, but some +A date stamp is not required as part of the name field, but some organizations like to have one. If you do include the date, you should follow these rules: diff --git a/binutils/Makefile.am b/binutils/Makefile.am index 047622c..abade21 100644 --- a/binutils/Makefile.am +++ b/binutils/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to generate Makefile.in -AUTOMAKE_OPTIONS = cygnus dejagnu +AUTOMAKE_OPTIONS = dejagnu no-dist foreign ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd SUBDIRS = doc po @@ -17,6 +17,11 @@ YACC = `if [ -f ../bison/bison ]; then echo ../bison/bison -y -L$(srcdir)/../bis YFLAGS = -d LEX = `if [ -f ../flex/flex ]; then echo ../flex/flex; else echo @LEX@; fi` +# Automake 1.10+ disables lex and yacc output file regeneration if +# maintainer mode is disabled. Avoid this. +am__skiplex = +am__skipyacc = + WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) @@ -69,10 +74,7 @@ BASEDIR = $(srcdir)/.. BFDDIR = $(BASEDIR)/bfd INCDIR = $(BASEDIR)/include -MKDEP = gcc -MM - -INCLUDES = -D_GNU_SOURCE \ - -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \ +AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \ @HDEFINES@ \ @INCINTL@ \ -DLOCALEDIR="\"$(datadir)/locale\"" \ @@ -85,6 +87,7 @@ HFILES = \ windmc.h GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h mcparse.h +BUILT_SOURCES = $(GENERATED_HFILES) CFILES = \ addr2line.c ar.c arsup.c bin2c.c binemul.c bucomm.c \ @@ -117,38 +120,9 @@ OPCODES = ../opcodes/libopcodes.la LIBIBERTY = ../libiberty/libiberty.a -.PHONY: install-html install-html-am install-html-recursive - -install-html: install-html-recursive - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - POTFILES = $(CFILES) $(DEBUG_SRCS) $(HFILES) po/POTFILES.in: @MAINT@ Makefile - for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \ + for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \ && mv tmp $(srcdir)/po/POTFILES.in EXPECT = expect @@ -181,7 +155,7 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi -installcheck: +installcheck-local: /bin/sh $(srcdir)/sanity.sh $(bindir) # There's no global DEPENDENCIES. So, we must explicitly list everything @@ -226,12 +200,22 @@ objdump_SOURCES = objdump.c dwarf.c prdbg.c $(DEBUG_SRCS) $(BULIBS) objdump_LDADD = $(OPCODES) $(BFDLIB) $(LIBIBERTY) $(LIBINTL) objdump.o:objdump.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(OBJDUMP_DEFS) $(srcdir)/objdump.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='objdump.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif $(COMPILE) -c $(OBJDUMP_DEFS) $(srcdir)/objdump.c +endif 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) +EXTRA_ar_SOURCES = $(CFILES) ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL) ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \ @@ -267,80 +251,205 @@ sysroff.h: sysinfo$(EXEEXT_FOR_BUILD) sysroff.info ./sysinfo$(EXEEXT_FOR_BUILD) -d <$(srcdir)/sysroff.info >sysroff.h sysinfo$(EXEEXT_FOR_BUILD): sysinfo.o syslex.o - $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) -o $@ sysinfo.o syslex.o + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ sysinfo.o syslex.o -syslex.o: +syslex.o: syslex.c sysinfo.h config.h if [ -r syslex.c ]; then \ - $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) syslex.c -Wno-error ; \ + $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) syslex.c -Wno-error ; \ else \ - $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(AM_CFLAGS) $(CFLAGS) $(srcdir)/syslex.c -Wno-error ;\ + $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/syslex.c -Wno-error ;\ fi -sysinfo.o: +sysinfo.o: sysinfo.c if [ -r sysinfo.c ]; then \ - $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) sysinfo.c -Wno-error ; \ + $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) sysinfo.c -Wno-error ; \ else \ - $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) $(srcdir)/sysinfo.c -Wno-error ; \ + $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(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 + $(CC_FOR_BUILD) -o $@ $(AM_CPPFLAGS) $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) $(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. -arparse.o: - $(COMPILE) -c $< $(NO_WERROR) -arlex.o: - $(COMPILE) -c $< $(NO_WERROR) -sysroff.o: - $(COMPILE) -c $< $(NO_WERROR) -defparse.o: - $(COMPILE) -c $< $(NO_WERROR) -deflex.o: - $(COMPILE) -c $< $(NO_WERROR) -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) +arparse.o: arparse.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f arparse.c || echo $(srcdir)/`arparse.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='arparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f arparse.c || echo $(srcdir)/`arparse.c $(NO_WERROR) +endif + +arlex.o: arlex.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f arlex.c || echo $(srcdir)/`arlex.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='arlex.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f arlex.c || echo $(srcdir)/`arlex.c $(NO_WERROR) +endif + +sysroff.o: sysroff.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f sysroff.c || echo $(srcdir)/`sysroff.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='sysroff.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f sysroff.c || echo $(srcdir)/`sysroff.c $(NO_WERROR) +endif + +defparse.o: defparse.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f defparse.c || echo $(srcdir)/`defparse.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='defparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f defparse.c || echo $(srcdir)/`defparse.c $(NO_WERROR) +endif + +deflex.o: deflex.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f deflex.c || echo $(srcdir)/`deflex.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='deflex.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f deflex.c || echo $(srcdir)/`deflex.c $(NO_WERROR) +endif + +nlmheader.o: nlmheader.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f nlmheader.c || echo $(srcdir)/`nlmheader.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='nlmheader.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f nlmheader.c || echo $(srcdir)/`nlmheader.c $(NO_WERROR) +endif + +rcparse.o: rcparse.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f rcparse.c || echo $(srcdir)/`rcparse.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='rcparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f rcparse.c || echo $(srcdir)/`rcparse.c $(NO_WERROR) +endif + +mcparse.o: mcparse.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f mcparse.c || echo $(srcdir)/`mcparse.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='mcparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f mcparse.c || echo $(srcdir)/`mcparse.c $(NO_WERROR) +endif + +rclex.o: rclex.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/rclex.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='rclex.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c $(srcdir)/rclex.c $(NO_WERROR) +endif + +mclex.o: mclex.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/mclex.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='mclex.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c $(srcdir)/mclex.c $(NO_WERROR) +endif srconv_SOURCES = srconv.c coffgrok.c $(BULIBS) +srconv.o: sysroff.c dlltool_SOURCES = dlltool.c defparse.y deflex.l $(BULIBS) dlltool_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(LIBINTL) dlltool.o: +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(DLLTOOL_DEFS) $(srcdir)/dlltool.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='dlltool.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif $(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/dlltool.c +endif rescoff.o: +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(DLLTOOL_DEFS) $(srcdir)/rescoff.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='rescoff.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif $(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/rescoff.c +endif coffdump_SOURCES = coffdump.c coffgrok.c $(BULIBS) sysdump_SOURCES = sysdump.c $(BULIBS) +sysdump.o: sysroff.c # coff/sym.h and coff/ecoff.h won't be found by the automatic dependency # scripts, since they are only included conditionally. -nlmconv.o: nlmconv.c $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h +nlmconv.o: nlmconv.c +if am__fastdepCC + ldname=`echo ld | sed '$(transform)'`; \ + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \ + -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(srcdir)/nlmconv.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='nlmconv.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif ldname=`echo ld | sed '$(transform)'`; \ $(COMPILE) -c -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(srcdir)/nlmconv.c +endif nlmconv_SOURCES = nlmconv.c nlmheader.y $(BULIBS) @@ -365,60 +474,11 @@ all: info 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). -DEP: dep.sed $(CFILES) $(HFILES) $(GENERATED_CFILES) $(GENERATED_HFILES) config.h - rm -f DEP1 - $(MAKE) MKDEP="$(MKDEP)" DEP1 - sed -f dep.sed < DEP1 > DEPA - echo '# IF YOU PUT ANYTHING HERE IT WILL GO AWAY' >> DEPA - if grep ' /' DEPA > /dev/null 2> /dev/null; then \ - echo 'make DEP failed!'; exit 1; \ - else \ - mv -f DEPA $@; \ - fi - -DEP1: $(CFILES) $(GENERATED_CFILES) - echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > DEP2 - echo '# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.' >> DEP2 - $(MKDEP) $(INCLUDES) $(CFLAGS) $? >> DEP2 - mv -f DEP2 $@ - -dep.sed: dep-in.sed config.status - objdir=`pwd`; \ - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e 's!@INCDIR@!$(INCDIR)!' \ - -e 's!@BFDDIR@!$(BFDDIR)!' \ - -e 's!@SRCDIR@!$(srcdir)!' \ - -e "s!@OBJDIR@!$${objdir}!" \ - -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/binutils$$,,`'!' - -dep: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile - cat DEP >> tmp-Makefile - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in - cat DEP >> tmp-Makefile.in - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am - cat DEP >> tmp-Makefile.am - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - -.PHONY: dep dep-in dep-am - -### - MOSTLYCLEANFILES = sysinfo$(EXEEXT_FOR_BUILD) bin2c$(EXEEXT_FOR_BUILD) \ binutils.log binutils.sum abcdefgh* mostlyclean-local: -rm -rf tmpdir -CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 - .PHONY: install-exec-local install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS) @@ -441,259 +501,3 @@ install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS) else true; \ fi; \ done - -# What appears below is generated by a hacked mkdep using gcc -MM. - -# DO NOT DELETE THIS LINE -- mkdep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. -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 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 $(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 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 $(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 -rclex.o: rclex.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 \ - 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 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/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/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 -unwind-ia64.o: unwind-ia64.c unwind-ia64.h $(INCDIR)/elf/ia64.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/ansidecl.h ../bfd/bfd.h \ - $(INCDIR)/ansidecl.h $(INCDIR)/symcat.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 -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 \ - $(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 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 $(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 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 eead9ef..a1f3800 100644 --- a/binutils/Makefile.in +++ b/binutils/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ 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 @@ -46,16 +44,14 @@ 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_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 mcparse.h mcparse.c rcparse.h \ - rcparse.c $(srcdir)/../ylwrap $(srcdir)/../ltmain.sh \ - $(srcdir)/../config.guess $(srcdir)/../config.sub subdir = . +DIST_COMMON = NEWS README ChangeLog $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(srcdir)/config.in \ + $(srcdir)/../mkinstalldirs $(top_srcdir)/po/Make-in arparse.h \ + arparse.c arlex.c defparse.h defparse.c deflex.c nlmheader.h \ + nlmheader.c arparse.h arparse.c arlex.c mcparse.h mcparse.c \ + rcparse.h rcparse.c $(srcdir)/../depcomp $(srcdir)/../ylwrap ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.m4 \ $(top_srcdir)/../bfd/warning.m4 \ @@ -66,18 +62,22 @@ am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.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/nls.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/plugins.m4 \ + $(top_srcdir)/../config/po.m4 \ $(top_srcdir)/../config/progtest.m4 \ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = po/Makefile.in +CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = nlmconv$(EXEEXT) am__EXEEXT_2 = dlltool$(EXEEXT) am__EXEEXT_3 = windres$(EXEEXT) @@ -92,7 +92,6 @@ 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_14 = nm-new$(EXEEXT) am__EXEEXT_15 = strip-new$(EXEEXT) am__EXEEXT_16 = cxxfilt$(EXEEXT) @@ -102,9 +101,7 @@ am__objects_1 = bucomm.$(OBJEXT) version.$(OBJEXT) filemode.$(OBJEXT) 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 = +am__DEPENDENCIES_1 = am_ar_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) ar.$(OBJEXT) \ not-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \ binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1) @@ -138,7 +135,6 @@ objcopy_LDADD = $(LDADD) 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 am_ranlib_OBJECTS = ar.$(OBJEXT) is-ranlib.$(OBJEXT) arparse.$(OBJEXT) \ arlex.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) \ binemul.$(OBJEXT) emul_$(EMULATION).$(OBJEXT) $(am__objects_1) @@ -171,36 +167,46 @@ am_windres_OBJECTS = windres.$(OBJEXT) resrc.$(OBJEXT) \ rclex.$(OBJEXT) winduni.$(OBJEXT) resres.$(OBJEXT) \ $(am__objects_1) windres_OBJECTS = $(am_windres_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -depcomp = -am__depfiles_maybe = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) +LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) YLWRAP = $(top_srcdir)/../ylwrap +@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) -LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \ - $(AM_YFLAGS) -SOURCES = $(addr2line_SOURCES) $(ar_SOURCES) $(coffdump_SOURCES) \ - $(cxxfilt_SOURCES) $(dlltool_SOURCES) $(dllwrap_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) $(windmc_SOURCES) \ - $(windres_SOURCES) +LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS) +SOURCES = $(addr2line_SOURCES) $(ar_SOURCES) $(EXTRA_ar_SOURCES) \ + $(coffdump_SOURCES) $(cxxfilt_SOURCES) $(dlltool_SOURCES) \ + $(dllwrap_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) \ + $(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 \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS ETAGS = etags CTAGS = ctags DEJATOOL = $(PACKAGE) @@ -208,8 +214,6 @@ 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@ @@ -238,6 +242,7 @@ DEFS = @DEFS@ DEMANGLER_NAME = @DEMANGLER_NAME@ DEPDIR = @DEPDIR@ DLLTOOL_DEFS = @DLLTOOL_DEFS@ +DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ @@ -249,12 +254,11 @@ EXEEXT = @EXEEXT@ EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ FGREP = @FGREP@ GENCAT = @GENCAT@ -GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@ -GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HDEFINES = @HDEFINES@ INCINTL = @INCINTL@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -271,26 +275,31 @@ LIBINTL_DEP = @LIBINTL_DEP@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ NLMCONV_DEFS = @NLMCONV_DEFS@ NM = @NM@ +NMEDIT = @NMEDIT@ NO_WERROR = @NO_WERROR@ +OBJDUMP = @OBJDUMP@ OBJDUMP_DEFS = @OBJDUMP_DEFS@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ @@ -304,13 +313,13 @@ 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@ +YFLAGS = -d +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -322,9 +331,11 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ @@ -337,26 +348,37 @@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ -AUTOMAKE_OPTIONS = cygnus dejagnu +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = dejagnu no-dist foreign ACLOCAL_AMFLAGS = -I .. -I ../config -I ../bfd SUBDIRS = doc po tooldir = $(exec_prefix)/$(target_alias) -YFLAGS = -d + +# Automake 1.10+ disables lex and yacc output file regeneration if +# maintainer mode is disabled. Avoid this. +am__skiplex = +am__skipyacc = AM_CFLAGS = $(WARN_CFLAGS) # these two are almost the same program @@ -391,9 +413,7 @@ TOOL_PROGS = nm-new strip-new ar ranlib dlltool objdump objcopy BASEDIR = $(srcdir)/.. BFDDIR = $(BASEDIR)/bfd INCDIR = $(BASEDIR)/include -MKDEP = gcc -MM -INCLUDES = -D_GNU_SOURCE \ - -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \ +AM_CPPFLAGS = -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \ @HDEFINES@ \ @INCINTL@ \ -DLOCALEDIR="\"$(datadir)/locale\"" \ @@ -406,6 +426,7 @@ HFILES = \ windmc.h GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h mcparse.h +BUILT_SOURCES = $(GENERATED_HFILES) CFILES = \ addr2line.c ar.c arsup.c bin2c.c binemul.c bucomm.c \ coffdump.c coffgrok.c cxxfilt.c \ @@ -488,6 +509,7 @@ 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) +EXTRA_ar_SOURCES = $(CFILES) 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) @@ -515,13 +537,10 @@ EXTRA_DIST = arparse.c arparse.h arlex.c nlmheader.c sysinfo.c sysinfo.h \ mcparse.h mcparse.c DISTCLEANFILES = sysroff.c sysroff.h site.exp site.bak - -### MOSTLYCLEANFILES = sysinfo$(EXEEXT_FOR_BUILD) bin2c$(EXEEXT_FOR_BUILD) \ binutils.log binutils.sum abcdefgh* -CLEANFILES = dep.sed DEP DEPA DEP1 DEP2 -all: config.h +all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: @@ -532,15 +551,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) --cygnus '; \ - cd $(srcdir) && $(AUTOMAKE) --cygnus \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --cygnus Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -556,21 +575,22 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -580,96 +600,138 @@ po/Makefile.in: $(top_builddir)/config.status $(top_srcdir)/po/Make-in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list addr2line$(EXEEXT): $(addr2line_OBJECTS) $(addr2line_DEPENDENCIES) @rm -f addr2line$(EXEEXT) - $(LINK) $(addr2line_LDFLAGS) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS) + $(LINK) $(addr2line_OBJECTS) $(addr2line_LDADD) $(LIBS) +arparse.h: arparse.c + @if test ! -f $@; then \ + rm -f arparse.c; \ + $(MAKE) $(AM_MAKEFLAGS) arparse.c; \ + else :; fi ar$(EXEEXT): $(ar_OBJECTS) $(ar_DEPENDENCIES) @rm -f ar$(EXEEXT) - $(LINK) $(ar_LDFLAGS) $(ar_OBJECTS) $(ar_LDADD) $(LIBS) + $(LINK) $(ar_OBJECTS) $(ar_LDADD) $(LIBS) coffdump$(EXEEXT): $(coffdump_OBJECTS) $(coffdump_DEPENDENCIES) @rm -f coffdump$(EXEEXT) - $(LINK) $(coffdump_LDFLAGS) $(coffdump_OBJECTS) $(coffdump_LDADD) $(LIBS) + $(LINK) $(coffdump_OBJECTS) $(coffdump_LDADD) $(LIBS) cxxfilt$(EXEEXT): $(cxxfilt_OBJECTS) $(cxxfilt_DEPENDENCIES) @rm -f cxxfilt$(EXEEXT) - $(LINK) $(cxxfilt_LDFLAGS) $(cxxfilt_OBJECTS) $(cxxfilt_LDADD) $(LIBS) + $(LINK) $(cxxfilt_OBJECTS) $(cxxfilt_LDADD) $(LIBS) +defparse.h: defparse.c + @if test ! -f $@; then \ + rm -f defparse.c; \ + $(MAKE) $(AM_MAKEFLAGS) defparse.c; \ + else :; fi dlltool$(EXEEXT): $(dlltool_OBJECTS) $(dlltool_DEPENDENCIES) @rm -f dlltool$(EXEEXT) - $(LINK) $(dlltool_LDFLAGS) $(dlltool_OBJECTS) $(dlltool_LDADD) $(LIBS) + $(LINK) $(dlltool_OBJECTS) $(dlltool_LDADD) $(LIBS) dllwrap$(EXEEXT): $(dllwrap_OBJECTS) $(dllwrap_DEPENDENCIES) @rm -f dllwrap$(EXEEXT) - $(LINK) $(dllwrap_LDFLAGS) $(dllwrap_OBJECTS) $(dllwrap_LDADD) $(LIBS) + $(LINK) $(dllwrap_OBJECTS) $(dllwrap_LDADD) $(LIBS) +nlmheader.h: nlmheader.c + @if test ! -f $@; then \ + rm -f nlmheader.c; \ + $(MAKE) $(AM_MAKEFLAGS) nlmheader.c; \ + else :; fi nlmconv$(EXEEXT): $(nlmconv_OBJECTS) $(nlmconv_DEPENDENCIES) @rm -f nlmconv$(EXEEXT) - $(LINK) $(nlmconv_LDFLAGS) $(nlmconv_OBJECTS) $(nlmconv_LDADD) $(LIBS) + $(LINK) $(nlmconv_OBJECTS) $(nlmconv_LDADD) $(LIBS) nm-new$(EXEEXT): $(nm_new_OBJECTS) $(nm_new_DEPENDENCIES) @rm -f nm-new$(EXEEXT) - $(LINK) $(nm_new_LDFLAGS) $(nm_new_OBJECTS) $(nm_new_LDADD) $(LIBS) + $(LINK) $(nm_new_OBJECTS) $(nm_new_LDADD) $(LIBS) objcopy$(EXEEXT): $(objcopy_OBJECTS) $(objcopy_DEPENDENCIES) @rm -f objcopy$(EXEEXT) - $(LINK) $(objcopy_LDFLAGS) $(objcopy_OBJECTS) $(objcopy_LDADD) $(LIBS) + $(LINK) $(objcopy_OBJECTS) $(objcopy_LDADD) $(LIBS) objdump$(EXEEXT): $(objdump_OBJECTS) $(objdump_DEPENDENCIES) @rm -f objdump$(EXEEXT) - $(LINK) $(objdump_LDFLAGS) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS) + $(LINK) $(objdump_OBJECTS) $(objdump_LDADD) $(LIBS) ranlib$(EXEEXT): $(ranlib_OBJECTS) $(ranlib_DEPENDENCIES) @rm -f ranlib$(EXEEXT) - $(LINK) $(ranlib_LDFLAGS) $(ranlib_OBJECTS) $(ranlib_LDADD) $(LIBS) + $(LINK) $(ranlib_OBJECTS) $(ranlib_LDADD) $(LIBS) readelf$(EXEEXT): $(readelf_OBJECTS) $(readelf_DEPENDENCIES) @rm -f readelf$(EXEEXT) - $(LINK) $(readelf_LDFLAGS) $(readelf_OBJECTS) $(readelf_LDADD) $(LIBS) + $(LINK) $(readelf_OBJECTS) $(readelf_LDADD) $(LIBS) size$(EXEEXT): $(size_OBJECTS) $(size_DEPENDENCIES) @rm -f size$(EXEEXT) - $(LINK) $(size_LDFLAGS) $(size_OBJECTS) $(size_LDADD) $(LIBS) + $(LINK) $(size_OBJECTS) $(size_LDADD) $(LIBS) srconv$(EXEEXT): $(srconv_OBJECTS) $(srconv_DEPENDENCIES) @rm -f srconv$(EXEEXT) - $(LINK) $(srconv_LDFLAGS) $(srconv_OBJECTS) $(srconv_LDADD) $(LIBS) + $(LINK) $(srconv_OBJECTS) $(srconv_LDADD) $(LIBS) strings$(EXEEXT): $(strings_OBJECTS) $(strings_DEPENDENCIES) @rm -f strings$(EXEEXT) - $(LINK) $(strings_LDFLAGS) $(strings_OBJECTS) $(strings_LDADD) $(LIBS) + $(LINK) $(strings_OBJECTS) $(strings_LDADD) $(LIBS) strip-new$(EXEEXT): $(strip_new_OBJECTS) $(strip_new_DEPENDENCIES) @rm -f strip-new$(EXEEXT) - $(LINK) $(strip_new_LDFLAGS) $(strip_new_OBJECTS) $(strip_new_LDADD) $(LIBS) + $(LINK) $(strip_new_OBJECTS) $(strip_new_LDADD) $(LIBS) sysdump$(EXEEXT): $(sysdump_OBJECTS) $(sysdump_DEPENDENCIES) @rm -f sysdump$(EXEEXT) - $(LINK) $(sysdump_LDFLAGS) $(sysdump_OBJECTS) $(sysdump_LDADD) $(LIBS) + $(LINK) $(sysdump_OBJECTS) $(sysdump_LDADD) $(LIBS) +mcparse.h: mcparse.c + @if test ! -f $@; then \ + rm -f mcparse.c; \ + $(MAKE) $(AM_MAKEFLAGS) mcparse.c; \ + else :; fi windmc$(EXEEXT): $(windmc_OBJECTS) $(windmc_DEPENDENCIES) @rm -f windmc$(EXEEXT) - $(LINK) $(windmc_LDFLAGS) $(windmc_OBJECTS) $(windmc_LDADD) $(LIBS) + $(LINK) $(windmc_OBJECTS) $(windmc_LDADD) $(LIBS) +rcparse.h: rcparse.c + @if test ! -f $@; then \ + rm -f rcparse.c; \ + $(MAKE) $(AM_MAKEFLAGS) rcparse.c; \ + else :; fi windres$(EXEEXT): $(windres_OBJECTS) $(windres_DEPENDENCIES) @rm -f windres$(EXEEXT) - $(LINK) $(windres_LDFLAGS) $(windres_OBJECTS) $(windres_LDADD) $(LIBS) + $(LINK) $(windres_OBJECTS) $(windres_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -677,20 +739,90 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/addr2line.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ar.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arlex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arparse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arsup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bin2c.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binemul.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bucomm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coffdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coffgrok.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cxxfilt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deflex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/defparse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dlltool.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dllwrap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emul_$(EMULATION).Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emul_aix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/emul_vanilla.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filemode.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ieee.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is-ranlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is-strip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maybe-ranlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maybe-strip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mclex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mcparse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlmconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nlmheader.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/not-ranlib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/not-strip.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objcopy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prdbg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rclex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rcparse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rdcoff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rddbg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readelf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resbin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rescoff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resrc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resres.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/size.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stabs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strings.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sysdump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unwind-ia64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windmc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windres.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/winduni.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wrstabs.Po@am__quote@ + .c.o: - $(COMPILE) -c $< +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: - $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: - $(LTCOMPILE) -c -o $@ $< +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< .l.c: - $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) + $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: - $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) + $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo @@ -699,8 +831,7 @@ clean-libtool: -rm -rf .libs _libs distclean-libtool: - -rm -f libtool -uninstall-info-am: + -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -726,15 +857,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -761,16 +891,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -778,14 +908,14 @@ ID: $(HEADERS) $(SOURCES) $(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; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -797,39 +927,43 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - 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" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -858,22 +992,26 @@ distclean-DEJAGNU: -l='$(DEJATOOL)'; for tool in $$l; do \ rm -f $$tool.sum $$tool.log; \ done -check-am: +check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU -check: check-recursive +check: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(PROGRAMS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done -install: install-recursive +install: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ @@ -883,10 +1021,10 @@ mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -904,6 +1042,7 @@ maintainer-clean-generic: -rm -f nlmheader.h -rm -f rcparse.c -rm -f rcparse.h + -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ @@ -911,6 +1050,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libtool \ distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-DEJAGNU distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ @@ -922,23 +1062,44 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: install-data-am: +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: install-binPROGRAMS install-exec-local +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: -installcheck-am: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: installcheck-local 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 @@ -957,55 +1118,30 @@ ps-am: uninstall-am: uninstall-binPROGRAMS -uninstall-info: uninstall-info-recursive - -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-DEJAGNU check-am clean clean-binPROGRAMS clean-generic \ - clean-libtool clean-noinstPROGRAMS clean-recursive ctags \ - ctags-recursive distclean distclean-DEJAGNU distclean-compile \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-recursive distclean-tags dvi dvi-am html html-am \ - info info-am install install-am install-binPROGRAMS \ - install-data install-data-am 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-libtool mostlyclean-local \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am - +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + check-am ctags-recursive install install-am install-strip \ + tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-DEJAGNU check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool \ + clean-noinstPROGRAMS ctags ctags-recursive distclean \ + distclean-DEJAGNU distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags dvi dvi-am html \ + html-am info info-am install install-am install-binPROGRAMS \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-exec-local install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installcheck-local \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ + pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ + uninstall-binPROGRAMS -.PHONY: install-html install-html-am install-html-recursive - -install-html: install-html-recursive - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" po/POTFILES.in: @MAINT@ Makefile - for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \ + for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \ && mv tmp $(srcdir)/po/POTFILES.in check-DEJAGNU: site.exp @@ -1020,11 +1156,15 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi -installcheck: +installcheck-local: /bin/sh $(srcdir)/sanity.sh $(bindir) objdump.o:objdump.c - $(COMPILE) -c $(OBJDUMP_DEFS) $(srcdir)/objdump.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(OBJDUMP_DEFS) $(srcdir)/objdump.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='objdump.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $(OBJDUMP_DEFS) $(srcdir)/objdump.c # The following is commented out for the conversion to automake. # This rule creates a single binary that switches between ar and ranlib @@ -1053,119 +1193,134 @@ sysroff.h: sysinfo$(EXEEXT_FOR_BUILD) sysroff.info ./sysinfo$(EXEEXT_FOR_BUILD) -d <$(srcdir)/sysroff.info >sysroff.h sysinfo$(EXEEXT_FOR_BUILD): sysinfo.o syslex.o - $(CC_FOR_BUILD) $(CFLAGS) $(LDFLAGS) -o $@ sysinfo.o syslex.o + $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ sysinfo.o syslex.o -syslex.o: +syslex.o: syslex.c sysinfo.h config.h if [ -r syslex.c ]; then \ - $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) syslex.c -Wno-error ; \ + $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) syslex.c -Wno-error ; \ else \ - $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(AM_CFLAGS) $(CFLAGS) $(srcdir)/syslex.c -Wno-error ;\ + $(CC_FOR_BUILD) -c -I. -I$(srcdir) $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(srcdir)/syslex.c -Wno-error ;\ fi -sysinfo.o: +sysinfo.o: sysinfo.c if [ -r sysinfo.c ]; then \ - $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) sysinfo.c -Wno-error ; \ + $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) sysinfo.c -Wno-error ; \ else \ - $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS) $(srcdir)/sysinfo.c -Wno-error ; \ + $(CC_FOR_BUILD) -c -I. $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(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 + $(CC_FOR_BUILD) -o $@ $(AM_CPPFLAGS) $(AM_CFLAGS) $(CFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) $(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. -arparse.o: - $(COMPILE) -c $< $(NO_WERROR) -arlex.o: - $(COMPILE) -c $< $(NO_WERROR) -sysroff.o: - $(COMPILE) -c $< $(NO_WERROR) -defparse.o: - $(COMPILE) -c $< $(NO_WERROR) -deflex.o: - $(COMPILE) -c $< $(NO_WERROR) -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) +arparse.o: arparse.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f arparse.c || echo $(srcdir)/`arparse.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f arparse.c || echo $(srcdir)/`arparse.c $(NO_WERROR) + +arlex.o: arlex.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f arlex.c || echo $(srcdir)/`arlex.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arlex.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f arlex.c || echo $(srcdir)/`arlex.c $(NO_WERROR) + +sysroff.o: sysroff.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f sysroff.c || echo $(srcdir)/`sysroff.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sysroff.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f sysroff.c || echo $(srcdir)/`sysroff.c $(NO_WERROR) + +defparse.o: defparse.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f defparse.c || echo $(srcdir)/`defparse.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='defparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f defparse.c || echo $(srcdir)/`defparse.c $(NO_WERROR) + +deflex.o: deflex.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f deflex.c || echo $(srcdir)/`deflex.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='deflex.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f deflex.c || echo $(srcdir)/`deflex.c $(NO_WERROR) + +nlmheader.o: nlmheader.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f nlmheader.c || echo $(srcdir)/`nlmheader.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nlmheader.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f nlmheader.c || echo $(srcdir)/`nlmheader.c $(NO_WERROR) + +rcparse.o: rcparse.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f rcparse.c || echo $(srcdir)/`rcparse.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rcparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f rcparse.c || echo $(srcdir)/`rcparse.c $(NO_WERROR) + +mcparse.o: mcparse.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f mcparse.c || echo $(srcdir)/`mcparse.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mcparse.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f mcparse.c || echo $(srcdir)/`mcparse.c $(NO_WERROR) + +rclex.o: rclex.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/rclex.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rclex.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $(srcdir)/rclex.c $(NO_WERROR) + +mclex.o: mclex.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(srcdir)/mclex.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mclex.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $(srcdir)/mclex.c $(NO_WERROR) +srconv.o: sysroff.c dlltool.o: - $(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/dlltool.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(DLLTOOL_DEFS) $(srcdir)/dlltool.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dlltool.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/dlltool.c rescoff.o: - $(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/rescoff.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $(DLLTOOL_DEFS) $(srcdir)/rescoff.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rescoff.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $(DLLTOOL_DEFS) $(srcdir)/rescoff.c +sysdump.o: sysroff.c # coff/sym.h and coff/ecoff.h won't be found by the automatic dependency # scripts, since they are only included conditionally. -nlmconv.o: nlmconv.c $(INCDIR)/coff/sym.h $(INCDIR)/coff/ecoff.h - ldname=`echo ld | sed '$(transform)'`; \ - $(COMPILE) -c -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(srcdir)/nlmconv.c +nlmconv.o: nlmconv.c +@am__fastdepCC_TRUE@ ldname=`echo ld | sed '$(transform)'`; \ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ \ +@am__fastdepCC_TRUE@ -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(srcdir)/nlmconv.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='nlmconv.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ ldname=`echo ld | sed '$(transform)'`; \ +@am__fastdepCC_FALSE@ $(COMPILE) -c -DLD_NAME="\"$${ldname}\"" @NLMCONV_DEFS@ $(srcdir)/nlmconv.c diststuff: $(EXTRA_DIST) info all: info - -# Targets to rebuild dependencies in this Makefile. -# Have to get rid of DEP1 here so that "$?" later includes all of $(CFILES). -DEP: dep.sed $(CFILES) $(HFILES) $(GENERATED_CFILES) $(GENERATED_HFILES) config.h - rm -f DEP1 - $(MAKE) MKDEP="$(MKDEP)" DEP1 - sed -f dep.sed < DEP1 > DEPA - echo '# IF YOU PUT ANYTHING HERE IT WILL GO AWAY' >> DEPA - if grep ' /' DEPA > /dev/null 2> /dev/null; then \ - echo 'make DEP failed!'; exit 1; \ - else \ - mv -f DEPA $@; \ - fi - -DEP1: $(CFILES) $(GENERATED_CFILES) - echo '# DO NOT DELETE THIS LINE -- mkdep uses it.' > DEP2 - echo '# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.' >> DEP2 - $(MKDEP) $(INCLUDES) $(CFLAGS) $? >> DEP2 - mv -f DEP2 $@ - -dep.sed: dep-in.sed config.status - objdir=`pwd`; \ - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e 's!@INCDIR@!$(INCDIR)!' \ - -e 's!@BFDDIR@!$(BFDDIR)!' \ - -e 's!@SRCDIR@!$(srcdir)!' \ - -e "s!@OBJDIR@!$${objdir}!" \ - -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/binutils$$,,`'!' - -dep: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < Makefile > tmp-Makefile - cat DEP >> tmp-Makefile - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.in > tmp-Makefile.in - cat DEP >> tmp-Makefile.in - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: DEP - sed -e '/^..DO NOT DELETE THIS LINE/,$$d' < $(srcdir)/Makefile.am > tmp-Makefile.am - cat DEP >> tmp-Makefile.am - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - -.PHONY: dep dep-in dep-am mostlyclean-local: -rm -rf tmpdir @@ -1192,261 +1347,6 @@ install-exec-local: install-binPROGRAMS $(bin_PROGRAMS) $(noinst_PROGRAMS) fi; \ done -# What appears below is generated by a hacked mkdep using gcc -MM. - -# DO NOT DELETE THIS LINE -- mkdep uses it. -# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. -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 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 $(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 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 $(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 -rclex.o: rclex.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 \ - 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 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/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/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 -unwind-ia64.o: unwind-ia64.c unwind-ia64.h $(INCDIR)/elf/ia64.h \ - $(INCDIR)/elf/reloc-macros.h $(INCDIR)/ansidecl.h ../bfd/bfd.h \ - $(INCDIR)/ansidecl.h $(INCDIR)/symcat.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 -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 \ - $(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 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 $(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 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. .NOEXPORT: diff --git a/binutils/NEWS b/binutils/NEWS index d00731d..4d0143b 100644 --- a/binutils/NEWS +++ b/binutils/NEWS @@ -1,4 +1,77 @@ -*- text -*- + +Changes in 2.20: + +* Add support for delay importing to dlltool. Use the --output-delaylib + switch to create a delay-import library. The resulting app will load the dll + as soon as the first function is called. It will link to __delayLoadHelper2() + from the static delayimp library, which will import LoadLibraryA and + GetProcAddress from kernel32. + +* Add a new command line option, --insn-width=WIDTH, to objdump to specify + number of bytes to be displayed on a single line when disassembling + instructions. + +* Readelf can now display the relocated contents of a section as a sequence + of bytes via the --relocated-dump= command line option. + +* The gprof program has been given a new command line option: + --external-symbols-table= which reads in symbols from a specified + file. + +* The plugin target has been added to bfd. It can load the same shared objects + used by gold and uses them to provide basic support for new file formats. + +* The verilog memory hex dump file format is now supported as an output format + for objcopy. + +* Add --file-alignment, --heap, --image-base, --section-alignment, + --stack and --subsystem command line options to objcopy, which will + set PE optional header. + +* Option --dwarf/-W of objdump is now as flexible as readelf --debug-dump/-w. + +* --as-needed now links in a dynamic library if it satisfies undefined + symbols in regular objects, or in other dynamic libraries. In the + latter case the library is not linked if it is found in a DT_NEEDED + entry of one of the libraries already linked. + +* Added --prefix=PREFIX and --prefix-strip=LEVEL switches to objdump to + add absolute paths for -S. + +* Add new option --use-nul-prefixed-import-tables to dlltool to allow fall- + back to old import table generation with null element prefix. + +* Added --identify-strict switch to cause --identify to + report an error when the import library is associated with + multiple DLLs. + +* Added --identify option to dlltool, which determines the + name of the DLL associated with the specified . + +* Support for PowerPC booke64 instructions has been removed. The assembler no + longer accepts -mbooke32 or -mbooke64 and the disassembler no longer accepts + -Mbooke32 or -Mbooke64. Instead, -mbooke and -Mbooke should be used. + +Changes in 2.19: + +* Added -wL switch to dump decoded contents of .debug_line. + +* Added support for "thin" archives which contain pathnames pointing to + object files rather than the files themselves and which contain a + flattened symbol index for all objects, and archives, which have been + added to the archive. + +* Added -F switch to objdump to include file offsets in the disassembly. + +* Added -c switch to readelf to allow string dumps of archive symbol index. + +* Support for SSE5 has been added to the i386 port. + +* Added -p switch to readelf to allow string dumps of sections. + +Changes in 2.18: + * Resolved 37 coding problems in bfd including static array overruns, null pointer dereferences and use of a malloc buffer after it has been freed, as revealed by static analysis donated by Coverity, Inc. (http://scan.coverity.com). diff --git a/binutils/README b/binutils/README index 5bc2508..fc474a5 100644 --- a/binutils/README +++ b/binutils/README @@ -64,7 +64,7 @@ On 32-bit hosts though, this support will be restricted to 32-bit target unless the --enable-64-bit-bfd option is also used: ./configure --enable-64-bit-bfd --enable-targets=all - + You can also specify the --enable-shared option when you run configure. This will build the BFD and opcodes libraries as shared libraries. You can use arguments with the --enable-shared option to @@ -79,6 +79,17 @@ binaries, you may have to set an environment variable, normally LD_LIBRARY_PATH, so that the system can find the installed libbfd shared library. +On hosts that support shared system libraries the binutils will be +linked against them. If you have static versions of the system +libraries installed as well and you wish to create static binaries +instead then use the LDFLAGS environment variable, like this: + + ../binutils-XXX/configure LDFLAGS="--static" [more options] + +Note: the two dashes are important. The binutils make use of the +libtool script which has a special interpretation of "-static" when it +is in the LDFLAGS environment variable. + To build under openVMS/AXP, see the file makefile.vms in the top level directory. diff --git a/binutils/aclocal.m4 b/binutils/aclocal.m4 index 29676ea..4813787 100644 --- a/binutils/aclocal.m4 +++ b/binutils/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,7 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, +[m4_warning([this file was generated for autoconf 2.64. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -21,14 +29,31 @@ # ---------------------------- # 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"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -85,14 +110,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -101,8 +126,11 @@ 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]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -116,15 +144,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -152,6 +179,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -180,6 +208,16 @@ AC_CACHE_CHECK([dependency style of $depcc], if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -197,7 +235,17 @@ AC_CACHE_CHECK([dependency style of $depcc], done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -207,18 +255,23 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # 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} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -269,61 +322,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _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" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -340,28 +406,16 @@ AC_DEFUN([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. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -378,16 +432,20 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # 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 +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# 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]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -407,6 +465,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -422,8 +483,8 @@ 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_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -431,20 +492,37 @@ 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([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 + [_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 + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header @@ -455,18 +533,19 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -477,7 +556,14 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # 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"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 @@ -504,27 +590,38 @@ fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], -[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 +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl + AC_SUBST([MAINT])dnl ] ) @@ -532,13 +629,13 @@ 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. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -547,7 +644,7 @@ AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -557,24 +654,24 @@ 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 +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -584,14 +681,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -607,7 +704,15 @@ AC_SUBST($1)]) # 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" +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -617,7 +722,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -625,70 +730,33 @@ fi # 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.) +# Check for `mkdir -p'. 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])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -705,7 +773,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -715,14 +783,14 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -731,16 +799,29 @@ AC_DEFUN([AM_SANITY_CHECK], # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + 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` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -790,9 +871,28 @@ 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" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. @@ -899,9 +999,12 @@ 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/override.m4]) +m4_include([../config/plugins.m4]) m4_include([../config/po.m4]) m4_include([../config/progtest.m4]) m4_include([../libtool.m4]) m4_include([../ltoptions.m4]) m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.m4]) diff --git a/binutils/addr2line.c b/binutils/addr2line.c index cd31b81..1872521 100644 --- a/binutils/addr2line.c +++ b/binutils/addr2line.c @@ -1,6 +1,6 @@ /* addr2line.c -- convert addresses to line number and function name - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, + 2007, 2009 Free Software Foundation, Inc. Contributed by Ulrich Lauther This file is part of GNU Binutils. @@ -100,16 +100,27 @@ usage (FILE *stream, int status) static void slurp_symtab (bfd *abfd) { + long storage; long symcount; - unsigned int size; + bfd_boolean dynamic = FALSE; if ((bfd_get_file_flags (abfd) & HAS_SYMS) == 0) return; - symcount = bfd_read_minisymbols (abfd, FALSE, (void *) &syms, &size); - if (symcount == 0) - symcount = bfd_read_minisymbols (abfd, TRUE /* dynamic */, (void *) &syms, &size); + storage = bfd_get_symtab_upper_bound (abfd); + if (storage == 0) + { + storage = bfd_get_dynamic_symtab_upper_bound (abfd); + dynamic = TRUE; + } + if (storage < 0) + bfd_fatal (bfd_get_filename (abfd)); + syms = (asymbol **) xmalloc (storage); + if (dynamic) + symcount = bfd_canonicalize_dynamic_symtab (abfd, syms); + else + symcount = bfd_canonicalize_symtab (abfd, syms); if (symcount < 0) bfd_fatal (bfd_get_filename (abfd)); } diff --git a/binutils/ar.c b/binutils/ar.c index 14358b4..5bffd50 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, 2006, 2007 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -37,26 +37,21 @@ #include "arsup.h" #include "filenames.h" #include "binemul.h" +#include "plugin.h" #include #ifdef __GO32___ -#define EXT_NAME_LEN 3 /* bufflen of addition to name if it's MS-DOS */ +#define EXT_NAME_LEN 3 /* Bufflen of addition to name if it's MS-DOS. */ #else -#define EXT_NAME_LEN 6 /* ditto for *NIX */ +#define EXT_NAME_LEN 6 /* Ditto for *NIX. */ #endif -/* We need to open files in binary modes on system where that makes a - difference. */ -#ifndef O_BINARY -#define O_BINARY 0 -#endif - -/* Kludge declaration from BFD! This is ugly! FIXME! XXX */ +/* Kludge declaration from BFD! This is ugly! FIXME! XXX */ struct ar_hdr * bfd_special_undocumented_glue (bfd * abfd, const char *filename); -/* Static declarations */ +/* Static declarations. */ static void mri_emul (void); static const char *normalize (const char *, bfd *); @@ -74,7 +69,7 @@ static int ranlib_only (const char *archname); static int ranlib_touch (const char *archname); static void usage (int); -/** Globals and flags */ +/** Globals and flags. */ static int mri_mode; @@ -105,6 +100,11 @@ int newer_only = 0; if any of the members are object files. */ int write_armap = 0; +/* Operate in deterministic mode: write zero for timestamps, uids, + and gids for archive members and the archive symbol table, and write + consistent file modes. */ +int deterministic = 0; + /* Nonzero means it's the name of an existing member; position new or moved files with respect to this one. */ char *posname = NULL; @@ -134,6 +134,9 @@ static bfd_boolean ar_truncate = FALSE; program. */ static bfd_boolean full_pathname = FALSE; +/* Whether to create a "thin" archive (symbol index only -- no files). */ +static bfd_boolean make_thin_archive = FALSE; + int interactive = 0; static void @@ -176,16 +179,25 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count) match_count = 0; for (head = arch->archive_next; head; head = head->archive_next) { + const char * filename; + PROGRESS (1); - if (head->filename == NULL) + filename = head->filename; + if (filename == NULL) { /* Some archive formats don't get the filenames filled in until the elements are opened. */ struct stat buf; bfd_stat_arch_elt (head, &buf); } - if ((head->filename != NULL) && - (!FILENAME_CMP (normalize (*files, arch), head->filename))) + else if (bfd_is_thin_archive (arch)) + { + /* Thin archives store full pathnames. Need to normalize. */ + filename = normalize (filename, arch); + } + + if ((filename != NULL) && + (!FILENAME_CMP (normalize (*files, arch), filename))) { ++match_count; if (counted_name_mode @@ -200,6 +212,7 @@ map_over_members (bfd *arch, void (*function)(bfd *), char **files, int count) function (head); } } + if (!found) /* xgettext:c-format */ fprintf (stderr, _("no entry %s in archive\n"), *files); @@ -218,8 +231,14 @@ usage (int help) if (! is_ranlib) { /* xgettext:c-format */ - fprintf (s, _("Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n"), - program_name); + const char * command_line = +#if BFD_SUPPORTS_PLUGINS + _("Usage: %s [emulation options] [--plugin ] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n"); +#else + _("Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n"); +#endif + fprintf (s, command_line, program_name); + /* xgettext:c-format */ fprintf (s, _(" %s -M [ - read options from \n")); - +#if BFD_SUPPORTS_PLUGINS + fprintf (s, _(" optional:\n")); + fprintf (s, _(" --plugin

- load the specified plugin\n")); +#endif ar_emul_usage (s); } else @@ -254,9 +278,15 @@ usage (int help) fprintf (s, _("Usage: %s [options] archive\n"), program_name); fprintf (s, _(" Generate an index to speed access to archives\n")); fprintf (s, _(" The options are:\n\ - @ Read options from \n\ + @ Read options from \n")); +#if BFD_SUPPORTS_PLUGINS + fprintf (s, _("\ + --plugin Load the specified plugin\n")); +#endif + fprintf (s, _("\ + -t Update the archive's symbol map timestamp\n\ -h --help Print this help message\n\ - -V --version Print version information\n")); + -v --version Print version information\n")); } list_supported_targets (program_name, s); @@ -283,6 +313,7 @@ normalize (const char *file, bfd *abfd) { /* We could have foo/bar\\baz, or foo\\bar, or d:bar. */ char *bslash = strrchr (file, '\\'); + if (filename == NULL || (bslash != NULL && bslash > filename)) filename = bslash; if (filename == NULL && file[0] != '\0' && file[1] == ':') @@ -341,7 +372,7 @@ main (int argc, char **argv) char c; enum { - none = 0, delete, replace, print_table, + none = 0, del, replace, print_table, print_files, extract, move, quick_append } operation = none; int arg_index; @@ -363,6 +394,9 @@ main (int argc, char **argv) program_name = argv[0]; xmalloc_set_program_name (program_name); +#if BFD_SUPPORTS_PLUGINS + bfd_plugin_set_program_name (program_name); +#endif expandargv (&argc, &argv); @@ -375,6 +409,7 @@ main (int argc, char **argv) { /* We could have foo/bar\\baz, or foo\\bar, or d:bar. */ char *bslash = strrchr (program_name, '\\'); + if (temp == NULL || (bslash != NULL && bslash > temp)) temp = bslash; if (temp == NULL && program_name[0] != '\0' && program_name[1] == ':') @@ -463,6 +498,22 @@ main (int argc, char **argv) arg_index = 1; arg_ptr = argv[arg_index]; + if (strcmp (arg_ptr, "--plugin") == 0) + { +#if BFD_SUPPORTS_PLUGINS + if (argc < 4) + usage (1); + + bfd_plugin_set_plugin (argv[2]); + + arg_index += 2; + arg_ptr = argv[arg_index]; +#else + fprintf (stderr, _("sorry - this program has been built without plugin support\n")); + xexit (1); +#endif + } + if (*arg_ptr == '-') { /* When the first option starts with '-' we support POSIX-compatible @@ -489,7 +540,7 @@ main (int argc, char **argv) switch (c) { case 'd': - operation = delete; + operation = del; operation_alters_arch = TRUE; break; case 'm': @@ -558,6 +609,12 @@ main (int argc, char **argv) case 'P': full_pathname = TRUE; break; + case 'T': + make_thin_archive = TRUE; + break; + case 'D': + deterministic = TRUE; + break; default: /* xgettext:c-format */ non_fatal (_("illegal option -- %c"), c); @@ -608,12 +665,15 @@ main (int argc, char **argv) if (newer_only && operation != replace) fatal (_("`u' is only meaningful with the `r' option.")); + if (newer_only && deterministic) + fatal (_("`u' is not meaningful with the `D' option.")); + if (postype != pos_default) posname = argv[arg_index++]; if (counted_name_mode) { - if (operation != extract && operation != delete) + if (operation != extract && operation != del) fatal (_("`N' is only meaningful with the `x' and `d' options.")); counted_name_counter = atoi (argv[arg_index++]); if (counted_name_counter <= 0) @@ -628,6 +688,9 @@ main (int argc, char **argv) arch = open_inarch (inarch_filename, files == NULL ? (char *) NULL : files[0]); + if (operation == extract && bfd_is_thin_archive (arch)) + fatal (_("`x' cannot be used on thin archives.")); + switch (operation) { case print_table: @@ -642,7 +705,7 @@ main (int argc, char **argv) map_over_members (arch, extract_file, files, file_count); break; - case delete: + case del: if (files != NULL) delete_members (arch, files); else @@ -780,7 +843,7 @@ static void print_contents (bfd *abfd) { size_t ncopied = 0; - char *cbuf = xmalloc (BUFSIZE); + char *cbuf = (char *) xmalloc (BUFSIZE); struct stat buf; size_t size; if (bfd_stat_arch_elt (abfd, &buf) != 0) @@ -832,7 +895,7 @@ void extract_file (bfd *abfd) { FILE *ostream; - char *cbuf = xmalloc (BUFSIZE); + char *cbuf = (char *) xmalloc (BUFSIZE); size_t nread, tocopy; size_t ncopied = 0; size_t size; @@ -926,13 +989,13 @@ write_archive (bfd *iarch) char *old_name, *new_name; bfd *contents_head = iarch->archive_next; - old_name = xmalloc (strlen (bfd_get_filename (iarch)) + 1); + old_name = (char *) 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)); @@ -955,6 +1018,12 @@ write_archive (bfd *iarch) obfd->flags |= BFD_TRADITIONAL_FORMAT; } + if (deterministic) + obfd->flags |= BFD_DETERMINISTIC_OUTPUT; + + if (make_thin_archive || bfd_is_thin_archive (iarch)) + bfd_is_thin_archive (obfd) = 1; + if (!bfd_set_archive_head (obfd, contents_head)) bfd_fatal (old_name); @@ -1188,7 +1257,8 @@ replace_members (bfd *arch, char **files_to_move, bfd_boolean quick) /* Add to the end of the archive. */ after_bfd = get_pos_bfd (&arch->archive_next, pos_end, NULL); - if (ar_emul_append (after_bfd, *files_to_move, verbose)) + if (ar_emul_append (after_bfd, *files_to_move, verbose, + make_thin_archive)) changed = TRUE; next_file:; diff --git a/binutils/arlex.c b/binutils/arlex.c index 5dda7b8..0857a8f 100644 --- a/binutils/arlex.c +++ b/binutils/arlex.c @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 33 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -30,7 +30,7 @@ /* C99 systems have . Non-C99 systems may or may not. */ -#if __STDC_VERSION__ >= 199901L +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. @@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t; #else /* ! __cplusplus */ -#if __STDC__ +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) #define YY_USE_CONST -#endif /* __STDC__ */ +#endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST @@ -151,7 +152,12 @@ typedef unsigned int flex_uint32_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int yyleng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; extern FILE *yyin, *yyout; @@ -177,16 +183,6 @@ extern FILE *yyin, *yyout; #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). - */ - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef unsigned int yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -204,7 +200,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -274,8 +270,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; @@ -303,7 +299,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); @@ -562,7 +558,7 @@ char *yytext; #line 2 "arlex.l" /* arlex.l - Strange script language lexer */ -/* Copyright 1992, 1997, 2000, 2001, 2002, 2003, 2004, 2007 +/* Copyright 1992, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -595,7 +591,7 @@ char *yytext; extern int yylex (void); int linenumber; -#line 599 "arlex.c" +#line 595 "arlex.c" #define INITIAL 0 @@ -613,6 +609,35 @@ int linenumber; static int yy_init_globals (void ); +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + /* Macros after this point can all be overridden by user definitions in * section 1. */ @@ -655,7 +680,7 @@ static int input (void ); /* 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 ) +#define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -666,7 +691,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -751,7 +776,7 @@ YY_DECL #line 42 "arlex.l" -#line 755 "arlex.c" +#line 780 "arlex.c" if ( !(yy_init) ) { @@ -1039,7 +1064,7 @@ YY_RULE_SETUP #line 87 "arlex.l" ECHO; YY_BREAK -#line 1043 "arlex.c" +#line 1068 "arlex.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1225,7 +1250,7 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -1239,7 +1264,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1270,7 +1295,7 @@ static int yy_get_next_buffer (void) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } @@ -1294,6 +1319,14 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; @@ -1372,7 +1405,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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 yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -1421,7 +1454,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -1445,7 +1478,7 @@ static int yy_get_next_buffer (void) case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) - return EOF; + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -1697,7 +1730,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -1709,7 +1742,9 @@ static void yyensure_buffer_stack (void) (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); - + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; @@ -1727,6 +1762,8 @@ static void yyensure_buffer_stack (void) ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -1790,12 +1827,11 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; - yy_size_t n; - int i; + yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -1877,7 +1913,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } diff --git a/binutils/arlex.l b/binutils/arlex.l index f956858..48523e4 100644 --- a/binutils/arlex.l +++ b/binutils/arlex.l @@ -1,7 +1,7 @@ %{ /* arlex.l - Strange script language lexer */ -/* Copyright 1992, 1997, 2000, 2001, 2002, 2003, 2004, 2007 +/* Copyright 1992, 1997, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/arparse.c b/binutils/arparse.c index 5adb8a5..6251c32 100644 --- a/binutils/arparse.c +++ b/binutils/arparse.c @@ -114,7 +114,7 @@ /* arparse.y - Stange script language parser */ -/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003, 2007 +/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -174,7 +174,7 @@ typedef union YYSTYPE struct list *list ; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 179 "arparse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -238,7 +238,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -686,7 +686,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ diff --git a/binutils/arparse.h b/binutils/arparse.h index ec15109..0926a61 100644 --- a/binutils/arparse.h +++ b/binutils/arparse.h @@ -90,7 +90,7 @@ typedef union YYSTYPE struct list *list ; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 95 "arparse.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/binutils/arparse.y b/binutils/arparse.y index bee8b2e..113c548 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, 2007 +/* Copyright 1992, 1993, 1995, 1997, 1999, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/arsup.c b/binutils/arsup.c index 49961b0..9ddc55d 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, 2007 Free Software Foundation, Inc. + 2004, 2005, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -207,6 +207,7 @@ ar_open (char *name, int t) bfd_set_format (obfd, bfd_archive); obfd->has_armap = 1; + obfd->is_thin_archive = 0; } } diff --git a/binutils/arsup.h b/binutils/arsup.h index 860809b..5b17681 100644 --- a/binutils/arsup.h +++ b/binutils/arsup.h @@ -1,5 +1,5 @@ /* arsup.h - archive support header file - Copyright 1992, 1993, 1994, 1996, 2001, 2002, 2003, 2007 + Copyright 1992, 1993, 1994, 1996, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/bin2c.c b/binutils/bin2c.c index 0eeff35..a1f0ef5 100644 --- a/binutils/bin2c.c +++ b/binutils/bin2c.c @@ -1,5 +1,5 @@ /* bin2c.c -- dump binary file in hex format - Copyright 2007 Free Software Foundation, Inc. + Copyright 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -22,31 +22,6 @@ #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[]) { diff --git a/binutils/binemul.c b/binutils/binemul.c index 0eb1c81..2931bda 100644 --- a/binutils/binemul.c +++ b/binutils/binemul.c @@ -1,5 +1,5 @@ /* Binutils emulation layer. - Copyright 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Tom Rix, Red Hat Inc. This file is part of GNU Binutils. @@ -39,29 +39,58 @@ ar_emul_default_usage (FILE *fp) } bfd_boolean -ar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose) +ar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose, + bfd_boolean flatten) { if (bin_dummy_emulation.ar_append) - return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose); + return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose, + flatten); return FALSE; } +static bfd_boolean +do_ar_emul_default_append (bfd **after_bfd, bfd *new_bfd, + bfd_boolean verbose, bfd_boolean flatten) + { + /* When flattening, add the members of an archive instead of the + archive itself. */ + if (flatten && bfd_check_format (new_bfd, bfd_archive)) + { + bfd *elt; + bfd_boolean added = FALSE; + + for (elt = bfd_openr_next_archived_file (new_bfd, NULL); + elt; + elt = bfd_openr_next_archived_file (new_bfd, elt)) + { + if (do_ar_emul_default_append (after_bfd, elt, verbose, TRUE)) + { + added = TRUE; + after_bfd = &((*after_bfd)->archive_next); + } + } + + return added; + } + + AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename); + + new_bfd->archive_next = *after_bfd; + *after_bfd = new_bfd; + + return TRUE; +} + bfd_boolean ar_emul_default_append (bfd **after_bfd, char *file_name, - bfd_boolean verbose) + bfd_boolean verbose, bfd_boolean flatten) { - bfd *temp; + bfd *new_bfd; - temp = *after_bfd; - *after_bfd = bfd_openr (file_name, NULL); - - AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name); - AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name); - - (*after_bfd)->archive_next = temp; - - return TRUE; + new_bfd = bfd_openr (file_name, NULL); + AR_EMUL_ELEMENT_CHECK (new_bfd, file_name); + return do_ar_emul_default_append (after_bfd, new_bfd, verbose, flatten); } bfd_boolean diff --git a/binutils/binemul.h b/binutils/binemul.h index 4da6693..1b02015 100644 --- a/binutils/binemul.h +++ b/binutils/binemul.h @@ -1,5 +1,5 @@ /* Binutils emulation layer. - Copyright 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Tom Rix, Red Hat Inc. This file is part of GNU Binutils. @@ -28,8 +28,9 @@ extern void ar_emul_usage (FILE *); extern void ar_emul_default_usage (FILE *); -extern bfd_boolean ar_emul_append (bfd **, char *, bfd_boolean); -extern bfd_boolean ar_emul_default_append (bfd **, char *, bfd_boolean); +extern bfd_boolean ar_emul_append (bfd **, char *, bfd_boolean, bfd_boolean); +extern bfd_boolean ar_emul_default_append (bfd **, char *, bfd_boolean, + bfd_boolean); extern bfd_boolean ar_emul_replace (bfd **, char *, bfd_boolean); extern bfd_boolean ar_emul_default_replace (bfd **, char *, bfd_boolean); extern bfd_boolean ar_emul_parse_arg (char *); @@ -54,7 +55,7 @@ typedef struct bin_emulation_xfer_struct { /* Print out the extra options. */ void (* ar_usage) (FILE *fp); - bfd_boolean (* ar_append) (bfd **, char *, bfd_boolean); + bfd_boolean (* ar_append) (bfd **, char *, bfd_boolean, bfd_boolean); bfd_boolean (* ar_replace) (bfd **, char *, bfd_boolean); bfd_boolean (* ar_parse_arg) (char *); } diff --git a/binutils/bucomm.c b/binutils/bucomm.c index 2f3ac07..e006e61 100644 --- a/binutils/bucomm.c +++ b/binutils/bucomm.c @@ -1,6 +1,6 @@ /* bucomm.c -- Bin Utils COMmon code. Copyright 1991, 1992, 1993, 1994, 1995, 1997, 1998, 2000, 2001, 2002, - 2003, 2006, 2007 + 2003, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -60,6 +60,52 @@ bfd_nonfatal (const char *string) fprintf (stderr, "%s: %s\n", program_name, errmsg); } +/* Issue a non fatal error message. FILENAME, or if NULL then BFD, + are used to indicate the problematic file. SECTION, if non NULL, + is used to provide a section name. If FORMAT is non-null, then it + is used to print additional information via vfprintf. Finally the + bfd error message is printed. In summary, error messages are of + one of the following forms: + + PROGRAM:file: bfd-error-message + PROGRAM:file[section]: bfd-error-message + PROGRAM:file: printf-message: bfd-error-message + PROGRAM:file[section]: printf-message: bfd-error-message +*/ + +void +bfd_nonfatal_message (const char *filename, + const bfd *bfd, const asection *section, + const char *format, ...) +{ + const char *errmsg = bfd_errmsg (bfd_get_error ()); + const char *section_name = NULL; + va_list args; + + va_start (args, format); + fprintf (stderr, "%s", program_name); + + if (bfd) + { + if (!filename) + filename = bfd_get_archive_filename (bfd); + if (section) + section_name = bfd_get_section_name (bfd, section); + } + if (section_name) + fprintf (stderr, ":%s[%s]", filename, section_name); + else + fprintf (stderr, ":%s", filename); + + if (format) + { + fprintf (stderr, ": "); + vfprintf (stderr, format, args); + } + fprintf (stderr, ": %s\n", errmsg); + va_end (args); +} + void bfd_fatal (const char *string) { @@ -149,16 +195,18 @@ list_supported_targets (const char *name, FILE *f) void list_supported_architectures (const char *name, FILE *f) { - const char **arch; + const char ** arch; + const char ** arches; if (name == NULL) fprintf (f, _("Supported architectures:")); else fprintf (f, _("%s: supported architectures:"), name); - for (arch = bfd_arch_list (); *arch; arch++) + for (arch = arches = bfd_arch_list (); *arch; arch++) fprintf (f, " %s", *arch); fprintf (f, "\n"); + free (arches); } /* The length of the longest architecture name + 1. */ @@ -190,7 +238,7 @@ display_target_list (void) { const bfd_target *p = bfd_target_vector[t]; bfd *abfd = bfd_openw (dummy_name, p->name); - enum bfd_architecture a; + int a; printf ("%s\n (header %s, data %s)\n", p->name, endian_string (p->header_byteorder), @@ -236,7 +284,7 @@ display_info_table (int first, int last) int t; int ret = 1; char *dummy_name; - enum bfd_architecture a; + int a; /* Print heading of target names. */ printf ("\n%*s", (int) LONGEST_ARCH, " "); @@ -246,10 +294,11 @@ display_info_table (int first, int last) dummy_name = make_temp_file (NULL); for (a = bfd_arch_obscure + 1; a < bfd_arch_last; a++) - if (strcmp (bfd_printable_arch_mach (a, 0), "UNKNOWN!") != 0) + if (strcmp (bfd_printable_arch_mach ((enum bfd_architecture) a, 0), + "UNKNOWN!") != 0) { printf ("%*s ", (int) LONGEST_ARCH - 1, - bfd_printable_arch_mach (a, 0)); + bfd_printable_arch_mach ((enum bfd_architecture) a, 0)); for (t = first; t < last && bfd_target_vector[t]; t++) { const bfd_target *p = bfd_target_vector[t]; @@ -278,7 +327,7 @@ display_info_table (int first, int last) if (ok) { - if (! bfd_set_arch_mach (abfd, a, 0)) + if (! bfd_set_arch_mach (abfd, (enum bfd_architecture) a, 0)) ok = FALSE; } @@ -413,7 +462,7 @@ template_in_dir (const char *path) if (slash != (char *) NULL) { len = slash - path; - tmpname = xmalloc (len + sizeof (template) + 2); + tmpname = (char *) xmalloc (len + sizeof (template) + 2); memcpy (tmpname, path, len); #ifdef HAVE_DOS_BASED_FILE_SYSTEM @@ -427,7 +476,7 @@ template_in_dir (const char *path) } else { - tmpname = xmalloc (sizeof (template)); + tmpname = (char *) xmalloc (sizeof (template)); len = 0; } @@ -523,13 +572,13 @@ get_file_size (const char * file_name) else return statbuf.st_size; - return 0; + return (off_t) -1; } /* Return the filename in a static buffer. */ const char * -bfd_get_archive_filename (bfd *abfd) +bfd_get_archive_filename (const bfd *abfd) { static size_t curr = 0; static char *buf; @@ -547,7 +596,7 @@ bfd_get_archive_filename (bfd *abfd) if (curr) free (buf); curr = needed + (needed >> 1); - buf = bfd_malloc (curr); + buf = (char *) bfd_malloc (curr); /* If we can't malloc, fail safe by returning just the file name. This function is only used when building error messages. */ if (!buf) diff --git a/binutils/bucomm.h b/binutils/bucomm.h index 2288f43..fcbc32b 100644 --- a/binutils/bucomm.h +++ b/binutils/bucomm.h @@ -1,6 +1,7 @@ /* bucomm.h -- binutils common include file. Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 + Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -23,10 +24,13 @@ #define _BUCOMM_H /* Return the filename in a static buffer. */ -const char *bfd_get_archive_filename (bfd *); +const char *bfd_get_archive_filename (const bfd *); void bfd_nonfatal (const char *); +void bfd_nonfatal_message (const char *, const bfd *, const asection *, + const char *, ...); + void bfd_fatal (const char *) ATTRIBUTE_NORETURN; void report (const char *, va_list) ATTRIBUTE_PRINTF(1,0); diff --git a/binutils/budbg.h b/binutils/budbg.h index a8c99dd..b9de022 100644 --- a/binutils/budbg.h +++ b/binutils/budbg.h @@ -1,5 +1,6 @@ /* budbg.c -- Interfaces to the generic debugging information routines. - Copyright 1995, 1996, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 1995, 1996, 2002, 2003, 2005, 2007, 2008 + Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of GNU Binutils. @@ -26,7 +27,7 @@ /* Routine used to read generic debugging information. */ -extern void *read_debugging_info (bfd *, asymbol **, long); +extern void *read_debugging_info (bfd *, asymbol **, long, bfd_boolean); /* Routine used to print generic debugging information. */ diff --git a/binutils/coffgrok.c b/binutils/coffgrok.c index 01a18cd..cc425f0 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, 2007 + Copyright 1994, 1995, 1997, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/coffgrok.h b/binutils/coffgrok.h index fa423ff..44a49e2 100644 --- a/binutils/coffgrok.h +++ b/binutils/coffgrok.h @@ -1,5 +1,5 @@ /* coffgrok.h - Copyright 2001, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/config.in b/binutils/config.in index 6183c37..ceae207 100644 --- a/binutils/config.in +++ b/binutils/config.in @@ -148,6 +148,9 @@ /* Define to 1 if you have the `utimes' function. */ #undef HAVE_UTIMES +/* Define to 1 if you have the header file. */ +#undef HAVE_ZLIB_H + /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST @@ -170,12 +173,15 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION /* 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. + automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ @@ -193,6 +199,28 @@ /* Use b modifier when opening binary files? */ #undef USE_BINARY_FOPEN +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + /* Version number of package */ #undef VERSION @@ -200,10 +228,21 @@ `char[]'. */ #undef YYTEXT_POINTER -/* Enable GNU extensions on systems that have them. */ -#ifndef _GNU_SOURCE -# undef _GNU_SOURCE -#endif +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS /* Enable LFS */ #undef _LARGEFILE64_SOURCE + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE diff --git a/binutils/configure b/binutils/configure index cfc1110..46bffdf 100755 --- a/binutils/configure +++ b/binutils/configure @@ -1,81 +1,413 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.64. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. # -# 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. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_unset $as_var + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." fi -done + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -83,146 +415,107 @@ 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 | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\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; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,16 +524,6 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 - - # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} @@ -390,28 +673,24 @@ fi +exec 7<&0 &1 + # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= 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= @@ -419,51 +698,243 @@ PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= ac_unique_file="ar.c" # Factoring default headers for most tests. ac_includes_default="\ #include -#if HAVE_SYS_TYPES_H +#ifdef HAVE_SYS_TYPES_H # include #endif -#if HAVE_SYS_STAT_H +#ifdef HAVE_SYS_STAT_H # include #endif -#if STDC_HEADERS +#ifdef STDC_HEADERS # include # include #else -# if HAVE_STDLIB_H +# ifdef HAVE_STDLIB_H # include # endif #endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif -#if HAVE_STRINGS_H +#ifdef HAVE_STRINGS_H # include #endif -#if HAVE_INTTYPES_H +#ifdef HAVE_INTTYPES_H # include -#else -# if HAVE_STDINT_H -# include -# endif #endif -#if HAVE_UNISTD_H +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H # include #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 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_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +EMULATION_VECTOR +EMULATION +OBJDUMP_DEFS +BUILD_INSTALL_MISC +BUILD_MISC +BUILD_DLLWRAP +BUILD_WINDMC +BUILD_WINDRES +DLLTOOL_DEFS +BUILD_DLLTOOL +BUILD_SRCONV +BUILD_NLMCONV +NLMCONV_DEFS +LTLIBICONV +LIBICONV +ALLOCA +DEMANGLER_NAME +EXEEXT_FOR_BUILD +CC_FOR_BUILD +HDEFINES +GENINSRC_NEVER_FALSE +GENINSRC_NEVER_TRUE +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +MSGMERGE +MSGFMT +MKINSTALLDIRS +CATOBJEXT +GENCAT +INSTOBJEXT +DATADIRNAME +CATALOGS +POSUB +GMSGFMT +XGETTEXT +INCINTL +LIBINTL_DEP +LIBINTL +USE_NLS +LEXLIB +LEX_OUTPUT_ROOT +LEX +YFLAGS +YACC +NO_WERROR +WARN_CFLAGS +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +SED +LIBTOOL +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_plugins +enable_largefile +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_targets +enable_werror +enable_build_warnings +enable_nls +enable_maintainer_mode +enable_rpath +with_libiconv_prefix +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +YACC +YFLAGS' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -486,34 +957,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' 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' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -535,33 +1020,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -588,6 +1099,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -612,13 +1129,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -683,6 +1203,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -733,26 +1263,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -772,26 +1312,25 @@ do | --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; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - 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'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_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 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -800,31 +1339,36 @@ 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; }; } + as_fn_error "missing argument to $ac_option" 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; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -838,7 +1382,7 @@ target=$target_alias 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. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -851,74 +1395,72 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then 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'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi -fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -947,14 +1489,11 @@ Configuration: -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] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -964,18 +1503,25 @@ 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] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -997,19 +1543,19 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] - build shared libraries [default=yes] - --enable-static[=PKGS] - build static libraries [default=yes] + --enable-plugins Enable support for plugins (defaults no) + --disable-largefile omit support for large files + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --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 --disable-nls do not use Native Language Support @@ -1032,148 +1578,515 @@ Some influential environment variables: CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory CPP C preprocessor + YACC The `Yet Another C Compiler' implementation to use. Defaults to + the first program found out of: `bison -y', `byacc', `yacc'. + YFLAGS The list of arguments that will be passed by default to $YACC. + This script will default YFLAGS to the empty string to avoid a + default value of `-d' given by some make applications. Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac -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 +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +configure +generated by GNU Autoconf 2.64 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit 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 $@ +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## -_ACEOF +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () { -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` + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval -/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` +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR +# ------------------------------------ +# Tests whether SYMBOL is declared, setting cache variable VAR accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $2 is declared" >&5 +$as_echo_n "checking whether $2 is declared... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $2 + (void) $2; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_decl +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.64. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME @@ -1182,8 +2095,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -1205,7 +2119,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -1216,13 +2129,13 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1238,21 +2151,19 @@ do -* ) 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=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; 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; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1265,20 +2176,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "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" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1289,22 +2215,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1316,26 +2248,26 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1343,40 +2275,46 @@ cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer 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 +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi @@ -1386,69 +2324,79 @@ 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { 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=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append 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; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1462,118 +2410,131 @@ 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 +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { 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; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 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. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Make sure we can run config.sub. -$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 +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac build=$ac_cv_build -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/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build else - ac_cv_host_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; }; } + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac host=$ac_cv_host -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/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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; }; } + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; +esac target=$ac_cv_target -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/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. @@ -1590,10 +2551,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1603,35 +2564,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -1641,39 +2604,50 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1683,134 +2657,96 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + + fi fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC +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_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. + 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 - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS -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 +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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1820,39 +2756,41 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -1862,66 +2800,78 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { 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; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -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 &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -1933,112 +2883,142 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 ac_status=$? - 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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - 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 + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then : + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { 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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } fi - ac_exeext=$ac_cv_exeext -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 +# Check that 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { 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. + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +See \`config.log' for more details." "$LINENO" 5; } fi fi fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either +# Check that 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2046,38 +3026,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 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_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.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; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2089,45 +3062,46 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 ac_status=$? - 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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2141,55 +3115,34 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2200,39 +3153,49 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ -ac_cv_prog_cc_g=no + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -2248,18 +3211,14 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -2287,12 +3246,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* 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 + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -2307,205 +3271,37 @@ 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__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -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 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext 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 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - 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" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : -# 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 -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' @@ -2513,135 +3309,66 @@ 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 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 +$as_echo_n "checking for library containing strerror... " >&6; } +if test "${ac_cv_search_strerror+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_strerror=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +for ac_lib in '' cposix; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_strerror=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_strerror+set}" = set; then : + break +fi +done +if test "${ac_cv_search_strerror+set}" = set; then : -/* 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 + ac_cv_search_strerror=no fi +rm conftest.$ac_ext 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" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 +$as_echo "$ac_cv_search_strerror" >&6; } +ac_res=$ac_cv_search_strerror +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi BFD_VERSION=`sed -n -e 's/^.._INIT_AUTOMAKE.*,[ ]*\([^ ]*\)[ ]*).*/\1/p' < ${srcdir}/../bfd/configure.in` -am__api_version="1.9" +am__api_version='1.11' + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -2655,22 +3382,23 @@ am__api_version="1.9" # 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 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # 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\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -2678,7 +3406,7 @@ case $as_dir/ in # 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 -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -2688,30 +3416,43 @@ case $as_dir/ in # 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 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -2721,21 +3462,34 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + 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` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -2745,11 +3499,8 @@ if ( # 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; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -2758,81 +3509,206 @@ 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; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + 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. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # 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 +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi -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. +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + test -d ./--version && rmdir ./--version + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -2842,55 +3718,59 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(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 +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -2905,60 +3785,58 @@ rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" - ac_config_commands="$ac_config_commands depfiles" +ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# 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 +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi -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 + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2967,13 +3845,14 @@ else fi - -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi fi # test whether we have cygpath @@ -3016,96 +3895,6 @@ 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. @@ -3119,10 +3908,10 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3147,6 +3936,11 @@ else if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3164,7 +3958,17 @@ else done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3174,18 +3978,23 @@ else break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # 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} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3209,13 +4018,11 @@ else fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -3236,10 +4043,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3249,35 +4056,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -3287,39 +4096,50 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3329,77 +4149,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi + fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3410,18 +4190,19 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -3439,24 +4220,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3466,39 +4248,41 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -3508,71 +4292,83 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { 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; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -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 &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3586,55 +4382,34 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3645,39 +4420,49 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ -ac_cv_prog_cc_g=no + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3693,18 +4478,14 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3732,12 +4513,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* 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 + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -3752,205 +4538,174 @@ 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__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -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 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext 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 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - 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" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : -# 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);' +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_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error _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 +if ac_fn_c_try_cpp "$LINENO"; then : +else + # Broken: fails on valid input. 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 +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} +#include _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 +if ac_fn_c_try_cpp "$LINENO"; 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_objext conftest.$ac_ext +rm -f conftest.err 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 +# 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 - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } fi -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' @@ -3958,255 +4713,566 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -cat >>confdefs.h <<\_ACEOF -#define _GNU_SOURCE 1 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -macro_version='2.1a' -macro_revision='1.2435' - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_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 -ltmain="$ac_aux_dir/ltmain.sh" +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include -# Set options +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : -enable_dlopen=no +else + ac_cv_header_stdc=no +fi +rm -f conftest* +fi -enable_win32_dll=no +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : -# 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; + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then +$as_echo "#define STDC_HEADERS 1" >>confdefs.h +fi +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF +fi +done -# 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 + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = x""yes; then : + MINIX=yes else - enable_static=yes -fi; + MINIX= +fi + + if test "$MINIX" = yes; then +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h +$as_echo "#define _MINIX 1" >>confdefs.h + fi -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : + $as_echo_n "(cached) " >&6 else - pic_mode=default -fi; - -test -z "$pic_mode" && pic_mode=default + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h -# 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; +# Check whether --enable-plugins was given. +if test "${enable_plugins+set}" = set; then : + enableval=$enable_plugins; case "${enableval}" in + yes | "") plugins=yes ;; + no) plugins=no ;; + *) plugins=yes ;; + esac +else + plugins=no +fi -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" +case "${target}" in + sparc-*-solaris*|i[3-7]86-*-solaris*) + # See comment in bfd/configure.in for the reason for this test. + # PR 9992/binutils: We have to duplicate the behaviour of bfd's + # configure script so that the utilities in this directory agree + # on the size of structures used to describe files. + if test "${target}" = "${host}" -a "$enable_largefile" != 'yes'; then + if test "$plugins" = "no"; then + enable_largefile="no" 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 + ;; +esac +# Check whether --enable-largefile was given. +if test "${enable_largefile+set}" = set; then : + enableval=$enable_largefile; 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//" - - - - +if test "$enable_largefile" != no; then - - - - - - -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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 +$as_echo_n "checking for special C compiler options needed for large files... " >&6; } +if test "${ac_cv_sys_largefile_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' + ac_cv_sys_largefile_CC=no + if test "$GCC" != yes; then + ac_save_CC=$CC + while :; do + # IRIX 6.2 and later do not support large files by default, + # so use the C compiler's -n32 option if that helps. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF + if ac_fn_c_try_compile "$LINENO"; then : + break +fi +rm -f core conftest.err conftest.$ac_objext + CC="$CC -n32" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_largefile_CC=' -n32'; break +fi +rm -f core conftest.err conftest.$ac_objext + break + done + CC=$ac_save_CC + rm -f conftest.$ac_ext fi fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 +$as_echo "$ac_cv_sys_largefile_CC" >&6; } + if test "$ac_cv_sys_largefile_CC" != no; then + CC=$CC$ac_cv_sys_largefile_CC + fi -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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 +$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } +if test "${ac_cv_sys_file_offset_bits+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=no; break fi -echo "$as_me:$LINENO: result: $ac_cv_prog_fgrep" >&5 -echo "${ECHO_T}$ac_cv_prog_fgrep" >&6 - FGREP=$ac_cv_prog_fgrep +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_file_offset_bits=64; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_file_offset_bits=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 +$as_echo "$ac_cv_sys_file_offset_bits" >&6; } +case $ac_cv_sys_file_offset_bits in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits +_ACEOF +;; +esac +rm -rf conftest* + if test $ac_cv_sys_file_offset_bits = unknown; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 +$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } +if test "${ac_cv_sys_large_files+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ -test -z "$GREP" && GREP=grep + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=no; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LARGE_FILES 1 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int +main () +{ + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_sys_large_files=1; break +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cv_sys_large_files=unknown + break +done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 +$as_echo "$ac_cv_sys_large_files" >&6; } +case $ac_cv_sys_large_files in #( + no | unknown) ;; + *) +cat >>confdefs.h <<_ACEOF +#define _LARGE_FILES $ac_cv_sys_large_files +_ACEOF +;; +esac +rm -rf conftest* + fi +fi +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac +macro_version='2.2.6' +macro_revision='1.3012' @@ -4220,26 +5286,196 @@ test -z "$GREP" && GREP=grep +ltmain="$ac_aux_dir/ltmain.sh" -# 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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 + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) @@ -4261,14 +5497,14 @@ echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 ;; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR @@ -4298,19 +5534,17 @@ fi LD="$lt_cv_path_LD" if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld @@ -4334,11 +5568,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. @@ -4384,8 +5617,8 @@ else : ${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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else @@ -4395,10 +5628,10 @@ else 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. @@ -4408,26 +5641,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then - echo "$as_me:$LINENO: result: $DUMPBIN" >&5 -echo "${ECHO_T}$DUMPBIN" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$DUMPBIN" && break done fi @@ -4437,10 +5672,10 @@ if test -z "$DUMPBIN"; then 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. @@ -4450,31 +5685,42 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_DUMPBIN" && break done -test -n "$ac_ct_DUMPBIN" || ac_ct_DUMPBIN=":" - DUMPBIN=$ac_ct_DUMPBIN + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi fi @@ -4489,45 +5735,45 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:4499: $ac_compile\"" >&5) + (eval echo "\"\$as_me:5745: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:4502: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:5748: $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) + (eval echo "\"\$as_me:5751: 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" @@ -4548,7 +5794,7 @@ else lt_cv_sys_max_cmd_len=-1; ;; - cygwin* | mingw*) + cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, @@ -4609,8 +5855,8 @@ else 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=`(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 @@ -4644,11 +5890,11 @@ else 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len @@ -4657,31 +5903,32 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, ) >/dev/null 2>&1 \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes -echo "$as_me:$LINENO: result: $xsi_shell" >&5 -echo "${ECHO_T}$xsi_shell" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } -echo "$as_me:$LINENO: checking whether the shell understands \"+=\"" >&5 -echo $ECHO_N "checking whether the shell understands \"+=\"... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes -echo "$as_me:$LINENO: result: $lt_shell_append" >&5 -echo "${ECHO_T}$lt_shell_append" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then @@ -4715,15 +5962,15 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi -echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -4748,11 +5995,112 @@ esac +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= @@ -4769,7 +6117,7 @@ lt_cv_deplibs_check_method='unknown' # whether `pass_all' will *always* work, you probably want this one. case $host_os in -aix4* | aix5*) +aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; @@ -4802,6 +6150,12 @@ mingw* | pw32*) fi ;; +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; @@ -4860,7 +6214,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -4939,8 +6293,8 @@ tpf*) esac fi -echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -4959,10 +6313,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -4972,35 +6326,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. @@ -5010,28 +6366,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - AR=$ac_ct_AR + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi else AR="$ac_cv_prog_AR" fi @@ -5052,10 +6418,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -5065,35 +6431,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. @@ -5103,28 +6471,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - STRIP=$ac_ct_STRIP + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi else STRIP="$ac_cv_prog_STRIP" fi @@ -5139,10 +6517,10 @@ 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 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -5152,35 +6530,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -5190,28 +6570,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi @@ -5224,7 +6614,7 @@ test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= @@ -5284,10 +6674,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. @@ -5304,7 +6694,7 @@ case $host_os in aix*) symcode='[BCDT]' ;; -cygwin* | mingw* | pw32*) +cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) @@ -5348,6 +6738,7 @@ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -5401,18 +6792,18 @@ void nm_test_func(void){} int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -5465,11 +6856,11 @@ _LT_EOF 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 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" @@ -5487,7 +6878,7 @@ _LT_EOF echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi - rm -f conftest* conftst* + rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then @@ -5503,11 +6894,11 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi @@ -5526,11 +6917,16 @@ 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; + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good @@ -5539,11 +6935,11 @@ 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 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" @@ -5557,12 +6953,12 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 5560 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + echo '#line 6956 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) @@ -5596,11 +6992,11 @@ 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 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in @@ -5649,10 +7045,10 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -5660,11 +7056,7 @@ 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -5675,37 +7067,13 @@ 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 ac_fn_c_try_link "$LINENO"; 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 + lt_cv_cc_needs_belf=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -5713,8 +7081,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" @@ -5723,16 +7091,20 @@ echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 sparc*-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) LD="${LD-ld} -m elf64_sparc" ;; - *) LD="${LD-ld} -64" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; esac ;; esac @@ -5743,408 +7115,469 @@ 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 + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else - # 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 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # 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 -#else -# include -#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= + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } else - ac_cpp_err=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -if test -z "$ac_cpp_err"; then - : + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # Broken: fails on valid input. -continue fi -rm -f conftest.err conftest.$ac_ext +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - # 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 -_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 + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" else - ac_cpp_err= + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL fi else - ac_cpp_err=yes + DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # 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 +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - done - ac_cv_prog_CPP=$CPP fi - CPP=$ac_cv_prog_CPP +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 else - 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 + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # 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 -#else -# include -#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= + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi -else - ac_cpp_err=yes +done + done +IFS=$as_save_IFS + fi -if test -z "$ac_cpp_err"; then - : +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } 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 -_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 + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" else - ac_cpp_err= + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT fi else - ac_cpp_err=yes + NMEDIT="$ac_cv_prog_NMEDIT" fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - # 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 - : +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - { { 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; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&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 - -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 +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS - ; - 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 +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi -ac_cv_header_stdc=no + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" fi -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 + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } else - ac_cv_header_stdc=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } 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 +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } else - ac_cv_header_stdc=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f conftest* + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" fi -if test $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 -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -#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 - : + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else - echo "$as_me: program exited with status $ac_status" >&5 -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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -( 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 +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + + fi -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 +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" fi -# On IRIX 5.3, sys/types and inttypes.h are conflicting. @@ -6154,61 +7587,126 @@ 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 - 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 + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$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 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.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" +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" + lt_cv_ld_exported_symbols_list=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_DLFCN_H 1 _ACEOF fi @@ -6217,65 +7715,125 @@ 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 +# Set options -#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" + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + enable_shared=yes +fi + + -eval "$as_ac_Header=no" + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default 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 + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes fi -done + + + + + + + @@ -6328,10 +7886,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null @@ -6343,8 +7901,8 @@ else fi rmdir .libs 2>/dev/null fi -echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir @@ -6436,10 +7994,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -6489,11 +8047,11 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6502,10 +8060,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -6555,11 +8113,11 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -6625,7 +8183,7 @@ 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* +$RM -r conftest* ## CAVEAT EMPTOR: @@ -6639,10 +8197,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext @@ -6657,11 +8215,11 @@ else -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 echo "\"\$as_me:8218: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6664: \$? = $ac_status" >&5 + echo "$as_me:8222: \$? = $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. @@ -6674,8 +8232,8 @@ else $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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -6694,8 +8252,8 @@ fi 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -6711,19 +8269,25 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 ;; 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 + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; - mingw* | cygwin* | pw32* | os2*) + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style @@ -6738,10 +8302,11 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 ;; hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. case $host_cpu in - hppa*64*|ia64*) + hppa*64*) # +Z the default ;; *) @@ -6790,18 +8355,8 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 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*) + mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' @@ -6829,13 +8384,27 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in - icc* | ecc*) + # old Intel for x86_64 which still supported -KPIC. + ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; pgcc* | pgf77* | pgf90* | pgf95*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -6848,7 +8417,13 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; - *) + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 @@ -6949,8 +8524,8 @@ case $host_os in 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } @@ -6961,12 +8536,12 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - lt_prog_compiler_pic_works=no + lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" @@ -6979,27 +8554,27 @@ else -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 echo "\"\$as_me:8557: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6986: \$? = $ac_status" >&5 + echo "$as_me:8561: \$? = $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 + lt_cv_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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } -if test x"$lt_prog_compiler_pic_works" = xyes; then +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; @@ -7020,12 +8595,12 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - lt_prog_compiler_static_works=no + lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext @@ -7038,20 +8613,20 @@ else $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 + lt_cv_prog_compiler_static_works=yes fi else - lt_prog_compiler_static_works=yes + lt_cv_prog_compiler_static_works=yes fi fi - $RM conftest* + $RM -r 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } -if test x"$lt_prog_compiler_static_works" = xyes; then +if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= @@ -7063,10 +8638,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null @@ -7084,11 +8659,11 @@ else -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 echo "\"\$as_me:8662: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7091: \$? = $ac_status" >&5 + echo "$as_me:8666: \$? = $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 @@ -7110,18 +8685,18 @@ else $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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null @@ -7139,11 +8714,11 @@ else -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 echo "\"\$as_me:8717: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:7146: \$? = $ac_status" >&5 + echo "$as_me:8721: \$? = $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 @@ -7165,8 +8740,8 @@ else $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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } @@ -7174,19 +8749,19 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else @@ -7198,8 +8773,8 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -7233,16 +8808,17 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar # 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_" + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. @@ -7287,7 +8863,7 @@ echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared librar # See if GNU ld supports shared libraries. case $host_os in - aix3* | aix4* | aix5*) + aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no @@ -7304,19 +8880,18 @@ _LT_EOF ;; 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 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 + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; beos*) @@ -7330,7 +8905,7 @@ _LT_EOF fi ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' @@ -7370,7 +8945,7 @@ _LT_EOF 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) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in @@ -7381,6 +8956,7 @@ _LT_EOF && test "$tmp_diet" = no then tmp_addflag= + tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' @@ -7395,6 +8971,12 @@ _LT_EOF tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 @@ -7403,8 +8985,6 @@ _LT_EOF 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' @@ -7414,6 +8994,22 @@ _LT_EOF echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac else ld_shlibs=no fi @@ -7521,7 +9117,7 @@ _LT_EOF fi ;; - aix4* | aix5*) + aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. @@ -7541,7 +9137,7 @@ _LT_EOF # 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*) + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes @@ -7609,6 +9205,7 @@ _LT_EOF fi fi + export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes @@ -7618,11 +9215,7 @@ _LT_EOF 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7633,28 +9226,7 @@ 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 ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -7668,13 +9240,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat 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 +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -7687,11 +9255,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7702,28 +9266,7 @@ 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 ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { @@ -7737,13 +9280,9 @@ aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpat 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 +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -7761,20 +9300,25 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; - cygwin* | mingw* | pw32*) + cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is @@ -7796,73 +9340,30 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi ;; 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 + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + ;; dgux*) @@ -7944,7 +9445,7 @@ fi 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}+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' @@ -7993,40 +9494,16 @@ fi # 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ 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 +if ac_fn_c_try_link "$LINENO"; 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 +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' @@ -8062,25 +9539,29 @@ rm -f conftest.err conftest.$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' - ;; - *) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no fi ;; @@ -8278,8 +9759,8 @@ rm -f conftest.err conftest.$ac_objext \ fi fi -echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld @@ -8315,46 +9796,52 @@ x|xyes) # 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } +if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - 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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 +$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } + archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi @@ -8517,10 +10004,10 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; @@ -8601,7 +10088,7 @@ aix3*) soname_spec='${libname}${release}${shared_ext}$major' ;; -aix4* | aix5*) +aix[4-9]*) version_type=linux need_lib_prefix=no need_version=no @@ -8646,13 +10133,18 @@ aix4* | aix5*) ;; amigaos*) - if test "$host_cpu" = m68k; then + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$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 + ;; + esac ;; beos*) @@ -8675,14 +10167,14 @@ bsdi[45]*) # libtool to hard-code these into programs ;; -cygwin* | mingw* | pw32*) +cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no - case $withGCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ @@ -8705,7 +10197,7 @@ cygwin* | mingw* | pw32*) 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* | cegcc*) # 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"` @@ -8920,7 +10412,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no @@ -8929,16 +10421,17 @@ linux* | k*bsd*-gnu) 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 + if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_shlibpath_overrides_runpath=no + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -8949,41 +10442,19 @@ 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 +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + lt_cv_shlibpath_overrides_runpath=yes fi - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir + + shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install @@ -8992,7 +10463,7 @@ rm -f conftest.err conftest.$ac_objext \ # 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' ' '` + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi @@ -9176,7 +10647,7 @@ tpf*) 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}' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes @@ -9193,8 +10664,8 @@ uts4*) dynamic_linker=no ;; esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -9202,6 +10673,13 @@ if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + @@ -9288,8 +10766,8 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || @@ -9313,8 +10791,8 @@ else # directories. hardcode_action=unsupported fi -echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then @@ -9346,7 +10824,7 @@ else lt_cv_dlopen_self=yes ;; - mingw* | pw32*) + mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; @@ -9358,71 +10836,43 @@ else 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; 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 + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -9435,459 +10885,169 @@ 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 + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" -{ #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no + ac_cv_lib_dld_shl_load=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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_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" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* 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 (); +char dlopen (); int main () { -shl_load (); +return 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_dld_shl_load=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" -{ #endif -/* 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 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 +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no + ac_cv_lib_svld_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); +char dld_link (); int main () { -dlopen (); +return 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_dl_dlopen=yes +if ac_fn_c_try_link "$LINENO"; 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_dl_dlopen=no + ac_cv_lib_dld_dld_link=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core 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" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi @@ -9925,10 +11085,10 @@ fi 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross @@ -9936,7 +11096,7 @@ 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" +#line 11099 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -9977,10 +11137,6 @@ else # endif #endif -#ifdef __cplusplus -extern "C" void exit (int); -#endif - void fnord() { int i=42;} int main () { @@ -9996,14 +11152,14 @@ int main () else puts (dlerror ()); - exit (status); + return status; } _LT_EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -10020,15 +11176,15 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross @@ -10036,7 +11192,7 @@ 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" +#line 11195 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -10077,10 +11233,6 @@ else # endif #endif -#ifdef __cplusplus -extern "C" void exit (int); -#endif - void fnord() { int i=42;} int main () { @@ -10096,14 +11248,14 @@ int main () else puts (dlerror ()); - exit (status); + return status; } _LT_EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -10120,8 +11272,8 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" @@ -10159,13 +11311,13 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in @@ -10173,16 +11325,16 @@ else if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -10199,13 +11351,13 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } - echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -10219,21 +11371,21 @@ echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 fi ;; - aix4* | aix5*) + aix[4-9]*) 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes - echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } @@ -10259,7 +11411,7 @@ CC="$lt_save_CC" - ac_config_commands="$ac_config_commands libtool" + ac_config_commands="$ac_config_commands libtool" @@ -10268,42 +11420,38 @@ CC="$lt_save_CC" -# 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; }; } +# Check whether --enable-targets was given. +if test "${enable_targets+set}" = set; then : + enableval=$enable_targets; case "${enableval}" in + yes | "") as_fn_error "enable-targets option must specify target names or 'all'" "$LINENO" 5 ;; no) enable_targets= ;; *) enable_targets=$enableval ;; esac -fi; # Check whether --enable-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; +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 +# Check whether --enable-werror was given. +if test "${enable_werror+set}" = set; then : + enableval=$enable_werror; case "${enableval}" in yes | y) ERROR_ON_WARNING="yes" ;; no | n) ERROR_ON_WARNING="no" ;; - *) { { 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; }; } ;; + *) as_fn_error "bad value ${enableval} for --enable-werror" "$LINENO" 5 ;; esac -fi; +fi + + +# Enable -Wno-format by default when using gcc on mingw +case "${host}" in + *-*-mingw32*) + if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then + GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Wno-format" + fi + ;; + *) ;; +esac # Enable -Werror by default when using gcc if test "${GCC}" = yes -a -z "${ERROR_ON_WARNING}" ; then @@ -10320,10 +11468,9 @@ 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 +# Check whether --enable-build-warnings was given. +if test "${enable_build_warnings+set}" = set; then : + enableval=$enable_build_warnings; case "${enableval}" in yes) WARN_CFLAGS="${GCC_WARN_CFLAGS}";; no) if test "${GCC}" = yes ; then WARN_CFLAGS="-w" @@ -10334,7 +11481,8 @@ if test "${enable_build_warnings+set}" = set; then WARN_CFLAGS="${t} ${GCC_WARN_CFLAGS}";; *) WARN_CFLAGS=`echo "${enableval}" | sed -e "s/,/ /g"`;; esac -fi; +fi + if test x"$silent" != x"yes" && test x"$WARN_CFLAGS" != x""; then echo "Setting warning flags = $WARN_CFLAGS" 6>&1 @@ -10344,28 +11492,24 @@ fi - ac_config_headers="$ac_config_headers config.h:config.in" +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; }; } + as_fn_error "Unrecognized target system type; please check config.sub." "$LINENO" 5 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; }; } + as_fn_error "Unrecognized host system type; please check config.sub." "$LINENO" 5 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_YACC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. @@ -10375,26 +11519,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_YACC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then - echo "$as_me:$LINENO: result: $YACC" >&5 -echo "${ECHO_T}$YACC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$YACC" && break done test -n "$YACC" || YACC="yacc" @@ -10403,10 +11549,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LEX+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. @@ -10416,268 +11562,151 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LEX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then - echo "$as_me:$LINENO: result: $LEX" >&5 -echo "${ECHO_T}$LEX" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 +$as_echo "$LEX" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$LEX" && break done test -n "$LEX" || LEX=":" -if test -z "$LEXLIB" -then - echo "$as_me:$LINENO: checking for yywrap in -lfl" >&5 -echo $ECHO_N "checking for yywrap in -lfl... $ECHO_C" >&6 -if test "${ac_cv_lib_fl_yywrap+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lfl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" +if test "x$LEX" != "x:"; then + cat >conftest.l <<_ACEOF +%% +a { ECHO; } +b { REJECT; } +c { yymore (); } +d { yyless (1); } +e { yyless (input () != 0); } +f { unput (yytext[0]); } +. { BEGIN INITIAL; } +%% +#ifdef YYTEXT_POINTER +extern char *yytext; #endif -/* 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 () +main (void) { -yywrap (); - ; - return 0; + return ! yylex () + ! yywrap (); } _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_try="$LEX conftest.l" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$LEX conftest.l") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_fl_yywrap=yes + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 +$as_echo_n "checking lex output file root... " >&6; } +if test "${ac_cv_prog_lex_root+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_fl_yywrap=no +if test -f lex.yy.c; then + ac_cv_prog_lex_root=lex.yy +elif test -f lexyy.c; then + ac_cv_prog_lex_root=lexyy +else + as_fn_error "cannot find output from $LEX; giving up" "$LINENO" 5 fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_fl_yywrap" >&5 -echo "${ECHO_T}$ac_cv_lib_fl_yywrap" >&6 -if test $ac_cv_lib_fl_yywrap = yes; then - LEXLIB="-lfl" -else - echo "$as_me:$LINENO: checking for yywrap in -ll" >&5 -echo $ECHO_N "checking for yywrap in -ll... $ECHO_C" >&6 -if test "${ac_cv_lib_l_yywrap+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ll $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 +$as_echo "$ac_cv_prog_lex_root" >&6; } +LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root -/* 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 +if test -z "${LEXLIB+set}"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 +$as_echo_n "checking lex library... " >&6; } +if test "${ac_cv_lib_lex+set}" = set; then : + $as_echo_n "(cached) " >&6 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_cv_lib_l_yywrap=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_l_yywrap" >&5 -echo "${ECHO_T}$ac_cv_lib_l_yywrap" >&6 -if test $ac_cv_lib_l_yywrap = yes; then - LEXLIB="-ll" + ac_save_LIBS=$LIBS + ac_cv_lib_lex='none needed' + for ac_lib in '' -lfl -ll; do + LIBS="$ac_lib $ac_save_LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +`cat $LEX_OUTPUT_ROOT.c` +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_lex=$ac_lib fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + test "$ac_cv_lib_lex" != 'none needed' && break + done + LIBS=$ac_save_LIBS fi - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 +$as_echo "$ac_cv_lib_lex" >&6; } + test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi -if test "x$LEX" != "x:"; then - echo "$as_me:$LINENO: checking lex output file root" >&5 -echo $ECHO_N "checking lex output file root... $ECHO_C" >&6 -if test "${ac_cv_prog_lex_root+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # The minimal lex program is just a single line: %%. But some broken lexes -# (Solaris, I think it was) want two %% lines, so accommodate them. -cat >conftest.l <<_ACEOF -%% -%% -_ACEOF -{ (eval echo "$as_me:$LINENO: \"$LEX conftest.l\"") >&5 - (eval $LEX conftest.l) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -if test -f lex.yy.c; then - ac_cv_prog_lex_root=lex.yy -elif test -f lexyy.c; then - ac_cv_prog_lex_root=lexyy -else - { { echo "$as_me:$LINENO: error: cannot find output from $LEX; giving up" >&5 -echo "$as_me: error: cannot find output from $LEX; giving up" >&2;} - { (exit 1); exit 1; }; } -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_lex_root" >&5 -echo "${ECHO_T}$ac_cv_prog_lex_root" >&6 -rm -f conftest.l -LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root -echo "$as_me:$LINENO: checking whether yytext is a pointer" >&5 -echo $ECHO_N "checking whether yytext is a pointer... $ECHO_C" >&6 -if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 +$as_echo_n "checking whether yytext is a pointer... " >&6; } +if test "${ac_cv_prog_lex_yytext_pointer+set}" = set; then : + $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the -# default is implementation-dependent. Figure out which it is, since +# 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 +LIBS="$LEXLIB $ac_save_LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF -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 ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS -rm -f "${LEX_OUTPUT_ROOT}.c" fi -echo "$as_me:$LINENO: result: $ac_cv_prog_lex_yytext_pointer" >&5 -echo "${ECHO_T}$ac_cv_prog_lex_yytext_pointer" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 +$as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then -cat >>confdefs.h <<\_ACEOF -#define YYTEXT_POINTER 1 -_ACEOF +$as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi +rm -f conftest.l $LEX_OUTPUT_ROOT.c fi if test "$LEX" = :; then LEX=${am_missing_run}flex fi -ALL_LINGUAS="fr tr ja es sv da zh_CN ru ro rw zh_TW fi vi uk" +ALL_LINGUAS="da es fi fr id ja ro ru rw sk sv tr uk vi zh_CN zh_TW" # If we haven't got the data from the intl directory, # assume NLS is disabled. USE_NLS=no @@ -10691,22 +11720,20 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } if test x"$USE_NLS" != xyes; then - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } else - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -cat >>confdefs.h <<\_ACEOF -#define ENABLE_NLS 1 -_ACEOF +$as_echo "#define ENABLE_NLS 1" >>confdefs.h - echo "$as_me:$LINENO: checking for catalogs to be installed" >&5 -echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 +$as_echo_n "checking for catalogs to be installed... " >&6; } # Look for .po and .gmo files in the source directory. CATALOGS= XLINGUAS= @@ -10737,8 +11764,8 @@ echo $ECHO_N "checking for catalogs to be installed... $ECHO_C" >&6 fi done LINGUAS="$XLINGUAS" - echo "$as_me:$LINENO: result: $LINGUAS" >&5 -echo "${ECHO_T}$LINGUAS" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 +$as_echo "$LINGUAS" >&6; } DATADIRNAME=share @@ -10764,17 +11791,17 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes -fi; - echo "$as_me:$LINENO: result: $USE_NLS" >&5 -echo "${ECHO_T}$USE_NLS" >&6 +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } @@ -10811,10 +11838,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGFMT+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) @@ -10842,19 +11869,19 @@ esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then - echo "$as_me:$LINENO: result: $MSGFMT" >&5 -echo "${ECHO_T}$MSGFMT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_GMSGFMT+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) @@ -10866,31 +11893,32 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT - if test -n "$GMSGFMT"; then - echo "$as_me:$LINENO: result: $GMSGFMT" >&5 -echo "${ECHO_T}$GMSGFMT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then @@ -10921,10 +11949,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_XGETTEXT+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) @@ -10952,11 +11980,11 @@ esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then - echo "$as_me:$LINENO: result: $XGETTEXT" >&5 -echo "${ECHO_T}$XGETTEXT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi rm -f messages.po @@ -10992,10 +12020,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MSGMERGE+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) @@ -11022,11 +12050,11 @@ esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then - echo "$as_me:$LINENO: result: $MSGMERGE" >&5 -echo "${ECHO_T}$MSGMERGE" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -11036,8 +12064,8 @@ fi : ; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 +$as_echo "found $GMSGFMT program is not GNU msgfmt; ignore it" >&6; } GMSGFMT=":" fi fi @@ -11047,31 +12075,30 @@ echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6 (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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 +$as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi rm -f messages.po fi - ac_config_commands="$ac_config_commands default-1" + ac_config_commands="$ac_config_commands default-1" + -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } + # Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no -fi; - echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 - +fi -if test $USE_MAINTAINER_MODE = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } + if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else @@ -11082,9 +12109,7 @@ fi MAINT=$MAINTAINER_MODE_TRUE - - -if false; then + if false; then GENINSRC_NEVER_TRUE= GENINSRC_NEVER_FALSE='#' else @@ -11095,9 +12120,7 @@ fi if test -n "$EXEEXT"; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_EXECUTABLE_SUFFIX 1 -_ACEOF +$as_echo "#define HAVE_EXECUTABLE_SUFFIX 1" >>confdefs.h fi @@ -11118,10 +12141,10 @@ AR=${AR-ar} 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -11131,35 +12154,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -11169,118 +12194,50 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi -# 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 +# Put a plausible default for CC_FOR_BUILD in Makefile. +if test -z "$CC_FOR_BUILD"; then + if test "x$cross_compiling" = "xno"; then + CC_FOR_BUILD='$(CC)' 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' - - -# Put a plausible default for CC_FOR_BUILD in Makefile. -if test -z "$CC_FOR_BUILD"; then - if test "x$cross_compiling" = "xno"; then - CC_FOR_BUILD='$(CC)' - else - CC_FOR_BUILD=gcc + CC_FOR_BUILD=gcc fi fi @@ -11288,10 +12245,10 @@ fi if test "x$cross_compiling" = "xno"; then EXEEXT_FOR_BUILD='$(EXEEXT)' else - echo "$as_me:$LINENO: checking for build system executable suffix" >&5 -echo $ECHO_N "checking for build system executable suffix... $ECHO_C" >&6 -if test "${bfd_cv_build_exeext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for build system executable suffix" >&5 +$as_echo_n "checking for build system executable suffix... " >&6; } +if test "${bfd_cv_build_exeext+set}" = set; then : + $as_echo_n "(cached) " >&6 else rm -f conftest* echo 'int main () { return 0; }' > conftest.c @@ -11306,2318 +12263,788 @@ else rm -f conftest* test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no fi -echo "$as_me:$LINENO: result: $bfd_cv_build_exeext" >&5 -echo "${ECHO_T}$bfd_cv_build_exeext" >&6 - EXEEXT_FOR_BUILD="" - test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} -fi - - -DEMANGLER_NAME=c++filt -case "${host}" in - *-*-go32* | *-*-msdos*) - DEMANGLER_NAME=cxxfilt -esac - - - - - - - - - - -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 - 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 - -echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 -echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 -if test "${ac_cv_header_sys_wait_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 -#include -#ifndef WEXITSTATUS -# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) -#endif -#ifndef WIFEXITED -# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif - -int -main () -{ - int s; - wait (&s); - s = WIFEXITED (s) ? WEXITSTATUS (s) : 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 - ac_cv_header_sys_wait_h=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_sys_wait_h=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 -echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 -if test $ac_cv_header_sys_wait_h = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_WAIT_H 1 -_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 -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 -# define alloca _alloca -# else -# if HAVE_ALLOCA_H -# include -# 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 declares $ac_func. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then - -cat >>confdefs.h <<_ACEOF -#define CRAY_STACKSEG_END $ac_func -_ACEOF - - break -fi - - done -fi - -echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 -echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 -if test "${ac_cv_c_stack_direction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_c_stack_direction=0 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -int -find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} - -int -main () -{ - exit (find_stack_direction () < 0); -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_stack_direction=1 -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_c_stack_direction=-1 -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 -echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 - -cat >>confdefs.h <<_ACEOF -#define STACK_DIRECTION $ac_cv_c_stack_direction -_ACEOF - - -fi - - - - - - -for ac_func in sbrk utimes setmode getc_unlocked strcoll -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 declares $ac_func. - For example, HP-UX 11i 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 to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 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 declares mkstemp. - For example, HP-UX 11i declares gettimeofday. */ -#define mkstemp innocuous_mkstemp - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char mkstemp (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 declares mkdtemp. - For example, HP-UX 11i declares gettimeofday. */ -#define mkdtemp innocuous_mkdtemp - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char mkdtemp (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#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 -echo "$as_me:$LINENO: checking for fopen64" >&5 -echo $ECHO_N "checking for fopen64... $ECHO_C" >&6 -if test "${bu_cv_have_fopen64+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 -int -main () -{ -FILE *f = fopen64 ("/tmp/foo","r"); - ; - 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 - bu_cv_have_fopen64=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen64 ("/tmp/foo","r"); - ; - 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 - bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bu_cv_have_fopen64=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS=$saved_CPPFLAGS -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -echo "$as_me:$LINENO: result: $bu_cv_have_fopen64" >&5 -echo "${ECHO_T}$bu_cv_have_fopen64" >&6 -if test "$bu_cv_have_fopen64" != no; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_FOPEN64 1 -_ACEOF - -fi -echo "$as_me:$LINENO: checking for stat64" >&5 -echo $ECHO_N "checking for stat64... $ECHO_C" >&6 -if test "${bu_cv_have_stat64+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 -int -main () -{ -struct stat64 st; stat64 ("/tmp/foo", &st); - ; - 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 - bu_cv_have_stat64=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -saved_CPPFLAGS=$CPPFLAGS - CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -struct stat64 st; stat64 ("/tmp/foo", &st); - ; - 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 - bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bu_cv_have_stat64=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - CPPFLAGS=$saved_CPPFLAGS -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi - -echo "$as_me:$LINENO: result: $bu_cv_have_stat64" >&5 -echo "${ECHO_T}$bu_cv_have_stat64" >&6 -if test "$bu_cv_have_stat64" != no; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_STAT64 1 -_ACEOF - -fi -if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ - || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then - -cat >>confdefs.h <<\_ACEOF -#define _LARGEFILE64_SOURCE 1 -_ACEOF - - CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" -fi - -# Some systems have frexp only in -lm, not in -lc. -echo "$as_me:$LINENO: checking for library containing frexp" >&5 -echo $ECHO_N "checking for library containing frexp... $ECHO_C" >&6 -if test "${ac_cv_search_frexp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_func_search_save_LIBS=$LIBS -ac_cv_search_frexp=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 frexp (); -int -main () -{ -frexp (); - ; - 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_frexp="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_frexp" = no; then - for ac_lib in m; 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 frexp (); -int -main () -{ -frexp (); - ; - 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_frexp="-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_frexp" >&5 -echo "${ECHO_T}$ac_cv_search_frexp" >&6 -if test "$ac_cv_search_frexp" != no; then - test "$ac_cv_search_frexp" = "none required" || LIBS="$ac_cv_search_frexp $LIBS" - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_build_exeext" >&5 +$as_echo "$bfd_cv_build_exeext" >&6; } + EXEEXT_FOR_BUILD="" + test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext} fi -echo "$as_me:$LINENO: checking for time_t in time.h" >&5 -echo $ECHO_N "checking for time_t in time.h... $ECHO_C" >&6 -if test "${bu_cv_decl_time_t_time_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 -int -main () -{ -time_t i; - ; - 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 - bu_cv_decl_time_t_time_h=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bu_cv_decl_time_t_time_h=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi +DEMANGLER_NAME=c++filt +case "${host}" in + *-*-go32* | *-*-msdos*) + DEMANGLER_NAME=cxxfilt +esac -echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_time_h" >&5 -echo "${ECHO_T}$bu_cv_decl_time_t_time_h" >&6 -if test $bu_cv_decl_time_t_time_h = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TIME_T_IN_TIME_H 1 +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=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi -echo "$as_me:$LINENO: checking for time_t in sys/types.h" >&5 -echo $ECHO_N "checking for time_t in sys/types.h... $ECHO_C" >&6 -if test "${bu_cv_decl_time_t_types_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 +$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } +if test "${ac_cv_header_sys_wait_h+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + int main () { -time_t i; + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 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 - bu_cv_decl_time_t_types_h=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_sys_wait_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bu_cv_decl_time_t_types_h=no + ac_cv_header_sys_wait_h=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 +$as_echo "$ac_cv_header_sys_wait_h" >&6; } +if test $ac_cv_header_sys_wait_h = yes; then -echo "$as_me:$LINENO: result: $bu_cv_decl_time_t_types_h" >&5 -echo "${ECHO_T}$bu_cv_decl_time_t_types_h" >&6 -if test $bu_cv_decl_time_t_types_h = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_TIME_T_IN_TYPES_H 1 -_ACEOF +$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for a known getopt prototype in unistd.h" >&5 -echo $ECHO_N "checking for a known getopt prototype in unistd.h... $ECHO_C" >&6 -if test "${bu_cv_decl_getopt_unistd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include +#include int main () { -extern int getopt (int, char *const*, const char *); +char *p = (char *) alloca (2 * sizeof (int)); + if (p) 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 - bu_cv_decl_getopt_unistd_h=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bu_cv_decl_getopt_unistd_h=no + ac_cv_working_alloca_h=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then -echo "$as_me:$LINENO: result: $bu_cv_decl_getopt_unistd_h" >&5 -echo "${ECHO_T}$bu_cv_decl_getopt_unistd_h" >&6 -if test $bu_cv_decl_getopt_unistd_h = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DECL_GETOPT 1 -_ACEOF +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi -# Under Next 3.2 apparently does not define struct utimbuf -# by default. -echo "$as_me:$LINENO: checking for utime.h" >&5 -echo $ECHO_N "checking for utime.h... $ECHO_C" >&6 -if test "${bu_cv_header_utime_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#ifdef HAVE_TIME_H -#include +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif #endif -#include + int main () { -struct utimbuf s; +char *p = (char *) alloca (1); + if (p) 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 - bu_cv_header_utime_h=yes +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -bu_cv_header_utime_h=no + ac_cv_func_alloca_works=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } -echo "$as_me:$LINENO: result: $bu_cv_header_utime_h" >&5 -echo "${ECHO_T}$bu_cv_header_utime_h" >&6 -if test $bu_cv_header_utime_h = yes; then +if test $ac_cv_func_alloca_works = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_GOOD_UTIME_H 1 -_ACEOF +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h -fi +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=\${LIBOBJDIR}alloca.$ac_objext -echo "$as_me:$LINENO: checking whether fprintf is declared" >&5 -echo $ECHO_N "checking whether fprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_fprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if test "${ac_cv_os_cray+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default -int -main () -{ -#ifndef fprintf - char *p = (char *) fprintf; +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray #endif - ; - return 0; -} _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_fprintf=yes +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_fprintf=no + ac_cv_os_cray=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f conftest* + fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_fprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_fprintf" >&6 -if test $ac_cv_have_decl_fprintf = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FPRINTF 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_FPRINTF 0 +#define CRAY_STACKSEG_END $ac_func _ACEOF + break +fi + done fi -echo "$as_me:$LINENO: checking whether stpcpy is declared" >&5 -echo $ECHO_N "checking whether stpcpy is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_stpcpy+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +find_stack_direction () { -#ifndef stpcpy - char *p = (char *) stpcpy; -#endif + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} - ; - return 0; +int +main () +{ + return find_stack_direction () < 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_stpcpy=yes +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_stpcpy=no + ac_cv_c_stack_direction=-1 fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_stpcpy" >&5 -echo "${ECHO_T}$ac_cv_have_decl_stpcpy" >&6 -if test $ac_cv_have_decl_stpcpy = yes; then +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STPCPY 1 +#define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF -else +fi + +for ac_func in sbrk utimes setmode getc_unlocked strcoll +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STPCPY 0 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF +fi +done + +ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" +if test "x$ac_cv_func_mkstemp" = x""yes; then : + +$as_echo "#define HAVE_MKSTEMP 1" >>confdefs.h + +fi + +ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp" +if test "x$ac_cv_func_mkdtemp" = x""yes; then : + +$as_echo "#define HAVE_MKDTEMP 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether strstr is declared" >&5 -echo $ECHO_N "checking whether strstr is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_strstr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + +# Check whether fopen64 is available and whether _LARGEFILE64_SOURCE +# needs to be defined for it +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fopen64" >&5 +$as_echo_n "checking for fopen64... " >&6; } +if test "${bu_cv_have_fopen64+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen64 ("/tmp/foo","r"); + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + bu_cv_have_fopen64=yes +else + saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include int main () { -#ifndef strstr - char *p = (char *) strstr; -#endif - +FILE *f = fopen64 ("/tmp/foo","r"); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_strstr=yes +if ac_fn_c_try_link "$LINENO"; then : + bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_strstr=no + bu_cv_have_fopen64=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS=$saved_CPPFLAGS +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_strstr" >&5 -echo "${ECHO_T}$ac_cv_have_decl_strstr" >&6 -if test $ac_cv_have_decl_strstr = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSTR 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_STRSTR 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bu_cv_have_fopen64" >&5 +$as_echo "$bu_cv_have_fopen64" >&6; } +if test "$bu_cv_have_fopen64" != no; then +$as_echo "#define HAVE_FOPEN64 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether sbrk is declared" >&5 -echo $ECHO_N "checking whether sbrk is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_sbrk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stat64" >&5 +$as_echo_n "checking for stat64... " >&6; } +if test "${bu_cv_have_stat64+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +struct stat64 st; stat64 ("/tmp/foo", &st); + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + bu_cv_have_stat64=yes +else + saved_CPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include int main () { -#ifndef sbrk - char *p = (char *) sbrk; -#endif - +struct stat64 st; stat64 ("/tmp/foo", &st); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_sbrk=yes +if ac_fn_c_try_link "$LINENO"; then : + bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_sbrk=no + bu_cv_have_stat64=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS=$saved_CPPFLAGS +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_sbrk" >&5 -echo "${ECHO_T}$ac_cv_have_decl_sbrk" >&6 -if test $ac_cv_have_decl_sbrk = yes; then -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SBRK 1 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bu_cv_have_stat64" >&5 +$as_echo "$bu_cv_have_stat64" >&6; } +if test "$bu_cv_have_stat64" != no; then +$as_echo "#define HAVE_STAT64 1" >>confdefs.h -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SBRK 0 -_ACEOF +fi +if test "$bu_cv_have_fopen64" = "need -D_LARGEFILE64_SOURCE" \ + || test "$bu_cv_have_stat64" = "need -D_LARGEFILE64_SOURCE"; then +$as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" fi -echo "$as_me:$LINENO: checking whether getenv is declared" >&5 -echo $ECHO_N "checking whether getenv is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_getenv+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +# Some systems have frexp only in -lm, not in -lc. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing frexp" >&5 +$as_echo_n "checking for library containing frexp... " >&6; } +if test "${ac_cv_search_frexp+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char frexp (); int main () { -#ifndef getenv - char *p = (char *) getenv; -#endif - +return frexp (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_getenv=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_getenv=no +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_frexp=$ac_res fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_frexp+set}" = set; then : + break fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_getenv" >&5 -echo "${ECHO_T}$ac_cv_have_decl_getenv" >&6 -if test $ac_cv_have_decl_getenv = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 1 -_ACEOF - +done +if test "${ac_cv_search_frexp+set}" = set; then : else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETENV 0 -_ACEOF - + ac_cv_search_frexp=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_frexp" >&5 +$as_echo "$ac_cv_search_frexp" >&6; } +ac_res=$ac_cv_search_frexp +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -echo "$as_me:$LINENO: checking whether environ is declared" >&5 -echo $ECHO_N "checking whether environ is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_environ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for time_t in time.h" >&5 +$as_echo_n "checking for time_t in time.h... " >&6; } +if test "${bu_cv_decl_time_t_time_h+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include int main () { -#ifndef environ - char *p = (char *) environ; -#endif - +time_t i; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_environ=yes +if ac_fn_c_try_compile "$LINENO"; then : + bu_cv_decl_time_t_time_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_environ=no + bu_cv_decl_time_t_time_h=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_environ" >&5 -echo "${ECHO_T}$ac_cv_have_decl_environ" >&6 -if test $ac_cv_have_decl_environ = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ENVIRON 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_ENVIRON 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bu_cv_decl_time_t_time_h" >&5 +$as_echo "$bu_cv_decl_time_t_time_h" >&6; } +if test $bu_cv_decl_time_t_time_h = yes; then +$as_echo "#define HAVE_TIME_T_IN_TIME_H 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5 -echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for time_t in sys/types.h" >&5 +$as_echo_n "checking for time_t in sys/types.h... " >&6; } +if test "${bu_cv_decl_time_t_types_h+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include int main () { -#ifndef getc_unlocked - char *p = (char *) getc_unlocked; -#endif - +time_t i; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_getc_unlocked=yes +if ac_fn_c_try_compile "$LINENO"; then : + bu_cv_decl_time_t_types_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_getc_unlocked=no + bu_cv_decl_time_t_types_h=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5 -echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6 -if test $ac_cv_have_decl_getc_unlocked = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETC_UNLOCKED 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_GETC_UNLOCKED 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bu_cv_decl_time_t_types_h" >&5 +$as_echo "$bu_cv_decl_time_t_types_h" >&6; } +if test $bu_cv_decl_time_t_types_h = yes; then +$as_echo "#define HAVE_TIME_T_IN_TYPES_H 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether snprintf is declared" >&5 -echo $ECHO_N "checking whether snprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_snprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a known getopt prototype in unistd.h" >&5 +$as_echo_n "checking for a known getopt prototype in unistd.h... " >&6; } +if test "${bu_cv_decl_getopt_unistd_h+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include int main () { -#ifndef snprintf - char *p = (char *) snprintf; -#endif - +extern int getopt (int, char *const*, const char *); ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_snprintf=yes +if ac_fn_c_try_compile "$LINENO"; then : + bu_cv_decl_getopt_unistd_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_snprintf=no + bu_cv_decl_getopt_unistd_h=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_snprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_snprintf" >&6 -if test $ac_cv_have_decl_snprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SNPRINTF 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bu_cv_decl_getopt_unistd_h" >&5 +$as_echo "$bu_cv_decl_getopt_unistd_h" >&6; } +if test $bu_cv_decl_getopt_unistd_h = yes; then +$as_echo "#define HAVE_DECL_GETOPT 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether vsnprintf is declared" >&5 -echo $ECHO_N "checking whether vsnprintf is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_vsnprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +# Under Next 3.2 apparently does not define struct utimbuf +# by default. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for utime.h" >&5 +$as_echo_n "checking for utime.h... " >&6; } +if test "${bu_cv_header_utime_h+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_includes_default +#include +#ifdef HAVE_TIME_H +#include +#endif +#include int main () { -#ifndef vsnprintf - char *p = (char *) vsnprintf; -#endif - +struct utimbuf s; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_vsnprintf=yes +if ac_fn_c_try_compile "$LINENO"; then : + bu_cv_header_utime_h=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_vsnprintf=no + bu_cv_header_utime_h=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_vsnprintf" >&5 -echo "${ECHO_T}$ac_cv_have_decl_vsnprintf" >&6 -if test $ac_cv_have_decl_vsnprintf = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 1 -_ACEOF - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_VSNPRINTF 0 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bu_cv_header_utime_h" >&5 +$as_echo "$bu_cv_header_utime_h" >&6; } +if test $bu_cv_header_utime_h = yes; then +$as_echo "#define HAVE_GOOD_UTIME_H 1" >>confdefs.h fi +ac_fn_c_check_decl "$LINENO" "fprintf" "ac_cv_have_decl_fprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_fprintf" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi - - -case "${host}" in -*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*) - -cat >>confdefs.h <<\_ACEOF -#define USE_BINARY_FOPEN 1 +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FPRINTF $ac_have_decl _ACEOF - ;; -esac +ac_fn_c_check_decl "$LINENO" "stpcpy" "ac_cv_have_decl_stpcpy" "$ac_includes_default" +if test "x$ac_cv_have_decl_stpcpy" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi -# target-specific stuff: +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STPCPY $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "strstr" "ac_cv_have_decl_strstr" "$ac_includes_default" +if test "x$ac_cv_have_decl_strstr" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi -# Canonicalize the secondary target names. -if test -n "$enable_targets"; then - for targ in `echo $enable_targets | sed 's/,/ /g'` - do - result=`$ac_config_sub $targ 2>/dev/null` - if test -n "$result"; then - canon_targets="$canon_targets $result" - else - # Allow targets that config.sub doesn't recognize, like "all". - canon_targets="$canon_targets $targ" - fi - done +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_STRSTR $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default" +if test "x$ac_cv_have_decl_sbrk" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -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 +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SBRK $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" +if test "x$ac_cv_have_decl_getenv" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 fi -echo "$as_me:$LINENO: result: $ac_cv_header_iconv_h" >&5 -echo "${ECHO_T}$ac_cv_header_iconv_h" >&6 + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETENV $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "environ" "ac_cv_have_decl_environ" "$ac_includes_default" +if test "x$ac_cv_have_decl_environ" = x""yes; then : + ac_have_decl=1 else - # 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. */ + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_ENVIRON $ac_have_decl _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include +ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" +if test "x$ac_cv_have_decl_getc_unlocked" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl _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 +ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_snprintf" = x""yes; then : + ac_have_decl=1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_have_decl=0 +fi -ac_header_compiler=no +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SNPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default" +if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then : + ac_have_decl=1 +else + ac_have_decl=0 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. */ +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_VSNPRINTF $ac_have_decl _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + +# Link in zlib if we can. This allows us to read compressed debug +# sections. This is used only by readelf.c (objdump uses bfd for +# reading compressed sections). +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zlibVersion" >&5 +$as_echo_n "checking for library containing zlibVersion... " >&6; } +if test "${ac_cv_search_zlibVersion+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char zlibVersion (); +int +main () +{ +return zlibVersion (); + ; + return 0; +} _ACEOF -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 +for ac_lib in '' z; do + if test -z "$ac_lib"; then + ac_res="none required" else - ac_cpp_err= + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi -else - ac_cpp_err=yes + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_zlibVersion=$ac_res fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_zlibVersion+set}" = set; then : + break +fi +done +if test "${ac_cv_search_zlibVersion+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_search_zlibVersion=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_zlibVersion" >&5 +$as_echo "$ac_cv_search_zlibVersion" >&6; } +ac_res=$ac_cv_search_zlibVersion +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + for ac_header in zlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" +if test "x$ac_cv_header_zlib_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_ZLIB_H 1 +_ACEOF - 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 - ;; +done + +fi + + + +case "${host}" in +*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*) + +$as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h + ;; 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 + +# target-specific stuff: + +# Canonicalize the secondary target names. +if test -n "$enable_targets"; then + for targ in `echo $enable_targets | sed 's/,/ /g'` + do + result=`$ac_config_sub $targ 2>/dev/null` + if test -n "$result"; then + canon_targets="$canon_targets $result" + else + # Allow targets that config.sub doesn't recognize, like "all". + canon_targets="$canon_targets $targ" + fi + done fi -echo "$as_me:$LINENO: result: $ac_cv_header_iconv_h" >&5 -echo "${ECHO_T}$ac_cv_header_iconv_h" >&6 + +ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" +if test "x$ac_cv_header_iconv_h" = x""yes; then : fi @@ -13639,13 +13066,13 @@ fi 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 +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no -fi; +fi + # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then @@ -13662,8 +13089,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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw @@ -13692,14 +13119,14 @@ echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 ;; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${acl_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${acl_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" @@ -13725,19 +13152,17 @@ fi LD="$acl_cv_path_LD" if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${acl_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then @@ -13746,16 +13171,16 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 +$as_echo "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if test "${acl_cv_rpath+set}" = set; then : + $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ @@ -13765,8 +13190,8 @@ else acl_cv_rpath=done fi -echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 -echo "${ECHO_T}$acl_cv_rpath" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" @@ -13774,13 +13199,13 @@ echo "${ECHO_T}$acl_cv_rpath" >&6 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" - : + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : else enable_rpath=yes -fi; +fi + @@ -13802,10 +13227,9 @@ fi; 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" - +# Check whether --with-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 @@ -13828,7 +13252,8 @@ if test "${with_libiconv_prefix+set}" = set; then fi fi -fi; +fi + LIBICONV= LTLIBICONV= INCICONV= @@ -14195,19 +13620,15 @@ 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if test "${am_cv_func_iconv+set}" = set; then : + $as_echo_n "(cached) " >&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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -14221,44 +13642,15 @@ iconv_t cd = iconv_open("",""); 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 ac_fn_c_try_link "$LINENO"; 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 +rm -f core 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 + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -14272,55 +13664,28 @@ iconv_t cd = iconv_open("",""); 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 ac_fn_c_try_link "$LINENO"; 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 +rm -f core 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_ICONV 1 -_ACEOF +$as_echo "#define HAVE_ICONV 1" >>confdefs.h 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= @@ -14330,17 +13695,13 @@ echo "${ECHO_T}$LIBICONV" >&6 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 +$as_echo_n "checking for iconv declaration... " >&6; } + if test "${am_cv_proto_iconv+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -14363,44 +13724,20 @@ 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 +if ac_fn_c_try_compile "$LINENO"; 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" + am_cv_proto_iconv_arg1="const" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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:- + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 -echo "${ECHO_T}${ac_t:- - }$am_cv_proto_iconv" >&6 +$as_echo "${ac_t:- + }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 @@ -14431,6 +13768,14 @@ do BUILD_SRCONV='$(SRCONV_PROG)' NLMCONV_DEFS="-DNLMCONV_I386 -DNLMCONV_ALPHA -DNLMCONV_POWERPC -DNLMCONV_SPARC" BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)' + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" + BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' else case $targ in i[3-7]86*-*-netware*) @@ -14463,7 +13808,7 @@ do BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' ;; - arm-wince-pe* | arm-*-wince) + arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*) BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE" @@ -14519,7 +13864,7 @@ do ;; powerpc*-aix5.[01]) ;; - powerpc*-aix5.*) + powerpc*-aix[5-9].*) OBJDUMP_DEFS="-DAIX_WEAK_SUPPORT" ;; powerpc*-*-pe* | powerpc*-*-cygwin*) @@ -14531,7 +13876,7 @@ do BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' ;; - powerpc*-*-linux* | powerpc*-*-elf*) + powerpc*-*-linux* | powerpc*-*-elf* | powerpc*-*-eabi*) BUILD_INSTALL_MISC="${BUILD_INSTALL_MISC} embedspu" ;; sh*-*-pe) @@ -14644,7 +13989,9 @@ done - ac_config_files="$ac_config_files Makefile doc/Makefile po/Makefile.in:po/Make-in" + +ac_config_files="$ac_config_files Makefile doc/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 @@ -14663,39 +14010,59 @@ _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. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(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 \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : 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" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -14704,32 +14071,18 @@ 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' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs @@ -14737,40 +14090,38 @@ 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; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { 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; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= fi + if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then - { { 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; }; } + as_fn_error "conditional \"MAINTAINER_MODE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GENINSRC_NEVER_TRUE}" && test -z "${GENINSRC_NEVER_FALSE}"; then - { { 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; }; } + as_fn_error "conditional \"GENINSRC_NEVER\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -14780,81 +14131,252 @@ cat >$CONFIG_STATUS <<_ACEOF debug=false ac_cs_recheck=false ac_cs_silent=false -SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi -done + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -14862,148 +14384,123 @@ 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -15012,31 +14509,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. 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 - +# values after options handling. +ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -15044,45 +14530,46 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac -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_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -15093,84 +14580,83 @@ $config_headers Configuration commands: $config_commands -Report bugs to ." -_ACEOF +Report bugs to the package provider." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.64, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _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. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_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 ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { 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; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -15184,19 +14670,32 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 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 + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # -# INIT-COMMANDS section. +# INIT-COMMANDS # - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" @@ -15235,6 +14734,7 @@ 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"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $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"`' @@ -15251,6 +14751,7 @@ 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"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $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"`' @@ -15261,6 +14762,11 @@ lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_ 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"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $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"`' @@ -15334,6 +14840,7 @@ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ +OBJDUMP \ deplibs_check_method \ file_magic_cmd \ AR \ @@ -15346,6 +14853,7 @@ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ SHELL \ ECHO \ lt_prog_compiler_no_builtin_flag \ @@ -15354,6 +14862,11 @@ lt_prog_compiler_pic \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ @@ -15449,26 +14962,25 @@ fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "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" ;; - "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; }; };; + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;; + "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in:po/Make-in" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -15480,874 +14992,669 @@ if $ac_need_defaults; then 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, +# simply because there is no reason against having 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. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" -cat >>$CONFIG_STATUS <<_ACEOF +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } -# -# CONFIG_FILES section. -# + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@target@,$target,;t t -s,@target_cpu@,$target_cpu,;t t -s,@target_vendor@,$target_vendor,;t t -s,@target_os@,$target_os,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@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,@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,@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,@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,@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 -s,@datarootdir@,$datarootdir,;t t -s,@docdir@,$docdir,;t t -s,@htmldir@,$htmldir,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { _ACEOF - 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 +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi -fi # test -n "$CONFIG_FILES" +done +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -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 ;; +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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 ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# 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 $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac +_ACEOF - 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; } +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :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". +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" case $ac_file in - - | *:- | *:-:* ) # 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 <>$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 <>$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 + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # if test x"$ac_file" != x-; then - 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;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - 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 + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - cat $tmp/config.h - rm -f $tmp/config.h + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) 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 +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; -# 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 + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + 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 || + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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 || + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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'` + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - 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 +} ;; - libtool ) + "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. @@ -16363,36 +15670,36 @@ done #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me (GNU $PACKAGE$TIMESTAMP) $VERSION +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 # -# This file is part of GNU Libtool: -# Originally by Gordon Matzigkeit , 1996 +# 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. +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. # -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. # -# 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. +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. # -# 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. +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. @@ -16469,6 +15776,9 @@ NL2SP=$lt_lt_NL2SP reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method @@ -16502,6 +15812,9 @@ global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + # The name of the directory that contains temporary libtool files. objdir=$objdir @@ -16517,6 +15830,21 @@ MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + # Old archive suffix (normally "a"). libext=$libext @@ -16757,6 +16085,7 @@ ltmain="$ac_aux_dir/ltmain.sh" 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. @@ -16774,6 +16103,27 @@ func_basename () func_basename_result="${1##*/}" } +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special @@ -16803,10 +16153,31 @@ func_lo2o () *) func_lo2o_result=${1} ;; esac } + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + _LT_EOF ;; *) # Bourne compatible functions. cat << \_LT_EOF >> "$cfgfile" + # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. @@ -16827,6 +16198,7 @@ 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 @@ -16859,6 +16231,26 @@ func_lo2o () { func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` } + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + _LT_EOF esac @@ -16883,6 +16275,7 @@ func_append () { eval "$1=\$$1\$2" } + _LT_EOF ;; esac @@ -16896,7 +16289,7 @@ _LT_EOF chmod +x "$ofile" ;; - default-1 ) + "default-1":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in @@ -16997,17 +16390,18 @@ _LT_EOF ;; esac done ;; + esac -done -_ACEOF +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -17027,6 +16421,10 @@ if test "$no_create" != yes; then 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; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/binutils/configure.com b/binutils/configure.com index 99463d5..f199163 100644 --- a/binutils/configure.com +++ b/binutils/configure.com @@ -5,15 +5,14 @@ $! to execute it. $! $! Written by Klaus K"ampf (kkaempf@rmi.de) $! -$arch_indx = 1 + ((f$getsyi("CPU").ge.128).and.1) ! vax==1, alpha==2 -$arch = f$element(arch_indx,"|","|VAX|Alpha|") -$! +$ arch=F$GETSYI("ARCH_NAME") +$ arch=F$EDIT(arch,"LOWERCASE") +$ write sys$output "Configuring binutils for ''arch' target" $! $! Generate config.h $! -$ create []config.h -/* config.h. Generated automatically by configure. */ -/* config.in. Generated automatically from configure.in by autoheader. */ +$ create config.h +/* config.h. Generated automatically by configure.com */ /* Is the type time_t defined in ? */ #define HAVE_TIME_T_IN_TIME_H 1 /* Is the type time_t defined in ? */ @@ -22,12 +21,8 @@ $ create []config.h #define HAVE_GOOD_UTIME_H 1 /* Whether fprintf must be declared even if is included. */ #define NEED_DECLARATION_FPRINTF 1 -/* Whether sbrk must be declared even if is included. */ -#undef NEED_DECLARATION_SBRK /* Do we need to use the b modifier when opening binary files? */ /* #undef USE_BINARY_FOPEN */ -/* Define if you have the sbrk function. */ -/* #undef HAVE_SBRK 1 */ /* Define if you have the utimes function. */ #define HAVE_UTIMES 1 /* Define if you have the header file. */ @@ -42,35 +37,73 @@ $ create []config.h #define HAVE_SYS_FILE_H 1 /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 -$ write sys$output "Generated `config.h'" +/* Alloca. */ +#ifdef __DECC +#include +#define C_alloca(x) __ALLOCA(x) +#endif +$! +$! Add TARGET. +$! +$ if arch .eqs. "ia64" then target = "elf64-ia64-vms" +$ if arch .eqs. "alpha" then target = "vms-alpha" +$ if arch .eqs. "vax" then target = "vms-vax" $! +$ open/append tfile config.h +$ write tfile "#define TARGET """ + target + """" +$ close tfile +$ write sys$output "Created `config.h'" $! -$! Edit VERSION in makefile.vms-in +$ write sys$output "Generate binutils build.com" $! -$ edit/tpu/nojournal/nosection/nodisplay/command=sys$input - - []makefile.vms-in /output=[]makefile.vms +$ create build.com $DECK -! -! Get VERSION from configure.in -! - mfile := CREATE_BUFFER("mfile", "CONFIGURE.IN"); - rang := CREATE_RANGE(BEGINNING_OF(mfile), END_OF(mfile)); - match_pos := SEARCH_QUIETLY('AM_INIT_AUTOMAKE(binutils, ', FORWARD, EXACT, rang); - IF match_pos <> 0 THEN; - POSITION(BEGINNING_OF(match_pos)); - ERASE(match_pos); - vers := CURRENT_LINE-")"; - ELSE; - vers := "unknown"; - ENDIF; - - file := CREATE_BUFFER("file", GET_INFO(COMMAND_LINE, "file_name")); - rang := CREATE_RANGE(BEGINNING_OF(file), END_OF(file)); - match_pos := SEARCH_QUIETLY('@VERSION@', FORWARD, EXACT, rang); - POSITION(BEGINNING_OF(match_pos)); - ERASE(match_pos); - COPY_TEXT(vers); - WRITE_FILE(file, GET_INFO(COMMAND_LINE, "output_file")); - QUIT -$ EOD -$ write sys$output "Created `makefile.vms'" +$ DEFS="" +$ OPT="/noopt/debug" +$ CFLAGS=OPT + "/include=([],""../include"",[-.bfd])" +- + "/name=(as_is,shortened)" +- + "/prefix=(all,exc=(""getopt"",""optarg"",""optopt"",""optind"",""opterr""))" +$ BFDLIB = ",[-.bfd]libbfd.olb/lib" +$ LIBIBERTY = ",[-.libiberty]libiberty.olb/lib" +$ OPCODES = ",[-.opcodes]libopcodes.olb/lib" +$ DEBUG_FILES = ",rddbg,debug,stabs,ieee,rdcoff,dwarf" +$ BULIBS_FILES = ",bucomm,version,filemode" +$ ALL_FILES="nm,strings,addr2line,size,objdump,prdbg" +- + BULIBS_FILES + DEBUG_FILES +$! +$ write sys$output "CFLAGS=",CFLAGS +$ if p1.nes."LINK" +$ then +$ NUM = 0 +$ LOOP: +$ F = F$ELEMENT(NUM,",",ALL_FILES) +$ IF F.EQS."," THEN GOTO END +$ write sys$output "Compiling ", F, ".c" +$ cc 'CFLAGS 'F.c +$ NUM = NUM + 1 +$ GOTO LOOP +$ END: +$ endif +$ purge +$! +$ write sys$output "Building nm.exe" +$ NM_OBJS="nm.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY +$ link/exe=nm 'NM_OBJS +$! +$ write sys$output "Building strings.exe" +$ STRINGS_OBJS="strings.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY +$ link/exe=strings 'STRINGS_OBJS +$! +$ write sys$output "Building size.exe" +$ SIZE_OBJS="size.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY +$ link/exe=size 'SIZE_OBJS +$! +$ write sys$output "Building addr2line.exe" +$ ADDR2LINE_OBJS="addr2line.obj" + BULIBS_FILES + BFDLIB + LIBIBERTY +$ link/exe=addr2line 'ADDR2LINE_OBJS +$! +$ write sys$output "Building objdump.exe" +$ OBJDUMP_OBJS="objdump.obj,prdbg.obj" + DEBUG_FILES + BULIBS_FILES +- + BFDLIB + OPCODES + LIBIBERTY +$ link/exe=objdump 'OBJDUMP_OBJS +$EOD diff --git a/binutils/configure.in b/binutils/configure.in index 83704c9..9938030 100644 --- a/binutils/configure.in +++ b/binutils/configure.in @@ -1,9 +1,10 @@ dnl Process this file with autoconf to produce a configure script. dnl -AC_PREREQ(2.57) -AC_INIT(ar.c) +AC_PREREQ(2.59) +AC_INIT +AC_CONFIG_SRCDIR(ar.c) -AC_CANONICAL_SYSTEM +AC_CANONICAL_TARGET AC_ISC_POSIX changequote(,)dnl @@ -13,27 +14,41 @@ AM_INIT_AUTOMAKE(binutils, ${BFD_VERSION}) AC_PROG_CC AC_GNU_SOURCE -AC_PROG_LIBTOOL +AC_USE_SYSTEM_EXTENSIONS + +AC_PLUGINS + +case "${target}" in +changequote(,)dnl + sparc-*-solaris*|i[3-7]86-*-solaris*) +changequote([,])dnl + # See comment in bfd/configure.in for the reason for this test. + # PR 9992/binutils: We have to duplicate the behaviour of bfd's + # configure script so that the utilities in this directory agree + # on the size of structures used to describe files. + if test "${target}" = "${host}" -a "$enable_largefile" != 'yes'; then + if test "$plugins" = "no"; then + enable_largefile="no" + fi + fi + ;; +esac + +AC_SYS_LARGEFILE +LT_INIT AC_ARG_ENABLE(targets, [ --enable-targets alternative target configurations], [case "${enableval}" in - yes | "") AC_ERROR(enable-targets option must specify target names or 'all') + yes | "") AC_MSG_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 - yes) commonbfdlib=true ;; - no) commonbfdlib=false ;; - *) AC_MSG_ERROR([bad value ${enableval} for BFD commonbfdlib option]) ;; -esac])dnl AM_BINUTILS_WARNINGS -AM_CONFIG_HEADER(config.h:config.in) +AC_CONFIG_HEADERS(config.h:config.in) if test -z "$target" ; then AC_MSG_ERROR(Unrecognized target system type; please check config.sub.) @@ -45,7 +60,7 @@ fi AC_PROG_YACC AM_PROG_LEX -ALL_LINGUAS="fr tr ja es sv da zh_CN ru ro rw zh_TW fi vi uk" +ALL_LINGUAS="da es fi fr id ja ro ru rw sk sv tr uk vi zh_CN zh_TW" ZW_GNU_GETTEXT_SISTER_DIR AM_PO_SUBDIRS @@ -95,13 +110,13 @@ AC_CHECK_FUNC([mkdtemp], # needs to be defined for it AC_MSG_CHECKING([for fopen64]) AC_CACHE_VAL(bu_cv_have_fopen64, -[AC_TRY_LINK([#include ], [FILE *f = fopen64 ("/tmp/foo","r");], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [FILE *f = fopen64 ("/tmp/foo","r");])], bu_cv_have_fopen64=yes, [saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - AC_TRY_LINK([#include ], [FILE *f = fopen64 ("/tmp/foo","r");], -bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE", -bu_cv_have_fopen64=no) + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [FILE *f = fopen64 ("/tmp/foo","r");])], + bu_cv_have_fopen64="need -D_LARGEFILE64_SOURCE", + bu_cv_have_fopen64=no) CPPFLAGS=$saved_CPPFLAGS])]) AC_MSG_RESULT($bu_cv_have_fopen64) if test "$bu_cv_have_fopen64" != no; then @@ -110,13 +125,13 @@ if test "$bu_cv_have_fopen64" != no; then fi AC_MSG_CHECKING([for stat64]) AC_CACHE_VAL(bu_cv_have_stat64, -[AC_TRY_LINK([#include ], [struct stat64 st; stat64 ("/tmp/foo", &st);], +[AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [struct stat64 st; stat64 ("/tmp/foo", &st);])], bu_cv_have_stat64=yes, [saved_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" - AC_TRY_LINK([#include ], [struct stat64 st; stat64 ("/tmp/foo", &st);], -bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE", -bu_cv_have_stat64=no) + AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [struct stat64 st; stat64 ("/tmp/foo", &st);])], + bu_cv_have_stat64="need -D_LARGEFILE64_SOURCE", + bu_cv_have_stat64=no) CPPFLAGS=$saved_CPPFLAGS])]) AC_MSG_RESULT($bu_cv_have_stat64) if test "$bu_cv_have_stat64" != no; then @@ -135,7 +150,7 @@ AC_SEARCH_LIBS(frexp, m) AC_MSG_CHECKING(for time_t in time.h) AC_CACHE_VAL(bu_cv_decl_time_t_time_h, -[AC_TRY_COMPILE([#include ], [time_t i;], +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [time_t i;])], bu_cv_decl_time_t_time_h=yes, bu_cv_decl_time_t_time_h=no)]) AC_MSG_RESULT($bu_cv_decl_time_t_time_h) if test $bu_cv_decl_time_t_time_h = yes; then @@ -145,7 +160,7 @@ fi AC_MSG_CHECKING(for time_t in sys/types.h) AC_CACHE_VAL(bu_cv_decl_time_t_types_h, -[AC_TRY_COMPILE([#include ], [time_t i;], +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [time_t i;])], bu_cv_decl_time_t_types_h=yes, bu_cv_decl_time_t_types_h=no)]) AC_MSG_RESULT($bu_cv_decl_time_t_types_h) if test $bu_cv_decl_time_t_types_h = yes; then @@ -155,7 +170,7 @@ fi AC_MSG_CHECKING(for a known getopt prototype in unistd.h) AC_CACHE_VAL(bu_cv_decl_getopt_unistd_h, -[AC_TRY_COMPILE([#include ], [extern int getopt (int, char *const*, const char *);], +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include ], [extern int getopt (int, char *const*, const char *);])], bu_cv_decl_getopt_unistd_h=yes, bu_cv_decl_getopt_unistd_h=no)]) AC_MSG_RESULT($bu_cv_decl_getopt_unistd_h) if test $bu_cv_decl_getopt_unistd_h = yes; then @@ -167,12 +182,12 @@ fi # by default. AC_MSG_CHECKING([for utime.h]) AC_CACHE_VAL(bu_cv_header_utime_h, -[AC_TRY_COMPILE([#include +[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include #ifdef HAVE_TIME_H #include #endif #include ], -[struct utimbuf s;], +[struct utimbuf s;])], bu_cv_header_utime_h=yes, bu_cv_header_utime_h=no)]) AC_MSG_RESULT($bu_cv_header_utime_h) if test $bu_cv_header_utime_h = yes; then @@ -182,6 +197,11 @@ fi AC_CHECK_DECLS([fprintf, stpcpy, strstr, sbrk, getenv, environ, getc_unlocked, snprintf, vsnprintf]) +# Link in zlib if we can. This allows us to read compressed debug +# sections. This is used only by readelf.c (objdump uses bfd for +# reading compressed sections). +AC_SEARCH_LIBS(zlibVersion, z, [AC_CHECK_HEADERS(zlib.h)]) + BFD_BINARY_FOPEN # target-specific stuff: @@ -225,6 +245,14 @@ do BUILD_SRCONV='$(SRCONV_PROG)' NLMCONV_DEFS="-DNLMCONV_I386 -DNLMCONV_ALPHA -DNLMCONV_POWERPC -DNLMCONV_SPARC" BUILD_MISC="${BUILD_MISC} "'bin2c$(EXEEXT_FOR_BUILD)' + BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' + BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' + BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' + if test -z "$DLLTOOL_DEFAULT"; then + DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_I386" + fi + DLLTOOL_DEFS="$DLLTOOL_DEFS -DDLLTOOL_I386" + BUILD_DLLWRAP='$(DLLWRAP_PROG)$(EXEEXT)' else case $targ in changequote(,)dnl @@ -259,7 +287,7 @@ changequote([,])dnl BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' ;; - arm-wince-pe* | arm-*-wince) + arm-wince-pe* | arm-*-wince | arm*-*-cegcc* | arm*-*-mingw32ce*) BUILD_DLLTOOL='$(DLLTOOL_PROG)$(EXEEXT)' if test -z "$DLLTOOL_DEFAULT"; then DLLTOOL_DEFAULT="-DDLLTOOL_DEFAULT_ARM_WINCE" @@ -321,7 +349,9 @@ changequote(,)dnl powerpc*-aix5.[01]) changequote([,])dnl ;; - powerpc*-aix5.*) +changequote(,)dnl + powerpc*-aix[5-9].*) +changequote([,])dnl OBJDUMP_DEFS="-DAIX_WEAK_SUPPORT" ;; powerpc*-*-pe* | powerpc*-*-cygwin*) @@ -333,7 +363,7 @@ changequote([,])dnl BUILD_WINDRES='$(WINDRES_PROG)$(EXEEXT)' BUILD_WINDMC='$(WINDMC_PROG)$(EXEEXT)' ;; - powerpc*-*-linux* | powerpc*-*-elf*) + powerpc*-*-linux* | powerpc*-*-elf* | powerpc*-*-eabi*) BUILD_INSTALL_MISC="${BUILD_INSTALL_MISC} embedspu" ;; sh*-*-pe) @@ -438,5 +468,7 @@ AC_SUBST(EMULATION_VECTOR) AC_SUBST(datarootdir) AC_SUBST(docdir) AC_SUBST(htmldir) +AC_SUBST(pdfdir) -AC_OUTPUT(Makefile doc/Makefile po/Makefile.in:po/Make-in) +AC_CONFIG_FILES(Makefile doc/Makefile po/Makefile.in:po/Make-in) +AC_OUTPUT diff --git a/binutils/configure.tgt b/binutils/configure.tgt index 2d5ce2b..253f731 100644 --- a/binutils/configure.tgt +++ b/binutils/configure.tgt @@ -9,7 +9,7 @@ # targ_emul_vector name of vector to use case "${targ}" in - powerpc-*-aix5* | rs6000-*-aix5*) + powerpc-*-aix[5-9]* | rs6000-*-aix[5-9]*) targ_emul=aix targ_emul_vector=bin_aix5_emulation ;; diff --git a/binutils/cxxfilt.c b/binutils/cxxfilt.c index e0d1b3f..770df9b 100644 --- a/binutils/cxxfilt.c +++ b/binutils/cxxfilt.c @@ -63,12 +63,12 @@ demangle_it (char *mangled_name) result = cplus_demangle (mangled_name + skip_first, flags); if (result == NULL) - printf (mangled_name); + printf ("%s", mangled_name); else { if (mangled_name[0] == '.') putchar ('.'); - printf (result); + printf ("%s", result); free (result); } } diff --git a/binutils/debug.c b/binutils/debug.c index 79f591f..57f5a2d 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, 2007 + Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor . @@ -96,7 +96,7 @@ struct debug_file /* A type. */ -struct debug_type +struct debug_type_s { /* Kind of type. */ enum debug_type_kind kind; @@ -118,11 +118,11 @@ struct debug_type /* DEBUG_KIND_ENUM. */ struct debug_enum_type *kenum; /* DEBUG_KIND_POINTER. */ - struct debug_type *kpointer; + struct debug_type_s *kpointer; /* DEBUG_KIND_FUNCTION. */ struct debug_function_type *kfunction; /* DEBUG_KIND_REFERENCE. */ - struct debug_type *kreference; + struct debug_type_s *kreference; /* DEBUG_KIND_RANGE. */ struct debug_range_type *krange; /* DEBUG_KIND_ARRAY. */ @@ -134,9 +134,9 @@ struct debug_type /* DEBUG_KIND_METHOD. */ struct debug_method_type *kmethod; /* DEBUG_KIND_CONST. */ - struct debug_type *kconst; + struct debug_type_s *kconst; /* DEBUG_KIND_VOLATILE. */ - struct debug_type *kvolatile; + struct debug_type_s *kvolatile; /* DEBUG_KIND_NAMED, DEBUG_KIND_TAGGED. */ struct debug_named_type *knamed; } u; @@ -271,12 +271,12 @@ struct debug_named_type /* A field in a struct or union. */ -struct debug_field +struct debug_field_s { /* Name of the field. */ const char *name; /* Type of the field. */ - struct debug_type *type; + struct debug_type_s *type; /* Visibility of the field. */ enum debug_visibility visibility; /* Whether this is a static member. */ @@ -301,37 +301,37 @@ struct debug_field /* A base class for an object. */ -struct debug_baseclass +struct debug_baseclass_s { /* Type of the base class. */ - struct debug_type *type; + struct debug_type_s *type; /* Bit position of the base class in the object. */ unsigned int bitpos; /* Whether the base class is virtual. */ - bfd_boolean virtual; + bfd_boolean is_virtual; /* Visibility of the base class. */ enum debug_visibility visibility; }; /* A method of an object. */ -struct debug_method +struct debug_method_s { /* The name of the method. */ const char *name; /* A NULL terminated array of different types of variants. */ - struct debug_method_variant **variants; + struct debug_method_variant_s **variants; }; /* The variants of a method function of an object. These indicate which method to run. */ -struct debug_method_variant +struct debug_method_variant_s { /* The physical name of the function. */ const char *physname; /* The type of the function. */ - struct debug_type *type; + struct debug_type_s *type; /* The visibility of the function. */ enum debug_visibility visibility; /* Whether the function is const. */ @@ -343,7 +343,7 @@ struct debug_method_variant /* If voffset is VOFFSET_STATIC_METHOD, this is a static method. */ #define VOFFSET_STATIC_METHOD ((bfd_vma) -1) /* Context of a virtual method function. */ - struct debug_type *context; + struct debug_type_s *context; }; /* A variable. This is the information we keep for a variable object. @@ -500,9 +500,9 @@ struct debug_name union { /* DEBUG_OBJECT_TYPE. */ - struct debug_type *type; + struct debug_type_s *type; /* DEBUG_OBJECT_TAG. */ - struct debug_type *tag; + struct debug_type_s *tag; /* DEBUG_OBJECT_VARIABLE. */ struct debug_variable *variable; /* DEBUG_OBJECT_FUNCTION. */ @@ -524,7 +524,7 @@ struct debug_class_id /* Next ID number. */ struct debug_class_id *next; /* The type with the ID. */ - struct debug_type *type; + struct debug_type_s *type; /* The tag; NULL if no tag. */ const char *tag; }; @@ -537,8 +537,8 @@ struct debug_type_compare_list /* Next type on list. */ struct debug_type_compare_list *next; /* The types we are comparing. */ - struct debug_type *t1; - struct debug_type *t2; + struct debug_type_s *t1; + struct debug_type_s *t2; }; /* During debug_get_real_type, a linked list of these structures is @@ -549,7 +549,7 @@ struct debug_type_real_list /* Next type on list. */ struct debug_type_real_list *next; /* The type we are checking. */ - struct debug_type *t; + struct debug_type_s *t; }; /* Local functions. */ @@ -561,19 +561,19 @@ static struct debug_name *debug_add_to_namespace static struct debug_name *debug_add_to_current_namespace (struct debug_handle *, const char *, enum debug_object_kind, enum debug_object_linkage); -static struct debug_type *debug_make_type +static struct debug_type_s *debug_make_type (struct debug_handle *, enum debug_type_kind, unsigned int); -static struct debug_type *debug_get_real_type +static struct debug_type_s *debug_get_real_type (void *, debug_type, struct debug_type_real_list *); static bfd_boolean debug_write_name (struct debug_handle *, const struct debug_write_fns *, void *, struct debug_name *); static bfd_boolean debug_write_type (struct debug_handle *, const struct debug_write_fns *, void *, - struct debug_type *, struct debug_name *); + struct debug_type_s *, struct debug_name *); static bfd_boolean debug_write_class_type (struct debug_handle *, const struct debug_write_fns *, void *, - struct debug_type *, const char *); + struct debug_type_s *, const char *); static bfd_boolean debug_write_function (struct debug_handle *, const struct debug_write_fns *, void *, const char *, enum debug_object_linkage, struct debug_function *); @@ -583,11 +583,11 @@ static bfd_boolean debug_write_block static bfd_boolean debug_write_linenos (struct debug_handle *, const struct debug_write_fns *, void *, bfd_vma); static bfd_boolean debug_set_class_id - (struct debug_handle *, const char *, struct debug_type *); + (struct debug_handle *, const char *, struct debug_type_s *); static bfd_boolean debug_type_samep - (struct debug_handle *, struct debug_type *, struct debug_type *); + (struct debug_handle *, struct debug_type_s *, struct debug_type_s *); static bfd_boolean debug_class_type_samep - (struct debug_handle *, struct debug_type *, struct debug_type *); + (struct debug_handle *, struct debug_type_s *, struct debug_type_s *); /* Issue an error message. */ @@ -1172,13 +1172,13 @@ debug_record_variable (void *handle, const char *name, debug_type type, /* Make a type with a given kind and size. */ -static struct debug_type * +static struct debug_type_s * debug_make_type (struct debug_handle *info ATTRIBUTE_UNUSED, enum debug_type_kind kind, unsigned int size) { - struct debug_type *t; + struct debug_type_s *t; - t = (struct debug_type *) xmalloc (sizeof *t); + t = (struct debug_type_s *) xmalloc (sizeof *t); memset (t, 0, sizeof *t); t->kind = kind; @@ -1194,7 +1194,7 @@ debug_type debug_make_indirect_type (void *handle, debug_type *slot, const char *tag) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_indirect_type *i; t = debug_make_type (info, DEBUG_KIND_INDIRECT, 0); @@ -1229,7 +1229,7 @@ debug_type debug_make_int_type (void *handle, unsigned int size, bfd_boolean unsignedp) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; t = debug_make_type (info, DEBUG_KIND_INT, size); if (t == NULL) @@ -1281,7 +1281,7 @@ debug_make_struct_type (void *handle, bfd_boolean structp, bfd_vma size, debug_field *fields) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_class_type *c; t = debug_make_type (info, @@ -1314,7 +1314,7 @@ debug_make_object_type (void *handle, bfd_boolean structp, bfd_vma size, bfd_boolean ownvptr) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_class_type *c; t = debug_make_type (info, @@ -1347,7 +1347,7 @@ debug_make_enum_type (void *handle, const char **names, bfd_signed_vma *values) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_enum_type *e; t = debug_make_type (info, DEBUG_KIND_ENUM, 0); @@ -1371,7 +1371,7 @@ debug_type debug_make_pointer_type (void *handle, debug_type type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; if (type == NULL) return DEBUG_TYPE_NULL; @@ -1398,7 +1398,7 @@ debug_make_function_type (void *handle, debug_type type, debug_type *arg_types, bfd_boolean varargs) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_function_type *f; if (type == NULL) @@ -1426,7 +1426,7 @@ debug_type debug_make_reference_type (void *handle, debug_type type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; if (type == NULL) return DEBUG_TYPE_NULL; @@ -1447,7 +1447,7 @@ debug_make_range_type (void *handle, debug_type type, bfd_signed_vma lower, bfd_signed_vma upper) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_range_type *r; if (type == NULL) @@ -1481,7 +1481,7 @@ debug_make_array_type (void *handle, debug_type element_type, bfd_signed_vma upper, bfd_boolean stringp) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_array_type *a; if (element_type == NULL || range_type == NULL) @@ -1513,7 +1513,7 @@ debug_type debug_make_set_type (void *handle, debug_type type, bfd_boolean bitstringp) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_set_type *s; if (type == NULL) @@ -1544,7 +1544,7 @@ debug_make_offset_type (void *handle, debug_type base_type, debug_type target_type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_offset_type *o; if (base_type == NULL || target_type == NULL) @@ -1575,7 +1575,7 @@ debug_make_method_type (void *handle, debug_type return_type, bfd_boolean varargs) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_method_type *m; if (return_type == NULL) @@ -1604,7 +1604,7 @@ debug_type debug_make_const_type (void *handle, debug_type type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; if (type == NULL) return DEBUG_TYPE_NULL; @@ -1624,7 +1624,7 @@ debug_type debug_make_volatile_type (void *handle, debug_type type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; if (type == NULL) return DEBUG_TYPE_NULL; @@ -1646,7 +1646,7 @@ debug_make_undefined_tagged_type (void *handle, const char *name, enum debug_type_kind kind) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; if (name == NULL) return DEBUG_TYPE_NULL; @@ -1680,17 +1680,17 @@ debug_make_undefined_tagged_type (void *handle, const char *name, debug_baseclass debug_make_baseclass (void *handle ATTRIBUTE_UNUSED, debug_type type, - bfd_vma bitpos, bfd_boolean virtual, + bfd_vma bitpos, bfd_boolean is_virtual, enum debug_visibility visibility) { - struct debug_baseclass *b; + struct debug_baseclass_s *b; - b = (struct debug_baseclass *) xmalloc (sizeof *b); + b = (struct debug_baseclass_s *) xmalloc (sizeof *b); memset (b, 0, sizeof *b); b->type = type; b->bitpos = bitpos; - b->virtual = virtual; + b->is_virtual = is_virtual; b->visibility = visibility; return b; @@ -1707,9 +1707,9 @@ debug_make_field (void *handle ATTRIBUTE_UNUSED, const char *name, debug_type type, bfd_vma bitpos, bfd_vma bitsize, enum debug_visibility visibility) { - struct debug_field *f; + struct debug_field_s *f; - f = (struct debug_field *) xmalloc (sizeof *f); + f = (struct debug_field_s *) xmalloc (sizeof *f); memset (f, 0, sizeof *f); f->name = name; @@ -1733,9 +1733,9 @@ debug_make_static_member (void *handle ATTRIBUTE_UNUSED, const char *name, debug_type type, const char *physname, enum debug_visibility visibility) { - struct debug_field *f; + struct debug_field_s *f; - f = (struct debug_field *) xmalloc (sizeof *f); + f = (struct debug_field_s *) xmalloc (sizeof *f); memset (f, 0, sizeof *f); f->name = name; @@ -1754,9 +1754,9 @@ debug_method debug_make_method (void *handle ATTRIBUTE_UNUSED, const char *name, debug_method_variant *variants) { - struct debug_method *m; + struct debug_method_s *m; - m = (struct debug_method *) xmalloc (sizeof *m); + m = (struct debug_method_s *) xmalloc (sizeof *m); memset (m, 0, sizeof *m); m->name = name; @@ -1781,9 +1781,9 @@ debug_make_method_variant (void *handle ATTRIBUTE_UNUSED, bfd_boolean constp, bfd_boolean volatilep, bfd_vma voffset, debug_type context) { - struct debug_method_variant *m; + struct debug_method_variant_s *m; - m = (struct debug_method_variant *) xmalloc (sizeof *m); + m = (struct debug_method_variant_s *) xmalloc (sizeof *m); memset (m, 0, sizeof *m); m->physname = physname; @@ -1807,9 +1807,9 @@ debug_make_static_method_variant (void *handle ATTRIBUTE_UNUSED, enum debug_visibility visibility, bfd_boolean constp, bfd_boolean volatilep) { - struct debug_method_variant *m; + struct debug_method_variant_s *m; - m = (struct debug_method_variant *) xmalloc (sizeof *m); + m = (struct debug_method_variant_s *) xmalloc (sizeof *m); memset (m, 0, sizeof *m); m->physname = physname; @@ -1828,7 +1828,7 @@ debug_type debug_name_type (void *handle, const char *name, debug_type type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_named_type *n; struct debug_name *nm; @@ -1874,7 +1874,7 @@ debug_type debug_tag_type (void *handle, const char *name, debug_type type) { struct debug_handle *info = (struct debug_handle *) handle; - struct debug_type *t; + struct debug_type_s *t; struct debug_named_type *n; struct debug_name *nm; @@ -2030,7 +2030,7 @@ debug_find_tagged_type (void *handle, const char *name, /* Get a base type. We build a linked list on the stack to avoid crashing if the type is defined circularly. */ -static struct debug_type * +static struct debug_type_s * debug_get_real_type (void *handle, debug_type type, struct debug_type_real_list *list) { @@ -2415,7 +2415,7 @@ debug_write_name (struct debug_handle *info, static bfd_boolean debug_write_type (struct debug_handle *info, const struct debug_write_fns *fns, void *fhandle, - struct debug_type *type, struct debug_name *name) + struct debug_type_s *type, struct debug_name *name) { unsigned int i; int is; @@ -2434,7 +2434,7 @@ debug_write_type (struct debug_handle *info, return (*fns->typedef_type) (fhandle, type->u.knamed->name->name); else { - struct debug_type *real; + struct debug_type_s *real; unsigned int id; real = debug_get_real_type ((void *) info, type, NULL); @@ -2531,7 +2531,7 @@ debug_write_type (struct debug_handle *info, { for (i = 0; type->u.kclass->fields[i] != NULL; i++) { - struct debug_field *f; + struct debug_field_s *f; f = type->u.kclass->fields[i]; if (! debug_write_type (info, fns, fhandle, f->type, @@ -2660,11 +2660,11 @@ debug_write_type (struct debug_handle *info, static bfd_boolean debug_write_class_type (struct debug_handle *info, const struct debug_write_fns *fns, void *fhandle, - struct debug_type *type, const char *tag) + struct debug_type_s *type, const char *tag) { unsigned int i; unsigned int id; - struct debug_type *vptrbase; + struct debug_type_s *vptrbase; if (type->u.kclass == NULL) { @@ -2713,7 +2713,7 @@ debug_write_class_type (struct debug_handle *info, { for (i = 0; type->u.kclass->fields[i] != NULL; i++) { - struct debug_field *f; + struct debug_field_s *f; f = type->u.kclass->fields[i]; if (! debug_write_type (info, fns, fhandle, f->type, @@ -2739,13 +2739,13 @@ debug_write_class_type (struct debug_handle *info, { for (i = 0; type->u.kclass->baseclasses[i] != NULL; i++) { - struct debug_baseclass *b; + struct debug_baseclass_s *b; b = type->u.kclass->baseclasses[i]; if (! debug_write_type (info, fns, fhandle, b->type, (struct debug_name *) NULL)) return FALSE; - if (! (*fns->class_baseclass) (fhandle, b->bitpos, b->virtual, + if (! (*fns->class_baseclass) (fhandle, b->bitpos, b->is_virtual, b->visibility)) return FALSE; } @@ -2755,7 +2755,7 @@ debug_write_class_type (struct debug_handle *info, { for (i = 0; type->u.kclass->methods[i] != NULL; i++) { - struct debug_method *m; + struct debug_method_s *m; unsigned int j; m = type->u.kclass->methods[i]; @@ -2763,7 +2763,7 @@ debug_write_class_type (struct debug_handle *info, return FALSE; for (j = 0; m->variants[j] != NULL; j++) { - struct debug_method_variant *v; + struct debug_method_variant_s *v; v = m->variants[j]; if (v->context != NULL) @@ -2935,7 +2935,7 @@ debug_write_linenos (struct debug_handle *info, static bfd_boolean debug_set_class_id (struct debug_handle *info, const char *tag, - struct debug_type *type) + struct debug_type_s *type) { struct debug_class_type *c; struct debug_class_id *l; @@ -2996,8 +2996,8 @@ debug_set_class_id (struct debug_handle *info, const char *tag, tags and the like. */ static bfd_boolean -debug_type_samep (struct debug_handle *info, struct debug_type *t1, - struct debug_type *t2) +debug_type_samep (struct debug_handle *info, struct debug_type_s *t1, + struct debug_type_s *t2) { struct debug_type_compare_list *l; struct debug_type_compare_list top; @@ -3133,7 +3133,7 @@ debug_type_samep (struct debug_handle *info, struct debug_type *t1, ret = TRUE; else { - struct debug_type **a1, **a2; + struct debug_type_s **a1, **a2; a1 = t1->u.kfunction->arg_types; a2 = t2->u.kfunction->arg_types; @@ -3191,7 +3191,7 @@ debug_type_samep (struct debug_handle *info, struct debug_type *t1, ret = TRUE; else { - struct debug_type **a1, **a2; + struct debug_type_s **a1, **a2; a1 = t1->u.kmethod->arg_types; a2 = t2->u.kmethod->arg_types; @@ -3231,8 +3231,8 @@ debug_type_samep (struct debug_handle *info, struct debug_type *t1, debug_type_samep. */ static bfd_boolean -debug_class_type_samep (struct debug_handle *info, struct debug_type *t1, - struct debug_type *t2) +debug_class_type_samep (struct debug_handle *info, struct debug_type_s *t1, + struct debug_type_s *t2) { struct debug_class_type *c1, *c2; @@ -3247,13 +3247,13 @@ debug_class_type_samep (struct debug_handle *info, struct debug_type *t1, if (c1->fields != NULL) { - struct debug_field **pf1, **pf2; + struct debug_field_s **pf1, **pf2; for (pf1 = c1->fields, pf2 = c2->fields; *pf1 != NULL && *pf2 != NULL; pf1++, pf2++) { - struct debug_field *f1, *f2; + struct debug_field_s *f1, *f2; f1 = *pf1; f2 = *pf2; @@ -3296,18 +3296,18 @@ debug_class_type_samep (struct debug_handle *info, struct debug_type *t1, if (c1->baseclasses != NULL) { - struct debug_baseclass **pb1, **pb2; + struct debug_baseclass_s **pb1, **pb2; for (pb1 = c1->baseclasses, pb2 = c2->baseclasses; *pb1 != NULL && *pb2 != NULL; ++pb1, ++pb2) { - struct debug_baseclass *b1, *b2; + struct debug_baseclass_s *b1, *b2; b1 = *pb1; b2 = *pb2; if (b1->bitpos != b2->bitpos - || b1->virtual != b2->virtual + || b1->is_virtual != b2->is_virtual || b1->visibility != b2->visibility || ! debug_type_samep (info, b1->type, b2->type)) return FALSE; @@ -3318,13 +3318,13 @@ debug_class_type_samep (struct debug_handle *info, struct debug_type *t1, if (c1->methods != NULL) { - struct debug_method **pm1, **pm2; + struct debug_method_s **pm1, **pm2; for (pm1 = c1->methods, pm2 = c2->methods; *pm1 != NULL && *pm2 != NULL; ++pm1, ++pm2) { - struct debug_method *m1, *m2; + struct debug_method_s *m1, *m2; m1 = *pm1; m2 = *pm2; @@ -3334,13 +3334,13 @@ debug_class_type_samep (struct debug_handle *info, struct debug_type *t1, return FALSE; if (m1->variants == NULL) { - struct debug_method_variant **pv1, **pv2; + struct debug_method_variant_s **pv1, **pv2; for (pv1 = m1->variants, pv2 = m2->variants; *pv1 != NULL && *pv2 != NULL; ++pv1, ++pv2) { - struct debug_method_variant *v1, *v2; + struct debug_method_variant_s *v1, *v2; v1 = *pv1; v2 = *pv2; diff --git a/binutils/debug.h b/binutils/debug.h index ec93fde..3ba344c 100644 --- a/binutils/debug.h +++ b/binutils/debug.h @@ -1,5 +1,5 @@ /* debug.h -- Describe generic debugging information. - Copyright 1995, 1996, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 1995, 1996, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of GNU Binutils. @@ -132,32 +132,32 @@ enum debug_visibility /* A type. */ -typedef struct debug_type *debug_type; +typedef struct debug_type_s *debug_type; #define DEBUG_TYPE_NULL ((debug_type) NULL) /* A field in a struct or union. */ -typedef struct debug_field *debug_field; +typedef struct debug_field_s *debug_field; #define DEBUG_FIELD_NULL ((debug_field) NULL) /* A base class for an object. */ -typedef struct debug_baseclass *debug_baseclass; +typedef struct debug_baseclass_s *debug_baseclass; #define DEBUG_BASECLASS_NULL ((debug_baseclass) NULL) /* A method of an object. */ -typedef struct debug_method *debug_method; +typedef struct debug_method_s *debug_method; #define DEBUG_METHOD_NULL ((debug_method) NULL) /* The arguments to a method function of an object. These indicate which method to run. */ -typedef struct debug_method_variant *debug_method_variant; +typedef struct debug_method_variant_s *debug_method_variant; #define DEBUG_METHOD_VARIANT_NULL ((debug_method_variant) NULL) diff --git a/binutils/deflex.c b/binutils/deflex.c index 9f69892..27871e0 100644 --- a/binutils/deflex.c +++ b/binutils/deflex.c @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 33 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -30,7 +30,7 @@ /* C99 systems have . Non-C99 systems may or may not. */ -#if __STDC_VERSION__ >= 199901L +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. @@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t; #else /* ! __cplusplus */ -#if __STDC__ +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) #define YY_USE_CONST -#endif /* __STDC__ */ +#endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST @@ -151,7 +152,12 @@ typedef unsigned int flex_uint32_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int yyleng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; extern FILE *yyin, *yyout; @@ -177,16 +183,6 @@ extern FILE *yyin, *yyout; #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). - */ - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef unsigned int yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -204,7 +200,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -274,8 +270,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; @@ -303,7 +299,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); @@ -607,7 +603,7 @@ char *yytext; int linenumber; -#line 611 "deflex.c" +#line 607 "deflex.c" #define INITIAL 0 @@ -625,6 +621,35 @@ int linenumber; static int yy_init_globals (void ); +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + /* Macros after this point can all be overridden by user definitions in * section 1. */ @@ -667,7 +692,7 @@ static int input (void ); /* 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 ) +#define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -678,7 +703,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -762,7 +787,7 @@ YY_DECL #line 36 "deflex.l" -#line 766 "deflex.c" +#line 791 "deflex.c" if ( !(yy_init) ) { @@ -1065,7 +1090,7 @@ YY_RULE_SETUP #line 93 "deflex.l" ECHO; YY_BREAK -#line 1069 "deflex.c" +#line 1094 "deflex.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1251,7 +1276,7 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -1265,7 +1290,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1296,7 +1321,7 @@ static int yy_get_next_buffer (void) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } @@ -1320,6 +1345,14 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; @@ -1398,7 +1431,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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 yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -1447,7 +1480,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -1471,7 +1504,7 @@ static int yy_get_next_buffer (void) case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) - return EOF; + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -1723,7 +1756,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -1735,7 +1768,9 @@ static void yyensure_buffer_stack (void) (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); - + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; @@ -1753,6 +1788,8 @@ static void yyensure_buffer_stack (void) ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -1816,12 +1853,11 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; - yy_size_t n; - int i; + yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -1903,7 +1939,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } diff --git a/binutils/defparse.c b/binutils/defparse.c index 0eb72e0..52ef115 100644 --- a/binutils/defparse.c +++ b/binutils/defparse.c @@ -133,7 +133,7 @@ #line 1 "defparse.y" /* defparse.y - parser for .def files */ -/* Copyright 1995, 1997, 1998, 1999, 2001, 2004, 2007 +/* Copyright 1995, 1997, 1998, 1999, 2001, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -184,7 +184,7 @@ typedef union YYSTYPE char *id; int number; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 189 "defparse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -248,7 +248,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -746,7 +746,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ diff --git a/binutils/defparse.h b/binutils/defparse.h index 039b4b0..312fb41 100644 --- a/binutils/defparse.h +++ b/binutils/defparse.h @@ -109,7 +109,7 @@ typedef union YYSTYPE char *id; int number; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 114 "defparse.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/binutils/defparse.y b/binutils/defparse.y index 1f44fe1..6493c12 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, 2007 +/* Copyright 1995, 1997, 1998, 1999, 2001, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/dep-in.sed b/binutils/dep-in.sed index c30c396..4823f1e 100644 --- a/binutils/dep-in.sed +++ b/binutils/dep-in.sed @@ -1,6 +1,7 @@ :loop /\\$/N -/\\$/b loop +s/\\\n */ /g +t loop s! \./! !g s!@INCDIR@!$(INCDIR)!g @@ -11,11 +12,9 @@ s!@SRCDIR@/!!g s!@OBJDIR@/!!g s! \.\./intl/libintl\.h!!g -s/\\\n */ /g - s/ *$// s/ */ /g -/:$/d - -s/\(.\{50\}[^ ]*\) /\1 \\\ - /g +s/^ */A/ +s/ / \\\ +B/g +$s/$/ \\/ diff --git a/binutils/dlltool.c b/binutils/dlltool.c index 6790646..71fd993 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, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -241,8 +241,8 @@ #define show_allnames 0 -#define PAGE_SIZE 4096 -#define PAGE_MASK (-PAGE_SIZE) +#define PAGE_SIZE ((bfd_vma) 4096) +#define PAGE_MASK ((bfd_vma) (-4096)) #include "sysdep.h" #include "bfd.h" #include "libiberty.h" @@ -271,7 +271,7 @@ static char *look_for_prog (const char *, const char *, int); static char *deduce_name (const char *); #ifdef DLLTOOL_MCORE_ELF -static void mcore_elf_cache_filename (char *); +static void mcore_elf_cache_filename (const char *); static void mcore_elf_gen_out_file (void); #endif @@ -352,6 +352,38 @@ static int no_idata4; static int no_idata5; static char *exp_name; static char *imp_name; +static char *delayimp_name; +static char *identify_imp_name; +static bfd_boolean identify_strict; + +/* Types used to implement a linked list of dllnames associated + with the specified import lib. Used by the identify_* code. + The head entry is acts as a sentinal node and is always empty + (head->dllname is NULL). */ +typedef struct dll_name_list_node_t +{ + char * dllname; + struct dll_name_list_node_t * next; +} dll_name_list_node_type; +typedef struct dll_name_list_t +{ + dll_name_list_node_type * head; + dll_name_list_node_type * tail; +} dll_name_list_type; + +/* Types used to pass data to iterator functions. */ +typedef struct symname_search_data_t +{ + const char * symname; + bfd_boolean found; +} symname_search_data_type; +typedef struct identify_data_t +{ + dll_name_list_type * list; + bfd_boolean ms_style_implib; +} identify_data_type; + + static char *head_label; static char *imp_name_lab; static char *dll_name; @@ -369,6 +401,8 @@ static bfd_boolean export_all_symbols; exporting all symbols. */ static bfd_boolean do_default_excludes = TRUE; +static bfd_boolean use_nul_prefixed_import_tables = FALSE; + /* Default symbols to exclude when exporting all the symbols. */ static const char *default_excludes = "DllMain@12,DllEntryPoint@0,impure_ptr"; @@ -376,6 +410,9 @@ static const char *default_excludes = "DllMain@12,DllEntryPoint@0,impure_ptr"; compatibility to old Cygwin releases. */ static bfd_boolean create_compat_implib; +/* TRUE if we have to write PE+ import libraries. */ +static bfd_boolean create_for_pep; + static char *def_file; extern char * program_name; @@ -463,6 +500,13 @@ static const unsigned char i386_jtab[] = 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x90, 0x90 }; +static const unsigned char i386_dljtab[] = +{ + 0xFF, 0x25, 0x00, 0x00, 0x00, 0x00, /* jmp __imp__function */ + 0xB8, 0x00, 0x00, 0x00, 0x00, /* mov eax, offset __imp__function */ + 0xE9, 0x00, 0x00, 0x00, 0x00 /* jmp __tailMerge__dllname */ +}; + static const unsigned char arm_jtab[] = { 0x00, 0xc0, 0x9f, 0xe5, /* ldr ip, [pc] */ @@ -529,6 +573,16 @@ static const unsigned char ppc_jtab[] = static bfd_vma ppc_glue_insn = 0x80410004; #endif +static const char i386_trampoline[] = + "\tpushl %%ecx\n" + "\tpushl %%edx\n" + "\tpushl %%eax\n" + "\tpushl $__DELAY_IMPORT_DESCRIPTOR_%s\n" + "\tcall ___delayLoadHelper2@8\n" + "\tpopl %%edx\n" + "\tpopl %%ecx\n" + "\tjmp *%%eax\n"; + struct mac { const char *type; @@ -548,6 +602,12 @@ struct mac const unsigned char *how_jtab; int how_jtab_size; /* Size of the jtab entry. */ int how_jtab_roff; /* Offset into it for the ind 32 reloc into idata 5. */ + const unsigned char *how_dljtab; + int how_dljtab_size; /* Size of the dljtab entry. */ + int how_dljtab_roff1; /* Offset for the ind 32 reloc into idata 5. */ + int how_dljtab_roff2; /* Offset for the ind 32 reloc into idata 5. */ + int how_dljtab_roff3; /* Offset for the ind 32 reloc into idata 5. */ + const char *trampoline; }; static const struct mac @@ -559,7 +619,8 @@ mtable[] = "ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long", ".global", ".space", ".align\t2",".align\t4", "-mapcs-32", "pe-arm-little", bfd_arch_arm, - arm_jtab, sizeof (arm_jtab), 8 + arm_jtab, sizeof (arm_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -567,7 +628,8 @@ mtable[] = "i386", ".byte", ".short", ".long", ".asciz", "#", "jmp *", ".global", ".space", ".align\t2",".align\t4", "", "pe-i386",bfd_arch_i386, - i386_jtab, sizeof (i386_jtab), 2 + i386_jtab, sizeof (i386_jtab), 2, + i386_dljtab, sizeof (i386_dljtab), 2, 7, 12, i386_trampoline } , { @@ -575,7 +637,8 @@ mtable[] = "ppc", ".byte", ".short", ".long", ".asciz", "#", "jmp *", ".global", ".space", ".align\t2",".align\t4", "", "pe-powerpcle",bfd_arch_powerpc, - ppc_jtab, sizeof (ppc_jtab), 0 + ppc_jtab, sizeof (ppc_jtab), 0, + 0, 0, 0, 0, 0, 0 } , { @@ -584,7 +647,8 @@ mtable[] = "push\t{r6}\n\tldr\tr6, [pc, #8]\n\tldr\tr6, [r6]\n\tmov\tip, r6\n\tpop\t{r6}\n\tbx\tip", ".global", ".space", ".align\t2",".align\t4", "-mthumb-interwork", "pe-arm-little", bfd_arch_arm, - thumb_jtab, sizeof (thumb_jtab), 12 + thumb_jtab, sizeof (thumb_jtab), 12, + 0, 0, 0, 0, 0, 0 } , #define MARM_INTERWORK 4 @@ -593,7 +657,8 @@ mtable[] = "ldr\tip,[pc]\n\tldr\tip,[ip]\n\tbx\tip\n\t.long", ".global", ".space", ".align\t2",".align\t4", "-mthumb-interwork", "pe-arm-little", bfd_arch_arm, - arm_interwork_jtab, sizeof (arm_interwork_jtab), 12 + arm_interwork_jtab, sizeof (arm_interwork_jtab), 12, + 0, 0, 0, 0, 0, 0 } , { @@ -602,7 +667,8 @@ mtable[] = "lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long", ".global", ".space", ".align\t2",".align\t4", "", "pe-mcore-big", bfd_arch_mcore, - mcore_be_jtab, sizeof (mcore_be_jtab), 8 + mcore_be_jtab, sizeof (mcore_be_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -611,7 +677,8 @@ mtable[] = "lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long", ".global", ".space", ".align\t2",".align\t4", "-EL", "pe-mcore-little", bfd_arch_mcore, - mcore_le_jtab, sizeof (mcore_le_jtab), 8 + mcore_le_jtab, sizeof (mcore_le_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -620,7 +687,8 @@ mtable[] = "lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long", ".global", ".space", ".align\t2",".align\t4", "", "elf32-mcore-big", bfd_arch_mcore, - mcore_be_jtab, sizeof (mcore_be_jtab), 8 + mcore_be_jtab, sizeof (mcore_be_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -629,7 +697,8 @@ mtable[] = "lrw r1,[1f]\n\tld.w r1,(r1,0)\n\tjmp r1\n\tnop\n1:.long", ".global", ".space", ".align\t2",".align\t4", "-EL", "elf32-mcore-little", bfd_arch_mcore, - mcore_le_jtab, sizeof (mcore_le_jtab), 8 + mcore_le_jtab, sizeof (mcore_le_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -638,7 +707,8 @@ mtable[] = "ldr\tip,[pc]\n\tldr\tpc,[ip]\n\t.long", ".global", ".space", ".align\t2",".align\t4", "", "epoc-pe-arm-little", bfd_arch_arm, - arm_jtab, sizeof (arm_jtab), 8 + arm_jtab, sizeof (arm_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -647,7 +717,8 @@ mtable[] = "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 + arm_jtab, sizeof (arm_jtab), 8, + 0, 0, 0, 0, 0, 0 } , { @@ -655,10 +726,11 @@ mtable[] = "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 + i386_jtab, sizeof (i386_jtab), 2, + i386_dljtab, sizeof (i386_dljtab), 2, 7, 12, i386_trampoline } , - { 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 } }; typedef struct dlist @@ -712,7 +784,7 @@ static void scan_open_obj_file (bfd *); static void scan_obj_file (const char *); static void dump_def_info (FILE *); static int sfunc (const void *, const void *); -static void flush_page (FILE *, long *, int, int); +static void flush_page (FILE *, bfd_vma *, bfd_vma, int); static void gen_def_file (void); static void generate_idata_ofile (FILE *); static void assemble_file (const char *, const char *); @@ -720,10 +792,25 @@ static void gen_exp_file (void); static const char *xlate (const char *); static char *make_label (const char *, const char *); static char *make_imp_label (const char *, const char *); -static bfd *make_one_lib_file (export_type *, int); +static bfd *make_one_lib_file (export_type *, int, int); static bfd *make_head (void); static bfd *make_tail (void); -static void gen_lib_file (void); +static bfd *make_delay_head (void); +static void gen_lib_file (int); +static void dll_name_list_append (dll_name_list_type *, bfd_byte *); +static int dll_name_list_count (dll_name_list_type *); +static void dll_name_list_print (dll_name_list_type *); +static void dll_name_list_free_contents (dll_name_list_node_type *); +static void dll_name_list_free (dll_name_list_type *); +static dll_name_list_type * dll_name_list_create (void); +static void identify_dll_for_implib (void); +static void identify_search_archive + (bfd *, void (*) (bfd *, bfd *, void *), void *); +static void identify_search_member (bfd *, bfd *, void *); +static bfd_boolean identify_process_section_p (asection *, bfd_boolean); +static void identify_search_section (bfd *, asection *, void *); +static void identify_member_contains_symname (bfd *, bfd *, void *); + static int pfunc (const void *, const void *); static int nfunc (const void *, const void *); static void remove_null_names (export_type **); @@ -732,7 +819,7 @@ static void fill_ordinals (export_type **); static void mangle_defs (void); static void usage (FILE *, int); static void inform (const char *, ...) ATTRIBUTE_PRINTF_1; -static void set_dll_name_from_def (const char *); +static void set_dll_name_from_def (const char *name, char is_dll); static char * prefix_encode (char *start, unsigned code) @@ -873,9 +960,14 @@ asm_prefix (int machine, const char *name) #define HOW_BFD_READ_TARGET 0 /* Always default. */ #define HOW_BFD_WRITE_TARGET mtable[machine].how_bfd_target #define HOW_BFD_ARCH mtable[machine].how_bfd_arch -#define HOW_JTAB mtable[machine].how_jtab -#define HOW_JTAB_SIZE mtable[machine].how_jtab_size -#define HOW_JTAB_ROFF mtable[machine].how_jtab_roff +#define HOW_JTAB (delay ? mtable[machine].how_dljtab \ + : mtable[machine].how_jtab) +#define HOW_JTAB_SIZE (delay ? mtable[machine].how_dljtab_size \ + : mtable[machine].how_jtab_size) +#define HOW_JTAB_ROFF (delay ? mtable[machine].how_dljtab_roff1 \ + : mtable[machine].how_jtab_roff) +#define HOW_JTAB_ROFF2 (delay ? mtable[machine].how_dljtab_roff2 : 0) +#define HOW_JTAB_ROFF3 (delay ? mtable[machine].how_dljtab_roff3 : 0) #define ASM_SWITCHES mtable[machine].how_default_as_switches static char **oav; @@ -951,13 +1043,22 @@ def_exports (const char *name, const char *internal_name, int ordinal, } static void -set_dll_name_from_def (const char * name) +set_dll_name_from_def (const char *name, char is_dll) { - const char* image_basename = lbasename (name); + const char *image_basename = lbasename (name); if (image_basename != name) non_fatal (_("%s: Path components stripped from image name, '%s'."), def_file, name); - dll_name = xstrdup (image_basename); + /* Append the default suffix, if none specified. */ + if (strchr (image_basename, '.') == 0) + { + const char * suffix = is_dll ? ".dll" : ".exe"; + + dll_name = xmalloc (strlen (image_basename) + strlen (suffix) + 1); + sprintf (dll_name, "%s%s", image_basename, suffix); + } + else + dll_name = xstrdup (image_basename); } void @@ -971,8 +1072,8 @@ def_name (const char *name, int base) /* If --dllname not provided, use the one in the DEF file. FIXME: Is this appropriate for executables? */ - if (! dll_name) - set_dll_name_from_def (name); + if (!dll_name) + set_dll_name_from_def (name, 0); d_is_exe = 1; } @@ -986,8 +1087,8 @@ def_library (const char *name, int base) non_fatal (_("Can't have LIBRARY and NAME")); /* If --dllname not provided, use the one in the DEF file. */ - if (! dll_name) - set_dll_name_from_def (name); + if (!dll_name) + set_dll_name_from_def (name, 1); d_is_dll = 1; } @@ -1206,7 +1307,7 @@ run (const char *what, char *args) if (pid == -1) { - inform (strerror (errno)); + inform ("%s", strerror (errno)); fatal (errmsg_fmt, errmsg_arg); } @@ -1546,7 +1647,7 @@ scan_obj_file (const char *filename) #ifdef DLLTOOL_MCORE_ELF if (mcore_elf_out_file) - mcore_elf_cache_filename ((char *) filename); + mcore_elf_cache_filename (filename); #endif } @@ -1584,18 +1685,21 @@ dump_def_info (FILE *f) static int sfunc (const void *a, const void *b) { - return *(const long *) a - *(const long *) b; + if (*(const bfd_vma *) a == *(const bfd_vma *) b) + return 0; + + return ((*(const bfd_vma *) a > *(const bfd_vma *) b) ? 1 : -1); } static void -flush_page (FILE *f, long *need, int page_addr, int on_page) +flush_page (FILE *f, bfd_vma *need, bfd_vma page_addr, int on_page) { int i; /* Flush this page. */ fprintf (f, "\t%s\t0x%08x\t%s Starting RVA for chunk\n", ASM_LONG, - page_addr, + (int) page_addr, ASM_C); fprintf (f, "\t%s\t0x%x\t%s Size of block\n", ASM_LONG, @@ -1604,12 +1708,23 @@ flush_page (FILE *f, long *need, int page_addr, int on_page) for (i = 0; i < on_page; i++) { - long needed = need[i]; + bfd_vma needed = need[i]; if (needed) - needed = ((needed - page_addr) | 0x3000) & 0xffff; + { + if (!create_for_pep) + { + /* Relocation via HIGHLOW. */ + needed = ((needed - page_addr) | 0x3000) & 0xffff; + } + else + { + /* Relocation via DIR64. */ + needed = ((needed - page_addr) | 0xa000) & 0xffff; + } + } - fprintf (f, "\t%s\t0x%lx\n", ASM_SHORT, needed); + fprintf (f, "\t%s\t0x%lx\n", ASM_SHORT, (long) needed); } /* And padding */ @@ -1722,18 +1837,19 @@ generate_idata_ofile (FILE *filvar) { fprintf (filvar, "listone%d:\n", headindex); 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); -#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 + { + if (create_for_pep) + 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); + } + if (create_for_pep) + fprintf (filvar, "\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); + else + fprintf (filvar, "\t%s\t0\n", ASM_LONG); /* NULL terminating list. */ headindex++; } @@ -1743,18 +1859,19 @@ generate_idata_ofile (FILE *filvar) { fprintf (filvar, "listtwo%d:\n", headindex); 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); -#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 + { + if (create_for_pep) + 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); + } + if (create_for_pep) + fprintf (filvar, "\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); + else + fprintf (filvar, "\t%s\t0\n", ASM_LONG); /* NULL terminating list. */ headindex++; } @@ -1826,8 +1943,8 @@ gen_exp_file (void) { fprintf (f, "\t.section .edata\n\n"); fprintf (f, "\t%s 0 %s Allways 0\n", ASM_LONG, ASM_C); - fprintf (f, "\t%s 0x%lx %s Time and date\n", ASM_LONG, (long) time(0), - ASM_C); + fprintf (f, "\t%s 0x%lx %s Time and date\n", ASM_LONG, + (unsigned long) time(0), ASM_C); fprintf (f, "\t%s 0 %s Major and Minor version\n", ASM_LONG, ASM_C); fprintf (f, "\t%sname%s %s Ptr to name of dll\n", ASM_RVA_BEFORE, ASM_RVA_AFTER, ASM_C); fprintf (f, "\t%s %d %s Starting ordinal of exports\n", ASM_LONG, d_low_ord, ASM_C); @@ -1891,7 +2008,7 @@ gen_exp_file (void) ASM_RVA_BEFORE, exp->ordinal, ASM_RVA_AFTER); } - fprintf (f,"%s Export Oridinal Table\n", ASM_C); + fprintf (f,"%s Export Ordinal Table\n", ASM_C); fprintf (f, "anords:\n"); for (i = 0; (exp = d_exports_lexically[i]); i++) { @@ -1977,12 +2094,12 @@ gen_exp_file (void) /* Dump the reloc section if a base file is provided. */ if (base_file) { - int addr; - long need[PAGE_SIZE]; - long page_addr; - int numbytes; + bfd_vma addr; + bfd_vma need[PAGE_SIZE]; + bfd_vma page_addr; + bfd_size_type numbytes; int num_entries; - long *copy; + bfd_vma *copy; int j; int on_page; fprintf (f, "\t.section\t.init\n"); @@ -1992,8 +2109,9 @@ gen_exp_file (void) numbytes = ftell (base_file); fseek (base_file, 0, SEEK_SET); copy = xmalloc (numbytes); - fread (copy, 1, numbytes, base_file); - num_entries = numbytes / sizeof (long); + if (fread (copy, 1, numbytes, base_file) < numbytes) + fatal (_("failed to read the number of entries from base file")); + num_entries = numbytes / sizeof (bfd_vma); fprintf (f, "\t.section\t.reloc\n"); @@ -2001,8 +2119,8 @@ gen_exp_file (void) { int src; int dst = 0; - int last = -1; - qsort (copy, num_entries, sizeof (long), sfunc); + bfd_vma last = (bfd_vma) -1; + qsort (copy, num_entries, sizeof (bfd_vma), sfunc); /* Delete duplicates */ for (src = 0; src < num_entries; src++) { @@ -2064,8 +2182,9 @@ xlate (const char *name) char *p; name += lead_at; - p = strchr (name, '@'); - if (p) + /* PR 9766: Look for the last @ sign in the name. */ + p = strrchr (name, '@'); + if (p && ISDIGIT (p[1])) *p = 0; } return name; @@ -2219,7 +2338,7 @@ make_imp_label (const char *prefix, const char *name) } static bfd * -make_one_lib_file (export_type *exp, int i) +make_one_lib_file (export_type *exp, int i, int delay) { bfd * abfd; asymbol * exp_label; @@ -2385,7 +2504,7 @@ make_one_lib_file (export_type *exp, int i) { sinfo *si = secdata + i; asection *sec = si->sec; - arelent *rel; + arelent *rel, *rel2 = 0, *rel3 = 0; arelent **rpp; switch (i) @@ -2400,13 +2519,26 @@ make_one_lib_file (export_type *exp, int i) /* Add the reloc into idata$5. */ rel = xmalloc (sizeof (arelent)); - rpp = xmalloc (sizeof (arelent *) * 2); + rpp = xmalloc (sizeof (arelent *) * (delay ? 4 : 2)); rpp[0] = rel; rpp[1] = 0; rel->address = HOW_JTAB_ROFF; rel->addend = 0; + if (delay) + { + rel2 = xmalloc (sizeof (arelent)); + rpp[1] = rel2; + rel2->address = HOW_JTAB_ROFF2; + rel2->addend = 0; + rel3 = xmalloc (sizeof (arelent)); + rpp[2] = rel3; + rel3->address = HOW_JTAB_ROFF3; + rel3->addend = 0; + rpp[3] = 0; + } + if (machine == MPPC) { rel->howto = bfd_reloc_type_lookup (abfd, @@ -2424,70 +2556,101 @@ make_one_lib_file (export_type *exp, int i) rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32); rel->sym_ptr_ptr = secdata[IDATA5].sympp; } + + if (delay) + { + rel2->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32); + rel2->sym_ptr_ptr = rel->sym_ptr_ptr; + rel3->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32_PCREL); + rel3->sym_ptr_ptr = iname_lab_pp; + } + sec->orelocation = rpp; - sec->reloc_count = 1; + sec->reloc_count = delay ? 3 : 1; } break; - case IDATA4: - case IDATA5: - /* 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 + case IDATA5: + if (delay) { + si->data = xmalloc (4); + si->size = 4; sec->reloc_count = 1; memset (si->data, 0, si->size); + si->data[0] = 6; 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; + rel->howto = bfd_reloc_type_lookup (abfd, BFD_RELOC_32); + rel->sym_ptr_ptr = secdata[TEXT].sympp; sec->orelocation = rpp; + break; } -#else - si->data = xmalloc (4); - si->size = 4; + /* else fall through */ + case IDATA4: + /* An idata$4 or idata$5 is one word long, and has an + rva to idata$6. */ - if (exp->noname) + if (create_for_pep) { - si->data[0] = exp->ordinal ; - si->data[1] = exp->ordinal >> 8; - si->data[2] = exp->ordinal >> 16; - si->data[3] = 0x80; + 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 { - 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; + si->data = xmalloc (4); + si->size = 4; + + if (exp->noname) + { + si->data[0] = exp->ordinal ; + si->data[1] = exp->ordinal >> 8; + si->data[2] = exp->ordinal >> 16; + si->data[3] = 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; + } } -#endif break; case IDATA6: @@ -2505,6 +2668,8 @@ make_one_lib_file (export_type *exp, int i) } break; case IDATA7: + if (delay) + break; si->size = 4; si->data = xmalloc (4); memset (si->data, 0, si->size); @@ -2674,9 +2839,9 @@ make_head (void) } fprintf (f, "%s IMAGE_IMPORT_DESCRIPTOR\n", ASM_C); - fprintf (f, "\t.section .idata$2\n"); + fprintf (f, "\t.section\t.idata$2\n"); - fprintf(f,"\t%s\t%s\n", ASM_GLOBAL,head_label); + fprintf (f,"\t%s\t%s\n", ASM_GLOBAL, head_label); fprintf (f, "%s:\n", head_label); @@ -2701,22 +2866,102 @@ make_head (void) if (!no_idata5) { fprintf (f, "\t.section\t.idata$5\n"); + if (use_nul_prefixed_import_tables) + { + if (create_for_pep) + fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); + else + fprintf (f,"\t%s\t0\n", ASM_LONG); + } + fprintf (f, "fthunk:\n"); + } + + if (!no_idata4) + { + fprintf (f, "\t.section\t.idata$4\n"); + if (use_nul_prefixed_import_tables) + { + if (create_for_pep) + fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); + else + fprintf (f,"\t%s\t0\n", ASM_LONG); + } + fprintf (f, "hname:\n"); + } + + fclose (f); + + assemble_file (TMP_HEAD_S, TMP_HEAD_O); + + return bfd_openr (TMP_HEAD_O, HOW_BFD_READ_TARGET); +} + +bfd * +make_delay_head (void) +{ + FILE *f = fopen (TMP_HEAD_S, FOPEN_WT); + + if (f == NULL) + { + fatal (_("failed to open temporary head file: %s"), TMP_HEAD_S); + return NULL; + } + + /* Output the __tailMerge__xxx function */ + fprintf (f, "%s Import trampoline\n", ASM_C); + fprintf (f, "\t.section\t.text\n"); + fprintf(f,"\t%s\t%s\n", ASM_GLOBAL, head_label); + fprintf (f, "%s:\n", head_label); + fprintf (f, mtable[machine].trampoline, imp_name_lab); + + /* Output the delay import descriptor */ + fprintf (f, "\n%s DELAY_IMPORT_DESCRIPTOR\n", ASM_C); + fprintf (f, ".section\t.text$2\n"); + fprintf (f,"%s __DELAY_IMPORT_DESCRIPTOR_%s\n", ASM_GLOBAL,imp_name_lab); + fprintf (f, "__DELAY_IMPORT_DESCRIPTOR_%s:\n", imp_name_lab); + fprintf (f, "\t%s 1\t%s grAttrs\n", ASM_LONG, ASM_C); + fprintf (f, "\t%s__%s_iname%s\t%s rvaDLLName\n", + ASM_RVA_BEFORE, imp_name_lab, ASM_RVA_AFTER, ASM_C); + fprintf (f, "\t%s__DLL_HANDLE_%s%s\t%s rvaHmod\n", + ASM_RVA_BEFORE, imp_name_lab, ASM_RVA_AFTER, ASM_C); + fprintf (f, "\t%s__IAT_%s%s\t%s rvaIAT\n", + ASM_RVA_BEFORE, imp_name_lab, ASM_RVA_AFTER, ASM_C); + fprintf (f, "\t%s__INT_%s%s\t%s rvaINT\n", + ASM_RVA_BEFORE, imp_name_lab, ASM_RVA_AFTER, ASM_C); + fprintf (f, "\t%s\t0\t%s rvaBoundIAT\n", ASM_LONG, ASM_C); + fprintf (f, "\t%s\t0\t%s rvaUnloadIAT\n", ASM_LONG, ASM_C); + fprintf (f, "\t%s\t0\t%s dwTimeStamp\n", ASM_LONG, ASM_C); + + /* Output the dll_handle */ + fprintf (f, "\n.section .data\n"); + fprintf (f, "__DLL_HANDLE_%s:\n", imp_name_lab); + fprintf (f, "\t%s\t0\t%s Handle\n", ASM_LONG, ASM_C); + fprintf (f, "\n"); + + fprintf (f, "%sStuff for compatibility\n", ASM_C); + + if (!no_idata5) + { + fprintf (f, "\t.section\t.idata$5\n"); + /* NULL terminating list. */ #ifdef DLLTOOL_MX86_64 - fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); /* NULL terminating list. */ + fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); #else - fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */ + fprintf (f,"\t%s\t0\n", ASM_LONG); #endif - fprintf (f, "fthunk:\n"); + fprintf (f, "__IAT_%s:\n", imp_name_lab); } 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"); + fprintf (f, "\t.section\t.idata$4\n"); + fprintf (f, "__INT_%s:\n", imp_name_lab); } + fprintf (f, "\t.section\t.idata$2\n"); + fclose (f); assemble_file (TMP_HEAD_S, TMP_HEAD_O); @@ -2737,22 +2982,20 @@ make_tail (void) if (!no_idata4) { - fprintf (f, "\t.section .idata$4\n"); -#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, "\t.section\t.idata$4\n"); + if (create_for_pep) + fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); + else + fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */ } if (!no_idata5) { - fprintf (f, "\t.section .idata$5\n"); -#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, "\t.section\t.idata$5\n"); + if (create_for_pep) + fprintf (f,"\t%s\t0\n\t%s\t0\n", ASM_LONG, ASM_LONG); + else + fprintf (f,"\t%s\t0\n", ASM_LONG); /* NULL terminating list. */ } #ifdef DLLTOOL_PPC @@ -2763,7 +3006,7 @@ make_tail (void) comdat, that is) or cause it to be inserted by something else (say crt0). */ - fprintf (f, "\t.section .idata$3\n"); + fprintf (f, "\t.section\t.idata$3\n"); fprintf (f, "\t%s\t0\n", ASM_LONG); fprintf (f, "\t%s\t0\n", ASM_LONG); fprintf (f, "\t%s\t0\n", ASM_LONG); @@ -2774,9 +3017,9 @@ make_tail (void) #ifdef DLLTOOL_PPC /* Other PowerPC NT compilers use idata$6 for the dllname, so I do too. Original, huh? */ - fprintf (f, "\t.section .idata$6\n"); + fprintf (f, "\t.section\t.idata$6\n"); #else - fprintf (f, "\t.section .idata$7\n"); + fprintf (f, "\t.section\t.idata$7\n"); #endif fprintf (f, "\t%s\t__%s_iname\n", ASM_GLOBAL, imp_name_lab); @@ -2791,7 +3034,7 @@ make_tail (void) } static void -gen_lib_file (void) +gen_lib_file (int delay) { int i; export_type *exp; @@ -2813,9 +3056,17 @@ gen_lib_file (void) bfd_set_format (outarch, bfd_archive); outarch->has_armap = 1; + outarch->is_thin_archive = 0; /* Work out a reasonable size of things to put onto one line. */ - ar_head = make_head (); + if (delay) + { + ar_head = make_delay_head (); + } + else + { + ar_head = make_head (); + } ar_tail = make_tail(); if (ar_head == NULL || ar_tail == NULL) @@ -2827,7 +3078,7 @@ gen_lib_file (void) /* Don't add PRIVATE entries to import lib. */ if (exp->private) continue; - n = make_one_lib_file (exp, i); + n = make_one_lib_file (exp, i, delay); n->archive_next = head; head = n; if (ext_prefix_alias) @@ -2846,7 +3097,7 @@ gen_lib_file (void) alias_exp.hint = exp->hint; alias_exp.forward = exp->forward; alias_exp.next = exp->next; - n = make_one_lib_file (&alias_exp, i + PREFIX_ALIAS_BASE); + n = make_one_lib_file (&alias_exp, i + PREFIX_ALIAS_BASE, delay); n->archive_next = head; head = n; } @@ -2906,6 +3157,410 @@ gen_lib_file (void) inform (_("Created lib file")); } +/* Append a copy of data (cast to char *) to list. */ + +static void +dll_name_list_append (dll_name_list_type * list, bfd_byte * data) +{ + /* Error checking. */ + if (! list || ! list->tail) + return; + + /* Allocate new node. */ + dll_name_list_node_type * entry = + (dll_name_list_node_type *) xmalloc (sizeof (dll_name_list_node_type)); + + /* Initialize its values. */ + entry->dllname = xstrdup ((char *) data); + entry->next = NULL; + + /* Add to tail, and move tail. */ + list->tail->next = entry; + list->tail = entry; +} + +/* Count the number of entries in list. */ + +static int +dll_name_list_count (dll_name_list_type * list) +{ + /* Error checking. */ + if (! list || ! list->head) + return 0; + + int count = 0; + dll_name_list_node_type * p = list->head; + + while (p && p->next) + { + count++; + p = p->next; + } + return count; +} + +/* Print each entry in list to stdout. */ + +static void +dll_name_list_print (dll_name_list_type * list) +{ + /* Error checking. */ + if (! list || ! list->head) + return; + + dll_name_list_node_type * p = list->head; + + while (p && p->next && p->next->dllname && *(p->next->dllname)) + { + printf ("%s\n", p->next->dllname); + p = p->next; + } +} + +/* Free all entries in list, and list itself. */ + +static void +dll_name_list_free (dll_name_list_type * list) +{ + if (list) + { + dll_name_list_free_contents (list->head); + list->head = NULL; + list->tail = NULL; + free (list); + } +} + +/* Recursive function to free all nodes entry->next->next... + as well as entry itself. */ + +static void +dll_name_list_free_contents (dll_name_list_node_type * entry) +{ + if (entry) + { + if (entry->next) + { + dll_name_list_free_contents (entry->next); + entry->next = NULL; + } + if (entry->dllname) + { + free (entry->dllname); + entry->dllname = NULL; + } + free (entry); + } +} + +/* Allocate and initialize a dll_name_list_type object, + including its sentinel node. Caller is responsible + for calling dll_name_list_free when finished with + the list. */ + +static dll_name_list_type * +dll_name_list_create (void) +{ + /* Allocate list. */ + dll_name_list_type * list = xmalloc (sizeof (dll_name_list_type)); + + /* Allocate and initialize sentinel node. */ + list->head = xmalloc (sizeof (dll_name_list_node_type)); + list->head->dllname = NULL; + list->head->next = NULL; + + /* Bookkeeping for empty list. */ + list->tail = list->head; + + return list; +} + +/* Search the symbol table of the suppled BFD for a symbol whose name matches + OBJ (where obj is cast to const char *). If found, set global variable + identify_member_contains_symname_result TRUE. It is the caller's + responsibility to set the result variable FALSE before iterating with + this function. */ + +static void +identify_member_contains_symname (bfd * abfd, + bfd * archive_bfd ATTRIBUTE_UNUSED, + void * obj) +{ + long storage_needed; + asymbol ** symbol_table; + long number_of_symbols; + long i; + symname_search_data_type * search_data = (symname_search_data_type *) obj; + + /* If we already found the symbol in a different member, + short circuit. */ + if (search_data->found) + return; + + storage_needed = bfd_get_symtab_upper_bound (abfd); + if (storage_needed <= 0) + return; + + symbol_table = xmalloc (storage_needed); + number_of_symbols = bfd_canonicalize_symtab (abfd, symbol_table); + if (number_of_symbols < 0) + { + free (symbol_table); + return; + } + + for (i = 0; i < number_of_symbols; i++) + { + if (strncmp (symbol_table[i]->name, + search_data->symname, + strlen (search_data->symname)) == 0) + { + search_data->found = TRUE; + break; + } + } + free (symbol_table); +} + +/* This is the main implementation for the --identify option. + Given the name of an import library in identify_imp_name, first determine + if the import library is a GNU binutils-style one (where the DLL name is + stored in an .idata$7 (.idata$6 on PPC) section, or if it is a MS-style + one (where the DLL name, along with much other data, is stored in the + .idata$6 section). We determine the style of import library by searching + for the DLL-structure symbol inserted by MS tools: + __NULL_IMPORT_DESCRIPTOR. + + Once we know which section to search, evaluate each section for the + appropriate properties that indicate it may contain the name of the + associated DLL (this differs depending on the style). Add the contents + of all sections which meet the criteria to a linked list of dll names. + + Finally, print them all to stdout. (If --identify-strict, an error is + reported if more than one match was found). */ + +static void +identify_dll_for_implib (void) +{ + bfd * abfd = NULL; + int count = 0; + identify_data_type identify_data; + symname_search_data_type search_data; + + /* Initialize identify_data. */ + identify_data.list = dll_name_list_create (); + identify_data.ms_style_implib = FALSE; + + /* Initialize search_data. */ + search_data.symname = "__NULL_IMPORT_DESCRIPTOR"; + search_data.found = FALSE; + + bfd_init (); + + abfd = bfd_openr (identify_imp_name, 0); + if (abfd == NULL) + bfd_fatal (identify_imp_name); + + if (! bfd_check_format (abfd, bfd_archive)) + { + if (! bfd_close (abfd)) + bfd_fatal (identify_imp_name); + + fatal (_("%s is not a library"), identify_imp_name); + } + + /* Detect if this a Microsoft import library. */ + identify_search_archive (abfd, + identify_member_contains_symname, + (void *)(& search_data)); + if (search_data.found) + identify_data.ms_style_implib = TRUE; + + /* Rewind the bfd. */ + if (! bfd_close (abfd)) + bfd_fatal (identify_imp_name); + abfd = bfd_openr (identify_imp_name, 0); + if (abfd == NULL) + bfd_fatal (identify_imp_name); + + if (!bfd_check_format (abfd, bfd_archive)) + { + if (!bfd_close (abfd)) + bfd_fatal (identify_imp_name); + + fatal (_("%s is not a library"), identify_imp_name); + } + + /* Now search for the dll name. */ + identify_search_archive (abfd, + identify_search_member, + (void *)(& identify_data)); + + if (! bfd_close (abfd)) + bfd_fatal (identify_imp_name); + + count = dll_name_list_count (identify_data.list); + if (count > 0) + { + if (identify_strict && count > 1) + { + dll_name_list_free (identify_data.list); + identify_data.list = NULL; + fatal (_("Import library `%s' specifies two or more dlls"), + identify_imp_name); + } + dll_name_list_print (identify_data.list); + dll_name_list_free (identify_data.list); + identify_data.list = NULL; + } + else + { + dll_name_list_free (identify_data.list); + identify_data.list = NULL; + fatal (_("Unable to determine dll name for `%s' (not an import library?)"), + identify_imp_name); + } +} + +/* Loop over all members of the archive, applying the supplied function to + each member that is a bfd_object. The function will be called as if: + func (member_bfd, abfd, user_storage) */ + +static void +identify_search_archive (bfd * abfd, + void (* operation) (bfd *, bfd *, void *), + void * user_storage) +{ + bfd * arfile = NULL; + bfd * last_arfile = NULL; + char ** matching; + + while (1) + { + arfile = bfd_openr_next_archived_file (abfd, arfile); + + if (arfile == NULL) + { + if (bfd_get_error () != bfd_error_no_more_archived_files) + bfd_fatal (bfd_get_filename (abfd)); + break; + } + + if (bfd_check_format_matches (arfile, bfd_object, &matching)) + (*operation) (arfile, abfd, user_storage); + else + { + bfd_nonfatal (bfd_get_filename (arfile)); + free (matching); + } + + if (last_arfile != NULL) + bfd_close (last_arfile); + + last_arfile = arfile; + } + + if (last_arfile != NULL) + { + bfd_close (last_arfile); + } +} + +/* Call the identify_search_section() function for each section of this + archive member. */ + +static void +identify_search_member (bfd *abfd, + bfd *archive_bfd ATTRIBUTE_UNUSED, + void *obj) +{ + bfd_map_over_sections (abfd, identify_search_section, obj); +} + +/* This predicate returns true if section->name matches the desired value. + By default, this is .idata$7 (.idata$6 on PPC, or if the import + library is ms-style). */ + +static bfd_boolean +identify_process_section_p (asection * section, bfd_boolean ms_style_implib) +{ + static const char * SECTION_NAME = +#ifdef DLLTOOL_PPC + /* dllname is stored in idata$6 on PPC */ + ".idata$6"; +#else + ".idata$7"; +#endif + static const char * MS_SECTION_NAME = ".idata$6"; + + const char * section_name = + (ms_style_implib ? MS_SECTION_NAME : SECTION_NAME); + + if (strcmp (section_name, section->name) == 0) + return TRUE; + return FALSE; +} + +/* If *section has contents and its name is .idata$7 (.data$6 on PPC or if + import lib ms-generated) -- and it satisfies several other constraints + -- then add the contents of the section to obj->list. */ + +static void +identify_search_section (bfd * abfd, asection * section, void * obj) +{ + bfd_byte *data = 0; + bfd_size_type datasize; + identify_data_type * identify_data = (identify_data_type *)obj; + bfd_boolean ms_style = identify_data->ms_style_implib; + + if ((section->flags & SEC_HAS_CONTENTS) == 0) + return; + + if (! identify_process_section_p (section, ms_style)) + return; + + /* Binutils import libs seem distinguish the .idata$7 section that contains + the DLL name from other .idata$7 sections by the absence of the + SEC_RELOC flag. */ + if (!ms_style && ((section->flags & SEC_RELOC) == SEC_RELOC)) + return; + + /* MS import libs seem to distinguish the .idata$6 section + that contains the DLL name from other .idata$6 sections + by the presence of the SEC_DATA flag. */ + if (ms_style && ((section->flags & SEC_DATA) == 0)) + return; + + if ((datasize = bfd_section_size (abfd, section)) == 0) + return; + + data = (bfd_byte *) xmalloc (datasize + 1); + data[0] = '\0'; + + bfd_get_section_contents (abfd, section, data, 0, datasize); + data[datasize] = '\0'; + + /* Use a heuristic to determine if data is a dll name. + Possible to defeat this if (a) the library has MANY + (more than 0x302f) imports, (b) it is an ms-style + import library, but (c) it is buggy, in that the SEC_DATA + flag is set on the "wrong" sections. This heuristic might + also fail to record a valid dll name if the dllname uses + a multibyte or unicode character set (is that valid?). + + This heuristic is based on the fact that symbols names in + the chosen section -- as opposed to the dll name -- begin + at offset 2 in the data. The first two bytes are a 16bit + little-endian count, and start at 0x0000. However, the dll + name begins at offset 0 in the data. We assume that the + dll name does not contain unprintable characters. */ + if (data[0] != '\0' && ISPRINT (data[0]) + && ((datasize < 2) || ISPRINT (data[1]))) + dll_name_list_append (identify_data->list, data); + + free (data); +} + /* Run through the information gathered from the .o files and the .def file and work out the best stuff. */ @@ -2914,6 +3569,7 @@ pfunc (const void *a, const void *b) { export_type *ap = *(export_type **) a; export_type *bp = *(export_type **) b; + if (ap->ordinal == bp->ordinal) return 0; @@ -2988,7 +3644,7 @@ process_duplicates (export_type **d_export_vec) if (a->ordinal != -1 && b->ordinal != -1) /* xgettext:c-format */ - fatal (_("Error, duplicate EXPORT with oridinals: %s"), + fatal (_("Error, duplicate EXPORT with ordinals: %s"), a->name); /* Merge attributes. */ @@ -3138,6 +3794,7 @@ usage (FILE *file, int status) fprintf (file, _(" possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n")); fprintf (file, _(" -e --output-exp Generate an export file.\n")); fprintf (file, _(" -l --output-lib Generate an interface library.\n")); + fprintf (file, _(" -y --output-delaylib Create a delay-import library.\n")); fprintf (file, _(" -a --add-indirect Add dll indirects to export file.\n")); fprintf (file, _(" -D --dllname Name of input dll to put into interface lib.\n")); fprintf (file, _(" -d --input-def Name of .def file to be read in.\n")); @@ -3149,6 +3806,7 @@ usage (FILE *file, int status) fprintf (file, _(" -b --base-file Read linker generated base file.\n")); fprintf (file, _(" -x --no-idata4 Don't generate idata$4 section.\n")); fprintf (file, _(" -c --no-idata5 Don't generate idata$5 section.\n")); + fprintf (file, _(" --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n")); fprintf (file, _(" -U --add-underscore Add underscores to all symbols in interface library.\n")); fprintf (file, _(" --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n")); fprintf (file, _(" -k --kill-at Kill @ from exported names.\n")); @@ -3159,6 +3817,8 @@ usage (FILE *file, int status) fprintf (file, _(" -C --compat-implib Create backward compatible import library.\n")); fprintf (file, _(" -n --no-delete Keep temp files (repeat for extra preservation).\n")); fprintf (file, _(" -t --temp-prefix Use to construct temp file names.\n")); + fprintf (file, _(" -I --identify Report the name of the DLL associated with .\n")); + fprintf (file, _(" --identify-strict Causes --identify to report error when multiple DLLs.\n")); fprintf (file, _(" -v --verbose Be verbose.\n")); fprintf (file, _(" -V --version Display the program version.\n")); fprintf (file, _(" -h --help Display this information.\n")); @@ -3178,6 +3838,9 @@ usage (FILE *file, int status) #define OPTION_EXCLUDE_SYMS (OPTION_NO_EXPORT_ALL_SYMS + 1) #define OPTION_NO_DEFAULT_EXCLUDES (OPTION_EXCLUDE_SYMS + 1) #define OPTION_ADD_STDCALL_UNDERSCORE (OPTION_NO_DEFAULT_EXCLUDES + 1) +#define OPTION_USE_NUL_PREFIXED_IMPORT_TABLES \ + (OPTION_ADD_STDCALL_UNDERSCORE + 1) +#define OPTION_IDENTIFY_STRICT (OPTION_USE_NUL_PREFIXED_IMPORT_TABLES + 1) static const struct option long_options[] = { @@ -3185,6 +3848,8 @@ static const struct option long_options[] = {"dllname", required_argument, NULL, 'D'}, {"no-idata4", no_argument, NULL, 'x'}, {"no-idata5", no_argument, NULL, 'c'}, + {"use-nul-prefixed-import-tables", no_argument, NULL, + OPTION_USE_NUL_PREFIXED_IMPORT_TABLES}, {"output-exp", required_argument, NULL, 'e'}, {"output-def", required_argument, NULL, 'z'}, {"export-all-symbols", no_argument, NULL, OPTION_EXPORT_ALL_SYMS}, @@ -3199,6 +3864,8 @@ static const struct option long_options[] = {"kill-at", no_argument, NULL, 'k'}, {"add-stdcall-alias", no_argument, NULL, 'A'}, {"ext-prefix-alias", required_argument, NULL, 'p'}, + {"identify", required_argument, NULL, 'I'}, + {"identify-strict", no_argument, NULL, OPTION_IDENTIFY_STRICT}, {"verbose", no_argument, NULL, 'v'}, {"version", no_argument, NULL, 'V'}, {"help", no_argument, NULL, 'h'}, @@ -3210,6 +3877,7 @@ static const struct option long_options[] = {"mcore-elf", required_argument, NULL, 'M'}, {"compat-implib", no_argument, NULL, 'C'}, {"temp-prefix", required_argument, NULL, 't'}, + {"output-delaylib", required_argument, NULL, 'y'}, {NULL,0,NULL,0} }; @@ -3237,9 +3905,9 @@ main (int ac, char **av) while ((c = getopt_long (ac, av, #ifdef DLLTOOL_MCORE_ELF - "m:e:l:aD:d:z:b:xp:cCuUkAS:f:nvVHhM:L:F:", + "m:e:l:aD:d:z:b:xp:cCuUkAS:f:nI:vVHhM:L:F:", #else - "m:e:l:aD:d:z:b:xp:cCuUkAS:f:nvVHh", + "m:e:l:y:aD:d:z:b:xp:cCuUkAS:f:nI:vVHh", #endif long_options, 0)) != EOF) @@ -3258,9 +3926,15 @@ main (int ac, char **av) case OPTION_NO_DEFAULT_EXCLUDES: do_default_excludes = FALSE; break; + case OPTION_USE_NUL_PREFIXED_IMPORT_TABLES: + use_nul_prefixed_import_tables = TRUE; + break; case OPTION_ADD_STDCALL_UNDERSCORE: add_stdcall_underscore = 1; break; + case OPTION_IDENTIFY_STRICT: + identify_strict = 1; + break; case 'x': no_idata4 = 1; break; @@ -3305,6 +3979,9 @@ main (int ac, char **av) case 'm': mname = optarg; break; + case 'I': + identify_imp_name = optarg; + break; case 'v': verbose = 1; break; @@ -3351,6 +4028,9 @@ main (int ac, char **av) case 'C': create_compat_implib = 1; break; + case 'y': + delayimp_name = optarg; + break; default: usage (stderr, 1); break; @@ -3370,6 +4050,9 @@ main (int ac, char **av) machine = i; + /* Check if we generated PE+. */ + create_for_pep = strcmp (mname, "i386:x86-64") == 0; + if (!dll_name && exp_name) { /* If we are inferring dll_name from exp_name, @@ -3422,12 +4105,42 @@ main (int ac, char **av) *p = '_'; } head_label = make_label("_head_", imp_name_lab); - gen_lib_file (); + gen_lib_file (0); + } + + if (delayimp_name) + { + /* Make delayimp_name safe for use as a label. */ + char *p; + + if (mtable[machine].how_dljtab == 0) + { + inform (_("Warning, machine type (%d) not supported for " + "delayimport."), machine); + } + else + { + killat = 1; + imp_name = delayimp_name; + imp_name_lab = xstrdup (imp_name); + for (p = imp_name_lab; *p; p++) + { + if (!ISALNUM (*p)) + *p = '_'; + } + head_label = make_label("__tailMerge_", imp_name_lab); + gen_lib_file (1); + } } if (output_def) gen_def_file (); + if (identify_imp_name) + { + identify_dll_for_implib (); + } + #ifdef DLLTOOL_MCORE_ELF if (mcore_elf_out_file) mcore_elf_gen_out_file (); @@ -3558,7 +4271,7 @@ deduce_name (const char *prog_name) #ifdef DLLTOOL_MCORE_ELF typedef struct fname_cache { - char * filename; + const char * filename; struct fname_cache * next; } fname_cache; @@ -3566,7 +4279,7 @@ fname_cache; static fname_cache fnames; static void -mcore_elf_cache_filename (char * filename) +mcore_elf_cache_filename (const char * filename) { fname_cache * ptr; diff --git a/binutils/dlltool.h b/binutils/dlltool.h index 5f306a5..e31916d 100644 --- a/binutils/dlltool.h +++ b/binutils/dlltool.h @@ -1,5 +1,5 @@ /* dlltool.h -- header file for dlltool - Copyright 1997, 1998, 2003, 2004, 2007 Free Software Foundation, Inc. + Copyright 1997, 1998, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/doc/Makefile.am b/binutils/doc/Makefile.am index 15953e0..bdd470d 100644 --- a/binutils/doc/Makefile.am +++ b/binutils/doc/Makefile.am @@ -161,27 +161,6 @@ $(DEMANGLER_NAME).1: cxxfilt.man Makefile # cygnus option. install-data-local: install-info -html__strip_dir = `echo $$p | sed -e 's|^.*/||'`; - -install-html: install-html-am - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ - f=$(html__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ - else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ - fi; \ - done - MAINTAINERCLEANFILES = binutils.info # Automake 1.9 will only build info files in the objdir if they are diff --git a/binutils/doc/Makefile.in b/binutils/doc/Makefile.in index d258024..f2d63c8 100644 --- a/binutils/doc/Makefile.in +++ b/binutils/doc/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,15 +14,12 @@ # PARTICULAR PURPOSE. @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ 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 @@ -48,16 +46,20 @@ am__aclocal_m4_deps = $(top_srcdir)/../bfd/acinclude.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/nls.m4 \ + $(top_srcdir)/../config/override.m4 \ + $(top_srcdir)/../config/plugins.m4 \ + $(top_srcdir)/../config/po.m4 \ $(top_srcdir)/../config/progtest.m4 \ $(top_srcdir)/../libtool.m4 $(top_srcdir)/../ltoptions.m4 \ $(top_srcdir)/../ltsugar.m4 $(top_srcdir)/../ltversion.m4 \ - $(top_srcdir)/configure.in + $(top_srcdir)/../lt~obsolete.m4 $(top_srcdir)/configure.in 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 = +CONFIG_CLEAN_VPATH_FILES = depcomp = am__depfiles_maybe = SOURCES = @@ -73,14 +75,33 @@ TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -109,6 +130,7 @@ DEFS = @DEFS@ DEMANGLER_NAME = @DEMANGLER_NAME@ DEPDIR = @DEPDIR@ DLLTOOL_DEFS = @DLLTOOL_DEFS@ +DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ @@ -120,12 +142,11 @@ EXEEXT = @EXEEXT@ EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ FGREP = @FGREP@ GENCAT = @GENCAT@ -GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@ -GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ HDEFINES = @HDEFINES@ INCINTL = @INCINTL@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -142,26 +163,31 @@ LIBINTL_DEP = @LIBINTL_DEP@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ NLMCONV_DEFS = @NLMCONV_DEFS@ NM = @NM@ +NMEDIT = @NMEDIT@ NO_WERROR = @NO_WERROR@ +OBJDUMP = @OBJDUMP@ OBJDUMP_DEFS = @OBJDUMP_DEFS@ OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ @@ -175,13 +201,13 @@ VERSION = @VERSION@ WARN_CFLAGS = @WARN_CFLAGS@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ -ac_ct_AR = @ac_ct_AR@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -193,9 +219,11 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ @@ -208,21 +236,28 @@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = cygnus # What version of the manual you want; "all" includes everything @@ -262,7 +297,6 @@ TEXI2DVI = texi2dvi -I "$(srcdir)" -I "$(top_srcdir)/../libiberty" \ -I "$(top_srcdir)/../bfd/doc" -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 @@ -277,14 +311,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus doc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --cygnus doc/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -302,6 +336,7 @@ $(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 +$(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo @@ -309,9 +344,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool - binutils.info: binutils.texi restore=: && backupdir="$(am__leading_dot)am$$$$" && \ rm -rf $$backupdir && mkdir $$backupdir && \ @@ -357,15 +389,35 @@ binutils.html: binutils.texi TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< +uninstall-dvi-am: + @$(NORMAL_UNINSTALL) + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ + rm -f "$(DESTDIR)$(dvidir)/$$f"; \ + done + +uninstall-html-am: + @$(NORMAL_UNINSTALL) + @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ + rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ + done + uninstall-info-am: @$(PRE_UNINSTALL) - @if (install-info --version && \ + @if test -d '$(DESTDIR)$(infodir)' && \ + (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ - install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ + then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @@ -373,12 +425,30 @@ uninstall-info-am: for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ - (if cd "$(DESTDIR)$(infodir)"; then \ + (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done +uninstall-pdf-am: + @$(NORMAL_UNINSTALL) + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ + rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ + done + +uninstall-ps-am: + @$(NORMAL_UNINSTALL) + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ + rm -f "$(DESTDIR)$(psdir)/$$f"; \ + done + dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ @@ -387,10 +457,13 @@ dist-info: $(INFO_DEPS) $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ - for file in $$d/$$base*; do \ - relfile=`expr "$$file" : "$$d/\(.*\)"`; \ - test -f $(distdir)/$$relfile || \ - cp -p $$file $(distdir)/$$relfile; \ + base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ + for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ + if test -f $$file; then \ + relfile=`expr "$$file" : "$$d/\(.*\)"`; \ + test -f "$(distdir)/$$relfile" || \ + cp -p $$file "$(distdir)/$$relfile"; \ + else :; fi; \ done; \ done @@ -398,8 +471,11 @@ mostlyclean-aminfo: -rm -rf binutils.aux binutils.cp binutils.cps binutils.fn binutils.fns \ binutils.ky binutils.log binutils.pg binutils.pgs \ binutils.tmp binutils.toc binutils.tp binutils.tps \ - binutils.vr binutils.vrs binutils.dvi binutils.pdf \ - binutils.ps binutils.html + binutils.vr binutils.vrs + +clean-aminfo: + -test -z "binutils.dvi binutils.pdf binutils.ps binutils.html" \ + || rm -rf binutils.dvi binutils.pdf binutils.ps binutils.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ @@ -408,52 +484,45 @@ maintainer-clean-aminfo: rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done -clean-info: mostlyclean-aminfo -install-man1: $(man1_MANS) $(man_MANS) +clean-info: mostlyclean-aminfo clean-aminfo +install-man1: $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: @@ -465,7 +534,7 @@ check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -488,6 +557,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -496,11 +566,11 @@ maintainer-clean-generic: -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am -clean-am: clean-generic clean-libtool mostlyclean-am +clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -516,15 +586,52 @@ info-am: $(INFO_DEPS) info-local install-data-am: install-data-local install-man +install-dvi: install-dvi-am + +install-dvi-am: $(DVIS) + @$(NORMAL_INSTALL) + test -z "$(dvidir)" || $(MKDIR_P) "$(DESTDIR)$(dvidir)" + @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ + done install-exec-am: +install-html: install-html-am + +install-html-am: $(HTMLS) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ + $(am__strip_dir) \ + if test -d "$$d$$p"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ + $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ + echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ + $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ + else \ + list2="$$list2 $$d$$p"; \ + fi; \ + done; \ + test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) - test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" + test -z "$(infodir)" || $(MKDIR_P) "$(DESTDIR)$(infodir)" @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ @@ -532,18 +639,19 @@ install-info-am: $(INFO_DEPS) if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ - $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ + $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ - relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ - echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ - $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ + echo "$$ifile"; \ else : ; fi; \ done; \ - done + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if (install-info --version && \ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ - list='$(INFO_DEPS)'; \ + list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ @@ -552,6 +660,32 @@ install-info-am: $(INFO_DEPS) else : ; fi install-man: install-man1 +install-pdf: install-pdf-am + +install-pdf-am: $(PDFS) + @$(NORMAL_INSTALL) + test -z "$(pdfdir)" || $(MKDIR_P) "$(DESTDIR)$(pdfdir)" + @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done +install-ps: install-ps-am + +install-ps-am: $(PSS) + @$(NORMAL_INSTALL) + test -z "$(psdir)" || $(MKDIR_P) "$(DESTDIR)$(psdir)" + @list='$(PSS)'; test -n "$(psdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am @@ -572,21 +706,27 @@ ps: ps-am ps-am: $(PSS) -uninstall-am: uninstall-man +uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ + uninstall-man uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 -.PHONY: all all-am check check-am clean clean-generic clean-info \ - clean-libtool dist-info distclean distclean-generic \ +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-aminfo clean-generic \ + clean-info clean-libtool dist-info distclean distclean-generic \ distclean-libtool dvi dvi-am html html-am info info-am \ info-local install install-am install-data install-data-am \ - install-data-local install-exec install-exec-am install-info \ - install-info-am install-man install-man1 install-strip \ + install-data-local install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic mostlyclean \ mostlyclean-aminfo mostlyclean-generic mostlyclean-libtool pdf \ - pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \ - uninstall-man uninstall-man1 + pdf-am ps ps-am uninstall uninstall-am uninstall-dvi-am \ + uninstall-html-am uninstall-info-am uninstall-man \ + uninstall-man1 uninstall-pdf-am uninstall-ps-am # Man page generation from texinfo @@ -709,29 +849,11 @@ $(DEMANGLER_NAME).1: cxxfilt.man Makefile # cygnus option. install-data-local: install-info -install-html: install-html-am - -install-html-am: $(HTMLS) - @$(NORMAL_INSTALL) - test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)" - @list='$(HTMLS)'; for p in $$list; do \ - if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \ - f=$(html__strip_dir) \ - if test -d "$$d$$p"; then \ - echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \ - $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ - echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \ - else \ - echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \ - $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \ - fi; \ - done - # Maintenance # We need it for the taz target in ../../Makefile.in. info-local: $(MANS) + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/binutils/doc/addr2line.1 b/binutils/doc/addr2line.1 index 761cff9..c77f989 100644 --- a/binutils/doc/addr2line.1 +++ b/binutils/doc/addr2line.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "ADDR2LINE 1" -.TH ADDR2LINE 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH ADDR2LINE 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" addr2line \- convert addresses into file names and line numbers. .SH "SYNOPSIS" @@ -194,7 +202,7 @@ 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. +choose an appropriate demangling style for your compiler. .IP "\fB\-e\fR \fIfilename\fR" 4 .IX Item "-e filename" .PD 0 @@ -241,7 +249,7 @@ Read offsets relative to the specified section instead of absolute addresses. 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. +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 @@ -255,10 +263,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/ar.1 b/binutils/doc/ar.1 index 4bd3ab2..9fa94e1 100644 --- a/binutils/doc/ar.1 +++ b/binutils/doc/ar.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,12 +132,16 @@ .\" ======================================================================== .\" .IX Title "AR 1" -.TH AR 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH AR 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .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...] +ar [\fB\-\-plugin\fR \fIname\fR] [\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 @@ -168,6 +176,17 @@ 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 can optionally create a \fIthin\fR archive, +which contains a symbol index and references to the original copies +of the member files of the archives. Such an archive is useful +for building libraries for use within a local build, where the +relocatable objects are expected to remain available, and copying the +contents of each object would only waste time and space. Thin archives +are also \fIflattened\fR, so that adding one or more archives to a +thin archive will add the elements of the nested archive individually. +The paths to the elements of the archive are stored relative to the +archive itself. +.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 @@ -270,6 +289,8 @@ use the \fBv\fR modifier with this operation, to request that .Sp If you do not specify a \fImember\fR, all files in the archive are extracted. +.Sp +Files cannot be extracted from a thin archive. .PP A number of modifiers (\fImod\fR) may immediately follow the \fIp\fR keyletter, to specify variations on an operation's behavior: @@ -291,6 +312,14 @@ member must be present as the \fIrelpos\fR argument, before the 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 "\fBD\fR" 4 +.IX Item "D" +Operate in \fIdeterministic\fR mode. When adding files and the archive +index use zero for UIDs, GIDs, timestamps, and use consistent file modes +for all files. When this option is used, if \fBar\fR is used with +identical options and identical input files, multiple runs will create +identical output files regardless of the input files' owners, groups, +file modes, or modification times. .IP "\fBf\fR" 4 .IX Item "f" Truncate names in the archive. \s-1GNU\s0 \fBar\fR will normally permit file @@ -338,6 +367,11 @@ 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 "\fBT\fR" 4 +.IX Item "T" +Make the specified \fIarchive\fR a \fIthin\fR archive. If it already +exists and is a regular archive, the existing members must be present +in the same directory as \fIarchive\fR. .IP "\fBu\fR" 4 .IX Item "u" Normally, \fBar r\fR... inserts all files @@ -361,12 +395,17 @@ 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. +.PP +The optional command line switch \fB\-\-plugin\fR \fIname\fR causes +\&\fBar\fR to load the plugin called \fIname\fR which adds support +for more file formats. This option is only available if the toolchain +has been built with plugin support enabled. .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. +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 @@ -380,10 +419,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/binutils.info b/binutils/doc/binutils.info index d23604a..bc00022 100644 --- a/binutils/doc/binutils.info +++ b/binutils/doc/binutils.info @@ -1,37 +1,42 @@ This is binutils.info, produced by makeinfo version 4.8 from 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 -* windmc: (binutils)windmc. Generator for Windows message 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, 2007 Free Software -Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free +Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". +INFO-DIR-SECTION Software development +START-INFO-DIR-ENTRY +* Binutils: (binutils). The GNU binary utilities. +END-INFO-DIR-ENTRY + +INFO-DIR-SECTION Individual utilities +START-INFO-DIR-ENTRY +* addr2line: (binutils)addr2line. Convert addresses to file and line. +* ar: (binutils)ar. Create, modify, and extract from archives. +* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols. +* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt. +* dlltool: (binutils)dlltool. Create files needed to build and use DLLs. +* nlmconv: (binutils)nlmconv. Converts object code into an NLM. +* 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. +* windmc: (binutils)windmc. Generator for Windows message resources. +* windres: (binutils)windres. Manipulate Windows resources. +END-INFO-DIR-ENTRY +  File: binutils.info, Node: Top, Next: ar, Up: (dir) @@ -39,11 +44,11 @@ Introduction ************ This brief manual contains documentation for the GNU binary utilities -(GNU Binutils) version 2.17.90: +(GNU Binutils) version 2.20: 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". +Documentation License version 1.3. A copy of the license is included +in the section entitled "GNU Free Documentation License". * Menu: @@ -52,7 +57,7 @@ section entitled "GNU Free Documentation License". * 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. +* readelf:: Display the contents of ELF format files * size:: List section sizes and total size * strings:: List printable strings from files * strip:: Discard symbols @@ -64,10 +69,10 @@ section entitled "GNU Free Documentation License". * 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. +* Selecting the Target System:: How these utilities determine the target * Reporting Bugs:: Reporting Bugs * GNU Free Documentation License:: GNU Free Documentation License -* Binutils Index:: Binutils Index +* Binutils Index:: Binutils Index  File: binutils.info, Node: ar, Next: nm, Prev: Top, Up: Top @@ -75,7 +80,7 @@ File: binutils.info, Node: ar, Next: nm, Prev: Top, Up: Top 1 ar **** - ar [-]P[MOD [RELPOS] [COUNT]] ARCHIVE [MEMBER...] + ar [`--plugin' NAME] [-]P[MOD [RELPOS] [COUNT]] ARCHIVE [MEMBER...] ar -M [ +`--long-section-names {enable,disable,keep}' + Controls the handling of long section names when processing `COFF' + and `PE-COFF' object formats. The default behaviour, `keep', is + to preserve long section names if any are present in the input + file. The `enable' and `disable' options forcibly enable or + disable the use of long section names in the output object; when + `disable' is in effect, any long section names in the input object + will be truncated. The `enable' option will only emit long + section names if any are present in the inputs; this is mostly the + same as `keep', but it is left undefined whether the `enable' + option might force the creation of an empty string table in the + output file. + `--change-leading-char' Some object file formats use special characters at the start of symbols. The most common such character is underscore, which @@ -1249,9 +1336,9 @@ the `--reverse-bytes' option.) 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: + 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. @@ -1265,19 +1352,57 @@ the `--reverse-bytes' option.) full executable. It does not have to be a file created by the `--only-keep-debug' switch. - Note - this switch is only intended for use on fully linked files. + 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. +`--file-alignment NUM' + 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 PE targets.] + +`--heap RESERVE' +`--heap RESERVE,COMMIT' + Specify the number of bytes of memory to reserve (and optionally + commit) to be used as heap for this program. [This option is + specific to PE targets.] + +`--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 PE targets.] + +`--section-alignment NUM' + 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 PE targets.] + +`--stack RESERVE' +`--stack RESERVE,COMMIT' + Specify the number of bytes of memory to reserve (and optionally + commit) to be used as stack for this program. [This option is + specific to PE targets.] + +`--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', `efi-app', `efi-bsd', `efi-rtd', `sal-rtd', and `xbox'. + You may optionally set the subsystem version also. Numeric values + are also accepted for WHICH. [This option is specific to PE + targets.] + `--extract-symbol' Keep the file's section flags and symbols but remove all section data. Specifically, the option: - * sets the virtual and load addresses of every section to zero; - * removes the contents of all sections; * sets the size of every section to zero; and @@ -1318,6 +1443,7 @@ File: binutils.info, Node: objdump, Next: ranlib, Prev: objcopy, Up: Top [`-z'|`--disassemble-zeroes'] [`-EB'|`-EL'|`--endian='{big | little }] [`-f'|`--file-headers'] + [`-F'|`--file-offsets'] [`--file-start-context'] [`-g'|`--debugging'] [`-e'|`--debugging-tags'] @@ -1332,7 +1458,8 @@ File: binutils.info, Node: objdump, Next: ranlib, Prev: objcopy, Up: Top [`-r'|`--reloc'] [`-R'|`--dynamic-reloc'] [`-s'|`--full-contents'] - [`-W'|`--dwarf'] + [`-W[lLiaprmfFsoR]'| + `--dwarf'[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] [`-G'|`--stabs'] [`-t'|`--syms'] [`-T'|`--dynamic-syms'] @@ -1344,6 +1471,9 @@ File: binutils.info, Node: objdump, Next: ranlib, Prev: objcopy, Up: Top [`--[no-]show-raw-insn'] [`--adjust-vma='OFFSET] [`--special-syms'] + [`--prefix='PREFIX] + [`--prefix-strip='LEVEL] + [`--insn-width='WIDTH] [`-V'|`--version'] [`-H'|`--help'] OBJFILE... @@ -1401,11 +1531,11 @@ equivalent. At least one option from the list `-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::. + Display debugging information. This attempts to parse STABS and + IEEE debugging format information stored in the file and print it + out using a C like syntax. If neither of these formats are found + this option falls back on the `-W' option to print any DWARF + information in the file. `-e' `--debugging-tags' @@ -1423,6 +1553,10 @@ equivalent. At least one option from the list Like `-d', but disassemble the contents of all sections, not just those expected to contain instructions. + If the target is an ARM architecture this switch also has the + effect of forcing the disassembler to decode pieces of data found + in code sections as if they were instructions. + `--prefix-addresses' When disassembling, print the complete address on each line. This is the older disassembly format. @@ -1439,6 +1573,16 @@ equivalent. At least one option from the list Display summary information from the overall header of each of the OBJFILE files. +`-F' +`--file-offsets' + When disassembling sections, whenever a symbol is displayed, also + display the file offset of the region of data that is about to be + dumped. If zeroes are being skipped, then when disassembly + resumes, tell the user how many zeroes were skipped and the file + offset of the location from where the disassembly resumes. When + dumping sections, display the file offset of the location from + where the dump starts. + `--file-start-context' Specify that when displaying interlisted source code/disassembly (assumes `-S') from a file that has not yet been displayed, extend @@ -1485,6 +1629,13 @@ equivalent. At least one option from the list describe architecture information, such as S-records. You can list the available architectures with the `-i' option. + If the target is an ARM architecture then this switch has an + additional effect. It restricts the disassembly to only those + instructions supported by the architecture specified by MACHINE. + If it is necessary to use this switch because the input file does + not contain any architecture information, but it is also desired to + disassemble all the instructions use `-marm'. + `-M OPTIONS' `--disassembler-options=OPTIONS' Pass target specific information to the disassembler. Only @@ -1519,17 +1670,22 @@ equivalent. At least one option from the list 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. `addr64', `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 + and AT&T syntax mode. `intel-mnemonic' and `att-mnemonic' select + between intel mnemonic mode and AT&T mnemonic mode. + `intel-mnemonic' implies `intel' and `att-mnemonic' implies `att'. + `addr64', `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 PowerPC, `booke' controls the disassembly of BookE + instructions. `32' and `64' select PowerPC and PowerPC64 disassembly, respectively. `e300' selects disassembly for the e300 family. `440' selects disassembly for the PowerPC 440. + `ppcps' selects disassembly for the paired single instructions of + the PPC750CL. For MIPS, this option controls the printing of instruction mnemonic names and register names in disassembled instructions. Multiple @@ -1600,7 +1756,8 @@ equivalent. At least one option from the list `--dynamic-reloc' Print the dynamic relocation entries of the file. This is only meaningful for dynamic objects, such as certain types of shared - libraries. + libraries. As for `-r', if used with `-d' or `-D', the + relocations are printed interspersed with the disassembly. `-s' `--full-contents' @@ -1612,6 +1769,14 @@ equivalent. At least one option from the list Display source code intermixed with disassembly, if possible. Implies `-d'. +`--prefix=PREFIX' + Specify PREFIX to add to the absolute paths when used with `-S'. + +`--prefix-strip=LEVEL' + Indicate how many initial directory names to strip off the + hardwired absolute paths. It has no effect without + `--prefix='PREFIX. + `--show-raw-insn' When disassembling instructions, print the instruction in hex as well as in symbolic form. This is the default except when @@ -1621,10 +1786,16 @@ equivalent. At least one option from the list 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. +`--insn-width=WIDTH' + Display WIDTH bytes on a single line when disassembling + instructions. + +`-W[lLiaprmfFsoR]' +`--dwarf[=rawline,=decodedline,=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. `-G' `--stabs' @@ -1648,7 +1819,86 @@ equivalent. At least one option from the list `-t' `--syms' Print the symbol table entries of the file. This is similar to - the information provided by the `nm' program. + the information provided by the `nm' program, although the display + format is different. The format of the output depends upon the + format of the file being dumped, but there are two main types. + One looks like this: + + [ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss + [ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred + + where the number inside the square brackets is the number of the + entry in the symbol table, the SEC number is the section number, + the FL value are the symbol's flag bits, the TY number is the + symbol's type, the SCL number is the symbol's storage class and + the NX value is the number of auxilary entries associated with the + symbol. The last two fields are the symbol's value and its name. + + The other common output format, usually seen with ELF based files, + looks like this: + + 00000000 l d .bss 00000000 .bss + 00000000 g .text 00000000 fred + + Here the first number is the symbol's value (sometimes refered to + as its address). The next field is actually a set of characters + and spaces indicating the flag bits that are set on the symbol. + These characters are described below. Next is the section with + which the symbol is associated or _*ABS*_ if the section is + absolute (ie not connected with any section), or _*UND*_ if the + section is referenced in the file being dumped, but not defined + there. + + After the section name comes another field, a number, which for + common symbols is the alignment and for other symbol is the size. + Finally the symbol's name is displayed. + + The flag characters are divided into 7 groups as follows: + `l' + `g' + `u' + `!' + The symbol is a local (l), global (g), unique global (u), + neither global nor local (a space) or both global and local + (!). A symbol can be neither local or global for a variety + of reasons, e.g., because it is used for debugging, but it is + probably an indication of a bug if it is ever both local and + global. Unique global symbols are a GNU extension to the + standard set of ELF symbol bindings. For such a symbol the + dynamic linker will make sure that in the entire process + there is just one symbol with this name and type in use. + + `w' + The symbol is weak (w) or strong (a space). + + `C' + The symbol denotes a constructor (C) or an ordinary symbol (a + space). + + `W' + The symbol is a warning (W) or a normal symbol (a space). A + warning symbol's name is a message to be displayed if the + symbol following the warning symbol is ever referenced. + + `I' + + `i' + The symbol is an indirect reference to another symbol (I), a + function to be evaluated during reloc processing (i) or a + normal symbol (a space). + + `d' + `D' + The symbol is a debugging symbol (d) or a dynamic symbol (D) + or a normal symbol (a space). + + `F' + + `f' + + `O' + The symbol is the name of a function (F) or a file (f) or an + object (O) or just a normal symbol (a space). `-T' `--dynamic-syms' @@ -1690,7 +1940,7 @@ File: binutils.info, Node: ranlib, Next: readelf, Prev: objdump, Up: Top 5 ranlib ******** - ranlib [`-vV'] ARCHIVE + ranlib [`-vVt'] 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 @@ -1710,6 +1960,9 @@ their placement in the archive. `--version' Show the version number of `ranlib'. +`-t' + Update the timestamp of the symbol map of an archive. +  File: binutils.info, Node: size, Next: strings, Prev: readelf, Up: Top @@ -1808,7 +2061,7 @@ File: binutils.info, Node: strings, Next: strip, Prev: size, Up: Top 7 strings ********* - strings [`-afov'] [`-'MIN-LEN] + strings [`-afovV'] [`-'MIN-LEN] [`-n' MIN-LEN] [`--bytes='MIN-LEN] [`-t' RADIX] [`--radix='RADIX] [`-e' ENCODING] [`--encoding='ENCODING] @@ -1864,7 +2117,8 @@ files. 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. + Useful for finding wide character strings. (`l' and `b' apply to, + for example, Unicode UTF-16/UCS-2 encodings). `-T BFDNAME' `--target=BFDNAME' @@ -1872,6 +2126,7 @@ files. format. *Note Target Selection::, for more information. `-v' +`-V' `--version' Print the program version number on the standard output and exit. @@ -2020,23 +2275,23 @@ writing modified copies under different names. 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: + 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' + 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 + 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. - Note - this switch is only intended for use on fully linked files. + 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 @@ -2106,11 +2361,11 @@ 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: + and will display "f(),", i.e., 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. For example: .type _Z1fv, @function @@ -2122,11 +2377,6 @@ after a mangled name. eg: 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. @@ -2141,8 +2391,8 @@ after a mangled name. eg: 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". + non-mangled names. For example, a function called "a" treated as + a mangled type name would be demangled to "signed char". `-i' `--no-verbose' @@ -2492,13 +2742,12 @@ Compiler. `-v' `--verbose' - Enable verbose mode. This tells you what the preprocessor is if - you didn't specify one. + Enable verbose mode. `-V' `--version' - Prints the version number for `windres'. + Prints the version number for `windmc'. `-x PATH' `--xdgb PATH' @@ -2697,6 +2946,7 @@ export information. [`-e'|`--output-exp' EXPORTS-FILE-NAME] [`-z'|`--output-def' DEF-FILE-NAME] [`-l'|`--output-lib' LIBRARY-FILE-NAME] + [`-y'|`--output-delaylib' LIBRARY-FILE-NAME] [`--export-all-symbols'] [`--no-export-all-symbols'] [`--exclude-symbols' LIST] [`--no-default-excludes'] @@ -2706,7 +2956,10 @@ export information. [`-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'] + [`-x'|`--no-idata4'] [`-c'|`--no-idata5'] + [`--use-nul-prefixed-import-tables'] + [`-I'|`--identify' LIBRARY-FILE-NAME] [`--identify-strict'] + [`-i'|`--interwork'] [`-n'|`--nodelete'] [`-t'|`--temp-prefix' PREFIX] [`-v'|`--verbose'] [`-h'|`--help'] [`-V'|`--version'] @@ -2748,9 +3001,16 @@ 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. +programs will link with in order to access the functions in the DLL (an +`import library'). This file can be created by giving the `-l' option +to dlltool when it is creating or reading in a `.def' file. + + If the `-y' option is specified, dlltool generates a delay-import +library that can be used instead of the normal import library to allow +a program to link to the dll only as soon as an imported function is +called for the first time. The resulting executable will need to be +linked to the static delayimp library containing __delayLoadHelper2(), +which in turn will import LoadLibraryA and GetProcAddress from kernel32. `dlltool' builds the library file by hand, but it builds the exports file by creating temporary files containing assembler statements and @@ -2771,6 +3031,10 @@ uses that DLL: gcc dll.o exports.o -o dll.dll gcc program.o dll.lib -o program + `dlltool' may also be used to query an existing import library to +determine the name of the DLL to which it is associated. See the +description of the `-I' or `--identify' option. + The command line options have the following meanings: `-d FILENAME' @@ -2795,6 +3059,11 @@ uses that DLL: `--output-lib FILENAME' Specifies the name of the library file to be created by dlltool. +`-y FILENAME' +`--output-delaylib FILENAME' + Specifies the name of the delay-import 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 @@ -2899,12 +3168,31 @@ uses that DLL: files it should omit the `.idata4' section. This is for compatibility with certain operating systems. +`--use-nul-prefixed-import-tables' + Specifies that when `dlltool' is creating the exports and library + files it should prefix the `.idata4' and `.idata5' by zero an + element. This emulates old gnu import library generation of + `dlltool'. By default this option is turned off. + `-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 FILENAME' +`--identify FILENAME' + Specifies that `dlltool' should inspect the import library + indicated by FILENAME and report, on `stdout', the name(s) of the + associated DLL(s). This can be performed in addition to any other + operations indicated by the other options and arguments. + `dlltool' fails if the import library does not exist or is not + actually an import library. See also `--identify-strict'. + +`--identify-strict' + Modifies the behavior of the `--identify' option, such that an + error is reported if FILENAME is associated with more than one DLL. + `-i' `--interwork' Specifies that `dlltool' should mark the objects in the library @@ -3010,8 +3298,11 @@ File: binutils.info, Node: readelf, Next: size, Prev: ranlib, Up: Top [`-A'|`--arch-specific'] [`-D'|`--use-dynamic'] [`-x' |`--hex-dump='] - [`-w[liaprmfFsoR]'| - `--debug-dump'[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] + [`-p' |`--string-dump='] + [`-R' |`--relocated-dump='] + [`-c'|`--archive-index'] + [`-w[lLiaprmfFsoR]'| + `--debug-dump'[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] [`-I'|`-histogram'] [`-v'|`--version'] [`-W'|`--wide'] @@ -3111,17 +3402,42 @@ equivalent. At least one option besides `-v' or `-H' must be given. `-x ' `--hex-dump=' Displays the contents of the indicated section as a hexadecimal - dump. A number identifies a particular section by index in the + bytes. 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. + +`-R ' +`--relocated-dump=' + Displays the contents of the indicated section as a hexadecimal + bytes. 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. The contents of the section will be + relocated before they are displayed. + +`-p ' +`--string-dump=' + Displays the contents of the indicated section as printable + strings. 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]' +`-c' +`--archive-index' + Displays the file symbol index infomation contained in the header + part of binary archives. Performs the same function as the `t' + command to `ar', but without using the BFD library. *Note ar::. + +`-w[lLiaprmfFsoR]' +`--debug-dump[=rawline,=decodedline,=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. + Note: the `=decodedline' option will display the interpreted + contents of a .debug_line section whereas the `=rawline' option + dumps the contents in a raw format. + `-I' `--histogram' Display a histogram of bucket list lengths when displaying the @@ -3146,7 +3462,7 @@ equivalent. At least one option besides `-v' or `-H' must be given.  -File: binutils.info, Node: Common Options, Next: Selecting The Target System, Prev: dlltool, Up: Top +File: binutils.info, Node: Common Options, Next: Selecting the Target System, Prev: dlltool, Up: Top 16 Common Options ***************** @@ -3176,7 +3492,7 @@ described in this manual.  -File: binutils.info, Node: Selecting The Target System, Next: Reporting Bugs, Prev: Common Options, Up: Top +File: binutils.info, Node: Selecting the Target System, Next: Reporting Bugs, Prev: Common Options, Up: Top 17 Selecting the Target System ****************************** @@ -3205,7 +3521,7 @@ same type as the target system). * Architecture Selection::  -File: binutils.info, Node: Target Selection, Next: Architecture Selection, Up: Selecting The Target System +File: binutils.info, Node: Target Selection, Next: Architecture Selection, Up: Selecting the Target System 17.1 Target Selection ===================== @@ -3280,7 +3596,7 @@ Ways to specify: 3. deduced from the input file  -File: binutils.info, Node: Architecture Selection, Prev: Target Selection, Up: Selecting The Target System +File: binutils.info, Node: Architecture Selection, Prev: Target Selection, Up: Selecting the Target System 17.2 Architecture Selection =========================== @@ -3311,7 +3627,7 @@ 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 +File: binutils.info, Node: Reporting Bugs, Next: GNU Free Documentation License, Prev: Selecting the Target System, Up: Top 18 Reporting Bugs ***************** @@ -3505,24 +3821,23 @@ File: binutils.info, Node: GNU Free Documentation License, Next: Binutils Inde Appendix A GNU Free Documentation License ***************************************** - Version 1.1, March 2000 + Version 1.3, 3 November 2008 - Copyright (C) 2000, 2003 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. + `http://fsf.org/' 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. + functional and useful 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. @@ -3538,60 +3853,71 @@ Appendix A GNU Free Documentation License 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." + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. - A "Secondary Section" is a named appendix or a front-matter - section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the - Document's overall subject (or to related matters) and contains - nothing that could fall directly within that overall subject. - (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. + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this - License. + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly - and straightforwardly with generic text editors or (for images + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup has been designed - to thwart or discourage subsequent modification by readers is not - Transparent. A copy that is not "Transparent" is called "Opaque." + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain 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. + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF + produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the @@ -3600,6 +3926,25 @@ Appendix A GNU Free Documentation License Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. + The "publisher" means any person or entity that distributes copies + of the Document to the public. + + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either @@ -3618,10 +3963,11 @@ Appendix A GNU Free Documentation License 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 + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the @@ -3639,11 +3985,10 @@ Appendix A GNU Free Documentation License 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 + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated @@ -3666,57 +4011,75 @@ Appendix A GNU Free Documentation License 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. + 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 fewer than five), unless they release you + from this requirement. + + 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", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + 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. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + 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 to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no @@ -3726,11 +4089,11 @@ Appendix A GNU Free Documentation License 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 standard. + 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 @@ -3754,7 +4117,8 @@ Appendix A GNU Free Documentation License 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. + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -3766,11 +4130,11 @@ Appendix A GNU Free Documentation License the list of Invariant Sections in the license notice of the combined work. - In the combination, you must combine any sections entitled + 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." + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS @@ -3791,20 +4155,20 @@ Appendix A GNU Free Documentation License 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. + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one - 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. + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. 8. TRANSLATION @@ -3814,20 +4178,45 @@ Appendix A GNU Free Documentation License 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. + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. 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. + except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, or distribute it is void, + and will automatically terminate your rights under this License. + + However, if you cease all violation of this License, then your + license from a particular copyright holder is reinstated (a) + provisionally, unless and until the copyright holder explicitly + and finally terminates your license, and (b) permanently, if the + copyright holder fails to notify you of the violation by some + reasonable means prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is + reinstated permanently if the copyright holder notifies you of the + violation by some reasonable means, this is the first time you have + received notice of violation of this License (for any work) from + that copyright holder, and you cure the violation prior to 30 days + after your receipt of the notice. + + Termination of your rights under this section does not terminate + the licenses of parties who have received copies or rights from + you under this License. If your rights have been terminated and + not permanently reinstated, receipt of a copy of some or all of + the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE @@ -3835,7 +4224,7 @@ Appendix A GNU Free Documentation License 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/. + `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered @@ -3845,7 +4234,40 @@ Appendix A GNU Free Documentation License 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. + Free Software Foundation. If the Document specifies that a proxy + can decide which future versions of this License can be used, that + proxy's public statement of acceptance of a version permanently + authorizes you to choose that version for the Document. + + 11. RELICENSING + + "Massive Multiauthor Collaboration Site" (or "MMC Site") means any + World Wide Web server that publishes copyrightable works and also + provides prominent facilities for anybody to edit those works. A + public wiki that anybody can edit is an example of such a server. + A "Massive Multiauthor Collaboration" (or "MMC") contained in the + site means any set of copyrightable works thus published on the MMC + site. + + "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 + license published by Creative Commons Corporation, a not-for-profit + corporation with a principal place of business in San Francisco, + California, as well as future copyleft versions of that license + published by that same organization. + + "Incorporate" means to publish or republish a Document, in whole or + in part, as part of another Document. + + An MMC is "eligible for relicensing" if it is licensed under this + License, and if all works that were first published under this + License somewhere other than this MMC, and subsequently + incorporated in whole or in part into the MMC, (1) had no cover + texts or invariant sections, and (2) were thus incorporated prior + to November 1, 2008. + + The operator of an MMC Site may republish an MMC contained in the + site under CC-BY-SA on the same site at any time before August 1, + 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents @@ -3855,19 +4277,24 @@ 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." + 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.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. - 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 you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of @@ -3883,95 +4310,102 @@ Binutils Index [index] * Menu: -* .stab: objdump. (line 324) +* .stab: objdump. (line 370) +* Add prefix to absolute paths: objdump. (line 341) * addr2line: addr2line. (line 6) * address to file name and line number: addr2line. (line 6) -* all header information, object file: objdump. (line 364) +* all header information, object file: objdump. (line 489) * ar: ar. (line 6) -* ar compatibility: ar. (line 40) -* architecture: objdump. (line 176) -* architectures available: objdump. (line 161) +* ar compatibility: ar. (line 50) +* architecture: objdump. (line 195) +* architectures available: objdump. (line 180) * archive contents: ranlib. (line 6) -* archive headers: objdump. (line 60) +* Archive file symbol index information: readelf. (line 147) +* archive headers: objdump. (line 65) * archives: ar. (line 6) -* base files: dlltool. (line 108) +* base files: dlltool. (line 123) * 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 275) -* changing section address: objcopy. (line 285) -* changing section LMA: objcopy. (line 293) -* changing section VMA: objcopy. (line 306) -* changing start address: objcopy. (line 270) +* changing object addresses: objcopy. (line 282) +* changing section address: objcopy. (line 292) +* changing section LMA: objcopy. (line 300) +* changing section VMA: objcopy. (line 313) +* changing start address: objcopy. (line 277) * collections of files: ar. (line 6) -* compatibility, ar: ar. (line 40) +* compatibility, ar: ar. (line 50) * contents of archive: ar cmdline. (line 88) * crash: Bug Criteria. (line 9) -* creating archives: ar cmdline. (line 127) +* creating archives: ar cmdline. (line 129) +* creating thin archive: ar cmdline. (line 190) * cxxfilt: c++filt. (line 14) -* dates in archive: ar cmdline. (line 154) -* debug symbols: objdump. (line 319) -* debugging symbols: nm. (line 116) +* dates in archive: ar cmdline. (line 164) +* debug symbols: objdump. (line 370) +* debugging symbols: nm. (line 141) * deleting from archive: ar cmdline. (line 26) * demangling C++ symbols: c++filt. (line 6) -* demangling in nm: nm. (line 124) +* demangling in nm: nm. (line 149) * 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) +* demangling in objdump: objdump. (line 93) +* deterministic archives: ar cmdline. (line 135) +* disassembling object code: objdump. (line 115) +* disassembly architecture: objdump. (line 195) +* disassembly endianness: objdump. (line 135) +* disassembly, with source: objdump. (line 337) * 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) +* DWARF: objdump. (line 363) +* dynamic relocation entries, in object file: objdump. (line 325) +* dynamic symbol table entries, printing: objdump. (line 473) +* dynamic symbols: nm. (line 161) +* ELF dynamic section information: readelf. (line 105) +* ELF file header information: readelf. (line 54) * 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) +* ELF notes: readelf. (line 90) +* ELF object file format: objdump. (line 370) +* ELF program header information: readelf. (line 60) +* ELF reloc information: readelf. (line 94) +* ELF section group information: readelf. (line 71) +* ELF section information: readelf. (line 66) +* ELF segment information: readelf. (line 60) +* ELF symbol table information: readelf. (line 81) +* ELF version sections informations: readelf. (line 109) +* endianness: objdump. (line 135) * error on valid input: Bug Criteria. (line 12) -* external symbols: nm. (line 148) +* external symbols: nm. (line 253) * 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) +* file name: nm. (line 135) +* header information, all: objdump. (line 489) +* input .def file: dlltool. (line 119) +* input file name: nm. (line 135) +* Instruction width: objdump. (line 358) * libraries: ar. (line 25) * listings strings: strings. (line 6) -* machine instructions: objdump. (line 110) +* load plugin: nm. (line 176) +* machine instructions: objdump. (line 115) * 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) +* nm compatibility: nm. (line 167) +* nm format: nm. (line 145) +* not writing archive index: ar cmdline. (line 183) * objdump: objdump. (line 6) * object code format <1>: addr2line. (line 50) -* object code format <2>: strings. (line 66) -* object code format <3>: size. (line 84) -* object code format <4>: objdump. (line 74) -* object code format: nm. (line 212) -* object file header: objdump. (line 132) +* object code format <2>: strings. (line 67) +* object code format <3>: objdump. (line 79) +* object code format <4>: size. (line 84) +* object code format: nm. (line 244) +* object file header: objdump. (line 141) * object file information: objdump. (line 6) -* object file sections: objdump. (line 300) -* object formats available: objdump. (line 161) +* object file offsets: objdump. (line 146) +* object file sections: objdump. (line 332) +* object formats available: objdump. (line 180) * operations on archive: ar cmdline. (line 22) * printing from archive: ar cmdline. (line 46) * printing strings: strings. (line 6) @@ -3979,79 +4413,81 @@ Binutils Index * radix for section sizes: size. (line 66) * ranlib: ranlib. (line 6) * readelf: readelf. (line 6) -* relative placement in archive: ar cmdline. (line 115) -* relocation entries, in object file: objdump. (line 288) +* relative placement in archive: ar cmdline. (line 117) +* relocation entries, in object file: objdump. (line 319) * 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 addresses in objdump: objdump. (line 71) +* section headers: objdump. (line 162) +* section information: objdump. (line 185) * section sizes: size. (line 6) -* sections, full contents: objdump. (line 300) +* sections, full contents: objdump. (line 332) * size: size. (line 6) * size display format: size. (line 27) * size number format: size. (line 66) -* 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) +* sorting symbols: nm. (line 197) +* source code context: objdump. (line 155) +* source disassembly: objdump. (line 337) +* source file name: nm. (line 135) +* source filenames for object files: objdump. (line 189) +* stab: objdump. (line 370) +* start-address: objdump. (line 380) +* stop-address: objdump. (line 384) * strings: strings. (line 6) * strings, printing: strings. (line 6) * strip: strip. (line 6) +* Strip absolute paths: objdump. (line 344) * 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) +* symbol index, listing: nm. (line 214) +* symbol line numbers: nm. (line 182) +* symbol table entries, printing: objdump. (line 389) * symbols: nm. (line 6) * symbols, discarding: strip. (line 6) -* undefined symbols: nm. (line 217) +* thin archives: ar. (line 40) +* undefined symbols: nm. (line 249) * Unix compatibility, ar: ar cmdline. (line 8) -* unwind information: readelf. (line 96) -* updating an archive: ar cmdline. (line 180) +* unwind information: readelf. (line 99) +* updating an archive: ar cmdline. (line 195) * version: Top. (line 6) -* VMA in objdump: objdump. (line 66) -* wide output, printing: objdump. (line 370) -* writing archive index: ar cmdline. (line 167) +* VMA in objdump: objdump. (line 71) +* wide output, printing: objdump. (line 495) +* writing archive index: ar cmdline. (line 177)  Tag Table: -Node: Top1785 -Node: ar3412 -Node: ar cmdline5590 -Node: ar scripts13733 -Node: nm19421 -Node: objcopy27616 -Node: objdump53142 -Node: ranlib68108 -Node: size68863 -Node: strings71868 -Node: strip74246 -Node: c++filt80196 -Ref: c++filt-Footnote-185120 -Node: addr2line85226 -Node: nlmconv88497 -Node: windmc91103 -Node: windres94824 -Node: dlltool100851 -Node: def file format111688 -Node: readelf113426 -Node: Common Options118133 -Node: Selecting The Target System119173 -Node: Target Selection120105 -Node: Architecture Selection122087 -Node: Reporting Bugs122915 -Node: Bug Criteria123694 -Node: Bug Reporting124247 -Node: GNU Free Documentation License131117 -Node: Binutils Index150858 +Node: Top1929 +Node: ar3572 +Node: ar cmdline6377 +Node: ar scripts15420 +Node: nm21108 +Node: objcopy30582 +Node: objdump58823 +Node: ranlib79295 +Node: size80116 +Node: strings83121 +Node: strip85579 +Node: c++filt91530 +Ref: c++filt-Footnote-196375 +Node: addr2line96481 +Node: nlmconv99752 +Node: windmc102358 +Node: windres106005 +Node: dlltool112032 +Node: def file format124716 +Node: readelf126454 +Node: Common Options132460 +Node: Selecting the Target System133500 +Node: Target Selection134432 +Node: Architecture Selection136414 +Node: Reporting Bugs137242 +Node: Bug Criteria138021 +Node: Bug Reporting138574 +Node: GNU Free Documentation License145444 +Node: Binutils Index170623  End Tag Table diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index cc45b56..70003db 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -1,43 +1,20 @@ \input texinfo @c -*- Texinfo -*- @setfilename binutils.info -@c Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 -@c Free Software Foundation, Inc. +@settitle @sc{gnu} Binary Utilities +@finalout +@synindex ky cp @c man begin INCLUDE @include bfdver.texi @c man end -@ifinfo -@format -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 -* 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 - @copying @c man begin COPYRIGHT Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the @@ -46,22 +23,32 @@ section entitled ``GNU Free Documentation License''. @c man end @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, 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 - -@setchapternewpage odd -@settitle @sc{gnu} Binary Utilities +@dircategory Software development +@direntry +* Binutils: (binutils). The GNU binary utilities. +@end direntry + +@dircategory Individual utilities +@direntry +* addr2line: (binutils)addr2line. Convert addresses to file and line. +* ar: (binutils)ar. Create, modify, and extract from archives. +* c++filt: (binutils)c++filt. Filter to demangle encoded C++ symbols. +* cxxfilt: (binutils)c++filt. MS-DOS name for c++filt. +* dlltool: (binutils)dlltool. Create files needed to build and use DLLs. +* nlmconv: (binutils)nlmconv. Converts object code into an NLM. +* 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. +* windmc: (binutils)windmc. Generator for Windows message resources. +* windres: (binutils)windres. Manipulate Windows resources. +@end direntry + @titlepage -@finalout @title The @sc{gnu} Binary Utilities @ifset VERSION_PACKAGE @subtitle @value{VERSION_PACKAGE} @@ -76,20 +63,11 @@ section entitled ``GNU Free Documentation License''. @tex {\parskip=0pt \hfill Cygnus Support\par \hfill -\TeX{}info \texinfoversion\par } +Texinfo \texinfoversion\par } @end tex @vskip 0pt plus 1filll -Copyright @copyright{} 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, -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 - 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''. - +@insertcopying @end titlepage @contents @@ -155,8 +133,8 @@ Create the files needed to build and use Dynamic Link Libraries @end iftex 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". +Documentation License version 1.3. A copy of the license is included +in the section entitled ``GNU Free Documentation License''. @menu * ar:: Create, modify, and extract from archives @@ -164,7 +142,7 @@ section entitled "GNU Free Documentation License". * 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. +* readelf:: Display the contents of ELF format files * size:: List section sizes and total size * strings:: List printable strings from files * strip:: Discard symbols @@ -176,10 +154,10 @@ section entitled "GNU Free Documentation License". * 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. +* Selecting the Target System:: How these utilities determine the target * Reporting Bugs:: Reporting Bugs * GNU Free Documentation License:: GNU Free Documentation License -* Binutils Index:: Binutils Index +* Binutils Index:: Binutils Index @end menu @node ar @@ -192,7 +170,7 @@ section entitled "GNU Free Documentation License". @c man title ar create, modify, and extract from archives @smallexample -ar [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}] +ar [@option{--plugin} @var{name}] [-]@var{p}[@var{mod} [@var{relpos}] [@var{count}]] @var{archive} [@var{member}@dots{}] ar -M [ @end smallexample +@item --long-section-names @{enable,disable,keep@} +Controls the handling of long section names when processing @code{COFF} +and @code{PE-COFF} object formats. The default behaviour, @samp{keep}, +is to preserve long section names if any are present in the input file. +The @samp{enable} and @samp{disable} options forcibly enable or disable +the use of long section names in the output object; when @samp{disable} +is in effect, any long section names in the input object will be truncated. +The @samp{enable} option will only emit long section names if any are +present in the inputs; this is mostly the same as @samp{keep}, but it +is left undefined whether the @samp{enable} option might force the +creation of an empty string table in the output file. + @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 @@ -1501,7 +1564,7 @@ stripped executable. to add a link to the debugging info into the stripped executable. @end enumerate -Note - the choice of @code{.dbg} as an extension for the debug info +Note---the choice of @code{.dbg} as an extension for the debug info file is arbitrary. Also the @code{--only-keep-debug} step is optional. You could instead do this: @@ -1516,19 +1579,61 @@ 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 +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 --file-alignment @var{num} +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 PE targets.] + +@item --heap @var{reserve} +@itemx --heap @var{reserve},@var{commit} +Specify the number of bytes of memory to reserve (and optionally commit) +to be used as heap for this program. +[This option is specific to PE targets.] + +@item --image-base @var{value} +Use @var{value} as the base address of your program or dll. This is +the lowest memory location that will be used when your program or dll +is loaded. To reduce the need to relocate and improve performance of +your dlls, each should have a unique base address and not overlap any +other dlls. The default is 0x400000 for executables, and 0x10000000 +for dlls. +[This option is specific to PE targets.] + +@item --section-alignment @var{num} +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 PE targets.] + +@item --stack @var{reserve} +@itemx --stack @var{reserve},@var{commit} +Specify the number of bytes of memory to reserve (and optionally commit) +to be used as stack for this program. +[This option is specific to PE targets.] + +@item --subsystem @var{which} +@itemx --subsystem @var{which}:@var{major} +@itemx --subsystem @var{which}:@var{major}.@var{minor} +Specifies the subsystem under which your program will execute. The +legal values for @var{which} are @code{native}, @code{windows}, +@code{console}, @code{posix}, @code{efi-app}, @code{efi-bsd}, +@code{efi-rtd}, @code{sal-rtd}, and @code{xbox}. You may optionally set +the subsystem version also. Numeric values are also accepted for +@var{which}. +[This option is specific to PE targets.] + @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. @@ -1580,6 +1685,7 @@ objdump [@option{-a}|@option{--archive-headers}] [@option{-z}|@option{--disassemble-zeroes}] [@option{-EB}|@option{-EL}|@option{--endian=}@{big | little @}] [@option{-f}|@option{--file-headers}] + [@option{-F}|@option{--file-offsets}] [@option{--file-start-context}] [@option{-g}|@option{--debugging}] [@option{-e}|@option{--debugging-tags}] @@ -1594,7 +1700,8 @@ objdump [@option{-a}|@option{--archive-headers}] [@option{-r}|@option{--reloc}] [@option{-R}|@option{--dynamic-reloc}] [@option{-s}|@option{--full-contents}] - [@option{-W}|@option{--dwarf}] + [@option{-W[lLiaprmfFsoR]}| + @option{--dwarf}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] [@option{-G}|@option{--stabs}] [@option{-t}|@option{--syms}] [@option{-T}|@option{--dynamic-syms}] @@ -1606,6 +1713,9 @@ objdump [@option{-a}|@option{--archive-headers}] [@option{--[no-]show-raw-insn}] [@option{--adjust-vma=}@var{offset}] [@option{--special-syms}] + [@option{--prefix=}@var{prefix}] + [@option{--prefix-strip=}@var{level}] + [@option{--insn-width=}@var{width}] [@option{-V}|@option{--version}] [@option{-H}|@option{--help}] @var{objfile}@dots{} @@ -1680,11 +1790,11 @@ for more information on demangling. @item -g @itemx --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 @command{readelf -w}. -@xref{readelf}. +Display debugging information. This attempts to parse STABS and IEEE +debugging format information stored in the file and print it out using +a C like syntax. If neither of these formats are found this option +falls back on the @option{-W} option to print any DWARF information in +the file. @item -e @itemx --debugging-tags @@ -1704,6 +1814,10 @@ expected to contain instructions. Like @option{-d}, but disassemble the contents of all sections, not just those expected to contain instructions. +If the target is an ARM architecture this switch also has the effect +of forcing the disassembler to decode pieces of data found in code +sections as if they were instructions. + @item --prefix-addresses When disassembling, print the complete address on each line. This is the older disassembly format. @@ -1723,6 +1837,16 @@ does not describe endianness information, such as S-records. Display summary information from the overall header of each of the @var{objfile} files. +@item -F +@itemx --file-offsets +@cindex object file offsets +When disassembling sections, whenever a symbol is displayed, also +display the file offset of the region of data that is about to be +dumped. If zeroes are being skipped, then when disassembly resumes, +tell the user how many zeroes were skipped and the file offset of the +location from where the disassembly resumes. When dumping sections, +display the file offset of the location from where the dump starts. + @item --file-start-context @cindex source code context Specify that when displaying interlisted source code/disassembly @@ -1777,6 +1901,13 @@ 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 @option{-i} option. +If the target is an ARM architecture then this switch has an +additional effect. It restricts the disassembly to only those +instructions supported by the architecture specified by @var{machine}. +If it is necessary to use this switch because the input file does not +contain any architecture information, but it is also desired to +disassemble all the instructions use @option{-marm}. + @item -M @var{options} @itemx --disassembler-options=@var{options} Pass target specific information to the disassembler. Only supported on @@ -1809,7 +1940,11 @@ 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{addr64}, @option{addr32}, +intel syntax mode and AT&T syntax mode. +@option{intel-mnemonic} and @option{att-mnemonic} select between +intel mnemonic mode and AT&T mnemonic mode. @option{intel-mnemonic} +implies @option{intel} and @option{att-mnemonic} implies @option{att}. +@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 @@ -1817,11 +1952,12 @@ option string. Lastly, @option{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, @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 +For PowerPC, @option{booke} controls the disassembly of BookE +instructions. @option{32} and @option{64} select PowerPC and +PowerPC64 disassembly, respectively. @option{e300} selects disassembly for the e300 family. @option{440} selects disassembly for -the PowerPC 440. +the PowerPC 440. @option{ppcps} selects disassembly for the paired +single instructions of the PPC750CL. For MIPS, this option controls the printing of instruction mnemonic names and register names in disassembled instructions. Multiple @@ -1895,7 +2031,9 @@ disassembly. @cindex dynamic relocation entries, in object file Print the dynamic relocation entries of the file. This is only meaningful for dynamic objects, such as certain types of shared -libraries. +libraries. As for @option{-r}, if used with @option{-d} or +@option{-D}, the relocations are printed interspersed with the +disassembly. @item -s @itemx --full-contents @@ -1911,6 +2049,16 @@ non-empty sections are displayed. Display source code intermixed with disassembly, if possible. Implies @option{-d}. +@item --prefix=@var{prefix} +@cindex Add prefix to absolute paths +Specify @var{prefix} to add to the absolute paths when used with +@option{-S}. + +@item --prefix-strip=@var{level} +@cindex Strip absolute paths +Indicate how many initial directory names to strip off the hardwired +absolute paths. It has no effect without @option{--prefix=}@var{prefix}. + @item --show-raw-insn When disassembling instructions, print the instruction in hex as well as in symbolic form. This is the default except when @@ -1920,12 +2068,18 @@ in symbolic form. This is the default except when When disassembling instructions, do not print the instruction bytes. This is the default when @option{--prefix-addresses} is used. -@item -W -@itemx --dwarf +@item --insn-width=@var{width} +@cindex Instruction width +Display @var{width} bytes on a single line when disassembling +instructions. + +@item -W[lLiaprmfFsoR] +@itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] @cindex DWARF @cindex debug symbols -Displays the contents of the DWARF debug sections in the file, if any -are present. +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. @item -G @itemx --stabs @@ -1959,7 +2113,86 @@ of the @option{-d}, @option{-r} and @option{-s} options. @itemx --syms @cindex symbol table entries, printing Print the symbol table entries of the file. -This is similar to the information provided by the @samp{nm} program. +This is similar to the information provided by the @samp{nm} program, +although the display format is different. The format of the output +depends upon the format of the file being dumped, but there are two main +types. One looks like this: + +@smallexample +[ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss +[ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred +@end smallexample + +where the number inside the square brackets is the number of the entry +in the symbol table, the @var{sec} number is the section number, the +@var{fl} value are the symbol's flag bits, the @var{ty} number is the +symbol's type, the @var{scl} number is the symbol's storage class and +the @var{nx} value is the number of auxilary entries associated with +the symbol. The last two fields are the symbol's value and its name. + +The other common output format, usually seen with ELF based files, +looks like this: + +@smallexample +00000000 l d .bss 00000000 .bss +00000000 g .text 00000000 fred +@end smallexample + +Here the first number is the symbol's value (sometimes refered to as +its address). The next field is actually a set of characters and +spaces indicating the flag bits that are set on the symbol. These +characters are described below. Next is the section with which the +symbol is associated or @emph{*ABS*} if the section is absolute (ie +not connected with any section), or @emph{*UND*} if the section is +referenced in the file being dumped, but not defined there. + +After the section name comes another field, a number, which for common +symbols is the alignment and for other symbol is the size. Finally +the symbol's name is displayed. + +The flag characters are divided into 7 groups as follows: +@table @code +@item l +@itemx g +@itemx u +@itemx ! +The symbol is a local (l), global (g), unique global (u), neither +global nor local (a space) or both global and local (!). A +symbol can be neither local or global for a variety of reasons, e.g., +because it is used for debugging, but it is probably an indication of +a bug if it is ever both local and global. Unique global symbols are +a GNU extension to the standard set of ELF symbol bindings. For such +a symbol the dynamic linker will make sure that in the entire process +there is just one symbol with this name and type in use. + +@item w +The symbol is weak (w) or strong (a space). + +@item C +The symbol denotes a constructor (C) or an ordinary symbol (a space). + +@item W +The symbol is a warning (W) or a normal symbol (a space). A warning +symbol's name is a message to be displayed if the symbol following the +warning symbol is ever referenced. + +@item I +@item i +The symbol is an indirect reference to another symbol (I), a function +to be evaluated during reloc processing (i) or a normal symbol (a +space). + +@item d +@itemx D +The symbol is a debugging symbol (d) or a dynamic symbol (D) or a +normal symbol (a space). + +@item F +@item f +@item O +The symbol is the name of a function (F) or a file (f) or an object +(O) or just a normal symbol (a space). +@end table @item -T @itemx --dynamic-syms @@ -2018,7 +2251,7 @@ nm(1), readelf(1), and the Info entries for @file{binutils}. @smallexample @c man begin SYNOPSIS ranlib -ranlib [@option{-vV}] @var{archive} +ranlib [@option{-vVt}] @var{archive} @c man end @end smallexample @@ -2047,6 +2280,9 @@ The @sc{gnu} @command{ranlib} program is another form of @sc{gnu} @command{ar}; @itemx -V @itemx --version Show the version number of @command{ranlib}. + +@item -t +Update the timestamp of the symbol map of an archive. @end table @c man end @@ -2193,7 +2429,7 @@ ar(1), objdump(1), readelf(1), and the Info entries for @file{binutils}. @smallexample @c man begin SYNOPSIS strings -strings [@option{-afov}] [@option{-}@var{min-len}] +strings [@option{-afovV}] [@option{-}@var{min-len}] [@option{-n} @var{min-len}] [@option{--bytes=}@var{min-len}] [@option{-t} @var{radix}] [@option{--radix=}@var{radix}] [@option{-e} @var{encoding}] [@option{--encoding=}@var{encoding}] @@ -2257,7 +2493,8 @@ Possible values for @var{encoding} are: @samp{s} = single-7-bit-byte characters (ASCII, ISO 8859, etc., default), @samp{S} = 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. +littleendian. Useful for finding wide character strings. (@samp{l} +and @samp{b} apply to, for example, Unicode UTF-16/UCS-2 encodings). @item -T @var{bfdname} @itemx --target=@var{bfdname} @@ -2266,6 +2503,7 @@ Specify an object code format other than your system's default format. @xref{Target Selection}, for more information. @item -v +@itemx -V @itemx --version Print the program version number on the standard output and exit. @end table @@ -2439,22 +2677,22 @@ stripped executable. to add a link to the debugging info into the stripped executable. @end enumerate -Note - the choice of @code{.dbg} as an extension for the debug info +Note---the choice of @code{.dbg} as an extension for the debug info file is arbitrary. Also the @code{--only-keep-debug} step is optional. You could instead do this: @enumerate @item Link the executable as normal. -@item Copy @code{foo} to @code{foo.full} +@item Copy @code{foo} to @code{foo.full} @item Run @code{strip --strip-debug foo} @item Run @code{objcopy --add-gnu-debuglink=foo.full foo} @end enumerate -ie 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 +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 @@ -2554,11 +2792,11 @@ name which makes it invalid). This command however will work: echo _Z1fv, | c++filt -n @end smallexample -and will display ``f(),'' ie the demangled name followed by a +and will display ``f(),'', i.e., 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: +characters trailing after a mangled name. For example: @smallexample .type _Z1fv, @@function @@ -2576,11 +2814,6 @@ of every name. For example, the C name @code{foo} gets the low-level name @code{_foo}. This option removes the initial underscore. Whether @command{c++filt} removes the underscore by default is target dependent. -@item -j -@itemx --java -Prints demangled names using Java syntax. The default is to use C++ -syntax. - @item -n @itemx --no-strip-underscores Do not remove the initial underscore. @@ -2594,7 +2827,7 @@ the function's parameters. @itemx --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 +the compiler, and they can be confused with non-mangled names. For example, a function called ``a'' treated as a mangled type name would be demangled to ``signed char''. @@ -3021,12 +3254,11 @@ 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. +Enable verbose mode. @item -V @item --version -Prints the version number for @command{windres}. +Prints the version number for @command{windmc}. @item -x @var{path} @itemx --xdgb @var{path} @@ -3260,6 +3492,7 @@ dlltool [@option{-d}|@option{--input-def} @var{def-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{-y}|@option{--output-delaylib} @var{library-file-name}] [@option{--export-all-symbols}] [@option{--no-export-all-symbols}] [@option{--exclude-symbols} @var{list}] [@option{--no-default-excludes}] @@ -3269,7 +3502,10 @@ dlltool [@option{-d}|@option{--input-def} @var{def-file-name}] [@option{-U}|@option{--add-underscore}] [@option{--add-stdcall-underscore}] [@option{-k}|@option{--kill-at}] [@option{-A}|@option{--add-stdcall-alias}] [@option{-p}|@option{--ext-prefix-alias} @var{prefix}] - [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}] [@option{-i}|@option{--interwork}] + [@option{-x}|@option{--no-idata4}] [@option{-c}|@option{--no-idata5}] + [@option{--use-nul-prefixed-import-tables}] + [@option{-I}|@option{--identify} @var{library-file-name}] [@option{--identify-strict}] + [@option{-i}|@option{--interwork}] [@option{-n}|@option{--nodelete}] [@option{-t}|@option{--temp-prefix} @var{prefix}] [@option{-v}|@option{--verbose}] [@option{-h}|@option{--help}] [@option{-V}|@option{--version}] @@ -3319,9 +3555,16 @@ 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. 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 @option{-l} option to dlltool when it -is creating or reading in a @file{.def} file. +will link with in order to access the functions in the DLL (an `import +library'). This file can be created by giving the @option{-l} option to +dlltool when it is creating or reading in a @file{.def} file. + +If the @option{-y} option is specified, dlltool generates a delay-import +library that can be used instead of the normal import library to allow +a program to link to the dll only as soon as an imported function is +called for the first time. The resulting executable will need to be +linked to the static delayimp library containing __delayLoadHelper2(), +which in turn will import LoadLibraryA and GetProcAddress from kernel32. @command{dlltool} builds the library file by hand, but it builds the exports file by creating temporary files containing assembler statements @@ -3344,6 +3587,11 @@ that uses that DLL: gcc program.o dll.lib -o program @end smallexample + +@command{dlltool} may also be used to query an existing import library +to determine the name of the DLL to which it is associated. See the +description of the @option{-I} or @option{--identify} option. + @c man end @c man begin OPTIONS dlltool @@ -3376,6 +3624,10 @@ Specifies the name of the @file{.def} file to be created by dlltool. @itemx --output-lib @var{filename} Specifies the name of the library file to be created by dlltool. +@item -y @var{filename} +@itemx --output-delaylib @var{filename} +Specifies the name of the delay-import library file to be created by dlltool. + @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 @@ -3477,12 +3729,32 @@ Specifies that when @command{dlltool} is creating the exports and library files it should omit the @code{.idata4} section. This is for compatibility with certain operating systems. +@item --use-nul-prefixed-import-tables +Specifies that when @command{dlltool} is creating the exports and library +files it should prefix the @code{.idata4} and @code{.idata5} by zero an +element. This emulates old gnu import library generation of +@code{dlltool}. By default this option is turned off. + @item -c @itemx --no-idata5 Specifies that when @command{dlltool} is creating the exports and library files it should omit the @code{.idata5} section. This is for compatibility with certain operating systems. +@item -I @var{filename} +@itemx --identify @var{filename} +Specifies that @command{dlltool} should inspect the import library +indicated by @var{filename} and report, on @code{stdout}, the name(s) +of the associated DLL(s). This can be performed in addition to any +other operations indicated by the other options and arguments. +@command{dlltool} fails if the import library does not exist or is not +actually an import library. See also @option{--identify-strict}. + +@item --identify-strict +Modifies the behavior of the @option{--identify} option, such +that an error is reported if @var{filename} is associated with +more than one DLL. + @item -i @itemx --interwork Specifies that @command{dlltool} should mark the objects in the library @@ -3601,8 +3873,11 @@ readelf [@option{-a}|@option{--all}] [@option{-A}|@option{--arch-specific}] [@option{-D}|@option{--use-dynamic}] [@option{-x} |@option{--hex-dump=}] - [@option{-w[liaprmfFsoR]}| - @option{--debug-dump}[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] + [@option{-p} |@option{--string-dump=}] + [@option{-R} |@option{--relocated-dump=}] + [@option{-c}|@option{--archive-index}] + [@option{-w[lLiaprmfFsoR]}| + @option{--debug-dump}[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] [@option{-I}|@option{-histogram}] [@option{-v}|@option{--version}] [@option{-W}|@option{--wide}] @@ -3722,16 +3997,41 @@ symbols section. @item -x @itemx --hex-dump= -Displays the contents of the indicated section as a hexadecimal dump. +Displays the contents of the indicated section as a hexadecimal bytes. 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. -@item -w[liaprmfFsoR] -@itemx --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] +@item -R +@itemx --relocated-dump= +Displays the contents of the indicated section as a hexadecimal +bytes. 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. The contents of the section will be relocated +before they are displayed. + +@item -p +@itemx --string-dump= +Displays the contents of the indicated section as printable strings. +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. + +@item -c +@itemx --archive-index +@cindex Archive file symbol index information +Displays the file symbol index infomation contained in the header part +of binary archives. Performs the same function as the @option{t} +command to @command{ar}, but without using the BFD library. @xref{ar}. + +@item -w[lLiaprmfFsoR] +@itemx --debug-dump[=rawline,=decodedline,=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. +Note: the @option{=decodedline} option will display the interpreted +contents of a .debug_line section whereas the @option{=rawline} option +dumps the contents in a raw format. + @item -I @itemx --histogram Display a histogram of bucket list lengths when displaying the contents @@ -3784,7 +4084,7 @@ Display the version number of the program. @end table @c man end -@node Selecting The Target System +@node Selecting the Target System @chapter Selecting the Target System You can specify two aspects of the target system to the @sc{gnu} @@ -4140,6 +4440,9 @@ Such guesses are usually wrong. Even we cannot guess right about such things without first using the debugger to find the facts. @end itemize +@node GNU Free Documentation License +@appendix GNU Free Documentation License + @include fdl.texi @node Binutils Index diff --git a/binutils/doc/cxxfilt.man b/binutils/doc/cxxfilt.man index 21f4783..ace34ee 100644 --- a/binutils/doc/cxxfilt.man +++ b/binutils/doc/cxxfilt.man @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "C++FILT 1" -.TH C++FILT 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH C++FILT 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" cxxfilt \- Demangle C++ and Java symbols. .SH "SYNOPSIS" @@ -193,11 +201,11 @@ name which makes it invalid). This command however will work: \& echo _Z1fv, | c++filt \-n .Ve .PP -and will display \*(L"f(),\*(R" ie the demangled name followed by a +and will display \*(L"f(),\*(R", i.e., 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: +characters trailing after a mangled name. For example: .PP .Vb 1 \& .type _Z1fv, @function @@ -214,14 +222,6 @@ 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 @@ -245,7 +245,7 @@ the function's parameters. .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 +the compiler, and they can be confused with non-mangled names. For example, 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 @@ -316,7 +316,7 @@ Print the version number of \fBc++filt\fR and exit. 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. +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 @@ -335,10 +335,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/dlltool.1 b/binutils/doc/dlltool.1 index ebe04b1..5d9dd27 100644 --- a/binutils/doc/dlltool.1 +++ b/binutils/doc/dlltool.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "DLLTOOL 1" -.TH DLLTOOL 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH DLLTOOL 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" dlltool \- Create files needed to build and use DLLs. .SH "SYNOPSIS" @@ -138,6 +146,7 @@ dlltool [\fB\-d\fR|\fB\-\-input\-def\fR \fIdef-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\-y\fR|\fB\-\-output\-delaylib\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] @@ -147,7 +156,10 @@ dlltool [\fB\-d\fR|\fB\-\-input\-def\fR \fIdef-file-name\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\-x\fR|\fB\-\-no\-idata4\fR] [\fB\-c\fR|\fB\-\-no\-idata5\fR] + [\fB\-\-use\-nul\-prefixed\-import\-tables\fR] + [\fB\-I\fR|\fB\-\-identify\fR \fIlibrary-file-name\fR] [\fB\-\-identify\-strict\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] @@ -183,9 +195,7 @@ section of the object file. This can be done in C by using the .Vb 2 \& asm (".section .drectve"); \& asm (".ascii \e"\-export:my_func\e""); -.Ve -.PP -.Vb 1 +\& \& int my_func (void) { ... } .Ve .PP @@ -196,9 +206,16 @@ 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. +will link with in order to access the functions in the \s-1DLL\s0 (an `import +library'). 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 +If the \fB\-y\fR option is specified, dlltool generates a delay-import +library that can be used instead of the normal import library to allow +a program to link to the dll only as soon as an imported function is +called for the first time. The resulting executable will need to be +linked to the static delayimp library containing _\|\fI_delayLoadHelper2()\fR, +which in turn will import LoadLibraryA and GetProcAddress from kernel32. .PP \&\fBdlltool\fR builds the library file by hand, but it builds the exports file by creating temporary files containing assembler statements @@ -220,6 +237,10 @@ that uses that \s-1DLL:\s0 \& gcc dll.o exports.o \-o dll.dll \& gcc program.o dll.lib \-o program .Ve +.PP +\&\fBdlltool\fR may also be used to query an existing import library +to determine the name of the \s-1DLL\s0 to which it is associated. See the +description of the \fB\-I\fR or \fB\-\-identify\fR option. .SH "OPTIONS" .IX Header "OPTIONS" The command line options have the following meanings: @@ -260,6 +281,13 @@ Specifies the name of the \fI.def\fR file to be created by dlltool. .IX Item "--output-lib filename" .PD Specifies the name of the library file to be created by dlltool. +.IP "\fB\-y\fR \fIfilename\fR" 4 +.IX Item "-y filename" +.PD 0 +.IP "\fB\-\-output\-delaylib\fR \fIfilename\fR" 4 +.IX Item "--output-delaylib filename" +.PD +Specifies the name of the delay-import 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 @@ -391,6 +419,12 @@ external and import symbols with no leading underscore. 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\-\-use\-nul\-prefixed\-import\-tables\fR" 4 +.IX Item "--use-nul-prefixed-import-tables" +Specifies that when \fBdlltool\fR is creating the exports and library +files it should prefix the \f(CW\*(C`.idata4\*(C'\fR and \f(CW\*(C`.idata5\*(C'\fR by zero an +element. This emulates old gnu import library generation of +\&\f(CW\*(C`dlltool\*(C'\fR. By default this option is turned off. .IP "\fB\-c\fR" 4 .IX Item "-c" .PD 0 @@ -400,6 +434,23 @@ with certain operating systems. 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 \fIfilename\fR" 4 +.IX Item "-I filename" +.PD 0 +.IP "\fB\-\-identify\fR \fIfilename\fR" 4 +.IX Item "--identify filename" +.PD +Specifies that \fBdlltool\fR should inspect the import library +indicated by \fIfilename\fR and report, on \f(CW\*(C`stdout\*(C'\fR, the name(s) +of the associated \s-1DLL\s0(s). This can be performed in addition to any +other operations indicated by the other options and arguments. +\&\fBdlltool\fR fails if the import library does not exist or is not +actually an import library. See also \fB\-\-identify\-strict\fR. +.IP "\fB\-\-identify\-strict\fR" 4 +.IX Item "--identify-strict" +Modifies the behavior of the \fB\-\-identify\fR option, such +that an error is reported if \fIfilename\fR is associated with +more than one \s-1DLL\s0. .IP "\fB\-i\fR" 4 .IX Item "-i" .PD 0 @@ -454,7 +505,7 @@ Displays dlltool's version number and then exits. 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. +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 @@ -468,10 +519,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/fdl.texi b/binutils/doc/fdl.texi index cb9b4ae..8805f1a 100644 --- a/binutils/doc/fdl.texi +++ b/binutils/doc/fdl.texi @@ -1,28 +1,28 @@ -@c -*-texinfo-*- -@node GNU Free Documentation License +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 -@appendix GNU Free Documentation License -@center Version 1.1, March 2000 +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. @display -Copyright (C) 2000, 2003 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display -@sp 1 + @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other -written document ``free'' in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It @@ -37,60 +37,72 @@ it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. -@sp 1 @item APPLICABILITY AND DEFINITIONS -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The ``Document'', below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as ``you.'' +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. -A ``Secondary Section'' is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (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 +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and +general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not ``Transparent'' is called ``Opaque.'' +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain -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. +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material @@ -98,7 +110,25 @@ this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. -@sp 1 + +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + @item VERBATIM COPYING @@ -114,13 +144,14 @@ number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. -@sp 1 + @item COPYING IN QUANTITY -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present @@ -138,21 +169,20 @@ 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. +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. -@sp 1 + @item MODIFICATIONS @@ -163,52 +193,85 @@ Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission.@* -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than five).@* -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher.@* -D. Preserve all the copyright notices of the Document.@* -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices.@* -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below.@* -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice.@* -H. Include an unaltered copy of this License.@* -I. Preserve the section entitled ``History'', and its title, and add to - it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section entitled ``History'' in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence.@* -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the ``History'' section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission.@* -K. In any section entitled ``Acknowledgements'' or ``Dedications'', - preserve the section's title, and preserve in the section all the - substance and tone of each of the contributor acknowledgements - and/or dedications given therein.@* -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles.@* -M. Delete any section entitled ``Endorsements.'' Such a section - may not be included in the Modified Version.@* -N. Do not retitle any existing section as ``Endorsements'' - or to conflict in title with any Invariant Section.@* -@sp 1 +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all @@ -216,9 +279,9 @@ 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 +parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. @@ -235,7 +298,7 @@ permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. -@sp 1 + @item COMBINING DOCUMENTS @@ -244,7 +307,7 @@ 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. +license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -255,12 +318,12 @@ author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -In the combination, you must combine any sections entitled ``History'' -in the various original documents, forming one section entitled -``History''; likewise combine any sections entitled ``Acknowledgements'', -and any sections entitled ``Dedications.'' You must delete all sections -entitled ``Endorsements.'' -@sp 1 +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + @item COLLECTIONS OF DOCUMENTS @@ -274,25 +337,27 @@ You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. -@sp 1 + @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an ``aggregate'', and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. -@sp 1 +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + @item TRANSLATION @@ -302,22 +367,46 @@ Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. -@sp 1 +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + @item TERMINATION -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. -@sp 1 +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. + @item FUTURE REVISIONS OF THIS LICENSE @@ -325,7 +414,7 @@ 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/. +@uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this @@ -334,11 +423,46 @@ 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. +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. @end enumerate -@unnumberedsec ADDENDUM: How to use this License for your documents +@page +@heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and @@ -346,23 +470,37 @@ license notices just after the title page: @smallexample @group -Copyright (C) @var{year} @var{your name}. -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with the Invariant Sections being @var{list their titles}, with the -Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. -A copy of the license is included in the section entitled "GNU -Free Documentation License." + Copyright (C) @var{year} @var{your name}. + Permission is granted to copy, distribute and/or modify this document + under the terms of the GNU Free Documentation License, Version 1.3 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. @end group @end smallexample -If you have no Invariant Sections, write ``with no Invariant Sections'' -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write ``no Front-Cover Texts'' instead of -``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. +@end group +@end smallexample + +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/binutils/doc/nlmconv.1 b/binutils/doc/nlmconv.1 index b95e362..e01a0ca 100644 --- a/binutils/doc/nlmconv.1 +++ b/binutils/doc/nlmconv.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "NLMCONV 1" -.TH NLMCONV 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH NLMCONV 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" nlmconv \- converts object code into an NLM. .SH "SYNOPSIS" @@ -219,7 +227,7 @@ Prints the version number for \fBnlmconv\fR. 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. +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 @@ -233,10 +241,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/nm.1 b/binutils/doc/nm.1 index 9875c6a..edee811 100644 --- a/binutils/doc/nm.1 +++ b/binutils/doc/nm.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,12 +132,17 @@ .\" ======================================================================== .\" .IX Title "NM 1" -.TH NM 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH NM 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .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] +nm [\fB\-a\fR|\fB\-\-debug\-syms\fR] + [\fB\-g\fR|\fB\-\-extern\-only\fR][\fB\-\-plugin\fR \fIname\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] @@ -166,6 +175,11 @@ linking. .ie n .IP """B""" 4 .el .IP "\f(CWB\fR" 4 .IX Item "B" +.PD 0 +.ie n .IP """b""" 4 +.el .IP "\f(CWb\fR" 4 +.IX Item "b" +.PD The symbol is in the uninitialized data section (known as \s-1BSS\s0). .ie n .IP """C""" 4 .el .IP "\f(CWC\fR" 4 @@ -177,48 +191,100 @@ references. .ie n .IP """D""" 4 .el .IP "\f(CWD\fR" 4 .IX Item "D" +.PD 0 +.ie n .IP """d""" 4 +.el .IP "\f(CWd\fR" 4 +.IX Item "d" +.PD The symbol is in the initialized data section. .ie n .IP """G""" 4 .el .IP "\f(CWG\fR" 4 .IX Item "G" +.PD 0 +.ie n .IP """g""" 4 +.el .IP "\f(CWg\fR" 4 +.IX Item "g" +.PD 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 """i""" 4 +.el .IP "\f(CWi\fR" 4 +.IX Item "i" +For \s-1PE\s0 format files this indicates that the symbol is in a section +specific to the implementation of DLLs. For \s-1ELF\s0 format files this +indicates that the symbol is an indirect function. This is a \s-1GNU\s0 +extension to the standard set of \s-1ELF\s0 symbol types. It indicates a +symbol which if referenced by a relocation does not evaluate to its +address, but instead must be invoked at runtime. The runtime +execution will then return the value to be used in the relocation. .ie n .IP """N""" 4 .el .IP "\f(CWN\fR" 4 .IX Item "N" The symbol is a debugging symbol. +.ie n .IP """p""" 4 +.el .IP "\f(CWp\fR" 4 +.IX Item "p" +The symbols is in a stack unwind section. .ie n .IP """R""" 4 .el .IP "\f(CWR\fR" 4 .IX Item "R" +.PD 0 +.ie n .IP """r""" 4 +.el .IP "\f(CWr\fR" 4 +.IX Item "r" +.PD The symbol is in a read only data section. .ie n .IP """S""" 4 .el .IP "\f(CWS\fR" 4 .IX Item "S" +.PD 0 +.ie n .IP """s""" 4 +.el .IP "\f(CWs\fR" 4 +.IX Item "s" +.PD 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" +.PD 0 +.ie n .IP """t""" 4 +.el .IP "\f(CWt\fR" 4 +.IX Item "t" +.PD 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 """u""" 4 +.el .IP "\f(CWu\fR" 4 +.IX Item "u" +The symbol is a unique global symbol. This is a \s-1GNU\s0 extension to the +standard set of \s-1ELF\s0 symbol bindings. For such a symbol the dynamic linker +will make sure that in the entire process there is just one symbol with +this name and type in use. .ie n .IP """V""" 4 .el .IP "\f(CWV\fR" 4 .IX Item "V" +.PD 0 +.ie n .IP """v""" 4 +.el .IP "\f(CWv\fR" 4 +.IX Item "v" +.PD 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. +the value of the weak symbol becomes zero with no error. On some +systems, uppercase indicates that a default value has been specified. .ie n .IP """W""" 4 .el .IP "\f(CWW\fR" 4 .IX Item "W" +.PD 0 +.ie n .IP """w""" 4 +.el .IP "\f(CWw\fR" 4 +.IX Item "w" +.PD 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. @@ -277,7 +343,7 @@ 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. +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. @@ -307,6 +373,11 @@ either upper or lower case. .IX Item "--extern-only" .PD Display only external symbols. +.IP "\fB\-\-plugin\fR \fIname\fR" 4 +.IX Item "--plugin name" +Load the plugin called \fIname\fR to add support for extra target +types. This option is only available if the toolchain has been built +with plugin support enabled. .IP "\fB\-l\fR" 4 .IX Item "-l" .PD 0 @@ -350,7 +421,10 @@ Equivalent to \fB\-f posix\fR. .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. +Print both value and size of defined symbols for the \f(CW\*(C`bsd\*(C'\fR output style. +This option has no effect for object formats that do not record symbol +sizes, unless \fB\-\-size\-sort\fR is also used in which case a +calculated size is displayed. .IP "\fB\-s\fR" 4 .IX Item "-s" .PD 0 @@ -425,7 +499,7 @@ Show a summary of the options to \fBnm\fR and exit. 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. +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 @@ -439,10 +513,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/objcopy.1 b/binutils/doc/objcopy.1 index 438d524..cc041c0 100644 --- a/binutils/doc/objcopy.1 +++ b/binutils/doc/objcopy.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "OBJCOPY 1" -.TH OBJCOPY 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH OBJCOPY 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" objcopy \- copy and translate object files .SH "SYNOPSIS" @@ -168,6 +176,7 @@ objcopy [\fB\-F\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\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\-\-long\-section\-names\fR {enable,disable,keep}] [\fB\-\-change\-leading\-char\fR] [\fB\-\-remove\-leading\-char\fR] [\fB\-\-reverse\-bytes=\fR\fInum\fR] [\fB\-\-srec\-len=\fR\fIival\fR] [\fB\-\-srec\-forceS3\fR] @@ -193,6 +202,12 @@ objcopy [\fB\-F\fR \fIbfdname\fR|\fB\-\-target=\fR\fIbfdname\fR] [\fB\-\-readonly\-text\fR] [\fB\-\-pure\fR] [\fB\-\-impure\fR] + [\fB\-\-file\-alignment=\fR\fInum\fR] + [\fB\-\-heap=\fR\fIsize\fR] + [\fB\-\-image\-base=\fR\fIaddress\fR] + [\fB\-\-section\-alignment=\fR\fInum\fR] + [\fB\-\-stack=\fR\fIsize\fR] + [\fB\-\-subsystem=\fR\fIwhich\fR:\fImajor\fR.\fIminor\fR] [\fB\-v\fR|\fB\-\-verbose\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-\-help\fR] [\fB\-\-info\fR] @@ -212,7 +227,7 @@ between any two formats may not work as expected. 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. +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). @@ -253,7 +268,7 @@ the name of \fIinfile\fR. .IX Item "--input-target=bfdname" .PD Consider the source file's object format to be \fIbfdname\fR, rather than -attempting to deduce it. +attempting to deduce it. .IP "\fB\-O\fR \fIbfdname\fR" 4 .IX Item "-O bfdname" .PD 0 @@ -269,7 +284,7 @@ Write the output file using the object format \fIbfdname\fR. .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. +translation. .IP "\fB\-B\fR \fIbfdarch\fR" 4 .IX Item "-B bfdarch" .PD 0 @@ -567,6 +582,18 @@ data you could use the following command line to achieve it: \& \-\-rename\-section .data=.rodata,alloc,load,readonly,data,contents \e \& .Ve +.IP "\fB\-\-long\-section\-names {enable,disable,keep}\fR" 4 +.IX Item "--long-section-names {enable,disable,keep}" +Controls the handling of long section names when processing \f(CW\*(C`COFF\*(C'\fR +and \f(CW\*(C`PE\-COFF\*(C'\fR object formats. The default behaviour, \fBkeep\fR, +is to preserve long section names if any are present in the input file. +The \fBenable\fR and \fBdisable\fR options forcibly enable or disable +the use of long section names in the output object; when \fBdisable\fR +is in effect, any long section names in the input object will be truncated. +The \fBenable\fR option will only emit long section names if any are +present in the inputs; this is mostly the same as \fBkeep\fR, but it +is left undefined whether the \fBenable\fR option might force the +creation of an empty string table in the output file. .IP "\fB\-\-change\-leading\-char\fR" 4 .IX Item "--change-leading-char" Some object file formats use special characters at the start of @@ -755,7 +782,7 @@ 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 +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." 4 @@ -778,23 +805,74 @@ 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. .Sp -Note \- this switch is only intended for use on fully linked files. It +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. .RE +.IP "\fB\-\-file\-alignment\fR \fInum\fR" 4 +.IX Item "--file-alignment num" +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 \s-1PE\s0 targets.] +.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 number of bytes of memory to reserve (and optionally commit) +to be used as heap for this program. +[This option is specific to \s-1PE\s0 targets.] +.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 \s-1PE\s0 targets.] +.IP "\fB\-\-section\-alignment\fR \fInum\fR" 4 +.IX Item "--section-alignment num" +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 \s-1PE\s0 targets.] +.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 number of bytes of memory to reserve (and optionally commit) +to be used as stack for this program. +[This option is specific to \s-1PE\s0 targets.] +.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, \f(CW\*(C`efi\-app\*(C'\fR, \f(CW\*(C`efi\-bsd\*(C'\fR, +\&\f(CW\*(C`efi\-rtd\*(C'\fR, \f(CW\*(C`sal\-rtd\*(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 \s-1PE\s0 targets.] .IP "\fB\-\-extract\-symbol\fR" 4 .IX Item "--extract-symbol" Keep the file's section flags and symbols but remove all section data. Specifically, the option: .RS 4 -.IP "*" 4 -.IX Item "*" -.PD 0 .IP "*" 4 .IX Item "*" +.PD 0 .IP "*" 4 .IX Item "*" .IP "*" 4 @@ -833,7 +911,7 @@ Display a list showing all architectures and object formats available. 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. +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 @@ -847,10 +925,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/objdump.1 b/binutils/doc/objdump.1 index 2d576b2..3c0298d 100644 --- a/binutils/doc/objdump.1 +++ b/binutils/doc/objdump.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "OBJDUMP 1" -.TH OBJDUMP 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH OBJDUMP 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" objdump \- display information from object files. .SH "SYNOPSIS" @@ -141,6 +149,7 @@ objdump [\fB\-a\fR|\fB\-\-archive\-headers\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\-F\fR|\fB\-\-file\-offsets\fR] [\fB\-\-file\-start\-context\fR] [\fB\-g\fR|\fB\-\-debugging\fR] [\fB\-e\fR|\fB\-\-debugging\-tags\fR] @@ -155,7 +164,8 @@ objdump [\fB\-a\fR|\fB\-\-archive\-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\-W[lLiaprmfFsoR]\fR| + \fB\-\-dwarf\fR[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]] [\fB\-G\fR|\fB\-\-stabs\fR] [\fB\-t\fR|\fB\-\-syms\fR] [\fB\-T\fR|\fB\-\-dynamic\-syms\fR] @@ -167,6 +177,9 @@ objdump [\fB\-a\fR|\fB\-\-archive\-headers\fR] [\fB\-\-[no\-]show\-raw\-insn\fR] [\fB\-\-adjust\-vma=\fR\fIoffset\fR] [\fB\-\-special\-syms\fR] + [\fB\-\-prefix=\fR\fIprefix\fR] + [\fB\-\-prefix\-strip=\fR\fIlevel\fR] + [\fB\-\-insn\-width=\fR\fIwidth\fR] [\fB\-V\fR|\fB\-\-version\fR] [\fB\-H\fR|\fB\-\-help\fR] \fIobjfile\fR... @@ -233,17 +246,18 @@ 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. +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. +Display debugging information. This attempts to parse \s-1STABS\s0 and \s-1IEEE\s0 +debugging format information stored in the file and print it out using +a C like syntax. If neither of these formats are found this option +falls back on the \fB\-W\fR option to print any \s-1DWARF\s0 information in +the file. .IP "\fB\-e\fR" 4 .IX Item "-e" .PD 0 @@ -269,6 +283,10 @@ expected to contain instructions. .PD Like \fB\-d\fR, but disassemble the contents of all sections, not just those expected to contain instructions. +.Sp +If the target is an \s-1ARM\s0 architecture this switch also has the effect +of forcing the disassembler to decode pieces of data found in code +sections as if they were instructions. .IP "\fB\-\-prefix\-addresses\fR" 4 .IX Item "--prefix-addresses" When disassembling, print the complete address on each line. This is @@ -292,6 +310,18 @@ does not describe endianness information, such as S\-records. .PD Display summary information from the overall header of each of the \fIobjfile\fR files. +.IP "\fB\-F\fR" 4 +.IX Item "-F" +.PD 0 +.IP "\fB\-\-file\-offsets\fR" 4 +.IX Item "--file-offsets" +.PD +When disassembling sections, whenever a symbol is displayed, also +display the file offset of the region of data that is about to be +dumped. If zeroes are being skipped, then when disassembly resumes, +tell the user how many zeroes were skipped and the file offset of the +location from where the disassembly resumes. When dumping sections, +display the file offset of the location from where the dump starts. .IP "\fB\-\-file\-start\-context\fR" 4 .IX Item "--file-start-context" Specify that when displaying interlisted source code/disassembly @@ -357,6 +387,13 @@ 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. +.Sp +If the target is an \s-1ARM\s0 architecture then this switch has an +additional effect. It restricts the disassembly to only those +instructions supported by the architecture specified by \fImachine\fR. +If it is necessary to use this switch because the input file does not +contain any architecture information, but it is also desired to +disassemble all the instructions use \fB\-marm\fR. .IP "\fB\-M\fR \fIoptions\fR" 4 .IX Item "-M options" .PD 0 @@ -393,7 +430,11 @@ 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. \fBaddr64\fR, \fBaddr32\fR, +intel syntax mode and \s-1AT&T\s0 syntax mode. +\&\fBintel-mnemonic\fR and \fBatt-mnemonic\fR select between +intel mnemonic mode and \s-1AT&T\s0 mnemonic mode. \fBintel-mnemonic\fR +implies \fBintel\fR and \fBatt-mnemonic\fR implies \fBatt\fR. +\&\fBaddr64\fR, \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 @@ -401,11 +442,12 @@ 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 +For PowerPC, \fBbooke\fR controls the disassembly of BookE +instructions. \fB32\fR and \fB64\fR select PowerPC and +PowerPC64 disassembly, respectively. \fBe300\fR selects disassembly for the e300 family. \fB440\fR selects disassembly for -the PowerPC 440. +the PowerPC 440. \fBppcps\fR selects disassembly for the paired +single instructions of the \s-1PPC750CL\s0. .Sp For \s-1MIPS\s0, this option controls the printing of instruction mnemonic names and register names in disassembled instructions. Multiple @@ -418,38 +460,38 @@ string, and invalid options are ignored: 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. -.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 +.ie n .IP """gpr\-names=\f(CIABI\f(CW""" 4 +.el .IP "\f(CWgpr\-names=\f(CIABI\f(CW\fR" 4 .IX Item "gpr-names=ABI" -Print \s-1GPR\s0 (general\-purpose register) names as appropriate +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 +.ie n .IP """fpr\-names=\f(CIABI\f(CW""" 4 +.el .IP "\f(CWfpr\-names=\f(CIABI\f(CW\fR" 4 .IX Item "fpr-names=ABI" -Print \s-1FPR\s0 (floating\-point register) names as +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 +.ie n .IP """cp0\-names=\f(CIARCH\f(CW""" 4 +.el .IP "\f(CWcp0\-names=\f(CIARCH\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 +.ie n .IP """hwr\-names=\f(CIARCH\f(CW""" 4 +.el .IP "\f(CWhwr\-names=\f(CIARCH\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 +.ie n .IP """reg\-names=\f(CIABI\f(CW""" 4 +.el .IP "\f(CWreg\-names=\f(CIABI\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 +.ie n .IP """reg\-names=\f(CIARCH\f(CW""" 4 +.el .IP "\f(CWreg\-names=\f(CIARCH\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. @@ -495,7 +537,9 @@ disassembly. .PD Print the dynamic relocation entries of the file. This is only meaningful for dynamic objects, such as certain types of shared -libraries. +libraries. As for \fB\-r\fR, if used with \fB\-d\fR or +\&\fB\-D\fR, the relocations are printed interspersed with the +disassembly. .IP "\fB\-s\fR" 4 .IX Item "-s" .PD 0 @@ -512,6 +556,14 @@ non-empty sections are displayed. .PD Display source code intermixed with disassembly, if possible. Implies \&\fB\-d\fR. +.IP "\fB\-\-prefix=\fR\fIprefix\fR" 4 +.IX Item "--prefix=prefix" +Specify \fIprefix\fR to add to the absolute paths when used with +\&\fB\-S\fR. +.IP "\fB\-\-prefix\-strip=\fR\fIlevel\fR" 4 +.IX Item "--prefix-strip=level" +Indicate how many initial directory names to strip off the hardwired +absolute paths. It has no effect without \fB\-\-prefix=\fR\fIprefix\fR. .IP "\fB\-\-show\-raw\-insn\fR" 4 .IX Item "--show-raw-insn" When disassembling instructions, print the instruction in hex as well as @@ -521,14 +573,19 @@ in symbolic form. This is the default except when .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" +.IP "\fB\-\-insn\-width=\fR\fIwidth\fR" 4 +.IX Item "--insn-width=width" +Display \fIwidth\fR bytes on a single line when disassembling +instructions. +.IP "\fB\-W[lLiaprmfFsoR]\fR" 4 +.IX Item "-W[lLiaprmfFsoR]" .PD 0 -.IP "\fB\-\-dwarf\fR" 4 -.IX Item "--dwarf" +.IP "\fB\-\-dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]\fR" 4 +.IX Item "--dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]" .PD -Displays the contents of the \s-1DWARF\s0 debug sections in the file, if any -are present. +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\-G\fR" 4 .IX Item "-G" .PD 0 @@ -557,7 +614,118 @@ of the \fB\-d\fR, \fB\-r\fR and \fB\-s\fR options. .IX Item "--syms" .PD Print the symbol table entries of the file. -This is similar to the information provided by the \fBnm\fR program. +This is similar to the information provided by the \fBnm\fR program, +although the display format is different. The format of the output +depends upon the format of the file being dumped, but there are two main +types. One looks like this: +.Sp +.Vb 2 +\& [ 4](sec 3)(fl 0x00)(ty 0)(scl 3) (nx 1) 0x00000000 .bss +\& [ 6](sec 1)(fl 0x00)(ty 0)(scl 2) (nx 0) 0x00000000 fred +.Ve +.Sp +where the number inside the square brackets is the number of the entry +in the symbol table, the \fIsec\fR number is the section number, the +\&\fIfl\fR value are the symbol's flag bits, the \fIty\fR number is the +symbol's type, the \fIscl\fR number is the symbol's storage class and +the \fInx\fR value is the number of auxilary entries associated with +the symbol. The last two fields are the symbol's value and its name. +.Sp +The other common output format, usually seen with \s-1ELF\s0 based files, +looks like this: +.Sp +.Vb 2 +\& 00000000 l d .bss 00000000 .bss +\& 00000000 g .text 00000000 fred +.Ve +.Sp +Here the first number is the symbol's value (sometimes refered to as +its address). The next field is actually a set of characters and +spaces indicating the flag bits that are set on the symbol. These +characters are described below. Next is the section with which the +symbol is associated or \fI*ABS*\fR if the section is absolute (ie +not connected with any section), or \fI*UND*\fR if the section is +referenced in the file being dumped, but not defined there. +.Sp +After the section name comes another field, a number, which for common +symbols is the alignment and for other symbol is the size. Finally +the symbol's name is displayed. +.Sp +The flag characters are divided into 7 groups as follows: +.RS 4 +.ie n .IP """l""" 4 +.el .IP "\f(CWl\fR" 4 +.IX Item "l" +.PD 0 +.ie n .IP """g""" 4 +.el .IP "\f(CWg\fR" 4 +.IX Item "g" +.ie n .IP """u""" 4 +.el .IP "\f(CWu\fR" 4 +.IX Item "u" +.ie n .IP """!""" 4 +.el .IP "\f(CW!\fR" 4 +.IX Item "!" +.PD +The symbol is a local (l), global (g), unique global (u), neither +global nor local (a space) or both global and local (!). A +symbol can be neither local or global for a variety of reasons, e.g., +because it is used for debugging, but it is probably an indication of +a bug if it is ever both local and global. Unique global symbols are +a \s-1GNU\s0 extension to the standard set of \s-1ELF\s0 symbol bindings. For such +a symbol the dynamic linker will make sure that in the entire process +there is just one symbol with this name and type in use. +.ie n .IP """w""" 4 +.el .IP "\f(CWw\fR" 4 +.IX Item "w" +The symbol is weak (w) or strong (a space). +.ie n .IP """C""" 4 +.el .IP "\f(CWC\fR" 4 +.IX Item "C" +The symbol denotes a constructor (C) or an ordinary symbol (a space). +.ie n .IP """W""" 4 +.el .IP "\f(CWW\fR" 4 +.IX Item "W" +The symbol is a warning (W) or a normal symbol (a space). A warning +symbol's name is a message to be displayed if the symbol following the +warning symbol is ever referenced. +.ie n .IP """I""" 4 +.el .IP "\f(CWI\fR" 4 +.IX Item "I" +.PD 0 +.ie n .IP """i""" 4 +.el .IP "\f(CWi\fR" 4 +.IX Item "i" +.PD +The symbol is an indirect reference to another symbol (I), a function +to be evaluated during reloc processing (i) or a normal symbol (a +space). +.ie n .IP """d""" 4 +.el .IP "\f(CWd\fR" 4 +.IX Item "d" +.PD 0 +.ie n .IP """D""" 4 +.el .IP "\f(CWD\fR" 4 +.IX Item "D" +.PD +The symbol is a debugging symbol (d) or a dynamic symbol (D) or a +normal symbol (a space). +.ie n .IP """F""" 4 +.el .IP "\f(CWF\fR" 4 +.IX Item "F" +.PD 0 +.ie n .IP """f""" 4 +.el .IP "\f(CWf\fR" 4 +.IX Item "f" +.ie n .IP """O""" 4 +.el .IP "\f(CWO\fR" 4 +.IX Item "O" +.PD +The symbol is the name of a function (F) or a file (f) or an object +(O) or just a normal symbol (a space). +.RE +.RS 4 +.RE .IP "\fB\-T\fR" 4 .IX Item "-T" .PD 0 @@ -611,7 +779,7 @@ any other data. 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. +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 @@ -625,10 +793,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/ranlib.1 b/binutils/doc/ranlib.1 index 3709015..a72019c 100644 --- a/binutils/doc/ranlib.1 +++ b/binutils/doc/ranlib.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,12 +132,16 @@ .\" ======================================================================== .\" .IX Title "RANLIB 1" -.TH RANLIB 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH RANLIB 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" ranlib \- generate index to archive. .SH "SYNOPSIS" .IX Header "SYNOPSIS" -ranlib [\fB\-vV\fR] \fIarchive\fR +ranlib [\fB\-vVt\fR] \fIarchive\fR .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBranlib\fR generates an index to the contents of an archive and @@ -159,12 +167,15 @@ The \s-1GNU\s0 \fBranlib\fR program is another form of \s-1GNU\s0 \fBar\fR; runn .IX Item "--version" .PD Show the version number of \fBranlib\fR. +.IP "\fB\-t\fR" 4 +.IX Item "-t" +Update the timestamp of the symbol map of an 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. +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 @@ -178,10 +189,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/readelf.1 b/binutils/doc/readelf.1 index 143b3ee..07132ee 100644 --- a/binutils/doc/readelf.1 +++ b/binutils/doc/readelf.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "READELF 1" -.TH READELF 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH READELF 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" readelf \- Displays information about ELF files. .SH "SYNOPSIS" @@ -149,8 +157,11 @@ readelf [\fB\-a\fR|\fB\-\-all\fR] [\fB\-A\fR|\fB\-\-arch\-specific\fR] [\fB\-D\fR|\fB\-\-use\-dynamic\fR] [\fB\-x\fR |\fB\-\-hex\-dump=\fR] - [\fB\-w[liaprmfFsoR]\fR| - \fB\-\-debug\-dump\fR[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]] + [\fB\-p\fR |\fB\-\-string\-dump=\fR] + [\fB\-R\fR |\fB\-\-relocated\-dump=\fR] + [\fB\-c\fR|\fB\-\-archive\-index\fR] + [\fB\-w[lLiaprmfFsoR]\fR| + \fB\-\-debug\-dump\fR[=rawline,=decodedline,=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] @@ -302,18 +313,51 @@ symbols section. .IP "\fB\-\-hex\-dump=\fR" 4 .IX Item "--hex-dump=" .PD -Displays the contents of the indicated section as a hexadecimal dump. +Displays the contents of the indicated section as a hexadecimal bytes. 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]" +.IP "\fB\-R \fR" 4 +.IX Item "-R " .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]" +.IP "\fB\-\-relocated\-dump=\fR" 4 +.IX Item "--relocated-dump=" +.PD +Displays the contents of the indicated section as a hexadecimal +bytes. 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. The contents of the section will be relocated +before they are displayed. +.IP "\fB\-p \fR" 4 +.IX Item "-p " +.PD 0 +.IP "\fB\-\-string\-dump=\fR" 4 +.IX Item "--string-dump=" +.PD +Displays the contents of the indicated section as printable strings. +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\-c\fR" 4 +.IX Item "-c" +.PD 0 +.IP "\fB\-\-archive\-index\fR" 4 +.IX Item "--archive-index" +.PD +Displays the file symbol index infomation contained in the header part +of binary archives. Performs the same function as the \fBt\fR +command to \fBar\fR, but without using the \s-1BFD\s0 library. +.IP "\fB\-w[lLiaprmfFsoR]\fR" 4 +.IX Item "-w[lLiaprmfFsoR]" +.PD 0 +.IP "\fB\-\-debug\-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames\-interp,=str,=loc,=Ranges]\fR" 4 +.IX Item "--debug-dump[=rawline,=decodedline,=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. +.Sp +Note: the \fB=decodedline\fR option will display the interpreted +contents of a .debug_line section whereas the \fB=rawline\fR option +dumps the contents in a raw format. .IP "\fB\-I\fR" 4 .IX Item "-I" .PD 0 @@ -352,7 +396,7 @@ Display the command line options understood by \fBreadelf\fR. 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. +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 @@ -366,10 +410,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/size.1 b/binutils/doc/size.1 index 91072b3..a76bebe 100644 --- a/binutils/doc/size.1 +++ b/binutils/doc/size.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "SIZE 1" -.TH SIZE 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH SIZE 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" size \- list section sizes and total size. .SH "SYNOPSIS" @@ -186,9 +194,8 @@ This is the same data, but displayed closer to System V conventions: \& .data 81920 303104 \& .bss 11592 385024 \& Total 388392 -.Ve -.Sp -.Vb 6 +\& +\& \& size : \& section size addr \& .text 294880 8192 @@ -244,7 +251,7 @@ Display the version number of \fBsize\fR. 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. +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 @@ -258,10 +265,10 @@ with a backslash. The \fIfile\fR may itself contain additional .SH "COPYRIGHT" .IX Header "COPYRIGHT" Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/strings.1 b/binutils/doc/strings.1 index a5f8e69..0904a40 100644 --- a/binutils/doc/strings.1 +++ b/binutils/doc/strings.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,12 +132,16 @@ .\" ======================================================================== .\" .IX Title "STRINGS 1" -.TH STRINGS 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH STRINGS 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .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] +strings [\fB\-afovV\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] @@ -208,7 +216,8 @@ 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. +littleendian. Useful for finding wide character strings. (\fBl\fR +and \fBb\fR apply to, for example, Unicode \s-1UTF\-16/UCS\-2\s0 encodings). .IP "\fB\-T\fR \fIbfdname\fR" 4 .IX Item "-T bfdname" .PD 0 @@ -219,6 +228,8 @@ Specify an object code format other than your system's default format. .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 @@ -228,7 +239,7 @@ Print the program version number on the standard output and exit. 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. +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 @@ -243,10 +254,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/strip.1 b/binutils/doc/strip.1 index 2ef5315..fba09c4 100644 --- a/binutils/doc/strip.1 +++ b/binutils/doc/strip.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "STRIP 1" -.TH STRIP 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH STRIP 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" strip \- Discard symbols from object files. .SH "SYNOPSIS" @@ -317,15 +325,15 @@ 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 +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." 4 .IX Item "1." .PD 0 -.ie n .IP "1." 4 -.el .IP "1." 4 -.IX Item "1." +.ie n .IP "1." 4 +.el .IP "1." 4 +.IX Item "1." .ie n .IP "1." 4 .el .IP "1." 4 .IX Item "1." @@ -336,11 +344,11 @@ optional. You could instead do this: .RS 4 .PD .Sp -ie the file pointed to by the \fB\-\-add\-gnu\-debuglink\fR can be the +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. .Sp -Note \- this switch is only intended for use on fully linked files. It +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 @@ -367,7 +375,7 @@ archives, \fBstrip \-v\fR lists all members of the archive. 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. +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 @@ -381,10 +389,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/windmc.1 b/binutils/doc/windmc.1 index b1292c6..46cadd9 100644 --- a/binutils/doc/windmc.1 +++ b/binutils/doc/windmc.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "WINDMC 1" -.TH WINDMC 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH WINDMC 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" windmc \- generates Windows message resources. .SH "SYNOPSIS" @@ -306,15 +314,14 @@ format. This is the default behaviour. .IP "\fB\-\-verbose\fR" 4 .IX Item "--verbose" .PD -Enable verbose mode. This tells you what the preprocessor is if you -didn't specify one. +Enable verbose mode. .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. +Prints the version number for \fBwindmc\fR. .IP "\fB\-x\fR \fIpath\fR" 4 .IX Item "-x path" .PD 0 @@ -328,7 +335,7 @@ symbolic name. No such file is generated without specifying the switch. 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. +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 @@ -342,10 +349,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/doc/windres.1 b/binutils/doc/windres.1 index 6628bd3..20694e0 100644 --- a/binutils/doc/windres.1 +++ b/binutils/doc/windres.1 @@ -1,4 +1,4 @@ -.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" Automatically generated by Pod::Man 2.16 (Pod::Simple 3.05) .\" .\" Standard preamble: .\" ======================================================================== @@ -48,21 +48,25 @@ . ds R" '' 'br\} .\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" .\" 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 \{\ +.ie \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 +.el \{\ +. de IX +.. +.\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. @@ -128,7 +132,11 @@ .\" ======================================================================== .\" .IX Title "WINDRES 1" -.TH WINDRES 1 "2007-08-06" "binutils-2.17.90" "GNU Development Tools" +.TH WINDRES 1 "2009-10-16" "binutils-2.20" "GNU Development Tools" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh .SH "NAME" windres \- manipulate Windows resources. .SH "SYNOPSIS" @@ -330,7 +338,7 @@ this will turn on parser debugging. 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. +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 @@ -344,10 +352,10 @@ 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, 2007 Free Software Foundation, Inc. +2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the diff --git a/binutils/dwarf.c b/binutils/dwarf.c index 9cfb158..5eeef08 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, 2007 + Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -23,7 +23,8 @@ #include "libiberty.h" #include "bfd.h" #include "bucomm.h" -#include "elf/dwarf2.h" +#include "elf/common.h" +#include "dwarf2.h" #include "dwarf.h" static int have_frame_base; @@ -34,9 +35,11 @@ static int warned_about_missing_comp_units = FALSE; static unsigned int num_debug_info_entries = 0; static debug_info *debug_information = NULL; +/* Special value for num_debug_info_entries to indicate + that the .debug_info section could not be loaded/parsed. */ +#define DEBUG_INFO_UNAVAILABLE (unsigned int) -1 -dwarf_vma eh_addr_size; -int is_relocatable; +int eh_addr_size; int do_debug_info; int do_debug_abbrevs; @@ -49,6 +52,11 @@ int do_debug_frames_interp; int do_debug_macinfo; int do_debug_str; int do_debug_loc; +int do_wide; + +/* Values for do_debug_lines. */ +#define FLAG_DEBUG_LINES_RAW 1 +#define FLAG_DEBUG_LINES_DECODED 2 dwarf_vma (*byte_get) (unsigned char *, int); @@ -64,6 +72,11 @@ byte_get_little_endian (unsigned char *field, int size) return ((unsigned int) (field[0])) | (((unsigned int) (field[1])) << 8); + case 3: + return ((unsigned long) (field[0])) + | (((unsigned long) (field[1])) << 8) + | (((unsigned long) (field[2])) << 16); + case 4: return ((unsigned long) (field[0])) | (((unsigned long) (field[1])) << 8) @@ -106,6 +119,11 @@ byte_get_big_endian (unsigned char *field, int size) case 2: return ((unsigned int) (field[1])) | (((int) (field[0])) << 8); + case 3: + return ((unsigned long) (field[2])) + | (((unsigned long) (field[1])) << 8) + | (((unsigned long) (field[0])) << 16); + case 4: return ((unsigned long) (field[3])) | (((unsigned long) (field[2])) << 8) @@ -159,6 +177,55 @@ byte_get_signed (unsigned char *field, int size) } } +static int +size_of_encoded_value (int encoding) +{ + switch (encoding & 0x7) + { + default: /* ??? */ + case 0: return eh_addr_size; + case 2: return 2; + case 3: return 4; + case 4: return 8; + } +} + +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 + return byte_get (data, size); +} + +/* Print a dwarf_vma value (typically an address, offset or length) in + hexadecimal format, followed by a space. The length of the value (and + hence the precision displayed) is determined by the byte_size parameter. */ + +static void +print_dwarf_vma (dwarf_vma val, unsigned byte_size) +{ + static char buff[18]; + + /* Printf does not have a way of specifiying a maximum field width for an + integer value, so we print the full value into a buffer and then select + the precision we need. */ +#if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2) +#ifndef __MSVCRT__ + snprintf (buff, sizeof (buff), "%16.16llx ", val); +#else + snprintf (buff, sizeof (buff), "%016I64x ", val); +#endif +#else + snprintf (buff, sizeof (buff), "%16.16lx ", val); +#endif + + fputs (buff + (byte_size == 4 ? 8 : 0), stdout); +} + static unsigned long int read_leb128 (unsigned char *data, unsigned int *length_return, int sign) { @@ -271,8 +338,52 @@ process_extended_line_op (unsigned char *data, int is_stmt) printf (_("%s\n\n"), name); break; + case DW_LNE_set_discriminator: + printf (_("set Discriminator to %lu\n"), + read_leb128 (data, & bytes_read, 0)); + break; + + /* HP extensions. */ + case DW_LNE_HP_negate_is_UV_update: + printf ("DW_LNE_HP_negate_is_UV_update\n"); + break; + case DW_LNE_HP_push_context: + printf ("DW_LNE_HP_push_context\n"); + break; + case DW_LNE_HP_pop_context: + printf ("DW_LNE_HP_pop_context\n"); + break; + case DW_LNE_HP_set_file_line_column: + printf ("DW_LNE_HP_set_file_line_column\n"); + break; + case DW_LNE_HP_set_routine_name: + printf ("DW_LNE_HP_set_routine_name\n"); + break; + case DW_LNE_HP_set_sequence: + printf ("DW_LNE_HP_set_sequence\n"); + break; + case DW_LNE_HP_negate_post_semantics: + printf ("DW_LNE_HP_negate_post_semantics\n"); + break; + case DW_LNE_HP_negate_function_exit: + printf ("DW_LNE_HP_negate_function_exit\n"); + break; + case DW_LNE_HP_negate_front_end_logical: + printf ("DW_LNE_HP_negate_front_end_logical\n"); + break; + case DW_LNE_HP_define_proc: + printf ("DW_LNE_HP_define_proc\n"); + break; + default: - printf (_("UNKNOWN: length %d\n"), len - bytes_read); + if (op_code >= DW_LNE_lo_user + /* The test against DW_LNW_hi_user is redundant due to + the limited range of the unsigned char data type used + for op_code. */ + /*&& op_code <= DW_LNE_hi_user*/) + printf (_("user defined: length %d\n"), len - bytes_read); + else + printf (_("UNKNOWN: length %d\n"), len - bytes_read); break; } @@ -353,7 +464,7 @@ add_abbrev (unsigned long number, unsigned long tag, int children) { abbrev_entry *entry; - entry = malloc (sizeof (*entry)); + entry = (abbrev_entry *) malloc (sizeof (*entry)); if (entry == NULL) /* ugg */ @@ -379,7 +490,7 @@ add_abbrev_attr (unsigned long attribute, unsigned long form) { abbrev_attr *attr; - attr = malloc (sizeof (*attr)); + attr = (abbrev_attr *) malloc (sizeof (*attr)); if (attr == NULL) /* ugg */ @@ -582,7 +693,8 @@ static int decode_location_expression (unsigned char * data, unsigned int pointer_size, unsigned long length, - unsigned long cu_offset) + unsigned long cu_offset, + struct dwarf_section * section) { unsigned op; unsigned int bytes_read; @@ -893,15 +1005,95 @@ decode_location_expression (unsigned char * data, data += 4; break; case DW_OP_call_ref: - printf ("DW_OP_call_ref"); + /* XXX: Strictly speaking for 64-bit DWARF3 files + this ought to be an 8-byte wide computation. */ + printf ("DW_OP_call_ref: <%lx>", (long) byte_get (data, 4) + cu_offset); + data += 4; break; case DW_OP_form_tls_address: printf ("DW_OP_form_tls_address"); break; + case DW_OP_call_frame_cfa: + printf ("DW_OP_call_frame_cfa"); + break; + case DW_OP_bit_piece: + printf ("DW_OP_bit_piece: "); + printf ("size: %lu ", read_leb128 (data, &bytes_read, 0)); + data += bytes_read; + printf ("offset: %lu ", read_leb128 (data, &bytes_read, 0)); + data += bytes_read; + break; + + /* DWARF 4 extensions. */ + case DW_OP_stack_value: + printf ("DW_OP_stack_value"); + break; + + case DW_OP_implicit_value: + printf ("DW_OP_implicit_value"); + uvalue = read_leb128 (data, &bytes_read, 0); + data += bytes_read; + display_block (data, uvalue); + data += uvalue; + break; /* GNU extensions. */ case DW_OP_GNU_push_tls_address: - printf ("DW_OP_GNU_push_tls_address"); + printf ("DW_OP_GNU_push_tls_address or DW_OP_HP_unknown"); + break; + case DW_OP_GNU_uninit: + printf ("DW_OP_GNU_uninit"); + /* FIXME: Is there data associated with this OP ? */ + break; + case DW_OP_GNU_encoded_addr: + { + int encoding; + dwarf_vma addr; + + encoding = *data++; + addr = get_encoded_value (data, encoding); + if ((encoding & 0x70) == DW_EH_PE_pcrel) + addr += section->address + (data - section->start); + data += size_of_encoded_value (encoding); + + printf ("DW_OP_GNU_encoded_addr: fmt:%02x addr:", encoding); + print_dwarf_vma (addr, pointer_size); + } + break; + + /* HP extensions. */ + case DW_OP_HP_is_value: + printf ("DW_OP_HP_is_value"); + /* FIXME: Is there data associated with this OP ? */ + break; + case DW_OP_HP_fltconst4: + printf ("DW_OP_HP_fltconst4"); + /* FIXME: Is there data associated with this OP ? */ + break; + case DW_OP_HP_fltconst8: + printf ("DW_OP_HP_fltconst8"); + /* FIXME: Is there data associated with this OP ? */ + break; + case DW_OP_HP_mod_range: + printf ("DW_OP_HP_mod_range"); + /* FIXME: Is there data associated with this OP ? */ + break; + case DW_OP_HP_unmod_range: + printf ("DW_OP_HP_unmod_range"); + /* FIXME: Is there data associated with this OP ? */ + break; + case DW_OP_HP_tls: + printf ("DW_OP_HP_tls"); + /* FIXME: Is there data associated with this OP ? */ + break; + + /* PGI (STMicroelectronics) extensions. */ + case DW_OP_PGI_omp_thread_num: + /* Pushes the thread number for the current thread as it would be + returned by the standard OpenMP library function: + omp_get_thread_num(). The "current thread" is the thread for + which the expression is being evaluated. */ + printf ("DW_OP_PGI_omp_thread_num"); break; default: @@ -925,16 +1117,18 @@ decode_location_expression (unsigned char * data, static unsigned char * read_and_display_attr_value (unsigned long attribute, unsigned long form, - unsigned char *data, + unsigned char * data, unsigned long cu_offset, unsigned long pointer_size, unsigned long offset_size, int dwarf_version, - debug_info *debug_info_p, - int do_loc) + debug_info * debug_info_p, + int do_loc, + struct dwarf_section * section) { unsigned long uvalue = 0; unsigned char *block_start = NULL; + unsigned char * orig_data = data; unsigned int bytes_read; switch (form) @@ -1006,14 +1200,15 @@ read_and_display_attr_value (unsigned long attribute, return read_and_display_attr_value (attribute, form, data, cu_offset, pointer_size, offset_size, dwarf_version, - debug_info_p, do_loc); + debug_info_p, do_loc, + section); } switch (form) { case DW_FORM_ref_addr: if (!do_loc) - printf (" <#%lx>", uvalue); + printf (" <0x%lx>", uvalue); break; case DW_FORM_ref1: @@ -1021,13 +1216,13 @@ read_and_display_attr_value (unsigned long attribute, case DW_FORM_ref4: case DW_FORM_ref_udata: if (!do_loc) - printf (" <%lx>", uvalue + cu_offset); + printf (" <0x%lx>", uvalue + cu_offset); break; case DW_FORM_data4: case DW_FORM_addr: if (!do_loc) - printf (" %#lx", uvalue); + printf (" 0x%lx", uvalue); break; case DW_FORM_flag: @@ -1044,8 +1239,8 @@ read_and_display_attr_value (unsigned long attribute, if (!do_loc) { uvalue = byte_get (data, 4); - printf (" %lx", uvalue); - printf (" %lx", (unsigned long) byte_get (data + 4, 4)); + printf (" 0x%lx", uvalue); + printf (" 0x%lx", (unsigned long) byte_get (data + 4, 4)); } if ((do_loc || do_debug_loc || do_debug_ranges) && num_debug_info_entries == 0) @@ -1115,7 +1310,6 @@ read_and_display_attr_value (unsigned long attribute, break; } - /* For some attributes we can display further information. */ if ((do_loc || do_debug_loc || do_debug_ranges) && num_debug_info_entries == 0) { @@ -1124,15 +1318,14 @@ read_and_display_attr_value (unsigned long attribute, case DW_AT_frame_base: have_frame_base = 1; case DW_AT_location: + case DW_AT_string_length: + case DW_AT_return_addr: case DW_AT_data_member_location: case DW_AT_vtable_elem_location: - case DW_AT_allocated: - case DW_AT_associated: - case DW_AT_data_location: - case DW_AT_stride: - case DW_AT_upper_bound: - case DW_AT_lower_bound: - if (form == DW_FORM_data4 || form == DW_FORM_data8) + case DW_AT_segment: + case DW_AT_static_link: + case DW_AT_use_location: + if (form == DW_FORM_data4 || form == DW_FORM_data8) { /* Process location list. */ unsigned int max = debug_info_p->max_loc_offsets; @@ -1141,11 +1334,11 @@ read_and_display_attr_value (unsigned long attribute, if (max == 0 || num >= max) { max += 1024; - debug_info_p->loc_offsets - = xcrealloc (debug_info_p->loc_offsets, + debug_info_p->loc_offsets = (long unsigned int *) + xcrealloc (debug_info_p->loc_offsets, max, sizeof (*debug_info_p->loc_offsets)); - debug_info_p->have_frame_base - = xcrealloc (debug_info_p->have_frame_base, + debug_info_p->have_frame_base = (int *) + xcrealloc (debug_info_p->have_frame_base, max, sizeof (*debug_info_p->have_frame_base)); debug_info_p->max_loc_offsets = max; } @@ -1154,7 +1347,7 @@ read_and_display_attr_value (unsigned long attribute, debug_info_p->num_loc_offsets++; } break; - + case DW_AT_low_pc: if (need_base_address) debug_info_p->base_address = uvalue; @@ -1170,8 +1363,8 @@ read_and_display_attr_value (unsigned long attribute, if (max == 0 || num >= max) { max += 1024; - debug_info_p->range_lists - = xcrealloc (debug_info_p->range_lists, + debug_info_p->range_lists = (long unsigned int *) + xcrealloc (debug_info_p->range_lists, max, sizeof (*debug_info_p->range_lists)); debug_info_p->max_range_lists = max; } @@ -1188,6 +1381,7 @@ read_and_display_attr_value (unsigned long attribute, if (do_loc) return data; + /* For some attributes we can display further information. */ printf ("\t"); switch (attribute) @@ -1263,9 +1457,24 @@ read_and_display_attr_value (unsigned long attribute, case DW_ATE_signed_char: printf ("(signed char)"); break; case DW_ATE_unsigned: printf ("(unsigned)"); break; case DW_ATE_unsigned_char: printf ("(unsigned char)"); break; - /* DWARF 2.1 value. */ + /* DWARF 2.1 values: */ case DW_ATE_imaginary_float: printf ("(imaginary float)"); break; case DW_ATE_decimal_float: printf ("(decimal float)"); break; + /* DWARF 3 values: */ + case DW_ATE_packed_decimal: printf ("(packed_decimal)"); break; + case DW_ATE_numeric_string: printf ("(numeric_string)"); break; + case DW_ATE_edited: printf ("(edited)"); break; + case DW_ATE_signed_fixed: printf ("(signed_fixed)"); break; + case DW_ATE_unsigned_fixed: printf ("(unsigned_fixed)"); break; + /* HP extensions: */ + case DW_ATE_HP_float80: printf ("(HP_float80)"); break; + case DW_ATE_HP_complex_float80: printf ("(HP_complex_float80)"); break; + case DW_ATE_HP_float128: printf ("(HP_float128)"); break; + case DW_ATE_HP_complex_float128:printf ("(HP_complex_float128)"); break; + case DW_ATE_HP_floathpintel: printf ("(HP_floathpintel)"); break; + case DW_ATE_HP_imaginary_float80: printf ("(HP_imaginary_float80)"); break; + case DW_ATE_HP_imaginary_float128: printf ("(HP_imaginary_float128)"); break; + default: if (uvalue >= DW_ATE_lo_user && uvalue <= DW_ATE_hi_user) @@ -1346,8 +1555,16 @@ read_and_display_attr_value (unsigned long attribute, case DW_AT_frame_base: have_frame_base = 1; case DW_AT_location: + case DW_AT_string_length: + case DW_AT_return_addr: case DW_AT_data_member_location: case DW_AT_vtable_elem_location: + case DW_AT_segment: + case DW_AT_static_link: + case DW_AT_use_location: + if (form == DW_FORM_data4 || form == DW_FORM_data8) + printf (_("(location list)")); + /* Fall through. */ case DW_AT_allocated: case DW_AT_associated: case DW_AT_data_location: @@ -1362,14 +1579,39 @@ read_and_display_attr_value (unsigned long attribute, need_frame_base = decode_location_expression (block_start, pointer_size, uvalue, - cu_offset); + cu_offset, section); printf (")"); if (need_frame_base && !have_frame_base) printf (_(" [without DW_AT_frame_base]")); } - else if (form == DW_FORM_data4 || form == DW_FORM_data8) - printf (_("(location list)")); + break; + case DW_AT_import: + { + if (form == DW_FORM_ref1 + || form == DW_FORM_ref2 + || form == DW_FORM_ref4) + uvalue += cu_offset; + + if (uvalue >= section->size) + warn (_("Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n"), + uvalue, (unsigned long) (orig_data - section->start)); + else + { + unsigned long abbrev_number; + abbrev_entry * entry; + + abbrev_number = read_leb128 (section->start + uvalue, NULL, 0); + + printf ("[Abbrev Number: %ld", abbrev_number); + for (entry = first_abbrev; entry != NULL; entry = entry->next) + if (entry->entry == abbrev_number) + break; + if (entry != NULL) + printf (" (%s)", get_TAG_name (entry->tag)); + printf ("]"); + } + } break; default: @@ -1459,19 +1701,52 @@ get_AT_name (unsigned long attribute) case DW_AT_call_column: return "DW_AT_call_column"; case DW_AT_call_file: return "DW_AT_call_file"; case DW_AT_call_line: return "DW_AT_call_line"; - /* SGI/MIPS extensions. */ - case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde"; - case DW_AT_MIPS_loop_begin: return "DW_AT_MIPS_loop_begin"; - case DW_AT_MIPS_tail_loop_begin: return "DW_AT_MIPS_tail_loop_begin"; - case DW_AT_MIPS_epilog_begin: return "DW_AT_MIPS_epilog_begin"; - case DW_AT_MIPS_loop_unroll_factor: return "DW_AT_MIPS_loop_unroll_factor"; - case DW_AT_MIPS_software_pipeline_depth: - return "DW_AT_MIPS_software_pipeline_depth"; - case DW_AT_MIPS_linkage_name: return "DW_AT_MIPS_linkage_name"; - case DW_AT_MIPS_stride: return "DW_AT_MIPS_stride"; - case DW_AT_MIPS_abstract_name: return "DW_AT_MIPS_abstract_name"; - case DW_AT_MIPS_clone_origin: return "DW_AT_MIPS_clone_origin"; - case DW_AT_MIPS_has_inlines: return "DW_AT_MIPS_has_inlines"; + case DW_AT_description: return "DW_AT_description"; + case DW_AT_binary_scale: return "DW_AT_binary_scale"; + case DW_AT_decimal_scale: return "DW_AT_decimal_scale"; + case DW_AT_small: return "DW_AT_small"; + case DW_AT_decimal_sign: return "DW_AT_decimal_sign"; + case DW_AT_digit_count: return "DW_AT_digit_count"; + case DW_AT_picture_string: return "DW_AT_picture_string"; + case DW_AT_mutable: return "DW_AT_mutable"; + case DW_AT_threads_scaled: return "DW_AT_threads_scaled"; + case DW_AT_explicit: return "DW_AT_explicit"; + case DW_AT_object_pointer: return "DW_AT_object_pointer"; + case DW_AT_endianity: return "DW_AT_endianity"; + case DW_AT_elemental: return "DW_AT_elemental"; + case DW_AT_pure: return "DW_AT_pure"; + case DW_AT_recursive: return "DW_AT_recursive"; + + /* HP and SGI/MIPS extensions. */ + case DW_AT_MIPS_loop_begin: return "DW_AT_MIPS_loop_begin"; + case DW_AT_MIPS_tail_loop_begin: return "DW_AT_MIPS_tail_loop_begin"; + case DW_AT_MIPS_epilog_begin: return "DW_AT_MIPS_epilog_begin"; + case DW_AT_MIPS_loop_unroll_factor: return "DW_AT_MIPS_loop_unroll_factor"; + case DW_AT_MIPS_software_pipeline_depth: return "DW_AT_MIPS_software_pipeline_depth"; + case DW_AT_MIPS_linkage_name: return "DW_AT_MIPS_linkage_name"; + case DW_AT_MIPS_stride: return "DW_AT_MIPS_stride"; + case DW_AT_MIPS_abstract_name: return "DW_AT_MIPS_abstract_name"; + case DW_AT_MIPS_clone_origin: return "DW_AT_MIPS_clone_origin"; + case DW_AT_MIPS_has_inlines: return "DW_AT_MIPS_has_inlines"; + + /* HP Extensions. */ + case DW_AT_HP_block_index: return "DW_AT_HP_block_index"; + case DW_AT_HP_actuals_stmt_list: return "DW_AT_HP_actuals_stmt_list"; + case DW_AT_HP_proc_per_section: return "DW_AT_HP_proc_per_section"; + case DW_AT_HP_raw_data_ptr: return "DW_AT_HP_raw_data_ptr"; + case DW_AT_HP_pass_by_reference: return "DW_AT_HP_pass_by_reference"; + case DW_AT_HP_opt_level: return "DW_AT_HP_opt_level"; + case DW_AT_HP_prof_version_id: return "DW_AT_HP_prof_version_id"; + case DW_AT_HP_opt_flags: return "DW_AT_HP_opt_flags"; + case DW_AT_HP_cold_region_low_pc: return "DW_AT_HP_cold_region_low_pc"; + case DW_AT_HP_cold_region_high_pc: return "DW_AT_HP_cold_region_high_pc"; + case DW_AT_HP_all_variables_modifiable: return "DW_AT_HP_all_variables_modifiable"; + case DW_AT_HP_linkage_name: return "DW_AT_HP_linkage_name"; + case DW_AT_HP_prof_flags: return "DW_AT_HP_prof_flags"; + + /* One value is shared by the MIPS and HP extensions: */ + case DW_AT_MIPS_fde: return "DW_AT_MIPS_fde or DW_AT_HP_unmodifiable"; + /* GNU extensions. */ case DW_AT_sf_names: return "DW_AT_sf_names"; case DW_AT_src_info: return "DW_AT_src_info"; @@ -1480,8 +1755,15 @@ get_AT_name (unsigned long attribute) case DW_AT_body_begin: return "DW_AT_body_begin"; case DW_AT_body_end: return "DW_AT_body_end"; case DW_AT_GNU_vector: return "DW_AT_GNU_vector"; + /* UPC extension. */ case DW_AT_upc_threads_scaled: return "DW_AT_upc_threads_scaled"; + + /* PGI (STMicroelectronics) extensions. */ + case DW_AT_PGI_lbase: return "DW_AT_PGI_lbase"; + case DW_AT_PGI_soffset: return "DW_AT_PGI_soffset"; + case DW_AT_PGI_lstride: return "DW_AT_PGI_lstride"; + default: { static char buffer[100]; @@ -1496,20 +1778,21 @@ get_AT_name (unsigned long attribute) static unsigned char * read_and_display_attr (unsigned long attribute, unsigned long form, - unsigned char *data, + unsigned char * data, unsigned long cu_offset, unsigned long pointer_size, unsigned long offset_size, int dwarf_version, - debug_info *debug_info_p, - int do_loc) + debug_info * debug_info_p, + int do_loc, + struct dwarf_section * section) { if (!do_loc) - printf (" %-18s:", get_AT_name (attribute)); + printf (" %-18s:", get_AT_name (attribute)); data = read_and_display_attr_value (attribute, form, data, cu_offset, pointer_size, offset_size, dwarf_version, debug_info_p, - do_loc); + do_loc, section); if (!do_loc) printf ("\n"); return data; @@ -1521,7 +1804,8 @@ read_and_display_attr (unsigned long attribute, anything to the user. */ static int -process_debug_info (struct dwarf_section *section, void *file, +process_debug_info (struct dwarf_section *section, + void *file, int do_loc) { unsigned char *start = section->start; @@ -1549,8 +1833,22 @@ process_debug_info (struct dwarf_section *section, void *file, length = byte_get (section_begin + 4, 8); section_begin += length + 12; } + else if (length >= 0xfffffff0 && length < 0xffffffff) + { + warn (_("Reserved length value (%lx) found in section %s\n"), length, section->name); + return 0; + } else section_begin += length + 4; + + /* Negative values are illegal, they may even cause infinite + looping. This can happen if we can't accurately apply + relocations to an object file. */ + if ((signed long) length <= 0) + { + warn (_("Corrupt unit length (%lx) found in section %s\n"), length, section->name); + return 0; + } } if (num_units == 0) @@ -1560,8 +1858,8 @@ process_debug_info (struct dwarf_section *section, void *file, } /* Then allocate an array to hold the information. */ - debug_information = cmalloc (num_units, - sizeof (* debug_information)); + debug_information = (debug_info *) cmalloc (num_units, + sizeof (* debug_information)); if (debug_information == NULL) { error (_("Not enough memory for a debug info array of %u entries"), @@ -1572,7 +1870,7 @@ process_debug_info (struct dwarf_section *section, void *file, if (!do_loc) { - printf (_("The section %s contains:\n\n"), section->name); + printf (_("Contents of the %s section:\n\n"), section->name); load_debug_section (str, file); } @@ -1644,7 +1942,8 @@ process_debug_info (struct dwarf_section *section, void *file, if (!do_loc) { printf (_(" Compilation Unit @ offset 0x%lx:\n"), cu_offset); - printf (_(" Length: %ld\n"), compunit.cu_length); + printf (_(" Length: 0x%lx (%s)\n"), compunit.cu_length, + initial_length_size == 8 ? "64-bit" : "32-bit"); printf (_(" Version: %d\n"), compunit.cu_version); printf (_(" Abbrev Offset: %ld\n"), compunit.cu_abbrev_offset); printf (_(" Pointer Size: %d\n"), compunit.cu_pointer_size); @@ -1653,8 +1952,8 @@ process_debug_info (struct dwarf_section *section, void *file, 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); + warn (_("Debug info is corrupted, length of CU at %lx extends beyond end of section (length = %lx)\n"), + cu_offset, compunit.cu_length); break; } tags = hdrptr; @@ -1662,7 +1961,8 @@ process_debug_info (struct dwarf_section *section, void *file, if (compunit.cu_version != 2 && compunit.cu_version != 3) { - warn (_("Only version 2 and 3 DWARF debug information is currently supported.\n")); + warn (_("CU at offset %lx contains corrupt or unsupported version number: %d.\n"), + cu_offset, compunit.cu_version); continue; } @@ -1671,8 +1971,9 @@ 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. */ 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); + warn (_("Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n"), + (unsigned long) compunit.cu_abbrev_offset, + (unsigned long) debug_displays [abbrev].section.size); else process_abbrev_section ((unsigned char *) debug_displays [abbrev].section.start @@ -1685,26 +1986,52 @@ process_debug_info (struct dwarf_section *section, void *file, { unsigned int bytes_read; unsigned long abbrev_number; + unsigned long die_offset; abbrev_entry *entry; abbrev_attr *attr; + die_offset = tags - section_begin; + abbrev_number = read_leb128 (tags, & bytes_read, 0); tags += bytes_read; - /* A null DIE marks the end of a list of children. */ + /* A null DIE marks the end of a list of siblings or it may also be + a section padding. */ if (abbrev_number == 0) { + /* Check if it can be a section padding for the last CU. */ + if (level == 0 && start == end) + { + unsigned char *chk; + + for (chk = tags; chk < start; chk++) + if (*chk != 0) + break; + if (chk == start) + break; + } + --level; + if (level < 0) + { + static unsigned num_bogus_warns = 0; + + if (num_bogus_warns < 3) + { + warn (_("Bogus end-of-siblings marker detected at offset %lx in .debug_info section\n"), + die_offset); + num_bogus_warns ++; + if (num_bogus_warns == 3) + warn (_("Further warnings about bogus end-of-sibling markers suppressed\n")); + } + } continue; } if (!do_loc) printf (_(" <%d><%lx>: Abbrev Number: %lu"), - level, - (unsigned long) (tags - section_begin - - bytes_read), - abbrev_number); - + level, die_offset, abbrev_number); + /* Scan through the abbreviation list until we reach the correct entry. */ for (entry = first_abbrev; @@ -1719,14 +2046,14 @@ process_debug_info (struct dwarf_section *section, void *file, printf ("\n"); fflush (stdout); } - warn (_("Unable to locate entry %lu in the abbreviation table\n"), - abbrev_number); + warn (_("DIE at offset %lx refers to abbreviation number %lu which does not exist\n"), + die_offset, abbrev_number); return 0; } if (!do_loc) printf (_(" (%s)\n"), get_TAG_name (entry->tag)); - + switch (entry->tag) { default: @@ -1747,7 +2074,7 @@ process_debug_info (struct dwarf_section *section, void *file, { if (! do_loc) /* Show the offset from where the tag was extracted. */ - printf (" <%2lx>", (unsigned long)(tags - section_begin)); + printf (" <%2lx>", (unsigned long)(tags - section_begin)); tags = read_and_display_attr (attr->attribute, attr->form, @@ -1755,26 +2082,26 @@ process_debug_info (struct dwarf_section *section, void *file, compunit.cu_pointer_size, offset_size, compunit.cu_version, - &debug_information [unit], - do_loc); + debug_information + unit, + do_loc, section); } - + if (entry->children) ++level; } } - + /* Set num_debug_info_entries here so that it can be used to check if we need to process .debug_loc and .debug_ranges sections. */ if ((do_loc || do_debug_loc || do_debug_ranges) && num_debug_info_entries == 0) num_debug_info_entries = num_units; - + if (!do_loc) { printf ("\n"); } - + return 1; } @@ -1792,6 +2119,11 @@ load_debug_info (void * file) last_pointer_size = 0; warned_about_missing_comp_units = FALSE; + /* If we have already tried and failed to load the .debug_info + section then do not bother to repear the task. */ + if (num_debug_info_entries == DEBUG_INFO_UNAVAILABLE) + return 0; + /* If we already have the information there is nothing else to do. */ if (num_debug_info_entries > 0) return num_debug_info_entries; @@ -1799,21 +2131,20 @@ load_debug_info (void * file) if (load_debug_section (info, file) && process_debug_info (&debug_displays [info].section, file, 1)) return num_debug_info_entries; - else - return 0; + + num_debug_info_entries = DEBUG_INFO_UNAVAILABLE; + return 0; } static int -display_debug_lines (struct dwarf_section *section, void *file) +display_debug_lines_raw (struct dwarf_section *section, + unsigned char *data, + unsigned char *end) { unsigned char *start = section->start; - unsigned char *data = start; - unsigned char *end = start + section->size; - printf (_("\nDump of debug contents of section %s:\n\n"), - section->name); - - load_debug_info (file); + printf (_("Raw dump of debug contents of section %s:\n\n"), + section->name); while (data < end) { @@ -1821,11 +2152,13 @@ display_debug_lines (struct dwarf_section *section, void *file) unsigned char *standard_opcodes; unsigned char *end_of_sequence; unsigned char *hdrptr; + unsigned long hdroff; int initial_length_size; int offset_size; int i; hdrptr = data; + hdroff = hdrptr - start; /* Check the length of the block. */ info.li_length = byte_get (hdrptr, 4); @@ -1848,7 +2181,8 @@ display_debug_lines (struct dwarf_section *section, void *file) if (info.li_length + initial_length_size > section->size) { warn - (_("The line info appears to be corrupt - the section is too small\n")); + (_("The information in section %s appears to be corrupt - the section is too small\n"), + section->name); return 0; } @@ -1878,6 +2212,7 @@ display_debug_lines (struct dwarf_section *section, void *file) info.li_line_base <<= 24; info.li_line_base >>= 24; + printf (_(" Offset: 0x%lx\n"), hdroff); printf (_(" Length: %ld\n"), info.li_length); printf (_(" DWARF Version: %d\n"), info.li_version); printf (_(" Prologue Length: %d\n"), info.li_prologue_length); @@ -2077,6 +2412,461 @@ display_debug_lines (struct dwarf_section *section, void *file) return 1; } +typedef struct +{ + unsigned char *name; + unsigned int directory_index; + unsigned int modification_date; + unsigned int length; +} File_Entry; + +/* Output a decoded representation of the .debug_line section. */ + +static int +display_debug_lines_decoded (struct dwarf_section *section, + unsigned char *data, + unsigned char *end) +{ + printf (_("Decoded dump of debug contents of section %s:\n\n"), + section->name); + + while (data < end) + { + /* This loop amounts to one iteration per compilation unit. */ + DWARF2_Internal_LineInfo info; + unsigned char *standard_opcodes; + unsigned char *end_of_sequence; + unsigned char *hdrptr; + int initial_length_size; + int offset_size; + int i; + File_Entry *file_table = NULL; + unsigned char **directory_table = NULL; + unsigned int prev_line = 0; + + hdrptr = data; + + /* Extract information from the Line Number Program Header. + (section 6.2.4 in the Dwarf3 doc). */ + + /* Get the length of this CU's line number information block. */ + info.li_length = byte_get (hdrptr, 4); + hdrptr += 4; + + if (info.li_length == 0xffffffff) + { + /* This section is 64-bit DWARF 3. */ + info.li_length = byte_get (hdrptr, 8); + hdrptr += 8; + offset_size = 8; + initial_length_size = 12; + } + else + { + offset_size = 4; + initial_length_size = 4; + } + + if (info.li_length + initial_length_size > section->size) + { + warn (_("The line info appears to be corrupt - " + "the section is too small\n")); + return 0; + } + + /* Get this CU's Line Number Block version number. */ + info.li_version = byte_get (hdrptr, 2); + hdrptr += 2; + if (info.li_version != 2 && info.li_version != 3) + { + warn (_("Only DWARF version 2 and 3 line info is currently " + "supported.\n")); + return 0; + } + + info.li_prologue_length = byte_get (hdrptr, offset_size); + hdrptr += offset_size; + info.li_min_insn_length = byte_get (hdrptr, 1); + hdrptr++; + info.li_default_is_stmt = byte_get (hdrptr, 1); + hdrptr++; + info.li_line_base = byte_get (hdrptr, 1); + hdrptr++; + info.li_line_range = byte_get (hdrptr, 1); + hdrptr++; + info.li_opcode_base = byte_get (hdrptr, 1); + hdrptr++; + + /* Sign extend the line base field. */ + info.li_line_base <<= 24; + info.li_line_base >>= 24; + + /* Find the end of this CU's Line Number Information Block. */ + end_of_sequence = data + info.li_length + initial_length_size; + + reset_state_machine (info.li_default_is_stmt); + + /* Save a pointer to the contents of the Opcodes table. */ + standard_opcodes = hdrptr; + + /* Traverse the Directory table just to count entries. */ + data = standard_opcodes + info.li_opcode_base - 1; + if (*data != 0) + { + unsigned int n_directories = 0; + unsigned char *ptr_directory_table = data; + int i; + + while (*data != 0) + { + data += strlen ((char *) data) + 1; + n_directories++; + } + + /* Go through the directory table again to save the directories. */ + directory_table = (unsigned char **) + xmalloc (n_directories * sizeof (unsigned char *)); + + i = 0; + while (*ptr_directory_table != 0) + { + directory_table[i] = ptr_directory_table; + ptr_directory_table += strlen ((char *) ptr_directory_table) + 1; + i++; + } + } + /* Skip the NUL at the end of the table. */ + data++; + + /* Traverse the File Name table just to count the entries. */ + if (*data != 0) + { + unsigned int n_files = 0; + unsigned char *ptr_file_name_table = data; + int i; + + while (*data != 0) + { + unsigned int bytes_read; + + /* Skip Name, directory index, last modification time and length + of file. */ + data += strlen ((char *) data) + 1; + read_leb128 (data, & bytes_read, 0); + data += bytes_read; + read_leb128 (data, & bytes_read, 0); + data += bytes_read; + read_leb128 (data, & bytes_read, 0); + data += bytes_read; + + n_files++; + } + + /* Go through the file table again to save the strings. */ + file_table = (File_Entry *) xmalloc (n_files * sizeof (File_Entry)); + + i = 0; + while (*ptr_file_name_table != 0) + { + unsigned int bytes_read; + + file_table[i].name = ptr_file_name_table; + ptr_file_name_table += strlen ((char *) ptr_file_name_table) + 1; + + /* We are not interested in directory, time or size. */ + file_table[i].directory_index = read_leb128 (ptr_file_name_table, + & bytes_read, 0); + ptr_file_name_table += bytes_read; + file_table[i].modification_date = read_leb128 (ptr_file_name_table, + & bytes_read, 0); + ptr_file_name_table += bytes_read; + file_table[i].length = read_leb128 (ptr_file_name_table, & bytes_read, 0); + ptr_file_name_table += bytes_read; + i++; + } + i = 0; + + /* Print the Compilation Unit's name and a header. */ + if (directory_table == NULL) + { + printf (_("CU: %s:\n"), file_table[0].name); + printf (_("File name Line number Starting address\n")); + } + else + { + if (do_wide || strlen ((char *) directory_table[0]) < 76) + { + printf (_("CU: %s/%s:\n"), directory_table[0], + file_table[0].name); + } + else + { + printf (_("%s:\n"), file_table[0].name); + } + printf (_("File name Line number Starting address\n")); + } + } + + /* Skip the NUL at the end of the table. */ + data++; + + /* This loop iterates through the Dwarf Line Number Program. */ + while (data < end_of_sequence) + { + unsigned char op_code; + int adv; + unsigned long int uladv; + unsigned int bytes_read; + int is_special_opcode = 0; + + op_code = *data++; + prev_line = state_machine_regs.line; + + if (op_code >= info.li_opcode_base) + { + op_code -= info.li_opcode_base; + uladv = (op_code / info.li_line_range) * info.li_min_insn_length; + state_machine_regs.address += uladv; + + adv = (op_code % info.li_line_range) + info.li_line_base; + state_machine_regs.line += adv; + is_special_opcode = 1; + } + else switch (op_code) + { + case DW_LNS_extended_op: + { + unsigned int ext_op_code_len; + unsigned int bytes_read; + unsigned char ext_op_code; + unsigned char *op_code_data = data; + + ext_op_code_len = read_leb128 (op_code_data, &bytes_read, 0); + op_code_data += bytes_read; + + if (ext_op_code_len == 0) + { + warn (_("badly formed extended line op encountered!\n")); + break; + } + ext_op_code_len += bytes_read; + ext_op_code = *op_code_data++; + + switch (ext_op_code) + { + case DW_LNE_end_sequence: + reset_state_machine (info.li_default_is_stmt); + break; + case DW_LNE_set_address: + state_machine_regs.address = + byte_get (op_code_data, ext_op_code_len - bytes_read - 1); + break; + case DW_LNE_define_file: + { + unsigned int dir_index = 0; + + ++state_machine_regs.last_file_entry; + op_code_data += strlen ((char *) op_code_data) + 1; + dir_index = read_leb128 (op_code_data, & bytes_read, 0); + op_code_data += bytes_read; + read_leb128 (op_code_data, & bytes_read, 0); + op_code_data += bytes_read; + read_leb128 (op_code_data, & bytes_read, 0); + + printf (_("%s:\n"), directory_table[dir_index]); + break; + } + default: + printf (_("UNKNOWN: length %d\n"), ext_op_code_len - bytes_read); + break; + } + data += ext_op_code_len; + break; + } + case DW_LNS_copy: + break; + + case DW_LNS_advance_pc: + uladv = read_leb128 (data, & bytes_read, 0); + uladv *= info.li_min_insn_length; + data += bytes_read; + state_machine_regs.address += uladv; + break; + + case DW_LNS_advance_line: + adv = read_leb128 (data, & bytes_read, 1); + data += bytes_read; + state_machine_regs.line += adv; + break; + + case DW_LNS_set_file: + adv = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + state_machine_regs.file = adv; + if (file_table[state_machine_regs.file - 1].directory_index == 0) + { + /* If directory index is 0, that means current directory. */ + printf (_("\n./%s:[++]\n"), + file_table[state_machine_regs.file - 1].name); + } + else + { + /* The directory index starts counting at 1. */ + printf (_("\n%s/%s:\n"), + directory_table[file_table[state_machine_regs.file - 1].directory_index - 1], + file_table[state_machine_regs.file - 1].name); + } + break; + + case DW_LNS_set_column: + uladv = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + state_machine_regs.column = uladv; + break; + + case DW_LNS_negate_stmt: + adv = state_machine_regs.is_stmt; + adv = ! adv; + state_machine_regs.is_stmt = adv; + break; + + case DW_LNS_set_basic_block: + state_machine_regs.basic_block = 1; + break; + + case DW_LNS_const_add_pc: + uladv = (((255 - info.li_opcode_base) / info.li_line_range) + * info.li_min_insn_length); + state_machine_regs.address += uladv; + break; + + case DW_LNS_fixed_advance_pc: + uladv = byte_get (data, 2); + data += 2; + state_machine_regs.address += uladv; + break; + + case DW_LNS_set_prologue_end: + break; + + case DW_LNS_set_epilogue_begin: + break; + + case DW_LNS_set_isa: + uladv = read_leb128 (data, & bytes_read, 0); + data += bytes_read; + printf (_(" Set ISA to %lu\n"), uladv); + break; + + default: + printf (_(" Unknown opcode %d with operands: "), op_code); + + for (i = standard_opcodes[op_code - 1]; i > 0 ; --i) + { + printf ("0x%lx%s", read_leb128 (data, &bytes_read, 0), + i == 1 ? "" : ", "); + data += bytes_read; + } + putchar ('\n'); + break; + } + + /* Only Special opcodes, DW_LNS_copy and DW_LNE_end_sequence adds a row + to the DWARF address/line matrix. */ + if ((is_special_opcode) || (op_code == DW_LNE_end_sequence) + || (op_code == DW_LNS_copy)) + { + const unsigned int MAX_FILENAME_LENGTH = 35; + char *fileName = (char *)file_table[state_machine_regs.file - 1].name; + char *newFileName = NULL; + size_t fileNameLength = strlen (fileName); + + if ((fileNameLength > MAX_FILENAME_LENGTH) && (!do_wide)) + { + newFileName = (char *) xmalloc (MAX_FILENAME_LENGTH + 1); + /* Truncate file name */ + strncpy (newFileName, + fileName + fileNameLength - MAX_FILENAME_LENGTH, + MAX_FILENAME_LENGTH + 1); + } + else + { + newFileName = (char *) xmalloc (fileNameLength + 1); + strncpy (newFileName, fileName, fileNameLength + 1); + } + + if (!do_wide || (fileNameLength <= MAX_FILENAME_LENGTH)) + { + printf (_("%-35s %11d %#18lx\n"), newFileName, + state_machine_regs.line, state_machine_regs.address); + } + else + { + printf (_("%s %11d %#18lx\n"), newFileName, + state_machine_regs.line, state_machine_regs.address); + } + + if (op_code == DW_LNE_end_sequence) + printf ("\n"); + + free (newFileName); + } + } + free (file_table); + file_table = NULL; + free (directory_table); + directory_table = NULL; + putchar ('\n'); + } + + return 1; +} + +static int +display_debug_lines (struct dwarf_section *section, void *file) +{ + unsigned char *data = section->start; + unsigned char *end = data + section->size; + int retValRaw = 1; + int retValDecoded = 1; + + if (load_debug_info (file) == 0) + { + warn (_("Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"), + section->name); + return 0; + } + + if (do_debug_lines == 0) + do_debug_lines |= FLAG_DEBUG_LINES_RAW; + + if (do_debug_lines & FLAG_DEBUG_LINES_RAW) + retValRaw = display_debug_lines_raw (section, data, end); + + if (do_debug_lines & FLAG_DEBUG_LINES_DECODED) + retValDecoded = display_debug_lines_decoded (section, data, end); + + if (!retValRaw || !retValDecoded) + return 0; + + return 1; +} + +static debug_info * +find_debug_info_for_offset (unsigned long offset) +{ + unsigned int i; + + if (num_debug_info_entries == DEBUG_INFO_UNAVAILABLE) + return NULL; + + for (i = 0; i < num_debug_info_entries; i++) + if (debug_information[i].cu_offset == offset) + return debug_information + i; + + return NULL; +} + static int display_debug_pubnames (struct dwarf_section *section, void *file ATTRIBUTE_UNUSED) @@ -2085,6 +2875,10 @@ display_debug_pubnames (struct dwarf_section *section, unsigned char *start = section->start; unsigned char *end = start + section->size; + /* It does not matter if this load fails, + we test for that later on. */ + load_debug_info (file); + printf (_("Contents of the %s section:\n\n"), section->name); while (start < end) @@ -2112,8 +2906,16 @@ display_debug_pubnames (struct dwarf_section *section, pubnames.pn_version = byte_get (data, 2); data += 2; + pubnames.pn_offset = byte_get (data, offset_size); data += offset_size; + + if (num_debug_info_entries != DEBUG_INFO_UNAVAILABLE + && num_debug_info_entries > 0 + && find_debug_info_for_offset (pubnames.pn_offset) == NULL) + warn (_(".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"), + pubnames.pn_offset, section->name); + pubnames.pn_size = byte_get (data, offset_size); data += offset_size; @@ -2136,7 +2938,7 @@ display_debug_pubnames (struct dwarf_section *section, pubnames.pn_length); printf (_(" Version: %d\n"), pubnames.pn_version); - printf (_(" Offset into .debug_info section: %ld\n"), + printf (_(" Offset into .debug_info section: 0x%lx\n"), pubnames.pn_offset); printf (_(" Size of area in .debug_info section: %ld\n"), pubnames.pn_size); @@ -2150,7 +2952,7 @@ display_debug_pubnames (struct dwarf_section *section, if (offset != 0) { data += offset_size; - printf (" %-6ld\t\t%s\n", offset, data); + printf (" %-6lx\t%s\n", offset, data); data += strlen ((char *) data) + 1; } } @@ -2178,7 +2980,7 @@ display_debug_macinfo (struct dwarf_section *section, unsigned int lineno; const char *string; - op = *curr; + op = (enum dwarf_macinfo_record_type) *curr; curr++; switch (op) @@ -2305,7 +3107,12 @@ display_debug_loc (struct dwarf_section *section, void *file) return 0; } - load_debug_info (file); + if (load_debug_info (file) == 0) + { + warn (_("Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"), + section->name); + return 0; + } /* Check the order of location list in .debug_info section. If offsets of location lists are in the ascending order, we can @@ -2363,8 +3170,8 @@ display_debug_loc (struct dwarf_section *section, void *file) seen_first_offset = 0; for (i = first; i < num_debug_info_entries; i++) { - unsigned long begin; - unsigned long end; + dwarf_vma begin; + dwarf_vma end; unsigned short length; unsigned long offset; unsigned int pointer_size; @@ -2380,7 +3187,7 @@ display_debug_loc (struct dwarf_section *section, void *file) { has_frame_base = debug_information [i].have_frame_base [j]; /* DWARF sections under Mach-O have non-zero addresses. */ - offset = debug_information [i].loc_offsets [j] - section->address; + offset = debug_information [i].loc_offsets [j] - section->address; next = section_begin + offset; base_address = debug_information [i].base_address; @@ -2390,10 +3197,12 @@ display_debug_loc (struct dwarf_section *section, void *file) { if (start < next) warn (_("There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"), - (long)(start - section_begin), (long)(next - section_begin)); + (unsigned long) (start - section_begin), + (unsigned long) (next - section_begin)); else if (start > next) warn (_("There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"), - (long)(start - section_begin), (long)(next - section_begin)); + (unsigned long) (start - section_begin), + (unsigned long) (next - section_begin)); } start = next; @@ -2413,23 +3222,31 @@ display_debug_loc (struct dwarf_section *section, void *file) break; } - begin = byte_get (start, pointer_size); + /* Note: we use sign extension here in order to be sure that + we can detect the -1 escape value. Sign extension into the + top 32 bits of a 32-bit address will not affect the values + that we display since we always show hex values, and always + the bottom 32-bits. */ + begin = byte_get_signed (start, pointer_size); start += pointer_size; - end = byte_get (start, pointer_size); + end = byte_get_signed (start, pointer_size); start += pointer_size; + printf (" %8.8lx ", offset); + if (begin == 0 && end == 0) { - printf (_(" %8.8lx \n"), offset); + printf (_("\n")); break; } /* Check base address specifiers. */ - if (begin == -1UL && end != -1UL) + if (begin == (dwarf_vma) -1 && end != (dwarf_vma) -1) { base_address = end; - printf (_(" %8.8lx %8.8lx %8.8lx (base address)\n"), - offset, begin, end); + print_dwarf_vma (begin, pointer_size); + print_dwarf_vma (end, pointer_size); + printf (_("(base address)\n")); continue; } @@ -2450,12 +3267,14 @@ display_debug_loc (struct dwarf_section *section, void *file) break; } - printf (" %8.8lx %8.8lx %8.8lx (", - offset, begin + base_address, end + base_address); + print_dwarf_vma (begin + base_address, pointer_size); + print_dwarf_vma (end + base_address, pointer_size); + + putchar ('('); need_frame_base = decode_location_expression (start, pointer_size, length, - cu_offset); + cu_offset, section); putchar (')'); if (need_frame_base && !has_frame_base) @@ -2472,6 +3291,11 @@ display_debug_loc (struct dwarf_section *section, void *file) } } } + + if (start < section_end) + warn (_("There are %ld unused bytes at the end of section %s\n"), + (long) (section_end - start), section->name); + putchar ('\n'); return 1; } @@ -2547,15 +3371,19 @@ display_debug_aranges (struct dwarf_section *section, unsigned char *start = section->start; unsigned char *end = start + section->size; - printf (_("The section %s contains:\n\n"), section->name); + printf (_("Contents of the %s section:\n\n"), section->name); + + /* It does not matter if this load fails, + we test for that later on. */ + load_debug_info (file); while (start < end) { unsigned char *hdrptr; DWARF2_Internal_ARange arange; unsigned char *ranges; - unsigned long length; - unsigned long address; + dwarf_vma length; + dwarf_vma address; unsigned char address_size; int excess; int offset_size; @@ -2585,6 +3413,12 @@ display_debug_aranges (struct dwarf_section *section, arange.ar_info_offset = byte_get (hdrptr, offset_size); hdrptr += offset_size; + if (num_debug_info_entries != DEBUG_INFO_UNAVAILABLE + && num_debug_info_entries > 0 + && find_debug_info_for_offset (arange.ar_info_offset) == NULL) + warn (_(".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"), + arange.ar_info_offset, section->name); + arange.ar_pointer_size = byte_get (hdrptr, 1); hdrptr += 1; @@ -2599,7 +3433,7 @@ display_debug_aranges (struct dwarf_section *section, printf (_(" Length: %ld\n"), arange.ar_length); printf (_(" Version: %d\n"), arange.ar_version); - printf (_(" Offset into .debug_info: %lx\n"), arange.ar_info_offset); + printf (_(" Offset into .debug_info: 0x%lx\n"), arange.ar_info_offset); printf (_(" Pointer Size: %d\n"), arange.ar_pointer_size); printf (_(" Segment Size: %d\n"), arange.ar_segment_size); @@ -2613,7 +3447,7 @@ display_debug_aranges (struct dwarf_section *section, warn (_("Pointer size + Segment size is not a power of two.\n")); break; } - + if (address_size > 4) printf (_("\n Address Length\n")); else @@ -2638,10 +3472,10 @@ display_debug_aranges (struct dwarf_section *section, ranges += address_size; - if (address_size > 4) - printf (" 0x%16.16lx 0x%lx\n", address, length); - else - printf (" 0x%8.8lx 0x%lx\n", address, length); + printf (" "); + print_dwarf_vma (address, address_size); + print_dwarf_vma (length, address_size); + putchar ('\n'); } } @@ -2650,6 +3484,31 @@ display_debug_aranges (struct dwarf_section *section, return 1; } +/* Each debug_information[x].range_lists[y] gets this representation for + sorting purposes. */ + +struct range_entry + { + /* The debug_information[x].range_lists[y] value. */ + unsigned long ranges_offset; + + /* Original debug_information to find parameters of the data. */ + debug_info *debug_info_p; + }; + +/* Sort struct range_entry in ascending order of its RANGES_OFFSET. */ + +static int +range_entry_compar (const void *ap, const void *bp) +{ + const struct range_entry *a_re = (const struct range_entry *) ap; + const struct range_entry *b_re = (const struct range_entry *) bp; + const unsigned long a = a_re->ranges_offset; + const unsigned long b = b_re->ranges_offset; + + return (a > b) - (b > a); +} + static int display_debug_ranges (struct dwarf_section *section, void *file ATTRIBUTE_UNUSED) @@ -2658,14 +3517,8 @@ display_debug_ranges (struct dwarf_section *section, unsigned char *section_end; unsigned long bytes; unsigned char *section_begin = start; - unsigned int num_range_list = 0; - unsigned long last_offset = 0; - unsigned int first = 0; - unsigned int i; - unsigned int j; - int seen_first_offset = 0; - int use_debug_info = 1; - unsigned char *next; + unsigned int num_range_list, i; + struct range_entry *range_entries, *range_entry_fill; bytes = section->size; section_end = start + bytes; @@ -2676,129 +3529,125 @@ display_debug_ranges (struct dwarf_section *section, return 0; } - load_debug_info (file); + if (load_debug_info (file) == 0) + { + warn (_("Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n"), + section->name); + return 0; + } - /* Check the order of range list in .debug_info section. If - offsets of range lists are in the ascending order, we can - use `debug_information' directly. */ + num_range_list = 0; for (i = 0; i < num_debug_info_entries; i++) - { - unsigned int num; + num_range_list += debug_information [i].num_range_lists; - num = debug_information [i].num_range_lists; - num_range_list += num; + if (num_range_list == 0) + error (_("No range lists in .debug_info section!\n")); - /* Check if we can use `debug_information' directly. */ - if (use_debug_info && num != 0) - { - if (!seen_first_offset) - { - /* This is the first range list. */ - last_offset = debug_information [i].range_lists [0]; - first = i; - seen_first_offset = 1; - j = 1; - } - else - j = 0; + range_entries = (struct range_entry *) + xmalloc (sizeof (*range_entries) * num_range_list); + range_entry_fill = range_entries; - for (; j < num; j++) - { - if (last_offset > - debug_information [i].range_lists [j]) - { - use_debug_info = 0; - break; - } - last_offset = debug_information [i].range_lists [j]; - } + for (i = 0; i < num_debug_info_entries; i++) + { + debug_info *debug_info_p = &debug_information[i]; + unsigned int j; + + for (j = 0; j < debug_info_p->num_range_lists; j++) + { + range_entry_fill->ranges_offset = debug_info_p->range_lists[j]; + range_entry_fill->debug_info_p = debug_info_p; + range_entry_fill++; } } - if (!use_debug_info) - /* FIXME: Should we handle this case? */ - error (_("Range lists in .debug_info section aren't in ascending order!\n")); - - if (!seen_first_offset) - error (_("No range lists in .debug_info section!\n")); + qsort (range_entries, num_range_list, sizeof (*range_entries), + range_entry_compar); /* DWARF sections under Mach-O have non-zero addresses. */ - if (debug_information [first].num_range_lists > 0 - && debug_information [first].range_lists [0] != section->address) + if (range_entries[0].ranges_offset != section->address) warn (_("Range lists in %s section start at 0x%lx\n"), - section->name, debug_information [first].range_lists [0]); + section->name, range_entries[0].ranges_offset); printf (_("Contents of the %s section:\n\n"), section->name); printf (_(" Offset Begin End\n")); - seen_first_offset = 0; - for (i = first; i < num_debug_info_entries; i++) + for (i = 0; i < num_range_list; i++) { - unsigned long begin; - unsigned long end; - unsigned long offset; + struct range_entry *range_entry = &range_entries[i]; + debug_info *debug_info_p = range_entry->debug_info_p; unsigned int pointer_size; + unsigned long offset; + unsigned char *next; unsigned long base_address; - pointer_size = debug_information [i].pointer_size; + pointer_size = debug_info_p->pointer_size; + + /* DWARF sections under Mach-O have non-zero addresses. */ + offset = range_entry->ranges_offset - section->address; + next = section_begin + offset; + base_address = debug_info_p->base_address; - for (j = 0; j < debug_information [i].num_range_lists; j++) + if (i > 0) { - /* DWARF sections under Mach-O have non-zero addresses. */ - offset = debug_information [i].range_lists [j] - section->address; - next = section_begin + offset; - base_address = debug_information [i].base_address; + if (start < next) + warn (_("There is a hole [0x%lx - 0x%lx] in %s section.\n"), + (unsigned long) (start - section_begin), + (unsigned long) (next - section_begin), section->name); + else if (start > next) + warn (_("There is an overlap [0x%lx - 0x%lx] in %s section.\n"), + (unsigned long) (start - section_begin), + (unsigned long) (next - section_begin), section->name); + } + start = next; - if (!seen_first_offset) - seen_first_offset = 1; - else + while (1) + { + dwarf_vma begin; + dwarf_vma end; + + /* Note: we use sign extension here in order to be sure that + we can detect the -1 escape value. Sign extension into the + top 32 bits of a 32-bit address will not affect the values + that we display since we always show hex values, and always + the bottom 32-bits. */ + begin = byte_get_signed (start, pointer_size); + start += pointer_size; + end = byte_get_signed (start, pointer_size); + start += pointer_size; + + printf (" %8.8lx ", offset); + + if (begin == 0 && end == 0) { - if (start < next) - warn (_("There is a hole [0x%lx - 0x%lx] in %s section.\n"), - (long)(start - section_begin), - (long)(next - section_begin), section->name); - else if (start > next) - warn (_("There is an overlap [0x%lx - 0x%lx] in %s section.\n"), - (long)(start - section_begin), - (long)(next - section_begin), section->name); + printf (_("\n")); + break; } - start = next; - while (1) + /* Check base address specifiers. */ + if (begin == (dwarf_vma) -1 && end != (dwarf_vma) -1) { - begin = byte_get (start, pointer_size); - start += pointer_size; - end = byte_get (start, pointer_size); - start += pointer_size; - - if (begin == 0 && end == 0) - { - printf (_(" %8.8lx \n"), offset); - break; - } - - /* Check base address specifiers. */ - if (begin == -1UL && end != -1UL) - { - base_address = end; - printf (" %8.8lx %8.8lx %8.8lx (base address)\n", - offset, begin, end); - continue; - } + base_address = end; + print_dwarf_vma (begin, pointer_size); + print_dwarf_vma (end, pointer_size); + printf ("(base address)\n"); + continue; + } - printf (" %8.8lx %8.8lx %8.8lx", - offset, begin + base_address, end + base_address); + print_dwarf_vma (begin + base_address, pointer_size); + print_dwarf_vma (end + base_address, pointer_size); - if (begin == end) - fputs (_(" (start == end)"), stdout); - else if (begin > end) - fputs (_(" (start > end)"), stdout); + if (begin == end) + fputs (_("(start == end)"), stdout); + else if (begin > end) + fputs (_("(start > end)"), stdout); - putchar ('\n'); - } + putchar ('\n'); } } putchar ('\n'); + + free (range_entries); + return 1; } @@ -2823,21 +3672,32 @@ typedef struct Frame_Chunk } Frame_Chunk; +static const char *const *dwarf_regnames; +static unsigned int dwarf_regnames_count; + /* A marker for a col_type that means this column was never referenced in the frame info. */ #define DW_CFA_unreferenced (-1) -static void -frame_need_space (Frame_Chunk *fc, int reg) +/* Return 0 if not more space is needed, 1 if more space is needed, + -1 for invalid reg. */ + +static int +frame_need_space (Frame_Chunk *fc, unsigned int reg) { int prev = fc->ncols; - if (reg < fc->ncols) - return; + if (reg < (unsigned int) fc->ncols) + return 0; + + if (dwarf_regnames_count + && reg > dwarf_regnames_count) + return -1; fc->ncols = reg + 1; - fc->col_type = xcrealloc (fc->col_type, fc->ncols, sizeof (short int)); - fc->col_offset = xcrealloc (fc->col_offset, fc->ncols, sizeof (int)); + fc->col_type = (short int *) xcrealloc (fc->col_type, fc->ncols, + sizeof (short int)); + fc->col_offset = (int *) xcrealloc (fc->col_offset, fc->ncols, sizeof (int)); while (prev < fc->ncols) { @@ -2845,6 +3705,85 @@ frame_need_space (Frame_Chunk *fc, int reg) fc->col_offset[prev] = 0; prev++; } + return 1; +} + +static const char *const dwarf_regnames_i386[] = +{ + "eax", "ecx", "edx", "ebx", + "esp", "ebp", "esi", "edi", + "eip", "eflags", NULL, + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + NULL, NULL, + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7", + "fcw", "fsw", "mxcsr", + "es", "cs", "ss", "ds", "fs", "gs", NULL, NULL, + "tr", "ldtr" +}; + +static const char *const dwarf_regnames_x86_64[] = +{ + "rax", "rdx", "rcx", "rbx", + "rsi", "rdi", "rbp", "rsp", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + "rip", + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7", + "rflags", + "es", "cs", "ss", "ds", "fs", "gs", NULL, NULL, + "fs.base", "gs.base", NULL, NULL, + "tr", "ldtr", + "mxcsr", "fcw", "fsw" +}; + +void +init_dwarf_regnames (unsigned int e_machine) +{ + switch (e_machine) + { + case EM_386: + case EM_486: + dwarf_regnames = dwarf_regnames_i386; + dwarf_regnames_count = ARRAY_SIZE (dwarf_regnames_i386); + break; + + case EM_X86_64: + dwarf_regnames = dwarf_regnames_x86_64; + dwarf_regnames_count = ARRAY_SIZE (dwarf_regnames_x86_64); + break; + + default: + break; + } +} + +static const char * +regname (unsigned int regno, int row) +{ + static char reg[64]; + if (dwarf_regnames + && regno < dwarf_regnames_count + && dwarf_regnames [regno] != NULL) + { + if (row) + return dwarf_regnames [regno]; + snprintf (reg, sizeof (reg), "r%d (%s)", regno, + dwarf_regnames [regno]); + } + else + snprintf (reg, sizeof (reg), "r%d", regno); + return reg; } static void @@ -2858,27 +3797,29 @@ frame_display_row (Frame_Chunk *fc, int *need_col_headers, int *max_regs) if (*need_col_headers) { + static const char *loc = " LOC"; + *need_col_headers = 0; - printf (" LOC CFA "); + printf ("%-*s CFA ", eh_addr_size * 2, loc); for (r = 0; r < *max_regs; r++) if (fc->col_type[r] != DW_CFA_unreferenced) { if (r == fc->ra) - printf ("ra "); + printf ("ra "); else - printf ("r%-4d", r); + printf ("%-5s ", regname (r, 1)); } printf ("\n"); } - printf ("%08lx ", fc->pc_begin); + printf ("%0*lx ", eh_addr_size * 2, fc->pc_begin); if (fc->cfa_exp) strcpy (tmp, "exp"); else - sprintf (tmp, "r%d%+d", fc->cfa_reg, fc->cfa_offset); + sprintf (tmp, "%s%+d", regname (fc->cfa_reg, 1), fc->cfa_offset); printf ("%-8s ", tmp); for (r = 0; r < fc->ncols; r++) @@ -2900,7 +3841,7 @@ frame_display_row (Frame_Chunk *fc, int *need_col_headers, int *max_regs) sprintf (tmp, "v%+d", fc->col_offset[r]); break; case DW_CFA_register: - sprintf (tmp, "r%d", fc->col_offset[r]); + sprintf (tmp, "%s", regname (fc->col_offset[r], 0)); break; case DW_CFA_expression: strcpy (tmp, "exp"); @@ -2912,36 +3853,12 @@ frame_display_row (Frame_Chunk *fc, int *need_col_headers, int *max_regs) strcpy (tmp, "n/a"); break; } - printf ("%-5s", tmp); + printf ("%-5s ", tmp); } } printf ("\n"); } -static int -size_of_encoded_value (int encoding) -{ - switch (encoding & 0x7) - { - default: /* ??? */ - case 0: return eh_addr_size; - case 2: return 2; - case 3: return 4; - case 4: return 8; - } -} - -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 - return byte_get (data, size); -} - #define GET(N) byte_get (start, N); start += N #define LEB() read_leb128 (start, & length_return, 0); start += length_return #define SLEB() read_leb128 (start, & length_return, 1); start += length_return @@ -2959,8 +3876,9 @@ display_debug_frames (struct dwarf_section *section, int is_eh = strcmp (section->name, ".eh_frame") == 0; unsigned int length_return; int max_regs = 0; + const char *bad_reg = _("bad register: "); - printf (_("The section %s contains:\n"), section->name); + printf (_("Contents of the %s section:\n"), section->name); while (start < end) { @@ -3013,16 +3931,16 @@ display_debug_frames (struct dwarf_section *section, { int version; - fc = xmalloc (sizeof (Frame_Chunk)); + fc = (Frame_Chunk *) xmalloc (sizeof (Frame_Chunk)); memset (fc, 0, sizeof (Frame_Chunk)); fc->next = chunks; chunks = fc; fc->chunk_start = saved_start; fc->ncols = 0; - fc->col_type = xmalloc (sizeof (short int)); - fc->col_offset = xmalloc (sizeof (int)); - frame_need_space (fc, max_regs-1); + fc->col_type = (short int *) xmalloc (sizeof (short int)); + fc->col_offset = (int *) xmalloc (sizeof (int)); + frame_need_space (fc, max_regs - 1); version = *start++; @@ -3144,8 +4062,8 @@ display_debug_frames (struct dwarf_section *section, warn ("Invalid CIE pointer %#08lx in FDE at %#08lx\n", cie_id, (unsigned long)(saved_start - section_start)); fc->ncols = 0; - fc->col_type = xmalloc (sizeof (short int)); - fc->col_offset = xmalloc (sizeof (int)); + fc->col_type = (short int *) xmalloc (sizeof (short int)); + fc->col_offset = (int *) xmalloc (sizeof (int)); frame_need_space (fc, max_regs - 1); cie = fc; fc->augmentation = ""; @@ -3154,8 +4072,8 @@ display_debug_frames (struct dwarf_section *section, else { fc->ncols = cie->ncols; - fc->col_type = xcmalloc (fc->ncols, sizeof (short int)); - fc->col_offset = xcmalloc (fc->ncols, sizeof (int)); + fc->col_type = (short int *) xcmalloc (fc->ncols, sizeof (short int)); + fc->col_offset = (int *) xcmalloc (fc->ncols, sizeof (int)); memcpy (fc->col_type, cie->col_type, fc->ncols * sizeof (short int)); memcpy (fc->col_offset, cie->col_offset, fc->ncols * sizeof (int)); fc->augmentation = cie->augmentation; @@ -3164,7 +4082,7 @@ display_debug_frames (struct dwarf_section *section, fc->cfa_reg = cie->cfa_reg; fc->cfa_offset = cie->cfa_offset; fc->ra = cie->ra; - frame_need_space (fc, max_regs-1); + frame_need_space (fc, max_regs - 1); fc->fde_encoding = cie->fde_encoding; } @@ -3172,11 +4090,7 @@ display_debug_frames (struct dwarf_section *section, encoded_ptr_size = size_of_encoded_value (fc->fde_encoding); fc->pc_begin = get_encoded_value (start, fc->fde_encoding); - if ((fc->fde_encoding & 0x70) == DW_EH_PE_pcrel - /* Don't adjust for relocatable file since there's - invariably a pcrel reloc here, which we haven't - applied. */ - && !is_relocatable) + if ((fc->fde_encoding & 0x70) == DW_EH_PE_pcrel) fc->pc_begin += section->address + (start - section_start); start += encoded_ptr_size; fc->pc_range = byte_get (start, encoded_ptr_size); @@ -3236,12 +4150,12 @@ display_debug_frames (struct dwarf_section *section, break; case DW_CFA_offset: LEB (); - frame_need_space (fc, opa); - fc->col_type[opa] = DW_CFA_undefined; + if (frame_need_space (fc, opa) >= 0) + fc->col_type[opa] = DW_CFA_undefined; break; case DW_CFA_restore: - frame_need_space (fc, opa); - fc->col_type[opa] = DW_CFA_undefined; + if (frame_need_space (fc, opa) >= 0) + fc->col_type[opa] = DW_CFA_undefined; break; case DW_CFA_set_loc: start += encoded_ptr_size; @@ -3258,28 +4172,29 @@ display_debug_frames (struct dwarf_section *section, case DW_CFA_offset_extended: case DW_CFA_val_offset: reg = LEB (); LEB (); - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_restore_extended: reg = LEB (); frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_undefined: reg = LEB (); - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_same_value: reg = LEB (); - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_register: reg = LEB (); LEB (); - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_def_cfa: LEB (); LEB (); @@ -3299,14 +4214,14 @@ display_debug_frames (struct dwarf_section *section, reg = LEB (); tmp = LEB (); start += tmp; - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_offset_extended_sf: case DW_CFA_val_offset_sf: reg = LEB (); SLEB (); - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; break; case DW_CFA_def_cfa_sf: LEB (); SLEB (); @@ -3322,9 +4237,9 @@ display_debug_frames (struct dwarf_section *section, break; case DW_CFA_GNU_negative_offset_extended: reg = LEB (); LEB (); - frame_need_space (fc, reg); - fc->col_type[reg] = DW_CFA_undefined; - + if (frame_need_space (fc, reg) >= 0) + fc->col_type[reg] = DW_CFA_undefined; + break; default: break; } @@ -3341,6 +4256,7 @@ display_debug_frames (struct dwarf_section *section, unsigned long ul, reg, roffs; long l, ofs; dwarf_vma vma; + const char *reg_prefix = ""; op = *start++; opa = op & 0x3f; @@ -3363,24 +4279,36 @@ display_debug_frames (struct dwarf_section *section, case DW_CFA_offset: roffs = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_offset: r%d at cfa%+ld\n", - opa, roffs * fc->data_factor); - fc->col_type[opa] = DW_CFA_offset; - fc->col_offset[opa] = roffs * fc->data_factor; + if (opa >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_offset: %s%s at cfa%+ld\n", + reg_prefix, regname (opa, 0), + roffs * fc->data_factor); + if (*reg_prefix == '\0') + { + fc->col_type[opa] = DW_CFA_offset; + fc->col_offset[opa] = roffs * fc->data_factor; + } break; case DW_CFA_restore: - if (! do_debug_frames_interp) - printf (" DW_CFA_restore: r%d\n", opa); - fc->col_type[opa] = cie->col_type[opa]; - fc->col_offset[opa] = cie->col_offset[opa]; + if (opa >= (unsigned int) cie->ncols + || opa >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_restore: %s%s\n", + reg_prefix, regname (opa, 0)); + if (*reg_prefix == '\0') + { + fc->col_type[opa] = cie->col_type[opa]; + fc->col_offset[opa] = cie->col_offset[opa]; + } break; case DW_CFA_set_loc: vma = get_encoded_value (start, fc->fde_encoding); - if ((fc->fde_encoding & 0x70) == DW_EH_PE_pcrel - && !is_relocatable) + if ((fc->fde_encoding & 0x70) == DW_EH_PE_pcrel) vma += section->address + (start - section_start); start += encoded_ptr_size; if (do_debug_frames_interp) @@ -3426,63 +4354,104 @@ display_debug_frames (struct dwarf_section *section, case DW_CFA_offset_extended: reg = LEB (); roffs = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_offset_extended: r%ld at cfa%+ld\n", - reg, roffs * fc->data_factor); - fc->col_type[reg] = DW_CFA_offset; - fc->col_offset[reg] = roffs * fc->data_factor; + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_offset_extended: %s%s at cfa%+ld\n", + reg_prefix, regname (reg, 0), + roffs * fc->data_factor); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_offset; + fc->col_offset[reg] = roffs * fc->data_factor; + } break; case DW_CFA_val_offset: reg = LEB (); roffs = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_val_offset: r%ld at cfa%+ld\n", - reg, roffs * fc->data_factor); - fc->col_type[reg] = DW_CFA_val_offset; - fc->col_offset[reg] = roffs * fc->data_factor; + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_val_offset: %s%s at cfa%+ld\n", + reg_prefix, regname (reg, 0), + roffs * fc->data_factor); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_val_offset; + fc->col_offset[reg] = roffs * fc->data_factor; + } break; case DW_CFA_restore_extended: reg = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_restore_extended: r%ld\n", reg); - fc->col_type[reg] = cie->col_type[reg]; - fc->col_offset[reg] = cie->col_offset[reg]; + if (reg >= (unsigned int) cie->ncols + || reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_restore_extended: %s%s\n", + reg_prefix, regname (reg, 0)); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = cie->col_type[reg]; + fc->col_offset[reg] = cie->col_offset[reg]; + } break; case DW_CFA_undefined: reg = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_undefined: r%ld\n", reg); - fc->col_type[reg] = DW_CFA_undefined; - fc->col_offset[reg] = 0; + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_undefined: %s%s\n", + reg_prefix, regname (reg, 0)); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_undefined; + fc->col_offset[reg] = 0; + } break; case DW_CFA_same_value: reg = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_same_value: r%ld\n", reg); - fc->col_type[reg] = DW_CFA_same_value; - fc->col_offset[reg] = 0; + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_same_value: %s%s\n", + reg_prefix, regname (reg, 0)); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_same_value; + fc->col_offset[reg] = 0; + } break; case DW_CFA_register: reg = LEB (); roffs = LEB (); - if (! do_debug_frames_interp) - printf (" DW_CFA_register: r%ld in r%ld\n", reg, roffs); - fc->col_type[reg] = DW_CFA_register; - fc->col_offset[reg] = roffs; + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + { + printf (" DW_CFA_register: %s%s in ", + reg_prefix, regname (reg, 0)); + puts (regname (roffs, 0)); + } + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_register; + fc->col_offset[reg] = roffs; + } break; case DW_CFA_remember_state: if (! do_debug_frames_interp) printf (" DW_CFA_remember_state\n"); - rs = xmalloc (sizeof (Frame_Chunk)); + rs = (Frame_Chunk *) xmalloc (sizeof (Frame_Chunk)); rs->ncols = fc->ncols; - rs->col_type = xcmalloc (rs->ncols, sizeof (short int)); - rs->col_offset = xcmalloc (rs->ncols, sizeof (int)); + rs->col_type = (short int *) xcmalloc (rs->ncols, + sizeof (short int)); + rs->col_offset = (int *) xcmalloc (rs->ncols, sizeof (int)); memcpy (rs->col_type, fc->col_type, rs->ncols); memcpy (rs->col_offset, fc->col_offset, rs->ncols * sizeof (int)); rs->next = remembered_state; @@ -3496,7 +4465,7 @@ display_debug_frames (struct dwarf_section *section, if (rs) { remembered_state = rs->next; - frame_need_space (fc, rs->ncols-1); + frame_need_space (fc, rs->ncols - 1); memcpy (fc->col_type, rs->col_type, rs->ncols); memcpy (fc->col_offset, rs->col_offset, rs->ncols * sizeof (int)); @@ -3513,15 +4482,16 @@ display_debug_frames (struct dwarf_section *section, fc->cfa_offset = LEB (); fc->cfa_exp = 0; if (! do_debug_frames_interp) - printf (" DW_CFA_def_cfa: r%d ofs %d\n", - fc->cfa_reg, fc->cfa_offset); + printf (" DW_CFA_def_cfa: %s ofs %d\n", + regname (fc->cfa_reg, 0), fc->cfa_offset); break; case DW_CFA_def_cfa_register: fc->cfa_reg = LEB (); fc->cfa_exp = 0; if (! do_debug_frames_interp) - printf (" DW_CFA_def_cfa_reg: r%d\n", fc->cfa_reg); + printf (" DW_CFA_def_cfa_register: %s\n", + regname (fc->cfa_reg, 0)); break; case DW_CFA_def_cfa_offset: @@ -3540,7 +4510,8 @@ display_debug_frames (struct dwarf_section *section, if (! do_debug_frames_interp) { printf (" DW_CFA_def_cfa_expression ("); - decode_location_expression (start, eh_addr_size, ul, 0); + decode_location_expression (start, eh_addr_size, ul, 0, + section); printf (")\n"); } fc->cfa_exp = 1; @@ -3550,49 +4521,69 @@ display_debug_frames (struct dwarf_section *section, case DW_CFA_expression: reg = LEB (); ul = LEB (); - if (! do_debug_frames_interp) + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') { - printf (" DW_CFA_expression: r%ld (", reg); - decode_location_expression (start, eh_addr_size, ul, 0); + printf (" DW_CFA_expression: %s%s (", + reg_prefix, regname (reg, 0)); + decode_location_expression (start, eh_addr_size, + ul, 0, section); printf (")\n"); } - fc->col_type[reg] = DW_CFA_expression; + if (*reg_prefix == '\0') + fc->col_type[reg] = DW_CFA_expression; start += ul; break; case DW_CFA_val_expression: reg = LEB (); ul = LEB (); - if (! do_debug_frames_interp) + if (reg >= (unsigned int) fc->ncols) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') { - printf (" DW_CFA_val_expression: r%ld (", reg); - decode_location_expression (start, eh_addr_size, ul, 0); + printf (" DW_CFA_val_expression: %s%s (", + reg_prefix, regname (reg, 0)); + decode_location_expression (start, eh_addr_size, ul, 0, + section); printf (")\n"); } - fc->col_type[reg] = DW_CFA_val_expression; + if (*reg_prefix == '\0') + fc->col_type[reg] = DW_CFA_val_expression; start += ul; break; case DW_CFA_offset_extended_sf: reg = LEB (); l = SLEB (); - frame_need_space (fc, reg); - if (! do_debug_frames_interp) - printf (" DW_CFA_offset_extended_sf: r%ld at cfa%+ld\n", - reg, l * fc->data_factor); - fc->col_type[reg] = DW_CFA_offset; - fc->col_offset[reg] = l * fc->data_factor; + if (frame_need_space (fc, reg) < 0) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_offset_extended_sf: %s%s at cfa%+ld\n", + reg_prefix, regname (reg, 0), + l * fc->data_factor); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_offset; + fc->col_offset[reg] = l * fc->data_factor; + } break; case DW_CFA_val_offset_sf: reg = LEB (); l = SLEB (); - frame_need_space (fc, reg); - if (! do_debug_frames_interp) - printf (" DW_CFA_val_offset_sf: r%ld at cfa%+ld\n", - reg, l * fc->data_factor); - fc->col_type[reg] = DW_CFA_val_offset; - fc->col_offset[reg] = l * fc->data_factor; + if (frame_need_space (fc, reg) < 0) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_val_offset_sf: %s%s at cfa%+ld\n", + reg_prefix, regname (reg, 0), + l * fc->data_factor); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_val_offset; + fc->col_offset[reg] = l * fc->data_factor; + } break; case DW_CFA_def_cfa_sf: @@ -3601,8 +4592,8 @@ display_debug_frames (struct dwarf_section *section, fc->cfa_offset = fc->cfa_offset * fc->data_factor; fc->cfa_exp = 0; if (! do_debug_frames_interp) - printf (" DW_CFA_def_cfa_sf: r%d ofs %d\n", - fc->cfa_reg, fc->cfa_offset); + printf (" DW_CFA_def_cfa_sf: %s ofs %d\n", + regname (fc->cfa_reg, 0), fc->cfa_offset); break; case DW_CFA_def_cfa_offset_sf: @@ -3637,19 +4628,24 @@ display_debug_frames (struct dwarf_section *section, case DW_CFA_GNU_negative_offset_extended: reg = LEB (); l = - LEB (); - frame_need_space (fc, reg); - if (! do_debug_frames_interp) - printf (" DW_CFA_GNU_negative_offset_extended: r%ld at cfa%+ld\n", - reg, l * fc->data_factor); - fc->col_type[reg] = DW_CFA_offset; - fc->col_offset[reg] = l * fc->data_factor; + if (frame_need_space (fc, reg) < 0) + reg_prefix = bad_reg; + if (! do_debug_frames_interp || *reg_prefix != '\0') + printf (" DW_CFA_GNU_negative_offset_extended: %s%s at cfa%+ld\n", + reg_prefix, regname (reg, 0), + l * fc->data_factor); + if (*reg_prefix == '\0') + { + fc->col_type[reg] = DW_CFA_offset; + fc->col_offset[reg] = l * fc->data_factor; + } break; default: 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); + warn (_("unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"), op); start = block_end; } } @@ -3734,64 +4730,214 @@ warn (const char *message, ...) void free_debug_memory (void) { - enum dwarf_section_display_enum i; + unsigned int i; free_abbrevs (); for (i = 0; i < max; i++) - free_debug_section (i); + free_debug_section ((enum dwarf_section_display_enum) i); - if (debug_information) + if (debug_information != NULL) { - for (i = 0; i < num_debug_info_entries; i++) + if (num_debug_info_entries != DEBUG_INFO_UNAVAILABLE) { - if (!debug_information [i].max_loc_offsets) + for (i = 0; i < num_debug_info_entries; i++) { - free (debug_information [i].loc_offsets); - free (debug_information [i].have_frame_base); + if (!debug_information [i].max_loc_offsets) + { + free (debug_information [i].loc_offsets); + free (debug_information [i].have_frame_base); + } + if (!debug_information [i].max_range_lists) + free (debug_information [i].range_lists); } - if (!debug_information [i].max_range_lists) - free (debug_information [i].range_lists); } + free (debug_information); debug_information = NULL; num_debug_info_entries = 0; } +} +void +dwarf_select_sections_by_names (const char *names) +{ + typedef struct + { + const char * option; + int * variable; + int val; + } + debug_dump_long_opts; + + static const debug_dump_long_opts opts_table [] = + { + /* Please keep this table alpha- sorted. */ + { "Ranges", & do_debug_ranges, 1 }, + { "abbrev", & do_debug_abbrevs, 1 }, + { "aranges", & do_debug_aranges, 1 }, + { "frames", & do_debug_frames, 1 }, + { "frames-interp", & do_debug_frames_interp, 1 }, + { "info", & do_debug_info, 1 }, + { "line", & do_debug_lines, FLAG_DEBUG_LINES_RAW }, /* For backwards compatibility. */ + { "rawline", & do_debug_lines, FLAG_DEBUG_LINES_RAW }, + { "decodedline", & do_debug_lines, FLAG_DEBUG_LINES_DECODED }, + { "loc", & do_debug_loc, 1 }, + { "macro", & do_debug_macinfo, 1 }, + { "pubnames", & do_debug_pubnames, 1 }, + /* This entry is for compatability + with earlier versions of readelf. */ + { "ranges", & do_debug_aranges, 1 }, + { "str", & do_debug_str, 1 }, + { NULL, NULL, 0 } + }; + + const char *p; + + p = names; + while (*p) + { + const debug_dump_long_opts * entry; + + for (entry = opts_table; entry->option; entry++) + { + size_t len = strlen (entry->option); + + if (strncmp (p, entry->option, len) == 0 + && (p[len] == ',' || p[len] == '\0')) + { + * entry->variable |= entry->val; + + /* The --debug-dump=frames-interp option also + enables the --debug-dump=frames option. */ + if (do_debug_frames_interp) + do_debug_frames = 1; + + p += len; + break; + } + } + + if (entry->option == NULL) + { + warn (_("Unrecognized debug option '%s'\n"), p); + p = strchr (p, ','); + if (p == NULL) + break; + } + + if (*p == ',') + p++; + } +} + +void +dwarf_select_sections_by_letters (const char *letters) +{ + unsigned int index = 0; + + while (letters[index]) + switch (letters[index++]) + { + case 'i': + do_debug_info = 1; + break; + + case 'a': + do_debug_abbrevs = 1; + break; + + case 'l': + do_debug_lines |= FLAG_DEBUG_LINES_RAW; + break; + + case 'L': + do_debug_lines |= FLAG_DEBUG_LINES_DECODED; + break; + + case 'p': + do_debug_pubnames = 1; + break; + + case 'r': + do_debug_aranges = 1; + break; + + case 'R': + do_debug_ranges = 1; + break; + + case 'F': + do_debug_frames_interp = 1; + case 'f': + do_debug_frames = 1; + break; + + case 'm': + do_debug_macinfo = 1; + break; + + case 's': + do_debug_str = 1; + break; + + case 'o': + do_debug_loc = 1; + break; + + default: + warn (_("Unrecognized debug option '%s'\n"), optarg); + break; + } +} + +void +dwarf_select_sections_all (void) +{ + do_debug_info = 1; + do_debug_abbrevs = 1; + do_debug_lines = FLAG_DEBUG_LINES_RAW; + do_debug_pubnames = 1; + do_debug_aranges = 1; + do_debug_ranges = 1; + do_debug_frames = 1; + do_debug_macinfo = 1; + do_debug_str = 1; + do_debug_loc = 1; } struct dwarf_section_display debug_displays[] = { - { { ".debug_abbrev", NULL, 0, 0 }, - display_debug_abbrev, 0, 0 }, - { { ".debug_aranges", NULL, 0, 0 }, - display_debug_aranges, 0, 0 }, - { { ".debug_frame", NULL, 0, 0 }, - display_debug_frames, 1, 0 }, - { { ".debug_info", NULL, 0, 0 }, - display_debug_info, 1, 0 }, - { { ".debug_line", NULL, 0, 0 }, - display_debug_lines, 0, 0 }, - { { ".debug_pubnames", NULL, 0, 0 }, - display_debug_pubnames, 0, 0 }, - { { ".eh_frame", NULL, 0, 0 }, - display_debug_frames, 1, 1 }, - { { ".debug_macinfo", NULL, 0, 0 }, - display_debug_macinfo, 0, 0 }, - { { ".debug_str", NULL, 0, 0 }, - display_debug_str, 0, 0 }, - { { ".debug_loc", NULL, 0, 0 }, - display_debug_loc, 0, 0 }, - { { ".debug_pubtypes", NULL, 0, 0 }, - display_debug_pubnames, 0, 0 }, - { { ".debug_ranges", NULL, 0, 0 }, - display_debug_ranges, 0, 0 }, - { { ".debug_static_func", NULL, 0, 0 }, - display_debug_not_supported, 0, 0 }, - { { ".debug_static_vars", NULL, 0, 0 }, - display_debug_not_supported, 0, 0 }, - { { ".debug_types", NULL, 0, 0 }, - display_debug_not_supported, 0, 0 }, - { { ".debug_weaknames", NULL, 0, 0 }, - display_debug_not_supported, 0, 0 } + { { ".debug_abbrev", ".zdebug_abbrev", NULL, NULL, 0, 0 }, + display_debug_abbrev, &do_debug_abbrevs, 0 }, + { { ".debug_aranges", ".zdebug_aranges", NULL, NULL, 0, 0 }, + display_debug_aranges, &do_debug_aranges, 1 }, + { { ".debug_frame", ".zdebug_frame", NULL, NULL, 0, 0 }, + display_debug_frames, &do_debug_frames, 1 }, + { { ".debug_info", ".zdebug_info", NULL, NULL, 0, 0 }, + display_debug_info, &do_debug_info, 1 }, + { { ".debug_line", ".zdebug_line", NULL, NULL, 0, 0 }, + display_debug_lines, &do_debug_lines, 1 }, + { { ".debug_pubnames", ".zdebug_pubnames", NULL, NULL, 0, 0 }, + display_debug_pubnames, &do_debug_pubnames, 0 }, + { { ".eh_frame", "", NULL, NULL, 0, 0 }, + display_debug_frames, &do_debug_frames, 1 }, + { { ".debug_macinfo", ".zdebug_macinfo", NULL, NULL, 0, 0 }, + display_debug_macinfo, &do_debug_macinfo, 0 }, + { { ".debug_str", ".zdebug_str", NULL, NULL, 0, 0 }, + display_debug_str, &do_debug_str, 0 }, + { { ".debug_loc", ".zdebug_loc", NULL, NULL, 0, 0 }, + display_debug_loc, &do_debug_loc, 1 }, + { { ".debug_pubtypes", ".zdebug_pubtypes", NULL, NULL, 0, 0 }, + display_debug_pubnames, &do_debug_pubnames, 0 }, + { { ".debug_ranges", ".zdebug_ranges", NULL, NULL, 0, 0 }, + display_debug_ranges, &do_debug_ranges, 1 }, + { { ".debug_static_func", ".zdebug_static_func", NULL, NULL, 0, 0 }, + display_debug_not_supported, NULL, 0 }, + { { ".debug_static_vars", ".zdebug_static_vars", NULL, NULL, 0, 0 }, + display_debug_not_supported, NULL, 0 }, + { { ".debug_types", ".zdebug_types", NULL, NULL, 0, 0 }, + display_debug_not_supported, NULL, 0 }, + { { ".debug_weaknames", ".zdebug_weaknames", NULL, NULL, 0, 0 }, + display_debug_not_supported, NULL, 0 } }; diff --git a/binutils/dwarf.h b/binutils/dwarf.h index 7f815c8..5d793ed 100644 --- a/binutils/dwarf.h +++ b/binutils/dwarf.h @@ -1,5 +1,5 @@ -/* dwwrf.h - DWARF support header file - Copyright 2005, 2007 +/* dwarf.h - DWARF support header file + Copyright 2005, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -31,6 +31,12 @@ typedef unsigned long dwarf_size_type; struct dwarf_section { + /* A debug section has a different name when it's stored compressed + * or not. COMPRESSED_NAME and UNCOMPRESSED_NAME are the two + * possibilities. NAME is set to whichever one is used for this + * input file, as determined by load_debug_section(). */ + const char *uncompressed_name; + const char *compressed_name; const char *name; unsigned char *start; dwarf_vma address; @@ -43,8 +49,8 @@ struct dwarf_section_display { struct dwarf_section section; int (*display) (struct dwarf_section *, void *); + int *enabled; unsigned int relocate : 1; - unsigned int eh_frame : 1; }; enum dwarf_section_display_enum { @@ -81,6 +87,7 @@ typedef struct int *have_frame_base; unsigned int num_loc_offsets; unsigned int max_loc_offsets; + /* List of .debug_ranges offsets seen in this .debug_info. */ unsigned long *range_lists; unsigned int num_range_lists; unsigned int max_range_lists; @@ -91,8 +98,7 @@ extern dwarf_vma (*byte_get) (unsigned char *, int); extern dwarf_vma byte_get_little_endian (unsigned char *, int); extern dwarf_vma byte_get_big_endian (unsigned char *, int); -extern dwarf_vma eh_addr_size; -extern int is_relocatable; +extern int eh_addr_size; extern int do_debug_info; extern int do_debug_abbrevs; @@ -106,12 +112,18 @@ extern int do_debug_macinfo; extern int do_debug_str; extern int do_debug_loc; +extern void init_dwarf_regnames (unsigned int); + extern int load_debug_section (enum dwarf_section_display_enum, void *); extern void free_debug_section (enum dwarf_section_display_enum); extern void free_debug_memory (void); +extern void dwarf_select_sections_by_names (const char *names); +extern void dwarf_select_sections_by_letters (const char *letters); +extern void dwarf_select_sections_all (void); + void *cmalloc (size_t, size_t); void *xcmalloc (size_t, size_t); void *xcrealloc (void *, size_t, size_t); diff --git a/binutils/embedspu.sh b/binutils/embedspu.sh index d438ed9..8b19e76 100644 --- a/binutils/embedspu.sh +++ b/binutils/embedspu.sh @@ -1,7 +1,7 @@ #! /bin/sh # Embed an SPU ELF executable into a PowerPC object file. # -# Copyright 2006, 2007 Free Software Foundation, Inc. +# Copyright 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is part of GNU Binutils. # @@ -119,6 +119,7 @@ main () 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'` + has_ea=`${READELF} -S ${INFILE} | sed -n -e 's, *\[ *\([0-9]*\)\] *\._ea *PROGBITS.*,\1,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}` @@ -138,20 +139,20 @@ main () # 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 + # built in .data.spetoe. For _EAR_ 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} - <. This file is part of GNU Binutils. @@ -59,6 +59,16 @@ struct ieee_blockstack /* This structure holds information for a variable. */ +enum ieee_var_kind + { + IEEE_UNKNOWN, + IEEE_EXTERNAL, + IEEE_GLOBAL, + IEEE_STATIC, + IEEE_LOCAL, + IEEE_FUNCTION + }; + struct ieee_var { /* Start of name. */ @@ -70,15 +80,7 @@ struct ieee_var /* Slot if we make an indirect type. */ debug_type *pslot; /* Kind of variable or function. */ - enum - { - IEEE_UNKNOWN, - IEEE_EXTERNAL, - IEEE_GLOBAL, - IEEE_STATIC, - IEEE_LOCAL, - IEEE_FUNCTION - } kind; + enum ieee_var_kind kind; }; /* This structure holds all the variables. */ @@ -1069,6 +1071,16 @@ parse_ieee_bb (struct ieee_info *info, const bfd_byte **pp) break; } + if (! info->saw_filename) + { + namcopy = savestring (name, namlen); + if (namcopy == NULL) + return FALSE; + if (! debug_set_filename (info->dhandle, namcopy)) + return FALSE; + info->saw_filename = TRUE; + } + namcopy = savestring (name, namlen); if (namcopy == NULL) return FALSE; @@ -1786,6 +1798,7 @@ parse_ieee_ty (struct ieee_info *info, const bfd_byte **pp) break; case 'V': + case 'v': /* Void. This is not documented, but the MRI compiler emits it. */ type = debug_make_void_type (dhandle); break; @@ -2489,7 +2502,7 @@ ieee_read_cxx_misc (struct ieee_info *info, const bfd_byte **pp, case 'z': { - const char *name, *mangled, *class; + const char *name, *mangled, *cxx_class; unsigned long namlen, mangledlen, classlen; bfd_vma control; @@ -2497,7 +2510,7 @@ ieee_read_cxx_misc (struct ieee_info *info, const bfd_byte **pp, if (! ieee_require_atn65 (info, pp, &name, &namlen) || ! ieee_require_atn65 (info, pp, &mangled, &mangledlen) - || ! ieee_require_atn65 (info, pp, &class, &classlen) + || ! ieee_require_atn65 (info, pp, &cxx_class, &classlen) || ! ieee_require_asn (info, pp, &control)) return FALSE; @@ -2522,7 +2535,7 @@ ieee_read_cxx_class (struct ieee_info *info, const bfd_byte **pp, unsigned long count) { const bfd_byte *start; - bfd_vma class; + bfd_vma cxx_class; const char *tag; unsigned long taglen; struct ieee_tag *it; @@ -2547,7 +2560,7 @@ ieee_read_cxx_class (struct ieee_info *info, const bfd_byte **pp, start = *pp; - if (! ieee_require_asn (info, pp, &class)) + if (! ieee_require_asn (info, pp, &cxx_class)) return FALSE; --count; @@ -3169,7 +3182,7 @@ ieee_read_cxx_class (struct ieee_info *info, const bfd_byte **pp, it->slot. We update it->slot to automatically update all references to this struct. */ it->slot = debug_make_object_type (dhandle, - class != 'u', + cxx_class != 'u', debug_get_type_size (dhandle, it->slot), fields, baseclasses, dmethods, @@ -3292,7 +3305,7 @@ ieee_read_reference (struct ieee_info *info, const bfd_byte **pp) { const bfd_byte *start; bfd_vma flags; - const char *class, *name; + const char *cxx_class, *name; unsigned long classlen, namlen; debug_type *pslot; debug_type target; @@ -3306,7 +3319,7 @@ ieee_read_reference (struct ieee_info *info, const bfd_byte **pp) the spec. */ if (flags == 3) { - if (! ieee_require_atn65 (info, pp, &class, &classlen)) + if (! ieee_require_atn65 (info, pp, &cxx_class, &classlen)) return FALSE; } @@ -3396,8 +3409,8 @@ ieee_read_reference (struct ieee_info *info, const bfd_byte **pp) for (it = info->tags; it != NULL; it = it->next) { - if (it->name[0] == class[0] - && strncmp (it->name, class, classlen) == 0 + if (it->name[0] == cxx_class[0] + && strncmp (it->name, cxx_class, classlen) == 0 && strlen (it->name) == classlen) { if (it->fslots != NULL) @@ -4676,14 +4689,10 @@ write_ieee_debugging_info (bfd *abfd, void *dhandle) return TRUE; } err = NULL; - s = bfd_make_section (abfd, ".debug"); + s = bfd_make_section_with_flags (abfd, ".debug", + SEC_DEBUGGING | SEC_HAS_CONTENTS); if (s == NULL) err = "bfd_make_section"; - if (err == NULL) - { - if (! bfd_set_section_flags (abfd, s, SEC_DEBUGGING | SEC_HAS_CONTENTS)) - err = "bfd_set_section_flags"; - } if (err == NULL) { bfd_size_type size; @@ -5444,7 +5453,7 @@ ieee_pointer_type (void *p) if (! localp) { - m = ieee_get_modified_info (p, indx); + m = ieee_get_modified_info ((struct ieee_handle *) p, indx); if (m == NULL) return FALSE; @@ -5502,7 +5511,7 @@ ieee_function_type (void *p, int argcount, bfd_boolean varargs) m = NULL; if (argcount < 0 && ! localp) { - m = ieee_get_modified_info (p, retindx); + m = ieee_get_modified_info ((struct ieee_handle *) p, retindx); if (m == NULL) return FALSE; @@ -6192,7 +6201,7 @@ ieee_class_static_member (void *p, const char *name, const char *physname, /* Add a base class to a class. */ static bfd_boolean -ieee_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual, +ieee_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean is_virtual, enum debug_visibility visibility) { struct ieee_handle *info = (struct ieee_handle *) p; @@ -6218,7 +6227,7 @@ ieee_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual, class. The stabs debugging reader will create a field named _vb$CLASS for a virtual base class, so we just use that. FIXME: we should not depend upon a detail of stabs debugging. */ - if (virtual) + if (is_virtual) { fname = (char *) xmalloc (strlen (bname) + sizeof "_vb$"); sprintf (fname, "_vb$%s", bname); @@ -6286,7 +6295,7 @@ ieee_class_method_var (struct ieee_handle *info, const char *physname, { unsigned int flags; unsigned int nindx; - bfd_boolean virtual; + bfd_boolean is_virtual; /* We don't need the type of the method. An IEEE consumer which wants the type must track down the function by the physical name @@ -6316,18 +6325,18 @@ ieee_class_method_var (struct ieee_handle *info, const char *physname, nindx = info->type_stack->type.classdef->indx; - virtual = context || voffset > 0; + is_virtual = context || voffset > 0; if (! ieee_change_buffer (info, &info->type_stack->type.classdef->pmiscbuf) - || ! ieee_write_asn (info, nindx, virtual ? 'v' : 'm') + || ! ieee_write_asn (info, nindx, is_virtual ? 'v' : 'm') || ! ieee_write_asn (info, nindx, flags) || ! ieee_write_atn65 (info, nindx, info->type_stack->type.classdef->method) || ! ieee_write_atn65 (info, nindx, physname)) return FALSE; - if (virtual) + if (is_virtual) { if (voffset > info->type_stack->type.classdef->voffset) info->type_stack->type.classdef->voffset = voffset; diff --git a/binutils/makefile.vms b/binutils/makefile.vms new file mode 100644 index 0000000..d6f1857 --- /dev/null +++ b/binutils/makefile.vms @@ -0,0 +1,74 @@ +# +# Makefile for binutils under openVMS (Alpha and Vax) +# +# For use with gnu-make for vms +# +# Created by Klaus K"ampf, kkaempf@rmi.de +# +# + +ifeq ($(CC),gcc) +DEFS= +CFLAGS=/include=([],[-.include],[-.bfd])$(DEFS) +LIBS=,gnu_cc_library:libgcc/lib,sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj +else +DEFS= +OPT=/noopt/debug +CFLAGS=$(OPT)/include=([],"../include",[-.bfd])$(DEFS)\ + /name=(as_is,shortened)\ + /prefix=(all,except=("getopt","optarg","optopt","optind","opterr")) +endif + +LIBBFD = [-.bfd]libbfd.olb/lib +LIBBFD_DEP = [-.bfd]libbfd.olb +LIBIBERTY_DEP = [-.libiberty]libiberty.olb +LIBIBERTY = [-.libiberty]libiberty.olb/lib +OPCODES_DEP = [-.opcodes]libopcodes.olb +OPCODES = [-.opcodes]libopcodes.olb/lib + +DEBUG_OBJS = rddbg.obj,debug.obj,stabs.obj,ieee.obj,rdcoff.obj,dwarf.obj + +BULIBS = bucomm.obj,version.obj,filemode.obj + +ADDL_DEPS = $(BULIBS),$(LIBBFD_DEP),$(LIBIBERTY_DEP) +ADDL_LIBS = $(BULIBS),$(LIBBFD),$(LIBIBERTY) + +SIZEOBJS = $(ADDL_DEPS),size.obj + +STRINGSOBJS = $(ADDL_DEPS),strings.obj + +NMOBJS = $(ADDL_DEPS),nm.obj + +ADDR2LINEOBJS = $(ADDL_DEPS),addr2line.obj + +OBJDUMPOBJS = objdump.obj,prdbg.obj,$(DEBUG_OBJS),$(ADDL_DEPS),$(OPCODES_DEP) + +all: config.h size.exe strings.exe objdump.exe nm.exe addr2line.exe + +size.exe: $(SIZEOBJS) + link/exe=$@ size.obj,$(ADDL_LIBS) + +strings.exe: $(STRINGSOBJS) + link/exe=$@ strings.obj,$(ADDL_LIBS) + +nm.exe: $(NMOBJS) + link/exe=$@ nm.obj,$(ADDL_LIBS) + +addr2line.exe: $(ADDR2LINEOBJS) + link/exe=$@ addr2line.obj,$(ADDL_LIBS) + +objdump.exe: $(OBJDUMPOBJS) + link/exe=$@ objdump.obj,prdbg.obj,$(DEBUG_OBJS),$(ADDL_LIBS),$(LIBBFD),$(OPCODES) + +config.h: + $$ @configure + $(MAKE) -f makefile.vms "CC=$(CC)" + +clean: + $$ purge + $(RM) *.obj; + $(RM) *.exe; + +distclean: clean + $(RM) config.h; + $(RM) makefile.vms; diff --git a/binutils/makefile.vms-in b/binutils/makefile.vms-in deleted file mode 100644 index a809d1b..0000000 --- a/binutils/makefile.vms-in +++ /dev/null @@ -1,98 +0,0 @@ -# -# Makefile for binutils under openVMS (Alpha and Vax) -# -# For use with gnu-make for vms -# -# Created by Klaus K"ampf, kkaempf@rmi.de -# -# - -# Distribution version, filled in by configure.com -VERSION=@VERSION@ - -ifeq ($(ARCH),ALPHA) -TARGET=""vms-alpha"" -else -TARGET=""vms-vax"" -endif - -ifeq ($(CC),gcc) -CFLAGS=/include=([],[-.include],[-.bfd])$(DEFS) -DEFS=/define=("TARGET=$(TARGET)") -LIBS=,gnu_cc_library:libgcc/lib,sys$$library:vaxcrtl.olb/lib,gnu_cc_library:crt0.obj -else -CFLAGS=/noopt/debug/include=([],[-.include],[-.bfd])$(DEFS)\ -/warnings=disable=(missingreturn,implicitfunc,longextern) -DEFS=/define=("TARGET=$(TARGET)","const=","unlink=remove") -LIBS=,sys$$library:vaxcrtl.olb/lib -endif - -BFDLIB = [-.bfd]libbfd.olb/lib -BFDLIB_DEP = [-.bfd]libbfd.olb -LIBIBERTY_DEP = [-.libiberty]libiberty.olb -LIBIBERTY = [-.libiberty]libiberty.olb/lib -OPCODES_DEP = [-.opcodes]libopcodes.olb -OPCODES = [-.opcodes]libopcodes.olb/lib - -DEBUG_OBJS = rddbg.obj,debug.obj,stabs.obj,ieee.obj,rdcoff.obj - -WRITE_DEBUG_OBJS = $(DEBUG_OBJS),wrstabs.obj - -BULIBS = []bucomm.obj,version.obj,filemode.obj - -ADDL_DEPS = $(BULIBS),$(BFDLIB_DEP),$(LIBIBERTY_DEP) -ADDL_LIBS = $(BULIBS),$(BFDLIB),$(LIBIBERTY) - -SIZEOBJS = $(ADDL_DEPS),size.obj - -STRINGSOBJS = $(ADDL_DEPS),strings.obj - -NMOBJS = $(ADDL_DEPS),nm.obj - -OBJDUMPOBJS = $(ADDL_DEPS),objdump.obj,prdbg.obj,$(DEBUG_OBJS),$(OPCODES_DEP) - -all: config.h size.exe strings.exe objdump.exe nm.exe - -size.exe: $(SIZEOBJS) - link/exe=$@ size.obj,$(ADDL_LIBS)$(LIBS) - -strings.exe: $(STRINGSOBJS) - link/exe=$@ strings.obj,$(ADDL_LIBS)$(LIBS) - -nm.exe: $(NMOBJS) - link/exe=$@ nm.obj,$(ADDL_LIBS)$(LIBS) - -objdump.exe: $(OBJDUMPOBJS) - link/exe=$@ objdump.obj,prdbg.obj,$(DEBUG_OBJS),$(BFDLIB),$(OPCODES),$(ADDL_LIBS)$(LIBS) - - -version.obj: version.c - $(CC) $(CFLAGS)/define=(VERSION="""$(VERSION)""") $< - -config.h: - $$ @configure - $(MAKE) -f makefile.vms "CC=$(CC)" - -[-.bfd]libbfd.olb: - $(CD) [-.bfd] - $(MAKE) -f makefile.vms "CC=$(CC)" - $(CD) [-.binutils] - -[-.libiberty]libiberty.olb: - $(CD) [-.libiberty] - $(MAKE) -f makefile.vms "CC=$(CC)" - $(CD) [-.binutils] - -[-.opcodes]libopcodes.olb: - $(CD) [-.opcodes] - $(MAKE) -f makefile.vms "CC=$(CC)" - $(CD) [-.binutils] - -clean: - $$ purge - $(RM) *.obj; - $(RM) *.exe; - -distclean: clean - $(RM) config.h; - $(RM) makefile.vms; diff --git a/binutils/mcparse.c b/binutils/mcparse.c index 979bf0f..2c936d8 100644 --- a/binutils/mcparse.c +++ b/binutils/mcparse.c @@ -181,7 +181,7 @@ typedef union YYSTYPE const mc_keyword *tok; mc_node *nod; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 186 "mcparse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -245,7 +245,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -766,7 +766,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ diff --git a/binutils/mcparse.h b/binutils/mcparse.h index 6a732f9..ea4bfe6 100644 --- a/binutils/mcparse.h +++ b/binutils/mcparse.h @@ -91,7 +91,7 @@ typedef union YYSTYPE const mc_keyword *tok; mc_node *nod; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 96 "mcparse.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/binutils/nlmconv.c b/binutils/nlmconv.c index 2fb74bf..c10eb12 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, 2006, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -395,9 +395,10 @@ main (int argc, char **argv) bss_sec = bfd_get_section_by_name (outbfd, NLM_UNINITIALIZED_DATA_NAME); if (bss_sec == NULL) { - bss_sec = bfd_make_section (outbfd, NLM_UNINITIALIZED_DATA_NAME); + bss_sec = bfd_make_section_with_flags (outbfd, + NLM_UNINITIALIZED_DATA_NAME, + SEC_ALLOC); if (bss_sec == NULL - || ! bfd_set_section_flags (outbfd, bss_sec, SEC_ALLOC) || ! bfd_set_section_alignment (outbfd, bss_sec, 1)) bfd_fatal (_("make .bss section")); } @@ -406,11 +407,10 @@ main (int argc, char **argv) so that programs which understand it can resurrect the original sections from the NLM. We will put a pointer to .nlmsections in the NLM header area. */ - secsec = bfd_make_section (outbfd, ".nlmsections"); + secsec = bfd_make_section_with_flags (outbfd, ".nlmsections", + SEC_HAS_CONTENTS); if (secsec == NULL) bfd_fatal (_("make .nlmsections section")); - if (! bfd_set_section_flags (outbfd, secsec, SEC_HAS_CONTENTS)) - bfd_fatal (_("set .nlmsections flags")); #ifdef NLMCONV_POWERPC /* For PowerPC NetWare we need to build stubs for calls to undefined @@ -476,23 +476,23 @@ main (int argc, char **argv) ++sym->name; else { - char *new; + char *new_name; - new = xmalloc (strlen (bfd_asymbol_name (sym)) + 1); - new[0] = outlead; - strcpy (new + 1, bfd_asymbol_name (sym) + 1); - sym->name = new; + new_name = xmalloc (strlen (bfd_asymbol_name (sym)) + 1); + new_name[0] = outlead; + strcpy (new_name + 1, bfd_asymbol_name (sym) + 1); + sym->name = new_name; } } } else { - char *new; + char *new_name; - new = xmalloc (strlen (bfd_asymbol_name (sym)) + 2); - new[0] = outlead; - strcpy (new + 1, bfd_asymbol_name (sym)); - sym->name = new; + new_name = xmalloc (strlen (bfd_asymbol_name (sym)) + 2); + new_name[0] = outlead; + strcpy (new_name + 1, bfd_asymbol_name (sym)); + sym->name = new_name; } } @@ -714,11 +714,10 @@ main (int argc, char **argv) else { custom_size = st.st_size; - custom_section = bfd_make_section (outbfd, ".nlmcustom"); + custom_section = bfd_make_section_with_flags (outbfd, ".nlmcustom", + SEC_HAS_CONTENTS); if (custom_section == NULL - || ! bfd_set_section_size (outbfd, custom_section, custom_size) - || ! bfd_set_section_flags (outbfd, custom_section, - SEC_HAS_CONTENTS)) + || ! bfd_set_section_size (outbfd, custom_section, custom_size)) bfd_fatal (_("custom section")); } } @@ -735,11 +734,10 @@ main (int argc, char **argv) else { help_size = st.st_size; - help_section = bfd_make_section (outbfd, ".nlmhelp"); + help_section = bfd_make_section_with_flags (outbfd, ".nlmhelp", + SEC_HAS_CONTENTS); if (help_section == NULL - || ! bfd_set_section_size (outbfd, help_section, help_size) - || ! bfd_set_section_flags (outbfd, help_section, - SEC_HAS_CONTENTS)) + || ! bfd_set_section_size (outbfd, help_section, help_size)) bfd_fatal (_("help section")); LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs"); } @@ -757,11 +755,11 @@ main (int argc, char **argv) else { message_size = st.st_size; - message_section = bfd_make_section (outbfd, ".nlmmessages"); + message_section = bfd_make_section_with_flags (outbfd, + ".nlmmessages", + SEC_HAS_CONTENTS); if (message_section == NULL - || ! bfd_set_section_size (outbfd, message_section, message_size) - || ! bfd_set_section_flags (outbfd, message_section, - SEC_HAS_CONTENTS)) + || ! bfd_set_section_size (outbfd, message_section, message_size)) bfd_fatal (_("message section")); LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs"); } @@ -773,11 +771,10 @@ main (int argc, char **argv) module_size = 0; for (l = modules; l != NULL; l = l->next) module_size += strlen (l->string) + 1; - module_section = bfd_make_section (outbfd, ".nlmmodules"); + module_section = bfd_make_section_with_flags (outbfd, ".nlmmodules", + SEC_HAS_CONTENTS); if (module_section == NULL - || ! bfd_set_section_size (outbfd, module_section, module_size) - || ! bfd_set_section_flags (outbfd, module_section, - SEC_HAS_CONTENTS)) + || ! bfd_set_section_size (outbfd, module_section, module_size)) bfd_fatal (_("module section")); } if (rpc_file != NULL) @@ -793,11 +790,10 @@ main (int argc, char **argv) else { rpc_size = st.st_size; - rpc_section = bfd_make_section (outbfd, ".nlmrpc"); + rpc_section = bfd_make_section_with_flags (outbfd, ".nlmrpc", + SEC_HAS_CONTENTS); if (rpc_section == NULL - || ! bfd_set_section_size (outbfd, rpc_section, rpc_size) - || ! bfd_set_section_flags (outbfd, rpc_section, - SEC_HAS_CONTENTS)) + || ! bfd_set_section_size (outbfd, rpc_section, rpc_size)) bfd_fatal (_("rpc section")); LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs"); } @@ -849,12 +845,12 @@ main (int argc, char **argv) if (shared_offset > (size_t) sharedhdr.publicsOffset) shared_offset = sharedhdr.publicsOffset; shared_size = st.st_size - shared_offset; - shared_section = bfd_make_section (outbfd, ".nlmshared"); + shared_section = bfd_make_section_with_flags (outbfd, + ".nlmshared", + SEC_HAS_CONTENTS); if (shared_section == NULL || ! bfd_set_section_size (outbfd, shared_section, - shared_size) - || ! bfd_set_section_flags (outbfd, shared_section, - SEC_HAS_CONTENTS)) + shared_size)) bfd_fatal (_("shared section")); LITMEMCPY (nlm_extended_header (outbfd)->stamp, "MeSsAgEs"); } @@ -1701,13 +1697,12 @@ powerpc_build_stubs (bfd *inbfd, bfd *outbfd ATTRIBUTE_UNUSED, /* Make a section to hold stubs. We don't set SEC_HAS_CONTENTS for the section to prevent copy_sections from reading from it. */ - stub_sec = bfd_make_section (inbfd, ".stubs"); + stub_sec = bfd_make_section_with_flags (inbfd, ".stubs", + (SEC_CODE + | SEC_RELOC + | SEC_ALLOC + | SEC_LOAD)); if (stub_sec == (asection *) NULL - || ! bfd_set_section_flags (inbfd, stub_sec, - (SEC_CODE - | SEC_RELOC - | SEC_ALLOC - | SEC_LOAD)) || ! bfd_set_section_alignment (inbfd, stub_sec, 2)) bfd_fatal (".stubs"); @@ -1715,14 +1710,13 @@ powerpc_build_stubs (bfd *inbfd, bfd *outbfd ATTRIBUTE_UNUSED, got_sec = bfd_get_section_by_name (inbfd, ".got"); if (got_sec == (asection *) NULL) { - got_sec = bfd_make_section (inbfd, ".got"); + got_sec = bfd_make_section_with_flags (inbfd, ".got", + (SEC_DATA + | SEC_RELOC + | SEC_ALLOC + | SEC_LOAD + | SEC_HAS_CONTENTS)); if (got_sec == (asection *) NULL - || ! bfd_set_section_flags (inbfd, got_sec, - (SEC_DATA - | SEC_RELOC - | SEC_ALLOC - | SEC_LOAD - | SEC_HAS_CONTENTS)) || ! bfd_set_section_alignment (inbfd, got_sec, 2)) bfd_fatal (".got"); } diff --git a/binutils/nlmconv.h b/binutils/nlmconv.h index 2762218..7ab2dd3 100644 --- a/binutils/nlmconv.h +++ b/binutils/nlmconv.h @@ -1,5 +1,5 @@ /* nlmconv.h -- header file for NLM conversion program - Copyright 1993, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 1993, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/nlmheader.c b/binutils/nlmheader.c index 6bbc63c..34956d7 100644 --- a/binutils/nlmheader.c +++ b/binutils/nlmheader.c @@ -146,7 +146,7 @@ /* 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, 2007 + Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -281,7 +281,7 @@ typedef union YYSTYPE char *string; struct string_list *list; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 286 "nlmheader.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -345,7 +345,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -819,7 +819,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ diff --git a/binutils/nlmheader.h b/binutils/nlmheader.h index 4a5eee8..fe2e40b 100644 --- a/binutils/nlmheader.h +++ b/binutils/nlmheader.h @@ -123,7 +123,7 @@ typedef union YYSTYPE char *string; struct string_list *list; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 128 "nlmheader.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/binutils/nlmheader.y b/binutils/nlmheader.y index d68443e..f42ae90 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, 2007 + Copyright 1993, 1994, 1995, 1997, 1998, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GNU Binutils. diff --git a/binutils/nm.c b/binutils/nm.c index d5f18cd..c838b0a 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, 2007 + 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -31,6 +31,7 @@ #include "elf-bfd.h" #include "elf/common.h" #include "bucomm.h" +#include "plugin.h" /* When sorting by size, we use this structure to hold the size and a pointer to the minisymbol. */ @@ -160,7 +161,11 @@ static int filename_per_symbol = 0; /* Once per symbol, at start of line. */ /* Print formats for printing a symbol value. */ static char value_format_32bit[] = "%08lx"; +#if BFD_HOST_64BIT_LONG static char value_format_64bit[] = "%016lx"; +#elif BFD_HOST_64BIT_LONG_LONG +static char value_format_64bit[] = "%016llx"; +#endif static int print_width = 0; static int print_radix = 16; /* Print formats for printing stab info. */ @@ -174,6 +179,7 @@ static bfd *lineno_cache_bfd; static bfd *lineno_cache_rel_bfd; #define OPTION_TARGET 200 +#define OPTION_PLUGIN 201 static struct option long_options[] = { @@ -188,6 +194,7 @@ static struct option long_options[] = {"no-demangle", no_argument, &do_demangle, 0}, {"no-sort", no_argument, &no_sort, 1}, {"numeric-sort", no_argument, &sort_numerically, 1}, + {"plugin", required_argument, 0, OPTION_PLUGIN}, {"portability", no_argument, 0, 'P'}, {"print-armap", no_argument, &print_armap, 1}, {"print-file-name", no_argument, 0, 'o'}, @@ -233,8 +240,13 @@ usage (FILE *stream, int status) -o Same as -A\n\ -p, --no-sort Do not sort the symbols\n\ -P, --portability Same as --format=posix\n\ - -r, --reverse-sort Reverse the sense of the sort\n\ - -S, --print-size Print size of defined symbols\n\ + -r, --reverse-sort Reverse the sense of the sort\n")); +#if BFD_SUPPORTS_PLUGINS + fprintf (stream, _("\ + --plugin NAME Load the specified plugin\n")); +#endif + fprintf (stream, _("\ + -S, --print-size Print size of defined symbols\n \ -s, --print-armap Include index for symbols from archive members\n\ --size-sort Sort symbols by size\n\ --special-syms Include special symbols in the output\n\ @@ -269,7 +281,11 @@ set_print_radix (char *radix) else print_radix = 8; value_format_32bit[4] = *radix; +#if BFD_HOST_64BIT_LONG value_format_64bit[5] = *radix; +#elif BFD_HOST_64BIT_LONG_LONG + value_format_64bit[6] = *radix; +#endif other_format[3] = desc_format[3] = *radix; break; default: @@ -441,7 +457,8 @@ filter_symbols (bfd *abfd, bfd_boolean dynamic, void *minisyms, if (keep) { - memcpy (to, from, size); + if (to != from) + memcpy (to, from, size); to += size; } } @@ -655,7 +672,7 @@ sort_symbols_by_size (bfd *abfd, bfd_boolean dynamic, void *minisyms, /* We are going to return a special set of symbols and sizes to print. */ - symsizes = xmalloc (symcount * sizeof (struct size_sym)); + symsizes = (struct size_sym *) xmalloc (symcount * sizeof (struct size_sym)); *symsizesp = symsizes; /* Note that filter_symbols has already removed all absolute and @@ -756,7 +773,7 @@ get_relocs (bfd *abfd, asection *sec, void *dataarg) if (relsize < 0) bfd_fatal (bfd_get_filename (abfd)); - *data->relocs = xmalloc (relsize); + *data->relocs = (arelent **) xmalloc (relsize); *data->relcount = bfd_canonicalize_reloc (abfd, sec, *data->relocs, data->syms); if (*data->relcount < 0) @@ -811,7 +828,7 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd) symsize = bfd_get_symtab_upper_bound (abfd); if (symsize < 0) bfd_fatal (bfd_get_filename (abfd)); - syms = xmalloc (symsize); + syms = (asymbol **) xmalloc (symsize); symcount = bfd_canonicalize_symtab (abfd, syms); if (symcount < 0) bfd_fatal (bfd_get_filename (abfd)); @@ -848,9 +865,9 @@ print_symbol (bfd *abfd, asymbol *sym, bfd_vma ssize, bfd *archive_bfd) seccount = bfd_count_sections (abfd); - secs = xmalloc (seccount * sizeof *secs); - relocs = xmalloc (seccount * sizeof *relocs); - relcount = xmalloc (seccount * sizeof *relcount); + secs = (asection **) xmalloc (seccount * sizeof *secs); + relocs = (arelent ***) xmalloc (seccount * sizeof *relocs); + relcount = (long *) xmalloc (seccount * sizeof *relcount); info.secs = secs; info.relocs = relocs; @@ -1008,18 +1025,18 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) if (dynamic) { dyn_count = symcount; - dyn_syms = minisyms; + dyn_syms = (asymbol **) minisyms; } else { long storage = bfd_get_dynamic_symtab_upper_bound (abfd); static_count = symcount; - static_syms = minisyms; + static_syms = (asymbol **) minisyms; if (storage > 0) { - dyn_syms = xmalloc (storage); + dyn_syms = (asymbol **) xmalloc (storage); dyn_count = bfd_canonicalize_dynamic_symtab (abfd, dyn_syms); if (dyn_count < 0) bfd_fatal (bfd_get_filename (abfd)); @@ -1034,7 +1051,7 @@ display_rel_file (bfd *abfd, bfd *archive_bfd) long i; new_mini = xmalloc ((symcount + synth_count + 1) * sizeof (*symp)); - symp = new_mini; + symp = (asymbol **) new_mini; memcpy (symp, minisyms, symcount * sizeof (*symp)); symp += symcount; for (i = 0; i < synth_count; i++) @@ -1341,7 +1358,7 @@ print_value (bfd *abfd ATTRIBUTE_UNUSED, bfd_vma val) break; case 64: -#if BFD_HOST_64BIT_LONG +#if BFD_HOST_64BIT_LONG || BFD_HOST_64BIT_LONG_LONG printf (value_format_64bit, val); #else /* We have a 64 bit value to print, but the host is only 32 bit. */ @@ -1500,6 +1517,9 @@ main (int argc, char **argv) program_name = *argv; xmalloc_set_program_name (program_name); +#if BFD_SUPPORTS_PLUGINS + bfd_plugin_set_program_name (program_name); +#endif START_PROGRESS (program_name, 0); @@ -1599,6 +1619,14 @@ main (int argc, char **argv) target = optarg; break; + case OPTION_PLUGIN: /* --plugin */ +#if BFD_SUPPORTS_PLUGINS + bfd_plugin_set_plugin (optarg); +#else + fatal (_("sorry - this program has been built without plugin support\n")); +#endif + break; + case 0: /* A long option that just sets a flag. */ break; diff --git a/binutils/objcopy.c b/binutils/objcopy.c index e577dd3..2048827 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, 2007 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -32,16 +32,29 @@ #include "elf-bfd.h" #include #include "libbfd.h" - -/* A list of symbols to explicitly strip out, or to keep. A linked - list is good enough for a small number from the command line, but - this will slow things down a lot if many symbols are being - deleted. */ - -struct symlist +#include "coff/internal.h" +#include "libcoff.h" + +/* FIXME: See bfd/peXXigen.c for why we include an architecture specific + header in generic PE code. */ +#include "coff/i386.h" +#include "coff/pe.h" + +static bfd_vma pe_file_alignment = (bfd_vma) -1; +static bfd_vma pe_heap_commit = (bfd_vma) -1; +static bfd_vma pe_heap_reserve = (bfd_vma) -1; +static bfd_vma pe_image_base = (bfd_vma) -1; +static bfd_vma pe_section_alignment = (bfd_vma) -1; +static bfd_vma pe_stack_commit = (bfd_vma) -1; +static bfd_vma pe_stack_reserve = (bfd_vma) -1; +static short pe_subsystem = -1; +static short pe_major_subsystem_version = -1; +static short pe_minor_subsystem_version = -1; + +struct is_specified_symbol_predicate_data { - const char *name; - struct symlist *next; + const char *name; + bfd_boolean found; }; /* A list to support redefine_sym. */ @@ -64,8 +77,6 @@ section_rename; /* List of sections to be renamed. */ static section_rename *section_rename_list; -#define RETURN_NONFATAL(s) {bfd_nonfatal (s); status = 1; return;} - static asymbol **isympp = NULL; /* Input symbols. */ static asymbol **osympp = NULL; /* Output symbols that survive stripping. */ @@ -196,13 +207,13 @@ 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; -static struct symlist *strip_unneeded_list = NULL; -static struct symlist *keep_specific_list = NULL; -static struct symlist *localize_specific_list = NULL; -static struct symlist *globalize_specific_list = NULL; -static struct symlist *keepglobal_specific_list = NULL; -static struct symlist *weaken_specific_list = NULL; +static htab_t strip_specific_htab = NULL; +static htab_t strip_unneeded_htab = NULL; +static htab_t keep_specific_htab = NULL; +static htab_t localize_specific_htab = NULL; +static htab_t globalize_specific_htab = NULL; +static htab_t keepglobal_specific_htab = NULL; +static htab_t weaken_specific_htab = NULL; static struct redefine_node *redefine_sym_list = NULL; /* If this is TRUE, we weaken global symbols (set BSF_WEAK). */ @@ -223,6 +234,18 @@ static bfd_boolean extract_symbol = FALSE; of bytes within each output section. */ static int reverse_bytes = 0; +/* For Coff objects, we may want to allow or disallow long section names, + or preserve them where found in the inputs. Debug info relies on them. */ +enum long_section_name_handling + { + DISABLE, + ENABLE, + KEEP + }; + +/* The default long section handling mode is to preserve them. + This is also the only behaviour for 'strip'. */ +static enum long_section_name_handling long_section_names = KEEP; /* 150 isn't special; it's just an arbitrary non-ASCII char value. */ enum command_line_switch @@ -254,6 +277,7 @@ enum command_line_switch OPTION_KEEP_SYMBOLS, OPTION_LOCALIZE_HIDDEN, OPTION_LOCALIZE_SYMBOLS, + OPTION_LONG_SECTION_NAMES, OPTION_GLOBALIZE_SYMBOL, OPTION_GLOBALIZE_SYMBOLS, OPTION_KEEPGLOBAL_SYMBOLS, @@ -272,7 +296,13 @@ enum command_line_switch OPTION_PURE, OPTION_IMPURE, OPTION_EXTRACT_SYMBOL, - OPTION_REVERSE_BYTES + OPTION_REVERSE_BYTES, + OPTION_FILE_ALIGNMENT, + OPTION_HEAP, + OPTION_IMAGE_BASE, + OPTION_SECTION_ALIGNMENT, + OPTION_STACK, + OPTION_SUBSYSTEM }; /* Options to handle if running as "strip". */ @@ -347,6 +377,7 @@ static struct option copy_options[] = {"localize-hidden", no_argument, 0, OPTION_LOCALIZE_HIDDEN}, {"localize-symbol", required_argument, 0, 'L'}, {"localize-symbols", required_argument, 0, OPTION_LOCALIZE_SYMBOLS}, + {"long-section-names", required_argument, 0, OPTION_LONG_SECTION_NAMES}, {"no-adjust-warnings", no_argument, 0, OPTION_NO_CHANGE_WARNINGS}, {"no-change-warnings", no_argument, 0, OPTION_NO_CHANGE_WARNINGS}, {"only-keep-debug", no_argument, 0, OPTION_ONLY_KEEP_DEBUG}, @@ -385,6 +416,12 @@ static struct option copy_options[] = {"weaken-symbols", required_argument, 0, OPTION_WEAKEN_SYMBOLS}, {"wildcard", no_argument, 0, 'w'}, {"writable-text", no_argument, 0, OPTION_WRITABLE_TEXT}, + {"file-alignment", required_argument, 0, OPTION_FILE_ALIGNMENT}, + {"heap", required_argument, 0, OPTION_HEAP}, + {"image-base", required_argument, 0 , OPTION_IMAGE_BASE}, + {"section-alignment", required_argument, 0, OPTION_SECTION_ALIGNMENT}, + {"stack", required_argument, 0, OPTION_STACK}, + {"subsystem", required_argument, 0, OPTION_SUBSYSTEM}, {0, no_argument, 0, 0} }; @@ -477,6 +514,8 @@ copy_usage (FILE *stream, int exit_status) Set section 's properties to \n\ --add-section = Add section found in to output\n\ --rename-section =[,] Rename section to \n\ + --long-section-names {enable|disable|keep}\n\ + Handle long section names in Coff objects.\n\ --change-leading-char Force output format's leading character style\n\ --remove-leading-char Remove leading character from global symbols\n\ --reverse-bytes= Reverse bytes at a time, in output sections with content\n\ @@ -504,6 +543,15 @@ copy_usage (FILE *stream, int exit_status) --prefix-alloc-sections \n\ Add to start of every allocatable\n\ section name\n\ + --file-alignment Set PE file alignment to \n\ + --heap [,] Set PE reserve/commit heap to /\n\ + \n\ + --image-base

Set PE image base to
\n\ + --section-alignment Set PE section alignment to \n\ + --stack [,] Set PE reserve/commit stack to /\n\ + \n\ + --subsystem [:]\n\ + Set PE subsystem to [& ]\n]\ -v --verbose List all object files modified\n\ @ Read options from \n\ -V --version Display this program's version number\n\ @@ -592,7 +640,7 @@ parse_flags (const char *s) { char *copy; - copy = xmalloc (len + 1); + copy = (char *) xmalloc (len + 1); strncpy (copy, s, len); copy[len] = '\0'; non_fatal (_("unrecognized section flag `%s'"), copy); @@ -621,7 +669,7 @@ find_section_list (const char *name, bfd_boolean add) if (! add) return NULL; - p = xmalloc (sizeof (struct section_list)); + p = (struct section_list *) xmalloc (sizeof (struct section_list)); p->name = name; p->used = FALSE; p->remove = FALSE; @@ -639,17 +687,38 @@ find_section_list (const char *name, bfd_boolean add) return p; } -/* Add a symbol to strip_specific_list. */ +/* There is htab_hash_string but no htab_eq_string. Makes sense. */ + +static int +eq_string (const void *s1, const void *s2) +{ + return strcmp ((const char *) s1, (const char *) s2) == 0; +} + +static htab_t +create_symbol_htab (void) +{ + return htab_create_alloc (16, htab_hash_string, eq_string, NULL, xcalloc, free); +} static void -add_specific_symbol (const char *name, struct symlist **list) +create_symbol_htabs (void) { - struct symlist *tmp_list; + strip_specific_htab = create_symbol_htab (); + strip_unneeded_htab = create_symbol_htab (); + keep_specific_htab = create_symbol_htab (); + localize_specific_htab = create_symbol_htab (); + globalize_specific_htab = create_symbol_htab (); + keepglobal_specific_htab = create_symbol_htab (); + weaken_specific_htab = create_symbol_htab (); +} + +/* Add a symbol to strip_specific_list. */ - tmp_list = xmalloc (sizeof (struct symlist)); - tmp_list->name = name; - tmp_list->next = *list; - *list = tmp_list; +static void +add_specific_symbol (const char *name, htab_t htab) +{ + *htab_find_slot (htab, name, INSERT) = (char *) name; } /* Add symbols listed in `filename' to strip_specific_list. */ @@ -658,7 +727,7 @@ add_specific_symbol (const char *name, struct symlist **list) #define IS_LINE_TERMINATOR(c) ((c) == '\n' || (c) == '\r' || (c) == '\0') static void -add_specific_symbols (const char *filename, struct symlist **list) +add_specific_symbols (const char *filename, htab_t htab) { off_t size; FILE * f; @@ -673,7 +742,7 @@ add_specific_symbols (const char *filename, struct symlist **list) return; } - buffer = xmalloc (size + 2); + buffer = (char *) xmalloc (size + 2); f = fopen (filename, FOPEN_RT); if (f == NULL) fatal (_("cannot open '%s': %s"), filename, strerror (errno)); @@ -759,7 +828,7 @@ add_specific_symbols (const char *filename, struct symlist **list) * name_end = '\0'; if (name_end > name) - add_specific_symbol (name, list); + add_specific_symbol (name, htab); /* Advance line pointer to end of line. The 'eol ++' in the for loop above will then advance us to the start of the next line. */ @@ -768,36 +837,55 @@ add_specific_symbols (const char *filename, struct symlist **list) } } -/* See whether a symbol should be stripped or kept based on - strip_specific_list and keep_symbols. */ +/* See whether a symbol should be stripped or kept + based on strip_specific_list and keep_symbols. */ -static bfd_boolean -is_specified_symbol (const char *name, struct symlist *list) +static int +is_specified_symbol_predicate (void **slot, void *data) { - struct symlist *tmp_list; + struct is_specified_symbol_predicate_data *d = + (struct is_specified_symbol_predicate_data *) data; + const char *slot_name = (char *) *slot; - if (wildcard) + if (*slot_name != '!') { - for (tmp_list = list; tmp_list; tmp_list = tmp_list->next) - if (*(tmp_list->name) != '!') - { - if (!fnmatch (tmp_list->name, name, 0)) - return TRUE; - } - else - { - if (fnmatch (tmp_list->name + 1, name, 0)) - return TRUE; - } + if (! fnmatch (slot_name, d->name, 0)) + { + d->found = TRUE; + /* Stop traversal. */ + return 0; + } } else { - for (tmp_list = list; tmp_list; tmp_list = tmp_list->next) - if (strcmp (name, tmp_list->name) == 0) - return TRUE; + if (fnmatch (slot_name + 1, d->name, 0)) + { + d->found = TRUE; + /* Stop traversal. */ + return 0; + } } - return FALSE; + /* Continue traversal. */ + return 1; +} + +static bfd_boolean +is_specified_symbol (const char *name, htab_t htab) +{ + if (wildcard) + { + struct is_specified_symbol_predicate_data data; + + data.name = name; + data.found = FALSE; + + htab_traverse (htab, is_specified_symbol_predicate, &data); + + return data.found; + } + + return htab_find (htab, name) != NULL; } /* Return a pointer to the symbol used as a signature for GROUP. */ @@ -874,8 +962,8 @@ is_strip_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) else gname = sec->name; if ((strip_symbols == STRIP_ALL - && !is_specified_symbol (gname, keep_specific_list)) - || is_specified_symbol (gname, strip_specific_list)) + && !is_specified_symbol (gname, keep_specific_htab)) + || is_specified_symbol (gname, strip_specific_htab)) return TRUE; } @@ -969,8 +1057,8 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, { char *n, *ptr; - ptr = n = xmalloc (1 + strlen (prefix_symbols_string) - + strlen (name) + 1); + ptr = n = (char *) xmalloc (1 + strlen (prefix_symbols_string) + + strlen (name) + 1); if (add_leading_char) *ptr++ = bfd_get_symbol_leading_char (obfd); @@ -996,7 +1084,8 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, used_in_reloc = TRUE; } else if (relocatable /* Relocatable file. */ - && (flags & (BSF_GLOBAL | BSF_WEAK)) != 0) + && ((flags & (BSF_GLOBAL | BSF_WEAK)) != 0 + || bfd_is_com_section (bfd_get_section (sym)))) keep = TRUE; else if (bfd_decode_symclass (sym) == 'I') /* Global symbols in $idata sections need to be retained @@ -1023,7 +1112,7 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, && (discard_locals != LOCALS_START_L || ! bfd_is_local_label (abfd, sym)))); - if (keep && is_specified_symbol (name, strip_specific_list)) + if (keep && is_specified_symbol (name, strip_specific_htab)) { /* There are multiple ways to set 'keep' above, but if it was the relocatable symbol case, then that's an error. */ @@ -1038,12 +1127,12 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, if (keep && !(flags & BSF_KEEP) - && is_specified_symbol (name, strip_unneeded_list)) + && is_specified_symbol (name, strip_unneeded_htab)) keep = FALSE; if (!keep && ((keep_file_symbols && (flags & BSF_FILE)) - || is_specified_symbol (name, keep_specific_list))) + || is_specified_symbol (name, keep_specific_htab))) keep = TRUE; if (keep && is_strip_section (abfd, bfd_get_section (sym))) @@ -1052,7 +1141,7 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, if (keep) { if ((flags & BSF_GLOBAL) != 0 - && (weaken || is_specified_symbol (name, weaken_specific_list))) + && (weaken || is_specified_symbol (name, weaken_specific_htab))) { sym->flags &= ~ BSF_GLOBAL; sym->flags |= BSF_WEAK; @@ -1060,9 +1149,9 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, if (!undefined && (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, localize_specific_htab) + || (htab_elements (keepglobal_specific_htab) != 0 + && ! is_specified_symbol (name, keepglobal_specific_htab)) || (localize_hidden && is_hidden_symbol (sym)))) { sym->flags &= ~ (BSF_GLOBAL | BSF_WEAK); @@ -1071,7 +1160,7 @@ filter_symbols (bfd *abfd, bfd *obfd, asymbol **osyms, if (!undefined && (flags & BSF_LOCAL) - && is_specified_symbol (name, globalize_specific_list)) + && is_specified_symbol (name, globalize_specific_htab)) { sym->flags &= ~ BSF_LOCAL; sym->flags |= BSF_GLOBAL; @@ -1120,7 +1209,7 @@ redefine_list_append (const char *cause, const char *source, const char *target) cause, target); } - new_node = xmalloc (sizeof (struct redefine_node)); + new_node = (struct redefine_node *) xmalloc (sizeof (struct redefine_node)); new_node->source = strdup (source); new_node->target = strdup (target); @@ -1148,7 +1237,7 @@ add_redefine_syms_file (const char *filename) filename, strerror (errno)); bufsize = 100; - buf = xmalloc (bufsize); + buf = (char *) xmalloc (bufsize); lineno = 1; c = getc (file); @@ -1165,7 +1254,7 @@ add_redefine_syms_file (const char *filename) if (len >= bufsize) { bufsize *= 2; - buf = xrealloc (buf, bufsize); + buf = (char *) xrealloc (buf, bufsize); } c = getc (file); } @@ -1191,7 +1280,7 @@ add_redefine_syms_file (const char *filename) if (len >= bufsize) { bufsize *= 2; - buf = xrealloc (buf, bufsize); + buf = (char *) xrealloc (buf, bufsize); } c = getc (file); } @@ -1254,7 +1343,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd) if (bfd_stat_arch_elt (ibfd, &buf) != 0) { - bfd_nonfatal (bfd_get_archive_filename (ibfd)); + bfd_nonfatal_message (NULL, ibfd, NULL, NULL); return FALSE; } @@ -1276,7 +1365,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd) printf (_("copy from `%s' [unknown] to `%s' [unknown]\n"), bfd_get_archive_filename (ibfd), bfd_get_filename (obfd)); - cbuf = xmalloc (BUFSIZE); + cbuf = (char *) xmalloc (BUFSIZE); ncopied = 0; while (ncopied < size) { @@ -1287,7 +1376,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd) if (bfd_bread (cbuf, (bfd_size_type) tocopy, ibfd) != (bfd_size_type) tocopy) { - bfd_nonfatal (bfd_get_archive_filename (ibfd)); + bfd_nonfatal_message (NULL, ibfd, NULL, NULL); free (cbuf); return FALSE; } @@ -1295,7 +1384,7 @@ copy_unknown_object (bfd *ibfd, bfd *obfd) if (bfd_bwrite (cbuf, (bfd_size_type) tocopy, obfd) != (bfd_size_type) tocopy) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, NULL, NULL); free (cbuf); return FALSE; } @@ -1332,7 +1421,7 @@ copy_object (bfd *ibfd, bfd *obfd) if (!bfd_set_format (obfd, bfd_get_format (ibfd))) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, NULL, NULL); return FALSE; } @@ -1363,10 +1452,13 @@ copy_object (bfd *ibfd, bfd *obfd) flags &= ~bfd_flags_to_clear; flags &= bfd_applicable_file_flags (obfd); + if (strip_symbols == STRIP_ALL) + flags &= ~HAS_RELOC; + if (!bfd_set_start_address (obfd, start) || !bfd_set_file_flags (obfd, flags)) { - bfd_nonfatal (bfd_get_archive_filename (ibfd)); + bfd_nonfatal_message (NULL, ibfd, NULL, NULL); return FALSE; } } @@ -1390,10 +1482,67 @@ copy_object (bfd *ibfd, bfd *obfd) if (!bfd_set_format (obfd, bfd_get_format (ibfd))) { - bfd_nonfatal (bfd_get_archive_filename (ibfd)); + bfd_nonfatal_message (NULL, ibfd, NULL, NULL); return FALSE; } + if (bfd_get_flavour (obfd) == bfd_target_coff_flavour + && bfd_pei_p (obfd)) + { + /* Set up PE parameters. */ + pe_data_type *pe = pe_data (obfd); + + /* Copy PE parameters before changing them. */ + if (ibfd->xvec->flavour == bfd_target_coff_flavour + && bfd_pei_p (ibfd)) + pe->pe_opthdr = pe_data (ibfd)->pe_opthdr; + + if (pe_file_alignment != (bfd_vma) -1) + pe->pe_opthdr.FileAlignment = pe_file_alignment; + else + pe_file_alignment = PE_DEF_FILE_ALIGNMENT; + + if (pe_heap_commit != (bfd_vma) -1) + pe->pe_opthdr.SizeOfHeapCommit = pe_heap_commit; + + if (pe_heap_reserve != (bfd_vma) -1) + pe->pe_opthdr.SizeOfHeapCommit = pe_heap_reserve; + + if (pe_image_base != (bfd_vma) -1) + pe->pe_opthdr.ImageBase = pe_image_base; + + if (pe_section_alignment != (bfd_vma) -1) + pe->pe_opthdr.SectionAlignment = pe_section_alignment; + else + pe_section_alignment = PE_DEF_SECTION_ALIGNMENT; + + if (pe_stack_commit != (bfd_vma) -1) + pe->pe_opthdr.SizeOfStackCommit = pe_stack_commit; + + if (pe_stack_reserve != (bfd_vma) -1) + pe->pe_opthdr.SizeOfStackCommit = pe_stack_reserve; + + if (pe_subsystem != -1) + pe->pe_opthdr.Subsystem = pe_subsystem; + + if (pe_major_subsystem_version != -1) + pe->pe_opthdr.MajorSubsystemVersion = pe_major_subsystem_version; + + if (pe_minor_subsystem_version != -1) + pe->pe_opthdr.MinorSubsystemVersion = pe_minor_subsystem_version; + + if (pe_file_alignment > pe_section_alignment) + { + char file_alignment[20], section_alignment[20]; + + sprintf_vma (file_alignment, pe_file_alignment); + sprintf_vma (section_alignment, pe_section_alignment); + non_fatal (_("warning: file alignment (0x%s) > section alignment (0x%s)"), + + file_alignment, section_alignment); + } + } + if (isympp) free (isympp); @@ -1406,15 +1555,15 @@ copy_object (bfd *ibfd, bfd *obfd) symsize = bfd_get_symtab_upper_bound (ibfd); if (symsize < 0) { - bfd_nonfatal (bfd_get_archive_filename (ibfd)); + bfd_nonfatal_message (NULL, ibfd, NULL, NULL); return FALSE; } - osympp = isympp = xmalloc (symsize); + osympp = isympp = (asymbol **) xmalloc (symsize); symcount = bfd_canonicalize_symtab (ibfd, isympp); if (symcount < 0) { - bfd_nonfatal (bfd_get_filename (ibfd)); + bfd_nonfatal_message (NULL, ibfd, NULL, NULL); return FALSE; } @@ -1422,7 +1571,8 @@ copy_object (bfd *ibfd, bfd *obfd) any output is done. Thus, we traverse all sections multiple times. */ bfd_map_over_sections (ibfd, setup_section, obfd); - setup_bfd_headers (ibfd, obfd); + if (!extract_symbol) + setup_bfd_headers (ibfd, obfd); if (add_sections != NULL) { @@ -1445,7 +1595,8 @@ copy_object (bfd *ibfd, bfd *obfd) error codes, so check for the most likely user error first. */ if (bfd_get_section_by_name (obfd, padd->name)) { - non_fatal (_("can't add section '%s' - it already exists!"), padd->name); + bfd_nonfatal_message (NULL, obfd, NULL, + _("can't add section '%s'"), padd->name); return FALSE; } else @@ -1453,15 +1604,16 @@ copy_object (bfd *ibfd, bfd *obfd) padd->section = bfd_make_section_with_flags (obfd, padd->name, flags); if (padd->section == NULL) { - non_fatal (_("can't create section `%s': %s"), - padd->name, bfd_errmsg (bfd_get_error ())); + bfd_nonfatal_message (NULL, obfd, NULL, + _("can't create section `%s'"), + padd->name); return FALSE; } } if (! bfd_set_section_size (obfd, padd->section, padd->size)) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, padd->section, NULL); return FALSE; } @@ -1471,7 +1623,7 @@ copy_object (bfd *ibfd, bfd *obfd) if (! bfd_set_section_vma (obfd, padd->section, pset->vma_val)) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, padd->section, NULL); return FALSE; } @@ -1483,7 +1635,7 @@ copy_object (bfd *ibfd, bfd *obfd) (obfd, padd->section, bfd_section_alignment (obfd, padd->section))) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, padd->section, NULL); return FALSE; } } @@ -1498,7 +1650,9 @@ copy_object (bfd *ibfd, bfd *obfd) if (gnu_debuglink_section == NULL) { - bfd_nonfatal (gnu_debuglink_filename); + bfd_nonfatal_message (NULL, obfd, NULL, + _("cannot create debug link section `%s'"), + gnu_debuglink_filename); return FALSE; } @@ -1559,13 +1713,13 @@ copy_object (bfd *ibfd, bfd *obfd) We write out the gap contents below. */ c = bfd_count_sections (obfd); - osections = xmalloc (c * sizeof (asection *)); + osections = (asection **) xmalloc (c * sizeof (asection *)); set = osections; bfd_map_over_sections (obfd, get_sections, &set); qsort (osections, c, sizeof (asection *), compare_section_lma); - gaps = xmalloc (c * sizeof (bfd_size_type)); + gaps = (bfd_size_type *) xmalloc (c * sizeof (bfd_size_type)); memset (gaps, 0, c * sizeof (bfd_size_type)); if (gap_fill_set) @@ -1589,9 +1743,8 @@ copy_object (bfd *ibfd, bfd *obfd) if (! bfd_set_section_size (obfd, osections[i], size + (gap_stop - gap_start))) { - non_fatal (_("Can't fill gap after %s: %s"), - bfd_get_section_name (obfd, osections[i]), - bfd_errmsg (bfd_get_error ())); + bfd_nonfatal_message (NULL, obfd, osections[i], + _("Can't fill gap after section")); status = 1; break; } @@ -1614,9 +1767,8 @@ copy_object (bfd *ibfd, bfd *obfd) if (! bfd_set_section_size (obfd, osections[c - 1], pad_to - lma)) { - non_fatal (_("Can't add padding to %s: %s"), - bfd_get_section_name (obfd, osections[c - 1]), - bfd_errmsg (bfd_get_error ())); + bfd_nonfatal_message (NULL, obfd, osections[c - 1], + _("can't add padding")); status = 1; } else @@ -1633,7 +1785,7 @@ copy_object (bfd *ibfd, bfd *obfd) have been created, but before their contents are set. */ dhandle = NULL; if (convert_debugging) - dhandle = read_debugging_info (ibfd, isympp, symcount); + dhandle = read_debugging_info (ibfd, isympp, symcount, FALSE); if (strip_symbols == STRIP_DEBUG || strip_symbols == STRIP_ALL @@ -1641,12 +1793,12 @@ copy_object (bfd *ibfd, bfd *obfd) || strip_symbols == STRIP_NONDEBUG || discard_locals != LOCALS_UNDEF || localize_hidden - || strip_specific_list != NULL - || keep_specific_list != NULL - || localize_specific_list != NULL - || globalize_specific_list != NULL - || keepglobal_specific_list != NULL - || weaken_specific_list != NULL + || htab_elements (strip_specific_htab) != 0 + || htab_elements (keep_specific_htab) != 0 + || htab_elements (localize_specific_htab) != 0 + || htab_elements (globalize_specific_htab) != 0 + || htab_elements (keepglobal_specific_htab) != 0 + || htab_elements (weaken_specific_htab) != 0 || prefix_symbols_string || sections_removed || sections_copied @@ -1668,7 +1820,7 @@ copy_object (bfd *ibfd, bfd *obfd) bfd_map_over_sections (ibfd, mark_symbols_used_in_relocations, isympp); - osympp = xmalloc ((symcount + 1) * sizeof (asymbol *)); + osympp = (asymbol **) xmalloc ((symcount + 1) * sizeof (asymbol *)); symcount = filter_symbols (ibfd, obfd, osympp, isympp, symcount); } @@ -1695,7 +1847,7 @@ copy_object (bfd *ibfd, bfd *obfd) if (! bfd_set_section_contents (obfd, padd->section, padd->contents, 0, padd->size)) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, padd->section, NULL); return FALSE; } } @@ -1706,7 +1858,9 @@ copy_object (bfd *ibfd, bfd *obfd) if (! bfd_fill_in_gnu_debuglink_section (obfd, gnu_debuglink_section, gnu_debuglink_filename)) { - bfd_nonfatal (gnu_debuglink_filename); + bfd_nonfatal_message (NULL, obfd, NULL, + _("cannot fill debug link section `%s'"), + gnu_debuglink_filename); return FALSE; } } @@ -1719,7 +1873,7 @@ copy_object (bfd *ibfd, bfd *obfd) /* Fill in the gaps. */ if (max_gap > 8192) max_gap = 8192; - buf = xmalloc (max_gap); + buf = (bfd_byte *) xmalloc (max_gap); memset (buf, gap_fill, max_gap); c = bfd_count_sections (obfd); @@ -1745,7 +1899,7 @@ copy_object (bfd *ibfd, bfd *obfd) if (! bfd_set_section_contents (obfd, osections[i], buf, off, now)) { - bfd_nonfatal (bfd_get_filename (obfd)); + bfd_nonfatal_message (NULL, obfd, osections[i], NULL); return FALSE; } @@ -1767,9 +1921,8 @@ copy_object (bfd *ibfd, bfd *obfd) important for the ECOFF code at least. */ if (! bfd_copy_private_bfd_data (ibfd, obfd)) { - non_fatal (_("%s: error copying private BFD data: %s"), - bfd_get_filename (obfd), - bfd_errmsg (bfd_get_error ())); + bfd_nonfatal_message (NULL, obfd, NULL, + _("error copying private BFD data")); return FALSE; } @@ -1813,7 +1966,8 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, } *list, *l; bfd **ptr = &obfd->archive_head; bfd *this_element; - char * dir; + char *dir; + const char *filename; /* Make a temp directory to hold the contents. */ dir = make_tempdir (bfd_get_filename (obfd)); @@ -1822,13 +1976,18 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, strerror (errno)); obfd->has_armap = ibfd->has_armap; + obfd->is_thin_archive = ibfd->is_thin_archive; list = NULL; this_element = bfd_openr_next_archived_file (ibfd, NULL); if (!bfd_set_format (obfd, bfd_get_format (ibfd))) - RETURN_NONFATAL (bfd_get_filename (obfd)); + { + status = 1; + bfd_nonfatal_message (NULL, obfd, NULL, NULL); + return; + } while (!status && this_element != NULL) { @@ -1837,7 +1996,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, bfd *last_element; struct stat buf; int stat_status = 0; - bfd_boolean delete = TRUE; + bfd_boolean del = TRUE; /* Create an output file for this member. */ output_name = concat (dir, "/", @@ -1851,7 +2010,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, fatal (_("cannot create tempdir for archive copying (error: %s)"), strerror (errno)); - l = xmalloc (sizeof (struct name_list)); + l = (struct name_list *) xmalloc (sizeof (struct name_list)); l->name = output_name; l->next = list; l->obfd = NULL; @@ -1869,7 +2028,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, bfd_get_filename (this_element)); } - l = xmalloc (sizeof (struct name_list)); + l = (struct name_list *) xmalloc (sizeof (struct name_list)); l->name = output_name; l->next = list; l->obfd = NULL; @@ -1885,16 +2044,20 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, output_bfd = bfd_openw (output_name, bfd_get_target (this_element)); if (output_bfd == NULL) - RETURN_NONFATAL (output_name); + { + bfd_nonfatal_message (output_name, NULL, NULL, NULL); + status = 1; + return; + } - delete = ! copy_object (this_element, output_bfd); + del = ! copy_object (this_element, output_bfd); - if (! delete + if (! del || bfd_get_arch (this_element) != bfd_arch_unknown) { if (!bfd_close (output_bfd)) { - bfd_nonfatal (bfd_get_filename (output_bfd)); + bfd_nonfatal_message (output_name, NULL, NULL, NULL); /* Error in new object file. Don't change archive. */ status = 1; } @@ -1904,21 +2067,21 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target, } else { - non_fatal (_("Unable to recognise the format of the input file `%s'"), - bfd_get_archive_filename (this_element)); + bfd_nonfatal_message (NULL, this_element, NULL, + _("Unable to recognise the format of file")); output_bfd = bfd_openw (output_name, output_target); copy_unknown_element: - delete = !copy_unknown_object (this_element, output_bfd); + del = !copy_unknown_object (this_element, output_bfd); if (!bfd_close_all_done (output_bfd)) { - bfd_nonfatal (bfd_get_filename (output_bfd)); + bfd_nonfatal_message (output_name, NULL, NULL, NULL); /* Error in new object file. Don't change archive. */ status = 1; } } - if (delete) + if (del) { unlink (output_name); status = 1; @@ -1945,11 +2108,21 @@ copy_unknown_element: } *ptr = NULL; + filename = bfd_get_filename (obfd); if (!bfd_close (obfd)) - RETURN_NONFATAL (bfd_get_filename (obfd)); + { + status = 1; + bfd_nonfatal_message (filename, NULL, NULL, NULL); + return; + } + filename = bfd_get_filename (ibfd); if (!bfd_close (ibfd)) - RETURN_NONFATAL (bfd_get_filename (ibfd)); + { + status = 1; + bfd_nonfatal_message (filename, NULL, NULL, NULL); + return; + } /* Delete all the files that we opened. */ for (l = list; l != NULL; l = l->next) @@ -1965,6 +2138,19 @@ copy_unknown_element: rmdir (dir); } +static void +set_long_section_mode (bfd *output_bfd, bfd *input_bfd, enum long_section_name_handling style) +{ + /* This is only relevant to Coff targets. */ + if (bfd_get_flavour (output_bfd) == bfd_target_coff_flavour) + { + if (style == KEEP + && bfd_get_flavour (input_bfd) == bfd_target_coff_flavour) + style = bfd_coff_long_section_names (input_bfd) ? ENABLE : DISABLE; + bfd_coff_set_long_section_names (output_bfd, style != DISABLE); + } +} + /* The top-level control. */ static void @@ -1974,9 +2160,13 @@ copy_file (const char *input_filename, const char *output_filename, bfd *ibfd; char **obj_matching; char **core_matching; + off_t size = get_file_size (input_filename); - if (get_file_size (input_filename) < 1) + if (size < 1) { + if (size == 0) + non_fatal (_("error: the input file '%s' is empty"), + input_filename); status = 1; return; } @@ -1985,7 +2175,11 @@ copy_file (const char *input_filename, const char *output_filename, non-object file, failures are nonfatal. */ ibfd = bfd_openr (input_filename, input_target); if (ibfd == NULL) - RETURN_NONFATAL (input_filename); + { + bfd_nonfatal_message (input_filename, NULL, NULL, NULL); + status = 1; + return; + } if (bfd_check_format (ibfd, bfd_archive)) { @@ -2004,7 +2198,13 @@ copy_file (const char *input_filename, const char *output_filename, obfd = bfd_openw (output_filename, output_target); if (obfd == NULL) - RETURN_NONFATAL (output_filename); + { + bfd_nonfatal_message (output_filename, NULL, NULL, NULL); + status = 1; + return; + } + /* This is a no-op on non-Coff targets. */ + set_long_section_mode (obfd, ibfd, long_section_names); copy_archive (ibfd, obfd, output_target, force_output_target); } @@ -2020,17 +2220,30 @@ copy_file (const char *input_filename, const char *output_filename, obfd = bfd_openw (output_filename, output_target); if (obfd == NULL) - RETURN_NONFATAL (output_filename); + { + bfd_nonfatal_message (output_filename, NULL, NULL, NULL); + status = 1; + return; + } + /* This is a no-op on non-Coff targets. */ + set_long_section_mode (obfd, ibfd, long_section_names); if (! copy_object (ibfd, obfd)) status = 1; if (!bfd_close (obfd)) - RETURN_NONFATAL (output_filename); + { + status = 1; + bfd_nonfatal_message (output_filename, NULL, NULL, NULL); + return; + } if (!bfd_close (ibfd)) - RETURN_NONFATAL (input_filename); - + { + status = 1; + bfd_nonfatal_message (input_filename, NULL, NULL, NULL); + return; + } } else { @@ -2050,7 +2263,7 @@ copy_file (const char *input_filename, const char *output_filename, if (obj_error != core_error) bfd_set_error (obj_error); - bfd_nonfatal (input_filename); + bfd_nonfatal_message (input_filename, NULL, NULL, NULL); if (obj_error == bfd_error_file_ambiguously_recognized) { @@ -2087,7 +2300,7 @@ add_section_rename (const char * old_name, const char * new_name, fatal (_("Multiple renames of section %s"), old_name); } - rename = xmalloc (sizeof (* rename)); + rename = (section_rename *) xmalloc (sizeof (* rename)); rename->old_name = old_name; rename->new_name = new_name; @@ -2129,24 +2342,18 @@ find_section_rename (bfd * ibfd ATTRIBUTE_UNUSED, sec_ptr isection, static void setup_bfd_headers (bfd *ibfd, bfd *obfd) { - const char *err; - /* Allow the BFD backend to copy any private data it understands from the input section to the output section. */ if (! bfd_copy_private_header_data (ibfd, obfd)) { - err = _("private header data"); - goto loser; + status = 1; + bfd_nonfatal_message (NULL, ibfd, NULL, + _("error in private header data")); + return; } /* All went well. */ return; - -loser: - non_fatal (_("%s: error in %s: %s"), - bfd_get_filename (ibfd), - err, bfd_errmsg (bfd_get_error ())); - status = 1; } /* Create a section in OBFD with the same @@ -2155,7 +2362,7 @@ loser: static void setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) { - bfd *obfd = obfdarg; + bfd *obfd = (bfd *) obfdarg; struct section_list *p; sec_ptr osection; bfd_size_type size; @@ -2188,7 +2395,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) { char *n; - n = xmalloc (strlen (prefix) + strlen (name) + 1); + n = (char *) xmalloc (strlen (prefix) + strlen (name) + 1); strcpy (n, prefix); strcat (n, name); name = n; @@ -2219,7 +2426,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) if (osection == NULL) { - err = _("making"); + err = _("failed to create output section"); goto loser; } @@ -2233,7 +2440,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) size = 0; if (! bfd_set_section_size (obfd, osection, size)) { - err = _("size"); + err = _("failed to set size"); goto loser; } @@ -2245,9 +2452,9 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) else vma += change_section_address; - if (! bfd_set_section_vma (obfd, osection, extract_symbol ? 0 : vma)) + if (! bfd_set_section_vma (obfd, osection, vma)) { - err = _("vma"); + err = _("failed to set vma"); goto loser; } @@ -2264,7 +2471,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) else lma += change_section_address; - osection->lma = extract_symbol ? 0 : lma; + osection->lma = lma; /* FIXME: This is probably not enough. If we change the LMA we may have to recompute the header for the file as well. */ @@ -2272,7 +2479,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) osection, bfd_section_alignment (ibfd, isection))) { - err = _("alignment"); + err = _("failed to set alignment"); goto loser; } @@ -2283,37 +2490,39 @@ 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 = extract_symbol ? vma : 0; + isection->output_offset = 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; + if ((isection->flags & SEC_GROUP) != 0) + { + asymbol *gsym = group_signature (isection); + + if (gsym != NULL) + { + gsym->flags |= BSF_KEEP; + if (ibfd->xvec->flavour == bfd_target_elf_flavour) + elf_group_id (isection) = gsym; + } + } + /* Allow the BFD backend to copy any private data it understands from the input section to the output section. */ if (!bfd_copy_private_section_data (ibfd, isection, obfd, osection)) { - err = _("private data"); + err = _("failed to copy 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; loser: - non_fatal (_("%s: section `%s': error in %s: %s"), - bfd_get_filename (ibfd), - bfd_section_name (ibfd, isection), - err, bfd_errmsg (bfd_get_error ())); status = 1; + bfd_nonfatal_message (NULL, obfd, osection, err); } /* Copy the data of input section ISECTION of IBFD @@ -2323,7 +2532,7 @@ loser: static void copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) { - bfd *obfd = obfdarg; + bfd *obfd = (bfd *) obfdarg; struct section_list *p; arelent **relpp; long relcount; @@ -2350,6 +2559,9 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) if (size == 0 || osection == 0) return; + if (extract_symbol) + return; + p = find_section_list (bfd_get_section_name (ibfd, isection), FALSE); /* Core files do not need to be relocated. */ @@ -2365,7 +2577,11 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) if (relsize == -1 && bfd_get_error () == bfd_error_invalid_operation) relsize = 0; else - RETURN_NONFATAL (bfd_get_filename (ibfd)); + { + status = 1; + bfd_nonfatal_message (NULL, ibfd, isection, NULL); + return; + } } } @@ -2373,10 +2589,15 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) bfd_set_reloc (obfd, osection, NULL, 0); else { - relpp = xmalloc (relsize); + relpp = (arelent **) xmalloc (relsize); relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, isympp); if (relcount < 0) - RETURN_NONFATAL (bfd_get_filename (ibfd)); + { + status = 1; + bfd_nonfatal_message (NULL, ibfd, isection, + _("relocation count is negative")); + return; + } if (strip_symbols == STRIP_ALL) { @@ -2386,10 +2607,10 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) long temp_relcount = 0; long i; - temp_relpp = xmalloc (relsize); + temp_relpp = (arelent **) xmalloc (relsize); for (i = 0; i < relcount; i++) if (is_specified_symbol (bfd_asymbol_name (*relpp[i]->sym_ptr_ptr), - keep_specific_list)) + keep_specific_htab)) temp_relpp [temp_relcount++] = relpp [i]; relcount = temp_relcount; free (relpp); @@ -2401,16 +2622,17 @@ 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) { void *memhunk = xmalloc (size); if (!bfd_get_section_contents (ibfd, isection, memhunk, 0, size)) - RETURN_NONFATAL (bfd_get_filename (ibfd)); + { + status = 1; + bfd_nonfatal_message (NULL, ibfd, isection, NULL); + return; + } if (reverse_bytes) { @@ -2442,7 +2664,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) { /* Keep only every `copy_byte'th byte in MEMHUNK. */ char *from = (char *) memhunk + copy_byte; - char *to = memhunk; + char *to = (char *) memhunk; char *end = (char *) memhunk + size; for (; from < end; from += interleave) @@ -2453,8 +2675,11 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) } if (!bfd_set_section_contents (obfd, osection, memhunk, 0, size)) - RETURN_NONFATAL (bfd_get_filename (obfd)); - + { + status = 1; + bfd_nonfatal_message (NULL, obfd, osection, NULL); + return; + } free (memhunk); } else if (p != NULL && p->set_flags && (p->flags & SEC_HAS_CONTENTS) != 0) @@ -2469,7 +2694,11 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) memset (memhunk, 0, size); if (! bfd_set_section_contents (obfd, osection, memhunk, 0, size)) - RETURN_NONFATAL (bfd_get_filename (obfd)); + { + status = 1; + bfd_nonfatal_message (NULL, obfd, osection, NULL); + return; + } free (memhunk); } } @@ -2480,7 +2709,7 @@ copy_section (bfd *ibfd, sec_ptr isection, void *obfdarg) static void get_sections (bfd *obfd ATTRIBUTE_UNUSED, asection *osection, void *secppparg) { - asection ***secppp = secppparg; + asection ***secppp = (asection ***) secppparg; **secppp = osection; ++(*secppp); @@ -2493,8 +2722,8 @@ get_sections (bfd *obfd ATTRIBUTE_UNUSED, asection *osection, void *secppparg) static int compare_section_lma (const void *arg1, const void *arg2) { - const asection *const *sec1 = arg1; - const asection *const *sec2 = arg2; + const asection *const *sec1 = (const asection * const *) arg1; + const asection *const *sec2 = (const asection * const *) arg2; flagword flags1, flags2; /* Sort non loadable sections to the front. */ @@ -2537,7 +2766,7 @@ compare_section_lma (const void *arg1, const void *arg2) static void mark_symbols_used_in_relocations (bfd *ibfd, sec_ptr isection, void *symbolsarg) { - asymbol **symbols = symbolsarg; + asymbol **symbols = (asymbol **) symbolsarg; long relsize; arelent **relpp; long relcount, i; @@ -2558,7 +2787,7 @@ mark_symbols_used_in_relocations (bfd *ibfd, sec_ptr isection, void *symbolsarg) if (relsize == 0) return; - relpp = xmalloc (relsize); + relpp = (arelent **) xmalloc (relsize); relcount = bfd_canonicalize_reloc (ibfd, isection, relpp, symbols); if (relcount < 0) bfd_fatal (bfd_get_filename (ibfd)); @@ -2610,9 +2839,8 @@ write_debugging_info (bfd *obfd, void *dhandle, || ! bfd_set_section_alignment (obfd, stabsec, 2) || ! bfd_set_section_alignment (obfd, stabstrsec, 0)) { - non_fatal (_("%s: can't create debugging section: %s"), - bfd_get_filename (obfd), - bfd_errmsg (bfd_get_error ())); + bfd_nonfatal_message (NULL, obfd, NULL, + _("can't create debugging section")); return FALSE; } @@ -2624,17 +2852,17 @@ write_debugging_info (bfd *obfd, void *dhandle, || ! bfd_set_section_contents (obfd, stabstrsec, strings, 0, stringsize)) { - non_fatal (_("%s: can't set debugging section contents: %s"), - bfd_get_filename (obfd), - bfd_errmsg (bfd_get_error ())); + bfd_nonfatal_message (NULL, obfd, NULL, + _("can't set debugging section contents")); return FALSE; } return TRUE; } - non_fatal (_("%s: don't know how to write debugging information for %s"), - bfd_get_filename (obfd), bfd_get_target (obfd)); + bfd_nonfatal_message (NULL, obfd, NULL, + _("don't know how to write debugging information for %s"), + bfd_get_target (obfd)); return FALSE; } @@ -2681,10 +2909,10 @@ strip_main (int argc, char *argv[]) strip_symbols = STRIP_UNNEEDED; break; case 'K': - add_specific_symbol (optarg, &keep_specific_list); + add_specific_symbol (optarg, keep_specific_htab); break; case 'N': - add_specific_symbol (optarg, &strip_specific_list); + add_specific_symbol (optarg, strip_specific_htab); break; case 'o': output_file = optarg; @@ -2739,7 +2967,7 @@ strip_main (int argc, char *argv[]) /* Default is to strip all symbols. */ if (strip_symbols == STRIP_UNDEF && discard_locals == LOCALS_UNDEF - && strip_specific_list == NULL) + && htab_elements (strip_specific_htab) == 0) strip_symbols = STRIP_ALL; if (output_target == NULL) @@ -2774,8 +3002,8 @@ strip_main (int argc, char *argv[]) if (tmpname == NULL) { - non_fatal (_("could not create temporary file to hold stripped copy of '%s'"), - argv[i]); + bfd_nonfatal_message (argv[i], NULL, NULL, + _("could not create temporary file to hold stripped copy")); status = 1; continue; } @@ -2787,9 +3015,11 @@ strip_main (int argc, char *argv[]) if (preserve_dates) set_times (tmpname, &statbuf); if (output_file != tmpname) - smart_rename (tmpname, output_file ? output_file : argv[i], - preserve_dates); - status = hold_status; + status = (smart_rename (tmpname, + output_file ? output_file : argv[i], + preserve_dates) != 0); + if (status == 0) + status = hold_status; } else unlink_if_ordinary (tmpname); @@ -2800,6 +3030,117 @@ strip_main (int argc, char *argv[]) return status; } +/* Set up PE subsystem. */ + +static void +set_pe_subsystem (const char *s) +{ + const char *version, *subsystem; + size_t i; + static const struct + { + const char *name; + const char set_def; + const short value; + } + v[] = + { + { "native", 0, IMAGE_SUBSYSTEM_NATIVE }, + { "windows", 0, IMAGE_SUBSYSTEM_WINDOWS_GUI }, + { "console", 0, IMAGE_SUBSYSTEM_WINDOWS_CUI }, + { "posix", 0, IMAGE_SUBSYSTEM_POSIX_CUI }, + { "wince", 0, IMAGE_SUBSYSTEM_WINDOWS_CE_GUI }, + { "efi-app", 1, IMAGE_SUBSYSTEM_EFI_APPLICATION }, + { "efi-bsd", 1, IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER }, + { "efi-rtd", 1, IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER }, + { "sal-rtd", 1, IMAGE_SUBSYSTEM_SAL_RUNTIME_DRIVER }, + { "xbox", 0, IMAGE_SUBSYSTEM_XBOX } + }; + short value; + char *copy; + int set_def = -1; + + /* Check for the presence of a version number. */ + version = strchr (s, ':'); + if (version == NULL) + subsystem = s; + else + { + int len = version - s; + copy = xstrdup (s); + subsystem = copy; + copy[len] = '\0'; + version = copy + 1 + len; + pe_major_subsystem_version = strtoul (version, ©, 0); + if (*copy == '.') + pe_minor_subsystem_version = strtoul (copy + 1, ©, 0); + if (*copy != '\0') + non_fatal (_("%s: bad version in PE subsystem"), s); + } + + /* Check for numeric subsystem. */ + value = (short) strtol (subsystem, ©, 0); + if (*copy == '\0') + { + for (i = 0; i < ARRAY_SIZE (v); i++) + if (v[i].value == value) + { + pe_subsystem = value; + set_def = v[i].set_def; + break; + } + } + else + { + /* Search for subsystem by name. */ + for (i = 0; i < ARRAY_SIZE (v); i++) + if (strcmp (subsystem, v[i].name) == 0) + { + pe_subsystem = v[i].value; + set_def = v[i].set_def; + break; + } + } + + switch (set_def) + { + case -1: + fatal (_("unknown PE subsystem: %s"), s); + break; + case 0: + break; + default: + if (pe_file_alignment == (bfd_vma) -1) + pe_file_alignment = PE_DEF_FILE_ALIGNMENT; + if (pe_section_alignment == (bfd_vma) -1) + pe_section_alignment = PE_DEF_SECTION_ALIGNMENT; + break; + } +} + +/* Convert EFI target to PEI target. */ + +static void +convert_efi_target (char *efi) +{ + efi[0] = 'p'; + efi[1] = 'e'; + efi[2] = 'i'; + + if (strcmp (efi + 4, "ia32") == 0) + { + /* Change ia32 to i386. */ + efi[5]= '3'; + efi[6]= '8'; + efi[7]= '6'; + } + else if (strcmp (efi + 4, "x86_64") == 0) + { + /* Change x86_64 to x86-64. */ + efi[7] = '-'; + } +} + static int copy_main (int argc, char *argv[]) { @@ -2892,31 +3233,31 @@ copy_main (int argc, char *argv[]) break; case 'K': - add_specific_symbol (optarg, &keep_specific_list); + add_specific_symbol (optarg, keep_specific_htab); break; case 'N': - add_specific_symbol (optarg, &strip_specific_list); + add_specific_symbol (optarg, strip_specific_htab); break; case OPTION_STRIP_UNNEEDED_SYMBOL: - add_specific_symbol (optarg, &strip_unneeded_list); + add_specific_symbol (optarg, strip_unneeded_htab); break; case 'L': - add_specific_symbol (optarg, &localize_specific_list); + add_specific_symbol (optarg, localize_specific_htab); break; case OPTION_GLOBALIZE_SYMBOL: - add_specific_symbol (optarg, &globalize_specific_list); + add_specific_symbol (optarg, globalize_specific_htab); break; case 'G': - add_specific_symbol (optarg, &keepglobal_specific_list); + add_specific_symbol (optarg, keepglobal_specific_htab); break; case 'W': - add_specific_symbol (optarg, &weaken_specific_list); + add_specific_symbol (optarg, weaken_specific_htab); break; case 'p': @@ -2972,17 +3313,17 @@ copy_main (int argc, char *argv[]) break; } - pa = xmalloc (sizeof (struct section_add)); + pa = (struct section_add *) xmalloc (sizeof (struct section_add)); len = s - optarg; - name = xmalloc (len + 1); + name = (char *) xmalloc (len + 1); strncpy (name, optarg, len); name[len] = '\0'; pa->name = name; pa->filename = s + 1; pa->size = size; - pa->contents = xmalloc (size); + pa->contents = (bfd_byte *) xmalloc (size); f = fopen (pa->filename, FOPEN_RB); @@ -3042,7 +3383,7 @@ copy_main (int argc, char *argv[]) } len = s - optarg; - name = xmalloc (len + 1); + name = (char *) xmalloc (len + 1); strncpy (name, optarg, len); name[len] = '\0'; @@ -3140,13 +3481,13 @@ copy_main (int argc, char *argv[]) fatal (_("bad format for %s"), "--redefine-sym"); len = s - optarg; - source = xmalloc (len + 1); + source = (char *) xmalloc (len + 1); strncpy (source, optarg, len); source[len] = '\0'; nextarg = s + 1; len = strlen (nextarg); - target = xmalloc (len + 1); + target = (char *) xmalloc (len + 1); strcpy (target, nextarg); redefine_list_append ("--redefine-sym", source, target); @@ -3171,7 +3512,7 @@ copy_main (int argc, char *argv[]) fatal (_("bad format for %s"), "--set-section-flags"); len = s - optarg; - name = xmalloc (len + 1); + name = (char *) xmalloc (len + 1); strncpy (name, optarg, len); name[len] = '\0'; @@ -3198,7 +3539,7 @@ copy_main (int argc, char *argv[]) if (len == 0) fatal (_("bad format for %s"), "--rename-section"); - old_name = xmalloc (len + 1); + old_name = (char *) xmalloc (len + 1); strncpy (old_name, optarg, len); old_name[len] = 0; @@ -3218,7 +3559,7 @@ copy_main (int argc, char *argv[]) if (len == 0) fatal (_("bad format for %s"), "--rename-section"); - new_name = xmalloc (len + 1); + new_name = (char *) xmalloc (len + 1); strncpy (new_name, eq, len); new_name[len] = 0; @@ -3240,15 +3581,15 @@ copy_main (int argc, char *argv[]) break; case OPTION_STRIP_SYMBOLS: - add_specific_symbols (optarg, &strip_specific_list); + add_specific_symbols (optarg, strip_specific_htab); break; case OPTION_STRIP_UNNEEDED_SYMBOLS: - add_specific_symbols (optarg, &strip_unneeded_list); + add_specific_symbols (optarg, strip_unneeded_htab); break; case OPTION_KEEP_SYMBOLS: - add_specific_symbols (optarg, &keep_specific_list); + add_specific_symbols (optarg, keep_specific_htab); break; case OPTION_LOCALIZE_HIDDEN: @@ -3256,19 +3597,30 @@ copy_main (int argc, char *argv[]) break; case OPTION_LOCALIZE_SYMBOLS: - add_specific_symbols (optarg, &localize_specific_list); + add_specific_symbols (optarg, localize_specific_htab); + break; + + case OPTION_LONG_SECTION_NAMES: + if (!strcmp ("enable", optarg)) + long_section_names = ENABLE; + else if (!strcmp ("disable", optarg)) + long_section_names = DISABLE; + else if (!strcmp ("keep", optarg)) + long_section_names = KEEP; + else + fatal (_("unknown long section names option '%s'"), optarg); break; case OPTION_GLOBALIZE_SYMBOLS: - add_specific_symbols (optarg, &globalize_specific_list); + add_specific_symbols (optarg, globalize_specific_htab); break; case OPTION_KEEPGLOBAL_SYMBOLS: - add_specific_symbols (optarg, &keepglobal_specific_list); + add_specific_symbols (optarg, keepglobal_specific_htab); break; case OPTION_WEAKEN_SYMBOLS: - add_specific_symbols (optarg, &weaken_specific_list); + add_specific_symbols (optarg, weaken_specific_htab); break; case OPTION_ALT_MACH_CODE: @@ -3327,6 +3679,59 @@ copy_main (int argc, char *argv[]) break; } + case OPTION_FILE_ALIGNMENT: + pe_file_alignment = parse_vma (optarg, "--file-alignment"); + break; + + case OPTION_HEAP: + { + char *end; + pe_heap_reserve = strtoul (optarg, &end, 0); + if (end == optarg + || (*end != '.' && *end != '\0')) + non_fatal (_("%s: invalid reserve value for --heap"), + optarg); + else if (*end != '\0') + { + pe_heap_commit = strtoul (end + 1, &end, 0); + if (*end != '\0') + non_fatal (_("%s: invalid commit value for --heap"), + optarg); + } + } + break; + + case OPTION_IMAGE_BASE: + pe_image_base = parse_vma (optarg, "--image-base"); + break; + + case OPTION_SECTION_ALIGNMENT: + pe_section_alignment = parse_vma (optarg, + "--section-alignment"); + break; + + case OPTION_SUBSYSTEM: + set_pe_subsystem (optarg); + break; + + case OPTION_STACK: + { + char *end; + pe_stack_reserve = strtoul (optarg, &end, 0); + if (end == optarg + || (*end != '.' && *end != '\0')) + non_fatal (_("%s: invalid reserve value for --stack"), + optarg); + else if (*end != '\0') + { + pe_stack_commit = strtoul (end + 1, &end, 0); + if (*end != '\0') + non_fatal (_("%s: invalid commit value for --stack"), + optarg); + } + } + break; + case 0: /* We've been given a long option. */ break; @@ -3366,6 +3771,59 @@ copy_main (int argc, char *argv[]) if (output_target == NULL) output_target = input_target; + /* Convert input EFI target to PEI target. */ + if (input_target != NULL + && strncmp (input_target, "efi-", 4) == 0) + { + char *efi; + + efi = xstrdup (output_target + 4); + if (strncmp (efi, "bsdrv-", 6) == 0 + || strncmp (efi, "rtdrv-", 6) == 0) + efi += 2; + else if (strncmp (efi, "app-", 4) != 0) + fatal (_("unknown input EFI target: %s"), input_target); + + input_target = efi; + convert_efi_target (efi); + } + + /* Convert output EFI target to PEI target. */ + if (output_target != NULL + && strncmp (output_target, "efi-", 4) == 0) + { + char *efi; + + efi = xstrdup (output_target + 4); + if (strncmp (efi, "app-", 4) == 0) + { + if (pe_subsystem == -1) + pe_subsystem = IMAGE_SUBSYSTEM_EFI_APPLICATION; + } + else if (strncmp (efi, "bsdrv-", 6) == 0) + { + if (pe_subsystem == -1) + pe_subsystem = IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER; + efi += 2; + } + else if (strncmp (efi, "rtdrv-", 6) == 0) + { + if (pe_subsystem == -1) + pe_subsystem = IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER; + efi += 2; + } + else + fatal (_("unknown output EFI target: %s"), output_target); + + if (pe_file_alignment == (bfd_vma) -1) + pe_file_alignment = PE_DEF_FILE_ALIGNMENT; + if (pe_section_alignment == (bfd_vma) -1) + pe_section_alignment = PE_DEF_SECTION_ALIGNMENT; + + output_target = efi; + convert_efi_target (efi); + } + if (binary_architecture != NULL) { if (input_target && strcmp (input_target, "binary") == 0) @@ -3411,7 +3869,8 @@ copy_main (int argc, char *argv[]) if (preserve_dates) set_times (tmpname, &statbuf); if (tmpname != output_filename) - smart_rename (tmpname, input_filename, preserve_dates); + status = (smart_rename (tmpname, input_filename, + preserve_dates) != 0); } else unlink_if_ordinary (tmpname); @@ -3495,6 +3954,8 @@ main (int argc, char *argv[]) is_strip = (i >= 5 && FILENAME_CMP (program_name + i - 5, "strip") == 0); } + create_symbol_htabs (); + if (is_strip) strip_main (argc, argv); else diff --git a/binutils/objdump.c b/binutils/objdump.c index 03bc4d6..dd0d0ef 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, 2007 + 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -52,6 +52,7 @@ #include "sysdep.h" #include "bfd.h" +#include "elf-bfd.h" #include "progress.h" #include "bucomm.h" #include "dwarf.h" @@ -60,6 +61,7 @@ #include "dis-asm.h" #include "libiberty.h" #include "demangle.h" +#include "filenames.h" #include "debug.h" #include "budbg.h" @@ -102,6 +104,7 @@ static bfd_boolean disassemble_all; /* -D */ static int disassemble_zeroes; /* --disassemble-zeroes */ static bfd_boolean formats_info; /* -i */ static int wide_output; /* -w */ +static int insn_width; /* --insn-width */ static bfd_vma start_address = (bfd_vma) -1; /* --start-address */ static bfd_vma stop_address = (bfd_vma) -1; /* --stop-address */ static int dump_debugging; /* --debugging */ @@ -109,6 +112,10 @@ static int dump_debugging_tags; /* --debugging-tags */ static int dump_special_syms = 0; /* --special-syms */ static bfd_vma adjust_section_vma = 0; /* --adjust-vma */ static int file_start_context = 0; /* --file-start-context */ +static bfd_boolean display_file_offsets;/* -F */ +static const char *prefix; /* --prefix */ +static int prefix_strip; /* --prefix-strip */ +static size_t prefix_length; /* Pointer to an array of section names provided by one or more "-j secname" command line options. */ @@ -171,6 +178,8 @@ static bfd_size_type stab_size; static char *strtab; static bfd_size_type stabstr_size; + +static bfd_boolean is_relocatable = FALSE; static void usage (FILE *stream, int status) @@ -191,7 +200,9 @@ usage (FILE *stream, int status) -g, --debugging Display debug information in object file\n\ -e, --debugging-tags Display debug information using ctags style\n\ -G, --stabs Display (in raw form) any STABS info in the file\n\ - -W, --dwarf Display DWARF info in the file\n\ + -W[lLiaprmfFsoR] or\n\ + --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n\ + Display DWARF info in the file\n\ -t, --syms Display the contents of the symbol table(s)\n\ -T, --dynamic-syms Display the contents of the dynamic symbol table\n\ -r, --reloc Display the relocation entries in the file\n\ @@ -214,6 +225,7 @@ usage (FILE *stream, int status) --file-start-context Include context from start of file (with -S)\n\ -I, --include=DIR Add DIR to search list for source files\n\ -l, --line-numbers Include line numbers and filenames in output\n\ + -F, --file-offsets Include file offsets when displaying information\n\ -C, --demangle[=STYLE] Decode mangled/processed symbol names\n\ The STYLE, if specified, can be `auto', `gnu',\n\ `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n\ @@ -224,8 +236,11 @@ usage (FILE *stream, int status) --stop-address=ADDR Only process data whose address is <= ADDR\n\ --prefix-addresses Print complete address alongside disassembly\n\ --[no-]show-raw-insn Display hex alongside symbolic disassembly\n\ + --insn-width=WIDTH Display WIDTH bytes on a signle line for -d\n\ --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\ --special-syms Include special symbols in symbol dumps\n\ + --prefix=PREFIX Add PREFIX to absolute paths for -S\n\ + --prefix-strip=LEVEL Strip initial directory names for -S\n\ \n")); list_supported_targets (program_name, stream); list_supported_architectures (program_name, stream); @@ -243,6 +258,10 @@ enum option_values OPTION_ENDIAN=150, OPTION_START_ADDRESS, OPTION_STOP_ADDRESS, + OPTION_DWARF, + OPTION_PREFIX, + OPTION_PREFIX_STRIP, + OPTION_INSN_WIDTH, OPTION_ADJUST_VMA }; @@ -264,6 +283,7 @@ static struct option long_options[]= {"dynamic-syms", no_argument, NULL, 'T'}, {"endian", required_argument, NULL, OPTION_ENDIAN}, {"file-headers", no_argument, NULL, 'f'}, + {"file-offsets", no_argument, NULL, 'F'}, {"file-start-context", no_argument, &file_start_context, 1}, {"full-contents", no_argument, NULL, 's'}, {"headers", no_argument, NULL, 'h'}, @@ -279,7 +299,7 @@ static struct option long_options[]= {"source", no_argument, NULL, 'S'}, {"special-syms", no_argument, &dump_special_syms, 1}, {"include", required_argument, NULL, 'I'}, - {"dwarf", no_argument, NULL, 'W'}, + {"dwarf", optional_argument, NULL, OPTION_DWARF}, {"stabs", no_argument, NULL, 'G'}, {"start-address", required_argument, NULL, OPTION_START_ADDRESS}, {"stop-address", required_argument, NULL, OPTION_STOP_ADDRESS}, @@ -287,6 +307,9 @@ static struct option long_options[]= {"target", required_argument, NULL, 'b'}, {"version", no_argument, NULL, 'V'}, {"wide", no_argument, NULL, 'w'}, + {"prefix", required_argument, NULL, OPTION_PREFIX}, + {"prefix-strip", required_argument, NULL, OPTION_PREFIX_STRIP}, + {"insn-width", required_argument, NULL, OPTION_INSN_WIDTH}, {0, no_argument, 0, 0} }; @@ -297,6 +320,23 @@ nonfatal (const char *msg) exit_status = 1; } +/* Returns TRUE if the specified section should be dumped. */ + +static bfd_boolean +process_section_p (asection * section) +{ + size_t i; + + if (only == NULL) + return TRUE; + + for (i = 0; i < only_used; i++) + if (strcmp (only [i], section->name) == 0) + return TRUE; + + return FALSE; +} + static void dump_section_header (bfd *abfd, asection *section, void *ignored ATTRIBUTE_UNUSED) @@ -309,6 +349,10 @@ dump_section_header (bfd *abfd, asection *section, if (section->flags & SEC_LINKER_CREATED) return; + /* PR 10413: Skip sections that we are ignoring. */ + if (! process_section_p (section)) + return; + printf ("%3d %-13s %08lx ", section->index, bfd_get_section_name (abfd, section), (unsigned long) bfd_section_size (abfd, section) / opb); @@ -423,7 +467,7 @@ slurp_symtab (bfd *abfd) if (storage < 0) bfd_fatal (bfd_get_filename (abfd)); if (storage) - sy = xmalloc (storage); + sy = (asymbol **) xmalloc (storage); symcount = bfd_canonicalize_symtab (abfd, sy); if (symcount < 0) @@ -452,7 +496,7 @@ slurp_dynamic_symtab (bfd *abfd) bfd_fatal (bfd_get_filename (abfd)); } if (storage) - sy = xmalloc (storage); + sy = (asymbol **) xmalloc (storage); dynsymcount = bfd_canonicalize_dynamic_symtab (abfd, sy); if (dynsymcount < 0) @@ -703,7 +747,7 @@ find_symbol_for_address (bfd_vma vma, aux = (struct objdump_disasm_info *) info->application_data; abfd = aux->abfd; sec = aux->sec; - opb = bfd_octets_per_byte (abfd); + opb = info->octets_per_byte; /* Perform a binary search looking for the closest symbol to the required value. We are searching the range (min, max]. */ @@ -734,6 +778,27 @@ find_symbol_for_address (bfd_vma vma, == bfd_asymbol_value (sorted_syms[thisplace - 1]))) --thisplace; + /* Prefer a symbol in the current section if we have multple symbols + with the same value, as can occur with overlays or zero size + sections. */ + min = thisplace; + while (min < max + && (bfd_asymbol_value (sorted_syms[min]) + == bfd_asymbol_value (sorted_syms[thisplace]))) + { + if (sorted_syms[min]->section == sec + && info->symbol_is_valid (sorted_syms[min], info)) + { + thisplace = min; + + if (place != NULL) + *place = thisplace; + + return sorted_syms[thisplace]; + } + ++min; + } + /* If the file is relocatable, and the symbol could be from this section, prefer a symbol from this section over symbols from others, even if the other symbol's value might be closer. @@ -753,19 +818,9 @@ find_symbol_for_address (bfd_vma vma, || !info->symbol_is_valid (sorted_syms[thisplace], info)) { long i; - long newplace; - - for (i = thisplace + 1; i < sorted_symcount; i++) - { - if (bfd_asymbol_value (sorted_syms[i]) - != bfd_asymbol_value (sorted_syms[thisplace])) - break; - } + long newplace = sorted_symcount; - --i; - newplace = sorted_symcount; - - for (; i >= 0; i--) + for (i = min - 1; i >= 0; i--) { if ((sorted_syms[i]->section == sec || !want_section) && info->symbol_is_valid (sorted_syms[i], info)) @@ -856,6 +911,10 @@ objdump_print_addr_with_sym (bfd *abfd, asection *sec, asymbol *sym, } (*info->fprintf_func) (info->stream, ">"); } + + if (display_file_offsets) + info->fprintf_func (info->stream, _(" (File Offset: 0x%lx)"), + (long int)(sec->filepos + (vma - sec->vma))); } /* Print an address (VMA), symbolically if possible. @@ -867,18 +926,22 @@ objdump_print_addr (bfd_vma vma, bfd_boolean skip_zeroes) { struct objdump_disasm_info *aux; - asymbol *sym = NULL; /* Initialize to avoid compiler warning. */ + asymbol *sym = NULL; bfd_boolean skip_find = FALSE; + aux = (struct objdump_disasm_info *) info->application_data; + if (sorted_symcount < 1) { (*info->fprintf_func) (info->stream, "0x"); objdump_print_value (vma, info, skip_zeroes); + + if (display_file_offsets) + info->fprintf_func (info->stream, _(" (File Offset: 0x%lx)"), + (long int)(aux->sec->filepos + (vma - aux->sec->vma))); return; } - aux = (struct objdump_disasm_info *) info->application_data; - if (aux->reloc != NULL && aux->reloc->sym_ptr_ptr != NULL && * aux->reloc->sym_ptr_ptr != NULL) @@ -950,7 +1013,7 @@ static struct print_file_list *print_files; #define SHOW_PRECEDING_CONTEXT_LINES (5) -/* Read a complete file into memory. */ +/* Read a complete file into memory. */ static const char * slurp_file (const char *fn, size_t *size) @@ -961,7 +1024,7 @@ slurp_file (const char *fn, size_t *size) #endif const char *map; struct stat st; - int fd = open (fn, O_RDONLY); + int fd = open (fn, O_RDONLY | O_BINARY); if (fd < 0) return NULL; @@ -977,7 +1040,7 @@ slurp_file (const char *fn, size_t *size) return map; } #endif - map = malloc (*size); + map = (const char *) malloc (*size); if (!map || (size_t) read (fd, (char *)map, *size) != *size) { free ((void *)map); @@ -1032,7 +1095,7 @@ index_file (const char *map, size_t size, unsigned int *maxline) if (line_map_size < lineno + 1) line_map_size = lineno + 1; newsize = line_map_size * sizeof (char *); - linemap = xrealloc (linemap, newsize); + linemap = (const char **) xrealloc (linemap, newsize); } linemap[lineno++] = lstart; @@ -1051,7 +1114,7 @@ try_print_file_open (const char *origname, const char *modname) { struct print_file_list *p; - p = xmalloc (sizeof (struct print_file_list)); + p = (struct print_file_list *) xmalloc (sizeof (struct print_file_list)); p->map = slurp_file (modname, &p->mapsize); if (p->map == NULL) @@ -1130,14 +1193,17 @@ static void print_line (struct print_file_list *p, unsigned int line) { const char *l; + size_t len; --line; if (line >= p->maxline) return; l = p->linemap [line]; - fwrite (l, 1, strcspn (l, "\n\r"), stdout); - putchar ('\n'); -} + /* Test fwrite return value to quiet glibc warning. */ + len = strcspn (l, "\n\r"); + if (len == 0 || fwrite (l, len, 1, stdout) == 1) + putchar ('\n'); +} /* Print a range of source code lines. */ @@ -1162,6 +1228,7 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset) const char *filename; const char *functionname; unsigned int line; + bfd_boolean reloc; if (! with_line_numbers && ! with_source_code) return; @@ -1175,6 +1242,44 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset) if (functionname != NULL && *functionname == '\0') functionname = NULL; + if (filename + && IS_ABSOLUTE_PATH (filename) + && prefix) + { + char *path_up; + const char *fname = filename; + char *path = (char *) alloca (prefix_length + PATH_MAX + 1); + + if (prefix_length) + memcpy (path, prefix, prefix_length); + path_up = path + prefix_length; + + /* Build relocated filename, stripping off leading directories + from the initial filename if requested. */ + if (prefix_strip > 0) + { + int level = 0; + const char *s; + + /* Skip selected directory levels. */ + for (s = fname + 1; *s != '\0' && level < prefix_strip; s++) + if (IS_DIR_SEPARATOR(*s)) + { + fname = s; + level++; + } + } + + /* Update complete filename. */ + strncpy (path_up, fname, PATH_MAX); + path_up[PATH_MAX] = '\0'; + + filename = path; + reloc = TRUE; + } + else + reloc = FALSE; + if (with_line_numbers) { if (functionname != NULL @@ -1198,7 +1303,11 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset) p = *pp; if (p == NULL) + { + if (reloc) + filename = xstrdup (filename); p = update_source_path (filename); + } if (p != NULL && line != p->last_line) { @@ -1224,7 +1333,7 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset) { if (prev_functionname != NULL) free (prev_functionname); - prev_functionname = xmalloc (strlen (functionname) + 1); + prev_functionname = (char *) xmalloc (strlen (functionname) + 1); strcpy (prev_functionname, functionname); } @@ -1260,31 +1369,13 @@ objdump_sprintf (SFILE *f, const char *format, ...) break; f->alloc = (f->alloc + n) * 2; - f->buffer = xrealloc (f->buffer, f->alloc); + f->buffer = (char *) xrealloc (f->buffer, f->alloc); } f->pos += n; return n; } -/* Returns TRUE if the specified section should be dumped. */ - -static bfd_boolean -process_section_p (asection * section) -{ - size_t i; - - if (only == NULL) - return TRUE; - - for (i = 0; i < only_used; i++) - if (strcmp (only [i], section->name) == 0) - return TRUE; - - return FALSE; -} - - /* The number of zeroes we want to see before we start skipping them. The number is arbitrarily chosen. */ @@ -1328,10 +1419,12 @@ disassemble_bytes (struct disassemble_info * info, section = aux->sec; sfile.alloc = 120; - sfile.buffer = xmalloc (sfile.alloc); + sfile.buffer = (char *) xmalloc (sfile.alloc); sfile.pos = 0; - if (insns) + if (insn_width) + octets_per_line = insn_width; + else if (insns) octets_per_line = 4; else octets_per_line = 16; @@ -1344,19 +1437,18 @@ disassemble_bytes (struct disassemble_info * info, if (! prefix_addresses) { char buf[30]; - char *s; - - bfd_sprintf_vma - (aux->abfd, buf, - (section->vma - + bfd_section_size (section->owner, section) / opb)); - s = buf; - while (s[0] == '0' && s[1] == '0' && s[2] == '0' && s[3] == '0' - && s[4] == '0') - { - skip_addr_chars += 4; - s += 4; - } + + bfd_sprintf_vma (aux->abfd, buf, section->vma + section->size / opb); + + while (buf[skip_addr_chars] == '0') + ++skip_addr_chars; + + /* Don't discard zeros on overflow. */ + if (buf[skip_addr_chars] == '\0' && section->vma != 0) + skip_addr_chars = 0; + + if (skip_addr_chars != 0) + skip_addr_chars = (skip_addr_chars - 1) & -4; } info->insn_info_valid = 0; @@ -1385,8 +1477,6 @@ disassemble_bytes (struct disassemble_info * info, || (z == stop_offset * opb && z - addr_offset * opb < skip_zeroes_at_end))) { - printf ("\t...\n"); - /* If there are more nonzero octets to follow, we only skip zeroes in multiples of 4, to try to avoid running over the start of an instruction which happens to start with @@ -1395,6 +1485,17 @@ disassemble_bytes (struct disassemble_info * info, z = addr_offset * opb + ((z - addr_offset * opb) &~ 3); octets = z - addr_offset * opb; + + /* If we are going to display more data, and we are displaying + file offsets, then tell the user how many zeroes we skip + and the file offset from where we resume dumping. */ + if (display_file_offsets && ((addr_offset + (octets / opb)) < stop_offset)) + printf ("\t... (skipping %d zeroes, resuming at file offset: 0x%lx)\n", + octets / opb, + (unsigned long) (section->filepos + + (addr_offset + (octets / opb)))); + else + printf ("\t...\n"); } else { @@ -1433,7 +1534,9 @@ disassemble_bytes (struct disassemble_info * info, info->stream = &sfile; info->bytes_per_line = 0; info->bytes_per_chunk = 0; - info->flags = 0; + info->flags = disassemble_all ? DISASSEMBLE_DATA : 0; + if (machine) + info->flags |= USER_SPECIFIED_MACHINE_TYPE; if (info->disassembler_needs_relocs && (bfd_get_file_flags (aux->abfd) & EXEC_P) == 0 @@ -1462,7 +1565,7 @@ disassemble_bytes (struct disassemble_info * info, || (distance_to_rel > 0 && distance_to_rel < (bfd_signed_vma) (previous_octets/ opb))) { - info->flags = INSN_HAS_RELOC; + info->flags |= INSN_HAS_RELOC; aux->reloc = **relppp; } else @@ -1472,7 +1575,7 @@ disassemble_bytes (struct disassemble_info * info, octets = (*disassemble_fn) (section->vma + addr_offset, info); info->fprintf_func = (fprintf_ftype) fprintf; info->stream = stdout; - if (info->bytes_per_line != 0) + if (insn_width == 0 && info->bytes_per_line != 0) octets_per_line = info->bytes_per_line; if (octets < 0) { @@ -1672,6 +1775,8 @@ disassemble_bytes (struct disassemble_info * info, static void disassemble_section (bfd *abfd, asection *section, void *info) { + const struct elf_backend_data * bed; + bfd_vma sign_adjust = 0; struct disassemble_info * pinfo = (struct disassemble_info *) info; struct objdump_disasm_info * paux; unsigned int opb = pinfo->octets_per_byte; @@ -1730,7 +1835,7 @@ disassemble_section (bfd *abfd, asection *section, void *info) if (relsize > 0) { - rel_ppstart = rel_pp = xmalloc (relsize); + rel_ppstart = rel_pp = (arelent **) xmalloc (relsize); rel_count = bfd_canonicalize_reloc (abfd, section, rel_pp, syms); if (rel_count < 0) bfd_fatal (bfd_get_filename (abfd)); @@ -1739,11 +1844,10 @@ disassemble_section (bfd *abfd, asection *section, void *info) qsort (rel_pp, rel_count, sizeof (arelent *), compare_relocs); } } - } rel_ppend = rel_pp + rel_count; - data = xmalloc (datasize); + data = (bfd_byte *) xmalloc (datasize); bfd_get_section_contents (abfd, section, data, 0, datasize); @@ -1777,13 +1881,24 @@ disassemble_section (bfd *abfd, asection *section, void *info) && (*rel_pp)->address < rel_offset + addr_offset) ++rel_pp; - printf (_("Disassembly of section %s:\n"), section->name); + if (addr_offset < stop_offset) + printf (_("\nDisassembly of section %s:\n"), section->name); /* Find the nearest symbol forwards from our current position. */ paux->require_sec = TRUE; - sym = find_symbol_for_address (section->vma + addr_offset, info, &place); + sym = (asymbol *) find_symbol_for_address (section->vma + addr_offset, + (struct disassemble_info *) info, + &place); paux->require_sec = FALSE; + /* PR 9774: If the target used signed addresses then we must make + sure that we sign extend the value that we calculate for 'addr' + in the loop below. */ + if (bfd_get_flavour (abfd) == bfd_target_elf_flavour + && (bed = get_elf_backend_data (abfd)) != NULL + && bed->sign_extend_vma) + sign_adjust = (bfd_vma) 1 << (bed->s->arch_size - 1); + /* Disassemble a block of instructions up to the address associated with the symbol we have just found. Then print the symbol and find the next symbol on. Repeat until we have disassembled the entire section @@ -1796,6 +1911,7 @@ disassemble_section (bfd *abfd, asection *section, void *info) bfd_boolean insns; addr = section->vma + addr_offset; + addr = ((addr & ((sign_adjust << 1) - 1)) ^ sign_adjust) - sign_adjust; if (sym != NULL && bfd_asymbol_value (sym) <= addr) { @@ -1858,7 +1974,8 @@ disassemble_section (bfd *abfd, asection *section, void *info) else nextstop_offset = bfd_asymbol_value (nextsym) - section->vma; - if (nextstop_offset > stop_offset) + if (nextstop_offset > stop_offset + || nextstop_offset <= addr_offset) nextstop_offset = stop_offset; /* If a symbol is explicitly marked as being an object @@ -1866,6 +1983,7 @@ disassemble_section (bfd *abfd, asection *section, void *info) disassembling them. */ if (disassemble_all || sym == NULL + || sym->section != section || bfd_asymbol_value (sym) > addr || ((sym->flags & BSF_OBJECT) == 0 && (strstr (bfd_asymbol_name (sym), "gnu_compiled") @@ -1880,7 +1998,7 @@ disassemble_section (bfd *abfd, asection *section, void *info) disassemble_bytes (pinfo, paux->disassemble_fn, insns, data, addr_offset, nextstop_offset, rel_offset, &rel_pp, rel_ppend); - + addr_offset = nextstop_offset; sym = nextsym; } @@ -1907,7 +2025,8 @@ disassemble_data (bfd *abfd) /* We make a copy of syms to sort. We don't want to sort syms because that will screw up the relocs. */ sorted_symcount = symcount ? symcount : dynsymcount; - sorted_syms = xmalloc ((sorted_symcount + synthcount) * sizeof (asymbol *)); + sorted_syms = (asymbol **) xmalloc ((sorted_symcount + synthcount) + * sizeof (asymbol *)); memcpy (sorted_syms, symcount ? syms : dynsyms, sorted_symcount * sizeof (asymbol *)); @@ -1948,7 +2067,7 @@ disassemble_data (bfd *abfd) { struct bfd_target *xvec; - xvec = xmalloc (sizeof (struct bfd_target)); + xvec = (struct bfd_target *) xmalloc (sizeof (struct bfd_target)); memcpy (xvec, abfd->xvec, sizeof (struct bfd_target)); xvec->byteorder = endian; abfd->xvec = xvec; @@ -1996,7 +2115,7 @@ disassemble_data (bfd *abfd) if (relsize > 0) { - aux.dynrelbuf = xmalloc (relsize); + aux.dynrelbuf = (arelent **) xmalloc (relsize); aux.dynrelcount = bfd_canonicalize_dynamic_reloc (abfd, aux.dynrelbuf, dynsyms); @@ -2018,38 +2137,24 @@ disassemble_data (bfd *abfd) free (sorted_syms); } -int -load_debug_section (enum dwarf_section_display_enum debug, void *file) +static int +load_specific_debug_section (enum dwarf_section_display_enum debug, + asection *sec, void *file) { struct dwarf_section *section = &debug_displays [debug].section; - bfd *abfd = file; - asection *sec; + bfd *abfd = (bfd *) file; bfd_boolean ret; + int section_is_compressed; /* If it is already loaded, do nothing. */ if (section->start != NULL) return 1; - /* Locate the debug section. */ - sec = bfd_get_section_by_name (abfd, section->name); - if (sec == NULL) - return 0; + section_is_compressed = section->name == section->compressed_name; - /* 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->address = 0; section->size = bfd_get_section_size (sec); - section->start = xmalloc (section->size); + section->start = (unsigned char *) xmalloc (section->size); if (is_relocatable && debug_displays [debug].relocate) ret = bfd_simple_get_relocated_section_contents (abfd, @@ -2060,14 +2165,54 @@ load_debug_section (enum dwarf_section_display_enum debug, void *file) ret = bfd_get_section_contents (abfd, sec, section->start, 0, section->size); - if (!ret) + if (! ret) { free_debug_section (debug); printf (_("\nCan't get contents for section '%s'.\n"), section->name); + return 0; + } + + if (section_is_compressed) + { + bfd_size_type size = section->size; + if (! bfd_uncompress_section_contents (§ion->start, &size)) + { + free_debug_section (debug); + printf (_("\nCan't uncompress section '%s'.\n"), section->name); + return 0; + } + section->size = size; } - return ret; + return 1; +} + +int +load_debug_section (enum dwarf_section_display_enum debug, void *file) +{ + struct dwarf_section *section = &debug_displays [debug].section; + bfd *abfd = (bfd *) file; + asection *sec; + + /* If it is already loaded, do nothing. */ + if (section->start != NULL) + return 1; + + /* Locate the debug section. */ + sec = bfd_get_section_by_name (abfd, section->uncompressed_name); + if (sec != NULL) + section->name = section->uncompressed_name; + else + { + sec = bfd_get_section_by_name (abfd, section->compressed_name); + if (sec != NULL) + section->name = section->compressed_name; + } + if (sec == NULL) + return 0; + + return load_specific_debug_section (debug, sec, file); } void @@ -2090,7 +2235,7 @@ dump_dwarf_section (bfd *abfd, asection *section, { const char *name = bfd_get_section_name (abfd, section); const char *match; - enum dwarf_section_display_enum i; + int i; if (CONST_STRNEQ (name, ".gnu.linkonce.wi.")) match = ".debug_info"; @@ -2098,69 +2243,29 @@ dump_dwarf_section (bfd *abfd, asection *section, match = name; for (i = 0; i < max; i++) - if (strcmp (debug_displays[i].section.name, match) == 0) + if ((strcmp (debug_displays [i].section.uncompressed_name, match) == 0 + || strcmp (debug_displays [i].section.compressed_name, match) == 0) + && debug_displays [i].enabled != NULL + && *debug_displays [i].enabled) { - if (!debug_displays[i].eh_frame) + struct dwarf_section *sec = &debug_displays [i].section; + + if (strcmp (sec->uncompressed_name, match) == 0) + sec->name = sec->uncompressed_name; + else + sec->name = sec->compressed_name; + if (load_specific_debug_section ((enum dwarf_section_display_enum) i, + section, abfd)) { - struct dwarf_section *sec = &debug_displays [i].section; - - if (load_debug_section (i, abfd)) - { - debug_displays[i].display (sec, abfd); - - if (i != info && i != abbrev) - free_debug_section (i); - } + debug_displays [i].display (sec, abfd); + + if (i != info && i != abbrev) + free_debug_section ((enum dwarf_section_display_enum) i); } break; } } -static const char *mach_o_dwarf_sections [] = { - "LC_SEGMENT.__DWARFA.__debug_abbrev", /* .debug_abbrev */ - "LC_SEGMENT.__DWARFA.__debug_aranges", /* .debug_aranges */ - "LC_SEGMENT.__DWARFA.__debug_frame", /* .debug_frame */ - "LC_SEGMENT.__DWARFA.__debug_info", /* .debug_info */ - "LC_SEGMENT.__DWARFA.__debug_line", /* .debug_line */ - "LC_SEGMENT.__DWARFA.__debug_pubnames", /* .debug_pubnames */ - ".eh_frame", /* .eh_frame */ - "LC_SEGMENT.__DWARFA.__debug_macinfo", /* .debug_macinfo */ - "LC_SEGMENT.__DWARFA.__debug_str", /* .debug_str */ - "LC_SEGMENT.__DWARFA.__debug_loc", /* .debug_loc */ - "LC_SEGMENT.__DWARFA.__debug_pubtypes", /* .debug_pubtypes */ - "LC_SEGMENT.__DWARFA.__debug_ranges", /* .debug_ranges */ - "LC_SEGMENT.__DWARFA.__debug_static_func", /* .debug_static_func */ - "LC_SEGMENT.__DWARFA.__debug_static_vars", /* .debug_static_vars */ - "LC_SEGMENT.__DWARFA.__debug_types", /* .debug_types */ - "LC_SEGMENT.__DWARFA.__debug_weaknames" /* .debug_weaknames */ -}; - -static const char *generic_dwarf_sections [max]; - -static void -check_mach_o_dwarf (bfd *abfd) -{ - static enum bfd_flavour old_flavour = bfd_target_unknown_flavour; - enum bfd_flavour current_flavour = bfd_get_flavour (abfd); - enum dwarf_section_display_enum i; - - if (generic_dwarf_sections [0] == NULL) - for (i = 0; i < max; i++) - generic_dwarf_sections [i] = debug_displays[i].section.name; - - if (old_flavour != current_flavour) - { - if (current_flavour == bfd_target_mach_o_flavour) - for (i = 0; i < max; i++) - debug_displays[i].section.name = mach_o_dwarf_sections [i]; - else if (old_flavour == bfd_target_mach_o_flavour) - for (i = 0; i < max; i++) - debug_displays[i].section.name = generic_dwarf_sections [i]; - - old_flavour = current_flavour; - } -} - /* Dump the dwarf debugging information. */ static void @@ -2179,7 +2284,11 @@ dump_dwarf (bfd *abfd) else abort (); - check_mach_o_dwarf (abfd); + if (bfd_get_flavour (abfd) == bfd_target_elf_flavour) + { + const struct elf_backend_data *bed = get_elf_backend_data (abfd); + init_dwarf_regnames (bed->elf_machine_code); + } bfd_map_over_sections (abfd, dump_dwarf_section, NULL); @@ -2204,7 +2313,7 @@ read_section_stabs (bfd *abfd, const char *sect_name, bfd_size_type *size_ptr) } size = bfd_section_size (abfd, stabsect); - contents = xmalloc (size); + contents = (char *) xmalloc (size); if (! bfd_get_section_contents (abfd, stabsect, contents, 0, size)) { @@ -2371,6 +2480,10 @@ dump_stabs (bfd *abfd) dump_stabs_section (abfd, ".stab", ".stabstr"); dump_stabs_section (abfd, ".stab.excl", ".stab.exclstr"); dump_stabs_section (abfd, ".stab.index", ".stab.indexstr"); + + /* For Darwin. */ + dump_stabs_section (abfd, "LC_SYMTAB.stabs", "LC_SYMTAB.stabstr"); + dump_stabs_section (abfd, "$GDB_SYMBOLS$", "$GDB_STRINGS$"); } @@ -2436,12 +2549,6 @@ dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED) if ((datasize = bfd_section_size (abfd, section)) == 0) return; - printf (_("Contents of section %s:\n"), section->name); - - data = xmalloc (datasize); - - bfd_get_section_contents (abfd, section, data, 0, datasize); - /* Compute the address range to display. */ if (start_address == (bfd_vma) -1 || start_address < section->vma) @@ -2462,6 +2569,19 @@ dump_section (bfd *abfd, asection *section, void *dummy ATTRIBUTE_UNUSED) stop_offset = datasize / opb; } + if (start_offset >= stop_offset) + return; + + printf (_("Contents of section %s:"), section->name); + if (display_file_offsets) + printf (_(" (Starting at file offset: 0x%lx)"), + (unsigned long) (section->filepos + start_offset)); + printf ("\n"); + + data = (bfd_byte *) xmalloc (datasize); + + bfd_get_section_contents (abfd, section, data, 0, datasize); + width = 4; bfd_sprintf_vma (abfd, buf, start_offset + section->vma); @@ -2699,8 +2819,11 @@ dump_reloc_set (bfd *abfd, asection *sec, arelent **relpp, long relcount) printf (" %-16s ", q->howto->name); else printf (" %-16d ", q->howto->type); + if (sym_name) - objdump_print_symname (abfd, NULL, *q->sym_ptr_ptr); + { + objdump_print_symname (abfd, NULL, *q->sym_ptr_ptr); + } else { if (section_name == NULL) @@ -2746,7 +2869,7 @@ dump_relocs_in_section (bfd *abfd, return; } - relpp = xmalloc (relsize); + relpp = (arelent **) xmalloc (relsize); relcount = bfd_canonicalize_reloc (abfd, section, relpp, syms); if (relcount < 0) @@ -2785,7 +2908,7 @@ dump_dynamic_relocs (bfd *abfd) printf (" (none)\n\n"); else { - relpp = xmalloc (relsize); + relpp = (arelent **) xmalloc (relsize); relcount = bfd_canonicalize_dynamic_reloc (abfd, relpp, dynsyms); if (relcount < 0) @@ -2810,8 +2933,8 @@ add_include_path (const char *path) if (path[0] == 0) return; include_path_count++; - include_paths = xrealloc (include_paths, - include_path_count * sizeof (*include_paths)); + include_paths = (const char **) + xrealloc (include_paths, include_path_count * sizeof (*include_paths)); #ifdef HAVE_DOS_BASED_FILE_SYSTEM if (path[1] == ':' && path[2] == 0) path = concat (path, ".", (const char *) 0); @@ -2899,7 +3022,7 @@ dump_bfd (bfd *abfd) { void *dhandle; - dhandle = read_debugging_info (abfd, syms, symcount); + dhandle = read_debugging_info (abfd, syms, symcount, TRUE); if (dhandle != NULL) { if (!print_debugging_info (stdout, dhandle, abfd, syms, @@ -2911,6 +3034,12 @@ dump_bfd (bfd *abfd) exit_status = 1; } } + /* PR 6483: If there was no STABS or IEEE debug + info in the file, try DWARF instead. */ + else if (! dump_dwarf_section_info) + { + dump_dwarf (abfd); + } } if (syms) @@ -3056,7 +3185,8 @@ main (int argc, char **argv) bfd_init (); set_default_bfd_target (); - while ((c = getopt_long (argc, argv, "pib:m:M:VvCdDlfaHhrRtTxsSI:j:wE:zgeGW", + while ((c = getopt_long (argc, argv, + "pib:m:M:VvCdDlfFaHhrRtTxsSI:j:wE:zgeGW::", long_options, (int *) 0)) != EOF) { @@ -3071,7 +3201,7 @@ main (int argc, char **argv) if (disassembler_options) /* Ignore potential memory leak for now. */ disassembler_options = concat (disassembler_options, ",", - optarg, NULL); + optarg, (const char *) NULL); else disassembler_options = optarg; break; @@ -3079,10 +3209,13 @@ main (int argc, char **argv) if (only_used == only_size) { only_size += 8; - only = xrealloc (only, only_size * sizeof (char *)); + only = (char **) xrealloc (only, only_size * sizeof (char *)); } only [only_used++] = optarg; break; + case 'F': + display_file_offsets = TRUE; + break; case 'l': with_line_numbers = TRUE; break; @@ -3111,9 +3244,30 @@ main (int argc, char **argv) break; case OPTION_START_ADDRESS: start_address = parse_vma (optarg, "--start-address"); + if ((stop_address != (bfd_vma) -1) && stop_address <= start_address) + fatal (_("error: the start address should be before the end address")); break; case OPTION_STOP_ADDRESS: stop_address = parse_vma (optarg, "--stop-address"); + if ((start_address != (bfd_vma) -1) && stop_address <= start_address) + fatal (_("error: the stop address should be after the start address")); + break; + case OPTION_PREFIX: + prefix = optarg; + prefix_length = strlen (prefix); + /* Remove an unnecessary trailing '/' */ + while (IS_DIR_SEPARATOR (prefix[prefix_length - 1])) + prefix_length--; + break; + case OPTION_PREFIX_STRIP: + prefix_strip = atoi (optarg); + if (prefix_strip < 0) + fatal (_("error: prefix strip must be non-negative")); + break; + case OPTION_INSN_WIDTH: + insn_width = strtoul (optarg, NULL, 0); + if (insn_width <= 0) + fatal (_("error: instruction width must be positive")); break; case 'E': if (strcmp (optarg, "B") == 0) @@ -3200,16 +3354,18 @@ main (int argc, char **argv) case 'W': dump_dwarf_section_info = TRUE; seenflag = TRUE; - do_debug_info = 1; - do_debug_abbrevs = 1; - do_debug_lines = 1; - do_debug_pubnames = 1; - do_debug_aranges = 1; - do_debug_ranges = 1; - do_debug_frames = 1; - do_debug_macinfo = 1; - do_debug_str = 1; - do_debug_loc = 1; + if (optarg) + dwarf_select_sections_by_letters (optarg); + else + dwarf_select_sections_all (); + break; + case OPTION_DWARF: + dump_dwarf_section_info = TRUE; + seenflag = TRUE; + if (optarg) + dwarf_select_sections_by_names (optarg); + else + dwarf_select_sections_all (); break; case 'G': dump_stab_section_info = TRUE; diff --git a/binutils/po/.cvsignore b/binutils/po/.cvsignore deleted file mode 100644 index becd153..0000000 --- a/binutils/po/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.gmo diff --git a/binutils/po/Make-in b/binutils/po/Make-in index f321ad7..f8f6525 100644 --- a/binutils/po/Make-in +++ b/binutils/po/Make-in @@ -1,6 +1,6 @@ # Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper -# Copyright 2003, 2006 Free Software Foundation, Inc. +# Copyright 2003, 2006, 2007, 2009 Free Software Foundation, Inc. # # This file may be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License @@ -113,6 +113,7 @@ install: install-exec install-data install-exec: install-info: install-html: +install-pdf: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all diff --git a/binutils/po/binutils.pot b/binutils/po/binutils.pot index f080168..6a5ec37 100644 --- a/binutils/po/binutils.pot +++ b/binutils/po/binutils.pot @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-07-02 15:55+0930\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:08+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,24 +16,24 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: addr2line.c:74 +#: addr2line.c:76 #, c-format msgid "Usage: %s [option(s)] [addr(s)]\n" msgstr "" -#: addr2line.c:75 +#: addr2line.c:77 #, c-format msgid " Convert addresses into line number/file name pairs.\n" msgstr "" -#: addr2line.c:76 +#: addr2line.c:78 #, c-format msgid "" " If no addresses are specified on the command line, they will be read from " "stdin\n" msgstr "" -#: addr2line.c:77 +#: addr2line.c:79 #, c-format msgid "" " The options are:\n" @@ -50,223 +50,274 @@ msgid "" "\n" msgstr "" -#: 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 +#: addr2line.c:94 ar.c:295 coffdump.c:469 dlltool.c:3832 dllwrap.c:510 +#: nlmconv.c:1113 objcopy.c:563 objcopy.c:598 readelf.c:2922 size.c:99 +#: srconv.c:1741 strings.c:676 sysdump.c:653 windmc.c:233 windres.c:698 #, c-format msgid "Report bugs to %s\n" msgstr "" -#: addr2line.c:279 +#: addr2line.c:281 #, c-format msgid "%s: cannot get addresses from archive" msgstr "" -#: addr2line.c:296 +#: addr2line.c:298 #, c-format msgid "%s: cannot find section %s" msgstr "" -#: addr2line.c:362 nm.c:1534 objdump.c:3099 +#: addr2line.c:364 nm.c:1554 objdump.c:3229 #, c-format msgid "unknown demangling style `%s'" msgstr "" -#: ar.c:204 +#: ar.c:218 #, c-format msgid "no entry %s in archive\n" msgstr "" -#: ar.c:220 +#: ar.c:236 +#, c-format +msgid "" +"Usage: %s [emulation options] [--plugin ] [-]{dmpqrstx}" +"[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" +msgstr "" + +#: ar.c:238 #, c-format msgid "" "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] " "[count] archive-file file...\n" msgstr "" -#: ar.c:223 +#: ar.c:243 #, c-format msgid " %s -M [ - read options from \n" msgstr "" -#: ar.c:253 +#: ar.c:270 +#, c-format +msgid " optional:\n" +msgstr "" + +#: ar.c:271 +#, c-format +msgid " --plugin

- load the specified plugin\n" +msgstr "" + +#: ar.c:278 #, c-format msgid "Usage: %s [options] archive\n" msgstr "" -#: ar.c:254 +#: ar.c:279 #, c-format msgid " Generate an index to speed access to archives\n" msgstr "" -#: ar.c:255 +#: ar.c:280 #, c-format msgid "" " The options are:\n" " @ Read options from \n" +msgstr "" + +#: ar.c:283 +#, c-format +msgid " --plugin Load the specified plugin\n" +msgstr "" + +#: ar.c:286 +#, c-format +msgid "" +" -t Update the archive's symbol map timestamp\n" " -h --help Print this help message\n" -" -V --version Print version information\n" +" -v --version Print version information\n" +msgstr "" + +#: ar.c:512 nm.c:1626 +#, c-format +msgid "sorry - this program has been built without plugin support\n" msgstr "" -#: ar.c:487 +#: ar.c:539 msgid "two different operation options specified" msgstr "" -#: ar.c:562 +#: ar.c:620 #, c-format msgid "illegal option -- %c" msgstr "" -#: ar.c:605 +#: ar.c:663 msgid "no operation specified" msgstr "" -#: ar.c:608 +#: ar.c:666 msgid "`u' is only meaningful with the `r' option." msgstr "" -#: ar.c:616 +#: ar.c:669 +msgid "`u' is not meaningful with the `D' option." +msgstr "" + +#: ar.c:677 msgid "`N' is only meaningful with the `x' and `d' options." msgstr "" -#: ar.c:619 +#: ar.c:680 msgid "Value for `N' must be positive." msgstr "" -#: ar.c:669 +#: ar.c:692 +msgid "`x' cannot be used on thin archives." +msgstr "" + +#: ar.c:733 #, c-format msgid "internal error -- this option not implemented" msgstr "" -#: ar.c:738 +#: ar.c:802 #, c-format msgid "creating %s" msgstr "" -#: ar.c:787 ar.c:842 ar.c:1164 objcopy.c:1869 +#: ar.c:851 ar.c:906 ar.c:1234 objcopy.c:2026 #, c-format msgid "internal stat error on %s" msgstr "" -#: ar.c:791 +#: ar.c:855 #, c-format msgid "" "\n" @@ -274,173 +325,173 @@ msgid "" "\n" msgstr "" -#: ar.c:807 ar.c:875 +#: ar.c:871 ar.c:939 #, c-format msgid "%s is not a valid archive" msgstr "" -#: ar.c:1069 +#: ar.c:1139 #, c-format msgid "No member named `%s'\n" msgstr "" -#: ar.c:1119 +#: ar.c:1189 #, c-format msgid "no entry %s in archive %s!" msgstr "" -#: ar.c:1257 +#: ar.c:1328 #, c-format msgid "%s: no archive map to update" msgstr "" -#: arsup.c:88 +#: arsup.c:89 #, c-format msgid "No entry %s in archive.\n" msgstr "" -#: arsup.c:113 +#: arsup.c:114 #, c-format msgid "Can't open file %s\n" msgstr "" -#: arsup.c:163 +#: arsup.c:164 #, c-format msgid "%s: Can't open output archive %s\n" msgstr "" -#: arsup.c:180 +#: arsup.c:181 #, c-format msgid "%s: Can't open input archive %s\n" msgstr "" -#: arsup.c:189 +#: arsup.c:190 #, c-format msgid "%s: file %s is not an archive\n" msgstr "" -#: arsup.c:228 +#: arsup.c:230 #, c-format msgid "%s: no output archive specified yet\n" msgstr "" -#: arsup.c:248 arsup.c:286 arsup.c:328 arsup.c:348 arsup.c:414 +#: arsup.c:250 arsup.c:288 arsup.c:330 arsup.c:350 arsup.c:416 #, c-format msgid "%s: no open output archive\n" msgstr "" -#: arsup.c:259 arsup.c:369 arsup.c:395 +#: arsup.c:261 arsup.c:371 arsup.c:397 #, c-format msgid "%s: can't open file %s\n" msgstr "" -#: arsup.c:313 arsup.c:391 arsup.c:472 +#: arsup.c:315 arsup.c:393 arsup.c:474 #, c-format msgid "%s: can't find module file %s\n" msgstr "" -#: arsup.c:423 +#: arsup.c:425 #, c-format msgid "Current open archive is %s\n" msgstr "" -#: arsup.c:447 +#: arsup.c:449 #, c-format msgid "%s: no open archive\n" msgstr "" -#: bin2c.c:84 +#: bin2c.c:59 #, c-format msgid "Usage: %s < input_file > output_file\n" msgstr "" -#: bin2c.c:85 +#: bin2c.c:60 #, c-format msgid "Prints bytes from stdin in hex format.\n" msgstr "" -#: binemul.c:37 +#: binemul.c:38 #, c-format msgid " No emulation specific options\n" msgstr "" #. Macros for common output. -#: binemul.h:41 +#: binemul.h:43 #, c-format msgid " emulation options: \n" msgstr "" -#: bucomm.c:111 +#: bucomm.c:157 #, c-format msgid "can't set BFD default target to `%s': %s" msgstr "" -#: bucomm.c:122 +#: bucomm.c:168 #, c-format msgid "%s: Matching formats:" msgstr "" -#: bucomm.c:137 +#: bucomm.c:183 #, c-format msgid "Supported targets:" msgstr "" -#: bucomm.c:139 +#: bucomm.c:185 #, c-format msgid "%s: supported targets:" msgstr "" -#: bucomm.c:155 +#: bucomm.c:202 #, c-format msgid "Supported architectures:" msgstr "" -#: bucomm.c:157 +#: bucomm.c:204 #, c-format msgid "%s: supported architectures:" msgstr "" -#: bucomm.c:350 +#: bucomm.c:398 #, c-format msgid "BFD header file version %s\n" msgstr "" -#: bucomm.c:499 +#: bucomm.c:547 #, c-format msgid "%s: bad number: %s" msgstr "" -#: bucomm.c:516 strings.c:435 +#: bucomm.c:564 strings.c:422 #, c-format msgid "'%s': No such file" msgstr "" -#: bucomm.c:518 strings.c:437 +#: bucomm.c:566 strings.c:424 #, c-format msgid "Warning: could not locate '%s'. reason: %s" msgstr "" -#: bucomm.c:522 +#: bucomm.c:570 #, c-format msgid "Warning: '%s' is not an ordinary file" msgstr "" -#: coffdump.c:104 +#: coffdump.c:106 #, c-format msgid "#lines %d " msgstr "" -#: coffdump.c:458 sysdump.c:640 +#: coffdump.c:460 sysdump.c:646 #, c-format msgid "Usage: %s [option(s)] in-file\n" msgstr "" -#: coffdump.c:459 +#: coffdump.c:461 #, c-format msgid " Print a human readable interpretation of a SYSROFF object file\n" msgstr "" -#: coffdump.c:460 +#: coffdump.c:462 #, c-format msgid "" " The options are:\n" @@ -450,487 +501,537 @@ msgid "" "\n" msgstr "" -#: coffdump.c:529 srconv.c:1824 sysdump.c:704 +#: coffdump.c:531 srconv.c:1831 sysdump.c:710 msgid "no input file specified" msgstr "" -#: cxxfilt.c:119 nm.c:252 objdump.c:234 +#: cxxfilt.c:119 nm.c:264 objdump.c:251 #, c-format msgid "Report bugs to %s.\n" msgstr "" -#: debug.c:646 +#: debug.c:647 msgid "debug_add_to_current_namespace: no current file" msgstr "" -#: debug.c:725 +#: debug.c:726 msgid "debug_start_source: no debug_set_filename call" msgstr "" -#: debug.c:781 +#: debug.c:782 msgid "debug_record_function: no debug_set_filename call" msgstr "" -#: debug.c:833 +#: debug.c:834 msgid "debug_record_parameter: no current function" msgstr "" -#: debug.c:865 +#: debug.c:866 msgid "debug_end_function: no current function" msgstr "" -#: debug.c:871 +#: debug.c:872 msgid "debug_end_function: some blocks were not closed" msgstr "" -#: debug.c:899 +#: debug.c:900 msgid "debug_start_block: no current block" msgstr "" -#: debug.c:935 +#: debug.c:936 msgid "debug_end_block: no current block" msgstr "" -#: debug.c:942 +#: debug.c:943 msgid "debug_end_block: attempt to close top level block" msgstr "" -#: debug.c:965 +#: debug.c:966 msgid "debug_record_line: no current unit" msgstr "" #. FIXME -#: debug.c:1018 +#: debug.c:1019 msgid "debug_start_common_block: not implemented" msgstr "" #. FIXME -#: debug.c:1029 +#: debug.c:1030 msgid "debug_end_common_block: not implemented" msgstr "" #. FIXME. -#: debug.c:1113 +#: debug.c:1114 msgid "debug_record_label: not implemented" msgstr "" -#: debug.c:1135 +#: debug.c:1136 msgid "debug_record_variable: no current file" msgstr "" -#: debug.c:1663 +#: debug.c:1664 msgid "debug_make_undefined_type: unsupported kind" msgstr "" -#: debug.c:1840 +#: debug.c:1841 msgid "debug_name_type: no current file" msgstr "" -#: debug.c:1885 +#: debug.c:1886 msgid "debug_tag_type: no current file" msgstr "" -#: debug.c:1893 +#: debug.c:1894 msgid "debug_tag_type: extra tag attempted" msgstr "" -#: debug.c:1930 +#: debug.c:1931 #, c-format msgid "Warning: changing type size from %d to %d\n" msgstr "" -#: debug.c:1952 +#: debug.c:1953 msgid "debug_find_named_type: no current compilation unit" msgstr "" -#: debug.c:2055 +#: debug.c:2056 #, c-format msgid "debug_get_real_type: circular debug information for %s\n" msgstr "" -#: debug.c:2482 +#: debug.c:2483 msgid "debug_write_type: illegal type encountered" msgstr "" -#: dlltool.c:797 dlltool.c:823 dlltool.c:854 +#: dlltool.c:884 dlltool.c:910 dlltool.c:941 #, c-format msgid "Internal error: Unknown machine type: %d" msgstr "" -#: dlltool.c:890 +#: dlltool.c:982 #, c-format msgid "Can't open def file: %s" msgstr "" -#: dlltool.c:895 +#: dlltool.c:987 #, c-format msgid "Processing def file: %s" msgstr "" -#: dlltool.c:899 +#: dlltool.c:991 msgid "Processed def file" msgstr "" -#: dlltool.c:923 +#: dlltool.c:1015 #, c-format msgid "Syntax error in def file %s:%d" msgstr "" -#: dlltool.c:958 +#: dlltool.c:1050 #, c-format msgid "%s: Path components stripped from image name, '%s'." msgstr "" -#: dlltool.c:967 +#: dlltool.c:1068 #, c-format msgid "NAME: %s base: %x" msgstr "" -#: dlltool.c:970 dlltool.c:986 +#: dlltool.c:1071 dlltool.c:1087 msgid "Can't have LIBRARY and NAME" msgstr "" -#: dlltool.c:983 +#: dlltool.c:1084 #, c-format msgid "LIBRARY: %s base: %x" msgstr "" -#: dlltool.c:1219 resrc.c:293 +#: dlltool.c:1320 resrc.c:293 #, c-format msgid "wait: %s" msgstr "" -#: dlltool.c:1224 dllwrap.c:410 resrc.c:298 +#: dlltool.c:1325 dllwrap.c:410 resrc.c:298 #, c-format msgid "subprocess got fatal signal %d" msgstr "" -#: dlltool.c:1230 dllwrap.c:417 resrc.c:305 +#: dlltool.c:1331 dllwrap.c:417 resrc.c:305 #, c-format msgid "%s exited with status %d" msgstr "" -#: dlltool.c:1261 +#: dlltool.c:1362 #, c-format msgid "Sucking in info from %s section in %s" msgstr "" -#: dlltool.c:1386 +#: dlltool.c:1487 #, c-format msgid "Excluding symbol: %s" msgstr "" -#: dlltool.c:1475 dlltool.c:1486 nm.c:984 nm.c:995 +#: dlltool.c:1576 dlltool.c:1587 nm.c:1001 nm.c:1012 #, c-format msgid "%s: no symbols" msgstr "" #. FIXME: we ought to read in and block out the base relocations. -#: dlltool.c:1512 +#: dlltool.c:1613 #, c-format msgid "Done reading %s" msgstr "" -#: dlltool.c:1522 +#: dlltool.c:1623 #, c-format msgid "Unable to open object file: %s" msgstr "" -#: dlltool.c:1525 +#: dlltool.c:1626 #, c-format msgid "Scanning object file %s" msgstr "" -#: dlltool.c:1540 +#: dlltool.c:1641 #, c-format msgid "Cannot produce mcore-elf dll from archive file: %s" msgstr "" -#: dlltool.c:1626 +#: dlltool.c:1741 msgid "Adding exports to output file" msgstr "" -#: dlltool.c:1674 +#: dlltool.c:1789 msgid "Added exports to output file" msgstr "" -#: dlltool.c:1813 +#: dlltool.c:1930 #, c-format msgid "Generating export file: %s" msgstr "" -#: dlltool.c:1818 +#: dlltool.c:1935 #, c-format msgid "Unable to open temporary assembler file: %s" msgstr "" -#: dlltool.c:1821 +#: dlltool.c:1938 #, c-format msgid "Opened temporary file: %s" msgstr "" -#: dlltool.c:2043 +#: dlltool.c:2113 +msgid "failed to read the number of entries from base file" +msgstr "" + +#: dlltool.c:2161 msgid "Generated exports file" msgstr "" -#: dlltool.c:2251 +#: dlltool.c:2370 #, c-format msgid "bfd_open failed open stub file: %s" msgstr "" -#: dlltool.c:2254 +#: dlltool.c:2373 #, c-format msgid "Creating stub file: %s" msgstr "" -#: dlltool.c:2672 +#: dlltool.c:2837 dlltool.c:2906 #, c-format msgid "failed to open temporary head file: %s" msgstr "" -#: dlltool.c:2734 +#: dlltool.c:2979 #, c-format msgid "failed to open temporary tail file: %s" msgstr "" -#: dlltool.c:2809 +#: dlltool.c:3052 #, c-format msgid "Can't open .lib file: %s" msgstr "" -#: dlltool.c:2812 +#: dlltool.c:3055 #, c-format msgid "Creating library file: %s" msgstr "" -#: dlltool.c:2895 dlltool.c:2901 +#: dlltool.c:3146 dlltool.c:3152 #, c-format msgid "cannot delete %s: %s" msgstr "" -#: dlltool.c:2906 +#: dlltool.c:3157 msgid "Created lib file" msgstr "" -#: dlltool.c:2985 +#: dlltool.c:3369 dlltool.c:3391 +#, c-format +msgid "%s is not a library" +msgstr "" + +#: dlltool.c:3409 +#, c-format +msgid "Import library `%s' specifies two or more dlls" +msgstr "" + +#: dlltool.c:3420 +#, c-format +msgid "Unable to determine dll name for `%s' (not an import library?)" +msgstr "" + +#: dlltool.c:3641 #, c-format msgid "Warning, ignoring duplicate EXPORT %s %d,%d" msgstr "" -#: dlltool.c:2991 +#: dlltool.c:3647 #, c-format -msgid "Error, duplicate EXPORT with oridinals: %s" +msgid "Error, duplicate EXPORT with ordinals: %s" msgstr "" -#: dlltool.c:3096 +#: dlltool.c:3752 msgid "Processing definitions" msgstr "" -#: dlltool.c:3128 +#: dlltool.c:3784 msgid "Processed definitions" msgstr "" #. xgetext:c-format -#: dlltool.c:3135 dllwrap.c:471 +#: dlltool.c:3791 dllwrap.c:471 #, c-format msgid "Usage %s \n" msgstr "" #. xgetext:c-format -#: dlltool.c:3137 +#: dlltool.c:3793 #, c-format msgid "" " -m --machine Create as DLL for . [default: %s]\n" msgstr "" -#: dlltool.c:3138 +#: dlltool.c:3794 #, c-format msgid "" " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, " "ppc, thumb\n" msgstr "" -#: dlltool.c:3139 +#: dlltool.c:3795 #, c-format msgid " -e --output-exp Generate an export file.\n" msgstr "" -#: dlltool.c:3140 +#: dlltool.c:3796 #, c-format msgid " -l --output-lib Generate an interface library.\n" msgstr "" -#: dlltool.c:3141 +#: dlltool.c:3797 +#, c-format +msgid " -y --output-delaylib Create a delay-import library.\n" +msgstr "" + +#: dlltool.c:3798 #, c-format msgid " -a --add-indirect Add dll indirects to export file.\n" msgstr "" -#: dlltool.c:3142 +#: dlltool.c:3799 #, c-format msgid "" " -D --dllname Name of input dll to put into interface lib.\n" msgstr "" -#: dlltool.c:3143 +#: dlltool.c:3800 #, c-format msgid " -d --input-def Name of .def file to be read in.\n" msgstr "" -#: dlltool.c:3144 +#: dlltool.c:3801 #, c-format msgid " -z --output-def Name of .def file to be created.\n" msgstr "" -#: dlltool.c:3145 +#: dlltool.c:3802 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" msgstr "" -#: dlltool.c:3146 +#: dlltool.c:3803 #, c-format msgid " --no-export-all-symbols Only export listed symbols\n" msgstr "" -#: dlltool.c:3147 +#: dlltool.c:3804 #, c-format msgid " --exclude-symbols Don't export \n" msgstr "" -#: dlltool.c:3148 +#: dlltool.c:3805 #, c-format msgid " --no-default-excludes Clear default exclude symbols\n" msgstr "" -#: dlltool.c:3149 +#: dlltool.c:3806 #, c-format msgid " -b --base-file Read linker generated base file.\n" msgstr "" -#: dlltool.c:3150 +#: dlltool.c:3807 #, c-format msgid " -x --no-idata4 Don't generate idata$4 section.\n" msgstr "" -#: dlltool.c:3151 +#: dlltool.c:3808 #, c-format msgid " -c --no-idata5 Don't generate idata$5 section.\n" msgstr "" -#: dlltool.c:3152 +#: dlltool.c:3809 +#, c-format +msgid "" +" --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata" +"$5.\n" +msgstr "" + +#: dlltool.c:3810 #, c-format msgid "" " -U --add-underscore Add underscores to all symbols in interface " "library.\n" msgstr "" -#: dlltool.c:3153 +#: dlltool.c:3811 #, c-format msgid "" " --add-stdcall-underscore Add underscores to stdcall symbols in " "interface library.\n" msgstr "" -#: dlltool.c:3154 +#: dlltool.c:3812 #, c-format msgid " -k --kill-at Kill @ from exported names.\n" msgstr "" -#: dlltool.c:3155 +#: dlltool.c:3813 #, c-format msgid " -A --add-stdcall-alias Add aliases without @.\n" msgstr "" -#: dlltool.c:3156 +#: dlltool.c:3814 #, c-format msgid " -p --ext-prefix-alias Add aliases with .\n" msgstr "" -#: dlltool.c:3157 +#: dlltool.c:3815 #, c-format msgid " -S --as Use for assembler.\n" msgstr "" -#: dlltool.c:3158 +#: dlltool.c:3816 #, c-format msgid " -f --as-flags Pass to the assembler.\n" msgstr "" -#: dlltool.c:3159 +#: dlltool.c:3817 #, c-format msgid "" " -C --compat-implib Create backward compatible import library.\n" msgstr "" -#: dlltool.c:3160 +#: dlltool.c:3818 #, c-format msgid "" " -n --no-delete Keep temp files (repeat for extra " "preservation).\n" msgstr "" -#: dlltool.c:3161 +#: dlltool.c:3819 #, c-format msgid "" " -t --temp-prefix Use to construct temp file names.\n" msgstr "" -#: dlltool.c:3162 +#: dlltool.c:3820 +#, c-format +msgid "" +" -I --identify Report the name of the DLL associated with " +".\n" +msgstr "" + +#: dlltool.c:3821 +#, c-format +msgid "" +" --identify-strict Causes --identify to report error when multiple " +"DLLs.\n" +msgstr "" + +#: dlltool.c:3822 #, c-format msgid " -v --verbose Be verbose.\n" msgstr "" -#: dlltool.c:3163 +#: dlltool.c:3823 #, c-format msgid " -V --version Display the program version.\n" msgstr "" -#: dlltool.c:3164 +#: dlltool.c:3824 #, c-format msgid " -h --help Display this information.\n" msgstr "" -#: dlltool.c:3165 +#: dlltool.c:3825 #, c-format msgid " @ Read options from .\n" msgstr "" -#: dlltool.c:3167 +#: dlltool.c:3827 #, c-format msgid "" " -M --mcore-elf Process mcore-elf object files into .\n" msgstr "" -#: dlltool.c:3168 +#: dlltool.c:3828 #, c-format msgid " -L --linker Use as the linker.\n" msgstr "" -#: dlltool.c:3169 +#: dlltool.c:3829 #, c-format msgid " -F --linker-flags Pass to the linker.\n" msgstr "" -#: dlltool.c:3292 +#: dlltool.c:3966 #, c-format msgid "Path components stripped from dllname, '%s'." msgstr "" -#: dlltool.c:3337 +#: dlltool.c:4014 #, c-format msgid "Unable to open base-file: %s" msgstr "" -#: dlltool.c:3369 +#: dlltool.c:4049 #, c-format msgid "Machine '%s' not supported" msgstr "" -#: dlltool.c:3473 dllwrap.c:201 +#: dlltool.c:4118 +#, c-format +msgid "Warning, machine type (%d) not supported for delayimport." +msgstr "" + +#: dlltool.c:4186 dllwrap.c:201 #, c-format msgid "Tried file: %s" msgstr "" -#: dlltool.c:3480 dllwrap.c:208 +#: dlltool.c:4193 dllwrap.c:208 #, c-format msgid "Using file: %s" msgstr "" @@ -1175,519 +1276,635 @@ msgstr "" msgid "DRIVER options : %s\n" msgstr "" -#: dwarf.c:93 dwarf.c:137 readelf.c:377 readelf.c:570 +#: dwarf.c:101 dwarf.c:145 readelf.c:355 readelf.c:520 #, c-format msgid "Unhandled data length: %d\n" msgstr "" -#: dwarf.c:237 +#: dwarf.c:294 dwarf.c:2625 msgid "badly formed extended line op encountered!\n" msgstr "" -#: dwarf.c:244 +#: dwarf.c:301 #, c-format msgid " Extended opcode %d: " msgstr "" -#: dwarf.c:249 +#: dwarf.c:306 #, c-format msgid "" "End of Sequence\n" "\n" msgstr "" -#: dwarf.c:255 +#: dwarf.c:312 #, c-format msgid "set Address to 0x%lx\n" msgstr "" -#: dwarf.c:260 +#: dwarf.c:317 #, c-format msgid " define new File Table entry\n" msgstr "" -#: dwarf.c:261 dwarf.c:1928 +#: dwarf.c:318 dwarf.c:2240 #, c-format msgid " Entry\tDir\tTime\tSize\tName\n" msgstr "" -#: dwarf.c:263 +#: dwarf.c:320 #, c-format msgid " %d\t" msgstr "" -#: dwarf.c:266 dwarf.c:268 dwarf.c:270 dwarf.c:1940 dwarf.c:1942 dwarf.c:1944 +#: dwarf.c:323 dwarf.c:325 dwarf.c:327 dwarf.c:2252 dwarf.c:2254 dwarf.c:2256 #, c-format msgid "%lu\t" msgstr "" -#: dwarf.c:271 +#: dwarf.c:328 #, c-format msgid "" "%s\n" "\n" msgstr "" -#: dwarf.c:275 +#: dwarf.c:332 +#, c-format +msgid "set Discriminator to %lu\n" +msgstr "" + +#. The test against DW_LNW_hi_user is redundant due to +#. the limited range of the unsigned char data type used +#. for op_code. +#. && op_code <= DW_LNE_hi_user +#: dwarf.c:374 +#, c-format +msgid "user defined: length %d\n" +msgstr "" + +#: dwarf.c:376 dwarf.c:2656 #, c-format msgid "UNKNOWN: length %d\n" msgstr "" -#: dwarf.c:288 +#: dwarf.c:389 msgid "" msgstr "" -#: dwarf.c:294 +#: dwarf.c:395 #, c-format msgid "DW_FORM_strp offset too big: %lx\n" msgstr "" -#: dwarf.c:295 +#: dwarf.c:396 msgid "" msgstr "" -#: dwarf.c:528 +#: dwarf.c:629 #, c-format msgid "Unknown TAG value: %lx" msgstr "" -#: dwarf.c:564 +#: dwarf.c:665 #, c-format msgid "Unknown FORM value: %lx" msgstr "" -#: dwarf.c:573 +#: dwarf.c:674 #, c-format msgid " %lu byte block: " msgstr "" -#: dwarf.c:910 +#: dwarf.c:1092 #, c-format msgid "(User defined location op)" msgstr "" -#: dwarf.c:912 +#: dwarf.c:1094 #, c-format msgid "(Unknown location op)" msgstr "" -#: dwarf.c:958 +#: dwarf.c:1142 msgid "Internal error: DWARF version is not 2 or 3.\n" msgstr "" -#: dwarf.c:1056 +#: dwarf.c:1241 msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" msgstr "" -#: dwarf.c:1105 +#: dwarf.c:1290 #, c-format msgid " (indirect string, offset: 0x%lx): %s" msgstr "" -#: dwarf.c:1114 +#: dwarf.c:1299 #, c-format msgid "Unrecognized form: %lu\n" msgstr "" -#: dwarf.c:1199 +#: dwarf.c:1383 #, c-format msgid "(not inlined)" msgstr "" -#: dwarf.c:1202 +#: dwarf.c:1386 #, c-format msgid "(inlined)" msgstr "" -#: dwarf.c:1205 +#: dwarf.c:1389 #, c-format msgid "(declared as inline but ignored)" msgstr "" -#: dwarf.c:1208 +#: dwarf.c:1392 #, c-format msgid "(declared as inline and inlined)" msgstr "" -#: dwarf.c:1211 +#: dwarf.c:1395 #, c-format msgid " (Unknown inline attribute value: %lx)" msgstr "" -#: dwarf.c:1368 dwarf.c:2462 +#: dwarf.c:1556 +#, c-format +msgid "(location list)" +msgstr "" + +#: dwarf.c:1575 dwarf.c:3257 #, c-format msgid " [without DW_AT_frame_base]" msgstr "" -#: dwarf.c:1371 +#: dwarf.c:1587 #, c-format -msgid "(location list)" +msgid "" +"Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is " +"too big.\n" msgstr "" -#: dwarf.c:1489 +#: dwarf.c:1761 #, c-format msgid "Unknown AT value: %lx" msgstr "" -#: dwarf.c:1558 +#: dwarf.c:1828 +#, c-format +msgid "Reserved length value (%lx) found in section %s\n" +msgstr "" + +#: dwarf.c:1839 +#, c-format +msgid "Corrupt unit length (%lx) found in section %s\n" +msgstr "" + +#: dwarf.c:1846 #, c-format msgid "No comp units in %s section ?" msgstr "" -#: dwarf.c:1567 +#: dwarf.c:1855 #, c-format msgid "Not enough memory for a debug info array of %u entries" msgstr "" -#: dwarf.c:1575 dwarf.c:2550 +#: dwarf.c:1863 dwarf.c:2858 dwarf.c:2952 dwarf.c:3026 dwarf.c:3143 +#: dwarf.c:3292 dwarf.c:3350 dwarf.c:3546 #, c-format msgid "" -"The section %s contains:\n" +"Contents of the %s section:\n" "\n" msgstr "" -#: dwarf.c:1583 +#: dwarf.c:1871 #, c-format msgid "Unable to locate %s section!\n" msgstr "" -#: dwarf.c:1646 +#: dwarf.c:1934 #, c-format msgid " Compilation Unit @ offset 0x%lx:\n" msgstr "" -#: dwarf.c:1647 +#: dwarf.c:1935 #, c-format -msgid " Length: %ld\n" +msgid " Length: 0x%lx (%s)\n" msgstr "" -#: dwarf.c:1648 +#: dwarf.c:1937 #, c-format msgid " Version: %d\n" msgstr "" -#: dwarf.c:1649 +#: dwarf.c:1938 #, c-format msgid " Abbrev Offset: %ld\n" msgstr "" -#: dwarf.c:1650 +#: dwarf.c:1939 #, c-format msgid " Pointer Size: %d\n" msgstr "" -#: dwarf.c:1656 +#: dwarf.c:1945 #, c-format -msgid "Debug info is corrupted, length is invalid (section is %lu bytes)\n" +msgid "" +"Debug info is corrupted, length of CU at %lx extends beyond end of section " +"(length = %lx)\n" msgstr "" -#: dwarf.c:1665 -msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" +#: dwarf.c:1954 +#, c-format +msgid "CU at offset %lx contains corrupt or unsupported version number: %d.\n" +msgstr "" + +#: dwarf.c:1964 +#, c-format +msgid "" +"Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section " +"size (%lx)\n" msgstr "" -#: dwarf.c:1674 +#: dwarf.c:1998 #, c-format msgid "" -"Debug info is corrupted, abbrev offset is invalid (section is %lu bytes)\n" +"Bogus end-of-siblings marker detected at offset %lx in .debug_info section\n" +msgstr "" + +#: dwarf.c:2002 +msgid "Further warnings about bogus end-of-sibling markers suppressed\n" msgstr "" -#: dwarf.c:1702 +#: dwarf.c:2009 #, c-format msgid " <%d><%lx>: Abbrev Number: %lu" msgstr "" -#: dwarf.c:1722 +#: dwarf.c:2026 #, c-format -msgid "Unable to locate entry %lu in the abbreviation table\n" +msgid "" +"DIE at offset %lx refers to abbreviation number %lu which does not exist\n" msgstr "" -#: dwarf.c:1728 +#: dwarf.c:2032 #, c-format msgid " (%s)\n" msgstr "" -#: dwarf.c:1813 +#: dwarf.c:2123 #, c-format msgid "" -"\n" -"Dump of debug contents of section %s:\n" +"Raw dump of debug contents of section %s:\n" "\n" msgstr "" -#: dwarf.c:1851 -msgid "The line info appears to be corrupt - the section is too small\n" +#: dwarf.c:2161 +#, c-format +msgid "" +"The information in section %s appears to be corrupt - the section is too " +"small\n" msgstr "" -#: dwarf.c:1860 +#: dwarf.c:2171 dwarf.c:2459 msgid "Only DWARF version 2 and 3 line info is currently supported.\n" msgstr "" -#: dwarf.c:1881 +#: dwarf.c:2192 +#, c-format +msgid " Offset: 0x%lx\n" +msgstr "" + +#: dwarf.c:2193 #, c-format msgid " Length: %ld\n" msgstr "" -#: dwarf.c:1882 +#: dwarf.c:2194 #, c-format msgid " DWARF Version: %d\n" msgstr "" -#: dwarf.c:1883 +#: dwarf.c:2195 #, c-format msgid " Prologue Length: %d\n" msgstr "" -#: dwarf.c:1884 +#: dwarf.c:2196 #, c-format msgid " Minimum Instruction Length: %d\n" msgstr "" -#: dwarf.c:1885 +#: dwarf.c:2197 #, c-format msgid " Initial value of 'is_stmt': %d\n" msgstr "" -#: dwarf.c:1886 +#: dwarf.c:2198 #, c-format msgid " Line Base: %d\n" msgstr "" -#: dwarf.c:1887 +#: dwarf.c:2199 #, c-format msgid " Line Range: %d\n" msgstr "" -#: dwarf.c:1888 +#: dwarf.c:2200 #, c-format msgid " Opcode Base: %d\n" msgstr "" -#: dwarf.c:1897 +#: dwarf.c:2209 #, c-format msgid "" "\n" " Opcodes:\n" msgstr "" -#: dwarf.c:1900 +#: dwarf.c:2212 #, c-format msgid " Opcode %d has %d args\n" msgstr "" -#: dwarf.c:1906 +#: dwarf.c:2218 #, c-format msgid "" "\n" " The Directory Table is empty.\n" msgstr "" -#: dwarf.c:1909 +#: dwarf.c:2221 #, c-format msgid "" "\n" " The Directory Table:\n" msgstr "" -#: dwarf.c:1913 +#: dwarf.c:2225 #, c-format msgid " %s\n" msgstr "" -#: dwarf.c:1924 +#: dwarf.c:2236 #, c-format msgid "" "\n" " The File Name Table is empty.\n" msgstr "" -#: dwarf.c:1927 +#: dwarf.c:2239 #, c-format msgid "" "\n" " The File Name Table:\n" msgstr "" -#: dwarf.c:1935 +#: dwarf.c:2247 #, c-format msgid " %d\t" msgstr "" -#: dwarf.c:1946 +#: dwarf.c:2258 #, c-format msgid "%s\n" msgstr "" #. Now display the statements. -#: dwarf.c:1954 +#: dwarf.c:2266 #, c-format msgid "" "\n" " Line Number Statements:\n" msgstr "" -#: dwarf.c:1970 +#: dwarf.c:2282 #, c-format msgid " Special opcode %d: advance Address by %lu to 0x%lx" msgstr "" -#: dwarf.c:1974 +#: dwarf.c:2286 #, c-format msgid " and Line by %d to %d\n" msgstr "" -#: dwarf.c:1984 +#: dwarf.c:2296 #, c-format msgid " Copy\n" msgstr "" -#: dwarf.c:1992 +#: dwarf.c:2304 #, c-format msgid " Advance PC by %lu to 0x%lx\n" msgstr "" -#: dwarf.c:2000 +#: dwarf.c:2312 #, c-format msgid " Advance Line by %d to %d\n" msgstr "" -#: dwarf.c:2007 +#: dwarf.c:2319 #, c-format msgid " Set File Name to entry %d in the File Name Table\n" msgstr "" -#: dwarf.c:2015 +#: dwarf.c:2327 #, c-format msgid " Set column to %lu\n" msgstr "" -#: dwarf.c:2022 +#: dwarf.c:2334 #, c-format msgid " Set is_stmt to %d\n" msgstr "" -#: dwarf.c:2027 +#: dwarf.c:2339 #, c-format msgid " Set basic block\n" msgstr "" -#: dwarf.c:2035 +#: dwarf.c:2347 #, c-format msgid " Advance PC by constant %lu to 0x%lx\n" msgstr "" -#: dwarf.c:2043 +#: dwarf.c:2355 #, c-format msgid " Advance PC by fixed size amount %lu to 0x%lx\n" msgstr "" -#: dwarf.c:2048 +#: dwarf.c:2360 #, c-format msgid " Set prologue_end to true\n" msgstr "" -#: dwarf.c:2052 +#: dwarf.c:2364 #, c-format msgid " Set epilogue_begin to true\n" msgstr "" -#: dwarf.c:2058 +#: dwarf.c:2370 dwarf.c:2734 #, c-format msgid " Set ISA to %lu\n" msgstr "" -#: dwarf.c:2062 +#: dwarf.c:2374 dwarf.c:2738 #, c-format msgid " Unknown opcode %d with operands: " msgstr "" -#: dwarf.c:2088 dwarf.c:2174 dwarf.c:2248 dwarf.c:2360 dwarf.c:2492 -#: dwarf.c:2731 +#: dwarf.c:2407 +#, c-format +msgid "" +"Decoded dump of debug contents of section %s:\n" +"\n" +msgstr "" + +#: dwarf.c:2449 +msgid "The line info appears to be corrupt - the section is too small\n" +msgstr "" + +#: dwarf.c:2568 +#, c-format +msgid "CU: %s:\n" +msgstr "" + +#: dwarf.c:2569 dwarf.c:2582 +#, c-format +msgid "File name Line number Starting address\n" +msgstr "" + +#: dwarf.c:2575 +#, c-format +msgid "CU: %s/%s:\n" +msgstr "" + +#: dwarf.c:2580 dwarf.c:2652 +#, c-format +msgid "%s:\n" +msgstr "" + +#. If directory index is 0, that means current directory. +#: dwarf.c:2685 +#, c-format +msgid "" +"\n" +"./%s:[++]\n" +msgstr "" + +#. The directory index starts counting at 1. +#: dwarf.c:2691 #, c-format msgid "" -"Contents of the %s section:\n" "\n" +"%s/%s:\n" msgstr "" -#: dwarf.c:2128 +#: dwarf.c:2776 +#, c-format +msgid "%-35s %11d %#18lx\n" +msgstr "" + +#: dwarf.c:2781 +#, c-format +msgid "%s %11d %#18lx\n" +msgstr "" + +#: dwarf.c:2811 dwarf.c:3088 dwarf.c:3510 +#, c-format +msgid "" +"Unable to load/parse the .debug_info section, so cannot interpret the %s " +"section.\n" +msgstr "" + +#: dwarf.c:2892 dwarf.c:3395 +#, c-format +msgid "" +".debug_info offset of 0x%lx in %s section does not point to a CU header.\n" +msgstr "" + +#: dwarf.c:2906 msgid "Only DWARF 2 and 3 pubnames are currently supported\n" msgstr "" -#: dwarf.c:2135 +#: dwarf.c:2913 #, c-format msgid " Length: %ld\n" msgstr "" -#: dwarf.c:2137 +#: dwarf.c:2915 #, c-format msgid " Version: %d\n" msgstr "" -#: dwarf.c:2139 +#: dwarf.c:2917 #, c-format -msgid " Offset into .debug_info section: %ld\n" +msgid " Offset into .debug_info section: 0x%lx\n" msgstr "" -#: dwarf.c:2141 +#: dwarf.c:2919 #, c-format msgid " Size of area in .debug_info section: %ld\n" msgstr "" -#: dwarf.c:2144 +#: dwarf.c:2922 #, c-format msgid "" "\n" " Offset\tName\n" msgstr "" -#: dwarf.c:2195 +#: dwarf.c:2973 #, c-format msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" msgstr "" -#: dwarf.c:2201 +#: dwarf.c:2979 #, c-format msgid " DW_MACINFO_end_file\n" msgstr "" -#: dwarf.c:2209 +#: dwarf.c:2987 #, c-format msgid " DW_MACINFO_define - lineno : %d macro : %s\n" msgstr "" -#: dwarf.c:2218 +#: dwarf.c:2996 #, c-format msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" msgstr "" -#: dwarf.c:2230 +#: dwarf.c:3008 #, c-format msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" msgstr "" -#: dwarf.c:2259 +#: dwarf.c:3037 #, c-format msgid " Number TAG\n" msgstr "" -#: dwarf.c:2265 +#: dwarf.c:3043 #, c-format msgid " %ld %s [%s]\n" msgstr "" -#: dwarf.c:2268 +#: dwarf.c:3046 msgid "has children" msgstr "" -#: dwarf.c:2268 +#: dwarf.c:3046 msgid "no children" msgstr "" -#: dwarf.c:2271 +#: dwarf.c:3049 #, c-format msgid " %-18s %s\n" msgstr "" -#: dwarf.c:2304 dwarf.c:2488 dwarf.c:2675 +#: dwarf.c:3082 dwarf.c:3288 dwarf.c:3504 #, c-format msgid "" "\n" @@ -1695,184 +1912,201 @@ msgid "" msgstr "" #. FIXME: Should we handle this case? -#: dwarf.c:2349 +#: dwarf.c:3132 msgid "Location lists in .debug_info section aren't in ascending order!\n" msgstr "" -#: dwarf.c:2352 +#: dwarf.c:3135 msgid "No location lists in .debug_info section!\n" msgstr "" -#: dwarf.c:2357 +#: dwarf.c:3140 #, c-format msgid "Location lists in %s section start at 0x%lx\n" msgstr "" -#: dwarf.c:2361 +#: dwarf.c:3144 #, c-format msgid " Offset Begin End Expression\n" msgstr "" -#: dwarf.c:2392 +#: dwarf.c:3175 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "" -#: dwarf.c:2395 +#: dwarf.c:3179 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "" -#: dwarf.c:2402 +#: dwarf.c:3187 #, c-format msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" msgstr "" -#: dwarf.c:2411 dwarf.c:2438 dwarf.c:2448 +#: dwarf.c:3196 dwarf.c:3231 dwarf.c:3241 #, c-format msgid "Location list starting at offset 0x%lx is not terminated.\n" msgstr "" -#: dwarf.c:2423 dwarf.c:2776 +#: dwarf.c:3215 dwarf.c:3597 #, c-format -msgid " %8.8lx \n" +msgid "\n" msgstr "" -#: dwarf.c:2431 +#: dwarf.c:3225 #, c-format -msgid " %8.8lx %8.8lx %8.8lx (base address)\n" +msgid "(base address)\n" msgstr "" -#: dwarf.c:2465 dwarf.c:2793 +#: dwarf.c:3260 msgid " (start == end)" msgstr "" -#: dwarf.c:2467 dwarf.c:2795 +#: dwarf.c:3262 msgid " (start > end)" msgstr "" -#: dwarf.c:2596 +#: dwarf.c:3272 +#, c-format +msgid "There are %ld unused bytes at the end of section %s\n" +msgstr "" + +#: dwarf.c:3406 msgid "Only DWARF 2 and 3 aranges are currently supported.\n" msgstr "" -#: dwarf.c:2600 +#: dwarf.c:3410 #, c-format msgid " Length: %ld\n" msgstr "" -#: dwarf.c:2601 +#: dwarf.c:3411 #, c-format msgid " Version: %d\n" msgstr "" -#: dwarf.c:2602 +#: dwarf.c:3412 #, c-format -msgid " Offset into .debug_info: %lx\n" +msgid " Offset into .debug_info: 0x%lx\n" msgstr "" -#: dwarf.c:2603 +#: dwarf.c:3413 #, c-format msgid " Pointer Size: %d\n" msgstr "" -#: dwarf.c:2604 +#: dwarf.c:3414 #, c-format msgid " Segment Size: %d\n" msgstr "" -#: dwarf.c:2613 +#: dwarf.c:3423 msgid "Pointer size + Segment size is not a power of two.\n" msgstr "" -#: dwarf.c:2618 +#: dwarf.c:3428 #, c-format msgid "" "\n" " Address Length\n" msgstr "" -#: dwarf.c:2620 +#: dwarf.c:3430 #, c-format msgid "" "\n" " Address Length\n" msgstr "" -#. FIXME: Should we handle this case? -#: dwarf.c:2720 -msgid "Range lists in .debug_info section aren't in ascending order!\n" -msgstr "" - -#: dwarf.c:2723 +#: dwarf.c:3520 msgid "No range lists in .debug_info section!\n" msgstr "" -#: dwarf.c:2728 +#: dwarf.c:3543 #, c-format msgid "Range lists in %s section start at 0x%lx\n" msgstr "" -#: dwarf.c:2732 +#: dwarf.c:3547 #, c-format msgid " Offset Begin End\n" msgstr "" -#: dwarf.c:2757 +#: dwarf.c:3568 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" msgstr "" -#: dwarf.c:2761 +#: dwarf.c:3572 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" msgstr "" -#: dwarf.c:2963 +#: dwarf.c:3615 +msgid "(start == end)" +msgstr "" + +#: dwarf.c:3617 +msgid "(start > end)" +msgstr "" + +#: dwarf.c:3853 +msgid "bad register: " +msgstr "" + +#: dwarf.c:3855 #, c-format -msgid "The section %s contains:\n" +msgid "Contents of the %s section:\n" msgstr "" -#: dwarf.c:3650 +#: dwarf.c:4619 #, c-format msgid " DW_CFA_??? (User defined call frame op: %#x)\n" msgstr "" -#: dwarf.c:3652 +#: dwarf.c:4621 #, c-format msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" msgstr "" -#: dwarf.c:3676 +#: dwarf.c:4645 #, c-format msgid "Displaying the debug contents of section %s is not yet supported.\n" msgstr "" -#: dwarf.c:3718 +#: dwarf.c:4687 #, c-format msgid "%s: Error: " msgstr "" -#: dwarf.c:3729 +#: dwarf.c:4698 #, c-format msgid "%s: Warning: " msgstr "" -#: emul_aix.c:51 +#: dwarf.c:4796 dwarf.c:4862 +#, c-format +msgid "Unrecognized debug option '%s'\n" +msgstr "" + +#: emul_aix.c:43 #, c-format msgid " [-g] - 32 bit small archive\n" msgstr "" -#: emul_aix.c:52 +#: emul_aix.c:44 #, c-format msgid " [-X32] - ignores 64 bit objects\n" msgstr "" -#: emul_aix.c:53 +#: emul_aix.c:45 #, c-format msgid " [-X64] - ignores 32 bit objects\n" msgstr "" -#: emul_aix.c:54 +#: emul_aix.c:46 #, c-format msgid " [-X32_64] - accepts 32 and 64 bit objects\n" msgstr "" @@ -1929,186 +2163,186 @@ msgstr "" msgid "blocks left on stack at end" msgstr "" -#: ieee.c:1196 +#: ieee.c:1206 msgid "unknown BB type" msgstr "" -#: ieee.c:1205 +#: ieee.c:1215 msgid "stack overflow" msgstr "" -#: ieee.c:1228 +#: ieee.c:1238 msgid "stack underflow" msgstr "" -#: ieee.c:1340 ieee.c:1410 ieee.c:2107 +#: ieee.c:1350 ieee.c:1420 ieee.c:2118 msgid "illegal variable index" msgstr "" -#: ieee.c:1388 +#: ieee.c:1398 msgid "illegal type index" msgstr "" -#: ieee.c:1398 ieee.c:1435 +#: ieee.c:1408 ieee.c:1445 msgid "unknown TY code" msgstr "" -#: ieee.c:1417 +#: ieee.c:1427 msgid "undefined variable in TY" msgstr "" #. Pascal file name. FIXME. -#: ieee.c:1828 +#: ieee.c:1839 msgid "Pascal file name not supported" msgstr "" -#: ieee.c:1876 +#: ieee.c:1887 msgid "unsupported qualifier" msgstr "" -#: ieee.c:2145 +#: ieee.c:2156 msgid "undefined variable in ATN" msgstr "" -#: ieee.c:2188 +#: ieee.c:2199 msgid "unknown ATN type" msgstr "" #. Reserved for FORTRAN common. -#: ieee.c:2310 +#: ieee.c:2321 msgid "unsupported ATN11" msgstr "" #. We have no way to record this information. FIXME. -#: ieee.c:2337 +#: ieee.c:2348 msgid "unsupported ATN12" msgstr "" -#: ieee.c:2397 +#: ieee.c:2408 msgid "unexpected string in C++ misc" msgstr "" -#: ieee.c:2410 +#: ieee.c:2421 msgid "bad misc record" msgstr "" -#: ieee.c:2451 +#: ieee.c:2462 msgid "unrecognized C++ misc record" msgstr "" -#: ieee.c:2566 +#: ieee.c:2577 msgid "undefined C++ object" msgstr "" -#: ieee.c:2600 +#: ieee.c:2611 msgid "unrecognized C++ object spec" msgstr "" -#: ieee.c:2636 +#: ieee.c:2647 msgid "unsupported C++ object type" msgstr "" -#: ieee.c:2646 +#: ieee.c:2657 msgid "C++ base class not defined" msgstr "" -#: ieee.c:2658 ieee.c:2763 +#: ieee.c:2669 ieee.c:2774 msgid "C++ object has no fields" msgstr "" -#: ieee.c:2677 +#: ieee.c:2688 msgid "C++ base class not found in container" msgstr "" -#: ieee.c:2784 +#: ieee.c:2795 msgid "C++ data member not found in container" msgstr "" -#: ieee.c:2825 ieee.c:2975 +#: ieee.c:2836 ieee.c:2986 msgid "unknown C++ visibility" msgstr "" -#: ieee.c:2859 +#: ieee.c:2870 msgid "bad C++ field bit pos or size" msgstr "" -#: ieee.c:2951 +#: ieee.c:2962 msgid "bad type for C++ method function" msgstr "" -#: ieee.c:2961 +#: ieee.c:2972 msgid "no type information for C++ method function" msgstr "" -#: ieee.c:3000 +#: ieee.c:3011 msgid "C++ static virtual method" msgstr "" -#: ieee.c:3095 +#: ieee.c:3106 msgid "unrecognized C++ object overhead spec" msgstr "" -#: ieee.c:3134 +#: ieee.c:3145 msgid "undefined C++ vtable" msgstr "" -#: ieee.c:3203 +#: ieee.c:3214 msgid "C++ default values not in a function" msgstr "" -#: ieee.c:3243 +#: ieee.c:3254 msgid "unrecognized C++ default type" msgstr "" -#: ieee.c:3274 +#: ieee.c:3285 msgid "reference parameter is not a pointer" msgstr "" -#: ieee.c:3357 +#: ieee.c:3368 msgid "unrecognized C++ reference type" msgstr "" -#: ieee.c:3439 +#: ieee.c:3450 msgid "C++ reference not found" msgstr "" -#: ieee.c:3447 +#: ieee.c:3458 msgid "C++ reference is not pointer" msgstr "" -#: ieee.c:3473 ieee.c:3481 +#: ieee.c:3484 ieee.c:3492 msgid "missing required ASN" msgstr "" -#: ieee.c:3508 ieee.c:3516 +#: ieee.c:3519 ieee.c:3527 msgid "missing required ATN65" msgstr "" -#: ieee.c:3530 +#: ieee.c:3541 msgid "bad ATN65 record" msgstr "" -#: ieee.c:4158 +#: ieee.c:4169 #, c-format msgid "IEEE numeric overflow: 0x" msgstr "" -#: ieee.c:4202 +#: ieee.c:4213 #, c-format msgid "IEEE string length overflow: %u\n" msgstr "" -#: ieee.c:5203 +#: ieee.c:5210 #, c-format msgid "IEEE unsupported integer type size %u\n" msgstr "" -#: ieee.c:5237 +#: ieee.c:5244 #, c-format msgid "IEEE unsupported float type size %u\n" msgstr "" -#: ieee.c:5271 +#: ieee.c:5278 #, c-format msgid "IEEE unsupported complex type size %u\n" msgstr "" @@ -2117,124 +2351,120 @@ msgstr "" msgid "Duplicate symbol entered into keyword list." msgstr "" -#: nlmconv.c:271 srconv.c:1815 +#: nlmconv.c:273 srconv.c:1822 msgid "input and output files must be different" msgstr "" -#: nlmconv.c:318 +#: nlmconv.c:320 msgid "input file named both on command line and with INPUT" msgstr "" -#: nlmconv.c:327 +#: nlmconv.c:329 msgid "no input file" msgstr "" -#: nlmconv.c:357 +#: nlmconv.c:359 msgid "no name for output file" msgstr "" -#: nlmconv.c:371 +#: nlmconv.c:373 msgid "warning: input and output formats are not compatible" msgstr "" -#: nlmconv.c:400 +#: nlmconv.c:403 msgid "make .bss section" msgstr "" -#: nlmconv.c:409 +#: nlmconv.c:413 msgid "make .nlmsections section" msgstr "" -#: nlmconv.c:411 -msgid "set .nlmsections flags" -msgstr "" - -#: nlmconv.c:439 +#: nlmconv.c:441 msgid "set .bss vma" msgstr "" -#: nlmconv.c:446 +#: nlmconv.c:448 msgid "set .data size" msgstr "" -#: nlmconv.c:626 +#: nlmconv.c:628 #, c-format msgid "warning: symbol %s imported but not in import list" msgstr "" -#: nlmconv.c:646 +#: nlmconv.c:648 msgid "set start address" msgstr "" -#: nlmconv.c:695 +#: nlmconv.c:697 #, c-format msgid "warning: START procedure %s not defined" msgstr "" -#: nlmconv.c:697 +#: nlmconv.c:699 #, c-format msgid "warning: EXIT procedure %s not defined" msgstr "" -#: nlmconv.c:699 +#: nlmconv.c:701 #, c-format msgid "warning: CHECK procedure %s not defined" msgstr "" -#: nlmconv.c:720 nlmconv.c:909 +#: nlmconv.c:721 nlmconv.c:907 msgid "custom section" msgstr "" -#: nlmconv.c:741 nlmconv.c:938 +#: nlmconv.c:741 nlmconv.c:936 msgid "help section" msgstr "" -#: nlmconv.c:763 nlmconv.c:956 +#: nlmconv.c:763 nlmconv.c:954 msgid "message section" msgstr "" -#: nlmconv.c:779 nlmconv.c:989 +#: nlmconv.c:778 nlmconv.c:987 msgid "module section" msgstr "" -#: nlmconv.c:799 nlmconv.c:1005 +#: nlmconv.c:797 nlmconv.c:1003 msgid "rpc section" msgstr "" #. There is no place to record this information. -#: nlmconv.c:835 +#: nlmconv.c:833 #, c-format msgid "%s: warning: shared libraries can not have uninitialized data" msgstr "" -#: nlmconv.c:856 nlmconv.c:1024 +#: nlmconv.c:854 nlmconv.c:1022 msgid "shared section" msgstr "" -#: nlmconv.c:864 +#: nlmconv.c:862 msgid "warning: No version number given" msgstr "" -#: nlmconv.c:904 nlmconv.c:933 nlmconv.c:951 nlmconv.c:1000 nlmconv.c:1019 +#: nlmconv.c:902 nlmconv.c:931 nlmconv.c:949 nlmconv.c:998 nlmconv.c:1017 #, c-format msgid "%s: read: %s" msgstr "" -#: nlmconv.c:926 +#: nlmconv.c:924 msgid "warning: FULLMAP is not supported; try ld -M" msgstr "" -#: nlmconv.c:1102 +#: nlmconv.c:1100 #, c-format msgid "Usage: %s [option(s)] [in-file [out-file]]\n" msgstr "" -#: nlmconv.c:1103 +#: nlmconv.c:1101 #, c-format msgid " Convert an object file into a NetWare Loadable Module\n" msgstr "" -#: nlmconv.c:1104 +#: nlmconv.c:1102 #, c-format msgid "" " The options are:\n" @@ -2248,74 +2478,74 @@ msgid "" " -v --version Display the program's version\n" msgstr "" -#: nlmconv.c:1145 +#: nlmconv.c:1143 #, c-format msgid "support not compiled in for %s" msgstr "" -#: nlmconv.c:1182 +#: nlmconv.c:1180 msgid "make section" msgstr "" -#: nlmconv.c:1196 +#: nlmconv.c:1194 msgid "set section size" msgstr "" -#: nlmconv.c:1202 +#: nlmconv.c:1200 msgid "set section alignment" msgstr "" -#: nlmconv.c:1206 +#: nlmconv.c:1204 msgid "set section flags" msgstr "" -#: nlmconv.c:1217 +#: nlmconv.c:1215 msgid "set .nlmsections size" msgstr "" -#: nlmconv.c:1298 nlmconv.c:1306 nlmconv.c:1315 nlmconv.c:1320 +#: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318 msgid "set .nlmsection contents" msgstr "" -#: nlmconv.c:1799 +#: nlmconv.c:1795 msgid "stub section sizes" msgstr "" -#: nlmconv.c:1846 +#: nlmconv.c:1842 msgid "writing stub" msgstr "" -#: nlmconv.c:1930 +#: nlmconv.c:1926 #, c-format msgid "unresolved PC relative reloc against %s" msgstr "" -#: nlmconv.c:1994 +#: nlmconv.c:1990 #, c-format msgid "overflow when adjusting relocation against %s" msgstr "" -#: nlmconv.c:2121 +#: nlmconv.c:2117 #, c-format msgid "%s: execution of %s failed: " msgstr "" -#: nlmconv.c:2136 +#: nlmconv.c:2132 #, c-format msgid "Execution of %s failed" msgstr "" -#: nm.c:213 size.c:83 strings.c:705 +#: nm.c:220 size.c:78 strings.c:659 #, c-format msgid "Usage: %s [option(s)] [file(s)]\n" msgstr "" -#: nm.c:214 +#: nm.c:221 #, c-format msgid " List symbols in [file(s)] (a.out by default).\n" msgstr "" -#: nm.c:215 +#: nm.c:222 #, c-format msgid "" " The options are:\n" @@ -2344,8 +2574,18 @@ msgid "" " -p, --no-sort Do not sort the symbols\n" " -P, --portability Same as --format=posix\n" " -r, --reverse-sort Reverse the sense of the sort\n" +msgstr "" + +#: nm.c:245 +#, c-format +msgid " --plugin NAME Load the specified plugin\n" +msgstr "" + +#: nm.c:248 +#, c-format +msgid "" " -S, --print-size Print size of defined symbols\n" -" -s, --print-armap Include index for symbols from archive members\n" +"\t\t -s, --print-armap Include index for symbols from archive members\n" " --size-sort Sort symbols by size\n" " --special-syms Include special symbols in the output\n" " --synthetic Display synthetic symbols as well\n" @@ -2359,39 +2599,39 @@ msgid "" "\n" msgstr "" -#: nm.c:276 +#: nm.c:292 #, c-format msgid "%s: invalid radix" msgstr "" -#: nm.c:300 +#: nm.c:316 #, c-format msgid "%s: invalid output format" msgstr "" -#: nm.c:321 readelf.c:6853 readelf.c:6891 +#: nm.c:337 readelf.c:6917 readelf.c:6962 #, c-format msgid ": %d" msgstr "" -#: nm.c:323 readelf.c:6856 readelf.c:6903 +#: nm.c:339 readelf.c:6926 readelf.c:6980 #, c-format msgid ": %d" msgstr "" -#: nm.c:325 readelf.c:6858 readelf.c:6906 +#: nm.c:341 readelf.c:6929 readelf.c:6983 #, c-format msgid ": %d" msgstr "" -#: nm.c:365 +#: nm.c:381 #, c-format msgid "" "\n" "Archive index:\n" msgstr "" -#: nm.c:1225 +#: nm.c:1242 #, c-format msgid "" "\n" @@ -2400,7 +2640,7 @@ msgid "" "\n" msgstr "" -#: nm.c:1227 +#: nm.c:1244 #, c-format msgid "" "\n" @@ -2409,7 +2649,7 @@ msgid "" "\n" msgstr "" -#: nm.c:1229 nm.c:1280 +#: nm.c:1246 nm.c:1297 #, c-format msgid "" "Name Value Class Type Size Line " @@ -2417,7 +2657,7 @@ msgid "" "\n" msgstr "" -#: nm.c:1232 nm.c:1283 +#: nm.c:1249 nm.c:1300 #, c-format msgid "" "Name Value Class Type " @@ -2425,7 +2665,7 @@ msgid "" "\n" msgstr "" -#: nm.c:1276 +#: nm.c:1293 #, c-format msgid "" "\n" @@ -2434,7 +2674,7 @@ msgid "" "\n" msgstr "" -#: nm.c:1278 +#: nm.c:1295 #, c-format msgid "" "\n" @@ -2443,44 +2683,44 @@ msgid "" "\n" msgstr "" -#: nm.c:1370 +#: nm.c:1387 #, c-format msgid "Print width has not been initialized (%d)" msgstr "" -#: nm.c:1595 +#: nm.c:1615 msgid "Only -X 32_64 is supported" msgstr "" -#: nm.c:1615 +#: nm.c:1643 msgid "Using the --size-sort and --undefined-only options together" msgstr "" -#: nm.c:1616 +#: nm.c:1644 msgid "will produce no output, since undefined symbols have no size." msgstr "" -#: nm.c:1644 +#: nm.c:1672 #, c-format msgid "data size %ld" msgstr "" -#: objcopy.c:426 srconv.c:1723 +#: objcopy.c:463 srconv.c:1730 #, c-format msgid "Usage: %s [option(s)] in-file [out-file]\n" msgstr "" -#: objcopy.c:427 +#: objcopy.c:464 #, c-format msgid " Copies a binary file, possibly transforming it in the process\n" msgstr "" -#: objcopy.c:428 objcopy.c:524 +#: objcopy.c:465 objcopy.c:572 #, c-format msgid " The options are:\n" msgstr "" -#: objcopy.c:429 +#: objcopy.c:466 #, c-format msgid "" " -I --input-target Assume input file is in format \n" @@ -2556,6 +2796,9 @@ msgid "" " --add-section = Add section found in to " "output\n" " --rename-section =[,] Rename section to \n" +" --long-section-names {enable|disable|keep}\n" +" Handle long section names in Coff " +"objects.\n" " --change-leading-char Force output format's leading character " "style\n" " --remove-leading-char Remove leading character from global " @@ -2593,7 +2836,17 @@ msgid "" " Add to start of every " "allocatable\n" " section name\n" -" -v --verbose List all object files modified\n" +" --file-alignment Set PE file alignment to \n" +" --heap [,] Set PE reserve/commit heap to /\n" +" \n" +" --image-base

Set PE image base to
\n" +" --section-alignment Set PE section alignment to \n" +" --stack [,] Set PE reserve/commit stack to " +"/\n" +" \n" +" --subsystem [:]\n" +" Set PE subsystem to [& ]\n" +"] -v --verbose List all object files modified\n" " @ Read options from \n" " -V --version Display this program's version number\n" " -h --help Display this output\n" @@ -2601,17 +2854,17 @@ msgid "" "supported\n" msgstr "" -#: objcopy.c:522 +#: objcopy.c:570 #, c-format msgid "Usage: %s in-file(s)\n" msgstr "" -#: objcopy.c:523 +#: objcopy.c:571 #, c-format msgid " Removes symbols and sections from files\n" msgstr "" -#: objcopy.c:525 +#: objcopy.c:573 #, c-format msgid "" " -I --input-target= Assume input file is in format \n" @@ -2643,297 +2896,354 @@ msgid "" " -o Place stripped output into \n" msgstr "" -#: objcopy.c:598 +#: objcopy.c:646 #, c-format msgid "unrecognized section flag `%s'" msgstr "" -#: objcopy.c:599 +#: objcopy.c:647 #, c-format msgid "supported flags: %s" msgstr "" -#: objcopy.c:679 +#: objcopy.c:748 #, c-format msgid "cannot open '%s': %s" msgstr "" -#: objcopy.c:682 objcopy.c:2987 +#: objcopy.c:751 objcopy.c:3335 #, c-format msgid "%s: fread failed" msgstr "" -#: objcopy.c:755 +#: objcopy.c:824 #, c-format msgid "%s:%d: Ignoring rubbish found on this line" msgstr "" -#: objcopy.c:1033 +#: objcopy.c:1120 #, c-format msgid "not stripping symbol `%s' because it is named in a relocation" msgstr "" -#: objcopy.c:1116 +#: objcopy.c:1203 #, c-format msgid "%s: Multiple redefinition of symbol \"%s\"" msgstr "" -#: objcopy.c:1120 +#: objcopy.c:1207 #, c-format msgid "%s: Symbol \"%s\" is target of more than one redefinition" msgstr "" -#: objcopy.c:1148 +#: objcopy.c:1235 #, c-format msgid "couldn't open symbol redefinition file %s (error: %s)" msgstr "" -#: objcopy.c:1226 +#: objcopy.c:1313 #, c-format msgid "%s:%d: garbage found at end of line" msgstr "" -#: objcopy.c:1229 +#: objcopy.c:1316 #, c-format msgid "%s:%d: missing new symbol name" msgstr "" -#: objcopy.c:1239 +#: objcopy.c:1326 #, c-format msgid "%s:%d: premature end of file" msgstr "" -#: objcopy.c:1265 +#: objcopy.c:1352 #, c-format msgid "stat returns negative size for `%s'" msgstr "" -#: objcopy.c:1277 +#: objcopy.c:1364 #, c-format msgid "copy from `%s' [unknown] to `%s' [unknown]\n" msgstr "" -#: objcopy.c:1332 +#: objcopy.c:1419 msgid "Unable to change endianness of input file(s)" msgstr "" -#: objcopy.c:1341 +#: objcopy.c:1428 #, c-format msgid "copy from `%s' [%s] to `%s' [%s]\n" msgstr "" -#: objcopy.c:1383 objcopy.c:1908 +#: objcopy.c:1473 #, c-format msgid "Unable to recognise the format of the input file `%s'" msgstr "" -#: objcopy.c:1386 +#: objcopy.c:1476 #, c-format msgid "Warning: Output file cannot represent architecture `%s'" msgstr "" -#: objcopy.c:1449 +#: objcopy.c:1539 #, c-format -msgid "can't add section '%s' - it already exists!" +msgid "warning: file alignment (0x%s) > section alignment (0x%s)" msgstr "" -#: objcopy.c:1457 +#: objcopy.c:1598 #, c-format -msgid "can't create section `%s': %s" +msgid "can't add section '%s'" msgstr "" -#: objcopy.c:1593 +#: objcopy.c:1607 #, c-format -msgid "Can't fill gap after %s: %s" +msgid "can't create section `%s'" msgstr "" -#: objcopy.c:1618 +#: objcopy.c:1653 #, c-format -msgid "Can't add padding to %s: %s" +msgid "cannot create debug link section `%s'" +msgstr "" + +#: objcopy.c:1746 +msgid "Can't fill gap after section" +msgstr "" + +#: objcopy.c:1770 +msgid "can't add padding" msgstr "" -#: objcopy.c:1771 +#: objcopy.c:1861 #, c-format -msgid "%s: error copying private BFD data: %s" +msgid "cannot fill debug link section `%s'" +msgstr "" + +#: objcopy.c:1924 +msgid "error copying private BFD data" msgstr "" -#: objcopy.c:1784 +#: objcopy.c:1935 #, c-format msgid "this target does not support %lu alternative machine codes" msgstr "" -#: objcopy.c:1788 +#: objcopy.c:1939 msgid "treating that number as an absolute e_machine value instead" msgstr "" -#: objcopy.c:1792 +#: objcopy.c:1943 msgid "ignoring the alternative value" msgstr "" -#: objcopy.c:1822 objcopy.c:1852 +#: objcopy.c:1974 objcopy.c:2009 #, c-format msgid "cannot create tempdir for archive copying (error: %s)" msgstr "" -#: objcopy.c:2088 -#, c-format -msgid "Multiple renames of section %s" +#: objcopy.c:2070 +msgid "Unable to recognise the format of file" msgstr "" -#: objcopy.c:2139 -msgid "private header data" +#: objcopy.c:2167 +#, c-format +msgid "error: the input file '%s' is empty" msgstr "" -#: objcopy.c:2147 +#: objcopy.c:2299 #, c-format -msgid "%s: error in %s: %s" +msgid "Multiple renames of section %s" msgstr "" -#: objcopy.c:2208 -msgid "making" +#: objcopy.c:2350 +msgid "error in private header data" msgstr "" -#: objcopy.c:2228 -msgid "size" +#: objcopy.c:2428 +msgid "failed to create output section" msgstr "" -#: objcopy.c:2242 -msgid "vma" +#: objcopy.c:2442 +msgid "failed to set size" msgstr "" -#: objcopy.c:2267 -msgid "alignment" +#: objcopy.c:2456 +msgid "failed to set vma" msgstr "" -#: objcopy.c:2289 -msgid "private data" +#: objcopy.c:2481 +msgid "failed to set alignment" msgstr "" -#: objcopy.c:2304 -#, c-format -msgid "%s: section `%s': error in %s: %s" +#: objcopy.c:2515 +msgid "failed to copy private data" +msgstr "" + +#: objcopy.c:2597 +msgid "relocation count is negative" msgstr "" #. User must pad the section up in order to do this. -#: objcopy.c:2429 +#: objcopy.c:2658 #, 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" +#: objcopy.c:2842 +msgid "can't create debugging section" +msgstr "" + +#: objcopy.c:2855 +msgid "can't set debugging section contents" msgstr "" -#: objcopy.c:2619 +#: objcopy.c:2863 #, c-format -msgid "%s: can't set debugging section contents: %s" +msgid "don't know how to write debugging information for %s" +msgstr "" + +#: objcopy.c:3005 +msgid "could not create temporary file to hold stripped copy" msgstr "" -#: objcopy.c:2628 +#: objcopy.c:3077 #, c-format -msgid "%s: don't know how to write debugging information for %s" +msgid "%s: bad version in PE subsystem" msgstr "" -#: objcopy.c:2769 +#: objcopy.c:3107 #, c-format -msgid "could not create temporary file to hold stripped copy of '%s'" +msgid "unknown PE subsystem: %s" msgstr "" -#: objcopy.c:2819 +#: objcopy.c:3167 msgid "byte number must be non-negative" msgstr "" -#: objcopy.c:2829 +#: objcopy.c:3177 msgid "interleave must be positive" msgstr "" -#: objcopy.c:2849 objcopy.c:2857 +#: objcopy.c:3197 objcopy.c:3205 #, c-format msgid "%s both copied and removed" msgstr "" -#: objcopy.c:2958 objcopy.c:3032 objcopy.c:3132 objcopy.c:3163 objcopy.c:3187 -#: objcopy.c:3191 objcopy.c:3211 +#: objcopy.c:3306 objcopy.c:3380 objcopy.c:3480 objcopy.c:3511 objcopy.c:3535 +#: objcopy.c:3539 objcopy.c:3559 #, c-format msgid "bad format for %s" msgstr "" -#: objcopy.c:2982 +#: objcopy.c:3330 #, c-format msgid "cannot open: %s: %s" msgstr "" -#: objcopy.c:3101 +#: objcopy.c:3449 #, c-format msgid "Warning: truncating gap-fill from 0x%s to 0x%x" msgstr "" -#: objcopy.c:3269 +#: objcopy.c:3610 +#, c-format +msgid "unknown long section names option '%s'" +msgstr "" + +#: objcopy.c:3628 msgid "unable to parse alternative machine code" msgstr "" -#: objcopy.c:3314 +#: objcopy.c:3673 msgid "number of bytes to reverse must be positive and even" msgstr "" -#: objcopy.c:3317 +#: objcopy.c:3676 #, c-format msgid "Warning: ignoring previous --reverse-bytes value of %d" msgstr "" -#: objcopy.c:3345 +#: objcopy.c:3691 +#, c-format +msgid "%s: invalid reserve value for --heap" +msgstr "" + +#: objcopy.c:3697 +#, c-format +msgid "%s: invalid commit value for --heap" +msgstr "" + +#: objcopy.c:3722 +#, c-format +msgid "%s: invalid reserve value for --stack" +msgstr "" + +#: objcopy.c:3728 +#, c-format +msgid "%s: invalid commit value for --stack" +msgstr "" + +#: objcopy.c:3757 msgid "byte number must be less than interleave" msgstr "" -#: objcopy.c:3375 +#: objcopy.c:3784 +#, c-format +msgid "unknown input EFI target: %s" +msgstr "" + +#: objcopy.c:3815 +#, c-format +msgid "unknown output EFI target: %s" +msgstr "" + +#: objcopy.c:3840 #, c-format msgid "architecture %s unknown" msgstr "" -#: objcopy.c:3379 +#: objcopy.c:3844 msgid "" "Warning: input target 'binary' required for binary architecture parameter." msgstr "" -#: objcopy.c:3380 +#: objcopy.c:3845 #, c-format msgid " Argument %s ignored" msgstr "" -#: objcopy.c:3386 +#: objcopy.c:3851 #, c-format msgid "warning: could not locate '%s'. System error message: %s" msgstr "" -#: objcopy.c:3397 +#: objcopy.c:3862 #, c-format msgid "" "warning: could not create temporary file whilst copying '%s', (error: %s)" msgstr "" -#: objcopy.c:3424 objcopy.c:3438 +#: objcopy.c:3890 objcopy.c:3904 #, c-format msgid "%s %s%c0x%s never used" msgstr "" -#: objdump.c:176 +#: objdump.c:187 #, c-format msgid "Usage: %s \n" msgstr "" -#: objdump.c:177 +#: objdump.c:188 #, c-format msgid " Display information from object .\n" msgstr "" -#: objdump.c:178 +#: objdump.c:189 #, c-format msgid " At least one of the following switches must be given:\n" msgstr "" -#: objdump.c:179 +#: objdump.c:190 #, c-format msgid "" " -a, --archive-headers Display archive header information\n" @@ -2951,7 +3261,10 @@ msgid "" " -g, --debugging Display debug information in object file\n" " -e, --debugging-tags Display debug information using ctags style\n" " -G, --stabs Display (in raw form) any STABS info in the file\n" -" -W, --dwarf Display DWARF info in the file\n" +" -W[lLiaprmfFsoR] or\n" +" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro," +"=frames,=str,=loc,=Ranges]\n" +" Display DWARF info in the file\n" " -t, --syms Display the contents of the symbol table(s)\n" " -T, --dynamic-syms Display the contents of the dynamic symbol table\n" " -r, --reloc Display the relocation entries in the file\n" @@ -2963,14 +3276,14 @@ msgid "" " -H, --help Display this information\n" msgstr "" -#: objdump.c:204 +#: objdump.c:217 #, c-format msgid "" "\n" " The following switches are optional:\n" msgstr "" -#: objdump.c:205 +#: objdump.c:218 #, c-format msgid "" " -b, --target=BFDNAME Specify the target object format as " @@ -2987,6 +3300,8 @@ msgid "" " -I, --include=DIR Add DIR to search list for source files\n" " -l, --line-numbers Include line numbers and filenames in " "output\n" +" -F, --file-offsets Include file offsets when displaying " +"information\n" " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" " The STYLE, if specified, can be `auto', " "`gnu',\n" @@ -3001,149 +3316,188 @@ msgid "" " --prefix-addresses Print complete address alongside " "disassembly\n" " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" +" --insn-width=WIDTH Display WIDTH bytes on a signle line for -" +"d\n" " --adjust-vma=OFFSET Add OFFSET to all displayed section " "addresses\n" " --special-syms Include special symbols in symbol dumps\n" +" --prefix=PREFIX Add PREFIX to absolute paths for -S\n" +" --prefix-strip=LEVEL Strip initial directory names for -S\n" "\n" msgstr "" -#: objdump.c:387 +#: objdump.c:433 #, c-format msgid "Sections:\n" msgstr "" -#: objdump.c:390 objdump.c:394 +#: objdump.c:436 objdump.c:440 #, c-format msgid "Idx Name Size VMA LMA File off Algn" msgstr "" -#: objdump.c:396 +#: objdump.c:442 #, c-format msgid "" "Idx Name Size VMA LMA File off " "Algn" msgstr "" -#: objdump.c:400 +#: objdump.c:446 #, c-format msgid " Flags" msgstr "" -#: objdump.c:402 +#: objdump.c:448 #, c-format msgid " Pg" msgstr "" -#: objdump.c:445 +#: objdump.c:491 #, c-format msgid "%s: not a dynamic object" msgstr "" -#: objdump.c:1778 +#: objdump.c:916 objdump.c:940 #, c-format -msgid "Disassembly of section %s:\n" +msgid " (File Offset: 0x%lx)" msgstr "" -#: objdump.c:1940 +#: objdump.c:1885 +#, c-format +msgid "" +"\n" +"Disassembly of section %s:\n" +msgstr "" + +#: objdump.c:2058 #, c-format msgid "Can't use supplied machine %s" msgstr "" -#: objdump.c:1959 +#: objdump.c:2077 #, c-format msgid "Can't disassemble for architecture %s\n" msgstr "" -#: objdump.c:2064 +#: objdump.c:2168 #, c-format msgid "" "\n" "Can't get contents for section '%s'.\n" msgstr "" -#: objdump.c:2201 +#: objdump.c:2179 +#, c-format +msgid "" +"\n" +"Can't uncompress section '%s'.\n" +msgstr "" + +#: objdump.c:2307 #, c-format msgid "" "No %s section present\n" "\n" msgstr "" -#: objdump.c:2210 +#: objdump.c:2316 #, c-format msgid "Reading %s section of %s failed: %s" msgstr "" -#: objdump.c:2254 +#: objdump.c:2360 #, c-format msgid "" "Contents of %s section:\n" "\n" msgstr "" -#: objdump.c:2381 +#: objdump.c:2491 #, c-format msgid "architecture: %s, " msgstr "" -#: objdump.c:2384 +#: objdump.c:2494 #, c-format msgid "flags 0x%08x:\n" msgstr "" -#: objdump.c:2398 +#: objdump.c:2508 #, c-format msgid "" "\n" "start address 0x" msgstr "" -#: objdump.c:2438 +#: objdump.c:2571 +#, c-format +msgid "Contents of section %s:" +msgstr "" + +#: objdump.c:2573 #, c-format -msgid "Contents of section %s:\n" +msgid " (Starting at file offset: 0x%lx)" msgstr "" -#: objdump.c:2563 +#: objdump.c:2680 #, c-format msgid "no symbols\n" msgstr "" -#: objdump.c:2570 +#: objdump.c:2687 #, c-format msgid "no information for symbol number %ld\n" msgstr "" -#: objdump.c:2573 +#: objdump.c:2690 #, c-format msgid "could not determine the type of symbol number %ld\n" msgstr "" -#: objdump.c:2850 +#: objdump.c:2970 #, c-format msgid "" "\n" "%s: file format %s\n" msgstr "" -#: objdump.c:2908 +#: objdump.c:3028 #, c-format msgid "%s: printing debugging information failed" msgstr "" -#: objdump.c:3002 +#: objdump.c:3128 #, c-format msgid "In archive %s:\n" msgstr "" -#: objdump.c:3124 +#: objdump.c:3244 +msgid "error: the start address should be before the end address" +msgstr "" + +#: objdump.c:3249 +msgid "error: the stop address should be after the start address" +msgstr "" + +#: objdump.c:3261 +msgid "error: prefix strip must be non-negative" +msgstr "" + +#: objdump.c:3266 +msgid "error: instruction width must be positive" +msgstr "" + +#: objdump.c:3275 msgid "unrecognized -E option" msgstr "" -#: objdump.c:3135 +#: objdump.c:3286 #, c-format msgid "unrecognized --endian type `%s'" msgstr "" -#: rclex.c:196 +#: rclex.c:197 msgid "invalid value specified for pragma code_page.\n" msgstr "" @@ -3172,199 +3526,198 @@ msgstr "" msgid "%ld: unexpected .ef\n" msgstr "" -#: rddbg.c:86 +#: rddbg.c:88 #, c-format msgid "%s: no recognized debugging information" msgstr "" -#: rddbg.c:400 +#: rddbg.c:402 #, c-format msgid "Last stabs entries before error:\n" msgstr "" -#: readelf.c:319 +#: readelf.c:297 #, c-format msgid "Unable to seek to 0x%lx for %s\n" msgstr "" -#: readelf.c:334 +#: readelf.c:312 #, c-format msgid "Out of memory allocating 0x%lx bytes for %s\n" msgstr "" -#: readelf.c:344 +#: readelf.c:322 #, c-format msgid "Unable to read in 0x%lx bytes of %s\n" msgstr "" -#: readelf.c:683 +#: readelf.c:640 msgid "Don't know about relocations on this machine architecture\n" msgstr "" -#: readelf.c:703 readelf.c:731 readelf.c:775 readelf.c:803 +#: readelf.c:660 readelf.c:688 readelf.c:754 readelf.c:782 msgid "relocs" msgstr "" -#: readelf.c:714 readelf.c:742 readelf.c:786 readelf.c:814 +#: readelf.c:671 readelf.c:699 readelf.c:765 readelf.c:793 msgid "out of memory parsing relocs\n" msgstr "" -#: readelf.c:868 +#: readelf.c:898 #, c-format msgid "" " Offset Info Type Sym. Value Symbol's Name + Addend\n" msgstr "" -#: readelf.c:870 +#: readelf.c:900 #, c-format msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" msgstr "" -#: readelf.c:875 +#: readelf.c:905 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name\n" msgstr "" -#: readelf.c:877 +#: readelf.c:907 #, c-format msgid " Offset Info Type Sym.Value Sym. Name\n" msgstr "" -#: readelf.c:885 +#: readelf.c:915 #, c-format msgid "" " Offset Info Type Symbol's Value " "Symbol's Name + Addend\n" msgstr "" -#: readelf.c:887 +#: readelf.c:917 #, c-format msgid "" " Offset Info Type Sym. Value Sym. Name + " "Addend\n" msgstr "" -#: readelf.c:892 +#: readelf.c:922 #, c-format msgid "" " Offset Info Type Symbol's Value " "Symbol's Name\n" msgstr "" -#: readelf.c:894 +#: readelf.c:924 #, c-format msgid "" " Offset Info Type Sym. Value Sym. Name\n" msgstr "" -#: readelf.c:1198 readelf.c:1200 readelf.c:1318 readelf.c:1320 readelf.c:1329 -#: readelf.c:1331 +#: readelf.c:1211 readelf.c:1370 readelf.c:1378 #, c-format msgid "unrecognized: %-7lx" msgstr "" -#: readelf.c:1226 +#: readelf.c:1236 #, c-format msgid "" msgstr "" -#: readelf.c:1288 +#: readelf.c:1328 #, c-format msgid "" msgstr "" -#: readelf.c:1290 +#: readelf.c:1330 #, c-format msgid "" msgstr "" -#: readelf.c:1625 +#: readelf.c:1703 #, c-format msgid "Processor Specific: %lx" msgstr "" -#: readelf.c:1646 +#: readelf.c:1727 #, c-format msgid "Operating System specific: %lx" msgstr "" -#: readelf.c:1650 readelf.c:2521 +#: readelf.c:1731 readelf.c:2613 #, c-format msgid ": %lx" msgstr "" -#: readelf.c:1663 +#: readelf.c:1744 msgid "NONE (None)" msgstr "" -#: readelf.c:1664 +#: readelf.c:1745 msgid "REL (Relocatable file)" msgstr "" -#: readelf.c:1665 +#: readelf.c:1746 msgid "EXEC (Executable file)" msgstr "" -#: readelf.c:1666 +#: readelf.c:1747 msgid "DYN (Shared object file)" msgstr "" -#: readelf.c:1667 +#: readelf.c:1748 msgid "CORE (Core file)" msgstr "" -#: readelf.c:1671 +#: readelf.c:1752 #, c-format msgid "Processor Specific: (%x)" msgstr "" -#: readelf.c:1673 +#: readelf.c:1754 #, c-format msgid "OS Specific: (%x)" msgstr "" -#: readelf.c:1675 readelf.c:2714 +#: readelf.c:1756 readelf.c:2830 #, c-format msgid ": %x" msgstr "" -#: readelf.c:1687 +#: readelf.c:1768 msgid "None" msgstr "" -#: readelf.c:1791 +#: readelf.c:1879 #, c-format msgid ": 0x%x" msgstr "" -#: readelf.c:2048 +#: readelf.c:2136 msgid "unknown" msgstr "" -#: readelf.c:2049 +#: readelf.c:2137 msgid "unknown mac" msgstr "" -#: readelf.c:2358 +#: readelf.c:2450 msgid "Standalone App" msgstr "" -#: readelf.c:2361 readelf.c:3145 readelf.c:3161 +#: readelf.c:2453 readelf.c:3159 readelf.c:3175 #, c-format msgid "" msgstr "" -#: readelf.c:2759 +#: readelf.c:2878 #, c-format msgid "Usage: readelf elf-file(s)\n" msgstr "" -#: readelf.c:2760 +#: readelf.c:2879 #, c-format msgid " Display information about the contents of ELF format files\n" msgstr "" -#: readelf.c:2761 +#: readelf.c:2880 #, c-format msgid "" " Options are:\n" @@ -3386,23 +3739,32 @@ msgid "" " -V --version-info Display the version sections (if present)\n" " -A --arch-specific Display architecture specific information (if " "any).\n" +" -c --archive-index Display the symbol/file index in an archive\n" " -D --use-dynamic Use the dynamic section info when displaying " "symbols\n" -" -x --hex-dump= Dump the contents of section \n" -" -w[liaprmfFsoR] or\n" -" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str," -"=loc,=Ranges]\n" +" -x --hex-dump=\n" +" Dump the contents of section as " +"bytes\n" +" -p --string-dump=\n" +" Dump the contents of section as " +"strings\n" +" -R --relocated-dump=\n" +" Dump the contents of section as " +"relocated bytes\n" +" -w[lLiaprmfFsoR] or\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro," +"=frames,=str,=loc,=Ranges]\n" " Display the contents of DWARF2 debug sections\n" msgstr "" -#: readelf.c:2785 +#: readelf.c:2910 #, c-format msgid "" -" -i --instruction-dump=\n" -" Disassemble the contents of section \n" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" msgstr "" -#: readelf.c:2789 +#: readelf.c:2914 #, c-format msgid "" " -I --histogram Display histogram of bucket list lengths\n" @@ -3412,394 +3774,389 @@ msgid "" " -v --version Display the version number of readelf\n" msgstr "" -#: readelf.c:2817 readelf.c:2845 readelf.c:2849 readelf.c:9898 +#: readelf.c:2942 readelf.c:2970 readelf.c:2974 readelf.c:11443 msgid "Out of memory allocating dump request table.\n" msgstr "" -#: readelf.c:3011 readelf.c:3079 -#, c-format -msgid "Unrecognized debug option '%s'\n" -msgstr "" - -#: readelf.c:3115 +#: readelf.c:3129 #, c-format msgid "Invalid option '-%c'\n" msgstr "" -#: readelf.c:3129 +#: readelf.c:3143 msgid "Nothing to do.\n" msgstr "" -#: readelf.c:3141 readelf.c:3157 readelf.c:6399 +#: readelf.c:3155 readelf.c:3171 readelf.c:6440 msgid "none" msgstr "" -#: readelf.c:3158 +#: readelf.c:3172 msgid "2's complement, little endian" msgstr "" -#: readelf.c:3159 +#: readelf.c:3173 msgid "2's complement, big endian" msgstr "" -#: readelf.c:3177 +#: readelf.c:3191 msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "" -#: readelf.c:3185 +#: readelf.c:3201 #, c-format msgid "ELF Header:\n" msgstr "" -#: readelf.c:3186 +#: readelf.c:3202 #, c-format msgid " Magic: " msgstr "" -#: readelf.c:3190 +#: readelf.c:3206 #, c-format msgid " Class: %s\n" msgstr "" -#: readelf.c:3192 +#: readelf.c:3208 #, c-format msgid " Data: %s\n" msgstr "" -#: readelf.c:3194 +#: readelf.c:3210 #, c-format msgid " Version: %d %s\n" msgstr "" -#: readelf.c:3201 +#: readelf.c:3217 #, c-format msgid " OS/ABI: %s\n" msgstr "" -#: readelf.c:3203 +#: readelf.c:3219 #, c-format msgid " ABI Version: %d\n" msgstr "" -#: readelf.c:3205 +#: readelf.c:3221 #, c-format msgid " Type: %s\n" msgstr "" -#: readelf.c:3207 +#: readelf.c:3223 #, c-format msgid " Machine: %s\n" msgstr "" -#: readelf.c:3209 +#: readelf.c:3225 #, c-format msgid " Version: 0x%lx\n" msgstr "" -#: readelf.c:3212 +#: readelf.c:3228 #, c-format msgid " Entry point address: " msgstr "" -#: readelf.c:3214 +#: readelf.c:3230 #, c-format msgid "" "\n" " Start of program headers: " msgstr "" -#: readelf.c:3216 +#: readelf.c:3232 #, c-format msgid "" " (bytes into file)\n" " Start of section headers: " msgstr "" -#: readelf.c:3218 +#: readelf.c:3234 #, c-format msgid " (bytes into file)\n" msgstr "" -#: readelf.c:3220 +#: readelf.c:3236 #, c-format msgid " Flags: 0x%lx%s\n" msgstr "" -#: readelf.c:3223 +#: readelf.c:3239 #, c-format msgid " Size of this header: %ld (bytes)\n" msgstr "" -#: readelf.c:3225 +#: readelf.c:3241 #, c-format msgid " Size of program headers: %ld (bytes)\n" msgstr "" -#: readelf.c:3227 +#: readelf.c:3243 #, c-format msgid " Number of program headers: %ld\n" msgstr "" -#: readelf.c:3229 +#: readelf.c:3245 #, c-format msgid " Size of section headers: %ld (bytes)\n" msgstr "" -#: readelf.c:3231 +#: readelf.c:3247 #, c-format msgid " Number of section headers: %ld" msgstr "" -#: readelf.c:3236 +#: readelf.c:3252 #, c-format msgid " Section header string table index: %ld" msgstr "" -#: readelf.c:3277 readelf.c:3310 +#: readelf.c:3289 readelf.c:3322 msgid "program headers" msgstr "" -#: 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 +#: readelf.c:3360 readelf.c:3658 readelf.c:3699 readelf.c:3758 readelf.c:3823 +#: readelf.c:4494 readelf.c:4518 readelf.c:5770 readelf.c:5815 readelf.c:6014 +#: readelf.c:7087 readelf.c:7101 readelf.c:7611 readelf.c:7627 readelf.c:7670 +#: readelf.c:7695 readelf.c:9642 readelf.c:9834 readelf.c:10362 +#: readelf.c:10736 readelf.c:10750 readelf.c:11109 msgid "Out of memory\n" msgstr "" -#: readelf.c:3375 +#: readelf.c:3387 #, c-format msgid "" "\n" "There are no program headers in this file.\n" msgstr "" -#: readelf.c:3381 +#: readelf.c:3393 #, c-format msgid "" "\n" "Elf file type is %s\n" msgstr "" -#: readelf.c:3382 +#: readelf.c:3394 #, c-format msgid "Entry point " msgstr "" -#: readelf.c:3384 +#: readelf.c:3396 #, c-format msgid "" "\n" "There are %d program headers, starting at offset " msgstr "" -#: readelf.c:3396 readelf.c:3398 +#: readelf.c:3408 readelf.c:3410 #, c-format msgid "" "\n" "Program Headers:\n" msgstr "" -#: readelf.c:3402 +#: readelf.c:3414 #, c-format msgid "" " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" msgstr "" -#: readelf.c:3405 +#: readelf.c:3417 #, c-format msgid "" " Type Offset VirtAddr PhysAddr FileSiz " "MemSiz Flg Align\n" msgstr "" -#: readelf.c:3409 +#: readelf.c:3421 #, c-format msgid " Type Offset VirtAddr PhysAddr\n" msgstr "" -#: readelf.c:3411 +#: readelf.c:3423 #, c-format msgid " FileSiz MemSiz Flags Align\n" msgstr "" -#: readelf.c:3504 +#: readelf.c:3516 msgid "more than one dynamic segment\n" msgstr "" -#: readelf.c:3515 +#: readelf.c:3532 msgid "no .dynamic section in the dynamic segment\n" msgstr "" -#: readelf.c:3527 +#: readelf.c:3547 msgid "the .dynamic section is not contained within the dynamic segment\n" msgstr "" -#: readelf.c:3529 +#: readelf.c:3550 msgid "the .dynamic section is not the first section in the dynamic segment.\n" msgstr "" -#: readelf.c:3543 +#: readelf.c:3558 msgid "Unable to find program interpreter name\n" msgstr "" -#: readelf.c:3550 +#: readelf.c:3565 msgid "" "Internal error: failed to create format string to display program " "interpreter\n" msgstr "" -#: readelf.c:3554 +#: readelf.c:3569 msgid "Unable to read program interpreter name\n" msgstr "" -#: readelf.c:3557 +#: readelf.c:3572 #, c-format msgid "" "\n" " [Requesting program interpreter: %s]" msgstr "" -#: readelf.c:3569 +#: readelf.c:3584 #, c-format msgid "" "\n" " Section to Segment mapping:\n" msgstr "" -#: readelf.c:3570 +#: readelf.c:3585 #, c-format msgid " Segment Sections...\n" msgstr "" -#: readelf.c:3605 +#: readelf.c:3620 msgid "Cannot interpret virtual addresses without program headers.\n" msgstr "" -#: readelf.c:3621 +#: readelf.c:3636 #, c-format msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" msgstr "" -#: readelf.c:3635 readelf.c:3676 +#: readelf.c:3650 readelf.c:3691 msgid "section headers" msgstr "" -#: readelf.c:3720 readelf.c:3783 +#: readelf.c:3735 readelf.c:3800 msgid "symbols" msgstr "" -#: readelf.c:3730 readelf.c:3793 +#: readelf.c:3745 readelf.c:3810 msgid "symtab shndx" msgstr "" -#: readelf.c:4020 readelf.c:4413 +#: readelf.c:4070 readelf.c:4478 #, c-format msgid "" "\n" "There are no sections in this file.\n" msgstr "" -#: readelf.c:4026 +#: readelf.c:4076 #, c-format msgid "There are %d section headers, starting at offset 0x%lx:\n" msgstr "" -#: readelf.c:4046 readelf.c:4530 readelf.c:4765 readelf.c:5073 readelf.c:5488 -#: readelf.c:7187 +#: readelf.c:4096 readelf.c:4595 readelf.c:4821 readelf.c:5116 readelf.c:5524 +#: readelf.c:7421 msgid "string table" msgstr "" -#: readelf.c:4102 +#: readelf.c:4163 #, c-format msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" msgstr "" -#: readelf.c:4122 +#: readelf.c:4183 msgid "File contains multiple dynamic symbol tables\n" msgstr "" -#: readelf.c:4135 +#: readelf.c:4196 msgid "File contains multiple dynamic string tables\n" msgstr "" -#: readelf.c:4140 +#: readelf.c:4201 msgid "dynamic strings" msgstr "" -#: readelf.c:4147 +#: readelf.c:4208 msgid "File contains multiple symtab shndx tables\n" msgstr "" -#: readelf.c:4194 +#: readelf.c:4259 #, c-format msgid "" "\n" "Section Headers:\n" msgstr "" -#: readelf.c:4196 +#: readelf.c:4261 #, c-format msgid "" "\n" "Section Header:\n" msgstr "" -#: readelf.c:4202 readelf.c:4213 readelf.c:4224 +#: readelf.c:4267 readelf.c:4278 readelf.c:4289 #, c-format msgid " [Nr] Name\n" msgstr "" -#: readelf.c:4203 +#: readelf.c:4268 #, c-format msgid " Type Addr Off Size ES Lk Inf Al\n" msgstr "" -#: readelf.c:4207 +#: readelf.c:4272 #, c-format msgid "" " [Nr] Name Type Addr Off Size ES Flg Lk " "Inf Al\n" msgstr "" -#: readelf.c:4214 +#: readelf.c:4279 #, c-format msgid " Type Address Off Size ES Lk Inf Al\n" msgstr "" -#: readelf.c:4218 +#: readelf.c:4283 #, c-format msgid "" " [Nr] Name Type Address Off Size ES " "Flg Lk Inf Al\n" msgstr "" -#: readelf.c:4225 +#: readelf.c:4290 #, c-format msgid " Type Address Offset Link\n" msgstr "" -#: readelf.c:4226 +#: readelf.c:4291 #, c-format msgid " Size EntSize Info Align\n" msgstr "" -#: readelf.c:4230 +#: readelf.c:4295 #, c-format msgid " [Nr] Name Type Address Offset\n" msgstr "" -#: readelf.c:4231 +#: readelf.c:4296 #, c-format msgid " Size EntSize Flags Link Info Align\n" msgstr "" -#: readelf.c:4236 +#: readelf.c:4301 #, c-format msgid " Flags\n" msgstr "" -#: readelf.c:4371 +#: readelf.c:4435 #, c-format msgid "" "Key to Flags:\n" @@ -3808,1042 +4165,1307 @@ msgid "" " O (extra OS processing required) o (OS specific), p (processor specific)\n" msgstr "" -#: readelf.c:4389 +#: readelf.c:4453 #, c-format msgid "[: 0x%x]" msgstr "" -#: readelf.c:4420 +#: readelf.c:4485 msgid "Section headers are not available!\n" msgstr "" -#: readelf.c:4444 +#: readelf.c:4509 #, c-format msgid "" "\n" "There are no section groups in this file.\n" msgstr "" -#: readelf.c:4480 +#: readelf.c:4546 #, c-format msgid "Bad sh_link in group section `%s'\n" msgstr "" -#: readelf.c:4499 +#: readelf.c:4565 #, c-format msgid "Bad sh_info in group section `%s'\n" msgstr "" -#: readelf.c:4538 readelf.c:7690 +#: readelf.c:4603 msgid "section data" msgstr "" -#: readelf.c:4550 +#: readelf.c:4615 #, c-format msgid " [Index] Name\n" msgstr "" -#: readelf.c:4564 +#: readelf.c:4629 #, c-format msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" msgstr "" -#: readelf.c:4570 -#, c-format -msgid "invalid section [%5u] in group section [%5u]\n" -msgstr "" - -#: readelf.c:4580 +#: readelf.c:4638 #, c-format msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" msgstr "" -#: readelf.c:4593 +#: readelf.c:4651 #, c-format msgid "section 0 in group section [%5u]\n" msgstr "" -#: readelf.c:4689 +#: readelf.c:4746 #, c-format msgid "" "\n" "'%s' relocation section at offset 0x%lx contains %ld bytes:\n" msgstr "" -#: readelf.c:4701 +#: readelf.c:4758 #, c-format msgid "" "\n" "There are no dynamic relocations in this file.\n" msgstr "" -#: readelf.c:4725 +#: readelf.c:4782 #, c-format msgid "" "\n" "Relocation section " msgstr "" -#: readelf.c:4730 readelf.c:5149 readelf.c:5163 readelf.c:5503 +#: readelf.c:4787 readelf.c:5192 readelf.c:5206 readelf.c:5539 #, c-format msgid "'%s'" msgstr "" -#: readelf.c:4732 readelf.c:5165 readelf.c:5505 +#: readelf.c:4789 readelf.c:5208 readelf.c:5541 #, c-format msgid " at offset 0x%lx contains %lu entries:\n" msgstr "" -#: readelf.c:4784 +#: readelf.c:4840 #, c-format msgid "" "\n" "There are no relocations in this file.\n" msgstr "" -#: readelf.c:4963 readelf.c:5345 +#: readelf.c:5022 readelf.c:5390 msgid "unwind table" msgstr "" -#: readelf.c:5022 readelf.c:5435 +#: readelf.c:5063 readelf.c:5471 #, c-format msgid "Skipping unexpected relocation type %s\n" msgstr "" -#: readelf.c:5081 readelf.c:5496 readelf.c:5547 +#: readelf.c:5124 readelf.c:5532 readelf.c:5585 #, c-format msgid "" "\n" "There are no unwind sections in this file.\n" msgstr "" -#: readelf.c:5144 +#: readelf.c:5187 #, c-format msgid "" "\n" "Could not find unwind info section for " msgstr "" -#: readelf.c:5156 +#: readelf.c:5199 msgid "unwind info" msgstr "" -#: readelf.c:5158 readelf.c:5502 +#: readelf.c:5201 readelf.c:5538 #, c-format msgid "" "\n" "Unwind section " msgstr "" -#: readelf.c:5712 readelf.c:5756 +#: readelf.c:5751 readelf.c:5796 msgid "dynamic section" msgstr "" -#: readelf.c:5833 +#: readelf.c:5873 #, c-format msgid "" "\n" "There is no dynamic section in this file.\n" msgstr "" -#: readelf.c:5871 +#: readelf.c:5911 msgid "Unable to seek to end of file!\n" msgstr "" -#: readelf.c:5884 +#: readelf.c:5924 msgid "Unable to determine the number of symbols to load\n" msgstr "" -#: readelf.c:5919 +#: readelf.c:5959 msgid "Unable to seek to end of file\n" msgstr "" -#: readelf.c:5926 +#: readelf.c:5966 msgid "Unable to determine the length of the dynamic string table\n" msgstr "" -#: readelf.c:5931 +#: readelf.c:5971 msgid "dynamic string table" msgstr "" -#: readelf.c:5966 +#: readelf.c:6007 msgid "symbol information" msgstr "" -#: readelf.c:5991 +#: readelf.c:6032 #, c-format msgid "" "\n" "Dynamic section at offset 0x%lx contains %u entries:\n" msgstr "" -#: readelf.c:5994 +#: readelf.c:6035 #, c-format msgid " Tag Type Name/Value\n" msgstr "" -#: readelf.c:6030 +#: readelf.c:6071 #, c-format msgid "Auxiliary library" msgstr "" -#: readelf.c:6034 +#: readelf.c:6075 #, c-format msgid "Filter library" msgstr "" -#: readelf.c:6038 +#: readelf.c:6079 #, c-format msgid "Configuration file" msgstr "" -#: readelf.c:6042 +#: readelf.c:6083 #, c-format msgid "Dependency audit library" msgstr "" -#: readelf.c:6046 +#: readelf.c:6087 #, c-format msgid "Audit library" msgstr "" -#: readelf.c:6064 readelf.c:6092 readelf.c:6120 +#: readelf.c:6105 readelf.c:6133 readelf.c:6161 #, c-format msgid "Flags:" msgstr "" -#: readelf.c:6067 readelf.c:6095 readelf.c:6122 +#: readelf.c:6108 readelf.c:6136 readelf.c:6163 #, c-format msgid " None\n" msgstr "" -#: readelf.c:6243 +#: readelf.c:6284 #, c-format msgid "Shared library: [%s]" msgstr "" -#: readelf.c:6246 +#: readelf.c:6287 #, c-format msgid " program interpreter" msgstr "" -#: readelf.c:6250 +#: readelf.c:6291 #, c-format msgid "Library soname: [%s]" msgstr "" -#: readelf.c:6254 +#: readelf.c:6295 #, c-format msgid "Library rpath: [%s]" msgstr "" -#: readelf.c:6258 +#: readelf.c:6299 #, c-format msgid "Library runpath: [%s]" msgstr "" -#: readelf.c:6321 +#: readelf.c:6362 #, c-format msgid "Not needed object: [%s]\n" msgstr "" -#: readelf.c:6444 +#: readelf.c:6487 #, c-format msgid "" "\n" -"Version definition section '%s' contains %ld entries:\n" +"Version definition section '%s' contains %u entries:\n" msgstr "" -#: readelf.c:6447 +#: readelf.c:6490 #, c-format msgid " Addr: 0x" msgstr "" -#: readelf.c:6449 readelf.c:6656 +#: readelf.c:6492 readelf.c:6594 readelf.c:6715 #, c-format -msgid " Offset: %#08lx Link: %lx (%s)\n" +msgid " Offset: %#08lx Link: %u (%s)\n" msgstr "" -#: readelf.c:6458 +#: readelf.c:6500 msgid "version definition section" msgstr "" -#: readelf.c:6484 +#: readelf.c:6529 #, c-format msgid " %#06x: Rev: %d Flags: %s" msgstr "" -#: readelf.c:6487 +#: readelf.c:6532 #, c-format msgid " Index: %d Cnt: %d " msgstr "" -#: readelf.c:6498 +#: readelf.c:6543 #, c-format msgid "Name: %s\n" msgstr "" -#: readelf.c:6500 +#: readelf.c:6545 #, c-format msgid "Name index: %ld\n" msgstr "" -#: readelf.c:6515 +#: readelf.c:6562 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr "" -#: readelf.c:6518 +#: readelf.c:6565 #, c-format msgid " %#06x: Parent %d, name index: %ld\n" msgstr "" -#: readelf.c:6537 +#: readelf.c:6569 #, c-format -msgid "" -"\n" -"Version needs section '%s' contains %ld entries:\n" +msgid " Version def aux past end of section\n" msgstr "" -#: readelf.c:6540 +#: readelf.c:6574 #, c-format -msgid " Addr: 0x" +msgid " Version definition past end of section\n" msgstr "" -#: readelf.c:6542 +#: readelf.c:6589 #, c-format -msgid " Offset: %#08lx Link to section: %ld (%s)\n" +msgid "" +"\n" +"Version needs section '%s' contains %u entries:\n" +msgstr "" + +#: readelf.c:6592 +#, c-format +msgid " Addr: 0x" msgstr "" -#: readelf.c:6551 +#: readelf.c:6602 msgid "version need section" msgstr "" -#: readelf.c:6573 +#: readelf.c:6627 #, c-format msgid " %#06x: Version: %d" msgstr "" -#: readelf.c:6576 +#: readelf.c:6630 #, c-format msgid " File: %s" msgstr "" -#: readelf.c:6578 +#: readelf.c:6632 #, c-format msgid " File: %lx" msgstr "" -#: readelf.c:6580 +#: readelf.c:6634 #, c-format msgid " Cnt: %d\n" msgstr "" -#: readelf.c:6598 +#: readelf.c:6654 #, c-format msgid " %#06x: Name: %s" msgstr "" -#: readelf.c:6601 +#: readelf.c:6657 #, c-format msgid " %#06x: Name index: %lx" msgstr "" -#: readelf.c:6604 +#: readelf.c:6660 #, c-format msgid " Flags: %s Version: %d\n" msgstr "" -#: readelf.c:6647 +#: readelf.c:6667 +#, c-format +msgid " Version need aux past end of section\n" +msgstr "" + +#: readelf.c:6672 +#, c-format +msgid " Version need past end of section\n" +msgstr "" + +#: readelf.c:6706 msgid "version string table" msgstr "" -#: readelf.c:6651 +#: readelf.c:6710 #, c-format msgid "" "\n" "Version symbols section '%s' contains %d entries:\n" msgstr "" -#: readelf.c:6654 +#: readelf.c:6713 #, c-format msgid " Addr: " msgstr "" -#: readelf.c:6664 +#: readelf.c:6723 msgid "version symbol data" msgstr "" -#: readelf.c:6691 +#: readelf.c:6750 msgid " 0 (*local*) " msgstr "" -#: readelf.c:6695 +#: readelf.c:6754 msgid " 1 (*global*) " msgstr "" -#: readelf.c:6733 readelf.c:7255 +#: readelf.c:6791 readelf.c:7488 msgid "version need" msgstr "" -#: readelf.c:6743 +#: readelf.c:6801 msgid "version need aux (2)" msgstr "" -#: readelf.c:6785 readelf.c:7320 +#: readelf.c:6816 readelf.c:6871 +msgid "*invalid*" +msgstr "" + +#: readelf.c:6846 readelf.c:7553 msgid "version def" msgstr "" -#: readelf.c:6805 readelf.c:7335 +#: readelf.c:6866 readelf.c:7568 msgid "version def aux" msgstr "" -#: readelf.c:6836 +#: readelf.c:6900 #, c-format msgid "" "\n" "No version information found in this file.\n" msgstr "" -#: readelf.c:6955 +#: readelf.c:7034 #, c-format msgid ": %x" msgstr "" -#: readelf.c:7013 +#: readelf.c:7093 msgid "Unable to read in dynamic data\n" msgstr "" -#: readelf.c:7069 readelf.c:7443 readelf.c:7467 readelf.c:7497 readelf.c:7521 +#: readelf.c:7184 readelf.c:7234 readelf.c:7258 readelf.c:7288 readelf.c:7312 msgid "Unable to seek to start of dynamic information\n" msgstr "" -#: readelf.c:7075 readelf.c:7449 +#: readelf.c:7190 readelf.c:7240 msgid "Failed to read in number of buckets\n" msgstr "" -#: readelf.c:7081 +#: readelf.c:7196 msgid "Failed to read in number of chains\n" msgstr "" -#: readelf.c:7101 +#: readelf.c:7296 +msgid "Failed to determine last chain length\n" +msgstr "" + +#: readelf.c:7340 #, c-format msgid "" "\n" "Symbol table for image:\n" msgstr "" -#: readelf.c:7103 +#: readelf.c:7342 readelf.c:7360 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: readelf.c:7105 +#: readelf.c:7344 readelf.c:7362 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: readelf.c:7163 +#: readelf.c:7358 +#, c-format +msgid "" +"\n" +"Symbol table of `.gnu.hash' for image:\n" +msgstr "" + +#: readelf.c:7397 #, c-format msgid "" "\n" "Symbol table '%s' contains %lu entries:\n" msgstr "" -#: readelf.c:7167 +#: readelf.c:7401 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: readelf.c:7169 +#: readelf.c:7403 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr "" -#: readelf.c:7225 +#: readelf.c:7459 msgid "version data" msgstr "" -#: readelf.c:7268 +#: readelf.c:7501 msgid "version need aux (3)" msgstr "" -#: readelf.c:7295 +#: readelf.c:7528 msgid "bad dynamic symbol\n" msgstr "" -#: readelf.c:7359 +#: readelf.c:7592 #, c-format msgid "" "\n" "Dynamic symbol information is not available for displaying symbols.\n" msgstr "" -#: readelf.c:7371 +#: readelf.c:7604 #, c-format msgid "" "\n" "Histogram for bucket list length (total of %lu buckets):\n" msgstr "" -#: readelf.c:7373 readelf.c:7539 +#: readelf.c:7606 readelf.c:7676 #, c-format msgid " Length Number %% of total Coverage\n" msgstr "" -#: readelf.c:7505 -msgid "Failed to determine last chain length\n" -msgstr "" - -#: readelf.c:7537 +#: readelf.c:7674 #, c-format msgid "" "\n" "Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n" msgstr "" -#: readelf.c:7603 +#: readelf.c:7740 #, c-format msgid "" "\n" "Dynamic info segment at offset 0x%lx contains %d entries:\n" msgstr "" -#: readelf.c:7606 +#: readelf.c:7743 #, c-format msgid " Num: Name BoundTo Flags\n" msgstr "" -#: readelf.c:7658 +#: readelf.c:7834 +msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc" +msgstr "" + +#: readelf.c:7982 #, c-format msgid "" -"\n" -"Assembly dump of section %s\n" +"Missing knowledge of 32-bit reloc types used in DWARF sections of machine " +"number %d\n" +msgstr "" + +#: readelf.c:8251 +#, c-format +msgid "unable to apply unsupported reloc type %d to section %s\n" +msgstr "" + +#: readelf.c:8259 +#, c-format +msgid "skipping invalid relocation offset 0x%lx in section %s\n" msgstr "" -#: readelf.c:7680 +#: readelf.c:8283 +#, c-format +msgid "skipping unexpected symbol type %s in %ld'th relocation in section %s\n" +msgstr "" + +#: readelf.c:8315 #, c-format msgid "" "\n" -"Section '%s' has no data to dump.\n" +"Assembly dump of section %s\n" msgstr "" -#: readelf.c:7685 +#: readelf.c:8336 #, c-format msgid "" "\n" -"Hex dump of section '%s':\n" +"Section '%s' has no data to dump.\n" +msgstr "" + +#: readelf.c:8342 +msgid "section contents" msgstr "" -#: readelf.c:7710 +#: readelf.c:8362 #, c-format msgid "" -" NOTE: This section has relocations against it, but these have NOT been " -"applied to this dump.\n" +"\n" +"String dump of section '%s':\n" msgstr "" -#: readelf.c:7845 +#: readelf.c:8380 #, c-format msgid "" -"skipping relocation of unknown size against offset 0x%lx in section %s\n" +" Note: This section has relocations against it, but these have NOT been " +"applied to this dump.\n" msgstr "" -#: readelf.c:7854 +#: readelf.c:8409 #, c-format -msgid "skipping invalid relocation offset 0x%lx in section %s\n" +msgid " No strings found in this section." msgstr "" -#: readelf.c:7875 +#: readelf.c:8431 #, c-format -msgid "skipping unexpected symbol type %s in relocation in section .rela%s\n" +msgid "" +"\n" +"Hex dump of section '%s':\n" msgstr "" -#: readelf.c:7902 +#: readelf.c:8455 #, c-format -msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n" +msgid "" +" NOTE: This section has relocations against it, but these have NOT been " +"applied to this dump.\n" msgstr "" -#: readelf.c:7935 +#: readelf.c:8593 #, c-format msgid "%s section data" msgstr "" -#: readelf.c:7972 +#: readelf.c:8658 #, c-format msgid "" "\n" "Section '%s' has no debugging data.\n" msgstr "" -#: readelf.c:7998 +#. There is no point in dumping the contents of a debugging section +#. which has the NOBITS type - the bits in the file will be random. +#. This can happen when a file containing a .eh_frame section is +#. stripped with the --only-keep-debug command line option. +#: readelf.c:8667 +#, c-format +msgid "section '%s' has the NOBITS type - its contents are unreliable.\n" +msgstr "" + +#: readelf.c:8702 #, c-format msgid "Unrecognized debug section: %s\n" msgstr "" -#: readelf.c:8026 +#: readelf.c:8730 #, c-format msgid "Section '%s' was not dumped because it does not exist!\n" msgstr "" -#: readelf.c:8061 +#: readelf.c:8771 #, c-format msgid "Section %d was not dumped because it does not exist!\n" msgstr "" -#: readelf.c:8478 +#: readelf.c:9285 msgid "attributes" msgstr "" -#: readelf.c:8497 +#: readelf.c:9306 #, c-format msgid "ERROR: Bad section length (%d > %d)\n" msgstr "" -#: readelf.c:8522 +#: readelf.c:9337 #, c-format msgid "ERROR: Bad subsection length (%d > %d)\n" msgstr "" -#: readelf.c:8578 +#: readelf.c:9396 #, c-format msgid "Unknown format '%c'\n" msgstr "" -#: readelf.c:8651 readelf.c:9019 +#: readelf.c:9549 readelf.c:10065 msgid "liblist" msgstr "" -#: readelf.c:8740 +#: readelf.c:9636 msgid "options" msgstr "" -#: readelf.c:8770 +#: readelf.c:9666 #, c-format msgid "" "\n" "Section '%s' contains %d entries:\n" msgstr "" -#: readelf.c:8931 +#: readelf.c:9827 msgid "conflict list found without a dynamic symbol table\n" msgstr "" -#: readelf.c:8947 readelf.c:8961 +#: readelf.c:9843 readelf.c:9857 msgid "conflict" msgstr "" -#: readelf.c:8971 +#: readelf.c:9867 #, c-format msgid "" "\n" "Section '.conflict' contains %lu entries:\n" msgstr "" -#: readelf.c:8973 +#: readelf.c:9869 msgid " Num: Index Value Name" msgstr "" -#: readelf.c:9026 +#: readelf.c:9901 +msgid "GOT" +msgstr "" + +#: readelf.c:9902 +#, c-format +msgid "" +"\n" +"Primary GOT:\n" +msgstr "" + +#: readelf.c:9903 +#, c-format +msgid " Canonical gp value: " +msgstr "" + +#: readelf.c:9907 readelf.c:9998 +#, c-format +msgid " Reserved entries:\n" +msgstr "" + +#: readelf.c:9908 +#, c-format +msgid " %*s %10s %*s Purpose\n" +msgstr "" + +#: readelf.c:9924 +#, c-format +msgid " Local entries:\n" +msgstr "" + +#: readelf.c:9925 +#, c-format +msgid " %*s %10s %*s\n" +msgstr "" + +#: readelf.c:9940 +#, c-format +msgid " Global entries:\n" +msgstr "" + +#: readelf.c:9941 +#, c-format +msgid " %*s %10s %*s %*s %-7s %3s %s\n" +msgstr "" + +#: readelf.c:9996 +msgid "PLT GOT" +msgstr "" + +#: readelf.c:9997 +#, c-format +msgid "" +"\n" +"PLT GOT:\n" +"\n" +msgstr "" + +#: readelf.c:9999 +#, c-format +msgid " %*s %*s Purpose\n" +msgstr "" + +#: readelf.c:10007 +#, c-format +msgid " Entries:\n" +msgstr "" + +#: readelf.c:10008 +#, c-format +msgid " %*s %*s %*s %-7s %3s %s\n" +msgstr "" + +#: readelf.c:10072 msgid "liblist string table" msgstr "" -#: readelf.c:9036 +#: readelf.c:10082 #, c-format msgid "" "\n" "Library list section '%s' contains %lu entries:\n" msgstr "" -#: readelf.c:9089 +#: readelf.c:10135 msgid "NT_AUXV (auxiliary vector)" msgstr "" -#: readelf.c:9091 +#: readelf.c:10137 msgid "NT_PRSTATUS (prstatus structure)" msgstr "" -#: readelf.c:9093 +#: readelf.c:10139 msgid "NT_FPREGSET (floating point registers)" msgstr "" -#: readelf.c:9095 +#: readelf.c:10141 msgid "NT_PRPSINFO (prpsinfo structure)" msgstr "" -#: readelf.c:9097 +#: readelf.c:10143 msgid "NT_TASKSTRUCT (task structure)" msgstr "" -#: readelf.c:9099 +#: readelf.c:10145 msgid "NT_PRXFPREG (user_xfpregs structure)" msgstr "" -#: readelf.c:9101 +#: readelf.c:10147 +msgid "NT_PPC_VMX (ppc Altivec registers)" +msgstr "" + +#: readelf.c:10149 +msgid "NT_PPC_VSX (ppc VSX registers)" +msgstr "" + +#: readelf.c:10151 msgid "NT_PSTATUS (pstatus structure)" msgstr "" -#: readelf.c:9103 +#: readelf.c:10153 msgid "NT_FPREGS (floating point registers)" msgstr "" -#: readelf.c:9105 +#: readelf.c:10155 msgid "NT_PSINFO (psinfo structure)" msgstr "" -#: readelf.c:9107 +#: readelf.c:10157 msgid "NT_LWPSTATUS (lwpstatus_t structure)" msgstr "" -#: readelf.c:9109 +#: readelf.c:10159 msgid "NT_LWPSINFO (lwpsinfo_t structure)" msgstr "" -#: readelf.c:9111 +#: readelf.c:10161 msgid "NT_WIN32PSTATUS (win32_pstatus structure)" msgstr "" -#: readelf.c:9119 +#: readelf.c:10169 msgid "NT_VERSION (version)" msgstr "" -#: readelf.c:9121 +#: readelf.c:10171 msgid "NT_ARCH (architecture)" msgstr "" -#: readelf.c:9126 readelf.c:9148 +#: readelf.c:10176 readelf.c:10199 readelf.c:10221 #, c-format msgid "Unknown note type: (0x%08x)" msgstr "" +#: readelf.c:10188 +msgid "NT_GNU_ABI_TAG (ABI version tag)" +msgstr "" + +#: readelf.c:10190 +msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)" +msgstr "" + +#: readelf.c:10192 +msgid "NT_GNU_BUILD_ID (unique build ID bitstring)" +msgstr "" + +#: readelf.c:10194 +msgid "NT_GNU_GOLD_VERSION (gold version)" +msgstr "" + #. NetBSD core "procinfo" structure. -#: readelf.c:9138 +#: readelf.c:10211 msgid "NetBSD procinfo structure" msgstr "" -#: readelf.c:9165 readelf.c:9179 +#: readelf.c:10238 readelf.c:10252 msgid "PT_GETREGS (reg structure)" msgstr "" -#: readelf.c:9167 readelf.c:9181 +#: readelf.c:10240 readelf.c:10254 msgid "PT_GETFPREGS (fpreg structure)" msgstr "" -#: readelf.c:9187 +#: readelf.c:10260 #, c-format msgid "PT_FIRSTMACH+%d" msgstr "" -#: readelf.c:9233 +#: readelf.c:10316 msgid "notes" msgstr "" -#: readelf.c:9239 +#: readelf.c:10322 #, c-format msgid "" "\n" "Notes at offset 0x%08lx with length 0x%08lx:\n" msgstr "" -#: readelf.c:9241 +#: readelf.c:10324 #, c-format msgid " Owner\t\tData size\tDescription\n" msgstr "" -#: readelf.c:9260 +#: readelf.c:10343 #, c-format msgid "corrupt note found at offset %lx into core notes\n" msgstr "" -#: readelf.c:9262 +#: readelf.c:10345 #, c-format msgid " type: %lx, namesize: %08lx, descsize: %08lx\n" msgstr "" -#: readelf.c:9360 +#: readelf.c:10443 #, c-format msgid "No note segments present in the core file.\n" msgstr "" -#: readelf.c:9444 +#: readelf.c:10527 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:9493 readelf.c:9837 +#: readelf.c:10574 #, c-format msgid "%s: Failed to read file header\n" msgstr "" -#: readelf.c:9506 +#: readelf.c:10587 #, c-format msgid "" "\n" "File: %s\n" msgstr "" -#: readelf.c:9654 readelf.c:9675 readelf.c:9712 readelf.c:9792 +#: readelf.c:10802 +#, c-format +msgid "%s: failed to seek to first archive header\n" +msgstr "" + +#: readelf.c:10811 readelf.c:11076 readelf.c:11246 #, c-format msgid "%s: failed to read archive header\n" msgstr "" -#: readelf.c:9665 +#: readelf.c:10836 +#, c-format +msgid "%s: the archive index is empty\n" +msgstr "" + +#: readelf.c:10844 readelf.c:10867 +#, c-format +msgid "%s: failed to read archive index\n" +msgstr "" + +#: readelf.c:10853 +#, c-format +msgid "" +"%s: the archive index is supposed to have %ld entries, but the size in the " +"header is too small\n" +msgstr "" + +#: readelf.c:10860 +msgid "Out of memory whilst trying to read archive symbol index\n" +msgstr "" + +#: readelf.c:10877 +msgid "Out of memory whilst trying to convert the archive symbol index\n" +msgstr "" + +#: readelf.c:10889 +#, c-format +msgid "%s: the archive has an index but no symbols\n" +msgstr "" + +#: readelf.c:10896 +msgid "Out of memory whilst trying to read archive index symbol table\n" +msgstr "" + +#: readelf.c:10902 +#, c-format +msgid "%s: failed to read archive index symbol table\n" +msgstr "" + +#: readelf.c:10910 #, c-format msgid "%s: failed to skip archive symbol table\n" msgstr "" -#: readelf.c:9697 +#: readelf.c:10921 #, c-format -msgid "%s: failed to read string table\n" +msgid "%s: failed to read archive header following archive index\n" msgstr "" -#: readelf.c:9733 +#: readelf.c:10926 #, c-format -msgid "%s: invalid archive string table offset %lu\n" +msgid "%s has no archive index\n" +msgstr "" + +#: readelf.c:10937 +msgid "Out of memory reading long symbol names in archive\n" msgstr "" -#: readelf.c:9749 +#: readelf.c:10945 #, c-format -msgid "%s: bad archive file name\n" +msgid "%s: failed to read long symbol name string table\n" +msgstr "" + +#: readelf.c:11070 +#, c-format +msgid "%s: failed to seek to next file name\n" +msgstr "" + +#: readelf.c:11081 readelf.c:11252 +#, c-format +msgid "%s: did not find a valid archive header\n" +msgstr "" + +#: readelf.c:11162 +#, c-format +msgid "%s: unable to dump the index as none was found\n" +msgstr "" + +#: readelf.c:11168 +#, c-format +msgid "Index of archive %s: (%ld entries, 0x%lx bytes in the symbol table)\n" msgstr "" -#: readelf.c:9781 +#: readelf.c:11186 +#, c-format +msgid "Binary %s contains:\n" +msgstr "" + +#: readelf.c:11194 +#, c-format +msgid "%s: end of the symbol table reached before the end of the index\n" +msgstr "" + +#: readelf.c:11205 +#, c-format +msgid "" +"%s: symbols remain in the index symbol table, but without corresponding " +"entries in the index table\n" +msgstr "" + +#: readelf.c:11210 +#, c-format +msgid "%s: failed to seek back to start of object files in the archive\n" +msgstr "" + +#: readelf.c:11238 #, c-format msgid "%s: failed to seek to next archive header\n" msgstr "" -#: readelf.c:9815 +#: readelf.c:11266 readelf.c:11275 +#, c-format +msgid "%s: bad archive file name\n" +msgstr "" + +#: readelf.c:11294 readelf.c:11370 +#, c-format +msgid "Input file '%s' is not readable.\n" +msgstr "" + +#: readelf.c:11316 +#, c-format +msgid "%s: failed to seek to archive member.\n" +msgstr "" + +#: readelf.c:11354 #, c-format msgid "'%s': No such file\n" msgstr "" -#: readelf.c:9817 +#: readelf.c:11356 #, c-format msgid "Could not locate '%s'. System error message: %s\n" msgstr "" -#: readelf.c:9824 +#: readelf.c:11363 #, c-format msgid "'%s' is not an ordinary file\n" msgstr "" -#: readelf.c:9831 +#: readelf.c:11376 #, c-format -msgid "Input file '%s' is not readable.\n" +msgid "%s: Failed to read file's magic number\n" +msgstr "" + +#: readelf.c:11388 +#, c-format +msgid "File %s is not an archive so its index cannot be displayed.\n" msgstr "" -#: rename.c:130 +#: rename.c:124 #, c-format msgid "%s: cannot set time: %s" msgstr "" #. We have to clean up here. -#: rename.c:165 rename.c:203 +#: rename.c:159 rename.c:197 #, c-format -msgid "unable to rename '%s' reason: %s" +msgid "unable to rename '%s'; reason: %s" msgstr "" -#: rename.c:211 +#: rename.c:205 #, c-format -msgid "unable to copy file '%s' reason: %s" +msgid "unable to copy file '%s'; reason: %s" msgstr "" -#: resbin.c:119 +#: resbin.c:120 #, c-format msgid "%s: not enough binary data" msgstr "" -#: resbin.c:135 +#: resbin.c:136 msgid "null terminated unicode string" msgstr "" -#: resbin.c:162 resbin.c:168 +#: resbin.c:163 resbin.c:169 msgid "resource ID" msgstr "" -#: resbin.c:207 +#: resbin.c:208 msgid "cursor" msgstr "" -#: resbin.c:238 resbin.c:245 +#: resbin.c:239 resbin.c:246 msgid "menu header" msgstr "" -#: resbin.c:254 +#: resbin.c:255 msgid "menuex header" msgstr "" -#: resbin.c:258 +#: resbin.c:259 msgid "menuex offset" msgstr "" -#: resbin.c:263 +#: resbin.c:264 #, c-format msgid "unsupported menu version %d" msgstr "" -#: resbin.c:288 resbin.c:303 resbin.c:365 +#: resbin.c:289 resbin.c:304 resbin.c:366 msgid "menuitem header" msgstr "" -#: resbin.c:395 +#: resbin.c:396 msgid "menuitem" msgstr "" -#: resbin.c:432 resbin.c:460 +#: resbin.c:433 resbin.c:461 msgid "dialog header" msgstr "" -#: resbin.c:450 +#: resbin.c:451 #, c-format msgid "unexpected DIALOGEX version %d" msgstr "" -#: resbin.c:495 +#: resbin.c:496 msgid "dialog font point size" msgstr "" -#: resbin.c:503 +#: resbin.c:504 msgid "dialogex font information" msgstr "" -#: resbin.c:529 resbin.c:547 +#: resbin.c:530 resbin.c:548 msgid "dialog control" msgstr "" -#: resbin.c:539 +#: resbin.c:540 msgid "dialogex control" msgstr "" -#: resbin.c:568 +#: resbin.c:569 msgid "dialog control end" msgstr "" -#: resbin.c:580 +#: resbin.c:581 msgid "dialog control data" msgstr "" -#: resbin.c:620 +#: resbin.c:621 msgid "stringtable string length" msgstr "" -#: resbin.c:630 +#: resbin.c:631 msgid "stringtable string" msgstr "" -#: resbin.c:660 +#: resbin.c:661 msgid "fontdir header" msgstr "" -#: resbin.c:674 +#: resbin.c:675 msgid "fontdir" msgstr "" -#: resbin.c:691 +#: resbin.c:692 msgid "fontdir device name" msgstr "" -#: resbin.c:697 +#: resbin.c:698 msgid "fontdir face name" msgstr "" -#: resbin.c:737 +#: resbin.c:738 msgid "accelerator" msgstr "" -#: resbin.c:796 +#: resbin.c:797 msgid "group cursor header" msgstr "" -#: resbin.c:800 resrc.c:1306 +#: resbin.c:801 resrc.c:1355 #, c-format msgid "unexpected group cursor type %d" msgstr "" -#: resbin.c:815 +#: resbin.c:816 msgid "group cursor" msgstr "" -#: resbin.c:851 +#: resbin.c:852 msgid "group icon header" msgstr "" -#: resbin.c:855 resrc.c:1253 +#: resbin.c:856 resrc.c:1302 #, c-format msgid "unexpected group icon type %d" msgstr "" -#: resbin.c:870 +#: resbin.c:871 msgid "group icon" msgstr "" -#: resbin.c:934 resbin.c:1150 +#: resbin.c:935 resbin.c:1151 msgid "unexpected version string" msgstr "" -#: resbin.c:965 +#: resbin.c:966 #, c-format msgid "version length %d does not match resource length %lu" msgstr "" -#: resbin.c:969 +#: resbin.c:970 #, c-format msgid "unexpected version type %d" msgstr "" -#: resbin.c:981 +#: resbin.c:982 #, c-format msgid "unexpected fixed version information length %ld" msgstr "" -#: resbin.c:984 +#: resbin.c:985 msgid "fixed version info" msgstr "" -#: resbin.c:988 +#: resbin.c:989 #, c-format msgid "unexpected fixed version signature %lu" msgstr "" -#: resbin.c:992 +#: resbin.c:993 #, c-format msgid "unexpected fixed version info version %lu" msgstr "" -#: resbin.c:1021 +#: resbin.c:1022 msgid "version var info" msgstr "" -#: resbin.c:1038 +#: resbin.c:1039 #, c-format msgid "unexpected stringfileinfo value length %ld" msgstr "" -#: resbin.c:1048 +#: resbin.c:1049 #, c-format msgid "unexpected version stringtable value length %ld" msgstr "" -#: resbin.c:1082 +#: resbin.c:1083 #, c-format msgid "unexpected version string length %ld != %ld + %ld" msgstr "" -#: resbin.c:1093 +#: resbin.c:1094 #, c-format msgid "unexpected version string length %ld < %ld" msgstr "" -#: resbin.c:1110 +#: resbin.c:1111 #, c-format msgid "unexpected varfileinfo value length %ld" msgstr "" -#: resbin.c:1129 +#: resbin.c:1130 msgid "version varfileinfo" msgstr "" -#: resbin.c:1144 +#: resbin.c:1145 #, c-format msgid "unexpected version value length %ld" msgstr "" @@ -4914,7 +5536,7 @@ msgstr "" msgid "filename required for COFF output" msgstr "" -#: rescoff.c:718 +#: rescoff.c:715 msgid "can't get BFD_RELOC_RVA relocation type" msgstr "" @@ -4963,75 +5585,79 @@ msgstr "" msgid "Using `%s'\n" msgstr "" -#: resrc.c:583 +#: resrc.c:608 +msgid "preprocessing failed." +msgstr "" + +#: resrc.c:631 #, c-format msgid "%s:%d: %s\n" msgstr "" -#: resrc.c:591 +#: resrc.c:639 #, c-format msgid "%s: unexpected EOF" msgstr "" -#: resrc.c:640 +#: resrc.c:688 #, c-format msgid "%s: read of %lu returned %lu" msgstr "" -#: resrc.c:678 resrc.c:1453 +#: resrc.c:727 resrc.c:1502 #, c-format msgid "stat failed on bitmap file `%s': %s" msgstr "" -#: resrc.c:729 +#: resrc.c:778 #, c-format msgid "cursor file `%s' does not contain cursor data" msgstr "" -#: resrc.c:761 resrc.c:1161 +#: resrc.c:810 resrc.c:1210 #, c-format msgid "%s: fseek to %lu failed: %s" msgstr "" -#: resrc.c:887 +#: resrc.c:936 msgid "help ID requires DIALOGEX" msgstr "" -#: resrc.c:889 +#: resrc.c:938 msgid "control data requires DIALOGEX" msgstr "" -#: resrc.c:917 +#: resrc.c:966 #, c-format msgid "stat failed on font file `%s': %s" msgstr "" -#: resrc.c:1130 +#: resrc.c:1179 #, c-format msgid "icon file `%s' does not contain icon data" msgstr "" -#: resrc.c:1675 resrc.c:1710 +#: resrc.c:1724 resrc.c:1759 #, c-format msgid "stat failed on file `%s': %s" msgstr "" -#: resrc.c:1891 +#: resrc.c:1940 #, c-format msgid "can't open `%s' for output: %s" msgstr "" -#: size.c:84 +#: size.c:79 #, c-format msgid " Displays the sizes of sections inside binary files\n" msgstr "" -#: size.c:85 +#: size.c:80 #, c-format msgid " If no input file(s) are specified, a.out is assumed\n" msgstr "" -#: size.c:86 +#: size.c:81 #, c-format msgid "" " The options are:\n" @@ -5040,6 +5666,7 @@ msgid "" "hex\n" " -t --totals Display the total sizes (Berkeley " "only)\n" +" --common Display total size for *COM* syms\n" " --target= Set the binary file format\n" " @ Read options from \n" " -h --help Display this information\n" @@ -5047,22 +5674,22 @@ msgid "" "\n" msgstr "" -#: size.c:159 +#: size.c:160 #, c-format msgid "invalid argument to --format: %s" msgstr "" -#: size.c:186 +#: size.c:187 #, c-format msgid "Invalid radix: %s\n" msgstr "" -#: srconv.c:1724 +#: srconv.c:1731 #, c-format msgid "Convert a COFF object file into a SYSROFF object file\n" msgstr "" -#: srconv.c:1725 +#: srconv.c:1732 #, c-format msgid "" " The options are:\n" @@ -5074,12 +5701,12 @@ msgid "" " -v --version Print the program's version number\n" msgstr "" -#: srconv.c:1871 +#: srconv.c:1878 #, c-format msgid "unable to open output file %s" msgstr "" -#: stabs.c:328 stabs.c:1706 +#: stabs.c:328 stabs.c:1726 msgid "numeric overflow" msgstr "" @@ -5109,125 +5736,125 @@ msgstr "" #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabs.c:1251 +#: stabs.c:1271 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:1798 +#: stabs.c:1818 msgid "missing index type" msgstr "" -#: stabs.c:2112 +#: stabs.c:2134 msgid "unknown virtual character for baseclass" msgstr "" -#: stabs.c:2130 +#: stabs.c:2152 msgid "unknown visibility character for baseclass" msgstr "" -#: stabs.c:2316 +#: stabs.c:2338 msgid "unnamed $vb type" msgstr "" -#: stabs.c:2322 +#: stabs.c:2344 msgid "unrecognized C++ abbreviation" msgstr "" -#: stabs.c:2398 +#: stabs.c:2420 msgid "unknown visibility character for field" msgstr "" -#: stabs.c:2650 +#: stabs.c:2672 msgid "const/volatile indicator missing" msgstr "" -#: stabs.c:2886 +#: stabs.c:2908 #, c-format msgid "No mangling for \"%s\"\n" msgstr "" -#: stabs.c:3186 +#: stabs.c:3208 msgid "Undefined N_EXCL" msgstr "" -#: stabs.c:3266 +#: stabs.c:3288 #, c-format msgid "Type file number %d out of range\n" msgstr "" -#: stabs.c:3271 +#: stabs.c:3293 #, c-format msgid "Type index number %d out of range\n" msgstr "" -#: stabs.c:3350 +#: stabs.c:3372 #, c-format msgid "Unrecognized XCOFF type %d\n" msgstr "" -#: stabs.c:3642 +#: stabs.c:3664 #, c-format msgid "bad mangled name `%s'\n" msgstr "" -#: stabs.c:3737 +#: stabs.c:3759 #, c-format msgid "no argument types in mangled string\n" msgstr "" -#: stabs.c:5091 +#: stabs.c:5113 #, c-format msgid "Demangled name is not a function\n" msgstr "" -#: stabs.c:5133 +#: stabs.c:5155 #, c-format msgid "Unexpected type in v3 arglist demangling\n" msgstr "" -#: stabs.c:5200 +#: stabs.c:5222 #, c-format msgid "Unrecognized demangle component %d\n" msgstr "" -#: stabs.c:5252 +#: stabs.c:5274 #, c-format msgid "Failed to print demangled template\n" msgstr "" -#: stabs.c:5332 +#: stabs.c:5354 #, c-format msgid "Couldn't get demangled builtin type\n" msgstr "" -#: stabs.c:5381 +#: stabs.c:5403 #, c-format msgid "Unexpected demangled varargs\n" msgstr "" -#: stabs.c:5388 +#: stabs.c:5410 #, c-format msgid "Unrecognized demangled builtin type\n" msgstr "" -#: strings.c:215 +#: strings.c:201 strings.c:260 #, c-format -msgid "invalid number %s" +msgid "invalid integer argument %s" msgstr "" -#: strings.c:697 +#: strings.c:263 #, c-format -msgid "invalid integer argument %s" +msgid "invalid minimum string length %d" msgstr "" -#: strings.c:706 +#: strings.c:660 #, c-format msgid " Display printable strings in [file(s)] (stdin by default)\n" msgstr "" -#: strings.c:707 +#: strings.c:661 #, c-format msgid "" " The options are:\n" @@ -5235,7 +5862,7 @@ msgid "" " -f --print-file-name Print the name of the file before each string\n" " -n --bytes=[number] Locate & print any NUL-terminated sequence of " "at\n" -" - least [number] characters (default 4).\n" +" - least [number] characters (default 4).\n" " -t --radix={o,d,x} Print the location of the string in base 8, 10 " "or 16\n" " -o An alias for --radix=o\n" @@ -5245,15 +5872,15 @@ msgid "" "bit\n" " @ Read options from \n" " -h --help Display this information\n" -" -v --version Print the program's version number\n" +" -v -V --version Print the program's version number\n" msgstr "" -#: sysdump.c:641 +#: sysdump.c:647 #, c-format msgid "Print a human readable interpretation of a SYSROFF object file\n" msgstr "" -#: sysdump.c:642 +#: sysdump.c:648 #, c-format msgid "" " The options are:\n" @@ -5261,34 +5888,36 @@ msgid "" " -v --version Print the program's version number\n" msgstr "" -#: sysdump.c:709 +#: sysdump.c:715 #, c-format msgid "cannot open input file %s" msgstr "" -#: version.c:34 +#: version.c:35 #, c-format -msgid "Copyright 2007 Free Software Foundation, Inc.\n" +msgid "Copyright 2009 Free Software Foundation, Inc.\n" msgstr "" -#: version.c:35 +#: version.c:36 #, 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" +"the GNU General Public License version 3 or (at your option) any later " +"version.\n" +"This program has absolutely no warranty.\n" msgstr "" -#: windmc.c:194 +#: windmc.c:195 #, c-format msgid "can't create %s file ,%s' for output.\n" msgstr "" -#: windmc.c:202 +#: windmc.c:203 #, c-format msgid "Usage: %s [option(s)] [input-file]\n" msgstr "" -#: windmc.c:204 +#: windmc.c:205 #, c-format msgid "" " The options are:\n" @@ -5316,7 +5945,7 @@ msgid "" "name.\n" msgstr "" -#: windmc.c:224 +#: windmc.c:225 #, c-format msgid "" " -H --help Print this help message\n" @@ -5324,31 +5953,36 @@ msgid "" " -V --version Print version information\n" msgstr "" -#: windmc.c:287 windres.c:415 +#: windmc.c:296 windres.c:415 #, c-format msgid "%s: warning: " msgstr "" -#: windmc.c:288 +#: windmc.c:297 #, c-format msgid "A codepage was specified switch ,%s' and UTF16.\n" msgstr "" -#: windmc.c:289 +#: windmc.c:298 #, c-format msgid "\tcodepage settings are ignored.\n" msgstr "" -#: windmc.c:333 +#: windmc.c:342 msgid "try to add a ill language." msgstr "" -#: windmc.c:1142 +#: windmc.c:1151 #, c-format msgid "unable to open file ,%s' for input.\n" msgstr "" -#: windmc.c:1161 +#: windmc.c:1159 +#, c-format +msgid "unable to read contents of %s" +msgstr "" + +#: windmc.c:1171 msgid "input file does not seems to be UFT16.\n" msgstr "" @@ -5437,26 +6071,26 @@ msgid "" "No input-file is stdin, default rc. No output-file is stdout, default rc.\n" msgstr "" -#: windres.c:828 +#: windres.c:848 msgid "invalid codepage specified.\n" msgstr "" -#: windres.c:843 +#: windres.c:863 msgid "invalid option -f\n" msgstr "" -#: windres.c:848 +#: windres.c:868 msgid "No filename following the -fo option.\n" msgstr "" -#: windres.c:907 +#: windres.c:927 #, c-format msgid "" "Option -I is deprecated for setting the input format, please use -J " "instead.\n" msgstr "" -#: windres.c:1027 +#: windres.c:1037 msgid "no resources" msgstr "" diff --git a/binutils/po/da.gmo b/binutils/po/da.gmo index 8f9b965b6edf3be9e4c3fea6be8d4dc76563f2d9..92a2025770459fd0900fd1b0f0da8eef97b99199 100644 GIT binary patch delta 18089 zcmaLd2Y6M*-tY0XLTG_NLI@D*rUU{ZBywUW=&Z;o^uXf4Sj7E< zp-UXDDsSOx22P3(kqa6HE20~m>Gu|96Ws(1#= zpxfCz7mhyS#z5(Y~VP~3RH)?uq2+s2t125@EXQpr7mXRovgZwAuHR}siuH(pMlC@k8%ler zAy!0x4>HBcjJBqrrgkzm!Y45f-@`Ec7S+H7TV8sYDQ|`)Der(qx1h088!R|ssVSn<0N2d)Uj%fQ8)-IVH&D~`!F7#$GW%=efW#LA2GtzYmOSo zaHK=WZ_6LUt~&p3lF=Gp#@g6;q&YtQQA;uw)xbRKI_yP!99cD|_9*kA%0~_CanzEn zLw%^WV=X*wbw-1nE?zyP31kPwSNxP@NVlB)WB+u*Qb*cf%+h2 zqh?|~@{&&I9cJL;QA@cPwf0-FF`hvUG%AJp?@XpgirMY+Pz~=yP5p1!3TvjC4u)ZM z;#H^yKEjdbm!3Fbr94fV$NppMy_sQcHj8P=a@zOfi?~jelWPEODnf4Ye_bI2qOPQ1oFQ)j zrWOU;P*eB~>NH$M&4h2NIgTSyZ#WsX<}n_xCd6l z;TWUypGPK=g2z!0tUyi82dIjNupa)54KOmxbleup5f8#Dn1UL}3~Y!`q1xMwW${ZJ z|A?Bo;@L?5PIWSRv*s9%J+T80MeWwb7=}Ah^$wwC>N`}2*U^U+bBrxfOEMhQUJ9yS zHfkvzLAA3A{VI5$jNaflY9=nDrnXqFIUUtd_Y+YK_OcGga>SEtoR50r2T<*OIncMqzA1*oNX!@A9S z%z6PefMNw^lUGM=-uBipeln^s6LsD_Ova;F9wVoj%~KoIaTAQh9=3c0YO_tkiufd| z-b?ryzK@#0C#IWYy&e;Yk6QhqcbhL&Gt^p+#}b%@YN!CUc^*T}(5qMm-$M;>Cu#|f zpbvjREnUPtrsLMAcr5nE2eBi5hCJ_gB4?QMUK^vi(FfI03TmqIQA@Gd`WEgXK8Skb zz)bT&S%Xn3N44`U>i#vXisAQ~_TsPw@ogBX^M4;1z0s4Xsd@%A;w@MQ&)D+P_n9|r zVjY00pNrLT32MOWt)JTROPE4=_$)RgW~27h7A&pve~3&Bp1{iZ8&<)xv(1~tTH9ef z<%2L3XJLDsgQ~v;wIs(;d*nydo8LgSA5CX9F%h-Y{n4)n#@QQLs0SXm@ha3(>_ScH z7pMXLg4!D;?>BKx)Bswc$_Jo+Lnfo1e-yPe%Tdq2jryQ{d_VKAHTs+aeOk|jmUu6!{i9eLf0)CY)FD&y zK{LWe*qFE@w!^8|3|FCklulrEEcTEYh!3?Sov;>8wdIeY)_65)U>~4n@F;2qen!ny zsDG~ckW{m_Mm03VnvdFy9>(JP=)=>fH*n{fxURK3YCvhInOcPUKD>pR;S;Et2zl7d zgufgay;%)xg*{ONn1yO+IqFS5#zuGo`(W|;=1;YOsN>{E)qe-o!D%ddQ`8cKK4RLb zj5UbkkWK1$dXmvpj6`k59Q2_d)!<6ho9wrqM=e>{qh{t3Fpju4`Y;dGo`(%^wT(YR zwQ~;je5uFuePI3L$>@zcqZ&#ny1~yRYIChX?cR-83iqQAkDwa-1Iu9a`z02bJ<$mLO}H_Xj2?UtH503_5$?uv_$z7#+=XT>qft{FhvC=> zBd{N8#>Qi5ya#o>=U4++o_Gza-iHgBe`StRpks0gHPSMRjLpzTJPI{KGf|uAIn=<` zVM*MK8sILB#1p9dKVw<^6Lr7TVzU(0QS}-uX8u*7Ed?4#PgIqIUnkSPffvX6*-}+MA6&T!tFZd#LZg9@N0U_LI>_&Y&K+h8jSHr_83Rg_`1c zYg^PNybU##1Fb1ofjAc{;)AGxF2kakLT%Q~r~!Os%l%i#=)sUB=GQD5wVRVs=eH+n zX~yFaoPiq90ek;T>lIXoWtN&3sDs*ki5QAwusEim1~M5VbpGd((NrwO1YCjIjQde< zcnRyF6EMds7B#@esDZRWy+BWl#!>cu4r(UvMYS{E#>-GM@(Nbb`G1Fu9z0cJ+c8R=l-k*E&RQ3Jml)$y~aFWqaX0q#OA@fS9}f;DyiOFV6+Bo?EH zyQ3Z$iJFh3(?y-J_F~q-O6)gLV`HsY*p6iD?U3a67`3fxh`+qYT zz41w`gcngA6o1wc^;|ycd*Pur+XmFkevS?B zN7M^PtYH3?sk6eKU({wBXya+9y|DIw`n;*%7BwS1 ztz)dYew&$#8sRgj8Fu8=lQ_<0K&S!S z_M%yevFIcAPa~r@UW(eiAE0LB6sn`ksI{x|l4-Ch)*`nYPcEdjR&LN_+iw* z-$xB#Ki0!ZaubN-UW~dpSgcWrDr;*X|n2$AaJ+{G5u@#1`GJolG!N$b7sQSxM z^>(9X$a&2SBnH(%U+j+Ka4^1znxWsZD@MMK^zRHM(-8yM36EksthCyE;Ra&~;uNfm z>DUGR*c`W^X5x3$fE&GG;#3??ycAV_0b66eHD<=gqW^XZ9wnm&kD^9aWvy9)G1!v$ zX;ep_paxLvP4o9bHS9**6WimXs19~p|3xiL>viV&JFyAz3e!%mnO=GfKor1b^In`6wb!txY)W3HIpk)FR&do z(^s)H`rb3A$lr*JZuCLj$hXeII>Zm#`>Ro><1ohJuc(1ndEfj=m56#i8MRrvV*=ie zRd5Ds1{R}U>=pE}|C~)^;wktVHR7-j%y*y(Y5)VQd8mOd!7{iRRevvb#f#Vun|^4% z{aF}JyZ{^Ga@6y?t(UO3&VS4%^WVu%#9CC?fa>@N>YIMemY3RWI*dcr>x-(FiS2O# zHp2a=nYoIpS8j{h6HQPvFdl2-U8sL0cNUVVj<2E`*nvrS(OPS(i3egU${)avxDiwE zD)z^b+svD;!rH{2qT0KHn&Fz;jeW2d@pSYzC9{-FH{64Ru8PQSk)Su6+dc zrkk-R{*7w5`);$AIT%5_40TFg$7I}sCGZB8LU)f@k}%ZswNV4_yT@-v4h&GoW}ZNjwy_RAaFdde{pOqc&;veddKm`pKxm z^QeYTp>}QPeolhRhCywX8V5`V?NRm8Q1u?gint6TaV?g?EvS0?Z22V&B@Q{r=Nn6+ zVt*MjF=QgJG&aI&*upx{nu*#p^HB}IhFZe|7>1Woo9-{vfNFkXK3L7MIq?`QhYL`r zV+GdG`QJcB12~L&(+ik@We=HCk&Hg#5jMUDwM0u$9ln8j{s8Jrc-EHxiR!4vr>312 zsDTf{1~?sy{{CM9j#{vuR^8!-w$ zMa{$ys44yzbvhaxHK%J3vgXb#>$68$e?9OX1sdsLjK+(o2SbmU8EJyLKL}Mn6IE{> zYJksS3*3%+^Q)+OrH`8d)_eQ^nD#u8M6uj4Pc8?}22 zzck10Bqk9%C(R!cO;M*N1IuFoi{mQP0M=p^+=1%vB$>db>bb?)2P$*H*(VbPK{G$DlVYb(micP z+5oE(ceai}P5pGNiHlKh{5EQHo^r9wHu~To{E}*?WnyH^_@AUv8VwjqMq-An$an!HJ^iO|7q0BZouO7@0=ym z5ig(~X#BldlAfsJHXK!+f!d@GqNem&)F#@9TEhLPj!&ZM-#{N${J{*MCF;4ps6CN^ zevQm;D=bBIuokt3JFzjIK<(<1XUw1315x*%LH*dQv+)P0bAJf6B-gMGmOg8itTC$N z+fhr9dY1L?O6CCy)bU5CU3wBb;qQ1iw*1j_xEA%H+KzhTL)ZvUqxM3XbM}jf8hBr9 zjWe(f=VN^gpw@UZs)IwQH~$AUb5ZBb8#O|0%FZ^v z18WmcL%nIh-Y-P8d(@Wy?I)u(tMRj`*v>iz8&ZBRYJjhxM!wD7KZj+BOJ6YOxf1G_ z#$qy#LQVZssAF4*dXY2O01gsQNomGxi;-!|-3t6179MGZ?k`vau9Cgg*Lrp0E|(M7{A|EP+Q+4St1sqmoz5 zgVivSxE>~9D{P19s40I58{sb0^OvzHR{PETP1p}R5I=-1>EGE-Mw{gtw!x~un>QSS z&4_2B-e@gqX}&~FZLvSh%*0_!;$f(@e++%N3swIthGY4w=5*AsCZS(ntZroV=Hu;+ zJ5g^k3rpfkERU~YMcjy*fdi=LPoa+O4b&1vT{CZR>%q!A%&0 zM{xvRLJh><>u*zG6skfVYONl}a<~RH6CYr4Jd4^Z7f=mfM>SO8AM-C1b+IvV9BS={ zq1u^^vG@dP27|}|{mxc0YH%N_!DFbYykyIZ{c9d5kD9{js16%r6m~#8HwZQLccNxu zE~?&hsF_-8;~l60e2%d?|KE_&6qa<{qK;!wo2D^pU_($-dWXF~2i4&ctcGu*j_+R7 zb3da75aqf>?KVPf&i1H|d!S}!Fjl31=Uy@z;ZoFtYfwwE1J%)2s1L~>sLkpNF#{Ti z8bCg({sPp1Uq`+923x)h)$VE3Ub>2!$@2Uk#r#^ET4XeUCaBHV9aTQcmQO)V?QB#- zPuu%%p+3P|P;c}dYNpDDnwd;Q4Xi7wy|Jk0r=kWjC)73n`~Nc()TCgY^&slaFQ6JI zQQX8n)Uj%d>gYC9Lw8!|V0GeWun`tw4g40>zEi?2+B3CKFWS6>->gY53bZ!EP9HqbzLW~YbohKQI7wy zf_wf!+=w9Qhhnh3u^yAS`KXPz*+wd11L_VYy~Dkcqyv;yBn=?#CB6^e#kp9T^fLKd zFaDHtic>xS^Fwt0?3G5Lu3eG#6xiz>Pn*gZt}xO`f1knH)W?t z7bv?IkCXCAx~k$K%C%|VBmF|$nRpC&A9?>Q{t-ukuIEV`i*g(-%HOc%oyqIkMEa8S z1@Y6|<2S^)3xC6Uc#o|=4WFj$V;hroGRaTF`+0T^`6*cC=K3GuMpFtmk#tn4+Se<;BEzlm4^* zPZ2ywddNOl3v+G$9_ppohxxU2Ue$wKmAM~D+DlqQx}CBL_TFl2M47INwOuW{XDgKB2<1}y|HYHUiwWfR*7Q>mhHcoywWlz|$@9_!hw37UI%4?E-BYj2u z8R-h?=B1zKjyBLQsQ#zeo7Y+D?N_4}DR~i(+MBJ2KO%q9Hnf@ir=(GoPa?IUyg6}S z@;9%&#Gg~XoPxVZq2yn}UA7I?OQX*7#CMREk^h6_58P5gm3|QL6$K68Qm3Gy$H(zri^xQ4x_U(Ma*19+8`Y|C#W-=6%dq+{BD3&#OKVQeXR=;`6uU zzb5`x9X~>5I;l4|bL_*@F!7ekJIVK=ET4L(NEdBAvQ8b+`=mnZT*D6ByZx5?Ih4;K zd8A(4|CLmWbdb2qr~E_L=cM}N!;2y+)4*q>4Yr{lu%{Ar?!hNXuaIBiz0f+!|30}8 zN^}Jc&MeASlXr1ANq>NqB8?^Ov~~AU{x<2>>jd|*DL9P3lCntsh-Z`dd(at&ACR_^ zR`F~if5npJ2b@5Ejut2NB0rDHx)xeT{Z~h2D37)GRPT4vXQb~*ok`!2bamjlOVpcz zqlwRxKUj2!zqzrKc9E{PNO@G+UKB9^^2ey`!!neuMqQOC`+#&O`D|NOnf&9FH6lGr zT1Y$zb*AH8*keOPGdWpe;@Cq&LvVk@=sB( zFFtFZYiaBKL;M=|p0;rl@+T?Vg1Sag-h}iWvHvA96K%z+wn8rP67qFz`Ev4Wd2lH4 z6kDf9QB%AD@msb`MMug1iLcuGVgzNc@oXab=g9ZA?e@^GNHW2EZsgg*Z^=&}>8eed zO?jW9h(Aer_&MUz#6Q{k{jfS|17&~NvL)m{psucBl)Xp#$i~lLHBt(xyM9GBk{L+_ z&(wFy5-%hF3TZdxVWh9f$54J0`xEQxLacw|IF0K``zU|W-fM;@xOX3EF6jl*gVfPg zn|oJmJ-h!Iow--^&!x8FAfnrCUN=hcPzJ7}?DEY9h(9D`d+!1Ko${^J|C#(_ztsnyNDB5M)o8iNm0;Q^Aa(!^&>)@g0a6dtqr<2aQ%KT-B29=CNj zP##BI9*2;^NXgv0pY$#H%OqX%H2>YGc!)HUf+*6zy2JG(m73r}TUll8NlBz~ls%4P z?Y$d3uWLT>^W!?Mzf77$u#+3_;S%C3 zd;~wiiIlG(r4s){{22KMNxI4#oEDVp8cm%%yq9P=J8WLm(Dy%_iq8-fQ-2a5~JFzk85@l5| zlBBB@7I)k5%SPrh1@%Zjk{%^~gvwE*{p7c!uAj;4+D5A2cz@jXa`3HQiLQ61cS=k~ zerkSxTGoWj8NQs!zWlU_1sOTnzS#U^Z)%@j-cNmIdMj>!$Q#ply7zbANx@b9!d&mG z{xQMS0gXa}JqJgZDwdj=85}*jR%qAG?I&ksrgilF*EKjTb&@Y9SIy@8Cg)>Dt>{dCuqMW|r{gOm0x3 zTPE+5>@_`Cw`8~Mf@ELpq~N6VcA>#`na{c2k6BT{^4Z~TaA3}&V!ol{{%5EOzO2-# zX}(ln!IX?_UuxdODH+p)U*;Vx7Q8WiL}*DnAaC1*N;Uq!FXZzj6i}mD!(q9TQVY^( ziUx~XN^6ks%b$@oAt#e=a(x9ES!wwNsad&R|9jiH(>?#_DqgjbrGszWJJ|Iq%!=_k z&pPPE&K~Q1GP`xP?3@DMINq~JIwVeEzk8{ zTki9ISYF=iy5dK#%kxcRd>Prf(+ciT*S?OvoM{C&qhQ+e#Y2KCUtj}$`{KCZ;FtQk z-j$cvd)rsFNstg7#Zd*fH<27g#x*$tLm zQ_&69UmG4$B70iagtR;_ech?E1lPQC#q|!pyTaR4 zSSPe#MsAw-#Kx>(o%bq)dTlnPdY^1MGQ4e*reTBAa&z(u68hz*XG}`yIxRgvVQ5aW zZ^E?ngb5kh(+V;&^E;_lzkgzl_wvaeZEQk#UNw*1G}v}JP3 zR`E$~n|p^gSB{{lWkR!7zNT%HTegf(YUW+tJRp2hYIgqAg!H^=xw&cC!9H6;++fPq zO0G9+TUO2P|2c+fc^TR1zEmB>ssA~ORknBW7H@yT8@*$JJH+d>yNcKGqr1G5A59M4 zzms!(dY3Oab$8bgujk-ap8s%I@Ws7dO2rJ#$eeubPT#cbNojfc1$k-dzT6*toYu79 zwa=15dlYTy|L3&&`ku-6O;62C&zhE*kv=7jXF0T~KAqW)MMt)0PTtfe2|4z}_C2=I zOFI6HH(_5(@87S7gx=2a^G<(L$vZTmw0GiEM6l%PwxPkVzhC2)nUI>FHX$=->Qvr- z^BER0^v5^;`w(WPPWPo1_zGrZPb%Q-Oyv-+KEJkDaOE$Fp(V_SIboG+|F5IGc@Eo24heO?4-GSOqa#{4x3qgBG&DCSzaTKXoZF&QR@x+AcIx!(z{Ya! zk-&Ws?rmpg!nVgxLKF-(PHzp%Hf!7$vsUI_K zQc<>WO;xvKNa2O*ZY4L+rKbB};i;PLTsN@6=k5=ztnKCmI@NZI2m05c*@bo79)aKM zxS54d)pZxUUc~Fsg@a?=I&NTjeRpwT&jxN&w{U)(8|4yJZ3m z8oQ$lpKR<7aRYl2-13Fz6Wk7NU}T~@GVo!d`&(dFl6q?D<`sU?)GZbg2y5Xk3|wj9 hRt_v_=|%<)v~=$%9NNnLqgbGSvYQ+DGub`-e*pM-sFnZ# delta 29496 zcmb812Ygh;`oDMSgc5o$CqSenA@mv~^xi>=g-x%Dft0*YPi|L1#VHUvd~{^#T5nflJmJMWY;%e^6bw@{3L7&-+|5G9@rWF27AGdQw_(% zk;E(D5V#pmfbTnz;{sf>&@`_dc*dxJsbz6xg$i{_nkms0K69F!q;IItUuF?Xb@Bb zM?j^Y4AsybP@4E3916dHl9M^h=NkwYL3QLTC=FZz=fjU7v+Nr_8~u+Xuz-LnTnshB z7vKn3Z;pxQ!zRSnz(sH!48RXyJveTznZl`X6!8Kmc~@G#3MH@pJfE*091F+8=sfg4 zfWQ_K2EosvM%a~ZDn1=b;E7Q7_%PH+zq9eI1*V|_C>y#EN;9`X4diX8scpH?#AjHZ z3RUirh3G$*z-|)6PKOy4&VVw$6QBg$2sLLPK$WY58ivBb5QFwrKjBcDQbAoFn3!6Ts3 zFSL9WvM_wjjxY@^fil9)P;y^|YA4bBNMoh5Eel~AGFDig4aX4Q1c$+$ur=&*l;I%Q zj`&pA92UYJunM+?m%xtjF4zjb2n48FPMO8 z@J3tUZa9|s8*l{du$;{YE`VB&D`9VV3RL~uE#HKbiTlfZK31r2DpW@QL9juE=|CQo28yA|9|s4*%V9J43Y6Rr zp)~e=1^QP54a3GbdO}UbD5xGUg8kuI%X=+9g%aE$V)liZaE!`94Bz(@oC>>PNYYFN z)D&C@`@s95|Z@2Wo^*!`ARy zmKJ+rUR*PxuCuE&Tx-!Oq8;f%Uc=4bw=U2c?lCy>#aPBm!J` zd>dhHc$tk~1=YZHP^x+mc7RXAcJKq(3jPe+!}Q~9gHRnA4IOwm)G9j;s$*9|t&W>v zYuficM?hBk0aSx&#~T%8z$U~O!xpdv9s<``UJbht-v-;lPoSpY4;#-yxNKoO90nIb z)n5-g!TVrB0$wA~41NbY!n!Az5oN&U#79C^m;p87@}UaOf}P=VD3z{*TF3W5HSjUi@@u=+ zZ~|0^Vo>!?g|d-NP#Sy)N;5A(4eS$}|4V{^jHlHprUN;aqo6c0)y5Y?X`%$GfweaM z8mI>Du=$TeP0f2Y{}-qMH9XZEZatuEU@GhZ6GszJPcMXO;C85 zrx^i#q2hBb!%%Y0fU18j)JPwI>hMcYn)?E(p0m!&PxwX=km_bbHCPBG=s2i~7s5<< zx8>VVQ{g+^bgUm#y)jTWvIMGuqoL;hY|Cpcw_3gg+v)t@NuVnQe}`HPUCuDfgX+lP zPy(yqShyaJfIDD1Oh1!v1K1U+16fd0GR~$ifPIJ;K&_s$p~_tYx6{6FD*?^LS!bD@ z=}su)dd;%-*=DQl4`mZazB`Hj?aM7u zhY(Q0QaBTy1V_VHU{BcWTq9^0l%UD57c78M@tIH!Uk#A;Rm-p8Hsa~$84bJ% zGl+k29{QJ&q^~!ExhQgq$gDRROrBn z<#{&!PAFr4eFOSe1K*M$ws1{Gf4GeJOgJ0f4z&t==bQbaIg}xPr@*1a?}mrMJy0FUy3lldB5XoD z2%Ewf>H()^#hm6hM5020X1|2lvSP!yTLo5 zdcFfng`dKau=QnTCz}Jc3f5ZQ3I`K^9d?3^FE<_R4P^t9q2$M5S9l@pMEkyb31}p* zT7CmH_sy>`MmGj_AU+3bO3I;Bc@or=Tmn17J1t*;YTz@=hF6+$y`fgg80f$f=-vO< z*@T-cpM&c09@qu8yUG~TP^hU2KrO%1p)_{^lqNR8A@Bv*71p`h$ms#KdS*juC;+u1 zZoC@(PbKg;2^w*eYs@+y1=WG0p&GgzHiVmDHcUck-~*_+{0XXo#@CvSr!!RgNT^jc z6G~Idpsar-bl_>%CQL&&lAw|9u>2NwBi>?@QSD%;5zc`QTmv=IOJQfY9jbw^pfptf zIuq{)C3hl}ydcEtee0m6?D7NwscI`!18>;^wXQeU=C)8)JqgMf1C~{=0rAtJ12;f5 zl!Owz9ZGXw!g}y$D9!nAFjLkKY8fU*6VS#n1xjUyK{dD>_JeC-e|R^{fV*H%*x*LP zT&Qx3-~hM|4uuauY2;g|sZ85!IywYO-eIu2*8k}Qq?%iy3cd{0z_0KS*yAR%FHD2I ziASJp08q zSMNd@&9^pQ`xX;#2UWh8cnyZQA#BB%q#V!1^#3 zs>j2itarN2KN2=3USadsz%=6LK$W}L=HCp}vHNU%JCx?$gBno7+e`<#z=TxMpFl4- z84iL+LmAQaFdIG&CGacgz_i;_#~(fEQH#iN}&dFyiGq9s{Tb#1Go#yC?B~U z{Wl`;Gzm@McFXr+1L9x8boirX{X0z0+d_?`57Yn-h3d#cs8tYz>d0D~ehHMyH^UzA zL8x{=xC8xbBl&^^&0XC)`9OpYREOfw+iEQ@fokwBsF6Gi`@+{@9a!rw^SV_Zsv}Kc zGnfUXkvyogVFHw93laoa2EOy41l|ob;>VzR`U;e)et_!nZ%`d;n6#RJ8fhP>{4r2+ zrbEeDY~vv)4XuDWMNfemNa6|t5^#^@bFew_51@Mft&P{Y+X!d_HPTEdjrFnV6QCNL z4>h17C~IE_)uEf9cFHZV1$+%+6A9m^Hlfx%MrExn2f>yUoCj5*1WJW#pah--W!2|G z3Em1@!8a`TKpCC?UNhp3uqW|BQ1uRnIa>dx63}|R2X=-3gA({FlqNcCF{;XfN*@O$ zAOKbGOsIzLf;sScsMYj~jrX|EXlfqRMi++C?0T54^?wb4cJMCP20o_@_#sq}zkwQA zhpnaq{a`!dGoZ>9LzPpfN8%Si8S$Mq{yJ<;{2M4^ZSWxa*Ic%G(9CHD zR7MWe$VR{pa4H-GgHYu!fzrqgmJeFKVz~>-c7B19-_?!el_2SM#G!yZEa8bLk@ zQdtNNhUY;CJ`I)s2~-EtA2z4lc&Lu7gnj&MG*BJ7{Sh-YPeO48P{wjUlm^~`8qq%35jK9zG}sGvC7uUmJ4ZmR^SI^7P{z0c zYQuQ|=EBcl9!zw2++33v!I>nihid43*bsgP)xhs?1nlyJ(ZpgnfcQC3BY6x;1Fyo7 z@KdOf_juCmkW*lP;#DvU-T;}Jgl`7{t?!*s%W5C&0=qqBm~XiZ4kJAQhrs)wmfKz^ zfnA<9^`}9VtAZNoZBUwh4-SR(>qWCqbb#LPe-j9d zBI9(Z2A;P39ZFS0UNQngFo*c%P#u0A_JaPGjRyL_?!=3sG;{`(yl3GAm3xJIADjd= zpetWN|LWoEBus&gx0|_J2vy)*C=EOfH8q`IHG&G@7~(fVb^J3ZqdR1W>1Y8|!xutz z^hKz0wO=#!#z1xOM7?}Ug^!Xj6*hj|+-47hs&E>V)jtVaz&|WoykVAGrsXI&hWvR@ z#&|j@G6)Fw?N5x9M*%+!)*8}YzO@x7!7uS>QFXxwEia$=u1K|)Cf124Bx#_J$}RT zXQ+;J{?MEe6QRn_g=66gC>z)cGvN2I32gh38F405{aKc);1sR@s|m~@V>eVs@;)|u zcL>Vb&wvuR6?TRHh27vUFdcT;Y0`6Gcj7Z`JPK8A1C%Y@1N*>lpfuNc7xif0H;6z# zI3LP5)Gsv(x2ShAppz{mFkB4uQ2kHC8_yE+f7Q zCT0?Ni-3%x*Joy=bD;#sp)_)(<#SLP_z_BQ+t1CfWK*Ctcs5)N--Bb|@ZF}|8rYlo zEpPyQ9gc+!_n`mb1g7sX4W4RwCzQ(m2X#ud|H7#DFn9>@W1zO?Yi#^ssCB**j)on+ zLrul)Py(NZ8p+pC z9qjRy(NqDH;B#O$+yqsAI~)jqgFRsXuQ5cpFhM}7xgM&AFT?uqC#X5|e`5}rVQ@0> zRZv#`7}N-Vv-#t{HGhPOX3ehY$@T}PCyNP1Eu=5 zKbQ?=B-FB-2wTBY*b^QHW&PK|f$(wI6#f9)z`8%0sptf=h);%{VHH$IT_~Ho6?W44 z|HKP0x_w5~8BlWCfJu7|SXD{TB0 zsQqCp%!KblX|CQMrs1|w`F)_|&iNx@RJ5Fg_9Pq+HAfdgEz3t?U-&uf4BPnp9tS~{ zp9`h2awyw44R(Q-L)Cu}N|U=R8~RQ8EU5aE5(HE+0M+A_P^!EfYCqTxJHcO|G}Nw^ zsn`c<1mi7_fKurS%Zp$R@%y0~`V6Y0wQKvm)zk&5qltk8r0Tg)4J^0uW1*Ja`IeiZ z=K5jFx1j|50HvAMb^M+Y4usmM=D|F88PovZhT2!Yf->4)A;!t?KXv_{QT2pU^$;kl zEr1fd0v&V>nWxp4yOz(tn#L8ZS5)xfV%Q_-%8;SkIDa2e@QD2==d zWkWrh`n~;P2vmp1K-FIgrHR#0HgHZ;f5KDwbtFjDk3h}Y*Kjoa5o$_?q?;+44Yh$R zgG!IVA@FP{TX+(Vgx|xduzxdS+{Z$x{CueTcS33S$z}<&+}*kwha+HGC#H<{eG>?1V=09i$wnyEZH9y3M{qi9*V(8x2(?-+hidR8 zC|mgv>X@$G#Wd6eYOeF4Y-BOi0GC6_Pr!uM=T-tLxC3e=d!Uv_gRW-F?F6OTe5fgj zSh`S$)E20zc^?jj^&O+JJg9*!h1zh=fRcX;)GFBK*!BNC2@;T=VHy|$rSc_EQ?Ux_ zINb=UA@M$3V^X;ZQacg$>}j(1900bzm#h6us6hVN~}$3H3K#*j$Q`U(VL)b`+a`W9*qyZ1FJUjlV; zNkDbrW+)9k303bCs1DW6G973Jr6EUgt^dIUG@=Pms#*lqp%_%f6QS1iIZz|G2ujsA zLXB*zjXw#cvDcs)_ylS-{0cRo7THE#A1KWYg$Wf{KtL7Cpp4}>s1ckG)xZ|0kv$G2 z_`mQl_!U$~Cg+&^#ZYq_g<4)`LG66EKxya!sN?+;D4Y5shxISPKan6oE&7?c?hd8u zUQpJ&2+BrIfvR{Ll;HcJZb;8UX=*Q2hku1CS3lQutR<9&v!K!sg(^QSm-R1|E+Ro4 zD1}=0tD!n}Hk5|0hnkuPp)~XcRQWG${vS5py1x;82-K7fgz8`(l!gnTI#LB?YwHpO zv<`2F>e(Ams{aV8V7&pRBkiG#X#mvzFcV5ZB~*ttLN#z3lyyG}HNt11H1|5x0RDg) zP=|r0ULu!(=4=wwhyzeN)*7fO*aWlT4ycaR8e}?>2~{s2s^d$cG*V*IS3%X=0QP)CL*y~ur*Pp-u5|%(&>Df>tyAEnP#VmH%AWx> z(n6>PkB6#%0o38O2}&c|U^lJ*uL(%it%jNr^@OUB4<%qWRL4r78cslMQ0H4Fp)|K0 zN+Y{%yzVfwjJrT-E(=P|EXxw;-TxB=q@v59*5xx$4eW$6#yZ1I!|kBvG~03n)SOR( zYIrdm2xCzD#|=;exX1E&C=GoCCHE(o(8!yNFc}V1#t>K=PK7e2nNV|f7}T7e3U&Fs z8|u*c+UBO6^9~19PsaklsukdXMH=@jS zcscDJmlIA>b~t&*6TT6jN4y>J67mltzK8e({2;>PNgs_rf;cXv6;`zbka#4i&EPcr zr&LI}j^tO`_%y;VkgoeUc37ge9Fxv?_MIG*n~3bXbt??)v>Zh&_OxjRhyL_yDtd+MEp_Mo{lfV-%NNp zzBBdCvSs_%V*fslgi}e#qmcHnXNbR#|Df7DNvw7;a%R}--3e!qGXY*j8W&(+0b#jU zEERqZpCCS%7N+C(5x$(VFT!^4T6{OkY$qOq`S`JfFOYg10>9$5T^B;RFD)OjRGN0n zEARtpK<**((h%I-#$O^lp0ry{w(m&d9FWznALaf-eign0;XYnHyF7F}%l(H6zvEBG zFQedxCfWOY2ywZ~$m?kveVOo=_>_B-z!>tTQ#Rk0xtIJ>TjnkDmy&lSaXv+Tp#*<& zRofQee(8IQ0y~w4dye=b{5$x&NbhEaD(@WPUn+oWPPh$a9>b3%F1hcKCN~*>GI6E7Sl$vgv}rGn(OvVvEWb^(4H@rE?q6-M!0NRvCq zay{W@%7>dt+k!uWa=OUKtuXMdg)xo)Niy%nUy8q;!oQGl8{wsduYqAW8-WW6>wnta z1b#)@S+Ev<4du^+L&%$qUqjy2`1?uQ4O8xP;wg6p>0^kzq-Appfxc9%fG^{>cgbyeD8@vd9Kw53W>4eXOiCqLT z@eTqvz-K6+i%2fm_?;5yxb4)Bpbeix-SzRh2M$qW7F>;y#-#53$t&ImHQ~+ zRkFW3$ykVQXbX*ojcuVk(z_AA5MBzG!IYb38>l3qw+)vP-b%SciC;sw0dg)O{tA8v zX_fE|TlPLr5cB`GO}LrN7x2T#nC)e9?Xr0<5ub~1g1|Fj2g=oj=fNBB0m^N%Wgmt2 zlP7nAJo!&6f}28KE#f(FkOt|kKQGJtImHT5>^BO^JxAI+{2szTllFv7&yj#XxpT=o zgS2<>W2kch{z}374}kKJ{dz` zU0YCPipaZ+=}|y#5)o%Cf*BvXUm=jA5#T6+V{;N zVY4dRM*l~A7U6SAs|SbTmr(9}(iao{nD9jWH^dLax22rit(FT2fA6JW$mExko@w*$ zvgtPvf1A9-*ZjFw72p{BjrhH`P}K4kTlquyl?|Uu-itPWvQ2xMy5sRfZCu$W5g%d8 z6~UhPlktyH<~}}}e2)|P0l(f>`iAf@M%mBCUqwJm(&Q!+9t`K)c&#)Cf9iK+tVaRP$Q-=G_(E14(fm{hS?<@wAYD0Kti0d7r|bneP(5x2@h8t(jO)qfjw%}zo$m{4f5yLvcvzB z$ZPmVsPH_#5HB}^G`Sr3Ilcq|ec=>*XZ(EpljLVZxy6>p+J+X;xrsJho4g+Q2k?*M zXHmXfccpOzRAvR?sd%|#VP6yUGD_c)4{3z9m|N18hY2g^DNQTO*`3@$0RiIQ*RWM*I_mH{y>$ zaPt}+xP-h>#CzM$XTwuStLe&XM1~{dXU+e`R>&qek^+7*!uUD1@SzBLkGu)+BGT_7 zya-OHA?$R*b4l+)nbzdpX7i3Dd?DT?UZ4CR{1DcIN0Y8Sz;_+~S|V$efcp%V!870t zSb!f%r7gtk!Ymp&pES8Dd7kpN=j;-zWHTMixUuU`?YCQz-#I+0@c>Uif`BhuU@`I9q(B^AMN+zG@VpQ z6b9mbQOs>LE;7c+ zDGC-;l^lh{lrSe0bAlC>@zptLzO?zJ!Bml0Jo?un$@sWt{*IK2230Q{af()l0~H}j z^Yq}x#`kGl6f6#fL#D^>)nnUqrmv}P(8$7IG^WvngTbPh6H|%CHA^Jj@q=omIkSv9 z9mmahsJ+|isOF6v$C-Zk7KVyfJ8|@A3OSL2<;T;OY&yacR$6%|9xo5p6lkT{jDI0e zm9w*pL*>Ej7*iF`){@njjGGcJEUzjGdTU9k#nDKG6HBP17OCnvy;g?erB3#|-s)eu zbXFb;2eZRf+Ar8eYPgg*6>w4o0^uT05GyDcV^W+*RlKq)E@|Vu838EAwiO6z7#ZJsK z(onD{%P9wc4-m|=_FjSLOQ3=3qR6aW# zT$vpx2=!FASE}19Lq+cTN82PO8k0AJ^6ac4!oCqNrO{!zXtunnA{%dM^#G za`wwGHo~5LFkykBI-ZqhnK8?t$|1)NUfHGv`vOzrk1< zTeEv!>2SC9toH6@(;K?GOWUBu5Q?OK@o1HIj%62doaT)(%VBhy+k8R$fppofds&KI zf8n?{<*8<>YxwBa*eR}aWXBB;)N^wWtLuI|zh@%9Xhk4g7<6Wj8>ean6k*wL6X( z4V9Zid;v$JGe$icksP^TWSul~&N1;3H?g!0)5g(L?p3o#pt4fOvbJv8vOP5gXr+7Z zu<}*hTSDP74cBT)Cs~oxD>K$xoj6!wl~}dEL}g(lxq9)%{)SWL<$G!?a?_S}Y;2aQ zNl12H+S=dWJDYT0p$2A|Su}#lH)_XFyh~KI?mfLG`yGCM?c`@iyq=-qwx&pYxs(#?G#GlmYw?a%Xy{}vtHC^dCR zaI<3>Zf-0+^w*pE2zJ$Rx}@0cP}`#|RpYX5N>#3ohDu7~&Vbz90nWr|kn=xM9A7ET zOk@w^%;P$j$62?}zzOG;k;7f#fjlp^*U81_Zzpa?Ybv(j32bV+bS_B;hV)A zqY^$9Bhl4#re;)!rS}DgKGB@_)#hD?GGqTxQfH$R4IW(;|OcdsX4!DlU6k!1iJoUtP&mRi*jnMYwxgyNfw1 z^+Bf=kuLg7f3a;XFH6xjR;%0xM6m4+l@jhq?7R$h5*1$$Ot0Prh zO;^)k0v0IeSYa?63+6b^ z{F+T^Zx0m2A}z|1h`F%OW72F|@zu$@Pg?As>*=|ARRqk*VMm#f=35Z?6)I*NxpSjEB}!4P)S&C623q=+frD&T}6OJ%9n?CSbHD2P6gLI-Tf;g zF+SB-1l`^1j%u3frm>dfgwyBv=NP--IvTBz2+x90g!cusjI(B>V=cwWp2B@Vi^WGr z_n)Gv-A#qPEpNja_qGfaVIHwaRg{aGE#Mw{W^u2IGVTTp#nWzTZ%Lhly}VORGJ3n0 zpP8Gse=BvLICEYH&NcI$mKoEX$L!YL?Z<6(R-|XD9q$PBc`N*=15LynuE(9V!ru%7 zIiS4z*ms@W2Iu_b{(4qpcjq~qn$_5HO|_HG?c%R*UO{~B`jcBFZ$7V~KY82wmbC_P zfeV&k`aB!($*UV=%ohrC1ci$1$Kao$6mXw$7uOAxv5b>l&OfnMhXZz$$^cI&+Me|` zdoqTBv_uWexwn}aJHOsp5FRkc$@MXiNvkt{z zQS!b^JJzYq2a>z}%7UyJ`LnrH7C93aOrP$B|9o{C>1d1L8lFAF?Q_+8Sp#y0_fMNW zYku}P-7#4#+2dKEBfOJ3J9lXIfPqf`!6OC_&dwc_>mGG=+hzl^bNO$W(|;Yxvlh;Sr*jIg4YVKC&93L`KHbd=$y{Q5pM4F9o;cE zHgW4;AMEaQtA5n%#s*!ZBizU$F?OU8Zo&1HBXi7JW-0LgWud?#iv>2Dh|rGTpNs`vvPpx7^olCT+3Mi-Kjk)0Q9b8oDCvZQ{;-n-20C zx^SjCXq|b$3>ALH&KGwoc9!ccvVI19P6lvQ!3tMLx1=RIRQJcFA4{OvPn-o)vX5Rzb3 z=p1JC6OV_yCy~_a1$|OS{*O0MekCZW@dTP}zmisP9oYXm<1H9Z*mNFH_CJ9p{`>~& zNju;P^q&Q4p8nwtbVjg9-HTL|a9WfzP&SZ)V99Fi!iyyW<{A)oda>jDyN6IKlh26d zK^}hCEh8nmOUSypBsx_^I>R*BzdV6Xna&Gn%HbbL)nMvy25-$^Fy}z_W%5-Ku3CymppFc*En4t7`xJ+&MW?>4eJ4P>i-$9y}FB z)8VReUg8~0!yBUBiT-LLQjZ=h^`Ol+s~%!__)NWfI%9)8z7~~x#xFgy4e)NGQb_im zJpcB^vs#7~lK2}b-dpE>DS!LasWn(!RbCW}@8UVAgdwK-5ermsN#g6~FKZwN?U@lS z4JQuz=xNqA@0~f>G7abNWmSv%+ZRtJw0Ph0>PJtOHy?7m9Pmwp;1*`Hh^4yC$GLlM zX;*je-HjTTF5gvN$&I-z7EjwStCQRHxVr9`WSg$qzW?qKH0nKocIvnP0hDdC`p}El zIJ-xMDT^eYKC@T28IN~y`yE!#?Y6Z~>6;~b^pxTc+K`qR9JPHC#hJ^Yc5>2{g&G3ccwBagK5_nWsX$~P6?HpZs(*txGHWv|9iYbq&u z!lSpS^k!^QUL}*Gb;_{KNiMr2$z* z3F{*>mQti!_F~sG9f01p5p+*@@x69ayfUc^O=^b>M%^VZh1?D=xAKSF{x7$wA7Onm zckbo8+qsQiPIsSpX=s)=n+KX+ad3HgY#-mLH7{;-Fy;<_xf?I1oDABfI4v~LK)h=I zqvMLt+*jUeIXhOy8zx<>DXHf1%fY9wBE6xhh_*TQ%*v2=_G$YwZ=kv^WP4vZb6-v- z(_UHXA6MOaq@rkFLCyD2bJf*l%?f3=Qv4izb=!M*e0cjcZv54! z4tO2S4)EIrcTT<+v=4ia8L{|2w8w9E8a+FGxQYvB%~#UwKaclc*VB(@W8<;1Kmm7V z4vv3Y(K}i9Yu3%!*>cRmyT+?K-=bJHPe0!2`?o`KhwZq#y)j_EuUP5kYRJzJ-ZSav zJG$3uUA&r)1WrFESo1No_8WuRo19V|U)=a==4QX~+?a#dj`!_P6PjnP2Fw>)opz9d zo&|pMM*p@`!l@6O{i`Av9^q!Z*)g#{?_l2vdM^D-i32_r{=XkodDJtj3VjrWl9S&Y z?RQHyImuJs`nb+a?;A48bjHxRPCzbGaUH|nylJxy$v&s>R!|mNA#?Tmw_g=pmZ)M( zE+-j(_vbop?4yD8*mt>&y0?AwT4EYETkjQfKu?~_{=sOSeanM9w_&?_+^??Y3~+dE zWgEgM{$zDEYSgTtBS3GYYOp+^tDOw+@9Wyus;g;zn|IegFPGHo>w%_OqZ^2NsvxX8 zV4Q!&5{d4Lx*I+omhjEviBM`SttyMKn{qhu=J}U2Z=2EctobNaKbQf1iQ3n_e_6>} z6<(En;aFL)sFzlPwmeyTPIbfH!)>sutSV-?%UDYBkkd zXscgqXGXN+r#^0VE94h3Z_}ZXAa`3WyrKZVN!hKaET&ruc9!A(uxnC>(w*TVMPnm; zGj?)Z^08x+l1F?p+n*S(L!kOa7watMH>p${?TzGN*txsZSLqnRGGX0RHJBl|~hHH8 zwaX!*`Xti>?=C&?O1Ihw%vUa*O#b*qhCfd~(R&A@PkRCX9zv&Q>e-52qawgRmI#{* za2Z!Peezx+n$@kfBDhAZtPHb0V+DiZY`s;Pl z%W;o8D*#yTefOMp?l<3GY2Scr6glIEVg7pNAuYM($1eWl z%lq2Y^2gm>KacKL8Z2kjv6^qdRV5snp%VSRQ|_x7VLWcnUkV!Y!%9Vrt0;#58UpOfSP`Q{zy$|FMzx?=NE6-ZOFN zk2Ur8@e3S_!+rmcs&3U!#aLf7^;*oe&X!?Uy=RucVXemIBS9Nx<<5;mYWeS)T{A^S zSLCfcd-cVdxHl9>d{rxC+5F2#@7c-JuTh%!;~dJW=*IVI`JKf6a{FJ3wYA&hBW5lp z2NA26;(t|8!m4|FpxAg|EEk??;i*isGxK2me~iT(j2oNQ_6H8WKvU1kT*J4N)b{^g rTQAES`TvGGdVrpjStO~K, 2002-2003. # msgid "" msgstr "" -"Project-Id-Version: binutils 2.12.91\n" -"POT-Creation-Date: 2002-07-23 15:55-0400\n" -"PO-Revision-Date: 2003-03-08 19:55+0100\n" +"Project-Id-Version: binutils 2.19.1\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2008-09-09 15:56+0930\n" +"PO-Revision-Date: 2009-05-26 19:55+0200\n" "Last-Translator: Keld Simonsen \n" -"Language-Team: Danish \n" +"Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" -#: addr2line.c:74 +#: addr2line.c:76 #, c-format msgid "Usage: %s [option(s)] [addr(s)]\n" msgstr "Brug: %s inddatafil(er)\n" -#: addr2line.c:75 +#: addr2line.c:77 +#, c-format msgid " Convert addresses into line number/file name pairs.\n" msgstr " Konvertér adresser til linjenummer/filnavns-par.\n" -#: addr2line.c:76 +#: addr2line.c:78 +#, c-format msgid " If no addresses are specified on the command line, they will be read from stdin\n" msgstr " Hvis ingen adresser er angivet på komandolinjen, vil de blive læst fra stdind\n" -#: addr2line.c:77 +#: addr2line.c:79 +#, c-format msgid "" " The options are:\n" +" @ Read options from \n" " -b --target= Set the binary file format\n" " -e --exe= Set the input file name (default is a.out)\n" +" -i --inlines Unwind inlined functions\n" +" -j --section= 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" @@ -39,669 +47,757 @@ msgid "" "\n" msgstr "" -#: addr2line.c:89 ar.c:297 coffdump.c:479 nlmconv.c:1119 objcopy.c:424 -#: objcopy.c:457 readelf.c:2310 size.c:104 srconv.c:1962 strings.c:666 -#: sysdump.c:774 windres.c:733 +#: addr2line.c:94 ar.c:274 coffdump.c:469 dlltool.c:3173 dllwrap.c:510 +#: nlmconv.c:1113 objcopy.c:513 objcopy.c:548 readelf.c:2868 size.c:99 +#: srconv.c:1741 strings.c:664 sysdump.c:654 windmc.c:233 windres.c:698 #, c-format msgid "Report bugs to %s\n" msgstr "" "Rapportere fejl til %s\n" "Rapporter fejl i oversættelsen til dansk@klid.dk\n" -#: addr2line.c:248 +#: addr2line.c:281 +#, c-format +msgid "%s: cannot get addresses from archive" +msgstr "%s: kan ikke få fat på adresserne fra arkivet" + +#: addr2line.c:298 #, c-format -msgid "%s: can not get addresses from archive" -msgstr "%s: kan ikke få fat på adresserne i arkivet" +msgid "%s: cannot find section %s" +msgstr "%s: kan ikke finde sektion: %s" -#: addr2line.c:320 nm.c:395 objdump.c:2782 +#: addr2line.c:364 nm.c:1542 objdump.c:3223 #, c-format msgid "unknown demangling style `%s'" msgstr "ukendt afkodningsstil \"%s\"" -#: ar.c:238 +#: ar.c:212 #, c-format msgid "no entry %s in archive\n" msgstr "ingen post %s i arkivet\n" -#: ar.c:255 +#: ar.c:228 #, c-format msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" msgstr "" -#: ar.c:258 +#: ar.c:231 #, c-format msgid " %s -M [ - read options from \n" +msgstr " --def Navngiv .def-inddatafilen\n" + +#: ar.c:262 #, c-format msgid "Usage: %s [options] archive\n" msgstr "" -#: ar.c:288 +#: ar.c:263 +#, c-format msgid " Generate an index to speed access to archives\n" msgstr "" -#: ar.c:289 +#: ar.c:264 +#, c-format msgid "" " The options are:\n" +" @ Read options from \n" +" -t Update the archive's symbol map timestamp\n" " -h --help Print this help message\n" -" -V --version Print version information\n" +" -v --version Print version information\n" msgstr "" " Valgmulighederne er:\n" +" @ Læs valgmuligheder fra \n" +" -t Opdatér tidsstempel på arkivets symboltabel\n" " -h --help Vis denne hjælpebesked\n" " -V --version Vis versionsinformation\n" -#: ar.c:512 +#: ar.c:499 msgid "two different operation options specified" msgstr "to forskellige kommandoflag blev angivet" -#: ar.c:587 +#: ar.c:577 #, c-format msgid "illegal option -- %c" msgstr "ikke tilladt flag -- %c" -#: ar.c:619 +#: ar.c:620 msgid "no operation specified" msgstr "ingen kommandoflag blev angivet" -#: ar.c:622 +#: ar.c:623 msgid "`u' is only meaningful with the `r' option." msgstr "\"u\" er kun meningsfuldt sammen med \"r\"." -#: ar.c:632 +#: ar.c:631 msgid "`N' is only meaningful with the `x' and `d' options." msgstr "\"N\" er kun meningsfuldt sammen med \"x\" eller \"d\"." -#: ar.c:635 +#: ar.c:634 msgid "Value for `N' must be positive." msgstr "\"N\"'s argument skal være positivt." -#: ar.c:718 +#: ar.c:646 +msgid "`x' cannot be used on thin archives." +msgstr "" + +#: ar.c:687 #, c-format msgid "internal error -- this option not implemented" msgstr "intern fejl -- flaget er ikke implementeret" -#: ar.c:837 ar.c:888 ar.c:1333 objcopy.c:1348 +#: ar.c:756 +#, c-format +msgid "creating %s" +msgstr "opretter %s" + +#: ar.c:805 ar.c:860 ar.c:1185 objcopy.c:1912 #, c-format msgid "internal stat error on %s" -msgstr "internt stat-fejl for %s" +msgstr "intern stat-fejl for %s" -#: ar.c:841 +#: ar.c:809 #, c-format msgid "" "\n" -"\n" +"<%s>\n" "\n" msgstr "" "\n" -"\n" +"<%s>\n" "\n" -#: ar.c:857 ar.c:925 +#: ar.c:825 ar.c:893 #, c-format msgid "%s is not a valid archive" msgstr "%s er ikke et gyldigt arkiv" -#: ar.c:893 -#, c-format -msgid "stat returns negative size for %s" -msgstr "stat returnerer negativ størrelse på %s" - -#: ar.c:1020 -#, c-format -msgid "%s is not an archive" -msgstr "%s er ikke et arkiv" - -#: ar.c:1027 -#, c-format -msgid "creating %s" -msgstr "opretter %s" - -#: ar.c:1233 +#: ar.c:1090 #, c-format msgid "No member named `%s'\n" -msgstr "Intet medlem hedder \"%s\"\n" +msgstr "Intet medlem med navn \"%s\"\n" -#: ar.c:1285 +#: ar.c:1140 #, c-format msgid "no entry %s in archive %s!" -msgstr "ingen %s i arkiv %s!" +msgstr "ingen post %s i arkiv %s!" # archive map virker være vad indekset kaldes i kildekodeen -#: ar.c:1422 +#: ar.c:1279 #, c-format msgid "%s: no archive map to update" -msgstr "%s: intet indeks at opdatere" +msgstr "%s: intet arkivindeks at opdatere" -#: arsup.c:86 +#: arsup.c:89 #, c-format msgid "No entry %s in archive.\n" -msgstr "Ingen %s i arkivet.\n" +msgstr "Ingen post %s i arkivet.\n" -#: arsup.c:117 +#: arsup.c:114 #, c-format msgid "Can't open file %s\n" msgstr "Kan ikke åbne fil %s\n" -#: arsup.c:172 +#: arsup.c:164 #, c-format msgid "%s: Can't open output archive %s\n" msgstr "%s: Kan ikke åbne uddataarkivet %s\n" -#: arsup.c:189 +#: arsup.c:181 #, c-format msgid "%s: Can't open input archive %s\n" msgstr "%s: Kan ikke åbne inddataarkivet %s\n" -#: arsup.c:198 +#: arsup.c:190 #, c-format msgid "%s: file %s is not an archive\n" msgstr "%s: fil %s er ikke et arkiv\n" -#: arsup.c:241 +#: arsup.c:230 #, c-format msgid "%s: no output archive specified yet\n" msgstr "%s: intet uddataarkiv angivet endnu\n" -#: arsup.c:262 arsup.c:301 arsup.c:343 arsup.c:364 arsup.c:430 +#: arsup.c:250 arsup.c:288 arsup.c:330 arsup.c:350 arsup.c:416 #, c-format msgid "%s: no open output archive\n" msgstr "%s: intet åbent uddataarkiv\n" -#: arsup.c:273 arsup.c:385 arsup.c:411 +#: arsup.c:261 arsup.c:371 arsup.c:397 #, c-format msgid "%s: can't open file %s\n" msgstr "%s: kan ikke åbne fil %s\n" -# module file er detsamme som member -#: arsup.c:328 arsup.c:407 arsup.c:489 +# module file er det samme som member +#: arsup.c:315 arsup.c:393 arsup.c:474 #, c-format msgid "%s: can't find module file %s\n" msgstr "%s: kan ikke finde medlem %s\n" -#: arsup.c:439 +#: arsup.c:425 #, c-format msgid "Current open archive is %s\n" msgstr "Det aktuelle åbne arkiv er %s\n" # BUGG: dubbelt blanksteg -#: arsup.c:464 +#: arsup.c:449 #, c-format msgid "%s: no open archive\n" msgstr "%s: intet åbent arkiv\n" -#: binemul.c:39 +#: bin2c.c:59 +#, c-format +msgid "Usage: %s < input_file > output_file\n" +msgstr "Brug: %s [flag] < [in-fil] > [ud-fil]\n" + +#: bin2c.c:60 +#, c-format +msgid "Prints bytes from stdin in hex format.\n" +msgstr "" + +#: binemul.c:38 #, c-format msgid " No emulation specific options\n" msgstr "" #. Macros for common output. -#: binemul.h:42 +#: binemul.h:43 #, c-format msgid " emulation options: \n" msgstr "" -#: bucomm.c:106 +#: bucomm.c:157 #, c-format msgid "can't set BFD default target to `%s': %s" msgstr "kan ikke sætte BFD's standardmål til \"%s\": %s" -#: bucomm.c:118 +#: bucomm.c:168 #, c-format msgid "%s: Matching formats:" msgstr "%s: Passende format:" -#: bucomm.c:135 +#: bucomm.c:183 +#, c-format msgid "Supported targets:" -msgstr "Mål som håndteres:" +msgstr "Mål som understøttes:" -#: bucomm.c:137 +#: bucomm.c:185 #, c-format msgid "%s: supported targets:" -msgstr "%s: mål som håndteres:" +msgstr "%s: mål som understøttes:" -#: bucomm.c:153 +#: bucomm.c:202 +#, c-format msgid "Supported architectures:" -msgstr "Arkitekturer som håndteres:" +msgstr "Arkitekturer som understøttes:" -#: bucomm.c:155 +#: bucomm.c:204 #, c-format msgid "%s: supported architectures:" -msgstr "%s: arkitekturer som håndteres:" +msgstr "%s: arkitekturer som understøttes:" -#: bucomm.c:262 +#: bucomm.c:398 +#, c-format +msgid "BFD header file version %s\n" +msgstr "BFD-hovedfil version %s\n" + +#: bucomm.c:547 #, c-format msgid "%s: bad number: %s" msgstr "%s: fejlagtigt tal: %s" -#: coffdump.c:107 +#: bucomm.c:564 strings.c:410 +#, c-format +msgid "'%s': No such file" +msgstr "%s: Ingen sådan fil" + +#: bucomm.c:566 strings.c:412 +#, c-format +msgid "Warning: could not locate '%s'. reason: %s" +msgstr "" + +#: bucomm.c:570 +#, c-format +msgid "Warning: '%s' is not an ordinary file" +msgstr "" + +#: coffdump.c:106 #, c-format msgid "#lines %d " msgstr "#linjer %d " -#: coffdump.c:471 sysdump.c:767 +#: coffdump.c:460 sysdump.c:647 #, c-format msgid "Usage: %s [option(s)] in-file\n" msgstr "Brug: %s [flag] inddatafil\n" -#: coffdump.c:472 +#: coffdump.c:461 +#, c-format msgid " Print a human readable interpretation of a SYSROFF object file\n" msgstr " Skriv en menneskeligt læsbar tolkning af en SYSROFF-objektfil\n" -#: coffdump.c:473 +#: coffdump.c:462 +#, c-format msgid "" " The options are:\n" +" @ Read options from \n" " -h --help Display this information\n" " -v --version Display the program's version\n" "\n" msgstr "" -#: coffdump.c:541 srconv.c:2052 sysdump.c:831 +#: coffdump.c:531 srconv.c:1831 sysdump.c:711 msgid "no input file specified" msgstr "ingen inddatafil angaves" -#: debug.c:653 +#: cxxfilt.c:119 nm.c:256 objdump.c:241 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" +"Rapportér fejl til %s.\n" +"Rapportér fejl i oversættelsen til dansk@klid.dk.\n" + +#: debug.c:647 msgid "debug_add_to_current_namespace: no current file" msgstr "debug_add_to_current_namespace: ingen aktuel fil" -#: debug.c:736 +#: debug.c:726 msgid "debug_start_source: no debug_set_filename call" msgstr "debug_start_source: intet kald til debug_set_filename" -#: debug.c:795 +#: debug.c:782 msgid "debug_record_function: no debug_set_filename call" msgstr "debug_record_function: intet kald til debug_set_filename" -#: debug.c:851 +#: debug.c:834 msgid "debug_record_parameter: no current function" msgstr "debug_record_parameter: ingen aktuel funktion" -#: debug.c:885 +#: debug.c:866 msgid "debug_end_function: no current function" msgstr "debug_end_function: ingen aktuel funktion" -#: debug.c:891 +#: debug.c:872 msgid "debug_end_function: some blocks were not closed" msgstr "debug_end_function: nogen blokke afsluttedes ikke" -#: debug.c:921 +#: debug.c:900 msgid "debug_start_block: no current block" msgstr "debug_start_block: ingen aktuel blok" -#: debug.c:959 +#: debug.c:936 msgid "debug_end_block: no current block" msgstr "debug_end_block: ingen aktuel blok" -#: debug.c:966 +#: debug.c:943 msgid "debug_end_block: attempt to close top level block" msgstr "debug_end_block: forsøg gjordes på at afslutte øverste blok" -#: debug.c:992 +#: debug.c:966 msgid "debug_record_line: no current unit" msgstr "debug_record_line: ingen aktuel oversættelsesenhed" #. FIXME -#: debug.c:1046 +#: debug.c:1019 msgid "debug_start_common_block: not implemented" msgstr "debug_start_common_block: ikke implementeret" #. FIXME -#: debug.c:1058 +#: debug.c:1030 msgid "debug_end_common_block: not implemented" msgstr "debug_end_common_block: ikke implementeret" # BUGG: Kolon mangler antagligen #. FIXME. -#: debug.c:1152 +#: debug.c:1114 msgid "debug_record_label: not implemented" msgstr "debug_record_label: ikke implementeret" -#: debug.c:1178 +#: debug.c:1136 msgid "debug_record_variable: no current file" msgstr "debug_record_variable: ingen aktuel fil" -#: debug.c:1194 -msgid "debug_record_variable: no current block" -msgstr "debug_record_variable: ingen aktuel blok" - -#: debug.c:1763 +#: debug.c:1664 msgid "debug_make_undefined_type: unsupported kind" msgstr "debug_make_undefined_type: slagsen kan ikke håndteres" -#: debug.c:1964 +#: debug.c:1841 msgid "debug_name_type: no current file" msgstr "debug_name_type: ingen aktuel fil" -#: debug.c:2012 +#: debug.c:1886 msgid "debug_tag_type: no current file" msgstr "debug_tag_type: ingen aktuel fil" -#: debug.c:2020 +#: debug.c:1894 msgid "debug_tag_type: extra tag attempted" msgstr "debug_tag_type: forsøg gjordes på at sætte et ekstra mærke" -#: debug.c:2059 +#: debug.c:1931 #, c-format msgid "Warning: changing type size from %d to %d\n" msgstr "Advarsel: ændrer datatypens størrelse fra %d til %d\n" -#: debug.c:2083 +#: debug.c:1953 msgid "debug_find_named_type: no current compilation unit" msgstr "debug_find_named_type: ingen aktuel oversættelsesenhed" -#: debug.c:2190 +#: debug.c:2056 #, c-format msgid "debug_get_real_type: circular debug information for %s\n" msgstr "debug_get_real_type: %s har cirkulær fejlsøgningsinformation\n" -#: debug.c:2650 +#: debug.c:2483 msgid "debug_write_type: illegal type encountered" msgstr "debug_write_type: mødte en ugyldig type" -#: dlltool.c:735 dlltool.c:760 dlltool.c:786 +#: dlltool.c:797 dlltool.c:823 dlltool.c:854 #, c-format msgid "Internal error: Unknown machine type: %d" msgstr "Intern fejl: Ukendt maskintype: %d" -#: dlltool.c:823 +#: dlltool.c:890 #, c-format msgid "Can't open def file: %s" msgstr "Kan ikke åbne def-fil: %s" -#: dlltool.c:828 +#: dlltool.c:895 #, c-format msgid "Processing def file: %s" msgstr "Behandler def-fil: %s" -#: dlltool.c:832 +#: dlltool.c:899 msgid "Processed def file" msgstr "Def-filen er behandlet" -#: dlltool.c:858 +#: dlltool.c:923 #, c-format msgid "Syntax error in def file %s:%d" msgstr "Syntaktisk fejl i def-fil %s:%d" -#: dlltool.c:897 +#: dlltool.c:958 +#, c-format +msgid "%s: Path components stripped from image name, '%s'." +msgstr "" + +#: dlltool.c:967 #, c-format msgid "NAME: %s base: %x" msgstr "NAME: %s bas: %x" -#: dlltool.c:900 dlltool.c:919 +#: dlltool.c:970 dlltool.c:986 msgid "Can't have LIBRARY and NAME" msgstr "Kan ikke have både LIBRARY og NAME" -#: dlltool.c:916 +#: dlltool.c:983 #, c-format msgid "LIBRARY: %s base: %x" msgstr "LIBRARY: %s bas: %x" -#: dlltool.c:1174 resrc.c:271 +#: dlltool.c:1219 resrc.c:293 #, c-format msgid "wait: %s" msgstr "wait: %s" -#: dlltool.c:1179 dllwrap.c:430 resrc.c:276 +#: dlltool.c:1224 dllwrap.c:410 resrc.c:298 #, c-format msgid "subprocess got fatal signal %d" msgstr "subprocessen fik fatalt signal %d" -#: dlltool.c:1185 dllwrap.c:437 resrc.c:283 +#: dlltool.c:1230 dllwrap.c:417 resrc.c:305 #, c-format msgid "%s exited with status %d" msgstr "%s afsluttede med status %d" -#: dlltool.c:1217 +#: dlltool.c:1261 #, c-format msgid "Sucking in info from %s section in %s" msgstr "Suger ind info fra sektion %s i %s" -#: dlltool.c:1341 +#: dlltool.c:1386 #, c-format msgid "Excluding symbol: %s" msgstr "Undtager symbol: %s" -#: dlltool.c:1436 dlltool.c:1447 nm.c:959 nm.c:970 objdump.c:386 objdump.c:401 +#: dlltool.c:1475 dlltool.c:1486 nm.c:992 nm.c:1003 #, c-format msgid "%s: no symbols" msgstr "%s: ingen symboler" -#. FIXME: we ought to read in and block out the base relocations -#: dlltool.c:1474 +#. FIXME: we ought to read in and block out the base relocations. +#: dlltool.c:1512 #, c-format msgid "Done reading %s" msgstr "Færdig med at læse %s" -#: dlltool.c:1485 +#: dlltool.c:1522 #, c-format msgid "Unable to open object file: %s" msgstr "Kan ikke åbne objektfil: %s" -#: dlltool.c:1488 +#: dlltool.c:1525 #, c-format msgid "Scanning object file %s" msgstr "Aflæser objektfil %s" -#: dlltool.c:1503 +#: dlltool.c:1540 #, c-format msgid "Cannot produce mcore-elf dll from archive file: %s" msgstr "Kan ikke producere en mcore-elf-dll fra arkivfil: %s" -#: dlltool.c:1595 +#: dlltool.c:1626 msgid "Adding exports to output file" msgstr "Tilføjer eksportering til uddatafilen" -#: dlltool.c:1640 +#: dlltool.c:1674 msgid "Added exports to output file" msgstr "Tilføjede eksportering til uddatafilen" -#: dlltool.c:1764 +#: dlltool.c:1813 #, c-format msgid "Generating export file: %s" msgstr "Genererer eksportfil: %s" -#: dlltool.c:1769 +#: dlltool.c:1818 #, c-format msgid "Unable to open temporary assembler file: %s" msgstr "Kan ikke åbne temporær assemblerfil: %s" -#: dlltool.c:1772 +#: dlltool.c:1821 #, c-format msgid "Opened temporary file: %s" msgstr "Åbnede temporær fil: %s" -#: dlltool.c:1996 +#: dlltool.c:2043 msgid "Generated exports file" msgstr "Genererede eksportfil" -#: dlltool.c:2258 +#: dlltool.c:2251 #, c-format msgid "bfd_open failed open stub file: %s" msgstr "bfd_open mislykkedes at åbne stubfil: %s" -#: dlltool.c:2261 +#: dlltool.c:2254 #, c-format msgid "Creating stub file: %s" msgstr "Opretter stubfil: %s" -#: dlltool.c:2650 +#: dlltool.c:2672 #, c-format msgid "failed to open temporary head file: %s" msgstr "mislykkedes at åbne temporær hovedfil: %s" -#: dlltool.c:2709 +#: dlltool.c:2734 #, c-format msgid "failed to open temporary tail file: %s" msgstr "mislykkedes at åbne temporær halefil: %s" -#: dlltool.c:2777 +#: dlltool.c:2809 #, c-format msgid "Can't open .lib file: %s" msgstr "Kan ikke åbne .lib-fil: %s" -#: dlltool.c:2780 +#: dlltool.c:2812 #, c-format msgid "Creating library file: %s" msgstr "Opretter biblioteksfil: %s" -#: dlltool.c:2839 +#: dlltool.c:2896 dlltool.c:2902 #, c-format msgid "cannot delete %s: %s" msgstr "kan ikke slette %s: %s" -#: dlltool.c:2843 +#: dlltool.c:2907 msgid "Created lib file" msgstr "Oprettede biblioteksfilen" -#: dlltool.c:2948 +#: dlltool.c:2986 #, c-format msgid "Warning, ignoring duplicate EXPORT %s %d,%d" msgstr "Advarsel, ignorerer duplikeret EXPORT %s %d,%d" -#: dlltool.c:2954 +#: dlltool.c:2992 #, c-format -msgid "Error, duplicate EXPORT with oridinals: %s" +msgid "Error, duplicate EXPORT with ordinals: %s" msgstr "Fejl, duplikeret EXPORT med ordningstal: %s" -#: dlltool.c:3081 +#: dlltool.c:3097 msgid "Processing definitions" msgstr "Behandler definitioner" -#: dlltool.c:3119 +#: dlltool.c:3129 msgid "Processed definitions" msgstr "Definitionerne er behandlede" # BUGG: Kolon fattas #. xgetext:c-format -#: dlltool.c:3130 dllwrap.c:495 +#: dlltool.c:3136 dllwrap.c:471 #, c-format msgid "Usage %s \n" msgstr "Brug: %s \n" #. xgetext:c-format -#: dlltool.c:3132 +#: dlltool.c:3138 #, c-format msgid " -m --machine Create as DLL for . [default: %s]\n" msgstr " -m --machine Opret som DLL for . [forvalgt: %s]\n" -#: dlltool.c:3133 +#: dlltool.c:3139 +#, c-format msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" msgstr " mulige : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -#: dlltool.c:3134 +#: dlltool.c:3140 +#, c-format msgid " -e --output-exp Generate an export file.\n" msgstr " -e --output-exp Generer en eksportfil.\n" -#: dlltool.c:3135 +#: dlltool.c:3141 +#, c-format msgid " -l --output-lib Generate an interface library.\n" msgstr " -l --output-lib Generere et grænsesnitsbibliotek.\n" -#: dlltool.c:3136 +#: dlltool.c:3142 +#, c-format msgid " -a --add-indirect Add dll indirects to export file.\n" msgstr " -a --add-indirect Tilføj inddirekte dll til eksportfilen.\n" -#: dlltool.c:3137 +#: dlltool.c:3143 +#, c-format msgid " -D --dllname Name of input dll to put into interface lib.\n" msgstr " -D --dllname Navn på inddata-dll at indsætte i grænsesnitsbiblioteket.\n" -#: dlltool.c:3138 +#: dlltool.c:3144 +#, c-format msgid " -d --input-def Name of .def file to be read in.\n" msgstr " -d --input-def Navn på .def-fil at læse ind.\n" -#: dlltool.c:3139 +#: dlltool.c:3145 +#, c-format msgid " -z --output-def Name of .def file to be created.\n" msgstr " -z --output-def Navn på .def-fil at oprette.\n" -#: dlltool.c:3140 +#: dlltool.c:3146 +#, c-format msgid " --export-all-symbols Export all symbols to .def\n" msgstr " --export-all-symbols Eksportér alle symboler til .def\n" @@ -709,7 +805,8 @@ msgstr " --export-all-symbols Eksport # extra i den engelska texten til at to flag er for lange. I den # svenska oversættelsen er de indenterede tre tegn extra til at # den ena flaget blev yderligere et tegn for lang. -#: dlltool.c:3141 +#: dlltool.c:3147 +#, c-format msgid " --no-export-all-symbols Only export listed symbols\n" msgstr " --no-export-all-symbols Eksportér kun listede symboler\n" @@ -717,275 +814,357 @@ msgstr " --no-export-all-symbols Eksport # extra i den engelska texten til at to flag er for lange. I den # svenska oversættelsen er de indenterede tre tegn extra til at # den ena flaget blev yderligere et tegn for lang. -#: dlltool.c:3142 +#: dlltool.c:3148 +#, c-format msgid " --exclude-symbols Don't export \n" msgstr " --exclude-symbols Eksportér ikke symboler i \n" -#: dlltool.c:3143 +#: dlltool.c:3149 +#, c-format msgid " --no-default-excludes Clear default exclude symbols\n" msgstr "" -#: dlltool.c:3144 +#: dlltool.c:3150 +#, c-format msgid " -b --base-file Read linker generated base file.\n" msgstr " -b --base-file Læs den lænker-genererede basefil.\n" -#: dlltool.c:3145 +#: dlltool.c:3151 +#, c-format msgid " -x --no-idata4 Don't generate idata$4 section.\n" msgstr " -x --no-idata4 Generér ingen idata$4-sektion.\n" -#: dlltool.c:3146 +#: dlltool.c:3152 +#, c-format msgid " -c --no-idata5 Don't generate idata$5 section.\n" msgstr " -c --no-idata5 Generér ingen idata$5-sektion.\n" -#: dlltool.c:3147 -msgid " -U --add-underscore Add underscores to symbols in interface library.\n" +#: dlltool.c:3153 +#, c-format +msgid " -U --add-underscore Add underscores to all symbols in interface library.\n" +msgstr " -U --add-underscore Tilføj understreg på alle symboler i grænsesnitsbiblioteket.\n" + +#: dlltool.c:3154 +#, fuzzy, c-format +msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n" msgstr " -U --add-underscore Sæt dit understreg på symboler i grænsesnitsbiblioteket.\n" -#: dlltool.c:3148 +#: dlltool.c:3155 +#, c-format msgid " -k --kill-at Kill @ from exported names.\n" msgstr " -k --kill-at Fjern @ fra eksporterede navne.\n" -#: dlltool.c:3149 +#: dlltool.c:3156 +#, c-format msgid " -A --add-stdcall-alias Add aliases without @.\n" msgstr " -A --add-stdcall-alias Tilføj aliaser uden @.\n" -#: dlltool.c:3150 +#: dlltool.c:3157 +#, fuzzy, c-format +msgid " -p --ext-prefix-alias Add aliases with .\n" +msgstr " -A --add-stdcall-alias Tilføj aliaser uden @.\n" + +#: dlltool.c:3158 +#, c-format msgid " -S --as Use for assembler.\n" msgstr " -S --as Brug som assembler.\n" -#: dlltool.c:3151 +#: dlltool.c:3159 +#, c-format msgid " -f --as-flags Pass to the assembler.\n" msgstr " -f --as-flags Send til assembleren.\n" -#: dlltool.c:3152 +#: dlltool.c:3160 +#, c-format msgid " -C --compat-implib Create backward compatible import library.\n" msgstr " -C --compat-implib Opret bagudkompatibelt importbibliotek.\n" -#: dlltool.c:3153 +#: dlltool.c:3161 +#, c-format msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" msgstr " -n --no-delete Behold temp.-filer (repetér for øget antal).\n" -#: dlltool.c:3154 +#: dlltool.c:3162 +#, c-format +msgid " -t --temp-prefix Use to construct temp file names.\n" +msgstr "" + +#: dlltool.c:3163 +#, c-format msgid " -v --verbose Be verbose.\n" msgstr " -v --verbose Beskriv udførligt\n" -#: dlltool.c:3155 +#: dlltool.c:3164 +#, c-format msgid " -V --version Display the program version.\n" msgstr " -V --version Vis versionsinformation om programmet.\n" -#: dlltool.c:3156 +#: dlltool.c:3165 +#, c-format msgid " -h --help Display this information.\n" msgstr " -h --help Vis denne information.\n" -#: dlltool.c:3158 +#: dlltool.c:3166 +#, fuzzy, c-format +msgid " @ Read options from .\n" +msgstr " @ Læs valgmuligheder fra \n" + +#: dlltool.c:3168 +#, c-format msgid " -M --mcore-elf Process mcore-elf object files into .\n" msgstr " -M --mcore-elf Behandl mcore-elf-objektfiler til .\n" -#: dlltool.c:3159 +#: dlltool.c:3169 +#, c-format msgid " -L --linker Use as the linker.\n" msgstr " -L --linker Brug som lænker.\n" # Justeringen bliver fejl hér for flaget er for lang. -#: dlltool.c:3160 +#: dlltool.c:3170 +#, c-format msgid " -F --linker-flags Pass to the linker.\n" msgstr " -F --linker-flags Send til lænkeren.\n" -#: dlltool.c:3310 +#: dlltool.c:3293 +#, c-format +msgid "Path components stripped from dllname, '%s'." +msgstr "" + +#: dlltool.c:3338 #, c-format msgid "Unable to open base-file: %s" msgstr "Kan ikke åbne basefilen: %s" -#: dlltool.c:3339 +#: dlltool.c:3370 #, c-format msgid "Machine '%s' not supported" msgstr "Maskine \"%s\" håndteres ikke" -#: dlltool.c:3442 dllwrap.c:214 +#: dlltool.c:3474 dllwrap.c:201 #, c-format msgid "Tried file: %s" msgstr "Prøvede fil: %s" -#: dlltool.c:3449 dllwrap.c:221 +#: dlltool.c:3481 dllwrap.c:208 #, c-format msgid "Using file: %s" msgstr "Bruger fil: %s" -#: dllwrap.c:308 +#: dllwrap.c:291 #, c-format msgid "Keeping temporary base file %s" msgstr "Beholder temporær basefil %s" -#: dllwrap.c:310 +#: dllwrap.c:293 #, c-format msgid "Deleting temporary base file %s" msgstr "Fjerner temporær basefil %s" -#: dllwrap.c:324 +#: dllwrap.c:307 #, c-format msgid "Keeping temporary exp file %s" msgstr "Beholder temporær eksportfil %s" -#: dllwrap.c:326 +#: dllwrap.c:309 #, c-format msgid "Deleting temporary exp file %s" msgstr "Fjerner temporær eksportfil %s" -#: dllwrap.c:339 +#: dllwrap.c:322 #, c-format msgid "Keeping temporary def file %s" msgstr "Beholder temporær def-fil %s" -#: dllwrap.c:341 +#: dllwrap.c:324 #, c-format msgid "Deleting temporary def file %s" msgstr "Fjerner temporær def-fil %s" -#: dllwrap.c:496 +#: dllwrap.c:472 +#, c-format msgid " Generic options:\n" msgstr " Generelle flag:\n" -#: dllwrap.c:497 +#: dllwrap.c:473 +#, c-format +msgid " @ Read options from \n" +msgstr " @ Læs valgmuligheder fra \n" + +#: dllwrap.c:474 +#, c-format msgid " --quiet, -q Work quietly\n" msgstr " --quiet, -q Arbejd stille\n" -#: dllwrap.c:498 +#: dllwrap.c:475 +#, c-format msgid " --verbose, -v Verbose\n" msgstr " --verbose, -v Udførlig\n" -#: dllwrap.c:499 +#: dllwrap.c:476 +#, c-format msgid " --version Print dllwrap version\n" msgstr " --version Vis versionsinformation for dllwrap\n" -#: dllwrap.c:500 +#: dllwrap.c:477 +#, c-format msgid " --implib Synonym for --output-lib\n" msgstr " --implib Synonym for --output-lib\n" -#: dllwrap.c:501 +#: dllwrap.c:478 #, c-format msgid " Options for %s:\n" msgstr " Flag for %s:\n" -#: dllwrap.c:502 +#: dllwrap.c:479 +#, c-format msgid " --driver-name Defaults to \"gcc\"\n" msgstr " --driver-name Forvalgt til \"gcc\"\n" -#: dllwrap.c:503 +#: dllwrap.c:480 +#, c-format msgid " --driver-flags Override default ld flags\n" msgstr " --driver-flags Forbigå forvalgte flag for ld\n" -#: dllwrap.c:504 +#: dllwrap.c:481 +#, c-format msgid " --dlltool-name Defaults to \"dlltool\"\n" msgstr " --dlltool-name Forvalgt til \"dlltool\"\n" -#: dllwrap.c:505 +#: dllwrap.c:482 +#, c-format msgid " --entry Specify alternate DLL entry point\n" msgstr " --entry Giv alternativ indgangspunkt i DLL'en\n" -#: dllwrap.c:506 +#: dllwrap.c:483 +#, c-format msgid " --image-base Specify image base address\n" msgstr " --image-base Giv billedets baseadresse\n" -#: dllwrap.c:507 +#: dllwrap.c:484 +#, c-format msgid " --target i386-cygwin32 or i386-mingw32\n" msgstr " --target i386-cygwin32 eller i386-mingw32\n" -#: dllwrap.c:508 +#: dllwrap.c:485 +#, c-format msgid " --dry-run Show what needs to be run\n" msgstr " --dry-run Gør intet andet end at vise hvad som bliver kørt\n" -#: dllwrap.c:509 +#: dllwrap.c:486 +#, c-format msgid " --mno-cygwin Create Mingw DLL\n" msgstr " --mno-cygwin Opret Mingw-DLL\n" -#: dllwrap.c:510 +#: dllwrap.c:487 +#, c-format msgid " Options passed to DLLTOOL:\n" msgstr " Flag som sendes til DLLTOOL:\n" -#: dllwrap.c:511 +#: dllwrap.c:488 +#, c-format msgid " --machine \n" msgstr " --machine \n" -#: dllwrap.c:512 +#: dllwrap.c:489 +#, c-format msgid " --output-exp Generate export file.\n" msgstr " --output-exp Generér eksportfil.\n" -#: dllwrap.c:513 +#: dllwrap.c:490 +#, c-format msgid " --output-lib Generate input library.\n" msgstr " --output-lib Generér inddatabibliotek.\n" -#: dllwrap.c:514 +#: dllwrap.c:491 +#, c-format msgid " --add-indirect Add dll indirects to export file.\n" msgstr " --add-indirect Tilføj indirekte dll til eksportfilen.\n" -#: dllwrap.c:515 +#: dllwrap.c:492 +#, c-format msgid " --dllname Name of input dll to put into output lib.\n" msgstr " --dllname Navn på inddata-dll som skal indsættes i uddatabiblioteket.\n" -#: dllwrap.c:516 +#: dllwrap.c:493 +#, c-format msgid " --def Name input .def file\n" msgstr " --def Navngiv .def-inddatafilen\n" -#: dllwrap.c:517 +#: dllwrap.c:494 +#, c-format msgid " --output-def Name output .def file\n" msgstr " --output-def Navngiv .def-uddatafilen\n" -#: dllwrap.c:518 +#: dllwrap.c:495 +#, c-format msgid " --export-all-symbols Export all symbols to .def\n" msgstr " --export-all-symbols Eksporter alle symboler til .def\n" -#: dllwrap.c:519 +#: dllwrap.c:496 +#, c-format msgid " --no-export-all-symbols Only export .drectve symbols\n" msgstr " --no-export-all-symbols Eksporter kun .drectve-symboler\n" -#: dllwrap.c:520 +#: dllwrap.c:497 +#, c-format msgid " --exclude-symbols Exclude from .def\n" msgstr " --exclude-symbols Undtag symbolerne i fra .def\n" -#: dllwrap.c:521 +#: dllwrap.c:498 +#, c-format msgid " --no-default-excludes Zap default exclude symbols\n" msgstr " --no-default-excludes Bortse fra forvalgte undtagne symboler\n" -#: dllwrap.c:522 +#: dllwrap.c:499 +#, c-format msgid " --base-file Read linker generated base file\n" msgstr " --base-file Læs lænkergenereret basefil\n" -#: dllwrap.c:523 +#: dllwrap.c:500 +#, c-format msgid " --no-idata4 Don't generate idata$4 section\n" msgstr " --no-idata4 Generér ingen idata$4-sektion\n" -#: dllwrap.c:524 +#: dllwrap.c:501 +#, c-format msgid " --no-idata5 Don't generate idata$5 section\n" msgstr " --no-idata5 Generér ingen idata$5-sektion\n" -#: dllwrap.c:525 +#: dllwrap.c:502 +#, c-format msgid " -U Add underscores to .lib\n" msgstr " -U Sæt understregninger i .lib\n" -#: dllwrap.c:526 +#: dllwrap.c:503 +#, c-format msgid " -k Kill @ from exported names\n" msgstr " -k Fjern @ fra eksporterede navne\n" -#: dllwrap.c:527 +#: dllwrap.c:504 +#, c-format msgid " --add-stdcall-alias Add aliases without @\n" msgstr " --add-stdcall-alias Tilføj aliaser uden @\n" -#: dllwrap.c:528 +#: dllwrap.c:505 +#, c-format msgid " --as Use for assembler\n" msgstr " --as Brug som assembler\n" -#: dllwrap.c:529 +#: dllwrap.c:506 +#, c-format msgid " --nodelete Keep temp files.\n" msgstr " --nodelete Behold temporære filer.\n" -#: dllwrap.c:530 +#: dllwrap.c:507 +#, c-format msgid " Rest are passed unmodified to the language driver\n" msgstr " Øvrige flag sendes uændrede til programeringsprogsenheden\n" -#: dllwrap.c:802 +#: dllwrap.c:781 msgid "Must provide at least one of -o or --dllname options" msgstr "Angiv mindst et af flagene -o eller --dllname" -#: dllwrap.c:830 +#: dllwrap.c:810 msgid "" "no export definition file provided.\n" "Creating one, but that may not be what you want" @@ -995,2888 +1174,3594 @@ msgstr "" # Indenteringen er øged til at oversættelsen skal få plads fremfor # kolonet på alle 4 strenge. -#: dllwrap.c:992 +#: dllwrap.c:969 #, c-format msgid "DLLTOOL name : %s\n" msgstr "DLLVÆRKTØJ navn : %s\n" # Indenteringen er øged til at oversættelsen skal få plads fremfor # kolonet på alle 4 strenge. -#: dllwrap.c:993 +#: dllwrap.c:970 #, c-format msgid "DLLTOOL options : %s\n" msgstr "DLLTOOL flag: %s\n" # Indenteringen er øged til at oversættelsen skal få plads fremfor # kolonet på alle 4 strenge. -#: dllwrap.c:994 +#: dllwrap.c:971 #, c-format msgid "DRIVER name : %s\n" msgstr "ENHED navn : %s\n" # Indenteringen er øged til at oversættelsen skal få plads fremfor # kolonet på alle 4 strenge. -#: dllwrap.c:995 +#: dllwrap.c:972 #, c-format msgid "DRIVER options : %s\n" msgstr "ENHED flag : %s\n" -#: emul_aix.c:52 +#: dwarf.c:98 dwarf.c:142 readelf.c:370 readelf.c:526 #, c-format -msgid " [-g] - 32 bit small archive\n" -msgstr "" - -#: emul_aix.c:53 -msgid " [-X32] - ignores 64 bit objects\n" -msgstr "" +msgid "Unhandled data length: %d\n" +msgstr "Størrelse på data som ikke kan behandles: %d\n" -#: emul_aix.c:54 -msgid " [-X64] - ignores 32 bit objects\n" -msgstr "" +#: dwarf.c:267 dwarf.c:2563 +msgid "badly formed extended line op encountered!\n" +msgstr "fejlagtigt udformet udvidet linje-op mødtes!\n" -#: emul_aix.c:55 -msgid " [-X32_64] - accepts 32 and 64 bit objects\n" +#: dwarf.c:274 +#, c-format +msgid " Extended opcode %d: " +msgstr " Udvidet op-kode %d: " + +#: dwarf.c:279 +#, c-format +msgid "" +"End of Sequence\n" +"\n" msgstr "" +"Slut på sekvensen\n" +"\n" -#: ieee.c:317 -msgid "unexpected end of debugging information" -msgstr "uventet slut på fejlsøgningsinformationen" +#: dwarf.c:285 +#, c-format +msgid "set Address to 0x%lx\n" +msgstr "sæt Adresse til 0x%lx\n" -#: ieee.c:412 -msgid "invalid number" -msgstr "ugyldigt tal" +#: dwarf.c:290 +#, c-format +msgid " define new File Table entry\n" +msgstr " definer ny filtabelspost\n" -#: ieee.c:471 -msgid "invalid string length" -msgstr "ugyldig strenglængde" +#: dwarf.c:291 dwarf.c:2178 +#, c-format +msgid " Entry\tDir\tTime\tSize\tName\n" +msgstr " Post\tKatalog\tTid\tStrl.\tNavn\n" -#: ieee.c:528 ieee.c:569 -msgid "expression stack overflow" -msgstr "overløb i udtryksstakken" +#: dwarf.c:293 +#, c-format +msgid " %d\t" +msgstr " %d\t" -#: ieee.c:548 -msgid "unsupported IEEE expression operator" -msgstr "IEEE-udtryksoperator som ikke understøttes" +#: dwarf.c:296 dwarf.c:298 dwarf.c:300 dwarf.c:2190 dwarf.c:2192 dwarf.c:2194 +#, c-format +msgid "%lu\t" +msgstr "%lu\t" -#: ieee.c:563 -msgid "unknown section" -msgstr "ukendt sektion" +#: dwarf.c:301 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" +"%s\n" +"\n" -#: ieee.c:584 -msgid "expression stack underflow" -msgstr "underløb i udtryksstakken" +#. The test against DW_LNW_hi_user is redundant due to +#. the limited range of the unsigned char data type used +#. for op_code. +#. && op_code <= DW_LNE_hi_user +#: dwarf.c:342 +#, fuzzy, c-format +msgid "user defined: length %d\n" +msgstr "(Brugerdefineret plads-op)" -#: ieee.c:598 -msgid "expression stack mismatch" -msgstr "fejlbalanceret udtryksstak" +#: dwarf.c:344 dwarf.c:2594 +#, c-format +msgid "UNKNOWN: length %d\n" +msgstr "UKENDT: længde %d\n" -#: ieee.c:637 -msgid "unknown builtin type" -msgstr "ukendt indbygget type" +#: dwarf.c:357 +msgid "" +msgstr "" -#: ieee.c:782 -msgid "BCD float type not supported" -msgstr "flydendetalstype BCD understøttes ikke" +#: dwarf.c:363 +#, c-format +msgid "DW_FORM_strp offset too big: %lx\n" +msgstr "" -#: ieee.c:928 -msgid "unexpected number" -msgstr "uventet tal" +#: dwarf.c:364 +msgid "" +msgstr "" -#: ieee.c:935 -msgid "unexpected record type" -msgstr "uventet posttype" +#: dwarf.c:597 +#, c-format +msgid "Unknown TAG value: %lx" +msgstr "Ukendt TAG-værdi: %lx" -#: ieee.c:968 -msgid "blocks left on stack at end" -msgstr "block stadig på stakken ved slutningen" +#: dwarf.c:633 +#, c-format +msgid "Unknown FORM value: %lx" +msgstr "Ukendt FORM-værdi: %lx" -#: ieee.c:1233 -msgid "unknown BB type" -msgstr "ukendt BB-type" +#: dwarf.c:642 +#, c-format +msgid " %lu byte block: " +msgstr " %lu byte-blok: " -#: ieee.c:1242 -msgid "stack overflow" -msgstr "overløb i stakken" +#: dwarf.c:1031 +#, c-format +msgid "(User defined location op)" +msgstr "(Brugerdefineret plads-op)" -#: ieee.c:1267 -msgid "stack underflow" -msgstr "underløb i stakken" +#: dwarf.c:1033 +#, c-format +msgid "(Unknown location op)" +msgstr "(Ukendt plads-op)" -#: ieee.c:1381 ieee.c:1453 ieee.c:2152 -msgid "illegal variable index" -msgstr "ikke tilladt variabelindeks" +#: dwarf.c:1081 +msgid "Internal error: DWARF version is not 2 or 3.\n" +msgstr "" -#: ieee.c:1431 -msgid "illegal type index" -msgstr "ikke tilladt typeindeks" +#: dwarf.c:1180 +msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" +msgstr "" -#: ieee.c:1441 ieee.c:1478 -msgid "unknown TY code" -msgstr "ukendt TY-kode" +#: dwarf.c:1229 +#, fuzzy, c-format +msgid " (indirect string, offset: 0x%lx): %s" +msgstr " (indirekte streng, offset: 0x%lx): " -#: ieee.c:1460 -msgid "undefined variable in TY" -msgstr "udefineret variabel i TY" +#: dwarf.c:1238 +#, fuzzy, c-format +msgid "Unrecognized form: %lu\n" +msgstr "Ukendt formular: %d\n" -#. Pascal file name. FIXME. -#: ieee.c:1871 -msgid "Pascal file name not supported" -msgstr "Pascal-filnavn understøttes ikke" +#: dwarf.c:1322 +#, c-format +msgid "(not inlined)" +msgstr "(ikke inlined)" -# BUGG: qualif>i<%lx>: Abbrev Number: %lu" +msgstr " <%d><%lx>: Fork.-nummer: %lu (%s)\n" -#: ieee.c:3410 -msgid "unrecognized C++ reference type" -msgstr "ukendt C++-referencetype" +#: dwarf.c:1965 +#, c-format +msgid "DIE at offset %lx refers to abbreviation number %lu which does not exist\n" +msgstr "" -#: ieee.c:3492 -msgid "C++ reference not found" -msgstr "fandt ikke C++-referencen" +#: dwarf.c:1971 +#, fuzzy, c-format +msgid " (%s)\n" +msgstr " %s\n" -#: ieee.c:3500 -msgid "C++ reference is not pointer" -msgstr "C++-referencen er ingen peger" +#: dwarf.c:2062 +#, fuzzy, c-format +msgid "" +"Raw dump of debug contents of section %s:\n" +"\n" +msgstr "" +"\n" +"Udskrift af fejlsøgningsindhold i sektion %s:\n" +"\n" -#: ieee.c:3529 ieee.c:3537 -msgid "missing required ASN" -msgstr "mangler nødvendig ASN" +#: dwarf.c:2100 dwarf.c:2387 +msgid "The line info appears to be corrupt - the section is too small\n" +msgstr "Linjeinformationen virker være i stykker - sektionen er for lille\n" -#: ieee.c:3567 ieee.c:3575 -msgid "missing required ATN65" -msgstr "mangler nødvendig ATN65" +#: dwarf.c:2109 dwarf.c:2397 +#, fuzzy +msgid "Only DWARF version 2 and 3 line info is currently supported.\n" +msgstr "Kun DWARF version 2's linjeinfo understøttes i øjeblikket.\n" -#: ieee.c:3589 -msgid "bad ATN65 record" -msgstr "fejlagtig ATN65-post" +#: dwarf.c:2130 +#, fuzzy, c-format +msgid " Offset: 0x%lx\n" +msgstr " Længde: %ld\n" -#: ieee.c:4234 -msgid "IEEE numeric overflow: 0x" -msgstr "IEEE numerisk overløb: 0x" +#: dwarf.c:2131 +#, c-format +msgid " Length: %ld\n" +msgstr " Længde: %ld\n" -#: ieee.c:4280 +#: dwarf.c:2132 #, c-format -msgid "IEEE string length overflow: %u\n" -msgstr "IEEE overløb i strenglængden: %u\n" +msgid " DWARF Version: %d\n" +msgstr " DWARF version: %d\n" -#: ieee.c:5330 +#: dwarf.c:2133 #, c-format -msgid "IEEE unsupported integer type size %u\n" -msgstr "IEEE klarer ikke heltalstyper af størrelse %u\n" +msgid " Prologue Length: %d\n" +msgstr " Prologlængde: %d\n" -#: ieee.c:5366 +#: dwarf.c:2134 #, c-format -msgid "IEEE unsupported float type size %u\n" -msgstr "IEEE klarer ikke flydendetalstyper af størrelse %u\n" +msgid " Minimum Instruction Length: %d\n" +msgstr " Min.-instruktionslængde: %d\n" -#: ieee.c:5402 +# BUG: Ska det ikke være `' på engelsk? +#: dwarf.c:2135 #, c-format -msgid "IEEE unsupported complex type size %u\n" -msgstr "IEEE klarer ikke komplekse typer af størrelse %u\n" +msgid " Initial value of 'is_stmt': %d\n" +msgstr " initialværdi på \"is_stmt\": %d\n" -#: nlmconv.c:281 srconv.c:2043 -msgid "input and output files must be different" -msgstr "uddatafilen skal være en anden end inddatafilen" +#: dwarf.c:2136 +#, c-format +msgid " Line Base: %d\n" +msgstr " linjebase: %d\n" -#: nlmconv.c:328 -msgid "input file named both on command line and with INPUT" -msgstr "inddatafilen nævnt både på kommandolinjen og via INPUT" +#: dwarf.c:2137 +#, c-format +msgid " Line Range: %d\n" +msgstr " linjeområde: %d\n" -#: nlmconv.c:337 -msgid "no input file" -msgstr "ingen inddatafil" +#: dwarf.c:2138 +#, c-format +msgid " Opcode Base: %d\n" +msgstr " op-kodebase: %d\n" -#: nlmconv.c:367 -msgid "no name for output file" -msgstr "intet navn på uddatafilen" +#: dwarf.c:2147 +#, c-format +msgid "" +"\n" +" Opcodes:\n" +msgstr "" +"\n" +" Op-koder:\n" -#: nlmconv.c:380 -msgid "warning: input and output formats are not compatible" -msgstr "advarsel: formaterne for ind- og uddata er ikke kompatible" +#: dwarf.c:2150 +#, c-format +msgid " Opcode %d has %d args\n" +msgstr " Op-kode %d har %d argumenter\n" -#: nlmconv.c:409 -msgid "make .bss section" -msgstr "opret .bss-sektion" +#: dwarf.c:2156 +#, c-format +msgid "" +"\n" +" The Directory Table is empty.\n" +msgstr "" +"\n" +" Katalogtabellen er tom.\n" -#: nlmconv.c:418 -msgid "make .nlmsections section" -msgstr "opret .nlmsections-sektion" +#: dwarf.c:2159 +#, c-format +msgid "" +"\n" +" The Directory Table:\n" +msgstr "" +"\n" +" Katalogtabellen:\n" -#: nlmconv.c:420 -msgid "set .nlmsections flags" -msgstr "sæt .nlmsections-flag" +#: dwarf.c:2163 +#, c-format +msgid " %s\n" +msgstr " %s\n" -#: nlmconv.c:448 -msgid "set .bss vma" -msgstr "sæt vma for .bss" +#: dwarf.c:2174 +#, c-format +msgid "" +"\n" +" The File Name Table is empty.\n" +msgstr "" +"\n" +" Filnavnstabellen er tom.\n" -#: nlmconv.c:455 -msgid "set .data size" -msgstr "sæt .data-størrelse" +#: dwarf.c:2177 +#, c-format +msgid "" +"\n" +" The File Name Table:\n" +msgstr "" +"\n" +" Filnavnstabellen:\n" -#: nlmconv.c:635 +#: dwarf.c:2185 #, c-format -msgid "warning: symbol %s imported but not in import list" -msgstr "advarsel: symbol %s importeredes, men findes ikke i importlisten" +msgid " %d\t" +msgstr " %d\t" -#: nlmconv.c:655 -msgid "set start address" -msgstr "sæt startadresse" +#: dwarf.c:2196 +#, c-format +msgid "%s\n" +msgstr "%s\n" -#: nlmconv.c:704 +#. Now display the statements. +#: dwarf.c:2204 #, c-format -msgid "warning: START procedure %s not defined" -msgstr "advarsel: START-procedure %s er ikke defineret" +msgid "" +"\n" +" Line Number Statements:\n" +msgstr "" +"\n" +" Linjenummersætninger:\n" -#: nlmconv.c:706 +#: dwarf.c:2220 +#, fuzzy, c-format +msgid " Special opcode %d: advance Address by %lu to 0x%lx" +msgstr " Særlig op-kode %d: øg adressen med %d til 0x%lx" + +#: dwarf.c:2224 #, c-format -msgid "warning: EXIT procedure %s not defined" -msgstr "advarsel: EXIT-procedure %s er ikke defineret" +msgid " and Line by %d to %d\n" +msgstr " og linjenumret med %d til %d\n" -#: nlmconv.c:708 +#: dwarf.c:2234 #, c-format -msgid "warning: CHECK procedure %s not defined" -msgstr "advarsel: CHECK-procedure %s er ikke defineret" +msgid " Copy\n" +msgstr " Kopiér\n" -#: nlmconv.c:729 nlmconv.c:918 -msgid "custom section" -msgstr "tilrettelig sektion" +#: dwarf.c:2242 +#, fuzzy, c-format +msgid " Advance PC by %lu to 0x%lx\n" +msgstr " Øg PC med %d til %lx\n" -#: nlmconv.c:750 nlmconv.c:947 -msgid "help section" -msgstr "hjælpesektion" +#: dwarf.c:2250 +#, c-format +msgid " Advance Line by %d to %d\n" +msgstr " Øg linjenumret med %d til %d\n" -#: nlmconv.c:772 nlmconv.c:965 -msgid "message section" -msgstr "meddelelsesektion" +#: dwarf.c:2257 +#, c-format +msgid " Set File Name to entry %d in the File Name Table\n" +msgstr " Sæt filnavnet til post %d i filnavnstabellen\n" -#: nlmconv.c:788 nlmconv.c:998 -msgid "module section" -msgstr "modulsektion" +#: dwarf.c:2265 +#, fuzzy, c-format +msgid " Set column to %lu\n" +msgstr " Sæt kolonnen til %d\n" -#: nlmconv.c:808 nlmconv.c:1014 -msgid "rpc section" -msgstr "rpc-section" +#: dwarf.c:2272 +#, c-format +msgid " Set is_stmt to %d\n" +msgstr " Sæt is_stmt til %d\n" -#. There is no place to record this information. -#: nlmconv.c:844 +#: dwarf.c:2277 #, c-format -msgid "%s: warning: shared libraries can not have uninitialized data" -msgstr "%s: advarsel: delte biblioteker kan ikke have uinitieret data" +msgid " Set basic block\n" +msgstr " Sæt baseblokken\n" -#: nlmconv.c:865 nlmconv.c:1033 -msgid "shared section" -msgstr "delt sektion" +#: dwarf.c:2285 +#, fuzzy, c-format +msgid " Advance PC by constant %lu to 0x%lx\n" +msgstr " Øg PC med konstant %d til 0x%lx\n" -#: nlmconv.c:873 -msgid "warning: No version number given" -msgstr "advarsel: Intet versionsnummer givet" +#: dwarf.c:2293 +#, fuzzy, c-format +msgid " Advance PC by fixed size amount %lu to 0x%lx\n" +msgstr " Øg PC med fastlængdeantal %d til 0x%lx\n" -#: nlmconv.c:913 nlmconv.c:942 nlmconv.c:960 nlmconv.c:1009 nlmconv.c:1028 +#: dwarf.c:2298 #, c-format -msgid "%s: read: %s" -msgstr "%s: læsefejl: %s" - -#: nlmconv.c:935 -msgid "warning: MAP and FULLMAP are not supported; try ld -M" -msgstr "advarsel: MAP og FULLMAP understøttes ikke; forsøg med ld -M" +msgid " Set prologue_end to true\n" +msgstr " Sæt prologue_end til sand\n" -#: nlmconv.c:1107 +#: dwarf.c:2302 #, c-format -msgid "Usage: %s [option(s)] [in-file [out-file]]\n" -msgstr "Brug: %s [flag] [inddatafil [uddatafil]]\n" +msgid " Set epilogue_begin to true\n" +msgstr " Sæt epilogue_begin til sand\n" -#: nlmconv.c:1108 -msgid " Convert an object file into a NetWare Loadable Module\n" -msgstr " Konvertér en objektfil til et indlæsningsbart NetWare-modul\n" +#: dwarf.c:2308 dwarf.c:2672 +#, fuzzy, c-format +msgid " Set ISA to %lu\n" +msgstr " Sæt ISA til %d\n" + +#: dwarf.c:2312 dwarf.c:2676 +#, c-format +msgid " Unknown opcode %d with operands: " +msgstr " Ukendt op-kode %d med operand: " -#: nlmconv.c:1109 +#: dwarf.c:2345 +#, fuzzy, c-format msgid "" -" The options are:\n" -" -I --input-target= Set the input binary file format\n" -" -O --output-target= Set the output binary file format\n" -" -T --header-file= Read for NLM header information\n" -" -l --linker= Use for any linking\n" -" -d --debug Display on stderr the linker command line\n" -" -h --help Display this information\n" -" -v --version Display the program's version\n" +"Decoded dump of debug contents of section %s:\n" +"\n" msgstr "" +"\n" +"Udskrift af fejlsøgningsindhold i sektion %s:\n" +"\n" -#: nlmconv.c:1151 -#, c-format -msgid "support not compiled in for %s" -msgstr "ikke oversat med understøttelse for %s" - -#: nlmconv.c:1191 -msgid "make section" -msgstr "opret sektion" +#: dwarf.c:2506 +#, fuzzy, c-format +msgid "CU: %s:\n" +msgstr " %s\n" -#: nlmconv.c:1205 -msgid "set section size" -msgstr "sæt sektionsstørrelse" +#: dwarf.c:2507 dwarf.c:2520 +#, fuzzy, c-format +msgid "File name Line number Starting address\n" +msgstr " Nr: Navn Bind til Flag\n" -#: nlmconv.c:1211 -msgid "set section alignment" +#: dwarf.c:2513 +#, c-format +msgid "CU: %s/%s:\n" msgstr "" -#: nlmconv.c:1215 -msgid "set section flags" -msgstr "sæt sektionsflag" +#: dwarf.c:2518 dwarf.c:2590 +#, fuzzy, c-format +msgid "%s:\n" +msgstr "%s\n" -#: nlmconv.c:1226 -msgid "set .nlmsections size" -msgstr "sæt .nlmsektions størrelse" +#. If directory index is 0, that means current directory. +#: dwarf.c:2623 +#, c-format +msgid "" +"\n" +"./%s:[++]\n" +msgstr "" -#: nlmconv.c:1314 nlmconv.c:1322 nlmconv.c:1331 nlmconv.c:1336 -msgid "set .nlmsection contents" -msgstr "sæt .nlmsektions indhold" +#. The directory index starts counting at 1. +#: dwarf.c:2629 +#, c-format +msgid "" +"\n" +"%s/%s:\n" +msgstr "" -#: nlmconv.c:1837 -msgid "stub section sizes" -msgstr "sektionsstørrelser for stub" +#: dwarf.c:2714 +#, c-format +msgid "%-35s %11d %#18lx\n" +msgstr "" -#: nlmconv.c:1886 -msgid "writing stub" -msgstr "skriver stub" +#: dwarf.c:2719 +#, c-format +msgid "%s %11d %#18lx\n" +msgstr "" -#: nlmconv.c:1975 +#: dwarf.c:2749 dwarf.c:3024 dwarf.c:3425 #, c-format -msgid "unresolved PC relative reloc against %s" -msgstr "uløst PC-relativ relokering mod %s" +msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n" +msgstr "" -#: nlmconv.c:2039 +#: dwarf.c:2794 dwarf.c:2888 dwarf.c:2962 dwarf.c:3079 dwarf.c:3227 +#: dwarf.c:3480 #, c-format -msgid "overflow when adjusting relocation against %s" -msgstr "overløb ved justeringen af relokering mod %s" +msgid "" +"Contents of the %s section:\n" +"\n" +msgstr "" +"%s-sektionens indhold:\n" +"\n" -#: nlmconv.c:2156 +#: dwarf.c:2828 dwarf.c:3330 #, c-format -msgid "%s: execution of %s failed: " -msgstr "%s: udførsel af %s mislykkedes: " +msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n" +msgstr "" + +#: dwarf.c:2842 +#, fuzzy +msgid "Only DWARF 2 and 3 pubnames are currently supported\n" +msgstr "Kun DWARF 2 pub.-navn understøttes i øjeblikket\n" -#: nlmconv.c:2171 +#: dwarf.c:2849 #, c-format -msgid "Execution of %s failed" -msgstr "Eksekvering af %s mislykkedes" +msgid " Length: %ld\n" +msgstr " Længde: %ld\n" -#: nm.c:246 size.c:85 strings.c:650 +#: dwarf.c:2851 #, c-format -msgid "Usage: %s [option(s)] [file(s)]\n" -msgstr "Brug: %s [flag] [inddatafiler]\n" +msgid " Version: %d\n" +msgstr " Version: %d\n" -#: nm.c:247 -msgid " List symbols in [file(s)] (a.out by default).\n" -msgstr " List symboler i FILerne (eller a.out).\n" +#: dwarf.c:2853 +#, fuzzy, c-format +msgid " Offset into .debug_info section: 0x%lx\n" +msgstr " Offset i .debug_info-sektionen: %ld\n" -#: nm.c:248 -#, fuzzy +#: dwarf.c:2855 +#, c-format +msgid " Size of area in .debug_info section: %ld\n" +msgstr " Strl. på omr. i .debug_info-sekt.: %ld\n" + +#: dwarf.c:2858 +#, c-format msgid "" -" The options are:\n" -" -a, --debug-syms Display debugger-only symbols\n" -" -A, --print-file-name Print name of the input file before every symbol\n" -" -B Same as --format=bsd\n" -" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n" -" The STYLE, if specified, can be `auto' (the default),\n" -" `gnu', 'lucid', 'arm', 'hp', 'edg' or 'gnu-new-abi'\n" -" --no-demangle Do not demangle low-level symbol names\n" -" -D, --dynamic Display dynamic symbols instead of normal symbols\n" -" --defined-only Display only defined symbols\n" -" -e (ignored)\n" -" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n" -" `sysv' or `posix'. The default is `bsd'\n" -" -g, --extern-only Display only external symbols\n" -" -l, --line-numbers Use debugging information to find a filename and\n" -" line number for each symbol\n" -" -n, --numeric-sort Sort symbols numerically by address\n" -" -o Same as -A\n" -" -p, --no-sort Do not sort the symbols\n" -" -P, --portability Same as --format=posix\n" -" -r, --reverse-sort Reverse the sense of the sort\n" -" -S, --print-size Print size of defined symbols\n" -" -s, --print-armap Include index for symbols from archive members\n" -" --size-sort Sort symbols by size\n" -" -t, --radix=RADIX Use RADIX for printing symbol values\n" -" --target=BFDNAME Specify the target object format as BFDNAME\n" -" -u, --undefined-only Display only undefined symbols\n" -" -X 32_64 (ignored)\n" -" -h, --help Display this information\n" -" -V, --version Display this program's version number\n" "\n" +" Offset\tName\n" msgstr "" "\n" -" -a, --debug-syms Vis kun fejlsøgningssymboler\n" -" -A, --print-file-name Skriv navnet på inddatafilen for hvert symbol\n" -" -B Samme som --format=bsd\n" -" -C, --demangle[=STIL] Afkod lavniveausymbolnavn til brugerniveaunavn\n" -" STIL kan være \"auto\" (det forvalgte), \"gnu\",\n" -" \"lucid\", \"arm\", \"hp\", \"edg\" eller \"gnu-new-abi\"\n" -" --no-demangle Afkod ikke lavniveausymbolnavn\n" -" -D, --dynamic Vis dynamiske symboler i stedet for normale symboler\n" -" --defined-only Vis kun definerede symboler\n" -" -e (ignoreres)\n" -" -f, --format=FORMAT Brug FORMAT som uddataformat. FORMAT kan være\n" -" \"bsd\", \"sysv\" eller \"posix\". Forvalet er \"bsd\"\n" -" -g, --extern-only Vis kun externe symboler\n" -" -h, --help Vis denne hjælpen\n" -" -l, --line-numbers Brug fejlsøgningsinformationen til at slå op\n" -" filnavn og linjenummer for hvert symbol\n" -" -n, --numeric-sort Sortere symboler numerisk efter adress\n" -" -o Samma som -A\n" -" -p, --no-sort Sortere ikke symbolerne\n" -" -P, --portability Samme som --format=posix\n" -" -r, --reverse-sort Sortere åt andre hållet\n" -" -s, --print-armap Ta med indeks for symboler i arkivmedlemmer\n" -" --size-sort Sortere symboler efter størrelse\n" -" -t, --radix=BAS Skriv tal i talbasen BAS\n" -" --target=BFD-NAVN Specificere målobjektets format som BFD-NAVN\n" -" -u, --undefined-only Vis kun udefinerede symboler\n" -" -V, --version Vis programmets versionsinformation\n" -" -X 32_64 (ignoreres)\n" -"\n" +" Offset\tNavn\n" -#: nm.c:281 objdump.c:217 +#: dwarf.c:2909 #, c-format -msgid "Report bugs to %s.\n" -msgstr "" -"Rapportér fejl til %s.\n" -"Rapportér fejl i oversættelsen til dansk@klid.dk.\n" +msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" +msgstr " DW_MACINFO_start_file - linje: %d filnr: %d\n" -#: nm.c:314 +#: dwarf.c:2915 #, c-format -msgid "%s: invalid radix" -msgstr "%s: ugyldig talbase" +msgid " DW_MACINFO_end_file\n" +msgstr " DW_MACINFO_end_file\n" -#: nm.c:339 +#: dwarf.c:2923 #, c-format -msgid "%s: invalid output format" -msgstr "%s: ugyldigt uddataformat" - -#: nm.c:456 -msgid "Only -X 32_64 is supported" -msgstr "Kun -X 32_64 understøttes" +msgid " DW_MACINFO_define - lineno : %d macro : %s\n" +msgstr " DW_MACINFO_define - linje : %d makro : %s\n" -#: nm.c:498 +#: dwarf.c:2932 #, c-format -msgid "data size %ld" -msgstr "datastørrelse %ld" +msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" +msgstr " DW_MACINFO_undef - linje : %d makro : %s\n" -#: nm.c:523 readelf.c:5306 readelf.c:5342 +#: dwarf.c:2944 #, c-format -msgid ": %d" -msgstr ": %d" +msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" +msgstr " DW_MACINFO_vendor_ext - konstant : %d streng : %s\n" -#: nm.c:525 readelf.c:5308 readelf.c:5354 +#: dwarf.c:2973 #, c-format -msgid ": %d" -msgstr ": %d" +msgid " Number TAG\n" +msgstr " Nummer TAG\n" -#: nm.c:527 readelf.c:5310 readelf.c:5357 +#: dwarf.c:2979 #, c-format -msgid ": %d" -msgstr ": %d" +msgid " %ld %s [%s]\n" +msgstr " %ld %s [%s]\n" + +#: dwarf.c:2982 +msgid "has children" +msgstr "har børn" -#: nm.c:1339 +#: dwarf.c:2982 +msgid "no children" +msgstr "ingen børn" + +#: dwarf.c:2985 #, c-format +msgid " %-18s %s\n" +msgstr " %-18s %s\n" + +#: dwarf.c:3018 dwarf.c:3223 dwarf.c:3419 +#, fuzzy, c-format msgid "" "\n" -"\n" -"Undefined symbols from %s:\n" -"\n" +"The %s section is empty.\n" msgstr "" "\n" -"\n" -"Udefinerede symboler fra %s:\n" -"\n" +".debug_str-sektionen er tom.\n" + +#. FIXME: Should we handle this case? +#: dwarf.c:3068 +msgid "Location lists in .debug_info section aren't in ascending order!\n" +msgstr "" -#: nm.c:1341 +#: dwarf.c:3071 +#, fuzzy +msgid "No location lists in .debug_info section!\n" +msgstr " Offset i .debug_info-sektionen: %ld\n" + +#: dwarf.c:3076 #, c-format -msgid "" -"\n" -"\n" -"Symbols from %s:\n" -"\n" +msgid "Location lists in %s section start at 0x%lx\n" msgstr "" -"\n" -"\n" -"Symboler fra %s:\n" -"\n" -#: nm.c:1343 nm.c:1401 -msgid "" -"Name Value Class Type Size Line Section\n" -"\n" +#: dwarf.c:3080 +#, c-format +msgid " Offset Begin End Expression\n" msgstr "" -"Navn Værdi Klasse Type Størr. Linje Sektion\n" -"\n" -#: nm.c:1346 nm.c:1404 -msgid "" -"Name Value Class Type Size Line Section\n" -"\n" +#: dwarf.c:3111 +#, c-format +msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "" -"Navn Værdi Klasse Type Størr. Linje Sektion\n" -"\n" -#: nm.c:1397 +#: dwarf.c:3115 #, c-format -msgid "" -"\n" -"\n" -"Undefined symbols from %s[%s]:\n" -"\n" +msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "" + +#: dwarf.c:3123 +#, fuzzy, c-format +msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" +msgstr "" +"Indhold i .debug_loc-sektionen:\n" "\n" + +#: dwarf.c:3132 dwarf.c:3167 dwarf.c:3177 +#, fuzzy, c-format +msgid "Location list starting at offset 0x%lx is not terminated.\n" +msgstr "" "\n" -"Udefinerede symboler fra %s[%s]:\n" -"\n" +"Relokeringssektionen på offset 0x%lx indeholder %ld byte:\n" + +#: dwarf.c:3151 dwarf.c:3532 +#, c-format +msgid "\n" +msgstr "" + +#: dwarf.c:3161 +#, fuzzy, c-format +msgid "(base address)\n" +msgstr "sæt startadresse" + +#: dwarf.c:3196 +msgid " (start == end)" +msgstr "" + +#: dwarf.c:3198 +msgid " (start > end)" +msgstr "" + +#: dwarf.c:3208 +#, c-format +msgid "There are %ld unused bytes at the end of section %s\n" +msgstr "" + +#: dwarf.c:3341 +#, fuzzy +msgid "Only DWARF 2 and 3 aranges are currently supported.\n" +msgstr "Kun DWARF2's a-intervaller understøttes i øjeblikket.\n" + +#: dwarf.c:3345 +#, c-format +msgid " Length: %ld\n" +msgstr " Længde: %ld\n" + +#: dwarf.c:3346 +#, c-format +msgid " Version: %d\n" +msgstr " Version: %d\n" + +#: dwarf.c:3347 +#, fuzzy, c-format +msgid " Offset into .debug_info: 0x%lx\n" +msgstr " Offset i .debug_info: %lx\n" + +#: dwarf.c:3348 +#, c-format +msgid " Pointer Size: %d\n" +msgstr " Pegerstørrelse: %d\n" -#: nm.c:1399 +#: dwarf.c:3349 #, c-format +msgid " Segment Size: %d\n" +msgstr " Segmentstørrelse: %d\n" + +#: dwarf.c:3358 +msgid "Pointer size + Segment size is not a power of two.\n" +msgstr "" + +#: dwarf.c:3363 +#, fuzzy, c-format msgid "" "\n" -"\n" -"Symbols from %s[%s]:\n" -"\n" +" Address Length\n" msgstr "" "\n" -"\n" -"Symboler fra %s[%s]:\n" -"\n" +" Adresselængde\n" -#: nm.c:1614 +#: dwarf.c:3365 +#, fuzzy, c-format msgid "" "\n" -"Archive index:\n" +" Address Length\n" msgstr "" "\n" -"Arkivindeks:\n" +" Adresselængde\n" + +#. FIXME: Should we handle this case? +#: dwarf.c:3469 +#, fuzzy +msgid "Range lists in .debug_info section aren't in ascending order!\n" +msgstr " Offset i .debug_info-sektionen: %ld\n" + +#: dwarf.c:3472 +#, fuzzy +msgid "No range lists in .debug_info section!\n" +msgstr " Offset i .debug_info-sektionen: %ld\n" -#: objcopy.c:363 srconv.c:1952 +#: dwarf.c:3477 #, c-format -msgid "Usage: %s [option(s)] in-file [out-file]\n" -msgstr "Brug: %s [flag] inddatafil [uddatafil]\n" +msgid "Range lists in %s section start at 0x%lx\n" +msgstr "" -#: objcopy.c:364 -msgid " Copies a binary file, possibly transforming it in the process\n" +#: dwarf.c:3481 +#, c-format +msgid " Offset Begin End\n" msgstr "" -#: objcopy.c:365 objcopy.c:435 -msgid " The options are:\n" -msgstr " Flagene er:\n" +#: dwarf.c:3506 +#, c-format +msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" +msgstr "" -#: objcopy.c:366 -#, fuzzy -msgid "" -" -I --input-target Assume input file is in format \n" -" -O --output-target Create an output file in format \n" -" -B --binary-architecture Set arch of output file, when input is binary\n" -" -F --target Set both input and output format to \n" -" --debugging Convert debugging information, if possible\n" -" -p --preserve-dates Copy modified/access timestamps to the output\n" -" -j --only-section Only copy section into the output\n" -" -R --remove-section Remove section from the output\n" -" -S --strip-all Remove all symbol and relocation information\n" -" -g --strip-debug Remove all debugging symbols\n" -" --strip-unneeded Remove all symbols not needed by relocations\n" -" -N --strip-symbol Do not copy symbol \n" -" -K --keep-symbol Only copy symbol \n" -" -L --localize-symbol Force symbol to be marked as a local\n" -" -G --keep-global-symbol Localize all symbols except \n" -" -W --weaken-symbol Force symbol to be marked as a weak\n" -" --weaken Force all global symbols to be marked as weak\n" -" -x --discard-all Remove all non-global symbols\n" -" -X --discard-locals Remove any compiler-generated symbols\n" -" -i --interleave Only copy one out of every bytes\n" -" -b --byte Select byte in every interleaved block\n" -" --gap-fill Fill gaps between sections with \n" -" --pad-to Pad the last section up to address \n" -" --set-start Set the start address to \n" -" {--change-start|--adjust-start} \n" -" Add to the start address\n" -" {--change-addresses|--adjust-vma} \n" -" Add to LMA, VMA and start addresses\n" -" {--change-section-address|--adjust-section-vma} {=|+|-}\n" -" Change LMA and VMA of section by \n" -" --change-section-lma {=|+|-}\n" -" Change the LMA of section by \n" -" --change-section-vma {=|+|-}\n" -" Change the VMA of section by \n" -" {--[no-]change-warnings|--[no-]adjust-warnings}\n" -" Warn if a named section does not exist\n" -" --set-section-flags =\n" -" Set section 's properties to \n" -" --add-section = Add section found in to output\n" -" --rename-section =[,] Rename section to \n" -" --change-leading-char Force output format's leading character style\n" -" --remove-leading-char Remove leading character from global symbols\n" -" --redefine-sym = Redefine symbol name to \n" -" --srec-len Restrict the length of generated Srecords\n" -" --srec-forceS3 Restrict the type of generated Srecords to S3\n" -" --strip-symbols -N for all symbols listed in \n" -" --keep-symbols -K for all symbols listed in \n" -" --localize-symbols -L for all symbols listed in \n" -" --keep-global-symbols -G for all symbols listed in \n" -" --weaken-symbols -W for all symbols listed in \n" -" --alt-machine-code Use alternate machine code for output\n" -" -v --verbose List all object files modified\n" -" -V --version Display this program's version number\n" -" -h --help Display this output\n" -msgstr "" -" -I --input-target Antag inddatafilens format er \n" -" -O --output-target Opret uddatafilen i formatet \n" -" -B --binary-architecture Vælg arkitektur for udfil når inddata er binær\n" -" -F --target Sætt både in- og udformatet til \n" -" --debugging Konvertere fejlsøgningsinfo, om muligt\n" -" -p --preserve-dates Kopiér ændrings/adgangtider til uddatan\n" -" -j --only-section Kopiér kun sektion til uddatan\n" -" -R --remove-section Fjern sektion fra uddatan\n" -" -S --strip-all Fjern all symbol- og relokeringsinfo\n" -" -g --strip-debug Fjern alle fejlsøgningssymboler\n" -" --strip-unneeded Fjern symboler onødiga for relokering\n" -" -N --strip-symbol Kopiér ikke symbol \n" -" -K --keep-symbol Kopiér kun symbol \n" -" -L --localize-symbol Markere symbol som lokal\n" -" -G --keep-global-symbol Gør alle symboler lokale, forutom \n" -" -W --weaken-symbol Markere symbol som vek\n" -" --weaken Markere alle globale symboler som veka\n" -" -x --discard-all Fjern alle ikke-globale symboler\n" -" -X --discard-locals Fjern alle oversættergenererede symboler\n" -" -i --interleave Kopiér kun en af hvert byte\n" -" -b --byte Vælg ud 'e byten i hvert intervall\n" -" --gap-fill Fyll luckor mellem sektionerne med \n" -" --pad-to Fyll ud efter sidste sektionen frem til \n" -" --set-start Sætt startadressen til \n" -" {--change-start|--adjust-start} <økn>\n" -" Tilføj <økn> til startadressen\n" -" {--change-addresses|--adjust-vma} <økn>\n" -" Tilføj <økn> til LMA, VMA og startedr.\n" -" {--change-section-address|--adjust-section-vma} {=|+|-}\n" -" Ændra LMA og VMA på sektion med \n" -" --change-section-lma {=|+|-}\n" -" Ændra LMA på sektion med \n" -" --change-section-vma {=|+|-}\n" -" Ændra VMA på sektion med \n" -" {--[no-]change-warnings|--[no-]adjust-warnings}\n" -" Advar (inte/[no-]) om en sektion ikke findes\n" -" --set-section-flags =\n" -" Sætt sektion s attribut til \n" -" --add-section = Tilføj sektion i til uddatan\n" -" --rename-section =[,] Skift navn på sektion til \n" -" --change-leading-char Ændra til udformatets type af inledningstegn\n" -" --remove-leading-char Fjern inledningstegn fra globale symboler\n" -" --redefine-sym = Definere om ssymbolet med navn til \n" -" --srec-len Begrænsa længden på genererede S-poster\n" -" --srec-forceS3 Begrænsa typen af genererede S-poster til S3\n" -" --strip-symbols -N for alle symboler som listes i \n" -" --keep-symbols -K for alle symboler som listes i \n" -" --localize-symbols -L for alle symboler som listes i \n" -" --keep-global-symbols -G for alle symboler som listes i \n" -" --weaken-symbols -W for alle symboler som listes i \n" -" --alt-machine-code Brug alternativ maskinkode for uddata\n" -" -v --verbose Lista alle forændrede objektfiler\n" -" -V --version Vis programmets versionsinformation\n" -" -h --help Vis denne hjælp\n" - -#: objcopy.c:433 +#: dwarf.c:3510 #, c-format -msgid "Usage: %s in-file(s)\n" -msgstr "Brug: %s inddatafiler\n" +msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" +msgstr "" -#: objcopy.c:434 -msgid " Removes symbols and sections from files\n" -msgstr " Fjern symboler og afsnit fra filer\n" +#: dwarf.c:3548 +msgid "(start == end)" +msgstr "" -#: objcopy.c:436 -#, fuzzy -msgid "" -" -I --input-target= Assume input file is in format \n" -" -O --output-target= Create an output file in format \n" -" -F --target= Set both input and output format to \n" -" -p --preserve-dates Copy modified/access timestamps to the output\n" -" -R --remove-section= Remove section from the output\n" -" -s --strip-all Remove all symbol and relocation information\n" -" -g -S -d --strip-debug Remove all debugging symbols\n" -" --strip-unneeded Remove all symbols not needed by relocations\n" -" -N --strip-symbol= Do not copy symbol \n" -" -K --keep-symbol= Only copy symbol \n" -" -x --discard-all Remove all non-global symbols\n" -" -X --discard-locals Remove any compiler-generated symbols\n" -" -v --verbose List all object files modified\n" -" -V --version Display this program's version number\n" -" -h --help Display this output\n" -" -o Place stripped output into \n" +#: dwarf.c:3550 +msgid "(start > end)" msgstr "" -" -I --input-target Antag inddatafilens format er \n" -" -O --output-target Opret uddatafilen i formatet \n" -" -F --target Sæt både in- og udformatet til \n" -" -p --preserve-dates Kopiér ændrings/adgangtider til uddata\n" -" -R --remove-section Fjern sektion fra uddata\n" -" -s --strip-all Fjern alle symbol- og relokeringsinfo\n" -" -g -S --strip-debug Fjern alle fejlsøgningssymboler\n" -" --strip-unneeded Fjern symboler unødige for relokeringen\n" -" -N --strip-symbol Kopiér ikke symbol \n" -" -K --keep-symbol Kopiér kun symbol \n" -" -x --discard-all Fjern alle ikke-globale symboler\n" -" -X --discard-locals Fjern alle oversættergenererede symboler\n" -" -v --verbose Lista alle forændrede objektfiler\n" -" -V --version Vis programmets versionsinformation\n" -" -h --help Vis denne hjælp\n" -" -o gem den udrensede uddata i \n" -#: objcopy.c:506 +#: dwarf.c:3801 #, c-format -msgid "unrecognized section flag `%s'" -msgstr "ukendt sektionsflag \"%s\"" +msgid "The section %s contains:\n" +msgstr "Sektion %s indeholder:\n" -#: objcopy.c:507 +#: dwarf.c:4492 #, c-format -msgid "supported flags: %s" -msgstr "flag som håndteres: %s" +msgid " DW_CFA_??? (User defined call frame op: %#x)\n" +msgstr "" -#: objcopy.c:584 objcopy.c:2243 +#: dwarf.c:4494 #, c-format -msgid "cannot stat: %s: %s" -msgstr "kan ikke tage status: %s: %s" +msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" +msgstr "" -#: objcopy.c:591 objcopy.c:2261 +#: dwarf.c:4518 #, c-format -msgid "cannot open: %s: %s" -msgstr "kan ikke åbne: %s: %s" +msgid "Displaying the debug contents of section %s is not yet supported.\n" +msgstr "Visning af fejlsøgningsindeholdet i sektion %s understøttes ikke endnu.\n" -#: objcopy.c:594 objcopy.c:2265 +#: dwarf.c:4560 #, c-format -msgid "%s: fread failed" -msgstr "%s: fread mislykkedes" +msgid "%s: Error: " +msgstr "%s: Fejl: " -#: objcopy.c:667 +#: dwarf.c:4571 #, c-format -msgid "Ignoring rubbish found on line %d of %s" -msgstr "Ignorerer snavs fundet på linje %d i %s" +msgid "%s: Warning: " +msgstr "%s: Advarsel: " -#: objcopy.c:888 +#: emul_aix.c:43 #, c-format -msgid "%s: Multiple redefinition of symbol \"%s\"" -msgstr "%s: Flere omdefineringer af symbol \"%s\"" +msgid " [-g] - 32 bit small archive\n" +msgstr "" -#: objcopy.c:893 +#: emul_aix.c:44 #, c-format -msgid "%s: Symbol \"%s\" is target of more than one redefinition" -msgstr "%s: Symbol \"%s\" er mål for mere end en omdefinering" - -#: objcopy.c:945 -msgid "Unable to change endianness of input file(s)" -msgstr "Kan ikke ændre endian-type på inddatafilerne" +msgid " [-X32] - ignores 64 bit objects\n" +msgstr "" -#: objcopy.c:953 +#: emul_aix.c:45 #, c-format -msgid "copy from %s(%s) to %s(%s)\n" -msgstr "kopierer fra %s(%s) til %s(%s)\n" +msgid " [-X64] - ignores 32 bit objects\n" +msgstr "" -#: objcopy.c:977 +#: emul_aix.c:46 #, c-format -msgid "Warning: Output file cannot represent architecture %s" -msgstr "Advarsel: Uddatafilen kan ikke repræsentere arkitektur %s" +msgid " [-X32_64] - accepts 32 and 64 bit objects\n" +msgstr "" -#: objcopy.c:1004 -#, c-format -msgid "can't create section `%s': %s" -msgstr "kan ikke oprette sektion \"%s\": %s" +#: ieee.c:309 +msgid "unexpected end of debugging information" +msgstr "uventet slut på fejlsøgningsinformationen" -#: objcopy.c:1090 -#, c-format -msgid "Can't fill gap after %s: %s" -msgstr "Kan ikke fylde hullet efter %s: %s" +#: ieee.c:396 +msgid "invalid number" +msgstr "ugyldigt tal" -#: objcopy.c:1115 -#, c-format -msgid "Can't add padding to %s: %s" -msgstr "Kan ikke fylde ud efter %s: %s" +#: ieee.c:449 +msgid "invalid string length" +msgstr "ugyldig strenglængde" -#: objcopy.c:1254 -#, c-format -msgid "%s: error copying private BFD data: %s" -msgstr "%s: fejl ved kopiering af privat BFD-data: %s" +#: ieee.c:504 ieee.c:545 +msgid "expression stack overflow" +msgstr "overløb i udtryksstakken" -#: objcopy.c:1267 -msgid "unknown alternate machine code, ignored" -msgstr "ukendt alternativ maskinkode, ignoreret" +#: ieee.c:524 +msgid "unsupported IEEE expression operator" +msgstr "IEEE-udtryksoperator som ikke understøttes" -#: objcopy.c:1300 objcopy.c:1330 -#, c-format -msgid "cannot mkdir %s for archive copying (error: %s)" -msgstr "kan ikke oprette katalog %s for arkivkopiering (fejl: %s)" +#: ieee.c:539 +msgid "unknown section" +msgstr "ukendt sektion" -#: objcopy.c:1497 -#, c-format -msgid "Multiple renames of section %s" -msgstr "Flere navneskift på sektion %s" +#: ieee.c:560 +msgid "expression stack underflow" +msgstr "underløb i udtryksstakken" -#: objcopy.c:1581 -msgid "making" -msgstr "fremstilling" +#: ieee.c:574 +msgid "expression stack mismatch" +msgstr "fejlbalanceret udtryksstak" -#: objcopy.c:1590 -msgid "size" -msgstr "størrelse" +#: ieee.c:611 +msgid "unknown builtin type" +msgstr "ukendt indbygget type" -#: objcopy.c:1604 -msgid "vma" -msgstr "vma" +#: ieee.c:756 +msgid "BCD float type not supported" +msgstr "flydendetalstype BCD understøttes ikke" -#: objcopy.c:1630 -msgid "alignment" -msgstr "justering" +#: ieee.c:893 +msgid "unexpected number" +msgstr "uventet tal" -#: objcopy.c:1638 -msgid "flags" -msgstr "flag" +#: ieee.c:900 +msgid "unexpected record type" +msgstr "uventet posttype" -#: objcopy.c:1655 -msgid "private data" -msgstr "privat data" +#: ieee.c:933 +msgid "blocks left on stack at end" +msgstr "block stadig på stakken ved slutningen" -#: objcopy.c:1663 -#, c-format -msgid "%s: section `%s': error in %s: %s" -msgstr "%s: sektion \"%s\": fejl på %s: %s" +#: ieee.c:1196 +msgid "unknown BB type" +msgstr "ukendt BB-type" -#: objcopy.c:1946 -#, c-format -msgid "%s: can't create debugging section: %s" -msgstr "%s: kan ikke oprette fejlsøgningssektion: %s" +#: ieee.c:1205 +msgid "stack overflow" +msgstr "overløb i stakken" -#: objcopy.c:1961 -#, c-format -msgid "%s: can't set debugging section contents: %s" -msgstr "%s: kan ikke sætte indeholdet i fejlsøgningssektionen: %s" +#: ieee.c:1228 +msgid "stack underflow" +msgstr "underløb i stakken" -#: objcopy.c:1970 -#, c-format -msgid "%s: don't know how to write debugging information for %s" -msgstr "%s: véd ikke hvordan man skriver fejlsøgningsinformation for %s" +#: ieee.c:1340 ieee.c:1410 ieee.c:2107 +msgid "illegal variable index" +msgstr "ikke tilladt variabelindeks" -#: objcopy.c:2078 -#, c-format -msgid "%s: cannot stat: %s" -msgstr "%s: kan ikke tage status: %s" +#: ieee.c:1388 +msgid "illegal type index" +msgstr "ikke tilladt typeindeks" -#: objcopy.c:2129 -msgid "byte number must be non-negative" -msgstr "byte-nr må ikke være negativt" +#: ieee.c:1398 ieee.c:1435 +msgid "unknown TY code" +msgstr "ukendt TY-kode" -#: objcopy.c:2139 -msgid "interleave must be positive" -msgstr "intervalstørrelsen skal være positiv" +#: ieee.c:1417 +msgid "undefined variable in TY" +msgstr "udefineret variabel i TY" -#: objcopy.c:2159 objcopy.c:2167 -#, c-format -msgid "%s both copied and removed" -msgstr "%s både kopieret og fjernet" +#. Pascal file name. FIXME. +#: ieee.c:1828 +msgid "Pascal file name not supported" +msgstr "Pascal-filnavn understøttes ikke" -#: objcopy.c:2240 objcopy.c:2310 objcopy.c:2410 objcopy.c:2437 objcopy.c:2461 -#: objcopy.c:2465 objcopy.c:2485 -#, c-format -msgid "bad format for %s" -msgstr "fejlagtigt format på %s" +# BUGG: qualif>i \n" -msgstr "Brug: %s \n" +#: ieee.c:2600 +msgid "unrecognized C++ object spec" +msgstr "ukendt C++-objektspecifikation" -#: objdump.c:166 -msgid " Display information from object .\n" -msgstr " Vis information fra .\n" +#: ieee.c:2636 +msgid "unsupported C++ object type" +msgstr "uunderstøttet C++-objekttype" -#: objdump.c:167 -msgid " At least one of the following switches must be given:\n" -msgstr " Mindst et af følgende flag skal angives:\n" +#: ieee.c:2646 +msgid "C++ base class not defined" +msgstr "udefineret C++-baseklasse" -#: objdump.c:168 -#, fuzzy -msgid "" -" -a, --archive-headers Display archive header information\n" -" -f, --file-headers Display the contents of the overall file header\n" -" -p, --private-headers Display object format specific file header contents\n" -" -h, --[section-]headers Display the contents of the section headers\n" -" -x, --all-headers Display the contents of all headers\n" -" -d, --disassemble Display assembler contents of executable sections\n" -" -D, --disassemble-all Display assembler contents of all sections\n" -" -S, --source Intermix source code with disassembly\n" -" -s, --full-contents Display the full contents of all sections requested\n" -" -g, --debugging Display debug information in object file\n" -" -G, --stabs Display (in raw form) any STABS info in the file\n" -" -t, --syms Display the contents of the symbol table(s)\n" -" -T, --dynamic-syms Display the contents of the dynamic symbol table\n" -" -r, --reloc Display the relocation entries in the file\n" -" -R, --dynamic-reloc Display the dynamic relocation entries in the file\n" -" -v, --version Display this program's version number\n" -" -i, --info List object formats and architectures supported\n" -" -H, --help Display this information\n" -msgstr "" -" -a, --archive-headers Vis information fra arkivhoveden\n" -" -f, --file-headers Vis indeholdet i det overgripende filhovedet\n" -" -p, --private-headers Vis indeholdet i objektformatspecifikke filhoveden\n" -" -h, --[section-]headers Vis indeholdet i sektionshoveden\n" -" -x, --all-headers Vis indeholdet i alle hoveden\n" -" -d, --disassemble Vis disassemblering af exekverbara sektioner\n" -" -D, --disassemble-all Vis disassemblering af alle sektioner\n" -" -S, --source Varva kildekode med disassemblering\n" -" -s, --full-contents Vis hele indeholdet i alle udvalgte sektioner\n" -" -g, --debugging Vis fejlsøgningsinformation fra objektfilen\n" -" -G, --stabs Vis (ubehandlet) eventuell STABS-info fra filen\n" -" -t, --syms Vis indeholdet i symboltabellen(erna)\n" -" -T, --dynamic-syms Vis indeholdet i tabellen med dynamiske symboler\n" -" -r, --reloc Vis relokeringsposterne i filen\n" -" -R, --dynamic-reloc Vis de dynamiske relokeringsposterne i filen\n" -" -V, --version Vis programmets versionsinformation\n" -" -i, --info Lista de objektformat og arkitekturer som håndteres\n" -" -H, --help Vis denne hjælp\n" +#: ieee.c:2658 ieee.c:2763 +msgid "C++ object has no fields" +msgstr "C++-objektet har ingen felter" -#: objdump.c:190 -msgid "" -"\n" -" The following switches are optional:\n" -msgstr "" -"\n" -" Følgende flag er frivillige:\n" +# FIXME: beholdare?? +#: ieee.c:2677 +msgid "C++ base class not found in container" +msgstr "Fandt ikke C++-baseklassen i beholderen" -#: objdump.c:191 -msgid "" -" -b, --target=BFDNAME Specify the target object format as BFDNAME\n" -" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n" -" -j, --section=NAME Only display information for section NAME\n" -" -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n" -" -EB --endian=big Assume big endian format when disassembling\n" -" -EL --endian=little Assume little endian format when disassembling\n" -" --file-start-context Include context from start of file (with -S)\n" -" -l, --line-numbers Include line numbers and filenames in output\n" -" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" -" The STYLE, if specified, can be `auto', 'gnu',\n" -" 'lucid', 'arm', 'hp', 'edg', or 'gnu-new-abi'\n" -" -w, --wide Format output for more than 80 columns\n" -" -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n" -" --start-address=ADDR Only process data whoes address is >= ADDR\n" -" --stop-address=ADDR Only process data whoes address is <= ADDR\n" -" --prefix-addresses Print complete address alongside disassembly\n" -" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" -" --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" -"\n" -msgstr "" -" -b, --target=BFDNAVN Specificér at målobjektets format er BFDNAVN\n" -" -m, --architecture=MASKINE Specificér at målarkitekturen er MASKINE\n" -" -j, --section=NAVN Vis kun information om sektion NAVN\n" -" -M, --disassembler-options=FLG Videresend FLG til disassembleren\n" -" -EB --endian=big Antag big endian-format ved disassemblering\n" -" -EL --endian=little Antag little endian-format ved disassemblering\n" -" --file-start-context Medtag omgivelsen i begyndelsen af filen (med -S)\n" -" -l, --line-numbers Medtag linjenumre og filnavne i uddata\n" -" -C, --demangle[=STIL] Afkod kodede symbolnavne\n" -" STIL, hvis givet, kan være: \"auto\", \"gnu\",\n" -" \"lucid\", \"arm\", \"hp\", \"edg\", \"gnu-new-abi\"\n" -" -w, --wide Tilpas uddata til mere end 80 kolonner\n" -" -z, --disassemble-zeroes Hop ikke over blokke af nuller ved\n" -" disassemblering\n" -" --start-address=ADR Behandl kun data på adresser >= ADR\n" -" --stop-address=ADR Behandl kun data på adresser <= ADR\n" -" --prefix-addresses Vis fuldstændige adresser sammen med disassemblering.\n" -" --[no-]show-raw-insn Vis hex.-kode sammen med disassemblering\n" -" --adjust-vma=OFFSET Tilføj OFFSET til alle viste sektionsadresser\n" -"\n" +# FIXME: beholdare?? +#: ieee.c:2784 +msgid "C++ data member not found in container" +msgstr "Fandt ikke C++-datamedlemmet i beholderen" -#: objdump.c:358 -msgid "Sections:\n" -msgstr "Sektioner:\n" +#: ieee.c:2825 ieee.c:2975 +msgid "unknown C++ visibility" +msgstr "ukendt C++-synlighed" -#: objdump.c:361 objdump.c:365 -msgid "Idx Name Size VMA LMA File off Algn" -msgstr "Idx Navn Størrelse VMA LMA Filoffs Just" +#: ieee.c:2859 +msgid "bad C++ field bit pos or size" +msgstr "C++-feltets bit-position eller bit-størrelse er fejlagtig" -#: objdump.c:367 -msgid "Idx Name Size VMA LMA File off Algn" -msgstr "Idx Navn Størrelse VMA LMA Filoffs Just" +#: ieee.c:2951 +msgid "bad type for C++ method function" +msgstr "fejlagtig type på C++-metodefunktion" -#: objdump.c:371 -msgid " Flags" -msgstr " Flag" +#: ieee.c:2961 +msgid "no type information for C++ method function" +msgstr "ingen typeinformation om C++-metodefunktion" -#: objdump.c:419 -#, c-format -msgid "%s: not a dynamic object" -msgstr "%s: ikke et dynamisk objekt" +#: ieee.c:3000 +msgid "C++ static virtual method" +msgstr "statisk virtuel C++-metode" -#: objdump.c:433 -#, c-format -msgid "%s: No dynamic symbols" -msgstr "%s: Ingen dynamiske symboler" +#: ieee.c:3095 +msgid "unrecognized C++ object overhead spec" +msgstr "ukendt C++-objektoversigtsspec" -#: objdump.c:1114 -msgid "Out of virtual memory" -msgstr "Slut på virtuel hukommelse" +#: ieee.c:3134 +msgid "undefined C++ vtable" +msgstr "udefineret C++-v-tabel" -#: objdump.c:1543 -#, c-format -msgid "Can't use supplied machine %s" -msgstr "Kan ikke bruge den opgivne maskine %s" +#: ieee.c:3203 +msgid "C++ default values not in a function" +msgstr "C++-standardværdier ikke inde i en funktion" -#: objdump.c:1561 -#, c-format -msgid "Can't disassemble for architecture %s\n" -msgstr "Kan ikke disassemblere for arkitektur %s\n" +#: ieee.c:3243 +msgid "unrecognized C++ default type" +msgstr "ukendt C++-standardtype" -#: objdump.c:1643 -#, c-format -msgid "Disassembly of section %s:\n" -msgstr "Disassemblering af sektion %s:\n" +#: ieee.c:3274 +msgid "reference parameter is not a pointer" +msgstr "referenceparameteren er ikke en peger" -#: objdump.c:1818 -#, c-format -msgid "" -"No %s section present\n" -"\n" -msgstr "" -"Der findes ingen %s-sektion\n" -"\n" +#: ieee.c:3357 +msgid "unrecognized C++ reference type" +msgstr "ukendt C++-referencetype" -#: objdump.c:1825 -#, c-format -msgid "%s has no %s section" -msgstr "%s har ingen %s-sektion" +#: ieee.c:3439 +msgid "C++ reference not found" +msgstr "fandt ikke C++-referencen" -#: objdump.c:1839 -#, c-format -msgid "Reading %s section of %s failed: %s" -msgstr "Læsning af %s-sektionen i %s mislykkedes: %s" +#: ieee.c:3447 +msgid "C++ reference is not pointer" +msgstr "C++-referencen er ingen peger" -#: objdump.c:1851 -#, c-format -msgid "Reading %s section of %s failed: %s\n" -msgstr "Læsning af %s-sektionen i %s mislykkedes: %s\n" +#: ieee.c:3473 ieee.c:3481 +msgid "missing required ASN" +msgstr "mangler nødvendig ASN" -#: objdump.c:1894 -#, c-format -msgid "" -"Contents of %s section:\n" -"\n" -msgstr "" -"Indhold i %s-sektionen:\n" -"\n" +#: ieee.c:3508 ieee.c:3516 +msgid "missing required ATN65" +msgstr "mangler nødvendig ATN65" -#: objdump.c:1994 -#, c-format -msgid "architecture: %s, " -msgstr "arkitektur: %s, " +#: ieee.c:3530 +msgid "bad ATN65 record" +msgstr "fejlagtig ATN65-post" -#: objdump.c:1997 +#: ieee.c:4158 #, c-format -msgid "flags 0x%08x:\n" -msgstr "flag 0x%08x:\n" - -#: objdump.c:2010 -msgid "" -"\n" -"start address 0x" -msgstr "" -"\n" -"startadresse 0x" +msgid "IEEE numeric overflow: 0x" +msgstr "IEEE numerisk overløb: 0x" -#: objdump.c:2042 +#: ieee.c:4202 #, c-format -msgid "" -"\n" -"%s: file format %s\n" -msgstr "" -"\n" -"%s: filformat %s\n" +msgid "IEEE string length overflow: %u\n" +msgstr "IEEE overløb i strenglængden: %u\n" -#: objdump.c:2084 +#: ieee.c:5199 #, c-format -msgid "%s: printing debugging information failed" -msgstr "%s: udskrift af fejlsøgningsinformationen mislykkedes" +msgid "IEEE unsupported integer type size %u\n" +msgstr "IEEE klarer ikke heltalstyper af størrelse %u\n" -#: objdump.c:2161 +#: ieee.c:5233 #, c-format -msgid "In archive %s:\n" -msgstr "I arkiv %s:\n" +msgid "IEEE unsupported float type size %u\n" +msgstr "IEEE klarer ikke flydendetalstyper af størrelse %u\n" -#: objdump.c:2213 +#: ieee.c:5267 #, c-format -msgid "Contents of section %s:\n" -msgstr "Indhold i %s-sektionen:\n" +msgid "IEEE unsupported complex type size %u\n" +msgstr "IEEE klarer ikke komplekse typer af størrelse %u\n" -#: objdump.c:2718 -#, c-format -msgid "BFD header file version %s\n" -msgstr "BFD-hovedfil version %s\n" +#: mclex.c:241 +msgid "Duplicate symbol entered into keyword list." +msgstr "" -#: objdump.c:2807 -msgid "unrecognized -E option" -msgstr "ukendt -E-flag" +#: nlmconv.c:273 srconv.c:1822 +msgid "input and output files must be different" +msgstr "uddatafilen skal være en anden end inddatafilen" -#: objdump.c:2818 -#, c-format -msgid "unrecognized --endian type `%s'" -msgstr "ukendt --endian-type \"%s\"" +#: nlmconv.c:320 +msgid "input file named both on command line and with INPUT" +msgstr "inddatafilen nævnt både på kommandolinjen og via INPUT" -#: rdcoff.c:204 -#, c-format -msgid "parse_coff_type: Bad type code 0x%x" -msgstr "parse_coff_type: Fejlagtig typekode 0x%x" +#: nlmconv.c:329 +msgid "no input file" +msgstr "ingen inddatafil" -#: rdcoff.c:422 rdcoff.c:530 rdcoff.c:729 -#, c-format -msgid "bfd_coff_get_syment failed: %s" -msgstr "bfd_coff_get_syment mislykkedes: %s" +#: nlmconv.c:359 +msgid "no name for output file" +msgstr "intet navn på uddatafilen" -#: rdcoff.c:438 rdcoff.c:749 -#, c-format -msgid "bfd_coff_get_auxent failed: %s" -msgstr "bfd_coff_get_auxent mislykkedes: %s" +#: nlmconv.c:373 +msgid "warning: input and output formats are not compatible" +msgstr "advarsel: formaterne for ind- og uddata er ikke kompatible" -#: rdcoff.c:816 -#, c-format -msgid "%ld: .bf without preceding function" -msgstr "%ld: .bf mangler indledende funktion" +#: nlmconv.c:403 +msgid "make .bss section" +msgstr "opret .bss-sektion" -#: rdcoff.c:866 -#, c-format -msgid "%ld: unexpected .ef\n" -msgstr "%ld: uventet .ef\n" +#: nlmconv.c:413 +msgid "make .nlmsections section" +msgstr "opret .nlmsections-sektion" -#: rddbg.c:87 -#, c-format -msgid "%s: no recognized debugging information" -msgstr "%s: ingen kendt fejlsøgningsinformation" +#: nlmconv.c:441 +msgid "set .bss vma" +msgstr "sæt vma for .bss" -#: rddbg.c:410 -msgid "Last stabs entries before error:\n" -msgstr "De sidste stabs-poster inden fejlen:\n" +#: nlmconv.c:448 +msgid "set .data size" +msgstr "sæt .data-størrelse" -#: readelf.c:328 +#: nlmconv.c:628 #, c-format -msgid "%s: Error: " -msgstr "%s: Fejl: " +msgid "warning: symbol %s imported but not in import list" +msgstr "advarsel: symbol %s importeredes, men findes ikke i importlisten" -#: readelf.c:339 -#, c-format -msgid "%s: Warning: " -msgstr "%s: Advarsel: " +#: nlmconv.c:648 +msgid "set start address" +msgstr "sæt startadresse" -#: readelf.c:361 +#: nlmconv.c:697 #, c-format -msgid "Unable to seek to %x for %s\n" -msgstr "Kan ikke søge til %x for %s\n" +msgid "warning: START procedure %s not defined" +msgstr "advarsel: START-procedure %s er ikke defineret" -#: readelf.c:372 +#: nlmconv.c:699 #, c-format -msgid "Out of memory allocating %d bytes for %s\n" -msgstr "Slut på hukommelse ved allokering af %d byte for %s\n" +msgid "warning: EXIT procedure %s not defined" +msgstr "advarsel: EXIT-procedure %s er ikke defineret" -#: readelf.c:380 +#: nlmconv.c:701 #, c-format -msgid "Unable to read in %d bytes of %s\n" -msgstr "Kan ikke indlæse %d byte af %s\n" +msgid "warning: CHECK procedure %s not defined" +msgstr "advarsel: CHECK-procedure %s er ikke defineret" -#: readelf.c:433 readelf.c:591 -#, c-format -msgid "Unhandled data length: %d\n" -msgstr "Størrelse på data som ikke kan behandles: %d\n" +#: nlmconv.c:721 nlmconv.c:907 +msgid "custom section" +msgstr "tilrettelig sektion" -#: readelf.c:675 -msgid "Don't know about relocations on this machine architecture\n" -msgstr "Ved ikke hvordan man relokaliserer på denne maskinarkitektur\n" +#: nlmconv.c:741 nlmconv.c:936 +msgid "help section" +msgstr "hjælpesektion" -#: readelf.c:697 readelf.c:726 readelf.c:772 readelf.c:799 -msgid "relocs" -msgstr "relokeringer" +#: nlmconv.c:763 nlmconv.c:954 +msgid "message section" +msgstr "meddelelsesektion" -#: readelf.c:708 readelf.c:737 readelf.c:782 readelf.c:809 -msgid "out of memory parsing relocs" -msgstr "slut på hukommelse ved tolkning af relokeringer" +#: nlmconv.c:778 nlmconv.c:987 +msgid "module section" +msgstr "modulsektion" -#: readelf.c:861 -msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn + Tillæg\n" +#: nlmconv.c:797 nlmconv.c:1003 +msgid "rpc section" +msgstr "rpc-section" -#: readelf.c:863 -msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn + Tillæg\n" +#. There is no place to record this information. +#: nlmconv.c:833 +#, c-format +msgid "%s: warning: shared libraries can not have uninitialized data" +msgstr "%s: advarsel: delte biblioteker kan ikke have uinitieret data" -#: readelf.c:868 -msgid " Offset Info Type Sym. Value Symbol's Name\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn\n" +#: nlmconv.c:854 nlmconv.c:1022 +msgid "shared section" +msgstr "delt sektion" -#: readelf.c:870 -msgid " Offset Info Type Sym.Value Sym. Name\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn\n" +#: nlmconv.c:862 +msgid "warning: No version number given" +msgstr "advarsel: Intet versionsnummer givet" -#: readelf.c:878 -msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn + Tillæg\n" +#: nlmconv.c:902 nlmconv.c:931 nlmconv.c:949 nlmconv.c:998 nlmconv.c:1017 +#, c-format +msgid "%s: read: %s" +msgstr "%s: læsefejl: %s" -#: readelf.c:880 -msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn+ Tillæg\n" +#: nlmconv.c:924 +#, fuzzy +msgid "warning: FULLMAP is not supported; try ld -M" +msgstr "advarsel: MAP og FULLMAP understøttes ikke; forsøg med ld -M" -#: readelf.c:885 -msgid " Offset Info Type Symbol's Value Symbol's Name\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn\n" +#: nlmconv.c:1100 +#, c-format +msgid "Usage: %s [option(s)] [in-file [out-file]]\n" +msgstr "Brug: %s [flag] [inddatafil [uddatafil]]\n" -#: readelf.c:887 -msgid " Offset Info Type Sym. Value Sym. Name\n" -msgstr " Offset Info Type Symbolværdi Symbolnavn\n" +#: nlmconv.c:1101 +#, c-format +msgid " Convert an object file into a NetWare Loadable Module\n" +msgstr " Konvertér en objektfil til et indlæsningsbart NetWare-modul\n" -#: readelf.c:1134 readelf.c:1136 readelf.c:1184 readelf.c:1186 readelf.c:1195 -#: readelf.c:1197 +#: nlmconv.c:1102 #, c-format -msgid "unrecognized: %-7lx" -msgstr "ukendt: %-7lx" +msgid "" +" The options are:\n" +" -I --input-target= Set the input binary file format\n" +" -O --output-target= Set the output binary file format\n" +" -T --header-file= Read for NLM header information\n" +" -l --linker= Use for any linking\n" +" -d --debug Display on stderr the linker command line\n" +" @ Read options from .\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +msgstr "" -#: readelf.c:1158 +#: nlmconv.c:1143 #, c-format -msgid "" -msgstr "" +msgid "support not compiled in for %s" +msgstr "ikke oversat med understøttelse for %s" + +#: nlmconv.c:1180 +msgid "make section" +msgstr "opret sektion" + +#: nlmconv.c:1194 +msgid "set section size" +msgstr "sæt sektionsstørrelse" + +#: nlmconv.c:1200 +msgid "set section alignment" +msgstr "" + +#: nlmconv.c:1204 +msgid "set section flags" +msgstr "sæt sektionsflag" + +#: nlmconv.c:1215 +msgid "set .nlmsections size" +msgstr "sæt .nlmsektions størrelse" + +#: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318 +msgid "set .nlmsection contents" +msgstr "sæt .nlmsektions indhold" + +#: nlmconv.c:1795 +msgid "stub section sizes" +msgstr "sektionsstørrelser for stub" -#: readelf.c:1423 +#: nlmconv.c:1842 +msgid "writing stub" +msgstr "skriver stub" + +#: nlmconv.c:1926 #, c-format -msgid "Processor Specific: %lx" -msgstr "processorspecifik: %lx" +msgid "unresolved PC relative reloc against %s" +msgstr "uløst PC-relativ relokering mod %s" -#: readelf.c:1442 +#: nlmconv.c:1990 #, c-format -msgid "Operating System specific: %lx" -msgstr "Operativsystemsspecifik: %lx" +msgid "overflow when adjusting relocation against %s" +msgstr "overløb ved justeringen af relokering mod %s" -#: readelf.c:1445 readelf.c:2086 +#: nlmconv.c:2117 #, c-format -msgid ": %lx" -msgstr ": %lx" +msgid "%s: execution of %s failed: " +msgstr "%s: udførsel af %s mislykkedes: " -#: readelf.c:1459 -msgid "NONE (None)" -msgstr "NONE (ingen)" +#: nlmconv.c:2132 +#, c-format +msgid "Execution of %s failed" +msgstr "Eksekvering af %s mislykkedes" -#: readelf.c:1460 -msgid "REL (Relocatable file)" -msgstr "REL (relokérbar fil)" +#: nm.c:217 size.c:78 strings.c:647 +#, c-format +msgid "Usage: %s [option(s)] [file(s)]\n" +msgstr "Brug: %s [flag] [inddatafiler]\n" -#: readelf.c:1461 -msgid "EXEC (Executable file)" -msgstr "EXEC (eksekverbar fil)" +#: nm.c:218 +#, c-format +msgid " List symbols in [file(s)] (a.out by default).\n" +msgstr " List symboler i FILerne (eller a.out).\n" -#: readelf.c:1462 -msgid "DYN (Shared object file)" -msgstr "DYN (delt objektfil)" +#: nm.c:219 +#, fuzzy, c-format +msgid "" +" The options are:\n" +" -a, --debug-syms Display debugger-only symbols\n" +" -A, --print-file-name Print name of the input file before every symbol\n" +" -B Same as --format=bsd\n" +" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n" +" The STYLE, if specified, can be `auto' (the default),\n" +" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" +" --no-demangle Do not demangle low-level symbol names\n" +" -D, --dynamic Display dynamic symbols instead of normal symbols\n" +" --defined-only Display only defined symbols\n" +" -e (ignored)\n" +" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n" +" `sysv' or `posix'. The default is `bsd'\n" +" -g, --extern-only Display only external symbols\n" +" -l, --line-numbers Use debugging information to find a filename and\n" +" line number for each symbol\n" +" -n, --numeric-sort Sort symbols numerically by address\n" +" -o Same as -A\n" +" -p, --no-sort Do not sort the symbols\n" +" -P, --portability Same as --format=posix\n" +" -r, --reverse-sort Reverse the sense of the sort\n" +" -S, --print-size Print size of defined symbols\n" +" -s, --print-armap Include index for symbols from archive members\n" +" --size-sort Sort symbols by size\n" +" --special-syms Include special symbols in the output\n" +" --synthetic Display synthetic symbols as well\n" +" -t, --radix=RADIX Use RADIX for printing symbol values\n" +" --target=BFDNAME Specify the target object format as BFDNAME\n" +" -u, --undefined-only Display only undefined symbols\n" +" -X 32_64 (ignored)\n" +" @FILE Read options from FILE\n" +" -h, --help Display this information\n" +" -V, --version Display this program's version number\n" +"\n" +msgstr "" +"\n" +" -a, --debug-syms Vis kun fejlsøgningssymboler\n" +" -A, --print-file-name Skriv navnet på inddatafilen for hvert symbol\n" +" -B Samme som --format=bsd\n" +" -C, --demangle[=STIL] Afkod lavniveausymbolnavn til brugerniveaunavn\n" +" STIL kan være \"auto\" (det forvalgte), \"gnu\",\n" +" \"lucid\", \"arm\", \"hp\", \"edg\" eller \"gnu-new-abi\"\n" +" --no-demangle Afkod ikke lavniveausymbolnavn\n" +" -D, --dynamic Vis dynamiske symboler i stedet for normale symboler\n" +" --defined-only Vis kun definerede symboler\n" +" -e (ignoreres)\n" +" -f, --format=FORMAT Brug FORMAT som uddataformat. FORMAT kan være\n" +" \"bsd\", \"sysv\" eller \"posix\". Forvalet er \"bsd\"\n" +" -g, --extern-only Vis kun externe symboler\n" +" -h, --help Vis denne hjælpen\n" +" -l, --line-numbers Brug fejlsøgningsinformationen til at slå op\n" +" filnavn og linjenummer for hvert symbol\n" +" -n, --numeric-sort Sortere symboler numerisk efter adress\n" +" -o Samma som -A\n" +" -p, --no-sort Sortere ikke symbolerne\n" +" -P, --portability Samme som --format=posix\n" +" -r, --reverse-sort Sortere åt andre hållet\n" +" -s, --print-armap Ta med indeks for symboler i arkivmedlemmer\n" +" --size-sort Sortere symboler efter størrelse\n" +" -t, --radix=BAS Skriv tal i talbasen BAS\n" +" --target=BFD-NAVN Specificere målobjektets format som BFD-NAVN\n" +" -u, --undefined-only Vis kun udefinerede symboler\n" +" -V, --version Vis programmets versionsinformation\n" +" -X 32_64 (ignoreres)\n" +" @ Læs valgmuligheder fra \n" +"\n" -#: readelf.c:1463 -msgid "CORE (Core file)" -msgstr "CORE (hukommelsesfil)" +#: nm.c:284 +#, c-format +msgid "%s: invalid radix" +msgstr "%s: ugyldig talbase" -#: readelf.c:1467 +#: nm.c:308 #, c-format -msgid "Processor Specific: (%x)" -msgstr "processorspecifik: (%x)" +msgid "%s: invalid output format" +msgstr "%s: ugyldigt uddataformat" -#: readelf.c:1469 +#: nm.c:329 readelf.c:6971 readelf.c:7009 #, c-format -msgid "OS Specific: (%x)" -msgstr "OS-specifikt: (%x)" +msgid ": %d" +msgstr ": %d" -#: readelf.c:1471 readelf.c:1573 readelf.c:2238 +#: nm.c:331 readelf.c:6974 readelf.c:7021 #, c-format -msgid ": %x" -msgstr ": %x" +msgid ": %d" +msgstr ": %d" -#: readelf.c:1484 -msgid "None" -msgstr "Ingen" +#: nm.c:333 readelf.c:6976 readelf.c:7024 +#, c-format +msgid ": %d" +msgstr ": %d" -#: readelf.c:2278 -msgid "Usage: readelf elf-file(s)\n" -msgstr "Brug: readelf elf-filer\n" +#: nm.c:373 +#, c-format +msgid "" +"\n" +"Archive index:\n" +msgstr "" +"\n" +"Arkivindeks:\n" -#: readelf.c:2279 -msgid " Display information about the contents of ELF format files\n" +#: nm.c:1233 +#, c-format +msgid "" +"\n" +"\n" +"Undefined symbols from %s:\n" +"\n" msgstr "" +"\n" +"\n" +"Udefinerede symboler fra %s:\n" +"\n" -#: readelf.c:2280 +#: nm.c:1235 +#, c-format msgid "" -" 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" -" --segments An alias for --program-headers\n" -" -S --section-headers Display the sections' header\n" -" --sections An alias for --section-headers\n" -" -e --headers Equivalent to: -h -l -S\n" -" -s --syms Display the symbol table\n" -" --symbols An alias for --syms\n" -" -n --notes Display the core notes (if present)\n" -" -r --relocs Display the relocations (if present)\n" -" -u --unwind Display the unwind info (if present)\n" -" -d --dynamic Display the dynamic segment (if present)\n" -" -V --version-info Display the version sections (if present)\n" -" -A --arch-specific Display architecture specific information (if any).\n" -" -D --use-dynamic Use the dynamic section info when displaying symbols\n" -" -x --hex-dump= Dump the contents of section \n" -" -w --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]\n" -" Display the contents of DWARF2 debug sections\n" +"\n" +"\n" +"Symbols from %s:\n" +"\n" msgstr "" +"\n" +"\n" +"Symboler fra %s:\n" +"\n" -#: readelf.c:2301 +#: nm.c:1237 nm.c:1288 +#, c-format msgid "" -" -i --instruction-dump=\n" -" Disassemble the contents of section \n" +"Name Value Class Type Size Line Section\n" +"\n" msgstr "" -" -i --instruction-dump=\n" -" Disassemblér indeholdet i sektion \n" +"Navn Værdi Klasse Type Størr. Linje Sektion\n" +"\n" -#: readelf.c:2305 +#: nm.c:1240 nm.c:1291 +#, c-format msgid "" -" -I --histogram Display histogram of bucket list lengths\n" -" -W --wide Allow output width to exceed 80 characters\n" -" -H --help Display this information\n" -" -v --version Display the version number of readelf\n" +"Name Value Class Type Size Line Section\n" +"\n" msgstr "" +"Navn Værdi Klasse Type Størr. Linje Sektion\n" +"\n" -#: readelf.c:2327 -msgid "Out of memory allocating dump request table." -msgstr "Slut på hukommelse ved allokering af tabel for ønskede udskrifter." +#: nm.c:1284 +#, c-format +msgid "" +"\n" +"\n" +"Undefined symbols from %s[%s]:\n" +"\n" +msgstr "" +"\n" +"\n" +"Udefinerede symboler fra %s[%s]:\n" +"\n" -#: readelf.c:2491 +#: nm.c:1286 #, c-format -msgid "Unrecognized debug option '%s'\n" -msgstr "Ukendt fejlsøgningsargument \"%s\"\n" +msgid "" +"\n" +"\n" +"Symbols from %s[%s]:\n" +"\n" +msgstr "" +"\n" +"\n" +"Symboler fra %s[%s]:\n" +"\n" + +#: nm.c:1378 +#, c-format +msgid "Print width has not been initialized (%d)" +msgstr "" + +#: nm.c:1603 +msgid "Only -X 32_64 is supported" +msgstr "Kun -X 32_64 understøttes" + +#: nm.c:1623 +msgid "Using the --size-sort and --undefined-only options together" +msgstr "" + +#: nm.c:1624 +msgid "will produce no output, since undefined symbols have no size." +msgstr "" + +#: nm.c:1652 +#, c-format +msgid "data size %ld" +msgstr "datastørrelse %ld" + +#: objcopy.c:424 srconv.c:1730 +#, c-format +msgid "Usage: %s [option(s)] in-file [out-file]\n" +msgstr "Brug: %s [flag] inddatafil [uddatafil]\n" + +#: objcopy.c:425 +#, c-format +msgid " Copies a binary file, possibly transforming it in the process\n" +msgstr "" + +#: objcopy.c:426 objcopy.c:522 +#, c-format +msgid " The options are:\n" +msgstr " Flagene er:\n" + +#: objcopy.c:427 +#, c-format +msgid "" +" -I --input-target Assume input file is in format \n" +" -O --output-target Create an output file in format \n" +" -B --binary-architecture Set arch of output file, when input is binary\n" +" -F --target Set both input and output format to \n" +" --debugging Convert debugging information, if possible\n" +" -p --preserve-dates Copy modified/access timestamps to the output\n" +" -j --only-section Only copy section into the output\n" +" --add-gnu-debuglink= Add section .gnu_debuglink linking to \n" +" -R --remove-section Remove section from the output\n" +" -S --strip-all Remove all symbol and relocation information\n" +" -g --strip-debug Remove all debugging symbols & sections\n" +" --strip-unneeded Remove all symbols not needed by relocations\n" +" -N --strip-symbol Do not copy symbol \n" +" --strip-unneeded-symbol \n" +" Do not copy symbol 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 Do not strip symbol \n" +" --keep-file-symbols Do not strip file symbol(s)\n" +" --localize-hidden Turn all ELF hidden symbols into locals\n" +" -L --localize-symbol Force symbol to be marked as a local\n" +" --globalize-symbol Force symbol to be marked as a global\n" +" -G --keep-global-symbol Localize all symbols except \n" +" -W --weaken-symbol Force symbol to be marked as a weak\n" +" --weaken Force all global symbols to be marked as weak\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" +" -i --interleave Only copy one out of every bytes\n" +" -b --byte Select byte in every interleaved block\n" +" --gap-fill Fill gaps between sections with \n" +" --pad-to Pad the last section up to address \n" +" --set-start Set the start address to \n" +" {--change-start|--adjust-start} \n" +" Add to the start address\n" +" {--change-addresses|--adjust-vma} \n" +" Add to LMA, VMA and start addresses\n" +" {--change-section-address|--adjust-section-vma} {=|+|-}\n" +" Change LMA and VMA of section by \n" +" --change-section-lma {=|+|-}\n" +" Change the LMA of section by \n" +" --change-section-vma {=|+|-}\n" +" Change the VMA of section by \n" +" {--[no-]change-warnings|--[no-]adjust-warnings}\n" +" Warn if a named section does not exist\n" +" --set-section-flags =\n" +" Set section 's properties to \n" +" --add-section = Add section found in to output\n" +" --rename-section =[,] Rename section to \n" +" --change-leading-char Force output format's leading character style\n" +" --remove-leading-char Remove leading character from global symbols\n" +" --reverse-bytes= Reverse bytes at a time, in output sections with content\n" +" --redefine-sym = Redefine symbol name to \n" +" --redefine-syms --redefine-sym for all symbol pairs \n" +" listed in \n" +" --srec-len Restrict the length of generated Srecords\n" +" --srec-forceS3 Restrict the type of generated Srecords to S3\n" +" --strip-symbols -N for all symbols listed in \n" +" --strip-unneeded-symbols \n" +" --strip-unneeded-symbol for all symbols listed\n" +" in \n" +" --keep-symbols -K for all symbols listed in \n" +" --localize-symbols -L for all symbols listed in \n" +" --globalize-symbols --globalize-symbol for all in \n" +" --keep-global-symbols -G for all symbols listed in \n" +" --weaken-symbols -W for all symbols listed in \n" +" --alt-machine-code Use the target's '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" +" --impure Mark the output file as impure\n" +" --prefix-symbols Add to start of every symbol name\n" +" --prefix-sections Add to start of every section name\n" +" --prefix-alloc-sections \n" +" Add to start of every allocatable\n" +" section name\n" +" -v --verbose List all object files modified\n" +" @ Read options from \n" +" -V --version Display this program's version number\n" +" -h --help Display this output\n" +" --info List object formats & architectures supported\n" +msgstr "" + +#: objcopy.c:520 +#, c-format +msgid "Usage: %s in-file(s)\n" +msgstr "Brug: %s inddatafiler\n" + +#: objcopy.c:521 +#, c-format +msgid " Removes symbols and sections from files\n" +msgstr " Fjern symboler og afsnit fra filer\n" + +#: objcopy.c:523 +#, fuzzy, c-format +msgid "" +" -I --input-target= Assume input file is in format \n" +" -O --output-target= Create an output file in format \n" +" -F --target= Set both input and output format to \n" +" -p --preserve-dates Copy modified/access timestamps to the output\n" +" -R --remove-section= Remove section from the output\n" +" -s --strip-all Remove all symbol and relocation information\n" +" -g -S -d --strip-debug Remove all debugging symbols & sections\n" +" --strip-unneeded Remove all symbols not needed by relocations\n" +" --only-keep-debug Strip everything but the debug information\n" +" -N --strip-symbol= Do not copy symbol \n" +" -K --keep-symbol= Do not strip symbol \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" +" -v --verbose List all object files modified\n" +" -V --version Display this program's version number\n" +" -h --help Display this output\n" +" --info List object formats & architectures supported\n" +" -o Place stripped output into \n" +msgstr "" +" -I --input-target Antag inddatafilens format er \n" +" -O --output-target Opret uddatafilen i formatet \n" +" -F --target Sæt både in- og udformatet til \n" +" -p --preserve-dates Kopiér ændrings/adgangtider til uddata\n" +" -R --remove-section Fjern sektion fra uddata\n" +" -s --strip-all Fjern alle symbol- og relokeringsinfo\n" +" -g -S --strip-debug Fjern alle fejlsøgningssymboler\n" +" --strip-unneeded Fjern symboler unødige for relokeringen\n" +" -N --strip-symbol Kopiér ikke symbol \n" +" -K --keep-symbol Kopiér kun symbol \n" +" -x --discard-all Fjern alle ikke-globale symboler\n" +" -X --discard-locals Fjern alle oversættergenererede symboler\n" +" -v --verbose Lista alle forændrede objektfiler\n" +" -V --version Vis programmets versionsinformation\n" +" -h --help Vis denne hjælp\n" +" -o gem den udrensede uddata i \n" + +#: objcopy.c:596 +#, c-format +msgid "unrecognized section flag `%s'" +msgstr "ukendt sektionsflag \"%s\"" + +#: objcopy.c:597 +#, c-format +msgid "supported flags: %s" +msgstr "flag som håndteres: %s" + +#: objcopy.c:698 +#, fuzzy, c-format +msgid "cannot open '%s': %s" +msgstr "kan ikke åbne: %s: %s" + +#: objcopy.c:701 objcopy.c:3065 +#, c-format +msgid "%s: fread failed" +msgstr "%s: fread mislykkedes" + +#: objcopy.c:774 +#, fuzzy, c-format +msgid "%s:%d: Ignoring rubbish found on this line" +msgstr "Ignorerer snavs fundet på linje %d i %s" + +#: objcopy.c:1069 +#, c-format +msgid "not stripping symbol `%s' because it is named in a relocation" +msgstr "" + +#: objcopy.c:1152 +#, c-format +msgid "%s: Multiple redefinition of symbol \"%s\"" +msgstr "%s: Flere omdefineringer af symbol \"%s\"" + +#: objcopy.c:1156 +#, c-format +msgid "%s: Symbol \"%s\" is target of more than one redefinition" +msgstr "%s: Symbol \"%s\" er mål for mere end en omdefinering" + +#: objcopy.c:1184 +#, c-format +msgid "couldn't open symbol redefinition file %s (error: %s)" +msgstr "" + +#: objcopy.c:1262 +#, c-format +msgid "%s:%d: garbage found at end of line" +msgstr "" + +#: objcopy.c:1265 +#, c-format +msgid "%s:%d: missing new symbol name" +msgstr "" + +#: objcopy.c:1275 +#, c-format +msgid "%s:%d: premature end of file" +msgstr "" + +#: objcopy.c:1301 +#, fuzzy, c-format +msgid "stat returns negative size for `%s'" +msgstr "stat returnerer negativ størrelse på %s" + +#: objcopy.c:1313 +#, c-format +msgid "copy from `%s' [unknown] to `%s' [unknown]\n" +msgstr "" + +#: objcopy.c:1369 +msgid "Unable to change endianness of input file(s)" +msgstr "Kan ikke ændre endian-type på inddatafilerne" + +#: objcopy.c:1378 +#, fuzzy, c-format +msgid "copy from `%s' [%s] to `%s' [%s]\n" +msgstr "kopierer fra %s(%s) til %s(%s)\n" + +#: objcopy.c:1421 +#, fuzzy, c-format +msgid "Unable to recognise the format of the input file `%s'" +msgstr "Kan ikke ændre endian-type på inddatafilerne" + +#: objcopy.c:1424 +#, fuzzy, c-format +msgid "Warning: Output file cannot represent architecture `%s'" +msgstr "Advarsel: Uddatafilen kan ikke repræsentere arkitektur %s" + +#: objcopy.c:1489 +#, fuzzy, c-format +msgid "can't add section '%s'" +msgstr "kan ikke oprette sektion \"%s\": %s" + +#: objcopy.c:1498 +#, fuzzy, c-format +msgid "can't create section `%s'" +msgstr "kan ikke oprette sektion \"%s\": %s" + +#: objcopy.c:1544 +#, fuzzy, c-format +msgid "cannot create debug link section `%s'" +msgstr "%s: kan ikke oprette fejlsøgningssektion: %s" + +#: objcopy.c:1637 +#, fuzzy +msgid "Can't fill gap after section" +msgstr "Kan ikke fylde hullet efter %s: %s" + +#: objcopy.c:1661 +#, fuzzy +msgid "can't add padding" +msgstr "Kan ikke fylde ud efter %s: %s" + +#: objcopy.c:1752 +#, fuzzy, c-format +msgid "cannot fill debug link section `%s'" +msgstr "%s: kan ikke oprette fejlsøgningssektion: %s" + +#: objcopy.c:1815 +#, fuzzy +msgid "error copying private BFD data" +msgstr "%s: fejl ved kopiering af privat BFD-data: %s" + +#: objcopy.c:1826 +#, c-format +msgid "this target does not support %lu alternative machine codes" +msgstr "" + +#: objcopy.c:1830 +msgid "treating that number as an absolute e_machine value instead" +msgstr "" + +#: objcopy.c:1834 +msgid "ignoring the alternative value" +msgstr "" + +#: objcopy.c:1864 objcopy.c:1895 +#, fuzzy, c-format +msgid "cannot create tempdir for archive copying (error: %s)" +msgstr "kan ikke oprette katalog %s for arkivkopiering (fejl: %s)" + +#: objcopy.c:1957 +#, fuzzy +msgid "Unable to recognise the format of file" +msgstr "Kan ikke søge til slutningen af filen!" + +#: objcopy.c:2147 +#, c-format +msgid "Multiple renames of section %s" +msgstr "Flere navneskift på sektion %s" + +#: objcopy.c:2198 +#, fuzzy +msgid "error in private h\teader data" +msgstr "%s: fejl ved kopiering af privat BFD-data: %s" + +#: objcopy.c:2276 +msgid "failed to create output section" +msgstr "" + +#: objcopy.c:2290 +#, fuzzy +msgid "failed to set size" +msgstr "sæt sektionsstørrelse" + +#: objcopy.c:2304 +msgid "failed to set vma" +msgstr "" + +#: objcopy.c:2329 +msgid "failed to set alignment" +msgstr "" + +#: objcopy.c:2351 +#, fuzzy +msgid "failed to copy private data" +msgstr "%s: fejl ved kopiering af privat BFD-data: %s" + +#: objcopy.c:2440 +msgid "relocation count is negative" +msgstr "" + +#. User must pad the section up in order to do this. +#: objcopy.c:2501 +#, c-format +msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d" +msgstr "" + +#: objcopy.c:2685 +#, fuzzy +msgid "can't create debugging section" +msgstr "%s: kan ikke oprette fejlsøgningssektion: %s" + +#: objcopy.c:2698 +#, fuzzy +msgid "can't set debugging section contents" +msgstr "%s: kan ikke sætte indeholdet i fejlsøgningssektionen: %s" + +#: objcopy.c:2706 +#, fuzzy, c-format +msgid "don't know how to write debugging information for %s" +msgstr "%s: véd ikke hvordan man skriver fejlsøgningsinformation for %s" + +#: objcopy.c:2848 +msgid "could not create temporary file to hold stripped copy" +msgstr "" + +#: objcopy.c:2897 +msgid "byte number must be non-negative" +msgstr "byte-nr må ikke være negativt" + +#: objcopy.c:2907 +msgid "interleave must be positive" +msgstr "intervalstørrelsen skal være positiv" + +#: objcopy.c:2927 objcopy.c:2935 +#, c-format +msgid "%s both copied and removed" +msgstr "%s både kopieret og fjernet" + +#: objcopy.c:3036 objcopy.c:3110 objcopy.c:3210 objcopy.c:3241 objcopy.c:3265 +#: objcopy.c:3269 objcopy.c:3289 +#, c-format +msgid "bad format for %s" +msgstr "fejlagtigt format på %s" + +#: objcopy.c:3060 +#, c-format +msgid "cannot open: %s: %s" +msgstr "kan ikke åbne: %s: %s" + +#: objcopy.c:3179 +#, c-format +msgid "Warning: truncating gap-fill from 0x%s to 0x%x" +msgstr "Advarsel: afkorter udfyldningsværdien fra 0x%s til 0x%x" + +#: objcopy.c:3347 +#, fuzzy +msgid "unable to parse alternative machine code" +msgstr "ukendt alternativ maskinkode, ignoreret" + +#: objcopy.c:3392 +#, fuzzy +msgid "number of bytes to reverse must be positive and even" +msgstr "intervalstørrelsen skal være positiv" + +#: objcopy.c:3395 +#, c-format +msgid "Warning: ignoring previous --reverse-bytes value of %d" +msgstr "" + +#: objcopy.c:3423 +msgid "byte number must be less than interleave" +msgstr "byte-nr skal være mindre end antal byte i intervallet" + +#: objcopy.c:3453 +#, c-format +msgid "architecture %s unknown" +msgstr "arkitektur %s er ukendt" + +#: objcopy.c:3457 +msgid "Warning: input target 'binary' required for binary architecture parameter." +msgstr "Advarsel: inddata skal have formatet 'binary' for binærarkitektursparametre." + +#: objcopy.c:3458 +#, c-format +msgid " Argument %s ignored" +msgstr " Argument %s ignoreres" + +#: objcopy.c:3464 +#, c-format +msgid "warning: could not locate '%s'. System error message: %s" +msgstr "" + +#: objcopy.c:3475 +#, c-format +msgid "warning: could not create temporary file whilst copying '%s', (error: %s)" +msgstr "" + +#: objcopy.c:3502 objcopy.c:3516 +#, c-format +msgid "%s %s%c0x%s never used" +msgstr "%s %s%c0x%s bruges aldrig" + +#: objdump.c:182 +#, c-format +msgid "Usage: %s \n" +msgstr "Brug: %s \n" + +#: objdump.c:183 +#, c-format +msgid " Display information from object .\n" +msgstr " Vis information fra .\n" + +#: objdump.c:184 +#, c-format +msgid " At least one of the following switches must be given:\n" +msgstr " Mindst et af følgende flag skal angives:\n" + +#: objdump.c:185 +#, fuzzy, c-format +msgid "" +" -a, --archive-headers Display archive header information\n" +" -f, --file-headers Display the contents of the overall file header\n" +" -p, --private-headers Display object format specific file header contents\n" +" -h, --[section-]headers Display the contents of the section headers\n" +" -x, --all-headers Display the contents of all headers\n" +" -d, --disassemble Display assembler contents of executable sections\n" +" -D, --disassemble-all Display assembler contents of all sections\n" +" -S, --source Intermix source code with disassembly\n" +" -s, --full-contents Display the full contents of all sections requested\n" +" -g, --debugging Display debug information in object file\n" +" -e, --debugging-tags Display debug information using ctags style\n" +" -G, --stabs Display (in raw form) any STABS info in the file\n" +" -W, --dwarf Display DWARF info in the file\n" +" -t, --syms Display the contents of the symbol table(s)\n" +" -T, --dynamic-syms Display the contents of the dynamic symbol table\n" +" -r, --reloc Display the relocation entries in the file\n" +" -R, --dynamic-reloc Display the dynamic relocation entries in the file\n" +" @ Read options from \n" +" -v, --version Display this program's version number\n" +" -i, --info List object formats and architectures supported\n" +" -H, --help Display this information\n" +msgstr "" +" -a, --archive-headers Vis information fra arkivhoveden\n" +" -f, --file-headers Vis indeholdet i det overgripende filhovedet\n" +" -p, --private-headers Vis indeholdet i objektformatspecifikke filhoveden\n" +" -h, --[section-]headers Vis indeholdet i sektionshoveden\n" +" -x, --all-headers Vis indeholdet i alle hoveden\n" +" -d, --disassemble Vis disassemblering af exekverbara sektioner\n" +" -D, --disassemble-all Vis disassemblering af alle sektioner\n" +" -S, --source Varva kildekode med disassemblering\n" +" -s, --full-contents Vis hele indeholdet i alle udvalgte sektioner\n" +" -g, --debugging Vis fejlsøgningsinformation fra objektfilen\n" +" -G, --stabs Vis (ubehandlet) eventuell STABS-info fra filen\n" +" -t, --syms Vis indeholdet i symboltabellen(erna)\n" +" -T, --dynamic-syms Vis indeholdet i tabellen med dynamiske symboler\n" +" -r, --reloc Vis relokeringsposterne i filen\n" +" -R, --dynamic-reloc Vis de dynamiske relokeringsposterne i filen\n" +" -V, --version Vis programmets versionsinformation\n" +" -i, --info Lista de objektformat og arkitekturer som håndteres\n" +" -H, --help Vis denne hjælp\n" + +#: objdump.c:210 +#, c-format +msgid "" +"\n" +" The following switches are optional:\n" +msgstr "" +"\n" +" Følgende flag er frivillige:\n" + +#: objdump.c:211 +#, fuzzy, c-format +msgid "" +" -b, --target=BFDNAME Specify the target object format as BFDNAME\n" +" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n" +" -j, --section=NAME Only display information for section NAME\n" +" -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n" +" -EB --endian=big Assume big endian format when disassembling\n" +" -EL --endian=little Assume little endian format when disassembling\n" +" --file-start-context Include context from start of file (with -S)\n" +" -I, --include=DIR Add DIR to search list for source files\n" +" -l, --line-numbers Include line numbers and filenames in output\n" +" -F, --file-offsets Include file offsets when displaying information\n" +" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" +" The STYLE, if specified, can be `auto', `gnu',\n" +" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" +" -w, --wide Format output for more than 80 columns\n" +" -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n" +" --start-address=ADDR Only process data whose address is >= ADDR\n" +" --stop-address=ADDR Only process data whose address is <= ADDR\n" +" --prefix-addresses Print complete address alongside disassembly\n" +" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" +" --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" +" --special-syms Include special symbols in symbol dumps\n" +"\n" +msgstr "" +" -b, --target=BFDNAVN Specificér at målobjektets format er BFDNAVN\n" +" -m, --architecture=MASKINE Specificér at målarkitekturen er MASKINE\n" +" -j, --section=NAVN Vis kun information om sektion NAVN\n" +" -M, --disassembler-options=FLG Videresend FLG til disassembleren\n" +" -EB --endian=big Antag big endian-format ved disassemblering\n" +" -EL --endian=little Antag little endian-format ved disassemblering\n" +" --file-start-context Medtag omgivelsen i begyndelsen af filen (med -S)\n" +" -l, --line-numbers Medtag linjenumre og filnavne i uddata\n" +" -C, --demangle[=STIL] Afkod kodede symbolnavne\n" +" STIL, hvis givet, kan være: \"auto\", \"gnu\",\n" +" \"lucid\", \"arm\", \"hp\", \"edg\", \"gnu-new-abi\"\n" +" -w, --wide Tilpas uddata til mere end 80 kolonner\n" +" -z, --disassemble-zeroes Hop ikke over blokke af nuller ved\n" +" disassemblering\n" +" --start-address=ADR Behandl kun data på adresser >= ADR\n" +" --stop-address=ADR Behandl kun data på adresser <= ADR\n" +" --prefix-addresses Vis fuldstændige adresser sammen med disassemblering.\n" +" --[no-]show-raw-insn Vis hex.-kode sammen med disassemblering\n" +" --adjust-vma=OFFSET Tilføj OFFSET til alle viste sektionsadresser\n" +"\n" -#: readelf.c:2519 +#: objdump.c:395 #, c-format -msgid "Invalid option '-%c'\n" -msgstr "Ugyldigt flag \"-%c\"\n" - -#: readelf.c:2532 -msgid "Nothing to do.\n" -msgstr "Intet at gøre.\n" - -#: readelf.c:2545 readelf.c:2562 readelf.c:4867 -msgid "none" -msgstr "ingen" +msgid "Sections:\n" +msgstr "Sektioner:\n" -#: readelf.c:2549 readelf.c:2566 readelf.c:2594 +#: objdump.c:398 objdump.c:402 #, c-format -msgid "" -msgstr "" - -#: readelf.c:2563 -msgid "2's complement, little endian" -msgstr "2-komplement, little endian" - -#: readelf.c:2564 -msgid "2's complement, big endian" -msgstr "2-komplement, big endian" - -#: readelf.c:2591 -msgid "Standalone App" -msgstr "Selvstændig app." - -#: readelf.c:2609 -msgid "Not an ELF file - it has the wrong magic bytes at the start\n" -msgstr "Ikke en ELF-fil - den har forkerte magiske byte i begyndelsen\n" - -#: readelf.c:2617 -msgid "ELF Header:\n" -msgstr "ELF-hoved:\n" - -#: readelf.c:2618 -msgid " Magic: " -msgstr " Magi: " +msgid "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Navn Størrelse VMA LMA Filoffs Just" -#: readelf.c:2622 +#: objdump.c:404 #, c-format -msgid " Class: %s\n" -msgstr " Klasse: %s\n" +msgid "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Navn Størrelse VMA LMA Filoffs Just" -#: readelf.c:2624 +#: objdump.c:408 #, c-format -msgid " Data: %s\n" -msgstr " Data: %s\n" +msgid " Flags" +msgstr " Flag" -#: readelf.c:2626 +#: objdump.c:410 #, c-format -msgid " Version: %d %s\n" -msgstr " Version: %d %s\n" +msgid " Pg" +msgstr "" -#: readelf.c:2633 +#: objdump.c:453 #, c-format -msgid " OS/ABI: %s\n" -msgstr " OS/ABI: %s\n" +msgid "%s: not a dynamic object" +msgstr "%s: ikke et dynamisk objekt" -#: readelf.c:2635 -#, c-format -msgid " ABI Version: %d\n" -msgstr " ABI-version: %d\n" +#: objdump.c:878 objdump.c:902 +#, fuzzy, c-format +msgid " (File Offset: 0x%lx)" +msgstr " (indirekte streng, offset: 0x%lx): " -#: readelf.c:2637 +#: objdump.c:1818 #, c-format -msgid " Type: %s\n" -msgstr " Type: %s\n" +msgid "" +"\n" +"Disassembly of section %s:\n" +msgstr "" +"\n" +"Disassemblering af sektion %s:\n" -#: readelf.c:2639 +#: objdump.c:1980 #, c-format -msgid " Machine: %s\n" -msgstr " Maskine: %s\n" +msgid "Can't use supplied machine %s" +msgstr "Kan ikke bruge den opgivne maskine %s" -#: readelf.c:2641 +#: objdump.c:1999 #, c-format -msgid " Version: 0x%lx\n" -msgstr " Version: 0x%lx\n" - -#: readelf.c:2644 -msgid " Entry point address: " -msgstr " Indgangsodresse: " +msgid "Can't disassemble for architecture %s\n" +msgstr "Kan ikke disassemblere for arkitektur %s\n" -#: readelf.c:2646 +#: objdump.c:2114 +#, fuzzy, c-format msgid "" "\n" -" Start of program headers: " -msgstr "" +"Can't get contents for section '%s'.\n" +msgstr "Indhold i %s-sektionen:\n" + +#: objdump.c:2125 +#, fuzzy, c-format +msgid "" "\n" -" Start for programhoveder: " +"Can't uncompress section '%s'.\n" +msgstr "kan ikke oprette sektion \"%s\": %s" -#: readelf.c:2648 +#: objdump.c:2305 +#, c-format msgid "" -" (bytes into file)\n" -" Start of section headers: " +"No %s section present\n" +"\n" msgstr "" -" (byte inde i filen)\n" -" Start for sektionshoveder: " - -#: readelf.c:2650 -msgid " (bytes into file)\n" -msgstr " (byte inde i filen)\n" +"Der findes ingen %s-sektion\n" +"\n" -#: readelf.c:2652 +#: objdump.c:2314 #, c-format -msgid " Flags: 0x%lx%s\n" -msgstr " Flag: 0x%lx%s\n" +msgid "Reading %s section of %s failed: %s" +msgstr "Læsning af %s-sektionen i %s mislykkedes: %s" -#: readelf.c:2655 +#: objdump.c:2358 #, c-format -msgid " Size of this header: %ld (bytes)\n" -msgstr " Dette hoveds størrelse: %ld (byte)\n" +msgid "" +"Contents of %s section:\n" +"\n" +msgstr "" +"Indhold i %s-sektionen:\n" +"\n" -#: readelf.c:2657 +#: objdump.c:2489 #, c-format -msgid " Size of program headers: %ld (bytes)\n" -msgstr " Programhovedernes størrelse: %ld (byte)\n" +msgid "architecture: %s, " +msgstr "arkitektur: %s, " -#: readelf.c:2659 +#: objdump.c:2492 #, c-format -msgid " Number of program headers: %ld\n" -msgstr " Antal programhoveder: %ld\n" +msgid "flags 0x%08x:\n" +msgstr "flag 0x%08x:\n" -#: readelf.c:2661 +#: objdump.c:2506 #, c-format -msgid " Size of section headers: %ld (bytes)\n" -msgstr " Sektionshovedernes størrelse: %ld (byte)\n" +msgid "" +"\n" +"start address 0x" +msgstr "" +"\n" +"startadresse 0x" -#: readelf.c:2663 -#, c-format -msgid " Number of section headers: %ld" -msgstr " Antal sektionshoveder: %ld" +#: objdump.c:2569 +#, fuzzy, c-format +msgid "Contents of section %s:" +msgstr "Indhold i %s-sektionen:\n" -#: readelf.c:2668 -#, c-format -msgid " Section header string table index: %ld" -msgstr " Sektionshovedets strengtabelsindeks: %ld" +#: objdump.c:2571 +#, fuzzy, c-format +msgid " (Starting at file offset: 0x%lx)" +msgstr " (indirekte streng, offset: 0x%lx): " -#: readelf.c:2702 readelf.c:2738 -msgid "program headers" -msgstr "programhoveder" +#: objdump.c:2678 +#, fuzzy, c-format +msgid "no symbols\n" +msgstr "%s: ingen symboler" -#: readelf.c:2772 -msgid "" -"\n" -"There are no program headers in this file.\n" +#: objdump.c:2685 +#, c-format +msgid "no information for symbol number %ld\n" msgstr "" -"\n" -"Der findes ingen programhoveder i denne fil.\n" -#: readelf.c:2778 +#: objdump.c:2688 +#, fuzzy, c-format +msgid "could not determine the type of symbol number %ld\n" +msgstr "Kan ikke bestemme hvor mange symboler som skal læses ind\n" + +#: objdump.c:2965 #, c-format msgid "" "\n" -"Elf file type is %s\n" +"%s: file format %s\n" msgstr "" "\n" -"Elf-filtype er %s\n" +"%s: filformat %s\n" -#: readelf.c:2779 -msgid "Entry point " -msgstr "Indgangspunkt " +#: objdump.c:3023 +#, c-format +msgid "%s: printing debugging information failed" +msgstr "%s: udskrift af fejlsøgningsinformationen mislykkedes" -#: readelf.c:2781 +#: objdump.c:3123 #, c-format -msgid "" -"\n" -"There are %d program headers, starting at offset " +msgid "In archive %s:\n" +msgstr "I arkiv %s:\n" + +#: objdump.c:3238 +msgid "error: the start address should be before the end address" msgstr "" -"\n" -"Der findes %d programhoveder, med begyndelse på offset " -#: readelf.c:2792 readelf.c:3019 readelf.c:3065 readelf.c:3128 readelf.c:3195 -#: readelf.c:4229 readelf.c:4272 readelf.c:4461 readelf.c:5414 readelf.c:5428 -#: readelf.c:9659 readelf.c:9699 -msgid "Out of memory\n" -msgstr "Slut på hukommelse\n" +#: objdump.c:3243 +msgid "error: the stop address should be after the start address" +msgstr "" -# BUGG: plural-s -#: readelf.c:2810 readelf.c:2812 -msgid "" -"\n" -"Program Headers:\n" +#: objdump.c:3252 +msgid "unrecognized -E option" +msgstr "ukendt -E-flag" + +#: objdump.c:3263 +#, c-format +msgid "unrecognized --endian type `%s'" +msgstr "ukendt --endian-type \"%s\"" + +#: rclex.c:197 +msgid "invalid value specified for pragma code_page.\n" msgstr "" -"\n" -"Programhoveder:\n" -#: readelf.c:2816 -msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " Type Offset VirtAdr FysAdr FilSt HukommelseSt Flg Just\n" +#: rdcoff.c:198 +#, c-format +msgid "parse_coff_type: Bad type code 0x%x" +msgstr "parse_coff_type: Fejlagtig typekode 0x%x" -#: readelf.c:2819 -msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " Type Offset VirtAdr FysAdr FilStrl HukommelseSt Flg Just\n" +#: rdcoff.c:406 rdcoff.c:511 rdcoff.c:699 +#, c-format +msgid "bfd_coff_get_syment failed: %s" +msgstr "bfd_coff_get_syment mislykkedes: %s" -#: readelf.c:2823 -msgid " Type Offset VirtAddr PhysAddr\n" -msgstr " Type Offset VirtAdr FysAdr\n" +#: rdcoff.c:422 rdcoff.c:719 +#, c-format +msgid "bfd_coff_get_auxent failed: %s" +msgstr "bfd_coff_get_auxent mislykkedes: %s" -#: readelf.c:2825 -msgid " FileSiz MemSiz Flags Align\n" -msgstr " FilStrl HukommelseStrl Flag Just\n" +#: rdcoff.c:786 +#, c-format +msgid "%ld: .bf without preceding function" +msgstr "%ld: .bf mangler indledende funktion" -#: readelf.c:2925 -msgid "more than one dynamic segment\n" -msgstr "mere end et dynamisk segment\n" +#: rdcoff.c:836 +#, c-format +msgid "%ld: unexpected .ef\n" +msgstr "%ld: uventet .ef\n" -#: readelf.c:2933 -msgid "Unable to find program interpreter name\n" -msgstr "Kan ikke finde navnet på programtolken\n" +#: rddbg.c:88 +#, c-format +msgid "%s: no recognized debugging information" +msgstr "%s: ingen kendt fejlsøgningsinformation" -#: readelf.c:2940 +#: rddbg.c:402 #, c-format -msgid "" -"\n" -" [Requesting program interpreter: %s]" -msgstr "" -"\n" -" [Anmoder programtolkere: %s]" +msgid "Last stabs entries before error:\n" +msgstr "De sidste stabs-poster inden fejlen:\n" -#: readelf.c:2958 -msgid "" -"\n" -" Section to Segment mapping:\n" -msgstr "" -"\n" -" Sektion til segment-afbildning:\n" +#: readelf.c:312 +#, fuzzy, c-format +msgid "Unable to seek to 0x%lx for %s\n" +msgstr "Kan ikke søge til %x for %s\n" -#: readelf.c:2959 -msgid " Segment Sections...\n" -msgstr " Segmentsektioner...\n" +#: readelf.c:327 +#, fuzzy, c-format +msgid "Out of memory allocating 0x%lx bytes for %s\n" +msgstr "Slut på hukommelse ved allokering af %d byte for %s\n" + +#: readelf.c:337 +#, fuzzy, c-format +msgid "Unable to read in 0x%lx bytes of %s\n" +msgstr "Kan ikke indlæse %d byte af %s\n" + +#: readelf.c:642 +msgid "Don't know about relocations on this machine architecture\n" +msgstr "Ved ikke hvordan man relokaliserer på denne maskinarkitektur\n" + +#: readelf.c:662 readelf.c:690 readelf.c:756 readelf.c:784 +msgid "relocs" +msgstr "relokeringer" + +#: readelf.c:673 readelf.c:701 readelf.c:767 readelf.c:795 +#, fuzzy +msgid "out of memory parsing relocs\n" +msgstr "slut på hukommelse ved tolkning af relokeringer" + +#: readelf.c:901 +#, c-format +msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn + Tillæg\n" -#: readelf.c:3010 readelf.c:3056 -msgid "section headers" -msgstr "sektionshoveder" +#: readelf.c:903 +#, c-format +msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn + Tillæg\n" -#: readelf.c:3104 readelf.c:3171 -msgid "symbols" -msgstr "symboler" +#: readelf.c:908 +#, c-format +msgid " Offset Info Type Sym. Value Symbol's Name\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn\n" -#: readelf.c:3115 readelf.c:3182 -msgid "symtab shndx" -msgstr "symtab shndx" +#: readelf.c:910 +#, c-format +msgid " Offset Info Type Sym.Value Sym. Name\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn\n" -#: readelf.c:3284 -msgid "" -"\n" -"There are no sections in this file.\n" -msgstr "" -"\n" -"Der findes ingen sektioner i denne fil.\n" +#: readelf.c:918 +#, fuzzy, c-format +msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn + Tillæg\n" -#: readelf.c:3290 +#: readelf.c:920 #, c-format -msgid "There are %d section headers, starting at offset 0x%lx:\n" -msgstr "Der findes %d sektionshoveder, med begyndelse på offset 0x%lx:\n" +msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn+ Tillæg\n" -#: readelf.c:3307 readelf.c:3621 readelf.c:3968 readelf.c:5565 -msgid "string table" -msgstr "strengtabel" +#: readelf.c:925 +#, fuzzy, c-format +msgid " Offset Info Type Symbol's Value Symbol's Name\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn\n" -#: readelf.c:3328 -msgid "File contains multiple dynamic symbol tables\n" -msgstr "Filen indeholder flere tabeller med dynamiske symboler\n" +#: readelf.c:927 +#, c-format +msgid " Offset Info Type Sym. Value Sym. Name\n" +msgstr " Offset Info Type Symbolværdi Symbolnavn\n" -#: readelf.c:3340 -msgid "File contains multiple dynamic string tables\n" -msgstr "Filen indeholder flere dynamiske strengtabeller\n" +#: readelf.c:1204 readelf.c:1324 readelf.c:1332 +#, c-format +msgid "unrecognized: %-7lx" +msgstr "ukendt: %-7lx" -#: readelf.c:3346 -msgid "dynamic strings" -msgstr "dynamiske strenge" +#: readelf.c:1229 +#, fuzzy, c-format +msgid "" +msgstr "" -#: readelf.c:3352 -msgid "File contains multiple symtab shndx tables\n" -msgstr "Filen indeholder flere symtab-shndx-tabeller\n" +#: readelf.c:1289 +#, fuzzy, c-format +msgid "" +msgstr "" -# BUGG: plural-s -#: readelf.c:3390 -msgid "" -"\n" -"Section Headers:\n" -msgstr "" -"\n" -"Sektionshoveder:\n" +#: readelf.c:1291 +#, fuzzy, c-format +msgid "" +msgstr "" -# BUGG: plural-s -#: readelf.c:3392 -msgid "" -"\n" -"Section Header:\n" -msgstr "" -"\n" -"Sektionshoved:\n" +#: readelf.c:1657 +#, c-format +msgid "Processor Specific: %lx" +msgstr "processorspecifik: %lx" -#: readelf.c:3396 -msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" -msgstr " [Nr] Navn Type Adr Off Strl PS Flg Lk Inf Ju\n" +#: readelf.c:1681 +#, c-format +msgid "Operating System specific: %lx" +msgstr "Operativsystemsspecifik: %lx" -#: readelf.c:3399 -msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" -msgstr " [Nr] Navn Type Adresse Off Strl PS Flg Lk Inf Ju\n" +#: readelf.c:1685 readelf.c:2562 +#, c-format +msgid ": %lx" +msgstr ": %lx" -#: readelf.c:3402 -msgid " [Nr] Name Type Address Offset\n" -msgstr " [Nr] Navn Type Adresse Offset\n" +#: readelf.c:1698 +msgid "NONE (None)" +msgstr "NONE (ingen)" -#: readelf.c:3403 -msgid " Size EntSize Flags Link Info Align\n" -msgstr " Størrelse Poststørrelse Flag Lænk Info Just\n" +#: readelf.c:1699 +msgid "REL (Relocatable file)" +msgstr "REL (relokérbar fil)" -#: readelf.c:3498 -msgid "" -"Key to Flags:\n" -" W (write), A (alloc), X (execute), M (merge), S (strings)\n" -" I (info), L (link order), G (group), x (unknown)\n" -" O (extra OS processing required) o (OS specific), p (processor specific)\n" -msgstr "" -"Nøgle til flagene:\n" -" W (skriv), A (allokér), X (eksekvér), M (flet), S (strenge)\n" -" I (info), L (lænkerorden), G (gruppe), x (ukendt)\n" -" O (ekstra OS-behandling kræves) o (OS-specifik), p (processor-specifik)\n" +#: readelf.c:1700 +msgid "EXEC (Executable file)" +msgstr "EXEC (eksekverbar fil)" -#: readelf.c:3559 -#, c-format -msgid "" -"\n" -"Relocation section at offset 0x%lx contains %ld bytes:\n" -msgstr "" -"\n" -"Relokeringssektionen på offset 0x%lx indeholder %ld byte:\n" +#: readelf.c:1701 +msgid "DYN (Shared object file)" +msgstr "DYN (delt objektfil)" -#: readelf.c:3566 -msgid "" -"\n" -"There are no dynamic relocations in this file.\n" -msgstr "" -"\n" -"Der findes ingen dynamiske relokeringer i denne fil.\n" +#: readelf.c:1702 +msgid "CORE (Core file)" +msgstr "CORE (hukommelsesfil)" -#: readelf.c:3593 -msgid "" -"\n" -"Relocation section " -msgstr "" -"\n" -"Relokeringssektion " +#: readelf.c:1706 +#, c-format +msgid "Processor Specific: (%x)" +msgstr "processorspecifik: (%x)" -#: readelf.c:3598 readelf.c:4031 readelf.c:4045 +#: readelf.c:1708 #, c-format -msgid "'%s'" -msgstr "" +msgid "OS Specific: (%x)" +msgstr "OS-specifikt: (%x)" -#: readelf.c:3600 readelf.c:4047 +#: readelf.c:1710 readelf.c:2779 #, c-format -msgid " at offset 0x%lx contains %lu entries:\n" -msgstr " på offset 0x%lx indeholder %lu poster:\n" +msgid ": %x" +msgstr ": %x" -#: readelf.c:3638 -msgid "" -"\n" -"There are no relocations in this file.\n" -msgstr "" -"\n" -"Der findes ingen relokeringer i denne fil.\n" +#: readelf.c:1722 +msgid "None" +msgstr "Ingen" -#: readelf.c:3834 -msgid "unwind table" -msgstr "tilbagerulningstabel" +#: readelf.c:1829 +#, fuzzy, c-format +msgid ": 0x%x" +msgstr ": %x" -#: readelf.c:3885 readelf.c:3897 readelf.c:7890 readelf.c:7901 -#, c-format -msgid "Skipping unexpected symbol type %u\n" -msgstr "Hopper over uventet symboltype %u\n" +#: readelf.c:2086 +#, fuzzy +msgid "unknown" +msgstr ": %d" + +#: readelf.c:2087 +#, fuzzy +msgid "unknown mac" +msgstr "ukendt sektion" + +#: readelf.c:2399 +msgid "Standalone App" +msgstr "Selvstændig app." -#: readelf.c:3905 +#: readelf.c:2402 readelf.c:3221 readelf.c:3237 #, c-format -msgid "Skipping unexpected relocation type %s\n" -msgstr "Hopper over uventet relokeringstype %s\n" +msgid "" +msgstr "" -#: readelf.c:3950 readelf.c:3975 -msgid "" -"\n" -"There are no unwind sections in this file.\n" -msgstr "" -"\n" -"Der findes ingen tilbagerulningssektioner i denne fil.\n" +#: readelf.c:2826 +#, c-format +msgid "Usage: readelf elf-file(s)\n" +msgstr "Brug: readelf elf-filer\n" -# BUG: Fortsættelsen er ikke markeret for oversættelse i koden og indeholder '-citattegn. -#: readelf.c:4026 -msgid "" -"\n" -"Could not find unwind info section for " +#: readelf.c:2827 +#, c-format +msgid " Display information about the contents of ELF format files\n" msgstr "" -"\n" -"Kunne ikke finde tilbagerulningssektion til " - -#: readelf.c:4038 -msgid "unwind info" -msgstr "tilbagerulningsinfo" -#: readelf.c:4040 +#: readelf.c:2828 +#, c-format msgid "" -"\n" -"Unwind section " +" 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" +" --segments An alias for --program-headers\n" +" -S --section-headers Display the sections' header\n" +" --sections An alias for --section-headers\n" +" -g --section-groups Display the section groups\n" +" -t --section-details Display the section details\n" +" -e --headers Equivalent to: -h -l -S\n" +" -s --syms Display the symbol table\n" +" --symbols An alias for --syms\n" +" -n --notes Display the core notes (if present)\n" +" -r --relocs Display the relocations (if present)\n" +" -u --unwind Display the unwind info (if present)\n" +" -d --dynamic Display the dynamic section (if present)\n" +" -V --version-info Display the version sections (if present)\n" +" -A --arch-specific Display architecture specific information (if any).\n" +" -c --archive-index Display the symbol/file index in an archive\n" +" -D --use-dynamic Use the dynamic section info when displaying symbols\n" +" -x --hex-dump=\n" +" Dump the contents of section as bytes\n" +" -p --string-dump=\n" +" Dump the contents of section as strings\n" +" -w[lLiaprmfFsoR] or\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Display the contents of DWARF2 debug sections\n" msgstr "" -"\n" -"Tilbagerulningssektion " -#: readelf.c:4213 readelf.c:4256 -msgid "dynamic segment" -msgstr "dynamisk segment" - -#: readelf.c:4334 +#: readelf.c:2856 +#, fuzzy, c-format msgid "" -"\n" -"There is no dynamic segment in this file.\n" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" msgstr "" -"\n" -"Der findes intet dynamisk segment i denne fil.\n" - -#: readelf.c:4368 -msgid "Unable to seek to end of file!" -msgstr "Kan ikke søge til slutningen af filen!" - -#: readelf.c:4379 -msgid "Unable to determine the number of symbols to load\n" -msgstr "Kan ikke bestemme hvor mange symboler som skal læses ind\n" - -#: readelf.c:4409 -msgid "Unable to seek to end of file\n" -msgstr "Kan ikke søge til slutningen af filen\n" - -#: readelf.c:4415 -msgid "Unable to determine the length of the dynamic string table\n" -msgstr "Kan ikke bestemme længden på den dynamiske strengtabel\n" - -#: readelf.c:4420 -msgid "dynamic string table" -msgstr "dynamisk strengtabel" - -#: readelf.c:4454 -msgid "symbol information" -msgstr "symbolinformation" +" -i --instruction-dump=\n" +" Disassemblér indeholdet i sektion \n" -#: readelf.c:4478 +#: readelf.c:2860 #, c-format msgid "" -"\n" -"Dynamic segment at offset 0x%x contains %ld entries:\n" +" -I --histogram Display histogram of bucket list lengths\n" +" -W --wide Allow output width to exceed 80 characters\n" +" @ Read options from \n" +" -H --help Display this information\n" +" -v --version Display the version number of readelf\n" msgstr "" -"\n" -"Dynamisk segment på offset 0x%x indeholder %ld poster:\n" - -#: readelf.c:4481 -msgid " Tag Type Name/Value\n" -msgstr " Mærke Type Navn/Værdi\n" - -#: readelf.c:4517 -msgid "Auxiliary library" -msgstr "Eksternt bibliotek" - -#: readelf.c:4521 -msgid "Filter library" -msgstr "Filterbibliotek" -#: readelf.c:4525 -msgid "Configuration file" -msgstr "Konfigurationsfil" +#: readelf.c:2888 readelf.c:2916 readelf.c:2920 readelf.c:11007 +#, fuzzy +msgid "Out of memory allocating dump request table.\n" +msgstr "Slut på hukommelse ved allokering af tabel for ønskede udskrifter." -#: readelf.c:4529 -msgid "Dependency audit library" -msgstr "Afhængighedskontrolsbibliotek" +#: readelf.c:3090 readelf.c:3160 +#, c-format +msgid "Unrecognized debug option '%s'\n" +msgstr "Ukendt fejlsøgningsargument \"%s\"\n" -#: readelf.c:4533 -msgid "Audit library" -msgstr "Kontrolbibliotek" +#: readelf.c:3191 +#, c-format +msgid "Invalid option '-%c'\n" +msgstr "Ugyldigt flag \"-%c\"\n" -#: readelf.c:4551 readelf.c:4577 readelf.c:4603 -msgid "Flags:" -msgstr "Flag:" +#: readelf.c:3205 +msgid "Nothing to do.\n" +msgstr "Intet at gøre.\n" -#: readelf.c:4553 readelf.c:4579 readelf.c:4605 -msgid " None\n" -msgstr " Ingen\n" +#: readelf.c:3217 readelf.c:3233 readelf.c:6495 +msgid "none" +msgstr "ingen" -#: readelf.c:4724 -#, c-format -msgid "Shared library: [%s]" -msgstr "Delt bibliotek: [%s]" +#: readelf.c:3234 +msgid "2's complement, little endian" +msgstr "2-komplement, little endian" -#: readelf.c:4727 -msgid " program interpreter" -msgstr " Programfortolker" +#: readelf.c:3235 +msgid "2's complement, big endian" +msgstr "2-komplement, big endian" -#: readelf.c:4731 -#, c-format -msgid "Library soname: [%s]" -msgstr "Bibliotekets so-navn: [%s]" +#: readelf.c:3253 +msgid "Not an ELF file - it has the wrong magic bytes at the start\n" +msgstr "Ikke en ELF-fil - den har forkerte magiske byte i begyndelsen\n" -#: readelf.c:4735 +#: readelf.c:3263 #, c-format -msgid "Library rpath: [%s]" -msgstr "Bibliotekets rpath: [%s]" +msgid "ELF Header:\n" +msgstr "ELF-hoved:\n" -#: readelf.c:4739 +#: readelf.c:3264 #, c-format -msgid "Library runpath: [%s]" -msgstr "Bibliotekets runpath: [%s]" +msgid " Magic: " +msgstr " Magi: " -#: readelf.c:4802 +#: readelf.c:3268 #, c-format -msgid "Not needed object: [%s]\n" -msgstr "Unødvendigt objekt: [%s]\n" +msgid " Class: %s\n" +msgstr " Klasse: %s\n" -#: readelf.c:4913 +#: readelf.c:3270 #, c-format -msgid "" -"\n" -"Version definition section '%s' contains %ld entries:\n" -msgstr "" -"\n" -"Versiondefinitionssektion \"%s\" indeholder %ld poster:\n" - -#: readelf.c:4916 -msgid " Addr: 0x" -msgstr " Adr: 0x" +msgid " Data: %s\n" +msgstr " Data: %s\n" -#: readelf.c:4918 readelf.c:5113 +#: readelf.c:3272 #, c-format -msgid " Offset: %#08lx Link: %lx (%s)\n" -msgstr " Offset: %#08lx Lænk: %lx (%s)\n" - -#: readelf.c:4925 -msgid "version definition section" -msgstr "versiondefinitionssektion" +msgid " Version: %d %s\n" +msgstr " Version: %d %s\n" -#: readelf.c:4951 +#: readelf.c:3279 #, c-format -msgid " %#06x: Rev: %d Flags: %s" -msgstr " %#06x: Rev: %d Flag: %s" +msgid " OS/ABI: %s\n" +msgstr " OS/ABI: %s\n" -#: readelf.c:4954 +#: readelf.c:3281 #, c-format -msgid " Index: %d Cnt: %d " -msgstr " Indeks: %d Ant: %d " +msgid " ABI Version: %d\n" +msgstr " ABI-version: %d\n" -#: readelf.c:4965 +#: readelf.c:3283 #, c-format -msgid "Name: %s\n" -msgstr "Navn: %s\n" +msgid " Type: %s\n" +msgstr " Type: %s\n" -#: readelf.c:4967 +#: readelf.c:3285 #, c-format -msgid "Name index: %ld\n" -msgstr "Navneindeks: %ld\n" +msgid " Machine: %s\n" +msgstr " Maskine: %s\n" -#: readelf.c:4982 +#: readelf.c:3287 #, c-format -msgid " %#06x: Parent %d: %s\n" -msgstr " %#06x: Forælder %d: %s\n" +msgid " Version: 0x%lx\n" +msgstr " Version: 0x%lx\n" -#: readelf.c:4985 +#: readelf.c:3290 #, c-format -msgid " %#06x: Parent %d, name index: %ld\n" -msgstr " %#06x: Forælder %d, navneindeks: %ld\n" +msgid " Entry point address: " +msgstr " Indgangsodresse: " -#: readelf.c:5004 +#: readelf.c:3292 #, c-format msgid "" "\n" -"Version needs section '%s' contains %ld entries:\n" +" Start of program headers: " msgstr "" "\n" -"Versionbehovssektion \"%s\" indeholder %ld poster:\n" - -#: readelf.c:5007 -msgid " Addr: 0x" -msgstr " Adr: 0x" +" Start for programhoveder: " -#: readelf.c:5009 +#: readelf.c:3294 #, c-format -msgid " Offset: %#08lx Link to section: %ld (%s)\n" -msgstr " Offset: %#08lx Lænke til sektion: %ld (%s)\n" +msgid "" +" (bytes into file)\n" +" Start of section headers: " +msgstr "" +" (byte inde i filen)\n" +" Start for sektionshoveder: " -#: readelf.c:5015 -msgid "version need section" -msgstr "versionsbehovssektion" +#: readelf.c:3296 +#, c-format +msgid " (bytes into file)\n" +msgstr " (byte inde i filen)\n" -#: readelf.c:5037 +#: readelf.c:3298 #, c-format -msgid " %#06x: Version: %d" -msgstr " %#06x: Version: %d" +msgid " Flags: 0x%lx%s\n" +msgstr " Flag: 0x%lx%s\n" -#: readelf.c:5040 +#: readelf.c:3301 #, c-format -msgid " File: %s" -msgstr " Fil: %s" +msgid " Size of this header: %ld (bytes)\n" +msgstr " Dette hoveds størrelse: %ld (byte)\n" -#: readelf.c:5042 +#: readelf.c:3303 #, c-format -msgid " File: %lx" -msgstr " Fil: %lx" +msgid " Size of program headers: %ld (bytes)\n" +msgstr " Programhovedernes størrelse: %ld (byte)\n" -#: readelf.c:5044 +#: readelf.c:3305 #, c-format -msgid " Cnt: %d\n" -msgstr " Ant: %d\n" +msgid " Number of program headers: %ld\n" +msgstr " Antal programhoveder: %ld\n" -#: readelf.c:5062 +#: readelf.c:3307 #, c-format -msgid " %#06x: Name: %s" -msgstr " %#06x: Navn: %s" +msgid " Size of section headers: %ld (bytes)\n" +msgstr " Sektionshovedernes størrelse: %ld (byte)\n" -#: readelf.c:5065 +#: readelf.c:3309 #, c-format -msgid " %#06x: Name index: %lx" -msgstr " %#06x: Navneindeks: %lx" +msgid " Number of section headers: %ld" +msgstr " Antal sektionshoveder: %ld" -#: readelf.c:5068 +#: readelf.c:3314 #, c-format -msgid " Flags: %s Version: %d\n" -msgstr " Flag: %s Version: %d\n" +msgid " Section header string table index: %ld" +msgstr " Sektionshovedets strengtabelsindeks: %ld" -#: readelf.c:5104 -msgid "version string table" -msgstr "versionsstrengtabel" +#: readelf.c:3350 readelf.c:3383 +msgid "program headers" +msgstr "programhoveder" -#: readelf.c:5108 +#: readelf.c:3421 readelf.c:3719 readelf.c:3760 readelf.c:3819 readelf.c:3884 +#: readelf.c:4553 readelf.c:4577 readelf.c:5827 readelf.c:5871 readelf.c:6069 +#: readelf.c:7127 readelf.c:7141 readelf.c:7635 readelf.c:7651 readelf.c:7694 +#: readelf.c:7719 readelf.c:9475 readelf.c:9667 readelf.c:10194 +#: readelf.c:10857 +msgid "Out of memory\n" +msgstr "Slut på hukommelse\n" + +#: readelf.c:3448 #, c-format msgid "" "\n" -"Version symbols section '%s' contains %d entries:\n" +"There are no program headers in this file.\n" msgstr "" "\n" -"Versionsymbolssektion \"%s\" indeholder %d poster:\n" +"Der findes ingen programhoveder i denne fil.\n" -#: readelf.c:5111 -msgid " Addr: " -msgstr " Adr: " +#: readelf.c:3454 +#, c-format +msgid "" +"\n" +"Elf file type is %s\n" +msgstr "" +"\n" +"Elf-filtype er %s\n" -#: readelf.c:5121 -msgid "version symbol data" -msgstr "versionsymbolsdata" +#: readelf.c:3455 +#, c-format +msgid "Entry point " +msgstr "Indgangspunkt " -#: readelf.c:5148 -msgid " 0 (*local*) " -msgstr " 0 (*lokal*) " +#: readelf.c:3457 +#, c-format +msgid "" +"\n" +"There are %d program headers, starting at offset " +msgstr "" +"\n" +"Der findes %d programhoveder, med begyndelse på offset " -#: readelf.c:5152 -msgid " 1 (*global*) " -msgstr " 1 (*global*) " +# BUGG: plural-s +#: readelf.c:3469 readelf.c:3471 +#, c-format +msgid "" +"\n" +"Program Headers:\n" +msgstr "" +"\n" +"Programhoveder:\n" -#: readelf.c:5187 readelf.c:5622 -msgid "version need" -msgstr "versionsbehov" +#: readelf.c:3475 +#, c-format +msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" +msgstr " Type Offset VirtAdr FysAdr FilSt HukommelseSt Flg Just\n" -#: readelf.c:5197 -msgid "version need aux (2)" -msgstr "ydre versionsbehov (2)" +#: readelf.c:3478 +#, c-format +msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" +msgstr " Type Offset VirtAdr FysAdr FilStrl HukommelseSt Flg Just\n" -#: readelf.c:5238 readelf.c:5684 -msgid "version def" -msgstr "versionsdef." +#: readelf.c:3482 +#, c-format +msgid " Type Offset VirtAddr PhysAddr\n" +msgstr " Type Offset VirtAdr FysAdr\n" -#: readelf.c:5257 readelf.c:5699 -msgid "version def aux" -msgstr "ydre versionsdef." +#: readelf.c:3484 +#, c-format +msgid " FileSiz MemSiz Flags Align\n" +msgstr " FilStrl HukommelseStrl Flag Just\n" -#: readelf.c:5288 -msgid "" -"\n" -"No version information found in this file.\n" +#: readelf.c:3577 +msgid "more than one dynamic segment\n" +msgstr "mere end et dynamisk segment\n" + +#: readelf.c:3593 +#, fuzzy +msgid "no .dynamic section in the dynamic segment\n" +msgstr "mere end et dynamisk segment\n" + +#: readelf.c:3608 +msgid "the .dynamic section is not contained within the dynamic segment\n" msgstr "" -"\n" -"Der fandtes ingen versionsinformation i denne fil.\n" -#: readelf.c:5420 -msgid "Unable to read in dynamic data\n" -msgstr "Kan ikke indlæse de dynamiske data\n" +#: readelf.c:3611 +msgid "the .dynamic section is not the first section in the dynamic segment.\n" +msgstr "" -#: readelf.c:5462 -msgid "Unable to seek to start of dynamic information" -msgstr "Kan ikke søge til begyndelsen af den dynamiske information" +#: readelf.c:3619 +msgid "Unable to find program interpreter name\n" +msgstr "Kan ikke finde navnet på programtolken\n" -#: readelf.c:5468 -msgid "Failed to read in number of buckets\n" -msgstr "Mislykkedes at indlæse antal spande\n" +#: readelf.c:3626 +msgid "Internal error: failed to create format string to display program interpreter\n" +msgstr "" -#: readelf.c:5474 -msgid "Failed to read in number of chains\n" -msgstr "Mislykkedes at indlæse antal kæder\n" +#: readelf.c:3630 +#, fuzzy +msgid "Unable to read program interpreter name\n" +msgstr "Kan ikke finde navnet på programtolken\n" -#: readelf.c:5494 +#: readelf.c:3633 +#, c-format msgid "" "\n" -"Symbol table for image:\n" +" [Requesting program interpreter: %s]" msgstr "" "\n" -"Symboltabel for filbilleder:\n" - -#: readelf.c:5496 -msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr Spd: Værdi Strl Type Bind Synl Idx Navn\n" - -#: readelf.c:5498 -msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr Spd: Værdi Strl Type Bind Synl Idx Navn\n" +" [Anmoder programtolkere: %s]" -#: readelf.c:5543 +#: readelf.c:3645 #, c-format msgid "" "\n" -"Symbol table '%s' contains %lu entries:\n" +" Section to Segment mapping:\n" msgstr "" "\n" -"Symboltabel \"%s\" indeholder %lu poster:\n" +" Sektion til segment-afbildning:\n" -#: readelf.c:5547 -msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr: Værdi Strl Type Bind Synl Idx Navn\n" +#: readelf.c:3646 +#, c-format +msgid " Segment Sections...\n" +msgstr " Segmentsektioner...\n" -#: readelf.c:5549 -msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr: Værdi Strl Type Bind Synl Idx Navn\n" +#: readelf.c:3681 +msgid "Cannot interpret virtual addresses without program headers.\n" +msgstr "" -#: readelf.c:5595 -msgid "version data" -msgstr "versionsdata" +#: readelf.c:3697 +#, c-format +msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" +msgstr "" -#: readelf.c:5635 -msgid "version need aux (3)" -msgstr "ydre versionsbehov (3)" +#: readelf.c:3711 readelf.c:3752 +msgid "section headers" +msgstr "sektionshoveder" -#: readelf.c:5660 -msgid "bad dynamic symbol" -msgstr "fejlagtigt dynamisk symbol" +#: readelf.c:3796 readelf.c:3861 +msgid "symbols" +msgstr "symboler" -#: readelf.c:5722 -msgid "" -"\n" -"Dynamic symbol information is not available for displaying symbols.\n" -msgstr "" -"\n" -"Informationen om dynamiske symboler er ikke tilgænglig til at vise symboler.\n" +#: readelf.c:3806 readelf.c:3871 +msgid "symtab shndx" +msgstr "symtab shndx" -#: readelf.c:5734 +#: readelf.c:4130 readelf.c:4537 #, c-format msgid "" "\n" -"Histogram for bucket list length (total of %d buckets):\n" +"There are no sections in this file.\n" msgstr "" "\n" -"Histogram over spandenes listelængde (totalt %d spande):\n" +"Der findes ingen sektioner i denne fil.\n" -#: readelf.c:5736 +#: readelf.c:4136 #, c-format -msgid " Length Number %% of total Coverage\n" -msgstr " Længde Nummer %% af alle Dækning\n" +msgid "There are %d section headers, starting at offset 0x%lx:\n" +msgstr "Der findes %d sektionshoveder, med begyndelse på offset 0x%lx:\n" -#: readelf.c:5741 readelf.c:5760 readelf.c:9146 readelf.c:9338 -msgid "Out of memory" -msgstr "Slut på hukommelse" +#: readelf.c:4156 readelf.c:4653 readelf.c:4879 readelf.c:5178 readelf.c:5584 +#: readelf.c:7445 +msgid "string table" +msgstr "strengtabel" -#: readelf.c:5809 +#: readelf.c:4223 #, c-format -msgid "" -"\n" -"Dynamic info segment at offset 0x%lx contains %d entries:\n" +msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" msgstr "" -"\n" -"Dynamisk info-segment på offset 0x%lx indeholder %d poster:\n" -#: readelf.c:5812 -msgid " Num: Name BoundTo Flags\n" -msgstr " Nr: Navn Bind til Flag\n" +#: readelf.c:4243 +msgid "File contains multiple dynamic symbol tables\n" +msgstr "Filen indeholder flere tabeller med dynamiske symboler\n" + +#: readelf.c:4256 +msgid "File contains multiple dynamic string tables\n" +msgstr "Filen indeholder flere dynamiske strengtabeller\n" + +#: readelf.c:4261 +msgid "dynamic strings" +msgstr "dynamiske strenge" + +#: readelf.c:4268 +msgid "File contains multiple symtab shndx tables\n" +msgstr "Filen indeholder flere symtab-shndx-tabeller\n" -#: readelf.c:5864 +# BUGG: plural-s +#: readelf.c:4320 #, c-format msgid "" "\n" -"Assembly dump of section %s\n" +"Section Headers:\n" msgstr "" "\n" -"Disassembleringsudskrift af sektion %s\n" +"Sektionshoveder:\n" -#: readelf.c:5887 +# BUGG: plural-s +#: readelf.c:4322 #, c-format msgid "" "\n" -"Section '%s' has no data to dump.\n" +"Section Header:\n" msgstr "" "\n" -"Sektion \"%s\" har ingen data at skrive ud.\n" +"Sektionshoved:\n" -#: readelf.c:5892 +#: readelf.c:4328 readelf.c:4339 readelf.c:4350 #, c-format -msgid "" -"\n" -"Hex dump of section '%s':\n" +msgid " [Nr] Name\n" msgstr "" -"\n" -"Hex.udskrift af sektion \"%s\":\n" - -#: readelf.c:5897 -msgid "section data" -msgstr "sektionsdata" -#: readelf.c:6046 -msgid "badly formed extended line op encountered!\n" -msgstr "fejlagtigt udformet udvidet linje-op mødtes!\n" +#: readelf.c:4329 +#, fuzzy, c-format +msgid " Type Addr Off Size ES Lk Inf Al\n" +msgstr " [Nr] Navn Type Adr Off Strl PS Flg Lk Inf Ju\n" -#: readelf.c:6053 +#: readelf.c:4333 #, c-format -msgid " Extended opcode %d: " -msgstr " Udvidet op-kode %d: " +msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Navn Type Adr Off Strl PS Flg Lk Inf Ju\n" -#: readelf.c:6058 -msgid "" -"End of Sequence\n" -"\n" -msgstr "" -"Slut på sekvensen\n" -"\n" +#: readelf.c:4340 +#, fuzzy, c-format +msgid " Type Address Off Size ES Lk Inf Al\n" +msgstr " [Nr] Navn Type Adresse Off Strl PS Flg Lk Inf Ju\n" -#: readelf.c:6064 +#: readelf.c:4344 #, c-format -msgid "set Address to 0x%lx\n" -msgstr "sæt Adresse til 0x%lx\n" +msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Navn Type Adresse Off Strl PS Flg Lk Inf Ju\n" -#: readelf.c:6069 -msgid " define new File Table entry\n" -msgstr " definer ny filtabelspost\n" +#: readelf.c:4351 +#, fuzzy, c-format +msgid " Type Address Offset Link\n" +msgstr " [Nr] Navn Type Adresse Offset\n" -#: readelf.c:6070 readelf.c:6199 -msgid " Entry\tDir\tTime\tSize\tName\n" -msgstr " Post\tKatalog\tTid\tStrl.\tNavn\n" +#: readelf.c:4352 +#, fuzzy, c-format +msgid " Size EntSize Info Align\n" +msgstr " Størrelse Poststørrelse Flag Lænk Info Just\n" -#: readelf.c:6072 +#: readelf.c:4356 #, c-format -msgid " %d\t" -msgstr " %d\t" +msgid " [Nr] Name Type Address Offset\n" +msgstr " [Nr] Navn Type Adresse Offset\n" -#: readelf.c:6075 readelf.c:6077 readelf.c:6079 readelf.c:6211 readelf.c:6213 -#: readelf.c:6215 +#: readelf.c:4357 #, c-format -msgid "%lu\t" -msgstr "%lu\t" +msgid " Size EntSize Flags Link Info Align\n" +msgstr " Størrelse Poststørrelse Flag Lænk Info Just\n" -#: readelf.c:6080 +#: readelf.c:4362 +#, fuzzy, c-format +msgid " Flags\n" +msgstr " Flag" + +#: readelf.c:4495 #, c-format msgid "" -"%s\n" -"\n" +"Key to Flags:\n" +" W (write), A (alloc), X (execute), M (merge), S (strings)\n" +" I (info), L (link order), G (group), x (unknown)\n" +" O (extra OS processing required) o (OS specific), p (processor specific)\n" msgstr "" -"%s\n" -"\n" +"Nøgle til flagene:\n" +" W (skriv), A (allokér), X (eksekvér), M (flet), S (strenge)\n" +" I (info), L (lænkerorden), G (gruppe), x (ukendt)\n" +" O (ekstra OS-behandling kræves) o (OS-specifik), p (processor-specifik)\n" -#: readelf.c:6084 -#, c-format -msgid "UNKNOWN: length %d\n" -msgstr "UKENDT: længde %d\n" +#: readelf.c:4513 +#, fuzzy, c-format +msgid "[: 0x%x]" +msgstr ": %x" -#: readelf.c:6110 -#, c-format +#: readelf.c:4544 +msgid "Section headers are not available!\n" +msgstr "" + +#: readelf.c:4568 +#, fuzzy, c-format msgid "" "\n" -"Dump of debug contents of section %s:\n" -"\n" +"There are no section groups in this file.\n" msgstr "" "\n" -"Udskrift af fejlsøgningsindhold i sektion %s:\n" -"\n" +"Der findes ingen sektioner i denne fil.\n" -#: readelf.c:6122 -msgid "64-bit DWARF line info is not supported yet.\n" -msgstr "64-bit DWARF-linjeinformation understøttes ikke endnu.\n" +#: readelf.c:4604 +#, c-format +msgid "Bad sh_link in group section `%s'\n" +msgstr "" -#: readelf.c:6129 -msgid "The line info appears to be corrupt - the section is too small\n" -msgstr "Linjeinformationen virker være i stykker - sektionen er for lille\n" +#: readelf.c:4623 +#, c-format +msgid "Bad sh_info in group section `%s'\n" +msgstr "" -#: readelf.c:6137 -msgid "Only DWARF version 2 line info is currently supported.\n" -msgstr "Kun DWARF version 2's linjeinfo understøttes i øjeblikket.\n" +#: readelf.c:4661 readelf.c:7851 readelf.c:7932 +msgid "section data" +msgstr "sektionsdata" -#: readelf.c:6152 -#, c-format -msgid " Length: %ld\n" -msgstr " Længde: %ld\n" +#: readelf.c:4673 +#, fuzzy, c-format +msgid " [Index] Name\n" +msgstr " Num: Indeks Værdi Navn" -#: readelf.c:6153 +#: readelf.c:4687 #, c-format -msgid " DWARF Version: %d\n" -msgstr " DWARF version: %d\n" +msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" +msgstr "" -#: readelf.c:6154 +#: readelf.c:4696 #, c-format -msgid " Prologue Length: %d\n" -msgstr " Prologlængde: %d\n" +msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" +msgstr "" -#: readelf.c:6155 +#: readelf.c:4709 #, c-format -msgid " Minimum Instruction Length: %d\n" -msgstr " Min.-instruktionslængde: %d\n" +msgid "section 0 in group section [%5u]\n" +msgstr "" -# BUG: Ska det ikke være `' på engelsk? -#: readelf.c:6156 +#: readelf.c:4804 +#, fuzzy, c-format +msgid "" +"\n" +"'%s' relocation section at offset 0x%lx contains %ld bytes:\n" +msgstr "" +"\n" +"Relokeringssektionen på offset 0x%lx indeholder %ld byte:\n" + +#: readelf.c:4816 #, c-format -msgid " Initial value of 'is_stmt': %d\n" -msgstr " initialværdi på \"is_stmt\": %d\n" +msgid "" +"\n" +"There are no dynamic relocations in this file.\n" +msgstr "" +"\n" +"Der findes ingen dynamiske relokeringer i denne fil.\n" -#: readelf.c:6157 +#: readelf.c:4840 #, c-format -msgid " Line Base: %d\n" -msgstr " linjebase: %d\n" +msgid "" +"\n" +"Relocation section " +msgstr "" +"\n" +"Relokeringssektion " -#: readelf.c:6158 +#: readelf.c:4845 readelf.c:5254 readelf.c:5268 readelf.c:5599 #, c-format -msgid " Line Range: %d\n" -msgstr " linjeområde: %d\n" +msgid "'%s'" +msgstr "" -#: readelf.c:6159 +#: readelf.c:4847 readelf.c:5270 readelf.c:5601 #, c-format -msgid " Opcode Base: %d\n" -msgstr " op-kodebase: %d\n" +msgid " at offset 0x%lx contains %lu entries:\n" +msgstr " på offset 0x%lx indeholder %lu poster:\n" -#: readelf.c:6168 +#: readelf.c:4898 +#, c-format msgid "" "\n" -" Opcodes:\n" +"There are no relocations in this file.\n" msgstr "" "\n" -" Op-koder:\n" +"Der findes ingen relokeringer i denne fil.\n" -#: readelf.c:6171 +#: readelf.c:5077 readelf.c:5450 +msgid "unwind table" +msgstr "tilbagerulningstabel" + +#: readelf.c:5127 readelf.c:5531 #, c-format -msgid " Opcode %d has %d args\n" -msgstr " Op-kode %d har %d argumenter\n" +msgid "Skipping unexpected relocation type %s\n" +msgstr "Hopper over uventet relokeringstype %s\n" -#: readelf.c:6177 +#: readelf.c:5186 readelf.c:5592 readelf.c:5643 +#, c-format msgid "" "\n" -" The Directory Table is empty.\n" +"There are no unwind sections in this file.\n" msgstr "" "\n" -" Katalogtabellen er tom.\n" +"Der findes ingen tilbagerulningssektioner i denne fil.\n" -#: readelf.c:6180 +# BUG: Fortsættelsen er ikke markeret for oversættelse i koden og indeholder '-citattegn. +#: readelf.c:5249 +#, c-format msgid "" "\n" -" The Directory Table:\n" +"Could not find unwind info section for " msgstr "" "\n" -" Katalogtabellen:\n" +"Kunne ikke finde tilbagerulningssektion til " -#: readelf.c:6184 -#, c-format -msgid " %s\n" -msgstr " %s\n" +#: readelf.c:5261 +msgid "unwind info" +msgstr "tilbagerulningsinfo" -#: readelf.c:6195 +#: readelf.c:5263 readelf.c:5598 +#, c-format msgid "" "\n" -" The File Name Table is empty.\n" +"Unwind section " msgstr "" "\n" -" Filnavnstabellen er tom.\n" +"Tilbagerulningssektion " -#: readelf.c:6198 +#: readelf.c:5808 readelf.c:5852 +#, fuzzy +msgid "dynamic section" +msgstr "dynamiske strenge" + +#: readelf.c:5929 +#, fuzzy, c-format msgid "" "\n" -" The File Name Table:\n" +"There is no dynamic section in this file.\n" msgstr "" "\n" -" Filnavnstabellen:\n" +"Der findes intet dynamisk segment i denne fil.\n" -#: readelf.c:6206 -#, c-format -msgid " %d\t" -msgstr " %d\t" +#: readelf.c:5967 +#, fuzzy +msgid "Unable to seek to end of file!\n" +msgstr "Kan ikke søge til slutningen af filen!" -#: readelf.c:6217 -#, c-format -msgid "%s\n" -msgstr "%s\n" +#: readelf.c:5980 +msgid "Unable to determine the number of symbols to load\n" +msgstr "Kan ikke bestemme hvor mange symboler som skal læses ind\n" -#. Now display the statements. -#: readelf.c:6225 +#: readelf.c:6015 +msgid "Unable to seek to end of file\n" +msgstr "Kan ikke søge til slutningen af filen\n" + +#: readelf.c:6022 +msgid "Unable to determine the length of the dynamic string table\n" +msgstr "Kan ikke bestemme længden på den dynamiske strengtabel\n" + +#: readelf.c:6027 +msgid "dynamic string table" +msgstr "dynamisk strengtabel" + +#: readelf.c:6062 +msgid "symbol information" +msgstr "symbolinformation" + +#: readelf.c:6087 +#, fuzzy, c-format msgid "" "\n" -" Line Number Statements:\n" +"Dynamic section at offset 0x%lx contains %u entries:\n" msgstr "" "\n" -" Linjenummersætninger:\n" +"Dynamisk segment på offset 0x%x indeholder %ld poster:\n" -#: readelf.c:6241 +#: readelf.c:6090 #, c-format -msgid " Special opcode %d: advance Address by %d to 0x%lx" -msgstr " Særlig op-kode %d: øg adressen med %d til 0x%lx" +msgid " Tag Type Name/Value\n" +msgstr " Mærke Type Navn/Værdi\n" -#: readelf.c:6245 +#: readelf.c:6126 #, c-format -msgid " and Line by %d to %d\n" -msgstr " og linjenumret med %d til %d\n" - -#: readelf.c:6256 -msgid " Copy\n" -msgstr " Kopiér\n" +msgid "Auxiliary library" +msgstr "Eksternt bibliotek" -#: readelf.c:6263 +#: readelf.c:6130 #, c-format -msgid " Advance PC by %d to %lx\n" -msgstr " Øg PC med %d til %lx\n" +msgid "Filter library" +msgstr "Filterbibliotek" -#: readelf.c:6271 +#: readelf.c:6134 #, c-format -msgid " Advance Line by %d to %d\n" -msgstr " Øg linjenumret med %d til %d\n" +msgid "Configuration file" +msgstr "Konfigurationsfil" -#: readelf.c:6278 +#: readelf.c:6138 #, c-format -msgid " Set File Name to entry %d in the File Name Table\n" -msgstr " Sæt filnavnet til post %d i filnavnstabellen\n" +msgid "Dependency audit library" +msgstr "Afhængighedskontrolsbibliotek" -#: readelf.c:6286 +#: readelf.c:6142 #, c-format -msgid " Set column to %d\n" -msgstr " Sæt kolonnen til %d\n" +msgid "Audit library" +msgstr "Kontrolbibliotek" -#: readelf.c:6293 +#: readelf.c:6160 readelf.c:6188 readelf.c:6216 #, c-format -msgid " Set is_stmt to %d\n" -msgstr " Sæt is_stmt til %d\n" - -#: readelf.c:6298 -msgid " Set basic block\n" -msgstr " Sæt baseblokken\n" +msgid "Flags:" +msgstr "Flag:" -#: readelf.c:6306 +#: readelf.c:6163 readelf.c:6191 readelf.c:6218 #, c-format -msgid " Advance PC by constant %d to 0x%lx\n" -msgstr " Øg PC med konstant %d til 0x%lx\n" +msgid " None\n" +msgstr " Ingen\n" -#: readelf.c:6314 +#: readelf.c:6339 #, c-format -msgid " Advance PC by fixed size amount %d to 0x%lx\n" -msgstr " Øg PC med fastlængdeantal %d til 0x%lx\n" +msgid "Shared library: [%s]" +msgstr "Delt bibliotek: [%s]" -#: readelf.c:6319 -msgid " Set prologue_end to true\n" -msgstr " Sæt prologue_end til sand\n" +#: readelf.c:6342 +#, c-format +msgid " program interpreter" +msgstr " Programfortolker" -#: readelf.c:6323 -msgid " Set epilogue_begin to true\n" -msgstr " Sæt epilogue_begin til sand\n" +#: readelf.c:6346 +#, c-format +msgid "Library soname: [%s]" +msgstr "Bibliotekets so-navn: [%s]" -#: readelf.c:6329 +#: readelf.c:6350 #, c-format -msgid " Set ISA to %d\n" -msgstr " Sæt ISA til %d\n" +msgid "Library rpath: [%s]" +msgstr "Bibliotekets rpath: [%s]" -#: readelf.c:6333 +#: readelf.c:6354 #, c-format -msgid " Unknown opcode %d with operands: " -msgstr " Ukendt op-kode %d med operand: " +msgid "Library runpath: [%s]" +msgstr "Bibliotekets runpath: [%s]" -#: readelf.c:6365 readelf.c:6827 readelf.c:6899 +#: readelf.c:6417 #, c-format +msgid "Not needed object: [%s]\n" +msgstr "Unødvendigt objekt: [%s]\n" + +#: readelf.c:6541 +#, fuzzy, c-format msgid "" -"Contents of the %s section:\n" "\n" +"Version definition section '%s' contains %u entries:\n" msgstr "" -"%s-sektionens indhold:\n" "\n" +"Versiondefinitionssektion \"%s\" indeholder %ld poster:\n" -#: readelf.c:6384 -msgid "64-bit DWARF pubnames are not supported yet.\n" -msgstr "64-bit DWARF-offentlige navne understøttes ikke endnu.\n" +#: readelf.c:6544 +#, c-format +msgid " Addr: 0x" +msgstr " Adr: 0x" -#: readelf.c:6394 -msgid "Only DWARF 2 pubnames are currently supported\n" -msgstr "Kun DWARF 2 pub.-navn understøttes i øjeblikket\n" +#: readelf.c:6546 readelf.c:6648 readelf.c:6769 +#, fuzzy, c-format +msgid " Offset: %#08lx Link: %u (%s)\n" +msgstr " Offset: %#08lx Lænk: %lx (%s)\n" + +#: readelf.c:6554 +msgid "version definition section" +msgstr "versiondefinitionssektion" -#: readelf.c:6401 +#: readelf.c:6583 #, c-format -msgid " Length: %ld\n" -msgstr " Længde: %ld\n" +msgid " %#06x: Rev: %d Flags: %s" +msgstr " %#06x: Rev: %d Flag: %s" -#: readelf.c:6403 +#: readelf.c:6586 #, c-format -msgid " Version: %d\n" -msgstr " Version: %d\n" +msgid " Index: %d Cnt: %d " +msgstr " Indeks: %d Ant: %d " -#: readelf.c:6405 +#: readelf.c:6597 #, c-format -msgid " Offset into .debug_info section: %ld\n" -msgstr " Offset i .debug_info-sektionen: %ld\n" +msgid "Name: %s\n" +msgstr "Navn: %s\n" -#: readelf.c:6407 +#: readelf.c:6599 #, c-format -msgid " Size of area in .debug_info section: %ld\n" -msgstr " Strl. på omr. i .debug_info-sekt.: %ld\n" +msgid "Name index: %ld\n" +msgstr "Navneindeks: %ld\n" + +#: readelf.c:6616 +#, c-format +msgid " %#06x: Parent %d: %s\n" +msgstr " %#06x: Forælder %d: %s\n" + +#: readelf.c:6619 +#, c-format +msgid " %#06x: Parent %d, name index: %ld\n" +msgstr " %#06x: Forælder %d, navneindeks: %ld\n" + +#: readelf.c:6623 +#, fuzzy, c-format +msgid " Version def aux past end of section\n" +msgstr "versiondefinitionssektion" + +#: readelf.c:6628 +#, fuzzy, c-format +msgid " Version definition past end of section\n" +msgstr "versiondefinitionssektion" -#: readelf.c:6410 +#: readelf.c:6643 +#, fuzzy, c-format msgid "" "\n" -" Offset\tName\n" +"Version needs section '%s' contains %u entries:\n" msgstr "" "\n" -" Offset\tNavn\n" +"Versionbehovssektion \"%s\" indeholder %ld poster:\n" -#: readelf.c:6501 +#: readelf.c:6646 #, c-format -msgid "Unknown TAG value: %lx" -msgstr "Ukendt TAG-værdi: %lx" +msgid " Addr: 0x" +msgstr " Adr: 0x" -#: readelf.c:6612 -#, c-format -msgid "Unknown AT value: %lx" -msgstr "Ukendt AT-værdi: %lx" +#: readelf.c:6656 +msgid "version need section" +msgstr "versionsbehovssektion" -#: readelf.c:6649 +#: readelf.c:6681 #, c-format -msgid "Unknown FORM value: %lx" -msgstr "Ukendt FORM-værdi: %lx" +msgid " %#06x: Version: %d" +msgstr " %#06x: Version: %d" -#: readelf.c:6848 +#: readelf.c:6684 #, c-format -msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" -msgstr " DW_MACINFO_start_file - linje: %d filnr: %d\n" - -#: readelf.c:6853 -msgid " DW_MACINFO_end_file\n" -msgstr " DW_MACINFO_end_file\n" +msgid " File: %s" +msgstr " Fil: %s" -#: readelf.c:6861 +#: readelf.c:6686 #, c-format -msgid " DW_MACINFO_define - lineno : %d macro : %s\n" -msgstr " DW_MACINFO_define - linje : %d makro : %s\n" +msgid " File: %lx" +msgstr " Fil: %lx" -#: readelf.c:6869 +#: readelf.c:6688 #, c-format -msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" -msgstr " DW_MACINFO_undef - linje : %d makro : %s\n" +msgid " Cnt: %d\n" +msgstr " Ant: %d\n" -#: readelf.c:6880 -#, c-format -msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" -msgstr " DW_MACINFO_vendor_ext - konstant : %d streng : %s\n" +#: readelf.c:6708 +#, fuzzy, c-format +msgid " %#06x: Name: %s" +msgstr " %#06x: Navn: %s" -#: readelf.c:6908 -msgid " Number TAG\n" -msgstr " Nummer TAG\n" +#: readelf.c:6711 +#, fuzzy, c-format +msgid " %#06x: Name index: %lx" +msgstr " %#06x: Navneindeks: %lx" -#: readelf.c:6914 +#: readelf.c:6714 #, c-format -msgid " %ld %s [%s]\n" -msgstr " %ld %s [%s]\n" +msgid " Flags: %s Version: %d\n" +msgstr " Flag: %s Version: %d\n" -#: readelf.c:6917 -msgid "has children" -msgstr "har børn" +#: readelf.c:6721 +#, fuzzy, c-format +msgid " Version need aux past end of section\n" +msgstr "versionsbehovssektion" -#: readelf.c:6917 -msgid "no children" -msgstr "ingen børn" +#: readelf.c:6726 +#, fuzzy, c-format +msgid " Version need past end of section\n" +msgstr "versionsbehovssektion" + +#: readelf.c:6760 +msgid "version string table" +msgstr "versionsstrengtabel" -#: readelf.c:6921 +#: readelf.c:6764 #, c-format -msgid " %-18s %s\n" -msgstr " %-18s %s\n" +msgid "" +"\n" +"Version symbols section '%s' contains %d entries:\n" +msgstr "" +"\n" +"Versionsymbolssektion \"%s\" indeholder %d poster:\n" -#: readelf.c:6942 +#: readelf.c:6767 #, c-format -msgid " %lu byte block: " -msgstr " %lu byte-blok: " +msgid " Addr: " +msgstr " Adr: " -#: readelf.c:7265 -msgid "(User defined location op)" -msgstr "(Brugerdefineret plads-op)" +#: readelf.c:6777 +msgid "version symbol data" +msgstr "versionsymbolsdata" -#: readelf.c:7267 -msgid "(Unknown location op)" -msgstr "(Ukendt plads-op)" +#: readelf.c:6804 +msgid " 0 (*local*) " +msgstr " 0 (*lokal*) " -#: readelf.c:7305 -msgid "debug_loc section data" -msgstr "debug_loc sektionsdata" +#: readelf.c:6808 +msgid " 1 (*global*) " +msgstr " 1 (*global*) " -#: readelf.c:7336 -msgid "" -"\n" -"The .debug_loc section is empty.\n" -msgstr "" -"\n" -".debug_loc-sektionen er tom.\n" +#: readelf.c:6845 readelf.c:7512 +msgid "version need" +msgstr "versionsbehov" + +#: readelf.c:6855 +msgid "version need aux (2)" +msgstr "ydre versionsbehov (2)" + +#: readelf.c:6870 readelf.c:6925 +#, fuzzy +msgid "*invalid*" +msgstr "ugyldigt tal" + +#: readelf.c:6900 readelf.c:7577 +msgid "version def" +msgstr "versionsdef." + +#: readelf.c:6920 readelf.c:7592 +msgid "version def aux" +msgstr "ydre versionsdef." -#: readelf.c:7339 +#: readelf.c:6954 +#, c-format msgid "" -"Contents of the .debug_loc section:\n" "\n" +"No version information found in this file.\n" msgstr "" -"Indhold i .debug_loc-sektionen:\n" "\n" +"Der fandtes ingen versionsinformation i denne fil.\n" -#: readelf.c:7340 -msgid "" -"\n" -" Offset Begin End Expression\n" +#: readelf.c:7075 +#, c-format +msgid ": %x" msgstr "" -#: readelf.c:7412 -msgid "debug_str section data" -msgstr "debug_str sektionsdata" +#: readelf.c:7133 +msgid "Unable to read in dynamic data\n" +msgstr "Kan ikke indlæse de dynamiske data\n" -#: readelf.c:7431 -msgid "" -msgstr "" +#: readelf.c:7224 readelf.c:7264 readelf.c:7288 readelf.c:7318 readelf.c:7342 +#, fuzzy +msgid "Unable to seek to start of dynamic information\n" +msgstr "Kan ikke søge til begyndelsen af den dynamiske information" -#: readelf.c:7434 -msgid "" -msgstr "" +#: readelf.c:7230 readelf.c:7270 +msgid "Failed to read in number of buckets\n" +msgstr "Mislykkedes at indlæse antal spande\n" -#: readelf.c:7454 -msgid "" -"\n" -"The .debug_str section is empty.\n" -msgstr "" -"\n" -".debug_str-sektionen er tom.\n" +#: readelf.c:7236 +msgid "Failed to read in number of chains\n" +msgstr "Mislykkedes at indlæse antal kæder\n" + +#: readelf.c:7326 +#, fuzzy +msgid "Failed to determine last chain length\n" +msgstr "Mislykkedes at indlæse antal kæder\n" -#: readelf.c:7458 +#: readelf.c:7363 +#, c-format msgid "" -"Contents of the .debug_str section:\n" "\n" +"Symbol table for image:\n" msgstr "" -"Indhold i .debug_str-sektionen:\n" "\n" +"Symboltabel for filbilleder:\n" -#: readelf.c:7629 +#: readelf.c:7365 readelf.c:7383 #, c-format -msgid " (indirect string, offset: 0x%lx): " -msgstr " (indirekte streng, offset: 0x%lx): " +msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" +msgstr " Nr Spd: Værdi Strl Type Bind Synl Idx Navn\n" -#: readelf.c:7638 +#: readelf.c:7367 readelf.c:7385 #, c-format -msgid "Unrecognized form: %d\n" -msgstr "Ukendt formular: %d\n" - -#: readelf.c:7651 -msgid "(not inlined)" -msgstr "(ikke inlined)" - -#: readelf.c:7652 -msgid "(inlined)" -msgstr "(inlined)" - -#: readelf.c:7653 -msgid "(declared as inline but ignored)" -msgstr "(deklareret som inline, men ignoreret)" - -#: readelf.c:7654 -msgid "(declared as inline and inlined)" -msgstr "(deklareret som inline og inlined)" +msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" +msgstr " Nr Spd: Værdi Strl Type Bind Synl Idx Navn\n" -#: readelf.c:7655 -#, c-format -msgid " (Unknown inline attribute value: %lx)" -msgstr " (ukendt inlineattributværdi: %lx)" +#: readelf.c:7381 +#, fuzzy, c-format +msgid "" +"\n" +"Symbol table of `.gnu.hash' for image:\n" +msgstr "" +"\n" +"Symboltabel for filbilleder:\n" -#: readelf.c:7826 readelf.c:8029 +#: readelf.c:7421 #, c-format msgid "" -"The section %s contains:\n" "\n" +"Symbol table '%s' contains %lu entries:\n" msgstr "" -"Sektion %s indeholder:\n" "\n" +"Symboltabel \"%s\" indeholder %lu poster:\n" -#: readelf.c:7850 -msgid "64-bit DWARF debug info is not supported yet.\n" -msgstr "64-bit DWARF-fejlsøgningsinfo understøttes ikke endnu.\n" - -#: readelf.c:7919 +#: readelf.c:7425 #, c-format -msgid " Compilation Unit @ %lx:\n" -msgstr " Oversættelsesenhed @ %lx:\n" +msgid " Num: Value Size Type Bind Vis Ndx Name\n" +msgstr " Nr: Værdi Strl Type Bind Synl Idx Navn\n" -#: readelf.c:7920 +#: readelf.c:7427 #, c-format -msgid " Length: %ld\n" -msgstr " Længde: %ld\n" +msgid " Num: Value Size Type Bind Vis Ndx Name\n" +msgstr " Nr: Værdi Strl Type Bind Synl Idx Navn\n" -#: readelf.c:7921 -#, c-format -msgid " Version: %d\n" -msgstr " Version: %d\n" +#: readelf.c:7483 +msgid "version data" +msgstr "versionsdata" -#: readelf.c:7922 -#, c-format -msgid " Abbrev Offset: %ld\n" -msgstr " Fork.-offset: %ld\n" +#: readelf.c:7525 +msgid "version need aux (3)" +msgstr "ydre versionsbehov (3)" + +#: readelf.c:7552 +#, fuzzy +msgid "bad dynamic symbol\n" +msgstr "fejlagtigt dynamisk symbol" -#: readelf.c:7923 +#: readelf.c:7616 #, c-format -msgid " Pointer Size: %d\n" -msgstr " Pegerstørrelse: %d\n" +msgid "" +"\n" +"Dynamic symbol information is not available for displaying symbols.\n" +msgstr "" +"\n" +"Informationen om dynamiske symboler er ikke tilgænglig til at vise symboler.\n" -#: readelf.c:7927 -msgid "Only version 2 DWARF debug information is currently supported.\n" -msgstr "Kun version 2 af DWARF fejlsøgningsinformation understøttes i øjeblikket.\n" +#: readelf.c:7628 +#, fuzzy, c-format +msgid "" +"\n" +"Histogram for bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histogram over spandenes listelængde (totalt %d spande):\n" -#: readelf.c:7948 -msgid "Unable to locate .debug_abbrev section!\n" -msgstr "Kan ikke finde nogen .debug_abbrev-sektion!\n" +#: readelf.c:7630 readelf.c:7700 +#, c-format +msgid " Length Number %% of total Coverage\n" +msgstr " Længde Nummer %% af alle Dækning\n" -#: readelf.c:7954 -msgid "debug_abbrev section data" -msgstr "debug_abbrev sektionsdata" +#: readelf.c:7698 +#, fuzzy, c-format +msgid "" +"\n" +"Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histogram over spandenes listelængde (totalt %d spande):\n" -#: readelf.c:7991 +#: readelf.c:7764 #, c-format -msgid "Unable to locate entry %lu in the abbreviation table\n" -msgstr "Kan ikke finde post %lu i forkortelsestabellen\n" +msgid "" +"\n" +"Dynamic info segment at offset 0x%lx contains %d entries:\n" +msgstr "" +"\n" +"Dynamisk info-segment på offset 0x%lx indeholder %d poster:\n" -#: readelf.c:7996 +#: readelf.c:7767 #, c-format -msgid " <%d><%lx>: Abbrev Number: %lu (%s)\n" -msgstr " <%d><%lx>: Fork.-nummer: %lu (%s)\n" - -#: readelf.c:8050 -msgid "64-bit DWARF aranges are not supported yet.\n" -msgstr "64-bit DWARF-a-intervaller understøttes ikke endnu.\n" - -#: readelf.c:8056 -msgid "Only DWARF 2 aranges are currently supported.\n" -msgstr "Kun DWARF2's a-intervaller understøttes i øjeblikket.\n" +msgid " Num: Name BoundTo Flags\n" +msgstr " Nr: Navn Bind til Flag\n" -#: readelf.c:8060 +#: readelf.c:7819 #, c-format -msgid " Length: %ld\n" -msgstr " Længde: %ld\n" +msgid "" +"\n" +"Assembly dump of section %s\n" +msgstr "" +"\n" +"Disassembleringsudskrift af sektion %s\n" -#: readelf.c:8061 +#: readelf.c:7844 readelf.c:7922 #, c-format -msgid " Version: %d\n" -msgstr " Version: %d\n" +msgid "" +"\n" +"Section '%s' has no data to dump.\n" +msgstr "" +"\n" +"Sektion \"%s\" har ingen data at skrive ud.\n" -#: readelf.c:8062 -#, c-format -msgid " Offset into .debug_info: %lx\n" -msgstr " Offset i .debug_info: %lx\n" +#: readelf.c:7855 +#, fuzzy, c-format +msgid "" +"\n" +"String dump of section '%s':\n" +msgstr "" +"\n" +"Hex.udskrift af sektion \"%s\":\n" -#: readelf.c:8063 +#: readelf.c:7873 #, c-format -msgid " Pointer Size: %d\n" -msgstr " Pegerstørrelse: %d\n" +msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr "" -#: readelf.c:8064 -#, c-format -msgid " Segment Size: %d\n" -msgstr " Segmentstørrelse: %d\n" +#: readelf.c:7900 +#, fuzzy, c-format +msgid " No strings found in this section." +msgstr "" +"\n" +"Der fandtes ingen versionsinformation i denne fil.\n" -#: readelf.c:8066 +#: readelf.c:7927 +#, c-format msgid "" "\n" -" Address Length\n" +"Hex dump of section '%s':\n" msgstr "" "\n" -" Adresselængde\n" +"Hex.udskrift af sektion \"%s\":\n" -#: readelf.c:8248 +#: readelf.c:7952 #, c-format -msgid "The section %s contains:\n" -msgstr "Sektion %s indeholder:\n" +msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr "" -#: readelf.c:8271 -msgid "64-bit DWARF format frames are not supported yet.\n" -msgstr "64-bit DWARF-formatskabeloner understøttes ikke endnu.\n" +#: readelf.c:8135 +#, c-format +msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n" +msgstr "" -#: readelf.c:8820 +#: readelf.c:8432 #, c-format -msgid "Displaying the debug contents of section %s is not yet supported.\n" -msgstr "Visning af fejlsøgningsindeholdet i sektion %s understøttes ikke endnu.\n" +msgid "unable to apply unsupported reloc type %d to section %s\n" +msgstr "" + +#: readelf.c:8440 +#, c-format +msgid "skipping invalid relocation offset 0x%lx in section %s\n" +msgstr "" + +#: readelf.c:8461 +#, fuzzy, c-format +msgid "skipping unexpected symbol type %s in %ld'th relocation in section %s\n" +msgstr "Hopper over uventet relokeringstype %s\n" -#: readelf.c:8886 +#: readelf.c:8503 +#, fuzzy, c-format +msgid "%s section data" +msgstr "sektionsdata" + +#: readelf.c:8568 #, c-format msgid "" "\n" @@ -3885,28 +4770,49 @@ msgstr "" "\n" "Sektion \"%s\" indeholder ingen fejlsøgningsdata.\n" -#: readelf.c:8891 readelf.c:8953 -msgid "debug section data" -msgstr "fejlsøgningssektionsdata" - -#: readelf.c:8907 +#: readelf.c:8603 #, c-format msgid "Unrecognized debug section: %s\n" msgstr "Ukendt fejlsøgningssektion: %s\n" -#: readelf.c:8981 -msgid "Some sections were not dumped because they do not exist!\n" +#: readelf.c:8631 +#, fuzzy, c-format +msgid "Section '%s' was not dumped because it does not exist!\n" +msgstr "Nogen sektioner blev ikke skrevet ud da de ikke eksisterer!\n" + +#: readelf.c:8669 +#, fuzzy, c-format +msgid "Section %d was not dumped because it does not exist!\n" msgstr "Nogen sektioner blev ikke skrevet ud da de ikke eksisterer!\n" -#: readelf.c:9054 readelf.c:9418 +#: readelf.c:9118 +msgid "attributes" +msgstr "" + +#: readelf.c:9139 +#, c-format +msgid "ERROR: Bad section length (%d > %d)\n" +msgstr "" + +#: readelf.c:9170 +#, c-format +msgid "ERROR: Bad subsection length (%d > %d)\n" +msgstr "" + +#: readelf.c:9229 +#, fuzzy, c-format +msgid "Unknown format '%c'\n" +msgstr "ukendt formattype \"%s\"" + +#: readelf.c:9382 readelf.c:9897 msgid "liblist" msgstr "biblioteksliste" -#: readelf.c:9139 +#: readelf.c:9469 msgid "options" msgstr "flag" -#: readelf.c:9170 +#: readelf.c:9499 #, c-format msgid "" "\n" @@ -3916,34 +4822,107 @@ msgstr "" "Sektion \"%s\" indeholder %d poster:\n" # BUGG: Fejl i originalet? -#: readelf.c:9331 +#: readelf.c:9660 #, fuzzy -msgid "conflict list found without a dynamic symbol table" +msgid "conflict list found without a dynamic symbol table\n" msgstr "konfliktliste uden tabel" -#: readelf.c:9349 readelf.c:9365 +#: readelf.c:9676 readelf.c:9690 msgid "conflict" msgstr "konflikt" -#: readelf.c:9375 -#, c-format +#: readelf.c:9700 +#, fuzzy, c-format msgid "" "\n" -"Section '.conflict' contains %ld entries:\n" +"Section '.conflict' contains %lu entries:\n" msgstr "" "\n" "Sektion \".conflict\" indeholder %ld poster:\n" -#: readelf.c:9377 +#: readelf.c:9702 msgid " Num: Index Value Name" msgstr " Num: Indeks Værdi Navn" -#: readelf.c:9426 +#: readelf.c:9734 +msgid "GOT" +msgstr "" + +#: readelf.c:9735 +#, c-format +msgid "" +"\n" +"Primary GOT:\n" +msgstr "" + +#: readelf.c:9736 +#, c-format +msgid " Canonical gp value: " +msgstr "" + +#: readelf.c:9740 readelf.c:9831 +#, c-format +msgid " Reserved entries:\n" +msgstr "" + +#: readelf.c:9741 +#, c-format +msgid " %*s %10s %*s Purpose\n" +msgstr "" + +#: readelf.c:9757 +#, c-format +msgid " Local entries:\n" +msgstr "" + +#: readelf.c:9758 +#, fuzzy, c-format +msgid " %*s %10s %*s\n" +msgstr " %-18s %s\n" + +#: readelf.c:9773 +#, c-format +msgid " Global entries:\n" +msgstr "" + +#: readelf.c:9774 +#, c-format +msgid " %*s %10s %*s %*s %-7s %3s %s\n" +msgstr "" + +#: readelf.c:9829 +msgid "PLT GOT" +msgstr "" + +#: readelf.c:9830 +#, c-format +msgid "" +"\n" +"PLT GOT:\n" +"\n" +msgstr "" + +#: readelf.c:9832 +#, c-format +msgid " %*s %*s Purpose\n" +msgstr "" + +#: readelf.c:9840 +#, c-format +msgid " Entries:\n" +msgstr "" + +#: readelf.c:9841 +#, c-format +msgid " %*s %*s %*s %-7s %3s %s\n" +msgstr "" + +#: readelf.c:9904 #, fuzzy msgid "liblist string table" msgstr "strengtabel" -#: readelf.c:9435 +#: readelf.c:9914 #, fuzzy, c-format msgid "" "\n" @@ -3952,540 +4931,740 @@ msgstr "" "\n" "Versionbehovssektion \"%s\" indeholder %ld poster:\n" -#: readelf.c:9484 +#: readelf.c:9967 +msgid "NT_AUXV (auxiliary vector)" +msgstr "" + +#: readelf.c:9969 msgid "NT_PRSTATUS (prstatus structure)" msgstr "NT_PRSTATUS (prstatus-struktur)" -#: readelf.c:9485 +#: readelf.c:9971 msgid "NT_FPREGSET (floating point registers)" msgstr "NT_FPREGSET (flydendetalsregister)" -#: readelf.c:9486 +#: readelf.c:9973 msgid "NT_PRPSINFO (prpsinfo structure)" msgstr "NT_PRPSINFO (prpsinfo-struktur)" -#: readelf.c:9487 +#: readelf.c:9975 msgid "NT_TASKSTRUCT (task structure)" msgstr "NT_TASKSTRUCT (task-struktur)" -#: readelf.c:9488 +#: readelf.c:9977 msgid "NT_PRXFPREG (user_xfpregs structure)" msgstr "NT_PRXFPREG (user_xfpregs-struktur)" -#: readelf.c:9489 +#: readelf.c:9979 +msgid "NT_PPC_VMX (ppc Altivec registers)" +msgstr "" + +#: readelf.c:9981 +msgid "NT_PPC_VSX (ppc VSX registers)" +msgstr "" + +#: readelf.c:9983 msgid "NT_PSTATUS (pstatus structure)" msgstr "NT_PSTATUS (pstatus-struktur)" -#: readelf.c:9490 +#: readelf.c:9985 msgid "NT_FPREGS (floating point registers)" msgstr "NT_FPREGS (flydendetalsregister)" -#: readelf.c:9491 -msgid "NT_PSINFO (psinfo structure)" -msgstr "NT_PSINFO (psinfo-struktur)" +#: readelf.c:9987 +msgid "NT_PSINFO (psinfo structure)" +msgstr "NT_PSINFO (psinfo-struktur)" + +#: readelf.c:9989 +msgid "NT_LWPSTATUS (lwpstatus_t structure)" +msgstr "NT_LWPSTATUS (lwpstatus_t-struktur)" + +#: readelf.c:9991 +msgid "NT_LWPSINFO (lwpsinfo_t structure)" +msgstr "NT_LWPSINFO (lwpsinfo_t-struktur)" + +# BUG: Stavfejl i originalet (str>ucuc Set the binary file format\n" +" @ Read options from \n" " -h --help Display this information\n" " -v --version Display the program's version\n" "\n" @@ -4501,240 +5680,354 @@ msgstr "ugyldigt argument til --format: %s" msgid "Invalid radix: %s\n" msgstr "Ugyldig talbase: %s\n" -#: srconv.c:1953 -#, fuzzy +#: srconv.c:1731 +#, fuzzy, c-format msgid "Convert a COFF object file into a SYSROFF object file\n" msgstr "%s: Konverterer en COFF-objektfil til en SYSROFF-objektfil\n" -#: srconv.c:1954 +#: srconv.c:1732 +#, c-format msgid "" " The options are:\n" -" -q --quick (Obsolete - ignoerd)\n" +" -q --quick (Obsolete - ignored)\n" " -n --noprescan Do not perform a scan to convert commons into defs\n" " -d --debug Display information about what is being done\n" +" @ Read options from \n" " -h --help Display this information\n" " -v --version Print the program's version number\n" msgstr "" -#: srconv.c:2099 +#: srconv.c:1878 #, c-format msgid "unable to open output file %s" msgstr "kan ikke åbne uddatafil %s" -#: stabs.c:343 stabs.c:1759 +#: stabs.c:328 stabs.c:1706 msgid "numeric overflow" msgstr "numerisk overløb" # FIXME -#: stabs.c:354 +#: stabs.c:338 #, c-format msgid "Bad stab: %s\n" msgstr "Fejlagtig stab: %s\n" -#: stabs.c:364 +#: stabs.c:346 #, c-format msgid "Warning: %s: %s\n" msgstr "Advarsel: %s: %s\n" -#: stabs.c:485 +#: stabs.c:456 +#, c-format msgid "N_LBRAC not within function\n" msgstr "N_LBRAC ikke inde i funktion\n" -#: stabs.c:524 +#: stabs.c:495 +#, c-format msgid "Too many N_RBRACs\n" msgstr "For mange N_RBRAC's\n" -#: stabs.c:769 +#: stabs.c:736 msgid "unknown C++ encoded name" msgstr "ukendt C++-kodet navn" #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabs.c:1296 +#: stabs.c:1251 msgid "unrecognized cross reference type" msgstr "ukendt krydsreferencetype" #. Does this actually ever happen? Is that why we are worrying #. about dealing with it rather than just calling error_type? -#: stabs.c:1851 +#: stabs.c:1798 msgid "missing index type" msgstr "manglende indekstype" -#: stabs.c:2178 +#: stabs.c:2112 msgid "unknown virtual character for baseclass" msgstr "ukendt virtuelt tegn for baseklasse" # FIXME -#: stabs.c:2196 +#: stabs.c:2130 msgid "unknown visibility character for baseclass" msgstr "ukendt synlighedskarakter for baseklasse" -#: stabs.c:2388 +#: stabs.c:2316 msgid "unnamed $vb type" msgstr "$vb-type uden navn" -#: stabs.c:2394 +#: stabs.c:2322 msgid "unrecognized C++ abbreviation" msgstr "ukendt C++-forkortelse" # FIXME -#: stabs.c:2474 +#: stabs.c:2398 msgid "unknown visibility character for field" msgstr "ukendt synlighedskarakter for felt" -#: stabs.c:2730 +#: stabs.c:2650 msgid "const/volatile indicator missing" msgstr "const/volatile-indikator mangler" -#: stabs.c:2970 +#: stabs.c:2886 #, c-format msgid "No mangling for \"%s\"\n" msgstr "Ingen kodning af \"%s\"\n" -#: stabs.c:3283 +#: stabs.c:3186 msgid "Undefined N_EXCL" msgstr "Udefineret N_EXCL" -#: stabs.c:3371 +#: stabs.c:3266 #, c-format msgid "Type file number %d out of range\n" msgstr "Typens filnummer %d uden for sit interval\n" -#: stabs.c:3376 +#: stabs.c:3271 #, c-format msgid "Type index number %d out of range\n" msgstr "Typens indeksnummer %d uden for sit interval\n" -#: stabs.c:3463 +#: stabs.c:3350 #, c-format msgid "Unrecognized XCOFF type %d\n" msgstr "Ukendt XCOFF-type %d\n" -#: stabs.c:3762 +#: stabs.c:3642 #, c-format msgid "bad mangled name `%s'\n" msgstr "fejlagtigt kodet navn \"%s\"\n" -#: stabs.c:3858 +#: stabs.c:3737 +#, c-format msgid "no argument types in mangled string\n" msgstr "ingen argumenttype i kodet streng\n" -#: strings.c:200 +#: stabs.c:5091 +#, fuzzy, c-format +msgid "Demangled name is not a function\n" +msgstr "C++-standardværdier ikke inde i en funktion" + +#: stabs.c:5133 +#, c-format +msgid "Unexpected type in v3 arglist demangling\n" +msgstr "" + +#: stabs.c:5200 +#, fuzzy, c-format +msgid "Unrecognized demangle component %d\n" +msgstr "Ukendt fejlsøgningsargument \"%s\"\n" + +#: stabs.c:5252 +#, fuzzy, c-format +msgid "Failed to print demangled template\n" +msgstr "%s: Mislykkedes at læse filhoved\n" + +#: stabs.c:5332 #, c-format -msgid "invalid number %s" -msgstr "ugyldigt tal %s" +msgid "Couldn't get demangled builtin type\n" +msgstr "" -#: strings.c:640 +#: stabs.c:5381 #, c-format -msgid "invalid integer argument %s" -msgstr "ugyldigt heltalsargument %s" +msgid "Unexpected demangled varargs\n" +msgstr "" + +#: stabs.c:5388 +#, fuzzy, c-format +msgid "Unrecognized demangled builtin type\n" +msgstr "ukendt C++-standardtype" + +#: strings.c:251 +#, fuzzy, c-format +msgid "invalid minimum string length %d" +msgstr "ugyldig strenglængde" -#: strings.c:651 +#: strings.c:648 +#, c-format msgid " Display printable strings in [file(s)] (stdin by default)\n" msgstr "" -#: strings.c:652 +#: strings.c:649 +#, c-format msgid "" " The options are:\n" " -a - --all Scan the entire file, not just the data section\n" " -f --print-file-name Print the name of the file before each string\n" " -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n" -" - least [number] characters (default 4).\n" -" -t --radix={o,x,d} Print the location of the string in base 8, 10 or 16\n" +" - least [number] characters (default 4).\n" +" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n" " -o An alias for --radix=o\n" " -T --target= Specify the binary file format\n" -" -e --encoding={s,b,l,B,L} Select character size and endianness:\n" -" s = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" +" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n" +" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" +" @ Read options from \n" " -h --help Display this information\n" " -v --version Print the program's version number\n" msgstr "" -#: sysdump.c:768 -#, fuzzy +#: sysdump.c:648 +#, fuzzy, c-format msgid "Print a human readable interpretation of a SYSROFF object file\n" msgstr "%s: Skriv en menneskeligt læsbar tolkning af en SYSROFF-objektfil\n" -#: sysdump.c:769 +#: sysdump.c:649 +#, c-format msgid "" " The options are:\n" " -h --help Display this information\n" " -v --version Print the program's version number\n" msgstr "" -#: sysdump.c:836 +#: sysdump.c:716 #, c-format msgid "cannot open input file %s" msgstr "kan ikke åbne inddatafil %s" #: version.c:35 -msgid "Copyright 2002 Free Software Foundation, Inc.\n" +#, fuzzy, c-format +msgid "Copyright 2007 Free Software Foundation, Inc.\n" msgstr "Copyright 2002 Free Software Foundation, Inc.\n" #: version.c:36 +#, fuzzy, 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" +"the GNU General Public License version 3 or (at your option) any later version.\n" +"This program has absolutely no warranty.\n" msgstr "" "Dette program er frit programmel; du kan distribuere det videre under betingelserne\n" "i GNU General Public License. Dette program har ingen som helst garantier.\n" -#: windres.c:239 +#: windmc.c:195 +#, fuzzy, c-format +msgid "can't create %s file ,%s' for output.\n" +msgstr "kan ikke åbne \"%s\" for udskrivning: %s" + +#: windmc.c:203 +#, fuzzy, c-format +msgid "Usage: %s [option(s)] [input-file]\n" +msgstr "Brug: %s [flag] inddatafil\n" + +#: windmc.c:205 +#, c-format +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= Set codepage when reading mc text file\n" +" -d --decimal_values Print values to text files decimal\n" +" -e --extension= Set header extension used on export header file\n" +" -F --target Specify output target for endianess.\n" +" -h --headerdir= 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= 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= Set codepage used for writing text file\n" +" -r --rcdir= Set the export directory for rc files\n" +" -x --xdbg= Where to create the .dbg C include file\n" +" that maps message ID's to their symbolic name.\n" +msgstr "" + +#: windmc.c:225 +#, fuzzy, 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 "" +" -h --help Vis denne hjælpetekst\n" +" -V --version Vis versionsinformation\n" + +#: windmc.c:296 windres.c:415 +#, c-format +msgid "%s: warning: " +msgstr "%s: advarsel: " + +#: windmc.c:297 +#, c-format +msgid "A codepage was specified switch ,%s' and UTF16.\n" +msgstr "" + +#: windmc.c:298 +#, c-format +msgid "\tcodepage settings are ignored.\n" +msgstr "" + +#: windmc.c:342 +msgid "try to add a ill language." +msgstr "" + +#: windmc.c:1151 +#, fuzzy, c-format +msgid "unable to open file ,%s' for input.\n" +msgstr "kan ikke åbne uddatafil %s" + +#: windmc.c:1170 +msgid "input file does not seems to be UFT16.\n" +msgstr "" + +#: windres.c:220 #, c-format msgid "can't open %s `%s': %s" msgstr "kan ikke åbne %s \"%s\": %s" -#: windres.c:418 +#: windres.c:394 +#, c-format msgid ": expected to be a directory\n" msgstr ": forventedes at være et katalog\n" -#: windres.c:430 +#: windres.c:406 +#, c-format msgid ": expected to be a leaf\n" msgstr ": forventedes at være et blad\n" -#: windres.c:439 +#: windres.c:417 #, c-format -msgid "%s: warning: " -msgstr "%s: advarsel: " - -#: windres.c:441 msgid ": duplicate value\n" msgstr ": dublet af værdi\n" -#: windres.c:602 +#: windres.c:567 #, c-format msgid "unknown format type `%s'" msgstr "ukendt formattype \"%s\"" -#: windres.c:603 +#: windres.c:568 #, c-format msgid "%s: supported formats:" msgstr "%s: formater som håndteres:" #. Otherwise, we give up. -#: windres.c:688 -#, c-format -msgid "can not determine type of file `%s'; use the -I option" +#: windres.c:651 +#, fuzzy, c-format +msgid "can not determine type of file `%s'; use the -J option" msgstr "kan ikke bestemme \"%s\"'s filtype; brug flag -I" -#: windres.c:702 +#: windres.c:663 #, fuzzy, c-format msgid "Usage: %s [option(s)] [input-file] [output-file]\n" msgstr "Brug: %s [flag] [in-fil] [ud-fil]\n" -#: windres.c:704 -#, fuzzy +#: windres.c:665 +#, fuzzy, c-format msgid "" " The options are:\n" " -i --input= Name input file\n" " -o --output= Name output file\n" -" -I --input-format= Specify input format\n" +" -J --input-format= Specify input format\n" " -O --output-format= Specify output format\n" " -F --target= Specify COFF target\n" " --preprocessor= Program to use to preprocess rc file\n" -" --include-dir= Include directory when preprocessing rc file\n" +" -I --include-dir= Include directory when preprocessing rc file\n" " -D --define [=] Define SYM when preprocessing rc file\n" +" -U --undefine Undefine SYM when preprocessing rc file\n" " -v --verbose Verbose - tells you what it's doing\n" -" --language= Set language when reading rc file\n" +" -c --codepage= Specify default codepage\n" +" -l --language= Set language when reading rc file\n" " --use-temp-file Use a temporary file instead of popen to read\n" " the preprocessor output\n" " --no-use-temp-file Use popen (default)\n" @@ -4757,19 +6050,25 @@ msgstr "" " af uddata fra præprocessoren\n" " --no-use-temp-file Brug popen (standard)\n" -#: windres.c:719 +#: windres.c:682 +#, c-format msgid " --yydebug Turn on parser debugging\n" msgstr " --yydebug Aktivér tolkens fejlsøgning\n" -#: windres.c:722 +#: windres.c:685 +#, fuzzy, c-format msgid "" +" -r Ignored for compatibility with rc\n" +" @ Read options from \n" " -h --help Print this help message\n" " -V --version Print version information\n" msgstr "" -" -h --help Vis denne hjælpetekst\n" -" -V --version Vis versionsinformation\n" +" Valgmulighederne er:\n" +" -h --help Vis denne hjælpebesked\n" +" -V --version Vis versionsinformation\n" -#: windres.c:725 +#: windres.c:690 +#, c-format msgid "" "FORMAT is one of rc, res, or coff, and is deduced from the file name\n" "extension if not specified. A single file name is an input file.\n" @@ -4780,21 +6079,289 @@ msgstr "" "inddatafil betyder standard-ind, med format rc. Ingen uddatafil betyder\n" "standard-ud, med format rc.\n" -#: windres.c:988 +#: windres.c:848 +#, fuzzy +msgid "invalid codepage specified.\n" +msgstr "ingen kommandoflag blev angivet" + +#: windres.c:863 +#, fuzzy +msgid "invalid option -f\n" +msgstr "Ugyldigt flag \"-%c\"\n" + +#: windres.c:868 +#, fuzzy +msgid "No filename following the -fo option.\n" +msgstr "" +"\n" +" Følgende flag er frivillige:\n" + +#: windres.c:927 +#, c-format +msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" +msgstr "" + +#: windres.c:1037 msgid "no resources" msgstr "ingen resurser" -#: wrstabs.c:366 wrstabs.c:2026 +#: wrstabs.c:353 wrstabs.c:1916 #, c-format msgid "string_hash_lookup failed: %s" msgstr "string_hash_lookup mislykkedes: %s" -#: wrstabs.c:666 +#: wrstabs.c:636 #, c-format msgid "stab_int_type: bad size %u" msgstr "stab_int_type: fejlagtig størrelse %u" -#: wrstabs.c:1466 +#: wrstabs.c:1394 #, c-format msgid "%s: warning: unknown size for field `%s' in struct" msgstr "%s: advarsel: ukendt størrelsen på felt \"%s\" i strukturen" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "\n" +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "\n" + +#~ msgid "debug_record_variable: no current block" +#~ msgstr "debug_record_variable: ingen aktuel blok" + +#~ msgid "set .nlmsections flags" +#~ msgstr "sæt .nlmsections-flag" + +#, fuzzy +#~ msgid "" +#~ " -I --input-target Assume input file is in format \n" +#~ " -O --output-target Create an output file in format \n" +#~ " -B --binary-architecture Set arch of output file, when input is binary\n" +#~ " -F --target Set both input and output format to \n" +#~ " --debugging Convert debugging information, if possible\n" +#~ " -p --preserve-dates Copy modified/access timestamps to the output\n" +#~ " -j --only-section Only copy section into the output\n" +#~ " -R --remove-section Remove section from the output\n" +#~ " -S --strip-all Remove all symbol and relocation information\n" +#~ " -g --strip-debug Remove all debugging symbols\n" +#~ " --strip-unneeded Remove all symbols not needed by relocations\n" +#~ " -N --strip-symbol Do not copy symbol \n" +#~ " -K --keep-symbol Only copy symbol \n" +#~ " -L --localize-symbol Force symbol to be marked as a local\n" +#~ " -G --keep-global-symbol Localize all symbols except \n" +#~ " -W --weaken-symbol Force symbol to be marked as a weak\n" +#~ " --weaken Force all global symbols to be marked as weak\n" +#~ " -x --discard-all Remove all non-global symbols\n" +#~ " -X --discard-locals Remove any compiler-generated symbols\n" +#~ " -i --interleave Only copy one out of every bytes\n" +#~ " -b --byte Select byte in every interleaved block\n" +#~ " --gap-fill Fill gaps between sections with \n" +#~ " --pad-to Pad the last section up to address \n" +#~ " --set-start Set the start address to \n" +#~ " {--change-start|--adjust-start} \n" +#~ " Add to the start address\n" +#~ " {--change-addresses|--adjust-vma} \n" +#~ " Add to LMA, VMA and start addresses\n" +#~ " {--change-section-address|--adjust-section-vma} {=|+|-}\n" +#~ " Change LMA and VMA of section by \n" +#~ " --change-section-lma {=|+|-}\n" +#~ " Change the LMA of section by \n" +#~ " --change-section-vma {=|+|-}\n" +#~ " Change the VMA of section by \n" +#~ " {--[no-]change-warnings|--[no-]adjust-warnings}\n" +#~ " Warn if a named section does not exist\n" +#~ " --set-section-flags =\n" +#~ " Set section 's properties to \n" +#~ " --add-section = Add section found in to output\n" +#~ " --rename-section =[,] Rename section to \n" +#~ " --change-leading-char Force output format's leading character style\n" +#~ " --remove-leading-char Remove leading character from global symbols\n" +#~ " --redefine-sym = Redefine symbol name to \n" +#~ " --srec-len Restrict the length of generated Srecords\n" +#~ " --srec-forceS3 Restrict the type of generated Srecords to S3\n" +#~ " --strip-symbols -N for all symbols listed in \n" +#~ " --keep-symbols -K for all symbols listed in \n" +#~ " --localize-symbols -L for all symbols listed in \n" +#~ " --keep-global-symbols -G for all symbols listed in \n" +#~ " --weaken-symbols -W for all symbols listed in \n" +#~ " --alt-machine-code Use alternate machine code for output\n" +#~ " -v --verbose List all object files modified\n" +#~ " -V --version Display this program's version number\n" +#~ " -h --help Display this output\n" +#~ msgstr "" +#~ " -I --input-target Antag inddatafilens format er \n" +#~ " -O --output-target Opret uddatafilen i formatet \n" +#~ " -B --binary-architecture Vælg arkitektur for udfil når inddata er binær\n" +#~ " -F --target Sætt både in- og udformatet til \n" +#~ " --debugging Konvertere fejlsøgningsinfo, om muligt\n" +#~ " -p --preserve-dates Kopiér ændrings/adgangtider til uddatan\n" +#~ " -j --only-section Kopiér kun sektion til uddatan\n" +#~ " -R --remove-section Fjern sektion fra uddatan\n" +#~ " -S --strip-all Fjern all symbol- og relokeringsinfo\n" +#~ " -g --strip-debug Fjern alle fejlsøgningssymboler\n" +#~ " --strip-unneeded Fjern symboler onødiga for relokering\n" +#~ " -N --strip-symbol Kopiér ikke symbol \n" +#~ " -K --keep-symbol Kopiér kun symbol \n" +#~ " -L --localize-symbol Markere symbol som lokal\n" +#~ " -G --keep-global-symbol Gør alle symboler lokale, forutom \n" +#~ " -W --weaken-symbol Markere symbol som vek\n" +#~ " --weaken Markere alle globale symboler som veka\n" +#~ " -x --discard-all Fjern alle ikke-globale symboler\n" +#~ " -X --discard-locals Fjern alle oversættergenererede symboler\n" +#~ " -i --interleave Kopiér kun en af hvert byte\n" +#~ " -b --byte Vælg ud 'e byten i hvert intervall\n" +#~ " --gap-fill Fyll luckor mellem sektionerne med \n" +#~ " --pad-to Fyll ud efter sidste sektionen frem til \n" +#~ " --set-start Sætt startadressen til \n" +#~ " {--change-start|--adjust-start} <økn>\n" +#~ " Tilføj <økn> til startadressen\n" +#~ " {--change-addresses|--adjust-vma} <økn>\n" +#~ " Tilføj <økn> til LMA, VMA og startedr.\n" +#~ " {--change-section-address|--adjust-section-vma} {=|+|-}\n" +#~ " Ændra LMA og VMA på sektion med \n" +#~ " --change-section-lma {=|+|-}\n" +#~ " Ændra LMA på sektion med \n" +#~ " --change-section-vma {=|+|-}\n" +#~ " Ændra VMA på sektion med \n" +#~ " {--[no-]change-warnings|--[no-]adjust-warnings}\n" +#~ " Advar (inte/[no-]) om en sektion ikke findes\n" +#~ " --set-section-flags =\n" +#~ " Sætt sektion s attribut til \n" +#~ " --add-section = Tilføj sektion i til uddatan\n" +#~ " --rename-section =[,] Skift navn på sektion til \n" +#~ " --change-leading-char Ændra til udformatets type af inledningstegn\n" +#~ " --remove-leading-char Fjern inledningstegn fra globale symboler\n" +#~ " --redefine-sym = Definere om ssymbolet med navn til \n" +#~ " --srec-len Begrænsa længden på genererede S-poster\n" +#~ " --srec-forceS3 Begrænsa typen af genererede S-poster til S3\n" +#~ " --strip-symbols -N for alle symboler som listes i \n" +#~ " --keep-symbols -K for alle symboler som listes i \n" +#~ " --localize-symbols -L for alle symboler som listes i \n" +#~ " --keep-global-symbols -G for alle symboler som listes i \n" +#~ " --weaken-symbols -W for alle symboler som listes i \n" +#~ " --alt-machine-code Brug alternativ maskinkode for uddata\n" +#~ " -v --verbose Lista alle forændrede objektfiler\n" +#~ " -V --version Vis programmets versionsinformation\n" +#~ " -h --help Vis denne hjælp\n" + +#~ msgid "cannot stat: %s: %s" +#~ msgstr "kan ikke tage status: %s: %s" + +#~ msgid "making" +#~ msgstr "fremstilling" + +#~ msgid "size" +#~ msgstr "størrelse" + +#~ msgid "vma" +#~ msgstr "vma" + +#~ msgid "alignment" +#~ msgstr "justering" + +#~ msgid "flags" +#~ msgstr "flag" + +#~ msgid "private data" +#~ msgstr "privat data" + +#~ msgid "%s: section `%s': error in %s: %s" +#~ msgstr "%s: sektion \"%s\": fejl på %s: %s" + +#~ msgid "%s: cannot stat: %s" +#~ msgstr "%s: kan ikke tage status: %s" + +#~ msgid "alternate machine code index must be positive" +#~ msgstr "indeks for alternativ maskinkode skal være positivt" + +#~ msgid "Cannot stat: %s: %s" +#~ msgstr "Kan ikke tage status: %s: %s" + +#~ msgid "%s: No dynamic symbols" +#~ msgstr "%s: Ingen dynamiske symboler" + +#~ msgid "Out of virtual memory" +#~ msgstr "Slut på virtuel hukommelse" + +#~ msgid "Reading %s section of %s failed: %s\n" +#~ msgstr "Læsning af %s-sektionen i %s mislykkedes: %s\n" + +#~ msgid "Skipping unexpected symbol type %u\n" +#~ msgstr "Hopper over uventet symboltype %u\n" + +#~ msgid "dynamic segment" +#~ msgstr "dynamisk segment" + +#~ msgid " Offset: %#08lx Link to section: %ld (%s)\n" +#~ msgstr " Offset: %#08lx Lænke til sektion: %ld (%s)\n" + +#~ msgid "Out of memory" +#~ msgstr "Slut på hukommelse" + +#~ msgid "64-bit DWARF line info is not supported yet.\n" +#~ msgstr "64-bit DWARF-linjeinformation understøttes ikke endnu.\n" + +#~ msgid "64-bit DWARF pubnames are not supported yet.\n" +#~ msgstr "64-bit DWARF-offentlige navne understøttes ikke endnu.\n" + +#~ msgid "debug_loc section data" +#~ msgstr "debug_loc sektionsdata" + +#~ msgid "" +#~ "\n" +#~ "The .debug_loc section is empty.\n" +#~ msgstr "" +#~ "\n" +#~ ".debug_loc-sektionen er tom.\n" + +#~ msgid "debug_str section data" +#~ msgstr "debug_str sektionsdata" + +#~ msgid "" +#~ "Contents of the .debug_str section:\n" +#~ "\n" +#~ msgstr "" +#~ "Indhold i .debug_str-sektionen:\n" +#~ "\n" + +#~ msgid "64-bit DWARF debug info is not supported yet.\n" +#~ msgstr "64-bit DWARF-fejlsøgningsinfo understøttes ikke endnu.\n" + +#~ msgid "Only version 2 DWARF debug information is currently supported.\n" +#~ msgstr "Kun version 2 af DWARF fejlsøgningsinformation understøttes i øjeblikket.\n" + +#~ msgid "debug_abbrev section data" +#~ msgstr "debug_abbrev sektionsdata" + +#~ msgid "Unable to locate entry %lu in the abbreviation table\n" +#~ msgstr "Kan ikke finde post %lu i forkortelsestabellen\n" + +#~ msgid "64-bit DWARF aranges are not supported yet.\n" +#~ msgstr "64-bit DWARF-a-intervaller understøttes ikke endnu.\n" + +#~ msgid "64-bit DWARF format frames are not supported yet.\n" +#~ msgstr "64-bit DWARF-formatskabeloner understøttes ikke endnu.\n" + +#~ msgid "debug section data" +#~ msgstr "fejlsøgningssektionsdata" + +#~ msgid "Cannot stat input file %s.\n" +#~ msgstr "Kan ikke tage status for inddatafil %s.\n" + +#~ msgid "%s: rename: %s" +#~ msgstr "%s: kan ikke omdøbe: %s" + +#~ msgid "%s: simple_copy: %s" +#~ msgstr "%s: kopieringsfejl: %s" + +#~ msgid "can't read resource section" +#~ msgstr "kan ikke læse resursesektionen" + +#~ msgid "invalid number %s" +#~ msgstr "ugyldigt tal %s" + +#~ msgid "invalid integer argument %s" +#~ msgstr "ugyldigt heltalsargument %s" diff --git a/binutils/po/es.gmo b/binutils/po/es.gmo index f5f43fabe671ab0db94778c895de83726d1b429c..dd3745286d53aaa8f585655c1abb83675c418f32 100644 GIT binary patch delta 52814 zcmcG%2Ygi3+P6JB^w1&nw&^vYw-8Do1VWcy4U=RNqDdxXCO}lq*p9uAy6wG-HEQg= zq9Rzp-g`w6%R%wG{(G$nf#W&P^M3E|-9J{Y)yuu^RrenK`R>N=?`sl!zfJuM0z6gq z1A(sa)82u=z6OE7mKpL51TM-A1YCGAOo0!=j_?)O9exRW!A5HXfx&PP>;ad;4sZi( z4bOu8;8n0Qd=54Z1Y&`Yu_&YOp$nS_O~N!NceZsG!Tz{oura(5sv>v7iSPwThJi+T z7}yrJf?Z%YI0UK!v!Dyt!vT~ZI1h_j{t%o1--KgeN`4?P9nOaB;JGjv-Uz$EyJ0rm z2Ge1?fsEEEXzhCMB(!@jtSp+tH%ln5V! zO87FA#6E-r;a{*599XCp1p?EcL|g(#z?0!H_#jlpzJZF@u?T6ZfJ`iXVJTFEIF$e6 zP$K*mN+N$kwQ$tBKwu;+gsRvja5~%q7sH>RBs8O#?u7Yp8e9*j!h2yR{H+-ItMAf} zFd1xu%W*#nRX~R$1A%dHHe3Wxgnk!6i9Dsm#G4Q2;XVN>{;N<0H!TeWR=`e>UJXQ` zB(oC^f};mJ@fsfOd>x7OXS!uaPx#k&X&gHK!Tg(GnH zi+w;PJ4f#{UIadcfivxk1lNh>J zq8DiUJ698@Q6P|X6Y@u|0*Bo}=I|-_0KDx^Gdzm!G84slFd6@cU>Eo->;^xE{b1m3 zGb;MS0XUaI#XlBmVmlpDUf>R>hSb2J@a?;izY-)ta~ck_VwG@+Fi6 zn%-{;9u7O=UI-O_By0oEg6e{+VGsBitPel1?oXlO*QY;6!TwMcSqZ&zRqOF3%;q{igESo%J3Z4K*6J8Fdz#HId_yuIX zi3PGAHZ?mNO2qd=Db>4BBCPj_(fU-V@Fj2%tb(e*b(Y(qTJ#50OS?X5lx#YbyAmqj zE8tl83{2Db{}W3yJcc}GR;lq&eX|*^fUiJFXyD_ftJXku(dkfg{asKJcppxIt)4Iw z&tWhP_c>4vc?^z$UqR*XK1n5GSSqk6gR^0G_ym+rdYIxOuCJ<->o52*=9!g|` zp)$^g>eDLge+Qh5`wJ+E^ncdGTMV_>90Ao;mqJPMIhXkU`>- zOV(Bs@DCU##S?G}{!4b4zPk`gl#fG=j@RMzBw7qpVCw4>P>(!zvN>%K2psiRAnDdam6=gcs2gkjMF}_KmHS7 zH<%Bb!sDR2;!LP6y4L#NZ{1Hr>Bw6!88-UP#A^e4_=dHVif`f>$qj{97w3S9}+H4j4N^D>lDe+N6jX1h(iKCmzD$*_aQ ze+Y{T*bJw@8(>%X1?&au|7hm;{*W36@?aV~5e|pda0>hk_JjR?GTJ^D4#HgpRp50{ zR041?JWA$h^hig0+&OH=n1F_dy7#1bWgPq~gP%XI-sv=t~ zAB4*IdF$Q<)xyu?b!hN+g*ELXrugomN#kK3Un zwjC~wVfhNnN;oCS@rTW&um|oJVR!hAWpX`}!9b`CX2Yql0H(tmp>*P7I2ir}o5Ak& zO@jtQ%?Ash8nOw-q#S2sQN*jE=7HN`3VahP;&<>>SigbechxSaVY(km2YNL$?io;B zawJTJH(Bn4s!;t#j;{m5pp9!?;r;-sE7F=c{uEx?BxW+Y438`Vwm|jKk5DaWo9y^= zb|zE?M?m%U15g!u1*(fahEgu4sbLTJJno55l5E(_ z_}_+Q0UkqJo8fjWY=Zk-sJ^`vY8>ASCE}N%wEr8Z7S(U#_{;2ID3LC;EP-m_@laZS zJFE|PLMiDxaE#Xfj%`hb^P!Y#9h68n!6ooCI2wKk)fMeijOd437Q%`6UkX*>x1c1o z2hN3U+8J$M3)Qt@DBZdYj@0bxVw|D$aX$&^P{Qy+Oo`A}D2UJCNTX)kA zCgVYHB>u~w@;Mz!JVYLt33RKX!A30)2+z#Ux~{~NJ1@8$%a zg8zgnAg8+-POG6RvJPrq*a$TmE{1CH!%%&?9ZrIOLS>xM!|@lTO;CHjTj4_ZI+POk zcg-l69>bzO&4Uu{aZtnQHrNBc3YEc6P}<(5rxEE?sPIit=`XVG8mM8s3u^Id)XNmu z5vmKvKuKaPln%u%!lGeQ4LiUWpmgCQs4n>pYPDsEXeVmCrV) z3V#mOh0Xgo{=6{~N|K9VmB#-DEJb+iwh@;1H4&?zBytH<0nb7$&tF5exNAStq6ttF zN(f4Kj)zU*El^!|ACv^2fn(tJP+iowzZw!_LxCk7kK>>Ud>D?0UqXqn*8tOkkx-&r z0ky9`7y9v`GX4_If;|SB#pMX7dE{a!WxN$C-G@-=nhru@lph$2MKxXxCAxJ`N_Z^P z=!ipAm3D3|-sab`5r9l<6Tgq z+5=tKb%<%%M5uzIPz9X?)wh>JW%xAI%=d{6{}ZY!Qc_L)45)aEpvtR&(ya?p8UIqI zTkuf9TcMO_50uh$Of%X(2`WJpN*7MG?%SXWeiBL|@4_6o8#adNL(O=f23_16p(=6_ zloHkqjTzCrg@=@@!7x+cSU3WAsdZlk)kQmDL-;Y&9R3xQl64qvx~d;+j(a%NFq{mP zZy2h;tDz+Gl;t-uEQ;86geha*LS3*UyyXdjdWQb!t59tIUJ3e_c7L4`jD zHQv90X|UZW|K-+wHXqya-A%S3!+} zdu;f#P`lu63tFb?gu}FmHKvm#+DAC^!C7D;C zl;$@m5xeQ8f0=+)oe9f1UEv>A1^{x@JFb4e_3{zWGXOp z660Sj%Em)2S_D;4F02nvhuYhn0~^3?P!)Y0sw?(DP0a%)8_A7_nxZqIx+WKDIGzdB zu)Cln^Bhz|cEzx$ul|6VSUOEH6>*_zJ_Jev=};NWwc+`23hpqJ^4Y?Wy$ zwgjqyg-``YtosBg3CGUCqOH}HPzBs?xecn%Keg`tP`Z#Z)nwcc$~_h;qa3J-YdOq@ z=Rhs9yP&$J?KBfF4XPp&A(Dv&=3;Kg0rpBA0YWx7yIDH*zQ@J0i&&FmO zu7;}EaZtnbO6z_esv)04X?x=thTWhlJ_1VObD%%|Ls&GvPlPIP3mgh}Ld|FmXPOx< z6{^6wP@+E)Y8Y*{{^vu@>32ir_a0P%4RXxd(E}>{FsS^Gf&Ts97A*dv0VS$$ptO1q zRA1GfWon!PRbZ-hXF-Lpfof?fR0WT>;a5R*?E_E^*$Fku{)CFxWH#ep8T6lRYCIOI zhPhA)PJ^n*T~KrUlTa1-7%GF`Ej!FH1&xLp_Y19i6I8kjpt|H2fsL}E>REv`58RcpZ)wjK^I|C{_2dbeJ`7fOUrTJEy^*3y}8YTO=5B7>}Z0@O}tK2)DChmzc}a0t8+y6|-yz8B`;?zX_5 zF^jC_YN#5$14qDChnWdw8dL?3gF%Pk35Vg{z0g#s=OQz;j)oHTTqs>Ch05n#>;E*= z6#OYvL;rwOG!|&R*ob%>l<3w#WwZgRB^N?<#UoHt>RV8o$VN+y77v1wz)I-Cd^jJT z2qpU0p_KYVs4n{wD&PIkKmYe#YUcdaa2f%pKq<>ha4GyAX2a>r%oWTTP!;?LYKnH2 zn_=4$9)^27oDNTiQ{WD$`J>GWGtbP1N_P_U-~XSFMM`lUR7)R&>dSYaT3m0XY3Xpw zAk?@%*YZ}V3FsLpk$(?W!Jey(I}D_2CYI*8Cd2t~ zBJOjbM7RxxV9HvvEk6n>;hj(!?}0PmOf*v!IR}n`Z$Rllvpkc}YABIk16RO1VGt(g z$BgJp@=YI}3>y+~7gS5`hw9VqP@?TsVES?ioQeA^s0#0bd9Yo`RCE)Zg8Ozj6#f7u zp&o@Mzr&$);?5WrN#HA}77Q*j8I(g+;07oicoeFo-@?go)H>7BsO7CN1OJaLdlVb@ zYRikE8n6?Ng-wnyqac=vMKxImCAzDjMEfR`h*FO<3C@NKa6bpt;*KR|tF;uWLbt$? z@N1}a-Ahf2kA;%pV{i^^U1nCn>w`;2kk$1)y|SKw&aBx1CDGVF$X zDVz$UQ2T@$sNwe$)P&M3YS;_*#68ZsS3-@Na;Q;rDbz5(8)^o8S#HV?d~7}bgjyup zRGRVI3#y>0umN0cnFlp&*FovVB~X3;JWPWPHaLMN;3$Y*27ZCh_6h`6ZE^xXFctQ? zl>F*Z&b5sHPRyMhZ(w*NvopEf32Y+al=~T{Bzyq=3-{Is%wqD)gGRJJ!6x{3dC0W5 zujLG=MW+}_QWrvX#STdJfqy~GCk-Ap>Bl_G_@`olDR^k=&4)^GBh-ww9rlIaLM_8> z9x=w^D5K?w-;)H>-i|--^DWhQ4^ui@>Hmb zY=K%t-mv~3L5aBjW2U7e;Tqg)p@#3HP+d{)aZ|t)sEQUqZS5+c^1aORnHZMYczh3~ zrRh(YmYfAutfXZkilyY7IU3d?aXy1TRPUjiJk(ME-Rn&u; zfZm6h8vpH|bposKSPr!_xd%!_`=KVL{?D12Yb}&J4y7wEL5aH6^JbXMg{r_N%j=*T zv>i(6c0+Yt&lik)0UW6P|8ZER5O6CT1HXkj(e&PG#{CGW8LSenfX~5&u;+_r#}tL? z+nb>Zcnwa5NiUiE|EW-O|2a^j;uWY0CBMwPL-~OTSc0$;O6zw)WwZzSi_SKaU6LLM=8IKy}?SP>b2S(1o8stts`lo0+yNjA_`c#G)zj6xbSG3SD>` zR0i8%WB3N_3g3t0;XWwk8@biD8GVz;2!JW(Mj@$-Eb&nI}EBq#jq_r5i0+SU_Xuj z%dx1>pN3MFpP_2lJ1NOuOol>*uZGI#3@GKf5zdBhK#hi;^-Q|eP{VN@R2Q8G`@@@| zM$-$IBhwYRaJ0sM9E-Z(1=tdP2Q|$8gpx?-#zq1;P!*|yQo4(v zT6!BC1b0D6CaH;uHw>zR^P&2F6O<&k*zk8@OntHsiwbO+oa8SyL!jpHg|HVq5jKZ6 zLdClms&8L~(uJ>K1+3RJ$sbl5pcbv$;ClEP%z)FIC7JsHs4l*$SyIg3MsL9*6OX-6 z+B~*7qJdMPB(MppB{#wza66O|?S?Mg3ssT!Et33EFceCnIZ!Pwg;L(jq5A#~D9OFv zB4)IBKOPcky*;;RyH^lvX$6Gf0U# z3u@OKh0>k#pbPJX(w&`9yXHM`nZ|#Uc19V3urUFpa5&rmrL{Lf75J`YQhU>f1E7ol zT&U%=4C;V!C6oldh0=+^9ZZF?phTVrRgr)A{*1p%v1rbJ0IF|(h0|cajwYicpbEGd zy6|l%CE5qoRcsG zJ$o|#r(;>%(+s~$U=!ST!1?e2SPwSoWhB%bs->w=eYpf`VpT4F6Q=lYw zB~%6Pg&I}wS=R5D6!;bQVAuin?r$cv2{A0v#scec9CUHt0vEv-p(@s6K$5=+T?G~Y zHW-0hp>$)?z$AaunGYq2Yhepm1GNf13)O}1K~?Nms2MfZeUMqDX21+QB2dHaPN=Tg z38i#h2U{(-EQIRoGc0en+-}2vf|>_94l!Lf#&RjtOuGRh*;wFoEUM9ca4mcfE`XC# zji}CsS}bma%CH)`a0eU-e}bxTzce$9=RhgtX;3=yB-H47AC80jq0)^Vn#8>zu|HakB1X+mqF>y7U;s?peopDgwdJF zP{Z(YI8@{Rb}SP8`%oK*E+fr2J{+o`n_w3F6>5#h7-bff8Bi@-2G!DyP<k3``Cqosq*78iKzI_l%GG9XFmy%_M zT^dva@*weIfs1XxbMR~e_Q9j!>C=t2Hp(^`j)M|qAyk*$V%_gS&G9{F80A_BHJ_Xh zN5O}nhTCqau5)IZigbYf`@h*(B#QH(MEx?H0e^y0lJp#-d)pcjW)$mz38up%TDzE~o0b$r*bq>H)o}&X zXvl{e9Y;Zl_-3ey>M1B)dIu_=GuNc=2-PKnp&GUf#x&l~#UkDT)smN?TKFea-}aej zl=3jB@mmF@8xKJ#-7csW?SpDS+I*vAE1>c{8cHG;TlcF_`R|_3_*V-$EHD{mLuGUX z)WmW*)NpzSs>WRoGgIpls1{!h)pZX+Dd{gz6==QCglE82xR*lB6L-Uz@Hwba&}vc4 zv~0v8GsCTfnkbHf^WYY^81948+69YEpPvlXMX$hy@NK9*{s?OM?Xbis-C!tp29yLA zz$x%ls0nLp42#D59;ji{WvN-ca-cRQ$H6J^aj1$p%Z%toLXG>CP+j0b_3cAY@xFlS z%1+CTL~@{XED9ybE3AL)O)OHDdMiv{4}_}mQrHz90oB(h+wg0lhS7E?k$w)48x3$HS&@8FXPj^nd?zA{OmPF0cVFKy|^_ zP@>)sRZz-WQ^7PS2^2u-$T?75^$L_EzJ;oI_n>KMI#m2zsCcJCb@@#&))LD$EGqDQ zsDwX34XYM;rjK)AN8E=)wQwU;g-(Ud;I&W^xD!ezo`Q=1CRE@52(|tv<(qPPLQPbo z^BMn|q2}VD1O-qTZHB7pIZz32gUaY7sQB+e_3h74k{eiHX2vy8%2))YQ)j^cJP%V2K zHikbz4eNbS6WhQdqtvURbnes`7A3e2s*fIq(#|hobJ%>HVHYUT4}|KX36{%X3)~Sn z9Uc!gpF9s|!rgEY9A9k8ITNa3*F#A%b{`gr{AH*<{SZny{slF$xJMXm&VrgU3!uVJ zf~x2i>%RlKxc5NimvW>z`}K#*a92Rh2V0>F8<+Uy#R3DdD5Ggm+Pe;_pi7`;u!o^$ zu5Y1g-oDi6Mt`V+vY_HGgX+R6C<$Byr9+QHUuU2s{WDb8G%J(xGXC3PnS@6#s0k(r zwdmXgGvSv|$}}i!hTkGM3-_r|efv68MU%=+MMpr*Bdeh#cpj9*?t`kxyOw)k7s?ML zuQ#Ia2i1ZpP}-UcmC;#HO87LCr1nF#uy=*Ycs7)7tcPmx3DAXC!C~+TsG0O98{Q*g z^2>lRY2^kiW8uwEGu1~>%J>&-3I|8cxE>2NPt1W5`C2GtJRU0D6;Kn_!%)NdRj3Mo z16|mv(o}pn)bL$V$@tfBI|~nu$19);cm_(OZ^1FJ$p)hvQ=q~tpfWxQssgt{Rp>b= zUHJ-1LTxviiEILtL^nV+?0P7P?AXZo?}cSQ9;$iIO(x=4DCH`&tb&Sn2Gj=Q4(om! z&d2>HR7K`inU)trb;?QoQ7;aaE+qn77DwRnql z?||y-@1Pc&Wc-+v;ij@kn{@ z#N!JB?}uNJ>0_7$xb+;1-@h=?`qbPOcrWf-3HuDw5Pv4Rz=QZ*0M|l27sAaLHHaCQ zcM3F=xU?;B2YGKr{{q8^unI>BrZr|3?m2#PE|{=SAVK13O2YH;I~MAZa^6dt({ZoI zUyo@L^9uGLes9>g3Y$q@7ZHCcJVWsn`93UBOpt)xM7~!s?Q=T(5x>td%P{}6{(lj_ zhqY(puV*Lx0&|-(=6TCf_K`Nu^L6}graZs0Co4vs=QJWkted?=;3?cKh^!}-n*U@o zxsI?LYnQfvL!1)A2V(RbYtzVnCw5dOa69Hz(%g^VT`K=%92q!95U>byflV~ZatUFR z@qZhxB<@t3`7-Q3WAxks^+ki8%ZQtJvWeS^d@?Wvgs+ARZN4T>qO)v@mNqb%$Q?=i zI2pV9oyBu*Z2TjIy-;=o#4Fz*`!7ZZLJoM_`K z(O%-u!ma67PwZnHArh5i&c|amhVRb&3ur~q!`swAW5Rn9w+y=;?e*`ilkrXX2mKJv z4A}cAK1OSP$fha6{UT}3#cvdxq5fxW@Xu%isF|KLo9WlMx8v5rG}wkId^_RY$>=ZG zQE|w8s4buo{(2T*)?wI-1TL^?d6VluAK?Dd`W?yp=RjBM*huhj8;SSKf#LWs!f!P8 zcQE~Iytm1;DgOK62>d_9e+%|sFj<&pelfgYAWY9g_)W&n3}5?bYUcC7z*yFwKs$`4 z;LR9zU4bpN(TwFc3fP7Jg*L;5xLI%fXP)JYwsL2~_v)m--lkzC4_t}=r#8N#(en=yeFPg3@oJlqA5iDd5mfSP+&7Zp zDa0R%c?|b98~;Q&g*fdA--Z7m!u8C;y#_u3N8s1X`p1sOav}jc6w5wy$b^qn0uSTv zU#B9Q@hipeFW3sUgWU-~4%V|7Hp9LYqvtvNPQ%`d3h@b9UDtDJH|l z`JAxbm`(WQVrnR3BknyIZA|OiGP}hHTu!2E2Hg2L9ju{NUSY`vm;{ z1w(K)eht+BRYYiuIR*PibuxYx`<3|frCgvnk$;8v;9f@JdGG;@o_C1XoUrb=KQ~_f z+mDBF=h%u^?}M<3u$YHec^&U(to=7K)fY^929fz-Te0tO--y3M;>DO0>dqo)~o-ou#t`=!B!%LVI_=HXb%!RfxQWQjd(v{Kh4HpOnBmH zi@l3=p8@%FFmNM*-;>wPibR_EHeAl*F@5}e=>KQ1jKOqP2+u+ao2oz(9Og%&udv_e zhf)xk{(@;j*lGBsVxNrp0rz$A0vk^_mvmp?x5l=-KK5MfXA}0SDn$8#H}On7eej$| zgx_t!@_)hFOKiLqmX{Fs5yCpdoz`y%tVjBV_&qMGIx=JddCmp8Y{t0urpD*R-3{T}@o$5je}PWeI}!eb&07~%m*E~y;0Ku4aK)ij5>d$|JM`H)h4co{Y`5>3A>&oGP}rD=5}}j{slJ9Kdt`&;%&hH6!uKDJl^JFh zeisveut^fwgWr{e&xR}EE0{^d`2k)^yuXO|xb}aYaLmBGLd09(KjAhattG;j*x$7o zdW0pOqwyb3W?$g(3Fax>gK*C!P7@ocFMfN-Cyf6*{GP;JfqM|_kKZrYX+I|%EH#*` zaXwC9ci4oCj>2y&Ch;`F-T=o>#CZUdTc<*ev5&zViT@RFB=K&+z8d?d*nhy>gqe%E z3%|aJeAWMVVvfP10_w>l!nY*889t4<6T6<|L?YwVe|6Qrq?EG-aXQc{J~ z7a6a>yEczf%iG9n5@E4#_;YccjGL0^6C#z9L7_6U8EnU`r#I#@>?LpmTtNJjNk0Iy zUd9$Mz;X(4dShN7>~Q=ZgnE{c?!?6X-`9ASVv3144bzT5J?r2qo6#ru&$0gXiF><= z5^&*Q>puhkp}5Brw-WOn<{^xpMT8}uRP1FqepCOSh~qX2c^hgw_G}^++>5!Gu;n(B zQrH>ut92(6b{_UD;yI+9hI<^QA%2hGmxABi)2&;65#0O>97UL( zNrc6|#<3LBjZDrY^c?K-vFF-IALI9>i63|lHpet1;We1wF-wS-in$W=5pmDA>1+}o zXY%(v{6~^+;^~O{8jZiU*7GG*jpt>|8@`SH#_w<&emM3kD6oWtJ207;4!GaN=-CUu zhjHRPihViea6g2p*fN1X2>Sp>8_oaeIDRFwnV5~3yhJSc44JjY3?WViJQF6Kmx%kC zb+mweFxkXega5ObkBIx0jo%Z0Jyn=7_>H4c%P{wAbvg^P%0~E+2$Knzf?wj9Nmxrv zEBy8RLD;oq@*`%jE#NE@6xc|dm6-SNUyC{3hG)S)Y@B}B3o+l2XY6YJT!-UH0`JD& z&_)uvV!p-CCA zinzgwkXu|-7On^tq$LNElNVK$#&1}3eZ2Xa#vNUEPN=LXx(mu1zZ{t4v!LjI8S)-?%I-e#Ek^?dL3ZXUt!mo=njTDvC>k z6;*P_hc5rNL9~L3#}8Z9Dc*TSRu}4<7cOz5!Mu`?a<7wF^@0^IIPtfaHjnpT)mN-u zxhglQeXyV)H4-hz50;dqR+bfnDkAx`KEAssrIGcHk6+h2e$SeUS;YmRvS@K(74a*I z^P>`i>rM++MnVxcH8m0HM#FAJs61Q|bwd>u;R<)-x=@*0T3He;E~ipibLK?S;$08_ zM~pP(C6z_RW$wJpxzkN)D*7ep6ak|IvIebX``m5W< z&&kcK-k5u1qd7Tso037^CB=D@RQ5vCCRMI1Sn5kxcG~08pW*!CV3gW!ERL>o6UnMO z6!muMA=&Ej>!#M9P({|^%4m6IG_@d9609O;Hv?`oBEb)atHK{46Kfpu6AOBB5vP=Nga!0BqkzBCA=3@R+NV$p<1uu!~7(Nx=sAQ z$->5W>*iC?LpHL$Z>;Fx3JjPxk3h0y6e|7d_ZMp2S2rZ zQ`J(NKH|pDIiIoYla zx23toWsD&|aiqGia#y1PCE>E7R9nkbi810H9V*ixKc;}`L{!B#dp$FqK7(eW>2!q> z)lM%a5o2vyxUkR-=N-Yc6G`(j7dn08D>t9Cd;xwJSsX$`s99BklF6XNn+QCvTY>XnF<$RW|M2Wo$y18fcn1trRAD}+N^ z7>Ne+k33M>gPQpFEi@^V&%rGmd`Jr;m3fh>NHkQ6NHtTfO3#o+uxL$MV-zk?%i4&3 z<@{M~RX_JY?Bq4^RwZ2-sEw)@oLE%F#tl~>-PF{Ajlqh-RTC?M8%t2FArlKi zTJj6x=T-;fyQ`C{SDp27{Z`pS5-P^fh=ii?zs_qvpw485LTd$Mpp`ReYqBdYD-2hZ zqPF3(>hbX}ld_7-B4w!?iwmObCN9g#T0GP0rt4;zM6U5QgNMaF=tfXxjZv!Ql9`)Y z;C&c%QsP4{{HJuDhuP0x;U+FvI6XUOx$!iA*?PFv7fA>6BH@xsmX7jZbX~;cw#X<~ zZ6^MbT|RNn^rh41*qj!zh?mop;%ITOgw|CsBZS#llr{C|7r#=A;&)!ytHCkq_IU89 zF7fX!9Nf%zP0|vQS`iOcb&02YFDIo&WgWProVAvr&TtP_Fq}7p81H6QV|!|ZD`Pes=iQya72N+a34 za5R+eF0SM2vh8B?qN!J%%YLvZNZ&@?;^+{6QJ`fE^mRezt9kPmyLllLBUsKJfy&Vp zehCGYrR8aH_p%Q0Q%ajxJC|*B8u+VWeB0&STlqHCdA_e}s&)IMVVmOLUf!iX4XUgj zf5j#BV`{J)tlUJGQh12!AJ{1>@lrGXj9lnIRO)|-Sr(#(|BD>`cy0eCvv`kd`^VQ_ z+PM1HYkD~&vovwqC)H(3X7*fC8Z8TcA0s^~URhia8Ct}j>Xhr^j=T7vgr&hFwc|l- zh|yP=>Z`9mtzKugI5cxWwssU&P>CJIfSd1%e{geN+hAF^tQdW8i^|;%!IDaPvU<`j zxk-(um(lN`NP7H|EhAgbC<*5ghgHM)ZQb&DY>rmtS})3>C#V0v(gS55F4GQdUS(;z zJ1eK-Eb{aG+qwCV)(g!-T~OOg@jLHNslMW##!f>mPT{inht*v=hNJXjg#DF2=M9=R zf9@bjEpp+-PKWB-?`>DV`iTd=bG+lnI_=|6Ka}27B9G)37v~n2#arFqE>>K|R^09! zB5vlQX*oH*OU=)$jm+*Qq3M>(DvFup@`}rJ4nx@^>;O=9n}t&6k(zKbfgh4OjR3!x zn5I>iDXI3Pl2_%XmFD|_3d{A|RasWNzA{usF=@(Lij!X%iH1uHOM*oQ=dE?vgt-bd zYeAxdN<2-8?V&f9_D{@U=p?o)e(J=D*kAHEkrZgXqfSw_&9%ZQARCra_BAEB{@CLb zoOn2&vPHALni3NUBg|HQ5>+Hb4lzPPW!gtf%&4`hGO7sMFV3QFt-t0NX2CLi{G+7} z*XU4w+2m(7m~Mt)qE%$)A0;_#`$sRk4@IB}rLo{9b(GE;;f=`9>Vs=iDVs8~;Y6*ycqvMaZXb9uE73F-!+e)* zD^s<9v`$3SxwT|s1r~O>53Osf@gN>!!ow;!Oq9t5s_$#_uxwOF2+x`+4 z4Mr;?uB2BdhUz$c{W8zkT&(PrZ^f%AXPJ zxShzs#@uNc{ZHsV;ttX$zGQXdRbBLKJc%sY#bYnrhg=d*eC*b4GmfBncALb4L8*RT z3)M%7vkG&)IklNBbA+bVcA`DsgsSInU76H4T(0d&uq1x{OAFhkjvUQY(RcXp0{-?M zKCWa_a(wSgvzs5}6`%0(%7NO5m9e)qyGXL<$e0}HOF{D2@iTEVa_-BiPI|oWwz!)e zWH#{kVVb!7F@_*HpGkO?rFro?xBbv1j}Uu&(Vmc_W9|7S{^cu^yC`!uo3%~ls)J(F z*?N}6uYILoeDU`7gNqCNI{49on(OdL)YQxcs%pBXm-y9Zr3_|E$>El&<%Q5pvp=?* zI_X<&<46(z>-~1|J=@2}o9t*2V{*};l@=$muM@ZM;O71x#z<_-{cAH*-9s`gY3W}e zm>Wf@L45FzUa>qKGyOr&&5y>cxl8b+Ej92*kgdz1*+xPkKW(C_rQCvsD!7c3unv@- zh*nr!!R|K^*$6h?VMnX@%pF7GIXjv)@%Ki4&GL7gV2|`>>G7v!e>N}oGcPVPy<`vf z{_%ocZ^qKUhRzi#!Hi)KxyvkTqBgj_5$hdB76OG{%DlLyz z{g?1aWw|a9{ek75eEOEuZp>;=MP?snyWe!xB#qT*m@2URl$Zi4{Yxw9k9L&4u9$lG z!=1D6MlAk;ExG!u*RFS3xI zc9|@~g<;fG2YYF&xkII%OeKk1m4YzaH;w!9u=XxgF6d5MVz(e@=LlvI6o=buT|dPe z?A*|7x;c`S6i1?y;+u9BB!>}g#UxH}o8oWpJaI}!W!aHs;f-bZP~xUQX6?-DxA4I2 zc7$%vU*`_#8|m*Km;CKPT5^2NuCHcJH9Jgds>?JTMAMT4Q^Q59khDBCT$mau&f^Aw zjUKNAj`YvTQI5BC6-$b3Ggrp(E5GXCB*)jjnG#>|=FcmZ92{DkIhKlw%5qXx@XEsP z^$O*cm@PGhhAL>HUX4s!f+aGPft#?WC&!E4n%Kw+wfdH~Mmg~h-tLCUcgA~XKI`-x zHq92m1}SRyA6#dbY#L~~TuPqk6J0P*^D?_RL*wVabJC2Q>4#LBs}at?eqZI~RfINh z`>x%HsiWJsq>@XUVgy^;x1mk+RlLKyJ7Z`CC7~6lr)_emU%dy2$KkzCl9(O>@U@sXjbjp2#{R>?>- zEuQ-Ro$>eI9~+bzVsi zWLH*bATdZP%6!ER=4npM`x~XVI?pg>eqzRChDr|bRxB`s!&3F|k1lay{)?eR5$;-z zvBbzjbv80DRJf&DkPAvmB7vL(&GpqfM|%$SOJaW2Dn)nKnf%ObVy^X&qNZ0f-}-Oh zl0pOHZ+^Ua4(((EWZs6=UFYl$ku3o`Y`cs0r$&2eSY8n>;;u^_8mgd){7tT2_{nKW zi;5!=2~$%HJ04zOQp=GeIC4hK?Ufs?DrZjf_rlaGYgy*P?1Xwn6xm+3Cwi!FL2~@< z&wh^0n71T1b81fR;>;QD04%j*KN>6=7?`&>R}rQz$(fUto0H`ZFh^4^#)=UN9+Yp+ z0=02x%qQy7=?fR-%%A5DC<+tLPA9cdW-gnSxxgKewP=27S9PU-mlg>ZM$rMz3x24E zYy5@J=VdIImb-NBa(6&^dA^&;8^sNwd|F(Dk~16lSuRkNMK+2owZYY`zxbryJiS8m z<-$U9U>lINEH`s;u6dKlDCM?@S3tg4v;J-Bv8!5MaS`+Mw_opzr+yocZ~JytEIBYA zU6pi0XjPSVef}D5Uc?;ONBP?%t5k=kVb&^PR7NZOi)NN0rhX)54kigjv^wUG#se9| zOsW5tgTEP0BsC+rj*@aUb#Sf!d-{WmUSM8K^B*0^&Cc;Qyz6v|&-|`xgqBeTu|Gc! z=2%tazqaw62+wTa%Q=izNLY+RrZV1e8D1y zgQmU7@g_gt&@5Omv^>ZgK21^ayDm@ZJ492uoycqF7k>g{{?uPt}{+P&wqpBVegQ2rMFQjj`#-tb`~hYhPU_t*tJSg49GS}`{_DP9SS@!9)!4AB=Jnn0OUHx!52PwB2x^0lu( z?aY97_AQ9F{^Nyuh&KNIAMKlD^|u`p-||>K-#n_FER_hA-C6wESGvc~{Ht^P*1zt%V6&4I@4vlgh7wCfY-)dd%;H#fWNi^r zqeEix+OM43k_$d|23+ur)2=H8^0LU^?EG6&FUfJH^YU4RSaF)G;Pk|14}m6{L*+}k z#?&qX$(QjlOhNI6Vr^)-TCGCv-gL*waFV^_9OuQsiOUpf6V~?-rr}JF>$Ie3(J3!y zddLr#SJh-DIp5WfAF+Lum)gilkNKXavx_%qyEHXB%he|#0rPnZgSouIgqU+noxpU| zl*}v5Cpufnb!J}If=Tv_>_781R&A@@ob^fY-!+nUqR)#~o zHk1Yf%0Z`llxclsaYfCD#?COOTVm|0{JP%{_|v(!wuuw%TD$4zCZW_nBp_V>)-)~I zd%lVDR7&EOtad-hnZ`Rl+3DMn8_?p?N-Zh=3}M#_)bWaBr=$0LvXkN^H+7n)B`yoh zDw5b%a_hu6EUyR_l?G8fE`fF1M&9k4I?HP+n>sxlC%NYQX3lX=x>Z}Lrd?J2X*@5K zuTQGjZ~J#$wBLVu88ow}f6Vb(w{Qjy=P;)A)2uNJg~X6MR6+f7rN)>yriC+x5mnN{ zS<*Jd?lPZUvx+ypl;(ZV!kN&)9HjDjX=*AED)Mjoyp)zs?l?_C{^~60&znCrXYnF` zugT{*Iv>=2K%;fAvW#28Vtt%K`;Tbp-0rPt;)-lt7vM9KeY#4&88*6vZ6|9i8nsQ89h_4ldBFofcr1j zjF|iSw=f6h(B!~@8x?{!=UKWbAJs zYr9s9V&tGue~kKN);yHrG;)$k3cMrQF>Acn&Uwfw@h)ob^asN`I9lS>LH)xTBouI%8fY*qK_R+kap?hZ~TZ+J&% zj(z3AXA|~qkAf44|L(gev)OX}CDxXqjYVw|J0<>y3~hJR#@VXfw|cRdF9=l*N2Wz8$T@BeEFC< zH^OWD)Txz4k<`WEbWVLmddFEA<-jsUpR9%}ioD$JPKVLsQ-|?ytUG*E`mk|>hm9CE zEP28F)P-!d^s+CNuQhmCkFOtZ_y~9SnDmijyj#0F&kb$D#K#EBXAxsCaY4a$E1yIh zW_fRtzo($Mh^s?Bb@_08(^+u1|ISM`mo z@#C1+9;+5{Y!7ppQXCDsp%T{o=vU^v?H6TcnxJI4#(erahl}yzXeBQ(D6Yio<2r46 z$WPg2=|h_Q;yq>dGvO@ma!Z0o)nvKO5+`YBU+=u0&V~bD340BCIk{fZ{j4oV_i|F2 zsqtJjYFe!D!o8g3P04__q(QzH4thVZ1*_TL%Q@Pq`(>{?AnLygSKGPx%CF1|)9W+( zIDd8KK16looW?y}vRukKSWz6VncCOs>kL{NF3ArT_%ekox4xiD_&~|D!dEAyo#UI_`OprIPn+2-__om!FkQ@GXnX|cJHCTX^Fl+M zm0n(|v$$q;s`EobZ_X$u-@AR3bA)$cn$y}FG}`Io%^&T&I_uz1pLxGVyX>n!iNUXN zS-6yIQeW?b_Si1c3OJ5>4a`hcb0g|M>2H2Nq6RX=@XoEuX2KOrm||=fnyLIkb3Ax*WT|Vo&N2) zOsfcT0!DAmxiF|9Thl(nsqfVJ&e~f$(MhQpKGDhjUwv&|5iZ}up}_A${}b&0-``sw zl#~C(bu;s2_kbKeE-3bPyy|plL*)y(bxon_tx8)alU`tPb& ztF7jnYbN6VqN)1q+8cTqO4M{C-`MccwO%D>h4?O~B;@Vf;<$W(-SxtaPGhh6`SkAY zKI{&XYrdW2yzY39O>s{0n&zSii!)j0AIo$u^iIyDt0PmLu=mkaC+6i&b9Q;7vz!;b zzp|WPy?297J1;pKzYnwN<&qgri@*D%+v_>qN$IX>!R%Rz3$P-qI+I$tx1-SM!Rz-X z?TDj~f)AcYyp1!QK8@yuxp=Oq@OI=m9rf{cYU;m#{cXhxZ0v(GQn|K|%v<*V{!#ce zF8hkP?F)HphdU`v!}+|kr}BIv?tf_8lw+3pE<6%1`y6LuO`o}r>v+@VIZt|n4x?9E z%y$lVYDyP4C64#zVb1#hvyaaE%;h_pBTVDX9O276v5M#|N;u-JJ>2Qv!hd6|X6aM( zv>HA^Z|F>@bNO<}_vblQBnN+huHM`bI%)_K@!S>80581SY19E}NAxz{%tp1{?@e6f zJR)f{@m3Du2r_gjb4K6APRKiTv9sB0umsV~Uyg#FwZu8=;CLta0rARXQ@mYEonM zzUuSIyNM)iB~Ne1bgnDxSK+})LwU1qGfC*M|3$m~=-vMmO0%b(XAacbk5y(qd^b5$ z+XK-PnMLY;xn5i8)Prk{5Xy`B^WUmGA@L>q-`2VIGY=$Y=EcN^>{Q)+$lj}tj1*n3 z6*$LRG5d-547zVC*IiX*KWkUobY^O4{?Tcjy-z|;d#~%IPIK?*2b^YJ z`$Fd$Z{d9$CijJ%E;YLgoyAGbYEK9S!AN}VnO!~p@7+zkR_BxL+_&h~vy0io)D$~U zc~wU^ZHFBC;VW(YuRlldj$Ok>l~uB(_uvuEGu}Urbe`}gl{nwGGCHC~OnJ;4;swV$ z?a`#B-jvJGmy%NFnR>Gi{S8B%4>Hl79DR3I<)5r{775ai{KClZ0=qad!|*25@1XdO zI45-WmgYwe8rfdzdgp5Ivuph?)*3ch8|0%v&Y1nPREAF1yxy~gQS zv#P>5D``3x9*N&XWX_v5bAIhgIoEce@io_1tZQ6kNXB&Rcg%JEb~3e~h95;VaQ^le z5wi~D$d572xq!LN|6K%OVNog#JrpXKaSwg<)1-)Ei3ab zy30vvf<)MQ1=-nrwAksxhseq*e%FOvFWlfXXmpI3RP-|m&)wjpB|N-&8=P^Cbgbh{ z>z%&A*=2t$(I+!MTFJzIlxnJ%+4=sFD#{ou*T$3%36^{7%h{dBSVEflUgkAkSU;b* zZ==)9@tSXPQoRYAoaZOk`OU=qa?Rw*(%<2hlmtt)LpNt+4o&RlbMfXy;`8ib5~0XsgC9ElwN~=`elepExG+bBcMKLDSvobv*eg zfR1_^$Ijx5k`h9o(Enndl2=XQfaJxUBC!AZ{YBqvmJ%PG!1PG9>Y5?=voCp|a&kQ39Y)10l@|6gm@9$jU1r`6pa}7S} zV!VWo1t|lLReUd(Z!+U!Xw^ys9i-eCO=5-+TX#F-hB0 zC+vSNSRX^t8kDs<06PcwwM~lH$WfFQs6YYS0_ zdmf(xb|onoUw~HT{eO#_l{Oh2nM5dL`32ZY=FYq6mHcAIwc>>~G-^|8n&cFzYS!1YFN~Oi zWEr9~fvt*l>gJv!pdyA5tXh*XaspqzbeNIhM4ZC27F#ed9N$i(2IYbw zs!Mp;8h8;u*-o8h!A4s@*YXHo(~itXifNe!aa-^Cbv{qtMFTVEeIJ<>i;3Zuo2g=e zfd8BP;{aZy*6|lhX+~ctJ;la6aUT`t^MD<+u^(V7#t8G>J7^9+y8{8#e_aPfcX9_R z?WZ~i@Yo;HYh&z4qPk$cy3kqJn%IySi$(@PO>7)n4PRj-U-~2ZnSyM@p&HF2cG8&9 zKD-@=wZZqZ{;5qSdHGHnDwSD~-gzL3zmW|%7xbn^Dn=;gsW&QV(Qm?&L>5}?m{@m= z7mRZ*5DrAx?=U_CG;)~Ka+6Vz4wkK{G-T53_2r7s(d?!a&e{;xBG^Rj5Ys*vFeiwK zBKho=4rz%)gpXPo>RFmG#TuYVbX78B7F?$XTE`A4Thk*eZpTVuvvAj~2x2Ed2&k$$ z85$6tj!S7a#>><`a*h$=fo!Lq6BcA;N6V-+XwfE9)^u^Uu~dwwBG5@&=*`gje!G#Tf}P@!P2#_`&Hm zrx4Q(O)I-m7fV%T#ymicdC{;sv+XDJxW`M{scdWMcL(vv$LNMkkr7SaS-1kSl?B4Ih$xe7_QOGs%GSW=VBwCtia-lfqJWfGY+ z<^AdeoTsMLDjZ@1&ex1beX{u&4$eub+h<<#8+pKPx-l0pitBb$4`dYo>u#DkP-FFm zG)$ek%iOh_M*eLz_RPjxp`T@=MS)((ZI~GevR4Xd0MK`MZ-3rR7v!N{$`Ab;GL;LS zpg{wg)zyJQ0BS08^AqT}8K;ehh)7Tc>z2@5Vm|>~q_r9k_$Wp;Z|pX*=3*r+JdX0A zU(%X3Q$aL0ol_a-S)C}OHg(dl;n+TjF;ST|I!Kg*Aqj8nq(r~0Kd11flN8UsHvLM` zFriOiy;W?!Yv78tV?wCQPd7u_=!o>LBJ1Jgl zQ)u#n-JL3a1b6#LT{hV&WSJmOULyZ085GXKXa|0;lUBy{@BX zLoLpwxeyd7H=vISUA!WVk|LG#m$@!*Gqm0HzTuxj`>($t2rg83g?CCjl9mB%!aVkt+_i-oy=s$vDacrLB9g|X#CK)^Zv|SWFVcm5jo}rJDSPH>eg+z85by|en67L_k zpEPpW(v}4Cv`hG>_QWkIg$;rvXe^i|z;TX0NxyYbe&&rQsg^2Sim?V(iGx0Vz?xSfJR9Z0t%uCZI0D9RgbKC{NdMSthO$?Rh zwR@>}K_oXM@?h{8W5&X#;asu|VtRdN?oTQ8Y} zp!P3XvA0FU8{+JUwSWfJMy?GB3lihHr>H89F?{vLn)zRzq9v2emYTwXFdmLwQ!f_5 z5uEr&Wa-3HyL|ov9(aK6y}AZE%*0PfZ5Yjogai^37+0V|b?bCunxBLj6PjQ@5IO)V z4+%xuBZ1zOhWfS?51Ihee9NC;1HSVP%H|IqpkkjL(ArsE*}7-tO6=L_JLY(GT#JoXTM)56a#7iybS zrYuQ(pwJNplm&sD>H9_`izE;6C&$4dw;!gjNg`BZl`)EM&~C~O((Qw9)FF+m z_FW)uN&e|!S_2rK5|D>KO%wC*49|O-MtCS2-}E$HLbbfB$g8+mQn+2gno&#b#o!k4 zW~l);(ch42<>y|fkprW*;xRKKG+p+H*qbPo0f7Ta?eY)@B4ddqHFbf98XLPn#hf|P zgqET;WO0zVux$w)nbyU^>-^$as_F~!OWoe*`=6$f;a^XI0^wipKTXX=^I$VVdEw3f zNt@^3Z74k0FXek@{8t&Y9rUN+3Dpa-?Ja&IwgmPIimn|!oc*7n{S$$1b*XF-U;yzX z^NVzz-T35sEy(bxXJ}I9AAc)__&eUCNrlo^B#pzqbYk%jo~7vp*xE*f^8DtrR1y4< z_Z*EyPpocwT7=12C7X_P904vcy4@AuVD^l1uj0F(qlrBCIr>h~BK3_Ot8QKUV0i}` zpiLP@y=o*!Z8w-v!9bw~KBUk9y@gPDvBkDkuUZ5EmP|Yv=~uw+qV*5|0Z~=^pm2xN zH%x^BnFd!54E0KBmSTa=CAhvTc<>P_El$9VM#6MeO1@%#^ME7t2z(`VA+@3^tjwK9 zX!MYHtk?Aqj?nmA*UO(r4u9VBbdOi-OGi}2s1?%g9B62`16TwyDBxE?4Dt)lQ^}0y zTv{_U?BdM^Ktaj#PO+9KD0abIouuM?SjigpccQ-e`SX-6tkE_zh2u1*cz=eaC$QABVpgj7KSD+p_8ho^xl ziV_fYHyGssyyLzqt+0>3OofyUQiLxE9|cpvqt1@tC$NhFz%axshQt)4qPzmoBK|ET z5|oF|^Ay~7KX^GCz$jl>X6rNpW(*#)AjU||RK_(|@gsmUqHP@_D(h8O4EA)vwTpF> z+8cQ7t4Q*`^a{(N3i?rOd=?7 z%)@9y*!HW9BI7g<%>+`g2<4$T z{N}n_5#q_C_zV4(umd7Q3g&bLBGDVF9(n&3Dl3=0u_2&+` zpW6*o=NNDs9KFh=@6taP1s
zm93!UL!io~LivTOp;UXH&)1OoMuVFuKa#{Bedc$xP9PekOi7kuRv zxDQH22Ypuk+RL8|Wt7)LY3g;@5q=M4ES<;i#)s^J&>0;iz1P3v#HHN6y0BYh+61iye<^ZMWURt`18c`y-f@VN=frnW+9 z_Dd+&UHlB&Rr|jt5gi%}p{#Z}lyzGuYkdW3+kFIO6Td)}t9RC0BVmi5 zJ(VwogH;Yn<-frau-Gr&5|x2EeELG!$OJz<8)||}^`W5;k$eQQ<{zQ&2OG&rbBJRtDxH14YmEgf*N@B-#uFz0;Pe)P@23yNaqFQsD-ug85L}?+8>!ZgEdTNl+cO zgEHEFP;0#m7Kc~C0K5UpVLb|^iI<>k>8hB4Q1cu-^xCLt9ZYfVwRiHH9yj0Xvc`pQ-`4kv{ z%b|?qUO)YcpZ__O3oc*Ub#xkbgmPGupq6L}ECE-+p)dwDfDe7POY}5)HI&9TMTw}R zolsVK5~{&!W!(7T(*s^0HVOIEk6SFbx%xmi%Qv>Zyq z8=#gZ`UDYK?X$2ad=<)P7cb{EGz@B6&4pUSjZg#G4>j;#pp3O{d5;~SjQC=x8HS(+ z6os<2yP?|K4=>XGPpIHE)B|d!K`0ep54F}?p=Pif2H3v#mE5@N?F6+QXTtb@|C2{Vs=FS_s2+uKEU!W}^dXe$%2)OV+7t#z4~H_M zET{pkfEvIPP)qrRpI^I*SH3lr>PJBhC>DBRQfEGroQy~2b9XoRr8FxB~*GG)RIM@24Z1UGuui;4eW(7t|LCbhFZgO zFaWDp_qJ6RsF^Q^(%7v&ABPP{zu~99fm*s!H9UDTRK0;P0ZysG{?{or9f4Ff2TJ9) zLtUj_hq8s={QL$r-T0^2F|Zr*^>8pe1hw62)$%4V3mVc5)eBFAkd5FOKmCNu)m{a3 z|6|8pc=k}BJ{fpcXIZ=epV<6Lg@yW(zR%C=Nx71K#_h;U`|*{?rxCyOUv;(9UZyU0 z*7$P={wMxuUA`l1Aw7t2E%C_&?d{?eK7{OP!V84;exr{QU*g9X5${R-H02xljpzDA zxplG^GLr;-XYST z5I#nB7(RiF6WEytPa!M%9P!h4`fR}c(>Y3sIz3A`8;lm6V%JNJYNH&$|Kn z!-VgV=fI}0DP#jUSHX*Ehf_WNEaPvU(mWmE`wG}!{3%IcJ+D#tUE=%TM8B})4T(QV zm_zuIbW8H_D^5qs-Ua*nW!u2LB>V&E)x`7Qb$*@KkdGy3bpOMXn|9cfth9 z-b9#58&i4zaGpi@F^Rc;qea??`~87_?Q9zfe;S{8g57JZ^u(^w@kt|N3I=S?cKM7ElsC*n7zgXSK>MC4b)7YXl?*UK-* zA?fs`4Lt=OoN<2L4#*Etu8W_ZLi&BmT$3RG%hQ(39q|~apx=m}boP+eA#;o}&1v8q zaUDvA_@#vB30)|2H~HltZ{_jpd~f&?VFL2&2qDUCCH(>6IpTUkTK`5w4kFZ3mV(6y zh0jCCSNVzOU_ZayILiD?x-G`B} zVirEFskfL!bSas7`oMOCo5tFmRzMc*qBff`>hhY=K z4rK3;zLEHNLT$pOgcp!q<`4J@%6zExzYO7MUr5xcLqR>`k$p;`_XwSc|Bh^EJO>wx z>;$1JWw#NoA?U`m3!Wi_iBF==P4Hqu8OnZyT+c}2QQ{xQ`(*uB5xE25RxjUK4=+LX zEQP*-e4lb2^YgZmev7hSlm6A072+bwT}7fA`JIXDnNE2=0mPpNe7;S-o_zA+_CJlt z9mHo6$`kagp>Rj!Z3rLw6(ygbN<3>lIBtKi@jTD}ID9v9u0SxH%umSF^9kv6FY1&co*S=#^YQr$W&a@PSwa1FzPuIG zn^NJ^j56EFAK;hWMgDd&50I`bOVnMyB4H76Jr7V|6I>WiaUp@{2{)6!)9*xC?~vZ% zH~KDoT|%BJ#C!N{DSa1VcagMYDYP>SS#%JIxrF&e3alc2l154tk*U%gzq1=*D(S&~ z{&0U#1AI;-FNM6$s>Jgt;Z@QPQ|}(aR>~cQKl1+J+~rsLi2_FmUyzYcg$b(3b2aI! z2usLoPjD1?G6?tib(LN~89npJ?}Ge)etJ0R?ZmUZZ08cc{_~_SNnrgeBG^cUHV9hz zmF^~<=Evv4KICUm?qkAtegkUnHsU?}L5v{1lJo&(@U*Ai-Gq0@uZ4UJvJ%AS6UvZ& zo4h-<{zaeCq`UhKN`98`69x73fyv~52KV@~1<2P@emh~dU#}A~OMC@v28Z}%8Q#;>fLrG%&bLS=~SZS^6-%aoZ-W2MNeOMC`=iS#7D>?XL+k5k-v zu}GUrKS0^b3CAd-_duR#{2l&fgfI9N*ApK>#ew8DfYS*>;$?BW;OOW|0!sUb+6uzGHqwPC7l=r zW26tmpQ%s-`5NNa67=jR%q0IF(#Hv7h!;L%{YV;IN7zmMSKvXofpWLN&$a*c9H8=S zgb(=*e}!zcAKwStQur-oseT7f`+5I^&5#`=Z#iZ3G=k3%$|EoDm+MP9le{1O`Wt+C z4c-5GkkN^Z+u;lf{z=d?243b@XiU5UmFg2#5WXOPJ$c6oQ^~u9^t;3#gp>Wo--m0+ z>y7LfbV!#Md4^C{SHEuB{~Hk&BXlL>BZQB~i+F!FA@4)<(ju})km>12s6u@`CkQo( zKT7={h?k+v3BO!xWD$a%VuUM+2g!R&gSeJIulfb!CHQl*U-)gm@l4VUC{v#>jQoIK zekt5bc#Keua1D9$;AHBJ^BX%1t5UxM@^6qY@#SNX-J$pY<_L4id=KW3Io>Z&8ClV% z1Bq`5>6BaS4^a7!kUmPV1U&&i?`G=1NqQ9NAe7j%HeO)K+mE2Q_J85?px@z8GKLa= zg9fYnjot(MQScynJAB!3%G6M+Ja2p8w*!4<=VKFjJ$+d+tc`3YvU7x6{W|A~$N&Fd z0l#3_&)7w}fXu=tiAE!Y1_;W+&k6SvUZKopzuZXja)_^l50W>4pyxr_ya+BJeIqMkDFn~p6H7*Pd6q$p72ef{gou+5eh9tSQ~ypBfmjC z_mlS&;b!8cV0)NP{z=N}8ASX>;&;OvJdyJQ@r}e!!@}oH%4AT#Kj8si*h>72LQTlb zg!M_EA#|lsG14Ew>q!4Z=oJfIT&2|aNV-xwwtdE<`Pa;BY-0Jr39+iFGh(-I2)QzO=S-b8yg-BgSH zG;c=i{melnKhZ2Tm=g*F)6ycLoSc+IC&1&E=rJ%mEfAg^$jr#e?G;;) zbxHn$tcObG&&#W8@^4(&w^*$FWj`k*(`Wf*(@g8M($r1PQ47sRhcmKsLy;Bs&cWNSJ$_dSC|_4mtXUI$=EYD-EV(iZOZ2F zTk}dnQZSR|vV*yyKvrg$BpQ&&0WRa{NwjdNhsYi(5hA1qF`iptkUx8`3D~Oq*#8! zqo2C5j$78oMr}=st+=XAZ0*(-v0Yog%g=Zs*SNu4yI`lOYIi+ns^@pj@9yUR`qY<3 zvyYuBs2^+jOr2_h+;AW#G%GhFoZT%zMxa@8PD-rJGj-g|#reaYxxHBI@bh)^?|#0y z+4jOs#=iHuDWCu1u7wG)2`_Ic5igt=OW2c|f7zaCZtRm++r}F2J(<5~U;E;*Z{JKc zy<(#eCYS1!7znglG&M7}{$PXHo`dINR~@gEf9g;vli&I6dd2c5y#KX{y>PNz?BH#s zV-pW|%inPP<6^OP_jJjhdr!oraMk>^Cl9#x_^+mJe*UQ(H+I+8wPGJ#RU$U^@o{8V ziJkePM(pu-YsUIKR4kVLDV7%*0Zz!WZFx=>g~q%d^0lE?DWvs%F`2K#lKBS zFPw5|SvgQZ!vNLjX0=aX7*@4z+q13$e85!BLFX$)HNzS=YF*_7W%LxPn z^TYG=GFjrZ|Edvd^KC5l)wiD)n?;MUL1&sYXqp?C6$!~C;_atrWM3Ey>d%RN^IdQI zb1RdSq!j&i3s5yXoJ+sCf!vHN4AYm}$(>B60V)xSM6jq?;rUC{+WbhyLbcy-(11W% zFgJLif>$gfn+E=tEe_4fvq`lu=7h6dV(*_#imm#-Y3%U#kw7ql$u0~9a&jYTHaD1> z8Dd|})bsn9rYhH(`Hxu>*hhEa8nbzsg@7jY*6RK3^}k z;`|`fDYo}~BO4iQTCW>ouCe^D8Q!-0U2}Wvh16O$Ey3Jm>lZUyO@`fH%yj8GaB*%3 zkC3VD7oMLJ(89593xk;%bX#Q0w+y7`;Y~D(U~ZseqD?4nj@wct%p6;~q^WFQC}DCd z%Rgjhq(*{~CC;GCV0uosf&(SZJ*Hgt1%)wa`(0^sdBKiEbFFJ_IrF_usbGc{JXyhf zm|#DzVt#0mow+2iFcisQ*9F=Kf{d?2V8EolV+VO=5s=wMvVz)`_Jyiui=9!8`RuB0 zZnLXun7+0_P4ikpc6!KuQ`U5|Rce`Gc1SfFjQ=IRyaF1n30{+ zEzuc2hZXe~>>oLHPaV^@pnF}j%_OuA1Z;!)4106~v(|P9n7Yj~!?R>mq3qnq5-mR? zWS`)IQ&S_Mg&FaYdNyMF2h0vTGRa(P-%B!WY>9>@t>C_fW}&e&8k;h9Xk#J0^rRWtX`#h|th}7u zKx&A^%*n{bWNmtL(`rOcPF_~rqUNxg8fwwC4rJs6lG9oSW=FzV@yyI1ZCvmHnq3hG zkeFz1Y0jumG&j8pTD34EjQz5usZvba$ewFyo~{y13vd#J^CGh@sMr3ll^Kzwt((S# z(4D{S{QaCYFD)aY`r}%gX7=n7yf!>1ro-HUaxpXEWJ8 z(8W}+tGk%a1syLky^OuNtBKea-AsW!-_6wRn4OoE8j3g>*`8&4NjkV73D1`~1zOEc zydbg_`}JP9zjJGmVl3C^Xa7h=X=jKhwPa|D!-_R9UIN*;%l;zZq`q?*q&r*U62A)2o%^ zgu^=Uj~St~B>VP2)2Y0iWngv&9<3=}%Z?so>e#h|Osz7JPGHgWW*R%6-1@xB zQ^$ofGiGJv;_||QP$s8UI6V@~3Q{rm%gFo)8%4Wny2F(r5EvfLPS42AOH)^w!N7nF z`@=X>tzE$NcdnTIJ2@}Jac2^y@ zQ^B_r%~E5Zoox0OJTL`oHpA`Nv2ImcY$}^NZ>r(H*22tIOgA;TklNd)v&i$On-o9s zYOHL=#RZRDYUZ2xJ+;h8hQC;P4o2+#Gfg}8;_l`297s3i?KkPBcFExxS@ScOtP1yny&r-d8hSL&F~AMS+g>J$PVa|`>)IGAU1}l4Bc;oy$ZIZ znxQ3W`Iihc%TAqZGKjxC*K`8E%{6b?x|wDR@%@=5w;Wg7JdUm|fb9orvubHaoyCVKcC7gbNe9Xx5xiBy1OC znJV_u`KBJZm(6EkBKF{XGaGbXV7h_%3(RWp=K@pPEVW4)rma1YZHn7_Bj#0INed!5 zCg-0w^6^;4*{~dFV1AzN=GbxJ1*?TscjrOvu@Co-{WnQqet~Pg;lbv2z zLEGdSv#8+iYfJ-UcV26D7c9Tdq#F|{`22d4Y3%qL&3s-N>e-uCnUD3}kgq07*<))> zBg;Qe4B6gm%rg7j8u~9AGnHb8SC+ToD@;jy$y&4ILfM<*nReODW}X-O?PfFArrly5 zQgWFmyFG@i_^sweyZ2VJ(hgr|_SiN*;y3E9Hw)}d>&<=oQ_@~!OZZE(>l3E5eSEvAWOvne%i1IV zWA`LH!nj{~#8m$K709m1GPP{mM;PrDk2045kC|O|`V-8c>}GSS3|Ah1%%OsFo6YYD zHgE>#uzH)hrd(iVFfTXUv}K@adUl?jk#CyBc04*dR`#)!f*0~l*tN@^Hs@lax7Klg z&$7X_Ol8G0rnTv1pZEx8d*B(+n=5>@7q_OHIHD{3wD@R;O-q}ZvvN>*c15; zVr}vh3;6eU&l&TL4e#WgcH{FU?3SJ8I$L6wsa){(3+8Q8RU5s?T?6lj`+0V^sXr_^ zbFtn_2ZVCwXCiLYR`0=qf!UcsZW%$HkMa`n3f_y@e->8$;(`V*n(Y{#{oo}t3AB0H z)BuBCHuVEsXoH-NnR!{+L7LUwo`weEUAXbj3PtRdFPlbnaTGZ-a&oh{u5;x5tHcX0 zo7Vq5k#>7bJ-d3BDOZrP$MkXS;k~?SR4gcKXFkW)U%J;^>+7=AJ~PFS&e>-M6@0hP zJZ}nk-5lq-8IgkKZ<;5KZEz6#sdLb5ySQ+|12Q7r0uCnwXuH@6j0<_kXi$esFp{39 z>!aQ&oYA}^WrhQ!Ii|2^nO#OG60%hevD=0nGTn=ZBDr*R;~}%aEjc)p%`G%y%fDkf z+DY%2KMVG}t4rC<*_;`XBiPcRBkb3!kD98y>DIL8kD4KN$T7TpFMIPb)BM6quWfSN z)aR`?Xh(mFW$!$W_qpdIGq0ro4IuXMx+Zr0Ia8^i?+KG=3if<#{z|Yfe`c1HW-eLW zsj@)EnjaOrBWn3B=CT)xjdz`%F>WReQHerF~m#M<0jJb}}oV8i$3ahF%_TDH`~?5OOI z*+)I^H?^y>pL6utfnj9lwhHo2GCyE5?>9AT=@gPC3r~L19Lrg$k@er3`eo#@y*Eg< z!acR^p8L7W{&~L{Z2NCwYfs)}S~U+$$j!*iSQ=ldv3&;&?caAe?}3pZFXUWAgIcbf z0Jqt2#P+@0BqbN^E`B{=aIH9h(?hvEM~)iNZ|p$cdF_}jY|@jPnCH7IOkMlOCex^W zU<7Y=G#SYG0TU?NPSFdCoY&+)hxRi%cMQZD+*?hWu^A6=5ooiW_rG-ym?V3C5%&Dn z1E#ut^b=MSeWutaKQh${X8vS4B^2<9qK_#R_YP8P%I{{SvBS2T z`|BU(Wj<5bSI?P7v9zzM7cBeJjB(rXhB}LTSSWtE3T5$SA-=`gZdu{9431h_c!qn1}B(*bjV6 zz`_GrALr<+M;aIQc%OO&%J6y(;Fj%}Hg1j1iOxT(X5$uk)e2Jc?+xI4p^F5#9fiPjiTjy+St ztz~{oADtzGP}v^KDpO5mQ`be0@>yTzR*heX4?c zo1I?KoyB#k=sZbg1#>cFDBQ%k-uJR+E4q)_GnL#{rTeBwLg~7zTmB>G(aE_P^K~0j zSHZyS%rMt@eQD}HfN!Q3&Re^&vU_Vmeie73u{%b(bxP~Rh<|djdDYx$CA@gS(Q58} z#%`$L&WnH0NwRPDa;w|rHQh@Z5Av>*>M1oNH8Ufe8=A!trS%Fs{ecGbaZR^YjrijG z5_$aiWfXtWzLwk3?yTizl<~|wenYXXYr9SD_B$d-#lKcFV=OhvDemfU$B#hx>f3GUBeMRW(6}t z-iNkdN`*QF99L{i(dP{ z629)mi(l9yfgnp0%+%#1)H>1W`*+GaqW)D{CsuZtvo&OIZRgf8LA$%1+cBxA8L|)m z*``LsJC|F}e%#Kjn*9GRs}FgRj34ZnA>3}Nw#QT4+1|Ze9~>LlP)E158EEhA=+>_E zf3#$GbaeaMG9U4EETOa8y4mPR7}NDk(%+78qnjPysek9%OFFv)?Z(dTBs;a4Tfx5B znU1Hoam(1%&D?u@5DSVz~Q+4uRq2u zeSBB9M#F!&)lvWDQtkC!-EOvSH+Mh>Y@pD8b0ShTu6I6@{{LlQxHnJb@E>)M3)1D? z+%~picQ>V=WOw(0_-E6C&wIEnjoshCt!$U|au-(lkMA2c+}rKcSzo$z`HA1YF$26o z{O+yY%AVBaJ8na)i@vXVw}M1#sg+Wo!U+Vd#XJYKtUa{p0-2I-p>PK?hC;q34%ooLP|?j5{{V6Tt1#@UVi-Ky38Q9pi4Cp!J@{{C*QxQ$$>LDS>y?wTyjKWZQz#6kE^nQc12 z9c4EUa2FRmHIV;{pDjPw{iL0LNtCEyX$ywB&v{>oIB`nYl^0`v2QPNF>h2c5XW5m*+(uR7_eFoFU&uK=%&p##cQAdX z#)a!MHSSv)bMUjLxq$P2mKL(l$4uQy{LG^l=t$w$>99>1j(gU}X`KkVWXU^UaGn>w zbZ~oPomy&1u!P?;`SHizJJGFK0Rt&=*GjaLhr1c}#o_Km+hT;f-DKKNN4W3X)}!2d zC8aPNrd>M9Jy$z3#3*R0(Bf&BWy*`>gzcQsZq#lbgBb&?A&+LM`CcBRtd*dZ;KYPtox0&rW z&AqyQ{4S>{202~hN1t9p_*%*C38Y!m-mO{XKg!qzeOdi7?cMUW@1<^v?RcrXu|!1g zAYps-QukZ?)eLv3T|3ilQBoHl+0gEp?%nprpj&T*f2GseZHuVodw~jqAnfHb1sc!w=e6{nx2ewYl$#Ldjc|}ConOS7( z%YM#EEXceoS)* z8+-X|H`yMU?T)a`(%oPMKI(HA#lQ6Py~nZVF2Nx+7>`ffk?yv#<>t6~cJCZ_k9{D+ zZPzvu;A?dtK5o5?cpnu0Hg*hIzZ?9WWfSJQO&ap^c;RbM>!R~3QZ8k#+n5g+Bj&mR zu!dUTskv@4I5O952xeS^1yz~nR;}P|E+?n(@K{mBtz!Glb6b?vFaH z|88+;zFWOBZ54i#cNWHV9O&Pogg#DC^U!&~e@>xZ$`y>5|PcgDYjh1)bjpRDz)jQAbk--8Q# zgNr-x3*}}-@|Nlj!Mb0VMcDqi$Zg7t?uE_XX0h9)f8X&V+qEm|haE}U|3gwZlK5L` zI6kQ&j@z*>EOu*W{G&$Uax*MWfZuh=C|YAc;cr<*7dY^b;~>$|oyh;n@sG-O^F+St ztXP7d-m%0zSJ(gToFg*+swDHyar^=3#l5QiW+`v@I3JvgY}EF<%njEZG-3Gg5q(EX zNB*H6|EwLddoIJn$A2{9I?#0e, 2002, 2003, 2004, 2005, 2006. +# Mensajes en español para binutils 2.19.90 +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the binutils package. +# Cristian Othón Martínez Vera , 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 # msgid "" msgstr "" -"Project-Id-Version: binutils 2.16.93\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-10-25 09:14+0930\n" -"PO-Revision-Date: 2006-05-27 11:17-0500\n" +"Project-Id-Version: binutils 2.19.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:08+0200\n" +"PO-Revision-Date: 2009-09-12 16:36-0500\n" "Last-Translator: Cristian Othón Martínez Vera \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" @@ -36,7 +37,8 @@ msgid "" " @ Read options from \n" " -b --target= Set the binary file format\n" " -e --exe= 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= 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,7 +51,9 @@ msgstr "" " -b --target= Establece el formato del fichero binario\n" " -e --exe= Establece el nombre del fichero de entrada\n" " (por defecto es a.out)\n" -" -i --inlines\t\t Desenreda las funciones inline\n" +" -i --inlines Desenreda las funciones inline\n" +" -j --section= Lee los desplazamientos relativos a sección en lugar\n" +" de las direcciones\n" " -s --basenames Elimina los nombres de directorio\n" " -f --functions Muestra los nombres de función\n" " -C --demangle[=estilo] Desenreda los nombres de función\n" @@ -57,217 +61,273 @@ msgstr "" " -v --version Muestra la versión del programa\n" "\n" -#: 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:94 ar.c:295 coffdump.c:469 dlltool.c:3832 dllwrap.c:510 +#: nlmconv.c:1113 objcopy.c:563 objcopy.c:598 readelf.c:2922 size.c:99 +#: srconv.c:1741 strings.c:676 sysdump.c:653 windmc.c:233 windres.c:698 #, c-format msgid "Report bugs to %s\n" msgstr "Reportar bichos a %s\n" -#: addr2line.c:253 +#: addr2line.c:281 #, c-format -msgid "%s: can not get addresses from archive" +msgid "%s: cannot get addresses from archive" msgstr "%s: no se pueden obtener las direcciones del archivo" -#: addr2line.c:325 nm.c:1523 objdump.c:3033 +#: addr2line.c:298 +#, c-format +msgid "%s: cannot find section %s" +msgstr "%s: no se puede encontrar la sección %s" + +#: addr2line.c:364 nm.c:1554 objdump.c:3229 #, c-format msgid "unknown demangling style `%s'" msgstr "estilo de desenredo `%s' desconocido" -#: ar.c:203 +#: ar.c:218 #, c-format msgid "no entry %s in archive\n" msgstr "no existe la entrada %s en el archivo\n" -#: ar.c:219 +#: ar.c:236 +#, c-format +msgid "Usage: %s [emulation options] [--plugin ] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" +msgstr "Modo de empleo: %s [opciones emulación] [--plugin ] [-]{dmpqrstx}[abcfilNoPsSuvV] [nombre-miembro] [cuenta] fichero-archivo fichero...\n" + +#: ar.c:238 #, c-format msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" msgstr "Modo de empleo: %s [opciones emulación] [-]{dmpqrstx}[abcfilNoPsSuvV] [nombre-miembro] [cuenta] fichero-archivo fichero...\n" -#: ar.c:222 +#: ar.c:243 #, c-format msgid " %s -M []\n" -#: ar.c:223 +#: ar.c:244 #, c-format msgid " commands:\n" msgstr " órdenes:\n" -#: ar.c:224 +#: ar.c:245 #, c-format msgid " d - delete file(s) from the archive\n" msgstr " d - borra fichero(s) del archivo\n" -#: ar.c:225 +#: ar.c:246 #, c-format msgid " m[ab] - move file(s) in the archive\n" msgstr " m[ab] - mueve fichero(s) en el archivo\n" -#: ar.c:226 +#: ar.c:247 #, c-format msgid " p - print file(s) found in the archive\n" msgstr " p - muestra fichero(s) encontrados en el archivo\n" -#: ar.c:227 +#: ar.c:248 #, c-format msgid " q[f] - quick append file(s) to the archive\n" msgstr " q[f] - agrega rápidamente fichero(s) al archivo\n" -#: ar.c:228 +#: ar.c:249 #, c-format msgid " r[ab][f][u] - replace existing or insert new file(s) into the archive\n" msgstr " r[ab][f][u] - reemplaza fichero(s) existente(s) o inserta fichero(s) nuevo(s) en el archivo\n" -#: ar.c:229 +#: ar.c:250 #, c-format msgid " t - display contents of archive\n" msgstr " t - muestra los contenidos del archivo\n" -#: ar.c:230 +#: ar.c:251 #, c-format msgid " x[o] - extract file(s) from the archive\n" msgstr " x[o] - extrae fichero(s) del archivo\n" -#: ar.c:231 +#: ar.c:252 #, c-format msgid " command specific modifiers:\n" msgstr " modificadores específicos de la orden:\n" -#: ar.c:232 +#: ar.c:253 #, c-format msgid " [a] - put file(s) after [member-name]\n" msgstr " [a] - coloca fichero(s) despúes de [nombre-miembro]\n" -#: ar.c:233 +#: ar.c:254 #, c-format msgid " [b] - put file(s) before [member-name] (same as [i])\n" msgstr " [b] - coloca fichero(s) antes de [nombre-miembro] (igual que [i])\n" -#: ar.c:234 +#: ar.c:255 +#, c-format +msgid " [D] - use zero for timestamps and uids/gids\n" +msgstr " [D] - utiliza cero para marcas de tiempo y uids/gids\n" + +#: ar.c:256 #, c-format msgid " [N] - use instance [count] of name\n" msgstr " [N] - usa la instancia [cuenta] del nombre\n" -#: ar.c:235 +#: ar.c:257 #, c-format msgid " [f] - truncate inserted file names\n" msgstr " [f] - trunca los nombres de fichero insertados\n" -#: ar.c:236 +#: ar.c:258 #, c-format msgid " [P] - use full path names when matching\n" msgstr " [P] - utiliza nombres completos de ruta cuando se buscan coincidencias\n" -#: ar.c:237 +#: ar.c:259 #, c-format msgid " [o] - preserve original dates\n" msgstr " [o] - conserva las fechas originales\n" -#: ar.c:238 +#: ar.c:260 #, c-format msgid " [u] - only replace files that are newer than current archive contents\n" msgstr " [u] - sólo reemplaza ficheros que sean más nuevos que el contenido actual del archivo\n" -#: ar.c:239 +#: ar.c:261 #, c-format msgid " generic modifiers:\n" msgstr " modificadores genéricos:\n" -#: ar.c:240 +#: ar.c:262 #, c-format msgid " [c] - do not warn if the library had to be created\n" msgstr " [c] - no avisa si se tiene que crear la biblioteca\n" -#: ar.c:241 +#: ar.c:263 #, c-format msgid " [s] - create an archive index (cf. ranlib)\n" msgstr " [s] - crea un índice del archivo (cf. ranlib)\n" -#: ar.c:242 +#: ar.c:264 #, c-format msgid " [S] - do not build a symbol table\n" msgstr " [S] - no construye una tabla de símbolos\n" -#: ar.c:243 +#: ar.c:265 +#, c-format +msgid " [T] - make a thin archive\n" +msgstr " [T] - hace un archivo delgado\n" + +#: ar.c:266 #, c-format msgid " [v] - be verbose\n" msgstr " [v] - detallado\n" -#: ar.c:244 +#: ar.c:267 #, c-format msgid " [V] - display the version number\n" msgstr " [V] - muestra el número de versión\n" -#: ar.c:245 +#: ar.c:268 #, c-format msgid " @ - read options from \n" msgstr " @ - lee opciones del \n" -#: ar.c:252 +#: ar.c:270 +#, c-format +msgid " optional:\n" +msgstr " opcional:\n" + +#: ar.c:271 +#, c-format +msgid " --plugin

- load the specified plugin\n" +msgstr " --plugin

- carga el plugin especificado\n" + +#: ar.c:278 #, c-format msgid "Usage: %s [options] archive\n" msgstr "Modo de empleo: %s [opciones] archivo\n" -#: ar.c:253 +#: ar.c:279 #, c-format msgid " Generate an index to speed access to archives\n" -msgstr " Generar un índice para acelerar el acceso a los archivos\n" +msgstr " Genera un índice para acelerar el acceso a los archivos\n" -#: ar.c:254 +#: ar.c:280 #, c-format msgid "" " The options are:\n" " @ Read options from \n" -" -h --help Print this help message\n" -" -V --version Print version information\n" msgstr "" " Las opciones son:\n" " @ Lee opciones del \n" + +#: ar.c:283 +#, c-format +msgid " --plugin Load the specified plugin\n" +msgstr " --plugin Carga el plugin especificado\n" + +#: ar.c:286 +#, c-format +msgid "" +" -t Update the archive's symbol map timestamp\n" +" -h --help Print this help message\n" +" -v --version Print version information\n" +msgstr "" +" -t Actualiza la marca de tiempo del mapa de\n" +" símbolos del archivo\n" " -h --help Muestra este mensaje de ayuda\n" " -V --version Muestra la información de versión\n" -#: ar.c:485 +#: ar.c:512 nm.c:1626 +#, c-format +msgid "sorry - this program has been built without plugin support\n" +msgstr "perdón - este programa se construyó sin soporte para plugins\n" + +#: ar.c:539 msgid "two different operation options specified" msgstr "se especificaron dos opciones de operación diferentes" -#: ar.c:560 +#: ar.c:620 #, c-format msgid "illegal option -- %c" msgstr "opción ilegal -- %c" -#: ar.c:606 +#: ar.c:663 msgid "no operation specified" msgstr "no se especificó una operación" -#: ar.c:609 +#: ar.c:666 msgid "`u' is only meaningful with the `r' option." -msgstr "`u' sólo tiene significado con la opción `r'." +msgstr "`u' sólo tiene sentido con la opción `r'." -#: ar.c:617 +#: ar.c:669 +msgid "`u' is not meaningful with the `D' option." +msgstr "`u' no tiene sentido con la opción `D'." + +#: ar.c:677 msgid "`N' is only meaningful with the `x' and `d' options." -msgstr "`N' sólo tiene significado con las opciones `x' y `d'." +msgstr "`N' sólo tiene sentido con las opciones `x' y `d'." -#: ar.c:620 +#: ar.c:680 msgid "Value for `N' must be positive." msgstr "El valor para `N' debe ser positivo." -#: ar.c:670 +#: ar.c:692 +msgid "`x' cannot be used on thin archives." +msgstr "no se puede usar `x' en archivos delgados." + +#: ar.c:733 #, c-format msgid "internal error -- this option not implemented" msgstr "error interno -- esta opción no está implementada" -#: ar.c:739 +#: ar.c:802 #, c-format msgid "creating %s" msgstr "creando %s" -#: ar.c:788 ar.c:838 ar.c:1156 objcopy.c:1683 +#: ar.c:851 ar.c:906 ar.c:1234 objcopy.c:2026 #, c-format msgid "internal stat error on %s" msgstr "error interno de stat en %s" -#: ar.c:792 +#: ar.c:855 #, c-format msgid "" "\n" @@ -278,168 +338,173 @@ msgstr "" "<%s>\n" "\n" -#: ar.c:808 ar.c:875 +#: ar.c:871 ar.c:939 #, c-format msgid "%s is not a valid archive" msgstr "%s no es un archivo válido" -#: ar.c:843 -#, c-format -msgid "stat returns negative size for %s" -msgstr "stat devuelve un valor negativo para %s" - -#: ar.c:1061 +#: ar.c:1139 #, c-format msgid "No member named `%s'\n" msgstr "No hay un miembro llamado `%s'\n" -#: ar.c:1111 +#: ar.c:1189 #, c-format msgid "no entry %s in archive %s!" -msgstr "¡no hay una entrada %s en el archivo %s!" +msgstr "¡No hay una entrada %s en el archivo %s!" -#: ar.c:1248 +#: ar.c:1328 #, c-format msgid "%s: no archive map to update" msgstr "%s: no hay un mapa de archivo para actualizar" -#: arsup.c:87 +#: arsup.c:89 #, c-format msgid "No entry %s in archive.\n" msgstr "No hay una entrada %s en el archivo.\n" -#: arsup.c:112 +#: arsup.c:114 #, c-format msgid "Can't open file %s\n" msgstr "No se puede abrir el fichero %s\n" -#: arsup.c:162 +#: arsup.c:164 #, c-format msgid "%s: Can't open output archive %s\n" msgstr "%s: No se puede abrir el fichero de salida %s\n" -#: arsup.c:179 +#: arsup.c:181 #, c-format msgid "%s: Can't open input archive %s\n" msgstr "%s: No se puede abrir el fichero de entrada %s\n" -#: arsup.c:188 +#: arsup.c:190 #, c-format msgid "%s: file %s is not an archive\n" msgstr "%s: el fichero %s no es un archivo\n" -#: arsup.c:227 +#: arsup.c:230 #, c-format msgid "%s: no output archive specified yet\n" msgstr "%s: no se ha especificado aún un archivo de salida\n" -#: arsup.c:247 arsup.c:285 arsup.c:327 arsup.c:347 arsup.c:413 +#: arsup.c:250 arsup.c:288 arsup.c:330 arsup.c:350 arsup.c:416 #, c-format msgid "%s: no open output archive\n" msgstr "%s: no hay un archivo de salida abierto\n" -#: arsup.c:258 arsup.c:368 arsup.c:394 +#: arsup.c:261 arsup.c:371 arsup.c:397 #, c-format msgid "%s: can't open file %s\n" msgstr "%s: no se puede abrir el fichero %s\n" -#: arsup.c:312 arsup.c:390 arsup.c:471 +#: arsup.c:315 arsup.c:393 arsup.c:474 #, c-format msgid "%s: can't find module file %s\n" msgstr "%s: no se puede encontrar el fichero de módulo %s\n" -#: arsup.c:422 +#: arsup.c:425 #, c-format msgid "Current open archive is %s\n" msgstr "El archivo actualmente abierto es %s\n" -#: arsup.c:446 +#: arsup.c:449 #, c-format msgid "%s: no open archive\n" msgstr "%s: no hay un archivo abierto\n" -#: binemul.c:37 +#: bin2c.c:59 +#, c-format +msgid "Usage: %s < input_file > output_file\n" +msgstr "Modo de empleo: %s < fichero_entrada > fichero_salida\n" + +#: bin2c.c:60 +#, c-format +msgid "Prints bytes from stdin in hex format.\n" +msgstr "Muestra los bytes de la entrada estándar en formato hexadecimal.\n" + +#: binemul.c:38 #, c-format msgid " No emulation specific options\n" msgstr " No hay opciones específicas de la emulación\n" #. Macros for common output. -#: binemul.h:40 +#: binemul.h:43 #, c-format msgid " emulation options: \n" -msgstr " opciones de emulación:\n" +msgstr " opciones de emulación: \n" -#: bucomm.c:110 +#: bucomm.c:157 #, c-format msgid "can't set BFD default target to `%s': %s" msgstr "no se puede establecer el objetivo BFD por defecto a `%s': %s" -#: bucomm.c:121 +#: bucomm.c:168 #, c-format msgid "%s: Matching formats:" msgstr "%s: Formatos coincidentes:" -#: bucomm.c:136 +#: bucomm.c:183 #, c-format msgid "Supported targets:" -msgstr "Objetivos con soporte:" +msgstr "Objetivos admitidos:" -#: bucomm.c:138 +#: bucomm.c:185 #, c-format msgid "%s: supported targets:" -msgstr "%s: objetivos con soporte:" +msgstr "%s: objetivos admitidos:" -#: bucomm.c:154 +#: bucomm.c:202 #, c-format msgid "Supported architectures:" -msgstr "Arquitecturas con soporte:" +msgstr "Arquitecturas admitidas:" -#: bucomm.c:156 +#: bucomm.c:204 #, c-format msgid "%s: supported architectures:" -msgstr "%s: arquitecturas con soporte:" +msgstr "%s: arquitecturas admitidas:" -#: bucomm.c:349 +#: bucomm.c:398 #, c-format msgid "BFD header file version %s\n" msgstr "encabezado del fichero BFD versión %s\n" -#: bucomm.c:450 +#: bucomm.c:547 #, c-format msgid "%s: bad number: %s" msgstr "%s: número erróneo: %s" -#: bucomm.c:467 strings.c:438 +#: bucomm.c:564 strings.c:422 #, c-format msgid "'%s': No such file" msgstr "'%s': No hay tal fichero" -#: bucomm.c:469 strings.c:440 +#: bucomm.c:566 strings.c:424 #, c-format msgid "Warning: could not locate '%s'. reason: %s" -msgstr "Aviso: no se puede encontrar '%s'. razón: %s" +msgstr "Aviso: no se puede localizar '%s'. razón: %s" -#: bucomm.c:473 +#: bucomm.c:570 #, c-format msgid "Warning: '%s' is not an ordinary file" msgstr "Aviso: '%s' no es un fichero ordinario" -#: coffdump.c:103 +#: coffdump.c:106 #, c-format msgid "#lines %d " msgstr "#líneas %d " -#: coffdump.c:457 sysdump.c:641 +#: coffdump.c:460 sysdump.c:646 #, c-format msgid "Usage: %s [option(s)] in-file\n" msgstr "Modo de empleo: %s [opcion(es)] fichero-entrada\n" -#: coffdump.c:458 +#: coffdump.c:461 #, c-format msgid " Print a human readable interpretation of a SYSROFF object file\n" msgstr " Muestra una interpretación legible por humanos de un fichero objeto SYSROFF\n" -#: coffdump.c:459 +#: coffdump.c:462 #, c-format msgid "" " The options are:\n" @@ -454,726 +519,780 @@ msgstr "" " -v --version Muestra la versión del programa\n" "\n" -#: coffdump.c:528 srconv.c:1822 sysdump.c:705 +#: coffdump.c:531 srconv.c:1831 sysdump.c:710 msgid "no input file specified" msgstr "no se especificó un fichero de entrada" -#: debug.c:648 +#: cxxfilt.c:119 nm.c:264 objdump.c:251 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Reportar bichos a %s.\n" + +#: debug.c:647 msgid "debug_add_to_current_namespace: no current file" msgstr "debug_add_to_current_namespace: no hay un fichero actual" -#: debug.c:727 +#: debug.c:726 msgid "debug_start_source: no debug_set_filename call" msgstr "debug_start_source: no hay una llamada debug_set_filename" -#: debug.c:783 +#: debug.c:782 msgid "debug_record_function: no debug_set_filename call" msgstr "debug_record_function: no hay una llamada debug_set_filename" -#: debug.c:835 +#: debug.c:834 msgid "debug_record_parameter: no current function" msgstr "debug_record_parameter: no hay una función actual" -#: debug.c:867 +#: debug.c:866 msgid "debug_end_function: no current function" msgstr "debug_end_function: no hay una función actual" -#: debug.c:873 +#: debug.c:872 msgid "debug_end_function: some blocks were not closed" -msgstr "debug_end_function: algunos bloques no fueron cerrados" +msgstr "debug_end_function: algunos bloques no estaban cerrados" -#: debug.c:901 +#: debug.c:900 msgid "debug_start_block: no current block" msgstr "debug_start_block: no hay un bloque actual" -#: debug.c:937 +#: debug.c:936 msgid "debug_end_block: no current block" msgstr "debug_end_block: no hay un bloque actual" -#: debug.c:944 +#: debug.c:943 msgid "debug_end_block: attempt to close top level block" -msgstr "debug_end_block: intento de cerrar el bloque del nivel principal" +msgstr "debug_end_block: se intenta cerrar el bloque del nivel principal" -#: debug.c:967 +#: debug.c:966 msgid "debug_record_line: no current unit" msgstr "debug_record_line: no hay una unidad actual" #. FIXME -#: debug.c:1020 +#: debug.c:1019 msgid "debug_start_common_block: not implemented" -msgstr "debug_start_common_block: no está implementado" +msgstr "debug_start_common_block: sin implementar" #. FIXME -#: debug.c:1031 +#: debug.c:1030 msgid "debug_end_common_block: not implemented" -msgstr "debug_end_common_block: no está implementado" +msgstr "debug_end_common_block: sin implementar" #. FIXME. -#: debug.c:1115 +#: debug.c:1114 msgid "debug_record_label: not implemented" -msgstr "debug_record_label: no está implementado" +msgstr "debug_record_label: sin implementar" -#: debug.c:1137 +#: debug.c:1136 msgid "debug_record_variable: no current file" msgstr "debug_record_variable: no hay un fichero actual" -#: debug.c:1665 +#: debug.c:1664 msgid "debug_make_undefined_type: unsupported kind" -msgstr "debug_make_undefined_type: género sin soporte" +msgstr "debug_make_undefined_type: no se admite el género" -#: debug.c:1842 +#: debug.c:1841 msgid "debug_name_type: no current file" msgstr "debug_name_type: no hay fichero actual" -#: debug.c:1887 +#: debug.c:1886 msgid "debug_tag_type: no current file" msgstr "debug_tag_type: no hay fichero actual" -#: debug.c:1895 +#: debug.c:1894 msgid "debug_tag_type: extra tag attempted" msgstr "debug_tag_type: se intentó una marca extra" -#: debug.c:1932 +#: debug.c:1931 #, c-format msgid "Warning: changing type size from %d to %d\n" msgstr "Aviso: cambiando el tamaño del tipo de %d a %d\n" -#: debug.c:1954 +#: debug.c:1953 msgid "debug_find_named_type: no current compilation unit" msgstr "debug_find_named_type: no hay una unidad de compilación actual" -#: debug.c:2057 +#: debug.c:2056 #, c-format msgid "debug_get_real_type: circular debug information for %s\n" msgstr "debug_get_real_type: información de depuración circular para %s\n" -#: debug.c:2484 +#: debug.c:2483 msgid "debug_write_type: illegal type encountered" msgstr "debug_write_type: se encontró un tipo ilegal" -#: dlltool.c:765 dlltool.c:789 dlltool.c:818 +#: dlltool.c:884 dlltool.c:910 dlltool.c:941 #, c-format msgid "Internal error: Unknown machine type: %d" msgstr "Error interno: Tipo de máquina desconocido: %d" -#: dlltool.c:854 +#: dlltool.c:982 #, c-format msgid "Can't open def file: %s" msgstr "No se puede abrir el fichero def: %s" -#: dlltool.c:859 +#: dlltool.c:987 #, c-format msgid "Processing def file: %s" -msgstr "Procesando el fichero def: %s" +msgstr "Se procesa el fichero def: %s" -#: dlltool.c:863 +#: dlltool.c:991 msgid "Processed def file" msgstr "Fichero def procesado" -#: dlltool.c:887 +#: dlltool.c:1015 #, c-format msgid "Syntax error in def file %s:%d" msgstr "Error sintáctico en el fichero def %s:%d" -#: dlltool.c:922 +#: dlltool.c:1050 #, c-format msgid "%s: Path components stripped from image name, '%s'." msgstr "%s: Se eliminaron los componentes de la ruta del nombre de la imagen, '%s'." -#: dlltool.c:931 +#: dlltool.c:1068 #, c-format msgid "NAME: %s base: %x" msgstr "NOMBRE: %s base: %x" -#: dlltool.c:934 dlltool.c:950 +#: dlltool.c:1071 dlltool.c:1087 msgid "Can't have LIBRARY and NAME" msgstr "No se puede tener BIBLIOTECA y NOMBRE" -#: dlltool.c:947 +#: dlltool.c:1084 #, c-format msgid "LIBRARY: %s base: %x" -msgstr "BIBLIOTECA: %s base %x" +msgstr "BIBLIOTECA: %s base: %x" -#: dlltool.c:1183 resrc.c:269 +#: dlltool.c:1320 resrc.c:293 #, c-format msgid "wait: %s" -msgstr "espera: %s" +msgstr "wait: %s" -#: dlltool.c:1188 dllwrap.c:413 resrc.c:274 +#: dlltool.c:1325 dllwrap.c:410 resrc.c:298 #, c-format msgid "subprocess got fatal signal %d" msgstr "el subproceso recibió la señal fatal %d" -#: dlltool.c:1194 dllwrap.c:420 resrc.c:281 +#: dlltool.c:1331 dllwrap.c:417 resrc.c:305 #, c-format msgid "%s exited with status %d" msgstr "%s terminó con estado %d" -#: dlltool.c:1225 +#: dlltool.c:1362 #, c-format msgid "Sucking in info from %s section in %s" -msgstr "Succionando la información de la sección %s en %s" +msgstr "Se succiona la información de la sección %s en %s" -#: dlltool.c:1350 +#: dlltool.c:1487 #, c-format msgid "Excluding symbol: %s" -msgstr "Excluyendo el símbolo: %s" +msgstr "Se excluye el símbolo: %s" -#: dlltool.c:1439 dlltool.c:1450 nm.c:1000 nm.c:1011 +#: dlltool.c:1576 dlltool.c:1587 nm.c:1001 nm.c:1012 #, c-format msgid "%s: no symbols" msgstr "%s: no hay símbolos" #. FIXME: we ought to read in and block out the base relocations. -#: dlltool.c:1476 +#: dlltool.c:1613 #, c-format msgid "Done reading %s" msgstr "%s leído" -#: dlltool.c:1486 +#: dlltool.c:1623 #, c-format msgid "Unable to open object file: %s" msgstr "No se puede abrir el fichero objeto: %s" -#: dlltool.c:1489 +#: dlltool.c:1626 #, c-format msgid "Scanning object file %s" -msgstr "Revisando el fichero objeto %s" +msgstr "Se revisa el fichero objeto %s" -#: dlltool.c:1504 +#: dlltool.c:1641 #, c-format msgid "Cannot produce mcore-elf dll from archive file: %s" msgstr "No se puede producir una dll mcore-elf del fichero archivo: %s" -#: dlltool.c:1590 +#: dlltool.c:1741 msgid "Adding exports to output file" -msgstr "Agregando exportaciones al fichero de salida" +msgstr "Se agregan exportaciones al fichero de salida" -#: dlltool.c:1638 +#: dlltool.c:1789 msgid "Added exports to output file" msgstr "Exportaciones agregadas al fichero de salida" -#: dlltool.c:1759 +#: dlltool.c:1930 #, c-format msgid "Generating export file: %s" -msgstr "Generando el fichero de exportación: %s" +msgstr "Se genera el fichero de exportación: %s" -#: dlltool.c:1764 +#: dlltool.c:1935 #, c-format msgid "Unable to open temporary assembler file: %s" msgstr "No se puede abrir el fichero temporal de ensamblador: %s" -#: dlltool.c:1767 +#: dlltool.c:1938 #, c-format msgid "Opened temporary file: %s" msgstr "Se abrió el fichero temporal: %s" -#: dlltool.c:1989 +#: dlltool.c:2113 +msgid "failed to read the number of entries from base file" +msgstr "Falló la lectura del número de entradas del fichero base" + +#: dlltool.c:2161 msgid "Generated exports file" msgstr "Fichero de exportación generado" -#: dlltool.c:2195 +#: dlltool.c:2370 #, c-format msgid "bfd_open failed open stub file: %s" -msgstr "falló bfd_open al abrirl el fichero de cabos: %s" +msgstr "falló bfd_open al abrir el fichero de cabos: %s" -#: dlltool.c:2198 +#: dlltool.c:2373 #, c-format msgid "Creating stub file: %s" -msgstr "Creando el ficheor de cabos: %s" +msgstr "Se crea el fichero de cabos: %s" -#: dlltool.c:2580 +#: dlltool.c:2837 dlltool.c:2906 #, c-format msgid "failed to open temporary head file: %s" -msgstr "falló la apertura del inicio del fichero temporal: %s" +msgstr "falló al abrir el fichero de encabezado temporal: %s" -#: dlltool.c:2639 +#: dlltool.c:2979 #, c-format msgid "failed to open temporary tail file: %s" -msgstr "falló la apertura del final del fichero temporal: %s" +msgstr "falló al abrir el fichero de cola temporal: %s" -#: dlltool.c:2706 +#: dlltool.c:3052 #, c-format msgid "Can't open .lib file: %s" msgstr "No se puede abrir el fichero .lib: %s" -#: dlltool.c:2709 +#: dlltool.c:3055 #, c-format msgid "Creating library file: %s" -msgstr "Creando el fichero de biblioteca: %s" +msgstr "Se crea el fichero de biblioteca: %s" -#: dlltool.c:2792 dlltool.c:2798 +#: dlltool.c:3146 dlltool.c:3152 #, c-format msgid "cannot delete %s: %s" msgstr "no se puede borrar %s: %s" -#: dlltool.c:2803 +#: dlltool.c:3157 msgid "Created lib file" -msgstr "Fichero de biblioteca creado" +msgstr "Se creó el fichero de biblioteca" + +#: dlltool.c:3369 dlltool.c:3391 +#, c-format +msgid "%s is not a library" +msgstr "%s no es una biblioteca" -#: dlltool.c:2882 +#: dlltool.c:3409 +#, c-format +msgid "Import library `%s' specifies two or more dlls" +msgstr "La biblioteca de importación `%s' especifica dos o más dlls" + +#: dlltool.c:3420 +#, c-format +msgid "Unable to determine dll name for `%s' (not an import library?)" +msgstr "No se puede determinar el nombre dll para `%s' (¿No es una biblioteca de importación?)" + +#: dlltool.c:3641 #, c-format msgid "Warning, ignoring duplicate EXPORT %s %d,%d" -msgstr "Aviso, ignorando las EXPORTaciones duplicadas %s %d,%d" +msgstr "Aviso, se descartan las EXPORTaciones duplicadas %s %d,%d" -#: dlltool.c:2888 +#: dlltool.c:3647 #, c-format -msgid "Error, duplicate EXPORT with oridinals: %s" -msgstr "Error, EXPORTaciones duplicadas con ordinales: %s" +msgid "Error, duplicate EXPORT with ordinals: %s" +msgstr "Error, EXPORT duplicado con ordinales: %s" -#: dlltool.c:2993 +#: dlltool.c:3752 msgid "Processing definitions" -msgstr "Procesando definiciones" +msgstr "Se procesan definiciones" -#: dlltool.c:3025 +#: dlltool.c:3784 msgid "Processed definitions" msgstr "Definiciones procesadas" #. xgetext:c-format -#: dlltool.c:3032 dllwrap.c:474 +#: dlltool.c:3791 dllwrap.c:471 #, c-format msgid "Usage %s \n" msgstr "Modo de empleo %s \n" #. xgetext:c-format -#: dlltool.c:3034 +#: dlltool.c:3793 #, c-format msgid " -m --machine Create as DLL for . [default: %s]\n" -msgstr " -m --machine Crear una DLL para la . [por defecto: %s]\n" +msgstr " -m --machine Crea una DLL para la . [por defecto: %s]\n" -#: dlltool.c:3035 +#: dlltool.c:3794 #, c-format msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -msgstr " posible: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" +msgstr " posibles: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -#: dlltool.c:3036 +#: dlltool.c:3795 #, c-format msgid " -e --output-exp Generate an export file.\n" -msgstr " -e --output-exp Generar un fichero de exportación.\n" +msgstr " -e --output-exp Genera un fichero de exportación.\n" -#: dlltool.c:3037 +#: dlltool.c:3796 #, c-format msgid " -l --output-lib Generate an interface library.\n" -msgstr " -l --output-lib Generar un fichero de interfaz.\n" +msgstr " -l --output-lib Genera una biblioteca de interfaz.\n" -#: dlltool.c:3038 +#: dlltool.c:3797 +#, c-format +msgid " -y --output-delaylib Create a delay-import library.\n" +msgstr " -y --output-delaylib Genera una biblioteca de retraso de importación.\n" + +#: dlltool.c:3798 #, c-format msgid " -a --add-indirect Add dll indirects to export file.\n" -msgstr " -a --add-indirect Agregar indirecciones dll al fichero de exportación.\n" +msgstr " -a --add-indirect Agrega indirecciones dll al fichero de exportación.\n" -#: dlltool.c:3039 +#: dlltool.c:3799 #, c-format msgid " -D --dllname Name of input dll to put into interface lib.\n" msgstr " -D --dllname Nombre de la dll de entrada a colocar en la biblioteca de interfaz.\n" -#: dlltool.c:3040 +#: dlltool.c:3800 #, c-format msgid " -d --input-def Name of .def file to be read in.\n" msgstr " -d --input-def Nombre del fichero .def para leer.\n" -#: dlltool.c:3041 +#: dlltool.c:3801 #, c-format msgid " -z --output-def Name of .def file to be created.\n" msgstr " -z --output-def Nombre del fichero .def para crear.\n" -#: dlltool.c:3042 +#: dlltool.c:3802 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" -msgstr " --export-all-symbols Exportar todos los símbolos a un .def\n" +msgstr " --export-all-symbols Exporta todos los símbolos a un .def\n" -#: dlltool.c:3043 +#: dlltool.c:3803 #, c-format msgid " --no-export-all-symbols Only export listed symbols\n" -msgstr " --no-export-all-symbols Sólo exportar los símbolos enlistados\n" +msgstr " --no-export-all-symbols Sólo exporta los símbolos enlistados\n" -#: dlltool.c:3044 +#: dlltool.c:3804 #, c-format msgid " --exclude-symbols Don't export \n" -msgstr " --exclude-symbols No exportar la a\n" +msgstr " --exclude-symbols No exporta la a\n" -#: dlltool.c:3045 +#: dlltool.c:3805 #, c-format msgid " --no-default-excludes Clear default exclude symbols\n" -msgstr " --no-default-excludes Limpiar los símbolos excluídos por defecto\n" +msgstr " --no-default-excludes Limpia los símbolos excluídos por defecto\n" -#: dlltool.c:3046 +#: dlltool.c:3806 #, c-format msgid " -b --base-file Read linker generated base file.\n" -msgstr " -b --base-file Leer el fichero base generado por el enlazador.\n" +msgstr " -b --base-file Lee el fichero base generado por el enlazador.\n" -#: dlltool.c:3047 +#: dlltool.c:3807 #, c-format msgid " -x --no-idata4 Don't generate idata$4 section.\n" -msgstr " -x --no-idata4 No generar la sección idata$4.\n" +msgstr " -x --no-idata4 No genera la sección idata$4.\n" -#: dlltool.c:3048 +#: dlltool.c:3808 #, c-format msgid " -c --no-idata5 Don't generate idata$5 section.\n" -msgstr " -c --no-idata5 No generar la sección idata$5.\n" +msgstr " -c --no-idata5 No genera la sección idata$5.\n" + +#: dlltool.c:3809 +#, c-format +msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n" +msgstr " --use-nul-prefixed-import-tables Usa idata$4 e idata$5 con prefijo cero.\n" + +#: dlltool.c:3810 +#, c-format +msgid " -U --add-underscore Add underscores to all symbols in interface library.\n" +msgstr " -U --add-underscore Agrega subrayado a todos los símbolos en la biblioteca de interfaz.\n" -#: dlltool.c:3049 +#: dlltool.c:3811 #, c-format -msgid " -U --add-underscore Add underscores to symbols in interface library.\n" -msgstr " -U --add-underscore Agregar subrayado a los símbolos en la biblioteca de interfaz.\n" +msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n" +msgstr " --add-stdcall-underscore Agrega subrayado a los símbolos stdcall en la biblioteca de interfaz.\n" -#: dlltool.c:3050 +#: dlltool.c:3812 #, c-format msgid " -k --kill-at Kill @ from exported names.\n" -msgstr " -k --kill-at Eliminar @ de los nombres exportados.\n" +msgstr " -k --kill-at Elimina @ de los nombres exportados.\n" -#: dlltool.c:3051 +#: dlltool.c:3813 #, c-format msgid " -A --add-stdcall-alias Add aliases without @.\n" -msgstr " -A --add-stdcall-alias Agregar aliases sin @.\n" +msgstr " -A --add-stdcall-alias Agrega aliases sin @.\n" -#: dlltool.c:3052 +#: dlltool.c:3814 #, c-format msgid " -p --ext-prefix-alias Add aliases with .\n" -msgstr " -p --ext-prefix-alias Agregar aliases con .\n" +msgstr " -p --ext-prefix-alias Agrega aliases con .\n" -#: dlltool.c:3053 +#: dlltool.c:3815 #, c-format msgid " -S --as Use for assembler.\n" -msgstr " -S --as Usar para ensamblador.\n" +msgstr " -S --as Usa el para ensamblador.\n" -#: dlltool.c:3054 +#: dlltool.c:3816 #, c-format msgid " -f --as-flags Pass to the assembler.\n" -msgstr " -f --as-flags Pasar al ensamblador.\n" +msgstr " -f --as-flags Pasa al ensamblador.\n" -#: dlltool.c:3055 +#: dlltool.c:3817 #, c-format msgid " -C --compat-implib Create backward compatible import library.\n" -msgstr " -C --compat-implib Crear biblioteca de importación compatible hacia atrás.\n" +msgstr " -C --compat-implib Crea biblioteca de importación compatible hacia atrás.\n" -#: dlltool.c:3056 +#: dlltool.c:3818 #, c-format msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" -msgstr " -n --no-delete Conservar los ficheros temporales (repetir para conservación extra).\n" +msgstr " -n --no-delete Conserva los ficheros temporales (repetir para conservación extra).\n" -#: dlltool.c:3057 +#: dlltool.c:3819 #, c-format msgid " -t --temp-prefix Use to construct temp file names.\n" -msgstr " -t --temp-prefix Usar el para construir nombres de ficheros temporales.\n" +msgstr " -t --temp-prefix Usa el para construir nombres de ficheros temporales.\n" + +#: dlltool.c:3820 +#, c-format +msgid " -I --identify Report the name of the DLL associated with .\n" +msgstr " -I --identify Reporta el nombre de la DLL asociada con .\n" + +#: dlltool.c:3821 +#, c-format +msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n" +msgstr " --identify-strict Causa que --identify reporte error con DLLs múltiples.\n" -#: dlltool.c:3058 +#: dlltool.c:3822 #, c-format msgid " -v --verbose Be verbose.\n" msgstr " -v --verbose Detallado.\n" -#: dlltool.c:3059 +#: dlltool.c:3823 #, c-format msgid " -V --version Display the program version.\n" msgstr " -V --version Muestra la versión del programa.\n" -#: dlltool.c:3060 +#: dlltool.c:3824 #, c-format msgid " -h --help Display this information.\n" msgstr " -h --help Muestra esta información.\n" -#: dlltool.c:3061 +#: dlltool.c:3825 #, c-format msgid " @ Read options from .\n" msgstr " @ Lee opciones del .\n" -#: dlltool.c:3063 +#: dlltool.c:3827 #, c-format msgid " -M --mcore-elf Process mcore-elf object files into .\n" msgstr " -M --mcore-elf Procesa los ficheros objeto mcore-elf hacia .\n" -#: dlltool.c:3064 +#: dlltool.c:3828 #, c-format msgid " -L --linker Use as the linker.\n" msgstr " -L --linker Usa como el enlazador.\n" -#: dlltool.c:3065 +#: dlltool.c:3829 #, c-format msgid " -F --linker-flags Pass to the linker.\n" msgstr " -F --linker-flags Pasa al enlazador.\n" -#: dlltool.c:3181 +#: dlltool.c:3966 #, c-format msgid "Path components stripped from dllname, '%s'." msgstr "Se eliminaron los componentes de la ruta del nombre de dll, '%s'." -#: dlltool.c:3226 +#: dlltool.c:4014 #, c-format msgid "Unable to open base-file: %s" msgstr "No se puede abrir el fichero-base: %s" -#: dlltool.c:3258 +#: dlltool.c:4049 #, c-format msgid "Machine '%s' not supported" -msgstr "La máquina '%s' no tiene soporte" +msgstr "No se admite la máquina '%s'" + +#: dlltool.c:4118 +#, c-format +msgid "Warning, machine type (%d) not supported for delayimport." +msgstr "Aviso, el tipo de máquina (%d) no se admite para delayimport." -#: dlltool.c:3362 dllwrap.c:204 +#: dlltool.c:4186 dllwrap.c:201 #, c-format msgid "Tried file: %s" msgstr "Fichero intentado: %s" -#: dlltool.c:3369 dllwrap.c:211 +#: dlltool.c:4193 dllwrap.c:208 #, c-format msgid "Using file: %s" -msgstr "Usando el fichero: %s" +msgstr "Se usa el fichero: %s" -#: dllwrap.c:294 +#: dllwrap.c:291 #, c-format msgid "Keeping temporary base file %s" -msgstr "Conservando el fichero base temporal %s" +msgstr "Se conserva el fichero base temporal %s" -#: dllwrap.c:296 +#: dllwrap.c:293 #, c-format msgid "Deleting temporary base file %s" -msgstr "Borrando el fichero base temporal %s" +msgstr "Se borra el fichero base temporal %s" -#: dllwrap.c:310 +#: dllwrap.c:307 #, c-format msgid "Keeping temporary exp file %s" -msgstr "Conservando el fichero exp temporal %s" +msgstr "Se conserva el fichero exp temporal %s" -#: dllwrap.c:312 +#: dllwrap.c:309 #, c-format msgid "Deleting temporary exp file %s" -msgstr "Borrando el fichero exp temporal %s" +msgstr "Se borra el fichero exp temporal %s" -#: dllwrap.c:325 +#: dllwrap.c:322 #, c-format msgid "Keeping temporary def file %s" -msgstr "Conservando el fichero def temporal %s" +msgstr "Se conserva el fichero def temporal %s" -#: dllwrap.c:327 +#: dllwrap.c:324 #, c-format msgid "Deleting temporary def file %s" -msgstr "Borrando el fichero def temporal %s" +msgstr "Se borra el fichero def temporal %s" -#: dllwrap.c:475 +#: dllwrap.c:472 #, c-format msgid " Generic options:\n" msgstr " Opciones genéricas:\n" -#: dllwrap.c:476 +#: dllwrap.c:473 #, c-format msgid " @ Read options from \n" msgstr " @ Lee opciones del \n" -#: dllwrap.c:477 +#: dllwrap.c:474 #, c-format msgid " --quiet, -q Work quietly\n" -msgstr " --quiet, -q Trabajar silenciosamente\n" +msgstr " --quiet, -q Trabaja silenciosamente\n" -#: dllwrap.c:478 +#: dllwrap.c:475 #, c-format msgid " --verbose, -v Verbose\n" -msgstr " --verbose, -v Con detalle\n" +msgstr " --verbose, -v Con detalle\n" -#: dllwrap.c:479 +#: dllwrap.c:476 #, c-format msgid " --version Print dllwrap version\n" msgstr " --version Muestra la versión de dllwrap\n" -#: dllwrap.c:480 +#: dllwrap.c:477 #, c-format msgid " --implib Synonym for --output-lib\n" msgstr " --impllib Sinónimo para --output-lib\n" -#: dllwrap.c:481 +#: dllwrap.c:478 #, c-format msgid " Options for %s:\n" msgstr " Opciones para %s:\n" -#: dllwrap.c:482 +#: dllwrap.c:479 #, c-format msgid " --driver-name Defaults to \"gcc\"\n" msgstr " --driver-name Por defecto es \"gcc\"\n" -#: dllwrap.c:483 +#: dllwrap.c:480 #, c-format msgid " --driver-flags Override default ld flags\n" msgstr " --driver-flags Cambia las opciones por defecto de ld\n" -#: dllwrap.c:484 +#: dllwrap.c:481 #, c-format msgid " --dlltool-name Defaults to \"dlltool\"\n" msgstr " --dlltool-name Por defecto es \"dlltool\"\n" -#: dllwrap.c:485 +#: dllwrap.c:482 #, c-format msgid " --entry Specify alternate DLL entry point\n" msgstr " --entry Especifica un punto de entrada alternativo para la DLL\n" -#: dllwrap.c:486 +#: dllwrap.c:483 #, c-format msgid " --image-base Specify image base address\n" msgstr " --image-base Especifica la dirección de la imagen base\n" -#: dllwrap.c:487 +#: dllwrap.c:484 #, c-format msgid " --target i386-cygwin32 or i386-mingw32\n" msgstr " --target i386-cygwin32 ó i386-mingw32\n" -#: dllwrap.c:488 +#: dllwrap.c:485 #, c-format msgid " --dry-run Show what needs to be run\n" msgstr " --dry-run Muestra lo que se necesita ejecutar\n" -#: dllwrap.c:489 +#: dllwrap.c:486 #, c-format msgid " --mno-cygwin Create Mingw DLL\n" msgstr " --mno-cygwin Crea una DLL Mingw\n" -#: dllwrap.c:490 +#: dllwrap.c:487 #, c-format msgid " Options passed to DLLTOOL:\n" msgstr " Opciones pasadas a DLLTOOL:\n" -#: dllwrap.c:491 +#: dllwrap.c:488 #, c-format msgid " --machine \n" msgstr " --machine \n" -#: dllwrap.c:492 +#: dllwrap.c:489 #, c-format msgid " --output-exp Generate export file.\n" msgstr " --output-exp Genera un fichero de exportación.\n" # ¿No será acaso una biblioteca de salida? cfuga -#: dllwrap.c:493 +#: dllwrap.c:490 #, c-format msgid " --output-lib Generate input library.\n" msgstr " --output-lib Genera una biblioteca de entrada.\n" -#: dllwrap.c:494 +#: dllwrap.c:491 #, c-format msgid " --add-indirect Add dll indirects to export file.\n" msgstr " --add-indirect Agrega indirecciones de dll al fichero de exportación.\n" -#: dllwrap.c:495 +#: dllwrap.c:492 #, c-format msgid " --dllname Name of input dll to put into output lib.\n" msgstr " --dllname Nombre del fichero dll de entrada a colocar en la biblioteca de salida.\n" -#: dllwrap.c:496 +#: dllwrap.c:493 #, c-format msgid " --def Name input .def file\n" msgstr " --def Nombre del fichero .def de entrada\n" -#: dllwrap.c:497 +#: dllwrap.c:494 #, c-format msgid " --output-def Name output .def file\n" msgstr " --output-def Nombre del fichero .def de salida\n" -#: dllwrap.c:498 +#: dllwrap.c:495 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" msgstr " --export-all-symbols Exporta todos los símbolos a un .def\n" -#: dllwrap.c:499 +#: dllwrap.c:496 #, c-format msgid " --no-export-all-symbols Only export .drectve symbols\n" msgstr " --no-export-all-symbols Sólo exporta los símbolos .drectve\n" -#: dllwrap.c:500 +#: dllwrap.c:497 #, c-format msgid " --exclude-symbols Exclude from .def\n" msgstr " --exclude-symbols Excluye la a del .def\n" -#: dllwrap.c:501 +#: dllwrap.c:498 #, c-format msgid " --no-default-excludes Zap default exclude symbols\n" msgstr " --no-default-excludes Elimina los símbolos excluídos por defecto\n" -#: dllwrap.c:502 +#: dllwrap.c:499 #, c-format msgid " --base-file Read linker generated base file\n" msgstr " --base-file Lee el fichero base generado por el enlazador\n" -#: dllwrap.c:503 +#: dllwrap.c:500 #, c-format msgid " --no-idata4 Don't generate idata$4 section\n" msgstr " --no-idata4 No genera la sección idata$4\n" -#: dllwrap.c:504 +#: dllwrap.c:501 #, c-format msgid " --no-idata5 Don't generate idata$5 section\n" msgstr " --no-idata5 No genera la sección idata$5\n" -#: dllwrap.c:505 +#: dllwrap.c:502 #, c-format msgid " -U Add underscores to .lib\n" msgstr " -U Agrega subrayados a .lib\n" -#: dllwrap.c:506 +#: dllwrap.c:503 #, c-format msgid " -k Kill @ from exported names\n" msgstr " -k Elimina @ de los nombres exportados\n" -#: dllwrap.c:507 +#: dllwrap.c:504 #, c-format msgid " --add-stdcall-alias Add aliases without @\n" msgstr " --add-stdcall-alias Agrega aliases sin @\n" -#: dllwrap.c:508 +#: dllwrap.c:505 #, c-format msgid " --as Use for assembler\n" msgstr " --as Usa como ensamblador\n" -#: dllwrap.c:509 +#: dllwrap.c:506 #, c-format msgid " --nodelete Keep temp files.\n" msgstr " --nodelete Conserva los ficheros temporales.\n" -#: dllwrap.c:510 +#: dllwrap.c:507 #, c-format msgid " Rest are passed unmodified to the language driver\n" msgstr " El resto se pasa sin modificación al controlador del lenguaje\n" -#: dllwrap.c:782 +#: dllwrap.c:781 msgid "Must provide at least one of -o or --dllname options" msgstr "Se debe proveer por lo menos una de las opciones -o ó --dllname" -#: dllwrap.c:811 +#: dllwrap.c:810 msgid "" "no export definition file provided.\n" "Creating one, but that may not be what you want" msgstr "" "no se provee un fichero de definición de exportación.\n" -"Creando uno, pero tal vez eso no es lo que quiere" +"Se crea uno, pero tal vez eso no es lo que quiere" -#: dllwrap.c:970 +#: dllwrap.c:969 #, c-format msgid "DLLTOOL name : %s\n" msgstr "nombre DLLTOOL : %s\n" -#: dllwrap.c:971 +#: dllwrap.c:970 #, c-format msgid "DLLTOOL options : %s\n" msgstr "opciones DLLTOOL: %s\n" -#: dllwrap.c:972 +#: dllwrap.c:971 #, c-format msgid "DRIVER name : %s\n" msgstr "nombre DRIVER : %s\n" -#: dllwrap.c:973 +#: dllwrap.c:972 #, c-format msgid "DRIVER options : %s\n" msgstr "opciones DRIVER : %s\n" -#: dwarf.c:93 dwarf.c:137 readelf.c:322 readelf.c:515 +#: dwarf.c:101 dwarf.c:145 readelf.c:355 readelf.c:520 #, c-format msgid "Unhandled data length: %d\n" msgstr "Longitud de datos sin manejar: %d\n" -#: dwarf.c:237 +#: dwarf.c:294 dwarf.c:2625 msgid "badly formed extended line op encountered!\n" msgstr "¡se encontró un operador extendido de línea mal formado!\n" -#: dwarf.c:244 +#: dwarf.c:301 #, c-format msgid " Extended opcode %d: " msgstr " Código de operación extendido %d: " -#: dwarf.c:249 +#: dwarf.c:306 #, c-format msgid "" "End of Sequence\n" @@ -1182,32 +1301,32 @@ msgstr "" "Fin de la Secuencia\n" "\n" -#: dwarf.c:255 +#: dwarf.c:312 #, c-format msgid "set Address to 0x%lx\n" -msgstr "establecer la Dirección a 0x%lx\n" +msgstr "establece la Dirección a 0x%lx\n" -#: dwarf.c:260 +#: dwarf.c:317 #, c-format msgid " define new File Table entry\n" -msgstr " definir la nueva entrada en la Tabla de Ficheros\n" +msgstr " define la nueva entrada en la Tabla de Ficheros\n" -#: dwarf.c:261 dwarf.c:1944 +#: dwarf.c:318 dwarf.c:2240 #, c-format msgid " Entry\tDir\tTime\tSize\tName\n" msgstr " Entr\tDir\tHora\tTam\tNombre\n" -#: dwarf.c:263 +#: dwarf.c:320 #, c-format msgid " %d\t" msgstr " %d\t" -#: dwarf.c:266 dwarf.c:268 dwarf.c:270 dwarf.c:1956 dwarf.c:1958 dwarf.c:1960 +#: dwarf.c:323 dwarf.c:325 dwarf.c:327 dwarf.c:2252 dwarf.c:2254 dwarf.c:2256 #, c-format msgid "%lu\t" msgstr "%lu\t" -#: dwarf.c:271 +#: dwarf.c:328 #, c-format msgid "" "%s\n" @@ -1216,252 +1335,289 @@ msgstr "" "%s\n" "\n" -#: dwarf.c:275 +#: dwarf.c:332 +#, c-format +msgid "set Discriminator to %lu\n" +msgstr "establece el Discriminador a %lu\n" + +#. The test against DW_LNW_hi_user is redundant due to +#. the limited range of the unsigned char data type used +#. for op_code. +#. && op_code <= DW_LNE_hi_user +#: dwarf.c:374 +#, c-format +msgid "user defined: length %d\n" +msgstr "definido por el usuario: longitud %d\n" + +#: dwarf.c:376 dwarf.c:2656 #, c-format msgid "UNKNOWN: length %d\n" msgstr "UNKNOWN: longitud %d\n" -#: dwarf.c:288 +#: dwarf.c:389 msgid "" msgstr "" -#: dwarf.c:294 +#: dwarf.c:395 #, c-format msgid "DW_FORM_strp offset too big: %lx\n" -msgstr "desplazamiento DW_FORM_strp demasiado grande: %lx\n" +msgstr "el desplazamiento DW_FORM_strp es demasiado grande: %lx\n" -#: dwarf.c:295 +#: dwarf.c:396 msgid "" -msgstr "" +msgstr "" -#: dwarf.c:528 +#: dwarf.c:629 #, c-format msgid "Unknown TAG value: %lx" msgstr "Valor TAG desconocido: %lx" -#: dwarf.c:564 +#: dwarf.c:665 #, c-format msgid "Unknown FORM value: %lx" msgstr "Valor FORM desconocido: %lx" -#: dwarf.c:573 +#: dwarf.c:674 #, c-format msgid " %lu byte block: " msgstr " bloque de bytes %lu: " -#: dwarf.c:907 +#: dwarf.c:1092 #, c-format msgid "(User defined location op)" msgstr "(Operador de ubicación definido por el usuario)" -#: dwarf.c:909 +#: dwarf.c:1094 #, c-format msgid "(Unknown location op)" msgstr "(Operador de ubicación desconocido)" -#: dwarf.c:955 +#: dwarf.c:1142 msgid "Internal error: DWARF version is not 2 or 3.\n" msgstr "Error interno: la versión DWARF no es 2 ó 3.\n" -#: dwarf.c:1053 +#: dwarf.c:1241 msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" -msgstr "DW_FORM_data8 no tiene soporte cuando sizeof (unsigned long) != 8\n" +msgstr "DW_FORM_data8 no se admite cuando sizeof (unsigned long) != 8\n" -#: dwarf.c:1102 +#: dwarf.c:1290 #, c-format msgid " (indirect string, offset: 0x%lx): %s" msgstr " (cadena indirecta, desplazamiento 0x%lx): %s" -#: dwarf.c:1111 +#: dwarf.c:1299 #, c-format msgid "Unrecognized form: %lu\n" -msgstr "Form no reconocido: %lu\n" +msgstr "No se reconoce form: %lu\n" -#: dwarf.c:1196 +#: dwarf.c:1383 #, c-format msgid "(not inlined)" msgstr "(no es inlined)" -#: dwarf.c:1199 +#: dwarf.c:1386 #, c-format msgid "(inlined)" msgstr "(inlined)" -#: dwarf.c:1202 +#: dwarf.c:1389 #, c-format msgid "(declared as inline but ignored)" -msgstr "(declarado como inline pero ignorado)" +msgstr "(se declaró como inline pero se descarta)" -#: dwarf.c:1205 +#: dwarf.c:1392 #, c-format msgid "(declared as inline and inlined)" -msgstr "(declarado como inline y es inline)" +msgstr "(se declaró como inline y es inline)" -#: dwarf.c:1208 +#: dwarf.c:1395 #, c-format msgid " (Unknown inline attribute value: %lx)" msgstr " (Valor desconocido de atributo inline: %lx)" -#: dwarf.c:1354 dwarf.c:2484 +#: dwarf.c:1556 +#, c-format +msgid "(location list)" +msgstr "(lista de ubicación)" + +#: dwarf.c:1575 dwarf.c:3257 #, c-format msgid " [without DW_AT_frame_base]" msgstr " [sin DW_AT_frame_base]" -#: dwarf.c:1357 +#: dwarf.c:1587 #, c-format -msgid "(location list)" -msgstr "(lista de ubicación)" +msgid "Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n" +msgstr "El desplazamiento %lx usado como valor para el atributo DW_AT_import de DIE en el desplazamiento %lx es demasiado grande.\n" -#: dwarf.c:1475 +#: dwarf.c:1761 #, c-format msgid "Unknown AT value: %lx" msgstr "Valor AT desconocido: %lx" -#: dwarf.c:1544 +#: dwarf.c:1828 +#, c-format +msgid "Reserved length value (%lx) found in section %s\n" +msgstr "Se encontró un valor de longitud reservado (%lx) en la sección %s\n" + +#: dwarf.c:1839 +#, c-format +msgid "Corrupt unit length (%lx) found in section %s\n" +msgstr "Se encontró una longitud de unidad corrupta (%lx) en la sección %s\n" + +#: dwarf.c:1846 #, c-format msgid "No comp units in %s section ?" msgstr "¿ No hay unidades de compilación en la sección %s ?" -#: dwarf.c:1553 +#: dwarf.c:1855 #, c-format msgid "Not enough memory for a debug info array of %u entries" msgstr "No hay suficiente memoria para una matriz de información de depuración de %u entradas" -#: dwarf.c:1561 dwarf.c:2573 +#: dwarf.c:1863 dwarf.c:2858 dwarf.c:2952 dwarf.c:3026 dwarf.c:3143 +#: dwarf.c:3292 dwarf.c:3350 dwarf.c:3546 #, c-format msgid "" -"The section %s contains:\n" +"Contents of the %s section:\n" "\n" msgstr "" -"La sección %s contiene:\n" +"Contenido de la sección %s:\n" "\n" -#: dwarf.c:1569 +#: dwarf.c:1871 #, c-format msgid "Unable to locate %s section!\n" msgstr "¡No se puede localizar la sección %s!\n" -#: dwarf.c:1635 +#: dwarf.c:1934 #, c-format msgid " Compilation Unit @ offset 0x%lx:\n" msgstr " Unidad de Compilación @ desplazamiento 0x%lx:\n" -#: dwarf.c:1636 +#: dwarf.c:1935 #, c-format -msgid " Length: %ld\n" -msgstr " Longitud: %ld\n" +msgid " Length: 0x%lx (%s)\n" +msgstr " Longitud: 0x%lx (%s)\n" -#: dwarf.c:1637 +#: dwarf.c:1937 #, c-format msgid " Version: %d\n" msgstr " Versión: %d\n" -#: dwarf.c:1638 +#: dwarf.c:1938 #, c-format msgid " Abbrev Offset: %ld\n" msgstr " Desplaz Abrev: %ld\n" -#: dwarf.c:1639 +#: dwarf.c:1939 #, c-format msgid " Pointer Size: %d\n" msgstr " Tamaño de Puntero: %d\n" -#: dwarf.c:1644 -msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" -msgstr "Sólo la información de depuración DWARF versión 2 y 3 tiene soporte actualmente.\n" +#: dwarf.c:1945 +#, c-format +msgid "Debug info is corrupted, length of CU at %lx extends beyond end of section (length = %lx)\n" +msgstr "La información de depuración está corrupta, la longitud de CU en %lx se extiende más allá del final de la sección (longitud = %lx)\n" -#: dwarf.c:1685 +#: dwarf.c:1954 #, c-format -msgid "Unable to locate entry %lu in the abbreviation table\n" -msgstr "No se puede localizar la entrada %lu en la tabla de abreviaciones\n" +msgid "CU at offset %lx contains corrupt or unsupported version number: %d.\n" +msgstr " CU en el desplazamiento %lx contiene un número de versión corrupto o no admitido: %d.\n" -#: dwarf.c:1691 +#: dwarf.c:1964 #, c-format -msgid " <%d><%lx>: Abbrev Number: %lu (%s)\n" -msgstr " <%d><%lx>: Número de Abrev: %lu (%s)\n" +msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n" +msgstr "La información de depuración está corrupta, el desplazamiento abbrev (%lx) es mayor que el tamaño de la sección abbrev (%lx)\n" -#: dwarf.c:1785 +#: dwarf.c:1998 #, c-format -msgid "%s section needs a populated .debug_info section\n" -msgstr "la sección %s necesita una sección .debug_info llena\n" +msgid "Bogus end-of-siblings marker detected at offset %lx in .debug_info section\n" +msgstr "Se detectó un marcador de fin-de-hermanos ambiguo en el desplazamiento %lx en la sección .debug_info\n" + +#: dwarf.c:2002 +msgid "Further warnings about bogus end-of-sibling markers suppressed\n" +msgstr "Se suprimen los avisos restantes sobre marcardores de fin-de-hermanos ambiguos\n" -#: dwarf.c:1792 +#: dwarf.c:2009 #, c-format -msgid "%s section has more comp units than .debug_info section\n" -msgstr "la sección %s tiene más unidades de compilación que la sección .debug_info\n" +msgid " <%d><%lx>: Abbrev Number: %lu" +msgstr " <%d><%lx>: Número de Abrev: %lu" -#: dwarf.c:1794 +#: dwarf.c:2026 #, c-format -msgid "" -"assuming that the pointer size is %d, from the last comp unit in .debug_info\n" -"\n" -msgstr "asumiendo que el tamaño del puntero es %d, de la última unidad de compilación en .debug_info\n" +msgid "DIE at offset %lx refers to abbreviation number %lu which does not exist\n" +msgstr "DIE en el desplazamiento %lx se refiere al número de abreviación %lu el cual no existe\n" + +#: dwarf.c:2032 +#, c-format +msgid " (%s)\n" +msgstr " (%s)\n" -#: dwarf.c:1819 +#: dwarf.c:2123 #, c-format msgid "" -"\n" -"Dump of debug contents of section %s:\n" +"Raw dump of debug contents of section %s:\n" "\n" msgstr "" -"\n" -"Volcado del contenido de depuración de la sección %s:\n" +"Volcado crudo del contenido de depuración de la sección %s:\n" "\n" -#: dwarf.c:1858 -msgid "The line info appears to be corrupt - the section is too small\n" -msgstr "La información de línea parece estar corrupta - esta sección es demasiado pequeña\n" +#: dwarf.c:2161 +#, c-format +msgid "The information in section %s appears to be corrupt - the section is too small\n" +msgstr "La información en la sección %s parece estar corrupta - la sección es demasiado pequeña\n" -#: dwarf.c:1867 +#: dwarf.c:2171 dwarf.c:2459 msgid "Only DWARF version 2 and 3 line info is currently supported.\n" -msgstr "Solamente la información de línea de DWARF versión 2 y 3 tiene soporte actualmente.\n" +msgstr "Solo se admite actualmente la información de línea de DWARF versión 2 y 3.\n" -#: dwarf.c:1894 +#: dwarf.c:2192 +#, c-format +msgid " Offset: 0x%lx\n" +msgstr " Longitud: 0x%lx\n" + +#: dwarf.c:2193 #, c-format msgid " Length: %ld\n" msgstr " Longitud: %ld\n" -#: dwarf.c:1895 +#: dwarf.c:2194 #, c-format msgid " DWARF Version: %d\n" msgstr " Versión DWARF: %d\n" -#: dwarf.c:1896 +#: dwarf.c:2195 #, c-format msgid " Prologue Length: %d\n" msgstr " Longitud del Prólogo: %d\n" -#: dwarf.c:1897 +#: dwarf.c:2196 #, c-format msgid " Minimum Instruction Length: %d\n" msgstr " Longitud Mínima Instrucción: %d\n" -#: dwarf.c:1898 +#: dwarf.c:2197 #, c-format msgid " Initial value of 'is_stmt': %d\n" msgstr " Valor inicial de 'is_stmt': %d\n" -#: dwarf.c:1899 +#: dwarf.c:2198 #, c-format msgid " Line Base: %d\n" msgstr " Base Línea: %d\n" -#: dwarf.c:1900 +#: dwarf.c:2199 #, c-format msgid " Line Range: %d\n" -msgstr " Rango Lìnea: %d\n" +msgstr " Rango Línea: %d\n" -#: dwarf.c:1901 +#: dwarf.c:2200 #, c-format msgid " Opcode Base: %d\n" msgstr " Base de Código de Operación: %d\n" -#: dwarf.c:1902 -#, c-format -msgid " (Pointer size: %u)%s\n" -msgstr " (Tamaño del puntero: %u)%s\n" - -#: dwarf.c:1913 +#: dwarf.c:2209 #, c-format msgid "" "\n" @@ -1470,12 +1626,12 @@ msgstr "" "\n" " Códigos de operación:\n" -#: dwarf.c:1916 +#: dwarf.c:2212 #, c-format msgid " Opcode %d has %d args\n" msgstr " El código de operación %d tiene %d argumentos\n" -#: dwarf.c:1922 +#: dwarf.c:2218 #, c-format msgid "" "\n" @@ -1484,7 +1640,7 @@ msgstr "" "\n" " La Tabla de Directorios está vacía.\n" -#: dwarf.c:1925 +#: dwarf.c:2221 #, c-format msgid "" "\n" @@ -1493,12 +1649,12 @@ msgstr "" "\n" " La Tabla de Directorios:\n" -#: dwarf.c:1929 +#: dwarf.c:2225 #, c-format msgid " %s\n" msgstr " %s\n" -#: dwarf.c:1940 +#: dwarf.c:2236 #, c-format msgid "" "\n" @@ -1507,7 +1663,7 @@ msgstr "" "\n" " La Tabla de Nombres de Fichero está vacía.\n" -#: dwarf.c:1943 +#: dwarf.c:2239 #, c-format msgid "" "\n" @@ -1516,18 +1672,18 @@ msgstr "" "\n" " La Tabla de Nombres de Fichero:\n" -#: dwarf.c:1951 +#: dwarf.c:2247 #, c-format msgid " %d\t" msgstr " %d\t" -#: dwarf.c:1962 +#: dwarf.c:2258 #, c-format msgid "%s\n" msgstr "%s\n" #. Now display the statements. -#: dwarf.c:1970 +#: dwarf.c:2266 #, c-format msgid "" "\n" @@ -1536,177 +1692,236 @@ msgstr "" "\n" " Declaraciones de Número de Línea:\n" -#: dwarf.c:1986 +#: dwarf.c:2282 #, c-format msgid " Special opcode %d: advance Address by %lu to 0x%lx" msgstr " código de Operación especial %d: Dirección de avance por %lu a 0x%lx" -#: dwarf.c:1990 +#: dwarf.c:2286 #, c-format msgid " and Line by %d to %d\n" msgstr " y Línea por %d a %d\n" -#: dwarf.c:1998 -msgid "Extend line ops need a valid pointer size, guessing at 4\n" -msgstr "Los operadores de linea extendida necesitan un tamaño de puntero válido, adivinando en 4\n" - -#: dwarf.c:2007 +#: dwarf.c:2296 #, c-format msgid " Copy\n" msgstr " Copiar\n" -#: dwarf.c:2015 +#: dwarf.c:2304 #, c-format msgid " Advance PC by %lu to 0x%lx\n" msgstr " Avanzar el PC por %lu para %lx\n" -#: dwarf.c:2023 +#: dwarf.c:2312 #, c-format msgid " Advance Line by %d to %d\n" msgstr " Línea de Avance por %d para %d\n" -#: dwarf.c:2030 +#: dwarf.c:2319 #, c-format msgid " Set File Name to entry %d in the File Name Table\n" -msgstr " Establecer el Nombre de Fichero para la entrada %d en la Tabla de Nombres de Fichero\n" +msgstr " Establece el Nombre de Fichero para la entrada %d en la Tabla de Nombres de Fichero\n" -#: dwarf.c:2038 +#: dwarf.c:2327 #, c-format msgid " Set column to %lu\n" -msgstr " Establecer la columna a %lu\n" +msgstr " Establece la columna a %lu\n" -#: dwarf.c:2045 +#: dwarf.c:2334 #, c-format msgid " Set is_stmt to %d\n" -msgstr " Establecer is_stmt a %d\n" +msgstr " Establece is_stmt a %d\n" -#: dwarf.c:2050 +#: dwarf.c:2339 #, c-format msgid " Set basic block\n" -msgstr " Establecer el bloque básico\n" +msgstr " Establece el bloque básico\n" -#: dwarf.c:2058 +#: dwarf.c:2347 #, c-format msgid " Advance PC by constant %lu to 0x%lx\n" -msgstr " Avanzar el PC por la constante %lu a 0x%lx\n" +msgstr " Avanza el PC por la constante %lu a 0x%lx\n" -#: dwarf.c:2066 +#: dwarf.c:2355 #, c-format msgid " Advance PC by fixed size amount %lu to 0x%lx\n" -msgstr " Avanzar el PC por la cantidad de tamaño fijo %lu a 0x%lx\n" +msgstr " Avanza el PC por la cantidad de tamaño fijo %lu a 0x%lx\n" -#: dwarf.c:2071 +#: dwarf.c:2360 #, c-format msgid " Set prologue_end to true\n" -msgstr " Establecer prologue_end a true\n" +msgstr " Establece prologue_end a true\n" -#: dwarf.c:2075 +#: dwarf.c:2364 #, c-format msgid " Set epilogue_begin to true\n" -msgstr " Establecer epilogue_begin a true\n" +msgstr " Establece epilogue_begin a true\n" -#: dwarf.c:2081 +#: dwarf.c:2370 dwarf.c:2734 #, c-format msgid " Set ISA to %lu\n" -msgstr " Establecer ISA a %lu\n" +msgstr " Establece ISA a %lu\n" -#: dwarf.c:2085 +#: dwarf.c:2374 dwarf.c:2738 #, c-format msgid " Unknown opcode %d with operands: " msgstr " Código de operación desconocido %d con los operandos: " -#: dwarf.c:2111 dwarf.c:2197 dwarf.c:2271 dwarf.c:2382 dwarf.c:2514 -#: dwarf.c:2739 +#: dwarf.c:2407 #, c-format msgid "" -"Contents of the %s section:\n" +"Decoded dump of debug contents of section %s:\n" "\n" msgstr "" -"Contenido de la sección %s:\n" +"Volcado decodificado del contenido de depuración de la sección %s:\n" +"\n" + +#: dwarf.c:2449 +msgid "The line info appears to be corrupt - the section is too small\n" +msgstr "La información de línea parece estar corrupta - esta sección es demasiado pequeña\n" + +#: dwarf.c:2568 +#, c-format +msgid "CU: %s:\n" +msgstr "CU: %s:\n" + +#: dwarf.c:2569 dwarf.c:2582 +#, c-format +msgid "File name Line number Starting address\n" +msgstr "Nombre fichero Num línea Dirección inicio\n" + +#: dwarf.c:2575 +#, c-format +msgid "CU: %s/%s:\n" +msgstr "CU: %s/%s:\n" + +#: dwarf.c:2580 dwarf.c:2652 +#, c-format +msgid "%s:\n" +msgstr "%s:\n" + +#. If directory index is 0, that means current directory. +#: dwarf.c:2685 +#, c-format +msgid "" +"\n" +"./%s:[++]\n" +msgstr "" +"\n" +"./%s:[++]\n" + +#. The directory index starts counting at 1. +#: dwarf.c:2691 +#, c-format +msgid "" +"\n" +"%s/%s:\n" +msgstr "" "\n" +"%s/%s:\n" + +#: dwarf.c:2776 +#, c-format +msgid "%-35s %11d %#18lx\n" +msgstr "%-35s %11d %#18lx\n" + +#: dwarf.c:2781 +#, c-format +msgid "%s %11d %#18lx\n" +msgstr "%s %11d %#18lx\n" + +#: dwarf.c:2811 dwarf.c:3088 dwarf.c:3510 +#, c-format +msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n" +msgstr "No se puede cargar/decodificar la sección .debug_info, por eso no se puede interpretar la sección %s.\n" + +#: dwarf.c:2892 dwarf.c:3395 +#, c-format +msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n" +msgstr "el desplazamiento de .debug_info de 0x%lx en la sección %s no apunta a un encabezado CU.\n" -#: dwarf.c:2151 +#: dwarf.c:2906 msgid "Only DWARF 2 and 3 pubnames are currently supported\n" -msgstr "Actualmente sólo tienen soporte los nombres públicos DWARF 2 y 3\n" +msgstr "Solo se admiten actualmente los nombres públicos DWARF 2 y 3\n" -#: dwarf.c:2158 +#: dwarf.c:2913 #, c-format msgid " Length: %ld\n" msgstr " Longitud: %ld\n" -#: dwarf.c:2160 +#: dwarf.c:2915 #, c-format msgid " Version: %d\n" msgstr " Versión: %d\n" -#: dwarf.c:2162 +#: dwarf.c:2917 #, c-format -msgid " Offset into .debug_info section: %ld\n" -msgstr " Desplazamiento en sección .debug_info: %ld\n" +msgid " Offset into .debug_info section: 0x%lx\n" +msgstr " Desplazamiento en secc .debug_info: 0x%lx\n" -#: dwarf.c:2164 +#: dwarf.c:2919 #, c-format msgid " Size of area in .debug_info section: %ld\n" -msgstr " Tamaño de área en sección .debug_info: %ld\n" +msgstr " Tamaño de área en secc .debug_info: %ld\n" -#: dwarf.c:2167 +#: dwarf.c:2922 #, c-format msgid "" "\n" " Offset\tName\n" msgstr "" "\n" -" Desplazamiento\tNombre\n" +" Desplaz\tNombre\n" -#: dwarf.c:2218 +#: dwarf.c:2973 #, c-format msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" msgstr " DW_MACINFO_start_file - numlinea: %d numfichero: %d\n" -#: dwarf.c:2224 +#: dwarf.c:2979 #, c-format msgid " DW_MACINFO_end_file\n" msgstr " DW_MACINFO_end_file\n" -#: dwarf.c:2232 +#: dwarf.c:2987 #, c-format msgid " DW_MACINFO_define - lineno : %d macro : %s\n" msgstr " DW_MACINFO_define - numlinea : %d macro : %s\n" -#: dwarf.c:2241 +#: dwarf.c:2996 #, c-format msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" msgstr " DW_MACINFO_undef - numlinea : %d macro : %s\n" -#: dwarf.c:2253 +#: dwarf.c:3008 #, c-format msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" msgstr " DW_MACINFO_vendor_ext - constante : %d cadena : %s\n" -#: dwarf.c:2282 +#: dwarf.c:3037 #, c-format msgid " Number TAG\n" msgstr " Número TAG\n" -#: dwarf.c:2288 +#: dwarf.c:3043 #, c-format msgid " %ld %s [%s]\n" msgstr " %ld %s [%s]\n" -#: dwarf.c:2291 +#: dwarf.c:3046 msgid "has children" msgstr "tiene hijos" -#: dwarf.c:2291 +#: dwarf.c:3046 msgid "no children" msgstr "sin hijos" -#: dwarf.c:2294 +#: dwarf.c:3049 #, c-format msgid " %-18s %s\n" msgstr " %-18s %s\n" -#: dwarf.c:2327 dwarf.c:2510 dwarf.c:2684 +#: dwarf.c:3082 dwarf.c:3288 dwarf.c:3504 #, c-format msgid "" "\n" @@ -1716,487 +1931,522 @@ msgstr "" "La sección %s está vacía.\n" #. FIXME: Should we handle this case? -#: dwarf.c:2372 +#: dwarf.c:3132 msgid "Location lists in .debug_info section aren't in ascending order!\n" msgstr "¡Las listas de ubicación en la sección .debug_info no están en orden ascendente!\n" -#: dwarf.c:2375 +#: dwarf.c:3135 msgid "No location lists in .debug_info section!\n" msgstr "¡No hay listas de ubicación en la sección .debug_info!\n" -#: dwarf.c:2379 +#: dwarf.c:3140 #, c-format msgid "Location lists in %s section start at 0x%lx\n" msgstr "Las listas de ubicación en la sección %s empiezan en 0x%lx\n" -#: dwarf.c:2383 +#: dwarf.c:3144 #, c-format msgid " Offset Begin End Expression\n" msgstr " Desplaz Inicio Fin Expresión\n" -#: dwarf.c:2414 +#: dwarf.c:3175 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "Hay un agujero [0x%lx - 0x%lx] en la sección .debug_loc.\n" -#: dwarf.c:2417 +#: dwarf.c:3179 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "Hay un traslape [0x%lx - 0x%lx] en la sección .debug_loc.\n" -#: dwarf.c:2424 +#: dwarf.c:3187 #, c-format msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" msgstr "El desplazamiento 0x%lx es más grande que el tamaño de la sección .debug_loc.\n" -#: dwarf.c:2433 dwarf.c:2460 dwarf.c:2470 +#: dwarf.c:3196 dwarf.c:3231 dwarf.c:3241 #, c-format msgid "Location list starting at offset 0x%lx is not terminated.\n" msgstr "La lista de reubicación que comienza en el desplazamiento 0x%lx no está terminada.\n" -#: dwarf.c:2445 dwarf.c:2784 +#: dwarf.c:3215 dwarf.c:3597 #, c-format -msgid " %8.8lx \n" -msgstr " %8.8lx \n" +msgid "\n" +msgstr "\n" -#: dwarf.c:2453 +#: dwarf.c:3225 #, c-format -msgid " %8.8lx %8.8lx %8.8lx (base address)\n" -msgstr " %8.8lx %8.8lx %8.8lx (dirección base)\n" +msgid "(base address)\n" +msgstr "(dirección base)\n" -#: dwarf.c:2487 dwarf.c:2801 +#: dwarf.c:3260 msgid " (start == end)" msgstr " (inicio == final)" -#: dwarf.c:2489 dwarf.c:2803 +#: dwarf.c:3262 msgid " (start > end)" msgstr " (inicio > final)" -#: dwarf.c:2618 +#: dwarf.c:3272 +#, c-format +msgid "There are %ld unused bytes at the end of section %s\n" +msgstr "Hay %ld bytes sin usar al final de la sección %s\n" + +#: dwarf.c:3406 msgid "Only DWARF 2 and 3 aranges are currently supported.\n" -msgstr "Sólo los rangos-a de DWARF 2 y 3 tienen soporte actualmente.\n" +msgstr "Solo se admiten actualmente aranges de DWARF 2 y 3.\n" -#: dwarf.c:2622 +#: dwarf.c:3410 #, c-format msgid " Length: %ld\n" msgstr " Longitud: %ld\n" -#: dwarf.c:2623 +#: dwarf.c:3411 #, c-format msgid " Version: %d\n" msgstr " Versión: %d\n" -#: dwarf.c:2624 +#: dwarf.c:3412 #, c-format -msgid " Offset into .debug_info: %lx\n" -msgstr " Desplaz. en .debug_info: %lx\n" +msgid " Offset into .debug_info: 0x%lx\n" +msgstr " Desplaz. en .debug_info: 0x%lx\n" -#: dwarf.c:2625 +#: dwarf.c:3413 #, c-format msgid " Pointer Size: %d\n" msgstr " Tamaño del Puntero: %d\n" -#: dwarf.c:2626 +#: dwarf.c:3414 #, c-format msgid " Segment Size: %d\n" msgstr " Tamaño del Segmento: %d\n" -#: dwarf.c:2628 +#: dwarf.c:3423 +msgid "Pointer size + Segment size is not a power of two.\n" +msgstr "Tamaño del puntero + Tamaño del segmento no es una potencia de dos.\n" + +#: dwarf.c:3428 #, c-format msgid "" "\n" -" Address Length\n" +" Address Length\n" msgstr "" "\n" -" Longitud de la Dirección\n" +" Longitud de la Dirección\n" -#. FIXME: Should we handle this case? -#: dwarf.c:2729 -msgid "Range lists in .debug_info section aren't in ascending order!\n" -msgstr "¡Las listas de rango en la sección .debug_info no están en orden ascendente!\n" +#: dwarf.c:3430 +#, c-format +msgid "" +"\n" +" Address Length\n" +msgstr "" +"\n" +" Long Dirección\n" -#: dwarf.c:2732 +#: dwarf.c:3520 msgid "No range lists in .debug_info section!\n" msgstr "¡No hay listas de rango en la sección .debug_info!\n" -#: dwarf.c:2736 +#: dwarf.c:3543 #, c-format msgid "Range lists in %s section start at 0x%lx\n" msgstr "Las listas de rango en la sección %s inician en 0x%lx\n" -#: dwarf.c:2740 +#: dwarf.c:3547 #, c-format msgid " Offset Begin End\n" msgstr " Desplaz Inicio Fin\n" -#: dwarf.c:2765 +#: dwarf.c:3568 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" msgstr "Hay un agujero [0x%lx - 0x%lx] en la sección %s.\n" -#: dwarf.c:2769 +#: dwarf.c:3572 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" msgstr "Hay un traslape [0x%lx - 0x%lx] en la sección %s.\n" -#: dwarf.c:2964 +#: dwarf.c:3615 +msgid "(start == end)" +msgstr "(inicio == final)" + +#: dwarf.c:3617 +msgid "(start > end)" +msgstr "(inicio > final)" + +#: dwarf.c:3853 +msgid "bad register: " +msgstr "registro erróneo: " + +#: dwarf.c:3855 +#, c-format +msgid "Contents of the %s section:\n" +msgstr "Contenido de la sección %s:\n" + +#: dwarf.c:4619 #, c-format -msgid "The section %s contains:\n" -msgstr "La sección %s contiene:\n" +msgid " DW_CFA_??? (User defined call frame op: %#x)\n" +msgstr " DW_CFA_??? (Op de marco de llamada definido por el usuario: %#x)\n" -#: dwarf.c:3608 +#: dwarf.c:4621 #, c-format -msgid "unsupported or unknown DW_CFA_%d\n" -msgstr "DW_CFA_%d desconocido o sin soporte\n" +msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" +msgstr "número de Instrucción de Marco de Llamada Dwarf no admitido o desconocido: %#x\n" -#: dwarf.c:3632 +#: dwarf.c:4645 #, c-format msgid "Displaying the debug contents of section %s is not yet supported.\n" -msgstr "Aún no tiene soporte el mostrar el contenido de depuración de la sección %s.\n" +msgstr "Aún no se admite el mostrar el contenido de depuración de la sección %s.\n" -#: dwarf.c:3674 +#: dwarf.c:4687 #, c-format msgid "%s: Error: " msgstr "%s: Error: " -#: dwarf.c:3685 +#: dwarf.c:4698 #, c-format msgid "%s: Warning: " msgstr "%s: Aviso: " -#: emul_aix.c:51 +#: dwarf.c:4796 dwarf.c:4862 +#, c-format +msgid "Unrecognized debug option '%s'\n" +msgstr "No se reconoce la opción de depuración '%s'\n" + +#: emul_aix.c:43 #, c-format msgid " [-g] - 32 bit small archive\n" msgstr " [-g] - archivo small de 32 bit\n" -#: emul_aix.c:52 +#: emul_aix.c:44 #, c-format msgid " [-X32] - ignores 64 bit objects\n" -msgstr " [-X32] - ignora los objetos de 64 bit\n" +msgstr " [-X32] - descarta los objetos de 64 bit\n" -#: emul_aix.c:53 +#: emul_aix.c:45 #, c-format msgid " [-X64] - ignores 32 bit objects\n" -msgstr " [-X64] - ignora los objetos de 32 bit\n" +msgstr " [-X64] - descarta los objetos de 32 bit\n" -#: emul_aix.c:54 +#: emul_aix.c:46 #, c-format msgid " [-X32_64] - accepts 32 and 64 bit objects\n" msgstr " [-X32_64] -acepta objetos de 32 y 64 bit\n" -#: ieee.c:311 +#: ieee.c:309 msgid "unexpected end of debugging information" msgstr "fin inesperado de la información de depuración" -#: ieee.c:398 +#: ieee.c:396 msgid "invalid number" msgstr "número inválido" -#: ieee.c:451 +#: ieee.c:449 msgid "invalid string length" msgstr "longitud de cadena inválida" -#: ieee.c:506 ieee.c:547 +#: ieee.c:504 ieee.c:545 msgid "expression stack overflow" msgstr "desbordamiento de la pila de expresión" -#: ieee.c:526 +#: ieee.c:524 msgid "unsupported IEEE expression operator" -msgstr "operador de expresión IEEE sin soporte" +msgstr "no se admite el operador de expresión IEEE" -#: ieee.c:541 +#: ieee.c:539 msgid "unknown section" msgstr "sección desconocida" -#: ieee.c:562 +#: ieee.c:560 msgid "expression stack underflow" msgstr "desbordamiento por debajo de la pila de expresión" -#: ieee.c:576 +#: ieee.c:574 msgid "expression stack mismatch" msgstr "no hay coincidencia en la pila de expresión" -#: ieee.c:613 +#: ieee.c:611 msgid "unknown builtin type" msgstr "tipo interno desconocido" -#: ieee.c:758 +#: ieee.c:756 msgid "BCD float type not supported" -msgstr "tipo de coma flotante BCD sin soporte" +msgstr "no se admite el tipo de coma flotante BCD" -#: ieee.c:895 +#: ieee.c:893 msgid "unexpected number" msgstr "número inesperado" -#: ieee.c:902 +#: ieee.c:900 msgid "unexpected record type" msgstr "tipo de grabación inesperado" -#: ieee.c:935 +#: ieee.c:933 msgid "blocks left on stack at end" msgstr "se dejaron bloques en la pila al final" -#: ieee.c:1198 +#: ieee.c:1206 msgid "unknown BB type" msgstr "typo BB desconocido" -#: ieee.c:1207 +#: ieee.c:1215 msgid "stack overflow" msgstr "desbordamiento de la pila" -#: ieee.c:1230 +#: ieee.c:1238 msgid "stack underflow" msgstr "desbordamiento de la pila por debajo" -#: ieee.c:1342 ieee.c:1412 ieee.c:2109 +#: ieee.c:1350 ieee.c:1420 ieee.c:2118 msgid "illegal variable index" msgstr "índice de variable ilegal" -#: ieee.c:1390 +#: ieee.c:1398 msgid "illegal type index" msgstr "índice de tipo ilegal" -#: ieee.c:1400 ieee.c:1437 +#: ieee.c:1408 ieee.c:1445 msgid "unknown TY code" msgstr "código TY desconocido" -#: ieee.c:1419 +#: ieee.c:1427 msgid "undefined variable in TY" msgstr "variable indefinida en TY" #. Pascal file name. FIXME. -#: ieee.c:1830 +#: ieee.c:1839 msgid "Pascal file name not supported" -msgstr "El nombre de fichero Pascal no tiene soporte" +msgstr "no se admite el nombre de fichero Pascal" -#: ieee.c:1878 +#: ieee.c:1887 msgid "unsupported qualifier" -msgstr "calificador sin soporte" +msgstr "no se admite el calificador" -#: ieee.c:2147 +#: ieee.c:2156 msgid "undefined variable in ATN" -msgstr "variable indefinida en ATN" +msgstr "variable sin definir en ATN" -#: ieee.c:2190 +#: ieee.c:2199 msgid "unknown ATN type" msgstr "tipo ATN desconocido" #. Reserved for FORTRAN common. -#: ieee.c:2312 +#: ieee.c:2321 msgid "unsupported ATN11" -msgstr "ATN11 sin soporte" +msgstr "no se admite ATN11" #. We have no way to record this information. FIXME. -#: ieee.c:2339 +#: ieee.c:2348 msgid "unsupported ATN12" -msgstr "ATN12 sin soporte" +msgstr "no se admite ATN12" -#: ieee.c:2399 +#: ieee.c:2408 msgid "unexpected string in C++ misc" msgstr "cadena inesperada en misc de C++" -#: ieee.c:2412 +#: ieee.c:2421 msgid "bad misc record" msgstr "grabación misc errónea" -#: ieee.c:2453 +#: ieee.c:2462 msgid "unrecognized C++ misc record" -msgstr "grabación misc de C++ no reconocida" +msgstr "no se reconoce la grabación misc de C++" -#: ieee.c:2568 +#: ieee.c:2577 msgid "undefined C++ object" -msgstr "objeto C++ no definido" +msgstr "objeto C++ sin definir" -#: ieee.c:2602 +#: ieee.c:2611 msgid "unrecognized C++ object spec" -msgstr "especificación de objeto C++ no reconocida" +msgstr "no se reconoce la especificación de objeto C++" -#: ieee.c:2638 +#: ieee.c:2647 msgid "unsupported C++ object type" -msgstr "tipo de objeto C++ sin soporte" +msgstr "no se admite el tipo de objeto C++" -#: ieee.c:2648 +#: ieee.c:2657 msgid "C++ base class not defined" msgstr "no está definida la clase base de C++" -#: ieee.c:2660 ieee.c:2765 +#: ieee.c:2669 ieee.c:2774 msgid "C++ object has no fields" msgstr "el objeto C++ no tiene campos" -#: ieee.c:2679 +#: ieee.c:2688 msgid "C++ base class not found in container" msgstr "no se encuentra la clase base C++ en el contenedor" -#: ieee.c:2786 +#: ieee.c:2795 msgid "C++ data member not found in container" msgstr "no se encuentra los datos miembros C++ en el contenedor" -#: ieee.c:2827 ieee.c:2977 +#: ieee.c:2836 ieee.c:2986 msgid "unknown C++ visibility" msgstr "visibilidad C++ desconocida" -#: ieee.c:2861 +#: ieee.c:2870 msgid "bad C++ field bit pos or size" msgstr "posición o tamaño erróneo del campo de bit C++" -#: ieee.c:2953 +#: ieee.c:2962 msgid "bad type for C++ method function" msgstr "tipo erróneo para la función del método C++" -#: ieee.c:2963 +#: ieee.c:2972 msgid "no type information for C++ method function" msgstr "no hay información de tipo para la función del método C++" -#: ieee.c:3002 +#: ieee.c:3011 msgid "C++ static virtual method" msgstr "método virtual static de C++" -#: ieee.c:3097 +#: ieee.c:3106 msgid "unrecognized C++ object overhead spec" -msgstr "especificación de adelanto de objeto C++ no reconocida" +msgstr "no se reconoce la especificación de adelanto de objeto C++" -#: ieee.c:3136 +#: ieee.c:3145 msgid "undefined C++ vtable" -msgstr "vtable C++ no definida" +msgstr "vtable C++ sin definir" -#: ieee.c:3205 +#: ieee.c:3214 msgid "C++ default values not in a function" msgstr "valores C++ por defecto no están en una función" -#: ieee.c:3245 +#: ieee.c:3254 msgid "unrecognized C++ default type" -msgstr "tipo por defecto de C++ no reconocido" +msgstr "no se reconoce el tipo por defecto de C++" -#: ieee.c:3276 +#: ieee.c:3285 msgid "reference parameter is not a pointer" msgstr "el parámetro de referencia no es un puntero" -#: ieee.c:3359 +#: ieee.c:3368 msgid "unrecognized C++ reference type" -msgstr "tipo de referencia de C++ no reconocido" +msgstr "no se reconoce el tipo de referencia de C++" -#: ieee.c:3441 +#: ieee.c:3450 msgid "C++ reference not found" msgstr "no se encontró la referencia C++" -#: ieee.c:3449 +#: ieee.c:3458 msgid "C++ reference is not pointer" msgstr "la referencia C++ no es un puntero" -#: ieee.c:3475 ieee.c:3483 +#: ieee.c:3484 ieee.c:3492 msgid "missing required ASN" msgstr "falta el ASN requerido" -#: ieee.c:3510 ieee.c:3518 +#: ieee.c:3519 ieee.c:3527 msgid "missing required ATN65" msgstr "falta el ATN65 requerido" -#: ieee.c:3532 +#: ieee.c:3541 msgid "bad ATN65 record" msgstr "registro ATN65 erróneo" -#: ieee.c:4160 +#: ieee.c:4169 #, c-format msgid "IEEE numeric overflow: 0x" msgstr "desbordamiento numérico IEEE: 0x" -#: ieee.c:4204 +#: ieee.c:4213 #, c-format msgid "IEEE string length overflow: %u\n" msgstr "desbordamiento de longitud de cadena IEEE: %u\n" -#: ieee.c:5203 +#: ieee.c:5210 #, c-format msgid "IEEE unsupported integer type size %u\n" -msgstr "tamaño de tipo entero IEEE %u sin soporte\n" +msgstr "no se admite el tamaño de tipo entero IEEE %u\n" -#: ieee.c:5237 +#: ieee.c:5244 #, c-format msgid "IEEE unsupported float type size %u\n" -msgstr "tamaño de tipo coma flotante IEEE %u sin soporte\n" +msgstr "no se admite el tamaño de tipo coma flotante IEEE %u\n" -#: ieee.c:5271 +#: ieee.c:5278 #, c-format msgid "IEEE unsupported complex type size %u\n" -msgstr "tamaño de tipo complejo IEEE %u sin soporte\n" +msgstr "no se admite el tamaño de tipo complejo IEEE %u\n" -#: nlmconv.c:269 srconv.c:1813 +#: mclex.c:241 +msgid "Duplicate symbol entered into keyword list." +msgstr "Se ingresó un símbolo duplicado en la lista de palabras clave." + +#: nlmconv.c:273 srconv.c:1822 msgid "input and output files must be different" msgstr "los ficheros de entrada y salida deben ser diferentes" -#: nlmconv.c:316 +#: nlmconv.c:320 msgid "input file named both on command line and with INPUT" -msgstr "fichero de entrada nombrado en la línea de comandos y con INPUT" +msgstr "fichero de entrada nombrado en la línea de órdenes y con INPUT" -#: nlmconv.c:325 +#: nlmconv.c:329 msgid "no input file" msgstr "no hay fichero de entrada" -#: nlmconv.c:355 +#: nlmconv.c:359 msgid "no name for output file" msgstr "no hay nombre para el fichero de salida" -#: nlmconv.c:369 +#: nlmconv.c:373 msgid "warning: input and output formats are not compatible" msgstr "aviso: los formatos de entrada y salida no son compatibles" -#: nlmconv.c:398 +#: nlmconv.c:403 msgid "make .bss section" -msgstr "hacer sección .bss" +msgstr "hace sección .bss" -#: nlmconv.c:407 +#: nlmconv.c:413 msgid "make .nlmsections section" -msgstr "hacer sección .nlmsections" - -#: nlmconv.c:409 -msgid "set .nlmsections flags" -msgstr "establecer opciones .nlmsections" +msgstr "hace sección .nlmsections" -#: nlmconv.c:437 +#: nlmconv.c:441 msgid "set .bss vma" -msgstr "establecer vma .bss" +msgstr "establece vma .bss" -#: nlmconv.c:444 +#: nlmconv.c:448 msgid "set .data size" -msgstr "establecer tamaño de .data" +msgstr "establece tamaño de .data" -#: nlmconv.c:624 +#: nlmconv.c:628 #, c-format msgid "warning: symbol %s imported but not in import list" msgstr "aviso: se importó el símbolo %s pero no está en la lista de importación" -#: nlmconv.c:644 +#: nlmconv.c:648 msgid "set start address" -msgstr "establecer la dirección de inicio" +msgstr "establece la dirección de inicio" -#: nlmconv.c:693 +#: nlmconv.c:697 #, c-format msgid "warning: START procedure %s not defined" msgstr "aviso: el procedimiento START %s no está definido" -#: nlmconv.c:695 +#: nlmconv.c:699 #, c-format msgid "warning: EXIT procedure %s not defined" msgstr "aviso: el procedimiento EXIT %s no está definido" -#: nlmconv.c:697 +#: nlmconv.c:701 #, c-format msgid "warning: CHECK procedure %s not defined" msgstr "aviso: el procedimiento CHECK %s no está definido" -#: nlmconv.c:718 nlmconv.c:907 +#: nlmconv.c:721 nlmconv.c:907 msgid "custom section" msgstr "sección a la medida" -#: nlmconv.c:739 nlmconv.c:936 +#: nlmconv.c:741 nlmconv.c:936 msgid "help section" msgstr "sección de ayuda" -#: nlmconv.c:761 nlmconv.c:954 +#: nlmconv.c:763 nlmconv.c:954 msgid "message section" msgstr "sección de mensajes" -#: nlmconv.c:777 nlmconv.c:987 +#: nlmconv.c:778 nlmconv.c:987 msgid "module section" msgstr "sección de módulos" @@ -2225,7 +2475,7 @@ msgstr "%s: le #: nlmconv.c:924 msgid "warning: FULLMAP is not supported; try ld -M" -msgstr "aviso: FULLMAP no tiene soporte; pruebe ld -M" +msgstr "aviso: no se admite FULLMAP; pruebe ld -M" #: nlmconv.c:1100 #, c-format @@ -2235,7 +2485,7 @@ msgstr "Modo de empleo: %s [opcion(es)] [fichero-entrada [fichero-salida]]\n" #: nlmconv.c:1101 #, c-format msgid " Convert an object file into a NetWare Loadable Module\n" -msgstr "Convertir un fichero objeto en un Módulo Cargable de NetWare (NLM)\n" +msgstr "Convierte un fichero objeto en un Módulo Cargable de NetWare (NLM)\n" #: nlmconv.c:1102 #, c-format @@ -2267,67 +2517,67 @@ msgstr "soporte no compilado para %s" #: nlmconv.c:1180 msgid "make section" -msgstr "sección make" +msgstr "crea sección" #: nlmconv.c:1194 msgid "set section size" -msgstr "establecer el tamaño de la sección" +msgstr "establece el tamaño de la sección" #: nlmconv.c:1200 msgid "set section alignment" -msgstr "establecer la alineación de la sección" +msgstr "establece la alineación de la sección" #: nlmconv.c:1204 msgid "set section flags" -msgstr "establecer las opciones de la sección" +msgstr "establece las opciones de la sección" #: nlmconv.c:1215 msgid "set .nlmsections size" -msgstr "establecer el tamaño de .nlmsections" +msgstr "establece el tamaño de .nlmsections" #: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318 msgid "set .nlmsection contents" -msgstr "establecer el contenido de .nlmsection" +msgstr "establece el contenido de .nlmsection" -#: nlmconv.c:1797 +#: nlmconv.c:1795 msgid "stub section sizes" msgstr "tamaños de la sección de cabos" -#: nlmconv.c:1844 +#: nlmconv.c:1842 msgid "writing stub" -msgstr "escribiendo cabo" +msgstr "se escribe cabo" -#: nlmconv.c:1928 +#: nlmconv.c:1926 #, c-format msgid "unresolved PC relative reloc against %s" msgstr "reubicación relativa PC contra %s sin resolver" -#: nlmconv.c:1992 +#: nlmconv.c:1990 #, c-format msgid "overflow when adjusting relocation against %s" msgstr "desbordamiento al ajustar la reubicación contra %s" -#: nlmconv.c:2119 +#: nlmconv.c:2117 #, c-format msgid "%s: execution of %s failed: " msgstr "%s: falló la ejecución de %s: " -#: nlmconv.c:2134 +#: nlmconv.c:2132 #, c-format msgid "Execution of %s failed" msgstr "Falló la ejecución de %s" -#: nm.c:224 size.c:82 strings.c:708 +#: nm.c:220 size.c:78 strings.c:659 #, c-format msgid "Usage: %s [option(s)] [file(s)]\n" msgstr "Modo de empleo: %s [opcion(es)] [fichero(s)]\n" -#: nm.c:225 +#: nm.c:221 #, c-format msgid " List symbols in [file(s)] (a.out by default).\n" msgstr "Lista de símbolos en [fichero(s)] (a.out por defecto).\n" -#: nm.c:226 +#: nm.c:222 #, c-format msgid "" " The options are:\n" @@ -2352,19 +2602,6 @@ msgid "" " -p, --no-sort Do not sort the symbols\n" " -P, --portability Same as --format=posix\n" " -r, --reverse-sort Reverse the sense of the sort\n" -" -S, --print-size Print size of defined symbols\n" -" -s, --print-armap Include index for symbols from archive members\n" -" --size-sort Sort symbols by size\n" -" --special-syms Include special symbols in the output\n" -" --synthetic Display synthetic symbols as well\n" -" -t, --radix=RADIX Use RADIX for printing symbol values\n" -" --target=BFDNAME Specify the target object format as BFDNAME\n" -" -u, --undefined-only Display only undefined symbols\n" -" -X 32_64 (ignored)\n" -" @FILE Read options from FILE\n" -" -h, --help Display this information\n" -" -V, --version Display this program's version number\n" -"\n" msgstr "" "Las opciones son:\n" " -a, --debug-syms Muestra símbolos sólo para el depurador\n" @@ -2380,7 +2617,7 @@ msgstr "" " -D, --dynamic Muestra los símbolos dinámicos en lugar de los\n" " símbolos normales\n" " --defined-only Muestra solamente los símbolos definidos\n" -" -e (ignorado)\n" +" -e (se descarta)\n" " -f, --format=FORMATO Usa el formato de salida FORMATO. FORMATO puede ser\n" " `bsd', `sysv' o `posix'. Por defecto es `bsd'\n" " -g, --extern-only Muestra solamente los símbolos externos\n" @@ -2392,49 +2629,64 @@ msgstr "" " -p, --no-sort No ordena los símbolos\n" " -P, --portability Igual que --format=posix\n" " -r, --reverse-sort Cambia el sentido de la ordenación\n" -" -S, --print-size Muestra el tamaño de los símbolos definidos\n" -" -s, --print-armap Incluye el índice de los símbolos de miembros\n" -" del archivo\n" -" --size-sort Ordena los símbolos por tamaño\n" -" --special-syms Incluye los símbolos especiales en la salida\n" -" --synthetic Muestra también símbolos sintéticos\n" -" -t, --radix=RADICAL Utiliza el RADICAL para mostrar los valores de\n" -" los símbolos\n" -" --target=NOMBREBFD Especifica el formato de objeto objetivo como\n" -" NOMBREBFD\n" -" -u, --undefined-only Muestra sólo los símbolos indefinidos\n" -" -X 32_64 (ignorado)\n" -" @FICHERO Lee opciones del FICHERO\n" -" -h, --help Muestra esta información\n" -" -V, --version Muestra el número de versión de este programa\n" -"\n" - -#: nm.c:263 objdump.c:236 + +#: nm.c:245 #, c-format -msgid "Report bugs to %s.\n" -msgstr "Reportar bichos a %s.\n" +msgid " --plugin NAME Load the specified plugin\n" +msgstr " --plugin NOMBRE Carga el plugin especificado\n" -#: nm.c:295 +#: nm.c:248 +#, c-format +msgid "" +" -S, --print-size Print size of defined symbols\n" +"\t\t -s, --print-armap Include index for symbols from archive members\n" +" --size-sort Sort symbols by size\n" +" --special-syms Include special symbols in the output\n" +" --synthetic Display synthetic symbols as well\n" +" -t, --radix=RADIX Use RADIX for printing symbol values\n" +" --target=BFDNAME Specify the target object format as BFDNAME\n" +" -u, --undefined-only Display only undefined symbols\n" +" -X 32_64 (ignored)\n" +" @FILE Read options from FILE\n" +" -h, --help Display this information\n" +" -V, --version Display this program's version number\n" +"\n" +msgstr "" +" -S, --print-size Muestra el tamaño de los símbolos definidos\n" +"\t\t -s, --print-armap Incluye el índice para símbolos de los miembros de archivo\n" +" --size-sort Ordena los símbolos por tamaño\n" +" --special-syms Incluye los símbolos especiales en la salida\n" +" --synthetic Muestra también los símbolos sintéticos\n" +" -t, --radix=RADICAL Usa el RADICAL para mostrar valores de símbolo\n" +" --target=NOMBREBFD Especifica el formato de objeto objetivo como NOMBREBFD\n" +" -u, --undefined-only Sólo muestra los símbolos sin definir\n" +" -X 32_64 (se descarta)\n" +" @FICHERO Lee opciones del FICHERO\n" +" -h, --help Muestra esta información\n" +" -V, --version Muestra el número de versión de este programa\n" +"\n" + +#: nm.c:292 #, c-format msgid "%s: invalid radix" msgstr "%s: radical inválido" -#: nm.c:319 +#: nm.c:316 #, c-format msgid "%s: invalid output format" msgstr "%s: formato de salida inválido" -#: nm.c:340 readelf.c:6623 readelf.c:6659 +#: nm.c:337 readelf.c:6917 readelf.c:6962 #, c-format msgid ": %d" msgstr " %d:" -#: nm.c:342 readelf.c:6626 readelf.c:6671 +#: nm.c:339 readelf.c:6926 readelf.c:6980 #, c-format msgid ": %d" msgstr ": %d" -#: nm.c:344 readelf.c:6628 readelf.c:6674 +#: nm.c:341 readelf.c:6929 readelf.c:6983 #, c-format msgid ": %d" msgstr ": %d" @@ -2448,7 +2700,7 @@ msgstr "" "\n" "Índice del archivo:\n" -#: nm.c:1227 +#: nm.c:1242 #, c-format msgid "" "\n" @@ -2458,10 +2710,10 @@ msgid "" msgstr "" "\n" "\n" -"Símbolos indefinidos de %s:\n" +"Símbolos sin definir de %s:\n" "\n" -#: nm.c:1229 +#: nm.c:1244 #, c-format msgid "" "\n" @@ -2474,7 +2726,7 @@ msgstr "" "Símbolos de %s:\n" "\n" -#: nm.c:1231 nm.c:1282 +#: nm.c:1246 nm.c:1297 #, c-format msgid "" "Name Value Class Type Size Line Section\n" @@ -2483,7 +2735,7 @@ msgstr "" "Nombre Valor Clase Tipo Tamaño Línea Sección\n" "\n" -#: nm.c:1234 nm.c:1285 +#: nm.c:1249 nm.c:1300 #, c-format msgid "" "Name Value Class Type Size Line Section\n" @@ -2492,7 +2744,7 @@ msgstr "" "Nombre Valor Clase Tipo Tamaño Línea Sección\n" "\n" -#: nm.c:1278 +#: nm.c:1293 #, c-format msgid "" "\n" @@ -2502,10 +2754,10 @@ msgid "" msgstr "" "\n" "\n" -"Símbolos indefinidos de %s[%s]:\n" +"Símbolos sin definir de %s[%s]:\n" "\n" -#: nm.c:1280 +#: nm.c:1295 #, c-format msgid "" "\n" @@ -2518,39 +2770,44 @@ msgstr "" "Símbolos de %s[%s]:\n" "\n" -#: nm.c:1584 +#: nm.c:1387 +#, c-format +msgid "Print width has not been initialized (%d)" +msgstr "No se inicializó la anchura de la impresión (%d)" + +#: nm.c:1615 msgid "Only -X 32_64 is supported" -msgstr "Solamente -X 32_64 tiene soporte" +msgstr "Solamente se admite -X 32_64" -#: nm.c:1604 +#: nm.c:1643 msgid "Using the --size-sort and --undefined-only options together" msgstr "Al usar juntas las opciones --size-sort y --undefined-only" -#: nm.c:1605 +#: nm.c:1644 msgid "will produce no output, since undefined symbols have no size." -msgstr "no se producirá salida, porque los símbolos indefinidos no tienen tamaño." +msgstr "no se producirá salida, porque los símbolos sin definir no tienen tamaño." -#: nm.c:1633 +#: nm.c:1672 #, c-format msgid "data size %ld" msgstr "tamaño de datos %ld" -#: objcopy.c:401 srconv.c:1721 +#: objcopy.c:463 srconv.c:1730 #, c-format msgid "Usage: %s [option(s)] in-file [out-file]\n" msgstr "Modo de empleo: %s [opcion(es)] fichero-entrada [fichero-salida]\n" -#: objcopy.c:402 +#: objcopy.c:464 #, c-format msgid " Copies a binary file, possibly transforming it in the process\n" msgstr " Copia un fichero binario, posiblemente transformándolo en el proceso\n" -#: objcopy.c:403 objcopy.c:495 +#: objcopy.c:465 objcopy.c:572 #, c-format msgid " The options are:\n" msgstr " Las opciones son:\n" -#: objcopy.c:404 +#: objcopy.c:466 #, c-format msgid "" " -I --input-target Assume input file is in format \n" @@ -2570,7 +2827,10 @@ msgid "" " Do not copy symbol 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 Do not strip symbol \n" +" --keep-file-symbols Do not strip file symbol(s)\n" +" --localize-hidden Turn all ELF hidden symbols into locals\n" " -L --localize-symbol Force symbol to be marked as a local\n" " --globalize-symbol Force symbol to be marked as a global\n" " -G --keep-global-symbol Localize all symbols except \n" @@ -2600,8 +2860,11 @@ msgid "" " Set section 's properties to \n" " --add-section = Add section found in to output\n" " --rename-section =[,] Rename section to \n" +" --long-section-names {enable|disable|keep}\n" +" Handle long section names in Coff objects.\n" " --change-leading-char Force output format's leading character style\n" " --remove-leading-char Remove leading character from global symbols\n" +" --reverse-bytes= Reverse bytes at a time, in output sections with content\n" " --redefine-sym = Redefine symbol name to \n" " --redefine-syms --redefine-sym for all symbol pairs \n" " listed in \n" @@ -2616,7 +2879,7 @@ msgid "" " --globalize-symbols --globalize-symbol for all in \n" " --keep-global-symbols -G for all symbols listed in \n" " --weaken-symbols -W for all symbols listed in \n" -" --alt-machine-code Use alternate machine code for output\n" +" --alt-machine-code Use the target's '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" @@ -2626,144 +2889,173 @@ msgid "" " --prefix-alloc-sections \n" " Add to start of every allocatable\n" " section name\n" -" -v --verbose List all object files modified\n" +" --file-alignment Set PE file alignment to \n" +" --heap [,] Set PE reserve/commit heap to /\n" +" \n" +" --image-base

Set PE image base to
\n" +" --section-alignment Set PE section alignment to \n" +" --stack [,] Set PE reserve/commit stack to /\n" +" \n" +" --subsystem [:]\n" +" Set PE subsystem to [& ]\n" +"] -v --verbose List all object files modified\n" " @ Read options from \n" " -V --version Display this program's version number\n" " -h --help Display this output\n" " --info List object formats & architectures supported\n" msgstr "" " -I --input-target Asume que el fichero de entrada está en\n" -" el formato \n" +" el formato \n" " -O --output-target Crea un fichero de salida en el formato\n" -" \n" +" \n" " -B --binary-architecture Establece la arquitectura del fichero de\n" -" salida, cuando la entrada es binaria\n" +" salida, cuando la entrada es binaria\n" " -F --target Establece tanto el formato de salida como\n" -" el de entrada a \n" +" el de entrada a \n" " --debugging Convierte la información de depuración, si\n" -" es posible\n" +" es posible\n" " -p --preserve-dates Copia las marcas de tiempo de modificación y\n" -" acceso a la salida\n" +" acceso a la salida\n" " -j --only-section Sólo copiar la sección en la salida\n" " --add-gnu-debuglink= Agrega la sección de enlazado .gnu_debuglink\n" -" al ero\n" +" al ero\n" " -R --remove-section Borra la sección de la salida\n" " -S --strip-all Borra todos los símbolos y la información de\n" -" reubicación\n" +" reubicación\n" " -g --strip-debug Borra todos los símbolos y secciones de\n" " depuración\n" " --strip-unneeded Borra todos los símbolos innecesarios para\n" -" las reubicaciones\n" +" las reubicaciones\n" " -N --strip-symbol No copia el símbolo \n" " --strip-unneeded-symbol \n" " No copia el símbolo a menos que sea\n" -" necesario para las reubicaciones\n" +" necesario para las reubicaciones\n" " --only-keep-debug Borra todo excepto la información de\n" -" depuración\n" -" -K --keep-symbol Sólo copia el símbolo \n" +" depuración\n" +" --extract-symbol Borra los contenidos de la sección pero\n" +" conserva los símbolos\n" +" -K --keep-symbol No borra el símbolo \n" +" --keep-file-symbols No borra los símbolos de fichero\n" +" --localize-hidden Convierte todos los símbolos ocultos ELF\n" +" en locales\n" " -L --localize-symbol Fuerza que el símbolo se marque como\n" -" local\n" +" local\n" " --globalize-symbol Fuerza que el símbolo se marque como\n" -" global\n" +" global\n" " -G --keep-global-symbol Vuelve locales todos los símbolos excepto\n" -" \n" +" \n" " -W --weaken-symbol Fuerza que el símbolo se marque como\n" -" débil\n" +" débil\n" " --weaken Fuerza que todos los símbolos se marquen como\n" -" débiles\n" +" débiles\n" " -w --wildcard Permite comodines en la comparación de\n" -" símbolos\n" +" símbolos\n" " -x --discard-all Borra todos los símbolos que no son globales\n" " -X --discard-locals Borra cualquier símbolo generado por el\n" -" compilador\n" +" compilador\n" " -i --interleave Sólo copia uno de cada bytes\n" " -b --byte Selecciona el byte en cada bloque\n" -" espaciado\n" +" espaciado\n" " --gap-fill Rellena los huecos entre secciones con \n" -" --pad-to Rellena la última sección hasta la dirección \n" +" --pad-to Rellena la última sección hasta\n" +" la \n" " --set-start Establece la dirección de inicio en\n" -" \n" +" \n" " {--change-start|--adjust-start} \n" " Agrega a la dirección de inicio\n" " {--change-addresses|--adjust-vma} \n" " Agrega a las direcciones LMA, VMA y\n" -" la de inicio\n" +" la de inicio\n" " {--change-section-address|--adjust-section-vma} {=|+|-}\n" " Cambia el LMA y el VMA de la sección\n" -" por \n" +" por \n" " --change-section-lma {=|+|-}\n" " Cambia LMA de la sección por \n" " --change-section-vma {=|+|-}\n" " Cambia VMA de la sección por \n" " {--[no-]change-warnings|--[no-]adjust-warnings}\n" -" Avisar si no existe una sección nombrada\n" +" Avisa si no existe una sección nombrada\n" " --set-section-flags =\n" " Establece las propiedades de la sección\n" " a \n" " --add-section =\n" " Agrega la sección que se encuentra\n" -" en el a la salida\n" +" en el a la salida\n" " --rename-section =[,] Renombra la sección a \n" +" --long-section-names {enable|disable|keep}\n" +" Maneja los nombres de sección largos en\n" +" objetos Coff.\n" " --change-leading-char Fuerza el carácter de estilo inicial en\n" " el formato de salida\n" " --remove-leading-char Borra el carácter inicial de los símbolos\n" " globales\n" +" --reverse-bytes= Invierte bytes a la vez, en la\n" +" sección de salida con contenido\n" " --redefine-sym = Redefine el nombre de símbolo a \n" " --redefine-syms --redefine-sym para todos los pares de\n" -" símbolos enlistados en el \n" +" símbolos enlistados en el \n" " --srec-len Restringe la longitud de los Srecords\n" -" generados\n" +" generados\n" " --srec-forceS3 Restringe el tipo de los Srecords generados\n" -" a S3\n" +" a S3\n" " --strip-symbols -N para todos los símbolos enlistados en el\n" -" \n" +" \n" " --strip-unneeded-symbols \n" " --strip-unneeded-symbol para todos los\n" -" símbolos enlistados en el \n" +" símbolos enlistados en el \n" " --keep-symbols -K para todos los símbolos enlistados en el\n" -" \n" +" \n" " --localize-symbols -L para todos los símbolos enlistados en el\n" -" \n" +" \n" " --globalize-symbols --globalize-symbol para todos los símbolos\n" -" en el \n" +" en el \n" " --keep-global-symbols \n" " -G para todos los símbolos enlistados en el\n" -" \n" +" \n" " --weaken-symbols -W para todos los símbolos enlistados en el\n" -" \n" +" \n" " --alt-machine-code <índice> Utiliza código máquina alternativo para la\n" -" salida\n" +" salida\n" " --writable-text Marca el texto de salida como modificable\n" " --readonly-text Marca el texto de salida como protegido\n" -" contra escritura\n" +" contra escritura\n" " --pure Marca el fichero de salida como paginado en\n" -" demanda\n" +" demanda\n" " --impure Marca el fichero de salida como impuro\n" " --prefix-symbols Agrega al inicio de cada nombre de\n" -" símbolo\n" +" símbolo\n" " --prefix-sections Agrega al inicio de cada nombre de\n" -" sección\n" +" sección\n" " --prefix-alloc-sections \n" " Agrega al inicio de cada nombre de\n" -" sección alojable\n" +" sección alojable\n" +" --file-alignment Define la alineacion del fichero PE a \n" +" --heap [,] Define el cúmulo reserva/confirma de PE a\n" +" /\n" +" --image-base Define la imagen base de PE a \n" +" --stack [,] Define la pila reserva/confirma de PE a\n" +" /\n" +" --subsystem [:]\n" +" Define el subsistema PE a \n" +" [y ]\n" " -v --verbose Enlista todos los ficheros objeto modificados\n" " @ Lee opciones del \n" " -V --version Muestra el número de versión de este programa\n" " -h --help Muestra esta salida\n" " --info Enlista los formatos objeto y arquitecturas\n" -" que se soportan\n" +" que se admiten\n" -#: objcopy.c:493 +#: objcopy.c:570 #, c-format msgid "Usage: %s in-file(s)\n" msgstr "Modo de empleo: %s fichero(s)-entrada\n" -#: objcopy.c:494 +#: objcopy.c:571 #, c-format msgid " Removes symbols and sections from files\n" msgstr " Remueve símbolos y secciones de los ficheros\n" -#: objcopy.c:496 +#: objcopy.c:573 #, c-format msgid "" " -I --input-target= Assume input file is in format \n" @@ -2777,6 +3069,7 @@ msgid "" " --only-keep-debug Strip everything but the debug information\n" " -N --strip-symbol= Do not copy symbol \n" " -K --keep-symbol= Do not strip symbol \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" @@ -2804,7 +3097,8 @@ msgstr "" " --only-keep-debug Borra todo excepto la información de\n" " depuración\n" " -N --strip-symbol= No copia el símbolo \n" -" -K --keep-symbol= Sólo copia el símbolo \n" +" -K --keep-symbol= No borra el símbolo \n" +" --keep-file-symbols No borra los símbolos de fichero\n" " -w --wildcard Permite comodines en la comparación de\n" " símbolos\n" " -x --discard-all Borra todos los símbolos que no son globales\n" @@ -2814,262 +3108,354 @@ msgstr "" " -V --version Muestra el número de versión de este programa\n" " -h --help Muestra esta salida\n" " --info Muestra los formatos objeto y arquitecturas\n" -" soportados\n" +" admitidos\n" " -o Coloca la salida limpia en el \n" -#: objcopy.c:568 +#: objcopy.c:646 #, c-format msgid "unrecognized section flag `%s'" msgstr "opción de sección `%s' desconocida" -#: objcopy.c:569 +#: objcopy.c:647 #, c-format msgid "supported flags: %s" -msgstr "opciones con soporte: %s" +msgstr "opciones admitidas: %s" -#: objcopy.c:646 +#: objcopy.c:748 #, c-format msgid "cannot open '%s': %s" msgstr "no se puede abrir '%s': %s" -#: objcopy.c:649 objcopy.c:2722 +#: objcopy.c:751 objcopy.c:3335 #, c-format msgid "%s: fread failed" -msgstr "%s: fread falló" +msgstr "%s: falló fread" -#: objcopy.c:722 +#: objcopy.c:824 #, c-format msgid "%s:%d: Ignoring rubbish found on this line" -msgstr "%s:%d: Se ignora la basura encontrada en esta línea" +msgstr "%s:%d: Se descarta la basura encontrada en esta línea" + +#: objcopy.c:1120 +#, c-format +msgid "not stripping symbol `%s' because it is named in a relocation" +msgstr "no se elimina el símbolo `%s' porque se nombra en una reubicación" -#: objcopy.c:996 +#: objcopy.c:1203 #, c-format msgid "%s: Multiple redefinition of symbol \"%s\"" msgstr "%s: Redefiniciones múltiples del símbolo \"%s\"" -#: objcopy.c:1000 +#: objcopy.c:1207 #, c-format msgid "%s: Symbol \"%s\" is target of more than one redefinition" msgstr "%s: El símbolo \"%s\" es objetivo de más de una redefinición" -#: objcopy.c:1028 +#: objcopy.c:1235 #, c-format msgid "couldn't open symbol redefinition file %s (error: %s)" msgstr "no se puede abrir el fichero de redefinición de símbolos %s (error: %s)" -#: objcopy.c:1106 +#: objcopy.c:1313 #, c-format msgid "%s:%d: garbage found at end of line" msgstr "%s:%d: se encontró basura al final de la línea" -#: objcopy.c:1109 +#: objcopy.c:1316 #, c-format msgid "%s:%d: missing new symbol name" msgstr "%s:%d: falta el nombre del símbolo nuevo" -#: objcopy.c:1119 +#: objcopy.c:1326 #, c-format msgid "%s:%d: premature end of file" msgstr "%s:%d: fin de fichero prematuro" -#: objcopy.c:1145 +#: objcopy.c:1352 #, c-format msgid "stat returns negative size for `%s'" msgstr "stat devuelve un valor negativo para `%s'" -#: objcopy.c:1157 +#: objcopy.c:1364 #, c-format msgid "copy from `%s' [unknown] to `%s' [unknown]\n" msgstr "copia de `%s' [desconocido] a `%s' [desconocido]\n" -#: objcopy.c:1212 +#: objcopy.c:1419 msgid "Unable to change endianness of input file(s)" msgstr "No se puede cambiar la endianez del (los) fichero(s) de entrada" -#: objcopy.c:1221 +#: objcopy.c:1428 #, c-format msgid "copy from `%s' [%s] to `%s' [%s]\n" msgstr "copia de `%s' [%s] a `%s' [%s]\n" -#: objcopy.c:1258 objcopy.c:1715 +#: objcopy.c:1473 #, c-format msgid "Unable to recognise the format of the input file `%s'" msgstr "No se puede reconocer el formato del fichero de entrada `%s'" -#: objcopy.c:1261 +#: objcopy.c:1476 #, c-format msgid "Warning: Output file cannot represent architecture `%s'" msgstr "Aviso: El fichero de salida no puede representar a la arquitectura `%s'" -#: objcopy.c:1305 +#: objcopy.c:1539 #, c-format -msgid "can't create section `%s': %s" -msgstr "no se puede crear la sección `%s' %s" +msgid "warning: file alignment (0x%s) > section alignment (0x%s)" +msgstr "aviso: alineación del fichero (0x%s) > alineación de la sección (0x%s)" -#: objcopy.c:1356 -msgid "there are no sections to be copied!" -msgstr "¡no hay secciones para copiar!" +#: objcopy.c:1598 +#, c-format +msgid "can't add section '%s'" +msgstr "no se puede agregar la sección '%s'" -#: objcopy.c:1402 +#: objcopy.c:1607 #, c-format -msgid "Can't fill gap after %s: %s" -msgstr "No se puede llenar el espacio después de %s: %s" +msgid "can't create section `%s'" +msgstr "no se puede crear la sección `%s'" + +#: objcopy.c:1653 +#, c-format +msgid "cannot create debug link section `%s'" +msgstr "no se puede crear la sección de enlace de depuración `%s'" + +#: objcopy.c:1746 +msgid "Can't fill gap after section" +msgstr "No se puede llenar el espacio después de la sección" -#: objcopy.c:1427 +#: objcopy.c:1770 +msgid "can't add padding" +msgstr "No se puede agregar relleno" + +#: objcopy.c:1861 #, c-format -msgid "Can't add padding to %s: %s" -msgstr "No se puede agregar relleno a %s: %s" +msgid "cannot fill debug link section `%s'" +msgstr "no se puede llenar la sección de enlace de depuración `%s'" + +#: objcopy.c:1924 +msgid "error copying private BFD data" +msgstr "error al copiar los datos privados BFD" -#: objcopy.c:1594 +#: objcopy.c:1935 #, c-format -msgid "%s: error copying private BFD data: %s" -msgstr "%s: error al copiar los datos privados BFD: %s" +msgid "this target does not support %lu alternative machine codes" +msgstr "este objetivo no admite los códigos de máquina alternativos %lu" + +#: objcopy.c:1939 +msgid "treating that number as an absolute e_machine value instead" +msgstr "en su lugar, se trata ese número como un valor e_machine absoluto" -#: objcopy.c:1605 -msgid "unknown alternate machine code, ignored" -msgstr "código máquina alternativo desconocido, ignorado" +#: objcopy.c:1943 +msgid "ignoring the alternative value" +msgstr "se descarta el valor alternativo" -#: objcopy.c:1635 objcopy.c:1665 +#: objcopy.c:1974 objcopy.c:2009 #, c-format -msgid "cannot mkdir %s for archive copying (error: %s)" -msgstr "no se puede crear el directorio %s para copiar el archivo (error: %s)" +msgid "cannot create tempdir for archive copying (error: %s)" +msgstr "no se puede crear el directorio temporal para copiar el archivo (error: %s)" -#: objcopy.c:1787 +#: objcopy.c:2070 +msgid "Unable to recognise the format of file" +msgstr "No se puede reconocer el formato del fichero" + +#: objcopy.c:2167 #, c-format msgid "error: the input file '%s' is empty" msgstr "error: el fichero de entrada '%s' está vacío" -#: objcopy.c:1889 +#: objcopy.c:2299 #, c-format msgid "Multiple renames of section %s" msgstr "Renombrado múltiple de la sección %s" -#: objcopy.c:1940 -msgid "private header data" -msgstr "datos de encabezado privado" +#: objcopy.c:2350 +msgid "error in private header data" +msgstr "error en los datos de encabezado privado" -#: objcopy.c:1948 -#, c-format -msgid "%s: error in %s: %s" -msgstr "%s: error en %s: %s" +#: objcopy.c:2428 +msgid "failed to create output section" +msgstr "no se puede crear la sección de salida" -#: objcopy.c:2007 -msgid "making" -msgstr "haciendo" +#: objcopy.c:2442 +msgid "failed to set size" +msgstr "no se puede establecer el tamaño" -#: objcopy.c:2022 -msgid "size" -msgstr "tamaño" +#: objcopy.c:2456 +msgid "failed to set vma" +msgstr "no se puede establecer vma" -#: objcopy.c:2036 -msgid "vma" -msgstr "vma" +#: objcopy.c:2481 +msgid "failed to set alignment" +msgstr "no se puede establecer la alineación" -#: objcopy.c:2061 -msgid "alignment" -msgstr "alineación" +#: objcopy.c:2515 +msgid "failed to copy private data" +msgstr "no se pueden copiar los datos privados" -#: objcopy.c:2083 -msgid "private data" -msgstr "datos privados" +#: objcopy.c:2597 +msgid "relocation count is negative" +msgstr "la cuenta de reubicación es negativa" -#: objcopy.c:2091 +#. User must pad the section up in order to do this. +#: objcopy.c:2658 #, c-format -msgid "%s: section `%s': error in %s: %s" -msgstr "%s: sección `%s': error en %s: %s" +msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d" +msgstr "no se pueden invertir bytes: la longitud de la sección %s debe ser divisible por par por %d" + +#: objcopy.c:2842 +msgid "can't create debugging section" +msgstr "no se puede crear la sección de depuración" -#: objcopy.c:2363 +#: objcopy.c:2855 +msgid "can't set debugging section contents" +msgstr "no se puede establecer el contenido de la sección de depuración" + +#: objcopy.c:2863 #, c-format -msgid "%s: can't create debugging section: %s" -msgstr "%s: no se puede crear la sección de depuración: %s" +msgid "don't know how to write debugging information for %s" +msgstr "no se sabe cómo escribir la información de depuración para %s" + +#: objcopy.c:3005 +msgid "could not create temporary file to hold stripped copy" +msgstr "no se puede crear el fichero temporal para contener la copia con símbolos eliminados" -#: objcopy.c:2377 +#: objcopy.c:3077 #, c-format -msgid "%s: can't set debugging section contents: %s" -msgstr "%s: no se puede establecer el contenido de la sección de depuración: %s" +msgid "%s: bad version in PE subsystem" +msgstr "%s: versión errónea en el subsistema PE" -#: objcopy.c:2386 +#: objcopy.c:3107 #, c-format -msgid "%s: don't know how to write debugging information for %s" -msgstr "%s: se ignora cómo escribir la información de depuración para %s" +msgid "unknown PE subsystem: %s" +msgstr "subsistema PE desconocido: %s" -#: objcopy.c:2561 +#: objcopy.c:3167 msgid "byte number must be non-negative" msgstr "el número de bytes no debe ser negativo" -#: objcopy.c:2571 +#: objcopy.c:3177 msgid "interleave must be positive" msgstr "el espacio debe ser positivo" -#: objcopy.c:2591 objcopy.c:2599 +#: objcopy.c:3197 objcopy.c:3205 #, c-format msgid "%s both copied and removed" -msgstr "%s copiado y borrado" +msgstr "%s copiado y borrado al mismo tiempo" -#: objcopy.c:2696 objcopy.c:2767 objcopy.c:2867 objcopy.c:2898 objcopy.c:2922 -#: objcopy.c:2926 objcopy.c:2946 +#: objcopy.c:3306 objcopy.c:3380 objcopy.c:3480 objcopy.c:3511 objcopy.c:3535 +#: objcopy.c:3539 objcopy.c:3559 #, c-format msgid "bad format for %s" msgstr "formato erróneo para %s" -#: objcopy.c:2717 +#: objcopy.c:3330 #, c-format msgid "cannot open: %s: %s" msgstr "no se puede abrir: %s: %s" -#: objcopy.c:2836 +#: objcopy.c:3449 #, c-format msgid "Warning: truncating gap-fill from 0x%s to 0x%x" msgstr "Aviso: truncando el relleno de espacio de 0x%s a 0x%x" -#: objcopy.c:3000 -msgid "alternate machine code index must be positive" -msgstr "el índice de código máquina alternativo debe ser positivo" +#: objcopy.c:3610 +#, c-format +msgid "unknown long section names option '%s'" +msgstr "opción de nombres de sección largos '%s' desconocida" + +#: objcopy.c:3628 +msgid "unable to parse alternative machine code" +msgstr "no se puede decodificar el código máquina alternativo" + +#: objcopy.c:3673 +msgid "number of bytes to reverse must be positive and even" +msgstr "el número de bytes para reverse debe ser positivo y par" + +#: objcopy.c:3676 +#, c-format +msgid "Warning: ignoring previous --reverse-bytes value of %d" +msgstr "Aviso: se descarta el valor previo --reverse-bytes de %d" + +#: objcopy.c:3691 +#, c-format +msgid "%s: invalid reserve value for --heap" +msgstr "%s: valor de reserva inválido para --heap" + +#: objcopy.c:3697 +#, c-format +msgid "%s: invalid commit value for --heap" +msgstr "%s: valor de confirmación inválido para --heap" + +#: objcopy.c:3722 +#, c-format +msgid "%s: invalid reserve value for --stack" +msgstr "%s: valor de reserva inválido para --stack" + +#: objcopy.c:3728 +#, c-format +msgid "%s: invalid commit value for --stack" +msgstr "%s: valor de confirmación inválido para --stack" -#: objcopy.c:3058 +#: objcopy.c:3757 msgid "byte number must be less than interleave" msgstr "el número de bytes debe ser menor al espacio" -#: objcopy.c:3088 +#: objcopy.c:3784 +#, c-format +msgid "unknown input EFI target: %s" +msgstr "objetivo EFI de entrada desconocido: %s" + +#: objcopy.c:3815 +#, c-format +msgid "unknown output EFI target: %s" +msgstr "objetivo EFI de salida desconocido: %s" + +#: objcopy.c:3840 #, c-format msgid "architecture %s unknown" msgstr "arquitectura %s desconocida" -#: objcopy.c:3092 +#: objcopy.c:3844 msgid "Warning: input target 'binary' required for binary architecture parameter." msgstr "Aviso: se requiere el objetivo de entrada 'binary' para el parámeto binario de arquitectura." -#: objcopy.c:3093 +#: objcopy.c:3845 #, c-format msgid " Argument %s ignored" -msgstr " Se ignora el argumento %s" +msgstr " Se descarta el argumento %s" -#: objcopy.c:3099 +#: objcopy.c:3851 #, c-format msgid "warning: could not locate '%s'. System error message: %s" msgstr "aviso: no se puede encontrar '%s'. Mensaje de error del sistema: %s" -#: objcopy.c:3141 objcopy.c:3155 +#: objcopy.c:3862 +#, c-format +msgid "warning: could not create temporary file whilst copying '%s', (error: %s)" +msgstr "aviso: no se puede crear el fichero temporal al copiar '%s', (error: %s)" + +#: objcopy.c:3890 objcopy.c:3904 #, c-format msgid "%s %s%c0x%s never used" msgstr "%s nunca se usa %s%c0x%s" -#: objdump.c:178 +#: objdump.c:187 #, c-format msgid "Usage: %s \n" msgstr "Modo de empleo: %s \n" -#: objdump.c:179 +#: objdump.c:188 #, c-format msgid " Display information from object .\n" msgstr "Muestra la información de objeto.\n" -#: objdump.c:180 +#: objdump.c:189 #, c-format msgid " At least one of the following switches must be given:\n" -msgstr "Por lo menos se requiere una de los siguientes opciones:\n" +msgstr "Se requiere por lo menos una de los siguientes opciones:\n" -#: objdump.c:181 +#: objdump.c:190 #, c-format msgid "" " -a, --archive-headers Display archive header information\n" @@ -3084,7 +3470,9 @@ msgid "" " -g, --debugging Display debug information in object file\n" " -e, --debugging-tags Display debug information using ctags style\n" " -G, --stabs Display (in raw form) any STABS info in the file\n" -" -W, --dwarf Display DWARF info in the file\n" +" -W[lLiaprmfFsoR] or\n" +" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Display DWARF info in the file\n" " -t, --syms Display the contents of the symbol table(s)\n" " -T, --dynamic-syms Display the contents of the dynamic symbol table\n" " -r, --reloc Display the relocation entries in the file\n" @@ -3094,10 +3482,10 @@ msgid "" " -i, --info List object formats and architectures supported\n" " -H, --help Display this information\n" msgstr "" -" -a, --archive-headers Muestra información de los encabezados del archivo\n" +" -a, --archive-headers Muestra información del encabezado del archivo\n" " -f, --file-headers Muestra el contenido de todos los encabezados del\n" " fichero\n" -" -p, --private-headers Muestra el contenido de los encabezados del fichero\n" +" -p, --private-headers Muestra el contenido del encabezado del fichero\n" " específicos del formato objeto\n" " -h, --[section-]headers Muestra el contenido de los encabezados de sección\n" " -x, --all-headers Muestra el contenido de todos los encabezados\n" @@ -3107,26 +3495,28 @@ msgstr "" " secciones\n" " -S, --source Intermezclar código fuente con el desensamblado\n" " -s, --full-contents Muestra el contenido completo de todas las secciones\n" -" requeridas\n" +" solicitadas\n" " -g, --debugging Muestra la información de depuración en el fichero\n" -" objeto\n" +" objeto\n" " -e, --debugging-tags Muestra la información de depuración en estilo ctags\n" " -G, --stabs Muestra (sin formato) cualquier información de STABS\n" -" en el fichero\n" -" -W, --dwarf Muestra la información DWARF en el fichero\n" +" en el fichero\n" +" -W[lLiaprmfFsoR] o\n" +" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Muestra la información DWARF en el fichero\n" " -t, --syms Muestra el contenido de la(s) tabla(s) de símbolos\n" " -T, --dynamic-syms Muestra el contenido de la tabla de símbolos\n" -" dinámicos\n" +" dinámicos\n" " -r, --reloc Muestra las entradas de reubicación en el fichero\n" " -R, --dynamic-reloc Muestra las entradas de reubicación dinámica en el\n" -" fichero\n" +" fichero\n" " @ Lee opciones del \n" " -v, --version Muestra el número de versión de este programa\n" " -i, --info Enlista los formatos objeto y las arquitecturas\n" -" con soporte\n" +" admitidos\n" " -H, --help Muestra esta información\n" -#: objdump.c:206 +#: objdump.c:217 #, c-format msgid "" "\n" @@ -3135,7 +3525,7 @@ msgstr "" "\n" " Los siguientes interruptores son opcionales:\n" -#: objdump.c:207 +#: objdump.c:218 #, c-format msgid "" " -b, --target=BFDNAME Specify the target object format as BFDNAME\n" @@ -3147,6 +3537,7 @@ msgid "" " --file-start-context Include context from start of file (with -S)\n" " -I, --include=DIR Add DIR to search list for source files\n" " -l, --line-numbers Include line numbers and filenames in output\n" +" -F, --file-offsets Include file offsets when displaying information\n" " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" " The STYLE, if specified, can be `auto', `gnu',\n" " `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" @@ -3157,8 +3548,11 @@ msgid "" " --stop-address=ADDR Only process data whose address is <= ADDR\n" " --prefix-addresses Print complete address alongside disassembly\n" " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" +" --insn-width=WIDTH Display WIDTH bytes on a signle line for -d\n" " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" " --special-syms Include special symbols in symbol dumps\n" +" --prefix=PREFIX Add PREFIX to absolute paths for -S\n" +" --prefix-strip=LEVEL Strip initial directory names for -S\n" "\n" msgstr "" " -b, --target=NOMBREBFD Especifica el formato objeto objetivo\n" @@ -3176,10 +3570,12 @@ msgstr "" " ficheros fuente\n" " -l, --line-numbers Incluye los números de línea y los nombres de fichero\n" " en la salida\n" +" -F, --file-offsets Incluye desplazamientos de fichero al mostrar\n" +" la información\n" " -C, --demangle[=ESTILO] Decodifica los nombres de símbolo obtenidos/procesados\n" -" El ESTILO, si se especifica, puede ser `auto', 'gnu',\n" -" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" -" o `gnat'\n" +" El ESTILO, si se especifica, puede ser\n" +" `auto', 'gnu', `lucid', `arm', `hp', `edg',\n" +" `gnu-v3', `java' o `gnat'\n" " -w, --wide Da formato a la salida para más de 80 columnas\n" " -z, --disassemble-zeroes No salta los bloques de ceros al desensamblar\n" " --start-address=DIR Sólo procesa los datos cuya dirección es\n" @@ -3190,66 +3586,88 @@ msgstr "" " del desensamblado\n" " --[no-]show-raw-insn Muestra en hexadecimal a lo largo\n" " del desensamblado simbólico\n" +" --insn-width=ANCHO Muestra ANCHO bytes en una sola línea con -d\n" " --adjust-vma=DESPL Agrega el DESPLazamiento a todas las direcciones\n" " mostradas de sección\n" " --special-syms Incluye símbolos especiales en los volcados de\n" " símbolos\n" +" --prefix=PREFIJO Agrega el PREFIJO a las rutas absolutas con -S\n" +" --prefix-strip=NIVEL Descarta los nombres de directorio iniciales\n" +" con -S\n" -#: objdump.c:389 +#: objdump.c:433 #, c-format msgid "Sections:\n" msgstr "Secciones:\n" -#: objdump.c:392 objdump.c:396 +#: objdump.c:436 objdump.c:440 #, c-format msgid "Idx Name Size VMA LMA File off Algn" msgstr "Ind Nombre Tamaño VMA LMA Desp fich Alin" -#: objdump.c:398 +#: objdump.c:442 #, c-format msgid "Idx Name Size VMA LMA File off Algn" msgstr "Ind Nombre Tamaño VMA LMA Desp fich Alin" -#: objdump.c:402 +#: objdump.c:446 #, c-format msgid " Flags" msgstr " Opciones" -#: objdump.c:404 +#: objdump.c:448 #, c-format msgid " Pg" msgstr " Pg" -#: objdump.c:447 +#: objdump.c:491 #, c-format msgid "%s: not a dynamic object" msgstr "%s: no es un objeto dinámico" -#: objdump.c:1735 +#: objdump.c:916 objdump.c:940 +#, c-format +msgid " (File Offset: 0x%lx)" +msgstr " (Desplazamiento Fichero: 0x%lx)" + +#: objdump.c:1885 #, c-format -msgid "Disassembly of section %s:\n" -msgstr "Desensamblado de la sección %s:\n" +msgid "" +"\n" +"Disassembly of section %s:\n" +msgstr "" +"\n" +"Desensamblado de la sección %s:\n" -#: objdump.c:1897 +#: objdump.c:2058 #, c-format msgid "Can't use supplied machine %s" msgstr "No se puede utilizar la máquina %s proporcionada" -#: objdump.c:1916 +#: objdump.c:2077 #, c-format msgid "Can't disassemble for architecture %s\n" msgstr "No se puede desensamblar para la arquitectura %s\n" -#: objdump.c:2006 +#: objdump.c:2168 #, c-format msgid "" "\n" "Can't get contents for section '%s'.\n" msgstr "" "\n" -"No se puede obtener el ontenido de la sección '%s'.\n" +"No se puede obtener el contenido de la sección '%s'.\n" + +#: objdump.c:2179 +#, c-format +msgid "" +"\n" +"Can't uncompress section '%s'.\n" +msgstr "" +"\n" +"No se puede descomprimir la sección '%s'.\n" -#: objdump.c:2143 +#: objdump.c:2307 #, c-format msgid "" "No %s section present\n" @@ -3258,12 +3676,12 @@ msgstr "" "No está presente la sección %s\n" "\n" -#: objdump.c:2152 +#: objdump.c:2316 #, c-format msgid "Reading %s section of %s failed: %s" msgstr "Falló al leer la sección %s de %s: %s" -#: objdump.c:2196 +#: objdump.c:2360 #, c-format msgid "" "Contents of %s section:\n" @@ -3272,17 +3690,17 @@ msgstr "" "Contenido de la sección %s:\n" "\n" -#: objdump.c:2323 +#: objdump.c:2491 #, c-format msgid "architecture: %s, " msgstr "arquitectura: %s, " -#: objdump.c:2326 +#: objdump.c:2494 #, c-format msgid "flags 0x%08x:\n" msgstr "opciones 0x%08x:\n" -#: objdump.c:2340 +#: objdump.c:2508 #, c-format msgid "" "\n" @@ -3291,27 +3709,32 @@ msgstr "" "\n" "dirección de inicio 0x" -#: objdump.c:2380 +#: objdump.c:2571 #, c-format -msgid "Contents of section %s:\n" -msgstr "Contenido de la sección %s:\n" +msgid "Contents of section %s:" +msgstr "Contenido de la sección %s:" + +#: objdump.c:2573 +#, c-format +msgid " (Starting at file offset: 0x%lx)" +msgstr " (Inicia en el desplazamiento de fichero: 0x%lx)" -#: objdump.c:2505 +#: objdump.c:2680 #, c-format msgid "no symbols\n" msgstr "no hay símbolos\n" -#: objdump.c:2512 +#: objdump.c:2687 #, c-format msgid "no information for symbol number %ld\n" msgstr "no hay información para el símbolo número %ld\n" -#: objdump.c:2515 +#: objdump.c:2690 #, c-format msgid "could not determine the type of symbol number %ld\n" msgstr "no se puede determinar el tipo del símbolo número %ld\n" -#: objdump.c:2788 +#: objdump.c:2970 #, c-format msgid "" "\n" @@ -3320,222 +3743,254 @@ msgstr "" "\n" "%s: formato del fichero %s\n" -#: objdump.c:2845 +#: objdump.c:3028 #, c-format msgid "%s: printing debugging information failed" msgstr "%s: falló al mostrar la información de depuración" -#: objdump.c:2936 +#: objdump.c:3128 #, c-format msgid "In archive %s:\n" msgstr "En el fichero %s:\n" -#: objdump.c:3058 +#: objdump.c:3244 +msgid "error: the start address should be before the end address" +msgstr "error: la dirección de inicio debe estar antes de la dirección final" + +#: objdump.c:3249 +msgid "error: the stop address should be after the start address" +msgstr "error: la dirección de parada debe estar después de la dirección final" + +#: objdump.c:3261 +msgid "error: prefix strip must be non-negative" +msgstr "error: el descarte de prefijo no debe ser negativo" + +#: objdump.c:3266 +msgid "error: instruction width must be positive" +msgstr "error: la anchura de la instrucción debe ser positiva" + +#: objdump.c:3275 msgid "unrecognized -E option" -msgstr "opción -E no reconocida" +msgstr "no se reconoce la opción -E" -#: objdump.c:3069 +#: objdump.c:3286 #, c-format msgid "unrecognized --endian type `%s'" -msgstr "tipo --endian `%s' no reconocido" +msgstr "no se reconoce el tipo --endian `%s'" + +#: rclex.c:197 +msgid "invalid value specified for pragma code_page.\n" +msgstr "se especificó un valor inválido para el pragma code_page.\n" -#: rdcoff.c:196 +#: rdcoff.c:198 #, c-format msgid "parse_coff_type: Bad type code 0x%x" msgstr "parse_coff_type: Código de tipo 0x%x erróneo" -#: 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 "bfd_coff_get_syment falló: %s" -#: rdcoff.c:420 rdcoff.c:717 +#: rdcoff.c:422 rdcoff.c:719 #, c-format msgid "bfd_coff_get_auxent failed: %s" msgstr "bfd_coff_get_auxent falló: %s" -#: rdcoff.c:784 +#: rdcoff.c:786 #, c-format msgid "%ld: .bf without preceding function" msgstr "%ld: .bf sin una función precedente" -#: rdcoff.c:834 +#: rdcoff.c:836 #, c-format msgid "%ld: unexpected .ef\n" msgstr "%ld: .ef inesperado\n" -#: rddbg.c:85 +#: rddbg.c:88 #, c-format msgid "%s: no recognized debugging information" msgstr "%s: no se reconoce la información de depuración" -#: rddbg.c:394 +#: rddbg.c:402 #, c-format msgid "Last stabs entries before error:\n" msgstr "Últimas entradas stabs antes del error:\n" -#: readelf.c:264 +#: readelf.c:297 #, c-format msgid "Unable to seek to 0x%lx for %s\n" msgstr "No se puede buscar a 0x%lx para %s\n" -#: readelf.c:279 +#: readelf.c:312 #, c-format msgid "Out of memory allocating 0x%lx bytes for %s\n" msgstr "Memoria agotada al asignar 0x%lx bytes para %s\n" -#: readelf.c:289 +#: readelf.c:322 #, c-format msgid "Unable to read in 0x%lx bytes of %s\n" msgstr "No se pueden leer 0x%lx bytes de %s\n" -#: readelf.c:623 +#: readelf.c:640 msgid "Don't know about relocations on this machine architecture\n" msgstr "No se conocen las reubicaciones en esta arquitectura de máquina\n" -#: readelf.c:643 readelf.c:671 readelf.c:715 readelf.c:743 +#: readelf.c:660 readelf.c:688 readelf.c:754 readelf.c:782 msgid "relocs" msgstr "reubicaciones" -#: readelf.c:654 readelf.c:682 readelf.c:726 readelf.c:754 -msgid "out of memory parsing relocs" -msgstr "memoria agotada al decodificar reubicaciones" +#: readelf.c:671 readelf.c:699 readelf.c:765 readelf.c:793 +msgid "out of memory parsing relocs\n" +msgstr "memoria agotada al decodificar reubicaciones\n" -#: readelf.c:808 +#: readelf.c:898 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" msgstr " Desplaz Info Tipo Val. Símbolo Nombre Símbolo + Adend\n" -#: readelf.c:810 +#: readelf.c:900 #, c-format msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" msgstr " Desplaz Info Tipo Val.Símbolo Nom.Símbolo + Adend\n" -#: readelf.c:815 +#: readelf.c:905 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name\n" msgstr " Desplaz Info Tipo Val. Símbolo Nombre Símbolo\n" -#: readelf.c:817 +#: readelf.c:907 #, c-format msgid " Offset Info Type Sym.Value Sym. Name\n" msgstr " Desplaz Info Tipo Val.Símbolo Nom. Símbolo\n" -#: readelf.c:825 +#: readelf.c:915 #, c-format msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" msgstr " Desplaz Info Tipo Valor Símbolo Nombre Símbolo + Adend\n" -#: readelf.c:827 +#: readelf.c:917 #, c-format msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" msgstr " Desplaz Info Tipo Val. Símbolo Nom. Símbolo + Adend\n" -#: readelf.c:832 +#: readelf.c:922 #, c-format msgid " Offset Info Type Symbol's Value Symbol's Name\n" msgstr " Desplaz Info Tipo Valor Símbolo Nombre Símbolo\n" -#: readelf.c:834 +#: readelf.c:924 #, c-format msgid " Offset Info Type Sym. Value Sym. Name\n" msgstr " Desplaz Info Tipo Val. Símbolo Nom. Símbolo\n" -#: readelf.c:1127 readelf.c:1129 readelf.c:1238 readelf.c:1240 readelf.c:1249 -#: readelf.c:1251 +#: readelf.c:1211 readelf.c:1370 readelf.c:1378 #, c-format msgid "unrecognized: %-7lx" -msgstr "no reconocido: %-7lx" +msgstr "no se reconoce: %-7lx" -#: readelf.c:1154 +#: readelf.c:1236 #, c-format msgid "" msgstr "" -#: readelf.c:1210 +#: readelf.c:1328 #, c-format msgid "" msgstr "<índice de la tabla de cadenas: %3ld>" -#: readelf.c:1212 +#: readelf.c:1330 #, c-format msgid "" msgstr "<índice de la tabla de cadenas corrupto: %3ld>" -#: readelf.c:1522 +#: readelf.c:1703 #, c-format msgid "Processor Specific: %lx" msgstr "Específico del Procesador: %lx" -#: readelf.c:1543 +#: readelf.c:1727 #, c-format msgid "Operating System specific: %lx" msgstr "específico del Sistema Operativo: %lx" -#: readelf.c:1547 readelf.c:2349 +#: readelf.c:1731 readelf.c:2613 #, c-format msgid ": %lx" msgstr ": %lx" -#: readelf.c:1560 +#: readelf.c:1744 msgid "NONE (None)" msgstr "NONE (Ninguno)" -#: readelf.c:1561 +#: readelf.c:1745 msgid "REL (Relocatable file)" msgstr "REL (Fichero reubicable)" -#: readelf.c:1562 +#: readelf.c:1746 msgid "EXEC (Executable file)" msgstr "EXEC (Fichero ejecutable)" -#: readelf.c:1563 +#: readelf.c:1747 msgid "DYN (Shared object file)" msgstr "DYN (Fichero objeto compartido)" -#: readelf.c:1564 +#: readelf.c:1748 msgid "CORE (Core file)" msgstr "CORE (Fichero núcleo)" -#: readelf.c:1568 +#: readelf.c:1752 #, c-format msgid "Processor Specific: (%x)" -msgstr "Específico del Procesado: (%x)" +msgstr "Específico del Procesador: (%x)" -#: readelf.c:1570 +#: readelf.c:1754 #, c-format msgid "OS Specific: (%x)" msgstr "Específico del SO: (%x)" -#: readelf.c:1572 readelf.c:1681 readelf.c:2541 +#: readelf.c:1756 readelf.c:2830 #, c-format msgid ": %x" msgstr ": %x" -#: readelf.c:1584 +#: readelf.c:1768 msgid "None" msgstr "Ninguno" -#: readelf.c:2186 +#: readelf.c:1879 +#, c-format +msgid ": 0x%x" +msgstr ": 0x%x" + +#: readelf.c:2136 +msgid "unknown" +msgstr "desconocido" + +#: readelf.c:2137 +msgid "unknown mac" +msgstr "mac desconocida" + +#: readelf.c:2450 msgid "Standalone App" msgstr "Aplicación por Sí Sola" -#: readelf.c:2189 readelf.c:2948 readelf.c:2964 +#: readelf.c:2453 readelf.c:3159 readelf.c:3175 #, c-format msgid "" msgstr "" -#: readelf.c:2586 +#: readelf.c:2878 #, c-format msgid "Usage: readelf elf-file(s)\n" msgstr "Modo de empleo: readelf fichero(s)-elf\n" -#: readelf.c:2587 +#: readelf.c:2879 #, c-format msgid " Display information about the contents of ELF format files\n" msgstr " Muestra información sobre el contenido de los ficheros de formato ELF\n" -#: readelf.c:2588 +#: readelf.c:2880 #, c-format msgid "" " Options are:\n" @@ -3556,10 +4011,16 @@ msgid "" " -d --dynamic Display the dynamic section (if present)\n" " -V --version-info Display the version sections (if present)\n" " -A --arch-specific Display architecture specific information (if any).\n" +" -c --archive-index Display the symbol/file index in an archive\n" " -D --use-dynamic Use the dynamic section info when displaying symbols\n" -" -x --hex-dump= Dump the contents of section \n" -" -w[liaprmfFsoR] or\n" -" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" -x --hex-dump=\n" +" Dump the contents of section as bytes\n" +" -p --string-dump=\n" +" Dump the contents of section as strings\n" +" -R --relocated-dump=\n" +" Dump the contents of section as relocated bytes\n" +" -w[lLiaprmfFsoR] or\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" " Display the contents of DWARF2 debug sections\n" msgstr "" " Las opciones son:\n" @@ -3577,28 +4038,37 @@ msgstr "" " -n --notes Muestra las notas de núcleo (si están presentes)\n" " -r --relocs Muestra las reubicaciones (si están presentes)\n" " -u --unwind Muestra la información de desenredo (si está presente)\n" -" -d --dynamic Muestra el segmento dinámico (si está presente)\n" +" -d --dynamic Muestra la seccion dinámica (si está presente)\n" " -V --version-info Muestra las secciones de versión (si están presentes)\n" " -A --arch-specific Muestra la información específica de la arquitectura\n" -" (si hay alguna).\n" +" (si hay alguna).\n" +" -c --archive-index Muestra el índice de símbolos/ficheros en un archivo\n" " -D --use-dynamic Usa la información de la sección dinámica cuando\n" -" muestra símbolos\n" -" -x --hex-dump= Vuelca el contenido de la sección \n" -" -w[liaprmfFsoR] ó\n" -" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" muestra símbolos\n" +" -x --hex-dump=\n" +" Vuelca el contenido de la sección \n" +" como bytes\n" +" -p --string-dump=\n" +" Vuelca el contenido de la sección \n" +" como cadenas\n" +" -R --relocated-dump=\n" +" Vuelca el contenido de la sección \n" +" como bytes reubicados\n" +" -w[lLiaprmfFsoR] ó\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" " Muestra el contenido de las secciones de depuración\n" " DWARF2\n" -#: readelf.c:2612 +#: readelf.c:2910 #, c-format msgid "" -" -i --instruction-dump=\n" -" Disassemble the contents of section \n" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" msgstr "" -" -i --instruction-dump=\n" -" Desensambla el contenido de la sección \n" +" -i --instruction-dump=\n" +" Desensambla el contenido de la sección \n" -#: readelf.c:2616 +#: readelf.c:2914 #, c-format msgid "" " -I --histogram Display histogram of bucket list lengths\n" @@ -3614,96 +4084,91 @@ msgstr "" " -H --help Muestra esta información\n" " -v --version Muestra el número de versión de readelf\n" -#: readelf.c:2642 readelf.c:9180 -msgid "Out of memory allocating dump request table." -msgstr "Memoria agotada al asignar la tabla de petición de volcado." +#: readelf.c:2942 readelf.c:2970 readelf.c:2974 readelf.c:11443 +msgid "Out of memory allocating dump request table.\n" +msgstr "Memoria agotada al asignar la tabla de petición de volcado.\n" -#: readelf.c:2816 readelf.c:2884 -#, c-format -msgid "Unrecognized debug option '%s'\n" -msgstr "Opción de depuración '%s' no reconocida\n" - -#: readelf.c:2918 +#: readelf.c:3129 #, c-format msgid "Invalid option '-%c'\n" msgstr "Opción '-%c' inválida\n" -#: readelf.c:2932 +#: readelf.c:3143 msgid "Nothing to do.\n" msgstr "Nada por hacer.\n" -#: readelf.c:2944 readelf.c:2960 readelf.c:6169 +#: readelf.c:3155 readelf.c:3171 readelf.c:6440 msgid "none" msgstr "ninguno" -#: readelf.c:2961 +#: readelf.c:3172 msgid "2's complement, little endian" msgstr "complemento a 2, little endian" -#: readelf.c:2962 +#: readelf.c:3173 msgid "2's complement, big endian" msgstr "complemento a 2, big endian" -#: readelf.c:2980 +#: readelf.c:3191 msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "No es un fichero ELF - tiene los bytes mágicos erróneos en el inicio\n" -#: readelf.c:2988 +#: readelf.c:3201 #, c-format msgid "ELF Header:\n" msgstr "Encabezado ELF:\n" -#: readelf.c:2989 +#: readelf.c:3202 #, c-format msgid " Magic: " msgstr " Mágico: " -#: readelf.c:2993 +#: readelf.c:3206 #, c-format msgid " Class: %s\n" msgstr " Clase: %s\n" -#: readelf.c:2995 +#: readelf.c:3208 #, c-format msgid " Data: %s\n" msgstr " Datos: %s\n" -#: readelf.c:2997 +#: readelf.c:3210 #, c-format msgid " Version: %d %s\n" msgstr " Versión: %d %s\n" -#: readelf.c:3004 +#: readelf.c:3217 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: readelf.c:3006 +#: readelf.c:3219 #, c-format msgid " ABI Version: %d\n" msgstr " Versión ABI: %d\n" -#: readelf.c:3008 +#: readelf.c:3221 #, c-format msgid " Type: %s\n" msgstr " Tipo: %s\n" -#: readelf.c:3010 +#: readelf.c:3223 #, c-format msgid " Machine: %s\n" msgstr " Máquina: %s\n" -#: readelf.c:3012 +#: readelf.c:3225 #, c-format msgid " Version: 0x%lx\n" msgstr " Versión: 0x%lx\n" -#: readelf.c:3015 +#: readelf.c:3228 #, c-format msgid " Entry point address: " msgstr " Dirección del punto de entrada: " -#: readelf.c:3017 +#: readelf.c:3230 #, c-format msgid "" "\n" @@ -3712,7 +4177,7 @@ msgstr "" "\n" " Inicio de encabezados de programa: " -#: readelf.c:3019 +#: readelf.c:3232 #, c-format msgid "" " (bytes into file)\n" @@ -3721,57 +4186,59 @@ msgstr "" " (bytes en el fichero)\n" " Inicio de encabezados de sección: " -#: readelf.c:3021 +#: readelf.c:3234 #, c-format msgid " (bytes into file)\n" msgstr " (bytes en el fichero)\n" -#: readelf.c:3023 +#: readelf.c:3236 #, c-format msgid " Flags: 0x%lx%s\n" msgstr " Opciones: 0x%lx%s\n" -#: readelf.c:3026 +#: readelf.c:3239 #, c-format msgid " Size of this header: %ld (bytes)\n" msgstr " Tamaño de este encabezado: %ld (bytes)\n" -#: readelf.c:3028 +#: readelf.c:3241 #, c-format msgid " Size of program headers: %ld (bytes)\n" msgstr " Tamaño de encabezados de programa: %ld (bytes)\n" -#: readelf.c:3030 +#: readelf.c:3243 #, c-format msgid " Number of program headers: %ld\n" msgstr " Número de encabezados de programa: %ld\n" -#: readelf.c:3032 +#: readelf.c:3245 #, c-format msgid " Size of section headers: %ld (bytes)\n" msgstr " Tamaño de encabezados de sección: %ld (bytes)\n" -#: readelf.c:3034 +#: readelf.c:3247 #, c-format msgid " Number of section headers: %ld" msgstr " Número de encabezados de sección: %ld" -#: readelf.c:3039 +#: readelf.c:3252 #, c-format msgid " Section header string table index: %ld" msgstr " Índice de tabla de cadenas de sección de encabezado: %ld" -#: readelf.c:3070 readelf.c:3103 +#: readelf.c:3289 readelf.c:3322 msgid "program headers" msgstr "encabezados de programa" -#: 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:3360 readelf.c:3658 readelf.c:3699 readelf.c:3758 readelf.c:3823 +#: readelf.c:4494 readelf.c:4518 readelf.c:5770 readelf.c:5815 readelf.c:6014 +#: readelf.c:7087 readelf.c:7101 readelf.c:7611 readelf.c:7627 readelf.c:7670 +#: readelf.c:7695 readelf.c:9642 readelf.c:9834 readelf.c:10362 +#: readelf.c:10736 readelf.c:10750 readelf.c:11109 msgid "Out of memory\n" msgstr "Memoria agotada\n" -#: readelf.c:3168 +#: readelf.c:3387 #, c-format msgid "" "\n" @@ -3780,7 +4247,7 @@ msgstr "" "\n" "No hay encabezados de programa en este fichero.\n" -#: readelf.c:3174 +#: readelf.c:3393 #, c-format msgid "" "\n" @@ -3789,12 +4256,12 @@ msgstr "" "\n" "El tipo del fichero elf es %s\n" -#: readelf.c:3175 +#: readelf.c:3394 #, c-format msgid "Entry point " msgstr "Punto de entrada " -#: readelf.c:3177 +#: readelf.c:3396 #, c-format msgid "" "\n" @@ -3803,7 +4270,7 @@ msgstr "" "\n" "Hay %d encabezados de programa, empezando en el desplazamiento " -#: readelf.c:3189 readelf.c:3191 +#: readelf.c:3408 readelf.c:3410 #, c-format msgid "" "\n" @@ -3812,56 +4279,64 @@ msgstr "" "\n" "Encabezados de Programa:\n" -#: readelf.c:3195 +#: readelf.c:3414 #, c-format msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" msgstr " Tipo Desplaz DirVirt DirFísica TamFich TamMem Opt Alin\n" -#: readelf.c:3198 +#: readelf.c:3417 #, c-format msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" msgstr " Tipo Desplaz DirVirt DirFísica TamFich TamMem Opt Alin\n" -#: readelf.c:3202 +#: readelf.c:3421 #, c-format msgid " Type Offset VirtAddr PhysAddr\n" msgstr " Tipo Desplazamiento DirVirtual DirFísica\n" -#: readelf.c:3204 +#: readelf.c:3423 #, c-format msgid " FileSiz MemSiz Flags Align\n" msgstr " TamFichero TamMemoria Opts Alineación\n" -#: readelf.c:3297 +#: readelf.c:3516 msgid "more than one dynamic segment\n" msgstr "más de un segmento dinámico\n" -#: readelf.c:3308 -msgid "no .dynamic section in the dynamic segment" -msgstr "no hay una sección .dynamic en el segmento dinámico" +#: readelf.c:3532 +msgid "no .dynamic section in the dynamic segment\n" +msgstr "no hay una sección .dynamic en el segmento dinámico\n" -#: readelf.c:3317 -msgid "the .dynamic section is not contained within the dynamic segment" -msgstr "la sección .dynamic no está contenida en el segmento dinámico" +#: readelf.c:3547 +msgid "the .dynamic section is not contained within the dynamic segment\n" +msgstr "la sección .dynamic no está contenida en el segmento dinámico\n" -#: readelf.c:3319 -msgid "the .dynamic section is not the first section in the dynamic segment." -msgstr "la sección .dynamic no es la primera sección en el segmento dinámico." +#: readelf.c:3550 +msgid "the .dynamic section is not the first section in the dynamic segment.\n" +msgstr "la sección .dynamic no es la primera sección en el segmento dinámico.\n" -#: readelf.c:3333 +#: readelf.c:3558 msgid "Unable to find program interpreter name\n" -msgstr "No se puede encontrar el nombre del programa intérprete\n" +msgstr "No se puede encontrar el nombre del intérprete de programa\n" + +#: readelf.c:3565 +msgid "Internal error: failed to create format string to display program interpreter\n" +msgstr "Error interno: no se puede crear la cadena de formato para mostrar el intérprete de programa\n" -#: readelf.c:3340 +#: readelf.c:3569 +msgid "Unable to read program interpreter name\n" +msgstr "No se puede leer el nombre del intérprete de programa\n" + +#: readelf.c:3572 #, c-format msgid "" "\n" " [Requesting program interpreter: %s]" msgstr "" "\n" -" [Solicitando el programa intérprete: %s]" +" [Se solicita el intérprete de programa: %s]" -#: readelf.c:3352 +#: readelf.c:3584 #, c-format msgid "" "\n" @@ -3870,34 +4345,34 @@ msgstr "" "\n" " mapeo de Sección a Segmento:\n" -#: readelf.c:3353 +#: readelf.c:3585 #, c-format msgid " Segment Sections...\n" msgstr " Segmento Secciones...\n" -#: readelf.c:3402 +#: readelf.c:3620 msgid "Cannot interpret virtual addresses without program headers.\n" msgstr "No se pueden interpretar direcciones virtuales sin encabezados de programa.\n" -#: readelf.c:3418 +#: readelf.c:3636 #, c-format msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" msgstr "La dirección virtual 0x%lx no está ubicada en ningún segmento PT_LOAD.\n" -#: readelf.c:3432 readelf.c:3473 +#: readelf.c:3650 readelf.c:3691 msgid "section headers" msgstr "encabezados de sección" -#: readelf.c:3517 readelf.c:3580 +#: readelf.c:3735 readelf.c:3800 msgid "symbols" msgstr "símbolos" # ¿Cómo se traduce esto? cfuga -#: readelf.c:3527 readelf.c:3590 +#: readelf.c:3745 readelf.c:3810 msgid "symtab shndx" msgstr "symtab shndx" -#: readelf.c:3817 readelf.c:4192 +#: readelf.c:4070 readelf.c:4478 #, c-format msgid "" "\n" @@ -3906,38 +4381,38 @@ msgstr "" "\n" "No hay secciones en este fichero.\n" -#: readelf.c:3823 +#: readelf.c:4076 #, c-format msgid "There are %d section headers, starting at offset 0x%lx:\n" msgstr "Hay %d encabezados de sección, comenzando en el desplazamiento: 0x%lx:\n" -#: readelf.c:3842 readelf.c:4309 readelf.c:4544 readelf.c:4852 readelf.c:5267 -#: readelf.c:6906 +#: readelf.c:4096 readelf.c:4595 readelf.c:4821 readelf.c:5116 readelf.c:5524 +#: readelf.c:7421 msgid "string table" msgstr "tabla de cadenas" -#: readelf.c:3881 +#: readelf.c:4163 #, c-format msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" msgstr "La sección %d tiene un sh_entsize %lx inválido (se esperaba %lx)\n" -#: readelf.c:3901 +#: readelf.c:4183 msgid "File contains multiple dynamic symbol tables\n" msgstr "El fichero contiene múltiples tablas dinámicas de símbolos\n" -#: readelf.c:3914 +#: readelf.c:4196 msgid "File contains multiple dynamic string tables\n" msgstr "El fichero contiene múltiples tablas dinámicas de cadenas\n" -#: readelf.c:3919 +#: readelf.c:4201 msgid "dynamic strings" msgstr "cadenas dinámicas" -#: readelf.c:3926 +#: readelf.c:4208 msgid "File contains multiple symtab shndx tables\n" msgstr "El fichero contiene múltiples tablas symtab shndx\n" -#: readelf.c:3973 +#: readelf.c:4259 #, c-format msgid "" "\n" @@ -3946,7 +4421,7 @@ msgstr "" "\n" "Encabezados de Sección:\n" -#: readelf.c:3975 +#: readelf.c:4261 #, c-format msgid "" "\n" @@ -3955,57 +4430,57 @@ msgstr "" "\n" "Encabezados de Sección:\n" -#: readelf.c:3981 readelf.c:3992 readelf.c:4003 +#: readelf.c:4267 readelf.c:4278 readelf.c:4289 #, c-format msgid " [Nr] Name\n" msgstr " [Nr] Nombre\n" -#: readelf.c:3982 +#: readelf.c:4268 #, c-format msgid " Type Addr Off Size ES Lk Inf Al\n" msgstr " Tipo Direc Desp Tam ES En Inf Al\n" -#: readelf.c:3986 +#: readelf.c:4272 #, c-format msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" msgstr " [Nr] Nombre Tipo Direc Desp Tam ES Opt En Inf Al\n" -#: readelf.c:3993 +#: readelf.c:4279 #, c-format msgid " Type Address Off Size ES Lk Inf Al\n" msgstr " Tipo Direc Desp Tam ES En Inf Al\n" -#: readelf.c:3997 +#: readelf.c:4283 #, c-format msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" msgstr " [Nr] Nombre Tipo Direc Desp Tam ES Opt En Inf Al\n" -#: readelf.c:4004 +#: readelf.c:4290 #, c-format msgid " Type Address Offset Link\n" msgstr " Tipo Dirección Despl Enl\n" -#: readelf.c:4005 +#: readelf.c:4291 #, c-format msgid " Size EntSize Info Align\n" msgstr " Tamaño TamEnt Info Alin\n" -#: readelf.c:4009 +#: readelf.c:4295 #, c-format msgid " [Nr] Name Type Address Offset\n" msgstr " [Nr] Nombre Tipo Dirección Despl\n" -#: readelf.c:4010 +#: readelf.c:4296 #, c-format msgid " Size EntSize Flags Link Info Align\n" msgstr " Tamaño TamEnt Opts Enl Info Alin\n" -#: readelf.c:4015 +#: readelf.c:4301 #, c-format msgid " Flags\n" msgstr " Opciones\n" -#: readelf.c:4150 +#: readelf.c:4435 #, c-format msgid "" "Key to Flags:\n" @@ -4019,16 +4494,16 @@ msgstr "" " O (se requiere procesamiento extra del SO) o (específico del SO)\n" " p (específico del procesador)\n" -#: readelf.c:4168 +#: readelf.c:4453 #, c-format msgid "[: 0x%x]" msgstr "[: 0x%x]" -#: readelf.c:4199 +#: readelf.c:4485 msgid "Section headers are not available!\n" msgstr "¡Los encabezados de sección no están disponibles!\n" -#: readelf.c:4223 +#: readelf.c:4509 #, c-format msgid "" "\n" @@ -4037,46 +4512,41 @@ msgstr "" "\n" "No hay grupos de sección en este fichero.\n" -#: readelf.c:4259 +#: readelf.c:4546 #, c-format msgid "Bad sh_link in group section `%s'\n" msgstr "sh_link erróneo en la sección de grupo `%s'\n" -#: readelf.c:4278 +#: readelf.c:4565 #, c-format msgid "Bad sh_info in group section `%s'\n" msgstr "sh_info erróneo en la sección de grupo `%s'\n" -#: readelf.c:4317 readelf.c:7243 +#: readelf.c:4603 msgid "section data" msgstr "datos de sección" -#: readelf.c:4329 +#: readelf.c:4615 #, c-format msgid " [Index] Name\n" msgstr " [Índice] Nombre\n" -#: readelf.c:4343 +#: readelf.c:4629 #, c-format msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" msgstr "la sección [%5u] en la sección de grupo [%5u] > máximo de sección [%5u]\n" -#: readelf.c:4349 -#, c-format -msgid "invalid section [%5u] in group section [%5u]\n" -msgstr "sección inválida [%5u] en la sección de grupo [%5u]\n" - -#: readelf.c:4359 +#: readelf.c:4638 #, c-format msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" msgstr "la sección [%5u] en la sección de grupo [%5u] ya está en la sección de grupo [%5u]\n" -#: readelf.c:4372 +#: readelf.c:4651 #, c-format msgid "section 0 in group section [%5u]\n" msgstr "sección 0 en la sección de grupo [%5u]\n" -#: readelf.c:4468 +#: readelf.c:4746 #, c-format msgid "" "\n" @@ -4085,7 +4555,7 @@ msgstr "" "\n" "'%s' la sección de reubicación en el desplazamiento 0x%lx contiene %ld bytes:\n" -#: readelf.c:4480 +#: readelf.c:4758 #, c-format msgid "" "\n" @@ -4094,7 +4564,7 @@ msgstr "" "\n" "No hay reubicaciones dinámicas en este fichero.\n" -#: readelf.c:4504 +#: readelf.c:4782 #, c-format msgid "" "\n" @@ -4103,17 +4573,17 @@ msgstr "" "\n" "La sección de reubicación " -#: readelf.c:4509 readelf.c:4928 readelf.c:4942 readelf.c:5282 +#: readelf.c:4787 readelf.c:5192 readelf.c:5206 readelf.c:5539 #, c-format msgid "'%s'" msgstr "'%s'" -#: readelf.c:4511 readelf.c:4944 readelf.c:5284 +#: readelf.c:4789 readelf.c:5208 readelf.c:5541 #, c-format msgid " at offset 0x%lx contains %lu entries:\n" msgstr " en el desplazamiento 0x%lx contiene %lu entradas:\n" -#: readelf.c:4563 +#: readelf.c:4840 #, c-format msgid "" "\n" @@ -4122,16 +4592,16 @@ msgstr "" "\n" "No hay reubicaciones en este fichero.\n" -#: readelf.c:4742 readelf.c:5124 +#: readelf.c:5022 readelf.c:5390 msgid "unwind table" msgstr "tabla desenredada" -#: readelf.c:4801 readelf.c:5214 +#: readelf.c:5063 readelf.c:5471 #, c-format msgid "Skipping unexpected relocation type %s\n" -msgstr "Saltando el tipo de reubicación %s inesperado\n" +msgstr "Se salta el tipo de reubicación %s inesperado\n" -#: readelf.c:4860 readelf.c:5275 readelf.c:5326 +#: readelf.c:5124 readelf.c:5532 readelf.c:5585 #, c-format msgid "" "\n" @@ -4140,7 +4610,7 @@ msgstr "" "\n" "No hay secciones de desenredo en este fichero.\n" -#: readelf.c:4923 +#: readelf.c:5187 #, c-format msgid "" "\n" @@ -4149,11 +4619,11 @@ msgstr "" "\n" "No se puede encontrar la sección de información de desenredo para " -#: readelf.c:4935 +#: readelf.c:5199 msgid "unwind info" msgstr "información de desenredo" -#: readelf.c:4937 readelf.c:5281 +#: readelf.c:5201 readelf.c:5538 #, c-format msgid "" "\n" @@ -4162,11 +4632,11 @@ msgstr "" "\n" "Sección de desenredo " -#: readelf.c:5491 readelf.c:5535 +#: readelf.c:5751 readelf.c:5796 msgid "dynamic section" msgstr "sección dinámica" -#: readelf.c:5612 +#: readelf.c:5873 #, c-format msgid "" "\n" @@ -4175,31 +4645,31 @@ msgstr "" "\n" "No hay sección dinámica en este fichero.\n" -#: readelf.c:5650 -msgid "Unable to seek to end of file!" -msgstr "¡No se puede alcanzar el final del fichero!" +#: readelf.c:5911 +msgid "Unable to seek to end of file!\n" +msgstr "¡No se puede alcanzar el final del fichero!\n" -#: readelf.c:5663 +#: readelf.c:5924 msgid "Unable to determine the number of symbols to load\n" msgstr "No se puede determinar el número de símbolos a cargar\n" -#: readelf.c:5698 +#: readelf.c:5959 msgid "Unable to seek to end of file\n" msgstr "No se puede alcanzar el final del fichero\n" -#: readelf.c:5705 +#: readelf.c:5966 msgid "Unable to determine the length of the dynamic string table\n" msgstr "No se puede determinar la longitud de la tabla dinámica de cadenas\n" -#: readelf.c:5710 +#: readelf.c:5971 msgid "dynamic string table" msgstr "tabla de cadena dinámicas" -#: readelf.c:5745 +#: readelf.c:6007 msgid "symbol information" msgstr "información del símbolo" -#: readelf.c:5770 +#: readelf.c:6032 #, c-format msgid "" "\n" @@ -4208,192 +4678,207 @@ msgstr "" "\n" "La sección dinámica en el desplazamiento 0x%lx contiene %u entradas:\n" -#: readelf.c:5773 +#: readelf.c:6035 #, c-format msgid " Tag Type Name/Value\n" msgstr " Marca Tipo Nombre/Valor\n" -#: readelf.c:5809 +#: readelf.c:6071 #, c-format msgid "Auxiliary library" msgstr "Biblioteca auxiliar" -#: readelf.c:5813 +#: readelf.c:6075 #, c-format msgid "Filter library" msgstr "Biblioteca de filtro" -#: readelf.c:5817 +#: readelf.c:6079 #, c-format msgid "Configuration file" msgstr "Fichero de configuración" -#: readelf.c:5821 +#: readelf.c:6083 #, c-format msgid "Dependency audit library" msgstr "Biblioteca de auditoría de dependencias" -#: readelf.c:5825 +#: readelf.c:6087 #, c-format msgid "Audit library" msgstr "Biblioteca de auditoría" -#: readelf.c:5843 readelf.c:5871 readelf.c:5899 +#: readelf.c:6105 readelf.c:6133 readelf.c:6161 #, c-format msgid "Flags:" msgstr "Opciones:" -#: readelf.c:5846 readelf.c:5874 readelf.c:5901 +#: readelf.c:6108 readelf.c:6136 readelf.c:6163 #, c-format msgid " None\n" msgstr " Ninguna\n" -#: readelf.c:6022 +#: readelf.c:6284 #, c-format msgid "Shared library: [%s]" msgstr "Biblioteca compartida: [%s]" -#: readelf.c:6025 +#: readelf.c:6287 #, c-format msgid " program interpreter" msgstr " programa intérprete" -#: readelf.c:6029 +#: readelf.c:6291 #, c-format msgid "Library soname: [%s]" msgstr "Nombre-so de la biblioteca: [%s]" -#: readelf.c:6033 +#: readelf.c:6295 #, c-format msgid "Library rpath: [%s]" msgstr "Rpath de la biblioteca: [%s]" -#: readelf.c:6037 +#: readelf.c:6299 #, c-format msgid "Library runpath: [%s]" msgstr "Ruta de ejecución de la biblioteca: [%s]" -#: readelf.c:6100 +#: readelf.c:6362 #, c-format msgid "Not needed object: [%s]\n" msgstr "Objeto innecesario: [%s]\n" -#: readelf.c:6214 +#: readelf.c:6487 #, c-format msgid "" "\n" -"Version definition section '%s' contains %ld entries:\n" +"Version definition section '%s' contains %u entries:\n" msgstr "" "\n" -"La sección de definición de la versión '%s' contiene %ld entradas:\n" +"La sección de definición de versión '%s' contiene %u entradas:\n" -#: readelf.c:6217 +#: readelf.c:6490 #, c-format msgid " Addr: 0x" msgstr " Dir: 0x" -#: readelf.c:6219 readelf.c:6426 +#: readelf.c:6492 readelf.c:6594 readelf.c:6715 #, c-format -msgid " Offset: %#08lx Link: %lx (%s)\n" -msgstr " Despl: %#08lx Enl: %lx (%s)\n" +msgid " Offset: %#08lx Link: %u (%s)\n" +msgstr " Despl: %#08lx Enl: %u (%s)\n" -#: readelf.c:6228 +#: readelf.c:6500 msgid "version definition section" msgstr "sección de definición de versión" -#: readelf.c:6254 +#: readelf.c:6529 #, c-format msgid " %#06x: Rev: %d Flags: %s" msgstr " %#06x: Rev: %d Opts: %s" -#: readelf.c:6257 +#: readelf.c:6532 #, c-format msgid " Index: %d Cnt: %d " msgstr " Ind: %d Cnt: %d " -#: readelf.c:6268 +#: readelf.c:6543 #, c-format msgid "Name: %s\n" msgstr "Nombre: %s\n" -#: readelf.c:6270 +#: readelf.c:6545 #, c-format msgid "Name index: %ld\n" msgstr "Índice de nombres: %ld\n" -#: readelf.c:6285 +#: readelf.c:6562 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Padre %d: %s\n" -#: readelf.c:6288 +#: readelf.c:6565 #, c-format msgid " %#06x: Parent %d, name index: %ld\n" msgstr " %#06x: Padre %d, índice de nombres: %ld\n" -#: readelf.c:6307 +#: readelf.c:6569 +#, c-format +msgid " Version def aux past end of section\n" +msgstr " Versión def aux después del final de la sección\n" + +#: readelf.c:6574 +#, c-format +msgid " Version definition past end of section\n" +msgstr " Definición de versión después del final de la sección\n" + +#: readelf.c:6589 #, c-format msgid "" "\n" -"Version needs section '%s' contains %ld entries:\n" +"Version needs section '%s' contains %u entries:\n" msgstr "" "\n" -"La sección de requerimientos de versión '%s' contiene %ld entradas:\n" +"La sección de requerimientos de versión '%s' contiene %u entradas:\n" -#: readelf.c:6310 +#: readelf.c:6592 #, c-format msgid " Addr: 0x" msgstr " Dir: 0x" -#: readelf.c:6312 -#, c-format -msgid " Offset: %#08lx Link to section: %ld (%s)\n" -msgstr " Despl: %#08lx Enlace a sección: %ld (%s)\n" - -#: readelf.c:6321 +#: readelf.c:6602 msgid "version need section" -msgstr "sección de versiones necesarias" +msgstr "sección de requerimientos de versión" -#: readelf.c:6343 +#: readelf.c:6627 #, c-format msgid " %#06x: Version: %d" msgstr " %#06x: Versión: %d" -#: readelf.c:6346 +#: readelf.c:6630 #, c-format msgid " File: %s" msgstr " Fichero: %s" -#: readelf.c:6348 +#: readelf.c:6632 #, c-format msgid " File: %lx" msgstr " Fichero: %lx" -#: readelf.c:6350 +#: readelf.c:6634 #, c-format msgid " Cnt: %d\n" msgstr " Cnt: %d\n" -#: readelf.c:6368 +#: readelf.c:6654 #, c-format msgid " %#06x: Name: %s" msgstr " %#06x: Nombre: %s" -#: readelf.c:6371 +#: readelf.c:6657 #, c-format msgid " %#06x: Name index: %lx" msgstr " %#06x: Índice de nombres: %lx" -#: readelf.c:6374 +#: readelf.c:6660 #, c-format msgid " Flags: %s Version: %d\n" msgstr " Opts: %s Versión: %d\n" -#: readelf.c:6417 +#: readelf.c:6667 +#, c-format +msgid " Version need aux past end of section\n" +msgstr " Aux de requerimientos de versión después del final de la sección\n" + +#: readelf.c:6672 +#, c-format +msgid " Version need past end of section\n" +msgstr " Requerimientos de versión después del final de la sección\n" + +#: readelf.c:6706 msgid "version string table" -msgstr "versión de tabla de cadenas" +msgstr "tabla de cadenas de versión" -#: readelf.c:6421 +#: readelf.c:6710 #, c-format msgid "" "\n" @@ -4402,40 +4887,44 @@ msgstr "" "\n" "La sección de símbolos de versión '%s' contiene %d entradas:\n" -#: readelf.c:6424 +#: readelf.c:6713 #, c-format msgid " Addr: " msgstr " Dir: " -#: readelf.c:6434 +#: readelf.c:6723 msgid "version symbol data" msgstr "datos de símbolos de versión" -#: readelf.c:6461 +#: readelf.c:6750 msgid " 0 (*local*) " msgstr " 0 (*local*) " -#: readelf.c:6465 +#: readelf.c:6754 msgid " 1 (*global*) " msgstr " 1 (*global*) " -#: readelf.c:6503 readelf.c:6969 +#: readelf.c:6791 readelf.c:7488 msgid "version need" msgstr "la versión necesita" -#: readelf.c:6513 +#: readelf.c:6801 msgid "version need aux (2)" msgstr "la versión necesita aux (2)" -#: readelf.c:6555 readelf.c:7034 +#: readelf.c:6816 readelf.c:6871 +msgid "*invalid*" +msgstr "*inválido*" + +#: readelf.c:6846 readelf.c:7553 msgid "version def" msgstr "versión definida" -#: readelf.c:6575 readelf.c:7049 +#: readelf.c:6866 readelf.c:7568 msgid "version def aux" msgstr "versión definida auxiliar" -#: readelf.c:6606 +#: readelf.c:6900 #, c-format msgid "" "\n" @@ -4444,23 +4933,32 @@ msgstr "" "\n" "No se encontró información de versión en este fichero.\n" -#: readelf.c:6740 +#: readelf.c:7034 +#, c-format +msgid ": %x" +msgstr ": %x" + +#: readelf.c:7093 msgid "Unable to read in dynamic data\n" msgstr "No se pueden leer los datos dinámicos\n" -#: readelf.c:6793 -msgid "Unable to seek to start of dynamic information" -msgstr "No se puede encontrar el inicio de la información dinámica" +#: readelf.c:7184 readelf.c:7234 readelf.c:7258 readelf.c:7288 readelf.c:7312 +msgid "Unable to seek to start of dynamic information\n" +msgstr "No se puede encontrar el inicio de la información dinámica\n" -#: readelf.c:6799 +#: readelf.c:7190 readelf.c:7240 msgid "Failed to read in number of buckets\n" -msgstr "Falló la lectura en el número de cubos\n" +msgstr "Falló al leer el número de cubos\n" -#: readelf.c:6805 +#: readelf.c:7196 msgid "Failed to read in number of chains\n" -msgstr "Falló la lectura en el número de cadenas\n" +msgstr "Falló al leer el número de cadenas\n" -#: readelf.c:6825 +#: readelf.c:7296 +msgid "Failed to determine last chain length\n" +msgstr "No se puede determinar la longitud de la última cadena\n" + +#: readelf.c:7340 #, c-format msgid "" "\n" @@ -4469,17 +4967,26 @@ msgstr "" "\n" "Tabla de símbolos por imagen:\n" -#: readelf.c:6827 +#: readelf.c:7342 readelf.c:7360 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" msgstr " Num Cub: Valor Tamaño Tipo Uni Vis Nombre Ind\n" -#: readelf.c:6829 +#: readelf.c:7344 readelf.c:7362 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" msgstr " Num Cub: Valor Tamaño Typo Uni Vis Nombre Ind\n" -#: readelf.c:6882 +#: readelf.c:7358 +#, c-format +msgid "" +"\n" +"Symbol table of `.gnu.hash' for image:\n" +msgstr "" +"\n" +"Tabla de símbolos de `.gnu.hash' para la imagen:\n" + +#: readelf.c:7397 #, c-format msgid "" "\n" @@ -4488,29 +4995,29 @@ msgstr "" "\n" "La tabla de símbolos '%s' contiene %lu entradas:\n" -#: readelf.c:6886 +#: readelf.c:7401 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Valor Tam Tipo Unión Vis Nombre Ind\n" -#: readelf.c:6888 +#: readelf.c:7403 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Num: Valor Tam Tipo Unión Vis Nombre Ind\n" -#: readelf.c:6939 +#: readelf.c:7459 msgid "version data" msgstr "datos de versión" -#: readelf.c:6982 +#: readelf.c:7501 msgid "version need aux (3)" msgstr "la versión necesita aux (3)" -#: readelf.c:7009 -msgid "bad dynamic symbol" -msgstr "símbolo dinámico erróneo" +#: readelf.c:7528 +msgid "bad dynamic symbol\n" +msgstr "símbolo dinámico erróneo\n" -#: readelf.c:7073 +#: readelf.c:7592 #, c-format msgid "" "\n" @@ -4519,7 +5026,7 @@ msgstr "" "\n" "La información de símbolos dinámicos no está disponible para mostrar los símbolos.\n" -#: readelf.c:7085 +#: readelf.c:7604 #, c-format msgid "" "\n" @@ -4528,16 +5035,21 @@ msgstr "" "\n" "Histograma para la longitud de lista de cubos (total de %lu cubos):\n" -#: readelf.c:7087 +#: readelf.c:7606 readelf.c:7676 #, c-format msgid " Length Number %% of total Coverage\n" msgstr " Long Número %% del total Cobertura\n" -#: readelf.c:7092 readelf.c:7108 readelf.c:8031 readelf.c:8223 -msgid "Out of memory" -msgstr "Memoria agotada" +#: readelf.c:7674 +#, c-format +msgid "" +"\n" +"Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histograma para la longitud de lista de cubos `.gnu.hash' (total de %lu cubos):\n" -#: readelf.c:7157 +#: readelf.c:7740 #, c-format msgid "" "\n" @@ -4546,12 +5058,36 @@ msgstr "" "\n" "El segmento de información dinámica en el desplazamiento 0x%lx contiene %d entradas:\n" -#: readelf.c:7160 +#: readelf.c:7743 #, c-format msgid " Num: Name BoundTo Flags\n" msgstr " Num: Nombre EnlaceA Opts\n" -#: readelf.c:7212 +#: readelf.c:7834 +msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc" +msgstr "Se encontró un tipo de reubicación MN10300 sin manejar después de la reubicación SYM_DIFF" + +#: readelf.c:7982 +#, c-format +msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n" +msgstr "Falta el conocimiento de los tipos de reubicación de 32-bit usados en las secciones DWARF del número de máquina %d\n" + +#: readelf.c:8251 +#, c-format +msgid "unable to apply unsupported reloc type %d to section %s\n" +msgstr "no se puede aplicar el tipo de reubicación no admitido %d a la sección %s\n" + +#: readelf.c:8259 +#, c-format +msgid "skipping invalid relocation offset 0x%lx in section %s\n" +msgstr "se salta el desplazamiento de reubicación inválido 0x%lx en la sección %s\n" + +#: readelf.c:8283 +#, c-format +msgid "skipping unexpected symbol type %s in %ld'th relocation in section %s\n" +msgstr "se salta el tipo de símbolo %s inesperado en la %ld-ésima reubicación en la sección %s\n" + +#: readelf.c:8315 #, c-format msgid "" "\n" @@ -4560,7 +5096,7 @@ msgstr "" "\n" "Volcado ensamblador de la sección %s\n" -#: readelf.c:7233 +#: readelf.c:8336 #, c-format msgid "" "\n" @@ -4569,36 +5105,49 @@ msgstr "" "\n" "La sección '%s' no tiene datos para volcar.\n" -#: readelf.c:7238 +#: readelf.c:8342 +msgid "section contents" +msgstr "contenido de la sección" + +#: readelf.c:8362 #, c-format msgid "" "\n" -"Hex dump of section '%s':\n" +"String dump of section '%s':\n" msgstr "" "\n" -"Volcado hexadecimal de la sección '%s':\n" +"Volcado de cadenas de la sección '%s':\n" -#: readelf.c:7359 +#: readelf.c:8380 #, c-format -msgid "skipping invalid relocation offset 0x%lx in section %s\n" -msgstr "saltando el desplazamiento de reubicación inválido 0x%lx en la sección%s\n" +msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " Nota: Esta sección tiene reubicaciones contra ella, pero NO se han aplicado a este volcado.\n" + +#: readelf.c:8409 +#, c-format +msgid " No strings found in this section." +msgstr " No se encontraron cadenas en esta sección." -#: readelf.c:7376 +#: readelf.c:8431 #, c-format -msgid "skipping unexpected symbol type %s in relocation in section .rela%s\n" -msgstr "saltando el tipo de símbolo %s inesperado en la reubicación en la sección .rela.%s\n" +msgid "" +"\n" +"Hex dump of section '%s':\n" +msgstr "" +"\n" +"Volcado hexadecimal de la sección '%s':\n" -#: readelf.c:7402 +#: readelf.c:8455 #, c-format -msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n" -msgstr "saltando el tipo de símbolo %s inesperado en la reubicación en la sección .rela.%s\n" +msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " NOTA: Esta sección tiene reubicaciones contra ella, pero NO se han aplicado a este volcado.\n" -#: readelf.c:7435 +#: readelf.c:8593 #, c-format msgid "%s section data" msgstr "datos de sección %s" -#: readelf.c:7472 +#: readelf.c:8658 #, c-format msgid "" "\n" @@ -4607,44 +5156,58 @@ msgstr "" "\n" "La sección '%s' no tiene datos de depuración.\n" -#: readelf.c:7498 +#. There is no point in dumping the contents of a debugging section +#. which has the NOBITS type - the bits in the file will be random. +#. This can happen when a file containing a .eh_frame section is +#. stripped with the --only-keep-debug command line option. +#: readelf.c:8667 +#, c-format +msgid "section '%s' has the NOBITS type - its contents are unreliable.\n" +msgstr "la sección '%s' tiene el tipo NOBITS - su contenido no es confiable.\n" + +#: readelf.c:8702 #, c-format msgid "Unrecognized debug section: %s\n" -msgstr "Sección de depuración no reconocida: %s\n" +msgstr "No se reconoce la sección de depuración: %s\n" + +#: readelf.c:8730 +#, c-format +msgid "Section '%s' was not dumped because it does not exist!\n" +msgstr "¡La sección '%s' no se volcó porque no existe!\n" -#: readelf.c:7533 +#: readelf.c:8771 #, c-format msgid "Section %d was not dumped because it does not exist!\n" msgstr "¡La sección %d no se volcó porque no existe!\n" -#: readelf.c:7791 +#: readelf.c:9285 msgid "attributes" msgstr "atributos" -#: readelf.c:7809 +#: readelf.c:9306 #, c-format msgid "ERROR: Bad section length (%d > %d)\n" msgstr "ERROR: Longitud de sección errónea (%d > %d)\n" -#: readelf.c:7830 +#: readelf.c:9337 #, c-format msgid "ERROR: Bad subsection length (%d > %d)\n" msgstr "ERROR: Longitud de subsección errónea (%d > %d)\n" -#: readelf.c:7880 +#: readelf.c:9396 #, c-format msgid "Unknown format '%c'\n" msgstr "Formato '%c' desconocido\n" -#: readelf.c:7936 readelf.c:8304 +#: readelf.c:9549 readelf.c:10065 msgid "liblist" msgstr "lista de bibliotecas" -#: readelf.c:8025 +#: readelf.c:9636 msgid "options" msgstr "opciones" -#: readelf.c:8055 +#: readelf.c:9666 #, c-format msgid "" "\n" @@ -4653,15 +5216,15 @@ msgstr "" "\n" "La sección '%s' contiene %d entradas:\n" -#: readelf.c:8216 -msgid "conflict list found without a dynamic symbol table" -msgstr "se encontró una lista de conflictos sin una tabla de símbolos dinámicos" +#: readelf.c:9827 +msgid "conflict list found without a dynamic symbol table\n" +msgstr "se encontró una lista de conflictos sin una tabla de símbolos dinámicos\n" -#: readelf.c:8232 readelf.c:8246 +#: readelf.c:9843 readelf.c:9857 msgid "conflict" msgstr "tiene conflictos con" -#: readelf.c:8256 +#: readelf.c:9867 #, c-format msgid "" "\n" @@ -4670,15 +5233,92 @@ msgstr "" "\n" "La sección '.conflict' contiene %lu entradas:\n" -#: readelf.c:8258 +#: readelf.c:9869 msgid " Num: Index Value Name" msgstr " Num: Índice Valor Nombre" -#: readelf.c:8311 +#: readelf.c:9901 +msgid "GOT" +msgstr "GOT" + +#: readelf.c:9902 +#, c-format +msgid "" +"\n" +"Primary GOT:\n" +msgstr "" +"\n" +"GOT primario:\n" + +#: readelf.c:9903 +#, c-format +msgid " Canonical gp value: " +msgstr " Valor gp canónico: " + +#: readelf.c:9907 readelf.c:9998 +#, c-format +msgid " Reserved entries:\n" +msgstr " Entradas reservadas:\n" + +#: readelf.c:9908 +#, c-format +msgid " %*s %10s %*s Purpose\n" +msgstr " %*s %10s %*s Propósito\n" + +#: readelf.c:9924 +#, c-format +msgid " Local entries:\n" +msgstr " Entradas locales\n" + +#: readelf.c:9925 +#, c-format +msgid " %*s %10s %*s\n" +msgstr " %*s %10s %*s\n" + +#: readelf.c:9940 +#, c-format +msgid " Global entries:\n" +msgstr " Entradas globales:\n" + +#: readelf.c:9941 +#, c-format +msgid " %*s %10s %*s %*s %-7s %3s %s\n" +msgstr " %*s %10s %*s %*s %-7s %3s %s\n" + +#: readelf.c:9996 +msgid "PLT GOT" +msgstr "GOT de PLT" + +#: readelf.c:9997 +#, c-format +msgid "" +"\n" +"PLT GOT:\n" +"\n" +msgstr "" +"\n" +"GOT de PLT:\n" + +#: readelf.c:9999 +#, c-format +msgid " %*s %*s Purpose\n" +msgstr " %*s %*s Propósito\n" + +#: readelf.c:10007 +#, c-format +msgid " Entries:\n" +msgstr " Entradas:\n" + +#: readelf.c:10008 +#, c-format +msgid " %*s %*s %*s %-7s %3s %s\n" +msgstr " %*s %*s %*s %-7s %3s %s\n" + +#: readelf.c:10072 msgid "liblist string table" msgstr "tabla de cadenas liblist" -#: readelf.c:8321 +#: readelf.c:10082 #, c-format msgid "" "\n" @@ -4687,90 +5327,114 @@ msgstr "" "\n" "La sección de lista de bibliotecas '%s' contiene %lu entradas:\n" -#: readelf.c:8374 +#: readelf.c:10135 msgid "NT_AUXV (auxiliary vector)" msgstr "NT_AUXV (vector auxiliar)" -#: readelf.c:8376 +#: readelf.c:10137 msgid "NT_PRSTATUS (prstatus structure)" msgstr "NT_PRSTATUS (estructura prstatus)" -#: readelf.c:8378 +#: readelf.c:10139 msgid "NT_FPREGSET (floating point registers)" msgstr "NT_FPREGSET (registros de coma flotante)" -#: readelf.c:8380 +#: readelf.c:10141 msgid "NT_PRPSINFO (prpsinfo structure)" msgstr "NT_PRPSINFO (estructura prpsinfo)" -#: readelf.c:8382 +#: readelf.c:10143 msgid "NT_TASKSTRUCT (task structure)" msgstr "NT_TASKSTRUCT (estructura task)" -#: readelf.c:8384 +#: readelf.c:10145 msgid "NT_PRXFPREG (user_xfpregs structure)" msgstr "NT_PRXFPREG (estructura user_xfpregs)" -#: readelf.c:8386 +#: readelf.c:10147 +msgid "NT_PPC_VMX (ppc Altivec registers)" +msgstr "NT_PPC_VMX (registros Altivec de ppc)" + +#: readelf.c:10149 +msgid "NT_PPC_VSX (ppc VSX registers)" +msgstr "NT_PPC_VSX (registros VSX de ppc)" + +#: readelf.c:10151 msgid "NT_PSTATUS (pstatus structure)" msgstr "NT_PSTATUS (estructura pstatus)" -#: readelf.c:8388 +#: readelf.c:10153 msgid "NT_FPREGS (floating point registers)" msgstr "NT_FPREGS (registros de coma flotante)" -#: readelf.c:8390 +#: readelf.c:10155 msgid "NT_PSINFO (psinfo structure)" msgstr "NT_PSINFO (estructura psinfo)" -#: readelf.c:8392 +#: readelf.c:10157 msgid "NT_LWPSTATUS (lwpstatus_t structure)" msgstr "NT_LWPSTATUS (estructura lwpstatus_t)" -#: readelf.c:8394 +#: readelf.c:10159 msgid "NT_LWPSINFO (lwpsinfo_t structure)" msgstr "NT_LWPSINFO (estructura lwpsinfo_t)" -#: readelf.c:8396 +#: readelf.c:10161 msgid "NT_WIN32PSTATUS (win32_pstatus structure)" msgstr "NT_WIN32PSTATUS (estructura win32_pstatus)" -#: readelf.c:8404 +#: readelf.c:10169 msgid "NT_VERSION (version)" msgstr "NT_VERSION (versión)" -#: readelf.c:8406 +#: readelf.c:10171 msgid "NT_ARCH (architecture)" msgstr "NT_ARCH (arquitectura)" -#: readelf.c:8411 readelf.c:8433 +#: readelf.c:10176 readelf.c:10199 readelf.c:10221 #, c-format msgid "Unknown note type: (0x%08x)" msgstr "Tipo de nota desconocido: (0x%08x)" +#: readelf.c:10188 +msgid "NT_GNU_ABI_TAG (ABI version tag)" +msgstr "NT_GNU_ABI_TAG (etiqueta de versión de ABI)" + +#: readelf.c:10190 +msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)" +msgstr "NT_GNU_HWCAP (información de HWCAP de software proporcionado por DSO)" + +#: readelf.c:10192 +msgid "NT_GNU_BUILD_ID (unique build ID bitstring)" +msgstr "NT_GNU_BUILD_ID (cadena de bits de ID de construcción única)" + +#: readelf.c:10194 +msgid "NT_GNU_GOLD_VERSION (gold version)" +msgstr "NT_GNU_GOLD_VERSION (versión de gold)" + #. NetBSD core "procinfo" structure. -#: readelf.c:8423 +#: readelf.c:10211 msgid "NetBSD procinfo structure" msgstr "estructura procinfo de NetBSD" -#: readelf.c:8450 readelf.c:8464 +#: readelf.c:10238 readelf.c:10252 msgid "PT_GETREGS (reg structure)" msgstr "PT_GETREGS (estructura reg)" -#: readelf.c:8452 readelf.c:8466 +#: readelf.c:10240 readelf.c:10254 msgid "PT_GETFPREGS (fpreg structure)" msgstr "PT_GETFPREGS (estructura fpreg)" -#: readelf.c:8472 +#: readelf.c:10260 #, c-format msgid "PT_FIRSTMACH+%d" msgstr "PT_FIRSTMACH+%d" -#: readelf.c:8518 +#: readelf.c:10316 msgid "notes" msgstr "notas" -#: readelf.c:8524 +#: readelf.c:10322 #, c-format msgid "" "\n" @@ -4779,27 +5443,27 @@ msgstr "" "\n" "Notas en el desplazamiento 0x%08lx con longitud 0x%08lx:\n" -#: readelf.c:8526 +#: readelf.c:10324 #, c-format msgid " Owner\t\tData size\tDescription\n" msgstr " Prop\t\tTamaño datos\tDescripción\n" -#: readelf.c:8545 +#: readelf.c:10343 #, c-format msgid "corrupt note found at offset %lx into core notes\n" msgstr "se encontró una nota corrupta en el desplazamiento %lx en las notas de núcleo\n" -#: readelf.c:8547 +#: readelf.c:10345 #, c-format msgid " type: %lx, namesize: %08lx, descsize: %08lx\n" msgstr " tipo: %lx, tamañonombre: %08lx, tamañodesc: %08lx\n" -#: readelf.c:8645 +#: readelf.c:10443 #, c-format msgid "No note segments present in the core file.\n" msgstr "No hay segmentos de notas presentes el el fichero core.\n" -#: readelf.c:8726 +#: readelf.c:10527 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" @@ -4807,12 +5471,12 @@ msgstr "" "Esta instancia de readelf ha sido construida sin soporte para un\n" "tipo de datos de 64 bit y por eso no puede leer ficheros ELF de 64 bit.\n" -#: readelf.c:8775 readelf.c:9119 +#: readelf.c:10574 #, c-format msgid "%s: Failed to read file header\n" msgstr "%s: Falló al leer el encabezado del fichero\n" -#: readelf.c:8788 +#: readelf.c:10587 #, c-format msgid "" "\n" @@ -4821,286 +5485,388 @@ msgstr "" "\n" "Fichero: %s\n" -#: readelf.c:8936 readelf.c:8957 readelf.c:8994 readelf.c:9074 +#: readelf.c:10802 +#, c-format +msgid "%s: failed to seek to first archive header\n" +msgstr "%s: falló al buscar el primer encabezado de archivo\n" + +#: readelf.c:10811 readelf.c:11076 readelf.c:11246 #, c-format msgid "%s: failed to read archive header\n" msgstr "%s: falló al leer el encabezado del archivo\n" -#: readelf.c:8947 +#: readelf.c:10836 +#, c-format +msgid "%s: the archive index is empty\n" +msgstr "%s: el índice del archivo está vacío\n" + +#: readelf.c:10844 readelf.c:10867 +#, c-format +msgid "%s: failed to read archive index\n" +msgstr "%s: falló al leer el índice del archivo\n" + +#: readelf.c:10853 +#, c-format +msgid "%s: the archive index is supposed to have %ld entries, but the size in the header is too small\n" +msgstr "%s: se supone que el índice del archivo tiene %ld entradas, pero el tamaño en el encabezado es demasiado pequeño\n" + +#: readelf.c:10860 +msgid "Out of memory whilst trying to read archive symbol index\n" +msgstr "Memoria agotada al tratar de leer el índice de símbolos del archivo\n" + +#: readelf.c:10877 +msgid "Out of memory whilst trying to convert the archive symbol index\n" +msgstr "Memoria agotada al tratar de convertir el índice de símbolos del archivo\n" + +#: readelf.c:10889 +#, c-format +msgid "%s: the archive has an index but no symbols\n" +msgstr "%s: el archivo tiene un índice pero no tiene símbolos\n" + +#: readelf.c:10896 +msgid "Out of memory whilst trying to read archive index symbol table\n" +msgstr "Memoria agotada al tratar de leer la tabla de símbolos del índice del archivo\n" + +#: readelf.c:10902 +#, c-format +msgid "%s: failed to read archive index symbol table\n" +msgstr "%s: falló al leer la tabla de símbolos del índice del archivo\n" + +#: readelf.c:10910 #, c-format msgid "%s: failed to skip archive symbol table\n" msgstr "%s: falló al saltar la tabla de símbolos del archivo\n" -#: readelf.c:8979 +#: readelf.c:10921 #, c-format -msgid "%s: failed to read string table\n" -msgstr "%s: falló al leer la tabla de cadenas\n" +msgid "%s: failed to read archive header following archive index\n" +msgstr "%s: falló al leer el encabezado del archivo a continuación del índice del archivo\n" -#: readelf.c:9015 +#: readelf.c:10926 #, c-format -msgid "%s: invalid archive string table offset %lu\n" -msgstr "%s: desplazamiento de tabla de cadenas de archivo %lu inválido\n" +msgid "%s has no archive index\n" +msgstr "%s: no tiene índice de archivo\n" -#: readelf.c:9031 +#: readelf.c:10937 +msgid "Out of memory reading long symbol names in archive\n" +msgstr "Memoria agotada al leer los nombres de símbolo long en el archivo\n" + +#: readelf.c:10945 #, c-format -msgid "%s: bad archive file name\n" -msgstr "%s: nombre de fichero de archivo erróneo\n" +msgid "%s: failed to read long symbol name string table\n" +msgstr "%s: falló al leer la tabla de cadenas de nombre de símbolo largos\n" + +#: readelf.c:11070 +#, c-format +msgid "%s: failed to seek to next file name\n" +msgstr "%s: falló al buscar el siguiente nombre de fichero\n" + +#: readelf.c:11081 readelf.c:11252 +#, c-format +msgid "%s: did not find a valid archive header\n" +msgstr "%s no se encontró un encabezado de archivo válido\n" + +#: readelf.c:11162 +#, c-format +msgid "%s: unable to dump the index as none was found\n" +msgstr "%s: no se puede volcar el índice porque ninguno se encontró\n" + +#: readelf.c:11168 +#, c-format +msgid "Index of archive %s: (%ld entries, 0x%lx bytes in the symbol table)\n" +msgstr "Índice del archivo %s: (%ld entradas, 0x%lx bytes en la tabla de símbolos)\n" + +#: readelf.c:11186 +#, c-format +msgid "Binary %s contains:\n" +msgstr "El binario %s contiene:\n" + +#: readelf.c:11194 +#, c-format +msgid "%s: end of the symbol table reached before the end of the index\n" +msgstr "%s: se alcanzó el final de la tabla de símbolos antes que el final del índice\n" + +#: readelf.c:11205 +#, c-format +msgid "%s: symbols remain in the index symbol table, but without corresponding entries in the index table\n" +msgstr "%s: aún hay símbolos en la tabla de símbolos de índice, pero sin su entrada correspondiente en la tabla de índice\n" + +#: readelf.c:11210 +#, c-format +msgid "%s: failed to seek back to start of object files in the archive\n" +msgstr "%s: falló al buscar de nuevo el inicio de los ficheros objeto en el archivo\n" -#: readelf.c:9063 +#: readelf.c:11238 #, c-format msgid "%s: failed to seek to next archive header\n" msgstr "%s: falló al buscar el siguiente encabezado de archivo\n" -#: readelf.c:9097 +#: readelf.c:11266 readelf.c:11275 +#, c-format +msgid "%s: bad archive file name\n" +msgstr "%s: nombre de fichero de archivo erróneo\n" + +#: readelf.c:11294 readelf.c:11370 +#, c-format +msgid "Input file '%s' is not readable.\n" +msgstr "El fichero de entrada '%s' no es legible.\n" + +#: readelf.c:11316 +#, c-format +msgid "%s: failed to seek to archive member.\n" +msgstr "%s: falló al buscar el miembro de archivo.\n" + +#: readelf.c:11354 #, c-format msgid "'%s': No such file\n" msgstr "'%s': No hay tal fichero\n" -#: readelf.c:9099 +#: readelf.c:11356 #, c-format msgid "Could not locate '%s'. System error message: %s\n" msgstr "No se puede encontrar '%s'. Mensaje de error del sistema: %s\n" -#: readelf.c:9106 +#: readelf.c:11363 #, c-format msgid "'%s' is not an ordinary file\n" msgstr "'%s' no es un fichero ordinario\n" -#: readelf.c:9113 +#: readelf.c:11376 #, c-format -msgid "Input file '%s' is not readable.\n" -msgstr "El fichero de entrada '%s' no es legible.\n" +msgid "%s: Failed to read file's magic number\n" +msgstr "%s: Falló al leer el número mágico del fichero\n" + +#: readelf.c:11388 +#, c-format +msgid "File %s is not an archive so its index cannot be displayed.\n" +msgstr "El fichero %s no es un archivo por lo cual no se puede mostrar su índice.\n" -#: rename.c:129 +#: rename.c:124 #, c-format msgid "%s: cannot set time: %s" msgstr "%s: no se puede establecer la hora: %s" #. We have to clean up here. -#: rename.c:164 rename.c:202 +#: rename.c:159 rename.c:197 #, c-format -msgid "unable to rename '%s' reason: %s" -msgstr "no se puede renombrar '%s' razón: %s" +msgid "unable to rename '%s'; reason: %s" +msgstr "no se puede renombrar '%s'; razón: %s" -#: rename.c:210 +#: rename.c:205 #, c-format -msgid "unable to copy file '%s' reason: %s" -msgstr "no se puede copiar el fichero '%s' razón: %s" +msgid "unable to copy file '%s'; reason: %s" +msgstr "no se puede copiar el fichero '%s'; razón: %s" -#: resbin.c:132 +#: resbin.c:120 #, c-format msgid "%s: not enough binary data" msgstr "%s: no hay suficientes datos binarios" -#: resbin.c:148 +#: resbin.c:136 msgid "null terminated unicode string" msgstr "cadena unicode terminada en null" -#: resbin.c:175 resbin.c:181 +#: resbin.c:163 resbin.c:169 msgid "resource ID" msgstr "ID de recurso" -#: resbin.c:221 +#: resbin.c:208 msgid "cursor" msgstr "cursor" -#: resbin.c:253 resbin.c:260 +#: resbin.c:239 resbin.c:246 msgid "menu header" msgstr "encabezado de menú" -#: resbin.c:270 +#: resbin.c:255 msgid "menuex header" msgstr "encabezado de menuex" -#: resbin.c:274 +#: resbin.c:259 msgid "menuex offset" msgstr "desplazamiento de menuex" -#: resbin.c:281 +#: resbin.c:264 #, c-format msgid "unsupported menu version %d" -msgstr "versión de menú %d sin soporte" +msgstr "no se admite la versión de menú %d" -#: resbin.c:306 resbin.c:321 resbin.c:384 +#: resbin.c:289 resbin.c:304 resbin.c:366 msgid "menuitem header" msgstr "encabezado de elemento de menú" -#: resbin.c:414 +#: resbin.c:396 msgid "menuitem" msgstr "elemento de menú" -#: resbin.c:453 resbin.c:481 +#: resbin.c:433 resbin.c:461 msgid "dialog header" msgstr "encabezado de diálogo" -#: resbin.c:471 +#: resbin.c:451 #, c-format msgid "unexpected DIALOGEX version %d" msgstr "versión DIALOGEX %d inesperada" -#: resbin.c:516 +#: resbin.c:496 msgid "dialog font point size" msgstr "tamaño de punto de la tipografía del diálogo" -#: resbin.c:524 +#: resbin.c:504 msgid "dialogex font information" msgstr "información de tipografía del dialogex" -#: resbin.c:550 resbin.c:568 +#: resbin.c:530 resbin.c:548 msgid "dialog control" msgstr "control del diálogo" -#: resbin.c:560 +#: resbin.c:540 msgid "dialogex control" msgstr "control del dialogex" -#: resbin.c:589 +#: resbin.c:569 msgid "dialog control end" msgstr "fin del control del diálogo" -#: resbin.c:601 +#: resbin.c:581 msgid "dialog control data" msgstr "datos de control del diálogo" -#: resbin.c:642 +#: resbin.c:621 msgid "stringtable string length" msgstr "longitud de la cadena stringtable" -#: resbin.c:652 +#: resbin.c:631 msgid "stringtable string" msgstr "cadena stringtable" -#: resbin.c:683 +#: resbin.c:661 msgid "fontdir header" msgstr "encabezado fontdir" -#: resbin.c:696 +#: resbin.c:675 msgid "fontdir" msgstr "fontdir" -#: resbin.c:712 +#: resbin.c:692 msgid "fontdir device name" msgstr "nombre de dispositivo fontdir" -#: resbin.c:718 +#: resbin.c:698 msgid "fontdir face name" -msgstr "nombre de rostro fontdir" +msgstr "nombre de familia fontdir" -#: resbin.c:759 +#: resbin.c:738 msgid "accelerator" msgstr "acelerador" -#: resbin.c:819 +#: resbin.c:797 msgid "group cursor header" msgstr "encabezado de grupo de cursores" -#: resbin.c:823 +#: resbin.c:801 resrc.c:1355 #, c-format msgid "unexpected group cursor type %d" msgstr "tipo de grupo de cursores %d inesperado" -#: resbin.c:838 +#: resbin.c:816 msgid "group cursor" msgstr "grupo de cursores" -#: resbin.c:875 +#: resbin.c:852 msgid "group icon header" msgstr "encabezado de grupo de iconos" -#: resbin.c:879 +#: resbin.c:856 resrc.c:1302 #, c-format msgid "unexpected group icon type %d" msgstr "tipo de grupo de iconos %d inesperado" -#: resbin.c:894 +#: resbin.c:871 msgid "group icon" msgstr "grupo de iconos" -#: resbin.c:957 resbin.c:1174 +#: resbin.c:935 resbin.c:1151 msgid "unexpected version string" msgstr "cadena de versión inesperada" -#: resbin.c:989 +#: resbin.c:966 #, c-format msgid "version length %d does not match resource length %lu" msgstr "la longitud de la versión %d no coincide con la longitud del recurso %lu" -#: resbin.c:993 +#: resbin.c:970 #, c-format msgid "unexpected version type %d" msgstr "tipo de versión %d inesperada" -#: resbin.c:1005 +#: resbin.c:982 #, c-format -msgid "unexpected fixed version information length %d" -msgstr "longitud de la información de versión fija %d inesperada" +msgid "unexpected fixed version information length %ld" +msgstr "longitud de la información de versión fija %ld inesperada" -#: resbin.c:1008 +#: resbin.c:985 msgid "fixed version info" msgstr "información de versión fija" -#: resbin.c:1012 +#: resbin.c:989 #, c-format msgid "unexpected fixed version signature %lu" msgstr "firma de versión fija %lu inesperada" -#: resbin.c:1016 +#: resbin.c:993 #, c-format msgid "unexpected fixed version info version %lu" msgstr "información de versión de versión fija %lu inesperada" -#: resbin.c:1045 +#: resbin.c:1022 msgid "version var info" msgstr "información de versión variable" -#: resbin.c:1062 +#: resbin.c:1039 #, c-format -msgid "unexpected stringfileinfo value length %d" -msgstr "longitud del valor stringfileinfo %d inesperada" +msgid "unexpected stringfileinfo value length %ld" +msgstr "longitud del valor stringfileinfo %ld inesperada" -#: resbin.c:1072 +#: resbin.c:1049 #, c-format -msgid "unexpected version stringtable value length %d" -msgstr "valor de longitud de versión stringtable %d inesperada" +msgid "unexpected version stringtable value length %ld" +msgstr "versión de longitud de valor stringtable %ld inesperada" -#: resbin.c:1106 +#: resbin.c:1083 #, c-format -msgid "unexpected version string length %d != %d + %d" -msgstr "longitud de cadena de versión %d != %d + %d inesperada" +msgid "unexpected version string length %ld != %ld + %ld" +msgstr "longitud de cadena de versión %ld != %ld + %ld inesperada" -#: resbin.c:1117 +#: resbin.c:1094 #, c-format -msgid "unexpected version string length %d < %d" -msgstr "longitud de cadena de versión %d < %d inesperada" +msgid "unexpected version string length %ld < %ld" +msgstr "longitud de cadena de versión %ld < %ld inesperada" -#: resbin.c:1134 +#: resbin.c:1111 #, c-format -msgid "unexpected varfileinfo value length %d" -msgstr "longitud de valor varfileinfo %d inesperada" +msgid "unexpected varfileinfo value length %ld" +msgstr "longitud de valor varfileinfo %ld inesperada" -#: resbin.c:1153 +#: resbin.c:1130 msgid "version varfileinfo" msgstr "versión varfileinfo" -#: resbin.c:1168 +#: resbin.c:1145 #, c-format -msgid "unexpected version value length %d" -msgstr "longitud de valor de versión %d inesperada" +msgid "unexpected version value length %ld" +msgstr "longitud de valor de versión %ld inesperada" -#: rescoff.c:126 +#: rescoff.c:124 msgid "filename required for COFF input" msgstr "se requiere un nombre de fichero para la entrada COFF" -#: rescoff.c:143 +#: rescoff.c:141 #, c-format msgid "%s: no resource section" msgstr "%s: no hay sección de recursos" -#: rescoff.c:150 -msgid "can't read resource section" -msgstr "no se puede leer la sección de recursos" - -#: rescoff.c:174 +#: rescoff.c:173 #, c-format msgid "%s: %s: address out of bounds" msgstr "%s: %s: dirección fuera de los límites" @@ -5137,150 +5903,155 @@ msgstr "ID de subdirectorio" msgid "ID resource" msgstr "ID de recurso" -#: rescoff.c:318 +#: rescoff.c:320 msgid "resource type unknown" msgstr "tipo de recurso desconocido" -#: rescoff.c:321 +#: rescoff.c:323 msgid "data entry" msgstr "entrada de datos" -#: rescoff.c:329 +#: rescoff.c:331 msgid "resource data" msgstr "datos de recursos" -#: rescoff.c:334 +#: rescoff.c:336 msgid "resource data size" msgstr "tamaño de datos de recursos" -#: rescoff.c:427 +#: rescoff.c:431 msgid "filename required for COFF output" msgstr "se requiere un nombre de fichero para la salida COFF" -#: rescoff.c:719 +#: rescoff.c:715 msgid "can't get BFD_RELOC_RVA relocation type" msgstr "no se puede obtener el tipo de reubicación BFD_RELOC_RVA" -#: resrc.c:238 resrc.c:309 +#: resrc.c:262 resrc.c:333 #, c-format msgid "can't open temporary file `%s': %s" msgstr "no se puede abrir el fichero temporal `%s': %s" -#: resrc.c:244 +#: resrc.c:268 #, c-format msgid "can't redirect stdout: `%s': %s" msgstr "no se puede redirigir la salida estándar: `%s': %s" -#: resrc.c:260 +#: resrc.c:284 #, c-format msgid "%s %s: %s" msgstr "%s %s: %s" -#: resrc.c:305 +#: resrc.c:329 #, c-format msgid "can't execute `%s': %s" msgstr "no se puede ejecutar `%s': %s" -#: resrc.c:314 +#: resrc.c:338 #, c-format msgid "Using temporary file `%s' to read preprocessor output\n" -msgstr "Utilizando el fichero temporal `%s' para leer la salida del preprocesador\n" +msgstr "Se usa el fichero temporal `%s' para leer la salida del preprocesador\n" -#: resrc.c:321 +#: resrc.c:345 #, c-format msgid "can't popen `%s': %s" msgstr "no se puede hacer popen de `%s': %s" -#: resrc.c:323 +#: resrc.c:347 #, c-format msgid "Using popen to read preprocessor output\n" -msgstr "Utilizando popen para leer la salida del preprocesador\n" +msgstr "Se usa popen para leer la salida del preprocesador\n" -#: resrc.c:362 +#: resrc.c:413 #, c-format msgid "Tried `%s'\n" msgstr "Se intentó `%s'\n" -#: resrc.c:373 +#: resrc.c:424 #, c-format msgid "Using `%s'\n" -msgstr "Utilizando `%s'\n" +msgstr "Se utiliza `%s'\n" -#: resrc.c:529 +#: resrc.c:608 +msgid "preprocessing failed." +msgstr "falló el preprocesamiento." + +#: resrc.c:631 #, c-format msgid "%s:%d: %s\n" msgstr "%s:%d: %s\n" -#: resrc.c:537 +#: resrc.c:639 #, c-format msgid "%s: unexpected EOF" msgstr "%s: fin de fichero inesperado" -#: resrc.c:586 +#: resrc.c:688 #, c-format msgid "%s: read of %lu returned %lu" msgstr "%s: la lectura de %lu devolvió %lu" -#: resrc.c:624 resrc.c:1134 +#: resrc.c:727 resrc.c:1502 #, c-format msgid "stat failed on bitmap file `%s': %s" msgstr "stat falló en el fichero de mapa de bits `%s': %s" -#: resrc.c:675 +#: resrc.c:778 #, c-format msgid "cursor file `%s' does not contain cursor data" msgstr "el fichero de cursor `%s' no contiene datos de cursor" -#: resrc.c:707 resrc.c:1003 +#: resrc.c:810 resrc.c:1210 #, c-format msgid "%s: fseek to %lu failed: %s" msgstr "%s: falló fseek para %lu: %s" -#: resrc.c:831 +#: resrc.c:936 msgid "help ID requires DIALOGEX" msgstr "el ID de ayuda requiere DIALOGEX" -#: resrc.c:833 +#: resrc.c:938 msgid "control data requires DIALOGEX" msgstr "los datos de control requieren DIALOGEX" -#: resrc.c:861 +#: resrc.c:966 #, c-format msgid "stat failed on font file `%s': %s" msgstr "stat falló en el fichero de tipografía `%s': %s" -#: resrc.c:972 +#: resrc.c:1179 #, c-format msgid "icon file `%s' does not contain icon data" msgstr "el fichero de icono `%s' no contiene datos de icono" -#: resrc.c:1273 resrc.c:1308 +#: resrc.c:1724 resrc.c:1759 #, c-format msgid "stat failed on file `%s': %s" msgstr "stat falló en el fichero `%s': %s" -#: resrc.c:1494 +#: resrc.c:1940 #, c-format msgid "can't open `%s' for output: %s" msgstr "no se puede abrir `%s' para salida: %s" -#: size.c:83 +#: size.c:79 #, c-format msgid " Displays the sizes of sections inside binary files\n" msgstr " Muestra los tamaños de las secciones dentro de los ficheros binarios\n" -#: size.c:84 +#: size.c:80 #, c-format msgid " If no input file(s) are specified, a.out is assumed\n" msgstr "Si no se especifica(n) fichero(s) de salida, se asume a.out\n" -#: size.c:85 +#: size.c:81 #, c-format msgid "" " The options are:\n" " -A|-B --format={sysv|berkeley} Select output style (default is %s)\n" " -o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex\n" " -t --totals Display the total sizes (Berkeley only)\n" +" --common Display total size for *COM* syms\n" " --target= Set the binary file format\n" " @ Read options from \n" " -h --help Display this information\n" @@ -5288,34 +6059,36 @@ msgid "" "\n" msgstr "" " Las opciones son:\n" -" -A|-B --format={sysv|berkeley} Selecciona el estilo de salida output\n" +" -A|-B --format={sysv|berkeley} Selecciona el estilo de salida\n" " (por defecto es %s)\n" " -o|-d|-x --radix={8|10|16} Muestra los números en octal, decimal o\n" " hexadecimal\n" " -t --totals Muestra los tamaños totales\n" " (sólo Berkeley)\n" +" --common Muestra el tamaño total de los símbolos\n" +" *COM*\n" " --target= Establece el formato del fichero binario\n" " @ Lee opciones del \n" " -h --help Muestra esta información\n" " -v --version Muestra la versión del programa\n" "\n" -#: size.c:158 +#: size.c:160 #, c-format msgid "invalid argument to --format: %s" msgstr "argumento inválido para --format: %s" -#: size.c:185 +#: size.c:187 #, c-format msgid "Invalid radix: %s\n" msgstr "Radical inválido: %s\n" -#: srconv.c:1722 +#: srconv.c:1731 #, c-format msgid "Convert a COFF object file into a SYSROFF object file\n" msgstr "Convierte un fichero objeto COFF a un fichero objeto SYSROFF\n" -#: srconv.c:1723 +#: srconv.c:1732 #, c-format msgid "" " The options are:\n" @@ -5327,174 +6100,174 @@ msgid "" " -v --version Print the program's version number\n" msgstr "" " Las opciones son:\n" -" -q --quick (Obsoleto - ignorado)\n" +" -q --quick (Obsoleto - se descarta)\n" " -n --noprescan No realizar una revisión para convertir comunes en definiciones\n" " -d --debug Muestra información acerca de lo que se está haciendo\n" " @ Lee opciones del \n" " -h --help Muestra esta información\n" " -v --version Muestra el número de versión del programa\n" -#: srconv.c:1869 +#: srconv.c:1878 #, c-format msgid "unable to open output file %s" msgstr "no se puede abrir el fichero de salida %s" -#: stabs.c:330 stabs.c:1708 +#: stabs.c:328 stabs.c:1726 msgid "numeric overflow" msgstr "desbordamiento numérico" -#: stabs.c:340 +#: stabs.c:338 #, c-format msgid "Bad stab: %s\n" msgstr "Stab erróneo: %s\n" -#: stabs.c:348 +#: stabs.c:346 #, c-format msgid "Warning: %s: %s\n" msgstr "Aviso: %s: %s\n" -#: stabs.c:458 +#: stabs.c:456 #, c-format msgid "N_LBRAC not within function\n" msgstr "N_LBRAC no está dentro de una función\n" -#: stabs.c:497 +#: stabs.c:495 #, c-format msgid "Too many N_RBRACs\n" msgstr "Demasiados N_RBRACs\n" -#: stabs.c:738 +#: stabs.c:736 msgid "unknown C++ encoded name" msgstr "nombre C++ codificado desconocido" #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabs.c:1253 +#: stabs.c:1271 msgid "unrecognized cross reference type" -msgstr "tipo de referencia cruzada no reconocido" +msgstr "no se reconoce el tipo de referencia cruzada" #. 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:1818 msgid "missing index type" -msgstr "tipo de índice desconocido" +msgstr "falta el tipo de índice" -#: stabs.c:2114 +#: stabs.c:2134 msgid "unknown virtual character for baseclass" msgstr "carácter virtual desconocido para la clase base" -#: stabs.c:2132 +#: stabs.c:2152 msgid "unknown visibility character for baseclass" msgstr "carácter de visibilidad desconocido para la clase base" -#: stabs.c:2318 +#: stabs.c:2338 msgid "unnamed $vb type" msgstr "tipo $vb sin nombre" -#: stabs.c:2324 +#: stabs.c:2344 msgid "unrecognized C++ abbreviation" -msgstr "abreviación C++ no reconocida" +msgstr "no se reconoce la abreviación C++" -#: stabs.c:2400 +#: stabs.c:2420 msgid "unknown visibility character for field" msgstr "carácter de visibilidad desconocido para el campo" -#: stabs.c:2652 +#: stabs.c:2672 msgid "const/volatile indicator missing" msgstr "falta el indicador const/volatile" -#: stabs.c:2888 +#: stabs.c:2908 #, c-format msgid "No mangling for \"%s\"\n" msgstr "No hay desenredo para \"%s\"\n" -#: stabs.c:3188 +#: stabs.c:3208 msgid "Undefined N_EXCL" -msgstr "N_EXCL indefinido" +msgstr "N_EXCL sin definir" -#: stabs.c:3268 +#: stabs.c:3288 #, c-format msgid "Type file number %d out of range\n" msgstr "Número de tipo de fichero %d fuera de rango\n" -#: stabs.c:3273 +#: stabs.c:3293 #, c-format msgid "Type index number %d out of range\n" msgstr "Número de tipo de índice %d fuera de rango\n" -#: stabs.c:3352 +#: stabs.c:3372 #, c-format msgid "Unrecognized XCOFF type %d\n" -msgstr "Tipo XCOFF %d no reconocido\n" +msgstr "No se reconoce el tipo XCOFF %d\n" -#: stabs.c:3644 +#: stabs.c:3664 #, c-format msgid "bad mangled name `%s'\n" msgstr "nombre desenredado erróneamente `%s'\n" -#: stabs.c:3739 +#: stabs.c:3759 #, c-format msgid "no argument types in mangled string\n" msgstr "no hay tipos de argumento en la cadena desenredada\n" -#: stabs.c:5093 +#: stabs.c:5113 #, c-format msgid "Demangled name is not a function\n" msgstr "El nombres desenredado no es una función\n" -#: stabs.c:5135 +#: stabs.c:5155 #, c-format msgid "Unexpected type in v3 arglist demangling\n" msgstr "Tipo inesperado en la lista de argumentos de desenredo v3\n" -#: stabs.c:5202 +#: stabs.c:5222 #, c-format msgid "Unrecognized demangle component %d\n" -msgstr "Componente de desenredo %d no reconocido\n" +msgstr "No se reconoce el componente de desenredo %d\n" -#: stabs.c:5254 +#: stabs.c:5274 #, c-format msgid "Failed to print demangled template\n" msgstr "Falló al mostrar la plantilla desenredada\n" -#: stabs.c:5334 +#: stabs.c:5354 #, c-format msgid "Couldn't get demangled builtin type\n" msgstr "No se puede obtener el tipo interno desenredado\n" -#: stabs.c:5383 +#: stabs.c:5403 #, c-format msgid "Unexpected demangled varargs\n" msgstr "varargs desenredados inesperados\n" -#: stabs.c:5390 +#: stabs.c:5410 #, c-format msgid "Unrecognized demangled builtin type\n" -msgstr "Tipo interno desenredado no reconocido\n" - -#: strings.c:218 -#, c-format -msgid "invalid number %s" -msgstr "número %s inválido" +msgstr "No se reconoce el tipo interno desenredado\n" -#: strings.c:700 +#: strings.c:201 strings.c:260 #, c-format msgid "invalid integer argument %s" msgstr "argumento entero %s inválido" -#: strings.c:709 +#: strings.c:263 +#, c-format +msgid "invalid minimum string length %d" +msgstr "longitud de cadena mínima %d inválida" + +#: strings.c:660 #, c-format msgid " Display printable strings in [file(s)] (stdin by default)\n" msgstr " Muestra las cadenas imprimibles en [fichero(s)] (por defecto entrada estándar)\n" -#: strings.c:710 +#: strings.c:661 #, c-format msgid "" " The options are:\n" " -a - --all Scan the entire file, not just the data section\n" " -f --print-file-name Print the name of the file before each string\n" " -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n" -" - least [number] characters (default 4).\n" +" - least [number] characters (default 4).\n" " -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n" " -o An alias for --radix=o\n" " -T --target= Specify the binary file format\n" @@ -5502,29 +6275,30 @@ msgid "" " s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" " @ Read options from \n" " -h --help Display this information\n" -" -v --version Print the program's version number\n" +" -v -V --version Print the program's version number\n" msgstr "" " Las opciones son:\n" " -a - --all Revisa el fichero completo, no sólo la sección de\n" -" datos\n" +" datos\n" " -f --print-file-name Muestra el nombre de fichero antes de cada cadena\n" -" -n --bytes=[número] Localiza e imprime cualquier secuencia terminada en\n" -" - NUL de por lo menos [número] caracteres (4 por defecto).\n" -" -t --radix={o,x,d} Muestra la ubicación de la cadena en base 8, 10 ó 16\n" +" -n --bytes=[número] Localiza y muestra cualquier secuencia terminada en\n" +" - NUL de por lo menos [número] caracteres\n" +" (4 por defecto).\n" +" -t --radix={o,d,x} Muestra la ubicación de la cadena en base 8, 10 ó 16\n" " -o Un alias para --radix=o\n" " -T --target= Especifica el formato de fichero binario\n" -" -e --encoding={s,S,b,l,B,L} Selecciona el tamaño del carácter y la \"endianez\":\n" +" -e --encoding={s,S,b,l,B,L} Selecciona tamaño del carácter y \"endianez\":\n" " s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" " @ Lee opciones del fichero\n" " -h --help Muestra esta información\n" -" -v --version Muestra el número de versión del programa\n" +" -v -V --version Muestra el número de versión del programa\n" -#: sysdump.c:642 +#: sysdump.c:647 #, c-format msgid "Print a human readable interpretation of a SYSROFF object file\n" msgstr "Muestra una interpretación legible por humanos de un fichero objeto SYSROFF\n" -#: sysdump.c:643 +#: sysdump.c:648 #, c-format msgid "" " The options are:\n" @@ -5535,72 +6309,168 @@ msgstr "" " -h --help Muestra esta información\n" " -v --version Muestra el número de versión del programa\n" -#: sysdump.c:710 +#: sysdump.c:715 #, c-format msgid "cannot open input file %s" msgstr "no se puede abrir el fichero de entrada %s" #: version.c:35 #, c-format -msgid "Copyright 2005 Free Software Foundation, Inc.\n" -msgstr "Copyright 2005 Free Software Foundation, Inc.\n" +msgid "Copyright 2009 Free Software Foundation, Inc.\n" +msgstr "Copyright 2009 Free Software Foundation, Inc.\n" #: version.c:36 #, 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" +"the GNU General Public License version 3 or (at your option) any later version.\n" +"This program has absolutely no warranty.\n" msgstr "" "Este programa es software libre; se puede redistribuir bajo los términos de\n" -"la Licencia Pública General de GNU. Este programa no tiene ninguna garantía.\n" +"la Licencia Pública General de GNU versión 3 o (a su criterio) cualquier\n" +"versión posterior.\n" +"\n" +"Este programa no tiene ninguna garantía.\n" + +#: windmc.c:195 +#, c-format +msgid "can't create %s file ,%s' for output.\n" +msgstr "no se puede abrir el fichero %s ,%s' para salida.\n" + +#: windmc.c:203 +#, c-format +msgid "Usage: %s [option(s)] [input-file]\n" +msgstr "Modo de empleo: %s [opcion(es)] [fichero-entrada]\n" + +#: windmc.c:205 +#, c-format +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= Set codepage when reading mc text file\n" +" -d --decimal_values Print values to text files decimal\n" +" -e --extension= Set header extension used on export header file\n" +" -F --target Specify output target for endianess.\n" +" -h --headerdir= 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= 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= Set codepage used for writing text file\n" +" -r --rcdir= Set the export directory for rc files\n" +" -x --xdbg= Where to create the .dbg C include file\n" +" that maps message ID's to their symbolic name.\n" +msgstr "" +"Las opciones son:\n" +" -a --ascii_in Lee el fichero de entrada como fichero ASCII\n" +" -A --ascii_out Escribe los mensajes binarios como ASCII\n" +" -b --binprefix Se agrega al nombre de fichero .bin el prefijo fichero_ .mc para singularidad.\n" +" -c --customflag Define las opciones particulares para los mensajes\n" +" -C --codepage_in= Define el código de página para leer el fichero de texto mc\n" +" -d --decimal_values Guarda los valores a ficheros de textos decimales\n" +" -e --extension= Establece la extensión del encabezado a usar en la exportación del fichero de encabezado\n" +" -F --target Especifica el objetivo de salida por `endianez'\n" +" -h --headerdir= Define el directorio de exportación para encabezados\n" +" -u --unicode_in Lee el fichero de entrada como un fichero UTF16\n" +" -U --unicode_out Escribe los mensajes binarios como UTF16\n" +" -m --maxlength= Define la longitud de mensaje máxima permitida\n" +" -n --nullterminate Agrega automáticamente una terminación cero a las cadenas\n" +" -o --hresult_use Usa la definición HRESULT en lugar de la definición del código de estado\n" +" -O --codepage_out= Define el código de página a usar para escribir el fichero de texto\n" +" -r --rcdir= Define el directorio de exportación para los ficheros rc\n" +" -x --xdbg= Dónde crear el fichero de inclusión C .dbg\n" +" que mapea los ID's de los mensajes a su nombre simbólico.\n" + +#: windmc.c:225 +#, 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 "" +" -H --help Muestra este mensaje de ayuda\n" +" -v --verbose Detalle - dice lo que está haciendo\n" +" -V --version Muestra la información de versión\n" -#: windres.c:204 +#: windmc.c:296 windres.c:415 +#, c-format +msgid "%s: warning: " +msgstr "%s: aviso: " + +#: windmc.c:297 +#, c-format +msgid "A codepage was specified switch ,%s' and UTF16.\n" +msgstr "Se especificó un código de página con la opción ,%s' y UTF16.\n" + +#: windmc.c:298 +#, c-format +msgid "\tcodepage settings are ignored.\n" +msgstr "\tse descartan las opciones de código de página.\n" + +#: windmc.c:342 +msgid "try to add a ill language." +msgstr "se trató de agregar un lenguaje erróneo." + +#: windmc.c:1151 +#, c-format +msgid "unable to open file ,%s' for input.\n" +msgstr "no se puede abrir el fichero ,%s' para salida.\n" + +#: windmc.c:1159 +#, c-format +msgid "unable to read contents of %s" +msgstr "no se puede leer el contenido de %s" + +#: windmc.c:1171 +msgid "input file does not seems to be UFT16.\n" +msgstr "el fichero de entrada no parece ser UTF16.\n" + +#: windres.c:220 #, c-format msgid "can't open %s `%s': %s" msgstr "no se puede abrir %s `%s': %s" -#: windres.c:370 +#: windres.c:394 #, c-format msgid ": expected to be a directory\n" msgstr ": se esperaba que fuera un directorio\n" -#: windres.c:382 +#: windres.c:406 #, c-format msgid ": expected to be a leaf\n" msgstr ": se esperaba que fuera una hoja\n" -#: windres.c:391 -#, c-format -msgid "%s: warning: " -msgstr "%s: aviso: " - -#: windres.c:393 +#: windres.c:417 #, c-format msgid ": duplicate value\n" msgstr ": valor duplicado\n" -#: windres.c:543 +#: windres.c:567 #, c-format msgid "unknown format type `%s'" msgstr "tipo de formato `%s' desconocido" -#: windres.c:544 +#: windres.c:568 #, c-format msgid "%s: supported formats:" -msgstr "%s: formatos con soporte:" +msgstr "%s: formatos admitidos:" #. 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 "no se puede determinar el tipo del fichero `%s'; use la opción -J" -#: windres.c:639 +#: windres.c:663 #, c-format msgid "Usage: %s [option(s)] [input-file] [output-file]\n" msgstr "Modo de empleo: %s [opcion(es)] [fichero-entrada] [fichero-salida]\n" -#: windres.c:641 +#: windres.c:665 #, c-format msgid "" " The options are:\n" @@ -5614,6 +6484,7 @@ msgid "" " -D --define [=] Define SYM when preprocessing rc file\n" " -U --undefine Undefine SYM when preprocessing rc file\n" " -v --verbose Verbose - tells you what it's doing\n" +" -c --codepage= Specify default codepage\n" " -l --language= Set language when reading rc file\n" " --use-temp-file Use a temporary file instead of popen to read\n" " the preprocessor output\n" @@ -5630,17 +6501,18 @@ msgstr "" " -D --define [=val] Define un SIMbolo al preprocesar el fichero rc\n" " -U --undefine No define el SIMbolo al preprocesar el fichero rc\n" " -v --verbose Detallado - dice lo que está haciendo\n" +" -c --codepage= Establece el código de página por defecto\n" " -l --language= Establece el lenguaje al leer el fichero rc\n" " --use-temp-file Usa un fichero temporal en lugar de popen para\n" " leer la salida del preprocesador\n" " --no-use-temp-file Usa popen (por defecto)\n" -#: windres.c:657 +#: windres.c:682 #, c-format msgid " --yydebug Turn on parser debugging\n" msgstr " --yydebug Activa el decodificador de depuración\n" -#: windres.c:660 +#: windres.c:685 #, c-format msgid "" " -r Ignored for compatibility with rc\n" @@ -5649,12 +6521,12 @@ msgid "" " -V --version Print version information\n" msgstr "" " Las opciones son:\n" -" -r Se ignora por compatibilidad con rc\n" +" -r Se descarta por compatibilidad con rc\n" " @ Lee opciones del \n" " -h --help Muestra este mensaje de ayuda\n" " -V --version Muestra la información de versión\n" -#: 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" @@ -5666,38 +6538,144 @@ msgstr "" "entrada. Sin fichero de entrada es la entrada estándar, por defecto rc.\n" "Sin fichero de salida es la salida estándar, por defecto rc.\n" -#: windres.c:803 +#: windres.c:848 +msgid "invalid codepage specified.\n" +msgstr "se especificó un código de página inválido\n" + +#: windres.c:863 msgid "invalid option -f\n" msgstr "opción -f inválida\n" -#: windres.c:808 +#: windres.c:868 msgid "No filename following the -fo option.\n" msgstr "No hay un nombre de fichero a continuación de la opción -fo.\n" -#: windres.c:866 +#: windres.c:927 #, c-format msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" msgstr "La opción -I es obsoleta para establecer el formato de salida, por favor use -J en su lugar.\n" -#: windres.c:984 +#: windres.c:1037 msgid "no resources" msgstr "no hay recursos" -#: wrstabs.c:354 wrstabs.c:1915 +#: wrstabs.c:353 wrstabs.c:1916 #, c-format msgid "string_hash_lookup failed: %s" msgstr "string_hash_lookup falló: %s" -#: wrstabs.c:635 +#: wrstabs.c:636 #, c-format msgid "stab_int_type: bad size %u" -msgstr "stab_int_type: tipo %u erróneo" +msgstr "stab_int_type: tamaño %u erróneo" -#: wrstabs.c:1393 +#: wrstabs.c:1394 #, c-format msgid "%s: warning: unknown size for field `%s' in struct" msgstr "%s: aviso: tamaño desconocido para el campo `%s' en la estructura" +#~ msgid "" +#~ "The section %s contains:\n" +#~ "\n" +#~ msgstr "" +#~ "La sección %s contiene:\n" +#~ "\n" + +#~ msgid "Range lists in .debug_info section aren't in ascending order!\n" +#~ msgstr "¡Las listas de rango en la sección .debug_info no están en orden ascendente!\n" + +#~ msgid "The section %s contains:\n" +#~ msgstr "La sección %s contiene:\n" + +#~ msgid "%s: failed to read archive header following long symbol names\n" +#~ msgstr "%s: falló al leer el encabezado del archivo a continuación de los nombres de símbolo long\n" + +#~ msgid "%s: failed to read file name\n" +#~ msgstr "%s: Falló al leer el nombre del fichero\n" + +#~ msgid "%s: invalid archive string table offset %lu\n" +#~ msgstr "%s: desplazamiento de tabla de cadenas de archivo %lu inválido\n" + +#~ msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" +#~ msgstr "Sólo se admite actualmente la información de depuración DWARF versión 2 y 3.\n" + +#~ msgid "Unable to locate entry %lu in the abbreviation table\n" +#~ msgstr "No se puede localizar la entrada %lu en la tabla de abreviaciones\n" + +#~ msgid " %8.8lx %8.8lx %8.8lx (base address)\n" +#~ msgstr " %8.8lx %8.8lx %8.8lx (dirección base)\n" + +#~ msgid "set .nlmsections flags" +#~ msgstr "establecer opciones .nlmsections" + +#~ msgid "can't add section '%s' - it already exists!" +#~ msgstr "no se puede agregar la sección '%s' - ¡!" + +#~ msgid "%s: error in %s: %s" +#~ msgstr "%s: error en %s: %s" + +#~ msgid "making" +#~ msgstr "haciendo" + +#~ msgid "size" +#~ msgstr "tamaño" + +#~ msgid "vma" +#~ msgstr "vma" + +#~ msgid "alignment" +#~ msgstr "alineación" + +#~ msgid "private data" +#~ msgstr "datos privados" + +#~ msgid "%s: section `%s': error in %s: %s" +#~ msgstr "%s: sección `%s': error en %s: %s" + +#~ msgid "invalid section [%5u] in group section [%5u]\n" +#~ msgstr "sección inválida [%5u] en la sección de grupo [%5u]\n" + +#~ msgid " Offset: %#08lx Link to section: %ld (%s)\n" +#~ msgstr " Despl: %#08lx Enlace a sección: %ld (%s)\n" + +#~ msgid "skipping relocation of unknown size against offset 0x%lx in section %s\n" +#~ msgstr "saltando la reubicación de tamaño desconocido contra el desplazamiento 0x%lx en la sección %s\n" + +#~ msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n" +#~ msgstr "saltando el tipo de símbolo %s inesperado en la reubicación en la sección .rela.%s\n" + +#~ msgid "invalid number %s" +#~ msgstr "número %s inválido" + +#~ msgid "stat returns negative size for %s" +#~ msgstr "stat devuelve un valor negativo para %s" + +#~ msgid "%s section has more comp units than .debug_info section\n" +#~ msgstr "la sección %s tiene más unidades de compilación que la sección .debug_info\n" + +#~ msgid "" +#~ "assuming that the pointer size is %d, from the last comp unit in .debug_info\n" +#~ "\n" +#~ msgstr "asumiendo que el tamaño del puntero es %d, de la última unidad de compilación en .debug_info\n" + +#~ msgid " (Pointer size: %u)%s\n" +#~ msgstr " (Tamaño del puntero: %u)%s\n" + +#~ msgid "Extend line ops need a valid pointer size, guessing at 4\n" +#~ msgstr "Los operadores de linea extendida necesitan un tamaño de puntero válido, adivinando en 4\n" + +#~ msgid "unsupported or unknown DW_CFA_%d\n" +#~ msgstr "DW_CFA_%d desconocido o no admitido\n" + +#~ msgid "there are no sections to be copied!" +#~ msgstr "¡no hay secciones para copiar!" + +#~ msgid "Out of memory" +#~ msgstr "Memoria agotada" + +#~ msgid "can't read resource section" +#~ msgstr "no se puede leer la sección de recursos" + #~ msgid "flags" #~ msgstr "opciones" @@ -5826,13 +6804,6 @@ msgstr "%s: aviso: tama #~ msgid "64-bit DWARF format frames are not supported yet.\n" #~ msgstr "Los marcos de formato de DWARF 64-bit aú no tienen soporte.\n" -#~ msgid "" -#~ " -h --help Print this help message\n" -#~ " -V --version Print version information\n" -#~ msgstr "" -#~ " -h --help Muestra este mensaje de ayuda\n" -#~ " -V --version Muestra la información de versión\n" - #~ msgid "" #~ "Usage: %s [-CfsHV] [-b bfdname] [--target=bfdname]\n" #~ " [-e executable] [--exe=executable] [--demangle[=style]]\n" @@ -5861,9 +6832,6 @@ msgstr "%s: aviso: tama #~ msgid "Usage: %s OPTION... FILE...\n" #~ msgstr "Modo de empleo: %s OPCIÓN... FICHERO...\n" -#~ msgid " Options are:\n" -#~ msgstr " Las opciones son:\n" - #~ msgid " -a or --all Equivalent to: -h -l -S -s -r -d -V -A -I\n" #~ msgstr " -a ó --all Equivalente a: -h -l -S -s -r -d -V -A -I\n" diff --git a/binutils/po/id.gmo b/binutils/po/id.gmo new file mode 100644 index 0000000000000000000000000000000000000000..b3ae2d2eea1826fe28b89d3475b1595c6cef8f1c GIT binary patch literal 146604 zcmdp<2Y4LC{r6AC#swQ}x+!L{5iaQDimPN>F0ut~Sh6X?*eB^EAC`3DPO>F12_bX{ zy@eh+q1R9odP46lgkA!nL+I`Od}n6&_D(0`{LA}3&wJ0a`s}pdwBMASnO(iQY4_72 z{3^RgBHO{621g(z0(P;=u#p=I~^=HM|TCf_FoLL|%itz;4STksV+$ z+zKv$17JPe8Mec1;Q4SPcsrDw2cZYwfeN?be%3q)$~+AYg?qwY@Yhi3I0}}+KS0TQ z4fcc|!2a+HxIOH?+{Ql`dYCKVFt|V54xR$1!0X_6_#spg3|SG0YylIn5BxRU79Io3 z;iYgg{0NSQ!(x$05!?qB!y}>6bqm}W-U~N{PeGOE+i(c{)^YoqNTd*R8B}>TK$YJq zP~k3tgW#=jID7#Pgax%WKifi;?<_b5E{CJw$x!LK4=UfELdhRkXXBd<<-Q8a{!FOy zyC14No`cF?-*_Z47EXmqR|?LChrufNFjV>MP#=l(gHzy4SOI6i-@!8YBvid^+F-*k zf_q^;9ZLQua3UPC($>qqQ006kl>IYM^7|$tk-gzIkfMmRLgoJjI0AkSH-y{oZ}n&= zSc16(DxMC4{R$|5zlW;72OPhGO3%=wZ4diE$vG4bhIc^ue-$bn zo3unCbKxAg8$1yzzL%lgw>W@2!ue3^E-jPu0eE<%J8?UzZ6QSZ=4L5~1JN^wS zo|oZRxY?RWWJ@>)s@?Agr^B^S<#ZR^0)FM#x1BJU2Se%2cxT=N?u0oGw}Qt&>Gg$h zbNFW{|Ia|B=VQ1DEaiH&@*mgY`_QAduD!t86FbsH&Eq$HdMH4q2hTEO5fjyL*N#d+kScyl>0u82g6~QFMu1thn)R$(8K%ur)r;{^aaDo(ZLQ ze}vMbIS@z;*mL&f_R+!bzpt!*z0;J%nofV;sDq0%+s zI$ORg;Ley2gDSr(;ZXRTbN>;Jz`W!2HvV~z?NIr-7)sv#a3uW5nYX{e$}NY**f+tx z@EoXd;lKTu)dfs>TJKSdb?LDE& z;|wT&_rp=}?{F8m(e1VzCqVVntDyW}4yVB9pz=H54%@!Vq3Uf9sQmo~s@zV2ivJy` z`rr0W>#rR4$GjTu2akj*k9VQc{}EI>Exe1i2v@>M@FpnxkKxt?82x8kkGtJ(>+M*m za=aOC3Lk>AyG0`ZfSbd?e?|TVTn{mC>=B71AB{xLqafR#qAc;h)l29W?#ICe^uNPj zVa$T{~ykXnZvNvtJ?10ku6XEvoR=5#-9;$rbgsPu!9Q(ax^=2^a zgZ&~X_i8utush}};0Ev-XTAZdoc{#3gbzXK!Rv4v_%FCM?D4kcAUF{71h@&@ z19pcosPxuD4;}`0gqJ|2|F2N(^BJi8eF2r9ZQrr&bu=7{c^{~HJ0A9f4??BmS*UvW z1WIqay=%w89iiMO!9rN&><@&~F`o>#gU`Uh@KZP$ZuU>xUKc>6^LJ3~_FAZXyb4Fd zAK-LY{GQdjBvd?SLG?3tL#5|^C_U`;zOB!JP5kBw=@W98`Ip1XX|6 zLba=Vq3Zv6sQi2grB6LSw)(S`<3!jS`@NyuYhgc_h8x4*IP-~6{?3CH@Ny`*pF_pp z?-LvUE>PyFQ02KV+!(e&)z4v2dU8743f=~l-lyP3@ExddpFzp*^Qp~8Aym4iI95Q( z-P4)t;U<_{;V5_*R5{%Ym7b@e!hZ^tj-Q-+|Ie&`M4{4E;n)b}{{$#KIv4H^Z-7eI zPf&U~@N+xvO@q>}dZ_dt3l;yxQ2D$EN>5*c{oxmIHtha|&G&Aw7v`mKXSf_H{1H(4 zdl8h}zd*@*5pD)Qh00&|f7||lFdTzEJsP~rXp<^KgZ9)1anVbPbC)o?WC zW1#YLCscahfRgh$l-~FK%BE`wls-&@Tfn0o&v(4p@ew!`_cx&W1Mh2_pBZo|=4!YP zyaA4c{l2m7rxZ%>mpQJ53V$}-8r}tGz~|v)IPhDm2UTzv%yqCYJP|5C=R&prd*PPw zUvK~{_|E#<3=YTa!Oh`rQ2v&~r{QX-`lFV*5 zHIIM`Fz*4U!V93nzXoT)PoTOQHJT!=S=l4OPECK&4~TNP(%BLbyHVS&lXE zZohd68XefR8gEQX>RUS_|`}d*bL^duk?PUa1xhCKccp8-4+o1INQ8)^|4kdrUCbs;B zJ1&P4us;nd{9{n#{AW;l@&iMHra=iko-8~0)fZsud-)2jz z?=zwFaepZH3!uW^?aZ%1<@0B#_B3)U8{c%OdfX4He2#+BgNvZ*={6`mcnYc>-h z`$45Q38f#WLG>$-LHYXzO5RS}7nt>gYFLc}{k;TL z9$!Ka4)Sb1ra{SH4JH35sCqjeO5TG|?dcuo{xej0Z@HuOKNZT~5~%oEq4eeqsB*pv zD&9w-^y5pY^4(^z)!*q*{#Qfk(Xq~aEmXYsLsJg00`upv7c3cK+wE-VVeWuR$60Vk zcpFr?ybPs3J$JJ4O@eBVNoT$gs$O1%8^X7t`sELx+WEjjTR+2KKg?sH+Ep2p+ykKE zy9laW9&r2!%HI|{+xTWf=~FvYx~_vB{0EerAEEL;a;PoGN+^G;q3Yv8DEEh;^#3C$ zz1wP-wJ(P%@BN|l^%$u1-waiL_e1I1i%|9a0aSjv4YzvNAF8}}guUSusCt8cM$&f|CC=^x%ME+n30;Wz9%`(foexfpz3u$ z$7ZPbeg!4>B&d8{3YDI_pz{AHRC+#e_64JCxc*RjI|Qn|FNBJ}6{Iwc!Us^*6&{ zIa~o%?w2|Dd!gce3M$`kK;^H;c$?nAQ1-K+%6%nNd9^|1^AspOyVRNQhSG~?96yI@ zUjrss|AkQHJ`qaZbXW%GL#6KosPXuDsBwD0M4R6EQ0;CdoCr^b(yK=tKZQ!y7L#nd z8w*w5`$FmOuN+T-O7G=R<$5nvdS8ZWr{6)vGkCJ?x936iM{A+_r;DKCxeuz`-+#&fU2JZq0)N{RD2gX z``e-N_b^ntUW4-YBa~ilS!%-%hDy&EsBvK*sC*p`70*>r`MV2B{wq-O{_VKwRI3-G zpxWttXHG+fI}xh9uY)Sjr=jZoGpKlbOta+`b({v(5AFd~k4?^eGMtY28Yq4L1S%gr zrdxd(0F}Q%&O8CieHK(XErKe~6;SQ{ASgY%4yv5)a(vqHpN>C3qo-xIJPM)AY^eH6LJyt=RUUUh)#I~J>39dK9Qu{Jc?(p1j)k({11f)wQ0@H? zsPaA+YW{X3RKA~w^8XrCKk^+^d5@W6^>iv!J1B?JgT0`}rFN)tx(x0LABWP5?sKi2 zAyDN}4QImRq4eQtsQUUCDqY{hd2s6r+fT%y!pcY_Xe7*IcOZRZ#s?3@UxC z(1S<7QSdUT`g;)$gFSY)h%X0;(PS6RN&OSK9h&fJ*22a4dWa?hd!AvgKC`)lZ%bRWJ9$Iq)M` z4tHH*<*kL2G2Z}7fvV3BpwcsZnR~8<(=ne7r@?9xYPp9PLFsQk1-)#o*EAbcCDU-=16hug($zLr6a zBd5bH;MGw5&3#bq`~_$J0;=EZS!4Ak3gtc?8`$d1CqT8A3!&QQ4N&ns4ST@% z9Y29PV*V1U9c@)x5P1;JhU4gO`_@tJC~8@}Ao3XjFJ4;^IR~D8XhG!q4e2M3Dlq$2 z?;Kwc`HFBAC)jpB{Y0ymO;G*J=}_so2zu~7=l(WSy!}qH{-;1aU(`Y6Hwo3ho(82) z=fSD)9w@z!oNVO{hw{H0)cDl`)gBLrivJYY6J7un-{nyC@;uad@F`UJ6r5t`7hA(! zFqb&gNQge(eybd^`<@z{nXkzMY_laW^P^TLqQgqoK;>DyaDGfgXGd zc8A^1wDr>)%Kvbvb~6tu9Y;dx<#kZ?ct2FTd>d-q*#7sHBcc42LB+oWD&91dz8(dO z;Kfk=*HexgoMp|sLiIxpQ0?b@sCM`qtb+s3w(HBkf=bu3Q04U_RDBIS$I7pSD)&R6 z#*3Sv`ro&q{B3fsd7)8=>msTDUhXIN$1L zHB|o2f{O1^sPXX|sQ$sb!1iDJK;`c;sCYkss?V+eVEvUq$zKhnuYZG*_a;>SH@?u0 zs}rE=Yb8{@TmTEg+nj5a$BJE;vA@QcoNFr8?YCg zd4-iT4^GE?7~CB`099`T{%GrccUV9H9uF(AKk+)-{@#Yt|325-bPR%vyD_f8ZQyTj zWW3pce(Yw(LHf~mZl#|h;$8n-5NRgd%m)i1pW=Q4tSg`%AEv*Cy&k2U2*2@T1(7T8 zx6>0=A0CHlSMNd9SNA8aJ`abgmkOx#EP-l=38?!16;%Im8dQIKAC$kxq2#;?<*(;c zwtpA|NmgWtGY^F-zalsomO|;n3aI(t{!ru5k#I+NAyj{GKh*R3o3K0l%(;IBRqtCr zZR>d!RQeBqYL^E?^`{p@rR!lR{eJ^$e$nR{t9PYP=~@jnk3JGAUzbA3za1*Q??Sb+ z-p|^3OB8yT_k|i?4u;Cdolx!eB{&lnJZJT3HkAGGa2&h^s@y(+(v$wrTRqtg%Kdjx z`h73d{Pzo}_y@mW+f_MKc`b$NuMU9fm;M0NKJI~v?**v({@J;2`=afaraDiM|wgYZzUrXr z=RjvZ4XS*vgz9hZhD!g_Q04eUi)&`zwcP&nc*J`}a`t z?t`l5e?sYNpSNu~hQpbd_l9bh=R(Ev52*6`1giXcykpG+q4aGelpd^x(%VbmSojK5 zzc=7rD`y&1c`b&jpA_`qF;Mz&B~(0LL5+`n|7p#IQ06IcI;?`q*J)6Cawn{VFTh$@ z@}AAl1yK2Y5_<68Q2E~CeaneZRS+D!-$k z%H=XBy}tvh{2zwWudf{YeL#8(7*F76?5BNboT=tP=GgQ21 z!|CursQ7w*Z08qSLiGdN!wp~xs(e;MrSl}Hc61$7xCfx-8P7uL)!R^d`4d#U-Y2#{ zoe#%gJ{0Z&Z-(lJdVXrlX%3Vg>;t90e}D@AFjT(2hDz7YpV{;r1XV7lL)FLCP6&N{y&BCx6v0?4~n7kH3ur)HBj}p7OFkn0B6HDo%^tVTfLY8)vsR)XTZmy z>UqGIwj6eXDxYys@++X)a~)K;W1t6bfU2iwoVnmD8}DGK@>>k0cdgERCX}At4wcUr z9lwF{xAoVy|0sd-w-;1>t%ge9X;9^QIaELM6kHBJf{Wn%Z)|^b9@M2R z1JzzWf*LnB|JK&$B*#Xm_|At)-=CfRt5D@S;5(~dbD-*Z0o1(nG^q4G4pm+sLiLM1 zzqkA61EKnZ-$0G;w?XN}^Kcy8;0HTjoe1T=+VK>)6!Ue^$otXuCj+76&4*Lq;cyzf z2de)l_{sKL^I%WR$3p4%DNyOW2&z2pfvTsMq1w}ra55bBvt19Vg+`B{>iJEmaQ!3Q zOu3G5oC#Gw`$Fk+5~^Q20xG`qpz?VqoC`mL>K7&#bTjo{52bI%K=pg)L;1fMO3uHa z^4YChH zK;^$rPs{O8^US-a z`&m%+aXVCgUV=*BSI)d`-)=_VCPMk&2ddp42vrZ~LAC4qq0;?2RC;>#v+<3EO8-*W z0)Or7KXu$}<8G!sj)w}DgeCASsCZt0((mt~^nUy%Hs5gQCb^0^YK|9k_M z!J++a{t{62eiT%_JPD;Q-3Hirw}cg#%b?2rSU3jW0o6`FhI_!`O|APOPeZ_bu;st`B3GvH|!7FU{81iRQ$(7>BWUm`u&jOYf$z0C6s<|%*zU@za63K zeHK(bHai{%CFhUM{1jBWK7p#=?RhAi4ojfw@nEQWJ{L-V?}Z-x%DHc~r8Q50Du=zG z!W|3M4z7gi4_|<4zumX8@$UdtzU5H$*A7*$=fJ7(uTXln;nr5p5GeCPsPb!sl6Nv( z0LjzQ~91Yd4Uj<9yJ8&i(!o#%E-vHGwoCW*9C*X$g?@;-9 z1NMXcw(Vx-OWVRtFb{)j*At=iD+N{lmqV5B(~gnttX>pD^*j4P^#f-?>BG}dhUFv!Z?4J!Tvq4IqlRQRW%{QUscZw}qT>eYCt{&_bj zJz5Txzji1+JOZkpI|KHH*Fv?U+o0lk5=!2No|Ur&lz9YH`A>4(8>+o_K&Af{sQP;k zO8y2r+W5DHO7}P@y;us>UmWOoAyhkg7^+>p3zeS8V4Kgap!$(AsPyj-m7as3^y3&P z|0lx%@CxUC2iyqr!%*$$d8qup4<+XdsB-B(#OmRuP;y5?rEjXUuZK$4Z=v#aE>wDN zhN_3BpxV**P~|alC!6m^DEq^q!rum!|7W1;`D-Y>A6977y#Px73aD~yhtuFGQ2BfY zs$O4)O8=)&^;@vB&F40bJ45Ab4D1W1!(MPclwL1&_VrNZl7@=!2&ne>2j~80=wW^Y zD!(5>#oKGBP47Uc{&E+nc2o`3uN?`M&$FTWrN6*t_%4*cCBtmGe*=p#p9R$)Jp@(m zAHyx+mcwm4MNr|ULbcodVL3bis$6b`>JRURD*$3b>A7PpD2dX(>^!z}me&`&ie(3K|dN`=a z*2@T}dYK3%Z#GmqmO{zhAF7@Yb@pdK`MVNIzwd-f@8eMV`YN0ZKZ5h%u&7N}8vL#6u%sB~^V z($-TUR6dKK%6$@4f4T~)KfVO2-~Kz4zHBziregxEz+C6d*Ffpn%TW5X(P-Q6jd5HC zrJqMZrTbzieYyv#zk1hk!!foW+1YU+l-zcxe)Mvv{5%5{?n|h8*Y^cRC#VX&gOd>RQe8pD(~Mxwa*)&%IzMC5d<>3ISwecwanYs7e4FH4|@xgM(DI1;M7E`UnkT~P791eMNj zpz=Ftf( zL)G*5Q0;2)B-?LCp~`InRR1s=PJz`>V^_zj= zvu@1G;NFm7Bf?TmWIL`Ga38e+eE>WePU7mz^>40E@plDOAGiS=iT_nx4`6>0+yuL8 z;8D2icPwU=CU~o<8%0%LAVw0aVN76Za3ifP{N)G z(eW;Q*W&gP=6&&7h1~a{hj{?@b?^nKUjc6SbAKN0lej+*yZfR4dy<=lm``>V&pNkL z3G*IyXAtfx?6wGnk=N0f|BRb{bKq=uKL)erXdPTB>^5}iILo8_ay8K^}B}qgYc{0KHSfNCpa@pg^`o7I}-D$&VPT>eGPt2 z!EQNrmvGNiDEJM+eFxn3z%GXShM4`|o!nf8{VPtEZ{Lnxk}zfXW%?008;4Dxe)U{Q zbH_6kJdNuNu7kPi2$SZz8NVBIUCaH`*#Dku2v-|+6X2y>`Ym*6xrg{~!+Ztq^@NFX z=~teUF4@s-MQY?m*el`H`0b6I`qJCs3xxSS4F6tt@)i*0Q0|v-jc|5%;lC&Lzk$sz zTq$lhaoys~?{WV;*Ogpr5!?;t{>~%(pSiX~7E{B>pYXuaZ{$~8b1@Hq`u)Yi%++*z z4YHQPbDjGwA=w8K?mpa(;d+s4F_-3a`W=G5ujM!7U-mz^H0yq%lX)ckKo-dQo`Mb{Zy`Pu$zh7Q}7D-w!-pz3-j~1>-z?i;r4`i6Z>5-KZbc{ zcrf&T8t2Di9_s9VL-;foLtDhdZhx*bxCY{H0HjX;`|$iDK4(@_<5L1zazNz z!Ttqjo`c`(-2Dc~V3{dhMx)G)wyIIKk06Wby^!qFJ zMOOg6D+%O-8PMW!T*uO5Z}v^Kcu7-5-&?C07sYHF73y4>`Y=gu*yygMozI zAAiqs>9@lCW$g|2Arw9 z!-u%8;`$BOaa{Us4Ua{}a;}pw&x871#g>;j3FO|7+pFAf2KR$YVHKS1 z{3p2A?_TWp7J9l`w@TygIEaczvEyD_D^w@J3F@j%x`OCG;?3gHGzvLA~$g@Qu^8%mfscKQ`?e;4-`IJ4|}Ilnh>Kil2^mHShWVT{RYIb4fnru?)`|b z59aN0`!n}jbB*Sj$)#s|{hq)tTknw-*p=Y77c$1dZ*lXmyBN34;9Besfj@Gc&HY$7 z6TeU3?@1Tmm5ztvb{Bs1dyxC??tTD_yL-9q$Mrj|zhZYJ{<>Q?#GE-Tj1{;_&MAO`oF8V`No;|aB}7Lt-D{143GOg;jZMf!TH^R`yrux`|?iU z=0vU=@c(!CC#c_Lgxd_>>dY6xv$=NRIuQGR%9H!eb8);&ykEI=^mle!JKjdPk;H#6 z?n=hRkfRjl?5xBL=Kgf9C-66iYobf*EZn9!8HaJ-&)HAKPl~HM*Hv7bIzN*22h5Gg zU&u8M^O?9k%Ki0R-*W#P)NdB|N5e)q0=`4IzjNJ(`xm;kGgN`kwEtaE6mBEXD1QT)kbm1-R=soNEI1hrsW#`+@6Y%wNM4 zR~gqgxD|6vtK%x}pW=Fwcupql4&2M>6z)I4ZVL?6&M(%HJGef_ zei-unUx!QM?u1#&wFrj~33D~~%blmcVBXcq>5JV0t~)XJf9~Ia-Eg16^&|IRIKLOd5nTHdeu7Ke9|$tgxl7g#_#ckjk=(E5 znlFF2AI5b#R|50l@F4sxf&OnxZZ2^$Ww$NvePAWj@9!bEd))nE(%L5^L;k*X=3@!> zA^x7n?o+P)oSf%y|1IX}m|t^tZ(u%-OTXz{n_zzdVSmf@FRrbKCn`sNZ((kLU*hLc zWc?mWlbnQOWK2lxG*|9@btd86~GP1eO*VhwRG9dB(-G&iKZSSs!%8k&=-cwKRyNS{8H9ZfaK#B)WaSXLLNmsy7;&2{nmM032(OXmyMrE?&`Gr#J^@dMi8X{E?(NhKRnu_iCk+!{}{ zq~iRYOhT4L`p9cpU0o`kPTOGi@4R?(L+eVCnd6>izp%cZEcadzYl<76m94Q`X(%x6bYg-e^X0J8rRmL0S z$7_nUw2&L)wQ6PDo0Ul6DVgfAoElO&vQT__kBUQt?vH7l7WcA5ZQ>>LD$6;t;dZ?F*HzsRi zCWmR4Q{0oLM7>e%g^lfAZL+yFmS|3Ug^hJyO-HLOm|}^q-es3%NGd5zPn9l}rD|6u zR#O0IPP^hROQ+*aHH{r!U0YL&YQ&GjBw%K&d1$NG5N|b6sPvV-z>m_WBDCJxnro9y zs0{ky3kf_V+ele+veiRf>%6vRN~VrP)F%V4k{jtWE0K=*DauNW(mJc7Io6b@^~2e! z?z$}MJQAEr*uwC``YG!=SX1RXtKSbVwPBt&SxcjZ!HGb%}IKW30o}yKRyx zpV^J|WSq)v?PxK|X9`!Uqqc>Ix$*W+6`-ann~&3Q-KhZatwX~tHml%#i8cqyZnll-FDlV$$4e7jlBO8rTyuQtWc078dbyd+ ztVyO;Ei3X8V<(O;@|tRyb5%#F&?nQ)>@43z1EZ%nHurgK zwW;2$q^3IY_Ld|wQ)?FvBkQQr;s>K8fb+4>!8OfbQ4fsKI)k)}V%wpMR?N%K@c!n9Yy6gWOre*NE)H2s~m)yV9o z&+(KCQxi+aql(xo(XH;LdW)GL(KMP@p#=@`=6H&SE1n#1H?uMq6b5)O*(@Jd%jYjd&noKrEtt4lndD_-u zN^`KY9qgww#Uo8BT5raL5`(GULab7Wx_Hpes7B+I9mqvvB;>@>P+Oacp(C1VGm7LF zJF2}hxyDLXy2ZmvbLjv=fX?@doxpUmC$^; zs5L4l=QnSs>UsObT7t^X*QrLM1k6`L;U2Y^4A!>tgzWnHOq2=D=f{OoXGaXb`FO^C zr*ZxRZBD>le<|RuodVXy8(Dq{h4Z}KOT=4?yyyYp9PG&)%rh>H9j=6U4$uNaFl95| zHA!>&Fm{ZmClgsTNfE}5aRF)IHOX|GC{|~pU>+;Wj2H6|nsMijheno&=tI_|&={ly zJ$|(8Kkb-Z4a_8*7C&OGG$qq0T#QbGYhtyl*2GeEJom|ynWN%SQ;qCWn}r}!W_zVf zqw?$;RF~ao)_ljMsT@(Zi_hs97coS5em6;{)ygBB_2@#*3qodh2Tv{M9h37x7I*%>`F_#*D0uh8)YS0ae%T77E zm|4^iUOoALI_SITYY9$2X?nA8r{yNdIo(~*Yq`*Mgf_i_roG|GgYAv#Gjj$_12kM} zCX#4&!Q%v9ci$9i&eJ{B6D*d_QFE1BK2;AUNG{Hm1YQ|$YzfNQzsXb;kK$UZbjw&S z+$!H+7I#ljL(`eE*(H2C+%UINTXy5-Dk5Bkwy@CC4~Nl8d=bLQ$ktY zftK!E;3fih8i17q*G0k&stMv@tZbBCy$5y~5uinlO` z8=3L;)>Mp@pg0d7tIZWXG|N|q^hbzzFQ zaLB0f?eb>&G*ZY;3VGIIR+f{ROU7;y3!zLq3hRoD%BdH(;Y{oyb4+ZEABm!uttxrS-&!EDEbe~II}rI zm&St*E4JRmQC{uJSSnVFUQ5P*+KP!ae_8wKHsu@|1VhD~GsDh=FrB7xZMK`ZWLe`q zv%{dI>}0`z2B@j8(?IE-mdn!VwqUWrXp$L-HI`_Lw8ZzVv@E2|T$h?xm_Nd?{$(GD zti0yD!e$_>Ceh5m8I5Vfw3WGP8;g%6GLg7So>z3MeYTLeA`~eur8dhOY0rvK>NFS6 zn=Dtu5?GU@Ms3&_y`C@E=9QWbXP00+Cj>i9S$bj&Gn38eCr>$npHSVg2F}jATPs)c zH2k_@IUeOPm({1N-^^r7hu4&>OVlUgbt7Z7W-{NJpvASun%EN|b$S@ENtVF<5twA1 zGU{&%2veMVd&}9T{1~lr?GD!ORNb_>?M|4hK zSFyliwJa+M+Hr01;xwraIzlvx!OCcZt*PvaG}6pmx3<;KX_mAc4bvt%Qv>=7gen2S z+7rpzos^kGVo2KNA9=dQ@#p*&!`$Jn7esZ!xn;y|dGmJT!@xu~=W|~Zt7}K=C z?uRrq`w7zT+4IUh=kDv1X~`zA(IB&?;ET$Wm-1wa-I{C%nk`R=Z1Ar_e|aE?c}AX} zGCSc_(z1goY3nD>NW_Eit_O>t%nITJ3%)lLwt%^5y5@5<} z{Zh3C34R`RpHt{YQYMc|kWI9&HtxwfQ*KURbPbtYlW1g5jg_c8zeVv>Q=*lP2j_+L z4Og;e*(#Mtvok_A_3%@dNJ~uKt}oQPuofK6PMrko6%t@oBs(>}faVUfV219dqW;1| zaMn$N5(qMLd3MxTvn{dn3^#p1W@em8GR9 zc#hRYHH@)NmCBLBDo35^j2dGc1oFqUHWrGL!B)Es=L_R39wV2I;B}U#sffn8?5+AB zY9rzxRy$Y5nj2_&lCo9<^!{yWC-h*iB+*=(nrdSUiZAbt25;-zpG0KEn-iNdPiG%b zXJTC46#K8oH*bDfk+*bynHiX~B4({d=?!JnP8GCHs3c?(;L1B{6Jol8gG$%#vNn3K zsq*zHgqfx+JyK&5q6DF)enq+o2!nD+V5S0Gx*D5eD5d7k|Har<=SsnU95WgJ@5j6z zd8RI^S#nzDG>_%G_o$q3|JGQcsmbrRuU5` zwHjC4Zm-c4ICD|$Jg%3%t94~pEDxQm1Gg|)=cJ;YsfMK4sc&|O%-mP4C)AC{+#Y(Wpmue!;9fuRu2>be3SYKsyaFPM)68<5APYlgGBE zOwY-RiridBZhYt@8pr#1tl-uCjSIeZBrBPNeG~9=aQu$fTv|Dce7-~w? z6nCeRWG#3YGV;^xcya^^ z>)hc}nb6Eq3#Qs6vS&=`Au@w;C4rNvy3A9Dgw<;@S2;E}DOtkIQP{kqR6Lbq{UWwc zSau%LscaVHlm{wiPsDW2qW z{j>#z$fH31xH^k5bE?e5I7?L2uJ31bsOvJbtt!8qsGHVhT!Yl*&y^LHQ}C$woFJTE z$6ZySoeOu8U5cX_YWn=!qQmpA3w81G&w`(=@Sk7%IOEdn74IQ6% zn<&1Hu1O`#Nm+Iw+H>}Fy!kx77@4j!G+ua^@x%Bsv@m9tO!CTDWz!XwApvoX9a^1= z*ZFcFE=gbiI23@#hbJ=p;uD^Ic!gNDXA+tHcXHbyP4xxYp|W8#F=?tXlKSw zzUU6@eA9y)`h#IcsExFXQgqh8kOd=|6C)f)T_0&) zFxYCGAjCQsv6X~*^mL}@$=XZzSLu*2J$oSOoSQE9bclUj>)(=;S>sWxzT|>+b z>j(Z{SwsB)aM5X9yNhZNzt}PVf7ZF8>HhwT>km3%QKQb{8wG1&E!RzB%o4Gi07sA# z<0xO$Y`C#Eg<+n^9>Rg;Hg5PGeA#_B2UiWz4+2 z6XYsrSF`pkTU?$uq|Wc^fh#8wLCCzC8+vun?juF3Oakodd|`2ZX7Y*g-~Mxt0{%og znvyKDiJHlX?!vM{d#pNruZ6XoB3T?xQAk=?il2gCl-A`$dtDRk)k=XsT@Ga>lY(EE zSSKVP&lEY|%veu%ruTFw8Nzd86lAVM&eURHF@lGp`@Zs5*AKj>HM;pb1N2Dk$HrL{c3N}d6%sHCCha)r8&uRTS9g2 z6mBR_X8pkLbrnjY=1UZwgYGQq&drrBTvTOGmzu|Qnd}z`l;3awNtvzlB)prHh&7ki zBywNNa?c%duzpONW-ZbjCdtU6lQ6>OWrQ^*T3b0^75X`0&S5>|DXbed%`>>|NP|_3 zie~$An(1D#HFNslVciUP!%W8=TG zMm@x8<;L~&l4$me8zo4G!=m<4GP?)zlVwhi`5vU?3a=*<)8I4D9p#cHw`kIQHzB_? zlO5lKU;6&*{2^6QMrTT*SvP5Dj8~UdR_#4+wmBteay*MgQC5~%Rl&7xB+th>GQ-R# zw6NipOtVWU$5e$j8PVp*j+pPrDd~b`O0ZFiCq=hSNzwk)Cu62-Rjea9;TLh3g8MvvXY$ovF>3}cEfqyvPyDf z*>x;mT98fufTOnF%^_<)IkCnh+g|3)wxEbQf|QxPurzO`MVTGY64U;PjajbCTgj&; zG9s)#GI!1NGZ|TKON|Y_(uL*am9wi{4VZT9Y-q}wPZ3-VMH=oF+gx(pMyja*&68v1 z4O+i0tw6su8~x_%6*f_(3A^^9PaUNBehFgimOqaY9OGuCDJmzkx5HOr)|y3$uGN+@ z@OyGIK?){~D3G6Sw+Z4zDaOpMmY@F&E9|#>Oc&+=sxD>va^p;>k- zqmk(3Z$!QS>R2-~{dw9HV>`Q$QwvFV`r3C}G}E~7nF^fDfpHU?3u#@cHQKVyQm@k+ zFA_){*`V-ZP3($x_CJ#Y6X8z|g;VeD?UCl0&3gC25=CsUodLMn< z$flNWXYe)!2OC8@ukNClthiZwE}vOmwtU*OX&j2S?_}E#I_bT4MqBN|CR>PnNV_>T zKZ_ORt_nOW$+PwHX>Y!J)Vqoe&E7id?moYyccJxSs(IVg@8oi2lKR>0oJ!Nl!KC@t z68WF3cMZxJMa=>2%zaw7+O+nWE6vOLnQFBK8ysgh=d!If*@7{zv(PU&{WIlij^e8# zC}LY9=Iw_Hs)2sRo*ma%Ff@@~o^EYw9ZEW^w465)vXT=R+-nQ#^!tl`d=Jv`8N7v+ zuP9uaOsKL~1y-RPW)*1f5+fJPZH>C=bFs>qzzkOuCAE&NFItzFS z*|a3*kiY5L*0a!j!_9sPjW4X3f^$|anqC-P<~_Qqg$w6d*EM`$p?7cf-DW)MJu7a% zB;&p`v8aKv&v_}yRhD35U6e{TCL8#qM$nc!dC~a_GQy^?O-5U@zZ+;<7biIAZrbz# z!aDQ810}uE&DX3Fx@PY_9+i1V$#}FMTyp`^#l_}@G5?c$YFOFTV$-eND~%cUZ7Ev0 zR%FcJ@0MgTj#Xx})I`Mwts4pZ%_;~ zXN}BY?uQ7vPrVzH^%2CbLb!RKyl0nr=Q!-7J3NTT+-yoyGaa4RR4g=;qG+pP!6HRY z=iz1j)NhP5y`t(U$7^n9Ldd0wRI6eQ30btVBQ2|S30Oz4kR<65CCUKke=n-Mu_5z$ zrLIyJ67Hu3p}sI*Rwq%p#U4tCZf(cxzvdRqpzKqDPW!P~!PGMn%zO0Z3NO~yuC~j$ zL)0)cK&WioEK=SW-_7*%7kuiCi1m?Z{Hv+K zj9~nC65Qa&FOSYcx=Ay5vrM_#bUxJ!GQRNE#!N_)BlAd9U8@I_WvX*M!m7fn7o?U2 zubc)3zbGwpblNPinI@g_W?NyFz>K5ra%BYVlaO*ZofJ<4l}zy)vOo8=o~iQt8A&t0 z^^m-%Q(2j99KM~g(v%SAr}U~FuL0^iZ{`D5)sgclcLf>hUL32=GV8E74A)>^dtya>}AGqAB{=-wqa zDp8*moMEz=FU=agtF13)7mJsGYixGfvV!S29M2OhEU{{!r0AO?I;2a%a1faiHH(L}Z7K6=wQFm^ zUY|+G>MV(5pL+8@5R>&1Oq8zGth4!b793v*wPAY@SCQK}jhV678I59Vs*Yu9G|KuW z4?4a$H`@sb%lhI(lz9WQ zjF8nTV6E)fGBwBBX+GuyJIyRV=oLWr6rI+ZS-X@d6o1z7M#{{sDu!3mLcZIpLn;&H zI6WVLaG!lqv&d7#=CieW!^X_>G(x&5`>=B9qV3Kyuaeu@6zW8tm29a|XFGZ^E&hgv z)Xq<5iV3Z>A9J%0zeNPl(vBY;PY^6|3^NPKUTLXDY2H$I=BdtDQdl>&g!k9^^rZVN zf_>oAnn_zkOQ%fPd}>{+EY-kU&RU*g#nUb)VyQ3sY9?UbTe3|#&nKmuc<)tkI=J_&0Ue>i-bGPgONsgC8!Mz#o3TgD#6w_=PG z`E1rFD9kh>6sNud#0O>8D@sbeE}2@cQ@>I5I~vYgZ7Qt_>E0wW&xT{HhP@EeNrzjH zUZqs&(9bD}T?IBx$5o3tLPL9+s#;@>TPyLlJ24gGujEkB)e?!%Wzt&S+R)se-0I^l zYB?^fx>-)^@a$u@R@~!>l*Vj3*w@;F)M+)*eq`G-i*_17%r|J%!_zETU(!U>y)@2t zf$hwcu{q|GC8qy$5-OMg1#hiMiO{fM+skaRk}?+B&3R?jraspi*J?YHEgFJZvv!-5 z~~ieMd!$7Y(Mo(kc0tF|!h z^ulaegv!_o4wbPgXr5jr4dCGq-ys6QDnw)G-KsS0(&Z%)LLA4_%m+q7hrz;uauy*7#80Op%ol*Qnfcn1He@?VRb(XGKTXj^ zWPS%RG?PRZo7tl4IyM*37pvIJM-c3iRMdTO8(HD3`Ku+?Rblk~Ctp-uod1NtXI=7# zajpuaPmSdqq$5xlb*BK-Uij=1p7qO0S?J^wA@nmr%zyN-X8z`sc$(8y5^uk#mHX+9 zuz2(RW8O-nTO7vh-b}xn>9+~2sxu4kp|Z|STXu$!Tz_#(`Z}nvC-7Doite=jHQ{!8wt^u9C^miDH{I;que4f z+4c`FX#CdX2-T44NSa=`XXpMu+wIo>2T*Fm(+j^2vbMSPNNJWO6_q{)W2X%Ni?O*m ziQ-#R-8e51Ye_ZLm#349Sp!MQ)*hiWDX1>xD1#a6OY6+JnmTJxnH81B%(usiN?Y1$ z^jw|Bh6!eaZp=insMPGDVkFL@QeO8dDqUx#F{e?zVQz+~8InHUhNR@$Xx&Jsgx2Tfc%deqv{;}PM0ei1Uq zM!uODB{}2Dxh^V^PYUx-N>Yp$?GhI}RC1tD|Gy-w7qjwwajFqJ2eb3jVKZFfnH)BD zC~=ve`6g=6Y^j~N~jC$(8R&sR4TE4X0NHLgU&-4SPD6{|g^@8s4oW+O8O+Reo$a;K1 zQrF5MnO!M}8K~BEKqwge%wAC^-RN2=LILw>MSi7VCQM;!#XIL$sgsIov~*Xjt+>Si zeOo~v3^6XO8nQlX=X@$zea+P@hS`a+dUY$*_OcRY?DRCoy*fr7{iq@$;lPC3!jvS< zsqD-D)wUb*7X$SS#$)QvZqZFuyI{#YUfM@w$=Me_icK`n!n*`(oCuFCAj7W29Ki3qMD+{q8UZ= z4)#ZmAn)$v72_CdB%FM1W^qRkOM@9uF}q>|f-_VyrRI2hyT@y={wD`lHS zW(0QKe!6NqDugbZj^A|uqh^z-J@??1=|=rmVY_TMe7U$bk>FTFZpoPBXBI9rNh_YwZLITD75+95#r5T+S!4* zEM^op*;k$9w%m-HZOsX_7HT+{KiAT_lTG?CO15bA@7B%!HwF{lPoI)yKc#N}Pa=g< z8vbyS3GDw5MKfDYF@9>QOp?q&e02trVtZ#Z&sc7jK|@mtTUpLlYvo$LGt(=7Y9a|n z)pZ0;r_xGG@MCY)RFn>PULvs9h8~-?!RM)+yPu%UOTJ!-ZG4%r#&36S%(Kp>U~JRz z%hl?vhCP<4OH1rpHUHGmPm)yD z(c=S!(}&WjYZEwE<+@b3CFNDNtFm98Zf9YHe;AonubGKdQ>@+04H-$2YbZ~r8Sc{~ z%7A%J=9R9XuMX)~8K>d(Kv%0{jm))mD4goGow^?Lv>a*AwMkTx?5t$Jl-1AW)LuxC z9scJoo?W?w|2AhKS9vs{2Y8rCX#pHEQ^AFl66SqGnfyMas zW-{8?_dcBZW))4Y!R*QLA2<2FKbor3MHRE?|J1Tp#uL2SVV-HI6m=L{0j(mQ+-DQ> z?x%UK3NNzwow0FfV7h0v1Vhioe7`HtWWl!Z@FXGBjrvms))e^ss7aej+ddiP=B-kb z4|>huiK!;7FJyG_`iFb%1J&hwI;-RUNp`z~N|{n5RC&rdDt*}x8riX{n11=?5B}vN z{`^J!b-e>(UlQ^Dr(OX;ZG%@olyLV!c>B(a&53(e!+%YN&o|~P7?r1epVa-szn~a` z>UR#V;wj0X74olh^(>iD37ZttWaD*KUu5NrG798eL!s#I^Zkao4LS4BYhN(7568|OG*mg4naHfHs!)Qw-m&Xr-HLsJg7aj8t_pYR6lv`l`? z``dggE|6^^@LwEKJgTvb&O{fPZUl!|jeUE=rYN`Zn;KCB?j=+$OY-e6KL`Fd#f)%f z3+Ca$81SKB=6&ZD?ej;?nuCeOEgl&Q9yapmrg_WR2IH+Q{%4K(`ESkG^+y%6UwCH! z%PnBiC!6&bqSue5Jr+AMNyaLx+$n2$$oS5EXUC7#tfFT03WW)^f=uv^X7aBA+5P-x zm<}BLMAONx;e+fdCiB*@ePCH!HmhPU8&(QxjmoPj4r!_lZ}+%vvb@r zc79foKZ#taq;z^Y*H22m$CRZC;V+p7QDueb@-d~0;W_tlDN9(WvrvNF_c6?OfE2qO zjaBen#+rXlU|;p(998xLkIB&jwav_^u6Q+_v%PR<|HixDMZ0H&-SBTD_^Y8Mw(~aA zY4<4XVlXPAI6|M9x1Nd0I15#5m<~lGneDr> zBc4U>zZ~1ygu3U9PtVQ$lvcY?XXbId!)zZIlsEnSW}JCWFppCiL26ndS=!C8J(E{L zigQ05~{_%&0tHioWF$xs?> zJpQV`&V^Lbc5^4}2O!0sKC_VzTUe7$ngewHS=l->YqI;A=mg)3))I#sg*gJPhC_yp zJxa_j6@8YEoWm%C78#U+|^dU{|R+Ho;^=v{vji?q?))?m{01d;ySGnb?$E6 zcW5Y_{}+8-rv!#;bX|$fUH1uxThgKfnPyyevjHB<+<2*JMDQORq}sW;4h!;oaEi5y zf3*^H_MLX1^Jj z<3TznWR%*DOq%9~)|KeP`1h6iZ)S4fI3}lQwYh8*SpN~jt#OCGzh&~~thIs9+66~O z?WsexfZ#DFIJu{)(&K1NEbTsY;FowM3mg0c%wXZif4ns7=|Nh2-}b+k`quUdRkF4G z=0C4hvt`QXdFkY5=>w5`${@&7CP03@@!My<=}GSVz$PgZBF{Xbi@m7-g2wz`OK!FQ z|9d%FSXQ;%Y(g(rtu2d~-Q9T_?3ivBnseFa5F*cww(9NcZt4*^%tBYFL$RUlUjO`? znS<9expuF4@#+vQ%ek8S%v+wW`=0FK!+gCrH<+7WsN1!B*6~!tYvmt2bAqvvPfr_3eKWWWQc7KWGGS?9lI+nqj2B3rG8PWd%p}#R}vGU04 zd0e_PA5i4~ljv1bZLX)xe|f2s6Q`gRmHCW`Th!xUY2lz(19ckF9$2JgI0|CorytY~ zR!mPF3FKK13gX(b`HTc+>cb|1|3h!j-fA4yo)Tw2c>~C}&W!0lkDI~W_C9`uHp`QB zsMq)4=9alWW~Wj~9V=F3<(z*aI}DyFtyG#>gk1o(iOJ*6u+XG8h=aWf$(irotHLPj18!@P4z0n6(Hr5a* zhhI!#{aB|LltC-=np*i`Ls749P<_F~&z&8nOf_~9{FfszK74`h6(6Z^j=&sc$Z^e0 zl)v$sS6(_EU&Veb?_SW(%n@^yw!fl412hL-R7tLwto~)9Gy(`qSEm(FEm@t_;Vkra_!x>w}ox{ayu;er~9lvIDdMpGuhU# z(%)Lwu?OQ6EM?`5-4(v^X(~yrnmS3v`ImH>W?~2&gDUzz&At0qT*sBi+rLJC#hHhe zQLM(YJxM%@vj~yj4?VHo^_GO2(w~w9h2E~uz(coKz5xAhyrui-BDIQYlAy^fa58`k9 zJ%pET`F6^a1YP9A{lCEe;7rwW_#o2sIK%ukP(XEo4 z!ebUH~au|uCU(ELRC(}3HcRy^w=q1%SWsQ&?PO{REp?JC=#Xf9 zf{ z9V~xAGm~pL|JL-FxD8A+*n!!CNLQD#Ua`Zfp*@-R7==2P7a3Rni2C|{L zIkn&B6>a6NLX-nxfy2?h!M%7YuIm_Ik7OP@$3{ zptlB4hwgOcY%}e?4dElR(}D+O-HR5bOUWO;(4u_-Ysv5WVv5yam2yu!$waX{ilK$} zV)VxD!i$sgDPj3b<9<&!9&E2||HU?g(z8ZIlm1pgY8#NcQNLhC7e3eE4b8j(OyPD} zge9ViyIlg3uT_{t%5=7RUCKLYK8a8(O$srOTC5ASO4jZz6FMGp^>K5^P&+PK^~QUC zcKUj9G`sNlPdy$y%*#PtnTv_JiyfqXlMH|r=scGw)bfX@Wma|=L+=y$)e0G9j&TJXK9J@&XqwGfvpl=)Er@@>EE^_ihibANLe~vL`C_jk;ZLWb^k) zR0OeBc!BhysX{Zq)%*+5w+t|?m}`$-i;!OA12LOLE2jeHc*VAI6 z!$*JZ_I5Uf`MJ~Hm<&VhE9C=Rf#8@9Uk^LFb&cJB)i{!$pbWQn<*<7nooQzspK{&2 z`_$^ggNmZmX_F+AH9@zkeh6FbYn(-F3{`;Hgqg`n0kpfi_2TcbdA>DRcTsdF zLj76Q^(r&wz>KQcxyumNf7*J!y&E~4OgTA0-DH&OALL~>@?jRtc(}+8H;8~RW>BU~ z@ap2=Ho7%2KG3)W1Q#|5{o*}>9*iRlrlRDATV~8O+%}&Z=N3gbi{MDO*cxiAJ8Q({ z5`j#m&YU!>H_)RZ_CbYc&GG@rs_$O!ivu80$i+)Li4moE(kXUh@VHod8dy&kl~qmr&lT3R#mXqhZ1N7@6ir zbR~>zQ$~*H>?-?#GilTp1QngT97~?D%0&_)Q>L4|)2vf#3)$2arQN7)){f<+*&dWY zj6OXiYk~|6S=JV?xb5b@Jk@l^Eb(>+LFRjC6%wInKGuG4Rix#!8;@Eo5t2+MzyXhdX_tWL z`*gNne3*lc_4Rd)O_73)QZAsMytj11_9hl0segHY6WgN|s2QFszD%x^8{;Yqi&YxX z@ah!B)s+VrU zc8RI^YLP?hHbOfnww%t}d-VMGJfg*e0z9Nucqnw82rL;dq+W!{1UQiN)z2{Va=KXS34;zegeE;LawXJ65(a!Us7^4{vrl}MAOWTv0ou@x;?I@!aoAdoS`|S1E zo^Vzcc}(F3Qbl&xc3&_fDr2XM<_c|XJ>2`@88qSi`~WVYaG?VbrJgY>vJ*vq;7jlI zcJ}1_!h6!|$JTas^6c3ziz>)9s&*>4a$wCHoRltsMHqB_yctFBHMxF*7bMK}Sto5*t#linkZ*a2~_N zL(&>BMi&=kX@lC6l{^@vRZ}`%XuX?LoYfgTP!(eXV$B&NfiHWQvaw=?Uc%IFeqjK9iQ&Abr{g(-|YYNxu|Lb4vFpJJzpwG)pjtP^op zwUoEB9EFf>S@@m3awg_^cfSUcEE|hBC?|t0l_%9pm4w%=l-XXE)rwAdrQ`+KBJz>W z4uo-Pag$hAScTTOBNW%h8a!9>W>c`jI+;;;+JPT=-!pDJI|LV)4N`batdEWz3r8^#9-+8!GrCkK@|8?@Qy9x?yhnJFslBhC-5aKk89i^5XU6=}Fkdm+Fm zR9Tpjaa*{2VO)lkvbUp6M$oQX)T>$wh!N6i5!I#Y8#im`=Yt*W zlA1N}-Z*lixPIV!|BKo9t`t)Q9XABa0uQR?7}}<9;W2a zBNA*O8(_u^UkmAYOdN61Q@p4OVp9EN+4M6_mrTpjH}(n!4VnuLvUbe&ZD{0T_1j@) zMU<%7sj0FZp$T8M!qVW(koGG03F2(T%vIz@iS!j44ln*|QZX zCUiHJ8O2g`B`FK@L%ZnwO7W#>eJuxWDyx5NKAz2xW|eFmt67SNY)_qW_1smmpU9AK z;}YaSnQq+nd(v#p2*WsNo=&iOu%}bj`dVg$6{KQ7!=+3r@_UM9=)cHvt2a75(=1>y z;#QZ-F+$+!natD3hnF8U27Hg`1*B@)+m;e1G{LTvnt*>Va++yo&W-&bI%tdQLWpJp zCzYkUxmZz*C%qysHlJ)h|8etf`kr)5<3$Po!`DEfL8SN0ZzSL$*dYdxXSpiex<)jE zX|nb}??sMOP8KNjA3(B?v zbfT7xnKMzB`9iq@+FEn(uQQDiL>#l|GLX&}Ygdl!4?bk2s@nS?oXcEN)UDXfwGxBk<^r#vVezjfukL!Gm$ zw5qp8s#uA4QudC_TpJZ&n*z)}I@FmJBW%7kSa`!{8AeYVQf-*@!czpjbP~vwy6Cx# zfD4MpqI_ni{)7S11o5E+=+R8?oo~>kUz}DU;XnDwY|#quQT5K%`Sc;MW*W@g``~Lr z<+=Cn0X4e|;)E^%uu*qlq?fcC+|p@CL(|;g_j+L&c-WcuykE)-&v#4UZ#zy8qL{kW z+;hb96#3tV!#5J?8!#_bLlc6{fvE~iPP3)Dp_g-~(Oxw#hp+y6`1bt2u{3`8JC{@( z0DALmYq~Rg$JHyH3saiBBquaN_erZOb`x3K)t99wK#&)du5#VVk^(W7_2_JhDX}fZzPZ(-B-?K+`6Yj zvojYQ!iKtecpD)-%4)jwU#Wbz<2WTQp%dobR>OQ#T&+d8W3ptd?WhpWEJ|}Gl&EV) zbxk{Sg`}J_ZHq1myJKDOwAn(JvSq|{;oannFkEFEm$Wzb6q{jg6o;(_?>x;Fo8~h= zko_48?>1Ry52tMBxn}=%GbqN|=|E=}*LF95|2w7+E$`4CC~(-1dFWCy zkX&N77Tw+^A9p$NhCK@|sQtl47SQA`X2Jj2w!1x^OyycCO&LC^n%eYu;^I3I9OQMu zhK+mV9bZgIJv&E2w)@Q#_=VuH|N3xGflhmD*gZUhLTGpA8_IQF)AI$dO@xdH0Q=sJ z+O(^K2r3-EM%>rI7oF2X6+!+PNb$^QnWPQG+JHccJv8waTkJdLZ$Uxs))}6Tj}V9` zz>>RBqr^Pf428^RyYi1_(G`+m)pgubHT=X7ACTO_^{XeT0o!R9FBs7cV2P1VI}e~m zfEhs^ph=x#CXjF!7e-6h{JXCcz7{#&L~Ma|*QVd$DXf-||2<4+&mZn>|F8xoxV2fR zjW86|ZT9J$AXe4wv7Xru_rCUDFJKB)5$7#Euu@OKNO?{V0eZLJtPa!apaO!brEUqj z1FPu)Qo*^oGD8U1Hr3d~4`S|J$^(~iM20;@;CiJr9D3)PdW4#B-rS7gD-jDr_Vlb3 zmyJ1d$cIMLKGB>_tq>$9OFgxRmHxoajxp$sO4g-=Zo37y=(Zqk4vz)Ry#a}rH|KEj zZlVJhk+NWb&FD31|7H1Nc2owB#h@53@OO0*_qnqHl+{H^U%We0x(gtpg6m`vNF7JV zRN#^uSzR9pW-)CZZLB?g{@wadygrB4=oq=y!2(AlPLv;Np<5y-?5nm|K2cde=wO~T+4C$dV#W7l8nZc4`N8Z()s#aH>PpT0PiZn&Y zn`;e;T-f?X0XBj3Fh6*2M1ke%U>N+{{7k}v*#+67;*XOMo2FuS4db6YZxr;r1(BaO zNr-7>>}yzj4+n;+dr+~x%d@?3-R+5sOwYNo&(7AyQ&)q%JXCluE_Z{w>D;DP z<>2H@N-@mBGiO?fXrZcsMJPe`OW?aEZ%~5P>frG7lWybet01MnzuUja)l#+CmYbdt z2op>NpNrvvcR1n7+F~PTDomHG`YE3}CTMdD%C#O%i21QlCsE;Ga&f?o>^jDzyCo{k z+bD_zNS{94RJkX+oay3GyN+|j7M=qmLp*&g+!RneR4^50Kpp$5wN{& zY>myKi6<4X!0$of6(PBl-%wGhGg|w$kUg9Z+(nXnmbmhFSeIP}(D~@%LCH67ej|H( z(7E8slFw|pi%K|sV-y}~zL#wybVi5kC(TK7PTqw`?$TED8(-%@4=|ab!&xjWZ6cS# z^RTcTyqSNK@y_#a%q*`^=s^_*E0&kT6rHZ$i6ap2;VNa)^|r3DmzIeMABcxuIPPQIFoerK@aXqck1O&@68z)m&A;M@5MbXdLN&5Pl7m zeSRwa9;+UXC}BT{n}5N^cQ`E^W8)oqNdHM}4nMK#TyjwVh*PogjNIs_)z^F}zXndf z6E0jo9asuAi+VRLxDssaO)if>+4Q<#Gsm&*y)AUn&4q3wWk%-?3ndaWBj_M$i7O!J z?aj@D^3bFYbApsdNoXaQjXw-rtd#8~@JEZ)3W$f3*LFPhG79Q#>(<4zjN1qTz+SRM z@MtWRoT@d)AIuqTDQcq2YRA+@eNlv7v$47LVwXw`%QUkhnx;v|-<6Pa4bV;~#d!NX z${?vU`wyMae5^E%u#}E%jMRQ3EB(&I-?kO9KsmGB9=p-7m~OH`ar|ZScJ|h!Kj>C? zdN7J)0hjQ~&s-J`$7cx%j-_gOYOC3v^f9`5&Lxy@N6Z}Q{FS7V>BXll6MO#6emMQK zd#+da(RUNg{K@Ib+j!7>Q;Km}YGO0{dIndBoe{rWU>@if0l;s|m$sPahA#jk^4XBg zRm#j9QHa3W&gNkLp==<7$kkM!Njx_dUS9daI^1%1W8ipJxR&#(cnUf8!zW&-bN&QI zz1jk^FwO=?hW1(e*n)FtLz%)7aS#G6Rw`{PzM@vB&;cqq&qRI)XtB>Oehz~Ei`syJ zD2lJI1K^`lJU7wpcIs8=!%Spm6A)eQU2O$6qNT``%lAE=Rl)3Y;{~dSl}dx8*U4Wk zO6s|h@zz3N6im$WBY#Kez*`Ml%w~MID_aIC%DY@({n2StL7-hy(uyE>#--!O3 zrc(u*U4b>jg0dAEb;;&o*gt)4G6&r}xN~A5Ho(C^L98!@^WjQI5o#2z^ ztV*4;O9S8S(*d+ppdva{{#PxT8Ce*AvVPAaJ37=|N#(sy$LMIJI0Dfv^WM5i&9#pQ z@Nb(x>%ZAWTQj@hI0s%Gq-WE&@^sK<6DX3oY^R!C1)Le_q)@R0nOVH+jU%o4=dkkjWDEb4e+VjoSSpBFaASYZ?0>aGp+0r`7)f};BU!w*f=O7>Q2MHvjiL{^HEP?dJbgQe-k$BBB zLly6lpI)sv#2~1&{?aW!vN{k;oM)9zI;2lRtbiLwE*A37t03sz>j_TcGG2PU01D!d ziGE@DEi!WsT#3_a0XYv(iB3)jmuWb&8*PH#DDop!o1Y%S2snUcGDql7O#*IA1a)m{bK$Iz8x? zx6Nwl(UjM(0^89!oql$}_xzv$99h+_IInO3RSc3G(){;{Iw-3Fpd?*IO7Kc`Fx z9BDgsDJ8Z{_e?s|oz-zz!*$564Di6Is%cj1Og-~&p+@dVl*eyNUVb$M|*of}~@FHPpY;U6&gvt0k>DY%OMH3}zuhf65XtgRGSfK`2c>B<@A_tehjI zxmZ9cSa#-<&FzVFEkQw?12rSzdx@$nlclJ`>f-Vq5#JN#8*Ig~koh^LfLU3V8q|%| zL0(%aO+?49enG1qZX6DO@aeyc%5_RAa_)2gYW2(iT>bKfA5$7Wn;uOLhYvWvG~7L- z)a;16e7)qKj!tK*XBS5|ww~_}-IPVp%_H0wca?hXo8g`RZvOm&1Voe5KN_z@ zalgMoW`S?M`Q3jGzibPuMeOav^|*!kZu5<@1G1AS2M*ouUT?ECI{k&!pwGPm-51Xly78M$ zs$0pm_h`S?<H_!o#-JE_a^kGAck429#Y`?QfdgN0hgYWT#lTLp4F_4BD zyM|DQBj}b4pp@f?*Bgj?U{>_UXyjaRPTU;BwZO=$ixF%N&Ku7{{{nPy_oy{Hy__Ah z?5yWLOLUBMN%^bgUg(t-b99L)6Z6I+8H~6$+SG!202zGUU+ad7JZvjHW4k2njHpt#*Sh zyg_z3J)-3tIh#a}HN-efZbXwq<;{yrcC=osC5dx-qep=lW$%?Iwk31VEy5)$;JCo1 zK@mI_u0lwCk-$nVsD==2EUi$C9d%)torm;&wq!!T_s9tcZY$e=u;Yf#rFi8eFtEEb zUQnjm37v92x}(wC{gLuQ-srqEgsaihOWW--)oh!kxu(V~a$rmAafRC;2r2(Y%x9uN zk}P3US-G;e7a&m!zXzNZn@2fPc8*TD`OnB=w~Ym*TiCG)j!2ij5bj*bYc(EF3%R^T zf1}D(Gva8IL>L@RSt9nN)5{K0ba28%N^uJW+1VRWy=e4PRg#!4XrQypMv@XV-7uv) z9|lD-$S*IB$;*7|L^PiHBjg#e`uOY;w=k0Mg3+C;w&HV-n8?W~?xz{7W!~OB!$qsUUa2snk{>K6lj2=E~Ufz3q zF&Rz|2s4EvM_bl|^2_^}{m|d&wHS{-jxIk{fHUGPcD-KruK~lW)y;Hgz!+2gdS1LU zsjX8)Jt_m~Ls;{rB9EQPEHSKReFqRvk2MaO_;l@T@H$Y2L(Ka_V$T&1X}1GkOf4>W zSJcUnk_$2>Q!eLwAEKd`EgappGfwx>#ZVlmLG&p+4Pxw_(VgCYYinv<_oP&O+x!{X z7sN;YAq1eg=bV(Yd~G#_1`O4?tl2c{UV1t{nO)4@WKR%VR}tsiy4;q{ZyCF?b*@?a zenju2w3`tudewUAvt8R&@%HGB{{KybYl`x(j%@2nkKN?SRfYrZi$Cs1W z+U)LbD2&T1-W-1UjSIA@GLJuj%oV&o67g!2*xX68<06+y+y32~_-6p64N3UX#OLze zqGa~qo06iQt{uObTwM85rCMdhirzf@&48zp)$Id$;3Lh;UOVCvY2&9SybSls7qnGM zdS^d!TTP)-QfxwybbNF4>}~;!XlN9CT1fr~0qT6jt*fVwoz&u-DFW*#?;o}KAC2b2M4oWp=w4vk+@aGM*_mRcVx3)Z%6(#Q|p( z&{$m6X~=6I{a!-mJexLC!jC3zLk7?L$A=V*TInqg2_T;=v5j;~D<{ z_thLNq{~h7{}9M9N0*I;MGM!V$*Y8;9$aG3bK;C%NN?(~kca>Wz#k8u;Z96n}b#B9YTSp~Os9MMG zd$glV@1ja~=}VQGfhUG%4~gy_lPZ1q-}R`TXeTL(fuX<%PtBZV(;hJkDJps;iG_hF zUz5J>ax^nZafk`+=>6AU#l%A#bQ?Nty=&V-V%Ed9hy|Uu@A=kleIUsCa&q$iVs!3R z)V!;hzGCpnL}5Z>r%mv%A@GtKSkKl z_2SDVkXR(=6n#0Qv+xJNfgl^TtchcjBK=~z`nwpDvL2Wps7LKwt~CA_eG!{<7H)#o z;e;znlVU2DLQDTH7ZE_Pc81~-z&dpBHMK|6-geRIEZQ<5!$tQOU%5@yc0DJ>_UTqQ zUJj21eeOfP>ES4~0tuK1USI(nS>zPEyL2N*)nmGRjDKs`^CC3Q@Rw2M`hG72?bJ72ob>mR-2cS^~@pS<2eP8i38j`(?@H?rjU9I;3z}|KVTx|i#T8%j5$1e_4a6O&ZXYJdww6GC=+M{Z8|XSEC(9JM``v^t6Mv!l^mKZJwOh>J$VP>N06A znxy(d`WC2psK?FPboSQm0fB321>mPV9WL31hx%UD)ige58iOJ)1fATo5?G4Hw;bvN zpb~1rwWq^Q79L_h4&FeKcW{5}EY2kkeDYS-gg>F*X7waLq`H?*Rs(BTE%jnyp987X z2tqwlaSS{s1$=H%1J$FR5bDa5MXZb+pica3|Gt1rSH4awdb|0>dWr~cj)&MJV)!8l zjEAWD=pLQV4xIk9;fP(>bG{fIOFto%h<4!cJqU{FYFzrN_4);v%CR)exI<}bi3UJ- zm~b|1!std8KSK#Df~nu+1Ottas~I?+ebADp@82sXJkT?Ql7J-_^`4DcB~9~yo3CEeiN?VjO4)wiMaE(Dj!xy;?x*X}lT| zPe%oub-xRXUtMrsrUK=i%{lXa5iRSt2y}pT0R@Pp>c!w^p&04pRR1Nd^2JcdOJLh2Z1vn?KVjXp=-KSgQQA zryp^-V?QCt=tLti+ljULzrq7jDS8&U+q=&;f+X zMyt*}kr7Ao6*f~GIP49!n%AHvr$fc>_`s^hP$0w+EIxA(C5c$zgH2gf7tf562IH?- zbK%=~P7KW7#F=#<*?<1Mxks#UHrJcX-p`h6dmZa@8=Yw${a%wA3db48)3#Yo(Ee{5 zC7Aqn!mkd?;;CM=eaIKy7n5WDdjD^q|84m9Sbm@V-uQbzjezR@ zMs-3LM7p@y5snt4NUn#UVjiAg{Bn}>zvx6y>hWl|&S+XZh;|wM|E^sP`jhQ~e=o6n zy^29cl)Dzg9tSe!D9g6qdOrV&ZIt&(HumV{yY zUkSsct)qq0@%wLI-i|T7Y79?pLb4(4R0-~AD5Hy6>20hKbXuH1RO6xy-kDM;JlPGX zB4U*7ze?|oo|%}w5SFuzPBq^H`@0aUt}c*dfThIEiUG zA`t%vV-R1@4!)SfgP(I%Rjk zrVQ(`D>Aa5kj~_Wuw}!eY`JgpV96A(D{n)0)n7 zl~e|(G$Umpiz7{(x1@SXi-+gsL-(YNTcIbo#5kH!sBNlGcJu=6$Q@@Eh|Ox(fBYsNPNIjfS&;8RTEJ7 zxe7w3r%PRJnd&|9mk|y|=!~%%BSxVG#O4tl??ZL*0FpBp-y}Z(fuRc8T;~PnKV#PhQ0iQ)=IGlC$U5=;Hn(Tx^L*;sB$=e;yl1yC>k#8mj$LliOvq_sE)!#tcFW3gRm zV!vOk!rsVI6Fc^Goegt(8LgGNO!mBqy$2c-I|0L;n1C|k)KIkb2Tu2g^?8gQ(HCX?WDDJ*)k1vSD;vz zr^xAPSPGR>lixFr_ACE0jiW)ge4fzW<+7=&rxnkoOt{dNFBsvfU-n-~pDpkTbjcD}U`072}qMBpV7; z^6f1`Xu4&BFp57Skkj3h_^INkvY@q$r`^8D&3NK%)wwe2@s@>YCYaz_I^*V6d z%L~T2U_>(E#XX2A@;M=WiG_aK5#BjqZv^aRTFhRRURA@%4nZX9vRwj_c_CsD1=T$rNNW)?RQFc-*?Caeb3@S)b)_6#jJ-r$5XDbf8Lt^_@-A zCHdA2MER$MwUV94bI^o_+^QVkWcPTmqbLzkw=Aop?*jj$broCT>jK%nwBXyV<(G%| zAt<6-Dq*jG^-R)qevoV`XrS+?&^mpoj#glXceA^COC7n-HdjSm(+4@(J?(YR_ zLFiK3lNK8!;t#-}ebsTb{62ThY_2_9ua=^Bn507`Lzhn_JSqz--wI|Ok8)r4k#B4| zo;OlNBaN$Tn_Lg~h12uSCEmhKg?jdm^w%!sDT5HtG_g?5S@b zEb~fM0YF#S-O}RZEF}@ad@PtIFL*N7#W0iR+hN~`}r@j;*6rgNY8{CqMym>jACN3`|l&AI*^A07pe;k&Q(?U&KJ(Py6qH`0k6+8$l1 z@bJARWtIPK8aySUBpeC&d&R5j~*r7I?0HYvZNCxONbqeE=5hgz2B&K1?i0N zDEFGyfP(m30qI^3QW)!sAGoYvOQgLUmKOKeyzKIbEBdRYLlzvWs^K)`qK@~&i_v@b z=rp5RT7YlZ=foyL^Bhhp$2w7ExnjyV!}*9K^#1e5k9XF0vwQ6pkLT?46bhriL1#lM zyUeXrV1w5O-1bsS3JyK@d34M0-?FdBOBD~5gkws29!Bi(6POb`E8bAA(3IuK`I~m# z6<*5+KHRy~Je}HVqxJLU1hjvj$(8IWr~;*{BVamSZqBNU0|vfSq7byJrHZSpcJ0b8 zj6%N3Y}i&U6wb5DX=*#&9pWJ5Tr%`W_!Cui36rJobR& zH6+?02K#{%bDt`r%)urv9Pi2981s0OTq?Y^U~V-#SHO;4z!g4O@E1D(;3k~8(oZZeHI^Up?40iW+Xp-2@Cfoe54s*h#Q4XK z`wf}Be)FTEUw`9g6e7u(5@v`J)+e3k;4-vz&fwrgJ+pLTOv+uI5qV&Y*~01TUsHaV zS0n$<0c`4zt+&s()dC)j+;C16eY&;+H)q^WVspKbXCn@qSSLHS;_?4Bn?_eSVD;H# zx;MRid#SAHwwS%cBXwWe?{U)P%Ces<69pdWNWX7{`KjIXH3pp@~!dS;kLPUk^rPw(hz*jUNP;VEhXzN z94d)_Cm~fHt|lQBjYmSNyEsxT;~XsusaZ-AKouTuGe; z(oX#JlY(q?T|T`eBR+_o$=g)`lvE%#%L|D7wvAt~ibYn~E>52ctjd7R8sD6&~v+*RtW3#>i^`3SYQBh6w0 z&%Z%$l6INd$FlRWF_YP1v5u45U^Qnccb`9hY7~zAe%dL&`OO2)A6?MU<>)t$#?xaW zxqVA+9npRu=@zCl*sX2*XgwN_baz{1Dm*)yk&CqYc#$0?@j?UpucBC?Dn`Ck(N8j<8}5hjcS2fF~uiTklKP{n?^^;cn9gDj6on<=_en;F#h$ z)v8j)hpD)+vu2{k$t<7jL&=Uk@RbgkFHagtuhbYKsCnAkA9GqoFQJ>3ia<4jl~^6) zC3=WT;8oDn>k6?nCNadMc&9t)8hgDiyqqdDD;DTwB0ybZId%9%4Jc@L=E=iTwGp_V za=Q5b==M^}j(feDdA+22r^R^47u`)6_JilEUMq%=R+Z6mt|Atq%x7I<=whbgKX20j-vuA_7u6 z&Xob!vD>LZQC${fHF7yGC+B!kRQ88X*+Q}`EB+2Ai=c#y}@^u$z|m(xy}dcHka zvFxIigV(EgSx-r#;lr7AYWk5-&JB4|j+k0gjNJ5zAv@0Wh@$3VPREwB*OX-*1fb zlPSR;d|Q6syLtHSJ<=k4OV$jdB;BkVvq8{i4by3=Tlv=f-cTBmitg-hz*#RmJ!H$Y zkgV!pTQ>uI+31i1Fjq>?laZ3raYnH@wcH&?n7js!%&;?%Cr^pxDwpE|PW-?C+(uv2 zP9y26aoE%7X)L63US#_qvzz0~A9X9m(=)J((23?5*Ghz0D`sDB0w}A z=`TosR)PcHBSzHR5F2*2w82SfW%{FAhT+CO2^}HnveHID4y}Y`%<|FL(C1r-Q6=GA z*wXE0v`X>{?dD8?0iZC025m5waPy|O<@xg;>b59C-YJ_=({>8ah5UW6I`=P1-$7*&OPg@pPth`Hj!-kg3 zZZ5~fj>hj=>fL6D-|K|vG7Ch$u*hNDS>$fq5CA#Fs!+gKm)57HQ~P>fg%1LZ$Uloi ztAg&@D)FwZ0Z;{-*e%#q?7&XQ-j+XUOBB2k3ZF5 z6w8sQLCd!h4ceuN24lWKf2SJCZI*xzp_01LsP3XaV=*H84)HeqSZ?HcT6#SX-Rg%-#H zN_o6l-Bh(a#R1W+HlteHAdtiFOj*n6qExrK;@|Uv^|pT7-NI<#ok%O)%9T5}3KW~G zY+7Egs^vUIG#$b?4oH6EQFd+Bw%f^B;7ui4P}_}F&AGBZ2Irz5hupZLPYY~nBwCO)IgSYSdZIHL`pU?Ketnrj5D6U8PLJG$VN|+OwpR{`WK4F-*?{8aySG2R_ z)2?_C=5m$TvPa0NYuk^N%C{}(SYW9ph<~y3wI*l0ouO$WRh;8Hcw2(F=Y{f}zwB%i zcLK~#$iGZv*)&2>2xyc_u?m}-MMy|^=<}obC(P{H--Zut*zg&PUb_F+>Bs52zX_?a zlYabr<8b_-cZqCTu{7q+=@5gB(wzNmc=$JPlI0>b*yO|gzkc(#FYo;A%ijYdKJ5g# zuHw^lcFf&Fgni-J#U<-%twr#}6JbEnUy0q+RYe_Y=FnT?3CNn)$Lm|(`FGdry zH|i;Aj^B2pSg!=;WcjxbpFjJpu2BeX7640FX*r~oEy+KU(UGndmt$)hl;>XsAdsVFmMJ8=tRA$&Ug zFjPKc4!CgtqRGdi_Aw#tgz^wUyCsz3ZDzH_?yKBF&UpYP>B{)seKL|@L2j*)PwiB# z>z-UsT$nJuls#bc#Zw)eHhYp%S;v_LNb@1PYq%iWLUhu7PuW`L&cFz!>mmMw#J(=I z1|dDWeR%uBA~NcSetnES8orzAj>bG~zPa6edB+Lrm%j(((u1vwg->t&jEdS&5i@@; z;@)E;>~w;6mrywqsO@5GHU=E#_Rj77+b6dl+t{*mVc(r z{pJs(h2&_*4qw0VuYaY9zw`6U-^Xuj?mj*u{l0P4X1a>tnohRh%mLkNF|W6Y@*rL> zN2f;A)^V2j>1`Bh<@8`OAtg&U@B&9&T)iE}67!aAfP~es+~w01{+L zUzKpPP2N`OTPiL{y(OCNRQPn113v=}PoU zrv(Jf$@hVTlRdj5z7jsF_*6)6|6cj3eyLBvc*=7oEZvm8 zr7ZNO}zveX;vk1gjb9x&lzb;PjF73KT8%J$d^F`6@5p5Hww< zcGIk5aCWJaq>b{+1;&R_aN`4~Nkn80WZoq%dxgC>dZe4L~ z$B*?i|D;npqt0m^O=H}+;AfS5UKM04JvycgF=NRbX?FeSupjwsm!)0eoXv8;lDI_e z)Ke+b)!9++i~GC|9gp;=1>`brfP=^+5l|<(WFot%%g*z( zw<2&OyWL0gcnI^8Z499yOdRTjQxhLVpR(A(-h2*0-Om?Uc9iWnRJZazZsrH!-JRwH<3We;6o!&`3;g zsx5hKg++>$<%(J?4fO3KEuguU-}M@9i!N$&adUpUj~ghllbL?jitg^{43R2i2hEU# zNTj@lbv9-5h$>0#Rp-ytajRU|dGGmOljs-f@KuA=T@G`#7h_-DbgP}*zovHbP_}PF z70Fj)T$Tr9?>$2k3GXGnUdy}LLsmbEbQHOZ-cnTOl4CAhB6ZuOU(TDdZO(TRfL5|? zHN!=)B%i_Xqh7gxs@0p$2?lTV9nYssvT ziIj5X&2{MoT+^F!xp(n~|8GXb)shFt(d5b#iA~%%I~@@(AUlZ%keO8HeqZ`P4tCjk zLI~i-MI~8JQO8~;;zyKNcs3AWK_FZ3+}IjU4~HlB>{Af5qJ40qz5S*8nF z|4kul#c)My?2nLfRk)TI0j^y5JH?X{)bCA1-WM^#*w$J8ue;$;4K zGKL{MN?o&8y1yyBH!bjXk+1Z{v=w^R<9{Aj{2%o6C0huBL)7Qm?w+~n_q0r}2GH?1 z5S%&{k)l|4EV>iY<|}QdRmAP(q*qXKAe>y`Z6e7Ax!+TrrFTv5JKw{B7N>siHuk=P zkcY3+4GMlD7(=4v<{y~Xg3!)+{a zxGxELzxi)pQvSw(Q*n2(o^u1YO-<~FFnFO|%AoFr+);KoIYi%RR-yGgp8aN^2vz>m zKYh?VnBF{K)-YR|bk8LC8RL+otd8#8o9Y|U#@u(Mlp1VRTM=E_PBgy16#vTA2?Hg! zds)eniz25Ic3ntvvWT~7u(MAN2bIgOv2L(foE+slC-6K_l;fJ#wA4gm zM42cnv1>zevxZw2+Y8LI4WFF59JsTbnQ%Mo!Mgay0`en=OTX~?#l_hL;n?cJcLd6u z6f>%c6)A3pCA=yo$nq})`E&(=`^Bjl39i+KykDp;Fo}3fm7YXA_2ukps zf4w>VS1Y(Rx_pCym^+vWr#6f8`T1A}M41>PJ4Z53qxOGxbNbn;RoOB7Mk5eux(R*J zYWe963tVp-_qNz&pdXVRGhq$H$a2Q^u~fv^!os2lflqe>>2ifm;{biYV7tv2bFNTe zce_F`hbXzYNP-Ila@^@PsW@dzHIbNPmIgo9V597|ib>?s?-M9Ps16WnHO43GQ~gUU zHeEGCl)0O$a*qGL;%tO5{;LQBVkaC4pJGPsdk?q5MHCb4Ko*tD6^Qb-nB9$Mbngk_jq3s61sMGZy=1H4bUM-=+F9-Sn$z)^GtwhO zbOo=M^Cy9FZdq}s+*}Wj%bLj;2@-S{4LXNHL`E3A5%cY)1+yB~rz*r**5%Vy_Q^s* z>wS2w-0_YEh7gEOOn_J{eAE`J;Jh>2dis)>$M!PHt%?EK$y!mTd{a4j7w(x&tgc#Z zJsHwX#!iHG6=!Brc(0skc%9YomIR|T-g(bXGamqYiPWu3uA`#2NcK( zM7h_AMm|Bb4pE}t?Tt8CeM)0dq_ERJ%c*B zL~pK@7;d{&?84z7jISqSX6R>xkXSh4mS(!FRbZ4_Avn6eK9dV2PLoeTaf_YB>|(YL zB!8El=}XpKP^eQoArt_Af6W|tKg-w1^SEs|=3Lh|`|Lmhl>O7Cs6lA=3Ezjb zt5AxTLh^W<4jHcQxJHp1gB1@zBjr@C3Y*rZ^HzCh213b&-NadE=M*Wj4arkD`L!bC z7$2X&nJAw)6&FNXbn(Q0Q1z;!v3FWq)qn$-(&4EW`7k{+O>j)SF0XrMFndQZf9s`< zKm2yEYDCpi-&Fd%=SBI)K*PG zM>B5a8LZ7dz;U>wn$X?-3;qr)zzUZm25)Q`4;4RL&M#OOX#&>`z zREG9S4{nQpBy{~K3l@(rth_O#^b9Aq6y_kp$A-@e?n$-iTJ{5_^~@TOg#`EUyUE2R_Z}lVToSxBc=&vKy;*tSL7F{owUcZD+nmxpG~l+ooYVZ)EDyry7eE`!m+JNugdgt<|z7H?#0v%GOo`~x=Ju(7*m={|X?6cR+$_z4iMC=GRgr6SWYW{`Ddqx@nkR{H8 zIk4uY>Fi4!p?z7lAN^&skh&nZu6*1YY;;xX3S}ax2mL7Xy3=S-q8X^K#L zax6d}=|pR9STZ0a3Yk|VCyNCYiYRFih8G^@a{3raqT)49nC0_A;yYnkEn}*g&l%#Q z6vWf_s!a8s)`nV=b%Qvvr-8QA(y zThF%%{FeSpzG0&95rVN0!~z$c*sK=zczvNUd0_FK+ewOW-k>qGsc0?^ZsS)VD9?n3 z1MUyFO)qGXWy9a2M7f5hMns%W-tcX}8#`v6(oI+RUTs29uPQc|pn)Zz(jxWmrHchz zz2SVb)tI?#)0dVV4=JfD``$}#MHbspBc=5*fzie7IrUy`V^TDslB=1t#jlpC1`IvNcp=s^vT+rQ+ zzl29{@o-j=vTlF!rf~y&ON3x1c9!VeR3BUaj>^LvpzbKI-FMG-g93*z#{ea{iN>B? zT=B}bC}$E9nTx?-z{A=+Y(Mwg*BMN_vA(|ED7(z-le71KRBHJ|&QRJr1!xZQdojZy z^|QU-s$?yi<<@4F_<^gtyZJqtEUkLY2 z`>-^Gv14QiSRmVUijc3hFWS`awL+cuPYBbQARIPM0tmrNV|UG7h(YyGsnXzFTSHPHW)`Bp&2ngnCl*>)jVZ>EL_! z0ccIlsLtBhp7$fdz=d)a5jBhiX*}>9AHC13=Aak86J4QGgi;CMfDc&`M;c)w<6wFj z{os2`_({J%jxnoC2ZSFnh8SHdw56&?7`TaT1e~3mXlVvAsq_%z$@87(n;@y@`MNdO z+}&H-e)v6`p`^X>hcABmfrrIz`HlojXBYPB@z(bGcWjIcQi1D)4z_c7PSioSXI7=S zKj#zWzT14UN0$CQt^sIPY@-IXulpQ7YY%iXb*E1-}3B;o24#jO;uga>^KrhR!-olZC&ueXiMg`r{Utusvqq z(u(<|nv?gWnuiYTT^dA{AT8Sqrxk4xJC+$`wzeMb{qPJjQzq^F`~Y^P$ixGKVkLI^ zC4SiX$=_~gFU~K#aYgi4Tk$@-aDE|UBIiMS?|-sot42Y@^2OeV*Z8#{ZW?K}kQEzm zDBkr)c<#;E+ugODCp){_FCMbmrS>I0M+e+p3ajzs#^%>w%}?9=$tg!jTF`q>A8fBZ z?Cj^%NH?`*=029qt$O;ztjzgf*RQ*!kd32P&Ej*=<{~)0ZM;E?+3#tbUy~ zd_)85&(G%1XsaKv@3r$iM;$qU5szc!Ax&VQ6?4O^x2HLPA&TdN=f#?<1`Sm&fo|>YOOCv-n!o9TL;DEaj43DK7WKZji#CRNek?la znn=8KhU!V-zxH7uFmm+-Yf;&h98$M%=KfkzE1UO9&MmSX0sv4jwNgte)A2!)-?N~cwXcepuIXeL9_F)JxEB092TM`h^GIQzg2f=IYngUyqI z2S>SLvPrW~hn^6Gvaica5Iux%^^*{JeLVvmYqiB2mweubV(M{JH(|u`9$aGn^Gk66wh|s~=zG7<3V{y!icnpkN8LnO5N0%K6AhnK` z%3ZH37!1vVa1Xbw0ap7C>)}^cR z4*m?wtmyLAh~qtkmIh^rZSrT!!C&HiBN*EkI^@9&^$pgClTF%{+v=uL&^$+BwN3ngu z6YJPuE2Ab_YHPcC{;?6^?RAvKAQov9PF>>GAT*&R3`#sZl_A+6y6Vu9N)=a2WHIKv zKqHbX5zNLG?~8r4S0c@k;hXa+bg>N#eL8}Bh)NKNqN4()@h^DDBDutt1VJld&b+Ig zfuP~kz&q`Atb*LSu!WUFRLA)S;ou@+ z)3P0i`{z*X`Ctd5vK`To&}Y2NwvEYwwuHWQn7*~51Nu%(#)|dSk_h#m?y&dCmlK{> z2NN4zn@$!oXr2qgChj1z!3puU$_&lgDY^;N1$M zH^_8Ea!|f%`VAp^rGjtkUX6~Rw4~un;zHFj6ARtH8s5!mw+FwbZrc}`C{X})=-7>? z6J@)YG?*Ql@5r!q0ju4b5$Z&C2Nw>%b~DQg1XHB6C`M}Q790>217KdZitb;%(dn>{ zvXH4G+_mOiwUmL3ZZ~CX$;QXc=H9kcVdKCi3%ODh{3Il1y)d!U6x}#v<0KN2Sf7k4 zEJM2oqn4KqVdjdm8;{nWaG&{;_1(4aUvTkl(rp>Gc3mKeb&J>%;uj{PQ_gbAIth}* zLWV5cuaiEv1Z!1XKnqurbYwKgxz@5~?M(||)1^K}&ovhF^*naigwrLq?e4e)<%@G9 zbtObG@>%g&QXvV8yBLh&5lRu~0mZcnCDAhXCasdNOR=Immk=sRXfc&|rrhXzWnh$X z$Uu$W;kE(^n;MBLxx%-oG7Br{%$n1*T5$-L(jQQY3Qhuv5h@+6JJ zdu=On;Tg#;)gkQ|eUVPI`CW`7$CSTT=&r^2@)k|k-zxUts`oMhFRcF9&kTKrKdE0p z6Ak@JlTcfoRmb|l`rY{k3y2l^$%5LTZkNK!(0HZ6md+?c#OGbUq->aF8LMr{k{6@;oI~7#zOt! z@7!i}K>Ci&v#sgQ>>c;Fb?;nj$_;$cOuAkDr`?s>>wGo{D2ZI7OD=9(Uc}*Cqlgc% ziMv{c9!v7-+7(BqzouxfnX4;LPKQ24Zm=WCB5Yc#R}x*+6NCK%mm#J4#4G#3`eCP&wid8yRUEbG4-%3b$)x_PH- zm$5@io$3!piq}=s;4}EzUSBz(xpNUMOiB>W=SrMWRlm zFB==R%}}VWQqK+pQ>3A!d);&*Iecu%yu->JEqA&Y=M!_6eCD}KIFKgex7pnTvk?4n ztin6%5&Ox@)eb~Z&~IcU99|j8PhhlexG{SOXz^k2vO4FIhhp^N)xeQTLjdVUD9rE+ z_pnBs#m^sfT8>S2$kF|uXF|cNN?)iHRq93TrxQ*B%koU7s{`HDbwcBKeFxR*f@%Q- z4iAs5-f2~CH-m5)aO&Zh-E!Kj?QZ`5cQ8J@m3Gzve=S!O>CB%t44M`QK8tL8Q7i=a z6#1?0jX}tI9+{aUnTJ1{LunkR2%~tmPp}&P8Ef7!&ud2N3_oen_}LBh&@KK7(LfAh zo%fv|d!rn>^YHWuQrrIP!#zbv?hz`mhohW=l?ANxmTX}2Z|#6`6@1gm;U$cm=>Y>E z7wB2&u_)Y}K$mAphsOqHvLGG|6bTCCZU8$#>gZ;g$H{o~ZafHWP-YIlVbGWHbPR!+ zyhb{y)q)cI*zQ$YQDocCQ1w3+*F#ds;h*~e%4sTk&N?0~eIHtmk)~duPB^}Bi?(AQ zCRu_?c6;u10;tJrR~67`dhf}OMKnV)FrzfR7S1D0gw0J_a2pP1?P215{%~*mhqWF| zI>qX;b=2M>koI0Ld&4VbSx#*6vT9bUUyu2f!aD7x(#}|yv?*feYlBSc92!c`62Ml&49JzxJU=1y&&6pwq!tS%kPC|{qE=pB-@Hkx*j0WHCdPdMYH=KLf8oI3;8PdJDAFQF2gSmO`tx9qc#GD@H1R5*^fRf5tJ-LxvtBSFV zm>RIh_iacc%E-nUV7CzaNnZp2xeWm{2z@So2GtT$yFD(Lf5-JzH1h-9ZTZE!Gom(i zlbmdd#7%Lu#!pDAjY|@xfMn?NHuhkVk2cnxKL2k0r$Ocfg5hZk*(Tr-5wRT49Yjz4mrt!v4=;Sju_946 z(8ljW7$i<=%`y(y){pKDY#;7Hr}r+;_6}wjI6N-*u!xPP=c5Ax{JafupfXi{RddwD z#qASKpgpCiKjra z>9r+60sZO3Yc>ayivyx0FW6xw+EBqMV#+o*qD}5381I$Lyipq)b8E;5AFxk=RxS!v z6YK1|*P{z=OuJY-T@H(boMtHyOpGiiC()&-crrrP&M8>D99fcMx>?X<89)BFxIab8 zu4^n_zW|TnYf|@RIkF-|U0inY$O=o!>h;EpULW(k{Pb+bb+>iTub#@w(NU~c1P1c} zf~{>7liim1)Ox-rm2129*qgk<2|^z9+D=wZTKbJ|{p_gyDRPdnUeDZ~SqQy9^mi$# zU)qVK*YJWtdfj^P?C1Eypha($jwX0s9coZ?Lm^Rlw@46LJ0NCZN=W$@17g=xv{1X7 z2G++G)}4Cb>;x7pv z9#)CoVBv?C-N$l3l_!o>153~ljJ*0D2~7O;gzedW%U7&{$33uDj@g+f=ZcnID5b?l z!Dp?L*eP5H>@v~9nq&=%CF<1T21hz?#T7WHk*N^YbZ0nhZXU3iAxGh0tlr9HVU&B( zyI8bbBN;pr%}faO>m`IM^D1~=PxjfL{J2S&pBy*+kH-Hz*L6~eVNe|BrTm{U2%tu z56Ht-P`&cb7uzhIhT=B z>fOK*WO1i_d!J)a8#Q*HlWr@jA=6b3@e%)ZnSb*@mHB`N7GMxqyt+S~b|0LcybX1( z^I`!0&f48_I^!DO*mZitFVi5bm>6dHlBJ?S3sV|I(x?i#^U>PQW`@h84Y9m3i&#ub zc^Pmm)8)V|Ii?=jL65|PqNEw}+WW-$9y_fM5n5qREVo5`jU@Qw`~_rwS0?GwTwC6T zTDs$fZ8>1zr$;ATb?;@ngs82b-9_2)riz>4(`DEZ{}SLU0k1eg#r#lHb7I-MXuPX8 zp7~J`i<2)I*px&eLp7w9W5Ukl=0?iVTS%S*S!{dNN*s>4%hbH8YcbdgNRQGi+!9x-hv((%A4ggr2||&GM%__B&e{_ zYqO9H^1y5ng@POpj(cI!*jNdFqy04L-56vYxI|pnz+tTEj4*44oyDZvas&Zm4D{Lp zL)S41hwr3Ptmi@3p7pIn*Gnoi`dqy(_F)BI`4P}ae&OTmtYuuuO2jxG?A8T5R~KM{2;&H0iLLbi7ba>d?f^<-Td7Q4`>v& zUskG{vdW)-%NrBk%PoA%YL_!E)|A)Iltb!4z-ix>9@vO|j-%8-A|!$$iM8P&tvpF4 zHO-D5$hflFGL%lC_OVx9qkXt|29IFss-)MtNtYSDr!~atNiFrqkia&@gu<30(`zns zBv%2=dSR}Go@U$K1bK|vQ{(u0+v^|5@~yri>KhiY~Nkn4V`nD z6*`0}+Pnt;P8330;wQ@vG#k@6dMrz`ajoD0Ufg=u(sHNsgZ2*{^2`f^z>O3EybEsCnR@=@L#g?er`d z>w0H|DZ;x`m=8;~%bDZ7x1)nMSelyA{`Bl*b~!L(B)#e0!Wq}hOcm|6%H)z0BK)e! zN*TQL3V2ahk`Auxt0Y`XvMp?~?Nl~Q5vMbXS|p*`g|U?3*9p@@AgNQ&^KF-T3o?v={6>tv@XbQarFICPF1^QqxqQYI#6-o z&$87hCk)1S}n-!8bNb?z-F-0i18dUbEg@wN-z=Ftny&%2pMvb#}eZoCdJQP<$L zSf7N$vEadjm@AdGa1pmx+4?94rS01;z;{q^PUlZ9KU#=G`_k)MjkyhEy@)`?s!0WV z94VwJ0vsi~id9xc9IDliV2vdOEY`qXeW;B^er)@v#^eJ!24yKhtDyvO0n7npF@=?! zxl-0fjKTLGD(+z^-CoR2A#!8kDLe7s-|Y|V3%8hBV0(WC)bHda!}V%vY(QrRKQx>I0DU6OQl?DSwzF|wvlp*x*u^^HYMF$--0vK~Rjdc$<` zW-A};uG2v#uv&hEl;IzU5cY?xwxW*6?g}2l1HvuM_a_qTfQxTxO@FNjMA%HGi}$wwv|44JJ^Owv!=KYvSwpbw1?4 z7Ew$^7R<})*QS>w(>5@a8e{JoQZ+IrL8}wGKYYzo=WF-Cw8Ikau*~*PaFR#(Q&m|oW8X)ieM*cJnVP^9KO8n zkc#~=1Xx!4Si!&oSsN#o)4;{7_Kc2O3tr, 2008,2009. +# +msgid "" +msgstr "" +"Project-Id-Version: binutils 2.19.1\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2008-09-09 15:56+0930\n" +"PO-Revision-Date: 2009-05-26 08:00+0700\n" +"Last-Translator: Arif E. Nugroho \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: addr2line.c:76 +#, c-format +msgid "Usage: %s [option(s)] [addr(s)]\n" +msgstr "Penggunaan: %s [pilihan] [alamat]\n" + +#: addr2line.c:77 +#, c-format +msgid " Convert addresses into line number/file name pairs.\n" +msgstr " Mengubah alamat kedalam pasangan nomor baris / nama berkas.\n" + +#: addr2line.c:78 +#, c-format +msgid " If no addresses are specified on the command line, they will be read from stdin\n" +msgstr " Jika tidak ada alamat yang dispesifikasikan dalam baris perintah, mereka akan dibaca dari stdin\n" + +#: addr2line.c:79 +#, c-format +msgid "" +" The options are:\n" +" @ Read options from \n" +" -b --target= Set the binary file format\n" +" -e --exe= Set the input file name (default is a.out)\n" +" -i --inlines Unwind inlined functions\n" +" -j --section= 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" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Pilihan adalah:\n" +" @ Baca pilihan dari \n" +" -b --target= Set format berkas binary\n" +" -e --exe=executable> Set nama berkas masukan (baku a.out)\n" +" -i --inlines Buka fungsi inline\n" +" -j --section= Baca section-relative ofset daripada alamat\n" +" -s --basenames Strip nama direktori\n" +" -f --functions Tampilkan nama fungsi\n" +" -C --demangle[=style] Demangle nama fungsi\n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan versi aplikasi\n" +"\n" + +#: addr2line.c:94 ar.c:274 coffdump.c:469 dlltool.c:3173 dllwrap.c:510 +#: nlmconv.c:1113 objcopy.c:513 objcopy.c:548 readelf.c:2868 size.c:99 +#: srconv.c:1741 strings.c:664 sysdump.c:654 windmc.c:233 windres.c:698 +#, c-format +msgid "Report bugs to %s\n" +msgstr "Laporkan bugs ke %s\n" + +#: addr2line.c:281 +#, c-format +msgid "%s: cannot get addresses from archive" +msgstr "%s: tidak dapat memperoleh alamat dari archive" + +#: addr2line.c:298 +#, c-format +msgid "%s: cannot find section %s" +msgstr "%s: tidak dapat menemukan daerah %s" + +#: addr2line.c:364 nm.c:1542 objdump.c:3223 +#, c-format +msgid "unknown demangling style `%s'" +msgstr "gaya demangling `%s' tidak diketahui" + +#: ar.c:212 +#, c-format +msgid "no entry %s in archive\n" +msgstr "tidak ada masukan %s dalam archive\n" + +#: ar.c:228 +#, c-format +msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" +msgstr "Penggunaan: %s [pilihan emulasi] [-]{dmpqrstx}[abcfilNoPsSuvV] [nama-anggota] [jumlah] berkas-archive berkas...\n" + +#: ar.c:231 +#, c-format +msgid " %s -M [ - read options from \n" +msgstr " @ - baca pilihan dari \n" + +#: ar.c:262 +#, c-format +msgid "Usage: %s [options] archive\n" +msgstr "Penggunaan: %s [pilihan] archive\n" + +#: ar.c:263 +#, c-format +msgid " Generate an index to speed access to archives\n" +msgstr " Buat sebuah indeks untuk mempercepat akses ke archive\n" + +#: ar.c:264 +#, c-format +msgid "" +" The options are:\n" +" @ Read options from \n" +" -t Update the archive's symbol map timestamp\n" +" -h --help Print this help message\n" +" -v --version Print version information\n" +msgstr "" +" Pilihan adalah:\n" +" @ Baca pilihan dari \n" +" -t Update archive peta simbol tanda-waktu\n" +" -h --help Tampilkan pesan bantuan ini\n" +" -v --version Tampilkan informasi versi\n" + +#: ar.c:499 +msgid "two different operation options specified" +msgstr "dua pilihan operasi berbeda dispesifikasikan" + +#: ar.c:577 +#, c-format +msgid "illegal option -- %c" +msgstr "pilihan tidak legal -- %c" + +#: ar.c:620 +msgid "no operation specified" +msgstr "tidak ada operasi yang dispesifikasikan" + +#: ar.c:623 +msgid "`u' is only meaningful with the `r' option." +msgstr "`u' hanya berarti dengan pilihan `r'." + +#: ar.c:631 +msgid "`N' is only meaningful with the `x' and `d' options." +msgstr "`N' hanya berarti dengan pilihan `x' dan `d'." + +#: ar.c:634 +msgid "Value for `N' must be positive." +msgstr "Nilai untuk `N' harus positif." + +#: ar.c:646 +msgid "`x' cannot be used on thin archives." +msgstr "`x' tidak dapat digunakan dalam archive tipis." + +#: ar.c:687 +#, c-format +msgid "internal error -- this option not implemented" +msgstr "internal error -- pilihan ini tidak terimplementasi" + +#: ar.c:756 +#, c-format +msgid "creating %s" +msgstr "membuat %s" + +#: ar.c:805 ar.c:860 ar.c:1185 objcopy.c:1912 +#, c-format +msgid "internal stat error on %s" +msgstr "internal stat error di %s" + +#: ar.c:809 +#, c-format +msgid "" +"\n" +"<%s>\n" +"\n" +msgstr "" +"\n" +"<%s>\n" +"\n" + +#: ar.c:825 ar.c:893 +#, c-format +msgid "%s is not a valid archive" +msgstr "%s bukan sebuah archive valid" + +#: ar.c:1090 +#, c-format +msgid "No member named `%s'\n" +msgstr "Tidak ada anggota bernama `%s'\n" + +#: ar.c:1140 +#, c-format +msgid "no entry %s in archive %s!" +msgstr "tidak ada masukan %s dalam archive %s!" + +#: ar.c:1279 +#, c-format +msgid "%s: no archive map to update" +msgstr "%s: tidak ada peta archive untuk update" + +#: arsup.c:89 +#, c-format +msgid "No entry %s in archive.\n" +msgstr "Tidak ada masukan %s dalam archive.\n" + +#: arsup.c:114 +#, c-format +msgid "Can't open file %s\n" +msgstr "Tidak dapat membuka berkas %s\n" + +#: arsup.c:164 +#, c-format +msgid "%s: Can't open output archive %s\n" +msgstr "%s: Tidak dapat membuat keluaran archive %s\n" + +#: arsup.c:181 +#, c-format +msgid "%s: Can't open input archive %s\n" +msgstr "%s: Tidak dapat membuak masukan archive %s\n" + +#: arsup.c:190 +#, c-format +msgid "%s: file %s is not an archive\n" +msgstr "%s: berkas %s bukan sebuah archive\n" + +#: arsup.c:230 +#, c-format +msgid "%s: no output archive specified yet\n" +msgstr "%s: belum ada keluaran archive yang dispesifikasikan\n" + +#: arsup.c:250 arsup.c:288 arsup.c:330 arsup.c:350 arsup.c:416 +#, c-format +msgid "%s: no open output archive\n" +msgstr "%s: tidak ada keluaran archive\n" + +#: arsup.c:261 arsup.c:371 arsup.c:397 +#, c-format +msgid "%s: can't open file %s\n" +msgstr "%s: tidak dapat membuka berkas %s\n" + +#: arsup.c:315 arsup.c:393 arsup.c:474 +#, c-format +msgid "%s: can't find module file %s\n" +msgstr "%s: tidak dapat menemukan berkas module %s\n" + +#: arsup.c:425 +#, c-format +msgid "Current open archive is %s\n" +msgstr "Open archive sekarang adalah %s\n" + +#: arsup.c:449 +#, c-format +msgid "%s: no open archive\n" +msgstr "%s: tidak ada open archive\n" + +#: bin2c.c:59 +#, c-format +msgid "Usage: %s < input_file > output_file\n" +msgstr "Penggunaan: %s < input_file > output_file\n" + +#: bin2c.c:60 +#, c-format +msgid "Prints bytes from stdin in hex format.\n" +msgstr "Tampilkan bytes dari stdin dalam format hex.\n" + +#: binemul.c:38 +#, c-format +msgid " No emulation specific options\n" +msgstr " Tidak ada pilihan spesifik emulasi\n" + +#. Macros for common output. +#: binemul.h:43 +#, c-format +msgid " emulation options: \n" +msgstr " pilihan emulasi: \n" + +#: bucomm.c:157 +#, c-format +msgid "can't set BFD default target to `%s': %s" +msgstr "tidak dapat menset default target BFD ke `%s': %s" + +#: bucomm.c:168 +#, c-format +msgid "%s: Matching formats:" +msgstr "%s: Format yang cocok:" + +#: bucomm.c:183 +#, c-format +msgid "Supported targets:" +msgstr "Target yang didukung:" + +#: bucomm.c:185 +#, c-format +msgid "%s: supported targets:" +msgstr "%s: target yang didukung:" + +#: bucomm.c:202 +#, c-format +msgid "Supported architectures:" +msgstr "Arsitektur yang didukung:" + +#: bucomm.c:204 +#, c-format +msgid "%s: supported architectures:" +msgstr "%s: arsitektur yang didukung:" + +#: bucomm.c:398 +#, c-format +msgid "BFD header file version %s\n" +msgstr "versi berkas header BFD %s\n" + +#: bucomm.c:547 +#, c-format +msgid "%s: bad number: %s" +msgstr "%s: nomor buruk: %s" + +#: bucomm.c:564 strings.c:410 +#, c-format +msgid "'%s': No such file" +msgstr "'%s': Tidak ada berkas seperti itu" + +#: bucomm.c:566 strings.c:412 +#, c-format +msgid "Warning: could not locate '%s'. reason: %s" +msgstr "Peringatan: Tidak dapat menemukan '%s'. alasan: %s" + +#: bucomm.c:570 +#, c-format +msgid "Warning: '%s' is not an ordinary file" +msgstr "Peringatan: '%s' bukan sebuah berkas biasa" + +#: coffdump.c:106 +#, c-format +msgid "#lines %d " +msgstr "#baris %d " + +#: coffdump.c:460 sysdump.c:647 +#, c-format +msgid "Usage: %s [option(s)] in-file\n" +msgstr "Penggunaan: %s [pilihan] in-berkas\n" + +#: coffdump.c:461 +#, c-format +msgid " Print a human readable interpretation of a SYSROFF object file\n" +msgstr " Tampilkan dalam interpretasi yang mudah dipahami dari sebuah berkas objek SYSROFF\n" + +#: coffdump.c:462 +#, c-format +msgid "" +" The options are:\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Pilihan adalah:\n" +" @ Baca pilihan dari \n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan versi aplikasi\n" +"\n" + +#: coffdump.c:531 srconv.c:1831 sysdump.c:711 +msgid "no input file specified" +msgstr "tidak ada berkas masukan yang dispesifikasikan" + +#: cxxfilt.c:119 nm.c:256 objdump.c:241 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Laporkan bugs ke %s.\n" + +#: debug.c:647 +msgid "debug_add_to_current_namespace: no current file" +msgstr "debug_add_to_current_namespace: tidak ada berkas sekarang" + +#: debug.c:726 +msgid "debug_start_source: no debug_set_filename call" +msgstr "debug_start_source: tidak ada debug_set_filename call" + +#: debug.c:782 +msgid "debug_record_function: no debug_set_filename call" +msgstr "debug_record_function: tidak ada debug_set_filename call" + +#: debug.c:834 +msgid "debug_record_parameter: no current function" +msgstr "debug_record_parameter: tidak ada fungsi sekarang" + +#: debug.c:866 +msgid "debug_end_function: no current function" +msgstr "debug_end_function: tidak ada fungsi sekarang" + +#: debug.c:872 +msgid "debug_end_function: some blocks were not closed" +msgstr "debug_end_function: beberapa blok tidak ditutup" + +#: debug.c:900 +msgid "debug_start_block: no current block" +msgstr "debug_start_block: tidak ada blok sekarang" + +#: debug.c:936 +msgid "debug_end_block: no current block" +msgstr "debug_end_block: tidak ada block sekarang" + +#: debug.c:943 +msgid "debug_end_block: attempt to close top level block" +msgstr "debug_end_block: mencoba menutup tingkat teratas blok" + +#: debug.c:966 +msgid "debug_record_line: no current unit" +msgstr "debug_record_line: tidak ada satuan sekarang" + +#. FIXME +#: debug.c:1019 +msgid "debug_start_common_block: not implemented" +msgstr "debug_start_common_block: tidak terimplementasi" + +#. FIXME +#: debug.c:1030 +msgid "debug_end_common_block: not implemented" +msgstr "debug_end_common_block: tidak terimplementasi" + +#. FIXME. +#: debug.c:1114 +msgid "debug_record_label: not implemented" +msgstr "debug_record_label: tidak terimplementasi" + +#: debug.c:1136 +msgid "debug_record_variable: no current file" +msgstr "debug_record_variabel: tidak ada berkas sekarang" + +#: debug.c:1664 +msgid "debug_make_undefined_type: unsupported kind" +msgstr "debug_make_undefined_type: kind tidak didukung" + +#: debug.c:1841 +msgid "debug_name_type: no current file" +msgstr "debug_name_type: tidak ada berkas sekarang" + +#: debug.c:1886 +msgid "debug_tag_type: no current file" +msgstr "debug_tag_type: tidak ada berkas sekarang" + +#: debug.c:1894 +msgid "debug_tag_type: extra tag attempted" +msgstr "debug_tag_type: ekstra tag dicoba" + +#: debug.c:1931 +#, c-format +msgid "Warning: changing type size from %d to %d\n" +msgstr "Peringatan: mengubah ukuran tipe dari %d ke %d\n" + +#: debug.c:1953 +msgid "debug_find_named_type: no current compilation unit" +msgstr "debug_find_named_type:: tidak ada satuan kompilasi sekarang" + +#: debug.c:2056 +#, c-format +msgid "debug_get_real_type: circular debug information for %s\n" +msgstr "debug_get_real_type: circular informasi debug untuk %s\n" + +#: debug.c:2483 +msgid "debug_write_type: illegal type encountered" +msgstr "debug_write_type: tipe tidak legal ditemui" + +#: dlltool.c:797 dlltool.c:823 dlltool.c:854 +#, c-format +msgid "Internal error: Unknown machine type: %d" +msgstr "Internal error: tipe mesin tidak diketahui: %d" + +#: dlltool.c:890 +#, c-format +msgid "Can't open def file: %s" +msgstr "Tidak dapat membuka berkas def: %s" + +#: dlltool.c:895 +#, c-format +msgid "Processing def file: %s" +msgstr "Memproses berkas def: %s" + +#: dlltool.c:899 +msgid "Processed def file" +msgstr "Berkas def telah diproses" + +#: dlltool.c:923 +#, c-format +msgid "Syntax error in def file %s:%d" +msgstr "Sintaks error dalam berkas def %s: %d" + +#: dlltool.c:958 +#, c-format +msgid "%s: Path components stripped from image name, '%s'." +msgstr "%s: Path komponen stripped dari nama gambar, '%s'." + +#: dlltool.c:967 +#, c-format +msgid "NAME: %s base: %x" +msgstr "NAMA: %s dasar: %x" + +#: dlltool.c:970 dlltool.c:986 +msgid "Can't have LIBRARY and NAME" +msgstr "Tida dapat memiliki PERPUSTAKAAN dan NAMA" + +#: dlltool.c:983 +#, c-format +msgid "LIBRARY: %s base: %x" +msgstr "PERPUSTAKAAN: %s dasar: %x" + +#: dlltool.c:1219 resrc.c:293 +#, c-format +msgid "wait: %s" +msgstr "tunggu: %s" + +#: dlltool.c:1224 dllwrap.c:410 resrc.c:298 +#, c-format +msgid "subprocess got fatal signal %d" +msgstr "subproses mendapat sinyal fatal %d" + +#: dlltool.c:1230 dllwrap.c:417 resrc.c:305 +#, c-format +msgid "%s exited with status %d" +msgstr "%s keluar dengan status %d" + +#: dlltool.c:1261 +#, c-format +msgid "Sucking in info from %s section in %s" +msgstr "Suckin dalam info dari %s daerah dalam %s" + +#: dlltool.c:1386 +#, c-format +msgid "Excluding symbol: %s" +msgstr "Mengabaikan simbol: %s" + +#: dlltool.c:1475 dlltool.c:1486 nm.c:992 nm.c:1003 +#, c-format +msgid "%s: no symbols" +msgstr "%s: tidak ada simbol" + +#. FIXME: we ought to read in and block out the base relocations. +#: dlltool.c:1512 +#, c-format +msgid "Done reading %s" +msgstr "Selesai membaca %s" + +#: dlltool.c:1522 +#, c-format +msgid "Unable to open object file: %s" +msgstr "Tidak dapat membuka berkas objek: %s" + +#: dlltool.c:1525 +#, c-format +msgid "Scanning object file %s" +msgstr "Menskan berkas objek %s" + +#: dlltool.c:1540 +#, c-format +msgid "Cannot produce mcore-elf dll from archive file: %s" +msgstr "Tidak dapat menghasilkan mcore-elf dll dari berkas archive: %s" + +#: dlltool.c:1626 +msgid "Adding exports to output file" +msgstr "Menambahkan ekspor ke berkas keluaran" + +#: dlltool.c:1674 +msgid "Added exports to output file" +msgstr "Menambahkan ekspor ke berkas keluaran" + +#: dlltool.c:1813 +#, c-format +msgid "Generating export file: %s" +msgstr "Menghasilkan berkas ekspor: %s" + +#: dlltool.c:1818 +#, c-format +msgid "Unable to open temporary assembler file: %s" +msgstr "Tidak dapat membuka berkas perakit sementara: %s" + +#: dlltool.c:1821 +#, c-format +msgid "Opened temporary file: %s" +msgstr "Berkas sementara terbuka: %s" + +#: dlltool.c:2043 +msgid "Generated exports file" +msgstr "Menghasilkan berkas ekspor" + +#: dlltool.c:2251 +#, c-format +msgid "bfd_open failed open stub file: %s" +msgstr "bfd_open gagal membuka berkas stub: %s" + +#: dlltool.c:2254 +#, c-format +msgid "Creating stub file: %s" +msgstr "Membuat berkas stub: %s" + +#: dlltool.c:2672 +#, c-format +msgid "failed to open temporary head file: %s" +msgstr "gagal membuka berkas sementara head: %s" + +#: dlltool.c:2734 +#, c-format +msgid "failed to open temporary tail file: %s" +msgstr "gagal membuka berkas sementara tail: %s" + +#: dlltool.c:2809 +#, c-format +msgid "Can't open .lib file: %s" +msgstr "Tidak dapat membuka berkas .lib: %s" + +#: dlltool.c:2812 +#, c-format +msgid "Creating library file: %s" +msgstr "Membuat berkas perpustakaan: %s" + +#: dlltool.c:2896 dlltool.c:2902 +#, c-format +msgid "cannot delete %s: %s" +msgstr "tidak dapat menghapus %s: %s" + +#: dlltool.c:2907 +msgid "Created lib file" +msgstr "Membuat berkas lib" + +#: dlltool.c:2986 +#, c-format +msgid "Warning, ignoring duplicate EXPORT %s %d,%d" +msgstr "Peringatan, mengabaikan duplikasi EXPORT %s %d,%d" + +#: dlltool.c:2992 +#, c-format +msgid "Error, duplicate EXPORT with ordinals: %s" +msgstr "Error, duplikasi EXPORT dengan ordinals: %s" + +#: dlltool.c:3097 +msgid "Processing definitions" +msgstr "Memproses definisi" + +#: dlltool.c:3129 +msgid "Processed definitions" +msgstr "Definisi telah terproses" + +#. xgetext:c-format +#: dlltool.c:3136 dllwrap.c:471 +#, c-format +msgid "Usage %s \n" +msgstr "Penggunaan %s \n" + +#. xgetext:c-format +#: dlltool.c:3138 +#, c-format +msgid " -m --machine Create as DLL for . [default: %s]\n" +msgstr " -m --machine Buat sebagai DLL untuk . [baku: %s]\n" + +#: dlltool.c:3139 +#, c-format +msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" +msgstr " mungkin: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" + +#: dlltool.c:3140 +#, c-format +msgid " -e --output-exp Generate an export file.\n" +msgstr " -e --output-expt Hasilkan sebuah berkas ekspor.\n" + +#: dlltool.c:3141 +#, c-format +msgid " -l --output-lib Generate an interface library.\n" +msgstr " -l --output-lib Hasilkan sebuah perpustakaan antar-muka.\n" + +#: dlltool.c:3142 +#, c-format +msgid " -a --add-indirect Add dll indirects to export file.\n" +msgstr " -a --add-indirect Tambahkan dll tidak langsung ke berkas ekspor.\n" + +#: dlltool.c:3143 +#, c-format +msgid " -D --dllname Name of input dll to put into interface lib.\n" +msgstr " -D --dllname Nama dari masukan dll ke put dalam antar-muka lib.\n" + +#: dlltool.c:3144 +#, c-format +msgid " -d --input-def Name of .def file to be read in.\n" +msgstr " -d --input-def Nama dari berkas .def yang akan dibaca.\n" + +#: dlltool.c:3145 +#, c-format +msgid " -z --output-def Name of .def file to be created.\n" +msgstr " -z --output-def Nama dari berkas .def yang akan dibuat.\n" + +#: dlltool.c:3146 +#, c-format +msgid " --export-all-symbols Export all symbols to .def\n" +msgstr " --export-all-symbols Ekspor seluruh simbol ke .def\n" + +#: dlltool.c:3147 +#, c-format +msgid " --no-export-all-symbols Only export listed symbols\n" +msgstr " --no-export-all-symbols Hanya ekspor simbol yang terdaftar\n" + +#: dlltool.c:3148 +#, c-format +msgid " --exclude-symbols Don't export \n" +msgstr " --exclude-symbols Jangan ekspor \n" + +#: dlltool.c:3149 +#, c-format +msgid " --no-default-excludes Clear default exclude symbols\n" +msgstr " --no-default-excludes Hapus default exclude symbols\n" + +#: dlltool.c:3150 +#, c-format +msgid " -b --base-file Read linker generated base file.\n" +msgstr " -b --base-file Baca berkas dasar yang dihasilkan linker.\n" + +#: dlltool.c:3151 +#, c-format +msgid " -x --no-idata4 Don't generate idata$4 section.\n" +msgstr " -x --no-idata4 Jangan hasilkan daerah idata$4.\n" + +#: dlltool.c:3152 +#, c-format +msgid " -c --no-idata5 Don't generate idata$5 section.\n" +msgstr " -c --no-idata5 Jangan hasilkan daerah idata$5.\n" + +#: dlltool.c:3153 +#, c-format +msgid " -U --add-underscore Add underscores to all symbols in interface library.\n" +msgstr " -U --add-underscore Tambahkan garis-bawah ke semua simbol dalam antar-muka perpustakaan.\n" + +#: dlltool.c:3154 +#, c-format +msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n" +msgstr " --add-stdcall-underscore Tambahkan garis-bawah ke stdcall simbol dalam antar-muka perpustakaan.\n" + +#: dlltool.c:3155 +#, c-format +msgid " -k --kill-at Kill @ from exported names.\n" +msgstr " -k --kill-at Matikan @ dari nama terekspor.\n" + +#: dlltool.c:3156 +#, c-format +msgid " -A --add-stdcall-alias Add aliases without @.\n" +msgstr " -A --add-stdcall-alias Tambahkan alias tanpa @.\n" + +#: dlltool.c:3157 +#, c-format +msgid " -p --ext-prefix-alias Add aliases with .\n" +msgstr " -p --ext-prefix-alias Tambahkan alias dengan .\n" + +#: dlltool.c:3158 +#, c-format +msgid " -S --as Use for assembler.\n" +msgstr " -S --as Gunakan untuk perakit.\n" + +#: dlltool.c:3159 +#, c-format +msgid " -f --as-flags Pass to the assembler.\n" +msgstr " -f --as-flags Lewatkan ke perakit.\n" + +#: dlltool.c:3160 +#, c-format +msgid " -C --compat-implib Create backward compatible import library.\n" +msgstr " -C --compat-implib Buat kompabilitaas kebelakang impor perpustakaan.\n" + +#: dlltool.c:3161 +#, c-format +msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" +msgstr " -n --no-delete Simpan berkas sementara (ulang untuk ekstra preservation).\n" + +#: dlltool.c:3162 +#, c-format +msgid " -t --temp-prefix Use to construct temp file names.\n" +msgstr " -t --temp-prefix Gunakan Read options from .\n" +msgstr " @ Baca pilihan dari .\n" + +#: dlltool.c:3168 +#, c-format +msgid " -M --mcore-elf Process mcore-elf object files into .\n" +msgstr " -M --mcore-elf Proses mcore-elf berkas objek kedalam .\n" + +#: dlltool.c:3169 +#, c-format +msgid " -L --linker Use as the linker.\n" +msgstr " -L --linker Gunakan sebagai linker.\n" + +#: dlltool.c:3170 +#, c-format +msgid " -F --linker-flags Pass to the linker.\n" +msgstr " -F --linker-flags Lewatkan ke linker.\n" + +#: dlltool.c:3293 +#, c-format +msgid "Path components stripped from dllname, '%s'." +msgstr "Jalur komponen dihapus dari dllname, '%s'." + +#: dlltool.c:3338 +#, c-format +msgid "Unable to open base-file: %s" +msgstr "Tidak dapat membuka berkas-dasar: %s" + +#: dlltool.c:3370 +#, c-format +msgid "Machine '%s' not supported" +msgstr "Mesin '%s' tidak didukung" + +#: dlltool.c:3474 dllwrap.c:201 +#, c-format +msgid "Tried file: %s" +msgstr "Berkas yang dicoba: %s" + +#: dlltool.c:3481 dllwrap.c:208 +#, c-format +msgid "Using file: %s" +msgstr "Menggunakan berkas: %s" + +#: dllwrap.c:291 +#, c-format +msgid "Keeping temporary base file %s" +msgstr "Menjaga berkas dasaar sementara %s" + +#: dllwrap.c:293 +#, c-format +msgid "Deleting temporary base file %s" +msgstr "Menghapus berkas dasar sementara %s" + +#: dllwrap.c:307 +#, c-format +msgid "Keeping temporary exp file %s" +msgstr "Menjaga berkas eks sementara %s" + +#: dllwrap.c:309 +#, c-format +msgid "Deleting temporary exp file %s" +msgstr "Menghapus berkas eksp sementara %s" + +#: dllwrap.c:322 +#, c-format +msgid "Keeping temporary def file %s" +msgstr "Menjaga berkas def sementara %s" + +#: dllwrap.c:324 +#, c-format +msgid "Deleting temporary def file %s" +msgstr "Menghapus berkas de sementara %s" + +#: dllwrap.c:472 +#, c-format +msgid " Generic options:\n" +msgstr " Pilihan umum:\n" + +#: dllwrap.c:473 +#, c-format +msgid " @ Read options from \n" +msgstr " @ Baca pilihan dari \n" + +#: dllwrap.c:474 +#, c-format +msgid " --quiet, -q Work quietly\n" +msgstr " --quiet, -q Kerja secara tenang\n" + +#: dllwrap.c:475 +#, c-format +msgid " --verbose, -v Verbose\n" +msgstr " --verbose, -v Verbose\n" + +#: dllwrap.c:476 +#, c-format +msgid " --version Print dllwrap version\n" +msgstr " --version Tampilkan versi dllwrap\n" + +#: dllwrap.c:477 +#, c-format +msgid " --implib Synonym for --output-lib\n" +msgstr " --implib Sinonim untuk --output-lib\n" + +#: dllwrap.c:478 +#, c-format +msgid " Options for %s:\n" +msgstr " Pilihan untuk %s:\n" + +#: dllwrap.c:479 +#, c-format +msgid " --driver-name Defaults to \"gcc\"\n" +msgstr " --driver-name Baku ke \"gcc\"\n" + +#: dllwrap.c:480 +#, c-format +msgid " --driver-flags Override default ld flags\n" +msgstr " --driver-flags Override baku Id flags\n" + +#: dllwrap.c:481 +#, c-format +msgid " --dlltool-name Defaults to \"dlltool\"\n" +msgstr " --dlltool-name Baku ku \"dlltool\"\n" + +#: dllwrap.c:482 +#, c-format +msgid " --entry Specify alternate DLL entry point\n" +msgstr " --entry Spesifikasikan alternatif titik masukan DLL\n" + +#: dllwrap.c:483 +#, c-format +msgid " --image-base Specify image base address\n" +msgstr " --image-base Spesifikasikan alamat dasar image\n" + +#: dllwrap.c:484 +#, c-format +msgid " --target i386-cygwin32 or i386-mingw32\n" +msgstr " --target i386-cygwin32 atau i386-mingw32\n" + +#: dllwrap.c:485 +#, c-format +msgid " --dry-run Show what needs to be run\n" +msgstr " --dry-run Tampilkan apa yang dibutuhkan untuk berjalan\n" + +#: dllwrap.c:486 +#, c-format +msgid " --mno-cygwin Create Mingw DLL\n" +msgstr " --mno-cygwin Buat Mingw DLL\n" + +#: dllwrap.c:487 +#, c-format +msgid " Options passed to DLLTOOL:\n" +msgstr " Pilihan dilewatkan ke DLLTOOL:\n" + +#: dllwrap.c:488 +#, c-format +msgid " --machine \n" +msgstr " --machine \n" + +#: dllwrap.c:489 +#, c-format +msgid " --output-exp Generate export file.\n" +msgstr " --output-exp Hasilkan berkas ekspor.\n" + +#: dllwrap.c:490 +#, c-format +msgid " --output-lib Generate input library.\n" +msgstr " --output-lib Hasilkan perpustakaan masukan.\n" + +#: dllwrap.c:491 +#, c-format +msgid " --add-indirect Add dll indirects to export file.\n" +msgstr " --add-indirect Tambahkan dll tidak langsung ke berkas ekspor.\n" + +#: dllwrap.c:492 +#, c-format +msgid " --dllname Name of input dll to put into output lib.\n" +msgstr " --dllname Nama dari masukan dll ke put dalam lib keluaran.\n" + +#: dllwrap.c:493 +#, c-format +msgid " --def Name input .def file\n" +msgstr " --def Nama berkas masukan .def\n" + +#: dllwrap.c:494 +#, c-format +msgid " --output-def Name output .def file\n" +msgstr " --output-def Nama berkas keluaran .def\n" + +#: dllwrap.c:495 +#, c-format +msgid " --export-all-symbols Export all symbols to .def\n" +msgstr " --export-all-symbols Ekspor seluruh simbol ke .def\n" + +#: dllwrap.c:496 +#, c-format +msgid " --no-export-all-symbols Only export .drectve symbols\n" +msgstr " --no-export-all-symbols Hanya ekspor .drectve simbols\n" + +#: dllwrap.c:497 +#, c-format +msgid " --exclude-symbols Exclude from .def\n" +msgstr " --exclude-symbols Exclude dari .def\n" + +#: dllwrap.c:498 +#, c-format +msgid " --no-default-excludes Zap default exclude symbols\n" +msgstr " --no-default-excludes Zap default exclude simbol\n" + +#: dllwrap.c:499 +#, c-format +msgid " --base-file Read linker generated base file\n" +msgstr " --base-file Baca linker yang dihasilkan berkas dasar\n" + +#: dllwrap.c:500 +#, c-format +msgid " --no-idata4 Don't generate idata$4 section\n" +msgstr " --no-idata4 Jangan hasilkan daerah idata$4\n" + +#: dllwrap.c:501 +#, c-format +msgid " --no-idata5 Don't generate idata$5 section\n" +msgstr " --no-idata5 Jangan hasilkan daerah idata$4\n" + +#: dllwrap.c:502 +#, c-format +msgid " -U Add underscores to .lib\n" +msgstr " -U Tambahkan garis-bawah ke .lib\n" + +#: dllwrap.c:503 +#, c-format +msgid " -k Kill @ from exported names\n" +msgstr " -k Non-aktifkan @ dari nama terekspor\n" + +#: dllwrap.c:504 +#, c-format +msgid " --add-stdcall-alias Add aliases without @\n" +msgstr " --add-stdcall-alias Tambahkan alias tanpa @\n" + +#: dllwrap.c:505 +#, c-format +msgid " --as Use for assembler\n" +msgstr " --as Gunakan untuk perakit\n" + +#: dllwrap.c:506 +#, c-format +msgid " --nodelete Keep temp files.\n" +msgstr " --nodelete Simpan berkas sementara.\n" + +#: dllwrap.c:507 +#, c-format +msgid " Rest are passed unmodified to the language driver\n" +msgstr " Sisanya dilewatkan tidak termodifikasi ke driver bahasa\n" + +#: dllwrap.c:781 +msgid "Must provide at least one of -o or --dllname options" +msgstr "Harus menyediakan paling tidak satu dari pilihan -o atau --dllname" + +#: dllwrap.c:810 +msgid "" +"no export definition file provided.\n" +"Creating one, but that may not be what you want" +msgstr "" +"tidak ada berkas definisi ekspor yang diberikan.\n" +"Membuat satu, tetapi itu mungkin bukan apa yang anda inginkan" + +#: dllwrap.c:969 +#, c-format +msgid "DLLTOOL name : %s\n" +msgstr "nama DLLTOOL : %s\n" + +#: dllwrap.c:970 +#, c-format +msgid "DLLTOOL options : %s\n" +msgstr "pilihan DLLTOOL : %s\n" + +#: dllwrap.c:971 +#, c-format +msgid "DRIVER name : %s\n" +msgstr "nama DRIVER : %s\n" + +#: dllwrap.c:972 +#, c-format +msgid "DRIVER options : %s\n" +msgstr "pilihan DRIVER : %s\n" + +#: dwarf.c:98 dwarf.c:142 readelf.c:370 readelf.c:526 +#, c-format +msgid "Unhandled data length: %d\n" +msgstr "Panjang data tidak tertangani: %d\n" + +#: dwarf.c:267 dwarf.c:2563 +msgid "badly formed extended line op encountered!\n" +msgstr "baris eksten terbentuk buruk op ditemui!\n" + +#: dwarf.c:274 +#, c-format +msgid " Extended opcode %d: " +msgstr " Eksten opkode %d: " + +#: dwarf.c:279 +#, c-format +msgid "" +"End of Sequence\n" +"\n" +msgstr "" +"Akhir dari Urutan\n" +"\n" + +#: dwarf.c:285 +#, c-format +msgid "set Address to 0x%lx\n" +msgstr "set Alamat ke 0x%lx\n" + +#: dwarf.c:290 +#, c-format +msgid " define new File Table entry\n" +msgstr " definisikan masukan Berkas Tabel baru\n" + +#: dwarf.c:291 dwarf.c:2178 +#, c-format +msgid " Entry\tDir\tTime\tSize\tName\n" +msgstr " Masukan\tDir\tWaktu\tUkuran\tNama\n" + +#: dwarf.c:293 +#, c-format +msgid " %d\t" +msgstr " %d\t" + +#: dwarf.c:296 dwarf.c:298 dwarf.c:300 dwarf.c:2190 dwarf.c:2192 dwarf.c:2194 +#, c-format +msgid "%lu\t" +msgstr "%lu\t" + +#: dwarf.c:301 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" +"%s\n" +"\n" + +#. The test against DW_LNW_hi_user is redundant due to +#. the limited range of the unsigned char data type used +#. for op_code. +#. && op_code <= DW_LNE_hi_user +#: dwarf.c:342 +#, c-format +msgid "user defined: length %d\n" +msgstr "terdefinisi oleh pengguna: panjang %d\n" + +#: dwarf.c:344 dwarf.c:2594 +#, c-format +msgid "UNKNOWN: length %d\n" +msgstr "TIDAK DIKETAHUI: panjang %d\n" + +#: dwarf.c:357 +msgid "" +msgstr "" + +#: dwarf.c:363 +#, c-format +msgid "DW_FORM_strp offset too big: %lx\n" +msgstr "DW_FORM_strp ofset terlalu besar: %lx\n" + +#: dwarf.c:364 +msgid "" +msgstr "" + +#: dwarf.c:597 +#, c-format +msgid "Unknown TAG value: %lx" +msgstr "Nilai TAG tidak diketahui: %lx" + +#: dwarf.c:633 +#, c-format +msgid "Unknown FORM value: %lx" +msgstr "Nilai FORM tidak diketahui: %lx" + +#: dwarf.c:642 +#, c-format +msgid " %lu byte block: " +msgstr " %lu byte blok: " + +#: dwarf.c:1031 +#, c-format +msgid "(User defined location op)" +msgstr "(Lokasi definisi oleh pengguna op)" + +#: dwarf.c:1033 +#, c-format +msgid "(Unknown location op)" +msgstr "(Lokasi op tidak diketahui)" + +#: dwarf.c:1081 +msgid "Internal error: DWARF version is not 2 or 3.\n" +msgstr "Internal error: versi DWARF bukan 2 atau 3.\n" + +#: dwarf.c:1180 +msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" +msgstr "DW_FORM_data8 tidak didukung ketika sizeof (unsigned long) != 8\n" + +#: dwarf.c:1229 +#, c-format +msgid " (indirect string, offset: 0x%lx): %s" +msgstr " (indirect string, ofset: 0x%lx): %s" + +#: dwarf.c:1238 +#, c-format +msgid "Unrecognized form: %lu\n" +msgstr "Bentuk tidak dikenali: %lu\n" + +#: dwarf.c:1322 +#, c-format +msgid "(not inlined)" +msgstr "(tidak inline)" + +#: dwarf.c:1325 +#, c-format +msgid "(inlined)" +msgstr "(inline)" + +#: dwarf.c:1328 +#, c-format +msgid "(declared as inline but ignored)" +msgstr "(terdeklarasi sebagai inline tetapi diabaikan)" + +#: dwarf.c:1331 +#, c-format +msgid "(declared as inline and inlined)" +msgstr "(terdeklarasi sebagai inline dan diinline)" + +#: dwarf.c:1334 +#, c-format +msgid " (Unknown inline attribute value: %lx)" +msgstr " (Nilai atribut inline tidak diketahui: %lx)" + +#: dwarf.c:1495 +#, c-format +msgid "(location list)" +msgstr "(daftar lokasi)" + +#: dwarf.c:1514 dwarf.c:3193 +#, c-format +msgid " [without DW_AT_frame_base]" +msgstr " [tanpa DW_AT_frame_base]" + +#: dwarf.c:1526 +#, c-format +msgid "Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n" +msgstr "Ofset %lx yang digunakan sebagai nilai untuk DW_AT_import atribut dari DIE di ofset %lx terlalu besar.\n" + +#: dwarf.c:1700 +#, c-format +msgid "Unknown AT value: %lx" +msgstr "Nilai AT tidak diketahui: %lx" + +#: dwarf.c:1767 +#, c-format +msgid "Reserved length value (%lx) found in section %s\n" +msgstr "Nilai panjang terpesan (%lx) ditemukan di daerah %s\n" + +#: dwarf.c:1778 +#, c-format +msgid "Corrupt unit length (%lx) found in section %s\n" +msgstr "Panjang satuan terkorupsi (%lx) ditemukan di daerah %s\n" + +#: dwarf.c:1785 +#, c-format +msgid "No comp units in %s section ?" +msgstr "Tidak ada satuan comp dalam daerah %s?" + +#: dwarf.c:1794 +#, c-format +msgid "Not enough memory for a debug info array of %u entries" +msgstr "Tidak cukup memori untuk informasi debug dari masukan %u" + +#: dwarf.c:1802 dwarf.c:3285 +#, c-format +msgid "" +"The section %s contains:\n" +"\n" +msgstr "" +"Daerah %s berisi:\n" +"\n" + +#: dwarf.c:1810 +#, c-format +msgid "Unable to locate %s section!\n" +msgstr "Tidak dapat mengalokasikan daerah %s!\n" + +#: dwarf.c:1873 +#, c-format +msgid " Compilation Unit @ offset 0x%lx:\n" +msgstr " Kompilasi dari Unit @ ofset 0x%lx:\n" + +#: dwarf.c:1874 +#, c-format +msgid " Length: 0x%lx (%s)\n" +msgstr " Panjang: 0x%lx (%s)\n" + +#: dwarf.c:1876 +#, c-format +msgid " Version: %d\n" +msgstr " Versi: %d\n" + +#: dwarf.c:1877 +#, c-format +msgid " Abbrev Offset: %ld\n" +msgstr " Ofset Kependekan: %ld\n" + +#: dwarf.c:1878 +#, c-format +msgid " Pointer Size: %d\n" +msgstr " Ukuran Pointer: %d\n" + +#: dwarf.c:1884 +#, c-format +msgid "Debug info is corrupted, length of CU at %lx extends beyond end of section (length = %lx)\n" +msgstr "Informasi debug terkorupsi, panjang dari CU di %lx eksten diluar akhir dari daerah (panjang = %lx)\n" + +#: dwarf.c:1893 +#, c-format +msgid "CU at offset %lx contains corrupt or unsupported version number: %d.\n" +msgstr "CU di ofset %lx berisi nomor versi yang terkorupsi atau tidak didukung: %d.\n" + +#: dwarf.c:1903 +#, c-format +msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n" +msgstr "Informasi debug terkorupsi, ofset kependekan (%lx) lebih besar dari daerah kependekan ukuran (%lx)\n" + +#: dwarf.c:1937 +#, c-format +msgid "Bogus end-of-siblings marker detected at offset %lx in .debug_info section\n" +msgstr "Palsu penanda akhir-dari-siblings terdeteksi di ofset %lx dalam daerah .debug_info\n" + +#: dwarf.c:1941 +msgid "Further warnings about bogus end-of-sibling markers suppressed\n" +msgstr "Tidak ada peringatan lebih lanjut mengenai penanda palsu akhir-dari-sibling ditekan\n" + +#: dwarf.c:1948 +#, c-format +msgid " <%d><%lx>: Abbrev Number: %lu" +msgstr " <%d><%lx>: Nomor Kependekan: %lu" + +#: dwarf.c:1965 +#, c-format +msgid "DIE at offset %lx refers to abbreviation number %lu which does not exist\n" +msgstr "DIE di ofset %lx mereferensikan nomor kependekan %lu dimana itu tidak ada\n" + +#: dwarf.c:1971 +#, c-format +msgid " (%s)\n" +msgstr " (%s)\n" + +#: dwarf.c:2062 +#, c-format +msgid "" +"Raw dump of debug contents of section %s:\n" +"\n" +msgstr "" +"Isi mentah dari isi debug dari daerah %s:\n" +"\n" + +#: dwarf.c:2100 dwarf.c:2387 +msgid "The line info appears to be corrupt - the section is too small\n" +msgstr "Baris infor sepertinya terkorupsi - daerah terlalu kecil\n" + +#: dwarf.c:2109 dwarf.c:2397 +msgid "Only DWARF version 2 and 3 line info is currently supported.\n" +msgstr "Hanya DWARF versi 2 dan 3 baris info yang saat ini didukung.\n" + +#: dwarf.c:2130 +#, c-format +msgid " Offset: 0x%lx\n" +msgstr " Ofset: 0x%lx\n" + +#: dwarf.c:2131 +#, c-format +msgid " Length: %ld\n" +msgstr " Panjang: %ld\n" + +#: dwarf.c:2132 +#, c-format +msgid " DWARF Version: %d\n" +msgstr " Versi DWARF: %d\n" + +#: dwarf.c:2133 +#, c-format +msgid " Prologue Length: %d\n" +msgstr " Panjang Prologue: %d\n" + +#: dwarf.c:2134 +#, c-format +msgid " Minimum Instruction Length: %d\n" +msgstr " Panjang Instruksi Minimal: %d\n" + +#: dwarf.c:2135 +#, c-format +msgid " Initial value of 'is_stmt': %d\n" +msgstr " Nilai inisial dari 'is_stmt': %d\n" + +#: dwarf.c:2136 +#, c-format +msgid " Line Base: %d\n" +msgstr " Dasar Baris: %d\n" + +#: dwarf.c:2137 +#, c-format +msgid " Line Range: %d\n" +msgstr " Jangkauan Baris: %d\n" + +#: dwarf.c:2138 +#, c-format +msgid " Opcode Base: %d\n" +msgstr " Dasar Opkode: %d\n" + +#: dwarf.c:2147 +#, c-format +msgid "" +"\n" +" Opcodes:\n" +msgstr "" +"\n" +" Opkode:\n" + +#: dwarf.c:2150 +#, c-format +msgid " Opcode %d has %d args\n" +msgstr " Opkode %d memiliki %d args\n" + +#: dwarf.c:2156 +#, c-format +msgid "" +"\n" +" The Directory Table is empty.\n" +msgstr "" +"\n" +" Tabel Direktori kosong.\n" + +#: dwarf.c:2159 +#, c-format +msgid "" +"\n" +" The Directory Table:\n" +msgstr "" +"\n" +" Tabel Direktori:\n" + +#: dwarf.c:2163 +#, c-format +msgid " %s\n" +msgstr " %s\n" + +#: dwarf.c:2174 +#, c-format +msgid "" +"\n" +" The File Name Table is empty.\n" +msgstr "" +"\n" +" Tabel Nama Berkas kosong.\n" + +#: dwarf.c:2177 +#, c-format +msgid "" +"\n" +" The File Name Table:\n" +msgstr "" +"\n" +" Tabel Nama Berkas:\n" + +#: dwarf.c:2185 +#, c-format +msgid " %d\t" +msgstr " %d\t" + +#: dwarf.c:2196 +#, c-format +msgid "%s\n" +msgstr "%s\n" + +#. Now display the statements. +#: dwarf.c:2204 +#, c-format +msgid "" +"\n" +" Line Number Statements:\n" +msgstr "" +"\n" +" Pernyataan Nomor Baris:\n" + +#: dwarf.c:2220 +#, c-format +msgid " Special opcode %d: advance Address by %lu to 0x%lx" +msgstr " Opkode spesial %d: advance Alamat dengan %lu ke 0x%lx" + +#: dwarf.c:2224 +#, c-format +msgid " and Line by %d to %d\n" +msgstr " dan Baris dengan %d ke %d\n" + +#: dwarf.c:2234 +#, c-format +msgid " Copy\n" +msgstr " Salin\n" + +#: dwarf.c:2242 +#, c-format +msgid " Advance PC by %lu to 0x%lx\n" +msgstr " Lanjut PC dengan %lu ke 0x%lx\n" + +#: dwarf.c:2250 +#, c-format +msgid " Advance Line by %d to %d\n" +msgstr " Lanjut Baris dengan %d ke %d\n" + +#: dwarf.c:2257 +#, c-format +msgid " Set File Name to entry %d in the File Name Table\n" +msgstr " Set Nama Berkas ke masukan %d dalam Tabel Nama Berkas\n" + +#: dwarf.c:2265 +#, c-format +msgid " Set column to %lu\n" +msgstr " Set kolom ke %lu\n" + +#: dwarf.c:2272 +#, c-format +msgid " Set is_stmt to %d\n" +msgstr " Set is_stmt ke %d\n" + +#: dwarf.c:2277 +#, c-format +msgid " Set basic block\n" +msgstr " Set basik blok\n" + +#: dwarf.c:2285 +#, c-format +msgid " Advance PC by constant %lu to 0x%lx\n" +msgstr " Lanjut PC dengan konstan %lu ke 0x%lx\n" + +#: dwarf.c:2293 +#, c-format +msgid " Advance PC by fixed size amount %lu to 0x%lx\n" +msgstr " Lanjut PC dengan jumlah tetap %lu ke 0x%lx\n" + +#: dwarf.c:2298 +#, c-format +msgid " Set prologue_end to true\n" +msgstr " Set prologue_end ke true\n" + +#: dwarf.c:2302 +#, c-format +msgid " Set epilogue_begin to true\n" +msgstr " Set epilogue_begin ke true\n" + +#: dwarf.c:2308 dwarf.c:2672 +#, c-format +msgid " Set ISA to %lu\n" +msgstr " Set ISA ke %lu\n" + +#: dwarf.c:2312 dwarf.c:2676 +#, c-format +msgid " Unknown opcode %d with operands: " +msgstr " Opkode %d tidak dikenal dengan operan: " + +#: dwarf.c:2345 +#, c-format +msgid "" +"Decoded dump of debug contents of section %s:\n" +"\n" +msgstr "" +"Dump terdekode dari isi debug dari daerah %s:\n" +"\n" + +#: dwarf.c:2506 +#, c-format +msgid "CU: %s:\n" +msgstr "CU: %s:\n" + +#: dwarf.c:2507 dwarf.c:2520 +#, c-format +msgid "File name Line number Starting address\n" +msgstr "Nama Berkas Nomor Baris Awal alamat\n" + +#: dwarf.c:2513 +#, c-format +msgid "CU: %s/%s:\n" +msgstr "CU: %s/%s:\n" + +#: dwarf.c:2518 dwarf.c:2590 +#, c-format +msgid "%s:\n" +msgstr "%s:\n" + +#. If directory index is 0, that means current directory. +#: dwarf.c:2623 +#, c-format +msgid "" +"\n" +"./%s:[++]\n" +msgstr "" +"\n" +"./%s:[++]\n" + +#. The directory index starts counting at 1. +#: dwarf.c:2629 +#, c-format +msgid "" +"\n" +"%s/%s:\n" +msgstr "" +"\n" +"%s/%s:\n" + +#: dwarf.c:2714 +#, c-format +msgid "%-35s %11d %#18lx\n" +msgstr "%-35s %11d %#18lx\n" + +#: dwarf.c:2719 +#, c-format +msgid "%s %11d %#18lx\n" +msgstr "%s %11d %#18lx\n" + +#: dwarf.c:2749 dwarf.c:3024 dwarf.c:3425 +#, c-format +msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n" +msgstr "Tidak dapat meload/parse daerah .debug_info, jadi tidak dapat meninterpretasikan daerah %s.\n" + +#: dwarf.c:2794 dwarf.c:2888 dwarf.c:2962 dwarf.c:3079 dwarf.c:3227 +#: dwarf.c:3480 +#, c-format +msgid "" +"Contents of the %s section:\n" +"\n" +msgstr "" +"Isi dari daerah %s:\n" +"\n" + +#: dwarf.c:2828 dwarf.c:3330 +#, c-format +msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n" +msgstr ".debug_info ofset dari 0x%lx dalam daerah %s tidak menunjuk ke header CU.\n" + +#: dwarf.c:2842 +msgid "Only DWARF 2 and 3 pubnames are currently supported\n" +msgstr "Hanya DWARF 2 dan 3 pubnames yang saat ini didukung\n" + +#: dwarf.c:2849 +#, c-format +msgid " Length: %ld\n" +msgstr " Panjang: %ld\n" + +#: dwarf.c:2851 +#, c-format +msgid " Version: %d\n" +msgstr " Versi: %d\n" + +#: dwarf.c:2853 +#, c-format +msgid " Offset into .debug_info section: 0x%lx\n" +msgstr " Ofset dalam daerah .debug_info: 0x%lx\n" + +#: dwarf.c:2855 +#, c-format +msgid " Size of area in .debug_info section: %ld\n" +msgstr " Ukuran dari daerah dalam .debug_info: %ld\n" + +#: dwarf.c:2858 +#, c-format +msgid "" +"\n" +" Offset\tName\n" +msgstr "" +"\n" +" Ofset\tNama\n" + +#: dwarf.c:2909 +#, c-format +msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" +msgstr " DW_MACINFO_start_file - lineno: %d filenum: %d\n" + +#: dwarf.c:2915 +#, c-format +msgid " DW_MACINFO_end_file\n" +msgstr " DW_MACINFO_end_file\n" + +#: dwarf.c:2923 +#, c-format +msgid " DW_MACINFO_define - lineno : %d macro : %s\n" +msgstr " DW_MACINFO_define - lineno : %d makro : %s\n" + +#: dwarf.c:2932 +#, c-format +msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" +msgstr " DW_MACINFO_undef - lineno : %d makro : %s\n" + +#: dwarf.c:2944 +#, c-format +msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" +msgstr " DW_MACINFO_vendor_ext - konstan : %d string : %s\n" + +#: dwarf.c:2973 +#, c-format +msgid " Number TAG\n" +msgstr " Nomor TAG\n" + +#: dwarf.c:2979 +#, c-format +msgid " %ld %s [%s]\n" +msgstr " %ld %s [%s]\n" + +#: dwarf.c:2982 +msgid "has children" +msgstr "memiliki anak" + +#: dwarf.c:2982 +msgid "no children" +msgstr "tidak memiliki anak" + +#: dwarf.c:2985 +#, c-format +msgid " %-18s %s\n" +msgstr " %-18s %s\n" + +#: dwarf.c:3018 dwarf.c:3223 dwarf.c:3419 +#, c-format +msgid "" +"\n" +"The %s section is empty.\n" +msgstr "" +"\n" +"Daerah %s ini kosong.\n" + +#. FIXME: Should we handle this case? +#: dwarf.c:3068 +msgid "Location lists in .debug_info section aren't in ascending order!\n" +msgstr "Daftar lokasi dalam daerah .debug_info tidak dalam urutan meningkat!\n" + +#: dwarf.c:3071 +msgid "No location lists in .debug_info section!\n" +msgstr "Tidak ada daftar lokasi dalam daerah .debug_info!\n" + +#: dwarf.c:3076 +#, c-format +msgid "Location lists in %s section start at 0x%lx\n" +msgstr "Daftar lokasi dalam daerah %s dimulai di 0x%lx\n" + +#: dwarf.c:3080 +#, c-format +msgid " Offset Begin End Expression\n" +msgstr " Ofset Awal Akhir Pernyataan\n" + +#: dwarf.c:3111 +#, c-format +msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" +msgstr "Disana ada hole [0x%lx - 0x%lx] dalam daerah .debug_loc.\n" + +#: dwarf.c:3115 +#, c-format +msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" +msgstr "Disana ada tumpang tindih [0x%lx - 0x%lx] dalam daerah .debug_loc\n" + +#: dwarf.c:3123 +#, c-format +msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" +msgstr "Ofset 0x%lx lebih besar dari ukuran daerah .debug_loc.\n" + +#: dwarf.c:3132 dwarf.c:3167 dwarf.c:3177 +#, c-format +msgid "Location list starting at offset 0x%lx is not terminated.\n" +msgstr "Daftar lokasi dimulai di ofset 0x%lx tidak diakhiri.\n" + +#: dwarf.c:3151 dwarf.c:3532 +#, c-format +msgid "\n" +msgstr "\n" + +#: dwarf.c:3161 +#, c-format +msgid "(base address)\n" +msgstr "(alamat dasar)\n" + +#: dwarf.c:3196 +msgid " (start == end)" +msgstr " (awal == akhir)" + +#: dwarf.c:3198 +msgid " (start > end)" +msgstr " (awal > akhir)" + +#: dwarf.c:3208 +#, c-format +msgid "There are %ld unused bytes at the end of section %s\n" +msgstr "Disana ada %ld byte tidak digunakan diakhir dari daerah %s\n" + +#: dwarf.c:3341 +msgid "Only DWARF 2 and 3 aranges are currently supported.\n" +msgstr "Hanya DWARF 2 dan 3 yang saat ini didukung.\n" + +#: dwarf.c:3345 +#, c-format +msgid " Length: %ld\n" +msgstr " Panjang: %ld\n" + +#: dwarf.c:3346 +#, c-format +msgid " Version: %d\n" +msgstr " Versi: %d\n" + +#: dwarf.c:3347 +#, c-format +msgid " Offset into .debug_info: 0x%lx\n" +msgstr " Ofset kedalam .debug_info: 0x%lx\n" + +#: dwarf.c:3348 +#, c-format +msgid " Pointer Size: %d\n" +msgstr " Ukuran Penunjuk: %d\n" + +#: dwarf.c:3349 +#, c-format +msgid " Segment Size: %d\n" +msgstr " Ukuran Segmen: %d\n" + +#: dwarf.c:3358 +msgid "Pointer size + Segment size is not a power of two.\n" +msgstr "Ukuran penunjuk + Ukuran segmen bukan kelipatan dari dua.\n" + +#: dwarf.c:3363 +#, c-format +msgid "" +"\n" +" Address Length\n" +msgstr "" +"\n" +" Alamat Panjang\n" + +#: dwarf.c:3365 +#, c-format +msgid "" +"\n" +" Address Length\n" +msgstr "" +"\n" +" Alamat Panjang\n" + +#. FIXME: Should we handle this case? +#: dwarf.c:3469 +msgid "Range lists in .debug_info section aren't in ascending order!\n" +msgstr "Daftar jangkauan dalam daerah .debug_info tidak dalam urutan meningkat!\n" + +#: dwarf.c:3472 +msgid "No range lists in .debug_info section!\n" +msgstr "Tidak ada daftar jangkauan dalam daerah .debug_info!\n" + +#: dwarf.c:3477 +#, c-format +msgid "Range lists in %s section start at 0x%lx\n" +msgstr "Daftar jangkauan dalam daerah %s dimulai dari 0x%lx\n" + +#: dwarf.c:3481 +#, c-format +msgid " Offset Begin End\n" +msgstr " Ofset Awal Akhir\n" + +#: dwarf.c:3506 +#, c-format +msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" +msgstr "Disana terdapat sebuah lubang [0x%lx -0x%lx] dalam daerah %s.\n" + +#: dwarf.c:3510 +#, c-format +msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" +msgstr "Disana terdapat sebuah tumpang tindih [0x%lx - 0x%lx] dalam daerah %s.\n" + +#: dwarf.c:3548 +msgid "(start == end)" +msgstr "(awal == akhir)" + +#: dwarf.c:3550 +msgid "(start > end)" +msgstr "(awal > akhir)" + +#: dwarf.c:3801 +#, c-format +msgid "The section %s contains:\n" +msgstr "Daerah %s berisi:\n" + +#: dwarf.c:4492 +#, c-format +msgid " DW_CFA_??? (User defined call frame op: %#x)\n" +msgstr " DW_CFA_??? (Definisi oleh pengguna memanggil frame op: %#x)\n" + +#: dwarf.c:4494 +#, c-format +msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" +msgstr "tidak didukung atau tidak dikenal Dwarf Call Frame nomor Instruksi: %#x\n" + +#: dwarf.c:4518 +#, c-format +msgid "Displaying the debug contents of section %s is not yet supported.\n" +msgstr "Menampilkan isi debug dari daerah %s belum didukung.\n" + +#: dwarf.c:4560 +#, c-format +msgid "%s: Error: " +msgstr "%s: Error: " + +#: dwarf.c:4571 +#, c-format +msgid "%s: Warning: " +msgstr "%s: Peringatan: " + +#: emul_aix.c:43 +#, c-format +msgid " [-g] - 32 bit small archive\n" +msgstr " [-g] - 32 bit archive kecil\n" + +#: emul_aix.c:44 +#, c-format +msgid " [-X32] - ignores 64 bit objects\n" +msgstr " [-X32] - abaikan objek 64 bit\n" + +#: emul_aix.c:45 +#, c-format +msgid " [-X64] - ignores 32 bit objects\n" +msgstr " [-X64] - abaikan objek 32 bit\n" + +#: emul_aix.c:46 +#, c-format +msgid " [-X32_64] - accepts 32 and 64 bit objects\n" +msgstr " [-X32_64] - terima objek 32 dan 64 bit\n" + +#: ieee.c:309 +msgid "unexpected end of debugging information" +msgstr "tidak terduga akhir dari informasi debug" + +#: ieee.c:396 +msgid "invalid number" +msgstr "nomor tidak valid" + +#: ieee.c:449 +msgid "invalid string length" +msgstr "panjang string tidak valid" + +#: ieee.c:504 ieee.c:545 +msgid "expression stack overflow" +msgstr "ekspresi stack overflow" + +#: ieee.c:524 +msgid "unsupported IEEE expression operator" +msgstr "operator ekspresi IEEE tidak didukung" + +#: ieee.c:539 +msgid "unknown section" +msgstr "daerah tidak dikenal" + +#: ieee.c:560 +msgid "expression stack underflow" +msgstr "ekspresi stack underflow" + +#: ieee.c:574 +msgid "expression stack mismatch" +msgstr "ekspresi stack tidak cocok" + +#: ieee.c:611 +msgid "unknown builtin type" +msgstr "tipe builtin tidak dikenal" + +#: ieee.c:756 +msgid "BCD float type not supported" +msgstr "tipe pecahan BCD tidak didukung" + +#: ieee.c:893 +msgid "unexpected number" +msgstr "nomor tidak terduga" + +#: ieee.c:900 +msgid "unexpected record type" +msgstr "tipe rekaman tidak terduga" + +#: ieee.c:933 +msgid "blocks left on stack at end" +msgstr "sisa blok pada stack di akhir" + +#: ieee.c:1196 +msgid "unknown BB type" +msgstr "tipe BB tidak diketahui" + +#: ieee.c:1205 +msgid "stack overflow" +msgstr "stack overflow" + +#: ieee.c:1228 +msgid "stack underflow" +msgstr "stack underflow" + +#: ieee.c:1340 ieee.c:1410 ieee.c:2107 +msgid "illegal variable index" +msgstr "variabel indeks tidak legal" + +#: ieee.c:1388 +msgid "illegal type index" +msgstr "tipe indeks tidak legal" + +#: ieee.c:1398 ieee.c:1435 +msgid "unknown TY code" +msgstr "kode TY tidak dikenal" + +#: ieee.c:1417 +msgid "undefined variable in TY" +msgstr "variabel dalam TY tidak dikenal" + +#. Pascal file name. FIXME. +#: ieee.c:1828 +msgid "Pascal file name not supported" +msgstr "Nama berkas Pascal tidak didukung" + +#: ieee.c:1876 +msgid "unsupported qualifier" +msgstr "kualifier tidak didukung" + +#: ieee.c:2145 +msgid "undefined variable in ATN" +msgstr "variabel dalam ATN tidak terdefinisi" + +#: ieee.c:2188 +msgid "unknown ATN type" +msgstr "tipe ATN tidak didukung" + +#. Reserved for FORTRAN common. +#: ieee.c:2310 +msgid "unsupported ATN11" +msgstr "ATN11 tidak didukung" + +#. We have no way to record this information. FIXME. +#: ieee.c:2337 +msgid "unsupported ATN12" +msgstr "ATN12 tidak didukung" + +#: ieee.c:2397 +msgid "unexpected string in C++ misc" +msgstr "string dalam misc C++ tidak terduga" + +#: ieee.c:2410 +msgid "bad misc record" +msgstr "rekaman misc buruk" + +#: ieee.c:2451 +msgid "unrecognized C++ misc record" +msgstr "rekaman misc C++ tidak dikenal" + +#: ieee.c:2566 +msgid "undefined C++ object" +msgstr "objek C++ tidak terdefinisi" + +#: ieee.c:2600 +msgid "unrecognized C++ object spec" +msgstr "spesifikasi objek C++ tidak dikenal" + +#: ieee.c:2636 +msgid "unsupported C++ object type" +msgstr "tipe objek C++ tidak didukung" + +#: ieee.c:2646 +msgid "C++ base class not defined" +msgstr "C++ kelas dasar tidak terdefinisi" + +#: ieee.c:2658 ieee.c:2763 +msgid "C++ object has no fields" +msgstr "C++ objek tidak memiliki field" + +#: ieee.c:2677 +msgid "C++ base class not found in container" +msgstr "C++ kelas dasar tidak ditemukan dalam kontainer" + +#: ieee.c:2784 +msgid "C++ data member not found in container" +msgstr "C++ data anggota tidak ditemukan dalam kontainer" + +#: ieee.c:2825 ieee.c:2975 +msgid "unknown C++ visibility" +msgstr "visibility C++ tidak diketahui" + +#: ieee.c:2859 +msgid "bad C++ field bit pos or size" +msgstr "C++ bit field posisi atau ukuran buruk" + +#: ieee.c:2951 +msgid "bad type for C++ method function" +msgstr "tipe untuk fungsi metode C++ buruk" + +#: ieee.c:2961 +msgid "no type information for C++ method function" +msgstr "tidak ada informasi untuk C++ fungsi metode" + +#: ieee.c:3000 +msgid "C++ static virtual method" +msgstr "C++ static virtual metode" + +#: ieee.c:3095 +msgid "unrecognized C++ object overhead spec" +msgstr "tidak dikenal C++ objek overhead spec" + +#: ieee.c:3134 +msgid "undefined C++ vtable" +msgstr "vtabel C++ tidak terdefinisi" + +#: ieee.c:3203 +msgid "C++ default values not in a function" +msgstr "nilai baku C++ tidak dalam sebuah fungsi" + +#: ieee.c:3243 +msgid "unrecognized C++ default type" +msgstr "tipe baku C++ tidak dikenal" + +#: ieee.c:3274 +msgid "reference parameter is not a pointer" +msgstr "parameter referensi bukan sebuah penunjuk" + +#: ieee.c:3357 +msgid "unrecognized C++ reference type" +msgstr "tipe referensi C++ tidak dikenal" + +#: ieee.c:3439 +msgid "C++ reference not found" +msgstr "referensi C++ tidak ditemukan" + +#: ieee.c:3447 +msgid "C++ reference is not pointer" +msgstr "referensi C++ bukan sebuah penunjuk" + +#: ieee.c:3473 ieee.c:3481 +msgid "missing required ASN" +msgstr "hilang ASN yang dibutuhkan" + +#: ieee.c:3508 ieee.c:3516 +msgid "missing required ATN65" +msgstr "hilang ATN65 yang dibutuhkan" + +#: ieee.c:3530 +msgid "bad ATN65 record" +msgstr "rekaman ATN65 buruk" + +#: ieee.c:4158 +#, c-format +msgid "IEEE numeric overflow: 0x" +msgstr "numerik IEEE overflow; 0x" + +#: ieee.c:4202 +#, c-format +msgid "IEEE string length overflow: %u\n" +msgstr "panjang string IEEE overflow: %u\n" + +#: ieee.c:5199 +#, c-format +msgid "IEEE unsupported integer type size %u\n" +msgstr "ukuran tipe bilangan bulat %u IEEE tidak didukung\n" + +#: ieee.c:5233 +#, c-format +msgid "IEEE unsupported float type size %u\n" +msgstr "ukuran tipe bilangan pecahan %u IEEE tidak didukung\n" + +#: ieee.c:5267 +#, c-format +msgid "IEEE unsupported complex type size %u\n" +msgstr "ukuran tipe kompleks %u IEEE tidak didukung\n" + +#: mclex.c:241 +msgid "Duplicate symbol entered into keyword list." +msgstr "Duplikasi simbol dimasukan dalam daftar keyword." + +#: nlmconv.c:273 srconv.c:1822 +msgid "input and output files must be different" +msgstr "berkas masukan dan keluaran harus berbeda" + +#: nlmconv.c:320 +msgid "input file named both on command line and with INPUT" +msgstr "nama kedua berkas masukan di baris perintah dan dengan INPUT" + +#: nlmconv.c:329 +msgid "no input file" +msgstr "tidak ada berkas masukan" + +#: nlmconv.c:359 +msgid "no name for output file" +msgstr "tidak ada nama untuk berkas keluaran" + +#: nlmconv.c:373 +msgid "warning: input and output formats are not compatible" +msgstr "peringatan: format masukan dan keluaran tidak kompatibel" + +#: nlmconv.c:403 +msgid "make .bss section" +msgstr "buat daerah .bss" + +#: nlmconv.c:413 +msgid "make .nlmsections section" +msgstr "buat daerah .nlmsections" + +#: nlmconv.c:441 +msgid "set .bss vma" +msgstr "set vma .bss" + +#: nlmconv.c:448 +msgid "set .data size" +msgstr "set ukuran .data" + +#: nlmconv.c:628 +#, c-format +msgid "warning: symbol %s imported but not in import list" +msgstr "peringatan: simbol %s diimpor tetapi tidak dalam daftar impor" + +#: nlmconv.c:648 +msgid "set start address" +msgstr "set awal alamat" + +#: nlmconv.c:697 +#, c-format +msgid "warning: START procedure %s not defined" +msgstr "peringatan: AWAL prosedur %s tidak terdefinisi" + +#: nlmconv.c:699 +#, c-format +msgid "warning: EXIT procedure %s not defined" +msgstr "peringatan: KELUAR prosedur %s tidak terdefinisi" + +#: nlmconv.c:701 +#, c-format +msgid "warning: CHECK procedure %s not defined" +msgstr "peringatan: PERIKSA prosedur %s tidak terdefinisi" + +#: nlmconv.c:721 nlmconv.c:907 +msgid "custom section" +msgstr "daerah kustom" + +#: nlmconv.c:741 nlmconv.c:936 +msgid "help section" +msgstr "daerah bantuan" + +#: nlmconv.c:763 nlmconv.c:954 +msgid "message section" +msgstr "daerah pesan" + +#: nlmconv.c:778 nlmconv.c:987 +msgid "module section" +msgstr "daerah modul" + +#: nlmconv.c:797 nlmconv.c:1003 +msgid "rpc section" +msgstr "daerah rpc" + +#. There is no place to record this information. +#: nlmconv.c:833 +#, c-format +msgid "%s: warning: shared libraries can not have uninitialized data" +msgstr "%s: peringatan: perpustakaan terbagi tidak dapat memiliki data tidak terinisialisasi" + +#: nlmconv.c:854 nlmconv.c:1022 +msgid "shared section" +msgstr "daerah terbagi" + +#: nlmconv.c:862 +msgid "warning: No version number given" +msgstr "peringatan: Tidak ada nomor versi yang diberikan" + +#: nlmconv.c:902 nlmconv.c:931 nlmconv.c:949 nlmconv.c:998 nlmconv.c:1017 +#, c-format +msgid "%s: read: %s" +msgstr "%s: baca: %s" + +#: nlmconv.c:924 +msgid "warning: FULLMAP is not supported; try ld -M" +msgstr "peringatan: FULLMAP tidak didukung: coba ld -M" + +#: nlmconv.c:1100 +#, c-format +msgid "Usage: %s [option(s)] [in-file [out-file]]\n" +msgstr "Penggunaan: %s [pilihan] [berkas-masuk [berkas-keluar]]\n" + +#: nlmconv.c:1101 +#, c-format +msgid " Convert an object file into a NetWare Loadable Module\n" +msgstr " Ubah sebuah berkas objek ke sebuah NetWare Loadable Modul\n" + +#: nlmconv.c:1102 +#, c-format +msgid "" +" The options are:\n" +" -I --input-target= Set the input binary file format\n" +" -O --output-target= Set the output binary file format\n" +" -T --header-file= Read for NLM header information\n" +" -l --linker= Use for any linking\n" +" -d --debug Display on stderr the linker command line\n" +" @ Read options from .\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +msgstr "" +" Pilihan adalah:\n" +" -I --input-target= Set format berkas masukan binari\n" +" -O --output-target= Set format berkas keluaran binari\n" +" -T --header-file= Baca untuk informasi header NLM\n" +" -l --linker= Gunakan untuk linking apapun\n" +" -d --debug Tampilkan di stderr baris perintah linker\n" +" @ Baca pilihan dari .\n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan versi aplikasi\n" + +#: nlmconv.c:1143 +#, c-format +msgid "support not compiled in for %s" +msgstr "dukungan tidak dikompile untuk %s" + +#: nlmconv.c:1180 +msgid "make section" +msgstr "buat daerah" + +#: nlmconv.c:1194 +msgid "set section size" +msgstr "set ukuran daerah" + +#: nlmconv.c:1200 +msgid "set section alignment" +msgstr "set alignmen daerah" + +#: nlmconv.c:1204 +msgid "set section flags" +msgstr "set tanda daerah" + +#: nlmconv.c:1215 +msgid "set .nlmsections size" +msgstr "set ukuran .nlmsections" + +#: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318 +msgid "set .nlmsection contents" +msgstr "set isi .nlmsection" + +#: nlmconv.c:1795 +msgid "stub section sizes" +msgstr "ukuran stub daerah" + +#: nlmconv.c:1842 +msgid "writing stub" +msgstr "menulis stub" + +#: nlmconv.c:1926 +#, c-format +msgid "unresolved PC relative reloc against %s" +msgstr "tidak terselesaikan PC relatif relokasi terhadap %s" + +#: nlmconv.c:1990 +#, c-format +msgid "overflow when adjusting relocation against %s" +msgstr "overflow ketika menyesuaikan relokasi terhadap %s" + +#: nlmconv.c:2117 +#, c-format +msgid "%s: execution of %s failed: " +msgstr "%s: eksekusi dari %s gagal: " + +#: nlmconv.c:2132 +#, c-format +msgid "Execution of %s failed" +msgstr "Eksekusi dari %s gagal" + +#: nm.c:217 size.c:78 strings.c:647 +#, c-format +msgid "Usage: %s [option(s)] [file(s)]\n" +msgstr "Penggunaan: %s [pilihan] [berkas]\n" + +#: nm.c:218 +#, c-format +msgid " List symbols in [file(s)] (a.out by default).\n" +msgstr " Daftar simbol dalam [berkas] (a.out secara baku).\n" + +#: nm.c:219 +#, c-format +msgid "" +" The options are:\n" +" -a, --debug-syms Display debugger-only symbols\n" +" -A, --print-file-name Print name of the input file before every symbol\n" +" -B Same as --format=bsd\n" +" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n" +" The STYLE, if specified, can be `auto' (the default),\n" +" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" +" --no-demangle Do not demangle low-level symbol names\n" +" -D, --dynamic Display dynamic symbols instead of normal symbols\n" +" --defined-only Display only defined symbols\n" +" -e (ignored)\n" +" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n" +" `sysv' or `posix'. The default is `bsd'\n" +" -g, --extern-only Display only external symbols\n" +" -l, --line-numbers Use debugging information to find a filename and\n" +" line number for each symbol\n" +" -n, --numeric-sort Sort symbols numerically by address\n" +" -o Same as -A\n" +" -p, --no-sort Do not sort the symbols\n" +" -P, --portability Same as --format=posix\n" +" -r, --reverse-sort Reverse the sense of the sort\n" +" -S, --print-size Print size of defined symbols\n" +" -s, --print-armap Include index for symbols from archive members\n" +" --size-sort Sort symbols by size\n" +" --special-syms Include special symbols in the output\n" +" --synthetic Display synthetic symbols as well\n" +" -t, --radix=RADIX Use RADIX for printing symbol values\n" +" --target=BFDNAME Specify the target object format as BFDNAME\n" +" -u, --undefined-only Display only undefined symbols\n" +" -X 32_64 (ignored)\n" +" @FILE Read options from FILE\n" +" -h, --help Display this information\n" +" -V, --version Display this program's version number\n" +"\n" +msgstr "" +" Pilihan adalah:\n" +" -a, --debug-syms Tampilkan debugger-only simbol\n" +" -A, --print-file-name Tampilkan nama dari berkas masukan sebelum setiap simbol\n" +" -B Sama seperti --format=bsd\n" +" -C, --demangle[=STYLE] Dekode tingkat-bawah nama simbol dalam nama tingkat-pengguna\n" +" STYLE, jika dispesifikasikan, dapat berupa `auto'(baku),\n" +" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" atau `gnat'\n" +" --no-demangle Jangan demangle tingkat-bawah nama simbol\n" +" -D, --dynamic Tampilkan simbol dinamis daripada normal simbol\n" +" --defined-only Tampilkan hanya simbol terdefinisi\n" +" -e (diabaikan)\n" +" -f, --format=FORMAT Gunakan format keluaran FORMAT. FORMAT dapat berupa `bsd',\n" +" `sysv' atau `posix'. Baku adalah `bsd'\n" +" -g, --extern-only Tampilkan hanya simbol eksternal\n" +" -l, --line-numbers Gunakan informasi debug untuk mencari sebuah nama berkas dan\n" +" nomor baris untuk setiap simbol\n" +" -n, --numeric-sort Urutkan simbol secara numerik dengan alamat\n" +" -o Sama seperti -A\n" +" -p, --no-sort Jangan urutkan simbol\n" +" -P, --portability Sama seperti --format=posix\n" +" -r, --reverse-sort Balik sense dari sort\n" +" -S, --print-size Tampilkan ukuran dari simbol yang terdefinisi\n" +" -s, --print-armap Masukan indeks untuk simbol dari anggota archive\n" +" --size-sort Urutkan simbol berdasarkan ukuran\n" +" --special-syms Masukan simbol berdasarkan ukuran\n" +" --synthetic Tampilkan synthetic simbol juga\n" +" -t, --radix=RADIX Gunakan RADIX untuk menampilkan nilai simbol\n" +" --target=BFDNAME Spesifikasikan format objek target sebagai BFDNAME\n" +" -u, --undefined-only Tampilkan hanya simbol tidak terdefinisi\n" +" -X 32_64 (diabaikan)\n" +" @BERKAS Baca pilihan dari BERKAS\n" +" -h, --help Tampilkan informasi ini\n" +" -V, --version Tampilkan nomor versi aplikasi ini\n" +"\n" + +#: nm.c:284 +#, c-format +msgid "%s: invalid radix" +msgstr "%s: radix tidak valid" + +#: nm.c:308 +#, c-format +msgid "%s: invalid output format" +msgstr "%s: format keluaran tidak valid" + +#: nm.c:329 readelf.c:6971 readelf.c:7009 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:331 readelf.c:6974 readelf.c:7021 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:333 readelf.c:6976 readelf.c:7024 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:373 +#, c-format +msgid "" +"\n" +"Archive index:\n" +msgstr "" +"\n" +"Indeks archive:\n" + +#: nm.c:1233 +#, c-format +msgid "" +"\n" +"\n" +"Undefined symbols from %s:\n" +"\n" +msgstr "" +"\n" +"\n" +"Simbol tidak terdefinisi dari %s:\n" +"\n" + +#: nm.c:1235 +#, c-format +msgid "" +"\n" +"\n" +"Symbols from %s:\n" +"\n" +msgstr "" +"\n" +"\n" +"Simbol dari %s:\n" +"\n" + +#: nm.c:1237 nm.c:1288 +#, c-format +msgid "" +"Name Value Class Type Size Line Section\n" +"\n" +msgstr "" +"Nama Nilai Kelas Tipe Ukuran Baris Daerah\n" +"\n" + +#: nm.c:1240 nm.c:1291 +#, c-format +msgid "" +"Name Value Class Type Size Line Section\n" +"\n" +msgstr "" +"Nama Nilai Kelas Tipe Ukuran Baris Daerah\n" +"\n" + +#: nm.c:1284 +#, c-format +msgid "" +"\n" +"\n" +"Undefined symbols from %s[%s]:\n" +"\n" +msgstr "" +"\n" +"\n" +"Simbol tidak terdefinisi dari %s[%s]:\n" +"\n" + +#: nm.c:1286 +#, c-format +msgid "" +"\n" +"\n" +"Symbols from %s[%s]:\n" +"\n" +msgstr "" +"\n" +"\n" +"Simbol dari %s[%s]:\n" +"\n" + +#: nm.c:1378 +#, c-format +msgid "Print width has not been initialized (%d)" +msgstr "Tampilkan lebar yang belum terinisialisasi (%d)" + +#: nm.c:1603 +msgid "Only -X 32_64 is supported" +msgstr "Hanya -X 32_64 yang didukung" + +#: nm.c:1623 +msgid "Using the --size-sort and --undefined-only options together" +msgstr "Gunakan --size-sort dan --undefined-only pilihan secara bersamaan" + +#: nm.c:1624 +msgid "will produce no output, since undefined symbols have no size." +msgstr "tidak akan menghasilkan keluaran, karena simbol tidak terdefinisi tidak memiliki ukuran." + +#: nm.c:1652 +#, c-format +msgid "data size %ld" +msgstr "ukuran data %ld" + +#: objcopy.c:424 srconv.c:1730 +#, c-format +msgid "Usage: %s [option(s)] in-file [out-file]\n" +msgstr "Penggunaan: %s [pilihan] berkas-masukan [berkas-keluaran]\n" + +#: objcopy.c:425 +#, c-format +msgid " Copies a binary file, possibly transforming it in the process\n" +msgstr " Menyalin sebuah berkas binari, kemungkinan mengubahnya dalam proses ini\n" + +#: objcopy.c:426 objcopy.c:522 +#, c-format +msgid " The options are:\n" +msgstr " Pilihan adalah:\n" + +#: objcopy.c:427 +#, c-format +msgid "" +" -I --input-target Assume input file is in format \n" +" -O --output-target Create an output file in format \n" +" -B --binary-architecture Set arch of output file, when input is binary\n" +" -F --target Set both input and output format to \n" +" --debugging Convert debugging information, if possible\n" +" -p --preserve-dates Copy modified/access timestamps to the output\n" +" -j --only-section Only copy section into the output\n" +" --add-gnu-debuglink= Add section .gnu_debuglink linking to \n" +" -R --remove-section Remove section from the output\n" +" -S --strip-all Remove all symbol and relocation information\n" +" -g --strip-debug Remove all debugging symbols & sections\n" +" --strip-unneeded Remove all symbols not needed by relocations\n" +" -N --strip-symbol Do not copy symbol \n" +" --strip-unneeded-symbol \n" +" Do not copy symbol 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 Do not strip symbol \n" +" --keep-file-symbols Do not strip file symbol(s)\n" +" --localize-hidden Turn all ELF hidden symbols into locals\n" +" -L --localize-symbol Force symbol to be marked as a local\n" +" --globalize-symbol Force symbol to be marked as a global\n" +" -G --keep-global-symbol Localize all symbols except \n" +" -W --weaken-symbol Force symbol to be marked as a weak\n" +" --weaken Force all global symbols to be marked as weak\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" +" -i --interleave Only copy one out of every bytes\n" +" -b --byte Select byte in every interleaved block\n" +" --gap-fill Fill gaps between sections with \n" +" --pad-to Pad the last section up to address \n" +" --set-start Set the start address to \n" +" {--change-start|--adjust-start} \n" +" Add to the start address\n" +" {--change-addresses|--adjust-vma} \n" +" Add to LMA, VMA and start addresses\n" +" {--change-section-address|--adjust-section-vma} {=|+|-}\n" +" Change LMA and VMA of section by \n" +" --change-section-lma {=|+|-}\n" +" Change the LMA of section by \n" +" --change-section-vma {=|+|-}\n" +" Change the VMA of section by \n" +" {--[no-]change-warnings|--[no-]adjust-warnings}\n" +" Warn if a named section does not exist\n" +" --set-section-flags =\n" +" Set section 's properties to \n" +" --add-section = Add section found in to output\n" +" --rename-section =[,] Rename section to \n" +" --change-leading-char Force output format's leading character style\n" +" --remove-leading-char Remove leading character from global symbols\n" +" --reverse-bytes= Reverse bytes at a time, in output sections with content\n" +" --redefine-sym = Redefine symbol name to \n" +" --redefine-syms --redefine-sym for all symbol pairs \n" +" listed in \n" +" --srec-len Restrict the length of generated Srecords\n" +" --srec-forceS3 Restrict the type of generated Srecords to S3\n" +" --strip-symbols -N for all symbols listed in \n" +" --strip-unneeded-symbols \n" +" --strip-unneeded-symbol for all symbols listed\n" +" in \n" +" --keep-symbols -K for all symbols listed in \n" +" --localize-symbols -L for all symbols listed in \n" +" --globalize-symbols --globalize-symbol for all in \n" +" --keep-global-symbols -G for all symbols listed in \n" +" --weaken-symbols -W for all symbols listed in \n" +" --alt-machine-code Use the target's '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" +" --impure Mark the output file as impure\n" +" --prefix-symbols Add to start of every symbol name\n" +" --prefix-sections Add to start of every section name\n" +" --prefix-alloc-sections \n" +" Add to start of every allocatable\n" +" section name\n" +" -v --verbose List all object files modified\n" +" @ Read options from \n" +" -V --version Display this program's version number\n" +" -h --help Display this output\n" +" --info List object formats & architectures supported\n" +msgstr "" +" -I --input-target Asumsikan berkas masukan berada dalam format \n" +" -O --output-target Buat sebuah berkas keluaran dalam format \n" +" -B --binary-architecture Set arsitektur dari berkas keluaran, ketika masukan adalah binari\n" +" -F --target Set kedua format masukan dan keluaran ke \n" +" --debugging Ubah informasi debug, jika memungkinkan\n" +" -p --preserve-dates Salin modifikasi/akses penanda-waktu ke keluaran\n" +" -j --only-section Salin hanya bagian kedalam keluaran\n" +" --add-gnu-debuglink= Tambahkan bagian .gnu_debuglink linking ke \n" +" -R --remove-section Hapus bagian dari keluaran\n" +" -S --strip-all Hapus seluruh informasi simbol dan relokasi\n" +" -g --strip-debug Hapus seluruh debug simbol dan bagian\n" +" --strip-unneeded Hapus seluruh simbol tidak dibutuhkan oleh relokasi\n" +" -N --strip-simbol Jangan menyalin simbol \n" +" --strip-unneeded-symbol \n" +" Jangan menyalin simbol kecuali dibutuhkan oleh\n" +" relokasi\n" +" --only-keep-debug Strip seluruhnya kecuali informasi debug\n" +" --extract-symbol Hapus isi bagian tetapi simpan simbol\n" +" -K --keep-symbol Jangan strip simbol \n" +" --keep-file-symbols Jangan strip file simbol\n" +" --localize-hidden Ubah seluruh ELF simbol tersembunyi ke lokal\n" +" -L --localize-symbol Paksa simbol untuk ditandai sebagai lokal\n" +" --globalize-symbol Paksa simbol untuk ditandai sebagai global\n" +" -G --keep-global-symbol Lokalisasi seluruh simbol kecuali \n" +" -W --weaken-symbol Paksa simbol untuk ditandai sebagai lemah\n" +" --weaken Paksa seluruh simbol global untuk ditandai sebagai lemah\n" +" -w --wildcard Ijinkan wildcard dalam perbandingan simbol\n" +" -x --discard-all Hapus seluruh simbol bukan-global\n" +" -i --interleave Salin hanya satu dari setiap bytes\n" +" -b --byte Pilih byte dalam setiap interleaved blok\n" +" --gap-fill Isi gap diantara bagian dengan \n" +" --pad-to Pad bagian terakhir sampai ke alamat \n" +" --set-start Set awal dari alamat ke \n" +" {--change-start|--adjust-start} \n" +" Tambahkan ke awal dari alamat\n" +" {--change-addresses|--adjust-vma} \n" +" Tambahkan ke LMA, VMA, dan awal alamat\n" +" {--change-section-address|--adjust-section-vma} {=|+|-}\n" +" Ubah LMA dan VMA dari bagian dengan \n" +" --change-section-lma {=|+|-}\n" +" Ubah LMA bagian dengan \n" +" --change-section-vma {=|+|-}\n" +" Ubah VMA bagian dengan \n" +" {--[no-]change-warnings|--[no-]adjust-warnings}\n" +" Peringatkan jika sebuah bagian bernama tidak ada\n" +" --set-section-flags =\n" +" Set bagian properti ke \n" +" --add-section = Tambahkan bagian ditemukan dalam ke keluaran\n" +" --rename-section =[,] Ubah nama bagian ke \n" +" --change-leading-char Paksa format keluaran gaya awal karakter\n" +" --remove-leading-char Hapus awal karakter dari global simbol\n" +" --reverse-bytes= Balik bytes dalam satu waktu, dalam bagian keluara dengan isi\n" +" --redefine-sym = Redefinisikan nama simbol ke \n" +" --redefine-syms --redefine-sym untuk seluruh pasangan simbol\n" +" terdaftar dalam \n" +" --srec-len Batasi panjang dari Srecords yang dihasilkan\n" +" --srec-forceS3 Batasi tipe dari Srecord yang dihasilkan ke S3\n" +" --strip-symbols -N untuk seluruh simbol terdaftar dalam \n" +" --strip-unneeded-symbols \n" +" --strip-unneeded-symbol untuk seluruh simbol terdaftar\n" +" dalam \n" +" --keep-symbols -K untuk seluruh simbol terdaftar dalam \n" +" --localize-symbols -L untuk seluruh simbol terdaftar dalam \n" +" --globalize-symbols --globalize-symbol untuk seluruh dalam \n" +" --keep-global-symbols -G untuk seluruh simbol terdaftar dalam \n" +" --weaken-symbols -W untuk seluruh simbol terdaftar dalam \n" +" --alt-machine-code Gunakan arsitektur target mesin\n" +" --writeable-text Tandai teks keluaran sebagai dapat-ditulis\n" +" --readonly-text Tandai teks keluaran sebagai tulis-terproteksi\n" +" --pure Tandai berkas keluaran sebagai demand paged\n" +" --impure Tandai berkas keluaran sebagai impure\n" +" --prefix-symbols Tambahkan ke awal dari setiap simbol nama\n" +" --prefix-sections Tambahkan ke awal dari setiap nama bagian\n" +" --prefix-alloc-section \n" +" Tambahkan ke awal dari setiap alokasi\n" +" nama bagian\n" +" -v --verbose Daftar seluruh berkas objek termodifikasi\n" +" @ Baca pilihan dari \n" +" -V --version Tampilkan nomor versi aplikasi ini\n" +" -h --help Tampilkan keluaran ini\n" +" --info Daftar objek format dan arsitektur yang didukung\n" + +#: objcopy.c:520 +#, c-format +msgid "Usage: %s in-file(s)\n" +msgstr "Penggunaan: %s berkas-masukan\n" + +#: objcopy.c:521 +#, c-format +msgid " Removes symbols and sections from files\n" +msgstr " Hapus simbol dan daerah dari berkas\n" + +#: objcopy.c:523 +#, c-format +msgid "" +" -I --input-target= Assume input file is in format \n" +" -O --output-target= Create an output file in format \n" +" -F --target= Set both input and output format to \n" +" -p --preserve-dates Copy modified/access timestamps to the output\n" +" -R --remove-section= Remove section from the output\n" +" -s --strip-all Remove all symbol and relocation information\n" +" -g -S -d --strip-debug Remove all debugging symbols & sections\n" +" --strip-unneeded Remove all symbols not needed by relocations\n" +" --only-keep-debug Strip everything but the debug information\n" +" -N --strip-symbol= Do not copy symbol \n" +" -K --keep-symbol= Do not strip symbol \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" +" -v --verbose List all object files modified\n" +" -V --version Display this program's version number\n" +" -h --help Display this output\n" +" --info List object formats & architectures supported\n" +" -o Place stripped output into \n" +msgstr "" +" -I --input-target= Asumsikan berkas masukan adalah dalam format \n" +" -O --output-target= Buah sebuah berkas keluaran dalam format \n" +" -F --target= Set kedua format masukan dan keluaran ke \n" +" -p --preserve-dates Salin penanda-waktu modifikasi/akses ke keluaran\n" +" -R --remove-section= Hapus bagian dari keluaran\n" +" -s --strip-all Hapus seluruh informasi simbol dan relokasi\n" +" -g -S -d --strip-debug Hapus seluruh debug simbol dan section\n" +" --strip-unneeded Hapus seluruh simbol tidak dibutuhkan oleh relokasi\n" +" --only-keep-debug Strip seluruh tetapi simpan informasi debug\n" +" -N --strip-symbol= Jangan salin simbol \n" +" -K --keep-symbol= Jangan strip simbol \n" +" --keep-file-symbols Jangan strip berkas simbol\n" +" -w --wildcard Ijinkan wildcard dalam perbandingan simbol\n" +" -x --discard-all Hapus seluruh simbol bukan-global\n" +" -X --discard-locals Hapus simbol apapun yang dihasilkan kompiler\n" +" -v --verbose Daftar seluruh berkas objek yang termodifikasi\n" +" -V --version Tampilkan nomor versi aplikasi ini\n" +" -h --help Tampilkan bantuan ini\n" +" --info Daftar format dan arsitektur objek yang didukung\n" +" -o Tempatkan keluaran ter-strip kedalam \n" + +#: objcopy.c:596 +#, c-format +msgid "unrecognized section flag `%s'" +msgstr "tanda `%s' daerah tidak dikenal" + +#: objcopy.c:597 +#, c-format +msgid "supported flags: %s" +msgstr "tanda yang didukung: %s" + +#: objcopy.c:698 +#, c-format +msgid "cannot open '%s': %s" +msgstr "tidak dapat membuka '%s': %s" + +#: objcopy.c:701 objcopy.c:3065 +#, c-format +msgid "%s: fread failed" +msgstr "%s: fread gagal" + +#: objcopy.c:774 +#, c-format +msgid "%s:%d: Ignoring rubbish found on this line" +msgstr "%s:%d: Mengabaikan sampah ditemukan di baris ini" + +#: objcopy.c:1069 +#, c-format +msgid "not stripping symbol `%s' because it is named in a relocation" +msgstr "bukan stripping simbol `%s' karena ini dinamakan dalam sebuah relokasi" + +#: objcopy.c:1152 +#, c-format +msgid "%s: Multiple redefinition of symbol \"%s\"" +msgstr "%s: Multiple redefinisi dari simbol \"%s\"" + +#: objcopy.c:1156 +#, c-format +msgid "%s: Symbol \"%s\" is target of more than one redefinition" +msgstr "%s: Simbol \"%s\" adalah target dari lebih satu redefinisi" + +#: objcopy.c:1184 +#, c-format +msgid "couldn't open symbol redefinition file %s (error: %s)" +msgstr "tidak dapat membuka berkas redefinisi %s (error: %s)" + +#: objcopy.c:1262 +#, c-format +msgid "%s:%d: garbage found at end of line" +msgstr "%s:%d: sampah ditemukan diakhir dari baris" + +#: objcopy.c:1265 +#, c-format +msgid "%s:%d: missing new symbol name" +msgstr "%s:%d: hilang nama simbol baru" + +#: objcopy.c:1275 +#, c-format +msgid "%s:%d: premature end of file" +msgstr "%s:%d: prematur akhir dari berkas" + +#: objcopy.c:1301 +#, c-format +msgid "stat returns negative size for `%s'" +msgstr "stat mengembalikan ukuran negatif untuk `%s'" + +#: objcopy.c:1313 +#, c-format +msgid "copy from `%s' [unknown] to `%s' [unknown]\n" +msgstr "salin dari `%s' [tidak dikenal] ke `%s' [tidak dikenal]\n" + +#: objcopy.c:1369 +msgid "Unable to change endianness of input file(s)" +msgstr "Tidak dapat mengubah endianness dari berkas masukan" + +#: objcopy.c:1378 +#, c-format +msgid "copy from `%s' [%s] to `%s' [%s]\n" +msgstr "salin dari `%s' [%s] ke `%s' [%s]\n" + +#: objcopy.c:1421 +#, c-format +msgid "Unable to recognise the format of the input file `%s'" +msgstr "Tidak dapat mengenali format dari berkas masukan `%s'" + +#: objcopy.c:1424 +#, c-format +msgid "Warning: Output file cannot represent architecture `%s'" +msgstr "Peringatan: Berkas keluaran tidak dapat merepresentasikan arsitektur `%s'" + +#: objcopy.c:1489 +#, c-format +msgid "can't add section '%s'" +msgstr "tidak dapat menambahkan daerah '%s'" + +#: objcopy.c:1498 +#, c-format +msgid "can't create section `%s'" +msgstr "tidak dapat membuat daerah `%s'" + +#: objcopy.c:1544 +#, c-format +msgid "cannot create debug link section `%s'" +msgstr "tidak dapat membuat debug link daerah `%s'" + +#: objcopy.c:1637 +msgid "Can't fill gap after section" +msgstr "Tidak dapat mengisi gap setelah daerah" + +#: objcopy.c:1661 +msgid "can't add padding" +msgstr "tidak dapat menambahkan padding" + +#: objcopy.c:1752 +#, c-format +msgid "cannot fill debug link section `%s'" +msgstr "tidak dapat mengisi debug link section `%s'" + +#: objcopy.c:1815 +msgid "error copying private BFD data" +msgstr "error menyalin private BFD data" + +#: objcopy.c:1826 +#, c-format +msgid "this target does not support %lu alternative machine codes" +msgstr "target ini tidak mendukung %lu alternatif kode mesin" + +#: objcopy.c:1830 +msgid "treating that number as an absolute e_machine value instead" +msgstr "membuat nomor itu sebagai sebuah nilai e_machine absolut" + +#: objcopy.c:1834 +msgid "ignoring the alternative value" +msgstr "mengabaikan nilai alternatif" + +#: objcopy.c:1864 objcopy.c:1895 +#, c-format +msgid "cannot create tempdir for archive copying (error: %s)" +msgstr "tidak dapat membuat tempdir untuk archive menyalin (error: %s)" + +#: objcopy.c:1957 +msgid "Unable to recognise the format of file" +msgstr "Tidak dapat mengenali format dari berkas" + +#: objcopy.c:2147 +#, c-format +msgid "Multiple renames of section %s" +msgstr "Multiple pergantian nama dari daerah %s" + +#: objcopy.c:2198 +msgid "error in private h\teader data" +msgstr "error dalam private header data" + +#: objcopy.c:2276 +msgid "failed to create output section" +msgstr "gagal untuk membuat daerah keluaran" + +#: objcopy.c:2290 +msgid "failed to set size" +msgstr "gagal untuk menset ukuran" + +#: objcopy.c:2304 +msgid "failed to set vma" +msgstr "gagal untuk menset vma" + +#: objcopy.c:2329 +msgid "failed to set alignment" +msgstr "gagal untuk menset alignmen" + +#: objcopy.c:2351 +msgid "failed to copy private data" +msgstr "gagal untuk menyalin private data" + +#: objcopy.c:2440 +msgid "relocation count is negative" +msgstr "jumlah relokasi negatif" + +#. User must pad the section up in order to do this. +#: objcopy.c:2501 +#, c-format +msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d" +msgstr "tidak dapat membalik bytes: panjang dari daerah %s harus secara genap terbagi oleh %d" + +#: objcopy.c:2685 +msgid "can't create debugging section" +msgstr "tidak dapat membuat daerah debug" + +#: objcopy.c:2698 +msgid "can't set debugging section contents" +msgstr "tidak dapat menset isi daerah debug" + +#: objcopy.c:2706 +#, c-format +msgid "don't know how to write debugging information for %s" +msgstr "tidak tahu bagaimana menulis informasi debug untuk %s" + +#: objcopy.c:2848 +msgid "could not create temporary file to hold stripped copy" +msgstr "tidak dapat membuat berkas sementara untuk menjaga salinan terstrip" + +#: objcopy.c:2897 +msgid "byte number must be non-negative" +msgstr "nomor byte harus tidak negatif" + +#: objcopy.c:2907 +msgid "interleave must be positive" +msgstr "interleave harus positif" + +#: objcopy.c:2927 objcopy.c:2935 +#, c-format +msgid "%s both copied and removed" +msgstr "%s kedua disalin dan dihapus" + +#: objcopy.c:3036 objcopy.c:3110 objcopy.c:3210 objcopy.c:3241 objcopy.c:3265 +#: objcopy.c:3269 objcopy.c:3289 +#, c-format +msgid "bad format for %s" +msgstr "format buruk untuk %s" + +#: objcopy.c:3060 +#, c-format +msgid "cannot open: %s: %s" +msgstr "tidak dapat membuka %s: %s" + +#: objcopy.c:3179 +#, c-format +msgid "Warning: truncating gap-fill from 0x%s to 0x%x" +msgstr "Peringatan: memotong gap-fill dari 0x%s ke 0x%x" + +#: objcopy.c:3347 +msgid "unable to parse alternative machine code" +msgstr "tidak dapat memparse kode mesin alternatif" + +#: objcopy.c:3392 +msgid "number of bytes to reverse must be positive and even" +msgstr "nomor dari byte untuk membalik harus positif dan genap" + +#: objcopy.c:3395 +#, c-format +msgid "Warning: ignoring previous --reverse-bytes value of %d" +msgstr "Peringatan: mengabaikan sebelumnya --reverse-byte nilai dari %d" + +#: objcopy.c:3423 +msgid "byte number must be less than interleave" +msgstr "byte number harus lebih kecil dari interleave" + +#: objcopy.c:3453 +#, c-format +msgid "architecture %s unknown" +msgstr "arsitektur %s tidak dikenal" + +#: objcopy.c:3457 +msgid "Warning: input target 'binary' required for binary architecture parameter." +msgstr "Peringatan: target masukan 'binary' dibutuhkan untuk parameter arsitektur binari." + +#: objcopy.c:3458 +#, c-format +msgid " Argument %s ignored" +msgstr " Argumen %s diabaikan" + +#: objcopy.c:3464 +#, c-format +msgid "warning: could not locate '%s'. System error message: %s" +msgstr "peringatan: tidak dapat mengalokasikan '%s'. Pesan error sistem: %s" + +#: objcopy.c:3475 +#, c-format +msgid "warning: could not create temporary file whilst copying '%s', (error: %s)" +msgstr "peringatan: tidak dapat membuat berkas sementara ketika menyalin '%s', (error: %s)" + +#: objcopy.c:3502 objcopy.c:3516 +#, c-format +msgid "%s %s%c0x%s never used" +msgstr "%s %s%c0x%s tidak pernah digunakan" + +#: objdump.c:182 +#, c-format +msgid "Usage: %s \n" +msgstr "Penggunaan: %s \n" + +#: objdump.c:183 +#, c-format +msgid " Display information from object .\n" +msgstr " Menampilkan informasi dari objek .\n" + +#: objdump.c:184 +#, c-format +msgid " At least one of the following switches must be given:\n" +msgstr " Paling tidak satu dari switch berikut harus diberikan:\n" + +#: objdump.c:185 +#, c-format +msgid "" +" -a, --archive-headers Display archive header information\n" +" -f, --file-headers Display the contents of the overall file header\n" +" -p, --private-headers Display object format specific file header contents\n" +" -h, --[section-]headers Display the contents of the section headers\n" +" -x, --all-headers Display the contents of all headers\n" +" -d, --disassemble Display assembler contents of executable sections\n" +" -D, --disassemble-all Display assembler contents of all sections\n" +" -S, --source Intermix source code with disassembly\n" +" -s, --full-contents Display the full contents of all sections requested\n" +" -g, --debugging Display debug information in object file\n" +" -e, --debugging-tags Display debug information using ctags style\n" +" -G, --stabs Display (in raw form) any STABS info in the file\n" +" -W, --dwarf Display DWARF info in the file\n" +" -t, --syms Display the contents of the symbol table(s)\n" +" -T, --dynamic-syms Display the contents of the dynamic symbol table\n" +" -r, --reloc Display the relocation entries in the file\n" +" -R, --dynamic-reloc Display the dynamic relocation entries in the file\n" +" @ Read options from \n" +" -v, --version Display this program's version number\n" +" -i, --info List object formats and architectures supported\n" +" -H, --help Display this information\n" +msgstr "" +" -a, --archive-headers Tampilkan informasi archive header\n" +" -f, --file-headers Tampilkan isi dari seluruh berkas header\n" +" -p, --private-headers Tampilkan format objek spesifik isi berkas header\n" +" -h, --[section-]headers Tampilkan isi dari daerah header\n" +" -x, --all-headers Tampilkan isi dari seluruh header\n" +" -d, --disassemble Tampilkan isi rakitan dari daerah executable\n" +" -D, --disassemble-all Tampilkan isi rakitan dari seluruh bagian\n" +" -S, --source Campur kode program dengan pembongkaran\n" +" -s, --full-contents Tampilkan isi penuh dari seluruh bagian yang diminta\n" +" -g, --debugging Tampilkan informasi debug dalam berkas objek\n" +" -e, --debugging-tags Tampilkan informasi debug menggunakan gaya ctags\n" +" -G, --stabs Tampilkan (dalam bentuk mentah) informasi STABS apapun dalam berkas\n" +" -W, --dwarf Tampilkan informasi DWARF dalam berkas\n" +" -t, --syms Tampilkan isi dari tabel simbol\n" +" -T, --dynamic-syms Tampilkan isi dari tabel simbol dinamis\n" +" -r, --reloc Tampilkan masukan relokasi dalam berkas\n" +" -R, --dynamic-reloc Tampilkan masukan relokasi dinamis dalam berkas\n" +" @ Baca pilihan dari \n" +" -v, --version Tampilkan nomor versi aplikasi ini\n" +" -i, --info Daftar format dan arsitektur objek yang didukung\n" +" -H, --help Tampilkan informasi ini\n" + +#: objdump.c:210 +#, c-format +msgid "" +"\n" +" The following switches are optional:\n" +msgstr "" +"\n" +" Switch berikut adalah opsional:\n" + +#: objdump.c:211 +#, c-format +msgid "" +" -b, --target=BFDNAME Specify the target object format as BFDNAME\n" +" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n" +" -j, --section=NAME Only display information for section NAME\n" +" -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n" +" -EB --endian=big Assume big endian format when disassembling\n" +" -EL --endian=little Assume little endian format when disassembling\n" +" --file-start-context Include context from start of file (with -S)\n" +" -I, --include=DIR Add DIR to search list for source files\n" +" -l, --line-numbers Include line numbers and filenames in output\n" +" -F, --file-offsets Include file offsets when displaying information\n" +" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" +" The STYLE, if specified, can be `auto', `gnu',\n" +" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" +" -w, --wide Format output for more than 80 columns\n" +" -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n" +" --start-address=ADDR Only process data whose address is >= ADDR\n" +" --stop-address=ADDR Only process data whose address is <= ADDR\n" +" --prefix-addresses Print complete address alongside disassembly\n" +" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" +" --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" +" --special-syms Include special symbols in symbol dumps\n" +"\n" +msgstr "" +" -b, --target=BFDNAME Spesifikasikan format objek target sebagai BFDNAME\n" +" -m, --architecture=MACHINE Spesifikasikan target arsitektur sebagai MESIN\n" +" -j, --section=NAME Hanya tampilkan informasi untuk daerah NAMA\n" +" -M, --disassembler-options=OPT Lewatkan teks OPT ke pembongkar\n" +" -EB --endian=big Asumsikan format big endian ketika membongkar\n" +" -EL --endian=little Asumsikan format little endian ketika membongkar\n" +" --file-start-context Masukan konteks dari awal dari berkas (dengan -S)\n" +" -I, --include=DIR Tambahkan ke daftar pencarian DIR untuk berkas sumber\n" +" -l, --line-numbers Masukan nomor baris dan nama berkas dalam keluaran\n" +" -F, --file-offsets Masukan berkas ofset ketika menampilkan informasi\n" +" -C, --dimangle[=GAYA] Dekode mangled/proses nama simbol\n" +" GAYA, jika dispesifikasikan, dapat berupa `auto', `gnu',\n" +" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" atau `gnat'\n" +" -w, --wide Format keluaran untuk lebih dari 80 kolom\n" +" -z, --disassemble-zeroes Jangan lewati blok dari nol ketika membongkar\n" +" --start-address=ADDR Hanya proses data yang alamatnya >= ADDR\n" +" --stop-address=ADDR Hanya proses data yang alamatnya <= ADDR\n" +" --prefix-addresses Tampilkan alamat lengkap disamping pembongkaran\n" +" --[no-]show-raw-insn Tampilkan heksa disamping simbol terbongkar\n" +" --adjust-vma=OFFSET Tambahkan OFFSET ke seluruh alamat daerah yang ditampilkan\n" +" --special-syms Masukan simbol spesial dalam simbol dumps\n" +"\n" + +#: objdump.c:395 +#, c-format +msgid "Sections:\n" +msgstr "Daerah:\n" + +#: objdump.c:398 objdump.c:402 +#, c-format +msgid "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Nama Ukuran VMA LMA Berkas off Algn" + +#: objdump.c:404 +#, c-format +msgid "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Nama Ukuran VMA LMA Berkas off Algn" + +#: objdump.c:408 +#, c-format +msgid " Flags" +msgstr " Tanda" + +#: objdump.c:410 +#, c-format +msgid " Pg" +msgstr " Pg" + +#: objdump.c:453 +#, c-format +msgid "%s: not a dynamic object" +msgstr "%s: bukan sebuah objek dinamis" + +#: objdump.c:878 objdump.c:902 +#, c-format +msgid " (File Offset: 0x%lx)" +msgstr " (Berkas Ofset: 0x%lx)" + +#: objdump.c:1818 +#, c-format +msgid "" +"\n" +"Disassembly of section %s:\n" +msgstr "" +"\n" +"Pembongkaran dari daerah %s:\n" + +#: objdump.c:1980 +#, c-format +msgid "Can't use supplied machine %s" +msgstr "Tidak dapat menggunakan mesin %s yang diberikan" + +#: objdump.c:1999 +#, c-format +msgid "Can't disassemble for architecture %s\n" +msgstr "Tidak dapat membongkar untuk arsitektur %s\n" + +#: objdump.c:2114 +#, c-format +msgid "" +"\n" +"Can't get contents for section '%s'.\n" +msgstr "" +"\n" +"Tidak dapat memperoleh isi dari daerah '%s'.\n" + +#: objdump.c:2125 +#, c-format +msgid "" +"\n" +"Can't uncompress section '%s'.\n" +msgstr "" +"\n" +"Tidak dapat mengekstrak daerah '%s'.\n" + +#: objdump.c:2305 +#, c-format +msgid "" +"No %s section present\n" +"\n" +msgstr "" +"Tidak ada %s daerah ada\n" +"\n" + +#: objdump.c:2314 +#, c-format +msgid "Reading %s section of %s failed: %s" +msgstr "Membaca daerah %s dari %s gagal: %s" + +#: objdump.c:2358 +#, c-format +msgid "" +"Contents of %s section:\n" +"\n" +msgstr "" +"Isi dari daerah %s:\n" +"\n" + +#: objdump.c:2489 +#, c-format +msgid "architecture: %s, " +msgstr "arsitektur: %s, " + +#: objdump.c:2492 +#, c-format +msgid "flags 0x%08x:\n" +msgstr "tanda 0x%08x:\n" + +#: objdump.c:2506 +#, c-format +msgid "" +"\n" +"start address 0x" +msgstr "" +"\n" +"awal alamat 0x" + +#: objdump.c:2569 +#, c-format +msgid "Contents of section %s:" +msgstr "Isi dari daerah %s:" + +#: objdump.c:2571 +#, c-format +msgid " (Starting at file offset: 0x%lx)" +msgstr " (Awal dari berkas ofset: 0x%lx)" + +#: objdump.c:2678 +#, c-format +msgid "no symbols\n" +msgstr "tidak ada simbol\n" + +#: objdump.c:2685 +#, c-format +msgid "no information for symbol number %ld\n" +msgstr "tidak ada informasi untuk nomor simbol %ld\n" + +#: objdump.c:2688 +#, c-format +msgid "could not determine the type of symbol number %ld\n" +msgstr "tidak dapat menentukan tipe dari nomor simbol %ld\n" + +#: objdump.c:2965 +#, c-format +msgid "" +"\n" +"%s: file format %s\n" +msgstr "" +"\n" +"%s: format berkas %s\n" + +#: objdump.c:3023 +#, c-format +msgid "%s: printing debugging information failed" +msgstr "%s: menampilkan informasi debug gagal" + +#: objdump.c:3123 +#, c-format +msgid "In archive %s:\n" +msgstr "Dalam archive %s:\n" + +#: objdump.c:3238 +msgid "error: the start address should be before the end address" +msgstr "error: awal dari alamat seharusnya sebelum akhir dari alamat" + +#: objdump.c:3243 +msgid "error: the stop address should be after the start address" +msgstr "error: stop alamat seharusnya setelah awal alamat" + +#: objdump.c:3252 +msgid "unrecognized -E option" +msgstr "pilihan -E tidak dikenal" + +#: objdump.c:3263 +#, c-format +msgid "unrecognized --endian type `%s'" +msgstr "tipe --endian `%s' tidak dikenal" + +#: rclex.c:197 +msgid "invalid value specified for pragma code_page.\n" +msgstr "nilai yang dispesifikasikan untuk prama code_page tidak valid.\n" + +#: rdcoff.c:198 +#, c-format +msgid "parse_coff_type: Bad type code 0x%x" +msgstr "parse_coff_type: Tipe kode 0x%x buruk" + +#: rdcoff.c:406 rdcoff.c:511 rdcoff.c:699 +#, c-format +msgid "bfd_coff_get_syment failed: %s" +msgstr "bfd_coff_get_syment gagal: %s" + +#: rdcoff.c:422 rdcoff.c:719 +#, c-format +msgid "bfd_coff_get_auxent failed: %s" +msgstr "bfd_coff_get_auxent gagal: %s" + +#: rdcoff.c:786 +#, c-format +msgid "%ld: .bf without preceding function" +msgstr "%ld: .bf tanpa fungsi yang mengawali" + +#: rdcoff.c:836 +#, c-format +msgid "%ld: unexpected .ef\n" +msgstr "%ld: tidak diduga .ef\n" + +#: rddbg.c:88 +#, c-format +msgid "%s: no recognized debugging information" +msgstr "%s: tidak dikenali informasi debug" + +#: rddbg.c:402 +#, c-format +msgid "Last stabs entries before error:\n" +msgstr "Akhir masukan stab sebelum error:\n" + +#: readelf.c:312 +#, c-format +msgid "Unable to seek to 0x%lx for %s\n" +msgstr "Tidak dapat mencari ke 0x%lx untuk %s\n" + +#: readelf.c:327 +#, c-format +msgid "Out of memory allocating 0x%lx bytes for %s\n" +msgstr "Kehabisan alokasi dari memori 0x%lx bytes untuk %s\n" + +#: readelf.c:337 +#, c-format +msgid "Unable to read in 0x%lx bytes of %s\n" +msgstr "Tidak dapat membaca dalam 0x%lx bytes dari %s\n" + +#: readelf.c:642 +msgid "Don't know about relocations on this machine architecture\n" +msgstr "Tidak tahu mengenai relokasi di arsitektur mesin ini\n" + +#: readelf.c:662 readelf.c:690 readelf.c:756 readelf.c:784 +msgid "relocs" +msgstr "relokasi" + +#: readelf.c:673 readelf.c:701 readelf.c:767 readelf.c:795 +msgid "out of memory parsing relocs\n" +msgstr "kehabisan memori parsing relokasi\n" + +#: readelf.c:901 +#, c-format +msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" +msgstr " Ofset Info Tipe Sim. Nilai Nama Simbol + Addend\n" + +#: readelf.c:903 +#, c-format +msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" +msgstr " Ofset Info Tipe Nilai.Sim Nama Sim + Addend\n" + +#: readelf.c:908 +#, c-format +msgid " Offset Info Type Sym. Value Symbol's Name\n" +msgstr " Ofset Info Tipe Nilai Sim Nama Simbol\n" + +#: readelf.c:910 +#, c-format +msgid " Offset Info Type Sym.Value Sym. Name\n" +msgstr " Ofset Info Tipe Nilai.Sim Nama Sim.\n" + +#: readelf.c:918 +#, c-format +msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" +msgstr " Ofset Info Tipe Nilai Simbol Nama Simbol + Addend\n" + +#: readelf.c:920 +#, c-format +msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" +msgstr " Ofset Info Tipe Nilai Sim. Nama Sim. + Addend\n" + +#: readelf.c:925 +#, c-format +msgid " Offset Info Type Symbol's Value Symbol's Name\n" +msgstr " Ofset Info Tipe Nilai Simbol Nama Simbol\n" + +#: readelf.c:927 +#, c-format +msgid " Offset Info Type Sym. Value Sym. Name\n" +msgstr " Ofset Info Tipe Nilai Sim. Nama Sim.\n" + +#: readelf.c:1204 readelf.c:1324 readelf.c:1332 +#, c-format +msgid "unrecognized: %-7lx" +msgstr "tidak dikenal: %-7lx" + +#: readelf.c:1229 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:1289 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:1291 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:1657 +#, c-format +msgid "Processor Specific: %lx" +msgstr "Prosesor Spesifik: %lx" + +#: readelf.c:1681 +#, c-format +msgid "Operating System specific: %lx" +msgstr "Sistem Operasi spesifik: %lx" + +#: readelf.c:1685 readelf.c:2562 +#, c-format +msgid ": %lx" +msgstr ": %lx" + +#: readelf.c:1698 +msgid "NONE (None)" +msgstr "KOSONG (Kosong)" + +#: readelf.c:1699 +msgid "REL (Relocatable file)" +msgstr "REL (Berkas dapat direlokasi)" + +#: readelf.c:1700 +msgid "EXEC (Executable file)" +msgstr "EXEC (Berkas dapat dieksekusi)" + +#: readelf.c:1701 +msgid "DYN (Shared object file)" +msgstr "DYN (Berkas objek terbagi)" + +#: readelf.c:1702 +msgid "CORE (Core file)" +msgstr "CORE (Berkas core)" + +#: readelf.c:1706 +#, c-format +msgid "Processor Specific: (%x)" +msgstr "Prosesor Spesifik: (%x)" + +#: readelf.c:1708 +#, c-format +msgid "OS Specific: (%x)" +msgstr "OS Spesifik: (%x)" + +#: readelf.c:1710 readelf.c:2779 +#, c-format +msgid ": %x" +msgstr ": %x" + +#: readelf.c:1722 +msgid "None" +msgstr "Kosong" + +#: readelf.c:1829 +#, c-format +msgid ": 0x%x" +msgstr ": 0x%x" + +#: readelf.c:2086 +msgid "unknown" +msgstr "tidak dikenal" + +#: readelf.c:2087 +msgid "unknown mac" +msgstr "tidak dikenal mac" + +#: readelf.c:2399 +msgid "Standalone App" +msgstr "Standalone App" + +#: readelf.c:2402 readelf.c:3221 readelf.c:3237 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:2826 +#, c-format +msgid "Usage: readelf elf-file(s)\n" +msgstr "Penggunaan: readelf berkas-elf\n" + +#: readelf.c:2827 +#, c-format +msgid " Display information about the contents of ELF format files\n" +msgstr " Menampilkan informasi mengenai isi dari berkas format ELF\n" + +#: readelf.c:2828 +#, c-format +msgid "" +" 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" +" --segments An alias for --program-headers\n" +" -S --section-headers Display the sections' header\n" +" --sections An alias for --section-headers\n" +" -g --section-groups Display the section groups\n" +" -t --section-details Display the section details\n" +" -e --headers Equivalent to: -h -l -S\n" +" -s --syms Display the symbol table\n" +" --symbols An alias for --syms\n" +" -n --notes Display the core notes (if present)\n" +" -r --relocs Display the relocations (if present)\n" +" -u --unwind Display the unwind info (if present)\n" +" -d --dynamic Display the dynamic section (if present)\n" +" -V --version-info Display the version sections (if present)\n" +" -A --arch-specific Display architecture specific information (if any).\n" +" -c --archive-index Display the symbol/file index in an archive\n" +" -D --use-dynamic Use the dynamic section info when displaying symbols\n" +" -x --hex-dump=\n" +" Dump the contents of section as bytes\n" +" -p --string-dump=\n" +" Dump the contents of section as strings\n" +" -w[lLiaprmfFsoR] or\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Display the contents of DWARF2 debug sections\n" +msgstr "" +" Pilihan adalah:\n" +" -a --all Sama dengan: -h -l -S -s -r -d -V -A -I\n" +" -h --file-header Tampilkan ELF file header\n" +" -l --program-headers Tampilkan program header\n" +" --segments Sebuah alias untuk --program-headers\n" +" -S --section-headers Tampilkan section headers\n" +" --sections Sebuah alias untuk --section-headers\n" +" -g --section-groups Tampilkan section groups\n" +" -t --section-details Tampilkan detail daerah\n" +" -e --headers Sama dengan: -h -l -S\n" +" -s --syms Tampilkan tabel simbol\n" +" --symbols Sebuah alias untuk --syms\n" +" -n --notes Tampilkan core notes (jika ada)\n" +" -r --relocs Tampilkan relokasi (jika ada)\n" +" -u --unwind Tampilkan informasi unwind (jika ada)\n" +" -d --dynamic Tampilkan daerah dinamis (jika ada)\n" +" -V --version-info Tampilkan daerah versi (jika ada)\n" +" -A --arch-specific Tampilkan informasi spesifik arsitektur (jika ada).\n" +" -c --archive-index Tampilkan simbol/berkas indeks dalam sebuah archive\n" +" -D --use-dynamic Gunakan informasi daerah dinamis ketika menampilkan simbol\n" +" -x --hex-dump=\n" +" Dump isi dari daerah sebagai bytes\n" +" -p --string-dump=\n" +" Dump isi dari daerah sebagai strings\n" +" -w[lLiaprmfFsoR] atau\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Tampilkan isi dari daerah debug DWARF2\n" + +#: readelf.c:2856 +#, c-format +msgid "" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" +msgstr "" +" -i --instruction-dump=\n" +" Bongkar isi dari daerah \n" + +#: readelf.c:2860 +#, c-format +msgid "" +" -I --histogram Display histogram of bucket list lengths\n" +" -W --wide Allow output width to exceed 80 characters\n" +" @ Read options from \n" +" -H --help Display this information\n" +" -v --version Display the version number of readelf\n" +msgstr "" +" -I --histogram Tampilkan histogram dari daftar panjang bucket\n" +" -W --wide Ijinkan lebar keluaran untuk melebihi 80 karakter\n" +" @ Baca pilihan dari \n" +" -H --help Tampilkan informasi ini\n" +" -v --version Tampilkan nomor versi dari readelf\n" + +#: readelf.c:2888 readelf.c:2916 readelf.c:2920 readelf.c:11007 +msgid "Out of memory allocating dump request table.\n" +msgstr "Kehabisan memori mengalokasikan permintaan dump tabel.\n" + +#: readelf.c:3090 readelf.c:3160 +#, c-format +msgid "Unrecognized debug option '%s'\n" +msgstr "Pilihan debug '%s' tidak dikenal\n" + +#: readelf.c:3191 +#, c-format +msgid "Invalid option '-%c'\n" +msgstr "Pilihan tidak valid '-%c'\n" + +#: readelf.c:3205 +msgid "Nothing to do.\n" +msgstr "Tidak ada yang dilakukan.\n" + +#: readelf.c:3217 readelf.c:3233 readelf.c:6495 +msgid "none" +msgstr "kosong" + +#: readelf.c:3234 +msgid "2's complement, little endian" +msgstr "2's komplemen, little endian" + +#: readelf.c:3235 +msgid "2's complement, big endian" +msgstr "2's komplemen, big endian" + +#: readelf.c:3253 +msgid "Not an ELF file - it has the wrong magic bytes at the start\n" +msgstr "Bukan sebuah berkas ELF - ini memiliki magic bytes yang salah di awal\n" + +#: readelf.c:3263 +#, c-format +msgid "ELF Header:\n" +msgstr "ELF Header:\n" + +#: readelf.c:3264 +#, c-format +msgid " Magic: " +msgstr " Magik: " + +#: readelf.c:3268 +#, c-format +msgid " Class: %s\n" +msgstr " Kelas: %s\n" + +#: readelf.c:3270 +#, c-format +msgid " Data: %s\n" +msgstr " Data: %s\n" + +#: readelf.c:3272 +#, c-format +msgid " Version: %d %s\n" +msgstr " Versi: %d %s\n" + +#: readelf.c:3279 +#, c-format +msgid " OS/ABI: %s\n" +msgstr " OS/ABI: %s\n" + +#: readelf.c:3281 +#, c-format +msgid " ABI Version: %d\n" +msgstr " Versi ABI: %d\n" + +#: readelf.c:3283 +#, c-format +msgid " Type: %s\n" +msgstr " Tipe: %s\n" + +#: readelf.c:3285 +#, c-format +msgid " Machine: %s\n" +msgstr " Mesin: %s\n" + +#: readelf.c:3287 +#, c-format +msgid " Version: 0x%lx\n" +msgstr " Versi: 0x%lx\n" + +#: readelf.c:3290 +#, c-format +msgid " Entry point address: " +msgstr " Alamat titik masuk: " + +#: readelf.c:3292 +#, c-format +msgid "" +"\n" +" Start of program headers: " +msgstr "" +"\n" +" Awal dari aplikasi headers: " + +#: readelf.c:3294 +#, c-format +msgid "" +" (bytes into file)\n" +" Start of section headers: " +msgstr "" +" (bytes kedalam berkas)\n" +" Awal dari header bagian: " + +#: readelf.c:3296 +#, c-format +msgid " (bytes into file)\n" +msgstr " (bytes kedalam berkas)\n" + +#: readelf.c:3298 +#, c-format +msgid " Flags: 0x%lx%s\n" +msgstr " Tanda: 0x%lx%s\n" + +#: readelf.c:3301 +#, c-format +msgid " Size of this header: %ld (bytes)\n" +msgstr " Ukuran dari header ini: %ld (bytes)\n" + +#: readelf.c:3303 +#, c-format +msgid " Size of program headers: %ld (bytes)\n" +msgstr " Ukuran dari aplikasi header: %ld (bytes)\n" + +#: readelf.c:3305 +#, c-format +msgid " Number of program headers: %ld\n" +msgstr " Jumlah dari aplikasi header: %ld\n" + +#: readelf.c:3307 +#, c-format +msgid " Size of section headers: %ld (bytes)\n" +msgstr " Ukuran dari header daerah: %ld (bytes)\n" + +#: readelf.c:3309 +#, c-format +msgid " Number of section headers: %ld" +msgstr " Jumlah dari header daerah: %ld" + +#: readelf.c:3314 +#, c-format +msgid " Section header string table index: %ld" +msgstr " Indeks tabel string daerah header: %ld" + +#: readelf.c:3350 readelf.c:3383 +msgid "program headers" +msgstr "aplikasi header" + +#: readelf.c:3421 readelf.c:3719 readelf.c:3760 readelf.c:3819 readelf.c:3884 +#: readelf.c:4553 readelf.c:4577 readelf.c:5827 readelf.c:5871 readelf.c:6069 +#: readelf.c:7127 readelf.c:7141 readelf.c:7635 readelf.c:7651 readelf.c:7694 +#: readelf.c:7719 readelf.c:9475 readelf.c:9667 readelf.c:10194 +#: readelf.c:10857 +msgid "Out of memory\n" +msgstr "Kehabisan memori\n" + +#: readelf.c:3448 +#, c-format +msgid "" +"\n" +"There are no program headers in this file.\n" +msgstr "" +"\n" +"Tidak ada aplikasi header dalam berkas ini.\n" + +#: readelf.c:3454 +#, c-format +msgid "" +"\n" +"Elf file type is %s\n" +msgstr "" +"\n" +"Tipe berkas ELF adalah %s\n" + +#: readelf.c:3455 +#, c-format +msgid "Entry point " +msgstr "Titik masukan " + +#: readelf.c:3457 +#, c-format +msgid "" +"\n" +"There are %d program headers, starting at offset " +msgstr "" +"\n" +"Tidak ada %d aplikasi header, dimulai di ofset " + +#: readelf.c:3469 readelf.c:3471 +#, c-format +msgid "" +"\n" +"Program Headers:\n" +msgstr "" +"\n" +"Aplikasi header:\n" + +#: readelf.c:3475 +#, c-format +msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" +msgstr " Tipe Ofset AlamatMaya AlamatPisik UkuranBerkas UkuranMemori Flg Align\n" + +#: readelf.c:3478 +#, c-format +msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" +msgstr " Tipe Ofset AlamatMaya AlamatPisik UkuranBerkas UkuranMemori Flg Align\n" + +#: readelf.c:3482 +#, c-format +msgid " Type Offset VirtAddr PhysAddr\n" +msgstr " Tipe Ofset AlamatMaya AlamatPisik\n" + +#: readelf.c:3484 +#, c-format +msgid " FileSiz MemSiz Flags Align\n" +msgstr " UkuranBerkas UkuranMemori Tanda Align\n" + +#: readelf.c:3577 +msgid "more than one dynamic segment\n" +msgstr "lebih dari satu argumen dinamis\n" + +#: readelf.c:3593 +msgid "no .dynamic section in the dynamic segment\n" +msgstr "tidak ada daerah .dinamis dalam segmen dinamis\n" + +#: readelf.c:3608 +msgid "the .dynamic section is not contained within the dynamic segment\n" +msgstr "daerah dinamis tidak berisi dalam segmen dinamis\n" + +#: readelf.c:3611 +msgid "the .dynamic section is not the first section in the dynamic segment.\n" +msgstr "daerah dinmasi bukan daerah pertama dalam segmen dinamis\n" + +#: readelf.c:3619 +msgid "Unable to find program interpreter name\n" +msgstr "Tidak dapat menemukan nama aplikasi interpretasi\n" + +#: readelf.c:3626 +msgid "Internal error: failed to create format string to display program interpreter\n" +msgstr "Internal error: gagal membuat string format untuk menampilkan aplikasi interpretasi\n" + +#: readelf.c:3630 +msgid "Unable to read program interpreter name\n" +msgstr "Tidak dapat membaca nama aplikasi interpretasi\n" + +#: readelf.c:3633 +#, c-format +msgid "" +"\n" +" [Requesting program interpreter: %s]" +msgstr "" +"\n" +" [Meminta aplikasi interpretasi: %s]" + +#: readelf.c:3645 +#, c-format +msgid "" +"\n" +" Section to Segment mapping:\n" +msgstr "" +"\n" +" Pemetaan daerah ke segmen:\n" + +#: readelf.c:3646 +#, c-format +msgid " Segment Sections...\n" +msgstr " Daerah Segmen...\n" + +#: readelf.c:3681 +msgid "Cannot interpret virtual addresses without program headers.\n" +msgstr "Tidak dapat menginterpretasikan alamat maya tanpa aplikasi header.\n" + +#: readelf.c:3697 +#, c-format +msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" +msgstr "Alamat maya 0x%lx tidak dapat dilokasikan dalam segmen PT_LOAD apapun.\n" + +#: readelf.c:3711 readelf.c:3752 +msgid "section headers" +msgstr "header daerah" + +#: readelf.c:3796 readelf.c:3861 +msgid "symbols" +msgstr "simbol" + +#: readelf.c:3806 readelf.c:3871 +msgid "symtab shndx" +msgstr "simtab shndx" + +#: readelf.c:4130 readelf.c:4537 +#, c-format +msgid "" +"\n" +"There are no sections in this file.\n" +msgstr "" +"\n" +"Tidak ada daerah dalam berkas ini.\n" + +#: readelf.c:4136 +#, c-format +msgid "There are %d section headers, starting at offset 0x%lx:\n" +msgstr "Tidak ada header daerah %d, dimulai di ofset 0x%lx:\n" + +#: readelf.c:4156 readelf.c:4653 readelf.c:4879 readelf.c:5178 readelf.c:5584 +#: readelf.c:7445 +msgid "string table" +msgstr "tabel string" + +#: readelf.c:4223 +#, c-format +msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" +msgstr "Daerah %d memiliki sh_entsize %lx tidak valid (diduga %lx)\n" + +#: readelf.c:4243 +msgid "File contains multiple dynamic symbol tables\n" +msgstr "Berkas berisi multiple tabel simbol dinamis\n" + +#: readelf.c:4256 +msgid "File contains multiple dynamic string tables\n" +msgstr "Berkas berisi multiple tabel string dinamis\n" + +#: readelf.c:4261 +msgid "dynamic strings" +msgstr "string dinamis" + +#: readelf.c:4268 +msgid "File contains multiple symtab shndx tables\n" +msgstr "Berksa berisi multiple simtab shndx tabel\n" + +#: readelf.c:4320 +#, c-format +msgid "" +"\n" +"Section Headers:\n" +msgstr "" +"\n" +"Header Daerah:\n" + +#: readelf.c:4322 +#, c-format +msgid "" +"\n" +"Section Header:\n" +msgstr "" +"\n" +"Header Daerah:\n" + +#: readelf.c:4328 readelf.c:4339 readelf.c:4350 +#, c-format +msgid " [Nr] Name\n" +msgstr " [Nr] Nama\n" + +#: readelf.c:4329 +#, c-format +msgid " Type Addr Off Size ES Lk Inf Al\n" +msgstr " Tipe Alamat Ofset Ukuran ES Lk Inf Al\n" + +#: readelf.c:4333 +#, c-format +msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Nama Tipe Alamat Ofset Ukuran ES Flg Lk Inf Al\n" + +#: readelf.c:4340 +#, c-format +msgid " Type Address Off Size ES Lk Inf Al\n" +msgstr " Tipe Alamat Ofset Ukuran ES Lk Inf Al\n" + +#: readelf.c:4344 +#, c-format +msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Nama Tipe Alamat Ofset Ukuran ES Flg Lk Inf Al\n" + +#: readelf.c:4351 +#, c-format +msgid " Type Address Offset Link\n" +msgstr " Tipe Alamat Ofset Link\n" + +#: readelf.c:4352 +#, c-format +msgid " Size EntSize Info Align\n" +msgstr " Ukuran UkuranMasuk Info Align\n" + +#: readelf.c:4356 +#, c-format +msgid " [Nr] Name Type Address Offset\n" +msgstr " [Nr] Nama Tipe Alamat Ofset\n" + +#: readelf.c:4357 +#, c-format +msgid " Size EntSize Flags Link Info Align\n" +msgstr " Ukuran UkuranMasuk Tanda Link Info Align\n" + +#: readelf.c:4362 +#, c-format +msgid " Flags\n" +msgstr " Tanda\n" + +#: readelf.c:4495 +#, c-format +msgid "" +"Key to Flags:\n" +" W (write), A (alloc), X (execute), M (merge), S (strings)\n" +" I (info), L (link order), G (group), x (unknown)\n" +" O (extra OS processing required) o (OS specific), p (processor specific)\n" +msgstr "" +"Kunci ke Tanda:\n" +" W (tulis), A (alokasi), X (execute), M (gabung), S (strings)\n" +" I (info), L (urutan penggabungan), G (grup), x (tidak diketahui)\n" +" O (ekstra pemrosesan OS dibutuhkan) o (OS spesifik), p (prosesor spesifik)\n" + +#: readelf.c:4513 +#, c-format +msgid "[: 0x%x]" +msgstr "[: 0x%x]" + +#: readelf.c:4544 +msgid "Section headers are not available!\n" +msgstr "Header Daerah tidak tersedia!\n" + +#: readelf.c:4568 +#, c-format +msgid "" +"\n" +"There are no section groups in this file.\n" +msgstr "" +"\n" +"Tidak ada daerah grup dalam berkas ini.\n" + +#: readelf.c:4604 +#, c-format +msgid "Bad sh_link in group section `%s'\n" +msgstr "sh_link buruk dalam daerah grup `%s'\n" + +#: readelf.c:4623 +#, c-format +msgid "Bad sh_info in group section `%s'\n" +msgstr "sh_info buruk dalah daerah grup `%s'\n" + +#: readelf.c:4661 readelf.c:7851 readelf.c:7932 +msgid "section data" +msgstr "daerah data" + +#: readelf.c:4673 +#, c-format +msgid " [Index] Name\n" +msgstr " [Indeks] Nama\n" + +#: readelf.c:4687 +#, c-format +msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" +msgstr "daerah [%5u] dalah daerah grup [%5u] > daerah maksimal [%5u]\n" + +#: readelf.c:4696 +#, c-format +msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" +msgstr "daerah [%5u] dalam daerah grup [%5u] telah dalam daerah grup [%5u]\n" + +#: readelf.c:4709 +#, c-format +msgid "section 0 in group section [%5u]\n" +msgstr "daerah 0 dalam grup dearah [%5u]\n" + +#: readelf.c:4804 +#, c-format +msgid "" +"\n" +"'%s' relocation section at offset 0x%lx contains %ld bytes:\n" +msgstr "" +"\n" +"'%s' relokasi daerah di ofset 0x%lx berisi %ld bytes:\n" + +#: readelf.c:4816 +#, c-format +msgid "" +"\n" +"There are no dynamic relocations in this file.\n" +msgstr "" +"\n" +"Tidak ada relokasi dinamis dalam berkas ini.\n" + +#: readelf.c:4840 +#, c-format +msgid "" +"\n" +"Relocation section " +msgstr "" +"\n" +"Daerah relokasi " + +#: readelf.c:4845 readelf.c:5254 readelf.c:5268 readelf.c:5599 +#, c-format +msgid "'%s'" +msgstr "'%s'" + +#: readelf.c:4847 readelf.c:5270 readelf.c:5601 +#, c-format +msgid " at offset 0x%lx contains %lu entries:\n" +msgstr " di ofset 0x%lx berisi %lu masukan:\n" + +#: readelf.c:4898 +#, c-format +msgid "" +"\n" +"There are no relocations in this file.\n" +msgstr "" +"\n" +"Disana tidak ada relokasi dalam berkas ini.\n" + +#: readelf.c:5077 readelf.c:5450 +msgid "unwind table" +msgstr "tabel unwind" + +#: readelf.c:5127 readelf.c:5531 +#, c-format +msgid "Skipping unexpected relocation type %s\n" +msgstr "Melewati tipe relokasi %s tidak terduga\n" + +#: readelf.c:5186 readelf.c:5592 readelf.c:5643 +#, c-format +msgid "" +"\n" +"There are no unwind sections in this file.\n" +msgstr "" +"\n" +"Disana tidak ada daerah unwind dalam berkas ini.\n" + +#: readelf.c:5249 +#, c-format +msgid "" +"\n" +"Could not find unwind info section for " +msgstr "" +"\n" +"Tidak dapat menemukan informasi unwind daerah untuk " + +#: readelf.c:5261 +msgid "unwind info" +msgstr "informasi unwind" + +#: readelf.c:5263 readelf.c:5598 +#, c-format +msgid "" +"\n" +"Unwind section " +msgstr "" +"\n" +"Daerah unwind " + +#: readelf.c:5808 readelf.c:5852 +msgid "dynamic section" +msgstr "daerah dinamis" + +#: readelf.c:5929 +#, c-format +msgid "" +"\n" +"There is no dynamic section in this file.\n" +msgstr "" +"\n" +"Disana tidak ada daerah dinamis dalam berkas ini.\n" + +#: readelf.c:5967 +msgid "Unable to seek to end of file!\n" +msgstr "Tidak dapat mencari ke akhir dari berkas!\n" + +#: readelf.c:5980 +msgid "Unable to determine the number of symbols to load\n" +msgstr "Tidak dapat menentukan jumlah dari simbol untuk diload\n" + +#: readelf.c:6015 +msgid "Unable to seek to end of file\n" +msgstr "Tidak dapat mencari ke akhir dari berkas\n" + +#: readelf.c:6022 +msgid "Unable to determine the length of the dynamic string table\n" +msgstr "Tidak dapat menentukan panjang dari tabel dinamis string\n" + +#: readelf.c:6027 +msgid "dynamic string table" +msgstr "tabel string dinamis" + +#: readelf.c:6062 +msgid "symbol information" +msgstr "informasi simbol" + +#: readelf.c:6087 +#, c-format +msgid "" +"\n" +"Dynamic section at offset 0x%lx contains %u entries:\n" +msgstr "" +"\n" +"Daerah dinamis di ofset 0x%lx berisi %u masukan:\n" + +#: readelf.c:6090 +#, c-format +msgid " Tag Type Name/Value\n" +msgstr " Tanda Tipe Nama/Nilai\n" + +#: readelf.c:6126 +#, c-format +msgid "Auxiliary library" +msgstr "Auxiliary library" + +#: readelf.c:6130 +#, c-format +msgid "Filter library" +msgstr "Filter library" + +#: readelf.c:6134 +#, c-format +msgid "Configuration file" +msgstr "Berkas konfigurasi" + +#: readelf.c:6138 +#, c-format +msgid "Dependency audit library" +msgstr "Dependensi audit perpustakaan" + +#: readelf.c:6142 +#, c-format +msgid "Audit library" +msgstr "Perpustakaan audit" + +#: readelf.c:6160 readelf.c:6188 readelf.c:6216 +#, c-format +msgid "Flags:" +msgstr "Tanda:" + +#: readelf.c:6163 readelf.c:6191 readelf.c:6218 +#, c-format +msgid " None\n" +msgstr " Kosong\n" + +#: readelf.c:6339 +#, c-format +msgid "Shared library: [%s]" +msgstr "Perpustakaan terbagi: [%s]" + +#: readelf.c:6342 +#, c-format +msgid " program interpreter" +msgstr " aplikasi interpretasi" + +#: readelf.c:6346 +#, c-format +msgid "Library soname: [%s]" +msgstr "Perpustakaan soname: [%s]" + +#: readelf.c:6350 +#, c-format +msgid "Library rpath: [%s]" +msgstr "Perpustakaan rpath: [%s]" + +#: readelf.c:6354 +#, c-format +msgid "Library runpath: [%s]" +msgstr "Perpustakaan runpath: [%s]" + +#: readelf.c:6417 +#, c-format +msgid "Not needed object: [%s]\n" +msgstr "Objek tidak dibutuhkan: [%s]\n" + +#: readelf.c:6541 +#, c-format +msgid "" +"\n" +"Version definition section '%s' contains %u entries:\n" +msgstr "" +"\n" +"Definisi versi daerah '%s' berisi %u masukan:\n" + +#: readelf.c:6544 +#, c-format +msgid " Addr: 0x" +msgstr " Alamat: 0x" + +#: readelf.c:6546 readelf.c:6648 readelf.c:6769 +#, c-format +msgid " Offset: %#08lx Link: %u (%s)\n" +msgstr " Ofset: %#08lx Link: %u (%s)\n" + +#: readelf.c:6554 +msgid "version definition section" +msgstr "daerah definisi versi" + +#: readelf.c:6583 +#, c-format +msgid " %#06x: Rev: %d Flags: %s" +msgstr " %#06x: Rev: %d Tanda: %s" + +#: readelf.c:6586 +#, c-format +msgid " Index: %d Cnt: %d " +msgstr " Indeks: %d Cnt: %d " + +#: readelf.c:6597 +#, c-format +msgid "Name: %s\n" +msgstr "Nama: %s\n" + +#: readelf.c:6599 +#, c-format +msgid "Name index: %ld\n" +msgstr "Nama indeks: %ld\n" + +#: readelf.c:6616 +#, c-format +msgid " %#06x: Parent %d: %s\n" +msgstr " %#06x: Parent %d: %s\n" + +#: readelf.c:6619 +#, c-format +msgid " %#06x: Parent %d, name index: %ld\n" +msgstr " %#06x: Parent %d, nama indeks: %ld\n" + +#: readelf.c:6623 +#, c-format +msgid " Version def aux past end of section\n" +msgstr " Versi def aux melewati akhir dari daerah\n" + +#: readelf.c:6628 +#, c-format +msgid " Version definition past end of section\n" +msgstr " Versi definisi melewati akhir dari daerah\n" + +#: readelf.c:6643 +#, c-format +msgid "" +"\n" +"Version needs section '%s' contains %u entries:\n" +msgstr "" +"\n" +"Versi membutuhkan daerah '%s' berisi %u masukan:\n" + +#: readelf.c:6646 +#, c-format +msgid " Addr: 0x" +msgstr " Alamat: 0x" + +#: readelf.c:6656 +msgid "version need section" +msgstr "versi membutuhkan daerah" + +#: readelf.c:6681 +#, c-format +msgid " %#06x: Version: %d" +msgstr " %#06x: Versi: %d" + +#: readelf.c:6684 +#, c-format +msgid " File: %s" +msgstr " Berkas: %s" + +#: readelf.c:6686 +#, c-format +msgid " File: %lx" +msgstr " Berkas: %lx" + +#: readelf.c:6688 +#, c-format +msgid " Cnt: %d\n" +msgstr " Cnt: %d\n" + +#: readelf.c:6708 +#, c-format +msgid " %#06x: Name: %s" +msgstr " %#06x: Nama: %s" + +#: readelf.c:6711 +#, c-format +msgid " %#06x: Name index: %lx" +msgstr " %#06x: Nama indeks: %lx" + +#: readelf.c:6714 +#, c-format +msgid " Flags: %s Version: %d\n" +msgstr " Tanda: %s Versi: %d\n" + +#: readelf.c:6721 +#, c-format +msgid " Version need aux past end of section\n" +msgstr " Versi membutuhkan aux melewati akhir dari daerah\n" + +#: readelf.c:6726 +#, c-format +msgid " Version need past end of section\n" +msgstr " Versi membutuhkan melewati akhir dari daerah\n" + +#: readelf.c:6760 +msgid "version string table" +msgstr "tabel versi tring" + +#: readelf.c:6764 +#, c-format +msgid "" +"\n" +"Version symbols section '%s' contains %d entries:\n" +msgstr "" +"\n" +"Versi simbol daerah '%s' berisi %d masukan:\n" + +#: readelf.c:6767 +#, c-format +msgid " Addr: " +msgstr " Alamat: " + +#: readelf.c:6777 +msgid "version symbol data" +msgstr "versi simbol data" + +#: readelf.c:6804 +msgid " 0 (*local*) " +msgstr " 0 (*local*) " + +#: readelf.c:6808 +msgid " 1 (*global*) " +msgstr " 1 (*global*) " + +#: readelf.c:6845 readelf.c:7512 +msgid "version need" +msgstr "versi membutuhkan" + +#: readelf.c:6855 +msgid "version need aux (2)" +msgstr "versi membutuhkan aux (2)" + +#: readelf.c:6870 readelf.c:6925 +msgid "*invalid*" +msgstr "*tidak valid*" + +#: readelf.c:6900 readelf.c:7577 +msgid "version def" +msgstr "versi def" + +#: readelf.c:6920 readelf.c:7592 +msgid "version def aux" +msgstr "versi def aux" + +#: readelf.c:6954 +#, c-format +msgid "" +"\n" +"No version information found in this file.\n" +msgstr "" +"\n" +"Tidak ada informasi versi ditemukan dalam berkas ini.\n" + +#: readelf.c:7075 +#, c-format +msgid ": %x" +msgstr ": %x" + +#: readelf.c:7133 +msgid "Unable to read in dynamic data\n" +msgstr "Tidak dapat membaca dalam data dinamis\n" + +#: readelf.c:7224 readelf.c:7264 readelf.c:7288 readelf.c:7318 readelf.c:7342 +msgid "Unable to seek to start of dynamic information\n" +msgstr "Tidak dapat mencari awal dari informasi dinamis\n" + +#: readelf.c:7230 readelf.c:7270 +msgid "Failed to read in number of buckets\n" +msgstr "Gagal untuk membaca dalam jumlah dari buckets\n" + +#: readelf.c:7236 +msgid "Failed to read in number of chains\n" +msgstr "Gagal untuk membaca dalam jumlah dari rantai\n" + +#: readelf.c:7326 +msgid "Failed to determine last chain length\n" +msgstr "Gagal untuk menentukan akhir dari panjang rantai\n" + +#: readelf.c:7363 +#, c-format +msgid "" +"\n" +"Symbol table for image:\n" +msgstr "" +"\n" +"Tabel simbol untuk gambar:\n" + +#: readelf.c:7365 readelf.c:7383 +#, c-format +msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" +msgstr " Num Buc: Nilai Ukuran Tipe Bind Vis Ndx Nama\n" + +#: readelf.c:7367 readelf.c:7385 +#, c-format +msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" +msgstr " Num Buc: Nilai Ukuran Tipe Bind Vis Ndx Nama\n" + +#: readelf.c:7381 +#, c-format +msgid "" +"\n" +"Symbol table of `.gnu.hash' for image:\n" +msgstr "" +"\n" +"Tabel simbol dari `.gnu.hash' untuk image:\n" + +#: readelf.c:7421 +#, c-format +msgid "" +"\n" +"Symbol table '%s' contains %lu entries:\n" +msgstr "" +"\n" +"Tabel simbol '%s' berisi %lu masukan:\n" + +#: readelf.c:7425 +#, c-format +msgid " Num: Value Size Type Bind Vis Ndx Name\n" +msgstr " Jumlah: Nilai Ukuran TIpe Bind Vis Ndx Nama\n" + +#: readelf.c:7427 +#, c-format +msgid " Num: Value Size Type Bind Vis Ndx Name\n" +msgstr " Jumlah: Nilai Ukuran Tipe Bind Vis Ndx Nama\n" + +#: readelf.c:7483 +msgid "version data" +msgstr "versi data" + +#: readelf.c:7525 +msgid "version need aux (3)" +msgstr "versi membutuhkan aux (3)" + +#: readelf.c:7552 +msgid "bad dynamic symbol\n" +msgstr "simbol dinamis buruk\n" + +#: readelf.c:7616 +#, c-format +msgid "" +"\n" +"Dynamic symbol information is not available for displaying symbols.\n" +msgstr "" +"\n" +"Informasi simbol dinamis tidak tersedia untuk menampilkan simbol.\n" + +#: readelf.c:7628 +#, c-format +msgid "" +"\n" +"Histogram for bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histogram untuk daftar panjang bucket (total dari %lu buckets):\n" + +#: readelf.c:7630 readelf.c:7700 +#, c-format +msgid " Length Number %% of total Coverage\n" +msgstr " Panjang Nomor %% dari total Coverage\n" + +#: readelf.c:7698 +#, c-format +msgid "" +"\n" +"Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histogram untuk `.gnu.hash' daftar panjang bucket (total dari %lu bucket):\n" + +#: readelf.c:7764 +#, c-format +msgid "" +"\n" +"Dynamic info segment at offset 0x%lx contains %d entries:\n" +msgstr "" +"\n" +"Segmen info dinamis di ofset 0x%lx berisi %d masukan:\n" + +#: readelf.c:7767 +#, c-format +msgid " Num: Name BoundTo Flags\n" +msgstr " Jumlah: Nama BoundTo Tanda\n" + +#: readelf.c:7819 +#, c-format +msgid "" +"\n" +"Assembly dump of section %s\n" +msgstr "" +"\n" +"Daerah perakitan dump dari %s\n" + +#: readelf.c:7844 readelf.c:7922 +#, c-format +msgid "" +"\n" +"Section '%s' has no data to dump.\n" +msgstr "" +"\n" +"Daerah '%s' tidak memiliki data untuk di dump.\n" + +#: readelf.c:7855 +#, c-format +msgid "" +"\n" +"String dump of section '%s':\n" +msgstr "" +"\n" +"String dump dari daerah '%s':\n" + +#: readelf.c:7873 +#, c-format +msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " Catatan: Daerah ini memiliki relokasi terhadatnya, tetapi ini BELUM pernah diaplikasikan ke dump ini.\n" + +#: readelf.c:7900 +#, c-format +msgid " No strings found in this section." +msgstr " Tidak ada string yang ditemukan dalam daerah ini." + +#: readelf.c:7927 +#, c-format +msgid "" +"\n" +"Hex dump of section '%s':\n" +msgstr "" +"\n" +"Hex dump dari daerah '%s':\n" + +#: readelf.c:7952 +#, c-format +msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " CATATAN: Daerah ini memiliki relokasi terhadap ini, tetapi ini BELUM diaplikasikan ke dump ini.\n" + +#: readelf.c:8135 +#, c-format +msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n" +msgstr "Hilang pengetahuan dari 32-bit tipe relokasi yang digunakan dalam daerah DWARF dari mesin nomor %d\n" + +#: readelf.c:8432 +#, c-format +msgid "unable to apply unsupported reloc type %d to section %s\n" +msgstr "tidak dapat mengaplikasikan tipe relokasi %d tidak didukung ke daerah %s\n" + +#: readelf.c:8440 +#, c-format +msgid "skipping invalid relocation offset 0x%lx in section %s\n" +msgstr "melewati relokasi ofset 0x%lx tidak valid dalam daerah %s\n" + +#: readelf.c:8461 +#, c-format +msgid "skipping unexpected symbol type %s in %ld'th relocation in section %s\n" +msgstr "melewati tipe simbol %s tidak terduga dalam relokasi ke %ld dalam daerah %s\n" + +#: readelf.c:8503 +#, c-format +msgid "%s section data" +msgstr "daerah data %s" + +#: readelf.c:8568 +#, c-format +msgid "" +"\n" +"Section '%s' has no debugging data.\n" +msgstr "" +"\n" +"Daerah '%s' tidak memiliki data debugging.\n" + +#: readelf.c:8603 +#, c-format +msgid "Unrecognized debug section: %s\n" +msgstr "Daerah debug tidak dikenal: %s\n" + +#: readelf.c:8631 +#, c-format +msgid "Section '%s' was not dumped because it does not exist!\n" +msgstr "Daerah '%s' tidak didump karena ini tidak ada!\n" + +#: readelf.c:8669 +#, c-format +msgid "Section %d was not dumped because it does not exist!\n" +msgstr "Daerah %d tidak didump karena ini tidak ada!\n" + +#: readelf.c:9118 +msgid "attributes" +msgstr "atribut" + +#: readelf.c:9139 +#, c-format +msgid "ERROR: Bad section length (%d > %d)\n" +msgstr "ERROR: Panjang daerah buruk (%d > %d)\n" + +#: readelf.c:9170 +#, c-format +msgid "ERROR: Bad subsection length (%d > %d)\n" +msgstr "ERROR: panjang subsection buruk (%d > %d)\n" + +#: readelf.c:9229 +#, c-format +msgid "Unknown format '%c'\n" +msgstr "Format '%c' tidak diketahui\n" + +#: readelf.c:9382 readelf.c:9897 +msgid "liblist" +msgstr "liblist" + +#: readelf.c:9469 +msgid "options" +msgstr "pilihan" + +#: readelf.c:9499 +#, c-format +msgid "" +"\n" +"Section '%s' contains %d entries:\n" +msgstr "" +"\n" +"Daerah '%s' berisi %d masukan:\n" + +#: readelf.c:9660 +msgid "conflict list found without a dynamic symbol table\n" +msgstr "daftar konflik ditemukan tanpa sebuah tabel simbol dinamis\n" + +#: readelf.c:9676 readelf.c:9690 +msgid "conflict" +msgstr "konflik" + +#: readelf.c:9700 +#, c-format +msgid "" +"\n" +"Section '.conflict' contains %lu entries:\n" +msgstr "" +"\n" +"Daerah '.conflict' berisi %lu masukan:\n" + +#: readelf.c:9702 +msgid " Num: Index Value Name" +msgstr " Num: Indeks Nilai Nama" + +#: readelf.c:9734 +msgid "GOT" +msgstr "GOT" + +#: readelf.c:9735 +#, c-format +msgid "" +"\n" +"Primary GOT:\n" +msgstr "" +"\n" +"GOT Utama:\n" + +#: readelf.c:9736 +#, c-format +msgid " Canonical gp value: " +msgstr " Kanonikal nilai gp: " + +#: readelf.c:9740 readelf.c:9831 +#, c-format +msgid " Reserved entries:\n" +msgstr " Masukan terpesan:\n" + +#: readelf.c:9741 +#, c-format +msgid " %*s %10s %*s Purpose\n" +msgstr " %*s %10s %*s Tujuan\n" + +#: readelf.c:9757 +#, c-format +msgid " Local entries:\n" +msgstr " Masukan lokal:\n" + +#: readelf.c:9758 +#, c-format +msgid " %*s %10s %*s\n" +msgstr " %*s %10s %*s\n" + +#: readelf.c:9773 +#, c-format +msgid " Global entries:\n" +msgstr " Masukan global:\n" + +#: readelf.c:9774 +#, c-format +msgid " %*s %10s %*s %*s %-7s %3s %s\n" +msgstr " %*s %10s %*s %*s %-7s %3s %s\n" + +#: readelf.c:9829 +msgid "PLT GOT" +msgstr "PLT GOT" + +#: readelf.c:9830 +#, c-format +msgid "" +"\n" +"PLT GOT:\n" +"\n" +msgstr "" +"\n" +"PLT GOT:\n" +"\n" + +#: readelf.c:9832 +#, c-format +msgid " %*s %*s Purpose\n" +msgstr " %*s %*s Tujuan\n" + +#: readelf.c:9840 +#, c-format +msgid " Entries:\n" +msgstr " Masukan:\n" + +#: readelf.c:9841 +#, c-format +msgid " %*s %*s %*s %-7s %3s %s\n" +msgstr " %*s %*s %*s %-7s %3s %s\n" + +#: readelf.c:9904 +msgid "liblist string table" +msgstr "liblist tabel string" + +#: readelf.c:9914 +#, c-format +msgid "" +"\n" +"Library list section '%s' contains %lu entries:\n" +msgstr "" +"\n" +"Daftar perpustakaan daerah '%s' berisi %lu masukan:\n" + +#: readelf.c:9967 +msgid "NT_AUXV (auxiliary vector)" +msgstr "NT_AUXV (auxiliary vector)" + +#: readelf.c:9969 +msgid "NT_PRSTATUS (prstatus structure)" +msgstr "NT_PRSTATUS (prstatus struktur)" + +#: readelf.c:9971 +msgid "NT_FPREGSET (floating point registers)" +msgstr "NT_FPREGSET (register bilangan pecahan)" + +#: readelf.c:9973 +msgid "NT_PRPSINFO (prpsinfo structure)" +msgstr "NT_PRPSINFO (prpsinfo struktur)" + +#: readelf.c:9975 +msgid "NT_TASKSTRUCT (task structure)" +msgstr "NT_TASKSTRUCT (struktur tugas)" + +#: readelf.c:9977 +msgid "NT_PRXFPREG (user_xfpregs structure)" +msgstr "NT_PRXFPREG (struktur user_xfpregs)" + +#: readelf.c:9979 +msgid "NT_PPC_VMX (ppc Altivec registers)" +msgstr "NT_PPC_VMX (register ppc Altivec)" + +#: readelf.c:9981 +msgid "NT_PPC_VSX (ppc VSX registers)" +msgstr "NT_PPC_VSX (register ppc VSX)" + +#: readelf.c:9983 +msgid "NT_PSTATUS (pstatus structure)" +msgstr "NT_PSTATUS (struktur pstatus)" + +#: readelf.c:9985 +msgid "NT_FPREGS (floating point registers)" +msgstr "NT_FPREGS (register bilangan pecahan)" + +#: readelf.c:9987 +msgid "NT_PSINFO (psinfo structure)" +msgstr "NT_PSINFO (struktur psinfo)" + +#: readelf.c:9989 +msgid "NT_LWPSTATUS (lwpstatus_t structure)" +msgstr "NT_LWPSTATUS (struktur lwpstatus_t)" + +#: readelf.c:9991 +msgid "NT_LWPSINFO (lwpsinfo_t structure)" +msgstr "NT_LWPSINFO (struktur lwpsinfo_t)" + +#: readelf.c:9993 +msgid "NT_WIN32PSTATUS (win32_pstatus structure)" +msgstr "NT_WIN32PSTATUS (struktur win32_pstatus)" + +#: readelf.c:10001 +msgid "NT_VERSION (version)" +msgstr "NT_VERSION (versi)" + +#: readelf.c:10003 +msgid "NT_ARCH (architecture)" +msgstr "NT_ARCH (arsitektur)" + +#: readelf.c:10008 readelf.c:10031 readelf.c:10053 +#, c-format +msgid "Unknown note type: (0x%08x)" +msgstr "Tipe catatan tidak dikenal: (0x%08x)" + +#: readelf.c:10020 +msgid "NT_GNU_ABI_TAG (ABI version tag)" +msgstr "NT_GNU_ABI_TAG (Tanda versi ABI)" + +#: readelf.c:10022 +msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)" +msgstr "NT_GNU_HWCAP (DSO-supplied software HWCAP info)" + +#: readelf.c:10024 +msgid "NT_GNU_BUILD_ID (unique build ID bitstring)" +msgstr "NT_GNU_BUILD_ID (unik ID pembuatan bitstring)" + +#: readelf.c:10026 +msgid "NT_GNU_GOLD_VERSION (gold version)" +msgstr "NT_GNU_GOLD_VERSION (versi emas)" + +#. NetBSD core "procinfo" structure. +#: readelf.c:10043 +msgid "NetBSD procinfo structure" +msgstr "NetBSD struktur procinfo" + +#: readelf.c:10070 readelf.c:10084 +msgid "PT_GETREGS (reg structure)" +msgstr "PT_GETREGS (struktur reg)" + +#: readelf.c:10072 readelf.c:10086 +msgid "PT_GETFPREGS (fpreg structure)" +msgstr "PT_GETFPREGS (struktur fpreg)" + +#: readelf.c:10092 +#, c-format +msgid "PT_FIRSTMACH+%d" +msgstr "PT_FIRSTMACH+%d" + +#: readelf.c:10148 +msgid "notes" +msgstr "catatan" + +#: readelf.c:10154 +#, c-format +msgid "" +"\n" +"Notes at offset 0x%08lx with length 0x%08lx:\n" +msgstr "" +"\n" +"Catatan di ofset 0x%08lx dengan panjang 0x%08lx:\n" + +#: readelf.c:10156 +#, c-format +msgid " Owner\t\tData size\tDescription\n" +msgstr " Pemilik\t\tBesar Data\tDeskripsi\n" + +#: readelf.c:10175 +#, c-format +msgid "corrupt note found at offset %lx into core notes\n" +msgstr "catatan terkorupsi ditemukan di ofset %lx kedalam core notes\n" + +#: readelf.c:10177 +#, c-format +msgid " type: %lx, namesize: %08lx, descsize: %08lx\n" +msgstr " tipe: %lx, namesize: %08lx, descsize: %08lx\n" + +#: readelf.c:10275 +#, c-format +msgid "No note segments present in the core file.\n" +msgstr "Tidak ada catatan segmen hadir dalam berkas inti.\n" + +#: readelf.c:10359 +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 "" +"Instance ini dari readelf telah dibuat tanpa dukungan untuk\n" +"tipe data 64 bit dan jadi ini tidak dapat membaca berkas ELF 64 bit.\n" + +#: readelf.c:10406 +#, c-format +msgid "%s: Failed to read file header\n" +msgstr "%s: Gagal untuk membaca berkas header\n" + +#: readelf.c:10419 +#, c-format +msgid "" +"\n" +"File: %s\n" +msgstr "" +"\n" +"Berkas: %s\n" + +#: readelf.c:10572 readelf.c:10892 +#, c-format +msgid "%s: failed to read archive header\n" +msgstr "%s: gagal untuk membaca header archive\n" + +#: readelf.c:10595 +#, c-format +msgid "%s: the archive index is empty\n" +msgstr "%s: indeks archive kosong\n" + +#: readelf.c:10603 readelf.c:10626 +#, c-format +msgid "%s: failed to read archive index\n" +msgstr "%s: gagal untuk membaca archive indeks\n" + +#: readelf.c:10612 +#, c-format +msgid "%s: the archive index is supposed to have %ld entries, but the size in the header is too small\n" +msgstr "%s: archive indeks seharusnya memiliki %ld masukan, tetapi ukuran dalam header terlalu kecil\n" + +#: readelf.c:10619 +msgid "Out of memory whilst trying to read archive symbol index\n" +msgstr "Kehabisan memeri ketika mencoba membaca indeks simbol archive\n" + +#: readelf.c:10637 +msgid "Out of memory whilst trying to convert the archive symbol index\n" +msgstr "Kehabisan memori ketika mencoba mengubak indeks simbol archive\n" + +#: readelf.c:10649 +#, c-format +msgid "%s: the archive has an index but no symbols\n" +msgstr "%s: archive memiliki sebuah indeks tetapi bukan simbol\n" + +#: readelf.c:10657 +msgid "Out of memory whilst trying to read archive index symbol table\n" +msgstr "Kehabisan memori ketika mencoba untuk membaca indeks tabel simbol archive\n" + +#: readelf.c:10664 +#, c-format +msgid "%s: failed to read archive index symbol table\n" +msgstr "%s: gagal untuk membaca indeks simbol tabel archive\n" + +#: readelf.c:10673 +#, c-format +msgid "%s: failed to skip archive symbol table\n" +msgstr "%s: gagal untuk melewati simbol tabel archive\n" + +#: readelf.c:10687 +#, c-format +msgid "%s: failed to read archive header following archive index\n" +msgstr "%s: gagal untuk membaca archive header dari indeks archive berikut\n" + +#: readelf.c:10693 +#, c-format +msgid "%s has no archive index\n" +msgstr "%s tidak memiliki indeks archive\n" + +#: readelf.c:10704 +msgid "Out of memory reading long symbol names in archive\n" +msgstr "Kehabisan memori membaca nama simbol panjang dalam archive\n" + +#: readelf.c:10712 +#, c-format +msgid "%s: failed to read long symbol name string table\n" +msgstr "%s: gagal untuk membaca nama simbol panjang tabel string\n" + +#: readelf.c:10727 +#, c-format +msgid "%s: failed to read archive header following long symbol names\n" +msgstr "%s: gagal untuk membaca archive header dari nama simbol panjang berikut\n" + +#: readelf.c:10737 +#, c-format +msgid "%s: unable to dump the index as none was found\n" +msgstr "%s: tidak dapat mendeump indeks sebagai kosong telah ditemukan\n" + +#: readelf.c:10744 +#, c-format +msgid "Index of archive %s: (%ld entries, 0x%lx bytes in the symbol table)\n" +msgstr "Indeks dari archive %s: (%ld masukan, 0x%lx bytes dalam tabel simbol)\n" + +#: readelf.c:10754 +#, c-format +msgid "%s: failed to seek to next file name\n" +msgstr "%s: gagal untuk mencari nama berkas selanjutnya\n" + +#: readelf.c:10761 +#, c-format +msgid "%s: failed to read file name\n" +msgstr "%s: gagal untuk membaca nama berkas\n" + +#: readelf.c:10773 readelf.c:10782 +#, c-format +msgid "Binary %s contains:\n" +msgstr "Binari %s berisi:\n" + +#: readelf.c:10787 +#, c-format +msgid "%s: end of the symbol table reached before the end of the index\n" +msgstr "%s: akhir dari simbel tabel dicapai sebelum akhir dari indeks\n" + +#: readelf.c:10796 +#, c-format +msgid "%s: symbols remain in the index symbol table, but without corresponding entries in the index table\n" +msgstr "%s: simbol tetap berada dalam tabel simbol indeks, tetapi tanpa masukan yang berhubunga dalam tabel indeks\n" + +#: readelf.c:10805 +#, c-format +msgid "%s: failed to seek back to start of object files in the archive\n" +msgstr "%s: gagal untuk seek back ke awal dari berkas objek dalam archive\n" + +#: readelf.c:10833 +#, c-format +msgid "%s: invalid archive string table offset %lu\n" +msgstr "%s: ofset tabel string archive tidak valid %lu\n" + +#: readelf.c:10849 +#, c-format +msgid "%s: bad archive file name\n" +msgstr "%s: nama berkas archive buruk\n" + +#: readelf.c:10881 +#, c-format +msgid "%s: failed to seek to next archive header\n" +msgstr "%s: gagak untuk mencarai header archive selanjutnya\n" + +#: readelf.c:10920 +#, c-format +msgid "'%s': No such file\n" +msgstr "'%s': Tidak ada berkas seperti itu\n" + +#: readelf.c:10922 +#, c-format +msgid "Could not locate '%s'. System error message: %s\n" +msgstr "Tidak dapat menemukan '%s'. Pesan error sistem: %s\n" + +#: readelf.c:10929 +#, c-format +msgid "'%s' is not an ordinary file\n" +msgstr "'%s' bukan sebuah berkas biasa\n" + +#: readelf.c:10936 +#, c-format +msgid "Input file '%s' is not readable.\n" +msgstr "Berkas masukan '%s' tidak dapat dibaca.\n" + +#: readelf.c:10942 +#, c-format +msgid "%s: Failed to read file's magic number\n" +msgstr "%s: Gagal membaca berkas nomor magik\n" + +#: readelf.c:10952 +#, c-format +msgid "File %s is not an archive so its index cannot be displayed.\n" +msgstr "Berkas %s bukan sebuah archive jadi indeksnya tidak dapat ditampilkan.\n" + +#: rename.c:124 +#, c-format +msgid "%s: cannot set time: %s" +msgstr "%s: tidak dapat menset waktu: %s" + +#. We have to clean up here. +#: rename.c:159 rename.c:197 +#, c-format +msgid "unable to rename '%s'; reason: %s" +msgstr "tidak dapat mengubah nama '%s'; alasan: %s" + +#: rename.c:205 +#, c-format +msgid "unable to copy file '%s'; reason: %s" +msgstr "tidak dapat menyalin berkas '%s'; alasan: %s" + +#: resbin.c:120 +#, c-format +msgid "%s: not enough binary data" +msgstr "%s: tidak cukup data binari" + +#: resbin.c:136 +msgid "null terminated unicode string" +msgstr "kosong diakhir string unicode" + +#: resbin.c:163 resbin.c:169 +msgid "resource ID" +msgstr "ID sumber daya" + +#: resbin.c:208 +msgid "cursor" +msgstr "kursor" + +#: resbin.c:239 resbin.c:246 +msgid "menu header" +msgstr "menu header" + +#: resbin.c:255 +msgid "menuex header" +msgstr "menuex header" + +#: resbin.c:259 +msgid "menuex offset" +msgstr "menuex ofset" + +#: resbin.c:264 +#, c-format +msgid "unsupported menu version %d" +msgstr "versi menu %d tidak didukung" + +#: resbin.c:289 resbin.c:304 resbin.c:366 +msgid "menuitem header" +msgstr "menuitem header" + +#: resbin.c:396 +msgid "menuitem" +msgstr "menuitem" + +#: resbin.c:433 resbin.c:461 +msgid "dialog header" +msgstr "header dialog" + +#: resbin.c:451 +#, c-format +msgid "unexpected DIALOGEX version %d" +msgstr "versi %d DIALOGEX tidak terduga" + +#: resbin.c:496 +msgid "dialog font point size" +msgstr "dialog ukuran titik font" + +#: resbin.c:504 +msgid "dialogex font information" +msgstr "informasi font dialogex" + +#: resbin.c:530 resbin.c:548 +msgid "dialog control" +msgstr "kontrol dialog" + +#: resbin.c:540 +msgid "dialogex control" +msgstr "kontrol dialogex" + +#: resbin.c:569 +msgid "dialog control end" +msgstr "akhir kontrol dialog" + +#: resbin.c:581 +msgid "dialog control data" +msgstr "kontrol data dialog" + +#: resbin.c:621 +msgid "stringtable string length" +msgstr "panjang string stringtabel" + +#: resbin.c:631 +msgid "stringtable string" +msgstr "stringtabel string" + +#: resbin.c:661 +msgid "fontdir header" +msgstr "fontdir header" + +#: resbin.c:675 +msgid "fontdir" +msgstr "fontdir" + +#: resbin.c:692 +msgid "fontdir device name" +msgstr "fontdir nama perangkat" + +#: resbin.c:698 +msgid "fontdir face name" +msgstr "fontdir nama muka" + +#: resbin.c:738 +msgid "accelerator" +msgstr "akselerator" + +#: resbin.c:797 +msgid "group cursor header" +msgstr "grup kursor header" + +#: resbin.c:801 resrc.c:1355 +#, c-format +msgid "unexpected group cursor type %d" +msgstr "tipe kursor %d grup tidak terduga" + +#: resbin.c:816 +msgid "group cursor" +msgstr "grup kursor" + +#: resbin.c:852 +msgid "group icon header" +msgstr "grup ikon header" + +#: resbin.c:856 resrc.c:1302 +#, c-format +msgid "unexpected group icon type %d" +msgstr "tipe ikon grup %d tidak terduga" + +#: resbin.c:871 +msgid "group icon" +msgstr "grup ikon" + +#: resbin.c:935 resbin.c:1151 +msgid "unexpected version string" +msgstr "string versi tidak terduga" + +#: resbin.c:966 +#, c-format +msgid "version length %d does not match resource length %lu" +msgstr "panjang versi %d tidak cocok dengan panjang sumber daya %lu" + +#: resbin.c:970 +#, c-format +msgid "unexpected version type %d" +msgstr "tipe versi %d tidak terduga" + +#: resbin.c:982 +#, c-format +msgid "unexpected fixed version information length %ld" +msgstr "panjang informasi versi %ld tetap tidak terduga" + +#: resbin.c:985 +msgid "fixed version info" +msgstr "info versi tetap" + +#: resbin.c:989 +#, c-format +msgid "unexpected fixed version signature %lu" +msgstr "tanda tangan versi %lu tetap tidak terduga" + +#: resbin.c:993 +#, c-format +msgid "unexpected fixed version info version %lu" +msgstr "info versi %lu versi tetap tidak terduga" + +#: resbin.c:1022 +msgid "version var info" +msgstr "info var versi" + +#: resbin.c:1039 +#, c-format +msgid "unexpected stringfileinfo value length %ld" +msgstr "nilai panjang %ld stringfileinfo tidak terduga" + +#: resbin.c:1049 +#, c-format +msgid "unexpected version stringtable value length %ld" +msgstr "nilai panjang %ld versi stringtabel tidak terduga" + +#: resbin.c:1083 +#, c-format +msgid "unexpected version string length %ld != %ld + %ld" +msgstr "versi panjang string %ld != %ld + %ld tidak terduga" + +#: resbin.c:1094 +#, c-format +msgid "unexpected version string length %ld < %ld" +msgstr "versi panjang string %ld < %ld tidak terduga" + +#: resbin.c:1111 +#, c-format +msgid "unexpected varfileinfo value length %ld" +msgstr "nilai panjang varfileinfo %ld tidak terduga" + +#: resbin.c:1130 +msgid "version varfileinfo" +msgstr "versi varfileinfo" + +#: resbin.c:1145 +#, c-format +msgid "unexpected version value length %ld" +msgstr "nilai panjang versi %ld tidak terduga" + +#: rescoff.c:124 +msgid "filename required for COFF input" +msgstr "nama berkas dibutuhkan untuk masukan COFF" + +#: rescoff.c:141 +#, c-format +msgid "%s: no resource section" +msgstr "%s: daerah tidak ada sumber daya" + +#: rescoff.c:173 +#, c-format +msgid "%s: %s: address out of bounds" +msgstr "%s: %s: alamat diluar dari ikatan" + +#: rescoff.c:190 +msgid "directory" +msgstr "direktori" + +#: rescoff.c:218 +msgid "named directory entry" +msgstr "nama dari masukan direktori" + +#: rescoff.c:227 +msgid "directory entry name" +msgstr "nama masukan direktori" + +#: rescoff.c:247 +msgid "named subdirectory" +msgstr "nama subdirektori" + +#: rescoff.c:255 +msgid "named resource" +msgstr "nama sumber daya" + +#: rescoff.c:270 +msgid "ID directory entry" +msgstr "ID masukan direktori" + +#: rescoff.c:287 +msgid "ID subdirectory" +msgstr "ID subdirektori" + +#: rescoff.c:295 +msgid "ID resource" +msgstr "ID sumber daya" + +#: rescoff.c:320 +msgid "resource type unknown" +msgstr "tipe sumber daya tidak dikenal" + +#: rescoff.c:323 +msgid "data entry" +msgstr "masukan data" + +#: rescoff.c:331 +msgid "resource data" +msgstr "sumber daya data" + +#: rescoff.c:336 +msgid "resource data size" +msgstr "ukuran data sumber daya" + +#: rescoff.c:431 +msgid "filename required for COFF output" +msgstr "nama berkas dibutuhkan untuk output COFF" + +#: rescoff.c:715 +msgid "can't get BFD_RELOC_RVA relocation type" +msgstr "tidak dapat memperoleh tipe relokasi BFD_RELOC_RVA" + +#: resrc.c:262 resrc.c:333 +#, c-format +msgid "can't open temporary file `%s': %s" +msgstr "tida dapat membuka berkas sementara `%s': %s" + +#: resrc.c:268 +#, c-format +msgid "can't redirect stdout: `%s': %s" +msgstr "tidak dapat meredirek stdout: `%s': %s" + +#: resrc.c:284 +#, c-format +msgid "%s %s: %s" +msgstr "%s %s: %s" + +#: resrc.c:329 +#, c-format +msgid "can't execute `%s': %s" +msgstr "tidak dapat menjalankan `%s': %s" + +#: resrc.c:338 +#, c-format +msgid "Using temporary file `%s' to read preprocessor output\n" +msgstr "Menggunakan berkas sementara `%s' untuk membaca keluaran preprosesor\n" + +#: resrc.c:345 +#, c-format +msgid "can't popen `%s': %s" +msgstr "tidak dapat popen `%s': %s" + +#: resrc.c:347 +#, c-format +msgid "Using popen to read preprocessor output\n" +msgstr "Menggunakan popen untuk membaca keluaran preprosesor\n" + +#: resrc.c:413 +#, c-format +msgid "Tried `%s'\n" +msgstr "Mencoba `%s'\n" + +#: resrc.c:424 +#, c-format +msgid "Using `%s'\n" +msgstr "Menggunakan `%s'\n" + +#: resrc.c:608 +msgid "preprocessing failed." +msgstr "preprosesing gagal." + +#: resrc.c:631 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: resrc.c:639 +#, c-format +msgid "%s: unexpected EOF" +msgstr "%s: tidak terduga EOF" + +#: resrc.c:688 +#, c-format +msgid "%s: read of %lu returned %lu" +msgstr "%s: membaca dari %lu dikembalikan %lu" + +#: resrc.c:727 resrc.c:1502 +#, c-format +msgid "stat failed on bitmap file `%s': %s" +msgstr "stat gagal dalam berkas bitmap `%s': %s" + +#: resrc.c:778 +#, c-format +msgid "cursor file `%s' does not contain cursor data" +msgstr "berkas kursor `%s' tidak berisi data kursor" + +#: resrc.c:810 resrc.c:1210 +#, c-format +msgid "%s: fseek to %lu failed: %s" +msgstr "%s: fseek ke %lu gagal: %s" + +#: resrc.c:936 +msgid "help ID requires DIALOGEX" +msgstr "help ID membutuhkan DIALOGEX" + +#: resrc.c:938 +msgid "control data requires DIALOGEX" +msgstr "kontrol data membutuhkan DIALOGEX" + +#: resrc.c:966 +#, c-format +msgid "stat failed on font file `%s': %s" +msgstr "stat gagal dalam berkas font `%s': %s" + +#: resrc.c:1179 +#, c-format +msgid "icon file `%s' does not contain icon data" +msgstr "berkas ikon `%s' tidak berisi data ikon" + +#: resrc.c:1724 resrc.c:1759 +#, c-format +msgid "stat failed on file `%s': %s" +msgstr "stat gagal di berkas `%s': %s" + +#: resrc.c:1940 +#, c-format +msgid "can't open `%s' for output: %s" +msgstr "tidak dapat membuka `%s' untuk keluaran: %s" + +#: size.c:79 +#, c-format +msgid " Displays the sizes of sections inside binary files\n" +msgstr " Menampilkan ukuran dari daerah didalam berkas binari\n" + +#: size.c:80 +#, c-format +msgid " If no input file(s) are specified, a.out is assumed\n" +msgstr " Jika tidak ada berkas masukan yang dispesifikasikan, a.out diasumsikan\n" + +#: size.c:81 +#, c-format +msgid "" +" The options are:\n" +" -A|-B --format={sysv|berkeley} Select output style (default is %s)\n" +" -o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex\n" +" -t --totals Display the total sizes (Berkeley only)\n" +" --common Display total size for *COM* syms\n" +" --target= Set the binary file format\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Pilihan adalah:\n" +" -A|-B --format={sysv|berkeley} Pilih gaya keluaran (baku adalah %s)\n" +" -o|-d|-x --radix={8|10|16} Tampilkan nomor dalam oktal, desimal atau heksadesimal\n" +" -t --totals Tampilkan jumlah total (Berkeley saja)\n" +" --common Tampilkan jumlah total untuk *COM* syms\n" +" --target= Set format berkas binari\n" +" @ Baca pilihan dari \n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan versi aplikasi\n" +"\n" + +#: size.c:160 +#, c-format +msgid "invalid argument to --format: %s" +msgstr "argumen tidak valid ke --format: %s" + +#: size.c:187 +#, c-format +msgid "Invalid radix: %s\n" +msgstr "Radix tidak valid: %s\n" + +#: srconv.c:1731 +#, c-format +msgid "Convert a COFF object file into a SYSROFF object file\n" +msgstr "Mengubah sebuah berkas objek COFF kedalam sebuah berkas objek SYSROFF\n" + +#: srconv.c:1732 +#, c-format +msgid "" +" The options are:\n" +" -q --quick (Obsolete - ignored)\n" +" -n --noprescan Do not perform a scan to convert commons into defs\n" +" -d --debug Display information about what is being done\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Pilihan adalah:\n" +" -q --quick (Kadaluarsaa - diabaikan)\n" +" -n --noprescan Jangan lakukan sebuah scan untuk mengubah common menjadi def\n" +" -d --debug Tampilkan informasi mengenai apa yang sedang dikerjakan\n" +" @ Baca pilihan dari \n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan nomor versi aplikasi\n" + +#: srconv.c:1878 +#, c-format +msgid "unable to open output file %s" +msgstr "tidak dapat membuka berkas keluaran %s" + +#: stabs.c:328 stabs.c:1706 +msgid "numeric overflow" +msgstr "numerik overflow" + +#: stabs.c:338 +#, c-format +msgid "Bad stab: %s\n" +msgstr "Bad stab: %s\n" + +#: stabs.c:346 +#, c-format +msgid "Warning: %s: %s\n" +msgstr "Peringatan: %s: %s\n" + +#: stabs.c:456 +#, c-format +msgid "N_LBRAC not within function\n" +msgstr "N_LBRAC tidak dalam fungsi\n" + +#: stabs.c:495 +#, c-format +msgid "Too many N_RBRACs\n" +msgstr "Terlalu banyak N_RBRAC\n" + +#: stabs.c:736 +msgid "unknown C++ encoded name" +msgstr "nama C++ terenkode tidak dikenal" + +#. Complain and keep going, so compilers can invent new +#. cross-reference types. +#: stabs.c:1251 +msgid "unrecognized cross reference type" +msgstr "tipe referensi silang tidak dikenal" + +#. Does this actually ever happen? Is that why we are worrying +#. about dealing with it rather than just calling error_type? +#: stabs.c:1798 +msgid "missing index type" +msgstr "hilang tipe indeks" + +#: stabs.c:2112 +msgid "unknown virtual character for baseclass" +msgstr "karakter maya untuk baseclass tidak dikenal" + +#: stabs.c:2130 +msgid "unknown visibility character for baseclass" +msgstr "karakter visibel untuk baseclass tidak dikenal" + +#: stabs.c:2316 +msgid "unnamed $vb type" +msgstr "unnamed tipe $vb" + +#: stabs.c:2322 +msgid "unrecognized C++ abbreviation" +msgstr "kependekan C++ tidak dikenal" + +#: stabs.c:2398 +msgid "unknown visibility character for field" +msgstr "karakter visibel untuk field tidak dikenal" + +#: stabs.c:2650 +msgid "const/volatile indicator missing" +msgstr "const/volatile indikator hilang" + +#: stabs.c:2886 +#, c-format +msgid "No mangling for \"%s\"\n" +msgstr "Tidak ada mangling untuk \"%s\"\n" + +#: stabs.c:3186 +msgid "Undefined N_EXCL" +msgstr "Tidak terdefinisi N_EXCL" + +#: stabs.c:3266 +#, c-format +msgid "Type file number %d out of range\n" +msgstr "Tipe nomor berkas %d diluar dari jangkauan\n" + +#: stabs.c:3271 +#, c-format +msgid "Type index number %d out of range\n" +msgstr "Tipe nomor indeks %d diluar dari jangkauan\n" + +#: stabs.c:3350 +#, c-format +msgid "Unrecognized XCOFF type %d\n" +msgstr "Tipe XCOFF %d tidak dikenal\n" + +#: stabs.c:3642 +#, c-format +msgid "bad mangled name `%s'\n" +msgstr "nama mangled `%s' buruk\n" + +#: stabs.c:3737 +#, c-format +msgid "no argument types in mangled string\n" +msgstr "tidak ada tipe argumen dalam string mangle\n" + +#: stabs.c:5091 +#, c-format +msgid "Demangled name is not a function\n" +msgstr "Nama demangle bukan sebuah fungsi\n" + +#: stabs.c:5133 +#, c-format +msgid "Unexpected type in v3 arglist demangling\n" +msgstr "Tipe tidak terduga dalam daftar argumen v3 demangling\n" + +#: stabs.c:5200 +#, c-format +msgid "Unrecognized demangle component %d\n" +msgstr "Komponen %d demangle tidak dikenal\n" + +#: stabs.c:5252 +#, c-format +msgid "Failed to print demangled template\n" +msgstr "Gagal untuk menampilkan template demangle\n" + +#: stabs.c:5332 +#, c-format +msgid "Couldn't get demangled builtin type\n" +msgstr "Tidak dapat memperoleh demangle tipe builtin\n" + +#: stabs.c:5381 +#, c-format +msgid "Unexpected demangled varargs\n" +msgstr "varags demangled tidak terduga\n" + +#: stabs.c:5388 +#, c-format +msgid "Unrecognized demangled builtin type\n" +msgstr "tipe builting demangle tidak dikenal\n" + +#: strings.c:251 +#, c-format +msgid "invalid minimum string length %d" +msgstr "panjang string minimal %d tidak valid" + +#: strings.c:648 +#, c-format +msgid " Display printable strings in [file(s)] (stdin by default)\n" +msgstr " Menampilkan string yang dapat dicetak dalam [berkas] (stdin secara baku)\n" + +#: strings.c:649 +#, c-format +msgid "" +" The options are:\n" +" -a - --all Scan the entire file, not just the data section\n" +" -f --print-file-name Print the name of the file before each string\n" +" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n" +" - least [number] characters (default 4).\n" +" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n" +" -o An alias for --radix=o\n" +" -T --target= Specify the binary file format\n" +" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n" +" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Pilihan adalah:\n" +" -a --all Periksa seluruh berkas, tidak hanya daerah data\n" +" -f --print-file-name Tampilkan nama dari berkas sebelum setiap string\n" +" -n --bytes=[nomor] Lokasikan dan tampilkan urutan NUL-terakhiri apapun dari di\n" +" - akhir [nomor] karakter (baku 4).\n" +" -t --radix={o,d,x} Tampilkan lokasi dari string dalam basis 8, 10 atau 16\n" +" -o Sebuah alias untuk --radix=o\n" +" -T --target= Spesifikasikan format berkas binari\n" +" -e --encoding={s,S,b,l,B,L} Pilih ukuran karakter dan tipe endian:\n" +" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" +" @ Baca pilihan dari \n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan nomor versi aplikasi\n" + +#: sysdump.c:648 +#, c-format +msgid "Print a human readable interpretation of a SYSROFF object file\n" +msgstr "Menampilkan sebuah interpretasi mudah dibaca dari sebuah berkas objek SYSROFF\n" + +#: sysdump.c:649 +#, c-format +msgid "" +" The options are:\n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Pilihan adalah:\n" +" -h --help Tampilkan informasi ini\n" +" -v --version Tampilkan nomor versi aplikasi\n" + +#: sysdump.c:716 +#, c-format +msgid "cannot open input file %s" +msgstr "tidak dapat membuka berkas masukan %s" + +#: version.c:35 +#, c-format +msgid "Copyright 2007 Free Software Foundation, Inc.\n" +msgstr "Hak Cipta 2007 Free Software Foundation, Inc.\n" + +#: version.c:36 +#, c-format +msgid "" +"This program is free software; you may redistribute it under the terms of\n" +"the GNU General Public License version 3 or (at your option) any later version.\n" +"This program has absolutely no warranty.\n" +msgstr "" +"Aplikasi ini adalah software bebas; anda boleh meredistribusikannya dibawah ijin dari\n" +"Lisensi GNU General Public versi 3 atau (menurut pilihan anda) mungkin versi selanjutnya.\n" +"Aplikasi ini tidak memiliki garansi apapun.\n" + +#: windmc.c:195 +#, c-format +msgid "can't create %s file ,%s' for output.\n" +msgstr "tidak dapat membuat berkas %s, %s' untuk keluaran.\n" + +#: windmc.c:203 +#, c-format +msgid "Usage: %s [option(s)] [input-file]\n" +msgstr "Penggunaan: %s [pilihan] [berkas-masukan]\n" + +#: windmc.c:205 +#, c-format +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= Set codepage when reading mc text file\n" +" -d --decimal_values Print values to text files decimal\n" +" -e --extension= Set header extension used on export header file\n" +" -F --target Specify output target for endianess.\n" +" -h --headerdir= 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= 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= Set codepage used for writing text file\n" +" -r --rcdir= Set the export directory for rc files\n" +" -x --xdbg= Where to create the .dbg C include file\n" +" that maps message ID's to their symbolic name.\n" +msgstr "" +" Pilihan adalah:\n" +" -a --ascii_in Baca berkas masukan sebagai berkas ASCII\n" +" -A --ascii_out Tulis pesan binari sebagai ASCII\n" +" -b --binprefix nama berkas .bin diawali sebagai nama berkas .mc supaya unik.\n" +" -c --customflag Set tanda kustom untuk pesan\n" +" -C --codepage_in= Set kode halaman ketika membaca mc berkas teks\n" +" -d --decimal_values Tampilkan nilai ke berkas teks desimal\n" +" -e --extension= Set header extension digunakan dalam menekspor berkas header\n" +" -F --target Spesifikasikan target keluaran untuk tipe endian.\n" +" -h --headerdir= Set direktori ekspor untuk header\n" +" -u --unicode_in Baca berkas masukan sebagai berkas UTF16\n" +" -U --unicode_out Tulis pesan binari sebagai UTF16\n" +" -m --maxlength= Set maksimal panjang pesan yang diijinkan\n" +" -n --nullterminate Otomatis tambahkan sebuah nol ke string\n" +" -o --hresult_use Gunakan definisi HRESULT daripada kode status definisi\n" +" -O --codepage_out= Set kode halaman digunakn untuk menulis berkas teks\n" +" -r --rcdir= Set direktori ekspor untuk berkas rc\n" +" -x --xdbg= Dimana untuk membuat berkas .dbg C include\n" +" yang memetakan pesan ID ke nama simboliknya.\n" + +#: windmc.c:225 +#, 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 "" +" -H --help Tampilkan pesan bantuan ini\n" +" -v --verbose Verbose - Beritahu anda apa yang sedang dikerjakan\n" +" -V --version Tampilkan informasi versi\n" + +#: windmc.c:296 windres.c:415 +#, c-format +msgid "%s: warning: " +msgstr "%s: peringatan: " + +#: windmc.c:297 +#, c-format +msgid "A codepage was specified switch ,%s' and UTF16.\n" +msgstr "Sebuah kode halaman telah dispesifikasikan perpindahan ,%s' dan UTF16.\n" + +#: windmc.c:298 +#, c-format +msgid "\tcodepage settings are ignored.\n" +msgstr "\tkonfigurasi kode halaman diabaikan.\n" + +#: windmc.c:342 +msgid "try to add a ill language." +msgstr "coba tambahkan sebuah bahasa sakit." + +#: windmc.c:1151 +#, c-format +msgid "unable to open file ,%s' for input.\n" +msgstr "tidak dapat membuka berkas, %s' untuk masukan.\n" + +#: windmc.c:1170 +msgid "input file does not seems to be UFT16.\n" +msgstr "berkas masukan tidak dapat terlihat sebagai UTF16.\n" + +#: windres.c:220 +#, c-format +msgid "can't open %s `%s': %s" +msgstr "tidak dapat membuka %s `%s': %s" + +#: windres.c:394 +#, c-format +msgid ": expected to be a directory\n" +msgstr ": diduga sebuah direktori\n" + +#: windres.c:406 +#, c-format +msgid ": expected to be a leaf\n" +msgstr ": diduga sebuah daun\n" + +#: windres.c:417 +#, c-format +msgid ": duplicate value\n" +msgstr ": nilai terduplikasi\n" + +#: windres.c:567 +#, c-format +msgid "unknown format type `%s'" +msgstr "tipe format `%s' tidak diketahui" + +#: windres.c:568 +#, c-format +msgid "%s: supported formats:" +msgstr "%s: format yang didukung:" + +#. Otherwise, we give up. +#: windres.c:651 +#, c-format +msgid "can not determine type of file `%s'; use the -J option" +msgstr "tidak dapat menentukan tipe dari berkas `%s'; gunakan pilihan -J" + +#: windres.c:663 +#, c-format +msgid "Usage: %s [option(s)] [input-file] [output-file]\n" +msgstr "Penggunaan: %s [pilihan] [berkas-masukan] [berkas-keluaran]\n" + +#: windres.c:665 +#, c-format +msgid "" +" The options are:\n" +" -i --input= Name input file\n" +" -o --output= Name output file\n" +" -J --input-format= Specify input format\n" +" -O --output-format= Specify output format\n" +" -F --target= Specify COFF target\n" +" --preprocessor= Program to use to preprocess rc file\n" +" -I --include-dir= Include directory when preprocessing rc file\n" +" -D --define [=] Define SYM when preprocessing rc file\n" +" -U --undefine Undefine SYM when preprocessing rc file\n" +" -v --verbose Verbose - tells you what it's doing\n" +" -c --codepage= Specify default codepage\n" +" -l --language= Set language when reading rc file\n" +" --use-temp-file Use a temporary file instead of popen to read\n" +" the preprocessor output\n" +" --no-use-temp-file Use popen (default)\n" +msgstr "" +" Pilihan adalah:\n" +" -i --input= Nama berkas masukan\n" +" -o --output= Nama berkas keluaran\n" +" -J --input-format= Spesifikasikan format masukan\n" +" -O --output-format= Spesifikasikan format keluaran\n" +" -F --target= Spesifikasikan target COFF\n" +" --preprocessor= Aplikasi yang digunakan untuk memproses berkas rc\n" +" -I --include-dir= Masukan direktori ketika memproses berkas rc\n" +" -D --define [=] Definisikan SYM ketika memproses berkas rc\n" +" -U --undefine Undefine SYM ketika memproses berkas rc\n" +" -v --verbose Verbose - beritahu anda apa yang sedang dikerjakan\n" +" -c --codepage= Spesifikasikan kode halaman baku\n" +" -l --language= Set bahasa ketika membaca berkas rc\n" +" --use-temp-file Gunakan sebuah berkas sementara daripada popen untuk membaca\n" +" keluaran preprosesor\n" +" --no-use-temp-file Use popen (baku)\n" + +#: windres.c:682 +#, c-format +msgid " --yydebug Turn on parser debugging\n" +msgstr " --yydebug Aktifkan parse debugging\n" + +#: windres.c:685 +#, c-format +msgid "" +" -r Ignored for compatibility with rc\n" +" @ Read options from \n" +" -h --help Print this help message\n" +" -V --version Print version information\n" +msgstr "" +" -r Mengabaikan untuk kompabilitas dengan rc\n" +" @ Baca pilihan dari \n" +" -h --help Tampilkan pesan bantuan ini\n" +" -V --version Tampilkan informasi versi\n" + +#: windres.c:690 +#, c-format +msgid "" +"FORMAT is one of rc, res, or coff, and is deduced from the file name\n" +"extension if not specified. A single file name is an input file.\n" +"No input-file is stdin, default rc. No output-file is stdout, default rc.\n" +msgstr "" +"FORMAR adalah salah satu dari rc, res, atau coff,, dan dideduksi dari nama berkas\n" +"ekstensi jika tidak dispesifikasikan. Sebuah nama berkas tunggal adalah sebuah berkas masukan.\n" +"Tidak ada berkas-masukan adalah stdin, default rc. Tidak ada berkas-keluaraan adalah stdout, default rc.\n" + +#: windres.c:848 +msgid "invalid codepage specified.\n" +msgstr "kode halaman yang dispesifikasikan tidak valid.\n" + +#: windres.c:863 +msgid "invalid option -f\n" +msgstr "pilihan -f tidak valid\n" + +#: windres.c:868 +msgid "No filename following the -fo option.\n" +msgstr "Tidak ada nama berkas yang mengikuti pilihan -fo.\n" + +#: windres.c:927 +#, c-format +msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" +msgstr "Pilihan -I kadaluarsa untuk konfigurasi format masukan, tolong gunakan -J lebih baik.\n" + +#: windres.c:1037 +msgid "no resources" +msgstr "tidak ada sumber daya" + +#: wrstabs.c:353 wrstabs.c:1916 +#, c-format +msgid "string_hash_lookup failed: %s" +msgstr "string_hash_lookup gagal: %s" + +#: wrstabs.c:636 +#, c-format +msgid "stab_int_type: bad size %u" +msgstr "stab_int_type: ukuran %u buruk" + +#: wrstabs.c:1394 +#, c-format +msgid "%s: warning: unknown size for field `%s' in struct" +msgstr "%s: peringatan: ukuran tidak diketahui untuk field `%s' dalam struktur" diff --git a/binutils/po/ru.gmo b/binutils/po/ru.gmo index 88eb5d3023c4a4067161be58111b3d87b4e641ef..ef377c7de745745527fa4fcf6fd4e9a998e6a470 100644 GIT binary patch literal 173223 zcmdqK34B!5{r5jX0l@|LeYuJVNCsIH5D5|zK$K0wrid^}Cdo*Wi8Bc#3U$|3t+rOJ z*4?^S>sr^=y0!YNRaXn8 z0_Nau@KU%PydQ1>pM`tDzrY>gpv8&A#&B;aIpbge7sBn}Dz84vt8a!w(SH=m|G&Ws zxY3eCqCcDtH-~fJE^s-Ne{10|c$Mc9@Bq}G!f|lSVTr^vn1S2Co8dtC3%C>f4V(_& zg%jb}!xM?ouoafW%i&1)1l$sS0hLaJmL?K|;hvrc!6B%dq0;FbsC2m>%H40^aQGVB z0d9JPrPEM22K7`p3U)yGdks{)eg`G*3n=-+mYMk+DE(uh(&bt>9^MTl?*lj%4nESt zu^75^fD6#S8SVr(TuxYE0IT3gI2Gn#CHx7jfd7DUzu$^Pf}~9x3nl*8x4X95f_JP%~8n#2F!#!|c_%2ks?w&UF94L7w!TsO^Q0e!nSC4Ekf9j$9zW^$| zZ-I)}i*SFqO{1yjdVUki-h)v2`JU&lO%|THa47mGLdm%S?g3wevfnRb;TR7OLY;*N z!@HsU+u$fOuYj{qcX;(fQ1SgIoDY*LEnSX>2co_YPKN)2%Fl_-rtXBQCwD=m$NNy} zFrvl6R|lnkvFGz}ChBclsf%z0l)Rgv!uuW^4##Cpe+87km%=UKOP(J<`LjWrrSk!B zThv+4Q{fcUmq4Y{pP=gRc1IhNa4XbRP~~Q^SLfiKs85B;w;w^3^M|48?aQz){MhrK zQ2CL_B@(xTVQ_dE`3qYJP``G{8V=e|Pb6-F+kOZ6{St{s&Pyc7+Qi!zal=C|wsL#G zC05QG;6U`xhVuUha2I$d+zUPf_ksU{!{CTZ&He&781-`4AD#qNKF)x$|6?foe}a*z0p)))l$_Nt36F!Se>Xv;-=k3OUV!rFLpTC%bGe115(cQ#Q0Aw4 zUJn(HUqku#36y!+6=r`=I2H9YsQUR$xI26pZVKOkDkmR7$=T&f<8*is>MT4I-VGI= zfj>04<6t@J#ZdB2hTFqy;2!YjQ044ZsPz5>?gqEIinb1pg;Gy|vcCkXeK-~>9JfHF z$MaD3K7eX(How~1(P}99i=fI=2Fjmrc=g3l`En~%xSxQd;pd(st}*p8D1Xm}YJVPq zQ{X@05%7R(t=?Y%6|UFdV7SS3R?bF2$zSSu8dP|1hr{6Spvub^UR{2@mAi#-B>HRM zCh$kF3f>Ks-d{kq%X4n9cwYxqZeD~+_klmM@Q;U6P-oy|cmtH&x8ZQO{f*YHOofu$ z1$TyzL#4-G;I44Tn@s-xQ0dVKl^z$vneb_EzVnZ*eLEO#f&N<951tKGj?ag#J%vM1 zzXk`v0XHWSo53BR{2K;UA7;P-a4u9n9tPDOwL0W7xe`Zs)@<%c#$A>pqD@-B0m#Ik;;;!G3kGRi0gB#RWJ!|E@<_}hX zvT!K+r$W__AH$8|uc6ZKIk+`^-*bcKtQ>3)2ckb6s=OZxWv>Hn2v3IuCvmn{e-Em@ zUI3M!H^Uv_J#c&Y3{-pf9vlSwKX2jL4hE?AgS*2;P~q!@sz)b7h4U(?`gAWG3txld z;dXztc5E(`f6L&OuoLbD&wwg#x54e;Z(%un8}10VeZk71)qYd zH?P4xVB$p!_h6{wB=DclwQ8Opz}pvuM0f3|$x9ZK$jQ0X@xDjyr5!n+0r z@cW*3LzSE7p~}Z=P~rIq%6{1^CU<8jxf8v5HdH#Sgj>Lqq4MW^sPwuA%KzU&m8&

ISHAwZl>HWT<%m1nvT#hI0P_R5TRQ~sU-NL&!lz&xF@mc{@jyj>r**Q?<=7&)3f9}<9 zdiHt4@xq7s8S7OgI|e2ls^U zL4|9}x6J)usB%{U70v}v<)O{;m=k9Pg`s1MNt$-`wS~w5>32qMe`NZ0@DNy-wFjT#(hf1e4Q04Lm zP~p2BsvP|hZUg&%YTOB`JdB1ahs)rG@D!-}dO92jABB?lZ#W2U_YX^-p>RLc`$MHm z7VZmA_xw4mK>abC2FHA6;q8Qq|2c3rycKQ+zk<6*ne6&=Aq(s3EUF?0xJH`!R_Gta9h~#U#8v#ZjX9DDE&E5`H_Z`;n`62 z>PaYhAHuC*-!IJl4p8Ya+OrXkM|}yDyWhis@N>8|-0({a-wsgmuY^P3Jg9K2g7W8V zsQ6zA6~71J4zTRsmL5C738=@xeP9;K-^-xV#LyR`6yI+zW^m~qp~vBo>xQFEy>>UUdzvWQ%;B4spgUYA-;g0YxQ2D&UhGj0FcYw;z z(NO7r5Znna^X!6>f1c-0pvy0)aDEO|UUuzU=IYZpsC-%m19%ctdR+w@;V-@Z$bM!% z7pk7MLCL)sj)o6FrOSs<;oqXarPl#a<#q{F`*S>0zMKh_P8Y#(@DZqd_!m_8$8S{T z+PTG0{+$DrPWMBF_bI4y@d;FWkQ`w4mO#ln86FJpgCk+Tfn}~8+z+Z=&w!G<1}a?F z!2$3NsPwrXsysalRnFgr^8aI~eCoTgm7~E>?dy1`e3=PV&sV?zwn6#xU8wZ=ndgg8 z*#}lFI$;EIcyajFq{|QwOHyC8$91rE+5~y;s8Y;XOLY0eO zzzX;eI0o*wx%t}!mF}0qe((mUe)LwT^6@fMy1x%Mg`Y#!m;PIr-0@KUWuW4JhUe{2 z_FjPUZ{sbkoJ@ua*D4smE1|;oFjP7I1S-9D*vjlpf=cfuDD$(S%JuC~<>@7_zsc5? zuA`vJ;XJ7D9}AU!r$d#aOQFigtx)lK45~am3zgn)L6yI8iElxL_bSiFVSxHWsC3$DTMNg2P~kfW_J@n1!nqu(9Ou3HDR2|i=X&!ipz`A< zQ1%}1=1)U~=Vh<{94ejqZD-|T6jb?}3zZJ_Q0cH5svMpLm4A0Z)ytQm>ciICTX`4- zCI3hmz)q-k_(CXqcS6PIX{d0$0_D#~Q01xL4%U9|3zcsNL&dubDqJT(xjP@qpX;FF z{SZ{Sd)!z7 z?jERe`fI56`ZFm1ciG9>rQuNdT?uR85m4>nEl}Zm7OMSv-SZ15|F_=R;xz(F-UKLr zs-eb7ZBX^J1NMctLxuAmsC;=2s=RKxi>2SLQ0>rOQ0ZI^RZntI>32R8_S80hIYTsPa1%Dtz^@8eR$I&s$LPKlbVkce8Zf0&3h5 zK*fK5sPvxa+2FYbD*w-cir-aU{S&DCdK4;so`vdfUVt;;R)K|MDV&D-a;SWH6UtrL z?iQ}iq0%LQD!0{8@kx38lc3^pEmV5m0hJCF`N75pFZs`q_C<;XMO*+rxRd+It5j(PxSmg zR5)*hO7CAnh4W>odi`%G`Fjnqc6lCDJ9Ru%e{?OBKaWD?!y8cf^$)MV*d) zuWXo=#~q>E?*$c}aZv64kx=pa7L-4?K*jGtDEY5I$@|Q6+u>Fo_JyjyhkEsDD0k;V zm6JQ5((_rU{Qd;W-vN7DdX4t1f@%*JLgnAlUVT2Cg8DY7^8XQ3y&5pW%E>mKdqC;$ z0~NmmpwjUWsQTXkRjw|AN}uaIf9CnL=UY(W`~oT+HZM2z?r;Ot`$4sv`$NTJDpa~1 z1lHuiMAc!2_$E|29C|=mA_c3U;&U}T2>t`A9i1}C(!Ud`9{&W& z{4IDe993cAITjv{`U+SJzkr9q<&&*`+yjq5{Q{JK6Am=}A3(K>KZSDl6kH6)OfmPT zL#4y(Q1ZuDmL;x$=fEX!->H^9--bt_ei1gp8C7L&{o-b*ek)OJfk(kp z;9GD6Y?)^1cOmSD`X%W4Y3Skw74PNKEgm;ORLct#Bp03MySTpJnx@&htl5<=`Wz zaxrDLrO)Y5a-WA2;ix%QUsgiZj~_$nzXj*OJ?2`uJQ|*e`ctU<>zY@VSOuSj?Qr&? zWr;L=2-d-2^UD&K!!x1$Pu7_EYS@PQC8&BbXMxq{A3&A651`7+)P)wGi{T2?uS3b5 zwx}$z99|DQ;DE(tiDTe#Q2G5&cpj`>V&(NSD1Y`l%*J0QK(#BshXMQqDxJ1H+{$wu zl>UuS_2LPra{4w@xDHur?yrV2|Apr(a4708;Wlu{5mqk`fV-n!4OOl#gz67}0sF$2 zJ>P&UP`?BJ4reVZOWajPyLe<-;`%*E_vK}Y){PjqoQN6@I-@Lc^Z@Gl_sSCIV1L9V zlppNh4-Y^+=rS8W9|F~`9|K)G43!@bz$4+n%dK6?z$EGqpu)fF71loN3srAA;4pX+ zRJ(U090^~9@^9lSt$m*X_d|UQ90YHHYUdt+YVV(dW8jN$FdXzlOOLTo@@GSZV--~U zeU;b$Jsg7i-%#z(o>!UqBB*ej1~-Ox!g25+SPegiO>pwnmXFs$$sKTw^~V!oCF)sl zGCT_^98W;i*H59^^<~#uy?6o+N4?Q?HjW$v)qixt>F`FV_VOdRJsfepnODODWe;uy z?}n1|AXNC@f%S058?3$`2bDe#LzSzypv(vTs4Nk{cBphX52{=}3Kj2ci$YS$RJKs=d4#PLckPt)3hTPmw;%!x1-|KbJwtc^oPoceusEaj@qa zsC@b{oCcqPYA1KR)zoRIbodcm2H$}yA2V;W_HYSoMSVL|`?AOF=KqCI<#y9MES`(u zBGhNWmGBMN0T2C&wIh#0#e0W4Ext?OX{fJ)D!=7aF6H|Xa4x(QR>Ak7;y31QYmbkI zivMq++KFlRSUk>w0qW`7KmDwz}WS?_wzP`(Y>C z?B`YwPJ>Ffx8ZSc;RDuw{vK+4R`H;fw`1WCQ2!aK+#dUo<-^G^h5AXT@-ymT>#r|@ zD^Py~Yx~o`J!1XFU5{J1CjQ#u{S7!}1NsLz3qJ8wS>l=vDJQ?9y&6Eh_yh5#!Fc-5 zWr+)sH{-ps#H)Q7m&1RRu|D<@<81iACuNE6;r``M%M$NnFaJ-=hgvM{hI%bjJ8%h{ z1Yd<)z}>zu^U-i`)Q3XV!!@u9{s_w6-=NyJvM(*aD0J| zq1w5dVL5yiD&GhF+vW$=Q0+t=R6V%}&VaALE#dI5to%%ZYLC`H<>S?`5q<(yPL?J5 zB)D(mCQ@pP#CJQvFRY1j<=_vz!>t#)`2>g%A==kHMM-pCF5xOU<^ zsB--ZR5-tYDrZwS?BmkqWVi(N18_dvp>H48{x`#YP+tjE51)pI!Y%ssap_VACHH(N z^IM_Xu@Ag@=l*@%{9!3neLN2;pI(DI!Ob@6Q1#_psQ7*aw}zt!^l|;k zbg2AkhibQOf|BCb=)Up-VmcM?>7{t7OHJ8#)1u{+E`^@r!e)8S)K>0PsxFE5@Cz-`h00xG?>;;@j) z*G#B({%ojv_&ij(*kv1YKNBjvr$Ck08(;w6g4J-NZ7qFg!#Sw0hbo7kLHRRmJF5pr zLWS#l@NoDDRCssWzKUZG@==a~*^7C6z>H0Xl27U!kgV*fR$MyRo zceVJXJuiZXVE$XE`mxJyW^V~xi~4MshMNXfPV!LUJ|8MvpF*YopxrG$YT#a|FM*@s zBT)JGDXfQ^?qTIT2MICU+;Oay|(v zA9An~-Ud~VK88scjInY($Fmbk|4OKI{|!{T^Qq^qV=aBBL#6KusP^D{@C0}pJR0u1 zueBT3K;_#bQ1Sc?RQ>q~sy^(zpQ#UpYLAYA>OXFWYUlcmGyg|J)w9Fk!SF%Y4{kEv z>giVS6x3~SPxvWRdhRsA_xnS&D|x7V ze;z75zJPTwm~L`ThVxM00X4qrJHzs`5A^n@`>k6~FOES$>=bw?X|G+!AiK(#q-Xa4XbpP~)nT z;V$rUsB&~aRCz6HHvbkwmFF{{%HKUu<^4lA4_3BV`+W|S`;VZ)Ij+_6<0zK7gT%w7Mu?EXtVwz1Eqg4RJ-#Bum2@fK8-rs%u{f8*@KGL z{ZQe55pD(t=Bz*30ZPtPI0iO(^+izQng=~UgDOA!wP(t+9L^166KTK&AV4U^To7Du3RFO8;Q3)wgP>eyI%}4u1ya|MuUo zetZ;EeO&^tg(pF^Ds$f5O4pe)5A>0=B zJHg_y3sgOx110wla3Cx@(fW@~pz>`ARKDH_l^!oc<=elY%JJSOnSb-31dO7zU}!bRJmM!mh~5B!&#_bf{WnZXZLaa#R;$h^+QngY4~@n zTptY;p39)x-8bQQxZ8Ivev6^X#kXN2d$z8OwI-S>M||EEKx*9lPV?+>BE z_h&c_Zho${-;1E~=|ZUR{tC)`yYsAnSq9af-UO@Q3sB{4xART@I2fQ_0@dzxLD|2< z>%R(B-ZuEYjSt2_jk`Lb^5X{2C!zB1L#T9_e1Z9QDpdRPD=2q=g{rSRU+DW2sCMfF zD1RP=OX0`xAUN*_7Oo57Ow`Xn<@c@^ng2_m@^cMTzJKhw)5TVvr$V{wf+}YZ!;|6X z@BsLYORSx_7ph*q303|!xzzfjy`b`;8Yyn)wy$INY1Rg8C1rXLz;D-{$Ve{b$^< zo#N&{bQ6iAxPOcKIBs2ca#QRRtGRViH4|)OCVs`;guJC*e{Xmp>fx{vGrh;A>n7B% z@XSym@jSeb`$EjC;3ODcb1>KS3?zDqFL=Hieu6#qy-nD?z}r7p7P(I6{s6s+*!d9d zi~Y0VAk_8F276@a-GO=!^bbRC4eB&%mB*j)tZOUOXJY<+p4rk$oP(MyNIZx72KWf~ zVD!d&``4r2!SeukAogkA+(k7^{0e(Vpr`8-Lt+kkjoef__x@gz=W6f9TZwQSW>wz3 z%J#F|4cPrNWcl6ght7tb*xMaFU61n|UiV|BzV}1i{M7q#K6<(?hJVHG0Wtg1{{{Lq zeeP0wF#+?dO_^XT!d=tR%k%tuum2s-%g}q7`4LwLR% zp3nUq?grdEfnFc(x!m*78;#p87+yP}e~(vh3ZKQi${Utp_6MGCgq2YB{&1fE>di00 z?kO=@ObHVEaKC{5_qo;n=$eAw%h*ezr@B8CHQQ)zoc;!Cnn1S}BD))7@5kIzc|HPt zx_5Vd#{a+JM%U+t#D18a8uNb$>K#z;i@nuwpttud`a`|FMLe^$5?y)Jx}HR@FLwp% zvrzwl=WTeN%=0f}e*7H$bGa9IcXFFXt?O7g4gGJ!+f2*-XDc=lpx+5UgEv8qF*L55 zj+(Ba+cnMmxi4f((Op;bJb=3#)qUJYb5F+Y81B!#9cPh$f5e`~3n##3nB4-O4h`Wc z=q>SXzQX;jn1|OLJTznWNAwRve>ZP$8=ilIo-Xw{m!TfVy#;!kbJt_<0Qd{^!fUjD zUg+IzxS`(lU_FvsT07#V4|Wdb`EKs;3V4``*#s>8glD>k!~@*tp~sNSUBBZ00G{_m z?`Upadm!ttJge_{4KuABea3w#&re`B#@pM>%NXZevHk_WCpVa%h}nxg|Bz>fOYZu< zkB6z4$DqC$vo16i@%*m0=Q=@e>0qz-B3y!v=yvyr9jJ-2aKZjalq3>aSjLhLK z=xvGK)~J62Kk#mNOuUC)D>p|A60gGW`hbVC(A%E-UavU@^K*Fq4SMsu-VJaz`j>dM z#wC|=e~jMK*gKWyW4R}KKLhk1MxU+A#0K2)>rl-4#q?gq&CckxqqhV1c|7ZSkozL; zCERZL{|NjM_uXFoE$kf6b3bH!TMoFcL!I&F193kav+#Nn{eOD1zhm|?277q(LwSCT z=RbS%v*1eXe24oRJa6aiEkZqlTi09YJ%!mEQzrffx8dFl^LNqT3iG{DZ;ko^sB1p= z#@_w=*!c_3)6m;hhFl{J?*EpUU+mRo-p%7a98=JL3v*ozPoryd>}`(zE$CeC-HgS2 z3!dLWZ*F9haSeJM+?u1`;_V*A^RKygL&h3d2Wz}PN5BKH_Z7SjnIC%ni+KJEcC{(o z;q`9wVPcBr<`^=r$7~^Yj{6<-x8**A=g+twAHAgL? zYeCGPBhlBMUygetYlb z$NSkA{hy;AiTX(|=YLS|hq?j#8+n<(ft#YY7p&wy0=oyn-(vSu7+!xu{VVQ|xc`Fw zC~wB`v&4Pem!RfIj=Qq3+&}-w3#jv4fc|iACarnMn~B>DdjI3?JPKF(XPxo+nST~; zKwazIKL@|-&31!ZBI`iRUxsTWkNZ0G%hCH1y&+K79^6}EHWR%Lr$f8X^Hbd0qW=&0 zEw82yBEQc-1T18L-2LXf9cf^@|?xZH?eb#b4?sD zy8?Y(t9af5v!8hTb9r9j&5lIx5Y&H$yTHA<|B0JTxbN}yFXVY2^dG>@$2>p7t?OFM zH|1{T-VF2oF`vxc%3X_IhWirkhq-sc{D<5N&8hqUJM69HF1=pDzOFxE|NH*gbQtHO zMmsUsYgER}XYjnCmvOTGDNa0d4v%(vz~hkJy#_c(mh z+gr|anQt%e#E!1*FdNJLCC}rzKSlpdIE(vs^gky&i+K*O8@;S=qd$b_W4L$2&2rR_ z^86B9fqELx?|MgXqW21FUH{_#G0&s8_vHD9J{&UJ8NI`?`zM}La4G6E=3l`(Q6I^z z>yO-N?iSQPfZM^1u=6{fZ{ofbH+86WE%t7nMDH8kuf>?X$NgQ*zKh=OUSIYv=6MAA ziz?%s_K)r(dZ``^r!0ubH4|a8Z?71<|$6x#<0#XI&@q ze291Vf|t8JX2ZCz;rK|bByo@s5&2dP{- z$TYTQbLsk#0}}%W)^xShW}EXtLoVAA49QO%*n{TMA^Bxyu&}j0-H>Tb*9ZBY-1TZ4 zNeJAvbbk8ij&xoj3fgkn#$2i;$h5Ynb8Wda|0fcVWr=~ZT3KJ8OXu_E%>K_xw>Gvn z5zG?vBK^4y4McgsoK#EN*{o?#<=TU6L*!jkI#r*}DG4A1f#iaN=tjLN!PV!vaLaTHmFHA%1+RdYHK4l&gz1ubWokiVJVyI3Kpbln@RF~ zkZx&f?^2ovJy?hwPS0Rl!S2mriG|2vL$9 z@}nV}Ye}_}(ijXKk{=r6(#_erl#5v2M-cO@OUPhU=aA;kpf20mp31c5gCWiJL2XyN zrN^Wp`N=9amASg6%qrqaA?cKVmHB+SrM9^%sPAZLQ{snmou^f))}ie|W4hgmRYEIF zksXCesa2Kjz_ZqDdqBaf4?0?jV?BN}WFxC`mKa#=J*iLEb~F}b7J2JRadlT~swGnw z%CHRVJ*xEqVasJKuA$p7CcQiB=+T+0HO^D}qGbc-V42m*j)C3AGwV^4D7sXh5ipV_Q?i}PB z0<`9LuK|gHHNGyC1hlAB6xktB$w^=L;$wNbe&+eNlUk|qt!nY#9& z@mg1uI-x|1f#OuG;~Fb#--C8nv`XSY*2aoreye-3s4n>{H zkowZLwLHkH)m8Kgx#FaGCrTw>7YmI~p4w5Iu?0VH5Ox>7{a&}_^_H6VncSGmcC>v> z2)x~|vE|#Tud(bZf0PJeC`uDxp|yFTabn;iUnyK?oGEIuOS8DBoQCdN)9Ly`ey*33 zu)hxjQR1k`8<*`t%6HwPIunIX)<3Dus>vJ^*PoqkDbWdn>CGvIEJ0;6BbI@Yl(uX> zpHZhesU<~^)0&<$Q>`uRvG#XC7WSURaCmr3U9a+$XFWs#W+MWiB->3Fz<}B_}aVjiO7f^I{8!FitC~ij~iXu`fLGGPp+=)Jr(`tC0wNmjQ z7VC6fG*DX~Daj;-B$;oouS+#ICu!6v*UB*s`{?OIWnS&5w-pUMsU$AH8&Y*?x)j&7 z(1I%DL6A(QJL{S|>eI=v+)h%jGdZZvYS5AHY|AnnG`+YRX(tty&>1;ncF~NyCNv|d zdIg8A*(B;zM{|4VFQvAsIh~>>H+{Tx;R$6FxwYUF`#ZOlagz_Hf?gPMd#A}{SC%>~V-ANTM^9h?$8bR|hD;c#KC&3YYEyX{b*sO_i!4r> zM$gNzz@?^{bT4MU%ojowl$JG&th*VS4;H1GJ1EML+Q#g1{C`4nFhYeZ-CAD~_^D}< zNS+eGbr{KpD-)WPFfMUchtv;9psPW#yJ$?fH0N=~R>~Q*x;cSa;lIjwJ*6r%aHZVm zxF6GCtGJ4!nlp?pyknI>)4lp})$9EO@6B@?aAG%#HWYO=2>wZG=p< zrO1ABvqBe!#vC~N6fJY2l%bxV!{lHtTDeSpI;yHmCSXxf)pk@MY}1x zI#}JrAjmpiqEnj=u;zWxAgn8x6MoZ0O4^7?IHg?IR8xtm7{<~7*f*S_a8Cv1+jfW3orlpOH3nr0? zN=A!gO;>BSwX4NV`jSb@-z3(&8{fAVI{8qa#Enxkk%~iX6SZ91H7uQ#-cvinkYpQoZV#IQ9hHnVM z{z=uo#E0VSjvQFs#!wT%(8!o6V>3VpYKl#=_DpSaH+Lf;ms~a#S<5(W`Tm7^FlkezNjE zZJ2#zt8iDBZD~ujQ7&BmP@nrmbp zD_Ep>woaqSf?>AyD5{y2V(ST_R>TLQ24Q%z{{5YIx3DO$Lxpu^px=~}aRqvglgCCy#bYI)c7xOT09M$YlUgSAEtg)xJM0qQO_63MiB=V_d; zyKPFf_Ru^v;4GCdDdtMIo{D-jK=OVz;kYT?+!m#C_)y3y=JQ&a^b1wq-OA8j5f90b zLsJ;C+0wgpH;k=Rmu+yKT#1J(v6f`yP;{-+t@pLLkV3sQ#-vbDa}aBjTX5X116B}x zGev#VXhg%vs5u_Vke9sFEXXb3Tg%#tB-ag>c2OlgR4^=;Zle=-GSi*yxfDx1Y347h z+%oBKAFDRRVVcCOA=Al}N#o&3rkd=A)bUYqWa3@7<651fcODsAdlgEdys`L}Z_jnm z@I-y6WsDcJ3PDsxbs$9<6HHC3pOC({*=h0bHYVt~mPCUB@A?>AucOcIUQ6oSKuB9V zglkkVY;UdUH}5@Mp_JBWv>KbUwO&tJQzjJ++tCRxH~6;=1iwLKR!w>@?s{|NLR48> zn@g|q6FW*tv(2?^>n7TZ3ANdYae97+7zWENOoTJasoD()f<@Fkcg?BqbX}nHu0+84 zJDjHhwl;xS>>&t4ESQUI1Q3SP>n@$y%6`W(`L4E09uFBjYFwwRxyFnTvL8ZZwGdWh zqp*nNgZou2eK>MVUwgxJF5cqU6tBs3n!!)v%Nr*!9;>p)nLM?psp#EOVv?)B;!A=CHUHN zT8H6w=^X21V#!=Gf-Sgkjgm8MwarbUtp1eISCmrL8HZ!++J<^{M1D5PMqUTgbsN2_ zwa~5=gBt7USTFFl6_&ZAnQyXs6c+X%EK%8%!{qfWY%0QPGp$S(k}2&jwlfy&V100s zR0OVu`G6j^Boz}^PC-hmP`l-Wd|)CJI*oOE43^Jf39QYMqvkfH)h-`Q+b<=jLAbMOC(y^2sbBvJ=ZYmZ{m1_RHA{p1L>R?WL1UBU#-kx~j5mT|rB>KGTp% z*YA_6bA#pf3^lGj)xyRFq0?a7f-HeYAu!8QVlrH}FBvAg8Eu`UmRO+uE0IM&Z1l^{ zp+#A9fr>)!pd}GGi_QzElMv_ctM2`d7ykPYz~px(U?sEYmDT%7<7{ulUK;raK(79Fup3ufo!d(> zJ4NB^rs&lJW=+kSxA8A2J{P50~*Oe?_SSc$CLXEOHNK>V{Xb34$bXKl3SWXpZ zq?6{xl6CE2OpBzIlrU{W(*x69AXEW})^-TiA%x5Ys^^4fJm*s0l|%2YC|SL0wRW-H zg)lfpu3d|0-VDnR4|C3q$!uEPLO9C@opsT| zhK%~&HdcmQmnA8#<4&hmrdzuSaOt&vp<0cEFphdIN%SZOOqv2@fewp}pSc#&%?nJf zCX%Z&&1`$I($m8=FP&@2w6n19ta$PJm<^kPkPl8rO`@Bx{HekRK>lm1CP zwyVYkyY4`dgt>(YP8T_&f{Z9=HLQ0sHIsdBg#XYimSO?0L$YB+s-Ze(eDUQ;FeOd<#vDt7p z&ASVQaYl`vOGneX%hOOq{ao>GdgQeeaV)EeO{vyKYO;BD}U0EJ1nqBES<|2<-3sHDu5w)R$ z*5MR{LI8YvCoLeZDLA%b&4@M0wJyuoClRV#S_Xv11w;X&n1&hY2OxCHF@c2)@ZoB1 zNl_>@cK%=VU3sn${Kq~M@&A3F*CWp4#Zs1Zmidy$a&;>`v2wy``w|#xuU(&nUyKZm zg;Q?kTNp;xXBh!&K$PxeB4?5qP^s4V;85@Pp&9H17(k*S~l%xkm%nq$|kE9b5&W8N(ER?rC=~p_T z3P*UvwP;Xi0azc2L7|$4k&TV?!>~n($W)+bzq*TYW2(ZyxJXpe*3S!NsP{CpTGg|h zq#xE5Ory|sOM4e96IPP&)cP5byD*P?%R(Cqcaz`}h@toTCJrYX!c7MDL|J8H{K1N+ zt8m&tR7tnB8d@xGHk75A@I-{pn)^+PFxyt=GVY`+tNfiMdnUnbrY}yWZw#FkCNrU% zP=*%9+>%L;GFDo+;xZ&4t-eF6Q|bCpPMa30dbvu&;%0n=r9R!Fr3t;V5y@fuw^vEM z$uT!kNNlqt%+_eTM1gbTzSz!(4Zdg&Y&>mlT(4Xz%{pLmCUm_X(#%ay;;07My09}W z2sKZ8Nky;yHBoSqIg!DM(e;rQM4her30$mm5nDl+MN8*eo}#_#aFq@Ty{rKjV%6)O z3BIpu{aX?WtGukq`i)}hi#k=Eo41}s(dc#i(ubo+Q1MVj%PNJ?7C*VzhcS0+r1@Yk zwj>;w7h8ue`;hQ$d3cCnz6qpgiUWR=3I-5G02D#RV zChj!mS}jqu)Xqr5wM_I^8VS3BkcpM3Hi>HE%q?4CacN;diu#=(?~cs!W?xK7F$=}@6tZwy?=4GAr%N8rO|n`w-tk{&DVl#2|^j;qtGMY_Wz1z9u_PS~u1 zu;xsAJEvk|mlx&@)URxxI_+WTX!c}3Ta>7&WI>+puThB;ZI9pmIo zB^bLudI_$gdglCC(0J68S(+^H<#|hu12oN=#A@ZnxAc_=P%*0jr!n~u(<)cN53m z!HcFsQ=9&$>l?k4x1Kp^hYvN$0eGVpn*=U?t}#+|FoTqY7`O#}Y1gn$NMZ81A-J zR907qMagaH`Yf`y-B&m1JZ#D~=5$1Caz!8qK0zca%NZRrkBhSH;dRTJR3gh(okD3* zG{fVF+9-ENj>F)jnzL+Dx%a%HB+}5uV(E6S^1P>&q%Wu5S874Bt9g$A%fv51U*!l8Hul zl$|ih;ckWVr?B%B#=5|n_T3rR%!Kc^WN0C~>>CZaIP)s3%fdCOkp>G6c> zx|Y|>SvWL^by13GQ9zRnU)lTb;jFZ*R!*I%)2>>N3(pQKHt}nSTNsawRt#O!Mg^*2zAl1Uo zWq12k9BPPvE+-y(|7>T9t6Fvb-vzXaO2}7D+y@F4wsN9n3T=))%wwVD+Y-D{z~MvD z#=gBIlZmTdyu50927!CIn&jbSDK~ZGD?%)Bwc+{TPWRSwHLJe8C3sPg zr|AXE0erJ(zydZM2k6wd|8$Vv2iD7(?v2Z^X)BdU=%;mZa!jZDvhF)U#DAjB+fSz# zbcd)5&v`v+V>x80w4ms6*=h+Jo$PjJr>!(u!pzVMd9+5p{JC^>r_z-XB(dd)djnu5 z*+6Sz=eyMd49(=1=i6J_hY}8xR&pA@C^(VApV42Z-LJJ1T2L9E%9}_%C4~=@tjyO* zmmchxmD%<&h#t%ffp#b6XQvu7b+VQS^u}nWrK5#6)}y8|h~i{&`3OzArNftEKbDA+ zS|xW5?x%J*iQ&uap^xs3gCKnU-My>Ojf#YmC(uLvso6o8lLR>DTQk@_FsUdP-AW|dF z)?@U+Dzymp!LT8m?Tq45Y*{us3pTq@eHl&qJkW2JYl`~H`GT8r<0 zIS;*7n|gNFt?(|_g1K{NndxfUk^uwMcDnvxKy}(ah~mF?Ft3p?m%Jb2GfXgF=jF1^ z*+xF=5Y?q_R&)k|h_G>L!RTlWcg&Phn!Pns-8=O0x_bB0y@FojM@d!?-8!aDmD?xQ zqSs}dMf#F&>=UK(G{|-Y(Oar>L-i7SX*x)y)bd*Q0SZMu*Wt>z!s6Rz=f?G@(xl#+ z6M7t%R-ps+-qdRnHKk>i9*eOr!mf2$R~w+ROc{0Oaa=JCUG&-(^y z!iKu>PBi7mIvN`3c)5l`v5^c(yC4-!~Cu4O+{Y&dK24AMytVI-+x21D(%c2(yBSkzpyA^6T z<8-yAV9g48k-&nXo=S?ImWr$j;8NzU9bmv)!zi|~_`^`^8LF@Y_Hyq7GRecM=TC<5J71OEb${ z^SiXJNPv%x4%zD5tm`iQ=M|fD2;IG~;a>)JncYz2oIa+NZ+*HF$AMQy0SdpRq_dta zvL3#Y#`iTcd?tzMgL^m4*~}N&G%u+^VM(Vm z&!Y1YvD)d6jN-Ws2wZn>!vXo$vNTo5(IiW9oJ9-8`JqBgSkWf~l62q!|+S;ErPouAh37VC$!GI}FXQ48g` zVQ-25Md#;8GhZX(D?l-SJD0|aOp^23yut6k+o5XFLlV0$i|Q2)H%L8?jhq?JiEk-ZN|a7g*H?`~<+yS1?#2U>y9GK*erW~9wbe3)D13@R$L^3My; zUOm|>Ck?5eJPF%;XwbjGZgV3I(>oHbiB$O2u-WoWWv-DIX0?jKa-6MtVXV)q>dg@M z3XE0S9=_V!!uuOqq;BMVW2=VbRsI#y6yn`W7nU@!CHH-lOs@9YIb@A>BUc=tcAcI} zOLLkE=A_#>bIk%9U#ji-YP_2I`dU9FhxnIek5Kh!in)@OW<*fLcM%T$pe`=1~vlHDx*ybR~ zaYYV6=G>u0HUapc*G!4fHiD{|KilIah1F7Bq^siC@atxBgg8zqxvy)-&IH9BdDC#M z4M$ws9CynUv3;FN3Xc1zjduFFNtI^=Jls_8#j~)=4=n`I`{wq3diTvc48_Vf_b$Ax zx+MMAk&zXTT3AQSRBrT{olsPLnlHxlb&sCicvCsj7oAGZQ{kwWypscRFMfmt%esm} z7CQig3ti5M`@sWK^S>m;^Bl5~c>8cs=@%H{;@y{Oc{z<%a2R87H%M-!CC0I`&b1e@ zv@Q-?yfrCx-GOWW{pcu^#jfLD!7p{KL%89InS%3pz(dn8=Sn5S_Qco<4Uc}uC4^HV zFQIz^xbNf9Yb2uua|I<7;rf&CTON^(c<-tpah8hDK9QRG)*aL1l30bWh?K_0g*e>M zR%fb_3c0FWmo&XJ&2Db-4roxVUk_0Aj`!wa0!2HVIA6V#>e-fSX_%hR&S!?6lT15j z=0q;7aJ^oIf>Bmsju(M0v%0XJHv~ zd%417EDf&PLK|ZTti!HLBM{riOa*-LnqFQ#uwO7`s!FNlhc5J{0DWgFs5z`=K3mlB zAtM6p^fuk0rJ`FPiL%~x=HXyx0Vx>ng1S~Y;ePF+NQ?BUT$7yYB1dEEMoSgP=DYH% z*3gx&WNy~AmJZBb^7iK*+;O~Mm>=zED4^AIBxTnm>(`K{|Q5@~VTPX@khvu*?r2iv$$yHW%dbG{3ivXJXS7+U)UAnKLZJhBS@U zKqW@>wagyR$CWsDZ$RmnTnaCr=;T4S0)gChz5o&?hz$sPOqTB77>d8I5eo1nr)LQZ zTqB?*Y1i8q-sDxRT$1{iKh+J-nKj$@q@^jOj-Tqz*O4pu(5@K1iGdh3P?4_W=y0fP z(I6>#T|=!it}Z1@{)PEM#bm6{7m8iuWPTKluaVSy;gHbY3W#f3*L7+lYOdV^ez&sG zd!dLq?5R}rTqqd3k(gQ|ExBrRXiJri0UR@VKOxmi;rh~nGhsD~6+IiJC}s7TN4Lmg zLpim)Ce&I&33GayF7T|zi!nP{geUAG`+X%z(kQ^*T3%|+N4Ur|OTU$q=1nJC%u&|P zSvZUL4mC5zL??PU(5%H=HLQAfJsEZ*B@qn#vOwg6Uf{M5h!tAAeXT3h(8{-S+4B1G z&Zw0u#7ys;h7G!6=clroF0#cQOehaVk5Y>_dYr=4>w8@#!y@xED<`Tu{^K;SL+6dFX7ns(i(0{4dt{5fp&_&7?l4$KYesbiUtFW4 zFU!_Zx3ew!o=Q#XHG&e-d(R*rqNRZt5 zVKoJkVr{b<9V}<=$d8p3f?=8Eb+rPk1td2B3I`OD;EK9V1?iwp#U$+5qpFI+;kU3O zeQf}7d?@;Atv3$?RCqTrm}Hf&(9?wV&i8m`>=MSRPMEG%X4UDjBw8`a)QcZbhz#0=IC%^wHy@0;lgMlh@91X_4!-z%87< zz?v%iC~YSbd4B(`C|?W1sFqZx8`05^WLJ}(zGTqCx*v@r0&ZT%n4y%-JabS&9xO}fU&S{rlA$ZjT)B|1$k$+G^ooZO2Evd;gY`O|6^&RU=~I*u8+ zHd(7iZotN>HRJA%Jbk(S^nkaaG}b2+rLEV%my=HMxE2**S7ekydIep@I4X(~<0heX z-LqQZl$c(#J7@JXnk{wK*EW_E7Z=yX?#G`<6Tj;tfg`aSR54DnmXCqU}%AE0sfTEDBLS+?%Ym%Q6OxL?VVEwdv2pC zHW}ozLp=-?tcJ&j2(e}~94Igc=BtS=Y)WmL&y>ckMnex;&1jxeo7ao|$twBl-u925 zgZJm(DY|?HWK}vm(rf#2q$x>4mgl^o!lyjy?NTy*{V8~U>kWJ1GV;0(!`o^3;J+9FiKB*4bK0VSd<`9_IrbH{u--={1T>SfQ2Gq zL2*?!U2o+@TA?UcfV^qU70rE5*D$~Nx+DFD$IkJbI|ccPrSl$#f1yh6;kuV9lIYNQe@R%`o>hZGK;*5Ygh8 zs(a$sN8$;T?D>rl#lxzZ8lu>2K^2+yPwlB%16Qj!VX=;a>o#xvxW~FNHz<#)TC2j% za9n3zd25kPKwUL@2y@t*(hYQJ$lozpTJpDYSv5Pk~D31_t6rVdVl4LNhKX|`$iIH@%U z=Sld&gVSKD(L>pEFK3!FUSHv-EZh~oK42U4>P5oDb1OQ2&xbbIt(xGyF4j-+xDaHt ziqf65mW6`t(w7%PU)`!-p)ysMS?t3&ozSPk=$K^SNn+0}eUTFK;Imb3}W z{L1Q?OU$hbs3{d!mmDgo=HAXjhplNezbU*<7ml%%9e#inZmU|2#sAoAbR8-XZZDE8 zu&5acL+=`q$TUoM1$_zg63!%r(e;csBU7f&oHeb)9A)>pitI^blY-Liox(6EJxx;< z$wj!t8+ldaqSt9kFWqzLbg4*Ktg%pl{cHX1^Cj}#dSfMgufFy?Ca`y2IGt0xyyIdt zM|HE%tIJ;v=d2a(Zr@oCn`l2rI2ij*Lb!%G$r^7roc2>;?}IBM@+05qia>aI9{L6J{gf(ayXZ;Ae3 zD5smkNUjx<&}nyCbt@F0!nb3v>xOC_bY0zop)i;~;aa^;CM=-tmJZmDMv9$jGS7$2 zt<7iMv8?cHWxX3U**+X)g3sJ)iNp88oJv*2A;M0dLd?buZI;rzrG>K`He4nX+%%?i ztu<_aVoi@f(cylljZso& zN`KfPwnZ3s;hxP|*nh-QxaX44OVHO9Xe~WiTi4UV|2mc)JJVW;2|uKvHrLOC3q66Y z42PxH9XiqJ6IT|kLtzm1bu0kp)Jo z%Sio@E-@XD&`~>X{bP4`NF4_>^>YF=ByMfgv~?m+PwqQx{LFz)SSe9*?#CkPWyD!m z33gvY@QZBx@C^pEW7;-KX|SKcnVo8riLZ<9HFnhUgx{35^OoxQw1>laKVE}yrd28Z zim>ZWt>FkKOBRKRLCk_5&6V1imdj;1Eb7Ef=Y$LarVq<$ZP4}Gw&bd`n8=qa?Nqzw z!YmHtCz>vUiwy6${9s`iRvMn=s-oR`SN;BqQ5V z^Eoy{{aRvSDZ%GWi8Z&PKn38?swG&M^d`mSjq|ctKTmt#O|+|VN}9MIDk;vB zuxz+;=RzqX{Ssx=I$KH>%2Q-Z-swBWkzmFX#8JPw6zE4`$#VO8Xdz6o{?e^|cyHMO zX4b0T_0X_{*{eQ@r5UFyvyptW#$?(GvC9+d@ca=E3VVYqZa#}l5tY3#x8lXG#ERcf z^lwhcpMr&aI_+L`qOj+s5i_^g@A`V>QLa#6^-b z-R89#P4gv6luT<;g%5W`oo`{&i!+lPTK4tUs+{v8G;u2nPDdwUeI&K4LT+}n>CK4H z(3L`O!=&TFX%@E%1vC4tp-`xA>8Yw+X@2ilX^jAV=((|#CYWD&j6RVSD>emt{#!1- z1c&;T*w&I+dl(*}vK0+)kB_dmW;+_2!mV6wvO6ORA3O0H9QWkAPkd+7WfCot@`Q6n z{4P0RMiCiCSrk^X6|_JTgPuxp^bJu<^6>jf))p2Fi<-!Swl!eB<&5<{)8ynLiM(%-5W z@-Ys1udfC8c1n-#I~hvgTt{tfCf`ImK-Xi3t7(kY--fOlQ@L8^mfi*<33mL{S;g(N zWcaCar0InZU(wVKha%{s=~VQIVeeMWWlqBryIIgr_JoV=310e8 z0?2A4Ssyq;tpXpJj$xZg9btvjHi8GD6%A=< z2RP}TDh$edH050oMn03~)1rRJ zZeZQkPQIY;$C2u>vjig3C_Sd~If?E}Xc5TPgG&8ehhJeSrnjSjAcyy05|g~H#1>RO z0^Uq2e)BN2>Vr@)WPI0|s3Zeyr!!bhb{AT_JmWWtRk{@l{l!79^prHnt}p zePCJjb}ECJe3N}JfQs!-LWjBHs(WOGV!4vM?A;2T63K?lsu3gXzz#)SKdVJxY=x`7 zC!^>kGCz4p=bSBfFv?c&orK=3`K2mb!Tc04H__?Mm?>ylENSfF3 zIO*gE*zRK~J_H3rNp=1^M;e$j7g@zi)*WmEw4~dcvczoe{At0kDjmd9dony>18IsL zFE&};Qn~!t#?0ztUno)=>-x^{Y_Us7H>^aQ`;8y}f@YBj*OkOdyEAYv9v1bzwcHi?x#$KY;MZ34DE$3k|+Cau1g}IFH2p zzzk+wjYlja7R?>Q{5B0WDZY(}<+iNKB;VcfQ7o@ z0;$)XKXcKv`H|JouIYwWL*2#8wN1QSwS9s->u8PIEn7*}2!sqCh5?;c(b@AB06;G^svpPB5&-#zL_S9iFIm$5%D>l()X)(uel!+ zgh!>X&_XPf!Nl5=gghjTM z2J(}+K%rlvE>suhl=f0${M`~ATGHERVXG5w9-UKrB~Sh`qHWjMi*|Qq zx@$FKKgndh3J9jBD5jh+FEY zU5C9T)2f1D)1q}+mj}ZW{~vSj{$%BG-utd!&0n#SY)WXG!MenbwhW39LNYM|3ed$x zQKMlP&_n}+=YmjdR}ndKvLkKFR-D?}jwM-&tCC&kqz*>HMlzDB&R?+RKRTc9_v!Ap z-^*GvV4Sm;EoQCv?aR|oKlgsR`*4`Hr&3-mBI zb%dz6R2jK9tB|`?87YWlyg;ovwv|28+CJSu>4;w0!Jl55xu*n%+hy(yugZdwEbd2f z=GrLll5Gr6E6?;;gcK&Hr_j`NguqP6p@fUpUK{ZUy73{~`o6w-u9O%ZIehrAP#4Fz zp+K=iU-e#cze&SSvQS%F*%Gu`SXHUt|Zi;no(XHAf;f-E*gpxXC@ z#5^LYrmQ9h8Xiw)4}w+a9Kc*+(MQDKj}DZ6F1httqzX68`T1V65r$G&C57nBjU3T;1rU~c!~1I<%Mp+suCM&IG8TG8MXz1M$TtG)i)TI+p> zt=qsKY`{X%3*$WwSU$KHv9(88wu^jyal9vjj7$7@cDx5NzNoLKv{7BBE_koj5go>G zVU_1c$9wDup-h(6`2Eayk9{V-a#Tq25VhiVTn%&N07uNp(3S71f$FSynCtw55C#=t+L9DajxHCzFLL8o_S~^r^O()GfK0dR1 z{cQ7W^YXw`u4W~;l8ffO7(QMZpNGo@fxo-rlPE4^u?$eC?r2?A#*ZM+I@2wwnRF~t zziCu6N6){q4J$Qqi3@)raD8bPZa>7&^0I@@cNRwK9bq!|~AUU-)+(k(ly|5G%RAs4xP*>iwLin|DP8ZhJI8+6j zbaz=%ceQj`efYE?v)vw~iaJFD1UgyRSVsI$j-OEc1dutBoX`$)2zb z`WtBtsj3|va#b=sWx^K`>sN6CavVSRD0A*@;QR%z5mcahsgm1kSIXPWr`1Y8M5S!+ z)aSATQW7GPth262ORQJY2pK#WJ;7R>5XO?VG8N*?BSZ~*^(CqxGeeXwiO5zh zRjWs7U)6ekD$dR&O>?PqdfqM0d^gN58cfAo&n*;A9>%Oaxn#2O`3jn(2S+~5p%H?W zGO+lnjJQt80dXz1o@&9J#J|xXsvacpn)QD8>*SK|VZ<}Xgh0HBl6#N9skU5eIW))o zO>R_A%2mlrn!Fs4W9b8J6;7m%EyjUB3&Y{y3)8!*r6nHGmAHiW=ipz(#u4`Io4(OY zxt10py)<-}^-`eRlF+1lm8gg2rDE8Lzq7);~y?LO#)-KAme+{_qOOmnZ;rAkQDJs=^L9rRF=&jTa;2{u~+1| zW8XP;{DotW=ZLeCDxbS-5ezF3VC1|VFZre(wUTH&!HA75qlgGfK3Y;YPV-aRKtTEdn zbuF(@X@SJSVynWYNx!U?dWK#%_FG!rfUL^QHcgp)fv7g4te9$Ga-oc5u|x0uPB4{{ zqfjcsKv)SjU-;F``uHWKw=^*3~wbC~N3)_3CwNg7W*&_%x7*DK(MI zWwnQRSK11^bNIzWM|n^*X|rH?701BG|5tAUgp9f(mkN}p~vu_p1WM- zu)P>tm&E4*QS~mIiW~rC&NP_b`=o?KqrLZOJ8?;W9qJ=5?6uc|TODa=!VU5E=X4Z? zG}ZoqOGkI|-Dj+tmGmGL6G-FzL3nYB=@V&%CY^Qa#-dc+nh31dOjTg{a_*__=u9u~ z`|SA4+}ZD+zjWn$M3=7pkh6goY5LgeiS<*PS2^*zedu&Pbv%U|Vi8H8`1XVb)H4MV zT2QJ2pmNIflmcli(+i}*jL#tX-RId^W!cUbg{F3BHjgrHbK4pTfN2f(;TtH)G1v)h z>KHl0_F6iB$g!jWrK&J(rPl% zp4Z0sxkry5WF;&-PppR*A`O#k`*disu+v-4g`swz-;42^$_icjuT*}#wdzAerj@qX zRKtbO2e&tt7RXY7u4S5svMAlzpb%)5y7qd)&@VeWnxa#(RG1f*2|UrIY#A{iTwPw} zWDp%8saVTWoIn*4SL&x8eCV{4pZ`E?eR{wF2rZD<#!UO6YHx#VDjhqB0l2S02r)|? z3a_DET(}}KO?gC!ZJRIry*4^i<@4#m*^#IK^U#}`FD)&|apZ9RSa+8ae(73d@V#`N za|z0{scIyk~bI`0QcZ;RYqUF85JYtce8>$h21hatDi&yuPW6Tq!%G%FEDWnMB* z`|R@+RSa|V>_Xb*4o3MQ;?g-|{Q*2TFC=jRt$L!E~! z=UEUD)y9IO>8kY_$Om5A#!G9I{@%`H^0Dk>8!uhJ9#^*Vg3h0JhVe*InY_}U1pudA zLnR74_;on2&GW~A15LLB@@9IN=BAh@0$+YiINE41p%oVD_KaG z;(zmYF@WreCR4HO*J>h-&v=_wISp3z zSSe-Xht3lMI(}&WCi%HPodn$Qcz zytq+oO@vZZ1U-oqNx75NyjEMrDNcL_&O&HUmBDpiX%^v1`pN$+Weo2rjlV5;bhDafm_s6AWy0m8f9~U1`CAg0YV;9TS(RVr1V3 zF-RtkzovNQ`H`KBd1T4_#_D`pv6z<_U%$e2B;In9p1S8$9$#-h-CTisfinpAgXa}p zfy*_w$W0yKztNP9>scrbu-s7srrri1}E3QeZ z6V#6ccLSW;RXoBY2Nm|%Dmdjq<-0t!Xqmc@_FZb63wK>LY22s65Sx<>}gpm>zdGZ4FbYTE5hIq zmQ$-zzbzzJqfbSOHPtGYG2iYI|9x4psdmw3ERGR0(?3WjQD!HU5+x()%stLV%f`aR zgy=}S;WyI6)Ln?LDN|8LH5twiO08f*qUcw`RIcoo5y3d_utO|aQg(g@`?iZHfR~G1 zpjOK6u#uKZMhrR?Vu`5TxYvxRSCJ$|r5{-_ZoZ{;chSqJi2n$YH@^{#vi~)Wormiq zLN@piP9zJH39Z0N)#A(jH#v{5|3-}A6u(iELuTRGm;oBC<&jn6)M7e)zbXcunH6#d zmATRZ7^~lr=5b1auuCYRn}YKiu&_DODV^(b^9b$`=hyUr+5C5W9)E@n3Px#qho#zm zl4dXV&V(2r)j!haoAit`BrjKA^Gk)MSyNeI_r&Fq&#Z9LrL)B<4eU2rFQ_SFC^T?S zrTD!x#;CYxvPBnkf+Q#X>f{E8&PJKo!$ie>8}D8$53L>@$1abuB#;HMbZr#&k6iG; zv|(y2ne)pRyv=4K6|~AMz!G63l#c?!6Ze6c7_^l^CET;z##S(y@)8{C$Bu=*$l@6v zId`VKtX>7prQEV4;kyk-h*yMB0)4~JDfK6+jwaAzd)Lfm6+@|# z2b#Xx_(5zSaW<&qD^57#G!=gl<)?Q{}L6PNtqVd6Z|&jt84(mNioO5 zcI8Z~_7VVaey>+A(^2bKWMZ$xN4&nIJE8DcB6|e!l6}VP7iO789Fj;2PNFKclJ7?$ zBGyM>M@^;FGEBXcf{cUD__Gd=eO3$Sbtb)xgDL=!FN;DxsrFKYZNk8Q5+!c@8GZ-Y z*lgjm9jtQlkKo`ijPf#AJX;?%TP%wms(73bt^6I!VG0Re{-iSjjy%l(WalT`U3lnyCKrAARIXRu`LR?%a~{}h%7X}NhhXY09Mt9*{F#%_{K&pT?T%AiTS zZej{ST6I#vv5&_KEnx1ok$r9jJDsiB8_6Y6P*x}+6?7B^dS>DDv$4Hxxa0sS*C#A* z=#&o|UJ_U~RXSy6zm(rHP$G`TfMZioG~kmIRX2cDxf}6g9z*x#`IXhxS2h92+qn`n zDr(0h3&W^TKT3HGw9CfTJo!Qi6ufy3>7s2GjtUFN~)w@T*h|J4zvHmOVoD@{0)Hj=~7e^3r=3+4n!197qQ^pRZ$*}~( z?J|IbPNB*`&^$M9t+l%oc=B^O8P{O zy%xU}Vy<4NybZ@jxZk)Hx2ntaecz@*PPM68?3c{OQFshcQVW81d2^hPWYJ+cRkJOJ zI0R{{nRsuHb>MAKWZhoGufnFUx=9iT9`Py_OIUTKcq_sYSEpsk;bAdXJ1dvA-bK@O zXF1T2Kx(?t=5>%b{%RMM(`)RXT{L85uw~QF5HJI{&Akp(cZLnk4m8Q<~X$tT;t zg>r?;wDczM@M!3{zaZaBaFfq@6^c7?i1yNfq&CmWUAGqejfy{b`q;w{ zQ?vc#k=7I8HVrNT-<0;Y9C-L>=V2FsBtqLGOGbHX zfJkiz8cH9P7$3<`dUau$AmP7ZpmMjZ8nwBEv$%YSk)YFcqX<+R~fgM)Ch|CLitiusz(b7ZdE={7GDjoi< ztrt2EO*4QFk7r)t9{Cz>One_1MC>LkJJR--b$(N0c_ka26n4VfiuY&>+bCZ%B+o$` zVg8zhk+~!1=bjJrKaPuZd6Px)_3&Px0ta<{#S2#I!?X`u=t5?VS7Z#V#&;KB2KBN3;^ob6UAne!ZS#p;&mMX9a5K7x z_dT@h5WWa8fVtCNAJu(JU*jl@<;&l+a>IW=z(Hkmk2U246M_4=!|B?)$H$N9-nkPi z9K*CS_cXJsQys7P=lX$1zR7kqy*aSwvMij3AN=O7(N`v)Pi}1e?bhpC*C$_0KAn6v zxjp8eFD9Q%Zu`;Ac=V-z+@5?)`7ijMU*4E}zV#+n{jOb;4=1-LcP2Nf`}?go$Ncym ztg6$VroB^kLVEw+S^+ z2RgdRuUnHl^!%yD@cGv3lUsmg(D;6X{}}(+55Aau%&QxWn(`7_XGa_?Fdk2SI{8FH z+4|e)BmX=3IRm53$qkS)RIp#*LmI!e_1}$-+ml;gnY>G1Z@c>BJ)rq}y8r#;i}B=l zeEC?o=ReIE{|*9~VHpF#0Tg!$1hf&2IT_urYq z`>nV6DMY+&gfY0=V2J7G)mx_SJAqgwA?X8TVy-(He*@+XD2q`$3#~>auzL<5SNVf#~|y8^8~L zX#A58sUldvV7%f}xaAYtxHI{(HQh|7frnUcQTGez^bY_2R&*x#B`kgR|ctDu5RG`*vaDm(~0}sN)cUAuK>GYt$KvNVcZt!=962K&mus_V7k(0D#g45DH*eO z8d(Stm=et1OpfLndyC6v1!3VT8B9+DEkAxv>uz<(fVak+slNI*@_ZVEGG3 ziCTs3l0Iq|k{R17lx1Gqa4=;go0ZAEdG|EBO?wQ{0t#c8_B#T~Bvc~^Co7vHMjo~v zWD>U2+bojo)XLi{CXsC@n!N!lhz#^kWfAZcikr@27zP0E2B_AkrQ4e20SbmQ4D;+3 zcV?yTprJtsc2Ez-wD#y&DOo$rguY8q+jp00RHlX)qeq$BH#9gEsGOdK;iiJ7TD^AF zdPmwooS~h>z1GZ?s>h(X9Uoplz`%pmG4g)Vh?Vb8D4&tvZIX^~9jVJFw6Ov~)C!ceZPWtex zZ7c5wcj2J|ALpHO+vXW9Juj_sZt5#%+1B>xW8c^tM>U_(SI$^&i=>@LIJXQ6qF?~ay^yuA21+!d}rTb zR-yB!HOLP!l4O~GHkMlhB;%Ct>*2PX)s}g^D1}VWa^swA=7u<^xPcFz;o={QNp@!5nWsN1`Z^Q zj8c&y8Y_Ea#eSC0FK_LWt-s&;8MK0erDP*5q+RO5sfRI5cI-fCo<}LJ0wEv@s4LSW z2Bm9*<6_7hDBREckWT3SC&qI8+Wrrr|Q2Y@3AQ900-7nXEw}wK&5`>=3aZv>(nv8>fgybG+BWx zU#v0z95cj$v864GF7d{00;zF2xtiMj*go0P?LT`=aw1++@;59)-EVyk`~Vuq~V z*d-Wc0OaQYl7vid&JLa2CSqoUQQcwRY{Dm*2XVN33<8;y?0g|h?)n|N zfa3};#O;dSo5`StvHBFe(EGe)onK+9KMe%pyV~~8C zmOt=>4J|}Ch@Fdyf*|`@GP`sWz}tEhE!*OqF@}qai`&Eh+8mqdGe;#d{Q#t*ZlD}% zz`bMCG|E79DM^*WtprD{A63kbX2guYNGuz9===2sy7+AC^-MJ5$-m~-dErpE&12Cm zBrc(e3TAW>AyLmrAFG8-XE(;&MUng2M!$>avbu@5a9g3ve)wHYrbDVxqTpUMJNIsL z94O}^kZcmHYAp0IATege1%}O}MRlbBpO{~mPNUXVORjp^FHN`g#(XVpCLi)kxD#^k zWMPtT44MOCtt5|XG3#G?R>pyCv8oy+L28td$6{xp@I|wWYV>Mg0+$Ko!3)6 zxL84#k=YgIjQ}nJmEk%ZkQcXFf;_bZ_Im`_qmT@Ttk<@cT{LfMZit?H&9zhwzVv`Y zkden;x+N}@nEPG}dA~F{gf)YZv7Kn-5jdRONpz61YTJwv&B!rMjPd9rk{y@=_Lk=^ zi5DJyBsGCr(7o;Sf3@i!r68wA-oP0VwfB)jrUE)9h-~TpjzbiS|51CE|}77G3lPA+vXmwo)%##KcdT8l?~TZ zB)j#GSe9sVPhUqoG_4_4I}N6}JVmE}MAJC+@?48?@{d77zNZds6cd!NA<_#<=yJ8- zwC6MuA|Kv?5fP8*$QIJQ$30|YIbzUq4HYfv(d^8?$K2Fg@23e8xlBxPwbGQ(xsZnX z$MwF>(TklAXZimp_%w@jIHaXxK@h^&fx6FXT1SyN8*YYft<<1AqHL9+$s=1q(mln$ z65@5>+5J_t7ie)|eaKl6@fL?=njk~U^c>Oz>+q%ZYP8W?Y4vqD4I#DjN^nu<-=6g- zS3Au1j!97hcVPx;aY;%Acer#gH}?vgR_55f+WOqbK31BE+nGsom%M$6_J>V(kEpMm z<;r~~BRx}HW!G%I`2;bZGgI78XQ742yG*aP?zx(-b)CiCnxiBk$eq858gc4da`EL_ ze!0(Uk_t%RS-$yTnzSo)P5R;-$5pWVgqWp*Gjc4oi1K&LFtJutbs)^)0JiVd89WgP;V}RiH}7WQ$_O zu+xpnRQX!WTFa4Q*}fLsX-cKvV2$(31%G9vbiYuNcq~ZOB<{pZ?be zHP8|NJ*@X1yM&Z#yMzjSOEDM6^-6Ssr};DaHxZHyPQv)~@}+a;ykhV>+i9-JTm>{U z8ryM8W)@h`(JIJUnTRr_NLM2%&xcF_9kl999V+H1LQk6Zt2^1C6jK zTt=SWovA@St6{w>YhMuW{5^a%2_l3JIes-#!*l<_GGX<>oQBEpXX;L+k9=OU^l z1^DC`$y>st{~cd!<@48JGeTraINZ7}it%6P&QLl+Nbw5#Q&u9R29_SAo4Iep$v#0YhbECk_LVht% zY)gJLDBfQ+tzjHz0+YU**7@W^hTyOuy`f^5yu2d83xYd4@9jx?i}P>iTIa>?X9~%c zmU^4~tBFl+0_Fj9=sr^_wZ$5~IaGOFbCb-fHbiZo9r35&#K)9{)~4a<6H}a0wiHU@lw*g1(II?g%+13?Q+CNG(ZLFgM#2H_KR{MU4>LyYJ0rpfM#8niOhH$BUE zh>&%u)9=7IR(ylZ;lQ=xUk8e`h&7BMdmE(L6tNIX{%kuzjX*N3&U*&cs;4;fiG|Qf zMz_ZGXdrdk_=>j{JTPTkl5irhKpaaapiVI;Z7;l{)Q3D#)!$CbRA&LUC3-D8Z8%i& zLkZ}id4^I6Z>#5vrROPG5qXUy@pbeJDYQv;a1T=p#anOE9iKcso2YAsmjCj?-qpLTIIbFR57ebh!g;7afQH6>@%fI4S9- zQ>yea_~kA;uEao%2*L>o4FTC;SLNY$2%}))=2y5KH`uLI)|bk`PUK!MY4r$XnoP@B z^m&==hD@{5?y60L%!UM%CfX|${DK!MAu_pP62ah#L`+$S3C3z7O^|cnVVEA_RI->N zwCd5$qz|{Q0AiJom4_EIFJWNmH=L7}#gIh>HHrIkwcZLlN--Xl9g|!0-&u;Lhz&9! zy-Ys9wz?q+{bplMc2V|jZ!uGIUKhxn4`a;z+iGM?U>#<36S995VUcMi1JyQWH64Xx zylS8v%ANbV&IAPDylf&m|2Sa>GWOaPK;HVXz#!{lEWs?mqEXes+L2SuVt zbSpL0xG88*M>f`%IM49%P#?{7Z-Z{74sMHXXjnFg_Lj+-;)A2$zWt;3&rYzMJ01v@ z^tG3;#jb}23{%{z0)qod7Z=t#sv;no{7S|H*lRo&NK8pkpUK{obEv&9{E-wuZ}4B* z4pSxo%-lOME5X%7Joa#8GbiZ9PVf~9LST$^@)iRIfymdnEAOS1w z<%|U?Wu2Mye@g+0=2j26v>@^FiY_?V58%n^s$fVH{0*jOMY`MquMy+Yhu*gJmy*@Ia1+X2oH#M|R>1A1~&v>>b@Gy}*l(m=wP{r-U;eDw!&KkSj{&L-ep zSVyFvnFGiLv|w-Z0ka(ac|iQ?1P=>8WKxNf!{=5w0615@|DfI<7{TWs3C4THBgAlq z#j&#qnd!I_k%Av5{>zVl7!qNC!Kz2ex_L}`m@bax(pw6*o1#-4q(hejGD?^>Y`oV#C*_w$&%`8g+gXog^EyHiL!a4Hi_Mx z43)R?-cMmX5^WtCth@vToo2-lOO&p0mQv7W7~GD*rJP}za_(N1unaAs%i(Qgnrxe% ztv9fdrkN!r&ZQg3AQGijv}~=C-#`!6eUuPU+SqB8&z6&slxP;}!1Af0m5TIs=-JR| z94)7r!G*@a1WH%Q*g>skzYr3$Tfo$Er2;JWSFkhgQ`+PAz z^=RqJQOEG32WR0}#c-`nV`;qy61;m{y3-s1EOC*B26i%u-9Tb?k-LNfQVIu4$8!w7Q>kYQpu;xPBWQ|>>>`BLOFvmh(`wj@VL3J&Gub#7&L+nsALPu1Fu3$T2A$1(f#TdLFx>xSo06NQ&H%!DMG|*#e)y)V>)AT%Ev3W zvqxRlPt%wY@uBSUC>`pwVh&3uIhKmNT$fHS%*?y-fD|3f2}urP>37~3tfAO? z`lU$PZS!K9?2mpoX*viw*t3P6Mc0M)>wP+kwGBYgngYzfcJ{~iITupO-Bo4!`Ga#V zc9508oTBgLh8V{&(IGTSyefIN3>>_O7A;M5h4!qhgig!%H!FdZ2<>2q{=2ye!#zvg z+j+;uLBfU1s?GmMlBhATv#f;S?%FNmRw%F~R}UUe@^YK31n6@1BKttcTR)>G)IL)N z0C@|sG(X9g%E0X)f$1FH+#tc%&5FR~w=Z9uaBCk%HAKJl_zNYe)y|swK%-L{tk;*O zw!YnpV3K72DJy~l^J5xdCVEjKM?GyjIhYjb2ivU(c02f^tO#yvHFO>PA~}_XWOGDe zV64h}vKqEm^3qVUG-cyEs#2B<@2{Hg_LDM7A;r5@^dU)$!JxpW*p*?}H9*1+XnRHK z>f}$W_nqr|IFA*?Y>-tf+_pxn@8#b}7p9raX^FA1(#LYxx~o-TJdi3W=3o^E@gXB~ z3v4WoL{ZY@(iLIq-F>!ZP%*J)tSM2=-V8|660Od6M#v@8Mka|w%LR4dWSXk=p$?4f z2FJ2&A=QBnZ2H2joK2LBjp*r$dP>*F%^b>3dup2Z^1XOU!xq<|tAI~1Ko&aaqe2aq za@*)L9$pr7XYx|s*@BE7qIU+JD6LkD!oSdc&GX5|w9-M)(hj>ZZWU7P;ypFbRtINX zEU?6Si6BHYK0q$Rqv-AX%UV%<%u+pGv7-*+tJ+mcy+76IJ?DJvaBzdY=MfL}cS`-G zt19wH^_Tu+_{*tSqA-XbVarTMhQWSrExl;Ik4>hoFkNdje7=WBE6ip2xR zPn>Sp6B9Bb5zXR(-y_-q>htm7VvV>fI9n>LnSzPSy*BURG>uEyvlF$)cCT z?(;|U@{Cg#nlL_DFU8y)@4>2=JN2N@d_;4|WkxHT=a&wU1^Uy;N9w!zfH4#>6kY;o zF2n;_?H^m*_S~HaRX{5(t47j41Cea96?M-BoTa(AimI*N`ok%(lH&(fM>m_zPJ+PB}iI-M3x&28sIFMO?UcRD#m(E{It;}70RNwx3;p)Nz5YcuY zrbdv`|H6jK&%G-2_jjeHc8awGzB{;Y<}rItLNTqgId$*<`zsk5gv8jT>X{RPieNrd zpMT>iZ-mv{-z=@^Ub*;C4tLRJu51i&idxa z0G#&o$*(5=Jozv|(4m32tao=|E2$&>7IF@iaZ^eU;s2ksR9V zJXBgmvG?Bl{=we!a$L@@jWP3YUoB;4&Q4G@NKMXNV%%wu>o2dqI=8m)DpGDeZ=LD& z`ts7Xn0{>@s7&MLjsVt~cB(xzxRUNnnyBQ}IC=K8eCs!uQ|>{2Td`bv=sI`Kvx$AN03$n>`EmT~_j zzv`E;+f6Q70s*n_fOvk~D>-+5^U{@+VkXD;`ixX#$=vB4ZU-{wg{umH2BpQ@(FdF z1F%Yd2DGK49ZlB@tt^EqkrO4x4XLvIXIuU);hj5G! zK6#`Z#8FR*zQ@5FNHnckqV*n+`wE$_XBUX>OB&Qhoujil_S&mZx4gcv3qSGbL6>xEPc| zF;BfPf9UCh^MCo5e>vXs-1^d5zFc*zTLQ)xeDCe*6`=gHYd)79jak&|%+aR7et?Yd ziNaq2K$$AZBK`{51CH)(z5SKRuNw50YYrJvA!cP%_0JXVb}uB*5>(S1TAnhVY@teh zM@%B^-Us!M>*%7%ujxN7|MJl^)o-0i!_SoL-ult)e%$&zbd3XC5)Mjz9W6t9@6@xB zrvH5m(R7z!5eYG`?}9&D*Gu zA-dReyFtb@J-cvmc~R|XmVfDLSPbA3%@&Qwd-^m?l=I=!Qs zDTg{J$5+kj;XNkmP7I-jLt`p~;z&E1;EatCUz7#qodDz02cI!EnkTY#B#wbuWFwx& zzzT1qIsqsqgbp&LZPNl`sLB^BwOt>Oj-UG4EWJxV=_n{r-Ii8)4E@xH!P4|qfDo8-=a-7G%XZL#OrcQsut*8!{o##4Io1YA+2BEz&p5bfR zNQypx49harOsnF6H-l*@-4j}x0C=~`xX z7Min$am8=yq{!39j~|UX?}(kPEbza#e*Be|W|bgIs(b5=uc&?VT9Upo3lga6JSpVf z(Qs*g^`{8sA{>Jg9q;OEl{{Qawd6B_JjM_=azNpEw`AxoMGqw0z;nROQZ)Iz_*rIr z>Ux)|%v~w(uylUpVbr3=76)REp%isdt-SKM!~PJIFz_M$maB?0LZpVd;dE7&{Wpw(uVsyBGU@BfBIy(R5v&8e})NbR^ zM|gaDXHBJcK-(06Xlz@6F6Ke0m39TBfucK#<$vzQP93Hp3y2gP((yf@V@-8IA?w|t z>1H=GG@y{v8AQM19+MkfS*iGuvi`JObe;EDA)pQMQ50jezQzXacjX-TCob-t{GcWl zz9VBgCNm=DsFqE>FdFE8RPc0!qB)ud1 zD?2B4k*F8v1XDI>?fG^~C9*H2qiC6|MHwafLKhi;g;q6{2~)EQqit0SuChBBi$=j& z>xCZYq23tS4PSJ3=G@&jt1ZS;8f2{*S7NLPEg^$+f!FQvndP%KAkHkd`eL|Pf-<+U zjqyd|n@;)hVjSF+mpv_D;u0_rlb1Rx^h;YyMDU;Nc&)=~J=gZ%nG5Y+CC${OEREpl zj2&=p!>*b9AelVePsegblscCxeJQ>b5w*iq^hYQ!cHE?z8j9K$}#JX7qJ8?IzXWnubWDXGAnK zC=MvZ(mAtb>nDoihM0t6{7&CG=CN8 zYXH~IRGdd+VbL*sQ*H{sR`co-)f`zMVAac@Bg~ z)K`$@dys?=p^_l%dNZ(ENIb@8f#JixD;rjA6BvN!5dV+~grfLro_0|0SZqu2YmH3D ztP>F;&cDZXG6V-$pjV&)!L;>b4q|V=eWLwx|L*fo?58Cz=cYnZMW7GlgviwDn`E=j zdwx>^sLfGjod|c0ijS4M$xj((6=>4Rf%!HJMl%+*eok+a?+iKU+$S2ABt1Pvq5!Rt z_Nj)WNef*GFDSr;)QtHCdE$tCI-H3(uX|HXF($7veV$Y-o;>668n6aiIf0rib2y9O z1tIg*Y;bZinsw{#`9dGQVQzZ!l_{O&Vxm{Gj_Jj~{1!+MK0%z~2Wd!zxx{gVAN+QF zY-!_#g*9C!SXR!;SUSgO7a~Rg$s$ppO8G;Kj3*&XGi&+?A3B#|OO~y|LZCkrFHsXz zGmuD5J@vx;vj-0yIrj8%PFTJ`c9%rUFt*0f43Q35<31BpzjdQQ)dZoCd95?IpE{ey z&!;yYZC4#&QH~gF45v@qCWu6s{p#XHm`FPXvQp-1Y~#shNhyF8+oi8ty@b# zpBitK4+-UssM5CjkO_>i;^hBdC5(Tz^@gj&wxd1R0xm?!Fx)u?}4t~c0KIBUnU|#mB%rDjT z0@sfuD-bJA5rVo|pVs6^R9~04W=@^1n=IRF7|4ocuGjtWR5lMwT$OM59wryMA2cG&Tw;DS3Qn_0HhT3wj7K#sk;;IQDzD-tW z8Oc2FP#mxgx84Rx2%j=1?~(Z>lPzXD*d>fDl$_Aaak!}?9aAauUkO&eJsM!3L?Obs z1FCnWWdeJ{|4#nNOd!fsNL!ytS+G}2ooIpHzY8E~MQ<_?cTkc4sVQVRK4U$q36}f> zOtD&X|9U9vsGT0_)x5hO%)merPV+dl7V<}Fw*~kIGABIMOt7serK|eF!`|Hhx@ZoT zh!Z1h<8QtGxX-g#@udRn;9v7TdhV~`9@ZmjN%>>d4oap=A9HUKEs0I^M6 z%k>z}YnRTgdKjsp!Rb|Es``%m{knIU^bjEZD$xoWlBFT)4UKRc3j(nmLe@bp99O4u zdcyCMaBRo)6^^ngz@b#v=yd<&ao>TbYpe^LUd zoVPs`otJSw_UmQb^0(I?bYiuOGHKG8eR_0S+!Yz2Q)l*7U5Hif4(s(*Qz05n99)8y zEOG-uubbBFAhf(|YR(zU7nT=2uzoik2CxUL8Izfuc39hpNyeH)tU~)}aqrm(cXc`_ z`$UVn^m&uBJliOyk={Z;2+#pE(+@^F*q2fTH&|{4@h5F|#UipbAoC}m$l@ql%d8Ph zI`*?=76^9>^-22n7s!U&YfFZy1MtkmCbXy7<+y10iuu>^_P1=*C^l|OMa3AzV`s< zaP2*C(gn`a?3B;YOm_z(=bnj-gphRb3sI@o_+;@vrA*OBq{EBtD2qCRWQ{?rc%IKp zNp`&=o{@*;cyUZ0bVK`^Bp5IzQC4>CB1s$>&)FBdF+TO(QzwrmNuNbx)4*p>7N#ho!zq)p5VdKE}*I!$|`h#;zYp*P= zEWP$a2t`EZ{Yj?V@KhW~sK^hJjPNt^735BJ%9Lybk*xk;?)(p+PRM1AV}h?8`2J%* zc=(|oJp2v%OP~JK$|aGUrY}4j95O(8i`fvW?V5qnJJ`^oWn>*Ww3 zTb|tb$uuj%Ve=^)RqJD?@@qtjTuUufNc|zw6alKB7ru&f+oQ==N3%C9WS23do1(>&B1-o!%bFN2Lar-JtY+?c4E49H)DOrU-wk8 z9pJtA&k5_>O+^20zfPw+>J#>)KivqCBIMgl|J-To5NnJB3Br;>KTML>5$QKqG}wQT||jC^oRK1yabR|$j` zf?nTE9yUMzGlaK{}JCg)S$ zi`+uRlpRKqv4|2Vst@Upc5wKqwRBlIJ1s?}vFU<&4)VFY5pJ(+lNeYtE?ZftOBAtU z7me1YSeX8wXqNLOGp#@y_JVqnw{ngPZPpK*@svuLeNk3DP1-aNBZFi_=61R3?&CNR zX$rl!K9pyda3Wg-#(-@s^%Xu1rVFcDr^k3zF0T5Sc2s#9KE4J3V($oL5sS0oqabY7 z#efeC#W)ch)0O|96Ey=3@>-MDU)_6c@A;(joAG8GNOwqivC_kTk{M~ePZQ9DF#}by z^0Jc`l=74DV|&LBKP2`5`tifxQ0LPR-yDb{1eB|)Cn=cDgV^63-4H?vJb9iH+;^p2 z=UD9E+yahx=CTBguf3=Cp4+>!_sP9Sf7r9UD$}5ib!h%}I=SF7m$^I+z|%kL;{)Tr zNa;{}$EW!9So!sR`u-tL9{xu2$euY$U8B2^+K3L?!r`1ck)TIqmW!NZvAgSM;84%LXy25)q%iSy%U=|w4kP1m5mJg|C zj#$64aB+#5#Q;eg$AY_Y0xgBwCNvx$iwmKT>f7X$wd6<}OzE#a0iEJ9v*q%&2CwN4 zyJK=UdT%`erNdD7py-@cS zLDx2xE=#{--yvrhakF<2WP*x8Gz^u^*zQ|VR)9B$`i}SGrdj!=NizX;1hY_?tzSk%R3+8P5XadoNKjK`?4*|Adwx00Qu%>W z6HH^4{KKSC70hibkUD!v5Qqj9VZmilWKYiAlazVx^wXjHo`cXgFGtH=IddPS%yUnl zj{Yvu-=&3X+=_B>F0y3oacW z=7776rL{}T94Ata5ENq}N|;ZtkMg&Qbw+1#hz-6&GBrCUN4Ac{ZwfJ4AbidQh4JC; zS3$tbT(7pdvN2C+uqD*moIw3z)M}hcFN8axwU8vY#@{}9_|$VpPm6JjU8HV%WhE0r zIK`Pawn`9T!7{oZz6d*rpgS#tT;3OU!<<|uMKIJMcJQk}YLZYu-Hv=|svKxvoXTm! z-89&C!fk7n!byy#;OMpU=PuggtlFp~2yikBGPd&iewn4_B#b7_CaXWT(ww`v?a?{y z$%D?qG?(W9WonDpTTW2I>SbwOno|^^mx%NgNybu-UP9k8WNSs-U-YGvemDYC0ooy8r*X@ z;GzvSpUeyJ*N$@JnUN}~>=&8s!Y<<#`bxj_?aNRjHrm1&KPDdu_D+g2Af^cFx%Kmc zdd8tqp2)TV!BlFxWpe#a>;|oeWg+7#$(S-7U04+kwPj^#A=NnL)3hoM9X6mOxu$(4 zA2N2Ie1!nOB(Y=FXxZ6EN=Et9#|p*{`OLjqW>+GAm`spN1;0-U#U&ovNQD2VvX|c z&d=$t9X}cbq{Fne&e{4Is7j&hs*_;cw#IY&{IiEK44$3irGYrYIo2X3zb5MXE1zBH zW9Fvo%(|d>L9$VsY@~6BeSo6I^kYJk`bmhQ3`v(6yx!jy6iBB2iD_`W4mi`w$phj; zQ`nW&_2p|1%xd=o#0bpOOc^((MM*?52bb0^H&ZtpF>249@3_Xa zmz?R+k*IU{fW0eQ3>KRfS1{r z@_T)$%anl9WJpEK9TbXvaySB~bZ!VNaCQWS+Bjj22=oi*mN_>vSXX{vUoRE4WO`KP zbbM~yJXxTa(zlpNHU$W$d86NW09$V}r*TvEoX@U~AnN+^-(mbizS{3u&taw3t(~lWOv-|3-pE7;%xkRqi?+d% zK4haXnASv1!BX9RCKRD84>aHZqb9p&tMvvzV<|U*2JHXX#pw0{$dyoY5r!@A!{WFZ z!)uo}US8Trxe*L&cv|GyekP+Pa4$1cYuA-qlwY-Mvkg&V#7R#ceCo)HMx3n5;jD)! zlZAoo8rgY(Eq|d3Y$$}$CxMuhp<{U)8^m^0IQFufXx-6}BI<*j|52Kq;nA-oM)x@0 zO^wPa-nDj|hPcY0wb?L8)PvZ2k+3SeU;}C8-AUrO=vr5zoZvQCt% zPkt&{;EMu!2PQWI71wKhW%iQm^Fmkekm+74AwDF%WwP+cQ;dv{ELOH-46nQnJ00DF z?t0yA19W#yt5?5)QCT^C&_>givEnGhD{`*0`l@_N7!ai*`+K^RqN!2v00(_)GfgWc zs0Fe29qYfMomi<({)vDp>>$88%+rFa%{+oj5rlv%J3QS6`|Z^b_FHVicpz;1FkUV) zKBQzBQ@`B9B{EGHiQTO#R##@rh;M$v>&~~xQ8~X+s6`gdb;One6)EPV{Xt3fY2}z# zGBoNyf`gEe3E&fvIo-Mh3iFK9az{VOHZ5_)AS^9m(fwTja;p!B6428Anf)Y4K5?ds z?P!&e!Q@U9Sc)k6sqa2}Kl+Z)V%>X@O7zQclRal?(g7q#xC$uu1sjRI&#iXiZi36K zK6P^`H15TSv?Sp0Q0)UUf1cbfnYTT~SP>Ys@Wn+dOx6nNZJR7QRP$7@HW=%2P>6GX zGWB|cw9$t+=@KSQMMC1n(xoe2+b)eu1Wi%UFu&+9rb~u|*)=U+wfxM177*~-)^cU_ z%F^Xv%&N=I*JJ~v~{!?H2M+LYu1(w!2Y+{p6xZe@yfvL4S4Ek4e9i_gwlS7 zmCyIU?e{j97hg%E+LPzY*!#V9bj@;dBX1d*wZ6EZr9==HKB_6xchiL4?d3fP#VVWK zDfgG9R7!|R)3CUD>5{V3F>YZ@=Sz1JT>3h1AOQphwrio}y1XS{mYc&z7@N*fl!MBY z53UUF$Sx_W67CX%{2!~{2ZvY__k9^|-C%E)!eEkxEN0M>sPkHpt0`7pM}fV>SLI{Z zE&F?~c_^%x1tcP93?iRs(awmQftGthh?b~x!bNqR=9E={+N2S4$nMYCpM8@k7Ce!= zOV^glI&_lhiYkCodAen#d0TsJstD-_T2w|3=EOEKQF@q*N|mnn7J@kU{^}T_V3KA?SrnJ_Qr+(S1u7c2QvSDV>KnUnglholui{>y-_u8YDPpc zq^2OHO@Yqt-V&5HKn2r4q`UV7-thyw*B{uI5mfqj z?|s_Ju@Whaa%7XtcseGpSK=cLedb`d-i{7G06hdL;2%xNEjTlwa&jwA8YIr(BzM#> zI0QuOmK+EZLl!E+bBlJr)HIsZpz@MiY_>EdM5Ap|HD~$Ig&@^_E&)P?*#wK`nAxoX zEl#c`sDP^E3lPL$wQ^Mmeh8Kh+vLH{u9RIyBP!dP9u@EcdESi&4m)E5EE~1e=)^Ti zAkf|bV^`y=s?Dxr4-YUkBNhim%xD_5gi_DtX!=wQW>A*V^b*Y3$VXfN&Kr;FVW8SVb<_^-x@OuZfXpmQ(rox14dAHH1(` z^~#K(l!R3cd;|EDvT#micuc9@F4VG400OHrQ9;?AG5NgJv6KVYmyq+?qxhTeiuyx* z)qdf4*mJxmSgEprV#u|skuidLgot#`nJmDYt)iWk&GJrUMK^FH7Mr91b@5#c5>7^1 zv@FFb9s7L3viCLNYN7-`dZH_;N-n9)Cp#bMT`-76M8{e)pTto%4kHQU68|@n>-7bW z$EJa+j66(=q|s{Jj$gw50qZm5u4eQT{+E@g40z0)aMBVrGs9j1_6)t5?7&$S>j)Fx zT3~W!1+QdraY+;v%k^CuYabENkBiwcxsloy3C*^(!U&sUjs@LWxFk)AYEAU66)v5^ zRIt)N`P9iau#jvZj^7ib+BOYCK%)_*>Z~B2o6f(#cf*1ygs%sdZgrlo`2Il&3pSrlRn!0n=aWHo#)>$)ysoN2AZt%1ATO$JVq#Zp24l9{F{NSI|n z03hrolZuF)R5isAbd<4*WP3_v?=B}gaXd!-wy9;EvF$>|VsBQIX~f<%KLs{O#JKskSF z`?iIHe++v;giuV*=`mGZX(SWnGx%Z*dPFC03Cw$HN>k53%s--6N2Ju+3;=j-b{13H zJkT&jR>EC4#>H(^Q}C8z4by_epFXH)L#``E42x9{$B*o-ZbzP7u62*`2;vbi-f4j@ zj3jrC4F*sMzMb=PYnO^QLNZy#a#uB~lqV9liBPZb^T#`@v$C{6%xJ&y)jjqFhED;y z_a`56aw)MI5(o@*<>N~HHF;&8`syg)A|HV|190h%^t z@<8kI|6n%Om7OMJ2eZ^7E7k}Mm~Zl_z`VBYcuY?cQefNSjE=+u`P8c|zIGDr^VCD+gylf!Rky(AQPZKOj4MQ0LPip++3ayZ!5NR|2$ zOz*o*9byq%d*>AU9wz@mV91uDY+?&aSgBHN`XQ58p+Ji!1$^2GdYZMOXw_HnkFMa?BV0=NK;6u-$D5CC=+vZ&sUck0!sS0v8m9IVw(&42T1z z@yg9Hwz%cO%MwW8$;LTaf7uswX?9wy$$SzZ1yf&gAK6Q2z2Uk#qhd#OKM-X0VLrt` zSvUtR3mlP1J{cE`kr@O!V9xQOuYNW3Gvi5SotYmgyrWu`6=TY?eL@R9>6nq;8nL1v z(nR7w!1nM`-*_uc?}P1_N}871VjE1mI`bxW5@FTHuqL$w>GLwJKu&ItC{-Mqs(YK5 z7MzyA0{GLB5Ck#(9&}Zp_Pl%ASD*-*3aZv%r_=?IVy3|rG!Jtmx`l>m$4-}ma&m%y zMCqJ}%dAOgOUr&Dz(eKy1i_dwN~n4h$bPFR%A9U zw`m4z83~}-#zfZf(u;r6Z$qFkh@2e|xW(#nPLc}^S^S(fQhShxxo12V>V^5IkDq*Yo>^XaEa~_eHjbA&qf zR1N)i54D!AU1`_)`LICn93?gaQY29~#?&(YFzG=1cCJc}IE&Ow2T9s}8m7=}L#W0+ zY$O#j>Rba*Oss}7a}p&cp44#Ge)*F0UZV>8lw}5s&nbROmg+4RR{@Y%Xa?-_=BX0 z&#Oh_CS;UtK5C@RBBsvUGE_dI*x!RyOrgBN=f+snSJs^Ojt{?h;`qta9i+m&qPhMLD+R}7)`7`@JWXudTZv4@KHfGK20{VpUgd|0;6rynI zL2F9rz|Kr!NF6;=lRn%a_f{r|9*fku-*8frwZeuLEx-X&OvsEf4kSbsOWa`J){V%K zg4}gerl1L{T(nj30L^26P}^RGp#mbjng~JNeRI{AFeRy;Pe)>b(6L7jA3p4R%BGf} zd7JLeK+Ka58Ar|Co1j+B1t5(pEL0VB6gI6)V3t3n50qS}@hU1^e<ZS(Q4V#JkmHtcB2wPSm zFR-fd8CM|B=4bNU>EnU9-HSuveh62nT+JL1Qf*O0r z*LWhCY5Lr!CXdrgaL8}4q8vg<(FyT9V`s8#k-tCr@WJt_;gm?%Zm8z|5BxrawdPU9 z_Hr3(EU-^6XUdY^xRZRA z8iaIj4=_Zpe^~4L&g($Cv|0$c$!M+!HTX#DygZbz41Wneqst32TR-^|AowMZ#$nowF3pokPI15jeQj&>X*aT_L zJdbg>!&o&$-g_>wdt_-twQ&j|S>H)mQi5YD7@RZ%8F)#(sFciBxof^8AI zTdzMjI(B;g;K@VZ=D|Qz10HvQ=U#lC0=nT(w5Lem$HqnSxvh{yO=2MNo@+gQ;^g6H zBy?o0VTWpv2#>g1sJ{a3nsQ-av8w*z)A!!O(HBmf(p{z!9`2iEN&f0QzZ>I~SFfz= zI-L0p_olL^51xLmNJ(g{U3g<*V{<)~K5=qJ%U9N-Ww(3cw;9 z&Gc*Y*DkP6{bDLTePng-vpTQ(K7H`icTSx?`P?C4yN|1lh4ohqBO&)wM~*83U920f zv=WWHaOBvdkIX_Lw`+02&Xv;X{882(4~bpP(XBOUnDyPV6wsKK`c^Lgs~!`_N(<=u z;p8J&;miDsTE8+!hGkYg{!nBA#aSao8TrY-SM+En5Zraoli58sX-&WnwBSYyFDvIW zJYr_PyOkD&>c|z5vn~;S^3+qKG-8j&Ate+qGb{6z`GuG5(rKJTA!~UR0Vw7K=epy| zA>)W0UApp@qefrCNhzOE&iKu779%2%6l~RtGMeIZ+8oS^xRGN>uM4ZTjJsfUwSeGj z!l#1GGE$=((2-IA7J1>eDGNsvZ$H>VI~g3>I#!CJSz_Hde6c(TyuqB90`ihWEVU$6 z-8haRCz10#)RT5&;3XG5%goA~*`G`gghq!?Wtixyv79#jWIJj9> z;Ghgjbq1ligBF6_Q9IgQduib!C-z~>dErKYgZj|^a`JBl`alF$7LyU?e@cn3qC&;Q z(`vkoHeZfO|3;WN+D*8k6ksw`!HOzqHBiwn{`?O2cYsvGvp`cS&m&ZnG;m7Y4;w4Z zv9ZsE>2a{56)@J~RP3VN}qi4a_$9iA`a9aLuocl~y|J z^){iG%tY>8Q|}*`rW&epIKo_vp&?SwVXwJ#gqh#~Gjs%62hAIi9~ggoyl~Oiy0zO$ zjPO*rtVPaaSIBh@w{^!oq$}p`t_McF;|@e(=44x~iAL_OyO`tID3dre%EZhq+O*5s zqfJ?X_2ldXsqa&xwNBpmVY9H28W56Zc}^073Y7(~NB~F#5IKO;gf)nSjTq7{xJ2(G z(dB}@t^2eDg_v8MA3+O#W86_abdvTt6oiDMhGsFdyA!1WvKBB9mscD>?2A~4=s3)& zjIJL+u&&S3;?$;)z4n6M8qfWe=1C$v-7OtTyAmkdyoMF%oT#->g5vO)tRESh+`!un z!&B^G_eaUVQf8 zp>KbcSPs9RIefa<(WZ1T)tIHW2Omu3lC|A0h0Ta?3UekC5YU`h;K-wum|wt?<{FeT zBaEDgbBcyQ6`TO@$_yX|rTJnYPOu6`ENKY~X8s9^xvdPPykmOuEAWtmh#HW8iYVkz zyv-%cnxm#f>$X$b4W`S;uG7DtSXM{aM_N=O()XKhy)K&3BAbiFVhc(Dj91}3T0oB^ zGL|avqAP!G6^gY142VoInnNoeFP{~4VzTe7J(aYh$-hI>kRF8;1EVp?W{{Ug65FwO zr4rNk@sP{F(rYyy%G&0VW-<5BJ_FzWmc){E!9+rPiWO*F^bWD&qs6ZK(1?LL(SNffCSG?vmYqar_RX=A=mU-N*Db_`w<~Y9d0KQ z2ZBUN{>>JpgY~TQPaam(>;uyW@|3^-9Xyuhf@B-oHpmP8770DeOh#0q`XrN*UERcW zveup!R2i`M23qZ!(f1fksnZ*909v4jOHf6aAndZh3Gc%4qBF4?d#k0%P<`wy`B_L7 zh(;!$LNz{wLMa&1x|)R?=M9|z&Qc8c532s5C6HK8vCX2`M7;TQ+LTq77rz8^2r*9< zfp_y!BS8ChGs)*K&+EE$oyv^Pg=~8JYxF!4p`36MLNLeyoU%7M>5^J*w2W3T`g!P8 z@P*J;^ged%@Qc(D2~K$3yPC}N$q$rY@N>)F&O|E3@sHc>d%&Dr1(5%xv`2qWL1=9> zLPCb%t?=(NdnO+;#&%L%KaG(!nh4N-z(A26GFv?RW!6CvFS-ZafKCMzEWBk4RXQGp zWg>hR@D!M>9ZOkU3Ng}|S)jyhZ%K@!^_hf{=gN0P=8!4LLo$0is9G{7Et>(hoJUbwwcXR92KwKtCZv4VT zQRd`UJO@@C?nMn|EtPx>CiB)G8JKWD6c+X|MngRcu>XL&L`h7*brTjxsB#p9^4bx> z+HRuw3sVr*hpniTVcWJ_<#l}H&(np8%uY%NGVdy1N8;1@n_F+lZZ+klv_6SS%DZhz zNeIHUt3XY%712&_)yH>WYgCfI4!@X-v{daxB4|9Mxx!j0VD+)^OBK+CEx?x`d3-?{ zzCC{C*mL7&mM$-?;VYcjJh#H>^+%T%xuI@}1gtc3U9g!<<1nm$*a|tsgOw-t8ejx^y#{0_ z)uXGb`A`u}j>M-B4&8{IT7a^0WIFoX+ZKpK7Brv3}WjL~15u-nrJal*m60(TjX?VNG=BD!34%%bL z%)3@KkOk938ZU}jkzj8NODXJdAdk%-e(})Jz;EBlprMGe(i5zj^jWHUbzyB`?V>cE z_K4Twl(fGG(tqeNE%q=LiE?OJG#xv=@-(Npc+r~^Gp2@0Q(sXs%FC>f8?5E7 zZWdhG13%P6K&?qjN~LZO(+a#KqM2IT?oI2IOcDDa{Qzzr&j1ZhsTH)3ILPi_!w`X~ zAnGCbj0;3VnmtYOCZ*p^XxG}8cZ)K7nUh|;-VbDHyWkUJ{b=iIgfg>#D+mRF9go>)J%dG&eTf?zDBd1y4Pik~InZ|HNz>Jq#E zY!U18%w$f=ZG`>4eKPZ>&ZcLe0$DIbXdih)#?pgl@3MA{>AS64p?Z9V-5tdwI(xS* zwT$n(pqdUQY7@R`ML3#9mv;$hHR8L&b5*f}s=I5ap_$qBano&4(n0q-(JlvL_f;VJm^PJLsx2noMCx z29M0}pm3{WbPG`-qmwWTIH-fRG|B^4jj_^dv=t+9*yG6C_KN zuqKV)nWGP_JUEtDW#~|m1=*v=4?ZQC^?~s}c;KG`@Vpf&deLPKVR-Lm+K7nC*?oSm z1E|w`5FzTn*>F5wWw{Q-o=}VV0Q>e?b2A4==;58V)+-`D1$`m_;h>MuP@?aSM5qj>mjU`3=Q!&;{{H=BP z_X9AJMp90GdLXt4N@wdiYuzo)(aaz0qxt$xEoXu$v2i0fC!SF$yF;ayXmw~(--I>$ z(26E(t}&r9&(x~|?rPhMAo>y9u6YT|E-{rRKhC`IA_BIvSeuBJ{7JrD8=aYcPMO}H z9lf-Ph^bS(faISCGhmy6_%Bjp6z2usiqw&Sq#Wye|aXk6nv0iE>5p|Fn&fW-& zBV93Q?SI4+;Hwk#K6v`rH@-enA5f5>Ocs5I&=MmehuJMHXb_}r=8Q>2CF;1Qq4oxX zhH~Gu@|1#m$h-`vvzdx-peS=ttF&}e#$j$GJ79^jW{8>^&?1r^p$Em}5eO?J0~nm5#{fin zEa))Y#3XSpa7uK@66h!7!Ar&l$eTh&8(Vc>r!(DIpN;mhv$q zjsZ!EQICXF#7&t>x10G+cCJ;7C|`(n4LelRU1bdsDBY%l z3nS?q#$^;~20*q1T6aaCBMj%s?KysE{^auqhk@@iJyG6hL8h(yc{m2uPozVPGQj9rE>2p2(!^%4&_&48)!d6CSI=uVQO zb7*1k#&lG4sAvEcGVa~IWC(I888tHZm6dhfKqYxFrf3tWAW5f5L=p%@{)Xr=IHs_7 znCHVqJ9Hxsnm)EpVaC=h+f`F6jW+~VySloW(N%ClR`9Y35TGT?A5#sqp+#g+n*{1b zEWHf*tJl=>!5m47gL>O))zYEmikp(FqlwTiR5g!&9$5xT5_;!j=dC7dtf~l3wJ34# z?mWX)dhN7$J?$22LX9DuB+`4EV`RZ-4cDvGG>&Sf7B<9XWXP_%nxJ4BT{xG?{wlIj1wpffWb)2g4a4 z>~HvW3n+-60k$rgD<2Ss;3DGqGA}fp{u=3VQUxt4(94=qgp(S7dO{8Rxgd(d&w#m*m@(Em%$8+73LsP z2Hr-o`LeY6e=J0!ePK1xZ{ATmTZ1q2y-8 zl$ox2$oFjy4_B&yX>AVmZ3f(~D0a2gS8PlYFi8mU6+dICAvGvhh1l&%YR*3PbeZIGFYPd>i%R8O?86uNnu0 z>!5&D7T?L5dQ7!f7S1iL#B@(1j9ikz4bz2F_+?V1$!Pa*g(c-nOB+jT!FLop@qG_Ya2De4{>cF$;`D;Yv^1{mM#ijqRwsYCB^C$xFd6Xjo5{P&d2LT&4Bsd}hq6lmW#KMg2 zacpILksSxvnH7sf${T=q0|<^3N04Vo-iYt3>h8b$znn9P%_i~ur!UoYuj=aVKkZoU ziXy=InC9$T50QYKP5X?tNf?J_sO`Y2F2_*MCMmiod*}Lse>o6;4R!Vrm$fsmw={S#$y&NgWJls;XNGhCi7>+rb}_LPJpMZ z;1SA`SdcD21ynu^Au3HnIZc$;S@P2)8xgB~!*MGI=kejSahFba;RetfcB_xI9KdQ0 zNX+VHIr73pt$<0wml684@lGex|o(xd?Y^nDC|?h4S*- z5AMHz>+Yk*(Lui8pFCKJ4%^S#Fn~$@P-fx2eK@sP3T5q#G{SAY_t?GHU>14Vb-XV+z6f(jmikTGg>bWeAHXuW?u=NXi zw%ChbrVQGhv-5|YpWH(c(Gz$)>LqubB-Fp@qXPrEK~dZM@I35C+Ls`XPP!-KP z9ij;3&T09zwgs~aZ#l}#_1Y`xYS}MT2>TAj*HOcD1BHbpwIV#>=9o+1$yDPzXk)DiY)!?RA<52AAa9*||(u@yR2(0w;pj=1|+f2-U`@y4o zr)2YnC@}^Qh*)s73<_I#=L%R)3r{jf>zYXlk0p;3<+)o6xf21AL70QF3acav_hJ~E zj|iP9-7F5DbuHn;BoMqjwFIq~^51{whfg9S0&1G17qA3V1Nn8nV~KA5?RxzqOom-(v#7YyY!FOXD+s zI1l|Axp(5mW0C{M8r?s?_xS9l&m_>e8-Qy;-aG5N7k##75ZGRNvh^L84j3f$bdiSb z`R@O4lkaVHjo(I?IO_m@cRC|rMAcVKcs&MXi$6xsvv^9ggYhtBnn3%ep2{TM=-;k*w;SEi zQ-QUoU;Slk=+H^Cdt1>=TVPXZG6KzNVRi$-j+anaC%67g0@mLTOny{J4Q2U|H>TU$2vphfupE@sxuKq?a%BQj=C-PX;$5b7uI`TMMcP6Z} zOj=LZ+0J7IlW@MQT$1zU7bgKH*p}z8on3lG>mDgxdBw^PAde|iEt{#E5ZW8z(f5uC z27QN}9o&d&vO7@H=>ULDzq)qPkugfwUbn1Jth?8+>Fp%bH4djAeqv$9K9S4!X=Ph@ z3AG_c62vhbw^9ob^XwpFLuZ$4)jBYcx!G3b1brKuE{}DOzD*7LdM%0}(o)Ye?4JQc z=qY?}xcbTcyILhC(~ZxdBO^dPbP6P1B`xka>9A$pAKU9u`g& z|0&ZBj&tEEKbR6*@2+&{>i_7M6~iA43G(ZN>WS`h=-`Qxc?=3~T_KYa3Zp50CQ&Rm z>&ER7>eCq;^VMNO5$R!xt*4>}+^r8MKH@kxNx8>oS;fNMDfn?e&BJM@xXU)~drOth70Fece0OC)$%)H&Njm^BozpsUp~`YkAi24I?!b<_@ljUo;TYY8N2fJT|e22BSK$|JG3BA&%<+nBBD^KLA~wAl1v zY8CcEla$35oKB&#r z;9BSR>!wRbY>Zb^XMsm9d7KQz%)Y}FVNT$jU1cLatS7IrUL{kV>5=NN!F5@Q$FFYh zsCEi3XN|HdtgA&jHq0MtVb8IK-A+X}d;%v3WUXW4l8-MPE>-@Sh4l*@_EA3S*P$-~j}J6JS2jRRhCBnWCO3r+zR>lT#Bxo{== zHZG~!YjPpw&!U&AYr@5VY(T^gh$MfOdIHU-E@SVX!K#DY$>OzRze@B=9R`@(wW7B(bJl2M0qN45h|*_L_w{55e(5{HU{E#Wbg^Q}F z1Rl#(C9!5WRbQ>Ud}V)j{od)#J8ZqHmb6_;l$oJYvTJsDsK@=7Yw17y^79jHbl5mu zZJcMAg3jJ&I|aBD*2C3ooTiXuuti%w**g4}bO4_3!V0CH(4EO}iUr8!UEvtaK+$Wh z35~klfO&SDB~|e3983re`G;~2%ZL`}ePPWD8nM!ZxDK>|xi^wI&%n@;Nv?Evjbvs`DUG|gjT_a$|N?B!v8#SbQ zW1_mH7Akn*T7VFoEE5oxf$B+Sema!3emA1TXAuwf7JAhUqvec#b?1tt*=H9)0W8%02^`13&4&xn&RH3li;jKJav(* z3Uv*vet@PSjhCiia;q!&#bmYw&dQo&@Zbq=c+r~}2-MBJ(m7?M`8k60iL$nzPVfxA zb+T+n#zEi1!RfkKsTH^ETbH;&Cb+daKMf~p4dsBMsf!FTI970EVd4XfKF!(n)%BnH znxXX>V*mGj|9gQ293Jc^7aV1Qh5@Y3Dcl&ZBlT=W7g@vM*&7}fSAisY7N1M*%`95ILUmlWLc&V-WSM-qmo?7qyJw1Q zgeU+Fo6P97|Mmwr0#+>pwnC>gv{-9*=~CVRS6R4We62^~U9X@NlU&&xJewL}_BV`G z8&#QkZIZ-(uv=(nf!^ck%uWFvo>{fdNn#uCKq6wp46ZjEY<8G{B zDn}}r&l-xPGuuh)R!@pZF8$a`pEgEMeP?8WU#Dxszak*?Z~egvyV;+q6d*ao$j+F~ zxSw+I^yN*8vz@P{uMxv)R9QFfufBcxa)9TU2ro-xF{Xv}0W++BuAaaA+U6<-Y_BuQ z!O@vG*JsCa?LYe?o(?SVEg!6P@Pk0`Ha2VUI=^@XFoZAAv6H(BSWf|f z0*+klA_!o=XrrxNkaA;aPVDX=vuvWJgULGoXcx3_L$Spl7yfn6f$KVdNQmJ~sG}SV zl8jSL{#ySXk_9PLMqj`VRH_7;Sjq7= zu4n(<*EsBW(Y8PM-faCV9bp6Fw;q&{HmaqPm>io8G%HIBV;z3IVjCZc16TOM7_SH! zG7Stys1Zr_kW64ftIkc|x#2|f=|XTeV4^@SvJXVQ$V0}!!z~ZgojyJpXSp}tfc;$4{s_n(CO^ctx$$EUM`Z%zRuabOoxQ%S;KE8 zzF3_+7kQaif_3&RHTD>p%@lD|ex=k)c@=IzR&aC=ehH_XZxLf zKljedTdec-1lMb8ClWitnq3l!L)T3tj+!jpMB<9(L}DxWEx0Yb9qtSthr7Xd;NEca z`H92`SPM6Y&2UechTFrl;D+!TDEGI*2tEn7fghN9!^6C~8jeK29?IV?SPM^s>%;rt zX7CZX6MPBEzmH)R+;xHH!SF!TIXD5{2piz*a0IMgm`DtVQ{fJ9Hk<@I;lA)HSPh?n zqv6_zClXu0v2ZKc0C$H+8c%|isIP=dmtR1o$A?hv);l7R7zMY3+rep2>9ZJ)g)8A0 zcpa3#FG0m;*pXh|SSa~NLz$my`Zq(R$8X^N@Es_5doD^O#=#??!f`fK{4a+jdEyUn z2RP}dL}FvO08WE#a4P&Rtb=btrGIju?{qYl<=h4~2^V z1#mok2r9ikG4GqVVH*EF()WL1g?}y6Iv!UYkBX|IO-_+G@UOx?G z?=q--eAxI;sPI&$eYsu&CFgXw8@va~{;N>o*s48|mj+ z)z^28>-7)^)H_0zn=z(71nz-)3ET#r3RS)@fvT@RgzLgbjZeW!)X&3_@KZRdg69nR zh=+&vQa*8T;%SM*_3)K1A%DF@;+*pm36eT->jjC#pWqG``f|JOH+(rC1Bau31eE`6 za3^>Q+!I~~RbKChRq(G+_IJL>w?r_zIkfdf26;Ic$Oo&s8vjPrz#U9+bSDFZ2Dv z6sYhY0adL;P>zYo&ao7OLHR8A|@U zP~~XtE4)A3La8Uf9pE8Q;qHL@!mk>QthwDVB z{J0wK1s{fz|5xL#-}d314V9kVQ03|ZQ$GMz-u?nd!>zAMBsPK#a2jlaO79Ec5%3MD zcu)O~FE`7f()}u^`1}e^foosw>vcVp+%G`o>n(5sd z6jXXteAlPP1lWkW3(EXJZOfpG8d z`*?Lg<;NvZ>G4ab{$}UveSXe|GCvuv2XBN5$L(+`d7F?(lDBzWt-Vp6&w)PGY>NCqnsG3zdKK;r8%oxGfxjYS+FBmH*#|Di=S7DsO*< z3g5`bd^^$rcSYR}72Y%8F7SM)aNh>2;KNY)`vFvbjC|a;UrV6;?}kd}GvJ=^V&l)C z%J-k(HgJO{e7T6A)U%<&mxgk88Qc=y4|jym!`T*gCpV9P~m$FZUSG2O5eXi#dnjZeEAv$ zC9fH71bd;<^F-6X94fzlY5zh(!{edy=Pao7x)I9%2chh}2qo`BI0A0^toNtVI1Va(>r6clDt<>p`FDcp zUj*gfHD>-JsC;_{%K!I`BcAi}Cqnr<9jZM{L6xu5q4N0#xGj7N%D=bZHgMSUzP#)T zRh|xn@@E#5`=zEn*LWS2oCl%YzXBEize9z8qZfR8xECCYx&tboz6rO3*F)zX%Kj^G z0{jGyhWowf>unoUxG#VT*IiKVe+jpSufrYSzoF83yO%uoF*X<%!O55(2USjQg7W`K zsCxecMWWc)8P|)XQKJo@@LG+#B_qP~~cy-}!!I zPbj%bxIL_g%7-OT?Oqlt{3k)B>p3uj--XKehoIu~uBk`--jDZd;AHf_4CVe|xGQ`C zDqR19YNz&k)#pbul)s&DXSfRP1TQxJ2>t@~vry@A#cN*P51`7`vrzf_CX{)_AAI_6 z4XaTf3hUrWQ1QG6%AXhEc=$0?`tS3)k9QqZy3B^M-v;-9C&NAARd6@>i0QurBh*{| z(Q`bM{lnmn@OUWyE;QZ_70##ODEMb6dt1FhnSlGkdGM=H<@!~qcIiW?eE0;aUTym) zpH5?-%HbTS@O40ypL3wnt zD!G?90ybV9}?eYv*h5C4?`uJ_A_}>dvUO$2g|5ktXpU*QPUFGA(RdvI$w>?5Dv5mfuTpYc#A z|GSN6L*>);P~rO(+y?#)s=jRUcVBP!gG!$Tumi3%{a1_?|M2nL4epEi9H{u50u|oN zq0;3csQUFf+z@W^u}}Z)q0(~{oB*4k()&!P@ZJw6!9T#gVf0U*F0-J@&tkYg`~uty z-UVgvb$Bq`;$J>J7sJg_p9ROm%b@H%1r?r8;V`)2zkPc=0xCVGL6w_Da1QK&D%U@O z%Aa4ro#69O_CA90XZR;RKX!zhq8e^M1_;LE8GfoJ(S!d;4ZKqO8(c){BEfF^pvUBuBdSJ zZd<7OFcxkAr^B&uE{x#kq5S(cR5|$>RQz6pDi52jQNzL#5kvsBj(wRsOo6%3~i?{+wbw2dcbZ0+k=%G5!F`-}|BDKL-`B zx1qwf&PKjIYzY;fu~7Omq1-KmDlf-EwYy)3^8Ze#_T~Yo{CpWU!+$`vbF(-0;mbkU z`<(G2DF1JUiq|iopLzRP>a7Q=~Dm}ZQ%GhQcSopntb&T~1gLaqH1j1;^>-Ppg=fQh_z09gn{DRh z?*yezLZ#m%xGijiif;>)+yUdc#_vGo_gzr&d(_k~L&NnQe-1}bx8&H1^ zD*YdXvj2Oi_`U~~9u-^obgG1k$5dk*l=&B-!hJ1NJADUKIy?!HH+9F#wwLd9#d?Y#UkP;zD%(@^!|3sCj&3R6D-Ee^06Mu z-@~EG<0;0kLbYdCLDipoO#KHaITbtja=klLJw5;`{~L@=roRL#e#@ZJ?*yp!^a3dR zk3iQx8Q(UpwWHVH1}dD@Q0Xwm)Q7^gQKzBWzfP!lWTDGXSdIE#7{PbUeAAsO+&p}L zsBjzy$HJ>&Eqop-T-)qikvOe_F(*_xzjha&?mvNw|F5Ca`EO9}cZ_^^=R(Es2lJuI<;n0McoAG5J`a^1zk`zhK2*8g zWVZ@8F0F-XR|jAt{0>z7{sL#h7CqRJyNM>BBz`%HGjX@ytQB+h; zAbcDu9vkjc;nuqvp~88V@c}pqbz+Q9#{;4AI|G$(UxbS1ZBTOl2^F3L_Vw(A`=P!D zs{H&0DnGUu>+@qeR5>{b%HM0D%K2+>AGql_@Bcw?KI-F*k3;#l$M_1jFWv$b&l{oA z6x1MweRCq6fo4}tzwd22n8^C`+)%&$Ny}e4P_ID0cxO<`E zcL9`tw?nmOKZ9x~ABFPwX{h#X?PGm^v?ElzSq&wBCRDjx26u-S!U*1F<}VpPg$nO( z%e;SwK)GKC_k_p82KX&F8U7JQaL+E^ugri-r}I2o>Jvpz`~lP~jMx@#Sj~l)dAi z>gQJ=#USwrRC@g$s{Q%|D!$wG`f@e}YMgK+R63pv$H421FBvyJt|Bo7{mD@6!pZO; zcq?2CKY)k8L$f|ymqPU?4?wjOA3(|9Ip=vWRCt#|)w>Izhtw*KHL!X zc~JRu2~>Lj9v%V5_j~gG_5TzoIk!T!SAT>`ztID}{4Rm&N6&`J=PRMww_Bm|?@v(e!4}8+ z{iwYXO@hPV(NOLEQmA@( z8r%t90XK(tL*?HSQ2p2zSNQPFfGQ`QQ04TiP~+SmL)F`dpu+nOR6efvE#L2qhf`1= z2UY%Vftr^;XzJIY2`YVFfy#$}L;1VecYHfF9!fn2D&MkD z?aKL3`Seq$`t=-C`u+(J$f^#2@GyL<&yzTE*8pU0uvjrX9^ zWw-D7_|1Zf*9s{6XTUAt6;R>54NC44a69-HsPr9ntxt!MQ1O`x75_!1{ydcZi(v$R z0G0mFnEnS)<#OZeJa>W0mwioL57jO%fGQ84H~pKS(*I|$5&i}$JR`sF{ckXKLB;E9 zP~pD{s$IDcD*kUmg?GgDKAbgB>9hc<-mNtCIZ);MCMfs!LzTO?q003xH~9RW1tZj5 zral`g{jP^f_lKau`!Q7h*5ByM$w^S@cQ#b|Uv28UVJ+%sq00A&o6H>?i~1zEDZCjf z{`W$;|1DHHe*_het#0<*%Q(fj05)UZ1(nYCK$X+CU<5b1#jBIX*--Vc8!A07F#Z5) zJo;;>al>}E`tmamDtv8F>D>pFUY9|I^AV_gd=;v_`2?!|Z+M#z?{uj0eH5GvPloGN zP>!M6rDuNN%kMv-?Cp8GPnSlxAL><5{@nsqo_`D1gC9Wo`!Q5JM%>}^cRW;mYlN!5 z^P$XJq1uJdL*@I`Q2F;9l>9Az=)-pqJP7rb}1~?4f0~M}^VFX`+3V+2 zw_gioz7XyYd!g#lcj4ObSvV2C2xr2r?)B-q7^)rWgK~d5RC-nJFHYoXHV2&npe9E{*sO#c?Bbb1)hfd7VSUmG6qMq@gFbwRLzSBqQ2u@nsyj~oqEUrsaq>!Hfa%TVKpe;cbF z^W~-)D!%7I#q(+?{~m_Q@4rK({|=9PIR`+g4~I(MDd=N`)69iH%< z4pp9xgG!IHpz84tq2&Aq9uL?4l~2$ztcN#3mD>-EBcJy5>PR>R z{U1X4_YbIgzUebQKPJNsQMW_2?^&quoCuX3cS5y;Ps4@qk5KK-LC^YnH4~~_9|e`p zXF|1GS3{-4T~P6T8LGa$2ls=UKj-5&!pSZUWF<*n>_F1KLJYaaZvev zK2*891xo&FP~~Ku7rgtiQ0?PlsQg+1RZlK~D%TH~`6s5{_C;S`=Rx_?1(goxLdE-9 zsC>8;Du3RAlDGX!zFgEp`F|`_etrWgeO`qJ!Oec-`}28l80y7P<{fZjcs^ABdL>l4 z-wc(n_d%uG-=OM4^~;{~pwg!gj)Rv#*?R)29a!(TzMM2bx$B2&S1*D}ug9R${T-c3J@>D3RF?&m@Ib1hVS9)_~_5>!6F z3)hDm|K69+5m4rPL&-VF)JHd*Fx2od!WMkGF18dGnCv9q2jytAASF@6;yfO1InKyl)WiX`8wCw36=g|fJ&ds zq3YT7Q1N&Y%KcxU(s`{ne0aBm%CG5gBe()8T~CEdr%T{b@D8YQyVak(oQY6!4uOhK z3siYI1xn8OP~rF%RJz;<*M=`a#rqYg^7s~1dTsP)zkaeCR6VMKNjMKGUrvIG_f=5+ z%B@iT{SvC)zXBz9_?y1{+#1UMu2AyFK*ejinI8@1ea6OoUY9E$D`F{;;gzrL? z=SlDQa2y3yA2Lws`8g{N1)34U(9^_zj%LUK7 zI#jtzeCW&BXsGhP0LuJysCx4)sPgpyRJy$YBltFyy-oh=^{b%TkprR9Z5fpNFGA(d zbx`hq0TrGXq4Hyczxi|+2W5UFj9@oZIXed`K37A<_W`JM`ZHAfKkOqP{sUozx)my2 zPc`**Q04xYa0>iARDIq3@1B#OCc9;mx5#AN~m~U2bC^&8=p6R2-Plc`mqn^9#G+#1m*4ssP>`@s@(NL<3st{ z5WWl*@9qET&Fi4*Q5LHF+y$q>58-q;@n7D*lVJtw-Q)>Zmb(XyADa5+wP=H7fonL= z;kqC5ozY(ly;WxZb#oK!)S%Z(%k$gV-`!;Q8PQ5C#cZyr zA4L5S_m$j7aBprhZs+++$hiUaeLU-Wm7A)Y_%V8iV|FIb7r|wye~#I&P%{)r{0_b6 z;mzoM3YWpx(TiU%nEDdqF4%h!3p>Q@RiJma?wDQ*zdnz>cJ3DR2h8kC=zo{{ee`p1 zBpeC#zS*hpVB~Os(_O3h?U$NsJbYHSnXQjqT@RzyTKhwAf!US*Zam+{y_EY;sH-vG zj9csVm%?dgcOUo*%*Vi=p+5ujl$lA+Z@5RIpGN;txGg*a?f`F*h1hi~dQ&kw1bzZ_ zb@IG|Th|}C=W*}KeJ8iBP0ikQ@HW(Ea{nym|0C#sje8n0T46J0U9c55 zQy+o)S?qk#+>U{FnVaiOhA9*Gquv3v z4ubb_ABO%J+-dCHi26D1AM>m$&GYW?38-r$?5)Ecu4~Xg%M?F`Q_Ws8cK(KX0{jSm z8=jBMCNn<~HQi9+EVvimrH&EffEo_}M0o&_&P??!K&xBwoB-ksQa3o>O%eBaD&LH#6l-$ea) z(+il0y;D()znM0JJce6y5nbnEcRc$0aI^G~zYa4u z=b6r0F*9i$VX`N|gX~%FQ*Ug~@8Eu4?%}Av4%dP&n%ODHn#27h`m^CQ^J5FlKR_>j zy^8sM=59xxb&Y_Ja9@x9b7p_fn7bW$z815IF}+&sSDN~6WE_I}T~pr(Z$drQ{P`T} z7kFmMoWC+W&qcM;+`M9DGtm30x!V$c9{ml_`!)79hL@Nbj|qm@iIY&z!tD3b;QBr4 z4*!_gfagB5zn$?T?EaHm*XMA*ujwaYwbypPRoM9v=JjUx9?XA)$>XTEKwo3x&A3&t72^;1Dfd?}zuWwf(XUb8Wip?Jk4TeiOP*^?meiMW-y2g)ZxnJ`(bM?& zSnl4K`B^-_ij4JQdUCVW{Q5F%K|RCFXIYr)jSDavh1mo-;(CqyLDb*H-R0ajV()qQ zA@`-`=C7E)!2Je#w_^V=IpjJG^{Lzgn2qI5=;rF=zS7)EeH?alEyH|&^uK57S*U-+ zbGJ869BJ-^xDV>2xw(wzHhVr6PQknrd%xrUi@BG$Z}41$nXcK~UqJo1 zQxR6&UB>-u%(p}TQ1sX1xtDuG)K6h{35;LEP#T|Oc5}BMdKdEiIamc}n%&({Z-$yBFn5iFvv@iQR+w8E9M65b+1Ze1&8x5B{yBEq zk+lJ4JMz2)-iLaj*}V!rWY1Vn{46F@>hECpMDCZcqdB&&y}5sm-cQZl1w7BjT?6{N zz{T8}*Xeo_vqkWWP}kmY?-D2HI&2L1iuH{lZO{hM3Yq3{H=zX#8o;$~;=&vCzj`30E0 z%)JP+ucCgM=d0o2Ci_`HbIo16{*a~1ki zcsx3$cP)Cl#&d6pdtI+^Z_D#_xc`9X4YBiz*&B^smRr|4+@I$;h1rwXKb`wQv*#@E z^A)rEl*#Twy$g1B<~{`T$m|~vf5H8I?h)Ky#B3Qn9Cyto?0L8q?#H437WxCGe<*qv zquz_V53^@r4zu}Yz6E;mYaEJqxI3`7(!wY6Yf-<*eId85$jrWi`^QkvMV*4uKABtB zZJ0fZ#=2%#dRLo&jp#M<{7d9*Z89&1Q?c^|W_Ow1%h=h*+&?7&T$^Hc3wk}6)p{+r zcD+4%$DsEw?(@yfr#$b8oyhEEO#dF#cVHH-U6GmP-UW?~;2*ia&HVs&t~YygFw61$ z1$Z@P_1wCyM&?9#9O^H_*SQLiPhdk@rm-{B%jpIHD{kzd$%zeHy zWljx`wC8}y*n1p1qfBFK-1hK%u=&3eyp#I`Q!h1pcbK33xWAHH*C*T^*!#1o_uzRx z_gl`C`5OAy^1K|q?cp29_=lN&8?zs9e+Bgha4ftP^H;H}YdX(g=J_)CC9jqEfafcC zejA4CG3<2Wej4|8f+qX}cJ{=q3+{~iUG4+0vkvOt!ZT3+m3uOG>GeM52PhoFhc^#& zw`966&X`Gi3xoc5V`ndjduCKGF zBkIj&I>Wq;vt76Fgu^mn(Uvk@-((%tEvK4Of~+}_qqTiQQ2 zr(63vGd)pXCTdQ1$WGLq>g^@0&g%T7>8QRli=|9uJd$Ss%KBqC4OkYH?YK!`Nh+`Xmv}f{GNg9yQF1z~vn89NC_CFB=B~`d3Pe$S=VYSg)Gil4aw^2NJ=5>&6qbZZ0#EvuP#NY6D0Z=C{D#Xu9fl4Zq(<>L`fXT zpIDhJvZ>7N>`ry0B~}ehWiDS&;*AhSv<_+^D%(mM#p)=h=2FosePMX>iw*PPY~EbB&yYZa4&@#8HtqF59D&^{8W3Cah~LK#fgv z=kW!ND4Lz_F42ji>0PM~y5zd9&W@hpc`3b_T&`2SVNG|6uA(PBc@ibCd(jftv#-cx zmo2W2I>$|%P#tx*X0qu;$#hry;uDfx=~c;=^oi9`Z*OZgMT`zQFO=e)oECSd0 zbFJCV-oC|oGZ%`yia@60;f|t)p1xvD3pT@mWl_|qE~X?3#nvTlkPPoE?on|n%val8 zbmd1dLDvsnf=X0~@)0SOAotEP?nDb@L$e$%Q#^>pYF)eWlM}(unn+0|(<@uM`rFdU zP`ql?IZTe~GwRgSD|<5xx4d5PS#G4AOm%hTosodvE}HofBaQE9YDmFhPbP^v)!)?@ z{H1VB>q@8SDZM^ky6^-UMQ+RaJGX~%iG@=^FAP}CX)-x5;D-_+VFKs(XL}-g?%q^3 z$3W3pQeWU5RwnnI$N-7%SoSL?j#gJzjH;GYj<(lVvr$DBYZ~Yv>4IHqdXvGW!HQ-G z4=gPbX!%}YWG-5e>guP&<<)*nEXV&RBu9H|M4s+xD+&D6G)W{+iQsCCWW$vSjp-Ra zIIERy!xHFf(CIGfJeOt+&N!JQDU*x}-I&{3;g?`UZIr5DkW;5_Ic`G_Y8ck_`O$AWYi^Y3NqHRA z=uuCTqb3G1WOmOo3Q|Y9C!J-|!O&XeLl(>_g*>X^$Gb8A+$5p1rQd-J zXuJbwpQ7cRC}l_wxu*5aL_|=}U7anAW^j;9VxupU=}LM@rlN-X3g=RDH`CoMILR{p z&nDYl>tEwAIhu=BwzDmruc~CDGb(mu-Z%**zI3#<7JL{;X8T=1vSa|wOEW8?6-ybb z`2LaTw4@`fnGYH(4Ma5#`5bHRO}BQo4@9Xh=94`ndsIJbmK#syCn6 z<=W+B5{IAFD34}Z-`dA?(t4PJmz^4OkB^1UcRHc^M9zGV@nP6o;&8vua=70hhi&OD z79C>lqUexxx;J8dpx0HqT&Oda%Ek57S3F<8N^7b)ATeUOH^Ul&a;;S%AImxLb(>7q zd@Tg(xc<&`Uv-o`E*^u0jJ6_Y(luZy#F$^R@%-S-S=VsP%EP#^ktP??=vF}(H`W|d z!CNx9G+rz(c)^fWnguIvHdrv{XNGR~umh(a?-qt(ZB&0DnC%*wkgZpx!rS3`d_$lYw*xe>Gm(6Mqtif39i*ee)j zT8^cf`BLnAf_y7tfoMh;o~(I)XYLLw%Ily|ugoFqSQA8>PeK6@7WZf;lVW zDhxbnr-~9iR`M4h&PrAA-m~5>uegK@^HQ^DflpaT!r&qAULm2x;-?>O3^A%`!M$4X z|Fpw5?^|(B8|hlIc!Oo*>yoA}-(s2THe9=wK%?gPz`?gf?S=7zh5+g+H45qMG3RNV zufAPM^^|Fv+Hsc3l@xKMTe)JM9~_yVOL4q3-PM~<=kQR-DyH08^|Q4kbGIzmE8-!Y zY7F(8baoq;?WFu$xF?E+|sviReO-+y5Q38sib#`sO~x;NzB?iSK3&(#;Yc~;dFdN90e0|-G^&+h~_+R?Axj!h4RMwSgtSI zPotCXKYhlSpyddnGOF_^%9vIOk= z-ualQYA>yqckMMwp-gb^i&jThrp5H6HKnF#$c|39+`!*2&fC_Cx9X)2;ch5Lt~k`S zv}DuEZBj=m>GJa|zb%sA=Lp*DayUJk9fn}JwSzF5oJu2y!2)WYyXLg5blsoxu0+6^ zJDjJ%wKiB-k0A(^K9~!9?;pZxx{Dg=DpoF*?`pf`apmq~Cajb-*O(DP_8N$+)~bq( zR8I(Z|~0eZVvO7xl~r?F!w-@| z^H?xpXfk+lKgXt6av>5{Xd+g0)oI%(O#d)u&7Dfhu$`sGXyTZtb!jS_Y9+%Y<3BBz z_&QVJ9@MgjaJ!9wShKEhS_4orUM#q9&44rQ@mqC7Sv?qI9c7wJDc}8t5p7F*o0@)` z`>`$6&*a#Tl~q5r2g5MJ_btrM&9=fax6nwG6&BiT7KHo&-^(j6Y%0Q9I(rzJCsW!h z>tp2A&ysqLR0OV>(YGG802C8f&D=Jv0^%m?xyXx9=rpn{8!XFV32e!bquy;wYfBbP zzxzi{$D@lg=KcA-jiPem6w@+2G{KD7^LAo+$J#CXtG33g;Hg8gjwYRC(#CMF=$e-4 z9f-O!ZJq6%>9&1Rt!`-A*GV7Um+EFUpU`P&>w_$T$09Jp!d)^fW|s^~-J)Krq?TBq z#VL_RK>S#+ON-wW4L4^g=NcmdWF(I?_qa+2aBQMXzV35R^ zyh65y(e<7oz^eURA!z+QT56$%D7s>zf&lGpn$?zpSSVeKG$$|5TQ8kt)Mwn@sLxTq zb?Vctd|+%<*`#v`+t!(rn6iyTtRAukm@E#R1RNd{;Ig!&Wex&* z2HZjkePlKnCY||{JrdN3AUB+2GlsRg8s8&ZM@tL~Epmpz4K2C)Hdo*acHKb|33HQX zPL(*Lf{c7ZHM0)Kv_baG3JK(e6~e&kIWfxTUq`A}bMUUHhVfL1%<0m{0$pmlZ$+AH zwwBwk`Fke>jEjye)s|F)&-z5RL=H3DHdk%CQXHoUt$#lYgqg6*WA1`5&L+{u>qydI zdFr&)BNT7O=Dl_zPGFU5X{x7#nk*@+)Ri6EpEIE+Mm3#1t=Y-mw|w%IeNZ>&ZHMl* z$lns*6nUD(bgtmz^6u3C+`n0~>#Cy#v+Gy`L zf)i?2?Y$~_qRa9%NrY)GEh9qX0-^v>OhZOmS55a76IjRq3s+ZnibAPT=Ks)l<+(!e zANx$i|Mz`fgE*5Hi&$=0Y$cCn)E@dQ<%H9=5*V~kT$6-fhzyMyQ*KsP7;v>^7%OV% zkY34@$4g@9p;}|fZF@{E!5Ot_$7zkqyJ}Z)#S$#K*k+Uq7c@71Ei2HvguxQr*4Lme#^kYR z#jIAHaXg~(t%>2I%t8<6;_DJ)P&~6{RbsSY?siTkgG=cd^Q2uHulW%ITlAgTT(l-7 zF=ABjP65!R6l1aQA(cXaUsk6Ou>&52Bpm$x8hew4+_9gk#rM|Fsiq~Q;@eN=~p^2 z2;;Bf3<&{P6N!=LD$Qno1jd%*f)*?|!zw){!Y39p(c{xcNbQMhV zp(`INFRUctDc&>k?m`|9m4$w!I!J;`AO^$nMjSsBYX37cOZ zU^N+UBp|K!Tx%=owjifh%Pd1&rD0L?qRCEMx?2nTg6`A(6799$#sv!r=9<-}3=Gp(V6DhTzS4v~tc z{TZG*$?V>92yjiLMfna;y#p@7+Th^L0rP(r?VIZWiuN_b8WR$x6n7tkV>9F$JH8LO zp=e?XYm}@g+QuTiF7x}?a;2g%g7v?>;Kv%GHi7-%pmfFLm4N2loW3Dv-(pxy}Zss&!a04Pb z91URINXCm*r_(D@y&SM)Cnhc}1f;0rh;r_HB(F)uq~v{aeVD{8vgR$hI3Kehu3X4M zV`!EoW~ECW4r1g5_;emhj3O3u&W5gA3k?TKyyIBvhEurtuq&0)E7Pt0{?!@_lG~4{ zFA)|NS3_8WC)pxl3Q=52v!vuQ{aR0tUya)K?(SR}nVB0myO*5WI&&s^KuMC5fcAdU zB%iZRP6&olR>nhyf_(`0_M{uQCOcfL@;i36TAj_X$dH`jl7@sYS#J(vs_;3RTA|5G_bArl2BPNqbyJ&NrBJ9`%q>U@ zU65FAaxXpPW0kL0^$Y8ork8c8!;qRMl>{R1vTVuq+fS~{ROLn~P3F4*`1hdV;zDG~ zi3zVw*;qb|gp*mxa(j4%i0COUE4Ia_qs&^ZDoK*2c!*-s;!;8gK2zF|BjweNke4e2 zVZ0lQN+ATFF*5FyfHGs;azk59&s^(i8|m@EE%`H3q6Qy5h^499_g7hS=b+qxxJ8cq zo_g)n>GgB!W;ev55l&(&Yi;8_R209V&b-lFsf2V(SUiNav+JhKY@FjomJt@Wt2wAy zm#kwY%bJ|BOPd{QjO`n`X@6*SOu=K9 z2{VH=kSDj+ZMsRcZ%FgY5REd-#}Ce_v)~b#x4eBt}+~nV)qX)79VF*(Mjf{3k5!)o;43 z!=xmakJHn!yc0cg4dju|_?_yL-Q)_T$>38?7N+UGmfA>7In>Q5WV#iiqO(q!uKw;G zms7{Pv@O(;z>!lJw=&n_SpGueSzjDetKlMELT^NVCu?6lB@15_?>= zbEi*lZkX>q@wLu$sCXKK;ao4xtAyLymIc@L5?uypRGV_|ABMd20z=(%<(t>weV|;0 zv-+ahvemm+@(+c_cD z1vYl{P;_Y0oqheZ{e_*LoFw(6)FllX8&LS1h>0*8ZbZH`{@O?N8&R zK>XVy@zC3|KOQ=*M+d%LK&Md&`9y?!Y5cGrj)_cRCZn&M_|WpcKS#(p`zHFa?-0r4 z#nrP68&2Dn@m^X!2n~9BZWtdl88)AzdBb#U*S@QwmpS!joqJs_G*zWC2~ERFrl&eA zmT@0ZAwH9IV0t>enmgZGc+TljyRU(z(xRfvWs?tO{%9`el|$+95p`$sXJ zij}Y=nNMMNgu9VsrFHN}Z#7RG*_m6C>+9|tNjSW;lH=4x!O1J^ko9Wqex{vZL1lI- zuacBY3Ja60H0d}<89Uy}Z2!W28S_G*-I3?nsgBN8SxfL{e`il;cYimp8|Rxk`^pX$ zyj(u?k?!udQfXs@d{V0<&cXfEekU=!i5z@XN#fZ~o4dp2WsjPd5%C{5by0TtZT{Mc z_c@HGeE9UWpZRq&EVNRQ^R{{)mKq8PXW2ra%w}l0ZBe4gCLYXf-iIcuplhLs!`d1zX_>Zx5f!OJ-F=gytwO;_-W_OM}UJ6-!etUm2OI$^J>&+8z} z;oQFpX>q=LU*}~rU6~Hv$uHMFcq=*zKt$Nd^ug%w30qi7Db2>ZsP6rAyHT5aV_HFP zwo#8Sh;Cg{hm`&Ir}FPRIE((9N9G_mdbE4%Bz((isBmk`MQyf!^MY__6~c9j8>-w%?U;g~i%t z=f?Gr(xl#cC-gWjt%3tJHq>hpHKk>fvc=enuxnjb*9NF8Q%2pvMORFNiy_;BAzj!w zN*^ODE-Qmw_@QgO6HVFJMME7%VWk5Yl6HP7KQS+9K%$~cZO1;YWmF!OSS@W(aJir} z+b3URLgp}lstUg z*sw&9jQBc_dkJ^KcwQ>uXs&w~*fpNc;*tsDo!w-lcQbm~VBi&Stw)r#Z=C@>d+(}fG z!=;u-7j-Un&F`YtA^{c~okZ2)QrBJDC+wE$q_%sj!QSR{ncZIGoIa+94?2luLzvzaTh>Aj=|g_2I0=4e$^)!IIqZ4X`mZ1K_Q zFLI^>P)vzg+o13(D4bH&$4)dp;5aBL>ejDX`?KyHN2^8o%^??%}yZ6HZ`PRKCRmjmKOKiLu5X9L~AttQoo$n+a zIK#}m_55ktk`NrXD3)hQeaND9S;RLu)$0eZY@`(PDyx9ua*+~P%M3nE-63P`Rq zE29_O6ty774SP%cFFMdhnpusAujs`5UAZV$WRmPY@(Q+nbV1dkOcJ|KFzP)AH%LZfi+P&`SsK$Yo60}~T7fu;sGX<}5%au`W zt(Ne43Dwk-O<7afHn|4de8tV)J@%6#jnDhT_+0Iog72x-n7V8SuU~3Wgw-{_h=ry; zL#ekX+-oAf&X)P2X*cgUXwA8U?+o>5L_W=4NKE04R=2faM*_uG(DzYdxytKL18b<8 zcU82{>7AycIq5#mr87Lwq}trzd3L6)pKVaN>(#DX%3i^A`M_7{{40+G3{F!$Iohjk zl_mO9E9!l zdQqx{6?WI|#w$d_tm$DBNI@LRv8xTXtLBbTP(>yy*H}K)`mS#wT*mm2xJBAU5{b>l zDy1BU*I1a?>Wc}gDdtu!Cnq+T3%CV)t0EHM7PI}EwJuu~I=6D9j=+7*K`k{!i$xB4 zgz&N|E6;k9ce#sABLkBB8$T*16r%ioiQ7rTbJl9zxl(1AK4zHKf-Qp|O0`?|w7n>z zKnT3V!kfyj6OBu)j#8tQ*6a^3Q>0#LBIM_lZtX>D6uK%a)g<^Yyi$y5{k3F^Rqa&y z?!Gh`z2I0fDi7vRKLr&p%^95V@;_7cBE)=uR?)4_;m!}Roc*x8Q97iOVSI6eXFfm8 zDN1?wUl0*r*jR($C@8jK@1B*3iU=s-_=2E*t(V+A&yf)?$f}rGdOWa zW*XMQaKxp}Xt#_I+efKmWaGY|r%j1LQso%|51ZIScoyp9$U+d!H@DX^v~T7xh?Q^d z)n~sdlC&?xA}b!X&`EkzxzTq_f~dAMpS$MM=jGj)sT}E(IVI-F6YF3i`}dFElKelhgu}we;KCqh5NX8eSJx9SkX*XF-CTS*dCfn94qVG z>5y1j7l*BIc4V;Yeq7r(bn~Gsb{+qOcd6exwHi*S6r9Hc9!x{dl}d>1L9z81&PvB6 zgei+j7#s!n@iCh9WPU+gK?x#UgC9QKkhc-<{uCt6F7aI*Qd1uiWBOVWE4@jf`dAtp z7vivitlmyT3364rE@^u6m)+Ci9mmLh`ds4T-EByq{Ei~dS1h7>_GY`=r{^+F%%HQ9 z>CbgJk&9|ww^XZORM)257iFqzd;427SIeQp2&Y32ZlqFO+s=3SrKBUSuH~hH>e?n} zVKH)txI!|P2G?y_jrAvz!`M}wu-`XKMSS&_ZdhHUEod^8q}1}2etl(}&Mg%+AJN>z zmT=M8wM68PJ99S3r=nZH$Y;IlZNq3}J}DS>9bK!OaG&Zg(jvX;Rwbvp$kEuk^8~dg z%brIoaqeCj(w|He-qz4g|DXba+||A@5fa3Y*vcl$;7`iLUvLNltmKrJ zFyA!-S~7OMec^Rf#mXhAz2u^9c+RZZ){`>I_2pHY6~sgxKh>R2&(`u4Q!%`{fEYDU zd0olTVNBVgL6T$FQ0q*oOUaU-kS|nB2IGAG)wOlrkD>uEl7=oE5;{}?aZT&$PATM@ z>oxzvkVPT{URA_KKCx0!zECiBBQdpxS#mY&kd!1bfMddKGe*7Htk?B@7vMIN{3t~! ztMBN!MG!xfQ_Jgx`j$|_oSw$>Jgf0y@<0~h3A?*nowAM_To|6Wv~#T)Ot zLJh5~oy%0WRj7LJn1*~2s$^K?JW&@ntg(}tzSK9{_kiVV`D&*@9%;h&ih4R|@~fMxTdKRNr&iB8F|_yjxZB|m7NeL( zb3n3(wFwRKhrV)AZL~jMhvIBuSUKVxGcJ{eJ_hWJp#Yer$( zoUb1Y{rEPN8we;Jd^cX2Db1>JtS;xf_m-Sq03G7Er5&^6BWk=PzC0aHj@iPyTa9A) zmo-B-jzZW_*L+IfXCJoYzgn;tmN!;+=F%U^jQ(3kE~$C>qn3(-eSgxQG4*k>qml0I zS&pUh#h`KtqxAG|TiE}IP3|;O1cr6fBnXf@}|#inqBA4ABNGp_0qmqjl4OZ>NJbtd@RLh_2*)b z(eQDknzdtCOYB@Z5*aE8u>s>T5~47(RO`Od$v4Xj5iO1>Yj*mgc|3uVJ>h8`Y`o1V%)p`_eT7xv7OW@@gmZ)_#>mlT@ znbM06X!XvPbQS6H?R>tT*2#{0yNS<}rRhMMJYkK4=kQz_%f#;f1H!JaFr5@(CMq=H3Q!{cKW0ZRbfiSL-zBVat?F_YRPE z#wlq&kL|8-O4aWhX;>B#&rM`(Ei&@EWrdm{e+ofHQc=2-*0Mlgb+O1$dPX+*Y6f{f zZGGF5a1*O3YCX?xJN+B9|&CgI-+;K`A$+T_6`>Wh3uZk&7XF=OMc1(osT@u#&li zy*--$W~c9sRpW;AwfsohAFXE7xOi6MVl+o}v(T$6p)$nUm%qXGo%PT}(~8Od!Ps{a z!qmOSH{KcphT>vAxFRAqv2TES%XsAsaTMGHZ}N`f@2~r^SD0J{N7J-e;SKSJOT(Hp z38oh{GR(>>?Ql8I{`8D?nbCxr=Yq{B>tE7TSpDqO|1}Rge6=yGasQW zV~yhUaQQ>x`>$NPX;(pj8Y=!Zj_+S*++XE6BnpBmIV z9M+q1=t&iT2s?dZ#kwPHkN(NAyPLg2Dk+*|u3NJ#T`CCeNURC59YddM`W&BXQ|m2x_XX?vPobb)u&nusgZtSeT_7XE}d;r@q}V-Q_@!@w0MM$ssBtX<3VxmFFU zO=EascUN{5p#-OgCq<)M+T9^i3b;D+*0k$yLXq=!`g{2A3JNSMa-;Q!cpR)5me8>a zZvC*4P}$0n9et>n23TW*Hm|MI8G3Tx$l(hpd|}(AYu0^++F9b*lLWgLT{+&-*RSLA zazmS=70Q$b*qu1@CmduF_LMl`mWr!&^xnNmN$U3U?c`3*in>E-WsX_9a0fyD54-q3 zicGKGB2hdCzh591iVy!5>5uuSL)1KrVL)zW zZk4&+oW*%5j%F&Y=;HL@4lQ$Xc#Vckp9k{)^Q9719qI2nM>{voZZ7R)D2Kv?rakrw zs}4`ay>{;OjZL~!i&zT>AVb96AVuEzILXMb*ID72ZN=bFw7MhE=s zqaAN7EGSqe$E9J-tt(I^Ia1}*HRO<&;emt_TIl$fS~Ua+qYM~feqXL{X>>_DoT+a7+rnpR^-BF&fN6sIX5@r<62N~wGC^W>!=x@TUuosu&{0HNFl80|? z_!h5V=<~}O!h*JMrc685oi)sz?gFDj+J)9BugbBDM3DV|vgynvjf3lymg+O(bTIx+ zO`jLOGny3TUH996s<`zv)n)!*f`jdfBOSPkAun#rd%cNj&5R!1JJm|yY=28jXKpF2 zI~|Naxkr<$4m`N(NM&2}`jxlA(1eX1bxCnM-JSf0DbjS9*eaS@+aQ8YpCkGDo}{@| ztCvuN?|$;#FsB=`j1BnP5Z7J~ccvV_<1Au7`+a#=#ahD?RpF(T!lqj9D0Kaw*1ENF z_dS2V-zFoD6m+?Cr#lb-M?`jME#-?H@DnW$_(|0fV{XbH3br=W3sfjLn_D_{c@EQR3^`Zh3CznmcuogL`q z7jjDdS&jTqa_MX-6aIwx_?+!$igSeT#><0 zg>xv={x(i9`}#MKsOw+J8o5ef(3v`|o_}%8Q1JWorDE6ThA&Gd)H~W+h^{9O>yoN! zQ|Uf(Oa1$!)J1pjE+nL@p?NEmq-7-k&{pV2h$b?p?Y+0(AEx-~Pdg}Ter2hxoKgOr z0-cs(0+G%-TWV%)<=jaa%9{P*v@3nyFT%(^iA_PBEIYoeVKF7fwLUp#z}H{Xyrsd$ zx(%}3yYm);f}vvI{CAEtIA=bxoOkZ}+1BY!^MAy|Y;IFSR5eZe{z~Lg2|vQ6BX@aqfQ+?0uag5w886)i|}OuIUIjq0mQ#%xl-d z>fan)fRr_H19GISzAGUG&zZuwZ?Qdo#O7c5{inEj&Z*)&V2nf5;Vzce3yr^|AI zuI9!4Rz*J3Pv@ujyEZxP=M=2J46vixZGFCd#lz~8Txh(kaer9u;Ey$UJ&f^(tMQ0s z9H9wY$ZxNqCdJx_SX#=eOmcnw@xozmEX7A_suwB@_SUsu5n>6%2Q27@1x?d!YFyCJ zl(!n}dfi|(=q_BM?b#)&?Gxo$e@|hs;?~18XrLpn!hn8F5#(DpqoQ3oltHk}IZb$P z7{OYLPgwMVd;Jk}qN-*;e2Hb~s6@Tqt5PBqR*ALV;ZjLerHpx~GD8^CbjMuVhn{>g zSnE<~mIxUC0ZCuh)5_LrQRB{Hl-@G$Zeib5b5(y72|p>nwov7QP4RUD&-|pT*mh{q z7%>+DME>Gb+cMz6dpJv`CS)HJtg z67TmHzW2jUbq5pcs>-%#GCexW-*HR*Eg@=U>>b`PEvjlLd=^rba8#nf59*rjG!!+x zA@;?Sgj+FSsV6@qX*hh|+@|^VZZLm(uGazm+|>VHxT^zh9u$k=Uu^&ivc=6K-nj2ILEAJBR?DBTtXcl>vLlT`;x}sys(NpdN@NQ2}^!57Po~?ku{=}Ux{(kpICFGdZaa@xE(j~p^5VA7)k;EXNa^Y z1wn%?ad3-;MC_33u6Vn3MLulemvh22Ek1Bt1KWPV#?5wzw#~!<8w`nh_;<~iUAno@ zkS6@cZ4%*qq{5I+nHIEFw)|ku<&7&~jjU4SSG*Z%X9p5!Q6SvcN%frTZ^_$8G&VFe zDCu-aBhpJkjPO>tZzwqvi@w#Kf_Wt~cxNHrmipm6QPS|xO~lGti;W?NwxmVZ4$`AU zmi--Re$76-evO9y&ZhX%U+WZKF0&c9Q>eQ-dJ>ImB(5N))OmiP#J8M{?(Z6vL9V|I zt)t4G4zSZOHfkwZ=XBiK(Ioq5Qy42#YgG5#f3A-!V>?XlLd&VNAla;o#}|!E zR<@3mXI|H>p{Q&OPv~EQRcMCjj|LmZyQ9IT@!seV-fCm;>B}vfEDNJ5x7;?Wng*nb z6F!+%9uJSI{1RCj#q6kxa@V29X1&9w*HYan`9{61+MYpwR#fHY1Wbq1S=2M4DmQ)L zk(a1#BBaftxe~0uIcAP$voJ+eU&W<1w2g`~QB`dEhx^{BYVdT8{=-JPN-#IW;9+HA zmiwD8>S~UeyW4hP+R1pDiM(4v#+kitp4B_}lcGhHxy1#&{+=?r{IeTN1Ho!I1?xT} z>E82H_)9lHtcXyG?AR{FWLDg%dtIO~gG3eDEzWZ<ZMGED*%ABk?lp&Fy5 z1Z{13UH5ShHw*DAu1=Sxfl)wsVbtQIFe(i0T||Y?2f@8#_SydTqzMGASx@1mR!*<< zxzB(}>WVD$HUi1_?AS=wi;lE1GH|V+LX}@==e(qj1h^#;o8!3rNM*CUZ_XgHvOl!+ z&YAryte@WbHrvUgsJedzZp#o8Iv9V@OW)J0s^nk1?R8_<_-Z`BGNBvQ=pOy`?eXXL;2=s(Oejy!iS;HlA$?28~c&pQe7iXDX){DyL6f$)yP z044b7rYSDD2-|ABEOqCl`5C30+gG@iFhfXT{>qG{FkDfQQAJA3)n}O8+}hSO!qz{g zEQ-!`Z(8ec9J1RuSC!WKF>@cvEgOY?Qcl6JDU1sVLjv_k>@{$6Y|zefDgFH3voABn zsuDwemDY8~lnS5ez8uP54Zw;d#VzZ5vTn4Z&%n7k!RW-i`AeoZ((LP#;CnO7Lp`Hm ze!llo`(9{2Mwzki+DeV+#u;_Gp{Z*Tiu>)=?@e2e95$x?F{S_c+nMw7U!@L%%S4fu z+vnk2Pta8b3pQQWn{CrCwN648>Y$2(SufIeb+f5~(PdNG<(GTGRLL_c;a+Dgv_-Mj z*0mzBu~do8GOea+*N_9LCguf-M9c@ZJB3YSig{C7|J=lkmY&=#?G7KTMFG`2XWCQC zA9f}tswLLPF-LH1WY|?@F`iDtPrmeBMaJ>|#0lxe2sq|yg|7-kdp8=kr}_@BQrO>23ju&oB3O6{!1p_Fnsay|1-( zjLwppWK!v*r;20Ot~JgsOejcE#Ko|Zsduw!HKIwWa19n+E15;?l;w+Lx;%^H`uNS# zI2tz~lZpkgaSqf`B0(h~8YfVf1;Q2;O-lHtit+^28fZvLL(6(LWcA}4`WdVenifIs z`^H{@;f3W{&R8bQ_OO#UO+rm%aF|r02OL^_K8sPuOijm7=QVBRWU-s*!{f^L(ymH9 z?3dvF8SL~=-qxOV2DHbRgrzMBVL+Qat`;n$dLK>L_Uo{c5>iZZP`*N;!J-iZi32Up*`p%Xx4g) zym9Imr(XZnsY3{Iri7Kt-Wyj9m2wnNumMPh?rD#P6!21INM4()Fo`uxr1hwpsBZFb z*M6$FyrF8{QVkesb`0 z-Hv3$Jg;T857_}s3u+{-1ZgibBSOE|B|8+9_-w1RvLz_nzVs;PLyW-Wor#6wB5C z6bEO^F@Xbd;?3i)@*t79(!O;A=Gl@5XKxJ|FmE@+T3o5$6HkU_H*^ArXos_mqy@AsTU)cqcZxqilUc@YK#m6b5P-+m_d;ETu@Z(Pm1 zl-~3R6CGafQTEOm@2Dii=|qF+c^@c?HeS#B5cQed82hymjZ#(9VWlArO>=`1`3+qp zAo6qA`=!iZe7Cfuc0TkV6jPU~<+O43DlmOD!pK34_Ba8bFGic^e>ZvM+HcXV-26Q` z11A7|YWDQ}*@YWq!mK8vjM+$ouL&66fCi#AQ(uYenW73RRfU`0Eyu3;gaG4%J`)aTI>rc77p_`+)=}| zPeN=LPCZk^9EA!Ty-sGhk%kfz%W)%kDg+!XcGzi#Jgm@TyjvjCz54nwj54k$fsp^o z-Q&1=N0|~e1wF<_j={dkVffHcR@0?_sq&$U0Rmk^#ht9IhBz9NwU$f|lO@$tg-dn> zpPDn;uC5ubG(p07?&P{(79HS5&FFLslY z^I!Gt)u@b~;RHKK<+)~dxM*04KwBw=$7uw)HCaPtCza_)ai+46F8AoyCJmgoNGr<7 z@#}%1oo~o@{MfluFZ`GVLgtyY2Xf1D&r2nN<~&HLul-?fBb|26%pL_Qr<25y7tBaM zOiyva5Q9CQo}b8DvYn@DYSR6qlFnFgV2}lyZDYo5dBvH;HhT@0)Y3^Khp{n784M-D?7hG@jy}`ynhUv zSJg1|1V8>LRBG1kWcu4+u`?LiV|fbU_BVze<@MuZXMTB%Qi1QxU-H zjY@iHeAN&YuQ$*g*ca1S(XzakqgNbmv6Yk>u2@u+`RhNtF{?XVpp+mPdDqhC;JvH@ z*SS=|8Qfq(o#(>4W3Rsc%8565eT~DVuoX>QnY$j6`YY`Ua2+$6HT$5@8PI|DQ#E~YOf;M-Q=E}A!X&0Kn00O}$!@dR$++@Qz z^D&r(vFo#AK@~nG1UP?<4B!@t5T07gp*+&lSV$HPUdA;B1kX&(=oUF{ibE_{avCeq zTLbMu1X(WudrwGj1g%Xu9sRbaVqevEG|^T27oB2#Ox1GpvzYP%J|v5|I}uxlBV0-5 zHgcxI#GI_35f-f3xRszuAOm|R^hf8TxLWu9cGcu99ZvKIHA7H$s?6Yc&S{01M` z?oOMpER*eyY%$F7BtU`jgGA0aa>yuu1GN;_#(-E1*VTUd@vRn-Dk~PdM6KX9VBAe8 z>Dt&(h~&{#;5@K;*_NcJ2ok2q@|)QmJzBYu@VBdx%ipkJV!ySFwTJVKKxt|!8W9@t zd%_d%HqeDYB+cc|84_^6-4@aNCVGAKzR}?^hp|TBen3BlU`x8K88Mt?RBK={CEd-6 zu@~*QME4y#xu)4L%Gl6a4=CV_1SNDKUo=2!#v7M(%bX-Jv?gf9wG_;L{98;;-9YVX z8o>1IlI~wnL+MFaVUJ;ORNu&dgdm9UY?=*_eT^@r$i)INgBSbNhQ<1ui=MeEWpviw z1fHxRP&PwOXM4zwy%$w!#2xSA3Bqi#Zz4T38fjuhdKA%t7=fvq4d*>1osqs01# zJp7Z>mn@#)dMIdgQ&WU>XckXgdMT`+`o?eTi^UtCJazhwb5x2fZGsr3W`CEwue{M2>HZKjtp6Z zg)lo4L5v(08Kwov0&|k~KjuYCm}2>EF#HH+MokI{9(}l9D-{(zUMK!4J-zkZaH@c0 zM_LDs7Ifm?S)Sjzo1~%2Q?3kf z=JO?pmyN}GVk)B;4sNJ6{_w-(OhYs)`Lp>(8RC_AG?8H~r;;ET8lw=Bv&x1r;*&os zzgtV`O%fc+0@lN*1Dd;*+=&|Dd=&==;-Xk$FN{TC#g*}!b}eY7_)vnsXYKJBiRAA- zwhK1Q*g%{-N#ut2xDA@-_)(7EewG-}m@Urayq7CqAdlPqvbFMHOzEZc^jOF-0i9rt z71E=pu`i{TE`M6WjO7wI<9MU$w-Mr+L#c+Bihd4}a%B6_QE|{1gIXeZ2`=-oUgjSW z&bw^_M@AX2to{g($G;OGBL)TDlaS8qfz6hRPD8_QuHg)2JbK}0$txPYj_NXO^wZZB z&~JRig{TavmD&5Hc=0|ZJPKa1G_E4^{s|Lt)UAQRCDakhWF**sjKR9SH8wLl`}P7| z4#^!1oQfJdUIc{YfAUAcP7Yi`;^MMu(&)~@Mev4_z!jH4442^JU~JG1^9MbD^jr|q za48sei?xk|NuDjXD~-nq+ajY5jew!`mu`9dNki1Imr6Q*lK290q^;nT+mCea1wijE zO=D9_!==-GfQ+ac@Bngd5h-zL$Mp2(QKMWo-)~%hhYVwp{mf`mpadByTPVE{Ojm`t z;1&^3QM5XgWlUtrD4zC5`4%1>?zT_$XkQjxbAu(d@`pEU@w0~+r!Cd_fH&uU&5LBK zj#{@Q%dj1?*T|%zekN0M6`g#b64lMi^~ysfK$1jc5PM5TBJP~3_T#|fwq-5Bfl^Oo z#VRtAKsE z{@|sTs=qbEQmDwZq9elmc|pCnF+D%+Np{oYbH4_6O_s&_+q{C^6J1XPmpc-qhowgb zlTS)ElZw+@KLXCW87hykA{CCmV}N~`#$6~?&N-G>AOS3gBflokc5m4CDT-rR(|o6W~3CrvoQ@tQpUpj(XpMmvk{&pC;o$Df~$FRt?@r zqUU1E49yNKCHbKDWyu3;BUayY{~c6suM&||inzsfE(Z^_YyLfMHkuH8<8H7UPag-K ztQ#bbF=nX9nEYJBd+gk)XP>2Jps!TbljkZ=G(TYqLg&lU76O^6(p*l$Opt>#;X9r- zL!Ko7He1|^#F-y|`Pi7ecJkW4#f@N^ts|Jk&xq`!%L?C}z(m-_L8l*6mm1l30>E$P zzoXeB9*9`9L{v$`WNJa?F^DFy1o%BxQgB4&hgvK4KX;(d!{=)c>m3LPvpTZC%v1&l ziuSpPy~uEOL*l|a(#w+f<=T0-*%mGx(4du-U9hH$Z#Zv!sQ zIVwDpr|Ka(A6l{{p9Xgeld!c#o$Ia)SE1vz)q356b!NKPb9vo8aXY(9>w)3DA zr3*Yw$7hPy$c;08b@oPaczj}da_l!)^?$nX_T0$Tsq06nbM^89o^8!@Q{%Y0omoKD z4pu)rxA4=M>5)1bjNVNO()t?y6LHIoK zi`P%S*gR7fRHx9!Hcx~*N)8n->XMK*n;~voz5T^YvM?3Tjy(J9$a6!dXUK0d(|nng zSBA4|_H+Kob3Y;YMQ@JmzbY2x*#kcrY77lM>a6Z`S9XieJjpFV`_tr*h zb#+%_&iMwhzeVxs(nfnzUp`yuthMN-zCT)R|4VzV)BfHUtLygYLF;~NrCZ!<-RiD% zcb2<5IV{yE3Ti&Q+ul$^yTw{}m9NF-)<$=^gT-K|__DjSTXa?6gU%g$@~GS0+G%fX zZtZm1#YXEMGtk^@-&$?2ZQ1*8T8k^44_d`?Ym2sTsm<-ptrmV>Lq*TKN{tRMiVs_N z=xU!j*<0_&N_%Ph{ePho%Pa5S?-c7hE9>uXZLZVX4?5ko*2>3gyQ?+`IS}acVRvJ- zwPh`|m`OTh79t-*!5G^nfRqi%Ze}VvY2bM-3btjO?}yEZ>()^b+v75h#z#?w7at282U_&^R4J^t+bYw zJ7qh!x>=`eLqGC0ESA_$tDXDp&E*`Ts_ro-lPuWU@>X|8ga0f+=-f#i-K+LOUi*tU zi1oZH^w&>Vt5|CnOWn<_?YnEOFt+aEM(ZOsJ_~23u)Cv)`=)cZkmsd#RExW-Y{ft4 zhmH~Nf6f(ymDMrF6khyWXLHL>oHww<5!)>`?{+qqTSa$qrM0=m1mA6~uCoyPci8-0 zx%Q@42Q&#^+sTNv7CRh@?pAx*rRr=mRmT2p@rSMMs_oFW#>rYQwHanwSXQ!Nxi>o< zjquCvs*YW2qtm-QO3=&nbk1UU5PfC@SpCMbKGpMf+4J0xX~D@z?lX+`L7 zDz(%CDc-i_(G=V1A5_-%rVb0`t(t}w3y+|YF>jw|O5mF7Y`cXab(iCgu8woV7Q%OC z#6NMH?7bR2rFD`z_tI|5mKkP2SWZ3vVzmu+T$jw-5AP1MsP{P_Ig(ii3)hx@E8F~? z+Zl4YQ>c-i(*2t1Td-W>JAL2Z+StAu5tg5$p0?tQ_N~uL$44yZo&_^JQz9dQ{5nBM z*dy(SE{CwCgYJi*XZ`wZ&U>w$4hs&-;M6`vy|hXC*Qqqcni|2mQ?!gQ>kjz(=j(f` zBOl&b$sg;{-PQa_QGCAAy45L)Z+ACZJ8NX>4xdCb4zI!|thGpf$elT(QbuqS>SZG!sF|Bf5E-fLc*`aO}p*CuomH?dD8%mA9r+kCAUJ$z+uy1BW$ z(Yd>Yn|*j^y-B}V8W@D|%Kqrd$O+WZ@e{iLXmfXExezYz8Ojp?@p=)Y{??{LxV`#G z3{iX>nW6X__DFq#R|-$+FcJjSq>TE>pA%>K@6o2lLJpnB*ACE)8G9TQ-E!skm_!lb zu*ghz`DpQ=UHoBr^KN%ztFzJFX~84JSFsDKEcrxNGU{%*aB1>?daVMwbUV?*Vn=Sx z81B7y;Yu@8ki;%s z18W6nGrB!rs`%Hf%}+WT>bn))H~GB=PsQTe2h6}nvWmUt z_Rq;lt`>5~1TVt>pLG{oJ1i~}u-3l2vAzoGSI)^DV`Sns77svShk-k?90S?9(|86| zVYF5{txZIL#r8e!MY-xrLp36yI;-pPq90Xara2)iAG5}6%eLOri=)PNv^F=}tBWgf zxA<)t7KKwBwopW|g-473+VX|#-V^VExKb>4SMPS$x;y{U;hQN&or8?s=NJ`-`Olul z-e|>lZg-aqf-{`yypOA;Kwik)4-+kU@DyyJH2!psbz)iX^q z(;Q~1_3LQdhVadR`kV0hZva|5xpasO?+DRmJ1Y)3(7OP6Am(wo(LS zE7=d(F@lKi2I5>UK#)6uK*4Wb(}(W=D*r6YvPm zeyy`=YaOo#n zBN9dNA4@Gi?N3A}jMnsW8mNF-n*I0;T%zd?K~eY4urQiJAq&p{kF)oG)P%oI9^ z!V3M}kK!4j@Al-!*+2(Z`*B$<1Uh8ZiihYg&@QkocBCUPeUA?LZmi{sKTTGS8tjDI zDb~vNV1-bLsmYc$t%Vo=gA?w)rbo=0M^I`o-pc`TAy3I%)1mo8^gLaTYn`zn-g6$L? zaR0^@9FU#BEuj!d(Q12h%LIsz-w#0T+PILn?WwSOYHQn-d>^*&Y{u2qb$WP^az}X| z%)Eqz;i$U1b2KMXkt)2JYS-vwe;T=if(|7Qs=ORn?8<8ZD-%d(nCBsgX|XFNvAg(x zwU?Qpw6)9fJLQHB^K}+@e=z|MFy5%_mG~oLJ`x7G+g-Zf-dIK#=cH8Wx_uw%ratj7 z=9@EbAvO-^@nDuCOScMfPRrQtUB+M1#^bklQtF1$al86=!CmR*GGlMdJ?O9EbS41R z4~t4P8GwBw8dX5C* z4nv#$uLPsAqa?I)nRYc|)wg}?)c#M@QM{|zhk(OPj5Dp6xYW?@+jRPE+}E49yjDI> z1x2?$?oAoeeg(zJwveNpE7Y#D3)Yu}AeURq;tFiJoGk1fMcNq6`9iZz_#yKf6+w$y>!cVGgkwoNPR*YCQ;mvx0(x3^mAHo06lJG#&J zEh0f?FO$^(fc|mJdn?&uc0mrEwP;Y;zK<0KF2t=cSU;P;0?Iqevs?Ml@s0K;CgY>% zkR4}7OlGTC?5?!i#ft}%vI`hbxpisu=j!^@Ot`r`w%nI!sE_@xz4YS2_8OGU@*qcp ztHlfV9TUG0?j%KkyfoQNlAv+et$W+6ZLG(#JVY@-r&3B7Gkc;PiM7;|?7rv7@5k3R z3d8*pcwBzD>2_pGRlmzCr_1rgY1iMZsR#r4KMlgBf;~`H1}Gn0cuLAa^Cz_jmH)m% zF(QH7^{~-ig=!|*<=!7I+M5VPFbYM~)T_H9T$WvA?#5ITDRwI0qX_;>3>rbbE5fo~ zta8dBYFOJlKXfZ622bWgn^pjS13;zfXhs*Yiu571Ujj&nB^P^v42BI?Oz`Ea3qEWK z9Y;!RpYy`tQD@Ggajh7k+L+Cjs%a{XOsI2b=$zlZ*}r>YYP1O|J%fJukrV{U3G#=! zCZ%?qr0j2mfTATFTwFD>WxzaI8n`-wcsW7ruVl_4#+A+8IYMW5fyF2G4xdIm!0-&J zd~#SWjO=3WLo2%dkz7Pf!4Jm&+A(n7*R@`xEQ{d67yFdwvXV zAna)GK8_jm-rMYfQF+iiNM46M`!>n=eaBU*7+a`)5i~(@87c=%YxxTR8I1mum2duv zQYlSG(}ZNw)z097Rhg^Mp|2nj+fHZAJ!7?fUz|=p@yN}~MdG5=tyf~VF3-$f#MP+Y zyMGtUh27Y+Rr$_c-ay}5cFri+6oHRddq7zCdONqJS?lTC=1ObPu%*rXI|i{b;pxW! zh>002519sSaN8R3JB%3TH+1-OwIkr5o$9J{tF6uDZF~)IP>?+nLd>_|q#;ORgh?7H zKz)yVex%mgy&V&bH!~RW5S*zY*$89h{l)TR4;P!a+H38ND3-Yzq=S|Z&z)6)^~<!T%Dp;%L1Ljr6vy0Y6GHkzM-^x6A%7h=QQ zseCFUeGSl74YVAe+N+TIMK+>Vgio`X(moxI%vT8-|FZ7NnpOnG!)p7Z?Je};{9W3P zh<&wFq_sKYuU5uCviHSGX_`>+it-jNoZ*@`}Z>JT=sd z?&`Md<+p3CLqu^Bo}Zd8dw?76ch^3?w!?PIOQ)wREp5@F$Y#PLh@?YOpUNHuMxp6F z6W92=Bk%p-z2@)JYCq8&eSrXA`$w0=oWT4fXn95M5lnB7iK8+tmtWO>(VMHTM|Iq#Bbr zTCuUf9rtZ4lBocbc?gsp4mlCN%zeUoDTW*U4k3%;87lLk{+A|Q%{S|wy6H35GaETH z4DJ;TP^~R-dS>v%DiO>D)T&9+!;KJ0zLA--v1>g@CODElvivxPU2Yx(4an4qAEEY3ckV3}Cryj{=C zoN{3{xZKFudib$pGv2pnGo{3NqjmqjAenARooS+%Y_3GAXggK_*B;~jgMW)sdl zZ}o}BZ=71mhF4(1r$043>tBTfFG0ehKQ%n(n``S5MvSuQso@d)7uD?8BhgbGb|s#e zs?tQqDTU=oE({=nWlW;x@+SotC(hJYaZwaQqKruBwQtre2&jct+a@3+^#_WV%`KB( zBqZBeLAY1ML4+r@lc^V;5}wrc@LNLO-7R@+;BgsYUQ^)FfKP89O=)E!7MeeghQQ3Q zvy1rT>=(xxJMKW3dq4!SZmi!!260^yT{7j2EDGsZ2i3oEx;a}IEDbv#OnAbs*#bJw zl9#wYjo8f;f&Q@#GpJ7vG%y)8py)+rCnEjJKzp$P(;OZ@aobM`XHFpsn=jz!j^LsZV$N zs)mmwC9gLp>(gJY8m<9-D%EhQudP7|(~+^3Ppq%~?zO6az2XuV>hE50i8fT0bXSPh z)t8Z7)Cr0jvr@gmUhxz8zejP&>g}!5D|`3P!_b2wc@no*Q*SFabse#~HuT8TXhZAT z!FuH<&<_6pLajB>QXNiYj*y-ZJO6(c#j+>SeN}{@FiYu=_zkEBq)a9vT%#nBw_#Z1 zy~`I1Y2tSPV_16}4>`A#VHFCAp9C;cqSCA+0ndVh+(4wlkPhT=<)~$Ru! zxn~EEJ`PF3BB+DLJN8GTK=GUnGE5O14aRUuxp}`X+wgh~pb=aoFBO9fTROS`hKNPY zl$<|HTPg-?5|HZiI8aijw2KLq7noOUrVwpvs{9CM|4y;Fy8!{w)@vUqQ0-ScM{a?a z&eBC~SuK+;VCP{bT$yfDsI#tVZY`ZB{>pPvhEuP;VgVDaT8Vl_N`QB~ai z;Rspqn_v9t|IYek&iNe44+!x`>lwNbI-vOWWu?wnB{hFVuyXH*BY*nze|+)aQwLaq z#ZJxLAOy(E3eIl?C*aK^)eZqFPEt9LXfzcb_A}ioLYH0>D2!_n2hKG^-moLDpFS7d zA{n1+1@veq!#C{>_2z_JJ3K+p5pHtLW=CJ8lLpmv35)+YPLE23j6SmZ^&l{*1)AJL znZV9WU%x(6Q4sV48%jM6vU(M0qgk08KPJ_PMU<(t%U!%6r3^v0Y7%|Rj#sPLzljsV z0rl~uW{*T3GYgYbN51^@8-XrANtEV|(i|{%Y2#X)ctGUQO;8YL1W_r1o1PD)ii%R- zf+LV6VUTkJdTj3n}2Keo#x#5I~=w77?c#T+*@RA z)};By^qdq#Jk@z3p%i_R85m37kw<^}1RSJ zlB5+oo=fHlO5Y`0L3e#k;h)NO@#GbE+AG+`u!_kuK4ANxp0(6IHE3Uw%*4H^^U+tn zyKnEK`)!R#uEXm7A7L&n$q&J@_{?aIf11+6_$bMa;qHj$^z0X*n{#W$dDxnAn4g*C zJa9==();q2Qq6qtOV2O#y>I0=`Ms~rLD>@@#q3B~@MkYnIv0bVg|K9032BZxjPZ~h z<3C4sFfZlu`@Fu&&>jEw0xq(TT0FkW-8uhw~NnNZ;2rp)Z+v8c2i z`qXLN#d{X#ZBHy!X~>KG$&y-B>Q+ke!{_m}@ypW_D%U8AKd}jM#FrUZIdXu$z06j0 zC=T}lEQ#j!PNueiREoa;VRhSfuJ-9e%j)Ab|IGXXKYn~?6(O>~0t;eTLGHjm07{?Q zDJr2}{Xuutx*nce2hPq$sEX8-(Oop`Ch?gcyYpUfUQ%1{sJA#b~01q|_55d|?SgBG@?T@%I2g zm0So3V$>!nd>hwp5~W-sS)PBw#AIb_g)Aj{nGb@~__vl&sqh>kLg+q;ydgk-KX;sI zO(MX0d6gnPWGF>WwH(((H4Ul7CJ_v8;mE&6CN0}g>1=_Y(61rH%QHOR;17+!X+JAp z9euC|Zt_=vG`cKl9|_+&_xkIvT8VGT1%^!f!S@2z3~86X_t2B;SSpA|TN}XA?#%*S zeDdu74B2SoAp!Lu9WNs1Uir|qEuTY2USuFIm|^r0u(90&2XhkB$;U3F5!lu!!Wob% zX2j8kEBHpDkZTi9!I-v;t}>`yyO1_^9F^zlNL=&KdGA#)J3*l>geC}oN;?N>(K_rD zt_32#lOEf9Uy`!s$+O2O20>MS%f~5{U#!1{@R#o(>MM)n#_LmUii^HxFE31uU7R8c zff5(6e}mVasX`AZUl5ECm$1o0=>U+CYt?-jJ#!h+5Mc`2)sqpvlm{m9WUop z+w;8@Hf$-f{m{39^MSFQtTYQ%t?)?tX5+5=&}lYb;>%3xuy~1#&0%rAY2ON~U&ko% zvHu0j{!lnZQ(nViI@yN4${OExHnv7+vV2l}-npkId(|IYD}z&{Tu~`Q)aNU=(Eh}n zP=k7xK@WWq)CesC>w#4}BY98kyJP(n-qp)5AvPFtT0`amJvB-urw3O4!1r(rJImkH zzH=hI4^L1wTxhXZ7rfok=9|wy7ZoN=p)r%%;TT@{QFF1gCG(A|8_n2m#m8Rwk=1A_ zOjR;IrJsMUiJoRqolt=RRhpnuza}on{-}5?a|Z_?GH!gl4BoUHliFaTr^=#~Eu9m^ zij8i}J$)K1-B^av9 zA0ZF^kYh`GvXW)%3Hy~G3aUPRA^*GOA`AJuMo;fCbEd!`;okOE8ylWuf73y9C6jrc zqmGUEYz2yZZ&OMVrycl#MA^T=dU30I`ZQhN5EHJNT;x#4E2TiCk=2sQUR<7B?Tb+( zTVwax6)nrnGQ2AMU z9%3k!p2r<0`4LlG8qFKMRDpxG5q~r7Oe3c|VJ2mW@^RUW&Q|Jdc5mb9X_8J-rqTy1 z$;IpG(+ph@a0`o#w$ft%#HEpfjKQRT@WF9MS^6}gai&@gI<+vr9v6y8vwNGlK|zF` z7+p!Ga3RT%<$1M^+^9grXi?8~Qi+dg7TYm*PG}DOa|tcazC;hqY$JxG6%yy}W|MVg zbi7=0FiSG;xYHCng)9f^r@C2*PmO!edrJ#-wHP2~&qf0uudO1%hW^MIhy=;=hkYd~FZN-tXiMxn&)j{(T^W>sJD(CIyXtr}e zh4;ut<|1;RS%x)eig~fTaN^NKu1FL|tWB`7X|L2Cq{M2GU+E`rQER!oxr2RG**zud z%2*!Guhd8ic!qC9iLf6oLvDmej>r_z{(v~>_(;iJ{K?^clSdCzhg6SkFY6R*BZ2m9A#EBLArGNIvM61OA|riUdJHgxe;@Nz-^ysKDA6v(a|-6=+`O6&H4 z^Gfeg=Aa|tJ&_hVWLc|5=-5myJE(`2HXts0MkdVt&_-w}5G46-o7NLb!Lh^81)aw5 z$p71S(ZB{gq3l+FRETyYG4~_U)6~H1-HKZ}IRpfufX) zvmES-k(Z#mKC`<$6T9PWSk@F2U%){1bI8(BCbHN2<=+%ffl#WCX(_1}Svwv@l}ryq z$h)MFQMod>e9Fkqa@-y|sr2psg4q2w) z!nUMzm5=a@1+n7}I%m$Cm@~*-c2W>z8p*u2m@<9brV+_XG(+oDQUzc*X<1&3%nhnq zC8tEx;UoV6yW}&oR(-0Znx^*bfvAS?G>uLN0~?AeFLSU8&6p8uKr_+#EBJ4z84Jb_ zv1oSxl~wieR1;6DwDR>tAl!S;-E%7Lr4xRW5y+8-*~FDRs^&08o&L+DHdv_KnTN9a zcpJ{eXBIqrXXQh#U3~%k=+ui zjcr7$qXd2n^W@}khpsTbG7d+gN;b$m`&ZOJiu}14hj0)DJwPj@9m{pav`aE0UB!?H zF?ilbZ^4K#Uo!qS-x(zx?zOoqmtLNqJ#${XvYxs-oq-!YBKMKuBhqCLAMyLIhL2oZ zxTrj=^TS7wbuQ~K>AdDBaEW|6`iZ%D_y}Pm!$;0of%AYJ@bQVw`x%}8*sW>7%$ldH zk5(K`U>mu>$YgsJlci|#{Wj8STME{6m&pemn2~zcz_Y(Td*=0*#e>LYd>z8>bE&)@ z-kuR&QBYIB28;~zAjP+#=40nbtHp@+!6{O(r z!pd#0uC_LUgC{+LIw0s<7VekAbZCU-Cpo~?B1dwSw)2WinI+>48l@DYeVq}rx~^OiALr&VE^Ns*kCIP$s>0w1n9oD0U5``X zK`P8Z?_BieRLVnM`hZHQVf(;3XGnw`P~-x|ts#q^W@I60wejR6soN~MeNbr0N}PK2 zHBFS52&L+onmckhOK$C+5>WGZnbp7>mYW!#~q)V2xri8M{0A2>IfdDJ1%;SyE4mPSat#ziuU z%pVyABdv6kQtIL2S_>iDm1sfds5B@jI4xy|0_4dlw}!C9*4bq9F!oPc$o}SM-Y5Lp zms$>O$~|q@%OH@1RwEg#VbvcYkuXs4a{-;s4&NM}Ovuy+syGUithkf9B)c!JZgcS0N{c}p0jz;KStXT~E?7ln{`YGPIE{Oy*?JJLneQmHTbQ z?N-CIET`e-+Ti2;0LD6ZO|DFz+XvziGD$N8-&FW?Ao~s|S#*?@<)j-bLCeQ|Z^~&} zz6z&MJhfDTla@=*)}y)?W%Tfy{VH{v6+d;Wr~mew=}-=p#yxs`mUE(?Km7Vn?mJ$k zwBdP{g*!y)i@7p~WHhL$f%=zFJNLL|!^%NgjPEmsAun8;ou9t>%pOp_%9V1#eu%1- zv{DxY&2aW*9Y0i$Q*&3#xeAjX4leutleKL6b#D5*x>u(l9{6rWxRUI!*1FyOh+Ht8 zJ&r<77DMbd+s0{zU|6;+Cet^C#iU);Sa7|cnwutqo||)QS|5cgb`Vw427>6Anotqk z1BgroZ#0jopvBaY_9uZh`2R{Gu+7*;^kw#)ecEsv9U1qFqkWmHkRw8})l@4Xc1Qs@ z(j1G;88gJt>up-%OkNOzHtL$ZC6_inX?mTj{WT9n+7dQ-XUt>FEkN5 zmZ>AUYsPFoQF}%&dLoY!7vdpDB`Qd2_*&4>f;LdPXEq+t3Mzy19Js7+!b;%K;KNA& zSFzboKmYW<|9g6uzSJ2EmHJfM(*i$x!mzwceYo*oY6LyOWM16tD2cJK$^(SBy4U%@ z=0fnZU16`W^lPYWBj;e;ai1i-RZ+|)L`vr>7owS%Wn`YHySIwfNb+Blrknpr6&FSW z8*jSyLPK9cEsIA z7@nHiZ4h8L#-*i*@BPSa;9~?T9&J272VaIyMfPA#H*G z{iw00H~G>&MbGkTJ{RA4kWkVY59sqAy;aiIs5&S!rH4b5#lH?x9Na{QH+6IB8CYd* zcjS{*?ex%(>Yk0xea@Vl9oYm88LxENi)sJU^nJUF=%OB(neS5Ob~DPwF}RGhVDq7lSbOB46j< z40$-jh;#ECw1EeTg9wkvOpbejJsE2JZ5SWUG!6W>4;3R9FPYE32(648J4#xN_mAza zj+a?$6FhFJQ0_I>{iL`yeXk)W9RBG)9CG$e;5jvqn#HdMfT7K0RWCy?<{P-C@kcHo zo&#Sl8^PgjSH)bpi4T-!o#?>rO++N_x)AWT-5+nlFRRMU@h-G+J<`Pvif ztEqS?JYItzf5MHeXhkh}L+BoHQ2v8V9_KOlwI2!)w$)o^U=e!9O@7#dp(UO~uU{oy zW3PWEnNnI52FN&E7nTz90|tVpSb4iV*K}>jL(>_?;5rNl&1?UH&LGxHKK!J!xQu&) zRpVxRk7N$KLTPSrF4hWtZu}*d^X|@FVoea_583lSDN`ygXLdt~tk@-^6m6)j;&1lN z|BaRY((DAxCz&v|w>sQ<5*+)qjgc;01(03HJ#6pJMe=P%61+$x*=*#@2+%j^U}28wk7qDI^BDyYAm7r z%JzMs=HP_HAiTP@m=!dqTFONo30`x)CHg@naV`!|>W#1iL2X4`;|yZl3|6eqdoe!9 z>grsw{vtYV5i1nJbiD)Y1CBs#Tv=ti#v&`DMU!Q->%Qpb@L++t0W#*|#PYc1IDqfk zt^=us!wf5}J71)l2&P*!_^F{#ny?sVJV0=!iQU)cNjUwT6)d$Z34XZuacuNGy*Y4C z=Zjk}mE1$5bn-KmihxGR0>PekPfGc9l?SCSP--Zi06URopDDdgqV~k*Jgi;?Ul}+| z%~s%&GI*x3qRNXy^|$j=Q*WDjUM{4L4?8PasWf+KqeuVMvR@i*=oI9E=%=t5gf_|D z9C3(CuGN>OI|+}Jh;)Oa?XzK>l5k@e3Hu3LL%#8CE14pnwd$KvbDEb)9kGW6_v&ia zw(X+W*yk-y6*A1dHGBa;YiYOV8p+h%u>ZNna&vnF%$8n6jaPV(`Hc{-;SLYsm7Ee= zge8LtoKH-f*$V7ffPCLx^jj>elZkCw)5Tr9iorKKmjAx11+rp>t-)g9XaxFlVc$H# z!~M=qCH;BSydu68CG9_EzRw?i3$`LMxEm>wzh%-@$Zl1S6H5DQr zu&BO%m12iDOsg;!8>L^p@|m0R${3`!p&Zqb+v(Z|;0RY*d-`*)99!saZEkOQI(MTu z91k)FI^_`%+B*!$$-Kz`7o$DQ8ij zqUH~s$cJ_nWuBjzJlZ%cgclT%$ihfWVBq0;8=rwI-R^po0lbKc>O* zAd!Iv7k2tWD1*9^-tegQB!JG!=m|ID<<<1)W+Pl5T^{HZn<9_yg#C3429{lyn_*As ze@&50MN5|fwHn_-BtR?fD?yM!LO89)XYLc#jLDXiTsk>`@f9hm*n}}86x+lf7$B~g zxuXM_;ZVBK_*@KJ$tA$uxJ}*Jxd+C10&xB<3uUL*zMyTm|LwbX4Mhz#@?znBu71V7 z5~B(%EKf`(5`jf61ASQuL5kx)_<=f@xbyz61I98u)+UN%qumGskb`MOIC(+*Ospg{ zS0Os4xpuAsIIT}{Z%2t4}c_G+z!ccRr01$N^O zh?x-H?GRZEy&x_haE;@ypE*(Nx4ahO3bca`XksH5Z!u6}l%vE3l1PkapHw~YQmHCu zSNuryOx4t9kR6~vbK2~d9#}1p_zQe(R@f=rt0!MNbL`BoL6E18y>=o8R^j+{1+rFp zU;(s}d%myrG|*qaU_)e@X%zxj#v033FX1+CEU6h%qOCOduooVaA=ODd0J&Q`&ivW9 zH^pp3DCMQo+!rpP(8yk37HvRwtk#emNEf->X*`M%WVuLx2wlT~7lWP;HNHv;UM10o zRdv@^4w3p`<`T9=?P+p%JwAKw-MQ(@Z(T2*J9zNN#mjS3Q^ncYOV_y+W~z9376Ze$ z5=0FbC$COa$InJa+!N6rDIQtCl;`^NBubpxMd#>@+pEkR2gk+F(gDNJ6#;p~_Ssj^ zm8RkzB38kcX=*6`+gJx1S;Br&2hG>t&R<{fo%W3aC&dAq8iHwYM!ZR#p+?9@VO)(= zYJyZgb@f$xdgkOWPn=0bV_AP1i^iwF8hiQmGp~&?d*d(mBH4Jqq)gDWmx}%JVAJfu zqei*ibXH)e<<^1X`}krp9g$%{t!Ka?o!1cUoM4*jr>n`HxycBAeX7|1h%4hq#G;PW zmj6H_I5~^zxVeORvHQAhW|_@?1vs0w5Ss0N@275FOYckFtPMhW_iG~^>bjyV6{sK!`Jjz~GdS{zDDhIH2ltB&a zAwQ4EWR5KT7L1|Bf5}P}Z7(<&Xj=a4d6GewgwCjc|Kp2){qj@Oav_&OvOP&q?9_g= zlt*Eph(a4slFs%ieB#X$$BX@6q%^^iI(%s?caKkH2fXr4_daAwI=EKRa8=rHapKL> zub(*=8AUrtJ*kk~Y|1Y`X0FgmiPZgi;BU^g@fkD+F_-Iab;OD3 z>@I;^1Gf$%BKJ^n8e&`+vSgk}MAv^}N=EQT>lP@EUHhYUPjPu!7~069&Rw+qv!|iyWRV3R7{`K zzo?zt;#i~UHqU`4IaM?d~)@+gamL zcEzGo#Xl@_b~a$C|III7bd#1Lzxc{_`^le0Wx6u$ngy%X;GrvD>?g-j+3iadp z)fm@h4{l3ji0zYFvBF=FKv4c7<>zZZr99AObk&cp=c|5f*VrS=AJcd;cqN>A{coL+ zOQ{N?{Z_{Mz$F_~QX+;mZh5gQd^nzsZza@&fY#T8z6r&+1+@nwnkNW^R6S?-qG)=v=_;j*EPn( zZYzK^J$!Vam<4`K-skZ!i6eTRmwEt*XOKQLug1pk zXHx5Tl~N$X8*|sjufKJu7~MC2zVdkCYX2AWvod*y3XiZtG65B>4q79omGoKoBVz1x z25#L`Fz|}&=`GOVpV!!Cs&AK}X5k0Y**W<)+kwL}Wx;05;rX~~Sw=ZExa|wYcEFlt zDq2V(CYR3p-ydpt_Cr5Dl+6&46a%Hz3|*&YQIyl-Ov;qsus{!@B~ePSwyB!UoI`81 zEDxjygx7_ytXm(&&+628xkX{>-pf1-xMhQwhlB-of|uL=J?Nx{Uux0@~3aS z`O9MePOc{5%n|>GP1y>(eEQ6ZSJ=fH?OTW}#AN39QHeUcDChw1gykaBAt{X5FId|;b8-9ASGS|niFU*HRr_c1lxi;r;49e*4oKnWurYs=>RtZQ_iX9mpIZeg^xz zrD}2k6*q2Cv;@0~9SC|A5`rzSVlhyI)bdHU2wju*R~B-AV+o)*OBy@M^$REk)QZ~2 zun<)puoP*G@6(otYwrSgRqhHnXtsBrsCP>tk!yFydq(dhZ@KVErXIOg*bQdlPEDj} z7gv<9)iUl#FUuw(U4lBF*}|L!wxMxf_$C<@7*ao}5_TEHwQr$Z696H=NOW;Ui_-+b zzi*jfqJN&@`MM7M5Lt9?9w_B|%g`hD0DL);^M>RhCk3tO#6c)E@V+Y9MM(-F8iL!% z&8fQasC@@}b%x80e2ibV2<%u|tC^)n?uh#-#QXHG9U{H=u05zSm_r<|Sckm<^lRSa zx40xw)nv0z10Oh)hf)7i@><%TI-k(q>Y4;lF7YQh<81TOlmjmIoQ`hn(bmxE}T1Q2v$MIR6(WKRQi!YzZ#|GXY`qsGTTNdvR z@2~OpjrT|X9~kfd(0#$tGpdX7ie-&En{Y%(2=U!+!-}=GOvTD6i)C&1l<(|p$sJAA zdv;aHvie@C@4EcGVT3bWP_q9kI4u}QcRp9UUaz%UB^5-s8)7OtT-bnkJi8oT4Lq^`Lz- zQ%zmHZlOjT-(r8VeCjkKIef;RNh6uGv!LxM{ZI7U(V4{qdK<@Z2-uol$6RvlEh9jl zGFxIJ`_uZ?Tr)2YRB1zUkSt8 zL)-%3XXLFdMjb&m9Z{aIoE$K44{HRG6~ZhXAeQ<-p`wnd{2b8;|J6-sz5BzWq5mYo zjl9v;QF4-)VFvHkUAR2la!H^?{!0{)0l7kdLN?f_%^7l+HEBfecCq@isnHK=M|%vX z6eU>w${e!7H@o7kLc^da%U;nc)hofSLX=;4C$H7+VjDr;k{_=Agp=g(+e1dH(CpJy zMJtfc5THNfeypNNgymVU%o4eJbrLE2#y8kE`N>)vSc53X5Bo5&p04++44Qy-r zEpATZHyr=KltlUosg(B3_8*;yzONCpwxG9G*8LKmp!6TV`17}aeDuwO|M$Nif`sV~ z0VV6pERB|}T-I3J7pBLrDvm#6EYzjEbWnAxyr69-%3cjp78h1&C97v@OdYR~7_kgy ztkiG|U*-=XR zYJ$GL-qT_&Z z!~~O6E}IGWZ>uf7?c02!eO8!M%%qKX0^Nlth9i zWMP$HORxH^Nfn1i6h)D5)loY&cH+(BuL81k#n0^-l(;cIH$KP3jFmD*AK`+tvT(sS zo-ZgmGd)kH!_VwYK~u%eISZ%zl^hkac6QjJ1rU`S-8Mtkv2(nHXP~)0Z)JY6_x)dU zJ4WrTu!#u)=+|5&oE(r$hg?d*=nVF=dIw)bD15;FLY+mYqFuarQxTA%+vQ7yp-e6c z%4d_qYasl1jesK=hNY+{Kc(h6qtwlpr`hRRh~9?)gZ3V!!dUk%6b4(2VlA{`pWnN@%cpm2uIWj1SM%R{btg3R1VysG z>{Z(4tEWI@apH=@?)0ptiv<^KuZQ_7&3T&XIII5DgE383lmY*7fu7aMH5#BsUF>`s zP^L3S{E?DP-fgD;&e9P`4IU$VJvB%}T2Dht>i30HG)fv}_#8`pj-in=X~E6At0N6v zz7W01JV?h$0bE|ByAV(KqwZ>RrL%}#!WD7t0ule!*N^>7+$?-e>G6yNl#3_Hue5Uq zMm+csa4h#t4oe8ARMq_JUmfJ3WMxRE^r}B_51en4M?Z(YWLZT*U?}k!fs~eF%(hd- zdS{H4a+90Q#fCF;oAe!WWeBcb1r1_!o6B9Ez9Kswgw6I>y~;DetNzY2>DJb8&|GmK z`f!mug#{9{7~7mEUeF!t5)EvZ@ZcA2Ql_{-5|+mnM<;q=j&cZxcs&wZ)!k?i zw=BIbuo}Tj7bnLpnMb!eJI03FeM0U~V_O;*klrobD3>+pyHUSdG*2skrKK1y8VElu zEw>lB9PA#>VX>1#334dARWs$zGHcS(1`T`5qUJavnO+2id~0i?v$(yr+fZ~Bd z#j$gzUifh%sF~40nIA4Rloqjwno%n>&M`GN)2wjfjIe-t_=Z839otz2XW#rGYKQ9e zslg*fNNA|mt1Hv<6J;&3gvWic z3)kS$i8>yWTg}+zsq16o3pY`(Fc$#$q&I}8QWkfO$CXuxKE1(G%2l?JI~U=@b{pLJ z%5Vi`_0-8<=@3d~7o0ZSl&>WE9HuPMJnC7+MczlQ#_7nEbAyV)C$i9_zf?ZD-BnFu zJpLIYZZj&$%h1eEDwri&fJMLedTBH)IuThy(t7VAv_1r|UepO}Y%_1N6pX?=q!^}b z9;EzOYe`EejP8z4htd#oa9Ow?I;xL#4K~L)bFBiS_v;2hcNUoLlqrXJZ8kA#+@JS>l=fM$rWc zB9PUzJTb(gl&`WpL5*Z-LoWjIMIT~u)f^aI=-IvVLsu&5YeS=j+WW0C*!Hvo!2Ttf z`q{~2ufG1ui8mYNoLK0qX4mwWV9WG zEh_78XWDg<^NmPZK5iI{WrgNJ(QT+gXwe?&QfCp~H^MoXSm2K2D~%Yo;Dz*3R=-e% zJ~#XdK>}IEuFsB5EX>V;P{%Co!nN@U98qKm#;2c)VjySgNGnv){Sg;YWxlPbpu4*= zG2P>;358_~bIR}Xw$VV(1K3-u0$EjZ$evUrHo$NlmvP;PcUY~*bPstaA#))LzkfNu zQ5tPL?O9A6n$Aw>_-=qr{=7+>0_No1YxOw@fyfeQ{eIX`OSB8wVkXr2ptG?|z_NMh zW>R#fLU%$u6slhte|u^yvFNGcpm)V^%v*~`n;7b%oQ88bb8 zai$J7-*k9)%v~>cMK(Z6Pl;Kf5p&_xaMFy$QPpyBn9xgaXBKI@ow@1jaS>~rQ&{VSLQ&%p>xt4mrEN&Bz^?HXSe^LDes99T5BET}ZWo_y zbUqYIV^v#?VEEwN#wQ6%yFf+E1&mWSVY!Woloukdz=Dvy3@)n;X>SwXoBUWal46`J zh_vD4CRgW)+(?bw$clsN%)Z}iy|=aD>8uGLQHn4!6i)h8pkd1&}A+v(4&r#%nor%c$eQRjIIZ zp$@?qqcC?V1}PPgcG>#YBn&u#4NEz?@5kJ<7LBkm5Y(Q=!qj)uR=^I#bV)g%kcvH4 zq?bK4&PuU0-T)3y7w6|2y-%;sTnQJm%tua2l-Wy)Gt0I&vgbnWCpa?29qTo}^#?S6 zrB>1&h0$KY{5F1hs?K1`H9ydSob~ntAa3B;*;AD|*&9J=uQ?e48Mp(k8jieU!r}Q#m$NG6;Z-6H*nx~B6Aj6#qdHKeFs(qip@hYUj(1?z z)1Kq&PLFCLo(*jPDOs>J3q3?P#loJ-En6BLv={NKy-1}n3R2&!tfu2rXuh4r=wnmF zXpNDfhw}O(U{LFh9{}nc+%>Y)#K74i`-_}7l&w(idR^;W!o|A7$C-U{bmVdZ?v;iu zA|+6t3|)c^GBo1QSQD&KA`A)T8yRQ>r!qU=UR$_|DUOLe^uycN6(jmp=^C>RQUP!u zRSt!bx}qCpr(x%*RV-Yco|v7S8ZKNx!|~@JUO4znqi>)JJ;a1c!xbkqX5ZXdxVgmL zzTI+rr%I)*Q2W-l`K6FP#*r?$sKICEZ~|{RKjn%e=hH*%HyS|K!J4YlQ|m-CXrua* zQ5X$J_K4r`V~F|KEY6xZEzUyJs1~eKQZGmPMnrbjxjdN11TFdVDX~hcCVs`ICblY* zkRSHEv@|<&*Crw=IyeX=hLi4Sldw0CIlHJMua>?@ln_Dg1!QN05b?bJP;AYiWu87p zpApW5o1dVOp++3Osi^WP_VzfvLE!@N7eX#>Tp7hLxt7qrL{FzW1x#bI!J0jF(BSwZd0F|ni>Dj0F4L| z9LGhnJzP&BtXMJjzfTp8&{bSuTsg?3#-}%o**5OQu$ZY&xopCd$;diSGC6U9C1+kM zyywdxBc(D{7u_u>h{zX-Ho4U5rk<-G@HkIeRIsZo3st!?{yNx{LvN4!%Nct{LfbUDt zf?u7WQzAqee^+ocJDRZLP=zco8DEkyK2WI0n815z4NJA;`uANGhcl*8Gkd+Xvu(GA z8C#DJD$QV&x&xe~+fUgV(TEv`;i770tm2NIXXd`81bT|VG2FO0pl8R9)=Uxw% z_5%Zit1g{dr`#Y=?kIvQJ4mgV;{v1aJF-db`TpFmd96lvIw+IH6PVCR3_#HHY75bT z=fnhgaly~peN?V|i<$T;t~{x12`X(PaaH{!TseZ2jZo1K!xPlY`bIU|^cHsY_*MeV zj;ufwbt}USWhzo`r9hO9%Fa`TL23Mg9m*Ztz;9V-wVnN}Vp zghAVmwhaf$336g)9634%9ty+>aKYs%ie8$Y!YqN$@$M>CrLdxZcjF?BR6NRbWtDta z#p)Z4uM}XtgLdIW{dx55v;*$zRsk${JcbyScE36dy${yQpPyOr~y)>aK4L4h;#hqV`Fkp?CGjy z66-)3%p-;K0&sEw&`P2->*7h$<3MDiIOOOFZq|Z&Ft9i>t^F==govC?(oKY-j%)n~ z!=dM}N8PO*6cr?+hLur)Bz78EL|hLka7df%4fZ}#o5lX;4j>HIOZ%(m55z8&C2-RT z03$PDXgxj*GN7Y{c;`vgk`Or!c58rSf7a!m8wpWEqM?&Fc`UKB#BE@tNNJ3Z|NO-9 zUo?%CT~f$20u6JJIG, 2003, 2005, 2006. +# Pavel Maryanov , 2003, 2005, 2006, 2008. msgid "" msgstr "" -"Project-Id-Version: binutils-2.16.93\n" +"Project-Id-Version: binutils 2.17.90\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-10-25 09:14+0930\n" -"PO-Revision-Date: 2006-05-22 14:32+0300\n" +"POT-Creation-Date: 2007-07-02 15:55+0930\n" +"PO-Revision-Date: 2008-01-18 00:13+0200\n" "Last-Translator: Pavel Maryanov \n" -"Language-Team: Russian \n" +"Language-Team: Russian \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=KOI8-R\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.11.2\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: addr2line.c:76 +#: addr2line.c:74 #, c-format msgid "Usage: %s [option(s)] [addr(s)]\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] [ÁÄÒÅÓ(Á)]\n" +msgstr "Использование: %s [опции] [адрес(а)]\n" -#: addr2line.c:77 +#: addr2line.c:75 #, c-format msgid " Convert addresses into line number/file name pairs.\n" -msgstr "ëÏÎ×ÅÒÔÉÒÕÅÔ ÁÄÒÅÓÁ × ÐÁÒÙ ÎÏÍÅÒ_ÓÔÒÏËÉ/ÉÍÑ_ÆÁÊÌÁ.\n" +msgstr " Конвертирует адреса в пары номер_строки/имя_файла.\n" -#: 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 " åÓÌÉ ÁÄÒÅÓÁ ÎÅ ÕËÁÚÁÎÙ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ, ÏÎÉ ÂÕÄÕÔ ÐÒÏÞÉÔÁÎÙ ÉÚ stdin\n" +msgstr " Если адреса не указаны в командной строке, они будут прочитаны из stdin\n" -#: addr2line.c:79 +#: addr2line.c:77 #, c-format msgid "" " The options are:\n" " @ Read options from \n" " -b --target= Set the binary file format\n" " -e --exe= 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= 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" @@ -47,177 +47,184 @@ msgid "" " -v --version Display the program's version\n" "\n" msgstr "" -" ïÐÃÉÉ:\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -b --target= õÓÔÁÎÏ×ÉÔØ ÆÏÒÍÁÔ Ä×ÏÉÞÎÏÇÏ ÆÁÊÌÁ\n" -" -e --exe= õÓÔÁÎÏ×ÉÔØ ÉÍÑ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ (ÐÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ a.out)\n" -" -s --basenames ÷ÙÄÅÌÉÔØ ÉÍÅÎÁ ËÁÔÁÌÏÇÏ×\n" -" -f --functions ðÏËÁÚÁÔØ ÉÍÅÎÁ ÆÕÎËÃÉÊ\n" -" -C --demangle[=ÓÔÉÌØ] äÅËÏÄÉÒÏ×ÁÔØ ÉÍÅÎÁ ÆÕÎËÃÉÊ\n" -" -h --help ðÏËÁÚÁÔØ ÜÔÕ ÉÎÆÏÒÍÁÃÉÀ\n" -" -v --version ðÏËÁÚÁÔØ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ\n" -"\n" - -#: 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 +" Опции:\n" +" @<файл> читать параметры из <файла>\n" +" -b --target= установить формат двоичного файла\n" +" -e --exe= установить имя входного файла (по умолчанию используется a.out)\n" +" -i --inlines развёрнутая информация по внутристрочным функциям\n" +" -j --section=<имя> читать смещения разделов вместо адресов\n" +" -s --basenames выделить имена каталогов\n" +" -f --functions показать имена функций\n" +" -C --demangle[=стиль] декодировать имена функций\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" +"\n" + +#: 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 "ïÔÞ£ÔÙ Ï ÏÛÉÂËÁÈ ÏÔÐÒÁ×ÌÑÊÔÅ × %s\n" +msgstr "Отчёты об ошибках отправляйте в %s\n" -#: addr2line.c:253 +#: addr2line.c:279 #, c-format -msgid "%s: can not get addresses from archive" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÁÄÒÅÓÁ ÉÚ ÁÒÈÉ×Á" +msgid "%s: cannot get addresses from archive" +msgstr "%s: невозможно получить адреса из архива" -#: addr2line.c:325 nm.c:1523 objdump.c:3033 +#: addr2line.c:296 +#, c-format +msgid "%s: cannot find section %s" +msgstr "%s: невозможно найти раздел %s" + +#: addr2line.c:362 nm.c:1534 objdump.c:3099 #, c-format msgid "unknown demangling style `%s'" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÓÔÉÌØ ÄÅËÏÄÉÒÏ×ÁÎÉÑ `%s'" +msgstr "неизвестный стиль декодирования `%s'" -#: ar.c:203 +#: ar.c:204 #, c-format msgid "no entry %s in archive\n" -msgstr "× ÁÒÈÉ×Å ÎÅÔ ÐÕÎËÔÁ %s\n" +msgstr "в архиве нет пункта %s\n" -#: ar.c:219 +#: ar.c:220 #, c-format msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" msgstr "" -"éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ ÜÍÕÌÑÃÉÉ] [-]{dmpqrstx}[abcfilNoPsSuvV] [ÉÍÑ_ÞÌÅÎÁ]\n" -" [ÓÞÅÔ] ÆÁÊÌ_ÁÒÈÉ×Á ÆÁÊÌ...\n" +"Использование: %s [опции эмуляции] [-]{dmpqrstx}[abcfilNoPsSuvV] [имя_члена]\n" +" [счет] файл_архива файл...\n" -#: ar.c:222 +#: ar.c:223 #, c-format msgid " %s -M [ - read options from \n" -msgstr " @ - ÞÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" +msgstr " @ - читать опции из <файла>\n" -#: ar.c:252 +#: ar.c:253 #, c-format msgid "Usage: %s [options] archive\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] ÁÒÈÉ×\n" +msgstr "Использование: %s [опции] архив\n" -#: ar.c:253 +#: ar.c:254 #, c-format msgid " Generate an index to speed access to archives\n" -msgstr " óÏÚÄÁÅÔ ÉÎÄÅËÓ ÄÌÑ Õ×ÅÌÉÞÅÎÉÑ ÓËÏÒÏÓÔÉ ÄÏÓÔÕÐÁ Ë ÁÒÈÉ×ÁÍ\n" +msgstr " Создает индекс для увеличения скорости доступа к архивам\n" -#: ar.c:254 +#: ar.c:255 #, c-format msgid "" " The options are:\n" @@ -225,52 +232,52 @@ msgid "" " -h --help Print this help message\n" " -V --version Print version information\n" msgstr "" -" ïÐÃÉÉ:\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÓÐÒÁ×ÏÞÎÏÇÏ ÓÏÏÂÝÅÎÉÑ\n" -" -V --version ÷Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÅÒÓÉÉ\n" +" Параметры:\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать это справочное сообщение\n" +" -V --version показать информацию о версии\n" -#: ar.c:485 +#: ar.c:487 msgid "two different operation options specified" -msgstr "ÕËÁÚÁÎÙ ÏÐÃÉÉ ÄÌÑ Ä×ÕÈ ÒÁÚÌÉÞÎÙÈ ÏÐÅÒÁÃÉÊ" +msgstr "указаны опции для двух различных операций" -#: ar.c:560 +#: ar.c:562 #, c-format msgid "illegal option -- %c" -msgstr "ÎÅ×ÅÒÎÁÑ ÏÐÃÉÑ -- %c" +msgstr "неверная опция -- %c" -#: ar.c:606 +#: ar.c:605 msgid "no operation specified" -msgstr "ÏÐÅÒÁÃÉÑ ÎÅ ÕËÁÚÁÎÁ" +msgstr "операция не указана" -#: ar.c:609 +#: ar.c:608 msgid "`u' is only meaningful with the `r' option." -msgstr "`u' ÉÍÅÅÔ ÚÎÁÞÅÎÉÅ ÔÏÌØËÏ Ó ÏÐÃÉÅÊ `r'." +msgstr "`u' имеет значение только с опцией `r'." -#: ar.c:617 +#: ar.c:616 msgid "`N' is only meaningful with the `x' and `d' options." -msgstr "`u' ÉÍÅÅÔ ÚÎÁÞÅÎÉÅ ÔÏÌØËÏ Ó ÏÐÃÉÑÍÉ `x' É `d'." +msgstr "`u' имеет значение только с опциями `x' и `d'." -#: ar.c:620 +#: ar.c:619 msgid "Value for `N' must be positive." -msgstr "úÎÁÞÅÎÉÅ ÄÌÑ `N' ÄÏÌÖÎÏ ÂÙÔØ ÐÏÌÏÖÉÔÅÌØÎÙÍ." +msgstr "Значение для `N' должно быть положительным." -#: ar.c:670 +#: ar.c:669 #, c-format msgid "internal error -- this option not implemented" -msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- ÜÔÁ ÏÐÃÉÑ ÎÅ ×ÙÐÏÌÎÅÎÁ" +msgstr "внутренняя ошибка -- эта опция не выполнена" -#: ar.c:739 +#: ar.c:738 #, c-format msgid "creating %s" -msgstr "ÓÏÚÄÁÅÔÓÑ %s" +msgstr "создается %s" -#: 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 "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ stat ÎÁ %s" +msgstr "внутренняя ошибка stat на %s" -#: ar.c:792 +#: ar.c:791 #, c-format msgid "" "\n" @@ -281,168 +288,173 @@ msgstr "" "<%s>\n" "\n" -#: ar.c:808 ar.c:875 +#: ar.c:807 ar.c:875 #, c-format msgid "%s is not a valid archive" -msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ÁÒÈÉ×ÏÍ" - -#: ar.c:843 -#, c-format -msgid "stat returns negative size for %s" -msgstr "stat ×ÏÚ×ÒÁÔÉÌ ÏÔÒÉÃÁÔÅÌØÎÙÊ ÒÁÚÍÅÒ ÄÌÑ %s" +msgstr "%s не является верным архивом" -#: ar.c:1061 +#: ar.c:1069 #, c-format msgid "No member named `%s'\n" -msgstr "îÅÔ ÞÌÅÎÁ Ó ÉÍÅÎÅÍ `%s'\n" +msgstr "Нет члена с именем `%s'\n" -#: ar.c:1111 +#: ar.c:1119 #, c-format msgid "no entry %s in archive %s!" -msgstr "ÐÕÎËÔÁ %s ÎÅÔ × ÁÒÈÉ×Å %s!" +msgstr "пункта %s нет в архиве %s!" -#: ar.c:1248 +#: ar.c:1257 #, c-format msgid "%s: no archive map to update" -msgstr "%s: ÎÅÔ ËÁÒÔÙ ÁÒÈÉ×Á ÄÌÑ ÏÂÎÏ×ÌÅÎÉÑ" +msgstr "%s: нет карты архива для обновления" -#: arsup.c:87 +#: arsup.c:88 #, c-format msgid "No entry %s in archive.\n" -msgstr "ÐÕÎËÔÁ %s ÎÅÔ × ÁÒÈÉ×Å.\n" +msgstr "пункта %s нет в архиве.\n" -#: arsup.c:112 +#: arsup.c:113 #, c-format msgid "Can't open file %s\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ %s\n" +msgstr "Невозможно открыть файл %s\n" -#: arsup.c:162 +#: arsup.c:163 #, c-format msgid "%s: Can't open output archive %s\n" -msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÁÒÈÉ× %s\n" +msgstr "%s: Невозможно открыть выходной архив %s\n" -#: arsup.c:179 +#: arsup.c:180 #, c-format msgid "%s: Can't open input archive %s\n" -msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÁÒÈÉ× %s\n" +msgstr "%s: Невозможно открыть входной архив %s\n" -#: arsup.c:188 +#: arsup.c:189 #, c-format msgid "%s: file %s is not an archive\n" -msgstr "%s: ÆÁÊÌ %s ÎÅ Ñ×ÌÑÅÔÓÑ ÁÒÈÉ×ÏÍ\n" +msgstr "%s: файл %s не является архивом\n" -#: arsup.c:227 +#: arsup.c:228 #, c-format msgid "%s: no output archive specified yet\n" -msgstr "%s: ×ÙÈÏÄÎÏÊ ÁÒÈÉ× ÅÝÅ ÎÅ ÕËÁÚÁÎ\n" +msgstr "%s: выходной архив еще не указан\n" -#: 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 "%s: ÎÅÔ ÏÔËÒÙÔÏÇÏ ×ÙÈÏÄÎÏÇÏ ÁÒÈÉ×Á\n" +msgstr "%s: нет открытого выходного архива\n" -#: 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 "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ %s\n" +msgstr "%s: невозможно открыть файл %s\n" -#: 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 "%s: ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÆÁÊÌ ÍÏÄÕÌÑ %s\n" +msgstr "%s: невозможно найти файл модуля %s\n" -#: arsup.c:422 +#: arsup.c:423 #, c-format msgid "Current open archive is %s\n" -msgstr "ôÅËÕÝÉÊ ÏÔËÒÙÔÙÊ ÁÒÈÉ× - %s\n" +msgstr "Текущий открытый архив - %s\n" -#: arsup.c:446 +#: arsup.c:447 #, c-format msgid "%s: no open archive\n" -msgstr "%s: ÎÅÔ ÏÔËÒÙÔÏÇÏ ÁÒÈÉ×Á\n" +msgstr "%s: нет открытого архива\n" + +#: bin2c.c:84 +#, c-format +msgid "Usage: %s < input_file > output_file\n" +msgstr "Использование: %s < входной_файл > выходной_файл\n" + +#: bin2c.c:85 +#, c-format +msgid "Prints bytes from stdin in hex format.\n" +msgstr "Выводит в шестнадцатиричном формате байты со стандартного ввода.\n" #: binemul.c:37 #, c-format msgid " No emulation specific options\n" -msgstr " îÅÔ ÏÐÃÉÊ, ÓÐÅÃÉÆÉÞÎÙÈ ÄÌÑ ÜÍÕÌÑÃÉÉ\n" +msgstr " Нет опций, специфичных для эмуляции\n" #. Macros for common output. -#: binemul.h:40 +#: binemul.h:41 #, c-format msgid " emulation options: \n" -msgstr " ÏÐÃÉÉ ÜÍÕÌÑÃÉÉ: \n" +msgstr " опции эмуляции: \n" -#: bucomm.c:110 +#: bucomm.c:111 #, c-format msgid "can't set BFD default target to `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÃÅÌØ BFD ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÁ `%s': %s" +msgstr "невозможно установить цель BFD по умолчанию на `%s': %s" -#: bucomm.c:121 +#: bucomm.c:122 #, c-format msgid "%s: Matching formats:" -msgstr "%s: æÏÒÍÁÔÙ ÓÏ×ÐÁÄÅÎÉÑ:" +msgstr "%s: Форматы совпадения:" -#: bucomm.c:136 +#: bucomm.c:137 #, c-format msgid "Supported targets:" -msgstr "ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÃÅÌÉ:" +msgstr "Поддерживаемые цели:" -#: bucomm.c:138 +#: bucomm.c:139 #, c-format msgid "%s: supported targets:" -msgstr "%s: ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÃÅÌÉ:" +msgstr "%s: поддерживаемые цели:" -#: bucomm.c:154 +#: bucomm.c:155 #, c-format msgid "Supported architectures:" -msgstr "ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÁÒÈÉÔÅËÔÕÒÙ:" +msgstr "Поддерживаемые архитектуры:" -#: bucomm.c:156 +#: bucomm.c:157 #, c-format msgid "%s: supported architectures:" -msgstr "%s: ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÁÒÈÉÔÅËÔÕÒÙ:" +msgstr "%s: поддерживаемые архитектуры:" -#: bucomm.c:349 +#: bucomm.c:350 #, c-format msgid "BFD header file version %s\n" -msgstr "æÁÊÌ ÚÁÇÏÌÏ×ËÁ BFD ×ÅÒÓÉÑ %s\n" +msgstr "Файл заголовка BFD версия %s\n" -#: bucomm.c:450 +#: bucomm.c:499 #, c-format msgid "%s: bad number: %s" -msgstr "%s: ÐÌÏÈÏÅ ÞÉÓÌÏ: %s" +msgstr "%s: плохое число: %s" -#: bucomm.c:467 strings.c:438 +#: bucomm.c:516 strings.c:435 #, c-format msgid "'%s': No such file" -msgstr "'%s': îÅÔ ÔÁËÏÇÏ ÆÁÊÌÁ" +msgstr "'%s': Нет такого файла" -#: bucomm.c:469 strings.c:440 +#: bucomm.c:518 strings.c:437 #, c-format msgid "Warning: could not locate '%s'. reason: %s" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ '%s'. ðÒÉÞÉÎÁ: %s" +msgstr "Предупреждение: невозможно найти '%s'. Причина: %s" -#: bucomm.c:473 +#: bucomm.c:522 #, c-format msgid "Warning: '%s' is not an ordinary file" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: '%s' ÎÅ Ñ×ÌÑÅÔÓÑ ÏÂÙÞÎÙÍ ÆÁÊÌÏÍ" +msgstr "Предупреждение: '%s' не является обычным файлом" -#: coffdump.c:103 +#: coffdump.c:104 #, c-format msgid "#lines %d " -msgstr "#ÓÔÒÏËÉ %d " +msgstr "#строки %d " -#: coffdump.c:457 sysdump.c:641 +#: coffdump.c:458 sysdump.c:640 #, c-format msgid "Usage: %s [option(s)] in-file\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] in-ÆÁÊÌ\n" +msgstr "Использование: %s [опции] in-файл\n" -#: coffdump.c:458 +#: coffdump.c:459 #, c-format msgid " Print a human readable interpretation of a SYSROFF object file\n" -msgstr " ÷Ù×ÏÄÉÔ ÕÄÏÂÏÞÉÔÁÅÍÕÀ ÄÌÑ ÞÅÌÏ×ÅËÁ ÉÎÔÅÒÐÒÅÔÁÃÉÀ ÏÂßÅËÔÎÏÇÏ ÆÁÊÌÁ SYSROFF\n" +msgstr " Вывод удобочитаемой для человека интерпретации объектного файла SYSROFF\n" -#: coffdump.c:459 +#: coffdump.c:460 #, c-format msgid "" " The options are:\n" @@ -451,729 +463,739 @@ msgid "" " -v --version Display the program's version\n" "\n" msgstr "" -" ïÐÃÉÉ:\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ\n" +"? Опции:\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" "\n" -#: coffdump.c:528 srconv.c:1822 sysdump.c:705 +#: coffdump.c:529 srconv.c:1824 sysdump.c:704 msgid "no input file specified" -msgstr "ÎÅ ÕËÁÚÁÎ ×ÈÏÄÎÏÊ ÆÁÊÌ" +msgstr "не указан входной файл" + +#: cxxfilt.c:119 nm.c:252 objdump.c:234 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Отчёты об ошибках отправляйте в %s\n" -#: debug.c:648 +#: debug.c:646 msgid "debug_add_to_current_namespace: no current file" -msgstr "debug_add_to_current_namespace: ÎÅÔ ÔÅËÕÝÅÇÏ ÆÁÊÌÁ" +msgstr "debug_add_to_current_namespace: нет текущего файла" -#: debug.c:727 +#: debug.c:725 msgid "debug_start_source: no debug_set_filename call" -msgstr "debug_start_source: ÎÅÔ ×ÙÚÏ×Á debug_set_filename" +msgstr "debug_start_source: нет вызова debug_set_filename" -#: debug.c:783 +#: debug.c:781 msgid "debug_record_function: no debug_set_filename call" -msgstr "debug_record_function: ÎÅÔ ×ÙÚÏ×Á debug_set_filename" +msgstr "debug_record_function: нет вызова debug_set_filename" -#: debug.c:835 +#: debug.c:833 msgid "debug_record_parameter: no current function" -msgstr "debug_record_parameter: ÎÅÔ ÔÅËÕÝÅÊ ÆÕÎËÃÉÉ" +msgstr "debug_record_parameter: нет текущей функции" -#: debug.c:867 +#: debug.c:865 msgid "debug_end_function: no current function" -msgstr "debug_end_function: ÎÅÔ ÔÅËÕÝÅÊ ÆÕÎËÃÉÉ" +msgstr "debug_end_function: нет текущей функции" -#: debug.c:873 +#: debug.c:871 msgid "debug_end_function: some blocks were not closed" -msgstr "debug_end_function: ÎÅËÏÔÏÒÙÅ ÂÌÏËÉ ÎÅ ÂÙÌÉ ÚÁËÒÙÔÙ" +msgstr "debug_end_function: некоторые блоки не были закрыты" -#: debug.c:901 +#: debug.c:899 msgid "debug_start_block: no current block" -msgstr "debug_start_block: ÎÅÔ ÔÅËÕÝÅÇÏ ÂÌÏËÁ" +msgstr "debug_start_block: нет текущего блока" -#: debug.c:937 +#: debug.c:935 msgid "debug_end_block: no current block" -msgstr "debug_end_block: ÎÅÔ ÔÅËÕÝÅÇÏ ÂÌÏËÁ" +msgstr "debug_end_block: нет текущего блока" -#: debug.c:944 +#: debug.c:942 msgid "debug_end_block: attempt to close top level block" -msgstr "debug_end_block: ÐÏÐÙÔËÁ ÚÁËÒÙÔØ ÂÌÏË ×ÅÒÈÎÅÇÏ ÕÒÏ×ÎÑ" +msgstr "debug_end_block: попытка закрыть блок верхнего уровня" -#: debug.c:967 +#: debug.c:965 msgid "debug_record_line: no current unit" -msgstr "debug_record_line: ÎÅÔ ÔÅËÕÝÅÇÏ ÍÏÄÕÌÑ" +msgstr "debug_record_line: нет текущего модуля" #. FIXME -#: debug.c:1020 +#: debug.c:1018 msgid "debug_start_common_block: not implemented" -msgstr "debug_start_common_block: ÎÅ ×ÙÐÏÌÎÅÎ" +msgstr "debug_start_common_block: не выполнен" #. FIXME -#: debug.c:1031 +#: debug.c:1029 msgid "debug_end_common_block: not implemented" -msgstr "debug_end_common_block: ÎÅ ×ÙÐÏÌÎÅÎ" +msgstr "debug_end_common_block: не выполнен" #. FIXME. -#: debug.c:1115 +#: debug.c:1113 msgid "debug_record_label: not implemented" -msgstr "debug_record_label: ÎÅ ×ÙÐÏÌÎÅÎ" +msgstr "debug_record_label: не выполнен" -#: debug.c:1137 +#: debug.c:1135 msgid "debug_record_variable: no current file" -msgstr "debug_record_variable: ÎÅÔ ÔÅËÕÝÅÇÏ ÆÁÊÌÁ" +msgstr "debug_record_variable: нет текущего файла" -#: debug.c:1665 +#: debug.c:1663 msgid "debug_make_undefined_type: unsupported kind" -msgstr "debug_make_undefined_type: ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÔÉÐ" +msgstr "debug_make_undefined_type: неподдерживаемый тип" -#: debug.c:1842 +#: debug.c:1840 msgid "debug_name_type: no current file" -msgstr "debug_name_type: ÎÅÔ ÔÅËÕÝÅÇÏ ÆÁÊÌÁ" +msgstr "debug_name_type: нет текущего файла" -#: debug.c:1887 +#: debug.c:1885 msgid "debug_tag_type: no current file" -msgstr "debug_tag_type: ÎÅÔ ÔÅËÕÝÅÇÏ ÆÁÊÌÁ" +msgstr "debug_tag_type: нет текущего файла" -#: debug.c:1895 +#: debug.c:1893 msgid "debug_tag_type: extra tag attempted" -msgstr "debug_tag_type: ÏÐÒÏÂÏ×ÁÎ ÄÏÐÏÌÎÉÔÅÌØÎÙÊ ÔÅÇ" +msgstr "debug_tag_type: опробован дополнительный тег" -#: debug.c:1932 +#: debug.c:1930 #, c-format msgid "Warning: changing type size from %d to %d\n" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÉÚÍÅÎÑÅÔÓÑ ÒÁÚÍÅÒ ÔÉÐÁ Ó %d ÎÁ %d\n" +msgstr "Предупреждение: изменяется размер типа с %d на %d\n" -#: debug.c:1954 +#: debug.c:1952 msgid "debug_find_named_type: no current compilation unit" -msgstr "debug_find_named_type: ÎÅÔ ÔÅËÕÝÅÇÏ ÍÏÄÕÌÑ ËÏÍÐÉÌÑÃÉÉ" +msgstr "debug_find_named_type: нет текущего модуля компиляции" -#: debug.c:2057 +#: debug.c:2055 #, c-format msgid "debug_get_real_type: circular debug information for %s\n" -msgstr "debug_get_real_type: ÃÉÒËÕÌÑÒÎÁÑ ÏÔÌÁÄÏÞÎÁÑ ÉÎÆÏÒÍÁÃÉÑ ÄÌÑ %s\n" +msgstr "debug_get_real_type: циркулярная отладочная информация для %s\n" -#: debug.c:2484 +#: debug.c:2482 msgid "debug_write_type: illegal type encountered" -msgstr "debug_write_type: ×ÓÔÒÅÞÅÎ ÎÅ×ÅÒÎÙÊ ÔÉÐ" +msgstr "debug_write_type: встречен неверный тип" -#: 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 "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÍÁÛÉÎÙ: %d" +msgstr "Внутренняя ошибка: Неизвестный тип машины: %d" -#: dlltool.c:854 +#: dlltool.c:890 #, c-format msgid "Can't open def file: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ def: %s" +msgstr "Невозможно открыть файл def: %s" -#: dlltool.c:859 +#: dlltool.c:895 #, c-format msgid "Processing def file: %s" -msgstr "ïÂÒÁÂÁÔÙ×ÁÅÔÓÑ ÆÁÊÌ def: %s" +msgstr "Обрабатывается файл def: %s" -#: dlltool.c:863 +#: dlltool.c:899 msgid "Processed def file" -msgstr "ïÂÒÁÂÏÔÁÎ ÆÁÊÌ def" +msgstr "Обработан файл def" -#: dlltool.c:887 +#: dlltool.c:923 #, c-format msgid "Syntax error in def file %s:%d" -msgstr "ïÛÉÂËÁ ÓÉÎÔÁËÓÉÓÁ × ÆÁÊÌÅ def %s:%d" +msgstr "Ошибка синтаксиса в файле def %s:%d" -#: dlltool.c:922 +#: dlltool.c:958 #, c-format msgid "%s: Path components stripped from image name, '%s'." -msgstr "%s: ëÏÍÐÏÎÅÎÔÙ ÐÕÔÉ, ÉÚ×ÌÅÞÅÎÎÙÅ ÉÚ ÉÍÅÎÉ ÉÚÏÂÒÁÖÅÎÉÑ, '%s'." +msgstr "%s: Компоненты пути, извлеченные из имени изображения, '%s'." -#: dlltool.c:931 +#: dlltool.c:967 #, c-format msgid "NAME: %s base: %x" msgstr "NAME: %s base: %x" -#: dlltool.c:934 dlltool.c:950 +#: dlltool.c:970 dlltool.c:986 msgid "Can't have LIBRARY and NAME" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÍÅÔØ LIBRARY É NAME" +msgstr "Невозможно иметь LIBRARY и NAME" -#: dlltool.c:947 +#: dlltool.c:983 #, c-format msgid "LIBRARY: %s base: %x" msgstr "LIBRARY: %s base: %x" -#: dlltool.c:1183 resrc.c:269 +#: dlltool.c:1219 resrc.c:293 #, c-format msgid "wait: %s" -msgstr "ÏÖÉÄÁÎÉÅ: %s" +msgstr "ожидание: %s" -#: 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 "ÐÏÄÐÒÏÃÅÓÓ ÐÏÌÕÞÉÌ ÆÁÔÁÌØÎÙÊ ÓÉÇÎÁÌ %d" +msgstr "подпроцесс получил фатальный сигнал %d" -#: 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 "%s ÚÁ×ÅÒÛÅÎ ÓÏ ÓÔÁÔÕÓÏÍ %d" +msgstr "%s завершен со статусом %d" -#: dlltool.c:1225 +#: dlltool.c:1261 #, c-format msgid "Sucking in info from %s section in %s" -msgstr "÷ÓÁÓÙ×ÁÅÔÓÑ ÉÎÆÏÒÍÁÃÉÑ ÉÚ ÒÁÚÄÅÌÁ %s × %s" +msgstr "Всасывается информация из раздела %s в %s" -#: dlltool.c:1350 +#: dlltool.c:1386 #, c-format msgid "Excluding symbol: %s" -msgstr "óÉÍ×ÏÌ ÉÓËÌÀÞÅÎÉÑ: %s" +msgstr "Символ исключения: %s" -#: 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 "%s: ÎÅÔ ÓÉÍ×ÏÌÏ×" +msgstr "%s: нет символов" #. 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 "þÔÅÎÉÅ ×ÙÐÏÌÎÅÎÏ %s" +msgstr "Чтение выполнено %s" -#: dlltool.c:1486 +#: dlltool.c:1522 #, c-format msgid "Unable to open object file: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÏÂßÅËÔÎÙÊ ÆÁÊÌ: %s" +msgstr "Невозможно открыть объектный файл: %s" -#: dlltool.c:1489 +#: dlltool.c:1525 #, c-format msgid "Scanning object file %s" -msgstr "óËÁÎÉÒÕÅÔÓÑ ÏÂßÅËÔÎÙÊ ÆÁÊÌ %s" +msgstr "Сканируется объектный файл %s" -#: dlltool.c:1504 +#: dlltool.c:1540 #, c-format msgid "Cannot produce mcore-elf dll from archive file: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÆÏÒÍÉÒÏ×ÁÔØ mcore-elf dll ÉÚ ÆÁÊÌÁ ÁÒÈÉ×Á: %s" +msgstr "Невозможно сформировать mcore-elf dll из файла архива: %s" -#: dlltool.c:1590 +#: dlltool.c:1626 msgid "Adding exports to output file" -msgstr "üËÓÐÏÒÔÎÙÅ ÄÁÎÎÙÅ ÄÏÂÁ×ÌÑÀÔÓÑ × ×ÙÈÏÄÎÏÊ ÆÁÊÌ" +msgstr "Экспортные данные добавляются в выходной файл" -#: dlltool.c:1638 +#: dlltool.c:1674 msgid "Added exports to output file" -msgstr "üËÓÐÏÒÔÎÙÅ ÄÁÎÎÙÅ ÄÏÂÁ×ÌÅÎÙ × ×ÙÈÏÄÎÏÊ ÆÁÊÌ" +msgstr "Экспортные данные добавлены в выходной файл" -#: dlltool.c:1759 +#: dlltool.c:1813 #, c-format msgid "Generating export file: %s" -msgstr "çÅÎÅÒÉÒÕÅÔÓÑ ÆÁÊÌ ÜËÓÐÏÒÔÁ: %s" +msgstr "Генерируется файл экспорта: %s" -#: dlltool.c:1764 +#: dlltool.c:1818 #, c-format msgid "Unable to open temporary assembler file: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ ÁÓÓÅÍÂÌÅÒÁ: %s" +msgstr "Невозможно открыть временный файл ассемблера: %s" -#: dlltool.c:1767 +#: dlltool.c:1821 #, c-format msgid "Opened temporary file: %s" -msgstr "ïÔËÒÙÔÙÊ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ: %s" +msgstr "Открытый временный файл: %s" -#: dlltool.c:1989 +#: dlltool.c:2043 msgid "Generated exports file" -msgstr "óÇÅÎÅÒÉÒÏ×ÁÎ ÆÁÊÌ ÜËÓÐÏÒÔÁ" +msgstr "Сгенерирован файл экспорта" -#: dlltool.c:2195 +#: dlltool.c:2251 #, c-format msgid "bfd_open failed open stub file: %s" -msgstr "bfd_open ÎÅ ÓÍÏÇ ÏÔËÒÙÔØ ÆÁÊÌ stub: %s" +msgstr "bfd_open не смог открыть файл stub: %s" -#: dlltool.c:2198 +#: dlltool.c:2254 #, c-format msgid "Creating stub file: %s" -msgstr "óÏÚÄÁÅÔÓÑ ÆÁÊÌ stub: %s" +msgstr "Создается файл stub: %s" -#: dlltool.c:2580 +#: dlltool.c:2672 #, c-format msgid "failed to open temporary head file: %s" -msgstr "ÓÂÏÊ ÐÒÉ ÏÔËÒÙÔÉÉ ×ÒÅÍÅÎÎÏÇÏ ÇÏÌÏ×ÎÏÇÏ ÆÁÊÌÁ: %s" +msgstr "сбой при открытии временного головного файла: %s" -#: dlltool.c:2639 +#: dlltool.c:2734 #, c-format msgid "failed to open temporary tail file: %s" -msgstr "ÓÂÏÊ ÐÒÉ ÏÔËÒÙÔÉÉ ×ÒÅÍÅÎÎÏÇÏ ËÏÎÅÞÎÏÇÏ ÆÁÊÌÁ: %s" +msgstr "сбой при открытии временного конечного файла: %s" -#: dlltool.c:2706 +#: dlltool.c:2809 #, c-format msgid "Can't open .lib file: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ .lib: %s" +msgstr "Невозможно открыть файл .lib: %s" -#: dlltool.c:2709 +#: dlltool.c:2812 #, c-format msgid "Creating library file: %s" -msgstr "óÏÚÄÁÅÔÓÑ ÆÁÊÌ ÂÉÂÌÉÏÔÅËÉ: %s" +msgstr "Создается файл библиотеки: %s" -#: dlltool.c:2792 dlltool.c:2798 +#: dlltool.c:2895 dlltool.c:2901 #, c-format msgid "cannot delete %s: %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: %s" +msgstr "невозможно удалить %s: %s" -#: dlltool.c:2803 +#: dlltool.c:2906 msgid "Created lib file" -msgstr "óÏÚÄÁÎ lib-ÆÁÊÌ" +msgstr "Создан lib-файл" -#: dlltool.c:2882 +#: dlltool.c:2985 #, c-format msgid "Warning, ignoring duplicate EXPORT %s %d,%d" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ, ÐÒÏÐÕÓËÁÅÔÓÑ ÐÏ×ÔÏÒÑÀÝÉÊÓÑ EXPORT %s %d,%d" +msgstr "Предупреждение, пропускается повторяющийся EXPORT %s %d,%d" -#: dlltool.c:2888 +#: dlltool.c:2991 #, c-format msgid "Error, duplicate EXPORT with oridinals: %s" -msgstr "ïÛÉÂËÁ, EXPORT ÐÏ×ÔÏÒÑÅÔÓÑ Ó ÐÏÒÑÄËÏ×ÙÍÉ ÞÉÓÌÉÔÅÌØÎÙÍÉ: %s" +msgstr "Ошибка, EXPORT повторяется с порядковыми числительными: %s" -#: dlltool.c:2993 +#: dlltool.c:3096 msgid "Processing definitions" -msgstr "ïÂÒÁÂÁÔÙ×ÁÀÔÓÑ ÏÐÉÓÁÎÉÑ" +msgstr "Обрабатываются описания" -#: dlltool.c:3025 +#: dlltool.c:3128 msgid "Processed definitions" -msgstr "ïÐÉÓÁÎÉÑ ÏÂÒÁÂÏÔÁÎÙ" +msgstr "Описания обработаны" #. xgetext:c-format -#: dlltool.c:3032 dllwrap.c:474 +#: dlltool.c:3135 dllwrap.c:471 #, c-format msgid "Usage %s \n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ %s <ÏÐÃÉÉ> <ÏÂßÅËÔÎÙÅ_ÆÁÊÌÙ>\n" +msgstr "Использование %s <опции> <объектные_файлы>\n" #. xgetext:c-format -#: dlltool.c:3034 +#: dlltool.c:3137 #, c-format msgid " -m --machine Create as DLL for . [default: %s]\n" -msgstr " -m --machine <ÍÁÛÉÎÁ> óÏÚÄÁÎÉÅ ËÁË DLL ÄÌÑ <ÍÁÛÉÎÙ>. [ÐÏ ÕÍÏÌÞÁÎÉÀ: %s]\n" +msgstr " -m --machine <машина> Создание как DLL для <машины>. [по умолчанию: %s]\n" -#: dlltool.c:3035 +#: dlltool.c:3138 #, c-format msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -msgstr " ×ÏÚÍÏÖÎÏ <ÍÁÛÉÎÁ>: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" +msgstr " возможно <машина>: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -#: dlltool.c:3036 +#: dlltool.c:3139 #, c-format msgid " -e --output-exp Generate an export file.\n" -msgstr " -e --output-exp <×ÙÈ_ÉÍÑ> óÏÚÄÁÎÉÅ ÆÁÊÌÁ ÜËÓÐÏÒÔÁ.\n" +msgstr " -e --output-exp <вых_имя> Создание файла экспорта.\n" -#: dlltool.c:3037 +#: dlltool.c:3140 #, c-format msgid " -l --output-lib Generate an interface library.\n" -msgstr " -l --output-lib <×ÙÈ_ÉÍÑ> óÏÚÄÁÎÉÅ ÂÉÂÌÉÏÔÅËÉ ÉÎÔÅÒÆÅÊÓÁ.\n" +msgstr " -l --output-lib <вых_имя> Создание библиотеки интерфейса.\n" -#: dlltool.c:3038 +#: dlltool.c:3141 #, c-format msgid " -a --add-indirect Add dll indirects to export file.\n" -msgstr " -a --add-indirect äÏÂÁ×ÌÅÎÉÅ ÎÅÐÒÑÍÙÈ dll × ÆÁÊÌ ÜËÓÐÏÒÔÁ.\n" +msgstr " -a --add-indirect Добавление непрямых dll в файл экспорта.\n" -#: dlltool.c:3039 +#: dlltool.c:3142 #, c-format msgid " -D --dllname Name of input dll to put into interface lib.\n" -msgstr " -D --dllname <ÉÍÑ> éÍÑ ×ÈÏÄÎÏÊ dll ÄÌÑ ÐÏÍÅÝÅÎÉÑ × ÂÉÂÌÉÏÔÅËÕ ÉÎÔÅÒÆÅÊÓÁ.\n" +msgstr " -D --dllname <имя> Имя входной dll для помещения в библиотеку интерфейса.\n" -#: dlltool.c:3040 +#: dlltool.c:3143 #, c-format msgid " -d --input-def Name of .def file to be read in.\n" -msgstr " -d --input-def éÍÑ ÆÁÊÌÁ .def ÄÌÑ ÓÞÉÔÙ×ÁÎÉÑ.\n" +msgstr " -d --input-def Имя файла .def для считывания.\n" -#: dlltool.c:3041 +#: dlltool.c:3144 #, c-format msgid " -z --output-def Name of .def file to be created.\n" -msgstr " -z --output-def éÍÑ ÓÏÚÄÁ×ÁÅÍÏÇÏ ÆÁÊÌÁ .def.\n" +msgstr " -z --output-def Имя создаваемого файла .def.\n" -#: dlltool.c:3042 +#: dlltool.c:3145 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" -msgstr " --export-all-symbols üËÓÐÏÒÔ ×ÓÅÈ ÓÉÍ×ÏÌÏ× × .def\n" +msgstr " --export-all-symbols Экспорт всех символов в .def\n" -#: dlltool.c:3043 +#: dlltool.c:3146 #, c-format msgid " --no-export-all-symbols Only export listed symbols\n" -msgstr " --no-export-all-symbols üËÓÐÏÒÔ ÔÏÌØËÏ ÐÅÒÅÞÉÓÌÅÎÎÙÈ ÓÉÍ×ÏÌÏ×\n" +msgstr " --no-export-all-symbols Экспорт только перечисленных символов\n" -#: dlltool.c:3044 +#: dlltool.c:3147 #, c-format msgid " --exclude-symbols Don't export \n" -msgstr " --exclude-symbols <ÓÐÉÓÏË> îÅ ÜËÓÐÏÒÔÉÒÏ×ÁÔØ <ÓÐÉÓÏË>\n" +msgstr " --exclude-symbols <список> Не экспортировать <список>\n" -#: dlltool.c:3045 +#: dlltool.c:3148 #, c-format msgid " --no-default-excludes Clear default exclude symbols\n" -msgstr " --no-default-excludes ïÞÉÓÔËÁ ÓÉÍ×ÏÌÏ× ÉÓËÌÀÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ\n" +msgstr " --no-default-excludes Очистка символов исключения по умолчанию\n" -#: dlltool.c:3046 +#: dlltool.c:3149 #, c-format msgid " -b --base-file Read linker generated base file.\n" -msgstr " -b --base-file þÔÅÎÉÅ ÓÏÚÄÁÎÎÏÇÏ ËÏÍÐÏÎÏ×ÝÉËÏÍ base-ÆÁÊÌÁ.\n" +msgstr " -b --base-file Чтение созданного компоновщиком base-файла.\n" -#: dlltool.c:3047 +#: dlltool.c:3150 #, c-format msgid " -x --no-idata4 Don't generate idata$4 section.\n" -msgstr " -x --no-idata4 îÅ ÓÏÚÄÁ×ÁÔØ ÒÁÚÄÅÌ idata$4.\n" +msgstr " -x --no-idata4 Не создавать раздел idata$4.\n" -#: dlltool.c:3048 +#: dlltool.c:3151 #, c-format msgid " -c --no-idata5 Don't generate idata$5 section.\n" -msgstr " -c --no-idata5 îÅ ÓÏÚÄÁ×ÁÔØ ÒÁÚÄÅÌ idata$5.\n" +msgstr " -c --no-idata5 не создавать раздел idata$5.\n" -#: dlltool.c:3049 +#: dlltool.c:3152 #, c-format -msgid " -U --add-underscore Add underscores to symbols in interface library.\n" -msgstr " -U --add-underscore äÏÂÁ×ÌÅÎÉÅ ÓÉÍ×ÏÌÏ× ÐÏÄÞÅÒËÉ×ÁÎÉÑ Ë ÓÉÍ×ÏÌÁÍ × ÂÉÂÌÉÏÔÅËÅ ÉÎÔÅÒÆÅÊÓÁ.\n" +msgid " -U --add-underscore Add underscores to all symbols in interface library.\n" +msgstr " -U --add-underscore добавлять символы подчёркивания во все символы библиотеки интерфейса.\n" -#: dlltool.c:3050 +#: dlltool.c:3153 +#, c-format +msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n" +msgstr " --add-stdcall-underscore добавлять символы подчёркивания в символы stdcall библиотеки интерфейса.\n" + +#: dlltool.c:3154 #, c-format msgid " -k --kill-at Kill @ from exported names.\n" -msgstr " -k --kill-at õÄÁÌÅÎÉÅ @ ÉÚ ÜËÓÐÏÒÔÉÒÏ×ÁÎÎÙÈ ÉÍÅÎ.\n" +msgstr " -k --kill-at Удаление @ из экспортированных имен.\n" -#: dlltool.c:3051 +#: dlltool.c:3155 #, c-format msgid " -A --add-stdcall-alias Add aliases without @.\n" -msgstr " -A --add-stdcall-alias äÏÂÁ×ÌÅÎÉÅ ÁÌÉÁÓÏ× ÂÅÚ @.\n" +msgstr " -A --add-stdcall-alias Добавление алиасов без @.\n" -#: dlltool.c:3052 +#: dlltool.c:3156 #, c-format msgid " -p --ext-prefix-alias Add aliases with .\n" -msgstr " -p --ext-prefix-alias <ÐÒÅÆÉËÓ> äÏÂÁ×ÌÅÎÉÅ ÁÌÉÁÓÏ× Ó <ÐÒÅÆÉËÓÏÍ>.\n" +msgstr " -p --ext-prefix-alias <префикс> Добавление алиасов с <префиксом>.\n" -#: dlltool.c:3053 +#: dlltool.c:3157 #, c-format msgid " -S --as Use for assembler.\n" -msgstr " -S --as <ÉÍÑ> éÓÐÏÌØÚÏ×ÁÎÉÅ <ÉÍÅÎÉ> ÄÌÑ ÁÓÓÅÍÂÌÅÒÁ.\n" +msgstr " -S --as <имя> Использование <имени> для ассемблера.\n" -#: dlltool.c:3054 +#: dlltool.c:3158 #, c-format msgid " -f --as-flags Pass to the assembler.\n" -msgstr " -f --as-flags <ÆÌÁÇÉ> ðÅÒÅÄÁÞÁ <ÆÌÁÇÏ×> × ÁÓÓÅÍÂÌÅÒ.\n" +msgstr " -f --as-flags <флаги> Передача <флагов> в ассемблер.\n" -#: dlltool.c:3055 +#: dlltool.c:3159 #, c-format msgid " -C --compat-implib Create backward compatible import library.\n" -msgstr " -C --compat-implib óÏÚÄÁÎÉÅ ÂÉÂÌÉÏÔÅËÉ ÉÍÐÏÒÔÁ Ó ÏÂÒÁÔÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔØÀ.\n" +msgstr " -C --compat-implib Создание библиотеки импорта с обратной совместимостью.\n" -#: dlltool.c:3056 +#: dlltool.c:3160 #, c-format msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" -msgstr " -n --no-delete ïÓÔÁ×ÌÑÔØ ×ÒÅÍÅÎÎÙÅ ÆÁÊÌÙ (ÐÏ×ÔÏÒ ÄÌÑ ÄÏÐ. ÚÁÝÉÔÙ).\n" +msgstr " -n --no-delete Оставлять временные файлы (повтор для доп. защиты).\n" -#: dlltool.c:3057 +#: dlltool.c:3161 #, c-format msgid " -t --temp-prefix Use to construct temp file names.\n" -msgstr " -t --temp-prefix <ÐÒÅÆÉËÓ> éÓÐÏÌØÚÏ×ÁÎÉÅ <ÐÒÅÆÉËÓÁ> ÄÌÑ ÓÏÚÄÁÎÉÑ ÉÍÅÎ ×ÒÅÍÅÎÎÙÈ ÆÁÊÌÏ×.\n" +msgstr " -t --temp-prefix <префикс> Использование <префикса> для создания имен временных файлов.\n" -#: dlltool.c:3058 +#: dlltool.c:3162 #, c-format msgid " -v --verbose Be verbose.\n" -msgstr " -v --verbose ðÏÄÒÏÂÎÙÊ ÒÅÖÉÍ.\n" +msgstr " -v --verbose Подробный режим.\n" -#: dlltool.c:3059 +#: dlltool.c:3163 #, c-format msgid " -V --version Display the program version.\n" -msgstr " -V --version ÷Ù×ÏÄ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ.\n" +msgstr " -V --version Вывод версии программы.\n" -#: dlltool.c:3060 +#: dlltool.c:3164 #, c-format msgid " -h --help Display this information.\n" -msgstr " -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ.\n" +msgstr " -h --help Вывод этой информации.\n" -#: dlltool.c:3061 +#: dlltool.c:3165 #, c-format msgid " @ Read options from .\n" -msgstr " @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>.\n" +msgstr " @<файл> Читать опции из <файла>.\n" -#: dlltool.c:3063 +#: dlltool.c:3167 #, c-format msgid " -M --mcore-elf Process mcore-elf object files into .\n" -msgstr " -M --mcore-elf <×ÙÈ_ÉÍÑ> ïÂÒÁÂÏÔËÁ ÏÂßÅËÔÎÏÇÏ ÆÁÊÌÁ mcore-elf × <×ÙÈ_ÉÍÑ>.\n" +msgstr " -M --mcore-elf <вых_имя> Обработка объектного файла mcore-elf в <вых_имя>.\n" -#: dlltool.c:3064 +#: dlltool.c:3168 #, c-format msgid " -L --linker Use as the linker.\n" -msgstr " -L --linker <ÉÍÑ> éÓÐÏÌØÚÏ×ÁÎÉÅ <ÉÍÅÎÉ> × ËÁÞÅÓÔ×Å ËÏÍÐÏÎÏ×ÝÉËÁ.\n" +msgstr " -L --linker <имя> Использование <имени> в качестве компоновщика.\n" -#: dlltool.c:3065 +#: dlltool.c:3169 #, c-format msgid " -F --linker-flags Pass to the linker.\n" -msgstr " -F --linker-flags <ÆÌÁÇÉ> ðÅÒÅÄÁÞÁ <ÆÌÁÇÏ×> ËÏÍÐÏÎÏ×ÝÉËÕ.\n" +msgstr " -F --linker-flags <флаги> Передача <флагов> компоновщику.\n" -#: dlltool.c:3181 +#: dlltool.c:3292 #, c-format msgid "Path components stripped from dllname, '%s'." -msgstr "ëÏÍÐÏÎÅÎÔÙ ÐÕÔÉ, ÉÚ×ÌÅÞÅÎÎÙÅ ÉÚ ÉÍÅÎÉ dll, '%s'." +msgstr "Компоненты пути, извлеченные из имени dll, '%s'." -#: dlltool.c:3226 +#: dlltool.c:3337 #, c-format msgid "Unable to open base-file: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ base-ÆÁÊÌ: %s" +msgstr "Невозможно открыть base-файл: %s" -#: dlltool.c:3258 +#: dlltool.c:3369 #, c-format msgid "Machine '%s' not supported" -msgstr "íÁÛÉÎÁ '%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" +msgstr "Машина '%s' не поддерживается" -#: dlltool.c:3362 dllwrap.c:204 +#: dlltool.c:3473 dllwrap.c:201 #, c-format msgid "Tried file: %s" -msgstr "ïÐÒÏÂÏ×ÁÎÎÙÊ ÆÁÊÌ: %s" +msgstr "Опробованный файл: %s" -#: dlltool.c:3369 dllwrap.c:211 +#: dlltool.c:3480 dllwrap.c:208 #, c-format msgid "Using file: %s" -msgstr "éÓÐÏÌØÚÕÅÔÓÑ ÆÁÊÌ: %s" +msgstr "Используется файл: %s" -#: dllwrap.c:294 +#: dllwrap.c:291 #, c-format msgid "Keeping temporary base file %s" -msgstr "ïÓÔÁ×ÌÑÅÔÓÑ ×ÒÅÍÅÎÎÙÊ base-ÆÁÊÌ %s" +msgstr "Оставляется временный base-файл %s" -#: dllwrap.c:296 +#: dllwrap.c:293 #, c-format msgid "Deleting temporary base file %s" -msgstr "õÄÁÌÑÅÔÓÑ ×ÒÅÍÅÎÎÙÊ base-ÆÁÊÌ %s" +msgstr "Удаляется временный base-файл %s" -#: dllwrap.c:310 +#: dllwrap.c:307 #, c-format msgid "Keeping temporary exp file %s" -msgstr "ïÓÔÁ×ÌÑÅÔÓÑ ×ÒÅÍÅÎÎÙÊ exp-ÆÁÊÌ %s" +msgstr "Оставляется временный exp-файл %s" -#: dllwrap.c:312 +#: dllwrap.c:309 #, c-format msgid "Deleting temporary exp file %s" -msgstr "õÄÁÌÑÅÔÓÑ ×ÒÅÍÅÎÎÙÊ exp-ÆÁÊÌ %s" +msgstr "Удаляется временный exp-файл %s" -#: dllwrap.c:325 +#: dllwrap.c:322 #, c-format msgid "Keeping temporary def file %s" -msgstr "ïÓÔÁ×ÌÑÅÔÓÑ ×ÒÅÍÅÎÎÙÊ def-ÆÁÊÌ %s" +msgstr "Оставляется временный def-файл %s" -#: dllwrap.c:327 +#: dllwrap.c:324 #, c-format msgid "Deleting temporary def file %s" -msgstr "õÄÁÌÑÅÔÓÑ ×ÒÅÍÅÎÎÙÊ def-ÆÁÊÌ %s" +msgstr "Удаляется временный def-файл %s" -#: dllwrap.c:475 +#: dllwrap.c:472 #, c-format msgid " Generic options:\n" -msgstr " ïÂÝÉÅ ÏÐÃÉÉ:\n" +msgstr " Общие опции:\n" -#: dllwrap.c:476 +#: dllwrap.c:473 #, c-format msgid " @ Read options from \n" -msgstr " @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" +msgstr " @<файл> Читать опции из <файла>\n" -#: dllwrap.c:477 +#: dllwrap.c:474 #, c-format msgid " --quiet, -q Work quietly\n" -msgstr " --quiet, -q íÏÌÞÁÌÉ×ÙÊ ÒÅÖÉÍ\n" +msgstr " --quiet, -q Молчаливый режим\n" -#: dllwrap.c:478 +#: dllwrap.c:475 #, c-format msgid " --verbose, -v Verbose\n" -msgstr " --verbose, -v ðÏÄÒÏÂÎÙÊ ÒÅÖÉÍ\n" +msgstr " --verbose, -v Подробный режим\n" -#: dllwrap.c:479 +#: dllwrap.c:476 #, c-format msgid " --version Print dllwrap version\n" -msgstr " --version ÷Ù×ÏÄ ×ÅÒÓÉÉ dllwrap\n" +msgstr " --version Вывод версии dllwrap\n" -#: dllwrap.c:480 +#: dllwrap.c:477 #, c-format msgid " --implib Synonym for --output-lib\n" -msgstr " --implib <×ÙÈ_ÉÍÑ> óÉÎÏÎÉÍ ÄÌÑ --output-lib\n" +msgstr " --implib <вых_имя> Синоним для --output-lib\n" -#: dllwrap.c:481 +#: dllwrap.c:478 #, c-format msgid " Options for %s:\n" -msgstr " ïÐÃÉÉ ÄÌÑ %s:\n" +msgstr " Опции для %s:\n" -#: dllwrap.c:482 +#: dllwrap.c:479 #, c-format msgid " --driver-name Defaults to \"gcc\"\n" -msgstr " --driver-name <ÄÒÁÊ×ÅÒ> úÎÁÞÅÎÉÑ ÄÌÑ \"gcc\" ÐÏ ÕÍÏÌÞÁÎÉÀ\n" +msgstr " --driver-name <драйвер> Значения для \"gcc\" по умолчанию\n" -#: dllwrap.c:483 +#: dllwrap.c:480 #, c-format msgid " --driver-flags Override default ld flags\n" -msgstr " --driver-flags <ÆÌÁÇÉ> ðÅÒÅÏÐÒÅÄÅÌÅÎÉÅ ÆÌÁÇÏ× ld ÐÏ ÕÍÏÌÞÁÎÉÀ\n" +msgstr " --driver-flags <флаги> Переопределение флагов ld по умолчанию\n" -#: dllwrap.c:484 +#: dllwrap.c:481 #, c-format msgid " --dlltool-name Defaults to \"dlltool\"\n" -msgstr " --dlltool-name úÎÁÞÅÎÉÑ ÄÌÑ \"dlltool\" ÐÏ ÕÍÏÌÞÁÎÉÀ\n" +msgstr " --dlltool-name Значения для \"dlltool\" по умолчанию\n" -#: dllwrap.c:485 +#: dllwrap.c:482 #, c-format msgid " --entry Specify alternate DLL entry point\n" -msgstr " --entry <ÐÕÎËÔ> õËÁÚÁÎÉÅ ÁÌØÔÅÒÎÁÔÉ×ÎÏÊ ÔÏÞËÉ ×ÈÏÄÁ DLL\n" +msgstr " --entry <пункт> Указание альтернативной точки входа DLL\n" -#: dllwrap.c:486 +#: dllwrap.c:483 #, c-format msgid " --image-base Specify image base address\n" -msgstr " --image-base õËÁÚÁÎÉÅ ÂÁÚÏ×ÏÇÏ ÁÄÒÅÓÁ ÏÂÒÁÚÁ\n" +msgstr " --image-base Указание базового адреса образа\n" -#: dllwrap.c:487 +#: dllwrap.c:484 #, c-format msgid " --target i386-cygwin32 or i386-mingw32\n" -msgstr " --target <ÍÁÛÉÎÁ> i386-cygwin32 ÉÌÉ i386-mingw32\n" +msgstr " --target <машина> i386-cygwin32 или i386-mingw32\n" -#: dllwrap.c:488 +#: dllwrap.c:485 #, c-format msgid " --dry-run Show what needs to be run\n" -msgstr " --dry-run ðÏËÁÚÁÔØ, ÞÔÏ ÄÏÌÖÎÏ ÂÙÔØ ÚÁÐÕÝÅÎÏ\n" +msgstr " --dry-run Показать, что должно быть запущено\n" -#: dllwrap.c:489 +#: dllwrap.c:486 #, c-format msgid " --mno-cygwin Create Mingw DLL\n" -msgstr " --mno-cygwin óÏÚÄÁÎÉÅ Mingw DLL\n" +msgstr " --mno-cygwin Создание Mingw DLL\n" -#: dllwrap.c:490 +#: dllwrap.c:487 #, c-format msgid " Options passed to DLLTOOL:\n" -msgstr " ïÐÃÉÉ, ÐÅÒÅÄÁ×ÁÅÍÙÅ × DLLTOOL:\n" +msgstr " Опции, передаваемые в DLLTOOL:\n" -#: dllwrap.c:491 +#: dllwrap.c:488 #, c-format msgid " --machine \n" -msgstr " --machine <ÍÁÛÉÎÁ>\n" +msgstr " --machine <машина>\n" -#: dllwrap.c:492 +#: dllwrap.c:489 #, c-format msgid " --output-exp Generate export file.\n" -msgstr " --output-exp <×ÙÈ_ÉÍÑ> óÏÚÄÁÎÉÅ ÆÁÊÌÁ ÜËÓÐÏÒÔÁ.\n" +msgstr " --output-exp <вых_имя> Создание файла экспорта.\n" -#: dllwrap.c:493 +#: dllwrap.c:490 #, c-format msgid " --output-lib Generate input library.\n" -msgstr " --output-lib <×ÙÈ_ÉÍÑ> óÏÚÄÁÎÉÅ ×ÈÏÄÎÏÊ ÂÉÂÌÉÏÔÅËÉ.\n" +msgstr " --output-lib <вых_имя> Создание входной библиотеки.\n" -#: dllwrap.c:494 +#: dllwrap.c:491 #, c-format msgid " --add-indirect Add dll indirects to export file.\n" -msgstr " --add-indirect äÏÂÁ×ÌÅÎÉÅ ÎÅÐÒÑÍÙÈ dll × ÆÁÊÌ ÜËÓÐÏÒÔÁ.\n" +msgstr " --add-indirect Добавление непрямых dll в файл экспорта.\n" -#: dllwrap.c:495 +#: dllwrap.c:492 #, c-format msgid " --dllname Name of input dll to put into output lib.\n" -msgstr " --dllname <ÉÍÑ> éÍÑ ×ÈÏÄÎÏÊ dll ÄÌÑ ÐÏÍÅÝÅÎÉÑ × ×ÙÈÏÄÎÕÀ ÂÉÂÌÉÏÔÅËÕ.\n" +msgstr " --dllname <имя> Имя входной dll для помещения в выходную библиотеку.\n" -#: dllwrap.c:496 +#: dllwrap.c:493 #, c-format msgid " --def Name input .def file\n" -msgstr " --def éÍÑ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ .def\n" +msgstr " --def Имя входного файла .def\n" -#: dllwrap.c:497 +#: dllwrap.c:494 #, c-format msgid " --output-def Name output .def file\n" -msgstr " --output-def éÍÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ .def\n" +msgstr " --output-def Имя выходного файла .def\n" -#: dllwrap.c:498 +#: dllwrap.c:495 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" -msgstr " --export-all-symbols üËÓÐÏÒÔ ×ÓÅÈ ÓÉÍ×ÏÌÏ× × .def\n" +msgstr " --export-all-symbols Экспорт всех символов в .def\n" -#: dllwrap.c:499 +#: dllwrap.c:496 #, c-format msgid " --no-export-all-symbols Only export .drectve symbols\n" -msgstr " --no-export-all-symbols üËÓÐÏÒÔ ÔÏÌØËÏ ÓÉÍ×ÏÌÏ× .drectve\n" +msgstr " --no-export-all-symbols Экспорт только символов .drectve\n" -#: dllwrap.c:500 +#: dllwrap.c:497 #, c-format msgid " --exclude-symbols Exclude from .def\n" -msgstr " --exclude-symbols <ÓÐÉÓÏË> éÓËÌÀÞÉÔØ <ÓÐÉÓÏË> ÉÚ .def\n" +msgstr " --exclude-symbols <список> Исключить <список> из .def\n" -#: dllwrap.c:501 +#: dllwrap.c:498 #, c-format msgid " --no-default-excludes Zap default exclude symbols\n" -msgstr " --no-default-excludes õÄÁÌÅÎÉÅ ÓÉÍ×ÏÌÏ× ÉÓËÌÀÞÅÎÉÑ ÐÏ ÕÍÏÌÞÁÎÉÀ\n" +msgstr " --no-default-excludes Удаление символов исключения по умолчанию\n" -#: dllwrap.c:502 +#: dllwrap.c:499 #, c-format msgid " --base-file Read linker generated base file\n" -msgstr " --base-file þÔÅÎÉÅ ÓÏÚÄÁÎÎÏÇÏ ËÏÍÐÏÎÏ×ÝÉËÏÍ base-ÆÁÊÌÁ.\n" +msgstr " --base-file Чтение созданного компоновщиком base-файла.\n" -#: dllwrap.c:503 +#: dllwrap.c:500 #, c-format msgid " --no-idata4 Don't generate idata$4 section\n" -msgstr " --no-idata4 îÅ ÓÏÚÄÁ×ÁÔØ ÒÁÚÄÅÌ idata$4.\n" +msgstr " --no-idata4 Не создавать раздел idata$4.\n" -#: dllwrap.c:504 +#: dllwrap.c:501 #, c-format msgid " --no-idata5 Don't generate idata$5 section\n" -msgstr " --no-idata5 îÅ ÓÏÚÄÁ×ÁÔØ ÒÁÚÄÅÌ idata$5.\n" +msgstr " --no-idata5 Не создавать раздел idata$5.\n" -#: dllwrap.c:505 +#: dllwrap.c:502 #, c-format msgid " -U Add underscores to .lib\n" -msgstr " -U äÏÂÁ×ÌÅÎÉÅ ÓÉÍ×ÏÌÏ× ÐÏÄÞÅÒËÉ×ÁÎÉÑ × .lib\n" +msgstr " -U Добавление символов подчеркивания в .lib\n" -#: dllwrap.c:506 +#: dllwrap.c:503 #, c-format msgid " -k Kill @ from exported names\n" -msgstr " -k õÄÁÌÅÎÉÅ @ ÉÚ ÜËÓÐÏÒÔÉÒÏ×ÁÎÎÙÈ ÉÍÅÎ.\n" +msgstr " -k Удаление @ из экспортированных имен.\n" -#: dllwrap.c:507 +#: dllwrap.c:504 #, c-format msgid " --add-stdcall-alias Add aliases without @\n" -msgstr " --add-stdcall-alias äÏÂÁ×ÌÅÎÉÅ ÁÌÉÁÓÏ× ÂÅÚ @\n" +msgstr " --add-stdcall-alias Добавление алиасов без @\n" -#: dllwrap.c:508 +#: dllwrap.c:505 #, c-format msgid " --as Use for assembler\n" -msgstr " --as <ÉÍÑ> éÓÐÏÌØÚÏ×ÁÎÉÅ <ÉÍÅÎÉ> ÄÌÑ ÁÓÓÅÍÂÌÅÒÁ\n" +msgstr " --as <имя> Использование <имени> для ассемблера\n" -#: dllwrap.c:509 +#: dllwrap.c:506 #, c-format msgid " --nodelete Keep temp files.\n" -msgstr " --nodelete ïÓÔÁ×ÌÑÔØ ×ÒÅÍÅÎÎÙÅ ÆÁÊÌÙ.\n" +msgstr " --nodelete Оставлять временные файлы.\n" -#: dllwrap.c:510 +#: dllwrap.c:507 #, c-format msgid " Rest are passed unmodified to the language driver\n" -msgstr " ïÓÔÁÌØÎÏÅ ÂÅÚ ÉÚÍÅÎÅÎÉÊ ÐÅÒÅÄÁÎÏ ÑÚÙËÏ×ÏÍÕ ÄÒÁÊ×ÅÒÕ\n" +msgstr " Остальное без изменений передано языковому драйверу\n" -#: dllwrap.c:782 +#: dllwrap.c:781 msgid "Must provide at least one of -o or --dllname options" -msgstr "îÅÏÂÈÏÄÉÍÏ ÐÒÅÄÏÓÔÁ×ÉÔØ ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ ÏÄÎÕ ÉÚ ÏÐÃÉÊ -o ÉÌÉ --dllname" +msgstr "Необходимо предоставить по крайней мере одну из опций -o или --dllname" -#: dllwrap.c:811 +#: dllwrap.c:810 msgid "" "no export definition file provided.\n" "Creating one, but that may not be what you want" msgstr "" -"ÎÅ ÐÒÅÄÏÓÔÁ×ÌÅÎ ÆÁÊÌ ÏÐÉÓÁÎÉÑ ÜËÓÐÏÒÔÁ.\n" -"ïÎ ÓÏÚÄÁÅÔÓÑ, ÎÏ ÜÔÏ ÍÏÖÅÔ ÂÙÔØ ÎÅ ÔÏ, ÞÔÏ ×ÁÍ ÎÕÖÎÏ" +"не предоставлен файл описания экспорта.\n" +"Он создается, но это может быть не то, что вам нужно." -#: dllwrap.c:970 +#: dllwrap.c:969 #, c-format msgid "DLLTOOL name : %s\n" -msgstr "DLLTOOL ÉÍÑ : %s\n" +msgstr "DLLTOOL имя : %s\n" -#: dllwrap.c:971 +#: dllwrap.c:970 #, c-format msgid "DLLTOOL options : %s\n" -msgstr "DLLTOOL ÏÐÃÉÉ : %s\n" +msgstr "DLLTOOL опции : %s\n" -#: dllwrap.c:972 +#: dllwrap.c:971 #, c-format msgid "DRIVER name : %s\n" -msgstr "DRIVER ÉÍÑ : %s\n" +msgstr "DRIVER имя : %s\n" -#: dllwrap.c:973 +#: dllwrap.c:972 #, c-format msgid "DRIVER options : %s\n" -msgstr "DRIVER ÏÐÃÉÉ : %s\n" +msgstr "DRIVER опции : %s\n" -#: 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 "äÌÉÎÁ ÎÅÏÂÒÁÂÁÔÙ×ÁÅÍÙÈ ÄÁÎÎÙÈ: %d\n" +msgstr "Длина необрабатываемых данных: %d\n" #: dwarf.c:237 msgid "badly formed extended line op encountered!\n" -msgstr "×ÓÔÒÅÞÅÎ ÎÅ×ÅÒÎÏ ÓÆÏÒÍÉÒÏ×ÁÎÎÙÊ ÒÁÓÛÉÒÅÎÎÙÊ line-up!\n" +msgstr "встречен неверно сформированный расширенный line-up!\n" #: dwarf.c:244 #, c-format msgid " Extended opcode %d: " -msgstr " òÁÓÛÉÒÅÎÎÙÊ ËÏÄ ÏÐÅÒÁÃÉÉ %d: " +msgstr " Расширенный код операции %d: " #: dwarf.c:249 #, c-format @@ -1181,30 +1203,30 @@ msgid "" "End of Sequence\n" "\n" msgstr "" -"ëÏÎÅà ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ\n" +"Конец последовательности\n" "\n" #: dwarf.c:255 #, c-format msgid "set Address to 0x%lx\n" -msgstr "ÕÓÔÁÎÏ×ËÁ ÁÄÒÅÓÁ × 0x%lx\n" +msgstr "установка адреса в 0x%lx\n" #: dwarf.c:260 #, c-format msgid " define new File Table entry\n" -msgstr " ÏÐÒÅÄÅÌÅÎÉÅ ÎÏ×ÏÇÏ ÐÕÎËÔÁ ôÁÂÌÉÃÙ ÆÁÊÌÏ×\n" +msgstr " определение нового пункта Таблицы файлов\n" -#: dwarf.c:261 dwarf.c:1944 +#: dwarf.c:261 dwarf.c:1928 #, c-format msgid " Entry\tDir\tTime\tSize\tName\n" -msgstr " ðÕÎËÔ\tëÁÔÁÌÏÇ\t÷ÒÅÍÑ\tòÁÚÍÅÒ\téÍÑ\n" +msgstr " Пункт\tКаталог\tВремя\tРазмер\tИмя\n" #: dwarf.c:263 #, c-format msgid " %d\t" msgstr " %d\t" -#: 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 "%lu\t" @@ -1221,187 +1243,183 @@ msgstr "" #: dwarf.c:275 #, c-format msgid "UNKNOWN: length %d\n" -msgstr "îåéú÷åóôîùê: ÄÌÉÎÁ %d\n" +msgstr "НЕИЗВЕСТНЫЙ: длина %d\n" #: dwarf.c:288 msgid "" -msgstr "<ÎÅÔ ÒÁÚÄÅÌÁ .debug_str>" +msgstr "<нет раздела .debug_str>" #: dwarf.c:294 #, c-format msgid "DW_FORM_strp offset too big: %lx\n" -msgstr "óÍÅÝÅÎÉÅ DW_FORM_strp ÓÌÉÛËÏÍ ÂÏÌØÛÏÅ: %lx\n" +msgstr "Смещение DW_FORM_strp слишком большое: %lx\n" #: dwarf.c:295 msgid "" -msgstr "<ÓÍÅÝÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ>" +msgstr "<смещение слишком велико>" #: dwarf.c:528 #, c-format msgid "Unknown TAG value: %lx" -msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ TAG: %lx" +msgstr "Неизвестное значение TAG: %lx" #: dwarf.c:564 #, c-format msgid "Unknown FORM value: %lx" -msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ FORM: %lx" +msgstr "Неизвестное значение FORM: %lx" #: dwarf.c:573 #, c-format msgid " %lu byte block: " -msgstr " %lu-ÂÁÊÔÏ×ÙÊ ÂÌÏË: " +msgstr " %lu-байтовый блок: " -#: dwarf.c:907 +#: dwarf.c:910 #, c-format msgid "(User defined location op)" -msgstr "(ïÐÒÅÄÅÌÅÎÎÏÅ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÒÁÚÍÅÝÅÎÉÅ ÏÐÅÒÁÃÉÉ)" +msgstr "(Определенное пользователем размещение операции)" -#: dwarf.c:909 +#: dwarf.c:912 #, c-format msgid "(Unknown location op)" -msgstr "(îÅÉÚ×ÅÓÔÎÏÅ ÒÁÚÍÅÝÅÎÉÅ ÏÐÅÒÁÃÉÉ)" +msgstr "(Неизвестное размещение операции)" -#: dwarf.c:955 +#: dwarf.c:958 msgid "Internal error: DWARF version is not 2 or 3.\n" -msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: ÎÏÍÅÒ ×ÅÒÓÉÉ DWARF ÎÅ 2 ÉÌÉ 3.\n" +msgstr "Внутренняя ошибка: номер версии DWARF не 2 или 3.\n" -#: dwarf.c:1053 +#: dwarf.c:1056 msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" -msgstr "DW_FORM_data8 ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ, ËÏÇÄÁ sizeof (ÄÌÉÎÎÏÅ ÃÅÌÏÅ ÞÉÓÌÏ ÂÅÚ ÚÎÁËÁ) != 8\n" +msgstr "DW_FORM_data8 не поддерживается, когда sizeof (длинное целое число без знака) != 8\n" -#: dwarf.c:1102 +#: dwarf.c:1105 #, c-format msgid " (indirect string, offset: 0x%lx): %s" -msgstr " (ËÏÓ×ÅÎÎÁÑ ÓÔÒÏËÁ, ÓÍÅÝÅÎÉÅ: 0x%lx): %s" +msgstr " (косвенная строка, смещение: 0x%lx): %s" -#: dwarf.c:1111 +#: dwarf.c:1114 #, c-format msgid "Unrecognized form: %lu\n" -msgstr "îÅÒÁÓÐÏÚÎÁÎÎÁÑ ÆÏÒÍÁ: %lu\n" +msgstr "Нераспознанная форма: %lu\n" -#: dwarf.c:1196 +#: dwarf.c:1199 #, c-format msgid "(not inlined)" -msgstr "(ÎÅ ×ÎÕÔÒÉÓÔÒÏÞÎÙÊ)" +msgstr "(не внутристрочный)" -#: dwarf.c:1199 +#: dwarf.c:1202 #, c-format msgid "(inlined)" -msgstr "(×ÎÕÔÒÉÓÔÒÏÞÎÙÊ)" +msgstr "(внутристрочный)" -#: dwarf.c:1202 +#: dwarf.c:1205 #, c-format msgid "(declared as inline but ignored)" -msgstr "(ÏÂßÑ×ÌÅÎ ËÁË ×ÎÕÔÒÉÓÔÒÏÞÎÙÊ, ÎÏ ÐÒÏÐÕÝÅÎ)" +msgstr "(объявлен как внутристрочный, но пропущен)" -#: dwarf.c:1205 +#: dwarf.c:1208 #, c-format msgid "(declared as inline and inlined)" -msgstr "(ÏÂßÑ×ÌÅÎ ËÁË ×ÎÕÔÒÉÓÔÒÏÞÎÙÊ, ÔÁË É ÅÓÔØ)" +msgstr "(объявлен как внутристрочный, так и есть)" -#: dwarf.c:1208 +#: dwarf.c:1211 #, c-format msgid " (Unknown inline attribute value: %lx)" -msgstr " (îÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ ×ÎÕÔÒÉÓÔÒÏÞÎÏÇÏ ÁÔÒÉÂÕÔÁ: %lx)" +msgstr " (Неизвестное значение внутристрочного атрибута: %lx)" -#: dwarf.c:1354 dwarf.c:2484 +#: dwarf.c:1368 dwarf.c:2462 #, c-format msgid " [without DW_AT_frame_base]" -msgstr " [ÂÅÚ DW_AT_frame_base]" +msgstr " [без DW_AT_frame_base]" -#: dwarf.c:1357 +#: dwarf.c:1371 #, c-format msgid "(location list)" -msgstr "(ÓÐÉÓÏË ÍÅÓÔÏÐÏÌÏÖÅÎÉÑ)" +msgstr "(список местоположения)" -#: dwarf.c:1475 +#: dwarf.c:1489 #, c-format msgid "Unknown AT value: %lx" -msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÚÎÁÞÅÎÉÅ AT: %lx " +msgstr "Неизвестное значение AT: %lx" -#: dwarf.c:1544 +#: dwarf.c:1558 #, c-format msgid "No comp units in %s section ?" -msgstr "÷ ÒÁÚÄÅÌÅ %s ÎÅÔ ÜÌÅÍÅÎÔÏ× comp?" +msgstr "В разделе %s нет элементов comp?" -#: dwarf.c:1553 +#: dwarf.c:1567 #, c-format msgid "Not enough memory for a debug info array of %u entries" -msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ ÄÌÑ ÍÁÓÓÉ×Á Ó ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÅÊ ÉÚ %u ÜÌÅÍÅÎÔÏ×" +msgstr "Недостаточно памяти для массива с отладочной информацией из %u элементов" -#: dwarf.c:1561 dwarf.c:2573 +#: dwarf.c:1575 dwarf.c:2550 #, c-format msgid "" "The section %s contains:\n" "\n" msgstr "" -"òÁÚÄÅÌ %s ÓÏÄÅÒÖÉÔ:\n" +"Раздел %s содержит:\n" "\n" -#: dwarf.c:1569 +#: dwarf.c:1583 #, c-format msgid "Unable to locate %s section!\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÒÁÚÍÅÝÅÎÉÅ ÒÁÚÄÅÌÁ %s!\n" +msgstr "Невозможно определить размещение раздела %s!\n" -#: dwarf.c:1635 +#: dwarf.c:1646 #, c-format msgid " Compilation Unit @ offset 0x%lx:\n" -msgstr " åÄÉÎÉÃÁ ËÏÍÐÉÌÑÃÉÉ @ ÓÍÅÝÅÎÉÅ 0x%lx:\n" +msgstr " Единица компиляции @ смещение 0x%lx:\n" -#: dwarf.c:1636 +#: dwarf.c:1647 #, c-format msgid " Length: %ld\n" -msgstr " äÌÉÎÁ: %ld\n" +msgstr " Длина: %ld\n" -#: dwarf.c:1637 +#: dwarf.c:1648 #, c-format msgid " Version: %d\n" -msgstr " ÷ÅÒÓÉÑ: %d\n" +msgstr " Версия: %d\n" -#: dwarf.c:1638 +#: dwarf.c:1649 #, c-format msgid " Abbrev Offset: %ld\n" -msgstr " óÍÅÝ. ÁÂÂÒÅ×: %ld\n" +msgstr " Смещ. аббрев: %ld\n" -#: dwarf.c:1639 +#: dwarf.c:1650 #, c-format msgid " Pointer Size: %d\n" -msgstr " òÁÚÍ. ÕËÁÚÁÔ: %d\n" +msgstr " Разм. указат: %d\n" + +#: dwarf.c:1656 +#, c-format +msgid "Debug info is corrupted, length is invalid (section is %lu bytes)\n" +msgstr "Данные отладки повреждены, недопустимая длина (раздел составляет %lu байт)\n" -#: dwarf.c:1644 +#: dwarf.c:1665 msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" -msgstr "óÅÊÞÁÓ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÏÔÌÁÄÏÞÎÁÑ ÉÎÆÏÒÍÁÃÉÑ ÔÏÌØËÏ ÄÌÑ DWARF ×ÅÒÓÉÉ 2 É 3.\n" +msgstr "Сейчас поддерживается отладочная информация только для DWARF версии 2 и 3.\n" -#: dwarf.c:1685 +#: dwarf.c:1674 #, c-format -msgid "Unable to locate entry %lu in the abbreviation table\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÒÁÚÍÅÝÅÎÉÅ ÐÕÎËÔÁ %lu × ÔÁÂÌÉÃÅ ÁÂÂÒÅ×ÉÁÃÉÉ\n" +msgid "Debug info is corrupted, abbrev offset is invalid (section is %lu bytes)\n" +msgstr "Данные отладки повреждены, недопустимое смещение аббревиатуры (раздел составляет %lu байт)\n" -#: dwarf.c:1691 +#: dwarf.c:1702 #, c-format -msgid " <%d><%lx>: Abbrev Number: %lu (%s)\n" -msgstr " <%d><%lx>: îÏÍÅÒ ÁÂÂÒÅ×: %lu (%s)\n" +msgid " <%d><%lx>: Abbrev Number: %lu" +msgstr " <%d><%lx>: номер аббревиатуры: %lu" -#: dwarf.c:1785 +#: dwarf.c:1722 #, c-format -msgid "%s section needs a populated .debug_info section\n" -msgstr "òÁÚÄÅÌÕ %s ÎÅÏÂÈÏÄÉÍ ÚÁÐÏÌÎÅÎÎÙÊ ÒÁÚÄÅÌ .debug_info\n" +msgid "Unable to locate entry %lu in the abbreviation table\n" +msgstr "Невозможно определить размещение пункта %lu в таблице аббревиации\n" -#: dwarf.c:1792 +#: dwarf.c:1728 #, c-format -msgid "%s section has more comp units than .debug_info section\n" -msgstr "òÁÚÄÅÌ %s ÓÏÄÅÒÖÉÔ ÂÏÌØÛÅ ÜÌÅÍÅÎÔÏ× comp, ÞÅÍ ÒÁÚÄÅÌ .debug_info\n" +msgid " (%s)\n" +msgstr " (%s)\n" -#: dwarf.c:1794 -#, c-format -msgid "" -"assuming that the pointer size is %d, from the last comp unit in .debug_info\n" -"\n" -msgstr "" -"ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ, ÞÔÏ ÒÁÚÍÅÒ ÕËÁÚÁÔÅÌÑ - %d, ÏÔ ÐÏÓÌÅÄÎÅÇÏ ÜÌÅÍÅÎÔÁ comp × .debug_info\n" -"\n" - -#: dwarf.c:1819 +#: dwarf.c:1813 #, c-format msgid "" "\n" @@ -1409,839 +1427,852 @@ msgid "" "\n" msgstr "" "\n" -"äÁÍÐ ÄÌÑ ÏÔÌÁÄËÉ ÓÏÄÅÒÖÉÍÏÇÏ ÒÁÚÄÅÌÁ %s:\n" +"Дамп для отладки содержимого раздела %s:\n" "\n" -#: dwarf.c:1858 +#: dwarf.c:1851 msgid "The line info appears to be corrupt - the section is too small\n" -msgstr "ðÏÈÏÖÅ, ÞÔÏ ÓÔÒÏËÁ ÉÎÆÏ ÐÏ×ÒÅÖÄÅÎÁ - ÒÁÚÄÅÌ ÓÌÉÛËÏÍ ÍÁÌ\n" +msgstr "Похоже, что строка инфо повреждена - раздел слишком мал\n" -#: dwarf.c:1867 +#: dwarf.c:1860 msgid "Only DWARF version 2 and 3 line info is currently supported.\n" -msgstr "óÅÊÞÁÓ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ ÓÔÒÏËÉ ÉÎÆÏ ÔÏÌØËÏ ÄÌÑ DWARF ×ÅÒÓÉÉ 2 É 3.\n" +msgstr "Сейчас поддерживаются строки инфо только для DWARF версии 2 и 3.\n" -#: dwarf.c:1894 +#: dwarf.c:1881 #, c-format msgid " Length: %ld\n" -msgstr " äÌÉÎÁ: %ld\n" +msgstr " Длина: %ld\n" -#: dwarf.c:1895 +#: dwarf.c:1882 #, c-format msgid " DWARF Version: %d\n" -msgstr " DWARF ×ÅÒÓÉÑ: %d\n" +msgstr " DWARF версия: %d\n" -#: dwarf.c:1896 +#: dwarf.c:1883 #, c-format msgid " Prologue Length: %d\n" -msgstr " äÌÉÎÁ ÐÒÏÌÏÇÁ: %d\n" +msgstr " Длина пролога: %d\n" -#: dwarf.c:1897 +#: dwarf.c:1884 #, c-format msgid " Minimum Instruction Length: %d\n" -msgstr " íÉÎÉÍ. ÄÌÉÎÁ ÉÎÓÔÒÕËÃÉÉ: %d\n" +msgstr " Миним. длина инструкции: %d\n" -#: dwarf.c:1898 +#: dwarf.c:1885 #, c-format msgid " Initial value of 'is_stmt': %d\n" -msgstr " îÁÞ. ÚÎÁÞÅÎÉÅ 'is_stmt': %d\n" +msgstr " Нач. значение 'is_stmt': %d\n" -#: dwarf.c:1899 +#: dwarf.c:1886 #, c-format msgid " Line Base: %d\n" -msgstr " ïÓÎÏ×ÁÎÉÅ ÓÔÒÏËÉ: %d\n" +msgstr " Основание строки: %d\n" -#: dwarf.c:1900 +#: dwarf.c:1887 #, c-format msgid " Line Range: %d\n" -msgstr " äÉÁÐÁÚÏÎ ÓÔÒÏËÉ: %d\n" +msgstr " Диапазон строки: %d\n" -#: dwarf.c:1901 +#: dwarf.c:1888 #, c-format msgid " Opcode Base: %d\n" -msgstr " ïÓÎÏ×ÁÎÉÅ ËÏÄÁ ÏÐÅÒÁÃÉÉ: %d\n" - -#: dwarf.c:1902 -#, c-format -msgid " (Pointer size: %u)%s\n" -msgstr " (òÁÚÍÅÒ ÕËÁÚÁÔÅÌÑ: %u)%s\n" +msgstr " Основание кода операции: %d\n" -#: dwarf.c:1913 +#: dwarf.c:1897 #, c-format msgid "" "\n" " Opcodes:\n" msgstr "" "\n" -" ëÏÄÙ ÏÐÅÒÁÃÉÊ:\n" +" Коды операций:\n" -#: dwarf.c:1916 +#: dwarf.c:1900 #, c-format msgid " Opcode %d has %d args\n" -msgstr " ëÏÄ ÏÐÅÒÁÃÉÉ %d ÓÏÄÅÒÖÉÔ %d ÁÒÇÕÍÅÎÔÏ×\n" +msgstr " Код операции %d содержит %d аргументов\n" -#: dwarf.c:1922 +#: dwarf.c:1906 #, c-format msgid "" "\n" " The Directory Table is empty.\n" msgstr "" "\n" -" ôÁÂÌÉÃÁ ËÁÔÁÌÏÇÏ× ÐÕÓÔÁ.\n" +" Таблица каталогов пуста.\n" -#: dwarf.c:1925 +#: dwarf.c:1909 #, c-format msgid "" "\n" " The Directory Table:\n" msgstr "" "\n" -" ôÁÂÌÉÃÁ ËÁÔÁÌÏÇÏ×:\n" +" Таблица каталогов:\n" -#: dwarf.c:1929 +#: dwarf.c:1913 #, c-format msgid " %s\n" msgstr " %s\n" -#: dwarf.c:1940 +#: dwarf.c:1924 #, c-format msgid "" "\n" " The File Name Table is empty.\n" msgstr "" "\n" -" ôÁÂÌÉÃÁ ÉÍÅÎ ÆÁÊÌÏ× ÐÕÓÔÁ.\n" +" Таблица имен файлов пуста.\n" -#: dwarf.c:1943 +#: dwarf.c:1927 #, c-format msgid "" "\n" " The File Name Table:\n" msgstr "" "\n" -" ôÁÂÌÉÃÁ ÉÍÅÎ ÆÁÊÌÏ×:\n" +" Таблица имен файлов:\n" -#: dwarf.c:1951 +#: dwarf.c:1935 #, c-format msgid " %d\t" msgstr " %d\t" -#: dwarf.c:1962 +#: dwarf.c:1946 #, c-format msgid "%s\n" msgstr "%s\n" #. Now display the statements. -#: dwarf.c:1970 +#: dwarf.c:1954 #, c-format msgid "" "\n" " Line Number Statements:\n" msgstr "" "\n" -" ïÐÅÒÁÔÏÒÙ ÎÏÍÅÒÁ ÓÔÒÏËÉ:\n" +" Операторы номера строки:\n" -#: dwarf.c:1986 +#: dwarf.c:1970 #, c-format msgid " Special opcode %d: advance Address by %lu to 0x%lx" -msgstr " óÐÅÃÉÁÌØÎÙÊ ËÏÄ ÏÐÅÒÁÃÉÉ %d: ÐÒÏÄ×ÉÖÅÎÉÅ ÁÄÒÅÓÁ ÎÁ %lu × 0x%lx" +msgstr " Специальный код операции %d: продвижение адреса на %lu в 0x%lx" -#: dwarf.c:1990 +#: dwarf.c:1974 #, c-format msgid " and Line by %d to %d\n" -msgstr " É ÓÔÒÏËÉ ÎÁ %d × %d\n" - -#: dwarf.c:1998 -msgid "Extend line ops need a valid pointer size, guessing at 4\n" -msgstr "äÌÑ ÒÁÓÛÉÒÅÎÎÙÈ ËÏÄÏ× ÏÐÅÒÁÃÉÊ ÎÕÖÅÎ ×ÅÒÎÙÊ ÒÁÚÍÅÒ ÕËÁÚÁÔÅÌÑ; ÐÒÅÄÐÏÌÁÇÁÅÔÓÑ 4\n" +msgstr " и строки на %d в %d\n" -#: dwarf.c:2007 +#: dwarf.c:1984 #, c-format msgid " Copy\n" -msgstr " ëÏÐÉÑ\n" +msgstr " Копия\n" -#: dwarf.c:2015 +#: dwarf.c:1992 #, c-format msgid " Advance PC by %lu to 0x%lx\n" -msgstr " ðÒÏÄ×ÉÖÅÎÉÅ ÓÞ£ÔÞÉËÁ ËÏÍÁÎÄ ÎÁ %lu × 0x%lx\n" +msgstr " Продвижение счётчика команд на %lu в 0x%lx\n" -#: dwarf.c:2023 +#: dwarf.c:2000 #, c-format msgid " Advance Line by %d to %d\n" -msgstr " ðÒÏÄ×ÉÖÅÎÉÅ ÓÔÒÏËÉ ÎÁ %d × %d\n" +msgstr " Продвижение строки на %d в %d\n" -#: dwarf.c:2030 +#: dwarf.c:2007 #, c-format msgid " Set File Name to entry %d in the File Name Table\n" -msgstr " õÓÔÁÎÏ×ËÁ ÉÍÅÎÉ ÆÁÊÌÁ × ÐÕÎËÔ %d × ÔÁÂÌÉÃÅ ÉÍÅÎ ÆÁÊÌÏ×\n" +msgstr " Установка имени файла в пункт %d в таблице имен файлов\n" -#: dwarf.c:2038 +#: dwarf.c:2015 #, c-format msgid " Set column to %lu\n" -msgstr " õÓÔÁÎÏ×ËÁ ÓÔÏÌÂÃÁ × %lu\n" +msgstr " Установка столбца в %lu\n" -#: dwarf.c:2045 +#: dwarf.c:2022 #, c-format msgid " Set is_stmt to %d\n" -msgstr " õÓÔÁÎÏ×ËÁ is_stmt × %d\n" +msgstr " Установка is_stmt в %d\n" -#: dwarf.c:2050 +#: dwarf.c:2027 #, c-format msgid " Set basic block\n" -msgstr " õÓÔÁÎÏ×ËÁ ÂÁÚÏ×ÏÇÏ ÂÌÏËÁ\n" +msgstr " Установка базового блока\n" -#: dwarf.c:2058 +#: dwarf.c:2035 #, c-format msgid " Advance PC by constant %lu to 0x%lx\n" -msgstr " ðÒÏÄ×ÉÖÅÎÉÅ ÓÞ£ÔÞÉËÁ ËÏÍÁÎÄ ÎÁ ÐÏÓÔÏÑÎÎÕÀ %lu × 0x%lx\n" +msgstr " Продвижение счётчика команд на постоянную %lu в 0x%lx\n" -#: dwarf.c:2066 +#: dwarf.c:2043 #, c-format msgid " Advance PC by fixed size amount %lu to 0x%lx\n" -msgstr " ðÒÏÄ×ÉÖÅÎÉÅ ÓÞ£ÔÞÉËÁ ËÏÍÁÎÄ ÎÁ ×ÅÌÉÞÉÎÕ ÆÉËÓÉÒÏ×ÁÎÎÏÇÏ ÒÁÚÍÅÒÁ %lu × 0x%lx\n" +msgstr " Продвижение счётчика команд на величину фиксированного размера %lu в 0x%lx\n" -#: dwarf.c:2071 +#: dwarf.c:2048 #, c-format msgid " Set prologue_end to true\n" -msgstr " õÓÔÁÎÏ×ËÁ prologue_end × `ÉÓÔÉÎÁ'\n" +msgstr " Установка prologue_end в `истина'\n" -#: dwarf.c:2075 +#: dwarf.c:2052 #, c-format msgid " Set epilogue_begin to true\n" -msgstr " õÓÔÁÎÏ×ËÁ epilogue_begin × `ÉÓÔÉÎÁ'\n" +msgstr " Установка epilogue_begin в `истина'\n" -#: dwarf.c:2081 +#: dwarf.c:2058 #, c-format msgid " Set ISA to %lu\n" -msgstr " õÓÔÁÎÏ×ËÁ ISA × %lu\n" +msgstr " Установка ISA в %lu\n" -#: dwarf.c:2085 +#: dwarf.c:2062 #, c-format msgid " Unknown opcode %d with operands: " -msgstr " îÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÐÅÒÁÃÉÉ %d Ó ÏÐÅÒÁÎÄÁÍÉ: " +msgstr " Неизвестный код операции %d с операндами: " -#: 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 "" -"óÏÄÅÒÖÉÍÏÅ ÒÁÚÄÅÌÁ %s:\n" +"Содержимое раздела %s:\n" "\n" -#: dwarf.c:2151 +#: dwarf.c:2128 msgid "Only DWARF 2 and 3 pubnames are currently supported\n" -msgstr "óÅÊÞÁÓ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ pubname ÔÏÌØËÏ ÄÌÑ DWARF ×ÅÒÓÉÉ 2 É 3\n" +msgstr "Сейчас поддерживаются pubname только для DWARF версии 2 и 3\n" -#: dwarf.c:2158 +#: dwarf.c:2135 #, c-format msgid " Length: %ld\n" -msgstr " äÌÉÎÁ: %ld\n" +msgstr " Длина: %ld\n" -#: dwarf.c:2160 +#: dwarf.c:2137 #, c-format msgid " Version: %d\n" -msgstr " ÷ÅÒÓÉÑ: %d\n" +msgstr " Версия: %d\n" -#: dwarf.c:2162 +#: dwarf.c:2139 #, c-format msgid " Offset into .debug_info section: %ld\n" -msgstr " óÍÅÝÅÎÉÅ × ÒÁÚÄÅÌ .debug_info: %ld\n" +msgstr " Смещение в раздел .debug_info: %ld\n" -#: dwarf.c:2164 +#: dwarf.c:2141 #, c-format msgid " Size of area in .debug_info section: %ld\n" -msgstr " òÁÚÍ. ÏÂÌÁÓÔÉ × ÒÁÚÄÅÌÅ .debug_info: %ld\n" +msgstr " Разм. области в разделе .debug_info: %ld\n" -#: dwarf.c:2167 +#: dwarf.c:2144 #, c-format msgid "" "\n" " Offset\tName\n" msgstr "" "\n" -" óÍÅÝÅÎÉÅ\téÍÑ\n" +" Смещение\tИмя\n" -#: dwarf.c:2218 +#: dwarf.c:2195 #, c-format msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" -msgstr " DW_MACINFO_start_file - ÎÏÍÅÒ_ÓÔÒÏËÉ: %d ÎÏÍÅÒ_ÆÁÊÌÁ: %d\n" +msgstr " DW_MACINFO_start_file - номер_строки: %d номер_файла: %d\n" -#: dwarf.c:2224 +#: dwarf.c:2201 #, c-format msgid " DW_MACINFO_end_file\n" msgstr " DW_MACINFO_end_file\n" -#: dwarf.c:2232 +#: dwarf.c:2209 #, c-format msgid " DW_MACINFO_define - lineno : %d macro : %s\n" -msgstr " DW_MACINFO_define - ÎÏÍÅÒ_ÓÔÒÏËÉ : %d ÍÁËÒÏ : %s\n" +msgstr " DW_MACINFO_define - номер_строки : %d макро : %s\n" -#: dwarf.c:2241 +#: dwarf.c:2218 #, c-format msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" -msgstr " DW_MACINFO_undef - ÎÏÍÅÒ_ÓÔÒÏËÉ : %d ÍÁËÒÏ : %s\n" +msgstr " DW_MACINFO_undef - номер_строки : %d макро : %s\n" -#: dwarf.c:2253 +#: dwarf.c:2230 #, c-format msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" -msgstr " DW_MACINFO_vendor_ext - ËÏÎÓÔÁÎÔÁ : %d ÓÔÒÏËÁ : %s\n" +msgstr " DW_MACINFO_vendor_ext - константа : %d строка : %s\n" -#: dwarf.c:2282 +#: dwarf.c:2259 #, c-format msgid " Number TAG\n" -msgstr " þÉÓÌÏ TAG\n" +msgstr " Число TAG\n" -#: dwarf.c:2288 +#: dwarf.c:2265 #, c-format msgid " %ld %s [%s]\n" msgstr " %ld %s [%s]\n" -#: dwarf.c:2291 +#: dwarf.c:2268 msgid "has children" -msgstr "ÉÍÅÅÔ ÐÏÔÏÍËÏ×" +msgstr "имеет потомков" -#: dwarf.c:2291 +#: dwarf.c:2268 msgid "no children" -msgstr "ÎÅÔ ÐÏÔÏÍËÏ×" +msgstr "нет потомков" -#: dwarf.c:2294 +#: dwarf.c:2271 #, c-format msgid " %-18s %s\n" msgstr " %-18s %s\n" -#: dwarf.c:2327 dwarf.c:2510 dwarf.c:2684 +#: dwarf.c:2304 dwarf.c:2488 dwarf.c:2675 #, c-format msgid "" "\n" "The %s section is empty.\n" msgstr "" "\n" -"òÁÚÄÅÌ %s ÐÕÓÔ.\n" +"Раздел %s пуст.\n" #. 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 "óÐÉÓËÉ ÍÅÓÔÏÐÏÌÏÖÅÎÉÊ × ÒÁÚÄÅÌÅ .debug_info ÎÅ ÕÐÏÒÑÄÏÞÅÎÙ ÐÏ ×ÏÚÒÁÓÔÁÎÉÀ!\n" +msgstr "Списки местоположений в разделе .debug_info не упорядочены по возрастанию!\n" -#: dwarf.c:2375 +#: dwarf.c:2352 msgid "No location lists in .debug_info section!\n" -msgstr "÷ ÒÁÚÄÅÌÅ .debug_info ÎÅÔ ÓÐÉÓËÏ× ÍÅÓÔÏÐÏÌÏÖÅÎÉÊ!\n" +msgstr "В разделе .debug_info нет списков местоположений!\n" -#: dwarf.c:2379 +#: dwarf.c:2357 #, c-format msgid "Location lists in %s section start at 0x%lx\n" -msgstr "óÐÉÓËÉ ÍÅÓÔÏÐÏÌÏÖÅÎÉÊ × ÒÁÚÄÅÌÅ %s ÎÁÞÉÎÁÀÔÓÑ Ó 0x%lx\n" +msgstr "Списки местоположений в разделе %s начинаются с 0x%lx\n" -#: dwarf.c:2383 +#: dwarf.c:2361 #, c-format msgid " Offset Begin End Expression\n" -msgstr " óÍÅÝ. îÁÞÁÌÏ ëÏÎÅà òÁÓÛÉÒÅÎÉÅ\n" +msgstr " Смещ. Начало Конец Расширение\n" -#: dwarf.c:2414 +#: dwarf.c:2392 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" -msgstr "÷ ÒÁÚÄÅÌÅ .debug_loc ÐÒÉÓÕÔÓÔ×ÕÅÔ ÄÙÒÁ [0x%lx - 0x%lx].\n" +msgstr "В разделе .debug_loc присутствует дыра [0x%lx - 0x%lx].\n" -#: dwarf.c:2417 +#: dwarf.c:2395 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" -msgstr "÷ ÒÁÚÄÅÌÅ .debug_loc ÐÒÉÓÕÔÓÔ×ÕÅÔ ÐÅÒÅËÒÙÔÉÅ [0x%lx - 0x%lx].\n" +msgstr "В разделе .debug_loc присутствует перекрытие [0x%lx - 0x%lx].\n" -#: dwarf.c:2424 +#: dwarf.c:2402 #, c-format msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" -msgstr "óÍÅÝÅÎÉÅ 0x%lx ÂÏÌØÛÅ, ÞÅÍ ÒÁÚÍÅÒ ÒÁÚÄÅÌÁ .debug_loc.\n" +msgstr "Смещение 0x%lx больше, чем размер раздела .debug_loc.\n" -#: 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 "óÐÉÓÏË ÍÅÓÔÏÐÏÌÏÖÅÎÉÊ, ÎÁÞÉÎÁÑ ÓÏ ÓÍÅÝÅÎÉÑ 0x%lx, ÎÅ ÚÁ×ÅÒÛ£Î.\n" +msgstr "Список местоположений, начиная со смещения 0x%lx, не завершён.\n" -#: dwarf.c:2445 dwarf.c:2784 +#: dwarf.c:2423 dwarf.c:2776 #, c-format msgid " %8.8lx \n" -msgstr " %8.8lx <ëÏÎÅà ÓÐÉÓËÁ>\n" +msgstr " %8.8lx <Конец списка>\n" -#: dwarf.c:2453 +#: dwarf.c:2431 #, c-format msgid " %8.8lx %8.8lx %8.8lx (base address)\n" -msgstr " %8.8lx %8.8lx %8.8lx (ÂÁÚÏ×ÙÊ ÁÄÒÅÓ)\n" +msgstr " %8.8lx %8.8lx %8.8lx (базовый адрес)\n" -#: dwarf.c:2487 dwarf.c:2801 +#: dwarf.c:2465 dwarf.c:2793 msgid " (start == end)" -msgstr " (ÎÁÞÁÌÏ == ËÏÎÅÃ)" +msgstr " (начало == конец)" -#: dwarf.c:2489 dwarf.c:2803 +#: dwarf.c:2467 dwarf.c:2795 msgid " (start > end)" -msgstr " (ÎÁÞÁÌÏ > ËÏÎÅÃ)" +msgstr " (начало > конец)" -#: dwarf.c:2618 +#: dwarf.c:2596 msgid "Only DWARF 2 and 3 aranges are currently supported.\n" -msgstr "óÅÊÞÁÓ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ aganges ÔÏÌØËÏ ÄÌÑ DWARF ×ÅÒÓÉÉ 2 É 3.\n" +msgstr "Сейчас поддерживаются aganges только для DWARF версии 2 и 3.\n" -#: dwarf.c:2622 +#: dwarf.c:2600 #, c-format msgid " Length: %ld\n" -msgstr " äÌÉÎÁ: %ld\n" +msgstr " Длина: %ld\n" -#: dwarf.c:2623 +#: dwarf.c:2601 #, c-format msgid " Version: %d\n" -msgstr " ÷ÅÒÓÉÑ: %d\n" +msgstr " Версия: %d\n" -#: dwarf.c:2624 +#: dwarf.c:2602 #, c-format msgid " Offset into .debug_info: %lx\n" -msgstr " óÍÅÝÅÎÉÅ × .debug_info: %lx\n" +msgstr " Смещение в .debug_info: %lx\n" -#: dwarf.c:2625 +#: dwarf.c:2603 #, c-format msgid " Pointer Size: %d\n" -msgstr " òÁÚÍ. ÕËÁÚÁÔ: %d\n" +msgstr " Разм. указат: %d\n" -#: dwarf.c:2626 +#: dwarf.c:2604 #, c-format msgid " Segment Size: %d\n" -msgstr " òÁÚÍ. ÓÅÇÍ.: %d\n" +msgstr " Разм. сегм.: %d\n" -#: dwarf.c:2628 +#: dwarf.c:2613 +msgid "Pointer size + Segment size is not a power of two.\n" +msgstr "Размер указателя + размер сегмента не возводятся в квадрат.\n" + +#: dwarf.c:2618 #, c-format msgid "" "\n" -" Address Length\n" +" Address Length\n" msgstr "" "\n" -" áÄÒÅÓ äÌÉÎÁ\n" +" Адрес Длина\n" + +#: dwarf.c:2620 +#, c-format +msgid "" +"\n" +" Address Length\n" +msgstr "" +"\n" +" Адрес Длина\n" #. 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 "óÐÉÓËÉ ÄÉÁÐÁÚÏÎÏ× × ÒÁÚÄÅÌÅ .debug_info ÎÅ ÕÐÏÒÑÄÏÞÅÎÙ ÐÏ ×ÏÚÒÁÓÔÁÎÉÀ!\n" +msgstr "Списки диапазонов в разделе .debug_info не упорядочены по возрастанию!\n" -#: dwarf.c:2732 +#: dwarf.c:2723 msgid "No range lists in .debug_info section!\n" -msgstr "÷ ÒÁÚÄÅÌÅ .debug_info ÎÅÔ ÓÐÉÓËÏ× ÄÉÁÐÁÚÏÎÏ×!\n" +msgstr "В разделе .debug_info нет списков диапазонов!\n" -#: dwarf.c:2736 +#: dwarf.c:2728 #, c-format msgid "Range lists in %s section start at 0x%lx\n" -msgstr "óÐÉÓËÉ ÄÉÁÐÁÚÏÎÏ× × ÒÁÚÄÅÌÅ %s ÎÁÞÉÎÁÀÔÓÑ Ó 0x%lx\n" +msgstr "Списки диапазонов в разделе %s начинаются с 0x%lx\n" -#: dwarf.c:2740 +#: dwarf.c:2732 #, c-format msgid " Offset Begin End\n" -msgstr " óÍÅÝ. îÁÞÁÌÏ ëÏÎÅÃ\n" +msgstr " Смещ. Начало Конец\n" -#: dwarf.c:2765 +#: dwarf.c:2757 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" -msgstr "äÙÒÁ [0x%lx - 0x%lx] × ÒÁÚÄÅÌÅ %s.\n" +msgstr "Дыра [0x%lx - 0x%lx] в разделе %s.\n" -#: dwarf.c:2769 +#: dwarf.c:2761 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" -msgstr "ðÅÒÅËÒÙÔÉÅ [0x%lx - 0x%lx] × ÒÁÚÄÅÌÅ %s.\n" +msgstr "Перекрытие [0x%lx - 0x%lx] в разделе %s.\n" -#: dwarf.c:2964 +#: dwarf.c:2963 #, c-format msgid "The section %s contains:\n" -msgstr "òÁÚÄÅÌ %s ÓÏÄÅÒÖÉÔ:\n" +msgstr "Раздел %s содержит:\n" -#: dwarf.c:3608 +#: dwarf.c:3650 #, c-format -msgid "unsupported or unknown DW_CFA_%d\n" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÉÌÉ ÎÅÉÚ×ÅÓÔÎÙÊ DW_CFA_%d\n" +msgid " DW_CFA_??? (User defined call frame op: %#x)\n" +msgstr " DW_CFA_??? (User defined call frame op: %#x)\n" -#: dwarf.c:3632 +#: dwarf.c:3652 +#, c-format +msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" +msgstr "неподдерживаемый или неизвестный номер инструкции кадрав вызова Dwarf: %#x\n" + +#: dwarf.c:3676 #, c-format msgid "Displaying the debug contents of section %s is not yet supported.\n" -msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÒÁÚÄÅÌÁ %s ÅÝÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ.\n" +msgstr "Отображение отладочной информации раздела %s еще не поддерживается.\n" -#: dwarf.c:3674 +#: dwarf.c:3718 #, c-format msgid "%s: Error: " -msgstr "%s: ïÛÉÂËÁ: " +msgstr "%s: Ошибка: " -#: dwarf.c:3685 +#: dwarf.c:3729 #, c-format msgid "%s: Warning: " -msgstr "%s: ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: " +msgstr "%s: Предупреждение: " #: emul_aix.c:51 #, c-format msgid " [-g] - 32 bit small archive\n" -msgstr " [-g] - 32-ÂÉÔÎÙÊ ÍÁÌÅÎØËÉÊ ÁÒÈÉ×\n" +msgstr " [-g] - 32-битный маленький архив\n" #: emul_aix.c:52 #, c-format msgid " [-X32] - ignores 64 bit objects\n" -msgstr " [-X32] - ÐÒÏÐÕÓËÁÅÔ 64-ÂÉÔÎÙÅ ÏÂßÅËÔÙ\n" +msgstr " [-X32] - пропускает 64-битные объекты\n" #: emul_aix.c:53 #, c-format msgid " [-X64] - ignores 32 bit objects\n" -msgstr " [-X64] - ÐÒÏÐÕÓËÁÅÔ 32-ÂÉÔÎÙÅ ÏÂßÅËÔÙ\n" +msgstr " [-X64] - пропускает 32-битные объекты\n" #: emul_aix.c:54 #, c-format msgid " [-X32_64] - accepts 32 and 64 bit objects\n" -msgstr " [-X32_64] - ÄÏÐÕÓËÁÅÔ 32- É 64-ÂÉÔÎÙÅ ÏÂßÅËÔÙ\n" +msgstr " [-X32_64] - допускает 32- и 64-битные объекты\n" -#: ieee.c:311 +#: ieee.c:309 msgid "unexpected end of debugging information" -msgstr "ÎÅÏÖÉÄÁÎÎÏÅ ÏËÏÎÞÁÎÉÅ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ" +msgstr "неожиданное окончание отладочной информации" -#: ieee.c:398 +#: ieee.c:396 msgid "invalid number" -msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ" +msgstr "неверный номер" -#: ieee.c:451 +#: ieee.c:449 msgid "invalid string length" -msgstr "ÎÅ×ÅÒÎÁÑ ÄÌÉÎÁ ÓÔÒÏËÉ" +msgstr "неверная длина строки" -#: ieee.c:506 ieee.c:547 +#: ieee.c:504 ieee.c:545 msgid "expression stack overflow" -msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ÓÔÅËÁ ×ÙÒÁÖÅÎÉÑ" +msgstr "переполнение стека выражения" -#: ieee.c:526 +#: ieee.c:524 msgid "unsupported IEEE expression operator" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÏÐÅÒÁÔÏÒ ×ÙÒÁÖÅÎÉÑ IEEE" +msgstr "неподдерживаемый оператор выражения IEEE" -#: ieee.c:541 +#: ieee.c:539 msgid "unknown section" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÒÁÚÄÅÌ" +msgstr "неизвестный раздел" -#: ieee.c:562 +#: ieee.c:560 msgid "expression stack underflow" -msgstr "ÏÐÕÓÔÏÛÅÎÉÅ ÓÔÅËÁ ×ÙÒÁÖÅÎÉÑ" +msgstr "опустошение стека выражения" -#: ieee.c:576 +#: ieee.c:574 msgid "expression stack mismatch" -msgstr "ÎÅÓÏ×ÐÁÄÅÎÉÅ ÓÔÅËÁ ×ÙÒÁÖÅÎÉÑ" +msgstr "несовпадение стека выражения" -#: ieee.c:613 +#: ieee.c:611 msgid "unknown builtin type" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ×ÓÔÒÏÅÎÎÙÊ ÔÉÐ" +msgstr "неизвестный встроенный тип" -#: ieee.c:758 +#: ieee.c:756 msgid "BCD float type not supported" -msgstr "ä×ÏÉÞÎÏ-ËÏÄÉÒÏ×ÁÎÎÙÊ ÄÅÓÑÔÉÞÎÙÊ ÔÉÐ Ó ÐÌÁ×ÁÀÝÅÊ ÚÁÐÑÔÏÊ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" +msgstr "Двоично-кодированный десятичный тип с плавающей запятой не поддерживается" -#: ieee.c:895 +#: ieee.c:893 msgid "unexpected number" -msgstr "ÎÅÏÖÉÄÁÎÎÏÅ ÞÉÓÌÏ" +msgstr "неожиданное число" -#: ieee.c:902 +#: ieee.c:900 msgid "unexpected record type" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ËÏÍÂÉÎÉÒÏ×ÁÎÎÙÊ ÔÉÐ" +msgstr "неожиданный комбинированный тип" -#: ieee.c:935 +#: ieee.c:933 msgid "blocks left on stack at end" -msgstr "× ËÏÎÃÅ ÓÔÅËÁ ÏÓÔÁÌÉÓØ ÂÌÏËÉ" +msgstr "в конце стека остались блоки" -#: ieee.c:1198 +#: ieee.c:1196 msgid "unknown BB type" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ BB" +msgstr "неизвестный тип BB" -#: ieee.c:1207 +#: ieee.c:1205 msgid "stack overflow" -msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ÓÔÅËÁ" +msgstr "переполнение стека" -#: ieee.c:1230 +#: ieee.c:1228 msgid "stack underflow" -msgstr "ÏÐÕÓÔÏÛÅÎÉÅ ÓÔÅËÁ" +msgstr "опустошение стека" -#: ieee.c:1342 ieee.c:1412 ieee.c:2109 +#: ieee.c:1340 ieee.c:1410 ieee.c:2107 msgid "illegal variable index" -msgstr "ÎÅ×ÅÒÎÙÊ ÉÎÄÅËÓ ÐÅÒÅÍÅÎÎÏÊ" +msgstr "неверный индекс переменной" -#: ieee.c:1390 +#: ieee.c:1388 msgid "illegal type index" -msgstr "ÎÅ×ÅÒÎÙÊ ÉÎÄÅËÓ ÔÉÐÁ" +msgstr "неверный индекс типа" -#: ieee.c:1400 ieee.c:1437 +#: ieee.c:1398 ieee.c:1435 msgid "unknown TY code" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ËÏÄ TY" +msgstr "неизвестный код TY" -#: ieee.c:1419 +#: ieee.c:1417 msgid "undefined variable in TY" -msgstr "ÎÅÏÐÒÅÄÅÌÅÎÎÁÑ ÐÅÒÅÍÅÎÎÁÑ × TY" +msgstr "неопределенная переменная в TY" #. Pascal file name. FIXME. -#: ieee.c:1830 +#: ieee.c:1828 msgid "Pascal file name not supported" -msgstr "éÍÑ ÆÁÊÌÁ Pascal ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" +msgstr "Имя файла Pascal не поддерживается" -#: ieee.c:1878 +#: ieee.c:1876 msgid "unsupported qualifier" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ËÌÁÓÓÉÆÉËÁÔÏÒ" +msgstr "неподдерживаемый классификатор" -#: ieee.c:2147 +#: ieee.c:2145 msgid "undefined variable in ATN" -msgstr "ÎÅÏÐÒÅÄÅÌÅÎÎÁÑ ÐÅÒÅÍÅÎÎÁÑ × ATN" +msgstr "неопределенная переменная в ATN" -#: ieee.c:2190 +#: ieee.c:2188 msgid "unknown ATN type" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ATN" +msgstr "неизвестный тип ATN" #. Reserved for FORTRAN common. -#: ieee.c:2312 +#: ieee.c:2310 msgid "unsupported ATN11" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ATN11" +msgstr "неподдерживаемый ATN11" #. We have no way to record this information. FIXME. -#: ieee.c:2339 +#: ieee.c:2337 msgid "unsupported ATN12" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ATN12" +msgstr "неподдерживаемый ATN12" -#: ieee.c:2399 +#: ieee.c:2397 msgid "unexpected string in C++ misc" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÓÔÒÏËÁ × C++ misc" +msgstr "неожиданная строка в C++ misc" -#: ieee.c:2412 +#: ieee.c:2410 msgid "bad misc record" -msgstr "ÐÌÏÈÁÑ ÚÁÐÉÓØ misc" +msgstr "плохая запись misc" -#: ieee.c:2453 +#: ieee.c:2451 msgid "unrecognized C++ misc record" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ C++ ÚÁÐÉÓØ misc" +msgstr "нераспознанная C++ запись misc" -#: ieee.c:2568 +#: ieee.c:2566 msgid "undefined C++ object" -msgstr "ÎÅÏÐÒÅÄÅÌÅÎÎÙÊ ÏÂßÅËÔ C++" +msgstr "неопределенный объект C++" -#: ieee.c:2602 +#: ieee.c:2600 msgid "unrecognized C++ object spec" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ ÏÂßÅËÔÁ C++" +msgstr "нераспознанная спецификация объекта C++" -#: ieee.c:2638 +#: ieee.c:2636 msgid "unsupported C++ object type" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ÔÉÐ ÏÂßÅËÔÁ C++" +msgstr "нераспознанный тип объекта C++" -#: ieee.c:2648 +#: ieee.c:2646 msgid "C++ base class not defined" -msgstr "ÂÁÚÏ×ÙÊ ËÌÁÓÓ C++ ÎÅ ÏÐÒÅÄÅÌÅÎ" +msgstr "базовый класс C++ не определен" -#: ieee.c:2660 ieee.c:2765 +#: ieee.c:2658 ieee.c:2763 msgid "C++ object has no fields" -msgstr "ÏÂßÅËÔ C++ ÎÅ ÉÍÅÅÔ ÐÏÌÅÊ" +msgstr "объект C++ не имеет полей" -#: ieee.c:2679 +#: ieee.c:2677 msgid "C++ base class not found in container" -msgstr "ÂÁÚÏ×ÙÊ ËÌÁÓÓ C++ ÎÅ ÎÁÊÄÅÎ × ËÏÎÅÊÎÅÒÅ" +msgstr "базовый класс C++ не найден в конейнере" -#: ieee.c:2786 +#: ieee.c:2784 msgid "C++ data member not found in container" -msgstr "ÜÌÅÍÅÎÔ ËÌÁÓÓÁ C++ ÎÅ ÎÁÊÄÅÎ × ËÏÎÔÅÊÎÅÒÅ" +msgstr "элемент класса C++ не найден в контейнере" -#: ieee.c:2827 ieee.c:2977 +#: ieee.c:2825 ieee.c:2975 msgid "unknown C++ visibility" -msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ×ÉÄÉÍÏÓÔØ C++" +msgstr "неизвестная видимость C++" -#: ieee.c:2861 +#: ieee.c:2859 msgid "bad C++ field bit pos or size" -msgstr "ÎÅ×ÅÒÎÙÊ Ä×ÏÉÞÎÙÊ ÒÁÚÒÑÄ ÉÌÉ ÒÁÚÍÅÒ ÐÏÌÑ C++" +msgstr "неверный двоичный разряд или размер поля C++" -#: ieee.c:2953 +#: ieee.c:2951 msgid "bad type for C++ method function" -msgstr "ÎÅ×ÅÒÎÙÊ ÔÉÐ ÆÕÎËÃÉÉ ÍÅÔÏÄÁ C++" +msgstr "неверный тип функции метода C++" -#: ieee.c:2963 +#: ieee.c:2961 msgid "no type information for C++ method function" -msgstr "ÎÅÔ ÉÎÆÏÒÍÁÃÉÉ Ï ÔÉÐÅ ÄÌÑ ÆÕÎËÃÉÉ ÍÅÔÏÄÁ C++" +msgstr "нет информации о типе для функции метода C++" -#: ieee.c:3002 +#: ieee.c:3000 msgid "C++ static virtual method" -msgstr "ÓÔÁÔÉÞÅÓËÉÊ ×ÉÒÔÕÁÌØÎÙÊ ÍÅÔÏÄ C++" +msgstr "статический виртуальный метод C++" -#: ieee.c:3097 +#: ieee.c:3095 msgid "unrecognized C++ object overhead spec" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ÓÌÕÖÅÂÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ ÏÂßÅËÔÁ C++" +msgstr "нераспознанная служебная спецификация объекта C++" -#: ieee.c:3136 +#: ieee.c:3134 msgid "undefined C++ vtable" -msgstr "ÎÅÏÐÒÅÄÅÌÅÎÎÁÑ ×ÉÒÔÕÁÌØÎÁÑ ÔÁÂÌÉÃÁ C++" +msgstr "неопределенная виртуальная таблица C++" -#: ieee.c:3205 +#: ieee.c:3203 msgid "C++ default values not in a function" -msgstr "ÚÎÁÞÅÎÉÑ C++ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÅ × ÆÕÎËÃÉÉ" +msgstr "значения C++ по умолчанию не в функции" -#: ieee.c:3245 +#: ieee.c:3243 msgid "unrecognized C++ default type" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ÔÉÐ C++ ÐÏ ÕÍÏÌÞÁÎÉÀ" +msgstr "нераспознанный тип C++ по умолчанию" -#: ieee.c:3276 +#: ieee.c:3274 msgid "reference parameter is not a pointer" -msgstr "ÓÓÙÌÏÞÎÙÊ ÐÁÒÁÍÅÔÒ ÎÅ Ñ×ÌÑÅÔÓÑ ÕËÁÚÁÔÅÌÅÍ" +msgstr "ссылочный параметр не является указателем" -#: ieee.c:3359 +#: ieee.c:3357 msgid "unrecognized C++ reference type" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ÓÓÙÌÏÞÎÙÊ ÔÉÐ C++" +msgstr "нераспознанный ссылочный тип C++" -#: ieee.c:3441 +#: ieee.c:3439 msgid "C++ reference not found" -msgstr "ÓÓÙÌËÁ C++ ÎÅ ÎÁÊÄÅÎÁ" +msgstr "ссылка C++ не найдена" -#: ieee.c:3449 +#: ieee.c:3447 msgid "C++ reference is not pointer" -msgstr "ÓÓÙÌËÁ C++ ÎÅ Ñ×ÌÑÅÔÓÑ ÕËÁÚÁÔÅÌÅÍ" +msgstr "ссылка C++ не является указателем" -#: ieee.c:3475 ieee.c:3483 +#: ieee.c:3473 ieee.c:3481 msgid "missing required ASN" -msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÔÒÅÂÕÅÍÙÊ ASN" +msgstr "отсутствует требуемый ASN" -#: ieee.c:3510 ieee.c:3518 +#: ieee.c:3508 ieee.c:3516 msgid "missing required ATN65" -msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÔÒÅÂÕÅÍÙÊ ATN65" +msgstr "отсутствует требуемый ATN65" -#: ieee.c:3532 +#: ieee.c:3530 msgid "bad ATN65 record" -msgstr "ÐÌÏÈÁÑ ÚÁÐÉÓØ ATN65" +msgstr "плохая запись ATN65" -#: ieee.c:4160 +#: ieee.c:4158 #, c-format msgid "IEEE numeric overflow: 0x" -msgstr "ÞÉÓÌÏ×ÏÅ ÐÅÒÅÐÏÌÎÅÎÉÅ IEEE: 0x" +msgstr "числовое переполнение IEEE: 0x" -#: ieee.c:4204 +#: ieee.c:4202 #, c-format msgid "IEEE string length overflow: %u\n" -msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ÄÌÉÎÙ ÓÔÒÏËÉ IEEE: %u\n" +msgstr "переполнение длины строки IEEE: %u\n" #: ieee.c:5203 #, c-format msgid "IEEE unsupported integer type size %u\n" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÒÁÚÍÅÒ ÃÅÌÏÇÏ ÔÉÐÁ IEEE %u\n" +msgstr "неподдерживаемый размер целого типа IEEE %u\n" #: ieee.c:5237 #, c-format msgid "IEEE unsupported float type size %u\n" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÒÁÚÍÅÒ ÔÉÐÁ Ó ÐÌÁ×ÁÀÝÅÊ ÚÁÐÑÔÏÊ IEEE %u\n" +msgstr "неподдерживаемый размер типа с плавающей запятой IEEE %u\n" #: ieee.c:5271 #, c-format msgid "IEEE unsupported complex type size %u\n" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÒÁÚÍÅÒ ËÏÍÐÌÅËÓÎÏÇÏ ÔÉÐÁ IEEE%u\n" +msgstr "неподдерживаемый размер комплексного типа IEEE%u\n" + +#: mclex.c:241 +msgid "Duplicate symbol entered into keyword list." +msgstr "В списке ключевых слов введён повторяющийся символ." -#: nlmconv.c:269 srconv.c:1813 +#: nlmconv.c:271 srconv.c:1815 msgid "input and output files must be different" -msgstr "×ÈÏÄÎÏÊ É ×ÙÈÏÄÎÏÊ ÆÁÊÌÙ ÄÏÌÖÎÙ ÂÙÔØ ÒÁÚÌÉÞÎÙÍÉ" +msgstr "входной и выходной файлы должны быть различными" -#: nlmconv.c:316 +#: nlmconv.c:318 msgid "input file named both on command line and with INPUT" -msgstr "×ÈÏÄÎÏÊ ÆÁÊÌ ÎÁÚ×ÁÎ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ É × INPUT" +msgstr "входной файл назван в командной строке и в INPUT" -#: nlmconv.c:325 +#: nlmconv.c:327 msgid "no input file" -msgstr "ÎÅÔ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ" +msgstr "нет входного файла" -#: nlmconv.c:355 +#: nlmconv.c:357 msgid "no name for output file" -msgstr "ÎÅÔ ÉÍÅÎÉ ÄÌÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ" +msgstr "нет имени для выходного файла" -#: nlmconv.c:369 +#: nlmconv.c:371 msgid "warning: input and output formats are not compatible" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ×ÈÏÄÎÏÊ É ×ÙÈÏÄÎÏÊ ÆÏÒÍÁÔÙ ÎÅ ÓÏ×ÍÅÓÔÉÍÙ" +msgstr "предупреждение: входной и выходной форматы не совместимы" -#: nlmconv.c:398 +#: nlmconv.c:400 msgid "make .bss section" -msgstr "ÓÏÚÄÁÎÉÅ ÒÁÚÄÅÌÁ .bss" +msgstr "создание раздела .bss" -#: nlmconv.c:407 +#: nlmconv.c:409 msgid "make .nlmsections section" -msgstr "ÓÏÚÄÁÎÉÅ ÒÁÚÄÅÌÁ .nlmsections" +msgstr "создание раздела .nlmsections" -#: nlmconv.c:409 +#: nlmconv.c:411 msgid "set .nlmsections flags" -msgstr "ÕÓÔÁÎÏ×ËÁ ÆÌÁÇÏ× .nlmsections" +msgstr "установка флагов .nlmsections" -#: nlmconv.c:437 +#: nlmconv.c:439 msgid "set .bss vma" -msgstr "ÕÓÔÁÎÏ×ËÁ .bss vma" +msgstr "установка .bss vma" -#: nlmconv.c:444 +#: nlmconv.c:446 msgid "set .data size" -msgstr "ÕÓÔÁÎÏ×ËÁ ÒÁÚÍÅÒÁ .data" +msgstr "установка размера .data" -#: nlmconv.c:624 +#: nlmconv.c:626 #, c-format msgid "warning: symbol %s imported but not in import list" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÓÉÍ×ÏÌ %s ÉÍÐÏÒÔÉÒÏ×ÁÎ, ÎÏ ÅÇÏ ÎÅÔ × ÓÐÉÓËÅ ÉÍÐÏÒÔÁ" +msgstr "предупреждение: символ %s импортирован, но его нет в списке импорта" -#: nlmconv.c:644 +#: nlmconv.c:646 msgid "set start address" -msgstr "ÕÓÔÁÎÏ×ËÁ ÎÁÞÁÌØÎÏÇÏ ÁÄÒÅÓÁ" +msgstr "установка начального адреса" -#: nlmconv.c:693 +#: nlmconv.c:695 #, c-format msgid "warning: START procedure %s not defined" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: START-ÐÒÏÃÅÄÕÒÁ %s ÎÅ ÏÐÒÅÄÅÌÅÎÁ" +msgstr "предупреждение: START-процедура %s не определена" -#: nlmconv.c:695 +#: nlmconv.c:697 #, c-format msgid "warning: EXIT procedure %s not defined" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: EXIT-ÐÒÏÃÅÄÕÒÁ %s ÎÅ ÏÐÒÅÄÅÌÅÎÁ" +msgstr "предупреждение: EXIT-процедура %s не определена" -#: nlmconv.c:697 +#: nlmconv.c:699 #, c-format msgid "warning: CHECK procedure %s not defined" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: CHECK-ÐÒÏÃÅÄÕÒÁ %s ÎÅ ÏÐÒÅÄÅÌÅÎÁ" +msgstr "предупреждение: CHECK-процедура %s не определена" -#: nlmconv.c:718 nlmconv.c:907 +#: nlmconv.c:720 nlmconv.c:909 msgid "custom section" -msgstr "ÒÁÚÄÅÌ custom" +msgstr "раздел custom" -#: nlmconv.c:739 nlmconv.c:936 +#: nlmconv.c:741 nlmconv.c:938 msgid "help section" -msgstr "ÒÁÚÄÅÌ help" +msgstr "раздел help" -#: nlmconv.c:761 nlmconv.c:954 +#: nlmconv.c:763 nlmconv.c:956 msgid "message section" -msgstr "ÒÁÚÄÅÌ message" +msgstr "раздел message" -#: nlmconv.c:777 nlmconv.c:987 +#: nlmconv.c:779 nlmconv.c:989 msgid "module section" -msgstr "ÒÁÚÄÅÌ module" +msgstr "раздел module" -#: nlmconv.c:797 nlmconv.c:1003 +#: nlmconv.c:799 nlmconv.c:1005 msgid "rpc section" -msgstr "ÒÁÚÄÅÌ rpc" +msgstr "раздел rpc" #. 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 "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÓÏ×ÍÅÓÔÎÏ ÉÓÐÏÌØÚÕÅÍÙÅ ÂÉÂÌÉÏÔÅËÉ ÎÅ ÍÏÇÕÔ ÉÍÅÔØ ÎÅÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÎÎÙÅ ÄÁÎÎÙÅ" +msgstr "%s: предупреждение: совместно используемые библиотеки не могут иметь неинициализированные данные" -#: nlmconv.c:854 nlmconv.c:1022 +#: nlmconv.c:856 nlmconv.c:1024 msgid "shared section" -msgstr "ÒÁÚÄÅÌ shared" +msgstr "раздел shared" -#: nlmconv.c:862 +#: nlmconv.c:864 msgid "warning: No version number given" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: îÅ ÕËÁÚÁÎ ÎÏÍÅÒ ×ÅÒÓÉÉ" +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 "%s: ÞÔÅÎÉÅ: %s" +msgstr "%s: чтение: %s" -#: nlmconv.c:924 +#: nlmconv.c:926 msgid "warning: FULLMAP is not supported; try ld -M" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: FULLMAP ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ; ÐÏÐÒÏÂÕÊÔÅ ld -M" +msgstr "предупреждение: FULLMAP не поддерживается; попробуйте ld -M" -#: nlmconv.c:1100 +#: nlmconv.c:1102 #, c-format msgid "Usage: %s [option(s)] [in-file [out-file]]\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] [in-ÆÁÊÌ [out-ÆÁÊÌ]]\n" +msgstr "Использование: %s [опции] [in-файл [out-файл]]\n" -#: nlmconv.c:1101 +#: nlmconv.c:1103 #, c-format msgid " Convert an object file into a NetWare Loadable Module\n" -msgstr " ëÏÎ×ÅÒÔÉÒÕÅÔ ÏÂßÅËÔÎÙÊ ÆÁÊÌ × ÚÁÇÒÕÖÁÅÍÙÊ ÍÏÄÕÌØ ÓÉÓÔÅÍÙ NetWare\n" +msgstr " Конвертирует объектный файл в загружаемый модуль системы NetWare\n" -#: nlmconv.c:1102 +#: nlmconv.c:1104 #, c-format msgid "" " The options are:\n" @@ -2254,84 +2285,84 @@ msgid "" " -h --help Display this information\n" " -v --version Display the program's version\n" msgstr "" -" ïÐÃÉÉ:\n" -" -I --input-target= õÓÔÁÎÏ×ËÁ ÆÏÒÍÁÔÁ ×ÈÏÄÎÏÇÏ Ä×ÏÉÞÎÏÇÏ ÆÁÊÌÁ\n" -" -O --output-target= õÓÔÁÎÏ×ËÁ ÆÏÒÍÁÔÁ ×ÙÈÏÄÎÏÇÏ Ä×ÏÉÞÎÏÇÏ ÆÁÊÌÁ\n" -" -T --header-file=<ÆÁÊÌ> þÔÅÎÉÅ <ÆÁÊÌÁ> Ó ÉÎÆÏÒÍÁÃÉÅÊ ÚÁÇÏÌÏ×ËÁ NLM\n" -" -l --linker=<ËÏÍÐÏÎÏ×ÝÉË> éÓÐÏÌØÚÏ×ÁÎÉÅ <ËÏÍÐÏÎÏ×ÝÉËÁ> ÄÌÑ ÌÀÂÏÇÏ Ó×ÑÚÙ×ÁÎÉÑ\n" -" -d --debug ÷Ù×ÏÄ ÎÁ stderr ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ ËÏÍÐÏÎÏ×ÝÉËÁ\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ\n" - -#: nlmconv.c:1143 +" Опции:\n" +" -I --input-target= установить формат входного двоичного файла\n" +" -O --output-target= установить формат выходного двоичного файла\n" +" -T --header-file=<файл> читать <файл> с данными заголовка NLM\n" +" -l --linker=<компоновщик> использовать <компоновщик> для любого связывания\n" +" -d --debug выводить на stderr командной строки компоновщика\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" + +#: nlmconv.c:1145 #, c-format msgid "support not compiled in for %s" -msgstr "ÏÔËÏÍÐÉÌÉÒÏ×ÁÎ ÂÅÚ ÐÏÄÄÅÒÖËÉ %s" +msgstr "откомпилирован без поддержки %s" -#: nlmconv.c:1180 +#: nlmconv.c:1182 msgid "make section" -msgstr "ÒÁÚÄÅÌ make" +msgstr "раздел make" -#: nlmconv.c:1194 +#: nlmconv.c:1196 msgid "set section size" -msgstr "ÕÓÔÁÎÏ×ËÁ ÒÁÚÍÅÒÁ ÒÁÚÄÅÌÁ" +msgstr "установка размера раздела" -#: nlmconv.c:1200 +#: nlmconv.c:1202 msgid "set section alignment" -msgstr "ÕÓÔÁÎÏ×ËÁ ÏÒÉÅÎÔÁÃÉÉ ÒÁÚÄÅÌÁ" +msgstr "установка ориентации раздела" -#: nlmconv.c:1204 +#: nlmconv.c:1206 msgid "set section flags" -msgstr "ÕÓÔÁÎÏ×ËÁ ÆÌÁÇÏ× ÒÁÚÄÅÌÁ" +msgstr "установка флагов раздела" -#: nlmconv.c:1215 +#: nlmconv.c:1217 msgid "set .nlmsections size" -msgstr "ÕÓÔÁÎÏ×ËÁ ÒÁÚÍÅÒÁ .nlmsections" +msgstr "установка размера .nlmsections" -#: 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 "ÕÓÔÁÎÏ×ËÁ ÓÏÄÅÒÖÉÍÏÇÏ .nlmsections" +msgstr "установка содержимого .nlmsections" -#: nlmconv.c:1797 +#: nlmconv.c:1799 msgid "stub section sizes" -msgstr "ÒÁÚÍÅÒÙ ÒÁÚÄÅÌÁ ÚÁÇÌÕÛËÉ" +msgstr "размеры раздела заглушки" -#: nlmconv.c:1844 +#: nlmconv.c:1846 msgid "writing stub" -msgstr "ÚÁÐÉÓÙ×ÁÅÔÓÑ ÚÁÇÌÕÛËÁ" +msgstr "записывается заглушка" -#: nlmconv.c:1928 +#: nlmconv.c:1930 #, c-format msgid "unresolved PC relative reloc against %s" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÏÅ ÏÔÎÏÓÉÔÅÌØÎÏÅ ÐÅÒÅÍÅÝÅÎÉÅ ÐÏ ÓÞÅÔÞÉËÕ ËÏÍÁÎÄ × %s" +msgstr "нераспознанное относительное перемещение по счетчику команд в %s" -#: nlmconv.c:1992 +#: nlmconv.c:1994 #, c-format msgid "overflow when adjusting relocation against %s" -msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ÐÒÉ ÒÅÇÕÌÉÒÏ×ËÅ ÐÅÒÅÍÅÝÅÎÉÑ × %s" +msgstr "переполнение при регулировке перемещения в %s" -#: nlmconv.c:2119 +#: nlmconv.c:2121 #, c-format msgid "%s: execution of %s failed: " -msgstr "%s: ×ÙÐÏÌÎÅÎÉÅ %s ÚÁ×ÅÒÛÉÌÏÓØ ÎÅÕÄÁÞÅÊ: " +msgstr "%s: выполнение %s завершилось неудачей: " -#: nlmconv.c:2134 +#: nlmconv.c:2136 #, c-format msgid "Execution of %s failed" -msgstr "÷ÙÐÏÌÎÅÎÉÅ %s ÚÁ×ÅÒÛÉÌÏÓØ ÎÅÕÄÁÞÅÊ" +msgstr "Выполнение %s завершилось неудачей" -#: 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 "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] [ÆÁÊÌ(Ù)]\n" +msgstr "Использование: %s [опции] [файл(ы)]\n" -#: nm.c:225 +#: nm.c:214 #, c-format msgid " List symbols in [file(s)] (a.out by default).\n" -msgstr " ÷Ù×ÏÄÉÔ ÓÐÉÓÏË ÓÉÍ×ÏÌÏ× × [ÆÁÊÌ(Ù)] (ÐÏ ÕÍÏÌÞÁÎÉÀ × a.out).\n" +msgstr " Выводит список символов в [файл(ы)] (по умолчанию в a.out).\n" -#: nm.c:226 +#: nm.c:215 #, c-format msgid "" " The options are:\n" @@ -2370,84 +2401,79 @@ msgid "" " -V, --version Display this program's version number\n" "\n" msgstr "" -" ïÐÃÉÉ:\n" -" -a, --debug-syms ÷Ù×ÏÄ ÔÏÌØËÏ ÏÔÌÁÄÏÞÎÙÈ ÓÉÍ×ÏÌÏ×\n" -" -A, --print-file-name ÷Ù×ÏÄ ÉÍÅÎÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ ÐÅÒÅÄ ËÁÖÄÙÍ ÓÉÍ×ÏÌÏÍ\n" -" -B ôÏ ÖÅ, ÞÔÏ É --format=bsd\n" -" -C, --demangle[=óôéìø] äÅËÏÄÉÒÏ×ÁÎÉÅ ÎÉÚËÏÕÒÏ×ÎÅ×ÙÈ ÉÍÅÎ ÓÉÍ×ÏÌÏ× × ÉÍÅÎÁ\n" -" ÕÒÏ×ÎÑ ÐÏÌØÚÏ×ÁÔÅÌÑ\n" -" óôéìø, ÅÓÌÉ ÕËÁÚÁÎ, ÍÏÖÅÔ ÂÙÔØ `auto' (ÐÏ ÕÍÏÌÞÁÎÉÀ),\n" +" Параметры:\n" +" -a, --debug-syms показывать только отладочные символы\n" +" -A, --print-file-name показывать имя входного файла перед каждым символом\n" +" -B То же, что и --format=bsd\n" +" -C, --demangle[=СТИЛЬ] декодировать низкоуровневые имена символов в имена\n" +" уровня пользователя\n" +" СТИЛЬ, если указан, может быть `auto' (по умолчанию),\n" " `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" -" ÉÌÉ `gnat'\n" -" --no-demangle îÅ ÄÅËÏÄÉÒÏ×ÁÔØ ÎÉÚËÏÕÒÏ×ÎÅ×ÙÅ ÉÍÅÎÁ ÓÉÍ×ÏÌÏ×\n" -" -D, --dynamic ÷Ù×ÏÄ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÉÍ×ÏÌÏ× ×ÍÅÓÔÏ ÎÏÒÍÁÌØÎÙÈ ÓÉÍ×ÏÌÏ×\n" -" --defined-only ÷Ù×ÏÄ ÔÏÌØËÏ ÏÐÒÅÄÅÌÅÎÎÙÈ ÓÉÍ×ÏÌÏ×\n" -" -e (ÐÒÏÐÕÝÅÎÁ)\n" -" -f, --format=æïòíáô éÓÐÏÌØÚÏ×ÁÎÉÅ æïòíáô × ËÁÞÅÓÔ×Å ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ.\n" -" æïòíáô ÍÏÖÅÔ ÂÙÔØ `bsd', `sysv' ÉÌÉ `posix'.\n" -" ðÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ `bsd'.\n" -" -g, --extern-only ÷Ù×ÏÄ ÔÏÌØËÏ ×ÎÅÛÎÉÈ ÓÉÍ×ÏÌÏ×\n" -" -l, --line-numbers éÓÐÏÌØÚÏ×ÁÎÉÅ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÄÌÑ ÎÁÈÏÖÄÅÎÉÑ\n" -" ÉÍÅÎÉ ÆÁÊÌÁ É ÎÏÍÅÒÁ ÓÔÒÏËÉ ÄÌÑ ËÁÖÄÏÇÏ ÓÉÍ×ÏÌÁ\n" -" -n, --numeric-sort óÏÒÔÉÒÏ×ËÁ ÓÉÍ×ÏÌÏ× ÐÏ ÁÄÒÅÓÕ\n" -" -o ôÏ ÖÅ, ÞÔÏ É -A\n" -" -p, --no-sort âÅÚ ÓÏÒÔÉÒÏ×ËÉ ÓÉÍ×ÏÌÏ×\n" -" -P, --portability ôÏ ÖÅ, ÞÔÏ É --format=posix\n" -" -r, --reverse-sort óÏÒÔÉÒÏ×ËÁ × ÏÂÒÁÔÎÏÍ ÐÏÒÑÄËÅ\n" -" -S, --print-size ÷Ù×ÏÄ ÒÁÚÍÅÒÁ ÏÐÒÅÄÅÌÅÎÎÙÈ ÓÉÍ×ÏÌÏ×\n" -" -s, --print-armap ÷ËÌÀÞÅÎÉÅ ÉÎÄÅËÓÁ ÄÌÑ ÓÉÍ×ÏÌÏ× ÉÚ ÞÌÅÎÏ× ÁÒÈÉ×Á\n" -" --size-sort óÏÒÔÉÒÏ×ËÁ ÓÉÍ×ÏÌÏ× ÐÏ ÒÁÚÍÅÒÕ\n" -" --special-syms ÷ËÌÀÞÅÎÉÅ ÓÐÅÃÉÁÌØÎÙÈ ÓÉÍ×ÏÌÏ× × ×ÙÈÏÄÎÙÅ ÄÁÎÎÙÅ\n" -" --synthetic ÷Ù×ÏÄ ÔÁËÖÅ ÓÉÎÔÅÔÉÞÅÓËÉÈ ÓÉÍ×ÏÌÏ×\n" -" -t, --radix=RADIX éÓÐÏÌØÚÏ×ÁÎÉÅ RADIX ÄÌÑ ×Ù×ÏÄÁ ÚÎÁÞÅÎÉÊ ÓÉÍ×ÏÌÏ×\n" -" --target=BFD-éíñ õËÁÚÁÎÉÅ ÃÅÌÅ×ÏÇÏ ÆÏÒÍÁÔÁ ÏÂßÅËÔÁ ËÁË BFD-éíñ\n" -" -u, --undefined-only ÷Ù×ÏÄ ÔÏÌØËÏ ÎÅ ÏÐÒÅÄÅÌÅÎÎÙÈ ÓÉÍ×ÏÌÏ×\n" -" -X 32_64 (ÐÒÏÐÕÝÅÎÁ)\n" -" @æáêì þÉÔÁÔØ ÏÐÃÉÉ ÉÚ æáêìá\n" -" -h, --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -V, --version ÷Ù×ÏÄ ÎÏÍÅÒÁ ×ÅÒÓÉÉ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ\n" -"\n" - -#: nm.c:263 objdump.c:236 -#, c-format -msgid "Report bugs to %s.\n" -msgstr "ïÔÞ£ÔÙ Ï ÏÛÉÂËÁÈ ÏÔÐÒÁ×ÌÑÊÔÅ × %s\n" - -#: nm.c:295 +" или `gnat'\n" +" --no-demangle не декодировать низкоуровневые имена символов\n" +" -D, --dynamic показывать динамические символы вместо нормальных символов\n" +" --defined-only показывать только определённые символы\n" +" -e (игнорируется)\n" +" -f, --format=ФОРМАТ использовать ФОРМАТ в качестве выходного формата.\n" +" ФОРМАТ может быть `bsd', `sysv' или `posix'.\n" +" По умолчанию используется `bsd'.\n" +" -g, --extern-only показывать только внешние символы\n" +" -l, --line-numbers использовать отладочную информацию для поиска\n" +" имени файла и номера строки для каждого символа\n" +" -n, --numeric-sort сортировать символы по адресу\n" +" -o То же, что и -A\n" +" -p, --no-sort не сортировать символы\n" +" -P, --portability то же, что и --format=posix\n" +" -r, --reverse-sort сортировать в обратном порядке\n" +" -S, --print-size показывать размер определённых символов\n" +" -s, --print-armap включать индекс для символов из членов архива\n" +" --size-sort сортировать символы по размеру\n" +" --special-syms включать специальные символы в выходные данные\n" +" --synthetic показывать также синтетические символы\n" +" -t, --radix=RADIX использовать RADIX для вывода значений символов\n" +" --target=BFD-ИМЯ указать целевой формат объекта как BFD-ИМЯ\n" +" -u, --undefined-only показывать только не определённые символы\n" +" -X 32_64 (игнорируется)\n" +" @ФАЙЛ читать параметры из ФАЙЛА\n" +" -h, --help показать эту информацию\n" +" -V, --version показать номер версии этой программы\n" +"\n" + +#: nm.c:276 #, c-format msgid "%s: invalid radix" -msgstr "%s: ÎÅ×ÅÒÎÙÊ radix" +msgstr "%s: неверный radix" -#: nm.c:319 +#: nm.c:300 #, c-format msgid "%s: invalid output format" -msgstr "%s: ÎÅ×ÅÒÎÙÊ ×ÙÈÏÄÎÏÊ ÆÏÒÍÁÔ" +msgstr "%s: неверный выходной формат" -#: nm.c:340 readelf.c:6623 readelf.c:6659 +#: nm.c:321 readelf.c:6853 readelf.c:6891 #, c-format msgid ": %d" -msgstr "<ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ÐÒÏÃÅÓÓÏÒÁ>: %d" +msgstr "<специфичный для процессора>: %d" -#: nm.c:342 readelf.c:6626 readelf.c:6671 +#: nm.c:323 readelf.c:6856 readelf.c:6903 #, c-format msgid ": %d" -msgstr "<ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ïó>: %d" +msgstr "<специфичный для ОС>: %d" -#: nm.c:344 readelf.c:6628 readelf.c:6674 +#: nm.c:325 readelf.c:6858 readelf.c:6906 #, c-format msgid ": %d" -msgstr "<ÎÅÉÚ×ÅÓÔÎÙÊ>: %d" +msgstr "<неизвестный>: %d" -#: nm.c:381 +#: nm.c:365 #, c-format msgid "" "\n" "Archive index:\n" msgstr "" "\n" -"éÎÄÅËÓ ÁÒÈÉ×Á:\n" +"Индекс архива:\n" -#: nm.c:1227 +#: nm.c:1225 #, c-format msgid "" "\n" @@ -2457,10 +2483,10 @@ msgid "" msgstr "" "\n" "\n" -"îÅÏÐÒÅÄÅÌÅÎÎÙÅ ÓÉÍ×ÏÌÙ ÉÚ %s:\n" +"Неопределенные символы из %s:\n" "\n" -#: nm.c:1229 +#: nm.c:1227 #, c-format msgid "" "\n" @@ -2470,28 +2496,28 @@ msgid "" msgstr "" "\n" "\n" -"óÉÍ×ÏÌÙ ÉÚ %s:\n" +"Символы из %s:\n" "\n" -#: nm.c:1231 nm.c:1282 +#: nm.c:1229 nm.c:1280 #, c-format msgid "" "Name Value Class Type Size Line Section\n" "\n" msgstr "" -"éÍÑ úÎÁÞ. ëÌÁÓÓ ôÉÐ òÁÚÍÅÒ óÔÒÏËÁ òÁÚÄÅÌ\n" +"Имя Знач. Класс Тип Размер Строка Раздел\n" "\n" -#: nm.c:1234 nm.c:1285 +#: nm.c:1232 nm.c:1283 #, c-format msgid "" "Name Value Class Type Size Line Section\n" "\n" msgstr "" -"éÍÑ úÎÁÞ. ëÌÁÓÓ ôÉÐ òÁÚÍÅÒ óÔÒÏËÁ òÁÚÄÅÌ\n" +"Имя Знач. Класс Тип Размер Строка Раздел\n" "\n" -#: nm.c:1278 +#: nm.c:1276 #, c-format msgid "" "\n" @@ -2501,10 +2527,10 @@ msgid "" msgstr "" "\n" "\n" -"îÅÏÐÒÅÄÅÌÅÎÎÙÅ ÓÉÍ×ÏÌÙ ÉÚ %s[%s]:\n" +"Неопределенные символы из %s[%s]:\n" "\n" -#: nm.c:1280 +#: nm.c:1278 #, c-format msgid "" "\n" @@ -2514,42 +2540,47 @@ msgid "" msgstr "" "\n" "\n" -"óÉÍ×ÏÌÙ ÉÚ %s[%s]:\n" +"Символы из %s[%s]:\n" "\n" -#: nm.c:1584 +#: nm.c:1370 +#, c-format +msgid "Print width has not been initialized (%d)" +msgstr "Ширина печати не была инициализирована (%d)" + +#: nm.c:1595 msgid "Only -X 32_64 is supported" -msgstr "ðÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÔÏÌØËÏ -X 32_64" +msgstr "Поддерживается только -X 32_64" -#: nm.c:1604 +#: nm.c:1615 msgid "Using the --size-sort and --undefined-only options together" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ ×ÍÅÓÔÅ ÏÐÃÉÊ --size-sort É --undefined-only" +msgstr "Использование вместе опций --size-sort и --undefined-only" -#: nm.c:1605 +#: nm.c:1616 msgid "will produce no output, since undefined symbols have no size." -msgstr "ÎÅ ÄÁÓÔ ×ÙÈÏÄÎÙÈ ÄÁÎÎÙÈ, Ô.Ë. ÎÅÏÐÒÅÄÅÌÅÎÎÙÅ ÓÉÍ×ÏÌÙ ÎÅ ÉÍÅÀÔ ÒÁÚÍÅÒÁ." +msgstr "не даст выходных данных, т.к. неопределенные символы не имеют размера." -#: nm.c:1633 +#: nm.c:1644 #, c-format msgid "data size %ld" -msgstr "ÒÁÚÍÅÒ ÄÁÎÎÙÈ %ld" +msgstr "размер данных %ld" -#: 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 "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] in-ÆÁÊÌ [out-ÆÁÊÌ]\n" +msgstr "Использование: %s [опции] in-файл [out-файл]\n" -#: objcopy.c:402 +#: objcopy.c:427 #, c-format msgid " Copies a binary file, possibly transforming it in the process\n" -msgstr " ëÏÐÉÒÕÅÔ Ä×ÏÉÞÎÙÊ ÆÁÊÌ, ×ÏÚÍÏÖÎÏ, ÐÒÅÏÂÒÁÚÏ×Ù×ÁÑ ÅÇÏ × ÐÒÏÃÅÓÓÅ\n" +msgstr " Копирует двоичный файл, возможно, преобразовывая его в процессе\n" -#: objcopy.c:403 objcopy.c:495 +#: objcopy.c:428 objcopy.c:524 #, c-format msgid " The options are:\n" -msgstr " ïÐÃÉÉ:\n" +msgstr " Опции:\n" -#: objcopy.c:404 +#: objcopy.c:429 #, c-format msgid "" " -I --input-target Assume input file is in format \n" @@ -2569,7 +2600,10 @@ msgid "" " Do not copy symbol 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 Do not strip symbol \n" +" --keep-file-symbols Do not strip file symbol(s)\n" +" --localize-hidden Turn all ELF hidden symbols into locals\n" " -L --localize-symbol Force symbol to be marked as a local\n" " --globalize-symbol Force symbol to be marked as a global\n" " -G --keep-global-symbol Localize all symbols except \n" @@ -2601,6 +2635,7 @@ msgid "" " --rename-section =[,] Rename section to \n" " --change-leading-char Force output format's leading character style\n" " --remove-leading-char Remove leading character from global symbols\n" +" --reverse-bytes= Reverse bytes at a time, in output sections with content\n" " --redefine-sym = Redefine symbol name to \n" " --redefine-syms --redefine-sym for all symbol pairs \n" " listed in \n" @@ -2615,7 +2650,7 @@ msgid "" " --globalize-symbols --globalize-symbol for all in \n" " --keep-global-symbols -G for all symbols listed in \n" " --weaken-symbols -W for all symbols listed in \n" -" --alt-machine-code Use alternate machine code for output\n" +" --alt-machine-code Use the target's '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" @@ -2631,94 +2666,100 @@ msgid "" " -h --help Display this output\n" " --info List object formats & architectures supported\n" msgstr "" -" -I --input-target ðÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ×ÈÏÄÎÏÊ ÆÁÊÌ × ÆÏÒÍÁÔÅ \n" -" -O --output-target óÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ × ÆÏÒÍÁÔÅ \n" -" -B --binary-architecture <ÁÒÈ> õÓÔÁÎÏ×ÉÔØ ÁÒÈÉÔÅËÔÕÒÕ ÄÌÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ, ËÏÇÄÁ ×ÈÏÄÎÏÊ ÆÁÊÌ Ä×ÏÉÞÎÙÊ\n" -" -F --target õÓÔÁÎÏ×ÉÔØ ×ÈÏÄÎÏÊ É ×ÙÈÏÄÎÏÊ ÆÏÒÍÁÔÙ × \n" -" --debugging ðÒÅÏÂÒÁÚÏ×ÁÔØ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ, ÅÓÌÉ ÜÔÏ ×ÏÚÍÏÖÎÏ\n" -" -p --preserve-dates ëÏÐÉÒÏ×ÁÔØ ×ÒÅÍÑ ÍÏÄÉÆÉËÁÃÉÉ/ÄÏÓÔÕÐÁ ÎÁ ×Ù×ÏÄ\n" -" -j --only-section <ÉÍÑ> ëÏÐÉÒÏ×ÁÔØ ÒÁÚÄÅÌ <ÉÍÑ> ÎÁ ×Ù×ÏÄ\n" -" --add-gnu-debuglink=<ÆÁÊÌ> äÏÂÁ×ÌÅÎÉÅ Ó×ÑÚÙ×ÁÎÉÑ ÒÁÚÄÅÌÁ .gnu_debuglink × <ÆÁÊÌ>\n" -" -R --remove-section <ÉÍÑ> õÄÁÌÉÔØ ÒÁÚÄÅÌ <ÉÍÑ> ÉÚ ×Ù×ÏÄÁ\n" -" -S --strip-all õÄÁÌÉÔØ ×ÓÅ ÓÉÍ×ÏÌÙ É ÉÎÆÏÒÍÁÃÉÀ Ï ÐÅÒÅÍÅÝÅÎÉÉ\n" -" -g --strip-debug õÄÁÌÉÔØ ×ÓÅ ÏÔÌÁÄÏÞÎÙÅ ÓÉÍ×ÏÌÙ É ÒÁÚÄÅÌÙ\n" -" --strip-unneeded õÄÁÌÉÔØ ×ÓÅ ÓÉÍ×ÏÌÙ, ÎÅ ÎÕÖÎÙÅ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÊ\n" -" -N --strip-symbol <ÉÍÑ> îÅ ËÏÐÉÒÏ×ÁÔØ ÓÉÍ×ÏÌ <ÉÍÑ>\n" -" --strip-unneeded-symbol <ÉÍÑ>\n" -" îÅ ËÏÐÉÒÏ×ÁÔØ ÓÉÍ×ÏÌ <ÉÍÑ>, ÅÓÌÉ ÎÅ ÎÕÖÅÎ ÄÌÑ\n" -" ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÊ\n" -" --only-keep-debug ïÓÔÁ×ÉÔØ ÔÏÌØËÏ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ\n" -" -K --keep-symbol <ÉÍÑ> ëÏÐÉÒÏ×ÁÔØ ÔÏÌØËÏ ÓÉÍ×ÏÌ <ÉÍÑ>\n" -" -L --localize-symbol <ÉÍÑ> ðÒÉÎÕÄÉÔÅÌØÎÏ ÐÏÍÅÞÁÔØ ÓÉÍ×ÏÌ <ÉÍÑ> ËÁË ÌÏËÁÌØÎÙÊ\n" -" -G --keep-global-symbol <ÉÍÑ> ìÏËÁÌÉÚÏ×ÁÔØ ×ÓÅ ÓÉÍ×ÏÌÙ ËÒÏÍÅ <ÉÍÑ>\n" -" -W --weaken-symbol <ÉÍÑ> ðÒÉÎÕÄÉÔÅÌØÎÏ ÐÏÍÅÔÉÔØ ÓÉÍ×ÏÌ <ÉÍÑ> ËÁË ÓÌÁÂÙÊ\n" -" --weaken ðÒÉÎÕÄÉÔÅÌØÎÏ ÐÏÍÅÔÉÔØ ÇÌÏÂÁÌØÎÙÅ ÓÉÍ×ÏÌÙ ËÁË ÓÌÁÂÙÅ\n" -" -w --wildcard òÁÚÒÅÛÉÔØ ÍÁÓËÕ ÐÒÉ ÓÒÁ×ÎÅÎÉÉ ÓÉÍ×ÏÌÏ×\n" -" -x --discard-all õÄÁÌÉÔØ ×ÓÅ ÎÅÇÌÏÂÁÌØÎÙÅ ÓÉÍ×ÏÌÙ\n" -" -X --discard-locals õÄÁÌÉÔØ ÌÀÂÙÅ ÓÉÍ×ÏÌÙ, ÓÇÅÎÅÒÉÒÏ×ÁÎÎÙÅ ËÏÍÐÉÌÑÔÏÒÏÍ\n" -" -i --interleave <ÞÉÓÌÏ> ëÏÐÉÒÏ×ÁÔØ ÔÏÌØËÏ ÏÄÉÎ ÂÁÊÔ ÞÅÒÅÚ ËÁÖÄÏÅ <ÞÉÓÌÏ> ÂÁÊÔ\n" -" -b --byte <ÎÏÍÅÒ> ÷ÙÂÒÁÔØ ÂÁÊÔ <ÎÏÍÅÒ> × ËÁÖÄÏÍ ÞÅÒÅÄÕÀÝÅÍÓÑ ÂÌÏËÅ\n" -" --gap-fill <ÚÎÁÞÅÎÉÅ> úÁÐÏÌÎÉÔØ ÐÒÏÍÅÖÕÔËÉ ÍÅÖÄÕ ÒÁÚÄÅÌÁÍÉ <ÚÎÁÞÅÎÉÅÍ>\n" -" --pad-to <ÁÄÒÅÓ> úÁÐÏÌÎÉÔØ ÐÏÓÌÅÄÎÉÊ ÒÁÚÄÅÌ ÄÏ ÁÄÒÅÓÁ <ÁÄÒÅÓ>\n" -" --set-start <ÁÄÒÅÓ> õÓÔÁÎÏ×ÉÔØ ÎÁÞÁÌØÎÙÊ ÁÄÒÅÓ × <ÁÄÒÅÓ>\n" -" {--change-start|--adjust-start} <ÐÒÉÒÁÝÅÎÉÅ>\n" -" äÏÂÁ×ÉÔØ <ÐÒÉÒÁÝÅÎÉÅ> Ë ÎÁÞÁÌØÎÏÍÕ ÁÄÒÅÓÕ\n" -" {--change-addresses|--adjust-vma} <ÐÒÉÒÁÝÅÎÉÅ>\n" -" äÏÂÁ×ÉÔØ <ÐÒÉÒÁÝÅÎÉÅ> Ë LMA, VMA É ÎÁÞÁÌØÎÏÍÕ ÁÄÒÅÓÁÍ\n" -" {--change-section-address|--adjust-section-vma} <ÉÍÑ>{=|+|-}<ÚÎÁÞÅÎÉÅ>\n" -" éÚÍÅÎÉÔØ LMA É VMA ÒÁÚÄÅÌÁ <ÉÍÑ> ÎÁ <ÚÎÁÞÅÎÉÅ>\n" -" --change-section-lma <ÉÍÑ>{=|+|-}<ÚÎÁÞÅÎÉÅ>\n" -" éÚÍÅÎÉÔØ LMA ÒÁÚÄÅÌÁ <ÉÍÑ> ÎÁ <ÚÎÁÞÅÎÉÅ>\n" -" --change-section-vma <ÉÍÑ>{=|+|-}<ÚÎÁÞÅÎÉÅ>\n" -" éÚÍÅÎÉÔØ VMA ÒÁÚÄÅÌÁ <ÉÍÑ> ÎÁ <ÚÎÁÞÅÎÉÅ>\n" +" -I --input-target Подразумевается входной файл в формате \n" +" -O --output-target Создать выходной файл в формате \n" +" -B --binary-architecture <арх> Установить архитектуру для выходного файла, когда входной файл двоичный\n" +" -F --target Установить входной и выходной форматы в \n" +" --debugging Преобразовать отладочную информацию, если это возможно\n" +" -p --preserve-dates Копировать время модификации/доступа на вывод\n" +" -j --only-section <имя> Копировать раздел <имя> на вывод\n" +" --add-gnu-debuglink=<файл> Добавление связывания раздела .gnu_debuglink в <файл>\n" +" -R --remove-section <имя> Удалить раздел <имя> из вывода\n" +" -S --strip-all Удалить все символы и информацию о перемещении\n" +" -g --strip-debug Удалить все отладочные символы и разделы\n" +" --strip-unneeded Удалить все символы, не нужные для перемещений\n" +" -N --strip-symbol <имя> Не копировать символ <имя>\n" +" --strip-unneeded-symbol <имя>\n" +" Не копировать символ <имя>, если не нужен для\n" +" для перемещений\n" +" --only-keep-debug Оставить только отладочную информацию\n" +" --extract-symbol Удалить содержимое раздела, но оставить символы\n" +" -K --keep-symbol <имя> Копировать только символ <имя>\n" +" --keep-file-symbols Не выделять символы файла\n" +" --localize-hidden Преобразовать все скрытые символы ELF в локальные\n" +" -L --localize-symbol <имя> Принудительно помечать символ <имя> как локальный\n" +" --globalize-symbol <имя> Принудительно помечать символ <имя> как глобальный\n" +" -G --keep-global-symbol <имя> Локализовать все символы кроме <имя>\n" +" -W --weaken-symbol <имя> Принудительно пометить символ <имя> как слабый\n" +" --weaken Принудительно пометить глобальные символы как слабые\n" +" -w --wildcard Разрешить маску при сравнении символов\n" +" -x --discard-all Удалить все неглобальные символы\n" +" -X --discard-locals Удалить любые символы, сгенерированные компилятором\n" +" -i --interleave <число> Копировать только один байт через каждое <число> байт\n" +" -b --byte <номер> Выбрать байт <номер> в каждом чередующемся блоке\n" +" --gap-fill <значение> Заполнить промежутки между разделами <значением>\n" +" --pad-to <адрес> Заполнить последний раздел до адреса <адрес>\n" +" --set-start <адрес> Установить начальный адрес в <адрес>\n" +" {--change-start|--adjust-start} <приращение>\n" +" Добавить <приращение> к начальному адресу\n" +" {--change-addresses|--adjust-vma} <приращение>\n" +" Добавить <приращение> к LMA, VMA и начальному адресам\n" +" {--change-section-address|--adjust-section-vma} <имя>{=|+|-}<значение>\n" +" Изменить LMA и VMA раздела <имя> на <значение>\n" +" --change-section-lma <имя>{=|+|-}<значение>\n" +" Изменить LMA раздела <имя> на <значение>\n" +" --change-section-vma <имя>{=|+|-}<значение>\n" +" Изменить VMA раздела <имя> на <значение>\n" " {--[no-]change-warnings|--[no-]adjust-warnings}\n" -" ðÒÅÄÕÐÒÅÄÉÔØ, ÅÓÌÉ ÎÁÚ×ÁÎÎÙÊ ÒÁÚÄÅÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ\n" -" --set-section-flags <ÉÍÑ>=<ÆÌÁÇÉ>\n" -" õÓÔÁÎÏ×ÉÔØ Ó×ÏÊÓÔ×Á ÒÁÚÄÅÌÁ <ÉÍÑ> × <ÆÌÁÇÉ>\n" -" --add-section <ÉÍÑ>=<ÆÁÊÌ> äÏÂÁ×ÉÔØ ÒÁÚÄÅÌ <ÉÍÑ>, ÎÁÊÄÅÎÎÙÊ × <ÆÁÊÌÅ>, ÎÁ ×Ù×ÏÄ\n" -" --rename-section <ÓÔÁÒ>=<ÎÏ×>[,<ÆÌÁÇÉ>] ðÅÒÅÉÍÅÎÏ×ÁÔØ ÒÁÚÄÅÌ <ÓÔÁÒ> ÎÁ <ÎÏ×>\n" -" --change-leading-char ðÒÉÎÕÄÉÔÅÌØÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÔÉÌØ ÚÁÇÌÁ×ÎÏÇÏ ÓÉÍ×ÏÌÁ ÄÌÑ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ\n" -" --remove-leading-char õÄÁÌÉÔØ ÚÁÇÌÁ×ÎÙÊ ÓÉÍ×ÏÌ ÉÚ ÇÌÏÂÁÌØÎÙÈ ÓÉÍ×ÏÌÏ×\n" -" --redefine-sym <ÓÔÁÒ>=<ÎÏ×> ðÅÒÅÏÐÒÅÄÅÌÉÔØ ÉÍÑ ÓÉÍ×ÏÌÁ <ÓÔÁÒ> ÎÁ <ÎÏ×>\n" -" --redefine-syms <ÆÁÊÌ> --redefine-sym ÄÌÑ ×ÓÅÈ ÐÁÒ ÓÉÍ×ÏÌÏ×,\n" -" ÐÅÒÅÞÉÓÌÅÎÎÙÈ × <ÆÁÊÌÅ>\n" -" --srec-len <ÞÉÓÌÏ> ïÇÒÁÎÉÞÉÔØ ÄÌÉÎÕ ÓÏÚÄÁÎÎÙÈ S-ÚÁÐÉÓÅÊ\n" -" --srec-forceS3 ïÇÒÁÎÉÞÉÔØ ÔÉÐ ÓÏÚÄÁÎÎÙÈ S-ÚÁÐÉÓÅÊ ÄÏ S3\n" -" --strip-symbols <ÆÁÊÌ> -N ÄÌÑ ×ÓÅÈ ÓÉÍÏÌÏ×, ÐÅÒÅÞÉÓÌÅÎÎÙÈ × <ÆÁÊÌÅ>\n" -" --strip-unneeded-symbols <ÆÁÊÌ>\n" -" --strip-unneeded-symbol ÄÌÑ ×ÓÅÈ ÓÉÍ×ÏÌÏ×, ÐÅÒÅÞÉÓÌÅÎÎÙÈ\n" -" × <ÆÁÊÌÅ>\n" -" --keep-symbols <ÆÁÊÌ> -K ÄÌÑ ×ÓÅÈ ÓÉÍÏÌÏ×, ÐÅÒÅÞÉÓÌÅÎÎÙÈ × <ÆÁÊÌÅ>\n" -" --localize-symbols <ÆÁÊÌ> -L ÄÌÑ ×ÓÅÈ ÓÉÍÏÌÏ×, ÐÅÒÅÞÉÓÌÅÎÎÙÈ × <ÆÁÊÌÅ>\n" -" --keep-global-symbols <ÆÁÊÌ> -G ÄÌÑ ×ÓÅÈ ÓÉÍÏÌÏ×, ÐÅÒÅÞÉÓÌÅÎÎÙÈ × <ÆÁÊÌÅ>\n" -" --weaken-symbols <ÆÁÊÌ> -W ÄÌÑ ×ÓÅÈ ÓÉÍÏÌÏ×, ÐÅÒÅÞÉÓÌÅÎÎÙÈ × <ÆÁÊÌÅ>\n" -" --alt-machine-code <ÉÎÄÅËÓ> éÓÐÏÌØÚÏ×ÁÔØ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ ËÏÄ ÍÁÛÉÎÙ ÄÌÑ ×Ù×ÏÄÁ\n" -" --writable-text ðÏÍÅÔÉÔØ ×ÙÈÏÄÎÏÊ ÔÅËÓÔ ËÁË ÐÅÒÅÚÁÐÉÓÙ×ÁÅÍÙÊ\n" -" --readonly-text ðÏÍÅÔÉÔØ ×ÙÈÏÄÎÏÊ ÔÅËÓÔ ËÁË ÚÁÝÉÝÅÎÎÙÊ ÏÔ ÚÁÐÉÓÉ\n" -" --pure ðÏÍÅÔÉÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ËÁË ÌÉÓÔÁÅÍÙÊ ÐÏ ×ÙÚÏ×Õ\n" -" --impure ðÏÍÅÔÉÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ ËÁË ÚÁÇÒÑÚÎÅÎÎÙÊ\n" -" --prefix-symbols <ÐÒÅÆÉËÓ> äÏÂÁ×ÉÔØ <ÐÒÅÆÉËÓ> × ÎÁÞÁÌÏ ÉÍÅÎÉ ËÁÖÄÏÇÏ ÓÉÍ×ÏÌÁ\n" -" --prefix-sections <ÐÒÅÆÉËÓ> äÏÂÁ×ÉÔØ <ÐÒÅÆÉËÓ> × ÎÁÞÁÌÏ ÉÍÅÎÉ ËÁÖÄÏÇÏ ÒÁÚÄÅÌÁ\n" -" --prefix-alloc-sections <ÐÒÅÆÉËÓ>\n" -" äÏÂÁ×ÉÔØ <ÐÒÅÆÉËÓ> × ÎÁÞÁÌÏ ÉÍÅÎÉ ËÁÖÄÏÇÏ\n" -" ÎÁÚÎÁÞÁÅÍÏÇÏ ÒÁÚÄÅÌÁ\n" -" -v --verbose ðÅÒÅÞÉÓÌÉÔØ ×ÓÅ ÍÏÄÉÆÉÃÉÒÏ×ÁÎÎÙÅ ÏÂßÅËÔÎÙÅ ÆÁÊÌÙ\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -V --version ÷Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ\n" -" -h --help ÷Ù×ÅÓÔÉ ÜÔÕ ÓÐÒÁ×ËÕ\n" -" --info ðÅÒÅÞÉÓÌÉÔØ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÆÏÒÍÁÔÙ ÏÂßÅËÔÏ× É ÁÒÈÉÔÅËÔÕÒÙ\n" - -#: objcopy.c:493 +" Предупредить, если названный раздел не существует\n" +" --set-section-flags <имя>=<флаги>\n" +" Установить свойства раздела <имя> в <флаги>\n" +" --add-section <имя>=<файл> Добавить раздел <имя>, найденный в <файле>, на вывод\n" +" --rename-section <стар>=<нов>[,<флаги>] Переименовать раздел <стар> на <нов>\n" +" --change-leading-char Принудительно использовать стиль заглавного символа для выходного формата\n" +" --remove-leading-char Удалить заглавный символ из глобальных символов\n" +" --reverse-bytes=<число> Переворачивать <число> байт за раз, в выходных разделах с содержимым\n" +" --redefine-sym <стар>=<нов> Переопределить имя символа <стар> на <нов>\n" +" --redefine-syms <файл> --redefine-sym для всех пар символов,\n" +" перечисленных в <файле>\n" +" --srec-len <число> Ограничить длину созданных S-записей\n" +" --srec-forceS3 Ограничить тип созданных S-записей до S3\n" +" --strip-symbols <файл> -N для всех симолов, перечисленных в <файле>\n" +" --strip-unneeded-symbols <файл>\n" +" --strip-unneeded-symbol для всех символов, перечисленных\n" +" в <файле>\n" +" --keep-symbols <файл> -K для всех симолов, перечисленных в <файле>\n" +" --localize-symbols <файл> -L для всех симолов, перечисленных в <файле>\n" +" --globalize-symbols <файл> --globalize-symbol для всех в <файле>\n" +" --keep-global-symbols <файл> -G для всех симолов, перечисленных в <файле>\n" +" --weaken-symbols <файл> -W для всех симолов, перечисленных в <файле>\n" +" --alt-machine-code <индекс> Использовать альтернативный код машины для вывода\n" +" --writable-text Пометить выходной текст как перезаписываемый\n" +" --readonly-text Пометить выходной текст как защищенный от записи\n" +" --pure Пометить выходной файл как листаемый по вызову\n" +" --impure Пометить выходной файл как загрязненный\n" +" --prefix-symbols <префикс> Добавить <префикс> в начало имени каждого символа\n" +" --prefix-sections <префикс> Добавить <префикс> в начало имени каждого раздела\n" +" --prefix-alloc-sections <префикс>\n" +" Добавить <префикс> в начало имени каждого\n" +" назначаемого раздела\n" +" -v --verbose Перечислить все модифицированные объектные файлы\n" +" @<файл> Читать опции из <файла>\n" +" -V --version Вывести номер версии этой программы\n" +" -h --help Вывести эту справку\n" +" --info Перечислить поддерживаемые форматы объектов и архитектуры\n" + +#: objcopy.c:522 #, c-format msgid "Usage: %s in-file(s)\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s <ÏÐÃÉÉ> in-ÆÁÊÌ(Ù)\n" +msgstr "Использование: %s <опции> in-файл(ы)\n" -#: objcopy.c:494 +#: objcopy.c:523 #, c-format msgid " Removes symbols and sections from files\n" -msgstr " õÄÁÌÑÅÔ ÓÉÍ×ÏÌÙ É ÒÁÚÄÅÌÙ ÉÚ ÆÁÊÌÏ×\n" +msgstr " Удаляет символы и разделы из файлов\n" -#: objcopy.c:496 +#: objcopy.c:525 #, c-format msgid "" " -I --input-target= Assume input file is in format \n" @@ -2732,6 +2773,7 @@ msgid "" " --only-keep-debug Strip everything but the debug information\n" " -N --strip-symbol= Do not copy symbol \n" " -K --keep-symbol= Do not strip symbol \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" @@ -2741,279 +2783,316 @@ msgid "" " --info List object formats & architectures supported\n" " -o Place stripped output into \n" msgstr "" -" -I --input-target= ðÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ×ÈÏÄÎÏÊ ÆÁÊÌ × ÆÏÒÍÁÔÅ \n" -" -O --output-target= óÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ × ÆÏÒÍÁÔÅ \n" -" -F --target= õÓÔÁÎÏ×ÉÔØ ×ÈÏÄÎÏÊ É ×ÙÈÏÄÎÏÊ ÆÏÒÍÁÔÙ × \n" -" -p --preserve-dates ëÏÐÉÒÏ×ÁÔØ ×ÒÅÍÑ ÍÏÄÉÆÉËÁÃÉÉ/ÄÏÓÔÕÐÁ ÎÁ ×Ù×ÏÄ\n" -" -R --remove-section <ÉÍÑ> õÄÁÌÉÔØ ÒÁÚÄÅÌ <ÉÍÑ> ÉÚ ×Ù×ÏÄÁ\n" -" -s --strip-all õÄÁÌÉÔØ ×ÓÅ ÓÉÍ×ÏÌÙ É ÉÎÆÏÒÍÁÃÉÀ Ï ÐÅÒÅÍÅÝÅÎÉÉ\n" -" -g -S -d --strip-debug õÄÁÌÉÔØ ×ÓÅ ÏÔÌÁÄÏÞÎÙÅ ÓÉÍ×ÏÌÙ É ÒÁÚÄÅÌÙ\n" -" --strip-unneeded õÄÁÌÉÔØ ×ÓÅ ÓÉÍ×ÏÌÙ, ÎÅ ÎÕÖÎÙÅ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÊ\n" -" --only-keep-debug õÄÁÌÉÔØ ×Ó£, ÚÁ ÉÓËÌÀÞÅÎÉÅÍ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -N --strip-symbol=<ÉÍÑ> îÅ ËÏÐÉÒÏ×ÁÔØ ÓÉÍ×ÏÌ <ÉÍÑ>\n" -" -K --keep-symbol=<ÉÍÑ> ëÏÐÉÒÏ×ÁÔØ ÔÏÌØËÏ ÓÉÍ×ÏÌ <ÉÍÑ>\n" -" -w --wildcard òÁÚÒÅÛÉÔØ ÍÁÓËÕ ÐÒÉ ÓÒÁ×ÎÅÎÉÉ ÓÉÍ×ÏÌÏ×\n" -" -x --discard-all õÄÁÌÉÔØ ×ÓÅ ÎÅÇÌÏÂÁÌØÎÙÅ ÓÉÍ×ÏÌÙ\n" -" -X --discard-locals õÄÁÌÉÔØ ÌÀÂÙÅ ÓÉÍ×ÏÌÙ, ÓÇÅÎÅÒÉÒÏ×ÁÎÎÙÅ ËÏÍÐÉÌÑÔÏÒÏÍ\n" -" -v --verbose ðÅÒÅÞÉÓÌÉÔØ ×ÓÅ ÍÏÄÉÆÉÃÉÒÏ×ÁÎÎÙÅ ÏÂßÅËÔÎÙÅ ÆÁÊÌÙ\n" -" -V --version ÷Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ\n" -" -h --help ÷Ù×ÅÓÔÉ ÜÔÕ ÓÐÒÁ×ËÕ\n" -" --info ðÅÒÅÞÉÓÌÉÔØ ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÆÏÒÍÁÔÙ ÏÂßÅËÔÏ× É ÁÒÈÉÔÅËÔÕÒÙ\n" -" -o <ÆÁÊÌ> ðÏÍÅÓÔÉÔØ ÏÂÒÁÂÏÔÁÎÎÙÅ ×ÙÈÏÄÎÙÅ ÄÁÎÎÙÅ × <ÆÁÊÌ>\n" - -#: objcopy.c:568 +" -I --input-target= подразумевается входной файл в формате \n" +" -O --output-target= создать выходной файл в формате \n" +" -F --target= установить входной и выходной форматы в \n" +" -p --preserve-dates копировать время модификации/доступа на вывод\n" +" -R --remove-section <имя> удалить раздел <имя> из вывода\n" +" -s --strip-all удалить все символы и информацию о перемещении\n" +" -g -S -d --strip-debug удалить все отладочные символы и разделы\n" +" --strip-unneeded удалить все символы, не нужные для перемещений\n" +" --only-keep-debug удалить всё, за исключением отладочной информации\n" +" -N --strip-symbol=<имя> не копировать символ <имя>\n" +" -K --keep-symbol=<имя> копировать только символ <имя>\n" +" -w --wildcard разрешить маску при сравнении символов\n" +" -x --discard-all удалить все неглобальные символы\n" +" -X --discard-locals удалить любые символы, сгенерированные компилятором\n" +" -v --verbose перечислить все модифицированные объектные файлы\n" +" -V --version показать номер версии этой программы\n" +" -h --help показать эту справку\n" +" --info вывести список поддерживаемых форматов объектов и архитектуры\n" +" -o <файл> поместить обработанные выходные данные в <файл>\n" + +#: objcopy.c:598 #, c-format msgid "unrecognized section flag `%s'" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ÆÌÁÇ ÒÁÚÄÅÌÁ `%s'" +msgstr "нераспознанный флаг раздела `%s'" -#: objcopy.c:569 +#: objcopy.c:599 #, c-format msgid "supported flags: %s" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÆÌÁÇÉ: %s" +msgstr "неподдерживаемые флаги: %s" -#: objcopy.c:646 +#: objcopy.c:679 #, c-format msgid "cannot open '%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ '%s': %s" +msgstr "невозможно открыть '%s': %s" -#: objcopy.c:649 objcopy.c:2722 +#: objcopy.c:682 objcopy.c:2987 #, c-format msgid "%s: fread failed" -msgstr "%s: fread ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÄÁÞÅÊ" +msgstr "%s: fread завершился неудачей" -#: objcopy.c:722 +#: objcopy.c:755 #, c-format msgid "%s:%d: Ignoring rubbish found on this line" -msgstr "%s:%d: ðÒÏÐÕÓËÁÅÔÓÑ ÍÕÓÏÒ, ÎÁÊÄÅÎÎÙÊ × ÜÔÏÊ ÓÔÒÏËÅ " +msgstr "%s:%d: Пропускается мусор, найденный в этой строке" + +#: objcopy.c:1033 +#, c-format +msgid "not stripping symbol `%s' because it is named in a relocation" +msgstr "символ `%s' не выделяется, потому что он назван в перемещении" -#: objcopy.c:996 +#: objcopy.c:1116 #, c-format msgid "%s: Multiple redefinition of symbol \"%s\"" -msgstr "%s: íÎÏÇÏËÒÁÔÎÏÅ ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÅ ÓÉÍ×ÏÌÁ \"%s\"" +msgstr "%s: Многократное переопределение символа \"%s\"" -#: objcopy.c:1000 +#: objcopy.c:1120 #, c-format msgid "%s: Symbol \"%s\" is target of more than one redefinition" -msgstr "%s: óÉÍ×ÏÌ \"%s\" Ñ×ÌÑÅÔÓÑ ÃÅÌØÀ ÂÏÌÅÅ, ÞÅÍ ÏÄÎÏÇÏ ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÑ" +msgstr "%s: Символ \"%s\" является целью более, чем одного переопределения" -#: objcopy.c:1028 +#: objcopy.c:1148 #, c-format msgid "couldn't open symbol redefinition file %s (error: %s)" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ ÐÅÒÅÏÐÒÅÄÅÌÅÎÉÑ ÓÉÍ×ÏÌÁ %s (ÏÛÉÂËÁ: %s)" +msgstr "невозможно открыть файл переопределения символа %s (ошибка: %s)" -#: objcopy.c:1106 +#: objcopy.c:1226 #, c-format msgid "%s:%d: garbage found at end of line" -msgstr "%s:%d: × ËÏÎÃÅ ÓÔÒÏËÉ ÎÁÊÄÅÎ ÍÕÓÏÒ" +msgstr "%s:%d: в конце строки найден мусор" -#: objcopy.c:1109 +#: objcopy.c:1229 #, c-format msgid "%s:%d: missing new symbol name" -msgstr "%s:%d: ÏÔÓÕÔÓÔ×ÕÅÔ ÉÍÑ ÎÏ×ÏÇÏ ÓÉÍ×ÏÌÁ" +msgstr "%s:%d: отсутствует имя нового символа" -#: objcopy.c:1119 +#: objcopy.c:1239 #, c-format msgid "%s:%d: premature end of file" -msgstr "%s:%d: ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ" +msgstr "%s:%d: преждевременный конец файла" -#: objcopy.c:1145 +#: objcopy.c:1265 #, c-format msgid "stat returns negative size for `%s'" -msgstr "stat ×ÏÚ×ÒÁÔÉÌ ÏÔÒÉÃÁÔÅÌØÎÙÊ ÒÁÚÍÅÒ ÄÌÑ `%s'" +msgstr "stat возвратил отрицательный размер для `%s'" -#: objcopy.c:1157 +#: objcopy.c:1277 #, c-format msgid "copy from `%s' [unknown] to `%s' [unknown]\n" -msgstr "ËÏÐÉÒÏ×ÁÎÉÅ ÉÚ `%s' [ÎÅÉÚ×.] × `%s' [ÎÅÉÚ×.]\n" +msgstr "копирование из `%s' [неизв.] в `%s' [неизв.]\n" -#: objcopy.c:1212 +#: objcopy.c:1332 msgid "Unable to change endianness of input file(s)" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ endianness ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ" +msgstr "Невозможно изменить endianness входного файла" -#: objcopy.c:1221 +#: objcopy.c:1341 #, c-format msgid "copy from `%s' [%s] to `%s' [%s]\n" -msgstr "ËÏÐÉÒÏ×ÁÎÉÅ ÉÚ `%s' [%s] × `%s' [%s]\n" +msgstr "копирование из `%s' [%s] в `%s' [%s]\n" -#: 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 "îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÆÏÒÍÁÔ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ `%s'" +msgstr "Невозможно определить формат входного файла `%s'" -#: objcopy.c:1261 +#: objcopy.c:1386 #, c-format msgid "Warning: Output file cannot represent architecture `%s'" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÷ÙÈÏÄÎÏÊ ÆÁÊÌ ÎÅ ÍÏÖÅÔ ÐÒÅÄÏÓÔÁ×ÉÔØ ÁÒÈÉÔÅËÔÕÒÕ `%s'" +msgstr "Предупреждение: Выходной файл не может предоставить архитектуру `%s'" -#: objcopy.c:1305 +#: objcopy.c:1449 #, c-format -msgid "can't create section `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÒÁÚÄÅÌ `%s': %s" +msgid "can't add section '%s' - it already exists!" +msgstr "невозможно добавить раздел '%s' - он уже существует!" -#: objcopy.c:1356 -msgid "there are no sections to be copied!" -msgstr "ÎÅÔ ÒÁÚÄÅÌÏ× ÄÌÑ ËÏÐÉÒÏ×ÁÎÉÑ!" +#: objcopy.c:1457 +#, c-format +msgid "can't create section `%s': %s" +msgstr "невозможно создать раздел `%s': %s" -#: objcopy.c:1402 +#: objcopy.c:1593 #, c-format msgid "Can't fill gap after %s: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÏÌÎÉÔØ ÐÒÏÍÅÖÕÔÏË ÐÏÓÌÅ %s: %s" +msgstr "Невозможно заполнить промежуток после %s: %s" -#: objcopy.c:1427 +#: objcopy.c:1618 #, c-format msgid "Can't add padding to %s: %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÚÁÐÏÌÎÅÎÉÅ × %s: %s" +msgstr "Невозможно добавить заполнение в %s: %s" -#: objcopy.c:1594 +#: objcopy.c:1771 #, c-format msgid "%s: error copying private BFD data: %s" -msgstr "%s: ÏÛÉÂËÁ ËÏÐÉÒÏ×ÁÎÉÑ ÞÁÓÔÎÙÈ ÄÁÎÎÙÈ BFD: %s" +msgstr "%s: ошибка копирования частных данных BFD: %s" -#: objcopy.c:1605 -msgid "unknown alternate machine code, ignored" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÁÌØÔÅÒÎÁÔÉ×ÎÙÊ ËÏÄ ÍÁÛÉÎÙ, ÐÒÏÐÕÝÅÎ" - -#: objcopy.c:1635 objcopy.c:1665 +#: objcopy.c:1784 #, c-format -msgid "cannot mkdir %s for archive copying (error: %s)" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ mkdir %s ÄÌÑ ËÏÐÉÒÏ×ÁÎÉÑ ÁÒÈÉ×Á (ÏÛÉÂËÁ: %s)" +msgid "this target does not support %lu alternative machine codes" +msgstr "эта цель не поддерживает альтернативные машинные коды %lu" + +#: objcopy.c:1788 +msgid "treating that number as an absolute e_machine value instead" +msgstr "считается, что число является абсолютным значением e_machine" + +#: 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" -msgstr "ÏÛÉÂËÁ: ×ÈÏÄÎÏÊ ÆÁÊÌ '%s' ÐÕÓÔ" +msgid "cannot create tempdir for archive copying (error: %s)" +msgstr "невозможно создать временный каталог для копирования архива (ошибка: %s)" -#: objcopy.c:1889 +#: objcopy.c:2088 #, c-format msgid "Multiple renames of section %s" -msgstr "íÎÏÇÏËÒÁÔÎÙÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ÒÁÚÄÅÌÁ %s" +msgstr "Многократные переименования раздела %s" -#: objcopy.c:1940 +#: objcopy.c:2139 msgid "private header data" -msgstr "ÞÁÓÔÎÙÅ ÄÁÎÎÙÅ ÚÁÇÏÌÏ×ËÁ" +msgstr "частные данные заголовка" -#: objcopy.c:1948 +#: objcopy.c:2147 #, c-format msgid "%s: error in %s: %s" -msgstr "%s: ÏÛÉÂËÁ × %s: %s" +msgstr "%s: ошибка в %s: %s" -#: objcopy.c:2007 +#: objcopy.c:2208 msgid "making" -msgstr "ÓÏÚÄÁÅÔÓÑ" +msgstr "создается" -#: objcopy.c:2022 +#: objcopy.c:2228 msgid "size" -msgstr "ÒÁÚÍÅÒ" +msgstr "размер" -#: objcopy.c:2036 +#: objcopy.c:2242 msgid "vma" msgstr "vma" -#: objcopy.c:2061 +#: objcopy.c:2267 msgid "alignment" -msgstr "ÏÒÉÅÎÔÁÃÉÑ" +msgstr "ориентация" -#: objcopy.c:2083 +#: objcopy.c:2289 msgid "private data" -msgstr "ÞÁÓÔÎÙÅ ÄÁÎÎÙÅ" +msgstr "частные данные" -#: objcopy.c:2091 +#: objcopy.c:2304 #, c-format msgid "%s: section `%s': error in %s: %s" -msgstr "%s: ÒÁÚÄÅÌ `%s': ÏÛÉÂËÁ × %s: %s" +msgstr "%s: раздел `%s': ошибка в %s: %s" -#: 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 "невозможно первернуть байты: длина раздела %s должна без остатка делиться на %d" + +#: objcopy.c:2605 #, c-format msgid "%s: can't create debugging section: %s" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÏÔÌÁÄÏÞÎÙÊ ÒÁÚÄÅÌ: %s" +msgstr "%s: невозможно создать отладочный раздел: %s" -#: objcopy.c:2377 +#: objcopy.c:2619 #, c-format msgid "%s: can't set debugging section contents: %s" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÓÏÄÅÒÖÉÍÏÅ ÏÔÌÁÄÏÞÎÏÇÏ ÒÁÚÄÅÌÁ: %s" +msgstr "%s: невозможно установить содержимое отладочного раздела: %s" -#: objcopy.c:2386 +#: objcopy.c:2628 #, c-format msgid "%s: don't know how to write debugging information for %s" -msgstr "%s: ÎÅ ÉÚ×ÅÓÔÎÏ, ËÁË ÚÁÐÉÓÁÔØ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ ÄÌÑ %s" +msgstr "%s: не известно, как записать отладочную информацию для %s" -#: objcopy.c:2561 +#: objcopy.c:2769 +#, c-format +msgid "could not create temporary file to hold stripped copy of '%s'" +msgstr "невозможно найти временный файл для хранения выделенной копии '%s'" + +#: objcopy.c:2819 msgid "byte number must be non-negative" -msgstr "ÎÏÍÅÒ ÂÁÊÔÁ ÄÏÌÖÅÎ ÂÙÔØ ÎÅÏÔÒÉÃÁÔÅÌØÎÙÍ" +msgstr "номер байта должен быть неотрицательным" -#: objcopy.c:2571 +#: objcopy.c:2829 msgid "interleave must be positive" -msgstr "ÞÅÒÅÄÏ×ÁÎÉÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÏÌÏÖÉÔÅÌØÎÙÍ" +msgstr "чередование должно быть положительным" -#: objcopy.c:2591 objcopy.c:2599 +#: objcopy.c:2849 objcopy.c:2857 #, c-format msgid "%s both copied and removed" -msgstr "ÏÂÁ %s ÓËÏÐÉÒÏ×ÁÎÙ É ÕÄÁÌÅÎÙ" +msgstr "оба %s скопированы и удалены" -#: 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 "ÐÌÏÈÏÊ ÆÏÒÍÁÔ ÄÌÑ %s" +msgstr "плохой формат для %s" -#: objcopy.c:2717 +#: objcopy.c:2982 #, c-format msgid "cannot open: %s: %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ: %s: %s" +msgstr "невозможно открыть: %s: %s" -#: objcopy.c:2836 +#: objcopy.c:3101 #, c-format msgid "Warning: truncating gap-fill from 0x%s to 0x%x" -msgstr "ðÒÅÄÕÐÒÅÖÅÄÎÉÅ: ÏÂÒÅÚÁÅÔÓÑ ÚÁÐÏÌÎÅÎÉÅ ÐÒÏÍÅÖÕÔËÁ ÏÔ 0x%s ÄÏ 0x%x" +msgstr "Предупрежедние: обрезается заполнение промежутка от 0x%s до 0x%x" -#: objcopy.c:3000 -msgid "alternate machine code index must be positive" -msgstr "ÉÎÄÅËÓ ÁÌØÔÅÒÎÁÔÉ×ÎÏÇÏ ËÏÄÁ ÍÁÛÉÎÙ ÄÏÌÖÅÎ ÂÙÔØ ÐÏÌÏÖÉÔÅÌØÎÙÍ" +# +#: objcopy.c:3269 +msgid "unable to parse alternative machine code" +msgstr "невозможно проанализировать альтернативный код машины" -#: objcopy.c:3058 +# +#: 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 "Предупреждение: игнрорируется значение %d предыдущего --reverse-bytes" + +#: objcopy.c:3345 msgid "byte number must be less than interleave" -msgstr "ÎÏÍÅÒ ÂÁÊÔÁ ÄÏÌÖÅÎ ÂÙÔØ ÍÅÎØÛÅ ÞÅÒÅÄÏ×ÁÎÉÑ" +msgstr "номер байта должен быть меньше чередования" -#: objcopy.c:3088 +#: objcopy.c:3375 #, c-format msgid "architecture %s unknown" -msgstr "ÁÒÈÉÔÅËÔÕÒÁ %s ÎÅ ÉÚ×ÅÓÔÎÁ" +msgstr "архитектура %s не известна" -#: objcopy.c:3092 +#: objcopy.c:3379 msgid "Warning: input target 'binary' required for binary architecture parameter." -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: 'Ä×ÏÉÞÎÙÊ' ÃÅÌÅ×ÏÊ ×ÈÏÄÎÏÊ ÆÁÊÌ ÔÒÅÂÕÅÔÓÑ ÄÌÑ ÐÁÒÁÍÅÔÒÁ Ä×ÏÉÞÎÏÊ ÁÒÈÉÔÅËÔÕÒÙ." +msgstr "Предупреждение: 'двоичный' целевой входной файл требуется для параметра двоичной архитектуры." -#: objcopy.c:3093 +#: objcopy.c:3380 #, c-format msgid " Argument %s ignored" -msgstr " áÒÇÕÍÅÎÔ %s ÐÒÏÐÕÝÅÎ" +msgstr " Аргумент %s пропущен" -#: objcopy.c:3099 +#: objcopy.c:3386 #, c-format msgid "warning: could not locate '%s'. System error message: %s" -msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ '%s'. óÉÓÔÅÍÎÏÅ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ: %s" +msgstr "предупреждение: невозможно найти '%s'. Системное сообщение об ошибке: %s" + +#: objcopy.c:3397 +#, c-format +msgid "warning: could not create temporary file whilst copying '%s', (error: %s)" +msgstr "предупреждение: не удаётся создать временный файл во время копирования '%s', (ошибка: %s)" -#: objcopy.c:3141 objcopy.c:3155 +#: objcopy.c:3424 objcopy.c:3438 #, c-format msgid "%s %s%c0x%s never used" -msgstr "%s %s%c0x%s ÎÉËÏÇÄÁ ÎÅ ÉÓÐÏÌØÚÕÅÔÓÑ" +msgstr "%s %s%c0x%s никогда не используется" -#: objdump.c:178 +#: objdump.c:176 #, c-format msgid "Usage: %s \n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s <ÏÐÃÉÉ> <ÆÁÊÌ(Ù)>\n" +msgstr "Использование: %s <опции> <файл(ы)>\n" -#: objdump.c:179 +#: objdump.c:177 #, c-format msgid " Display information from object .\n" -msgstr " ïÔÏÂÒÁÖÁÅÔ ÉÎÆÏÒÍÁÃÉÀ ÉÚ ÏÂßÅËÔÁ <ÆÁÊÌ(Ù)>.\n" +msgstr " Отображает информацию из объекта <файл(ы)>.\n" -#: objdump.c:180 +#: objdump.c:178 #, c-format msgid " At least one of the following switches must be given:\n" -msgstr " äÏÌÖÅÎ ÂÙÔØ ÕËÁÚÁÎ ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ ÏÄÉÎ ÉÚ ÓÌÅÄÕÀÝÉÈ ËÌÀÞÅÊ:\n" +msgstr " Должен быть указан по крайней мере один из следующих ключей:\n" -#: objdump.c:181 +#: objdump.c:179 #, c-format msgid "" " -a, --archive-headers Display archive header information\n" @@ -3038,37 +3117,37 @@ msgid "" " -i, --info List object formats and architectures supported\n" " -H, --help Display this information\n" msgstr "" -" -a, --archive-headers ÷Ù×ÅÓÔÉ ÉÎÆÏÒÍÁÃÉÀ ÚÁÇÏÌÏ×ËÁ ÁÒÈÉ×Á\n" -" -f, --file-headers ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÚÁÇÏÌÏ×ËÁ ×ÓÅÇÏ ÆÁÊÌÁ\n" -" -p, --private-headers ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÚÁÇÏÌÏ×ËÁ ÆÁÊÌÁ, ÓÐÅÃÉÆÉÞÎÏÇÏ ÄÌÑ ÆÏÒÍÁÔÁ ÏÂßÅËÔÁ\n" -" -h, --[section-]headers ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÚÁÇÏÌÏ×ËÏ× ÒÁÚÄÅÌÏ×\n" -" -x, --all-headers ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ×ÓÅÈ ÚÁÇÏÌÏ×ËÏ×\n" -" -d, --disassemble ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÁÓÓÅÍÂÌÅÒÁ ÉÓÐÏÌÎÑÅÍÙÈ ÒÁÚÄÅÌÏ×\n" -" -D, --disassemble-all ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÁÓÓÅÍÂÌÅÒÁ ×ÓÅÈ ÒÁÚÄÅÌÏ×\n" -" -S, --source ðÅÒÅÍÅÛÁÔØ ÉÓÈÏÄÎÙÊ ËÏÄ Ó ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÅÍ\n" -" -s, --full-contents ÷Ù×ÅÓÔÉ ÐÏÌÎÏÅ ÓÏÄÅÒÖÉÍÏÅ ×ÓÅÈ ÚÁÐÒÏÛÅÎÎÙÈ ÒÁÚÄÅÌÏ×\n" -" -g, --debugging ÷Ù×ÅÓÔÉ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ × ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ\n" -" -e, --debugging-tags ÷Ù×ÅÓÔÉ ÏÔÌÁÄÏÞÎÕÀ ÉÎÆÏÒÍÁÃÉÀ × ÓÔÉÌÅ ctags\n" -" -G, --stabs ÷Ù×ÅÓÔÉ (× ÓÙÒÏÊ ÆÏÒÍÅ) ÌÀÂÕÀ ÉÎÆÏÒÍÁÃÉÀ STABS × ÆÁÊÌÅ\n" -" -t, --syms ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÔÁÂÌÉÃ(Ù) ÓÉÍ×ÏÌÏ×\n" -" -T, --dynamic-syms ÷Ù×ÅÓÔÉ ÓÏÄÅÒÖÉÍÏÅ ÔÁÂÌÉÃÙ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÉÍ×ÏÌÏ×\n" -" -r, --reloc ÷Ù×ÅÓÔÉ ÐÕÎËÔÙ ÐÅÒÅÍÅÝÅÎÉÑ × ÆÁÊÌÅ\n" -" -R, --dynamic-reloc ÷Ù×ÅÓÔÉ ÐÕÎËÔÙ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÐÅÒÅÍÅÝÅÎÉÑ × ÆÁÊÌÅ\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -v, --version ÷Ù×ÅÓÔÉ ÎÏÍÅÒ ×ÅÒÓÉÉ ÜÔÏÊ ÐÒÏÇÒÁÍÍÙ\n" -" -i, --info ÷Ù×ÅÓÔÉ ÓÐÉÓÏË ÐÏÄÄÅÒÖÉ×ÁÅÍÙÈ ÆÏÒÍÁÔÏ× ÏÂßÅËÔÏ× É ÁÒÈÉÔÅËÔÕÒ\n" -" -H, --help ÷Ù×ÅÓÔÉ ÜÔÕ ÉÎÆÏÒÍÁÃÉÀ\n" - -#: objdump.c:206 +" -a, --archive-headers показать информацию заголовка архива\n" +" -f, --file-headers показать содержимое заголовка всего файла\n" +" -p, --private-headers показать содержимое заголовка файла, специфичного для формата объекта\n" +" -h, --[section-]headers показать содержимое заголовков разделов\n" +" -x, --all-headers показать содержимое всех заголовков\n" +" -d, --disassemble показать содержимое ассемблера исполняемых разделов\n" +" -D, --disassemble-all показать содержимое ассемблера всех разделов\n" +" -S, --source перемешать исходный код с дизассемблированием\n" +" -s, --full-contents показать полное содержимое всех запрошенных разделов\n" +" -g, --debugging показать отладочную информацию в объектном файле\n" +" -e, --debugging-tags показать отладочную информацию в стиле ctags\n" +" -G, --stabs показать (в сырой форме) любую информацию STABS в файле\n" +" -t, --syms показать содержимое таблиц(ы) символов\n" +" -T, --dynamic-syms показать содержимое таблицы динамических символов\n" +" -r, --reloc показать пункты перемещения в файле\n" +" -R, --dynamic-reloc показать пункты динамического перемещения в файле\n" +" @<файл> показать параметры из <файла>\n" +" -v, --version показать номер версии этой программы\n" +" -i, --info вывести список поддерживаемых форматов объектов и архитектур\n" +" -H, --help показать эту информацию\n" + +#: objdump.c:204 #, c-format msgid "" "\n" " The following switches are optional:\n" msgstr "" "\n" -" óÌÅÄÕÀÝÉÅ ËÌÀÞÉ Ñ×ÌÑÀÔÓÑ ÏÐÃÉÏÎÁÌØÎÙÍÉ:\n" +" Следующие ключи являются опциональными:\n" -#: objdump.c:207 +#: objdump.c:205 #, c-format msgid "" " -b, --target=BFDNAME Specify the target object format as BFDNAME\n" @@ -3094,370 +3173,390 @@ msgid "" " --special-syms Include special symbols in symbol dumps\n" "\n" msgstr "" -" -b, --target=BFD-éíñ õËÁÚÁÔØ ÃÅÌÅ×ÏÊ ÆÏÒÍÁÔ ÏÂßÅËÔÁ ËÁË BFD-éíñ\n" -" -m, --architecture=íáûéîá õËÁÚÁÔØ ÃÅÌÅ×ÕÀ ÁÒÈÉÔÅËÔÕÒÕ ËÁË íáûéîá\n" -" -j, --section=éíñ ÷Ù×ÅÓÔÉ ÉÎÆÏÒÍÁÃÉÀ ÔÏÌØËÏ ÄÌÑ ÒÁÚÄÅÌÁ éíñ\n" -" -M, --disassembler-options=OPT ðÅÒÅÄÁÔØ ÔÅËÓÔ OPT × ÄÉÚÁÓÓÅÍÂÌÅÒ\n" -" -EB --endian=big ðÒÅÄÐÏÌÏÖÉÔØ ÆÏÒÍÁÔ big endian ÐÒÉ ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÉ\n" -" -EL --endian=little ðÒÅÄÐÏÌÏÖÉÔØ ÆÏÒÍÁÔ little endian ÐÒÉ ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÉ\n" -" --file-start-context ÷ËÌÀÞÉÔØ ËÏÎÔÅËÓÔ ÉÚ ÎÁÞÁÌÁ ÆÁÊÌÁ (Ó -S)\n" -" -I, --include=ëáô äÏÂÁ×ÉÔØ ëáôÁÌÏÇ × ÓÐÉÓÏË ÐÏÉÓËÁ ÉÓÈÏÄÎÙÈ ÆÁÊÌÏ×\n" -" -l, --line-numbers ÷ËÌÀÞÉÔØ ÎÏÍÅÒÁ ÓÔÒÏË É ÉÍÅÎÁ ÆÁÊÌÏ× ÎÁ ×Ù×ÏÄÅ\n" -" -C, --demangle[=óôéìø] äÅËÏÄÉÒÏ×ÁÔØ ÓËÏÒÒÅËÔÉÒÏ×ÁÎÎÙÅ/ÏÂÒÁÂÏÔÁÎÎÙÅ ÉÍÅÎÁ ÓÉÍ×ÏÌÏ×\n" -" óôéìø, ÅÓÌÉ ÕËÁÚÁÎ, ÍÏÖÅÔ ÂÙÔØ `auto', `gnu',\n" +" -b, --target=BFD-ИМЯ указать целевой формат объекта как BFD-ИМЯ\n" +" -m, --architecture=МАШИНА указать целевую архитектуру как МАШИНА\n" +" -j, --section=ИМЯ показать информацию только для раздела ИМЯ\n" +" -M, --disassembler-options=OPT передать текст OPT в дизассемблер\n" +" -EB --endian=big предположить формат big endian при дизассемблировании\n" +" -EL --endian=little предположить формат little endian при дизассемблировании\n" +" --file-start-context включить контекст из начала файла (с -S)\n" +" -I, --include=КАТ добавить КАТалог в список поиска исходных файлов\n" +" -l, --line-numbers включить номера строк и имена файлов на выводе\n" +" -C, --demangle[=СТИЛЬ] декодировать скорректированные/обработанные имена символов\n" +" СТИЛЬ, если указан, может быть `auto', `gnu',\n" " `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" -" ÉÌÉ `gnat'\n" -" -w, --wide æÏÒÍÁÔÉÒÏ×ÁÔØ ×Ù×ÏÄ ÄÌÑ ÂÏÌÅÅ,šÞÅÍ 80 ËÏÌÏÎÏË\n" -" -z, --disassemble-zeroes îÅ ÐÒÏÐÕÓËÁÔØ ÂÌÏËÉ ÎÕÌÅÊ ÐÒÉ ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÉ\n" -" --start-address=áäòåó ïÂÒÁÂÏÔÁÔØ ÔÏÌØËÏ ÄÁÎÎÙÅ, ÁÄÒÅÓ ËÏÔÏÒÙÈ >= áäòåó\n" -" --stop-address=áäòåó ïÂÒÁÂÏÔÁÔØ ÔÏÌØËÏ ÄÁÎÎÙÅ, ÁÄÒÅÓ ËÏÔÏÒÙÈ <= áäòåó\n" -" --prefix-addresses ÷Ù×ÅÓÔÉ ÐÏÌÎÙÊ ÁÄÒÅÓ ÐÒÉ ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÉ\n" -" --[no-]show-raw-insn ÷Ù×ÅÓÔÉ hex ÐÒÉ ÓÉÍ×ÏÌÉÞÅÓËÏÍ ÄÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÉ\n" -" --adjust-vma=óíåýåîéå äÏÂÁ×ÉÔØ óíåýåîéå ËÏ ×ÓÅÍ ÁÄÒÅÓÁÍ ×Ù×ÏÄÉÍÙÈ ÒÁÚÄÅÌÏ×\n" -" --special-syms ÷ËÌÀÞÉÔØ ÓÐÅÃÉÁÌØÎÙÅ ÓÉÍ×ÏÌÙ × ÄÁÍÐÙ ÓÉÍ×ÏÌÏ×\n" +" или `gnat'\n" +" -w, --wide форматировать вывод для более, чем 80 колонок\n" +" -z, --disassemble-zeroes не пропускать блоки нулей при дизассемблировании\n" +" --start-address=АДРЕС обработать только данные, адрес которых >= АДРЕС\n" +" --stop-address=АДРЕС обработать только данные, адрес которых <= АДРЕС\n" +" --prefix-addresses показать полный адрес при дизассемблировании\n" +" --[no-]show-raw-insn показать hex при символическом дизассемблировании\n" +" --adjust-vma=СМЕЩЕНИЕ добавить СМЕЩЕНИЕ ко всем адресам выводимых разделов\n" +" --special-syms включить специальные символы в дампы символов\n" "\n" -#: objdump.c:389 +#: objdump.c:387 #, c-format msgid "Sections:\n" -msgstr "òÁÚÄÅÌÙ:\n" +msgstr "Разделы:\n" -#: objdump.c:392 objdump.c:396 +#: objdump.c:390 objdump.c:394 #, c-format msgid "Idx Name Size VMA LMA File off Algn" -msgstr "éÎÄ éÍÑ òÁÚÍÅÒ VMA LMA æÁÊÌ ÷ÙÒÁ×" +msgstr "Инд Имя Размер VMA LMA Файл Вырав" -#: objdump.c:398 +#: objdump.c:396 #, c-format msgid "Idx Name Size VMA LMA File off Algn" -msgstr "éÎÄ éÍÑ òÁÚÍÅÒ VMA LMA æÁÊÌ ÷ÙÒÁ×" +msgstr "Инд Имя Размер VMA LMA Файл Вырав" -#: objdump.c:402 +#: objdump.c:400 #, c-format msgid " Flags" -msgstr " æÌÁÇÉ" +msgstr " Флаги" -#: objdump.c:404 +#: objdump.c:402 #, c-format msgid " Pg" -msgstr " óÔÒ" +msgstr " Стр" -#: objdump.c:447 +#: objdump.c:445 #, c-format msgid "%s: not a dynamic object" -msgstr "%s: ÎÅ ÄÉÎÁÍÉÞÅÓËÉÊ ÏÂßÅËÔ" +msgstr "%s: не динамический объект" -#: objdump.c:1735 +#: objdump.c:1778 #, c-format msgid "Disassembly of section %s:\n" -msgstr "äÉÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÅ ÒÁÚÄÅÌÁ %s:\n" +msgstr "Диассемблирование раздела %s:\n" -#: objdump.c:1897 +#: objdump.c:1940 #, c-format msgid "Can't use supplied machine %s" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÒÅÄÓÔÁ×ÌÅÎÎÕÀ ÍÁÛÉÎÕ %s" +msgstr "Невозможно использовать представленную машину %s" -#: objdump.c:1916 +#: objdump.c:1959 #, c-format msgid "Can't disassemble for architecture %s\n" -msgstr "äÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÅ ÎÅ×ÏÚÍÏÖÎÏ ÄÌÑ ÁÒÈÉÔÅËÔÕÒÙ %s\n" +msgstr "Дизассемблирование невозможно для архитектуры %s\n" -#: objdump.c:2006 +#: objdump.c:2064 #, c-format msgid "" "\n" "Can't get contents for section '%s'.\n" msgstr "" "\n" -"îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÓÏÄÅÒÖÉÍÏÅ ÒÁÚÄÅÌÁ '%s'.\n" +"Невозможно получить содержимое раздела '%s'.\n" -#: objdump.c:2143 +#: objdump.c:2201 #, c-format msgid "" "No %s section present\n" "\n" msgstr "" -"òÁÚÄÅÌ %s ÏÔÓÕÔÓÔ×ÕÅÔ\n" +"Раздел %s отсутствует\n" "\n" -#: objdump.c:2152 +#: objdump.c:2210 #, c-format msgid "Reading %s section of %s failed: %s" -msgstr "þÔÅÎÉÅ %s ÒÁÚÄÅÌÁ %s ÚÁ×ÅÒÛÉÌÏÓØ ÎÅÕÄÁÞÅÊ: %s" +msgstr "Чтение %s раздела %s завершилось неудачей: %s" -#: objdump.c:2196 +#: objdump.c:2254 #, c-format msgid "" "Contents of %s section:\n" "\n" msgstr "" -"óÏÄÅÒÖÉÍÏÅ ÒÁÚÄÅÌÁ %s:\n" +"Содержимое раздела %s:\n" "\n" -#: objdump.c:2323 +#: objdump.c:2381 #, c-format msgid "architecture: %s, " -msgstr "ÁÒÈÉÔÅËÔÕÒÁ: %s, " +msgstr "архитектура: %s, " -#: objdump.c:2326 +#: objdump.c:2384 #, c-format msgid "flags 0x%08x:\n" -msgstr "ÆÌÁÇÉ 0x%08x:\n" +msgstr "флаги 0x%08x:\n" -#: objdump.c:2340 +#: objdump.c:2398 #, c-format msgid "" "\n" "start address 0x" msgstr "" "\n" -"ÎÁÞÁÌØÎÙÊ ÁÄÒÅÓ 0x" +"начальный адрес 0x" -#: objdump.c:2380 +#: objdump.c:2438 #, c-format msgid "Contents of section %s:\n" -msgstr "óÏÄÅÒÖÉÍÏÅ ÒÁÚÄÅÌÁ %s:\n" +msgstr "Содержимое раздела %s:\n" -#: objdump.c:2505 +#: objdump.c:2563 #, c-format msgid "no symbols\n" -msgstr "ÎÅÔ ÓÉÍ×ÏÌÏ×\n" +msgstr "нет символов\n" -#: objdump.c:2512 +#: objdump.c:2570 #, c-format msgid "no information for symbol number %ld\n" -msgstr "ÎÅÔ ÉÎÆÏÒÍÁÃÉÉ Ï ÓÉÍ×ÏÌÅ ÎÏÍÅÒ %ld\n" +msgstr "нет информации о символе номер %ld\n" -#: objdump.c:2515 +#: objdump.c:2573 #, c-format msgid "could not determine the type of symbol number %ld\n" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÔÉÐ ÓÉÍ×ÏÌÁ ÎÏÍÅÒ %ld\n" +msgstr "невозможно определить тип символа номер %ld\n" -#: objdump.c:2788 +#: objdump.c:2850 #, c-format msgid "" "\n" "%s: file format %s\n" msgstr "" "\n" -"%s: ÆÏÒÍÁÔ ÆÁÊÌÁ %s\n" +"%s: формат файла %s\n" -#: objdump.c:2845 +#: objdump.c:2908 #, c-format msgid "%s: printing debugging information failed" -msgstr "%s: ×Ù×ÏÄ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÄÁÞÅÊ" +msgstr "%s: вывод отладочной информации завершился неудачей" -#: objdump.c:2936 +#: objdump.c:3002 #, c-format msgid "In archive %s:\n" -msgstr "÷ ÁÒÈÉ×Å %s:\n" +msgstr "В архиве %s:\n" -#: objdump.c:3058 +#: objdump.c:3124 msgid "unrecognized -E option" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ÏÐÃÉÑ -E" +msgstr "нераспознанная опция -E" -#: objdump.c:3069 +#: objdump.c:3135 #, c-format msgid "unrecognized --endian type `%s'" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ --endian ÔÉÐ `%s'" +msgstr "нераспознанный --endian тип `%s'" + +#: rclex.c:196 +msgid "invalid value specified for pragma code_page.\n" +msgstr "для директивы code_page указано недопустимое значение.\n" -#: rdcoff.c:196 +#: rdcoff.c:198 #, c-format msgid "parse_coff_type: Bad type code 0x%x" -msgstr "parse_coff_type: ðÌÏÈÏÊ ËÏÄ ÔÉÐÁ 0x%x" +msgstr "parse_coff_type: Плохой код типа 0x%x" -#: 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 "bfd_coff_get_syment ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÄÁÞÅÊ: %s" +msgstr "bfd_coff_get_syment завершился неудачей: %s" -#: rdcoff.c:420 rdcoff.c:717 +#: rdcoff.c:422 rdcoff.c:719 #, c-format msgid "bfd_coff_get_auxent failed: %s" -msgstr "bfd_coff_get_auxent ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÄÁÞÅÊ: %s" +msgstr "bfd_coff_get_auxent завершился неудачей: %s" -#: rdcoff.c:784 +#: rdcoff.c:786 #, c-format msgid "%ld: .bf without preceding function" -msgstr "%ld: .bf ÂÅÚ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÊ ÆÕÎËÃÉÉ" +msgstr "%ld: .bf без предшествующей функции" -#: rdcoff.c:834 +#: rdcoff.c:836 #, c-format msgid "%ld: unexpected .ef\n" -msgstr "%ld: ÎÅÏÖÉÄÁÎÎÙÊ .ef\n" +msgstr "%ld: неожиданный .ef\n" -#: rddbg.c:85 +#: rddbg.c:86 #, c-format msgid "%s: no recognized debugging information" -msgstr "%s: ÎÅÔ ÒÁÓÐÏÚÎÁÎÎÏÊ ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÉ" +msgstr "%s: нет распознанной отладочной информации" -#: rddbg.c:394 +#: rddbg.c:400 #, c-format msgid "Last stabs entries before error:\n" -msgstr "ðÏÓÌÅÄÎÉÅ ÐÕÎËÔÙ stabs ÐÅÒÅÄ ÏÛÉÂËÏÊ:\n" +msgstr "Последние пункты stabs перед ошибкой:\n" -#: readelf.c:264 +#: readelf.c:319 #, c-format msgid "Unable to seek to 0x%lx for %s\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ 0x%lx ÄÌÑ %s\n" +msgstr "Невозможно найти 0x%lx для %s\n" -#: readelf.c:279 +#: readelf.c:334 #, c-format msgid "Out of memory allocating 0x%lx bytes for %s\n" -msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ ÐÒÉ ÒÁÓÐÒÅÄÅÌÅÎÉÉ 0x%lx ÂÁÊÔ ÄÌÑ %s\n" +msgstr "Нехватка памяти при распределении 0x%lx байт для %s\n" -#: readelf.c:289 +#: readelf.c:344 #, c-format msgid "Unable to read in 0x%lx bytes of %s\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ 0x%lx ÂÁÊÔ ÉÚ %s\n" +msgstr "Невозможно прочитать 0x%lx байт из %s\n" -#: readelf.c:623 +#: readelf.c:683 msgid "Don't know about relocations on this machine architecture\n" -msgstr "îÅÉÚ×ÅÓÔÎÏ Ï ÐÅÒÅÍÅÝÅÎÉÑÈ ÄÌÑ ÜÔÏÊ ÁÒÈÉÔÅËÔÕÒÙ ÍÁÛÉÎÙ\n" +msgstr "Неизвестно о перемещениях для этой архитектуры машины\n" -#: 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 "ÐÅÒÅÍÅÝÅÎÉÑ" +msgstr "перемещения" -#: readelf.c:654 readelf.c:682 readelf.c:726 readelf.c:754 -msgid "out of memory parsing relocs" -msgstr "ÎÅÈ×ÁÔËÁ ÐÁÍÑÔÉ ÐÒÉ ÒÁÚÂÏÒÅ ÐÅÒÅÍÅÝÅÎÉÊ" +# +#: readelf.c:714 readelf.c:742 readelf.c:786 readelf.c:814 +msgid "out of memory parsing relocs\n" +msgstr "нехватка памяти при анализе перемещений\n" -#: readelf.c:808 +#: readelf.c:868 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞ.ÓÉÍ×. éÍÑ ÓÉÍ×ÏÌÁ + Addend\n" +msgstr " Смещение Инфо Тип Знач.симв. Имя символа + Addend\n" -#: readelf.c:810 +#: readelf.c:870 #, c-format msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞ.ÓÉÍ× éÍÑ ÓÉÍ×. + Addend\n" +msgstr " Смещение Инфо Тип Знач.симв Имя симв. + Addend\n" -#: readelf.c:815 +#: readelf.c:875 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞ.ÓÉÍ× éÍÑ ÓÉÍ×ÏÌÁ\n" +msgstr " Смещение Инфо Тип Знач.симв Имя символа\n" -#: readelf.c:817 +#: readelf.c:877 #, c-format msgid " Offset Info Type Sym.Value Sym. Name\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞ.ÓÉÍ× éÍÑ ÓÉÍ×.\n" +msgstr " Смещение Инфо Тип Знач.симв Имя симв.\n" -#: readelf.c:825 +#: readelf.c:885 #, c-format msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞÅÎÉÅ ÓÉÍ×. éÍÑ ÓÉÍ×ÏÌÁ + Addend\n" +msgstr " Смещение Инфо Тип Значение симв. Имя символа + Addend\n" -#: readelf.c:827 +#: readelf.c:887 #, c-format msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞ.ÓÉÍ×. éÍÑ ÓÉÍ×. + Addend\n" +msgstr " Смещение Инфо Тип Знач.симв. Имя симв. + Addend\n" -#: readelf.c:832 +#: readelf.c:892 #, c-format msgid " Offset Info Type Symbol's Value Symbol's Name\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞÅÎÉÅ ÓÉÍ×. éÍÑ ÓÉÍ×ÏÌÁ\n" +msgstr " Смещение Инфо Тип Значение симв. Имя символа\n" -#: readelf.c:834 +#: readelf.c:894 #, c-format msgid " Offset Info Type Sym. Value Sym. Name\n" -msgstr " óÍÅÝÅÎÉÅ éÎÆÏ ôÉÐ úÎÁÞ.ÓÉÍ×. éÍÑ ÓÉÍ×.\n" +msgstr " Смещение Инфо Тип Знач.симв. Имя симв.\n" -#: 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 "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ: %-7lx" +msgstr "нераспознанный: %-7lx" -#: readelf.c:1154 +#: readelf.c:1226 #, c-format msgid "" -msgstr "<ÎÅÉÚ×ÅÓÔÎÙÊ addend: %lx>" +msgstr "<неизвестный addend: %lx>" -#: readelf.c:1210 +#: readelf.c:1288 #, c-format msgid "" -msgstr "<ÉÎÄÅËÓ ÔÁÂÌÉÃÙ ÓÔÒÏË: %3ld>" +msgstr "<индекс таблицы строк: %3ld>" -#: readelf.c:1212 +#: readelf.c:1290 #, c-format msgid "" -msgstr "<ÐÏ×ÒÅÖÄÅÎ ÉÎÄÅËÓ ÔÁÂÌÉÃÙ ÓÔÒÏË: %3ld>" +msgstr "<поврежден индекс таблицы строк: %3ld>" -#: readelf.c:1522 +#: readelf.c:1625 #, c-format msgid "Processor Specific: %lx" -msgstr "óÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ÐÒÏÃÅÓÓÏÒÁ: %lx" +msgstr "Специфичный для процессора: %lx" -#: readelf.c:1543 +#: readelf.c:1646 #, c-format msgid "Operating System specific: %lx" -msgstr "óÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ÏÐÅÒÁÃÉÏÎÎÏÊ ÓÉÓÔÅÍÙ: %lx" +msgstr "Специфичный для операционной системы: %lx" -#: readelf.c:1547 readelf.c:2349 +#: readelf.c:1650 readelf.c:2521 #, c-format msgid ": %lx" -msgstr "<ÎÅÉÚ×ÅÓÔÎÙÊ>: %lx" +msgstr "<неизвестный>: %lx" -#: readelf.c:1560 +#: readelf.c:1663 msgid "NONE (None)" -msgstr "îåô (îÅÔ)" +msgstr "НЕТ (Нет)" -#: readelf.c:1561 +#: readelf.c:1664 msgid "REL (Relocatable file)" -msgstr "REL (ðÅÒÅÍÅÝÁÅÍÙÊ ÆÁÊÌ)" +msgstr "REL (Перемещаемый файл)" -#: readelf.c:1562 +#: readelf.c:1665 msgid "EXEC (Executable file)" -msgstr "EXEC (éÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ)" +msgstr "EXEC (Исполняемый файл)" -#: readelf.c:1563 +#: readelf.c:1666 msgid "DYN (Shared object file)" -msgstr "DYN (óÏ×Í. ÉÓÐ. ÏÂßÅËÔÎÙÊ ÆÁÊÌ)" +msgstr "DYN (Совм. исп. объектный файл)" -#: readelf.c:1564 +#: readelf.c:1667 msgid "CORE (Core file)" -msgstr "CORE (ïÓÎÏ×ÎÏÊ ÆÁÊÌ)" +msgstr "CORE (Основной файл)" -#: readelf.c:1568 +#: readelf.c:1671 #, c-format msgid "Processor Specific: (%x)" -msgstr "óÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ÐÒÏÃÅÓÓÏÒÁ: (%x)" +msgstr "Специфичный для процессора: (%x)" -#: readelf.c:1570 +#: readelf.c:1673 #, c-format msgid "OS Specific: (%x)" -msgstr "óÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ïó: (%x)" +msgstr "Специфичный для ОС: (%x)" -#: readelf.c:1572 readelf.c:1681 readelf.c:2541 +#: readelf.c:1675 readelf.c:2714 #, c-format msgid ": %x" -msgstr "<ÎÅÉÚ×ÅÓÔÎÙÊ>: %x" +msgstr "<неизвестный>: %x" -#: readelf.c:1584 +#: readelf.c:1687 msgid "None" -msgstr "îÅÔ" +msgstr "Нет" + +#: readelf.c:1791 +#, c-format +msgid ": 0x%x" +msgstr "<неизвестный>: 0x%x" -#: readelf.c:2186 +# +#: readelf.c:2048 +msgid "unknown" +msgstr "неизвестный" + +# +#: readelf.c:2049 +msgid "unknown mac" +msgstr "неизвестная машина" + +#: readelf.c:2358 msgid "Standalone App" -msgstr "éÚÏÌÉÒÏ×ÁÎÎÏÅ ÐÒÉÌÏÖÅÎÉÅ" +msgstr "Изолированное приложение" -#: readelf.c:2189 readelf.c:2948 readelf.c:2964 +#: readelf.c:2361 readelf.c:3145 readelf.c:3161 #, c-format msgid "" -msgstr "<ÎÅÉÚ×ÅÓÔÎÙÊ: %x>" +msgstr "<неизвестный: %x>" -#: readelf.c:2586 +#: readelf.c:2759 #, c-format msgid "Usage: readelf elf-file(s)\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: readelf <ÏÐÃÉÉ> elf-ÆÁÊÌ(Ù)\n" +msgstr "Использование: readelf <опции> elf-файл(ы)\n" -#: readelf.c:2587 +#: readelf.c:2760 #, c-format msgid " Display information about the contents of ELF format files\n" -msgstr " ïÔÏÂÒÁÖÁÅÔ ÉÎÆÏÒÍÁÃÉÀ Ï ÓÏÄÅÒÖÉÍÏÍ ÆÁÊÌÏ× × ÆÏÒÍÁÔÅ ELF\n" +msgstr " Отображает информацию о содержимом файлов в формате ELF\n" -#: readelf.c:2588 +#: readelf.c:2761 #, c-format msgid "" " Options are:\n" @@ -3484,40 +3583,40 @@ msgid "" " --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" " Display the contents of DWARF2 debug sections\n" msgstr "" -" ïÐÃÉÉ:\n" -" -a --all üË×É×ÁÌÅÎÔÎÁ: -h -l -S -s -r -d -V -A -I\n" -" -h --file-header ÷Ù×ÏÄ ÚÁÇÏÌÏ×ËÁ ÆÁÊÌÁ ELF\n" -" -l --program-headers ÷Ù×ÏÄ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ\n" -" --segments áÌÉÁÓ ÄÌÑ --program-headers\n" -" -S --section-headers ÷Ù×ÏÄ ÚÁÇÏÌÏ×ËÁ ÒÁÚÄÅÌÏ×\n" -" --sections áÌÉÁÓ ÄÌÑ --section-headers\n" -" -g --section-groups ÷Ù×ÏÄ ÇÒÕÐÐ ÒÁÚÄÅÌÏ×\n" -" -t --section-details ÷Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ÒÁÚÄÅÌÅ\n" -" -e --headers üË×É×ÁÌÅÎÔÎÁ: -h -l -S\n" -" -s --syms ÷Ù×ÏÄ ÔÁÂÌÉÃÙ ÓÉÍ×ÏÌÏ×\n" -" --symbols áÌÉÁÓ ÄÌÑ --syms\n" -" -n --notes ÷Ù×ÏÄ ÏÓÎÏ×ÎÙÈ ÚÁÐÉÓÅÊ (ÅÓÌÉ ÉÍÅÀÔÓÑ)\n" -" -r --relocs ÷Ù×ÏÄ ÐÅÒÅÍÅÝÅÎÉÊ (ÅÓÌÉ ÉÍÅÀÔÓÑ)\n" -" -u --unwind ÷Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ÒÁÓÐÉÓÙ×ÁÎÉÉ (ÅÓÌÉ ÉÍÅÅÔÓÑ)\n" -" -d --dynamic ÷Ù×ÏÄ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÓÅÇÍÅÎÔÁ (ÅÓÌÉ ÉÍÅÅÔÓÑ)\n" -" -V --version-info ÷Ù×ÏÄ ÒÁÚÄÅÌÏ× Ó ×ÅÒÓÉÅÊ (ÅÓÌÉ ÉÍÅÀÔÓÑ)\n" -" -A --arch-specific ÷Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ, ÓÐÅÃÉÆÉÞÎÏÊ ÄÌÑ ÁÒÈÉÔÅËÔÕÒÙ (ÅÓÌÉ ÉÍÅÅÔÓÑ).\n" -" -D --use-dynamic éÓÐÏÌØÚÏ×ÁÎÉÅ ÄÉÎÁÍÉÞÅÓËÏÊ ÉÎÆÏÒÍÁÃÉÉ ÒÁÚÄÅÌÁ ÐÒÉ ×Ù×ÏÄÅ ÓÉÍ×ÏÌÏ×\n" -" -x --hex-dump=<ÎÏÍÅÒ> äÁÍÐ ÓÏÄÅÒÖÉÍÏÇÏ ÒÁÚÄÅÌÁ <ÎÏÍÅÒ>\n" -" -w[liaprmfFsoR] ÉÌÉ\n" +" Параметры:\n" +" -a --all эквивалент: -h -l -S -s -r -d -V -A -I\n" +" -h --file-header показать заголовок файла ELF\n" +" -l --program-headers показать заголовки программы\n" +" --segments алиас для --program-headers\n" +" -S --section-headers показать заголовки разделов\n" +" --sections алиас для --section-headers\n" +" -g --section-groups показать группы разделов\n" +" -t --section-details показать сведения о разделе\n" +" -e --headers эквивалент: -h -l -S\n" +" -s --syms показать таблицу символов\n" +" --symbols алиас для --syms\n" +" -n --notes показать основные записи (если имеются)\n" +" -r --relocs показать перемещения (если имеются)\n" +" -u --unwind показать развёрнутую информацию (если имеется)\n" +" -d --dynamic показать динамический сегмент (если имеется)\n" +" -V --version-info показать разделы с версиями (если имеются)\n" +" -A --arch-specific показать сведения, специфичные для архитектуры (если имеются).\n" +" -D --use-dynamic использовать динамическую информацию раздела при выводе символов\n" +" -x --hex-dump=<номер> дамп содержимого раздела <номер>\n" +" -w[liaprmfFsoR] или\n" " --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc,=Ranges]\n" -" ÷Ù×ÏÄ ÓÏÄÅÒÖÉÍÏÇÏ ÏÔÌÁÄÏÞÎÙÈ ÒÁÚÄÅÌÏ× DWARF2\n" +" показать содержимое отладочных разделов DWARF2\n" -#: readelf.c:2612 +#: readelf.c:2785 #, c-format msgid "" " -i --instruction-dump=\n" " Disassemble the contents of section \n" msgstr "" -" -i --instruction-dump=<ÎÏÍÅÒ>\n" -" äÉÚÁÓÓÅÍÂÌÉÒÏ×ÁÎÉÅ ÓÏÄÅÒÖÉÍÏÇÏ ÒÁÚÄÅÌÁ <ÎÏÍÅÒ>\n" +" -i --instruction-dump=<номер>\n" +" дизассемблировать содержимое раздела <номер>\n" -#: readelf.c:2616 +#: readelf.c:2789 #, c-format msgid "" " -I --histogram Display histogram of bucket list lengths\n" @@ -3526,403 +3625,418 @@ msgid "" " -H --help Display this information\n" " -v --version Display the version number of readelf\n" msgstr "" -" -I --histogram ÷Ù×ÏÄ ÇÉÓÔÏÇÒÁÍÍÙ ÄÌÉÎ ÓÐÉÓËÁ ÕÞÁÓÔËÁ ÐÁÍÑÔÉ\n" -" -W --wide òÁÚÒÅÛÅÎÉÅ ÛÉÒÉÎÙ ×Ù×ÏÄÁ ÂÏÌÅÅ 80 ÓÉÍ×ÏÌÏ×\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -H --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ÎÏÍÅÒÁ ×ÅÒÓÉÉ readelf\n" +" -I --histogram показать гистограммы длин списка участка памяти\n" +" -W --wide разрешить ширину вывода более 80 символов\n" +" @<файл> читать параметры из <файла>\n" +" -H --help показать эту информацию\n" +" -v --version показать номер версии readelf\n" -#: readelf.c:2642 readelf.c:9180 -msgid "Out of memory allocating dump request table." -msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ ÐÒÉ ÒÁÚÍÅÝÅÎÉÉ ÄÁÍÐÁ ÔÁÂÌÉÃÙ ÚÁÐÒÏÓÁ." +# +#: readelf.c:2817 readelf.c:2845 readelf.c:2849 readelf.c:9898 +msgid "Out of memory allocating dump request table.\n" +msgstr "Нехватка памяти при размещении дампа таблицы запроса.\n" -#: readelf.c:2816 readelf.c:2884 +#: readelf.c:3011 readelf.c:3079 #, c-format msgid "Unrecognized debug option '%s'\n" -msgstr "îÅÒÁÓÐÏÚÎÁÎÎÁÑ ÏÔÌÁÄÏÞÎÁÑ ÏÐÃÉÑ '%s'\n" +msgstr "Нераспознанная отладочная опция '%s'\n" -#: readelf.c:2918 +#: readelf.c:3115 #, c-format msgid "Invalid option '-%c'\n" -msgstr "îÅ×ÅÒÎÁÑ ÏÐÃÉÑ '-%c'\n" +msgstr "Неверная опция '-%c'\n" -#: readelf.c:2932 +#: readelf.c:3129 msgid "Nothing to do.\n" -msgstr "îÅÞÅÇÏ ×ÙÐÏÌÎÑÔØ.\n" +msgstr "Нечего выполнять.\n" -#: readelf.c:2944 readelf.c:2960 readelf.c:6169 +#: readelf.c:3141 readelf.c:3157 readelf.c:6399 msgid "none" -msgstr "ÎÅÔ" +msgstr "нет" -#: readelf.c:2961 +#: readelf.c:3158 msgid "2's complement, little endian" -msgstr "ÄÏÐÏÌÎÅÎÉÅ ÄÏ 2, little endian" +msgstr "дополнение до 2, little endian" -#: readelf.c:2962 +#: readelf.c:3159 msgid "2's complement, big endian" -msgstr "ÄÏÐÏÌÎÅÎÉÅ ÄÏ 2, big endian" +msgstr "дополнение до 2, big endian" -#: readelf.c:2980 +#: readelf.c:3177 msgid "Not an ELF file - it has the wrong magic bytes at the start\n" -msgstr "îÅ ELF-ÆÁÊÌ - ÏÎ ÓÏÄÅÒÖÉÔ ÎÅ×ÅÒÎÙÅ magic-ÂÁÊÔÙ × ÎÁÞÁÌÅ\n" +msgstr "Не ELF-файл - он содержит неверные magic-байты в начале\n" -#: readelf.c:2988 +#: readelf.c:3185 #, c-format msgid "ELF Header:\n" -msgstr "úÁÇÏÌÏ×ÏË ELF:\n" +msgstr "Заголовок ELF:\n" -#: readelf.c:2989 +#: readelf.c:3186 #, c-format msgid " Magic: " msgstr " Magic: " -#: readelf.c:2993 +#: readelf.c:3190 #, c-format msgid " Class: %s\n" -msgstr " ëÌÁÓÓ: %s\n" +msgstr " Класс: %s\n" -#: readelf.c:2995 +#: readelf.c:3192 #, c-format msgid " Data: %s\n" -msgstr " äÁÎÎÙÅ: %s\n" +msgstr " Данные: %s\n" -#: readelf.c:2997 +#: readelf.c:3194 #, c-format msgid " Version: %d %s\n" -msgstr " ÷ÅÒÓÉÑ: %d %s\n" +msgstr " Версия: %d %s\n" -#: readelf.c:3004 +#: readelf.c:3201 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: readelf.c:3006 +#: readelf.c:3203 #, c-format msgid " ABI Version: %d\n" -msgstr " ÷ÅÒÓÉÑ ABI: %d\n" +msgstr " Версия ABI: %d\n" -#: readelf.c:3008 +#: readelf.c:3205 #, c-format msgid " Type: %s\n" -msgstr " ôÉÐ: %s\n" +msgstr " Тип: %s\n" -#: readelf.c:3010 +#: readelf.c:3207 #, c-format msgid " Machine: %s\n" -msgstr " íÁÛÉÎÁ: %s\n" +msgstr " Машина: %s\n" -#: readelf.c:3012 +#: readelf.c:3209 #, c-format msgid " Version: 0x%lx\n" -msgstr " ÷ÅÒÓÉÑ: 0x%lx\n" +msgstr " Версия: 0x%lx\n" -#: readelf.c:3015 +#: readelf.c:3212 #, c-format msgid " Entry point address: " -msgstr " áÄÒÅÓ ÔÏÞËÉ ×ÈÏÄÁ: " +msgstr " Адрес точки входа: " -#: readelf.c:3017 +#: readelf.c:3214 #, c-format msgid "" "\n" " Start of program headers: " msgstr "" "\n" -" îÁÞÁÌÏ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ: " +" Начало заголовков программы: " -#: readelf.c:3019 +#: readelf.c:3216 #, c-format msgid "" " (bytes into file)\n" " Start of section headers: " msgstr "" -" (ÂÁÊÔ × ÆÁÊÌÅ)\n" -" îÁÞÁÌÏ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ: " +" (байт в файле)\n" +" Начало заголовков программы: " -#: readelf.c:3021 +#: readelf.c:3218 #, c-format msgid " (bytes into file)\n" -msgstr " (ÂÁÊÔ × ÆÁÊÌÅ)\n" +msgstr " (байт в файле)\n" -#: readelf.c:3023 +#: readelf.c:3220 #, c-format msgid " Flags: 0x%lx%s\n" -msgstr " æÌÁÇÉ: 0x%lx%s\n" +msgstr " Флаги: 0x%lx%s\n" -#: readelf.c:3026 +#: readelf.c:3223 #, c-format msgid " Size of this header: %ld (bytes)\n" -msgstr " òÁÚÍÅÒ ÜÔÏÇÏ ÚÁÇÏÌÏ×ËÁ: %ld (ÂÁÊÔ)\n" +msgstr " Размер этого заголовка: %ld (байт)\n" -#: readelf.c:3028 +#: readelf.c:3225 #, c-format msgid " Size of program headers: %ld (bytes)\n" -msgstr " òÁÚÍÅÒ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ: %ld (ÂÁÊÔ)\n" +msgstr " Размер заголовков программы: %ld (байт)\n" -#: readelf.c:3030 +#: readelf.c:3227 #, c-format msgid " Number of program headers: %ld\n" -msgstr " þÉÓÌÏ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ: %ld\n" +msgstr " Число заголовков программы: %ld\n" -#: readelf.c:3032 +#: readelf.c:3229 #, c-format msgid " Size of section headers: %ld (bytes)\n" -msgstr " òÁÚÍÅÒ ÚÁÇÏÌÏ×ËÏ× ÒÁÚÄÅÌÁ: %ld (ÂÁÊÔ)\n" +msgstr " Размер заголовков раздела: %ld (байт)\n" -#: readelf.c:3034 +#: readelf.c:3231 #, c-format msgid " Number of section headers: %ld" -msgstr " þÉÓÌÏ ÚÁÇÏÌÏ×ËÏ× ÒÁÚÄÅÌÁ: %ld" +msgstr " Число заголовков раздела: %ld" -#: readelf.c:3039 +#: readelf.c:3236 #, c-format msgid " Section header string table index: %ld" -msgstr " éÎÄÅËÓ ÔÁÂÌ. ÓÔÒÏË ÚÁÇÏÌ. ÒÁÚÄÅÌÁ: %ld" +msgstr " Индекс табл. строк загол. раздела: %ld" -#: readelf.c:3070 readelf.c:3103 +#: readelf.c:3277 readelf.c:3310 msgid "program headers" -msgstr "ÚÁÇÏÌÏ×ËÉ ÐÒÏÇÒÁÍÍÙ" +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 "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ\n" +msgstr "Нехватка памяти\n" -#: readelf.c:3168 +#: readelf.c:3375 #, c-format msgid "" "\n" "There are no program headers in this file.\n" msgstr "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ.\n" +"В этом файле нет заголовков программы.\n" -#: readelf.c:3174 +#: readelf.c:3381 #, c-format msgid "" "\n" "Elf file type is %s\n" msgstr "" "\n" -"ôÉÐ elf-ÆÁÊÌÁ - %s\n" +"Тип elf-файла - %s\n" -#: readelf.c:3175 +#: readelf.c:3382 #, c-format msgid "Entry point " -msgstr "ôÏÞËÁ ×ÈÏÄÁ " +msgstr "Точка входа " -#: readelf.c:3177 +#: readelf.c:3384 #, c-format msgid "" "\n" "There are %d program headers, starting at offset " msgstr "" "\n" -"éÍÅÅÔÓÑ %d ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ, ÎÁÞÉÎÁÑ ÓÏ ÓÍÅÝÅÎÉÑ " +"Имеется %d заголовков программы, начиная со смещения " -#: readelf.c:3189 readelf.c:3191 +#: readelf.c:3396 readelf.c:3398 #, c-format msgid "" "\n" "Program Headers:\n" msgstr "" "\n" -"úÁÇÏÌÏ×ËÉ ÐÒÏÇÒÁÍÍÙ:\n" +"Заголовки программы:\n" -#: readelf.c:3195 +#: readelf.c:3402 #, c-format msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " ôÉÐ óÍÅÝ. ÷ÉÒÔ.ÁÄÒ æÉÚ.ÁÄÒ òÚÍ.ÆÊÌ òÚÍ.ÐÍ æÌÇ ÷ÙÒÁ×Î\n" +msgstr " Тип Смещ. Вирт.адр Физ.адр Рзм.фйл Рзм.пм Флг Выравн\n" -#: readelf.c:3198 +#: readelf.c:3405 #, c-format msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " ôÉÐ óÍÅÝ. ÷ÉÒÔ.ÁÄÒ æÉÚ.ÁÄÒ òÚÍ.ÆÊÌ òÚÍ.ÐÍ æÌÇ ÷ÙÒÁ×Î\n" +msgstr " Тип Смещ. Вирт.адр Физ.адр Рзм.фйл Рзм.пм Флг Выравн\n" -#: readelf.c:3202 +#: readelf.c:3409 #, c-format msgid " Type Offset VirtAddr PhysAddr\n" -msgstr " ôÉÐ óÍÅÝ. ÷ÉÒÔ.ÁÄÒ æÉÚ.ÁÄÒ\n" +msgstr " Тип Смещ. Вирт.адр Физ.адр\n" -#: readelf.c:3204 +#: readelf.c:3411 #, c-format msgid " FileSiz MemSiz Flags Align\n" -msgstr " òÚÍ.ÆÊÌ òÚÍ.ÐÍ æÌÁÇÉ ÷ÙÒÁ×Î\n" +msgstr " Рзм.фйл Рзм.пм Флаги Выравн\n" -#: readelf.c:3297 +#: readelf.c:3504 msgid "more than one dynamic segment\n" -msgstr "ÂÏÌÅÅ ÏÄÎÏÇÏ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÓÅÇÍÅÎÔÁ\n" +msgstr "более одного динамического сегмента\n" -#: readelf.c:3308 -msgid "no .dynamic section in the dynamic segment" -msgstr "× ÄÉÎÁÍÉÞÅÓËÏÍ ÓÅÇÍÅÎÔÅ ÎÅÔ ÒÁÚÄÅÌÁ .dynamic" +# +#: readelf.c:3515 +msgid "no .dynamic section in the dynamic segment\n" +msgstr "в динамическом сегменте нет раздела .dynamic\n" -#: readelf.c:3317 -msgid "the .dynamic section is not contained within the dynamic segment" -msgstr "× ÄÉÎÁÍÉÞÅÓËÏÍ ÓÅÇÍÅÎÔÅ ÎÅ ÓÏÄÅÒÖÉÔÓÑ ÒÁÚÄÅÌ .dynamic" +# +#: readelf.c:3527 +msgid "the .dynamic section is not contained within the dynamic segment\n" +msgstr "в динамическом сегменте не содержится раздел .dynamic\n" -#: readelf.c:3319 -msgid "the .dynamic section is not the first section in the dynamic segment." -msgstr "ÒÁÚÄÅÌ .dynamic ÎÅ Ñ×ÌÑÅÔÓÑ ÐÅÒ×ÙÍ ÒÁÚÄÅÌÏÍ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÓÅÇÍÅÎÔÁ" +# +#: readelf.c:3529 +msgid "the .dynamic section is not the first section in the dynamic segment.\n" +msgstr "раздел .dynamic не является первым разделом динамического сегмента.\n" -#: readelf.c:3333 +#: readelf.c:3543 msgid "Unable to find program interpreter name\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÉÍÑ ÉÎÔÅÒÐÒÅÔÁÔÏÒÁ ÐÒÏÇÒÁÍÍÙ\n" +msgstr "Невозможно найти имя интерпретатора программы\n" + +#: readelf.c:3550 +msgid "Internal error: failed to create format string to display program interpreter\n" +msgstr "Внутренняя ошибка: не удалось создать строку формата для отображения интерпретатора программы\n" -#: readelf.c:3340 +# +#: readelf.c:3554 +msgid "Unable to read program interpreter name\n" +msgstr "Невозможно прочитать имя интерпретатора программы\n" + +#: readelf.c:3557 #, c-format msgid "" "\n" " [Requesting program interpreter: %s]" msgstr "" "\n" -" [úÁÐÒÁÛÉ×ÁÅÍÙÊ ÉÎÔÅÒÐÒÅÔÁÔÏÒ ÐÒÏÇÒÁÍÍÙ: %s]" +" [Запрашиваемый интерпретатор программы: %s]" -#: readelf.c:3352 +#: readelf.c:3569 #, c-format msgid "" "\n" " Section to Segment mapping:\n" msgstr "" "\n" -" óÏÏÔ×ÅÔÓÔ×ÉÅ ÒÁÚÄÅÌ-ÓÅÇÍÅÎÔ:\n" +" Соответствие раздел-сегмент:\n" -#: readelf.c:3353 +#: readelf.c:3570 #, c-format msgid " Segment Sections...\n" -msgstr " óÅÇÍÅÎÔ òÁÚÄÅÌÙ...\n" +msgstr " Сегмент Разделы...\n" -#: readelf.c:3402 +#: readelf.c:3605 msgid "Cannot interpret virtual addresses without program headers.\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÎÔÅÒÐÒÅÔÉÒÏ×ÁÔØ ×ÉÒÔÕÁÌØÎÙÅ ÁÄÒÅÓÁ ÂÅÚ ÚÁÇÏÌÏ×ËÏ× ÐÒÏÇÒÁÍÍÙ.\n" +msgstr "Невозможно интерпретировать виртуальные адреса без заголовков программы.\n" -#: readelf.c:3418 +#: readelf.c:3621 #, c-format msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" -msgstr "÷ÉÒÔÕÁÌØÎÙÊ ÁÄÒÅÓ 0x%lx ÎÅ ÒÁÚÍÅÝÅÎ × ËÁËÏÍ-ÌÉÂÏ ÓÅÇÍÅÎÔÅ PT_LOAD.\n" +msgstr "Виртуальный адрес 0x%lx не размещен в каком-либо сегменте PT_LOAD.\n" -#: readelf.c:3432 readelf.c:3473 +#: readelf.c:3635 readelf.c:3676 msgid "section headers" -msgstr "ÚÁÇÏÌÏ×ËÉ ÒÁÚÄÅÌÏ×" +msgstr "заголовки разделов" -#: readelf.c:3517 readelf.c:3580 +#: readelf.c:3720 readelf.c:3783 msgid "symbols" -msgstr "ÓÉÍ×ÏÌÙ" +msgstr "символы" -#: readelf.c:3527 readelf.c:3590 +#: readelf.c:3730 readelf.c:3793 msgid "symtab shndx" msgstr "symtab shndx" -#: 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 "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÒÁÚÄÅÌÏ×.\n" +"В этом файле нет разделов.\n" -#: readelf.c:3823 +#: readelf.c:4026 #, c-format msgid "There are %d section headers, starting at offset 0x%lx:\n" -msgstr "éÍÅÅÔÓÑ %d ÚÁÇÏÌÏ×ËÏ× ÒÁÚÄÅÌÁ, ÎÁÞÉÎÁÑ ÓÏ ÓÍÅÝÅÎÉÑ 0x%lx:\n" +msgstr "Имеется %d заголовков раздела, начиная со смещения 0x%lx:\n" -#: 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 "ÔÁÂÌÉÃÁ ÓÔÒÏË" +msgstr "таблица строк" -#: readelf.c:3881 +#: readelf.c:4102 #, c-format msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" -msgstr "òÁÚÄÅÌ %d ÓÏÄÅÒÖÉÔ ÎÅ×ÅÒÎÙÊ sh_entsize %lx (ÏÖÉÄÁÌÏÓØ %lx)\n" +msgstr "Раздел %d содержит неверный sh_entsize %lx (ожидалось %lx)\n" -#: readelf.c:3901 +#: readelf.c:4122 msgid "File contains multiple dynamic symbol tables\n" -msgstr "æÁÊÌ ÓÏÄÅÒÖÉÔ ÎÅÓËÏÌØËÏ ÔÁÂÌÉà ÄÉÎÁÍÉÞÅÓËÉÈ ÓÉÍ×ÏÌÏ×\n" +msgstr "Файл содержит несколько таблиц динамических символов\n" -#: readelf.c:3914 +#: readelf.c:4135 msgid "File contains multiple dynamic string tables\n" -msgstr "æÁÊÌ ÓÏÄÅÒÖÉÔ ÎÅÓËÏÌØËÏ ÔÁÂÌÉà ÄÉÎÁÍÉÞÅÓËÉÈ ÓÔÒÏË\n" +msgstr "Файл содержит несколько таблиц динамических строк\n" -#: readelf.c:3919 +#: readelf.c:4140 msgid "dynamic strings" -msgstr "ÄÉÎÁÍÉÞÅÓËÉÅ ÓÔÒÏËÉ" +msgstr "динамические строки" -#: readelf.c:3926 +#: readelf.c:4147 msgid "File contains multiple symtab shndx tables\n" -msgstr "æÁÊÌ ÓÏÄÅÒÖÉÔ ÎÅÓËÏÌØËÏ ÔÁÂÌÉà symtab shndx\n" +msgstr "Файл содержит несколько таблиц symtab shndx\n" -#: readelf.c:3973 +#: readelf.c:4194 #, c-format msgid "" "\n" "Section Headers:\n" msgstr "" "\n" -"úÁÇÏÌÏ×ËÉ ÒÁÚÄÅÌÏ×:\n" +"Заголовки разделов:\n" -#: readelf.c:3975 +#: readelf.c:4196 #, c-format msgid "" "\n" "Section Header:\n" msgstr "" "\n" -"úÁÇÏÌÏ×ÏË ÒÁÚÄÅÌÁ:\n" +"Заголовок раздела:\n" -#: 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 " [Nr] éÍÑ\n" +msgstr " [Nr] Имя\n" -#: readelf.c:3982 +#: readelf.c:4203 #, c-format msgid " Type Addr Off Size ES Lk Inf Al\n" -msgstr " ôÉÐ áÄÒÅÓ óÍÅÝ òÁÚÍ ES óÓ éÎÆ Al\n" +msgstr " Тип Адрес Смещ Разм ES Сс Инф Al\n" -#: readelf.c:3986 +#: readelf.c:4207 #, c-format msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" -msgstr " [îÍ] éÍÑ ôÉÐ áÄÒÅÓ óÍÅÝ òÁÚÍ ES æÌÇ óÓ éÎÆ Al\n" +msgstr " [Нм] Имя Тип Адрес Смещ Разм ES Флг Сс Инф Al\n" -#: readelf.c:3993 +#: readelf.c:4214 #, c-format msgid " Type Address Off Size ES Lk Inf Al\n" -msgstr " ôÉÐ áÄÒÅÓ óÍÅÝ òÁÚÍ ES óÓ éÎÆ Al\n" +msgstr " Тип Адрес Смещ Разм ES Сс Инф Al\n" -#: readelf.c:3997 +#: readelf.c:4218 #, c-format msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" -msgstr " [îÍ] éÍÑ ôÉÐ áÄÒÅÓ óÍÅÝ òÁÚÍ ES æÌÇ ìË éÎÆ Al\n" +msgstr " [Нм] Имя Тип Адрес Смещ Разм ES Флг Лк Инф Al\n" -#: readelf.c:4004 +#: readelf.c:4225 #, c-format msgid " Type Address Offset Link\n" -msgstr " ôÉÐ áÄÒÅÓ óÍÅÝÅÎÉÅ óÓÙÌËÁ\n" +msgstr " Тип Адрес Смещение Ссылка\n" -#: readelf.c:4005 +#: readelf.c:4226 #, c-format msgid " Size EntSize Info Align\n" -msgstr " òÁÚÍÅÒ òÁÚÍ.Ent éÎÆÏ ÷ÙÒÁ×Î\n" +msgstr " Размер Разм.Ent Инфо Выравн\n" -#: readelf.c:4009 +#: readelf.c:4230 #, c-format msgid " [Nr] Name Type Address Offset\n" -msgstr " [îÍ] éÍÑ ôÉÐ áÄÒÅÓ óÍÅÝÅÎÉÅ\n" +msgstr " [Нм] Имя Тип Адрес Смещение\n" -#: readelf.c:4010 +#: readelf.c:4231 #, c-format msgid " Size EntSize Flags Link Info Align\n" -msgstr " òÁÚÍÅÒ òÁÚÍ.Ent æÌÁÇÉ óÓÙÌË éÎÆÏ ÷ÙÒÁ×Î\n" +msgstr " Размер Разм.Ent Флаги Ссылк Инфо Выравн\n" -#: readelf.c:4015 +#: readelf.c:4236 #, c-format msgid " Flags\n" -msgstr " æÌÁÇÉ\n" +msgstr " Флаги\n" -#: readelf.c:4150 +#: readelf.c:4371 #, c-format msgid "" "Key to Flags:\n" @@ -3930,1267 +4044,1297 @@ msgid "" " I (info), L (link order), G (group), x (unknown)\n" " O (extra OS processing required) o (OS specific), p (processor specific)\n" msgstr "" -"ïÂÏÚÎÁÞÅÎÉÑ ÆÌÁÇÏ×:\n" -" W (ÚÁÐÉÓØ), A (ÎÁÚÎÁÞ), X (ÉÓÐÏÌÎÑÅÍÙÊ), M (ÓÌÉÑÎÉÅ), S (ÓÔÒÏËÉ)\n" -" I (ÉÎÆÏ), L (ÐÏÒÑÄÏË ÓÓÙÌÏË), G (ÇÒÕÐÐÁ), x (ÎÅÉÚ×.)\n" -" O (ÔÒÅÂ. ÄÏÐ. ÏÂÒÁÂÏÔËÁ ïó) o (ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ïó), p (ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ ÐÒÏÃÅÓÓÏÒÁ)\n" +"Обозначения флагов:\n" +" W (запись), A (назнач), X (исполняемый), M (слияние), S (строки)\n" +" I (инфо), L (порядок ссылок), G (группа), x (неизв.)\n" +" O (треб. доп. обработка ОС) o (специфичный для ОС), p (специфичный для процессора)\n" -#: readelf.c:4168 +#: readelf.c:4389 #, c-format msgid "[: 0x%x]" -msgstr "[<ÎÅÉÚ×ÅÓÔÎÙÊ>: 0x%x]" +msgstr "[<неизвестный>: 0x%x]" -#: readelf.c:4199 +#: readelf.c:4420 msgid "Section headers are not available!\n" -msgstr "îÅÄÏÓÔÕÐÎÙ ÚÁÇÏÌÏ×ËÉ ÒÁÚÄÅÌÁ!\n" +msgstr "Недоступны заголовки раздела!\n" -#: readelf.c:4223 +#: readelf.c:4444 #, c-format msgid "" "\n" "There are no section groups in this file.\n" msgstr "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÇÒÕÐÐ ÒÁÚÄÅÌÏ×.\n" +"В этом файле нет групп разделов.\n" -#: readelf.c:4259 +#: readelf.c:4480 #, c-format msgid "Bad sh_link in group section `%s'\n" -msgstr "îÅ×ÅÒÎÙÊ sh_link × ÒÁÚÄÅÌÅ ÇÒÕÐÐ `%s'\n" +msgstr "Неверный sh_link в разделе групп `%s'\n" -#: readelf.c:4278 +#: readelf.c:4499 #, c-format msgid "Bad sh_info in group section `%s'\n" -msgstr "îÅ×ÅÒÎÙÊ sh_info × ÒÁÚÄÅÌÅ ÇÒÕÐÐ `%s'\n" +msgstr "Неверный sh_info в разделе групп `%s'\n" -#: readelf.c:4317 readelf.c:7243 +#: readelf.c:4538 readelf.c:7690 msgid "section data" -msgstr "ÄÁÎÎÙÅ ÒÁÚÄÅÌÁ" +msgstr "данные раздела" -#: readelf.c:4329 +#: readelf.c:4550 #, c-format msgid " [Index] Name\n" -msgstr " [éÎÄÅËÓ] éÍÑ\n" +msgstr " [Индекс] Имя\n" -#: readelf.c:4343 +#: readelf.c:4564 #, c-format msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" -msgstr "ÒÁÚÄÅÌ [%5u] ÕÖÅ ÎÁÈÏÄÉÔÓÑ × ÒÁÚÄÅÌÅ ÇÒÕÐÐ [%5u] > ÍÁËÓÉÍÁÌØÎÙÊ ÒÁÚÄÅÌ [%5u]\n" +msgstr "раздел [%5u] уже находится в разделе групп [%5u] > максимальный раздел [%5u]\n" -#: readelf.c:4349 +#: readelf.c:4570 #, c-format msgid "invalid section [%5u] in group section [%5u]\n" -msgstr "ÎÅ×ÅÒÎÙÊ ÒÁÚÄÅÌ [%5u] × ÒÁÚÄÅÌÅ ÇÒÕÐÐ [%5u]\n" +msgstr "неверный раздел [%5u] в разделе групп [%5u]\n" -#: readelf.c:4359 +#: readelf.c:4580 #, c-format msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" -msgstr "ÒÁÚÄÅÌ [%5u] ÉÚ ÒÁÚÄÅÌÁ ÇÒÕÐÐ [%5u] ÕÖÅ ÎÁÈÏÄÉÔÓÑ × ÒÁÚÄÅÌÅ ÇÒÕÐÐ [%5u]\n" +msgstr "раздел [%5u] из раздела групп [%5u] уже находится в разделе групп [%5u]\n" -#: readelf.c:4372 +#: readelf.c:4593 #, c-format msgid "section 0 in group section [%5u]\n" -msgstr "ÒÁÚÄÅÌ 0 × ÒÁÚÄÅÌÅ ÇÒÕÐÐ [%5u]\n" +msgstr "раздел 0 в разделе групп [%5u]\n" -#: readelf.c:4468 +#: readelf.c:4689 #, c-format msgid "" "\n" "'%s' relocation section at offset 0x%lx contains %ld bytes:\n" msgstr "" "\n" -"'%s' ÒÁÚÄÅÌ ÐÅÒÅÍÅÝÅÎÉÑ ÓÏ ÓÍÅÝÅÎÉÅÍ 0x%lx ÓÏÄÅÒÖÉÔ %ld ÂÁÊÔ:\n" +"'%s' раздел перемещения со смещением 0x%lx содержит %ld байт:\n" -#: readelf.c:4480 +#: readelf.c:4701 #, c-format msgid "" "\n" "There are no dynamic relocations in this file.\n" msgstr "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÄÉÎÁÍÉÞÅÓËÉÈ ÐÅÒÅÍÅÝÅÎÉÊ .\n" +"В этом файле нет динамических перемещений .\n" -#: readelf.c:4504 +#: readelf.c:4725 #, c-format msgid "" "\n" "Relocation section " msgstr "" "\n" -"òÁÚÄÅÌ ÐÅÒÅÍÅÝÅÎÉÑ " +"Раздел перемещения " -#: 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 "'%s'" -#: 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 " ÓÏ ÓÍÅÝÅÎÉÅÍ 0x%lx ÓÏÄÅÒÖÉÔ %lu ÐÕÎËÔÏ×:\n" +msgstr " со смещением 0x%lx содержит %lu пунктов:\n" -#: readelf.c:4563 +#: readelf.c:4784 #, c-format msgid "" "\n" "There are no relocations in this file.\n" msgstr "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÐÅÒÅÍÅÝÅÎÉÊ.\n" +"В этом файле нет перемещений.\n" -#: readelf.c:4742 readelf.c:5124 +#: readelf.c:4963 readelf.c:5345 msgid "unwind table" -msgstr "ÒÁÚ×ÅÒÎÕÔÁÑ ÔÁÂÌÉÃÁ" +msgstr "развернутая таблица" -#: readelf.c:4801 readelf.c:5214 +#: readelf.c:5022 readelf.c:5435 #, c-format msgid "Skipping unexpected relocation type %s\n" -msgstr "ðÒÏÐÕÓËÁÅÔÓÑ ÎÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ÐÅÒÅÍÅÝÅÎÉÑ %s\n" +msgstr "Пропускается неожиданный тип перемещения %s\n" -#: 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 "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÒÁÚ×ÅÒÎÕÔÙÈ ÒÁÚÄÅÌÏ×.\n" +"В этом файле нет развернутых разделов.\n" -#: readelf.c:4923 +#: readelf.c:5144 #, c-format msgid "" "\n" "Could not find unwind info section for " msgstr "" "\n" -"îÅ×ÏÚÍÏÖÎÏ ÂÙÌÏ ÎÁÊÔÉ ÒÁÚÄÅÌ Ó ÒÁÚ×ÅÒÎÕÔÏÊ ÉÎÆÏÒÍÁÃÉÅÊ ÄÌÑ" +"Невозможно было найти раздел с развернутой информацией для " -#: readelf.c:4935 +#: readelf.c:5156 msgid "unwind info" -msgstr "ÒÁÚ×ÅÒÎÕÔÁÑ ÉÎÆÏÒÍÁÃÉÑ" +msgstr "развернутая информация" -#: readelf.c:4937 readelf.c:5281 +#: readelf.c:5158 readelf.c:5502 #, c-format msgid "" "\n" "Unwind section " msgstr "" "\n" -"òÁÚ×ÅÒÎÕÔÙÊ ÒÁÚÄÅÌ " +"Развернутый раздел " -#: readelf.c:5491 readelf.c:5535 +#: readelf.c:5712 readelf.c:5756 msgid "dynamic section" -msgstr "ÄÉÎÁÍÉÞÅÓËÉÊ ÒÁÚÄÅÌ" +msgstr "динамический раздел" -#: readelf.c:5612 +#: readelf.c:5833 #, c-format msgid "" "\n" "There is no dynamic section in this file.\n" msgstr "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅÔ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÒÁÚÄÅÌÁ.\n" +"В этом файле нет динамического раздела.\n" -#: readelf.c:5650 -msgid "Unable to seek to end of file!" -msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÐÏÉÓË ÄÏ ËÏÎÃÁ ÆÁÊÌÁ!" +# +#: readelf.c:5871 +msgid "Unable to seek to end of file!\n" +msgstr "Невозможно выполнить поиск до конца файла!\n" -#: readelf.c:5663 +#: readelf.c:5884 msgid "Unable to determine the number of symbols to load\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÞÉÓÌÏ ÚÁÇÒÕÖÁÅÍÙÈ ÓÉÍ×ÏÌÏ×\n" +msgstr "Невозможно определить число загружаемых символов\n" -#: readelf.c:5698 +#: readelf.c:5919 msgid "Unable to seek to end of file\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÐÏÉÓË ÄÏ ËÏÎÃÁ ÆÁÊÌÁ\n" +msgstr "Невозможно выполнить поиск до конца файла\n" -#: readelf.c:5705 +#: readelf.c:5926 msgid "Unable to determine the length of the dynamic string table\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÄÌÉÎÕ ÔÁÂÌÉÃÙ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÔÒÏË\n" +msgstr "Невозможно определить длину таблицы динамических строк\n" -#: readelf.c:5710 +#: readelf.c:5931 msgid "dynamic string table" -msgstr "ÔÁÂÌÉÃÁ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÔÒÏË" +msgstr "таблица динамических строк" -#: readelf.c:5745 +#: readelf.c:5966 msgid "symbol information" -msgstr "ÉÎÆÏÒÍÁÃÉÑ Ï ÓÉÍ×ÏÌÅ" +msgstr "информация о символе" -#: readelf.c:5770 +#: readelf.c:5991 #, c-format msgid "" "\n" "Dynamic section at offset 0x%lx contains %u entries:\n" msgstr "" "\n" -"äÉÎÁÍÉÞÅÓËÉÊ ÒÁÚÄÅÌ ÓÏ ÓÍÅÝÅÎÉÅÍ 0x%lx ÓÏÄÅÒÖÉÔ %u ÐÕÎËÔÏ×:\n" +"Динамический раздел со смещением 0x%lx содержит %u элементов:\n" -#: readelf.c:5773 +#: readelf.c:5994 #, c-format msgid " Tag Type Name/Value\n" -msgstr " ôÅÇ ôÉÐ éÍÑ/úÎÁÞ\n" +msgstr " Тег Тип Имя/Знач\n" -#: readelf.c:5809 +#: readelf.c:6030 #, c-format msgid "Auxiliary library" -msgstr "÷ÓÐÏÍÏÇÁÔÅÌØÎÁÑ ÂÉÂÌÉÏÔÅËÁ" +msgstr "Вспомогательная библиотека" -#: readelf.c:5813 +#: readelf.c:6034 #, c-format msgid "Filter library" -msgstr "âÉÂÌÉÏÔÅËÁ ÆÉÌØÔÒÏ×" +msgstr "Библиотека фильтров" -#: readelf.c:5817 +#: readelf.c:6038 #, c-format msgid "Configuration file" -msgstr "æÁÊÌ ÎÁÓÔÒÏÊËÉ" +msgstr "Файл настройки" -#: readelf.c:5821 +#: readelf.c:6042 #, c-format msgid "Dependency audit library" -msgstr "âÉÂÌÉÏÔÅËÁ ÁÕÄÉÔÁ ÚÁ×ÉÓÉÍÏÓÔÅÊ" +msgstr "Библиотека аудита зависимостей" -#: readelf.c:5825 +#: readelf.c:6046 #, c-format msgid "Audit library" -msgstr "âÉÂÌÉÏÔÅËÁ ÁÕÄÉÔÁ" +msgstr "Библиотека аудита" -#: readelf.c:5843 readelf.c:5871 readelf.c:5899 +#: readelf.c:6064 readelf.c:6092 readelf.c:6120 #, c-format msgid "Flags:" -msgstr "æÌÁÇÉ:" +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 " îÅÔ\n" +msgstr " Нет\n" -#: readelf.c:6022 +#: readelf.c:6243 #, c-format msgid "Shared library: [%s]" -msgstr "óÏ×Í. ÉÓÐ. ÂÉÂÌÉÏÔÅËÁ: [%s]" +msgstr "Совм. исп. библиотека: [%s]" -#: readelf.c:6025 +#: readelf.c:6246 #, c-format msgid " program interpreter" -msgstr " ÉÎÔÅÒÐÒÅÔÁÔÏÒ ÐÒÏÇÒÁÍÍÙ" +msgstr " интерпретатор программы" -#: readelf.c:6029 +#: readelf.c:6250 #, c-format msgid "Library soname: [%s]" -msgstr "âÉÂÌÉÏÔÅËÁ soname: [%s]" +msgstr "Библиотека soname: [%s]" -#: readelf.c:6033 +#: readelf.c:6254 #, c-format msgid "Library rpath: [%s]" -msgstr "âÉÂÌÉÏÔÅËÁ rpath: [%s]" +msgstr "Библиотека rpath: [%s]" -#: readelf.c:6037 +#: readelf.c:6258 #, c-format msgid "Library runpath: [%s]" -msgstr "âÉÂÌÉÏÔÅËÁ runpath: [%s]" +msgstr "Библиотека runpath: [%s]" -#: readelf.c:6100 +#: readelf.c:6321 #, c-format msgid "Not needed object: [%s]\n" -msgstr "îÅÎÕÖÎÙÊ ÏÂßÅËÔ: [%s]\n" +msgstr "Ненужный объект: [%s]\n" -#: readelf.c:6214 +#: readelf.c:6444 #, c-format msgid "" "\n" "Version definition section '%s' contains %ld entries:\n" msgstr "" "\n" -"òÁÚÄÅÌ ÏÐÉÓÁÎÉÑ ×ÅÒÓÉÉ '%s' ÓÏÄÅÒÖÉÔ %ld ÐÕÎËÔÏ×:\n" +"Раздел описания версии '%s' содержит %ld элементов:\n" -#: readelf.c:6217 +#: readelf.c:6447 #, c-format msgid " Addr: 0x" -msgstr " áÄÒÅÓ: 0x" +msgstr " Адрес: 0x" -#: readelf.c:6219 readelf.c:6426 +#: readelf.c:6449 readelf.c:6656 #, c-format msgid " Offset: %#08lx Link: %lx (%s)\n" -msgstr " óÍÅÝÅÎÉÅ: %#08lx óÓÙÌËÁ: %lx (%s)\n" +msgstr " Смещение: %#08lx Ссылка: %lx (%s)\n" -#: readelf.c:6228 +#: readelf.c:6458 msgid "version definition section" -msgstr "ÒÁÚÄÅÌ ÏÐÉÓÁÎÉÑ ×ÅÒÓÉÉ" +msgstr "раздел описания версии" -#: readelf.c:6254 +#: readelf.c:6484 #, c-format msgid " %#06x: Rev: %d Flags: %s" -msgstr " %#06x: òÅ×ÉÚÉÑ: %d æÌÁÇÉ: %s" +msgstr " %#06x: Ревизия: %d Флаги: %s" -#: readelf.c:6257 +#: readelf.c:6487 #, c-format msgid " Index: %d Cnt: %d " -msgstr " éÎÄÅËÓ: %d óÞÅÔÞÉË: %d " +msgstr " Индекс: %d Счетчик: %d " -#: readelf.c:6268 +#: readelf.c:6498 #, c-format msgid "Name: %s\n" -msgstr "éÍÑ: %s\n" +msgstr "Имя: %s\n" -#: readelf.c:6270 +#: readelf.c:6500 #, c-format msgid "Name index: %ld\n" -msgstr "éÎÄÅËÓ ÉÍÅÎÉ: %ld\n" +msgstr "Индекс имени: %ld\n" -#: readelf.c:6285 +#: readelf.c:6515 #, c-format msgid " %#06x: Parent %d: %s\n" -msgstr " %#06x: òÏÄÉÔÅÌØ %d: %s\n" +msgstr " %#06x: Родитель %d: %s\n" -#: readelf.c:6288 +#: readelf.c:6518 #, c-format msgid " %#06x: Parent %d, name index: %ld\n" -msgstr " %#06x: òÏÄÉÔÅÌØ %d, ÉÎÄÅËÓ ÉÍÅÎÉ: %ld\n" +msgstr " %#06x: Родитель %d, индекс имени: %ld\n" -#: readelf.c:6307 +#: readelf.c:6537 #, c-format msgid "" "\n" "Version needs section '%s' contains %ld entries:\n" msgstr "" "\n" -"òÁÚÄÅÌ ÚÁ×ÉÓÉÍÏÓÔÅÊ ×ÅÒÓÉÉ '%s' ÓÏÄÅÒÖÉÔ %ld ÐÕÎËÔÏ×:\n" +"Раздел зависимостей версии '%s' содержит %ld элементов:\n" -#: readelf.c:6310 +#: readelf.c:6540 #, c-format msgid " Addr: 0x" -msgstr " áÄÒÅÓ: 0x" +msgstr " Адрес: 0x" -#: readelf.c:6312 +#: readelf.c:6542 #, c-format msgid " Offset: %#08lx Link to section: %ld (%s)\n" -msgstr " óÍÅÝÅÎÉÅ: %#08lx óÓÙÌËÁ ÎÁ ÒÁÚÄÅÌ: %ld (%s)\n" +msgstr " Смещение: %#08lx Ссылка на раздел: %ld (%s)\n" -#: readelf.c:6321 +#: readelf.c:6551 msgid "version need section" -msgstr "ÒÁÚÄÅÌ ÚÁ×ÉÓÉÍÏÓÔÅÊ ×ÅÒÓÉÉ" +msgstr "раздел зависимостей версии" -#: readelf.c:6343 +#: readelf.c:6573 #, c-format msgid " %#06x: Version: %d" -msgstr " %#06x: ÷ÅÒÓÉÑ: %d" +msgstr " %#06x: Версия: %d" -#: readelf.c:6346 +#: readelf.c:6576 #, c-format msgid " File: %s" -msgstr " æÁÊÌ: %s" +msgstr " Файл: %s" -#: readelf.c:6348 +#: readelf.c:6578 #, c-format msgid " File: %lx" -msgstr " æÁÊÌ: %lx" +msgstr " Файл: %lx" -#: readelf.c:6350 +#: readelf.c:6580 #, c-format msgid " Cnt: %d\n" -msgstr " óÞÅÔÞÉË: %d\n" +msgstr " Счетчик: %d\n" -#: readelf.c:6368 +#: readelf.c:6598 #, c-format msgid " %#06x: Name: %s" -msgstr " %#06x: éÍÑ: %s" +msgstr " %#06x: Имя: %s" -#: readelf.c:6371 +#: readelf.c:6601 #, c-format msgid " %#06x: Name index: %lx" -msgstr " %#06x: éÎÄÅËÓ ÉÍÅÎÉ: %lx" +msgstr " %#06x: Индекс имени: %lx" -#: readelf.c:6374 +#: readelf.c:6604 #, c-format msgid " Flags: %s Version: %d\n" -msgstr " æÌÁÇÉ: %s ÷ÅÒÓÉÑ: %d\n" +msgstr " Флаги: %s Версия: %d\n" -#: readelf.c:6417 +#: readelf.c:6647 msgid "version string table" -msgstr "ÔÁÂÌÉÃÁ ÓÔÒÏË ×ÅÒÓÉÉ" +msgstr "таблица строк версии" -#: readelf.c:6421 +#: readelf.c:6651 #, c-format msgid "" "\n" "Version symbols section '%s' contains %d entries:\n" msgstr "" "\n" -"òÁÚÄÅÌ ÓÉÍ×ÏÌÏ× ×ÅÒÓÉÉ '%s' ÓÏÄÅÒÖÉÔ %d ÐÕÎËÔÏ×:\n" +"Раздел символов версии '%s' содержит %d элементов:\n" -#: readelf.c:6424 +#: readelf.c:6654 #, c-format msgid " Addr: " -msgstr " áÄÒÅÓ: " +msgstr " Адрес: " -#: readelf.c:6434 +#: readelf.c:6664 msgid "version symbol data" -msgstr "ÄÁÎÎÙÅ ÓÉÍ×ÏÌÁ ×ÅÒÓÉÉ" +msgstr "данные символа версии" -#: readelf.c:6461 +#: readelf.c:6691 msgid " 0 (*local*) " -msgstr " 0 (*ÌÏËÁÌØÎÙÊ*) " +msgstr " 0 (*локальный*) " -#: readelf.c:6465 +#: readelf.c:6695 msgid " 1 (*global*) " -msgstr " 1 (*ÇÌÏÂÁÌØÎÙÊ*) " +msgstr " 1 (*глобальный*) " -#: readelf.c:6503 readelf.c:6969 +#: readelf.c:6733 readelf.c:7255 msgid "version need" -msgstr "ÚÁ×ÉÓÉÍÏÓÔØ ×ÅÒÓÉÉ" +msgstr "зависимость версии" -#: readelf.c:6513 +#: readelf.c:6743 msgid "version need aux (2)" -msgstr "ÚÁ×ÉÓÉÍÏÓÔØ ×ÅÒÓÉÉ aux (2)" +msgstr "зависимость версии aux (2)" -#: readelf.c:6555 readelf.c:7034 +#: readelf.c:6785 readelf.c:7320 msgid "version def" -msgstr "ÏÐÉÓÁÎÉÅ ×ÅÒÓÉÉ" +msgstr "описание версии" -#: readelf.c:6575 readelf.c:7049 +#: readelf.c:6805 readelf.c:7335 msgid "version def aux" -msgstr "ÏÐÉÓÁÎÉÅ ×ÅÒÓÉÉ aux" +msgstr "описание версии aux" -#: readelf.c:6606 +#: readelf.c:6836 #, c-format msgid "" "\n" "No version information found in this file.\n" msgstr "" "\n" -"÷ ÜÔÏÍ ÆÁÊÌÅ ÎÅ ÎÁÊÄÅÎÁ ÉÎÆÏÒÍÁÃÉÑ Ï ×ÅÒÓÉÉ.\n" +"В этом файле не найдена информация о версии.\n" + +#: readelf.c:6955 +#, c-format +msgid ": %x" +msgstr "<другой>: %x" -#: readelf.c:6740 +#: readelf.c:7013 msgid "Unable to read in dynamic data\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÄÉÎÁÍÉÞÅÓËÉÅ ÄÁÎÎÙÅ\n" +msgstr "Невозможно считать динамические данные\n" -#: readelf.c:6793 -msgid "Unable to seek to start of dynamic information" -msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ ÐÏÉÓË ÏÔ ÎÁÞÁÌÁ ÄÉÎÁÍÉÞÅÓËÏÊ ÉÎÆÏÒÍÁÃÉÉ" +# +#: 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 "Невозможно выполнить поиск до начала динамических данных\n" -#: readelf.c:6799 +#: readelf.c:7075 readelf.c:7449 msgid "Failed to read in number of buckets\n" -msgstr "óÂÏÊ ÐÒÉ ÓÞÉÔÙ×ÁÎÉÉ ÞÉÓÌÁ ÏÂÌÁÓÔÅÊ ÐÁÍÑÔÉ\n" +msgstr "Сбой при считывании числа областей памяти\n" -#: readelf.c:6805 +#: readelf.c:7081 msgid "Failed to read in number of chains\n" -msgstr "óÂÏÊ ÐÒÉ ÓÞÉÔÙ×ÁÎÉÉ ÞÉÓÌÁ ÃÅÐÏÞÅË\n" +msgstr "Сбой при считывании числа цепочек\n" -#: readelf.c:6825 +#: readelf.c:7101 #, c-format msgid "" "\n" "Symbol table for image:\n" msgstr "" "\n" -"ôÁÂÌÉÃÁ ÓÉÍ×ÏÌÏ× ÄÌÑ ÉÚÏÂÒÁÖÅÎÉÑ:\n" +"Таблица символов для изображения:\n" -#: readelf.c:6827 +#: readelf.c:7103 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr " ïÂÌÁÓÔÉ: úÎÁÞ òÁÚÍÅÒ ôÉÐ ó×ÑÚ Vis éÎÄÅËÓ ÉÍÅÎÉ\n" +msgstr " Области: Знач Размер Тип Связ Vis Индекс имени\n" -#: readelf.c:6829 +#: readelf.c:7105 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr " ïÂÌÁÓÔÉ: úÎÁÞ òÁÚÍÅÒ ôÉÐ ó×ÑÚ Vis éÎÄÅËÓ ÉÍÅÎÉ\n" +msgstr " Области: Знач Размер Тип Связ Vis Индекс имени\n" -#: readelf.c:6882 +#: readelf.c:7163 #, c-format msgid "" "\n" "Symbol table '%s' contains %lu entries:\n" msgstr "" "\n" -"ôÁÂÌÉÃÁ ÓÉÍ×ÏÌÏ× '%s' ÓÏÄÅÒÖÉÔ %lu ÐÕÎËÔÏ×:\n" +"Таблица символов '%s' содержит %lu элементов:\n" -#: readelf.c:6886 +#: readelf.c:7167 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr " þÉÓ: úÎÁÞ òÁÚÍ ôÉÐ ó×ÑÚ Vis éÎÄÅËÓ ÉÍÅÎÉ\n" +msgstr " Чис: Знач Разм Тип Связ Vis Индекс имени\n" -#: readelf.c:6888 +#: readelf.c:7169 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr " þÉÓ: úÎÁÞ òÁÚÍ ôÉÐ ó×ÑÚ Vis éÎÄÅËÓ ÉÍÅÎÉ\n" +msgstr " Чис: Знач Разм Тип Связ Vis Индекс имени\n" -#: readelf.c:6939 +#: readelf.c:7225 msgid "version data" -msgstr "ÄÁÎÎÙÅ ×ÅÒÓÉÉ" +msgstr "данные версии" -#: readelf.c:6982 +#: readelf.c:7268 msgid "version need aux (3)" -msgstr "ÚÁ×ÉÓÉÍÏÓÔØ ×ÅÒÓÉÉ aux (3)" +msgstr "зависимость версии aux (3)" -#: readelf.c:7009 -msgid "bad dynamic symbol" -msgstr "ÎÅ×ÅÒÎÙÊ ÄÉÎÁÍÉÞÅÓËÉÊ ÓÉÍ×ÏÌ" +# +#: readelf.c:7295 +msgid "bad dynamic symbol\n" +msgstr "неверный динамический символ\n" -#: readelf.c:7073 +#: readelf.c:7359 #, c-format msgid "" "\n" "Dynamic symbol information is not available for displaying symbols.\n" msgstr "" "\n" -"éÎÆÏÒÍÁÃÉÑ ÄÉÎÁÍÉÞÅÓËÏÇÏ ÓÉÍ×ÏÌÁ ÎÅ ÄÏÓÔÕÐÎÁ ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÓÉÍ×ÏÌÏ×.\n" +"Информация динамического символа не доступна для отображения символов.\n" -#: readelf.c:7085 +#: readelf.c:7371 #, c-format msgid "" "\n" "Histogram for bucket list length (total of %lu buckets):\n" msgstr "" "\n" -"çÉÓÔÏÇÒÁÍÍÁ ÄÌÑ ÄÌÉÎÙ ÓÐÉÓËÁ ÏÂÌÁÓÔÅÊ ÐÁÍÑÔÉ (×ÓÅÇÏ %lu ÏÂÌÁÓÔÅÊ):\n" +"Гистограмма для длины списка областей памяти (всего %lu областей):\n" -#: readelf.c:7087 +#: readelf.c:7373 readelf.c:7539 #, c-format msgid " Length Number %% of total Coverage\n" -msgstr " äÌÉÎÁ þÉÓÌÏ %% ÏÔ ×ÓÅÇÏ ïÈ×ÁÔ\n" +msgstr " Длина Число %% от всего Охват\n" -#: readelf.c:7092 readelf.c:7108 readelf.c:8031 readelf.c:8223 -msgid "Out of memory" -msgstr "îÅÈ×ÁÔËÁ ÐÁÍÑÔÉ" +# +#: readelf.c:7505 +msgid "Failed to determine last chain length\n" +msgstr "Не удалось определить длину последней цепочки\n" -#: readelf.c:7157 +#: readelf.c:7537 +#, c-format +msgid "" +"\n" +"Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Гистограмма для длины списка областей памяти `.gnu.hash' (всего %lu областей):\n" + +#: readelf.c:7603 #, c-format msgid "" "\n" "Dynamic info segment at offset 0x%lx contains %d entries:\n" msgstr "" "\n" -"óÅÇÍÅÎÔ ÄÉÎÁÍÉÞÅÓËÏÊ ÉÎÆÏÒÍÁÃÉÉ ÓÏ ÓÍÅÝÅÎÉÅÍ 0x%lx ÓÏÄÅÒÖÉÔ %d ÐÕÎËÔÏ×:\n" +"Сегмент динамической информации со смещением 0x%lx содержит %d элементов:\n" -#: readelf.c:7160 +#: readelf.c:7606 #, c-format msgid " Num: Name BoundTo Flags\n" -msgstr " þÉÓ: éÍÑ çÒÁÎÉÃÁ æÌÁÇÉ\n" +msgstr " Чис: Имя Граница Флаги\n" -#: readelf.c:7212 +#: readelf.c:7658 #, c-format msgid "" "\n" "Assembly dump of section %s\n" msgstr "" "\n" -"óÂÏÒÏÞÎÙÊ ÄÁÍÐ ÒÁÚÄÅÌÁ %s\n" +"Сборочный дамп раздела %s\n" -#: readelf.c:7233 +#: readelf.c:7680 #, c-format msgid "" "\n" "Section '%s' has no data to dump.\n" msgstr "" "\n" -"òÁÚÄÅÌ '%s' ÎÅ ÓÏÄÅÒÖÉÔ ÄÁÎÎÙÈ ÄÌÑ ÄÁÍÐÁ.\n" +"Раздел '%s' не содержит данных для дампа.\n" -#: readelf.c:7238 +#: readelf.c:7685 #, c-format msgid "" "\n" "Hex dump of section '%s':\n" msgstr "" "\n" -"Hex-ÄÁÍÐ ÒÁÚÄÅÌÁ '%s':\n" +"Hex-дамп раздела '%s':\n" -#: 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 " ПРИМЕЧАНИЕ: в этом разделе есть перемещения, но они НЕ были применены к этому дампу.\n" + +#: readelf.c:7845 +#, c-format +msgid "skipping relocation of unknown size against offset 0x%lx in section %s\n" +msgstr "пропускается перемещение для смещения неизвестного размера 0x%lx в разделе %s\n" + +#: readelf.c:7854 #, c-format msgid "skipping invalid relocation offset 0x%lx in section %s\n" -msgstr "ÐÒÏÐÕÓËÁÅÔÓÑ ÎÅ×ÅÒÎÏÅ ÓÍÅÝÅÎÉÅ ÐÅÒÅÍÅÝÅÎÉÑ 0x%lx × ÒÁÚÄÅÌÅ %s\n" +msgstr "пропускается неверное смещение перемещения 0x%lx в разделе %s\n" -#: readelf.c:7376 +#: readelf.c:7875 #, c-format msgid "skipping unexpected symbol type %s in relocation in section .rela%s\n" -msgstr "ÐÒÏÐÕÓËÁÅÔÓÑ ÎÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ÓÉÍ×ÏÌÁ %s × ÐÅÒÅÍÅÝÅÎÉÉ × ÒÁÚÄÅÌÅ .rela%s\n" +msgstr "пропускается неожиданный тип символа %s в перемещении в разделе .rela%s\n" -#: readelf.c:7402 +#: readelf.c:7902 #, c-format msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n" -msgstr "ÐÒÏÐÕÓËÁÅÔÓÑ ÎÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ÓÉÍ×ÏÌÁ %s × ÐÅÒÅÍÅÝÅÎÉÉ × ÒÁÚÄÅÌÅ .rela.%s\n" +msgstr "пропускается неожиданный тип символа %s в перемещении в разделе .rela.%s\n" -#: readelf.c:7435 +#: readelf.c:7935 #, c-format msgid "%s section data" -msgstr "ÄÁÎÎÙÅ ÒÁÚÄÅÌÁ %s" +msgstr "данные раздела %s" -#: readelf.c:7472 +#: readelf.c:7972 #, c-format msgid "" "\n" "Section '%s' has no debugging data.\n" msgstr "" "\n" -"òÁÚÄÅÌ '%s' ÎÅ ÓÏÄÅÒÖÉÔ ÏÔÌÁÄÏÞÎÙÈ ÄÁÎÎÙÈ.\n" +"Раздел '%s' не содержит отладочных данных.\n" -#: readelf.c:7498 +#: readelf.c:7998 #, c-format msgid "Unrecognized debug section: %s\n" -msgstr "îÅÒÁÓÐÏÚÎÁÎÎÙÊ ÒÁÚÄÅÌ ÏÔÌÁÄËÉ: %s\n" +msgstr "Нераспознанный раздел отладки: %s\n" + +#: readelf.c:8026 +#, c-format +msgid "Section '%s' was not dumped because it does not exist!\n" +msgstr "Для раздела '%s' дамп не был выполнен, потому что он не существует!\n" -#: readelf.c:7533 +#: readelf.c:8061 #, c-format msgid "Section %d was not dumped because it does not exist!\n" -msgstr "äÌÑ ÒÁÚÄÅÌÁ %d ÄÁÍÐ ÎÅ ÂÙÌ ×ÙÐÏÌÎÅÎ, ÐÏÔÏÍÕ ÞÔÏ ÏÎ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ!\n" +msgstr "Для раздела %d дамп не был выполнен, потому что он не существует!\n" -#: readelf.c:7791 +#: readelf.c:8478 msgid "attributes" -msgstr "ÁÔÒÉÂÕÔÙ" +msgstr "атрибуты" -#: readelf.c:7809 +#: readelf.c:8497 #, c-format msgid "ERROR: Bad section length (%d > %d)\n" -msgstr "ïûéâëá: îÅ×ÅÒÎÁÑ ÄÌÉÎÁ ÒÁÚÄÅÌÁ (%d > %d)\n" +msgstr "ОШИБКА: Неверная длина раздела (%d > %d)\n" -#: readelf.c:7830 +#: readelf.c:8522 #, c-format msgid "ERROR: Bad subsection length (%d > %d)\n" -msgstr "ïûéâëá: îÅ×ÅÒÎÁÑ ÄÌÉÎÁ ÐÏÄÒÁÚÄÅÌÁ (%d > %d)\n" +msgstr "ОШИБКА: Неверная длина подраздела (%d > %d)\n" -#: readelf.c:7880 +#: readelf.c:8578 #, c-format msgid "Unknown format '%c'\n" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÆÏÒÍÁÔ '%c'\n" +msgstr "Неизвестный формат '%c'\n" -#: readelf.c:7936 readelf.c:8304 +#: readelf.c:8651 readelf.c:9019 msgid "liblist" msgstr "liblist" -#: readelf.c:8025 +#: readelf.c:8740 msgid "options" -msgstr "ÏÐÃÉÉ" +msgstr "опции" -#: readelf.c:8055 +#: readelf.c:8770 #, c-format msgid "" "\n" "Section '%s' contains %d entries:\n" msgstr "" "\n" -"òÁÚÄÅÌ '%s' ÓÏÄÅÒÖÉÔ %d ÐÕÎËÔÏ×:\n" +"Раздел '%s' содержит %d элементов:\n" -#: readelf.c:8216 -msgid "conflict list found without a dynamic symbol table" -msgstr "ÓÐÉÓÏË ËÏÎÆÌÉËÔÏ× ÎÁÊÄÅÎ ÂÅÚ ÔÁÂÌÉÃÙ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÉÍ×ÏÌÏ×" +# +#: readelf.c:8931 +msgid "conflict list found without a dynamic symbol table\n" +msgstr "список конфликтов найден без таблицы динамических символов\n" -#: readelf.c:8232 readelf.c:8246 +#: readelf.c:8947 readelf.c:8961 msgid "conflict" -msgstr "ËÏÎÆÌÉËÔ" +msgstr "конфликт" -#: readelf.c:8256 +#: readelf.c:8971 #, c-format msgid "" "\n" "Section '.conflict' contains %lu entries:\n" msgstr "" "\n" -"òÁÚÄÅÌ '.conflict' ÓÏÄÅÒÖÉÔ %lu ÐÕÎËÔÏ×:\n" +"Раздел '.conflict' содержит %lu элементов:\n" -#: readelf.c:8258 +#: readelf.c:8973 msgid " Num: Index Value Name" -msgstr " îÏÍ: éÎÄÅËÓ úÎÁÞ. éÍÑ" +msgstr " Ном: Индекс Знач. Имя" -#: readelf.c:8311 +#: readelf.c:9026 msgid "liblist string table" -msgstr "ÔÁÂÌÉÃÁ ÓÔÒÏË liblist" +msgstr "таблица строк liblist" -#: readelf.c:8321 +#: readelf.c:9036 #, c-format msgid "" "\n" "Library list section '%s' contains %lu entries:\n" msgstr "" "\n" -"òÁÚÄÅÌ ÓÐÉÓËÁ ÂÉÂÌÉÏÔÅË '%s' ÓÏÄÅÒÖÉÔ %lu ÐÕÎËÔÏ×:\n" +"Раздел списка библиотек '%s' содержит %lu элементов:\n" -#: readelf.c:8374 +#: readelf.c:9089 msgid "NT_AUXV (auxiliary vector)" -msgstr "NT_AUXV (×ÓÐÏÍÏÇÁÔÅÌØÎÙÊ ×ÅËÔÏÒ)" +msgstr "NT_AUXV (вспомогательный вектор)" -#: readelf.c:8376 +#: readelf.c:9091 msgid "NT_PRSTATUS (prstatus structure)" -msgstr "NT_PRSTATUS (ÓÔÒÕËÔÕÒÁ prstatus)" +msgstr "NT_PRSTATUS (структура prstatus)" -#: readelf.c:8378 +#: readelf.c:9093 msgid "NT_FPREGSET (floating point registers)" -msgstr "NT_FPREGSET (ÒÅÇÉÓÔÒÙ Ó ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÏÊ)" +msgstr "NT_FPREGSET (регистры с плавающей точкой)" -#: readelf.c:8380 +#: readelf.c:9095 msgid "NT_PRPSINFO (prpsinfo structure)" -msgstr "NT_PRPSINFO (ÓÔÒÕËÔÕÒÁ prpsinfo)" +msgstr "NT_PRPSINFO (структура prpsinfo)" -#: readelf.c:8382 +#: readelf.c:9097 msgid "NT_TASKSTRUCT (task structure)" -msgstr "NT_TASKSTRUCT (ÓÔÒÕËÔÕÒÁ task)" +msgstr "NT_TASKSTRUCT (структура task)" -#: readelf.c:8384 +#: readelf.c:9099 msgid "NT_PRXFPREG (user_xfpregs structure)" -msgstr "NT_PRXFPREG (ÓÔÒÕËÔÕÒÁ user_xfpregs)" +msgstr "NT_PRXFPREG (структура user_xfpregs)" -#: readelf.c:8386 +#: readelf.c:9101 msgid "NT_PSTATUS (pstatus structure)" -msgstr "NT_PSTATUS (ÓÔÒÕËÔÕÒÁ pstatus)" +msgstr "NT_PSTATUS (структура pstatus)" -#: readelf.c:8388 +#: readelf.c:9103 msgid "NT_FPREGS (floating point registers)" -msgstr "NT_FPREGS (ÒÅÇÉÓÔÒÙ Ó ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÏÊ)" +msgstr "NT_FPREGS (регистры с плавающей точкой)" -#: readelf.c:8390 +#: readelf.c:9105 msgid "NT_PSINFO (psinfo structure)" -msgstr "NT_PSINFO (ÓÔÒÕËÔÕÒÁ psinfo)" +msgstr "NT_PSINFO (структура psinfo)" -#: readelf.c:8392 +#: readelf.c:9107 msgid "NT_LWPSTATUS (lwpstatus_t structure)" -msgstr "NT_LWPSTATUS (ÓÔÒÕËÔÕÒÁ lwpstatus_t)" +msgstr "NT_LWPSTATUS (структура lwpstatus_t)" -#: readelf.c:8394 +#: readelf.c:9109 msgid "NT_LWPSINFO (lwpsinfo_t structure)" -msgstr "NT_LWPSINFO (ÓÔÒÕËÔÕÒÁ lwpsinfo_t)" +msgstr "NT_LWPSINFO (структура lwpsinfo_t)" -#: readelf.c:8396 +#: readelf.c:9111 msgid "NT_WIN32PSTATUS (win32_pstatus structure)" -msgstr "NT_WIN32PSTATUS (ÓÔÒÕËÔÕÒÁ win32_pstatus)" +msgstr "NT_WIN32PSTATUS (структура win32_pstatus)" -#: readelf.c:8404 +#: readelf.c:9119 msgid "NT_VERSION (version)" -msgstr "NT_VERSION (×ÅÒÓÉÑ)" +msgstr "NT_VERSION (версия)" -#: readelf.c:8406 +#: readelf.c:9121 msgid "NT_ARCH (architecture)" -msgstr "NT_ARCH (ÁÒÈÉÔÅËÔÕÒÁ)" +msgstr "NT_ARCH (архитектура)" -#: readelf.c:8411 readelf.c:8433 +#: readelf.c:9126 readelf.c:9148 #, c-format msgid "Unknown note type: (0x%08x)" -msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ËÏÍÍÅÎÔÁÒÉÑ: (0x%08x)" +msgstr "Неизвестный тип комментария: (0x%08x)" #. NetBSD core "procinfo" structure. -#: readelf.c:8423 +#: readelf.c:9138 msgid "NetBSD procinfo structure" -msgstr "óÔÒÕËÔÕÒÁ procinfo NetBSD" +msgstr "Структура procinfo NetBSD" -#: readelf.c:8450 readelf.c:8464 +#: readelf.c:9165 readelf.c:9179 msgid "PT_GETREGS (reg structure)" -msgstr "PT_GETREGS (ÓÔÒÕËÔÕÒÁ reg)" +msgstr "PT_GETREGS (структура reg)" -#: readelf.c:8452 readelf.c:8466 +#: readelf.c:9167 readelf.c:9181 msgid "PT_GETFPREGS (fpreg structure)" -msgstr "PT_GETFPREGS (ÓÔÒÕËÔÕÒÁ fpreg)" +msgstr "PT_GETFPREGS (структура fpreg)" -#: readelf.c:8472 +#: readelf.c:9187 #, c-format msgid "PT_FIRSTMACH+%d" msgstr "PT_FIRSTMACH+%d" -#: readelf.c:8518 +#: readelf.c:9233 msgid "notes" -msgstr "ËÏÍÍÅÎÔÁÒÉÉ" +msgstr "комментарии" -#: readelf.c:8524 +#: readelf.c:9239 #, c-format msgid "" "\n" "Notes at offset 0x%08lx with length 0x%08lx:\n" msgstr "" "\n" -"ëÏÍÍÅÎÔÁÒÉÉ ÓÏ ÓÍÅÝÅÎÉÅÍ 0x%08lx ÄÌÉÎÏÊ 0x%08lx:\n" +"Комментарии со смещением 0x%08lx длиной 0x%08lx:\n" -#: readelf.c:8526 +#: readelf.c:9241 #, c-format msgid " Owner\t\tData size\tDescription\n" -msgstr " ÷ÌÁÄÅÌÅÃ\t\tòÁÚÍÅÒ ÄÁÎÎÙÈ\tïÐÉÓÁÎÉÅ\n" +msgstr " Владелец\t\tРазмер данных\tОписание\n" -#: readelf.c:8545 +#: readelf.c:9260 #, c-format msgid "corrupt note found at offset %lx into core notes\n" -msgstr "ÎÁÊÄÅÎ ÐÏ×ÒÅÖÄ£ÎÎÙÊ ËÏÍÍÅÎÔÁÒÉÊ ÓÏ ÓÍÅÝÅÎÉÅÍ %lx × ÈÒÁÎÉÌÉÝÅ ËÏÍÍÅÎÔÁÒÉÅ×\n" +msgstr "найден повреждённый комментарий со смещением %lx в хранилище комментариев\n" -#: readelf.c:8547 +#: readelf.c:9262 #, c-format msgid " type: %lx, namesize: %08lx, descsize: %08lx\n" -msgstr " ÔÉÐ: %lx, ÒÁÚÍ_ÉÍÅÎÉ: %08lx, ÒÁÚÍ_ÏÐÉÓ: %08lx\n" +msgstr " тип: %lx, разм_имени: %08lx, разм_опис: %08lx\n" -#: readelf.c:8645 +#: readelf.c:9360 #, c-format msgid "No note segments present in the core file.\n" -msgstr "÷ ÆÁÊÌÅ ÓÏÄÅÒÖÉÍÏÇÏ ÏÔÓÕÔÓÔ×ÕÀÔ ÓÅÇÍÅÎÔÙ ËÏÍÍÅÎÔÁÒÉÅ×.\n" +msgstr "В файле содержимого отсутствуют сегменты комментариев.\n" -#: 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 ÂÙÌÁ ÓÏÂÒÁÎÁ ÂÅÚ ÐÏÄÄÅÒÖËÉ 64-ÂÉÔÎÏÇÏ ÔÉÐÁ\n" -"ÄÁÎÎÙÈ, É ÐÏÜÔÏÍÕ ÏÎÁ ÎÅ ÍÏÖÅÔ ÞÉÔÁÔØ 64-ÂÉÔÎÙÅ ÆÁÊÌÙ ELF.\n" +"Эта версия readelf была собрана без поддержки 64-битного типа\n" +"данных, и поэтому она не может читать 64-битные файлы ELF.\n" -#: readelf.c:8775 readelf.c:9119 +#: readelf.c:9493 readelf.c:9837 #, c-format msgid "%s: Failed to read file header\n" -msgstr "%s: óÂÏÊ ÐÒÉ ÞÔÅÎÉÉ ÚÁÇÏÌÏ×ËÁ ÆÁÊÌÁ\n" +msgstr "%s: Сбой при чтении заголовка файла\n" -#: readelf.c:8788 +#: readelf.c:9506 #, c-format msgid "" "\n" "File: %s\n" msgstr "" "\n" -"æÁÊÌ: %s\n" +"Файл: %s\n" -#: 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 "%s: ÓÂÏÊ ÐÒÉ ÞÔÅÎÉÉ ÚÁÇÏÌÏ×ËÁ ÁÒÈÉ×Á\n" +msgstr "%s: сбой при чтении заголовка архива\n" -#: readelf.c:8947 +#: readelf.c:9665 #, c-format msgid "%s: failed to skip archive symbol table\n" -msgstr "%s: ÓÂÏÊ ÐÒÉ ÐÒÏÐÕÓËÅ ÔÁÂÌÉÃÙ ÓÉÍ×ÏÌÏ× ÁÒÈÉ×Á\n" +msgstr "%s: сбой при пропуске таблицы символов архива\n" -#: readelf.c:8979 +#: readelf.c:9697 #, c-format msgid "%s: failed to read string table\n" -msgstr "%s: ÓÂÏÊ ÐÒÉ ÞÔÅÎÉÉ ÔÁÂÌÉÃÙ ÓÔÒÏË\n" +msgstr "%s: сбой при чтении таблицы строк\n" -#: readelf.c:9015 +#: readelf.c:9733 #, c-format msgid "%s: invalid archive string table offset %lu\n" -msgstr "%s: ÎÅ×ÅÒÎÏÅ ÓÍÅÝÅÎÉÅ ÔÁÂÌÉÃÙ ÓÔÒÏË ÁÒÈÉ×Á %lu\n" +msgstr "%s: неверное смещение таблицы строк архива %lu\n" -#: readelf.c:9031 +#: readelf.c:9749 #, c-format msgid "%s: bad archive file name\n" -msgstr "%s: ÎÅ×ÅÒÎÏÅ ÉÍÑ ÆÁÊÌÁ ÁÒÈÉ×Á\n" +msgstr "%s: неверное имя файла архива\n" -#: readelf.c:9063 +#: readelf.c:9781 #, c-format msgid "%s: failed to seek to next archive header\n" -msgstr "%s: ÓÂÏÊ ÐÒÉ ÐÒÏÉÓËÅ ÓÌÅÄÕÀÝÅÇÏ ÚÁÇÏÌÏ×ËÁ ÁÒÈÉ×Á\n" +msgstr "%s: сбой при происке следующего заголовка архива\n" -#: readelf.c:9097 +#: readelf.c:9815 #, c-format msgid "'%s': No such file\n" -msgstr "'%s': îÅÔ ÔÁËÏÇÏ ÆÁÊÌÁ\n" +msgstr "'%s': Нет такого файла\n" -#: readelf.c:9099 +#: readelf.c:9817 #, c-format msgid "Could not locate '%s'. System error message: %s\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ '%s'. óÉÓÔÅÍÎÏÅ ÓÏÏÂÝÅÎÉÅ Ï ÏÛÉÂËÅ: %s\n" +msgstr "Невозможно найти '%s'. Системное сообщение об ошибке: %s\n" -#: readelf.c:9106 +#: readelf.c:9824 #, c-format msgid "'%s' is not an ordinary file\n" -msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÏÂÙÞÎÙÍ ÆÁÊÌÏÍ\n" +msgstr "%s не является обычным файлом\n" -#: readelf.c:9113 +#: readelf.c:9831 #, c-format msgid "Input file '%s' is not readable.\n" -msgstr "÷ÈÏÄÎÏÊ ÆÁÊÌ '%s' Ñ×ÌÑÅÔÓÑ ÎÅÞÉÔÁÅÍÙÍ.\n" +msgstr "Входной файл '%s' является нечитаемым.\n" -#: rename.c:129 +#: rename.c:130 #, c-format msgid "%s: cannot set time: %s" -msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ×ÒÅÍÑ: %s" +msgstr "%s: невозможно установить время: %s" #. 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 "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ '%s' ÐÒÉÞÉÎÁ: %s" +msgstr "невозможно переименовать '%s' причина: %s" -#: rename.c:210 +#: rename.c:211 #, c-format msgid "unable to copy file '%s' reason: %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓËÏÐÉÒÏ×ÁÔØ ÆÁÊÌ '%s' ÐÒÉÞÉÎÁ: %s" +msgstr "невозможно скопировать файл '%s' причина: %s" -#: resbin.c:132 +#: resbin.c:119 #, c-format msgid "%s: not enough binary data" -msgstr "%s: ÎÅÄÏÓÔÁÔÏÞÎÏ Ä×ÏÉÞÎÙÈ ÄÁÎÎÙÈ" +msgstr "%s: недостаточно двоичных данных" -#: resbin.c:148 +#: resbin.c:135 msgid "null terminated unicode string" -msgstr "ÓÔÒÏËÁ unicode, ÚÁ×ÅÒÛÅÎÎÁÑ `0'" +msgstr "строка unicode, завершенная `0'" -#: resbin.c:175 resbin.c:181 +#: resbin.c:162 resbin.c:168 msgid "resource ID" -msgstr "ID ÒÅÓÕÒÓÁ" +msgstr "ID ресурса" -#: resbin.c:221 +#: resbin.c:207 msgid "cursor" -msgstr "ÕËÁÚÁÔÅÌØ" +msgstr "указатель" -#: resbin.c:253 resbin.c:260 +#: resbin.c:238 resbin.c:245 msgid "menu header" -msgstr "ÚÁÇÏÌÏ×ÏË menu" +msgstr "заголовок menu" -#: resbin.c:270 +#: resbin.c:254 msgid "menuex header" -msgstr "ÚÁÇÏÌÏ×ÏË menuex" +msgstr "заголовок menuex" -#: resbin.c:274 +#: resbin.c:258 msgid "menuex offset" -msgstr "ÓÍÅÝÅÎÉÅ menuex" +msgstr "смещение menuex" -#: resbin.c:281 +#: resbin.c:263 #, c-format msgid "unsupported menu version %d" -msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ×ÅÒÓÉÑ menu %d" +msgstr "неподдерживаемая версия menu %d" -#: resbin.c:306 resbin.c:321 resbin.c:384 +#: resbin.c:288 resbin.c:303 resbin.c:365 msgid "menuitem header" -msgstr "ÚÁÇÏÌÏ×ÏË menuitem" +msgstr "заголовок menuitem" -#: resbin.c:414 +#: resbin.c:395 msgid "menuitem" msgstr "menuitem" -#: resbin.c:453 resbin.c:481 +#: resbin.c:432 resbin.c:460 msgid "dialog header" -msgstr "ÚÁÇÏÌÏ×ÏË ÄÉÁÌÏÇÁ" +msgstr "заголовок диалога" -#: resbin.c:471 +#: resbin.c:450 #, c-format msgid "unexpected DIALOGEX version %d" -msgstr "ÎÅÐÒÅÄ×ÉÄÅÎÎÁÑ ×ÅÒÓÉÑ DIALOGEX %d" +msgstr "непредвиденная версия DIALOGEX %d" -#: resbin.c:516 +#: resbin.c:495 msgid "dialog font point size" -msgstr "ÒÁÚÍÅÒ × ÐÕÎËÔÁÈ ÛÒÉÆÔÁ ÄÉÁÌÏÇÁ" +msgstr "размер в пунктах шрифта диалога" -#: resbin.c:524 +#: resbin.c:503 msgid "dialogex font information" -msgstr "ÉÎÆÏÒÍÁÃÉÑ Ï ÛÒÉÆÔÅ dialogex" +msgstr "информация о шрифте dialogex" -#: resbin.c:550 resbin.c:568 +#: resbin.c:529 resbin.c:547 msgid "dialog control" -msgstr "ÕÐÒÁ×ÌÅÎÉÅ ÄÉÁÌÏÇÏÍ" +msgstr "управление диалогом" -#: resbin.c:560 +#: resbin.c:539 msgid "dialogex control" -msgstr "ÕÐÒÁ×ÌÅÎÉÅ dialogex" +msgstr "управление dialogex" -#: resbin.c:589 +#: resbin.c:568 msgid "dialog control end" -msgstr "ËÏÎÅà ÕÐÒÁ×ÌÅÎÉÑ ÄÉÁÌÏÇÏÍ" +msgstr "конец управления диалогом" -#: resbin.c:601 +#: resbin.c:580 msgid "dialog control data" -msgstr "ÄÁÎÎÙÅ ÕÐÒÁ×ÌÅÎÉÑ ÄÉÁÌÏÇÏÍ" +msgstr "данные управления диалогом" -#: resbin.c:642 +#: resbin.c:620 msgid "stringtable string length" -msgstr "ÄÌÉÎÁ ÓÔÒÏËÉ stringtable" +msgstr "длина строки stringtable" -#: resbin.c:652 +#: resbin.c:630 msgid "stringtable string" -msgstr "ÓÔÒÏËÁ stringtable" +msgstr "строка stringtable" -#: resbin.c:683 +#: resbin.c:660 msgid "fontdir header" -msgstr "ÚÁÇÏÌÏ×ÏË fontdir" +msgstr "заголовок fontdir" -#: resbin.c:696 +#: resbin.c:674 msgid "fontdir" msgstr "fontdir" -#: resbin.c:712 +#: resbin.c:691 msgid "fontdir device name" -msgstr "ÉÍÑ ÕÓÔÒÏÊÓÔ×Á fontdir" +msgstr "имя устройства fontdir" -#: resbin.c:718 +#: resbin.c:697 msgid "fontdir face name" -msgstr "ÉÍÑ ÇÁÒÎÉÔÕÒÙ fontdir" +msgstr "имя гарнитуры fontdir" -#: resbin.c:759 +#: resbin.c:737 msgid "accelerator" -msgstr "ÁËÓÅÌÅÒÁÔÏÒ" +msgstr "акселератор" -#: resbin.c:819 +#: resbin.c:796 msgid "group cursor header" -msgstr "ÚÁÇÏÌÏ×ÏË ÕËÁÚÁÔÅÌÑ ÇÒÕÐÐÙ" +msgstr "заголовок указателя группы" -#: resbin.c:823 +#: resbin.c:800 resrc.c:1306 #, c-format msgid "unexpected group cursor type %d" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ÕËÁÚÁÔÅÌÑ ÇÒÕÐÐÙ %d" +msgstr "неожиданный тип указателя группы %d" -#: resbin.c:838 +#: resbin.c:815 msgid "group cursor" -msgstr "ÕËÁÚÁÔÅÌØ ÇÒÕÐÐÙ" +msgstr "указатель группы" -#: resbin.c:875 +#: resbin.c:851 msgid "group icon header" -msgstr "ÚÁÇÏÌÏ×ÏË ÚÎÁÞËÁ ÇÒÕÐÐÙ" +msgstr "заголовок значка группы" -#: resbin.c:879 +#: resbin.c:855 resrc.c:1253 #, c-format msgid "unexpected group icon type %d" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ÚÎÁÞËÁ ÇÒÕÐÐÙ %d" +msgstr "неожиданный тип значка группы %d" -#: resbin.c:894 +#: resbin.c:870 msgid "group icon" -msgstr "ÚÎÁÞÏË ÇÒÕÐÐÙ" +msgstr "значок группы" -#: resbin.c:957 resbin.c:1174 +#: resbin.c:934 resbin.c:1150 msgid "unexpected version string" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÓÔÒÏËÁ ×ÅÒÓÉÉ" +msgstr "неожиданная строка версии" -#: resbin.c:989 +#: resbin.c:965 #, c-format msgid "version length %d does not match resource length %lu" -msgstr "ÄÌÉÎÁ ×ÅÒÓÉÉ %d ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÄÌÉÎÅ ÒÅÓÕÒÓÁ %lu" +msgstr "длина версии %d не соответствует длине ресурса %lu" -#: resbin.c:993 +#: resbin.c:969 #, c-format msgid "unexpected version type %d" -msgstr "ÎÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ×ÅÒÓÉÉ %d" +msgstr "неожиданный тип версии %d" -#: resbin.c:1005 +#: resbin.c:981 #, c-format -msgid "unexpected fixed version information length %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÉÎÆÏÒÍÁÃÉÉ Ï ÆÉËÓÉÒÏ×ÁÎÎÏÊ ×ÅÒÓÉÉ %d" +msgid "unexpected fixed version information length %ld" +msgstr "неожиданная длина информации о фиксированной версии %ld" -#: resbin.c:1008 +#: resbin.c:984 msgid "fixed version info" -msgstr "ÉÎÆÏÒÍÁÃÉÑ Ï ÆÉËÓÉÒÏ×ÁÎÎÏÊ ×ÅÒÓÉÉ" +msgstr "информация о фиксированной версии" -#: resbin.c:1012 +#: resbin.c:988 #, c-format msgid "unexpected fixed version signature %lu" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÓÉÇÎÁÔÕÒÁ ÆÉËÓÉÒÏ×ÁÎÎÏÊ ×ÅÒÓÉÉ %lu" +msgstr "неожиданная сигнатура фиксированной версии %lu" -#: resbin.c:1016 +#: resbin.c:992 #, c-format msgid "unexpected fixed version info version %lu" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ×ÅÒÓÉÑ ÉÎÆÏÒÍÁÃÉÉ Ï ÆÉËÓÉÒÏ×ÁÎÎÏÊ ×ÅÒÓÉÉ %lu" +msgstr "неожиданная версия информации о фиксированной версии %lu" -#: resbin.c:1045 +#: resbin.c:1021 msgid "version var info" -msgstr "ÉÎÆÏÒÍÁÃÉÑ Ï ÐÅÒÅÍÅÎÎÏÊ ×ÅÒÓÉÉ" +msgstr "информация о переменной версии" -#: resbin.c:1062 +#: resbin.c:1038 #, c-format -msgid "unexpected stringfileinfo value length %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÚÎÁÞÅÎÉÑ stringfileinfo %d" +msgid "unexpected stringfileinfo value length %ld" +msgstr "неожиданная длина значения stringfileinfo %ld" -#: resbin.c:1072 +#: resbin.c:1048 #, c-format -msgid "unexpected version stringtable value length %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÚÎÁÞÅÎÉÑ ×ÅÒÓÉÉ stringtable %d" +msgid "unexpected version stringtable value length %ld" +msgstr "неожиданная длина значения версии stringtable %ld" -#: resbin.c:1106 +#: resbin.c:1082 #, c-format -msgid "unexpected version string length %d != %d + %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÓÔÒÏËÉ ×ÅÒÓÉÉ %d != %d + %d" +msgid "unexpected version string length %ld != %ld + %ld" +msgstr "неожиданная длина строки версии %ld != %ld + %ld" -#: resbin.c:1117 +#: resbin.c:1093 #, c-format -msgid "unexpected version string length %d < %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÓÔÒÏËÉ ×ÅÒÓÉÉ %d < %d" +msgid "unexpected version string length %ld < %ld" +msgstr "неожиданная длина строки версии %ld < %ld" -#: resbin.c:1134 +#: resbin.c:1110 #, c-format -msgid "unexpected varfileinfo value length %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÚÎÁÞÅÎÉÑ varfileinfo %d" +msgid "unexpected varfileinfo value length %ld" +msgstr "неожиданная длина значения varfileinfo %ld" -#: resbin.c:1153 +#: resbin.c:1129 msgid "version varfileinfo" -msgstr "×ÅÒÓÉÑ varfileinfo" +msgstr "версия varfileinfo" -#: resbin.c:1168 +#: resbin.c:1144 #, c-format -msgid "unexpected version value length %d" -msgstr "ÎÅÏÖÉÄÁÎÎÁÑ ÄÌÉÎÁ ÚÎÁÞÅÎÉÑ ×ÅÒÓÉÉ %d" +msgid "unexpected version value length %ld" +msgstr "неожиданная длина значения версии %ld" -#: rescoff.c:126 +#: rescoff.c:124 msgid "filename required for COFF input" -msgstr "ÔÒÅÂÕÅÔÓÑ ÉÍÑ ÄÌÑ ×ÈÏÄÎÏÇÏ COFF" +msgstr "требуется имя для входного COFF" -#: rescoff.c:143 +#: rescoff.c:141 #, c-format msgid "%s: no resource section" -msgstr "%s: ÎÅÔ ÒÁÚÄÅÌÁ ÒÅÓÕÒÓÏ×" +msgstr "%s: нет раздела ресурсов" -#: 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 "%s: %s: ÁÄÒÅÓ ÚÁ ÐÒÅÄÅÌÁÍÉ ÇÒÁÎÉÃ" +msgstr "%s: %s: адрес за пределами границ" #: rescoff.c:190 msgid "directory" -msgstr "ËÁÔÁÌÏÇ" +msgstr "каталог" #: rescoff.c:218 msgid "named directory entry" -msgstr "ÉÍÅÎÏ×ÁÎÎÙÊ ÜÌÅÍÅÎÔ ËÁÔÁÌÏÇÁ" +msgstr "именованный элемент каталога" #: rescoff.c:227 msgid "directory entry name" -msgstr "ÉÍÑ ÜÌÅÍÅÎÔÁ ËÁÔÁÌÏÇÁ" +msgstr "имя элемента каталога" #: rescoff.c:247 msgid "named subdirectory" -msgstr "ÉÍÅÎÏ×ÁÎÎÙÊ ÐÏÄËÁÔÁÌÏÇ" +msgstr "именованный подкаталог" #: rescoff.c:255 msgid "named resource" -msgstr "ÉÍÅÎÏ×ÁÎÎÙÊ ÒÅÓÕÒÓ" +msgstr "именованный ресурс" #: rescoff.c:270 msgid "ID directory entry" -msgstr "ID ÜÌÅÍÅÎÔÁ ËÁÔÁÌÏÇÁ" +msgstr "ID элемента каталога" #: rescoff.c:287 msgid "ID subdirectory" -msgstr "ID ÐÏÄËÁÔÁÌÏÇÁ" +msgstr "ID подкаталога" #: rescoff.c:295 msgid "ID resource" -msgstr "ID ÒÅÓÕÒÓÁ" +msgstr "ID ресурса" -#: rescoff.c:318 +#: rescoff.c:320 msgid "resource type unknown" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÒÅÓÕÒÓÁ" +msgstr "неизвестный тип ресурса" -#: rescoff.c:321 +#: rescoff.c:323 msgid "data entry" -msgstr "ÜÌÅÍÅÎÔ ÄÁÎÎÙÈ" +msgstr "элемент данных" -#: rescoff.c:329 +#: rescoff.c:331 msgid "resource data" -msgstr "ÄÁÎÎÙÅ ÒÅÓÕÒÓÁ" +msgstr "данные ресурса" -#: rescoff.c:334 +#: rescoff.c:336 msgid "resource data size" -msgstr "ÒÁÚÍÅÒ ÄÁÎÎÙÈ ÒÅÓÕÒÓÁ" +msgstr "размер данных ресурса" -#: rescoff.c:427 +#: rescoff.c:431 msgid "filename required for COFF output" -msgstr "ÔÒÅÂÕÅÔÓÑ ÉÍÑ ÆÁÊÌÁ ÄÌÑ ×ÙÈÏÄÎÏÇÏ COFF" +msgstr "требуется имя файла для выходного COFF" -#: rescoff.c:719 +#: rescoff.c:718 msgid "can't get BFD_RELOC_RVA relocation type" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÔÉÐ ÐÅÒÅÍÅÝÅÎÉÑ BFD_RELOC_RVA" +msgstr "невозможно получить тип перемещения BFD_RELOC_RVA" -#: resrc.c:238 resrc.c:309 +#: resrc.c:262 resrc.c:333 #, c-format msgid "can't open temporary file `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ `%s': %s" +msgstr "невозможно открыть временный файл `%s': %s" -#: resrc.c:244 +#: resrc.c:268 #, c-format msgid "can't redirect stdout: `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÎÁÐÒÁ×ÉÔØ stdout: `%s': %s" +msgstr "невозможно перенаправить stdout: `%s': %s" -#: resrc.c:260 +#: resrc.c:284 #, c-format msgid "%s %s: %s" msgstr "%s %s: %s" -#: resrc.c:305 +#: resrc.c:329 #, c-format msgid "can't execute `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ `%s': %s" +msgstr "невозможно выполнить `%s': %s" -#: resrc.c:314 +#: resrc.c:338 #, c-format msgid "Using temporary file `%s' to read preprocessor output\n" -msgstr "éÓÐÏÌØÚÕÅÔÓÑ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ `%s' ÄÌÑ ÞÔÅÎÉÑ ×ÙÈÏÄÎÙÈ ÄÁÎÎÙÈ ÐÒÅÐÒÏÃÅÓÓÏÒÁ\n" +msgstr "Используется временный файл `%s' для чтения выходных данных препроцессора\n" -#: resrc.c:321 +#: resrc.c:345 #, c-format msgid "can't popen `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ popen `%s': %s" +msgstr "невозможно popen `%s': %s" -#: resrc.c:323 +#: resrc.c:347 #, c-format msgid "Using popen to read preprocessor output\n" -msgstr "éÓÐÏÌØÚÕÅÔÓÑ popen ÄÌÑ ÞÔÅÎÉÑ ×ÙÈÏÄÎÙÈ ÄÁÎÎÙÈ ÐÒÅÐÒÏÃÅÓÓÏÒÁ\n" +msgstr "Используется popen для чтения выходных данных препроцессора\n" -#: resrc.c:362 +#: resrc.c:413 #, c-format msgid "Tried `%s'\n" -msgstr "ïÐÒÏÂÏ×ÁÎ `%s'\n" +msgstr "Опробован `%s'\n" -#: resrc.c:373 +#: resrc.c:424 #, c-format msgid "Using `%s'\n" -msgstr "éÓÐÏÌØÚÕÅÔÓÑ `%s'\n" +msgstr "Используется `%s'\n" -#: resrc.c:529 +#: resrc.c:583 #, c-format msgid "%s:%d: %s\n" msgstr "%s:%d: %s\n" -#: resrc.c:537 +#: resrc.c:591 #, c-format msgid "%s: unexpected EOF" -msgstr "%s: ÎÅÏÖÉÄÁÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ" +msgstr "%s: неожиданный конец файла" -#: resrc.c:586 +#: resrc.c:640 #, c-format msgid "%s: read of %lu returned %lu" -msgstr "%s: ÐÒÉ ÞÔÅÎÉÉ %lu ÂÙÌÏ ×ÏÚ×ÒÁÝÅÎÏ %lu" +msgstr "%s: при чтении %lu было возвращено %lu" -#: resrc.c:624 resrc.c:1134 +#: resrc.c:678 resrc.c:1453 #, c-format msgid "stat failed on bitmap file `%s': %s" -msgstr "ÓÂÏÊ stat ÄÌÑ ÆÁÊÌÁ ÂÉÔÏ×ÏÇÏ ÏÂÒÁÚÁ `%s': %s" +msgstr "сбой stat для файла битового образа `%s': %s" -#: resrc.c:675 +#: resrc.c:729 #, c-format msgid "cursor file `%s' does not contain cursor data" -msgstr "ÆÁÊÌ ËÕÒÓÏÒÁ `%s' ÎÅ ÓÏÄÅÒÖÉÔ ÄÁÎÎÙÈ ËÕÒÓÏÒÁ" +msgstr "файл курсора `%s' не содержит данных курсора" -#: resrc.c:707 resrc.c:1003 +#: resrc.c:761 resrc.c:1161 #, c-format msgid "%s: fseek to %lu failed: %s" -msgstr "%s: fseek ÄÌÑ %lu ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÄÁÞÅÊ: %s" +msgstr "%s: fseek для %lu завершился неудачей: %s" -#: resrc.c:831 +#: resrc.c:887 msgid "help ID requires DIALOGEX" -msgstr "ÄÌÑ ID ÓÐÒÁ×ËÉ ÔÒÅÂÕÅÔÓÑ DIALOGEX" +msgstr "для ID справки требуется DIALOGEX" -#: resrc.c:833 +#: resrc.c:889 msgid "control data requires DIALOGEX" -msgstr "ÄÌÑ ÕÐÒÁ×ÌÅÎÉÑ ÄÁÎÎÙÍÉ ÔÒÅÂÕÅÔÓÑ DIALOGEX" +msgstr "для управления данными требуется DIALOGEX" -#: resrc.c:861 +#: resrc.c:917 #, c-format msgid "stat failed on font file `%s': %s" -msgstr "ÓÂÏÊ stat ÄÌÑ ÆÁÊÌÁ ÛÒÉÆÔÁ `%s': %s" +msgstr "сбой stat для файла шрифта `%s': %s" -#: resrc.c:972 +#: resrc.c:1130 #, c-format msgid "icon file `%s' does not contain icon data" -msgstr "ÆÁÊÌ ÚÎÁÞËÁ `%s' ÎÅ ÓÏÄÅÒÖÉÔ ÄÁÎÎÙÈ ÚÎÁÞËÁ" +msgstr "файл значка `%s' не содержит данных значка" -#: resrc.c:1273 resrc.c:1308 +#: resrc.c:1675 resrc.c:1710 #, c-format msgid "stat failed on file `%s': %s" -msgstr "ÓÂÏÊ stat ÄÌÑ ÆÁÊÌÁ `%s': %s" +msgstr "сбой stat для файла `%s': %s" -#: resrc.c:1494 +#: resrc.c:1891 #, c-format msgid "can't open `%s' for output: %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ `%s' ÄÌÑ ×Ù×ÏÄÁ ÄÁÎÎÙÈ: %s" +msgstr "невозможно открыть `%s' для вывода данных: %s" -#: size.c:83 +#: size.c:84 #, c-format msgid " Displays the sizes of sections inside binary files\n" -msgstr " ïÔÏÂÒÁÖÁÅÔ ÒÁÚÍÅÒÙ ÒÁÚÄÅÌÏ× ×ÎÕÔÒÉ Ä×ÏÉÞÎÙÈ ÆÁÊÌÏ×\n" +msgstr " Отображает размеры разделов внутри двоичных файлов\n" -#: size.c:84 +#: size.c:85 #, c-format msgid " If no input file(s) are specified, a.out is assumed\n" -msgstr " åÓÌÉ ×ÈÏÄÎÙÅ ÆÁÊÌÙ ÎÅ ÕËÁÚÁÎÙ, ÐÏÄÒÁÚÕÍÅ×ÁÅÔÓÑ ÆÁÊÌ a.out\n" +msgstr " Если входные файлы не указаны, подразумевается файл a.out\n" -#: size.c:85 +#: size.c:86 #, c-format msgid "" " The options are:\n" @@ -5203,33 +5347,33 @@ msgid "" " -v --version Display the program's version\n" "\n" msgstr "" -" ïÐÃÉÉ:\n" -" -A|-B --format={sysv|berkeley} ÷ÙÂÏÒ ÓÔÉÌÑ ×Ù×ÏÄÁ ÄÁÎÎÙÈ (ÐÏ ÕÍÏÌÞÁÎÉÀ %s)\n" -" -o|-d|-x --radix={8|10|16} ÷Ù×ÏÄ ÞÉÓÅÌ × ×ÏÓØÍÅÒÉÞÎÏÍ, ÄÅÓÑÔÉÞÎÏÍ\n" -" ÉÌÉ ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÏÍ ÆÏÒÍÁÔÅ\n" -" -t --totals ÷Ù×ÏÄ ÓÕÍÍÁÒÎÙÈ ÒÁÚÍÅÒÏ× (ÔÏÌØËÏ Berkeley)\n" -" --target= õÓÔÁÎÏ×ËÁ ÆÏÒÍÁÔÁ Ä×ÏÉÞÎÏÇÏ ÆÁÊÌÁ\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ\n" +" Параметры:\n" +" -A|-B --format={sysv|berkeley} выбрать стиль вывода данных (по умолчанию %s)\n" +" -o|-d|-x --radix={8|10|16} показать числа в восьмеричном, десятичном\n" +" или шестнадцатиричном формате\n" +" -t --totals показать суммарные размеры (только Berkeley)\n" +" --target= установить формат двоичного файла\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" "\n" -#: size.c:158 +#: size.c:159 #, c-format msgid "invalid argument to --format: %s" -msgstr "ÎÅ×ÅÒÎÙÊ ÁÒÇÕÍÅÎÔ --format: %s" +msgstr "неверный аргумент --format: %s" -#: size.c:185 +#: size.c:186 #, c-format msgid "Invalid radix: %s\n" -msgstr "îÅ×ÅÒÎÙÊ radix: %s\n" +msgstr "Неверный radix: %s\n" -#: srconv.c:1722 +#: srconv.c:1724 #, c-format msgid "Convert a COFF object file into a SYSROFF object file\n" -msgstr "ðÒÅÏÂÒÁÚÏ×Ù×ÁÅÔ ÏÂßÅËÔÎÙÊ ÆÁÊÌ COFF × ÏÂßÅËÔÎÙÊ ÆÁÊÌ SYSROFF\n" +msgstr "Преобразовывает объектный файл COFF в объектный файл SYSROFF\n" -#: srconv.c:1723 +#: srconv.c:1725 #, c-format msgid "" " The options are:\n" @@ -5240,168 +5384,168 @@ msgid "" " -h --help Display this information\n" " -v --version Print the program's version number\n" msgstr "" -" ïÐÃÉÉ:\n" -" -q --quick (ÕÓÔÁÒÅÌÁ - ÉÇÎÏÒÉÒÕÅÔÓÑ)\n" -" -n --noprescan îÅ ×ÙÐÏÌÎÑÔØ ÓËÁÎÉÒÏ×ÁÎÉÅ ÄÌÑ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ commons × defs\n" -" -d --debug ÷Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ÔÏÍ, ÞÔÏ ×ÙÐÏÌÎÑÅÔÓÑ\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ÎÏÍÅÒÁ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ\n" +" Параметры:\n" +" -q --quick (устарел - игнорируется)\n" +" -n --noprescan не выполнять сканирование для преобразования commons в defs\n" +" -d --debug показать информацию о том, что выполняется\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" -#: srconv.c:1869 +#: srconv.c:1871 #, c-format msgid "unable to open output file %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ %s" +msgstr "невозможно открыть выходной файл %s" -#: stabs.c:330 stabs.c:1708 +#: stabs.c:328 stabs.c:1706 msgid "numeric overflow" -msgstr "ÞÉÓÌÏ×ÏÅ ÐÅÒÅÐÏÌÎÅÎÉÅ" +msgstr "числовое переполнение" -#: stabs.c:340 +#: stabs.c:338 #, c-format msgid "Bad stab: %s\n" -msgstr "ðÌÏÈÏÊ stab: %s\n" +msgstr "Плохой stab: %s\n" -#: stabs.c:348 +#: stabs.c:346 #, c-format msgid "Warning: %s: %s\n" -msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: %s: %s\n" +msgstr "Предупреждение: %s: %s\n" -#: stabs.c:458 +#: stabs.c:456 #, c-format msgid "N_LBRAC not within function\n" -msgstr "N_LBRAC ×ÎÅ ÆÕÎËÃÉÉ\n" +msgstr "N_LBRAC вне функции\n" -#: stabs.c:497 +#: stabs.c:495 #, c-format msgid "Too many N_RBRACs\n" -msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ N_RBRACs\n" +msgstr "Слишком много N_RBRACs\n" -#: stabs.c:738 +#: stabs.c:736 msgid "unknown C++ encoded name" -msgstr "ÎÅÉÚ×ÅÓÔÎÏÅ ËÏÄÉÒÏ×ÁÎÎÏÅ ÉÍÑ C++" +msgstr "неизвестное кодированное имя C++" #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabs.c:1253 +#: stabs.c:1251 msgid "unrecognized cross reference type" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ÔÉÐ ÐÅÒÅËÒÅÓÔÎÏÊ ÓÓÙÌËÉ" +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 "ÏÔÓÕÔÓÔ×ÕÅÔ ÉÎÄÅËÓÎÙÊ ÔÉÐ" +msgstr "отсутствует индексный тип" -#: stabs.c:2114 +#: stabs.c:2112 msgid "unknown virtual character for baseclass" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ×ÉÒÔÕÁÌØÎÙÊ ÓÉÍ×ÏÌ ÄÌÑ baseclass" +msgstr "неизвестный виртуальный символ для baseclass" -#: stabs.c:2132 +#: stabs.c:2130 msgid "unknown visibility character for baseclass" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ ×ÉÄÉÍÏÓÔÉ ÄÌÑ baseclass" +msgstr "неизвестный символ видимости для baseclass" -#: stabs.c:2318 +#: stabs.c:2316 msgid "unnamed $vb type" -msgstr "ÂÅÚÙÍÑÎÎÙÊ ÔÉÐ $vb" +msgstr "безымянный тип $vb" -#: stabs.c:2324 +#: stabs.c:2322 msgid "unrecognized C++ abbreviation" -msgstr "ÎÅÒÁÓÐÏÚÎÁÎÎÁÑ ÁÂÂÒÅ×ÉÁÔÕÒÁ C++" +msgstr "нераспознанная аббревиатура C++" -#: stabs.c:2400 +#: stabs.c:2398 msgid "unknown visibility character for field" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ ×ÉÄÉÍÏÓÔÉ ÄÌÑ field" +msgstr "неизвестный символ видимости для field" -#: stabs.c:2652 +#: stabs.c:2650 msgid "const/volatile indicator missing" -msgstr "ÏÔÓÕÔÓÔ×ÕÅÔ ÉÎÄÉËÁÔÏÒ ÐÏÓÔÏÑÎÎÏÊ/ÐÅÒÅÍÅÎÎÏÊ" +msgstr "отсутствует индикатор постоянной/переменной" -#: stabs.c:2888 +#: stabs.c:2886 #, c-format msgid "No mangling for \"%s\"\n" -msgstr "îÅÔ ËÏÄÉÒÏ×ÁÎÉÑ ÄÌÑ \"%s\"\n" +msgstr "Нет кодирования для \"%s\"\n" -#: stabs.c:3188 +#: stabs.c:3186 msgid "Undefined N_EXCL" -msgstr "îÅÏÐÒÅÄÅÌÅÎÎÙÊ N_EXCL" +msgstr "Неопределенный N_EXCL" -#: stabs.c:3268 +#: stabs.c:3266 #, c-format msgid "Type file number %d out of range\n" -msgstr "îÏÍÅÒ ÆÁÊÌÁ ÔÉÐÁ %d ÚÁ ÐÒÅÄÅÌÁÍÉ ÄÉÁÐÁÚÏÎÁ\n" +msgstr "Номер файла типа %d за пределами диапазона\n" -#: stabs.c:3273 +#: stabs.c:3271 #, c-format msgid "Type index number %d out of range\n" -msgstr "îÏÍÅÒ ÉÎÄÅËÓÁ ÔÉÐÁ %d ÚÁ ÐÒÅÄÅÌÁÍÉ ÄÉÁÐÁÚÏÎÁ\n" +msgstr "Номер индекса типа %d за пределами диапазона\n" -#: stabs.c:3352 +#: stabs.c:3350 #, c-format msgid "Unrecognized XCOFF type %d\n" -msgstr "îÅÒÁÓÐÏÚÎÁÎÎÙÊ ÔÉÐ XCOFF %d\n" +msgstr "Нераспознанный тип XCOFF %d\n" -#: stabs.c:3644 +#: stabs.c:3642 #, c-format msgid "bad mangled name `%s'\n" -msgstr "ÐÌÏÈÏÅ ÓËÏÒÒÅËÔÉÒÏ×ÁÎÎÏÅ ÉÍÑ `%s'\n" +msgstr "плохое скорректированное имя `%s'\n" -#: stabs.c:3739 +#: stabs.c:3737 #, c-format msgid "no argument types in mangled string\n" -msgstr "ÎÅÔ ÔÉÐÏ× ÁÒÇÕÍÅÎÔÏ× × ÓËÏÒÒÅËÔÉÒÏ×ÁÎÎÏÊ ÓÔÒÏËÅ\n" +msgstr "нет типов аргументов в скорректированной строке\n" -#: stabs.c:5093 +#: stabs.c:5091 #, c-format msgid "Demangled name is not a function\n" -msgstr "äÅËÏÄÉÒÏ×ÁÎÎÏÅ ÉÍÑ ÎÅ Ñ×ÌÑÅÔÓÑ ÆÕÎËÃÉÅÊ\n" +msgstr "Декодированное имя не является функцией\n" -#: stabs.c:5135 +#: stabs.c:5133 #, c-format msgid "Unexpected type in v3 arglist demangling\n" -msgstr "îÅÏÖÉÄÁÎÎÙÊ ÔÉÐ ÐÒÉ ÄÅËÏÄÉÒÏ×ÁÎÉÉ v3 arglist\n" +msgstr "Неожиданный тип при декодировании v3 arglist\n" -#: stabs.c:5202 +#: stabs.c:5200 #, c-format msgid "Unrecognized demangle component %d\n" -msgstr "îÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÏÍÐÏÎÅÎÔ ÄÅËÏÄÉÒÏ×ÁÎÉÑ %d\n" +msgstr "Нераспознанный компонент декодирования %d\n" -#: stabs.c:5254 +#: stabs.c:5252 #, c-format msgid "Failed to print demangled template\n" -msgstr "óÂÏÊ ×Ù×ÏÄÁ ÄÅËÏÄÉÒÏ×ÁÎÎÏÇÏ ÛÁÂÌÏÎÁ\n" +msgstr "Сбой вывода декодированного шаблона\n" -#: stabs.c:5334 +#: stabs.c:5332 #, c-format msgid "Couldn't get demangled builtin type\n" -msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÄÅËÏÄÉÒÏ×ÁÎÎÙÊ ×ÓÔÒÏÅÎÎÙÊ ÔÉÐ\n" +msgstr "Невозможно получить декодированный встроенный тип\n" -#: stabs.c:5383 +#: stabs.c:5381 #, c-format msgid "Unexpected demangled varargs\n" -msgstr "îÅÏÖÉÄÁÎÎÙÊ ÄÅËÏÄÉÒÏ×ÁÎÎÙÊ varargs\n" +msgstr "Неожиданный декодированный varargs\n" -#: stabs.c:5390 +#: stabs.c:5388 #, c-format msgid "Unrecognized demangled builtin type\n" -msgstr "îÅÏÖÉÄÁÎÎÙÊ ÄÅËÏÄÉÒÏ×ÁÎÎÙÊ ×ÓÔÒÏÅÎÎÙÊ ÔÉÐ\n" +msgstr "Неожиданный декодированный встроенный тип\n" -#: strings.c:218 +#: strings.c:215 #, c-format msgid "invalid number %s" -msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ %s" +msgstr "неверное число %s" -#: strings.c:700 +#: strings.c:697 #, c-format msgid "invalid integer argument %s" -msgstr "ÎÅ×ÅÒÎÙÊ ÃÅÌÏÞÉÓÌÅÎÎÙÊ ÁÒÇÕÍÅÎÔ %s" +msgstr "неверный целочисленный аргумент %s" -#: strings.c:709 +#: strings.c:706 #, c-format msgid " Display printable strings in [file(s)] (stdin by default)\n" -msgstr " ÷Ù×ÏÄÉÔ ÐÒÉÇÏÄÎÙÅ ÄÌÑ ÐÅÞÁÔÉ ÓÔÒÏËÉ × [ÆÁÊÌ(ÁÈ)] (ÐÏ ÕÍÏÌÞÁÎÉÀ stdin)\n" +msgstr " Выводит пригодные для печати строки в [файл(ах)] (по умолчанию stdin)\n" -#: strings.c:710 +#: strings.c:707 #, c-format msgid "" " The options are:\n" @@ -5418,103 +5562,191 @@ msgid "" " -h --help Display this information\n" " -v --version Print the program's version number\n" msgstr "" -" ïÐÃÉÉ:\n" -" -a - --all óËÁÎÉÒÏ×ÁÎÉÅ ×ÓÅÇÏ ÆÁÊÌÁ, Á ÎÅ ÔÏÌØËÏ ÒÁÚÄÅÌÁ ÄÁÎÎÙÈ\n" -" -f --print-file-name ÷Ù×ÏÄ ÉÍÅÎÉ ÆÁÊÌÁ ÐÅÒÅÄ ËÁÖÄÏÊ ÓÔÒÏËÏÊ\n" -" -n --bytes=[ÞÉÓÌÏ] ïÂÎÁÒÕÖÅÎÉÅ É ×Ù×ÏÄ ÌÀÂÙÈ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÅÊ Ó ÚÁ×ÅÒÛÁÀÝÉÍ\n" -" -<ÞÉÓÌÏ> ÎÕÌÅÍ ÄÌÉÎÏÊ × [ÞÉÓÌÏ] ÓÉÍ×ÏÌÏ× (ÐÏ ÕÍÏÌÞÁÎÉÀ 4).\n" -" -t --radix={o,x,d} ÷Ù×ÏÄ ÍÅÓÔÏÐÏÌÏÖÅÎÉÑ ÓÔÒÏËÉ ÐÏ ÏÓÎÏ×ÁÎÉÀ 8, 10 ÉÌÉ 16\n" -" -o áÌÉÁÓ ÄÌÑ --radix=o\n" -" -T --target= õËÁÚÁÎÉÅ ÆÏÒÍÁÔÁ Ä×ÏÉÞÎÏÇÏ ÆÁÊÌÁ\n" -" -e --encoding={s,S,b,l,B,L} ÷ÙÂÏÒ ÒÁÚÍÅÒÁ ÓÉÍ×ÏÌÁ É endianness:\n" -" s = 7-ÂÉÔ, S = 8-ÂÉÔ, {b,l} = 16-ÂÉÔ, {B,L} = 32-ÂÉÔ\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ÎÏÍÅÒÁ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ\n" - -#: sysdump.c:642 +" Параметры:\n" +" -a - --all сканировать весь файл, а не только раздел данных\n" +" -f --print-file-name показывать имя файла перед каждой строкой\n" +" -n --bytes=[число] искать и показывать любые последовательности с завершающим\n" +" -<число> нулем длиной в [число] символов (по умолчанию 4).\n" +" -t --radix={o,x,d} показать местоположения строки по основанию 8, 10 или 16\n" +" -o алиас для --radix=o\n" +" -T --target= указать формат двоичного файла\n" +" -e --encoding={s,S,b,l,B,L} выбрать размер символа и endianness:\n" +" s = 7-бит, S = 8-бит, {b,l} = 16-бит, {B,L} = 32-бит\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" + +#: sysdump.c:641 #, c-format msgid "Print a human readable interpretation of a SYSROFF object file\n" -msgstr "÷Ù×ÏÄ ÕÄÏÂÏÞÉÔÁÅÍÏÊ ÄÌÑ ÞÅÌÏ×ÅËÁ ÉÎÔÅÒÐÒÅÔÁÃÉÉ ÏÂßÅËÔÎÏÇÏ ÆÁÊÌÁ SYSROFF\n" +msgstr "Вывод удобочитаемой для человека интерпретации объектного файла SYSROFF\n" -#: sysdump.c:643 +#: sysdump.c:642 #, c-format msgid "" " The options are:\n" " -h --help Display this information\n" " -v --version Print the program's version number\n" msgstr "" -" ïÐÃÉÉ:\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÊ ÉÎÆÏÒÍÁÃÉÉ\n" -" -v --version ÷Ù×ÏÄ ÎÏÍÅÒÁ ×ÅÒÓÉÉ ÐÒÏÇÒÁÍÍÙ\n" +" Параметры:\n" +" -h --help показать эту информацию\n" +" -v --version показать версию программы\n" -#: sysdump.c:710 +#: sysdump.c:709 #, c-format msgid "cannot open input file %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ %s" +msgstr "невозможно открыть входной файл %s" -#: version.c:35 +#: version.c:34 #, c-format -msgid "Copyright 2005 Free Software Foundation, Inc.\n" -msgstr "Copyright 2005 Free Software Foundation, Inc.\n" +msgid "Copyright 2007 Free Software Foundation, Inc.\n" +msgstr "Copyright 2007 Free Software Foundation, Inc.\n" -#: 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 "" -"üÔÁ ÐÒÏÇÒÁÍÍÁ Ñ×ÌÑÅÔÓÑ ÏÔËÒÙÔÙÍ ÐÒÏÇÒÁÍÍÎÙÍ ÏÂÅÓÐÅÞÅÎÉÅÍ; ×Ù ÍÏÖÅÔÅ\n" -"ÒÁÓÐÒÏÓÔÒÁÎÑÔØ ÅÅ ÄÁÌÅÅ ÓÏÇÌÁÓÎÏ ÕÓÌÏ×ÉÑÍÉ GNU General Public License.\n" -"üÔÁ ÐÒÏÇÒÁÍÍÁ ÎÅ ÉÍÅÅÔ ÁÂÓÏÌÀÔÎÏ ÎÉËÁËÉÈ ÇÁÒÁÎÔÉÊ.\n" +"Эта программа является открытым программным обеспечением; вы можете\n" +"распространять ее далее согласно условиями GNU General Public License.\n" +"Эта программа не имеет абсолютно никаких гарантий.\n" -#: windres.c:204 +#: windmc.c:194 #, c-format -msgid "can't open %s `%s': %s" -msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s `%s': %s " +msgid "can't create %s file ,%s' for output.\n" +msgstr "не удаётся создать %s файл '%s' для вывода данных.\n" -#: windres.c:370 +#: windmc.c:202 #, c-format -msgid ": expected to be a directory\n" -msgstr ": ÏÖÉÄÁÌÏÓØ, ÞÔÏ ÜÔÏ ËÁÔÁÌÏÇ\n" +msgid "Usage: %s [option(s)] [input-file]\n" +msgstr "Использование: %s [опции] [входной_файл\n" -#: windres.c:382 +#: windmc.c:204 #, c-format -msgid ": expected to be a leaf\n" -msgstr ": ÏÖÉÄÁÌÏÓØ, ÞÔÏ ÜÔÏ 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= Set codepage when reading mc text file\n" +" -d --decimal_values Print values to text files decimal\n" +" -e --extension= Set header extension used on export header file\n" +" -F --target Specify output target for endianess.\n" +" -h --headerdir= 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= 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= Set codepage used for writing text file\n" +" -r --rcdir= Set the export directory for rc files\n" +" -x --xdbg= Where to create the .dbg C include file\n" +" that maps message ID's to their symbolic name.\n" +msgstr "" +" Опции:\n" +" -a --ascii_in читать входной файл как файл ASCII\n" +" -A --ascii_out записывать двоичные сообщения в формате ASCII\n" +" -b --binprefix для уникальности перед именем bin-файла добавляется имя mc-файла.\n" +" -c --customflag устанавить пользовательские флаги для сообщений\n" +" -C --codepage_in=<знач> установить кодировку при чтении текстового mc-файла\n" +" -d --decimal_values вывести значения в текстовый файл в десятичном виде\n" +" -e --extension=<расширение> установить расширение для заголовка, используемое в файле экспорта заголовка\n" +" -F --target <цель> указать выходную цель для endianess.\n" +" -h --headerdir=<каталог> установить каталог для экспорта заголовков\n" +" -u --unicode_in читать входной файл как файл UTF16\n" +" -U --unicode_out записывать двоичные сообщения в формате UFT16\n" +" -m --maxlength=<знач> установить максимально допустимую длину сообщения\n" +" -n --nullterminate автоматически добавлять в строки нулевые окончания\n" +" -o --hresult_use использовать определение HRESULT вместо определения кода статуса\n" +" -O --codepage_out=<знач> установить кодировку, используемую для записи текстового файла\n" +" -r --rcdir=<каталог> установить каталог для экспорта rc-файлов\n" +" -x --xdbg=<каталог> где создавать включаемый файл .dbg,\n" +" определяющий связь между идентификаторами сообщений\n" +" и их символьными именами.\n" + +#: 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 "" +" -H --help показать это справочное сообщение\n" +" -v --verbose подробный режим\n" +" -V --version показать информацию о версии\n" -#: windres.c:391 +#: windmc.c:287 windres.c:415 #, c-format msgid "%s: warning: " -msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: " +msgstr "%s: предупреждение: " + +#: windmc.c:288 +#, c-format +msgid "A codepage was specified switch ,%s' and UTF16.\n" +msgstr "Для кодировки был указан ключ '%s' и UTF16.\n" + +#: windmc.c:289 +#, c-format +msgid "\tcodepage settings are ignored.\n" +msgstr "\tнастройки кодировки проигнорированы.\n" + +#: 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 "невозможно открыть выходной файл '%s' для ввода.\n" + +#: windmc.c:1161 +msgid "input file does not seems to be UFT16.\n" +msgstr "входной файл не в кодировке UFT16.\n" + +#: windres.c:220 +#, c-format +msgid "can't open %s `%s': %s" +msgstr "невозможно открыть %s `%s': %s" + +#: windres.c:394 +#, c-format +msgid ": expected to be a directory\n" +msgstr ": ожидалось, что это каталог\n" + +#: windres.c:406 +#, c-format +msgid ": expected to be a leaf\n" +msgstr ": ожидалось, что это leaf\n" -#: windres.c:393 +#: windres.c:417 #, c-format msgid ": duplicate value\n" -msgstr ": ÐÏ×ÔÏÒÑÀÝÅÅÓÑ ÚÎÁÞÅÎÉÅ\n" +msgstr ": повторяющееся значение\n" -#: windres.c:543 +#: windres.c:567 #, c-format msgid "unknown format type `%s'" -msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÔÉÐ ÆÏÒÍÁÔÁ `%s'" +msgstr "неизвестный тип формата `%s'" -#: windres.c:544 +#: windres.c:568 #, c-format msgid "%s: supported formats:" -msgstr "%s: ÐÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÆÏÒÍÁÔÙ:" +msgstr "%s: поддерживаемые форматы:" #. 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 "ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÔÉÐ ÆÁÊÌÁ `%s'; ÉÓÐÏÌØÚÕÊÔÅ ÏÐÃÉÀ -J" +msgstr "невозможно определить тип файла `%s'; используйте опцию -J" -#: windres.c:639 +#: windres.c:663 #, c-format msgid "Usage: %s [option(s)] [input-file] [output-file]\n" -msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] [×ÈÏÄÎÏÊ_ÆÁÊÌ] [×ÙÈÏÄÎÏÊ_ÆÁÊÌ]\n" +msgstr "Использование: %s [опции] [входной_файл] [выходной_файл]\n" -#: windres.c:641 +#: windres.c:665 #, c-format msgid "" " The options are:\n" @@ -5528,33 +5760,35 @@ msgid "" " -D --define [=] Define SYM when preprocessing rc file\n" " -U --undefine Undefine SYM when preprocessing rc file\n" " -v --verbose Verbose - tells you what it's doing\n" +" -c --codepage= Specify default codepage\n" " -l --language= Set language when reading rc file\n" " --use-temp-file Use a temporary file instead of popen to read\n" " the preprocessor output\n" " --no-use-temp-file Use popen (default)\n" msgstr "" -" ïÐÃÉÉ:\n" -" -i --input=<ÆÁÊÌ> éÍÑ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ\n" -" -o --output=<ÆÁÊÌ> éÍÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ\n" -" -J --input-format=<ÆÏÒÍÁÔ> õËÁÚÁÎÉÅ ×ÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ\n" -" -O --output-format=<ÆÏÒÍÁÔ> õËÁÚÁÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ\n" -" -F --target=<ÃÅÌØ> õËÁÚÁÎÉÅ ÃÅÌÉ COFF\n" -" --preprocessor=<ÐÒÏÇÒÁÍÍÁ> ðÒÏÇÒÁÍÍÁ ÄÌÑ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏÊ ÏÂÒÁÂÏÔËÉ ÆÁÊÌÁ rc\n" -" -I --include-dir=<ËÁÔÁÌÏÇ> ÷ËÌÀÞÁÅÍÙÊ ËÁÔÁÌÏÇ ÐÒÉ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏÊ ÏÂÒÁÂÏÔËÅ ÆÁÊÌÁ rc\n" -" -D --define [=<ÚÎÁÞ>] ïÐÒÅÄÅÌÅÎÉÅ SYM ÐÒÉ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏÊ ÏÂÒÁÂÏÔËÅ ÆÁÊÌÁ rc\n" -" -U --undefine ïÔÍÅÎÁ ÏÐÒÅÄÅÌÅÎÉÑ SYM ÐÒÉ ÐÒÅÄ×ÁÒÉÔÅÌØÎÏÊ ÏÂÒÁÂÏÔËÅ ÆÁÊÌÁ rc\n" -" -v --verbose ðÏÄÒÏÂÎÏ - ÓÏÏÂÝÁÅÔ ×ÁÍ Ï ×ÓÅÈ Ó×ÏÉÈ ÄÅÊÓÔ×ÉÑÈ\n" -" -l --language=<ÚÎÁÞ> õÓÔÁÎÏ×ËÁ ÑÚÙËÁ ÐÒÉ ÞÔÅÎÉÉ ÆÁÊÌÁ rc\n" -" --use-temp-file éÓÐÏÌØÚÏ×ÁÎÉÅ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ ×ÍÅÓÔÏ popen\n" -" ÄÌÑ ÞÔÅÎÉÑ ×ÙÈÏÄÎÙÈ ÄÁÎÎÙÈ ÐÒÅÐÒÏÃÅÓÓÏÒÁ\n" -" --no-use-temp-file éÓÐÏÌØÚÏ×ÁÎÉÅ popen (ÐÏ ÕÍÏÌÞÁÎÉÀ)\n" - -#: windres.c:657 +" Параметры:\n" +" -i --input=<файл> имя входного файла\n" +" -o --output=<файл> имя выходного файла\n" +" -J --input-format=<формат> указать входной формат\n" +" -O --output-format=<формат> указать выходной формат\n" +" -F --target=<цель> указать цель COFF\n" +" --preprocessor=<прогр> программа для предварительной обработки rc-файла\n" +" -I --include-dir=<кат> включать каталог при предварительной обработке rc-файла\n" +" -D --define [=<знач>] определить SYM предварительной обработке rc-файла\n" +" -U --undefine отменить определение SYM при предварительной обработке rc-файла\n" +" -v --verbose подробный режим\n" +" -c --codepage=<кодировка> указать кодировку по умолчанию\n" +" -l --language=<знач> установить язык для чтения rc-файла\n" +" --use-temp-file использовать временный файл вместо использования popen\n" +" для чтения выходных данных препроцессора\n" +" --no-use-temp-file использовать popen (по умолчанию)\n" + +#: windres.c:682 #, c-format msgid " --yydebug Turn on parser debugging\n" -msgstr " --yydebug ÷ËÌÀÞÅÎÉÅ ÏÔÌÁÄËÉ ÐÁÒÓÅÒÁ\n" +msgstr " --yydebug Включение отладки парсера\n" -#: windres.c:660 +#: windres.c:685 #, c-format msgid "" " -r Ignored for compatibility with rc\n" @@ -5562,51 +5796,96 @@ msgid "" " -h --help Print this help message\n" " -V --version Print version information\n" msgstr "" -" -r ðÒÏÐÕÝÅÎÁ ÄÌÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó rc\n" -" @<ÆÁÊÌ> þÉÔÁÔØ ÏÐÃÉÉ ÉÚ <ÆÁÊÌÁ>\n" -" -h --help ÷Ù×ÏÄ ÜÔÏÇÏ ÓÐÒÁ×ÏÞÎÏÇÏ ÓÏÏÂÝÅÎÉÑ\n" -" -V --version ÷Ù×ÏÄ ÉÎÆÏÒÍÁÃÉÉ Ï ×ÅÒÓÉÉ\n" +" -r игнорируется для совместимости с rc\n" +" @<файл> читать параметры из <файла>\n" +" -h --help показать эту справку\n" +" -V --version показать информацию о версии\n" -#: 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" "extension if not specified. A single file name is an input file.\n" "No input-file is stdin, default rc. No output-file is stdout, default rc.\n" msgstr "" -"FORMAT Ñ×ÌÑÅÔÓÑ ÏÄÎÉÍ ÉÚ rc, res ÉÌÉ coff, É ÏÐÒÅÄÅÌÑÅÔÓÑ ÐÏ ÒÁÓÛÉÒÅÎÉÀ\n" -"ÉÍÅÎÉ ÆÁÊÌÁ, ÅÓÌÉ ÎÅ ÂÙÌ ÕËÁÚÁÎ. ïÄÉÎÏÞÎÏÅ ÉÍÑ ÆÁÊÌÁ Ñ×ÌÑÅÔÓÑ ×ÈÏÄÎÙÍ ÆÁÊÌÏÍ.\n" -"âÅÚ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ ÉÓÐÏÌØÚÕÅÔ stdin, ÐÏ ÕÍÏÌÞÁÎÉÀ rc. âÅÚ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ\n" -"ÉÓÐÏÌØÚÕÅÔÓÑ stdout, ÐÏ ÕÍÏÌÞÁÎÉÀ rc.\n" +"FORMAT является одним из rc, res или coff и определяется по расширению\n" +"имени файла, если не был указан. Одиночное имя файла является входным файлом.\n" +"Без входного файла использует stdin, по умолчанию rc. Без выходного файла\n" +"используется std-out, по умолчанию rc.\n" + +# +#: windres.c:828 +msgid "invalid codepage specified.\n" +msgstr "указана недопустимая кодировка.\n" -#: windres.c:803 +#: windres.c:843 msgid "invalid option -f\n" -msgstr "ÎÅ×ÅÒÎÁÑ ÏÐÃÉÑ -f\n" +msgstr "неверная опция -f\n" -#: windres.c:808 +#: windres.c:848 msgid "No filename following the -fo option.\n" -msgstr "îÅÔ ÉÍÅÎÉ ÆÁÊÌÁ ÐÏÓÌÅ ÏÐÃÉÉ -fo.\n" +msgstr "Нет имени файла после опции -fo.\n" -#: windres.c:866 +#: windres.c:907 #, c-format msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" -msgstr "ïÐÃÉÑ -I ËÒÁÊÎÅ ÎÅ ÒÅËÏÍÅÎÄÕÅÔÓÑ ÄÌÑ ÕÓÔÁÎÏ×ËÉ ×ÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ, ÐÏÖÁÌÕÊÓÔÁ, ÉÓÐÏÌØÚÕÊÔÅ -J.\n" +msgstr "Опция -I крайне не рекомендуется для установки входного формата, пожалуйста, используйте -J.\n" -#: windres.c:984 +#: windres.c:1027 msgid "no resources" -msgstr "ÎÅÔ ÒÅÓÕÒÓÏ×" +msgstr "нет ресурсов" -#: wrstabs.c:354 wrstabs.c:1915 +#: wrstabs.c:353 wrstabs.c:1916 #, c-format msgid "string_hash_lookup failed: %s" -msgstr "string_hash_lookup ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÄÁÞÅÊ: %s" +msgstr "string_hash_lookup завершился неудачей: %s" -#: wrstabs.c:635 +#: wrstabs.c:636 #, c-format msgid "stab_int_type: bad size %u" -msgstr "stab_int_type: ÎÅ×ÅÒÎÙÊ ÒÁÚÍÅÒ %u" +msgstr "stab_int_type: неверный размер %u" -#: wrstabs.c:1393 +#: wrstabs.c:1394 #, c-format msgid "%s: warning: unknown size for field `%s' in struct" -msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÎÅÉÚ×ÅÓÔÎÙÊ ÒÁÚÍÅÒ ÐÏÌÑ `%s' × struct" +msgstr "%s: предупреждение: неизвестный размер поля `%s' в struct" + +#~ msgid "stat returns negative size for %s" +#~ msgstr "stat возвратил отрицательный размер для %s" + +#~ msgid "%s section needs a populated .debug_info section\n" +#~ msgstr "Разделу %s необходим заполненный раздел .debug_info\n" + +#~ msgid "%s section has more comp units than .debug_info section\n" +#~ msgstr "Раздел %s содержит больше элементов comp, чем раздел .debug_info\n" + +#~ msgid "" +#~ "assuming that the pointer size is %d, from the last comp unit in .debug_info\n" +#~ "\n" +#~ msgstr "" +#~ "подразумевается, что размер указателя - %d, от последнего элемента comp в .debug_info\n" +#~ "\n" + +#~ msgid " (Pointer size: %u)%s\n" +#~ msgstr " (Размер указателя: %u)%s\n" + +#~ msgid "Extend line ops need a valid pointer size, guessing at 4\n" +#~ msgstr "Для расширенных кодов операций нужен верный размер указателя; предполагается 4\n" + +#~ msgid "unsupported or unknown DW_CFA_%d\n" +#~ msgstr "неподдерживаемый или неизвестный DW_CFA_%d\n" + +#~ msgid "there are no sections to be copied!" +#~ msgstr "нет разделов для копирования!" + +#~ msgid "error: the input file '%s' is empty" +#~ msgstr "ошибка: входной файл '%s' пуст" + +#~ msgid "alternate machine code index must be positive" +#~ msgstr "индекс альтернативного кода машины должен быть положительным" + +#~ msgid "Out of memory" +#~ msgstr "Нехватка памяти" + +#~ msgid "can't read resource section" +#~ msgstr "невозможно прочитать раздел ресурсов" diff --git a/binutils/po/sk.gmo b/binutils/po/sk.gmo new file mode 100644 index 0000000000000000000000000000000000000000..df4639ac938b28ce2e25df4c6b230839978663c2 GIT binary patch literal 149635 zcmdp<2Y6h?`L9>T25b!2bW;yD!Zvu_ZH$p@%a$9sO9qTE_DWjG!je|(O11GO3s2!83gLv<`xjJXU- zpY>4sI}Iw_rEo`hD;x@+g#%zwjpb)MDE*eh(Qp|Y2~UMe*F8}A{s>C`fLe=hI+XiL zDEqUa^mi|mKAwikU*BXbHU>_DN>>_AheyFm_!lVs>{J(vZ4CE<)8K446`lyo;9sH2 zZL@j{zX0x!`AjJJAHoT6&CL+~n!GAF4*Rp=9`I3b zUcbrWDS@iTEpT^uEL1*jf_uXEy?Jo6*)NCk_e-eqyU+9AQ0W<*vi5KQl$@Wyf$;ZG z{$GSj$EGc@*eo~`?hQ|dithy|_bm@0k8m!O`5Y+uPrya6SK9QlKb(yDG&l)930?VR z%)9`qo}2`w-#2Kr0>6jyKjbp&hsMASFz*MI&Sg;ke*)$I1}M2Nz+(70l)iVk-1@n(Q1Yfg z$=L_SVFerje+;GXbD_dr2Nlnsq3ZkFa1h+`3hSr$gmOQ?^Kdu>^M!CD_@K9c8U~oZ zfC@k0O41HX;Z%4&RQrAz?hLp4jrAX;a46<|;1Jm6`71aJ^Zjrk?01#rqZ%qbCqw1` zMi{{7;WqFq@4orfRxidw>3=rd3D(1&@EC7C0ZQK0a4dWbDjhwqG5y4$!j(hS?^@U& zo()y+egjn>?|_Qu32*)gs+@XVYkJ)oj>0_G^9ax1LdE+U90#|#&f3d7cp&DJ;NI{( zsC4adz3F#3+!gatQ2M(H4u(&A_iy2Dn0NlI#XrZh9V$P+hLU$L90A|=<{fS@xijE! z?3-X;cplU^awS|S|8NPMOyiMWehK675vX$c8V-Xy-(>lo2d7{@5~?5h6O{be&6fTV za6HB(Q1VZP+rwAkDEK|pxI5|=i)R5Gi}^=z9J~?EhHrcKF~75ZGy(f#e>z+rUIw>> z*TBu;J#Yei7AoESZnb`7Jlq8H45)Y)!wq07>8qQ4#2zz z+!QW^Jz)YWy>&2vN5P%prBLa=AF6#m36;N3q4Klc8`fS&!7-Q*fGW3Nz>VRbq0;db zR5^SIRd0Lz)5gJ_q1^X`#jw)b9}1^nJ{4{cpM(S9M{pwC{7q}G^PtjsB2>G*4k{ln z!cp)WI0X)W%j#VUDxPzo`kA|+((^V{J>2kZE6)K?^?V$ZzN(@0yap;gzkn*ItKfF< zF1QQ)I~)v)-m&}*g=(*5Q01@yD!&bIC_D;E-nFnVe8`)hgDTI@Jo~=O*o}D*RJx9V zDvz7sGWZl!yBqtS>A4n4|EpmsJQ|LM_rN~z-*7ir^uE=zVNiNl0F|B;>#TpDqVYd z&W4h^pEuXRO)3kIo+qHfe*~3|@4S1zkF9>hq0%+mvk}VwNl^9Ze7Fz1 z0V-YJLDka%pV+uJ8LEEOL8bqAsQ7;kmCrvx)zjx;Klmw}4tsuT`Q96Dh$6O2h!jqx$b3Ro2 zzZ-4^-+}#M(O2egb2t=p0Jng9L-|_ zrDqjXxnB%bf8T=Z!_VPl_#IpiPWsm3oeH{J%%)A?%hj}5K1TTaN{}L>RA42JM?Dv-5eWCi_qoBfF1697?K&4}|SdlB2Vz>k5 za?fh`0Olj1^f$Yx$jLnjs=gixCFgV~_us&Y@J=`keg(_m;2uRT-wm)5^HFd|_&gj7 zzkn*YID@|QF&V0y_JPt@HB|l&htkKzFn|w2mBTww?R~4BMXtW>31x183U`7x{}w9V zr(gg-_1vPD`5Onf$Nm5)f2%#ugv#H|Q1$6AQ2zb}m&5++7sVF9G*tV#2lj?fL6zr= zaBKJllz#hdP~__SaH#yugc={3q4fDn&+DM_cOO(e{}}d!12!yj^>Rlz9&;5``#BY= z9$W>b&)>tv@DVr;4(e_CTmq%{R?jP8DdrcU(z|^h%l~*d7xQAM`h5vhx!wTP9$tcD z;Kmyj#iqbAI2rx~?g{UP8^CX%($%xC$=w2~T*r9xJSe$MQ1Z@!lJh8(zBk#}@;?Ep zzAlH-QwB<}KZmL>7kTroQ2O|*w|^T-PHdAR*Issm(rW`81kZqydmB`}ei)8~FGI=i zzp3eOsOK`c2li(`g?|KUoc|cAo_qsUUj6%--u8qVUuHq2s~IZ3W1#BUIZ*k%4NCuC zLg{Do{zdM&WH?lL)x#0+JgE2|hSFEh&5GRf!34M(b1S?Dz6TZ0^_yF}x(BKpAA{;2 zUW95Vu`Mj$gP_V`54absg`?qxQ2ob~a1s0lsvghZ(%L~2R6dS_((9E_?e1x~6Z{G) z{I*+JeV+zZ9}k9dzYr??UEcf>R6f6lYEL7!w)mz%mE%EB`Z*S=9$W%dPPakTgU6xD z;Vrlw{MK{8HWuGF&&5#X*9Mi|UqZ?GBUHP52CCe?g#jEi!1PuQ>oM0s*+1&}AyoeR zZEJE%pvK?jQ29F*D*eBO>OWq9swZE-jbN~ymCrCJeeDI+zH6b%<6J0xJqsto&!OTQ zy}jw_AgJ`Fpz6mNQ2ojyQ2xGvlDEqaMQ%Nz3J%A78B~AqG*mr%6UzVgJDOf*L8Y$= zN} z`8^M%kI!HLcML2alcD6Vf|7qMRJmOMCGXEr?dc8g{ymhwx7ykKPlEEd7%IM2sCsi2 zl%B7KiuYlt`tcc*ezzTH^>+%C|5Z@+=y-3w4l3Szq0%-Tf`sH__+WCNDE1w~7W6Wcq+Ep2p z+(V$^y97!v_j$e#XG1&B20p)KMRC!zs<^CX4 z{eK^--fca^>}Npf`(UX0dK^^xZ-&y}y-@Y-IjC}e7b-tJhFZPr2c_?wVQ;t>RJlxt zs?P_&P2ox2{sM2l2}qDHx7ns zC-b1vT?bW9J755hhtm7i-u+Ri{JsJ=fFD8S`wOUWeTSL*j<7H0IF$QDsP;Dx%HI<2 zz7i_k?cRJUl-@6Z%I||v`gsc~ecwXqwO`!o`(UX0umDPb?NIr>2C9BN2qph>7{LC+ ztv?$LWu6a}pB5USKfy!Z5+3Du4k zLzU}6p3PA4{Rm3#DNy;k3@SZ$K;{2osPw$+?TbcQxPDOeb`Vs1pAQv(D^z(N303}Q z!wPsKRDZC+C`(@)%HLj|6;Sc7gete6K*>7^DxPy;Pk2An{Oe)Z3-%dp>Ffuk{}E9A zYb})C+Mw#|;ZWsqE_Ce+DqrtI>1Dk!mXFP$#+wOH{lsFZbQ}n!*A-BDTLl&V=idDS zsCs%8RQeu)<#401mY)Ss@htV`CMZ203N_F9Ih4GMJ#Y1V6so*mhsxK#y?KLi7JdL! ze=`KmfXkuuez|wQ8!Fz%q4NC-RQ`I6xAYE#vM-0y`wA$1wL#_cG^l!ZnK$1BRWF|O z`~<3f_20w%7encN0+hTdunf+HO5aIPjd2Tkz z>cvQ?b~@LaGf?49hSK--Q2KlVs@y+@inrHf(^uScGE_gf5UL!Ty!li(1@pB~_5DMr zeDs=P^`$>l{&w`{J)qpnq4cx>N}tQ2+WTQp_3U~mJ>B8?gy)-{-#}MS%S<1|Q0DPa z{o~%yl_!+m4uiws#V~-6LAiefXTxo#+PGH@m5%e^X!tlRg*~TPx~9Stis&Dqf~S1p9vrJ9{ zoPzl$Q1_(P!dc`=*>--8Ob``*?M)I+ta3!&2W1XO)~5xV*V zRqnm^v3_A&sPdQwmCkl3yTD!$v{1o#P*UUr{fi;CR(TM|yed=*r=yazXi zdsY;=^~jm92J^3=#)%%4#+~5$m`kAA;WVgns(|X}PJ+_Iop2%i*qf&Zd<-YUt@bzn`$Dyk(>(9= zd>1PG)=Mm&3OF6}=}_(HZ&2;_8>s$m;sMqVEP>-O9|;%3-@yam##N@*6;SE?4LlIO z36-Am1Fe1?1*Oj`pz_sssg=`oD0wG9)r(i5%5{f>irl_&15~+P1Lgi9RK477nT1~h z)ow0?sxR+ArK^0o#eV@*dR~IkM@houtbmH=66o5GXRm52kL}rSZpwtkK2X*!ggTB!NLp>SJxB2>M<0;=Em1C+eiq4fKWci*no{EvXD=X*oduLGgt zZG`H_PJo*4UE+BqRC~J)YP@?M-UoXosUJl;*HsidW*g@1b)=Vy+j2xv>=OiBcXSbJ zjPy6h7sXcM|Hr2m#ftF%K9qhxJk9!%9Z$FCqnS|YUFg{Y74Jz<_4hV71bz(Fj0r`o#gp@sC>N%RZsh!WBtnkFpl}RQ0aIH7Q-IrT00y9rSH9=(%S%4 zFHVF3yZ|cPU9cy74XQtQ3rf!V=UKXkL5(lVq4aYK)I9BSI0OC(sy=RbzV&YblwM1r z-=n?x7AQTv2$kNVi>*HH0jFV} z0W0Bg(Df5g;Y%(t{WU?Q^CGBv`WLAB{u$J`5&yN-=R=|7-vL#wpF-t(=SxlQa;WmW z18RQscPM|GUS{!?Lg}j+N`F_vMetRqc*kAt%MogvKLyf!W0ygd-!)L>dmmK){Q{Ie z23%qJE%RIe1MHVUg+CH*2#;1;cXDpPSmP3sjXL~*d_r|>bRW@EMgd1W01(g2Ifs*%ExF7r{oB}6ZZS~;@D0$aH z>ER7{5c~@EhD)xoe!s@^5~y-|4QkvQd99_t5$=rwZidQl>}D(H=}`S_GgN&$8m{WW zI0_fSKDRP%tVh3mdr|D#Ui9mC(5_M7e)m{9E_$da_BQUZhiPB*r|&#Qe*#B6UKBfo z@cTbe6uScFzdU8-mU-IpdpuM*Uj#MoJPf6m*fZwd7jBPnAXL65!xC5tMuGxPlM{`u7Q$!2b90N zq0;{ksD5+9=PX_0;0VlRQ1#&usQ%?jZ+{=0g84J3@)`fUr7I29-y8+y|1zk2-3NNbR5~w&nx{Mh)gCwgyVcLVpyqEs zgKCe@LA9&?|FCqvHa-o9>bIss^#je`d?Fl+`8IF< z07~E6zGUIXLY4b0sBlTBc6}67KY2A&{7*pT|23$5ulKUmuN`4C=J9X{ycEjcqi`|& z08WSHub8~!pz6i-Q0???D7|g`sy$yVgnME>5UO836Yc`<@_Yl*9AbT5vv@X#(#se) z5YC4IOv6#|G^qK~eNg#%4yqn~2bHg(uUmbe2>W8557j>$=Cay$*HT%LrA z_hYE`yzv_*e;25FwKr5g8=>_5BdGdtHdMI#pu)WZ`@k=t^tRqVE&YR_^jr=%fy+Fb zq1wmc-h3idKF))xKi5Fjvv;B58}O#(X9koW4uncy3I^~LD1F@E`46c0Hhjy{w>6xH zc{o)2I2=l^zlLge&p_3?_20JoGa5?%La6*?U;s~pnn&FP=fDS`^t$CcR-QXU)t}v< z+Fb<<;A$v&XM6MQQ1$f%sQU2*EQ15zwRThsRet9~<@ZJ?{ruURpM`2~@4(@3(0gWH z1T_vF4@bklK*{+Q25|HDEk9$S>RBb61y@6r<6WN5dVb*9>jSIb+e6jk- zNL-2%Re!F9(% zpVQ!c_yAOSZ1b7b`=PJ`^H{hZJQgZ_CqVT_S3v3aeyH)|MX2y^LDjD>q0%+r-!`sI zfvWedo)^JIm>-2x;m)6%UTUHGrB*2aw?ozEH{nRQ^%q64S~v?TJ=Z{`=Rqj=(Xp~@lgmFcqssvcbmW&eAq{5%O2|2uFT9Qn1)m+PS9UIP!5Kd5>$@*5kE z7ekHDr$V*U%c11n0@cqv3RNy|LA8&5-}>EkOHzyaSICqlLJDyaIDg6hZ4h1KvDsPY&P>*4%0Le;+`p(}T& z_^yBo{}5C;e-2fTwl3=7`ky&a>HLxBg>VndcSE)7uiyr7XpbJTDR2~&p3_izx&kVl zcYE_Q@F2_|LFsA!dOch}a{|pvwC@sP;c( z!yc}l)p;HcRi39q$-4on{2qhS?*~xrev{s&-@#DnTmn_!&xfifk3!YwPoe5@?>?sY z0IIz9hw6`xg5~f|sQ$L+Mi#ylZiu-Ws$Q&w8n1o^CGRGv{^TL3`tWZkeQwsbhpTtH zLiHnaq1wUuQ0ch=PJs`=F|hZ>JzP5~g_2(b)hFSZ-k2XZ*VmH5USn{>}Ps904l!Y;ePNoD1G;;vcCaCF-*obi58#5Bm-<`-M>DcMMd0JrAlKJ^)qEx7yaqbtasI`A}E|Z-YwTmfKmqmR1Yqv8zlThh83abA60ZQ&aq1x+KJDMK%f-0}WU;s~tYNt0tmHS6f^<=Z1O#V2i z`dta-ehiepu7r~RG*o%_3ang4L-mtOq0)aAl>fWnLiiq3J}2#L{+B@YKSx2O^Aae1 zJpdE%Rk$H6A87s1To_R0`Gq9R;P2yWv#$9@Ka_VwWCn zU1AbcKQSGu|LB1I;Ym>S>mn$*w?fJL1S(%6i>+QS@jMo)9{difzP<;g*I~Pwzj~;8 zdnS~;KY8=l-hJ1>rsu^__3v0H|F?Pb>u@~gEr(b+%z?^Rv*+2cALhHE()}bi@!nD%P*kHv+r)!zf6FtcLzbG`%I{Q z<9?|2`kLo@yIVUP1eNZ6pxS4f=T%VU`3h9JdJZ!=yF%$p}q4cu|s+}GT)jzNH?x#cbTNgv6=W!^#ehL+?&v27B z5UL%NK=m_?Q2os5Q1YIK($Bx4^fG*e_2+v-_0P>v_33n|^xgs0FFgiT9) zIeMhoPlPIu#nAQBQ00F#RQ*2Fn=ggR-z`w>=pHD&Jq)FXm!RT(A1YtpL+NSjQ6^^; zRJlxn%1@2AKN3nGCqcEp%b?oFQ&93Z8*SxZ45h#6uo~7wmE&Ka;`NjtJs&}74mDkX5 z)*mi}O83D~_49D3`g=K4`1_&ac@#>Y&q0;X8&KsC8*lAs3#jMTouI~zX>b<&2~@a; zpz`w^RD5qk>H8Zf{cg2~wbwCF@++arH|5R8dtL_BZ~h5N-pg<=_%WOd;}cBIVNiNL z&+{gz_VloK{~W6RZnLMA%PgpLwL!I`W1;HfWl-t+y*EDxRe#@y%J1eAExmg{`CkN8 zPW4dvPQg)d4OBX>g?qwx;7qv7UZ(FxsDAVWSO)(D$HVnXto$cJ)t4rydGzT}?euR@ z`s!V3+y$!qCPV3I8C1Rc5mf#!gsKM*!I7|NlJ#q&q4ISQRKAXasz+BqmBXD-?coKe z{Co!$|H#Qc9;p8FM^Ns+gNo;EDE;j;#p+iHRC}z0D!&xm6dnnc-jkv7bDekp3sgE@ zfXde=Q022(ndx^VRQOUT{mg}`->p#N>UnTW_$R1*JquMYzJ{uQn@_cT#i8O~097wi zQ2o;d-u(e6{k#hmPycCF-V>nufw|s%nCHn*dcPDZ-2G7Lejln`Y*cRftc04Eq@dc< zu~6}z2i5-WgBqtEhUyodh4TMTsQU3eRQ|_Lw|vcj($_&y`EG;C=kZYW^HLbV+o9_F z3veU&0aST@1(lznGpzjfgUauTQ0_Oue+k?a zyKCXGxa)U3W~KWw?7rjvH_n#%CH{wCr{DhA-wu2AWPKd_L71iECvpEL=40U**s1^9 zfcw7K75?U8w>jbU+Ydh_+|TBI8R3rRTAyo*ckk)>H2$bYvE}elFS8GBH{katggqN3 z;g8^}xIe(P1K02H&u|)B2=!Y8HKtt5bshH|xIHWfeuofNzdv~Dei803V*UlJ;Cfk> z{--)R-ly+6+@8mLAbu;6tNoS$bARk>;j>V`BHZrf{#Ur~$^EaeyBCJPzj8Al^QqqA zDerbVVcx>-EW%xl-IkFs@;VChA92%fCY(!rI+ZhfDQbG$p&?st?oXS{iD zPhmK24{#Ne*E=wO=KbEteafd}5_V5;y?}g;Df+F(e5ZH61@m28O_=Y({vrIGgIT|w zF_&Wh2>dy`2e%(#-^le_?vKFkudpxF?^^B;!>@h^aIZ1pByVO3HFhd?$6!9)`|n4( zuf@-4*e%2EQtpfK6aIF@eJ9)&Vwb>ueazwS58Pai{Xe{{(7qkJ6k*En%d|OmE)JVQ z{pz?U33Ag(s-_JEgh={Mh}5?78Y^+*tguM!0gWulRX-v5tK1-Ni!szd1FK-@Ue!~4?uHC%d9r)h> z`yaz*AFdR)o49WA=C`H3;qj3xB^N{2#ftLe{Q?`yC!wDrY^8XIjktp?-H7 z+?+tS*CK0Qc)oYPB_jJ!!rg=0aa_-FE#guiuiugQ`&@n_{$>A-PqXePc$vq*cV)rv zKJG7pM-c9}-0zS7C%Iqk{hk81#(gw)%eiW}-wXZ}`*XY>tYUr1XY|J~9Gi;2+3+2% z@3{|uCvty2m&T>uUdC~lZ{w=udJ(%Tx%MWUekWr$#>-zH`#G5R#@v(ppzC&G zx$d#6fWLqbVH_bVWc?1iQo`MX{Uok!v73h5-z>1;SPj(75m*W zKZ1EzcsLAy8aKya9_;OYO!y2JQ?FQn-N9UEaSg!V9>`jOeHr&pbIrwGzZba%Vt+BR zZ-j?pe*|p8{%6?fcbXyg1?JsxPr!fRX9T43?u~TfuSIeda>s{w%;=&q(?$!2MVst_NY-u`5T`yVz+y zqTl`4591om^%CYH-1U1IIfJ?X3-{MJ8~gLIzh8oX{dPds23!O2+h$g=I^1?4{HE9y z;}*v}m;0}{*Sz#kxaqeU{05!_&xVa~GJf=9s?Ynbv}GSpJNz2^L%3eT{!{!7L*^sg zKZn~s++WH)TV$~h@N+!Z`}o-zZsKKf8)GXc_BXB@xWeCqggY9;&7lQsjkqr*JX=Ju zvBa?v+%e)d3b*G8uV0mq=UeU*T<3A^jomx&SKiMS$oMmMCD;u|&Khrj9K4?EP27I% z?eOA$PkP>s{eAv^Pk3I$-$dl<#}rw|HnP9@nCIX&7Q5dddn>M9-t}zU9`t@MjfBYt z=4Jq4560h9T>33{e_11deF$?S^4^52F)xV77>fVN*ww;z{9MMR-x#htx!)bREAamf z_g7%|0(_9`YOWu1oxr8vHt=|4EaN%_^Bkz(`SPrd#5umQRE;`SoBW*Y9rZ_v5PI{vpB*gxiv~oxS_>*!_(ASGbbg_rq@!_y6R6FZ^zY-#IY+ zeU01oxP`xGFza^$EW!S9t{L8rZB+N$1{uxVS8?sZMHI1{xR!E#=>4+v;GVJm;X>da zev8K~yt}O5;Od24HP>|P50D`L+Z?&KbLqDc@kM{n;qPlMwxwg$gj<2*_gsf@f4i4) z5pHbvyWd9qJ;>YdiL8AvkHqZ~>=tvcXSw~o-#>A`kSqLEV}Ay6clPde+<(qBz{``r zd6;KlZsXd~+mFR=7IAGBN&6ePjrVdCZe#8jVOPcd?1;a;vEK;$LGXOszCc!rYcuXY z!v1;~{k@96KX5hUrswV6$adg}*bonTd>9xPQm}IPSN{ z{TG;D;cCOY3eMx2&2<5O9>(r5?uT$qCeB?k|AYH6T-$OV{Y}GeN94WDH4?vDnD=81&4(A(EX!nNYA z-|w;83_mT9rN`J^_&t#8b=+R}{%3H%lKbuOw;}f*dU+SXtGu6)a0|=_;2!>d&CMp{ z^QYbqTjTDT{8i)};XUmKhj3-Q%w2H%1?HnMUkB%NeafZZPrM)9AHw~i`28pM>k-Gc z+@I*(HzvM5n0LVKkKAv=HHvE**TxFW?=k#xbRo7JyAu3vh>WrDOWXqNevRAaa1C}x z!f(0G<$esDhTq5V_g5d^Rh~b=?GF6t_h;^V`uqMc>F?!s5Z8%Z_hWYq{(2xU{C$Ak z6WHl@E^>SMdznXZZHRjVeALHzrkDF9{=V~ezw~Uy?Pjj;y^Pnf|2Oxy`Y_jUUx}=8 z%rE1%4_pc#hb{2$xSt?$ZHd40;3sew82+y2<_m9L=;g}oOMkx#83FhE!ExlX-uvB& z`$3U>hw@J1=47rL@c%dXJE-5~gxeh6>dlwHbGdfsIu!di<;nl%_&EMay#My;=;!UW z@w|<2BZ&WS+?9-9Lyn%fv-c7+koz;a9>d>Et_eP^<+x4uGLGVYV{bnRKWVO>Tvu~# z=KV<4MVK3rKc8zX=Cg5onET&yeaZdPP``5Se-0brZtxAl{f+A$+*iZ9vDa^ZL+m7P zmhnfpKY{rIFYC|PZH0Ll_WCXMey8BRCD%%>yS&>Axb-t{vF)%MN}g`PZWR0tJQlm} zxX$8w1b?5v8?hhe<5JKwFmH@`Yuq;BUf=V*6;AbXg?(}R4Oed;ZXWLX4dvPc`y=7k z*nPwG0p`zPnyZZK3*3ftP2dWD!-?ZT3_r)OeyyG>xqqDNuf%gIVRzzQPN#AIA$D70 zsPcZXj{TnN6YPf|FZ^}*H10!~eYqCk@E&2V;eMI-bSLIVui~03f4CpTbp=-g=A+?Z_*)Fa-&WjQ>SfAqJKX!g3aH=TB5r^3_lrnt zpNI_k`_h|_C)|7Zdj`9YxDN7ip2q#Bn5STV$=khx`2;Tgrf_YF{e^`6Dc3t(TN6)Q zj{IK3Tn|6P&%?<2CFTw55bRqyBlH`dJ0Q$f6bd~xc@u%{k;FbW4@g0&&d5f)Ndkganks<8Dk&& zyqpY6u^WiLlkhXz>%@Db^QlSICR-Bq$sm(#ZEa|-&jg8dGH9r8PNkEz!~4Yg^r`4* zs!la#g1U67DJafN?9+v1RdHsiIV^6jP1ZFuCu@UDSK+#K&PoW}uWC{9khWw-DGFNB zsrq!HDQIYJO{QDYN&ZeGAxmR@wTz9L!E z+K_4vT2nzqvR;0IrbJ5%xp7`AS0sb-hBTg1>5iZ>QQe5jGeNScrL{vk54!M>4LG9# z-%56O0Si221J@hSjBGD%Y!7Nu&8>-s=1frBSQ}J#w3=duOMKPtyDvpj zNpWV9>QY&{W<|p)6hO^sSKMWpOtPuEu_LH$Yid!6gmJh8OiMHmZVl>_tu6{_U+K&G zQTn7p^VZf}lWL;MP(MN;Sr4f;Qr4Vm4XCcQL0dDLsU;D0sjOGYjrA#S$RxrP5X+{oWgDGXmOR#DOXiTZ3_>xlI@)eK)O?|XEkJ6txYO|<-_Zn z+lH@5WL69gs@rN-QZ$Wt2pU~842HC(S`&>b$Ku8|?;$g^vzY%V=$wY?bb_|yA_^7g z>Sm*tt-%;G$QTHOHpBiyaE|Hfm%(wSrO)odM-O< zWWk)uVCMWv*8?s{H#8|_&Ww}qyk_~{1mBA~x1Ly^3g3bxuCbw}b#S!B<|!_eXgN@J^KD#zQ9-Si{DKx6Ru~&Y zf>u{43$jS1h%|~kpQ>GGvp(r!wfb%{s7=vom*-KPXK}8|%W7~M3&71tJa^uvOT zh5%(FSMaeuxggTEZ|=DcFhc{(uRD1G!m-N_CTsV+&QdeJvec(jZ7n~L0`K<+eEIJ0 z2Rys}C98xm6@>~|Y+Y&S9P6{MZ+C8H(2zH56x4;hst^WiP9|$}#knpa!l_4?gn}@6 zjmi~zknppJk?pbEc<=AjDONNb8nvIBY$~t`f*FkoW=}y`Ba^2-St%{4Or}BOdr4D* zajrQzX(IKnscM;<&8$wPS1uhEG>n-rept{{!w z3dWQpE0oF|pBq$_G^HEjnVNJ%ODp4Pm{_GEYa)@!Xu5-7dUI>OrB5~!o0UN@Tf<*L z7V^DIS|=G6EE-Y17AiHy(vo@uSENi;Ub88xWYDlyGKnLdQZjCy15D?10KiMaBvOVlJ8v)tH4Kdh7o zK|G#puW4+nO~%7|TcTlYQc#}KR43Wql453RcF{1hjw>x;FiOV!VwsJa)C{NLABgz4;qhmbku4TvK&YL zR<@;^1Ewx5iFAfJwezH*$^sV0M@?V~=__>SI^rvAR9>g57TAz7I1}ufXl$b%X3aMD zSK$8*$-(Zb8Oi2a%StwisY&vuNT;vWNj_YGYWB*k#Yriy?H$8bb87daC*Y@NC+BQc zlzFUswlFXJRRyi3N`wxsiu&U6Gah{9*Y8AQ0}~7%*cq4*Y5J3DYYnE9G*1d6%mgJ& zfs>QuH~cNm(BGM@MrJ>KPNsdB>O>|PSHwYyZgn>)Si}U0rqR5TT2P;CPNsRd;>iJb zH!Jf&si8p$e=LlTPvuDFT1c6ydY=ErMx`T6jRkQ2nL$_(X@*9k(6rH1Kn8VBE43CH zkK>~?m1>NeByXa5T5ECI9O!KahUrZ6NRy7&xiO){VNx(3t8_zcGTY85M(30t$VcNO z6vR?rQr!778vXp%A4;%VR}HbE>(c$vr2=<5s?Ly!kMGV9t%up*=li zO-DV?g*gQW)6z+4Xf9pUYU#=Q?Xpu1f&&sQ*~0FsQ;o+7*p-H&J?d~WSkuZAvhU|} zQ8s8kKQ@v&8!^J>6FB!>#)c2H1p&wXP{47W0@fxQS$>Ix3xa);$(De1kQUeMGGUwX zTF!5;*6^%-6}D6#0A)lH}E!oellTjk2Js{q!v^M=}Z{E)VWWb3dXen>P2`!NR# zoJ(Ve*AUMET42ad*_?Mx(tLdwGdj?di7c8_5yp)60cqgXsZ5e6R^_5#9xKb77xxgF zbLWnSMwW=^LsqA$F-Xbw`0=v;v}5)qFpY3p{7AIYlw70mG5Q)@ov2y4I+3pBxlf+l z92Jk6YUFFJ96_YadZk>W3TzFk+io;(zT?w015wt+7xat^7$SnOo21ifdF7pLElGTLvZ>@*PBHfM42JBcErG_}hANe^8iiGTW2)NQ z$!bbT-n1Q?@aHD~wh`esn#`+7?`JI={JD2AzXiwofj#8mn^9QLIFy5GFob~h4sC1BkHF3>z%drBQCvIBRXO$I z7S6@)17Yu>L+8;aorGtO*|(53O9!-{P%VPsIVB9TtiP_HH9KW)Xt+O@93bUQsq2EmA$ z3uf545U$g7uFbZIOO`d>Gds*`$|eipGeC7+tp-Z}v|N_Sv}G3?TupKVvBnZ@k(PwM zm6rMF%y+3>3JXU#*1znL$mBJ5DQqgjsvDXaIO7Rzn6@%kZDaAVL?#kf!Sjl4wa*q2 zH;jsuRHb&y8=1gFD0P~PcbP0-!V*}WqC_ohf?h9_Yk8%lquC`G&k5O`ro4LM4AWB0 z)K8vrvVJ0E#~L_0?|!XZ$jQR61_tqrue z)GNNRxxI_3gdB*bRt?0Z_4^{i5w8{IT5 z4y9;wbeYSuJh`VDbwtvh8x57VMaWAhn^LP-0`^-wd8u3E+_ECWr8OPM$j_vnP?%0M zv}k=cPhV#6f^ts`fyyKg0+d4G8b)6W$i0-ABpS<*SGISdO zn*oh_w9F=bU8DsC`6D`CUstlgVzn$U3EFXO36eCa4mv_=6oZwk4OUY51?i-@xo%Bs znA1FI1vN~Y=u8dhFA%B(WY?ZZ);^@nC8}%1Gv9QYclFSR%Tuclt=b>ix(Jh#7uxlR z7R?amXwDBy2%2d!QDRKf0(%(J(d{Rweovn>Bk=BFeR3_?1$H&atto_}y2#6nRGQtI zdPl#;rucZF+K#&NWyf9@p;Z@S|gDGk2Ce9=vFFrF=vsrbLIL9ZQb=%x-kH+2> z#vwOkNs1e|lZlnd=1u~fzSb>OtC0}qQTGK(cam~>RDvwgVYTs3);Ya-f$`O3a&z1w34H0MY0j_0RN0``vx zuqu+DnovMH`Yc)!5B%?M}&^n=# zkV}Bqcia-*X+I~ez+_0by31Jr^|rUxP&M{RMW5^{RD(TIU+Du06txfO$jQc z=Fb1c*j46A!G9bx8UOFcybgJ$EUH*?TIy>a%jwOG#3~7A?Q39YefYX4em`VrE}U?W z*2{`TT`y*WJN`8z9V-&bP|o@eLU9ifRues^!oLEvY)HvQq0mQ zD;OH?qpDPX7BTIXTR4U~jXHIA(j=$9vtqP0;JB zyZ`GCi;%VK!;q7oVaJmrP*@iZpUQ-0mRc~?CXt;nrH9B3#uWrkrE7Cf9THZj$y~*l z!ldL0b4Ovj6eaakj0sh2Pgph&>7<)^1^S?h*@>9WnRE|o;nR?xo`v$(MSq14RN)Md zyyi^`EdlEyF;FebFN(-aKTKOzi98B)9am>DZcde(80U$K+xmX44t1|HYgJv#iTi0? z&NZ95u5)F=3KUQEo|z37mT`AQXmjCC5}bmVdatW;IC&9ng0N@HDjV|;mSSDkpbbvd zbX%*T$MSB2S(*t?Z0PvB-$V)P=<0NXJ1NU9M0>%WPB53p7bnwqhRzEQGhvueh8D)$ zl1Y~`R$98EG9)0Wu|um<$=Xm(ix#T7`4y(cJ@Jv2+GLZKCiH4bRu0?K-Ad|Cj)lpl z#5QxnV$E*nC~U~led>1uF@f4O8!97IXB(z=@9$c z*1shwx5~?!tl!9{y=YL?secL(}co>({Ley2krmMOQvY%e{e}L zUbq08uYa23S{7gn*ANTChJpWA))4 zT?K1lE!R(D+!C>$0LPG$;3!|*ZMd;F6TZZQtZ<0%PJuZUZlBaCv}QEXppnq(iLy)W z%rsoj#CWBdu$u^(SdCdN64k<)V79`d(!zw~jXOcc9qHx0#E6t^Ol}C2xGMi38DE;s zStzcnl!cG=-m}ECJN0mGC@aA9+?^O@EE1f92X5ImJpW{YBign1E;$zw)l#xOS<_~( zfrU@PN=tcxuy7qXOiLI^zA&XIDy2eFGO0E#{YQVZbv&b~p*`?!Zkq012dvG#AF5rFA>e zUfTqFl~NE+mm^uprQio9)(sNS#T2=#nX#VkT<_^mGDPRbRFGK`)x|lRytG6&Ib#H> zRv>#&E}c4~d|uhy>5*)NFAu0_%~O!yYx3CXL#c{3Nmw+6rE|-s&6+*WM0O!8>Q{S% z-n(QSELpyrDJ@8r-x8|zr*I>Aa_a|Sud7fJHCLkWobAry{@h&Y`~{VEy3{?c%Vb|5 zP=2EUBxSnJlkjd*L!!B~x}os3EdSgg2lM0FG;5LWFiB1porDuMCnv12p|zFsRgs?; z<{j2Sp2GTJ(>;S*N19#5nB8nIr@8JGTQ{fAKCHU|Z;0!d;}zO5j?b3D*!|HPcBSRB z7e$iBtsa?W$pT-7SKv56)2N47t=#yYUJ~7Yaiaw3a9G?PCG&frFj?;OSm;5OT;cU( z;u?JJxnqW;$t|98-%aRRn#)e;A=G~OI)9|9D5KLP(XE@*Hzun}D=L@FneI*rx*V6Y zD9Xwbt17tGj^O!NM`oD$L>4yul4-t%3QU#MCMVh*+3^#NBqMnZr+nEPU!G`dO${Cv zEa%+I;9;cehknZ&+iDtW6@vF-g%vIOo2;$(QsS$|=SN5+2PnT3^{$Z&hD z8SPnlFJYJ) zvQnJ-G54q_+i+gHtdas*wvH7_%Vsk?;Ha&4cgQ+SPNFfzwwHUeEvurAY|7kTScW&# z;>-?ciJ9=kM!E0uR`98boCvFr%w2Q+Oiq^HQe%U!bpDJP71Jwy3AlFbZD`7xPZ3-V zMK#NAY~_wRG={3eiOutQjED>tuX&N&bDv&xGpSwx2J*L zx5K_(k**;z-A)fAW^Gf1wJn|5OH5s!eqGzrodpZ09nn55R*=v*Q)A8*ba75x#ZWeN zwocM&tuH(FdyK!8GT>XDV=V z2gY4&KBT!)YP4mYrCzHyUL;U;WP>6|G_fn%+5a>SOhi996ivOqw-;xe||~tLhHp;_qJ)+ z$rZ{Z_0!uqm8O$}Dfg`<@;_1U8q8o6bqBO__Zi)4(>i3Kv>@;2iq#aGJ{-B@GgX;KH-ooli6+TV!vPh?By6|IO=Gs>*x^T}W+Px+)H&NeEBX6-lZ_73` zwKeg!ezubgvUxJOe4Z!S)aGlkpH*a4t(uDmE!OA@W!VD-uCMXEC=bFD$8a%jb%@` z`^}JW=_OZqzG{#tg^LV1evu~6ClSoA7(q9iv-PQn!dg-GYX{zGcK*Ie_%e-mt>|bP zo>QnZDM!l0|A?TxPce9jZl!OyTR!1iEV-|KS?03+d^f)FRp6x?rF8PeYc=|kl!ly@ zbR2C#`1X-~KTchV>MYqSSXPz-Trjoe@!hRAlGdN(HTBZ%FF@bf--&)0e9IBe1#9mErUHl?YV zj?QZ;7MV$*+R8+Bk)ojU2=adFH%7Q#QDs!%wXicGc|-vS39=MpkPRu$EvE zNvcO^lmRgOUet`n`rPN0x=UR|c$gN1hQdNwokSI?J(3XJTE`r|=9Zm7*;9c|`>|NT z)H9Zy_vp(NL87f)ZI^S0RKwf=A>H^{q`Wb{yXof-_|zK_>mt$lTf3~aXV%(zH`81x zBmB|LnqJnyZ?-G%-mk@572ki%=y2sF?mwoQ3C54*^(&5hyTy6evpbK=#*cM=&!j&m82_CF*N5@TqxX<$(hS}$Q?7EIPu0AfFTAxe6Vl|!JrY&b z=mBM^%3P1ID)6d#>806MPP2wkmBxZP?H1Tvlg@dwR+uL+=cv0v8QJzpNV&UCil>1J zrug;wpZi+JRE7PFq`BWZNM6uMS8f}JZ)dD<8shwvUbW*jKz--UeZZ=!A}>s>?TA;m z@iqg;I{iX|Z6m}`Z)KkECSJ49;ZKC+mD#>|zWgeOTRT{lf6_%F6M3HX5?~#D5_=#) zqE7D{S2gjeRbFLK5xZ|lRaJKzqB_Y6Su#IJFeF1rt#(&6EOjGDRZX4%pJ$zc*0E-- zMf=Z-FwJoT8*7ICU2<0?>hgj!Og8hSSywMPk4*QW^qan&_f($u@Qpz}&(gqGws-<_ zuMRq&nLM8sCG9NKEj6DbcfpXFy5a0%@e**gWv4AKn2y8oJi)>es|HGnzB!^px+sQ& z$Y|6p9@ey_-K*8Ut!4N6TtZgmNhJG}Tlj&Pyq93&bggckEiAL_@s&s$wu88e+~zcH z#$q!X#nx1n$dzcE^-UghLUDe!6A_m8#fdoc24=}w?~%tYN?b3YS}$@)Riw<~`jk%1 zN#Adp0}K}JjIHqEhl2BFZyaG;NDxZ zrrgCRrJH!^M*9Hu)Q)C7Yw#uJRC5E1M?pQGHnNxLvGs2QCv3(?J8}w(?4FE}@?1-| zBjuXfXG3uoKDWnhK@-8eWGk;v@Hmo6)VeRt&P~;}vEQt4E!uHS`1hY(x$tRCd*7HZ z-_YPQbZ$+mcns0LVK8mh9tq)D6Js}T_PiPMd6n0lppWZK-Xx!db&Ee7zD>K^0?!o3 zGG!xQgexs)PsKMePKtas>k|}i8WD+8UjgESGV2s2TCYu|m+91RT>XxQ^HxixRUzHG zWOlLPn5bqi#C6iq)}vP`r5*Y?C9%7}uIczXI*v<}ZcZfnIqo~Y8eZ3la;J)1hMCfY}~1Gi|W0mOZS zMm;>ulJzA`MEy(SY!_H(ri{&WpDc0xr4hfRGq^I- z^>3E5%5=Tz(pys#-3jQ%AkH~ePQRwzX;pS;_|n{L ziO?R8s--{F9?rmI5J;<7w^#Bay>k(Le=@5Cr0qzU))AkG;85%iMc9_ zzW)@8s!j5r5csT1*I~S?0_js@1qbN})J@qb0Hqf_yM$-`@=_K#`9ui)ToCskJ+q;lE_gKIp=(%jg%Tngmh4!EXa1uS!iOy{p|b+qhZ`AK;@RB{ zB_$N$hMe#tE?FOnO5?2FS5T5TM925Y(560t=SL~hqhTy6%#Dq%q;1kygqe zODZaT492Dm|BJEtIf>$1UDY_JA<>dS;i;9srhn4cW&#=-(&cjmT>E;(!oI>rn z9o^APne=t-ure}8+O~Qk;LGvU0!>2P%!^sJ{SzIlWK16tLB*1aMVy_8PN@-KFDkH; zW<^e2%ATa~-)IXbgDmp%^*m-&T1WS@rb-Gq+^BbBQ_THSn>;IYTDB%W)n%9=$JPAO z!!jM2Rclz2Sjn?*$Ked)_KgF7NXMN<4Tks`qGm|?cpH*ZYvQ$QsFajbI#JuuUV7Ms zHKRtZ88sde{uio{IX3d$%qYbfSI%`&h_a673iba>@_I3o7m8Df z*c{B}r$eUt#4|Z;>`>xzKle@6CR%r=Usjs?Zz+=GPH^ltZT{TdR0jEHv$Dq=3*H!# zx@-a;nG*ZSdtO4iKLN6+yE7JOWks0mF3)B<$80{d3mfUrq}1$3al1TbS`gg5NT`4O zlzWFu$89=QEaa~BJ*rS4Hs9`2EuBBr6@Bd~6yR%M*AgmSZ>Zf5H+Rat5U*T0mHJoT zG^v?4XRe=@6lzG*D7q3pf?mq^w8ij+Cd8Q!!&tN>J?&=raRJ8LJ&*Al5txDjc&X@NBbXrNB zwmtz7@8a$FFt4^$lZ``PLa;CK<@(OCHnq@H)%TdGVYS2Bv;Ac*Z;Vjc;X?Vdp;F5v z)tn~@CJYNkja1(`YP?d_?F*6x(@cvrr66iO{@iwnKZ0%bzQTW-Ua@xF@HA;gD|`vA zxt_seSjDjFVU5G44x4j$IC5n3?oVDZj(Mkcl6NI{Vx-g27B<`Jr0Xha67?n z4alkQ&VM<pOew6e zysg&CwS4EMSK-t|5?oc+5jdSnD=oo~-Kwc59sayT)?OQWY}#f&Pwm~q1m#}x4N9!> z<;I$@-T5)koSkB<>4bW7A-v7Zq-C<&06|vlUJsN~f${;KC}`ZG~Grqtd!6`}%Y{3nTo)$h>mRO{AI< z?QU+!NRnEOK7GybpB_;L+;cLobY=VMNc}3~G`t?@YILlTxwa04Q@qxx>oHHuk#??4 zqEcjM1^cC}elDZ*B7$uApS5Uu#bW;3oLhyqJ$LQcx+xn6hWU?_Z5c*$`yV5IS6*`U zEmB$QdkV|YQ#7x6RoGP-6_CE=plY10iW1`<>T5a|wbCgu-4=J++GqB`vAwpszM#6e zyzb}zK^r>p`*RXF9KXRdMjLzY!&l!t)f5`so*e&ilkfXeQ+2v%b~*i@TGonW1Fv?t zXBrAc9fnpwD~YG@*~Gp3>7J{ii!5Ph>>TQu?zt_&$a68@@9JW*U@bg4Nr-f#;Z%V& z1wKFO(k5-&lTl&bDm3|^*UUaKRcG{tjBZ~4@UMMPb@`sos$_VQ-F8sXDJr4J)80|( z%YV?wk6mi|;g>)7myh@h7xCBj4v4)Z68ulS0z$RTzWSkr`wzm~J1>?K|Efm#nhc+B z>`F1xr@c?=|KVR&4cX%N4!+>gWVRLZuXFV*nX3|(6xU>vwN_tb6^e2d$h$^D(cO3T z8{#+Q+(WOuU~CW0Gv+UvTUMzci|II20>1O6HEZj}+=p|J$UKJc>rj2x{+`ZqJ&_OA z{BAirW)1Cwk)ev<3s}$K%Oylgt5@aM0F-XdWi&sh=9;IVc-OC1DIeC%)DcCV7u1m1 zg;Rg3-oUjgmM2I+w?7_qn4{Y{S9NbTEzdT!W~CeFBwv=|^7r`El=W^R2k7Y!^ZJ;*jD|iRJ1{e1Ypma7a|!+Z&dm!p84PL=pIx zP_-<{x4*(1gx?f%!kI0&hX-fChl08Hom;feA9rgGE*8IdaR*`+4;*0DXXEGjFXy}yN31vR7c>eQi{YT<3K zJM2xf&o{aEQo}ixio;K^!cA>!vBV#FAGJ*t!tDf8m9yPQn0nWVWL-nOE9v|5T*4W% zFuR`7Ze+@g*>k2BxMS@6tRjCBxk5?l^m1;Pl&&6A_Em^*$vhiXUWjfVQ@R(G}%D8xqoT5bN^{t6Sj&; zJp44RNun?vibyfr_qrpV1^&Mr+iXJJbIxbr=YC47E!4Sr9PcpO1B3FWU)YRu&k62v zDkn%yDnY`SNTXuOTsxH4tq^;Bh>Eeq= z>il0?5VP;P{dWiL@Psq;(vtAbloJ*s>Cw3eH^J9TUMg)QTzG~)I;&R>G$jw+OcCM3 zX-Ly%&p&n)sG^Q$u{cYrQDD_iSkO}4K|o#1=X zTH^4dFh`)(aLBN;rxLSEMV}>oH?d}~=BeP08{o0bkC&Q8WdDPM zs&-+nqk_U79JO}yuU4|1edl1|KolveuB%ixI#^rowT5M#W>R{(YtXo0%Lqj>&0SZ7#bCtpAAN*SI6! z-*S2L*4n^l?SdntcIr?qAp4k;J-Mf%(&K1#BI7@F5Nf=Fg$@1zW_IBxe7tn)>Djb| zzU{x4hSv6kD%o0o3!m4j*fQnwyma#A`amR~GRWpB7oh8U6SmK;rYD8-14~jaL>Kdf zZuX-73pM8dT5_wx|KH2e!m`R`ZWDT$N^NP(?e5OeV8?X3*qzIEhY)#gw4%4y-P9v; zn1!xThhih!z2W&cHwUj{a_wL9;?*HqmUngcxwkxh_dPMdhx>YOVK6_xP`7J)*2#1% zXyqR~bAqvvPfxk(#G?U5y;G-c+)Rz06}&~C*dS{UWGGe~A2W`YQ9NoCXRM0{jUqsw z7;isKWM#R|y#zx`(zK-}>6UN9dT4&ynpwqU`I0s?T>ng)?Dvl87$ukfbP}w6>Eaq* z8PWd%p}%o!vGU04d0e`4A5i4~ljv1bZLX)?e|f2u6Q`gRmHUi|U)1AYY2lz(19ckF z4lJS>j)J)O=?ArgmC#d11MfyYzAeVbZV|ka8txNcNF;QPqLAh>$gJ#4DX46=xdvkV$<77qbRRvtQu+Uvia}wpG ze`=fUwk_AWijwt}(YV7K`q}ibnp%ZnBT=twP<_E9%$*HWt{A%s{=*SCAE7}1 zijS&rfxv>wP~cjasBq)8OL>`OawYq*yn8`Ab4Sdj?Qlhb2IvmFsF1vxtp4SqbOH!V zSEmpWyVr3B~P-BlJJ6lB? zn)CX-JVl`f_caWHndH#3@42iqaZ!XWZl%ZBL^@kHKV`YxO<_Yv*9`L%N(g6}-!EFs zanq(tBT-BU$C!lW+da^>t?_G7n!Z*{P~Ym`Su>#o3gDhw_)M` zkoPXVaa~EiZ%#{}VmG=4Q)Q8Us2*;$q%KOLZI&gHASv2qL13lG6h-lotV||NvZ{b{ zW<5BCo*&$E(E_>$9@MCNWI#2c{YB0vxxarztjEqwQgT0V5AG$ZEOPI)Vy{Q6ct@-h z-RJla?UdEoAMLzMu62by*sE;Hn)>xvd~0c&q*KkF40>EiCoz*h^2@wMx%9E4L@N8{ zG`zfQk@oV~32#vRm>wTIKp24w8f}_9a$e#gNj(IsqVhrfjlYNR((YUxtm>c`*F{tG z52$JcTNGpPEvp-QE07wk`Iw?B+R~}-ZE}&DZv`lniygzt#VI^yA!Zm3T=AhkBTzc0 z!yg@5aG$i(6k+MZFmVC?^bNmQ{#I(A#hHcWPi=_G&?^ip|1~6VgdO#qJ>}5AeN57@ z5#xFFN+*u034L>Qb+r?%=r`e4d?#yc#U1Zga3Zw1Sq(Bnvtu8lONQ^dU{Cw0!gxMe9fg zu>Vv9ifbk84n||h*X%7B3~a@SAfMc;{peaJ-z{3=XpV01v@WjGekGwiacZm`Xnb4y zwhwG$x}dbEb-+sh&Ezks&>eq^K9sl4I8r8AJCW?CK^}kFnKQcJ zbu)sxLIW&8TKfu7PXb83x5jJxfT7*y!INMscwRq7(342E-&4XFXrF5iPP}SW5bWFr z)hW|rK~okuag9eAtN9M8H{GIpPJK&|6teuC1($EM9{2cjc`fDlY>_dC+>JGEFc@*I znmg*pDpB0xBAU(}C_*d>jneFS9;*{amf7hUO=_?k9!4}Rl z3<%e$3fr5HJ@HkYB3|koU-oviO}bqq1b5~~r?|Sf;xs?G|KK4pIekvG)IOs-nI&}a zjRYRq(aVMYMMv%Ct0PpsTFm#Pi7D7(-wfX?XQMuN6@c#QAP{(1{{gE6@w?J=C zdzI61V>G>iwX)Df_plj+%bJBLIbx2S2ykGs+N;5Y@EA&`(e9yrgaEA`3C_eKg4pV7 zr#nVaUh0i~-#ST=MWH*P;>HL!-9hj8WuKWXuP!t*4-_gX0(zqZb!abFT5Xoyk0E?y zbeQoV?|aswbSe3RC)%_RU@hr){bGvMc2#muJjq0{l!~E^_GXO6?!t>q`6OZaOXGfz z7Vodlul~jkgUYi;N0a{MKx&(ihEcy@N2fm5xtlKCV;t+Xh_JZiHBXqD{U0SnrjRo2j;3v>J_%ynpy&cV{&4_)k6VJV=*= zx-u6Fa~nHI{U$L0cA)iKqEO)v(aWstFov-#1Wt-EjHw9s#)H@^x4rLj#nveET%vmktmpwNL zV3a+>0D906KMm$YaFLS->mkKmT6VHmq8wB0fj}xFV1PwlmSrblhd&U73?f+JhMMZl z@OV_CQj`{`6%U<4A@0M)g|V|^XVHkVC#CHAKKfBHq5YeeyAbuvru}-kPSlEWgEQ7p zpJIBN953;7b#Y^1H8)Ld{b_2No_@Kh@RLnZsZTWQ`XHOXPog4-HNy*}7cCW<`HkkU zh`wcl(H-V^lqjl1VfZRzkwx#}Zv*qNx~14X00LLy9{ig7*lbA#^~UJs$VEa&>31tk~S0Andov?GePR}&@D7T ziS)oRnag;OS+97KdWy=aJ-#j>O!3#592t~l+WSO|L|LYEhie-?`fInhb12Nuo$QT? zVd(oR`2bfSIHtwd!;Wr4uA6tCTAe(oC`x6UBr;hO zbnEI#*!sTanZ?FX1z1g(nVcjLo4wxIH%R#$$Kml@M~SYVW3r^C)wRyT>gw|9ZAvKS zJg7oPwwrrMifmflX!Ja7P^LGf-B$|_nwf>{@3D2h(OGa&bS*;t+0})rGG@n&s@S>n z6c)Z(SzcX_8cwF1?4xcn%Y{>U*^PXd1v4H_v%_^FAdD51DHFUJY~4h+CdLOEw}s%s zAz@s+N6>?Dguzsl+;Gc`nTFfub0cq2bTbQ%gp19i#=5gcTrMGysnn?^&D=HgsEB<~ zBfe(!0A$s7ulHaJNHlWs(lRlk6;E2tu5~`m7H7#|indjyIkG!Q27nm*e$>s(;=!j9 zlIslN`@%?DK$)$B-a$QCsOO`tz1}gD_o_zrNwv|mV13L?>m#}nMz$d{M|5_Teao3N z>I;I3@-BOlXRLFUgs7D1Chug{skMdlsViE$QQNE?m$&A4&;l{~aGR_FQ$*~Lu)z^7)B;s8 zqg?BJw!Gd+^&W~sA{0%Jbsk(5DSUSEVbKyH$y5UD@CcZ835b3lj-F>9W@m9>VL@|K zq+p|x3+N}`SUF*P6C07Je|~=*+oLt88J;V?EUuIr<0?~|RT|LcjpQUVhSi3})-8!% z=bttBtN)=3ZreY)Y`6VmXa@!02=DJ4b{5|WTmduQy`a1a=8Le4QxTkW5O^w~tTKbS zO~Efil@tZd39@Y%3B_GJOeDl)v~;|5ScS8kokbCN6@xOV?RFGFW^0^W`EmSM#O~IV z)=$EQmAFedAh##Lx=C8r_Xu8hQ)adrV4TZ^P^?gbI8JhGYLsrmc8RHZZ}$4ud*!KF zq+Qzd0?zO9-37t}3b{C*zsy?@!v*qx3yZbHImlmW5DuU|DY?$PP- z$Kz&(v#_II*HpsAO7tosVUY}Wq%EF5YGzE!hOhPp{QX%oW7;;qQgAEG59+ckz!c-5 z&a9La8AdcwU5G;r!S;=&-^^6j8TubJGm{n+kRntwEtsj){BqiPBnE&M$^|w$=dxy| z$a`~E(rx#-#W@XB)$Mlk^!o5wc{Vzn@|64MIbNx0%9E4ypf3g4%i4cf$QmJoz#R@d?Bt948#@687`Z}nm+2bdUQ#@UYSnqtNl97;q`C6ZYQ5?rK9W`*EAf(z zJkcEj%(GQ!iYQ8sCNUuU`|6v*zB*F5+Z(*J%FuvSbq)O&yY zJAuqi zKL7H;{7N(PaBX>3jM0n-!=w}YOFNTVokw4;tf`_Ehx3~w&e@Cprf^mkc}(F3Qcc$9 z*PpN=YGc_&6OC3@9&Bzrh9(>xZNViJF0=)r)GKC9)}qMk)wvJ`QsJ?mn0+|3aTzfY8BR1KImod?p=Gg1?`L!?B)>ofAVAqek!@aTB zc~@eOZS}rfT)OpfUO*hw#9>c^zWE3<(gTwTWxC-=6`g9S#k&)4-cS{_^auaitpVxp zbqN6Jr*QjtVxk$LWflg8dU5p!-U0AbfF{XuHupLD`ht!rzx9squRS!%ZhCm$o(@ud zMeZcfL7+7{#bBcS%4joA6#rgtOkwoE`zBw?$@%XP*miURM{xzqcLg>vbx#$d@f(_8glg|qFPD%#3dxC-wYJN;4w2UEg>u^fL#6waH7~R2uDs51E zs*(qTv~DWL3$1r^inBU{2dZLhK&VY>>iZVtw3X1O`Q%sfAV{S&0Yt zv~$huuX$&2pPIP`i#ZOB{i%C*OpXCBYQbG!5&>xSts9$(EABmXRdf7HunbSD9*>Es zkN)@H2!Dj{La(?Juv8)+-HmWqtG0 zMHrs0k9!~QBY%Iku%0CoakiTK_-hwi#$O@#q4fw)+~(32^sWwv3u!CG!lkQQ7&57SejO=@XJEn3I(@#dg;p@BMj(Y*EC zXyfVvO3|vMX$;|LskTWsI#va$@Pdjbj;jD;EvIlT(V@}*qZtD)UUNe7m)LFwWsZ|62jj5P# zui8JJYY`IK&_n6B;>P{dSnCBTCfh&{Wx$ z(1f}yI+lQHi5Uo;7&ZirtfJJ$%xIQG zSBkQ*K71FQUnRb@tS{uiP0H%uHD~=1(yWTDV>L_SA;(iWu3o!J_7fQrt{sCsDASGG ze)pS|5n&ix&7)nc9-QeUYu%C=VFsxf&~Pb}iu|5p8TtpQ-Q2a-$g~PrjJVb1xQ7sU z*q3=4`SAEmbHMkAUO=g)%~dIJLKEytNfYqjvz%s{nR8=LLIp!YP# zLj9q3-x#b;jJX!<=o7co8k+^C=M68WPm@h**y{Mf5d_2&#isB!PB)sN<5xDK8hL3Q z!LlyKXzRcOXm5FIzI6FY&8cLJe(YuCN}l$*2<5uw=m6TTP{$C@3n)7Z(1}_$X3a!h zCL5(4(9xQB|1QfILBz3&E&~Z2G_cn9EY^6UnQ)?DPV-xZLzYpdSZtq467VPA2O-rr z>q(^U)$7)dr1viNFzB=zVrLTO(AfnKHl(md&fmgU4<7L#bNu4UJ3*bZtF)@OMyl9} z6DfN;X0DA6uuTEx9BnIS#R!`p4L08JS%%TWhEf|Qz3>!4FF6V1N}cvxM!+e}V^iKU zQ-6X1(FF0K1nAK$?}wkDOFucRLc+iD%xuvLA5rzr)%oN@V9zv}iTAV#Iog=N%E-i1WCk3#)_$(q*{@p^t;wd*buK; z3F$}|liB9cuuyD4Fpv^gjY4154Wd{VERnP`QI*3tTRf0ZFr>!LhS_UHB!9c~UXyOf zQ0W#~%jY_}@Jk_);U5qFAmPdRmibvEW}xgpTAs%v?dmrY$d~Rb=Q3{H)1lRw2oB*u zUEjWmkRENdT>5|Re7og1B`%>A=3csCzR9lEEZnhJGS;?K2xk`gb0(B%XhwBSJ9C93 z=b4tKmxSH1FL>H)qjTFlV}@|D+b0ZH6~`s*^}NJpm>b1mtI0c0bH%24&l9rWW8>Y& zXku+-Y1dj2caZ4jTja#KvLJCgk*2oOJrbHm7$s!eL?He>?L4jGt@YqpM_7QwYc*RA zdR-~F+$H5vJYu`QJ@p9d-)>WO$qW3?b$&Z~OQ%6*)Rq z1eGo|`8utsGWKxFww`PCZ#JE5tQ~fgyEwnT^oyUfd}w*w_CSHdp5~!T$v|?6-P&|} zoA|iPiP!8|a6z394zhqI{$dvV-`a7v$Gbzhmhz_zpVUp?^myXzI}se@b-{*>d*mIz zn3CE*LPECt%@p{B;PL#$_ND@zHaW1Hcm{>g?#?%qYrSUVQ(l`084&>Xdpl~=t_~uo zu=fISUx_cu(?b~ZOwlrlHV|tA0x9;;#9M5!C#>I;hTN?)d)V7SAff?V?naFq z^JFU&GM}BwzcY)jkPNG?iHwS@d{Vme!Xu(`T14<@*^S*VRL6y0t0 z8Jr+i-R-fS*$MZtj=!G56sji9TgJdjJq07>Io$^6?eWhlnO2Dk2&z`PCFl;UW(<%T zPOOy~Lcq46<|cj+YwuDXxQrt*>?r~_)=JZ1bgrpKs2Ta@W(=Q+SQx6Or(SW{m@|j; z&}iCQK4(iS1WAjfk=nybf8b=t9P~yl>()WH-GZBSTM#!*j}1*{0}?N9&i3xft`aVy zWI+d;(F@f6CK}!Dq_V}V!OZCOlZrCRfCYTC7 z7sCS|aDppqi_M&+FkP}5r+n&|pv^5P*Lr+H%#V%Qj}BYAgDq}kR~nPYOy}cy<8Ia#}KobgZZ0)yuU{dexYXzsR zazGXLZ!K~)`)HEoyjHuk^6gJzS=f~!zumOV#jF=)`={cGw|N&#@s=KzYG1s1SqL+V zh4z>_{+6R%*qxEDw5hP8+6)W+3n&P;$Qk=C#8=`|2U8sG%5Qu}_j(IoI#k_C2?Q@mBH(!2+!|X$ z6Hh8&f#03XD?)O~e?vv3&S>vTBYQaPxQit5S>no1ur9j{p#13UK}m03{zUfnpmV{M zC7;=LXO(dH(kMLA{8+V(&>0=BXPQ&yoVp89+@*B%8($|tcQBcu!&xjW-$X8j=V4*n zdO7(f#XC>FF|)ivp*vL=tXN)}rs#D2P8@-F4_7G@T`zr&y%Z)Ud@zb_Lc^uabkWwd zX5yRF#o0NO=w6LN&kgMgL_In=V5l5pqckne&@68z)m+uUXGM!sG>+tc5Po%3eSRqY z9;+UXC}BT{oBjnGPjFf|#>PAJkntyRI6Pz3xn!sQBeG)S8MV<5t6$Sg`89C*?Q`M! zVaH0SS=75}!IfZRZ_@S%lr66dHWM7%-rGiJ-CXF_Rb_PUuuvf}GlF&!EpY_|y}h}< zl^>e)VNQ_zC=pr-X1&vnipP}4>K8@mHH%9tPuA(gv`jP0qG>Ye_`4i(t_fO(Qp|UpM;Row z=KP@(nva!_BP=DyHb!c{k(F_$!ryijQiGhcUD9qeEtZ>VP^7=?9*ho5`h#wTrw5}* zYTy!H{xfY0$?>U$1jpPpKegQ~nLb80kGO>Lpv%fp&R<0;SzdhFGO?$B(>R=d+CA5E z&(U`in)#E%{eyTg_9i#uvebmloa+%>Ax=j8o481-BM zW?`HSjtrf%^4NlN_=YNlCB#7pv{{7>J_y z#&rOEREp;&y4|u~g+8oAs%!$H%e||kz(KSUnR5AlgJ)GR$GPzoRm55)gQWLKe-)I} zb0g!$LSYn4&*3qV*PIWH9;ekG>JR@eqAtG&VUkJ7WoN;hW_rRX)1!lhQ%C$pjNde! zD%b=opzpC(yE15~caH&Zs{|2$`3fM!Rh_FiK)hBVZTa*(cmd*&6zQZaCyHbleA1lN zsg=9b@zXx+KuZNGqC@3>)s~r&h50Ae?{#Fm+qx?$zxU_HiHn zZR=;_H@j#tvkQ)M;JHrnZ2D0ic1ksYESbx8s?}A%nUPK!WlNBm^{hp*iunv^6Sa~S zAC}*ZS>-obmn;oz%*h%$Ai_Nz@A$X*PzR-5JmTr~pO0|Jq!#w)C9OyswfjXxoWqdw zV|sV@5u>)xE&*PKVAD(=NGmHz$LOxa9s8rq-~KEV*yL|0!_eE67m#LIcGY}71Wu5U z?Nu(eo~Dl$>8pNf;!vwy2Gp%co>;*@*v+ zbCrF0rIG1-hRE5UU_v>|H`b^U`Gq0nt?`^o*RpDe#)FVQZ8TxRGN$hF33RI;o*33w z4=c??uCPnqtpA1=IW#3%jk9XVIjCM^5fmSuYMH3pO{$j#AO-j;h?6ao1d~*O{niND z?d`Byc{J7atH8E&PN$zOF#g_@!YOY<=cwSh1TwV&j+e<=_yFrc_*-F)2tv4g zr%#K$dbf6w864!U8cNdTV@TyQs!yW4<@fd9dU%)jxN~(=C$D~@%Xg-Mp0c*-t5dpL z^b%lF6w^{#Z+~$Ae*14Nxr}{E0Me<+J@vvIFm^jle!Tu0)BN(^b%aoUSVFBDzt7j0 zQW}%X*G^YjFCcRnM3Mwjr&LvnSOdT4(m04>`mC5%?pKDaQV{>XrsmxSqD$_7bMibb znGiV2cIr|}Y?7tGQpqh>$$!uUP7PE{~6 z`$!d?myWxM`T39Di}He^V}v!-e>&UoYlHpA&+AVywxc&~!K7I0tIu|QR7tNUPcS<*FU}3(O@LQ!tf~;dU^F z9+n2=H?O|SSKsF6jf}VCeUQL)v*n4+%TXXjY_!@^VCS*|XJxFD)>ku#Ae1IQB<@Ad ztehkHbFqO^uq@}3!|jE1tw2HKftr!<8;PoHla;8$>f-Vq5#PJ2H(126koiedz^p7w z4eG{RCtX`9O+@Keuh6Pz7q@3OeEDyqavf5Nocr8Ap8M#NxxfAJn&&CaJ|6DuZqME) zfoXQVPqWbum-%|rU+o-@=K6!3Yb(p^vu?{G>gFN-i`%L__sQ&sf6M=xkA8mp=f8OW z!@s@tAq{6&G3CprQrgkzMirIC7|A!DcmCIi|fn_}I4liC0 znmgFucTYe0*{?`rfPNgz4fpQR<8Wt$Rdsf~*CoDoZNGog-QxnJz1iK5J~{lAr7=@` z@Njf$%^xp5UMO?_Xzs&n572yoH@j|5VcqWe0Y!#(5C6{iAUz$8Qrc;BnA2w$ z;*#at%_q9$_^a7f+~dc`-Pr{*|CM?Ea+W2z^o#oY73_a-@%nI&+Nmv_OOeA>ByQg zF*iPstigKs`RIFwjHi&7a0vK$Qb;=6`m9IW==|AlQ;>r~8>U#OxF#kqKm>TMq$u`{&z z-~a9ZzCQfl|Ly;h$k5*d4j*O8X&L&8p6NwwZU6bO`%-%?q5XOH)v+(&oC=0MegA!| zch~M*AKnw*Ez0F&rtphDpV-oU-4`P7{_ro&$;F!^jFCs(gNuI#_Bm8Y-xG78C#a_p zaOp4Gwb!M+eO5E|cB3YZSTtQISox;?_68$pYQV_PGgKkW7ax9^!TW~i#G;|UY_X- zB4JBL7n)c>!Up?-1>&{W|ue7cIL(WA8Hd@Mo|Lac-gWzDC>Z!01T(tJ$3Q zsoHbyQ!%R1Khb(Z;WC0Okk6*w*0!t}(&#wz$LGCMyzkt~eersq0PC?0jonPUr0IQ* zBg=Evw(ZDs8K@P3!$ruLw4rli7qX@a7iWmE)dV187<#;E|Kvs+k|yEMMoi`$y@ICT zFel3UpY#&|durX+9J5pVy~ADM&7Ze2PC2$Yl8>$P2L8_j47GlKSk~TiPMe_+1sp-X zHWDGbobT>xO;;G*#p?qIb_*YL{Z2!10b3EgIOgEqmxudWq_rEdUICjSG;}4=-Il;f z9^f*?qs!{#`DNF9x@jw_$&KOPc*DaU-)un7?za4JkPV}XCudNbArw>&$_eQ0PH=)< zdEu>d)%?9V?1&b0Na%H;C}WHLc}%h!C$K$nM=?FyaAGp({qQf{^DU88rzL61YU5mS zcWaL+At5^fPYtdZL#E^|H33{WXXi#>Ctr`_ajQ8}oQ-XQW32R{-dv9WDH0yNp|b20 zu4X5Z%B$zlXi@wFA(NZ!MVdA;T8gS+tJ`{c@p}8b3!5n0n5fjZPVJ4{X=f%dTlB5! z7{jSB?p=BrM|tOO3^AeaLQH)B-Ua@~M?d++&1~_^1!4yT>ge@kHa^>x<2opM}F?dt9ERi7am;E@FPbE;?;eR{^WO;r$Er zsj$Rs+dmUR^0I|5*Ntp^d2Zt%0N{=3s9(|~7uNXW(Vpf-y|Jshw}td~0y8^{zhstR zeg&A?b<2aH1zN+qB+bE`5zqVE650oQ(ht#QunPU~x_6Aslq402EDnRB#bV3~>*DOb zM4Q@`aIFb(w;^|>`)#<6|D--TKfl*3^*pS?rN8vJ?x>)PS&cIFZ5mg_yo(PBDin&; zw%t%cNRNG)Pjef27!%VdSmup0W`<`U4ATLlsKj7f0zr&3L2E(rfwqTIk7W0Gw;5s1 zgCk@OEdb2Uo}HPa!v|IU_vhu0KRv}pRnG=U4)712*f8;+MEG~mJu|d|lx0SwOC#7hH zU-Y3x?U(l{uy@!j;3`6FK>D?w*SCMtVGh!1AS+UE?XlxDQB9tyB21P>p`!o(aPOFO ziX6w|LgC1f)cbbhJYb^4`IrFMU&z0`b8fReB!ic4(;g&706@RJ*R1qM2wr?EKam`f zbL68(&b)8#JhzS)Z#I1p_nPnjhn7ZYK(b3u2^J@3c3C7yj)2jm4k0rHMDV(~!++%N zxffe_;wpo1XHM^9nyE(=m&^lg^}_e zU-z0H{>e`jvM4fEJVsMU;~-ubV~fX$ayyJT5)6Q)G`Y}Mvvo4r?A)vk#J}7>*++ar z)GFWRM8A;`#sGGvWlX?%>kk51v9&X@@<@P5?*T06V*fc(UzqzyS=HVd^NSX zitcf{Iu-Ir55+I!$W{$JQ0Y4tCPtEu!Nxrj*bT3hy1|_ucha7NqzTO_j?+IpQ-q~3 zBwhJFOY`WP9Q0$-LwXA(-a6aC>JRxnJ|T^lxj!cA;v217G@3@OH_i^a=US*1LQEso zM(wB2>3ZQrrsuE)Z5?A!4X#l>4$V03{tUL1P9LAOXMgiE7b?>_F;IK{^J#5=KHfHx z&Q^$+^F7~2h3F2AQ<$EvGAp+JZU+|2Do49Xr!>x?afT_UJNmK!Q}=HplN2W9s}$s6 z?BkaqKnp++n(s16$fT6u>K>KqXMe|O?xNvo>kyc^fFmtlM2U>yiOH0KBDW|RxR1K- z&xq{Z`R3Ngu|!Y~T|v(mPMVc{9deKr166r#QT`jQ`tote&o=`CkWA=~G0cmGS2B>( ze74{cvL8#NTbdQX(>>;l*-4>`ehNwtkFb(K6J*zte_)p(ei!}#7GrC7G_hn4fyyAA zlBMHjVAIYQs!qE}3Z2RFxb!vqDWILHOry4aEb=T+O@X2J-ah2F*+&^d;cqs!DSWTH zmwLx~J*Kl?z|+Sz{!;A;S{`LK^l|9uNb zj{Z;bW+Unz56rNH$}ABw6SXJ$26$q@Z7w6n%`27{I?6|gE!_3tK(FSO3XDF+Bdn|gw>?3ak*^xMx{Ta2oW z2vJOusq0?zWUqhdQilXk!~`eaE*oNe62-tl;q-5hvF_nqoF(+U_4AHUV%hcq6Z~YH z9VDT(#SRj7b3bZZ|C>Dk(j}5XMKwh^OngGL7~>0b&C|m9aYkl={}9L~FmNMKDF)4? zui&%IO#g^)IaA_Wo;7%m^-asU+oSvn0A`N>&8t}?9m2#=`lJy+CiR!3RM#y+H7IZT z2eEv|^jBV20I0fVT_FLJFm+-Aktu+&nNT5@5M*8S6*qgo26qDRV1oQv{nXqr26F0a z6mm_~_VQEsv*>zG*Q>;l_9@gEgcZjb^a&y1Ijj$xnV(|QH}AtwZ)g-9{{InAclP^8 zq&Ow)v7Y|wj_EV}HvW^fq?7*lf5G~8-gs00#wGnO>ty@vj>=}ZM~1}S8K|Y?Z$2CD z%-eYc9%ns69RYhUphMDdizXc{WxbhelE%Gp@z3Xoo6QEVjA;?0Z*HgVnss{KQ&WPUlJeIEp9W9RC|!Pv#UuTH_Lux| zE15vjI|zIj*O97cx``!SWJ@gib11wot(wk$&iS&$!)EfwgjcL>jdO(|y6@`~*`g2n zTe!b)!CyrOfG2xNPtM^tR3vq0+bcw7DY^zrcDm;me-@Za#Sejz5Up_(z9fGu)CX6Y zR+oC)%p!XW(@cuwQr?;0j0k|_%j-YaT~)gp!j}M{0&M@vnFM(z#db%8=R zpL}TcNf@4pMdC*3%l_}gsYis2mLq*|`r4OKPcUP33c5Qcr(*YJeBsBP|pxpRKX8z@=eoy zRX+13ErX6+dm#XT%A|@7men5cs()D56O1yfsoa`9`86vP=Bl?nnT8O!A`n6271IaP zh(A2(&0+}XnL)k)UEAw(8t|G(XJSZcg~g~%b#bpT-fdzi&pwd7N_v|i+$&(K64q>r z4$UUGfWK7W4eRg7UJ*ia>cUw0alHgDysv|lwz~<(d7WgG=qq>qrY)EnHhuX_EF@)Q ziyLP{tFQ`Wt_mk`>5{Q7Z+kqG@M3Iau;f@2o3s=(1v(zdYHovW|EGqO3|iGLL1^4S z(+BxHZx9h;3&O)NcQWkhmi1|{lZQLZKESl`_tJv;SP6Ods~}o~odz%9a0Vp&e2W|R z zn}O?l+~MWe*&4^>QWF2T2hQ19#X`b%7c?*?WiU-vC(tn#=Tev+f8<*$GZJjm>~2I- zxtB;A@&$vm@r^BYhPu@23(>nj{DU9(v36-o42C4u%0ZQ2Ob0P@b|ahRttA#3D&+4I z*$F4rZRe@K{aYwmIwFXxXUE0K)TrJxAvYq+1K&2ZpphZDiW5lW~V3*l zu4kR{v(i_@AlrshFpPpG4Os~i5M4ffM8z&bV*ZHWN)M#OxWG;&#*=4~;HO?1aZ=NrA?_HPoCeD0OTa|7LCf|n6X`B~8#CW%l)HeoC<8AzaVJ7RT~xBwScDzE>JhrB z=-MN>rMo};W!u)bwDwR(0W{N=3JTsKBE15WR(9izpgLAlJ)#ZfB!M&^oRN(~epQ^B zSQrc#npHkoqw3jOoKR?D9RVt-K%hhUJ^2 zZvV%>NI+jhF2l`6H-ZwaddcTQK9kW`!zhDDFMKev)!+O5-9NnlhuJ^gAptEGfBF)n zr(Yu%3N>_fXxGLOOzMt-L*A)Cl@0Ke`PqHyjU*zMzHA8S`<^~B{onf2`JanHLb6*{ZBFFJqw(RgbJ;`Jr3MUkN@~CGk$W^Kkt(j!+L|+h;*lD zsU-Q~e?g7z9l}cv6`OCNVy&YS>mA0TrwA7@Uqs{H-8(GJ zy{9*QVE3L$MfK%kCDTW(rBMtuPVi#)Al|x$Qv@Vpo50D!9Wmx!yxDIqzB_?>nl7p7 z6J1ohHzW2v)7;QVrh+y(jRXsAbwGXNAx!5@;$UYL(@n#TDk5G+nf=AUP>ApHF@Fjo zJXIPb8)fgEw=i|WQCMDE5R{Uv9gm0*HUYGMP`-mZmo$9IBJ4+5WR_($Cw2%=4K0Fi zv$fM#IqFavI84uN1Bi6D>T8wwv3=5irNHSddie0BlZ)~+LYicTu8=8BZHObCz`sNA z)T*?U^&>Xvxv@Uxm7>0rQyr@m;2QfAHG8{RQ*!8Fd)NXC3T*Y(Zk3_16|oobKy?6}Bl|y+KxXrXp zs??l`=}Qs9=FyDH)K|?vYb(>16xHL$!gHZt>dzE_h+E?dM-6|<_Skg2(#k zkb(~>aBm7cm-#0_89JhB{8)H|4kd>eu>=@Bk&G~)+tDeGYkxKiscgj>fuU6Bebo@P zjIBRmxbgv2rV*dh>6qKESvLJnlq?h2H&k1qowU32E|C+kLeD|UdX7w)X0H0t0JmOZ zswSSDapSFq=b@0kl$CnP&(%X^;>w~E-v&4*+_D`M!kd;APlfHY(-z_o zYdHc!QT5nXx&AUr`rl6A5)aNEK}Hh-B?fL+Nfd%7f{xkVVU#5Z$j;)6_fV_yVIM9}(2pPad9!gP?CHIFmoGF$;z|Z}Me|I>h!Vn+$dfFq7GUcEBQi5z z;`b{6myq-$yfQfskv+}HNcSt<9|BVB`)=14T3f25I$!G7kI$DG9QR+M;I$k$w2`{2 zxb^8jrMLS`5G*20M*K5GB(hwTkboCKmT70Lb@+bv()^$6hxjja6#SPO_5Tx1<+|3x z&CmZOrgALt3aarhj2q0S8EpRFGnLz^Fy3Q~e0;FTm6iX&>B3vh$NzEj`~NZa;{Tsp z2rrF&2?|Iu-Rp%;Zzzarxwx3r2@g#2J7PgKoQGr3lI6b) zXA)YZc(nno2~ZTqNkh`VE0|?=dq2FE3H^K@SP6(q0;>p6~x{2_~6;f5t} zfwHeCKvt+DTnJ@gn7o1HYkg!jE3$A?O>oC1I2i^|;3Pg)<7Y+@iRjhdE2O*x6%e{W z5p(@q4edmE2^h4v0$4q?i=WwYp^?S33`z^o%n24rqIxX;Sq_E}=6W}>CQh-O`)idS zR22Z~(SB*8#U%P7f%kvQXdiw#zxwGF5EP^@{bp>G)qH*ZnaF70Fg?6hn&Y~C-V>B- zAm#JkIc4QyY84z3JCl*c0(fQzf+Ia*>#}K>l7S2_j}giw>g)lrf33Axtp`&9D}zbH z0LI(l{pwQ6IbD|s9FiS$_C!NLQy7a9sunfWh)@VBWnx!dr|1KPrxnai2m_6+h5v7j zho^|q}O;S!FnuMHIbT)5}|iDmcM_4z}Y`Jw`4-IhS;;ZwK0wb1ygx7yt~hLcgjlH zZx1U9XhG_*p(^exPCwC8JJcamMLi8`;ZXrem6&5lO!f1QAfsc3DhR=cWnMmZ3Y@J* zStx+1*lhdT$+CfoJ`lZ`L0wt9p)oFM>8M$?KiclyoqxDm4Uk`xIYBQFDpKU1c>oC$ zivkTVv1Dy4_`2{Au^-C=aU!v=uMoJ@n{_jDn_?|x#|D+NPA*hMfn9gsajqQ1IWcPt z)TaXcz;?dp)#9Jt{o$Y1FaFn~XJrx(dtSsz01tav<3?Kg_Jd5mp(zP;A&>>e^xynb zDG)7L*-5Ft__uv3)==x5Pm;RW9Ub?{UA$>&jE5ur%DTVphmQNBt=;X^ll=Yk>&v6` zTW@0~r#4Ea+pYUC#~37nYEPN+R% zC!Fxk;qmw1QR7Jgp0nq+L*@9);#BYF$h>?AdIR?7fb0(r7FCEM!e4HC;utQz+mE?O z1s2kWcNdJ!D7z+ZjQc22jEnEKyMzdOTs!z^NZW1h-EGvVg4ZX!&7H+HxaJ+<-5G<& z_$}igdBO8e*HhI*PtM$O3z`r#sZa{iAjBhWpd$VH2?r|o<9sta=zhad9j5T234pzA z4q_N9Qv!NeZ^yp&vQti z{J|Y@SNQZPE0VP*Qzn9^OhD+c1;q)P7bO3(sB&;Nd%|H(IQzR*;vjq+IeM_g0$(nY z2-M}_&M0t<;3_j^B?njr5@gL{%~=B~s`a)_h`1_7yZ|Unmb~IBNW4AxStHGs?w;(i zZFO`0{-Sp-$qRYC;ulY5nBS(DpjAU54{PLDuu26aZ18>M7Jw1nu)L<$Di0}A#XF1I z7dDK&hV>!Rb43Rw*JufGx~%2FA*#ucWM+z_pDLQbJ)LJ0{niJ&z3t1Vqgi>Xf!7vN zW`qXzg#}2N?EAX;HL*YaV@lcmD#{4?u&8XLhB-1>e{NXnM`H>=P5|K>_T!)*e!2PJ z)A`N6|NFmhNN=Ek0eZS=kxrp^8Nql4u6spSaPYrTy?OjWAL0Jnd4vS;5qM~|L~e{Y;!gB zkHn{0wcE-pS~CvMKrM+S|E27el@x7J|2_`ADL=OJu{EiyGF4)U(?&fUj7T7Z_&P@0 zo>)SS8Z-|MRi%}9K7CYS1yn-x!hH&bQ6Y}^c88n8z%CGt{Bqz5klERb|Hg{P@*d(Ax3fucp05l52J{y3K2mnhKUealdT~JxG zS)c#R(o~%2B!k!`r8xtoCff$9)<^RXjXPNC*P0I+sCnyEZezdr(HgHev)FcurF^>R znid$-1y6idV)??3{~SmY%a6Q)g|v}}_LD-xt#05?R{98F`tr&S|H%ZtnUZ4~Z9@KRZz{zGi*eaE(&#H4 z)_PXZG?k8>o3nFWhM!&}@?4_(68ag-F<~K!#UMOzEn>6oMz5Z$h^lv()K5NJz$~uK zOVB{x(D=)9RCo&bX?>1*d8&}{hd*7^SM<|0xI;@io6xD!EWr6 zCTWyc+70WD$w2Q@=du`)xX0vd5qDL#hD@wD4M8VL^C`6vGb+-!nemW16DdlsIB2DF z?ql5Ul3q^R^Db9?CVTzxPjU-*Mby5Z6Uh%?S%{J*tVoirjutA4-%}kw@fL3B}V}0cg&VS=Q86ZO3Uqjas}@OBciw)kuF$nS6T0 zG<_Z3p>1XpsjU;tr?X$(`uG`Xzfo$u*ZksVx`WH)Q@7GusYPqI`HP>aX?Jg{cXX^O zx~jZ$c?WNu0n>OY;2putFW*p{dmjQ8-asMp)1}JDHXGs;I=o4TT?^8FdW4MJJAUSb z)5zk}r9qvzUj3Pt&;A|5->g$qjqKq0Kr+bc^~6C{F?4@VPyJ$qihn87XxQGW)cCFg zGXmpu#`>kG4afIm~UHqE|!kYj!I`FeOY_-nc z=YXizLh`FOGoJB<0T4S;_mEO8KFd+7`ynGR?8U$zSZ@2Ppi$I#S%i`9f}j@ z>!|;#jl3i_rDz9MVW2_M`Kfkd7C9>IKvp=ncB8~uJ_wpS6;y1cbsP}7YmlwL-dUU} zst2zzxTCdhdRk)}!|qdt#Ignp@benB1RR&bLe3O>4HaX?g%t0JjBZ?q0u~{*X_WC! zs5k8?5)%TGU;l8GSV!-}9!o3#u8ZtF3JH73?DSn&DP|lq;x~8i%2}qN_}};9&pX$* z@7=-nL)~IOoO6j9N!%ZGM9eio`$y)(`E-3Sb{*qwZu{yWhrd$5=_{oilH_o%gPkvP zP?|E72V{~wh-443K$bGcP4eeRTl%6)-9(Yt*SRRj&XK;ql4}%nWft>l^AP5^`U2f6 zU3>9?5tK@Kka|+O`}%_iiVig$l2(THQMU04#=N~LCeY#9-0j0P!5_MqrRO`^M z(gdqE?AE3tfZ9)O^XxeXMXwLhsexj@j=28C#F`3>-Ht9=gLoV6U%mgu&HqO zSxJX(*zJ0!gk))`(=6FU3#CXKUuJe8{D326UNe{J-Ogh_Bz6&Jk^-t`X1N%_D%h27 zkoSF^khlmWkbjG;jOM9-v`4qCmp7g@Gd2OMR}2+DCeKQz&OvEIPmsnbot<*cz(E*lz6c4(m9AhtOp)5`(c4Rqqn$Mz$lT`EqYktoz zvS0$apnc$ZHuRkvL@Qooi{wT~U7o#7FF0|I+*Z7YX3N)r%NsbiO0h;30GO97#)Y>r z^6;^9^yt!^qnwo{>1zb#bbDLGUthn@0oO$qBZRRPlFHBEl(r_BUqr$=+p>1?KkqNE zE zl@TPVFIhF0$h)-*Rjq58RO_+{FI%M&dkNBZk9&@}?F>mHOGTtaptV$ax86-tjSt(h z_71HF1EIY8eOGab0eqmR$7DPZCu#Kresb{Bv zf!!^OeqbXN0hS+mM?YJf20OSJ3?hC>Pu>9*1leDOHQoGgtAX?+c#y8XT;#_|YHDc71*Ko2L-7qrt(8Plx^0XRcf6xkvQc zSf1XM$awRvHvHyYzk&AV-J{WSm0uY01bKHyzfiAqK#Lc;*pxq+&ds|-sNTH0Y7L$N z_mZEo?H+k7B_W8TyW>^Gx-^o|7qQ#ah}QioAl`$+^qd(?bGE?C3WUB zm_RK>g2p!G;8=44ZJbH>G{ux8FPaBNnhIoq|BBbbeGL!tbFpw<3_NyLn16FnokW7ws&QMmy|@z5Fomc!<{qMDnr<~fF3 zY-H)tV~)4)sLpowQ0a6?qEl7A-r(*X|2JcU6p?hfNO~oBDeq0sOgXnBU~E^exY(4| zKV>JyWL@WaV+IDis}38j3L0`ucF&+;U{_$4AYX-D#u%@PI;&{lC5SaOir!~brZSFF z6Bvb<&gxFdsbs6pF=wL$%5a{{ZZ}P3RY42gf@ii!qp6<31SHH;Tq|pWyO@TLr!X$r zX|kC{sE%PeDpVaLwcZMYnCORRyEnZ1)MJ{HQ57}HZn%`yIVqkF0u$|MAG6E|JBCHd z$WUrUz+|t{j?G$;lHPHJKR!bJm-4l4%*vh>DSM2zWmEW>3pJ9igH-o#Zr?o3gu2Xi zWVfDRf4Df@!<~K>*m_c=QsCn-oN?ikC}Cau>?R`2@(t< z_2fJrXIJ~rAtT3+%NNM4;B|gi`B-ONN%7o$&A6` zPOPxcClbu9Jc>z0!XX31KnaG`c7t13!1Nf5v2!>FBy5{Hj?{wW2+bXAxqXo{yh*$l z)x;5~W#&adw6e)rwBMrYS^q%ApxWOk?86H@;r0<>H3LcvSflhCL$-TI+{nYa-L(o| z0VzOGM%%LtWb^VO7w*DyUZPTdO2r66VxTzpV+g#Hd~SB_?r&mv80E-#K2f$7S0G`A zcD2P6NGCG*LZBWc%+Tz!FP@pA`+r%nM{$qE;O2Do51z&Hpn`UI}tN zny!_Ogxy)@LsF^iwo>>EH?oQA7)9+fzn3^FM*GK`sHzpPN=z|7fC4T?&F8BNYfm1n z!+7F;to%-<>n>MTn9*0bZ}3&zT8n2#g$1nVUnW28s1Vg*Rc5A~6Rm?8NVW_?(*93d z)+tyrpk7vr*8-5LXr69A-?^(oi5AFQ;51(lXor;(L5CQMt>wnb*uCal6Hr0=+jau$VmB|QTU z8q|MfdAd|foFeiRx)NkIbU*A-MMp7Wn`EE(j`rd{f!mc|KI@myhueC6SwdDT5eq82 z*XL$Z9M%-)t^Dngex+s7&`weoObb>04~yVUG4I1Y2%iBwl%R6S&kvRzmQ%JoTKSEo zY)#47!Z#1Q@zeR{##K9R=~I^3r6jNa%Dk;9=~|j=T%+Pya6b7Z0wV@GqL%q)3qE_r zifijU+uSpP%L*2JOZF-DE1_Mc3~t5Z8W5RF+DUXW;K;SOZS~U)aDgctw%6vd&44wW zUNcjCxo#-+5(I9~_;h*o@x^~%7rd-uWjrn^tkG<)N$ttct2Z08Ro2|)NYiLfWjmo+ zNX0xrZr?rS$y}3eO0*D9&N?q0rsiPz?Xdpd;IPcTQk^t?e_a+;{if$j=6Sklid&Z| zjnt2ff*^8u2m2j5X0>Y+1MZFdH#@I~RtSQMp&6vX#nC+mSZ!B~it+6(m$4x@Skp_$ zkZp`QMP9nB8q}pr17E>qpTd3456%b(3;?@kQdzEw19?-%@>dOB}T+gzgxsqoAbwJCnj_(q;%EDSkp&7F{%$k0ISeaD)8C-z@odg3YLDS#l;esz>c>Yqw>@TzC-SUwqG)wSp}ckfK- zG^y(YZ24ZxkuLm5+9Cu>@iovKX9{pA0deYRGEKHmv`mQ#Od3;3e#hc)J?z$=e|qL?T`)8tIQ(18 zwByp6JI5K!aH|X9S|V;4h1B9Ux!A$2-U;W3pv6UgfRBdoDxDFKXx2;%V>a!s2@}PEHK2 zwVR4ayxR9OZgs1>EBLouw-MJHeTR`$u?Qo=`;JNtpIYR&GSB=ZTeE#NQl5FMB%+9)h%l&hQLe>)K&8v94pc@0+auiOuR!}}V`5Zh@M~2hwT$yEfe74_%>3nM84%k9P2SWO@&K&!? zcNSUFx9s2Y!FRWjmp@ku6rKt9TBjor-~H!C<2VUiWoh>!SZ64P)9Ct zIjc+U$sA5S9tCNth_!6QI2{}HiQg^abRx(5c0&vKH~Y_f+;#YE`wQN^XBXySHxKz} z)M<{-h^Z#%oBM!sc&8zTZd_FQZ2baeMVXLzajo;$rovLSVY}&EpS|^S5c~Q^ACbs# z{jWcw=d})Linp7&=Pw$qBGcNYtf9&b={`s-M{)GL*ZgF;{yMbNRo1V^xT1Pvsu;1@^KKZj#swubT&h;UN9&4|19$ZCs2<26tmie4^**&knNp(9Xo(lcJ$Z)=g1vmAdGXQI5 z8p{v0U#`F&l=?}!9SNMQM$@ytaUY88JF$f4@_XxyKs#g3g_~O+c#e4!xGBX1PF5%I z&=AQt83^XE4xtl*fWM$g8w|dU;X<@44eE`_z?6_JC^3$@%{kkIrHQ&nGQx9(Q66

ar|T z23kpB1uL_O=Ert`?)tg)s6?x)`lDeW#BhgH-2Aw`{}TEk3{bLKGP_<4bCPlh73%G& z&z85IT-vJ^q3++tPCt>Ce=WYl9puDybkC_E)@X_{u-PPq=U2><59d^}ql%p zCGw6&x6nbwfP&PfRgDH_6trhv=LP1|J;GY-+{z+uuoAoaVquh3+cW1!aLFncnIr6w zxSVd1^GFa94-?f)V-@|N<}KdT$YXhP1qAPu#!BS0Lb?$QUWd!Au1wjj#v1$<{8L%o z`VD-@aQMtu#<_O(t*B^wpxv2vI zOLcn)f>ur}rOI-J*|bEUn=1K8Xgk+n$cZzN%`*2aQ%R8u(*XFk1y-3$H|QSVT!M#%ADY(iZF$tgiLsoEx&d zQcTL7_I1KnCVPQMX^&b^@+a6Wo=_4;DpHsd z1}5I9az{uM`gKud^{lKD_MCH7kRhnY(&EzWmFbJohZ0XF{2LCdXL+wGGiSqnOUu-P z?0QQ(6KaVL@CN@I9V9?0dDpagJDeFDL*JJ4p$R9koFnT#vrdxk@-K-5KgT&DGUZ!v zEx#wD)i@8!8HvQb>fJhON9t3xxYn7;RW(#W!*sQ#gzt54bY`AhQ2=gw57iW6&aXoW zz}h#nExpXE8M?17OcT1YlT#`i2A{g5m7{+#0=}WCFkIf4+&At)$z#9xGp*V!lt^hL zkMv*{?PyXi=ed_3{xor`Z-3gUD%ha;VjBs)HZW_xtB&&fdR$_c{PI=7pwMVf|llS6F! z83>!K_gA;t=Qg8jojYH63{RBarJVnrsvN%S=*w$lN~0bUJo>}yJpyoqd1I1WmZ)fX zYk&J5VE&?9!)_}6gRR`nMqS>y@xbZUuASqHH#|l;`c|Jhoid1IagL$9_47d{kXxPc za8)aiN&4>GNw4Bl^`A_#{*(HEt-s5kJvyU~pLV{$4`65>k$GJO3UYaJDjSD6;6CW_dT@vtCT>vVs9|eZ3Yqe?f^@C! z5=UpY{{q+cbH+oB{&Tz7lMzZ<)8Un9d8%c!rxf%A0n37??^K4Ri;lwN62rB6=*o zC*t8CTrx+H0a0vUUT+_%rC7<7ei-zHOn8}6}2 zD8c{16JfyzNRsJy+j~~kT{5}eu7rUkO~U;hL9-bNA3=TnvW%611|U*cB1|6nVrlV* zH%p7mq1$*R_|hPot>!4G5(hz}o6-WDxw=8{Ya#ejFJ_ZHcIT>l&J3&hpjQn$s4S5f~1p9Vw3GwRq%z)A9DSHY>TpMJz)Ku`s_k$93#6*=?(q-S(h= zbT-)Cc?moH@WWp=pALGxX089?nCmWj_yCB;0AKqA7va&i*}C5Ox=Ce5;XPI@_pF(L z7Tm~(P=_|if^P|kS*(bmt|v-9ry|}W$f#T>9N$t010`b%E99Bh%4k#7U35q)cjz)k zNjUT}Lb1zSx_EYUty3_{qC}-yUO<7PB$IGG)+Et%oewY~8XOSfN<8`rrOLVB-HxNZ zU%U9u#7z8QuCMaFq`n}rXs{0#7sk)4%1MSmN;iX`EX7qs{&G{1cAM;P_mf1)D&m2;uJ`>vHVSL%zi4JgM5ga> zFq-}T;m(cbugJt;d;tTFeH4BSbfF}Nuv{|fKm5&7re|4uffomc-sn6cQL(!vxz+a* zHB<`@K}kZ=w<=B}S5^wq;hKv3B7JxcJ~lJ6cu6J}{l%=}X zakrno4c$z-9}b#_6mwhRNbu3ylED`T3KFQSK&s|GhlT4R=Ls08S*+lG?7+OSEaKDokOIu zyFgg9u&sAQ5$4yWPC(VI4%2|bP*`h2yx2nDfQ@fs*xn0tm7C6zQgr=;U&8A0?9FS+ z;b&8Tmh5-X`R+mA++J$TF8GuwDa&DQ2cXSe^CBxcMC~_fY&B}o)v|17-x+KX=WC@| z!pL|;h0%O|yc{l zu-j=xPC_u__IQqqO8nx9e@nab7yxdsYaN)-^Zr2S9t)f}5Jl&#azY4T=ebD7D;dH~ z*W;{3_bf%~N)YzL+-oRJ9$BtP(X5Q}d-5&(i0-LN;GL4>ul_XndEBL{=*z?H)9Qmu zZCojy`1Wt219B_6&BxxUh;}IgZz3K9;|p%E{|iR4u2R#Wz379HPj&c+zUOM4;L6SBGy3k0j>tRYk5iR) zG`s$p`Y!7$KXB`p=}6xyhh@;!bpcgaGrjtXC(UGsG)@FFd? zD90%)C+D{)Pg0^7F{{DqP;wG%Acz#@u21%NMT`eW-Q$P}Qh%X1| zY}Wj1Ir|QZsU75#C0Z3D6*|Q272|HXB)`9>4zn>Nz>+S+ z(ZHqch{Sb%jahzV_g{_TYQkLaK&Ajii4eEF+atC!)sP{+aDQLB)o}yR7`7}eFJbZu zx$Q=0X?=5k^}**Hm&%pd_2*B%+Rzy=(<^cz{@4D%-h8^Uy6~ADoE?k<=EefS_R&RO zF~!~PVDGGI$BkJWv8!8tw)A9^D>XK`yMvP)7EvRqJzce7(A4Jslf_35H(|kXXc63P zM^cP+Pylo1&z9+n*1op5jFyZq7;mdv>q?u?zkD#i!WqXZgXasc z568-%RT^`)A8hyG4oLeC*Ou)okG@=4Q{7OD7!OBYx7q*ZXsF(s$GOq^{Q46Xu(g8AeDxZ;aqqveXb z{!1H2-Ztm6_Uy~WrCT4bOauMR?jZ?ENBIMrkM6I|KS=VsF1B(LG=#vV-7#S%SAa~< zEx)WAf34$i$Un7I6c1Nn8Yo|8vOt@B%O~Cm^cYB&dyqlS$z|n$>oz6-j841A+wuLi zhm|+kc>k7=kavfuLKf&L0Vg@UjONHp%ZQ`krrA@F>8(bCPM9w0Lf1?57FzxH(Uz-g zo#BXpmtYvke9{m#*h&S(=bnlV!>pkE5<@6qK|)gQBr(RBn0rPqrS=f?G~{f@f__R6 zO0ryPp(@03WT4F1>K#-qHn?krxDUH zW6DE4>ns5qHKY{6BwGYV7fxMeBtV{0tRkU`9N=@;FjSU~7z`}$B613ZIqDu<{4*XR zP1*Bc-NYwd21ZgvH%s)hyC9^iyIIiLI`Diz$`|p<_?nwtCt|mZCrL#z_UVnzvKa|w zv`aC)?j3iB55Y^gqMjowk0L;OmncyZWhd>mtbv3%ivux@+%T6@{jvC zkH8zdchQWdRV3{F`)C5we;Gs$n!$X$QTwO$@QUfU_nPP zr7k$>MTk^{wZBSOKyj5{vs9C~Ipx_dP*gA84UoGLo!~_mZ4ge&reJy9D;qv^qq;T@ zNl8~Fx;1#}SnRvuVMl_zES$2UWK%{jv}FeUJyi|q%VKTYqy%&Vl}ho{q_d(`Pp(QE zMhuB_7%=kOlDe9KT|Tcoq6ugdK+xu>WFm{n%KGM~i>qtv6h8m_eY8;i{%m1A33|1h zVqE`5G;levevL@LOA0EnttYtgv!UBjl{)TDWh(rCgAH~pguIR(4{^4R8ZS(DNDe+q z0QVNXUs+4i#a8KK5@EUfk^3=EC^*j2mGl=;%CdawvC51~W-Sk|ye;V}dV~*Tx-Ix#oLj73F9z z5gxOm-pFd-1d~K?xLW0#=uxrN%&0Hb_sX)olb@*N<_LZ4T*6I`jEB&Ej(cJ#->5lH z#k@tZrafinK936&Poi)sB-72^Z*k_X40_Lrtj3>E@BG(MB{PHsq3CVTqS@Ouioibb6-yCc#UzALaex+XP*~Ghbtqp_+zRZ1N{#3NhOR)6hlP z*mp_!YsY}1u$#Ib-Y#vG93+yU1gT5Bn!W0FmI&>{trmx(uw$5{P#}gVV+F>SN(88N zXu^S8?@;I!@4H562qL*XDn)3+>Qt66vui?r7qfd7Q;LfQ=C)Dw8cIp^w@J>C43V6+ zuaO;XSQeC+#VNbQN0$fM#_VeF$q&IY+C$-N^-%UbT~JjAU>IQNBSOOUZH0yvThD~4 z2e3=#y~PY<{pj=Y-wdtqM}LE9R>n-fWmJ}uD6rgl+}q{`bS_GAbM35)0?$|*1EP_0 zgx=aJD1r-tpn~6a@D`}=(5?k{T_I60Xt-Y2B9oL$pa2vLw@P*gFv`;E3_r{acP(F7 zhV3(jRe_X*h=wDHE1oZ2D{Wv_YdRSeduMhfTle`8NZ%cU z$4Li8hs0>oWqK3S3qyx6C1pW3s}9gLOJd_+Dc?t&2(&}a zFE~(q0bTGRyB885W@JZ?s*>d%%$q_~A?RU>I?LV#GqtBKc3SfarBMXD>qBUHewm}v zQUJzmwULvpGUrQQa!qM7iEjCH&@WI9sRNE_}8;eXc^{V*E!X6I8rrSYXCNZBqx!iAp;705a= z{>7Z$W*dXph-_5_3EEd>(POa;lD?&@fmd82KruuXxnrZ9>3(o_<6d*8ocEv$Tp>re zf9|2tHg`7G)}O3wdP%8!&Bn$5s{Wp6+=B1KW-8FSU7WEuWe@=tR;bKl2JzI|6QFP~ zLM=etd)7RiefIn9gQMSJP(S@6SLbaJ0kPCy8Lo{^xL|VZQphG3ux5Egts~52WY;#g zC+y#{H3E)BTKFI1lYP3e{QaBzzoC&Y&TqJT@+weioX!JK6le9^QKdg%CVJsal4Tn*b zjL4+Jih1z4B~^c{?g#Wcy!*iu4Zmt!9hiKf52uce8XGOdQyo9xcyP5!P>W zlBuIg?Y~)W{RM=@;vp#?lT{J1cshXSCTLDoFC9z$zXj@cW{$}?)Xqw41Hh~kSeH)3 zA(;wRD^um9dgsPKENj2=pH>ADTEmf5nD}PdiS0f+7(L`$PFzGzc1`rO)q#(-s}ZC< zo^*51 zGOtE#g9@MU0KSVsyf;XBxX7<96?m=QAHrkr-3 z)(K4Fe9t-=-7u0a}PL+o_9TpDpwirk=6Pun!=!w?DDZ?s)En@)0#oOP^N#r*ox zFMggJXnKU|Xct?*X3Z%Jp~z>?I4O9e+!@q>zjQk?B1jM@LRBaR*Bp8hCADK9OKN^N zJsg>J2pJ)Jp3cyQhFkUcl4#Y7WSUW`71J=R4hX{yu9n}Y#XH9Vr7?s|fZ$=OsM(d| zn6L$mFhUZUUTkkF@O5*icf8phopQc_pkfq;>aEw9v!}cUCU=@z7nA-_FjTZ!C$GfE z6tkIuWtfPvm@LphEih9CW#~0atY9b8IG9rXQ@Qgqv-9!j)xrcnsW-!UXJpNMedGR0&1Ys9%A6F4MH#E;Vj z;IS8>f~8#^|8j{f^Y0qErp9*WgEK*%GwjmIJ&$-kWWyUxYccu#te>y}qNC|+zAs6A z$;DB$CW^TUBc70&1iwwp&C3rqS2yPQXh6)0C1hnf(A*-u7P@B6*&aY{dnwz!q`k$@ zKxmxHr!Tb|GYk1KI3X+m!PZ1g7d9156C=pw+RXgqnRaiq20^iz!q`V9dYTC^xrwrF^DMl&YAsF^Se>LPWZlE79o=g z>>G+zAzEa?T|Taa?|Hk%)?yqtGP}$8UOty#Xn?*6?O9tnBTJ3q7+aX2TQiHD$XAx` zHKD*NNUDU)Ww`jU8-~B>wOBD{;00Fb#$&VrX%05mL7TYU^?W6EQ^3h*(U7z90d48|U@ zh?cu4n$#ks)9^AjT7-ivHQf^Xo$e_)GI|y0Q4?S%_;3TSfWW5_(qzOgCbNVnNkl~I z%6_!GAHsqf;Wak#C5eL|`QB)7jvSH5z5iK`a)SZHQhhje43ffSIGn9ZuLIE^9$ow! zd<&lX+K+SBHrJvFQZ##cQltnbgGZ68wKluk+ndMz&8^XZ)VQZ?pN79OkfvRC4hbQ-Kw|i0<90Jch%5q zp{B0|5hAX{YZSOOsA^7-mz8Erb1;_fbHM&!5n!xS9!6;nWV@>3TN{3Ob9b8&_mAry z!*8P#R;q1VDVFZ+C@)p(Gm6{a)iv1Knh2pvAC-us{Hy4_b+(879mW=A4Sjo?(-hP+LgPLni8@(b#ulRDw=0~V``uFhDH}mgS#qLntEJ5Z%kE#49#PKo*w@lx%7|Or`pp176VR}!DKZwF0gQ=I ze-OB%2qX*m!I81w-x-ZFi1ZjfBnxpgM<0*o_@9j86#AloeC(yEK`Jj&o{W96ciJiD zV9_`Opgg{j%~Xr6w9gq_JyWt^R)hy-1}go72he=X7Vv3FY@+1RR?eC7(nvgw z(t@3NE3g>SPY_)gRk+`avMbc?I73)sjiRpK3F4-;=#NrAlBqoomGsfjJSxQehA7!hBW`0rm({eu$w>2NVUrwg+Fx84ZjRFqR0 z)tKVa+k~{Gy-O-lVCAe+8YD3%E<*3@N(r3OPR}9TmUwg4(NQLbwSPcTBsCHMwj07#D*r2ek zHP^TDV>6RL5u@x-_1qlII+N|dX318Z*aWZWdai!YY@9L z%xJ8Ok%C;PXI#CJTESv?qKW9gh*VsgiV;>DjkE^Me5F@r&R^(cV@9pTxT*Ks4w%(S zhtm=egH%k~_}d7CU)u*eHoI&7@G7vEo( zzRVmuK>|5vrn{%FRexQ&3J~9iG%_7UE)bdGJh>daC#?8E!ujNGS(*|iqCAPUJ;yWM zaDOcLv=NtJMq=?92(R5r#VejW`>;Ywqo-7G^p2nz3THKhAlEPzGS~Vmd08F^f1S+{J>xcdT6OJau>`@#gjHGxI!d6VS zls3klCh|$AB)<3Sqs`By@EoE=i>%8**1c$B)_^}Wc!dpP!FQVg)4zNzbD~av*dyU3 zh6Tj%{Ux#f6kD?XglK0e5ChIu!Ohw4X>3@S+z8>3CPcBnyvPkocWP1{5$F3jH+7~A zxr#9vDZN^TQR{|fJ`j{mvUADEaBk-PbRU&It z9w>Avsm(}>$As$D*wHgSZYn8ahJ=336ahu`(Reh<3(Kgh1z`5Ofu^T~&4#Mte27$< zv5|n$uK}oWD^fWr4{yIZ8je{`eDGYK6t~UfE|-d?z_aWtuG>K#8a=cVX0Bp@ofUV? zHPEx0>4RHU8Qn(jdh><2ywGXW&0@rGcjKiGu{Gt9#il5DPpFRnLla>lXw)=gIBRwC z>P&uo17h6io-6sa02bw=vPzM0VG-f{J|R$e-fk7@#K{ULrXk{l`5`EBVltmLW?1-6 z6&*6;W8H-Gq>EqE61t4j=DxqHTjKJ60dh`d#N3&Z0Ihx#*gP_#_z5@moTv;zTfUG> zqv4n~(A*z4zaBA2M;ZHdbvdG+SgO=f1k4E5|ErGqKtsN!A3kJje6N}9cuQQKmvvsRC~(h%q5}}v8;W#PKUwj&&j&J0QIc19JL`P??)lvlZMr!49&tQDDPxD2p4w9%ROphY*EP(vsvPbao)t z6is2JD^SEH&C;aB&<}Lwt;h;XF`PJ$CHJ_C#ax^yD{O#HOa{s9_n*C7Dzf7%w2#NF z0nz!l;{8}LCQgd*DI#oN#+OOMr^5z`KO1*6aqgFa>-6pkdh^4@3tcBB*C#Qo_JvVE zl`4g4AjuHX%cTr7+6abW9HNF+#-8bdU4}-{D={l%9Zdu(3}ZWcL$EacrSl%WWvHkI z3=pVh5rPd(vy$q&TsbSUNgVWHH4K>@pR6t~ZVc|$%Ulpx%2t;_N@{I|B+U~r3TLrvO2r9+%N{%h|ZED36Gxz$wP(b8B`LYhgGDpYedif`_|mT6ty6lv2pF}J7PtzMRw$!A12pdpGt(Kaq? zm)4-^l5fI^@?^spO+0H=C$loGygU0qAideg3k_Y_0?Iq2@85jXPEeIcO0y`2_P!cu z?yoMsh7~Fo26Wu#^L?#_*oLgn6%^tr>d$8%(v7a-w;xi2?L6Y$Rl+-At(^_m7cjTN z`{$zFGlnuvPs`yTzzc^%kdqk*{CWR=`&&Lb#GbU519 z`RaV}6vSVWawX|ieXo5u#RmBn-PTguCp@T)Q2{7(FePv= zA~Vr`jB6^%*K-27LEn}!<}v`d*`{*YoV_cBx%(xd1sRZA@_e&ZjeWA(iD|5^(ra{3 ze$B%`elyTohMQOqLia_B?Q_vVxxk(Msqxh}B-%i$A3>9SXP6sRS45RNH>|b=x%XK_ zs>1RdHB`#0GhDw&q~+v|*B8_|vjEI4SZN*SUDH!8n!SDZued#2!=feiU-V3AHv0ji z>f~Xt%={s1Am#0E@Th0~GyFBYHubKLw<`pe^q&%?F(^PtaA;1%ojWwqK&!Qm$^2pU zF1H2sv31ofDx2#W@bi;y!Ym}0reEQ`r5Fc@dJi@|jK5CD@x|QAWx5->LNCl;r<~xzXReaNp z#0M6sY(Xb@6DoZ8nG7)G*yTkdD=~P*x>f{1&zJIX&6C{Sz$GgVa0cF<| zfAIScPp&Kd@VB1{j`ujH)_1Bl$6YAP<;5vi{a|djf9b#RXfO2Ah1=(JT+Ja1f z+MaiCxoVzg#y5%6%hSdbia?Xc|MSi%X40QyE-aN?c=IUM=N`NoFfZ$Yi5f3;Bik2Z zI@6(`oY+{xI~E@giFWb@LPo, 2007, 2008, 2009. +# +# based on launchpad translation from 30.8.2007 by Jozef Káčer, analytik +# +msgid "" +msgstr "" +"Project-Id-Version: binutils 2.18.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2008-09-09 15:56+0930\n" +"PO-Revision-Date: 2009-02-19 15:33+0100\n" +"Last-Translator: Ivan Masár \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Rosetta-Export-Date: 2007-08-30 01:38:26+0000\n" + +#: addr2line.c:76 +#, c-format +msgid "Usage: %s [option(s)] [addr(s)]\n" +msgstr "Použitie: %s [voľb(a/y)] [adres(a/y)]\n" + +#: addr2line.c:77 +#, c-format +msgid " Convert addresses into line number/file name pairs.\n" +msgstr " Previesť adresy na páry čísiel riadkov/názvov súborov.\n" + +#: addr2line.c:78 +#, c-format +msgid " If no addresses are specified on the command line, they will be read from stdin\n" +msgstr " Ak nie sú žiadne adresy určené z príkazového riadka, budú sa čítať zo stdin\n" + +#: addr2line.c:79 +#, c-format +msgid "" +" The options are:\n" +" @ Read options from \n" +" -b --target= Set the binary file format\n" +" -e --exe= Set the input file name (default is a.out)\n" +" -i --inlines Unwind inlined functions\n" +" -j --section= 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" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Voľby sú:\n" +" @ Načítať voľby zo \n" +" -b --target= nastaviť binárny formát súboru\n" +" -e --exe= Nastaviť názov vstupného súboru (štandardne a.out)\n" +" -i --inlines Rozvinúť inline funkcie\n" +" -j --section= Načítať ofsety relatívne vzhľadom na sekciu namiesto adries\n" +" -s --basenames Odstrániť názvy adresárov\n" +" -f --functions Zobraziť názvy funkcií\n" +" -C --demangle[=style] Formátovať výpis názvov funkcií\n" +" -h --help Zobraziť tohto pomocníka\n" +" -v --version Zobraziť verziu programu\n" +"\n" + +#: addr2line.c:94 ar.c:274 coffdump.c:469 dlltool.c:3173 dllwrap.c:510 +#: nlmconv.c:1113 objcopy.c:513 objcopy.c:548 readelf.c:2868 size.c:99 +#: srconv.c:1741 strings.c:664 sysdump.c:654 windmc.c:233 windres.c:698 +#, c-format +msgid "Report bugs to %s\n" +msgstr "Hlásiť chyby na %s\n" + +#: addr2line.c:281 +#, c-format +msgid "%s: cannot get addresses from archive" +msgstr "%s: nepodarilo sa získať adresu z archívu" + +#: addr2line.c:298 +#, c-format +msgid "%s: cannot find section %s" +msgstr "%s: nepodarilo sa nájsť sekciu %s" + +#: addr2line.c:364 nm.c:1542 objdump.c:3223 +#, c-format +msgid "unknown demangling style `%s'" +msgstr "neznámy štýl opravy „%s“" + +#: ar.c:212 +#, c-format +msgid "no entry %s in archive\n" +msgstr "žíadny záznam %s v archíve\n" + +#: ar.c:228 +#, c-format +msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" +msgstr "Použítie: %s [voľby emulácie] [-]{dmpqrstx}[abcfilNoPsSuvV] [názov-člena] [počet] názov archívu...\n" + +#: ar.c:231 +#, c-format +msgid " %s -M [ - read options from \n" +msgstr " @ - čítať voľby z \n" + +#: ar.c:262 +#, c-format +msgid "Usage: %s [options] archive\n" +msgstr "Použitie: %s [voľby] archív\n" + +#: ar.c:263 +#, c-format +msgid " Generate an index to speed access to archives\n" +msgstr " Vygenerovať index pre rýchly prístup k archívom\n" + +#: ar.c:264 +#, c-format +msgid "" +" The options are:\n" +" @ Read options from \n" +" -t Update the archive's symbol map timestamp\n" +" -h --help Print this help message\n" +" -v --version Print version information\n" +msgstr "" +" The options are:\n" +" @ načítať voľby zo \n" +" -t aktualizovať časovú známku mapy symbolov archívu\n" +" -h --help vypísať túto správu pomocníka\n" +" -v --version vypísať informácie o verzii\n" + +#: ar.c:499 +msgid "two different operation options specified" +msgstr "boli špecifikované dve odlišné operačné voľby" + +#: ar.c:577 +#, c-format +msgid "illegal option -- %c" +msgstr "neplatná voľba -- %c" + +#: ar.c:620 +msgid "no operation specified" +msgstr "nebola určená žiadna operácia" + +#: ar.c:623 +msgid "`u' is only meaningful with the `r' option." +msgstr "„u“ má zmysel iba s voľbou „r“" + +#: ar.c:631 +msgid "`N' is only meaningful with the `x' and `d' options." +msgstr "„N“ má zmysel iba s voľbami „x“ a „d“." + +#: ar.c:634 +msgid "Value for `N' must be positive." +msgstr "Hodnota pre „N“ musí byť kladná." + +#: ar.c:646 +msgid "`x' cannot be used on thin archives." +msgstr "„x“ nemožno použiť na riedkych archívoch." + +#: ar.c:687 +#, c-format +msgid "internal error -- this option not implemented" +msgstr "vnútorná chyba -- táto voľba nie je implementovaná" + +#: ar.c:756 +#, c-format +msgid "creating %s" +msgstr "vytvára sa %s" + +#: ar.c:805 ar.c:860 ar.c:1185 objcopy.c:1912 +#, c-format +msgid "internal stat error on %s" +msgstr "vnútorná stat chyba na %s" + +#: ar.c:809 +#, c-format +msgid "" +"\n" +"<%s>\n" +"\n" +msgstr "" +"\n" +"<%s>\n" +"\n" + +#: ar.c:825 ar.c:893 +#, c-format +msgid "%s is not a valid archive" +msgstr "%s nie je platný archív" + +#: ar.c:1090 +#, c-format +msgid "No member named `%s'\n" +msgstr "Žiadny člen s názvom „%s“\n" + +#: ar.c:1140 +#, c-format +msgid "no entry %s in archive %s!" +msgstr "žiadny záznam %s v archíve %s!" + +#: ar.c:1279 +#, c-format +msgid "%s: no archive map to update" +msgstr "%s: žiadna mapa archívu pre aktualizáciu" + +#: arsup.c:89 +#, c-format +msgid "No entry %s in archive.\n" +msgstr "Žiadny záznam %s v archíve.\n" + +#: arsup.c:114 +#, c-format +msgid "Can't open file %s\n" +msgstr "Nemožno otvoriť súbor %s\n" + +#: arsup.c:164 +#, c-format +msgid "%s: Can't open output archive %s\n" +msgstr "%s: Nemožno otvoriť výstupný archív %s\n" + +#: arsup.c:181 +#, c-format +msgid "%s: Can't open input archive %s\n" +msgstr "%s: Nemožno otvoriť vstupný archív %s\n" + +#: arsup.c:190 +#, c-format +msgid "%s: file %s is not an archive\n" +msgstr "%s: súbor %s nie je archív\n" + +#: arsup.c:230 +#, c-format +msgid "%s: no output archive specified yet\n" +msgstr "%s: nebol ešte určený žiadny výstupný archív\n" + +#: arsup.c:250 arsup.c:288 arsup.c:330 arsup.c:350 arsup.c:416 +#, c-format +msgid "%s: no open output archive\n" +msgstr "%s žiadny výstupný archív na otvorenie\n" + +#: arsup.c:261 arsup.c:371 arsup.c:397 +#, c-format +msgid "%s: can't open file %s\n" +msgstr "%s: nemožno otvoriť súbor %s\n" + +#: arsup.c:315 arsup.c:393 arsup.c:474 +#, c-format +msgid "%s: can't find module file %s\n" +msgstr "%s: nemožno nájsť súbor modulu %s\n" + +#: arsup.c:425 +#, c-format +msgid "Current open archive is %s\n" +msgstr "Súčasne otvorený archív je %s\n" + +#: arsup.c:449 +#, c-format +msgid "%s: no open archive\n" +msgstr "%s: žiadny otvorený archív\n" + +#: bin2c.c:59 +#, c-format +msgid "Usage: %s < input_file > output_file\n" +msgstr "Použitie: %s VÝSTUP_SÚBOR\n" + +#: bin2c.c:60 +#, c-format +msgid "Prints bytes from stdin in hex format.\n" +msgstr "Vypíše bajtu zo štand. vstupu v hexadecimálnom formáte.\n" + +#: binemul.c:38 +#, c-format +msgid " No emulation specific options\n" +msgstr " Neboli určené žiadne emulačné voľby\n" + +#. Macros for common output. +#: binemul.h:43 +#, c-format +msgid " emulation options: \n" +msgstr " emulačné voľby: \n" + +#: bucomm.c:157 +#, c-format +msgid "can't set BFD default target to `%s': %s" +msgstr "nemožno nastaviť štandardný BFD cieľ na „%s“: %s" + +#: bucomm.c:168 +#, c-format +msgid "%s: Matching formats:" +msgstr "%s: Zhodujúce sa formáty:" + +#: bucomm.c:183 +#, c-format +msgid "Supported targets:" +msgstr "Podporované ciele:" + +#: bucomm.c:185 +#, c-format +msgid "%s: supported targets:" +msgstr "%s: podporované ciele:" + +#: bucomm.c:202 +#, c-format +msgid "Supported architectures:" +msgstr "Podporované architektúry:" + +#: bucomm.c:204 +#, c-format +msgid "%s: supported architectures:" +msgstr "%s: podporované architektúry:" + +#: bucomm.c:398 +#, c-format +msgid "BFD header file version %s\n" +msgstr "Verzia BFD hlavičky súboru %s\n" + +#: bucomm.c:547 +#, c-format +msgid "%s: bad number: %s" +msgstr "%s: nesprávane číslo: %s" + +#: bucomm.c:564 strings.c:410 +#, c-format +msgid "'%s': No such file" +msgstr "„%s“: súbor neexistuje" + +#: bucomm.c:566 strings.c:412 +#, c-format +msgid "Warning: could not locate '%s'. reason: %s" +msgstr "Upozornenie: nemožno nájsť „%s“. dôvod: %s" + +#: bucomm.c:570 +#, c-format +msgid "Warning: '%s' is not an ordinary file" +msgstr "Upozornenie: „%s“ nie je bežný súbor" + +#: coffdump.c:106 +#, c-format +msgid "#lines %d " +msgstr "#riadky %d " + +#: coffdump.c:460 sysdump.c:647 +#, c-format +msgid "Usage: %s [option(s)] in-file\n" +msgstr "Použitie: %s [voľby] vstupný-súbor\n" + +#: coffdump.c:461 +#, c-format +msgid " Print a human readable interpretation of a SYSROFF object file\n" +msgstr " Zobraziť čitateľnú interpretáciu objektového súboru SYSFOFF\n" + +#: coffdump.c:462 +#, c-format +msgid "" +" The options are:\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Voľby sú:\n" +" @ Čítať voľby z \n" +" -h --help Zobraziť túto informáciu\n" +" -v --version Zobraziť verziu programu\n" +"\n" + +#: coffdump.c:531 srconv.c:1831 sysdump.c:711 +msgid "no input file specified" +msgstr "nebol určený žiadny vstupný súbor" + +#: cxxfilt.c:119 nm.c:256 objdump.c:241 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Hlásiť chyby na %s.\n" + +#: debug.c:647 +msgid "debug_add_to_current_namespace: no current file" +msgstr "debug_add_to_current_namespace: žiadny súčasný súbor" + +#: debug.c:726 +msgid "debug_start_source: no debug_set_filename call" +msgstr "debug_start_source: žiadne volanie debug_set_filename" + +#: debug.c:782 +msgid "debug_record_function: no debug_set_filename call" +msgstr "debug_record_function: žiadne volanie debug_set_filename" + +#: debug.c:834 +msgid "debug_record_parameter: no current function" +msgstr "debug_record_parameter: žiadna súčasná funkcia" + +#: debug.c:866 +msgid "debug_end_function: no current function" +msgstr "debug_end_function: žiadna súčasná funkcia" + +#: debug.c:872 +msgid "debug_end_function: some blocks were not closed" +msgstr "debug_end_function: niektoré bloky neboli uzavreté" + +#: debug.c:900 +msgid "debug_start_block: no current block" +msgstr "debug_start_block: žiadny súčasný blok" + +#: debug.c:936 +msgid "debug_end_block: no current block" +msgstr "debug_end_block: žiadny súčasný blok" + +#: debug.c:943 +msgid "debug_end_block: attempt to close top level block" +msgstr "debug_end_block: pokus o zatvorenie bloku najvyššej úrovne" + +#: debug.c:966 +msgid "debug_record_line: no current unit" +msgstr "debug_record_line: žiadna súčasná jednotka" + +#. FIXME +#: debug.c:1019 +msgid "debug_start_common_block: not implemented" +msgstr "debug_start_common_block: nie je implementované" + +#. FIXME +#: debug.c:1030 +msgid "debug_end_common_block: not implemented" +msgstr "debug_end_common_block: nie je implementované" + +#. FIXME. +#: debug.c:1114 +msgid "debug_record_label: not implemented" +msgstr "debug_record_label: nie je implementované" + +#: debug.c:1136 +msgid "debug_record_variable: no current file" +msgstr "debug_record_variable: žiadny súčasný súbor" + +#: debug.c:1664 +msgid "debug_make_undefined_type: unsupported kind" +msgstr "debug_make_undefined_type: nepodporovaný druh" + +#: debug.c:1841 +msgid "debug_name_type: no current file" +msgstr "debug_name_type: žiadny súčasný súbor" + +#: debug.c:1886 +msgid "debug_tag_type: no current file" +msgstr "debug_tag_type: žiadny súčasný súbor" + +#: debug.c:1894 +msgid "debug_tag_type: extra tag attempted" +msgstr "debug_tag_type: pokus o extra tag" + +#: debug.c:1931 +#, c-format +msgid "Warning: changing type size from %d to %d\n" +msgstr "Upozornenie: mení sa veľkosť typu z %d na %d\n" + +#: debug.c:1953 +msgid "debug_find_named_type: no current compilation unit" +msgstr "debug_find_named_type: žiadna súčasná kompilačná jednotka" + +#: debug.c:2056 +#, c-format +msgid "debug_get_real_type: circular debug information for %s\n" +msgstr "debug_get_real_type: cyklická ladiaca informácia pre %s\n" + +#: debug.c:2483 +msgid "debug_write_type: illegal type encountered" +msgstr "debug_write_type: objavený neplatný typ" + +#: dlltool.c:797 dlltool.c:823 dlltool.c:854 +#, c-format +msgid "Internal error: Unknown machine type: %d" +msgstr "Vnútorná chyba: Neznámy typ architektúry: %d" + +#: dlltool.c:890 +#, c-format +msgid "Can't open def file: %s" +msgstr "Nemožno otvoriť def súbor: %s" + +#: dlltool.c:895 +#, c-format +msgid "Processing def file: %s" +msgstr "Spracováva sa def súbor: %s" + +#: dlltool.c:899 +msgid "Processed def file" +msgstr "def súbor spracovaný" + +#: dlltool.c:923 +#, c-format +msgid "Syntax error in def file %s:%d" +msgstr "Syntaktická chyba v def súbore %s:%d" + +#: dlltool.c:958 +#, c-format +msgid "%s: Path components stripped from image name, '%s'." +msgstr "%s: Komponenty cesty boli odrezané z názvu obrázka, „%s“." + +#: dlltool.c:967 +#, c-format +msgid "NAME: %s base: %x" +msgstr "NÁZOV: %s báza: %x" + +#: dlltool.c:970 dlltool.c:986 +msgid "Can't have LIBRARY and NAME" +msgstr "Nemožno mať KNIŽNICU a NÁZOV" + +#: dlltool.c:983 +#, c-format +msgid "LIBRARY: %s base: %x" +msgstr "KNIŽNICA: %s báza: %x" + +#: dlltool.c:1219 resrc.c:293 +#, c-format +msgid "wait: %s" +msgstr "čakať: %s" + +#: dlltool.c:1224 dllwrap.c:410 resrc.c:298 +#, c-format +msgid "subprocess got fatal signal %d" +msgstr "podproces obdržal fatálny signá %d" + +#: dlltool.c:1230 dllwrap.c:417 resrc.c:305 +#, c-format +msgid "%s exited with status %d" +msgstr "%s ukončený so stavom %d" + +#: dlltool.c:1261 +#, c-format +msgid "Sucking in info from %s section in %s" +msgstr "Naťahujú sa informácie z %s sekcie v %s" + +#: dlltool.c:1386 +#, c-format +msgid "Excluding symbol: %s" +msgstr "Vynecháva sa symbol: %s" + +#: dlltool.c:1475 dlltool.c:1486 nm.c:992 nm.c:1003 +#, c-format +msgid "%s: no symbols" +msgstr "%s: žiadne symboly" + +#. FIXME: we ought to read in and block out the base relocations. +#: dlltool.c:1512 +#, c-format +msgid "Done reading %s" +msgstr "Čítanie %s ukončené" + +#: dlltool.c:1522 +#, c-format +msgid "Unable to open object file: %s" +msgstr "Nemožno otvoriť objektový súbor: %s" + +#: dlltool.c:1525 +#, c-format +msgid "Scanning object file %s" +msgstr "Prebieha skenovanie objektového súboru %s" + +#: dlltool.c:1540 +#, c-format +msgid "Cannot produce mcore-elf dll from archive file: %s" +msgstr "Nemožno vytvoriť mcore-elf dll zo súboru archívu: %s" + +#: dlltool.c:1626 +msgid "Adding exports to output file" +msgstr "Pridávanie exportov do výstupného súboru" + +#: dlltool.c:1674 +msgid "Added exports to output file" +msgstr "Exporty boli pridané do výstupného súboru" + +#: dlltool.c:1813 +#, c-format +msgid "Generating export file: %s" +msgstr "Generuje sa súbor exportu: %s" + +#: dlltool.c:1818 +#, c-format +msgid "Unable to open temporary assembler file: %s" +msgstr "Nemožno otvoriť dočasný súbor assembleru: %s" + +#: dlltool.c:1821 +#, c-format +msgid "Opened temporary file: %s" +msgstr "Dočasný súbor otvorený: %s" + +#: dlltool.c:2043 +msgid "Generated exports file" +msgstr "Export súbor vygenerovaný" + +#: dlltool.c:2251 +#, c-format +msgid "bfd_open failed open stub file: %s" +msgstr "bfd_open zlyhal pri otváraní testovacieho súboru: %s" + +#: dlltool.c:2254 +#, c-format +msgid "Creating stub file: %s" +msgstr "Vytváram testovací súbor: %s" + +#: dlltool.c:2672 +#, c-format +msgid "failed to open temporary head file: %s" +msgstr "nepodarilo sa otvoriť dočasný súbor hlavičky: %s" + +#: dlltool.c:2734 +#, c-format +msgid "failed to open temporary tail file: %s" +msgstr "nepodarilo sa otvoriť dočasný súbor zápätia: %s" + +#: dlltool.c:2809 +#, c-format +msgid "Can't open .lib file: %s" +msgstr "Nemožno otvoriť .lib súbor: %s" + +#: dlltool.c:2812 +#, c-format +msgid "Creating library file: %s" +msgstr "Vytvára sa súbor knižnice: %s" + +#: dlltool.c:2896 dlltool.c:2902 +#, c-format +msgid "cannot delete %s: %s" +msgstr "nemožno odstrániť %s:%s" + +#: dlltool.c:2907 +msgid "Created lib file" +msgstr "lib súbor vytvorený" + +#: dlltool.c:2986 +#, c-format +msgid "Warning, ignoring duplicate EXPORT %s %d,%d" +msgstr "Upozornenie, ignoruje sa duplikátny EXPORT %s %d,%d" + +#: dlltool.c:2992 +#, c-format +msgid "Error, duplicate EXPORT with ordinals: %s" +msgstr "Chyba, duplicitný EXPORT s ordinálami: %s" + +#: dlltool.c:3097 +msgid "Processing definitions" +msgstr "Spracovávajú sa definície" + +#: dlltool.c:3129 +msgid "Processed definitions" +msgstr "Definície spracované" + +#. xgetext:c-format +#: dlltool.c:3136 dllwrap.c:471 +#, c-format +msgid "Usage %s \n" +msgstr "Použitie %s \n" + +#. xgetext:c-format +#: dlltool.c:3138 +#, c-format +msgid " -m --machine Create as DLL for . [default: %s]\n" +msgstr " -m --machine Vytvoriť ako DLL pre . [štandardne: %s]\n" + +#: dlltool.c:3139 +#, c-format +msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" +msgstr " možná : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" + +#: dlltool.c:3140 +#, c-format +msgid " -e --output-exp Generate an export file.\n" +msgstr " -e --output-exp Vygenerovať export súbor.\n" + +#: dlltool.c:3141 +#, c-format +msgid " -l --output-lib Generate an interface library.\n" +msgstr " -l --output-lib Vygenerovať knižnicu rozhrania.\n" + +#: dlltool.c:3142 +#, c-format +msgid " -a --add-indirect Add dll indirects to export file.\n" +msgstr " -a --add-indirect Pridať dll indirekty do export súboru.\n" + +#: dlltool.c:3143 +#, c-format +msgid " -D --dllname Name of input dll to put into interface lib.\n" +msgstr " -D --dllname Názov vstupného dll pre vloženie do knižnice rozhrania.\n" + +#: dlltool.c:3144 +#, c-format +msgid " -d --input-def Name of .def file to be read in.\n" +msgstr " -d --input-def Názov .def súboru, v ktorom sa má čitať.\n" + +#: dlltool.c:3145 +#, c-format +msgid " -z --output-def Name of .def file to be created.\n" +msgstr " -z --output-def Názov .def súboru, ktorý sa má vytvoriť.\n" + +#: dlltool.c:3146 +#, c-format +msgid " --export-all-symbols Export all symbols to .def\n" +msgstr " --export-all-symbols Exportovať všetky symboly do .def\n" + +#: dlltool.c:3147 +#, c-format +msgid " --no-export-all-symbols Only export listed symbols\n" +msgstr " --no-export-all-symbols Exportovať iba uvedené symboly\n" + +#: dlltool.c:3148 +#, c-format +msgid " --exclude-symbols Don't export \n" +msgstr " --exclude-symbols Neexportovať \n" + +#: dlltool.c:3149 +#, c-format +msgid " --no-default-excludes Clear default exclude symbols\n" +msgstr " --no-default-excludes Vyčistiť štandardné exclude symboly\n" + +#: dlltool.c:3150 +#, c-format +msgid " -b --base-file Read linker generated base file.\n" +msgstr " -b --base-file Čítať linkerom vygenerovaný bázový súbor.\n" + +#: dlltool.c:3151 +#, c-format +msgid " -x --no-idata4 Don't generate idata$4 section.\n" +msgstr " -x --no-idata4 Negenerovať sekciu idata$4.\n" + +#: dlltool.c:3152 +#, c-format +msgid " -c --no-idata5 Don't generate idata$5 section.\n" +msgstr " -c --no-idata5 Negenerovať sekciu idata$5.\n" + +#: dlltool.c:3153 +#, c-format +msgid " -U --add-underscore Add underscores to all symbols in interface library.\n" +msgstr " -U --add-underscore Pridá znak podčiarknutia ku všetkým symbolom knižnice rozhrania.\n" + +#: dlltool.c:3154 +#, c-format +msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n" +msgstr " --add-stdcall-underscore Pridá znak podčiarknutia ku všetkým symbolom stdcall knižnice rozhrania.\n" + +#: dlltool.c:3155 +#, c-format +msgid " -k --kill-at Kill @ from exported names.\n" +msgstr " -k --kill-at Ukončiť @ z exportovaných názvov.\n" + +#: dlltool.c:3156 +#, c-format +msgid " -A --add-stdcall-alias Add aliases without @.\n" +msgstr " -A --add-stdcall-alias Pridať aliasy bez @.\n" + +#: dlltool.c:3157 +#, c-format +msgid " -p --ext-prefix-alias Add aliases with .\n" +msgstr " -p --ext-prefix-alias Pridať aliasy s om.\n" + +#: dlltool.c:3158 +#, c-format +msgid " -S --as Use for assembler.\n" +msgstr " -S --as Použiť pre assembler.\n" + +#: dlltool.c:3159 +#, c-format +msgid " -f --as-flags Pass to the assembler.\n" +msgstr " -f --as-flags Poslať do assembleru.\n" + +#: dlltool.c:3160 +#, c-format +msgid " -C --compat-implib Create backward compatible import library.\n" +msgstr " -C --compat-implib Vytvoriť spätne kompatibilnú importovaciu knižnicu.\n" + +#: dlltool.c:3161 +#, c-format +msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" +msgstr " -n --no-delete Ponechať dočasné súbory (opakovať pre extra zachovanie)\n" + +#: dlltool.c:3162 +#, c-format +msgid " -t --temp-prefix Use to construct temp file names.\n" +msgstr " -t --temp-prefix Použiť pre vytvorenie názvov dočasných súborov.\n" + +#: dlltool.c:3163 +#, c-format +msgid " -v --verbose Be verbose.\n" +msgstr " -v --verbose Plný výpis.\n" + +#: dlltool.c:3164 +#, c-format +msgid " -V --version Display the program version.\n" +msgstr " -V --version Zobraziť verziu programu.\n" + +#: dlltool.c:3165 +#, c-format +msgid " -h --help Display this information.\n" +msgstr " -h --help Zobraziť túto informáciu.\n" + +#: dlltool.c:3166 +#, c-format +msgid " @ Read options from .\n" +msgstr " @ Čítať voľby z .\n" + +#: dlltool.c:3168 +#, c-format +msgid " -M --mcore-elf Process mcore-elf object files into .\n" +msgstr " -M --mcore-olf Spracovať objektové súbory mcore-elf do .\n" + +#: dlltool.c:3169 +#, c-format +msgid " -L --linker Use as the linker.\n" +msgstr " -L --linker Použiť ako linker.\n" + +#: dlltool.c:3170 +#, c-format +msgid " -F --linker-flags Pass to the linker.\n" +msgstr " -F --linker-flags Poslať do linkera.\n" + +#: dlltool.c:3293 +#, c-format +msgid "Path components stripped from dllname, '%s'." +msgstr "Komponenty cesty odrezané z dllname, „%s“." + +#: dlltool.c:3338 +#, c-format +msgid "Unable to open base-file: %s" +msgstr "Nemožno otvoriť bázový-súbor: %s" + +#: dlltool.c:3370 +#, c-format +msgid "Machine '%s' not supported" +msgstr "Nepodporovaná architektúra „%s“" + +#: dlltool.c:3474 dllwrap.c:201 +#, c-format +msgid "Tried file: %s" +msgstr "Pokus o súbor: %s" + +#: dlltool.c:3481 dllwrap.c:208 +#, c-format +msgid "Using file: %s" +msgstr "Používa sa súbor: %s" + +#: dllwrap.c:291 +#, c-format +msgid "Keeping temporary base file %s" +msgstr "Ponecháva sa dočasného bázového súboru: %s" + +#: dllwrap.c:293 +#, c-format +msgid "Deleting temporary base file %s" +msgstr "Odstraňuje sa dočasný bázový súbor %s" + +#: dllwrap.c:307 +#, c-format +msgid "Keeping temporary exp file %s" +msgstr "Ponecháva sa dočasný exp súbor %s" + +#: dllwrap.c:309 +#, c-format +msgid "Deleting temporary exp file %s" +msgstr "Odstraňuje sa dočasný exp súbor %s" + +#: dllwrap.c:322 +#, c-format +msgid "Keeping temporary def file %s" +msgstr "Ponecháva sa dočasný def súbor %s" + +#: dllwrap.c:324 +#, c-format +msgid "Deleting temporary def file %s" +msgstr "Odstraňuje sa dočasný def súbor %s" + +#: dllwrap.c:472 +#, c-format +msgid " Generic options:\n" +msgstr " Druhové voľby:\n" + +#: dllwrap.c:473 +#, c-format +msgid " @ Read options from \n" +msgstr " @ Čítať voľby z \n" + +#: dllwrap.c:474 +#, c-format +msgid " --quiet, -q Work quietly\n" +msgstr " --quiet, -q Pracovať potichu\n" + +#: dllwrap.c:475 +#, c-format +msgid " --verbose, -v Verbose\n" +msgstr " --verbose, -v Plný výpis\n" + +#: dllwrap.c:476 +#, c-format +msgid " --version Print dllwrap version\n" +msgstr " --version Vypísať dllwrap verziu\n" + +#: dllwrap.c:477 +#, c-format +msgid " --implib Synonym for --output-lib\n" +msgstr " --implib Synonymum pre --output-lib\n" + +#: dllwrap.c:478 +#, c-format +msgid " Options for %s:\n" +msgstr " Voľby pre %s:\n" + +#: dllwrap.c:479 +#, c-format +msgid " --driver-name Defaults to \"gcc\"\n" +msgstr " --driver-name Štandardný je „gcc“\n" + +#: dllwrap.c:480 +#, c-format +msgid " --driver-flags Override default ld flags\n" +msgstr " --driver-flags Preťažiť štandardné ld príznaky\n" + +#: dllwrap.c:481 +#, c-format +msgid " --dlltool-name Defaults to \"dlltool\"\n" +msgstr " --dlltool-name Štandarne „dlltool“\n" + +#: dllwrap.c:482 +#, c-format +msgid " --entry Specify alternate DLL entry point\n" +msgstr " --entry Určiť alternatívne miesto DLL položky\n" + +#: dllwrap.c:483 +#, c-format +msgid " --image-base Specify image base address\n" +msgstr " --image-base Určiť bázovú adresu obrázku\n" + +#: dllwrap.c:484 +#, c-format +msgid " --target i386-cygwin32 or i386-mingw32\n" +msgstr " --target i386-cygwin32 alebo i386-mingw32\n" + +#: dllwrap.c:485 +#, c-format +msgid " --dry-run Show what needs to be run\n" +msgstr " --dry-run Zobraziť, čo treba spustiť\n" + +#: dllwrap.c:486 +#, c-format +msgid " --mno-cygwin Create Mingw DLL\n" +msgstr " --mno-cygwin Vytvoriť Mingw DLL\n" + +#: dllwrap.c:487 +#, c-format +msgid " Options passed to DLLTOOL:\n" +msgstr " Voľby posielané do DLLTOOL:\n" + +#: dllwrap.c:488 +#, c-format +msgid " --machine \n" +msgstr " --machine \n" + +#: dllwrap.c:489 +#, c-format +msgid " --output-exp Generate export file.\n" +msgstr " --output-exp Vygenerovať export súbor.\n" + +#: dllwrap.c:490 +#, c-format +msgid " --output-lib Generate input library.\n" +msgstr " --output-lib Vygenerovať vstupnú knižnicu.\n" + +#: dllwrap.c:491 +#, c-format +msgid " --add-indirect Add dll indirects to export file.\n" +msgstr " --add-indirect Pridať dll indirekty do export súboru.\n" + +#: dllwrap.c:492 +#, c-format +msgid " --dllname Name of input dll to put into output lib.\n" +msgstr " --dllname Názov vstupnej dll pre vloženie do výstupnej knižnice.\n" + +#: dllwrap.c:493 +#, c-format +msgid " --def Name input .def file\n" +msgstr " --def Názov vstupného .def súboru\n" + +#: dllwrap.c:494 +#, c-format +msgid " --output-def Name output .def file\n" +msgstr " --output-def Názov výstupného .def súboru\n" + +#: dllwrap.c:495 +#, c-format +msgid " --export-all-symbols Export all symbols to .def\n" +msgstr " --export-all-symbols Exportovať všetky symboly do .def\n" + +#: dllwrap.c:496 +#, c-format +msgid " --no-export-all-symbols Only export .drectve symbols\n" +msgstr " --no-export-all-symbols Exportovať iba .drectve symboly\n" + +#: dllwrap.c:497 +#, c-format +msgid " --exclude-symbols Exclude from .def\n" +msgstr " --exclude-symbols Vynechať z .def\n" + +#: dllwrap.c:498 +#, c-format +msgid " --no-default-excludes Zap default exclude symbols\n" +msgstr " --no-default-excludes Vymazať štandardné exclude symboly\n" + +#: dllwrap.c:499 +#, c-format +msgid " --base-file Read linker generated base file\n" +msgstr " --base-file Čítať linkerom vygenerovaný bázový súbor\n" + +#: dllwrap.c:500 +#, c-format +msgid " --no-idata4 Don't generate idata$4 section\n" +msgstr " --no-idata4 Negenerovať idata$4 sekciu\n" + +#: dllwrap.c:501 +#, c-format +msgid " --no-idata5 Don't generate idata$5 section\n" +msgstr " --no-idata5 Negenerovať idata$5 sekciu\n" + +#: dllwrap.c:502 +#, c-format +msgid " -U Add underscores to .lib\n" +msgstr " -U Pridať podtržníky do .lib\n" + +#: dllwrap.c:503 +#, c-format +msgid " -k Kill @ from exported names\n" +msgstr " -k Ukončiť @ z exportovaných názvov\n" + +#: dllwrap.c:504 +#, c-format +msgid " --add-stdcall-alias Add aliases without @\n" +msgstr " --add-atdcall-alias Pridať aliasy bez @\n" + +#: dllwrap.c:505 +#, c-format +msgid " --as Use for assembler\n" +msgstr " --as Použiť pre assembler\n" + +#: dllwrap.c:506 +#, c-format +msgid " --nodelete Keep temp files.\n" +msgstr " --nodelete Ponechať dočasné súbory.\n" + +#: dllwrap.c:507 +#, c-format +msgid " Rest are passed unmodified to the language driver\n" +msgstr " Zbytok je poslaný nezmenený ovláadaču jazyka\n" + +#: dllwrap.c:781 +msgid "Must provide at least one of -o or --dllname options" +msgstr "Je nutné uviesť najmenej jednu z volieb -o alebo --dllname" + +#: dllwrap.c:810 +msgid "" +"no export definition file provided.\n" +"Creating one, but that may not be what you want" +msgstr "" +"nebol poskytnutý definičný export súbor.\n" +"Jeden sa vytvára, ale nemusí to byť to, čo chcete" + +#: dllwrap.c:969 +#, c-format +msgid "DLLTOOL name : %s\n" +msgstr "DLLTOOL názov : %s\n" + +#: dllwrap.c:970 +#, c-format +msgid "DLLTOOL options : %s\n" +msgstr "DLLTOOL voľby : %s\n" + +#: dllwrap.c:971 +#, c-format +msgid "DRIVER name : %s\n" +msgstr "DRIVER názov : %s\n" + +#: dllwrap.c:972 +#, c-format +msgid "DRIVER options : %s\n" +msgstr "DRIVER voľby : %s\n" + +#: dwarf.c:98 dwarf.c:142 readelf.c:370 readelf.c:526 +#, c-format +msgid "Unhandled data length: %d\n" +msgstr "Nespracovateľná dĺžka dát %d\n" + +#: dwarf.c:267 dwarf.c:2563 +msgid "badly formed extended line op encountered!\n" +msgstr "narazilo sa na zle formovaný rozšírený operátor riadka\n" + +#: dwarf.c:274 +#, c-format +msgid " Extended opcode %d: " +msgstr " Rozšírený opkód %d: " + +#: dwarf.c:279 +#, c-format +msgid "" +"End of Sequence\n" +"\n" +msgstr "" +"Koniec sekvencie\n" +"\n" + +#: dwarf.c:285 +#, c-format +msgid "set Address to 0x%lx\n" +msgstr "nastaviť Adresu na 0x%lx\n" + +#: dwarf.c:290 +#, c-format +msgid " define new File Table entry\n" +msgstr " definovať novú položku Tabuľky súboru\n" + +#: dwarf.c:291 dwarf.c:2178 +#, c-format +msgid " Entry\tDir\tTime\tSize\tName\n" +msgstr " Položka\tAdresár\tČas\tVeľkosť\tNázov\n" + +#: dwarf.c:293 +#, c-format +msgid " %d\t" +msgstr " %d\t" + +#: dwarf.c:296 dwarf.c:298 dwarf.c:300 dwarf.c:2190 dwarf.c:2192 dwarf.c:2194 +#, c-format +msgid "%lu\t" +msgstr "%lu\t" + +#: dwarf.c:301 +#, c-format +msgid "" +"%s\n" +"\n" +msgstr "" +"%s\n" +"\n" + +#. The test against DW_LNW_hi_user is redundant due to +#. the limited range of the unsigned char data type used +#. for op_code. +#. && op_code <= DW_LNE_hi_user +#: dwarf.c:342 +#, c-format +msgid "user defined: length %d\n" +msgstr "Používateľom definované: dĺžka %d\n" + +#: dwarf.c:344 dwarf.c:2594 +#, c-format +msgid "UNKNOWN: length %d\n" +msgstr "UNKNOWN: dĺžka %d\n" + +#: dwarf.c:357 +msgid "" +msgstr "<žiadna .debug_str sekcia>" + +#: dwarf.c:363 +#, c-format +msgid "DW_FORM_strp offset too big: %lx\n" +msgstr "DW_FORM_strp offset priveľký: %lx\n" + +#: dwarf.c:364 +msgid "" +msgstr "" + +#: dwarf.c:597 +#, c-format +msgid "Unknown TAG value: %lx" +msgstr "Neznáma TAG hodnota: %lx" + +#: dwarf.c:633 +#, c-format +msgid "Unknown FORM value: %lx" +msgstr "Neznáma FORM hodnota: %lx" + +#: dwarf.c:642 +#, c-format +msgid " %lu byte block: " +msgstr " %lu bajtový blok: " + +#: dwarf.c:1031 +#, c-format +msgid "(User defined location op)" +msgstr "(Užívateľom definovaný operátor umiestnenia)" + +#: dwarf.c:1033 +#, c-format +msgid "(Unknown location op)" +msgstr "(Neznámy operátor umiestnenia)" + +#: dwarf.c:1081 +msgid "Internal error: DWARF version is not 2 or 3.\n" +msgstr "Vnútorná chyba: DWARF verzia nie je 2 ani 3.\n" + +#: dwarf.c:1180 +msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" +msgstr "DW_FORM_data8 nie je podporovaný keď sizeof (unsigned long) != 8\n" + +#: dwarf.c:1229 +#, c-format +msgid " (indirect string, offset: 0x%lx): %s" +msgstr " (nepriamy reťazec, offset: 0x%lx): %s" + +#: dwarf.c:1238 +#, c-format +msgid "Unrecognized form: %lu\n" +msgstr "Nerozoznaná forma: %lu\n" + +#: dwarf.c:1322 +#, c-format +msgid "(not inlined)" +msgstr "(ako inline)" + +#: dwarf.c:1325 +#, c-format +msgid "(inlined)" +msgstr "(nie ako inline)" + +#: dwarf.c:1328 +#, c-format +msgid "(declared as inline but ignored)" +msgstr "(deklarovaný ako inline, ale ignorovaný)" + +#: dwarf.c:1331 +#, c-format +msgid "(declared as inline and inlined)" +msgstr "(deklarovaný ako inline a je inline)" + +#: dwarf.c:1334 +#, c-format +msgid " (Unknown inline attribute value: %lx)" +msgstr " (Neznáma hodnota inline atribútu: %lx)" + +#: dwarf.c:1495 +#, c-format +msgid "(location list)" +msgstr "(zoznam umiestnení)" + +#: dwarf.c:1514 dwarf.c:3193 +#, c-format +msgid " [without DW_AT_frame_base]" +msgstr " [bez DW_AT_frame_base]" + +#: dwarf.c:1526 +#, c-format +msgid "Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n" +msgstr "Ofset %lx použitý ako hodnota atribútu DW_AT_import DIE na ofsete %lx je príliš veľký.\n" + +#: dwarf.c:1700 +#, c-format +msgid "Unknown AT value: %lx" +msgstr "Neznáma AT hodnota: %lx" + +#: dwarf.c:1767 +#, c-format +msgid "Reserved length value (%lx) found in section %s\n" +msgstr "Hodnota vyhradenej dĺžky (%lx) nájdená v sekcii %s\n" + +#: dwarf.c:1778 +#, c-format +msgid "Corrupt unit length (%lx) found in section %s\n" +msgstr "Neplatná dĺžka jednotky (%lx) nájdená v sekcii %s\n" + +#: dwarf.c:1785 +#, c-format +msgid "No comp units in %s section ?" +msgstr "Žiadne výpočtové jednotky v sekcii %s ?" + +#: dwarf.c:1794 +#, c-format +msgid "Not enough memory for a debug info array of %u entries" +msgstr "Nedostatok pamäte pre ladiace info pole %u položiek" + +#: dwarf.c:1802 dwarf.c:3285 +#, c-format +msgid "" +"The section %s contains:\n" +"\n" +msgstr "" +"Sekcia %s obsahuje:\n" +"\n" + +#: dwarf.c:1810 +#, c-format +msgid "Unable to locate %s section!\n" +msgstr "Nemožno nájsť sekciu %s!\n" + +#: dwarf.c:1873 +#, c-format +msgid " Compilation Unit @ offset 0x%lx:\n" +msgstr " Kompilačná Jednotka @ offset 0x%lx:\n" + +#: dwarf.c:1874 +#, c-format +msgid " Length: 0x%lx (%s)\n" +msgstr " Dĺžka: 0x%lx (%s)\n" + +#: dwarf.c:1876 +#, c-format +msgid " Version: %d\n" +msgstr " Verzia: %d\n" + +#: dwarf.c:1877 +#, c-format +msgid " Abbrev Offset: %ld\n" +msgstr " Offset skratky: %ld\n" + +#: dwarf.c:1878 +#, c-format +msgid " Pointer Size: %d\n" +msgstr " Veľkosť ukazovateľa: %d\n" + +#: dwarf.c:1884 +#, c-format +msgid "Debug info is corrupted, length of CU at %lx extends beyond end of section (length = %lx)\n" +msgstr "Ladiace informácie sú poškodené, dĺžka CU na %lx siaha za koniec sekcie (sekcia má dĺžku %lx)\n" + +#: dwarf.c:1893 +#, c-format +msgid "CU at offset %lx contains corrupt or unsupported version number: %d.\n" +msgstr "CU na ofsete %lx obsahuje neplatné alebo nepodporované číslo verzie: %d\n" + +#: dwarf.c:1903 +#, c-format +msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n" +msgstr "Ladiace informácie sú poškodené, ofset abbrev (%lx) je väčší ako veľkosť sekcie abbrev (%lx)\n" + +#: dwarf.c:1937 +#, c-format +msgid "Bogus end-of-siblings marker detected at offset %lx in .debug_info section\n" +msgstr "Neplatná značka end-of-siblings zistená na ofsete %lx v sekcii .debug_info\n" + +#: dwarf.c:1941 +msgid "Further warnings about bogus end-of-sibling markers suppressed\n" +msgstr "Výpis ďalších upozornení na neplatné značky end-of-sibling bude potlačený\n" + +#: dwarf.c:1948 +#, c-format +msgid " <%d><%lx>: Abbrev Number: %lu" +msgstr " <%d><%lx>: skrát. číslo: %lu" + +#: dwarf.c:1965 +#, c-format +msgid "DIE at offset %lx refers to abbreviation number %lu which does not exist\n" +msgstr "DIE na ofsete %lx odkazuje na skrátené číslo %lu, ktoré neexistuje\n" + +#: dwarf.c:1971 +#, c-format +msgid " (%s)\n" +msgstr " (%s)\n" + +#: dwarf.c:2062 +#, c-format +msgid "" +"Raw dump of debug contents of section %s:\n" +"\n" +msgstr "" +"Nespracovaný výpis obsahu ladenia sekcie %s:\n" +"\n" + +#: dwarf.c:2100 dwarf.c:2387 +msgid "The line info appears to be corrupt - the section is too small\n" +msgstr "Informácia o riadku je pravdepodobne poškodená - sekcia je príliš krátka\n" + +#: dwarf.c:2109 dwarf.c:2397 +msgid "Only DWARF version 2 and 3 line info is currently supported.\n" +msgstr "Momentálne je podporovaná iba riadková informácia DWARF verzie 2 a 3.\n" + +#: dwarf.c:2130 +#, c-format +msgid " Offset: 0x%lx\n" +msgstr " Ofset: 0x%lx\n" + +#: dwarf.c:2131 +#, c-format +msgid " Length: %ld\n" +msgstr " Dĺžka: %ld\n" + +#: dwarf.c:2132 +#, c-format +msgid " DWARF Version: %d\n" +msgstr " Verzia DWARF: %d\n" + +#: dwarf.c:2133 +#, c-format +msgid " Prologue Length: %d\n" +msgstr " Dĺžka prológu: %d\n" + +#: dwarf.c:2134 +#, c-format +msgid " Minimum Instruction Length: %d\n" +msgstr " Minimálna dĺžka inštrukcie: %d\n" + +#: dwarf.c:2135 +#, c-format +msgid " Initial value of 'is_stmt': %d\n" +msgstr " Počiatočná hodnota 'is_stmt': %d\n" + +#: dwarf.c:2136 +#, c-format +msgid " Line Base: %d\n" +msgstr " Báza riadka: %d\n" + +#: dwarf.c:2137 +#, c-format +msgid " Line Range: %d\n" +msgstr " Rozsah riadka: %d\n" + +#: dwarf.c:2138 +#, c-format +msgid " Opcode Base: %d\n" +msgstr " Opcode báza: %d\n" + +#: dwarf.c:2147 +#, c-format +msgid "" +"\n" +" Opcodes:\n" +msgstr "" +"\n" +" Opcody:\n" + +#: dwarf.c:2150 +#, c-format +msgid " Opcode %d has %d args\n" +msgstr " Opcode %d má %d argumentov\n" + +#: dwarf.c:2156 +#, c-format +msgid "" +"\n" +" The Directory Table is empty.\n" +msgstr "" +"\n" +" Tabuľka adresára je prázdna.\n" + +#: dwarf.c:2159 +#, c-format +msgid "" +"\n" +" The Directory Table:\n" +msgstr "" +"\n" +" Tabuľka adresára:\n" + +#: dwarf.c:2163 +#, c-format +msgid " %s\n" +msgstr " %s\n" + +#: dwarf.c:2174 +#, c-format +msgid "" +"\n" +" The File Name Table is empty.\n" +msgstr "" +"\n" +" Tabuľka názvov súborov je prázdna.\n" + +#: dwarf.c:2177 +#, c-format +msgid "" +"\n" +" The File Name Table:\n" +msgstr "" +"\n" +" Tabuľka názvov súborov:\n" + +#: dwarf.c:2185 +#, c-format +msgid " %d\t" +msgstr " %d\t" + +#: dwarf.c:2196 +#, c-format +msgid "%s\n" +msgstr "%s\n" + +#. Now display the statements. +#: dwarf.c:2204 +#, c-format +msgid "" +"\n" +" Line Number Statements:\n" +msgstr "" +"\n" +" Príkazy číslovania riadkov:\n" + +#: dwarf.c:2220 +#, c-format +msgid " Special opcode %d: advance Address by %lu to 0x%lx" +msgstr " Špeciálny opcode %d: posunúť Adresu o %lu do 0x%lx" + +#: dwarf.c:2224 +#, c-format +msgid " and Line by %d to %d\n" +msgstr " a Riadok o %d do %d\n" + +#: dwarf.c:2234 +#, c-format +msgid " Copy\n" +msgstr " Kopírovať\n" + +#: dwarf.c:2242 +#, c-format +msgid " Advance PC by %lu to 0x%lx\n" +msgstr " Posunúť PC o %lu do 0x%lx\n" + +#: dwarf.c:2250 +#, c-format +msgid " Advance Line by %d to %d\n" +msgstr " Posunúť Riadok o %d do %d\n" + +#: dwarf.c:2257 +#, c-format +msgid " Set File Name to entry %d in the File Name Table\n" +msgstr " Nastaviť Názov súboru na položku %d v Tabuľke názvov súborov\n" + +#: dwarf.c:2265 +#, c-format +msgid " Set column to %lu\n" +msgstr " Nastaviť stĺpec na %lu\n" + +#: dwarf.c:2272 +#, c-format +msgid " Set is_stmt to %d\n" +msgstr " Nastaviť is_stmt na %d\n" + +#: dwarf.c:2277 +#, c-format +msgid " Set basic block\n" +msgstr " Nastaviť základný blok\n" + +#: dwarf.c:2285 +#, c-format +msgid " Advance PC by constant %lu to 0x%lx\n" +msgstr " Posunúť PC o konštantu %lu na 0x%lx\n" + +#: dwarf.c:2293 +#, c-format +msgid " Advance PC by fixed size amount %lu to 0x%lx\n" +msgstr " Posunúť PC o množstvo fixnej dĺžky %lu na 0x%lx\n" + +#: dwarf.c:2298 +#, c-format +msgid " Set prologue_end to true\n" +msgstr " Nastaviť prologue_end na true\n" + +#: dwarf.c:2302 +#, c-format +msgid " Set epilogue_begin to true\n" +msgstr " Set_epilogue_begin na true\n" + +#: dwarf.c:2308 dwarf.c:2672 +#, c-format +msgid " Set ISA to %lu\n" +msgstr " Nastaviť ISA na %lu\n" + +#: dwarf.c:2312 dwarf.c:2676 +#, c-format +msgid " Unknown opcode %d with operands: " +msgstr " Neznámy kód operácie %d s operandami: " + +#: dwarf.c:2345 +#, c-format +msgid "" +"Decoded dump of debug contents of section %s:\n" +"\n" +msgstr "" +"Dekódovaný výpis obsahu ladenia sekcie %s:\n" +"\n" + +#: dwarf.c:2506 +#, c-format +msgid "CU: %s:\n" +msgstr "CU: %s:\n" + +#: dwarf.c:2507 dwarf.c:2520 +#, c-format +msgid "File name Line number Starting address\n" +msgstr "Názov súboru Číslo riadka Počiatočná adresa\n" + +#: dwarf.c:2513 +#, c-format +msgid "CU: %s/%s:\n" +msgstr "CU: %s/%s:\n" + +#: dwarf.c:2518 dwarf.c:2590 +#, c-format +msgid "%s:\n" +msgstr "%s:\n" + +#. If directory index is 0, that means current directory. +#: dwarf.c:2623 +#, c-format +msgid "" +"\n" +"./%s:[++]\n" +msgstr "" +"\n" +"./%s:[++]\n" + +#. The directory index starts counting at 1. +#: dwarf.c:2629 +#, c-format +msgid "" +"\n" +"%s/%s:\n" +msgstr "" +"\n" +"%s/%s:\n" + +#: dwarf.c:2714 +#, c-format +msgid "%-35s %11d %#18lx\n" +msgstr "%-35s %11d %#18lx\n" + +#: dwarf.c:2719 +#, c-format +msgid "%s %11d %#18lx\n" +msgstr "%s %11d %#18lx\n" + +#: dwarf.c:2749 dwarf.c:3024 dwarf.c:3425 +#, c-format +msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n" +msgstr "Napodarilo sa načítať sekciu .debug_info, takže nemožno interpretovať sekciu %s.\n" + +#: dwarf.c:2794 dwarf.c:2888 dwarf.c:2962 dwarf.c:3079 dwarf.c:3227 +#: dwarf.c:3480 +#, c-format +msgid "" +"Contents of the %s section:\n" +"\n" +msgstr "" +"Obsah %s sekcie:\n" +"\n" + +#: dwarf.c:2828 dwarf.c:3330 +#, c-format +msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n" +msgstr ".debug_info ofset 0x%lx v sekcii %s neukazuje na hlavičku CU.\n" + +#: dwarf.c:2842 +msgid "Only DWARF 2 and 3 pubnames are currently supported\n" +msgstr "Mometnálne sú podporované iba verejné mená DWARF 2 a 3\n" + +#: dwarf.c:2849 +#, c-format +msgid " Length: %ld\n" +msgstr " Dĺžka: %ld\n" + +#: dwarf.c:2851 +#, c-format +msgid " Version: %d\n" +msgstr " Verzia: %d\n" + +#: dwarf.c:2853 +#, c-format +msgid " Offset into .debug_info section: 0x%lx\n" +msgstr " Ofset do sekcie .debug_info: 0x%lx\n" + +#: dwarf.c:2855 +#, c-format +msgid " Size of area in .debug_info section: %ld\n" +msgstr " Veľkosť oblasti v sekcii .debug_info: %ld\n" + +#: dwarf.c:2858 +#, c-format +msgid "" +"\n" +" Offset\tName\n" +msgstr "" +"\n" +" Offset\tNázov\n" + +#: dwarf.c:2909 +#, c-format +msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" +msgstr " DW_MACINFO_start_file - fileno: %d filenum: %d\n" + +#: dwarf.c:2915 +#, c-format +msgid " DW_MACINFO_end_file\n" +msgstr " DW_MACINFO_end_file\n" + +#: dwarf.c:2923 +#, c-format +msgid " DW_MACINFO_define - lineno : %d macro : %s\n" +msgstr " DW_MACINFO_define : %d makro : %s\n" + +#: dwarf.c:2932 +#, c-format +msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" +msgstr " DW_MACINFO_undef - lineno : %d makro : %s\n" + +#: dwarf.c:2944 +#, c-format +msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" +msgstr " DW_MACINFO_vendor_ext - konštanta : %d reťazec : %s\n" + +#: dwarf.c:2973 +#, c-format +msgid " Number TAG\n" +msgstr " Číslo TAGu\n" + +#: dwarf.c:2979 +#, c-format +msgid " %ld %s [%s]\n" +msgstr " %ld %s [%s]\n" + +#: dwarf.c:2982 +msgid "has children" +msgstr "má potomkov" + +#: dwarf.c:2982 +msgid "no children" +msgstr "žiadny potomkovia" + +#: dwarf.c:2985 +#, c-format +msgid " %-18s %s\n" +msgstr " %-18s %s\n" + +#: dwarf.c:3018 dwarf.c:3223 dwarf.c:3419 +#, c-format +msgid "" +"\n" +"The %s section is empty.\n" +msgstr "" +"\n" +"%s sekcia je prázdna.\n" + +#. FIXME: Should we handle this case? +#: dwarf.c:3068 +msgid "Location lists in .debug_info section aren't in ascending order!\n" +msgstr "Zoznamy umiestení v sekcii .debug_info nie sú v vzostupnom poradí!\n" + +#: dwarf.c:3071 +msgid "No location lists in .debug_info section!\n" +msgstr "Žiadne zoznamy umiestení v sekcii .debug_info!\n" + +#: dwarf.c:3076 +#, c-format +msgid "Location lists in %s section start at 0x%lx\n" +msgstr "Zoznamy umiestnenia v %s sekcii začínajú na 0x%lx\n" + +#: dwarf.c:3080 +#, c-format +msgid " Offset Begin End Expression\n" +msgstr " Offset Begin End Výraz\n" + +#: dwarf.c:3111 +#, c-format +msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" +msgstr "Medzera [0x%lx - 0x%lx] v sekcii .debug_loc.\n" + +#: dwarf.c:3115 +#, c-format +msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" +msgstr "Prekrytie [0x%lx - 0x%lx] v sekcii .debug_loc.\n" + +#: dwarf.c:3123 +#, c-format +msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" +msgstr "Offset 0x%lx je väčší než veľkosť sekcii .debug_loc.\n" + +#: dwarf.c:3132 dwarf.c:3167 dwarf.c:3177 +#, c-format +msgid "Location list starting at offset 0x%lx is not terminated.\n" +msgstr "Zoznam umiestnení začínajúci na offsete 0x%lx nie je ukončený.\n" + +#: dwarf.c:3151 dwarf.c:3532 +#, c-format +msgid "\n" +msgstr "\n" + +#: dwarf.c:3161 +#, c-format +msgid "(base address)\n" +msgstr "(bázová adresa)\n" + +#: dwarf.c:3196 +msgid " (start == end)" +msgstr " start == end)" + +#: dwarf.c:3198 +msgid " (start > end)" +msgstr " (start > end)" + +#: dwarf.c:3208 +#, c-format +msgid "There are %ld unused bytes at the end of section %s\n" +msgstr "Na konci sekcie %2$s je %1$ld nepoužitých bajtov\n" + +#: dwarf.c:3341 +msgid "Only DWARF 2 and 3 aranges are currently supported.\n" +msgstr "Aktuálne sú podporované iba usporiadania DWARF 2 a 3.\n" + +#: dwarf.c:3345 +#, c-format +msgid " Length: %ld\n" +msgstr " Dĺžka: %ld\n" + +#: dwarf.c:3346 +#, c-format +msgid " Version: %d\n" +msgstr " Verzia: %d\n" + +#: dwarf.c:3347 +#, c-format +msgid " Offset into .debug_info: 0x%lx\n" +msgstr " Ofset do .debug_info: 0x%lx\n" + +#: dwarf.c:3348 +#, c-format +msgid " Pointer Size: %d\n" +msgstr " Veľkosť ukazovateľa: %d\n" + +#: dwarf.c:3349 +#, c-format +msgid " Segment Size: %d\n" +msgstr " Veľkosť segmentu: %d\n" + +#: dwarf.c:3358 +msgid "Pointer size + Segment size is not a power of two.\n" +msgstr "Veľkosť smerníka + veľkosť segmentu nie je mocninou dvoch.\n" + +#: dwarf.c:3363 +#, c-format +msgid "" +"\n" +" Address Length\n" +msgstr "" +"\n" +" Adresa Dĺžka\n" + +#: dwarf.c:3365 +#, c-format +msgid "" +"\n" +" Address Length\n" +msgstr "" +"\n" +" Adresa Dĺžka\n" + +#. FIXME: Should we handle this case? +#: dwarf.c:3469 +msgid "Range lists in .debug_info section aren't in ascending order!\n" +msgstr "Zoznamy rozsahu v sekcii .debug_info nie sú v vzostupnom poradí!\n" + +#: dwarf.c:3472 +msgid "No range lists in .debug_info section!\n" +msgstr "Žiadne zoznamy rozsahu v sekcii .debug_info!\n" + +#: dwarf.c:3477 +#, c-format +msgid "Range lists in %s section start at 0x%lx\n" +msgstr "Zoznamy rozsahu v sekcii %s začínajú na 0x%lx\n" + +#: dwarf.c:3481 +#, c-format +msgid " Offset Begin End\n" +msgstr " Offset Začiatok Koniec\n" + +#: dwarf.c:3506 +#, c-format +msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" +msgstr "Medzera [0x%lx - 0x%lx] v sekcii %s.\n" + +#: dwarf.c:3510 +#, c-format +msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" +msgstr "Prekrytie [0x%lx - 0x%lx] v sekcii %s.\n" + +#: dwarf.c:3548 +msgid "(start == end)" +msgstr "(začiatok == koniec)" + +#: dwarf.c:3550 +msgid "(start > end)" +msgstr "(začiatok > koniec)" + +#: dwarf.c:3801 +#, c-format +msgid "The section %s contains:\n" +msgstr "Sekcii %s obsahuje:\n" + +#: dwarf.c:4492 +#, c-format +msgid " DW_CFA_??? (User defined call frame op: %#x)\n" +msgstr " DW_CFA_??? (Používateľom definovaný op rámca volania: %#x)\n" + +#: dwarf.c:4494 +#, c-format +msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" +msgstr "nepodporované alebo neznáme číslo Dwarf Call Frame Instruction: %#x\n" + +#: dwarf.c:4518 +#, c-format +msgid "Displaying the debug contents of section %s is not yet supported.\n" +msgstr "Zobrazenie obsahu ladenia sekcie %s nie je zatiaľ podporované.\n" + +#: dwarf.c:4560 +#, c-format +msgid "%s: Error: " +msgstr "%s: Chyba: " + +#: dwarf.c:4571 +#, c-format +msgid "%s: Warning: " +msgstr "%s: Upozornenie: " + +#: emul_aix.c:43 +#, c-format +msgid " [-g] - 32 bit small archive\n" +msgstr " [-g] - 32 bitový malý archív\n" + +#: emul_aix.c:44 +#, c-format +msgid " [-X32] - ignores 64 bit objects\n" +msgstr " [-X32] - ignoruje 64 bitové objekty\n" + +#: emul_aix.c:45 +#, c-format +msgid " [-X64] - ignores 32 bit objects\n" +msgstr " [-X64] - ignoruje 32 bitové objekty\n" + +#: emul_aix.c:46 +#, c-format +msgid " [-X32_64] - accepts 32 and 64 bit objects\n" +msgstr " [-X32_64] - akceptuje 32 a 64 bitové objekty\n" + +#: ieee.c:309 +msgid "unexpected end of debugging information" +msgstr "neočakávaný koniec ladiacej informácie" + +#: ieee.c:396 +msgid "invalid number" +msgstr "neplatné číslo" + +#: ieee.c:449 +msgid "invalid string length" +msgstr "neplatná dĺžka reťazca" + +#: ieee.c:504 ieee.c:545 +msgid "expression stack overflow" +msgstr "pretečenie zásobníka výrazu" + +#: ieee.c:524 +msgid "unsupported IEEE expression operator" +msgstr "nepodporovaný IEEE operátor výrazu" + +#: ieee.c:539 +msgid "unknown section" +msgstr "neznáma sekcia" + +#: ieee.c:560 +msgid "expression stack underflow" +msgstr "podtečenie zásobníka výrazu" + +#: ieee.c:574 +msgid "expression stack mismatch" +msgstr "nezhoda zásobníka výrazu" + +#: ieee.c:611 +msgid "unknown builtin type" +msgstr "neznámy vstavaný typ" + +#: ieee.c:756 +msgid "BCD float type not supported" +msgstr "BCD float typ nie je podporovaný" + +#: ieee.c:893 +msgid "unexpected number" +msgstr "neočakávané číslo" + +#: ieee.c:900 +msgid "unexpected record type" +msgstr "neočakávaný typ záznamu" + +#: ieee.c:933 +msgid "blocks left on stack at end" +msgstr "na konci zásobníka sú ponechané bloky" + +#: ieee.c:1196 +msgid "unknown BB type" +msgstr "neznámy BB typ" + +#: ieee.c:1205 +msgid "stack overflow" +msgstr "pretečenia zásobníka" + +#: ieee.c:1228 +msgid "stack underflow" +msgstr "podtečenie zásobníka" + +#: ieee.c:1340 ieee.c:1410 ieee.c:2107 +msgid "illegal variable index" +msgstr "neplatný index premennej" + +#: ieee.c:1388 +msgid "illegal type index" +msgstr "neplatný typový index" + +#: ieee.c:1398 ieee.c:1435 +msgid "unknown TY code" +msgstr "neznámy TY kód" + +#: ieee.c:1417 +msgid "undefined variable in TY" +msgstr "nezadefinovaná premenná v TY" + +#. Pascal file name. FIXME. +#: ieee.c:1828 +msgid "Pascal file name not supported" +msgstr "Pascalovský názov súboru nie je podporovaný" + +#: ieee.c:1876 +msgid "unsupported qualifier" +msgstr "nepodporaný kvalifikátor" + +#: ieee.c:2145 +msgid "undefined variable in ATN" +msgstr "nezadefinovaná premenná v ATN" + +#: ieee.c:2188 +msgid "unknown ATN type" +msgstr "neznámy ATN typ" + +#. Reserved for FORTRAN common. +#: ieee.c:2310 +msgid "unsupported ATN11" +msgstr "nepodporovaný ATN11" + +#. We have no way to record this information. FIXME. +#: ieee.c:2337 +msgid "unsupported ATN12" +msgstr "nepodporovaný ATN11" + +#: ieee.c:2397 +msgid "unexpected string in C++ misc" +msgstr "neočakávaný reťazec v C++ misc" + +#: ieee.c:2410 +msgid "bad misc record" +msgstr "nesprávny misc záznam" + +#: ieee.c:2451 +msgid "unrecognized C++ misc record" +msgstr "nerozpoznaný C++ misc záznam" + +#: ieee.c:2566 +msgid "undefined C++ object" +msgstr "nezadefinovaný C++ objekt" + +#: ieee.c:2600 +msgid "unrecognized C++ object spec" +msgstr "nerozpoznaná špecifikácia C++ objektu" + +#: ieee.c:2636 +msgid "unsupported C++ object type" +msgstr "nepodporovaný objektový typ C++" + +#: ieee.c:2646 +msgid "C++ base class not defined" +msgstr "bázová trieda C++ nebola definovaná" + +#: ieee.c:2658 ieee.c:2763 +msgid "C++ object has no fields" +msgstr "C++ objekt nemá žiadne polia" + +#: ieee.c:2677 +msgid "C++ base class not found in container" +msgstr "bázová trieda C++ nebola nájdená v kontajneri" + +#: ieee.c:2784 +msgid "C++ data member not found in container" +msgstr "dátový člen C++ nebol nájdený v kontajneri" + +#: ieee.c:2825 ieee.c:2975 +msgid "unknown C++ visibility" +msgstr "neznáma C++ viditeľnosť" + +#: ieee.c:2859 +msgid "bad C++ field bit pos or size" +msgstr "zlá bitová pozícia alebo veľkosť C++ poľa" + +#: ieee.c:2951 +msgid "bad type for C++ method function" +msgstr "zlý typ pre metódu funkcie C++" + +#: ieee.c:2961 +msgid "no type information for C++ method function" +msgstr "žiadna informácia o type pre metódu funkcie C++" + +#: ieee.c:3000 +msgid "C++ static virtual method" +msgstr "statická virtuálna metóda C++" + +#: ieee.c:3095 +msgid "unrecognized C++ object overhead spec" +msgstr "nerozpoznaná horná špecifikácia C++ objektu" + +#: ieee.c:3134 +msgid "undefined C++ vtable" +msgstr "nezadefinovaná C++ vtable" + +#: ieee.c:3203 +msgid "C++ default values not in a function" +msgstr "štandardné C++ hodnoty nie sú vo funkcii" + +#: ieee.c:3243 +msgid "unrecognized C++ default type" +msgstr "nerozpoznaný štandardný typ C++" + +#: ieee.c:3274 +msgid "reference parameter is not a pointer" +msgstr "referenčný parameter nie je ukazovateľ" + +#: ieee.c:3357 +msgid "unrecognized C++ reference type" +msgstr "nerozpoznaný referenčný typ C++" + +#: ieee.c:3439 +msgid "C++ reference not found" +msgstr "C++ referencia nebola nájdená" + +#: ieee.c:3447 +msgid "C++ reference is not pointer" +msgstr "C++ referencia nie je ukazovateľ" + +#: ieee.c:3473 ieee.c:3481 +msgid "missing required ASN" +msgstr "chýba požadovaný ASN" + +#: ieee.c:3508 ieee.c:3516 +msgid "missing required ATN65" +msgstr "chýba požadovaný ATN65" + +#: ieee.c:3530 +msgid "bad ATN65 record" +msgstr "zlý ATN65 záznam" + +#: ieee.c:4158 +#, c-format +msgid "IEEE numeric overflow: 0x" +msgstr "IEEE číselné pretečenie: 0x" + +#: ieee.c:4202 +#, c-format +msgid "IEEE string length overflow: %u\n" +msgstr "IEEE pretečenie dĺžky reťazca: %u\n" + +#: ieee.c:5199 +#, c-format +msgid "IEEE unsupported integer type size %u\n" +msgstr "IEEE nepodporaná veľkosť typu integer %u\n" + +#: ieee.c:5233 +#, c-format +msgid "IEEE unsupported float type size %u\n" +msgstr "IEEE nepodporovaná veľkosť typu float %u\n" + +#: ieee.c:5267 +#, c-format +msgid "IEEE unsupported complex type size %u\n" +msgstr "IEEE nepodporovaná veľkosť komplexného typu %u\n" + +#: mclex.c:241 +msgid "Duplicate symbol entered into keyword list." +msgstr "Do zoznamu kľúčových slov bol zadaný duplicitný symbol." + +#: nlmconv.c:273 srconv.c:1822 +msgid "input and output files must be different" +msgstr "vstupné a výstupné súbory sa musia líšiť" + +#: nlmconv.c:320 +msgid "input file named both on command line and with INPUT" +msgstr "vstupný súbor bol pomenovaný na príkazovom riadku a aj na VSTUPE" + +#: nlmconv.c:329 +msgid "no input file" +msgstr "žiadny vstupný súbor" + +#: nlmconv.c:359 +msgid "no name for output file" +msgstr "žiadny názov pre výstupný súbor" + +#: nlmconv.c:373 +msgid "warning: input and output formats are not compatible" +msgstr "upozornenie: vstupné a výstupné formáty nie sú kompatibilné" + +#: nlmconv.c:403 +msgid "make .bss section" +msgstr "urobiť .bss sekciu" + +#: nlmconv.c:413 +msgid "make .nlmsections section" +msgstr "urobiť .nlmsections sekciu" + +#: nlmconv.c:441 +msgid "set .bss vma" +msgstr "nastaviť .bss vma" + +#: nlmconv.c:448 +msgid "set .data size" +msgstr "nastaviť .data veľkosť" + +#: nlmconv.c:628 +#, c-format +msgid "warning: symbol %s imported but not in import list" +msgstr "upozornenie: symbol %s importovaný, ale nie je v importovacom zozname" + +#: nlmconv.c:648 +msgid "set start address" +msgstr "nastaviť počiatočnú adresu" + +#: nlmconv.c:697 +#, c-format +msgid "warning: START procedure %s not defined" +msgstr "upozornenie: nedefinovaná START procedúra %s" + +#: nlmconv.c:699 +#, c-format +msgid "warning: EXIT procedure %s not defined" +msgstr "upozornenie: nedefinovaná EXIT procedúra %s" + +#: nlmconv.c:701 +#, c-format +msgid "warning: CHECK procedure %s not defined" +msgstr "upozornenie: nedefinovaná CHECK procedúra %s" + +#: nlmconv.c:721 nlmconv.c:907 +msgid "custom section" +msgstr "prispôsobená sekcia" + +#: nlmconv.c:741 nlmconv.c:936 +msgid "help section" +msgstr "sekcia pomoci" + +#: nlmconv.c:763 nlmconv.c:954 +msgid "message section" +msgstr "sekcia správ" + +#: nlmconv.c:778 nlmconv.c:987 +msgid "module section" +msgstr "sekcia modulov" + +#: nlmconv.c:797 nlmconv.c:1003 +msgid "rpc section" +msgstr "rpc sekcia" + +#. There is no place to record this information. +#: nlmconv.c:833 +#, c-format +msgid "%s: warning: shared libraries can not have uninitialized data" +msgstr "%s: upozornenie: zdielané knižnice nemôžu mať neinicializované dáta" + +#: nlmconv.c:854 nlmconv.c:1022 +msgid "shared section" +msgstr "zdielaná sekcia" + +#: nlmconv.c:862 +msgid "warning: No version number given" +msgstr "upozornenie: Neuvedené číslo verzie" + +#: nlmconv.c:902 nlmconv.c:931 nlmconv.c:949 nlmconv.c:998 nlmconv.c:1017 +#, c-format +msgid "%s: read: %s" +msgstr "%s: čítať: %s" + +#: nlmconv.c:924 +msgid "warning: FULLMAP is not supported; try ld -M" +msgstr "upozornenie: FULLMAP nie je podporaný; skúste ld -M" + +#: nlmconv.c:1100 +#, c-format +msgid "Usage: %s [option(s)] [in-file [out-file]]\n" +msgstr "Použitie: %s [voľb(a/y)] [vstupný súbor [výstupný súbor]]\n" + +#: nlmconv.c:1101 +#, c-format +msgid " Convert an object file into a NetWare Loadable Module\n" +msgstr " Previesť súbor objektu na zavediteľný NetWare Modul\n" + +#: nlmconv.c:1102 +#, c-format +msgid "" +" The options are:\n" +" -I --input-target= Set the input binary file format\n" +" -O --output-target= Set the output binary file format\n" +" -T --header-file= Read for NLM header information\n" +" -l --linker= Use for any linking\n" +" -d --debug Display on stderr the linker command line\n" +" @ Read options from .\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +msgstr "" +" Voľby sú:\n" +" -I --input-target= Nastaviť formát vstupného binárneho súboru\n" +" -O --output-target= Nastaviť formát výstupného binárneho súboru\n" +" -T --header-file= Prečítať pre NLM informáciu hlavičky\n" +" -l --linker= Použiť pre všetko linkovanie\n" +" -d --debug Zobraziť príkazový riadok linkera na stderr \n" +" @ Čítať voľby zo .\n" +" -h --help Zobraziť túto informáciu\n" +" -v --version Zobraziť verziu programu\n" + +#: nlmconv.c:1143 +#, c-format +msgid "support not compiled in for %s" +msgstr "podpora nie je skompilovaná pre %s" + +#: nlmconv.c:1180 +msgid "make section" +msgstr "vytvoriť sekciu" + +#: nlmconv.c:1194 +msgid "set section size" +msgstr "nastaviť veľkosť sekcie" + +#: nlmconv.c:1200 +msgid "set section alignment" +msgstr "nastaviť zarovnanie sekcie" + +#: nlmconv.c:1204 +msgid "set section flags" +msgstr "nastaviť príznaky sekcie" + +#: nlmconv.c:1215 +msgid "set .nlmsections size" +msgstr "nastaviť veľkosť .nlmsections" + +#: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318 +msgid "set .nlmsection contents" +msgstr "nastaviť obsah .nlmsections" + +#: nlmconv.c:1795 +msgid "stub section sizes" +msgstr "veľkost sekcie stub" + +#: nlmconv.c:1842 +msgid "writing stub" +msgstr "zapisuje sa stub" + +#: nlmconv.c:1926 +#, c-format +msgid "unresolved PC relative reloc against %s" +msgstr "nezistená relatívna PC relokácia oproti %s" + +#: nlmconv.c:1990 +#, c-format +msgid "overflow when adjusting relocation against %s" +msgstr "pretečenie pri prispôsobovaní relokácie oproti %s" + +#: nlmconv.c:2117 +#, c-format +msgid "%s: execution of %s failed: " +msgstr "%s: vykonanie %s zlyhalo: " + +#: nlmconv.c:2132 +#, c-format +msgid "Execution of %s failed" +msgstr "Vykonanie %s zlyhalo" + +#: nm.c:217 size.c:78 strings.c:647 +#, c-format +msgid "Usage: %s [option(s)] [file(s)]\n" +msgstr "Použitie: %s [VOĽBY] [SÚBORY]\n" + +#: nm.c:218 +#, c-format +msgid " List symbols in [file(s)] (a.out by default).\n" +msgstr " Vypísať symboly v [SÚBOROCH] (štandardne a.out).\n" + +#: nm.c:219 +#, c-format +msgid "" +" The options are:\n" +" -a, --debug-syms Display debugger-only symbols\n" +" -A, --print-file-name Print name of the input file before every symbol\n" +" -B Same as --format=bsd\n" +" -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n" +" The STYLE, if specified, can be `auto' (the default),\n" +" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" +" --no-demangle Do not demangle low-level symbol names\n" +" -D, --dynamic Display dynamic symbols instead of normal symbols\n" +" --defined-only Display only defined symbols\n" +" -e (ignored)\n" +" -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n" +" `sysv' or `posix'. The default is `bsd'\n" +" -g, --extern-only Display only external symbols\n" +" -l, --line-numbers Use debugging information to find a filename and\n" +" line number for each symbol\n" +" -n, --numeric-sort Sort symbols numerically by address\n" +" -o Same as -A\n" +" -p, --no-sort Do not sort the symbols\n" +" -P, --portability Same as --format=posix\n" +" -r, --reverse-sort Reverse the sense of the sort\n" +" -S, --print-size Print size of defined symbols\n" +" -s, --print-armap Include index for symbols from archive members\n" +" --size-sort Sort symbols by size\n" +" --special-syms Include special symbols in the output\n" +" --synthetic Display synthetic symbols as well\n" +" -t, --radix=RADIX Use RADIX for printing symbol values\n" +" --target=BFDNAME Specify the target object format as BFDNAME\n" +" -u, --undefined-only Display only undefined symbols\n" +" -X 32_64 (ignored)\n" +" @FILE Read options from FILE\n" +" -h, --help Display this information\n" +" -V, --version Display this program's version number\n" +"\n" +msgstr "" +" Voľby sú:\n" +" -a, --debug-syms Zobraziť iba symboly ladiaceho nástroja\n" +" -A, --print-file-name Vypísať názov výstupného súboru pred každý symbol\n" +" -B Rovnaké ako --format=bsd\n" +" -C, --demangle[=ŠTÝL] Dekódovať nízkoúrovňové názvy symbolov na názvy\n" +" používateľskej úrovne\n" +" ŠTÝL, ak je určený, môže byť „auto“ (predvolený),\n" +" „gnu“, „lucid“, „arm“, „hp“, „edg“, „gnu-v3“, „java“\n" +" alebo „gnat“\n" +" --no-demangle Neupravovať nízko-úrovňové názvy symbolov\n" +" -D, --dynamic Zobraziť dynamické symboly namiesto normálnych symbolov\n" +" --defined-only Zobraziť iba definované symboly\n" +" -e (ignorované)\n" +" -f, --format=FORMÁT Použiť výstupný formát FORMÁT. FORMÁT môže byť „bsd“,\n" +" „sysv“ alebo „posix“. Štandardný je „bsd“\n" +" -g, --extern-only Zobraziť iba externé symboly\n" +" -l, --line-numbers Použiť ladiacu informáciu na nájdenie súboru a\n" +" číslo riadka pre každý symbol\n" +" -n, --numeric-sort Utriediť symboly číselne podľa adresy\n" +" -o Ravnaký ako -A\n" +" -p, --no-sort Netriediť symboly\n" +" -P, --portability Rovnaké ako --format=posix\n" +" -r, --reverse-sort Prevrátiť zmysel triedenia\n" +" -S, --print-size Vypísať veľkosť definovaných symbolov\n" +" -s, --print-armap Zahrnúť index pre symboly z členov archívu\n" +" --size-sort Triediť symboly podľa veľkosti\n" +" --special-syms Zahrnúť špeciálne symboly do výstupu\n" +" --synthetic Zobraziť tiež syntetické symboly\n" +" -t, --radix=RADIX Použiť RADIX pre výpis hodnôt symbolov\n" +" --target=BFDNAME Určiť formát cieľového objektu ako BFDNAME\n" +" -u, --undefined-only Zobraziť iba nedefinované symboly\n" +" -X 32_64 (ignorované)\n" +" @SÚBOR Čítať voľby zo SÚBORu\n" +" -h, --help Zobraziť túto informáciu\n" +" -V, --version Zobraziť verziu programu\n" +"\n" + +#: nm.c:284 +#, c-format +msgid "%s: invalid radix" +msgstr "%s: neplatný radix" + +#: nm.c:308 +#, c-format +msgid "%s: invalid output format" +msgstr "%s: neplatný výstupný formát" + +#: nm.c:329 readelf.c:6971 readelf.c:7009 +#, c-format +msgid ": %d" +msgstr "<špecifické pre procesor>: %d" + +#: nm.c:331 readelf.c:6974 readelf.c:7021 +#, c-format +msgid ": %d" +msgstr "<špecifické pre OS>: %d" + +#: nm.c:333 readelf.c:6976 readelf.c:7024 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:373 +#, c-format +msgid "" +"\n" +"Archive index:\n" +msgstr "" +"\n" +"Index archívu:\n" + +#: nm.c:1233 +#, c-format +msgid "" +"\n" +"\n" +"Undefined symbols from %s:\n" +"\n" +msgstr "" +"\n" +"\n" +"Nedefinované symboly z %s:\n" +"\n" + +#: nm.c:1235 +#, c-format +msgid "" +"\n" +"\n" +"Symbols from %s:\n" +"\n" +msgstr "" +"\n" +"\n" +"Symboly z %s:\n" +"\n" + +#: nm.c:1237 nm.c:1288 +#, c-format +msgid "" +"Name Value Class Type Size Line Section\n" +"\n" +msgstr "" +"Názov Hodnota Trieda Typ Veľkosť Riad. Sekcia\n" +"\n" + +#: nm.c:1240 nm.c:1291 +#, c-format +msgid "" +"Name Value Class Type Size Line Section\n" +"\n" +msgstr "" +"Názov Hodnota Trieda Typ Veľkosť Riad. Sekcia\n" +"\n" + +#: nm.c:1284 +#, c-format +msgid "" +"\n" +"\n" +"Undefined symbols from %s[%s]:\n" +"\n" +msgstr "" +"\n" +"\n" +"Nedefinovaný symbol z %s[%s]:\n" +"\n" + +#: nm.c:1286 +#, c-format +msgid "" +"\n" +"\n" +"Symbols from %s[%s]:\n" +"\n" +msgstr "" +"\n" +"\n" +"Symboly z %s[%s]:\n" +"\n" + +#: nm.c:1378 +#, c-format +msgid "Print width has not been initialized (%d)" +msgstr "Výpis šírky nebol inicializovaný (%d)" + +#: nm.c:1603 +msgid "Only -X 32_64 is supported" +msgstr "Je podporovaný iba -X 32_64" + +#: nm.c:1623 +msgid "Using the --size-sort and --undefined-only options together" +msgstr "Použitie volieb --size-sort a --undefined-only spolu" + +#: nm.c:1624 +msgid "will produce no output, since undefined symbols have no size." +msgstr "nevytvoria žiadny výstup, pretože nedefinované symboly nemajú žiadnu veľkosť." + +#: nm.c:1652 +#, c-format +msgid "data size %ld" +msgstr "dátová veľkosť %ld" + +#: objcopy.c:424 srconv.c:1730 +#, c-format +msgid "Usage: %s [option(s)] in-file [out-file]\n" +msgstr "Použitie: %s [voľb(a/y)] vstupný-súbor [výstupný-súbor]\n" + +#: objcopy.c:425 +#, c-format +msgid " Copies a binary file, possibly transforming it in the process\n" +msgstr " Kopíruje binárny súbor s možnosťou transformovania počas procesu\n" + +#: objcopy.c:426 objcopy.c:522 +#, c-format +msgid " The options are:\n" +msgstr " Voľby sú:\n" + +#: objcopy.c:427 +#, c-format +msgid "" +" -I --input-target Assume input file is in format \n" +" -O --output-target Create an output file in format \n" +" -B --binary-architecture Set arch of output file, when input is binary\n" +" -F --target Set both input and output format to \n" +" --debugging Convert debugging information, if possible\n" +" -p --preserve-dates Copy modified/access timestamps to the output\n" +" -j --only-section Only copy section into the output\n" +" --add-gnu-debuglink= Add section .gnu_debuglink linking to \n" +" -R --remove-section Remove section from the output\n" +" -S --strip-all Remove all symbol and relocation information\n" +" -g --strip-debug Remove all debugging symbols & sections\n" +" --strip-unneeded Remove all symbols not needed by relocations\n" +" -N --strip-symbol Do not copy symbol \n" +" --strip-unneeded-symbol \n" +" Do not copy symbol 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 Do not strip symbol \n" +" --keep-file-symbols Do not strip file symbol(s)\n" +" --localize-hidden Turn all ELF hidden symbols into locals\n" +" -L --localize-symbol Force symbol to be marked as a local\n" +" --globalize-symbol Force symbol to be marked as a global\n" +" -G --keep-global-symbol Localize all symbols except \n" +" -W --weaken-symbol Force symbol to be marked as a weak\n" +" --weaken Force all global symbols to be marked as weak\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" +" -i --interleave Only copy one out of every bytes\n" +" -b --byte Select byte in every interleaved block\n" +" --gap-fill Fill gaps between sections with \n" +" --pad-to Pad the last section up to address \n" +" --set-start Set the start address to \n" +" {--change-start|--adjust-start} \n" +" Add to the start address\n" +" {--change-addresses|--adjust-vma} \n" +" Add to LMA, VMA and start addresses\n" +" {--change-section-address|--adjust-section-vma} {=|+|-}\n" +" Change LMA and VMA of section by \n" +" --change-section-lma {=|+|-}\n" +" Change the LMA of section by \n" +" --change-section-vma {=|+|-}\n" +" Change the VMA of section by \n" +" {--[no-]change-warnings|--[no-]adjust-warnings}\n" +" Warn if a named section does not exist\n" +" --set-section-flags =\n" +" Set section 's properties to \n" +" --add-section = Add section found in to output\n" +" --rename-section =[,] Rename section to \n" +" --change-leading-char Force output format's leading character style\n" +" --remove-leading-char Remove leading character from global symbols\n" +" --reverse-bytes= Reverse bytes at a time, in output sections with content\n" +" --redefine-sym = Redefine symbol name to \n" +" --redefine-syms --redefine-sym for all symbol pairs \n" +" listed in \n" +" --srec-len Restrict the length of generated Srecords\n" +" --srec-forceS3 Restrict the type of generated Srecords to S3\n" +" --strip-symbols -N for all symbols listed in \n" +" --strip-unneeded-symbols \n" +" --strip-unneeded-symbol for all symbols listed\n" +" in \n" +" --keep-symbols -K for all symbols listed in \n" +" --localize-symbols -L for all symbols listed in \n" +" --globalize-symbols --globalize-symbol for all in \n" +" --keep-global-symbols -G for all symbols listed in \n" +" --weaken-symbols -W for all symbols listed in \n" +" --alt-machine-code Use the target's '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" +" --impure Mark the output file as impure\n" +" --prefix-symbols Add to start of every symbol name\n" +" --prefix-sections Add to start of every section name\n" +" --prefix-alloc-sections \n" +" Add to start of every allocatable\n" +" section name\n" +" -v --verbose List all object files modified\n" +" @ Read options from \n" +" -V --version Display this program's version number\n" +" -h --help Display this output\n" +" --info List object formats & architectures supported\n" +msgstr "" +" -I --input-target Predpokladať vstup vo formáte \n" +" -O --output-target Vytvoriť výstup vo formáte \n" +" -B --binary-architecture Nastaviť arch výstupného súboru, keď vstup je binárny\n" +" -F --target Nastaviť vstupný aj výstupný formát na \n" +" --debugging Previesť ladieace informácie, ak je to možné\n" +" -p --preserve-dates Skopírovať na výstup časové známku zmeny/prístupu\n" +" -j --only-section Na výstup skopírovať iba sekciu \n" +" --add-gnu-debuglink= Pridať sekciu .gnu_debuglink odkazujúcu na \n" +" -R --remove-section Odstrániť sekciu z výstupu\n" +" -S --strip-all Odstrániť všetky informácie o symboloch a relokácii\n" +" -g --strip-debug Odstrániť všetky ladiace symboly a sekcie\n" +" --strip-unneeded Odstrániť všetky symboly, ktoré nevyžadujú relokácie\n" +" -N --strip-symbol Nekopírovať symbol \n" +" --strip-unneeded-symbol \n" +" Nekopírovať symbol ak ho nevyžadujú\n" +" relokácie\n" +" --only-keep-debug Odstrániť všetko okrem ladiacich informácií\n" +" --extract-symbol Odstrániť obsah sekcie ale ponechat symboly\n" +" -K --keep-symbol Neodstraňovať symbol \n" +" --keep-file-symbols Neodstraňovať symbol(y) súboru\n" +" --localize-hidden Previesť všetky skryté symboly ELF na lokálne\n" +" -L --localize-symbol Vynútiť označenie symbolu ako lokálny\n" +" --globalize-symbol Vynútiť označenie symbolu ako globálny\n" +" -G --keep-global-symbol Lokalizovať všetky symboly okrem \n" +" -W --weaken-symbol Vynútiť označenie symbolu ako slabý\n" +" --weaken Vynútiť označenie všetkých globálnych symbolov ako slabých\n" +" -w --wildcard Povoliť zástupné znaky pri porovnávaní symbolov\n" +" -x --discard-all Odstrániť všetky neglobálne symboly\n" +" -X --discard-locals Odstrániť všetky symboly vygenerované kompilátorom\n" +" -i --interleave <číslo> Iba jedna kópia každých <číslo> bajtov\n" +" -b --byte Vybrať bajt v každom vynechanom bloku\n" +" --gap-fill Vyplniť medzery medzi sekciami pomocou \n" +" --pad-to Doplniť poslednú sekciu do adresy \n" +" --set-start Nastaviť adresu začiatku na \n" +" {--change-start|--adjust-start} \n" +" Pridať k adrese začiatku\n" +" {--change-addresses|--adjust-vma} \n" +" Pridať k adresám LMA, VMA a začiatku\n" +" {--change-section-address|--adjust-section-vma} {=|+|-}\n" +" Zmeniť LMA a VMA sekcie o \n" +" --change-section-lma {=|+|-}\n" +" Zmeniť LMA sekcie o \n" +" --change-section-vma {=|+|-}\n" +" Zmeniť VMA sekcie o \n" +" {--[no-]change-warnings|--[no-]adjust-warnings}\n" +" Upozorniť na neexistenciu pomenovanej sekcie\n" +" --set-section-flags =\n" +" Nastaviť vlastnosti sekcie na \n" +" --add-section = Pridať sekciu , ktorá sa nachádza v na výstup\n" +" --rename-section =[,] Premenovať sekciu na \n" +" --change-leading-char Vynútiť štýl úvodného znaku výstupného formátu\n" +" --remove-leading-char odstrániť úvodný znak z globálnych symbolov\n" +" --reverse-bytes= Otočiť poradie bajtov naraz v sekciách výstupu s obsahom\n" +" --redefine-sym = Redefinovať názov symbolu na \n" +" --redefine-syms --redefine-sym všetkých dvojíc symbolov \n" +" uvedených v \n" +" --srec-len Obmedziť dĺžku generovaných generated Srecords\n" +" --srec-forceS3 Obmedziť typ generovaných Srecords na S3\n" +" --strip-symbols -N pre všetky symboly uvedené v \n" +" --strip-unneeded-symbols \n" +" --strip-unneeded-symbol pre všetky symboly uvedené\n" +" v \n" +" --keep-symbols -K pre všetky symboly uvedené v \n" +" --localize-symbols -L pre všetky symboly uvedené v \n" +" --globalize-symbols --globalize-symbol pre všetky v \n" +" --keep-global-symbols -G pre všetky symboly uvedené v \n" +" --weaken-symbols -W pre všetky symboly uvedené v \n" +" --alt-machine-code Použiť -tý alternatívny stroj cieľa\n" +" --writable-text Označiť výstupný text ako zapisovateľný\n" +" --readonly-text Označiť výstupný text ako chránený proti zápisu\n" +" --pure Označiť výstupný text ako stránkovaný na žiadosť\n" +" --impure Označiť výstupný súbor ako nečistý\n" +" --prefix-symbols Pridať na začiatok každého názvu symbolu\n" +" --prefix-sections Pridať na začiatok každého názvu sekcie\n" +" --prefix-alloc-sections \n" +" Pridať na začiatok každého názvu relokovateľnej\n" +" sekcie\n" +" -v --verbose Vypísať všetky zmenené objekty\n" +" @ Načítať voľby zo \n" +" -V --version Zobraziť verziu programu\n" +" -h --help Vypísať tohto pomocníka\n" +" --info Vypísať zoznam objektových formátov a podporovaných architektúr\n" + +#: objcopy.c:520 +#, c-format +msgid "Usage: %s in-file(s)\n" +msgstr "Použitie: %s vstupný-súbor(y)\n" + +#: objcopy.c:521 +#, c-format +msgid " Removes symbols and sections from files\n" +msgstr " Odstráni symboly a sekcie zo súborov\n" + +#: objcopy.c:523 +#, c-format +msgid "" +" -I --input-target= Assume input file is in format \n" +" -O --output-target= Create an output file in format \n" +" -F --target= Set both input and output format to \n" +" -p --preserve-dates Copy modified/access timestamps to the output\n" +" -R --remove-section= Remove section from the output\n" +" -s --strip-all Remove all symbol and relocation information\n" +" -g -S -d --strip-debug Remove all debugging symbols & sections\n" +" --strip-unneeded Remove all symbols not needed by relocations\n" +" --only-keep-debug Strip everything but the debug information\n" +" -N --strip-symbol= Do not copy symbol \n" +" -K --keep-symbol= Do not strip symbol \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" +" -v --verbose List all object files modified\n" +" -V --version Display this program's version number\n" +" -h --help Display this output\n" +" --info List object formats & architectures supported\n" +" -o Place stripped output into \n" +msgstr "" +" -I --input-target Predpokladať vstup vo formáte \n" +" -O --output-target Vytvoriť výstup vo formáte \n" +" -F --target Nastaviť vstupný aj výstupný formát na \n" +" -p --preserve-dates Skopírovať na výstup časové známku zmeny/prístupu\n" +" -R --remove-section Odstrániť sekciu z výstupu\n" +" -s --strip-all Odstrániť všetky informácie o symboloch a relokácii\n" +" -g -S -d --strip-debug Odstrániť všetky ladiace symboly a sekcie\n" +" --strip-unneeded Odstrániť všetky symboly, ktoré nevyžadujú relokácie\n" +" --only-keep-debug Odstrániť všetko okrem ladiacich informácií\n" +" -N --strip-symbol Nekopírovať symbol \n" +" -K --keep-symbol Neodstraňovať symbol \n" +" --keep-file-symbols Neodstraňovať symbol(y) súboru\n" +" -w --wildcard Povoliť zástupné znaky pri porovnávaní symbolov\n" +" -x --discard-all Odstrániť všetky neglobálne symboly\n" +" -X --discard-locals Odstrániť všetky symboly vygenerované kompilátorom\n" +" -v --verbose Vypísať všetky zmenené objekty\n" +" -V --version Zobraziť verziu programu\n" +" -h --help Vypísať tohto pomocníka\n" +" --info Vypísať zoznam objektových formátov a podporovaných architektúr\n" +" -o Vložiť orezaný výstup do \n" + +#: objcopy.c:596 +#, c-format +msgid "unrecognized section flag `%s'" +msgstr "nerozpoznaný príznak sekcie „%s“" + +#: objcopy.c:597 +#, c-format +msgid "supported flags: %s" +msgstr "podporované príznaky: %s" + +#: objcopy.c:698 +#, c-format +msgid "cannot open '%s': %s" +msgstr "nemožno otvoriť „%s“: %s" + +#: objcopy.c:701 objcopy.c:3065 +#, c-format +msgid "%s: fread failed" +msgstr "%s: fread zlyhal" + +#: objcopy.c:774 +#, c-format +msgid "%s:%d: Ignoring rubbish found on this line" +msgstr "%s:%d: Ignorujú sa zbytočnosti nájdené v tomto riadku" + +#: objcopy.c:1069 +#, c-format +msgid "not stripping symbol `%s' because it is named in a relocation" +msgstr "neodstraňovať symbol „%s“, pretože je spomenutý v relokácii" + +#: objcopy.c:1152 +#, c-format +msgid "%s: Multiple redefinition of symbol \"%s\"" +msgstr "%s: Viacnásobná redefinícia symbolu „%s“" + +#: objcopy.c:1156 +#, c-format +msgid "%s: Symbol \"%s\" is target of more than one redefinition" +msgstr "%s: Symbol „%s“ je cieľom viac ako jednej redefinície" + +#: objcopy.c:1184 +#, c-format +msgid "couldn't open symbol redefinition file %s (error: %s)" +msgstr "nepodarilo sa otvoriť súbor redefinície symbolov %s (chyba: %s)" + +#: objcopy.c:1262 +#, c-format +msgid "%s:%d: garbage found at end of line" +msgstr "%s:%d: nájdené nezmysly na konci riadka" + +#: objcopy.c:1265 +#, c-format +msgid "%s:%d: missing new symbol name" +msgstr "%s:%d: chýba názov nového symbolu" + +#: objcopy.c:1275 +#, c-format +msgid "%s:%d: premature end of file" +msgstr "%s:%d: predčasné ukončenie riadka" + +#: objcopy.c:1301 +#, c-format +msgid "stat returns negative size for `%s'" +msgstr "stat vracia zápornú veľkosť pre „%s“" + +#: objcopy.c:1313 +#, c-format +msgid "copy from `%s' [unknown] to `%s' [unknown]\n" +msgstr "kopírovať z „%s“ [neznámy] do „%s“ [neznámy]\n" + +#: objcopy.c:1369 +msgid "Unable to change endianness of input file(s)" +msgstr "Nemožno zmeniť endianitu vstupného súboru(-ov)" + +#: objcopy.c:1378 +#, c-format +msgid "copy from `%s' [%s] to `%s' [%s]\n" +msgstr "kopírovať z „%s“ [%s] do „%s“ [%s]\n" + +#: objcopy.c:1421 +#, c-format +msgid "Unable to recognise the format of the input file `%s'" +msgstr "Nemožno rozpoznať formát vstupného súboru „%s“" + +#: objcopy.c:1424 +#, c-format +msgid "Warning: Output file cannot represent architecture `%s'" +msgstr "Upozornenie: Výstupný súbor nemôže reprezentovať architektúru „%s“" + +#: objcopy.c:1489 +#, c-format +msgid "can't add section '%s'" +msgstr "nemožno pridať sekciu „%s“" + +#: objcopy.c:1498 +#, c-format +msgid "can't create section `%s'" +msgstr "nemožno vytvoriť sekciu „%s“" + +#: objcopy.c:1544 +#, c-format +msgid "cannot create debug link section `%s'" +msgstr "nemožno vytvoriť ladiacu sekciu: „%s“" + +#: objcopy.c:1637 +msgid "Can't fill gap after section" +msgstr "Nemožno vyplniť medzeru po sekcii" + +#: objcopy.c:1661 +msgid "can't add padding" +msgstr "Nemožno pridať výplň" + +#: objcopy.c:1752 +#, c-format +msgid "cannot fill debug link section `%s'" +msgstr "nemožno vyplniť ladiacu sekciu: „%s“" + +#: objcopy.c:1815 +msgid "error copying private BFD data" +msgstr "chyba pri kopírovaní privátnych BFD dát" + +#: objcopy.c:1826 +#, c-format +msgid "this target does not support %lu alternative machine codes" +msgstr "tento cieľ nepodporuje alternatívne strojové kódy %lu" + +#: objcopy.c:1830 +msgid "treating that number as an absolute e_machine value instead" +msgstr "namiesto toho sa toto číslo považuje za absolútnu hodnotu e_machine" + +#: objcopy.c:1834 +msgid "ignoring the alternative value" +msgstr "ignoruje sa alternatívna hodnota" + +#: objcopy.c:1864 objcopy.c:1895 +#, c-format +msgid "cannot create tempdir for archive copying (error: %s)" +msgstr "nie je možné vytvoriť dočasný adresár pre kopírovanie archívu (chyba: %s)" + +#: objcopy.c:1957 +msgid "Unable to recognise the format of file" +msgstr "Nemožno rozpoznať formát súboru" + +#: objcopy.c:2147 +#, c-format +msgid "Multiple renames of section %s" +msgstr "Viacnásobné premenovanie sekcie %s" + +#: objcopy.c:2198 +msgid "error in private h\teader data" +msgstr "chyba v privátnych dátach hlavičky" + +#: objcopy.c:2276 +msgid "failed to create output section" +msgstr "nepodarilo sa vytvoriť výstupnú sekciu" + +#: objcopy.c:2290 +msgid "failed to set size" +msgstr "nepodarilo sa nastaviť veľkosť" + +#: objcopy.c:2304 +msgid "failed to set vma" +msgstr "nepodarilo sa nastaviť vma" + +#: objcopy.c:2329 +msgid "failed to set alignment" +msgstr "nepodarilo sa nastaviť zarovnanie" + +#: objcopy.c:2351 +msgid "failed to copy private data" +msgstr "chyba pri kopírovaní privátnych dát" + +#: objcopy.c:2440 +msgid "relocation count is negative" +msgstr "počet relokácií je záporný" + +#. User must pad the section up in order to do this. +#: objcopy.c:2501 +#, c-format +msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d" +msgstr "nie je možné obrátiť poradie bajtov: dĺžka sekcie %s musí byť bezo zvyšku deliteľná %d" + +#: objcopy.c:2685 +msgid "can't create debugging section" +msgstr "nemožno vytvoriť ladiacu sekciu" + +#: objcopy.c:2698 +msgid "can't set debugging section contents" +msgstr "nemožno nastaviť obsah ladiacej sekcie" + +#: objcopy.c:2706 +#, c-format +msgid "don't know how to write debugging information for %s" +msgstr "nevie sa ako sa má zapísať ladiaca informácia pre %s" + +#: objcopy.c:2848 +msgid "could not create temporary file to hold stripped copy" +msgstr "nebolo možné vytvoriť dočasný súbor pre orezanú kópiu" + +#: objcopy.c:2897 +msgid "byte number must be non-negative" +msgstr "číslo bajtu musí byť nezáporné" + +#: objcopy.c:2907 +msgid "interleave must be positive" +msgstr "vloženie musí byť kladné" + +#: objcopy.c:2927 objcopy.c:2935 +#, c-format +msgid "%s both copied and removed" +msgstr "%s obe skopírované a odstránené" + +#: objcopy.c:3036 objcopy.c:3110 objcopy.c:3210 objcopy.c:3241 objcopy.c:3265 +#: objcopy.c:3269 objcopy.c:3289 +#, c-format +msgid "bad format for %s" +msgstr "zlý formát pre %s" + +#: objcopy.c:3060 +#, c-format +msgid "cannot open: %s: %s" +msgstr "nemožno otvoriť: %s: %s" + +#: objcopy.c:3179 +#, c-format +msgid "Warning: truncating gap-fill from 0x%s to 0x%x" +msgstr "Upozornenie: skracuje sa výplň medzery z 0x%s na 0x%x" + +#: objcopy.c:3347 +msgid "unable to parse alternative machine code" +msgstr "nepodarila sa syntaktická analýza alternatívneho strojového kódu" + +#: objcopy.c:3392 +msgid "number of bytes to reverse must be positive and even" +msgstr "pičet bajtov, ktorých poradie sa má otočiť musí byť kladný a párny" + +#: objcopy.c:3395 +#, c-format +msgid "Warning: ignoring previous --reverse-bytes value of %d" +msgstr "Upozornenie: ignoruje sa predošlá hodnota --reverse-bytes %d" + +#: objcopy.c:3423 +msgid "byte number must be less than interleave" +msgstr "číslo bajtu musí byť menšie než vloženie" + +#: objcopy.c:3453 +#, c-format +msgid "architecture %s unknown" +msgstr "architektúra %s neznáma" + +#: objcopy.c:3457 +msgid "Warning: input target 'binary' required for binary architecture parameter." +msgstr "Upozornenie: vstupný cieľ 'binary' je požadovaný pre parameter binárnej architektúry." + +#: objcopy.c:3458 +#, c-format +msgid " Argument %s ignored" +msgstr " Argument %s ignorovaný" + +#: objcopy.c:3464 +#, c-format +msgid "warning: could not locate '%s'. System error message: %s" +msgstr "upozornenie: nepadarilo sa nájsť „%s“. Sytémové chybové hlásenie: %s" + +#: objcopy.c:3475 +#, c-format +msgid "warning: could not create temporary file whilst copying '%s', (error: %s)" +msgstr "upozornenie: nebolo možné vytvoriť dočasný súbor počas kopírovania „%s“, (chyba: %s)" + +#: objcopy.c:3502 objcopy.c:3516 +#, c-format +msgid "%s %s%c0x%s never used" +msgstr "%s %s%c0x%s nikdy nepoužité" + +#: objdump.c:182 +#, c-format +msgid "Usage: %s \n" +msgstr "Použitie: %s \n" + +#: objdump.c:183 +#, c-format +msgid " Display information from object .\n" +msgstr " Zobraziť informácie z objektového .\n" + +#: objdump.c:184 +#, c-format +msgid " At least one of the following switches must be given:\n" +msgstr " Najmenej jeden z následujúcich prepínačov musí byť uvedený:\n" + +#: objdump.c:185 +#, c-format +msgid "" +" -a, --archive-headers Display archive header information\n" +" -f, --file-headers Display the contents of the overall file header\n" +" -p, --private-headers Display object format specific file header contents\n" +" -h, --[section-]headers Display the contents of the section headers\n" +" -x, --all-headers Display the contents of all headers\n" +" -d, --disassemble Display assembler contents of executable sections\n" +" -D, --disassemble-all Display assembler contents of all sections\n" +" -S, --source Intermix source code with disassembly\n" +" -s, --full-contents Display the full contents of all sections requested\n" +" -g, --debugging Display debug information in object file\n" +" -e, --debugging-tags Display debug information using ctags style\n" +" -G, --stabs Display (in raw form) any STABS info in the file\n" +" -W, --dwarf Display DWARF info in the file\n" +" -t, --syms Display the contents of the symbol table(s)\n" +" -T, --dynamic-syms Display the contents of the dynamic symbol table\n" +" -r, --reloc Display the relocation entries in the file\n" +" -R, --dynamic-reloc Display the dynamic relocation entries in the file\n" +" @ Read options from \n" +" -v, --version Display this program's version number\n" +" -i, --info List object formats and architectures supported\n" +" -H, --help Display this information\n" +msgstr "" +" -a, --archive-headers Zobraziť informácie hlavičky archívu\n" +" -f, --file-headers Zobraziť obsah hlavičky celého súboru\n" +" -p, --private-headers Zobraziť objektový formát špecifický pre obsah hlavičky súboru\n" +" -h, --[section-]headers Zobraziť obsah hlavičiek sekcií\n" +" -x, --all-headers Zobraziť obsah všetkých hlavičiek\n" +" -d, --disassemble Zobraziť assembler obsahu vykonateľných sekcií\n" +" -D, --disassemble-all Zobraziť assembler obsahu všetkých sekcií\n" +" -S, --source Premiešať zdrojový kód s výstupom disassemblera\n" +" -s, --full-contents Zobraziť plný obsah požadovaných sekcií\n" +" -g, --debugging Zobraziť ladiace informácie objektového súboru\n" +" -e, --debugging-tags Zobraziť ladiace informácie v štýle ctags\n" +" -G, --stabs Zobraziť (v nespracovanom formáte) všetky STABS informácie zo súboru\n" +" -W, --dwarf Zobraziť DWARF informácie zo súboru\n" +" -t, --syms Zobraziť obsah tabuliek symbolov\n" +" -T, --dynamic-syms Zobraziť obsah dynamickej tabuľky symbolov\n" +" -r, --reloc Zobraziť relokačné záznamy zo súboru\n" +" -R, --dynamic-reloc Zobraziť dynamické relokačné záznamy zo súboru\n" +" @ Načítať voľby zo \n" +" -v, --version Zobraziť verziu tohto programu\n" +" -i, --info Vypísať objektové formáty a podporované architektúry\n" +" -H, --help Zobraziť tohto pomocníka\n" + +#: objdump.c:210 +#, c-format +msgid "" +"\n" +" The following switches are optional:\n" +msgstr "" +"\n" +" Následujúce prepínače sú voliteľné:\n" + +#: objdump.c:211 +#, c-format +msgid "" +" -b, --target=BFDNAME Specify the target object format as BFDNAME\n" +" -m, --architecture=MACHINE Specify the target architecture as MACHINE\n" +" -j, --section=NAME Only display information for section NAME\n" +" -M, --disassembler-options=OPT Pass text OPT on to the disassembler\n" +" -EB --endian=big Assume big endian format when disassembling\n" +" -EL --endian=little Assume little endian format when disassembling\n" +" --file-start-context Include context from start of file (with -S)\n" +" -I, --include=DIR Add DIR to search list for source files\n" +" -l, --line-numbers Include line numbers and filenames in output\n" +" -F, --file-offsets Include file offsets when displaying information\n" +" -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" +" The STYLE, if specified, can be `auto', `gnu',\n" +" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" +" -w, --wide Format output for more than 80 columns\n" +" -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n" +" --start-address=ADDR Only process data whose address is >= ADDR\n" +" --stop-address=ADDR Only process data whose address is <= ADDR\n" +" --prefix-addresses Print complete address alongside disassembly\n" +" --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" +" --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" +" --special-syms Include special symbols in symbol dumps\n" +"\n" +msgstr "" +" -b, --target=BFDNÁZOV Uviesť cieľový objektový formát ako BFDNÁZOV\n" +" -m, --architecture=STROJ Uviesť cieľovú architektúru ako STROJ\n" +" -j, --section=NÁZOV Zobrazovať iba informácie sekcie NÁZOV\n" +" -M, --disassembler-options=VOĽ Odovzdať text VOĽ disassembleru\n" +" -EB --endian=big Disassembler má predpokladať formát big endian\n" +" -EL --endian=little Disassembler má predpokladať formát little endian\n" +" --file-start-context Vložiť kontext od začiatku súboru (s -S)\n" +" -I, --include=ADR Pridať ADR do zoznamu adresárov pre hľadanie zdrojových súborov\n" +" -l, --line-numbers Na výstupe uvádzať čísla riadkov a názvy súborov\n" +" -C, --demangle[=ŠTÝL] Dekódovať neformátované/spracované názvy symbolov\n" +" ŠTÝL, ak je uvedený, môlže byť „auto“, „gnu“,\n" +" „lucid“, „arm“, „hp“, „edg“, „gnu-v3“, „java“\n" +" alebo „gnat“\n" +" -w, --wide Formátovať výstup na viac ako 80 stĺpcov\n" +" -z, --disassemble-zeroes Disassember nemá preskakovať bloky núl\n" +" --start-address=ADDR Spracúvať iba údaje ktorých adresa >= ADDR\n" +" --stop-address=ADDR Spracúvať iba údaje ktorých adresa <= ADDR\n" +" --prefix-addresses Disassember má vypisovať aj kompletné adresy\n" +" --[no-]show-raw-insn Disassember má vedľa symbolického zápisu vypisovať aj hexadecimálny\n" +" --adjust-vma=OFSET Pridať OFSET ku všetkým zobrazovaným adresám sekcií\n" +" --special-syms Zahrnúť do výpisu symbolov špeciálne symboly\n" +"\n" + +#: objdump.c:395 +#, c-format +msgid "Sections:\n" +msgstr "Sekcie:\n" + +#: objdump.c:398 objdump.c:402 +#, c-format +msgid "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Názov Veľkosť VMA LMA Súb. vyp. Zar." + +#: objdump.c:404 +#, c-format +msgid "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Názov Veľkosť VMA LMA Súb. vyp. Zar." + +#: objdump.c:408 +#, c-format +msgid " Flags" +msgstr " Príznaky" + +#: objdump.c:410 +#, c-format +msgid " Pg" +msgstr " Pg" + +#: objdump.c:453 +#, c-format +msgid "%s: not a dynamic object" +msgstr "%s: nie je dynamický objekt" + +#: objdump.c:878 objdump.c:902 +#, c-format +msgid " (File Offset: 0x%lx)" +msgstr " (Ofset súboru: 0x%lx)" + +#: objdump.c:1818 +#, c-format +msgid "" +"\n" +"Disassembly of section %s:\n" +msgstr "" +"\n" +"Rozloženie sekcie %s:\n" + +#: objdump.c:1980 +#, c-format +msgid "Can't use supplied machine %s" +msgstr "Nedá sa použiť zadaná architekúra %s" + +#: objdump.c:1999 +#, c-format +msgid "Can't disassemble for architecture %s\n" +msgstr "Nedá sa rozložiť pre architekúru %s\n" + +#: objdump.c:2114 +#, c-format +msgid "" +"\n" +"Can't get contents for section '%s'.\n" +msgstr "" +"\n" +"Nedá sa získať obsah pre sekciu „%s“.\n" + +#: objdump.c:2125 +#, c-format +msgid "" +"\n" +"Can't uncompress section '%s'.\n" +msgstr "" +"\n" +"Nie je možné dekomprimovať sekciu „%s“.\n" + +#: objdump.c:2305 +#, c-format +msgid "" +"No %s section present\n" +"\n" +msgstr "" +"Nenachádza sa žiadna sekcia %s\n" +"\n" + +#: objdump.c:2314 +#, c-format +msgid "Reading %s section of %s failed: %s" +msgstr "Čítanie %s sekcie z %s zlyhalo: %s" + +#: objdump.c:2358 +#, c-format +msgid "" +"Contents of %s section:\n" +"\n" +msgstr "" +"Obsah %s sekcie:\n" +"\n" + +#: objdump.c:2489 +#, c-format +msgid "architecture: %s, " +msgstr "architektúra: %s, " + +#: objdump.c:2492 +#, c-format +msgid "flags 0x%08x:\n" +msgstr "príznaky 0x%08x:\n" + +#: objdump.c:2506 +#, c-format +msgid "" +"\n" +"start address 0x" +msgstr "" +"\n" +"štartovacia adresa 0x" + +#: objdump.c:2569 +#, c-format +msgid "Contents of section %s:" +msgstr "Obsah sekcie %s:" + +#: objdump.c:2571 +#, c-format +msgid " (Starting at file offset: 0x%lx)" +msgstr " (Počínajúc na ofsete súboru: 0x%lx)" + +#: objdump.c:2678 +#, c-format +msgid "no symbols\n" +msgstr "žiadne symboly\n" + +#: objdump.c:2685 +#, c-format +msgid "no information for symbol number %ld\n" +msgstr "žiadne informácie pre číslo symbolu %ld\n" + +#: objdump.c:2688 +#, c-format +msgid "could not determine the type of symbol number %ld\n" +msgstr "nedá sa určiť typ čísla symbolu %ld\n" + +#: objdump.c:2965 +#, c-format +msgid "" +"\n" +"%s: file format %s\n" +msgstr "" +"\n" +"%s: formát súboru %s\n" + +#: objdump.c:3023 +#, c-format +msgid "%s: printing debugging information failed" +msgstr "%s: tlač ladiacich informácii zlahala" + +#: objdump.c:3123 +#, c-format +msgid "In archive %s:\n" +msgstr "V archíve %s:\n" + +#: objdump.c:3238 +msgid "error: the start address should be before the end address" +msgstr "chyba: štart adresa by mala byť pred koncovou adresou" + +#: objdump.c:3243 +msgid "error: the stop address should be after the start address" +msgstr "chyba: stop adresa by mala byť po štart adrese" + +#: objdump.c:3252 +msgid "unrecognized -E option" +msgstr "nerozpoznaná -E voľba" + +#: objdump.c:3263 +#, c-format +msgid "unrecognized --endian type `%s'" +msgstr "nerozpoznaný --endian typ „%s“" + +#: rclex.c:197 +msgid "invalid value specified for pragma code_page.\n" +msgstr "bola uvedená neplatná hodnota pragma code_page.\n" + +#: rdcoff.c:198 +#, c-format +msgid "parse_coff_type: Bad type code 0x%x" +msgstr "parse_coff_type: Zlý typový kód 0x%x" + +#: rdcoff.c:406 rdcoff.c:511 rdcoff.c:699 +#, c-format +msgid "bfd_coff_get_syment failed: %s" +msgstr "bfd_coff_get_syment zlyhal: %s" + +#: rdcoff.c:422 rdcoff.c:719 +#, c-format +msgid "bfd_coff_get_auxent failed: %s" +msgstr "bfd_coff_get_auxent zlyhal: %s" + +#: rdcoff.c:786 +#, c-format +msgid "%ld: .bf without preceding function" +msgstr "%ld: .bf bez predchádzajúcej funkcie" + +#: rdcoff.c:836 +#, c-format +msgid "%ld: unexpected .ef\n" +msgstr "%ld: neočakávané .ef\n" + +#: rddbg.c:88 +#, c-format +msgid "%s: no recognized debugging information" +msgstr "%s: žiadna rozpoznaná ladiaca informácia" + +#: rddbg.c:402 +#, c-format +msgid "Last stabs entries before error:\n" +msgstr "Posledné testovacie záznamy pred chybou:\n" + +#: readelf.c:312 +#, c-format +msgid "Unable to seek to 0x%lx for %s\n" +msgstr "Nedá sa vyhľadať 0x%lx pre %s\n" + +#: readelf.c:327 +#, c-format +msgid "Out of memory allocating 0x%lx bytes for %s\n" +msgstr "Nedostatok pamäti pri alokácii 0x%lx bajtov pre %s\n" + +#: readelf.c:337 +#, c-format +msgid "Unable to read in 0x%lx bytes of %s\n" +msgstr "Nedá sa prečítať v 0x%lx bajtoch z %s\n" + +#: readelf.c:642 +msgid "Don't know about relocations on this machine architecture\n" +msgstr "Nepoznám realokácie pre architektúru tohto počítača\n" + +#: readelf.c:662 readelf.c:690 readelf.c:756 readelf.c:784 +msgid "relocs" +msgstr "relocs" + +#: readelf.c:673 readelf.c:701 readelf.c:767 readelf.c:795 +msgid "out of memory parsing relocs\n" +msgstr "nedostatok pamäte pri spracúvaní relokačných záznamov\n" + +#: readelf.c:901 +#, c-format +msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym + Sčítanec\n" + +#: readelf.c:903 +#, c-format +msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym + Sčítanec\n" + +#: readelf.c:908 +#, c-format +msgid " Offset Info Type Sym. Value Symbol's Name\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym\n" + +#: readelf.c:910 +#, c-format +msgid " Offset Info Type Sym.Value Sym. Name\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym\n" + +#: readelf.c:918 +#, c-format +msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym + Sčítanec\n" + +#: readelf.c:920 +#, c-format +msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym + Sčítanec\n" + +#: readelf.c:925 +#, c-format +msgid " Offset Info Type Symbol's Value Symbol's Name\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym\n" + +#: readelf.c:927 +#, c-format +msgid " Offset Info Type Sym. Value Sym. Name\n" +msgstr " Ofset Info Typ Hodnota sym Názov sym\n" + +#: readelf.c:1204 readelf.c:1324 readelf.c:1332 +#, c-format +msgid "unrecognized: %-7lx" +msgstr "norozpoznaný: %-7lx" + +#: readelf.c:1229 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:1289 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:1291 +#, c-format +msgid "" +msgstr "" + +#: readelf.c:1657 +#, c-format +msgid "Processor Specific: %lx" +msgstr "Špecifické pre procesor: %lx" + +#: readelf.c:1681 +#, c-format +msgid "Operating System specific: %lx" +msgstr "Špecifické pre operačný systém: %lx" + +#: readelf.c:1685 readelf.c:2562 +#, c-format +msgid ": %lx" +msgstr ": %lx" + +#: readelf.c:1698 +msgid "NONE (None)" +msgstr "NONE (Žiadny)" + +#: readelf.c:1699 +msgid "REL (Relocatable file)" +msgstr "REL (Relokačný súbor)" + +#: readelf.c:1700 +msgid "EXEC (Executable file)" +msgstr "EXEC (Spustiteľný súbor)" + +#: readelf.c:1701 +msgid "DYN (Shared object file)" +msgstr "DYN (Súbor zdielaného objektu)" + +#: readelf.c:1702 +msgid "CORE (Core file)" +msgstr "CORE (Súbor jadra)" + +#: readelf.c:1706 +#, c-format +msgid "Processor Specific: (%x)" +msgstr "Špecifické pre procesor: (%x)" + +#: readelf.c:1708 +#, c-format +msgid "OS Specific: (%x)" +msgstr "Špecifické pre OS: (%x)" + +#: readelf.c:1710 readelf.c:2779 +#, c-format +msgid ": %x" +msgstr ": %x" + +#: readelf.c:1722 +msgid "None" +msgstr "Žiadny" + +#: readelf.c:1829 +#, c-format +msgid ": 0x%x" +msgstr ": 0x%x" + +#: readelf.c:2086 +msgid "unknown" +msgstr "neznáme" + +#: readelf.c:2087 +msgid "unknown mac" +msgstr "neznáma mac" + +#: readelf.c:2399 +msgid "Standalone App" +msgstr "Samostatná aplikácia" + +#: readelf.c:2402 readelf.c:3221 readelf.c:3237 +#, c-format +msgid "" +msgstr ": %x" + +#: readelf.c:2826 +#, c-format +msgid "Usage: readelf elf-file(s)\n" +msgstr "Použitie: readelf elf-súbor(y)\n" + +#: readelf.c:2827 +#, c-format +msgid " Display information about the contents of ELF format files\n" +msgstr " Zobraziť informácie o obsahu súborov formátu ELF\n" + +#: readelf.c:2828 +#, c-format +msgid "" +" 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" +" --segments An alias for --program-headers\n" +" -S --section-headers Display the sections' header\n" +" --sections An alias for --section-headers\n" +" -g --section-groups Display the section groups\n" +" -t --section-details Display the section details\n" +" -e --headers Equivalent to: -h -l -S\n" +" -s --syms Display the symbol table\n" +" --symbols An alias for --syms\n" +" -n --notes Display the core notes (if present)\n" +" -r --relocs Display the relocations (if present)\n" +" -u --unwind Display the unwind info (if present)\n" +" -d --dynamic Display the dynamic section (if present)\n" +" -V --version-info Display the version sections (if present)\n" +" -A --arch-specific Display architecture specific information (if any).\n" +" -c --archive-index Display the symbol/file index in an archive\n" +" -D --use-dynamic Use the dynamic section info when displaying symbols\n" +" -x --hex-dump=\n" +" Dump the contents of section as bytes\n" +" -p --string-dump=\n" +" Dump the contents of section as strings\n" +" -w[lLiaprmfFsoR] or\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Display the contents of DWARF2 debug sections\n" +msgstr "" +" Voľby sú:\n" +" -a --all Ekvivalent: -h -l -S -s -r -d -V -A -I\n" +" -h --file-header Zobraziť halvičku ELF súboru\n" +" -l --program-headers Zobraziť hlavičky programu\n" +" --segments Alias pre --program-headers\n" +" -S --section-headers Zobraziť hlavičky sekcií\n" +" --sections Alias pre --section-headers\n" +" -g --section-groups Zobraziť skupiny sekcií\n" +" -t --section-details Zobraziť podrobnosti sekcií\n" +" -e --headers Ekvivalent: -h -l -S\n" +" -s --syms Zobraziť tabuľku symbolov\n" +" --symbols Alias pre --syms\n" +" -n --notes Zobraziť poznámky core (ak sú prítomné)\n" +" -r --relocs Zobraziť relokácie (ak sú prítomné)\n" +" -u --unwind Zobraziť informácie o rozvinutí (ak sú prítomné)\n" +" -d --dynamic Zobraziť dynamickú sekciu (ak je prítomná)\n" +" -V --version-info Zobraziť sekcie verzií (ak sú prítomné)\n" +" -A --arch-specific Zobraziť informácie špeicické pre architektúru (ak nejaké sú).\n" +" -c --archive-index Zobraziť index symbolov/súborov v archíve\n" +" -D --use-dynamic Použiť na zobrazenie symbolov ifnormácie dynamickej sekcie\n" +" -x --hex-dump=<číslo|názov>\n" +" Vypísať obsah sekcie <číslo|názov> vo forme bajtov\n" +" -p --string-dump=<číslo|názov>\n" +" Vypísať obsah sekcie <číslo|názov> vo forme reťazcov\n" +" -w[liaprmfFsoR] alebo\n" +" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Zobraziť ladiacich sekcií DWARF2\n" + +#: readelf.c:2856 +#, c-format +msgid "" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" +msgstr "" +" -i --instruction-dump=<číslo|názov>\n" +" Rozložiť obsah sekcie <číslo|názov>\n" + +#: readelf.c:2860 +#, c-format +msgid "" +" -I --histogram Display histogram of bucket list lengths\n" +" -W --wide Allow output width to exceed 80 characters\n" +" @ Read options from \n" +" -H --help Display this information\n" +" -v --version Display the version number of readelf\n" +msgstr "" +" -I --histogram Zobraziť histogram dĺžok zoznamu oblasti\n" +" -W --wide Umožniť prekročenie 80 znakov\n" +" @ Čítať voľby zo u\n" +" -H --help Zobraziť túto informáciu\n" +" -v --version Zobraziť readelf verziu\n" + +#: readelf.c:2888 readelf.c:2916 readelf.c:2920 readelf.c:11007 +msgid "Out of memory allocating dump request table.\n" +msgstr "Nedostatok pamäte pri alokácii tabuľky požiadaviek o výpis.\n" + +#: readelf.c:3090 readelf.c:3160 +#, c-format +msgid "Unrecognized debug option '%s'\n" +msgstr "Nerozpoznaná ladiaca voľba „%s“\n" + +#: readelf.c:3191 +#, c-format +msgid "Invalid option '-%c'\n" +msgstr "Neplatná voľba „-%c“\n" + +#: readelf.c:3205 +msgid "Nothing to do.\n" +msgstr "Nie je čo robiť.\n" + +#: readelf.c:3217 readelf.c:3233 readelf.c:6495 +msgid "none" +msgstr "žiadny" + +#: readelf.c:3234 +msgid "2's complement, little endian" +msgstr "komplement 2, malý endián" + +#: readelf.c:3235 +msgid "2's complement, big endian" +msgstr "domplement 2, veľký endián" + +#: readelf.c:3253 +msgid "Not an ELF file - it has the wrong magic bytes at the start\n" +msgstr "Nie je ELF súbor - na začiatku má nesprávne kúzelné bajty\n" + +#: readelf.c:3263 +#, c-format +msgid "ELF Header:\n" +msgstr "ELF Hlavička:\n" + +#: readelf.c:3264 +#, c-format +msgid " Magic: " +msgstr " Kúzlo: " + +#: readelf.c:3268 +#, c-format +msgid " Class: %s\n" +msgstr " Trieda: %s\n" + +#: readelf.c:3270 +#, c-format +msgid " Data: %s\n" +msgstr " Dáta: %s\n" + +#: readelf.c:3272 +#, c-format +msgid " Version: %d %s\n" +msgstr " Verzia: %d %s\n" + +#: readelf.c:3279 +#, c-format +msgid " OS/ABI: %s\n" +msgstr " OS / ABI: %s\n" + +#: readelf.c:3281 +#, c-format +msgid " ABI Version: %d\n" +msgstr " ABI verzia: %d\n" + +#: readelf.c:3283 +#, c-format +msgid " Type: %s\n" +msgstr " Typ: %s\n" + +#: readelf.c:3285 +#, c-format +msgid " Machine: %s\n" +msgstr " Počítač: %s\n" + +#: readelf.c:3287 +#, c-format +msgid " Version: 0x%lx\n" +msgstr " Verzia: 0x%lx\n" + +#: readelf.c:3290 +#, c-format +msgid " Entry point address: " +msgstr " Adresa vstupného bodu: " + +#: readelf.c:3292 +#, c-format +msgid "" +"\n" +" Start of program headers: " +msgstr "" +"\n" +" Začiatok hlavičiek programu: " + +#: readelf.c:3294 +#, c-format +msgid "" +" (bytes into file)\n" +" Start of section headers: " +msgstr "" +" (bajtov do súboru)\n" +" Začiatok sekcie hlavičiek: " + +#: readelf.c:3296 +#, c-format +msgid " (bytes into file)\n" +msgstr " (bajtov do súboru)\n" + +#: readelf.c:3298 +#, c-format +msgid " Flags: 0x%lx%s\n" +msgstr " Príznaky: 0x%lx%s\n" + +#: readelf.c:3301 +#, c-format +msgid " Size of this header: %ld (bytes)\n" +msgstr " Veľkosť tejto hlavičky: %ld (bajtov)\n" + +#: readelf.c:3303 +#, c-format +msgid " Size of program headers: %ld (bytes)\n" +msgstr " Veľkosť hlavičiek programu: %ld (bajtov)\n" + +#: readelf.c:3305 +#, c-format +msgid " Number of program headers: %ld\n" +msgstr " Počet hlavičiek programu: %ld\n" + +#: readelf.c:3307 +#, c-format +msgid " Size of section headers: %ld (bytes)\n" +msgstr " Veľkosť sekcie hlavičiek: %ld (bajtov)\n" + +#: readelf.c:3309 +#, c-format +msgid " Number of section headers: %ld" +msgstr " Počet hlavičiek sekcií: %ld" + +#: readelf.c:3314 +#, c-format +msgid " Section header string table index: %ld" +msgstr " Index tabuľky reťazcov hlavičky sekcie: %ld" + +#: readelf.c:3350 readelf.c:3383 +msgid "program headers" +msgstr "hlavičky programu" + +#: readelf.c:3421 readelf.c:3719 readelf.c:3760 readelf.c:3819 readelf.c:3884 +#: readelf.c:4553 readelf.c:4577 readelf.c:5827 readelf.c:5871 readelf.c:6069 +#: readelf.c:7127 readelf.c:7141 readelf.c:7635 readelf.c:7651 readelf.c:7694 +#: readelf.c:7719 readelf.c:9475 readelf.c:9667 readelf.c:10194 +#: readelf.c:10857 +msgid "Out of memory\n" +msgstr "Nedostatok pamäte\n" + +#: readelf.c:3448 +#, c-format +msgid "" +"\n" +"There are no program headers in this file.\n" +msgstr "" +"\n" +"V tomto súbore nie sú žiadne hlavičky programu.\n" + +#: readelf.c:3454 +#, c-format +msgid "" +"\n" +"Elf file type is %s\n" +msgstr "" +"\n" +"Typ súboru Elf je %s\n" + +#: readelf.c:3455 +#, c-format +msgid "Entry point " +msgstr "Bod vstupu " + +#: readelf.c:3457 +#, c-format +msgid "" +"\n" +"There are %d program headers, starting at offset " +msgstr "" +"\n" +"Počet nájdených hlavičiek programu je %d, začínam na offsete " + +#: readelf.c:3469 readelf.c:3471 +#, c-format +msgid "" +"\n" +"Program Headers:\n" +msgstr "" +"\n" +"Hlavičky programu:\n" + +#: readelf.c:3475 +#, c-format +msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" +msgstr " Typ Ofset VirtAdr FyzAdr VeľSúb VeľPam Prí Zarovnanie\n" + +#: readelf.c:3478 +#, c-format +msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" +msgstr " Typ Ofset VirtAdr FyzAdr VeľSúb VeľPam Prí Zarovnanie\n" + +#: readelf.c:3482 +#, c-format +msgid " Type Offset VirtAddr PhysAddr\n" +msgstr " Typ Ofset VirtAdr FyzAdr\n" + +#: readelf.c:3484 +#, c-format +msgid " FileSiz MemSiz Flags Align\n" +msgstr " VeľSúb VeľPam Prízn Zarovnanie\n" + +#: readelf.c:3577 +msgid "more than one dynamic segment\n" +msgstr "viac ako jeden dynamický segment\n" + +#: readelf.c:3593 +msgid "no .dynamic section in the dynamic segment\n" +msgstr "v dynamickom segmente nebola sekcia .dynamic\n" + +#: readelf.c:3608 +msgid "the .dynamic section is not contained within the dynamic segment\n" +msgstr "v dynamický segment neobsahoval sekciu .dynamic\n" + +#: readelf.c:3611 +msgid "the .dynamic section is not the first section in the dynamic segment.\n" +msgstr "v dynamický segment neobsahoval sekciu .dynamic ako prvú\n" + +#: readelf.c:3619 +msgid "Unable to find program interpreter name\n" +msgstr "Nedá sa nájsť názov prekladača programu\n" + +#: readelf.c:3626 +msgid "Internal error: failed to create format string to display program interpreter\n" +msgstr "Vnútorná chyba: nepodarilo sa vytvoriť formátovací reťazec pre zobrazenie interpreta programu\n" + +#: readelf.c:3630 +msgid "Unable to read program interpreter name\n" +msgstr "Nepodarilo sa prečítať názov interpreta programu\n" + +#: readelf.c:3633 +#, c-format +msgid "" +"\n" +" [Requesting program interpreter: %s]" +msgstr "" +"\n" +" [Požaduje sa prekladač programu: %s]" + +#: readelf.c:3645 +#, c-format +msgid "" +"\n" +" Section to Segment mapping:\n" +msgstr "" +"\n" +" Sekcia na mapovanie segmentu:\n" + +#: readelf.c:3646 +#, c-format +msgid " Segment Sections...\n" +msgstr " Sekcie segmentu...\n" + +#: readelf.c:3681 +msgid "Cannot interpret virtual addresses without program headers.\n" +msgstr "Virtuálne adresy sa nedajú preložiť bez hlavičiek programu.\n" + +#: readelf.c:3697 +#, c-format +msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" +msgstr "Virtuálna adresa 0x%lx sa nenachádza v žiadnom PT_LOAD segmente.\n" + +#: readelf.c:3711 readelf.c:3752 +msgid "section headers" +msgstr "hlavičky sekcie" + +#: readelf.c:3796 readelf.c:3861 +msgid "symbols" +msgstr "symboly" + +#: readelf.c:3806 readelf.c:3871 +msgid "symtab shndx" +msgstr "symtab shndx" + +#: readelf.c:4130 readelf.c:4537 +#, c-format +msgid "" +"\n" +"There are no sections in this file.\n" +msgstr "" +"\n" +"V tomto súbore nie sú žiadne sekcie.\n" + +#: readelf.c:4136 +#, c-format +msgid "There are %d section headers, starting at offset 0x%lx:\n" +msgstr "Počet hlavičiek sekcií je %d, začínajúc na offsete 0x%lx:\n" + +#: readelf.c:4156 readelf.c:4653 readelf.c:4879 readelf.c:5178 readelf.c:5584 +#: readelf.c:7445 +msgid "string table" +msgstr "tabuľka reťazcov" + +#: readelf.c:4223 +#, c-format +msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" +msgstr "Sekcia %d má neplatnú sh_entsize %lx (očakávaná %lx)\n" + +#: readelf.c:4243 +msgid "File contains multiple dynamic symbol tables\n" +msgstr "Súbor obsahuje viacnásobné dynamické tabuľky symbolov\n" + +#: readelf.c:4256 +msgid "File contains multiple dynamic string tables\n" +msgstr "Súbor obsahuje viacnásobné dynamické reťazcové tabuľky\n" + +#: readelf.c:4261 +msgid "dynamic strings" +msgstr "dynamické reťazce" + +#: readelf.c:4268 +msgid "File contains multiple symtab shndx tables\n" +msgstr "Súbor obsahuje viacnásobné symtam shndx tabuľky\n" + +#: readelf.c:4320 +#, c-format +msgid "" +"\n" +"Section Headers:\n" +msgstr "" +"\n" +"Hlavičky sekcie:\n" + +#: readelf.c:4322 +#, c-format +msgid "" +"\n" +"Section Header:\n" +msgstr "" +"\n" +"Hlavička sekcie:\n" + +#: readelf.c:4328 readelf.c:4339 readelf.c:4350 +#, c-format +msgid " [Nr] Name\n" +msgstr " [Nr] Názov\n" + +#: readelf.c:4329 +#, c-format +msgid " Type Addr Off Size ES Lk Inf Al\n" +msgstr " Typ Adr Ofs Veľk ES Lk Inf Al\n" + +#: readelf.c:4333 +#, c-format +msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Názov Typ Adr Ofs Veľk ES Prí Lk Inf Al\n" + +#: readelf.c:4340 +#, c-format +msgid " Type Address Off Size ES Lk Inf Al\n" +msgstr " Typ Adresa Ofs Veľk ES Lk Inf Al\n" + +#: readelf.c:4344 +#, c-format +msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Názov Typ Adresa Ofs Veľk ES Prí Lk Inf Al\n" + +#: readelf.c:4351 +#, c-format +msgid " Type Address Offset Link\n" +msgstr " Typ Adresa Ofset Odkaz\n" + +#: readelf.c:4352 +#, c-format +msgid " Size EntSize Info Align\n" +msgstr " Veľkosť EntVeľkosť Info Zarovnanie\n" + +#: readelf.c:4356 +#, c-format +msgid " [Nr] Name Type Address Offset\n" +msgstr " [Nr] Názov Typ Adresa Ofset\n" + +#: readelf.c:4357 +#, c-format +msgid " Size EntSize Flags Link Info Align\n" +msgstr " Veľkosť EntVeľk Prízn Odkaz Info Zarovnanie\n" + +#: readelf.c:4362 +#, c-format +msgid " Flags\n" +msgstr " Príznaky\n" + +#: readelf.c:4495 +#, c-format +msgid "" +"Key to Flags:\n" +" W (write), A (alloc), X (execute), M (merge), S (strings)\n" +" I (info), L (link order), G (group), x (unknown)\n" +" O (extra OS processing required) o (OS specific), p (processor specific)\n" +msgstr "" +"Kľúč k príznakom:\n" +" W (zápísať), A (alokovať), X (vykonať), M (spojiť), S (reťazce)\n" +" I (info), L (poriadie odkazov), G (skupina), x (neznámy)\n" +" O (vyžadované extra OS spracovanie), o (špecifické pre OS), p (špecifické pre procesor)\n" + +#: readelf.c:4513 +#, c-format +msgid "[: 0x%x]" +msgstr "[: 0x%x]" + +#: readelf.c:4544 +msgid "Section headers are not available!\n" +msgstr "Hlavičky sekcie nie sú dostupné!\n" + +#: readelf.c:4568 +#, c-format +msgid "" +"\n" +"There are no section groups in this file.\n" +msgstr "" +"\n" +"V tomto súbore nie sú žiadne skupiny sekcie.\n" + +#: readelf.c:4604 +#, c-format +msgid "Bad sh_link in group section `%s'\n" +msgstr "Zlá sh_link v skupinovej sekcii „%s“\n" + +#: readelf.c:4623 +#, c-format +msgid "Bad sh_info in group section `%s'\n" +msgstr "Zlá sh_link v skupinovej sekcii „%s“\n" + +#: readelf.c:4661 readelf.c:7851 readelf.c:7932 +msgid "section data" +msgstr "dáta sekcie" + +#: readelf.c:4673 +#, c-format +msgid " [Index] Name\n" +msgstr " [Index] Názov\n" + +#: readelf.c:4687 +#, c-format +msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" +msgstr "sekcia [%5u] v skupinovej sekcii [%5u] > maximum sekcia [%5u]\n" + +#: readelf.c:4696 +#, c-format +msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" +msgstr "sekcia [%5u] v skupinovej sekcii [%5u] už je v skupinovej sekcii [%5u]\n" + +#: readelf.c:4709 +#, c-format +msgid "section 0 in group section [%5u]\n" +msgstr "sekcia 0 v skupinovej sekcii [%5u]\n" + +#: readelf.c:4804 +#, c-format +msgid "" +"\n" +"'%s' relocation section at offset 0x%lx contains %ld bytes:\n" +msgstr "" +"\n" +"„%s“ relokačná sekcia na ofsete 0x%lx obsahuje %ld bajtov:\n" + +#: readelf.c:4816 +#, c-format +msgid "" +"\n" +"There are no dynamic relocations in this file.\n" +msgstr "" +"\n" +"V súbore sa nenachádzajú žiadne dynamické relokácie.\n" + +#: readelf.c:4840 +#, c-format +msgid "" +"\n" +"Relocation section " +msgstr "" +"\n" +"Relokačná sekcia " + +#: readelf.c:4845 readelf.c:5254 readelf.c:5268 readelf.c:5599 +#, c-format +msgid "'%s'" +msgstr "„%s“" + +#: readelf.c:4847 readelf.c:5270 readelf.c:5601 +#, c-format +msgid " at offset 0x%lx contains %lu entries:\n" +msgstr " na offsete 0x%lx obsahuje %lu položiek:\n" + +#: readelf.c:4898 +#, c-format +msgid "" +"\n" +"There are no relocations in this file.\n" +msgstr "" +"\n" +"V tomto súbore nie sú žiadne relokácie.\n" + +#: readelf.c:5077 readelf.c:5450 +msgid "unwind table" +msgstr "rozvinúť tabuľku" + +#: readelf.c:5127 readelf.c:5531 +#, c-format +msgid "Skipping unexpected relocation type %s\n" +msgstr "Preskakujem neočakávaný typ relokácie %s\n" + +#: readelf.c:5186 readelf.c:5592 readelf.c:5643 +#, c-format +msgid "" +"\n" +"There are no unwind sections in this file.\n" +msgstr "" +"\n" +"V tomto súbore nie sú žiadne rozvinuté sekcie.\n" + +#: readelf.c:5249 +#, c-format +msgid "" +"\n" +"Could not find unwind info section for " +msgstr "" +"\n" +"Nepodarilo sa nájsť informácie o rozvinutí sekcie pre " + +#: readelf.c:5261 +msgid "unwind info" +msgstr "informácie o rozvinutí" + +#: readelf.c:5263 readelf.c:5598 +#, c-format +msgid "" +"\n" +"Unwind section " +msgstr "" +"\n" +"Rozvinúť sekciu " + +#: readelf.c:5808 readelf.c:5852 +msgid "dynamic section" +msgstr "dynamická sekcia" + +#: readelf.c:5929 +#, c-format +msgid "" +"\n" +"There is no dynamic section in this file.\n" +msgstr "" +"\n" +"V tomto súbore nie sú žiadne dynamické sekcie.\n" + +#: readelf.c:5967 +msgid "Unable to seek to end of file!\n" +msgstr "Nepodarilo sa presunúť na koniec súboru!\n" + +#: readelf.c:5980 +msgid "Unable to determine the number of symbols to load\n" +msgstr "Nedá sa určiť počet symbolov na načítanie\n" + +#: readelf.c:6015 +msgid "Unable to seek to end of file\n" +msgstr "Nedá sa nájsť koniec súboru\n" + +#: readelf.c:6022 +msgid "Unable to determine the length of the dynamic string table\n" +msgstr "Nedá sa určiť dĺžka dynamickej tabuľky reťazcov\n" + +#: readelf.c:6027 +msgid "dynamic string table" +msgstr "dynamická tabuľka reťazcov" + +#: readelf.c:6062 +msgid "symbol information" +msgstr "infomácia o symbole" + +#: readelf.c:6087 +#, c-format +msgid "" +"\n" +"Dynamic section at offset 0x%lx contains %u entries:\n" +msgstr "" +"\n" +"Dynamická sekcia na offsete 0x%lx obsahuje %u položiek:\n" + +#: readelf.c:6090 +#, c-format +msgid " Tag Type Name/Value\n" +msgstr " Značka Typ Názov/hodnota\n" + +#: readelf.c:6126 +#, c-format +msgid "Auxiliary library" +msgstr "Pomocná knižnica" + +#: readelf.c:6130 +#, c-format +msgid "Filter library" +msgstr "Knižnica filtra" + +#: readelf.c:6134 +#, c-format +msgid "Configuration file" +msgstr "Konfiguračný súbor" + +#: readelf.c:6138 +#, c-format +msgid "Dependency audit library" +msgstr "Auditorská knižnica závislostí" + +#: readelf.c:6142 +#, c-format +msgid "Audit library" +msgstr "Auditorská knižnica" + +#: readelf.c:6160 readelf.c:6188 readelf.c:6216 +#, c-format +msgid "Flags:" +msgstr "Príznaky:" + +#: readelf.c:6163 readelf.c:6191 readelf.c:6218 +#, c-format +msgid " None\n" +msgstr " Žiadne\n" + +#: readelf.c:6339 +#, c-format +msgid "Shared library: [%s]" +msgstr "Zdieľaná knižnica: [%s]" + +#: readelf.c:6342 +#, c-format +msgid " program interpreter" +msgstr " prekladač programu" + +#: readelf.c:6346 +#, c-format +msgid "Library soname: [%s]" +msgstr "Knižnica soname: [%s]" + +#: readelf.c:6350 +#, c-format +msgid "Library rpath: [%s]" +msgstr "Knižnica rpath: [%s]" + +#: readelf.c:6354 +#, c-format +msgid "Library runpath: [%s]" +msgstr "Knižnica runpath: [%s]" + +#: readelf.c:6417 +#, c-format +msgid "Not needed object: [%s]\n" +msgstr "Nepotrebný objekt: [%s]\n" + +#: readelf.c:6541 +#, c-format +msgid "" +"\n" +"Version definition section '%s' contains %u entries:\n" +msgstr "" +"\n" +"Sekcia definície verzie „%s“ obsahuje %u položiek:\n" + +#: readelf.c:6544 +#, c-format +msgid " Addr: 0x" +msgstr " Adr: 0x" + +#: readelf.c:6546 readelf.c:6648 readelf.c:6769 +#, c-format +msgid " Offset: %#08lx Link: %u (%s)\n" +msgstr " Ofset: %#08lx Odkaz: %u (%s)\n" + +#: readelf.c:6554 +msgid "version definition section" +msgstr "sekcia definície verzie" + +#: readelf.c:6583 +#, c-format +msgid " %#06x: Rev: %d Flags: %s" +msgstr " %#06x: Rev: %d Príznaky: %s" + +#: readelf.c:6586 +#, c-format +msgid " Index: %d Cnt: %d " +msgstr " Index: %d Cnt: %d " + +#: readelf.c:6597 +#, c-format +msgid "Name: %s\n" +msgstr "Názov: %s\n" + +#: readelf.c:6599 +#, c-format +msgid "Name index: %ld\n" +msgstr "Index názvov: %ld\n" + +#: readelf.c:6616 +#, c-format +msgid " %#06x: Parent %d: %s\n" +msgstr " %#06x: Rodič %d: %s\n" + +#: readelf.c:6619 +#, c-format +msgid " %#06x: Parent %d, name index: %ld\n" +msgstr " %#06x: Rodič %d, index názvov: %ld\n" + +#: readelf.c:6623 +#, c-format +msgid " Version def aux past end of section\n" +msgstr " Pom def verzie za koncom sekcie\n" + +#: readelf.c:6628 +#, c-format +msgid " Version definition past end of section\n" +msgstr " Definícia verzie za koncom sekcie\n" + +#: readelf.c:6643 +#, c-format +msgid "" +"\n" +"Version needs section '%s' contains %u entries:\n" +msgstr "" +"\n" +"Sekcia potreby verzie „%s“ obsahuje %u položiek:\n" + +#: readelf.c:6646 +#, c-format +msgid " Addr: 0x" +msgstr " Adr: 0x" + +#: readelf.c:6656 +msgid "version need section" +msgstr "sekcia potreby verzie" + +#: readelf.c:6681 +#, c-format +msgid " %#06x: Version: %d" +msgstr " %#06x: Verzia: %d" + +#: readelf.c:6684 +#, c-format +msgid " File: %s" +msgstr " Súbor: %s" + +#: readelf.c:6686 +#, c-format +msgid " File: %lx" +msgstr " Súbor: %lx" + +#: readelf.c:6688 +#, c-format +msgid " Cnt: %d\n" +msgstr " Počet: %d\n" + +#: readelf.c:6708 +#, c-format +msgid " %#06x: Name: %s" +msgstr " %#06x: Názov: %s" + +#: readelf.c:6711 +#, c-format +msgid " %#06x: Name index: %lx" +msgstr " %#06x: Index názvu: %lx" + +#: readelf.c:6714 +#, c-format +msgid " Flags: %s Version: %d\n" +msgstr " Príznaky: %s Verzia: %d\n" + +#: readelf.c:6721 +#, c-format +msgid " Version need aux past end of section\n" +msgstr " Pom. sekcia potreby verzie za koncom sekcie\n" + +#: readelf.c:6726 +#, c-format +msgid " Version need past end of section\n" +msgstr " Sekcia potreby verzie za koncom sekcie\n" + +#: readelf.c:6760 +msgid "version string table" +msgstr "tabuľka reťazcov verzie" + +#: readelf.c:6764 +#, c-format +msgid "" +"\n" +"Version symbols section '%s' contains %d entries:\n" +msgstr "" +"\n" +"Sekcia symbolov verzie „%s“ obsahuje %d položiek:\n" + +#: readelf.c:6767 +#, c-format +msgid " Addr: " +msgstr " Adr: " + +#: readelf.c:6777 +msgid "version symbol data" +msgstr "dáta symbolu verzie" + +#: readelf.c:6804 +msgid " 0 (*local*) " +msgstr " 0 (*lokálny*) " + +#: readelf.c:6808 +msgid " 1 (*global*) " +msgstr " 1 (*globálny*) " + +#: readelf.c:6845 readelf.c:7512 +msgid "version need" +msgstr "nutnosť verzie" + +#: readelf.c:6855 +msgid "version need aux (2)" +msgstr "nutnosť verzie aux (2)" + +#: readelf.c:6870 readelf.c:6925 +msgid "*invalid*" +msgstr "*neplatné*" + +#: readelf.c:6900 readelf.c:7577 +msgid "version def" +msgstr "def verzie" + +#: readelf.c:6920 readelf.c:7592 +msgid "version def aux" +msgstr "verzia def aux" + +#: readelf.c:6954 +#, c-format +msgid "" +"\n" +"No version information found in this file.\n" +msgstr "" +"\n" +"V tomto súbore neboli nájdené informácie o verzii.\n" + +#: readelf.c:7075 +#, c-format +msgid ": %x" +msgstr ": %x" + +#: readelf.c:7133 +msgid "Unable to read in dynamic data\n" +msgstr "Nedá sa čítať v dynamických dátach\n" + +#: readelf.c:7224 readelf.c:7264 readelf.c:7288 readelf.c:7318 readelf.c:7342 +msgid "Unable to seek to start of dynamic information\n" +msgstr "Nepodarilo sa presunúť na začiatok dynamických informácií\n" + +#: readelf.c:7230 readelf.c:7270 +msgid "Failed to read in number of buckets\n" +msgstr "Zlyhalo čítanie v číslach oblastí\n" + +#: readelf.c:7236 +msgid "Failed to read in number of chains\n" +msgstr "Zlyhalo čítanie v číslach zreťazení\n" + +#: readelf.c:7326 +msgid "Failed to determine last chain length\n" +msgstr "Nepodarilo sa určiť dĺžku reťaze\n" + +#: readelf.c:7363 +#, c-format +msgid "" +"\n" +"Symbol table for image:\n" +msgstr "" +"\n" +"Tabuľka symbolov pre obraz:\n" + +#: readelf.c:7365 readelf.c:7383 +#, c-format +msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" +msgstr " Čísl Buc: Hodn. Veľk. Typ Väz. Vid Ndx Názov\n" + +#: readelf.c:7367 readelf.c:7385 +#, c-format +msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" +msgstr " Čísl Buc: Hodnota Veľk. Typ Väz. Vid Ndx Názov\n" + +#: readelf.c:7381 +#, c-format +msgid "" +"\n" +"Symbol table of `.gnu.hash' for image:\n" +msgstr "" +"\n" +"Tabuľka symbolov „.gnu.hash“ pre obraz:\n" + +#: readelf.c:7421 +#, c-format +msgid "" +"\n" +"Symbol table '%s' contains %lu entries:\n" +msgstr "" +"\n" +"Symbolická tabuľka „%s“ obsahuje %lu položiek:\n" + +#: readelf.c:7425 +#, c-format +msgid " Num: Value Size Type Bind Vis Ndx Name\n" +msgstr " Čísl: Hodn. Veľ. Typ Väzba Vid Ndx Názov\n" + +#: readelf.c:7427 +#, c-format +msgid " Num: Value Size Type Bind Vis Ndx Name\n" +msgstr " Čísl: Hodnota Veľ. Typ Väzba Vid Ndx Názov\n" + +#: readelf.c:7483 +msgid "version data" +msgstr "verzia" + +#: readelf.c:7525 +msgid "version need aux (3)" +msgstr "potreba verzie aux (3)" + +#: readelf.c:7552 +msgid "bad dynamic symbol\n" +msgstr "chybný dynamický symbol\n" + +#: readelf.c:7616 +#, c-format +msgid "" +"\n" +"Dynamic symbol information is not available for displaying symbols.\n" +msgstr "" +"\n" +"Informácia o dynamickom symbole nie je dostupná pre zobrazenie symbolov.\n" + +#: readelf.c:7628 +#, c-format +msgid "" +"\n" +"Histogram for bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histogram pre dĺžku zoznamu blokov (celkovo z %lu blokov):\n" + +#: readelf.c:7630 readelf.c:7700 +#, c-format +msgid " Length Number %% of total Coverage\n" +msgstr " Veľkosť Číslo %% z celku Pokrytie\n" + +#: readelf.c:7698 +#, c-format +msgid "" +"\n" +"Histogram for `.gnu.hash' bucket list length (total of %lu buckets):\n" +msgstr "" +"\n" +"Histogram dĺžky bucket listu „.gnu.hash“ (celkom z %lu bucketov):\n" + +#: readelf.c:7764 +#, c-format +msgid "" +"\n" +"Dynamic info segment at offset 0x%lx contains %d entries:\n" +msgstr "" +"\n" +"Dynamický info segment na posune 0x%lx obsahuje %d položiek:\n" + +#: readelf.c:7767 +#, c-format +msgid " Num: Name BoundTo Flags\n" +msgstr " Čísl: Názov Zviazaný Príznaky\n" + +#: readelf.c:7819 +#, c-format +msgid "" +"\n" +"Assembly dump of section %s\n" +msgstr "" +"\n" +"Zostaviť výpis pamäte zo sekcie %s\n" + +#: readelf.c:7844 readelf.c:7922 +#, c-format +msgid "" +"\n" +"Section '%s' has no data to dump.\n" +msgstr "" +"\n" +"Sekcia „%s“ nemá žiadne dáta na vypísanie.\n" + +#: readelf.c:7855 +#, c-format +msgid "" +"\n" +"String dump of section '%s':\n" +msgstr "" +"\n" +"Výpis reťazcov sekcie „%s“:\n" + +#: readelf.c:7873 +#, c-format +msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " Pozn.: Oproti tejto sekcii existujú relokácie, ale tieto NEBOLI v tomto výpise použité.\n" + +#: readelf.c:7900 +#, c-format +msgid " No strings found in this section." +msgstr " V tejto sekcii neboli nájdené žiadne reťazce." + +#: readelf.c:7927 +#, c-format +msgid "" +"\n" +"Hex dump of section '%s':\n" +msgstr "" +"\n" +"Hexadecimálny výpis pamäte sekcie „%s“:\n" + +#: readelf.c:7952 +#, c-format +msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " POZN.: Oproti tejto sekcii existujú relokácie, ale tieto NEBOLI v tomto výpise použité.\n" + +#: readelf.c:8135 +#, c-format +msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n" +msgstr "Chýba znalosť 32-bitových typov reloc používaných v DWARF sekciách stroja číslo %d\n" + +#: readelf.c:8432 +#, c-format +msgid "unable to apply unsupported reloc type %d to section %s\n" +msgstr "nebolo možné použič nepodporovaný typ reloc %d na sekciu %s\n" + +#: readelf.c:8440 +#, c-format +msgid "skipping invalid relocation offset 0x%lx in section %s\n" +msgstr "preskakuje sa neplatný posun relokácie 0x%lx v sekcii %s\n" + +#: readelf.c:8461 +#, c-format +msgid "skipping unexpected symbol type %s in %ld'th relocation in section %s\n" +msgstr "preskakuje sa neočakávaný typ symbolu %s v %ld-tej relokácii v sekcii %s\n" + +#: readelf.c:8503 +#, c-format +msgid "%s section data" +msgstr "%s dáta sekcie" + +#: readelf.c:8568 +#, c-format +msgid "" +"\n" +"Section '%s' has no debugging data.\n" +msgstr "" +"\n" +"Sekcia „%s“ nemá žiadne ladiace dáta.\n" + +#: readelf.c:8603 +#, c-format +msgid "Unrecognized debug section: %s\n" +msgstr "Nerozpoznaná ladiaca sekcia: %s\n" + +#: readelf.c:8631 +#, c-format +msgid "Section '%s' was not dumped because it does not exist!\n" +msgstr "Sekcia „%s“ nebola vypísaná, pretože neexistuje!\n" + +#: readelf.c:8669 +#, c-format +msgid "Section %d was not dumped because it does not exist!\n" +msgstr "Pre sekcie %d nebol urobený výpis z pamäte, pretože neexistuje!\n" + +#: readelf.c:9118 +msgid "attributes" +msgstr "atribúty" + +#: readelf.c:9139 +#, c-format +msgid "ERROR: Bad section length (%d > %d)\n" +msgstr "CHYBA: Zlá dĺžka sekcie (%d > %d)\n" + +#: readelf.c:9170 +#, c-format +msgid "ERROR: Bad subsection length (%d > %d)\n" +msgstr "CHYBA: Zlá dĺžka podsekcie (%d > %d)\n" + +#: readelf.c:9229 +#, c-format +msgid "Unknown format '%c'\n" +msgstr "Neznámy formát '%c'\n" + +#: readelf.c:9382 readelf.c:9897 +msgid "liblist" +msgstr "liblist" + +#: readelf.c:9469 +msgid "options" +msgstr "voľby" + +#: readelf.c:9499 +#, c-format +msgid "" +"\n" +"Section '%s' contains %d entries:\n" +msgstr "" +"\n" +"Sekcia „%s“ obsahuje %d položiek:\n" + +#: readelf.c:9660 +msgid "conflict list found without a dynamic symbol table\n" +msgstr "bol nájdený zoznam konfliktov bez tabuľky dynamických symbolov\n" + +#: readelf.c:9676 readelf.c:9690 +msgid "conflict" +msgstr "konflikt" + +#: readelf.c:9700 +#, c-format +msgid "" +"\n" +"Section '.conflict' contains %lu entries:\n" +msgstr "" +"\n" +"Sekcia '.conflict' obsahuje %lu položiek:\n" + +#: readelf.c:9702 +msgid " Num: Index Value Name" +msgstr " Čísl: Index Hodn. Názov" + +#: readelf.c:9734 +msgid "GOT" +msgstr "GOT" + +#: readelf.c:9735 +#, c-format +msgid "" +"\n" +"Primary GOT:\n" +msgstr "" +"\n" +"Primárna GOT:\n" + +#: readelf.c:9736 +#, c-format +msgid " Canonical gp value: " +msgstr " Kanonická hodnota gp: " + +#: readelf.c:9740 readelf.c:9831 +#, c-format +msgid " Reserved entries:\n" +msgstr " Vyhradené položky:\n" + +#: readelf.c:9741 +#, c-format +msgid " %*s %10s %*s Purpose\n" +msgstr " %*s %10s %*s Účel\n" + +#: readelf.c:9757 +#, c-format +msgid " Local entries:\n" +msgstr " Lokálne položky:\n" + +#: readelf.c:9758 +#, c-format +msgid " %*s %10s %*s\n" +msgstr " %*s %10s %*s\n" + +#: readelf.c:9773 +#, c-format +msgid " Global entries:\n" +msgstr " Globálne položky:\n" + +#: readelf.c:9774 +#, c-format +msgid " %*s %10s %*s %*s %-7s %3s %s\n" +msgstr " %*s %10s %*s %*s %-7s %3s %s\n" + +#: readelf.c:9829 +msgid "PLT GOT" +msgstr "PLT GOT" + +#: readelf.c:9830 +#, c-format +msgid "" +"\n" +"PLT GOT:\n" +"\n" +msgstr "" +"\n" +"PLT GOT:\n" +"\n" + +#: readelf.c:9832 +#, c-format +msgid " %*s %*s Purpose\n" +msgstr " %*s %*s Účel\n" + +#: readelf.c:9840 +#, c-format +msgid " Entries:\n" +msgstr " Položky:\n" + +#: readelf.c:9841 +#, c-format +msgid " %*s %*s %*s %-7s %3s %s\n" +msgstr " %*s %*s %*s %-7s %3s %s\n" + +#: readelf.c:9904 +msgid "liblist string table" +msgstr "tabuľka reťazcov liblist" + +#: readelf.c:9914 +#, c-format +msgid "" +"\n" +"Library list section '%s' contains %lu entries:\n" +msgstr "" +"\n" +"Sekcia zoznamu knižníc „%s“ obsahuje %lu položiek:\n" + +#: readelf.c:9967 +msgid "NT_AUXV (auxiliary vector)" +msgstr "NT_AUXV (pomocný vektor)" + +#: readelf.c:9969 +msgid "NT_PRSTATUS (prstatus structure)" +msgstr "NT_PRSTATUS (štruktúra prstatus)" + +#: readelf.c:9971 +msgid "NT_FPREGSET (floating point registers)" +msgstr "NT_FPREGSET (registre pohyblivej čiarky)" + +#: readelf.c:9973 +msgid "NT_PRPSINFO (prpsinfo structure)" +msgstr "NT_PRPSINFO (štrutkúra prpsinfo)" + +#: readelf.c:9975 +msgid "NT_TASKSTRUCT (task structure)" +msgstr "NT_TASKSTRUCT (štrukúra úloh)" + +#: readelf.c:9977 +msgid "NT_PRXFPREG (user_xfpregs structure)" +msgstr "NT_PRXFPREG (štruktúra user_xfpregs)" + +#: readelf.c:9979 +msgid "NT_PPC_VMX (ppc Altivec registers)" +msgstr "NT_PPC_VMX (registre ppc Altivec)" + +#: readelf.c:9981 +msgid "NT_PPC_VSX (ppc VSX registers)" +msgstr "NT_PPC_VSX (registre ppc VSX)" + +#: readelf.c:9983 +msgid "NT_PSTATUS (pstatus structure)" +msgstr "NT_PSTATUS (štruktúra pstatus)" + +#: readelf.c:9985 +msgid "NT_FPREGS (floating point registers)" +msgstr "NT_FPREGS (registre pohyblivej čiarky)" + +#: readelf.c:9987 +msgid "NT_PSINFO (psinfo structure)" +msgstr "NT_PSINFO (štruktúra psinfo)" + +#: readelf.c:9989 +msgid "NT_LWPSTATUS (lwpstatus_t structure)" +msgstr "NT_LWPSTATUS (štruktúra lwpstatus_t)" + +#: readelf.c:9991 +msgid "NT_LWPSINFO (lwpsinfo_t structure)" +msgstr "NT_LWPSINFO (štruktúra lwpsinfo_t)" + +#: readelf.c:9993 +msgid "NT_WIN32PSTATUS (win32_pstatus structure)" +msgstr "NT_WIN32PSTATUS (štruktúra win32_pstatus)" + +#: readelf.c:10001 +msgid "NT_VERSION (version)" +msgstr "NT_VERSION (verzia)" + +#: readelf.c:10003 +msgid "NT_ARCH (architecture)" +msgstr "NT_ARCH (architektúra)" + +#: readelf.c:10008 readelf.c:10031 readelf.c:10053 +#, c-format +msgid "Unknown note type: (0x%08x)" +msgstr "Neznámy typ poznámky: (0x%x08x)" + +#: readelf.c:10020 +msgid "NT_GNU_ABI_TAG (ABI version tag)" +msgstr "NT_GNU_ABI_TAG (značka verzie ABI)" + +#: readelf.c:10022 +msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)" +msgstr "NT_GNU_HWCAP (softvérové HWCAP informácie, ktoré dodáva DSO)" + +#: readelf.c:10024 +msgid "NT_GNU_BUILD_ID (unique build ID bitstring)" +msgstr "NT_GNU_BUILD_ID (reťazec bitov jedinečného ID zostavenia)" + +#: readelf.c:10026 +msgid "NT_GNU_GOLD_VERSION (gold version)" +msgstr "NT_GNU_GOLD_VERSION (zlatá verzia)" + +#. NetBSD core "procinfo" structure. +#: readelf.c:10043 +msgid "NetBSD procinfo structure" +msgstr "NetBSD štruktúra procinfo" + +#: readelf.c:10070 readelf.c:10084 +msgid "PT_GETREGS (reg structure)" +msgstr "PT_GETREGS (štruktúra reg)" + +#: readelf.c:10072 readelf.c:10086 +msgid "PT_GETFPREGS (fpreg structure)" +msgstr "PT_GETFPREGS (štruktúra fpreg)" + +#: readelf.c:10092 +#, c-format +msgid "PT_FIRSTMACH+%d" +msgstr "PT_FIRSTMACH+%d" + +#: readelf.c:10148 +msgid "notes" +msgstr "poznámky" + +#: readelf.c:10154 +#, c-format +msgid "" +"\n" +"Notes at offset 0x%08lx with length 0x%08lx:\n" +msgstr "" +"\n" +"Poznámky na posune 0x%08lx s dĺžkou 0x%08lx:\n" + +#: readelf.c:10156 +#, c-format +msgid " Owner\t\tData size\tDescription\n" +msgstr " Vlastník\t\tVeľkosť dát\tPopis\n" + +#: readelf.c:10175 +#, c-format +msgid "corrupt note found at offset %lx into core notes\n" +msgstr "bola nájdená poškodená poznámka na posune %lx k poznámkam jadra\n" + +#: readelf.c:10177 +#, c-format +msgid " type: %lx, namesize: %08lx, descsize: %08lx\n" +msgstr " typ: %lx, veľkosť názvu: %08lx, veľkosť popisu: %08lx\n" + +#: readelf.c:10275 +#, c-format +msgid "No note segments present in the core file.\n" +msgstr "V jadrovom súbore nie sú žiadne segmenty poznámok.\n" + +#: readelf.c:10359 +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 "" +"Táto inštancia readelf bola zostavená bez podpory pre\n" +"64 bitový dátový typ, a tak nedokáže čítať 64 bitové ELF súbory.\n" + +#: readelf.c:10406 +#, c-format +msgid "%s: Failed to read file header\n" +msgstr "%s: Nepodarilo sa načítať hlavičku súboru\n" + +#: readelf.c:10419 +#, c-format +msgid "" +"\n" +"File: %s\n" +msgstr "" +"\n" +"Súbor: %s\n" + +#: readelf.c:10572 readelf.c:10892 +#, c-format +msgid "%s: failed to read archive header\n" +msgstr "%s: nepodarilo sa načítať hlavičku archívu\n" + +#: readelf.c:10595 +#, c-format +msgid "%s: the archive index is empty\n" +msgstr "%s: idnex archívu je prázdny\n" + +#: readelf.c:10603 readelf.c:10626 +#, c-format +msgid "%s: failed to read archive index\n" +msgstr "%s: nepodarilo sa načítať index archívu\n" + +#: readelf.c:10612 +#, c-format +msgid "%s: the archive index is supposed to have %ld entries, but the size in the header is too small\n" +msgstr "%s: index archívu má mať %ld položiek, ale veľkosť hlavičky je príliš malá\n" + +#: readelf.c:10619 +msgid "Out of memory whilst trying to read archive symbol index\n" +msgstr "Nedostatok pamäte pri pokuse o čítanie indexu symbolov archívu\n" + +#: readelf.c:10637 +msgid "Out of memory whilst trying to convert the archive symbol index\n" +msgstr "Nedostatok pamäte pri pokuse o konverziu indexu symbolov archívu\n" + +#: readelf.c:10649 +#, c-format +msgid "%s: the archive has an index but no symbols\n" +msgstr "%s: archív má index ale nemá symboly\n" + +#: readelf.c:10657 +msgid "Out of memory whilst trying to read archive index symbol table\n" +msgstr "Nedostatok pamäte pri pokuse o čítanie indexu tabuľky symbolov archívu.\n" + +#: readelf.c:10664 +#, c-format +msgid "%s: failed to read archive index symbol table\n" +msgstr "%s: nepodarilo sa prečítať index tabuľky symbolov archívu\n" + +#: readelf.c:10673 +#, c-format +msgid "%s: failed to skip archive symbol table\n" +msgstr "%s: nepodarilo sa preskočiť tabuľku symbolov v archíve\n" + +#: readelf.c:10687 +#, c-format +msgid "%s: failed to read archive header following archive index\n" +msgstr "%s: nepodarilo sa načítať hlavičku archívu po indexe archívu\n" + +#: readelf.c:10693 +#, c-format +msgid "%s has no archive index\n" +msgstr "%s: nemá index archívu\n" + +#: readelf.c:10704 +msgid "Out of memory reading long symbol names in archive\n" +msgstr "Nedostatok pamäte pri čítaní dlhých názvov symbolov v archíve\n" + +#: readelf.c:10712 +#, c-format +msgid "%s: failed to read long symbol name string table\n" +msgstr "%s: nepodarilo sa prečítať tabuľku reťazcov dlhých názvov symbolov\n" + +#: readelf.c:10727 +#, c-format +msgid "%s: failed to read archive header following long symbol names\n" +msgstr "%s: nepodarilo sa načítať hlavičku archívu nasledujúcu dlhé názvy symbolov\n" + +#: readelf.c:10737 +#, c-format +msgid "%s: unable to dump the index as none was found\n" +msgstr "%s: nie je možné vypísať index, pretože žiadny nebol nájdený\n" + +#: readelf.c:10744 +#, c-format +msgid "Index of archive %s: (%ld entries, 0x%lx bytes in the symbol table)\n" +msgstr "Index archívu %s: (%ld položiek, 0x%lx bajtov v tabuľke symbolov)\n" + +#: readelf.c:10754 +#, c-format +msgid "%s: failed to seek to next file name\n" +msgstr "%s: nepodarilo sa presunúť sa na názov ďalšieho súboru\n" + +#: readelf.c:10761 +#, c-format +msgid "%s: failed to read file name\n" +msgstr "%s: nepodarilo sa prečítať názov súboru\n" + +#: readelf.c:10773 readelf.c:10782 +#, c-format +msgid "Binary %s contains:\n" +msgstr "Binárny %s obsahuje:\n" + +#: readelf.c:10787 +#, c-format +msgid "%s: end of the symbol table reached before the end of the index\n" +msgstr "%s: bol dosiahnutý koniec tabuľky symbolov pred koncom indexu\n" + +#: readelf.c:10796 +#, c-format +msgid "%s: symbols remain in the index symbol table, but without corresponding entries in the index table\n" +msgstr "%s: symboly zostávajú v indexovej tabuľke symbolov ale bez zodpovedajúcich položiek v indexovej tabuľke\n" + +#: readelf.c:10805 +#, c-format +msgid "%s: failed to seek back to start of object files in the archive\n" +msgstr "%s: nepodarilo sa presunúť späť na začiaok objektových súborov v archíve\n" + +#: readelf.c:10833 +#, c-format +msgid "%s: invalid archive string table offset %lu\n" +msgstr "%s: neplatný posun tabuľky reťazcov v archíve %lu\n" + +#: readelf.c:10849 +#, c-format +msgid "%s: bad archive file name\n" +msgstr "%s: zlý názov súboru archívu\n" + +#: readelf.c:10881 +#, c-format +msgid "%s: failed to seek to next archive header\n" +msgstr "%s: nepodarilo sa nájsť hlavičku ďalšieho archívu\n" + +#: readelf.c:10920 +#, c-format +msgid "'%s': No such file\n" +msgstr "„%s“: Taký súbor neexistuje\n" + +#: readelf.c:10922 +#, c-format +msgid "Could not locate '%s'. System error message: %s\n" +msgstr "Nepodarilo sa nájsť „%s“. Správa systémovej chyby: %s\n" + +#: readelf.c:10929 +#, c-format +msgid "'%s' is not an ordinary file\n" +msgstr "„%s“ nie je bežný súbor\n" + +#: readelf.c:10936 +#, c-format +msgid "Input file '%s' is not readable.\n" +msgstr "Vstupný súbor „%s“ sa nedá čítať.\n" + +#: readelf.c:10942 +#, c-format +msgid "%s: Failed to read file's magic number\n" +msgstr "%s: Nepodarilo sa prečítať magické číslo súboru\n" + +#: readelf.c:10952 +#, c-format +msgid "File %s is not an archive so its index cannot be displayed.\n" +msgstr "Súbor %s nie je archív a tak nemožno zobraziť jeho index.\n" + +#: rename.c:124 +#, c-format +msgid "%s: cannot set time: %s" +msgstr "%s: nedá sa nastaviť čas: %s" + +#. We have to clean up here. +#: rename.c:159 rename.c:197 +#, c-format +msgid "unable to rename '%s'; reason: %s" +msgstr "nepodarilo sa premenovať „%s“; dôvod: %s" + +#: rename.c:205 +#, c-format +msgid "unable to copy file '%s'; reason: %s" +msgstr "nepodarilo sa skopírovať súbor „%s“; dôvod: %s" + +#: resbin.c:120 +#, c-format +msgid "%s: not enough binary data" +msgstr "%s: nedostatok binárnych dát" + +#: resbin.c:136 +msgid "null terminated unicode string" +msgstr "unicode reťazec zakončený null-om" + +#: resbin.c:163 resbin.c:169 +msgid "resource ID" +msgstr "ID zdroja" + +#: resbin.c:208 +msgid "cursor" +msgstr "kurzor" + +#: resbin.c:239 resbin.c:246 +msgid "menu header" +msgstr "hlavička menu" + +#: resbin.c:255 +msgid "menuex header" +msgstr "hlavička menuex" + +#: resbin.c:259 +msgid "menuex offset" +msgstr "posun menuex" + +#: resbin.c:264 +#, c-format +msgid "unsupported menu version %d" +msgstr "nepodporovaná verzia menu %d" + +#: resbin.c:289 resbin.c:304 resbin.c:366 +msgid "menuitem header" +msgstr "hlavička menuitem" + +#: resbin.c:396 +msgid "menuitem" +msgstr "menuitem" + +#: resbin.c:433 resbin.c:461 +msgid "dialog header" +msgstr "hlavička dialogu" + +#: resbin.c:451 +#, c-format +msgid "unexpected DIALOGEX version %d" +msgstr "neočakávaná verzia DIALOGEX %d" + +#: resbin.c:496 +msgid "dialog font point size" +msgstr "bodová veľkosť písma dialogu" + +#: resbin.c:504 +msgid "dialogex font information" +msgstr "informácia o písme pre dialogex" + +#: resbin.c:530 resbin.c:548 +msgid "dialog control" +msgstr "riadenie dialogu" + +#: resbin.c:540 +msgid "dialogex control" +msgstr "riadenie dialogex" + +#: resbin.c:569 +msgid "dialog control end" +msgstr "koniec riadenia dialogu" + +#: resbin.c:581 +msgid "dialog control data" +msgstr "dáta riadenia dialogu" + +#: resbin.c:621 +msgid "stringtable string length" +msgstr "dĺžka reťazca stringtable" + +#: resbin.c:631 +msgid "stringtable string" +msgstr "reťazec stringtable" + +#: resbin.c:661 +msgid "fontdir header" +msgstr "hlavička fontdir" + +#: resbin.c:675 +msgid "fontdir" +msgstr "fontdir" + +#: resbin.c:692 +msgid "fontdir device name" +msgstr "názov zariadenia fontdir" + +#: resbin.c:698 +msgid "fontdir face name" +msgstr "názov prednej strany fontdir" + +#: resbin.c:738 +msgid "accelerator" +msgstr "akcelerátor" + +#: resbin.c:797 +msgid "group cursor header" +msgstr "hlavička kurzora skupiny" + +#: resbin.c:801 resrc.c:1355 +#, c-format +msgid "unexpected group cursor type %d" +msgstr "neočakávaný typ kurzora skupiny %d" + +#: resbin.c:816 +msgid "group cursor" +msgstr "kurzor skupiny" + +#: resbin.c:852 +msgid "group icon header" +msgstr "hlavička ikony skupiny" + +#: resbin.c:856 resrc.c:1302 +#, c-format +msgid "unexpected group icon type %d" +msgstr "neočakávaný typ ikony skupiny %d" + +#: resbin.c:871 +msgid "group icon" +msgstr "ikona skupiny" + +#: resbin.c:935 resbin.c:1151 +msgid "unexpected version string" +msgstr "neočakávaný reťazec verzie" + +#: resbin.c:966 +#, c-format +msgid "version length %d does not match resource length %lu" +msgstr "dĺžka verzie %d nie je zhodná s dĺžkou zdroja %lu" + +#: resbin.c:970 +#, c-format +msgid "unexpected version type %d" +msgstr "neočakávaný typ verzie %d" + +#: resbin.c:982 +#, c-format +msgid "unexpected fixed version information length %ld" +msgstr "neočakávaná pevná dĺžka hodnoty verzie %ld" + +#: resbin.c:985 +msgid "fixed version info" +msgstr "pevné informácie o verzii" + +#: resbin.c:989 +#, c-format +msgid "unexpected fixed version signature %lu" +msgstr "neočakávaná signatúra pevnej verzie %lu" + +#: resbin.c:993 +#, c-format +msgid "unexpected fixed version info version %lu" +msgstr "neočakávaná verzia informácie o pevnej verzii %lu" + +#: resbin.c:1022 +msgid "version var info" +msgstr "variabilné informácie o verzii" + +#: resbin.c:1039 +#, c-format +msgid "unexpected stringfileinfo value length %ld" +msgstr "neočakávaná dĺžka hodnoty stringfileinfo %ld" + +#: resbin.c:1049 +#, c-format +msgid "unexpected version stringtable value length %ld" +msgstr "neočakávaná dĺžka hodnoty tabuľky reťazcov %ld" + +#: resbin.c:1083 +#, c-format +msgid "unexpected version string length %ld != %ld + %ld" +msgstr "neočakávaná dĺžka hodnoty reťazca %ld != %ld + %ld" + +#: resbin.c:1094 +#, c-format +msgid "unexpected version string length %ld < %ld" +msgstr "neočakávaná dĺžka hodnoty reťazca %ld < %ld" + +#: resbin.c:1111 +#, c-format +msgid "unexpected varfileinfo value length %ld" +msgstr "neočakávaná dĺžka hodnoty varfileinfo %ld" + +#: resbin.c:1130 +msgid "version varfileinfo" +msgstr "verzia varfileinfo" + +#: resbin.c:1145 +#, c-format +msgid "unexpected version value length %ld" +msgstr "neočakávaná dĺžka hodnoty verzie %ld" + +#: rescoff.c:124 +msgid "filename required for COFF input" +msgstr "požaduje sa názov súboru pre COFF vstup" + +#: rescoff.c:141 +#, c-format +msgid "%s: no resource section" +msgstr "%s: žiadna sekcia zdroja" + +#: rescoff.c:173 +#, c-format +msgid "%s: %s: address out of bounds" +msgstr "%s: %s: adresa mimo rozsah" + +#: rescoff.c:190 +msgid "directory" +msgstr "priečinok" + +#: rescoff.c:218 +msgid "named directory entry" +msgstr "nazvaná položka priečinku" + +#: rescoff.c:227 +msgid "directory entry name" +msgstr "názov položky priečinku" + +#: rescoff.c:247 +msgid "named subdirectory" +msgstr "nazvaný podpriečinok" + +#: rescoff.c:255 +msgid "named resource" +msgstr "nazvaný zdroj" + +#: rescoff.c:270 +msgid "ID directory entry" +msgstr "ID položka priečinku" + +#: rescoff.c:287 +msgid "ID subdirectory" +msgstr "ID podpriečinku" + +#: rescoff.c:295 +msgid "ID resource" +msgstr "ID zdroja" + +#: rescoff.c:320 +msgid "resource type unknown" +msgstr "neznámy typ zdroja" + +#: rescoff.c:323 +msgid "data entry" +msgstr "dátová položka" + +#: rescoff.c:331 +msgid "resource data" +msgstr "dáta zdroja" + +#: rescoff.c:336 +msgid "resource data size" +msgstr "veľkosť zdrojových dát" + +#: rescoff.c:431 +msgid "filename required for COFF output" +msgstr "vyžaduje sa názov súboru pre COFF výstup" + +#: rescoff.c:715 +msgid "can't get BFD_RELOC_RVA relocation type" +msgstr "nedá sa získať typ relokácie pre BFD_RELOC_RVA" + +#: resrc.c:262 resrc.c:333 +#, c-format +msgid "can't open temporary file `%s': %s" +msgstr "nedá sa otvoriť dočasný súbor „%s“: %s" + +#: resrc.c:268 +#, c-format +msgid "can't redirect stdout: `%s': %s" +msgstr "nedá sa presmerovať stdout: „%s“: %s" + +#: resrc.c:284 +#, c-format +msgid "%s %s: %s" +msgstr "%s %s: %s" + +#: resrc.c:329 +#, c-format +msgid "can't execute `%s': %s" +msgstr "nedá sa vykonať „%s“: %s" + +#: resrc.c:338 +#, c-format +msgid "Using temporary file `%s' to read preprocessor output\n" +msgstr "Používa sa dočasný súbor „%s“ na čítanie výstupu preprocesora\n" + +#: resrc.c:345 +#, c-format +msgid "can't popen `%s': %s" +msgstr "nedá sa otvoriť pomocou popen „%s“: %s" + +#: resrc.c:347 +#, c-format +msgid "Using popen to read preprocessor output\n" +msgstr "Používa sa popen na čítanie výstupu preprocesora\n" + +#: resrc.c:413 +#, c-format +msgid "Tried `%s'\n" +msgstr "Vyskúšané „%s“\n" + +#: resrc.c:424 +#, c-format +msgid "Using `%s'\n" +msgstr "Používa sa „%s“\n" + +#: resrc.c:608 +msgid "preprocessing failed." +msgstr "predspracovanie zlyhalo." + +#: resrc.c:631 +#, c-format +msgid "%s:%d: %s\n" +msgstr "%s:%d: %s\n" + +#: resrc.c:639 +#, c-format +msgid "%s: unexpected EOF" +msgstr "%s: neočakávaný znak konca súboru" + +#: resrc.c:688 +#, c-format +msgid "%s: read of %lu returned %lu" +msgstr "%s: prečitané z %lu vrátených %lu" + +#: resrc.c:727 resrc.c:1502 +#, c-format +msgid "stat failed on bitmap file `%s': %s" +msgstr "zlyhal stat na súbor bitmapy „%s“: %s" + +#: resrc.c:778 +#, c-format +msgid "cursor file `%s' does not contain cursor data" +msgstr "súboru kurzora „%s“ neobsahuje dáta o kurzore" + +#: resrc.c:810 resrc.c:1210 +#, c-format +msgid "%s: fseek to %lu failed: %s" +msgstr "%s: fseek na %lu zlyhal: %s" + +#: resrc.c:936 +msgid "help ID requires DIALOGEX" +msgstr "ID pomoci vyžaduje DIALOGEX" + +#: resrc.c:938 +msgid "control data requires DIALOGEX" +msgstr "dáta riadenia vyžadujú DIALOGEX" + +#: resrc.c:966 +#, c-format +msgid "stat failed on font file `%s': %s" +msgstr "nepodaril sa stat na súbor písma „%s“: %s" + +#: resrc.c:1179 +#, c-format +msgid "icon file `%s' does not contain icon data" +msgstr "súbor ikony „%s“ neobsahuje dáta o ikone" + +#: resrc.c:1724 resrc.c:1759 +#, c-format +msgid "stat failed on file `%s': %s" +msgstr "zlyhal stat súboru „%s“: %s" + +#: resrc.c:1940 +#, c-format +msgid "can't open `%s' for output: %s" +msgstr "nedá sa otvoriť „%s“ na čítanie: %s" + +#: size.c:79 +#, c-format +msgid " Displays the sizes of sections inside binary files\n" +msgstr " Zobrazuje veľkosti sekcií vo vnútri binárnych súborov\n" + +#: size.c:80 +#, c-format +msgid " If no input file(s) are specified, a.out is assumed\n" +msgstr " Ak sa neurčia žiadne vstupné súbory, predpokladá sa a.out\n" + +#: size.c:81 +#, c-format +msgid "" +" The options are:\n" +" -A|-B --format={sysv|berkeley} Select output style (default is %s)\n" +" -o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex\n" +" -t --totals Display the total sizes (Berkeley only)\n" +" --common Display total size for *COM* syms\n" +" --target= Set the binary file format\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Voľby sú:\n" +" -A|-B --format={sysv|berkeley} Vybrať štýl výstupu (štandardne %s)\n" +" -o|-d|-x --radix={8|10|16} Zobraziť čísla osmičkovo, desiatkovo alebo hexadecimálne\n" +" -t --totals Zobraziť celkové veľkosti (iba Berkeley)\n" +" --common Zobraziť celkové veľkosti symbolov *COM*\n" +" --target= Nastaviť formát binárneho súboru\n" +" @ Čítať voľby zo \n" +" -h --help Zobraziť túto informáciu\n" +" -v --version Zobraziť verziu programu\n" +"\n" + +#: size.c:160 +#, c-format +msgid "invalid argument to --format: %s" +msgstr "neplatný argument pre --format: %s" + +#: size.c:187 +#, c-format +msgid "Invalid radix: %s\n" +msgstr "Neplatný základ čísla: %s\n" + +#: srconv.c:1731 +#, c-format +msgid "Convert a COFF object file into a SYSROFF object file\n" +msgstr "Previesť súbor objektu COFF na súbor objektu SYSROFF\n" + +#: srconv.c:1732 +#, c-format +msgid "" +" The options are:\n" +" -q --quick (Obsolete - ignored)\n" +" -n --noprescan Do not perform a scan to convert commons into defs\n" +" -d --debug Display information about what is being done\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Voľby sú:\n" +" -q --quick (Zastaralé - ignorované)\n" +" -n --noprescan Nevykonať skenovanie pre prevod common-ov na def-y\n" +" -d --debug Zobraziť informáciu o tom, čo sa robí\n" +" @ Čítať voľby zo \n" +" -h --help Zobraziť túto informáciu\n" +" -v --version Zobraziť verziu programu\n" + +#: srconv.c:1878 +#, c-format +msgid "unable to open output file %s" +msgstr "nedá sa otvoriť výstupný súbor %s" + +#: stabs.c:328 stabs.c:1706 +msgid "numeric overflow" +msgstr "číselné pretečenie" + +#: stabs.c:338 +#, c-format +msgid "Bad stab: %s\n" +msgstr "Zlý stab: %s\n" + +#: stabs.c:346 +#, c-format +msgid "Warning: %s: %s\n" +msgstr "Upozornenie: %s: %s\n" + +#: stabs.c:456 +#, c-format +msgid "N_LBRAC not within function\n" +msgstr "N_LBRAC nie je vo funkcii\n" + +#: stabs.c:495 +#, c-format +msgid "Too many N_RBRACs\n" +msgstr "Priveľa N_RBRACov\n" + +#: stabs.c:736 +msgid "unknown C++ encoded name" +msgstr "neznáme meno kódované v C++" + +#. Complain and keep going, so compilers can invent new +#. cross-reference types. +#: stabs.c:1251 +msgid "unrecognized cross reference type" +msgstr "nerozpoznaný typ krížového odkazu" + +#. Does this actually ever happen? Is that why we are worrying +#. about dealing with it rather than just calling error_type? +#: stabs.c:1798 +msgid "missing index type" +msgstr "chýba typ indexu" + +#: stabs.c:2112 +msgid "unknown virtual character for baseclass" +msgstr "neznámy virtuálny znak pre baseclass" + +#: stabs.c:2130 +msgid "unknown visibility character for baseclass" +msgstr "naznámy viditeľný znak pre baseclass" + +#: stabs.c:2316 +msgid "unnamed $vb type" +msgstr "nepomenovaný $vb typ" + +#: stabs.c:2322 +msgid "unrecognized C++ abbreviation" +msgstr "nerozpoznaná C++ skratka" + +#: stabs.c:2398 +msgid "unknown visibility character for field" +msgstr "neznámy znak viditeľnosti pre pole" + +#: stabs.c:2650 +msgid "const/volatile indicator missing" +msgstr "chýba indikátor const/volatile" + +#: stabs.c:2886 +#, c-format +msgid "No mangling for \"%s\"\n" +msgstr "Žiadne poškodenie pre „%s“\n" + +#: stabs.c:3186 +msgid "Undefined N_EXCL" +msgstr "Nezadefinované N_EXCL" + +#: stabs.c:3266 +#, c-format +msgid "Type file number %d out of range\n" +msgstr "Typové číslo súboru %d mimo rozsah\n" + +#: stabs.c:3271 +#, c-format +msgid "Type index number %d out of range\n" +msgstr "Typové číslo indexu %d mimo rozsah\n" + +#: stabs.c:3350 +#, c-format +msgid "Unrecognized XCOFF type %d\n" +msgstr "Nerozpoznaný typ XCOFF %d\n" + +#: stabs.c:3642 +#, c-format +msgid "bad mangled name `%s'\n" +msgstr "chybný neformátovaný názov „%s“\n" + +#: stabs.c:3737 +#, c-format +msgid "no argument types in mangled string\n" +msgstr "v neformátovanom reťazci sa nenachádzajú typy argumentov\n" + +#: stabs.c:5091 +#, c-format +msgid "Demangled name is not a function\n" +msgstr "Neformátovaný názov nie je funkcia\n" + +#: stabs.c:5133 +#, c-format +msgid "Unexpected type in v3 arglist demangling\n" +msgstr "Neočakávaný typ pri formátovaní zoznamu argumentov v3\n" + +#: stabs.c:5200 +#, c-format +msgid "Unrecognized demangle component %d\n" +msgstr "Neočakávaná zložka formátovania %d\n" + +#: stabs.c:5252 +#, c-format +msgid "Failed to print demangled template\n" +msgstr "Nepodarilo sa vypísať formátovanú šablónu\n" + +#: stabs.c:5332 +#, c-format +msgid "Couldn't get demangled builtin type\n" +msgstr "Nepodarilo sa zistiť formátovaný vstavaný typ\n" + +#: stabs.c:5381 +#, c-format +msgid "Unexpected demangled varargs\n" +msgstr "neočakávané formátované varargs\n" + +#: stabs.c:5388 +#, c-format +msgid "Unrecognized demangled builtin type\n" +msgstr "Nerozpoznaný formátovaný vstavaný typ\n" + +#: strings.c:251 +#, c-format +msgid "invalid minimum string length %d" +msgstr "neplatná minimálna dĺžka reťazca %d" + +#: strings.c:648 +#, c-format +msgid " Display printable strings in [file(s)] (stdin by default)\n" +msgstr " Zobraziť vytlačiteľné reťazce v [súbore(-och)] (štandardne stdin)\n" + +#: strings.c:649 +#, c-format +msgid "" +" The options are:\n" +" -a - --all Scan the entire file, not just the data section\n" +" -f --print-file-name Print the name of the file before each string\n" +" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n" +" - least [number] characters (default 4).\n" +" -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n" +" -o An alias for --radix=o\n" +" -T --target= Specify the binary file format\n" +" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n" +" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" +" @ Read options from \n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Voľby sú:\n" +" -a - --all Prezrieť celý súbor, nie len dátovú sekciu\n" +" -f --print-file-name Vypísať názov súboru pred každým reťazcom\n" +" -n --bytes=[number] Nájsť a vypísať každú nulou ukončenú postupnosť \n" +" - najmenej [počet] znakov (štandardne 4).\n" +" -t --radix={o,d,x} Vypísať umiestnenie reťazca v 8, 10 alebo 16 sústave\n" +" -o Aalias pre --radix=o\n" +" -T --target= Zadať binárny formát súboru\n" +" -e --encoding={s,S,b,l,B,L} Vybrať veľkosť znaku a endianitu:\n" +" s = 7 bitov, S = 8 bitov, {b,l} = 16 bitov, {B,L} = 32 bitov\n" +" @ Načítať voľby zo \n" +" -h --help Zobraziť tohto pomocníka\n" +" -v --version Vypísať verziu programu\n" + +#: sysdump.c:648 +#, c-format +msgid "Print a human readable interpretation of a SYSROFF object file\n" +msgstr "Zobraziť pre ľudí zrozumiteľnú interpretáciu objektového súboru SYSROFF\n" + +#: sysdump.c:649 +#, c-format +msgid "" +" The options are:\n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Voľby sú:\n" +" -h --help Zobraziť túto informáciu\n" +" -v --version Zobraziť verziu programu\n" + +#: sysdump.c:716 +#, c-format +msgid "cannot open input file %s" +msgstr "nedá sa otvoriť vstupný súbor %s" + +#: version.c:35 +#, c-format +msgid "Copyright 2007 Free Software Foundation, Inc.\n" +msgstr "Copyright 2007 Free Software Foundation, Inc.\n" + +#: version.c:36 +#, c-format +msgid "" +"This program is free software; you may redistribute it under the terms of\n" +"the GNU General Public License version 3 or (at your option) any later version.\n" +"This program has absolutely no warranty.\n" +msgstr "" +"Tento program je slobodný softvér. Môžete ho šíriť za podmienok GNU General\n" +"Public License verzie 3 alebo (ako si zvolíte) ktorejkoľvek vyššej verzie.\n" +"Na tento program sa neposkytuje absolútne žiadna záruka.\n" + +#: windmc.c:195 +#, c-format +msgid "can't create %s file ,%s' for output.\n" +msgstr "nebolo možné vytvoriť súbor %s, „%s“ pre výstup.\n" + +#: windmc.c:203 +#, c-format +msgid "Usage: %s [option(s)] [input-file]\n" +msgstr "Použitie: %s [VOĽBY] [VSTUP_SÚBOR]\n" + +#: windmc.c:205 +#, c-format +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= Set codepage when reading mc text file\n" +" -d --decimal_values Print values to text files decimal\n" +" -e --extension= Set header extension used on export header file\n" +" -F --target Specify output target for endianess.\n" +" -h --headerdir= 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= 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= Set codepage used for writing text file\n" +" -r --rcdir= Set the export directory for rc files\n" +" -x --xdbg= Where to create the .dbg C include file\n" +" that maps message ID's to their symbolic name.\n" +msgstr "" +" Voľby sú:\n" +" -a --ascii_in Načítať vstupný súbor ako ASCII súbor\n" +" -A --ascii_out Zapísať binárne správy ako ASCII\n" +" -b --binprefix názov súboru .bin s predponou .mc filename_, aby bol jedinečný.\n" +" -c --customflag Nastaviť vlastné príznaky správ\n" +" -C --codepage_in= Nastavič kódovú stránku pri čítaní textového súboru mc\n" +" -d --decimal_values Vypísať hodnoty do textového súboru v desiatkovej sústave\n" +" -e --extension= Nastaviť príponu hlavičiek použitých pri exporte súboru hlavičky\n" +" -F --target Cieľ výstupu endianity.\n" +" -h --headerdir= Nastaviť exportný adresár pre hlavičky\n" +" -u --unicode_in Načítať vstup ako súbor UTF-16\n" +" -U --unicode_out Zapísať binárne správy v UTF-16\n" +" -m --maxlength= Nastaviť maximálnu povolenú dĺžku správy\n" +" -n --nullterminate Automaticky pridávať reťazcom na koniec nulu\n" +" -o --hresult_use Použiť definíciu HRESULT namiesto definície stavového kódu\n" +" -O --codepage_out= Nastaviť kódovú stránku pre zápis textového súboru\n" +" -r --rcdir= Nastaviť exportný adresár rc súborov\n" +" -x --xdbg= Kde sa má vytvárať .dbg C include súbor,\n" +" ktorý mapuje ID správ na ich symbolický názov.\n" + +#: windmc.c:225 +#, 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 "" +" -H --help Vypíše túto správu pomocníka\n" +" -v --verbose Výrečný - oznamuje, čo práve robí\n" +" -V --version Vypíše informácie o verzii\n" + +#: windmc.c:296 windres.c:415 +#, c-format +msgid "%s: warning: " +msgstr "%s: upozornenie: " + +#: windmc.c:297 +#, c-format +msgid "A codepage was specified switch ,%s' and UTF16.\n" +msgstr "Kódová stránka bola uvedená, zameňte „%s“ a UTF-16.\n" + +#: windmc.c:298 +#, c-format +msgid "\tcodepage settings are ignored.\n" +msgstr "\tnastavenia kódovej stránky sa ignorujú.\n" + +#: windmc.c:342 +msgid "try to add a ill language." +msgstr "pokus o pridanie zlého jazyka." + +#: windmc.c:1151 +#, c-format +msgid "unable to open file ,%s' for input.\n" +msgstr "nebolo možné otvoriť súbor „%s“ na vstup.\n" + +#: windmc.c:1170 +msgid "input file does not seems to be UFT16.\n" +msgstr "Vstupný súbor nevyzerá byť UTF-16.\n" + +#: windres.c:220 +#, c-format +msgid "can't open %s `%s': %s" +msgstr "nedá sa otvoriť %s „%s“: %s" + +#: windres.c:394 +#, c-format +msgid ": expected to be a directory\n" +msgstr ": očakávalo sa, že je to adresár\n" + +#: windres.c:406 +#, c-format +msgid ": expected to be a leaf\n" +msgstr ": očakávalo sa, že je to list\n" + +#: windres.c:417 +#, c-format +msgid ": duplicate value\n" +msgstr ": duplicitná hodnota\n" + +#: windres.c:567 +#, c-format +msgid "unknown format type `%s'" +msgstr "neznámy typ súboru „%s“" + +#: windres.c:568 +#, c-format +msgid "%s: supported formats:" +msgstr "%s: podporované formáty:" + +#. Otherwise, we give up. +#: windres.c:651 +#, c-format +msgid "can not determine type of file `%s'; use the -J option" +msgstr "nebolo možné určiť typ súboru „%s“; použite voľbu -J" + +#: windres.c:663 +#, c-format +msgid "Usage: %s [option(s)] [input-file] [output-file]\n" +msgstr "Použitie: %s [VOĽBY] [VSTUP_SÚBOR] [VÝSTUP_SÚBOR]\n" + +#: windres.c:665 +#, c-format +msgid "" +" The options are:\n" +" -i --input= Name input file\n" +" -o --output= Name output file\n" +" -J --input-format= Specify input format\n" +" -O --output-format= Specify output format\n" +" -F --target= Specify COFF target\n" +" --preprocessor= Program to use to preprocess rc file\n" +" -I --include-dir=

Include directory when preprocessing rc file\n" +" -D --define [=] Define SYM when preprocessing rc file\n" +" -U --undefine Undefine SYM when preprocessing rc file\n" +" -v --verbose Verbose - tells you what it's doing\n" +" -c --codepage= Specify default codepage\n" +" -l --language= Set language when reading rc file\n" +" --use-temp-file Use a temporary file instead of popen to read\n" +" the preprocessor output\n" +" --no-use-temp-file Use popen (default)\n" +msgstr "" +" Voľby sú:\n" +" -i --input= Vstupný súbor\n" +" -o --output= Výstupný súbor\n" +" -J --input-format= Uvádza vstupný formát\n" +" -O --output-format= Uvádza výstupný formát\n" +" -F --target= Uvádza COFF cieľ\n" +" --preprocessor= Program na predspracovanie rc súboru\n" +" -I --include-dir= Include adresár pre predspracovanie rc súboru\n" +" -D --define [=] DefinovaÅ¥ SYM pre predspracovanie rc súboru\n" +" -U --undefine ZruÅ¡iÅ¥ definíciu SYM pre predspracovanie rc súboru\n" +" -v --verbose Výrečný - oznamuje, čo práve robí\n" +" -c --codepage= Uvádza predvolenú kódovú stránku\n" +" -l --language= NastaviÅ¥ jazyk pre čítanie rc súboru\n" +" --use-temp-file Pre čítanie použiÅ¥ dočasný súbor namiesto popen\n" +" výstupu preprocesora\n" +" --no-use-temp-file PoužiÅ¥ popen (Å¡tandardne)\n" + +#: windres.c:682 +#, c-format +msgid " --yydebug Turn on parser debugging\n" +msgstr " --yydebug Zapnúť ladenie syntaktického analyzátora\n" + +#: windres.c:685 +#, c-format +msgid "" +" -r Ignored for compatibility with rc\n" +" @ Read options from \n" +" -h --help Print this help message\n" +" -V --version Print version information\n" +msgstr "" +" -r Ignorované kvôli kompatibilite s rc\n" +" @ ČítaÅ¥ voľby zo \n" +" -h --help ZobraziÅ¥ túto správu nápovedy\n" +" -V --version ZobraziÅ¥ informáciu o verzii\n" + +#: windres.c:690 +#, c-format +msgid "" +"FORMAT is one of rc, res, or coff, and is deduced from the file name\n" +"extension if not specified. A single file name is an input file.\n" +"No input-file is stdin, default rc. No output-file is stdout, default rc.\n" +msgstr "" +"FORMAT je jeden z rc, res alebo coff a dedukuje sa z prípony názvu súboru,\n" +"ak nie je určený. Samotný názov súboru je vstupný súbor.\n" +"Žiadný vstupný súbor je stdin, Å¡tandardne je rc. Žiadny výstpuný súbor je stdout, Å¡tandardne je rc.\n" + +#: windres.c:848 +msgid "invalid codepage specified.\n" +msgstr "zadaná neplatná kódová stránka.\n" + +#: windres.c:863 +msgid "invalid option -f\n" +msgstr "neplatná voľby -f\n" + +#: windres.c:868 +msgid "No filename following the -fo option.\n" +msgstr "Žiadny názov súboru nenásleduje za voľbou -fo.\n" + +#: windres.c:927 +#, c-format +msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" +msgstr "Voľba -l je zastaralá pre nastavenie vstupného formátu, prosím, radÅ¡ej použite -J.\n" + +#: windres.c:1037 +msgid "no resources" +msgstr "žiadne zdroje" + +#: wrstabs.c:353 wrstabs.c:1916 +#, c-format +msgid "string_hash_lookup failed: %s" +msgstr "string_hash_lookup zlyhal: %s" + +#: wrstabs.c:636 +#, c-format +msgid "stab_int_type: bad size %u" +msgstr "stab_int_type: zlá veľkosÅ¥ %u" + +#: wrstabs.c:1394 +#, c-format +msgid "%s: warning: unknown size for field `%s' in struct" +msgstr "%s: upozornenie: neznáma veľkosÅ¥ pre pole „%s“ v Å¡truktúre" + +#~ msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" +#~ msgstr "Momentálne sú podporované iba vezie 2 a 3 ladiacej informácie DWARF.\n" + +#~ msgid "Unable to locate entry %lu in the abbreviation table\n" +#~ msgstr "Nemožno nájsÅ¥ položku %lu v tabuľke skratiek\n" + +#~ msgid " %8.8lx %8.8lx %8.8lx (base address)\n" +#~ msgstr " %8.8lx %8.8lx %8.8lx (bázová adresa)\n" + +#~ msgid "set .nlmsections flags" +#~ msgstr "nastaviÅ¥ .nlmsections príznaky" + +#~ msgid "can't add section '%s' - it already exists!" +#~ msgstr "nie je možné pridaÅ¥ sekciu „%s“ - už existuje!" + +#~ msgid "%s: error in %s: %s" +#~ msgstr "%s: chyba v %s: %s" + +#~ msgid "making" +#~ msgstr "vytvára sa" + +#~ msgid "size" +#~ msgstr "veľkosÅ¥" + +#~ msgid "vma" +#~ msgstr "vma" + +#~ msgid "alignment" +#~ msgstr "zarovnanie" + +#~ msgid "private data" +#~ msgstr "privátne dáta" + +#~ msgid "%s: section `%s': error in %s: %s" +#~ msgstr "%s: sekcia „%s“: chyba v %s: %s" + +#~ msgid "invalid section [%5u] in group section [%5u]\n" +#~ msgstr "neplatná sekcia [%5u] v skupinovej sekcii [%5u]\n" + +#~ msgid " Offset: %#08lx Link to section: %ld (%s)\n" +#~ msgstr " Posun: %#08lx Odkaz na sekciu: %ld (%s)\n" + +#~ msgid "skipping relocation of unknown size against offset 0x%lx in section %s\n" +#~ msgstr "preskakujú sa relokácie neznámej veľkosti oproti ofsetu 0x%lx v sekcii %s\n" + +#~ msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n" +#~ msgstr "preskakuje sa neočakávaný typ symbolu %s v relokácii v sekcii .rela.%s\n" + +#~ msgid "invalid number %s" +#~ msgstr "neplatné číslo %s" + +#~ msgid "invalid integer argument %s" +#~ msgstr "neplatný celočíselný argument %s" diff --git a/binutils/po/sv.gmo b/binutils/po/sv.gmo index 16e64439949396f570964c4423d1a8c2e56064c8..0efae306a802a2485da36739f87aa9331641afe4 100644 GIT binary patch literal 113208 zcmd?S33yy(+5bP4wPoLTI4q?tWJ+mEfzpKO*g2eon$6yXfhLKk~U#cK~NSE z5Ks|iaY0Z}P~5;5L>5sHaR*ccL{wfD6+}hU|L1!@_c?QBl9c-X-v9OcU)O)Go_@}= z-OqkM%X!Yp(>rf|b%x(%n`JWl!mIf2zRfe4ZI6|0CbQ%GOlDWO6WkLX3ipS{!-L>y z@Njr8+zs9acY^o3{ZHYcn1?OMWcG%m;Wlt4l$?byf#G1yvs1P~pylW8l?rFL*ChIX>xp z3y#Npz~W4199#?)|9heGbvu;&C*A(vQ03py9Liw@R6aZ4cz7e60Dl5^f?F>M`QIDz zFSCaKl<%*=nec~D{&!oN$s7acL6zTma5B8d?f(w9!#sXjCUXj$4qM>I;Fj>8Q1!X_ z@=Rt5+!spjDb7owd5AAI~cnIbr;2v-Z+y{2TUEzgr3-}4=r=a@# zE%2}Khj29w_qzqI%}MiyOy+O!wX-sr4-xRC_hd5d_9wU$ za&l1NJ7E^~z`fun;V$r-Q04kKl>Fa8wZ9P;2YoULMwm~9azD#?9aK8*gNpA(w|@gh znD@FQlbHc0L$#xG;DPY#Q2q5OI0pV6O3uz72s{p+fH@CQL7Cg&;qc!uf`?xk`r&*i zdHqoJd@WS^?u2SLKZpCl7vTYL>km@aa5R)T3*~6Pd_rEfXe{)Q5xI)8M|CZ-)y1eYijT zHQrQ0@OdcnJI*RD0j{noMRm z+!gK$_lHNr2~hE@bMuYxc+5{i<#Vr(1wAqcj>G&;sCv83R;TzwG^qOy(rG3LXn@fwKP%{4x#r z(Cb3^KlRB_-urwiw8z=-o?)5H3iuS<<1+->ER*^3O_|K=MD*G%lr8qZznwOR)9GKz zWX^^!!ycKxOrOL5ui-)XoAtHO58A&T^x(VTe)ziyZUY~HyTQky%J&85KcLEG$8QAv zGZh|;`2;9`olyPoTu5}8_qq9ExI5;{pz7@=xHr5V?g<}(3jaLZ3;x~ByWADhH5x|P z&w&TRcBph-1l2FDhDz^Op!&xnQ04wQ+zvL}9m;VsJQVW+XAe|+y%z2P?}EzTkKFuk zsP?$WH$!_o94dSs?h7x03V$=)5q<~m1D}8@&)1>yv-5w2_T2y#ej3~t7NGKd9#puG zK(+HP!%^@FsB~rS3G>iBp~`C%+#61Z^1l*}f$xEm`#HER{0`h6{sgMregl=CE$$8e z_JXRHNzMguXUuu1a@zo>!VBPdct0Eg-+-#;Vc!bnz9m$8_Jt8V+PMO%zWbr%y%);g z6>vXzD^z^nbMvpD^7juYeX#3&A^(R$rF$Bb`(mhaT?Zxi0_T-b`MuH2w?mc3Jy7xe z!tMVKC4Z}LdpSUr|0F1Ri=ooF21@^&1yyf1LY4Q!Q0aIXO8%Djhjbncm9FEU+QU*P zxouG4&vWxF&Ih67JPTFNZ$jmB=LbT14~0`O&w?udbD`wj3FYr`sPcOrD&D_B$=m6{ z5dJWz^q=4?!bzB~g3{}cK&A6dsPNl76xzc`sCcG8^{W-mqVs&`$Drc79UcI`3-^bA zaBlsb;64gU-gGzvz7tM{*TWs)Q&8>oMX2`pSE%~g{^4LBL5+)9sQ$77%3l}!5j-Cr z0+)X`=%ce?7V{0x$Ds85TTty|^!I{(J{n5SG^qMs3RRxnQ2OP)Q0co2s(h}85&Q-` z6g~wN@32RL`B2z|c>$aTKMqI1UqH#(?9m`+7pU}Q;b^!Ls+`YCPqu>!cOu*Yw!)oY1*#k_fXe?3&Y!}m zm`D6LtXEHfO2-GG@^dp>0KWsbgS-7Cw4Z~a;vWwi;Av3ly96rU8==DA0Tu7#ZvJn0 zJmwKU4fT8?RJc`8`K~~<$4lJ&NvQnX<@P^@2V;H_s=l`WS&%aU?t*y^l$=xH2v~-@ z!gHY7;fJ8Y-vy6_Ps8ouo<9$IViZ(-3*gSM4Jse~Q0e|CRQWssm9Ia;W8ijAFjl}h z@G5u@RQTp6L;Grjil+?KUeASUU!Q_X_d`(S_!K-2ZuL~qcQc{-$9m`W@F>g=L$#}a zL8Wh>UxfOY43)n&D1CG>l>6tL-*x^Tj>UefUxs!#3GR(~F5C^az&&6e+#OyH_ko{v z-VY`J*Uo=K`8(iOp}kIm5$07;`F$5`hc~$W)=vlbF;MO3M0g}z5BG;R!!htXa9{W* zsQTOf*P%QoL6zqWsPZ`(PJ(B`y-@MJ0VRLe=Rt;oz7a13`D5TX z%(J1&eLYlp-U_#bUxzBsd!g#}WvKr97L?xE>UW`hcY{jDXm|vi0o88G@Id%!I0`=G zdB^HAmZ8kC;c>c2y{y`l1ZBvd;(9xA_!;Ba_4RK4{; zwV#XJe2tsG0OkK4=Mzx<`p;15-tMKqi7>*v5~|$JhDyhEa0_?`R64%~w}KBrrS~zY zcKn>XzYe#>yxGgaeMdL~^C3|Fj(~D+gi2SFo7X~>TQ5|8u7`^MPN?$x4jc`ih7;jd zuY`6q1!gg?fRgt<7{MFd{XV!o=3ha@{}Pnke?jTBon8(383h&Z5m5eSLCISNmELZ+ zB|Hai1J8%s!ONZ3!L2dh3U`2CaXttY-%p|B{~jto|Ab1{u73>u;$W!s%z(0A0Tr$t z9s6IrGyYG(eY$f6RD9h~`FKB+oU7pB@CLX!d=#ple+bo2 ze-3wqZ$Q=eR(}q9cL%8QZh&gfr$Whn7u*3}0+rrtp~~x9Q1N{SDt$kOJHuz8^7}fJ z`-sHo2tpNEq322_5xcs-Qg z2q^oJQ1MQL%GWHYey|oQe-}gP(~m%<|0_`K<6$>H2UTu=aqjw;(EcYt`JW3_j;BJ& zYk_L-B`CSqz+K_joR31ue-l;CzO@Io&5{`uzK=tQ4q4diypyd7osyz1k zYbdwFq3mZsg~fJ>Tx;pTgZR{|TzyZuM5E z&t04mlzkQ|U&q3|;XF7I=Ar8U8mRKP$$7W)ap!O0F1Wu5mH+Mk8O#U3%`i`Z(lDUp|k7Q!%fHO3$5e+%WnLRQ>(=-yz+@GsCPu90IMJ zpz6OHs$E|RRc<%I2KaR-f4_xF|8~QMnfwEx`qfyt4_pl8UWEI?^PtM(dZ_Zg6Dl1~ z!s+mjQ2q4CcMLN{4*?#!pa0ccQJRW`tE`on{_n9L?IldoCe?I`1!ymyGc-S_>OwV5m z_rQD=oDFYv)X#LNa$64P!1JK;^<8)j9KK`V45)BtL8a$*sCa+r_S@_<%;t&H z;c?h^L$%9W;dJ;zsC4hVbBO0esB*ai%KZ;e`95ryVYa_rfJ*lrP~rXvSHjV|hJ2k5 zPr&>=I34b?+c4{&OPn8qD$mE^47mC3LH=B*{GA79!f(UraLYZ0*>i=t@MO$aK$X{T zp!)r8dxr4MQ0?@C&Kuz#nD2Bx3L7y$508b1?lsKx-x}w7DE}XT>L;IuYOh~~YG+SF zwfi^WE^yDihuJ)%!8snPT#tdT!Bubxf==Ft_Qr(driNje$2TWEM-Iz;81n^_hS|Dt z-zmc~x8nbNC_QlG)X=X_g%RdFl>G%z<@N=rdVJ39_n#L0&xK0o$x!puE_e{^g9?8w zRDXQ{O20l2rT@1%KKMTnN}n`1Cqe0f=}>ZuQ2sB5(jPZK$^RNuKYt1;|65HTmN^hM zK)E+T>B}>q(s4D^xN?u%f6w^}RK4%q81lCaD*T6_^yOEe#`y=JMVeI}J)tpX=u9pz8BJsQUgXRC@mjsjkd{vqHHY3S~bBDxIf8 zrRNJ!n*6{=j;I3;r6R%A*TP zuU`$7??<5e;SMJbv*(UEsQz>}RKNTSl-?S3QjoV8&cghDD1VParDMzaf#ae2@o8{6 z{5VuQ`W2L%cPtoY^PDV{c|O#5xB*Hp-3d>GuR@jI39iFhlez~UWU>OcR-C7 zFT;Cjz!R5*cJlg)(4Qxq62|o$ymuJ;3-E_<{K{dOU%!KNt{Rqki-?|IJuGuR_RqEr z%k(3!ZSAnkneZ9d1y^LcQhEGB1^S?mp?d`fl z{D(u;ewc0fA}}3cDP3+q-QLY{bINmJOiqHE`iF&bx`sj zfXerCZhjN0JooGg{rNa3_g1L>aTZj#OQHOI-uW1m9{LlE;6c4%9ySvyf6Y+#MW}MP z3@Uw}fvVpJpwj;p}oF~H(*k1xw&mV?L*R@dcZiCVXk3!}1Pf-5% z*bvfl5LA5Qq00LtsPweM2%ZBa=Q=34{{@x)A3%kB5vn{k>kHxcfoiWuJ7+zJyxO4zK3iDzpy>uZw5Z((F&$CeF z^cGb3?avPOhdF0M^^Y~q^Wia=Z-$z8J_{A!j^~8@j)u~|jZop1Lb>-luW;Vtybr4W zo`lNBt5D^=?Yly`90p}R(ame&RLmE`3GgAP@NdFx;EwMO=6#{s;drR|#9Synuna1F z=Rnot74TVjGgP@;{GPyDp~m&cpz=HH+>qbNQ1#vcw}$;t@tg;h&yPUG_eCiEau1aM zhoSQE1XMcSfNBr>ofq`#O84j7{!ys> zJqH!v8&K_MSCo4MC%`A*5-5M!3qn6@glfO-Q0?M9ZoU>u|J(^B=P{`E^fKHL9{j$L zu8C0f*9hhBG^li)1Jw?$hid2dJAdQ$o4r4@yHQZ-o$1U$>DhNf$-Noo;DhjFIO@Vs zuKiHud=XUpy%Ng*7opPqC{#LLfU57UFADiQ0IEM71DT#@TA}jQ0p;&{sDANP=fhCt z^Awx{UxOOQ#$6oR$La6{%%6fPzn7rWvDGDEU3v&qyXb{#59dR*->YCFd>Bgphz|t! zgQ3b}0#rUuhRWYMI2FDhs=Yl3EG$nz|m0tj)#)J97-Q`L*@TtQ04g` zY=(P$FvwX4)t}CF^QBPr@hPbKd=#o2{s<*Mds%Rw4VC{QlpeeYs@^{ikB8rcO2=DJ z`P%LBAm<49Zp@wVBk(1te4Kwp(8t$8mD?>)>HY>(e|a7%o}E4v%!k0~m`{es!4E;D z`!T5X&0nF$xsg|f`dJ25eibOWS3srrn^67qmr(k4v#SCRb8=%s0C)7CjYv<-49+v6AJO(O1S39H{oy4OQwt>)!%%W>gR1YZ zLdE|ORKNQ*RC)a!O5Wi&hJ2k4RbH1n?}p0H3vd$L^{sZjmwT~PkN3{{R#LHXPImf-I|sC>_cN>2_d z{vuSm-UX%Cu5kO$y7_DF{(Y$QJp+}#e?Z9@{<)B!-J#?~Q2l%y9042MJRhq3RzbyA zf~uGEpwf8_l)NuNmE*lo>3JGT-s@2QxA=T$Py0fZ<21F-VfE@Zi1@+yP?|4{qP9*DwN(h;IAn)Gd_Dn{uA8Cqc`sDFk3;$YB~-co!QKB3)gDHCA+)oDoX10@ z^PN!TaTb)ntDws9R_C{&>fs5fdVCQoKYxSj--sP2C7{xaP~ljyB4bb-2zpf z--pu6zk@2LZEp|#^+2d{nhBMz5>)&bLbdykLFMyP(E1yczsI4<gBc?+sP9`L0QZVFU<%b?1;6{=tK!13^MC_Q#RR670)kA&NN zIm9y+9)r09s(e2QrBCmIs_)-ImCx%?<^GO4LwW28WuJvA&*PxlWeZfl>V@)uIh356 zpxVt>oWFp|&#8l}q z4N&DU8A@MvInRX}udarp;FqDw^%qd(_cy5Y@A|cnj>DkJd4_W#RDRzHRevR@arz>t za(M_U{XcQO1SN0tuLtf86@HwXXF{d#6u24ef@)7^K-J%wFbi*iN5h{(wbvcK5!@%h zV==eDnegNA1o#Y8`H#74SY{ZEf7kfUY`E7uXb(6p;C>j9cX9tq>^=&&!OYZw=X~fU z?)CdD_rHXXLH!QK{Q%sy!~8+aALIHk_b0o%{OC6$Wgf}>tAx|l_uSviH5*x< zmIJ?IupiE~3;t&WtK|Qqus;#M%b|YXf!%&D^8~+F{yXvaEqDQPei{40ZZUT8@8`IU z<@%IcOofl(_e8F*bH9k|IIipPGl@$D`d#oIF8%(6-A>s3oJ&8ZXqkV*7q~jz?kD)! zf%_F)OR>M6>uX$Ud;j8EPMY+45r3bBr{V8Vt_JScL;b$1xcU7d!2W+0yUA|;3zW`{ ze;;(2FJrMA_a8K->_`L`FExA|U zc^UH|T>8D6>qFT0!&bt~;?nON$W%G`{SE)`!c=zmgHmp7xT$adk!wr&!EJ%dAMO6J z&P>4WNZhV~g;e+mx6$rj{`8X$(C<(W|4#gW5IyWy~+LET$i~28?l>)SwHpVZ@RtA$6_zNJRiGV zx!!>+>3#h^!nFnF6S(5v-SG{iYbQVHKK*{k^$V`~9;N~A?{PonJP^Ajgq41Mfa`4T zm%+=prs8&%`+Ey+huizGdkboOIGKC>4#Pag{mFbG=2kcvZtwP2aK9&4{5y@X58!sY zyN`nZ#kC#w68mAUg_uv03@ko``3$bzu{#Co_XhV&Q8UXJgbME)TJ^f>-&peL%>4a(F+Ry#U z&#$<@ANLNfe{bGbhS4#WO=?)T#Uz3xZPi1fRSYXEL_;aq>@%6S;3FqwNXzl-Y(uKT&ZP1yA=@G#8Xe!nGQ=5jxgFpqNS z7va7;_P@nEo@;~4eFnD^xfWvnH}))fGv{E|?|aPkWdV z#1;QOg57W2eh=&$@c(fx{chs=0dCu1eh+TXa6blKiT$_TkNjQ5rTN|ETuofJ;cpN4 zSFY#qH{rhoy2J_~)e+b^i^)q)n0nW3~ z=mYLg=jy=x5Pt69ewDlJf%$RFoo@an=Ff2dU)Z&9|0LIAnE!%#G1t3@Yqk50aWeLQ z!e9LRI`_|F_zL_HZVz$kHy-nj+^%`D@ecgY=Gq1OBe@ph=T#i<<=Wak{R+E(aD5AZ5q=iI_&1;XdvVk6V7K4Q`Rib< zW4W2nWB01tyS1&Y{~N=lT+2LN&F-gwIgkAXa3=Ck$NuYZf6Q6#UzZ!^pK|?x`=hWw zzfOJ``x4jLTzlj15~%g?_wjcK{94L?4)=pFPe;x_Q}%evOvi08cGtc(ney?}V*Wh;|4!!U|_!@4L zxYw^3kU0+Xt=K>3<|fQbxennPiwyl{a=qK-{sQ|Sa^Hd5o^UDGTJAprui@&l5VSGw z@ALbEabLuxUlY8T>p|R0a4hol+btlo8|E{){~}iw_nqclw z4)yyQZYv41(*0Jrzm%(&OTQhsj=-&l>o~&ccP96v-T!3#eE_@faD9Sn2h8`mzedb2 zas89)G%o%2`7fAPx!tejP8uG??LBUH9(E67{xjw_n8&;woCE(0 zKEXAGFeh>Sj{Co2znbg)n177GypPKROs~|852MM-WE8r*MBK z_g@Oe%v#JBBV!A$G29>T_W$DkR_-_RaK||1{0e^e;d+Jpm0VwzCBGfr4^H;`fSbRH z#Sgf~A@jYsJj(qgxE;X#@$l2w|F;J!aZIwdL@TOc>p~eQM8HM(aqWsJ*<^^v0kXos9 zl#1rJxhGfdiArrr#A^$=e4$*K9DM74BAHJnqo&@jmO?oqL{FisQ0$>}a9Y^iTFMu~ zeRH9;2f+U9B=5@*1LNu$RjHgn$KU$J&=`2JYm8j6w-P1o-vIg;x z1f0`>Z)I_)fOQ^{fNiDD&e8^zZDm78PwU!3CCZfxQK?%=&2`Ej6>ZsVQyguja#ya0 zGRI-m$jYdwT<9#d<}70s&mit4EA(hw-^k9ssI^q=$#oPf(a6qx)Y9J*%414b!Afjo zWt!SiW4U#0$9l3%tLam;jg<->I{Tx1Z&$bKAQo?N&n)#KtXS%aXkz)Ow@4oH1a2!O z{zxjdGs{Eg3oX6vmK0S^tvqY5v-*pKu4D zq0l#=6jgaD<`X(9J)u)6f|lOab%ma&6U(U6dQmjGr___{RDq48_RPI9Mj_{Sw3Kr+ zRr4HIjPKx1mC|m$ zYkZBROxij-T6;#-c864Bh$V&`C{MLErbU7Zj(V&~)a9YGrm$;#s%|^Fa_t3)l_D8y z{b4nIH|Z~FWs~w!=_wE81w|ocLA!_*v+Ku(s3Og&lBiaoMeIRTpx)oA3Zy~@sBHrz zqZ*(tj*WZXWT};)wB9Ce*Dr75+4^jfu~-?@XKHECRW1t^waoj34VN7?s$tv*jRxueq-vTw&P-b^D0J1?MA4kiTsxz4 zV`oQuaYQ1eyTo{_!EQ=djv=5}m^PVK)wOc94e}dG<#nqXqK*m2OlpX_T1(}^%50&t zZPi)X&cfN*mcls=QFnK11I>oF?C71Aly=-*Ro z=?P_AUl&F5G^W%hI-4!@wRZOA3)#3Fr$`A-i)NLIqk5u3Uw4UVL$HhERTx=kbDf<@ zFq?45FP6zH2_-}CY^w$=ma>?0y`4RAyp-b1&O(j>A=ne8r6-nA6Lzq87Zw>mv)TUsFl5%2RTM4hEf*sOsP0_3!i2{>N#})tBeO>y!$8ldqi|vFRU;u3XUb}c z2Cdp(P+g-c(Xw1;FOG>hOycDE{|(8};hI7gig`=?$o%jO5oyk1KiU*OO-{`@o25r& znRM8cEqLL71Vni%Gj^zG%|l)Xz-D0J(=b=+?TMyODNc(c ztVC0oqZFpeZ~R+Yq2~l!DfwKOH5JMprX^P?WEF8VMYp<}7As-pyUz*g7oH6+>v4x79J(tj!FvR{z#Y zEV*$~%`r3%9|Js%9bMg2Tr`DBR56A;Huo1x#r`g>6R6ElzgfI_7+3LCT_4+{<68UM znZ#EMIGR~5sDu`vTsEkj-0z_3Fp5sibtjcQm^#d63HWxpa4ajx)*hB2uGp(lc4z`P zF_pTY>*MYdnfoCV<6*ci;8AZE@TdU+^My{!-VmX=B~2nQbU+9-UHIXTS}DzQLL{ar0O%t?KJE6o&t=gBVI+j{ar<;XV97cjfi+CcM5k@4NKHhn_r8RXO z8#F4j#-y$_gS1g(Y@(EwDk{eEss|4?NT_(ehn}h_^i<1VhB$9karA++!s6WuE?&#H zM^AjtQxZ=elJH6iEtWXLbYqBFMGN7j#sAX*-=l9OI6BfaSz2NFw6;#wB^t{^=Lv0^ zK$F$<#35*+w(5LAQveN>nuT-}J$QlO8`n#@;vlN2jbOP-T@zQi4c5$)$&tsomcVNZ zo!v<}$2ZlgVo9e>CEu#>aO+}!H9V<<8k){@E$okmp@w;t`f->KXV($oI=p3>HPrkz z8rEa&tdm*EAE+u$`#lu}pWVOD#NXmo;eBB9d$f zt{?v`1O=81>urN;jOS`S;^+m^+BGG@=B$*n?A>Qyh3#=;Y1Z;Z1MVe`9 zvznzaNf;TDxhxEYaXN$T$b-jC>YE(KAJW3sEZNc)K*~XlqiVB=Eg=Tjk@*H|`O;Y- zl*Qt~5>E=N%((sH!g_4TvMs@D1t;knnO6W?o`t}pmloF*OB>Ys8Ohj`>S1TLrI*>$ zdMzLk)7dwMFxh!D0`?ev!!z<<+}o=zjI;xHLMuE@$Sz012CXYW+;oo*nrHmy*|wG}nTK zEGr7;A~nC6rSATytCa6(>nP-p$hF$Msi%Vhq$k(aZNt9iT_MR5csc@0Z02O+oxHjk zlWp|0N@|@4G(ed9C9+6JmDX(B~LDfyPNcCFX0;aN) zAzTS-Pvlt+21rcFt5$0~^*c09u=+B;IBC5_?E}!?YknzFu>d{Rajz}?sZ^S7XiDS- z@3kcsG1l2*p-`jYsZl65cDzm((O%s*P zG_EUGUPrE(K;$ADB9)T4aZ17nIY8okkE&+lQ~I)-rJyM$Nik(x$gL|B2MDl2-n2w* zKtfzqx<_#g`U}$3h(e;{JpiAsR`clsvzn0PJ1VWL>;`R^sk&!VBwH(0`CE|^U`1D_ z4PpVsep@-RcUR8Fv+(4px&(C~$cA(_h1tBA5=Mb!*C|!;C5A_Oy!2@Sy~PGq?AIR5 zN|>!8cuH$dRT)W{HM23n;!XbD3#*|ZteOV46Uk9h?(Mm5ElN70DU8T}*)b_4PcK5aSQzI5&?|bx zKTw_q3TdI*ryohwCgLoX{cCf@c6yAYoGtZvdT+&ro)b;!D7KcTh1inf8}vr1HTYI) z2gF+!n=;RWx=^XcxV|g*KaX$zg2sku*@8w>n>86`;iB}WG8z=Q7R*XQH344U*^m(H z!e>oA`|z`~=UA0*N+Ha&vW!TLB}56LnZ_0A!viWaC9qlnp03WW9F0=jk^jTkRrX53 ze;hLz|38m;6Y@-5tYrPQ%3B`$N<~Iq)r47l3yiJL*_47`jttFIayDbH4)XaD^AinM zg+31PUj`a-X&o#?Pgp_RlLVKv>EpEh+$v9Mv<$_CHKDjt-`Q&qM+S=!_;E)TB= zRBxV&kVYsceLRdQA!eTdlTr6tT^68a`a27;z;c)~4Jy!wgn<(5S-^lHhJL@wPixHL&hX^UO%=%|E&&{%>*u$^VJ!fgptVBLi2>Gm~gk4 zxppGVPSgx4O2yMWA+EA8I}O<#P&Q4f`BZt(0EWn9YVuYuMYFq26=QRW>O`(aR5on# zRBPvLQd2X5t4d;qx2dTKb1t93RV7$yGsW9fF+4Jhcd*!OX9do9$FV9oT@@Mr3<}Hq$Zh1S)91o6lqbS{5;d~Uc|r+JMT#IY1`J=Yc~1gH7#*w zhuk4|3DtcKb|HMH9IeT8HMPYdK|}7}4koC!5okr|z6QW@5U1XD1uD^@wha;QPjK3% zw_DF|3bv^=V1H$5vV{CcqB&aR1|7??>K5S~O=-RHj9{>N& zf_KQL2HtA^|E7dchVjmum%sol>eK^bYs=m2*Z7>&wgG*nl|f35=jmZ9mR&nP%_&i_ zPPScIwitp_{l;3GLTh4}4w?$B`I!y}^MJsPV9U(*U|F*f1#_{|?cEa9&A}WtNz>Be zgw*KgsAA`8IK7>clEh>~g~Y9NEs|Z8ZNPPKUI#VBK` z;5-wtEu;8BWC&ah9^03bwA)5aU!k=(ocQ%5*;e7KI$`l1RGg*3g(*d8Db12nDfMc5 zFa4XRCq!KxeUZD_WXjH7=Q}Dcx?e?7k$|>d$|R{-lM^RHMIz^#ETvPy7O1`8!B~p8 zcFR?=nVuvm78lfTYD1Sc7{!f&CL|eiEl-qK-F{juV>Cg^xec0nc8y`Lp+9O~(m12p zTC>Dil3kY0uxPGWCo1U>^))WDD^9Dj(Umbu(h|#7IP#np7bj^jG4ToMv^dEsOP1|! zC#5r>#8aE!I)SD&bzR05r&E-YmQGQeg148pUee+jS}IvpX>T)^>yUs!W@Up-#5}C=c4}R+I0vhPym>!alI|5+ z_rwZJp(JX7MBzEn4B7CWPi5-DMN7hoi5{NRM>2&Mm6YFf07;pxhjyHj?Z_3Uwsf?o zN=dhk;ZdR-f*Dus#CW(kOCdTpl)OplbaVbh^j3B=OunRDzxZBv3YhqXSJtUIzZ zt@sOF>=<_zR!(hRa?1SKt2||l0c=sQstvCBBUtz7;U6QlcYhN|k-gn-2~}pI?ct*j zj0HxXR*r}8ykUg@Eq3r?giiJFIvYpWINl)6THd&L&QJvtq|9RHYvU37d8FAo zy+54yafdJA^u=(Ul=4@I?R_C0oZ4~yxWm`WBsH`9Smx+FK*`<#CL5D=Zfp)?gB?h! z-s|v`op*{^FDKR2kg0#95Y&FSA41TU{qkiAkPwYXhbOuLR2P+Csle{d})7L@# z1TPE13uS}2R}*dRY(cKQqgCEAkzP0G=<4m_y{|;`_zUHD2y%Ikwb0e;jWJnzdQqz- zHW7YCuStyGVTxn4Q+m8b72bNX^L>M!?i)nJe-PBNZ1wH&`XR$6W+fqgdRcu*<6KXz zOw_z@w#G}=YQcH6kSO;Vt88D~*7ziXh0RBxq^h=Y?o$jcxc)t^dA0kp@i|Bj*WBMV zwpyTOQjU~~{}n+sZ-BW(+aVci%T8WNtiE3!GUo*|gkSuiq^ilI;~#7O!89e*>pzLN32sKy`GGEDGuGYv19FMZ~Q3+b*|d>8WN=)a_Q`F1eSDYIc>wIucxbyOYEVFMb#6{Yi?Ak zt3o)Kk3J5kV%$%dzt(yyFv_W%R=3#4DU|VYueETc#5Hqm5PEG0!gymP6$j7=Os}R$ zb6Wim+K9aYn{L^d22e|;h1w}0You|AAvM8}A$&5VFKN`4_`nd_*3-ua;^xk)!9G{f z)P|{4b;4r9A_co7mn=!^v`19)lj1nS)S{YEo!5G8LdazuWrOmmvY)srTg-)y9_x83Yg^ZuEZ^n?0$&t#%1821seL zo2tI>*2`*=r5LkqChaR*HH}`S&a7>K;Jv&m=%ku5tZON@?y`PT^%dIoe;^}i^@Nld z>-kJ@o0+w?NAuU|6?xj~e<)F%H~DRXlXpbdYFtg__o0;L46wrf^rb)(G(2=%AO*ZrSkYUu0RUgOGMO z*I#0>?6uVdXH+Tj-5zUX9J*rESNcOqn)gzTcXk}~>JH;cxr4X;(aCmt-F#MRe1<6L zG;!mm8FNk}8r|A9mR)z=&}a$S>8%M?(ncn44B1mEC51y^dbwKj0Zv;{qPFYP+FQ2Q zOT6PG4;3sS>uV&k*G0X>uY=Z{%g*x1);37uI4|8 zvJytfl`7zDQl@r>kB(ul(-x^rokHgsh__ms=GIAyw@s~^QfA&G(i9Ks!{BHs+)bhn{^9kcJn&&Y-8B z#r6gQ=v!dg5z!k#OsQFVPZ^n?HU%S}9r5?K!YW4-?%sI9EfuKr1!_a3vE0rpGuqo= zmp5z@VX3bs>GZK3vkskdkS}a?aYk5MvF&`gpr|SKOn-?a7bZ2deJg>~#_|y=4eOoE zjyX-IxoZ-t<^fm;nv0qWJ)G-gzFo@YZ8p51l<(#Fn8J1Ic~H(@o3VoCGb-UVm44=% zxnc!{)TPG480n4KcPI%zYx!!PPt0qYvyeAHbg+Qoi|8d9@yDWTh*@?v=?8Z9*xwWP009 z?X*R?7B-%(ccokW?D=!zM;c1vP=T$v`!gbYzD^&QrdnfrQrn(E1z5#|l-R?9l@f{1 zRjB_Sj+1J7OK$ZFrn-WMm1^WEBh&lzhs-3v_IShFP*$xIXX!`3(w1LXDB5O|%dW`m(1q*>=o3 zqb%pEIJL!xLO5l`W;mZ;m=|xStC{#A3zro48#R6FgZN0D7eO4yMeIvkUXv9*bx&(xwu%;{>T9h+@TNdaZicU|{H8Li@Mal2q1)PJaoqK5iZ6i;px^ zgQpW7yT;#ctCx^^WRp6qkd_cH72*akpaAS6BWT-fvT>}W#3D=&$8W(VKGLI-lEje} z-k+y5XQ@2+;6t45kSiUBRyT=l<4KalB+ubB2x){5O~EQw=lgipSNotXvM*>#TzV9Y zMW!CdWjCy(*L0V=+U8W436{!AV0e+#B(9vQNkYR^rJ`YK&fb-8nA+Xjq9tvmVJg#( zcG0E}4O83r(5sA$jtx^e4ZR9+L;T{xt52jo5E>tjXT~!{jd0=NS}x+7ag2!?uY9|Z zg&S>^Pq^w6m5emGsQHxU#XPpGIboEE!r4!bome+w&|)M^D%^&?cxteOa`OiR8uB#R z8(>8-HJ+WFVVUFbf<5z|dRC>svi@uazICir`p;oB39sGxvv7N1BpU5=0}Y(oJ4RCJ z>}>vQUQMLv%ej0<-_)~?Is3?QXCFBU5&nydi`fJCaPn_ba+GqlSf5()H+D3rHO*h(;}Ubm(BQO}PYG!lrJM3) zxT$<(OpFg=BSv~9v6UPhos%#0hyt5_)zLjG$-4jIdZA}AwdLzcWuYd;qYfntV0}ACz zAFHvIe>fv6y%&TAg(P8Sr#UY7(jiQ!DQF_$QKmoKkR%PkwiQ2hW$4B6&c}RxjJd$; z3Soyq71XqJe%8)%>U(q2Q=GQcrlRzlUh2!nI=n7}yo+UP*(3(N*%rQHQB^z>!#Kq9 zDpoh8hQ5Y;qHL-;(@ROQURCaV{iQVy&v~O`8loe|N%0&xNogAL<&3&HNzid61yK+1 z1AJ5bEM924&Hm9n#X5NB(F}_+;kygPb~JB8b3;o*XTyw!`RBxHH_5x7Ye3<%wB!g} zk$p@}e24y3qN&l*eC2|Zq|MwO6K>BUhI23;Imyiy+f=rPWmbNMJXKO{#)E0NAyiwn zA_lblC^VrVbeo+Bx5uC9Ic1!N@ah9f$M)}1a|zxk9;C5{RHPeubyb)&b*4~!uEK^^ zl|vX9>&v%Uorm4gWWa2x*!kg^iZ@?>$j%Sf@s$?dAzWWb-b}QqN7yl88dY{jv)xFY zE}qC#VlUjSt<7n0ttp`F;KxmskI>C*L#{erYahqHexI|U!g>`m z(Ty}*+cWd-ZqNV2u#$AOqSB2vDDVO-F9op0s$a8i;u>~W2E=}CPWg_dGCjD;PWox1 z{McI^yuF^twg}?mnTkh!rrKt*i%gB+kZTFY?m~*{JHOS4BJi{ET7~hxbDRS{Do_lDX6c?T? z4ScID3Qv2q@Y0XvHxXBpj8#p!Q`YjJ#M&zfVc=WbIBVVt3vZLNU{s8jsOs`A9PX;d z<>O@apnH0Z435c?$NH62ZR&t~ud2m1V$+?urYk3|aqgA$6^w5@V+|=z{;%oGYbAQX z>HS#rU~|4@3K6fn6QMOBh8**T81(cFlz1)?fBfq0)+RQI=qpT}Qb^v{Vg3Xs1{iz-Qd6#Vs|SBAZzJC+8&DBLEvW{NJd{Y7Mf|Ux zsg)+LS*KHAgD2ttQvUywXyfu3WR`Z9(ovYy$~br?Dsxod@`-&MO%f>m+H>f}VI`o9 z#DQjNTPHXY4?j&;3$#zYc2Q#a>rIuAi~MhkFy1mt)UaFi8I{9Jhe~VM1_*x{fZjTF z3jf6s$Adz(7u#`#svs%rlq~J+g%Ky3!tgO|PIgHPA^) z;?sK}C)JclMaFI+L)wz7Ef1?73ZIp1mwieq9-}2jGbH{v3oa%5i!`=yPEAF-Ikd!D zy<}T`p|Y#7*WYOZQY}!1($Ko%Hp1j(&}1kLA)Z*X>w(>1YUK=yB0S0uQIB5OQYqPK zgm8+eP|n*}5VqM#3SSu08yP-J;{265fDW+O4n#@&vW$K`wuz!~z@8mbxwfZUzb6yx zk(B242c4nT^c5}@eO`~qXw&sdFb+T1KwPi>H%Sj^?{vP}Au}8v9#c#9z?T*jp4Jci zBU0%J+R$CP$oJ+keJesY8l`$!B2Gi!o**H=l#e`hRXe_e^E z#k>M+<1dpjOghc0ebY*-W@m0OB6BeNT0Hz9KN*fqPL9U5v?YJhff{WsSo4mD+~B9T z$R~r@EMkvltp5B5#}9^Q^l+L>|FOe6vXzqye3D7iS*fCYu+}qd-PxBM_%tBjj|;}6}=8- zh69;&7tOADcFrk5bDf#fUq!J#7_@sl0}h#+9Hl(CDzEo3yId~m0EQx(!(YTAE8d;M zE}1`MGxr640?fCKE0cpQkI*}KD+(Q8dN2H)9TFPm=FveTD+ig!=J04tW|c!c8E#9x zdZyDIX)zW~AJL-Ycp_U^1cz-Eubj#D{+&uypS!Of^hhrWOb(rz((+SO)peiOPFfn? zZ23piNbmT!H7bbvkWD6vCdkRE-8H_{)* zpmsKtX>zG((i#U17FnB}9I+FOK_9e~+F{+IH~zKOu=nZ``C(G+&t+($ZPp6Bv^|SS zyG>fB`psmH9%)Y^ga{UuLcxyT>xfS*${%gTHJg#5&owVkEv z7QVY13w6y%m+3F?_eE472+$X?+KcEczAT@-ZJ(;5sz3h#Kvg|h_>iH{!Go@dpEia= zFCJcnSn6$G8*jXlv79-f1v#pzZ~b~HTOHOF4XuIAb&W=YB{5y2R>RblDwHR9{EZ?q zhQZ>JW73eqhu;#TXDeExzlZ0Ikv(aZk~fHo{-#4=wOVM^F8=&as5*aO>#8RCHc+hw zs#*t~;=WUAfA+#TmR_Cdtg4d4RAK*}T!lXwp%Ywma?{gm_0i8>g4l~(p-$s+PD1zk zH?nOzL;a6W408@v`KDECJD%4p6}?_mle*B~1j{6!)~;^fcaOoA%~C4Gw({(&uVH6j zPCP^Gv~;p#5Py%GeiUx=gL~jx-SHthJXF1^VI`*V%qR5=VRL*Gs+IGCjG$BKO8#C2 zB^ZyP(=tL<}A6*d>dLdLjNS#Ev49VV%($Ie~8tW~O+p5m#T;-6W>TP2}61FKa*y)AL63Pvu)~o9wy5V>-mJpdPl_^_+A`;hER{pd|qU) zetHV3j>>_>Z-F$)Vp_SLw?=x|kJ?5T{V^0v zkg6u_K#dG)Z*^OZoT;dN5v@}*&-n9uK~m_#K8;R_gS_gk1aw&Zch2G|w;y!klpfhv zU>x$jlzsKD$LKGiq^C_aDO3=ZJ>4iiluw?j;^d}WhMe+8IXl{W`TJ*@SSVAOnW@hc zjZ7xR`U|mXmw41bPOXDhk3$EOt7{ANX{;^kg{OR_bc*}3m0m8g-3xEARvEVF8{)hQ z2Y&lGw!gL~8b5B__-IbKz^cF0*2CCPh~{XbZUxZ5iyW;gDaK1J7UD(`ETl19DWnQq zUgc8h=}osFKc%0Zx~TK0#rT_r;Yl~k+Mo?$+jtMoZ5Pj5HhXd6HTD~9W3RF8DNWJn z<}gI23T8}ZmX7)>jnxeTZLwM=NYP;KakC%78O50jt>gG;2cCu0C{7m2dX3Tkgt3+x z{+^<>7+*wNqG%E}yGf?snsQcs$2y0(TlJ%ZR8si!V>aIo=akdO=4i~eK99R%T4z|$ za7tJ4Qvf+@;UdJ1enZ086%xLuNWDDCeIwmtaOof~M@BrOmw!H@#-h$8A`iymO zGS1Fkv1sAqC1JhEDB`n^JdSUt)kPT zO8bT!Q<4q#tqXJU>~rFnzXYFhAK5!11nn(W=i^~kNtQI9vH9_!-cpmEp*?BKsGaht zljVQ6r@GnL%rrfi^v&d#;n3o<>tMe_i(L8OG>8&tZ%}@4Eam159dW`y={UyH%gZPeL zHI3Dk%8oXXN35^5?T~piDm$`ulp+hZw$fJH8IjT7o>GQ}Q1Jtu(;9xDYg)md#H$U= z$wIqkM|62K+IBX^G@v|2^Bla?%I%71bl9ONU|0~1rd_t{wplN7sI2XD<~+TV)K1nZAyvGnlugVh|0nBI~f6P2RTsZ|N# zyQ9$q7aD9v`vg!0W)p92`ZDwFZza%|E3CuAcjDp`XSU@=Fn_7AtT!zu+aJKK+VvI( zv8|M(N8Rg!@C}a0{=&3r-(;<@Al6x7NuGX}MXhgvj?s~m_4;m+HU`pfR`KkKA%I6D z{zqqhGLX^Cwl;@N3;FEYXua_2A-W?5zy&v}kcGr@I{F)Ja*i zI2O`f4l)LKSYa8X>98_i-PgwUO1s9XbXt-~EU5z=J(-@!I_D*g%_lW4S-f;6Wzv(Y ztgCZgKCfxQ_#~(N8CM?j4<=~!d=?=yO&e(9&*&E~!A4}7v^O^3w=Db#=)~T>9Tc0E zgs-RsV^yQN^L*{w@c`Z)k27Q0cm$gucu;}1T&KzDkG&}dwLb0&Ju{kTS&vn_s1{d- zc|vu8fCqauLa9qWEnz3JefJJ+iG#*Y^(hp!{?eFfI_8Z$M)il*!JD1%lB3p%+Q7EJ z;hc$0qQiEN+0qpm>*9A`JQ+-L?2L@PzoAG?Zm~cb*t0HH-@D;SRgXP7&{}0fnXikn z?Bg3c_Bto?CqKu-Mi)Dd3haOIC``6|$KxRf^2}1BBh+>eu+CcFO2t$Rc2^5cLaf~)zS_PA~ zjYL@=E+iq$`xV^3M5(#u5K>rWFukpgZ>k+Nwah|&kiphB&HZSwu4HdXZL$w%n^yB| z8rgZCZx^%=#zdJW!p44B7*UBn-?fx5hDh16r^v-qdw-Ow@(T}lXi_ESXEmleM}6YW zPW)28JhbZbmZ50XKWc)e{purc%=+w$uwjllHuhZIOR?A&q0Hx@81=2p!@Zw6&_>$&tDf=lzhrDo^@nutZd(w2e+}UxgBNb}NuBkQC^mV-NH~3Vdna?-cEHAZXUS0Ku8Mopb z%%4Ahv01q$_su1=sjsrxgkpcs1|_vVI!6ngL~S4K#{0M7vk~_G{DFkzlN@<{4Y3e4 zc6Vo*S+glGXin1uwg63)B=*W$thQ>l?|1@Gbx0lx@F&!Ja(&fD5ph#M4tw*NC3M!R z+R@hla=gP6cCpdhlQY@wEqSUmO`>;bRxl>HDcFbV(l6#hfT1>D7_R zn@+yZ%VL}<34gYSLO}1QAKIHtVwe7~@0if6*f7$crL@7LMStu|pX1=`u*?QnEXT^) z)KhMRe|5!nd9CWS+OM!0=K*Qh9hA8E<1F!8q1x?R!XNY0=-bX)WYT;*0wi<3=XIQ& zQt9F)Y-Z3*`}~iEB2|ZF!iy=)1^MQ4scnQxa&FU7e~r2`TGZRZvjmPTwCW(K9Rf~8 zrQKsD(|nke<1qcSsfbNBhNT|;Ve}=`0%J6Kzn@(z4xV&jHvu9fg>ukl+qIG_n40{O((i6Cj@Fs(V zS9d;m5k2KO&!3~$M*+ey+IVFhUR4=v*C8EIZP@CLhd)JB^W}*`P1@|yc2a}YgBUiE zNy|2Mmh7vB_X^{7OngB%=uW*#_~F_VZAss8;Z&5I{ejMj_ccl8EhH7 z;>`f<{S9W%M+*nDw)w1d1T#mnKkgW2k4uZGr`#*Tfj@Pb5P8ZiOvJ(((pIV}mI3ar z8&$`3?wY`Pp7e27Jn(n6Y~rP_K5%cJnX(2X3qs4A1l9Uev)Gu2j$$k$En?+>lTE9l zmDyEi<-5AiV7b_L4j+VRMRZeXQKh+eJ)b$M{nAkUbtzwRg#Ak;#XgZ&P3p=dOGwZY z9FoeXjfU{xc^TS+XC_*SQnNT$ZOktZbAl)HpO}V<-i5!7b1LpZeDYl*FOtMD9=+1F z%V?Ia6^(;ycyz8Xx>q@=Z>hIlziqy1#!$@ljY3a=%*O;U4fc8l}b7hW8<4D!6py3X&dHe$vMNsYZ&#yBrF;gUK1Q;3lVLz*?h#` z9ZWw=;i;`&Q)gftTaDE}t)+OAzk6!YqL*x@CiR?AK{Ii%*PglxIZcT9pjmigqB+N! zzEPAYbAvoD9fgl#+vNGhg6!56=3uwXLRWtj_iJsez@Ah}Afg@IjnyQV@cK!&|ivN9|)* z`Xi8S%;j|OCa14@*=e(keGSW}M{#BFjUif%K6$Ta3uRX3>nT3{_1!v;`Xj@|LOb&q zJkUwPil#bi)6mDTov4%J!fAFXjCtO~6s&ssFkTF()J=s2SKsKi%1Bx3TqDOnReHlMRil>F1 z63zZ;tlG296XE3gB)dNzApc55RCJG_}N zQH=YA+=A8W+GR%&YMxg!WUlTht@drb)ly@XZvGUPouYJGOQuU=_PyG_hnMS7gJ&<5 zm0G9%yaazj0==R4m(9n(5Ue+2k@Y@w6uwl9MXMm}T%#0N!85j6amO3-wdsowN`*Yt z`m1O!#kE?plVS;u&)=EYWX z)mAZR^9g=7r2z$>;gP+?xbb3P>t(RY>dCcx`G-fJm{A+n7m}u0^^*lxC34E z89g1I80ccVVdmts85B|7IIP^7_OhXANN*_Iu)iL>(fq83_+S#I*S0>l;V+|l9Ku7G z7~n&HVF!h)!TR-+7o#nCo*Y+ zZ+*I52UVQ9jUBZW$a^!LoOCQ^?1g4K&r&~pnoB(JNR$<)%`gUzS>|rTPTZ!$(tssi zG_o}lTiRsUru2zbtOqo{7y2?`nxXYYC{T-3$B4qpFW=E-XI^{UqYb*M5%$JQI#9## znfd~xEmSnkh~_mdTDpWl@kBL|7_TLRTXIxH3Adwao{xIfXp-ccR?HOH-W4Ho#`*Yt z3;yy!_z)|NGyWKewX)cQMCe3L;xQFC%%BrlKA}!|h>MrQ-?2RH7t`;;PF99T6q;(q zB%P^VsZob_znH(r6&!4eon3BG=aTY992o}Z-ncpG9(CeP(@kNw-Td*gO;>VL^=5x< zs2aV$l46Y@Ov>Z8RFb~f*xZyEXsMN5#@{qbQmJ#ywldMvkUBjzA`{w6olbMxct-BV znxkDP^rWuTlI?kTybKKGi*W5;d*|ZbCTlc{Nc#}sZ5s14h&{dzRB%6lRzJ05KSn1` z@?%HXIapOSx#M*Mw%+ZF)Ov29X37SMy)tQUyt2bDnbp~Qttoye%kYISQ*Bxlr23xh z(XD?n69Q_74t{V+F(4RN}(UbNoMpFhJVhN@^YR{On83uv5`;IHby zYVrRm?p&9nNRoV?Ut3R+!w$Q!L#esU^z>mQY(#TuZG*s&`erhWElDL&=sHy;0o&c* z_8ImGreC37fEPQzzq?0dWL8RunLT#O3{;gF;c@eD_wZX7AM2EdPDpE_rz;U?3B6;g zbiIt8roJ?qp7Ln}GnLEWOk_)ny((giqEzLj5HYy=W)`a@?Ten*S5GUKEzOWq=TwlLBI6mG#1zv;#=AtGN z1tpH!<)cKpO)XQ-2Th%Bg+8|41Dkfi3|J4kGyb5T3|A7vG(We%5TQ7!quI)9^KD!x zjvL{# zTSALAR7_w|tR>aiu5W|!_a=7rybbZ8fafPP=d8u!Kw(hD$TPajvJ?JR+d^pK)~!I& z&ZtFY+%oTeVm z*G|^LwKTo{;QsygZ_Tg{c~bF;)6%XN)Qhw6bnKa=^5cykA;vpRv3?DC*e^yxG6!dl z3#_QdkRL{Z9Wg&o(JDHZ-#VwZ8YbZ97m3~`*vZwYNjoSKBP+B;%jJ5_aAeE(?2JZ@ zKB1`T=YiMv#a_Ec(tJ2FUFfl}M~Z#6B%&0|4qj_%rrwO$h!V zXJ8}uYa*4HeqLYDR25QDsf=3LSi5zLn%Q+xWck+Z))UQ7OhI(MDQzJTg$lq0OSGaT zNIP7l-DXs;0q{4BePa+qHE=f-ljDRP-<^G=nkGx-AEVu>_)bXFyYhF^;U;uXMH@1d zwX~+JV3tC9OC_M*sghhuTR+rVeeL%3o`-ij54#-*a@ZbOu@iqlbTM1eohg`dSq$z-d`HRamKd(5j(+6Hp(GST*ptzJ$d1x_{ zI-V&Xn) zSCNu;1~>maxOJ<(b?5G%zWBq<|8wUi1qb93gol*n{y4aGb8z#^`qrQC-um(nH>tUx zu!_M3Zdy~eyE2z-pe?~Vj>9coAwZ&DI+>mP_2B(fuL-|BU7U{YQO)l+9Bhn+IFziv zm3!K2GB=(5^$<@Gb8@?nkN#pTfm6Wp z>1=oKWm8VwLc23~7#VNx)?X^+Y_+hkZed^}{F5dhezhbB3%!pwuTEbo9(7^inIE4y zw-Th`i!xXJ;xZYQd+l%DAMJhkyAl|h@80bAU?0qqDE+ds985!t96tE)_oF?0i0sib zyVghd^B%RH0C8QeiGsY2N1nB?$|-bmx-VvBg}ub?hu?CWuTRfTiRdhD$)lMU!yPsb zhhtWZ5DQd`3-z;;!9J3M|5zUxOfsc#zz+9^!SD=WW5<#?sKPfoPaN+-X2_L=@1q8a z-3c#=xp&sUqwxV;S>BU96}m6I#)sby-k{dQ+6GtJLugPNyJS_NTjRZ<3dxSB50YdE zBr=~YSjHQ%C6a!#iHKeG0iAsK6;WOnCxzR`n54(AKm5uFIG#agWQ!KuCDel?XJD!B z2{%?I`?M-;qh2=QunzrnHr=0$F@X=ym@RL~y77%RIb;EY;p_2?les2zYX}ygxzJ4J zj@e9C3*Q!yc1H)(55MhOvE0piT(n?l`@rm=(|wVjU9yq7X1%_6q=e`nD@4dflL1_= zF0<5BUZu@AyMP0j9bI!a-A{MYF|S%Rn*$A!4MB`5=`IXQv4lvBZ3+v09=a0}l7LmU znFK+!Z+QFl=pFmhbNlyAyp~?W`Wj89yUc$04R*l-95L@lD6*yF^gT!Xk1hhROTGR5 zbydADJt!Kc{i%wk743AoIrlSXUhc^`3!umaGkvWPXn%=%=aYRzF!Z>Bantwglw5A1%ipzBUWEHJ18 zuUr%70a4Zw&WM;pTFh2fc8%@YHW`cekl6nBw&Dy%9$$&Z$GY4=xd<_V5JSMqwS{;H zPplTRmfRS$Uz%0aGPE(JQz;lqH1?6gp8z*a!^he`kBkWwF6cNTPvk*LKEK1bQ(@yg z3Rx|Lzs9(HGuEa%WE+r+f9fABfocY|^@Y z;i)!5=iwu9ySn}l>{lf9i_hVQ-`k~QFMlEl{Lh1}(Jw?noowrFGpPaIWdBEpOrP-^M}SH>b?!8=wAKMQu!cfv2|gMS=1V*5~+&< zAsJhDRw!eCTdkoh5v%74em!DNM zEP=~DU?Lw$&(;I(DB0N|yRMttya@k;Y3vKp9u`gS_K~QRK*t{Ws=!%CM=&0WI~3gE zVP5r7bT)5C|fV_U(}%*pYJ~W{osvK?CdfX zMcIfFZ}n2g1w$Ps2F|Ncaw3Fq0)wwm`FM}9kKy8axs{}wk(fFSS>!oURR?y#FC95R z!!y~Rz2Cc6KZ1p!y+o;{X}`iN6(ktf>)F-y1BvHMTS)0%i7a7YvL>49JBU0X!rRm< zzPJRygmW9u=;-xm#+*f)*wL)bz3uI$z4rs|`lV{|`A+g47m8zNRU}T$N|B0nDweMY*j;cw+2Rwi5AF=xsw<%yYs zP-$<6hjBs|uO$&B(1pw6r8z)k)U!k3%AMOW(`;8|=%%%N%^9h&XF?8ypr(*nhRXib zMh&R0H?6am5gzE*+sW|60od(@Fq%uVh?ogoKH!=`ww`UI=z(KB=X>Of{ZJi_pq;K1 z>`tgp!b~*rHXNa$)J9>AGr`6Z z-+Yn*B!(B`>tTbbZcNQnsy4~(3i<-Fqsc*7%Wnr#`0opcK>_PWDju-bfd$)Y@j2^A zPd7?#9M!*Vp+)+!{^9S)d`b!_)eI43kcfSzR9OQZE0kwm;)lOCe{QebUsdv2qAwp^ zn&QgM)FJ9E=)HD*SD_b+@$Toc<(F?~C&>M9xxXTW1{3stOHMTR&LhXneR{u- zNHoBEu=TkNi0FgvE{IucQU7Mv*dD#~B>)@(peqSjXPo#+_=4fP5Rphff#sXQ*G>8D z!|^)-SbMuKpcv2`V{{sEjrc+Z0Kq0<12w8q=0PID0r&P*)Q4Bt-8u7jJKP_c9t#0D zI7r$`x+OLta48P-BXE`nqP_oWCNptq$KZYhMi@VlQjD(Ntgrn$%IV?3zhCE9tw*iYo!ws?xWXDex8>#Gxrpu_nT^vYJ+IfW&hSAlEh(N0O`0c< zmI77wM#S=zuY73dM)IwDJ&gBIaP^)%2m9n|6uO06* z+0qgm4By~oh(|2eK2C#7FvSmu%m(pvSqe!SLf>4+#}6j#r{>l9s_2njG5kG%-YQ2} z>$Ab8m&zimySIoUf?=Z`KdQgHi3GWgz5w&l;A?ecbkI5TC(;CwdHsfoJW8-5bYSWg8?#gIBvSPBX zeK_dov)E;Kz>Hzdm<~bV`mSOA4ZcwQBqjss1olKuJTAW3Sys{Zl zk#uH?sgo$6Wq3i~{PK_9-fax=;@6#iuE9?|_rqk%KNF269 zqVq*<^yhY-P@neb6QU!)dNp}%VDKwn&S{ntg)3>ew()J!93sw3BVq(YGZstQg_t3U z-EPu9vfXm{#nY)t55 zr}3h?oj1s@b%5VP4~VC1Tp@G2V;Z<|P<7yO>VPxQE|ABfU2PqTRpmNZP1mWyB^{Xs z%xLh4XosUN9Gi^uyK^?$_nC)=Tm8O?uTy>NkM}o?4gRKK0cWU=NI1b~VtY8*=|kFt z`38t{-DuE-CLli)Kor5;x%IpSL}yloFXEg*hBmB{E%i0P{7yAwFbmwSmrVL{eUrwT zup|~5dW{Jar=m9~_oArm>*|&rJrwu7bd;|ZE2hgSHeL>TeOLD>;T8h*cVNOosTB{> zbngxA9<76V32CtDj{rV;&vrf_u@&wEhv*y7_GT*={7_~(tCT>Ix}MwN>F>^5zYG+8 zBG_FkC0j;@h2ONYGda~)-2@L;14xA&H|9V(2eFr~onwd{06(E=u)IbN<7XZGbS1a{ z{H0!!gFv)ZOyB(1g6eu5Z>iO|b-8H~8ji~vdF`84aSHqA+r-oBMy*7_qJpUdi=D=U z5$T+(PBdLeFT5)zZv3?T^B;a5{8B9A{P>F}AO0JrIINXXSUpfr>=55(AajV3*1I~)M&whO-@BGW60t9rbV#Ffr9DrFOKTP49|c4PM#M^7(5$& zZZOF8dx+9L?H}i1W)^R4oS5t|FxYe>Nw_KDGH4%LthKbb_k|drB#jn4*R8Y#p)9== z+o&UOpx&3n;vgHjgQ<}CLeF7sNx0e@9^PACI(mO^^F|)b%liI%ya)izHguN``d z9)=SG<~&U7w-{)>l!vP>KCtWu;^!cMvveD@m6{)Dq)RYJGBLSP&Bm&EEt;_dO2Om_ zr-ETvjWp0H%04XOI4sUF9X$0+sXC0qHHEZ03qH6$aIdEpFvR`s(fS?hPxD^`j9CT} zT(Ad_4|e@d2517MPf2&EYkp)Yh8MDeS=43QYYnsz#yXHBtaWGVLQp0%G=f6QO>dE`EV<{Mo?C~2s`d*d@vunWiO1;Z-iiCour3|jfY+O zw;j_q%_&uuJDP`oT&vQ7bSbq;qXFsEj?sRy3S{sRy+uAjTvl;0uN;7{CKVLDO#Cae zQ-3+99nf9ne*6aAde*Xi{=S5I0OOU+8~sXxHnbl7z`uT)cA%rZ=o}~Q%Id=%M&rt3yof z{|*^*!}dQ<#~jZ8Q$hw+Bn z`=F?b^~7{a$+GDcqbj$~K9}9>K#d8yZ;l_N?TK(9w zk<6>*4N~EO*>)zen4(4yF)jLI8xan6ZDqWp>$T%B4UiS%dQIN5quD9ysG3-{`|B=5 zgaeceCK{rAZ6r%}pe5`tN9XdS`?-&f$R>9*v}@NlY;2w=uLRYDXQ{GJc!Y#BoJ1X( z2%7l8cDY`GJPn_i`ZL zkId#&x{)qjT9blkPF_PHCo{BNN&mIL&0E}jky=!?Vg|QV+O1s6BxB@)pS5BPuJlaL zr3pSHGRcu_1cEyPX(bK?r?hk}KjluF)d1#jRJZAR?FCf%jVcH2S?+Wp7BkpyNn&+c z4>gMF2+&gjD);6f54ZE0=-uW_UKd5)Om^iBst8--Lp1H3{(RSK#h}(bFv__K^)s6A8s(y??tUZ@MzRI`$u8`?Q%*1RoCYi+*g8M_^(`fY;_}T)J1i6 z3CB4AQ}=eJ)U@nJox0!X+V1m)>BBa6Ah?Hogw(}v%vS30zZSSq|5ffl1TE$>u)g}` zSTV=l797$8Tu-`hyv_W-`ywd<>$3>E{%m8s^O*%{Ek>-kLa;ni!I8TkBwhLzb<;j^ z63_|lwyQXj@$``e*qR@ff5kg0`ARk4`hnK=v6b+i7Cu%;6peG0X5_J%mKC=Zb{w0s z)o=vE?I9-Fyy7g$#_#}@gdEyL_pXemucouZ*_E^qzOol}OuY*ixr+;byik+?$?=3e zr%hi~iX0#ADy*chn3s8Kk$ipcZ9=WzrWbt5eRNi=s!4vT9RRrzy|Sp)X)!7X3?>i~ z!#%nY{eD8c^zK;4P&ajH9oC>mUynUA021T8!ywu-4<0j*!CrsCJ{apB;rQ{or(}iT zV=J#Od{RHwkW(tUXcV~SmXycpF^IwD4f+v>+Ro&~`gqBp!8v$XE#wa+D?;ejKZnqD zfaEgv#WA`Y6Svyd`o?He&GmMOo&Pl9OKp1ofmAjkC-cwCg6hQ7xsxcuCqC1-m=PCh z$p9j(IYt=M(^u9@SPH(>MRwS~SRlHB*og5odK;4}-^U&9HRLMTJfu!}6(NUBDw3!T zX-?$E$+60FovOZ*qI0&CqjZoIS4xugLDkYT9hHcQCA5Ld1?1X>2Qqi9f3xx9V=MRJ zzxUuYpM54ui>PHWte=HXu!MGCt&fEc9Vgbh`FJP5JyKp2+pQ_UH!t(yf6lm{K5w<$ zvE!Bv!@3!$JUv01u+Qxuguihhs!)%GnBqvz(T}|@2Ihx!Zmedt9D&z8iaJ(>t2-9W z!8n4e8-Lu~QSYQ{?&DmMycKnB*UH$jUDyhp*;0s(_sJqBR@Ya2ic2^woJqqYi&u8o zAz6nU@H%wEp5^~UP(OF-stM?n?NTJF>5?2Iy9|IYkKRvta#8hjE0tg*X*iE~ z>ap+I$9p;2{k*Ofu)QM&(_rx}f$BgCve#<9{1LQWF5bn&`-xupYmZzuI!AmfA*J1) zg`M`x@)tYI+r32DEZv^p1>ahmgCFkPPUnAaw2jlmg!=^XjOKJXbv=@n&&s~~;*VB* zQ0s1;6DhPN^_|=9^4ec1YA}|v0qQgjY#RmG9PFj8sBA7l=9L-5#`N^ok+r56<%SVu zEkZfs`~x-G^g|ezS8>jk@kHcIE}dAi5QAPj_02MBkure3Qov2&({rQ zpX`fwgSnpuQCHwJpG!b~-kK%cz#+^dt}s`kfmCp{hpnQLH^lYE2dJM>aGQ@Lce5#rlKCfC zX#eKcMU`yfb)j2Ri7V%ahxojS#cz&Z8a3YBZUI3vC0#Q*S-BJy@sLuVGE)kIXR>UO zc3U;^35807THbk17{L*(>~X8?)<_z#nhRM@h(K2cBkWh)fPQFYxn3=Q2Hs!|3+S8X z`r4aa7!<^X04yKRX{$EJC1bT_bfH7xB>;n{kKRj{3blg2*)EDzJ8J>hnu~T)A6pLP z1D(^Q7)$Hbf@fY;7C^u)Xq0dLlIla!hXz>u;OIa#5LF!CNgPbAeRXlUnMnVn!zFBGorFwF7eP`;^+fw?@~wDAZ$* z9c_=^UmIS}y=qNH()8N;#+GR7dWv@6Z5CKFP$(d2ku%)FOlb?Jdpjj#3`}~`G5nf- zf;BFKjgEvL^Up+x6kRK__}vGc6b=hx?ObeHC>n zN+O=x)j92_h|?3lQpaH!2#rm_Xi_Q_5EOk(wCcy3!jQOgJb6W?L`rAvn1PN%L+YPt z`$XxI)toW55t+U~Y{oU04~J1?p_;4ZNbIvNBfrS~JuQosH(>5GG+7?Vq^asrg( z8T^eG3Av@9j?sIf!=cy^Nx6De49IlU$mJjYzHJHr7Am(#x?$HArIz4xxiHM7@y(0Mmr(jaTgr)-Q)pis3QjixE;mJNQ**aG~Vq5 zXyFi15Zw$!S0g1Tr$C8()X{tWu}*1^Zj}i`KL$%)hw1j32AIK;lT*sSCwCsh7oPd3 zA}gT{t8l3us6hv0K+4zm@)l?Q{Py| zujVD-&iUB%wYzAxrQ3tjM=7rgWN_VtZD!~Ywlm%5#KH~7&Yms9oS33`4<*)rTz`Sd zv`NWA^$i%NN7hF6BomZ!1HlPJ(Zr8~SaJ|Eayj>aXaR<0CM8;TzQWHQx0T{a_kv0FmEac;!ql~bv?d&iOB!^MXZ9|xN2r5W4 zp6>5{j6ywZKH1wxe%z8_b8w;$wGnD^jJ!tpIzj05EwY!^otA?U^>VVLUKgpRUa$gE z%JjR#&o3yzmE@od_&1;MG$vR2`np0=BtngkiqUCQbCLcfgdPB=vkrg_df+_7+&Xhq zmJJNyYFe*7c{&JY6$qN*VvM0G%zQLiUSb<48Sp5tMh^8TUS%TUr8NR0t}?Hr^(p__ zidfksJo-Fj6t)}Re0k4bSEohu3w!>GdX0}QY2S`SqG3jnJGI}K zcD}4&_}UU@TdZi(9(WMV+P6;z=)qvpoaot*@>D%CCZB?hyTdZYF6E_Ij7B1yt)Vl2 zM3kmGoTd_SIli%T<6R~#KA<>SNn*ol;+Of3xxNx!J*~gIQQx{5gyz;4f_83zNJmO> za(1jL!gbDz=<1f2!X?nL^+LiSDa-DQfwn_lZ>-0mNC8wAyNM%SImEbRh3Sm4&wr2T$p zzGsK$Iq|u!BNXP`qXa*_VCCe`m!0^+hp)b-jmUxbdh+J0lds+dkgiXoCv zA0Z|4wx6LOnn7Zl24^%s^lnnMa1dd6#??aW(p)oSy|z!IlrSj!ehJ{ zwKJ61A^x&8S%ZET)-;-OPZh#FVy4Z$X=s$`7~RZ8<6)E81`~~fF1i?=7O)AT)F|Lh zppoD9NJxQSl2NboMJn#JShbhXO$lzDaMh0h^wZ~JyRN9zi8aF&3#kQL_|%M{YijGr z5_mi}Dne;@2otpm3&ZR~QEL#3b9A zwDYjn;wT&lTbm0F?X%%t&2A*JRZ9a)IyAS@91c^i8BX99B%HbonAGcBHS%V-|Aj^X zCrMoP{>r*HO}#tdQ&2g?aM}F5=AkUq>(!5Zjgd3 zyAFtw61%SMbJhCAkhz6W zZz7hjlUCM>eoO%AT?CFR-DGTeZF@T~j{&*7<3iHE6qL2M<^PX^?l#>!(C$pP=NJdy z%MR3?w@*%ylN)@ENpoyBflaHcOSL`u<$PH$YB}Ll^gk%-husj=mi({wLxQSPkUv$8 z;&eM#B>`{Octjg%hl)rwr_tPq?vWqp9WC&YOgaJ)xA7r3<{TS1NyX=`Dz-$aBG{w@ zb8r92wjIe*h<=>n{ayx)gKTu)k7|7NX#arQqRh;VylDH>6XazmC2ZqDQqZ~F#MNH! z5ASU*FP%XUc1HKun-3EGM8ov-V~~`1H<4q9Wn;GgnrpW%11WH;H?P3ADFrBJUo=m$ zw4>-!-gqe!l`dY3c|c!C6}5Ld+=CXzfKqpSHQj5kGbq?IhN84sQe1MAx#gxR#l$2j z(V$*~wp|hR#ID0l@{+?#&CmZ;t0~4M>E#L>@F**)nXKL0snjEHHR%)UndfeW>*8H52j8uyL&b0)7^K`niT8SuV>S-DoSk}6 zSF+$n@L45GIsf!ueRXqwe^Hg_ZDJoM-(dy_)Kqr`X*0l$N;ZaUPIfn)ITh zBfTGqH{h=x##UKXbu-N>X@&4pH1rx?0Sn$UAeEQW`&9`E7cBHg&zhUea=c zdNktJGb{h(J>JbbBjs@dv~PImhU+@9Eeqyzd4z%f5h!}s9zH@puUtz>l$DVfagB@W zOj%(!8d<@oEG|Q_q+I^0sf1F?jK#WV$qIj$F8Z`zocM;!EprIVh-JHLC@agg&Bd?G zZ+LfTPLd(ss_S%XrQAWSJU_;oWteu0UcmGtNS$UhLy378Rh@fhZb02wt)2#TW1?Xn z!^pieUcp4bDCXbd=HsZBUuhw2Sg*-Aiyp(hpO}%dy^@X@Mn$WXu>e;``>@n_0)kqn z8{t%L>7a!ilH7;%J}}4Up^fr}jgBZC_Ng}_9B z;0D9rYWXQt46*e*HkwjJ_yqXd;<3mPWXneig$v@&Y!2&00!LX4+Op&zad4M6H_J zhuJ4Oyr)=uCuS~K_q>pZ-19gXP@Wzz}s!~(5B8W);jO)NhYDMSG{81tt4n$iK|yaGTuASKH}we)N~ zc@pg7qIh+u(uGX`SoBCICO7f+d)1N)Uc42Lw_PGZh8OwRl;o^{6{ei`A-&4N-@DLx-+z`)oE4mYc=1L&0XNvQyvG2JtWg*K*tm$>=ObIxb z&}7(z;1jz$-a94jj&6hkWVMol~Zu zT;6))*=$bAru~`sZ|?Ed`Re%OJqM@PGu`!myM8nojnKdE&dAYA?v-QIDmMHZsCc%S zu60F3l*~@^!X~!oxc#IX0`=G?FVZc$Ci!fBEG_`CJ@t= z#&tL&7thlP*2+Iz`8-M=b$F&+>2j_15z^_*u$#qHEm1Be` zhGZ8P0juw2?2&Wc=1YY19+lBCobVhPU1o%UdfPE8lIDPo;Y{6@AX{mia@jU5XF7HL z(03;LN&<#RHtvPC7u;dQcW6U&*l|#2I~Pk__G2TXki)6%N&58ghlgL`#gr3$Nu0c1 z*%kAWV-V!zR)H_PHb;3Cq8JH|RbT|t-NPTAKYOv^k#iHfBpwRuxPvo^oGp;&>{w~| z)IQFp6H685PAynS5tHp340Rgb6x(ojci4YT8I%qrMY2p>^jXq5_bkv+W=F1$#|r#J3OESgM+l$uLbV34C3y8sIC$#$+{tR42& zsd75IvCyr8TX*ZI<_lu3C~-geMJ4t}J8zD0wtJ+#+7KZ6xod~~be7ObR9cA$7nXnC zc~!!X)={LWZ!2|CMb?tKgXwF6kx^oU0_F$ERB{~4^rK3fyL#MQD3JG4e#mOuRhQH@ z>{xv;2<@{%k}H1tnM&WJA)dtBYW3m6hlN?!cIA}tV!#lcVsD#gI;i@*2v_#}6i@7) z6_ZE}iW<(if z*S9~cv4me9>gMPw-Rsm8>I2t+=~mAXq;bqQX{tPA8uzSL{iF?TgqEyY00as)^KG`- zgl?^(0h(aZf$-h+gecj{W%GSIcK4lb*=K&_cBxWEc_3Np7;9w`^$GSXSZO;xTvZAgkc5C;TH&5zoLRW&ajH>eFaeZxXg64y- zq*w5Ri0V8O_!%M<=cTRDP#1IBXubeHirOdjwYftP8vl?tHHVrm{=Tao zpq}>oF4*hS$b^nar~?-IMqS~?^5=ao)j0vGv)6a+Qs>T#)1$su#K|AqjZRVLDQ6G@ z;p}Snqy;dHs$8Wh8ZL*yR-}*?<^k#|5BwDI_k1ZjQ*b8D>m*yC6v^1G{07cSl67my zYtPm=2EfIM!mHLcUOjsL;^AY~DQ)-(*$WhhTf9Vc>3{v?`{(NlA!9Ayo>(C5D_!B? zN&y3)5*sTU-_n4Jm=e2N=J|^RZ6M!#q=idB?t^G5 z1yDFG(IHHPgp%gu;X;^j-g0$NAZgN#c1kvc ziE3-asnRf>GbWx!Q3A!wv5^vO2<j3G8bv%AS>Uh!W2uWFs2$``qmYFwh7NkZc)JT6mCaN|T8CL20L@$@H_169DfPM+_u4nPqizVnM&| z5|Ya0dk@|Fo@=+kkdr=v}8p2 z2w{lQ`PqGK#*W~XpptMC)8IQt6hZ=E4@-V8BzAEZr~7fN`?@mk^U+G@<* zCr9Kwa7_-?b#e&~Kiq*@$VpAw4dwl9zZ_NfT@qmBLbwt6X+O=it2uGNQKRRvZN3-e zTIE(&6L45G1^$ZsT<<;QG(?OMNbzDF={pbgmRzV_3{N=Bvx;WN2;0>t z0sYd^)kS|m3e93)u3a;8HaJ!tec%=fyV>_*krmQ^epA}MB;bXqH6tAifi3NdWbo|2wKE(H);#5YqfH|5$EZ=orVyI znXJe1%N3JQGImp03Psq6u+&6=gyLkP)%i~@JB$!hS4iOVv=>3&!=7`}Gy-PYf zTZi*rptZ{Uml*$moboHU9$*WG^ai#nG%H;_Sl$P8QQ8SsScI8h(6YEV)i~kS`@KEn zW7Cg1eF%b=v+gWNcg|W06A)6RBi;d&kwIH7q1doV?UUFo1kO5-5;PXgsKM@JoPKN4 z{({cNVB*0k(5X!CXQ2Yp-5N&btdqe?B?Jd1n*?NBWgG7V?`8 zlLz7b&2nVd3!-jZ$7Ae#p|YYTYh9x7vu{59_u7NI(ugS{U)dM3Zkk8BAI|Mv18pg- zGB_x;i|1Bv3M;p$M;CN%j*{F{C{$Vs8L%?9Rst|b0iPk?&)T_6rer2ta_!)vt{uru zTgnouldLTaCl8 z!6?8!G$HwTij#uCrY)J(D;onhsqqxCE}lxW+V`B?n)8o$8cAQODnxCj=;oJ*+o6&9 z!7LNn8b!mUu$q!P#D^8 zLL|%4*d5+x3=atID5Va)Bx%+K1!Hg*7qZdSo2I4y2s|rF2fXY>O=MD;sVA8TAYy69h%29s;gWK*MdNkJ;+aa( zPP=VWw6VX-Fc{Y_!BX+?%u!{sK$zDKQj+ICg}#_vdS&fO(p#BmqnIGhYO}>ksSoY0 zknlcaGm==<6$GO<(B~r&_F2u5<;k;^2at5j?68Q%$X#6s-ObwEw!MaZb#>>))tyvQ zv*%kfs@^4CG^1s{L~)Gt$OCa#@3{H&y}2qa^?s@235v1l-Vvb!pUva+UdC# z+*?F0w09W5v$^Hp5T=Hc_y6W6JD04Qrl-112;)5(d}b@T_lRR5C$cKwGnRV}#Z#w@ z2%2U!Vj{z_k#FxRt$+z`k}Ppr(2+)I?yaXR96o$gvjSatmjmo}t}IqpPA^+;LTRO2 zguNkAO-7aO^0gezl{=o8h}V1FU`)!H`j$|mYNkLGQhh%*m3i?(t9hfYAid_I342)k z;!mc)HUA0oq>#FnxL!T=P-e5{*rT*+f}LPAz>#s-ove;O zrlRugn_hCPm~MN|@}neuW$%on4lF>jx@t_Kq4+v}a$MnjY*L$~F7nFZH;a5j5Y#If z5MQAsdo?_L2L`Lj?DuGtqg4nY?A$`;px<_}3rVMCB)80N^*+mHbAjR%t3jx&O}MB` zhwX{3%QZ$Tfxj$kD*Xyp4ah{O&9n(k<{iz-%H$dk`<3Cy(P&Sqo>`UmZ7FH8rPI`E z5&n{OIIb^53)Iv@`sC(|;MYd>Y^E~YFdbux0aE)FePXL|FE-9duh14e`|8z;?^Y~h z4mJ_(FM83m6cY$4&x4A0df`OibjBqxNjjK=F-NM~9UC4^jv17PJIpucqGZdF6Yq#T zVjQE#cw0yl!Gc1x$YFNM%>eU&!rz$T-xUS)vMh7hjpi$Wy8;{9k=&xMK?=!Xf}BuD zsAxQdud!`3%-U?XOL{z9eO6C)YZOb5*?{AUiv`?G47RLcm4{_DW3L3W1i z5CK0QR9wq7oqc|G%w~supm*IN|2!M7CWrcI~~64OQOG6 z4@B~^HaKY|43PUl`hhNO)M@!XLES*NPMas7Kh(g zk(5%HW~o5-a6V83f;7Vsb5Y}zNCXc^V}&6|bJdwMouJ%L2pWc8)P7OQBYsj_Hbvv) zcgjX60YdsM?buwe!$MR*ZHh`XVm~<<&XFRn35yB{Qad&$OcFYmE_itZfWbzsEJb@% z6Bj{HJ%~!|Nhv_K$CLe2$cJ&uyjtwPq`Q~?Px<)^|FCkY$S65_C9E`=F<>hY9H!A$ zCOa6dWpB5ewdB%k7VcFuC$S_Vfxe|2)RX~H%K~?!lTr0R{vDbZoYwnRCly1?z3l8o zl@Q#}#{u1J363b)?APuHoNYWrIWSi`BQCf|j?F;b3vkcNT@w4eu-{eaO@q;wm_96^ zecO@9rC74wy%juz1$T2k#rI+wnwp*2%Hw}KLF*aN(Hdj{NLGg&b^*`DmzyB$M1(s( z10h>Qkdsbl6&nPC#imDMG*x?|PiSqectA4eGQJy^e>@;Q1q+By_Wo~JB6ynbD zUivFiC~2`ue1u|R+8*)NgWfA-F3s6y{TLvRpK1yzV{O^ zyb0slt#EQ|MCdA$~KvnA@Q>!@HJD~U^%KU}X~ z*`qN?(tL|IqN*5{jw(-=Fj#$1&xs5EDlt%jVTMc`gRFEou-@7v9_s+g7GY;3sdrFc z-LCR;4(9JqnDNoO@|n}15vj!VVtnKo^G|1kbZ#~A`xudl^Q#yKWz-w-1m%|vuWqUI zB#j^vMv__S3#61-U3>oR29-j}j~zxY%i}>D0lk>}R-t@|fh1q}4!PdRrNMhLbzy8V zF%tPDNCRXoC3Lpac}i1c2%O7=6I(7?)@SQB!1y8IDAAoX%fy1FN3lU+n5f~a>_0R$ z@v_3NU0-B(Re_K!T^3&4nl>Sw@#yH_Fx_#V^xBobN~obx$$q4BL&f3lyio}E$-K@SJu~hAM1c#S88dUQe)C%^E8|%n+HbI(tc+q@Y;`Mr>i4Qk+t;HepE+3j_H@C%nI9X zbOxlBSYm2O6+y(K6`^wH1!aDx%DizWI?owk+6GZQg_+^U|BxWb4+Oa>R#G|pWo*NY zf&i)A!{KGRAL6*ruOt}eR_uix}7`Ul!=#8$SRTQ7? zUVbHWOd6gMhAh*`AA4RyVGVGS$ysG9-4w~L=4kI+=xDr6x5(aHK@AE3scY z-I%)q14n^|nI|b88$ zSVW&1?F>Vc?H1-T1=eJ7uAo3P8u2(y!}QVT7iu2g3~Z7nv`${YDYg57`V+cTO-{Di z;C33QVw1Scl76I)nJiUvRU{ZHic$H4vYkb5*{)n*VeGV~(hV_*N`@jFU|a8cAvRUh z>lKe1H=@d9>XyUkiCd?qd5t>HqtVXO=zn@Dnb&p0$cc)DNQ5JogLHBu*er>iX?fE; zTs7kfMOL1ms$yJp*iRl`WI1CBmXFEK+R_ z_0{Z*4d5a~i$H;WMxi=t9H(imCmNLp)}W&C2$bB-yY?8|I^jZD)M887 z;pj3|SinWfYkr&J=@by~nioyezguR}>Obf|&EzF&EPX;*0}1;^kT7Yp13rYhJX`5? zclMj^o&&IQ(}!?Z=gRc+{{7~c?+NA9ba^0^(YoL}hBqV5uj%2&kGdW;{pz#HG-kD2 zjGV`K_rRK)4h(e@x7m^`qqS7N38)JY8fp175pNrhTyxy|$7y6_wga0*d@TrBfuTjI z+uiWEPtQeS1q!!e4V6`qA7Yb?RlKofDfZw1vt&%&$v$<;|pT3 zLF^6pgM;}f=?%h+>??>V$^9`&Qy}22TODPcp55*|Yeq^(VLNU0o}!WlN#Ed(yHcJb zX_^`?6}IC@>=|v!^xR4jttj85Lt)=s1CmANZWgHKp2q%6+tP%k{A0Ac7;)*XNAbgX zk%iqRoKD4>-E6Cj62UsEgN_YPfpaeIrIL{8R2eJ&@mZ%`dsbh&eZBwro$Kw|IXy>$ z8RW4uS_^}7$ue`tRKv(@`caZzq|NH>aIBl6rxh=b9~D|w0Svvn|R8VXTJ;SSO=yQ{AZ4mtz6w?oE_ xag;DU0XieY8{xPsz;1Z-gLX?H`f!qsxW=@HkV@SrF3W+IfQfykK<82Qe*wI?d%FMt delta 38452 zcmb`w2Y6J)`oO(ICv*rsz#$M4AR7`op@u3FLJ37h#7(jZA)8Iu-5`j#_J)GG;;{?% zt{Cj)+V8bvz4n5MioM($yMDiSW_Gin_ul{aJ>Pkrli&0+^Ugbc7ViC5n`^Ia6Me6H zs~sMm<6C+>X|N-IZfxc8{5nBgJ)WJ1dOWFc7wiM?h6CY?FdcpcN5XCkJf5C#D(nV} z;puHW9zPt0{mUgD&qSEI)Z^&~7s3u6Pt>y(gCrP%4vfLxaF4Y=XYF6YOx#-+n~Zp2 zXY6xfSGXJwfaNd?o?>|`oQ(Z-I39Li=JCvd^I=cE@7aza1&3>4e|QI+1fPT1u+4Ih zCkKv!Jzxn;g&UxhXe%57pRoKCW?=8Q!boN`lz2zM;V=aI!pmSf-}l^&VKjUb=E9CE z&4;H#Dakr03C67ZeQ+f9kD-*j`(Yl>1ULjrI;-FqxD85GJO<~(S0T0K8F;wKcqNQV zNw2~%6TSmQG=q-tcqqKb4@DyP!&&fkC<*slWfCZYld+!;^Wo#L6Z{>Ll&9m7WFD47 zRKfES>2UDkL! z<6t2aiJWBZ_e1&4H&8M#^k^f&DMv?5N!H>ZlGp_&!nZ9`eJ0>SC{?q`@+K&vejAEX zb}ljT#=~^%HBiEz4<#dy!$aUNP^w^dsrlaaC#aJ}U*FcbS07=+hCDOqZj$Fmp~Li!lb@scyx`HyhA+Js)C_1ln#h9Z@b6Nlb?Q;7XVQLof$k1SS06VG8^P zO1NKOTi9#6QNn>x!WBSCZyl6$PJ>c)x4>uz43A@wgkFS_z+2D@_rbof>$#=}8v!Na zG?)&T!;x?!90IR_4*ZAp-*4IRJd=@8P`-B3~x_?csd+MfH0gP0U^Dn=QDUHoadU1oexFy55N)deJCGDxyW!llnj?Z$-qf42VMbZ z!RYfCmSE_1v1tXRP)ha?6dm{$if9L2VscyvXJ9`bO26182K&))0<3^D;gxVH z+y|x3$L%z_aR`(SY7HC!Plp}gwNNs!+wv(Wt?g|%B#Pl<3=$w^7u_iw1Y5$P)}94> zVfR8Q(QMcc7QsHS5=#7&U|;B3`)(*1c?vqP0S<<(uQIJI6GroKD8V2(y&MjLH$oB7 z(@?bkeJB}dcePQPK~N-83Om6|p-AFJI1D~$`4Jq5J>?qH#Se#41qId~yaxG8U7m)6 z)a4~m5_kos!JnZd(ED1`%*Mn1*ylkhX(<$)*a9W|b|@LY1xmQb;86G;l&WcYoyo{Z z*ctn*>yW>Qa48NV(kdugd>WJl?|>cQ^H3tZ1x1AWp=7+n^(NdPC=!}tSqw!Y>!3(z z3!DnK!qM<)C_3ik$J37rBZqvu1Z+gqWC^jRp)@JA>g z$h^@s-yY6ki$RgZ zbx;y|1WLR&p=A6AC{-}vHj|-3DB)K_(T!uEq`M7DmERD*%j9~=44oXMz z5|n@+!4sk+{GA%8K9yNg*1EQYBt?QYY~^I#8ghmueQ6#p$S8=eoPWPgK_@LO;!{0WMP zbM7%EodKmFg-{B%9;U;KqSoU9=-}{yrMlNdNQa{J^Pqg7%<^P79Q#$)|2Zg<*$=zI ziT9a)V?Gp#6vN)I8uo#wLMc%63TxN{r4FBgtzZ+J0)K%LVdDKp#7m%*%m=09VVDEA zSv~|OVE+P6heIDQ87PBNfa76pOU4@5N!owszZs=TgHocAP(-^NN)AtgQnwdDN#F+9 z5B}ZS_d%&!^@s_d3ZYgg%2(=f6QosN18a zuO1Gi?#IGRI3Esy>)|B01B&*)2&F%G56TByJ!aA!0HpxAa5`KB`|^Fyb_`OY8{tIw z1Uv@*1}}hhkDCNio-oQZ0Lq7k!@+POOovB6$@ms15@omHYvvN-~}^oFZBEe;_4Lll(1S?=?xC5rZYhWjMJM0c0f_!bz5Z$Zy--BC1d4L4hf+0{L6PA7P)htN>;XT5Qqmuw zq?7W7k-%Ws75gX{m54Jii1Hl)Q(+nG0ykOvnbv*D%{sT%o-v@`m-z zX6=VTk)$6=fwn`*z%@`LaSs$_eBmwRKNiCeIEc1pzipJ~5GV<5fDSwt_J_Nncq4*SI@S;*Eks;Y=tWu7JH^81{qFtr&_iTn8mbKidH9-ZKFm zC?A{%r6h}>Xz`J-6+8nwTSG)RT`vN<0rr zPFF$^)p1aAd@_`bZHHPCP)d4-^?wRV#$JY!&imH>H53W`3j4qgADDs+g%W?VW|Zb+ z9V(#I=@uv@*lz7Rp(J!CloCG*MRZR=asLp?hrfYRGS7!b>xV+g*jzXO7DFk(dMLVa zirD$S=L!r1;cm;lP+G&+5&*W`XGGZxN`eESX!l4c2``7D8)3^cpnTwRC?&rKO8R?Y zCj1&o{N5i?|2Y^6FbspWa1eB%BzzAPiM$3y2R^axze7nNt--{b3+02=P|`acO7ptg z+TVvFvCfUAM;s1C!i9~re-Yhk93-dJP(E}T6!*)alc$H-q2Z2O5}1{7_b1vB8$)_xk4h*!hG@Np<2 zZG@Sy)u%>M*_P8_f7}cHmM#XRw22r+m;cWONJQR-p#gu3Z9E<&SI2ks;`Ox{* z?1Zj^{jom;XTmov(|$80UjxPcN;nJdgHjd4ey9Dfz%cfAw%*`Yh$?t~fW6`GP%_l( z50imaa1!=&;W+pVlmf8&(_6A*;CO7O!71<|=!HK+DNvSDo*6I6Z-C3;SJr=a8{>ZpT!8ySa4KxyR_RITJa{%_4qLKB)}z>cR;E8r=WBc??LH`zkz*WuTDz0id-notO&M- zC6;TUwErM1hvz|&?2m8}%a3mA7!-n z6u1!kKj93Rk!wC!4jt@IKuM?(wuhbblpd7&K#|NuC`z>yj)ccR34b+|@XtYMrmw>k z_#KRjsD8sB0iDq%!TC@`UI|m-b|?|9fs)YemiIwvUXMdb_**Dd*=dZa^C8f|o)0BM ztKblLx^=&KjEd^IdJYH4$k$LZ(tWJb!{cNq?(^VGxDMvSTj5~%DU`lFWt`FzlD<&l z&$0|a`S1?tz(=7}!9FPQyN##)r(qZ~-h5~=l;JWAMT<{?(xtlA|8H;*_I=jgVuEQM z8Bjj#hobG_MD zQ2Oi-p=fQ!6w}ch1E*ns2}%aLPBjS^K;wN{?H@vEc3(kh1wTP4S=wx+7a}>ZCH67a zJ^@NIoC2kp9tH=(64(!(2t~&(gQE0%U{u=oOBkf%_!!EEI?OT5fijFPfivJXC<(s^ zrK;Y968|SCCF(raWMBdm2^2%=0b@|c`=_8t^i?Pl{%kJoU+SX!Jd>j-P;z=Wlsb!8 z_gk&|Gf;G(5z64>9AfHpArz%u52XsXTledr^o-9yX?6`z3itz*aQ)^-&4=^mn`T%9 zrRS@KBB~3ai2ODvA9w_c61@kdBWZD{kwhMpj%W##0vv7KH$y4$rBJG3Hbek0 zE2)H{%sZe+F#040Dam)%Vempzr$tb5Tna_0PJ$wdE1;C{4k#jg7K)_yS@)k|2kbqI z3ET z5&cRi;kH1L&_&jM6O<}=((-*M-}woO#M71{Icfh3Fi1&Dq3FVKP%?6^1b}y1K4ZDh z@@FWL>t1X!oCT$>XG4*I&)QFb(p)cxqB9S{32+~bO4r+OnW^)`pwwM8l!P}y$?%olEiQq})lLHloq;S(IBBl!kO ziCeEU&1nFX4ksH*gz->HI2TGYEQO-Qr$b42kG1cEMcBI>W(KLFptO?9p(x|yP^xC{ zVYGh-!)G{1i8~x_N<0{f4vd5H!6i^c8icRFbD&7ZcZ5l}4oVeX3bpcD`-@PN^HV4v z?6%5CY$TKn&yQjdtvm)w&dz}H!5vUOcqbHHcnM00zlTzny^l1U0L6VJlnif%QY9{Q z;9XEM@H&)q|9~QywADtU(JBlg;>}PJI2B63T~KoTFcj^714;?MhB6$tJIYME$3PkH zCqa>55K4hgfzldwSoiCpj0F$DJopVnCz$`OF$;?$pnTveC>eMFp4yTRLs7n?N{vng zp!8sy;WT(N6rK4DijK4>GZN@-nG2;LMNkT|7E1b2sPF$?WTrEA3zECBb3pq zr{9QjDm)Z>IV^;`p@jb(O6%!WZX}ToMN$)?RADKc3{SQGk3zlw|4$5}G`~X;S>Fm% zwL@R4G5U#G#`o*t%lMcgrR8j8Bh|w&f1@X()=1Me}qy+9ji@7$3n4}K?j}< zAAz^R+hH)MseBzrNep)q9aky?--M${pp>N7CNq7{gVN6Pp=5L!6eW#7$>@1dI=Xr&)Afg- z9{-=fAPIg2WiV=etZ6o#p=4knl!V7a>A4m|soRsFl<03zbfM9*>t>^blc8k13QG8^ zpj7qyQ04(Wjzf}B4C66~lB|bPrx!tyz_UyT#H2RhIT+rlC!9m@(R z9acG%X1fuJQf-4$Rl6)7f>IT4LdkfO<&YC-|5EphPcS+Vgp%OdP(E}86s^9_@*XG& z{{u<~(*PyIEl)HV?gu6QFer6B5lTj9LaExNP+G$(D6J`SA~}&dJP`*;=z1t6co<6E zzXYW!_QP?o&q*eH5fojBKnZsp6s>+3N(T2q`M~c`GSJ~s_b7-3e^4-lb!=b(q1T4wE#+b zQ6B~g7=ofSXF~b#%}_*j7ZmM(0j`9fLdnpKQ%$_ZQ2Z;PBzz*2g1B%vycV{GFGA6& z*PvwNLx|2rJ%3=3y6$nB5p{n!8vCJ8s%8t6h*v|=+S{RM^TSX|@DY>@{|ky_eut8g z_NSYS4uTSY6cou$w(f_(ZZiKr41Oj8A8p+sB=CBYIX zJ>03*|5_+I@GulD-wP$ZH=zSRhLZ8NXPGJ+0;Ov6VN{f_7=x5JXn6*d4(BR33O)<7 z;V)2hBx|ct+C!lv_}qH@4y9zN=b6o=EGSBq4ZUz2lsYYif;12dw8?9HUGK68aG(}M!fehpJ45RcX^`^)9{}I;U_#Ce&s62k@|3&$} zun9A0>E{CeK7d;nA{HAb&n-5L49D{9!~U#w+YM*p_N29+k9i(uQP7BWI~21#$MfER z+i;y}>i=Fo+TWI-7v`t&lqU8j=H>7b>{*ygFiUUu6R$k8aFb^l{?)wlTmxU=Rn{&8 zQVW~*^ESK=h}%JaEp2&MEfhNEUcrVBAcHV1j#Pi@`yy^IL!M%Vqvs?20O*r(#VFhpUGm!wD zaJzyxpD^+)!Tdhvt1+F-Vd>Fg8hgv86F7>aC?zA1#>3s0~h1h$lD*gJOd3puafpXxIM&s zk#!S1jC~>TjQnvpoA)prP9m8Z(m*qBIQe;do)a1Wdc=h+WSn04}pCxi6b z@E*r|G;fe_R~RqP<(MC3{^1GZA33S0zp0D8`+&|&%ZQWkQ{T|G3@XoPrm*X~t zFvGF4aQ5tk-FcUg_8#nSVqVTG&mp*-fO$OcdZ~YT-r_x-w~D}*;_)-@u>|}W*5kep zcX{r!%*5|oYxWW*{;;%5JlA9T!P;)J?$2AhM7f=JNfgr*68nV!|HR=}o7e@|$Jj_O z;r2Joxx6E-+e+N_+pvEl-rKl8g1w%166qa|{XWdw@aqG=gQr2q#{b+hdJ~TF+>gTo z-p?@4ux{d>g4+qaPx8i}7py@#FL_>v0Y3T`l!>N1Uy{a9-gUT-zYFkfZu;^q);34D!rA@RCezkgsKk6#dbiTQx1 z6>dNBP9dB;ck@og|9x$v{@J+j48$`Jhn7V82>V9udElQzaK96$fp8q*f5Yr2dYwLK0={DtsU+b0)_fH1Io3@0#4{N8 zBY0)<8GpuNI32euc;n9`YrY4EpGaqR+`}?D9mgKL#RP0^KeUMqM0nTm-i!M{7=LH; zG43y8Zi9I(W_d3^im`C9*&tlBC7(b)`huVPW;CZnQ!a@PJD>2s) z>2>%4+-1XUv0=W)-qxB0cVd6Sh7tRE;;>EV8A%3Q?B8IX3U~4T8^2D{|GO9paM%XN z5O4tR4+LC?Js0y?_#K9ME<6UiJX>G|ZrAb_6LvRlg_!5yo(JVwhx-s~_P{o{#c-47 zO#{#E(ro^Yr8f~rW6mbPcHXX-8*Si8_@8Ud>4a;K`EFi}o_`Qdp1p9EH6ISs@V^5d zZR4Frm@J9F!v=|`!Wcc#2d$wu+++ib(=6-$JBb|0dk*heyvGsd2pcYpeIMcaN`kyA zdB4V9!H15={0jc^l<_XM=8bR{?{)ZZX+a};6wgwdvk4NKXS%hE`7i>$ON8mXEik_Y zSL5Eq+XHhe+{W=fgZ&KbOL^r9S)OQlByK+5e8S4}6nsS*@pxnRRKkB-&o`{wQ8pvr zkjOJOp$>$pw&6P9*220MKtFG}^?QIczO?26xc`Fv9p2AyYir$gC$bgCCLAv2EhXTE zya8T$Hp8{Nj}k+7{{JNpq2{_;$NLBe%1 zR?jHxKT7@ofkQd(8#o+Cq&>U~2v`Km;N!T@$Giik5-uCFJl9)_c{=asyrqPZXCnN{ zny-e(+OWsK4x~8())B4^`%j*GF-*g;o`7%TF$H@G=6u|)!#)lBC%p2s$E_4D$Ny9z z_DkSx*iVKlu*aXTh8{2`M7k5{Ky@{VoUEB68ocYWNhrk6Jl8le~ukpv|nwEJy_f~mc6Kbta{O&Sn=X@ zDkJvL;(oEm7Watd7Y$RzvE9YJVqYyj5BKwyEURy~bV!TX-s%pq`%cS^Jzm`}w)nbs zv0$`o?D4Dm#2%~eukC+a(;>xK>-UxUL*W!p?9u8p?VNvQPi1WFuNqe0cUgmqjbD)$ zE4-j2Y66*Ir^r|BcM?zizgB$E$vyu_)i3tKjqPKLPVW)h zcWnRIi#N83y>Vx+*l)}G$9k<8*xFlwgxs2ys%I>?Yiv7@<9KJ|61#5Kq1tkYSWdXJ zXROxW*InFS^^N6}r__J$Z_^@HzOhH_?uyQ_(>D%}ZC!hIeR}2B?drFO=Cp9Xs!{_e zdaGD;bL-gD4VNS$#yyArPU1Cp`7sPsQEVBtj-Qs~{^p~}1vGmI4>U$i!K*es~ zJg?P!$(*krnft74c%Edg7#GLu4f{(Yl{G=H72N@j2$Fy+Bx;_NYvisGW#Y2ZggU0O zEJ;ib&+M9DX2c2C1}Y;?pfczWOTb8|E?DY|_?@tpZ`g^{IOPPW3}Tp=>y*|6>Z*h0 zTRxq#`>3OO#1>vLqW-(hQ(75is@mDHe(?$Cwp5w14^Pg@{x6D}EomfcYRq@aOD+82 z*w|AK1@$MK+Cp_MGes!d6!cYBmd3t4x@YYBor82m`SFTvz0#{KYsIqpio9-8?n-A$ zu&%nqADV`%>r7F7I*LV0Dd5z&YPsss+aw(JS5*6h5mTz5B+`H9q_&bs$f=2~+&MW- z%vwIw!KUhF6Dk;v?Y**}{(PN$Xy*!KU%j(q?4F%{wd)2+?~x;W#(q6IC3cJ7>3qzp zK&7uXR9zlkEfJ19OwG$(t+TZ;Im=Y{TK`6GSzUGQ)OblGRKd*o&IQ@d|GK|bi&(FRvSXDG zWyH>T=+*ku9^R~CZ60|dI)1FT1l^jwvS8_4#~1PiD^NnR?*wa5%(~jznoz`F=4|pu za#B181TOQJ)K#FAmFHq-C@zlTjNU&w>j3@pXJN3zK9cwp*Dl67ToYA?tdG6Q8sloL>KUt|_ zqc82-dhYzfIXU%5{QaX=^;OTkqp}Mt!^p=r(DG1CwId5BHpS{+`lXeKJNDJf{kkCAMZv%(TMeUQpS(OV zmhsBy*y>km`-SsUbW@V_v(d=PU@adITde(_w8FSEUyZvPwb7ljbuF(9_$8J3&fG;y z7Zxl_q~o>KVw_`3LW5#8d-@G*4rLPfi(psp=|6v2!P0qibYc--sKOs{jDzD8*ZNB< z%Qrc*7R{aO7(e;Ew>IRj4b_zT!(qCd#Y-2>TUxMCavN)Z*N9X~RvM@)^LxuGL(c5^ zOSQ)#cTF5neE7muQ&$ueu9j>gR?&)to6hs4cMVq?7{mI-GVjjp<_#d%I$wp~A(Bqz z=(}@b=iS{ecH`Yeu^;d5m+JKfYrJ(~zc=EquJwv^$V28m17ba29p56OEVk&?hw2Mo z%Wfm)o&bP`R@NZg8W$0&>w?_Mid}Wmzqf;k} zrL5UyYF@5b)+W1*Pl~)kdu(6^K_ON56wYpm7J4sc!NG#EK4wu>4qt3S! zBOp_lDt{=clr(8NrN7Fb?N|O|J=^(}PJF85Pz#C=Oymnw?T4g1dKgOn)1tS;vfe*4_T~Fd{UIM5*Sg~|m65fM{Gr^jeT`-Hw|<<`BKE?kTVn%1 z>m6Iazp8afpr*8{{=WU$YP=aZWK>Nw=XlFa@z`PI0AFeBDfJ(HHl$Uo@7KNRXMbJX zqW;L#^l8P1na!-A$U&Ae8 zcm1BdXmn0q%Hl=Kyt62gp6JeIDw;1t;%IMfo;PoTlQ$-R+{BT&JOuPE^>3(@=I>1o zH_@9r&dJTq&m9w+@W%xymEjui#EIi3dGlg>{}`njcPQ19zkSp&{?1V8eH(-HhO08d ztMgM*Jhr}8&Gc6^?AW5xRl|;5s-N4mMrEodchJ!)rw=+9WVoqqqz21;5uYeX&?#?n zk2+c%o>Q=)s;1261RCj)H#C|-T4Fen%0R&J1vfMhDI|X4$^g>e{o`oWt5X?CmN$i% z8kG5lyNf2NA?~r0RR121KM?STob;r{oE!70%(nIm?&Cf+yoLAohZHyZs$@}AdA3(9i6oeA!qHnhCr=9c>c-#MiuCMIpzL9xTz{g(+$hq zN+wN6SC@|7DZ->9(C9EPBim{2o>J8tnLJ;re(us3p=f0xpR=}6auRcH@8{O!u7X#()e^RS|zAtOqrwX<;TbGw06s78NWka=VqQ z>9VMp%<9zX9`Z3N=~^nL^-76%e5(eISXdckMnpb+8*mD&BQJiZJm9OSV5qNd46~l0 zQ}#2PaXTt?7?LShYE)Zf5UHuoaZgYxwRgTGJNMwo4em2aWxAtVsM9+oBop+nZFK+9 zLS?H)cYRRx03BMYjMPS_ro23isB<@FY(zVBxOpwrgkF4!Ue>RbprV2Cp|V11%WWwd z=04C;%^KN6pXjWm6GJCUYDqT}l=MYWM1$NwYnn@=yQ8&ooOo7>^?a4F6NPq?(^%3<^>BY|tvYvY z3bEDOu2OAN*4AxcQW^9mdyHAGy0=Jjh#rvofmyIqrDn{n3=~IdLIHnO!VTpQ z`VVrPE4uGEht{F`QuDHKG*5NYI+V}nOsV#Tt15%j@*Vf}cItGra7}x4N80=#e!e=I z1x-I(6>;k5u7VLCeYoRJN>NK?N5;Knrt0Fh@1Q!gZV1uR+`b*u#Ae4#?WjLzDqZ(~ z@eF7#qcd!9&+MS4@!`)>mDg?RpnA10Y#`UtQM#!e)hN8?bW{`CH_#dyq+PgYc2wED zi|9A$IdT|`7~&H>u=`|38dIaYzoS}8w==bq8q=>SR8m>dNJ}&QYNAV^>22$z1`}*| zCzZWs9*QUGE1ei)mD4~+LTAU=;&V3m%5;ZhdXcIodLS)Kua_Nz&?aXJ5gUUQ(`@l{ zr$%e_(}*LL8zk9Ax1h6H)S@vMyZ-Ru?t`7xgw{Hg`(tM{o-E{cQNb<;$=$uPi~6_& z4a<>5LQSZ_y|$~$IH2ftk>;Ym)m44bb|KlQ36;6ecT*EdwrzKnl_by!-PI(d6Y8#J z4v3Fj-ZB}ID5-Sz)O)2#jXTig+g@r0LC5q~GkQ|BaaGT8SP5uVh;=F% zI&vnxxD{}Yp6Z31ES89V>dq%B<1|&F3!?mi*qV~TomTi{EYUKqtcaae;<&52s-Et= zK4@yAyRna&F`+3`mE$#IKt4TRfaMu_p}TSH_K7s4|b&+htyGx?n7SW?hH_c?i*eN{lWm5TDnaGsL4^eszWcU`d+7|lpV^%xHWSi z-5votb!)DGun~)U*+7*sa+%L5VF#?a<@+8vH{kuDGklNQ@g=wiN!-yW`}sE>r82KyAGjC{tNe0hNv@BpU_jh z!i8*}Q<4>s(YRZN8tC3TRCRZYhpI^(o5LjeEwIkbQTCIEUo%t@C>*9rk=O2FYI2T= zt*6RVn4W;j#4xg{R%SOSzrRe+P9tBs~ZBejlc0k-KGO3NWS!z(1 zh9Ld7ZhZKWn-jBCs#}=F)TF_!%TkLdXSd;Mg!>JFjd^~OQ)_qYaMjN`#O6nObc*-! zY^gJV=%{HU^gMg|9@V>pRWng8_wy>{xX0$IF1qz@%T?n{OJq{uxchTex>!5Kb$sXm znhs+u1x%>)LCT(!YJKQ&B1p5=N1Q3Fj%EEGoaW}GsUhv0;%1dza*(p-h>CV{ zfAmtkMmIIbsNsLqQ(q2ZlY@%?rmSvGu4+Fpp?H6(sqTzXs=pf?r24q?2O*IgMyU_u z^4Y3oQJtr9TGU0{OY>A(kNM4=0(0S-3N~-u+J35U^gqp%W&TC~Rh)=-@Nr4JU$gG< z6O*{J-IQQb!M3vFtkA>1*BZl3<5haU@(ecZ4%4;f}oMEX+UN)s-{XB+|+!PPa=!+)d`gB<$QIB6mYVd+MP~b z`deRFh+SjCu4{0sC##tVarb2AZVm2!(5);{KXxp1e_El&_7ufn$IypvTlav#!UY!!>S>mRTv}PreJ?K;` zo)OMgIHpKETFa|ys^tKTqZbBCrc~orsKFyWWHOXUE#zm9s5zdFmKcNFO)J!pbcqm7 zL_oO@u;`<*B_TT{d3L$#k}47E5)tZx$I$<|x2!-}u3xFTY5{IYc-z+LcA2W2!7?P< zT`w(}Zq`R$I#h@~uPg6r>yqK=;=&zSR%(2od!)wBk>PWiTte454n>R!C zktJw*I}@}{?jO@t2XqSWIVrMRAd8kjzI);fwPt|q1nAkKZ23D(9UbS8%3yr{IHW+$ zH1o%t0yWazQJ_*u=;i|Dx*yF{M`4~dOXYy@EVVL~$#X-9^|j;ZWg=T73}-LQV%GJ9 zOV=>i&77^W2)txA4gYmFI9v5$B}H41KFo-PgB0nH!?h^O)kNt`{>;)o94y7jx7-sSP1kx@=_B)OzV7*hk5yhrDmDo_w^Qr*eDJ zxSjYjcT>1PH+Q$=Je8KVqB0aQ_ILoNImF5H)a7J2{SftJ-k;7{5tbetRu$>Py)F<4M{K{tUfhNT*;Uz4Sw`Pe%`m}K-5+wlKU8I) zY5f+cZQ!N_6s6Jqd4W0=+lhs0)BrvBbD}EyDYR+XQKMT8Zj!^*26u0v8ko5uc{w9B zP?jhm1}~d+diLq|U8qiN)fizla?L`uhT^s^Qj7WA$|9BCwV|3|d?U*r8m@betwoGD zP3~JoYJ_Tt?Y$_qi^rLgQ8sM~4T-&mxlL~NB2_Rn?BTd^&BB6N^NZ##T4RsZyfR2i zJ8`OgRiT>Lj7!FKjl1v-PV=k%?v;zxz?9}d?$e7^W~#Qc)Imi}}u@5ir>mFCkY^YNQ)s_uGeM!Q7znJMs*AA-H1nYu+>N)kF zb}}S2=Ffc5wk6ZJ+`^z5f{^U);AufMf+obUUd`!HSxwL<%`ahdKMbnj?(7;h4)JcT zQJHBdfSe@acZKEph9@ z%G-hPvN%I_X$sT-~xQEuM$;k8cI<=|~qL)sF8KZ2Ug!6UK znhh-S>Qq?|$&2ok{jAz#>!G~C-LOG9y|QX_K5GNMNZ4CbJKU2c{h(XFK}82fHZ;;g zY6E_mnq-sd3aXStrJzTAV!I#dYcG)aLSb`x!Rur0ZpTf&*HjiZYTXb_+#hKUdr*o0 zcX+)Tt(FBg9jZ>8o!bcg>0hNzzm+7%|B^TtM*@}1JM^xyUcvn-uv{JC#F>VU&gd;4 zM!9@ceQb!aB%&J@y*bMSs-0S8STz0zdy_(-$-Vy=mCwGd3_-sf!;FPpzKyDHE_Fm7 zvvHbdimnqn>x{A_b6{hVWuvFi=bpDw_3D^djC$yC&)KN@b!c{Ja&Or`m8byx&pl8;|k=}5GPSF=Cqvo&Nq(-MU1R~l!{U$J!gviU_$d}xsZq+neYiJ=_>^CP6hbdFNpTAFN}7e>{bHFN%3pXo8Th4k#Ev4W#5nnth5d<<5iH959kE3do45wr`vH!wWG2>Fg#mzoJ4e3t833oF_x@&NcihGLZ&*NMr zxslytWM$6v4hmE#gJDvjDu3C!8ul>e>H}pt)zMW!OJxp+vg+%PdP`N$bj*C)AL@Ky z47c-%tY{kDc_*r!nX*+9u0_N1Ig|9vpEGBUlW=0Qz)YC}4fk|Ei7~NbLoFF)#FN8q zx9DV*)=C<)yY6H)xaFcM&M8k;)8>kHaBgajC759N!dCsvetNQ>ZIURo=U`8F&MB&R z81vbnZ+Ny->|~j&_(H=ufuGM^MHCm0LMIFLc=QyNhSI-(igEz6+{0QU9hUh=ovK!3 z$!)l#J<%HwM-v^lB)vu$5YjS);ioheNN+KxE-h4 z6_w?Yuv>S!s^Dug&S0vYSlA(f+4|6EUR8n9=8ej-a{YFpd9D>AWuUNm&r03N7V`>bJ90cC?0-CCdk0 z3yGV4QYDGiMUgqbOSCnbI}vImj6|@v29sjg2uVAi65+3}6ShZro9`1&(0fPrOLjL| z;x0WrG}Lt={;O~;TMcwVNWENl7Ff4p_*IE&31TK9qR z0ZHai_MT#tr6Egmy3$ao*$UF>CErtAP_V3^aM3*b`T4;rxxq+JVJ89lv?Crlo-C9ikv@oiAbt-9xz%vBMK7G~N<|72Mb%A>nn57>N~qStzqpzi&su?5xSMpdXbtSn zu)r@4a3PjTs+RuxK-)o{WX64StLoaD1+Ltw&}$VL>unP5-mPlzK)Qh@);iL#>LOv* zKjlnla}r^?pRJ0b6jYzA*2(GCaL;02xYQRA9no`$=CRsC-5J%IF7f+9C4QMoN>5D>Bm=bVzV(c1rVSvj?tpXD^nQuWKfRm@%Q}!843~M}iRY-) z)Pt5b^tRTgW3rF?@HuK=|Kh4j7Kof%abqvYT_COYdZ1z#YMbiq_S~lW{jX5{+RgI^ zYpU5aao2BClMd0x1S~;hhMYVkmg_05t01e5Y-6MAGGgg1kR!J z=H}cAxx#&)GPKSYlz3rg0y?tZ zhD_mKw4*^u#>@O0^;XP(4ZUc=6GgN0ncK+?CfT!0%)MD>=%tFRFMQvm=Gc8#K)2%>zOLY_eoO)dRzD5^Hm#$`KQijN!#dtaz0ax zMz?)TO&G*sK67hx+^BCY>6vTu27xceRJ_SOKBm$-nYn%ZuEvcqH6UsycZtR>lTK;v ziM;8(5T<|eVmMNPN&d`4&}E;KF?wiNWR#INl)dOg^tgAJ4v3DDo{i?$oJDuh1*$FC zJM02AxQ!%J!q(sg+>2;*AHP5iogtSA3YK}BZxDEx;o&BO=bv4d70f%x(aqT*g(ODO ztbvR8b+TI5TQdBtpm`I*Tq?9H3bVv9-;-%ZU4Z>)ttBRgzQyjnqS^ z$|E=I^*q$ve3tLaU31$jlBy0XcjFIoO1>LUsN{>&EF)M7@B$#)pD<5%eaf4(;#_3EBa7e=Pz8>jxS zoAah-{@>l4H~M$5`pND2D5cZa=S@9f)A#2SHtx^M%|u&QT%OnW>-@L|i*V zPr6v2qzqaYylbQSx1Dsqs&dr~mu?d1uvMHsin2UAbhx+FkFe9!DLh z1m?~?x%pG0Ugb5{?%7`bv!7}4iJSLgFoE1|t{UE~Xo*Yswtw2f$)%osCHEst7v$<| z{3}?=k0`0_k8m&(Oc{aA<_LQP|9Q&lDP0~3Zi+{iObGbb0W!eU6UZW zi1*hzXnIjP(*n6Ht#=b^YnTF5ZiwW#KU}2dnXQ0n7ppOxMKXdj5j67+nH1Q)T|NCd z_hL0@qE2NkTm5$7}>uHPLe{S9p3Nrt;xoL$zNoRY!JD-elJ` z*5t0eObr~(W<|s&H=ShsHv_##mJW9Ql~h@DW%QHC=E2LyA{a$mcGOq-lEH+SUO{1G?x zN|o26swP;@rg=o}$V=-Wr*7a%HNIa1n;QIjPZq^<4)avi)XKV*HpVIS!&jRv?s+b$LE zClmd|HOk~4Po%h4U!{h0OB5k~LUPY5SE-iDjqYM~^XS#;jZ{gp%Bf%nP#^s<`DSnO zj%(DsqeM^2%UPT0BQ0~-Cs*P;adDb60a?fW#cy{0OCbHz9k<)HYGN<*V;vIZR4)<< zTdj82U8^?rNu2F_;!{=T(4xD)U90adWQbWfkm()2CN!qUF93|0U2oR)uV~?Q`jbS7A z!W+2R(da&XgK|2v1H*#fbc}Qs-`}8r)|7UmTGv0m7tGwqQ&P#H6!(Ox!n%pM&)ujV z9^b_IjNFHE3W|$7VP6&fxx-@#8%D1UN1#bGz!vo752lB-eJVq2%m5%a5ew zOi+&O-FY{wRp~yKW*fpeDRY8OxRKu+IJ&WhvpFYVjl>G4!F}Rpm42kimkOZ3&HM9G zAtt_dX4?o2kS;Gth}I{5=$;gw%X$8AT}Uog9D0jdxtJ_@=waE{kRL!K_RBqXVCVk@ zNZRtzTTF73TDnA8g&nvr;tP42+;4ADX-OC3y5FjNTo7_}7enD{{rtAU?@2^-x8ACT zb!FdA=gR04L(${6stHj#Q)fdpRY=RoDG7%?VR6ZkKpdm#ABGqwey6Ojw^uqj!9caG z67b%73TqkcW;R91Pn;-G6g^ajw z-=+?s+t0XNpRASKuEw<2v&JB-oS+ zvIddgd?V*_Hkq7qB*j^^{3wxQ|1z{9;+LBk9Fj0raP@>!sl@(Di;S=vyhF_%%Wtjp zDQ#SPY{}wEl<3{f;AOPV-FJry&NkamrhAS56jHuxHl`4`Ri?ilJ*Y4_M89&k8kJ*G z(xoK@Xk=P88ZcR8s zsD#}JnI249+1RkQnbT(` zY!NMB=@(7+WrOJR@l8SQZmji3tlP4~f_~SPYn$zQ>;Xk{^I~v^&_^cQM zO*F^Fv%Fl=)4%;nbm->7Pc{Fj2{TVLATLjMG3IuPI7IVCC%Z@)%($XUP^E5 z>qA^`9X|l#PF0vgj*yRT|KLE3nVYQQiTWoU36%KROsy8Rpht|myWQ?lCo-eZd$o?f zCvAr(=?={}#1`_y_vjGcLN=GHwE}elYIt2luM3-Q&qe z{F6n0WM{tBeQLN|(DvTP)KQ1c=z)r`5u^95P0vXpXWge(bdlo^N, 2001, 2002. +# Tommy Pettersson , 2001, 2002, 2004. # msgid "" msgstr "" -"Project-Id-Version: binutils 2.12.1\n" -"POT-Creation-Date: 2002-01-17 13:58+0000\n" -"PO-Revision-Date: 2002-08-05 00:03+0200\n" +"Project-Id-Version: binutils 2.14rel030712\n" +"POT-Creation-Date: 2003-07-11 13:56+0930\n" +"PO-Revision-Date: 2004-10-08 17:18+0200\n" "Last-Translator: Tommy Pettersson \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -# -#: addr2line.c:73 +#: addr2line.c:74 #, c-format +msgid "Usage: %s [option(s)] [addr(s)]\n" +msgstr "Användning: %s [flaggor] [adress(er)]]\n" + +#: addr2line.c:75 +msgid " Convert addresses into line number/file name pairs.\n" +msgstr " Konvertera adresser till radnummer/filnamn-par.\n" + +#: addr2line.c:76 +msgid " If no addresses are specified on the command line, they will be read from stdin\n" +msgstr " Om inga adresser är valda pÃ¥ kommandoraden läses de frÃ¥n standard in\n" + +#: addr2line.c:77 msgid "" -"Usage: %s [-CfsHV] [-b bfdname] [--target=bfdname]\n" -" [-e executable] [--exe=executable] [--demangle[=style]]\n" -" [--basenames] [--functions] [addr addr ...]\n" +" The options are:\n" +" -b --target= Set the binary file format\n" +" -e --exe= Set the input file name (default is a.out)\n" +" -s --basenames Strip directory names\n" +" -f --functions Show function names\n" +" -C --demangle[=style] Demangle function names\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" msgstr "" -"Användning: %s [-CfsHV] [-b bfd-namn] [--target=bfd-namn]\n" -" [-e programfil] [--exe=programfil] [--demangle[=stil]]\n" -" [--basenames] [--functions] [adress adress ...]\n" +" Flaggorna är:\n" +" -b --target= Välj format pÃ¥ binärfilen\n" +" -e --exe= Ange infilens namn (standard är a.out)\n" +" -s --basenames Visa inte katalognamn\n" +" -f --functions Visa funktionsnamn\n" +" -C --demangle[=stil] Avkoda manglade funktionsnamn\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programmets versionsinformation\n" +"\n" -# -#: addr2line.c:80 ar.c:289 nlmconv.c:1121 objcopy.c:423 objcopy.c:455 -#: readelf.c:2181 size.c:91 strings.c:655 windres.c:737 +#: addr2line.c:89 ar.c:297 coffdump.c:479 nlmconv.c:1121 objcopy.c:484 +#: objcopy.c:518 readelf.c:2649 size.c:104 srconv.c:1962 strings.c:673 +#: sysdump.c:774 windres.c:702 #, c-format msgid "Report bugs to %s\n" msgstr "" "Rapportera fel till %s\n" -"Skicka synpunkter på översättningen till sv@li.org\n" +"Rapportera synpunkter pÃ¥ översättningen till sv@li.org\n" -# -#: addr2line.c:240 +#: addr2line.c:245 #, c-format msgid "%s: can not get addresses from archive" -msgstr "%s: kommer inte åt adresserna i arkivet" +msgstr "%s: kommer inte Ã¥t adresserna i arkivet" -# -#: addr2line.c:312 nm.c:447 objdump.c:2800 +#: addr2line.c:317 nm.c:433 objdump.c:2693 #, c-format msgid "unknown demangling style `%s'" -msgstr "okänd avkodningsstil \"%s\"" +msgstr "okänd avkodningsstil \"%s\"" -# -#: ar.c:237 +#: ar.c:238 #, c-format msgid "no entry %s in archive\n" msgstr "ingen post %s i arkivet\n" -# -#: ar.c:254 +#: ar.c:255 #, c-format -msgid "Usage: %s [-X32_64] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" -msgstr "Användning: %s [-X32_64] [-]{dmpqrstx}[abcfilNoPsSuvV] [medlemsnamn] [nummer] arkivfil fil...\n" +msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" +msgstr "Användning: %s [emuleringsflaggor] [-]{dmpqrstx}[abcfilNoPsSuvV] [medlemsnamn] [nummer] arkivfil fil...\n" -# -#: ar.c:257 +#: ar.c:258 #, c-format msgid " %s -M [\n" "\n" -# -#: ar.c:850 ar.c:918 +#: ar.c:857 ar.c:925 #, c-format msgid "%s is not a valid archive" -msgstr "%s är inte ett giltigt arkiv" +msgstr "%s är inte ett giltigt arkiv" -# -#: ar.c:886 +#: ar.c:893 #, c-format msgid "stat returns negative size for %s" -msgstr "stat returnerar negativ storlek på %s" +msgstr "stat returnerar negativ storlek pÃ¥ %s" -# -#: ar.c:1013 +#: ar.c:1020 #, c-format msgid "%s is not an archive" -msgstr "%s är inte ett arkiv" +msgstr "%s är inte ett arkiv" -# -#: ar.c:1020 +#: ar.c:1027 #, c-format msgid "creating %s" msgstr "skapar %s" -# -#: ar.c:1226 +#: ar.c:1233 #, c-format msgid "No member named `%s'\n" msgstr "Ingen medlem heter \"%s\"\n" -# -#: ar.c:1278 +#: ar.c:1285 #, c-format msgid "no entry %s in archive %s!" msgstr "ingen post %s i arkiv %s!" -# -# archive map verkar vara vad indexet kallas i källkoden -#: ar.c:1439 +# archive map verkar vara vad indexet kallas i källkoden +#: ar.c:1422 #, c-format msgid "%s: no archive map to update" -msgstr "%s: inget arkivindex att uppdatera" +msgstr "%s: inget index att uppdatera" -# -#: arsup.c:88 +#: arsup.c:86 #, c-format msgid "No entry %s in archive.\n" msgstr "Ingen post %s i arkivet.\n" -# -#: arsup.c:120 +#: arsup.c:117 #, c-format msgid "Can't open file %s\n" -msgstr "Kan inte öppna fil %s\n" +msgstr "Kan inte öppna fil %s\n" -# -#: arsup.c:171 +#: arsup.c:172 #, c-format msgid "%s: Can't open output archive %s\n" -msgstr "%s: Kan inte öppna utdataarkiv %s\n" +msgstr "%s: Kan inte öppna utdataakrivet %s\n" -# -#: arsup.c:183 +#: arsup.c:189 #, c-format msgid "%s: Can't open input archive %s\n" -msgstr "%s: Kan inte öppna indataarkiv %s\n" +msgstr "%s: Kan inte öppna indataarkivet %s\n" -# -#: arsup.c:189 +#: arsup.c:198 #, c-format msgid "%s: file %s is not an archive\n" -msgstr "%s: fil %s är inte ett arkiv\n" +msgstr "%s: fil %s är inte ett arkiv\n" -# -#: arsup.c:230 +#: arsup.c:241 #, c-format msgid "%s: no output archive specified yet\n" -msgstr "%s: inget utdataarkiv angivet än\n" +msgstr "%s: inget utdataarkiv anvisat än\n" -# -#: arsup.c:250 arsup.c:285 arsup.c:321 arsup.c:341 arsup.c:399 +#: arsup.c:262 arsup.c:301 arsup.c:343 arsup.c:364 arsup.c:430 #, c-format msgid "%s: no open output archive\n" -msgstr "%s: inget öppet utdataarkiv\n" +msgstr "%s: inget öppet utdataarkiv\n" -# -#: arsup.c:258 arsup.c:359 arsup.c:379 +#: arsup.c:273 arsup.c:385 arsup.c:411 #, c-format msgid "%s: can't open file %s\n" -msgstr "%s: kan inte öppna fil %s\n" +msgstr "%s: kan inte öppna fil %s\n" -# -# module file är detsamma som member -#: arsup.c:306 arsup.c:375 arsup.c:454 +# module file är detsamma som member +#: arsup.c:328 arsup.c:407 arsup.c:489 #, c-format msgid "%s: can't find module file %s\n" -msgstr "%s: hittar inte modulfil %s\n" +msgstr "%s: hittar inte medlem %s\n" -# -#: arsup.c:406 +#: arsup.c:439 #, c-format msgid "Current open archive is %s\n" -msgstr "Det aktuella öppna arkivet är %s\n" +msgstr "Det aktuella öppna arkivet är %s\n" -# -# BUGG: dubbelt blanksteg -#: arsup.c:433 +#: arsup.c:464 #, c-format -msgid "%s: no open archive\n" -msgstr "%s: inget öppet arkiv\n" +msgid "%s: no open archive\n" +msgstr "%s: inget öppet arkiv\n" -# -#: bucomm.c:106 +#: binemul.c:39 +#, c-format +msgid " No emulation specific options\n" +msgstr " Inga emuleringsspecifika flaggor\n" + +#. Macros for common output. +#: binemul.h:52 +#, c-format +msgid " emulation options: \n" +msgstr " emuleringsflaggor:\n" + +#: bucomm.c:113 #, c-format msgid "can't set BFD default target to `%s': %s" -msgstr "kan inte sätta BFD:s standardmål till \"%s\": %s" +msgstr "kan inte sätta BFD:s standardmÃ¥l till \"%s\": %s" -# -#: bucomm.c:118 +#: bucomm.c:125 #, c-format msgid "%s: Matching formats:" msgstr "%s: Passande format:" -# -#: bucomm.c:135 +#: bucomm.c:142 msgid "Supported targets:" -msgstr "Mål som hanteras:" +msgstr "MÃ¥l som hanteras:" -# -#: bucomm.c:137 +#: bucomm.c:144 #, c-format msgid "%s: supported targets:" -msgstr "%s: mål som hanteras:" +msgstr "%s: mÃ¥l som hanteras:" -# -#: bucomm.c:153 +#: bucomm.c:162 msgid "Supported architectures:" msgstr "Arkitekturer som hanteras:" -# -#: bucomm.c:155 +#: bucomm.c:164 #, c-format msgid "%s: supported architectures:" msgstr "%s: arkitekturer som hanteras:" -# -#: bucomm.c:262 +#: bucomm.c:360 +#, c-format +msgid "BFD header file version %s\n" +msgstr "BFD-huvudfil version %s\n" + +#: bucomm.c:467 #, c-format msgid "%s: bad number: %s" msgstr "%s: felaktigt tal: %s" -# -#: coffdump.c:106 +#: coffdump.c:107 #, c-format msgid "#lines %d " msgstr "#rader %d " -# -#: coffdump.c:468 sysdump.c:740 +#: coffdump.c:471 sysdump.c:767 #, c-format -msgid "%s: Print a human readable interpretation of a SYSROFF object file\n" -msgstr "%s: Skriv en mänskligt läsbar tolkning av en SYSROFF-objektfil\n" +msgid "Usage: %s [option(s)] in-file\n" +msgstr "Användning: %s [flaggor] infil\n" -# -#: coffdump.c:531 srconv.c:2029 sysdump.c:799 +#: coffdump.c:472 +msgid " Print a human readable interpretation of a SYSROFF object file\n" +msgstr " Skriv en mänskligt läsbar tolkning av en SYSROFF-objektfil\n" + +#: coffdump.c:473 +msgid "" +" The options are:\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" +msgstr "" +" Flaggorna är:\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programmets versionsinformation\n" +"\n" + +#: coffdump.c:541 srconv.c:2052 sysdump.c:831 msgid "no input file specified" -msgstr "ingen indatafil angavs" +msgstr "ingen infil valdes" -# -#: debug.c:653 +#: debug.c:654 msgid "debug_add_to_current_namespace: no current file" msgstr "debug_add_to_current_namespace: ingen aktuell fil" -# -#: debug.c:736 +#: debug.c:737 msgid "debug_start_source: no debug_set_filename call" msgstr "debug_start_source: inget anrop till debug_set_filename" -# -#: debug.c:795 +#: debug.c:796 msgid "debug_record_function: no debug_set_filename call" msgstr "debug_record_function: inget anrop till debug_set_filename" -# -#: debug.c:851 +#: debug.c:852 msgid "debug_record_parameter: no current function" msgstr "debug_record_parameter: ingen aktuell funktion" -# -#: debug.c:885 +#: debug.c:886 msgid "debug_end_function: no current function" msgstr "debug_end_function: ingen aktuell funktion" -# -#: debug.c:891 +#: debug.c:892 msgid "debug_end_function: some blocks were not closed" -msgstr "debug_end_function: några block avslutades inte" +msgstr "debug_end_function: nÃ¥gra block avslutades inte" -# -#: debug.c:921 +#: debug.c:922 msgid "debug_start_block: no current block" msgstr "debug_start_block: inget aktuellt block" -# -#: debug.c:959 +#: debug.c:960 msgid "debug_end_block: no current block" msgstr "debug_end_block: inget aktuellt block" -# -#: debug.c:966 +#: debug.c:967 msgid "debug_end_block: attempt to close top level block" -msgstr "debug_end_block: försök gjordes att avsluta yttersta blocket" +msgstr "debug_end_block: försök gjordes att avsluta yttersta blocket" -# -#: debug.c:992 +#: debug.c:993 msgid "debug_record_line: no current unit" msgstr "debug_record_line: ingen aktuell kompileringsenhet" -# #. FIXME -#: debug.c:1046 +#: debug.c:1047 msgid "debug_start_common_block: not implemented" msgstr "debug_start_common_block: inte implementerat" -# #. FIXME -#: debug.c:1058 +#: debug.c:1059 msgid "debug_end_common_block: not implemented" msgstr "debug_end_common_block: inte implementerat" -# -# BUGG: Kolon saknas antagligen #. FIXME. -#: debug.c:1152 -msgid "debug_record_label not implemented" +#: debug.c:1153 +msgid "debug_record_label: not implemented" msgstr "debug_record_label: inte implementerat" -# -#: debug.c:1178 +#: debug.c:1179 msgid "debug_record_variable: no current file" msgstr "debug_record_variable: ingen aktuell fil" -# -#: debug.c:1194 -msgid "debug_record_variable: no current block" -msgstr "debug_record_variable: inget aktuellt block" - -# -#: debug.c:1764 +#: debug.c:1762 msgid "debug_make_undefined_type: unsupported kind" -msgstr "debug_make_undefined_type: sorten kan inte hanteras" +msgstr "debug_make_undefined_type: sorten hanteras inte" -# -#: debug.c:1970 +#: debug.c:1963 msgid "debug_name_type: no current file" msgstr "debug_name_type: ingen aktuell fil" -# -#: debug.c:2018 +#: debug.c:2011 msgid "debug_tag_type: no current file" msgstr "debug_tag_type: ingen aktuell fil" -# -#: debug.c:2026 +#: debug.c:2019 msgid "debug_tag_type: extra tag attempted" -msgstr "debug_tag_type: försök gjordes att sätta en extra tagg" +msgstr "debug_tag_type: försök gjordes att sätta en extra tagg" -# -#: debug.c:2066 +#: debug.c:2058 #, c-format msgid "Warning: changing type size from %d to %d\n" -msgstr "Varning: ändrar datatypens storlek från %d till %d\n" +msgstr "Varning: ändrar datatypens storlek frÃ¥n %d till %d\n" -# -#: debug.c:2090 +#: debug.c:2082 msgid "debug_find_named_type: no current compilation unit" msgstr "debug_find_named_type: ingen aktuell kompileringsenhet" -# -#: debug.c:2197 +#: debug.c:2189 #, c-format msgid "debug_get_real_type: circular debug information for %s\n" -msgstr "debug_get_real_type: %s har cirkulär felsökningsinformation\n" +msgstr "debug_get_real_type: %s har cirkulär felsökningsinformation\n" -# -#: debug.c:2662 +#: debug.c:2650 msgid "debug_write_type: illegal type encountered" -msgstr "debug_write_type: påträffade en ogiltig typ" +msgstr "debug_write_type: pÃ¥träffade en ogiltig typ" -# -#: dlltool.c:743 dlltool.c:768 dlltool.c:794 +#: dlltool.c:812 dlltool.c:837 dlltool.c:863 #, c-format msgid "Internal error: Unknown machine type: %d" -msgstr "Internt fel: Okänd maskintyp: %d" +msgstr "Internt fel: Okänd maskintyp: %d" -# -#: dlltool.c:831 +#: dlltool.c:900 #, c-format msgid "Can't open def file: %s" -msgstr "Kan inte öppna def-fil: %s" +msgstr "Kan inte öppna def-fil: %s" -# -# Här parsas def-filen bara, så den bearbetas inte -#: dlltool.c:836 +#: dlltool.c:905 #, c-format msgid "Processing def file: %s" -msgstr "Behandlar def-fil: %s" +msgstr "Bearbetar def-fil: %s" -# -#: dlltool.c:840 +#: dlltool.c:909 msgid "Processed def file" -msgstr "Def-filen är behandlad" +msgstr "Def-filen är bearbetad" -# -#: dlltool.c:866 +#: dlltool.c:935 #, c-format msgid "Syntax error in def file %s:%d" msgstr "Syntaktiskt fel i def-fil %s:%d" -# -#: dlltool.c:905 +#: dlltool.c:974 #, c-format msgid "NAME: %s base: %x" msgstr "NAME: %s bas: %x" -# -#: dlltool.c:908 dlltool.c:927 +#: dlltool.c:977 dlltool.c:996 msgid "Can't have LIBRARY and NAME" -msgstr "Kan inte ha både LIBRARY och NAME" +msgstr "Kan inte ha bÃ¥de LIBRARY och NAME" -# -#: dlltool.c:924 +#: dlltool.c:993 #, c-format msgid "LIBRARY: %s base: %x" msgstr "LIBRARY: %s bas: %x" -# -#: dlltool.c:1182 resrc.c:271 +#: dlltool.c:1251 resrc.c:271 #, c-format msgid "wait: %s" msgstr "wait: %s" -# -#: dlltool.c:1187 dllwrap.c:455 resrc.c:276 +#: dlltool.c:1256 dllwrap.c:430 resrc.c:276 #, c-format msgid "subprocess got fatal signal %d" -msgstr "barnprocessen fick fatal signal %d" +msgstr "subprocessen fick fatal signal %d" -# -#: dlltool.c:1193 dllwrap.c:462 resrc.c:283 +#: dlltool.c:1262 dllwrap.c:437 resrc.c:283 #, c-format msgid "%s exited with status %d" msgstr "%s avslutade med status %d" -# -#: dlltool.c:1225 +#: dlltool.c:1294 #, c-format msgid "Sucking in info from %s section in %s" -msgstr "Suger åt mig info från sektion %s i %s" +msgstr "Suger Ã¥t mig info frÃ¥n sektion %s i %s" -# -#: dlltool.c:1349 +#: dlltool.c:1423 #, c-format msgid "Excluding symbol: %s" msgstr "Undantar symbol: %s" -# -#: dlltool.c:1444 dlltool.c:1455 nm.c:958 nm.c:969 objdump.c:383 objdump.c:400 +#: dlltool.c:1518 dlltool.c:1529 nm.c:1004 nm.c:1015 #, c-format msgid "%s: no symbols" msgstr "%s: inga symboler" -# -#. FIXME: we ought to read in and block out the base relocations -#: dlltool.c:1482 +#. FIXME: we ought to read in and block out the base relocations. +#: dlltool.c:1556 #, c-format msgid "Done reading %s" -msgstr "Klar med att läsa %s" +msgstr "Klar med att läsa %s" -# -#: dlltool.c:1493 +#: dlltool.c:1567 #, c-format msgid "Unable to open object file: %s" -msgstr "Kan inte öppna objektfil: %s" +msgstr "Kan inte öppna objektfil: %s" -# -#: dlltool.c:1496 +#: dlltool.c:1570 #, c-format msgid "Scanning object file %s" -msgstr "Genomsöker objektfil %s" +msgstr "Avläser objektfil %s" -# -#: dlltool.c:1511 +#: dlltool.c:1585 #, c-format msgid "Cannot produce mcore-elf dll from archive file: %s" -msgstr "Kan inte producera en mcore-elf-dll från arkivfil: %s" +msgstr "Kan inte producera en mcore-elf-dll frÃ¥n arkivfil: %s" -# -#: dlltool.c:1603 +#: dlltool.c:1677 msgid "Adding exports to output file" -msgstr "Lägger till exporter till utdatafilen" +msgstr "Lägger till exporter till utfilen" -# -#: dlltool.c:1648 +#: dlltool.c:1724 msgid "Added exports to output file" -msgstr "La till exporter till utdatafilen" +msgstr "La till exporter till utfilen" -# -#: dlltool.c:1772 +#: dlltool.c:1848 #, c-format msgid "Generating export file: %s" msgstr "Genererar exportfil: %s" -# -#: dlltool.c:1777 +#: dlltool.c:1853 #, c-format msgid "Unable to open temporary assembler file: %s" -msgstr "Kan inte öppna temporär assemblerfil: %s" +msgstr "Kan inte öppna temporär assemblerfil: %s" -# -#: dlltool.c:1780 +#: dlltool.c:1856 #, c-format msgid "Opened temporary file: %s" -msgstr "Öppnade temporär fil: %s" +msgstr "Öppnade temporär fil: %s" -# -#: dlltool.c:2004 +#: dlltool.c:2086 msgid "Generated exports file" msgstr "Genererade exportfil" -# -#: dlltool.c:2266 +#: dlltool.c:2378 #, c-format msgid "bfd_open failed open stub file: %s" -msgstr "bfd_open misslyckades att öppna stubbfil: %s" +msgstr "bfd_open lyckades inte öppna stubbfil: %s" -# -#: dlltool.c:2269 +#: dlltool.c:2381 #, c-format msgid "Creating stub file: %s" msgstr "Skapar stubbfil: %s" -# -#: dlltool.c:2658 +#: dlltool.c:2766 #, c-format msgid "failed to open temporary head file: %s" -msgstr "misslyckades att öppna temporär huvudfil: %s" +msgstr "lyckades inte öppna temporär huvudfil: %s" -# -#: dlltool.c:2717 +#: dlltool.c:2825 #, c-format msgid "failed to open temporary tail file: %s" -msgstr "misslyckades att öppna temporär svansfil: %s" +msgstr "lyckades inte öppna temporär svansfil: %s" -# -#: dlltool.c:2785 +#: dlltool.c:2892 #, c-format msgid "Can't open .lib file: %s" -msgstr "Kan inte öppna .lib-fil: %s" +msgstr "Kan inte öppna .lib-fil: %s" -# -#: dlltool.c:2788 +#: dlltool.c:2895 #, c-format msgid "Creating library file: %s" msgstr "Skapar biblioteksfil: %s" -# -#: dlltool.c:2847 +#: dlltool.c:2951 #, c-format msgid "cannot delete %s: %s" -msgstr "kan inte ta bort %s: %s" +msgstr "kan inte radera %s: %s" -# -#: dlltool.c:2851 +#: dlltool.c:2955 msgid "Created lib file" msgstr "Skapade biblioteksfilen" -# -#: dlltool.c:2956 +#: dlltool.c:3062 #, c-format msgid "Warning, ignoring duplicate EXPORT %s %d,%d" msgstr "Varning, ignorerar dubbel EXPORT %s %d,%d" -# -#: dlltool.c:2962 +#: dlltool.c:3068 #, c-format msgid "Error, duplicate EXPORT with oridinals: %s" msgstr "Fel, dubbel EXPORT med ordningstal: %s" -# -# Här bearbetas definitionerna (sorteras bl.a.) -#: dlltool.c:3089 +#: dlltool.c:3191 msgid "Processing definitions" msgstr "Bearbetar definitioner" -# -#: dlltool.c:3127 +#: dlltool.c:3223 msgid "Processed definitions" -msgstr "Definitionerna är bearbetade" +msgstr "Definitionerna är bearbetade" -# -# BUGG: Kolon fattas #. xgetext:c-format -#: dlltool.c:3138 dllwrap.c:519 +#: dlltool.c:3234 dllwrap.c:495 #, c-format -msgid "Usage %s \n" -msgstr "Användning: %s \n" +msgid "Usage %s \n" +msgstr "Användning: %s \n" -# #. xgetext:c-format -#: dlltool.c:3140 +#: dlltool.c:3236 #, c-format msgid " -m --machine Create as DLL for . [default: %s]\n" -msgstr " -m --machine Skapa som DLL för . [förval: %s]\n" +msgstr " -m --machine Skapa som DLL för . [förval: %s]\n" -# -#: dlltool.c:3141 +#: dlltool.c:3237 msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -msgstr " möjliga : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" +msgstr " möjliga : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -# -#: dlltool.c:3142 +#: dlltool.c:3238 msgid " -e --output-exp Generate an export file.\n" msgstr " -e --output-exp Generera en exportfil.\n" -# -#: dlltool.c:3143 +#: dlltool.c:3239 msgid " -l --output-lib Generate an interface library.\n" -msgstr " -l --output-lib Generera ett gränssnittsbibliotek.\n" +msgstr " -l --output-lib Generera ett gränssnittsbibliotek.\n" -# -#: dlltool.c:3144 +#: dlltool.c:3240 msgid " -a --add-indirect Add dll indirects to export file.\n" -msgstr " -a --add-indirect Lägg till indirekta dll till exportfilen.\n" +msgstr " -a --add-indirect Lägg till indirekta dll till exportfilen.\n" -# -#: dlltool.c:3145 +#: dlltool.c:3241 msgid " -D --dllname Name of input dll to put into interface lib.\n" -msgstr " -D --dllname Namn på indata-dll att infoga i gränssnittsbiblioteket.\n" +msgstr " -D --dllname Namn pÃ¥ indata-dll att infoga i gränssnittsbiblioteket.\n" -# -#: dlltool.c:3146 +#: dlltool.c:3242 msgid " -d --input-def Name of .def file to be read in.\n" -msgstr " -d --input-def Namn på .def-fil att läsa in.\n" +msgstr " -d --input-def Namn pÃ¥ .def-fil att läsa in.\n" -# -#: dlltool.c:3147 +#: dlltool.c:3243 msgid " -z --output-def Name of .def file to be created.\n" -msgstr " -z --output-def Namn på .def-fil att skapa.\n" +msgstr " -z --output-def Namn pÃ¥ .def-fil att skapa.\n" -# -#: dlltool.c:3148 +#: dlltool.c:3244 msgid " --export-all-symbols Export all symbols to .def\n" msgstr " --export-all-symbols Exportera alla symboler till .def\n" -# -# Följande sträng har den beskrivande delen indenterad två tecken -# extra i den engelska texten för att två flaggor är för långa. I den -# svenska översättningen är de indenterade tre tecken extra för att -# den ena flaggan blev ytterligare ett tecken för lång. -#: dlltool.c:3149 +# Följande sträng har den beskrivande delen indenterad tvÃ¥ tecken +# extra i den engelska texten för att tvÃ¥ flaggor är för lÃ¥nga. I den +# svenska översättningen är de indenterade tre tecken extra för att +# den ena flaggan blev ytterligare ett tecken för lÃ¥ng. +#: dlltool.c:3245 msgid " --no-export-all-symbols Only export listed symbols\n" msgstr " --no-export-all-symbols Exportera endast anvisade symboler\n" -# -# Följande sträng har den beskrivande delen indenterad två tecken -# extra i den engelska texten för att två flaggor är för långa. I den -# svenska översättningen är de indenterade tre tecken extra för att -# den ena flaggan blev ytterligare ett tecken för lång. -#: dlltool.c:3150 +# Följande sträng har den beskrivande delen indenterad tvÃ¥ tecken +# extra i den engelska texten för att tvÃ¥ flaggor är för lÃ¥nga. I den +# svenska översättningen är de indenterade tre tecken extra för att +# den ena flaggan blev ytterligare ett tecken för lÃ¥ng. +#: dlltool.c:3246 msgid " --exclude-symbols Don't export \n" msgstr " --exclude-symbols Exportera inte symboler i \n" -# -#: dlltool.c:3151 +#: dlltool.c:3247 msgid " --no-default-excludes Clear default exclude symbols\n" -msgstr " --no-default-excludes Inga automatiskt undantagna symboler\n" +msgstr " --no-default-excludes LÃ¥t bli att inte exportera vissa standardsymboler\n" -# -#: dlltool.c:3152 +#: dlltool.c:3248 msgid " -b --base-file Read linker generated base file.\n" -msgstr " -b --base-file Läs den länkargenererade basfilen.\n" +msgstr " -b --base-file Läs den länkgenererade basfilen.\n" -# -#: dlltool.c:3153 +#: dlltool.c:3249 msgid " -x --no-idata4 Don't generate idata$4 section.\n" msgstr " -x --no-idata4 Generera ingen idata$4-sektion.\n" -# -#: dlltool.c:3154 +#: dlltool.c:3250 msgid " -c --no-idata5 Don't generate idata$5 section.\n" msgstr " -c --no-idata5 Generera ingen idata$5-sektion.\n" -# -#: dlltool.c:3155 +#: dlltool.c:3251 msgid " -U --add-underscore Add underscores to symbols in interface library.\n" -msgstr " -U --add-underscore Lägg till understreck på symboler i gränssnittsbiblioteket.\n" +msgstr " -U --add-underscore Sätt dit understreck pÃ¥ symboler i gränssnittsbiblioteket.\n" -# -#: dlltool.c:3156 +#: dlltool.c:3252 msgid " -k --kill-at Kill @ from exported names.\n" -msgstr " -k --kill-at Utplåna @ från exporterade namn.\n" +msgstr " -k --kill-at UtplÃ¥na @ frÃ¥n exporterade namn.\n" -# -#: dlltool.c:3157 +#: dlltool.c:3253 msgid " -A --add-stdcall-alias Add aliases without @.\n" -msgstr " -A --add-stdcall-alias Lägg till alias utan @.\n" +msgstr " -A --add-stdcall-alias Tillför alias utan @.\n" -# -#: dlltool.c:3158 +#: dlltool.c:3254 msgid " -S --as Use for assembler.\n" -msgstr " -S --as Använd som assemblerare.\n" +msgstr " -S --as Använd som assemblerare.\n" -# -#: dlltool.c:3159 +#: dlltool.c:3255 msgid " -f --as-flags Pass to the assembler.\n" msgstr " -f --as-flags Skicka till assembleraren.\n" -# -#: dlltool.c:3160 +#: dlltool.c:3256 msgid " -C --compat-implib Create backward compatible import library.\n" -msgstr " -C --compat-implib Skapa bakåtkompatibelt importbibliotek.\n" +msgstr " -C --compat-implib Skapa bakÃ¥tkompatibelt importbibliotek.\n" -# -#: dlltool.c:3161 +#: dlltool.c:3257 msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" -msgstr " -n --no-delete Behåll temp.-filer (repetera för ökat antal).\n" +msgstr " -n --no-delete BehÃ¥ll temporärfiler (repetera för ökat antal).\n" -# -#: dlltool.c:3162 +#: dlltool.c:3258 msgid " -v --verbose Be verbose.\n" -msgstr " -v --verbose Var mångordig.\n" +msgstr " -v --verbose Beskriv utförligt.\n" -# -#: dlltool.c:3163 +#: dlltool.c:3259 msgid " -V --version Display the program version.\n" msgstr " -V --version Visa versionsinformation om programmet.\n" -# -#: dlltool.c:3164 +#: dlltool.c:3260 msgid " -h --help Display this information.\n" -msgstr " -h --help Visa den här informationen.\n" +msgstr " -h --help Visa den här informationen.\n" -# -#: dlltool.c:3166 +#: dlltool.c:3262 msgid " -M --mcore-elf Process mcore-elf object files into .\n" msgstr " -M --mcore-elf Behandla mcore-elf-objektfiler till .\n" -# -#: dlltool.c:3167 +#: dlltool.c:3263 msgid " -L --linker Use as the linker.\n" -msgstr " -L --linker Använd som länkare.\n" +msgstr " -L --linker Använd som länkare.\n" -# -# Justeringen blir fel här för flaggan är för lång. -#: dlltool.c:3168 +# Indenteringen blir fel här för är för lÃ¥ng. +#: dlltool.c:3264 msgid " -F --linker-flags Pass to the linker.\n" -msgstr " -F --linker-flags Skicka till länkaren.\n" +msgstr " -F --linker-flags Skicka till länkaren.\n" -# -#: dlltool.c:3315 +#: dlltool.c:3418 #, c-format msgid "Unable to open base-file: %s" -msgstr "Kan inte öppna basfilen: %s" +msgstr "Kan inte öppna basfilen: %s" -# -#: dlltool.c:3344 +#: dlltool.c:3450 #, c-format msgid "Machine '%s' not supported" msgstr "Maskin \"%s\" hanteras inte" -# -#: dlltool.c:3447 dllwrap.c:240 +#: dlltool.c:3553 dllwrap.c:214 #, c-format msgid "Tried file: %s" msgstr "Provade fil: %s" -# -#: dlltool.c:3454 dllwrap.c:247 +#: dlltool.c:3560 dllwrap.c:221 #, c-format msgid "Using file: %s" -msgstr "Använder fil: %s" +msgstr "Använder fil: %s" -# -#: dllwrap.c:334 +#: dllwrap.c:308 #, c-format msgid "Keeping temporary base file %s" -msgstr "Behåller temporär basfil %s" +msgstr "BehÃ¥ller temporär basfil %s" -# -#: dllwrap.c:336 +#: dllwrap.c:310 #, c-format msgid "Deleting temporary base file %s" -msgstr "Tar bort temporär basfil %s" +msgstr "Tar bort temporär basfil %s" -# -#: dllwrap.c:350 +#: dllwrap.c:324 #, c-format msgid "Keeping temporary exp file %s" -msgstr "Behåller temporär exportfil %s" +msgstr "BehÃ¥ller temporär exportfil %s" -# -#: dllwrap.c:352 +#: dllwrap.c:326 #, c-format msgid "Deleting temporary exp file %s" -msgstr "Tar bort temporär exportfil %s" +msgstr "Tar bort temporär exportfil %s" -# -#: dllwrap.c:365 +#: dllwrap.c:339 #, c-format msgid "Keeping temporary def file %s" -msgstr "Behåller temporär def-fil %s" +msgstr "BehÃ¥ller temporär def-fil %s" -# -#: dllwrap.c:367 +#: dllwrap.c:341 #, c-format msgid "Deleting temporary def file %s" -msgstr "Tar bort temporär def-fil %s" +msgstr "Tar bort temporär def-fil %s" -# -#: dllwrap.c:520 +#: dllwrap.c:496 msgid " Generic options:\n" msgstr " Generella flaggor:\n" -# -#: dllwrap.c:521 +#: dllwrap.c:497 msgid " --quiet, -q Work quietly\n" msgstr " --quiet, -q Arbeta under tystnad\n" -# -#: dllwrap.c:522 +#: dllwrap.c:498 msgid " --verbose, -v Verbose\n" -msgstr " --verbose, -v Mångordig\n" +msgstr " --verbose, -v Utförlig\n" -# -#: dllwrap.c:523 +#: dllwrap.c:499 msgid " --version Print dllwrap version\n" -msgstr " --version Visa versionsinformation för dllwrap\n" +msgstr " --version Visa versionsinformation för dllwrap\n" -# -#: dllwrap.c:524 +#: dllwrap.c:500 msgid " --implib Synonym for --output-lib\n" -msgstr " --implib Synonym för --output-lib\n" +msgstr " --implib Synonym för --output-lib\n" -# -#: dllwrap.c:525 +#: dllwrap.c:501 #, c-format msgid " Options for %s:\n" -msgstr " Flaggor för %s:\n" +msgstr " Flaggor för %s:\n" -# -#: dllwrap.c:526 +#: dllwrap.c:502 msgid " --driver-name Defaults to \"gcc\"\n" -msgstr " --driver-name Förvald till \"gcc\"\n" +msgstr " --driver-name Förvald till \"gcc\"\n" -# -#: dllwrap.c:527 +#: dllwrap.c:503 msgid " --driver-flags Override default ld flags\n" -msgstr " --driver-flags Förbigå förvalda flaggor för ld\n" +msgstr " --driver-flags FörbigÃ¥ förvalda flaggor för ld\n" -# -#: dllwrap.c:528 +#: dllwrap.c:504 msgid " --dlltool-name Defaults to \"dlltool\"\n" -msgstr " --dlltool-name Förvalt till \"dlltool\"\n" +msgstr " --dlltool-name Förvalt till \"dlltool\"\n" -# -#: dllwrap.c:529 +#: dllwrap.c:505 msgid " --entry Specify alternate DLL entry point\n" -msgstr " --entry Ange alternativ ingångspunkt i DLL:en\n" +msgstr " --entry Ge alternativ ingÃ¥ngspunkt i DLL:en\n" -# -#: dllwrap.c:530 +#: dllwrap.c:506 msgid " --image-base Specify image base address\n" -msgstr " --image-base Ange bildens basadress\n" +msgstr " --image-base Ge avbildens basadress\n" -# -#: dllwrap.c:531 +#: dllwrap.c:507 msgid " --target i386-cygwin32 or i386-mingw32\n" msgstr " --target i386-cygwin32 eller i386-mingw32\n" -# -#: dllwrap.c:532 +#: dllwrap.c:508 msgid " --dry-run Show what needs to be run\n" -msgstr " --dry-run Gör inget annat än att visa vad som måste köras\n" +msgstr " --dry-run Visa endast vad som behöver göras, verkställ inte\n" -# -#: dllwrap.c:533 +#: dllwrap.c:509 msgid " --mno-cygwin Create Mingw DLL\n" msgstr " --mno-cygwin Skapa Mingw-DLL\n" -# -#: dllwrap.c:534 +#: dllwrap.c:510 msgid " Options passed to DLLTOOL:\n" msgstr " Flaggor som skickas till DLLVERKTYG:\n" -# -#: dllwrap.c:535 +#: dllwrap.c:511 msgid " --machine \n" msgstr " --machine \n" -# -#: dllwrap.c:536 +#: dllwrap.c:512 msgid " --output-exp Generate export file.\n" msgstr " --output-exp Generera exportfil.\n" -# -#: dllwrap.c:537 +#: dllwrap.c:513 msgid " --output-lib Generate input library.\n" msgstr " --output-lib Generera indatabibliotek.\n" -# -#: dllwrap.c:538 +#: dllwrap.c:514 msgid " --add-indirect Add dll indirects to export file.\n" -msgstr " --add-indirect Lägg till indirekta dll till exportfilen.\n" +msgstr " --add-indirect Lägg till indirekta dll till exportfilen.\n" -# -#: dllwrap.c:539 +#: dllwrap.c:515 msgid " --dllname Name of input dll to put into output lib.\n" -msgstr " --dllname Namn på indata-dll som ska infogas i utdatabiblioteket.\n" +msgstr " --dllname Namn pÃ¥ indata-dll som ska infogas i utdatabiblioteket.\n" -# -#: dllwrap.c:540 +#: dllwrap.c:516 msgid " --def Name input .def file\n" -msgstr " --def Namnge .def-indatafilen\n" +msgstr " --def Välj .def-infil\n" -# -#: dllwrap.c:541 +#: dllwrap.c:517 msgid " --output-def Name output .def file\n" -msgstr " --output-def Namnge .def-utdatafilen\n" +msgstr " --output-def Välj .def-utfil\n" -# -#: dllwrap.c:542 +#: dllwrap.c:518 msgid " --export-all-symbols Export all symbols to .def\n" msgstr " --export-all-symbols Exportera alla symboler till .def\n" -# -#: dllwrap.c:543 +#: dllwrap.c:519 msgid " --no-export-all-symbols Only export .drectve symbols\n" msgstr " --no-export-all-symbols Exportera endast .drectve-symboler\n" -# -#: dllwrap.c:544 +#: dllwrap.c:520 msgid " --exclude-symbols Exclude from .def\n" -msgstr " --exclude-symbols Undanta symbolerna i från .def\n" +msgstr " --exclude-symbols Undanta symbolerna i frÃ¥n .def\n" -# -#: dllwrap.c:545 +#: dllwrap.c:521 msgid " --no-default-excludes Zap default exclude symbols\n" -msgstr " --no-default-excludes Inga automatiskt undantagna symboler\n" +msgstr " --no-default-excludes Bortse frÃ¥n förvalt undantagna symboler\n" -# -#: dllwrap.c:546 +#: dllwrap.c:522 msgid " --base-file Read linker generated base file\n" -msgstr " --base-file Läs länkargenererad basfil\n" +msgstr " --base-file Läs den länkgenererad basfil\n" -# -#: dllwrap.c:547 +#: dllwrap.c:523 msgid " --no-idata4 Don't generate idata$4 section\n" msgstr " --no-idata4 Generera ingen idata$4-sektion\n" -# -#: dllwrap.c:548 +#: dllwrap.c:524 msgid " --no-idata5 Don't generate idata$5 section\n" msgstr " --no-idata5 Generera ingen idata$5-sektion\n" -# -#: dllwrap.c:549 +#: dllwrap.c:525 msgid " -U Add underscores to .lib\n" -msgstr " -U Lägg till understreck i .lib\n" +msgstr " -U Sätt dit understreck i .lib\n" -# -#: dllwrap.c:550 +#: dllwrap.c:526 msgid " -k Kill @ from exported names\n" -msgstr " -k Utplåna @ från exporterade namn\n" +msgstr " -k UtplÃ¥na @ frÃ¥n exporterade namn\n" -# -#: dllwrap.c:551 +#: dllwrap.c:527 msgid " --add-stdcall-alias Add aliases without @\n" -msgstr " --add-stdcall-alias Lägg till alias utan @\n" +msgstr " --add-stdcall-alias Tillför alias utan @\n" -# -#: dllwrap.c:552 +#: dllwrap.c:528 msgid " --as Use for assembler\n" -msgstr " --as Använd som assemblerare\n" +msgstr " --as Använd som assemblerare\n" -# -#: dllwrap.c:553 +#: dllwrap.c:529 msgid " --nodelete Keep temp files.\n" -msgstr " --nodelete Behåll temporära filer.\n" +msgstr " --nodelete BehÃ¥ll temporära filer.\n" -# -#: dllwrap.c:554 +#: dllwrap.c:530 msgid " Rest are passed unmodified to the language driver\n" -msgstr " Övriga flaggor skickas oförändrade till programspråksenheten\n" +msgstr " Övriga flaggor skickas oförändrade till programsprÃ¥ksenheten\n" -# -#: dllwrap.c:824 +#: dllwrap.c:802 msgid "Must provide at least one of -o or --dllname options" -msgstr "Ange minst en av flaggorna -o eller --dllname" +msgstr "Du mÃ¥ste ange minst en av flaggorna -o och --dllname" -# -#: dllwrap.c:852 +#: dllwrap.c:830 msgid "" "no export definition file provided.\n" "Creating one, but that may not be what you want" msgstr "" -"ingen export-definitionsfil angavs.\n" -"En sådan skapas, men det är kanske inte vad du vill" +"ingen export-definitionsfil gavs.\n" +"En sÃ¥dan skapas, men det är kanske inte vad du vill" -# -# Indenteringen är ökad för att översättningen ska få plats framför -# kolonet på alla 4 strängar. -#: dllwrap.c:1014 +# Indenteringen är ökad för att översättningen ska fÃ¥ plats framför +# kolonet pÃ¥ alla 4 strängar. +#: dllwrap.c:992 #, c-format msgid "DLLTOOL name : %s\n" msgstr "DLLVERKTYG namn : %s\n" -# -# Indenteringen är ökad för att översättningen ska få plats framför -# kolonet på alla 4 strängar. -#: dllwrap.c:1015 +# Indenteringen är ökad för att översättningen ska fÃ¥ plats framför +# kolonet pÃ¥ alla 4 strängar. +#: dllwrap.c:993 #, c-format msgid "DLLTOOL options : %s\n" msgstr "DLLVERKTYG flaggor: %s\n" -# -# Indenteringen är ökad för att översättningen ska få plats framför -# kolonet på alla 4 strängar. -#: dllwrap.c:1016 +# Indenteringen är ökad för att översättningen ska fÃ¥ plats framför +# kolonet pÃ¥ alla 4 strängar. +#: dllwrap.c:994 #, c-format msgid "DRIVER name : %s\n" -msgstr "DRIVRUTIN namn : %s\n" +msgstr "ENHET namn : %s\n" -# -# Indenteringen är ökad för att översättningen ska få plats framför -# kolonet på alla 4 strängar. -#: dllwrap.c:1017 +# Indenteringen är ökad för att översättningen ska fÃ¥ plats framför +# kolonet pÃ¥ alla 4 strängar. +#: dllwrap.c:995 #, c-format msgid "DRIVER options : %s\n" -msgstr "DRIVRUTIN flaggor : %s\n" +msgstr "ENHET flaggor : %s\n" -# -#: ieee.c:317 +#: emul_aix.c:58 +#, c-format +msgid " [-g] - 32 bit small archive\n" +msgstr " [-g] - 32-bitars litet arkiv\n" + +#: emul_aix.c:59 +msgid " [-X32] - ignores 64 bit objects\n" +msgstr " [-X32] - ignorerar 64-bitarsobjekt\n" + +#: emul_aix.c:60 +msgid " [-X64] - ignores 32 bit objects\n" +msgstr " [-X64] - ignorerar 32-bitarsobject\n" + +#: emul_aix.c:61 +msgid " [-X32_64] - accepts 32 and 64 bit objects\n" +msgstr " [-X32_64] - accepterar 32- och 64-bitarsobjekt\n" + +#: ieee.c:326 msgid "unexpected end of debugging information" -msgstr "oväntat slut på felsökningsinformationen" +msgstr "oväntat slut pÃ¥ felsökningsinformationen" -# -#: ieee.c:412 +#: ieee.c:421 msgid "invalid number" msgstr "ogiltigt tal" -# -#: ieee.c:471 +#: ieee.c:480 msgid "invalid string length" -msgstr "ogiltig stränglängd" +msgstr "ogiltig stränglängd" -# -#: ieee.c:528 ieee.c:569 +#: ieee.c:537 ieee.c:578 msgid "expression stack overflow" -msgstr "överspill i uttrycksstacken" +msgstr "överspill i uttrycksstacken" -# -#: ieee.c:548 +#: ieee.c:557 msgid "unsupported IEEE expression operator" -msgstr "IEEE-uttrycksoperator som inte stöds" +msgstr "IEEE-uttrycksoperator som inte hanteras" -# -#: ieee.c:563 +#: ieee.c:572 msgid "unknown section" -msgstr "okänd sektion" +msgstr "okänd sektion" -# -#: ieee.c:584 +#: ieee.c:593 msgid "expression stack underflow" msgstr "underspill i uttrycksstacken" -# -#: ieee.c:598 +#: ieee.c:607 msgid "expression stack mismatch" msgstr "felbalanserad uttrycksstack" -# -#: ieee.c:637 +#: ieee.c:646 msgid "unknown builtin type" -msgstr "okänd inbyggd typ" +msgstr "okänd inbyggd typ" -# -#: ieee.c:782 +#: ieee.c:791 msgid "BCD float type not supported" -msgstr "flyttalstyp BCD stöds inte" +msgstr "flyttalstypen BCD hanteras inte" -# -#: ieee.c:928 +#: ieee.c:937 msgid "unexpected number" -msgstr "oväntat tal" +msgstr "oväntat tal" -# -#: ieee.c:935 +#: ieee.c:944 msgid "unexpected record type" -msgstr "oväntad posttyp" +msgstr "oväntad posttyp" -# -#: ieee.c:968 +#: ieee.c:977 msgid "blocks left on stack at end" -msgstr "block kvar på stacken på slutet" +msgstr "block kvar pÃ¥ stacken pÃ¥ slutet" -# -#: ieee.c:1233 +#: ieee.c:1242 msgid "unknown BB type" -msgstr "okänd BB-typ" +msgstr "okänd BB-typ" -# -#: ieee.c:1242 +#: ieee.c:1251 msgid "stack overflow" -msgstr "överspill i stacken" +msgstr "överspill i stacken" -# -#: ieee.c:1267 +#: ieee.c:1276 msgid "stack underflow" msgstr "underspill i stacken" -# -#: ieee.c:1381 ieee.c:1453 ieee.c:2152 +#: ieee.c:1390 ieee.c:1462 ieee.c:2161 msgid "illegal variable index" -msgstr "otillåtet variabelindex" +msgstr "otillÃ¥tet variabelindex" -# -#: ieee.c:1431 +#: ieee.c:1440 msgid "illegal type index" -msgstr "otillåtet typindex" +msgstr "otillÃ¥tet typindex" -# -#: ieee.c:1441 ieee.c:1478 +#: ieee.c:1450 ieee.c:1487 msgid "unknown TY code" -msgstr "okänd TY-kod" +msgstr "okänd TY-kod" -# -#: ieee.c:1460 +#: ieee.c:1469 msgid "undefined variable in TY" msgstr "odefinierad variabel i TY" -# #. Pascal file name. FIXME. -#: ieee.c:1871 +#: ieee.c:1880 msgid "Pascal file name not supported" -msgstr "Pascal-filnamn stöds inte" +msgstr "Pascalfilnamn hanteras inte" -# -# BUGG: qualif>i Set the input binary file format\n" +" -O --output-target= Set the output binary file format\n" +" -T --header-file= Read for NLM header information\n" +" -l --linker= Use for any linking\n" +" -d --debug Display on stderr the linker command line\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" msgstr "" -"Användning: %s [-dhV] [-I bfd-namn] [-O bfd-namn] [-T huvudfil] [-l länkare]\n" -" [--input-target=bfd-namn] [--output-target=bfd-namn]\n" -" [--header-file=fil] [--linker=länkare] [--debug]\n" -" [--help] [--version]\n" -" [indatafil [utdatafil]]\n" +" Flaggorna är:\n" +" -I --input-target= Sätt formatet pÃ¥ inbinärfilen\n" +" -O --output-target= Sätt formatet pÃ¥ utbinärfilen\n" +" -T --header-file= Läs NLM-huvuden frÃ¥n \n" +" -l --linker= Använd för att länka\n" +" -d --debug Visa länkkommandot pÃ¥ standard error\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programmets versionsinformation\n" -# #: nlmconv.c:1153 #, c-format msgid "support not compiled in for %s" -msgstr "inte kompilerad med stöd för %s" +msgstr "hantering av %s uteslöts vid kompileringen" -# #: nlmconv.c:1193 msgid "make section" msgstr "skapa sektion" -# #: nlmconv.c:1207 msgid "set section size" -msgstr "sätt sektionsstorlek" +msgstr "sätt sektionsstorlek" -# #: nlmconv.c:1213 msgid "set section alignment" -msgstr "sätt jämn gräns för sektion" +msgstr "sätt sektionsjustering" -# #: nlmconv.c:1217 msgid "set section flags" -msgstr "sätt sektionsflaggor" +msgstr "sätt sektionsflaggor" -# #: nlmconv.c:1228 msgid "set .nlmsections size" -msgstr "sätt storlek på .nlmsektionen" +msgstr "sätt storlek pÃ¥ .nlmsections" -# #: nlmconv.c:1316 nlmconv.c:1324 nlmconv.c:1333 nlmconv.c:1338 msgid "set .nlmsection contents" -msgstr "sätt inehåll i .nlmsektionen" +msgstr "sätt inehÃ¥ll i .nlmsection" -# -#: nlmconv.c:1841 +#: nlmconv.c:1839 msgid "stub section sizes" msgstr "stubbsektionsstorlek" -# -#: nlmconv.c:1890 +#: nlmconv.c:1888 msgid "writing stub" msgstr "skriver stubbe" -# -#: nlmconv.c:1980 +# FIXME +#: nlmconv.c:1977 #, c-format msgid "unresolved PC relative reloc against %s" -msgstr "olöst PC-relativ omlokalisering mot %s" +msgstr "ouppklarad programräknarrelativ relokering mot %s" -# -#: nlmconv.c:2044 +# FIXME +#: nlmconv.c:2041 #, c-format msgid "overflow when adjusting relocation against %s" -msgstr "överspill vid justeringen av omlokalisering mot %s" +msgstr "överspill vid justeringen av relokering mot %s" -# -#: nlmconv.c:2161 +#: nlmconv.c:2158 #, c-format msgid "%s: execution of %s failed: " -msgstr "%s: exekvering av %s misslyckades: " +msgstr "%s: lyckades inte köra %s: " -# -#: nlmconv.c:2176 +#: nlmconv.c:2173 #, c-format msgid "Execution of %s failed" -msgstr "Exekvering av %s misslyckades" +msgstr "Lyckades inte köra %s" -# -#: nm.c:300 +#: nm.c:283 size.c:85 strings.c:657 #, c-format -msgid "Usage: %s [OPTION]... [FILE]...\n" -msgstr "Användning: %s [FLAGGA]... [FIL]...\n" +msgid "Usage: %s [option(s)] [file(s)]\n" +msgstr "Användning: %s [flaggor] [fil(er)]\n" -# -#: nm.c:301 -msgid "List symbols from FILEs (a.out by default).\n" -msgstr "Lista symboler i FILerna (eller a.out).\n" +#: nm.c:284 +msgid " List symbols in [file(s)] (a.out by default).\n" +msgstr "Lista symboler i [fil(er)] (a.out som standard).\n" -# -#: nm.c:302 +#: nm.c:285 msgid "" -"\n" +" The options are:\n" " -a, --debug-syms Display debugger-only symbols\n" " -A, --print-file-name Print name of the input file before every symbol\n" " -B Same as --format=bsd\n" " -C, --demangle[=STYLE] Decode low-level symbol names into user-level names\n" " The STYLE, if specified, can be `auto' (the default),\n" -" `gnu', 'lucid', 'arm', 'hp', 'edg' or 'gnu-new-abi'\n" +" `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" " --no-demangle Do not demangle low-level symbol names\n" " -D, --dynamic Display dynamic symbols instead of normal symbols\n" " --defined-only Display only defined symbols\n" @@ -1728,7 +1505,6 @@ msgid "" " -f, --format=FORMAT Use the output format FORMAT. FORMAT can be `bsd',\n" " `sysv' or `posix'. The default is `bsd'\n" " -g, --extern-only Display only external symbols\n" -" -h, --help Display this information\n" " -l, --line-numbers Use debugging information to find a filename and\n" " line number for each symbol\n" " -n, --numeric-sort Sort symbols numerically by address\n" @@ -1736,79 +1512,100 @@ msgid "" " -p, --no-sort Do not sort the symbols\n" " -P, --portability Same as --format=posix\n" " -r, --reverse-sort Reverse the sense of the sort\n" +" -S, --print-size Print size of defined symbols\n" " -s, --print-armap Include index for symbols from archive members\n" " --size-sort Sort symbols by size\n" " -t, --radix=RADIX Use RADIX for printing symbol values\n" " --target=BFDNAME Specify the target object format as BFDNAME\n" " -u, --undefined-only Display only undefined symbols\n" -" -V, --version Display this program's version number\n" " -X 32_64 (ignored)\n" +" -h, --help Display this information\n" +" -V, --version Display this program's version number\n" "\n" msgstr "" -"\n" -" -a, --debug-syms Visa endast felsökningssymboler\n" -" -A, --print-file-name Skriv namnet på indatafilen före varje symbol\n" +" Flaggorna är:\n" +" -a, --debug-syms Visa endast felsökningssymboler\n" +" -A, --print-file-name Skriv infilens namn före varje symbol\n" " -B Samma som --format=bsd\n" -" -C, --demangle[=STIL] Avkoda lågnivåsymbolnamn till användarnivånamn\n" -" STIL kan vara \"auto\" (det förvalda), \"gnu\",\n" -" \"lucid\", \"arm\", \"hp\", \"edg\" eller \"gnu-new-abi\"\n" -" --no-demangle Avkoda inte lågnivåsymbolnamn\n" -" -D, --dynamic Visa dynamiska symboler istället för vanliga symboler\n" +" -C, --demangle[=STIL] Omkoda manglade symbolnamn till användarform\n" +" STIL kan vara \"auto\" (förval), \"gnu\", \"lucid\",\n" +" \"arm\", \"hp\", \"edg\", \"gnu-v3\", \"java\",\n" +" eller \"gnat\"\n" +" --no-demangle Avkoda inte manglade symbolnamn\n" +" -D, --dynamic Visa dynamiska symboler istället för vanliga symboler\n" " --defined-only Visa endast definierade symboler\n" -" -e (ignoreras)\n" -" -f, --format=FORMAT Använd FORMAT som utdataformat. FORMAT kan vara\n" -" \"bsd\", \"sysv\" eller \"posix\". Förvalet är \"bsd\"\n" +" -e (ignorerad)\n" +" -f, --format=FORMAT Använd FORMAT som utdataformat. FORMAT kan vara\n" +" \"bsd\", \"sysv\" eller \"posix\". Förvalet är \"bsd\"\n" " -g, --extern-only Visa endast externa symboler\n" -" -h, --help Visa den här hjälpen\n" -" -l, --line-numbers Använd felsökningsinformationen för att slå upp\n" -" filnamn och radnummer för varje symbol\n" +" -l, --line-numbers Använd felsökningsinformationen för att slÃ¥ upp\n" +" filnamn och radnummer för varje symbol\n" " -n, --numeric-sort Sortera symboler numeriskt efter adress\n" " -o Samma som -A\n" " -p, --no-sort Sortera inte symbolerna\n" " -P, --portability Samma som --format=posix\n" -" -r, --reverse-sort Sortera åt andra hållet\n" -" -s, --print-armap Ta med index för symboler i arkivmedlemmar\n" +" -r, --reverse-sort Sortera baklänges\n" +" -S, --print-size Skriv ut storleken pÃ¥ definierade symboler\n" +" -s, --print-armap Ta med index för symboler i arkivmedlemmar\n" " --size-sort Sortera symboler efter storlek\n" -" -t, --radix=BAS Skriv tal i talbasen BAS\n" -" --target=BFD-NAMN Ange målobjektets format som BFD-NAMN\n" +" -t, --radix=BAS Skriv ut siffervärden i talbas BAS\n" +" --target=BFD-NAMN Välj BFD-NAMN som mÃ¥lobjektets format\n" " -u, --undefined-only Visa endast odefinierade symboler\n" +" -X 32_64 (ignorerad)\n" +" -h, --help Visa denna hjälptext\n" " -V, --version Visa programmets versionsinformation\n" -" -X 32_64 (ignoreras)\n" "\n" -# -#: nm.c:334 objdump.c:216 +#: nm.c:319 objdump.c:250 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Rapportera fel till %s.\n" -"Skicka synpunkter på översättningen till sv@li.org.\n" +"Rapportera synpunkter pÃ¥ översättningen till sv@li.org.\n" -# -#: nm.c:367 +#: nm.c:352 #, c-format msgid "%s: invalid radix" msgstr "%s: ogiltig talbas" -# -#: nm.c:392 +#: nm.c:377 #, c-format msgid "%s: invalid output format" msgstr "%s: ogiltigt utdataformat" -# -#: nm.c:504 +#: nm.c:494 msgid "Only -X 32_64 is supported" -msgstr "Endast -X 32_64 stöds" +msgstr "Endast -X 32_64 hanteras" -# -#: nm.c:546 +#: nm.c:514 +msgid "Using the --size-sort and --undefined-only options together" +msgstr "Användning av --size-sort och --undifined-only samtidigt" + +#: nm.c:515 +msgid "will produce no output, since undefined symbols have no size." +msgstr "ger ingen utdata, eftersom odefinierade symboler inte har nÃ¥gon storlek" + +#: nm.c:543 #, c-format msgid "data size %ld" msgstr "datastorlek %ld" -# -#: nm.c:1340 +#: nm.c:568 readelf.c:5809 readelf.c:5845 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:570 readelf.c:5811 readelf.c:5857 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:572 readelf.c:5813 readelf.c:5860 +#, c-format +msgid ": %d" +msgstr ": %d" + +#: nm.c:1376 #, c-format msgid "" "\n" @@ -1818,11 +1615,10 @@ msgid "" msgstr "" "\n" "\n" -"Odefinierade symboler från %s:\n" +"Odefinierade symboler frÃ¥n %s:\n" "\n" -# -#: nm.c:1342 +#: nm.c:1378 #, c-format msgid "" "\n" @@ -1832,20 +1628,26 @@ msgid "" msgstr "" "\n" "\n" -"Symboler från %s:\n" +"Symboler frÃ¥n %s:\n" "\n" -# -#: nm.c:1343 nm.c:1397 +#: nm.c:1380 nm.c:1438 msgid "" -"Name Value Class Type Size Line Section\n" +"Name Value Class Type Size Line Section\n" "\n" msgstr "" -"Namn Värde Klass Typ Storl. Rad Sektion\n" +"Namn Värde Klass Typ Storlek Rad Sektion\n" "\n" -# -#: nm.c:1394 +#: nm.c:1383 nm.c:1441 +msgid "" +"Name Value Class Type Size Line Section\n" +"\n" +msgstr "" +"Namn Värde Klass Typ Storlek Rad Sektion\n" +"\n" + +#: nm.c:1434 #, c-format msgid "" "\n" @@ -1855,11 +1657,10 @@ msgid "" msgstr "" "\n" "\n" -"Odefinierade symboler från %s[%s]:\n" +"Odefinierade symboler frÃ¥n %s[%s]:\n" "\n" -# -#: nm.c:1396 +#: nm.c:1436 #, c-format msgid "" "\n" @@ -1869,11 +1670,10 @@ msgid "" msgstr "" "\n" "\n" -"Symboler från %s[%s]:\n" +"Symboler frÃ¥n %s[%s]:\n" "\n" -# -#: nm.c:1564 +#: nm.c:1658 msgid "" "\n" "Archive index:\n" @@ -1881,19 +1681,20 @@ msgstr "" "\n" "Arkivindex:\n" -# -#: objcopy.c:363 +#: objcopy.c:414 srconv.c:1952 #, c-format -msgid "Usage: %s in-file [out-file]\n" -msgstr "Användning: %s indatafil [utdatafil]\n" +msgid "Usage: %s [option(s)] in-file [out-file]\n" +msgstr "Användning: %s [flaggor] infil [utfil]\n" -# -#: objcopy.c:364 objcopy.c:433 +#: objcopy.c:415 +msgid " Copies a binary file, possibly transforming it in the process\n" +msgstr " Kopierar en binärfil, och formar möjligen om den\n" + +#: objcopy.c:416 objcopy.c:495 msgid " The options are:\n" -msgstr " Flaggorna är:\n" +msgstr " Flaggorna är:\n" -# -#: objcopy.c:365 +#: objcopy.c:417 msgid "" " -I --input-target Assume input file is in format \n" " -O --output-target Create an output file in format \n" @@ -1902,9 +1703,10 @@ msgid "" " --debugging Convert debugging information, if possible\n" " -p --preserve-dates Copy modified/access timestamps to the output\n" " -j --only-section Only copy section into the output\n" +" --add-gnu-debuglink= Add section .gnu_debuglink linking to \n" " -R --remove-section Remove section from the output\n" " -S --strip-all Remove all symbol and relocation information\n" -" -g --strip-debug Remove all debugging symbols\n" +" -g --strip-debug Remove all debugging symbols & sections\n" " --strip-unneeded Remove all symbols not needed by relocations\n" " -N --strip-symbol Do not copy symbol \n" " -K --keep-symbol Only copy symbol \n" @@ -1938,6 +1740,8 @@ msgid "" " --change-leading-char Force output format's leading character style\n" " --remove-leading-char Remove leading character from global symbols\n" " --redefine-sym = Redefine symbol name to \n" +" --redefine-syms --redefine-sym for all symbol pairs \n" +" listed in \n" " --srec-len Restrict the length of generated Srecords\n" " --srec-forceS3 Restrict the type of generated Srecords to S3\n" " --strip-symbols -N for all symbols listed in \n" @@ -1946,364 +1750,355 @@ msgid "" " --keep-global-symbols -G for all symbols listed in \n" " --weaken-symbols -W for all symbols listed in \n" " --alt-machine-code Use alternate machine code for output\n" +" --prefix-symbols Add to start of every symbol name\n" +" --prefix-sections Add to start of every section name\n" +" --prefix-alloc-sections \n" +" Add to start of every allocatable\n" +" section name\n" " -v --verbose List all object files modified\n" " -V --version Display this program's version number\n" " -h --help Display this output\n" +" --info List object formats & architectures supported\n" msgstr "" -" -I --input-target Antag indatafilens format är \n" -" -O --output-target Skapa utdatafilen i formatet \n" -" -B --binary-architecture Välj arkitektur för utfil när indata är binär\n" -" -F --target Sätt både in- och utformatet till \n" -" --debugging Konvertera felsökningsinfo, om möjligt\n" -" -p --preserve-dates Kopiera ändrings/åtkomsttider till utdatan\n" +" -I --input-target Antag infilens format till \n" +" -O --output-target Skapa utfilen i format \n" +" -B --binary-architecture Välj arkitektur för utfil när indata är binär\n" +" -F --target Sätt bÃ¥de in- och utformatet till \n" +" --debugging Konvertera felsökningsinfo, om möjligt\n" +" -p --preserve-dates Kopiera ändrings/Ã¥tkomsttider till utdatan\n" " -j --only-section Kopiera endast sektion till utdatan\n" -" -R --remove-section Ta bort sektion från utdatan\n" -" -S --strip-all Ta bort all symbol- och omlokaliseringsinfo\n" -" -g --strip-debug Ta bort alla felsökningssymboler\n" -" --strip-unneeded Ta bort symboler onödiga för omlokalisering\n" +" --add-gnu-debuglink= Lägg till .gnu_debuglink-sektion till \n" +" -R --remove-section Ta bort sektion frÃ¥n utdatan\n" +" -S --strip-all Rensa bort all symbol- och relokeringsinfo\n" +" -g --strip-debug Rensa bort alla felsökssymboler och -sektioner\n" +" --strip-unneeded Rensa bort alla symboler som inte behövs för\n" +" relokeringen\n" " -N --strip-symbol Kopiera inte symbol \n" " -K --keep-symbol Kopiera endast symbol \n" " -L --localize-symbol Markera symbol som lokal\n" -" -G --keep-global-symbol Gör alla symboler lokala, förutom \n" +" -G --keep-global-symbol Gör alla symboler lokala, förutom \n" " -W --weaken-symbol Markera symbol som vek\n" " --weaken Markera alla globala symboler som veka\n" " -x --discard-all Ta bort alla icke-globala symboler\n" " -X --discard-locals Ta bort alla kompilatorgenererade symboler\n" " -i --interleave Kopiera endast en av varje byte\n" -" -b --byte Välj ut :e byten i varje intervall\n" +" -b --byte Välj ut :e byten i varje intervall\n" " --gap-fill Fyll luckor mellan sektionerna med \n" " --pad-to Fyll ut efter sista sektionen fram till \n" -" --set-start Sätt startadressen till \n" -" {--change-start|--adjust-start} <ökn>\n" -" Lägg till <ökn> till startadressen\n" -" {--change-addresses|--adjust-vma} <ökn>\n" -" Lägg till <ökn> till LMA, VMA och startadr.\n" +" --set-start Sätt startadressen till \n" +" {--change-start|--adjust-start} <ökn>\n" +" Lägg till <ökn> till startadressen\n" +" {--change-addresses|--adjust-vma} <ökn>\n" +" Lägg till <ökn> till LMA, VMA och startadr.\n" " {--change-section-address|--adjust-section-vma} {=|+|-}\n" -" Ändra LMA och VMA på sektion med \n" +" Ändra LMA och VMA pÃ¥ sektion med \n" " --change-section-lma {=|+|-}\n" -" Ändra LMA på sektion med \n" +" Ändra LMA pÃ¥ sektion med \n" " --change-section-vma {=|+|-}\n" -" Ändra VMA på sektion med \n" +" Ändra VMA pÃ¥ sektion med \n" " {--[no-]change-warnings|--[no-]adjust-warnings}\n" " Varna (inte/[no-]) om en sektion inte finns\n" " --set-section-flags =\n" -" Sätt sektion s attribut till \n" -" --add-section = Lägg till sektion i till utdatan\n" -" --rename-section =[,] Byt namn på sektion till \n" -" --change-leading-char Ändra till utformatets typ av inledningstecken\n" -" --remove-leading-char Ta bort inledningstecken från globala symboler\n" -" --redefine-sym = Definiera om symbolen med namn till \n" -" --srec-len Begränsa längden på genererade S-poster\n" -" --srec-forceS3 Begränsa typen av genererade S-poster till S3\n" -" --strip-symbols -N för alla symboler som listas i \n" -" --keep-symbols -K för alla symboler som listas i \n" -" --localize-symbols -L för alla symboler som listas i \n" -" --keep-global-symbols -G för alla symboler som listas i \n" -" --weaken-symbols -W för alla symboler som listas i \n" -" --alt-machine-code Använd alternativ maskinkod för utdata\n" -" -v --verbose Lista alla förändrade objektfiler\n" +" Sätt sektion s attribut till \n" +" --add-section = Lägg till sektion i till utdatan\n" +" --rename-section =[,] Byt namn pÃ¥ sektion till \n" +" --change-leading-char Framtvinga utformatets inledande teckentyp\n" +" --remove-leading-char Ta bort inledningstecken frÃ¥n globala symboler\n" +" --redefine-sym = Definiera om symbolnamn till \n" +" --redefine-syms --redefine-sym för alla symbolpar i \n" +" --srec-len Begränsa längden pÃ¥ genererade S-poster\n" +" --srec-forceS3 Begränsa typen av genererade S-poster till S3\n" +" --strip-symbols -N för alla symboler som listas i \n" +" --keep-symbols -K för alla symboler som listas i \n" +" --localize-symbols -L för alla symboler som listas i \n" +" --keep-global-symbols -G för alla symboler som listas i \n" +" --weaken-symbols -W för alla symboler som listas i \n" +" --alt-machine-code Använd alternativ maskinkod för utdata\n" +" --prefix-symbols Börja varje symbolnamn med \n" +" --prefix-sections Börja varje sektionsnamn med \n" +" --prefix-alloc-sections \n" +" Börja varje allokerbar sektions namn med\n" +" \n" +" -v --verbose Lista alla förändrade objektfiler\n" " -V --version Visa programmets versionsinformation\n" -" -h --help Visa denna hjälp\n" +" -h --help Visa denna hjälp\n" +" --info Lista objektformat & arkitekturer som stöds\n" -# -#: objcopy.c:432 +#: objcopy.c:493 #, c-format -msgid "Usage: %s in-file(s)\n" -msgstr "Användning: %s indatafil(er)\n" +msgid "Usage: %s in-file(s)\n" +msgstr "Användning: %s infil(er)\n" -# -#: objcopy.c:434 +#: objcopy.c:494 +msgid " Removes symbols and sections from files\n" +msgstr " Tar bort symboler och sektioner frÃ¥n filer\n" + +#: objcopy.c:496 msgid "" -" -I --input-target Assume input file is in format \n" -" -O --output-target Create an output file in format \n" -" -F --target Set both input and output format to \n" +" -I --input-target= Assume input file is in format \n" +" -O --output-target= Create an output file in format \n" +" -F --target= Set both input and output format to \n" " -p --preserve-dates Copy modified/access timestamps to the output\n" -" -R --remove-section Remove section from the output\n" +" -R --remove-section= Remove section from the output\n" " -s --strip-all Remove all symbol and relocation information\n" -" -g -S --strip-debug Remove all debugging symbols\n" +" -g -S -d --strip-debug Remove all debugging symbols & sections\n" " --strip-unneeded Remove all symbols not needed by relocations\n" -" -N --strip-symbol Do not copy symbol \n" -" -K --keep-symbol Only copy symbol \n" +" -N --strip-symbol= Do not copy symbol \n" +" -K --keep-symbol= Only copy symbol \n" " -x --discard-all Remove all non-global symbols\n" " -X --discard-locals Remove any compiler-generated symbols\n" " -v --verbose List all object files modified\n" " -V --version Display this program's version number\n" " -h --help Display this output\n" +" --info List object formats & architectures supported\n" " -o Place stripped output into \n" msgstr "" -" -I --input-target Antag indatafilens format är \n" -" -O --output-target Skapa utdatafilen i formatet \n" -" -F --target Sätt både in- och utformatet till \n" -" -p --preserve-dates Kopiera ändrings/åtkomsttider till utdatan\n" -" -R --remove-section Ta bort sektion från utdatan\n" -" -s --strip-all Ta bort all symbol- och omlokaliseringsinfo\n" -" -g -S --strip-debug Ta bort alla felsökningssymboler\n" -" --strip-unneeded Ta bort symboler onödiga för omlokaliseringen\n" -" -N --strip-symbol Kopiera inte symbol \n" -" -K --keep-symbol Kopiera endast symbol \n" +" -I --input-target= Antag infilens format till \n" +" -O --output-target= Skapa utfilen i format \n" +" -F --target= Sätt bÃ¥de in- och utformatet till \n" +" -p --preserve-dates Kopiera ändrings/Ã¥tkomsttider till utdatan\n" +" -R --remove-section= Ta bort sektion frÃ¥n utdatan\n" +" -s --strip-all Rensa bort all symbol- och relokeringsinfo\n" +" -g -S -d --strip-debug Rensa bort alla felsökssymboler & -sektioner\n" +" --strip-unneeded Rensa bort alla symboler som inte är\n" +" nödvändiga för relokeringen\n" +" -N --strip-symbol= Kopiera inte symbol \n" +" -K --keep-symbol= Kopiera endast symbol \n" " -x --discard-all Ta bort alla icke-globala symboler\n" " -X --discard-locals Ta bort alla kompilatorgenererade symboler\n" -" -v --verbose Lista alla förändrade objektfiler\n" +" -v --verbose Lista alla förändrade objektfiler\n" " -V --version Visa programmets versionsinformation\n" -" -h --help Visa denna hjälp\n" -" -o Spara den utrensade utdatan i \n" +" -h --help Visa denna hjälp\n" +" --info Lista objektformat & arkitekturer som stöds\n" +" -o Spara den rensade utdatan i \n" -# -#: objcopy.c:504 +#: objcopy.c:567 #, c-format msgid "unrecognized section flag `%s'" -msgstr "okänd sektionsflagga \"%s\"" +msgstr "okänd sektionsflagga \"%s\"" -# -#: objcopy.c:505 +#: objcopy.c:568 #, c-format msgid "supported flags: %s" msgstr "flaggor som hanteras: %s" -# -#: objcopy.c:582 objcopy.c:2206 +#: objcopy.c:645 objcopy.c:2526 #, c-format msgid "cannot stat: %s: %s" msgstr "kan inte ta status: %s: %s" -# -#: objcopy.c:589 objcopy.c:2224 +#: objcopy.c:652 objcopy.c:2544 #, c-format msgid "cannot open: %s: %s" -msgstr "kan inte öppna: %s: %s" +msgstr "kan inte öppna: %s: %s" -# -#: objcopy.c:592 objcopy.c:2228 +#: objcopy.c:655 objcopy.c:2548 #, c-format msgid "%s: fread failed" msgstr "%s: fread misslyckades" -# -#: objcopy.c:665 +#: objcopy.c:728 #, c-format msgid "Ignoring rubbish found on line %d of %s" -msgstr "Ignorerar skräp hittat på rad %d i %s" +msgstr "Ignorerar skräp hittat pÃ¥ rad %d i %s" -# -#: objcopy.c:886 +#: objcopy.c:979 #, c-format msgid "%s: Multiple redefinition of symbol \"%s\"" msgstr "%s: Flera omdefinieringar av symbol \"%s\"" -# -#: objcopy.c:891 +#: objcopy.c:983 #, c-format msgid "%s: Symbol \"%s\" is target of more than one redefinition" -msgstr "%s: Symbol \"%s\" är mål för mer än en omdefiniering" +msgstr "%s: Mer än en symbol omdefinieras till \"%s\"" -# -#: objcopy.c:943 +#: objcopy.c:1010 +#, c-format +msgid "couldn't open symbol redefinition file %s (error: %s)" +msgstr "kunde inte öppna fil \"%s\" med symbolomdefinieringar (fel: %s)" + +#: objcopy.c:1088 +#, c-format +msgid "%s: garbage at end of line %d" +msgstr "%s: skräp i slutet pÃ¥ rad %d" + +#: objcopy.c:1091 +#, c-format +msgid "%s: missing new symbol name at line %d" +msgstr "%s: nytt symbolnamn saknas pÃ¥ rad %d" + +#: objcopy.c:1101 +#, c-format +msgid "%s: premature end of file at line %d" +msgstr "%s: för tidigt filslut pÃ¥ rad %d" + +#: objcopy.c:1147 msgid "Unable to change endianness of input file(s)" -msgstr "Kan inte ändra endian-typ på indatafilen(erna)" +msgstr "Kan inte ändra endian-typ pÃ¥ infilen(erna)" -# -#: objcopy.c:951 +#: objcopy.c:1155 #, c-format msgid "copy from %s(%s) to %s(%s)\n" -msgstr "kopierar från %s(%s) till %s(%s)\n" +msgstr "kopierar frÃ¥n %s(%s) till %s(%s)\n" -# -#: objcopy.c:975 +#: objcopy.c:1182 #, c-format msgid "Warning: Output file cannot represent architecture %s" -msgstr "Varning: Utdatafilen kan inte representera arkitektur %s" +msgstr "Varning: Utfilen kan inte representera arkitektur %s" -# -#: objcopy.c:1002 +#: objcopy.c:1211 #, c-format msgid "can't create section `%s': %s" msgstr "kan inte skapa sektion \"%s\": %s" -# -#: objcopy.c:1088 +#: objcopy.c:1304 #, c-format msgid "Can't fill gap after %s: %s" msgstr "Kan inte fylla luckan efter %s: %s" -# -#: objcopy.c:1113 +#: objcopy.c:1329 #, c-format msgid "Can't add padding to %s: %s" msgstr "Kan inte fylla ut efter %s: %s" -# -#: objcopy.c:1252 +#: objcopy.c:1485 #, c-format msgid "%s: error copying private BFD data: %s" msgstr "%s: fel vid kopiering av privat BFD-data: %s" -# -#: objcopy.c:1265 +#: objcopy.c:1498 msgid "unknown alternate machine code, ignored" -msgstr "okänd alternativ maskinkod, ignorerad" +msgstr "okänd alternativ maskinkod, ignorerad" -# -#: objcopy.c:1295 +#: objcopy.c:1531 objcopy.c:1561 #, c-format msgid "cannot mkdir %s for archive copying (error: %s)" -msgstr "kan inte skapa katalog %s för arkivkopiering (fel: %s)" +msgstr "kan inte skapa katalog %s för arkivkopiering (fel: %s)" -# -#: objcopy.c:1466 +#: objcopy.c:1749 #, c-format msgid "Multiple renames of section %s" -msgstr "Flera namnbyten på sektion %s" +msgstr "Flera namnbyten pÃ¥ sektion %s" -# -#: objcopy.c:1550 +#: objcopy.c:1840 msgid "making" msgstr "tillverkning" -# -#: objcopy.c:1559 +#: objcopy.c:1849 msgid "size" msgstr "storlek" -# -#: objcopy.c:1573 +#: objcopy.c:1863 msgid "vma" msgstr "vma" -# -#: objcopy.c:1599 +#: objcopy.c:1888 msgid "alignment" -msgstr "jämn gräns" +msgstr "justering" -# -#: objcopy.c:1607 +#: objcopy.c:1896 msgid "flags" msgstr "flaggor" -# -#: objcopy.c:1624 +#: objcopy.c:1918 msgid "private data" msgstr "privat data" -# -#: objcopy.c:1632 +#: objcopy.c:1926 #, c-format msgid "%s: section `%s': error in %s: %s" -msgstr "%s: sektion \"%s\": fel på %s: %s" +msgstr "%s: sektion \"%s\": fel pÃ¥ %s: %s" -# -#: objcopy.c:1910 +#: objcopy.c:2199 #, c-format msgid "%s: can't create debugging section: %s" -msgstr "%s: kan inte skapa felsökningssektion: %s" +msgstr "%s: kan inte skapa felsökningssektion: %s" -# -#: objcopy.c:1925 +#: objcopy.c:2214 #, c-format msgid "%s: can't set debugging section contents: %s" -msgstr "%s: kan inte sätta innehållet i felsökningssektionen: %s" +msgstr "%s: kan inte sätta innehÃ¥llet i felsökningssektionen: %s" -# -#: objcopy.c:1934 +#: objcopy.c:2223 #, c-format msgid "%s: don't know how to write debugging information for %s" -msgstr "%s: vet inte hur man skriver felsökningsinformation för %s" +msgstr "%s: vet inte hur man skriver felsökningsinformation för %s" -# -#: objcopy.c:2041 +#: objcopy.c:2346 #, c-format msgid "%s: cannot stat: %s" msgstr "%s: kan inte ta status: %s" -# -#: objcopy.c:2092 +#: objcopy.c:2400 msgid "byte number must be non-negative" -msgstr "bytenummer får inte vara negativt" +msgstr "bytenummer fÃ¥r inte vara negativt" -# -#: objcopy.c:2102 +#: objcopy.c:2410 msgid "interleave must be positive" -msgstr "intervallstorleken måste vara positiv" +msgstr "intervallstorleken mÃ¥ste vara positiv" -# -#: objcopy.c:2122 objcopy.c:2130 +#: objcopy.c:2430 objcopy.c:2438 #, c-format msgid "%s both copied and removed" -msgstr "%s både kopierad och borttagen" +msgstr "%s bÃ¥de kopierad och borttagen" -# -#: objcopy.c:2203 objcopy.c:2273 objcopy.c:2373 objcopy.c:2400 objcopy.c:2424 -#: objcopy.c:2428 objcopy.c:2448 +#: objcopy.c:2523 objcopy.c:2593 objcopy.c:2693 objcopy.c:2724 objcopy.c:2748 +#: objcopy.c:2752 objcopy.c:2772 #, c-format msgid "bad format for %s" -msgstr "felaktigt format på %s" +msgstr "felaktigt format pÃ¥ %s" -# -#: objcopy.c:2342 +#: objcopy.c:2662 #, c-format msgid "Warning: truncating gap-fill from 0x%s to 0x%x" -msgstr "Varning: kortar av utfyllnadsvärdet från 0x%s till 0x%x" +msgstr "Varning: kortar av utfyllnadsvärdet frÃ¥n 0x%s till 0x%x" -# -#: objcopy.c:2494 +#: objcopy.c:2818 msgid "alternate machine code index must be positive" -msgstr "index för alternativ maskinkod måste vara positivt" +msgstr "index för alternativ maskinkod mÃ¥ste vara positivt" -# -#: objcopy.c:2512 +#: objcopy.c:2856 msgid "byte number must be less than interleave" -msgstr "bytenummer måste vara mindre än antalet byte i intervallet" +msgstr "bytenummer mÃ¥ste vara mindre än antalet byte i intervallet" -# -#: objcopy.c:2539 +#: objcopy.c:2883 #, c-format msgid "architecture %s unknown" -msgstr "arkitektur %s är okänd" +msgstr "arkitektur %s är okänd" -# -#: objcopy.c:2543 +#: objcopy.c:2887 msgid "Warning: input target 'binary' required for binary architecture parameter." -msgstr "Varning: indata måste ha formatet \"binary\" för binärarkitektursparametern." +msgstr "Varning: indata mÃ¥ste ha formatet 'binary' för binärarkitektursparametrar." -# -#: objcopy.c:2544 +#: objcopy.c:2888 #, c-format msgid " Argument %s ignored" -msgstr " Argument %s ignoreras" +msgstr " Argument %s ignorerat" -# -#: objcopy.c:2550 +#: objcopy.c:2894 #, c-format msgid "Cannot stat: %s: %s" msgstr "Kan inte ta status: %s: %s" -# -#: objcopy.c:2590 objcopy.c:2604 +#: objcopy.c:2934 objcopy.c:2948 #, c-format msgid "%s %s%c0x%s never used" -msgstr "%s %s%c0x%s användes aldrig" +msgstr "%s %s%c0x%s användes aldrig" -# -#: objdump.c:164 +#: objdump.c:197 #, c-format -msgid "Usage: %s OPTION... FILE...\n" -msgstr "Användning: %s FLAGGA... FIL...\n" +msgid "Usage: %s \n" +msgstr "Användning: %s \n" -# -#: objdump.c:165 -msgid "Display information from object FILE.\n" -msgstr "Visa information från en objektFIL.\n" +#: objdump.c:198 +msgid " Display information from object .\n" +msgstr "Visa information frÃ¥n objekt.\n" -# -#: objdump.c:166 -msgid "" -"\n" -" At least one of the following switches must be given:\n" -msgstr "" -"\n" -" Minst en av följande flaggor måste anges:\n" +#: objdump.c:199 +msgid " At least one of the following switches must be given:\n" +msgstr " Minst en av följande flaggor mÃ¥ste ges:\n" -# -#: objdump.c:167 +#: objdump.c:200 msgid "" " -a, --archive-headers Display archive header information\n" " -f, --file-headers Display the contents of the overall file header\n" @@ -2320,40 +2115,38 @@ msgid "" " -T, --dynamic-syms Display the contents of the dynamic symbol table\n" " -r, --reloc Display the relocation entries in the file\n" " -R, --dynamic-reloc Display the dynamic relocation entries in the file\n" -" -V, --version Display this program's version number\n" +" -v, --version Display this program's version number\n" " -i, --info List object formats and architectures supported\n" " -H, --help Display this information\n" msgstr "" -" -a, --archive-headers Visa information från arkivhuvuden\n" -" -f, --file-headers Visa innehållet i det övergripande filhuvudet\n" -" -p, --private-headers Visa innehållet i objektformatspecifika filhuvuden\n" -" -h, --[section-]headers Visa innehållet i sektionshuvuden\n" -" -x, --all-headers Visa innehållet i alla huvuden\n" +" -a, --archive-headers Visa information frÃ¥n arkivhuvuden\n" +" -f, --file-headers Visa innehÃ¥llet i det övergripande filhuvudet\n" +" -p, --private-headers Visa innehÃ¥llet i objektformatspecifika filhuvuden\n" +" -h, --[section-]headers Visa innehÃ¥llet i sektionshuvuden\n" +" -x, --all-headers Visa innehÃ¥llet i alla huvuden\n" " -d, --disassemble Visa disassemblering av exekverbara sektioner\n" " -D, --disassemble-all Visa disassemblering av alla sektioner\n" -" -S, --source Varva källkod med disassemblering\n" -" -s, --full-contents Visa hela innehållet i alla utvalda sektioner\n" -" -g, --debugging Visa felsökningsinformation från objektfilen\n" -" -G, --stabs Visa (obehandlat) eventuell STABS-info från filen\n" -" -t, --syms Visa innehållet i symboltabellen(erna)\n" -" -T, --dynamic-syms Visa innehållet i tabellen med dynamiska symboler\n" -" -r, --reloc Visa omlokaliseringsposterna i filen\n" -" -R, --dynamic-reloc Visa de dynamiska omlokaliseringsposterna i filen\n" -" -V, --version Visa programmets versionsinformation\n" +" -S, --source Varva källkod med disassemblering\n" +" -s, --full-contents Visa hela innehÃ¥llet i alla utvalda sektioner\n" +" -g, --debugging Visa felsökningsinformation frÃ¥n objektfilen\n" +" -G, --stabs Visa (oformaterat) eventuell STABS-info frÃ¥n filen\n" +" -t, --syms Visa innehÃ¥llet i symboltabellen(erna)\n" +" -T, --dynamic-syms Visa innehÃ¥llet i tabellen med dynamiska symboler\n" +" -r, --reloc Visa relokeringsposterna i filen\n" +" -R, --dynamic-reloc Visa de dynamiska relokeringsposterna i filen\n" +" -v, --version Visa programmets versionsinformation\n" " -i, --info Lista de objektformat och arkitekturer som hanteras\n" -" -H, --help Visa denna hjälp\n" +" -H, --help Visa denna hjälp\n" -# -#: objdump.c:189 +#: objdump.c:222 msgid "" "\n" " The following switches are optional:\n" msgstr "" "\n" -" Följande flaggor är frivilliga:\n" +" Följande flaggor är frivilliga:\n" -# -#: objdump.c:190 +#: objdump.c:223 msgid "" " -b, --target=BFDNAME Specify the target object format as BFDNAME\n" " -m, --architecture=MACHINE Specify the target architecture as MACHINE\n" @@ -2364,95 +2157,85 @@ msgid "" " --file-start-context Include context from start of file (with -S)\n" " -l, --line-numbers Include line numbers and filenames in output\n" " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" -" The STYLE, if specified, can be `auto', 'gnu',\n" -" 'lucid', 'arm', 'hp', 'edg', or 'gnu-new-abi'\n" +" The STYLE, if specified, can be `auto', `gnu',\n" +" `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" +" or `gnat'\n" " -w, --wide Format output for more than 80 columns\n" " -z, --disassemble-zeroes Do not skip blocks of zeroes when disassembling\n" -" --start-address=ADDR Only process data whoes address is >= ADDR\n" -" --stop-address=ADDR Only process data whoes address is <= ADDR\n" +" --start-address=ADDR Only process data whose address is >= ADDR\n" +" --stop-address=ADDR Only process data whose address is <= ADDR\n" " --prefix-addresses Print complete address alongside disassembly\n" " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" "\n" msgstr "" -" -b, --target=BFDNAMN Ange att målobjektets format är BFDNAMN\n" -" -m, --architecture=MASKIN Ange att målarkitekturen är MASKIN\n" +" -b, --target=BFDNAMN Välj BFDNAMN som mÃ¥lobjektets format\n" +" -m, --architecture=MASKIN Välj mÃ¥larkitektur MASKIN\n" " -j, --section=NAMN Visa endast information om sektion NAMN\n" " -M, --disassembler-options=FLG Skicka vidare FLG till disassembleraren\n" " -EB --endian=big Antag big endian-format vid disassemblering\n" " -EL --endian=little Antag little endian-format vid disassemblering\n" -" --file-start-context Ta med omgivningen i början av filen (med -S)\n" +" --file-start-context Ta med omgivningen i början av filen (med -S)\n" " -l, --line-numbers Ta med radnummer och filnamn i utdatan\n" -" -C, --demangle[=STIL] Avkoda kodade symbolnamn\n" -" STIL, om angivet, kan vara: \"auto\", \"gnu\",\n" -" \"lucid\", \"arm\", \"hp\", \"edg\", \"gnu-new-abi\"\n" -" -w, --wide Anpassa utdatan för mer än 80 kolumner\n" -" -z, --disassemble-zeroes Hoppa inte över block av nollor vid\n" +" -C, --demangle[=STIL] Avkoda manglade symbolnamn\n" +" STIL, om givet, kan vara: \"auto\", \"gnu\",\n" +" \"lucid\", \"arm\", \"hp\", \"edg\", \"gnu-v3\"\n" +" \"java\" eller `gnat'\n" +" -w, --wide Formatera utdatan för mer än 80 kolumner\n" +" -z, --disassemble-zeroes Hoppa inte över block av nollor vid\n" " disassemblering\n" -" --start-address=ADR Behandla endast data på adresser >= ADR\n" -" --stop-address=ADR Behandla endast data på adresser <= ADR\n" -" --prefix-addresses Visa fullständiga adresser jämte disassembler.\n" -" --[no-]show-raw-insn Visa hex.-kod jämte disassemblering\n" -" --adjust-vma=OFFSET Lägg till OFFSET till alla visade sektionsadresser\n" +" --start-address=ADR Behandla endast data pÃ¥ adresser >= ADR\n" +" --stop-address=ADR Behandla endast data pÃ¥ adresser <= ADR\n" +" --prefix-addresses Visa fullständiga adresser jämte disassembler.\n" +" --[no-]show-raw-insn Visa hex.-kod jämte disassemblering\n" +" --adjust-vma=OFFSET Lägg till OFFSET till alla visade sektionsadresser\n" "\n" -# -#: objdump.c:359 +#: objdump.c:391 msgid "Sections:\n" msgstr "Sektioner:\n" -# -#: objdump.c:362 +#: objdump.c:394 objdump.c:398 msgid "Idx Name Size VMA LMA File off Algn" msgstr "Idx Namn Storlek VMA LMA Filoffs Just" -# -#: objdump.c:364 +#: objdump.c:400 msgid "Idx Name Size VMA LMA File off Algn" msgstr "Idx Namn Storlek VMA LMA Filoffs Just" -# -#: objdump.c:368 +#: objdump.c:404 msgid " Flags" msgstr " Flaggor" -# -#: objdump.c:418 +#: objdump.c:406 +msgid " Pg" +msgstr " Sid" + +#: objdump.c:451 #, c-format msgid "%s: not a dynamic object" msgstr "%s: inte ett dynamiskt objekt" -# -#: objdump.c:434 -#, c-format -msgid "%s: No dynamic symbols" -msgstr "%s: Inga dynamiska symboler" - -# -#: objdump.c:1124 +#: objdump.c:1144 msgid "Out of virtual memory" -msgstr "Slut på virtuellt minne" +msgstr "Slut pÃ¥ virtuellt minne" -# -#: objdump.c:1553 +#: objdump.c:1574 #, c-format msgid "Can't use supplied machine %s" -msgstr "Kan inte använda den tillhandahållna maskinen %s" +msgstr "Kan inte använda den tillhandahÃ¥llna maskinen %s" -# -#: objdump.c:1571 +#: objdump.c:1592 #, c-format msgid "Can't disassemble for architecture %s\n" -msgstr "Kan inte disassemblera för arkitektur %s\n" +msgstr "Kan inte disassemblera för arkitektur %s\n" -# -#: objdump.c:1653 +#: objdump.c:1682 #, c-format msgid "Disassembly of section %s:\n" msgstr "Disassemblering av sektion %s:\n" -# -#: objdump.c:1828 +#: objdump.c:1847 #, c-format msgid "" "No %s section present\n" @@ -2461,48 +2244,41 @@ msgstr "" "Det finns ingen %s-sektion\n" "\n" -# -#: objdump.c:1835 +#: objdump.c:1854 #, c-format msgid "%s has no %s section" msgstr "%s har ingen %s-sektion" -# -#: objdump.c:1849 +#: objdump.c:1868 #, c-format msgid "Reading %s section of %s failed: %s" -msgstr "Läsa %s-sektionen i %s misslyckades: %s" +msgstr "Lyckades inte läsa %s-sektionen i %s: %s" -# -#: objdump.c:1861 +#: objdump.c:1880 #, c-format msgid "Reading %s section of %s failed: %s\n" -msgstr "Läsa %s-sektionen i %s misslyckades: %s\n" +msgstr "Lyckades inte läsa %s-sektionen i %s: %s\n" -# -#: objdump.c:1904 +#: objdump.c:1923 #, c-format msgid "" "Contents of %s section:\n" "\n" msgstr "" -"Innehåll i %s-sektionen:\n" +"InnehÃ¥ll i %s-sektionen:\n" "\n" -# -#: objdump.c:2004 +#: objdump.c:2021 #, c-format msgid "architecture: %s, " msgstr "arkitektur: %s, " -# -#: objdump.c:2007 +#: objdump.c:2024 #, c-format msgid "flags 0x%08x:\n" msgstr "flaggor 0x%08x:\n" -# -#: objdump.c:2020 +#: objdump.c:2038 msgid "" "\n" "start address 0x" @@ -2510,8 +2286,7 @@ msgstr "" "\n" "startadress 0x" -# -#: objdump.c:2052 +#: objdump.c:2071 #, c-format msgid "" "\n" @@ -2520,556 +2295,460 @@ msgstr "" "\n" "%s: filformat %s\n" -# -#: objdump.c:2094 +#: objdump.c:2111 #, c-format msgid "%s: printing debugging information failed" -msgstr "%s: visa felsökningsinformationen misslyckades" +msgstr "%s: lyckades inte visa felsökningsinformationen" -# -#: objdump.c:2171 +#: objdump.c:2190 #, c-format msgid "In archive %s:\n" msgstr "I arkiv %s:\n" -# -#: objdump.c:2223 +#: objdump.c:2249 #, c-format msgid "Contents of section %s:\n" -msgstr "Innehåll i %s-sektionen:\n" +msgstr "InnehÃ¥ll i %s-sektionen:\n" -# -#: objdump.c:2736 -#, c-format -msgid "BFD header file version %s\n" -msgstr "BFD-huvudfil version %s\n" +#: objdump.c:2369 +msgid "no symbols\n" +msgstr "inga symboler\n" -# -#: objdump.c:2825 +#: objdump.c:2718 msgid "unrecognized -E option" -msgstr "okänd -E-flagga" +msgstr "okänd -E-flagga" -# -#: objdump.c:2836 +#: objdump.c:2729 #, c-format msgid "unrecognized --endian type `%s'" -msgstr "okänd --endian-typ \"%s\"" +msgstr "okänd --endian-typ \"%s\"" -# -#: rdcoff.c:205 +#: rdcoff.c:206 #, c-format msgid "parse_coff_type: Bad type code 0x%x" msgstr "parse_coff_type: Felaktig typkod 0x%x" -# -#: rdcoff.c:423 rdcoff.c:531 rdcoff.c:730 +#: rdcoff.c:424 rdcoff.c:532 rdcoff.c:731 #, c-format msgid "bfd_coff_get_syment failed: %s" msgstr "bfd_coff_get_syment misslyckades: %s" -# -#: rdcoff.c:439 rdcoff.c:750 +#: rdcoff.c:440 rdcoff.c:751 #, c-format msgid "bfd_coff_get_auxent failed: %s" msgstr "bfd_coff_get_auxent misslyckades: %s" -# -#: rdcoff.c:817 +#: rdcoff.c:818 #, c-format msgid "%ld: .bf without preceding function" msgstr "%ld: .bf saknar inledande funktion" -# -#: rdcoff.c:867 +#: rdcoff.c:868 #, c-format msgid "%ld: unexpected .ef\n" -msgstr "%ld: oväntad .ef\n" +msgstr "%ld: oväntad .ef\n" -# -#: rddbg.c:87 +#: rddbg.c:91 #, c-format msgid "%s: no recognized debugging information" -msgstr "%s: ingen känd felsökningsinformation" +msgstr "%s: ingen känd felsökningsinformation" -# -#: rddbg.c:410 +#: rddbg.c:415 msgid "Last stabs entries before error:\n" -msgstr "De sista stabs-posterna innan felet:\n" +msgstr "De sista stabs-posterna före felet:\n" -# -#: readelf.c:318 +#: readelf.c:455 #, c-format msgid "%s: Error: " msgstr "%s: Fel: " -# -#: readelf.c:329 +#: readelf.c:466 #, c-format msgid "%s: Warning: " msgstr "%s: Varning: " -# -#: readelf.c:351 +#: readelf.c:488 #, c-format -msgid "Unable to seek to %x for %s\n" -msgstr "Kan inte uppsöka %2$s på %1$x\n" +msgid "Unable to seek to 0x%x for %s\n" +msgstr "Kan inte uppsöka %2$s pÃ¥ 0x%1$x\n" -# -#: readelf.c:362 +#: readelf.c:499 #, c-format -msgid "Out of memory allocating %d bytes for %s\n" -msgstr "Slut på minne vid allokering av %d byte för %s\n" +msgid "Out of memory allocating 0x%x bytes for %s\n" +msgstr "Slut pÃ¥ minne vid allokering av 0x%x byte för %s\n" -# -#: readelf.c:370 +#: readelf.c:507 #, c-format -msgid "Unable to read in %d bytes of %s\n" -msgstr "Kan inte läsa in %d byte från %s\n" +msgid "Unable to read in 0x%x bytes of %s\n" +msgstr "Kan inte läsa in 0x%x byte %s\n" -# -#: readelf.c:423 readelf.c:581 +#: readelf.c:560 readelf.c:614 readelf.c:798 readelf.c:833 #, c-format msgid "Unhandled data length: %d\n" -msgstr "Storlek på data som inte kan behandlas: %d\n" +msgstr "Storlek pÃ¥ data som inte kan behandlas: %d\n" -# -#: readelf.c:660 +#: readelf.c:924 msgid "Don't know about relocations on this machine architecture\n" -msgstr "Vet inte hur man omlokaliserar på den här maskinarkitekturen\n" +msgstr "Vet inget om relokering pÃ¥ denna maskinarkitektur\n" -# -#: readelf.c:682 readelf.c:711 readelf.c:757 readelf.c:784 +#: readelf.c:946 readelf.c:975 readelf.c:1021 readelf.c:1049 msgid "relocs" -msgstr "omlokaliseringar" +msgstr "relokeringar" -# -#: readelf.c:693 readelf.c:722 readelf.c:767 readelf.c:794 +#: readelf.c:957 readelf.c:986 readelf.c:1031 readelf.c:1059 msgid "out of memory parsing relocs" -msgstr "slut på minne vid tolkning av omlokaliseringar" +msgstr "slut pÃ¥ minne vid tolkning av relokeringar" -# -#: readelf.c:845 -msgid " Offset Info Type Symbol's Value Symbol's Name Addend\n" -msgstr " Offset Info Typ Symbolvärde Symbolnamn Tillägg\n" +#: readelf.c:1112 +msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" +msgstr " Offset Info Typ Symbolvärde Symbolnamn + Tillägg\n" -# -#: readelf.c:848 -msgid " Offset Info Type Symbol's Value Symbol's Name\n" -msgstr " Offset Info Typ Symbolvärde Symbolnamn\n" +#: readelf.c:1114 +msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" +msgstr " Offset Info Typ Sym.värde Symbolnamn + Tillägg\n" -# -#: readelf.c:854 -msgid " Offset Info Type Symbol's Value Symbol's Name Addend\n" -msgstr " Offset Info Typ Symbolvärde Symbolnamn Tillägg\n" +#: readelf.c:1119 +msgid " Offset Info Type Sym. Value Symbol's Name\n" +msgstr " Offset Info Typ Sym.värde Symbolnamn\n" -# -#: readelf.c:857 -msgid " Offset Info Type Symbol's Value Symbol's Name\n" -msgstr " Offset Info Typ Symbolvärde Symbolnamn\n" +#: readelf.c:1121 +msgid " Offset Info Type Sym.Value Sym. Name\n" +msgstr " Offset Info Typ Sym.värde Symbolnamn\n" -# -#: readelf.c:1061 readelf.c:1063 +#: readelf.c:1129 +msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" +msgstr " Offset Info Typ Symbolvärde Symbolnamn + Tillägg\n" + +#: readelf.c:1131 +msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" +msgstr " Offset Info Typ Symbolvärde Symbolnamn + Tillägg\n" + +#: readelf.c:1136 +msgid " Offset Info Type Symbol's Value Symbol's Name\n" +msgstr " Offset Info Typ Symbolvärde Symbolnamn\n" + +#: readelf.c:1138 +msgid " Offset Info Type Sym. Value Sym. Name\n" +msgstr " Offset Info Typ Symbolvärde Symbolnamn\n" + +#: readelf.c:1414 readelf.c:1416 readelf.c:1492 readelf.c:1494 readelf.c:1503 +#: readelf.c:1505 #, c-format -msgid "unrecognised: %-7lx" -msgstr "okänd: %-7lx" +msgid "unrecognized: %-7lx" +msgstr "okänd: %-7lx" -# -#: readelf.c:1085 +#: readelf.c:1466 #, c-format msgid "" -msgstr "" +msgstr "" -# -#: readelf.c:1315 +#: readelf.c:1743 #, c-format msgid "Processor Specific: %lx" msgstr "processorspecifik: %lx" -# -#: readelf.c:1334 +#: readelf.c:1762 #, c-format msgid "Operating System specific: %lx" msgstr "operativsystemsspecifik: %lx" -# -#: readelf.c:1337 readelf.c:1961 +#: readelf.c:1765 readelf.c:2417 #, c-format msgid ": %lx" -msgstr ": %lx" +msgstr ": %lx" -# -#: readelf.c:1351 +#: readelf.c:1779 msgid "NONE (None)" msgstr "NONE (ingen)" -# -#: readelf.c:1352 +#: readelf.c:1780 msgid "REL (Relocatable file)" -msgstr "REL (omlokaliseringsbar fil)" +msgstr "REL (relokeringsbar fil)" -# -#: readelf.c:1353 +#: readelf.c:1781 msgid "EXEC (Executable file)" msgstr "EXEC (exekverbar fil)" -# -#: readelf.c:1354 +#: readelf.c:1782 msgid "DYN (Shared object file)" msgstr "DYN (delad objektfil)" -# -#: readelf.c:1355 +#: readelf.c:1783 msgid "CORE (Core file)" msgstr "CORE (minnesfil)" -# -#: readelf.c:1359 +#: readelf.c:1787 #, c-format msgid "Processor Specific: (%x)" msgstr "processorspecifik: (%x)" -# -#: readelf.c:1361 +#: readelf.c:1789 #, c-format msgid "OS Specific: (%x)" msgstr "OS-specifik: (%x)" -# -#: readelf.c:1363 readelf.c:1460 readelf.c:2112 +#: readelf.c:1791 readelf.c:1898 readelf.c:2574 #, c-format msgid ": %x" -msgstr ": %x" +msgstr ": %x" -# -#: readelf.c:1376 +#: readelf.c:1804 msgid "None" msgstr "ingen" -# -#: readelf.c:2152 -msgid "Usage: readelf {options} elf-file(s)\n" -msgstr "Användning: readelf {flaggor} elf-fil(er)\n" - -# -#: readelf.c:2153 -msgid " Options are:\n" -msgstr " Flaggorna är:\n" - -# -#: readelf.c:2154 -msgid " -a or --all Equivalent to: -h -l -S -s -r -d -V -A -I\n" -msgstr " -a eller --all Samma som: -h -l -S -s -r -d -V -A -I\n" - -# -#: readelf.c:2155 -msgid " -h or --file-header Display the ELF file header\n" -msgstr " -h eller --file-header Visa ELF-filens huvud\n" - -# -#: readelf.c:2156 -msgid " -l or --program-headers or --segments\n" -msgstr " -l eller --program-headers eller --segments\n" - -# -#: readelf.c:2157 -msgid " Display the program headers\n" -msgstr " Visa programhuvudena\n" - -# -#: readelf.c:2158 -msgid " -S or --section-headers or --sections\n" -msgstr " -S eller --section-headers eller --sections\n" - -# -#: readelf.c:2159 -msgid " Display the sections' header\n" -msgstr " Visa sektionernas huvud\n" +#: readelf.c:2616 +msgid "Usage: readelf elf-file(s)\n" +msgstr "Användning: readelf elf-fil(er)\n" -# -#: readelf.c:2160 -msgid " -e or --headers Equivalent to: -h -l -S\n" -msgstr " -e eller --headers Samma som: -h -l -S\n" +#: readelf.c:2617 +msgid " Display information about the contents of ELF format files\n" +msgstr " Visa information om innehÃ¥llet i filer i ELF-format\n" -# -#: readelf.c:2161 -msgid " -s or --syms or --symbols Display the symbol table\n" +#: readelf.c:2618 +msgid "" +" 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" +" --segments An alias for --program-headers\n" +" -S --section-headers Display the sections' header\n" +" --sections An alias for --section-headers\n" +" -e --headers Equivalent to: -h -l -S\n" +" -s --syms Display the symbol table\n" +" --symbols An alias for --syms\n" +" -n --notes Display the core notes (if present)\n" +" -r --relocs Display the relocations (if present)\n" +" -u --unwind Display the unwind info (if present)\n" +" -d --dynamic Display the dynamic segment (if present)\n" +" -V --version-info Display the version sections (if present)\n" +" -A --arch-specific Display architecture specific information (if any).\n" +" -D --use-dynamic Use the dynamic section info when displaying symbols\n" +" -x --hex-dump= Dump the contents of section \n" +" -w[liaprmfFso] or\n" +" --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]\n" +" Display the contents of DWARF2 debug sections\n" msgstr "" -" -s eller --syms eller --symbols\n" -" Visa symboltabellen\n" - -# -#: readelf.c:2162 -msgid " -n or --notes Display the core notes (if present)\n" -msgstr " -n eller --notes Visa kommentarer från minnesutskriften (om de finns)\n" - -# -#: readelf.c:2163 -msgid " -r or --relocs Display the relocations (if present)\n" -msgstr " -r eller --relocs Visa omlokaliseringsinformationen (om den finns)\n" - -# -#: readelf.c:2164 -msgid " -u or --unwind Display the unwind info (if present)\n" -msgstr " -u eller --unwind Visa tillbakarullningsinformation (om den finns)\n" - -# -#: readelf.c:2165 -msgid " -d or --dynamic Display the dynamic segment (if present)\n" -msgstr " -d eller --dynamic Visa det dynamiska segmentet (om det finns)\n" - -# -#: readelf.c:2166 -msgid " -V or --version-info Display the version sections (if present)\n" -msgstr " -V eller --version-info Visa versionssektionen (om den finns)\n" - -# -#: readelf.c:2167 -msgid " -A or --arch-specific Display architecture specific information (if any).\n" -msgstr " -A eller --arch-specific Visa arkitekturspecifik information (om den finns)\n" - -# -#: readelf.c:2168 -msgid " -D or --use-dynamic Use the dynamic section info when displaying symbols\n" -msgstr " -D eller --use-dynamic Använd den dynamiska sektionen för att visa symboler\n" - -# -#: readelf.c:2169 -msgid " -x or --hex-dump=\n" -msgstr " -x eller --hex-dump=\n" - -# -#: readelf.c:2170 -msgid " Dump the contents of section \n" -msgstr " Visa innehållet i sektion \n" - -# -#: readelf.c:2171 -msgid " -w[liaprmfs] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str]\n" -msgstr " -w[liaprmfs] eller --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str]\n" - -# -#: readelf.c:2172 -msgid " Display the contents of DWARF2 debug sections\n" -msgstr " Visa innehållet i DWARF2-felsökningssektioner\n" - -# -#: readelf.c:2174 -msgid " -i or --instruction-dump=\n" -msgstr " -i eller --instruction-dump=\n" - -# -#: readelf.c:2175 -msgid " Disassemble the contents of section \n" -msgstr " Disassemblera innehållet i sektion \n" - -# -#: readelf.c:2177 -msgid " -I or --histogram Display histogram of bucket list lengths\n" -msgstr " -I eller --histogram Visa ett histogram över hinkarnas listlängder\n" - -# -#: readelf.c:2178 -msgid " -v or --version Display the version number of readelf\n" -msgstr " -v eller --version Visa versionsinformation om readelf\n" - -# -#: readelf.c:2179 -msgid " -W or --wide Don't split lines or truncate symbols to fit into 80 columns\n" -msgstr " -W eller --wide Bryt inga rader och kapa inga symboler för att passa 80 kolumner\n" +" Flaggor är:\n" +" -a --all Samma som: -h -l -S -s -r -d -V -A -I\n" +" -h --file-header Visa ELF-filens huvud\n" +" -l --program-headers Visa programhuvuden\n" +" --segments Synonym för --program-headers\n" +" -S --section-headers Visa sektionernas huvuden\n" +" --sections Synonym för --section-headers\n" +" -e --headers Samma som: -h -l -S\n" +" -s --syms Visa symboltabellen\n" +" --symbols Synonym för --syms\n" +" -n --notes Visa kommentarer frÃ¥n minnesutskriften (om de finns)\n" +" -r --relocs Visa relokeringsinformationen (om den finns)\n" +" -u --unwind Visa tillbakarullningsinformationen (om den finns)\n" +" -d --dynamic Visa det dynamiska segmentet (om det finns)\n" +" -V --version-info Visa versionssektioner (om de finns)\n" +" -A --arch-specific Visa arkitekturspecifik information (om den finns)\n" +" -D --use-dynamic Använd den dynamiska sektionen för att visa symboler\n" +" -x --hex-dump= Visa innehÃ¥llet i sektion \n" +" -w[liaprmfFso] eller\n" +" --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]\n" +" Visa innehÃ¥llet i DWARF2-felsökningssektioner\n" + +#: readelf.c:2640 +msgid "" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" +msgstr "" +" -i --instruction-dump=\n" +" Disassemblera innehÃ¥llet i sektion \n" -# -#: readelf.c:2180 -msgid " -H or --help Display this information\n" -msgstr " -H eller --help Visa denna hjälp\n" +#: readelf.c:2644 +msgid "" +" -I --histogram Display histogram of bucket list lengths\n" +" -W --wide Allow output width to exceed 80 characters\n" +" -H --help Display this information\n" +" -v --version Display the version number of readelf\n" +msgstr "" +" -I --histogram Visa ett histogram över hinkarnas listlängder\n" +" -W --wide TillÃ¥t utskrift bredare än 80 tecken\n" +" -H --help Visa denna hjälp\n" +" -v --version Visa versionsinformation för readelf\n" -# -#: readelf.c:2198 +#: readelf.c:2666 readelf.c:10765 msgid "Out of memory allocating dump request table." -msgstr "Slut på minne vid allokering av tabell för önskade utskrifter." +msgstr "Slut pÃ¥ minne vid allokering av tabell för önskade utskrifter." -# -#: readelf.c:2357 +#: readelf.c:2830 readelf.c:2906 #, c-format -msgid "Unrecognised debug option '%s'\n" -msgstr "Okänt felsökningsargument \"%s\"\n" +msgid "Unrecognized debug option '%s'\n" +msgstr "Okänt felsökningsargument \"%s\"\n" -# -#: readelf.c:2385 +#: readelf.c:2940 #, c-format msgid "Invalid option '-%c'\n" msgstr "Ogiltig flagga \"-%c\"\n" -# -#: readelf.c:2398 +#: readelf.c:2953 msgid "Nothing to do.\n" -msgstr "Inget att göra.\n" +msgstr "Inget att göra.\n" -# -#: readelf.c:2411 readelf.c:2428 readelf.c:4700 +#: readelf.c:2966 readelf.c:2983 readelf.c:5366 msgid "none" msgstr "ingen" -# -#: readelf.c:2415 readelf.c:2432 readelf.c:2460 +#: readelf.c:2970 readelf.c:2987 readelf.c:3018 #, c-format msgid "" -msgstr "" +msgstr "" -# -#: readelf.c:2429 +#: readelf.c:2984 msgid "2's complement, little endian" -msgstr "tvåkomplement, little endian" +msgstr "2-komplement, little endian" -# -#: readelf.c:2430 +#: readelf.c:2985 msgid "2's complement, big endian" -msgstr "tvåkomplement, big endian" +msgstr "2-komplement, big endian" -# -#: readelf.c:2457 +#: readelf.c:3015 msgid "Standalone App" -msgstr "Självständigt program" +msgstr "Självständigt program" -# -#: readelf.c:2475 +#: readelf.c:3034 msgid "Not an ELF file - it has the wrong magic bytes at the start\n" -msgstr "Inte en ELF-fil - den har fel magiska byte i början\n" +msgstr "Inte en ELF-fil - den har fel magiska byte i början\n" -# -#: readelf.c:2483 +#: readelf.c:3042 msgid "ELF Header:\n" msgstr "ELF-huvud:\n" -# -#: readelf.c:2484 +#: readelf.c:3043 msgid " Magic: " msgstr " Magi: " -# -#: readelf.c:2488 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3047 #, c-format msgid " Class: %s\n" msgstr " Klass: %s\n" -# -#: readelf.c:2490 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3049 #, c-format msgid " Data: %s\n" msgstr " Data: %s\n" -# -#: readelf.c:2492 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3051 #, c-format msgid " Version: %d %s\n" msgstr " Version: %d %s\n" -# -#: readelf.c:2499 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3058 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -# -#: readelf.c:2501 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3060 #, c-format msgid " ABI Version: %d\n" msgstr " ABI-version: %d\n" -# -#: readelf.c:2503 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3062 #, c-format msgid " Type: %s\n" msgstr " Typ: %s\n" -# -#: readelf.c:2505 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3064 #, c-format msgid " Machine: %s\n" msgstr " Maskin: %s\n" -# -#: readelf.c:2507 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3066 #, c-format msgid " Version: 0x%lx\n" msgstr " Version: 0x%lx\n" -# -#: readelf.c:2510 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3069 msgid " Entry point address: " -msgstr " Ingångsadress: " +msgstr " IngÃ¥ngsadress: " -# -#: readelf.c:2512 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3071 msgid "" "\n" " Start of program headers: " msgstr "" "\n" -" Start för programhuvuden: " +" Start för programhuvuden: " -# -#: readelf.c:2514 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3073 msgid "" " (bytes into file)\n" " Start of section headers: " msgstr "" " (byte in i filen)\n" -" Start för sektionshuvuden: " +" Start för sektionshuvuden: " -# -#: readelf.c:2516 +#: readelf.c:3075 msgid " (bytes into file)\n" msgstr " (byte in i filen)\n" -# -#: readelf.c:2518 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3077 #, c-format msgid " Flags: 0x%lx%s\n" msgstr " Flaggor: 0x%lx%s\n" -# -#: readelf.c:2521 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3080 #, c-format msgid " Size of this header: %ld (bytes)\n" msgstr " Detta huvuds storlek: %ld (byte)\n" -# -#: readelf.c:2523 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3082 #, c-format msgid " Size of program headers: %ld (bytes)\n" msgstr " Programhuvudenas storlek: %ld (byte)\n" -# -#: readelf.c:2525 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3084 #, c-format msgid " Number of program headers: %ld\n" msgstr " Antal programhuvuden: %ld\n" -# -#: readelf.c:2527 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3086 #, c-format msgid " Size of section headers: %ld (bytes)\n" msgstr " Sektionshuvudenas storlek: %ld (byte)\n" -# -#: readelf.c:2529 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3088 #, c-format msgid " Number of section headers: %ld" msgstr " Antal sektionshuvuden: %ld" -# -#: readelf.c:2534 +# 37 tecken i "vänstra" kolumnen +#: readelf.c:3093 #, c-format msgid " Section header string table index: %ld" -msgstr " Sektionshuvudets strängtabellsndx: %ld" +msgstr " Sektionshuvudets strängtabellndx: %ld" -# -#: readelf.c:2568 readelf.c:2604 +#: readelf.c:3127 readelf.c:3163 msgid "program headers" msgstr "programhuvuden" -# -#: readelf.c:2638 +#: readelf.c:3203 readelf.c:3480 readelf.c:3526 readelf.c:3589 readelf.c:3656 +#: readelf.c:4715 readelf.c:4758 readelf.c:4948 readelf.c:5917 readelf.c:5931 +#: readelf.c:10411 +msgid "Out of memory\n" +msgstr "Slut pÃ¥ minne\n" + +#: readelf.c:3231 msgid "" "\n" "There are no program headers in this file.\n" @@ -3077,91 +2756,71 @@ msgstr "" "\n" "Det finns inga programhuvuden i denna fil.\n" -# -#: readelf.c:2644 +#: readelf.c:3237 #, c-format msgid "" "\n" "Elf file type is %s\n" msgstr "" "\n" -"Elf-filtyp är %s\n" +"Elf-filtyp är %s\n" -# -#: readelf.c:2645 +#: readelf.c:3238 msgid "Entry point " -msgstr "Ingångspunkt " +msgstr "IngÃ¥ngspunkt " -# -#: readelf.c:2647 +#: readelf.c:3240 #, c-format msgid "" "\n" "There are %d program headers, starting at offset " msgstr "" "\n" -"Det finns %d programhuvuden, med början på offset " - -# -#: readelf.c:2658 readelf.c:2883 readelf.c:2929 readelf.c:2992 readelf.c:3059 -#: readelf.c:4087 readelf.c:4130 readelf.c:4310 readelf.c:5246 readelf.c:5260 -#: readelf.c:9246 readelf.c:9286 -msgid "Out of memory\n" -msgstr "Slut på minne\n" +"Det finns %d programhuvuden, med början pÃ¥ offset " -# # BUGG: plural-s -#: readelf.c:2676 -#, c-format +#: readelf.c:3252 readelf.c:3254 msgid "" "\n" -"Program Header%s:\n" +"Program Headers:\n" msgstr "" "\n" -"Programhuvud%0.s:\n" +"Programhuvuden:\n" -# -#: readelf.c:2680 +#: readelf.c:3258 msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" msgstr " Typ Offset VirtAdr FysAdr FilSt MinneSt Flg Just\n" -# -#: readelf.c:2683 +#: readelf.c:3261 msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " Typ Offset VirtAdress FysAdress FilStrl MinneSt Flg Just\n" +msgstr " Typ Offset VirtAdr FysAdr FilStrl MinneSt Flg Just\n" -# -#: readelf.c:2687 +#: readelf.c:3265 msgid " Type Offset VirtAddr PhysAddr\n" -msgstr " Typ Offset VirtAdress FysAdress\n" +msgstr " Typ Offset VirtAdr FysAdr\n" -# -#: readelf.c:2689 +#: readelf.c:3267 msgid " FileSiz MemSiz Flags Align\n" -msgstr " FilStorlek MinneStorlek Flagg Justering\n" +msgstr " FilStrl MinneStrl Flagg Just\n" -# -#: readelf.c:2789 +#: readelf.c:3360 msgid "more than one dynamic segment\n" -msgstr "mer än ett dynamiskt segment\n" +msgstr "mer än ett dynamiskt segment\n" -# -#: readelf.c:2797 +#: readelf.c:3368 msgid "Unable to find program interpreter name\n" -msgstr "Kan inte hitta namnet på programtolken\n" +msgstr "Kan inte hitta namnet pÃ¥ programtolken\n" -# -#: readelf.c:2804 +#: readelf.c:3375 #, c-format msgid "" "\n" " [Requesting program interpreter: %s]" msgstr "" "\n" -" [Begär programtolkare: %s]" +" [Begär programtolkare: %s]" -# -#: readelf.c:2822 +#: readelf.c:3387 msgid "" "\n" " Section to Segment mapping:\n" @@ -3169,28 +2828,32 @@ msgstr "" "\n" " Sektion till segment-avbildning:\n" -# -#: readelf.c:2823 +#: readelf.c:3388 msgid " Segment Sections...\n" msgstr " Segmentsektioner...\n" -# -#: readelf.c:2874 readelf.c:2920 +#: readelf.c:3437 +msgid "Cannot interpret virtual addresses without program headers.\n" +msgstr "Kan inte tolka virtuella adresser utan programhuvud.\n" + +#: readelf.c:3453 +#, c-format +msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" +msgstr "Virtuell adress 0x%lx finns ej i nÃ¥got PT_LOAD-segment.\n" + +#: readelf.c:3471 readelf.c:3517 msgid "section headers" msgstr "sektionshuvuden" -# -#: readelf.c:2968 readelf.c:3035 +#: readelf.c:3565 readelf.c:3632 msgid "symbols" msgstr "symboler" -# -#: readelf.c:2979 readelf.c:3046 +#: readelf.c:3576 readelf.c:3643 msgid "symtab shndx" msgstr "symtab shndx" -# -#: readelf.c:3147 +#: readelf.c:3745 msgid "" "\n" "There are no sections in this file.\n" @@ -3198,70 +2861,64 @@ msgstr "" "\n" "Det finns inga sektioner i denna fil.\n" -# -#: readelf.c:3153 +#: readelf.c:3751 #, c-format msgid "There are %d section headers, starting at offset 0x%lx:\n" -msgstr "Det finns %d sektionshuvuden, med början på offset 0x%lx:\n" +msgstr "Det finns %d sektionshuvuden, med början pÃ¥ offset 0x%lx:\n" -# -#: readelf.c:3170 readelf.c:3479 readelf.c:3826 readelf.c:5397 +#: readelf.c:3768 readelf.c:4098 readelf.c:4433 readelf.c:6070 msgid "string table" -msgstr "strängtabell" +msgstr "strängtabell" -# -#: readelf.c:3191 +#: readelf.c:3793 msgid "File contains multiple dynamic symbol tables\n" -msgstr "Filen innehåller flera tabeller med dynamiska symboler\n" +msgstr "Filen innehÃ¥ller flera tabeller med dynamiska symboler\n" -# -#: readelf.c:3203 +#: readelf.c:3805 msgid "File contains multiple dynamic string tables\n" -msgstr "Filen innehåller flera dynamiska strängtabeller\n" +msgstr "Filen innehÃ¥ller flera dynamiska strängtabeller\n" -# -#: readelf.c:3209 +#: readelf.c:3811 msgid "dynamic strings" -msgstr "dynamiska strängar" +msgstr "dynamiska strängar" -# -#: readelf.c:3215 +#: readelf.c:3817 msgid "File contains multiple symtab shndx tables\n" -msgstr "Filen innehåller flera symtab-shndx-tabeller\n" +msgstr "Filen innehÃ¥ller flera symtab-shndx-tabeller\n" -# -# BUGG: plural-s -#: readelf.c:3250 -#, c-format +#: readelf.c:3855 msgid "" "\n" -"Section Header%s:\n" +"Section Headers:\n" msgstr "" "\n" -"Sektionshuvud%0.s:\n" +"Sektionshuvuden:\n" -# -#: readelf.c:3254 +#: readelf.c:3857 +msgid "" +"\n" +"Section Header:\n" +msgstr "" +"\n" +"Sektionshuvud:\n" + +#: readelf.c:3861 msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" -msgstr " [Nr] Namn Typ Adress Off Strl PS Flg Lk Inf Ju\n" +msgstr " [Nr] Namn Typ Adr Off Strl PS Flg Lk Inf Ju\n" -# -#: readelf.c:3257 +#: readelf.c:3864 msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" msgstr " [Nr] Namn Typ Adress Off Strl PS Flg Lk Inf Ju\n" -# -#: readelf.c:3260 +#: readelf.c:3867 msgid " [Nr] Name Type Address Offset\n" msgstr " [Nr] Namn Typ Adress Offset\n" -# -#: readelf.c:3261 +#: readelf.c:3868 msgid " Size EntSize Flags Link Info Align\n" -msgstr " Storlek Poststorlek Flagg Länk Info Just\n" +msgstr " Storlek Poststorlek Flagg Länk Info Just\n" -# -#: readelf.c:3356 +#: readelf.c:3963 msgid "" "Key to Flags:\n" " W (write), A (alloc), X (execute), M (merge), S (strings)\n" @@ -3269,72 +2926,68 @@ msgid "" " O (extra OS processing required) o (OS specific), p (processor specific)\n" msgstr "" "Nyckel till flaggorna:\n" -" W (skriv), A (allokera), X (exekvera), M (förena), S (strängar)\n" -" I (info), L (länkordning), G (grupp), x (okänd)\n" -" O (extra OS-bearbetning krävs) o (OS-specifik), p (processorspecifik)\n" +" W (skriv), A (allokera), X (exekvera), M (förena), S (strängar)\n" +" I (info), L (länkordning), G (grupp), x (okänd)\n" +" O (extra OS-bearbetning krävs) o (OS-specifik), p (processorspecifik)\n" -# -#: readelf.c:3417 +#: readelf.c:4031 #, c-format msgid "" "\n" -"Relocation section at offset 0x%lx contains %ld bytes:\n" +"'%s' relocation section at offset 0x%lx contains %ld bytes:\n" msgstr "" "\n" -"Omlokaliseringssektionen på offset 0x%lx innehåller %ld byte:\n" +"\"%s\" relokeringssektion pÃ¥ offset 0x%lx innehÃ¥ller %ld byte:\n" -# -#: readelf.c:3424 +#: readelf.c:4043 msgid "" "\n" "There are no dynamic relocations in this file.\n" msgstr "" "\n" -"Det finns inga dynamiska omlokaliseringar i denna fil.\n" +"Det finns inga dynamiska relokeringar i denna fil.\n" -# -#: readelf.c:3451 +#: readelf.c:4070 msgid "" "\n" "Relocation section " msgstr "" "\n" -"Omlokaliseringssektion " +"Omrelokeringssektion " -# -#: readelf.c:3458 readelf.c:3905 +#: readelf.c:4075 readelf.c:4496 readelf.c:4510 +#, c-format +msgid "'%s'" +msgstr "\"%s\"" + +#: readelf.c:4077 readelf.c:4512 #, c-format msgid " at offset 0x%lx contains %lu entries:\n" -msgstr " på offset 0x%lx innehåller %lu poster:\n" +msgstr " pÃ¥ offset 0x%lx innehÃ¥ller %lu poster:\n" -# -#: readelf.c:3496 +#: readelf.c:4115 msgid "" "\n" "There are no relocations in this file.\n" msgstr "" "\n" -"Det finns inga omlokaliseringar i denna fil.\n" +"Det finns inga relokeringar i denna fil.\n" -# -#: readelf.c:3692 +#: readelf.c:4299 msgid "unwind table" msgstr "tillbakarullningstabell" -# -#: readelf.c:3743 readelf.c:3755 readelf.c:7608 readelf.c:7619 +#: readelf.c:4350 readelf.c:4362 readelf.c:8499 readelf.c:8511 #, c-format msgid "Skipping unexpected symbol type %u\n" -msgstr "Hoppar över oväntad symboltyp %u\n" +msgstr "Hoppar över oväntad symboltyp %u\n" -# -#: readelf.c:3763 +#: readelf.c:4370 #, c-format msgid "Skipping unexpected relocation type %s\n" -msgstr "Hoppar över oväntad omlokaliseringstyp %s\n" +msgstr "Hoppar över oväntad relokeringstyp %s\n" -# -#: readelf.c:3808 readelf.c:3833 +#: readelf.c:4415 readelf.c:4440 msgid "" "\n" "There are no unwind sections in this file.\n" @@ -3342,9 +2995,8 @@ msgstr "" "\n" "Det finns inga tillbakarullningssektioner i denna fil.\n" -# -# BUGG: Fortsättningen är inte markerad för översättning i koden och innehåller '-citattecken. -#: readelf.c:3884 +# BUGG: Fortsättningen är inte markerad för översättning i koden och innehÃ¥ller '-citattecken. +#: readelf.c:4491 msgid "" "\n" "Could not find unwind info section for " @@ -3352,13 +3004,11 @@ msgstr "" "\n" "Kunde inte hitta tillbakarullningssektion till " -# -#: readelf.c:3896 +#: readelf.c:4503 msgid "unwind info" msgstr "tillbakarullningsinfo" -# -#: readelf.c:3898 +#: readelf.c:4505 msgid "" "\n" "Unwind section " @@ -3366,13 +3016,11 @@ msgstr "" "\n" "Tillbakarullningssektion " -# -#: readelf.c:4071 readelf.c:4114 +#: readelf.c:4699 readelf.c:4742 msgid "dynamic segment" msgstr "dynamiskt segment" -# -#: readelf.c:4183 +#: readelf.c:4820 msgid "" "\n" "There is no dynamic segment in this file.\n" @@ -3380,308 +3028,255 @@ msgstr "" "\n" "Det finns inget dynamiskt segment i denna fil.\n" -# -#: readelf.c:4217 +#: readelf.c:4854 msgid "Unable to seek to end of file!" -msgstr "Kan inte uppsöka slutet av filen!" +msgstr "Kan inte uppsöka slutet av filen!" -# -#: readelf.c:4228 +#: readelf.c:4865 msgid "Unable to determine the number of symbols to load\n" -msgstr "Kan inte fastställa hur många symboler som ska läsas in\n" +msgstr "Kan inte fastställa hur mÃ¥nga symboler som ska läsas in\n" -# -#: readelf.c:4258 +#: readelf.c:4895 msgid "Unable to seek to end of file\n" -msgstr "Kan inte uppsöka slutet av filen\n" +msgstr "Kan inte uppsöka slutet av filen\n" -# -#: readelf.c:4264 +#: readelf.c:4901 msgid "Unable to determine the length of the dynamic string table\n" -msgstr "Kan inte fastställa längden på den dynamiska strängtabellen\n" +msgstr "Kan inte fastställa längden pÃ¥ den dynamiska strängtabellen\n" -# -#: readelf.c:4269 +#: readelf.c:4906 msgid "dynamic string table" -msgstr "dynamisk strängtabell" +msgstr "dynamisk strängtabell" -# -#: readelf.c:4303 +#: readelf.c:4941 msgid "symbol information" msgstr "symbolinformation" -# -#: readelf.c:4327 +#: readelf.c:4965 #, c-format msgid "" "\n" -"Dynamic segment at offset 0x%x contains %ld entries:\n" +"Dynamic segment at offset 0x%lx contains %ld entries:\n" msgstr "" "\n" -"Dynamiskt segment på offset 0x%x innehåller %ld poster:\n" +"Dynamiskt segment pÃ¥ offset 0x%lx innehÃ¥ller %ld poster:\n" -# -#: readelf.c:4330 +#: readelf.c:4968 msgid " Tag Type Name/Value\n" -msgstr " Tagg Typ Namn/Värde\n" +msgstr " Tagg Typ Namn/Värde\n" -# -#: readelf.c:4366 +#: readelf.c:5004 msgid "Auxiliary library" msgstr "yttre bibliotek" -# -#: readelf.c:4370 +#: readelf.c:5008 msgid "Filter library" msgstr "filterbibliotek" -# -#: readelf.c:4374 +#: readelf.c:5012 msgid "Configuration file" msgstr "konfigurationsfil" -# -#: readelf.c:4378 +#: readelf.c:5016 msgid "Dependency audit library" -msgstr "beroendövervakningsbibliotek" +msgstr "beroendövervakningsbibliotek" -# -#: readelf.c:4382 +#: readelf.c:5020 msgid "Audit library" -msgstr "övervakningsbibliotek" +msgstr "övervakningsbibliotek" -# -#: readelf.c:4400 readelf.c:4426 readelf.c:4452 +#: readelf.c:5038 readelf.c:5066 readelf.c:5094 msgid "Flags:" msgstr "flaggor:" -# -#: readelf.c:4402 readelf.c:4428 readelf.c:4454 +#: readelf.c:5041 readelf.c:5069 readelf.c:5096 msgid " None\n" msgstr " inga\n" -# -#: readelf.c:4573 +#: readelf.c:5217 #, c-format msgid "Shared library: [%s]" msgstr "delat bibliotek: [%s]" -# -#: readelf.c:4576 +#: readelf.c:5220 msgid " program interpreter" msgstr " programtolk" -# -#: readelf.c:4580 +#: readelf.c:5224 #, c-format msgid "Library soname: [%s]" msgstr "biblioteks so-namn: [%s]" -# -#: readelf.c:4584 +#: readelf.c:5228 #, c-format msgid "Library rpath: [%s]" msgstr "bibliotekets rpath: [%s]" -# -#: readelf.c:4588 +#: readelf.c:5232 #, c-format msgid "Library runpath: [%s]" msgstr "bibliotekets runpath: [%s]" -# -#: readelf.c:4649 +#: readelf.c:5296 #, c-format msgid "Not needed object: [%s]\n" -msgstr "onödigt objekt: [%s]\n" +msgstr "onödigt objekt: [%s]\n" -# -#: readelf.c:4746 +#: readelf.c:5412 #, c-format msgid "" "\n" "Version definition section '%s' contains %ld entries:\n" msgstr "" "\n" -"Versiondefinitionssektion \"%s\" innehåller %ld poster:\n" +"Versiondefinitionssektion \"%s\" innehÃ¥ller %ld poster:\n" -# -#: readelf.c:4749 +#: readelf.c:5415 msgid " Addr: 0x" msgstr " Adr: 0x" -# -#: readelf.c:4751 readelf.c:4946 +#: readelf.c:5417 readelf.c:5612 #, c-format msgid " Offset: %#08lx Link: %lx (%s)\n" -msgstr " Offset: %#08lx Länk: %lx (%s)\n" +msgstr " Offset: %#08lx Länk: %lx (%s)\n" -# -#: readelf.c:4758 +#: readelf.c:5424 msgid "version definition section" msgstr "versiondefinitionssektion" -# -#: readelf.c:4784 +#: readelf.c:5450 #, c-format msgid " %#06x: Rev: %d Flags: %s" msgstr " %#06x: Rev: %d Flaggor: %s" -# -#: readelf.c:4787 +#: readelf.c:5453 #, c-format msgid " Index: %d Cnt: %d " msgstr " Index: %d Ant: %d " -# -#: readelf.c:4798 +#: readelf.c:5464 #, c-format msgid "Name: %s\n" msgstr "Namn: %s\n" -# -#: readelf.c:4800 +#: readelf.c:5466 #, c-format msgid "Name index: %ld\n" msgstr "Namnindex: %ld\n" -# -#: readelf.c:4815 +#: readelf.c:5481 #, c-format msgid " %#06x: Parent %d: %s\n" -msgstr " %#06x: Förälder %d: %s\n" +msgstr " %#06x: Förälder %d: %s\n" -# -#: readelf.c:4818 +#: readelf.c:5484 #, c-format msgid " %#06x: Parent %d, name index: %ld\n" -msgstr " %#06x: Förälder %d, namnindex: %ld\n" +msgstr " %#06x: Förälder %d, namnindex: %ld\n" -# -#: readelf.c:4837 +#: readelf.c:5503 #, c-format msgid "" "\n" "Version needs section '%s' contains %ld entries:\n" msgstr "" "\n" -"Versionbehovssektion \"%s\" innehåller %ld poster:\n" +"Versionbehovssektion \"%s\" innehÃ¥ller %ld poster:\n" -# -#: readelf.c:4840 +#: readelf.c:5506 msgid " Addr: 0x" msgstr " Adr: 0x" -# -#: readelf.c:4842 +#: readelf.c:5508 #, c-format msgid " Offset: %#08lx Link to section: %ld (%s)\n" -msgstr " Offset: %#08lx Länk till sektion: %ld (%s)\n" +msgstr " Offset: %#08lx Länk till sektion: %ld (%s)\n" -# -#: readelf.c:4848 +#: readelf.c:5514 msgid "version need section" msgstr "versionsbehovssektion" -# -#: readelf.c:4870 +#: readelf.c:5536 #, c-format msgid " %#06x: Version: %d" msgstr " %#06x: Version: %d" -# -#: readelf.c:4873 +#: readelf.c:5539 #, c-format msgid " File: %s" msgstr " Fil: %s" -# -#: readelf.c:4875 +#: readelf.c:5541 #, c-format msgid " File: %lx" msgstr " Fil: %lx" -# -#: readelf.c:4877 +#: readelf.c:5543 #, c-format msgid " Cnt: %d\n" msgstr " Ant: %d\n" -# -#: readelf.c:4895 +#: readelf.c:5561 #, c-format msgid " %#06x: Name: %s" msgstr " %#06x: Namn: %s" -# -#: readelf.c:4898 +#: readelf.c:5564 #, c-format msgid " %#06x: Name index: %lx" msgstr " %#06x: Namnindex: %lx" -# -#: readelf.c:4901 +#: readelf.c:5567 #, c-format msgid " Flags: %s Version: %d\n" msgstr " Flaggor: %s Version: %d\n" -# -#: readelf.c:4937 +#: readelf.c:5603 msgid "version string table" -msgstr "versionssträngtabell" +msgstr "versionssträngtabell" -# -#: readelf.c:4941 +#: readelf.c:5607 #, c-format msgid "" "\n" "Version symbols section '%s' contains %d entries:\n" msgstr "" "\n" -"Versionsymbolssektion \"%s\" innehåller %d poster:\n" +"Versionsymbolssektion \"%s\" innehÃ¥ller %d poster:\n" -# -#: readelf.c:4944 +#: readelf.c:5610 msgid " Addr: " msgstr " Adr: " -# -#: readelf.c:4954 +#: readelf.c:5622 msgid "version symbol data" msgstr "versionsymbolsdata" -# -#: readelf.c:4981 +#: readelf.c:5649 msgid " 0 (*local*) " msgstr " 0 (*lokal*) " -# -#: readelf.c:4985 +#: readelf.c:5653 msgid " 1 (*global*) " msgstr " 1 (*global*) " -# -#: readelf.c:5020 readelf.c:5454 +#: readelf.c:5689 readelf.c:6129 msgid "version need" msgstr "versionsbehov" -# -#: readelf.c:5030 +#: readelf.c:5699 msgid "version need aux (2)" msgstr "yttre versionsbehov (2)" -# -#: readelf.c:5071 readelf.c:5516 +#: readelf.c:5741 readelf.c:6192 msgid "version def" msgstr "versionsdef." -# -#: readelf.c:5090 readelf.c:5531 +#: readelf.c:5760 readelf.c:6207 msgid "version def aux" msgstr "yttre versionsdef." -# -#: readelf.c:5121 +#: readelf.c:5791 msgid "" "\n" "No version information found in this file.\n" @@ -3689,145 +3284,107 @@ msgstr "" "\n" "Det fanns ingen versionsinformation i denna fil.\n" -# -#: readelf.c:5139 readelf.c:5174 -#, c-format -msgid ": %d" -msgstr ": %d" - -# -#: readelf.c:5141 readelf.c:5186 -#, c-format -msgid ": %d" -msgstr ": %d" - -# -#: readelf.c:5143 readelf.c:5189 -#, c-format -msgid ": %d" -msgstr ": %d" - -# -#: readelf.c:5252 +#: readelf.c:5923 msgid "Unable to read in dynamic data\n" -msgstr "Kan inte läsa in dynamisk data\n" +msgstr "Kan inte läsa in den dynamiska datan\n" -# -#: readelf.c:5294 +#: readelf.c:5967 msgid "Unable to seek to start of dynamic information" -msgstr "Kan inte uppsöka början av den dynamiska informationen" +msgstr "Kan inte uppsöka början av den dynamiska informationen" -# -#: readelf.c:5300 +#: readelf.c:5973 msgid "Failed to read in number of buckets\n" -msgstr "Misslyckades läsa in antalet hinkar\n" +msgstr "Lyckades inte läsa antal hinkar\n" -# -#: readelf.c:5306 +#: readelf.c:5979 msgid "Failed to read in number of chains\n" -msgstr "Misslyckades Läsa in antalet kedjor\n" +msgstr "Lyckades inte läsa antal kedjor\n" -# -#: readelf.c:5326 +#: readelf.c:5999 msgid "" "\n" "Symbol table for image:\n" msgstr "" "\n" -"Symboltabell för filbilden:\n" +"Symboltabell för avbilden:\n" -# -#: readelf.c:5328 +#: readelf.c:6001 msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr Hin: Värde Strl Typ Bind Synl Idx Namn\n" +msgstr " Nr Hin: Värde Strl Typ Bind Synl Idx Namn\n" -# -#: readelf.c:5330 +#: readelf.c:6003 msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr Hin: Värde Strl Typ Bind Synl Idx Namn\n" +msgstr " Nr Hin: Värde Strl Typ Bind Synl Idx Namn\n" -# -#: readelf.c:5375 +#: readelf.c:6048 #, c-format msgid "" "\n" "Symbol table '%s' contains %lu entries:\n" msgstr "" "\n" -"Symboltabell \"%s\" innehåller %lu poster:\n" +"Symboltabell \"%s\" innehÃ¥ller %lu poster:\n" -# -#: readelf.c:5379 +#: readelf.c:6052 msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr: Värde Strl Typ Bind Synl Idx Namn\n" +msgstr " Nr: Värde Strl Typ Bind Synl Idx Namn\n" -# -#: readelf.c:5381 +#: readelf.c:6054 msgid " Num: Value Size Type Bind Vis Ndx Name\n" -msgstr " Nr: Värde Strl Typ Bind Synl Idx Namn\n" +msgstr " Nr: Värde Strl Typ Bind Synl Idx Namn\n" -# -#: readelf.c:5427 +#: readelf.c:6101 msgid "version data" msgstr "versionsdata" -# -#: readelf.c:5467 +#: readelf.c:6142 msgid "version need aux (3)" msgstr "yttre versionsbehov (3)" -# -#: readelf.c:5492 +#: readelf.c:6167 msgid "bad dynamic symbol" msgstr "felaktig dynamisk symbol" -# -#: readelf.c:5554 +#: readelf.c:6230 msgid "" "\n" "Dynamic symbol information is not available for displaying symbols.\n" msgstr "" "\n" -"Informationen om dynamiska symboler är inte tillgänglig för att visa symboler.\n" +"Informationen om dynamiska symboler är inte tillgänglig för att visa symboler.\n" -# -#: readelf.c:5566 +#: readelf.c:6242 #, c-format msgid "" "\n" "Histogram for bucket list length (total of %d buckets):\n" msgstr "" "\n" -"Histogram över hinkarnas listlängd (totalt %d hinkar):\n" +"Histogram över hinkarnas listlängd (totalt %d hinkar):\n" -# -#: readelf.c:5568 +#: readelf.c:6244 #, c-format msgid " Length Number %% of total Coverage\n" -msgstr " Längd Nummer %% av alla Täckning\n" +msgstr " Längd Nummer %% av alla Täckning\n" -# -#: readelf.c:5573 readelf.c:5592 readelf.c:8825 readelf.c:9017 +#: readelf.c:6249 readelf.c:6268 readelf.c:9898 readelf.c:10090 msgid "Out of memory" -msgstr "Slut på minne" +msgstr "Slut pÃ¥ minne" -# -#: readelf.c:5641 +#: readelf.c:6317 #, c-format msgid "" "\n" "Dynamic info segment at offset 0x%lx contains %d entries:\n" msgstr "" "\n" -"Dynamiskt info-segment på offset 0x%lx innehåller %d poster:\n" +"Dynamiskt info-segment pÃ¥ offset 0x%lx innehÃ¥ller %d poster:\n" -# -#: readelf.c:5644 +#: readelf.c:6320 msgid " Num: Name BoundTo Flags\n" -msgstr " Nr: Namn BundenTill Flaggor\n" +msgstr " Nr: Namn Bind till Flagg\n" -# -#: readelf.c:5696 +#: readelf.c:6373 #, c-format msgid "" "\n" @@ -3836,8 +3393,7 @@ msgstr "" "\n" "Disassembleringsutskrift av sektion %s\n" -# -#: readelf.c:5719 +#: readelf.c:6396 #, c-format msgid "" "\n" @@ -3846,8 +3402,7 @@ msgstr "" "\n" "Sektion \"%s\" har ingen data att skriva ut.\n" -# -#: readelf.c:5724 +#: readelf.c:6401 #, c-format msgid "" "\n" @@ -3856,62 +3411,52 @@ msgstr "" "\n" "Hexadecimal utskrift av sektion \"%s\":\n" -# -#: readelf.c:5729 +#: readelf.c:6406 msgid "section data" msgstr "sektionsdata" -# -#: readelf.c:5878 +#: readelf.c:6555 msgid "badly formed extended line op encountered!\n" -msgstr "felaktigt utformad utökad rad-op påträffades!\n" +msgstr "felaktigt utformad utökad rad-op pÃ¥träffades!\n" -# -#: readelf.c:5885 +#: readelf.c:6562 #, c-format msgid " Extended opcode %d: " -msgstr " Utökad op-kod %d: " +msgstr " Utökad op-kod %d: " -# -#: readelf.c:5890 +#: readelf.c:6567 msgid "" "End of Sequence\n" "\n" msgstr "" -"Slut på sekvensen\n" +"Slut pÃ¥ sekvensen\n" "\n" -# -#: readelf.c:5896 +#: readelf.c:6573 #, c-format msgid "set Address to 0x%lx\n" -msgstr "sätt Adress till 0x%lx\n" +msgstr "sätt Adress till 0x%lx\n" -# -#: readelf.c:5901 +#: readelf.c:6578 msgid " define new File Table entry\n" msgstr " definiera ny filtabellspost\n" -# -#: readelf.c:5902 readelf.c:6031 +#: readelf.c:6579 readelf.c:6726 msgid " Entry\tDir\tTime\tSize\tName\n" msgstr " Post\tKatalog\tTid\tStorl.\tNamn\n" -# -#: readelf.c:5904 +#: readelf.c:6581 #, c-format msgid " %d\t" msgstr " %d\t" -# -#: readelf.c:5907 readelf.c:5909 readelf.c:5911 readelf.c:6043 readelf.c:6045 -#: readelf.c:6047 +#: readelf.c:6584 readelf.c:6586 readelf.c:6588 readelf.c:6738 readelf.c:6740 +#: readelf.c:6742 #, c-format msgid "%lu\t" msgstr "%lu\t" -# -#: readelf.c:5912 +#: readelf.c:6589 #, c-format msgid "" "%s\n" @@ -3920,14 +3465,12 @@ msgstr "" "%s\n" "\n" -# -#: readelf.c:5916 +#: readelf.c:6593 #, c-format msgid "UNKNOWN: length %d\n" -msgstr "OKÄND: längd %d\n" +msgstr "OKÄND: längd %d\n" -# -#: readelf.c:5942 +#: readelf.c:6621 #, c-format msgid "" "\n" @@ -3935,75 +3478,59 @@ msgid "" "\n" msgstr "" "\n" -"Utskrift av felsökningsinnehåll i sektion %s:\n" +"Utskrift av felsökningsinnehÃ¥ll i sektion %s:\n" "\n" -# -#: readelf.c:5954 -msgid "64-bit DWARF line info is not supported yet.\n" -msgstr "64-bitars DWARF-radinformation stöds inte än.\n" - -# -#: readelf.c:5961 +#: readelf.c:6649 msgid "The line info appears to be corrupt - the section is too small\n" -msgstr "Radinformationen verkar vara trasig - sektionen är för liten\n" +msgstr "Radinformationen verkar vara trasig - sektionen är för liten\n" -# -#: readelf.c:5969 -msgid "Only DWARF version 2 line info is currently supported.\n" -msgstr "Endast DWARF version 2:s radinfo stöds för närvarande.\n" +#: readelf.c:6658 +msgid "Only DWARF version 2 and 3 line info is currently supported.\n" +msgstr "Endast DWARF 2 och 3 radinfo hanteras för närvarande.\n" -# -#: readelf.c:5984 +#: readelf.c:6679 #, c-format msgid " Length: %ld\n" -msgstr " längd: %ld\n" +msgstr " längd: %ld\n" -# -#: readelf.c:5985 +#: readelf.c:6680 #, c-format msgid " DWARF Version: %d\n" msgstr " DWARF version: %d\n" -# -#: readelf.c:5986 +#: readelf.c:6681 #, c-format msgid " Prologue Length: %d\n" -msgstr " prologlängd: %d\n" +msgstr " prologlängd: %d\n" -# -#: readelf.c:5987 +#: readelf.c:6682 #, c-format msgid " Minimum Instruction Length: %d\n" -msgstr " minsta instruktionslängd: %d\n" +msgstr " minsta instruktionslängd: %d\n" -# -# BUGG: Ska det inte vara `' på engelska? -#: readelf.c:5988 +# BUGG: Ska det inte vara `' pÃ¥ engelska? +#: readelf.c:6683 #, c-format msgid " Initial value of 'is_stmt': %d\n" -msgstr " initialvärde på \"is_stmt\": %d\n" +msgstr " initialvärde pÃ¥ \"is_stmt\": %d\n" -# -#: readelf.c:5989 +#: readelf.c:6684 #, c-format msgid " Line Base: %d\n" msgstr " radbas: %d\n" -# -#: readelf.c:5990 +#: readelf.c:6685 #, c-format msgid " Line Range: %d\n" -msgstr " radintervall: %d\n" +msgstr " radomfÃ¥ng: %d\n" -# -#: readelf.c:5991 +#: readelf.c:6686 #, c-format msgid " Opcode Base: %d\n" msgstr " op-kodbas: %d\n" -# -#: readelf.c:6000 +#: readelf.c:6695 msgid "" "\n" " Opcodes:\n" @@ -4011,23 +3538,20 @@ msgstr "" "\n" " Op-koder:\n" -# -#: readelf.c:6003 +#: readelf.c:6698 #, c-format msgid " Opcode %d has %d args\n" msgstr " Op-kod %d har %d argument\n" -# -#: readelf.c:6009 +#: readelf.c:6704 msgid "" "\n" " The Directory Table is empty.\n" msgstr "" "\n" -" Katalogtabellen är tom.\n" +" Katalogtabellen är tom.\n" -# -#: readelf.c:6012 +#: readelf.c:6707 msgid "" "\n" " The Directory Table:\n" @@ -4035,23 +3559,20 @@ msgstr "" "\n" " Katalogtabellen:\n" -# -#: readelf.c:6016 +#: readelf.c:6711 #, c-format msgid " %s\n" msgstr " %s\n" -# -#: readelf.c:6027 +#: readelf.c:6722 msgid "" "\n" " The File Name Table is empty.\n" msgstr "" "\n" -" Filnamnstabellen är tom.\n" +" Filnamnstabellen är tom.\n" -# -#: readelf.c:6030 +#: readelf.c:6725 msgid "" "\n" " The File Name Table:\n" @@ -4059,21 +3580,18 @@ msgstr "" "\n" " Filnamnstabellen:\n" -# -#: readelf.c:6038 +#: readelf.c:6733 #, c-format msgid " %d\t" msgstr " %d\t" -# -#: readelf.c:6049 +#: readelf.c:6744 #, c-format msgid "%s\n" msgstr "%s\n" -# #. Now display the statements. -#: readelf.c:6057 +#: readelf.c:6752 msgid "" "\n" " Line Number Statements:\n" @@ -4081,138 +3599,111 @@ msgstr "" "\n" " Radnummersatser:\n" -# -#: readelf.c:6073 +#: readelf.c:6768 #, c-format msgid " Special opcode %d: advance Address by %d to 0x%lx" -msgstr " Särskild op-kod %d: öka adressen med %d till 0x%lx" +msgstr " Särskild op-kod %d: öka adressen med %d till 0x%lx" -# -#: readelf.c:6077 +#: readelf.c:6772 #, c-format msgid " and Line by %d to %d\n" msgstr " och radnumret med %d till %d\n" -# -#: readelf.c:6088 +#: readelf.c:6783 msgid " Copy\n" msgstr " Kopiera\n" -# -#: readelf.c:6095 +#: readelf.c:6790 #, c-format msgid " Advance PC by %d to %lx\n" -msgstr " Öka PC med %d till %lx\n" +msgstr " Öka programräknaren med %d till %lx\n" -# -#: readelf.c:6103 +#: readelf.c:6798 #, c-format msgid " Advance Line by %d to %d\n" -msgstr " Öka radnumret med %d till %d\n" +msgstr " Öka radnumret med %d till %d\n" -# -#: readelf.c:6110 +#: readelf.c:6805 #, c-format msgid " Set File Name to entry %d in the File Name Table\n" -msgstr " Sätt filnamnet till post %d i filnamnstabellen\n" +msgstr " Sätt filnamnet till post %d i filnamnstabellen\n" -# -#: readelf.c:6118 +#: readelf.c:6813 #, c-format msgid " Set column to %d\n" -msgstr " Sätt kolumnen till %d\n" +msgstr " Sätt kolumnen till %d\n" -# -#: readelf.c:6125 +#: readelf.c:6820 #, c-format msgid " Set is_stmt to %d\n" -msgstr " Sätt is_stmt till %d\n" +msgstr " Sätt is_stmt till %d\n" -# -#: readelf.c:6130 +#: readelf.c:6825 msgid " Set basic block\n" -msgstr " Sätt basblocket\n" +msgstr " Sätt basblocket\n" -# -#: readelf.c:6138 +#: readelf.c:6833 #, c-format msgid " Advance PC by constant %d to 0x%lx\n" -msgstr " Öka PC med konstant %d till 0x%lx\n" +msgstr " Öka programräknaren med konstant %d till 0x%lx\n" -# -#: readelf.c:6146 +#: readelf.c:6841 #, c-format msgid " Advance PC by fixed size amount %d to 0x%lx\n" -msgstr " Öka PC med fastlängdsantal %d till 0x%lx\n" +msgstr " Öka programräknaren med fastlängdsantal %d till 0x%lx\n" -# -#: readelf.c:6151 +#: readelf.c:6846 msgid " Set prologue_end to true\n" -msgstr " Sätt prologue_end till sannt\n" +msgstr " Sätt prologue_end till sann\n" -# -#: readelf.c:6155 +#: readelf.c:6850 msgid " Set epilogue_begin to true\n" -msgstr " Sätt epilogue_begin till sannt\n" +msgstr " Sätt epilogue_begin till sann\n" -# -#: readelf.c:6161 +#: readelf.c:6856 #, c-format msgid " Set ISA to %d\n" -msgstr " Sätt ISA till %d\n" +msgstr " Sätt ISA till %d\n" -# -#: readelf.c:6165 +#: readelf.c:6860 #, c-format msgid " Unknown opcode %d with operands: " -msgstr " Okänd op-kod %d med operand: " +msgstr " Okänd op-kod %d med operand: " -# -#: readelf.c:6197 readelf.c:6658 readelf.c:6730 +#: readelf.c:6891 readelf.c:7371 readelf.c:7443 #, c-format msgid "" "Contents of the %s section:\n" "\n" msgstr "" -"%s-sektionens innehåll:\n" +"%s-sektionens innehÃ¥ll:\n" "\n" -# -#: readelf.c:6216 -msgid "64-bit DWARF pubnames are not supported yet.\n" -msgstr "64-bitars publika DWARF-namn stöds inte än.\n" - -# -#: readelf.c:6226 -msgid "Only DWARF 2 pubnames are currently supported\n" -msgstr "Endast publika DWARF 2-namn stöds för närvarande\n" +#: readelf.c:6931 +msgid "Only DWARF 2 and 3 pubnames are currently supported\n" +msgstr "Endast DWARF 2 och 3 pub.-namn hanteras för närvarande\n" -# -#: readelf.c:6233 +#: readelf.c:6938 #, c-format msgid " Length: %ld\n" -msgstr " längd: %ld\n" +msgstr " längd: %ld\n" -# -#: readelf.c:6235 +#: readelf.c:6940 #, c-format msgid " Version: %d\n" msgstr " version: %d\n" -# -#: readelf.c:6237 +#: readelf.c:6942 #, c-format msgid " Offset into .debug_info section: %ld\n" msgstr " offset i .debug_info-sektionen: %ld\n" -# -#: readelf.c:6239 +#: readelf.c:6944 #, c-format msgid " Size of area in .debug_info section: %ld\n" -msgstr " storl. på omr. i .debug_info-sekt.: %ld\n" +msgstr " storl. pÃ¥ omr. i .debug_info-sekt.: %ld\n" -# -#: readelf.c:6242 +#: readelf.c:6947 msgid "" "\n" " Offset\tName\n" @@ -4220,519 +3711,470 @@ msgstr "" "\n" " Offset\tNamn\n" -# -#: readelf.c:6333 +#: readelf.c:7042 #, c-format msgid "Unknown TAG value: %lx" -msgstr "Okänt TAG-värde: %lx" +msgstr "Okänt TAG-värde: %lx" -# -#: readelf.c:6443 +#: readelf.c:7156 #, c-format msgid "Unknown AT value: %lx" -msgstr "Okänt AT-värde: %lx" +msgstr "Okänt AT-värde: %lx" -# -#: readelf.c:6480 +#: readelf.c:7193 #, c-format msgid "Unknown FORM value: %lx" -msgstr "Okänt FORM-värde: %lx" +msgstr "Okänt FORM-värde: %lx" -# -#: readelf.c:6679 +#: readelf.c:7392 #, c-format msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" -msgstr " DW_MACINFO_start_file - rad: %d filnummer: %d\n" +msgstr " DW_MACINFO_start_file - rad: %d filnr: %d\n" -# -#: readelf.c:6684 +#: readelf.c:7397 msgid " DW_MACINFO_end_file\n" msgstr " DW_MACINFO_end_file\n" -# -#: readelf.c:6692 +#: readelf.c:7405 #, c-format msgid " DW_MACINFO_define - lineno : %d macro : %s\n" -msgstr " DW_MACINFO_define - rad: %d makro: %s\n" +msgstr " DW_MACINFO_define - rad : %d makro : %s\n" -# -#: readelf.c:6700 +#: readelf.c:7413 #, c-format msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" -msgstr " DW_MACINFO_undef - rad: %d makro: %s\n" +msgstr " DW_MACINFO_undef - rad : %d makro : %s\n" -# -#: readelf.c:6711 +#: readelf.c:7424 #, c-format msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" -msgstr " DW_MACINFO_vendor_ext - konstant: %d sträng: %s\n" +msgstr " DW_MACINFO_vendor_ext - konstant : %d sträng : %s\n" -# -# Detta är ett tabellhuvud med två kolumner. -#: readelf.c:6739 +#: readelf.c:7452 msgid " Number TAG\n" msgstr " Nummer TAGG\n" -# -#: readelf.c:6745 +#: readelf.c:7458 #, c-format msgid " %ld %s [%s]\n" msgstr " %ld %s [%s]\n" -# -#: readelf.c:6748 +#: readelf.c:7461 msgid "has children" msgstr "har barn" -# -#: readelf.c:6748 +#: readelf.c:7461 msgid "no children" msgstr "inga barn" -# -#: readelf.c:6752 +#: readelf.c:7465 #, c-format msgid " %-18s %s\n" msgstr " %-18s %s\n" -# -#: readelf.c:6773 +#: readelf.c:7486 #, c-format msgid " %lu byte block: " msgstr " %lu byte-block: " -# -#: readelf.c:7096 +#: readelf.c:7814 msgid "(User defined location op)" -msgstr "(användardefinierad plats-op)" +msgstr "(användardefinierad plats-op)" -# -#: readelf.c:7098 +#: readelf.c:7816 msgid "(Unknown location op)" -msgstr "(okänd plats-op)" +msgstr "(okänd plats-op)" -# -#: readelf.c:7137 +#: readelf.c:7855 +msgid "debug_loc section data" +msgstr "debug_loc-sektionsdata" + +#: readelf.c:7887 +msgid "" +"\n" +"The .debug_loc section is empty.\n" +msgstr "" +"\n" +".debug_loc-sektionen är tom.\n" + +#: readelf.c:7891 +msgid "" +"Contents of the .debug_loc section:\n" +"\n" +msgstr "" +"InnehÃ¥ll i .debug_loc-sektionen:\n" +"\n" + +# Expression är en maskinkodsinstruktion +#: readelf.c:7892 +msgid "" +"\n" +" Offset Begin End Expression\n" +msgstr "" +"\n" +" Offset Start Slut Instruktion\n" + +#: readelf.c:7968 msgid "debug_str section data" msgstr "debug_str sektionsdata" - -# -#: readelf.c:7156 + +#: readelf.c:7987 msgid "" msgstr "" -# -#: readelf.c:7159 +#: readelf.c:7990 msgid "" -msgstr "" +msgstr "" -# -#: readelf.c:7179 +#: readelf.c:8009 msgid "" "\n" "The .debug_str section is empty.\n" msgstr "" "\n" -".debug_str-sektionen är tom.\n" +".debug_str-sektionen är tom.\n" -# -#: readelf.c:7183 +#: readelf.c:8013 msgid "" "Contents of the .debug_str section:\n" "\n" msgstr "" -"Innehåll i .debug_str-sektionen:\n" +"InnehÃ¥ll i .debug_str-sektionen:\n" "\n" -# -#: readelf.c:7354 +#: readelf.c:8088 +msgid "Internal error: DWARF version is not 2 or 3.\n" +msgstr "Internt fel: DWARF-version inte 2 eller 3.\n" + +#: readelf.c:8203 #, c-format -msgid " (indirect string, offset: 0x%lx): " -msgstr " (indirekt sträng, offset: 0x%lx): " +msgid " (indirect string, offset: 0x%lx): %s" +msgstr " (indirekt sträng, offset: 0x%lx): %s" -# -#: readelf.c:7363 +#: readelf.c:8212 #, c-format -msgid "Unrecognised form: %d\n" -msgstr "Okänt formulär: %d\n" +msgid "Unrecognized form: %d\n" +msgstr "Okänd formtyp: %d\n" -# -#: readelf.c:7376 +#: readelf.c:8226 msgid "(not inlined)" msgstr "(inte inlajnad)" -# -#: readelf.c:7377 +#: readelf.c:8229 msgid "(inlined)" msgstr "(inlajnad)" -# -#: readelf.c:7378 +#: readelf.c:8232 msgid "(declared as inline but ignored)" msgstr "(deklarerad som inlajn men ignorerad)" -# -#: readelf.c:7379 +#: readelf.c:8235 msgid "(declared as inline and inlined)" msgstr "(deklarerad som inlajn och inlajnad)" -# -#: readelf.c:7380 +#: readelf.c:8238 #, c-format msgid " (Unknown inline attribute value: %lx)" -msgstr " (okänt inlajnattributvärde: %lx)" +msgstr " (okänt inlajnattributvärde: %lx)" -# -#: readelf.c:7545 readelf.c:7746 +#: readelf.c:8419 readelf.c:8646 #, c-format msgid "" "The section %s contains:\n" "\n" msgstr "" -"Sektion %s innehåller:\n" +"Sektion %s innehÃ¥ller:\n" "\n" -# -#: readelf.c:7568 -msgid "64-bit DWARF debug info is not supported yet.\n" -msgstr "64-bitars DWARF-felsökningsinfo stöds inte än.\n" - -# -#: readelf.c:7637 +#: readelf.c:8535 #, c-format msgid " Compilation Unit @ %lx:\n" msgstr " Kompileringsenhet @ %lx:\n" -# -#: readelf.c:7638 +#: readelf.c:8536 #, c-format msgid " Length: %ld\n" -msgstr " längd: %ld\n" +msgstr " längd: %ld\n" -# -#: readelf.c:7639 +#: readelf.c:8537 #, c-format msgid " Version: %d\n" msgstr " version: %d\n" -# -#: readelf.c:7640 +#: readelf.c:8538 #, c-format msgid " Abbrev Offset: %ld\n" -msgstr " förk.-offset: %ld\n" +msgstr " förk.-offset: %ld\n" -# -#: readelf.c:7641 +#: readelf.c:8539 #, c-format msgid " Pointer Size: %d\n" msgstr " pekarstorlek: %d\n" -# -#: readelf.c:7645 -msgid "Only version 2 DWARF debug information is currently supported.\n" -msgstr "Endast version 2 av DWARF-felsökningsinformation stöds för närvarande.\n" +#: readelf.c:8543 +msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" +msgstr "Endast DWARF 2 och 3 felsökningsinformation hanteras för närvarande.\n" -# -#: readelf.c:7666 +#: readelf.c:8563 msgid "Unable to locate .debug_abbrev section!\n" -msgstr "Kan inte hitta någon .debug_abbrev-sektion!\n" +msgstr "Kan inte hitta nÃ¥gon .debug_abbrev-sektion!\n" -# -#: readelf.c:7672 +#: readelf.c:8569 msgid "debug_abbrev section data" -msgstr "debug_abbrev-sektionsdata" +msgstr "debug_abbrev sektionsdata" -# -#: readelf.c:7709 +#: readelf.c:8606 #, c-format msgid "Unable to locate entry %lu in the abbreviation table\n" -msgstr "Kan inte hitta post %lu i förkortningstabellen\n" +msgstr "Kan inte hitta post %lu i förkortningstabellen\n" -# -#: readelf.c:7714 +#: readelf.c:8611 #, c-format msgid " <%d><%lx>: Abbrev Number: %lu (%s)\n" -msgstr " <%d><%lx>: Förkortningsnummer: %lu (%s)\n" - -# -#: readelf.c:7767 -msgid "64-bit DWARF aranges are not supported yet.\n" -msgstr "64-bitars DWARF-a-intervall stöds inte än.\n" +msgstr " <%d><%lx>: Förkortningsnummer: %lu (%s)\n" -# -#: readelf.c:7773 -msgid "Only DWARF 2 aranges are currently supported.\n" -msgstr "Endast DWARF2:s a-intervall stöds för närvarande.\n" +#: readelf.c:8691 +msgid "Only DWARF 2 and 3 aranges are currently supported.\n" +msgstr "Endast DWARF 2 och 3 a-intervall hanteras för närvarande.\n" -# -#: readelf.c:7777 +#: readelf.c:8695 #, c-format msgid " Length: %ld\n" -msgstr " längd: %ld\n" +msgstr " längd: %ld\n" -# -#: readelf.c:7778 +#: readelf.c:8696 #, c-format msgid " Version: %d\n" msgstr " version: %d\n" -# -#: readelf.c:7779 +#: readelf.c:8697 #, c-format msgid " Offset into .debug_info: %lx\n" msgstr " offset i .debug_info: %lx\n" -# -#: readelf.c:7780 +#: readelf.c:8698 #, c-format msgid " Pointer Size: %d\n" msgstr " pekarstorlek: %d\n" -# -#: readelf.c:7781 +#: readelf.c:8699 #, c-format msgid " Segment Size: %d\n" msgstr " segmentstorlek: %d\n" -# -#: readelf.c:7783 +#: readelf.c:8701 msgid "" "\n" " Address Length\n" msgstr "" "\n" -" adresslängd\n" +" adresslängd\n" -# -#: readelf.c:7965 +#: readelf.c:8903 #, c-format msgid "The section %s contains:\n" -msgstr "Sektion %s innehåller:\n" - -# -#: readelf.c:7988 -msgid "64-bit DWARF format frames are not supported yet.\n" -msgstr "64-bitars DWARF-formatmallar stöds inte än.\n" +msgstr "Sektion %s innehÃ¥ller:\n" -# -#: readelf.c:8499 +#: readelf.c:9538 #, c-format msgid "Displaying the debug contents of section %s is not yet supported.\n" -msgstr "Visa felsökningsinnehållet i sektion %s stöds inte än.\n" +msgstr "Visa felsökningsinnehÃ¥llet i sektion %s hanteras inte än.\n" -# -#: readelf.c:8565 +#: readelf.c:9634 #, c-format msgid "" "\n" "Section '%s' has no debugging data.\n" msgstr "" "\n" -"Sektion \"%s\" innehåller ingen felsökningsdata.\n" +"Sektion \"%s\" innehÃ¥ller ingen felsökningsdata.\n" -# -#: readelf.c:8570 readelf.c:8632 +#: readelf.c:9639 readelf.c:9701 msgid "debug section data" -msgstr "felsökningssektionsdata" +msgstr "felsökningssektionsdata" -# -#: readelf.c:8586 +#: readelf.c:9655 #, c-format -msgid "Unrecognised debug section: %s\n" -msgstr "Okänd felsökningssektion: %s\n" +msgid "Unrecognized debug section: %s\n" +msgstr "Okänd felsökningssektion: %s\n" -# -#: readelf.c:8660 +#: readelf.c:9729 msgid "Some sections were not dumped because they do not exist!\n" -msgstr "Några sektioner skrevs inte ut eftersom de inte existerar!\n" +msgstr "NÃ¥gra sektioner skrevs inte ut eftersom de inte existerar!\n" -# -#: readelf.c:8733 +#: readelf.c:9806 readelf.c:10170 msgid "liblist" msgstr "bibliotekslista" -# -#: readelf.c:8818 +#: readelf.c:9891 msgid "options" msgstr "flaggor" -# -#: readelf.c:8849 +#: readelf.c:9922 #, c-format msgid "" "\n" "Section '%s' contains %d entries:\n" msgstr "" "\n" -"Sektion \"%s\" innehåller %d poster:\n" +"Sektion \"%s\" innehÃ¥ller %d poster:\n" -# -# BUGG: Fel i originalet? -#: readelf.c:9010 -msgid "conflict list with without table" -msgstr "konfliktlista utan tabell" +#: readelf.c:10083 +msgid "conflict list found without a dynamic symbol table" +msgstr "fann konfliktlista utan dynamisk symboltabell" -# -#: readelf.c:9028 readelf.c:9044 +#: readelf.c:10101 readelf.c:10117 msgid "conflict" msgstr "konflikt" -# -#: readelf.c:9054 +#: readelf.c:10127 #, c-format msgid "" "\n" "Section '.conflict' contains %ld entries:\n" msgstr "" "\n" -"Sektion \".conflict\" innehåller %ld poster:\n" +"Sektion \".conflict\" innehÃ¥ller %ld poster:\n" -# -#: readelf.c:9056 +#: readelf.c:10129 msgid " Num: Index Value Name" -msgstr " Num: Index Värde Namn" +msgstr " Num: Index Värde Namn" -# -#: readelf.c:9083 +#: readelf.c:10178 +msgid "liblist string table" +msgstr "liblist-strängtabell" + +#: readelf.c:10187 +#, c-format +msgid "" +"\n" +"Library list section '%s' contains %lu entries:\n" +msgstr "" +"\n" +"Bibliotekslistsektion \"%s\" innehÃ¥ller %lu poster:\n" + +#: readelf.c:10236 msgid "NT_PRSTATUS (prstatus structure)" msgstr "NT_PRSTATUS (prstatus-struktur)" -# -#: readelf.c:9084 +#: readelf.c:10237 msgid "NT_FPREGSET (floating point registers)" msgstr "NT_FPREGSET (flyttalsregister)" -# -#: readelf.c:9085 +#: readelf.c:10238 msgid "NT_PRPSINFO (prpsinfo structure)" msgstr "NT_PRPSINFO (prpsinfo-struktur)" -# -#: readelf.c:9086 +#: readelf.c:10239 msgid "NT_TASKSTRUCT (task structure)" -msgstr "NT_TASKSTRUCT (uppgiftsstruktur)" +msgstr "NT_TASKSTRUCT (task-struktur)" -# -#: readelf.c:9087 +#: readelf.c:10240 msgid "NT_PRXFPREG (user_xfpregs structure)" msgstr "NT_PRXFPREG (user_xfpregs-struktur)" -# -#: readelf.c:9088 +#: readelf.c:10241 msgid "NT_PSTATUS (pstatus structure)" msgstr "NT_PSTATUS (pstatus-struktur)" -# -#: readelf.c:9089 +#: readelf.c:10242 msgid "NT_FPREGS (floating point registers)" msgstr "NT_FPREGS (flyttalsregister)" -# -#: readelf.c:9090 +#: readelf.c:10243 msgid "NT_PSINFO (psinfo structure)" msgstr "NT_PSINFO (psinfo-struktur)" -# -#: readelf.c:9091 +#: readelf.c:10244 msgid "NT_LWPSTATUS (lwpstatus_t structure)" msgstr "NT_LWPSTATUS (lwpstatus_t-struktur)" -# -#: readelf.c:9092 +#: readelf.c:10245 msgid "NT_LWPSINFO (lwpsinfo_t structure)" msgstr "NT_LWPSINFO (lwpsinfo_t-struktur)" -# -# BUGG: Stavfel i originalet (str>uc Set the binary file format\n" +" -h --help Display this information\n" +" -v --version Display the program's version\n" +"\n" msgstr "" -"Användning: %s [-A | --format=sysv | -B | --format=berkeley]\n" -" [-o | --radix=8 | -d | --radix=10 | -h | --radix=16]\n" -" [-V | --version] [--target=bfdnamn] [--help] [fil...]\n" - -# -#: size.c:85 -msgid "default is --format=berkeley\n" -msgstr "standardvärdet är --format=berkeley\n" - -# -#: size.c:87 -msgid "default is --format=sysv\n" -msgstr "standardvärdet är --format=sysv\n" +" Flaggorna är:\n" +" -A|-B --format={sysv|berkeley} Välj utdatastil (standard är %s)\n" +" -o|-d|-x --radix={8|10|16} Visa tal oktalt, decimalt eller hexadecimalt\n" +" -t --totals Visa samanlagd storlek (endast Berkeley)\n" +" --target= Välj binärfilens format\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programmets versionsinformation\n" +"\n" -# -#: size.c:146 +#: size.c:160 #, c-format msgid "invalid argument to --format: %s" msgstr "ogiltigt argument till --format: %s" -# -#: size.c:173 +#: size.c:187 #, c-format msgid "Invalid radix: %s\n" msgstr "Ogiltig talbas: %s\n" -# -#: srconv.c:1931 -#, c-format -msgid "Usage: %s [-dhVq] in-file [out-file]\n" -msgstr "Användning: %s [-dhVq] infil [utfil]\n" +#: srconv.c:1953 +msgid "Convert a COFF object file into a SYSROFF object file\n" +msgstr "Konverterar en COFF-objektfil till en SYSROFF-objektfil\n" -# -#: srconv.c:1938 -#, c-format -msgid "%s: Convert a COFF object file into a SYSROFF object file\n" -msgstr "%s: Konverterar en COFF-objektfil till en SYSROFF-objektfil\n" +#: srconv.c:1954 +msgid "" +" The options are:\n" +" -q --quick (Obsolete - ignoerd)\n" +" -n --noprescan Do not perform a scan to convert commons into defs\n" +" -d --debug Display information about what is being done\n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Flaggorna är:\n" +" -q --quick (UtgÃ¥tt - ignoreras)\n" +" -n --noprescan Gör inte sök-och-ersätt frÃ¥n commons till defs\n" +" -d --debug Visa information om vad som händer\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programets versionsinformation\n" -# -#: srconv.c:2074 +#: srconv.c:2099 #, c-format msgid "unable to open output file %s" -msgstr "kan inte öppna utdatafil %s" +msgstr "kan inte öppna utfil %s" -# -#: stabs.c:343 stabs.c:1760 +#: stabs.c:346 stabs.c:1755 msgid "numeric overflow" -msgstr "numeriskt överspill" +msgstr "numeriskt överspill" -# -# FIXME -#: stabs.c:354 +#: stabs.c:357 #, c-format msgid "Bad stab: %s\n" msgstr "Felaktig stab: %s\n" -# -#: stabs.c:364 +#: stabs.c:367 #, c-format msgid "Warning: %s: %s\n" msgstr "Varning: %s: %s\n" -# -#: stabs.c:486 +#: stabs.c:488 msgid "N_LBRAC not within function\n" msgstr "N_LBRAC inte inuti funktion\n" -# -#: stabs.c:525 +#: stabs.c:527 msgid "Too many N_RBRACs\n" -msgstr "För många N_RBRAC:s\n" +msgstr "För mÃ¥nga N_RBRAC:s\n" -# -#: stabs.c:770 +#: stabs.c:773 msgid "unknown C++ encoded name" -msgstr "okänt C++-kodat namn" +msgstr "okänt C++-kodat namn" -# #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabs.c:1297 +#: stabs.c:1293 msgid "unrecognized cross reference type" -msgstr "okänd korsreferenstyp" +msgstr "okänd korsreferenstyp" -# #. Does this actually ever happen? Is that why we are worrying #. about dealing with it rather than just calling error_type? -#: stabs.c:1852 +#: stabs.c:1847 msgid "missing index type" msgstr "utebliven indextyp" -# -#: stabs.c:2179 +#: stabs.c:2174 msgid "unknown virtual character for baseclass" -msgstr "okänt virtuellt tecken för basklass" +msgstr "okänt virtuellt tecken för basklass" -# -# FIXME -#: stabs.c:2197 +#: stabs.c:2192 msgid "unknown visibility character for baseclass" -msgstr "okänd synlighetstecken för basklass" +msgstr "okänt synlighetstecken för basklass" -# -#: stabs.c:2389 +#: stabs.c:2384 msgid "unnamed $vb type" msgstr "$vb-typ utan namn" -# -#: stabs.c:2395 +#: stabs.c:2390 msgid "unrecognized C++ abbreviation" -msgstr "okänd C++-förkortning" +msgstr "okänd C++-förkortning" -# -# FIXME -#: stabs.c:2475 +#: stabs.c:2470 msgid "unknown visibility character for field" -msgstr "okänd synlighetstecken för fält" +msgstr "okänt synlighetstecken för fält" -# -#: stabs.c:2731 +#: stabs.c:2726 msgid "const/volatile indicator missing" msgstr "const/volatile-indikator saknas" -# -#: stabs.c:2971 +#: stabs.c:2967 #, c-format msgid "No mangling for \"%s\"\n" msgstr "Ingen kodning av \"%s\"\n" -# -#: stabs.c:3284 +#: stabs.c:3281 msgid "Undefined N_EXCL" msgstr "Odefinierad N_EXCL" -# -#: stabs.c:3372 +#: stabs.c:3369 #, c-format msgid "Type file number %d out of range\n" -msgstr "Typens filnummer %d utanför sitt intervall\n" +msgstr "Typs filnummer %d utanför sitt intervall\n" -# -#: stabs.c:3377 +#: stabs.c:3374 #, c-format msgid "Type index number %d out of range\n" -msgstr "Typens indexnummer %d utanför sitt intervall\n" +msgstr "Typs indexnummer %d utanför sitt intervall\n" -# -#: stabs.c:3464 +#: stabs.c:3461 #, c-format msgid "Unrecognized XCOFF type %d\n" -msgstr "Okänd XCOFF-typ %d\n" +msgstr "Okänd XCOFF-typ %d\n" -# -#: stabs.c:3763 +#: stabs.c:3762 #, c-format msgid "bad mangled name `%s'\n" -msgstr "felaktigt kodat namn \"%s\"\n" +msgstr "felaktigt manglat namn \"%s\"\n" -# #: stabs.c:3859 msgid "no argument types in mangled string\n" -msgstr "ingen argumenttyp i kodad sträng\n" +msgstr "inga argumenttyper i den manglade strängen\n" -# -#: strings.c:199 +#: strings.c:208 #, c-format msgid "invalid number %s" msgstr "ogiltigt tal %s" -# -#: strings.c:638 +#: strings.c:647 #, c-format msgid "invalid integer argument %s" msgstr "ogiltigt heltalsargument %s" -# -#: strings.c:648 -#, c-format +#: strings.c:658 +msgid " Display printable strings in [file(s)] (stdin by default)\n" +msgstr " Visa läsbara strängar i [fil(er)] (eller frÃ¥n standard in)\n" + +#: strings.c:659 msgid "" -"Usage: %s [-afov] [-n min-len] [-min-len] [-t {o,x,d}] [-e {s,b,l,B,L}]\n" -" [-] [--all] [--print-file-name] [--bytes=min-len] [--radix={o,x,d}]\n" -" [--target=bfdname] [--encoding {s,b,l,B,L}] [--help] [--version] file...\n" +" The options are:\n" +" -a - --all Scan the entire file, not just the data section\n" +" -f --print-file-name Print the name of the file before each string\n" +" -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n" +" - least [number] characters (default 4).\n" +" -t --radix={o,x,d} Print the location of the string in base 8, 10 or 16\n" +" -o An alias for --radix=o\n" +" -T --target= Specify the binary file format\n" +" -e --encoding={s,S,b,l,B,L} Select character size and endianness:\n" +" s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" msgstr "" -"Användning: %s [-afov] [-n min-längd] [-min-len] [-t {o,x,d}] [-e {s,b,l,B,L}]\n" -" [-] [--all] [--print-file-name] [--bytes=min-längd] [--radix={o,x,d}]\n" -" [--target=bfdnamn] [--encoding {s,b,l,B,L}] [--help] [--version] fil...\n" - -# -#: sysdump.c:733 -#, c-format -msgid "Usage: %s [-hV] in-file\n" -msgstr "Användning: %s [-hV] infil\n" +" Flaggorna är:\n" +" -a - --all Undersök hela filen, inte bara datasektionen\n" +" -f --print-file-name Skriv filens namn före varje sträng\n" +" -n --bytes=[antal] Hitta och skriv ut varje NUL-terminerad sekvens\n" +" - med minst [antal] tecken (standard 4).\n" +" -t --radix={o,d,x} Skriv strängens position i talbas 8, 10 eller 16\n" +" -o Synonym för --radix=o\n" +" -T --target= Välj binärfilens format\n" +" -e --encoding={s,S,b,l,B,L} Välj teckenstorlek och typ av endian:\n" +" s=7-bit, S=8-bit, {b,l}=16-bit, {B,L}=32-bit\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programmets versionsinformation\n" + +#: sysdump.c:768 +msgid "Print a human readable interpretation of a SYSROFF object file\n" +msgstr "Skriv en mänskligt läsbar tolkning av en SYSROFF-objektfil\n" + +#: sysdump.c:769 +msgid "" +" The options are:\n" +" -h --help Display this information\n" +" -v --version Print the program's version number\n" +msgstr "" +" Flaggorna är:\n" +" -h --help Visa denna hjälp\n" +" -v --version Visa programment versionsinformation\n" -# -#: sysdump.c:805 +#: sysdump.c:836 #, c-format msgid "cannot open input file %s" -msgstr "kan inte öppna indatafil %s" - -# -#: version.c:35 -msgid "Copyright 2001 Free Software Foundation, Inc.\n" -msgstr "Copyright 2001 Free Software Foundation, Inc.\n" +msgstr "kan inte öppna infil %s" -# #: version.c:36 +msgid "Copyright 2002 Free Software Foundation, Inc.\n" +msgstr "Copyright 2002 Free Software Foundation, Inc.\n" + +#: version.c:37 msgid "" "This program is free software; you may redistribute it under the terms of\n" "the GNU General Public License. This program has absolutely no warranty.\n" msgstr "" -"Detta program är fri programvara; du kan sprida det vidare under villkoren\n" +"Detta program är fri programvara; du kan sprida det vidare under villkoren\n" "i GNU General Public License. Detta program har inga som helst garantier.\n" -# -#: windres.c:237 +#: windres.c:205 #, c-format msgid "can't open %s `%s': %s" -msgstr "kan inte öppna %s \"%s\": %s" +msgstr "kan inte öppna %s \"%s\": %s" -# -#: windres.c:416 +#: windres.c:384 msgid ": expected to be a directory\n" -msgstr ": förväntades vara en katalog\n" +msgstr ": förväntades vara en katalog\n" -# -#: windres.c:428 +#: windres.c:396 msgid ": expected to be a leaf\n" -msgstr ": förväntades vara ett löv\n" +msgstr ": förväntades vara ett löv\n" -# -#: windres.c:437 +#: windres.c:405 #, c-format msgid "%s: warning: " msgstr "%s: varning: " -# -#: windres.c:439 +#: windres.c:407 msgid ": duplicate value\n" -msgstr ": dublett av värdet\n" +msgstr ": dublett av värdet\n" -# -#: windres.c:602 +#: windres.c:569 #, c-format msgid "unknown format type `%s'" -msgstr "okänd formattyp \"%s\"" +msgstr "okänd formattyp \"%s\"" -# -#: windres.c:603 +#: windres.c:570 #, c-format msgid "%s: supported formats:" msgstr "%s: format som hanteras:" -# #. Otherwise, we give up. -#: windres.c:690 +#: windres.c:655 #, c-format msgid "can not determine type of file `%s'; use the -I option" -msgstr "kan inte fastställa filtyp på fil \"%s\"; använd flagga -I" +msgstr "kan inte fastställa filtyp pÃ¥ \"%s\"; använd flagga -I" -# -#: windres.c:704 +#: windres.c:669 #, c-format -msgid "Usage: %s [options] [input-file] [output-file]\n" -msgstr "Användning: %s [flaggor] [infil] [utfil]\n" +msgid "Usage: %s [option(s)] [input-file] [output-file]\n" +msgstr "Användning: %s [flaggor] [infil] [utfil]\n" -# -#: windres.c:706 +#: windres.c:671 msgid "" -"Options:\n" -" -i FILE, --input FILE Name input file\n" -" -o FILE, --output FILE Name output file\n" -" -I FORMAT, --input-format FORMAT\n" -" Specify input format\n" -" -O FORMAT, --output-format FORMAT\n" -" Specify output format\n" -" -F TARGET, --target TARGET Specify COFF target\n" -" --preprocessor PROGRAM Program to use to preprocess rc file\n" -" --include-dir DIR Include directory when preprocessing rc file\n" -" -DSYM[=VAL], --define SYM[=VAL]\n" -" Define SYM when preprocessing rc file\n" -" -v Verbose - tells you what it's doing\n" -" --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" -" --no-use-temp-file Use popen (default)\n" +" The options are:\n" +" -i --input= Name input file\n" +" -o --output= Name output file\n" +" -J --input-format= Specify input format\n" +" -O --output-format= Specify output format\n" +" -F --target= Specify COFF target\n" +" --preprocessor= Program to use to preprocess rc file\n" +" -I --include-dir= Include directory when preprocessing rc file\n" +" -D --define [=] Define SYM when preprocessing rc file\n" +" -U --undefine Undefine SYM when preprocessing rc file\n" +" -v --verbose Verbose - tells you what it's doing\n" +" -l --language= Set language when reading rc file\n" +" --use-temp-file Use a temporary file instead of popen to read\n" +" the preprocessor output\n" +" --no-use-temp-file Use popen (default)\n" msgstr "" -"Flaggor:\n" -" -i FIL, --input FIL Namnge indatafilen\n" -" -o FIL, --output FIL Namnge utdatafilen\n" -" -I FORMAT, --input-format FORMAT\n" -" Ange indataformatet\n" -" -O FORMAT, --output-format FORMAT\n" -" Ange utdataformatet\n" -" -F MÅL, --target MÅL Ange COFF-målet\n" -" --preprocessor PROGRAM Program att använda som preprocessor på rc-filen\n" -" --include-dir KATALOG Inkludera katalog när rc-filen preprocessas\n" -" -DSYM[=VÄRDE], --define SYM[=VÄRDE]\n" -" Definiera SYM när rc-filen preporocessas\n" -" -v Mångordig - berättar vad den gör\n" -" --language SPRÅK Sätt språket när rc-filen läses\n" -" --use-temp-file Använd en tem.fil istället för popen vid läsning\n" -" av utdata från preprocessorn\n" -" --no-use-temp-file Använd popen (förval)\n" +" Flaggorna är:\n" +" -i --input= Välj infil\n" +" -o --output= Välj utfil\n" +" -J --input-format= Välj indataformat\n" +" -O --output-format= Välj utdataformat\n" +" -F --target= Välj COFF-mÃ¥l\n" +" --preprocessor= Program att förbehandla rc-filen med\n" +" -I --include-dir= Inkludera ur katalog när rc-filen förbehandlas\n" +" -D --define [=] Definiera SYM när rc-filen förbehandlas\n" +" -U --undefine Odefiniera SYM när rc-filen förbehandlas\n" +" -v --verbose Utförlig - berättar vad den gör\n" +" -l --language= Välj sprÃ¥k när rc-filen läses\n" +" --use-temp-file Använd en tempfil istället för popen för att\n" +" läsa utdata frÃ¥n förbehandlaren\n" +" --no-use-temp-file Använd popen (standard)\n" + +#: windres.c:687 +msgid " --yydebug Turn on parser debugging\n" +msgstr " --yydebug SlÃ¥ pÃ¥ tolkens felsökning\n" -# -#: windres.c:725 -msgid " --yydebug Turn on parser debugging\n" -msgstr " --yydebug Slå på tolkens felsökning\n" - -# -#: windres.c:728 +#: windres.c:690 msgid "" -" --help Print this help message\n" -" --version Print version information\n" +" -r Ignored for compatibility with rc\n" +" -h --help Print this help message\n" +" -V --version Print version information\n" msgstr "" -" --help Visa denna hjälp\n" -" --version Visa versionsinformation\n" +" -r Ignorerad, för kompabilitet med rc\n" +" -h --help Visa denna hjälp\n" +" -V --version Visa versionsinformation\n" -# -#: windres.c:731 +#: windres.c:694 msgid "" "FORMAT is one of rc, res, or coff, and is deduced from the file name\n" "extension if not specified. A single file name is an input file.\n" "No input-file is stdin, default rc. No output-file is stdout, default rc.\n" msgstr "" -"FORMAT är någon av rc, res eller coff, och härleds från filnamnsändelsen\n" -"om det inte anges. Ett ensamt filnamn är en indatafil. Ingen indatafil\n" -"betyder standard in, med format rc. Ingen utdatafil betyder standard ut,\n" -"med format rc.\n" +"FORMAT är ett av rc, res eller coff, och härleds frÃ¥n filändelsen\n" +"om det inte anges. Ett ensamt filnamn är en infil. Ingen infil\n" +"betyder standard in, med formatet rc. Ingen utfil betyder standard ut,\n" +"med formatet rc.\n" -# -#: windres.c:983 +#: windres.c:833 +msgid "invalid option -f\n" +msgstr "ogiltig flagga -f\n" + +#: windres.c:838 +msgid "No filename following the -fo option.\n" +msgstr "Inget filnamn efter flaggan -fo.\n" + +#: windres.c:896 +msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" +msgstr "Flagga -I för att välja informat har utgÃ¥tt, vänligen använd -J istället.\n" + +#: windres.c:1014 msgid "no resources" msgstr "inga resurser" -# -#: wrstabs.c:366 wrstabs.c:2027 +#: wrstabs.c:395 wrstabs.c:2055 #, c-format msgid "string_hash_lookup failed: %s" msgstr "string_hash_lookup misslyckades: %s" -# -#: wrstabs.c:666 +#: wrstabs.c:695 #, c-format msgid "stab_int_type: bad size %u" msgstr "stab_int_type: felaktig storlek %u" -# -#: wrstabs.c:1467 +#: wrstabs.c:1495 #, c-format msgid "%s: warning: unknown size for field `%s' in struct" -msgstr "%s: varning: okänd storleken på fält \"%s\" i strukturen" +msgstr "%s: varning: okänd storleken pÃ¥ fält \"%s\" i strukturen" diff --git a/binutils/po/vi.gmo b/binutils/po/vi.gmo index a2b27db3d5c11064c6d9c2a171c3f277da631fc3..2878b13abb28e52b910010b01505f2d4fba33d86 100644 GIT binary patch delta 46993 zcmb512YgjU`oHf9HKF$ohh9Ukp#=!N6RL)Oj=`9I$?b3?G~{{H8)lV^H)=bd-v%snf=9gO|%skrdF^($W+;8|HY z5NHWMXdeiis1gWlAFtRzU}H)k;KJ)+L%0Vvg)hO@@Dtb$R$Ckhbcfww8#os>fy-b$ zcqQxvx4`D`X;>o=2nUYiQAJ-t7uHHO1$#n;$JuZu>`XWetHV2?Ia1YLL*>_Yp2tMO>$d*M*{1{??*rUwFJ;bhndZh&#{PS^t8568h5 zVFGNF5eW2wGhh#RKI{p1Ky~b0SQ~x@>%(7QL)s723 z1z&)Y*fH1@{sEi8u1hqcKwu1%h;v|HcnRzc_ds>*bEtexGm)km7=@=J%!SGjfr{S; zCBiSDB=Q^72>WLR0{!3;sE%!dW8ro<8-5EVq4C*FCrpQ9;8}1qd=QR;KW8I<&0WHo zrh*l4KH{ydL(42Vf8QvkiAF zF!h}V2N3VULGT3|t`a`WG&B@yx#Yv{@Diwzl)xeI3mfiKXyQ|#@@<5@;ggm>z`le# zh0JPM09DT#*beT2%Kr{jN5Zv>0)Yv5#=%MODyRnEg0o=5Vv{iwP9c1=4SxaEP={qE z-#jP@-3>>=58(*dak*KZ8BpO{;6PXgk#soFbcJbP4pdLqK~2Fy%StN)fr*3@;WW4w zN@w1L>Ufj0%_>+76~7irx&8&!VB9%o)l9TJ9S$NsANJGwzY|YmBHo5F6yL%`Sod7h zp_#A|;kA}qU<1Mr!RGK;8~zY>Ap8q#0$Z;#t6(5(NO%@h{!CaOo)7D2{a=fx4ZIzy z;8U;)e8=*AsJZ(Tc7`?2GgH(bN(b^_3ETv`I!K918#hCFR|f)HspzWf1A%QZEZv*Y z3$*?1t>mc|2*lil{L!nx%pFt?55V2<-koN7WbQJC;%XR2{9f1s9)zvnao7n4?l-HV zGwece9#sC-P=@VtNPB@DPy;E2z2IB-BYzc$qx-73ACw`Q4mBmkum-#Ws=|#>72OKs z;XROn2Hu1X;CE2vsy$#DY7Hf!QBWPpg)ZD+)9-%(QK?6-5}}U#4Ao%U2TgoDbP3OZ zs^Bb`0z7*DnS3*s}R@eqU4lBd=Z1@AH{FRx{{;)GtM^1;0;YCp8!Z+aQhvyMk z4}J~RK+GPawT++}>Sn_epr&dOlxSDNKJa$S*DYiBnudqM0i+keM0f{09exb4H{n3i zBc^9pL5cWbD5W|ICBjON8m*6qN}mI}!Ie-QxXtnq)QEnC8fnYNjFOFo3Kv7wdlMW4 zpMpKL{(r+$lZYOVn_X%M)ZDCs3*bvo66(6oOw}T&DY_iW*6)Inz`HOJ)_uYlo|&*G z;q_1hc^nRepF-8|?x&MsJcW2v!Bwy|d;&@*jzP^`?E^-HW8g%>E1}X4z`pPsSPyo1 z(rjh}VI#uBp;kpQ91Js|I=%(gfd^r@HlEk;sNoNxmRIGc0)bdq6E=j6p+wdls^WC0 zIbCVvcfgT^KZcS>=YuBSY^crVOsJ{a3?<2@;V^jOAo5p%!B3lgJqR`8tx)UzH7G+- z1~tNZ|1zR$57mKUC|$S*D&K3cF0A@YAaDk30;|GhPy<*6N5co0iTX4x8M^X16^W{)D-wg3g}?0{4+|!RKaqRsX`Q(+;pR@k3!Nm=0^e zHBeKr4r+>Sweb(z@RLwF@+ORf)xI?O>cjSgJKJ!0G9Ee_SPbc4AZWwcupZ$&D1)&Y z#zGG^hg)G&_=x4JP!jqIHiI!=86|58Reukt0rY_`oDSP+{TJZTh^~fh;7w2?ehg}a zAHgp0S19G__-`|p3t%n68=yLLGt|`VfvV>PD5d@qHi0$2Hu*Zhj)X_TCR+bNJZfMS zOoVs9mhfZP4p#og*!a$n9tYB3Pk15h1502c{1A46oxU~NJ{5K&yb`Lx+o0Nc7OG?4 z!Md~`sQ;ar^Y&14GZJ=y=}@A)6xM^c*!TyaDtr^Fqkll@K+EqA(`pRWP0KHLwT#8A{|Ge>A(}SlEm3 z?XW(46>6$Jfy3dCurKWY6Y`gKX8vSERR|@48=*w>1XKr(K`GI1P)Zc@v#HpH4G8yx zjo^5w0WE@c;0ox%OD(rSDe<#5{m9SAUp@PP2#MxfsIc>k$yf(YB-{+D;&iAEoCh_s z8*F$7Y)beAsCqtvnzA3Dbg0^Y%oKEk>hNeNrJozdqk?I$IXnkyB-cT8WV_`asEYq( z!>>b)@I%-e{s1MZPA5zU$3T@&h3ZH?RQej&0^S7GvG5-2c?YUM;8&wewc%uf?O}76 z52bW#p|pG_l#;y;HGp4XOW5c)Gt$1W8R1E=F3f;qVKLOm_rmI0|4-vlg@>Rj_z9|q z4SzQk_l8XfPlOU(Dr^Od;V>A1Ql>*tQ&Q;<({N*`a=oGIod8uX2nWIopuhj`@jdLz zun!4M1CBqkNl-n{hZ@Oh*cfht>fkOY-FN|N%9=Qa@s?vO7r+su=R?_#`=BIt2+j@T z`4rD-FfqpQm(6C_hVXN+HT>K%u9B&sD^vxO;b@ov6X2atI&mC!hu^}QuytiKpzcui zUp*WPWnNaz3H$r=MMR7w;tE&^J`dIKAt>eh7;0`~syn{&G=dswTd1k& z16?>7N|$n=Iu^0vhv78B??FvP&sfJd;kmJ4Q_&4XB$2QkYL32v8bO0N$G6#|pei^M zYOZ%fb?7CiDLM|NTuu$cHt=7BheJuSYE4sb3n(QX4pq<0Fdk*dgqp*1p-gHi90fms zl0c_gj(@c>3aY{DV1M`^)D(UOwXA-Hl3exLrd%5+NhCl?CI!0iVyGzz--$l z{%FIU>X?EPq0;l98r}e1xYP15R0H2aEwd(dO}_q?$xs6R09)R zo8@#mR7bL)?80)W)o?x3h#!HP(?f6s{0*w&VQn0LQ(6Ia=DP>Zf=8f~xU*|k!Pqb! z&1o8xXxBh3r+Z-=_%c)l-$H47i?&9jqoLAQK$YKU!=+Hm_;skwt6DqLU{k0m90(2^aO<}DL zj&C>mK}m8pT&eZH3{NHzU)v1xJDQ9up(L^is)2)0+w*5oBW~HrjA$s7K?y?X&iSwg zyc=rj9)gnKQ*a>s3TlcvcGf_`94PQ45U~cT!AIZ__z9E<+jTJ`=m#ab1yJYu4baaI zRq-cq5^U4eY%XU)*^%p^l<^*@a>t;`)#!%AXg@Frk9vGMl<2aclyEiF>WDyfzBPf9q;eIIPdkt!?KZP1mV1QA=+E5~I17qP3sHqtPrRDRXlyIGm zztM*8hZ6mMsO4G)>0mhUJ08t_mw~2-GohAWvE>e^20yi|G{{)4R!~Yi7-~ebp(Idb zxf%8&ydP>+{RlO%+JlWUw}r0Oe?L5$o7qqqmO)A6GFT06gp$k_s8#TQO+N^AYJSzG zABS45KSJemhM4pQPy=vnI00&E#>3XMA2~*P)uA0w@lQb& zJOZWVA4A!P2E$DU21Ctl64Y*XI!uPkq3p+VP#ydRD&HTLO-7gw^cunX*NDaup%EoR zHIxD?!^@%0cI#mk_##wCk3dbucTlFe%Sa=+Ay6iI6x7tDKrP30Py^cqC7Gw82J(6s zkLK!ED8te$(R9Rx>Uj?+2_!&OFx94~!$iXQP|CX#s-rK%Bv^Np>DU~o0WN`RIAp^Y zKuI{f9*>SzH$ye>u;q(TbN+!1{|==K4M&@bJ3)m9K~*#n%5cqxL=@gacFYNCIa;jpRy`5ZDRT^CM6qErXK8A5a~upJc*4pr&M`5Nqh?Q*MAU?*7t=_4Q_|M;A>D8t?C40;o_khoC+oSrBKUg zm5sj!%BJ5BRo^>M4OW?G_Kr4C=`*3~KNtG2=0bJwe4D-nYHD{w4dgYbRrVWHzSzmEe^twcCEuYf9dE!31e2&F5pL+QwmQ^KaheDlnrbEs7d??AShCSe&(1k~A`VVj-;Z`&3J7%W!Y=!F4+psUJ zJJT4HF;E>`1MhQKo>1C8JlUAkB~X$&4-SBv;1GBSCc?PcM)Z@RMxG0$yqCfeTK}8y zXina=2|q)vg19+mPWwa6`Aq1-EU1bug9G7hP!f0>YN|efQ(^2}Bl>wzN}Ud6KbArb z;5^u0>;FzXviV1$ELinVo$@w(|({49%*TNsF96}rR0M9V^J?sVhEHWKPg}n)14*S4IptSfaI0pU> zwb_h5!;JJ2sD_?_6JQyX1iPh}sapl5OE~>g3u^8oa2$LFvb+LybBw5` z!+wN4s8#bElzj-tUjxN4=d-HhEIoc3Eu}3VU>Kx|7CL=)RAj1RQWmu zMzo9IXu^k}>S=J66G(wep>*asNPXcz-9ppjOsEX^L5-w#$Vem!PA0q-N@-q$l0fSs z$N#2lDO3Y5LQP4hVl$N&LN)Xd)D)bsoV?6T?Pi~0Mv7-R8J@F@U2c})cqq%31~vER zK~?w+l#Q>w!sP1=wat!(E<7Fj2M{PjvjH}Od!Tm1Lr_!uC2UUnftZ!1N3Eci*8tcC zj)f`^ggShlZ+R)y++7J1;9fWq{s^^92cGQ&o`6~K0*B>yjuSZ14#}SD1omSp@4ndy zTvrKGd>8BgLn10~r=nP{RvvHyXHu}^W0+D3u7{rxe(-VAz)kzisrFr{tH;*2Ff(=hZ6ZQsCs_1>5ZQ>raB3>C4TvncKu&ZL>D3+hU#${)QD<4 zWg6@Q)zQIht1g15l+@MS1FkbcluzWbr-IRQ2Dj!&DZ=?7I$5URa(VLZ~#hoCH0 z)qj~02O(1yxEji~KL}Oes0~+n#z>?G)LyUS?o5xoMn3w{T+%-TF>lrj@ayTg{(Ls_sA=)zy12GIO@vx?4yn)|z;49zD{9c%M~ zu`9_?N_!ies`dXKo+U)Yzi4<3R7XxgRn++XEN_Dy z2)_zd&wrroL&9Mb-UvHr|9=CIM)Vt0&&IrLcB%8A*8Sx$1-=He;lNkS9B+X->3j;M z3+<1Xij$#s(+HGK9DIlQ;@M72mZiQpuZs>pi`x~AHM09=A6dVqvd^2Di z48fZ4JgDV$Ih+W$+3wi9;K1WS~ zwJ?$JVHkq--!XRKVpxap%TT8JIFxC2-!*eO3~K5&L5cQNsD`S)XY!@Ms|cS1HIN#| z%oH^}#`>4xnL~s+vK2}+|A89Oh%%Ha7E=qQJdb~7mR+mQjcJ|&YZIRh_r`D?4;x@w z`+wyGUW60AaRS?_aXyFtra=kMTS5P+Uyl z9x95d5feB_#`|i;_-DD|+A;nzy#~tCJz#kp(!W66Ix+qnH@6%BwaLtY?O_l~M=pb! z(#LIj_*pzsw)bEgSfg%?Z#cR`1`z0N!~J1B!b6};=VYjcbD=h!<**~%23y0IU?=z$ z>lq9Z&5^bsFmoS-d`^H8h%b^U{jZn&Y7|KvpZi3{s{s-Vu&r+c}a23=tdkFT2 zN1z&rZEB`!B$SAkLXB)K)TZ;->;D&MtPjBf$QLxppoI$_~H`EAgxTc3)VLigbU;{V}E{18aCp=*JE!1*r z+tx^AAe8b=gOYFxRL53AmAegU3SSB1(P8piD6Oy2&L~Y2C=m{~TnyEb3!o~#)`st} z;fJ9_`V1TkkHW#QU3(*eg|M;8LDjPzYT1V$!=rWk85|Dlc8Kv`9Hzlqgx5hyWHVd> zcSDKV?Pw~V1QQ8g2&JS?LFv#5$odX+=wzm1CR9Deun~;FOs)TIcr@~Qoz0xKg6dEw zsAVz*Y9y;HAA%C$zoC?{br+Lw1k`Sr4@bjip&F{y)r`D7)D$N`ovP=;R$BidJkrt) zP|EZpoB;cEi}CmWbKxk$PeT{Rb~hdD1~rE>pp-2issj<|!mpsFwoVU|zYCP)ra>95 z7100v?d&D> z7&pMI=l-w`;ptFXodPw-XF+v%9UKjJ!lCdx8}2nQ#=n>-9LV}thNp;-39UZJj64y} zB|HtvfZPrf;d@X$cL&D=mceOI+Wr)jGJXYRSZWV3rh5d`6oue_;1=kwrUWy!yTf>7 zLVtrY6pe-&rRfDz2v300fxF;2@C&GhvW6KQxfH5Hf#EU!O-E0tb$$UmLQ?e1N1Eo-N{2^4ujT6mO zje*j!T&QJz1JpqG!;xD5NAXCTTaJneWWfn=KHLR0lDN_4pwSj;H|!3Z!^Jjy4%Du> z6KbknhpDjM7&FokRKqtxDf5$1%k(!Gr}aNS$=LLCI7JztI#h40QKsQg24ewS1D8Q8 zSKw!;saQPDba*wC&b$d#Pw(+&(^>_kw70;e@Oh}I7(4-q(tcnj9*O=6I19cAC4sgR z%|YU9I9>6Ovt*$4B%}46phP|pYDzMpreZA|2Oox0;U91YoI2S^>L!>>_$e5c=$cJ2 zI*{Gdl-+VAaIPP>49tdT)vY^UshphL&vrq$zTjWbF92k#BJz4=b z!~5ZdaM~GWPG5lo3D-_ByV_W&2G`l}<4_&1w%CX|5w;_IF_Zz@26YZ7gVLd&;CNUs zRd#~)w*ZgU>s~0)S5GshcQ91N8{s5)7^Ew}o10y>rJo;d+|6vxD~3QKcGb2 zEZa=gFerPm94h_>*cmR>*Ufw~e(a(iJhd=1usQ*urD`A`GBH8*TTeuM}Wtd?iAvpn=CSvj}!0!#S3BKq=c{*a8Mt7-eb+wQ9ydNg@Pg3D1Mt zt~bNl@DS8?{vNCYe}qf{-+!+(Q!vQ#Ov@WB4?&5x(%EKtjf3jQg-{(Sfl|7cpp@== zC|zoDjxkh&EEho;o(rJT_d);v|8opaT_S#ln&a4WO@~H9Ra^`;r<)ZMTh98%dlF69}IV5q;oM7}lJ8g-1$MWsRBBcz8MC z*-+`npltq6P!ec$z7gR7Sd;J^D0`3wU3jidzY)rCJ!->;pd|7&^jF0NtbY}3dx4qD zp->{42PKJ2=)%jO3f>LXfqhUq@dnh0TU=NPG zLPXN?twgBe=Pf^g8u_nKI?>=_quoX)p~+*>=I< z@Ccj$>#sF$NDHB+Bo{V-;njE~@@t?fzRmJqmR~@1uBS0#B((qO8DQ9RTU0&UuP;D0yU>I-~br0;b)*uI5n>{b37MHtAkL> zY&(=4cowQ-A3=@$H>lli=v78iX;2+r10^vJ*3|xg3m%DR2V4YyhMLp4>&^Y&S}2ho zg<5`pz%yW<4d!679!f`^hFaHwtIaa&0kx_!p{DdIsPd0M8KAGAfB#oIVj4_t~HWc2&J62KpCo!VIr(~9qV7) z>Qp>q;U!QadjSrF-$RM2yJti<5UQamP;;INHIkK36<-hQ!N;JM^&zN^egJ_|KPzeCxBZkt*Es$jupGomm|ChS3t>~qT+H`td?IEeVgmK))vgb%?kaKVjc z0Ov#P8P`CW+FPKO?<-Kt?hB}a1j09&Icp9z1w)~h&l)J3evRcWr~)rSY5ONo%eC^& zCSMmQ366!DvRpV7u7FbRgHRHyv&EdGrorii!EjzzlS)KJFpn)(XZUAaIzOmh;NVU zLEdxW4(fgu{R{La!$JZ%xO%urgs1q$+1c<9r9kwlLBVT?TMhMSl{`opj9lO>;`Nvz zq3!rniF?)NRoVpV+DQJn@CxNu=7;bU;ZjNXn#>O>r+qGm-w^i^ZXWI;8~+FS+gSfN z;`O`+KgQjwih16&l)s?O)k;aN+jkPR=U-~qz5$*d=yo_}jAxs9}m z)~{vDk6(ct(!1jHthQz3--&+}`R~KMOqqv?+okp|A)s?vUlNjW*V;n;Ev0-TiGK^8 zM&8l3@_G2b$LZMtt5`oPvHTfF-geY843|Or>2Q{<*JO$eA6+eyIJ&arpcj5UapY`D z$$hY^{KWNydd5=wWv~=iK>k~azW{0r^8+{g57<+jQH*Nf5au>YWmIa`a_zYy~K^gzY<2DK6vI4H;A}KIN9g$D*j{> z*dEPg`7;f?PW*MY!dZk@5Y{uz@;TeNtKd5($^U!1EfXT&&BT0Q^D8kOSKWr2a1QVf zYg26jWf+aSj0*eX-mn>G+Vmvi=Hj;7@Z*`L&u)=#Qi{A2+oJ2{8aO2ruFN%rKk3J6e`10jf`7kB7H_TkV>9Ow?2b+QpKg@ z=!bip@Qb!7-fIGh%?~>UC$)Ki{KNmFLCW`{5kMK;twm6eWp+cAL#@hA>7&4 ztEBKMB6IQR`-Hl%5o}F{HL#McuqOVwI6Y4jw-$dpIf8^?HGL9!h2jZH+R<;n)fx6`R3GO1k zEqs;m{rFeH1e>oaVLcmccr5k&M%X314?aNNvG@!9ErAF<#Y8qH@~|qz?Z<7#4WqE0 zk4XC(w}QA7Tq%t#C;S~wr?Sen(N?6*r_3$Hx5j_EjenUuCHUWjyx{rIs4y84Y#`4z zw2`FmamQ@@2UMhIjDi36cmAf6euT6xlp9VxzvAz0>xgFc$WxEF2)v3sBT3k9>rt3mW>VaqCf05=w?A{=L`)3|H-RxQkN6a2vrk*%qL2PtmLo`iG8zHDCtQddL)w1o zO~z%}GAH0Aq^-d<$LYC6N5fVGPQ&pYRQ~ArekBE(!MmuWEB+9b>Pf@DiMVva@8cgz z+<#yYPA0Aj{*|Qb6QN7-msP0uW&Af2{}l1H$ota(JP!~tkHXX7Zk(RC$ykfD)`UMY zQU1?Hj}V?%S(YPupjkmR9ytnZF5xNb|Cw6uu{Cz1w(hnoUy^<&@eXBY;~L_hVe>U0 z&t16QECYxy~1)e3G4~t=hM%z%}3H-6}74m(HpZf;? znN521X@I|l4POEIsxojViC`GgIW`zcI1`ur{KSe_5&~59=$=?)}LeZEwJ1~-bYDm4qvlzJzyou&m#V5Tsz92u1bjeihQF9ytp{8}+`n;Wd2l%OZ6WSU z(vRaF#a&GJUDCpL6R7wcBYdlkm`nyezp0S*Uxfc1Dz5mnAlweun8=op8q=j*d zaAV28god8MKaso@pH$lsmN@f6;RnbN#Kq$OEpm8DgYZ4JNItw1x0jSRsAC5%hT?q8 z8Mp&?nCczUPY^$d`1<(yU!WQOW~4tsx}JF44TOh~_#Up0GF5oaAZ?qCOVUB#rGjjn zo>!=(CH?_$Dw%G?T}}L6+%w9+lTQUd!beDZ&X3`H2=Zsz4m76x1H{MKI-j?BgpVlu zGwxjc8!5k8>q1W{h1cMICsEG_a48kku$7uvEGUIm5LX3W4o@Q?j6eE(fu|nfZ1^eZ zO>oaq*OL|UoJra!>b{aR|Lp+y&j2!gNansIwuf5?{|mlp3!j5u&k@{o3g1Dz9c17h z(rOZp_(!$d@wK$ME8%~``Y*<>Cx+4+)jZFA@B-p9Y@Um3d>7J|5q~K>jyp>HglIkZ z$65bYc!GS>$@3prSGOpW2%Jf#his;q^m91jw{Uur3AhMURv2l@8lZ>G1m@kG2t#=GG~@I?|9li?HmM{R{3 zY0>8#;`>n9$3(o3J3zP_;i=?_wV65+_Z{`*6F-f({e%k%cY~dY`w_pM%Vg|Iaa#%O zBe6A%rJ}Qm8-$BK)$ms#@GW_E<5DVgs5<_ExTVD31pATiZv3a?{{a8Lad+XS;&u_& zu|mD!okX5XL?P6ZMusmaybV5y+lgOKT!lgk-;b*=4^M6KG+|VF{)K-F<%ST>G*N-0 zwvJrOd#P&#X`gGeyS_rjH7N8xnF^?2i7K-d93rfzJ?;klIdB=ALHan?bj}q6AxNC4v5Lb=xW4I#R1*C6QUedxtZDnu67$WtYi$4v2 zKQcUq|90XUGRjTxAmN($i&X*P4Ez(}4#H!}ujgI-jmUSo4J$50nEwUNCQZ)>(mwOw z-ic^MCF@9CkAFJ;6r1Tdai5s{fu~_DTvZC*g8KzGhkWt4n{j32y~dWaMSQH|@72Wj zqu%J#l<+MC8bn`}o>$j+UckNT`$DM)50Y?-8g^-UQA0PgFJmw;Y!i%>|z#Lp@v%@(hFPVDx#Oysy|mZP)=f zjy#KqKZq+M@0&J%TjKSs#0?~FFoT+hdzgITEBUj~X848-BS}akF8WL$tq!g(@p^tG z?N%!J2G`v-aHUBKEGN%txOa$Oj62_^C&6EBo=*6e;6A6$t(CZ`x{bho67MIXs?8*{ z#C<`WOL_+Wt~7iM-a%YX_!Z&v@lPcEZNhqH65i#MygR31Or>5OLy<4$EsX7nCt+dt z?u#Nx^V902=5;P|i}TX+a|;TCp-|+S`9mYwpSCFZaenof##3gyHuv%_z*y zO)XrhaO9WMzGz-ln4OpDW)$ZZxcN)mP%ynHJ3r6u+%eQSa%|y*7Rf7f)ADoNqSUmU zpfW7(nVDDIGb=Te)w!hk>CZS$apc2AeVpQwrf2l2G$}hHm{*j&WMzDaYSW8c{~427 z914cq`1ok5Ta@n>1`F~Fi`-ygVSb^zJS&*z<`(A^Wf#y&(v&Hoo{^EM=Y=U#kW-wQ zo###)HFd11ZAyM>hFg>sbVCKf^z0?s!3@{ri3^wv@$oblpI4j{k06$0uLx$uXXmQ1 zcz+NfcTOnio*gXAccbZUc1CJZYKQ)AYF>u*59mpC-mN2@){)m!dz6ezJ5g=Q#EL^0 zMx8m?X(QC;EHf5$DlawH7nA&q!%Yo^^3$_Zi|FO@?4m3;TC61D%&aOyS5jksaZy2W zQG7-)Cv_ziy2FT2EhF49g+U6ssji=92jP;Zkok*j&i^g0_lk}=E8H#}LtRTY7o6^d zyM^42Q5QdmKtEhaf{8}YC@w6>4+YDk`t{GNY3^%#2eaEPwv%^p>l`u!0e8yqojiR3UzX zS9gWeBH|ut;bkN{%}dTLoKmMtPJUiyyjAjeH6L=%3Fb+;&&|jV`CJ+d7OaYVb7_Ze z6VL}npfcqP!<0cI$K)?r;^wEF$$|;>EZMhaNwvu8ORI!6=J?c{?99AemV!GhuQ=D& z5e+aoSme$aYs7Lg3yZa88Q=p?wg;*^|PqLXs&1tQOTX`{mB8^ z(M2stYR;ml5dJ*EP*H07(tjADt>sT6G$qUsD~zyQHs$>*P7AFJ6$NtX7C@W+tN;VV1m`o-9eo!!c%GkMMr`Vd3*&zxTMRrkkYL1(cUC2VpXJ5*z;jc=+ zKgp4gHn*#ME>jsuN zH)M9LTvk$1HjBI{HMijEBSXEhuR6_2THV;aa_4+kTU1`AI$SKXpGOthlr$S)&w%Sr z%P$H>T9hm-8MpOwr>}3nWGAQl6GQ>V-ZLYZR-Bolxkzx0i94AkvSCZZ$hNy`HZ>&@ z+>Y&g55``*Q?m1x5-Kja`PNO9!Mn7MJzo{&;>#o+3#kbUq9J;GY$)da3IsKAkee4tOvcZ}iRI^kr;E=z67H4OK zdS&vbP zO0K=Hfzu#0FF!9k9fip(aF?a#6bBRBlG}Hr#8e-f$8-im2@&W1es#v@*cRIKPg{A+=EU*~UV28#8@sH?6Kv$)deIDwkaH_?J#3=BmaeYoF*47fE}hammsbud9Nm zQRKN-nnc_uT9)iSGPzRq`~umj)SRo|nAIS@-+&P3g+6^U_}jh@Du6uU2IhS`%t(G4N8>#dQIR&UR%pPk{i!J1<&N!PL?^^P_k zZP%xN0Ihg5rnU4e8cqwcCX6|%khQ$)32rb_=krF9-`*b5DLO8;?~Gs}b|@z&f4P5j zsyN_C+oO$YMYH<#D5m)-F;RQxA8?gi*PK~Q2Yrh<;Ap$uCV7n zzxCXs7udsyS+!=D@Q*rvrP+BBaE5CSH2%uAdHk(EQum!cE1BuH?ISZ+B|@Cq;Wo z>>3xj?%2|B7o%Roha;Sft^peyVM5*PBz6l_*g8=~oq42@=8cAavdW_;$&7psEL!gc z`E0uCT&g=}j!wNS8?>@73mnDa)lo<8NS(4}HOHD=G$%V$G@|7EvKBEZqqFn$)=RbN z`FTamcPJq)Fgic87y;*H#OE)G4`ruu65>F>>+w?7V@9xuvw(I|^~~>}-nQsl#je{< zmTZ1M)>$y;PkEzF`ASnaJxh4L(Jt?qA|Br&skjSQw+IKH3RI9}tvfP|tUM4S~T^K`G zGld#TRK{E>?EdKC@e{}XX#^YrIez#uPfIHdF5^{J*8`@*Xj(Dn((Lpsw|tI*E0B34 z@8c7_OiSokPHJH$@+`{IPU_cE-mJf|_!;9OqdsXq*>;j4F~P`P0>_dtLu{_Wl`J~V zmWCYdco$n_xbk+53nZB%wwn=oX@2L(OP}0Oa>=JloRY6TyVZ$oJ=(CH8_IXHk(yEK z^wc~lR$7n)sDH8!X7r4#{bF4e|4lxUdP%cL-KCXVb6_LF-@od#;H+G132Qelz;#SX*Dr5&!v0l7bYpWDa}QH~ z)4@C}&zBD6YKzIp$q5A}mLE>g85Cxs_DIPmYP)5!5pV^IV3wG94L}2Y<8X2(iwSlu zdG)L0O3B%wkPO_?y!_>CsG0t)M!&xCX{eHa=5UKv7O*Zk3i^lVq8TuavoL zh!y14F(WS0>D%wa13Tdc2@Gl>C@aUnfc_i>#97HjS5nJ@>5MoNwPq#wRnAbBWSd2v z^5l|5-@RXHnzYuJ3&!%~R+cm`Wz_5xa}|Ydb2MdJ@x_|-mt|)yb6R$0&$!6opH4(p z{`_@#I{L)SvK#9?Nyi&a(4TjDe)d`?qFuK-U(dK}yE)%>Wf_}W zL%mD+%e{+#w&kF3iYXZBRdt*@#-?WUDo8El{YyRhn~kW444gG4Cm)76QeI;~Ide!Y8FSl)J@NL`|CCohx>nUwZIT%boF=glUtxh?cZ;j(e^BTw7PT9 zX(tin22*89mlWriyHkyLaZ+b1QSa_FzSAT>Qbm=i2a z<$l3?G|nlFi>}uMw=}!}u)7$lo=Qg(GT9VKQZ`*#7lO<7uATJ!0(t?eYYM9$oD=(gamIZAVCJNukc{&|is zD@Tgn?(eycoPm*h-)^-qVD85;(*=du%hZT{SGNlZYCv53Xy-rm3e;VPX~jyyOQ za=o%F7|m%eWBi+s0xz$o)3}>oe}b<}*?HVUo6AYv{_Aw;A3bg1$ktU27KF0$i?Od% z{ipXFdjyO&q^SxON9qspo^RyDF7d62>b9FT<}!LhUs9N#Yc4jW@_~~T>*QH}pZTYFolpK0 zwJbNa^qWS`r!h@)xsJ&#&b1dw(F0b;4DWDLr)jKN_ip?WuWvKwrqb7&IZsq-5G*Ln zPe&dy+@=RTy@y&kLz|dmRXSHuMgH4uFq4>NLGSZcPRd|^I`sCSkxiREdgAP4fA{4I zTt^w5GX0aFj8<_TyK}ZKvU|pPqgp%nRgWfnAGLNeywo;Mn}*y7rt>opM`D(Q4tE^n zytCUli@c+4oJ4P%>$IxMnW1x0mbcn}G%(xlTXUF?L7I8F> zPr^zhxP5!~9ulwr4RZVRPv||kd+)xzy{$c+CN=%&K7-u8eG~eYKH1Z$?>K`!{;h>4 zy^`KeR+Xd!Te9Q4-+LqRq|&55PLk7nS=pX@u&D=juXNM1%J#0yAFPU$lp|2oj253>vbIFv~Ou5r}%9y^;>ag zWA#n8mcyL*h6+`D{0e>_Mi0&#M&EB4=G$DMi&X|9_-GF z;<7!r7rB`SwsR2F7&GXK8$udcOxl)}-hdHKFK2}}W1Q32TQ$PzGB5hO?J2+Njz4e< zhfrU*6@J;>zZU~>-~pORJFqq1&C$fTOS7`w%(6YD1#X_5@90mwZR%)9^YagEbwg!) z=z+I?gfl2|ZmR2jKHjPAC69F4hXZEV(k*XLz=O-DIbwwj%F z;O<;HhXy0!8xe2zfvxmV3R>VjJ<6F-Dfhq@ul8uCsh2$3nd;p$+KKlbecFkOO+UER zXtnp{XlJH(`n^u|>&7`%`!hGb0_XU{@jJ;6SUEYmzjKEbp(xSc3S(nu`)ZSu@8s`l1_!k#qtGZf>S>6ldoL8JcWOZswsYvh0w9Mw- z;t9@;mDOeM-DIbA6~BMp%zK>%8d)`~@!rCTSi09op;os}bUL&|cZ;$P?sS)Fz+7om z9DXF6)yg|D5$QFbWlB&McR0Brm&lwOAHDs_rFEcG`Nylbx>BD~hM1 z_rhdnVA!83X7EOTiMeMLr=q3#OvK*nIS)#l{;Jnk2k7fRerdqGm#-~N36@C)PG1@n z9o%_vD_UH(cN>3~VRo|1zc%RU^_t@JuKVZKytAe_O}uqeoYTB7rZ|^+`=&b8n%YUJ zAek;bxn}R`T{)F`J8QVpre<8M|Kze4WP5K+b*^Y;^zpB%=z8Z(bEY>qImM@FUk9)1 zbf>sn1?yWoE1SG7-S3BY^K@ruO=A#^-SUo4cRD-wdT}$HgqVOEagH?f?w;?|u2EE2 zw)a-8gFOY_6*HW6Rmc0*+G{h@=@8kJ+orJz%X%jcLziW#Fo<6KOs8p8U+OvDmWht* z@n6%g8dI3+?VF5QEuHDy6S*(1g|~5*Gu-=QmNTykgV~zvElPH}RMd+N$V+RHV1tr5kg9d%CYe-iX=Q znMJeF*KhVa-MuZdoii(Z98y|qj&s?6`#NN*U(=Ht4&2KgU_TX+Ci>q0k55GYT2F<- z13Q*~D8hFlqs#W}DAM-3=gwku_GVW*17@^bRia;vcsI>;MuyAZGbPQaA!4cM`9JIe z<$H(ua3l{w{*QelegfM@Rxrox=w8bePMy+U<~q5JM#RVeUq2#=?ZWZl-lB6E(~hEZ zIT!8S(N$j|447ZG_g**Wz@r?hSi^Sz^3Om;h5Fb;D_{dA=ip9sny|h#=^5F#rbX%M z9A{CSzKhZ+vf_6p+Ly}Z!dAbhl=o79PiJG@QQ&4B*g{3+($#NXY}8w{^J_=b#&3SJ z|L-55_%#pV-JHR&C1Nx=-uNS9BigeyyH}=8a=u+Z*+TipEdTqn6#qPyn&R)^e;H16 z=Q2A%g&~+ycHgf!6njuVMNr{#N&Tak?2Mco!Cz$L|CIC(pRm|!{YgaTf0j=3|1O?B zfBtHx{HIB~3-e8jIh>~Whg0)m%Lv;j^Kl6i%MfXqVeGxVf|%?st`A*Kts&0;*u_gs zcd9?M+_^E%|I#IEVxG=-OMRn&t=Vcfo2BTjU94D)TiuHLH9G^_S4bbTaAA>G#66n6 z!SJ8asrj4&_eMCk(67r}EFk8KUC=9A>@;Yy_nv5szoji@cg#7svpCY@`4-)L4PK$M zjXCpF=mM|A`4#%;CBE!5k1cP?TXWcH;61v*sZo=|u9lX+mv~pc%wE0gWzvo>cIr>v zdo3w+>ed4N24AG^7jnD0V)&SYTT+tC_O3T0Fvmn~VdeVZFVzclk%*}LO+M4xxyxzT z&MYP>GVi0qM~_Rg-!P8xN6!YcrBX~oZ~JPeW({k3^Vkg{(_d&;Q-{L~bdAN!i8p1W z)4YB_QYx4nw?HVZ^zY6jmo?pm0b5O zyLbCCj`T;vf7>e20y$#`#Vy@6k)0*aq9QFYY?!1<3n)xznzjyND=Q(w}^X_$O)HA;qm^tySQt6P3ozJU||MQ1Xd@6AADW6v(YO96* zWSq2YdfUkI)?dU>-F4h0#(Lkab7ncQr8BN{23GPF#JhQeGx5*gInAC}ws-Zkl-cFe zZQ34vtr;QGEY2d`#J% z+h*7S&Q@ic)6J&fpA5_rp*C%jMgB3dVx8W{8yvUFx!Ob`8!l`SM^`zBqKJ9kA3r)x zY7CQP{Nxd(iC1$Dx8F>Srd5vI{)v|#p|cL~iYs07-y`^uE`)|_2oV-m`C2z8&FHec z`iSfGnup5#F_$;cg2$akCaAgfURvW+@vfZb)UB5|%%2zk;1hd%^)0UV^*c_FJ8z9R zPSpwQ7kQcbNXpxCty9-~{u<|zIJQX6!#WB0Ur#N*rJlF*TIaSZV{~-(qudp7-tz05 zb+yK5`lELTHg`>Lis!Vx`sT{w%1Q^euC!&UM`qkq)%((O&Kf+~oS};jY|quG_uQ^) z4gUtgnh0zCHO=}AY&`nJ{lgybjUCRVrHeK?-#S?{D90rMGU1g>Cnc>|PA_bH+0p&H z!sR^QhVl46yq%i)AHN{8_4&Q$6S8VH?ESIHX;hiZtzvKTW+&p@Tl(H+XH`s9vz2>i z-sD{2)xOzTU2U?l+TK++JI^@T-hwU8RB-1OXL=>x_OIK@b(9I#Ca6A5W&jry8xc$D zmv40v!}IlmDNW#tp;B0Q zPR=~6iLGF4vbj>4VrC+G{qqks_3He8EbrZYo3qlp>|&=zuK)w6_#K}XGV2;!gMs2L zCTbKEyecoVwAbxU6UTo~%J-(;;jFFVXY*dW!@0Viy?v_iMt#nm&H`t4>8p1-S2<0s zp8HlqcLL>a0jb-ZbNfa^{_U>Y#TrJwG)ZUuvH=Fl<3`vhug2ZZ9WBRmJHq1DX32Mh z<}y(u*pZ&#dOPlR)>b#~5Kpcz9d(a0HKvZglb^I*-sXFqS8Gl64=m=MAi>MM&l%OM zVib4UoTp_IZck6}?zzv|7vs+Ga&|Zwr)Kjrm^c3f?}Z)CyWWgl*wBMJofo~Ic5=75 zW0!MnmE^yCo2V)GwIq5nU?3;YQ70{RuX5p8d*(}Dlcet#^UZ$Y?I>k`jQz=}l~`ey zaJ#UN=@LP|cj`Ft*AE#_ZYi-GIk|B&d(E)FtHqjCD*D^+8q2HF=H>D43RSKYt*+JI zRi{p2jkrzjlj1aRx<>l!ZqOksRqrhvJ@nI>|H0%xd~Y3grMC8q$k^D71NSpd%+>>O zeuDWln;-9jv9X-kb%UMD;nvS)a_EO+?mbjQCA0HPwE3ci1n!Y^J1n&-GD!u+X}UcN z#m1ubVO_fVdZqo^mMu)p%T&5OJ8I|In#+xpN#+NMLN&SU$!$91U4o_d`?`dmUQ{a9 zuWo4;cb+DJ-vJeCb~6*jr=&!&QabuZoO_|mO~NeOv|mSg!(R8@&XMM)s5S4USpPzu zJ~9)$Uw1nTPrZ=&=3b{^ye?#uPM!YjwgVt#3Ct>0fh6mb1-Q6r1?Ht}-zau9j-5vN<^roEk| zNPWCogmgA(9BKDROK<0;Wau)Do4;?D^Lydksvhv~oms8g%HW<`@{ z?;^R9@D}fLdRCszIlr?q<8UQr!(I@HTJf@=(LMh>9x})q$HK?*)nas z3{b3j35p&Hti3RARX@JygzMU#mmeIx%U*J_8u>e>&Y1S?!e3Wj^+Qgd{>dzu0{8FV z?u_ZulxHyljQsWK{=1i#bI3WZX>@GnhT~)n-rI+qGa6Q`H!st_N=et$4=q2l*8hju zC}lRzs@7VsO}>rQFJ27&l*4SS^sKWt{T=4{&^x?Ma`Dzl!8ot&yUs+f_+4j#cj8^A zpsLo^o%|H`o-@un{GQXfp0B|Y(>6Xye)0n3&%b@t&Ys@=85(koUv8o&>pBf%{ax|Y z-=vJ%969C`)~j&yY3^~n^~X@D{IUv4&l$T6O+Q@b^seHcL%o^<*>pM`ck=7~<@Y^r z!*M73@4nOaem?G;aq5TK-pu!%fqbc*jb%16c0;`Av&U}pwNe`$yRMWM-&Nj&?>l{( zn4kVCY+hOU`u^10aDt!g%$!%a8I7iR-@NbenYY*C1802|e+e-??`4FAA8Szuu&Hhd$ztbskX-Q1NNc+~s#VyAl8 zFTp0@_wm1%DSwrcIX!tO@qgj1*pmPH6s`t;GLN$Mv~t0q=h{%iD~61xnm5W)Mm-VFUZ|FkJ+*31t<1r-W- zTmD~TR~}qtb;aL3kc9^!BoMMEkC0@tkOzdINEU=d5lA4KphhYo2~{X0BbG2wpwFeE z9R|gr@r=@zpi)bbR_gL;Qnk}KcA-<9F4NjhJEr5tNJYk_P(}JX_ulV&-wQ$f2a@;h zcfY%w<#&GP9C#1<|NHmUs)!Ln)Cx;wyq*D-6&kI|Vnn!P6`*D%U*{rHk1=&)d(#5= zt3kbkulx`w$vD*aBQO2H3Dq3A$aC;0h_C@OB&ap?#8-LUXpb2V)GpJFhTtAGec+rr zpB``$OX|d}vH|ifOb6Mkv*a3{{=tG32gyD@q;AKWBw)HP~20q1x zV^vmOb2x@v-P8+-z!nD&n77#Ni_g4Un>8tPh?>kTNZ-3d43iNjR0c{-PO4$W<)t(! z#f7TatY)c#T=xNB5&qbnY2^@q4ekc|bgA`H)P8&brts|#)czYr39#Ic-1w?AP-a(w zwOOlI7FZ^npd>CjhhEUt7tuC3kz1fse7IR;*Csn@^g-nrC>WAse48GP( zL$qe0jiz_ChbT$`Iy%&QK^uXNB5-roE8?+(n+meY(=bQolzsxXNTR|?eC|_#MEvo6R31I@UsYHdL$_g9C^wK` zBIf0~^p;=Spwh7G!D6nAf4&oyU& zP`-9XMcSkwTJ}5gh~VWqBz+)}Rho&Fibe@lwBfS3d~;FS zuWv=v9r&^VYlj{~%TrVfEH*4N214wzHo7oyo)r|+>obsitO^`KxUYi>`toS=1b=jg z=Ek(j77?3~5s5@N5><#v)W#Ou^U~CP4^VbP3$z6s#M1&TC1tb^epJ+Wohf+IKn6k4 z#q5D@^yoWGSHx)q*f&g#s-MG(GRC49tDl!DdOOv}{b4=z60WeD)06*QFU8gX6T^XozX`54}6Bd^DdjoHvQyqA|mRyZF^ODyRm` z==^5Xj#?BD8}LRe%rpXnO}<^a(RoHZW%HVN%H+G_={c@Vpl|VD0u`jUS{vfJNF?y& z>iBdzWk+nAi)XrxF)-`4dT!EJB6HgO_~fV?Ne7tTU_fgn4AwTS1bwK8w7L)Uh1`LL zmY$UiG$Tp`=hOv7<*A8u*964=1F&w8ih(YEJdw7wJ#z@C9 z?;TG`aiYW_eq=nAa=1n%PHxatUr0{)i5~nDICiju!AlkYYXY6*KO|9`Q$CSGDsrvh zFpUl_bU)sfj6`f4>hJa=c>&ZeOR-rBR;~DlVp@NU#$3$BQ8?%a&UhT5KGgL`U?)F!o?=0(&PyvKfWyD|HLwdfFFB#1RFszJS2B9$$TCvt%7Oj24_;de3Ho?#?f@tP!0^ ztxXH-uPHBDE1gM;_w76zbT+5bo5YpvNFl9DqxzKV1yY#QSsz4V=ovmfN0su7snk>E zOGdpU1l~WDZs(MAs&<;w>3b^6r)@EI36Ana1{Lxf8B`Tt4|PX7 z!kPnMCYNVYMU{jm+6J5W$4IdTS_VC7Xl>-vvrPP>ObYY-EJ}8Mo=Lw}37dMi!BY0{ zx3j788;fD3kU(wLbWgn&$$CgB;04hTge8aEV3uqSRb|I zD(HezdH#1Px-e{}LHN*M)FXE!P*w&`+rt?mIVK?6)5W3BakL3}G?_ojr7Yf_N6Flg zNB47nKE?5;dC=nxyfdHXIotE8N%22Jv}t@Ja6iIt7~x}*$(Z6bUfCiKw>ZqRHky!- zlkgsy4V1>8|U4~&kmOQusn3Ou}FZ4n`C>9?Bi15 zfu50oLx(GP)6Jn((egaGz&dFoE1H7xroo5X<<5@wV2t>zc7DE)3bE813#oBRg$$^W z0SDay6*Ax<49F{@GL95cuK78eUn-)hzRwdLDy9|Y_Yl_>( zz&DqAboWe1+fB15mA`1AI(hk02 z4qcNgUIko=fhIyeLoRlk;>rD8{Nx-u5pS|r++T%#hL%yfbG%B<@!tz+vNP^7N+I4< zjWB1yTuR_s^XO6Y&G0<&!!n4s%%@*w8>eAn5c~}Mg*Ta=1HQVNn)LI|&#LJjm1Ip$ zr;bax?Oj#ERkd^(-}A1T)eEXeJlo^?Cz&&b+gmsWwA~`n+ei7`*v@m~I8LB#l9_@CggzQG{t~^a^P&d!Sn4-EM&MwS;QvTAFJ~TX~n8Ina`4;v0J;IKU$^nLQ|v zFEg9bSLGGl>RW;Sb^*@DejiP2`aX}xgIl^gcy%2WIE(A(4wdL)bpGuEn(mxiKs(hu z**->U4<`|4NMbYFz@q^!1Oypk$pnfj2)(jodGpFv#(&z}8;`bI7)zeNh`yU)vx;I+ zLp`_lZj&3;_q}sjS3987&VO*v#*Z zp=n9C!0-hFb|&6YPd}Id?=Puu2}Vjevw`m67aJ(k`9%XYjETuEJL9jR4rL2SHY}m4 z%k69Ay8MV3Vl9=ZPjiYK(@K^jqawon-|#79~vlKo}U z6mF%$%V92j7iDlWHe|2W07XpzXr*;GUCnD+>3kY=6a^uIMNI{%z7T$M5>0i!vyzUF z$;A0yn1GaX;rce((_m|cr9;(kw)Mf;72H1bY$yhK>2=uMibnH;ZLp=Uw^4GAZ#uu3 z49R@XpW5homFNN!eti{9bDmp89}~Ctsod@nUP;Igzd`on|A3X(OMNDHGI%Ip*Xl1Z yXVp$WPVql4yuuSa&`$R{SFNE+S_B1VTdZ9S%LAgkA)J&_Se1m2yZzAb}J}p(uJl>>>(B7%X%Z8v+JB z6af|Ny>}EF7C;2MDEIl#o*=&E`|iE-dv~7Q%i3$Ly=M--r=L#v^O^YY;VQAK0z9Q+ z1A%(5e=rc3QYsM0P9eeb>DWLZ2#>&O&>0s9)Pgl(1K18Wh9h7rm=7Dmb+9Jf4=clW zU~~92tOF~K4+P2v0^vYQBI>9M48pOnCYN*z+L>QqjK01)=3WpO2YxLCcGG42&Y30ywT^|Py@zK z4+Pr6{;)qRoF2BK*iA+!GLAuswo!&n4~Ob-DeMfNfD+-)emZ%E9cVh#1lB-_d^^;_ zK7tp(>N9P6gwN}t>OC1IqCGwCvq7ev&8GIf{&zSUhTF`xqFD@kld%`}f`35mY4>cKUI4q0jzUS~1e7FN z<=6?PL*?J)^L;pkbd6k05>A8aZyVHvkHaL{f0sO4Fb!(pb+8Kj*yl;8fnw%ZQTKo~ zNay*y7N(G13ni(;P-a|nu4Nlom2^KS-5Kwv^I=oj|FuN4cMn2o`#~uC{REbRKl=O~ zYD)t7fj}`xgh_@yhB?frbRh~ygTfmFfvvE{tqf2)5ID3d5MXx$-`q)nqwccG+hZ+# zFn(YLkpy@P)CBH;_2FZ%IeZJYg@3?A*lL}vKL$1-9fEOiDU^=f1XcfGsQQPY`i)y} z{X-Kd2@ZkbvP7m4(FC%gI+_pLz%Y~+I4|aq~cY|s$0m@HY4mFYO zP!f3`s@_Q`$5ZJZ>rwkdDf2ieoyvk5=Sn|)SD1+QW(U;FUxw}BZ$4YyYtvJp2EGN# z5gmdl@OL;F_Sjaz_=ZRl8MPj= z4yG?u#|vRS_#%`AiWZ5g|EQ2Fy;{}nT}8cUISagy-?*}!KttY z-bpJhf|}qW*ca}EL*Xw_XGFi9$X^9l5NTeD(+#GOKDyg(N#Y)>y`$lu2D^sUoIoJ` zaV8KG2rSsonNGWhpTun=qUbYtKiZFbh3%mHML3*xnQsIFGz~=GWGiW({}ydX-~A5q zm-b)st~H}P*n;%6P-gNlEDK+P65)HW8a&}M<~^$mwO|7I1EI8j6jZ$;7z=NN%qMV* zpN>G8?V9(HzxH$+8Fk=pSPQ-d<@t`oiZJedJE58|NV+p@1jj*5Z~<%xuZEiF-B4Dw z2X=&?!>+LA2iBpDfEsT~m`D{O3t)426O__D0&Bw8VQcsetOIL&XqB}+RQY(=4dy|$ zzYkW0uR>YR=ddvhd}Jry1WIT6LrpN8M??dzft6qs)`ibO4g3YH4J&_a&8QWuN4h7J zh%bezp9h=5o1nIEJJbZ2&&`WP$C=+ zwU;xXX1oXnq3d%OlzVLP=%>)C$t!g>VVf-tUJJ^$$=3#eU_thpOKdc7bDI zGFl@W0X1+YRKu%bcla#S-a6mf!=wt7_4I;T$WYh< z&Vin%gWBS4Q1zaKEn)Z-BC_M(pek1Q4#j}YU~~8@Yyuk|vmN(?N@v10aGB3NuodaA zp_H)NaeD|gf$Fyy@EaM0Ah-f93L+#m3FbMB~n!q#A+ZsPz<%E5qxByDj z*F&{`7E0vr!Zz?XmIeO2fhHc;&P|#7Po+%NDqXS;pMO_;|FdgA`#sV)nGf+ieH41 zz)2`Gta;kzcZWgJA)kx={EblN_6(FxeeTow(N44xOd`JvRK001JdMZ|L`K5Huo7(h zll5#VP+M{ll=)4ElGGw7<-7xGg2hnE^Z~36OZ{wF7fL7ELn-4F7z?j~GTR$}M*dxh zJWGZ;{0mluHGi=pY5_Zwz5q%xd9V|_(dPl!lk|^p0POIqo$vxE39N*};0{;;o`u?? z3cpz$>G2!#*MM1MsKG+0f!6rxVyFghz>e@N>CbQjnb=0Od-9!fIr z!XB{fS>7MvAb1-*0M-APfbkBqnNSlcfLK*Ha1{}0_uWt{eHKdOA3}9l#u(4H_lL6Q z`LI6R040h2upayoHh`5K<0)M`C@Y!_8^R?}?KeWTd%?>O6N|A8gHRQFL#;3bWevAL zZ$PN6+7Ii%uc7ujCf0a+T^njo+e3+dFsuuw_*@9p|0%2|nYhe6Wm&|3-AME62@!lO_V zs8HSx*cwX0{rvQ7sBx}>>VIRHh?M0JlxW|F68&#bTH3gREuY{s2g)q3g0hyo;1IYS zmVv)RnPW^vJJGIC15SX_o%v7`z8y+8!cPbMl%z`6#Qvom?TAPT zM?gtpI+P^lLn-5Os6C8Andc`^R#B~%)rodc15AZMxB$u}-wsvpF{lN-0X4BBP~)7g zh5bvZO4qiov=h|cT?DoAg-{b)0@ZLe)Ij$^t^6q{<$M)NS>J)$y3c%`gtCgiptdTm zj%7`#3ACt#{cC{kWN5`Bpk_J)N-{-IKK?d8{{g6myP=fzB`DYZE7Sz)*R>8R32M*# zz)Rp{D9^YZYJ%@TIkGRpe&h_)1gh1uD{BSSVK=CO`a@lv=0KTi5iA9Zp(eT;YHQwu zQrhzMtppoDIi%)LlI{;>E%{Iq46i04<=PA-qA1jgo`n+aF{p{0hMM_VC<&BrU?mfT zD(?cN#C@SAI34zfo1g|d3f2FQemb_HC+TpYG7;TGf>08;07~Q|ea`T?2ucT5Lap#_ zKm91wmOTq4p?9DTpAX?6ST$%TG6@bKy#Z=#zJe8G|E7_hStTgZ1fjIIKh%m+{rsg+ zE7<}i(w$I}cmql)zx2~*p|+$-W6SnX5*`Uve>#+M&xhq?|6wA1;4(N6z5=_$>P_si zI}&Qf%b@Ib3)DnkhuW&2pe9tOsWsPbFi1KTO1ZD{=|WBPAt;GI13mlygoy0>FQ@^U zH?ux^B$UTm3>(5NPy;;+wH04NZP_n=eud`N#kPj(Z#>k1Vb~tt?w7v^+mimdIrguW zHE&^8)CWp58Blwi1En-qLd|$N)PP(3{QXcXd7=K(%iUHK8t0XTVgb zh24-CwgYV^Lo0j|YJek99scUG20!#jCptmd@hCq%AFADLP`a`cYVY5H+Vh{F299rO zCDz_&KPb;QHcUi&IM>fu4O2)z0%ZlKq0B43l~um#J{v>jw}o0^4=70vh4KS4pp^Aa zC<)!?bDz&Qe1?w_(M-=kiMn{EVSNOy*Ep%*}{q%V}{X2I5Q1q{Ode)%VG2=x907A-3fvD> z|11o`#P(LiLtrn`lc2WZ4nKc4lybiawUs}?8nXW?9c%|lP$IktYQ`B*TXP2-1`j|f zXZeoSj;ljWAQ7tmC@9BsE!2ef!_n|Zm;wiNvXZ$TO1IvC6&XKpl88hT=xhShKu0(d z-Uj=?FJWKUqKoA$D5cv9HQ|?`R`xa2z*V~12@Qt5NnZh_)cbtC1y%1m=-GdxZdT+e zus;P8e6EG+;4^q3Y|wXyAtwjyo(;8vd^i@~2sMFE z;RHCQuL*?URwyed-_M@^`f^M!=y*R`6`DgaL{1O>)}PDpNE5CwIMct3Y1QT*AeMXs@3! zz6451u7X8y7t~fI54Dn70wsYDp*m`Ru?buW3*ja3G}M5DhFJ;S3RN$5xRul(m@50< zKtxLCjIfdz1XXbpoCm*zGONiWO<+2_4d%h$phTQC%6R|6p%_ZEfzc+g1Y8NV6@g3a z8__hVac+a!s`p_P$*#i~YmWn_sE&3*mA?gBLC3YnY%-L2j)WRG56U5}@zYO14fq|@p>+mI zhnlW2-akf}3Ci zFHl#r5PwbkM3>+Q_PLWz1A)Zw!SN(swuu&3WZ zm_zzDI0ZTzZO7A~I=TVsYV|zSR{iKRxXF6hi=pbxg=)XUro(}Xn{9;=Py-f1odMgR z&Va|^C>XfgI-b!`d-o8ONBjw@^*7s@_*nE3S9Hy%!9I((Xx6TayO0kjtQ~Xg{n7 zPrwR{ANY$%V_5zH`~KbzN&-EgtYR>fr<(z_huh&S7w z5-4ST4Gx4!TkQ>L4h-w`+D1fn+~i^F0rQ~tXe;z|V4JmyflwVUfVaR`p(YyIZbhFB z)zAG<1O5cH^5Hw|#8<-Qaoi`M`k%WS`zlBobI`4Yh1kU2|5`Q3*WnAK-~H5HR5l&4 zR`e#+`G5LI*ov(AXZG997+8mbsXiCNCZunJ+Us2~0iJ-`^WR`Y*z9v_#seVZ1}^f` z!(k)Rmq6wnD1!16VJOf0m?B9;K7!R@=`XDP*MrI*0;QYaw{7YN8)OS;H^z zVwm!!-GZB871Hm+y6_m3M=bM|?Y}mZu7n2?(FzM;H@F4{;pK+@Y^t5f=UmEa;4c&*0TZ110IB$_{UHatN5KwcY|_JvtR|d3bv5_-%Ugvz67CMd0Z7)qpX`TPY|CSB(T+hJ>{bWcA$0!l*D-~dJ^B>(uK}+lqbIx@_JW_m^03iqE2_3o9ZiHOFakBeTTpwP@S|0_j!=@E z1|^}Zp(L;gYMf%9??dUr*&nfgX?@F|EYqPxbQhE^ya?OD@1T5sy`SynbUu{1?txm_ zYd()c4g43BuGIU*dd4O2BGUVzTyXra)-Q|<6Vc4_p|pMt)C!_72tS0i;2EfT)qk@R z=>g}G&hXRkLe(?B+kxxAaiqhr3w#Ia6fFOTwVEMNW*WYNh(z%K)JoolDexE^1lydk zx7Z@6ExG|}ub+hy{RdDIi}};G?*LUk1ZoQ>!wzs3luoVn`2^24(N_{q!wRx^gcJYwr&b(Tu)@+Jc(#j(6@4gX-{ls4aL5s@_p34^}O~ z@%FwKlyc_4+Asop!>v#YIS!}6+GQQ@UT_(duDw~-346!lw`52(KSJ$UQaPLM4|P~9 zgcA7%m;pb4ns`ciJMe5MGhPAH;0rJTwy9tT?glR=eLK{IzJk($Diy<4^vM++?%XKRx$@_MQeN>f|}S#==qE4c8hwz z6!K@m#qdF>vnAZRhBceXJ}-yr@D8X6Jp=p0@-?lMjE2(gRj>@)59RTmg<9#CP&yE- zWp$}LRC*57S#u*)y>$=?g#+&sk;5oo+g1p|zN9-riE2I^5ATCI8v=E#4)lh1kh}*z z1ykzUJ&md7c&A`PC@t><<)DT^^|uJtfm`7i+5dAy29Qy|zE!exC_k_kO7!nTNg&X` zu6zKL=yIXHimmh0A3|+q*@kuj7eMLCA}EPH12vKFp{%Sy5T#}Oz!)OBB;E|=aJIn_ z@GsZ}4sT>dd<~S@ZHC(Wm;L;op!T|IW6KMm1_(iI0BFs1A<76zC*biS>ipqLoksy$iL{ z>Mfl>Hk=Am;EPZ#iyb6GOo3C ztzDqBd^nUfWculAp>${iMB4+;LP_KgpH0JUtX2+#((Wsv_I4kXBl;3ffu)kIM@)y> ziZxIjzX?_UcPL3VZfo~;7S!G^gVKdvPy?TUs#mj}bj{|p^niq?X5Dk zfRe;8m`sX#{i zPS$6qK-vFLDA6y6vg3_Vd$$M9fv>`mFr~BQ3Mff@2178Ri`A)FP!oR%PJ}(WI^HMS zRWK;~kMHILA{4ZQx;X5Iqv2;zqVIfxbvO}t3F+UU%y3wD$9oH&4||i2>tP2R1f|6H zLrL^!*b-K|(6Tp_?#zO989#745$)xpP+I>HOn~Kj+QX?Pl!Q9L8n7R%2rq?RM^LBP z?XW3)6v`ib;4{$6io7|L6@{Sct%Tmc|BVvS1>tF^m3<5w!?@nIVoO+w^a!XGO@lJS zE1~M$1~s85lz(^@YU}=jl0@YctCUlrlyI@n`%|!gWxPR#Jk%dh_kcEitOrbkx*0tJ zLTv!gSfU$5LRL7fP5blGjcNlsr_S2OISP8XPB61%L z!WW=K`yJFo%s{*1+E5ah45bUVL9Ki+ zHzgvGT?l2Dmq01sGMEirSO&%pu^y~El%whcwc^E4{vZNV;CiUb>8DWjnqFkYV z3vP$HN7Nf(&yERD{m+0y;T5ny;|HE6G7450X$z)7?eRl!AlwVp&>3Zws5Vr(Ba{R# zg7P2NLoH+*)B;|ClGqneO8h;Pq|U%8aKLD+K&R4XBAURvP@+w`#G2#9@B-3TLg~gX zs6*ukD3R75W7B=0%r^&WkJtP82cY`@4$3?mjmi*uO+| zgbWSz3-rumqFqT-Seg9(Q1&|xYJzj1%;`?3t$G@&-dj*B{R(Pf)h@NC-~_1ltDvl6 z8X$0lkBnC9m;-ZLY?!gp+xvPl;}%Mw&m@iI+zAE;cKA|r*%+UaLQ+uDb}NQ zfbt(ReXfVslMcU2B$3Fpsdfc7K;3ligfheX{rsn(26_uhM~*>>wqnRy#aJj;o$2!$ zs1CAh6`5B074hL#aa{@6G^nu!w0dN=`38k&;phR{QYEPS|+OuIAoJM*( z91km}+59Xxmh^5o306$E3!4oM=>iSLGY=;6{VDL9gO?)cDGQVQ3P(u4OL~x>R{1xC z(geOI2Oc0462FW(vk0$~4ioe|M!1!{`2;;T!O@hxK**#&cGG)WhKbxxMiQJ!q5iWu zJzGg1A)W`{hkFUPQ{E3=2umJ(jQ6|+?_!AApAl zO~~u&*T0|qBI5C|H}!9{x{XF3iqgl=T*P)K=KNRziqPvxB6U9-Y0}-{B$AprVxrr>!N&<-(JPCOunNB z-le>?CJ6N(T*{z0Gy^Y7Z}n^>$SCw&LW92`U;6mR^n6UA;nl<+B_z^#58*=c{)BH6 zI4=Vm;A+CHgc-DXnLLNUi4+)3UVGXuge6a1@^>q(@yio=hYJ1tQbXap#2hekXOWIj^%!%Gwe>B%dE>J%6UEDdc@Zy*A_xBHfqtF5>coUlQ&h9bQ62PgyEH zOz2A-pBK1>pyyWt-@m=*H;X`L%C0?c0?kO*Cf$j8^P$|2o_EM^;n(A&3H;^vqp||h zJmJ7AWR@cIBx5-_cMz{mT)yg=^9DIU{%r)#z;jOqX+4)iE_#8R;UhN7`}-j2Ao&a6 zuW&28i4vWCT<`+7b8i0IGr%9T6WmP$J@*igC$uKMmoS&miw-&v_+tEz=L72LEL#Gn zP_`YuabAsU$eZA|IV-=lg9;_jP9oV9en9?2@*DaUs}p~XJUv$v)|2i+s7ziZ!gT8O zfKQWG^0fEkWBqoqvHH(P`2I;yRvp@e9V%T!Vi%$02@>f`VK-_$N_-=Hg0PCb>(!Fy z1wuUWrsT~f=xIz}{95E4pr2EA5%FIM+>-(?Q`W(+SHbUtD}AarsBbjed@mk`S6T16@2FX82J|Fl4F@*DNQ{gU)S zI=cY!D^TEd^2+&j`jUUrpOhL*BP{XD7QiU!;eP)_xrnj;WC|WRFY^Y{ZxZe%?{c^n zHX`T;^z)yAfB1Wl6XzO-Z;{&2zri^_bO$>Z8GpZtWKyv`7!dVQtth3 zQH_iz{7R!?S-*o5RO07l?|$0AFHiOE^mL>`WeUC{KElhfe{LkNh;S*%?NHAw!b^mPbg~Gh!%O^uCc_@oI}7il&r^Q> zoy5PUuHH9`{JclJNiqJ-M24!6XF7#r3HgNY$ge@TiTJOCCkZX-{A%(Zhfh;KLf!__ zzY}=r3tUW?P2L2k=Uey->CXuz55Khr<`DFJruAP*;(a)q%1qFEYWp3`@zX*rI+;Vb z!Eda*ZKU~)^xQM%yn&{YzmJelC_{fSe%XF%f9JOezf9tK5)G)ZiFiHu5f$GgT;w<4 zUk;pm;wT?Ts(`SU_-X2N^~+;O>q#L!pYRdkbJF{jPkah^pZIgczkst!_Md$3smEWv zv*_7PC`IRA_>=H5{Xe7VK+hV&V#0@nl4moKV%ntn?dCAhVCv^<68`g)&olD>dcLG` zF6>Fgn36ppy@>o&^19G?r9WsX@(++sCjAO=J z*%0!Iyd2H|;;#~FkpBxj25+(T?Y~l&vV$GCUjEr z?4!-oe)>9C=*Qc^9aNf2`8~vcCSI35>iP}a!*bgHMs_BFk14!@ct0xN36lxa{m!0( zUr_#xpMH{f9vxgyoqPQbLzHbKU(Y<^l_`7FuRntLG{0;rc|%Em3hRf7v?TmaBYj)i z?Kilccw6$HpwW-S-y-PQLV0;YHlYIL7f{}dkV{A-FN?62aF9@!^38;?wyF2`P3m1i zD0zJS=UX)m^c<#v>&I;l_kYr42b%a9eaOH6XPb!f^enEdYpUM^CljNTuzK8f?!aaoXe&& z={1Bl)Z0O*Pu{D3xo}+f|NT_RBq32$BW$9Qo+rq!WTS!AKEHtPQa+0^Ju?ZV{rD9O z@HSMp#K`<=1-=e&yE-5jVc)e2hAJYEssb@F(%EgrCX(3SLYoCjYk>)<2#^ z$@7rk+0D$f8S%>q4QUi2{Veg1;WW|%h#&JCeMR08(t7?NJWRYDp(*jr{zOz(kGxB% zdzg4CoJ2Z9`+t_mV`NMv==p$Ph z2`eaDL0%(2U-j=I-irLLgyy6-%Kn#9xfY286%rN@??&EF#4mfQ;aU8K)9QDZ#aaIPW}3D8})jT z{}!Qp$@iZhNF1k7&ks~Ad6xN+c{FND9X)d??@#=7!i9d`Qu5AHcI|m>tJ9|BnM!1y zpD?s(Pd)uV#g6Smr2`af@e7Bj5rqr=j@}|Yk$5bj3-L4X1YGCW-xO24I#kVx6sL}j zR7(p*Zc9sYkJU0Qir-5s<3#?Lel%ic^efJpvDY}+(<4dz>YP2jcv5Ej7hor{`xB6eJ}Cf;@hW3kT#*59ZAXW@i-?_KM8S zxwLq0&X&01*+r?PA{8$GIi?w-R9H0Gl$jn+vt|Vek+N5|cAG3R)!oIHnYhTL?R6vV zcElBbcx9+!@vh}l<05ZfSwFJj>e$G%+e@unSFd>KnjNK!4{w|p6W==6rp@&EsrfS^ zl^542e)XQuVvA!Q{KAQJdid7Jh;5A`ORlaPxpiBs$P?SXFV5OgHn#ZJN53(eK;)}v zgGlRLb*l#p^MVB#>4jN&x!r>l1QVMTBt_cps_SGgC?2}&j@Zci`|3qr-C3si-hGYD zBL|k7;+;?26jMC*P$g4*`O}k~$Y;;Ci!^=i^Ws|1uP7Bc@k*NM6&d+jvogIBg26WP zCuK)gzt+&L@QoP~sqlJnjob<6|SGPPB}4I6b94tGg1pPg3~k7ie}Et%AI-M zk_#fozVGe++{QGDMF0hnCMQGg#LlKu|7Hc{N@$`=|1Qsrl)dS@SZ21%>(Q zwlFmK{s#+mh| zeC|0>G3)5}@#c~k*DY^Oxk(kxkm$~e=HnRmXjOB%Rc`je;Jl3d0<<{TA()E&bqw|& z-)HndyXCB7MqYkSsk!{kesyS-Az>69Qv0*)@Mt{!!vSUDx!9_NZqbF)_)(pxdwkv*f=nzt!y+H1%3$ z=cP+=GI9&^7kUC@7YpetH7zYaV_udwF{=k|zo7X&I=zu8ZK9hRn;%WIQZw_36HQ7q z`;A+rrD;|@H9b8eJ0m}}FfTvA?##^1p{ex|yR+r`)2Pw2b^fiMH4zqC1z9H%FomwwaM|F3YXd$24`v z^f2p6rOrl8qbGZqgE0-Pg~_@CCFYjN)X@;-xzF@AJ=_K?*#oXiO_A!%UXP`3f zV|`2q*Xe7<$7EfW;g0WX`Zmtb@WifxSx8at?A*NhxxoU;gQ+vMp@nWiU(>JddG*+q z5~(DUo$4;@Yg#t=A1Wj_D~ML^XMS-i$VmieWMRn?nLBczxjH^KHOD5SX9k*)F>c01 zW^znUYI?N!Q1hn~y>PgxYGUT)q(+C2Fq4h@#Yppl>FRD9W$L&ek1{nob#2p*|8)qq z@7%p}=T_}5=-4h{C#CGmq@Op(IU(=+ZH!zp0pga6_>0 z;O>Q9`OUfRk+EjJJAEA9VfaL+v|DeyY3)`?c9Pu*WbcY# zy9LeK>C{X=SR6dGqGaHb>}c>()7Q8+OfqAmRVSO%rh@9+l$#mMotb&){#5t&sit8I zPNSS7d+$jP=4Kw*vvm&kmoSppmfT>v_qQ-J>&Tu1g7vb9rQ6W>2?6$SjU5 z$m;L@9x_eqjbT^+@$^e&pzI@imm~z-wQnHo;nPfmSWVlVJIY{Z+!th~ zd#@`BCAr_Gnzl}8fjc+L)G#5pU7AVMZKF=i!Qxc+<22K?-ML<7XCB}VCJv%$(CgqxD?u|3epeBFIvrwh!-o~V(o2pot zmzRxTpUkW7emT?hZ2fm-Pa0HPizXa=2xU36f;BEF3eJ{3EM-}4qf9fZ#osNw?*D7$ zxtXS4EtZbO?%BAI6XeL=9qGZ$gBx-)>1t=D>0CM_IfvZinI_2u-I`gZi~G{mPKDOV z|4lo+Ii9bg7{w2%rmhnVxpT5iO{=6$+-+H=L*>vpc?P8xnIZRNmU*+y-}C=pbrwN= zJGX)KwcY=qrEbO9W>;-iTB5#K2b#F|7Js`(&NB_-;=P>;xg6xR%J?=Jaw}w;Ze>E& zLPPGw*`{^PP<|@1dS-iYo-{1?+NLCKgdp_G-S^>#owVqcAB?KZT->l;f z$uYw{b!}x=`G2LY?v5POT#}n-s=43gnDWGb%`r*;qFs|(h0du6v%-f2=N8HM@`52& zdpoxxsoQLMxsdDRnf7h|JwMrd`DinYSAm@Ly!?zd8QC*}7fO-1$mW?zF+|-*^308O zLernweq`^RS=JcO7l}J*j%mOg`=pvWm2I)FFPfiw_Z+iKtC?$Rfgy9vi0c2<#%^!= zZ{}sawTw>2=_zRB@cf$Y<@u)R-&^%yzG>ku$;BNX%QuZ``#M!(=eYd6YrWlfcbr71 z-4>zVeF{wd_z5Mt;Z83w&FXsX5<_W4$S>WBj+GwVlg=JrUtk*kvwqX2C5G{zngnqq z8?#VZv#^FcE!$MCF@_8_=U)`ceR2+-w{f9)(4Y2yP+a%LLUUhnDB3 zhLWtVv@E?kn$fj=uMVDPKy95Q1ff9!1Oc7EFA zMKhi;KN$D>PffYR;9&WbqM&!_k!t&s8u8SFLHkCRmCGx3vb%M(Qzwzvkdg~#cW=eW zSmyh$ow%=$bE>-AM>{nqQ?FU}0IP6Ypjfy!dbDpc}!S1G)a#RPkTr|6{YE zawn>@!2Rnv6EW+fE1x%4I296gVn(E(TIa4(!QfCtv9##iP7e0wOY+dI{dC1VvS(A?->Gq&(S`2ZS2%M2?j>^b z<89oeS4~RfjeSk@)gf~4z6sHHU(+5Ae8XHEdFMdm$S((~L<$caa<{!{GRuX|JG!Ey z-r~HnM#CAH^R~Is{qt?JqN;x!;8@RjcX$0eW}+#K{`QW!#kiZ_GYh>7U}X29Ztmpw z%^J7L2j==RnEU1|gd5%Tff?qMzYts6Iw!=%A~`wP{p%z1w)^?VrkC6Eu-V5Q_{?E5 z-CgvF`4I8+If5hG|EX!<-ukK8&f6*(+w^^;hCAh`8Jp58h%3;2a@GH?(46zS&!E!x zq$mB$XO+R>_(|DWxf%2}{oo_HGZW(Vu1g9(qT3^LO^COznaT0-9DwY-+}gIng!nl{ zX?jB`i1!X5@9N>*Y-o_5%Byifye*NLZOjSI?|REM!wgR zZ7@3%>r9B}`vw!y6>hJal@QO{nAYrH^wnEJ{Ahoie!4fFH_ns+J1S0NbA6A*IUV;m$2$4&KEDX!b_N>jsKeA?6~YX>;EH9a%Q9dg`U)D-(O!hy6F->b za@u&k?MMi2@RVs@jT*c#cwR&wSG>!BJMolBDz8%kwe@a{Mc(?|J5HIra{pM~zR&8o zXV;lhZi~|<57{6ZZ|0Hi?=^6XPn%!u>?bYa0v#XY)OBx7aGJY=e=yaet$s2u#6;bl#t4jj0wY zd55AC{JFXfxxuq$RJ?b5-L5TJaMld0rc3VL8$##3J#is@VuMq&R7fTe8FgEY+nmOU z{g3R~FnmyG%-|z?@9U=>jPHMNH`{yeF!Wy&R*i7N|FO?ihn-Bf@-CeHWaG3eAG!qF zm=j#UPRfQ8IKO%a$C=6n=~l<7=7jVyvv&RXc&i4p zwH;Erjry~NOP(%PudPOv7um7C4(}cRnEXH5WM*({`Fjqb$S3RTps{waklS(}MzAu~sp9Uq-_!}m$M<{s zeuQY>QrK@<{&`aSMw=-Ka?4a{TjI&H?^+fibP{xw%#U@4#F zWFdM_^j?)q#&Cx{V5)Juzj1g-pITk>sOehXvm+&SO^$rDp-$s?otjJaAx+c!kNWb% zdZ&I}Z-Nto9Xo`&bh48=_ji@ShL;v|xV1ch-QV>i-?cn5&pv>m{P88pefRQt5DTyB zMja>dKbcW&RY9UvZ4 z)@kTI@`P#S4lC;nFU$4J8Y~yTJIgu~{dW!Q_`G{|$?G1gzAl$TNyfD~J>;G$>*SXS z*}G84omI{m=)EJ#qgtPS?j1PE-CoXVQPqFxKy3H(ZROBX+1%IVoW|w!7JtqttCe^9 zxubCte4Q^H=L!3|T=y3FjfcuRb0vvtk;dOuH<@m|A51;@!y0Z;1*d+MpyzkJ4+khG zM?sRivVzl2--xQYMH6w*pH*=3+&&YW#_shM8RgT8&SZCZC8vFI$*O_{sd*T|!TWXW z?RhX)3V)O5Exgx2-FJA8cJHH&JF%lv-R)G_Y3fd?>?|woz2v34Cn`G)%Gze0+luz8 z;`B4_t+SmvZu7}b1vgxctIdm5ok8x**=%gP$xf{D8oEuZIWuGO4?gPNx4=n^)%S9@ z^g^dyz2LcT`(B5rY#ugZzo)xpt2@ahL-(rg)T)2p&0Y5Nav<6 zvo5)^db`AFXb)-m5`uSg@QmBLN2{L%w^uD^Wc1Hk&hw_BfA8js%SZ61_I9@i!#RPt z`|3EM=soqEk4)urC!aS2pK{!d4V=f^{Dw}{Jr#8LK`!VNx|cO_E{(MMy>+x)W2d=s zvzs{0qL(&t`j}|2nX}N8>&JVo_i;6e|39xRr&c-db5e=yo3(HTlq*Or@-|4Tj4o=y zG~Jm=&KAC>R&0rCENbaw)J`kP%GOsQPDez*cNl%0#DhQT{?w90JKQCi$tT@KAX6Zk_$Ogu^uT5}jMfZ1gzHpp_H@f$9cN&N7XJ~%5OHJcf zA?^g+%hJ8uM#)Xb8Ui1x^XH@%W=hZGq}L*St|54_d@S?t4^iENlbRJw3FH^${^#2E zGvB!;Zqpu4m3T~?PeKKGNp9yJPBiwj#hZfeu^!H4u|cBlj0>H{Z4TXvh81R}F7%wu zDlU&|;;R%En=1!^_TyQ%>+9E=a= z2fPN+{ueo)I@~GGd#BK<_-5mF8RqmWBkAbX!j0?i40ron=rprp+A++T>v=}>=E(L&_TPYa%Z?WdD5IB59TVB(;W7bm&B$2iA) zgXu8Vnd*K&)_K9bp`}yaZ8DzqDwb68bI8F>b3DIbk09TNpYK!L)9V)qWE&a4-*re{8GA{-yVJGQm2k_pP1ytx!+83?))Fz z=9WO*KB=NC~{w)%EybhCp-D>n^U* z{UPLxP)Q3nd74wnogZQ*rKUMeOHILD=4octqmNB<{xa^KG|rfo>CQ%{Za!yNa$rv8 z!L9f`y&4DjR|EDJB6r9P=fev8=u*hLn*J7~W<^tGI&DpizLDf+I;~@P&35m~bmqCO zvz&@mQ0s@dqv}^LtdIjH+1-}wG;k+o;gPE7_VH4dv%%ZwrEbwIXKa~7c6EJlPLf-B zHZNvh%yO=G_vIq{!?T?saR}lT^v=C_7B*RDHaGO;vz&@0I~&dBV_l_{CN{3SXY02| zOXWDmRF>!QUmLw&qLSRwxz0-a6PKIo3~4+Q53mg>^AX>>YI(PWLi@UA4?OpY*-lOO z;Y|Kqu*@mzw#jpLm*rZq!!rSX4?LFV)QOgxLGj z=@o9Dj;2X8tIy7hi-N%mP%ryce#}{)DomlMDh*2tbiIdd8 z_rd>u!zrD#`X$oM{St4z_d4gAj?=Zr**bTNg8BMbI5Tj5mR&B2vS-V= za(CNHyqzq#-s!|IvdQz3tv3w}>F*xD-dW`Cy207(=G^Fn-AXq(arR>m8@bl)a~0Q{ zV>de8;&o-=$6r1!j=IUYJXUYK?u$1$Gu=&}m^vMF;X3bX(B(!RWb;C|%`#_b)&Ee{My<|J2Yudb885?!Qcx z3qih=mTxEP-EPaBMb-X!iAN;z;;%1vavXQ<3a4JIe3H9og%ggQj&R*EE1jklO0ET* zX)4{e(mCs1wb@j!B(K1a+q$QCSC{Df5$DAi_j%V@;{Dr&SJpVY4Bu=^Tw-+j9ZvO_ z@#pE|*?SN9Xrf+hdDX)J{eKD2W}S0iRr?FlKl*jo duEtx&taoO4|AHcWz0=W&p4{j-CRSJ0{{w~IR!9H< diff --git a/binutils/po/vi.po b/binutils/po/vi.po index fbeeb60..cf0f1d0 100644 --- a/binutils/po/vi.po +++ b/binutils/po/vi.po @@ -1,37 +1,38 @@ # Vietnamese translation for BinUtils. -# Copyright © 2007 Free Software Foundation, Inc. -# Clytie Siddall , 2006-2007. -# +# Copyright © 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the binutils package. +# Clytie Siddall , 2006-2009. +# msgid "" msgstr "" -"Project-Id-Version: binutils-2.17.90\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-07-02 15:55+0930\n" -"PO-Revision-Date: 2007-08-07 21:02+0930\n" +"Project-Id-Version: binutils-2.19.90\n" +"Report-Msgid-Bugs-To: bug-binutils@gnu.org\n" +"POT-Creation-Date: 2009-09-07 14:08+0200\n" +"PO-Revision-Date: 2009-09-17 22:22+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: LocFactoryEditor 1.7b1\n" +"X-Generator: LocFactoryEditor 1.8\n" -#: addr2line.c:74 +#: addr2line.c:76 #, c-format msgid "Usage: %s [option(s)] [addr(s)]\n" msgstr "Cách sá»­ dụng: %s [tùy_chọn...] [địa_chỉ...)]\n" -#: addr2line.c:75 +#: addr2line.c:77 #, c-format msgid " Convert addresses into line number/file name pairs.\n" msgstr " Chuyển đổi địa chỉ sang cặp số thứ tá»± dòng/tên tập tin.\n" -#: addr2line.c:76 +#: addr2line.c:78 #, c-format msgid " If no addresses are specified on the command line, they will be read from stdin\n" msgstr " Không ghi rõ địa chỉ trên dòng lệnh thì đọc từ thiết bị nhập chuẩn\n" -#: addr2line.c:77 +#: addr2line.c:79 #, c-format msgid "" " The options are:\n" @@ -48,236 +49,285 @@ msgid "" "\n" msgstr "" " Tùy chọn:\n" -" @\t\t\tđọc các tùy chọn từ tập tin này\n" -" -b --target=<định_dạng> \tĐặt định dạng tập tin nhị phân (_đích_)\n" +" @\t\t\tĐọc các tùy chọn từ tập tin này\n" +" -b --target=<định_dạng> \tĐặt định dạng tập tin nhị phân\n" " -e --exe= \tĐặt tên tập tin nhập vào (mặc định là « a.out »)\n" -"\t\t\t\t\t\t\t\t(_tập tin thá»±c hiện được_)\n" " -i --inlines\t\t\tTháo ra các hàm trá»±c tiếp\n" -" -j --section=\tĐọc các hiệu tÆ°Æ¡ng đối với _phần_ thay cho địa chỉ\n" -" -s --basenames\t\tTước các tên thÆ° mục (_các tên cÆ¡ bản_)\n" -" -f --functions \tHiện tên _các chức năng_\n" -" -C --demangle[=kiểu_dáng] \t_Tháo gỡ_ các tên chức năng\n" -" -h --help \tHiện thông tin _trợ giúp_ này\n" -" -v --version \tHiện _phiên bản_ của chÆ°Æ¡ng trình\n" +" -j --section=\tĐọc các hiệu tÆ°Æ¡ng đối với phần thay cho địa chỉ\n" +" -s --basenames\t\tTước các tên thÆ° mục\n" +" -f --functions \tHiện tên các chức năng\n" +" -C --demangle[=kiểu_dáng] \tTháo gỡ các tên chức năng\n" +" -h --help \tHiện thông tin trợ giúp này\n" +" -v --version \tHiện phiên bản của chÆ°Æ¡ng trình\n" "\n" -#: 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 +#: addr2line.c:94 ar.c:295 coffdump.c:469 dlltool.c:3832 dllwrap.c:510 +#: nlmconv.c:1113 objcopy.c:563 objcopy.c:598 readelf.c:2922 size.c:99 +#: srconv.c:1741 strings.c:676 sysdump.c:653 windmc.c:233 windres.c:698 #, c-format msgid "Report bugs to %s\n" msgstr "Hãy trình báo lỗi cho %s\n" -#: addr2line.c:279 +#: addr2line.c:281 #, c-format msgid "%s: cannot get addresses from archive" msgstr "%s: không thể lấy các địa chỉ từ kho" -#: addr2line.c:296 +#: addr2line.c:298 #, c-format msgid "%s: cannot find section %s" msgstr "%s: không tìm thấy phần %s" -#: addr2line.c:362 nm.c:1534 objdump.c:3099 +#: addr2line.c:364 nm.c:1554 objdump.c:3229 #, c-format msgid "unknown demangling style `%s'" msgstr "không rõ kiểu dáng tháo gõ « %s »" -#: ar.c:204 +#: ar.c:218 #, c-format msgid "no entry %s in archive\n" msgstr "không có mục nhập %s trong kho\n" -#: ar.c:220 +#: ar.c:236 +#, c-format +msgid "Usage: %s [emulation options] [--plugin ] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" +msgstr "Sá»­ dụng: %s [tuỳ chọn mô phỏng ...] [--plugin ] [-]{dmpqrstx}[abcfilNoPsSuvV] [tên_bộ_phận] [số_đếm] tập_tin_kho tập_tin...\n" + +#: ar.c:238 #, c-format msgid "Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n" -msgstr "Cách sá»­ dụng: %s [tùy chọn mô phỏng] [-]{dmpqrstx}[abcfilNoPsSuvV] [tên bộ phạn] [số đếm] tập_tin_kho tập_tin...\n" +msgstr "Sá»­ dụng: %s [tùy chọn mô phỏng] [-]{dmpqrstx}[abcfilNoPsSuvV] [tên-bộ-phạn] [số-đếm] tập_tin_kho tập_tin...\n" -#: ar.c:223 +#: ar.c:243 #, c-format msgid " %s -M [ - read options from \n" -msgstr " @\t\tđọc các tùy chọn từ tập tin này\n" +msgstr " @\t• đọc các tùy chọn từ tập tin này\n" -#: ar.c:253 +#: ar.c:270 +#, c-format +msgid " optional:\n" +msgstr " vẫn tùy chọn:\n" + +#: ar.c:271 +#, c-format +msgid " --plugin

- load the specified plugin\n" +msgstr " --plugin

- nạp phần bổ sung chỉ ra\n" + +#: ar.c:278 #, c-format msgid "Usage: %s [options] archive\n" -msgstr "Cách sử dụng: %s [tùy_chọn] kho\n" +msgstr "Sử dụng: %s [tùy_chọn] kho\n" -#: ar.c:254 +#: ar.c:279 #, c-format msgid " Generate an index to speed access to archives\n" msgstr " Tạo ra chỉ mục để tăng tốc độ truy cập kho\n" -#: ar.c:255 +#: ar.c:280 #, c-format msgid "" " The options are:\n" " @ Read options from \n" +msgstr "" +"Tuỳ chọn:\n" +" @\t\tĐọc các tùy chọn từ tập tin này\n" + +#: ar.c:283 +#, c-format +msgid " --plugin Load the specified plugin\n" +msgstr " --plugin Nạp phần bổ sung chỉ ra\n" + +#: ar.c:286 +#, c-format +msgid "" +" -t Update the archive's symbol map timestamp\n" " -h --help Print this help message\n" -" -V --version Print version information\n" +" -v --version Print version information\n" msgstr "" -"Tùy chọn:\n" -" @\t\t\tđọc các tùy chọn từ tập tin này\n" -" -h, --help \thiển thị _trợ giúp_ này\n" -" -V, --version \tin ra thông tin _phiên bản_\n" +" -t Cập nhật nhãn thời gian sơ đồ ký hiệu của kho lưu\n" +" -h --help Hiển thị trợ giúp này\n" +" -v --version Hiển thị thông tin về phiên bản\n" + +#: ar.c:512 nm.c:1626 +#, c-format +msgid "sorry - this program has been built without plugin support\n" +msgstr "tiếc là chương trình này được xây dựng mà không hỗ trợ phần bổ sung\n" -#: ar.c:487 +#: ar.c:539 msgid "two different operation options specified" msgstr "xác định hai tùy chọn thao tác khác nhau" -#: ar.c:562 +#: ar.c:620 #, c-format msgid "illegal option -- %c" msgstr "không cho phép tùy chọn « -- %c »" -#: ar.c:605 +#: ar.c:663 msgid "no operation specified" msgstr "chưa ghi rõ thao tác" -#: ar.c:608 +#: ar.c:666 msgid "`u' is only meaningful with the `r' option." msgstr "« u » có nghĩa chỉ cùng với tùy chọn « r »." -#: ar.c:616 +#: ar.c:669 +msgid "`u' is not meaningful with the `D' option." +msgstr "« u » có nghĩa chỉ cùng với tùy chọn « D »." + +#: ar.c:677 msgid "`N' is only meaningful with the `x' and `d' options." msgstr "« N » có nghĩa chỉ cùng với tùy chọn « x » và « d »." -#: ar.c:619 +#: ar.c:680 msgid "Value for `N' must be positive." msgstr "Giá trị cho « N » phải là số dương." -#: ar.c:669 +#: ar.c:692 +msgid "`x' cannot be used on thin archives." +msgstr "không thể sử dụng « x » với kho mảnh." + +#: ar.c:733 #, c-format msgid "internal error -- this option not implemented" msgstr "lỗi nội bộ : chưa thực hiện tùy chọn này" -#: ar.c:738 +#: ar.c:802 #, c-format msgid "creating %s" msgstr "đang tạo %s" -#: ar.c:787 ar.c:842 ar.c:1164 objcopy.c:1869 +#: ar.c:851 ar.c:906 ar.c:1234 objcopy.c:2026 #, c-format msgid "internal stat error on %s" -msgstr "lỗi stat (lấy trạng thái về tập tin) nôi bộ trên %s" +msgstr "lỗi stat (lấy trạng thái) nội bộ trên %s" # Variable: do not translate/ biến: đừng dịch -#: ar.c:791 +#: ar.c:855 #, c-format msgid "" "\n" @@ -288,173 +338,173 @@ msgstr "" "<%s>\n" "\n" -#: ar.c:807 ar.c:875 +#: ar.c:871 ar.c:939 #, c-format msgid "%s is not a valid archive" msgstr "%s không phải là một kho hợp lệ" -#: ar.c:1069 +#: ar.c:1139 #, c-format msgid "No member named `%s'\n" msgstr "Không có bộ phạn tên « %s »\n" -#: ar.c:1119 +#: ar.c:1189 #, c-format msgid "no entry %s in archive %s!" msgstr "không có mục nhập %s trong kho %s." -#: ar.c:1257 +#: ar.c:1328 #, c-format msgid "%s: no archive map to update" msgstr "%s: không có sơ đồ kho cần cập nhật" -#: arsup.c:88 +#: arsup.c:89 #, c-format msgid "No entry %s in archive.\n" msgstr "Không có mục nhập %s trong kho.\n" -#: arsup.c:113 +#: arsup.c:114 #, c-format msgid "Can't open file %s\n" msgstr "Không thể mở tập tin %s\n" -#: arsup.c:163 +#: arsup.c:164 #, c-format msgid "%s: Can't open output archive %s\n" msgstr "%s: Không thể mở kho xuất ra %s\n" -#: arsup.c:180 +#: arsup.c:181 #, c-format msgid "%s: Can't open input archive %s\n" msgstr "%s: Không thể mở kho nhập vào %s\n" -#: arsup.c:189 +#: arsup.c:190 #, c-format msgid "%s: file %s is not an archive\n" msgstr "%s: tập tin %s không phải là một kho\n" -#: arsup.c:228 +#: arsup.c:230 #, c-format msgid "%s: no output archive specified yet\n" msgstr "%s: chưa ghi rõ kho xuất\n" -#: arsup.c:248 arsup.c:286 arsup.c:328 arsup.c:348 arsup.c:414 +#: arsup.c:250 arsup.c:288 arsup.c:330 arsup.c:350 arsup.c:416 #, c-format msgid "%s: no open output archive\n" msgstr "%s: không có kho xuất đã mở\n" -#: arsup.c:259 arsup.c:369 arsup.c:395 +#: arsup.c:261 arsup.c:371 arsup.c:397 #, c-format msgid "%s: can't open file %s\n" msgstr "%s: không thể mở tập tin %s\n" -#: arsup.c:313 arsup.c:391 arsup.c:472 +#: arsup.c:315 arsup.c:393 arsup.c:474 #, c-format msgid "%s: can't find module file %s\n" msgstr "%s: không tìm thấy tập tin mô-đun %s\n" -#: arsup.c:423 +#: arsup.c:425 #, c-format msgid "Current open archive is %s\n" msgstr "Kho đã mở hiện thời là %s\n" -#: arsup.c:447 +#: arsup.c:449 #, c-format msgid "%s: no open archive\n" msgstr "%s: không có kho đã mở\n" -#: bin2c.c:84 +#: bin2c.c:59 #, c-format msgid "Usage: %s < input_file > output_file\n" msgstr "Cách sử dụng: %s < tập_tin_nhập > tập_tin_xuất\n" -#: bin2c.c:85 +#: bin2c.c:60 #, c-format msgid "Prints bytes from stdin in hex format.\n" msgstr "In ra các byte từ thiết bị nhập chuẩn theo định dạng thập lục.\n" -#: binemul.c:37 +#: binemul.c:38 #, c-format msgid " No emulation specific options\n" msgstr " Không có tùy chọn đặc trưng cho mô phỏng\n" #. Macros for common output. -#: binemul.h:41 +#: binemul.h:43 #, c-format msgid " emulation options: \n" msgstr " tùy chọn mô phỏng:\n" -#: bucomm.c:111 +#: bucomm.c:157 #, c-format msgid "can't set BFD default target to `%s': %s" msgstr "không thể lập đích mặc định BFD thành « %s »: %s" -#: bucomm.c:122 +#: bucomm.c:168 #, c-format msgid "%s: Matching formats:" msgstr "%s: định dạng khớp:" -#: bucomm.c:137 +#: bucomm.c:183 #, c-format msgid "Supported targets:" msgstr "Đích hỗ trợ :" -#: bucomm.c:139 +#: bucomm.c:185 #, c-format msgid "%s: supported targets:" msgstr "%s: đích hỗ trợ :" -#: bucomm.c:155 +#: bucomm.c:202 #, c-format msgid "Supported architectures:" msgstr "Kiến trúc hỗ trợ :" -#: bucomm.c:157 +#: bucomm.c:204 #, c-format msgid "%s: supported architectures:" msgstr "%s: kiến trúc hỗ trợ :" -#: bucomm.c:350 +#: bucomm.c:398 #, c-format msgid "BFD header file version %s\n" msgstr "Phiên bản tập tin đầu BFD %s\n" -#: bucomm.c:499 +#: bucomm.c:547 #, c-format msgid "%s: bad number: %s" msgstr "%s: số sai: %s" -#: bucomm.c:516 strings.c:435 +#: bucomm.c:564 strings.c:422 #, c-format msgid "'%s': No such file" msgstr "« %s »: không có tập tin như vậy" -#: bucomm.c:518 strings.c:437 +#: bucomm.c:566 strings.c:424 #, c-format msgid "Warning: could not locate '%s'. reason: %s" msgstr "Cảnh báo : không thể định vị « %s ». Lý do : %s" -#: bucomm.c:522 +#: bucomm.c:570 #, c-format msgid "Warning: '%s' is not an ordinary file" msgstr "Cảnh báo : « %s » không phải là một tập tin chuẩn" -#: coffdump.c:104 +#: coffdump.c:106 #, c-format msgid "#lines %d " msgstr "#dòng %d " -#: coffdump.c:458 sysdump.c:640 +#: coffdump.c:460 sysdump.c:646 #, c-format msgid "Usage: %s [option(s)] in-file\n" msgstr "Cách sử dụng: %s [tùy_chọn...] tập_tin_nhập\n" -#: coffdump.c:459 +#: coffdump.c:461 #, c-format msgid " Print a human readable interpretation of a SYSROFF object file\n" msgstr " In ra lời thông dịch cho phép người đọc của tập tin đối tượng SYSROFF\n" -#: coffdump.c:460 +#: coffdump.c:462 #, c-format msgid "" " The options are:\n" @@ -465,499 +515,527 @@ msgid "" msgstr "" "Tùy chọn:\n" " @\t\tđọc các tùy chọn từ tập tin đó\n" -" -h, --help hiển thị _trợ giúp_ này\n" -" -v --version hiển thị _phiên bản_ của chương trình\n" +" -h, --help hiển thị trợ giúp này\n" +" -v --version hiển thị phiên bản của chương trình\n" -#: coffdump.c:529 srconv.c:1824 sysdump.c:704 +#: coffdump.c:531 srconv.c:1831 sysdump.c:710 msgid "no input file specified" msgstr "chưa ghi rõ tập tin nhập" -#: cxxfilt.c:119 nm.c:252 objdump.c:234 +#: cxxfilt.c:119 nm.c:264 objdump.c:251 #, c-format msgid "Report bugs to %s.\n" msgstr "Hãy trình báo lỗi cho %s\n" -#: debug.c:646 +#: debug.c:647 msgid "debug_add_to_current_namespace: no current file" msgstr "debug_add_to_current_namespace: (gỡ lỗi thêm vào vùng tên hiện có) không có tập tin hiện thời" -#: debug.c:725 +#: debug.c:726 msgid "debug_start_source: no debug_set_filename call" msgstr "debug_start_source: (gỡ lỗi bắt đầu nguồn) không có cuộc gọi kiểu « debug_set_filename » (gỡ lỗi lập tên tập tin)" -#: debug.c:781 +#: debug.c:782 msgid "debug_record_function: no debug_set_filename call" msgstr "debug_record_function: (gỡ lỗi ghi lưu chứa năng) không có cuộc gọi kiểu « debug_set_filename » (gỡ lỗi lập tên tập tin)" -#: debug.c:833 +#: debug.c:834 msgid "debug_record_parameter: no current function" msgstr "debug_record_parameter: (gỡ lỗi ghi lưu tham số) không có chức năng hiện thời" -#: debug.c:865 +#: debug.c:866 msgid "debug_end_function: no current function" msgstr "debug_end_function: (gỡ lỗi kết thúc chức năng) không có chức năng hiện thời" -#: debug.c:871 +#: debug.c:872 msgid "debug_end_function: some blocks were not closed" msgstr "debug_end_function: (gỡ lỗi kết thúc chức năng) một số khối chưa được đóng" -#: debug.c:899 +#: debug.c:900 msgid "debug_start_block: no current block" msgstr "debug_start_block: (gỡ lỗi bắt đầu khối) không có khối hiện thời" -#: debug.c:935 +#: debug.c:936 msgid "debug_end_block: no current block" msgstr "debug_end_block: (gỡ lỗi kết thúc khối) không có khối hiện thời" -#: debug.c:942 +#: debug.c:943 msgid "debug_end_block: attempt to close top level block" msgstr "debug_end_block: (gỡ lỗi kết thúc khối) cố đóng khối cấp đầu" -#: debug.c:965 +#: debug.c:966 msgid "debug_record_line: no current unit" msgstr "debug_record_line: (gỡ lỗi ghi lưu dòng) không có đơn vị hiện thời" #. FIXME -#: debug.c:1018 +#: debug.c:1019 msgid "debug_start_common_block: not implemented" -msgstr "debug_start_common_block: not implemented" +msgstr "debug_start_common_block: chưa thực hiện" #. FIXME -#: debug.c:1029 +#: debug.c:1030 msgid "debug_end_common_block: not implemented" -msgstr "debug_end_common_block: not implemented" +msgstr "debug_end_common_block: chưa thực hiện" #. FIXME. -#: debug.c:1113 +#: debug.c:1114 msgid "debug_record_label: not implemented" -msgstr "debug_record_label: not implemented" +msgstr "debug_record_label: chưa thực hiện" -#: debug.c:1135 +#: debug.c:1136 msgid "debug_record_variable: no current file" msgstr "debug_record_variable: (gỡ lỗi ghi lưu biến) không có tập tin hiện thờino current file" -#: debug.c:1663 +#: debug.c:1664 msgid "debug_make_undefined_type: unsupported kind" msgstr "debug_make_undefined_type: (gỡ lỗi tạo kiểu chưa được định nghĩa) kiểu chưa được hỗ trợ" -#: debug.c:1840 +#: debug.c:1841 msgid "debug_name_type: no current file" -msgstr "debug_name_type: no current file" +msgstr "debug_name_type: không có tập tin hiện thời" -#: debug.c:1885 +#: debug.c:1886 msgid "debug_tag_type: no current file" -msgstr "debug_tag_type: (gỡ lỗi kiểu thẻ) không có tập tin hiện thờiLưu tập tin hiện" +msgstr "debug_tag_type: (gỡ lỗi kiểu thẻ) không có tập tin hiện thời" -#: debug.c:1893 +#: debug.c:1894 msgid "debug_tag_type: extra tag attempted" -msgstr "debug_tag_type: (gỡ lỗi kiểu thẻ) đã cố thẻ thêm" +msgstr "debug_tag_type: (gỡ lỗi kiểu thẻ) đã thử một thẻ bổ sung" -#: debug.c:1930 +#: debug.c:1931 #, c-format msgid "Warning: changing type size from %d to %d\n" msgstr "Cảnh báo : đang thay đổi kích cỡ kiểu từ %d đến %d\n" -#: debug.c:1952 +#: debug.c:1953 msgid "debug_find_named_type: no current compilation unit" msgstr "debug_find_named_type: (gỡ lỗi tìm kiểu tên đã cho) không có đơn vị biên dịch hiện thời" -#: debug.c:2055 +#: debug.c:2056 #, c-format msgid "debug_get_real_type: circular debug information for %s\n" msgstr "debug_get_real_type: (gỡ lỗi lấy kiểu thật) thông tin gỡ lỗi vòng cho %s\n" -#: debug.c:2482 +#: debug.c:2483 msgid "debug_write_type: illegal type encountered" msgstr "debug_write_type: (gỡ lỗi ghi kiểu) gặp kiểu không được phép" -#: dlltool.c:797 dlltool.c:823 dlltool.c:854 +#: dlltool.c:884 dlltool.c:910 dlltool.c:941 #, c-format msgid "Internal error: Unknown machine type: %d" msgstr "Lỗi nội bộ : không rõ kiểu máy: %d" -#: dlltool.c:890 +#: dlltool.c:982 #, c-format msgid "Can't open def file: %s" msgstr "Không thể mở tập tin định nghĩa: %s" -#: dlltool.c:895 +#: dlltool.c:987 #, c-format msgid "Processing def file: %s" msgstr "Đang xử lý tập tin định nghĩa: %s" -#: dlltool.c:899 +#: dlltool.c:991 msgid "Processed def file" msgstr "Đã xử lý tập tin định nghĩa" -#: dlltool.c:923 +#: dlltool.c:1015 #, c-format msgid "Syntax error in def file %s:%d" msgstr "Gặp lỗi cú pháp trong tập tin định nghĩa %s:%d" -#: dlltool.c:958 +#: dlltool.c:1050 #, c-format msgid "%s: Path components stripped from image name, '%s'." msgstr "%s: các thành phần đường dẫn bị tước ra tên ảnh, « %s »." -#: dlltool.c:967 +#: dlltool.c:1068 #, c-format msgid "NAME: %s base: %x" msgstr "TÊN: %s cơ bản: %x" -#: dlltool.c:970 dlltool.c:986 +#: dlltool.c:1071 dlltool.c:1087 msgid "Can't have LIBRARY and NAME" msgstr "Không cho phép dùng cả THƯ VIÊN lẫn TÊN đều" -#: dlltool.c:983 +#: dlltool.c:1084 #, c-format msgid "LIBRARY: %s base: %x" -msgstr "THƯ VIÊN: %s cơ bản: %x" +msgstr "THƯ VIỆN: %s cơ bản: %x" -#: dlltool.c:1219 resrc.c:293 +#: dlltool.c:1320 resrc.c:293 #, c-format msgid "wait: %s" msgstr "đợi: %s" -#: dlltool.c:1224 dllwrap.c:410 resrc.c:298 +#: dlltool.c:1325 dllwrap.c:410 resrc.c:298 #, c-format msgid "subprocess got fatal signal %d" msgstr "tiến trình con đã nhận tín hiệu nghiệm trọng %d" -#: dlltool.c:1230 dllwrap.c:417 resrc.c:305 +#: dlltool.c:1331 dllwrap.c:417 resrc.c:305 #, c-format msgid "%s exited with status %d" msgstr "%s đã thoát với trạng thái %d" -#: dlltool.c:1261 +#: dlltool.c:1362 #, c-format msgid "Sucking in info from %s section in %s" msgstr "Đang kéo vào thông tin từ phần %s trong %s..." -#: dlltool.c:1386 +#: dlltool.c:1487 #, c-format msgid "Excluding symbol: %s" msgstr "Đang loại trừ ký hiệu : %s" -#: dlltool.c:1475 dlltool.c:1486 nm.c:984 nm.c:995 +#: dlltool.c:1576 dlltool.c:1587 nm.c:1001 nm.c:1012 #, c-format msgid "%s: no symbols" msgstr "%s: không có ký hiệu" #. FIXME: we ought to read in and block out the base relocations. -#: dlltool.c:1512 +#: dlltool.c:1613 #, c-format msgid "Done reading %s" msgstr "Đã đọc xong %s" -#: dlltool.c:1522 +#: dlltool.c:1623 #, c-format msgid "Unable to open object file: %s" msgstr "Không thể mở tập tin đối tượng: %s" -#: dlltool.c:1525 +#: dlltool.c:1626 #, c-format msgid "Scanning object file %s" msgstr "Đang quét tập tin đối tượng %s..." -#: dlltool.c:1540 +#: dlltool.c:1641 #, c-format msgid "Cannot produce mcore-elf dll from archive file: %s" msgstr "Không thể cung cấp « mcore-elf dll » từ tập tin kho: %s" -#: dlltool.c:1626 +#: dlltool.c:1741 msgid "Adding exports to output file" msgstr "Đang thêm các việc xuất vào nhóm kết xuất..." -#: dlltool.c:1674 +#: dlltool.c:1789 msgid "Added exports to output file" -msgstr "Đã thêm các việc xuất vào nhóm kết xuất" +msgstr "Đã thêm các bản xuất vào tập tin kết xuất" -#: dlltool.c:1813 +#: dlltool.c:1930 #, c-format msgid "Generating export file: %s" -msgstr "Đang tạo ra tập tin xuất: %s" +msgstr "Đang tạo ra tập tin kết xuất: %s" -#: dlltool.c:1818 +#: dlltool.c:1935 #, c-format msgid "Unable to open temporary assembler file: %s" msgstr "Không thể mở tập tin dịch mã số tạm thời: %s" -#: dlltool.c:1821 +#: dlltool.c:1938 #, c-format msgid "Opened temporary file: %s" msgstr "Đã mở tập tin tạm thời: %s" -#: dlltool.c:2043 +#: dlltool.c:2113 +msgid "failed to read the number of entries from base file" +msgstr "lỗi đọc số các mục nhập từ tập tin cơ bản" + +#: dlltool.c:2161 msgid "Generated exports file" msgstr "Đã tạo ra tập tin xuất" -#: dlltool.c:2251 +#: dlltool.c:2370 #, c-format msgid "bfd_open failed open stub file: %s" msgstr "bfd_open không mở được tập tin stub: %s" -#: dlltool.c:2254 +#: dlltool.c:2373 #, c-format msgid "Creating stub file: %s" msgstr "Đang tạo tập tin stub: %s" -#: dlltool.c:2672 +#: dlltool.c:2837 dlltool.c:2906 #, c-format msgid "failed to open temporary head file: %s" msgstr "lỗi mở tập tin đầu tạm: %s" -#: dlltool.c:2734 +#: dlltool.c:2979 #, c-format msgid "failed to open temporary tail file: %s" msgstr "lỗi mở tập tin đuôi tạm: %s" -#: dlltool.c:2809 +#: dlltool.c:3052 #, c-format msgid "Can't open .lib file: %s" msgstr "Không thể mở tập tin « .lib » (thư viện): %s" -#: dlltool.c:2812 +#: dlltool.c:3055 #, c-format msgid "Creating library file: %s" msgstr "Đang tạo tập tin thư viện: %s" -#: dlltool.c:2895 dlltool.c:2901 +#: dlltool.c:3146 dlltool.c:3152 #, c-format msgid "cannot delete %s: %s" -msgstr "không thể xóa bỏ %s: %s" +msgstr "không thể xóa %s: %s" -#: dlltool.c:2906 +#: dlltool.c:3157 msgid "Created lib file" -msgstr "Đã tạo tập tin thư viện" +msgstr "Đã tạo tập tin thư viện" -#: dlltool.c:2985 +#: dlltool.c:3369 dlltool.c:3391 +#, c-format +msgid "%s is not a library" +msgstr "%s không phải là một thư viện" + +#: dlltool.c:3409 +#, c-format +msgid "Import library `%s' specifies two or more dlls" +msgstr "Thư viện nhập « %s » chỉ ra ít nhất hai dll" + +#: dlltool.c:3420 +#, c-format +msgid "Unable to determine dll name for `%s' (not an import library?)" +msgstr "Không thể quyết định tên dll cho « %s » (không phải thư viện nhập ?)" + +#: dlltool.c:3641 #, c-format msgid "Warning, ignoring duplicate EXPORT %s %d,%d" -msgstr "Cảnh báo, đang bỏ qua XUẤT trùng %s %d,%d" +msgstr "Cảnh báo, đang bỏ qua bản XUẤT trùng %s %d,%d" -#: dlltool.c:2991 +#: dlltool.c:3647 #, c-format -msgid "Error, duplicate EXPORT with oridinals: %s" -msgstr "Lỗi: XUẤT trùng với điều thứ tự : %s" +msgid "Error, duplicate EXPORT with ordinals: %s" +msgstr "Lỗi: bản XUẤT trùng với điều thứ tự : %s" -#: dlltool.c:3096 +#: dlltool.c:3752 msgid "Processing definitions" msgstr "Đang xử lý các lời định nghĩa..." -#: dlltool.c:3128 +#: dlltool.c:3784 msgid "Processed definitions" msgstr "Đã xử lý các lời định nghĩa" #. xgetext:c-format -#: dlltool.c:3135 dllwrap.c:471 +#: dlltool.c:3791 dllwrap.c:471 #, c-format msgid "Usage %s \n" -msgstr "Cách sử dụng %s \n" +msgstr "Sử dụng %s \n" #. xgetext:c-format -#: dlltool.c:3137 +#: dlltool.c:3793 #, c-format msgid " -m --machine Create as DLL for . [default: %s]\n" msgstr " -m --machine Tạo dạng DLL cho . [mặc định: %s]\n" -#: dlltool.c:3138 +#: dlltool.c:3794 #, c-format msgid " possible : arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" msgstr " có thể: arm[_interwork], i386, mcore[-elf]{-le|-be}, ppc, thumb\n" -#: dlltool.c:3139 +#: dlltool.c:3795 #, c-format msgid " -e --output-exp Generate an export file.\n" -msgstr " -e --output-exp \tTạo ra tập tin _xuất_.\n" +msgstr " -e --output-exp \tTạo ra tập tin kết xuất.\n" -#: dlltool.c:3140 +#: dlltool.c:3796 #, c-format msgid " -l --output-lib Generate an interface library.\n" -msgstr " -l --output-lib \tTạo _ra thư viện_ giao diện.\n" +msgstr " -l --output-lib \tTạo ra thư viện giao diện.\n" -#: dlltool.c:3141 +#: dlltool.c:3797 +#, c-format +msgid " -y --output-delaylib Create a delay-import library.\n" +msgstr " -y --output-delaylib Tạo một thư viện nhập trệ.\n" + +#: dlltool.c:3798 #, c-format msgid " -a --add-indirect Add dll indirects to export file.\n" -msgstr " -a --add-indirect _Thêm lời gián tiếp_dạng dll vào tập tin xuất\n" +msgstr " -a --add-indirect Thêm lời gián tiếp dạng dll vào tập tin xuất\n" -#: dlltool.c:3142 +#: dlltool.c:3799 #, c-format msgid " -D --dllname Name of input dll to put into interface lib.\n" -msgstr " -D --dllname _Tên dll_ nhập cần để vào thư viện giao diện.\n" +msgstr " -D --dllname Tên dll nhập cần để vào thư viện giao diện.\n" -#: dlltool.c:3143 +#: dlltool.c:3800 #, c-format msgid " -d --input-def Name of .def file to be read in.\n" -msgstr " -d --input-def \tTên tập tin _định nghĩa_ cần đọc _vào_.\n" +msgstr " -d --input-def \tTên tập tin định nghĩa cần đọc vào.\n" -#: dlltool.c:3144 +#: dlltool.c:3801 #, c-format msgid " -z --output-def Name of .def file to be created.\n" -msgstr " -z --output-def Tên tập tin _định nghĩa_ cần tạo (_ra_).\n" +msgstr " -z --output-def Tên tập tin định nghĩa cần tạo.\n" -#: dlltool.c:3145 +#: dlltool.c:3802 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" -msgstr " --export-all-symbols Tự động _xuất mọi ký hiệu_ vào tập tin định nghĩa\n" +msgstr " --export-all-symbols Tự động xuất mọi ký hiệu vào tập tin định nghĩa\n" -#: dlltool.c:3146 +#: dlltool.c:3803 #, c-format msgid " --no-export-all-symbols Only export listed symbols\n" -msgstr "" -" --no-export-all-symbols \tXuất chỉ những ký hiệu đã liệt kê\n" -"\t\t\t\t\t\t\t\t(_không xuất mọi ký hiệu_)\n" +msgstr " --no-export-all-symbols \tXuất chỉ những ký hiệu đã liệt kê\n" -#: dlltool.c:3147 +#: dlltool.c:3804 #, c-format msgid " --exclude-symbols Don't export \n" -msgstr "" -" --exclude-symbols Đừng xuất danh sách này\n" -"\t\t\t\t\t\t\t\t(_loại trừ ký hiệu_)\n" +msgstr " --exclude-symbols Đừng xuất gì trên danh sách này\n" -#: dlltool.c:3148 +#: dlltool.c:3805 #, c-format msgid " --no-default-excludes Clear default exclude symbols\n" -msgstr "" -" --no-default-excludes Xóa các ký hiệu cần loại trừ theo mặc định\n" -"\t\t\t\t\t\t\t\t(không loại trừ mặc định)\n" +msgstr " --no-default-excludes Xoá sạch các ký hiệu cần loại trừ theo mặc định\n" -#: dlltool.c:3149 +#: dlltool.c:3806 #, c-format msgid " -b --base-file Read linker generated base file.\n" -msgstr " -b --base-file Đọc _tập tin cơ bản_ do bộ liên kết tạo ra.\n" +msgstr " -b --base-file Đọc tập tin cơ bản do bộ liên kết tạo ra.\n" -#: dlltool.c:3150 +#: dlltool.c:3807 #, c-format msgid " -x --no-idata4 Don't generate idata$4 section.\n" msgstr " -x --no-idata4 Đừng tạo ra phần « idata$4 ».\n" -#: dlltool.c:3151 +#: dlltool.c:3808 #, c-format msgid " -c --no-idata5 Don't generate idata$5 section.\n" msgstr " -c --no-idata5 Đừng tạo ra phần « idata$5 ».\n" -#: dlltool.c:3152 +#: dlltool.c:3809 +#, c-format +msgid " --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata$5.\n" +msgstr " --use-nul-prefixed-import-tables Dùng idata$4 và idata$5 có tiền tố số không.\n" + +#: dlltool.c:3810 #, c-format msgid " -U --add-underscore Add underscores to all symbols in interface library.\n" msgstr "" -" -U --add-underscore \t_Thêm dấu gạch dưới_ vào\n" -"\t\t\t\t\t\tcác ký hiệu trong thư viện giao diện.\n" +" -U --add-underscore \tThêm dấu gạch dưới vào\n" +"\t\t\t\t\t\tmọi ký hiệu trong thư viện giao diện.\n" -#: dlltool.c:3153 +#: dlltool.c:3811 #, c-format msgid " --add-stdcall-underscore Add underscores to stdcall symbols in interface library.\n" msgstr "" " --add-stdcall-underscore\n" -"\t\tThêm dấu gạch dưới vào ký hiệu stdcall trong thư viện giao diện.\n" +"\t\tThêm dấu gạch dưới vào mọi ký hiệu stdcall trong thư viện giao diện.\n" -#: dlltool.c:3154 +#: dlltool.c:3812 #, c-format msgid " -k --kill-at Kill @ from exported names.\n" -msgstr "" -" -k --kill-at Xóa bỏ « @ » ra các tên đã xuất.\n" -"\t\t\t\t\t\t(_buộc kết thúc tại_)\n" +msgstr " -k --kill-at Giết « @ » từ các tên đã xuất.\n" -#: dlltool.c:3155 +#: dlltool.c:3813 #, c-format msgid " -A --add-stdcall-alias Add aliases without @.\n" -msgstr "" -" -A --add-stdcall-alias \tThêm biệt hiệu không có « @ ».\n" -"\t\t\t\t\t\t(_thêm biệt hiệu gọi chuẩn_)\n" +msgstr " -A --add-stdcall-alias \tThêm biệt hiệu mà không có « @ ».\n" -#: dlltool.c:3156 +#: dlltool.c:3814 #, c-format msgid " -p --ext-prefix-alias Add aliases with .\n" -msgstr "" -" -p --ext-prefix-alias \tThêm các biệt hiệu có tiền tố này.\n" -"\t\t\t\t\t\t(_biệt hiệu tiền tố thêm_)\n" +msgstr " -p --ext-prefix-alias \tThêm các biệt hiệu có tiền tố này.\n" -#: dlltool.c:3157 +#: dlltool.c:3815 #, c-format msgid " -S --as Use for assembler.\n" msgstr " -S --as \tDùng tên này cho chương trình dịch mã số.\n" -#: dlltool.c:3158 +#: dlltool.c:3816 #, c-format msgid " -f --as-flags Pass to the assembler.\n" -msgstr "" -" -f --as-flags Gởi các cờ này qua cho chương trình dịch mã số.\n" -"\t\t\t\t\t\t\t(_dạng cờ_)\n" +msgstr " -f --as-flags Gửi các cờ này qua cho chương trình dịch mã số.\n" -#: dlltool.c:3159 +#: dlltool.c:3817 #, c-format msgid " -C --compat-implib Create backward compatible import library.\n" -msgstr " -C --compat-implib \tTạo _thư viện nhập tương thích_ ngược.\n" +msgstr " -C --compat-implib \tTạo thư viện nhập tương thích ngược.\n" -#: dlltool.c:3160 +#: dlltool.c:3818 #, c-format msgid " -n --no-delete Keep temp files (repeat for extra preservation).\n" -msgstr "" -" -n --no-delete \t\tGiữ lại các tập tin tạm thời (lặp lại để bảo tồn thêm)\n" -"\t\t\t\t\t\t(_không xóa bỏ_)\n" +msgstr " -n --no-delete \t\tGiữ lại các tập tin tạm thời (lặp lại để bảo tồn thêm)\n" -#: dlltool.c:3161 +#: dlltool.c:3819 #, c-format msgid " -t --temp-prefix Use to construct temp file names.\n" -msgstr " -t --temp-prefix \tDùng _tiền tố_ này để tạo tên tập tin _tạm_.\n" +msgstr " -t --temp-prefix \tDùng _tiền tố_ này để tạo tên tập tin tạm.\n" -#: dlltool.c:3162 +#: dlltool.c:3820 +#, c-format +msgid " -I --identify Report the name of the DLL associated with .\n" +msgstr " -I --identify Thông báo tên của DLL tương ứng với .\n" + +#: dlltool.c:3821 +#, c-format +msgid " --identify-strict Causes --identify to report error when multiple DLLs.\n" +msgstr " --identify-strict Gây ra « --identify » thông báo lỗi khi gặp nhiều DLLs.\n" + +#: dlltool.c:3822 #, c-format msgid " -v --verbose Be verbose.\n" -msgstr " -v --verbose Xuất _chi tiết_.\n" +msgstr " -v --verbose Xuất chi tiết.\n" -#: dlltool.c:3163 +#: dlltool.c:3823 #, c-format msgid " -V --version Display the program version.\n" msgstr " -V --version \tHiển thị phiên bản chương trình.\n" -#: dlltool.c:3164 +#: dlltool.c:3824 #, c-format msgid " -h --help Display this information.\n" -msgstr " -h --help \tHiển thị _trợ giúp_ này.\n" +msgstr " -h --help \tHiển thị trợ giúp này.\n" -#: dlltool.c:3165 +#: dlltool.c:3825 #, c-format msgid " @ Read options from .\n" -msgstr " @\t\tđọc các tùy chọn từ tập tin đó\n" +msgstr " @\t\tĐọc các tùy chọn từ tập tin đó\n" -#: dlltool.c:3167 +#: dlltool.c:3827 #, c-format msgid " -M --mcore-elf Process mcore-elf object files into .\n" msgstr "" -" -M --mcore-elf \n" -"\t\tXử lý các tập tin đối tượng kiểu « mcore-elf » vào tập tin tên này.\n" +" -M --mcore-elf \n" +"\t\tXử lý các tập tin đối tượng kiểu « mcore-elf » vào tập tin này.\n" -#: dlltool.c:3168 +#: dlltool.c:3828 #, c-format msgid " -L --linker Use as the linker.\n" -msgstr " -L --linker \t\tDùng tên này là _bộ liên kết_.\n" +msgstr " -L --linker \t\tDùng tên này là bộ liên kết.\n" -#: dlltool.c:3169 +#: dlltool.c:3829 #, c-format msgid " -F --linker-flags Pass to the linker.\n" -msgstr " -F --linker-flags \tGởi _các cờ_ này qua cho _bộ liên kết_.\n" +msgstr " -F --linker-flags \tGởi các cờ này qua cho bộ liên kết.\n" -#: dlltool.c:3292 +#: dlltool.c:3966 #, c-format msgid "Path components stripped from dllname, '%s'." msgstr "Các thành phần đường dẫn bị tước ra tên dll, « %s »." -#: dlltool.c:3337 +#: dlltool.c:4014 #, c-format msgid "Unable to open base-file: %s" msgstr "Không thể mở tập tin cơ sở: %s" -#: dlltool.c:3369 +#: dlltool.c:4049 #, c-format msgid "Machine '%s' not supported" msgstr "Không hỗ trợ máy « %s »" -#: dlltool.c:3473 dllwrap.c:201 +#: dlltool.c:4118 +#, c-format +msgid "Warning, machine type (%d) not supported for delayimport." +msgstr "Cảnh báo : loại máy (%d) không được hỗ trợ cho delayimport." + +#: dlltool.c:4186 dllwrap.c:201 #, c-format msgid "Tried file: %s" msgstr "Đã thử tập tin: %s" -#: dlltool.c:3480 dllwrap.c:208 +#: dlltool.c:4193 dllwrap.c:208 #, c-format msgid "Using file: %s" msgstr "Đang dùng tập tin: %s" @@ -970,7 +1048,7 @@ msgstr "Đang giữ tập tin cơ bản tạm thời %s" #: dllwrap.c:293 #, c-format msgid "Deleting temporary base file %s" -msgstr "Đang xóa bỏ tập tin cơ bản tạm thời %s..." +msgstr "Đang xoá tập tin cơ bản tạm thời %s" #: dllwrap.c:307 #, c-format @@ -980,7 +1058,7 @@ msgstr "Đang giữ tập tin xuất tạm thời %s" #: dllwrap.c:309 #, c-format msgid "Deleting temporary exp file %s" -msgstr "Đang xóa bỏ tập tin xuất tạm thời %s..." +msgstr "Đang xoá tập tin xuất tạm thời %s" #: dllwrap.c:322 #, c-format @@ -990,7 +1068,7 @@ msgstr "Đang giữ tập tin định nghĩa tạm thời %s" #: dllwrap.c:324 #, c-format msgid "Deleting temporary def file %s" -msgstr "Đang xóa bỏ tập tin định nghĩa tạm thời %s..." +msgstr "Đang xoá tập tin định nghĩa tạm thời %s" #: dllwrap.c:472 #, c-format @@ -1005,12 +1083,12 @@ msgstr " @\t\tđọc các tùy chọn từ tập tin đó\n" #: dllwrap.c:474 #, c-format msgid " --quiet, -q Work quietly\n" -msgstr " --quiet, -q Không xuất chi tiết (_im_)\n" +msgstr " --quiet, -q Không xuất chi tiết\n" #: dllwrap.c:475 #, c-format msgid " --verbose, -v Verbose\n" -msgstr " --verbose, -v Xuất _chi tiết_\n" +msgstr " --verbose, -v Xuất chi tiết\n" #: dllwrap.c:476 #, c-format @@ -1030,33 +1108,27 @@ msgstr " Tùy chọn cho %s:\n" #: dllwrap.c:479 #, c-format msgid " --driver-name Defaults to \"gcc\"\n" -msgstr "" -" --driver-name \t Mặc định là « gcc »\n" -"\t\t\t\t\t\t\t\t(_tên trình điều khiển_)\n" +msgstr " --driver-name \t Mặc định là « gcc »\n" #: dllwrap.c:480 #, c-format msgid " --driver-flags Override default ld flags\n" -msgstr "" -" --driver-flags \t\tCó quyền cao hơn các cờ ld mặc định\n" -"\t\t\t\t\t\t\t\t(_các cờ trình điều khiển_)\n" +msgstr " --driver-flags \t\tCó quyền cao hơn các cờ ld mặc định\n" #: dllwrap.c:481 #, c-format msgid " --dlltool-name Defaults to \"dlltool\"\n" -msgstr "" -" --dlltool-name \t\tMặc định là « dlltool »\n" -"\t\t\t\t\t\t\t\t(_tên công cụ dlltool_)\n" +msgstr " --dlltool-name \t\tMặc định là « dlltool »\n" #: dllwrap.c:482 #, c-format msgid " --entry Specify alternate DLL entry point\n" -msgstr " --entry <điểm_vào> \t\tGhi rõ điểm _vào_ DLL xen kẽ\n" +msgstr " --entry <điểm_vào> \t\tGhi rõ điểm vào DLL xen kẽ\n" #: dllwrap.c:483 #, c-format msgid " --image-base Specify image base address\n" -msgstr " --image-base \tGhi rõ địa chỉ _cơ bản ảnh_\n" +msgstr " --image-base \tGhi rõ địa chỉ cơ bản ảnh\n" #: dllwrap.c:484 #, c-format @@ -1066,7 +1138,7 @@ msgstr " --target i386-cygwin32 hay i386-mingw32\n" #: dllwrap.c:485 #, c-format msgid " --dry-run Show what needs to be run\n" -msgstr " --dry-run \tHiển thị các điều cần chạy (_chạy thực hành_)\n" +msgstr " --dry-run \tHiển thị các điều cần chạy\n" #: dllwrap.c:486 #, c-format @@ -1076,7 +1148,7 @@ msgstr " --mno-cygwin \tTạo DLL dạng Mingw\n" #: dllwrap.c:487 #, c-format msgid " Options passed to DLLTOOL:\n" -msgstr " Các tùy chọn được gởi qua cho DLLTOOL:\n" +msgstr " Các tùy chọn được gửi qua cho DLLTOOL:\n" #: dllwrap.c:488 #, c-format @@ -1086,64 +1158,59 @@ msgstr " --machine \n" #: dllwrap.c:489 #, c-format msgid " --output-exp Generate export file.\n" -msgstr " --output-exp \t\tTạo ra tập tin _xuất_.\n" +msgstr " --output-exp \t\tTạo ra tập tin xuất.\n" #: dllwrap.c:490 #, c-format msgid " --output-lib Generate input library.\n" -msgstr " --output-lib \t\tTạo _ra thư viện_ nhập.\n" +msgstr " --output-lib \t\tTạo ra thư viện nhập liệu.\n" #: dllwrap.c:491 #, c-format msgid " --add-indirect Add dll indirects to export file.\n" -msgstr " --add-indirect \t\t_Thêm_ các lời _gián tiếp_ vào tập tin xuất.\n" +msgstr " --add-indirect \t\tThêm các lời gián tiếp vào tập tin xuất.\n" #: dllwrap.c:492 #, c-format msgid " --dllname Name of input dll to put into output lib.\n" -msgstr " --dllname \t\t_Tên dll_ nhập cần để vào thư viện xuất.\n" +msgstr " --dllname \t\tTên dll nhập cần để vào thư viện xuất.\n" #: dllwrap.c:493 #, c-format msgid " --def Name input .def file\n" -msgstr " --def \tTên tập tin _định nghĩa_ nhập\n" +msgstr " --def \tTên tập tin định nghĩa nhập liệu\n" #: dllwrap.c:494 #, c-format msgid " --output-def Name output .def file\n" -msgstr " --output-def \tTên _tập tin định nghĩa xuất_\n" +msgstr " --output-def \tTên tập tin định nghĩa xuất\n" #: dllwrap.c:495 #, c-format msgid " --export-all-symbols Export all symbols to .def\n" -msgstr " --export-all-symbols _Xuất mọi ký hiệu_ vào tập tin định nghĩa\n" +msgstr " --export-all-symbols Xuất mọi ký hiệu vào tập tin .def (xác định)\n" #: dllwrap.c:496 #, c-format msgid " --no-export-all-symbols Only export .drectve symbols\n" -msgstr "" -" --no-export-all-symbols \tXuất chỉ ký hiệu kiểu « .drectve ».\n" -"\t\t\t\t\t\t\t\t(_không xuất mọi ký hiệu_)\n" +msgstr " --no-export-all-symbols \tXuất chỉ ký hiệu kiểu « .drectve ».\n" #: dllwrap.c:497 #, c-format msgid " --exclude-symbols Exclude from .def\n" msgstr "" -" --exclude-symbols \n" -"\t\t\t\t\tLoại trừ danh sách này ra tập tin định nghĩa.\n" -"\t\t\t\t\t\t\t\t(_loại trừ các ký hiệu_)\n" +" --exclude-symbols \n" +"\t\t\t\t\tLoại trừ danh sách này ra tập tin .def.\n" #: dllwrap.c:498 #, c-format msgid " --no-default-excludes Zap default exclude symbols\n" -msgstr "" -" --no-default-excludes \t\tSửa mọi ký hiệu loại trừ mặc định.\n" -"\t\t\t\t\t\t\t\t(_không loại trừ mặc định_)\n" +msgstr " --no-default-excludes \t\tSửa mọi ký hiệu loại trừ mặc định.\n" #: dllwrap.c:499 #, c-format msgid " --base-file Read linker generated base file\n" -msgstr " --base-file Đọc _tập tin cơ bản_ do bộ liên kết tạo ra.\n" +msgstr " --base-file Đọc tập tin cơ bản do bộ liên kết tạo ra.\n" #: dllwrap.c:500 #, c-format @@ -1158,31 +1225,27 @@ msgstr " --no-idata5 Đừng tạo ra phần « idata$5 ».\n" #: dllwrap.c:502 #, c-format msgid " -U Add underscores to .lib\n" -msgstr " -U Thêm dấu gạch _dưới_ vào thư viện\n" +msgstr " -U Thêm dấu gạch dưới vào thư viện (.lib)\n" #: dllwrap.c:503 #, c-format msgid " -k Kill @ from exported names\n" -msgstr "" -" -k Xóa bỏ « @ » ra các tên đã xuất\n" -"\t\t\t\t\t(_buộc kết thúc_)\n" +msgstr " -k Giết « @ » ra các tên đã xuất\n" #: dllwrap.c:504 #, c-format msgid " --add-stdcall-alias Add aliases without @\n" -msgstr "" -" --add-stdcall-alias \tThêm biệt hiệu không có « @ ».\n" -"\t\t\t\t\t\t\t(_thêm biệt hiệu gọi chuẩn_)\n" +msgstr " --add-stdcall-alias \tThêm biệt hiệu mà không có « @ ».\n" #: dllwrap.c:505 #, c-format msgid " --as Use for assembler\n" -msgstr " --as Dùng tên này cho chương trình dịch mã số (_dạng_)\n" +msgstr " --as Dùng tên này cho chương trình dịch mã số\n" #: dllwrap.c:506 #, c-format msgid " --nodelete Keep temp files.\n" -msgstr " --nodelete Giữ các tập tin tạm (_không xóa bỏ_)\n" +msgstr " --nodelete Giữ các tập tin tạm\n" #: dllwrap.c:507 #, c-format @@ -1221,21 +1284,21 @@ msgstr "Tên TRÌNH ĐIỀU KHIỀN : %s\n" msgid "DRIVER options : %s\n" msgstr "Tùy chọn TRÌNH ĐIỀU KHIỂN : %s\n" -#: dwarf.c:93 dwarf.c:137 readelf.c:377 readelf.c:570 +#: dwarf.c:101 dwarf.c:145 readelf.c:355 readelf.c:520 #, c-format msgid "Unhandled data length: %d\n" -msgstr "Độ dài dữ liệu không được quản lý: %d\n" +msgstr "Chiều dài dữ liệu không được quản lý: %d\n" -#: dwarf.c:237 +#: dwarf.c:294 dwarf.c:2625 msgid "badly formed extended line op encountered!\n" msgstr "gặp thao tác dòng đã mở rộng dạng sai.\n" -#: dwarf.c:244 +#: dwarf.c:301 #, c-format msgid " Extended opcode %d: " msgstr " Opcode (mã thao tác) đã mở rộng %d: " -#: dwarf.c:249 +#: dwarf.c:306 #, c-format msgid "" "End of Sequence\n" @@ -1244,35 +1307,35 @@ msgstr "" "Kết thúc dãy\n" "\n" -#: dwarf.c:255 +#: dwarf.c:312 #, c-format msgid "set Address to 0x%lx\n" -msgstr "đặt Địa chỉ là 0x%lx\n" +msgstr "đặt Địa chỉ thành 0x%lx\n" -#: dwarf.c:260 +#: dwarf.c:317 #, c-format msgid " define new File Table entry\n" -msgstr " định nghĩa mục nhập Bảng Tập tin mới\n" +msgstr " định nghĩa mục nhập Bảng Tập Tin mới\n" -#: dwarf.c:261 dwarf.c:1928 +#: dwarf.c:318 dwarf.c:2240 #, c-format msgid " Entry\tDir\tTime\tSize\tName\n" msgstr " Mục\tTMục\tGiờ\tCỡ\tTên\n" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:263 +#: dwarf.c:320 #, c-format msgid " %d\t" msgstr " %d\t" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:266 dwarf.c:268 dwarf.c:270 dwarf.c:1940 dwarf.c:1942 dwarf.c:1944 +#: dwarf.c:323 dwarf.c:325 dwarf.c:327 dwarf.c:2252 dwarf.c:2254 dwarf.c:2256 #, c-format msgid "%lu\t" msgstr "%lu\t" # Variable: do not translate/ biến: đừng dịch -#: dwarf.c:271 +#: dwarf.c:328 #, c-format msgid "" "%s\n" @@ -1281,245 +1344,288 @@ msgstr "" "%s\n" "\n" -#: dwarf.c:275 +#: dwarf.c:332 +#, c-format +msgid "set Discriminator to %lu\n" +msgstr "đặt Discriminator thành %lu\n" + +#. The test against DW_LNW_hi_user is redundant due to +#. the limited range of the unsigned char data type used +#. for op_code. +#. && op_code <= DW_LNE_hi_user +#: dwarf.c:374 +#, c-format +msgid "user defined: length %d\n" +msgstr "do người dùng xác định: chiều dài %d\n" + +#: dwarf.c:376 dwarf.c:2656 #, c-format msgid "UNKNOWN: length %d\n" -msgstr "KHÔNG RÕ: độ dài %d\n" +msgstr "KHÔNG RÕ: chiều dài %d\n" -#: dwarf.c:288 +#: dwarf.c:389 msgid "" -msgstr "" +msgstr "" -#: dwarf.c:294 +#: dwarf.c:395 #, c-format msgid "DW_FORM_strp offset too big: %lx\n" -msgstr "DW_FORM_strp hiệu số quá lớn: %lx\n" +msgstr "DW_FORM_strp hiệu quá lớn: %lx\n" -#: dwarf.c:295 +#: dwarf.c:396 msgid "" -msgstr "" +msgstr "" -#: dwarf.c:528 +#: dwarf.c:629 #, c-format msgid "Unknown TAG value: %lx" msgstr "Giá trị TAG (thẻ) không rõ : %lx" -#: dwarf.c:564 +#: dwarf.c:665 #, c-format msgid "Unknown FORM value: %lx" msgstr "Giá trị FORM (dạng) không rõ : %lx" -#: dwarf.c:573 +#: dwarf.c:674 #, c-format msgid " %lu byte block: " msgstr " Khối %lu byte: " -#: dwarf.c:910 +#: dwarf.c:1092 #, c-format msgid "(User defined location op)" msgstr "(Thao tác định vị do người dùng định nghĩa)" -#: dwarf.c:912 +#: dwarf.c:1094 #, c-format msgid "(Unknown location op)" msgstr "(Thao tác định vị không rõ)" -#: dwarf.c:958 +#: dwarf.c:1142 msgid "Internal error: DWARF version is not 2 or 3.\n" msgstr "Lỗi nội bộ: phiên bản DWARF không phải là 2 hay 3.\n" -#: dwarf.c:1056 +#: dwarf.c:1241 msgid "DW_FORM_data8 is unsupported when sizeof (unsigned long) != 8\n" -msgstr "Không hỗ trợ « DW_FORM_data8 » khi « sizeof (unsigned long) != 8 » [kích cỡ của (dài không ký)]\n" +msgstr "Không hỗ trợ « DW_FORM_data8 » khi « sizeof (unsigned long) != 8 »\n" -#: dwarf.c:1105 +#: dwarf.c:1290 #, c-format msgid " (indirect string, offset: 0x%lx): %s" -msgstr " (chuỗi gián tiếp, hiệu số: 0x%lx): %s" +msgstr " (chuỗi gián tiếp, hiệu : 0x%lx): %s" -#: dwarf.c:1114 +#: dwarf.c:1299 #, c-format msgid "Unrecognized form: %lu\n" -msgstr "Không nhận diện dạng: %lu\n" +msgstr "Không nhận ra dạng: %lu\n" -#: dwarf.c:1199 +#: dwarf.c:1383 #, c-format msgid "(not inlined)" msgstr "(không đặt trực tiếp)" -#: dwarf.c:1202 +#: dwarf.c:1386 #, c-format msgid "(inlined)" msgstr "(đặt trực tiếp)" -#: dwarf.c:1205 +#: dwarf.c:1389 #, c-format msgid "(declared as inline but ignored)" msgstr "(khai báo là trực tiếp mà bị bỏ qua)" -#: dwarf.c:1208 +#: dwarf.c:1392 #, c-format msgid "(declared as inline and inlined)" msgstr "(khai báo là trực tiếp và đặt trực tiếp)" -#: dwarf.c:1211 +#: dwarf.c:1395 #, c-format msgid " (Unknown inline attribute value: %lx)" msgstr " (Không rõ giá trị thuộc tính trực tiếp: %lx)" -#: dwarf.c:1368 dwarf.c:2462 +#: dwarf.c:1556 +#, c-format +msgid "(location list)" +msgstr "(danh sách địa điểm)" + +#: dwarf.c:1575 dwarf.c:3257 #, c-format msgid " [without DW_AT_frame_base]" -msgstr " [không có DW_AT_frame_base (cơ bản khung)]" +msgstr " [không có DW_AT_frame_base]" -#: dwarf.c:1371 +#: dwarf.c:1587 #, c-format -msgid "(location list)" -msgstr "(danh sách địa điểm)" +msgid "Offset %lx used as value for DW_AT_import attribute of DIE at offset %lx is too big.\n" +msgstr "Quá lớn khoảng bù %lx được dùng làm giá trị cho thuộc tính nhập DW_AT_import của DIE ở khoảng bù %lx.\n" -#: dwarf.c:1489 +#: dwarf.c:1761 #, c-format msgid "Unknown AT value: %lx" msgstr "Không rõ giá trị AT: %lx" -#: dwarf.c:1558 +#: dwarf.c:1828 +#, c-format +msgid "Reserved length value (%lx) found in section %s\n" +msgstr "Giá trị chiều dài dành riêng (%lx) được tìm trong phần %s\n" + +#: dwarf.c:1839 +#, c-format +msgid "Corrupt unit length (%lx) found in section %s\n" +msgstr "Chiều dài đơn vị bị hỏng (%lx) được tìm trong phần %s\n" + +#: dwarf.c:1846 #, c-format msgid "No comp units in %s section ?" msgstr "Không có đơn vị biên dịch trong phần %s ?" -#: dwarf.c:1567 +#: dwarf.c:1855 #, c-format msgid "Not enough memory for a debug info array of %u entries" msgstr "Không đủ bộ nhớ cho mảng thông tin gỡ lỗi có mục nhập %u" -#: dwarf.c:1575 dwarf.c:2550 +#: dwarf.c:1863 dwarf.c:2858 dwarf.c:2952 dwarf.c:3026 dwarf.c:3143 +#: dwarf.c:3292 dwarf.c:3350 dwarf.c:3546 #, c-format msgid "" -"The section %s contains:\n" +"Contents of the %s section:\n" "\n" msgstr "" -"Phần %s chứa:\n" +"Nội dung của phần %s:\n" "\n" -#: dwarf.c:1583 +#: dwarf.c:1871 #, c-format msgid "Unable to locate %s section!\n" msgstr "Không thể định vị phần %s !\n" -#: dwarf.c:1646 +#: dwarf.c:1934 #, c-format msgid " Compilation Unit @ offset 0x%lx:\n" msgstr " Đơn vị biên dịch @ hiệu số 0x%lx:\n" -#: dwarf.c:1647 +#: dwarf.c:1935 #, c-format -msgid " Length: %ld\n" -msgstr " Dài: %ld\n" +msgid " Length: 0x%lx (%s)\n" +msgstr " Dài: 0x%lx (%s)\n" -#: dwarf.c:1648 +#: dwarf.c:1937 #, c-format msgid " Version: %d\n" msgstr " Phiên bản: %d\n" -#: dwarf.c:1649 +#: dwarf.c:1938 #, c-format msgid " Abbrev Offset: %ld\n" msgstr " Hiệu số tắt: %ld\n" -#: dwarf.c:1650 +#: dwarf.c:1939 #, c-format msgid " Pointer Size: %d\n" msgstr " Cỡ con trỏ : %d\n" -#: dwarf.c:1656 +#: dwarf.c:1945 #, c-format -msgid "Debug info is corrupted, length is invalid (section is %lu bytes)\n" -msgstr "Thông tin gỡ lỗi bị hỏng, độ dài không hợp lệ (phần là %lu byte)\n" +msgid "Debug info is corrupted, length of CU at %lx extends beyond end of section (length = %lx)\n" +msgstr "Thông tin gỡ lỗi bị hỏng, chiều dài của CU ở %lx kéo dài qua kết thúc phần (chiều dài = %lx)\n" -#: dwarf.c:1665 -msgid "Only version 2 and 3 DWARF debug information is currently supported.\n" -msgstr "Hỗ trợ chỉ thông tin gỡ lỗi phiên bản DWARF 2 và 3 thôi.\n" +#: dwarf.c:1954 +#, c-format +msgid "CU at offset %lx contains corrupt or unsupported version number: %d.\n" +msgstr "CU ở hiệu %lx chứa số thứ tự phiên bản bị hỏng hay không được hỗ trợ : %d.\n" + +#: dwarf.c:1964 +#, c-format +msgid "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n" +msgstr "Thông tin gỡ lỗi bị hỏng, hiệu viết tắt (%lx) lớn hơn kích cỡ phần viết tắt (%lx)\n" -#: dwarf.c:1674 +#: dwarf.c:1998 #, c-format -msgid "Debug info is corrupted, abbrev offset is invalid (section is %lu bytes)\n" -msgstr "Thông tin gỡ lỗi bị hỏng, hiệu đã viết tắt không hợp lệ (phần là %lu byte)\n" +msgid "Bogus end-of-siblings marker detected at offset %lx in .debug_info section\n" +msgstr "Dấu end-of-siblings giả được phát hiện ở khoảng bù %lx trong phần « .debug_info »\n" + +#: dwarf.c:2002 +msgid "Further warnings about bogus end-of-sibling markers suppressed\n" +msgstr "Sau đó thu hồi cảnh báo về dấu end-of-siblings giả\n" -#: dwarf.c:1702 +#: dwarf.c:2009 #, c-format msgid " <%d><%lx>: Abbrev Number: %lu" msgstr " <%d><%lx>: Số viết tắt: %lu" -#: dwarf.c:1722 +#: dwarf.c:2026 #, c-format -msgid "Unable to locate entry %lu in the abbreviation table\n" -msgstr "Không thể định vị mục nhâp %lu trong bảng viết tắt\n" +msgid "DIE at offset %lx refers to abbreviation number %lu which does not exist\n" +msgstr "DIE ở khoảng bù %lx tham chiếu đến số viết tắt %lu mà không tồn tại\n" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:1728 +#: dwarf.c:2032 #, c-format msgid " (%s)\n" msgstr " (%s)\n" -#: dwarf.c:1813 +#: dwarf.c:2123 #, c-format msgid "" +"Raw dump of debug contents of section %s:\n" "\n" -"Dump of debug contents of section %s:\n" -"\n" -msgstr "" -"\n" -"Việc đổ nội dung gỡ lỗi của phần %s:\n" +msgstr "Việc đổ thô nội dung gỡ lỗi của phần %s:\n" -#: dwarf.c:1851 -msgid "The line info appears to be corrupt - the section is too small\n" -msgstr "Hình như dòng bị hỏng — phần quá nhỏ\n" +#: dwarf.c:2161 +#, c-format +msgid "The information in section %s appears to be corrupt - the section is too small\n" +msgstr "Hình như thông tin trong phần %s bị hỏng — phần quá nhỏ\n" -#: dwarf.c:1860 +#: dwarf.c:2171 dwarf.c:2459 msgid "Only DWARF version 2 and 3 line info is currently supported.\n" msgstr "Hỗ trợ hiện thời chỉ thông tin dòng DWARF phiên bản 2 và 3.\n" -#: dwarf.c:1881 +#: dwarf.c:2192 +#, c-format +msgid " Offset: 0x%lx\n" +msgstr " Hiệu : 0x%lx\n" + +#: dwarf.c:2193 #, c-format msgid " Length: %ld\n" msgstr " Dài: %ld\n" -#: dwarf.c:1882 +#: dwarf.c:2194 #, c-format msgid " DWARF Version: %d\n" msgstr " Phiên bản DWARF: %d\n" -#: dwarf.c:1883 +#: dwarf.c:2195 #, c-format msgid " Prologue Length: %d\n" msgstr " Dài đoạn mở đầu : %d\n" -#: dwarf.c:1884 +#: dwarf.c:2196 #, c-format msgid " Minimum Instruction Length: %d\n" msgstr " Dài câu lệnh tối thiểu : %d\n" -#: dwarf.c:1885 +#: dwarf.c:2197 #, c-format msgid " Initial value of 'is_stmt': %d\n" msgstr " Giá trị đầu của « is_stmt »: %d\n" -#: dwarf.c:1886 +#: dwarf.c:2198 #, c-format msgid " Line Base: %d\n" msgstr " Cơ bản dòng: %d\n" -#: dwarf.c:1887 +#: dwarf.c:2199 #, c-format msgid " Line Range: %d\n" msgstr " Phạm vị dòng: %d\n" -#: dwarf.c:1888 +#: dwarf.c:2200 #, c-format msgid " Opcode Base: %d\n" msgstr " Cơ bản mã thao tác: %d\n" -#: dwarf.c:1897 +#: dwarf.c:2209 #, c-format msgid "" "\n" @@ -1528,12 +1634,12 @@ msgstr "" "\n" " Mã thao tác:\n" -#: dwarf.c:1900 +#: dwarf.c:2212 #, c-format msgid " Opcode %d has %d args\n" msgstr " Mã thao tác %d có %d đối số\n" -#: dwarf.c:1906 +#: dwarf.c:2218 #, c-format msgid "" "\n" @@ -1542,7 +1648,7 @@ msgstr "" "\n" " Bảng Thư mục rỗng\n" -#: dwarf.c:1909 +#: dwarf.c:2221 #, c-format msgid "" "\n" @@ -1552,12 +1658,12 @@ msgstr "" " Bảng Thư mục:\n" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:1913 +#: dwarf.c:2225 #, c-format msgid " %s\n" msgstr " %s\n" -#: dwarf.c:1924 +#: dwarf.c:2236 #, c-format msgid "" "\n" @@ -1566,7 +1672,7 @@ msgstr "" "\n" " Bảng Tên Tập tin rỗng:\n" -#: dwarf.c:1927 +#: dwarf.c:2239 #, c-format msgid "" "\n" @@ -1576,19 +1682,19 @@ msgstr "" " Bảng Tên Tập tin:\n" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:1935 +#: dwarf.c:2247 #, c-format msgid " %d\t" msgstr " %d\t" # Variable: do not translate/ biến: đừng dịch -#: dwarf.c:1946 +#: dwarf.c:2258 #, c-format msgid "%s\n" msgstr "%s\n" #. Now display the statements. -#: dwarf.c:1954 +#: dwarf.c:2266 #, c-format msgid "" "\n" @@ -1597,116 +1703,179 @@ msgstr "" "\n" " Câu Số thứ tự Dòng:\n" -#: dwarf.c:1970 +#: dwarf.c:2282 #, c-format msgid " Special opcode %d: advance Address by %lu to 0x%lx" msgstr " Mã thao tác đặc biệt %d: nâng cao Địa chỉ bước %lu tới 0x%lx" -#: dwarf.c:1974 +#: dwarf.c:2286 #, c-format msgid " and Line by %d to %d\n" msgstr " và Dòng bước %d tới %d\n" -#: dwarf.c:1984 +#: dwarf.c:2296 #, c-format msgid " Copy\n" msgstr " Chép\n" -#: dwarf.c:1992 +#: dwarf.c:2304 #, c-format msgid " Advance PC by %lu to 0x%lx\n" msgstr " Nâng cao PC bước %lu tới %lx\n" -#: dwarf.c:2000 +#: dwarf.c:2312 #, c-format msgid " Advance Line by %d to %d\n" msgstr " Nâng cao dòng bước %d tới %d\n" -#: dwarf.c:2007 +#: dwarf.c:2319 #, c-format msgid " Set File Name to entry %d in the File Name Table\n" msgstr " Lập Tên Tập tin là mục nhập %d trong Bảng Tên Tập tin\n" -#: dwarf.c:2015 +#: dwarf.c:2327 #, c-format msgid " Set column to %lu\n" msgstr " Lập cột thành %lu\n" -#: dwarf.c:2022 +#: dwarf.c:2334 #, c-format msgid " Set is_stmt to %d\n" -msgstr " Lập « is_stmt » (là câu) là %d\n" +msgstr " Lập « is_stmt » thành %d\n" -#: dwarf.c:2027 +#: dwarf.c:2339 #, c-format msgid " Set basic block\n" msgstr " Lập khối cơ bản\n" -#: dwarf.c:2035 +#: dwarf.c:2347 #, c-format msgid " Advance PC by constant %lu to 0x%lx\n" msgstr " Nâng cao PC bước hằng số %lu tới 0x%lx\n" -#: dwarf.c:2043 +#: dwarf.c:2355 #, c-format msgid " Advance PC by fixed size amount %lu to 0x%lx\n" msgstr " Nâng cao PC bước kích cỡ cố định %lu tới 0x%lx\n" -#: dwarf.c:2048 +#: dwarf.c:2360 #, c-format msgid " Set prologue_end to true\n" msgstr " Lập « prologue_end » (kết thúc đoạn mở đầu) là true (đúng)\n" -#: dwarf.c:2052 +#: dwarf.c:2364 #, c-format msgid " Set epilogue_begin to true\n" msgstr " Lập « epilogue_begin » (đầu phần kết) là true (đúng)\n" -#: dwarf.c:2058 +#: dwarf.c:2370 dwarf.c:2734 #, c-format msgid " Set ISA to %lu\n" msgstr " Lập ISA thành %lu\n" -#: dwarf.c:2062 +#: dwarf.c:2374 dwarf.c:2738 #, c-format msgid " Unknown opcode %d with operands: " msgstr " Gặp opcode (mã thao tác) không rõ %d với tác tử : " -#: dwarf.c:2088 dwarf.c:2174 dwarf.c:2248 dwarf.c:2360 dwarf.c:2492 -#: dwarf.c:2731 +#: dwarf.c:2407 #, c-format msgid "" -"Contents of the %s section:\n" +"Decoded dump of debug contents of section %s:\n" "\n" +msgstr "Đã giải mã bản đổ nội dung gỡ lỗi của phần %s:\n" + +#: dwarf.c:2449 +msgid "The line info appears to be corrupt - the section is too small\n" +msgstr "Hình như dòng bị hỏng — phần quá nhỏ\n" + +# Literal: don't translate/Nghĩa chữ : đừng dịch +#: dwarf.c:2568 +#, c-format +msgid "CU: %s:\n" +msgstr "CU: %s:\n" + +#: dwarf.c:2569 dwarf.c:2582 +#, c-format +msgid "File name Line number Starting address\n" +msgstr "Tên tập tin Số thứ tự dòng Địa chỉ bắt đầu\n" + +#: dwarf.c:2575 +#, c-format +msgid "CU: %s/%s:\n" +msgstr "CU: %s/%s:\n" + +# Variable: do not translate/ biến: đừng dịch +#: dwarf.c:2580 dwarf.c:2652 +#, c-format +msgid "%s:\n" +msgstr "%s:\n" + +#. If directory index is 0, that means current directory. +#: dwarf.c:2685 +#, c-format +msgid "" +"\n" +"./%s:[++]\n" msgstr "" -"Nội dung của phần %s:\n" "\n" +"./%s:[++]\n" + +#. The directory index starts counting at 1. +#: dwarf.c:2691 +#, c-format +msgid "" +"\n" +"%s/%s:\n" +msgstr "" +"\n" +"%s/%s:\n" + +#: dwarf.c:2776 +#, c-format +msgid "%-35s %11d %#18lx\n" +msgstr "%-35s %11d %#18lx\n" -#: dwarf.c:2128 +#: dwarf.c:2781 +#, c-format +msgid "%s %11d %#18lx\n" +msgstr "%s %11d %#18lx\n" + +#: dwarf.c:2811 dwarf.c:3088 dwarf.c:3510 +#, c-format +msgid "Unable to load/parse the .debug_info section, so cannot interpret the %s section.\n" +msgstr "Không thể nạp/phân tích phần « .debug_info » thì không thể đọc phần %s.\n" + +#: dwarf.c:2892 dwarf.c:3395 +#, c-format +msgid ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n" +msgstr "Khoảng bù « .debug_info » 0x%lx trong phần %s không chỉ tới một phần đầu CU.\n" + +#: dwarf.c:2906 msgid "Only DWARF 2 and 3 pubnames are currently supported\n" msgstr "Hỗ trợ hiện thời chỉ pubnames (tên công) DWARF phiên bản 2 và 3 thôi\n" -#: dwarf.c:2135 +#: dwarf.c:2913 #, c-format msgid " Length: %ld\n" -msgstr " Length: %ld\n" +msgstr " Chiều dài : %ld\n" -#: dwarf.c:2137 +#: dwarf.c:2915 #, c-format msgid " Version: %d\n" -msgstr " Version: %d\n" +msgstr " Phiên bản: %d\n" -#: dwarf.c:2139 +#: dwarf.c:2917 #, c-format -msgid " Offset into .debug_info section: %ld\n" -msgstr " Hiệu số vào phầnO« ffset into .» (thông tin gỡ lỗi)nfo section: %ld\n" +msgid " Offset into .debug_info section: 0x%lx\n" +msgstr " Hiệu vài phần .debug_info: 0x%lx\n" -#: dwarf.c:2141 +#: dwarf.c:2919 #, c-format msgid " Size of area in .debug_info section: %ld\n" -msgstr " Kích cỡ của vùng trong phần « .debug_info » (thông tin gỡ lỗi): %ld\n" +msgstr " Kích cỡ của vùng trong phần « .debug_info »: %ld\n" -#: dwarf.c:2144 +#: dwarf.c:2922 #, c-format msgid "" "\n" @@ -1715,57 +1884,57 @@ msgstr "" "\n" " Hiệu\tTên\n" -#: dwarf.c:2195 +#: dwarf.c:2973 #, c-format msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n" msgstr " DW_MACINFO_start_file (bắt đầu tập tin) — số_dòng: %d số_tập_tin: %d\n" -#: dwarf.c:2201 +#: dwarf.c:2979 #, c-format msgid " DW_MACINFO_end_file\n" msgstr " DW_MACINFO_end_file (kết thúc tập tin)\n" -#: dwarf.c:2209 +#: dwarf.c:2987 #, c-format msgid " DW_MACINFO_define - lineno : %d macro : %s\n" msgstr " DW_MACINFO_define (định nghĩa) — số_dòng : %d bộ_lệnh : %s\n" -#: dwarf.c:2218 +#: dwarf.c:2996 #, c-format msgid " DW_MACINFO_undef - lineno : %d macro : %s\n" msgstr " DW_MACINFO_undef (chưa định nghĩa) — số_dòng : %d bộ_lệnh : %s\n" -#: dwarf.c:2230 +#: dwarf.c:3008 #, c-format msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n" msgstr " DW_MACINFO_vendor_ext (phần mở rộng nhà bán) — hằng số : %d chuối : %s\n" -#: dwarf.c:2259 +#: dwarf.c:3037 #, c-format msgid " Number TAG\n" msgstr " Số THẺ\n" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:2265 +#: dwarf.c:3043 #, c-format msgid " %ld %s [%s]\n" msgstr " %ld %s [%s]\n" -#: dwarf.c:2268 +#: dwarf.c:3046 msgid "has children" msgstr "có điều con" -#: dwarf.c:2268 +#: dwarf.c:3046 msgid "no children" msgstr "không có con" # Variable: don't translate / Biến: đừng dịch -#: dwarf.c:2271 +#: dwarf.c:3049 #, c-format msgid " %-18s %s\n" msgstr " %-18s %s\n" -#: dwarf.c:2304 dwarf.c:2488 dwarf.c:2675 +#: dwarf.c:3082 dwarf.c:3288 dwarf.c:3504 #, c-format msgid "" "\n" @@ -1775,195 +1944,212 @@ msgstr "" "Phần %s là rỗng.\n" #. FIXME: Should we handle this case? -#: dwarf.c:2349 +#: dwarf.c:3132 msgid "Location lists in .debug_info section aren't in ascending order!\n" -msgstr "• Các danh sách địa điểm trong phần « .debug_info » (thông tin gỡ lỗi) không phải theo thứ tự dần. •\n" +msgstr "Các danh sách địa điểm trong phần « .debug_info » (thông tin gỡ lỗi) không phải theo thứ tự dần.\n" -#: dwarf.c:2352 +#: dwarf.c:3135 msgid "No location lists in .debug_info section!\n" -msgstr "• Không có danh sách địa điểm trong phần « .debug_info » (thông tin gỡ lỗi). •\n" +msgstr "Không có danh sách địa điểm trong phần « .debug_info » (thông tin gỡ lỗi). •\n" -#: dwarf.c:2357 +#: dwarf.c:3140 #, c-format msgid "Location lists in %s section start at 0x%lx\n" msgstr "Danh sách địa điểm trong phần %s bắt đầu tại 0x%lx\n" -#: dwarf.c:2361 +#: dwarf.c:3144 #, c-format msgid " Offset Begin End Expression\n" msgstr " HIệu Đầu Cuối Biểu thức\n" -#: dwarf.c:2392 +#: dwarf.c:3175 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "Có một lỗ [0x%lx - 0x%lx] trong phần « .debug_info » (thông tin gỡ lỗi).\n" -#: dwarf.c:2395 +#: dwarf.c:3179 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n" msgstr "Có một nơi chồng lấp [0x%lx - 0x%lx] trong phần « .debug_info » (thông tin gỡ lỗi).\n" -#: dwarf.c:2402 +#: dwarf.c:3187 #, c-format msgid "Offset 0x%lx is bigger than .debug_loc section size.\n" msgstr "Có hiệu số 0x%lx lớn hơn kích cỡ của phần « .debug_loc » (địa điểm gỡ lỗi).\n" -#: dwarf.c:2411 dwarf.c:2438 dwarf.c:2448 +#: dwarf.c:3196 dwarf.c:3231 dwarf.c:3241 #, c-format msgid "Location list starting at offset 0x%lx is not terminated.\n" msgstr "Danh sách địa điểm mà bắt đầu tại hiệu số 0x%lx chưa được kết thúc.\n" -#: dwarf.c:2423 dwarf.c:2776 +#: dwarf.c:3215 dwarf.c:3597 #, c-format -msgid " %8.8lx \n" -msgstr " %8.8lx \n" +msgid "\n" +msgstr "\n" -#: dwarf.c:2431 +#: dwarf.c:3225 #, c-format -msgid " %8.8lx %8.8lx %8.8lx (base address)\n" -msgstr " %8.8lx %8.8lx %8.8lx (địa chỉ cơ bản)\n" +msgid "(base address)\n" +msgstr "(đặt địa cơ bản)\n" -#: dwarf.c:2465 dwarf.c:2793 +#: dwarf.c:3260 msgid " (start == end)" -msgstr " (start == end)" +msgstr " (đầu == cuối)" -#: dwarf.c:2467 dwarf.c:2795 +#: dwarf.c:3262 msgid " (start > end)" -msgstr " (start > end)" +msgstr " (đầu > cuối)" + +#: dwarf.c:3272 +#, c-format +msgid "There are %ld unused bytes at the end of section %s\n" +msgstr "Có %ld byte chưa dùng ở kết thúc của phần %s\n" -#: dwarf.c:2596 +#: dwarf.c:3406 msgid "Only DWARF 2 and 3 aranges are currently supported.\n" msgstr "Hỗ trợ hiện thời chỉ arange (phạm vị a) DWARF phiên bản 2 và 3 thôi.\n" -#: dwarf.c:2600 +#: dwarf.c:3410 #, c-format msgid " Length: %ld\n" msgstr " Dài: %ld\n" -#: dwarf.c:2601 +#: dwarf.c:3411 #, c-format msgid " Version: %d\n" msgstr " Phiên bản: %d\n" -#: dwarf.c:2602 +#: dwarf.c:3412 #, c-format -msgid " Offset into .debug_info: %lx\n" -msgstr " Hiệu số vào « .debug_info » (thông tin gỡ lỗi): %lx\n" +msgid " Offset into .debug_info: 0x%lx\n" +msgstr " Hiệu vào .debug_info: 0x%lx\n" -#: dwarf.c:2603 +#: dwarf.c:3413 #, c-format msgid " Pointer Size: %d\n" msgstr " Kích cỡ con trỏ : %d\n" -#: dwarf.c:2604 +#: dwarf.c:3414 #, c-format msgid " Segment Size: %d\n" msgstr " Kích cỡ phân đoạn: %d\n" -#: dwarf.c:2613 +#: dwarf.c:3423 msgid "Pointer size + Segment size is not a power of two.\n" msgstr "Kích cỡ con trỏ + kích cỡ đoạn không phải là hai lũy thừa.\n" -#: dwarf.c:2618 +#: dwarf.c:3428 #, c-format msgid "" "\n" " Address Length\n" msgstr "" "\n" -" Địa chỉ Độ dài\n" +" Địa chỉ Dài\n" -#: dwarf.c:2620 +#: dwarf.c:3430 #, c-format msgid "" "\n" " Address Length\n" msgstr "" "\n" -" Địa chỉ Độ dài\n" +" Địa chỉ Dài\n" -#. FIXME: Should we handle this case? -#: dwarf.c:2720 -msgid "Range lists in .debug_info section aren't in ascending order!\n" -msgstr "• Các danh sách phạm vị trong phần « .debug_info » (thông tin gỡ lỗi) không phải theo thứ tự dần. •\n" - -#: dwarf.c:2723 +#: dwarf.c:3520 msgid "No range lists in .debug_info section!\n" -msgstr "• Không có danh sách phạm vị trong phần « .debug_info » (thông tin gỡ lỗi). •\n" +msgstr "Không có danh sách phạm vị trong phần « .debug_info » (thông tin gỡ lỗi).\n" -#: dwarf.c:2728 +#: dwarf.c:3543 #, c-format msgid "Range lists in %s section start at 0x%lx\n" msgstr "Danh sách phạm vị trong phần %s bắt đầu tại 0x%lx\n" -#: dwarf.c:2732 +#: dwarf.c:3547 #, c-format msgid " Offset Begin End\n" msgstr " HIệu Đầu Cuối\n" -#: dwarf.c:2757 +#: dwarf.c:3568 #, c-format msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n" msgstr "Có một lỗ [0x%lx - 0x%lx] trong phần %s.\n" -#: dwarf.c:2761 +#: dwarf.c:3572 #, c-format msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n" msgstr "Có một nơi chồng lấp [0x%lx - 0x%lx] trong phần %s.\n" -#: dwarf.c:2963 +#: dwarf.c:3615 +msgid "(start == end)" +msgstr "(đầu == cuối)" + +#: dwarf.c:3617 +msgid "(start > end)" +msgstr "(đầu > cuối)" + +#: dwarf.c:3853 +msgid "bad register: " +msgstr "thanh ghi sai: " + +#: dwarf.c:3855 #, c-format -msgid "The section %s contains:\n" -msgstr "Phần %s chứa:\n" +msgid "Contents of the %s section:\n" +msgstr "Nội dung của phần %s:\n" -#: dwarf.c:3650 +#: dwarf.c:4619 #, c-format msgid " DW_CFA_??? (User defined call frame op: %#x)\n" msgstr " DW_CFA_??? (Toán tử khung gọi do người dùng xác định): %#x)\n" -#: dwarf.c:3652 +#: dwarf.c:4621 #, c-format msgid "unsupported or unknown Dwarf Call Frame Instruction number: %#x\n" msgstr "số hướng dẫn khung gọi nhỏ xíu (Dwarf Call Frame Instruction) không được hỗ trợ hay không được nhận ra: %#x\n" -#: dwarf.c:3676 +#: dwarf.c:4645 #, c-format msgid "Displaying the debug contents of section %s is not yet supported.\n" msgstr "Chưa hỗ trợ khả năng hiển thị nội dung phần %s.\n" -#: dwarf.c:3718 +#: dwarf.c:4687 #, c-format msgid "%s: Error: " msgstr "%s: Lỗi: " -#: dwarf.c:3729 +#: dwarf.c:4698 #, c-format msgid "%s: Warning: " msgstr "%s: Cảnh báo : " -#: emul_aix.c:51 +#: dwarf.c:4796 dwarf.c:4862 +#, c-format +msgid "Unrecognized debug option '%s'\n" +msgstr "Không nhận ra tùy chọn gỡ lỗi « %s »\n" + +#: emul_aix.c:43 #, c-format msgid " [-g] - 32 bit small archive\n" msgstr " [-g] • kho nhỏ 32-bit\n" -#: emul_aix.c:52 +#: emul_aix.c:44 #, c-format msgid " [-X32] - ignores 64 bit objects\n" msgstr " [-X32] • bỏ qua các đối tượng kiểu 64 bit\n" -#: emul_aix.c:53 +#: emul_aix.c:45 #, c-format msgid " [-X64] - ignores 32 bit objects\n" msgstr " [-X64] • bỏ qua các đối tượng kiểu 32 bit\n" -#: emul_aix.c:54 +#: emul_aix.c:46 #, c-format msgid " [-X32_64] - accepts 32 and 64 bit objects\n" msgstr " [-X32_64] • chấp nhận các đối tượng kiểu cả 32 bit lẫn 64 bit đều\n" #: ieee.c:309 msgid "unexpected end of debugging information" -msgstr "gặp kết thúc thông tin gỡ lỗi bất thường" +msgstr "gặp kết thúc bất thường trong thông tin gỡ lỗi" #: ieee.c:396 msgid "invalid number" @@ -1971,7 +2157,7 @@ msgstr "số không hợp lệ" #: ieee.c:449 msgid "invalid string length" -msgstr "độ dài chuỗi không hợp lệ" +msgstr "chiều dài chuỗi không hợp lệ" #: ieee.c:504 ieee.c:545 msgid "expression stack overflow" @@ -2013,186 +2199,186 @@ msgstr "kiểu mục ghi bất thường" msgid "blocks left on stack at end" msgstr "có một số khối còn lại trên đống khi kết thúc" -#: ieee.c:1196 +#: ieee.c:1206 msgid "unknown BB type" msgstr "không rõ kiểu BB" -#: ieee.c:1205 +#: ieee.c:1215 msgid "stack overflow" msgstr "trán đống" -#: ieee.c:1228 +#: ieee.c:1238 msgid "stack underflow" msgstr "trán ngược đống" -#: ieee.c:1340 ieee.c:1410 ieee.c:2107 +#: ieee.c:1350 ieee.c:1420 ieee.c:2118 msgid "illegal variable index" msgstr "chỉ mục biến không được phép" -#: ieee.c:1388 +#: ieee.c:1398 msgid "illegal type index" msgstr "chỉ mục kiểu không được phép" -#: ieee.c:1398 ieee.c:1435 +#: ieee.c:1408 ieee.c:1445 msgid "unknown TY code" msgstr "không rõ mã TY" -#: ieee.c:1417 +#: ieee.c:1427 msgid "undefined variable in TY" msgstr "gặp biến chưa được định nghĩa trong TY" #. Pascal file name. FIXME. -#: ieee.c:1828 +#: ieee.c:1839 msgid "Pascal file name not supported" msgstr "Chưa hỗ trợ tên tập tin kiểu Pascal" -#: ieee.c:1876 +#: ieee.c:1887 msgid "unsupported qualifier" msgstr "bộ dè dặt chưa được hỗ trợ" -#: ieee.c:2145 +#: ieee.c:2156 msgid "undefined variable in ATN" msgstr "gặp biến chưa định nghĩa trong ATN" -#: ieee.c:2188 +#: ieee.c:2199 msgid "unknown ATN type" msgstr "không rõ kiểu ATN" #. Reserved for FORTRAN common. -#: ieee.c:2310 +#: ieee.c:2321 msgid "unsupported ATN11" msgstr "ATN11 không được hỗ trơ" #. We have no way to record this information. FIXME. -#: ieee.c:2337 +#: ieee.c:2348 msgid "unsupported ATN12" msgstr "ATN12 không được hỗ trơ" -#: ieee.c:2397 +#: ieee.c:2408 msgid "unexpected string in C++ misc" msgstr "gặp chuỗi không được hỗ trơ trong C++ lặt vặt" -#: ieee.c:2410 +#: ieee.c:2421 msgid "bad misc record" -msgstr "mục ghi lặt vặt sai" +msgstr "mục ghi linh tinh sai" -#: ieee.c:2451 +#: ieee.c:2462 msgid "unrecognized C++ misc record" -msgstr "không chấp nhận mục ghi C++ lặt vặt" +msgstr "không chấp nhận mục ghi C++ linh tinh" -#: ieee.c:2566 +#: ieee.c:2577 msgid "undefined C++ object" msgstr "đối tượng C++ chưa được định nghĩa" -#: ieee.c:2600 +#: ieee.c:2611 msgid "unrecognized C++ object spec" msgstr "chưa chấp nhận đặc tả đối tượng C++" -#: ieee.c:2636 +#: ieee.c:2647 msgid "unsupported C++ object type" msgstr "kiểu đối tượng C++ chưa được hỗ trợ" -#: ieee.c:2646 +#: ieee.c:2657 msgid "C++ base class not defined" msgstr "chưa định nghĩa hạng cơ bản C++" -#: ieee.c:2658 ieee.c:2763 +#: ieee.c:2669 ieee.c:2774 msgid "C++ object has no fields" msgstr "Đối tượng C++ không có trường" -#: ieee.c:2677 +#: ieee.c:2688 msgid "C++ base class not found in container" msgstr "Không tìm thấy hạng cơ bản C++ trong bộ chứa" -#: ieee.c:2784 +#: ieee.c:2795 msgid "C++ data member not found in container" msgstr "Không tìm thấy bộ phạn dữ liệu C++ trong bộ chứa" -#: ieee.c:2825 ieee.c:2975 +#: ieee.c:2836 ieee.c:2986 msgid "unknown C++ visibility" msgstr "không rõ độ thấy rõ C++" -#: ieee.c:2859 +#: ieee.c:2870 msgid "bad C++ field bit pos or size" msgstr "vị trí bit hay kích cỡ trường C++ sai" -#: ieee.c:2951 +#: ieee.c:2962 msgid "bad type for C++ method function" msgstr "kiểu sai cho hàm phương pháp C++" -#: ieee.c:2961 +#: ieee.c:2972 msgid "no type information for C++ method function" msgstr "không có thông tin kiểu cho hàm phương pháp C++" -#: ieee.c:3000 +#: ieee.c:3011 msgid "C++ static virtual method" msgstr "phương pháp ảo tĩnh C++" -#: ieee.c:3095 +#: ieee.c:3106 msgid "unrecognized C++ object overhead spec" msgstr "chưa chấp nhận đặc tả duy tu đối tượng C++" -#: ieee.c:3134 +#: ieee.c:3145 msgid "undefined C++ vtable" msgstr "chưa định nghĩa vtable C++" -#: ieee.c:3203 +#: ieee.c:3214 msgid "C++ default values not in a function" msgstr "Giá trị C++ mặc định không phải trong hàm" -#: ieee.c:3243 +#: ieee.c:3254 msgid "unrecognized C++ default type" msgstr "chưa chấp nhận kiểu C++ mặc định" -#: ieee.c:3274 +#: ieee.c:3285 msgid "reference parameter is not a pointer" msgstr "tham số tham chiếu không phải là con trỏ" -#: ieee.c:3357 +#: ieee.c:3368 msgid "unrecognized C++ reference type" msgstr "chưa chấp nhận kiểu tham chiếu C++" -#: ieee.c:3439 +#: ieee.c:3450 msgid "C++ reference not found" msgstr "Không tìm thấy tham chiếu C++" -#: ieee.c:3447 +#: ieee.c:3458 msgid "C++ reference is not pointer" msgstr "Tham chiếu C++ không phải là con trỏ" -#: ieee.c:3473 ieee.c:3481 +#: ieee.c:3484 ieee.c:3492 msgid "missing required ASN" msgstr "thiếu ASN cần thiết" -#: ieee.c:3508 ieee.c:3516 +#: ieee.c:3519 ieee.c:3527 msgid "missing required ATN65" msgstr "thiếu ATN65 cần thiết" -#: ieee.c:3530 +#: ieee.c:3541 msgid "bad ATN65 record" msgstr "mục ghi ATN65 sai" -#: ieee.c:4158 +#: ieee.c:4169 #, c-format msgid "IEEE numeric overflow: 0x" -msgstr "trán thuộc số IEEE: 0x" +msgstr "tràn thuộc số IEEE: 0x" -#: ieee.c:4202 +#: ieee.c:4213 #, c-format msgid "IEEE string length overflow: %u\n" -msgstr "Trán độ dài chuỗi IEEE: %u\n" +msgstr "tràn độ dài chuỗi IEEE: %u\n" -#: ieee.c:5203 +#: ieee.c:5210 #, c-format msgid "IEEE unsupported integer type size %u\n" msgstr "Kích cỡ kiểu số nguyên không được hỗ trợ IEEE %u\n" -#: ieee.c:5237 +#: ieee.c:5244 #, c-format msgid "IEEE unsupported float type size %u\n" msgstr "Kích cỡ kiểu nổi không được hỗ trợ IEEE %u\n" -#: ieee.c:5271 +#: ieee.c:5278 #, c-format msgid "IEEE unsupported complex type size %u\n" msgstr "Kích cỡ kiểu phức tạp không được hỗ trợ IEEE %u\n" @@ -2201,124 +2387,120 @@ msgstr "Kích cỡ kiểu phức tạp không được hỗ trợ IEEE %u\n" msgid "Duplicate symbol entered into keyword list." msgstr "Ký hiệu trùng được nhập vào danh sách từ khoá." -#: nlmconv.c:271 srconv.c:1815 +#: nlmconv.c:273 srconv.c:1822 msgid "input and output files must be different" msgstr "tập tin nhập và xuất phải là khác nhau" -#: nlmconv.c:318 +#: nlmconv.c:320 msgid "input file named both on command line and with INPUT" -msgstr "tên tập tin được lập cả trên dòng lệnh lẫn bằng INPUT đều" +msgstr "tên tập tin được đặt tên cả hai trên dòng lệnh và bằng INPUT" -#: nlmconv.c:327 +#: nlmconv.c:329 msgid "no input file" msgstr "không có tập tin nhập vào" -#: nlmconv.c:357 +#: nlmconv.c:359 msgid "no name for output file" -msgstr "không có tên cho tập tin nhập vào" +msgstr "không có tên cho tập tin kết xuất" -#: nlmconv.c:371 +#: nlmconv.c:373 msgid "warning: input and output formats are not compatible" msgstr "cảnh báo : định dạng nhập và xuất không tương thích với nhau" -#: nlmconv.c:400 +#: nlmconv.c:403 msgid "make .bss section" msgstr "tạo phần « .bss »" -#: nlmconv.c:409 +#: nlmconv.c:413 msgid "make .nlmsections section" msgstr "tạo phần « .nlmsections »" -#: nlmconv.c:411 -msgid "set .nlmsections flags" -msgstr "đặt các cờ « .nlmsections »" - -#: nlmconv.c:439 +#: nlmconv.c:441 msgid "set .bss vma" msgstr "đặt vma .bss" -#: nlmconv.c:446 +#: nlmconv.c:448 msgid "set .data size" msgstr "đặt kích cỡ dữ liệu .data" -#: nlmconv.c:626 +#: nlmconv.c:628 #, c-format msgid "warning: symbol %s imported but not in import list" msgstr "cảnh báo : ký hiệu %s được nhập mà không phải trong danh sách nhập" -#: nlmconv.c:646 +#: nlmconv.c:648 msgid "set start address" msgstr "đặt địa chỉ bắt đầu" -#: nlmconv.c:695 +#: nlmconv.c:697 #, c-format msgid "warning: START procedure %s not defined" msgstr "cảnh báo : thủ tục START (bắt đầu) %s chưa được định nghĩa" -#: nlmconv.c:697 +#: nlmconv.c:699 #, c-format msgid "warning: EXIT procedure %s not defined" msgstr "cảnh báo : thủ tục EXIT (thoát) %s chưa được định nghĩa" -#: nlmconv.c:699 +#: nlmconv.c:701 #, c-format msgid "warning: CHECK procedure %s not defined" msgstr "cảnh báo : thủ tục CHECK (kiểm tra) %s chưa được định nghĩa" -#: nlmconv.c:720 nlmconv.c:909 +#: nlmconv.c:721 nlmconv.c:907 msgid "custom section" -msgstr "phần tự chọn" +msgstr "phần riêng" -#: nlmconv.c:741 nlmconv.c:938 +#: nlmconv.c:741 nlmconv.c:936 msgid "help section" msgstr "phần trợ giúp" -#: nlmconv.c:763 nlmconv.c:956 +#: nlmconv.c:763 nlmconv.c:954 msgid "message section" msgstr "phần thông điệp" -#: nlmconv.c:779 nlmconv.c:989 +#: nlmconv.c:778 nlmconv.c:987 msgid "module section" msgstr "phần mô-đun" -#: nlmconv.c:799 nlmconv.c:1005 +#: nlmconv.c:797 nlmconv.c:1003 msgid "rpc section" msgstr "phần rpc" #. There is no place to record this information. -#: nlmconv.c:835 +#: nlmconv.c:833 #, c-format msgid "%s: warning: shared libraries can not have uninitialized data" msgstr "%s: cảnh báo : thư viện dùng chung không thể chứa dữ liệu chưa được sở khởi" -#: nlmconv.c:856 nlmconv.c:1024 +#: nlmconv.c:854 nlmconv.c:1022 msgid "shared section" msgstr "phần dùng chung" -#: nlmconv.c:864 +#: nlmconv.c:862 msgid "warning: No version number given" msgstr "cảnh báo : chưa đưa ra số thứ tự phiên bản" -#: nlmconv.c:904 nlmconv.c:933 nlmconv.c:951 nlmconv.c:1000 nlmconv.c:1019 +#: nlmconv.c:902 nlmconv.c:931 nlmconv.c:949 nlmconv.c:998 nlmconv.c:1017 #, c-format msgid "%s: read: %s" msgstr "%s: đọc: %s" -#: nlmconv.c:926 +#: nlmconv.c:924 msgid "warning: FULLMAP is not supported; try ld -M" msgstr "cảnh báo : chưa hỗ trợ FULLMAP; hãy thử « ld -M »" -#: nlmconv.c:1102 +#: nlmconv.c:1100 #, c-format msgid "Usage: %s [option(s)] [in-file [out-file]]\n" -msgstr "Cách sử dụng: %s [tùy_chọn...] [tập_tin_nhập [tập_tin_xuất]]\n" +msgstr "Sử dụng: %s [tùy_chọn...] [tập_tin_nhập [tập_tin_xuất]]\n" -#: nlmconv.c:1103 +#: nlmconv.c:1101 #, c-format msgid " Convert an object file into a NetWare Loadable Module\n" -msgstr " Chuyển đổi tập tin đối tượng sang Mô-đun Tải được NetWare (NetWare Loadable Module)\n" +msgstr " Chuyển đổi tập tin đối tượng sang Mô-đun Nạp Được NetWare (NetWare Loadable Module)\n" -#: nlmconv.c:1104 +#: nlmconv.c:1102 #, c-format msgid "" " The options are:\n" @@ -2345,74 +2527,74 @@ msgstr "" " -h --help \t\t Hiển thị _trợ giúp_ này\n" " -v --version \t\t Hiển thị _phiên bản_ chương trình\n" -#: nlmconv.c:1145 +#: nlmconv.c:1143 #, c-format msgid "support not compiled in for %s" msgstr "chưa biên dịch cách hỗ trợ %s" -#: nlmconv.c:1182 +#: nlmconv.c:1180 msgid "make section" msgstr "tạo phần" -#: nlmconv.c:1196 +#: nlmconv.c:1194 msgid "set section size" msgstr "lập kích cỡ phần" -#: nlmconv.c:1202 +#: nlmconv.c:1200 msgid "set section alignment" msgstr "lập canh lề phần" -#: nlmconv.c:1206 +#: nlmconv.c:1204 msgid "set section flags" msgstr "lập các cờ phân" -#: nlmconv.c:1217 +#: nlmconv.c:1215 msgid "set .nlmsections size" msgstr "lập kích cỡ « .nlmsections »" -#: nlmconv.c:1298 nlmconv.c:1306 nlmconv.c:1315 nlmconv.c:1320 +#: nlmconv.c:1296 nlmconv.c:1304 nlmconv.c:1313 nlmconv.c:1318 msgid "set .nlmsection contents" msgstr "lập nội dung « .nlmsections »" -#: nlmconv.c:1799 +#: nlmconv.c:1795 msgid "stub section sizes" msgstr "kích cỡ phần stub" -#: nlmconv.c:1846 +#: nlmconv.c:1842 msgid "writing stub" -msgstr "đang ghi stub..." +msgstr "đang ghi stub" -#: nlmconv.c:1930 +#: nlmconv.c:1926 #, c-format msgid "unresolved PC relative reloc against %s" msgstr "có việc định vị lại liên quan đến PC chưa tháo gỡ đối với %s" -#: nlmconv.c:1994 +#: nlmconv.c:1990 #, c-format msgid "overflow when adjusting relocation against %s" msgstr "trán khi điều chỉnh việc định vị lại đối với %s" -#: nlmconv.c:2121 +#: nlmconv.c:2117 #, c-format msgid "%s: execution of %s failed: " msgstr "%s: việc thực hiện %s bị lỗi: " -#: nlmconv.c:2136 +#: nlmconv.c:2132 #, c-format msgid "Execution of %s failed" msgstr "Việc thực hiện %s bị lỗi" -#: nm.c:213 size.c:83 strings.c:705 +#: nm.c:220 size.c:78 strings.c:659 #, c-format msgid "Usage: %s [option(s)] [file(s)]\n" msgstr "Cách sử dụng: %s [tùy_chọn...] [tập_tin...]\n" -#: nm.c:214 +#: nm.c:221 #, c-format msgid " List symbols in [file(s)] (a.out by default).\n" msgstr " Liệt kê các ký hiệu trong những tập tin này (mặc định là ).\n" -#: nm.c:215 +#: nm.c:222 #, c-format msgid "" " The options are:\n" @@ -2437,82 +2619,92 @@ msgid "" " -p, --no-sort Do not sort the symbols\n" " -P, --portability Same as --format=posix\n" " -r, --reverse-sort Reverse the sense of the sort\n" -" -S, --print-size Print size of defined symbols\n" -" -s, --print-armap Include index for symbols from archive members\n" -" --size-sort Sort symbols by size\n" -" --special-syms Include special symbols in the output\n" -" --synthetic Display synthetic symbols as well\n" -" -t, --radix=RADIX Use RADIX for printing symbol values\n" -" --target=BFDNAME Specify the target object format as BFDNAME\n" -" -u, --undefined-only Display only undefined symbols\n" -" -X 32_64 (ignored)\n" -" @FILE Read options from FILE\n" -" -h, --help Display this information\n" -" -V, --version Display this program's version number\n" -"\n" msgstr "" " Tùy chọn:\n" -" -a, --debug-syms \tHiển thị _ký hiệu_ chỉ kiểu bộ _gỡ lỗi_ thôi\n" -" -A, --print-file-name \t_In ra tên tập tin_ nhập trước mỗi ký hiệu\n" +" -a, --debug-syms \tHiển thị ký hiệu chỉ kiểu bộ gỡ lỗi\n" +" -A, --print-file-name \tIn ra tên tập tin nhập vào trước mọi ký hiệu\n" " -B \t\t\tBằng « --format=bsd »\n" " -C, --demangle[=KIỂU_DÁNG]\n" "\tGiải mã các tên ký hiệu cấp thấp thành tên cấp người dùng (_tháo gỡ_)\n" " Kiểu dáng này, nếu được ghi rõ, có thể là « auto » (tự động: mặc định)\n" "\t« gnu », « lucid », « arm », « hp », « edg », « gnu-v3 », « java » hay « gnat ».\n" -" --no-demangle \t\t_Đừng tháo gỡ_ tên ký hiệu cấp thấp\n" -" -D, --dynamic \t\tHiển thị ký hiệu _động_ thay vào ký hiệu chuẩn\n" -" --defined-only \t\tHiển thị _chỉ_ ký hiệu _được định nghĩa_\n" +" --no-demangle \t\tĐừng tháo gỡ tên ký hiệu cấp thấp\n" +" -D, --dynamic \t\tHiển thị ký hiệu động thay vào ký hiệu chuẩn\n" +" --defined-only \t\tHiển thị chỉ ký hiệu được định nghĩa\n" " -e \t\t\t(bị bỏ qua)\n" -" -f, --format=DẠNG_THỨC \tDùng _định dạng_ xuất này, một của\n" +" -f, --format=ĐỊNH_DẠNG \tDùng định dạng kết xuất này, một của\n" "\t\t\t\t\t\t\t« bsd » (mặc định), « sysv » hay « posix »\n" -" -g, --extern-only \t\tHiển thị _chỉ_ ký hiệu _bên ngoài_\n" +" -g, --extern-only \t\tHiển thị chỉ ký hiệubên ngoài_\n" " -l, --line-numbers \t\tDùng thông tin gỡ lỗi để tìm tên tập tin\n" -"\t\t\t\t\t\tvà _số thứ tự dòng_ cho mỗi ký hiệu\n" -" -n, --numeric-sort \t\t_Sắp xếp_ ký hiệu một cách _thuộc số_ theo địa chỉ\n" +"\t\t\t\t\t\tvà số thứ tự dòng cho mỗi ký hiệu\n" +" -n, --numeric-sort \t\tSắp xếp các ký hiệu một cách thuộc số theo địa chỉ\n" " -o \t\t\tBằng « -A »\n" -" -p, --no-sort \t\t_Đừng sắp xếp_ ký hiệu\n" +" -p, --no-sort \t\tĐừng sắp xếp các ký hiệu\n" " -P, --portability \t\tBằng « --format=posix »\n" -" -r, --reverse-sort \t\t_Sắp xếp ngược_\n" -" -S, --print-size \t\tIn ra kích cỡ của các ký hiệu được định nghĩa\n" -" -s, --print-armap \t\tGồm chỉ mục cho ký hiệu từ bộ phạn kho\n" -" --size-sort \t\t_Sắp xếp_ ký hiệu theo _kích cỡ_\n" -" --special-syms \t\tGồm _ký hiệu đặc biệt_ trong dữ liệu xuất\n" -" --synthetic \t\tCũng hiển thị ký hiệu _tổng hợp_\n" -" -t, --radix=CƠ_SỞ \tDùng _cơ sở_ này để in ra giá trị ký hiệu\n" -" --target=TÊN_BFD \tGhi rõ định dạng đối tượng _đích_ là tên BFD này\n" -" -u, --undefined-only \tHiển thị _chỉ_ ký hiệu _chưa được định nghĩa_\n" -" -X 32_64 \t\t(bị bỏ qua)\n" -" @ \t\t\t\t\t Đọc các tùy chọn từ tập tin đó\n" -" -h, --help \t\tHiển thị _trợ giúp_ này\n" -" -V, --version \t\tHiển thị số thứ tự _phiên bản_ của chương trình này\n" -"\n" +" -r, --reverse-sort \t\tSắp xếp ngược\n" -#: nm.c:276 +#: nm.c:245 +#, c-format +msgid " --plugin NAME Load the specified plugin\n" +msgstr " --plugin TÊN Nạp phần bổ sung chỉ ra\n" + +#: nm.c:248 +#, c-format +msgid "" +" -S, --print-size Print size of defined symbols\n" +"\t\t -s, --print-armap Include index for symbols from archive members\n" +" --size-sort Sort symbols by size\n" +" --special-syms Include special symbols in the output\n" +" --synthetic Display synthetic symbols as well\n" +" -t, --radix=RADIX Use RADIX for printing symbol values\n" +" --target=BFDNAME Specify the target object format as BFDNAME\n" +" -u, --undefined-only Display only undefined symbols\n" +" -X 32_64 (ignored)\n" +" @FILE Read options from FILE\n" +" -h, --help Display this information\n" +" -V, --version Display this program's version number\n" +"\n" +msgstr "" +" -S, --print-size In ra kích cỡ của ký hiệu đã xác định\n" +"\t\t -s, --print-armap Bao gồm chỉ mục cho các ký hiệu từ mục của kho lưu\n" +" --size-sort Sắp xếp các ký hiệu theo kích cỡ\n" +" --special-syms Bao gồm các ký hiệu đặc biệt trong kết xuất\n" +" --synthetic Cũng hiển thị các ký hiệu tổng hợp\n" +" -t, --radix=CƠ_SỐ Dùng cơ số này để in ra các giá trị ký hiệu\n" +" --target=BFDNAME Chỉ ra định dạng đối tượng đích như BFDNAME\n" +" -u, --undefined-only Hiển thị chỉ những ký hiệu chưa xác định\n" +" -X 32_64 (bị lờ đi)\n" +" @TẬP_TIN Đọc các tuỳ chọn từ tập tin này\n" +" -h, --help Hiển thị trợ giúp này\n" +" -V, --version Hiển thị số thứ tự phiên bản của chương trình này\n" +"\n" + +#: nm.c:292 #, c-format msgid "%s: invalid radix" msgstr "%s: cơ sở không hợp lệ" -#: nm.c:300 +#: nm.c:316 #, c-format msgid "%s: invalid output format" msgstr "%s: định dạng xuất không hợp lệ" -#: nm.c:321 readelf.c:6853 readelf.c:6891 +#: nm.c:337 readelf.c:6917 readelf.c:6962 #, c-format msgid ": %d" msgstr "<đặc trưng cho bộ xử lý>: %d" -#: nm.c:323 readelf.c:6856 readelf.c:6903 +#: nm.c:339 readelf.c:6926 readelf.c:6980 #, c-format msgid ": %d" msgstr "<đặc trưng cho hệ điều hành>: %d" -#: nm.c:325 readelf.c:6858 readelf.c:6906 +#: nm.c:341 readelf.c:6929 readelf.c:6983 #, c-format msgid ": %d" msgstr ": %d" -#: nm.c:365 +#: nm.c:381 #, c-format msgid "" "\n" @@ -2521,7 +2713,7 @@ msgstr "" "\n" "Chỉ mục kho:\n" -#: nm.c:1225 +#: nm.c:1242 #, c-format msgid "" "\n" @@ -2534,7 +2726,7 @@ msgstr "" "Ký hiệu chưa được định nghĩa từ %s:\n" "\n" -#: nm.c:1227 +#: nm.c:1244 #, c-format msgid "" "\n" @@ -2547,7 +2739,7 @@ msgstr "" "Ký hiệu từ %s:\n" "\n" -#: nm.c:1229 nm.c:1280 +#: nm.c:1246 nm.c:1297 #, c-format msgid "" "Name Value Class Type Size Line Section\n" @@ -2556,16 +2748,16 @@ msgstr "" "Tên Giá trị Hạng Kiểu Cỡ Dòng Phần\n" "\n" -#: nm.c:1232 nm.c:1283 +#: nm.c:1249 nm.c:1300 #, c-format msgid "" "Name Value Class Type Size Line Section\n" "\n" msgstr "" -"Name Value Class Type Size Line Section\n" +"Tên Giá trị Hạng Kiểu Cỡ Dòng Phần\n" "\n" -#: nm.c:1276 +#: nm.c:1293 #, c-format msgid "" "\n" @@ -2575,10 +2767,10 @@ msgid "" msgstr "" "\n" "\n" -"Ký hiệu chưa được định nghĩa từUndefined symbols from %s[%s]:\n" +"Ký hiệu chưa được định nghĩa từ %s[%s]:\n" "\n" -#: nm.c:1278 +#: nm.c:1295 #, c-format msgid "" "\n" @@ -2591,44 +2783,44 @@ msgstr "" "Ký hiệu từ %s[%s]:\n" "\n" -#: nm.c:1370 +#: nm.c:1387 #, c-format msgid "Print width has not been initialized (%d)" msgstr "Chưa sở khởi độ rộng in (%d)" -#: nm.c:1595 +#: nm.c:1615 msgid "Only -X 32_64 is supported" msgstr "Chỉ hỗ trợ « -X 32_64 »" -#: nm.c:1615 +#: nm.c:1643 msgid "Using the --size-sort and --undefined-only options together" msgstr "Dùng tùy chọn cả « --size-sort » lẫn « --undefined-only » đều" -#: nm.c:1616 +#: nm.c:1644 msgid "will produce no output, since undefined symbols have no size." msgstr "sẽ không xuất gì, vì ký hiệu chưa được định nghĩa không có kích cỡ." -#: nm.c:1644 +#: nm.c:1672 #, c-format msgid "data size %ld" -msgstr "cỡ dữ liệu %ld" +msgstr "kích cỡ dữ liệu %ld" -#: objcopy.c:426 srconv.c:1723 +#: objcopy.c:463 srconv.c:1730 #, c-format msgid "Usage: %s [option(s)] in-file [out-file]\n" -msgstr "Cách sử dụng: %s [tùy_chọn...] tập_tin_nhập [tập_tin_xuất]\n" +msgstr "Sử dụng: %s [tùy_chọn...] tập_tin_nhập [tập_tin_xuất]\n" -#: objcopy.c:427 +#: objcopy.c:464 #, c-format msgid " Copies a binary file, possibly transforming it in the process\n" msgstr " Sao chép tập tin nhị phân, cũng có thể chuyển đổi nó\n" -#: objcopy.c:428 objcopy.c:524 +#: objcopy.c:465 objcopy.c:572 #, c-format msgid " The options are:\n" msgstr " Tùy chọn:\n" -#: objcopy.c:429 +#: objcopy.c:466 #, c-format msgid "" " -I --input-target Assume input file is in format \n" @@ -2681,6 +2873,8 @@ msgid "" " Set section 's properties to \n" " --add-section = Add section found in to output\n" " --rename-section =[,] Rename section to \n" +" --long-section-names {enable|disable|keep}\n" +" Handle long section names in Coff objects.\n" " --change-leading-char Force output format's leading character style\n" " --remove-leading-char Remove leading character from global symbols\n" " --reverse-bytes= Reverse bytes at a time, in output sections with content\n" @@ -2708,7 +2902,16 @@ msgid "" " --prefix-alloc-sections \n" " Add to start of every allocatable\n" " section name\n" -" -v --verbose List all object files modified\n" +" --file-alignment Set PE file alignment to \n" +" --heap [,] Set PE reserve/commit heap to /\n" +" \n" +" --image-base

Set PE image base to
\n" +" --section-alignment Set PE section alignment to \n" +" --stack [,] Set PE reserve/commit stack to /\n" +" \n" +" --subsystem [:]\n" +" Set PE subsystem to [& ]\n" +"] -v --verbose List all object files modified\n" " @ Read options from \n" " -V --version Display this program's version number\n" " -h --help Display this output\n" @@ -2791,6 +2994,8 @@ msgstr "" "\t\t\t\t_Thêm phần_ được tìm trong vào kết xuất\n" " --rename-section =[,]\n" "\t\t\t\t\t\t\t\t_Thay đổi phần_ thành \n" +"--long-section-names {enable|disable|keep}\t(bật|tắt|giữ)\n" +" Xử lý tên phần dài trong đối tượng Coff.\n" " --change-leading-char\n" "\t\t\t\t\tBuộc kiểu dáng của ký tự đi trước của định dạng xuất\n" "\t\t\t\t\t\t\t\t (_thay đổi ký tự đi trước_)\n" @@ -2835,6 +3040,15 @@ msgstr "" " --prefix-alloc-sections \n" "\t\tThêm vào đầu của mọi tên phần có thể cấp phát\n" "\t\t\t\t\t\t\t\t(_tiền tố các phần có thể cấp phát_)\n" +" --file-alignment Đặt cách sắp hàng tập tin PE thành số này\n" +" --heap [,] Đặt miền nhớ giữ lại/gài vào PE thành /\n" +" \n" +" --image-base <địa_chỉ> Đặt cơ bản ảnh PE thành địa chỉ này\n" +" --section-alignment Đặt cách sắp hàng phần PE thành số này\n" +" --stack [,] Đặt đống giữ lại/gài vào PE thành /\n" +" \n" +" --subsystem [:]\n" +" Đặt hệ thống phụ PE thành [& ]\n" " -v --verbose \t\tLiệt kê mọi tập tin đối tượng đã được sửa đổi\n" "\t\t\t\t\t\t\t\t (_chi tiết_)\n" " @ \t\t\t\t\t Đọc các tùy chọn từ tập tin đó\n" @@ -2843,17 +3057,17 @@ msgstr "" " --info \t\tLiệt kê các định dạng và kiến trúc được hỗ trợ\n" "\t\t\t\t\t\t\t\t (_thông tin_)\n" -#: objcopy.c:522 +#: objcopy.c:570 #, c-format msgid "Usage: %s in-file(s)\n" -msgstr "Cách sử dụng: %s tập_tin_nhập...\n" +msgstr "Sử dụng: %s các_tập_tin_nhập\n" -#: objcopy.c:523 +#: objcopy.c:571 #, c-format msgid " Removes symbols and sections from files\n" msgstr " Gỡ bỏ ký hiệu và phần ra tập tin\n" -#: objcopy.c:525 +#: objcopy.c:573 #, c-format msgid "" " -I --input-target= Assume input file is in format \n" @@ -2914,294 +3128,351 @@ msgstr "" "\t\t(thông tin) -o \tĐể kết _xuất_ đã tướng vào \n" " @ \t\t\t\t\t Để dữ liệu xuất đã gỡ bỏ vào tập tin đó\n" -#: objcopy.c:598 +#: objcopy.c:646 #, c-format msgid "unrecognized section flag `%s'" msgstr "không nhận ra cờ phần « %s »" -#: objcopy.c:599 +#: objcopy.c:647 #, c-format msgid "supported flags: %s" msgstr "các cờ đã hỗ trợ : %s" -#: objcopy.c:679 +#: objcopy.c:748 #, c-format msgid "cannot open '%s': %s" msgstr "không thể mở « %s »: %s" -#: objcopy.c:682 objcopy.c:2987 +#: objcopy.c:751 objcopy.c:3335 #, c-format msgid "%s: fread failed" msgstr "%s: việc fread (đọc f) bị lỗi" -#: objcopy.c:755 +#: objcopy.c:824 #, c-format msgid "%s:%d: Ignoring rubbish found on this line" msgstr "%s:%d: Đang bỏ qua rác được gặp trên dòng này" -#: objcopy.c:1033 +#: objcopy.c:1120 #, c-format msgid "not stripping symbol `%s' because it is named in a relocation" msgstr "sẽ không gỡ bỏ ký hiệu « %s » vì tên của nó được đặt trong việc định vị lại" -#: objcopy.c:1116 +#: objcopy.c:1203 #, c-format msgid "%s: Multiple redefinition of symbol \"%s\"" msgstr "%s: Ký hiệu « %s » đã được định nghĩa lại nhiều lần" -#: objcopy.c:1120 +#: objcopy.c:1207 #, c-format msgid "%s: Symbol \"%s\" is target of more than one redefinition" msgstr "%s: Ký hiệu « %s » là đích của nhiều lời định nghĩa lại" -#: objcopy.c:1148 +#: objcopy.c:1235 #, c-format msgid "couldn't open symbol redefinition file %s (error: %s)" msgstr "không thể mở tập tin định nghĩa lại ký hiệu %s (lỗi: %s)" -#: objcopy.c:1226 +#: objcopy.c:1313 #, c-format msgid "%s:%d: garbage found at end of line" msgstr "%s:%d: gặp rác tại kết thúc dòng" -#: objcopy.c:1229 +#: objcopy.c:1316 #, c-format msgid "%s:%d: missing new symbol name" msgstr "%s:%d: thiếu tên ký hiệu mới" -#: objcopy.c:1239 +#: objcopy.c:1326 #, c-format msgid "%s:%d: premature end of file" msgstr "%s:%d: gặp kết thúc tập tin quá sớm" -#: objcopy.c:1265 +#: objcopy.c:1352 #, c-format msgid "stat returns negative size for `%s'" -msgstr "việc stat (lấy các thông tin) trả gởi kích cỡ âm cho « %s »" +msgstr "việc stat (lấy trạng thái) trả lại kích cỡ âm cho « %s »" -#: objcopy.c:1277 +#: objcopy.c:1364 #, c-format msgid "copy from `%s' [unknown] to `%s' [unknown]\n" msgstr "chép từ « %s » [không rõ] sang « %s » [không rõ]\n" -#: objcopy.c:1332 +#: objcopy.c:1419 msgid "Unable to change endianness of input file(s)" -msgstr "Không thể thay đổi tính trạng cuối (endian) của (các) tập tin nhập" +msgstr "Không thể thay đổi tính trạng cuối (endian) của (các) tập tin nhập liệu" -#: objcopy.c:1341 +#: objcopy.c:1428 #, c-format msgid "copy from `%s' [%s] to `%s' [%s]\n" msgstr "chép từ « %s » [%s] sang « %s » [%s]\n" -#: objcopy.c:1383 objcopy.c:1908 +#: objcopy.c:1473 #, c-format msgid "Unable to recognise the format of the input file `%s'" msgstr "Không thể nhận diện định dạng của tập tin nhập « %s »" -#: objcopy.c:1386 +#: objcopy.c:1476 #, c-format msgid "Warning: Output file cannot represent architecture `%s'" msgstr "Cảnh báo : tập tin xuất không thể tiêu biểu kiến trúc « %s »" -#: objcopy.c:1449 +#: objcopy.c:1539 #, c-format -msgid "can't add section '%s' - it already exists!" -msgstr "không thể thêm phần « %s » vì nó đã có." +msgid "warning: file alignment (0x%s) > section alignment (0x%s)" +msgstr "cảnh báo : sự sắp hàng tập tin (0x%s) > sự sắp hàng phần (0x%s)" -#: objcopy.c:1457 +#: objcopy.c:1598 #, c-format -msgid "can't create section `%s': %s" -msgstr "không thể tạo phần « %s »: %s" +msgid "can't add section '%s'" +msgstr "không thể thêm phần « %s »" -#: objcopy.c:1593 +#: objcopy.c:1607 #, c-format -msgid "Can't fill gap after %s: %s" -msgstr "Không thể điền vào khe sau : %s: %s" +msgid "can't create section `%s'" +msgstr "không thể tạo phần « %s »" -#: objcopy.c:1618 +#: objcopy.c:1653 #, c-format -msgid "Can't add padding to %s: %s" -msgstr "Không thể thêm đệm vào %s: %s" +msgid "cannot create debug link section `%s'" +msgstr "không thể tạo phần liên kết gỡ lỗi « %s »" + +#: objcopy.c:1746 +msgid "Can't fill gap after section" +msgstr "Không thể điền vào khe đằng sau phần" -#: objcopy.c:1771 +#: objcopy.c:1770 +msgid "can't add padding" +msgstr "không thể thêm đệm" + +#: objcopy.c:1861 #, c-format -msgid "%s: error copying private BFD data: %s" -msgstr "%s: gặp lỗi khi sao chép dữ liệu BFD riêng : %s" +msgid "cannot fill debug link section `%s'" +msgstr "không thể điền vào phần liên kết gỡ lỗi « %s »" + +#: objcopy.c:1924 +msgid "error copying private BFD data" +msgstr "gặp lỗi khi sao chép dữ liệu BFD riêng" -#: objcopy.c:1784 +#: objcopy.c:1935 #, c-format msgid "this target does not support %lu alternative machine codes" msgstr "đích này không hỗ trợ %lu mã máy xen kẽ" -#: objcopy.c:1788 +#: objcopy.c:1939 msgid "treating that number as an absolute e_machine value instead" msgstr "sẽ xử lý con số đó dạng giá trị e_machine tuyệt đối thay thế" -#: objcopy.c:1792 +#: objcopy.c:1943 msgid "ignoring the alternative value" msgstr "sẽ bỏ qua giá trị xen kẽ" -#: objcopy.c:1822 objcopy.c:1852 +#: objcopy.c:1974 objcopy.c:2009 #, c-format msgid "cannot create tempdir for archive copying (error: %s)" msgstr "không thể tạo thư mục tạm thời để sao chép kho (lỗi: %s)" -#: objcopy.c:2088 -#, c-format -msgid "Multiple renames of section %s" -msgstr "Đã thay đổi tên phần %s nhiều lần" +#: objcopy.c:2070 +msgid "Unable to recognise the format of file" +msgstr "không thể nhận diện định dạng của tập tin" -#: objcopy.c:2139 -msgid "private header data" -msgstr "dữ liệu dòng đầu riêng" +#: objcopy.c:2167 +#, c-format +msgid "error: the input file '%s' is empty" +msgstr "lỗi: tập tin nhập vào « %s » còn trống" -#: objcopy.c:2147 +#: objcopy.c:2299 #, c-format -msgid "%s: error in %s: %s" -msgstr "%s: lỗi trong %s: %s" +msgid "Multiple renames of section %s" +msgstr "Đã thay đổi nhiều lần tên phần %s" -#: objcopy.c:2208 -msgid "making" -msgstr "làm" +#: objcopy.c:2350 +msgid "error in private header data" +msgstr "gặp lỗi trong dữ liệu phần đầu riêng" -#: objcopy.c:2228 -msgid "size" -msgstr "cỡ" +#: objcopy.c:2428 +msgid "failed to create output section" +msgstr "lỗi tạo phần kết xuất" -#: objcopy.c:2242 -msgid "vma" -msgstr "vma" +#: objcopy.c:2442 +msgid "failed to set size" +msgstr "lỗi đặt kích cỡ" -#: objcopy.c:2267 -msgid "alignment" -msgstr "canh lề" +#: objcopy.c:2456 +msgid "failed to set vma" +msgstr "lỗi đặt vma" -#: objcopy.c:2289 -msgid "private data" -msgstr "dữ liệu riêng" +#: objcopy.c:2481 +msgid "failed to set alignment" +msgstr "lỗi đặt cách chỉnh canh" -#: objcopy.c:2304 -#, c-format -msgid "%s: section `%s': error in %s: %s" -msgstr "%s: phần « %s »: lỗi trong %s: %s" +#: objcopy.c:2515 +msgid "failed to copy private data" +msgstr "lỗi sao chép dữ liệu riêng" + +#: objcopy.c:2597 +msgid "relocation count is negative" +msgstr "số đếm định vị lại vẫn là âm" #. User must pad the section up in order to do this. -#: objcopy.c:2429 +#: objcopy.c:2658 #, c-format msgid "cannot reverse bytes: length of section %s must be evenly divisible by %d" -msgstr "không thể đảo ngược byte: độ dài của phần %s phải có thể chia hết đều đều cho %d" +msgstr "không thể đảo ngược các byte: chiều dài của phần %s phải có thể chia hết đều đều cho %d" -#: objcopy.c:2605 -#, c-format -msgid "%s: can't create debugging section: %s" -msgstr "%s: không thể tạo phần gỡ lỗi: %s" +#: objcopy.c:2842 +msgid "can't create debugging section" +msgstr "không thể tạo phần gỡ lỗi" -#: objcopy.c:2619 +#: objcopy.c:2855 +msgid "can't set debugging section contents" +msgstr "không thể đặt nội dung phần gỡ lỗi" + +#: objcopy.c:2863 #, c-format -msgid "%s: can't set debugging section contents: %s" -msgstr "%s: không thể đặt nội dung phần gỡ lỗi: %s" +msgid "don't know how to write debugging information for %s" +msgstr "không biết cách ghi thông tin gỡ lỗi cho %s" + +#: objcopy.c:3005 +msgid "could not create temporary file to hold stripped copy" +msgstr "không thể tạo tập tin tạm thời để chứa bản sao bị tước" -#: objcopy.c:2628 +#: objcopy.c:3077 #, c-format -msgid "%s: don't know how to write debugging information for %s" -msgstr "%s: không rõ cách ghi thông tin gỡ lỗi cho %s" +msgid "%s: bad version in PE subsystem" +msgstr "%s: gặp phiên bản sai trong hệ thống phụ PE" -#: objcopy.c:2769 +#: objcopy.c:3107 #, c-format -msgid "could not create temporary file to hold stripped copy of '%s'" -msgstr "không thể tạo tập tin tạm thời để giữ bản sao bị tước của « %s »" +msgid "unknown PE subsystem: %s" +msgstr "không rõ hệ thống phụ PE: %s" -#: objcopy.c:2819 +#: objcopy.c:3167 msgid "byte number must be non-negative" -msgstr "số byte phải là không âm" +msgstr "số byte phải là khác âm" -#: objcopy.c:2829 +#: objcopy.c:3177 msgid "interleave must be positive" msgstr "chen vào phải là dương" -#: objcopy.c:2849 objcopy.c:2857 +#: objcopy.c:3197 objcopy.c:3205 #, c-format msgid "%s both copied and removed" -msgstr "%s cả được sao chép lẫn bị gỡ bỏ đều" +msgstr "%s cả hai được sao chép và bị gỡ bỏ" -#: objcopy.c:2958 objcopy.c:3032 objcopy.c:3132 objcopy.c:3163 objcopy.c:3187 -#: objcopy.c:3191 objcopy.c:3211 +#: objcopy.c:3306 objcopy.c:3380 objcopy.c:3480 objcopy.c:3511 objcopy.c:3535 +#: objcopy.c:3539 objcopy.c:3559 #, c-format msgid "bad format for %s" msgstr "định dạng sai cho %s" -#: objcopy.c:2982 +#: objcopy.c:3330 #, c-format msgid "cannot open: %s: %s" msgstr "không thể mở : %s: %s" -#: objcopy.c:3101 +#: objcopy.c:3449 #, c-format msgid "Warning: truncating gap-fill from 0x%s to 0x%x" msgstr "Cảnh báo : đang cắt xén điền-khe từ 0x%s thành 0x%x" -#: objcopy.c:3269 +#: objcopy.c:3610 +#, c-format +msgid "unknown long section names option '%s'" +msgstr "không rõ tuỳ chọn tên phần dài « %s »" + +#: objcopy.c:3628 msgid "unable to parse alternative machine code" -msgstr "không thể dán mã máy xen kẽ" +msgstr "không thể phân tích cú pháp của mã máy xen kẽ" -#: objcopy.c:3314 +#: objcopy.c:3673 msgid "number of bytes to reverse must be positive and even" -msgstr "số byte cần đảo ngược phải là số dương chẵn" +msgstr "số byte cần đảo ngược phải là một số dương chẵn" -#: objcopy.c:3317 +#: objcopy.c:3676 #, c-format msgid "Warning: ignoring previous --reverse-bytes value of %d" msgstr "Cảnh báo : sẽ bỏ qua giá trị « --reverse-bytes » trước %d" -#: objcopy.c:3345 +#: objcopy.c:3691 +#, c-format +msgid "%s: invalid reserve value for --heap" +msgstr "%s: sai đặt giá trị giữ lại cho « --heap »" + +#: objcopy.c:3697 +#, c-format +msgid "%s: invalid commit value for --heap" +msgstr "%s: sai đặt giá trị gài vào cho « --heap »" + +#: objcopy.c:3722 +#, c-format +msgid "%s: invalid reserve value for --stack" +msgstr "%s: sai đặt giá trị giữ lại cho « --stack »" + +#: objcopy.c:3728 +#, c-format +msgid "%s: invalid commit value for --stack" +msgstr "%s: sai đặt giá trị gài vào cho « --stack »" + +#: objcopy.c:3757 msgid "byte number must be less than interleave" -msgstr "số byte phải là ít hơn chen vào" +msgstr "số byte phải ít hơn chen vào" -#: objcopy.c:3375 +#: objcopy.c:3784 +#, c-format +msgid "unknown input EFI target: %s" +msgstr "không rõ đích EFI nhập vào : %s" + +#: objcopy.c:3815 +#, c-format +msgid "unknown output EFI target: %s" +msgstr "không rõ đích EFI kết xuất : %s" + +#: objcopy.c:3840 #, c-format msgid "architecture %s unknown" msgstr "không rõ kiến trúc %s" -#: objcopy.c:3379 +#: objcopy.c:3844 msgid "Warning: input target 'binary' required for binary architecture parameter." msgstr "Cảnh báo : đích nhập « binary » (nhị phân) cần thiết cho tham số kiến trúc nhị phân." -#: objcopy.c:3380 +#: objcopy.c:3845 #, c-format msgid " Argument %s ignored" msgstr " Đối số %s bị bỏ qua" -#: objcopy.c:3386 +#: objcopy.c:3851 #, c-format msgid "warning: could not locate '%s'. System error message: %s" msgstr "cảnh báo : không thể định vị « %s ». Thông điệp lỗi hệ thống: %s" -#: objcopy.c:3397 +#: objcopy.c:3862 #, c-format msgid "warning: could not create temporary file whilst copying '%s', (error: %s)" msgstr "cảnh báo : không thể tạo tập tin tạm thời trong khi sao chép « %s » (lỗi: %s)" -#: objcopy.c:3424 objcopy.c:3438 +#: objcopy.c:3890 objcopy.c:3904 #, c-format msgid "%s %s%c0x%s never used" msgstr "%s %s%c0x%s chưa bao giờ dùng" -#: objdump.c:176 +#: objdump.c:187 #, c-format msgid "Usage: %s \n" -msgstr "Cách sử dụng: %s \n" +msgstr "Sử dụng: %s \n" -#: objdump.c:177 +#: objdump.c:188 #, c-format msgid " Display information from object .\n" -msgstr " Hiển thị thông tin từ đối tượng.\n" +msgstr " Hiển thị thông tin từ các đối tượng.\n" -#: objdump.c:178 +#: objdump.c:189 #, c-format msgid " At least one of the following switches must be given:\n" msgstr " Phải đưa ra ít nhất một của những cái chuyển theo sau :\n" -#: objdump.c:179 +#: objdump.c:190 #, c-format msgid "" " -a, --archive-headers Display archive header information\n" @@ -3216,7 +3487,9 @@ msgid "" " -g, --debugging Display debug information in object file\n" " -e, --debugging-tags Display debug information using ctags style\n" " -G, --stabs Display (in raw form) any STABS info in the file\n" -" -W, --dwarf Display DWARF info in the file\n" +" -W[lLiaprmfFsoR] or\n" +" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Display DWARF info in the file\n" " -t, --syms Display the contents of the symbol table(s)\n" " -T, --dynamic-syms Display the contents of the dynamic symbol table\n" " -r, --reloc Display the relocation entries in the file\n" @@ -3244,6 +3517,9 @@ msgstr "" " -e, --debugging-tags Hiển thị thông tin gỡ lỗi, dùng kiểu dáng ctags\n" "\t\t(các thẻ gỡ lỗi)\n" " -G, --stabs Hiển thị (dạng thô) thông tin STABS nào trong thông tin\n" +"-W[lLiaprmfFsoR] hoặc\n" +" --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" Hiển thị thông tin DWARF trong tập tin\n" " -t, --syms \t\t\t Hiển thị nội dung của các bảng ký hiệu\n" "\t\t(các ký hiệu [viết tắt])\n" " -T, --dynamic-syms \t\tHiển thị nội dung của bảng ký hiệu động\n" @@ -3259,16 +3535,16 @@ msgstr "" "\t\t(thông tin [viết tắt])\n" " -H, --help \tHiển thị _trợ giúp_ này\n" -#: objdump.c:204 +#: objdump.c:217 #, c-format msgid "" "\n" " The following switches are optional:\n" msgstr "" "\n" -" Những cái chuyển theo đây là tùy chọn:\n" +" Những cái chuyển theo đây vẫn tùy chọn:\n" -#: objdump.c:205 +#: objdump.c:218 #, c-format msgid "" " -b, --target=BFDNAME Specify the target object format as BFDNAME\n" @@ -3280,6 +3556,7 @@ msgid "" " --file-start-context Include context from start of file (with -S)\n" " -I, --include=DIR Add DIR to search list for source files\n" " -l, --line-numbers Include line numbers and filenames in output\n" +" -F, --file-offsets Include file offsets when displaying information\n" " -C, --demangle[=STYLE] Decode mangled/processed symbol names\n" " The STYLE, if specified, can be `auto', `gnu',\n" " `lucid', `arm', `hp', `edg', `gnu-v3', `java'\n" @@ -3290,8 +3567,11 @@ msgid "" " --stop-address=ADDR Only process data whose address is <= ADDR\n" " --prefix-addresses Print complete address alongside disassembly\n" " --[no-]show-raw-insn Display hex alongside symbolic disassembly\n" +" --insn-width=WIDTH Display WIDTH bytes on a signle line for -d\n" " --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n" " --special-syms Include special symbols in symbol dumps\n" +" --prefix=PREFIX Add PREFIX to absolute paths for -S\n" +" --prefix-strip=LEVEL Strip initial directory names for -S\n" "\n" msgstr "" " -b, --target=TÊN_BFD \tGhi rõ định dạng đối tượng _đích_ là TÊN_BFD\n" @@ -3310,18 +3590,19 @@ msgstr "" "\t\t(bao gồm)\n" " -l, --line-numbers\n" "\t\tGồm các _số thứ tự dòng_ và tên tập tin trong kết xuất\n" +" -F, --file-offsets Bao gồm các hiệu số tập tin khi hiển thị thông tin\n" " -C, --demangle[=KIỂU_DÁNG] giải mã các tên ký hiệu đã rối/xử lý\n" "\t\t(tháo gỡ)\n" "\t\tKIỂU_DÁNG, nếu đã ghi rõ, có thể là:\n" "\t\t • auto\t\ttự động\n" "\t\t • gnu\n" -" \t • lucid\t\trõ ràng\n" +"\t\t • lucid\t\trõ ràng\n" "\t\t • arm\n" "\t\t • hp\n" "\t\t • edg\n" "\t\t • gnu-v3\n" " \t\t • java\n" -" \t • gnat\n" +"\t\t • gnat\n" " -w, --wide \t\tĐịnh dạng dữ liệu xuất chiếm hơn 80 cột\n" "\t\t(rộng)\n" " -z, --disassemble-zeroes \t\tĐừng nhảy qua khối ố không khi rã\n" @@ -3335,55 +3616,67 @@ msgstr "" "hông] hiển thị câu lệnh thô)\n" " --adjust-vma=HIỆU_SỐ\n" "\t\tThêm HIỆU_SỐ vào mọi địa chỉ phần đã hiển thị\n" -"\t\t(điều chỉnh vma) --special-syms Gồm _các ký hiệu đặc biệt_ trong việc đổ ký hiệu\n" +"\t\t(điều chỉnh vma)\n" +" --special-syms Gồm _các ký hiệu đặc biệt_ trong việc đổ ký hiệu\n" +" --prefix=TIỀN_TỐ Thêm tiền tố này vào đường dẫn tương đối cho « -S »\n" +" --prefix-strip=CẤP Tước tên thư mục đầu tiên cho « -S »\n" "\n" -#: objdump.c:387 +#: objdump.c:433 #, c-format msgid "Sections:\n" msgstr "Phần:\n" -#: objdump.c:390 objdump.c:394 +#: objdump.c:436 objdump.c:440 #, c-format msgid "Idx Name Size VMA LMA File off Algn" -msgstr "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Tên Cỡ VMA LMA Tập tin ra Canh" -#: objdump.c:396 +#: objdump.c:442 #, c-format msgid "Idx Name Size VMA LMA File off Algn" -msgstr "Idx Name Size VMA LMA File off Algn" +msgstr "Idx Tên Cỡ VMA LMA Tập tin ra Canh" -#: objdump.c:400 +#: objdump.c:446 #, c-format msgid " Flags" msgstr " Cờ" -#: objdump.c:402 +#: objdump.c:448 #, c-format msgid " Pg" msgstr " Tr" -#: objdump.c:445 +#: objdump.c:491 #, c-format msgid "%s: not a dynamic object" msgstr "%s không phải là môt đối tượng động" -#: objdump.c:1778 +#: objdump.c:916 objdump.c:940 #, c-format -msgid "Disassembly of section %s:\n" -msgstr "Việc rã phần %s:\n" +msgid " (File Offset: 0x%lx)" +msgstr " (Hiệu tập tin: 0x%lx)" -#: objdump.c:1940 +#: objdump.c:1885 +#, c-format +msgid "" +"\n" +"Disassembly of section %s:\n" +msgstr "" +"\n" +"Việc rã phần %s:\n" + +#: objdump.c:2058 #, c-format msgid "Can't use supplied machine %s" msgstr "Không thể sử dụng máy đã cung cấp %s" -#: objdump.c:1959 +#: objdump.c:2077 #, c-format msgid "Can't disassemble for architecture %s\n" msgstr "Không thể rã cho kiến trúc %s\n" -#: objdump.c:2064 +#: objdump.c:2168 #, c-format msgid "" "\n" @@ -3392,7 +3685,16 @@ msgstr "" "\n" "Không thể lấy nội dung cho phần « %s ».\n" -#: objdump.c:2201 +#: objdump.c:2179 +#, c-format +msgid "" +"\n" +"Can't uncompress section '%s'.\n" +msgstr "" +"\n" +"Không thể giải nén phần « %s ».\n" + +#: objdump.c:2307 #, c-format msgid "" "No %s section present\n" @@ -3401,12 +3703,12 @@ msgstr "" "Không có phần %s ở\n" "\n" -#: objdump.c:2210 +#: objdump.c:2316 #, c-format msgid "Reading %s section of %s failed: %s" msgstr "Việc đọc phần %s của %s bị lỗi: %s" -#: objdump.c:2254 +#: objdump.c:2360 #, c-format msgid "" "Contents of %s section:\n" @@ -3415,17 +3717,17 @@ msgstr "" "Nội dung phần %s\n" "\n" -#: objdump.c:2381 +#: objdump.c:2491 #, c-format msgid "architecture: %s, " msgstr "kiến trúc: %s, " -#: objdump.c:2384 +#: objdump.c:2494 #, c-format msgid "flags 0x%08x:\n" msgstr "cờ 0x%08x:\n" -#: objdump.c:2398 +#: objdump.c:2508 #, c-format msgid "" "\n" @@ -3434,27 +3736,32 @@ msgstr "" "\n" "địa chỉ đầu 0x" -#: objdump.c:2438 +#: objdump.c:2571 +#, c-format +msgid "Contents of section %s:" +msgstr "Nội dung của phần %s:" + +#: objdump.c:2573 #, c-format -msgid "Contents of section %s:\n" -msgstr "Nội dung phần %s:\n" +msgid " (Starting at file offset: 0x%lx)" +msgstr " (Bắt đầu ở hiệu tập tin: 0x%lx)" -#: objdump.c:2563 +#: objdump.c:2680 #, c-format msgid "no symbols\n" msgstr "không có ký hiệu\n" -#: objdump.c:2570 +#: objdump.c:2687 #, c-format msgid "no information for symbol number %ld\n" msgstr "không có thông tin cho ký hiệu số %ld\n" -#: objdump.c:2573 +#: objdump.c:2690 #, c-format msgid "could not determine the type of symbol number %ld\n" msgstr "không thể quyết định kiểu ký hiệu số %ld\n" -#: objdump.c:2850 +#: objdump.c:2970 #, c-format msgid "" "\n" @@ -3463,28 +3770,44 @@ msgstr "" "\n" "%s: định dạng tập tin %s\n" -#: objdump.c:2908 +#: objdump.c:3028 #, c-format msgid "%s: printing debugging information failed" msgstr "%s: việc in ra thông tin gỡ lỗi bị lỗi" -#: objdump.c:3002 +#: objdump.c:3128 #, c-format msgid "In archive %s:\n" msgstr "Trong kho %s\n" -#: objdump.c:3124 +#: objdump.c:3244 +msgid "error: the start address should be before the end address" +msgstr "lỗi: địa chỉ đầu nên nằm trước địa chỉ cuối" + +#: objdump.c:3249 +msgid "error: the stop address should be after the start address" +msgstr "lỗi: địa chỉ cuối nên nằm sau địa chỉ đầu" + +#: objdump.c:3261 +msgid "error: prefix strip must be non-negative" +msgstr "lỗi: việc tước tiền tố phải khác âm" + +#: objdump.c:3266 +msgid "error: instruction width must be positive" +msgstr "lỗi: chiều dài chỉ dẫn phải là dương" + +#: objdump.c:3275 msgid "unrecognized -E option" msgstr "không nhận ra tùy chọn « -E »" -#: objdump.c:3135 +#: objdump.c:3286 #, c-format msgid "unrecognized --endian type `%s'" msgstr "không nhận ra kiểu tính trạng cuối (endian) « %s »" -#: rclex.c:196 +#: rclex.c:197 msgid "invalid value specified for pragma code_page.\n" -msgstr "giá trị không hợp lệ được xác định cho lệnh mã nguồn điều khiển trình biên dịch « code_page ».\n" +msgstr "giá trị không hợp lệ được xác định cho lệnh mã nguồn điều khiển trình biên dịch « code_page » (trang mã).\n" #: rdcoff.c:198 #, c-format @@ -3511,191 +3834,190 @@ msgstr "%ld: « .bf » không có hàm đi trước" msgid "%ld: unexpected .ef\n" msgstr "%ld: « .ef » bất thường\n" -#: rddbg.c:86 +#: rddbg.c:88 #, c-format msgid "%s: no recognized debugging information" msgstr "%s: không có thông tin gỡ lỗi đã nhận ra" -#: rddbg.c:400 +#: rddbg.c:402 #, c-format msgid "Last stabs entries before error:\n" -msgstr "Những mục nhập stabs cuối cùng trước lỗi:\n" +msgstr "Những mục stabs được nhập vào trước khi gặp lỗi:\n" -#: readelf.c:319 +#: readelf.c:297 #, c-format msgid "Unable to seek to 0x%lx for %s\n" msgstr "Không thể nhảy tới 0x%lx tìm %s\n" -#: readelf.c:334 +#: readelf.c:312 #, c-format msgid "Out of memory allocating 0x%lx bytes for %s\n" -msgstr "Hết bộ nhớ khi cấp phát 0x%lx byte cho %s\n" +msgstr "Không đủ bộ nhớ khi cấp phát 0x%lx byte cho %s\n" -#: readelf.c:344 +#: readelf.c:322 #, c-format msgid "Unable to read in 0x%lx bytes of %s\n" -msgstr "Không thể đọc nhập 0x%lx byte của %s\n" +msgstr "Không thể đọc vào 0x%lx byte của %s\n" -#: readelf.c:683 +#: readelf.c:640 msgid "Don't know about relocations on this machine architecture\n" msgstr "Không rõ về việc định vị lại trên kiến trúc máy này\n" -#: readelf.c:703 readelf.c:731 readelf.c:775 readelf.c:803 +#: readelf.c:660 readelf.c:688 readelf.c:754 readelf.c:782 msgid "relocs" msgstr "đ.v. lại" -#: readelf.c:714 readelf.c:742 readelf.c:786 readelf.c:814 +#: readelf.c:671 readelf.c:699 readelf.c:765 readelf.c:793 msgid "out of memory parsing relocs\n" -msgstr "hết bộ nhớ khi phân tách các việc định vị lại\n" +msgstr "không đủ bộ nhớ khi phân tích cú pháp của các việc định vị lại\n" -#: readelf.c:868 +#: readelf.c:898 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name + Addend\n" msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu + gì thêm\n" -#: readelf.c:870 +#: readelf.c:900 #, c-format msgid " Offset Info Type Sym.Value Sym. Name + Addend\n" -msgstr " HIệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu + gì thêm\n" +msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu + gì thêm\n" -#: readelf.c:875 +#: readelf.c:905 #, c-format msgid " Offset Info Type Sym. Value Symbol's Name\n" -msgstr " HIệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu\n" +msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu\n" -#: readelf.c:877 +#: readelf.c:907 #, c-format msgid " Offset Info Type Sym.Value Sym. Name\n" msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu\n" -#: readelf.c:885 +#: readelf.c:915 #, c-format msgid " Offset Info Type Symbol's Value Symbol's Name + Addend\n" -msgstr " Offset Info Type Symbol's Value Symbol's Name + Addend\n" +msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu + Phần cộng\n" -#: readelf.c:887 +#: readelf.c:917 #, c-format msgid " Offset Info Type Sym. Value Sym. Name + Addend\n" -msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu + gì thêm\n" +msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu + Phần cộng\n" -#: readelf.c:892 +#: readelf.c:922 #, c-format msgid " Offset Info Type Symbol's Value Symbol's Name\n" -msgstr " Offset Info Type Symbol's Value Symbol's Name\n" +msgstr " Hiệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu\n" -#: readelf.c:894 +#: readelf.c:924 #, c-format msgid " Offset Info Type Sym. Value Sym. Name\n" msgstr " HIệu Tin Kiểu Giá trị ký hiệu Tên ký hiệu\n" -#: readelf.c:1198 readelf.c:1200 readelf.c:1318 readelf.c:1320 readelf.c:1329 -#: readelf.c:1331 +#: readelf.c:1211 readelf.c:1370 readelf.c:1378 #, c-format msgid "unrecognized: %-7lx" msgstr "không nhận ra: %-7lx" -#: readelf.c:1226 +#: readelf.c:1236 #, c-format msgid "" msgstr "" -#: readelf.c:1288 +#: readelf.c:1328 #, c-format msgid "" msgstr "" -#: readelf.c:1290 +#: readelf.c:1330 #, c-format msgid "" msgstr "" -#: readelf.c:1625 +#: readelf.c:1703 #, c-format msgid "Processor Specific: %lx" msgstr "Đặc trưng cho bộ xử lý: %lx" -#: readelf.c:1646 +#: readelf.c:1727 #, c-format msgid "Operating System specific: %lx" msgstr "Đặc trưng cho Hệ điều hành: %lx" -#: readelf.c:1650 readelf.c:2521 +#: readelf.c:1731 readelf.c:2613 #, c-format msgid ": %lx" msgstr ": %lx" -#: readelf.c:1663 +#: readelf.c:1744 msgid "NONE (None)" msgstr "KHÔNG CÓ (Không có)" -#: readelf.c:1664 +#: readelf.c:1745 msgid "REL (Relocatable file)" -msgstr "REL (Tập tin có thể _định vị lại_)" +msgstr "REL (Tập tin có thể định vị lại)" -#: readelf.c:1665 +#: readelf.c:1746 msgid "EXEC (Executable file)" -msgstr "EXEC (Executable file)" +msgstr "EXEC (Tập tin có thể thực hiện)" -#: readelf.c:1666 +#: readelf.c:1747 msgid "DYN (Shared object file)" -msgstr "DYN (Shared object file)" +msgstr "DYN (Tập tin đối tượng dùng chung)" -#: readelf.c:1667 +#: readelf.c:1748 msgid "CORE (Core file)" -msgstr "CORE (Core file)" +msgstr "CORE (Tập tin lõi)" -#: readelf.c:1671 +#: readelf.c:1752 #, c-format msgid "Processor Specific: (%x)" msgstr "Đặc trưng cho bộ xử lý: (%x)" -#: readelf.c:1673 +#: readelf.c:1754 #, c-format msgid "OS Specific: (%x)" msgstr "Đặc trưng cho HĐH: (%x)" -#: readelf.c:1675 readelf.c:2714 +#: readelf.c:1756 readelf.c:2830 #, c-format msgid ": %x" msgstr ": %x" -#: readelf.c:1687 +#: readelf.c:1768 msgid "None" msgstr "Không có" -#: readelf.c:1791 +#: readelf.c:1879 #, c-format msgid ": 0x%x" msgstr ": 0x%x" -#: readelf.c:2048 +#: readelf.c:2136 msgid "unknown" msgstr "không rõ" -#: readelf.c:2049 +#: readelf.c:2137 msgid "unknown mac" msgstr "không rõ mac" -#: readelf.c:2358 +#: readelf.c:2450 msgid "Standalone App" msgstr "Ứng dụng Độc lập" -#: readelf.c:2361 readelf.c:3145 readelf.c:3161 +#: readelf.c:2453 readelf.c:3159 readelf.c:3175 #, c-format msgid "" msgstr "" -#: readelf.c:2759 +#: readelf.c:2878 #, c-format msgid "Usage: readelf elf-file(s)\n" -msgstr "Cách sử dụng: readelf tập_tin_elf...\n" +msgstr "Sử dụng: readelf tập_tin_elf...\n" -#: readelf.c:2760 +#: readelf.c:2879 #, c-format msgid " Display information about the contents of ELF format files\n" msgstr " Hiển thị thông tin về nội dung tập tin định dạng ELF\n" -#: readelf.c:2761 +#: readelf.c:2880 #, c-format msgid "" " Options are:\n" @@ -3716,10 +4038,16 @@ msgid "" " -d --dynamic Display the dynamic section (if present)\n" " -V --version-info Display the version sections (if present)\n" " -A --arch-specific Display architecture specific information (if any).\n" +" -c --archive-index Display the symbol/file index in an archive\n" " -D --use-dynamic Use the dynamic section info when displaying symbols\n" -" -x --hex-dump= Dump the contents of section \n" -" -w[liaprmfFsoR] or\n" -" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" -x --hex-dump=\n" +" Dump the contents of section as bytes\n" +" -p --string-dump=\n" +" Dump the contents of section as strings\n" +" -R --relocated-dump=\n" +" Dump the contents of section as relocated bytes\n" +" -w[lLiaprmfFsoR] or\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" " Display the contents of DWARF2 debug sections\n" msgstr "" " Tùy chọn:\n" @@ -3747,33 +4075,37 @@ msgstr "" " -V --version-info \t\tHiển thị các phần phiên bản (nếu có)\n" "\t(thông tin phiên bản)\n" " -A --arch-specific Hiển thị thông tin _đặc trưng cho kiến trúc_ (nếu có)\n" +" -c --archive-index Hiển thị chỉ mục ký hiệu/tập tin trong một kho\n" " -D --use-dynamic _Dùng_ thông tin phần _động_ khi hiển thị ký hiệu\n" -" -x --hex-dump= \t\t\tĐổ nội dung phần \n" -"\t(đổ thập lục)\n" -" -w[liaprmfFsoR] or\n" -" --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" -"\t[line\t\t\tdòng\n" -"\tinfo\t\t\tthông tin\n" -"\tabbrev.\t\tviết tắt\n" -"\tpubnames\tcác tên công\n" -"\taranges\t\tcác phạm vị a\n" -"\tmacro\t\tbộ lệnh\n" -"\tframes\t\tcác khung\n" -"\tstr\t\t\tchuỗi\n" -"\tloc\t\t\tđịnh vị\n" -"\tRanges\t\tCác phạm vị]\n" +" -x --hex-dump= \t\t\tĐổ nội dung của phần (dạng byte)\n" +" -p --string-dump=\tĐổ nội dung của phần (dạng chuỗi)\n" +" -R --relocated-dump=\n" +" Đổ nội dung của phần (dạng byte đã định vị lại)\n" +" -w[liaprmfFsoR] hay\n" +" --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n" +" • rawline\t\tdòng thô\n" +" • decodeline\t\tgiải mã dòng\n" +" • info\t\t\tthông tin\n" +" • abbrev\t\t\tviết tắt\n" +" • pubnames\t\txuất các tên\n" +" • aranges\t\ta các phạm vi\n" +" • macro\t\t\tvĩ lệnh\n" +" • frames\t\t\tcác khung\n" +" • str\t\t\tchuỗi\n" +" • loc\t\t\tđịnh vị\n" +" • Ranges\t\tcác phạm vi\n" " Hiển thị nội dung các phần gỡ lỗi kiểu DWARF2\n" -#: readelf.c:2785 +#: readelf.c:2910 #, c-format msgid "" -" -i --instruction-dump=\n" -" Disassemble the contents of section \n" +" -i --instruction-dump=\n" +" Disassemble the contents of section \n" msgstr "" -" -i --instruction-dump=\t\tTháo ra nội dung phần \n" -"\t(đổ câu lệnh)\n" +" -i --instruction-dump=\n" +" Tháo ra nội dung của phần \n" -#: readelf.c:2789 +#: readelf.c:2914 #, c-format msgid "" " -I --histogram Display histogram of bucket list lengths\n" @@ -3789,96 +4121,91 @@ msgstr "" " -H --help \tHiển thị _trợ giúp_ này\n" " -v --version \tHiển thị số thứ tự _phiên bản_ của readelf\n" -#: readelf.c:2817 readelf.c:2845 readelf.c:2849 readelf.c:9898 +#: readelf.c:2942 readelf.c:2970 readelf.c:2974 readelf.c:11443 msgid "Out of memory allocating dump request table.\n" -msgstr "Hết bộ nhớ khi cấp phát bảng yêu cầu đổ.\n" +msgstr "Không đủ bộ nhớ khi cấp phát bảng yêu cầu đổ.\n" -#: readelf.c:3011 readelf.c:3079 -#, c-format -msgid "Unrecognized debug option '%s'\n" -msgstr "Không nhận diện tùy chọn gỡ lỗi « %s »\n" - -#: readelf.c:3115 +#: readelf.c:3129 #, c-format msgid "Invalid option '-%c'\n" msgstr "Tùy chọn không hợp lệ « -%c »\n" -#: readelf.c:3129 +#: readelf.c:3143 msgid "Nothing to do.\n" msgstr "Không có gì cần làm.\n" -#: readelf.c:3141 readelf.c:3157 readelf.c:6399 +#: readelf.c:3155 readelf.c:3171 readelf.c:6440 msgid "none" msgstr "không có" -#: readelf.c:3158 +#: readelf.c:3172 msgid "2's complement, little endian" msgstr "phần bù của 2, tính trạng cuối nhỏ" -#: readelf.c:3159 +#: readelf.c:3173 msgid "2's complement, big endian" msgstr "phần bù của 2, tính trạng cuối lớn" -#: readelf.c:3177 +#: readelf.c:3191 msgid "Not an ELF file - it has the wrong magic bytes at the start\n" msgstr "Không phải là tập tin ELF — có những byte ma thuật không đúng tại đầu nó.\n" -#: readelf.c:3185 +#: readelf.c:3201 #, c-format msgid "ELF Header:\n" msgstr "Dòng đầu ELF:\n" -#: readelf.c:3186 +#: readelf.c:3202 #, c-format msgid " Magic: " msgstr " Ma thuật: " -#: readelf.c:3190 +#: readelf.c:3206 #, c-format msgid " Class: %s\n" -msgstr " Class: %s\n" +msgstr " Hạng: %s\n" -#: readelf.c:3192 +#: readelf.c:3208 #, c-format msgid " Data: %s\n" -msgstr " Data: %s\n" +msgstr " Dữ liệu: %s\n" -#: readelf.c:3194 +#: readelf.c:3210 #, c-format msgid " Version: %d %s\n" -msgstr " Version: %d %s\n" +msgstr " Phiên bản: %d %s\n" -#: readelf.c:3201 +#: readelf.c:3217 #, c-format msgid " OS/ABI: %s\n" msgstr " OS/ABI: %s\n" -#: readelf.c:3203 +#: readelf.c:3219 #, c-format msgid " ABI Version: %d\n" msgstr " Phiên bản ABI: %d\n" -#: readelf.c:3205 +#: readelf.c:3221 #, c-format msgid " Type: %s\n" -msgstr " Type: %s\n" +msgstr " Kiểu : %s\n" -#: readelf.c:3207 +#: readelf.c:3223 #, c-format msgid " Machine: %s\n" -msgstr " Machine: %s\n" +msgstr " Máy: %s\n" -#: readelf.c:3209 +#: readelf.c:3225 #, c-format msgid " Version: 0x%lx\n" -msgstr " Version: 0x%lx\n" +msgstr " Phiên bản: 0x%lx\n" -#: readelf.c:3212 +#: readelf.c:3228 #, c-format msgid " Entry point address: " msgstr " Địa chỉ điểm vào : " -#: readelf.c:3214 +#: readelf.c:3230 #, c-format msgid "" "\n" @@ -3887,7 +4214,7 @@ msgstr "" "\n" " Điểm đầu các dòng đầu chương trình: " -#: readelf.c:3216 +#: readelf.c:3232 #, c-format msgid "" " (bytes into file)\n" @@ -3896,59 +4223,59 @@ msgstr "" " (byte vào tập tin)\n" " Đầu các dòng đầu phần: " -#: readelf.c:3218 +#: readelf.c:3234 #, c-format msgid " (bytes into file)\n" msgstr " (byte vào tập tin)\n" -#: readelf.c:3220 +#: readelf.c:3236 #, c-format msgid " Flags: 0x%lx%s\n" -msgstr " Flags: 0x%lx%s\n" +msgstr " Cờ : 0x%lx%s\n" -#: readelf.c:3223 +#: readelf.c:3239 #, c-format msgid " Size of this header: %ld (bytes)\n" -msgstr " Cỡ phần này: %ld (byte)\n" +msgstr " Kích cỡ phần này: %ld (byte)\n" -#: readelf.c:3225 +#: readelf.c:3241 #, c-format msgid " Size of program headers: %ld (bytes)\n" msgstr " Cỡ các dòng đầu chương trình: %ld (byte)\n" -#: readelf.c:3227 +#: readelf.c:3243 #, c-format msgid " Number of program headers: %ld\n" msgstr " Số dòng đầu chương trình: %ld\n" -#: readelf.c:3229 +#: readelf.c:3245 #, c-format msgid " Size of section headers: %ld (bytes)\n" msgstr " Cỡ các dòng đầu phần: %ld (byte)\n" -#: readelf.c:3231 +#: readelf.c:3247 #, c-format msgid " Number of section headers: %ld" msgstr " Số dòng đầu phần: %ld" -#: readelf.c:3236 +#: readelf.c:3252 #, c-format msgid " Section header string table index: %ld" msgstr " Chỉ mục bảng chuỗi dòng đầu phần: %ld" -#: readelf.c:3277 readelf.c:3310 +#: readelf.c:3289 readelf.c:3322 msgid "program headers" msgstr "các dòng đầu chương trình" -#: 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 +#: readelf.c:3360 readelf.c:3658 readelf.c:3699 readelf.c:3758 readelf.c:3823 +#: readelf.c:4494 readelf.c:4518 readelf.c:5770 readelf.c:5815 readelf.c:6014 +#: readelf.c:7087 readelf.c:7101 readelf.c:7611 readelf.c:7627 readelf.c:7670 +#: readelf.c:7695 readelf.c:9642 readelf.c:9834 readelf.c:10362 +#: readelf.c:10736 readelf.c:10750 readelf.c:11109 msgid "Out of memory\n" -msgstr "Hết bộ nhớ\n" +msgstr "Không đủ bộ nhớ\n" -#: readelf.c:3375 +#: readelf.c:3387 #, c-format msgid "" "\n" @@ -3957,7 +4284,7 @@ msgstr "" "\n" "Không có dòng đầu chương trình trong tập tin này.\n" -#: readelf.c:3381 +#: readelf.c:3393 #, c-format msgid "" "\n" @@ -3966,12 +4293,12 @@ msgstr "" "\n" "Kiểu tập tin Elf là %s\n" -#: readelf.c:3382 +#: readelf.c:3394 #, c-format msgid "Entry point " msgstr "Điểm vào " -#: readelf.c:3384 +#: readelf.c:3396 #, c-format msgid "" "\n" @@ -3980,7 +4307,7 @@ msgstr "" "\n" "Có %d dòng đầu chương trình, bắt đầu tại hiệu số" -#: readelf.c:3396 readelf.c:3398 +#: readelf.c:3408 readelf.c:3410 #, c-format msgid "" "\n" @@ -3989,55 +4316,55 @@ msgstr "" "\n" "Dòng đầu chương trình:\n" -#: readelf.c:3402 +#: readelf.c:3414 #, c-format msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " Kiểu HIệu ĐChỉẢo ĐChỉVật CỡTập CỡNhớ Cờ Cạnh lề\n" +msgstr " Kiểu Hiệu Địa Chỉ Ảo Địa Chỉ Vật lý CỡTập CỡNhớ Cờ Canh\n" -#: readelf.c:3405 +#: readelf.c:3417 #, c-format msgid " Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n" -msgstr " Kiểu HIệu Địa Chỉ Ảo Địa Chỉ Vật lý CỡTập CỡNhớ Cờ Cạnh lề\n" +msgstr " Kiểu Hiệu Địa Chỉ Ảo Địa Chỉ Vật lý CỡTập CỡNhớ Cờ Canh\n" -#: readelf.c:3409 +#: readelf.c:3421 #, c-format msgid " Type Offset VirtAddr PhysAddr\n" -msgstr " Kiểu HIệu Địa Chỉ Ảo Địa Chỉ Vật lý\n" +msgstr " Kiểu Hiệu Địa Chỉ Ảo Địa Chỉ Vật lý\n" -#: readelf.c:3411 +#: readelf.c:3423 #, c-format msgid " FileSiz MemSiz Flags Align\n" -msgstr " FileSiz MemSiz Flags Align\n" +msgstr " CỡTập CỡNhớ Cờ Canh\n" -#: readelf.c:3504 +#: readelf.c:3516 msgid "more than one dynamic segment\n" msgstr "hơn một phân đoạn động\n" -#: readelf.c:3515 +#: readelf.c:3532 msgid "no .dynamic section in the dynamic segment\n" msgstr "không có đoạn « .dynamic » (động) trong đoạn động\n" -#: readelf.c:3527 +#: readelf.c:3547 msgid "the .dynamic section is not contained within the dynamic segment\n" msgstr "phần « .dynamic » (động) không nằm bên trong đoạn động\n" -#: readelf.c:3529 +#: readelf.c:3550 msgid "the .dynamic section is not the first section in the dynamic segment.\n" msgstr "phần « .dynamic » (động) không phải là phần thứ nhất trong đoạn động.\n" -#: readelf.c:3543 +#: readelf.c:3558 msgid "Unable to find program interpreter name\n" msgstr "Không tìm thấy tên bộ giải dịch chương trình\n" -#: readelf.c:3550 +#: readelf.c:3565 msgid "Internal error: failed to create format string to display program interpreter\n" msgstr "Lỗi nội bộ : không tạo được chuỗi định dạng để hiển thị bộ giải thích chương trình\n" -#: readelf.c:3554 +#: readelf.c:3569 msgid "Unable to read program interpreter name\n" msgstr "Không thể đọc tên của bộ giải dịch chương trình\n" -#: readelf.c:3557 +#: readelf.c:3572 #, c-format msgid "" "\n" @@ -4046,7 +4373,7 @@ msgstr "" "\n" " [Đang yêu cầu bộ giải dịch chương trình: %s]" -#: readelf.c:3569 +#: readelf.c:3584 #, c-format msgid "" "\n" @@ -4055,33 +4382,34 @@ msgstr "" "\n" " Ánh xạ Phần đến Phân đoạn:\n" -#: readelf.c:3570 +#: readelf.c:3585 #, c-format msgid " Segment Sections...\n" msgstr " Các phần phân đoạn...\n" -#: readelf.c:3605 +#: readelf.c:3620 msgid "Cannot interpret virtual addresses without program headers.\n" msgstr "Không thể giải dịch địa chỉ ảo khi không có dòng đầu chương trình.\n" -#: readelf.c:3621 +#: readelf.c:3636 #, c-format msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n" msgstr "Địa chỉ ảo 0x%lx không được định vị trong phân đoạn kiểu « PT_LOAD ».\n" -#: readelf.c:3635 readelf.c:3676 +#: readelf.c:3650 readelf.c:3691 msgid "section headers" msgstr "dòng đầu phần" -#: readelf.c:3720 readelf.c:3783 +#: readelf.c:3735 readelf.c:3800 msgid "symbols" msgstr "ký hiệu" -#: readelf.c:3730 readelf.c:3793 +# Literal: don't translate/Nghĩa chữ : đừng dịch +#: readelf.c:3745 readelf.c:3810 msgid "symtab shndx" msgstr "symtab shndx" -#: readelf.c:4020 readelf.c:4413 +#: readelf.c:4070 readelf.c:4478 #, c-format msgid "" "\n" @@ -4090,40 +4418,40 @@ msgstr "" "\n" "Không có phần trong tập tin này.\n" -#: readelf.c:4026 +#: readelf.c:4076 #, c-format msgid "There are %d section headers, starting at offset 0x%lx:\n" msgstr "Có %d dòng đầu phần, bắt đầu tại hiệu số 0x%lx:\n" -#: readelf.c:4046 readelf.c:4530 readelf.c:4765 readelf.c:5073 readelf.c:5488 -#: readelf.c:7187 +#: readelf.c:4096 readelf.c:4595 readelf.c:4821 readelf.c:5116 readelf.c:5524 +#: readelf.c:7421 msgid "string table" msgstr "bảng chuỗi" -#: readelf.c:4102 +#: readelf.c:4163 #, c-format msgid "Section %d has invalid sh_entsize %lx (expected %lx)\n" msgstr "Phần %d có kích cỡ sh_entsize không hợp lệ %lx (ngờ %lx)\n" -#: readelf.c:4122 +#: readelf.c:4183 msgid "File contains multiple dynamic symbol tables\n" msgstr "Tập tin chứa nhiều bảng ký hiệu động\n" # Type: text # Description -#: readelf.c:4135 +#: readelf.c:4196 msgid "File contains multiple dynamic string tables\n" msgstr "Tập tin chứa nhiều bảng chuỗi động\n" -#: readelf.c:4140 +#: readelf.c:4201 msgid "dynamic strings" msgstr "chuỗi động" -#: readelf.c:4147 +#: readelf.c:4208 msgid "File contains multiple symtab shndx tables\n" msgstr "Tập tin chứa nhiều bảng symtab shndx\n" -#: readelf.c:4194 +#: readelf.c:4259 #, c-format msgid "" "\n" @@ -4132,7 +4460,7 @@ msgstr "" "\n" "Dòng đầu phần:\n" -#: readelf.c:4196 +#: readelf.c:4261 #, c-format msgid "" "\n" @@ -4141,57 +4469,57 @@ msgstr "" "\n" "Dòng đầu phần:\n" -#: readelf.c:4202 readelf.c:4213 readelf.c:4224 +#: readelf.c:4267 readelf.c:4278 readelf.c:4289 #, c-format msgid " [Nr] Name\n" msgstr " [Nr] Tên\n" -#: readelf.c:4203 +#: readelf.c:4268 #, c-format msgid " Type Addr Off Size ES Lk Inf Al\n" msgstr " Kiểu ĐChỉ Hiệu Cỡ ES Lk Tin Cl\n" -#: readelf.c:4207 +#: readelf.c:4272 #, c-format msgid " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" -msgstr " [Nr] Name Type Addr Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Tên Kiểu ĐChỉ Tắt Cỡ ES Cờ Lkết Tin Canh\n" -#: readelf.c:4214 +#: readelf.c:4279 #, c-format msgid " Type Address Off Size ES Lk Inf Al\n" -msgstr " Kiểu Địa chỉ Hiệu Cỡ ES Lk Tin Cl\n" +msgstr " Kiểu Địa chỉ Hiệu Cỡ ES Lkết Tin Canh\n" -#: readelf.c:4218 +#: readelf.c:4283 #, c-format msgid " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" -msgstr " [Nr] Name Type Address Off Size ES Flg Lk Inf Al\n" +msgstr " [Nr] Tên Kiểu Địa chỉ Tắt Cỡ ES Cờ Lkết Tin Canh\n" -#: readelf.c:4225 +#: readelf.c:4290 #, c-format msgid " Type Address Offset Link\n" -msgstr " Kiểu Địa chỉ Hiệu số Liên kết\n" +msgstr " Kiểu Địa chỉ Hiệu Liên kết\n" -#: readelf.c:4226 +#: readelf.c:4291 #, c-format msgid " Size EntSize Info Align\n" -msgstr " Cỡ CỡEnt TTin Canh lề\n" +msgstr " Cỡ CỡEnt Tin Canh\n" -#: readelf.c:4230 +#: readelf.c:4295 #, c-format msgid " [Nr] Name Type Address Offset\n" -msgstr " [Nr] Name Type Address Offset\n" +msgstr " [Nr] Tên Kiểu Địa chỉ Hiệu\n" -#: readelf.c:4231 +#: readelf.c:4296 #, c-format msgid " Size EntSize Flags Link Info Align\n" -msgstr " Size EntSize Flags Link Info Align\n" +msgstr " Cỡ CỡEnt Cờ Liên kết Tin Canh\n" -#: readelf.c:4236 +#: readelf.c:4301 #, c-format msgid " Flags\n" msgstr " Cờ\n" -#: readelf.c:4371 +#: readelf.c:4435 #, c-format msgid "" "Key to Flags:\n" @@ -4211,16 +4539,16 @@ msgstr "" "\to \tđặc trưng cho hệ điều hành\n" "\ts\tđặc trưng cho bộ xử lý\n" -#: readelf.c:4389 +#: readelf.c:4453 #, c-format msgid "[: 0x%x]" msgstr "[: 0x%x]" -#: readelf.c:4420 +#: readelf.c:4485 msgid "Section headers are not available!\n" msgstr "Dòng đầu phần không sẵn sàng.\n" -#: readelf.c:4444 +#: readelf.c:4509 #, c-format msgid "" "\n" @@ -4229,46 +4557,41 @@ msgstr "" "\n" "Không có nhóm phần trong tập tin này.\n" -#: readelf.c:4480 +#: readelf.c:4546 #, c-format msgid "Bad sh_link in group section `%s'\n" msgstr "Có liên kết « sh_link » sai trong phần nhóm « %s »\n" -#: readelf.c:4499 +#: readelf.c:4565 #, c-format msgid "Bad sh_info in group section `%s'\n" msgstr "Có thông tin « sh_info » sai trong phần nhóm « %s »\n" -#: readelf.c:4538 readelf.c:7690 +#: readelf.c:4603 msgid "section data" msgstr "dữ liệu phần" -#: readelf.c:4550 +#: readelf.c:4615 #, c-format msgid " [Index] Name\n" msgstr " [Chỉ mục] Tên\n" -#: readelf.c:4564 +#: readelf.c:4629 #, c-format msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n" msgstr "phần [%5u] trong phần nhóm [%5u]>phần tối đa [%5u]\n" -#: readelf.c:4570 -#, c-format -msgid "invalid section [%5u] in group section [%5u]\n" -msgstr "phần không hợp lệ [%5u] trong phần nhóm [%5u]\n" - -#: readelf.c:4580 +#: readelf.c:4638 #, c-format msgid "section [%5u] in group section [%5u] already in group section [%5u]\n" msgstr "phần [%5u] trong phần nhóm [%5u] đã có trong phần nhóm [%5u]\n" -#: readelf.c:4593 +#: readelf.c:4651 #, c-format msgid "section 0 in group section [%5u]\n" msgstr "phần 0 trong phần nhóm [%5u]\n" -#: readelf.c:4689 +#: readelf.c:4746 #, c-format msgid "" "\n" @@ -4277,7 +4600,7 @@ msgstr "" "\n" "phần định vị lại « %s » tại hiệu số 0x%lx chứa %ld byte:\n" -#: readelf.c:4701 +#: readelf.c:4758 #, c-format msgid "" "\n" @@ -4286,7 +4609,7 @@ msgstr "" "\n" "Không có việc định vị lại động trong tập tin này.\n" -#: readelf.c:4725 +#: readelf.c:4782 #, c-format msgid "" "\n" @@ -4295,17 +4618,17 @@ msgstr "" "\n" "Phần định vị lại" -#: readelf.c:4730 readelf.c:5149 readelf.c:5163 readelf.c:5503 +#: readelf.c:4787 readelf.c:5192 readelf.c:5206 readelf.c:5539 #, c-format msgid "'%s'" msgstr "« %s »" -#: readelf.c:4732 readelf.c:5165 readelf.c:5505 +#: readelf.c:4789 readelf.c:5208 readelf.c:5541 #, c-format msgid " at offset 0x%lx contains %lu entries:\n" -msgstr " tại hiệu số 0x%lx chứa %lu mục nhập:\n" +msgstr " tại hiệu 0x%lx chứa %lu mục nhập:\n" -#: readelf.c:4784 +#: readelf.c:4840 #, c-format msgid "" "\n" @@ -4314,16 +4637,16 @@ msgstr "" "\n" "Không có việc định vị lại trong tập tin này.\n" -#: readelf.c:4963 readelf.c:5345 +#: readelf.c:5022 readelf.c:5390 msgid "unwind table" msgstr "tri ra bảng" -#: readelf.c:5022 readelf.c:5435 +#: readelf.c:5063 readelf.c:5471 #, c-format msgid "Skipping unexpected relocation type %s\n" msgstr "Đang nhảy kiểu định vị lại bất thường %s\n" -#: readelf.c:5081 readelf.c:5496 readelf.c:5547 +#: readelf.c:5124 readelf.c:5532 readelf.c:5585 #, c-format msgid "" "\n" @@ -4332,7 +4655,7 @@ msgstr "" "\n" "Không có phần tri ra trong tập tin này.\n" -#: readelf.c:5144 +#: readelf.c:5187 #, c-format msgid "" "\n" @@ -4341,11 +4664,11 @@ msgstr "" "\n" "Không thể tìm thấy phần thông tin tri ra cho " -#: readelf.c:5156 +#: readelf.c:5199 msgid "unwind info" msgstr "thông tin tri ra" -#: readelf.c:5158 readelf.c:5502 +#: readelf.c:5201 readelf.c:5538 #, c-format msgid "" "\n" @@ -4354,11 +4677,11 @@ msgstr "" "\n" "Phần tri ra " -#: readelf.c:5712 readelf.c:5756 +#: readelf.c:5751 readelf.c:5796 msgid "dynamic section" msgstr "phần động" -#: readelf.c:5833 +#: readelf.c:5873 #, c-format msgid "" "\n" @@ -4367,225 +4690,240 @@ msgstr "" "\n" "Không có phần động trong tập tin này.\n" -#: readelf.c:5871 +#: readelf.c:5911 msgid "Unable to seek to end of file!\n" msgstr "Không thể tìm tới kết thúc của tập tin.\n" -#: readelf.c:5884 +#: readelf.c:5924 msgid "Unable to determine the number of symbols to load\n" msgstr "Không thể quyết định số ký hiệu cần tải\n" -#: readelf.c:5919 +#: readelf.c:5959 msgid "Unable to seek to end of file\n" msgstr "Không thể tìm tới kết thúc tập tin\n" -#: readelf.c:5926 +#: readelf.c:5966 msgid "Unable to determine the length of the dynamic string table\n" msgstr "Không thể quyết định độ dài của bảng chuỗi động\n" -#: readelf.c:5931 +#: readelf.c:5971 msgid "dynamic string table" msgstr "bảng chuỗi động" -#: readelf.c:5966 +#: readelf.c:6007 msgid "symbol information" msgstr "thông tin ký hiệu" -#: readelf.c:5991 +#: readelf.c:6032 #, c-format msgid "" "\n" "Dynamic section at offset 0x%lx contains %u entries:\n" msgstr "" "\n" -"Phần động tại hiệu số 0x%lx chứa %u mục nhập:\n" +"Phần động tại hiệu 0x%lx chứa %u mục nhập:\n" -#: readelf.c:5994 +#: readelf.c:6035 #, c-format msgid " Tag Type Name/Value\n" msgstr " Thẻ Kiểu Tên/Giá trị\n" -#: readelf.c:6030 +#: readelf.c:6071 #, c-format msgid "Auxiliary library" msgstr "Thư viện phụ" -#: readelf.c:6034 +#: readelf.c:6075 #, c-format msgid "Filter library" msgstr "Thư viện lọc" -#: readelf.c:6038 +#: readelf.c:6079 #, c-format msgid "Configuration file" msgstr "Tập tin cấu hình" -#: readelf.c:6042 +#: readelf.c:6083 #, c-format msgid "Dependency audit library" msgstr "Thư viện kiểm tra cách phụ thuộc" -#: readelf.c:6046 +#: readelf.c:6087 #, c-format msgid "Audit library" msgstr "Thư viện kiểm tra" -#: readelf.c:6064 readelf.c:6092 readelf.c:6120 +#: readelf.c:6105 readelf.c:6133 readelf.c:6161 #, c-format msgid "Flags:" msgstr "Cờ :" -#: readelf.c:6067 readelf.c:6095 readelf.c:6122 +#: readelf.c:6108 readelf.c:6136 readelf.c:6163 #, c-format msgid " None\n" msgstr " Không có\n" -#: readelf.c:6243 +#: readelf.c:6284 #, c-format msgid "Shared library: [%s]" msgstr "Thư viện dùng chung: [%s]" -#: readelf.c:6246 +#: readelf.c:6287 #, c-format msgid " program interpreter" msgstr " bộ giải dịch chương trình" -#: readelf.c:6250 +#: readelf.c:6291 #, c-format msgid "Library soname: [%s]" -msgstr "soname (tên so) thư viện: [%s]" +msgstr "soname thư viện: [%s]" -#: readelf.c:6254 +#: readelf.c:6295 #, c-format msgid "Library rpath: [%s]" -msgstr "rpath (đường dẫn r) thư viện: [%s]" +msgstr "rpath thư viện: [%s]" -#: readelf.c:6258 +#: readelf.c:6299 #, c-format msgid "Library runpath: [%s]" -msgstr "runpath (đường dẫn chạy) thư viện: [%s]" +msgstr "runpath thư viện: [%s]" -#: readelf.c:6321 +#: readelf.c:6362 #, c-format msgid "Not needed object: [%s]\n" msgstr "Đối tượng không cần thiết: [%s]\n" -#: readelf.c:6444 +#: readelf.c:6487 #, c-format msgid "" "\n" -"Version definition section '%s' contains %ld entries:\n" +"Version definition section '%s' contains %u entries:\n" msgstr "" "\n" -"Phần định nghĩa phiên bản « %s » chứa %ld mục nhập:\n" +"Phần xác định phiên bản « %s » chứa %u mục nhập:\n" -#: readelf.c:6447 +#: readelf.c:6490 #, c-format msgid " Addr: 0x" msgstr " ĐChỉ: 0x" -#: readelf.c:6449 readelf.c:6656 +#: readelf.c:6492 readelf.c:6594 readelf.c:6715 #, c-format -msgid " Offset: %#08lx Link: %lx (%s)\n" -msgstr " HIệu: %#08lx LKết: %lx (%s)\n" +msgid " Offset: %#08lx Link: %u (%s)\n" +msgstr " Hiệu : %#08lx Liên kết: %u (%s)\n" -#: readelf.c:6458 +#: readelf.c:6500 msgid "version definition section" -msgstr "phần định nghĩa phiên bản" +msgstr "phần xác định phiên bản" -#: readelf.c:6484 +#: readelf.c:6529 #, c-format msgid " %#06x: Rev: %d Flags: %s" msgstr " %#06x: Bản: %d Cờ: %s" -#: readelf.c:6487 +#: readelf.c:6532 #, c-format msgid " Index: %d Cnt: %d " msgstr " Chỉ mục: %d Đếm: %d " -#: readelf.c:6498 +#: readelf.c:6543 #, c-format msgid "Name: %s\n" msgstr "Tên: %s\n" -#: readelf.c:6500 +#: readelf.c:6545 #, c-format msgid "Name index: %ld\n" msgstr "Chỉ mục tên: %ld\n" -#: readelf.c:6515 +#: readelf.c:6562 #, c-format msgid " %#06x: Parent %d: %s\n" msgstr " %#06x: Mẹ %d: %s\n" -#: readelf.c:6518 +#: readelf.c:6565 #, c-format msgid " %#06x: Parent %d, name index: %ld\n" msgstr " %#06x: Mẹ %d, chỉ mục tên: %ld\n" -#: readelf.c:6537 +#: readelf.c:6569 +#, c-format +msgid " Version def aux past end of section\n" +msgstr " Xác định phiên bản phụ qua kết thúc phần\n" + +#: readelf.c:6574 +#, c-format +msgid " Version definition past end of section\n" +msgstr " Xác định phiên bản qua kết thúc phần\n" + +#: readelf.c:6589 #, c-format msgid "" "\n" -"Version needs section '%s' contains %ld entries:\n" +"Version needs section '%s' contains %u entries:\n" msgstr "" "\n" -"Phần cần thiết phiên bản « %s » chứa %ld mục nhập:\n" +"Phần phiên bản cần thiết « %s » chứa %u mục nhập:\n" -#: readelf.c:6540 +#: readelf.c:6592 #, c-format msgid " Addr: 0x" msgstr " ĐChỉ: 0x" -#: readelf.c:6542 -#, c-format -msgid " Offset: %#08lx Link to section: %ld (%s)\n" -msgstr " HIệu: %#08lx Liên kết đến phần: %ld (%s)\n" - -#: readelf.c:6551 +#: readelf.c:6602 msgid "version need section" -msgstr "phần cần phiên bản" +msgstr "phần phiên bản cần" -#: readelf.c:6573 +#: readelf.c:6627 #, c-format msgid " %#06x: Version: %d" msgstr " %#06x: PhBản: %d" -#: readelf.c:6576 +#: readelf.c:6630 #, c-format msgid " File: %s" msgstr " Tập tin: %s" -#: readelf.c:6578 +#: readelf.c:6632 #, c-format msgid " File: %lx" msgstr " Tập tin: %lx" -#: readelf.c:6580 +#: readelf.c:6634 #, c-format msgid " Cnt: %d\n" msgstr " Đếm: %d\n" -#: readelf.c:6598 +#: readelf.c:6654 #, c-format msgid " %#06x: Name: %s" msgstr " %#06x: Tên: %s" -#: readelf.c:6601 +#: readelf.c:6657 #, c-format msgid " %#06x: Name index: %lx" msgstr " %#06x: Chỉ mục tên: %lx" -#: readelf.c:6604 +#: readelf.c:6660 #, c-format msgid " Flags: %s Version: %d\n" msgstr " Cờ: %s Phiên bản: %d\n" -#: readelf.c:6647 +#: readelf.c:6667 +#, c-format +msgid " Version need aux past end of section\n" +msgstr " Xác định phiên bản phụ qua kết thúc phần\n" + +#: readelf.c:6672 +#, c-format +msgid " Version need past end of section\n" +msgstr " Xác định phiên bản qua kết thúc phần\n" + +#: readelf.c:6706 msgid "version string table" msgstr "bảng chuỗi phiên bản" -#: readelf.c:6651 +#: readelf.c:6710 #, c-format msgid "" "\n" @@ -4594,40 +4932,44 @@ msgstr "" "\n" "Phần ký hiệu phiên bản « %s » chứa %d mục nhập:\n" -#: readelf.c:6654 +#: readelf.c:6713 #, c-format msgid " Addr: " msgstr " ĐChỉ: " -#: readelf.c:6664 +#: readelf.c:6723 msgid "version symbol data" msgstr "dữ liệu ký hiệu phiên bản" -#: readelf.c:6691 +#: readelf.c:6750 msgid " 0 (*local*) " -msgstr " 0 (*local*) " +msgstr " 0 (*cục bộ*) " -#: readelf.c:6695 +#: readelf.c:6754 msgid " 1 (*global*) " -msgstr " 1 (*toàn cụcglobal*) " +msgstr " 1 (*toàn cục*) " -#: readelf.c:6733 readelf.c:7255 +#: readelf.c:6791 readelf.c:7488 msgid "version need" msgstr "phiên bản cần" -#: readelf.c:6743 +#: readelf.c:6801 msgid "version need aux (2)" msgstr "phiên bản cần phụ (2)" -#: readelf.c:6785 readelf.c:7320 +#: readelf.c:6816 readelf.c:6871 +msgid "*invalid*" +msgstr "*không hợp lệ*" + +#: readelf.c:6846 readelf.c:7553 msgid "version def" -msgstr "phbản đ.nghĩa" +msgstr "đặt phiên bản" -#: readelf.c:6805 readelf.c:7335 +#: readelf.c:6866 readelf.c:7568 msgid "version def aux" -msgstr "phbản đ.nghĩa phụ" +msgstr "đặt phiên bản phụ" -#: readelf.c:6836 +#: readelf.c:6900 #, c-format msgid "" "\n" @@ -4636,28 +4978,32 @@ msgstr "" "\n" "Không tìm thấy thông tin phiên bản trong tập tin này.\n" -#: readelf.c:6955 +#: readelf.c:7034 #, c-format msgid ": %x" msgstr ": %x" -#: readelf.c:7013 +#: readelf.c:7093 msgid "Unable to read in dynamic data\n" msgstr "Không thể đọc vào dữ liệu động\n" -#: readelf.c:7069 readelf.c:7443 readelf.c:7467 readelf.c:7497 readelf.c:7521 +#: readelf.c:7184 readelf.c:7234 readelf.c:7258 readelf.c:7288 readelf.c:7312 msgid "Unable to seek to start of dynamic information\n" msgstr "Không thể tìm tới đầu của thông tin động\n" -#: readelf.c:7075 readelf.c:7449 +#: readelf.c:7190 readelf.c:7240 msgid "Failed to read in number of buckets\n" -msgstr "Việc đọc vào số xô bị lỗi\n" +msgstr "Lỗi đọc vào số các xô\n" -#: readelf.c:7081 +#: readelf.c:7196 msgid "Failed to read in number of chains\n" -msgstr "Việc đọc vào số dây bị lỗi\n" +msgstr "Lỗi đọc vào số các dãy\n" + +#: readelf.c:7296 +msgid "Failed to determine last chain length\n" +msgstr "Lỗi xác định chiều dài dãy cuối cùng\n" -#: readelf.c:7101 +#: readelf.c:7340 #, c-format msgid "" "\n" @@ -4666,17 +5012,26 @@ msgstr "" "\n" "Bảng ký hiệu cho ảnh:\n" -#: readelf.c:7103 +#: readelf.c:7342 readelf.c:7360 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" msgstr " Số xô : Giá trị Cỡ Kiểu Trộn Hiện Ndx Tên\n" -#: readelf.c:7105 +#: readelf.c:7344 readelf.c:7362 #, c-format msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n" msgstr " Số xô : Giá trị Cỡ Kiểu Trộn Hiện Ndx Tên\n" -#: readelf.c:7163 +#: readelf.c:7358 +#, c-format +msgid "" +"\n" +"Symbol table of `.gnu.hash' for image:\n" +msgstr "" +"\n" +"Bảng ký hiệu của « .gnu.hash » cho ảnh:\n" + +#: readelf.c:7397 #, c-format msgid "" "\n" @@ -4685,29 +5040,29 @@ msgstr "" "\n" "Bảng ký hiệu « %s » chứa %lu mục nhập:\n" -#: readelf.c:7167 +#: readelf.c:7401 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Số : Giá trị Cỡ Kiểu Trộn Hiện Ndx Tên\n" -#: readelf.c:7169 +#: readelf.c:7403 #, c-format msgid " Num: Value Size Type Bind Vis Ndx Name\n" msgstr " Số : Giá trị Cỡ Kiểu Trộn Hiện Ndx Tên\n" -#: readelf.c:7225 +#: readelf.c:7459 msgid "version data" msgstr "dữ liệu phiên bản" -#: readelf.c:7268 +#: readelf.c:7501 msgid "version need aux (3)" msgstr "phiên bản cần phụ (3)" -#: readelf.c:7295 +#: readelf.c:7528 msgid "bad dynamic symbol\n" msgstr "ký hiệu động sai\n" -#: readelf.c:7359 +#: readelf.c:7592 #, c-format msgid "" "\n" @@ -4716,7 +5071,7 @@ msgstr "" "\n" "Không có thông tin ký hiệu động để hiển thị ký hiệu.\n" -#: readelf.c:7371 +#: readelf.c:7604 #, c-format msgid "" "\n" @@ -4725,16 +5080,12 @@ msgstr "" "\n" "Biểu đồ tần xuất cho độ dài danh sách xô (tổng số %lu xô):\n" -#: readelf.c:7373 readelf.c:7539 +#: readelf.c:7606 readelf.c:7676 #, c-format msgid " Length Number %% of total Coverage\n" -msgstr " Dài Số %% tổng phạm vị\n" +msgstr " Dài Số %% tổng Phạm vị\n" -#: readelf.c:7505 -msgid "Failed to determine last chain length\n" -msgstr "Lỗi xác định độ dài dãy cuối cùng\n" - -#: readelf.c:7537 +#: readelf.c:7674 #, c-format msgid "" "\n" @@ -4743,7 +5094,7 @@ msgstr "" "\n" "Biểu đồ tần xuất cho độ dài danh sách xô « .gnu.hash » (tổng số %lu xô):\n" -#: readelf.c:7603 +#: readelf.c:7740 #, c-format msgid "" "\n" @@ -4752,12 +5103,36 @@ msgstr "" "\n" "Phân đoạn thông tin động tại hiệu số 0x%lx chứa %d mục nhập:\n" -#: readelf.c:7606 +#: readelf.c:7743 #, c-format msgid " Num: Name BoundTo Flags\n" msgstr " Số : Tên ĐóngVới Cờ\n" -#: readelf.c:7658 +#: readelf.c:7834 +msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc" +msgstr "Loại sự định vị lại MN10300 chưa xử lý được tìm sau sự định vị lại SYM_DIFF" + +#: readelf.c:7982 +#, c-format +msgid "Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n" +msgstr "Thiếu thông tin về kiểu định vị lại 32-bit được dùng trong phần DWARF có số thứ tự máy %d\n" + +#: readelf.c:8251 +#, c-format +msgid "unable to apply unsupported reloc type %d to section %s\n" +msgstr "không thể áp dụng kiểu định vị lại không được hỗ trợ %d cho phần %s\n" + +#: readelf.c:8259 +#, c-format +msgid "skipping invalid relocation offset 0x%lx in section %s\n" +msgstr "đang bỏ qua hiệu số định vị lại không hợp lệ 0x%lx trong phần %s\n" + +#: readelf.c:8283 +#, c-format +msgid "skipping unexpected symbol type %s in %ld'th relocation in section %s\n" +msgstr "đang bỏ qua kiểu ký hiệu bất thường %s trong việc định vị lại thứ %ld trong phần %s\n" + +#: readelf.c:8315 #, c-format msgid "" "\n" @@ -4766,7 +5141,7 @@ msgstr "" "\n" "Việc đổ thanh ghi của phần %s\n" -#: readelf.c:7680 +#: readelf.c:8336 #, c-format msgid "" "\n" @@ -4775,46 +5150,49 @@ msgstr "" "\n" "Phần « %s » không có dữ liệu cần đổ.\n" -#: readelf.c:7685 +#: readelf.c:8342 +msgid "section contents" +msgstr "nội dung phần" + +#: readelf.c:8362 #, c-format msgid "" "\n" -"Hex dump of section '%s':\n" +"String dump of section '%s':\n" msgstr "" "\n" -"Việc đổ thập lục của phần « %s »:\n" - -#: readelf.c:7710 -#, c-format -msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n" -msgstr " GHI CHÚ : phần này có một số việc định vị lại được gán, nhưng chúng CHƯA được áp dụng cho việc đổ này.\n" +"Đổ chuỗi của phần « %s »:\n" -#: readelf.c:7845 +#: readelf.c:8380 #, c-format -msgid "skipping relocation of unknown size against offset 0x%lx in section %s\n" -msgstr "đang bỏ qua việc định vị lại có kích cỡ không rõ được gán cho hiệu 0x%lx trong phần %s\n" +msgid " Note: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " Ghi chú : phần này có một số việc định vị lại được gán, nhưng chúng CHƯA được áp dụng cho việc đổ này.\n" -#: readelf.c:7854 +#: readelf.c:8409 #, c-format -msgid "skipping invalid relocation offset 0x%lx in section %s\n" -msgstr "đang bỏ qua hiệu số định vị lại không hợp lệ 0x%lx trong phần %s\n" +msgid " No strings found in this section." +msgstr " Không tìm thấy chuỗi trong phần này." -#: readelf.c:7875 +#: readelf.c:8431 #, c-format -msgid "skipping unexpected symbol type %s in relocation in section .rela%s\n" -msgstr "đang bỏ qua kiểu ký hiệu bất thường %s trong việc định vị lại trong phần .rela%s\n" +msgid "" +"\n" +"Hex dump of section '%s':\n" +msgstr "" +"\n" +"Việc đổ thập lục của phần « %s »:\n" -#: readelf.c:7902 +#: readelf.c:8455 #, c-format -msgid "skipping unexpected symbol type %s in relocation in section .rela.%s\n" -msgstr "đang nhảy qua kiểu ký hiệu bất thường %s trong việc định vị lại trong phần .rela%s\n" +msgid " NOTE: This section has relocations against it, but these have NOT been applied to this dump.\n" +msgstr " GHI CHÚ : phần này có một số việc định vị lại được gán, nhưng chúng CHƯA được áp dụng cho việc đổ này.\n" -#: readelf.c:7935 +#: readelf.c:8593 #, c-format msgid "%s section data" msgstr "dữ liệu phần %s" -#: readelf.c:7972 +#: readelf.c:8658 #, c-format msgid "" "\n" @@ -4823,49 +5201,58 @@ msgstr "" "\n" "Phần « %s » không có dữ liệu gỡ lỗi.\n" -#: readelf.c:7998 +#. There is no point in dumping the contents of a debugging section +#. which has the NOBITS type - the bits in the file will be random. +#. This can happen when a file containing a .eh_frame section is +#. stripped with the --only-keep-debug command line option. +#: readelf.c:8667 +#, c-format +msgid "section '%s' has the NOBITS type - its contents are unreliable.\n" +msgstr "phần « %s » có loại NOBITS thì nó có nội dung không xác thực.\n" + +#: readelf.c:8702 #, c-format msgid "Unrecognized debug section: %s\n" msgstr "Không nhận diện phần gỡ lỗi: %s\n" -#: readelf.c:8026 +#: readelf.c:8730 #, c-format msgid "Section '%s' was not dumped because it does not exist!\n" msgstr "Phần « %s » không được đổ vì nó không tồn tại.\n" -#: readelf.c:8061 +#: readelf.c:8771 #, c-format msgid "Section %d was not dumped because it does not exist!\n" -msgstr "• Phần %d không được đổ vì nó không tồn tại. •\n" +msgstr "Phần %d không được đổ vì nó không tồn tại.\n" -#: readelf.c:8478 +#: readelf.c:9285 msgid "attributes" msgstr "thuộc tính" -#: readelf.c:8497 +#: readelf.c:9306 #, c-format msgid "ERROR: Bad section length (%d > %d)\n" msgstr "LỖI : độ dài phần sai (%d > %d)\n" -#: readelf.c:8522 +#: readelf.c:9337 #, c-format msgid "ERROR: Bad subsection length (%d > %d)\n" msgstr "LỖI : độ dài phần phụ sai (%d > %d)\n" -#: readelf.c:8578 +#: readelf.c:9396 #, c-format msgid "Unknown format '%c'\n" msgstr "Không rõ định dạng %c\n" -#: readelf.c:8651 readelf.c:9019 +#: readelf.c:9549 readelf.c:10065 msgid "liblist" msgstr "danh sách thư viện" -#: readelf.c:8740 +#: readelf.c:9636 msgid "options" msgstr "tùy chọn" -#: readelf.c:8770 +#: readelf.c:9666 #, c-format msgid "" "\n" @@ -4874,15 +5261,15 @@ msgstr "" "\n" "Phần « %s » chứa %d mục nhập:\n" -#: readelf.c:8931 +#: readelf.c:9827 msgid "conflict list found without a dynamic symbol table\n" msgstr "tìm được danh sách xung đột không có bảng ký hiệu động\n" -#: readelf.c:8947 readelf.c:8961 +#: readelf.c:9843 readelf.c:9857 msgid "conflict" msgstr "xung đột" -#: readelf.c:8971 +#: readelf.c:9867 #, c-format msgid "" "\n" @@ -4891,15 +5278,94 @@ msgstr "" "\n" "Phần « .conflict » (xung đột) chứa %lu mục nhập:\n" -#: readelf.c:8973 +#: readelf.c:9869 msgid " Num: Index Value Name" msgstr " Số : CMục Giá trị Tên" -#: readelf.c:9026 +#: readelf.c:9901 +msgid "GOT" +msgstr "GOT" + +#: readelf.c:9902 +#, c-format +msgid "" +"\n" +"Primary GOT:\n" +msgstr "" +"\n" +"GOT chính:\n" + +#: readelf.c:9903 +#, c-format +msgid " Canonical gp value: " +msgstr " Giá trị gp chính tắc: " + +#: readelf.c:9907 readelf.c:9998 +#, c-format +msgid " Reserved entries:\n" +msgstr " Mục nhập dành riêng:\n" + +#: readelf.c:9908 +#, c-format +msgid " %*s %10s %*s Purpose\n" +msgstr " Mục đích %*s %10s %*s\n" + +#: readelf.c:9924 +#, c-format +msgid " Local entries:\n" +msgstr " Mục nhập cục bộ :\n" + +# Variable: don't translate / Biến: đừng dịch +#: readelf.c:9925 +#, c-format +msgid " %*s %10s %*s\n" +msgstr " %*s %10s %*s\n" + +#: readelf.c:9940 +#, c-format +msgid " Global entries:\n" +msgstr " Mục nhập toàn cục:\n" + +#: readelf.c:9941 +#, c-format +msgid " %*s %10s %*s %*s %-7s %3s %s\n" +msgstr " %*s %10s %*s %*s %-7s %3s %s\n" + +#: readelf.c:9996 +msgid "PLT GOT" +msgstr "PLT GOT" + +#: readelf.c:9997 +#, c-format +msgid "" +"\n" +"PLT GOT:\n" +"\n" +msgstr "" +"\n" +"PLT GOT:\n" +"\n" + +#: readelf.c:9999 +#, c-format +msgid " %*s %*s Purpose\n" +msgstr " Mục đích %*s %*s\n" + +#: readelf.c:10007 +#, c-format +msgid " Entries:\n" +msgstr " Mục nhập:\n" + +#: readelf.c:10008 +#, c-format +msgid " %*s %*s %*s %-7s %3s %s\n" +msgstr " %*s %*s %*s %-7s %3s %s\n" + +#: readelf.c:10072 msgid "liblist string table" msgstr "bảng chuỗi danh sách thư viện" -#: readelf.c:9036 +#: readelf.c:10082 #, c-format msgid "" "\n" @@ -4908,120 +5374,144 @@ msgstr "" "\n" "Phần danh sách thư viện « %s » chứa %lu mục nhập:\n" -#: readelf.c:9089 +#: readelf.c:10135 msgid "NT_AUXV (auxiliary vector)" msgstr "NT_AUXV (véc-tơ phụ)" -#: readelf.c:9091 +#: readelf.c:10137 msgid "NT_PRSTATUS (prstatus structure)" msgstr "NT_PRSTATUS (cấu trúc trạng thái prstatus)" -#: readelf.c:9093 +#: readelf.c:10139 msgid "NT_FPREGSET (floating point registers)" msgstr "NT_FPREGSET (thanh ghi điểm phù động)" -#: readelf.c:9095 +#: readelf.c:10141 msgid "NT_PRPSINFO (prpsinfo structure)" msgstr "NT_PRPSINFO (cấu trúc thông tin prpsinfo)" -#: readelf.c:9097 +#: readelf.c:10143 msgid "NT_TASKSTRUCT (task structure)" msgstr "NT_TASKSTRUCT (cấu trúc tác vụ)" -#: readelf.c:9099 +#: readelf.c:10145 msgid "NT_PRXFPREG (user_xfpregs structure)" msgstr "NT_PRXFPREG (cấu trúc « user_xfpregs »)" -#: readelf.c:9101 +#: readelf.c:10147 +msgid "NT_PPC_VMX (ppc Altivec registers)" +msgstr "NT_PPC_VMX (thanh ghi ppc Altivec)" + +#: readelf.c:10149 +msgid "NT_PPC_VSX (ppc VSX registers)" +msgstr "NT_PPC_VSX (thanh ghi ppc VSX)" + +#: readelf.c:10151 msgid "NT_PSTATUS (pstatus structure)" msgstr "NT_PSTATUS (cấu trúc trạng thái pstatus)" -#: readelf.c:9103 +#: readelf.c:10153 msgid "NT_FPREGS (floating point registers)" msgstr "NT_FPREGS (thanh ghi điểm phù động)" -#: readelf.c:9105 +#: readelf.c:10155 msgid "NT_PSINFO (psinfo structure)" msgstr "NT_PSINFO (cấu trúc thông tin psinfo)" -#: readelf.c:9107 +#: readelf.c:10157 msgid "NT_LWPSTATUS (lwpstatus_t structure)" msgstr "NT_LWPSTATUS (cấu trúc trạng thái « lwpstatus_t »)" -#: readelf.c:9109 +#: readelf.c:10159 msgid "NT_LWPSINFO (lwpsinfo_t structure)" msgstr "NT_LWPSINFO (cấu trúc thông tin « lwpsinfo_t »)" -#: readelf.c:9111 +#: readelf.c:10161 msgid "NT_WIN32PSTATUS (win32_pstatus structure)" msgstr "NT_WIN32PSTATUS (cấu trúc trạng thái « win32_pstatus »)" -#: readelf.c:9119 +#: readelf.c:10169 msgid "NT_VERSION (version)" msgstr "NT_VERSION (phiên bản)" -#: readelf.c:9121 +#: readelf.c:10171 msgid "NT_ARCH (architecture)" -msgstr "NT_ARCH (architecture)" +msgstr "NT_ARCH (kiến trúc)" -#: readelf.c:9126 readelf.c:9148 +#: readelf.c:10176 readelf.c:10199 readelf.c:10221 #, c-format msgid "Unknown note type: (0x%08x)" msgstr "Không rõ kiểu ghi chú : (0x%08x)" +#: readelf.c:10188 +msgid "NT_GNU_ABI_TAG (ABI version tag)" +msgstr "NT_GNU_ABI_TAG (thẻ phiên bản ABI)" + +#: readelf.c:10190 +msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)" +msgstr "NT_GNU_HWCAP (thông tin HWCAP được DSO cung cấp)" + +#: readelf.c:10192 +msgid "NT_GNU_BUILD_ID (unique build ID bitstring)" +msgstr "NT_GNU_BUILD_ID (chuỗi bit có mã số xây dựng duy nhất)" + +#: readelf.c:10194 +msgid "NT_GNU_GOLD_VERSION (gold version)" +msgstr "NT_GNU_GOLD_VERSION (phiên bản gold)" + #. NetBSD core "procinfo" structure. -#: readelf.c:9138 +#: readelf.c:10211 msgid "NetBSD procinfo structure" msgstr "Cấu trúc thông tin tiến trình procinfo NetBSD" -#: readelf.c:9165 readelf.c:9179 +#: readelf.c:10238 readelf.c:10252 msgid "PT_GETREGS (reg structure)" msgstr "PT_GETREGS (cấu trúc thanh ghi)" -#: readelf.c:9167 readelf.c:9181 +#: readelf.c:10240 readelf.c:10254 msgid "PT_GETFPREGS (fpreg structure)" msgstr "PT_GETFPREGS (cấu trúc thanh ghi « fpreg »)" # Name: don't translate / Tên: đừng dịch -#: readelf.c:9187 +#: readelf.c:10260 #, c-format msgid "PT_FIRSTMACH+%d" msgstr "PT_FIRSTMACH+%d" -#: readelf.c:9233 +#: readelf.c:10316 msgid "notes" msgstr "ghi chú" -#: readelf.c:9239 +#: readelf.c:10322 #, c-format msgid "" "\n" "Notes at offset 0x%08lx with length 0x%08lx:\n" msgstr "" "\n" -"Gặp ghi chú tại hiệu số 0x%08lx có độ dài 0x%08lx:\n" +"Gặp ghi chú tại hiệu 0x%08lx có chiều dài 0x%08lx:\n" -#: readelf.c:9241 +#: readelf.c:10324 #, c-format msgid " Owner\t\tData size\tDescription\n" msgstr " Chủ\t\tCỡ dữ liệu\tMô tả\n" -#: readelf.c:9260 +#: readelf.c:10343 #, c-format msgid "corrupt note found at offset %lx into core notes\n" -msgstr "tìm ghi chú bị hỏng tại hiệu số %lx vào ghi chú lõi\n" +msgstr "tìm ghi chú bị hỏng tại hiệu %lx vào ghi chú lõi\n" -#: readelf.c:9262 +#: readelf.c:10345 #, c-format msgid " type: %lx, namesize: %08lx, descsize: %08lx\n" msgstr " kiểu: %lx, cỡ_tên: %08lx, cỡ_mô_tả: %08lx\n" -#: readelf.c:9360 +#: readelf.c:10443 #, c-format msgid "No note segments present in the core file.\n" msgstr "Không có phân đoạn ghi chú trong tập tin lõi.\n" -#: readelf.c:9444 +#: readelf.c:10527 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" @@ -5030,12 +5520,12 @@ msgstr "" "không có hỗ trợ kiểu dữ liệu 64-bit\n" "nên không thể đọc tập tin ELF kiểu 64-bit.\n" -#: readelf.c:9493 readelf.c:9837 +#: readelf.c:10574 #, c-format msgid "%s: Failed to read file header\n" -msgstr "%s: việc đọc dòng đầu tập tin bị lỗi\n" +msgstr "%s: lỗi đọc dòng đầu tập tin\n" -#: readelf.c:9506 +#: readelf.c:10587 #, c-format msgid "" "\n" @@ -5044,272 +5534,380 @@ msgstr "" "\n" "Tập tin: %s\n" -#: readelf.c:9654 readelf.c:9675 readelf.c:9712 readelf.c:9792 +#: readelf.c:10802 +#, c-format +msgid "%s: failed to seek to first archive header\n" +msgstr "%s: lỗi tìm tới dòng đầu kho đầu tiên\n" + +#: readelf.c:10811 readelf.c:11076 readelf.c:11246 #, c-format msgid "%s: failed to read archive header\n" -msgstr "%s: việc đọc dòng đầu kho bị lỗi\n" +msgstr "%s: lỗi đọc dòng đầu kho\n" + +#: readelf.c:10836 +#, c-format +msgid "%s: the archive index is empty\n" +msgstr "%s: chỉ mục kho vẫn trống\n" + +#: readelf.c:10844 readelf.c:10867 +#, c-format +msgid "%s: failed to read archive index\n" +msgstr "%s: lỗi đọc chỉ mục kho\n" + +#: readelf.c:10853 +#, c-format +msgid "%s: the archive index is supposed to have %ld entries, but the size in the header is too small\n" +msgstr "%s: chỉ mục kho lưu nên có %ld mục nhập, còn phần đầu chứa kích cỡ quá nhở\n" + +#: readelf.c:10860 +msgid "Out of memory whilst trying to read archive symbol index\n" +msgstr "Không đủ bộ nhớ trong khi thử đọc chỉ mục ký hiệu kho lưu\n" + +#: readelf.c:10877 +msgid "Out of memory whilst trying to convert the archive symbol index\n" +msgstr "Không đủ bộ nhớ trong khi thử chuyển đổi chỉ mục ký hiệu kho lưu\n" + +#: readelf.c:10889 +#, c-format +msgid "%s: the archive has an index but no symbols\n" +msgstr "%s: kho lưu có một chỉ mục nhưng chưa có ký hiệu\n" + +#: readelf.c:10896 +msgid "Out of memory whilst trying to read archive index symbol table\n" +msgstr "Không đủ bộ nhớ trong khi thử đọc bảng ký hiệu chỉnh mục kho\n" # Type: error # Description -#: readelf.c:9665 +#: readelf.c:10902 +#, c-format +msgid "%s: failed to read archive index symbol table\n" +msgstr "%s: lỗi đọc bảng ký hiệu chỉnh mục kho\n" + +# Type: error +# Description +#: readelf.c:10910 #, c-format msgid "%s: failed to skip archive symbol table\n" -msgstr "%s: việc nhảy qua bảng ký hiệu kho bị lỗi\n" +msgstr "%s: lỗi nhảy qua bảng ký hiệu kho\n" + +#: readelf.c:10921 +#, c-format +msgid "%s: failed to read archive header following archive index\n" +msgstr "%s: lỗi đọc phần đầu kho theo sau chỉ mục kho\n" + +#: readelf.c:10926 +#, c-format +msgid "%s has no archive index\n" +msgstr "%s không có chỉ mục kho\n" + +#: readelf.c:10937 +msgid "Out of memory reading long symbol names in archive\n" +msgstr "Không đủ bộ nhớ trong khi đọc các tên ký hiệu dài trong kho lưu\n" # Type: error # Description -#: readelf.c:9697 +#: readelf.c:10945 +#, c-format +msgid "%s: failed to read long symbol name string table\n" +msgstr "%s: lỗi đọc bảng chuỗi tên ký hiệu dài\n" + +#: readelf.c:11070 +#, c-format +msgid "%s: failed to seek to next file name\n" +msgstr "%s: lỗi tìm tới tên tập tin kế tiếp\n" + +#: readelf.c:11081 readelf.c:11252 +#, c-format +msgid "%s: did not find a valid archive header\n" +msgstr "%s: không tìm thấy phần đầu kho lưu hợp lệ\n" + +#: readelf.c:11162 +#, c-format +msgid "%s: unable to dump the index as none was found\n" +msgstr "%s: không thể đổ chỉ mục vì không tìm thấy\n" + +#: readelf.c:11168 +#, c-format +msgid "Index of archive %s: (%ld entries, 0x%lx bytes in the symbol table)\n" +msgstr "Chỉ mục của kho lưu %s: (%ld mục nhập, 0x%lx byte trong bảng ký hiệu)\n" + +#: readelf.c:11186 +#, c-format +msgid "Binary %s contains:\n" +msgstr "Bản nhị phân %s chứa:\n" + +#: readelf.c:11194 #, c-format -msgid "%s: failed to read string table\n" -msgstr "%s: việc đọc bảng chuỗi bị lỗi\n" +msgid "%s: end of the symbol table reached before the end of the index\n" +msgstr "%s: gặp kết thúc bảng ký hiệu đằng trước kết thúc chỉ mục\n" -#: readelf.c:9733 +#: readelf.c:11205 #, c-format -msgid "%s: invalid archive string table offset %lu\n" -msgstr "%s: hiệu số bảng chuỗi kho không hợp lệ %lu\n" +msgid "%s: symbols remain in the index symbol table, but without corresponding entries in the index table\n" +msgstr "%s: có ký hiệu còn lại trong bảng ký hiệu chỉ mục, mà không có mục nhập tương ứng trong bảng ký hiệu\n" -#: readelf.c:9749 +#: readelf.c:11210 +#, c-format +msgid "%s: failed to seek back to start of object files in the archive\n" +msgstr "%s: lỗi tìm ngược về đầu của các tập tin đối tượng trong kho\n" + +#: readelf.c:11238 +#, c-format +msgid "%s: failed to seek to next archive header\n" +msgstr "%s: lỗi tìm tới dòng đầu kho kế tiếp\n" + +#: readelf.c:11266 readelf.c:11275 #, c-format msgid "%s: bad archive file name\n" msgstr "%s: tên tập tin kho sai\n" -#: readelf.c:9781 +#: readelf.c:11294 readelf.c:11370 #, c-format -msgid "%s: failed to seek to next archive header\n" -msgstr "%s: việc tìm tới dòng đầu kho kế tiếp bị lỗi\n" +msgid "Input file '%s' is not readable.\n" +msgstr "Tập tin nhập « %s » không có khả năng đọc.\n" -#: readelf.c:9815 +#: readelf.c:11316 +#, c-format +msgid "%s: failed to seek to archive member.\n" +msgstr "%s: lỗi tìm tới mục kho lưu.\n" + +#: readelf.c:11354 #, c-format msgid "'%s': No such file\n" msgstr "« %s »: không có tập tin như vậy\n" -#: readelf.c:9817 +#: readelf.c:11356 #, c-format msgid "Could not locate '%s'. System error message: %s\n" msgstr "Không thể định vị « %s ». Thông điệp lỗi hệ thống: %s\n" -#: readelf.c:9824 +#: readelf.c:11363 #, c-format msgid "'%s' is not an ordinary file\n" -msgstr "« %s » không phải là tập tin chuẩn\n" +msgstr "« %s » không phải là một tập tin thông thường\n" -#: readelf.c:9831 +#: readelf.c:11376 #, c-format -msgid "Input file '%s' is not readable.\n" -msgstr "Tập tin nhập « %s » không có khả năng đọc.\n" +msgid "%s: Failed to read file's magic number\n" +msgstr "%s: lỗi đọc số ma thuật của tập tin\n" -#: rename.c:130 +#: readelf.c:11388 +#, c-format +msgid "File %s is not an archive so its index cannot be displayed.\n" +msgstr "Tập tin %s không phải là một kho lưu thì không có chỉ mục để hiển thị.\n" + +#: rename.c:124 #, c-format msgid "%s: cannot set time: %s" msgstr "%s: không thể lập thời gian: %s" #. We have to clean up here. -#: rename.c:165 rename.c:203 +#: rename.c:159 rename.c:197 #, c-format -msgid "unable to rename '%s' reason: %s" -msgstr "không thể đổi tên %s vì lý do : %s" +msgid "unable to rename '%s'; reason: %s" +msgstr "không thể thay tên « %s »; lý do : %s" -#: rename.c:211 +#: rename.c:205 #, c-format -msgid "unable to copy file '%s' reason: %s" -msgstr "không thể sao chép tập tin « %s » vì lý do : %s" +msgid "unable to copy file '%s'; reason: %s" +msgstr "không thể sao chép tập tin « %s »; lý do : %s" -#: resbin.c:119 +#: resbin.c:120 #, c-format msgid "%s: not enough binary data" msgstr "%s: không đủ dữ liệu nhị phân" -#: resbin.c:135 +#: resbin.c:136 msgid "null terminated unicode string" msgstr "chuỗi Unicode không được chấm dứt rỗng" -#: resbin.c:162 resbin.c:168 +#: resbin.c:163 resbin.c:169 msgid "resource ID" -msgstr "ID tài nguyên" +msgstr "mã số tài nguyên" -#: resbin.c:207 +#: resbin.c:208 msgid "cursor" msgstr "con chạy" -#: resbin.c:238 resbin.c:245 +#: resbin.c:239 resbin.c:246 msgid "menu header" msgstr "dòng đầu trình đơn" -#: resbin.c:254 +#: resbin.c:255 msgid "menuex header" msgstr "dòng đầu trình đơn menuex" -#: resbin.c:258 +#: resbin.c:259 msgid "menuex offset" msgstr "hiệu số trình đơn menuex" -#: resbin.c:263 +#: resbin.c:264 #, c-format msgid "unsupported menu version %d" msgstr "phiên bản trình đơn không được hỗ trợ %d" -#: resbin.c:288 resbin.c:303 resbin.c:365 +#: resbin.c:289 resbin.c:304 resbin.c:366 msgid "menuitem header" msgstr "dòng đầu mục trình đơn" -#: resbin.c:395 +#: resbin.c:396 msgid "menuitem" msgstr "mục trình đơn" -#: resbin.c:432 resbin.c:460 +#: resbin.c:433 resbin.c:461 msgid "dialog header" msgstr "dòng đầu đối thoại" -#: resbin.c:450 +#: resbin.c:451 #, c-format msgid "unexpected DIALOGEX version %d" msgstr "ngờ đối thoại DIALOGEX phiên bản %d" -#: resbin.c:495 +#: resbin.c:496 msgid "dialog font point size" msgstr "kích cỡ điểm phông chữ đối thoại" -#: resbin.c:503 +#: resbin.c:504 msgid "dialogex font information" msgstr "thông tin phông chữ đối thoại dialogex" -#: resbin.c:529 resbin.c:547 +#: resbin.c:530 resbin.c:548 msgid "dialog control" msgstr "điều kiện đối thoại" -#: resbin.c:539 +#: resbin.c:540 msgid "dialogex control" msgstr "điều kiện đối thoại dialogex" -#: resbin.c:568 +#: resbin.c:569 msgid "dialog control end" msgstr "kết thúc điều khiển đối thoại" -#: resbin.c:580 +#: resbin.c:581 msgid "dialog control data" msgstr "dữ liệu điều khiển đối thoại" -#: resbin.c:620 +#: resbin.c:621 msgid "stringtable string length" -msgstr "độ dài bảng chuỗi" +msgstr "chiều dài bảng chuỗi" -#: resbin.c:630 +#: resbin.c:631 msgid "stringtable string" -msgstr "chuỗi bảng chuỗi" +msgstr "chuỗi kiểu bảng chuỗi" -#: resbin.c:660 +#: resbin.c:661 msgid "fontdir header" msgstr "dòng đầu thư mục phông chữ" -#: resbin.c:674 +#: resbin.c:675 msgid "fontdir" msgstr "thư mục phông chữ" -#: resbin.c:691 +#: resbin.c:692 msgid "fontdir device name" msgstr "tên thiết bị thư mục phông chữ" -#: resbin.c:697 +#: resbin.c:698 msgid "fontdir face name" msgstr "tên mặt thư mục phông chữ" -#: resbin.c:737 +#: resbin.c:738 msgid "accelerator" msgstr "phím tắt" -#: resbin.c:796 +#: resbin.c:797 msgid "group cursor header" msgstr "dòng đầu con chạy nhóm" -#: resbin.c:800 resrc.c:1306 +#: resbin.c:801 resrc.c:1355 #, c-format msgid "unexpected group cursor type %d" msgstr "kiểu con chạy nhóm bất thường %d" -#: resbin.c:815 +#: resbin.c:816 msgid "group cursor" msgstr "con chạy nhóm" -#: resbin.c:851 +#: resbin.c:852 msgid "group icon header" msgstr "dòng đầu biểu tượng nhóm" -#: resbin.c:855 resrc.c:1253 +#: resbin.c:856 resrc.c:1302 #, c-format msgid "unexpected group icon type %d" msgstr "kiểu biểu tượng nhóm bất thường %d" -#: resbin.c:870 +#: resbin.c:871 msgid "group icon" msgstr "biểu tượng nhóm" -#: resbin.c:934 resbin.c:1150 +#: resbin.c:935 resbin.c:1151 msgid "unexpected version string" msgstr "chuỗi phiên bản bất thường" -#: resbin.c:965 +#: resbin.c:966 #, c-format msgid "version length %d does not match resource length %lu" msgstr "độ dài phiên bản %d không khớp độ dài tài nguyên %lu." -#: resbin.c:969 +#: resbin.c:970 #, c-format msgid "unexpected version type %d" msgstr "kiểu phiên bản bất thường %d" -#: resbin.c:981 +#: resbin.c:982 #, c-format msgid "unexpected fixed version information length %ld" msgstr "độ dài thông tin phiên bản cố định bất thường %ld" -#: resbin.c:984 +#: resbin.c:985 msgid "fixed version info" msgstr "thông tin phiên bản cố định" -#: resbin.c:988 +#: resbin.c:989 #, c-format msgid "unexpected fixed version signature %lu" msgstr "chữ ký phiên bản cố định bất thường %lu" -#: resbin.c:992 +#: resbin.c:993 #, c-format msgid "unexpected fixed version info version %lu" msgstr "phiên bản thông tin phiên bản cố định %lu" -#: resbin.c:1021 +#: resbin.c:1022 msgid "version var info" msgstr "hông tin tạm phiên bản" -#: resbin.c:1038 +#: resbin.c:1039 #, c-format msgid "unexpected stringfileinfo value length %ld" msgstr "độ dài giá trị thông tin tập tin chuỗi bất thường %ld" -#: resbin.c:1048 +#: resbin.c:1049 #, c-format msgid "unexpected version stringtable value length %ld" msgstr "độ dài giá trị bảng chuỗi phiên bản bất thường %ld" -#: resbin.c:1082 +#: resbin.c:1083 #, c-format msgid "unexpected version string length %ld != %ld + %ld" msgstr "độ dài chuỗi phiên bản bất thường %ld != %ld + %ld" -#: resbin.c:1093 +#: resbin.c:1094 #, c-format msgid "unexpected version string length %ld < %ld" msgstr "độ dài chuỗi phiên bản bất thường %ld < %ld" -#: resbin.c:1110 +#: resbin.c:1111 #, c-format msgid "unexpected varfileinfo value length %ld" msgstr "độ dài giá trị thông tin tập tin tạm bất thường %ld" -#: resbin.c:1129 +#: resbin.c:1130 msgid "version varfileinfo" msgstr "thông tin tập tin tạm phiên bản" -#: resbin.c:1144 +#: resbin.c:1145 #, c-format msgid "unexpected version value length %ld" msgstr "độ dài giá trị phiên bản bất thường %ld" @@ -5380,7 +5978,7 @@ msgstr "kích cỡ dữ liệu tài nguyên" msgid "filename required for COFF output" msgstr "tên tập tin cần thiết cho kết xuất COFF" -#: rescoff.c:718 +#: rescoff.c:715 msgid "can't get BFD_RELOC_RVA relocation type" msgstr "không thể lấy kiểu việc định vị lại « BFD_RELOC_RVA »" @@ -5413,7 +6011,7 @@ msgstr "Đang dùng tập tin tạm thời « %s » để đọc dữ liệu xu #: resrc.c:345 #, c-format msgid "can't popen `%s': %s" -msgstr "Không thể popen (mở p) « %s »: %s" +msgstr "Không thể popen « %s »: %s" #: resrc.c:347 #, c-format @@ -5430,82 +6028,87 @@ msgstr "Đã thử « %s »\n" msgid "Using `%s'\n" msgstr "Đang dùng « %s »\n" +#: resrc.c:608 +msgid "preprocessing failed." +msgstr "lỗi tiền xử lý." + # Variable: don't translate / Biến: đừng dịch -#: resrc.c:583 +#: resrc.c:631 #, c-format msgid "%s:%d: %s\n" msgstr "%s:%d: %s\n" -#: resrc.c:591 +#: resrc.c:639 #, c-format msgid "%s: unexpected EOF" msgstr "%s: gặp kết thúc tập tin bất thường" -#: resrc.c:640 +#: resrc.c:688 #, c-format msgid "%s: read of %lu returned %lu" msgstr "%s: việc đọc %lu đã trả gởi %lu" -#: resrc.c:678 resrc.c:1453 +#: resrc.c:727 resrc.c:1502 #, c-format msgid "stat failed on bitmap file `%s': %s" -msgstr "việc lấy các thông tin bị lỗi trên tập tin bitmap « %s »: %s" +msgstr "lỗi lấy trạng thái về tập tin mảng ảnh « %s »: %s" -#: resrc.c:729 +#: resrc.c:778 #, c-format msgid "cursor file `%s' does not contain cursor data" msgstr "tập tin con chạy « %s » không chứa dữ liệu con chạy" -#: resrc.c:761 resrc.c:1161 +#: resrc.c:810 resrc.c:1210 #, c-format msgid "%s: fseek to %lu failed: %s" -msgstr "%s: việc fseek (tìm f) tới %lu bị lỗi: %s" +msgstr "%s: lỗi fseek tới %lu: %s" -#: resrc.c:887 +#: resrc.c:936 msgid "help ID requires DIALOGEX" -msgstr "ID trợ giúp cần thiết DIALOGEX (đối thoại)" +msgstr "mã số trợ giúp cần thiết DIALOGEX" -#: resrc.c:889 +#: resrc.c:938 msgid "control data requires DIALOGEX" -msgstr "dữ liệu điều khiển cần thiết DIALOGEX (đối thoại)" +msgstr "dữ liệu điều khiển cần thiết DIALOGEX" -#: resrc.c:917 +#: resrc.c:966 #, c-format msgid "stat failed on font file `%s': %s" -msgstr "việc lấy các thông tin bị lỗi trên tập tin phông chữ « %s »: %s" +msgstr "lỗi lấy trạng thái về tập tin phông chữ « %s »: %s" -#: resrc.c:1130 +#: resrc.c:1179 #, c-format msgid "icon file `%s' does not contain icon data" msgstr "tập tin biểu tượng « %s » không chứa dữ liệu biểu tượng" -#: resrc.c:1675 resrc.c:1710 +#: resrc.c:1724 resrc.c:1759 #, c-format msgid "stat failed on file `%s': %s" -msgstr "việc lấy các thông tin bị lỗi trên tập tin « %s »: %s" +msgstr "lỗi lấy trạng thái về tập tin « %s »: %s" -#: resrc.c:1891 +#: resrc.c:1940 #, c-format msgid "can't open `%s' for output: %s" -msgstr "không thể mở « %s » để xuất: %s" +msgstr "không thể mở « %s » cho kết xuất: %s" -#: size.c:84 +#: size.c:79 #, c-format msgid " Displays the sizes of sections inside binary files\n" msgstr " Hiển thị kích cỡ của các phần ở trong tập tin nhị phân\n" -#: size.c:85 +#: size.c:80 #, c-format msgid " If no input file(s) are specified, a.out is assumed\n" msgstr " Nếu chưa ghi rõ tập tin nhập, giả sử \n" -#: size.c:86 +#: size.c:81 #, c-format msgid "" " The options are:\n" " -A|-B --format={sysv|berkeley} Select output style (default is %s)\n" " -o|-d|-x --radix={8|10|16} Display numbers in octal, decimal or hex\n" " -t --totals Display the total sizes (Berkeley only)\n" +" --common Display total size for *COM* syms\n" " --target= Set the binary file format\n" " @ Read options from \n" " -h --help Display this information\n" @@ -5514,35 +6117,33 @@ msgid "" msgstr "" " Tùy chọn:\n" " -A|-B --format={sysv|berkeley}\n" -"\t\t\tChọn kiểu dáng xuất (mặc định là %s)\n" -"\t\t\t(định dạng)\n" +"\t\t\tChọn kiểu dáng kết xuất (mặc định là %s)\n" " -o|-d|-x --radix={8|10|16}\n" -"\t\t\tHiển thị số dạng bát phân, thập phân hay thập lục\n" -"\t\t\t(cơ sở)\n" -" -t --totals Hiển thị các kích cỡ _tổng cổng_ (chỉ Berkeley)\n" -" --target= \tLập định dạng tập tin nhị phân\n" -"\t\t\t(đích)\n" +"\t\t\tHiển thị các số dạng bát phân, thập phân hay thập lục\n" +" -t --totals Hiển thị các kích cỡ tổng cộng (chỉ Berkeley)\n" +" --common Hiển thị kích cỡ tổng cổng cho các sym *COM*\n" +" --target= Lập định dạng tập tin nhị phân\n" " @ Đọc các tùy chọn từ tập tin đó\n" -" -h --help Hiển thị _trợ giúp_ này\n" -" -v --version Hiển thị _phiên bản_ của chương trình này\n" +" -h --help Hiển thị trợ giúp này\n" +" -v --version Hiển thị phiên bản của chương trình này\n" "\n" -#: size.c:159 +#: size.c:160 #, c-format msgid "invalid argument to --format: %s" msgstr "đối sô không hợp lệ tới « --format » (định dạng): %s" -#: size.c:186 +#: size.c:187 #, c-format msgid "Invalid radix: %s\n" msgstr "Cơ sở không hợp lệ: %s\n" -#: srconv.c:1724 +#: srconv.c:1731 #, c-format msgid "Convert a COFF object file into a SYSROFF object file\n" msgstr "Chuyển đổi một tập tin đối tượng COFF thành một tập tin đối tượng SYSROFF\n" -#: srconv.c:1725 +#: srconv.c:1732 #, c-format msgid "" " The options are:\n" @@ -5565,12 +6166,12 @@ msgstr "" " -h --help \t\t\tHiển thị _trợ giúp_ này\n" " -v --version \t\tIn ra số thứ tự _phiên bản_ của chương trình\n" -#: srconv.c:1871 +#: srconv.c:1878 #, c-format msgid "unable to open output file %s" msgstr "không thể mở tập tin kết xuất %s" -#: stabs.c:328 stabs.c:1706 +#: stabs.c:328 stabs.c:1726 msgid "numeric overflow" msgstr "tràn thuộc số" @@ -5600,132 +6201,132 @@ msgstr "không rõ tên mã C++" #. Complain and keep going, so compilers can invent new #. cross-reference types. -#: stabs.c:1251 +#: stabs.c:1271 msgid "unrecognized cross reference type" msgstr "không nhận diện kiểu tham chiếu chéo" #. Does this actually ever happen? Is that why we are worrying #. about dealing with it rather than just calling error_type? -#: stabs.c:1798 +#: stabs.c:1818 msgid "missing index type" msgstr "thiếu kiểu chỉ mục" -#: stabs.c:2112 +#: stabs.c:2134 msgid "unknown virtual character for baseclass" msgstr "không rõ ký tự ảo cho hạng cơ bản" -#: stabs.c:2130 +#: stabs.c:2152 msgid "unknown visibility character for baseclass" msgstr "không rõ ký tự tính trạng hiển thị cho hạng cơ bản" -#: stabs.c:2316 +#: stabs.c:2338 msgid "unnamed $vb type" msgstr "kiểu $vb chưa có tên" -#: stabs.c:2322 +#: stabs.c:2344 msgid "unrecognized C++ abbreviation" msgstr "không nhận biết viết tắt C++" -#: stabs.c:2398 +#: stabs.c:2420 msgid "unknown visibility character for field" msgstr "không rõ ký tự tính trạng hiển thị cho trường" -#: stabs.c:2650 +#: stabs.c:2672 msgid "const/volatile indicator missing" msgstr "thiếu chỉ thị bất biến/hay thay đổi" -#: stabs.c:2886 +#: stabs.c:2908 #, c-format msgid "No mangling for \"%s\"\n" msgstr "Không có việc tháo gỡ cho « %s »\n" -#: stabs.c:3186 +#: stabs.c:3208 msgid "Undefined N_EXCL" msgstr "Chưa định nghĩa « N_EXCL »" -#: stabs.c:3266 +#: stabs.c:3288 #, c-format msgid "Type file number %d out of range\n" msgstr "Số kiểu tập tin %d ở ngoài phạm vi\n" -#: stabs.c:3271 +#: stabs.c:3293 #, c-format msgid "Type index number %d out of range\n" msgstr "Số kiểu chỉ mục %d ở ngoài phạm vi\n" -#: stabs.c:3350 +#: stabs.c:3372 #, c-format msgid "Unrecognized XCOFF type %d\n" msgstr "Không nhận diện kiểu XCOFF %d\n" -#: stabs.c:3642 +#: stabs.c:3664 #, c-format msgid "bad mangled name `%s'\n" msgstr "tên đã rối sai « %s »\n" -#: stabs.c:3737 +#: stabs.c:3759 #, c-format msgid "no argument types in mangled string\n" msgstr "không có kiểu đối số trong chuỗi đã rối\n" -#: stabs.c:5091 +#: stabs.c:5113 #, c-format msgid "Demangled name is not a function\n" msgstr "Tên đã tháo gỡ không phải là hàm\n" -#: stabs.c:5133 +#: stabs.c:5155 #, c-format msgid "Unexpected type in v3 arglist demangling\n" msgstr "Gặp kiểu bất thường trong việc tháo gỡ danh sách đối số v3\n" -#: stabs.c:5200 +#: stabs.c:5222 #, c-format msgid "Unrecognized demangle component %d\n" msgstr "Không nhận diện thành phần tháo gỡ %d\n" -#: stabs.c:5252 +#: stabs.c:5274 #, c-format msgid "Failed to print demangled template\n" msgstr "Việc in ra biểu mẫu đã tháo gỡ bị lỗi\n" -#: stabs.c:5332 +#: stabs.c:5354 #, c-format msgid "Couldn't get demangled builtin type\n" -msgstr "Không thể lấy kiểu builtin (điều có sẵn) đã tháo gỡ\n" +msgstr "Không thể lấy kiểu dựng sẳn (builtin) đã tháo gỡ\n" -#: stabs.c:5381 +#: stabs.c:5403 #, c-format msgid "Unexpected demangled varargs\n" -msgstr "Gặp một số varargs (đối số biến) đã tháo gỡ bất thường\n" +msgstr "Gặp một số varargs đã tháo gỡ bất thường\n" -#: stabs.c:5388 +#: stabs.c:5410 #, c-format msgid "Unrecognized demangled builtin type\n" -msgstr "Không nhận diện kiểu builtin (điều có sẵn) đã tháo gỡ\n" +msgstr "Không nhận diện kiểu dựng sẳn (builtin) đã tháo gỡ\n" -#: strings.c:215 +#: strings.c:201 strings.c:260 #, c-format -msgid "invalid number %s" -msgstr "số không hợp lệ %s" +msgid "invalid integer argument %s" +msgstr "đối số kiểu số nguyên vẫn không hợp lệ %s" -#: strings.c:697 +#: strings.c:263 #, c-format -msgid "invalid integer argument %s" -msgstr "đối số số nguyên không hợp lệ %s" +msgid "invalid minimum string length %d" +msgstr "sai đắt chiều dài chuỗi tối thiểu %d" -#: strings.c:706 +#: strings.c:660 #, c-format msgid " Display printable strings in [file(s)] (stdin by default)\n" msgstr " Hiển thị các chuỗi có khả năng in trong [tập tin...] (mặc định là thiết bị nhập chuẩn)\n" -#: strings.c:707 +#: strings.c:661 #, c-format msgid "" " The options are:\n" " -a - --all Scan the entire file, not just the data section\n" " -f --print-file-name Print the name of the file before each string\n" " -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n" -" - least [number] characters (default 4).\n" +" - least [number] characters (default 4).\n" " -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n" " -o An alias for --radix=o\n" " -T --target= Specify the binary file format\n" @@ -5733,34 +6334,31 @@ msgid "" " s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" " @ Read options from \n" " -h --help Display this information\n" -" -v --version Print the program's version number\n" +" -v -V --version Print the program's version number\n" msgstr "" " Tùy chọn:\n" " -a - --all \t\tQuét toàn bộ tập tin, không chỉ phần dữ liệu\n" -"\t\t(hết)\n" -" -f --print-file-name \t\t\t _In ra tên tập tin_ trước mỗi chuỗi\n" +" -f --print-file-name \t\t\tHiển thị tên tập tin ở trước mỗi chuỗi\n" " -n --bytes=[số]\n" -"\t\tĐịnh vị và in ra dãy đã chấm dứt NUL tại số byte này\n" -" - số ký tự tối thiểu (mặc định là 4).\n" +"\t\tTìm và in ra dãy đã chấm dứt NUL nào có ít nhất\n" +" - số ký tự này (mặc định là 4).\n" " -t --radix={o,d,x}\n" "\t\tIn ra địa điểm của chuỗi dạng bát phân, thập phân hay thập lục\n" -"\t\t(cơ sở)\n" " -o \t\tBiệt hiệu cho « --radix=o » \n" " -T --target= \t\tGhi rõ định dạng tập tin nhị phân\n" -"\t\t(đích)\n" " -e --encoding={s,S,b,l,B,L}\n" "\t\tChọn kích cỡ ký tự và tính trạng cuối (endian):\n" " \ts = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n" " @ Đọc các tùy chọn từ tập tin đó\n" -" -h --help \t\tHiển thị _trợ giúp_ này\n" -" -v --version \t\tIn ra số thứ tự _phiên bản_ của chương trình\n" +" -h --help \t\tHiển thị trợ giúp này\n" +" -v -V --version \t\tIn ra số thứ tự phiên bản của chương trình\n" -#: sysdump.c:641 +#: sysdump.c:647 #, c-format msgid "Print a human readable interpretation of a SYSROFF object file\n" msgstr "In ra lời giải dịch tập tin đối tượng SYSROFF cho người đọc\n" -#: sysdump.c:642 +#: sysdump.c:648 #, c-format msgid "" " The options are:\n" @@ -5768,40 +6366,42 @@ msgid "" " -v --version Print the program's version number\n" msgstr "" " Tùy chọn:\n" -" -h --help \t\tHiển thị _trợ giúp_ này\n" -" -v --version \t\tIn ra số thứ tự _phiên bản_ của chương trình\n" +" -h --help \t\tHiển thị trợ giúp này\n" +" -v --version \t\tIn ra số thứ tự phiên bản của chương trình\n" -#: sysdump.c:709 +#: sysdump.c:715 #, c-format msgid "cannot open input file %s" -msgstr "không thể mở tập tin nhập %s" +msgstr "không thể mở tập tin nhập liệu %s" -#: version.c:34 +#: version.c:35 #, c-format -msgid "Copyright 2007 Free Software Foundation, Inc.\n" -msgstr "Tác quyền © năm 2007 Tổ chức Phần mềm Tự do.\n" +msgid "Copyright 2009 Free Software Foundation, Inc.\n" +msgstr "Tác quyền © năm 2009 Tổ chức Phần mềm Tự do.\n" -#: version.c:35 +#: version.c:36 #, 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" +"the GNU General Public License version 3 or (at your option) any later version.\n" +"This program has absolutely no warranty.\n" msgstr "" -"Chương trình này là phần mềm tự do; bạn có thể phát hành lại\n" -"nó với điều kiện của Quyền Công Chung GNU (GPL).\n" +"Chương trình này là phần mềm tự do; bạn có quyền phát hành lại\n" +"nó với điều kiện của Giấy Phép Công Cộng GNU (GPL)\n" +"phiên bản 3 hoặc (tùy chọn) bắt cứ phiên bản sau nào.\n" "Chương trình này không bảo đảm gì cả.\n" -#: windmc.c:194 +#: windmc.c:195 #, c-format msgid "can't create %s file ,%s' for output.\n" msgstr "không thể tạo tập tin %s « %s » để xuất ra.\n" -#: windmc.c:202 +#: windmc.c:203 #, c-format msgid "Usage: %s [option(s)] [input-file]\n" -msgstr "Cách sử dụng: %s [tùy_chọn] [tập_tin_nhập]\n" +msgstr "Sử dụng: %s [tùy_chọn] [tập_tin_nhập]\n" -#: windmc.c:204 +#: windmc.c:205 #, c-format msgid "" " The options are:\n" @@ -5858,7 +6458,7 @@ msgstr "" " -x --xdbg= Nơi cần tạo tập tin bao gồm C .dbg mà\n" "\tánh xạ các mã nhận diện thông điệp tới tên kiểu ký hiệu của nó.\n" -#: windmc.c:224 +#: windmc.c:225 #, c-format msgid "" " -H --help Print this help message\n" @@ -5869,31 +6469,36 @@ msgstr "" " -v --verbose Hiển thị chi tiết về tiến hành\n" " -V --version In ra thông tin về phiên bản\n" -#: windmc.c:287 windres.c:415 +#: windmc.c:296 windres.c:415 #, c-format msgid "%s: warning: " msgstr "%s: cảnh báo : " -#: windmc.c:288 +#: windmc.c:297 #, c-format msgid "A codepage was specified switch ,%s' and UTF16.\n" msgstr "Một trang mã được ghi rõ chuyển đổi « %s » và UTF16.\n" -#: windmc.c:289 +#: windmc.c:298 #, c-format msgid "\tcodepage settings are ignored.\n" msgstr "\tthiết lập trang mã bị bỏ qua.\n" -#: windmc.c:333 +#: windmc.c:342 msgid "try to add a ill language." msgstr "thử thêm một ngôn ngữ sai." -#: windmc.c:1142 +#: windmc.c:1151 #, c-format msgid "unable to open file ,%s' for input.\n" msgstr "không thể mở tập tin « %s » để nhập vào.\n" -#: windmc.c:1161 +#: windmc.c:1159 +#, c-format +msgid "unable to read contents of %s" +msgstr "không thể đọc nội dung của %s" + +#: windmc.c:1171 msgid "input file does not seems to be UFT16.\n" msgstr "tập tin nhập vào có vẻ không phải UTF16.\n" @@ -5936,7 +6541,7 @@ msgstr "không thể quyết định kiểu tập tin « %s »: hãy sử dụng #: windres.c:663 #, c-format msgid "Usage: %s [option(s)] [input-file] [output-file]\n" -msgstr "Usage: %s [tùy_chọn...] [tập_tin_nhập] [tập_tin_xuất]\n" +msgstr "Sử dụng: %s [tùy_chọn...] [tập_tin_nhập] [tập_tin_xuất]\n" #: windres.c:665 #, c-format @@ -6012,24 +6617,24 @@ msgstr "" "thiết bị nhập chuẩn, mặc định là rc. Không có tập tin xuất thì\n" "thiết bị xuất chuẩn, mặc định là rc.\n" -#: windres.c:828 +#: windres.c:848 msgid "invalid codepage specified.\n" msgstr "ghi rõ trang mã không hợp lệ.\n" -#: windres.c:843 +#: windres.c:863 msgid "invalid option -f\n" msgstr "tùy chọn không hợp lệ « -f »\n" -#: windres.c:848 +#: windres.c:868 msgid "No filename following the -fo option.\n" msgstr "Không có tên tập tin đi sau tùy chọn « -fo ».\n" -#: windres.c:907 +#: windres.c:927 #, c-format msgid "Option -I is deprecated for setting the input format, please use -J instead.\n" msgstr "Tùy chọn « -l » bị phản đối để lập định dạng nhập, hãy dùng « -J » thay thế.\n" -#: windres.c:1027 +#: windres.c:1037 msgid "no resources" msgstr "không có tài nguyên" @@ -6047,108 +6652,3 @@ msgstr "stab_int_type: (kiểu số nguyên stab) kích cỡ sai %u" #, c-format msgid "%s: warning: unknown size for field `%s' in struct" msgstr "%s: cảnh báo : không rõ kích cỡ cho trường « %s » trong cấu trúc" - -#~ msgid "stat returns negative size for %s" -#~ msgstr "việc stat (lấy các thông tin) trả gởi kích cỡ âm cho %s" - -#~ msgid "%s section needs a populated .debug_info section\n" -#~ msgstr "Phần %s cần phần « .debug_info » (thông tin gỡ lỗi) có dữ liệu\n" - -#~ msgid "%s section has more comp units than .debug_info section\n" -#~ msgstr "Phần %s có nhiều đơn vị biên dịch hơn phần « .debug_info » (thông tin gỡ lỗi)\n" - -#~ msgid "" -#~ "assuming that the pointer size is %d, from the last comp unit in .debug_info\n" -#~ "\n" -#~ msgstr "" -#~ "giả sử kích cỡ con trỏ là %d, từ đơn vị biên dịch cuối cùng trong « .debug_info » (thông tin gỡ lỗi)\n" -#~ "\n" - -#~ msgid " (Pointer size: %u)%s\n" -#~ msgstr " (Cỡ con trỏ :\t\t\t%u)%s\n" - -#~ msgid "Extend line ops need a valid pointer size, guessing at 4\n" -#~ msgstr "Thao tác kéo dài đường cần thiết kích cỡ con trỏ hợp lệ, đang đoán nó là 4\n" - -#~ msgid "unsupported or unknown DW_CFA_%d\n" -#~ msgstr "« DW_CFA_%d » không được hỗ trợ, hay không rõ\n" - -#~ msgid "there are no sections to be copied!" -#~ msgstr "• Không có phần cần sao chép. •" - -#~ msgid "error: the input file '%s' is empty" -#~ msgstr "lỗi : tập tin nhập « %s » là rỗng" - -#~ msgid "alternate machine code index must be positive" -#~ msgstr "chỉ mục mã máy xen kẽ phải là dương" - -#~ msgid "Out of memory" -#~ msgstr "Hết bộ nhớ" - -#~ msgid "can't read resource section" -#~ msgstr "không thể đọc phần tài nguyên" - -#~ msgid "flags" -#~ msgstr "cờ" - -#~ msgid "debug_str section data" -#~ msgstr "debug_str section data" - -#~ msgid "debug_loc section data" -#~ msgstr "dữ liệu phần « debug_loc » (định vị gỡ lỗi)" - -#~ msgid "debug_range section data" -#~ msgstr "dữ liệu phần « debug_range » (phạm vị gỡ lỗi)" - -#~ msgid "%s: skipping unexpected symbol type %s in relocation in section .rela%s\n" -#~ msgstr "%s: đang nhảy qua kiểu ký hiệu bất thường %s trong việc định vị lại trong phần .rela%s\n" - -#~ msgid "debug_abbrev section data" -#~ msgstr "dữ liệu phần « .debug_abbrev » (gỡ lỗi viết tắt)" - -#~ msgid "extracting information from .debug_info section" -#~ msgstr "đang trích thông tin ra phần « .debug_info » (thông tin gỡ lỗi)" - -#~ msgid "" -#~ "\n" -#~ "The .debug_loc section is empty.\n" -#~ msgstr "" -#~ "\n" -#~ "Phần « .debug_loc » (gỡ lỗi định vị) rỗng:\n" - -#~ msgid "" -#~ "Contents of the .debug_loc section:\n" -#~ "\n" -#~ msgstr "" -#~ "Nội dung của phần « .debug_info » (thông tin gỡ lỗi):\n" -#~ "\n" - -#~ msgid "" -#~ "Contents of the .debug_str section:\n" -#~ "\n" -#~ msgstr "" -#~ "Nội dung của phần « .debug_str » (chuỗi gỡ lỗi):\n" -#~ "\n" - -#~ msgid "" -#~ "\n" -#~ "The .debug_ranges section is empty.\n" -#~ msgstr "" -#~ "\n" -#~ "Phần « .debug_ranges » (các phạm vị gỡ lỗi) rỗng.\n" - -#~ msgid "" -#~ "Contents of the .debug_ranges section:\n" -#~ "\n" -#~ msgstr "" -#~ "Nội dung của phần « .debug_ranges » (các phạm vị gỡ lỗi):\n" -#~ "\n" - -#~ msgid "There is a hole [0x%lx - 0x%lx] in .debug_ranges section.\n" -#~ msgstr "Có một lỗ [0x%lx - 0x%lx] trong phần « .debug_ranges » (các phạm vị gỡ lỗi).\n" - -#~ msgid "There is an overlap [0x%lx - 0x%lx] in .debug_ranges section.\n" -#~ msgstr "Có một chồng lấp [0x%lx - 0x%lx] trong phần « .debug_ranges » (các phạm vị gỡ lỗi).\n" - -#~ msgid "debug section data" -#~ msgstr "dữ liệu phần gỡ lỗi" diff --git a/binutils/prdbg.c b/binutils/prdbg.c index 098bd58..d6988dc 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, 2006, 2007 + Copyright 1995, 1996, 1999, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor . Tags style generation written by Salvador E. Tropea . @@ -303,7 +303,7 @@ print_debugging_info (FILE *f, void *dhandle, bfd *abfd, asymbol **syms, info.filename = NULL; info.abfd = abfd; info.syms = syms; - info.demangler = demangler; + info.demangler = (char * (*)(struct bfd *, const char *, int)) demangler; if (as_tags) { @@ -499,6 +499,26 @@ print_vma (bfd_vma vma, char *buf, bfd_boolean unsignedp, bfd_boolean hexp) else sprintf (buf, "%ld", (long) vma); } +#if BFD_HOST_64BIT_LONG_LONG + else if (sizeof (vma) <= sizeof (unsigned long long)) + { +#ifndef __MSVCRT__ + if (hexp) + sprintf (buf, "0x%llx", (unsigned long long) vma); + else if (unsignedp) + sprintf (buf, "%llu", (unsigned long long) vma); + else + sprintf (buf, "%lld", (long long) vma); +#else + if (hexp) + sprintf (buf, "0x%I64x", (unsigned long long) vma); + else if (unsignedp) + sprintf (buf, "%I64u", (unsigned long long) vma); + else + sprintf (buf, "%I64d", (long long) vma); +#endif + } +#endif else { buf[0] = '0'; @@ -723,7 +743,7 @@ pr_function_type (void *p, int argcount, bfd_boolean varargs) /* Now the return type is on the top of the stack. */ - s = xmalloc (len); + s = (char *) xmalloc (len); LITSTRCPY (s, "(|) ("); if (argcount < 0) @@ -1297,7 +1317,7 @@ pr_class_static_member (void *p, const char *name, const char *physname, /* Add a base class to a class. */ static bfd_boolean -pr_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual, +pr_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean is_virtual, enum debug_visibility visibility) { struct pr_handle *info = (struct pr_handle *) p; @@ -1323,7 +1343,7 @@ pr_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual, if (! push_type (info, t)) return FALSE; - if (virtual) + if (is_virtual) { if (! prepend_type (info, "virtual ")) return FALSE; @@ -1931,8 +1951,6 @@ tg_start_compilation_unit (void * p, const char *filename ATTRIBUTE_UNUSED) { struct pr_handle *info = (struct pr_handle *) p; - fprintf (stderr, "New compilation unit: %s\n", filename); - free (info->filename); /* Should it be relative? best way to do it here?. */ info->filename = strdup (filename); @@ -2152,7 +2170,7 @@ tg_class_static_member (void *p, const char *name, len_var = strlen (name); len_class = strlen (info->stack->next->type); - full_name = xmalloc (len_var + len_class + 3); + full_name = (char *) xmalloc (len_var + len_class + 3); if (! full_name) return FALSE; sprintf (full_name, "%s::%s", info->stack->next->type, name); @@ -2183,7 +2201,7 @@ tg_class_static_member (void *p, const char *name, static bfd_boolean tg_class_baseclass (void *p, bfd_vma bitpos ATTRIBUTE_UNUSED, - bfd_boolean virtual, enum debug_visibility visibility) + bfd_boolean is_virtual, enum debug_visibility visibility) { struct pr_handle *info = (struct pr_handle *) p; char *t; @@ -2203,7 +2221,7 @@ tg_class_baseclass (void *p, bfd_vma bitpos ATTRIBUTE_UNUSED, if (! push_type (info, t)) return FALSE; - if (virtual) + if (is_virtual) { if (! prepend_type (info, "virtual ")) return FALSE; diff --git a/binutils/ranlib.sh b/binutils/ranlib.sh index 602d210..f6cee8a 100755 --- a/binutils/ranlib.sh +++ b/binutils/ranlib.sh @@ -1,6 +1,6 @@ #!/bin/sh # A simple ranlib script, to use less disk space than a ranlib program. -# Copyright 2007 Free Software Foundation, Inc. +# Copyright 2004, 2007 Free Software Foundation, Inc. # This program is part of GNU Binutils. diff --git a/binutils/rclex.c b/binutils/rclex.c index 5922106..07ae179 100644 --- a/binutils/rclex.c +++ b/binutils/rclex.c @@ -1,6 +1,6 @@ /* rclex.c -- lexer for Windows rc files parser */ -/* Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2007 +/* Copyright 1997, 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by Kai Tietz, Onevision. @@ -390,9 +390,9 @@ handle_quotes (rc_uint_type *len) } else { - rcparse_warning ("unexpected character after '\"'"); ++t; - assert (ISSPACE (*t)); + if (! ISSPACE (*t)) + rcparse_warning ("unexpected character after '\"'"); while (ISSPACE (*t)) { if ((*t) == '\n') @@ -679,7 +679,7 @@ static void rclex_string (void) { int c; - + while ((c = rclex_peekch ()) != -1) { if (c == '\n') @@ -693,6 +693,18 @@ rclex_string (void) } else if (rclex_readch () == '"') { + /* PR 6714 + Skip any whitespace after the end of the double quotes. */ + do + { + c = rclex_peekch (); + if (ISSPACE (c)) + rclex_readch (); + else + c = -1; + } + while (c != -1); + if (rclex_peekch () == '"') rclex_readch (); else @@ -844,7 +856,11 @@ yylex (void) default: if (ISIDST (ch) || ch=='$') { - while ((ch = rclex_peekch ()) != -1 && (ISIDNUM (ch) || ch == '$' || ch == '.')) + while ((ch = rclex_peekch ()) != -1 + && (ISIDNUM (ch) || ch == '$' || ch == '.' + || ch == ':' || ch == '\\' || ch == '/' + || ch == '_' || ch == '-') + ) rclex_readch (); ch = IGNORE_CPP (rclex_translatekeyword (rclex_tok)); if (ch == STRING) diff --git a/binutils/rcparse.c b/binutils/rcparse.c index f620781..5b87727 100644 --- a/binutils/rcparse.c +++ b/binutils/rcparse.c @@ -268,7 +268,7 @@ /* 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, 2007 + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Extended by Kai Tietz, Onevision. @@ -399,7 +399,7 @@ typedef union YYSTYPE const unichar *s; } suni; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 404 "rcparse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -463,7 +463,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -628,16 +628,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 849 +#define YYLAST 835 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 112 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 99 /* YYNRULES -- Number of rules. */ -#define YYNRULES 268 +#define YYNRULES 270 /* YYNRULES -- Number of states. */ -#define YYNSTATES 514 +#define YYNSTATES 515 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -708,17 +708,18 @@ static const yytype_uint16 yyprhs[] = 505, 510, 513, 520, 521, 525, 528, 530, 532, 534, 536, 538, 540, 547, 548, 551, 554, 558, 564, 567, 573, 580, 588, 598, 603, 604, 607, 608, 610, 612, - 614, 616, 620, 624, 628, 629, 636, 637, 641, 646, - 648, 650, 652, 654, 656, 658, 660, 662, 664, 666, - 673, 678, 687, 688, 692, 695, 702, 703, 710, 717, - 721, 725, 729, 733, 737, 738, 747, 755, 756, 762, - 763, 767, 769, 771, 773, 775, 778, 780, 783, 784, - 787, 791, 796, 800, 801, 804, 805, 808, 810, 812, - 814, 816, 818, 820, 822, 824, 826, 828, 831, 833, - 835, 837, 840, 842, 845, 847, 850, 854, 859, 861, - 865, 866, 868, 871, 873, 875, 879, 882, 885, 889, - 893, 897, 901, 905, 909, 913, 917, 920, 922, 924, - 928, 931, 935, 939, 943, 947, 951, 955, 959 + 614, 616, 620, 624, 628, 631, 632, 639, 640, 644, + 649, 652, 654, 656, 658, 660, 662, 664, 666, 668, + 670, 672, 679, 684, 693, 694, 698, 701, 708, 709, + 716, 723, 727, 731, 735, 739, 743, 744, 753, 761, + 762, 768, 769, 773, 775, 777, 779, 781, 784, 786, + 789, 790, 793, 797, 802, 806, 807, 810, 811, 814, + 816, 818, 820, 822, 824, 826, 828, 830, 832, 834, + 837, 839, 841, 843, 846, 848, 851, 853, 856, 860, + 865, 867, 871, 872, 874, 877, 879, 881, 885, 888, + 891, 895, 899, 903, 907, 911, 915, 919, 923, 926, + 928, 930, 934, 937, 941, 945, 949, 953, 957, 961, + 965 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -769,7 +770,7 @@ static const yytype_int16 yyrhs[] = 202, 204, -1, 206, 205, 205, 205, 205, 155, -1, 206, 205, 205, 205, 205, 160, 204, 155, -1, 206, 205, 205, 205, 205, 160, 205, 205, 155, -1, 108, - 154, -1, -1, 154, 108, -1, 209, -1, 199, -1, + 154, -1, -1, 154, 108, -1, 209, -1, 198, -1, -1, 3, 174, 4, -1, -1, 108, 157, 202, -1, -1, 108, 159, 202, -1, -1, 108, 161, 202, -1, 190, 41, 194, 197, -1, 190, 42, 194, 197, -1, @@ -786,41 +787,41 @@ static const yytype_int16 yyrhs[] = 205, 205, 205, 204, 3, 171, 4, -1, 190, 68, 195, 197, -1, -1, 175, 176, -1, -1, 177, -1, 200, -1, 201, -1, 207, -1, 177, 108, 200, -1, - 177, 108, 201, -1, 177, 108, 207, -1, -1, 70, - 193, 3, 179, 180, 4, -1, -1, 180, 206, 198, - -1, 180, 206, 108, 198, -1, 190, -1, 48, -1, - 69, -1, 49, -1, 50, -1, 51, -1, 45, -1, - 46, -1, 43, -1, 44, -1, 190, 181, 193, 3, - 174, 4, -1, 190, 181, 193, 197, -1, 190, 52, - 193, 206, 205, 3, 184, 4, -1, -1, 184, 53, - 190, -1, 184, 60, -1, 190, 71, 186, 3, 187, - 4, -1, -1, 186, 72, 206, 205, 205, 205, -1, - 186, 73, 206, 205, 205, 205, -1, 186, 74, 206, - -1, 186, 75, 206, -1, 186, 76, 206, -1, 186, - 77, 206, -1, 186, 78, 206, -1, -1, 187, 79, - 3, 82, 3, 188, 4, 4, -1, 187, 80, 3, - 81, 198, 189, 4, -1, -1, 188, 81, 198, 108, - 198, -1, -1, 189, 205, 205, -1, 209, -1, 191, - -1, 199, -1, 93, -1, 209, 108, -1, 191, -1, - 191, 108, -1, -1, 193, 196, -1, 193, 55, 206, - -1, 193, 54, 206, 205, -1, 193, 56, 206, -1, - -1, 194, 196, -1, -1, 195, 196, -1, 83, -1, - 84, -1, 85, -1, 86, -1, 87, -1, 88, -1, - 89, -1, 92, -1, 93, -1, 199, -1, 198, 199, - -1, 91, -1, 92, -1, 96, -1, 200, 96, -1, - 95, -1, 201, 95, -1, 203, -1, 90, 203, -1, - 202, 98, 203, -1, 202, 98, 90, 203, -1, 94, - -1, 110, 206, 111, -1, -1, 205, -1, 108, 206, - -1, 207, -1, 94, -1, 110, 207, 111, -1, 106, - 207, -1, 102, 207, -1, 207, 103, 207, -1, 207, - 104, 207, -1, 207, 105, 207, -1, 207, 101, 207, - -1, 207, 102, 207, -1, 207, 100, 207, -1, 207, - 99, 207, -1, 207, 98, 207, -1, 108, 209, -1, - 210, -1, 94, -1, 110, 207, 111, -1, 106, 207, - -1, 210, 103, 207, -1, 210, 104, 207, -1, 210, - 105, 207, -1, 210, 101, 207, -1, 210, 102, 207, - -1, 210, 100, 207, -1, 210, 99, 207, -1, 210, - 98, 207, -1 + 177, 108, 201, -1, 177, 108, 207, -1, 177, 108, + -1, -1, 70, 193, 3, 179, 180, 4, -1, -1, + 180, 206, 198, -1, 180, 206, 108, 198, -1, 180, + 1, -1, 190, -1, 48, -1, 69, -1, 49, -1, + 50, -1, 51, -1, 45, -1, 46, -1, 43, -1, + 44, -1, 190, 181, 193, 3, 174, 4, -1, 190, + 181, 193, 197, -1, 190, 52, 193, 206, 205, 3, + 184, 4, -1, -1, 184, 53, 190, -1, 184, 60, + -1, 190, 71, 186, 3, 187, 4, -1, -1, 186, + 72, 206, 205, 205, 205, -1, 186, 73, 206, 205, + 205, 205, -1, 186, 74, 206, -1, 186, 75, 206, + -1, 186, 76, 206, -1, 186, 77, 206, -1, 186, + 78, 206, -1, -1, 187, 79, 3, 82, 3, 188, + 4, 4, -1, 187, 80, 3, 81, 198, 189, 4, + -1, -1, 188, 81, 198, 108, 198, -1, -1, 189, + 205, 205, -1, 209, -1, 191, -1, 199, -1, 93, + -1, 209, 108, -1, 191, -1, 191, 108, -1, -1, + 193, 196, -1, 193, 55, 206, -1, 193, 54, 206, + 205, -1, 193, 56, 206, -1, -1, 194, 196, -1, + -1, 195, 196, -1, 83, -1, 84, -1, 85, -1, + 86, -1, 87, -1, 88, -1, 89, -1, 92, -1, + 93, -1, 199, -1, 198, 199, -1, 91, -1, 92, + -1, 96, -1, 200, 96, -1, 95, -1, 201, 95, + -1, 203, -1, 90, 203, -1, 202, 98, 203, -1, + 202, 98, 90, 203, -1, 94, -1, 110, 206, 111, + -1, -1, 205, -1, 108, 206, -1, 207, -1, 94, + -1, 110, 207, 111, -1, 106, 207, -1, 102, 207, + -1, 207, 103, 207, -1, 207, 104, 207, -1, 207, + 105, 207, -1, 207, 101, 207, -1, 207, 102, 207, + -1, 207, 100, 207, -1, 207, 99, 207, -1, 207, + 98, 207, -1, 108, 209, -1, 210, -1, 94, -1, + 110, 207, 111, -1, 106, 207, -1, 210, 103, 207, + -1, 210, 104, 207, -1, 210, 105, 207, -1, 210, + 101, 207, -1, 210, 102, 207, -1, 210, 100, 207, + -1, 210, 99, 207, -1, 210, 98, 207, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -842,17 +843,18 @@ static const yytype_uint16 yyrline[] = 1036, 1040, 1044, 1052, 1055, 1059, 1066, 1070, 1074, 1078, 1082, 1086, 1095, 1106, 1109, 1126, 1130, 1134, 1138, 1142, 1146, 1150, 1154, 1164, 1177, 1177, 1189, 1193, 1200, 1208, - 1216, 1224, 1233, 1242, 1257, 1256, 1261, 1263, 1270, 1280, - 1284, 1289, 1294, 1299, 1304, 1309, 1314, 1319, 1324, 1335, - 1342, 1352, 1358, 1359, 1378, 1403, 1414, 1419, 1425, 1431, - 1436, 1441, 1446, 1451, 1466, 1469, 1473, 1481, 1484, 1492, - 1495, 1504, 1509, 1518, 1522, 1532, 1537, 1541, 1552, 1558, - 1564, 1569, 1574, 1585, 1590, 1602, 1607, 1619, 1624, 1629, - 1634, 1639, 1644, 1649, 1659, 1663, 1671, 1676, 1691, 1695, - 1704, 1708, 1720, 1724, 1746, 1750, 1754, 1758, 1765, 1769, - 1779, 1782, 1791, 1800, 1809, 1813, 1817, 1822, 1827, 1832, - 1837, 1842, 1847, 1852, 1857, 1862, 1873, 1882, 1893, 1897, - 1901, 1906, 1911, 1916, 1921, 1926, 1931, 1936, 1941 + 1216, 1224, 1233, 1242, 1251, 1261, 1260, 1265, 1267, 1272, + 1277, 1285, 1289, 1294, 1299, 1304, 1309, 1314, 1319, 1324, + 1329, 1340, 1347, 1357, 1363, 1364, 1383, 1408, 1419, 1424, + 1430, 1436, 1441, 1446, 1451, 1456, 1471, 1474, 1478, 1486, + 1489, 1497, 1500, 1509, 1514, 1523, 1527, 1537, 1542, 1546, + 1557, 1563, 1569, 1574, 1579, 1590, 1595, 1607, 1612, 1624, + 1629, 1634, 1639, 1644, 1649, 1654, 1664, 1668, 1676, 1681, + 1696, 1700, 1709, 1713, 1725, 1729, 1751, 1755, 1759, 1763, + 1770, 1774, 1784, 1787, 1796, 1805, 1814, 1818, 1822, 1827, + 1832, 1837, 1842, 1847, 1852, 1857, 1862, 1867, 1878, 1887, + 1898, 1902, 1906, 1911, 1916, 1921, 1926, 1931, 1936, 1941, + 1946 }; #endif @@ -939,17 +941,18 @@ static const yytype_uint8 yyr1[] = 167, 167, 167, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 173, 175, 174, 176, 176, 177, 177, - 177, 177, 177, 177, 179, 178, 180, 180, 180, 181, - 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, - 182, 183, 184, 184, 184, 185, 186, 186, 186, 186, - 186, 186, 186, 186, 187, 187, 187, 188, 188, 189, - 189, 190, 190, 191, 191, 192, 192, 192, 193, 193, - 193, 193, 193, 194, 194, 195, 195, 196, 196, 196, - 196, 196, 196, 196, 197, 197, 198, 198, 199, 199, - 200, 200, 201, 201, 202, 202, 202, 202, 203, 203, - 204, 204, 205, 206, 207, 207, 207, 207, 207, 207, - 207, 207, 207, 207, 207, 207, 208, 209, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210 + 177, 177, 177, 177, 177, 179, 178, 180, 180, 180, + 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 182, 182, 183, 184, 184, 184, 185, 186, 186, + 186, 186, 186, 186, 186, 186, 187, 187, 187, 188, + 188, 189, 189, 190, 190, 191, 191, 192, 192, 192, + 193, 193, 193, 193, 193, 194, 194, 195, 195, 196, + 196, 196, 196, 196, 196, 196, 197, 197, 198, 198, + 199, 199, 200, 200, 201, 201, 202, 202, 202, 202, + 203, 203, 204, 204, 205, 206, 207, 207, 207, 207, + 207, 207, 207, 207, 207, 207, 207, 207, 208, 209, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -971,17 +974,18 @@ static const yytype_uint8 yyr2[] = 4, 2, 6, 0, 3, 2, 1, 1, 1, 1, 1, 1, 6, 0, 2, 2, 3, 5, 2, 5, 6, 7, 9, 4, 0, 2, 0, 1, 1, 1, - 1, 3, 3, 3, 0, 6, 0, 3, 4, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 6, - 4, 8, 0, 3, 2, 6, 0, 6, 6, 3, - 3, 3, 3, 3, 0, 8, 7, 0, 5, 0, - 3, 1, 1, 1, 1, 2, 1, 2, 0, 2, - 3, 4, 3, 0, 2, 0, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 2, 1, 2, 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 + 1, 3, 3, 3, 2, 0, 6, 0, 3, 4, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 6, 4, 8, 0, 3, 2, 6, 0, 6, + 6, 3, 3, 3, 3, 3, 0, 8, 7, 0, + 5, 0, 3, 1, 1, 1, 1, 2, 1, 2, + 0, 2, 3, 4, 3, 0, 2, 0, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 2, 1, 2, 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 @@ -989,330 +993,328 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 0, 208, 228, 229, 204, 258, 17, + 2, 0, 1, 0, 210, 230, 231, 206, 260, 17, 0, 0, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 15, 14, 16, 0, 202, 203, 201, - 257, 244, 0, 0, 0, 0, 243, 0, 260, 0, - 208, 215, 213, 215, 215, 213, 213, 177, 178, 175, - 176, 170, 172, 173, 174, 208, 208, 208, 215, 171, - 186, 208, 169, 0, 0, 0, 0, 0, 0, 0, - 0, 247, 246, 0, 0, 126, 0, 0, 0, 0, - 0, 0, 0, 0, 164, 0, 0, 0, 217, 218, - 219, 220, 221, 222, 223, 209, 259, 0, 0, 0, + 11, 12, 13, 15, 14, 16, 0, 204, 205, 203, + 259, 246, 0, 0, 0, 0, 245, 0, 262, 0, + 210, 217, 215, 217, 217, 215, 215, 179, 180, 177, + 178, 172, 174, 175, 176, 210, 210, 210, 217, 173, + 188, 210, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 249, 248, 0, 0, 126, 0, 0, 0, 0, + 0, 0, 0, 0, 165, 0, 0, 0, 219, 220, + 221, 222, 223, 224, 225, 211, 261, 0, 0, 0, 42, 42, 0, 0, 0, 0, 0, 0, 0, 0, - 268, 267, 266, 264, 265, 261, 262, 263, 245, 242, - 255, 254, 253, 251, 252, 248, 249, 250, 166, 0, - 210, 212, 19, 224, 225, 216, 34, 214, 35, 0, - 0, 0, 124, 125, 0, 128, 143, 153, 194, 0, - 0, 0, 0, 0, 0, 0, 154, 180, 0, 211, + 270, 269, 268, 266, 267, 263, 264, 265, 247, 244, + 257, 256, 255, 253, 254, 250, 251, 252, 167, 0, + 212, 214, 19, 226, 227, 218, 34, 216, 35, 0, + 0, 0, 124, 125, 0, 128, 143, 153, 196, 0, + 0, 0, 0, 0, 0, 0, 154, 182, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 189, 190, 191, 192, 193, 0, 156, 165, 0, 18, - 23, 20, 0, 24, 43, 0, 0, 182, 127, 0, - 0, 129, 142, 0, 0, 144, 185, 0, 0, 0, - 0, 179, 232, 230, 155, 157, 158, 159, 160, 0, - 167, 226, 0, 21, 0, 0, 0, 131, 0, 133, - 148, 145, 0, 0, 0, 0, 0, 0, 231, 233, - 168, 227, 256, 0, 36, 38, 181, 0, 184, 133, - 0, 146, 143, 0, 0, 0, 187, 188, 161, 162, - 163, 28, 29, 30, 31, 32, 33, 22, 25, 44, - 44, 40, 183, 130, 128, 136, 137, 138, 139, 140, - 141, 0, 135, 240, 0, 143, 0, 197, 199, 0, - 27, 0, 0, 44, 0, 134, 147, 241, 149, 0, - 143, 240, 0, 0, 26, 58, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 58, 0, 132, 150, 0, - 0, 0, 0, 196, 0, 0, 48, 45, 46, 49, - 203, 0, 238, 0, 47, 234, 0, 0, 55, 57, - 54, 0, 58, 151, 143, 195, 0, 200, 37, 112, - 112, 112, 112, 112, 70, 112, 112, 78, 112, 90, - 112, 112, 112, 112, 112, 102, 112, 0, 112, 112, - 112, 0, 59, 235, 0, 0, 0, 56, 39, 0, - 0, 0, 0, 0, 115, 114, 60, 62, 64, 68, - 0, 74, 76, 0, 80, 0, 92, 94, 96, 98, - 100, 0, 104, 206, 0, 0, 66, 82, 88, 0, - 239, 0, 236, 50, 41, 152, 198, 0, 113, 0, - 0, 0, 0, 71, 0, 0, 0, 79, 0, 91, - 0, 0, 0, 0, 0, 103, 0, 207, 0, 205, - 0, 0, 0, 0, 237, 51, 0, 0, 61, 63, - 65, 69, 0, 75, 77, 81, 93, 95, 97, 99, - 101, 105, 0, 67, 83, 89, 0, 52, 111, 118, - 0, 0, 0, 116, 53, 0, 0, 0, 0, 154, - 84, 0, 119, 0, 116, 0, 0, 116, 0, 122, - 108, 240, 0, 117, 120, 85, 240, 240, 0, 116, - 241, 0, 0, 116, 241, 116, 241, 123, 109, 116, - 0, 121, 86, 116, 72, 116, 110, 0, 87, 73, - 106, 0, 240, 107 + 191, 192, 193, 194, 195, 0, 156, 170, 166, 0, + 18, 23, 20, 0, 24, 43, 0, 0, 184, 127, + 0, 0, 129, 142, 0, 0, 144, 187, 0, 0, + 0, 0, 181, 234, 232, 155, 157, 158, 159, 160, + 0, 168, 228, 0, 21, 0, 0, 0, 131, 0, + 133, 148, 145, 0, 0, 0, 0, 0, 164, 233, + 235, 169, 229, 258, 0, 36, 38, 183, 0, 186, + 133, 0, 146, 143, 0, 0, 0, 189, 190, 161, + 162, 163, 28, 29, 30, 31, 32, 33, 22, 25, + 44, 44, 40, 185, 130, 128, 136, 137, 138, 139, + 140, 141, 0, 135, 242, 0, 143, 0, 199, 201, + 0, 27, 0, 0, 44, 0, 134, 147, 243, 149, + 0, 143, 242, 0, 0, 26, 58, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 58, 0, 132, 150, + 0, 0, 0, 0, 198, 0, 0, 48, 45, 46, + 49, 205, 0, 240, 0, 47, 236, 0, 0, 55, + 57, 54, 0, 58, 151, 143, 197, 0, 202, 37, + 112, 112, 112, 112, 112, 70, 112, 112, 78, 112, + 90, 112, 112, 112, 112, 112, 102, 112, 0, 112, + 112, 112, 0, 59, 237, 0, 0, 0, 56, 39, + 0, 0, 0, 0, 0, 115, 114, 60, 62, 64, + 68, 0, 74, 76, 0, 80, 0, 92, 94, 96, + 98, 100, 0, 104, 208, 0, 0, 66, 82, 88, + 0, 241, 0, 238, 50, 41, 152, 200, 0, 113, + 0, 0, 0, 0, 71, 0, 0, 0, 79, 0, + 91, 0, 0, 0, 0, 0, 103, 0, 209, 0, + 207, 0, 0, 0, 0, 239, 51, 0, 0, 61, + 63, 65, 69, 0, 75, 77, 81, 93, 95, 97, + 99, 101, 105, 0, 67, 83, 89, 0, 52, 111, + 118, 0, 0, 0, 116, 53, 0, 0, 0, 0, + 154, 84, 0, 119, 0, 116, 0, 0, 116, 0, + 122, 108, 242, 0, 117, 120, 85, 242, 242, 0, + 116, 243, 0, 0, 116, 243, 116, 243, 123, 109, + 116, 0, 121, 86, 116, 72, 116, 110, 0, 87, + 73, 106, 0, 242, 107 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 12, 160, 181, 182, 257, 258, 13, 14, - 15, 259, 260, 283, 140, 281, 315, 362, 409, 410, - 411, 430, 412, 380, 415, 416, 383, 418, 431, 432, - 385, 420, 421, 422, 423, 424, 391, 426, 511, 413, - 437, 372, 373, 470, 460, 465, 486, 492, 481, 488, - 16, 17, 18, 19, 165, 191, 240, 272, 20, 166, - 195, 21, 175, 176, 204, 205, 22, 128, 158, 61, - 23, 24, 216, 25, 108, 167, 292, 293, 26, 27, - 394, 37, 99, 98, 95, 136, 210, 374, 206, 207, - 324, 325, 286, 287, 414, 36, 213, 375, 30 + -1, 1, 12, 160, 182, 183, 258, 259, 13, 14, + 15, 260, 261, 284, 140, 282, 316, 363, 410, 411, + 412, 431, 413, 381, 416, 417, 384, 419, 432, 433, + 386, 421, 422, 423, 424, 425, 392, 427, 512, 414, + 438, 373, 374, 471, 461, 466, 487, 493, 482, 489, + 16, 17, 18, 19, 165, 192, 241, 273, 20, 166, + 196, 21, 175, 176, 205, 206, 22, 128, 158, 61, + 23, 24, 217, 25, 108, 167, 293, 294, 26, 27, + 395, 37, 99, 98, 95, 136, 375, 212, 207, 208, + 325, 326, 287, 288, 415, 36, 214, 376, 30 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -443 +#define YYPACT_NINF -309 static const yytype_int16 yypact[] = { - -443, 114, -443, 326, -443, -443, -443, -443, -443, -443, - 326, 326, -443, -443, -443, -443, -443, -443, -443, -443, - -443, -443, -443, -443, -443, -443, 461, -443, -443, -443, - 603, -443, 326, 326, 326, -90, 640, 249, -443, 511, - -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, - -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, - -443, -443, -443, 326, 326, 326, 326, 326, 326, 326, - 326, -443, -443, 674, 326, -443, 326, 326, 326, 326, - 326, 326, 326, 326, -443, 326, 326, 326, -443, -443, - -443, -443, -443, -443, -443, -443, -443, 287, 548, 548, - 314, 314, 548, 548, 489, 402, 439, 548, 280, 226, - 732, 456, 379, -44, -44, -443, -443, -443, -443, -443, - 732, 456, 379, -44, -44, -443, -443, -443, -443, -90, - -443, -443, -443, -443, -443, -443, -443, -443, -443, -67, - 165, 165, -443, -443, -90, -443, -443, -443, -443, 326, - 326, 326, 326, 326, 326, 326, -443, -443, 2, -443, - 13, 326, -90, -90, 50, 118, 157, 52, -90, -90, - -443, -443, -443, -443, -443, 51, 440, -443, 231, -443, - -443, -443, -38, -443, -443, -90, -90, -443, -443, 42, - -52, -443, -443, 80, -52, -443, -443, 83, 94, -90, - -90, -443, -443, -443, -443, -8, 15, 33, 640, -52, - -52, -443, 165, 27, -90, -90, 166, -443, 271, -52, - -443, 271, 7, 59, 63, -90, -90, 440, -443, -443, - -52, -443, -443, 832, -443, -90, -443, 255, -443, -443, - 1, -90, -443, 5, 153, -52, -443, -443, 15, 33, - 640, -443, -443, -443, -443, -443, -443, 19, -443, -443, - -443, -443, -443, 359, -443, -443, -443, -443, -443, -443, - -443, 782, -443, -90, 162, -443, 8, -443, -52, 832, - -443, 546, 563, -443, 171, -443, -443, -443, -443, 186, - -443, -90, 29, -2, -443, -443, 326, -52, 255, -56, - 326, 326, 326, 326, 255, -443, 589, -443, -443, 190, - 154, 158, -52, -443, -90, 653, -443, -52, -443, -52, - 62, -63, -443, 326, 69, -443, 68, -90, -443, -443, - -443, 690, -443, -443, -443, -443, 298, -443, -443, 152, - 152, 152, 152, 152, -443, 152, 152, -443, 152, -443, - 152, 152, 152, 152, 152, -443, 152, 255, 152, 152, - 152, 255, -443, -443, 67, 75, -52, -443, -443, 727, - 194, -52, 326, 72, -443, -443, -443, -443, -443, -443, - 326, -443, -443, 326, -443, 326, -443, -443, -443, -443, - -443, 326, -443, 74, 326, 78, -443, -443, -443, 326, - -443, -63, -443, 271, -443, -443, -52, 85, -443, 326, - 326, 326, 326, -443, -90, 326, 326, -443, 326, -443, - 326, 326, 326, 326, 326, -443, 326, -443, 96, -443, - 326, 326, 326, -90, -443, -90, 152, 102, -443, -443, - -443, -443, -90, -443, -443, -443, -443, -443, -443, -443, - -443, -443, 326, -443, -443, -443, -90, -90, -443, -443, - -90, -90, 105, 9, -443, -56, -90, -90, 326, -443, - -443, -90, 69, -90, 12, 106, 187, 16, -90, -443, - -443, -90, 326, -443, -443, -443, -90, -90, -56, 198, - -90, 119, -56, 198, -90, 198, -90, 69, -443, 198, - 326, 69, -443, 198, -443, 198, -443, 123, -443, -443, - -443, -56, -46, -443 + -309, 68, -309, 338, -309, -309, -309, -309, -309, -309, + 338, 338, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, 458, -309, -309, -309, + 605, -309, 338, 338, 338, -92, 642, 230, -309, 534, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, 338, 338, 338, 338, 338, 338, 338, + 338, -309, -309, 695, 338, -309, 338, 338, 338, 338, + 338, 338, 338, 338, -309, 338, 338, 338, -309, -309, + -309, -309, -309, -309, -309, -309, -309, 329, 724, 724, + 242, 242, 724, 724, 499, 434, 457, 724, 192, 250, + 392, 718, 318, 174, 174, -309, -309, -309, -309, -309, + 392, 718, 318, 174, 174, -309, -309, -309, -309, -92, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -81, + 263, 263, -309, -309, -92, -309, -309, -309, -309, 338, + 338, 338, 338, 338, 338, 338, -309, -309, 6, -309, + 13, 338, -92, -92, 48, 8, 105, 35, -92, -92, + -309, -309, -309, -309, -309, 53, 373, -309, -309, -38, + -309, -309, -309, -48, -309, -309, -92, -92, -309, -309, + -36, 7, -309, -309, 80, 7, -309, -309, 60, 103, + -92, -92, -309, -309, -309, -309, 17, 38, 47, 642, + 7, 7, -309, 263, 65, -92, -92, -1, -309, 163, + 7, -309, 163, 12, 74, 94, -92, -92, 373, -309, + -309, 7, -309, -309, 818, -309, -92, -309, 253, -309, + -309, 184, -92, -309, 5, 177, 7, -309, -309, 38, + 47, 642, -309, -309, -309, -309, -309, -309, 25, -309, + -309, -309, -309, -309, 155, -309, -309, -309, -309, -309, + -309, -309, 768, -309, -92, 120, -309, 10, -309, 7, + 818, -309, 556, 562, -309, 137, -309, -309, -309, -309, + 141, -309, -92, 21, 2, -309, -309, 338, 7, 253, + -46, 338, 338, 338, 338, 253, -309, 573, -309, -309, + 153, 188, 172, 7, -309, -92, 655, -309, 7, -309, + 7, 40, 27, -309, 338, 99, -309, 93, -92, -309, + -309, -309, 692, -309, -309, -309, -309, 168, -309, -309, + 258, 258, 258, 258, 258, -309, 258, 258, -309, 258, + -309, 258, 258, 258, 258, 258, -309, 258, 253, 258, + 258, 258, 253, -309, -309, 95, 98, 7, -309, -309, + 729, 173, 7, 338, 102, 7, -309, -309, -309, -309, + -309, 338, -309, -309, 338, -309, 338, -309, -309, -309, + -309, -309, 338, -309, 117, 338, 123, -309, -309, -309, + 338, -309, 27, -309, 163, -309, -309, 7, 128, -309, + 338, 338, 338, 338, -309, -92, 338, 338, -309, 338, + -309, 338, 338, 338, 338, 338, -309, 338, -309, 131, + -309, 338, 338, 338, -92, -309, -92, 258, 132, -309, + -309, -309, -309, -92, -309, -309, -309, -309, -309, -309, + -309, -309, -309, 338, -309, -309, -309, -92, -92, -309, + -309, -92, -92, 149, 18, -309, -46, -92, -92, 338, + -309, -309, -92, 99, -92, 19, 154, 203, 20, -92, + -309, -309, -92, 338, -309, -309, -309, -92, -92, -46, + 225, -92, 165, -46, 225, -92, 225, -92, 99, -309, + 225, 338, 99, -309, 225, -309, 225, -309, 182, -309, + -309, -309, -46, -71, -309 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -443, -443, -443, -443, -443, -443, -443, -244, -443, -443, - -443, -443, -443, -443, 121, -246, -300, -443, -443, -443, - -443, -443, -443, -443, -443, -443, -443, -443, -443, -443, - -443, -443, -443, -443, -443, -443, -443, -443, -443, 238, - -443, 460, -197, 294, -443, -443, -443, -443, -443, -443, - -443, -443, -443, -443, -22, -443, 22, -17, -443, -239, - -443, -443, -206, -443, -443, -443, -443, -443, -443, -443, - -443, -443, -443, -443, -443, -443, -443, -443, -25, -341, - -97, 230, 93, 14, 723, 487, -64, 47, 45, 49, - -442, -280, -284, -26, -3, 11, -443, 23, -443 + -309, -309, -309, -309, -309, -309, -309, -240, -309, -309, + -309, -309, -309, -309, 144, -235, -295, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -309, 239, + -309, 431, -156, -100, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, 26, -309, 56, 39, -309, -196, + -309, -309, -173, -309, -309, -309, -309, -309, -309, -309, + -309, -309, -309, -309, -309, -309, -309, -309, -25, -265, + -55, 232, 0, 333, 432, 375, -129, 4, 82, 84, + -237, -308, -283, -33, -3, 9, -309, 3, -309 }; /* 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 -227 +#define YYTABLE_NINF -229 static const yytype_int16 yytable[] = { - 35, 62, 313, 274, 264, 331, 177, 310, 275, 75, - 242, 290, 469, 280, 282, 469, 393, 179, 74, 469, - 393, 38, 39, 472, 29, 251, 252, 253, 254, 255, - 256, 322, 369, 311, 321, 294, 289, 306, 322, 5, - 6, 363, 161, 71, 72, 73, 497, 323, 28, 29, - 501, 309, 365, 187, 323, 201, 196, 100, 101, 81, - 82, 83, 74, 265, 266, 267, 268, 269, 270, 512, - 212, 119, 107, 28, 110, 111, 112, 113, 114, 115, - 116, 117, 129, 130, 131, 402, 223, 120, 121, 122, - 123, 124, 125, 126, 127, 370, 31, 224, 5, 6, - 227, 144, 217, 159, 32, 180, 74, 8, 33, 271, - 312, 228, 34, 74, 2, 74, 74, 74, 164, 10, - 479, 434, 188, 11, 484, 218, 219, 279, 229, 221, - 222, 197, 198, 5, 6, 233, 185, 186, 102, 103, - 220, 244, 199, 200, 245, 230, 168, 169, 170, 171, - 172, 173, 174, -226, -226, 178, 277, 334, 184, 214, - 215, 192, 335, 162, 163, 401, 288, 365, 3, 322, - 236, 5, 6, 225, 226, 307, 366, 189, 400, 190, - 408, 278, 427, 183, 4, 323, 429, 208, 234, 235, - 308, 483, 239, 436, 333, 241, 243, 489, 405, 246, - 247, 469, 493, 495, 452, 5, 6, 7, 8, 261, - 459, 9, 262, 468, 482, 273, 193, 276, 194, 237, - 10, 193, 141, 194, 11, 211, 238, 500, 513, 156, - 189, 510, 190, 317, 319, 232, 211, 211, 250, 458, - 211, 211, 284, 5, 6, 193, 8, 194, 336, 193, - 291, 194, 84, 193, 285, 194, 211, 231, 10, 8, - 29, 263, 11, 476, 399, 231, 231, 314, 231, 231, - 97, 10, 248, 318, 0, 11, 249, 231, 0, 330, - 85, 86, 87, 148, 28, 104, 105, 106, 337, 0, - 132, 109, 211, 316, 0, 0, 0, 326, 327, 328, - 329, 367, 403, 85, 86, 87, 0, 406, 0, 88, - 89, 90, 91, 92, 93, 94, 0, 0, 133, 134, - 364, 29, 5, 6, 0, 231, 0, 29, 0, 0, - 139, 0, 88, 89, 90, 91, 92, 93, 94, 209, - 0, 85, 86, 87, 211, 320, 5, 6, 7, 8, - 0, 28, 149, 150, 151, 152, 153, 154, 155, 211, - 0, 10, 5, 6, 231, 11, 231, 0, 0, 407, - 88, 89, 90, 91, 92, 93, 94, 435, 0, 74, - 395, 0, 0, 231, 395, 0, 0, 0, 442, 5, - 6, 428, 0, 0, 0, 0, 433, 88, 89, 90, - 91, 92, 93, 94, 28, 145, 371, 456, 28, 457, - 0, 0, 0, 211, 0, 0, 461, 0, 211, 0, - 31, 265, 266, 267, 268, 269, 270, 0, 32, 0, - 463, 464, 33, 0, 466, 467, 34, 471, 0, 0, - 473, 474, 146, 0, 0, 477, 0, 478, 0, 462, - 231, 0, 487, 231, 0, 490, 85, 86, 87, 0, - 494, 496, 0, 0, 499, 475, 40, 271, 503, 0, - 505, 0, 0, 41, 42, 43, 44, 0, 0, 491, - 79, 80, 81, 82, 83, 88, 89, 90, 91, 92, - 93, 94, 0, 85, 86, 87, 0, 507, 0, 0, - 0, 0, 45, 46, 47, 48, 49, 50, 0, 51, - 52, 53, 54, 55, 0, 0, 0, 0, 56, 57, - 0, 0, 88, 89, 90, 91, 92, 93, 94, 58, - 59, 0, 60, 0, 31, 202, 203, 0, 0, 0, - 0, 0, 32, 85, 86, 87, 33, 0, 0, 295, - 34, 0, 5, 6, 7, 8, 78, 79, 80, 81, - 82, 83, 296, 297, 298, 299, 305, 10, 0, 0, - 0, 11, 88, 89, 90, 91, 92, 93, 94, 296, - 297, 298, 299, 31, 0, 0, 138, 300, 0, 142, - 143, 32, 332, 0, 147, 33, 157, 0, 0, 34, - 301, 302, 303, 304, 300, 296, 297, 298, 299, 76, - 77, 78, 79, 80, 81, 82, 83, 301, 302, 303, - 304, 417, 96, 419, 0, 0, 0, 0, 0, 425, - 300, 88, 89, 90, 91, 92, 93, 94, 0, 0, - 133, 134, 0, 301, 302, 303, 304, 438, 439, 440, - 441, 0, 0, 443, 444, 0, 445, 338, 446, 447, - 448, 449, 450, 339, 451, 0, 0, 0, 453, 454, - 455, 0, 0, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 368, 361, 0, 0, 0, 0, - 339, 63, 64, 65, 66, 67, 68, 69, 70, 0, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 404, 361, 0, 0, 0, 0, 339, 76, 77, - 78, 79, 80, 81, 82, 83, 0, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 480, 361, - 0, 485, 76, 77, 78, 79, 80, 81, 82, 83, - 0, 0, 0, 498, 0, 118, 0, 502, 0, 504, - 0, 0, 0, 506, 0, 0, 0, 508, 0, 509, - 376, 377, 378, 379, 0, 381, 382, 0, 384, 0, - 386, 387, 388, 389, 390, 0, 392, 0, 396, 397, - 398, 135, 137, 135, 135, 137, 137, 0, 0, 0, - 135, 77, 78, 79, 80, 81, 82, 83, 251, 252, - 253, 254, 255, 256, 265, 266, 267, 268, 269, 270 + 35, 62, 75, 237, 29, 28, 314, 177, 276, 311, + 178, 332, 189, 291, 364, 243, 74, 180, 281, 38, + 39, 470, 470, 470, 218, 312, 283, 366, 161, 29, + 28, 252, 253, 254, 255, 256, 257, 74, 370, 197, + 295, 71, 72, 73, 322, 102, 103, 275, 323, 307, + 211, 188, 238, 5, 6, 5, 6, 202, 403, 239, + 213, 219, 220, 224, 324, 222, 223, 190, 2, 191, + 210, 119, 110, 111, 112, 113, 114, 115, 116, 117, + 290, 231, 129, 130, 131, 120, 121, 122, 123, 124, + 125, 126, 127, 394, 435, 310, 159, 394, 5, 6, + 31, 144, 313, 5, 6, 181, 225, 8, 32, 193, + 74, 164, 33, 74, 198, 199, 34, 279, 74, 10, + 74, 323, 3, 11, 289, 228, 74, 480, 485, 186, + 187, -228, -228, 280, 229, 200, 201, 324, 4, 371, + 221, 308, 230, 162, 163, 309, 168, 169, 170, 171, + 172, 173, 174, 215, 216, 179, 245, 334, 185, 5, + 6, 7, 8, 184, 194, 9, 195, 226, 227, 318, + 320, 5, 6, 234, 10, 246, 336, 406, 11, 194, + 278, 195, 235, 236, 337, 209, 240, 265, 402, 242, + 244, 335, 323, 247, 248, 148, 190, 366, 191, 490, + 194, 367, 195, 262, 494, 496, 401, 484, 324, 274, + 409, 277, 194, 263, 195, 232, 233, 266, 267, 268, + 269, 270, 271, 232, 232, 428, 232, 232, 470, 473, + 514, 430, 194, 84, 195, 232, 437, 251, 404, 453, + 460, 29, 28, 407, 292, 141, 266, 267, 268, 269, + 270, 271, 498, 156, 5, 6, 502, 469, 139, 5, + 6, 315, 483, 272, 149, 150, 151, 152, 153, 154, + 155, 74, 97, 501, 319, 513, 372, 81, 82, 83, + 331, 459, 338, 232, 85, 86, 87, 104, 105, 106, + 511, 285, 272, 109, 317, 368, 264, 477, 327, 328, + 329, 330, 29, 321, 85, 86, 87, 400, 29, 28, + 249, 286, 250, 88, 89, 90, 91, 92, 93, 94, + 0, 365, 232, 0, 232, 88, 89, 90, 91, 92, + 93, 94, 132, 88, 89, 90, 91, 92, 93, 94, + 0, 232, 133, 134, 5, 6, 7, 8, 0, 5, + 6, 0, 8, 0, 0, 0, 0, 8, 0, 10, + 0, 396, 28, 11, 10, 396, 28, 0, 11, 10, + 408, 436, 0, 11, 0, 481, 100, 101, 486, 232, + 0, 0, 443, 85, 86, 87, 0, 0, 0, 0, + 499, 107, 429, 0, 503, 0, 505, 434, 0, 0, + 507, 457, 0, 458, 509, 0, 510, 0, 232, 0, + 462, 232, 88, 89, 90, 91, 92, 93, 94, 79, + 80, 81, 82, 83, 464, 465, 0, 0, 467, 468, + 0, 472, 31, 0, 474, 475, 0, 145, 0, 478, + 32, 479, 0, 0, 33, 0, 488, 0, 34, 491, + 463, 0, 0, 0, 495, 497, 0, 0, 500, 0, + 146, 0, 504, 40, 506, 0, 476, 31, 203, 204, + 41, 42, 43, 44, 138, 32, 0, 142, 143, 33, + 492, 0, 147, 34, 157, 0, 0, 0, 85, 86, + 87, 77, 78, 79, 80, 81, 82, 83, 508, 45, + 46, 47, 48, 49, 50, 0, 51, 52, 53, 54, + 55, 85, 86, 87, 0, 56, 57, 88, 89, 90, + 91, 92, 93, 94, 0, 0, 58, 59, 0, 60, + 135, 137, 135, 135, 137, 137, 0, 0, 0, 135, + 88, 89, 90, 91, 92, 93, 94, 0, 0, 5, + 6, 7, 8, 85, 86, 87, 0, 0, 0, 296, + 0, 0, 0, 0, 10, 306, 0, 0, 11, 0, + 0, 0, 297, 298, 299, 300, 333, 0, 297, 298, + 299, 300, 88, 89, 90, 91, 92, 93, 94, 297, + 298, 299, 300, 31, 0, 0, 0, 301, 0, 0, + 0, 32, 0, 301, 0, 33, 0, 0, 0, 34, + 302, 303, 304, 305, 301, 0, 302, 303, 304, 305, + 0, 0, 0, 418, 0, 420, 0, 302, 303, 304, + 305, 426, 76, 77, 78, 79, 80, 81, 82, 83, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 439, + 440, 441, 442, 0, 0, 444, 445, 0, 446, 339, + 447, 448, 449, 450, 451, 340, 452, 0, 0, 0, + 454, 455, 456, 0, 0, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 369, 362, 0, 0, + 0, 0, 340, 63, 64, 65, 66, 67, 68, 69, + 70, 0, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 405, 362, 0, 0, 0, 0, 340, + 76, 77, 78, 79, 80, 81, 82, 83, 0, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 0, 362, 377, 378, 379, 380, 0, 382, 383, 0, + 385, 0, 387, 388, 389, 390, 391, 0, 393, 0, + 397, 398, 399, 76, 77, 78, 79, 80, 81, 82, + 83, 0, 0, 0, 0, 0, 118, 88, 89, 90, + 91, 92, 93, 94, 0, 0, 133, 134, 78, 79, + 80, 81, 82, 83, 252, 253, 254, 255, 256, 257, + 266, 267, 268, 269, 270, 271 }; static const yytype_int16 yycheck[] = { - 3, 26, 4, 242, 3, 305, 4, 291, 3, 35, - 3, 3, 3, 257, 260, 3, 357, 4, 108, 3, - 361, 10, 11, 465, 1, 6, 7, 8, 9, 10, - 11, 94, 332, 4, 90, 279, 275, 283, 94, 91, - 92, 321, 109, 32, 33, 34, 488, 110, 1, 26, - 492, 290, 98, 3, 110, 4, 4, 43, 44, 103, - 104, 105, 108, 62, 63, 64, 65, 66, 67, 511, - 108, 74, 58, 26, 63, 64, 65, 66, 67, 68, - 69, 70, 85, 86, 87, 365, 3, 76, 77, 78, - 79, 80, 81, 82, 83, 334, 94, 3, 91, 92, - 108, 104, 60, 129, 102, 92, 108, 94, 106, 108, - 81, 96, 110, 108, 0, 108, 108, 108, 144, 106, - 108, 401, 4, 110, 108, 189, 190, 108, 95, 193, - 194, 79, 80, 91, 92, 108, 162, 163, 45, 46, - 60, 82, 168, 169, 81, 209, 149, 150, 151, 152, - 153, 154, 155, 91, 92, 158, 3, 3, 161, 185, - 186, 4, 4, 140, 141, 90, 4, 98, 54, 94, - 4, 91, 92, 199, 200, 4, 108, 59, 111, 61, - 108, 245, 108, 160, 70, 110, 108, 176, 214, 215, - 4, 4, 218, 108, 4, 221, 222, 481, 4, 225, - 226, 3, 486, 487, 108, 91, 92, 93, 94, 235, - 108, 97, 237, 108, 108, 241, 59, 243, 61, 53, - 106, 59, 101, 61, 110, 178, 60, 108, 512, 3, - 59, 108, 61, 297, 298, 212, 189, 190, 227, 436, - 193, 194, 264, 91, 92, 59, 94, 61, 312, 59, - 276, 61, 3, 59, 271, 61, 209, 210, 106, 94, - 237, 239, 110, 469, 361, 218, 219, 293, 221, 222, - 40, 106, 227, 298, -1, 110, 227, 230, -1, 304, - 54, 55, 56, 3, 237, 55, 56, 57, 314, -1, - 3, 61, 245, 296, -1, -1, -1, 300, 301, 302, - 303, 327, 366, 54, 55, 56, -1, 371, -1, 83, - 84, 85, 86, 87, 88, 89, -1, -1, 92, 93, - 323, 298, 91, 92, -1, 278, -1, 304, -1, -1, - 16, -1, 83, 84, 85, 86, 87, 88, 89, 108, - -1, 54, 55, 56, 297, 298, 91, 92, 93, 94, - -1, 304, 72, 73, 74, 75, 76, 77, 78, 312, - -1, 106, 91, 92, 317, 110, 319, -1, -1, 372, - 83, 84, 85, 86, 87, 88, 89, 403, -1, 108, - 357, -1, -1, 336, 361, -1, -1, -1, 414, 91, - 92, 394, -1, -1, -1, -1, 399, 83, 84, 85, - 86, 87, 88, 89, 357, 3, 108, 433, 361, 435, - -1, -1, -1, 366, -1, -1, 442, -1, 371, -1, - 94, 62, 63, 64, 65, 66, 67, -1, 102, -1, - 456, 457, 106, -1, 460, 461, 110, 463, -1, -1, - 466, 467, 3, -1, -1, 471, -1, 473, -1, 452, - 403, -1, 478, 406, -1, 481, 54, 55, 56, -1, - 486, 487, -1, -1, 490, 468, 5, 108, 494, -1, - 496, -1, -1, 12, 13, 14, 15, -1, -1, 482, - 101, 102, 103, 104, 105, 83, 84, 85, 86, 87, - 88, 89, -1, 54, 55, 56, -1, 500, -1, -1, - -1, -1, 41, 42, 43, 44, 45, 46, -1, 48, - 49, 50, 51, 52, -1, -1, -1, -1, 57, 58, - -1, -1, 83, 84, 85, 86, 87, 88, 89, 68, - 69, -1, 71, -1, 94, 95, 96, -1, -1, -1, - -1, -1, 102, 54, 55, 56, 106, -1, -1, 3, - 110, -1, 91, 92, 93, 94, 100, 101, 102, 103, - 104, 105, 16, 17, 18, 19, 3, 106, -1, -1, - -1, 110, 83, 84, 85, 86, 87, 88, 89, 16, - 17, 18, 19, 94, -1, -1, 99, 41, -1, 102, - 103, 102, 3, -1, 107, 106, 109, -1, -1, 110, - 54, 55, 56, 57, 41, 16, 17, 18, 19, 98, - 99, 100, 101, 102, 103, 104, 105, 54, 55, 56, - 57, 383, 111, 385, -1, -1, -1, -1, -1, 391, - 41, 83, 84, 85, 86, 87, 88, 89, -1, -1, - 92, 93, -1, 54, 55, 56, 57, 409, 410, 411, - 412, -1, -1, 415, 416, -1, 418, 4, 420, 421, - 422, 423, 424, 10, 426, -1, -1, -1, 430, 431, - 432, -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, 98, 99, 100, 101, 102, 103, 104, 105, -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, 98, 99, - 100, 101, 102, 103, 104, 105, -1, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 474, 42, - -1, 477, 98, 99, 100, 101, 102, 103, 104, 105, - -1, -1, -1, 489, -1, 111, -1, 493, -1, 495, - -1, -1, -1, 499, -1, -1, -1, 503, -1, 505, - 340, 341, 342, 343, -1, 345, 346, -1, 348, -1, - 350, 351, 352, 353, 354, -1, 356, -1, 358, 359, - 360, 98, 99, 100, 101, 102, 103, -1, -1, -1, - 107, 99, 100, 101, 102, 103, 104, 105, 6, 7, - 8, 9, 10, 11, 62, 63, 64, 65, 66, 67 + 3, 26, 35, 4, 1, 1, 4, 1, 3, 292, + 4, 306, 4, 3, 322, 3, 108, 4, 258, 10, + 11, 3, 3, 3, 60, 4, 261, 98, 109, 26, + 26, 6, 7, 8, 9, 10, 11, 108, 333, 4, + 280, 32, 33, 34, 90, 45, 46, 243, 94, 284, + 179, 3, 53, 91, 92, 91, 92, 4, 366, 60, + 108, 190, 191, 3, 110, 194, 195, 59, 0, 61, + 108, 74, 63, 64, 65, 66, 67, 68, 69, 70, + 276, 210, 85, 86, 87, 76, 77, 78, 79, 80, + 81, 82, 83, 358, 402, 291, 129, 362, 91, 92, + 94, 104, 81, 91, 92, 92, 3, 94, 102, 4, + 108, 144, 106, 108, 79, 80, 110, 246, 108, 106, + 108, 94, 54, 110, 4, 108, 108, 108, 108, 162, + 163, 91, 92, 108, 96, 168, 169, 110, 70, 335, + 60, 4, 95, 140, 141, 4, 149, 150, 151, 152, + 153, 154, 155, 186, 187, 158, 82, 4, 161, 91, + 92, 93, 94, 160, 59, 97, 61, 200, 201, 298, + 299, 91, 92, 108, 106, 81, 4, 4, 110, 59, + 3, 61, 215, 216, 313, 176, 219, 3, 90, 222, + 223, 3, 94, 226, 227, 3, 59, 98, 61, 482, + 59, 108, 61, 236, 487, 488, 111, 4, 110, 242, + 108, 244, 59, 238, 61, 211, 213, 62, 63, 64, + 65, 66, 67, 219, 220, 108, 222, 223, 3, 466, + 513, 108, 59, 3, 61, 231, 108, 228, 367, 108, + 108, 238, 238, 372, 277, 101, 62, 63, 64, 65, + 66, 67, 489, 3, 91, 92, 493, 108, 16, 91, + 92, 294, 108, 108, 72, 73, 74, 75, 76, 77, + 78, 108, 40, 108, 299, 512, 108, 103, 104, 105, + 305, 437, 315, 279, 54, 55, 56, 55, 56, 57, + 108, 265, 108, 61, 297, 328, 240, 470, 301, 302, + 303, 304, 299, 299, 54, 55, 56, 362, 305, 305, + 228, 272, 228, 83, 84, 85, 86, 87, 88, 89, + -1, 324, 318, -1, 320, 83, 84, 85, 86, 87, + 88, 89, 3, 83, 84, 85, 86, 87, 88, 89, + -1, 337, 92, 93, 91, 92, 93, 94, -1, 91, + 92, -1, 94, -1, -1, -1, -1, 94, -1, 106, + -1, 358, 358, 110, 106, 362, 362, -1, 110, 106, + 373, 404, -1, 110, -1, 475, 43, 44, 478, 375, + -1, -1, 415, 54, 55, 56, -1, -1, -1, -1, + 490, 58, 395, -1, 494, -1, 496, 400, -1, -1, + 500, 434, -1, 436, 504, -1, 506, -1, 404, -1, + 443, 407, 83, 84, 85, 86, 87, 88, 89, 101, + 102, 103, 104, 105, 457, 458, -1, -1, 461, 462, + -1, 464, 94, -1, 467, 468, -1, 3, -1, 472, + 102, 474, -1, -1, 106, -1, 479, -1, 110, 482, + 453, -1, -1, -1, 487, 488, -1, -1, 491, -1, + 3, -1, 495, 5, 497, -1, 469, 94, 95, 96, + 12, 13, 14, 15, 99, 102, -1, 102, 103, 106, + 483, -1, 107, 110, 109, -1, -1, -1, 54, 55, + 56, 99, 100, 101, 102, 103, 104, 105, 501, 41, + 42, 43, 44, 45, 46, -1, 48, 49, 50, 51, + 52, 54, 55, 56, -1, 57, 58, 83, 84, 85, + 86, 87, 88, 89, -1, -1, 68, 69, -1, 71, + 98, 99, 100, 101, 102, 103, -1, -1, -1, 107, + 83, 84, 85, 86, 87, 88, 89, -1, -1, 91, + 92, 93, 94, 54, 55, 56, -1, -1, -1, 3, + -1, -1, -1, -1, 106, 3, -1, -1, 110, -1, + -1, -1, 16, 17, 18, 19, 3, -1, 16, 17, + 18, 19, 83, 84, 85, 86, 87, 88, 89, 16, + 17, 18, 19, 94, -1, -1, -1, 41, -1, -1, + -1, 102, -1, 41, -1, 106, -1, -1, -1, 110, + 54, 55, 56, 57, 41, -1, 54, 55, 56, 57, + -1, -1, -1, 384, -1, 386, -1, 54, 55, 56, + 57, 392, 98, 99, 100, 101, 102, 103, 104, 105, + -1, -1, -1, -1, -1, 111, -1, -1, -1, 410, + 411, 412, 413, -1, -1, 416, 417, -1, 419, 4, + 421, 422, 423, 424, 425, 10, 427, -1, -1, -1, + 431, 432, 433, -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, 98, 99, 100, 101, 102, 103, 104, + 105, -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, + 98, 99, 100, 101, 102, 103, 104, 105, -1, 20, + 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + -1, 42, 341, 342, 343, 344, -1, 346, 347, -1, + 349, -1, 351, 352, 353, 354, 355, -1, 357, -1, + 359, 360, 361, 98, 99, 100, 101, 102, 103, 104, + 105, -1, -1, -1, -1, -1, 111, 83, 84, 85, + 86, 87, 88, 89, -1, -1, 92, 93, 100, 101, + 102, 103, 104, 105, 6, 7, 8, 9, 10, 11, + 62, 63, 64, 65, 66, 67 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1336,41 +1338,41 @@ static const yytype_uint8 yystos[] = 126, 126, 197, 197, 206, 3, 3, 197, 3, 72, 73, 74, 75, 76, 77, 78, 3, 197, 180, 205, 115, 109, 209, 209, 205, 166, 171, 187, 206, 206, - 206, 206, 206, 206, 206, 174, 175, 4, 206, 4, - 92, 116, 117, 209, 206, 205, 205, 3, 4, 59, - 61, 167, 4, 59, 61, 172, 4, 79, 80, 205, - 205, 4, 95, 96, 176, 177, 200, 201, 207, 108, - 198, 199, 108, 208, 205, 205, 184, 60, 198, 198, - 60, 198, 198, 3, 3, 205, 205, 108, 96, 95, - 198, 199, 209, 108, 205, 205, 4, 53, 60, 205, - 168, 205, 3, 205, 82, 81, 205, 205, 200, 201, - 207, 6, 7, 8, 9, 10, 11, 118, 119, 123, - 124, 205, 190, 168, 3, 62, 63, 64, 65, 66, - 67, 108, 169, 205, 171, 3, 205, 3, 198, 108, - 119, 127, 127, 125, 166, 169, 204, 205, 4, 171, - 3, 205, 188, 189, 119, 3, 16, 17, 18, 19, - 41, 54, 55, 56, 57, 3, 127, 4, 4, 171, - 204, 4, 81, 4, 205, 128, 206, 198, 190, 198, - 199, 90, 94, 110, 202, 203, 206, 206, 206, 206, - 190, 128, 3, 4, 3, 4, 198, 205, 4, 10, - 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 42, 129, 203, 206, 98, 108, 205, 4, 128, - 171, 108, 153, 154, 199, 209, 153, 153, 153, 153, - 135, 153, 153, 138, 153, 142, 153, 153, 153, 153, - 153, 148, 153, 191, 192, 209, 153, 153, 153, 192, - 111, 90, 203, 198, 4, 4, 198, 206, 108, 130, - 131, 132, 134, 151, 206, 136, 137, 151, 139, 151, - 143, 144, 145, 146, 147, 151, 149, 108, 206, 108, - 133, 140, 141, 206, 203, 205, 108, 152, 151, 151, - 151, 151, 205, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 108, 151, 151, 151, 205, 205, 154, 108, - 156, 205, 206, 205, 205, 157, 205, 205, 108, 3, - 155, 205, 202, 205, 205, 206, 174, 205, 205, 108, - 155, 160, 108, 4, 108, 155, 158, 205, 161, 204, - 205, 206, 159, 204, 205, 204, 205, 202, 155, 205, - 108, 202, 155, 205, 155, 205, 155, 206, 155, 155, - 108, 150, 202, 204 + 206, 206, 206, 206, 206, 174, 175, 1, 4, 206, + 4, 92, 116, 117, 209, 206, 205, 205, 3, 4, + 59, 61, 167, 4, 59, 61, 172, 4, 79, 80, + 205, 205, 4, 95, 96, 176, 177, 200, 201, 207, + 108, 198, 199, 108, 208, 205, 205, 184, 60, 198, + 198, 60, 198, 198, 3, 3, 205, 205, 108, 96, + 95, 198, 199, 209, 108, 205, 205, 4, 53, 60, + 205, 168, 205, 3, 205, 82, 81, 205, 205, 200, + 201, 207, 6, 7, 8, 9, 10, 11, 118, 119, + 123, 124, 205, 190, 168, 3, 62, 63, 64, 65, + 66, 67, 108, 169, 205, 171, 3, 205, 3, 198, + 108, 119, 127, 127, 125, 166, 169, 204, 205, 4, + 171, 3, 205, 188, 189, 119, 3, 16, 17, 18, + 19, 41, 54, 55, 56, 57, 3, 127, 4, 4, + 171, 204, 4, 81, 4, 205, 128, 206, 198, 190, + 198, 199, 90, 94, 110, 202, 203, 206, 206, 206, + 206, 190, 128, 3, 4, 3, 4, 198, 205, 4, + 10, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 42, 129, 203, 206, 98, 108, 205, 4, + 128, 171, 108, 153, 154, 198, 209, 153, 153, 153, + 153, 135, 153, 153, 138, 153, 142, 153, 153, 153, + 153, 153, 148, 153, 191, 192, 209, 153, 153, 153, + 192, 111, 90, 203, 198, 4, 4, 198, 206, 108, + 130, 131, 132, 134, 151, 206, 136, 137, 151, 139, + 151, 143, 144, 145, 146, 147, 151, 149, 108, 206, + 108, 133, 140, 141, 206, 203, 205, 108, 152, 151, + 151, 151, 151, 205, 151, 151, 151, 151, 151, 151, + 151, 151, 151, 108, 151, 151, 151, 205, 205, 154, + 108, 156, 205, 206, 205, 205, 157, 205, 205, 108, + 3, 155, 205, 202, 205, 205, 206, 174, 205, 205, + 108, 155, 160, 108, 4, 108, 155, 158, 205, 161, + 204, 205, 206, 159, 204, 205, 204, 205, 202, 155, + 205, 108, 202, 155, 205, 155, 205, 155, 206, 155, + 155, 108, 150, 202, 204 }; #define yyerrok (yyerrstatus = 0) @@ -1444,7 +1446,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ @@ -3507,111 +3509,122 @@ yyreduce: break; case 164: -#line 1257 "rcparse.y" +#line 1252 "rcparse.y" + { + (yyval.rcdata)=(yyvsp[(1) - (2)].rcdata); + } + break; + + case 165: +#line 1261 "rcparse.y" { sub_res_info = (yyvsp[(2) - (3)].res_info); } break; - case 167: -#line 1264 "rcparse.y" + case 168: +#line 1268 "rcparse.y" { define_stringtable (&sub_res_info, (yyvsp[(2) - (3)].il), (yyvsp[(3) - (3)].uni)); - if (yychar != YYEMPTY) - YYERROR; rcparse_discard_strings (); } break; - case 168: -#line 1271 "rcparse.y" + case 169: +#line 1273 "rcparse.y" { define_stringtable (&sub_res_info, (yyvsp[(2) - (4)].il), (yyvsp[(4) - (4)].uni)); - if (yychar != YYEMPTY) - YYERROR; rcparse_discard_strings (); } break; - case 169: -#line 1281 "rcparse.y" + case 170: +#line 1278 "rcparse.y" + { + rcparse_warning (_("invalid stringtable resource.")); + abort (); + } + break; + + case 171: +#line 1286 "rcparse.y" { (yyval.id)=(yyvsp[(1) - (1)].id); } break; - case 170: -#line 1285 "rcparse.y" + case 172: +#line 1290 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = 23; } break; - case 171: -#line 1290 "rcparse.y" + case 173: +#line 1295 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_RCDATA; } break; - case 172: -#line 1295 "rcparse.y" + case 174: +#line 1300 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_MANIFEST; } break; - case 173: -#line 1300 "rcparse.y" + case 175: +#line 1305 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_PLUGPLAY; } break; - case 174: -#line 1305 "rcparse.y" + case 176: +#line 1310 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_VXD; } break; - case 175: -#line 1310 "rcparse.y" + case 177: +#line 1315 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_DLGINCLUDE; } break; - case 176: -#line 1315 "rcparse.y" + case 178: +#line 1320 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_DLGINIT; } break; - case 177: -#line 1320 "rcparse.y" + case 179: +#line 1325 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_ANICURSOR; } break; - case 178: -#line 1325 "rcparse.y" + case 180: +#line 1330 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = RT_ANIICON; } break; - case 179: -#line 1336 "rcparse.y" + case 181: +#line 1341 "rcparse.y" { define_user_data ((yyvsp[(1) - (6)].id), (yyvsp[(2) - (6)].id), &(yyvsp[(3) - (6)].res_info), (yyvsp[(5) - (6)].rcdata).first); if (yychar != YYEMPTY) @@ -3620,8 +3633,8 @@ yyreduce: } break; - case 180: -#line 1343 "rcparse.y" + case 182: +#line 1348 "rcparse.y" { define_user_file ((yyvsp[(1) - (4)].id), (yyvsp[(2) - (4)].id), &(yyvsp[(3) - (4)].res_info), (yyvsp[(4) - (4)].s)); if (yychar != YYEMPTY) @@ -3630,20 +3643,20 @@ yyreduce: } break; - case 181: -#line 1353 "rcparse.y" + case 183: +#line 1358 "rcparse.y" { define_toolbar ((yyvsp[(1) - (8)].id), &(yyvsp[(3) - (8)].res_info), (yyvsp[(4) - (8)].il), (yyvsp[(5) - (8)].il), (yyvsp[(7) - (8)].toobar_item)); } break; - case 182: -#line 1358 "rcparse.y" + case 184: +#line 1363 "rcparse.y" { (yyval.toobar_item)= NULL; } break; - case 183: -#line 1360 "rcparse.y" + case 185: +#line 1365 "rcparse.y" { rc_toolbar_item *c,*n; c = (yyvsp[(1) - (3)].toobar_item); @@ -3664,8 +3677,8 @@ yyreduce: } break; - case 184: -#line 1379 "rcparse.y" + case 186: +#line 1384 "rcparse.y" { rc_toolbar_item *c,*n; c = (yyvsp[(1) - (2)].toobar_item); @@ -3687,8 +3700,8 @@ yyreduce: } break; - case 185: -#line 1404 "rcparse.y" + case 187: +#line 1409 "rcparse.y" { define_versioninfo ((yyvsp[(1) - (6)].id), language, (yyvsp[(3) - (6)].fixver), (yyvsp[(5) - (6)].verinfo)); if (yychar != YYEMPTY) @@ -3697,8 +3710,8 @@ yyreduce: } break; - case 186: -#line 1414 "rcparse.y" + case 188: +#line 1419 "rcparse.y" { (yyval.fixver) = ((rc_fixed_versioninfo *) res_alloc (sizeof (rc_fixed_versioninfo))); @@ -3706,8 +3719,8 @@ yyreduce: } break; - case 187: -#line 1420 "rcparse.y" + case 189: +#line 1425 "rcparse.y" { (yyvsp[(1) - (6)].fixver)->file_version_ms = ((yyvsp[(3) - (6)].il) << 16) | (yyvsp[(4) - (6)].il); (yyvsp[(1) - (6)].fixver)->file_version_ls = ((yyvsp[(5) - (6)].il) << 16) | (yyvsp[(6) - (6)].il); @@ -3715,8 +3728,8 @@ yyreduce: } break; - case 188: -#line 1426 "rcparse.y" + case 190: +#line 1431 "rcparse.y" { (yyvsp[(1) - (6)].fixver)->product_version_ms = ((yyvsp[(3) - (6)].il) << 16) | (yyvsp[(4) - (6)].il); (yyvsp[(1) - (6)].fixver)->product_version_ls = ((yyvsp[(5) - (6)].il) << 16) | (yyvsp[(6) - (6)].il); @@ -3724,119 +3737,119 @@ yyreduce: } break; - case 189: -#line 1432 "rcparse.y" + case 191: +#line 1437 "rcparse.y" { (yyvsp[(1) - (3)].fixver)->file_flags_mask = (yyvsp[(3) - (3)].il); (yyval.fixver) = (yyvsp[(1) - (3)].fixver); } break; - case 190: -#line 1437 "rcparse.y" + case 192: +#line 1442 "rcparse.y" { (yyvsp[(1) - (3)].fixver)->file_flags = (yyvsp[(3) - (3)].il); (yyval.fixver) = (yyvsp[(1) - (3)].fixver); } break; - case 191: -#line 1442 "rcparse.y" + case 193: +#line 1447 "rcparse.y" { (yyvsp[(1) - (3)].fixver)->file_os = (yyvsp[(3) - (3)].il); (yyval.fixver) = (yyvsp[(1) - (3)].fixver); } break; - case 192: -#line 1447 "rcparse.y" + case 194: +#line 1452 "rcparse.y" { (yyvsp[(1) - (3)].fixver)->file_type = (yyvsp[(3) - (3)].il); (yyval.fixver) = (yyvsp[(1) - (3)].fixver); } break; - case 193: -#line 1452 "rcparse.y" + case 195: +#line 1457 "rcparse.y" { (yyvsp[(1) - (3)].fixver)->file_subtype = (yyvsp[(3) - (3)].il); (yyval.fixver) = (yyvsp[(1) - (3)].fixver); } break; - case 194: -#line 1466 "rcparse.y" + case 196: +#line 1471 "rcparse.y" { (yyval.verinfo) = NULL; } break; - case 195: -#line 1470 "rcparse.y" + case 197: +#line 1475 "rcparse.y" { (yyval.verinfo) = append_ver_stringfileinfo ((yyvsp[(1) - (8)].verinfo), (yyvsp[(4) - (8)].s), (yyvsp[(6) - (8)].verstring)); } break; - case 196: -#line 1474 "rcparse.y" + case 198: +#line 1479 "rcparse.y" { (yyval.verinfo) = append_ver_varfileinfo ((yyvsp[(1) - (7)].verinfo), (yyvsp[(5) - (7)].uni), (yyvsp[(6) - (7)].vervar)); } break; - case 197: -#line 1481 "rcparse.y" + case 199: +#line 1486 "rcparse.y" { (yyval.verstring) = NULL; } break; - case 198: -#line 1485 "rcparse.y" + case 200: +#line 1490 "rcparse.y" { (yyval.verstring) = append_verval ((yyvsp[(1) - (5)].verstring), (yyvsp[(3) - (5)].uni), (yyvsp[(5) - (5)].uni)); } break; - case 199: -#line 1492 "rcparse.y" + case 201: +#line 1497 "rcparse.y" { (yyval.vervar) = NULL; } break; - case 200: -#line 1496 "rcparse.y" + case 202: +#line 1501 "rcparse.y" { (yyval.vervar) = append_vertrans ((yyvsp[(1) - (3)].vervar), (yyvsp[(2) - (3)].il), (yyvsp[(3) - (3)].il)); } break; - case 201: -#line 1505 "rcparse.y" + case 203: +#line 1510 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = (yyvsp[(1) - (1)].il); } break; - case 202: -#line 1510 "rcparse.y" + case 204: +#line 1515 "rcparse.y" { res_unistring_to_id (&(yyval.id), (yyvsp[(1) - (1)].uni)); } break; - case 203: -#line 1519 "rcparse.y" + case 205: +#line 1524 "rcparse.y" { (yyval.uni) = (yyvsp[(1) - (1)].uni); } break; - case 204: -#line 1523 "rcparse.y" + case 206: +#line 1528 "rcparse.y" { unichar *h = NULL; unicode_from_ascii ((rc_uint_type *) NULL, &h, (yyvsp[(1) - (1)].s)); @@ -3844,30 +3857,30 @@ yyreduce: } break; - case 205: -#line 1533 "rcparse.y" + case 207: +#line 1538 "rcparse.y" { (yyval.id).named = 0; (yyval.id).u.id = (yyvsp[(1) - (2)].il); } break; - case 206: -#line 1538 "rcparse.y" + case 208: +#line 1543 "rcparse.y" { res_unistring_to_id (&(yyval.id), (yyvsp[(1) - (1)].uni)); } break; - case 207: -#line 1542 "rcparse.y" + case 209: +#line 1547 "rcparse.y" { res_unistring_to_id (&(yyval.id), (yyvsp[(1) - (2)].uni)); } break; - case 208: -#line 1552 "rcparse.y" + case 210: +#line 1557 "rcparse.y" { memset (&(yyval.res_info), 0, sizeof (rc_res_res_info)); (yyval.res_info).language = language; @@ -3876,8 +3889,8 @@ yyreduce: } break; - case 209: -#line 1559 "rcparse.y" + case 211: +#line 1564 "rcparse.y" { (yyval.res_info) = (yyvsp[(1) - (2)].res_info); (yyval.res_info).memflags |= (yyvsp[(2) - (2)].memflags).on; @@ -3885,32 +3898,32 @@ yyreduce: } break; - case 210: -#line 1565 "rcparse.y" + case 212: +#line 1570 "rcparse.y" { (yyval.res_info) = (yyvsp[(1) - (3)].res_info); (yyval.res_info).characteristics = (yyvsp[(3) - (3)].il); } break; - case 211: -#line 1570 "rcparse.y" + case 213: +#line 1575 "rcparse.y" { (yyval.res_info) = (yyvsp[(1) - (4)].res_info); (yyval.res_info).language = (yyvsp[(3) - (4)].il) | ((yyvsp[(4) - (4)].il) << SUBLANG_SHIFT); } break; - case 212: -#line 1575 "rcparse.y" + case 214: +#line 1580 "rcparse.y" { (yyval.res_info) = (yyvsp[(1) - (3)].res_info); (yyval.res_info).version = (yyvsp[(3) - (3)].il); } break; - case 213: -#line 1585 "rcparse.y" + case 215: +#line 1590 "rcparse.y" { memset (&(yyval.res_info), 0, sizeof (rc_res_res_info)); (yyval.res_info).language = language; @@ -3918,8 +3931,8 @@ yyreduce: } break; - case 214: -#line 1591 "rcparse.y" + case 216: +#line 1596 "rcparse.y" { (yyval.res_info) = (yyvsp[(1) - (2)].res_info); (yyval.res_info).memflags |= (yyvsp[(2) - (2)].memflags).on; @@ -3927,8 +3940,8 @@ yyreduce: } break; - case 215: -#line 1602 "rcparse.y" + case 217: +#line 1607 "rcparse.y" { memset (&(yyval.res_info), 0, sizeof (rc_res_res_info)); (yyval.res_info).language = language; @@ -3936,8 +3949,8 @@ yyreduce: } break; - case 216: -#line 1608 "rcparse.y" + case 218: +#line 1613 "rcparse.y" { (yyval.res_info) = (yyvsp[(1) - (2)].res_info); (yyval.res_info).memflags |= (yyvsp[(2) - (2)].memflags).on; @@ -3945,85 +3958,85 @@ yyreduce: } break; - case 217: -#line 1620 "rcparse.y" + case 219: +#line 1625 "rcparse.y" { (yyval.memflags).on = MEMFLAG_MOVEABLE; (yyval.memflags).off = 0; } break; - case 218: -#line 1625 "rcparse.y" + case 220: +#line 1630 "rcparse.y" { (yyval.memflags).on = 0; (yyval.memflags).off = MEMFLAG_MOVEABLE; } break; - case 219: -#line 1630 "rcparse.y" + case 221: +#line 1635 "rcparse.y" { (yyval.memflags).on = MEMFLAG_PURE; (yyval.memflags).off = 0; } break; - case 220: -#line 1635 "rcparse.y" + case 222: +#line 1640 "rcparse.y" { (yyval.memflags).on = 0; (yyval.memflags).off = MEMFLAG_PURE; } break; - case 221: -#line 1640 "rcparse.y" + case 223: +#line 1645 "rcparse.y" { (yyval.memflags).on = MEMFLAG_PRELOAD; (yyval.memflags).off = 0; } break; - case 222: -#line 1645 "rcparse.y" + case 224: +#line 1650 "rcparse.y" { (yyval.memflags).on = 0; (yyval.memflags).off = MEMFLAG_PRELOAD; } break; - case 223: -#line 1650 "rcparse.y" + case 225: +#line 1655 "rcparse.y" { (yyval.memflags).on = MEMFLAG_DISCARDABLE; (yyval.memflags).off = 0; } break; - case 224: -#line 1660 "rcparse.y" + case 226: +#line 1665 "rcparse.y" { (yyval.s) = (yyvsp[(1) - (1)].s); } break; - case 225: -#line 1664 "rcparse.y" + case 227: +#line 1669 "rcparse.y" { (yyval.s) = (yyvsp[(1) - (1)].s); } break; - case 226: -#line 1672 "rcparse.y" + case 228: +#line 1677 "rcparse.y" { (yyval.uni) = (yyvsp[(1) - (1)].uni); } break; - case 227: -#line 1677 "rcparse.y" + case 229: +#line 1682 "rcparse.y" { rc_uint_type l1 = unichar_len ((yyvsp[(1) - (2)].uni)); rc_uint_type l2 = unichar_len ((yyvsp[(2) - (2)].uni)); @@ -4037,15 +4050,15 @@ yyreduce: } break; - case 228: -#line 1692 "rcparse.y" + case 230: +#line 1697 "rcparse.y" { (yyval.uni) = unichar_dup ((yyvsp[(1) - (1)].uni)); } break; - case 229: -#line 1696 "rcparse.y" + case 231: +#line 1701 "rcparse.y" { unichar *h = NULL; unicode_from_ascii ((rc_uint_type *) NULL, &h, (yyvsp[(1) - (1)].s)); @@ -4053,15 +4066,15 @@ yyreduce: } break; - case 230: -#line 1705 "rcparse.y" + case 232: +#line 1710 "rcparse.y" { (yyval.ss) = (yyvsp[(1) - (1)].ss); } break; - case 231: -#line 1709 "rcparse.y" + case 233: +#line 1714 "rcparse.y" { rc_uint_type l = (yyvsp[(1) - (2)].ss).length + (yyvsp[(2) - (2)].ss).length; char *h = (char *) res_alloc (l); @@ -4072,15 +4085,15 @@ yyreduce: } break; - case 232: -#line 1721 "rcparse.y" + case 234: +#line 1726 "rcparse.y" { (yyval.suni) = (yyvsp[(1) - (1)].suni); } break; - case 233: -#line 1725 "rcparse.y" + case 235: +#line 1730 "rcparse.y" { rc_uint_type l = (yyvsp[(1) - (2)].suni).length + (yyvsp[(2) - (2)].suni).length; unichar *h = (unichar *) res_alloc (l * sizeof (unichar)); @@ -4091,264 +4104,264 @@ yyreduce: } break; - case 234: -#line 1747 "rcparse.y" + case 236: +#line 1752 "rcparse.y" { style |= (yyvsp[(1) - (1)].il); } break; - case 235: -#line 1751 "rcparse.y" + case 237: +#line 1756 "rcparse.y" { style &=~ (yyvsp[(2) - (2)].il); } break; - case 236: -#line 1755 "rcparse.y" + case 238: +#line 1760 "rcparse.y" { style |= (yyvsp[(3) - (3)].il); } break; - case 237: -#line 1759 "rcparse.y" + case 239: +#line 1764 "rcparse.y" { style &=~ (yyvsp[(4) - (4)].il); } break; - case 238: -#line 1766 "rcparse.y" + case 240: +#line 1771 "rcparse.y" { (yyval.il) = (yyvsp[(1) - (1)].i).val; } break; - case 239: -#line 1770 "rcparse.y" + case 241: +#line 1775 "rcparse.y" { (yyval.il) = (yyvsp[(2) - (3)].il); } break; - case 240: -#line 1779 "rcparse.y" + case 242: +#line 1784 "rcparse.y" { (yyval.il) = 0; } break; - case 241: -#line 1783 "rcparse.y" + case 243: +#line 1788 "rcparse.y" { (yyval.il) = (yyvsp[(1) - (1)].il); } break; - case 242: -#line 1792 "rcparse.y" + case 244: +#line 1797 "rcparse.y" { (yyval.il) = (yyvsp[(2) - (2)].il); } break; - case 243: -#line 1801 "rcparse.y" + case 245: +#line 1806 "rcparse.y" { (yyval.il) = (yyvsp[(1) - (1)].i).val; } break; - case 244: -#line 1810 "rcparse.y" + case 246: +#line 1815 "rcparse.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; - case 245: -#line 1814 "rcparse.y" + case 247: +#line 1819 "rcparse.y" { (yyval.i) = (yyvsp[(2) - (3)].i); } break; - case 246: -#line 1818 "rcparse.y" + case 248: +#line 1823 "rcparse.y" { (yyval.i).val = ~ (yyvsp[(2) - (2)].i).val; (yyval.i).dword = (yyvsp[(2) - (2)].i).dword; } break; - case 247: -#line 1823 "rcparse.y" + case 249: +#line 1828 "rcparse.y" { (yyval.i).val = - (yyvsp[(2) - (2)].i).val; (yyval.i).dword = (yyvsp[(2) - (2)].i).dword; } break; - case 248: -#line 1828 "rcparse.y" + case 250: +#line 1833 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val * (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 249: -#line 1833 "rcparse.y" + case 251: +#line 1838 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val / (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 250: -#line 1838 "rcparse.y" + case 252: +#line 1843 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val % (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 251: -#line 1843 "rcparse.y" + case 253: +#line 1848 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val + (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 252: -#line 1848 "rcparse.y" + case 254: +#line 1853 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val - (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 253: -#line 1853 "rcparse.y" + case 255: +#line 1858 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val & (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 254: -#line 1858 "rcparse.y" + case 256: +#line 1863 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val ^ (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 255: -#line 1863 "rcparse.y" + case 257: +#line 1868 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val | (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 256: -#line 1874 "rcparse.y" + case 258: +#line 1879 "rcparse.y" { (yyval.il) = (yyvsp[(2) - (2)].il); } break; - case 257: -#line 1883 "rcparse.y" + case 259: +#line 1888 "rcparse.y" { (yyval.il) = (yyvsp[(1) - (1)].i).val; } break; - case 258: -#line 1894 "rcparse.y" + case 260: +#line 1899 "rcparse.y" { (yyval.i) = (yyvsp[(1) - (1)].i); } break; - case 259: -#line 1898 "rcparse.y" + case 261: +#line 1903 "rcparse.y" { (yyval.i) = (yyvsp[(2) - (3)].i); } break; - case 260: -#line 1902 "rcparse.y" + case 262: +#line 1907 "rcparse.y" { (yyval.i).val = ~ (yyvsp[(2) - (2)].i).val; (yyval.i).dword = (yyvsp[(2) - (2)].i).dword; } break; - case 261: -#line 1907 "rcparse.y" + case 263: +#line 1912 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val * (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 262: -#line 1912 "rcparse.y" + case 264: +#line 1917 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val / (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 263: -#line 1917 "rcparse.y" + case 265: +#line 1922 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val % (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 264: -#line 1922 "rcparse.y" + case 266: +#line 1927 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val + (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 265: -#line 1927 "rcparse.y" + case 267: +#line 1932 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val - (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 266: -#line 1932 "rcparse.y" + case 268: +#line 1937 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val & (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 267: -#line 1937 "rcparse.y" + case 269: +#line 1942 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val ^ (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; } break; - case 268: -#line 1942 "rcparse.y" + case 270: +#line 1947 "rcparse.y" { (yyval.i).val = (yyvsp[(1) - (3)].i).val | (yyvsp[(3) - (3)].i).val; (yyval.i).dword = (yyvsp[(1) - (3)].i).dword || (yyvsp[(3) - (3)].i).dword; @@ -4357,7 +4370,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 4361 "rcparse.c" +#line 4374 "rcparse.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -4571,7 +4584,7 @@ yyreturn: } -#line 1948 "rcparse.y" +#line 1953 "rcparse.y" /* Set the language from the command line. */ diff --git a/binutils/rcparse.h b/binutils/rcparse.h index a299131..e86edd9 100644 --- a/binutils/rcparse.h +++ b/binutils/rcparse.h @@ -285,7 +285,7 @@ typedef union YYSTYPE const unichar *s; } suni; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 290 "rcparse.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/binutils/rcparse.y b/binutils/rcparse.y index 64ea966..8caa3ef 100644 --- a/binutils/rcparse.y +++ b/binutils/rcparse.y @@ -1,5 +1,5 @@ %{ /* rcparse.y -- parser for Windows rc files - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007 + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Extended by Kai Tietz, Onevision. @@ -926,7 +926,7 @@ resid: $$.named = 0; $$.u.id = $1; } - | res_unicode_string + | res_unicode_string_concat { $$.named = 1; $$.u.n.name = $1; @@ -1248,6 +1248,10 @@ rcdata_data: $1.last->next = ri; $$.last = ri; } + | rcdata_data ',' + { + $$=$1; + } ; /* Stringtable resources. */ @@ -1263,17 +1267,18 @@ string_data: | string_data numexpr res_unicode_string_concat { define_stringtable (&sub_res_info, $2, $3); - if (yychar != YYEMPTY) - YYERROR; rcparse_discard_strings (); } | string_data numexpr ',' res_unicode_string_concat { define_stringtable (&sub_res_info, $2, $4); - if (yychar != YYEMPTY) - YYERROR; rcparse_discard_strings (); } + | string_data error + { + rcparse_warning (_("invalid stringtable resource.")); + abort (); + } ; rcdata_id: diff --git a/binutils/rdcoff.c b/binutils/rdcoff.c index 441688b..473305e 100644 --- a/binutils/rdcoff.c +++ b/binutils/rdcoff.c @@ -1,5 +1,5 @@ /* stabs.c -- Parse COFF debugging information - Copyright 1996, 1999, 2000, 2002, 2003, 2007 + Copyright 1996, 1999, 2000, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor . diff --git a/binutils/rddbg.c b/binutils/rddbg.c index 6d26fee..e21ed6f 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, 2007 + Copyright 1995, 1996, 1997, 2000, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor . @@ -45,7 +45,7 @@ static void free_saved_stabs (void); pointer. */ void * -read_debugging_info (bfd *abfd, asymbol **syms, long symcount) +read_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_boolean no_messages) { void *dhandle; bfd_boolean found; @@ -84,8 +84,9 @@ read_debugging_info (bfd *abfd, asymbol **syms, long symcount) if (! found) { - non_fatal (_("%s: no recognized debugging information"), - bfd_get_filename (abfd)); + if (! no_messages) + non_fatal (_("%s: no recognized debugging information"), + bfd_get_filename (abfd)); return NULL; } diff --git a/binutils/readelf.c b/binutils/readelf.c index 9fc8e0c..2bfb3f6 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -1,6 +1,6 @@ /* readelf.c -- display contents of an ELF format file - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. Originally developed by Eric Youngdale Modifications by Nick Clifton @@ -41,28 +41,13 @@ ELF file than is provided by objdump. In particular it can display DWARF debugging information which (at the moment) objdump cannot. */ +#include "config.h" #include "sysdep.h" #include #include #include - -/* for PATH_MAX */ -#ifdef HAVE_LIMITS_H -#include -#endif - -#ifndef PATH_MAX -/* for MAXPATHLEN */ -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# ifndef PATH_MAX -# ifdef MAXPATHLEN -# define PATH_MAX MAXPATHLEN -# else -# define PATH_MAX 1024 -# endif -# endif +#ifdef HAVE_ZLIB_H +#include #endif #if __GNUC__ >= 2 @@ -126,6 +111,7 @@ #include "elf/i960.h" #include "elf/ia64.h" #include "elf/ip2k.h" +#include "elf/lm32.h" #include "elf/iq2000.h" #include "elf/m32c.h" #include "elf/m32r.h" @@ -133,6 +119,7 @@ #include "elf/m68hc11.h" #include "elf/mcore.h" #include "elf/mep.h" +#include "elf/microblaze.h" #include "elf/mips.h" #include "elf/mmix.h" #include "elf/mn10200.h" @@ -158,20 +145,23 @@ #include "getopt.h" #include "libiberty.h" +#include "safe-ctype.h" +#include "filenames.h" -char *program_name = "readelf"; +char * program_name = "readelf"; +int do_wide; static long archive_file_offset; static unsigned long archive_file_size; static unsigned long dynamic_addr; static bfd_size_type dynamic_size; static unsigned int dynamic_nent; -static char *dynamic_strings; +static char * dynamic_strings; static unsigned long dynamic_strings_length; -static char *string_table; +static char * string_table; static unsigned long string_table_length; static unsigned long num_dynamic_syms; -static Elf_Internal_Sym *dynamic_symbols; -static Elf_Internal_Syminfo *dynamic_syminfo; +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[PATH_MAX]; @@ -179,10 +169,10 @@ 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; -static Elf_Internal_Phdr *program_headers; -static Elf_Internal_Dyn *dynamic_section; -static Elf_Internal_Shdr *symtab_shndx_hdr; +static Elf_Internal_Shdr * section_headers; +static Elf_Internal_Phdr * program_headers; +static Elf_Internal_Dyn * dynamic_section; +static Elf_Internal_Shdr * symtab_shndx_hdr; static int show_name; static int do_dynamic; static int do_syms; @@ -196,56 +186,61 @@ static int do_using_dynamic; static int do_header; static int do_dump; static int do_version; -static int do_wide; static int do_histogram; static int do_debugging; static int do_arch; static int do_notes; +static int do_archive_index; static int is_32bit_elf; struct group_list { - struct group_list *next; + struct group_list * next; unsigned int section_index; }; struct group { - struct group_list *root; + struct group_list * root; unsigned int group_index; }; static size_t group_count; -static struct group *section_groups; -static struct group **section_headers_groups; +static struct group * section_groups; +static struct group ** section_headers_groups; + -/* A linked list of the section names for which dumps were requested - by name. */ +/* Flag bits indicating particular types of dump. */ +#define HEX_DUMP (1 << 0) /* The -x command line switch. */ +#define DISASS_DUMP (1 << 1) /* The -i command line switch. */ +#define DEBUG_DUMP (1 << 2) /* The -w command line switch. */ +#define STRING_DUMP (1 << 3) /* The -p command line switch. */ +#define RELOC_DUMP (1 << 4) /* The -R command line switch. */ + +typedef unsigned char dump_type; + +/* A linked list of the section names for which dumps were requested. */ struct dump_list_entry { - char *name; - int type; - struct dump_list_entry *next; + char * name; + dump_type type; + struct dump_list_entry * next; }; -static struct dump_list_entry *dump_sects_byname; +static struct dump_list_entry * dump_sects_byname; -/* A dynamic array of flags indicating for which sections a hex dump - has been requested (via the -x switch) and/or a disassembly dump - (via the -i switch). */ -char *cmdline_dump_sects = NULL; -unsigned num_cmdline_dump_sects = 0; +/* A dynamic array of flags indicating for which sections a dump + has been requested via command line switches. */ +static dump_type * cmdline_dump_sects = NULL; +static unsigned int num_cmdline_dump_sects = 0; /* A dynamic array of flags indicating for which sections a dump of some kind has been requested. It is reset on a per-object file basis and then initialised from the cmdline_dump_sects array, the results of interpreting the -w switch, and the dump_sects_byname list. */ -char *dump_sects = NULL; -unsigned int num_dump_sects = 0; +static dump_type * dump_sects = NULL; +static unsigned int num_dump_sects = 0; -#define HEX_DUMP (1 << 0) -#define DISASS_DUMP (1 << 1) -#define DEBUG_DUMP (1 << 2) /* How to print a vma value. */ typedef enum print_mode @@ -260,7 +255,7 @@ typedef enum print_mode } print_mode; -static void (*byte_put) (unsigned char *, bfd_vma, int); +static void (* byte_put) (unsigned char *, bfd_vma, int); #define UNKNOWN -1 @@ -270,22 +265,6 @@ static void (*byte_put) (unsigned char *, bfd_vma, int); : ((X)->sh_name >= string_table_length ? "" \ : string_table + (X)->sh_name)) -/* Given st_shndx I, map to section_headers index. */ -#define SECTION_HEADER_INDEX(I) \ - ((I) < SHN_LORESERVE \ - ? (I) \ - : ((I) <= SHN_HIRESERVE \ - ? 0 \ - : (I) - (SHN_HIRESERVE + 1 - SHN_LORESERVE))) - -/* Reverse of the above. */ -#define SECTION_HEADER_NUM(N) \ - ((N) < SHN_LORESERVE \ - ? (N) \ - : (N) + (SHN_HIRESERVE + 1 - SHN_LORESERVE)) - -#define SECTION_HEADER(I) (section_headers + SECTION_HEADER_INDEX (I)) - #define DT_VERSIONTAGIDX(tag) (DT_VERNEEDNUM - (tag)) /* Reverse order! */ #define BYTE_GET(field) byte_get (field, sizeof (field)) @@ -305,10 +284,10 @@ static void (*byte_put) (unsigned char *, bfd_vma, int); #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, - const char *reason) +get_data (void * var, FILE * file, long offset, size_t size, size_t nmemb, + const char * reason) { - void *mvar; + void * mvar; if (size == 0 || nmemb == 0) return NULL; @@ -316,7 +295,7 @@ get_data (void *var, FILE *file, long offset, size_t size, size_t nmemb, if (fseek (file, archive_file_offset + offset, SEEK_SET)) { error (_("Unable to seek to 0x%lx for %s\n"), - archive_file_offset + offset, reason); + (unsigned long) archive_file_offset + offset, reason); return NULL; } @@ -351,7 +330,7 @@ get_data (void *var, FILE *file, long offset, size_t size, size_t nmemb, } static void -byte_put_little_endian (unsigned char *field, bfd_vma value, int size) +byte_put_little_endian (unsigned char * field, bfd_vma value, int size) { switch (size) { @@ -363,6 +342,8 @@ byte_put_little_endian (unsigned char *field, bfd_vma value, int size) /* Fall through. */ case 4: field[3] = (value >> 24) & 0xff; + /* Fall through. */ + case 3: field[2] = (value >> 16) & 0xff; /* Fall through. */ case 2: @@ -378,169 +359,141 @@ byte_put_little_endian (unsigned char *field, bfd_vma value, int size) } } -#if defined BFD64 && !BFD_HOST_64BIT_LONG +/* Print a VMA value. */ + static int -print_dec_vma (bfd_vma vma, int is_signed) +print_vma (bfd_vma vma, print_mode mode) { - char buf[40]; - char *bufp = buf; int nc = 0; - if (is_signed && (bfd_signed_vma) vma < 0) + switch (mode) { - vma = -vma; - putchar ('-'); - nc = 1; - } + case FULL_HEX: + nc = printf ("0x"); + /* Drop through. */ - do - { - *bufp++ = '0' + vma % 10; - vma /= 10; - } - while (vma != 0); - nc += bufp - buf; + case LONG_HEX: +#ifdef BFD64 + if (is_32bit_elf) + return nc + printf ("%8.8" BFD_VMA_FMT "x", vma); +#endif + printf_vma (vma); + return nc + 16; + + case DEC_5: + if (vma <= 99999) + return printf ("%5" BFD_VMA_FMT "d", vma); + /* Drop through. */ + + case PREFIX_HEX: + nc = printf ("0x"); + /* Drop through. */ + + case HEX: + return nc + printf ("%" BFD_VMA_FMT "x", vma); - while (bufp > buf) - putchar (*--bufp); - return nc; + case DEC: + return printf ("%" BFD_VMA_FMT "d", vma); + + case UNSIGNED: + return printf ("%" BFD_VMA_FMT "u", vma); + } + return 0; } -static int -print_hex_vma (bfd_vma vma) +/* Display a symbol on stdout. Handles the display of non-printing characters. + + If DO_WIDE is not true then format the symbol to be at most WIDTH characters, + truncating as necessary. If WIDTH is negative then format the string to be + exactly - WIDTH characters, truncating or padding as necessary. + + Returns the number of emitted characters. */ + +static unsigned int +print_symbol (int width, const char * symbol) { - char buf[32]; - char *bufp = buf; - int nc; + const char * c; + bfd_boolean extra_padding = FALSE; + unsigned int num_printed = 0; - do + if (do_wide) { - char digit = '0' + (vma & 0x0f); - if (digit > '9') - digit += 'a' - '0' - 10; - *bufp++ = digit; - vma >>= 4; + /* Set the width to a very large value. This simplifies the code below. */ + width = INT_MAX; + } + else if (width < 0) + { + /* Keep the width positive. This also helps. */ + width = - width; + extra_padding = TRUE; } - while (vma != 0); - nc = bufp - buf; - - while (bufp > buf) - putchar (*--bufp); - return nc; -} -#endif -/* Print a VMA value. */ -static int -print_vma (bfd_vma vma, print_mode mode) -{ -#ifdef BFD64 - if (is_32bit_elf) -#endif + while (width) { - switch (mode) - { - case FULL_HEX: - return printf ("0x%8.8lx", (unsigned long) vma); + int len; - case LONG_HEX: - return printf ("%8.8lx", (unsigned long) vma); + c = symbol; - case DEC_5: - if (vma <= 99999) - return printf ("%5ld", (long) vma); - /* Drop through. */ + /* Look for non-printing symbols inside the symbol's name. + This test is triggered in particular by the names generated + by the assembler for local labels. */ + while (ISPRINT (* c)) + c++; - case PREFIX_HEX: - return printf ("0x%lx", (unsigned long) vma); + len = c - symbol; - case HEX: - return printf ("%lx", (unsigned long) vma); + if (len) + { + if (len > width) + len = width; - case DEC: - return printf ("%ld", (unsigned long) vma); + printf ("%.*s", len, symbol); - case UNSIGNED: - return printf ("%lu", (unsigned long) vma); + width -= len; + num_printed += len; } - } -#ifdef BFD64 - else - { - int nc = 0; - - switch (mode) - { - case FULL_HEX: - nc = printf ("0x"); - /* Drop through. */ - case LONG_HEX: - printf_vma (vma); - return nc + 16; + if (* c == 0 || width == 0) + break; - case PREFIX_HEX: - nc = printf ("0x"); - /* Drop through. */ + /* Now display the non-printing character, if + there is room left in which to dipslay it. */ + if (*c < 32) + { + if (width < 2) + break; - case HEX: -#if BFD_HOST_64BIT_LONG - return nc + printf ("%lx", vma); -#else - return nc + print_hex_vma (vma); -#endif + printf ("^%c", *c + 0x40); - case DEC: -#if BFD_HOST_64BIT_LONG - return printf ("%ld", vma); -#else - return print_dec_vma (vma, 1); -#endif + width -= 2; + num_printed += 2; + } + else + { + if (width < 6) + break; - case DEC_5: -#if BFD_HOST_64BIT_LONG - if (vma <= 99999) - return printf ("%5ld", vma); - else - return printf ("%#lx", vma); -#else - if (vma <= 99999) - return printf ("%5ld", _bfd_int64_low (vma)); - else - return print_hex_vma (vma); -#endif + printf ("<0x%.2x>", *c); - case UNSIGNED: -#if BFD_HOST_64BIT_LONG - return printf ("%lu", vma); -#else - return print_dec_vma (vma, 0); -#endif + width -= 6; + num_printed += 6; } + + symbol = c + 1; } -#endif - return 0; -} -/* Display a symbol on stdout. If do_wide is not true then - format the symbol to be at most WIDTH characters, - truncating as necessary. If WIDTH is negative then - format the string to be exactly - WIDTH characters, - truncating or padding as necessary. */ + if (extra_padding && width > 0) + { + /* Fill in the remaining spaces. */ + printf ("%-*s", width, " "); + num_printed += 2; + } -static void -print_symbol (int width, const char *symbol) -{ - if (do_wide) - printf ("%s", symbol); - else if (width < 0) - printf ("%-*.*s", width, width, symbol); - else - printf ("%-.*s", width, symbol); + return num_printed; } static void -byte_put_big_endian (unsigned char *field, bfd_vma value, int size) +byte_put_big_endian (unsigned char * field, bfd_vma value, int size) { switch (size) { @@ -554,8 +507,11 @@ byte_put_big_endian (unsigned char *field, bfd_vma value, int size) /* Fall through. */ case 4: field[3] = value & 0xff; - field[2] = (value >> 8) & 0xff; - value >>= 16; + value >>= 8; + /* Fall through. */ + case 3: + field[2] = value & 0xff; + value >>= 8; /* Fall through. */ case 2: field[1] = value & 0xff; @@ -574,7 +530,7 @@ byte_put_big_endian (unsigned char *field, bfd_vma value, int size) /* Return a pointer to section NAME, or NULL if no such section exists. */ static Elf_Internal_Shdr * -find_section (const char *name) +find_section (const char * name) { unsigned int i; @@ -588,7 +544,7 @@ find_section (const char *name) /* Guess the relocation size commonly used by the specific machines. */ static int -guess_is_rela (unsigned long e_machine) +guess_is_rela (unsigned int e_machine) { switch (e_machine) { @@ -617,6 +573,7 @@ guess_is_rela (unsigned long e_machine) case EM_AVR_OLD: case EM_BLACKFIN: case EM_CR16: + case EM_CR16_OLD: case EM_CRIS: case EM_CRX: case EM_D30V: @@ -631,6 +588,8 @@ guess_is_rela (unsigned long e_machine) case EM_IP2K: case EM_IP2K_OLD: case EM_IQ2000: + case EM_LATTICEMICO32: + case EM_M32C_OLD: case EM_M32C: case EM_M32R: case EM_MCORE: @@ -657,9 +616,12 @@ guess_is_rela (unsigned long e_machine) case EM_CYGNUS_V850: case EM_VAX: case EM_X86_64: + case EM_L1OM: case EM_XSTORMY16: case EM_XTENSA: case EM_XTENSA_OLD: + case EM_MICROBLAZE: + case EM_MICROBLAZE_OLD: return TRUE; case EM_68HC05: @@ -686,27 +648,29 @@ guess_is_rela (unsigned long e_machine) } static int -slurp_rela_relocs (FILE *file, +slurp_rela_relocs (FILE * file, unsigned long rel_offset, unsigned long rel_size, - Elf_Internal_Rela **relasp, - unsigned long *nrelasp) + Elf_Internal_Rela ** relasp, + unsigned long * nrelasp) { - Elf_Internal_Rela *relas; + Elf_Internal_Rela * relas; unsigned long nrelas; unsigned int i; if (is_32bit_elf) { - Elf32_External_Rela *erelas; + Elf32_External_Rela * erelas; - erelas = get_data (NULL, file, rel_offset, 1, rel_size, _("relocs")); + erelas = (Elf32_External_Rela *) get_data (NULL, file, rel_offset, 1, + rel_size, _("relocs")); if (!erelas) return 0; nrelas = rel_size / sizeof (Elf32_External_Rela); - relas = cmalloc (nrelas, sizeof (Elf_Internal_Rela)); + relas = (Elf_Internal_Rela *) cmalloc (nrelas, + sizeof (Elf_Internal_Rela)); if (relas == NULL) { @@ -726,15 +690,17 @@ slurp_rela_relocs (FILE *file, } else { - Elf64_External_Rela *erelas; + Elf64_External_Rela * erelas; - erelas = get_data (NULL, file, rel_offset, 1, rel_size, _("relocs")); + erelas = (Elf64_External_Rela *) get_data (NULL, file, rel_offset, 1, + rel_size, _("relocs")); if (!erelas) return 0; nrelas = rel_size / sizeof (Elf64_External_Rela); - relas = cmalloc (nrelas, sizeof (Elf_Internal_Rela)); + relas = (Elf_Internal_Rela *) cmalloc (nrelas, + sizeof (Elf_Internal_Rela)); if (relas == NULL) { @@ -748,6 +714,28 @@ slurp_rela_relocs (FILE *file, relas[i].r_offset = BYTE_GET (erelas[i].r_offset); relas[i].r_info = BYTE_GET (erelas[i].r_info); relas[i].r_addend = BYTE_GET (erelas[i].r_addend); + + /* The #ifdef BFD64 below is to prevent a compile time + warning. We know that if we do not have a 64 bit data + type that we will never execute this code anyway. */ +#ifdef BFD64 + if (elf_header.e_machine == EM_MIPS + && elf_header.e_ident[EI_DATA] != ELFDATA2MSB) + { + /* In little-endian objects, r_info isn't really a + 64-bit little-endian value: it has a 32-bit + little-endian symbol index followed by four + individual byte fields. Reorder INFO + accordingly. */ + bfd_vma info = relas[i].r_info; + info = (((info & 0xffffffff) << 32) + | ((info >> 56) & 0xff) + | ((info >> 40) & 0xff00) + | ((info >> 24) & 0xff0000) + | ((info >> 8) & 0xff000000)); + relas[i].r_info = info; + } +#endif /* BFD64 */ } free (erelas); @@ -758,27 +746,28 @@ slurp_rela_relocs (FILE *file, } static int -slurp_rel_relocs (FILE *file, +slurp_rel_relocs (FILE * file, unsigned long rel_offset, unsigned long rel_size, - Elf_Internal_Rela **relsp, - unsigned long *nrelsp) + Elf_Internal_Rela ** relsp, + unsigned long * nrelsp) { - Elf_Internal_Rela *rels; + Elf_Internal_Rela * rels; unsigned long nrels; unsigned int i; if (is_32bit_elf) { - Elf32_External_Rel *erels; + Elf32_External_Rel * erels; - erels = get_data (NULL, file, rel_offset, 1, rel_size, _("relocs")); + erels = (Elf32_External_Rel *) get_data (NULL, file, rel_offset, 1, + rel_size, _("relocs")); if (!erels) return 0; nrels = rel_size / sizeof (Elf32_External_Rel); - rels = cmalloc (nrels, sizeof (Elf_Internal_Rela)); + rels = (Elf_Internal_Rela *) cmalloc (nrels, sizeof (Elf_Internal_Rela)); if (rels == NULL) { @@ -798,15 +787,16 @@ slurp_rel_relocs (FILE *file, } else { - Elf64_External_Rel *erels; + Elf64_External_Rel * erels; - erels = get_data (NULL, file, rel_offset, 1, rel_size, _("relocs")); + erels = (Elf64_External_Rel *) get_data (NULL, file, rel_offset, 1, + rel_size, _("relocs")); if (!erels) return 0; nrels = rel_size / sizeof (Elf64_External_Rel); - rels = cmalloc (nrels, sizeof (Elf_Internal_Rela)); + rels = (Elf_Internal_Rela *) cmalloc (nrels, sizeof (Elf_Internal_Rela)); if (rels == NULL) { @@ -820,6 +810,28 @@ slurp_rel_relocs (FILE *file, rels[i].r_offset = BYTE_GET (erels[i].r_offset); rels[i].r_info = BYTE_GET (erels[i].r_info); rels[i].r_addend = 0; + + /* The #ifdef BFD64 below is to prevent a compile time + warning. We know that if we do not have a 64 bit data + type that we will never execute this code anyway. */ +#ifdef BFD64 + if (elf_header.e_machine == EM_MIPS + && elf_header.e_ident[EI_DATA] != ELFDATA2MSB) + { + /* In little-endian objects, r_info isn't really a + 64-bit little-endian value: it has a 32-bit + little-endian symbol index followed by four + individual byte fields. Reorder INFO + accordingly. */ + bfd_vma info = rels[i].r_info; + info = (((info & 0xffffffff) << 32) + | ((info >> 56) & 0xff) + | ((info >> 40) & 0xff00) + | ((info >> 24) & 0xff0000) + | ((info >> 8) & 0xff000000)); + rels[i].r_info = info; + } +#endif /* BFD64 */ } free (erels); @@ -829,22 +841,51 @@ slurp_rel_relocs (FILE *file, return 1; } +/* Returns the reloc type extracted from the reloc info field. */ + +static unsigned int +get_reloc_type (bfd_vma reloc_info) +{ + if (is_32bit_elf) + return ELF32_R_TYPE (reloc_info); + + switch (elf_header.e_machine) + { + case EM_MIPS: + /* Note: We assume that reloc_info has already been adjusted for us. */ + return ELF64_MIPS_R_TYPE (reloc_info); + + case EM_SPARCV9: + return ELF64_R_TYPE_ID (reloc_info); + + default: + return ELF64_R_TYPE (reloc_info); + } +} + +/* Return the symbol index extracted from the reloc info field. */ + +static bfd_vma +get_reloc_symindex (bfd_vma reloc_info) +{ + return is_32bit_elf ? ELF32_R_SYM (reloc_info) : ELF64_R_SYM (reloc_info); +} + /* Display the contents of the relocation data found at the specified offset. */ -static int -dump_relocations (FILE *file, +static void +dump_relocations (FILE * file, unsigned long rel_offset, unsigned long rel_size, - Elf_Internal_Sym *symtab, + Elf_Internal_Sym * symtab, unsigned long nsyms, - char *strtab, + char * strtab, unsigned long strtablen, int is_rela) { unsigned int i; - Elf_Internal_Rela *rels; - + Elf_Internal_Rela * rels; if (is_rela == UNKNOWN) is_rela = guess_is_rela (elf_header.e_machine); @@ -852,12 +893,12 @@ dump_relocations (FILE *file, if (is_rela) { if (!slurp_rela_relocs (file, rel_offset, rel_size, &rels, &rel_size)) - return 0; + return; } else { if (!slurp_rel_relocs (file, rel_offset, rel_size, &rels, &rel_size)) - return 0; + return; } if (is_32bit_elf) @@ -897,66 +938,44 @@ dump_relocations (FILE *file, for (i = 0; i < rel_size; i++) { - const char *rtype; - const char *rtype2 = NULL; - const char *rtype3 = NULL; + const char * rtype; bfd_vma offset; bfd_vma info; bfd_vma symtab_index; bfd_vma type; - bfd_vma type2 = 0; - bfd_vma type3 = 0; offset = rels[i].r_offset; info = rels[i].r_info; + type = get_reloc_type (info); + symtab_index = get_reloc_symindex (info); + if (is_32bit_elf) { - type = ELF32_R_TYPE (info); - symtab_index = ELF32_R_SYM (info); + printf ("%8.8lx %8.8lx ", + (unsigned long) offset & 0xffffffff, + (unsigned long) info & 0xffffffff); } else { - /* The #ifdef BFD64 below is to prevent a compile time warning. - We know that if we do not have a 64 bit data type that we - will never execute this code anyway. */ -#ifdef BFD64 - if (elf_header.e_machine == EM_MIPS) - { - /* In little-endian objects, r_info isn't really a 64-bit - little-endian value: it has a 32-bit little-endian - symbol index followed by four individual byte fields. - Reorder INFO accordingly. */ - if (elf_header.e_ident[EI_DATA] != ELFDATA2MSB) - info = (((info & 0xffffffff) << 32) - | ((info >> 56) & 0xff) - | ((info >> 40) & 0xff00) - | ((info >> 24) & 0xff0000) - | ((info >> 8) & 0xff000000)); - type = ELF64_MIPS_R_TYPE (info); - type2 = ELF64_MIPS_R_TYPE2 (info); - type3 = ELF64_MIPS_R_TYPE3 (info); - } - else if (elf_header.e_machine == EM_SPARCV9) - type = ELF64_R_TYPE_ID (info); - else - type = ELF64_R_TYPE (info); - - symtab_index = ELF64_R_SYM (info); -#endif - } - - if (is_32bit_elf) - { -#ifdef _bfd_int64_low - printf ("%8.8lx %8.8lx ", _bfd_int64_low (offset), _bfd_int64_low (info)); +#if BFD_HOST_64BIT_LONG + printf (do_wide + ? "%16.16lx %16.16lx " + : "%12.12lx %12.12lx ", + offset, info); +#elif BFD_HOST_64BIT_LONG_LONG +#ifndef __MSVCRT__ + printf (do_wide + ? "%16.16llx %16.16llx " + : "%12.12llx %12.12llx ", + offset, info); #else - printf ("%8.8lx %8.8lx ", offset, info); + printf (do_wide + ? "%16.16I64x %16.16I64x " + : "%12.12I64x %12.12I64x ", + offset, info); #endif - } - else - { -#ifdef _bfd_int64_low +#else printf (do_wide ? "%8.8lx%8.8lx %8.8lx%8.8lx " : "%4.4lx%8.8lx %4.4lx%8.8lx ", @@ -964,11 +983,6 @@ dump_relocations (FILE *file, _bfd_int64_low (offset), _bfd_int64_high (info), _bfd_int64_low (info)); -#else - printf (do_wide - ? "%16.16lx %16.16lx " - : "%12.12lx %12.12lx ", - offset, info); #endif } @@ -1083,11 +1097,6 @@ dump_relocations (FILE *file, case EM_MIPS: case EM_MIPS_RS3_LE: rtype = elf_mips_reloc_type (type); - if (!is_32bit_elf) - { - rtype2 = elf_mips_reloc_type (type2); - rtype3 = elf_mips_reloc_type (type3); - } break; case EM_ALPHA: @@ -1134,6 +1143,7 @@ dump_relocations (FILE *file, break; case EM_X86_64: + case EM_L1OM: rtype = elf_x86_64_reloc_type (type); break; @@ -1176,6 +1186,11 @@ dump_relocations (FILE *file, rtype = elf_xtensa_reloc_type (type); break; + case EM_LATTICEMICO32: + rtype = elf_lm32_reloc_type (type); + break; + + case EM_M32C_OLD: case EM_M32C: rtype = elf_m32c_reloc_type (type); break; @@ -1193,16 +1208,18 @@ dump_relocations (FILE *file, break; case EM_CR16: + case EM_CR16_OLD: rtype = elf_cr16_reloc_type (type); break; + + case EM_MICROBLAZE: + case EM_MICROBLAZE_OLD: + rtype = elf_microblaze_reloc_type (type); + break; } if (rtype == NULL) -#ifdef _bfd_int64_low - printf (_("unrecognized: %-7lx"), _bfd_int64_low (type)); -#else - printf (_("unrecognized: %-7lx"), type); -#endif + printf (_("unrecognized: %-7lx"), (unsigned long) type & 0xffffffff); else printf (do_wide ? "%-22.22s" : "%-17.17s", rtype); @@ -1237,31 +1254,55 @@ dump_relocations (FILE *file, printf (" bad symbol index: %08lx", (unsigned long) symtab_index); else { - Elf_Internal_Sym *psym; + Elf_Internal_Sym * psym; psym = symtab + symtab_index; printf (" "); - print_vma (psym->st_value, LONG_HEX); - printf (is_32bit_elf ? " " : " "); + + if (ELF_ST_TYPE (psym->st_info) == STT_GNU_IFUNC) + { + const char * name; + unsigned int len; + unsigned int width = is_32bit_elf ? 8 : 14; + + /* Relocations against GNU_IFUNC symbols do not use the value + of the symbol as the address to relocate against. Instead + they invoke the function named by the symbol and use its + result as the address for relocation. + + To indicate this to the user, do not display the value of + the symbol in the "Symbols's Value" field. Instead show + its name followed by () as a hint that the symbol is + invoked. */ + + if (strtab == NULL + || psym->st_name == 0 + || psym->st_name >= strtablen) + name = "??"; + else + name = strtab + psym->st_name; + + len = print_symbol (width, name); + printf ("()%-*s", len <= width ? (width + 1) - len : 1, " "); + } + else + { + print_vma (psym->st_value, LONG_HEX); + + printf (is_32bit_elf ? " " : " "); + } if (psym->st_name == 0) { - const char *sec_name = ""; + const char * sec_name = ""; char name_buf[40]; if (ELF_ST_TYPE (psym->st_info) == STT_SECTION) { - bfd_vma sec_index = (bfd_vma) -1; - - if (psym->st_shndx < SHN_LORESERVE) - sec_index = psym->st_shndx; - else if (psym->st_shndx > SHN_HIRESERVE) - sec_index = psym->st_shndx - (SHN_HIRESERVE + 1 - - SHN_LORESERVE); - - if (sec_index != (bfd_vma) -1) - sec_name = SECTION_NAME (section_headers + sec_index); + if (psym->st_shndx < elf_header.e_shnum) + sec_name + = SECTION_NAME (section_headers + psym->st_shndx); else if (psym->st_shndx == SHN_ABS) sec_name = "ABS"; else if (psym->st_shndx == SHN_COMMON) @@ -1272,13 +1313,19 @@ dump_relocations (FILE *file, 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 + else if ((elf_header.e_machine == EM_X86_64 + || elf_header.e_machine == EM_L1OM) && psym->st_shndx == SHN_X86_64_LCOMMON) sec_name = "LARGE_COMMON"; else if (elf_header.e_machine == EM_IA_64 && elf_header.e_ident[EI_OSABI] == ELFOSABI_HPUX && psym->st_shndx == SHN_IA_64_ANSI_COMMON) sec_name = "ANSI_COM"; + else if (elf_header.e_machine == EM_IA_64 + && (elf_header.e_ident[EI_OSABI] + == ELFOSABI_OPENVMS) + && psym->st_shndx == SHN_IA_64_VMS_SYMVEC) + sec_name = "VMS_SYMVEC"; else { sprintf (name_buf, "
", @@ -1296,7 +1343,14 @@ dump_relocations (FILE *file, print_symbol (22, strtab + psym->st_name); if (is_rela) - printf (" + %lx", (unsigned long) rels[i].r_addend); + { + long offset = (long) (bfd_signed_vma) rels[i].r_addend; + + if (offset < 0) + printf (" - %lx", - offset); + else + printf (" + %lx", offset); + } } } else if (is_rela) @@ -1313,37 +1367,36 @@ dump_relocations (FILE *file, putchar ('\n'); +#ifdef BFD64 if (! is_32bit_elf && elf_header.e_machine == EM_MIPS) { + bfd_vma type2 = ELF64_MIPS_R_TYPE2 (info); + bfd_vma type3 = ELF64_MIPS_R_TYPE3 (info); + const char * rtype2 = elf_mips_reloc_type (type2); + const char * rtype3 = elf_mips_reloc_type (type3); + printf (" Type2: "); if (rtype2 == NULL) -#ifdef _bfd_int64_low - printf (_("unrecognized: %-7lx"), _bfd_int64_low (type2)); -#else - printf (_("unrecognized: %-7lx"), type2); -#endif + printf (_("unrecognized: %-7lx"), + (unsigned long) type2 & 0xffffffff); else printf ("%-17.17s", rtype2); printf ("\n Type3: "); if (rtype3 == NULL) -#ifdef _bfd_int64_low - printf (_("unrecognized: %-7lx"), _bfd_int64_low (type3)); -#else - printf (_("unrecognized: %-7lx"), type3); -#endif + printf (_("unrecognized: %-7lx"), + (unsigned long) type3 & 0xffffffff); else printf ("%-17.17s", rtype3); putchar ('\n'); } +#endif /* BFD64 */ } free (rels); - - return 1; } static const char * @@ -1394,6 +1447,8 @@ get_mips_dynamic_type (unsigned long type) case DT_MIPS_COMPACT_SIZE: return "MIPS_COMPACT_SIZE"; case DT_MIPS_GP_VALUE: return "MIPS_GP_VALUE"; case DT_MIPS_AUX_DYNAMIC: return "MIPS_AUX_DYNAMIC"; + case DT_MIPS_PLTGOT: return "MIPS_PLTGOT"; + case DT_MIPS_RWPLT: return "MIPS_RWPLT"; default: return NULL; } @@ -1415,7 +1470,8 @@ get_ppc_dynamic_type (unsigned long type) { switch (type) { - case DT_PPC_GOT: return "PPC_GOT"; + case DT_PPC_GOT: return "PPC_GOT"; + case DT_PPC_TLSOPT: return "PPC_TLSOPT"; default: return NULL; } @@ -1426,9 +1482,10 @@ get_ppc64_dynamic_type (unsigned long type) { switch (type) { - case DT_PPC64_GLINK: return "PPC64_GLINK"; - case DT_PPC64_OPD: return "PPC64_OPD"; - case DT_PPC64_OPDSZ: return "PPC64_OPDSZ"; + case DT_PPC64_GLINK: return "PPC64_GLINK"; + case DT_PPC64_OPD: return "PPC64_OPD"; + case DT_PPC64_OPDSZ: return "PPC64_OPDSZ"; + case DT_PPC64_TLSOPT: return "PPC64_TLSOPT"; default: return NULL; } @@ -1473,7 +1530,37 @@ get_ia64_dynamic_type (unsigned long type) { switch (type) { - case DT_IA_64_PLT_RESERVE: return "IA_64_PLT_RESERVE"; + case DT_IA_64_PLT_RESERVE: return "IA_64_PLT_RESERVE"; + case DT_IA_64_VMS_SUBTYPE: return "VMS_SUBTYPE"; + case DT_IA_64_VMS_IMGIOCNT: return "VMS_IMGIOCNT"; + case DT_IA_64_VMS_LNKFLAGS: return "VMS_LNKFLAGS"; + case DT_IA_64_VMS_VIR_MEM_BLK_SIZ: return "VMS_VIR_MEM_BLK_SIZ"; + case DT_IA_64_VMS_IDENT: return "VMS_IDENT"; + case DT_IA_64_VMS_NEEDED_IDENT: return "VMS_NEEDED_IDENT"; + case DT_IA_64_VMS_IMG_RELA_CNT: return "VMS_IMG_RELA_CNT"; + case DT_IA_64_VMS_SEG_RELA_CNT: return "VMS_SEG_RELA_CNT"; + case DT_IA_64_VMS_FIXUP_RELA_CNT: return "VMS_FIXUP_RELA_CNT"; + case DT_IA_64_VMS_FIXUP_NEEDED: return "VMS_FIXUP_NEEDED"; + case DT_IA_64_VMS_SYMVEC_CNT: return "VMS_SYMVEC_CNT"; + case DT_IA_64_VMS_XLATED: return "VMS_XLATED"; + case DT_IA_64_VMS_STACKSIZE: return "VMS_STACKSIZE"; + case DT_IA_64_VMS_UNWINDSZ: return "VMS_UNWINDSZ"; + case DT_IA_64_VMS_UNWIND_CODSEG: return "VMS_UNWIND_CODSEG"; + case DT_IA_64_VMS_UNWIND_INFOSEG: return "VMS_UNWIND_INFOSEG"; + case DT_IA_64_VMS_LINKTIME: return "VMS_LINKTIME"; + case DT_IA_64_VMS_SEG_NO: return "VMS_SEG_NO"; + case DT_IA_64_VMS_SYMVEC_OFFSET: return "VMS_SYMVEC_OFFSET"; + case DT_IA_64_VMS_SYMVEC_SEG: return "VMS_SYMVEC_SEG"; + case DT_IA_64_VMS_UNWIND_OFFSET: return "VMS_UNWIND_OFFSET"; + case DT_IA_64_VMS_UNWIND_SEG: return "VMS_UNWIND_SEG"; + case DT_IA_64_VMS_STRTAB_OFFSET: return "VMS_STRTAB_OFFSET"; + case DT_IA_64_VMS_SYSVER_OFFSET: return "VMS_SYSVER_OFFSET"; + case DT_IA_64_VMS_IMG_RELA_OFF: return "VMS_IMG_RELA_OFF"; + case DT_IA_64_VMS_SEG_RELA_OFF: return "VMS_SEG_RELA_OFF"; + case DT_IA_64_VMS_FIXUP_RELA_OFF: return "VMS_FIXUP_RELA_OFF"; + case DT_IA_64_VMS_PLTGOT_OFFSET: return "VMS_PLTGOT_OFFSET"; + case DT_IA_64_VMS_PLTGOT_SEG: return "VMS_PLTGOT_SEG"; + case DT_IA_64_VMS_FPMODE: return "VMS_FPMODE"; default: return NULL; } @@ -1592,7 +1679,7 @@ get_dynamic_type (unsigned long type) default: if ((type >= DT_LOPROC) && (type <= DT_HIPROC)) { - const char *result; + const char * result; switch (elf_header.e_machine) { @@ -1632,13 +1719,16 @@ get_dynamic_type (unsigned long type) || (elf_header.e_machine == EM_PARISC && (type >= OLD_DT_LOOS) && (type <= OLD_DT_HIOS))) { - const char *result; + const char * result; switch (elf_header.e_machine) { case EM_PARISC: result = get_parisc_dynamic_type (type); break; + case EM_IA_64: + result = get_ia64_dynamic_type (type); + break; default: result = NULL; break; @@ -1771,6 +1861,7 @@ get_machine_name (unsigned e_machine) case EM_HUANY: return "Harvard Universitys's machine-independent object format"; case EM_PRISM: return "Vitesse Prism"; case EM_X86_64: return "Advanced Micro Devices X86-64"; + case EM_L1OM: return "Intel L1OM"; case EM_S390_OLD: case EM_S390: return "IBM S/390"; case EM_SCORE: return "SUNPLUS S+Core"; @@ -1784,6 +1875,8 @@ get_machine_name (unsigned e_machine) case EM_IQ2000: return "Vitesse IQ2000"; case EM_XTENSA_OLD: case EM_XTENSA: return "Tensilica Xtensa Processor"; + case EM_LATTICEMICO32: return "Lattice Mico32"; + case EM_M32C_OLD: case EM_M32C: return "Renesas M32c"; case EM_MT: return "Morpho Techologies MT processor"; case EM_BLACKFIN: return "Analog Devices Blackfin"; @@ -1791,7 +1884,10 @@ get_machine_name (unsigned e_machine) case EM_ALTERA_NIOS2: return "Altera Nios II"; case EM_XC16X: return "Infineon Technologies xc16x"; case EM_CYGNUS_MEP: return "Toshiba MeP Media Engine"; - case EM_CR16: return "National Semiconductor's CR16"; + case EM_CR16: + case EM_CR16_OLD: return "National Semiconductor's CR16"; + case EM_MICROBLAZE: return "Xilinx MicroBlaze"; + case EM_MICROBLAZE_OLD: return "Xilinx MicroBlaze"; default: snprintf (buff, sizeof (buff), _(": 0x%x"), e_machine); return buff; @@ -2050,9 +2146,9 @@ get_machine_flags (unsigned e_flags, unsigned e_machine) strcat (buf, ", fido_a"); else { - char const *isa = _("unknown"); - char const *mac = _("unknown mac"); - char const *additional = NULL; + char const * isa = _("unknown"); + char const * mac = _("unknown mac"); + char const * additional = NULL; switch (e_flags & EF_M68K_CF_ISA_MASK) { @@ -2171,6 +2267,10 @@ get_machine_flags (unsigned e_flags, unsigned e_machine) case E_MIPS_MACH_5500: strcat (buf, ", 5500"); break; case E_MIPS_MACH_SB1: strcat (buf, ", sb1"); break; case E_MIPS_MACH_9000: strcat (buf, ", 9000"); break; + case E_MIPS_MACH_LS2E: strcat (buf, ", loongson-2e"); break; + case E_MIPS_MACH_LS2F: strcat (buf, ", loongson-2f"); break; + case E_MIPS_MACH_OCTEON: strcat (buf, ", octeon"); break; + case E_MIPS_MACH_XLR: strcat (buf, ", xlr"); break; case 0: /* We simply ignore the field in this case to avoid confusion: MIPS ELF does not specify EF_MIPS_MACH, it is a GNU @@ -2359,7 +2459,7 @@ get_osabi_name (unsigned int osabi) case ELFOSABI_OPENBSD: return "UNIX - OpenBSD"; case ELFOSABI_OPENVMS: return "VMS - OpenVMS"; case ELFOSABI_NSK: return "HP - Non-Stop Kernel"; - case ELFOSABI_AROS: return "Amiga Research OS"; + case ELFOSABI_AROS: return "AROS"; case ELFOSABI_STANDALONE: return _("Standalone App"); case ELFOSABI_ARM: return "ARM"; default: @@ -2473,7 +2573,7 @@ get_segment_type (unsigned long p_type) default: if ((p_type >= PT_LOPROC) && (p_type <= PT_HIPROC)) { - const char *result; + const char * result; switch (elf_header.e_machine) { @@ -2502,7 +2602,7 @@ get_segment_type (unsigned long p_type) } else if ((p_type >= PT_LOOS) && (p_type <= PT_HIOS)) { - const char *result; + const char * result; switch (elf_header.e_machine) { @@ -2606,9 +2706,16 @@ get_ia64_section_type_name (unsigned int sh_type) switch (sh_type) { - case SHT_IA_64_EXT: return "IA_64_EXT"; - case SHT_IA_64_UNWIND: return "IA_64_UNWIND"; - case SHT_IA_64_PRIORITY_INIT: return "IA_64_PRIORITY_INIT"; + case SHT_IA_64_EXT: return "IA_64_EXT"; + case SHT_IA_64_UNWIND: return "IA_64_UNWIND"; + case SHT_IA_64_PRIORITY_INIT: return "IA_64_PRIORITY_INIT"; + case SHT_IA_64_VMS_TRACE: return "VMS_TRACE"; + case SHT_IA_64_VMS_TIE_SIGNATURES: return "VMS_TIE_SIGNATURES"; + case SHT_IA_64_VMS_DEBUG: return "VMS_DEBUG"; + case SHT_IA_64_VMS_DEBUG_STR: return "VMS_DEBUG_STR"; + case SHT_IA_64_VMS_LINKAGES: return "VMS_LINKAGES"; + case SHT_IA_64_VMS_SYMBOL_VECTOR: return "VMS_SYMBOL_VECTOR"; + case SHT_IA_64_VMS_FIXUP: return "VMS_FIXUP"; default: break; } @@ -2632,12 +2739,11 @@ get_arm_section_type_name (unsigned int sh_type) { switch (sh_type) { - case SHT_ARM_EXIDX: - return "ARM_EXIDX"; - case SHT_ARM_PREEMPTMAP: - return "ARM_PREEMPTMAP"; - case SHT_ARM_ATTRIBUTES: - return "ARM_ATTRIBUTES"; + case SHT_ARM_EXIDX: return "ARM_EXIDX"; + case SHT_ARM_PREEMPTMAP: return "ARM_PREEMPTMAP"; + case SHT_ARM_ATTRIBUTES: return "ARM_ATTRIBUTES"; + case SHT_ARM_DEBUGOVERLAY: return "ARM_DEBUGOVERLAY"; + case SHT_ARM_OVERLAYSECTION: return "ARM_OVERLAYSECTION"; default: break; } @@ -2681,7 +2787,7 @@ get_section_type_name (unsigned int sh_type) default: if ((sh_type >= SHT_LOPROC) && (sh_type <= SHT_HIPROC)) { - const char *result; + const char * result; switch (elf_header.e_machine) { @@ -2696,6 +2802,7 @@ get_section_type_name (unsigned int sh_type) result = get_ia64_section_type_name (sh_type); break; case EM_X86_64: + case EM_L1OM: result = get_x86_64_section_type_name (sh_type); break; case EM_ARM: @@ -2712,7 +2819,24 @@ get_section_type_name (unsigned int sh_type) sprintf (buff, "LOPROC+%x", sh_type - SHT_LOPROC); } else if ((sh_type >= SHT_LOOS) && (sh_type <= SHT_HIOS)) - sprintf (buff, "LOOS+%x", sh_type - SHT_LOOS); + { + const char * result; + + switch (elf_header.e_machine) + { + case EM_IA_64: + result = get_ia64_section_type_name (sh_type); + break; + default: + result = NULL; + break; + } + + if (result != NULL) + return result; + + sprintf (buff, "LOOS+%x", sh_type - SHT_LOOS); + } else if ((sh_type >= SHT_LOUSER) && (sh_type <= SHT_HIUSER)) sprintf (buff, "LOUSER+%x", sh_type - SHT_LOUSER); else @@ -2745,12 +2869,15 @@ static struct option options[] = {"arch-specific", no_argument, 0, 'A'}, {"version-info", no_argument, 0, 'V'}, {"use-dynamic", no_argument, 0, 'D'}, - {"hex-dump", required_argument, 0, 'x'}, - {"debug-dump", optional_argument, 0, OPTION_DEBUG_DUMP}, {"unwind", no_argument, 0, 'u'}, + {"archive-index", no_argument, 0, 'c'}, + {"hex-dump", required_argument, 0, 'x'}, + {"relocated-dump", required_argument, 0, 'R'}, + {"string-dump", required_argument, 0, 'p'}, #ifdef SUPPORT_DISASSEMBLY {"instruction-dump", required_argument, 0, 'i'}, #endif + {"debug-dump", optional_argument, 0, OPTION_DEBUG_DUMP}, {"version", no_argument, 0, 'v'}, {"wide", no_argument, 0, 'W'}, @@ -2759,7 +2886,7 @@ static struct option options[] = }; static void -usage (FILE *stream) +usage (FILE * stream) { fprintf (stream, _("Usage: readelf elf-file(s)\n")); fprintf (stream, _(" Display information about the contents of ELF format files\n")); @@ -2781,15 +2908,21 @@ usage (FILE *stream) -d --dynamic Display the dynamic section (if present)\n\ -V --version-info Display the version sections (if present)\n\ -A --arch-specific Display architecture specific information (if any).\n\ + -c --archive-index Display the symbol/file index in an archive\n\ -D --use-dynamic Use the dynamic section info when displaying symbols\n\ - -x --hex-dump= Dump the contents of section \n\ - -w[liaprmfFsoR] or\n\ - --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n\ + -x --hex-dump=\n\ + Dump the contents of section as bytes\n\ + -p --string-dump=\n\ + Dump the contents of section as strings\n\ + -R --relocated-dump=\n\ + Dump the contents of section as relocated bytes\n\ + -w[lLiaprmfFsoR] or\n\ + --debug-dump[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=str,=loc,=Ranges]\n\ Display the contents of DWARF2 debug sections\n")); #ifdef SUPPORT_DISASSEMBLY fprintf (stream, _("\ - -i --instruction-dump=\n\ - Disassemble the contents of section \n")); + -i --instruction-dump=\n\ + Disassemble the contents of section \n")); #endif fprintf (stream, _("\ -I --histogram Display histogram of bucket list lengths\n\ @@ -2810,20 +2943,21 @@ usage (FILE *stream) the first time. */ static void -request_dump (unsigned int section, int type) +request_dump_bynumber (unsigned int section, dump_type type) { if (section >= num_dump_sects) { - char *new_dump_sects; + dump_type * new_dump_sects; - new_dump_sects = calloc (section + 1, 1); + new_dump_sects = (dump_type *) calloc (section + 1, + sizeof (* dump_sects)); if (new_dump_sects == NULL) error (_("Out of memory allocating dump request table.\n")); else { /* Copy current flag settings. */ - memcpy (new_dump_sects, dump_sects, num_dump_sects); + memcpy (new_dump_sects, dump_sects, num_dump_sects * sizeof (* dump_sects)); free (dump_sects); @@ -2841,11 +2975,12 @@ request_dump (unsigned int section, int type) /* Request a dump by section name. */ static void -request_dump_byname (const char *section, int type) +request_dump_byname (const char * section, dump_type type) { - struct dump_list_entry *new_request; + struct dump_list_entry * new_request; - new_request = malloc (sizeof (struct dump_list_entry)); + new_request = (struct dump_list_entry *) + malloc (sizeof (struct dump_list_entry)); if (!new_request) error (_("Out of memory allocating dump request table.\n")); @@ -2859,8 +2994,24 @@ request_dump_byname (const char *section, int type) dump_sects_byname = new_request; } +static inline void +request_dump (dump_type type) +{ + int section; + char * cp; + + do_dump++; + section = strtoul (optarg, & cp, 0); + + if (! *cp && section >= 0) + request_dump_bynumber (section, type); + else + request_dump_byname (optarg, type); +} + + static void -parse_args (int argc, char **argv) +parse_args (int argc, char ** argv) { int c; @@ -2868,11 +3019,8 @@ parse_args (int argc, char **argv) usage (stderr); while ((c = getopt_long - (argc, argv, "ersuahnldSDAINtgw::x:i:vVWH", options, NULL)) != EOF) + (argc, argv, "ADHINR:SVWacdeghi:lnp:rstuvw::x:", options, NULL)) != EOF) { - char *cp; - int section; - switch (c) { case 0: @@ -2942,80 +3090,29 @@ parse_args (int argc, char **argv) case 'n': do_notes++; break; + case 'c': + do_archive_index++; + break; case 'x': - do_dump++; - section = strtoul (optarg, & cp, 0); - if (! *cp && section >= 0) - request_dump (section, HEX_DUMP); - else - request_dump_byname (optarg, HEX_DUMP); + request_dump (HEX_DUMP); + break; + case 'p': + request_dump (STRING_DUMP); + break; + case 'R': + request_dump (RELOC_DUMP); break; case 'w': do_dump++; if (optarg == 0) - do_debugging = 1; + { + do_debugging = 1; + dwarf_select_sections_all (); + } else { - unsigned int index = 0; - do_debugging = 0; - - while (optarg[index]) - switch (optarg[index++]) - { - case 'i': - case 'I': - do_debug_info = 1; - break; - - case 'a': - case 'A': - do_debug_abbrevs = 1; - break; - - case 'l': - case 'L': - do_debug_lines = 1; - break; - - case 'p': - case 'P': - do_debug_pubnames = 1; - break; - - case 'r': - do_debug_aranges = 1; - break; - - case 'R': - do_debug_ranges = 1; - break; - - case 'F': - do_debug_frames_interp = 1; - case 'f': - do_debug_frames = 1; - break; - - case 'm': - case 'M': - do_debug_macinfo = 1; - break; - - case 's': - case 'S': - do_debug_str = 1; - break; - - case 'o': - case 'O': - do_debug_loc = 1; - break; - - default: - warn (_("Unrecognized debug option '%s'\n"), optarg); - break; - } + dwarf_select_sections_by_letters (optarg); } break; case OPTION_DEBUG_DUMP: @@ -3024,84 +3121,14 @@ parse_args (int argc, char **argv) do_debugging = 1; else { - typedef struct - { - const char * option; - int * variable; - } - debug_dump_long_opts; - - debug_dump_long_opts opts_table [] = - { - /* Please keep this table alpha- sorted. */ - { "Ranges", & do_debug_ranges }, - { "abbrev", & do_debug_abbrevs }, - { "aranges", & do_debug_aranges }, - { "frames", & do_debug_frames }, - { "frames-interp", & do_debug_frames_interp }, - { "info", & do_debug_info }, - { "line", & do_debug_lines }, - { "loc", & do_debug_loc }, - { "macro", & do_debug_macinfo }, - { "pubnames", & do_debug_pubnames }, - /* This entry is for compatability - with earlier versions of readelf. */ - { "ranges", & do_debug_aranges }, - { "str", & do_debug_str }, - { NULL, NULL } - }; - - const char *p; - do_debugging = 0; - - p = optarg; - while (*p) - { - debug_dump_long_opts * entry; - - for (entry = opts_table; entry->option; entry++) - { - size_t len = strlen (entry->option); - - if (strneq (p, entry->option, len) - && (p[len] == ',' || p[len] == '\0')) - { - * entry->variable = 1; - - /* The --debug-dump=frames-interp option also - enables the --debug-dump=frames option. */ - if (do_debug_frames_interp) - do_debug_frames = 1; - - p += len; - break; - } - } - - if (entry->option == NULL) - { - warn (_("Unrecognized debug option '%s'\n"), p); - p = strchr (p, ','); - if (p == NULL) - break; - } - - if (*p == ',') - p++; - } + dwarf_select_sections_by_names (optarg); } break; #ifdef SUPPORT_DISASSEMBLY case 'i': - do_dump++; - section = strtoul (optarg, & cp, 0); - if (! *cp && section >= 0) - { - request_dump (section, DISASS_DUMP); - break; - } - goto oops; + request_dump (DISASS_DUMP); + break; #endif case 'v': print_version (program_name); @@ -3113,9 +3140,6 @@ parse_args (int argc, char **argv) do_wide++; break; default: -#ifdef SUPPORT_DISASSEMBLY - oops: -#endif /* xgettext:c-format */ error (_("Invalid option '-%c'\n"), c); /* Drop through. */ @@ -3127,7 +3151,7 @@ parse_args (int argc, char **argv) if (!do_dynamic && !do_syms && !do_reloc && !do_unwind && !do_sections && !do_segments && !do_header && !do_dump && !do_version && !do_histogram && !do_debugging && !do_arch && !do_notes - && !do_section_groups) + && !do_section_groups && !do_archive_index) usage (stderr); else if (argc < 3) { @@ -3183,6 +3207,8 @@ process_file_header (void) return 0; } + init_dwarf_regnames (elf_header.e_machine); + if (do_header) { int i; @@ -3235,31 +3261,27 @@ process_file_header (void) (long) elf_header.e_shentsize); printf (_(" Number of section headers: %ld"), (long) elf_header.e_shnum); - if (section_headers != NULL && elf_header.e_shnum == 0) + if (section_headers != NULL && elf_header.e_shnum == SHN_UNDEF) printf (" (%ld)", (long) section_headers[0].sh_size); putc ('\n', stdout); printf (_(" Section header string table index: %ld"), (long) elf_header.e_shstrndx); - if (section_headers != NULL && elf_header.e_shstrndx == SHN_XINDEX) - printf (" (%ld)", (long) section_headers[0].sh_link); + if (section_headers != NULL + && elf_header.e_shstrndx == (SHN_XINDEX & 0xffff)) + printf (" (%u)", 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 >= elf_header.e_shnum) printf (" "); putc ('\n', stdout); } if (section_headers != NULL) { - if (elf_header.e_shnum == 0) + if (elf_header.e_shnum == SHN_UNDEF) elf_header.e_shnum = section_headers[0].sh_size; - if (elf_header.e_shstrndx == SHN_XINDEX) + if (elf_header.e_shstrndx == (SHN_XINDEX & 0xffff)) 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))) + else if (elf_header.e_shstrndx >= elf_header.e_shnum) elf_header.e_shstrndx = SHN_UNDEF; free (section_headers); section_headers = NULL; @@ -3270,16 +3292,17 @@ process_file_header (void) static int -get_32bit_program_headers (FILE *file, Elf_Internal_Phdr *program_headers) +get_32bit_program_headers (FILE * file, Elf_Internal_Phdr * program_headers) { - Elf32_External_Phdr *phdrs; - Elf32_External_Phdr *external; - Elf_Internal_Phdr *internal; + Elf32_External_Phdr * phdrs; + Elf32_External_Phdr * external; + Elf_Internal_Phdr * internal; unsigned int i; - phdrs = get_data (NULL, file, elf_header.e_phoff, - elf_header.e_phentsize, elf_header.e_phnum, - _("program headers")); + phdrs = (Elf32_External_Phdr *) get_data (NULL, file, elf_header.e_phoff, + elf_header.e_phentsize, + elf_header.e_phnum, + _("program headers")); if (!phdrs) return 0; @@ -3303,16 +3326,17 @@ get_32bit_program_headers (FILE *file, Elf_Internal_Phdr *program_headers) } static int -get_64bit_program_headers (FILE *file, Elf_Internal_Phdr *program_headers) +get_64bit_program_headers (FILE * file, Elf_Internal_Phdr * program_headers) { - Elf64_External_Phdr *phdrs; - Elf64_External_Phdr *external; - Elf_Internal_Phdr *internal; + Elf64_External_Phdr * phdrs; + Elf64_External_Phdr * external; + Elf_Internal_Phdr * internal; unsigned int i; - phdrs = get_data (NULL, file, elf_header.e_phoff, - elf_header.e_phentsize, elf_header.e_phnum, - _("program headers")); + phdrs = (Elf64_External_Phdr *) get_data (NULL, file, elf_header.e_phoff, + elf_header.e_phentsize, + elf_header.e_phnum, + _("program headers")); if (!phdrs) return 0; @@ -3338,15 +3362,16 @@ get_64bit_program_headers (FILE *file, Elf_Internal_Phdr *program_headers) /* Returns 1 if the program headers were read into `program_headers'. */ static int -get_program_headers (FILE *file) +get_program_headers (FILE * file) { - Elf_Internal_Phdr *phdrs; + Elf_Internal_Phdr * phdrs; /* Check cache of prior read. */ if (program_headers != NULL) return 1; - phdrs = cmalloc (elf_header.e_phnum, sizeof (Elf_Internal_Phdr)); + phdrs = (Elf_Internal_Phdr *) cmalloc (elf_header.e_phnum, + sizeof (Elf_Internal_Phdr)); if (phdrs == NULL) { @@ -3369,9 +3394,9 @@ get_program_headers (FILE *file) /* Returns 1 if the program headers were loaded. */ static int -process_program_headers (FILE *file) +process_program_headers (FILE * file) { - Elf_Internal_Phdr *segment; + Elf_Internal_Phdr * segment; unsigned int i; if (elf_header.e_phnum == 0) @@ -3508,11 +3533,16 @@ process_program_headers (FILE *file) if (dynamic_addr) error (_("more than one dynamic segment\n")); + /* By default, assume that the .dynamic section is the first + section in the DYNAMIC segment. */ + dynamic_addr = segment->p_offset; + dynamic_size = segment->p_filesz; + /* Try to locate the .dynamic section. If there is a section header table, we can easily locate it. */ if (section_headers != NULL) { - Elf_Internal_Shdr *sec; + Elf_Internal_Shdr * sec; sec = find_section (".dynamic"); if (sec == NULL || sec->sh_size == 0) @@ -3522,23 +3552,21 @@ process_program_headers (FILE *file) } if (sec->sh_type == SHT_NOBITS) - break; + { + dynamic_size = 0; + 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\n")); + 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.\n")); - } - else - { - /* Otherwise, we can only assume that the .dynamic - section is the first section in the DYNAMIC segment. */ - dynamic_addr = segment->p_offset; - dynamic_size = segment->p_filesz; + warn (_("the .dynamic section is not the first section" + " in the dynamic segment.\n")); } break; @@ -3577,16 +3605,16 @@ process_program_headers (FILE *file) for (i = 0; i < elf_header.e_phnum; i++) { unsigned int j; - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; segment = program_headers + i; - section = section_headers; + section = section_headers + 1; printf (" %2.2d ", i); for (j = 1; j < elf_header.e_shnum; j++, section++) { - if (ELF_IS_SECTION_IN_SEGMENT_MEMORY(section, segment)) + if (ELF_IS_SECTION_IN_SEGMENT_MEMORY (section, segment)) printf ("%s ", SECTION_NAME (section)); } @@ -3601,9 +3629,9 @@ process_program_headers (FILE *file) /* Find the file offset corresponding to VMA by using the program headers. */ static long -offset_from_vma (FILE *file, bfd_vma vma, bfd_size_type size) +offset_from_vma (FILE * file, bfd_vma vma, bfd_size_type size) { - Elf_Internal_Phdr *seg; + Elf_Internal_Phdr * seg; if (! get_program_headers (file)) { @@ -3624,24 +3652,26 @@ offset_from_vma (FILE *file, bfd_vma vma, bfd_size_type size) } warn (_("Virtual address 0x%lx not located in any PT_LOAD segment.\n"), - (long) vma); + (unsigned long) vma); return (long) vma; } static int -get_32bit_section_headers (FILE *file, unsigned int num) +get_32bit_section_headers (FILE * file, unsigned int num) { - Elf32_External_Shdr *shdrs; - Elf_Internal_Shdr *internal; + Elf32_External_Shdr * shdrs; + Elf_Internal_Shdr * internal; unsigned int i; - shdrs = get_data (NULL, file, elf_header.e_shoff, - elf_header.e_shentsize, num, _("section headers")); + shdrs = (Elf32_External_Shdr *) get_data (NULL, file, elf_header.e_shoff, + elf_header.e_shentsize, num, + _("section headers")); if (!shdrs) return 0; - section_headers = cmalloc (num, sizeof (Elf_Internal_Shdr)); + section_headers = (Elf_Internal_Shdr *) cmalloc (num, + sizeof (Elf_Internal_Shdr)); if (section_headers == NULL) { @@ -3671,18 +3701,20 @@ get_32bit_section_headers (FILE *file, unsigned int num) } static int -get_64bit_section_headers (FILE *file, unsigned int num) +get_64bit_section_headers (FILE * file, unsigned int num) { - Elf64_External_Shdr *shdrs; - Elf_Internal_Shdr *internal; + Elf64_External_Shdr * shdrs; + Elf_Internal_Shdr * internal; unsigned int i; - shdrs = get_data (NULL, file, elf_header.e_shoff, - elf_header.e_shentsize, num, _("section headers")); + shdrs = (Elf64_External_Shdr *) get_data (NULL, file, elf_header.e_shoff, + elf_header.e_shentsize, num, + _("section headers")); if (!shdrs) return 0; - section_headers = cmalloc (num, sizeof (Elf_Internal_Shdr)); + section_headers = (Elf_Internal_Shdr *) cmalloc (num, + sizeof (Elf_Internal_Shdr)); if (section_headers == NULL) { @@ -3712,27 +3744,29 @@ get_64bit_section_headers (FILE *file, unsigned int num) } static Elf_Internal_Sym * -get_32bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) +get_32bit_elf_symbols (FILE * file, Elf_Internal_Shdr * section) { unsigned long number; - Elf32_External_Sym *esyms; - Elf_External_Sym_Shndx *shndx; - Elf_Internal_Sym *isyms; - Elf_Internal_Sym *psym; + Elf32_External_Sym * esyms; + Elf_External_Sym_Shndx * shndx; + Elf_Internal_Sym * isyms; + Elf_Internal_Sym * psym; unsigned int j; - esyms = get_data (NULL, file, section->sh_offset, 1, section->sh_size, - _("symbols")); + esyms = (Elf32_External_Sym *) get_data (NULL, file, section->sh_offset, 1, + section->sh_size, _("symbols")); if (!esyms) return NULL; shndx = NULL; if (symtab_shndx_hdr != NULL && (symtab_shndx_hdr->sh_link - == (unsigned long) SECTION_HEADER_NUM (section - section_headers))) + == (unsigned long) (section - section_headers))) { - shndx = get_data (NULL, file, symtab_shndx_hdr->sh_offset, - 1, symtab_shndx_hdr->sh_size, _("symtab shndx")); + shndx = (Elf_External_Sym_Shndx *) get_data (NULL, file, + symtab_shndx_hdr->sh_offset, + 1, symtab_shndx_hdr->sh_size, + _("symtab shndx")); if (!shndx) { free (esyms); @@ -3741,7 +3775,7 @@ get_32bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) } number = section->sh_size / section->sh_entsize; - isyms = cmalloc (number, sizeof (Elf_Internal_Sym)); + isyms = (Elf_Internal_Sym *) cmalloc (number, sizeof (Elf_Internal_Sym)); if (isyms == NULL) { @@ -3760,9 +3794,11 @@ get_32bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) psym->st_value = BYTE_GET (esyms[j].st_value); psym->st_size = BYTE_GET (esyms[j].st_size); psym->st_shndx = BYTE_GET (esyms[j].st_shndx); - if (psym->st_shndx == SHN_XINDEX && shndx != NULL) + if (psym->st_shndx == (SHN_XINDEX & 0xffff) && shndx != NULL) psym->st_shndx = byte_get ((unsigned char *) &shndx[j], sizeof (shndx[j])); + else if (psym->st_shndx >= (SHN_LORESERVE & 0xffff)) + psym->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff); psym->st_info = BYTE_GET (esyms[j].st_info); psym->st_other = BYTE_GET (esyms[j].st_other); } @@ -3775,27 +3811,29 @@ get_32bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) } static Elf_Internal_Sym * -get_64bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) +get_64bit_elf_symbols (FILE * file, Elf_Internal_Shdr * section) { unsigned long number; - Elf64_External_Sym *esyms; - Elf_External_Sym_Shndx *shndx; - Elf_Internal_Sym *isyms; - Elf_Internal_Sym *psym; + Elf64_External_Sym * esyms; + Elf_External_Sym_Shndx * shndx; + Elf_Internal_Sym * isyms; + Elf_Internal_Sym * psym; unsigned int j; - esyms = get_data (NULL, file, section->sh_offset, 1, section->sh_size, - _("symbols")); + esyms = (Elf64_External_Sym *) get_data (NULL, file, section->sh_offset, 1, + section->sh_size, _("symbols")); if (!esyms) return NULL; shndx = NULL; if (symtab_shndx_hdr != NULL && (symtab_shndx_hdr->sh_link - == (unsigned long) SECTION_HEADER_NUM (section - section_headers))) + == (unsigned long) (section - section_headers))) { - shndx = get_data (NULL, file, symtab_shndx_hdr->sh_offset, - 1, symtab_shndx_hdr->sh_size, _("symtab shndx")); + shndx = (Elf_External_Sym_Shndx *) get_data (NULL, file, + symtab_shndx_hdr->sh_offset, + 1, symtab_shndx_hdr->sh_size, + _("symtab shndx")); if (!shndx) { free (esyms); @@ -3804,7 +3842,7 @@ get_64bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) } number = section->sh_size / section->sh_entsize; - isyms = cmalloc (number, sizeof (Elf_Internal_Sym)); + isyms = (Elf_Internal_Sym *) cmalloc (number, sizeof (Elf_Internal_Sym)); if (isyms == NULL) { @@ -3823,9 +3861,11 @@ get_64bit_elf_symbols (FILE *file, Elf_Internal_Shdr *section) psym->st_info = BYTE_GET (esyms[j].st_info); psym->st_other = BYTE_GET (esyms[j].st_other); psym->st_shndx = BYTE_GET (esyms[j].st_shndx); - if (psym->st_shndx == SHN_XINDEX && shndx != NULL) + if (psym->st_shndx == (SHN_XINDEX & 0xffff) && shndx != NULL) psym->st_shndx = byte_get ((unsigned char *) &shndx[j], sizeof (shndx[j])); + else if (psym->st_shndx >= (SHN_LORESERVE & 0xffff)) + psym->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff); psym->st_value = BYTE_GET (esyms[j].st_value); psym->st_size = BYTE_GET (esyms[j].st_size); } @@ -3841,29 +3881,42 @@ static const char * get_elf_section_flags (bfd_vma sh_flags) { static char buff[1024]; - char *p = buff; + char * p = buff; int field_size = is_32bit_elf ? 8 : 16; int index, size = sizeof (buff) - (field_size + 4 + 1); bfd_vma os_flags = 0; bfd_vma proc_flags = 0; bfd_vma unknown_flags = 0; - const struct + static const struct { - const char *str; + const char * str; int len; } flags [] = { - { "WRITE", 5 }, - { "ALLOC", 5 }, - { "EXEC", 4 }, - { "MERGE", 5 }, - { "STRINGS", 7 }, - { "INFO LINK", 9 }, - { "LINK ORDER", 10 }, - { "OS NONCONF", 10 }, - { "GROUP", 5 }, - { "TLS", 3 } + /* 0 */ { STRING_COMMA_LEN ("WRITE") }, + /* 1 */ { STRING_COMMA_LEN ("ALLOC") }, + /* 2 */ { STRING_COMMA_LEN ("EXEC") }, + /* 3 */ { STRING_COMMA_LEN ("MERGE") }, + /* 4 */ { STRING_COMMA_LEN ("STRINGS") }, + /* 5 */ { STRING_COMMA_LEN ("INFO LINK") }, + /* 6 */ { STRING_COMMA_LEN ("LINK ORDER") }, + /* 7 */ { STRING_COMMA_LEN ("OS NONCONF") }, + /* 8 */ { STRING_COMMA_LEN ("GROUP") }, + /* 9 */ { STRING_COMMA_LEN ("TLS") }, + /* IA-64 specific. */ + /* 10 */ { STRING_COMMA_LEN ("SHORT") }, + /* 11 */ { STRING_COMMA_LEN ("NORECOV") }, + /* IA-64 OpenVMS specific. */ + /* 12 */ { STRING_COMMA_LEN ("VMS_GLOBAL") }, + /* 13 */ { STRING_COMMA_LEN ("VMS_OVERLAID") }, + /* 14 */ { STRING_COMMA_LEN ("VMS_SHARED") }, + /* 15 */ { STRING_COMMA_LEN ("VMS_VECTOR") }, + /* 16 */ { STRING_COMMA_LEN ("VMS_ALLOC_64BIT") }, + /* 17 */ { STRING_COMMA_LEN ("VMS_PROTECTED") }, + /* SPARC specific. */ + /* 18 */ { STRING_COMMA_LEN ("EXCLUDE") }, + /* 19 */ { STRING_COMMA_LEN ("ORDERED") } }; if (do_section_details) @@ -3897,7 +3950,40 @@ get_elf_section_flags (bfd_vma sh_flags) default: index = -1; - break; + switch (elf_header.e_machine) + { + case EM_IA_64: + if (flag == SHF_IA_64_SHORT) + index = 10; + else if (flag == SHF_IA_64_NORECOV) + index = 11; +#ifdef BFD64 + else if (elf_header.e_ident[EI_OSABI] == ELFOSABI_OPENVMS) + switch (flag) + { + case SHF_IA_64_VMS_GLOBAL: index = 12; break; + case SHF_IA_64_VMS_OVERLAID: index = 13; break; + case SHF_IA_64_VMS_SHARED: index = 14; break; + case SHF_IA_64_VMS_VECTOR: index = 15; break; + case SHF_IA_64_VMS_ALLOC_64BIT: index = 16; break; + case SHF_IA_64_VMS_PROTECTED: index = 17; break; + default: break; + } +#endif + break; + + case EM_OLD_SPARCV9: + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + if (flag == SHF_EXCLUDE) + index = 18; + else if (flag == SHF_ORDERED) + index = 19; + break; + default: + break; + } } if (index != -1) @@ -3937,7 +4023,8 @@ get_elf_section_flags (bfd_vma sh_flags) case SHF_TLS: *p = 'T'; break; default: - if (elf_header.e_machine == EM_X86_64 + if ((elf_header.e_machine == EM_X86_64 + || elf_header.e_machine == EM_L1OM) && flag == SHF_X86_64_LARGE) *p = 'l'; else if (flag & SHF_MASKOS) @@ -4012,9 +4099,9 @@ get_elf_section_flags (bfd_vma sh_flags) } static int -process_section_headers (FILE *file) +process_section_headers (FILE * file) { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; unsigned int i; section_headers = NULL; @@ -4041,14 +4128,15 @@ process_section_headers (FILE *file) /* Read in the string table, so that we have names to display. */ if (elf_header.e_shstrndx != SHN_UNDEF - && SECTION_HEADER_INDEX (elf_header.e_shstrndx) < elf_header.e_shnum) + && elf_header.e_shstrndx < elf_header.e_shnum) { - section = SECTION_HEADER (elf_header.e_shstrndx); + section = section_headers + elf_header.e_shstrndx; if (section->sh_size != 0) { - string_table = get_data (NULL, file, section->sh_offset, - 1, section->sh_size, _("string table")); + string_table = (char *) get_data (NULL, file, section->sh_offset, + 1, section->sh_size, + _("string table")); string_table_length = string_table != NULL ? section->sh_size : 0; } @@ -4096,6 +4184,17 @@ process_section_headers (FILE *file) eh_addr_size = 4; break; } + break; + + case EM_M32C_OLD: + case EM_M32C: + switch (elf_header.e_flags & EF_M32C_CPU_MASK) + { + case EF_M32C_CPU_M16C: + eh_addr_size = 2; + break; + } + break; } #define CHECK_ENTSIZE_VALUES(section, i, size32, size64) \ @@ -4118,7 +4217,7 @@ process_section_headers (FILE *file) i < elf_header.e_shnum; i++, section++) { - char *name = SECTION_NAME (section); + char * name = SECTION_NAME (section); if (section->sh_type == SHT_DYNSYM) { @@ -4141,8 +4240,9 @@ process_section_headers (FILE *file) continue; } - dynamic_strings = get_data (NULL, file, section->sh_offset, - 1, section->sh_size, _("dynamic strings")); + dynamic_strings = (char *) get_data (NULL, file, section->sh_offset, + 1, section->sh_size, + _("dynamic strings")); dynamic_strings_length = section->sh_size; } else if (section->sh_type == SHT_SYMTAB_SHNDX) @@ -4163,12 +4263,16 @@ process_section_headers (FILE *file) else if (section->sh_type == SHT_RELA) CHECK_ENTSIZE (section, i, Rela); else if ((do_debugging || do_debug_info || do_debug_abbrevs - || do_debug_lines || do_debug_pubnames || do_debug_aranges - || do_debug_frames || do_debug_macinfo || do_debug_str - || do_debug_loc || do_debug_ranges) - && const_strneq (name, ".debug_")) + || do_debug_lines || do_debug_pubnames + || do_debug_aranges || do_debug_frames || do_debug_macinfo + || do_debug_str || do_debug_loc || do_debug_ranges) + && (const_strneq (name, ".debug_") + || const_strneq (name, ".zdebug_"))) { - name += 7; + if (name[1] == 'z') + name += sizeof (".zdebug_") - 1; + else + name += sizeof (".debug_") - 1; if (do_debugging || (do_debug_info && streq (name, "info")) @@ -4182,14 +4286,14 @@ process_section_headers (FILE *file) || (do_debug_str && streq (name, "str")) || (do_debug_loc && streq (name, "loc")) ) - request_dump (i, DEBUG_DUMP); + request_dump_bynumber (i, DEBUG_DUMP); } - /* linkonce section to be combined with .debug_info at link time. */ + /* Linkonce section to be combined with .debug_info at link time. */ else if ((do_debugging || do_debug_info) && const_strneq (name, ".gnu.linkonce.wi.")) - request_dump (i, DEBUG_DUMP); + request_dump_bynumber (i, DEBUG_DUMP); else if (do_debug_frames && streq (name, ".eh_frame")) - request_dump (i, DEBUG_DUMP); + request_dump_bynumber (i, DEBUG_DUMP); } if (! do_sections) @@ -4247,20 +4351,23 @@ process_section_headers (FILE *file) if (do_section_details) { printf (" [%2u] %s\n", - SECTION_HEADER_NUM (i), + i, SECTION_NAME (section)); if (is_32bit_elf || do_wide) printf (" %-15.15s ", get_section_type_name (section->sh_type)); } else - printf (" [%2u] %-17.17s %-15.15s ", - SECTION_HEADER_NUM (i), + printf ((do_wide ? " [%2u] %-17s %-15s " + : " [%2u] %-17.17s %-15.15s "), + i, SECTION_NAME (section), get_section_type_name (section->sh_type)); if (is_32bit_elf) { + const char * link_too_big = NULL; + print_vma (section->sh_addr, LONG_HEX); printf ( " %6.6lx %6.6lx %2.2lx", @@ -4273,10 +4380,45 @@ process_section_headers (FILE *file) else printf (" %3s ", get_elf_section_flags (section->sh_flags)); - printf ("%2ld %3lu %2ld\n", - (unsigned long) section->sh_link, - (unsigned long) section->sh_info, - (unsigned long) section->sh_addralign); + if (section->sh_link >= elf_header.e_shnum) + { + link_too_big = ""; + /* The sh_link value is out of range. Normally this indicates + an error but it can have special values in SPARC binaries. */ + switch (elf_header.e_machine) + { + case EM_OLD_SPARCV9: + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + if (section->sh_link == (SHN_BEFORE & 0xffff)) + link_too_big = "BEFORE"; + else if (section->sh_link == (SHN_AFTER & 0xffff)) + link_too_big = "AFTER"; + break; + default: + break; + } + } + + if (do_section_details) + { + if (link_too_big != NULL && * link_too_big) + printf ("<%s> ", link_too_big); + else + printf ("%2u ", section->sh_link); + printf ("%3u %2lu\n", section->sh_info, + (unsigned long) section->sh_addralign); + } + else + printf ("%2u %3u %2lu\n", + section->sh_link, + section->sh_info, + (unsigned long) section->sh_addralign); + + if (link_too_big && ! * link_too_big) + warn (_("section %u: sh_link value of %u is larger than the number of sections\n"), + i, section->sh_link); } else if (do_wide) { @@ -4311,12 +4453,10 @@ process_section_headers (FILE *file) else printf (" %3s ", get_elf_section_flags (section->sh_flags)); - printf ("%2ld %3lu ", - (unsigned long) section->sh_link, - (unsigned long) section->sh_info); + printf ("%2u %3u ", section->sh_link, section->sh_info); if ((unsigned long) section->sh_addralign == section->sh_addralign) - printf ("%2ld\n", (unsigned long) section->sh_addralign); + printf ("%2lu\n", (unsigned long) section->sh_addralign); else { print_vma (section->sh_addralign, DEC); @@ -4335,13 +4475,13 @@ process_section_headers (FILE *file) printf (" "); print_vma (section->sh_offset, LONG_HEX); } - printf (" %ld\n ", (unsigned long) section->sh_link); + printf (" %u\n ", section->sh_link); print_vma (section->sh_size, LONG_HEX); putchar (' '); print_vma (section->sh_entsize, LONG_HEX); - printf (" %-16lu %ld\n", - (unsigned long) section->sh_info, + printf (" %-16u %lu\n", + section->sh_info, (unsigned long) section->sh_addralign); } else @@ -4362,9 +4502,9 @@ process_section_headers (FILE *file) printf (" %3s ", get_elf_section_flags (section->sh_flags)); - printf (" %2ld %3lu %ld\n", - (unsigned long) section->sh_link, - (unsigned long) section->sh_info, + printf (" %2u %3u %lu\n", + section->sh_link, + section->sh_info, (unsigned long) section->sh_addralign); } @@ -4398,14 +4538,15 @@ get_group_flags (unsigned int flags) } static int -process_section_groups (FILE *file) +process_section_groups (FILE * file) { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; unsigned int i; - struct group *group; - Elf_Internal_Shdr *symtab_sec, *strtab_sec; - Elf_Internal_Sym *symtab; - char *strtab; + struct group * group; + Elf_Internal_Shdr * symtab_sec; + Elf_Internal_Shdr * strtab_sec; + Elf_Internal_Sym * symtab; + char * strtab; size_t strtab_size; /* Don't process section groups unless needed. */ @@ -4426,8 +4567,8 @@ process_section_groups (FILE *file) abort (); } - section_headers_groups = calloc (elf_header.e_shnum, - sizeof (struct group *)); + section_headers_groups = (struct group **) calloc (elf_header.e_shnum, + sizeof (struct group *)); if (section_headers_groups == NULL) { @@ -4451,7 +4592,7 @@ process_section_groups (FILE *file) return 1; } - section_groups = calloc (group_count, sizeof (struct group)); + section_groups = (struct group *) calloc (group_count, sizeof (struct group)); if (section_groups == NULL) { @@ -4470,16 +4611,17 @@ process_section_groups (FILE *file) { if (section->sh_type == SHT_GROUP) { - char *name = SECTION_NAME (section); - char *group_name; - unsigned char *start, *indices; + char * name = SECTION_NAME (section); + char * group_name; + unsigned char * start; + unsigned char * indices; unsigned int entry, j, size; - Elf_Internal_Shdr *sec; - Elf_Internal_Sym *sym; + Elf_Internal_Shdr * sec; + Elf_Internal_Sym * sym; /* Get the symbol table. */ - if (SECTION_HEADER_INDEX (section->sh_link) >= elf_header.e_shnum - || ((sec = SECTION_HEADER (section->sh_link))->sh_type + if (section->sh_link >= elf_header.e_shnum + || ((sec = section_headers + section->sh_link)->sh_type != SHT_SYMTAB)) { error (_("Bad sh_link in group section `%s'\n"), name); @@ -4498,14 +4640,14 @@ process_section_groups (FILE *file) if (ELF_ST_TYPE (sym->st_info) == STT_SECTION) { - bfd_vma sec_index = SECTION_HEADER_INDEX (sym->st_shndx); - if (sec_index == 0) + if (sym->st_shndx == 0 + || sym->st_shndx >= elf_header.e_shnum) { error (_("Bad sh_info in group section `%s'\n"), name); continue; } - group_name = SECTION_NAME (section_headers + sec_index); + group_name = SECTION_NAME (section_headers + sym->st_shndx); strtab_sec = NULL; if (strtab) free (strtab); @@ -4515,8 +4657,7 @@ process_section_groups (FILE *file) else { /* Get the string table. */ - if (SECTION_HEADER_INDEX (symtab_sec->sh_link) - >= elf_header.e_shnum) + if (symtab_sec->sh_link >= elf_header.e_shnum) { strtab_sec = NULL; if (strtab) @@ -4525,22 +4666,23 @@ process_section_groups (FILE *file) strtab_size = 0; } else if (strtab_sec - != (sec = SECTION_HEADER (symtab_sec->sh_link))) + != (sec = section_headers + symtab_sec->sh_link)) { strtab_sec = sec; if (strtab) free (strtab); - strtab = get_data (NULL, file, strtab_sec->sh_offset, - 1, strtab_sec->sh_size, - _("string table")); + strtab = (char *) get_data (NULL, file, strtab_sec->sh_offset, + 1, strtab_sec->sh_size, + _("string table")); strtab_size = strtab != NULL ? strtab_sec->sh_size : 0; } group_name = sym->st_name < strtab_size ? strtab + sym->st_name : ""; } - start = get_data (NULL, file, section->sh_offset, - 1, section->sh_size, _("section data")); + start = (unsigned char *) get_data (NULL, file, section->sh_offset, + 1, section->sh_size, + _("section data")); indices = start; size = (section->sh_size / section->sh_entsize) - 1; @@ -4559,32 +4701,25 @@ process_section_groups (FILE *file) for (j = 0; j < size; j++) { - struct group_list *g; + struct group_list * g; entry = byte_get (indices, 4); indices += 4; - if (SECTION_HEADER_INDEX (entry) >= elf_header.e_shnum) + if (entry >= elf_header.e_shnum) { error (_("section [%5u] in group section [%5u] > maximum section [%5u]\n"), entry, i, elf_header.e_shnum - 1); continue; } - else if (entry >= SHN_LORESERVE && entry <= SHN_HIRESERVE) - { - error (_("invalid section [%5u] in group section [%5u]\n"), - entry, i); - continue; - } - if (section_headers_groups [SECTION_HEADER_INDEX (entry)] - != NULL) + if (section_headers_groups [entry] != NULL) { if (entry) { error (_("section [%5u] in group section [%5u] already in group section [%5u]\n"), entry, i, - section_headers_groups [SECTION_HEADER_INDEX (entry)]->group_index); + section_headers_groups [entry]->group_index); continue; } else @@ -4596,22 +4731,21 @@ process_section_groups (FILE *file) if (!warned) { error (_("section 0 in group section [%5u]\n"), - section_headers_groups [SECTION_HEADER_INDEX (entry)]->group_index); + section_headers_groups [entry]->group_index); warned++; } } } - section_headers_groups [SECTION_HEADER_INDEX (entry)] - = group; + section_headers_groups [entry] = group; if (do_section_groups) { - sec = SECTION_HEADER (entry); + sec = section_headers + entry; printf (" [%5u] %s\n", entry, SECTION_NAME (sec)); } - g = xmalloc (sizeof (struct group_list)); + g = (struct group_list *) xmalloc (sizeof (struct group_list)); g->section_index = entry; g->next = group->root; group->root = g; @@ -4633,7 +4767,7 @@ process_section_groups (FILE *file) static struct { - const char *name; + const char * name; int reloc; int size; int rela; @@ -4647,7 +4781,7 @@ static struct /* Process the reloc section. */ static int -process_relocs (FILE *file) +process_relocs (FILE * file) { unsigned long rel_size; unsigned long rel_offset; @@ -4659,7 +4793,7 @@ process_relocs (FILE *file) if (do_using_dynamic) { int is_rela; - const char *name; + const char * name; int has_dynamic_reloc; unsigned int i; @@ -4707,7 +4841,7 @@ process_relocs (FILE *file) } else { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; unsigned long i; int found = 0; @@ -4724,7 +4858,7 @@ process_relocs (FILE *file) if (rel_size) { - Elf_Internal_Shdr *strsec; + Elf_Internal_Shdr * strsec; int is_rela; printf (_("\nRelocation section ")); @@ -4739,17 +4873,16 @@ process_relocs (FILE *file) is_rela = section->sh_type == SHT_RELA; - if (section->sh_link - && SECTION_HEADER_INDEX (section->sh_link) - < elf_header.e_shnum) + if (section->sh_link != 0 + && section->sh_link < elf_header.e_shnum) { - Elf_Internal_Shdr *symsec; - Elf_Internal_Sym *symtab; + Elf_Internal_Shdr * symsec; + Elf_Internal_Sym * symtab; unsigned long nsyms; unsigned long strtablen = 0; - char *strtab = NULL; + char * strtab = NULL; - symsec = SECTION_HEADER (section->sh_link); + symsec = section_headers + section->sh_link; if (symsec->sh_type != SHT_SYMTAB && symsec->sh_type != SHT_DYNSYM) continue; @@ -4760,14 +4893,14 @@ process_relocs (FILE *file) if (symtab == NULL) continue; - if (SECTION_HEADER_INDEX (symsec->sh_link) - < elf_header.e_shnum) + if (symsec->sh_link != 0 + && symsec->sh_link < elf_header.e_shnum) { - strsec = SECTION_HEADER (symsec->sh_link); + strsec = section_headers + symsec->sh_link; - strtab = get_data (NULL, file, strsec->sh_offset, - 1, strsec->sh_size, - _("string table")); + strtab = (char *) get_data (NULL, file, strsec->sh_offset, + 1, strsec->sh_size, + _("string table")); strtablen = strtab == NULL ? 0 : strsec->sh_size; } @@ -4811,37 +4944,40 @@ struct absaddr ? section_headers [(a).section].sh_addr + (a).offset \ : (a).offset) +struct ia64_unw_table_entry + { + struct absaddr start; + struct absaddr end; + struct absaddr info; + }; + struct ia64_unw_aux_info { - struct ia64_unw_table_entry - { - struct absaddr start; - struct absaddr end; - struct absaddr info; - } - *table; /* Unwind table. */ + + struct ia64_unw_table_entry *table; /* Unwind table. */ unsigned long table_len; /* Length of unwind table. */ - unsigned char *info; /* Unwind info. */ + unsigned char * info; /* Unwind info. */ unsigned long info_size; /* Size of unwind info. */ bfd_vma info_addr; /* starting address of unwind info. */ bfd_vma seg_base; /* Starting address of segment. */ - Elf_Internal_Sym *symtab; /* The symbol table. */ + Elf_Internal_Sym * symtab; /* The symbol table. */ unsigned long nsyms; /* Number of symbols. */ - char *strtab; /* The string table. */ + char * strtab; /* The string table. */ unsigned long strtab_size; /* Size of string table. */ }; static void -find_symbol_for_address (Elf_Internal_Sym *symtab, +find_symbol_for_address (Elf_Internal_Sym * symtab, unsigned long nsyms, - const char *strtab, + const char * strtab, unsigned long strtab_size, struct absaddr addr, - const char **symname, - bfd_vma *offset) + const char ** symname, + bfd_vma * offset) { bfd_vma dist = 0x100000; - Elf_Internal_Sym *sym, *best = NULL; + Elf_Internal_Sym * sym; + Elf_Internal_Sym * best = NULL; unsigned long i; for (i = 0, sym = symtab; i < nsyms; ++i, ++sym) @@ -4870,18 +5006,18 @@ find_symbol_for_address (Elf_Internal_Sym *symtab, } static void -dump_ia64_unwind (struct ia64_unw_aux_info *aux) +dump_ia64_unwind (struct ia64_unw_aux_info * aux) { - struct ia64_unw_table_entry *tp; + struct ia64_unw_table_entry * tp; int in_body; for (tp = aux->table; tp < aux->table + aux->table_len; ++tp) { bfd_vma stamp; bfd_vma offset; - const unsigned char *dp; - const unsigned char *head; - const char *procname; + const unsigned char * dp; + const unsigned char * head; + const char * procname; find_symbol_for_address (aux->symtab, aux->nsyms, aux->strtab, aux->strtab_size, tp->start, &procname, &offset); @@ -4926,18 +5062,20 @@ dump_ia64_unwind (struct ia64_unw_aux_info *aux) } static int -slurp_ia64_unwind_table (FILE *file, - struct ia64_unw_aux_info *aux, - Elf_Internal_Shdr *sec) +slurp_ia64_unwind_table (FILE * file, + struct ia64_unw_aux_info * aux, + Elf_Internal_Shdr * sec) { unsigned long size, nrelas, i; - Elf_Internal_Phdr *seg; - struct ia64_unw_table_entry *tep; - Elf_Internal_Shdr *relsec; - Elf_Internal_Rela *rela, *rp; - unsigned char *table, *tp; - Elf_Internal_Sym *sym; - const char *relname; + Elf_Internal_Phdr * seg; + struct ia64_unw_table_entry * tep; + Elf_Internal_Shdr * relsec; + Elf_Internal_Rela * rela; + Elf_Internal_Rela * rp; + unsigned char * table; + unsigned char * tp; + Elf_Internal_Sym * sym; + const char * relname; /* First, find the starting address of the segment that includes this section: */ @@ -4965,44 +5103,36 @@ slurp_ia64_unwind_table (FILE *file, /* Second, build the unwind table from the contents of the unwind section: */ size = sec->sh_size; - table = get_data (NULL, file, sec->sh_offset, 1, size, _("unwind table")); + table = (unsigned char *) get_data (NULL, file, sec->sh_offset, 1, size, + _("unwind table")); if (!table) return 0; - aux->table = xcmalloc (size / (3 * eh_addr_size), sizeof (aux->table[0])); + aux->table = (struct ia64_unw_table_entry *) + xcmalloc (size / (3 * eh_addr_size), sizeof (aux->table[0])); tep = aux->table; - for (tp = table; tp < table + size; tp += 3 * eh_addr_size, ++tep) + for (tp = table; tp < table + size; ++tep) { tep->start.section = SHN_UNDEF; tep->end.section = SHN_UNDEF; tep->info.section = SHN_UNDEF; - if (is_32bit_elf) - { - tep->start.offset = byte_get ((unsigned char *) tp + 0, 4); - tep->end.offset = byte_get ((unsigned char *) tp + 4, 4); - tep->info.offset = byte_get ((unsigned char *) tp + 8, 4); - } - else - { - tep->start.offset = BYTE_GET ((unsigned char *) tp + 0); - tep->end.offset = BYTE_GET ((unsigned char *) tp + 8); - tep->info.offset = BYTE_GET ((unsigned char *) tp + 16); - } + tep->start.offset = byte_get (tp, eh_addr_size); tp += eh_addr_size; + tep->end.offset = byte_get (tp, eh_addr_size); tp += eh_addr_size; + tep->info.offset = byte_get (tp, eh_addr_size); tp += eh_addr_size; tep->start.offset += aux->seg_base; tep->end.offset += aux->seg_base; tep->info.offset += aux->seg_base; } free (table); - /* Third, apply any relocations to the unwind table: */ - + /* Third, apply any relocations to the unwind table: */ for (relsec = section_headers; relsec < section_headers + elf_header.e_shnum; ++relsec) { if (relsec->sh_type != SHT_RELA - || SECTION_HEADER_INDEX (relsec->sh_info) >= elf_header.e_shnum - || SECTION_HEADER (relsec->sh_info) != sec) + || relsec->sh_info >= elf_header.e_shnum + || section_headers + relsec->sh_info != sec) continue; if (!slurp_rela_relocs (file, relsec->sh_offset, relsec->sh_size, @@ -5011,16 +5141,8 @@ slurp_ia64_unwind_table (FILE *file, for (rp = rela; rp < rela + nrelas; ++rp) { - if (is_32bit_elf) - { - relname = elf_ia64_reloc_type (ELF32_R_TYPE (rp->r_info)); - sym = aux->symtab + ELF32_R_SYM (rp->r_info); - } - else - { - relname = elf_ia64_reloc_type (ELF64_R_TYPE (rp->r_info)); - sym = aux->symtab + ELF64_R_SYM (rp->r_info); - } + relname = elf_ia64_reloc_type (get_reloc_type (rp->r_info)); + sym = aux->symtab + get_reloc_symindex (rp->r_info); if (! const_strneq (relname, "R_IA64_SEGREL")) { @@ -5057,9 +5179,11 @@ slurp_ia64_unwind_table (FILE *file, } static int -ia64_process_unwind (FILE *file) +ia64_process_unwind (FILE * file) { - Elf_Internal_Shdr *sec, *unwsec = NULL, *strsec; + Elf_Internal_Shdr * sec; + Elf_Internal_Shdr * unwsec = NULL; + Elf_Internal_Shdr * strsec; unsigned long i, unwcount = 0, unwstart = 0; struct ia64_unw_aux_info aux; @@ -5068,14 +5192,15 @@ ia64_process_unwind (FILE *file) for (i = 0, sec = section_headers; i < elf_header.e_shnum; ++i, ++sec) { if (sec->sh_type == SHT_SYMTAB - && SECTION_HEADER_INDEX (sec->sh_link) < elf_header.e_shnum) + && sec->sh_link < elf_header.e_shnum) { aux.nsyms = sec->sh_size / sec->sh_entsize; aux.symtab = GET_ELF_SYMBOLS (file, sec); - strsec = SECTION_HEADER (sec->sh_link); - aux.strtab = get_data (NULL, file, strsec->sh_offset, - 1, strsec->sh_size, _("string table")); + strsec = section_headers + sec->sh_link; + aux.strtab = (char *) get_data (NULL, file, strsec->sh_offset, + 1, strsec->sh_size, + _("string table")); aux.strtab_size = aux.strtab != NULL ? strsec->sh_size : 0; } else if (sec->sh_type == SHT_IA_64_UNWIND) @@ -5087,7 +5212,7 @@ ia64_process_unwind (FILE *file) while (unwcount-- > 0) { - char *suffix; + char * suffix; size_t len, len2; for (i = unwstart, sec = section_headers + unwstart; @@ -5104,11 +5229,11 @@ ia64_process_unwind (FILE *file) if ((unwsec->sh_flags & SHF_GROUP) != 0) { /* We need to find which section group it is in. */ - struct group_list *g = section_headers_groups [i]->root; + struct group_list * g = section_headers_groups [i]->root; for (; g != NULL; g = g->next) { - sec = SECTION_HEADER (g->section_index); + sec = section_headers + g->section_index; if (streq (SECTION_NAME (sec), ELF_STRING_ia64_unwind_info)) break; @@ -5157,8 +5282,9 @@ ia64_process_unwind (FILE *file) { aux.info_size = sec->sh_size; aux.info_addr = sec->sh_addr; - aux.info = get_data (NULL, file, sec->sh_offset, 1, aux.info_size, - _("unwind info")); + aux.info = (unsigned char *) get_data (NULL, file, sec->sh_offset, 1, + aux.info_size, + _("unwind info")); printf (_("\nUnwind section ")); @@ -5193,62 +5319,63 @@ ia64_process_unwind (FILE *file) return 1; } +struct hppa_unw_table_entry + { + struct absaddr start; + struct absaddr end; + unsigned int Cannot_unwind:1; /* 0 */ + unsigned int Millicode:1; /* 1 */ + unsigned int Millicode_save_sr0:1; /* 2 */ + unsigned int Region_description:2; /* 3..4 */ + unsigned int reserved1:1; /* 5 */ + unsigned int Entry_SR:1; /* 6 */ + unsigned int Entry_FR:4; /* number saved */ /* 7..10 */ + unsigned int Entry_GR:5; /* number saved */ /* 11..15 */ + unsigned int Args_stored:1; /* 16 */ + unsigned int Variable_Frame:1; /* 17 */ + unsigned int Separate_Package_Body:1; /* 18 */ + unsigned int Frame_Extension_Millicode:1; /* 19 */ + unsigned int Stack_Overflow_Check:1; /* 20 */ + unsigned int Two_Instruction_SP_Increment:1; /* 21 */ + unsigned int Ada_Region:1; /* 22 */ + unsigned int cxx_info:1; /* 23 */ + unsigned int cxx_try_catch:1; /* 24 */ + unsigned int sched_entry_seq:1; /* 25 */ + unsigned int reserved2:1; /* 26 */ + unsigned int Save_SP:1; /* 27 */ + unsigned int Save_RP:1; /* 28 */ + unsigned int Save_MRP_in_frame:1; /* 29 */ + unsigned int extn_ptr_defined:1; /* 30 */ + unsigned int Cleanup_defined:1; /* 31 */ + + unsigned int MPE_XL_interrupt_marker:1; /* 0 */ + unsigned int HP_UX_interrupt_marker:1; /* 1 */ + unsigned int Large_frame:1; /* 2 */ + unsigned int Pseudo_SP_Set:1; /* 3 */ + unsigned int reserved4:1; /* 4 */ + unsigned int Total_frame_size:27; /* 5..31 */ + }; + struct hppa_unw_aux_info { - struct hppa_unw_table_entry - { - struct absaddr start; - struct absaddr end; - unsigned int Cannot_unwind:1; /* 0 */ - unsigned int Millicode:1; /* 1 */ - unsigned int Millicode_save_sr0:1; /* 2 */ - unsigned int Region_description:2; /* 3..4 */ - unsigned int reserved1:1; /* 5 */ - unsigned int Entry_SR:1; /* 6 */ - unsigned int Entry_FR:4; /* number saved */ /* 7..10 */ - unsigned int Entry_GR:5; /* number saved */ /* 11..15 */ - unsigned int Args_stored:1; /* 16 */ - unsigned int Variable_Frame:1; /* 17 */ - unsigned int Separate_Package_Body:1; /* 18 */ - unsigned int Frame_Extension_Millicode:1; /* 19 */ - unsigned int Stack_Overflow_Check:1; /* 20 */ - unsigned int Two_Instruction_SP_Increment:1; /* 21 */ - unsigned int Ada_Region:1; /* 22 */ - unsigned int cxx_info:1; /* 23 */ - unsigned int cxx_try_catch:1; /* 24 */ - unsigned int sched_entry_seq:1; /* 25 */ - unsigned int reserved2:1; /* 26 */ - unsigned int Save_SP:1; /* 27 */ - unsigned int Save_RP:1; /* 28 */ - unsigned int Save_MRP_in_frame:1; /* 29 */ - unsigned int extn_ptr_defined:1; /* 30 */ - unsigned int Cleanup_defined:1; /* 31 */ - - unsigned int MPE_XL_interrupt_marker:1; /* 0 */ - unsigned int HP_UX_interrupt_marker:1; /* 1 */ - unsigned int Large_frame:1; /* 2 */ - unsigned int Pseudo_SP_Set:1; /* 3 */ - unsigned int reserved4:1; /* 4 */ - unsigned int Total_frame_size:27; /* 5..31 */ - } - *table; /* Unwind table. */ + struct hppa_unw_table_entry *table; /* Unwind table. */ unsigned long table_len; /* Length of unwind table. */ bfd_vma seg_base; /* Starting address of segment. */ - Elf_Internal_Sym *symtab; /* The symbol table. */ + Elf_Internal_Sym * symtab; /* The symbol table. */ unsigned long nsyms; /* Number of symbols. */ - char *strtab; /* The string table. */ + char * strtab; /* The string table. */ unsigned long strtab_size; /* Size of string table. */ }; static void -dump_hppa_unwind (struct hppa_unw_aux_info *aux) +dump_hppa_unwind (struct hppa_unw_aux_info * aux) { - struct hppa_unw_table_entry *tp; + struct hppa_unw_table_entry * tp; for (tp = aux->table; tp < aux->table + aux->table_len; ++tp) { bfd_vma offset; - const char *procname; + const char * procname; find_symbol_for_address (aux->symtab, aux->nsyms, aux->strtab, aux->strtab_size, tp->start, &procname, @@ -5307,18 +5434,20 @@ dump_hppa_unwind (struct hppa_unw_aux_info *aux) } static int -slurp_hppa_unwind_table (FILE *file, - struct hppa_unw_aux_info *aux, - Elf_Internal_Shdr *sec) +slurp_hppa_unwind_table (FILE * file, + struct hppa_unw_aux_info * aux, + Elf_Internal_Shdr * sec) { unsigned long size, unw_ent_size, nentries, nrelas, i; - Elf_Internal_Phdr *seg; - struct hppa_unw_table_entry *tep; - Elf_Internal_Shdr *relsec; - Elf_Internal_Rela *rela, *rp; - unsigned char *table, *tp; - Elf_Internal_Sym *sym; - const char *relname; + Elf_Internal_Phdr * seg; + struct hppa_unw_table_entry * tep; + Elf_Internal_Shdr * relsec; + Elf_Internal_Rela * rela; + Elf_Internal_Rela * rp; + unsigned char * table; + unsigned char * tp; + Elf_Internal_Sym * sym; + const char * relname; /* First, find the starting address of the segment that includes this section. */ @@ -5347,7 +5476,8 @@ slurp_hppa_unwind_table (FILE *file, /* Second, build the unwind table from the contents of the unwind section. */ size = sec->sh_size; - table = get_data (NULL, file, sec->sh_offset, 1, size, _("unwind table")); + table = (unsigned char *) get_data (NULL, file, sec->sh_offset, 1, size, + _("unwind table")); if (!table) return 0; @@ -5355,7 +5485,8 @@ slurp_hppa_unwind_table (FILE *file, nentries = size / unw_ent_size; size = unw_ent_size * nentries; - tep = aux->table = xcmalloc (nentries, sizeof (aux->table[0])); + tep = aux->table = (struct hppa_unw_table_entry *) + xcmalloc (nentries, sizeof (aux->table[0])); for (tp = table; tp < table + size; tp += unw_ent_size, ++tep) { @@ -5407,14 +5538,13 @@ slurp_hppa_unwind_table (FILE *file, free (table); /* Third, apply any relocations to the unwind table. */ - for (relsec = section_headers; relsec < section_headers + elf_header.e_shnum; ++relsec) { if (relsec->sh_type != SHT_RELA - || SECTION_HEADER_INDEX (relsec->sh_info) >= elf_header.e_shnum - || SECTION_HEADER (relsec->sh_info) != sec) + || relsec->sh_info >= elf_header.e_shnum + || section_headers + relsec->sh_info != sec) continue; if (!slurp_rela_relocs (file, relsec->sh_offset, relsec->sh_size, @@ -5423,16 +5553,8 @@ slurp_hppa_unwind_table (FILE *file, for (rp = rela; rp < rela + nrelas; ++rp) { - if (is_32bit_elf) - { - relname = elf_hppa_reloc_type (ELF32_R_TYPE (rp->r_info)); - sym = aux->symtab + ELF32_R_SYM (rp->r_info); - } - else - { - relname = elf_hppa_reloc_type (ELF64_R_TYPE (rp->r_info)); - sym = aux->symtab + ELF64_R_SYM (rp->r_info); - } + relname = elf_hppa_reloc_type (get_reloc_type (rp->r_info)); + sym = aux->symtab + get_reloc_symindex (rp->r_info); /* R_PARISC_SEGREL32 or R_PARISC_SEGREL64. */ if (! const_strneq (relname, "R_PARISC_SEGREL")) @@ -5467,12 +5589,12 @@ slurp_hppa_unwind_table (FILE *file, } static int -hppa_process_unwind (FILE *file) +hppa_process_unwind (FILE * file) { struct hppa_unw_aux_info aux; - Elf_Internal_Shdr *unwsec = NULL; - Elf_Internal_Shdr *strsec; - Elf_Internal_Shdr *sec; + Elf_Internal_Shdr * unwsec = NULL; + Elf_Internal_Shdr * strsec; + Elf_Internal_Shdr * sec; unsigned long i; memset (& aux, 0, sizeof (aux)); @@ -5483,14 +5605,15 @@ hppa_process_unwind (FILE *file) for (i = 0, sec = section_headers; i < elf_header.e_shnum; ++i, ++sec) { if (sec->sh_type == SHT_SYMTAB - && SECTION_HEADER_INDEX (sec->sh_link) < elf_header.e_shnum) + && sec->sh_link < elf_header.e_shnum) { aux.nsyms = sec->sh_size / sec->sh_entsize; aux.symtab = GET_ELF_SYMBOLS (file, sec); - strsec = SECTION_HEADER (sec->sh_link); - aux.strtab = get_data (NULL, file, strsec->sh_offset, - 1, strsec->sh_size, _("string table")); + strsec = section_headers + sec->sh_link; + aux.strtab = (char *) get_data (NULL, file, strsec->sh_offset, + 1, strsec->sh_size, + _("string table")); aux.strtab_size = aux.strtab != NULL ? strsec->sh_size : 0; } else if (streq (SECTION_NAME (sec), ".PARISC.unwind")) @@ -5530,12 +5653,14 @@ hppa_process_unwind (FILE *file) } static int -process_unwind (FILE *file) +process_unwind (FILE * file) { - struct unwind_handler { + struct unwind_handler + { int machtype; - int (*handler)(FILE *file); - } handlers[] = { + int (* handler)(FILE *); + } handlers[] = + { { EM_IA_64, ia64_process_unwind }, { EM_PARISC, hppa_process_unwind }, { 0, 0 } @@ -5554,7 +5679,7 @@ process_unwind (FILE *file) } static void -dynamic_section_mips_val (Elf_Internal_Dyn *entry) +dynamic_section_mips_val (Elf_Internal_Dyn * entry) { switch (entry->d_tag) { @@ -5593,7 +5718,7 @@ dynamic_section_mips_val (Elf_Internal_Dyn *entry) case DT_MIPS_TIME_STAMP: { char timebuf[20]; - struct tm *tmp; + struct tm * tmp; time_t time = entry->d_un.d_val; tmp = gmtime (&time); @@ -5621,13 +5746,13 @@ dynamic_section_mips_val (Elf_Internal_Dyn *entry) break; default: - printf ("%#lx\n", (long) entry->d_un.d_ptr); + printf ("%#lx\n", (unsigned long) entry->d_un.d_ptr); } } static void -dynamic_section_parisc_val (Elf_Internal_Dyn *entry) +dynamic_section_parisc_val (Elf_Internal_Dyn * entry) { switch (entry->d_tag) { @@ -5636,7 +5761,7 @@ dynamic_section_parisc_val (Elf_Internal_Dyn *entry) static struct { long int bit; - const char *str; + const char * str; } flags[] = { @@ -5689,7 +5814,7 @@ dynamic_section_parisc_val (Elf_Internal_Dyn *entry) } static void -dynamic_section_ia64_val (Elf_Internal_Dyn *entry) +dynamic_section_ia64_val (Elf_Internal_Dyn * entry) { switch (entry->d_tag) { @@ -5708,13 +5833,14 @@ dynamic_section_ia64_val (Elf_Internal_Dyn *entry) } static int -get_32bit_dynamic_section (FILE *file) +get_32bit_dynamic_section (FILE * file) { - Elf32_External_Dyn *edyn, *ext; - Elf_Internal_Dyn *entry; + Elf32_External_Dyn * edyn; + Elf32_External_Dyn * ext; + Elf_Internal_Dyn * entry; - edyn = get_data (NULL, file, dynamic_addr, 1, dynamic_size, - _("dynamic section")); + edyn = (Elf32_External_Dyn *) get_data (NULL, file, dynamic_addr, 1, + dynamic_size, _("dynamic section")); if (!edyn) return 0; @@ -5730,7 +5856,8 @@ get_32bit_dynamic_section (FILE *file) break; } - dynamic_section = cmalloc (dynamic_nent, sizeof (*entry)); + dynamic_section = (Elf_Internal_Dyn *) cmalloc (dynamic_nent, + sizeof (* entry)); if (dynamic_section == NULL) { error (_("Out of memory\n")); @@ -5752,13 +5879,14 @@ get_32bit_dynamic_section (FILE *file) } static int -get_64bit_dynamic_section (FILE *file) +get_64bit_dynamic_section (FILE * file) { - Elf64_External_Dyn *edyn, *ext; - Elf_Internal_Dyn *entry; + Elf64_External_Dyn * edyn; + Elf64_External_Dyn * ext; + Elf_Internal_Dyn * entry; - edyn = get_data (NULL, file, dynamic_addr, 1, dynamic_size, - _("dynamic section")); + edyn = (Elf64_External_Dyn *) get_data (NULL, file, dynamic_addr, 1, + dynamic_size, _("dynamic section")); if (!edyn) return 0; @@ -5774,7 +5902,8 @@ get_64bit_dynamic_section (FILE *file) break; } - dynamic_section = cmalloc (dynamic_nent, sizeof (*entry)); + dynamic_section = (Elf_Internal_Dyn *) cmalloc (dynamic_nent, + sizeof (* entry)); if (dynamic_section == NULL) { error (_("Out of memory\n")); @@ -5828,9 +5957,9 @@ print_dynamic_flags (bfd_vma flags) /* Parse and display the contents of the dynamic section. */ static int -process_dynamic_section (FILE *file) +process_dynamic_section (FILE * file) { - Elf_Internal_Dyn *entry; + Elf_Internal_Dyn * entry; if (dynamic_size == 0) { @@ -5932,8 +6061,9 @@ process_dynamic_section (FILE *file) continue; } - dynamic_strings = get_data (NULL, file, offset, 1, str_tab_len, - _("dynamic string table")); + dynamic_strings = (char *) get_data (NULL, file, offset, 1, + str_tab_len, + _("dynamic string table")); dynamic_strings_length = str_tab_len; break; } @@ -5963,16 +6093,18 @@ process_dynamic_section (FILE *file) if (dynamic_syminfo_offset != 0 && syminsz != 0) { - Elf_External_Syminfo *extsyminfo, *extsym; - Elf_Internal_Syminfo *syminfo; + Elf_External_Syminfo * extsyminfo; + Elf_External_Syminfo * extsym; + Elf_Internal_Syminfo * syminfo; /* There is a syminfo section. Read the data. */ - extsyminfo = get_data (NULL, file, dynamic_syminfo_offset, 1, - syminsz, _("symbol information")); + extsyminfo = (Elf_External_Syminfo *) + get_data (NULL, file, dynamic_syminfo_offset, 1, syminsz, + _("symbol information")); if (!extsyminfo) return 0; - dynamic_syminfo = malloc (syminsz); + dynamic_syminfo = (Elf_Internal_Syminfo *) malloc (syminsz); if (dynamic_syminfo == NULL) { error (_("Out of memory\n")); @@ -6004,7 +6136,7 @@ process_dynamic_section (FILE *file) { if (do_dynamic) { - const char *dtype; + const char * dtype; putchar (' '); print_vma (entry->d_tag, FULL_HEX); @@ -6233,7 +6365,7 @@ process_dynamic_section (FILE *file) if (do_dynamic) { - char *name; + char * name; if (VALID_DYNAMIC_NAME (entry->d_un.d_val)) name = GET_DYNAMIC_NAME (entry->d_un.d_val); @@ -6319,7 +6451,7 @@ process_dynamic_section (FILE *file) if (entry->d_tag == DT_USED && VALID_DYNAMIC_NAME (entry->d_un.d_val)) { - char *name = GET_DYNAMIC_NAME (entry->d_un.d_val); + char * name = GET_DYNAMIC_NAME (entry->d_un.d_val); if (*name) { @@ -6342,7 +6474,7 @@ process_dynamic_section (FILE *file) case DT_GNU_PRELINKED: if (do_dynamic) { - struct tm *tmp; + struct tm * tmp; time_t time = entry->d_un.d_val; tmp = gmtime (&time); @@ -6421,10 +6553,11 @@ get_ver_flags (unsigned int flags) } /* Display the contents of the version sections. */ + static int -process_version_sections (FILE *file) +process_version_sections (FILE * file) { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; unsigned i; int found = 0; @@ -6439,42 +6572,45 @@ process_version_sections (FILE *file) { case SHT_GNU_verdef: { - Elf_External_Verdef *edefs; + Elf_External_Verdef * edefs; unsigned int idx; unsigned int cnt; + char * endbuf; found = 1; printf - (_("\nVersion definition section '%s' contains %ld entries:\n"), + (_("\nVersion definition section '%s' contains %u entries:\n"), SECTION_NAME (section), section->sh_info); printf (_(" Addr: 0x")); printf_vma (section->sh_addr); - printf (_(" Offset: %#08lx Link: %lx (%s)\n"), + printf (_(" Offset: %#08lx Link: %u (%s)\n"), (unsigned long) section->sh_offset, section->sh_link, - SECTION_HEADER_INDEX (section->sh_link) - < elf_header.e_shnum - ? SECTION_NAME (SECTION_HEADER (section->sh_link)) + section->sh_link < elf_header.e_shnum + ? SECTION_NAME (section_headers + section->sh_link) : ""); - edefs = get_data (NULL, file, section->sh_offset, 1, - section->sh_size, - _("version definition section")); + edefs = (Elf_External_Verdef *) + get_data (NULL, file, section->sh_offset, 1,section->sh_size, + _("version definition section")); + endbuf = (char *) edefs + section->sh_size; if (!edefs) break; for (idx = cnt = 0; cnt < section->sh_info; ++cnt) { - char *vstart; - Elf_External_Verdef *edef; + char * vstart; + Elf_External_Verdef * edef; Elf_Internal_Verdef ent; - Elf_External_Verdaux *eaux; + Elf_External_Verdaux * eaux; Elf_Internal_Verdaux aux; int j; int isum; vstart = ((char *) edefs) + idx; + if (vstart + sizeof (*edef) > endbuf) + break; edef = (Elf_External_Verdef *) vstart; @@ -6512,6 +6648,8 @@ process_version_sections (FILE *file) vstart += aux.vda_next; eaux = (Elf_External_Verdaux *) vstart; + if (vstart + sizeof (*eaux) > endbuf) + break; aux.vda_name = BYTE_GET (eaux->vda_name); aux.vda_next = BYTE_GET (eaux->vda_next); @@ -6523,9 +6661,13 @@ process_version_sections (FILE *file) printf (_(" %#06x: Parent %d, name index: %ld\n"), isum, j, aux.vda_name); } + if (j < ent.vd_cnt) + printf (_(" Version def aux past end of section\n")); idx += ent.vd_next; } + if (cnt < section->sh_info) + printf (_(" Version definition past end of section\n")); free (edefs); } @@ -6533,39 +6675,43 @@ process_version_sections (FILE *file) case SHT_GNU_verneed: { - Elf_External_Verneed *eneed; + Elf_External_Verneed * eneed; unsigned int idx; unsigned int cnt; + char * endbuf; found = 1; - printf (_("\nVersion needs section '%s' contains %ld entries:\n"), + printf (_("\nVersion needs section '%s' contains %u entries:\n"), SECTION_NAME (section), section->sh_info); printf (_(" Addr: 0x")); printf_vma (section->sh_addr); - printf (_(" Offset: %#08lx Link to section: %ld (%s)\n"), + printf (_(" Offset: %#08lx Link: %u (%s)\n"), (unsigned long) section->sh_offset, section->sh_link, - SECTION_HEADER_INDEX (section->sh_link) - < elf_header.e_shnum - ? SECTION_NAME (SECTION_HEADER (section->sh_link)) + section->sh_link < elf_header.e_shnum + ? SECTION_NAME (section_headers + section->sh_link) : ""); - eneed = get_data (NULL, file, section->sh_offset, 1, - section->sh_size, - _("version need section")); + eneed = (Elf_External_Verneed *) get_data (NULL, file, + section->sh_offset, 1, + section->sh_size, + _("version need section")); + endbuf = (char *) eneed + section->sh_size; if (!eneed) break; for (idx = cnt = 0; cnt < section->sh_info; ++cnt) { - Elf_External_Verneed *entry; + Elf_External_Verneed * entry; Elf_Internal_Verneed ent; int j; int isum; - char *vstart; + char * vstart; vstart = ((char *) eneed) + idx; + if (vstart + sizeof (*entry) > endbuf) + break; entry = (Elf_External_Verneed *) vstart; @@ -6588,9 +6734,11 @@ process_version_sections (FILE *file) for (j = 0, isum = idx + ent.vn_aux; j < ent.vn_cnt; ++j) { - Elf_External_Vernaux *eaux; + Elf_External_Vernaux * eaux; Elf_Internal_Vernaux aux; + if (vstart + sizeof (*eaux) > endbuf) + break; eaux = (Elf_External_Vernaux *) vstart; aux.vna_hash = BYTE_GET (eaux->vna_hash); @@ -6612,9 +6760,13 @@ process_version_sections (FILE *file) isum += aux.vna_next; vstart += aux.vna_next; } + if (j < ent.vn_cnt) + printf (_(" Version need aux past end of section\n")); idx += ent.vn_next; } + if (cnt < section->sh_info) + printf (_(" Version need past end of section\n")); free (eneed); } @@ -6622,34 +6774,34 @@ process_version_sections (FILE *file) case SHT_GNU_versym: { - Elf_Internal_Shdr *link_section; + Elf_Internal_Shdr * link_section; int total; int cnt; - unsigned char *edata; - unsigned short *data; - char *strtab; - Elf_Internal_Sym *symbols; - Elf_Internal_Shdr *string_sec; + unsigned char * edata; + unsigned short * data; + char * strtab; + Elf_Internal_Sym * symbols; + Elf_Internal_Shdr * string_sec; long off; - if (SECTION_HEADER_INDEX (section->sh_link) >= elf_header.e_shnum) + if (section->sh_link >= elf_header.e_shnum) break; - link_section = SECTION_HEADER (section->sh_link); + link_section = section_headers + section->sh_link; total = section->sh_size / sizeof (Elf_External_Versym); - if (SECTION_HEADER_INDEX (link_section->sh_link) - >= elf_header.e_shnum) + if (link_section->sh_link >= elf_header.e_shnum) break; found = 1; symbols = GET_ELF_SYMBOLS (file, link_section); - string_sec = SECTION_HEADER (link_section->sh_link); + string_sec = section_headers + link_section->sh_link; - strtab = get_data (NULL, file, string_sec->sh_offset, 1, - string_sec->sh_size, _("version string table")); + strtab = (char *) get_data (NULL, file, string_sec->sh_offset, 1, + string_sec->sh_size, + _("version string table")); if (!strtab) break; @@ -6658,22 +6810,23 @@ process_version_sections (FILE *file) printf (_(" Addr: ")); printf_vma (section->sh_addr); - printf (_(" Offset: %#08lx Link: %lx (%s)\n"), + printf (_(" Offset: %#08lx Link: %u (%s)\n"), (unsigned long) section->sh_offset, section->sh_link, SECTION_NAME (link_section)); off = offset_from_vma (file, version_info[DT_VERSIONTAGIDX (DT_VERSYM)], total * sizeof (short)); - edata = get_data (NULL, file, off, total, sizeof (short), - _("version symbol data")); + edata = (unsigned char *) get_data (NULL, file, off, total, + sizeof (short), + _("version symbol data")); if (!edata) { free (strtab); break; } - data = cmalloc (total, sizeof (short)); + data = (short unsigned int *) cmalloc (total, sizeof (short)); for (cnt = total; cnt --;) data[cnt] = byte_get (edata + cnt * sizeof (short), @@ -6685,7 +6838,7 @@ process_version_sections (FILE *file) { int j, nn; int check_def, check_need; - char *name; + char * name; printf (" %03x:", cnt); @@ -6706,9 +6859,8 @@ process_version_sections (FILE *file) check_def = 1; check_need = 1; - if (SECTION_HEADER_INDEX (symbols[cnt + j].st_shndx) - >= elf_header.e_shnum - || SECTION_HEADER (symbols[cnt + j].st_shndx)->sh_type + if (symbols[cnt + j].st_shndx >= elf_header.e_shnum + || section_headers[symbols[cnt + j].st_shndx].sh_type != SHT_NOBITS) { if (symbols[cnt + j].st_shndx == SHN_UNDEF) @@ -6759,7 +6911,10 @@ process_version_sections (FILE *file) { ivna.vna_name = BYTE_GET (evna.vna_name); - name = strtab + ivna.vna_name; + if (ivna.vna_name >= string_sec->sh_size) + name = _("*invalid*"); + else + name = strtab + ivna.vna_name; nn += printf ("(%s%-*s", name, 12 - (int) strlen (name), @@ -6811,7 +6966,10 @@ process_version_sections (FILE *file) ivda.vda_name = BYTE_GET (evda.vda_name); - name = strtab + ivda.vda_name; + if (ivda.vda_name >= string_sec->sh_size) + name = _("*invalid*"); + else + name = strtab + ivda.vda_name; nn += printf ("(%s%-*s", name, 12 - (int) strlen (name), @@ -6858,7 +7016,14 @@ get_symbol_binding (unsigned int binding) snprintf (buff, sizeof (buff), _(": %d"), binding); else if (binding >= STB_LOOS && binding <= STB_HIOS) - snprintf (buff, sizeof (buff), _(": %d"), binding); + { + if (binding == STB_GNU_UNIQUE + && (elf_header.e_ident[EI_OSABI] == ELFOSABI_LINUX + /* GNU/Linux is still using the default value 0. */ + || elf_header.e_ident[EI_OSABI] == ELFOSABI_NONE)) + return "UNIQUE"; + snprintf (buff, sizeof (buff), _(": %d"), binding); + } else snprintf (buff, sizeof (buff), _(": %d"), binding); return buff; @@ -6905,6 +7070,12 @@ get_symbol_type (unsigned int type) return "HP_STUB"; } + if (type == STT_GNU_IFUNC + && (elf_header.e_ident[EI_OSABI] == ELFOSABI_LINUX + /* GNU/Linux is still using the default value 0. */ + || elf_header.e_ident[EI_OSABI] == ELFOSABI_NONE)) + return "IFUNC"; + snprintf (buff, sizeof (buff), _(": %d"), type); } else @@ -6933,6 +7104,8 @@ get_mips_symbol_other (unsigned int other) { case STO_OPTIONAL: return "OPTIONAL"; case STO_MIPS16: return "MIPS16"; + case STO_MIPS_PLT: return "MIPS PLT"; + case STO_MIPS_PIC: return "MIPS PIC"; default: return NULL; } } @@ -6976,7 +7149,8 @@ get_symbol_index_type (unsigned int type) && elf_header.e_machine == EM_IA_64 && elf_header.e_ident[EI_OSABI] == ELFOSABI_HPUX) return "ANSI_COM"; - else if (elf_header.e_machine == EM_X86_64 + else if ((elf_header.e_machine == EM_X86_64 + || elf_header.e_machine == EM_L1OM) && type == SHN_X86_64_LCOMMON) return "LARGE_COM"; else if (type == SHN_MIPS_SCOMMON @@ -6986,11 +7160,11 @@ get_symbol_index_type (unsigned int type) && elf_header.e_machine == EM_MIPS) return "SUND"; else if (type >= SHN_LOPROC && type <= SHN_HIPROC) - sprintf (buff, "PRC[0x%04x]", type); + sprintf (buff, "PRC[0x%04x]", type & 0xffff); else if (type >= SHN_LOOS && type <= SHN_HIOS) - sprintf (buff, "OS [0x%04x]", type); - else if (type >= SHN_LORESERVE && type <= SHN_HIRESERVE) - sprintf (buff, "RSV[0x%04x]", type); + sprintf (buff, "OS [0x%04x]", type & 0xffff); + else if (type >= SHN_LORESERVE) + sprintf (buff, "RSV[0x%04x]", type & 0xffff); else sprintf (buff, "%3d", type); break; @@ -7000,12 +7174,12 @@ get_symbol_index_type (unsigned int type) } static bfd_vma * -get_dynamic_data (FILE *file, unsigned int number, unsigned int ent_size) +get_dynamic_data (FILE * file, unsigned int number, unsigned int ent_size) { - unsigned char *e_data; - bfd_vma *i_data; + unsigned char * e_data; + bfd_vma * i_data; - e_data = cmalloc (number, ent_size); + e_data = (unsigned char *) cmalloc (number, ent_size); if (e_data == NULL) { @@ -7019,7 +7193,7 @@ get_dynamic_data (FILE *file, unsigned int number, unsigned int ent_size) return NULL; } - i_data = cmalloc (number, sizeof (*i_data)); + i_data = (bfd_vma *) cmalloc (number, sizeof (*i_data)); if (i_data == NULL) { @@ -7036,24 +7210,59 @@ get_dynamic_data (FILE *file, unsigned int number, unsigned int ent_size) return i_data; } +static void +print_dynamic_symbol (bfd_vma si, unsigned long hn) +{ + Elf_Internal_Sym * psym; + int n; + + psym = dynamic_symbols + si; + + n = print_vma (si, DEC_5); + if (n < 5) + fputs (" " + n, stdout); + printf (" %3lu: ", hn); + print_vma (psym->st_value, LONG_HEX); + putchar (' '); + print_vma (psym->st_size, DEC_5); + + printf (" %6s", get_symbol_type (ELF_ST_TYPE (psym->st_info))); + printf (" %6s", get_symbol_binding (ELF_ST_BIND (psym->st_info))); + printf (" %3s", get_symbol_visibility (ELF_ST_VISIBILITY (psym->st_other))); + /* Check to see if any other bits in the st_other field are set. + Note - displaying this information disrupts the layout of the + table being generated, but for the moment this case is very + rare. */ + if (psym->st_other ^ ELF_ST_VISIBILITY (psym->st_other)) + printf (" [%s] ", get_symbol_other (psym->st_other ^ ELF_ST_VISIBILITY (psym->st_other))); + printf (" %3.3s ", get_symbol_index_type (psym->st_shndx)); + if (VALID_DYNAMIC_NAME (psym->st_name)) + print_symbol (25, GET_DYNAMIC_NAME (psym->st_name)); + else + printf (" ", psym->st_name); + putchar ('\n'); +} + /* Dump the symbol table. */ static int -process_symbol_table (FILE *file) +process_symbol_table (FILE * file) { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; bfd_vma nbuckets = 0; bfd_vma nchains = 0; - bfd_vma *buckets = NULL; - bfd_vma *chains = NULL; + bfd_vma * buckets = NULL; + bfd_vma * chains = NULL; bfd_vma ngnubuckets = 0; - bfd_vma *gnubuckets = NULL; - bfd_vma *gnuchains = NULL; + bfd_vma * gnubuckets = NULL; + bfd_vma * gnuchains = NULL; + bfd_vma gnusymidx = 0; if (! do_syms && !do_histogram) return 1; - if (dynamic_info[DT_HASH] && ((do_using_dynamic && dynamic_strings != NULL) - || do_histogram)) + if (dynamic_info[DT_HASH] + && (do_histogram + || (do_using_dynamic && dynamic_strings != NULL))) { unsigned char nb[8]; unsigned char nc[8]; @@ -7072,19 +7281,19 @@ process_symbol_table (FILE *file) SEEK_SET)) { error (_("Unable to seek to start of dynamic information\n")); - return 0; + goto no_hash; } if (fread (nb, hash_ent_size, 1, file) != 1) { error (_("Failed to read in number of buckets\n")); - return 0; + goto no_hash; } if (fread (nc, hash_ent_size, 1, file) != 1) { error (_("Failed to read in number of chains\n")); - return 0; + goto no_hash; } nbuckets = byte_get (nb, hash_ent_size); @@ -7093,58 +7302,178 @@ process_symbol_table (FILE *file) buckets = get_dynamic_data (file, nbuckets, hash_ent_size); chains = get_dynamic_data (file, nchains, hash_ent_size); + no_hash: if (buckets == NULL || chains == NULL) - return 0; + { + if (do_using_dynamic) + return 0; + free (buckets); + free (chains); + buckets = NULL; + chains = NULL; + nbuckets = 0; + nchains = 0; + } } - if (do_syms - && dynamic_info[DT_HASH] && do_using_dynamic && dynamic_strings != NULL) + if (dynamic_info_DT_GNU_HASH + && (do_histogram + || (do_using_dynamic && dynamic_strings != NULL))) { - unsigned long hn; - bfd_vma si; + unsigned char nb[16]; + bfd_vma i, maxchain = 0xffffffff, bitmaskwords; + 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")); + goto no_gnu_hash; + } + + if (fread (nb, 16, 1, file) != 1) + { + error (_("Failed to read in number of buckets\n")); + goto no_gnu_hash; + } - printf (_("\nSymbol table for image:\n")); + ngnubuckets = byte_get (nb, 4); + gnusymidx = byte_get (nb + 4, 4); + bitmaskwords = byte_get (nb + 8, 4); + buckets_vma = dynamic_info_DT_GNU_HASH + 16; if (is_32bit_elf) - printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + buckets_vma += bitmaskwords * 4; else - printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + buckets_vma += bitmaskwords * 8; - for (hn = 0; hn < nbuckets; hn++) + if (fseek (file, + (archive_file_offset + + offset_from_vma (file, buckets_vma, 4)), + SEEK_SET)) { - if (! buckets[hn]) - continue; + error (_("Unable to seek to start of dynamic information\n")); + goto no_gnu_hash; + } + + gnubuckets = get_dynamic_data (file, ngnubuckets, 4); + + if (gnubuckets == NULL) + goto no_gnu_hash; + + for (i = 0; i < ngnubuckets; i++) + if (gnubuckets[i] != 0) + { + if (gnubuckets[i] < gnusymidx) + return 0; + + if (maxchain == 0xffffffff || gnubuckets[i] > maxchain) + maxchain = gnubuckets[i]; + } + + if (maxchain == 0xffffffff) + goto no_gnu_hash; + + maxchain -= gnusymidx; + + 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")); + goto no_gnu_hash; + } - for (si = buckets[hn]; si < nchains && si > 0; si = chains[si]) + do + { + if (fread (nb, 4, 1, file) != 1) { - Elf_Internal_Sym *psym; - int n; + error (_("Failed to determine last chain length\n")); + goto no_gnu_hash; + } - psym = dynamic_symbols + si; + if (maxchain + 1 == 0) + goto no_gnu_hash; - n = print_vma (si, DEC_5); - if (n < 5) - fputs (" " + n, stdout); - printf (" %3lu: ", hn); - print_vma (psym->st_value, LONG_HEX); - putchar (' '); - print_vma (psym->st_size, DEC_5); + ++maxchain; + } + while ((byte_get (nb, 4) & 1) == 0); - printf (" %6s", get_symbol_type (ELF_ST_TYPE (psym->st_info))); - printf (" %6s", get_symbol_binding (ELF_ST_BIND (psym->st_info))); - printf (" %3s", get_symbol_visibility (ELF_ST_VISIBILITY (psym->st_other))); - /* Check to see if any other bits in the st_other field are set. - Note - displaying this information disrupts the layout of the - table being generated, but for the moment this case is very rare. */ - if (psym->st_other ^ ELF_ST_VISIBILITY (psym->st_other)) - printf (" [%s] ", get_symbol_other (psym->st_other ^ ELF_ST_VISIBILITY (psym->st_other))); - printf (" %3.3s ", get_symbol_index_type (psym->st_shndx)); - if (VALID_DYNAMIC_NAME (psym->st_name)) - print_symbol (25, GET_DYNAMIC_NAME (psym->st_name)); - else - printf (" ", psym->st_name); - putchar ('\n'); + 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")); + goto no_gnu_hash; + } + + gnuchains = get_dynamic_data (file, maxchain, 4); + + no_gnu_hash: + if (gnuchains == NULL) + { + free (gnubuckets); + gnubuckets = NULL; + ngnubuckets = 0; + if (do_using_dynamic) + return 0; + } + } + + if ((dynamic_info[DT_HASH] || dynamic_info_DT_GNU_HASH) + && do_syms + && do_using_dynamic + && dynamic_strings != NULL) + { + unsigned long hn; + + if (dynamic_info[DT_HASH]) + { + bfd_vma si; + + printf (_("\nSymbol table for image:\n")); + if (is_32bit_elf) + printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + else + printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + + for (hn = 0; hn < nbuckets; hn++) + { + if (! buckets[hn]) + continue; + + for (si = buckets[hn]; si < nchains && si > 0; si = chains[si]) + print_dynamic_symbol (si, hn); } } + + if (dynamic_info_DT_GNU_HASH) + { + printf (_("\nSymbol table of `.gnu.hash' for image:\n")); + if (is_32bit_elf) + printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + else + printf (_(" Num Buc: Value Size Type Bind Vis Ndx Name\n")); + + for (hn = 0; hn < ngnubuckets; ++hn) + if (gnubuckets[hn] != 0) + { + bfd_vma si = gnubuckets[hn]; + bfd_vma off = si - gnusymidx; + + do + { + print_dynamic_symbol (si, hn); + si++; + } + while ((gnuchains[off++] & 1) == 0); + } + } } else if (do_syms && !do_using_dynamic) { @@ -7155,11 +7484,10 @@ process_symbol_table (FILE *file) i++, section++) { unsigned int si; - char *strtab = NULL; + char * strtab = NULL; unsigned long int strtab_size = 0; - Elf_Internal_Sym *symtab; - Elf_Internal_Sym *psym; - + Elf_Internal_Sym * symtab; + Elf_Internal_Sym * psym; if ( section->sh_type != SHT_SYMTAB && section->sh_type != SHT_DYNSYM) @@ -7182,14 +7510,15 @@ process_symbol_table (FILE *file) strtab = string_table; strtab_size = string_table_length; } - else if (SECTION_HEADER_INDEX (section->sh_link) < elf_header.e_shnum) + else if (section->sh_link < elf_header.e_shnum) { - Elf_Internal_Shdr *string_sec; + Elf_Internal_Shdr * string_sec; - string_sec = SECTION_HEADER (section->sh_link); + string_sec = section_headers + section->sh_link; - strtab = get_data (NULL, file, string_sec->sh_offset, - 1, string_sec->sh_size, _("string table")); + strtab = (char *) get_data (NULL, file, string_sec->sh_offset, + 1, string_sec->sh_size, + _("string table")); strtab_size = strtab != NULL ? string_sec->sh_size : 0; } @@ -7231,9 +7560,8 @@ process_symbol_table (FILE *file) vers_data = byte_get (data, 2); - is_nobits = (SECTION_HEADER_INDEX (psym->st_shndx) - < elf_header.e_shnum - && SECTION_HEADER (psym->st_shndx)->sh_type + is_nobits = (psym->st_shndx < elf_header.e_shnum + && section_headers[psym->st_shndx].sh_type == SHT_NOBITS); check_def = (psym->st_shndx != SHN_UNDEF); @@ -7365,8 +7693,8 @@ process_symbol_table (FILE *file) if (do_histogram && buckets != NULL) { - unsigned long *lengths; - unsigned long *counts; + unsigned long * lengths; + unsigned long * counts; unsigned long hn; bfd_vma si; unsigned long maxlength = 0; @@ -7377,7 +7705,7 @@ process_symbol_table (FILE *file) (unsigned long) nbuckets); printf (_(" Length Number %% of total Coverage\n")); - lengths = calloc (nbuckets, sizeof (*lengths)); + lengths = (unsigned long *) calloc (nbuckets, sizeof (*lengths)); if (lengths == NULL) { error (_("Out of memory\n")); @@ -7393,7 +7721,7 @@ process_symbol_table (FILE *file) } } - counts = calloc (maxlength + 1, sizeof (*counts)); + counts = (unsigned long *) calloc (maxlength + 1, sizeof (*counts)); if (counts == NULL) { error (_("Out of memory\n")); @@ -7427,115 +7755,19 @@ process_symbol_table (FILE *file) free (chains); } - if (do_histogram && dynamic_info_DT_GNU_HASH) + if (do_histogram && gnubuckets != NULL) { - unsigned char nb[16]; - bfd_vma i, maxchain = 0xffffffff, symidx, bitmaskwords; - unsigned long *lengths; - unsigned long *counts; + 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)) + lengths = (unsigned long *) calloc (ngnubuckets, sizeof (*lengths)); + if (lengths == NULL) { - 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")); + error (_("Out of memory\n")); return 0; } @@ -7548,7 +7780,7 @@ process_symbol_table (FILE *file) { bfd_vma off, length = 1; - for (off = gnubuckets[hn] - symidx; + for (off = gnubuckets[hn] - gnusymidx; (gnuchains[off] & 1) == 0; ++off) ++length; lengths[hn] = length; @@ -7557,7 +7789,7 @@ process_symbol_table (FILE *file) nsyms += length; } - counts = calloc (maxlength + 1, sizeof (*counts)); + counts = (unsigned long *) calloc (maxlength + 1, sizeof (*counts)); if (counts == NULL) { error (_("Out of memory\n")); @@ -7590,75 +7822,629 @@ process_symbol_table (FILE *file) return 1; } -static int -process_syminfo (FILE *file ATTRIBUTE_UNUSED) -{ - unsigned int i; +static int +process_syminfo (FILE * file ATTRIBUTE_UNUSED) +{ + unsigned int i; + + if (dynamic_syminfo == NULL + || !do_dynamic) + /* No syminfo, this is ok. */ + return 1; + + /* There better should be a dynamic symbol section. */ + if (dynamic_symbols == NULL || dynamic_strings == NULL) + return 0; + + if (dynamic_addr) + printf (_("\nDynamic info segment at offset 0x%lx contains %d entries:\n"), + dynamic_syminfo_offset, dynamic_syminfo_nent); + + printf (_(" Num: Name BoundTo Flags\n")); + for (i = 0; i < dynamic_syminfo_nent; ++i) + { + unsigned short int flags = dynamic_syminfo[i].si_flags; + + printf ("%4d: ", i); + if (VALID_DYNAMIC_NAME (dynamic_symbols[i].st_name)) + print_symbol (30, GET_DYNAMIC_NAME (dynamic_symbols[i].st_name)); + else + printf ("", dynamic_symbols[i].st_name); + putchar (' '); + + switch (dynamic_syminfo[i].si_boundto) + { + case SYMINFO_BT_SELF: + fputs ("SELF ", stdout); + break; + case SYMINFO_BT_PARENT: + fputs ("PARENT ", stdout); + break; + default: + if (dynamic_syminfo[i].si_boundto > 0 + && dynamic_syminfo[i].si_boundto < dynamic_nent + && VALID_DYNAMIC_NAME (dynamic_section[dynamic_syminfo[i].si_boundto].d_un.d_val)) + { + print_symbol (10, GET_DYNAMIC_NAME (dynamic_section[dynamic_syminfo[i].si_boundto].d_un.d_val)); + putchar (' ' ); + } + else + printf ("%-10d ", dynamic_syminfo[i].si_boundto); + break; + } + + if (flags & SYMINFO_FLG_DIRECT) + printf (" DIRECT"); + if (flags & SYMINFO_FLG_PASSTHRU) + printf (" PASSTHRU"); + if (flags & SYMINFO_FLG_COPY) + printf (" COPY"); + if (flags & SYMINFO_FLG_LAZYLOAD) + printf (" LAZYLOAD"); + + puts (""); + } + + return 1; +} + +/* Check to see if the given reloc needs to be handled in a target specific + manner. If so then process the reloc and return TRUE otherwise return + FALSE. */ + +static bfd_boolean +target_specific_reloc_handling (Elf_Internal_Rela * reloc, + unsigned char * start, + Elf_Internal_Sym * symtab) +{ + unsigned int reloc_type = get_reloc_type (reloc->r_info); + + switch (elf_header.e_machine) + { + case EM_MN10300: + case EM_CYGNUS_MN10300: + { + static Elf_Internal_Sym * saved_sym = NULL; + + switch (reloc_type) + { + case 34: /* R_MN10300_ALIGN */ + return TRUE; + case 33: /* R_MN10300_SYM_DIFF */ + saved_sym = symtab + get_reloc_symindex (reloc->r_info); + return TRUE; + case 1: /* R_MN10300_32 */ + case 2: /* R_MN10300_16 */ + if (saved_sym != NULL) + { + bfd_vma value; + + value = reloc->r_addend + + (symtab[get_reloc_symindex (reloc->r_info)].st_value + - saved_sym->st_value); + + byte_put (start + reloc->r_offset, value, reloc_type == 1 ? 4 : 2); + + saved_sym = NULL; + return TRUE; + } + break; + default: + if (saved_sym != NULL) + error (_("Unhandled MN10300 reloc type found after SYM_DIFF reloc")); + break; + } + break; + } + } + + return FALSE; +} + +/* Returns TRUE iff RELOC_TYPE is a 32-bit absolute RELA relocation used in + DWARF debug sections. This is a target specific test. Note - we do not + go through the whole including-target-headers-multiple-times route, (as + we have already done with ) because this would become very + messy and even then this function would have to contain target specific + information (the names of the relocs instead of their numeric values). + FIXME: This is not the correct way to solve this problem. The proper way + is to have target specific reloc sizing and typing functions created by + the reloc-macros.h header, in the same way that it already creates the + reloc naming functions. */ + +static bfd_boolean +is_32bit_abs_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_386: + case EM_486: + return reloc_type == 1; /* R_386_32. */ + case EM_68K: + return reloc_type == 1; /* R_68K_32. */ + case EM_860: + return reloc_type == 1; /* R_860_32. */ + case EM_ALPHA: + return reloc_type == 1; /* XXX Is this right ? */ + case EM_ARC: + return reloc_type == 1; /* R_ARC_32. */ + case EM_ARM: + return reloc_type == 2; /* R_ARM_ABS32 */ + case EM_AVR_OLD: + case EM_AVR: + return reloc_type == 1; + case EM_BLACKFIN: + return reloc_type == 0x12; /* R_byte4_data. */ + case EM_CRIS: + return reloc_type == 3; /* R_CRIS_32. */ + case EM_CR16: + case EM_CR16_OLD: + return reloc_type == 3; /* R_CR16_NUM32. */ + case EM_CRX: + return reloc_type == 15; /* R_CRX_NUM32. */ + case EM_CYGNUS_FRV: + return reloc_type == 1; + case EM_CYGNUS_D10V: + case EM_D10V: + return reloc_type == 6; /* R_D10V_32. */ + case EM_CYGNUS_D30V: + case EM_D30V: + return reloc_type == 12; /* R_D30V_32_NORMAL. */ + case EM_DLX: + return reloc_type == 3; /* R_DLX_RELOC_32. */ + case EM_CYGNUS_FR30: + case EM_FR30: + return reloc_type == 3; /* R_FR30_32. */ + case EM_H8S: + case EM_H8_300: + case EM_H8_300H: + return reloc_type == 1; /* R_H8_DIR32. */ + case EM_IA_64: + return reloc_type == 0x65; /* R_IA64_SECREL32LSB. */ + case EM_IP2K_OLD: + case EM_IP2K: + return reloc_type == 2; /* R_IP2K_32. */ + case EM_IQ2000: + return reloc_type == 2; /* R_IQ2000_32. */ + case EM_LATTICEMICO32: + return reloc_type == 3; /* R_LM32_32. */ + case EM_M32C_OLD: + case EM_M32C: + return reloc_type == 3; /* R_M32C_32. */ + case EM_M32R: + return reloc_type == 34; /* R_M32R_32_RELA. */ + case EM_MCORE: + return reloc_type == 1; /* R_MCORE_ADDR32. */ + case EM_CYGNUS_MEP: + return reloc_type == 4; /* R_MEP_32. */ + case EM_MIPS: + return reloc_type == 2; /* R_MIPS_32. */ + case EM_MMIX: + return reloc_type == 4; /* R_MMIX_32. */ + case EM_CYGNUS_MN10200: + case EM_MN10200: + return reloc_type == 1; /* R_MN10200_32. */ + case EM_CYGNUS_MN10300: + case EM_MN10300: + return reloc_type == 1; /* R_MN10300_32. */ + case EM_MSP430_OLD: + case EM_MSP430: + return reloc_type == 1; /* R_MSP43_32. */ + case EM_MT: + return reloc_type == 2; /* R_MT_32. */ + case EM_ALTERA_NIOS2: + case EM_NIOS32: + return reloc_type == 1; /* R_NIOS_32. */ + case EM_OPENRISC: + case EM_OR32: + return reloc_type == 1; /* R_OR32_32. */ + case EM_PARISC: + return (reloc_type == 1 /* R_PARISC_DIR32. */ + || reloc_type == 41); /* R_PARISC_SECREL32. */ + case EM_PJ: + case EM_PJ_OLD: + return reloc_type == 1; /* R_PJ_DATA_DIR32. */ + case EM_PPC64: + return reloc_type == 1; /* R_PPC64_ADDR32. */ + case EM_PPC: + return reloc_type == 1; /* R_PPC_ADDR32. */ + case EM_S370: + return reloc_type == 1; /* R_I370_ADDR31. */ + case EM_S390_OLD: + case EM_S390: + return reloc_type == 4; /* R_S390_32. */ + case EM_SCORE: + return reloc_type == 8; /* R_SCORE_ABS32. */ + case EM_SH: + return reloc_type == 1; /* R_SH_DIR32. */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + return reloc_type == 3 /* R_SPARC_32. */ + || reloc_type == 23; /* R_SPARC_UA32. */ + case EM_SPU: + return reloc_type == 6; /* R_SPU_ADDR32 */ + case EM_CYGNUS_V850: + case EM_V850: + return reloc_type == 6; /* R_V850_ABS32. */ + case EM_VAX: + return reloc_type == 1; /* R_VAX_32. */ + case EM_X86_64: + case EM_L1OM: + return reloc_type == 10; /* R_X86_64_32. */ + case EM_XSTORMY16: + return reloc_type == 1; /* R_XSTROMY16_32. */ + case EM_XTENSA_OLD: + case EM_XTENSA: + return reloc_type == 1; /* R_XTENSA_32. */ + + default: + error (_("Missing knowledge of 32-bit reloc types used in DWARF sections of machine number %d\n"), + elf_header.e_machine); + abort (); + } +} + +/* Like is_32bit_abs_reloc except that it returns TRUE iff RELOC_TYPE is + a 32-bit pc-relative RELA relocation used in DWARF debug sections. */ + +static bfd_boolean +is_32bit_pcrel_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_386: + case EM_486: + return reloc_type == 2; /* R_386_PC32. */ + case EM_68K: + return reloc_type == 4; /* R_68K_PC32. */ + case EM_ALPHA: + return reloc_type == 10; /* R_ALPHA_SREL32. */ + case EM_ARM: + return reloc_type == 3; /* R_ARM_REL32 */ + case EM_PARISC: + return reloc_type == 9; /* R_PARISC_PCREL32. */ + case EM_PPC: + return reloc_type == 26; /* R_PPC_REL32. */ + case EM_PPC64: + return reloc_type == 26; /* R_PPC64_REL32. */ + case EM_S390_OLD: + case EM_S390: + return reloc_type == 5; /* R_390_PC32. */ + case EM_SH: + return reloc_type == 2; /* R_SH_REL32. */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + return reloc_type == 6; /* R_SPARC_DISP32. */ + case EM_SPU: + return reloc_type == 13; /* R_SPU_REL32. */ + case EM_X86_64: + case EM_L1OM: + return reloc_type == 2; /* R_X86_64_PC32. */ + case EM_XTENSA_OLD: + case EM_XTENSA: + return reloc_type == 14; /* R_XTENSA_32_PCREL. */ + default: + /* Do not abort or issue an error message here. Not all targets use + pc-relative 32-bit relocs in their DWARF debug information and we + have already tested for target coverage in is_32bit_abs_reloc. A + more helpful warning message will be generated by apply_relocations + anyway, so just return. */ + return FALSE; + } +} + +/* Like is_32bit_abs_reloc except that it returns TRUE iff RELOC_TYPE is + a 64-bit absolute RELA relocation used in DWARF debug sections. */ + +static bfd_boolean +is_64bit_abs_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_ALPHA: + return reloc_type == 2; /* R_ALPHA_REFQUAD. */ + case EM_IA_64: + return reloc_type == 0x27; /* R_IA64_DIR64LSB. */ + case EM_PARISC: + return reloc_type == 80; /* R_PARISC_DIR64. */ + case EM_PPC64: + return reloc_type == 38; /* R_PPC64_ADDR64. */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + return reloc_type == 54; /* R_SPARC_UA64. */ + case EM_X86_64: + case EM_L1OM: + return reloc_type == 1; /* R_X86_64_64. */ + case EM_S390_OLD: + case EM_S390: + return reloc_type == 22; /* R_S390_64 */ + case EM_MIPS: + return reloc_type == 18; /* R_MIPS_64 */ + default: + return FALSE; + } +} + +/* Like is_32bit_pcrel_reloc except that it returns TRUE iff RELOC_TYPE is + a 64-bit pc-relative RELA relocation used in DWARF debug sections. */ + +static bfd_boolean +is_64bit_pcrel_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_ALPHA: + return reloc_type == 11; /* R_ALPHA_SREL64 */ + case EM_IA_64: + return reloc_type == 0x4f; /* R_IA64_PCREL64LSB */ + case EM_PARISC: + return reloc_type == 72; /* R_PARISC_PCREL64 */ + case EM_PPC64: + return reloc_type == 44; /* R_PPC64_REL64 */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: + return reloc_type == 46; /* R_SPARC_DISP64 */ + case EM_X86_64: + case EM_L1OM: + return reloc_type == 24; /* R_X86_64_PC64 */ + case EM_S390_OLD: + case EM_S390: + return reloc_type == 23; /* R_S390_PC64 */ + default: + return FALSE; + } +} + +/* Like is_32bit_abs_reloc except that it returns TRUE iff RELOC_TYPE is + a 24-bit absolute RELA relocation used in DWARF debug sections. */ + +static bfd_boolean +is_24bit_abs_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_CYGNUS_MN10200: + case EM_MN10200: + return reloc_type == 4; /* R_MN10200_24. */ + default: + return FALSE; + } +} + +/* Like is_32bit_abs_reloc except that it returns TRUE iff RELOC_TYPE is + a 16-bit absolute RELA relocation used in DWARF debug sections. */ + +static bfd_boolean +is_16bit_abs_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_AVR_OLD: + case EM_AVR: + return reloc_type == 4; /* R_AVR_16. */ + case EM_CYGNUS_D10V: + case EM_D10V: + return reloc_type == 3; /* R_D10V_16. */ + case EM_H8S: + case EM_H8_300: + case EM_H8_300H: + return reloc_type == R_H8_DIR16; + case EM_IP2K_OLD: + case EM_IP2K: + return reloc_type == 1; /* R_IP2K_16. */ + case EM_M32C_OLD: + case EM_M32C: + return reloc_type == 1; /* R_M32C_16 */ + case EM_MSP430_OLD: + case EM_MSP430: + return reloc_type == 5; /* R_MSP430_16_BYTE. */ + case EM_ALTERA_NIOS2: + case EM_NIOS32: + return reloc_type == 9; /* R_NIOS_16. */ + default: + return FALSE; + } +} + +/* Returns TRUE iff RELOC_TYPE is a NONE relocation used for discarded + relocation entries (possibly formerly used for SHT_GROUP sections). */ + +static bfd_boolean +is_none_reloc (unsigned int reloc_type) +{ + switch (elf_header.e_machine) + { + case EM_68K: /* R_68K_NONE. */ + case EM_386: /* R_386_NONE. */ + case EM_SPARC32PLUS: + case EM_SPARCV9: + case EM_SPARC: /* R_SPARC_NONE. */ + case EM_MIPS: /* R_MIPS_NONE. */ + case EM_PARISC: /* R_PARISC_NONE. */ + case EM_ALPHA: /* R_ALPHA_NONE. */ + case EM_PPC: /* R_PPC_NONE. */ + case EM_PPC64: /* R_PPC64_NONE. */ + case EM_ARM: /* R_ARM_NONE. */ + case EM_IA_64: /* R_IA64_NONE. */ + case EM_SH: /* R_SH_NONE. */ + case EM_S390_OLD: + case EM_S390: /* R_390_NONE. */ + case EM_CRIS: /* R_CRIS_NONE. */ + case EM_X86_64: /* R_X86_64_NONE. */ + case EM_L1OM: /* R_X86_64_NONE. */ + case EM_MN10300: /* R_MN10300_NONE. */ + case EM_M32R: /* R_M32R_NONE. */ + return reloc_type == 0; + case EM_XTENSA_OLD: + case EM_XTENSA: + return (reloc_type == 0 /* R_XTENSA_NONE. */ + || reloc_type == 17 /* R_XTENSA_DIFF8. */ + || reloc_type == 18 /* R_XTENSA_DIFF16. */ + || reloc_type == 19 /* R_XTENSA_DIFF32. */); + } + return FALSE; +} + +/* Apply relocations to a section. + Note: So far support has been added only for those relocations + which can be found in debug sections. + FIXME: Add support for more relocations ? */ + +static void +apply_relocations (void * file, + Elf_Internal_Shdr * section, + unsigned char * start) +{ + Elf_Internal_Shdr * relsec; + unsigned char * end = start + section->sh_size; + + if (elf_header.e_type != ET_REL) + return; + + /* Find the reloc section associated with the section. */ + for (relsec = section_headers; + relsec < section_headers + elf_header.e_shnum; + ++relsec) + { + bfd_boolean is_rela; + unsigned long num_relocs; + Elf_Internal_Rela * relocs; + Elf_Internal_Rela * rp; + Elf_Internal_Shdr * symsec; + Elf_Internal_Sym * symtab; + Elf_Internal_Sym * sym; + + if ((relsec->sh_type != SHT_RELA && relsec->sh_type != SHT_REL) + || relsec->sh_info >= elf_header.e_shnum + || section_headers + relsec->sh_info != section + || relsec->sh_size == 0 + || relsec->sh_link >= elf_header.e_shnum) + continue; + + is_rela = relsec->sh_type == SHT_RELA; + + if (is_rela) + { + if (!slurp_rela_relocs ((FILE *) file, relsec->sh_offset, + relsec->sh_size, & relocs, & num_relocs)) + return; + } + else + { + if (!slurp_rel_relocs ((FILE *) file, relsec->sh_offset, + relsec->sh_size, & relocs, & num_relocs)) + return; + } + + /* SH uses RELA but uses in place value instead of the addend field. */ + if (elf_header.e_machine == EM_SH) + is_rela = FALSE; + + symsec = section_headers + relsec->sh_link; + symtab = GET_ELF_SYMBOLS ((FILE *) file, symsec); + + for (rp = relocs; rp < relocs + num_relocs; ++rp) + { + bfd_vma addend; + unsigned int reloc_type; + unsigned int reloc_size; + unsigned char * loc; + + reloc_type = get_reloc_type (rp->r_info); + + if (target_specific_reloc_handling (rp, start, symtab)) + continue; + else if (is_none_reloc (reloc_type)) + continue; + else if (is_32bit_abs_reloc (reloc_type) + || is_32bit_pcrel_reloc (reloc_type)) + reloc_size = 4; + else if (is_64bit_abs_reloc (reloc_type) + || is_64bit_pcrel_reloc (reloc_type)) + reloc_size = 8; + else if (is_24bit_abs_reloc (reloc_type)) + reloc_size = 3; + else if (is_16bit_abs_reloc (reloc_type)) + reloc_size = 2; + else + { + warn (_("unable to apply unsupported reloc type %d to section %s\n"), + reloc_type, SECTION_NAME (section)); + continue; + } + + loc = start + rp->r_offset; + if ((loc + reloc_size) > end) + { + warn (_("skipping invalid relocation offset 0x%lx in section %s\n"), + (unsigned long) rp->r_offset, + SECTION_NAME (section)); + continue; + } - if (dynamic_syminfo == NULL - || !do_dynamic) - /* No syminfo, this is ok. */ - return 1; + sym = symtab + get_reloc_symindex (rp->r_info); - /* There better should be a dynamic symbol section. */ - if (dynamic_symbols == NULL || dynamic_strings == NULL) - return 0; + /* If the reloc has a symbol associated with it, + make sure that it is of an appropriate type. - if (dynamic_addr) - printf (_("\nDynamic info segment at offset 0x%lx contains %d entries:\n"), - dynamic_syminfo_offset, dynamic_syminfo_nent); + Relocations against symbols without type can happen. + Gcc -feliminate-dwarf2-dups may generate symbols + without type for debug info. - printf (_(" Num: Name BoundTo Flags\n")); - for (i = 0; i < dynamic_syminfo_nent; ++i) - { - unsigned short int flags = dynamic_syminfo[i].si_flags; + Icc generates relocations against function symbols + instead of local labels. - printf ("%4d: ", i); - if (VALID_DYNAMIC_NAME (dynamic_symbols[i].st_name)) - print_symbol (30, GET_DYNAMIC_NAME (dynamic_symbols[i].st_name)); - else - printf ("", dynamic_symbols[i].st_name); - putchar (' '); + 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. */ + if (sym != symtab + && ELF_ST_TYPE (sym->st_info) > STT_SECTION) + { + warn (_("skipping unexpected symbol type %s in %ld'th relocation in section %s\n"), + get_symbol_type (ELF_ST_TYPE (sym->st_info)), + (long int)(rp - relocs), + SECTION_NAME (relsec)); + continue; + } - switch (dynamic_syminfo[i].si_boundto) - { - case SYMINFO_BT_SELF: - fputs ("SELF ", stdout); - break; - case SYMINFO_BT_PARENT: - fputs ("PARENT ", stdout); - break; - default: - if (dynamic_syminfo[i].si_boundto > 0 - && dynamic_syminfo[i].si_boundto < dynamic_nent - && VALID_DYNAMIC_NAME (dynamic_section[dynamic_syminfo[i].si_boundto].d_un.d_val)) + addend = 0; + if (is_rela) + addend += rp->r_addend; + /* R_XTENSA_32 and R_PJ_DATA_DIR32 are partial_inplace. */ + if (!is_rela + || (elf_header.e_machine == EM_XTENSA + && reloc_type == 1) + || ((elf_header.e_machine == EM_PJ + || elf_header.e_machine == EM_PJ_OLD) + && reloc_type == 1)) + addend += byte_get (loc, reloc_size); + + if (is_32bit_pcrel_reloc (reloc_type) + || is_64bit_pcrel_reloc (reloc_type)) { - print_symbol (10, GET_DYNAMIC_NAME (dynamic_section[dynamic_syminfo[i].si_boundto].d_un.d_val)); - putchar (' ' ); + /* On HPPA, all pc-relative relocations are biased by 8. */ + if (elf_header.e_machine == EM_PARISC) + addend -= 8; + byte_put (loc, (addend + sym->st_value) - rp->r_offset, + reloc_size); } else - printf ("%-10d ", dynamic_syminfo[i].si_boundto); - break; + byte_put (loc, addend + sym->st_value, reloc_size); } - if (flags & SYMINFO_FLG_DIRECT) - printf (" DIRECT"); - if (flags & SYMINFO_FLG_PASSTHRU) - printf (" PASSTHRU"); - if (flags & SYMINFO_FLG_COPY) - printf (" COPY"); - if (flags & SYMINFO_FLG_LAZYLOAD) - printf (" LAZYLOAD"); - - puts (""); + free (symtab); + free (relocs); + break; } - - return 1; } #ifdef SUPPORT_DISASSEMBLY static int -disassemble_section (Elf_Internal_Shdr *section, FILE *file) +disassemble_section (Elf_Internal_Shdr * section, FILE * file) { printf (_("\nAssembly dump of section %s\n"), SECTION_NAME (section)); @@ -7669,32 +8455,45 @@ disassemble_section (Elf_Internal_Shdr *section, FILE *file) } #endif -static int -dump_section (Elf_Internal_Shdr *section, FILE *file) +/* Reads in the contents of SECTION from FILE, returning a pointer + to a malloc'ed buffer or NULL if something went wrong. */ + +static char * +get_section_contents (Elf_Internal_Shdr * section, FILE * file) { - Elf_Internal_Shdr *relsec; - bfd_size_type bytes; - bfd_vma addr; - unsigned char *data; - unsigned char *start; + bfd_size_type num_bytes; - bytes = section->sh_size; + num_bytes = section->sh_size; - if (bytes == 0 || section->sh_type == SHT_NOBITS) + if (num_bytes == 0 || section->sh_type == SHT_NOBITS) { printf (_("\nSection '%s' has no data to dump.\n"), SECTION_NAME (section)); - return 0; + return NULL; } - else - printf (_("\nHex dump of section '%s':\n"), SECTION_NAME (section)); - addr = section->sh_addr; + return (char *) get_data (NULL, file, section->sh_offset, 1, num_bytes, + _("section contents")); +} - start = get_data (NULL, file, section->sh_offset, 1, bytes, - _("section data")); - if (!start) - return 0; + +static void +dump_section_as_strings (Elf_Internal_Shdr * section, FILE * file) +{ + Elf_Internal_Shdr * relsec; + bfd_size_type num_bytes; + bfd_vma addr; + char * data; + char * end; + char * start; + char * name = SECTION_NAME (section); + bfd_boolean some_strings_shown; + + start = get_section_contents (section, file); + if (start == NULL) + return; + + printf (_("\nString dump of section '%s':\n"), name); /* If the section being dumped has relocations against it the user might be expecting these relocations to have been applied. Check for this @@ -7706,16 +8505,94 @@ dump_section (Elf_Internal_Shdr *section, FILE *file) ++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_info >= elf_header.e_shnum + || section_headers + relsec->sh_info != section || relsec->sh_size == 0 - || SECTION_HEADER_INDEX (relsec->sh_link) >= elf_header.e_shnum) + || 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")); + printf (_(" Note: This section has relocations against it, but these have NOT been applied to this dump.\n")); break; } + num_bytes = section->sh_size; + addr = section->sh_addr; + data = start; + end = start + num_bytes; + some_strings_shown = FALSE; + + while (data < end) + { + while (!ISPRINT (* data)) + if (++ data >= end) + break; + + if (data < end) + { +#ifndef __MSVCRT__ + printf (" [%6tx] %s\n", data - start, data); +#else + printf (" [%6Ix] %s\n", (size_t) (data - start), data); +#endif + data += strlen (data); + some_strings_shown = TRUE; + } + } + + if (! some_strings_shown) + printf (_(" No strings found in this section.")); + + free (start); + + putchar ('\n'); +} + +static void +dump_section_as_bytes (Elf_Internal_Shdr * section, + FILE * file, + bfd_boolean relocate) +{ + Elf_Internal_Shdr * relsec; + bfd_size_type bytes; + bfd_vma addr; + unsigned char * data; + unsigned char * start; + + start = (unsigned char *) get_section_contents (section, file); + if (start == NULL) + return; + + printf (_("\nHex dump of section '%s':\n"), SECTION_NAME (section)); + + if (relocate) + { + apply_relocations (file, section, start); + } + else + { + /* 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) + || relsec->sh_info >= elf_header.e_shnum + || section_headers + relsec->sh_info != section + || relsec->sh_size == 0 + || 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; + } + } + + addr = section->sh_addr; + bytes = section->sh_size; data = start; while (bytes) @@ -7758,201 +8635,140 @@ 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 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. */ +/* Uncompresses a section that was compressed using zlib, in place. + This is a copy of bfd_uncompress_section_contents, in bfd/compress.c */ static int -debug_apply_rela_addends (void *file, - Elf_Internal_Shdr *section, - unsigned char *start) +uncompress_section_contents (unsigned char ** buffer, dwarf_size_type * size) { - Elf_Internal_Shdr *relsec; - unsigned char *end = start + section->sh_size; - - if (!is_relocatable) - return 1; - - /* SH uses RELA but uses in place value instead of the addend field. */ - if (elf_header.e_machine == EM_SH) +#ifndef HAVE_ZLIB_H + /* These are just to quiet gcc. */ + buffer = 0; + size = 0; + return FALSE; +#else + dwarf_size_type compressed_size = *size; + unsigned char * compressed_buffer = *buffer; + dwarf_size_type uncompressed_size; + unsigned char * uncompressed_buffer; + z_stream strm; + int rc; + dwarf_size_type header_size = 12; + + /* Read the zlib header. In this case, it should be "ZLIB" followed + by the uncompressed section size, 8 bytes in big-endian order. */ + if (compressed_size < header_size + || ! streq ((char *) compressed_buffer, "ZLIB")) return 0; - for (relsec = section_headers; - relsec < section_headers + elf_header.e_shnum; - ++relsec) - { - unsigned long nrelas; - Elf_Internal_Rela *rela, *rp; - Elf_Internal_Shdr *symsec; - Elf_Internal_Sym *symtab; - Elf_Internal_Sym *sym; - - if (relsec->sh_type != SHT_RELA - || 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; + uncompressed_size = compressed_buffer[4]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[5]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[6]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[7]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[8]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[9]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[10]; uncompressed_size <<= 8; + uncompressed_size += compressed_buffer[11]; + + /* It is possible the section consists of several compressed + buffers concatenated together, so we uncompress in a loop. */ + strm.zalloc = NULL; + strm.zfree = NULL; + strm.opaque = NULL; + strm.avail_in = compressed_size - header_size; + strm.next_in = (Bytef *) compressed_buffer + header_size; + strm.avail_out = uncompressed_size; + uncompressed_buffer = (unsigned char *) xmalloc (uncompressed_size); + + rc = inflateInit (& strm); + while (strm.avail_in > 0) + { + if (rc != Z_OK) + goto fail; + strm.next_out = ((Bytef *) uncompressed_buffer + + (uncompressed_size - strm.avail_out)); + rc = inflate (&strm, Z_FINISH); + if (rc != Z_STREAM_END) + goto fail; + rc = inflateReset (& strm); + } + rc = inflateEnd (& strm); + if (rc != Z_OK + || strm.avail_out != 0) + goto fail; + + free (compressed_buffer); + *buffer = uncompressed_buffer; + *size = uncompressed_size; + return 1; - if (!slurp_rela_relocs (file, relsec->sh_offset, relsec->sh_size, - &rela, &nrelas)) - return 0; + fail: + free (uncompressed_buffer); + return 0; +#endif /* HAVE_ZLIB_H */ +} - symsec = SECTION_HEADER (relsec->sh_link); - symtab = GET_ELF_SYMBOLS (file, symsec); +static int +load_specific_debug_section (enum dwarf_section_display_enum debug, + Elf_Internal_Shdr * sec, void * file) +{ + struct dwarf_section * section = &debug_displays [debug].section; + char buf [64]; + int section_is_compressed; - for (rp = rela; rp < rela + nrelas; ++rp) - { - unsigned char *loc; - unsigned int reloc_size; + /* If it is already loaded, do nothing. */ + if (section->start != NULL) + return 1; - 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; - } + section_is_compressed = section->name == section->compressed_name; - loc = start + rp->r_offset; - if ((loc + reloc_size) > end) - { - warn (_("skipping invalid relocation offset 0x%lx in section %s\n"), - (unsigned long) rp->r_offset, - SECTION_NAME (section)); - continue; - } + snprintf (buf, sizeof (buf), _("%s section data"), section->name); + section->address = sec->sh_addr; + section->size = sec->sh_size; + section->start = (unsigned char *) get_data (NULL, (FILE *) file, + sec->sh_offset, 1, + sec->sh_size, buf); + if (section->start == NULL) + return 0; - if (is_32bit_elf) - { - sym = symtab + ELF32_R_SYM (rp->r_info); - - 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. */ - && ELF32_ST_TYPE (sym->st_info) != STT_OBJECT) - { - warn (_("skipping unexpected symbol type %s in relocation in section .rela%s\n"), - get_symbol_type (ELF32_ST_TYPE (sym->st_info)), - SECTION_NAME (section)); - continue; - } - } - else - { - /* In MIPS little-endian objects, r_info isn't really a - 64-bit little-endian value: it has a 32-bit little-endian - symbol index followed by four individual byte fields. - Reorder INFO accordingly. */ - if (elf_header.e_machine == EM_MIPS - && elf_header.e_ident[EI_DATA] != ELFDATA2MSB) - rp->r_info = (((rp->r_info & 0xffffffff) << 32) - | ((rp->r_info >> 56) & 0xff) - | ((rp->r_info >> 40) & 0xff00) - | ((rp->r_info >> 24) & 0xff0000) - | ((rp->r_info >> 8) & 0xff000000)); - - sym = symtab + ELF64_R_SYM (rp->r_info); - - 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"), - get_symbol_type (ELF64_ST_TYPE (sym->st_info)), - SECTION_NAME (section)); - continue; - } - } + if (section_is_compressed) + if (! uncompress_section_contents (§ion->start, §ion->size)) + return 0; - byte_put (loc, rp->r_addend, reloc_size); - } + if (debug_displays [debug].relocate) + apply_relocations ((FILE *) file, sec, section->start); - free (symtab); - free (rela); - break; - } return 1; } int -load_debug_section (enum dwarf_section_display_enum debug, void *file) +load_debug_section (enum dwarf_section_display_enum debug, void * file) { - struct dwarf_section *section = &debug_displays [debug].section; - Elf_Internal_Shdr *sec; - char buf [64]; - - /* If it is already loaded, do nothing. */ - if (section->start != NULL) - return 1; + struct dwarf_section * section = &debug_displays [debug].section; + Elf_Internal_Shdr * sec; /* Locate the debug section. */ - sec = find_section (section->name); + sec = find_section (section->uncompressed_name); + if (sec != NULL) + section->name = section->uncompressed_name; + else + { + sec = find_section (section->compressed_name); + if (sec != NULL) + section->name = section->compressed_name; + } if (sec == NULL) return 0; - snprintf (buf, sizeof (buf), _("%s section data"), section->name); - section->address = sec->sh_addr; - section->size = sec->sh_size; - section->start = get_data (NULL, file, sec->sh_offset, 1, - sec->sh_size, buf); - - if (debug_displays [debug].relocate) - debug_apply_rela_addends (file, sec, section->start); - - return section->start != NULL; + return load_specific_debug_section (debug, sec, (FILE *) file); } void free_debug_section (enum dwarf_section_display_enum debug) { - struct dwarf_section *section = &debug_displays [debug].section; + struct dwarf_section * section = &debug_displays [debug].section; if (section->start == NULL) return; @@ -7964,12 +8780,12 @@ free_debug_section (enum dwarf_section_display_enum debug) } static int -display_debug_section (Elf_Internal_Shdr *section, FILE *file) +display_debug_section (Elf_Internal_Shdr * section, FILE * file) { - char *name = SECTION_NAME (section); + char * name = SECTION_NAME (section); bfd_size_type length; int result = 1; - enum dwarf_section_display_enum i; + int i; length = section->sh_size; if (length == 0) @@ -7977,22 +8793,41 @@ display_debug_section (Elf_Internal_Shdr *section, FILE *file) printf (_("\nSection '%s' has no debugging data.\n"), name); return 0; } + if (section->sh_type == SHT_NOBITS) + { + /* There is no point in dumping the contents of a debugging section + which has the NOBITS type - the bits in the file will be random. + This can happen when a file containing a .eh_frame section is + stripped with the --only-keep-debug command line option. */ + printf (_("section '%s' has the NOBITS type - its contents are unreliable.\n"), name); + return 0; + } if (const_strneq (name, ".gnu.linkonce.wi.")) name = ".debug_info"; /* See if we know how to display the contents of this section. */ for (i = 0; i < max; i++) - if (streq (debug_displays[i].section.name, name)) + if (streq (debug_displays[i].section.uncompressed_name, name) + || streq (debug_displays[i].section.compressed_name, name)) { - struct dwarf_section *sec = &debug_displays [i].section; - - if (load_debug_section (i, file)) + struct dwarf_section * sec = &debug_displays [i].section; + int secondary = (section != find_section (name)); + + if (secondary) + free_debug_section ((enum dwarf_section_display_enum) i); + + if (streq (debug_displays[i].section.uncompressed_name, name)) + sec->name = sec->uncompressed_name; + else + sec->name = sec->compressed_name; + if (load_specific_debug_section ((enum dwarf_section_display_enum) i, + section, file)) { result &= debug_displays[i].display (sec, file); - if (i != info && i != abbrev) - free_debug_section (i); + if (secondary || (i != info && i != abbrev)) + free_debug_section ((enum dwarf_section_display_enum) i); } break; @@ -8013,7 +8848,7 @@ display_debug_section (Elf_Internal_Shdr *section, FILE *file) static void initialise_dumps_byname (void) { - struct dump_list_entry *cur; + struct dump_list_entry * cur; for (cur = dump_sects_byname; cur; cur = cur->next) { @@ -8023,7 +8858,7 @@ initialise_dumps_byname (void) for (i = 0, any = 0; i < elf_header.e_shnum; i++) if (streq (SECTION_NAME (section_headers + i), cur->name)) { - request_dump (i, cur->type); + request_dump_bynumber (i, cur->type); any = 1; } @@ -8034,9 +8869,9 @@ initialise_dumps_byname (void) } static void -process_section_contents (FILE *file) +process_section_contents (FILE * file) { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; unsigned int i; if (! do_dump) @@ -8053,7 +8888,13 @@ process_section_contents (FILE *file) disassemble_section (section, file); #endif if (dump_sects[i] & HEX_DUMP) - dump_section (section, file); + dump_section_as_bytes (section, file, FALSE); + + if (dump_sects[i] & RELOC_DUMP) + dump_section_as_bytes (section, file, TRUE); + + if (dump_sects[i] & STRING_DUMP) + dump_section_as_strings (section, file); if (dump_sects[i] & DEBUG_DUMP) display_debug_section (section, file); @@ -8091,58 +8932,68 @@ process_mips_fpe_exception (int mask) typedef struct { int tag; - const char *name; + const char * name; /* 0 = special, 1 = string, 2 = uleb123, > 0x80 == table lookup. */ int type; - const char **table; + const char ** table; } arm_attr_public_tag; -static const char *arm_attr_tag_CPU_arch[] = +static const char * arm_attr_tag_CPU_arch[] = {"Pre-v4", "v4", "v4T", "v5T", "v5TE", "v5TEJ", "v6", "v6KZ", "v6T2", - "v6K", "v7"}; -static const char *arm_attr_tag_ARM_ISA_use[] = {"No", "Yes"}; -static const char *arm_attr_tag_THUMB_ISA_use[] = + "v6K", "v7", "v6-M", "v6S-M"}; +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"}; -/* 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[] = +static const char * arm_attr_tag_VFP_arch[] = + {"No", "VFPv1", "VFPv2", "VFPv3", "VFPv3-D16"}; +static const char * arm_attr_tag_WMMX_arch[] = {"No", "WMMXv1", "WMMXv2"}; +static const char * arm_attr_tag_Advanced_SIMD_arch[] = {"No", "NEONv1"}; +static const char * arm_attr_tag_PCS_config[] = {"None", "Bare platform", "Linux application", "Linux DSO", "PalmOS 2004", "PalmOS (reserved)", "SymbianOS 2004", "SymbianOS (reserved)"}; -static const char *arm_attr_tag_ABI_PCS_R9_use[] = +static const char * arm_attr_tag_ABI_PCS_R9_use[] = {"V6", "SB", "TLS", "Unused"}; -static const char *arm_attr_tag_ABI_PCS_RW_data[] = +static const char * arm_attr_tag_ABI_PCS_RW_data[] = {"Absolute", "PC-relative", "SB-relative", "None"}; -static const char *arm_attr_tag_ABI_PCS_RO_DATA[] = +static const char * arm_attr_tag_ABI_PCS_RO_data[] = {"Absolute", "PC-relative", "None"}; -static const char *arm_attr_tag_ABI_PCS_GOT_use[] = +static const char * arm_attr_tag_ABI_PCS_GOT_use[] = {"None", "direct", "GOT-indirect"}; -static const char *arm_attr_tag_ABI_PCS_wchar_t[] = +static const char * arm_attr_tag_ABI_PCS_wchar_t[] = {"None", "??? 1", "2", "??? 3", "4"}; -static const char *arm_attr_tag_ABI_FP_rounding[] = {"Unused", "Needed"}; -static const char *arm_attr_tag_ABI_FP_denormal[] = {"Unused", "Needed"}; -static const char *arm_attr_tag_ABI_FP_exceptions[] = {"Unused", "Needed"}; -static const char *arm_attr_tag_ABI_FP_user_exceptions[] = {"Unused", "Needed"}; -static const char *arm_attr_tag_ABI_FP_number_model[] = +static const char * arm_attr_tag_ABI_FP_rounding[] = {"Unused", "Needed"}; +static const char * arm_attr_tag_ABI_FP_denormal[] = + {"Unused", "Needed", "Sign only"}; +static const char * arm_attr_tag_ABI_FP_exceptions[] = {"Unused", "Needed"}; +static const char * arm_attr_tag_ABI_FP_user_exceptions[] = {"Unused", "Needed"}; +static const char * arm_attr_tag_ABI_FP_number_model[] = {"Unused", "Finite", "RTABI", "IEEE 754"}; -static const char *arm_attr_tag_ABI_align8_needed[] = {"No", "Yes", "4-byte"}; -static const char *arm_attr_tag_ABI_align8_preserved[] = +static const char * arm_attr_tag_ABI_align8_needed[] = {"No", "Yes", "4-byte"}; +static const char * arm_attr_tag_ABI_align8_preserved[] = {"No", "Yes, except leaf SP", "Yes"}; -static const char *arm_attr_tag_ABI_enum_size[] = +static const char * arm_attr_tag_ABI_enum_size[] = {"Unused", "small", "int", "forced to int"}; -static const char *arm_attr_tag_ABI_HardFP_use[] = +static const char * arm_attr_tag_ABI_HardFP_use[] = {"As Tag_VFP_arch", "SP only", "DP only", "SP and DP"}; -static const char *arm_attr_tag_ABI_VFP_args[] = +static const char * arm_attr_tag_ABI_VFP_args[] = {"AAPCS", "VFP registers", "custom"}; -static const char *arm_attr_tag_ABI_WMMX_args[] = +static const char * arm_attr_tag_ABI_WMMX_args[] = {"AAPCS", "WMMX registers", "custom"}; -static const char *arm_attr_tag_ABI_optimization_goals[] = +static const char * arm_attr_tag_ABI_optimization_goals[] = {"None", "Prefer Speed", "Aggressive Speed", "Prefer Size", "Aggressive Size", "Prefer Debug", "Aggressive Debug"}; -static const char *arm_attr_tag_ABI_FP_optimization_goals[] = +static const char * arm_attr_tag_ABI_FP_optimization_goals[] = {"None", "Prefer Speed", "Aggressive Speed", "Prefer Size", "Aggressive Size", "Prefer Accuracy", "Aggressive Accuracy"}; +static const char * arm_attr_tag_CPU_unaligned_access[] = {"None", "v6"}; +static const char * arm_attr_tag_VFP_HP_extension[] = + {"Not Allowed", "Allowed"}; +static const char * arm_attr_tag_ABI_FP_16bit_format[] = + {"None", "IEEE 754", "Alternative Format"}; +static const char * arm_attr_tag_T2EE_use[] = {"Not Allowed", "Allowed"}; +static const char * arm_attr_tag_Virtualization_use[] = + {"Not Allowed", "Allowed"}; +static const char * arm_attr_tag_MPextension_use[] = {"Not Allowed", "Allowed"}; #define LOOKUP(id, name) \ {id, #name, 0x80 | ARRAY_SIZE(arm_attr_tag_##name), arm_attr_tag_##name} @@ -8156,11 +9007,11 @@ static arm_attr_public_tag arm_attr_public_tags[] = LOOKUP(9, THUMB_ISA_use), LOOKUP(10, VFP_arch), LOOKUP(11, WMMX_arch), - LOOKUP(12, NEON_arch), - LOOKUP(13, ABI_PCS_config), + LOOKUP(12, Advanced_SIMD_arch), + LOOKUP(13, PCS_config), LOOKUP(14, ABI_PCS_R9_use), LOOKUP(15, ABI_PCS_RW_data), - LOOKUP(16, ABI_PCS_RO_DATA), + LOOKUP(16, ABI_PCS_RO_data), LOOKUP(17, ABI_PCS_GOT_use), LOOKUP(18, ABI_PCS_wchar_t), LOOKUP(19, ABI_FP_rounding), @@ -8176,14 +9027,24 @@ static arm_attr_public_tag arm_attr_public_tags[] = LOOKUP(29, ABI_WMMX_args), LOOKUP(30, ABI_optimization_goals), LOOKUP(31, ABI_FP_optimization_goals), - {32, "compatibility", 0, NULL} + {32, "compatibility", 0, NULL}, + LOOKUP(34, CPU_unaligned_access), + LOOKUP(36, VFP_HP_extension), + LOOKUP(38, ABI_FP_16bit_format), + {64, "nodefaults", 0, NULL}, + {65, "also_compatible_with", 0, NULL}, + LOOKUP(66, T2EE_use), + {67, "conformance", 1, NULL}, + LOOKUP(68, Virtualization_use), + LOOKUP(70, MPextension_use) }; #undef LOOKUP /* Read an unsigned LEB128 encoded value from p. Set *PLEN to the number of bytes read. */ + static unsigned int -read_uleb128 (unsigned char *p, unsigned int *plen) +read_uleb128 (unsigned char * p, unsigned int * plen) { unsigned char c; unsigned int val; @@ -8207,19 +9068,19 @@ read_uleb128 (unsigned char *p, unsigned int *plen) } static unsigned char * -display_arm_attribute (unsigned char *p) +display_arm_attribute (unsigned char * p) { int tag; unsigned int len; int val; - arm_attr_public_tag *attr; + arm_attr_public_tag * attr; unsigned i; int type; tag = read_uleb128 (p, &len); p += len; attr = NULL; - for (i = 0; i < ARRAY_SIZE(arm_attr_public_tags); i++) + for (i = 0; i < ARRAY_SIZE (arm_attr_public_tags); i++) { if (arm_attr_public_tags[i].tag == tag) { @@ -8253,11 +9114,33 @@ display_arm_attribute (unsigned char *p) val = read_uleb128 (p, &len); p += len; printf ("flag = %d, vendor = %s\n", val, p); - p += strlen((char *)p) + 1; + p += strlen ((char *) p) + 1; + break; + + case 64: /* Tag_nodefaults. */ + p++; + printf ("True\n"); + break; + + case 65: /* Tag_also_compatible_with. */ + val = read_uleb128 (p, &len); + p += len; + if (val == 6 /* Tag_CPU_arch. */) + { + val = read_uleb128 (p, &len); + p += len; + if ((unsigned int)val >= ARRAY_SIZE (arm_attr_tag_CPU_arch)) + printf ("??? (%d)\n", val); + else + printf ("%s\n", arm_attr_tag_CPU_arch[val]); + } + else + printf ("???\n"); + while (*(p++) != '\0' /* NUL terminator. */); break; default: - abort(); + abort (); } return p; @@ -8290,7 +9173,7 @@ display_arm_attribute (unsigned char *p) if (type == 1) { printf ("\"%s\"\n", p); - p += strlen((char *)p) + 1; + p += strlen ((char *) p) + 1; } else { @@ -8350,28 +9233,57 @@ display_gnu_attribute (unsigned char * p, } static unsigned char * -display_power_gnu_attribute (unsigned char *p, int tag) +display_power_gnu_attribute (unsigned char * p, int tag) { int type; unsigned int len; int val; - if (tag == Tag_GNU_Power_ABI_FP) + 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; + case 3: + printf ("Single-precision hard float\n"); + break; + default: + printf ("??? (%d)\n", val); + break; + } + return p; + } + + if (tag == Tag_GNU_Power_ABI_Vector) { val = read_uleb128 (p, &len); p += len; - printf (" Tag_GNU_Power_ABI_FP: "); - + printf (" Tag_GNU_Power_ABI_Vector: "); switch (val) { case 0: - printf ("Hard or soft float\n"); + printf ("Any\n"); break; case 1: - printf ("Hard float\n"); + printf ("Generic\n"); break; case 2: - printf ("Soft float\n"); + printf ("AltiVec\n"); + break; + case 3: + printf ("SPE\n"); break; default: printf ("??? (%d)\n", val); @@ -8380,6 +9292,29 @@ display_power_gnu_attribute (unsigned char *p, int tag) return p; } + if (tag == Tag_GNU_Power_ABI_Struct_Return) + { + val = read_uleb128 (p, &len); + p += len; + printf (" Tag_GNU_Power_ABI_Struct_Return: "); + switch (val) + { + case 0: + printf ("Any\n"); + break; + case 1: + printf ("r3/r4\n"); + break; + case 2: + printf ("Memory\n"); + break; + default: + printf ("??? (%d)\n", val); + break; + } + return p; + } + if (tag & 1) type = 1; /* String. */ else @@ -8402,7 +9337,7 @@ display_power_gnu_attribute (unsigned char *p, int tag) } static unsigned char * -display_mips_gnu_attribute (unsigned char *p, int tag) +display_mips_gnu_attribute (unsigned char * p, int tag) { int type; unsigned int len; @@ -8428,6 +9363,9 @@ display_mips_gnu_attribute (unsigned char *p, int tag) case 3: printf ("Soft float\n"); break; + case 4: + printf ("64-bit float (-mips32r2 -mfp64)\n"); + break; default: printf ("??? (%d)\n", val); break; @@ -8463,10 +9401,10 @@ process_attributes (FILE * file, unsigned char * (* display_pub_attribute) (unsigned char *), unsigned char * (* display_proc_gnu_attribute) (unsigned char *, int)) { - Elf_Internal_Shdr *sect; - unsigned char *contents; - unsigned char *p; - unsigned char *end; + Elf_Internal_Shdr * sect; + unsigned char * contents; + unsigned char * p; + unsigned char * end; bfd_vma section_len; bfd_vma len; unsigned i; @@ -8479,8 +9417,8 @@ process_attributes (FILE * file, 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, - _("attributes")); + contents = (unsigned char *) get_data (NULL, file, sect->sh_offset, 1, + sect->sh_size, _("attributes")); if (contents == NULL) continue; @@ -8599,28 +9537,85 @@ process_attributes (FILE * file, } static int -process_arm_specific (FILE *file) +process_arm_specific (FILE * file) { return process_attributes (file, "aeabi", SHT_ARM_ATTRIBUTES, display_arm_attribute, NULL); } static int -process_power_specific (FILE *file) +process_power_specific (FILE * file) { return process_attributes (file, NULL, SHT_GNU_ATTRIBUTES, NULL, display_power_gnu_attribute); } +/* DATA points to the contents of a MIPS GOT that starts at VMA PLTGOT. + Print the Address, Access and Initial fields of an entry at VMA ADDR + and return the VMA of the next entry. */ + +static bfd_vma +print_mips_got_entry (unsigned char * data, bfd_vma pltgot, bfd_vma addr) +{ + printf (" "); + print_vma (addr, LONG_HEX); + printf (" "); + if (addr < pltgot + 0xfff0) + printf ("%6d(gp)", (int) (addr - pltgot - 0x7ff0)); + else + printf ("%10s", ""); + printf (" "); + if (data == NULL) + printf ("%*s", is_32bit_elf ? 8 : 16, ""); + else + { + bfd_vma entry; + + entry = byte_get (data + addr - pltgot, is_32bit_elf ? 4 : 8); + print_vma (entry, LONG_HEX); + } + return addr + (is_32bit_elf ? 4 : 8); +} + +/* DATA points to the contents of a MIPS PLT GOT that starts at VMA + PLTGOT. Print the Address and Initial fields of an entry at VMA + ADDR and return the VMA of the next entry. */ + +static bfd_vma +print_mips_pltgot_entry (unsigned char * data, bfd_vma pltgot, bfd_vma addr) +{ + printf (" "); + print_vma (addr, LONG_HEX); + printf (" "); + if (data == NULL) + printf ("%*s", is_32bit_elf ? 8 : 16, ""); + else + { + bfd_vma entry; + + entry = byte_get (data + addr - pltgot, is_32bit_elf ? 4 : 8); + print_vma (entry, LONG_HEX); + } + return addr + (is_32bit_elf ? 4 : 8); +} + static int -process_mips_specific (FILE *file) +process_mips_specific (FILE * file) { - Elf_Internal_Dyn *entry; + Elf_Internal_Dyn * entry; size_t liblist_offset = 0; size_t liblistno = 0; size_t conflictsno = 0; size_t options_offset = 0; size_t conflicts_offset = 0; + size_t pltrelsz = 0; + size_t pltrel = 0; + bfd_vma pltgot = 0; + bfd_vma mips_pltgot = 0; + bfd_vma jmprel = 0; + bfd_vma local_gotno = 0; + bfd_vma gotsym = 0; + bfd_vma symtabno = 0; process_attributes (file, NULL, SHT_GNU_ATTRIBUTES, NULL, display_mips_gnu_attribute); @@ -8652,18 +9647,43 @@ process_mips_specific (FILE *file) case DT_MIPS_CONFLICTNO: conflictsno = entry->d_un.d_val; break; + case DT_PLTGOT: + pltgot = entry->d_un.d_ptr; + break; + case DT_MIPS_LOCAL_GOTNO: + local_gotno = entry->d_un.d_val; + break; + case DT_MIPS_GOTSYM: + gotsym = entry->d_un.d_val; + break; + case DT_MIPS_SYMTABNO: + symtabno = entry->d_un.d_val; + break; + case DT_MIPS_PLTGOT: + mips_pltgot = entry->d_un.d_ptr; + break; + case DT_PLTREL: + pltrel = entry->d_un.d_val; + break; + case DT_PLTRELSZ: + pltrelsz = entry->d_un.d_val; + break; + case DT_JMPREL: + jmprel = entry->d_un.d_ptr; + break; default: break; } if (liblist_offset != 0 && liblistno != 0 && do_dynamic) { - Elf32_External_Lib *elib; + Elf32_External_Lib * elib; size_t cnt; - elib = get_data (NULL, file, liblist_offset, - liblistno, sizeof (Elf32_External_Lib), - _("liblist")); + elib = (Elf32_External_Lib *) get_data (NULL, file, liblist_offset, + liblistno, + sizeof (Elf32_External_Lib), + _("liblist")); if (elib) { printf ("\nSection '.liblist' contains %lu entries:\n", @@ -8676,7 +9696,7 @@ process_mips_specific (FILE *file) Elf32_Lib liblist; time_t time; char timebuf[20]; - struct tm *tmp; + struct tm * tmp; liblist.l_name = BYTE_GET (elib[cnt].l_name); time = BYTE_GET (elib[cnt].l_time_stamp); @@ -8704,7 +9724,7 @@ process_mips_specific (FILE *file) { static const struct { - const char *name; + const char * name; int bit; } l_flags_vals[] = @@ -8738,10 +9758,10 @@ process_mips_specific (FILE *file) if (options_offset != 0) { - Elf_External_Options *eopt; - Elf_Internal_Shdr *sect = section_headers; - Elf_Internal_Options *iopt; - Elf_Internal_Options *option; + Elf_External_Options * eopt; + Elf_Internal_Shdr * sect = section_headers; + Elf_Internal_Options * iopt; + Elf_Internal_Options * option; size_t offset; int cnt; @@ -8749,11 +9769,12 @@ process_mips_specific (FILE *file) while (sect->sh_type != SHT_MIPS_OPTIONS) ++sect; - eopt = get_data (NULL, file, options_offset, 1, sect->sh_size, - _("options")); + eopt = (Elf_External_Options *) get_data (NULL, file, options_offset, 1, + sect->sh_size, _("options")); if (eopt) { - iopt = cmalloc ((sect->sh_size / sizeof (eopt)), sizeof (*iopt)); + iopt = (Elf_Internal_Options *) + cmalloc ((sect->sh_size / sizeof (eopt)), sizeof (* iopt)); if (iopt == NULL) { error (_("Out of memory\n")); @@ -8765,7 +9786,7 @@ process_mips_specific (FILE *file) while (offset < sect->sh_size) { - Elf_External_Options *eoption; + Elf_External_Options * eoption; eoption = (Elf_External_Options *) ((char *) eopt + offset); @@ -8800,7 +9821,7 @@ process_mips_specific (FILE *file) if (elf_header.e_machine == EM_MIPS) { /* 32bit form. */ - Elf32_External_RegInfo *ereg; + Elf32_External_RegInfo * ereg; Elf32_RegInfo reginfo; ereg = (Elf32_External_RegInfo *) (option + 1); @@ -8821,7 +9842,7 @@ process_mips_specific (FILE *file) else { /* 64 bit form. */ - Elf64_External_RegInfo *ereg; + Elf64_External_RegInfo * ereg; Elf64_Internal_RegInfo reginfo; ereg = (Elf64_External_RegInfo *) (option + 1); @@ -8918,7 +9939,7 @@ process_mips_specific (FILE *file) break; } - len = sizeof (*eopt); + len = sizeof (* eopt); while (len < option->size) if (((char *) option)[len] >= ' ' && ((char *) option)[len] < 0x7f) @@ -8936,7 +9957,7 @@ process_mips_specific (FILE *file) if (conflicts_offset != 0 && conflictsno != 0) { - Elf32_Conflict *iconf; + Elf32_Conflict * iconf; size_t cnt; if (dynamic_symbols == NULL) @@ -8945,7 +9966,7 @@ process_mips_specific (FILE *file) return 0; } - iconf = cmalloc (conflictsno, sizeof (*iconf)); + iconf = (Elf32_Conflict *) cmalloc (conflictsno, sizeof (* iconf)); if (iconf == NULL) { error (_("Out of memory\n")); @@ -8954,10 +9975,11 @@ process_mips_specific (FILE *file) if (is_32bit_elf) { - Elf32_External_Conflict *econf32; + Elf32_External_Conflict * econf32; - econf32 = get_data (NULL, file, conflicts_offset, - conflictsno, sizeof (*econf32), _("conflict")); + econf32 = (Elf32_External_Conflict *) + get_data (NULL, file, conflicts_offset, conflictsno, + sizeof (* econf32), _("conflict")); if (!econf32) return 0; @@ -8968,10 +9990,11 @@ process_mips_specific (FILE *file) } else { - Elf64_External_Conflict *econf64; + Elf64_External_Conflict * econf64; - econf64 = get_data (NULL, file, conflicts_offset, - conflictsno, sizeof (*econf64), _("conflict")); + econf64 = (Elf64_External_Conflict *) + get_data (NULL, file, conflicts_offset, conflictsno, + sizeof (* econf64), _("conflict")); if (!econf64) return 0; @@ -8987,7 +10010,7 @@ process_mips_specific (FILE *file) for (cnt = 0; cnt < conflictsno; ++cnt) { - Elf_Internal_Sym *psym = & dynamic_symbols[iconf[cnt]]; + Elf_Internal_Sym * psym = & dynamic_symbols[iconf[cnt]]; printf ("%5lu: %8lu ", (unsigned long) cnt, iconf[cnt]); print_vma (psym->st_value, FULL_HEX); @@ -9002,15 +10025,167 @@ process_mips_specific (FILE *file) free (iconf); } + if (pltgot != 0 && local_gotno != 0) + { + bfd_vma entry, local_end, global_end; + size_t i, offset; + unsigned char * data; + int addr_size; + + entry = pltgot; + addr_size = (is_32bit_elf ? 4 : 8); + local_end = pltgot + local_gotno * addr_size; + global_end = local_end + (symtabno - gotsym) * addr_size; + + offset = offset_from_vma (file, pltgot, global_end - pltgot); + data = (unsigned char *) get_data (NULL, file, offset, + global_end - pltgot, 1, _("GOT")); + printf (_("\nPrimary GOT:\n")); + printf (_(" Canonical gp value: ")); + print_vma (pltgot + 0x7ff0, LONG_HEX); + printf ("\n\n"); + + printf (_(" Reserved entries:\n")); + printf (_(" %*s %10s %*s Purpose\n"), + addr_size * 2, "Address", "Access", + addr_size * 2, "Initial"); + entry = print_mips_got_entry (data, pltgot, entry); + printf (" Lazy resolver\n"); + if (data + && (byte_get (data + entry - pltgot, addr_size) + >> (addr_size * 8 - 1)) != 0) + { + entry = print_mips_got_entry (data, pltgot, entry); + printf (" Module pointer (GNU extension)\n"); + } + printf ("\n"); + + if (entry < local_end) + { + printf (_(" Local entries:\n")); + printf (_(" %*s %10s %*s\n"), + addr_size * 2, "Address", "Access", + addr_size * 2, "Initial"); + while (entry < local_end) + { + entry = print_mips_got_entry (data, pltgot, entry); + printf ("\n"); + } + printf ("\n"); + } + + if (gotsym < symtabno) + { + int sym_width; + + printf (_(" Global entries:\n")); + printf (_(" %*s %10s %*s %*s %-7s %3s %s\n"), + addr_size * 2, "Address", "Access", + addr_size * 2, "Initial", + addr_size * 2, "Sym.Val.", "Type", "Ndx", "Name"); + sym_width = (is_32bit_elf ? 80 : 160) - 28 - addr_size * 6 - 1; + for (i = gotsym; i < symtabno; i++) + { + Elf_Internal_Sym * psym; + + psym = dynamic_symbols + i; + entry = print_mips_got_entry (data, pltgot, entry); + printf (" "); + print_vma (psym->st_value, LONG_HEX); + printf (" %-7s %3s ", + get_symbol_type (ELF_ST_TYPE (psym->st_info)), + get_symbol_index_type (psym->st_shndx)); + if (VALID_DYNAMIC_NAME (psym->st_name)) + print_symbol (sym_width, GET_DYNAMIC_NAME (psym->st_name)); + else + printf ("", psym->st_name); + printf ("\n"); + } + printf ("\n"); + } + + if (data) + free (data); + } + + if (mips_pltgot != 0 && jmprel != 0 && pltrel != 0 && pltrelsz != 0) + { + bfd_vma entry, end; + size_t offset, rel_offset; + unsigned long count, i; + unsigned char * data; + int addr_size, sym_width; + Elf_Internal_Rela * rels; + + rel_offset = offset_from_vma (file, jmprel, pltrelsz); + if (pltrel == DT_RELA) + { + if (!slurp_rela_relocs (file, rel_offset, pltrelsz, &rels, &count)) + return 0; + } + else + { + if (!slurp_rel_relocs (file, rel_offset, pltrelsz, &rels, &count)) + return 0; + } + + entry = mips_pltgot; + addr_size = (is_32bit_elf ? 4 : 8); + end = mips_pltgot + (2 + count) * addr_size; + + offset = offset_from_vma (file, mips_pltgot, end - mips_pltgot); + data = (unsigned char *) get_data (NULL, file, offset, end - mips_pltgot, + 1, _("PLT GOT")); + printf (_("\nPLT GOT:\n\n")); + printf (_(" Reserved entries:\n")); + printf (_(" %*s %*s Purpose\n"), + addr_size * 2, "Address", addr_size * 2, "Initial"); + entry = print_mips_pltgot_entry (data, mips_pltgot, entry); + printf (" PLT lazy resolver\n"); + entry = print_mips_pltgot_entry (data, mips_pltgot, entry); + printf (" Module pointer\n"); + printf ("\n"); + + printf (_(" Entries:\n")); + printf (_(" %*s %*s %*s %-7s %3s %s\n"), + addr_size * 2, "Address", + addr_size * 2, "Initial", + addr_size * 2, "Sym.Val.", "Type", "Ndx", "Name"); + sym_width = (is_32bit_elf ? 80 : 160) - 17 - addr_size * 6 - 1; + for (i = 0; i < count; i++) + { + Elf_Internal_Sym * psym; + + psym = dynamic_symbols + get_reloc_symindex (rels[i].r_info); + entry = print_mips_pltgot_entry (data, mips_pltgot, entry); + printf (" "); + print_vma (psym->st_value, LONG_HEX); + printf (" %-7s %3s ", + get_symbol_type (ELF_ST_TYPE (psym->st_info)), + get_symbol_index_type (psym->st_shndx)); + if (VALID_DYNAMIC_NAME (psym->st_name)) + print_symbol (sym_width, GET_DYNAMIC_NAME (psym->st_name)); + else + printf ("", psym->st_name); + printf ("\n"); + } + printf ("\n"); + + if (data) + free (data); + free (rels); + } + return 1; } static int -process_gnu_liblist (FILE *file) +process_gnu_liblist (FILE * file) { - Elf_Internal_Shdr *section, *string_sec; - Elf32_External_Lib *elib; - char *strtab; + Elf_Internal_Shdr * section; + Elf_Internal_Shdr * string_sec; + Elf32_External_Lib * elib; + char * strtab; size_t strtab_size; size_t cnt; unsigned i; @@ -9025,18 +10200,20 @@ process_gnu_liblist (FILE *file) switch (section->sh_type) { case SHT_GNU_LIBLIST: - if (SECTION_HEADER_INDEX (section->sh_link) >= elf_header.e_shnum) + if (section->sh_link >= elf_header.e_shnum) break; - elib = get_data (NULL, file, section->sh_offset, 1, section->sh_size, - _("liblist")); + elib = (Elf32_External_Lib *) + get_data (NULL, file, section->sh_offset, 1, section->sh_size, + _("liblist")); if (elib == NULL) break; - string_sec = SECTION_HEADER (section->sh_link); + string_sec = section_headers + section->sh_link; - strtab = get_data (NULL, file, string_sec->sh_offset, 1, - string_sec->sh_size, _("liblist string table")); + strtab = (char *) get_data (NULL, file, string_sec->sh_offset, 1, + string_sec->sh_size, + _("liblist string table")); strtab_size = string_sec->sh_size; if (strtab == NULL @@ -9048,7 +10225,7 @@ process_gnu_liblist (FILE *file) printf (_("\nLibrary list section '%s' contains %lu entries:\n"), SECTION_NAME (section), - (long) (section->sh_size / sizeof (Elf32_External_Lib))); + (unsigned long) (section->sh_size / sizeof (Elf32_External_Lib))); puts (" Library Time Stamp Checksum Version Flags"); @@ -9058,7 +10235,7 @@ process_gnu_liblist (FILE *file) Elf32_Lib liblist; time_t time; char timebuf[20]; - struct tm *tmp; + struct tm * tmp; liblist.l_name = BYTE_GET (elib[cnt].l_name); time = BYTE_GET (elib[cnt].l_time_stamp); @@ -9110,6 +10287,10 @@ get_note_type (unsigned e_type) return _("NT_TASKSTRUCT (task structure)"); case NT_PRXFPREG: return _("NT_PRXFPREG (user_xfpregs structure)"); + case NT_PPC_VMX: + return _("NT_PPC_VMX (ppc Altivec registers)"); + case NT_PPC_VSX: + return _("NT_PPC_VSX (ppc VSX registers)"); case NT_PSTATUS: return _("NT_PSTATUS (pstatus structure)"); case NT_FPREGS: @@ -9153,6 +10334,8 @@ get_gnu_elf_note_type (unsigned e_type) return _("NT_GNU_HWCAP (DSO-supplied software HWCAP info)"); case NT_GNU_BUILD_ID: return _("NT_GNU_BUILD_ID (unique build ID bitstring)"); + case NT_GNU_GOLD_VERSION: + return _("NT_GNU_GOLD_VERSION (gold version)"); default: break; } @@ -9229,10 +10412,10 @@ get_netbsd_elfcore_note_type (unsigned e_type) If the value of namesz is zero, there is no name present. */ static int -process_note (Elf_Internal_Note *pnote) +process_note (Elf_Internal_Note * pnote) { - const char *name = pnote->namesz ? pnote->namedata : "(NONE)"; - const char *nt; + const char * name = pnote->namesz ? pnote->namedata : "(NONE)"; + const char * nt; if (pnote->namesz == 0) /* If there is no note name, then use the default set of @@ -9265,16 +10448,17 @@ process_note (Elf_Internal_Note *pnote) static int -process_corefile_note_segment (FILE *file, bfd_vma offset, bfd_vma length) +process_corefile_note_segment (FILE * file, bfd_vma offset, bfd_vma length) { - Elf_External_Note *pnotes; - Elf_External_Note *external; + Elf_External_Note * pnotes; + Elf_External_Note * external; int res = 1; if (length <= 0) return 0; - pnotes = get_data (NULL, file, offset, 1, length, _("notes")); + pnotes = (Elf_External_Note *) get_data (NULL, file, offset, 1, length, + _("notes")); if (!pnotes) return 0; @@ -9284,11 +10468,11 @@ process_corefile_note_segment (FILE *file, bfd_vma offset, bfd_vma length) (unsigned long) offset, (unsigned long) length); printf (_(" Owner\t\tData size\tDescription\n")); - while (external < (Elf_External_Note *)((char *) pnotes + length)) + while (external < (Elf_External_Note *) ((char *) pnotes + length)) { - Elf_External_Note *next; + Elf_External_Note * next; Elf_Internal_Note inote; - char *temp = NULL; + char * temp = NULL; inote.type = BYTE_GET (external->type); inote.namesz = BYTE_GET (external->namesz); @@ -9297,12 +10481,12 @@ process_corefile_note_segment (FILE *file, bfd_vma offset, bfd_vma length) inote.descdata = inote.namedata + align_power (inote.namesz, 2); inote.descpos = offset + (inote.descdata - (char *) pnotes); - next = (Elf_External_Note *)(inote.descdata + align_power (inote.descsz, 2)); + next = (Elf_External_Note *) (inote.descdata + align_power (inote.descsz, 2)); if (((char *) next) > (((char *) pnotes) + length)) { warn (_("corrupt note found at offset %lx into core notes\n"), - (long)((char *)external - (char *)pnotes)); + (unsigned long) ((char *) external - (char *) pnotes)); warn (_(" type: %lx, namesize: %08lx, descsize: %08lx\n"), inote.type, inote.namesz, inote.descsz); break; @@ -9316,7 +10500,7 @@ process_corefile_note_segment (FILE *file, bfd_vma offset, bfd_vma length) namesz. */ if (inote.namedata[inote.namesz] != '\0') { - temp = malloc (inote.namesz + 1); + temp = (char *) malloc (inote.namesz + 1); if (temp == NULL) { @@ -9347,9 +10531,9 @@ process_corefile_note_segment (FILE *file, bfd_vma offset, bfd_vma length) } static int -process_corefile_note_segments (FILE *file) +process_corefile_note_segments (FILE * file) { - Elf_Internal_Phdr *segment; + Elf_Internal_Phdr * segment; unsigned int i; int res = 1; @@ -9370,9 +10554,9 @@ process_corefile_note_segments (FILE *file) } static int -process_note_sections (FILE *file) +process_note_sections (FILE * file) { - Elf_Internal_Shdr *section; + Elf_Internal_Shdr * section; unsigned long i; int res = 1; @@ -9388,7 +10572,7 @@ process_note_sections (FILE *file) } static int -process_notes (FILE *file) +process_notes (FILE * file) { /* If we have not been asked to display the notes then do nothing. */ if (! do_notes) @@ -9406,7 +10590,7 @@ process_notes (FILE *file) } static int -process_arch_specific (FILE *file) +process_arch_specific (FILE * file) { if (! do_arch) return 1; @@ -9429,7 +10613,7 @@ process_arch_specific (FILE *file) } static int -get_file_header (FILE *file) +get_file_header (FILE * file) { /* Read in the identity array. */ if (fread (elf_header.e_ident, EI_NIDENT, 1, file) != 1) @@ -9518,8 +10702,6 @@ get_file_header (FILE *file) get_64bit_section_headers (file, 1); } - is_relocatable = elf_header.e_type == ET_REL; - return 1; } @@ -9528,7 +10710,7 @@ get_file_header (FILE *file) positioned at the start of the ELF object. */ static int -process_object (char *file_name, FILE *file) +process_object (char * file_name, FILE * file) { unsigned int i; @@ -9554,16 +10736,17 @@ process_object (char *file_name, FILE *file) must make sure that the dump_sets array is zeroed out before each object file is processed. */ if (num_dump_sects > num_cmdline_dump_sects) - memset (dump_sects, 0, num_dump_sects); + memset (dump_sects, 0, num_dump_sects * sizeof (* dump_sects)); if (num_cmdline_dump_sects > 0) { if (num_dump_sects == 0) /* A sneaky way of allocating the dump_sects array. */ - request_dump (num_cmdline_dump_sects, 0); + request_dump_bynumber (num_cmdline_dump_sects, 0); assert (num_dump_sects >= num_cmdline_dump_sects); - memcpy (dump_sects, cmdline_dump_sects, num_cmdline_dump_sects); + memcpy (dump_sects, cmdline_dump_sects, + num_cmdline_dump_sects * sizeof (* dump_sects)); } if (! process_file_header ()) @@ -9653,7 +10836,8 @@ process_object (char *file_name, FILE *file) if (section_groups) { - struct group_list *g, *next; + struct group_list * g; + struct group_list * next; for (i = 0; i < group_count; i++) { @@ -9673,24 +10857,98 @@ process_object (char *file_name, FILE *file) return 0; } -/* Process an ELF archive. The file is positioned just after the - ARMAG string. */ +/* Return the path name for a proxy entry in a thin archive, adjusted relative + to the path name of the thin archive itself if necessary. Always returns + a pointer to malloc'ed memory. */ + +static char * +adjust_relative_path (char * file_name, char * name, int name_len) +{ + char * member_file_name; + const char * base_name = lbasename (file_name); + + /* This is a proxy entry for a thin archive member. + If the extended name table contains an absolute path + name, or if the archive is in the current directory, + use the path name as given. Otherwise, we need to + find the member relative to the directory where the + archive is located. */ + if (IS_ABSOLUTE_PATH (name) || base_name == file_name) + { + member_file_name = (char *) malloc (name_len + 1); + if (member_file_name == NULL) + { + error (_("Out of memory\n")); + return NULL; + } + memcpy (member_file_name, name, name_len); + member_file_name[name_len] = '\0'; + } + else + { + /* Concatenate the path components of the archive file name + to the relative path name from the extended name table. */ + size_t prefix_len = base_name - file_name; + member_file_name = (char *) malloc (prefix_len + name_len + 1); + if (member_file_name == NULL) + { + error (_("Out of memory\n")); + return NULL; + } + memcpy (member_file_name, file_name, prefix_len); + memcpy (member_file_name + prefix_len, name, name_len); + member_file_name[prefix_len + name_len] = '\0'; + } + return member_file_name; +} + +/* Structure to hold information about an archive file. */ + +struct archive_info +{ + char * file_name; /* Archive file name. */ + FILE * file; /* Open file descriptor. */ + unsigned long index_num; /* Number of symbols in table. */ + unsigned long * index_array; /* The array of member offsets. */ + char * sym_table; /* The symbol table. */ + unsigned long sym_size; /* Size of the symbol table. */ + char * longnames; /* The long file names table. */ + unsigned long longnames_size; /* Size of the long file names table. */ + unsigned long nested_member_origin; /* Origin in the nested archive of the current member. */ + unsigned long next_arhdr_offset; /* Offset of the next archive header. */ + bfd_boolean is_thin_archive; /* TRUE if this is a thin archive. */ + struct ar_hdr arhdr; /* Current archive header. */ +}; + +/* Read the symbol table and long-name table from an archive. */ static int -process_archive (char *file_name, FILE *file) +setup_archive (struct archive_info * arch, char * file_name, FILE * file, + bfd_boolean is_thin_archive, bfd_boolean read_symbols) { - struct ar_hdr arhdr; size_t got; unsigned long size; - char *longnames = NULL; - unsigned long longnames_size = 0; - size_t file_name_size; - int ret; - - show_name = 1; - got = fread (&arhdr, 1, sizeof arhdr, file); - if (got != sizeof arhdr) + arch->file_name = strdup (file_name); + arch->file = file; + arch->index_num = 0; + arch->index_array = NULL; + arch->sym_table = NULL; + arch->sym_size = 0; + arch->longnames = NULL; + arch->longnames_size = 0; + arch->nested_member_origin = 0; + arch->is_thin_archive = is_thin_archive; + arch->next_arhdr_offset = SARMAG; + + /* Read the first archive member header. */ + if (fseek (file, SARMAG, SEEK_SET) != 0) + { + error (_("%s: failed to seek to first archive header\n"), file_name); + return 1; + } + got = fread (&arch->arhdr, 1, sizeof arch->arhdr, file); + if (got != sizeof arch->arhdr) { if (got == 0) return 0; @@ -9699,157 +10957,540 @@ process_archive (char *file_name, FILE *file) return 1; } - if (const_strneq (arhdr.ar_name, "/ ") - || const_strneq (arhdr.ar_name, "/SYM64/ ")) + /* See if this is the archive symbol table. */ + if (const_strneq (arch->arhdr.ar_name, "/ ") + || const_strneq (arch->arhdr.ar_name, "/SYM64/ ")) { - /* This is the archive symbol table. Skip it. - FIXME: We should have an option to dump it. */ - size = strtoul (arhdr.ar_size, NULL, 10); - if (fseek (file, size + (size & 1), SEEK_CUR) != 0) + size = strtoul (arch->arhdr.ar_size, NULL, 10); + size = size + (size & 1); + + arch->next_arhdr_offset += sizeof arch->arhdr + size; + + if (read_symbols) { - error (_("%s: failed to skip archive symbol table\n"), file_name); - return 1; + unsigned long i; + /* A buffer used to hold numbers read in from an archive index. + These are always 4 bytes long and stored in big-endian format. */ +#define SIZEOF_AR_INDEX_NUMBERS 4 + unsigned char integer_buffer[SIZEOF_AR_INDEX_NUMBERS]; + unsigned char * index_buffer; + + /* Check the size of the archive index. */ + if (size < SIZEOF_AR_INDEX_NUMBERS) + { + error (_("%s: the archive index is empty\n"), file_name); + return 1; + } + + /* Read the numer of entries in the archive index. */ + got = fread (integer_buffer, 1, sizeof integer_buffer, file); + if (got != sizeof (integer_buffer)) + { + error (_("%s: failed to read archive index\n"), file_name); + return 1; + } + arch->index_num = byte_get_big_endian (integer_buffer, sizeof integer_buffer); + size -= SIZEOF_AR_INDEX_NUMBERS; + + /* Read in the archive index. */ + if (size < arch->index_num * SIZEOF_AR_INDEX_NUMBERS) + { + error (_("%s: the archive index is supposed to have %ld entries, but the size in the header is too small\n"), + file_name, arch->index_num); + return 1; + } + index_buffer = (unsigned char *) + malloc (arch->index_num * SIZEOF_AR_INDEX_NUMBERS); + if (index_buffer == NULL) + { + error (_("Out of memory whilst trying to read archive symbol index\n")); + return 1; + } + got = fread (index_buffer, SIZEOF_AR_INDEX_NUMBERS, arch->index_num, file); + if (got != arch->index_num) + { + free (index_buffer); + error (_("%s: failed to read archive index\n"), file_name); + return 1; + } + size -= arch->index_num * SIZEOF_AR_INDEX_NUMBERS; + + /* Convert the index numbers into the host's numeric format. */ + arch->index_array = (long unsigned int *) + malloc (arch->index_num * sizeof (* arch->index_array)); + if (arch->index_array == NULL) + { + free (index_buffer); + error (_("Out of memory whilst trying to convert the archive symbol index\n")); + return 1; + } + + for (i = 0; i < arch->index_num; i++) + arch->index_array[i] = byte_get_big_endian ((unsigned char *) (index_buffer + (i * SIZEOF_AR_INDEX_NUMBERS)), + SIZEOF_AR_INDEX_NUMBERS); + free (index_buffer); + + /* The remaining space in the header is taken up by the symbol table. */ + if (size < 1) + { + error (_("%s: the archive has an index but no symbols\n"), file_name); + return 1; + } + arch->sym_table = (char *) malloc (size); + arch->sym_size = size; + if (arch->sym_table == NULL) + { + error (_("Out of memory whilst trying to read archive index symbol table\n")); + return 1; + } + got = fread (arch->sym_table, 1, size, file); + if (got != size) + { + error (_("%s: failed to read archive index symbol table\n"), file_name); + return 1; + } + } + else + { + if (fseek (file, size, SEEK_CUR) != 0) + { + error (_("%s: failed to skip archive symbol table\n"), file_name); + return 1; + } } - got = fread (&arhdr, 1, sizeof arhdr, file); - if (got != sizeof arhdr) + /* Read the next archive header. */ + got = fread (&arch->arhdr, 1, sizeof arch->arhdr, file); + if (got != sizeof arch->arhdr) { if (got == 0) - return 0; - - error (_("%s: failed to read archive header\n"), file_name); + return 0; + error (_("%s: failed to read archive header following archive index\n"), file_name); return 1; } } + else if (read_symbols) + printf (_("%s has no archive index\n"), file_name); - if (const_strneq (arhdr.ar_name, "// ")) + if (const_strneq (arch->arhdr.ar_name, "// ")) { - /* This is the archive string table holding long member - names. */ + /* This is the archive string table holding long member names. */ + arch->longnames_size = strtoul (arch->arhdr.ar_size, NULL, 10); + arch->next_arhdr_offset += sizeof arch->arhdr + arch->longnames_size; - longnames_size = strtoul (arhdr.ar_size, NULL, 10); - - longnames = malloc (longnames_size); - if (longnames == NULL) + arch->longnames = (char *) malloc (arch->longnames_size); + if (arch->longnames == NULL) { - error (_("Out of memory\n")); + error (_("Out of memory reading long symbol names in archive\n")); return 1; } - if (fread (longnames, longnames_size, 1, file) != 1) + if (fread (arch->longnames, arch->longnames_size, 1, file) != 1) { - free (longnames); - error (_("%s: failed to read string table\n"), file_name); + free (arch->longnames); + arch->longnames = NULL; + error (_("%s: failed to read long symbol name string table\n"), file_name); return 1; } - if ((longnames_size & 1) != 0) + if ((arch->longnames_size & 1) != 0) getc (file); + } - got = fread (&arhdr, 1, sizeof arhdr, file); - if (got != sizeof arhdr) - { - free (longnames); + return 0; +} - if (got == 0) - return 0; +/* Release the memory used for the archive information. */ - error (_("%s: failed to read archive header\n"), file_name); - return 1; - } +static void +release_archive (struct archive_info * arch) +{ + if (arch->file_name != NULL) + free (arch->file_name); + if (arch->index_array != NULL) + free (arch->index_array); + if (arch->sym_table != NULL) + free (arch->sym_table); + if (arch->longnames != NULL) + free (arch->longnames); +} + +/* Open and setup a nested archive, if not already open. */ + +static int +setup_nested_archive (struct archive_info * nested_arch, char * member_file_name) +{ + FILE * member_file; + + /* Have we already setup this archive? */ + if (nested_arch->file_name != NULL + && streq (nested_arch->file_name, member_file_name)) + return 0; + + /* Close previous file and discard cached information. */ + if (nested_arch->file != NULL) + fclose (nested_arch->file); + release_archive (nested_arch); + + member_file = fopen (member_file_name, "rb"); + if (member_file == NULL) + return 1; + return setup_archive (nested_arch, member_file_name, member_file, FALSE, FALSE); +} + +static char * +get_archive_member_name_at (struct archive_info * arch, + unsigned long offset, + struct archive_info * nested_arch); + +/* Get the name of an archive member from the current archive header. + For simple names, this will modify the ar_name field of the current + archive header. For long names, it will return a pointer to the + longnames table. For nested archives, it will open the nested archive + and get the name recursively. NESTED_ARCH is a single-entry cache so + we don't keep rereading the same information from a nested archive. */ + +static char * +get_archive_member_name (struct archive_info * arch, + struct archive_info * nested_arch) +{ + unsigned long j, k; + + if (arch->arhdr.ar_name[0] == '/') + { + /* We have a long name. */ + char * endp; + char * member_file_name; + char * member_name; + + arch->nested_member_origin = 0; + k = j = strtoul (arch->arhdr.ar_name + 1, &endp, 10); + if (arch->is_thin_archive && endp != NULL && * endp == ':') + arch->nested_member_origin = strtoul (endp + 1, NULL, 10); + + while ((j < arch->longnames_size) + && (arch->longnames[j] != '\n') + && (arch->longnames[j] != '\0')) + j++; + if (arch->longnames[j-1] == '/') + j--; + arch->longnames[j] = '\0'; + + if (!arch->is_thin_archive || arch->nested_member_origin == 0) + return arch->longnames + k; + + /* This is a proxy for a member of a nested archive. + Find the name of the member in that archive. */ + member_file_name = adjust_relative_path (arch->file_name, arch->longnames + k, j - k); + if (member_file_name != NULL + && setup_nested_archive (nested_arch, member_file_name) == 0 + && (member_name = get_archive_member_name_at (nested_arch, arch->nested_member_origin, NULL)) != NULL) + { + free (member_file_name); + return member_name; + } + free (member_file_name); + + /* Last resort: just return the name of the nested archive. */ + return arch->longnames + k; + } + + /* We have a normal (short) name. */ + j = 0; + while ((arch->arhdr.ar_name[j] != '/') && (j < 16)) + j++; + arch->arhdr.ar_name[j] = '\0'; + return arch->arhdr.ar_name; +} + +/* Get the name of an archive member at a given OFFSET within an archive ARCH. */ + +static char * +get_archive_member_name_at (struct archive_info * arch, + unsigned long offset, + struct archive_info * nested_arch) +{ + size_t got; + + if (fseek (arch->file, offset, SEEK_SET) != 0) + { + error (_("%s: failed to seek to next file name\n"), arch->file_name); + return NULL; + } + got = fread (&arch->arhdr, 1, sizeof arch->arhdr, arch->file); + if (got != sizeof arch->arhdr) + { + error (_("%s: failed to read archive header\n"), arch->file_name); + return NULL; + } + if (memcmp (arch->arhdr.ar_fmag, ARFMAG, 2) != 0) + { + error (_("%s: did not find a valid archive header\n"), arch->file_name); + return NULL; } - file_name_size = strlen (file_name); - ret = 0; + return get_archive_member_name (arch, nested_arch); +} - while (1) +/* Construct a string showing the name of the archive member, qualified + with the name of the containing archive file. For thin archives, we + use square brackets to denote the indirection. For nested archives, + we show the qualified name of the external member inside the square + brackets (e.g., "thin.a[normal.a(foo.o)]"). */ + +static char * +make_qualified_name (struct archive_info * arch, + struct archive_info * nested_arch, + char * member_name) +{ + size_t len; + char * name; + + len = strlen (arch->file_name) + strlen (member_name) + 3; + if (arch->is_thin_archive && arch->nested_member_origin != 0) + len += strlen (nested_arch->file_name) + 2; + + name = (char *) malloc (len); + if (name == NULL) + { + error (_("Out of memory\n")); + return NULL; + } + + if (arch->is_thin_archive && arch->nested_member_origin != 0) + snprintf (name, len, "%s[%s(%s)]", arch->file_name, nested_arch->file_name, member_name); + else if (arch->is_thin_archive) + snprintf (name, len, "%s[%s]", arch->file_name, member_name); + else + snprintf (name, len, "%s(%s)", arch->file_name, member_name); + + return name; +} + +/* Process an ELF archive. + On entry the file is positioned just after the ARMAG string. */ + +static int +process_archive (char * file_name, FILE * file, bfd_boolean is_thin_archive) +{ + struct archive_info arch; + struct archive_info nested_arch; + size_t got; + size_t file_name_size; + int ret; + + show_name = 1; + + /* The ARCH structure is used to hold information about this archive. */ + arch.file_name = NULL; + arch.file = NULL; + arch.index_array = NULL; + arch.sym_table = NULL; + arch.longnames = NULL; + + /* The NESTED_ARCH structure is used as a single-item cache of information + about a nested archive (when members of a thin archive reside within + another regular archive file). */ + nested_arch.file_name = NULL; + nested_arch.file = NULL; + nested_arch.index_array = NULL; + nested_arch.sym_table = NULL; + nested_arch.longnames = NULL; + + if (setup_archive (&arch, file_name, file, is_thin_archive, do_archive_index) != 0) { - char *name; - char *nameend; - char *namealc; + ret = 1; + goto out; + } - if (arhdr.ar_name[0] == '/') + if (do_archive_index) + { + if (arch.sym_table == NULL) + error (_("%s: unable to dump the index as none was found\n"), file_name); + else { - unsigned long off; + unsigned int i, l; + unsigned long current_pos; - off = strtoul (arhdr.ar_name + 1, NULL, 10); - if (off >= longnames_size) + printf (_("Index of archive %s: (%ld entries, 0x%lx bytes in the symbol table)\n"), + file_name, arch.index_num, arch.sym_size); + current_pos = ftell (file); + + for (i = l = 0; i < arch.index_num; i++) { - error (_("%s: invalid archive string table offset %lu\n"), file_name, off); - ret = 1; - break; + if ((i == 0) || ((i > 0) && (arch.index_array[i] != arch.index_array[i - 1]))) + { + char * member_name; + + member_name = get_archive_member_name_at (&arch, arch.index_array[i], &nested_arch); + + if (member_name != NULL) + { + char * qualified_name = make_qualified_name (&arch, &nested_arch, member_name); + + if (qualified_name != NULL) + { + printf (_("Binary %s contains:\n"), qualified_name); + free (qualified_name); + } + } + } + + if (l >= arch.sym_size) + { + error (_("%s: end of the symbol table reached before the end of the index\n"), + file_name); + break; + } + printf ("\t%s\n", arch.sym_table + l); + l += strlen (arch.sym_table + l) + 1; } - name = longnames + off; - nameend = memchr (name, '/', longnames_size - off); + if (l & 01) + ++l; + if (l < arch.sym_size) + error (_("%s: symbols remain in the index symbol table, but without corresponding entries in the index table\n"), + file_name); + + if (fseek (file, current_pos, SEEK_SET) != 0) + { + error (_("%s: failed to seek back to start of object files in the archive\n"), file_name); + ret = 1; + goto out; + } } - else + + if (!do_dynamic && !do_syms && !do_reloc && !do_unwind && !do_sections + && !do_segments && !do_header && !do_dump && !do_version + && !do_histogram && !do_debugging && !do_arch && !do_notes + && !do_section_groups) { - name = arhdr.ar_name; - nameend = memchr (name, '/', 16); + ret = 0; /* Archive index only. */ + goto out; } + } + + file_name_size = strlen (file_name); + ret = 0; - if (nameend == NULL) + while (1) + { + char * name; + size_t namelen; + char * qualified_name; + + /* Read the next archive header. */ + if (fseek (file, arch.next_arhdr_offset, SEEK_SET) != 0) + { + error (_("%s: failed to seek to next archive header\n"), file_name); + return 1; + } + got = fread (&arch.arhdr, 1, sizeof arch.arhdr, file); + if (got != sizeof arch.arhdr) + { + if (got == 0) + break; + error (_("%s: failed to read archive header\n"), file_name); + ret = 1; + break; + } + if (memcmp (arch.arhdr.ar_fmag, ARFMAG, 2) != 0) + { + error (_("%s: did not find a valid archive header\n"), arch.file_name); + ret = 1; + break; + } + + arch.next_arhdr_offset += sizeof arch.arhdr; + + archive_file_size = strtoul (arch.arhdr.ar_size, NULL, 10); + if (archive_file_size & 01) + ++archive_file_size; + + name = get_archive_member_name (&arch, &nested_arch); + if (name == NULL) { error (_("%s: bad archive file name\n"), file_name); ret = 1; break; } + namelen = strlen (name); - namealc = malloc (file_name_size + (nameend - name) + 3); - if (namealc == NULL) + qualified_name = make_qualified_name (&arch, &nested_arch, name); + if (qualified_name == NULL) { - error (_("Out of memory\n")); + error (_("%s: bad archive file name\n"), file_name); ret = 1; break; } - memcpy (namealc, file_name, file_name_size); - namealc[file_name_size] = '('; - memcpy (namealc + file_name_size + 1, name, nameend - name); - namealc[file_name_size + 1 + (nameend - name)] = ')'; - namealc[file_name_size + 2 + (nameend - name)] = '\0'; - - archive_file_offset = ftell (file); - archive_file_size = strtoul (arhdr.ar_size, NULL, 10); - - ret |= process_object (namealc, file); - - free (namealc); - - if (fseek (file, - (archive_file_offset - + archive_file_size - + (archive_file_size & 1)), - SEEK_SET) != 0) - { - error (_("%s: failed to seek to next archive header\n"), file_name); - ret = 1; - break; - } + if (is_thin_archive && arch.nested_member_origin == 0) + { + /* This is a proxy for an external member of a thin archive. */ + FILE * member_file; + char * member_file_name = adjust_relative_path (file_name, name, namelen); + if (member_file_name == NULL) + { + ret = 1; + break; + } + + member_file = fopen (member_file_name, "rb"); + if (member_file == NULL) + { + error (_("Input file '%s' is not readable.\n"), member_file_name); + free (member_file_name); + ret = 1; + break; + } + + archive_file_offset = arch.nested_member_origin; + + ret |= process_object (qualified_name, member_file); + + fclose (member_file); + free (member_file_name); + } + else if (is_thin_archive) + { + /* This is a proxy for a member of a nested archive. */ + archive_file_offset = arch.nested_member_origin + sizeof arch.arhdr; + + /* The nested archive file will have been opened and setup by + get_archive_member_name. */ + if (fseek (nested_arch.file, archive_file_offset, SEEK_SET) != 0) + { + error (_("%s: failed to seek to archive member.\n"), nested_arch.file_name); + ret = 1; + break; + } + + ret |= process_object (qualified_name, nested_arch.file); + } + else + { + archive_file_offset = arch.next_arhdr_offset; + arch.next_arhdr_offset += archive_file_size; - got = fread (&arhdr, 1, sizeof arhdr, file); - if (got != sizeof arhdr) - { - if (got == 0) - break; + ret |= process_object (qualified_name, file); + } - error (_("%s: failed to read archive header\n"), file_name); - ret = 1; - break; - } + free (qualified_name); } - if (longnames != 0) - free (longnames); + out: + if (nested_arch.file != NULL) + fclose (nested_arch.file); + release_archive (&nested_arch); + release_archive (&arch); return ret; } static int -process_file (char *file_name) +process_file (char * file_name) { - FILE *file; + FILE * file; struct stat statbuf; char armag[SARMAG]; int ret; @@ -9879,15 +11520,21 @@ process_file (char *file_name) if (fread (armag, SARMAG, 1, file) != 1) { - error (_("%s: Failed to read file header\n"), file_name); + error (_("%s: Failed to read file's magic number\n"), file_name); fclose (file); return 1; } if (memcmp (armag, ARMAG, SARMAG) == 0) - ret = process_archive (file_name, file); + ret = process_archive (file_name, file, FALSE); + else if (memcmp (armag, ARMAGT, SARMAG) == 0) + ret = process_archive (file_name, file, TRUE); else { + if (do_archive_index) + error (_("File %s is not an archive so its index cannot be displayed.\n"), + file_name); + rewind (file); archive_file_size = archive_file_offset = 0; ret = process_object (file_name, file); @@ -9904,7 +11551,7 @@ process_file (char *file_name) symbols. */ void -print_address (unsigned int addr, FILE *outfile) +print_address (unsigned int addr, FILE * outfile) { fprintf (outfile,"0x%8.8x", addr); } @@ -9918,7 +11565,7 @@ db_task_printsym (unsigned int addr) #endif int -main (int argc, char **argv) +main (int argc, char ** argv) { int err; @@ -9938,12 +11585,14 @@ main (int argc, char **argv) if (num_dump_sects > 0) { /* Make a copy of the dump_sects array. */ - cmdline_dump_sects = malloc (num_dump_sects); + cmdline_dump_sects = (dump_type *) + malloc (num_dump_sects * sizeof (* dump_sects)); if (cmdline_dump_sects == NULL) error (_("Out of memory allocating dump request table.\n")); else { - memcpy (cmdline_dump_sects, dump_sects, num_dump_sects); + memcpy (cmdline_dump_sects, dump_sects, + num_dump_sects * sizeof (* dump_sects)); num_cmdline_dump_sects = num_dump_sects; } } diff --git a/binutils/rename.c b/binutils/rename.c index 6ae4d29..c07150c 100644 --- a/binutils/rename.c +++ b/binutils/rename.c @@ -1,5 +1,5 @@ /* rename.c -- rename a file, preserving symlinks. - Copyright 1999, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 1999, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -32,12 +32,6 @@ #endif /* HAVE_UTIMES */ #endif /* ! HAVE_GOOD_UTIME_H */ -/* We need to open the file in binary modes on system where that makes - a difference. */ -#ifndef O_BINARY -#define O_BINARY 0 -#endif - #if ! defined (_WIN32) || defined (__CYGWIN32__) static int simple_copy (const char *, const char *); @@ -162,7 +156,7 @@ smart_rename (const char *from, const char *to, int preserve_dates ATTRIBUTE_UNU if (ret != 0) { /* We have to clean up here. */ - non_fatal (_("unable to rename '%s' reason: %s"), to, strerror (errno)); + non_fatal (_("unable to rename '%s'; reason: %s"), to, strerror (errno)); unlink (from); } #else @@ -200,7 +194,7 @@ smart_rename (const char *from, const char *to, int preserve_dates ATTRIBUTE_UNU else { /* We have to clean up here. */ - non_fatal (_("unable to rename '%s' reason: %s"), to, strerror (errno)); + non_fatal (_("unable to rename '%s'; reason: %s"), to, strerror (errno)); unlink (from); } } @@ -208,7 +202,7 @@ smart_rename (const char *from, const char *to, int preserve_dates ATTRIBUTE_UNU { ret = simple_copy (from, to); if (ret != 0) - non_fatal (_("unable to copy file '%s' reason: %s"), to, strerror (errno)); + non_fatal (_("unable to copy file '%s'; reason: %s"), to, strerror (errno)); if (preserve_dates) set_times (to, &s); diff --git a/binutils/resbin.c b/binutils/resbin.c index fbd8b9b..ad81906 100644 --- a/binutils/resbin.c +++ b/binutils/resbin.c @@ -1,5 +1,5 @@ /* resbin.c -- manipulate the Windows binary resource format. - Copyright 1997, 1998, 1999, 2002, 2003, 2007 + Copyright 1997, 1998, 1999, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Rewritten by Kai Tietz, Onevision. diff --git a/binutils/rescoff.c b/binutils/rescoff.c index e19f58a..525629d 100644 --- a/binutils/rescoff.c +++ b/binutils/rescoff.c @@ -1,5 +1,5 @@ /* rescoff.c -- read and write resources in Windows COFF files. - Copyright 1997, 1998, 1999, 2000, 2003, 2007 + Copyright 1997, 1998, 1999, 2000, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Rewritten by Kai Tietz, Onevision. @@ -455,15 +455,12 @@ write_coff_file (const char *filename, const char *target, if (! bfd_set_file_flags (abfd, HAS_SYMS | HAS_RELOC)) bfd_fatal ("bfd_set_file_flags"); - sec = bfd_make_section (abfd, ".rsrc"); + sec = bfd_make_section_with_flags (abfd, ".rsrc", + (SEC_HAS_CONTENTS | SEC_ALLOC + | SEC_LOAD | SEC_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"); - if (! bfd_set_symtab (abfd, sec->symbol_ptr_ptr, 1)) bfd_fatal ("bfd_set_symtab"); diff --git a/binutils/resrc.c b/binutils/resrc.c index 65357fe..fcd15c7 100644 --- a/binutils/resrc.c +++ b/binutils/resrc.c @@ -1,5 +1,5 @@ /* resrc.c -- read and write Windows rc files. - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007 + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Rewritten by Kai Tietz, Onevision. @@ -436,41 +436,48 @@ read_rc_file (const char *filename, const char *preprocessor, char *cmd; const char *fnquotes = (filename_need_quotes (filename) ? "\"" : ""); + if (filename == NULL) + filename = "-"; /* Setup the default resource import path taken from input file. */ - if (strchr (filename, '/') != NULL || strchr (filename, '\\') != NULL) + else if (strchr (filename, '/') != NULL || strchr (filename, '\\') != NULL) { - char *e, *c; + char *edit, *dir; if (filename[0] == '/' || filename[0] == '\\' || filename[1] == ':') - e = c = xstrdup (filename); + /* Absolute path. */ + edit = dir = xstrdup (filename); else { - e = c = xmalloc (strlen (filename) + 3); - sprintf (c, "./%s", filename); + /* Relative path. */ + edit = dir = xmalloc (strlen (filename) + 3); + sprintf (dir, "./%s", filename); } - e += strlen (c); - while (e > c && (e[-1] != '\\' && e[-1] != '/')) + + /* Walk dir backwards stopping at the first directory separator. */ + edit += strlen (dir); + while (edit > dir && (edit[-1] != '\\' && edit[-1] != '/')) { - --e; - e[0] = 0; + --edit; + edit[0] = 0; } + /* Cut off trailing slash. */ - --e; - e[0] = 0; - while ((e = strchr (c, '\\')) != NULL) - *e = '/'; + --edit; + edit[0] = 0; + + /* Convert all back slashes to forward slashes. */ + while ((edit = strchr (dir, '\\')) != NULL) + *edit = '/'; - windres_add_include_dir (e); + windres_add_include_dir (dir); } istream_type = (use_temp_file) ? ISTREAM_FILE : ISTREAM_PIPE; if (preprocargs == NULL) preprocargs = ""; - if (filename == NULL) - filename = "-"; if (preprocessor) { @@ -588,7 +595,19 @@ close_input_stream (void) else { if (cpp_pipe != NULL) - pclose (cpp_pipe); + { + int err; + err = pclose (cpp_pipe); + /* We are reading from a pipe, therefore we don't + know if cpp failed or succeeded until pclose. */ + if (err != 0 || errno == ECHILD) + { + /* Since this is also run via xatexit, safeguard. */ + cpp_pipe = NULL; + cpp_temp_file = NULL; + fatal (_("preprocessing failed.")); + } + } } /* Since this is also run via xatexit, safeguard. */ @@ -666,7 +685,8 @@ get_data (FILE *e, bfd_byte *p, rc_uint_type c, const char *msg) if (got == c) return; - fatal (_("%s: read of %lu returned %lu"), msg, (long) c, (long) got); + fatal (_("%s: read of %lu returned %lu"), + msg, (unsigned long) c, (unsigned long) got); } /* Define an accelerator resource. */ @@ -3042,10 +3062,10 @@ write_rc_datablock (FILE *e, rc_uint_type length, const bfd_byte *data, int has_ { if (k == 0) plen = fprintf (e, "0x%lxL", - (long) windres_get_32 (&wrtarget, data + i, length - i)); + (unsigned 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; + (unsigned long) windres_get_32 (&wrtarget, data + i, length - i)) - 1; if (has_next || (i + 4) < length) { if (plen>0 && plen < 11) @@ -3191,7 +3211,7 @@ write_rc_stringtable (FILE *e, const rc_res_id *name, { if (stringtable->strings[i].length != 0) { - fprintf (e, " %lu, ", (long) offset + i); + fprintf (e, " %lu, ", (unsigned long) offset + i); unicode_print_quoted (e, stringtable->strings[i].string, stringtable->strings[i].length); fprintf (e, "\n"); diff --git a/binutils/resres.c b/binutils/resres.c index 49fb3fd..c4eb722 100644 --- a/binutils/resres.c +++ b/binutils/resres.c @@ -1,5 +1,5 @@ /* resres.c: read_res_file and write_res_file implementation for windres. - Copyright 1998, 1999, 2001, 2002, 2007 + Copyright 1998, 1999, 2001, 2002, 2005, 2007, 2008 Free Software Foundation, Inc. Written by Anders Norlander . Rewritten by Kai Tietz, Onevision. @@ -128,13 +128,11 @@ write_res_file (const char *fn,const rc_res_directory *resdir) filename = fn; abfd = windres_open_as_binary (filename, 0); - sec = bfd_make_section (abfd, ".data"); + sec = bfd_make_section_with_flags (abfd, ".data", + (SEC_HAS_CONTENTS | SEC_ALLOC + | SEC_LOAD | SEC_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; @@ -157,8 +155,8 @@ write_res_file (const char *fn,const rc_res_directory *resdir) (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); + fatal ("res write failed with different sizes (%lu/%lu).", + (unsigned long) sec_length, (unsigned long) sec_length_wrote); bfd_close (abfd); return; diff --git a/binutils/size.c b/binutils/size.c index f035cab..835aaa7 100644 --- a/binutils/size.c +++ b/binutils/size.c @@ -1,6 +1,7 @@ /* 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, 2006, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 + Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -272,7 +273,7 @@ calculate_common_size (bfd *abfd) if (storage < 0) bfd_fatal (bfd_get_filename (abfd)); if (storage) - syms = xmalloc (storage); + syms = (asymbol **) xmalloc (storage); symcount = bfd_canonicalize_symtab (abfd, syms); if (symcount < 0) @@ -406,17 +407,15 @@ display_file (char *filename) } } -/* This is what lexical functions are for. */ - static int size_number (bfd_size_type num) { char buffer[40]; sprintf (buffer, - (radix == decimal ? "%lu" : - ((radix == octal) ? "0%lo" : "0x%lx")), - (unsigned long) num); + (radix == decimal ? "%" BFD_VMA_FMT "u" : + ((radix == octal) ? "0%" BFD_VMA_FMT "o" : "0x%" BFD_VMA_FMT "x")), + num); return strlen (buffer); } @@ -427,9 +426,9 @@ rprint_number (int width, bfd_size_type num) char buffer[40]; sprintf (buffer, - (radix == decimal ? "%lu" : - ((radix == octal) ? "0%lo" : "0x%lx")), - (unsigned long) num); + (radix == decimal ? "%" BFD_VMA_FMT "u" : + ((radix == octal) ? "0%" BFD_VMA_FMT "o" : "0x%" BFD_VMA_FMT "x")), + num); printf ("%*s", width, buffer); } diff --git a/binutils/srconv.c b/binutils/srconv.c index 914c260..efccd66 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, 2007 Free Software Foundation, Inc. + 2005, 2007, 2008 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -176,7 +176,9 @@ checksum (FILE *file, unsigned char *ptr, int size, int code) /* Glue on a checksum too. */ ptr[bytes] = ~sum; - fwrite (ptr, bytes + 1, 1, file); + if (fwrite (ptr, bytes + 1, 1, file) != 1) + /* FIXME: Return error status. */ + abort (); } @@ -299,7 +301,10 @@ wr_tr (void) 0x03, /* RL */ 0xfd, /* CS */ }; - fwrite (b, 1, sizeof (b), file); + + if (fwrite (b, sizeof (b), 1, file) != 1) + /* FIXME: Return error status. */ + abort (); } static void @@ -410,7 +415,7 @@ wr_hd (struct coff_ofile *p) abort (); } - if (! bfd_get_file_flags(abfd) & EXEC_P) + if (! (bfd_get_file_flags(abfd) & EXEC_P)) { hd.ep = 0; } @@ -1452,7 +1457,10 @@ wr_cs (void) 0x00, /* dot */ 0xDE /* CS */ }; - fwrite (b, 1, sizeof (b), file); + + if (fwrite (b, sizeof (b), 1, file) != 1) + /* FIXME: Return error status. */ + abort (); } /* Write out the SC records for a unit. Create an SC diff --git a/binutils/stabs.c b/binutils/stabs.c index ea0a61e..ed9992e 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, - 2006, 2007 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008 Free Software Foundation, Inc. Written by Ian Lance Taylor . This file is part of GNU Binutils. @@ -1105,6 +1105,26 @@ parse_stab_string (void *dhandle, struct stab_handle *info, int stabtype, return FALSE; break; + case 'Y': + /* SUNPro C++ Namespace =Yn0. */ + /* Skip the namespace mapping, as it is not used now. */ + if (*(++p) == 'n' && *(++p) == '0') + { + /* =Yn0name; */ + while (*p != ';') + ++p; + ++p; + return TRUE; + } + /* TODO SUNPro C++ support: + Support default arguments after F,P parameters + Ya = Anonymous unions + YM,YD = Pointers to class members + YT,YI = Templates + YR = Run-time type information (RTTI) */ + + /* Fall through. */ + default: bad_stab (string); return FALSE; @@ -1122,7 +1142,7 @@ parse_stab_string (void *dhandle, struct stab_handle *info, int stabtype, store the slot used if the type is being defined. */ static debug_type -parse_stab_type (void *dhandle, struct stab_handle *info, const char *typename, const char **pp, debug_type **slotp) +parse_stab_type (void *dhandle, struct stab_handle *info, const char *type_name, const char **pp, debug_type **slotp) { const char *orig; int typenums[2]; @@ -1286,9 +1306,9 @@ parse_stab_type (void *dhandle, struct stab_handle *info, const char *typename, fleep:T20=xsfleep: which define structures in terms of themselves. We need to tell the caller to avoid building a circular structure. */ - if (typename != NULL - && strncmp (typename, *pp, p - *pp) == 0 - && typename[p - *pp] == '\0') + if (type_name != NULL + && strncmp (type_name, *pp, p - *pp) == 0 + && type_name[p - *pp] == '\0') info->self_crossref = TRUE; dtype = stab_find_tagged_type (dhandle, info, *pp, p - *pp, code); @@ -1519,7 +1539,7 @@ parse_stab_type (void *dhandle, struct stab_handle *info, const char *typename, case 'r': /* Range type. */ - dtype = parse_stab_range_type (dhandle, info, typename, pp, typenums); + dtype = parse_stab_range_type (dhandle, info, type_name, pp, typenums); break; case 'b': @@ -1541,7 +1561,7 @@ parse_stab_type (void *dhandle, struct stab_handle *info, const char *typename, case 's': case 'u': /* Struct or union type. */ - dtype = parse_stab_struct_type (dhandle, info, typename, pp, + dtype = parse_stab_struct_type (dhandle, info, type_name, pp, descriptor == 's', typenums); break; @@ -1631,7 +1651,7 @@ parse_stab_type_number (const char **pp, int *typenums) /* Parse a range type. */ static debug_type -parse_stab_range_type (void *dhandle, struct stab_handle *info, const char *typename, const char **pp, const int *typenums) +parse_stab_range_type (void *dhandle, struct stab_handle *info, const char *type_name, const char **pp, const int *typenums) { const char *orig; int rangenums[2]; @@ -1730,11 +1750,11 @@ parse_stab_range_type (void *dhandle, struct stab_handle *info, const char *type long long int:t6=r1;0;-1; long long unsigned int:t7=r1;0;-1; We hack here to handle this reasonably. */ - if (typename != NULL) + if (type_name != NULL) { - if (strcmp (typename, "long long int") == 0) + if (strcmp (type_name, "long long int") == 0) return debug_make_int_type (dhandle, 8, FALSE); - else if (strcmp (typename, "long long unsigned int") == 0) + else if (strcmp (type_name, "long long unsigned int") == 0) return debug_make_int_type (dhandle, 8, TRUE); } /* FIXME: The size here really depends upon the target. */ @@ -1837,11 +1857,13 @@ parse_stab_sun_builtin_type (void *dhandle, const char **pp) } ++*pp; - /* For some odd reason, all forms of char put a c here. This is strange - because no other type has this honor. We can safely ignore this because - we actually determine 'char'acterness by the number of bits specified in - the descriptor. */ - if (**pp == 'c') + /* OpenSolaris source code indicates that one of "cbv" characters + can come next and specify the intrinsic 'iformat' encoding. + 'c' is character encoding, 'b' is boolean encoding, and 'v' is + varargs encoding. This field can be safely ignored because + the type of the field is determined from the bitwidth extracted + below. */ + if (**pp == 'c' || **pp == 'b' || **pp == 'v') ++*pp; /* The first number appears to be the number of bytes occupied @@ -2095,7 +2117,7 @@ parse_stab_baseclasses (void *dhandle, struct stab_handle *info, for (i = 0; i < c; i++) { - bfd_boolean virtual; + bfd_boolean is_virtual; enum debug_visibility visibility; bfd_vma bitpos; debug_type type; @@ -2103,14 +2125,14 @@ parse_stab_baseclasses (void *dhandle, struct stab_handle *info, switch (**pp) { case '0': - virtual = FALSE; + is_virtual = FALSE; break; case '1': - virtual = TRUE; + is_virtual = TRUE; break; default: warn_stab (orig, _("unknown virtual character for baseclass")); - virtual = FALSE; + is_virtual = FALSE; break; } ++*pp; @@ -2149,7 +2171,7 @@ parse_stab_baseclasses (void *dhandle, struct stab_handle *info, if (type == DEBUG_TYPE_NULL) return FALSE; - classes[i] = debug_make_baseclass (dhandle, type, bitpos, virtual, + classes[i] = debug_make_baseclass (dhandle, type, bitpos, is_virtual, visibility); if (classes[i] == DEBUG_BASECLASS_NULL) return FALSE; @@ -2274,7 +2296,7 @@ parse_stab_cpp_abbrev (void *dhandle, struct stab_handle *info, int cpp_abbrev; debug_type context; const char *name; - const char *typename; + const char *type_name; debug_type type; bfd_vma bitpos; @@ -2310,13 +2332,13 @@ parse_stab_cpp_abbrev (void *dhandle, struct stab_handle *info, break; case 'b': /* $vb -- a virtual bsomethingorother */ - typename = debug_get_type_name (dhandle, context); - if (typename == NULL) + type_name = debug_get_type_name (dhandle, context); + if (type_name == NULL) { warn_stab (orig, _("unnamed $vb type")); - typename = "FOO"; + type_name = "FOO"; } - name = concat ("_vb$", typename, (const char *) NULL); + name = concat ("_vb$", type_name, (const char *) NULL); break; default: warn_stab (orig, _("unrecognized C++ abbreviation")); diff --git a/binutils/strings.c b/binutils/strings.c index 11e7608..dc2d8f2 100644 --- a/binutils/strings.c +++ b/binutils/strings.c @@ -1,6 +1,7 @@ /* strings -- print the strings of printable characters in files Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + 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,6 +54,7 @@ -h Print the usage message on the standard output. --version + -V -v Print the program version number. Written by Richard Stallman @@ -66,23 +68,6 @@ #include #include "bucomm.h" -/* Some platforms need to put stdin into binary mode, to read - binary files. */ -#ifdef HAVE_SETMODE -#ifndef O_BINARY -#ifdef _O_BINARY -#define O_BINARY _O_BINARY -#define setmode _setmode -#else -#define O_BINARY 0 -#endif -#endif -#if O_BINARY -#include -#define SET_BINARY(f) do { if (!isatty (f)) setmode (f,O_BINARY); } while (0) -#endif -#endif - #define STRING_ISGRAPHIC(c) \ ( (c) >= 0 \ && (c) <= 255 \ @@ -160,7 +145,6 @@ typedef struct static void strings_a_section (bfd *, asection *, void *); static bfd_boolean strings_object_file (const char *); static bfd_boolean strings_file (char *file); -static int integer_arg (char *s); static void print_strings (const char *, FILE *, file_off, int, int, char *); static void usage (FILE *, int); static long get_char (FILE *, file_off *, int *, char **); @@ -173,6 +157,8 @@ main (int argc, char **argv) int optc; int exit_status = 0; bfd_boolean files_given = FALSE; + char *s; + int numeric_opt = 0; #if defined (HAVE_SETLOCALE) setlocale (LC_ALL, ""); @@ -185,7 +171,7 @@ main (int argc, char **argv) expandargv (&argc, &argv); - string_min = -1; + string_min = 4; print_addresses = FALSE; print_filenames = FALSE; datasection_only = TRUE; @@ -210,9 +196,9 @@ main (int argc, char **argv) usage (stdout, 0); case 'n': - string_min = integer_arg (optarg); - if (string_min < 1) - fatal (_("invalid number %s"), optarg); + string_min = (int) strtoul (optarg, &s, 0); + if (s != NULL && *s != 0) + fatal (_("invalid integer argument %s"), optarg); break; case 'o': @@ -262,16 +248,19 @@ main (int argc, char **argv) usage (stderr, 1); default: - if (string_min < 0) - string_min = optc - '0'; - else - string_min = string_min * 10 + optc - '0'; + numeric_opt = optind; break; } } - if (string_min < 0) - string_min = 4; + if (numeric_opt != 0) + { + string_min = (int) strtoul (argv[numeric_opt - 1] + 1, &s, 0); + if (s != NULL && *s != 0) + fatal (_("invalid integer argument %s"), argv[numeric_opt - 1] + 1); + } + if (string_min < 1) + fatal (_("invalid minimum string length %d"), string_min); switch (encoding) { @@ -297,9 +286,7 @@ main (int argc, char **argv) if (optind >= argc) { datasection_only = FALSE; -#ifdef SET_BINARY SET_BINARY (fileno (stdin)); -#endif print_strings ("{standard input}", stdin, 0, 0, 0, (char *) NULL); files_given = TRUE; } @@ -375,7 +362,7 @@ strings_a_section (bfd *abfd, asection *sect, void *arg) got_a_section = TRUE; print_strings (filename_and_sizep->filename, NULL, sect->filepos, - 0, sectsize, mem); + 0, sectsize, (char *) mem); } free (mem); @@ -593,14 +580,18 @@ print_strings (const char *filename, FILE *stream, file_off address, case 8: #if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2) if (sizeof (start) > sizeof (long)) - printf ("%7Lo ", (unsigned long long) start); - else + { +#ifndef __MSVCRT__ + printf ("%7llo ", (unsigned long long) start); #else -# if !BFD_HOST_64BIT_LONG + printf ("%7I64o ", (unsigned long long) start); +#endif + } + else +#elif !BFD_HOST_64BIT_LONG if (start != (unsigned long) start) printf ("++%7lo ", (unsigned long) start); else -# endif #endif printf ("%7lo ", (unsigned long) start); break; @@ -608,14 +599,18 @@ print_strings (const char *filename, FILE *stream, file_off address, case 10: #if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2) if (sizeof (start) > sizeof (long)) - printf ("%7Ld ", (unsigned long long) start); - else + { +#ifndef __MSVCRT__ + printf ("%7lld ", (unsigned long long) start); #else -# if !BFD_HOST_64BIT_LONG + printf ("%7I64d ", (unsigned long long) start); +#endif + } + else +#elif !BFD_HOST_64BIT_LONG if (start != (unsigned long) start) printf ("++%7ld ", (unsigned long) start); else -# endif #endif printf ("%7ld ", (long) start); break; @@ -623,15 +618,19 @@ print_strings (const char *filename, FILE *stream, file_off address, case 16: #if __STDC_VERSION__ >= 199901L || (defined(__GNUC__) && __GNUC__ >= 2) if (sizeof (start) > sizeof (long)) - printf ("%7Lx ", (unsigned long long) start); - else + { +#ifndef __MSVCRT__ + printf ("%7llx ", (unsigned long long) start); #else -# if !BFD_HOST_64BIT_LONG + printf ("%7I64x ", (unsigned long long) start); +#endif + } + else +#elif !BFD_HOST_64BIT_LONG if (start != (unsigned long) start) printf ("%lx%8.8lx ", (unsigned long) (start >> 32), (unsigned long) (start & 0xffffffff)); else -# endif #endif printf ("%7lx ", (unsigned long) start); break; @@ -654,51 +653,6 @@ print_strings (const char *filename, FILE *stream, file_off address, } } -/* Parse string S as an integer, using decimal radix by default, - but allowing octal and hex numbers as in C. */ - -static int -integer_arg (char *s) -{ - int value; - int radix = 10; - char *p = s; - int c; - - if (*p != '0') - radix = 10; - else if (*++p == 'x') - { - radix = 16; - p++; - } - else - radix = 8; - - value = 0; - while (((c = *p++) >= '0' && c <= '9') - || (radix == 16 && (c & ~40) >= 'A' && (c & ~40) <= 'Z')) - { - value *= radix; - if (c >= '0' && c <= '9') - value += c - '0'; - else - value += (c & ~40) - 'A'; - } - - if (c == 'b') - value *= 512; - else if (c == 'B') - value *= 1024; - else - p--; - - if (*p) - fatal (_("invalid integer argument %s"), s); - - return value; -} - static void usage (FILE *stream, int status) { @@ -708,7 +662,7 @@ usage (FILE *stream, int status) -a - --all Scan the entire file, not just the data section\n\ -f --print-file-name Print the name of the file before each string\n\ -n --bytes=[number] Locate & print any NUL-terminated sequence of at\n\ - - least [number] characters (default 4).\n\ + - least [number] characters (default 4).\n\ -t --radix={o,d,x} Print the location of the string in base 8, 10 or 16\n\ -o An alias for --radix=o\n\ -T --target= Specify the binary file format\n\ @@ -716,7 +670,7 @@ usage (FILE *stream, int status) s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit\n\ @ Read options from \n\ -h --help Display this information\n\ - -v --version Print the program's version number\n")); + -v -V --version Print the program's version number\n")); list_supported_targets (program_name, stream); if (REPORT_BUGS_TO[0] && status == 0) fprintf (stream, _("Report bugs to %s\n"), REPORT_BUGS_TO); diff --git a/binutils/sysdep.h b/binutils/sysdep.h index 3ac45fa..e573637 100644 --- a/binutils/sysdep.h +++ b/binutils/sysdep.h @@ -1,6 +1,7 @@ /* 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. + 2001, 2002, 2003, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -21,12 +22,12 @@ #ifndef _BIN_SYSDEP_H #define _BIN_SYSDEP_H +#include "alloca-conf.h" #include "ansidecl.h" #include #include #include "bfdver.h" -#include "config.h" #include @@ -68,6 +69,8 @@ extern char *strrchr (); #endif #endif +#include "binary-io.h" + #if !HAVE_DECL_STPCPY extern char *stpcpy (char *, const char *); #endif @@ -120,23 +123,6 @@ extern int vsnprintf(char *, size_t, const char *, va_list); #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 -# 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 @@ -171,4 +157,23 @@ void *alloca (); /* Used by ar.c and objcopy.c. */ #define BUFSIZE 8192 +/* For PATH_MAX. */ +#ifdef HAVE_LIMITS_H +#include +#endif + +#ifndef PATH_MAX +/* For MAXPATHLEN. */ +# ifdef HAVE_SYS_PARAM_H +# include +# endif +# ifndef PATH_MAX +# ifdef MAXPATHLEN +# define PATH_MAX MAXPATHLEN +# else +# define PATH_MAX 1024 +# endif +# endif +#endif + #endif /* _BIN_SYSDEP_H */ diff --git a/binutils/sysdump.c b/binutils/sysdump.c index 6b3fbda..9f50d65 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, 2007 + Copyright 1994, 1995, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -119,8 +119,15 @@ fillup (unsigned char *ptr) int sum; int i; - size = getc (file) - 2; - fread (ptr, 1, size, file); + size = getc (file); + if (size == EOF + || size <= 2) + return 0; + + size -= 2; + if (fread (ptr, size, 1, file) != 1) + return 0; + sum = code + size + 2; for (i = 0; i < size; i++) @@ -132,7 +139,7 @@ fillup (unsigned char *ptr) if (dump) dh (ptr, size); - return size - 1; + return size; } static barray @@ -522,8 +529,7 @@ tab (int i, char *s) if (s) { p (); - printf (s); - printf ("\n"); + puts (s); } } diff --git a/binutils/sysinfo.c b/binutils/sysinfo.c index f1c7a4b..53b151f 100644 --- a/binutils/sysinfo.c +++ b/binutils/sysinfo.c @@ -130,7 +130,7 @@ typedef union YYSTYPE int i; char *s; } -/* Line 187 of yacc.c. */ +/* Line 193 of yacc.c. */ #line 135 "sysinfo.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ @@ -194,7 +194,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -625,7 +625,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ diff --git a/binutils/sysinfo.h b/binutils/sysinfo.h index 16bbbba..7515e22 100644 --- a/binutils/sysinfo.h +++ b/binutils/sysinfo.h @@ -65,7 +65,7 @@ typedef union YYSTYPE int i; char *s; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 70 "sysinfo.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/binutils/syslex.c b/binutils/syslex.c index aba400a..5f17830 100644 --- a/binutils/syslex.c +++ b/binutils/syslex.c @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 33 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -30,7 +30,7 @@ /* C99 systems have . Non-C99 systems may or may not. */ -#if __STDC_VERSION__ >= 199901L +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. @@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t; #else /* ! __cplusplus */ -#if __STDC__ +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) #define YY_USE_CONST -#endif /* __STDC__ */ +#endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST @@ -151,7 +152,12 @@ typedef unsigned int flex_uint32_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int yyleng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; extern FILE *yyin, *yyout; @@ -177,16 +183,6 @@ extern FILE *yyin, *yyout; #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). - */ - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef unsigned int yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -204,7 +200,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -274,8 +270,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; @@ -303,7 +299,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); @@ -538,7 +534,7 @@ static int yywrap (void) { return 1; } #endif extern int yylex (void); -#line 542 "syslex.c" +#line 538 "syslex.c" #define INITIAL 0 @@ -556,6 +552,35 @@ extern int yylex (void); static int yy_init_globals (void ); +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + /* Macros after this point can all be overridden by user definitions in * section 1. */ @@ -598,7 +623,7 @@ static int input (void ); /* 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 ) +#define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -609,7 +634,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -693,7 +718,7 @@ YY_DECL #line 39 "syslex.l" -#line 697 "syslex.c" +#line 722 "syslex.c" if ( !(yy_init) ) { @@ -914,7 +939,7 @@ YY_RULE_SETUP #line 80 "syslex.l" ECHO; YY_BREAK -#line 918 "syslex.c" +#line 943 "syslex.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1100,7 +1125,7 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -1114,7 +1139,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -1145,7 +1170,7 @@ static int yy_get_next_buffer (void) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } @@ -1169,6 +1194,14 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; @@ -1247,7 +1280,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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 yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -1296,7 +1329,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -1320,7 +1353,7 @@ static int yy_get_next_buffer (void) case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) - return EOF; + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -1572,7 +1605,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -1584,7 +1617,9 @@ static void yyensure_buffer_stack (void) (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); - + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; @@ -1602,6 +1637,8 @@ static void yyensure_buffer_stack (void) ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -1665,12 +1702,11 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; - yy_size_t n; - int i; + yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -1752,7 +1788,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } diff --git a/binutils/testsuite/ChangeLog b/binutils/testsuite/ChangeLog index 46ba568..bbee66a 100644 --- a/binutils/testsuite/ChangeLog +++ b/binutils/testsuite/ChangeLog @@ -1,3 +1,245 @@ +2009-09-08 Alan Modra + + * binutils-all/objdump.exp (cpus_expected): Add ms1. + +2009-09-07 Jan Kratochvil + + * binutils-all/testranges.s (.debug_info): Pad the only CU. + +2009-09-07 Jan Kratochvil + + * binutils-all/testranges.s: Replace all .long by .4byte. + +2009-09-04 DJ Delorie + + * binutils-all/objdump.exp: Add m16c and m32c to the list of + expected cpus. + +2009-09-02 Jie Zhang + + * binutils-all/bfin/unknown-mode.s: New test. + * binutils-all/bfin/objdump.exp: New test. + +2009-08-17 Nick Clifton + + * binutils-all/strip-10.d: Accept ": 10" for the type + of the UNIQUE symbol. + +2009-08-07 Daniel Jacobowitz + + * binutils-all/testranges.s: Use %progbits. Use ";#" for comments. + +2009-08-06 H.J. Lu + + PR binutils/10492 + * binutils-all/objcopy.exp: Run strip-10. + + * binutils-all/strip-10.d: New. + * binutils-all/unique.s: Likewise. + +2009-07-31 Daniel Gutson + Daniel Jacobowitz + + * binutils-all/arm/thumb2-cond.s: Use instructions instead of + .short. + +2009-07-29 Alan Modra + + * binutils-all/testranges.s: Replace .value with .short. + +2009-07-16 Dave Korn + H.J. Lu + + * binutils-all/objcopy.exp: Run testranges and testranges-ia64 + for ELF targets only. + +2009-07-16 H.J. Lu + + * binutils-all/objcopy.exp; Run testranges-ia64. + + * binutils-all/testranges.d: Don't run for ia64. + + * binutils-all/testranges-ia64.d: New. + * binutils-all/testranges-ia64.s: Likewise. + +2009-07-14 Jan Kratochvil + + * binutils-all/objcopy.exp (testranges): New test. + * binutils-all/testranges.d, binutils-all/testranges.s: New files. + +2009-06-25 Christopher Faylor + + * binutils-all/objcopy.exp: Move XFAIL from objcopy_test to + copy_executable. + +2009-06-25 Christopher Faylor + + * binutils-all/objcopy.exp: Always treat objcopy_test as XFAIL on + cygwin. + +2009-04-16 Alan Modra + + * binutils-all/localize-hidden-1.s: Use "==" instead of ".set". + * binutils-all/localize-hidden-2.s: Likewise. + +2009-04-02 Dave Korn + + * inutils-all/objcopy.exp (strip_executable): Delete remote dest + file before downloading. + (strip_executable_with_saving_a_symbol): Likewise. + (keep_debug_symbols_and_test_copy): Likewise. + +2009-03-11 Joseph Myers + + * binutils-all/objdump.W, binutils-all/objdump.s: Don't match + literal "tmpdir/" in expected output. + +2009-03-11 Chris Demetriou + + * binutils-all/ar.exp (deterministic_archive): New test. + +2009-03-09 H.J. Lu + + PR binutils/9933 + * binutils-all/copy-4.d: New. + + * binutils-all/objcopy.exp: Run copy-4. + +2009-03-03 John David Anglin + + * config/hppa.sed: Fix spelling. + +2009-03-02 John David Anglin + + * binutils-all/localize-hidden-1.s: Change .equ to .set. + * binutils-all/localize-hidden-2.s: Likewise. + +2009-01-29 Nick Clifton + + * binutils-all/objdump.W: Do not assume that high and low PC + addresses will have been computed. + +2008-10-06 Tom Tromey + + * binutils-all/objdump.W: Update. + +2008-10-03 H.J. Lu + + * binutils-all/group.s: Updated. + * binutils-all/group-2.s: Likewise. + * binutils-all/group-3.s: Likewise. + * binutils-all/group-4.s: Likewise. + * binutils-all/strip-7.d: Likewise. + * binutils-all/strip-9.d: Likewise. + +2008-10-01 H.J. Lu + + * binutils-all/group-4.s: New. + * binutils-all/strip-8.d: Likewise. + * binutils-all/strip-9.d: Likewise. + + * binutils-all/objcopy.exp: Test objcopy on group-4.s. Run + strip-8 and strip-9. + +2008-10-01 H.J. Lu + + * binutils-all/group-3.s: New. + * binutils-all/strip-6.d: Likewise. + * binutils-all/strip-7.d: Likewise. + + * binutils-all/objcopy.exp: Test objcopy on group-3.s. Run + strip-6 and strip-7. + +2008-10-01 H.J. Lu + + * binutils-all/group-2.s: New. + * binutils-all/strip-4.d: Likewise. + * binutils-all/strip-5.d: Likewise. + + * binutils-all/objcopy.exp: Test objcopy on group-2.s. Run + strip-4 and strip-5. + +2008-07-26 Alan Modra + + * binutils-all/objdump.exp: Run compressed debug test only for ELF. + +2008-07-11 Hans-Peter Nilsson + + * binutils-all/objdump.W: Generalize to adjust for targets with + non-byte-size instructions. + +2008-07-09 Craig Silverstein + + * binutils-all/objdump.exp: Add test for objdump -s on a file + with a compressed debug section. Add test for objdump -W on a + file that contains a compressed debug section. + * binutils-all/readelf.exp: Call readelf_compressed_wa_test. + (readelf_compressed_wa_test): New function. + * binutils-all/dw2-compressed.S: New file. + * binutils-all/objdump.W: New file. + * binutils-all/objdump.s: New file. + * binutils-all/readelf.wa: New file. + +2008-07-08 Kai Tietz + + * binutils-all/objcopy.exp (copy_setup): Check if host-triplet + is target-triplet for execution tests. + (copy_executable): Likewise. + (strip_executable): Likewise. + (strip_executable_with_saving_a_symbol): Likewise. + +2008-05-29 Jan Kratochvil + + * binutils-all/objcopy.exp: Call KEEP_DEBUG_SYMBOLS_AND_TEST_COPY. + (keep_debug_symbols_and_test_copy): New function. + (test5, test6): New variables. + +2008-03-27 Cary Coutant + + * binutils-all/ar.exp: Add thin archive tests. + +2008-02-26 Joseph Myers + + * config/default.exp (gcc_gas_flag, dlltool_gas_flag): Define to + empty for testing an installed toolchain. + +2008-02-04 Bob Wilson + + * binutils-all/objdump.exp (cpus_expected): Add xtensa. + +2007-10-26 Alan Modra + + * binutils-all/windres/windres.exp: Don't xfail. + +2007-10-16 Nick Clifton + + * binutils-all/readelf.ss: Accept COMMON in readelf's output. + * binutils-all/readelf.ss-64: Likewise. + * binutils-all/readelf.ss-mips: Likewise. + * binutils-all/readelf.ss-tmips: Likewise. + +2007-08-30 Nick Clifton + + * binutils-all/dumptest.s: New test file. + * binutils-all/readelf.exp: Add test of readelf's -p switch. + +2007-08-28 Mark Shinwell + Joseph Myers + + * binutils-all/ar.exp (long_filenames): Delete temporary files on + the host. + * binutils-all/arm/objdump.exp: Only check "which $OBJDUMP" if + host is local. + * binutils-all/objcopy.exp: Use ${srecfile} to get the name of the + srec file to be passed to binutils_run. + (objcopy_test_readelf): Use remote_exec. + * binutils-all/readelf.exp (readelf_find_size): Use remote_exec. + (readelf_test): Likewise. + (readelf_wi_test): Likewise. + * lib/utils-lib.exp (run_dump_test): Only check "which $binary" if + host is local. Use remote_exec. Use $tempfile not + tmpdir/bintest.o. + 2007-08-09 Alan Modra * binutils-all/copy-2.d (not-target): Match *-*-*aout. diff --git a/binutils/testsuite/binutils-all/ar.exp b/binutils/testsuite/binutils-all/ar.exp index f90fed8..3ad868b 100644 --- a/binutils/testsuite/binutils-all/ar.exp +++ b/binutils/testsuite/binutils-all/ar.exp @@ -1,4 +1,5 @@ -# Copyright 1995, 1997, 2002, 2004, 2007 Free Software Foundation, Inc. +# Copyright 1995, 1997, 2002, 2004, 2007, 2008, 2009 +# 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 @@ -42,6 +43,7 @@ proc long_filenames { } { set file2 tmpdir/$n2 remote_file build delete $file1 + remote_file host delete $n1 # Some file systems truncate file names at 14 characters, which # makes it impossible to run this test. Check for that now. @@ -54,8 +56,8 @@ proc long_filenames { } { puts $f "first" close $f - remote_file build delete $file2 + remote_file host delete $n2 set status [catch "set f [open tmpdir/$n2 w]" errs] if { $status != 0 } { @@ -214,6 +216,110 @@ proc symbol_table { } { pass $testname } +# Test building a thin archive. + +proc thin_archive { } { + global AR + global AS + global NM + global srcdir + global subdir + + set testname "ar thin archive" + + if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] { + unresolved $testname + return + } + + if [is_remote host] { + set archive artest.a + set objfile [remote_download host tmpdir/bintest.o] + remote_file host delete $archive + } else { + set archive tmpdir/artest.a + set objfile tmpdir/bintest.o + } + + remote_file build delete tmpdir/artest.a + + set got [binutils_run $AR "rcT $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + set got [binutils_run $NM "--print-armap $archive"] + if { ![string match "*text_symbol in *bintest.o*" $got] \ + || ![string match "*data_symbol in *bintest.o*" $got] \ + || ![string match "*common_symbol in *bintest.o*" $got] \ + || [string match "*static_text_symbol in *bintest.o*" $got] \ + || [string match "*static_data_symbol in *bintest.o*" $got] \ + || [string match "*external_symbol in *bintest.o*" $got] } { + fail $testname + return + } + + pass $testname +} + +# Test building a thin archive with a nested archive. + +proc thin_archive_with_nested { } { + global AR + global AS + global NM + global srcdir + global subdir + + set testname "ar thin archive with nested archive" + + if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] { + unresolved $testname + return + } + + if [is_remote host] { + set archive artest.a + set archive2 artest2.a + set objfile [remote_download host tmpdir/bintest.o] + remote_file host delete $archive + } else { + set archive tmpdir/artest.a + set archive2 tmpdir/artest2.a + set objfile tmpdir/bintest.o + } + + remote_file build delete tmpdir/artest.a + + set got [binutils_run $AR "rc $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + remote_file build delete tmpdir/artest2.a + + set got [binutils_run $AR "rcT $archive2 ${archive}"] + if ![string match "" $got] { + fail $testname + return + } + + set got [binutils_run $NM "--print-armap $archive"] + if { ![string match "*text_symbol in *bintest.o*" $got] \ + || ![string match "*data_symbol in *bintest.o*" $got] \ + || ![string match "*common_symbol in *bintest.o*" $got] \ + || [string match "*static_text_symbol in *bintest.o*" $got] \ + || [string match "*static_data_symbol in *bintest.o*" $got] \ + || [string match "*external_symbol in *bintest.o*" $got] } { + fail $testname + return + } + + pass $testname +} + # Test POSIX-compatible argument parsing. proc argument_parsing { } { @@ -249,8 +355,55 @@ proc argument_parsing { } { pass $testname } +# Test building a deterministic archive. + +proc deterministic_archive { } { + global AR + global AS + global NM + global srcdir + global subdir + + set testname "ar deterministic archive" + + if ![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o] { + unresolved $testname + return + } + + if [is_remote host] { + set archive artest.a + set objfile [remote_download host tmpdir/bintest.o] + remote_file host delete $archive + } else { + set archive tmpdir/artest.a + set objfile tmpdir/bintest.o + } + + remote_file build delete tmpdir/artest.a + + set got [binutils_run $AR "rcD $archive ${objfile}"] + if ![string match "" $got] { + fail $testname + return + } + + set got [binutils_run $AR "tv $archive"] + # This only checks the file mode and uid/gid. We can't easily match + # date because it's printed with the user's timezone. + if ![string match "rw-r--r-- 0/0 *bintest.o*" $got] { + fail $testname + return + } + + pass $testname +} + # Run the tests. long_filenames symbol_table +thin_archive +thin_archive_with_nested argument_parsing +deterministic_archive diff --git a/binutils/testsuite/binutils-all/arm/objdump.exp b/binutils/testsuite/binutils-all/arm/objdump.exp index 226363b..d2e04fa 100644 --- a/binutils/testsuite/binutils-all/arm/objdump.exp +++ b/binutils/testsuite/binutils-all/arm/objdump.exp @@ -1,4 +1,4 @@ -# Copyright 2004, 2007 +# Copyright 2004, 2007, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -19,7 +19,7 @@ if {![istarget "arm*-*-*"]} then { return } -if {[which $OBJDUMP] == 0} then { +if {![is_remote host] && [which $OBJDUMP] == 0} then { perror "$OBJDUMP does not exist" return } diff --git a/binutils/testsuite/binutils-all/arm/thumb2-cond.s b/binutils/testsuite/binutils-all/arm/thumb2-cond.s index 95761e1..b9de442 100644 --- a/binutils/testsuite/binutils-all/arm/thumb2-cond.s +++ b/binutils/testsuite/binutils-all/arm/thumb2-cond.s @@ -1,6 +1,8 @@ -.thumb + .arch armv7 + .syntax unified + .thumb foo: -.short 0xf000, 0xf800 -.short 0xbf38 -.short 0xf000, 0xbf04 -bx lr + bl 1f +1: it cc + bcc.w .+0xe0c + bx lr diff --git a/binutils/testsuite/binutils-all/bfin/objdump.exp b/binutils/testsuite/binutils-all/bfin/objdump.exp new file mode 100644 index 0000000..df7d4da --- /dev/null +++ b/binutils/testsuite/binutils-all/bfin/objdump.exp @@ -0,0 +1,53 @@ +# Copyright 2009 +# Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. + +if {![istarget "bfin-*-*"]} then { + return +} + +if {[which $OBJDUMP] == 0} then { + perror "$OBJDUMP does not exist" + return +} + +send_user "Version [binutil_version $OBJDUMP]" + +################################### +# Set up the test of unknown-mode.s +################################### + +if {![binutils_assemble $srcdir/$subdir/unknown-mode.s tmpdir/unknown-mode.o]} then { + return +} + +if [is_remote host] { + set objfile [remote_download host tmpdir/unknown-mode.o] +} else { + set objfile tmpdir/unknown-mode.o +} + +# Make sure that the unknown mode does not cause abort. + +set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -D $objfile"] + +set want "e1 c1\[ \t\]*ILLEGAL.*34 98 .*\[\r\n\]" + +if [regexp $want $got] then { + pass "unknown mode test" +} else { + fail "unknown mode test" +} diff --git a/binutils/testsuite/binutils-all/bfin/unknown-mode.s b/binutils/testsuite/binutils-all/bfin/unknown-mode.s new file mode 100644 index 0000000..3c477f2 --- /dev/null +++ b/binutils/testsuite/binutils-all/bfin/unknown-mode.s @@ -0,0 +1,8 @@ + .text + + // Below 4 bytes are "A1 += R6.H * R4.L (IS);" + // with a invalid mode "0xf". + .byte 0xe1 + .byte 0xc1 + .byte 0x34 + .byte 0x98 diff --git a/binutils/testsuite/binutils-all/copy-4.d b/binutils/testsuite/binutils-all/copy-4.d new file mode 100644 index 0000000..41fccf0 --- /dev/null +++ b/binutils/testsuite/binutils-all/copy-4.d @@ -0,0 +1,9 @@ +#PROG: strip +#source: bintest.s +#strip: --strip-unneeded +#nm: -n +#name: strip --strip-unneeded on common symbol + +#... +0+04 C common_symbol +#pass diff --git a/binutils/testsuite/binutils-all/dlltool.exp b/binutils/testsuite/binutils-all/dlltool.exp index 74154cb..e0337f4 100644 --- a/binutils/testsuite/binutils-all/dlltool.exp +++ b/binutils/testsuite/binutils-all/dlltool.exp @@ -1,4 +1,4 @@ -# Copyright 2002, 2004, 2006, 2007 Free Software Foundation, Inc. +# Copyright 2002, 2004, 2006, 2007, 2009 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 diff --git a/binutils/testsuite/binutils-all/dumptest.s b/binutils/testsuite/binutils-all/dumptest.s new file mode 100644 index 0000000..6335d22 --- /dev/null +++ b/binutils/testsuite/binutils-all/dumptest.s @@ -0,0 +1,2 @@ + .data + .ascii "test_string" diff --git a/binutils/testsuite/binutils-all/dw2-compressed.S b/binutils/testsuite/binutils-all/dw2-compressed.S new file mode 100644 index 0000000..37ba916 --- /dev/null +++ b/binutils/testsuite/binutils-all/dw2-compressed.S @@ -0,0 +1,218 @@ +/* This testcase is derived from a similar test in GDB. + + Copyright 2008, 2009 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* This tests that gdb can read compressed sections. The contents + are a basic assembly file, but the .debug_abbrev section has been + comrpessed using zlib. */ + +/* Dummy function to provide debug information for. */ + + .text + .globl _start +_start: + .int 0 +.Lbegin_text1: + .globl func_cu1 + .type func_cu1, %function +func_cu1: +.Lbegin_func_cu1: + .int 0 +.Lend_func_cu1: + .size func_cu1, .-func_cu1 +.Lend_text1: + +/* Debug information */ + + .section .debug_info +.Lcu1_begin: + /* CU header */ + .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ +.Lcu1_start: + .2byte 2 /* DWARF Version */ + .4byte .Labbrev1_begin /* Offset into abbrev section */ + .byte 4 /* Pointer size */ + + /* CU die */ + .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ + .4byte .Lline1_begin /* DW_AT_stmt_list */ + .4byte .Lend_text1 /* DW_AT_high_pc */ + .4byte .Lbegin_text1 /* DW_AT_low_pc */ + .ascii "file1.txt\0" /* DW_AT_name */ + .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ + .byte 1 /* DW_AT_language (C) */ + + /* func_cu1 */ + .uleb128 2 /* Abbrev: DW_TAG_subprogram */ + .byte 1 /* DW_AT_external */ + .byte 1 /* DW_AT_decl_file */ + .byte 2 /* DW_AT_decl_line */ + .ascii "func_cu1\0" /* DW_AT_name */ + .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ + .4byte .Lbegin_func_cu1 /* DW_AT_low_pc */ + .4byte .Lend_func_cu1 /* DW_AT_high_pc */ + .byte 1 /* DW_AT_frame_base: length */ + .byte 0x55 /* DW_AT_frame_base: DW_OP_reg5 */ + +.Ltype_int: + .uleb128 3 /* Abbrev: DW_TAG_base_type */ + .ascii "int\0" /* DW_AT_name */ + .byte 4 /* DW_AT_byte_size */ + .byte 5 /* DW_AT_encoding */ + + .byte 0 /* End of children of CU */ + +.Lcu1_end: + +/* Line table */ + .section .debug_line +.Lline1_begin: + .4byte .Lline1_end - .Lline1_start /* Initial length */ +.Lline1_start: + .2byte 2 /* Version */ + .4byte .Lline1_lines - .Lline1_hdr /* header_length */ +.Lline1_hdr: + .byte 1 /* Minimum insn length */ + .byte 1 /* default_is_stmt */ + .byte 1 /* line_base */ + .byte 1 /* line_range */ + .byte 0x10 /* opcode_base */ + + /* Standard lengths */ + .byte 0 + .byte 1 + .byte 1 + .byte 1 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 1 + .byte 0 + .byte 0 + .byte 0 + + /* Include directories */ + .byte 0 + + /* File names */ + .ascii "file1.txt\0" + .uleb128 0 + .uleb128 0 + .uleb128 0 + + .byte 0 + +.Lline1_lines: + .byte 0 /* DW_LNE_set_address */ + .uleb128 5 + .byte 2 + .4byte .Lbegin_func_cu1 + + .byte 3 /* DW_LNS_advance_line */ + .sleb128 3 /* ... to 4 */ + + .byte 1 /* DW_LNS_copy */ + + .byte 1 /* DW_LNS_copy (second time as an end-of-prologue marker) */ + + .byte 0 /* DW_LNE_set_address */ + .uleb128 5 + .byte 2 + .4byte .Lend_func_cu1 + + .byte 0 /* DW_LNE_end_of_sequence */ + .uleb128 1 + .byte 1 + +.Lline1_end: + +/* Abbrev table -- compressed */ + .section .zdebug_abbrev +.Labbrev1_begin: + .ascii "ZLIB" + .4byte 0 + .2byte 0 + .byte 0 + .byte 51 + .byte 0x78 + .byte 0x5e + .byte 0x63 + .byte 0x14 + .byte 0x64 + .byte 0x14 + .byte 0x60 + .byte 0x13 + .byte 0x62 + .byte 0x14 + .byte 0x64 + .byte 0x64 + .byte 0xe6 + .byte 0x50 + .byte 0xe5 + .byte 0x10 + .byte 0xe6 + .byte 0x66 + .byte 0x60 + .byte 0x60 + .byte 0xd2 + .byte 0x63 + .byte 0xb0 + .byte 0xe7 + .byte 0xb1 + .byte 0xe2 + .byte 0xb6 + .byte 0xe6 + .byte 0x66 + .byte 0xe6 + .byte 0xf0 + .byte 0x14 + .byte 0x16 + .byte 0x64 + .byte 0x14 + .byte 0x62 + .byte 0x74 + .byte 0xe0 + .byte 0x02 + .byte 0x00 + .byte 0x25 + .byte 0x78 + .byte 0x02 + .byte 0x81 + .byte 0x78 + .byte 0x9c + .byte 0x63 + .byte 0x60 + .byte 0x60 + .byte 0x56 + .byte 0x61 + .byte 0x60 + .byte 0xe6 + .byte 0xe0 + .byte 0xe6 + .byte 0xb6 + .byte 0xe3 + .byte 0x66 + .byte 0x00 + .byte 0x02 + .byte 0x00 + .byte 0x04 + .byte 0x9c + .byte 0x00 + .byte 0x92 diff --git a/binutils/testsuite/binutils-all/group-2.s b/binutils/testsuite/binutils-all/group-2.s new file mode 100644 index 0000000..187eeda --- /dev/null +++ b/binutils/testsuite/binutils-all/group-2.s @@ -0,0 +1,8 @@ + .section .text.foo,"axG",%progbits,.text.foo,comdat + .global foo2 +foo2: + .word 0 + .section .data.bar,"awG",%progbits,.text.foo,comdat + .global bar2 +bar2: + .word 0 diff --git a/binutils/testsuite/binutils-all/group-3.s b/binutils/testsuite/binutils-all/group-3.s new file mode 100644 index 0000000..eb235e8 --- /dev/null +++ b/binutils/testsuite/binutils-all/group-3.s @@ -0,0 +1,8 @@ + .section .text.foo3,"axG",%progbits,foo3,comdat + .global foo3 +foo3: + .word 0 + .section .data.bar3,"awG",%progbits,foo3,comdat + .global bar3 +bar3: + .word 0 diff --git a/binutils/testsuite/binutils-all/group-4.s b/binutils/testsuite/binutils-all/group-4.s new file mode 100644 index 0000000..b1c8736 --- /dev/null +++ b/binutils/testsuite/binutils-all/group-4.s @@ -0,0 +1,6 @@ + .section .text.foo4,"axG",%progbits,foo4,comdat +foo4: + .word 0 + .section .data.foo4,"awG",%progbits,foo4,comdat +bar4: + .word 0 diff --git a/binutils/testsuite/binutils-all/group.s b/binutils/testsuite/binutils-all/group.s index 21aa4be..cc1ffb6 100644 --- a/binutils/testsuite/binutils-all/group.s +++ b/binutils/testsuite/binutils-all/group.s @@ -1,8 +1,8 @@ - .section .text,"axG",%progbits,foo_group,comdat + .section .text.foo,"axG",%progbits,foo_group,comdat .global foo foo: .word 0 - .section .data,"awG",%progbits,foo_group,comdat + .section .data.foo,"awG",%progbits,foo_group,comdat .global bar bar: .word 0 diff --git a/binutils/testsuite/binutils-all/hppa/objdump.exp b/binutils/testsuite/binutils-all/hppa/objdump.exp index 09c9910..28a8d97 100644 --- a/binutils/testsuite/binutils-all/hppa/objdump.exp +++ b/binutils/testsuite/binutils-all/hppa/objdump.exp @@ -1,4 +1,4 @@ -# Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2002, 2007 +# Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2002, 2007, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify diff --git a/binutils/testsuite/binutils-all/localize-hidden-1.s b/binutils/testsuite/binutils-all/localize-hidden-1.s index bdaa69d..cb9f367 100644 --- a/binutils/testsuite/binutils-all/localize-hidden-1.s +++ b/binutils/testsuite/binutils-all/localize-hidden-1.s @@ -20,17 +20,17 @@ .protected Gprotected .protected Wprotected - .equ Ldefault, 0x1100 - .equ Lhidden, 0x1200 - .equ Linternal, 0x1300 - .equ Lprotected, 0x1400 + Ldefault == 0x1100 + Lhidden == 0x1200 + Linternal == 0x1300 + Lprotected == 0x1400 - .equ Gdefault, 0x2100 - .equ Ghidden, 0x2200 - .equ Ginternal, 0x2300 - .equ Gprotected, 0x2400 + Gdefault == 0x2100 + Ghidden == 0x2200 + Ginternal == 0x2300 + Gprotected == 0x2400 - .equ Wdefault, 0x3100 - .equ Whidden, 0x3200 - .equ Winternal, 0x3300 - .equ Wprotected, 0x3400 + Wdefault == 0x3100 + Whidden == 0x3200 + Winternal == 0x3300 + Wprotected == 0x3400 diff --git a/binutils/testsuite/binutils-all/localize-hidden-2.s b/binutils/testsuite/binutils-all/localize-hidden-2.s index d428c3a..443bad0 100644 --- a/binutils/testsuite/binutils-all/localize-hidden-2.s +++ b/binutils/testsuite/binutils-all/localize-hidden-2.s @@ -1,2 +1,2 @@ .globl G - .equ G,0x100 + G == 0x100 diff --git a/binutils/testsuite/binutils-all/m68k/objdump.exp b/binutils/testsuite/binutils-all/m68k/objdump.exp index 481137c..ba0afe8 100644 --- a/binutils/testsuite/binutils-all/m68k/objdump.exp +++ b/binutils/testsuite/binutils-all/m68k/objdump.exp @@ -1,4 +1,4 @@ -# Copyright 2004, 2007 +# Copyright 2004, 2007, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify diff --git a/binutils/testsuite/binutils-all/nm.exp b/binutils/testsuite/binutils-all/nm.exp index e77728c..67d0cbd 100644 --- a/binutils/testsuite/binutils-all/nm.exp +++ b/binutils/testsuite/binutils-all/nm.exp @@ -1,4 +1,4 @@ -# Copyright 1993, 1994, 1995, 1997, 2007 Free Software Foundation, Inc. +# Copyright 1993, 1994, 1995, 1997, 2007, 2009 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 diff --git a/binutils/testsuite/binutils-all/objcopy.exp b/binutils/testsuite/binutils-all/objcopy.exp index e05e622..de9b116 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, 2006, 2007 +# 2004, 2006, 2007, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -194,7 +194,7 @@ if ![string match "" $got] then { verbose $line fail "objcopy -O srec" } else { - set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${copyfile}.srec"] + set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -f ${srecfile}"] if ![regexp "file format srec" $got] then { send_log "objdump failed\n" fail "objcopy -O srec" @@ -485,6 +485,7 @@ proc copy_setup { } { global subdir global gcc_gas_flag global test_prog + global host_triplet set res [build_wrapper testglue.o] set flags { debug } @@ -513,8 +514,11 @@ proc copy_setup { } { set status [lindex $result 0] if { $status != "pass" } { - send_log "cannot run executable, status = ${status}\n" - return 3 + send_log "cannot run executable, status = ${status} on ${host_triplet}\n" + if { [istarget $host_triplet] } { + return 3 + } + set status "pass" } return 0 @@ -524,6 +528,7 @@ proc copy_setup { } { proc copy_executable { prog flags test1 test2 } { global test_prog + global host_triplet if [is_remote host] { set testfile [remote_download host tmpdir/$test_prog] @@ -578,6 +583,8 @@ proc copy_executable { prog flags test1 test2 } { setup_xfail "arm*-*-pe" setup_xfail "thumb*-*-coff" setup_xfail "thumb*-*-pe" + setup_xfail "x86_64-*-mingw*" + setup_xfail "*-*-cygwin*" fail $test1 } @@ -588,6 +595,9 @@ proc copy_executable { prog flags test1 test2 } { set output [remote_load target tmpdir/copyprog] set status [lindex $output 0] + if { ![istarget $host_triplet] } { + set status "pass" + } if { $status != "pass" } { fail $test2 } else { @@ -600,7 +610,9 @@ proc copy_executable { prog flags test1 test2 } { proc strip_executable { prog flags test } { global NM global NMFLAGS + global host_triplet + remote_file build delete tmpdir/striprog remote_download build tmpdir/copyprog tmpdir/striprog if [is_remote host] { set copyfile [remote_download host tmpdir/striprog] @@ -620,6 +632,9 @@ proc strip_executable { prog flags test } { set result [remote_load target tmpdir/striprog] set status [lindex $result 0] + if { ![istarget $host_triplet] } { + set status "pass" + } if { $status != "pass" } { fail $test return @@ -638,7 +653,9 @@ proc strip_executable { prog flags test } { proc strip_executable_with_saving_a_symbol { prog flags test } { global NM global NMFLAGS + global host_triplet + remote_file build delete tmpdir/striprog remote_download build tmpdir/copyprog tmpdir/striprog if [is_remote host] { set copyfile [remote_download host tmpdir/striprog] @@ -658,6 +675,9 @@ proc strip_executable_with_saving_a_symbol { prog flags test } { set result [remote_load target tmpdir/striprog] set status [lindex $result 0] + if { ![istarget $host_triplet] } { + set status "pass" + } if { $status != "pass" } { fail $test return @@ -681,10 +701,41 @@ proc strip_executable_with_saving_a_symbol { prog flags test } { pass $test } +# Test keeping only debug symbols of an executable + +proc keep_debug_symbols_and_test_copy { prog1 flags1 test1 prog2 flags2 test2 } { + global NM + global NMFLAGS + + remote_file build delete tmpdir/striprog + remote_download build tmpdir/copyprog tmpdir/striprog + if [is_remote host] { + set copyfile [remote_download host tmpdir/striprog] + } else { + set copyfile tmpdir/striprog + } + + set exec_output [binutils_run $prog1 "$flags1 ${copyfile}"] + if ![string match "" $exec_output] { + fail $test1 + return + } + pass $test1 + + set exec_output [binutils_run $prog2 "$flags2 ${copyfile}"] + if ![string match "" $exec_output] { + fail $test2 + return + } + pass $test2 +} + set test1 "simple objcopy of executable" set test2 "run objcopy of executable" set test3 "run stripped executable" set test4 "run stripped executable with saving a symbol" +set test5 "keep only debug data" +set test6 "simple objcopy of debug data" switch [copy_setup] { "1" { @@ -695,17 +746,23 @@ switch [copy_setup] { untested $test2 untested $test3 untested $test4 + untested $test5 + untested $test6 } "3" { copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "" unsupported $test2 unsupported $test3 unsupported $test4 + unsupported $test5 + unsupported $test6 } "0" { copy_executable "$OBJCOPY" "$OBJCOPYFLAGS" "$test1" "$test2" strip_executable "$STRIP" "$STRIPFLAGS" "$test3" strip_executable_with_saving_a_symbol "$STRIP" "-K main -K _main $STRIPFLAGS" "$test4" + keep_debug_symbols_and_test_copy "$STRIP" "--only-keep-debug $STRIPFLAGS" "$test5" \ + "$OBJCOPY" "$OBJCOPYFLAGS" "$test6" } } @@ -722,23 +779,32 @@ proc objcopy_test_readelf {testname srcfile} { } verbose -log "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o" - catch "exec $OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o" exec_output - if ![string match "" $exec_output] then { + set exec_output [remote_exec host "$OBJCOPY $OBJCOPYFLAGS tmpdir/bintest.o tmpdir/copy.o"] + if { [lindex $exec_output 0] != 0 + || ![string match "" [lindex $exec_output 1]] } then { fail "objcopy ($testname)" return } verbose -log "$READELF -a tmpdir/bintest.o > tmpdir/bintest.o.out" - catch "exec $READELF -a tmpdir/bintest.o > tmpdir/bintest.o.out" exec_output - set exec_output [prune_warnings $exec_output] + set exec_output [remote_exec host "$READELF -a tmpdir/bintest.o" "" "/dev/null" "tmpdir/bintest.o.out"] + if { [lindex $exec_output 0] != 0 } then { + unresolved "objcopy ($testname)" + return + } + set exec_output [prune_warnings [lindex $exec_output 1]] if ![string match "" $exec_output] then { unresolved "objcopy ($testname)" return } verbose -log "$READELF -a tmpdir/copy.o > tmpdir/copy.o.out" - catch "exec $READELF -a tmpdir/copy.o > tmpdir/copy.o.out" exec_output - set exec_output [prune_warnings $exec_output] + set exec_output [remote_exec host "$READELF -a tmpdir/copy.o" "" "/dev/null" "tmpdir/copy.o.out"] + if { [lindex $exec_output 0] != 0 } then { + unresolved "objcopy ($testname)" + return + } + set exec_output [prune_warnings [lindex $exec_output 1]] if ![string match "" $exec_output] then { unresolved "objcopy ($testname)" return @@ -765,16 +831,27 @@ if { ([istarget "ia64-*-elf*"] if [is_elf_format] { objcopy_test "ELF unknown section type" unknown.s objcopy_test_readelf "ELF group" group.s + objcopy_test_readelf "ELF group" group-2.s + objcopy_test_readelf "ELF group" group-3.s + objcopy_test_readelf "ELF group" group-4.s run_dump_test "copy-1" } run_dump_test "copy-2" run_dump_test "copy-3" +run_dump_test "copy-4" if [is_elf_format] { run_dump_test "strip-1" run_dump_test "strip-2" run_dump_test "strip-3" + run_dump_test "strip-4" + run_dump_test "strip-5" + run_dump_test "strip-6" + run_dump_test "strip-7" + run_dump_test "strip-8" + run_dump_test "strip-9" + run_dump_test "strip-10" if { [istarget "i*86-*"] || [istarget "x86_64-*-*"] } { # Check to make sure we don't strip a symbol named in relocations. @@ -796,5 +873,7 @@ if [is_elf_format] { } run_dump_test "localize-hidden-1" + run_dump_test "testranges" + run_dump_test "testranges-ia64" } run_dump_test "localize-hidden-2" diff --git a/binutils/testsuite/binutils-all/objdump.W b/binutils/testsuite/binutils-all/objdump.W new file mode 100644 index 0000000..aa1bd2c --- /dev/null +++ b/binutils/testsuite/binutils-all/objdump.W @@ -0,0 +1,129 @@ + +.*dw2-compressed.o: file format .* + +Contents of the .debug_info section: + + Compilation Unit @ offset 0x0: + Length: 0x4e \(32-bit\) + Version: 2 + Abbrev Offset: 0 + Pointer Size: 4 + <0>: Abbrev Number: 1 \(DW_TAG_compile_unit\) + < c> DW_AT_stmt_list : 0x0 + <10> DW_AT_high_pc : 0x. + <14> DW_AT_low_pc : 0x. + <18> DW_AT_name : file1.txt + <22> DW_AT_producer : GNU C 3.3.3 + <2e> DW_AT_language : 1 \(ANSI C\) + <1><2f>: Abbrev Number: 2 \(DW_TAG_subprogram\) + <30> DW_AT_external : 1 + <31> DW_AT_decl_file : 1 + <32> DW_AT_decl_line : 2 + <33> DW_AT_name : func_cu1 + <3c> DW_AT_type : <0x4a> + <40> DW_AT_low_pc : 0x. + <44> DW_AT_high_pc : 0x. + <48> DW_AT_frame_base : 1 byte block: 55 \(DW_OP_reg5\) + <1><4a>: Abbrev Number: 3 \(DW_TAG_base_type\) + <4b> DW_AT_name : int + <4f> DW_AT_byte_size : 4 + <50> DW_AT_encoding : 5 \(signed\) + +Raw dump of debug contents of section .debug_line: + + Offset: 0x0 + Length: 62 + DWARF Version: 2 + Prologue Length: 35 + Minimum Instruction Length: 1 + Initial value of 'is_stmt': 1 + Line Base: 1 + Line Range: 1 + Opcode Base: 16 + + Opcodes: + Opcode 1 has 0 args + Opcode 2 has 1 args + Opcode 3 has 1 args + Opcode 4 has 1 args + Opcode 5 has 1 args + Opcode 6 has 0 args + Opcode 7 has 0 args + Opcode 8 has 0 args + Opcode 9 has 1 args + Opcode 10 has 0 args + Opcode 11 has 0 args + Opcode 12 has 1 args + Opcode 13 has 0 args + Opcode 14 has 0 args + Opcode 15 has 0 args + + The Directory Table is empty. + + The File Name Table: + Entry Dir Time Size Name + 1 0 0 0 file1.txt + + Line Number Statements: + Extended opcode 2: set Address to .* + Advance Line by 3 to 4 + Copy + Copy + Extended opcode 2: set Address to .* + Extended opcode 1: End of Sequence + + + Offset: 0x42 + Length: 25 + DWARF Version: 2 + Prologue Length: 19 + Minimum Instruction Length: [1248] + Initial value of 'is_stmt': 1 + Line Base: -5 + Line Range: 14 + Opcode Base: 13 + + Opcodes: + Opcode 1 has 0 args + Opcode 2 has 1 args + Opcode 3 has 1 args + Opcode 4 has 1 args + Opcode 5 has 1 args + Opcode 6 has 0 args + Opcode 7 has 0 args + Opcode 8 has 0 args + Opcode 9 has 1 args + Opcode 10 has 0 args + Opcode 11 has 0 args + Opcode 12 has 1 args + + The Directory Table is empty. + + The File Name Table is empty. + + Line Number Statements: + +Contents of the .zdebug_abbrev section: + + Number TAG + 1 DW_TAG_compile_unit \[has children\] + DW_AT_stmt_list DW_FORM_data4 + DW_AT_high_pc DW_FORM_addr + DW_AT_low_pc DW_FORM_addr + DW_AT_name DW_FORM_string + DW_AT_producer DW_FORM_string + DW_AT_language DW_FORM_data1 + 2 DW_TAG_subprogram \[no children\] + DW_AT_external DW_FORM_flag + DW_AT_decl_file DW_FORM_data1 + DW_AT_decl_line DW_FORM_data1 + DW_AT_name DW_FORM_string + DW_AT_type DW_FORM_ref4 + DW_AT_low_pc DW_FORM_addr + DW_AT_high_pc DW_FORM_addr + DW_AT_frame_base DW_FORM_block1 + 3 DW_TAG_base_type \[no children\] + DW_AT_name DW_FORM_string + DW_AT_byte_size DW_FORM_data1 + DW_AT_encoding DW_FORM_data1 + diff --git a/binutils/testsuite/binutils-all/objdump.exp b/binutils/testsuite/binutils-all/objdump.exp index 09b6f5d..d5879aa 100644 --- a/binutils/testsuite/binutils-all/objdump.exp +++ b/binutils/testsuite/binutils-all/objdump.exp @@ -1,5 +1,5 @@ # Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2007 +# 2003, 2004, 2007, 2008, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -38,11 +38,11 @@ set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS -i"] set cpus_expected [list] lappend cpus_expected alpha arc arm cris lappend cpus_expected d10v d30v fr30 fr500 fr550 h8 hppa i386 i860 i960 ip2022 -lappend cpus_expected m32r m68hc11 m68hc12 m68k m88k MCore -lappend cpus_expected mips mn10200 mn10300 msp ns32k pj powerpc pyramid +lappend cpus_expected m16c m32c m32r m68hc11 m68hc12 m68k m88k MCore +lappend cpus_expected mips mn10200 mn10300 ms1 msp ns32k pj powerpc pyramid lappend cpus_expected romp rs6000 s390 sh sparc lappend cpus_expected tahoe tic54x tic80 tms320c30 tms320c4x tms320c54x v850 -lappend cpus_expected vax we32k x86-64 xscale z8k z8001 z8002 +lappend cpus_expected vax we32k x86-64 xscale xtensa z8k z8001 z8002 # Make sure the target CPU shows up in the list. lappend cpus_expected ${target_cpu} @@ -158,6 +158,51 @@ if [regexp $want $got] then { fail "objdump -s" } +# Test objdump -s on a file that contains a compressed .debug section + +if { ![is_elf_format] } then { + unsupported "objdump compressed debug" +} elseif { ![binutils_assemble $srcdir/$subdir/dw2-compressed.S tmpdir/dw2-compressed.o] } then { + fail "objdump compressed debug" +} else { + if [is_remote host] { + set compressed_testfile [remote_download host tmpdir/dw2-compressed.o] + } else { + set compressed_testfile tmpdir/dw2-compressed.o + } + + set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -s -j .zdebug_abbrev $compressed_testfile" "" "/dev/null" "objdump.out"] + + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { + fail "objdump -s -j .zdebug_abbrev (reason: unexpected output)" + send_log $got + send_log "\n" + } + + if { [regexp_diff objdump.out $srcdir/$subdir/objdump.s] } then { + fail "objdump -s -j .zdebug_abbrev" + } else { + pass "objdump -s -j .zdebug_abbrev" + } + + # Test objdump -W on a file that contains some compressed .debug sections + + set got [remote_exec host "$OBJDUMP $OBJDUMPFLAGS -W $compressed_testfile" "" "/dev/null" "objdump.out"] + + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { + fail "objdump -W (reason: unexpected output)" + send_log $got + send_log "\n" + } + + if { [regexp_diff objdump.out $srcdir/$subdir/objdump.W] } then { + fail "objdump -W" + } else { + pass "objdump -W" + } +} + + # Options which are not tested: -a -d -D -R -T -x -l --stabs # I don't see any generic way to test any of these other than -a. # Tests could be written for specific targets, and that should be done diff --git a/binutils/testsuite/binutils-all/objdump.s b/binutils/testsuite/binutils-all/objdump.s new file mode 100644 index 0000000..aea35df --- /dev/null +++ b/binutils/testsuite/binutils-all/objdump.s @@ -0,0 +1,9 @@ + +.*dw2-compressed.o: file format .* + +Contents of section .zdebug_abbrev: + 0000 5a4c4942 00000000 00000033 785e6314 ZLIB.......3x\^c. + 0010 64146013 62146464 e650e510 e6666060 d.`.b.dd.P...f`` + 0020 d263b0e7 b1e2b6e6 66e6f014 16641462 .c......f....d.b + 0030 74e00200 25780281 789c6360 60566160 t...%x..x.c``Va` + 0040 e6e0e6b6 e3660002 00049c00 92 .....f....... diff --git a/binutils/testsuite/binutils-all/readelf.exp b/binutils/testsuite/binutils-all/readelf.exp index 2979cfd..66aab79 100644 --- a/binutils/testsuite/binutils-all/readelf.exp +++ b/binutils/testsuite/binutils-all/readelf.exp @@ -1,4 +1,5 @@ -# Copyright 1999, 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. +# Copyright 1999, 2000, 2001, 2003, 2004, 2007, 2009 +# 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 @@ -21,6 +22,12 @@ # Based on scripts written by Ian Lance Taylor # and Ken Raeburn . +# Exclude non-ELF targets. +if ![is_elf_format] { + verbose "$READELF is only intended for ELF targets" 2 + return +} + # First some helpful procedures, then the tests themselves # Return the contents of the filename given @@ -41,9 +48,12 @@ proc readelf_find_size { binary_file } { set readelf_size "" set testname "finding out ELF size with readelf -h" - catch "exec $READELF $READELFFLAGS -h $binary_file > readelf.out" got + set got [remote_exec host "$READELF $READELFFLAGS -h $binary_file" "" "/dev/null" "readelf.out"] + if [is_remote host] then { + remote_upload host "readelf.out" + } - if ![string match "" $got] then { + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]]} then { send_log $got fail $testname return @@ -76,13 +86,13 @@ proc readelf_test { options binary_file regexp_file xfails } { global subdir send_log "exec $READELF $READELFFLAGS $options $binary_file > readelf.out\n" - catch "exec $READELF $READELFFLAGS $options $binary_file > readelf.out" got + set got [remote_exec host "$READELF $READELFFLAGS $options $binary_file" "" "/dev/null" "readelf.out"] foreach xfail $xfails { setup_xfail $xfail } - if ![string match "" $got] then { + if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then { fail "readelf $options (reason: unexpected output)" send_log $got send_log "\n" @@ -146,8 +156,7 @@ proc readelf_wi_test {} { set tempfile [remote_download host tmpdir/testprog.o] # Run "readelf -wi" on it. - send_log "exec $READELF $READELFFLAGS -wi $tempfile > readelf.out\n" - catch "exec $READELF $READELFFLAGS -wi $tempfile > readelf.out" got + set got [remote_exec host "$READELF $READELFFLAGS -wi $tempfile" "" "/dev/null" "readelf.out"] # Upload the results. set output [remote_upload host readelf.out] @@ -155,7 +164,7 @@ proc readelf_wi_test {} { file_on_host delete $tempfile # Strip any superflous warnings. - set got [prune_readelf_wi_warnings $got] + set got [prune_readelf_wi_warnings [lindex $got 1]] if ![string match "" $got] then { fail "readelf $READELFFLAGS -wi (reason: unexpected output)" @@ -200,11 +209,95 @@ proc readelf_wi_test {} { pass "readelf -wi" } +# This tests "readelf -wa", but on a file with a compressed +# .debug_abbrev section. -# Exclude non-ELF targets. -if ![is_elf_format] { - verbose "$READELF is only intended for ELF targets" 2 - return +proc readelf_compressed_wa_test {} { + global READELF + global READELFFLAGS + global srcdir + global subdir + + # Compile the compressed-debug-section test file. + if { [target_compile $srcdir/$subdir/dw2-compressed.S tmpdir/dw2-compressed.o object debug] != "" } { + verbose "Unable to compile test file." + untested "readelf -wa (compressed)" + return + } + + # Download it. + set tempfile [remote_download host tmpdir/dw2-compressed.o] + + # Run "readelf -wa" on it. + set got [remote_exec host "$READELF $READELFFLAGS -wa $tempfile" "" "/dev/null" "readelf.out"] + + # Upload the results. + set output [remote_upload host readelf.out] + + file_on_host delete $tempfile + + if { [string compare [file_contents readelf.out] [file_contents $srcdir/$subdir/readelf.wa]] != 0 } then { + fail "readelf -wa (compressed)" + verbose "output is \n[file_contents readelf.out]" 2 + verbose "expected is \n[file_contents $srcdir/$subdir/readelf.wa]" 2 + return + } + + pass "readelf -wa (compressed)" +} + +# Test readelf's dumping abilities. + +proc readelf_dump_test {} { + global READELF + global READELFFLAGS + global srcdir + global subdir + + # Assemble the dump test file. + if {![binutils_assemble $srcdir/$subdir/dumptest.s tmpdir/dumptest.o]} then { + unresolved "readelf -p: failed to assemble dump test file" + return + } + # Download it. + set tempfile [remote_download host tmpdir/dumptest.o] + + # Run "readelf -p.data" on it. + set got [remote_exec host "$READELF $READELFFLAGS -p.data $tempfile" "" "/dev/null" "readelf.out"] + set got [lindex $got 1] + + # Upload the results. + set output [remote_upload host readelf.out] + + # Check for something going wrong. + if ![string match "" $got] then { + fail "readelf -p: unexpected output" + send_log $got + send_log "\n" + return + } + + # Search for strings that should be in the output. + set sought { + ".*test_string.*" + } + + foreach looked_for $sought { + set lines [grep $output $looked_for] + if ![llength $lines] then { + fail "readelf -p: missing: $looked_for" + send_log readelf.out + return + } + } + + file_on_host delete $tempfile + file_on_host delete $output + + # All done. + pass "readelf -p" + + # XXX FIXME: Add test of readelf -x here } if ![is_remote host] { @@ -218,7 +311,7 @@ send_user "Version [binutil_version $READELF]" # Assemble the test file. if {![binutils_assemble $srcdir/$subdir/bintest.s tmpdir/bintest.o]} then { - perror "unresolved 1" + perror "could not assemble test file" unresolved "readelf - failed to assemble" return } @@ -239,3 +332,6 @@ readelf_test -s $tempfile readelf.ss {} readelf_test -r $tempfile readelf.r {} readelf_wi_test +readelf_compressed_wa_test + +readelf_dump_test diff --git a/binutils/testsuite/binutils-all/readelf.ss b/binutils/testsuite/binutils-all/readelf.ss index 7daee1b..1967795 100644 --- a/binutils/testsuite/binutils-all/readelf.ss +++ b/binutils/testsuite/binutils-all/readelf.ss @@ -15,4 +15,4 @@ Symbol table '.symtab' contains .* entries: .* .: 00000000 0 NOTYPE GLOBAL DEFAULT 1 text_symbol ..: 00000000 0 NOTYPE GLOBAL DEFAULT UND external_symbol ..: 00000000 0 NOTYPE GLOBAL DEFAULT [34] data_symbol - ..: 00000004 4 OBJECT GLOBAL DEFAULT ( COM|ANSI_COM) common_symbol + ..: 00000004 4 (COMMON|OBJECT) GLOBAL DEFAULT ( COM|ANSI_COM) common_symbol diff --git a/binutils/testsuite/binutils-all/readelf.ss-64 b/binutils/testsuite/binutils-all/readelf.ss-64 index b29276d..54eea05 100644 --- a/binutils/testsuite/binutils-all/readelf.ss-64 +++ b/binutils/testsuite/binutils-all/readelf.ss-64 @@ -10,4 +10,4 @@ Symbol table '.symtab' contains .* entries: .* .: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 1 text_symbol .: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND external_symbol .: 0000000000000000 0 NOTYPE GLOBAL DEFAULT 3 data_symbol - .: 0000000000000004 4 OBJECT GLOBAL DEFAULT COM common_symbol + .: 0000000000000004 4 (COMMON|OBJECT) GLOBAL DEFAULT COM common_symbol diff --git a/binutils/testsuite/binutils-all/readelf.ss-mips b/binutils/testsuite/binutils-all/readelf.ss-mips index 073ade0..0c2b75e 100644 --- a/binutils/testsuite/binutils-all/readelf.ss-mips +++ b/binutils/testsuite/binutils-all/readelf.ss-mips @@ -12,4 +12,4 @@ Symbol table '.symtab' contains 12 entries: 8: 00000000 0 NOTYPE GLOBAL DEFAULT UND external_symbol 9: 00000000 0 OBJECT GLOBAL DEFAULT . data_symbol 10: 00000000 0 NOTYPE LOCAL DEFAULT . static_data_symbol - 11: 00000004 4 OBJECT GLOBAL DEFAULT (PRC|COM) common_symbol + 11: 00000004 4 (COMMON|OBJECT) GLOBAL DEFAULT (PRC|COM) common_symbol diff --git a/binutils/testsuite/binutils-all/readelf.ss-tmips b/binutils/testsuite/binutils-all/readelf.ss-tmips index 4f2fba2..a76859b 100644 --- a/binutils/testsuite/binutils-all/readelf.ss-tmips +++ b/binutils/testsuite/binutils-all/readelf.ss-tmips @@ -12,4 +12,4 @@ Symbol table '.symtab' contains 12 entries: 8: 00000000 0 OBJECT GLOBAL DEFAULT 1 text_symbol 9: 00000000 0 NOTYPE GLOBAL DEFAULT UND external_symbol 10: 00000000 0 OBJECT GLOBAL DEFAULT 3 data_symbol - 11: 00000004 4 OBJECT GLOBAL DEFAULT (PRC|COM) common_symbol + 11: 00000004 4 (COMMON|OBJECT) GLOBAL DEFAULT (PRC|COM) common_symbol diff --git a/binutils/testsuite/binutils-all/readelf.wa b/binutils/testsuite/binutils-all/readelf.wa new file mode 100644 index 0000000..63892a4 --- /dev/null +++ b/binutils/testsuite/binutils-all/readelf.wa @@ -0,0 +1,24 @@ +Contents of the .zdebug_abbrev section: + + Number TAG + 1 DW_TAG_compile_unit [has children] + DW_AT_stmt_list DW_FORM_data4 + DW_AT_high_pc DW_FORM_addr + DW_AT_low_pc DW_FORM_addr + DW_AT_name DW_FORM_string + DW_AT_producer DW_FORM_string + DW_AT_language DW_FORM_data1 + 2 DW_TAG_subprogram [no children] + DW_AT_external DW_FORM_flag + DW_AT_decl_file DW_FORM_data1 + DW_AT_decl_line DW_FORM_data1 + DW_AT_name DW_FORM_string + DW_AT_type DW_FORM_ref4 + DW_AT_low_pc DW_FORM_addr + DW_AT_high_pc DW_FORM_addr + DW_AT_frame_base DW_FORM_block1 + 3 DW_TAG_base_type [no children] + DW_AT_name DW_FORM_string + DW_AT_byte_size DW_FORM_data1 + DW_AT_encoding DW_FORM_data1 + diff --git a/binutils/testsuite/binutils-all/size.exp b/binutils/testsuite/binutils-all/size.exp index b3d57a4..5050a54 100644 --- a/binutils/testsuite/binutils-all/size.exp +++ b/binutils/testsuite/binutils-all/size.exp @@ -1,4 +1,5 @@ -# Copyright 1993, 1994, 1995, 1997, 1998, 2007 Free Software Foundation, Inc. +# Copyright 1993, 1994, 1995, 1997, 1998, 2007, 2009 +# 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 diff --git a/binutils/testsuite/binutils-all/strip-10.d b/binutils/testsuite/binutils-all/strip-10.d new file mode 100644 index 0000000..1f5e4a3 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-10.d @@ -0,0 +1,8 @@ +#PROG: strip +#source: unique.s +#strip: -g +#readelf: -s +#name: strip on STB_GNU_UNIQUE + +#... +[ ]+[0-9]+:[ ]+[0-9a-f]+[ ]+[0-9]+[ ]+OBJECT[ ]+(UNIQUE|: 10) DEFAULT[ ]+[1-9] foo diff --git a/binutils/testsuite/binutils-all/strip-4.d b/binutils/testsuite/binutils-all/strip-4.d new file mode 100644 index 0000000..c8c2509 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-4.d @@ -0,0 +1,11 @@ +#PROG: strip +#source: group-2.s +#readelf: -Sg --wide +#name: strip with section group 4 + +#... + \[[ 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-5.d b/binutils/testsuite/binutils-all/strip-5.d new file mode 100644 index 0000000..8dd2331 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-5.d @@ -0,0 +1,18 @@ +#PROG: strip +#source: group-2.s +#strip: --strip-unneeded +#readelf: -Sg --wide +#name: strip with section group 5 + +#... + \[[ 0-9]+\] .group[ \t]+GROUP[ \t]+.* +#... + \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.* +#... + \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.* +#... +COMDAT group section \[[ 0-9]+\] `.group' \[.text.foo\] contains 2 sections: + \[Index\] Name + \[[ 0-9]+\] .text.* + \[[ 0-9]+\] .data.* +#pass diff --git a/binutils/testsuite/binutils-all/strip-6.d b/binutils/testsuite/binutils-all/strip-6.d new file mode 100644 index 0000000..c5d4288 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-6.d @@ -0,0 +1,11 @@ +#PROG: strip +#source: group-3.s +#readelf: -Sg --wide +#name: strip with section group 6 + +#... + \[[ 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-7.d b/binutils/testsuite/binutils-all/strip-7.d new file mode 100644 index 0000000..791463b --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-7.d @@ -0,0 +1,18 @@ +#PROG: strip +#source: group-3.s +#strip: --strip-unneeded +#readelf: -Sg --wide +#name: strip with section group 7 + +#... + \[[ 0-9]+\] .group[ \t]+GROUP[ \t]+.* +#... + \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.* +#... + \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.* +#... +COMDAT group section \[[ 0-9]+\] `.group' \[foo3\] contains 2 sections: + \[Index\] Name + \[[ 0-9]+\] .text.* + \[[ 0-9]+\] .data.* +#pass diff --git a/binutils/testsuite/binutils-all/strip-8.d b/binutils/testsuite/binutils-all/strip-8.d new file mode 100644 index 0000000..5618510 --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-8.d @@ -0,0 +1,11 @@ +#PROG: strip +#source: group-4.s +#readelf: -Sg --wide +#name: strip with section group 8 + +#... + \[[ 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-9.d b/binutils/testsuite/binutils-all/strip-9.d new file mode 100644 index 0000000..7f07a0d --- /dev/null +++ b/binutils/testsuite/binutils-all/strip-9.d @@ -0,0 +1,18 @@ +#PROG: strip +#source: group-4.s +#strip: --strip-unneeded +#readelf: -Sg --wide +#name: strip with section group 9 + +#... + \[[ 0-9]+\] .group[ \t]+GROUP[ \t]+.* +#... + \[[ 0-9]+\] \.text.*[ \t]+PROGBITS[ \t0-9a-f]+AXG[ \t]+.* +#... + \[[ 0-9]+\] \.data.*[ \t]+PROGBITS[ \t0-9a-f]+WAG[ \t]+.* +#... +COMDAT group section \[[ 0-9]+\] `.group' \[foo4\] contains 2 sections: + \[Index\] Name + \[[ 0-9]+\] .text.* + \[[ 0-9]+\] .data.* +#pass diff --git a/binutils/testsuite/binutils-all/testranges-ia64.d b/binutils/testsuite/binutils-all/testranges-ia64.d new file mode 100644 index 0000000..9713236 --- /dev/null +++ b/binutils/testsuite/binutils-all/testranges-ia64.d @@ -0,0 +1,15 @@ +#PROG: objcopy +#source: testranges-ia64.s +#readelf: -wR --wide +#name: unordered .debug_info references to .debug_ranges +#target: ia64-*-* + +Contents of the .debug_ranges section: + + Offset Begin End + 00000000 00000001 00000002 + 00000000 + 00000010 00000000 00000002 + 00000010 + +#pass diff --git a/binutils/testsuite/binutils-all/testranges-ia64.s b/binutils/testsuite/binutils-all/testranges-ia64.s new file mode 100644 index 0000000..9af6b63 --- /dev/null +++ b/binutils/testsuite/binutils-all/testranges-ia64.s @@ -0,0 +1,57 @@ +# Test .debug_info can reference .debug_ranges entries without ordering the +# offsets strictly as increasing. + + .text +start: + .byte 1 +sub: + .byte 2 +end: + + .section .debug_ranges,"",@progbits +range: + +range_sub: + data4.ua @secrel(sub), @secrel(end) + data4.ua 0, 0 /* range terminator */ + +range_cu: + data4.ua @secrel(start), @secrel(end) + data4.ua 0, 0 /* range terminator */ + + .section .debug_info,"",@progbits + data4.ua debugE - debugS /* Length of Compilation Unit Info */ +debugS: + .short 0x2 /* DWARF version number */ + data4.ua @secrel(abbrev0) /* Offset Into Abbrev. Section */ + .byte 0x4 /* Pointer Size (in bytes) */ + + .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */ + data4.ua range_cu - range /* DW_AT_ranges */ + + .uleb128 0x2 /* (DIE (0x6d) DW_TAG_subprogram) */ + .ascii "A\0" /* DW_AT_name */ + data4.ua range_sub - range /* DW_AT_ranges */ +debugE: + + .section .debug_abbrev,"",@progbits +abbrev0: + .uleb128 0x1 /* (abbrev code) */ + .uleb128 0x11 /* (TAG: DW_TAG_compile_unit) */ + .byte 0x0 /* DW_children_no */ + .uleb128 0x55 /* (DW_AT_ranges) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .byte 0x0 + .byte 0x0 + + .uleb128 0x2 /* (abbrev code) */ + .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */ + .byte 0x0 /* DW_children_no */ + .uleb128 0x3 /* (DW_AT_name) */ + .uleb128 0x8 /* (DW_FORM_string) */ + .uleb128 0x55 /* (DW_AT_ranges) */ + .uleb128 0x6 /* (DW_FORM_data4) */ + .byte 0x0 + .byte 0x0 + + .byte 0x0 /* abbrevs terminator */ diff --git a/binutils/testsuite/binutils-all/testranges.d b/binutils/testsuite/binutils-all/testranges.d new file mode 100644 index 0000000..c074a35 --- /dev/null +++ b/binutils/testsuite/binutils-all/testranges.d @@ -0,0 +1,15 @@ +#PROG: objcopy +#source: testranges.s +#readelf: -wR --wide +#name: unordered .debug_info references to .debug_ranges +#not-target: ia64-*-* + +Contents of the .debug_ranges section: + + Offset Begin End + 00000000 00000001 00000002 + 00000000 + 00000010 00000000 00000002 + 00000010 + +#pass diff --git a/binutils/testsuite/binutils-all/testranges.s b/binutils/testsuite/binutils-all/testranges.s new file mode 100644 index 0000000..e1f9931 --- /dev/null +++ b/binutils/testsuite/binutils-all/testranges.s @@ -0,0 +1,61 @@ +# Test .debug_info can reference .debug_ranges entries without ordering the +# offsets strictly as increasing. + + .text +start: + .byte 1 +sub: + .byte 2 +end: + + .section .debug_ranges,"",%progbits +range: + +range_sub: + .4byte sub, end + .4byte 0, 0 ;# range terminator + +range_cu: + .4byte start, end + .4byte 0, 0 ;# range terminator + + .section .debug_info,"",%progbits + .4byte debugE - debugS ;# Length of Compilation Unit Info +debugS: + .short 0x2 ;# DWARF version number + .4byte abbrev0 ;# Offset Into Abbrev. Section + .byte 0x4 ;# Pointer Size (in bytes) + + .uleb128 0x1 ;# (DIE (0xb) DW_TAG_compile_unit) + .4byte range_cu - range ;# DW_AT_ranges + + .uleb128 0x2 ;# (DIE (0x6d) DW_TAG_subprogram) + .ascii "A\0" ;# DW_AT_name + .4byte range_sub - range ;# DW_AT_ranges + + ;# minimal section alignment on alpha-* is 2, ensure no new invalid CU + ;# will be started. + .balign 2 +debugE: + + .section .debug_abbrev,"",%progbits +abbrev0: + .uleb128 0x1 ;# (abbrev code) + .uleb128 0x11 ;# (TAG: DW_TAG_compile_unit) + .byte 0x0 ;# DW_children_no + .uleb128 0x55 ;# (DW_AT_ranges) + .uleb128 0x6 ;# (DW_FORM_data4) + .byte 0x0 + .byte 0x0 + + .uleb128 0x2 ;# (abbrev code) + .uleb128 0x2e ;# (TAG: DW_TAG_subprogram) + .byte 0x0 ;# DW_children_no + .uleb128 0x3 ;# (DW_AT_name) + .uleb128 0x8 ;# (DW_FORM_string) + .uleb128 0x55 ;# (DW_AT_ranges) + .uleb128 0x6 ;# (DW_FORM_data4) + .byte 0x0 + .byte 0x0 + + .byte 0x0 ;# abbrevs terminator diff --git a/binutils/testsuite/binutils-all/unique.s b/binutils/testsuite/binutils-all/unique.s new file mode 100644 index 0000000..44fb7a0 --- /dev/null +++ b/binutils/testsuite/binutils-all/unique.s @@ -0,0 +1,4 @@ + .data + .type foo,%gnu_unique_object +foo: + .byte 0 diff --git a/binutils/testsuite/binutils-all/vax/objdump.exp b/binutils/testsuite/binutils-all/vax/objdump.exp index 819027a..f4734a5 100644 --- a/binutils/testsuite/binutils-all/vax/objdump.exp +++ b/binutils/testsuite/binutils-all/vax/objdump.exp @@ -1,5 +1,5 @@ # -# Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2002, 2005, 2007 +# Copyright 1993, 1994, 1995, 1997, 1999, 2000, 2002, 2005, 2007, 2009 # Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify diff --git a/binutils/testsuite/binutils-all/windres/msupdate b/binutils/testsuite/binutils-all/windres/msupdate index 236cff2..94d3698 100755 --- a/binutils/testsuite/binutils-all/windres/msupdate +++ b/binutils/testsuite/binutils-all/windres/msupdate @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright 2001, 2007 Free Software Foundation, Inc. +# Copyright 2001, 2007, 2009 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 diff --git a/binutils/testsuite/binutils-all/windres/windres.exp b/binutils/testsuite/binutils-all/windres/windres.exp index 9c2f477..5b0c4af 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, 2006, 2007 Free Software Foundation, Inc. +# Copyright 2001, 2003, 2004, 2006, 2007, 2009 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 @@ -23,15 +23,6 @@ if {![istarget "i*86-*-*"] && ![istarget "x86_64-*-mingw*"] } { return } -if {![istarget "i*86-*-*pe*"] \ - && ![istarget "i*86-*-cygwin*"] \ - && ![istarget "i*86-*-mingw32*"] \ - && ![istarget "x86_64-*-mingw*"] } { - set target_xfail "yes" -} else { - set target_xfail "no" -} - if {![info exists WINDRES]} then { return } @@ -44,7 +35,6 @@ set wr "$WINDRES --include-dir $srcdir/$subdir" if [file exists "$srcdir/../../winsup/w32api/include"] { set wr "$wr --include-dir $srcdir/../../winsup/w32api/include" - set target_xfail "no" } else { send_log "\nWarning: Assuming windres can find the win32 headers\n\n" } @@ -78,10 +68,6 @@ foreach res $res_list { } } - if { "$broot" != "bmpalign" && "$target_xfail" == "yes" } { - setup_xfail *-* - } - verbose "$wr -J rc -O res $res tmpdir/$broot.res" 1 catch "exec $wr -J rc -O res $res tmpdir/$broot.res" err @@ -116,10 +102,6 @@ foreach res $res_list { continue } - if { "$broot" != "bmpalign" && "$target_xfail" == "yes" } { - setup_xfail *-* - } - verbose "$OBJDUMP -b binary -s tmpdir/$broot.res > tmpdir/$broot.dump" 1 catch "exec $OBJDUMP -b binary -s tmpdir/$broot.res > tmpdir/$broot.dump" err diff --git a/binutils/testsuite/config/default.exp b/binutils/testsuite/config/default.exp index 3c849b8..f3fd624 100644 --- a/binutils/testsuite/config/default.exp +++ b/binutils/testsuite/config/default.exp @@ -1,4 +1,4 @@ -# Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2004, 2005, 2007 +# Copyright 1993, 1994, 1995, 1997, 1999, 2001, 2002, 2004, 2005, 2007, 2009 # Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify @@ -94,8 +94,14 @@ if {[file isfile ld/ld-new[exe_ext]]} then { } else { link_or_copy ld/ld-new ld[exe_ext] } -set gcc_gas_flag "-B[pwd]/tmpdir/gas/" -set dlltool_gas_flag "-S [pwd]/tmpdir/gas/as[exe_ext]" +if {[file isfile tmpdir/gas/as[exe_ext]]} then { + set gcc_gas_flag "-B[pwd]/tmpdir/gas/" + set dlltool_gas_flag "-S [pwd]/tmpdir/gas/as[exe_ext]" +} else { + # Testing an installed toolchain. + set gcc_gas_flag "" + set dlltool_gas_flag "" +} # # binutils_run diff --git a/binutils/testsuite/config/hppa.sed b/binutils/testsuite/config/hppa.sed index d8607d8..5b1b808 100644 --- a/binutils/testsuite/config/hppa.sed +++ b/binutils/testsuite/config/hppa.sed @@ -1,4 +1,4 @@ s/# Old OSF sed blows up if you have a sed command starting with "#"// s/# Avoid it by putting the comments within real sed commands.// -s/# Fix the definition of common_symbol to be correct for the PA assebmlers.// +s/# Fix the definition of common_symbol to be correct for the PA assemblers.// s/ \.comm common_symbol,4/common_symbol .comm 4/ diff --git a/binutils/testsuite/lib/utils-lib.exp b/binutils/testsuite/lib/utils-lib.exp index 77af172..9881f01 100644 --- a/binutils/testsuite/lib/utils-lib.exp +++ b/binutils/testsuite/lib/utils-lib.exp @@ -1,5 +1,5 @@ -# Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007 -# Free Software Foundation, Inc. +# Copyright 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2003, 2004, 2006, 2007, +# 2009 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 @@ -462,7 +462,7 @@ proc run_dump_test { name {extra_options {}} } { set srcfile $srcdir/$subdir/$opts(source) } - set exec_output [binutils_assemble ${srcfile} tmpdir/bintest.o] + set exec_output [binutils_assemble ${srcfile} $tempfile] if [string match "" $exec_output] then { send_log "$exec_output\n" verbose "$exec_output" @@ -486,14 +486,14 @@ proc run_dump_test { name {extra_options {}} } { eval set progopts \$[string toupper $dumpprogram]FLAGS eval set binary \$[string toupper $dumpprogram] - if { [which $binary] == 0 } { + if { ![is_remote host] && [which $binary] == 0 } { untested $testname return } verbose "running $binary $progopts $progopts1" 3 - set cmd "$binary $progopts $progopts1 ${copyfile}.o > tmpdir/dump.out" + set cmd "$binary $progopts $progopts1 ${copyfile}.o" # Ensure consistent sorting of symbols if {[info exists env(LC_ALL)]} { @@ -501,13 +501,18 @@ proc run_dump_test { name {extra_options {}} } { } set env(LC_ALL) "C" send_log "$cmd\n" - catch "exec $cmd" comp_output + set comp_output [remote_exec host $cmd "" "/dev/null" "tmpdir/dump.out"] 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 { [lindex $comp_output 0] != 0 } then { + send_log "$comp_output\n" + fail $testname + return + } + set comp_output [prune_warnings [lindex $comp_output 1]] if ![string match "" $comp_output] then { send_log "$comp_output\n" fail $testname diff --git a/binutils/unwind-ia64.c b/binutils/unwind-ia64.c index ad1827c..5703470 100644 --- a/binutils/unwind-ia64.c +++ b/binutils/unwind-ia64.c @@ -1,5 +1,5 @@ /* unwind-ia64.c -- utility routines to dump IA-64 unwind info for readelf. - Copyright 2000, 2001, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of GNU Binutils. diff --git a/binutils/unwind-ia64.h b/binutils/unwind-ia64.h index 1cc598d..b004bc3 100644 --- a/binutils/unwind-ia64.h +++ b/binutils/unwind-ia64.h @@ -1,5 +1,5 @@ /* unwind-ia64.h -- dump IA-64 unwind info. - Copyright 2000, 2001, 2002, 2003, 2007 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by David Mosberger-Tang This file is part of GNU Binutils. diff --git a/binutils/version.c b/binutils/version.c index 6988410..542d881 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, - 2007 Free Software Foundation, Inc. + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -32,7 +32,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 2007 Free Software Foundation, Inc.\n")); + printf (_("Copyright 2009 Free Software Foundation, Inc.\n")); printf (_("\ This program is free software; you may redistribute it under the terms of\n\ the GNU General Public License version 3 or (at your option) any later version.\n\ diff --git a/binutils/windmc.c b/binutils/windmc.c index 14a2f86..c7aa8f8 100644 --- a/binutils/windmc.c +++ b/binutils/windmc.c @@ -1,5 +1,5 @@ /* windmc.c -- a program to compile Windows message files. - Copyright 2007 + Copyright 2007, 2008 Free Software Foundation, Inc. Written by Kai Tietz, Onevision. @@ -175,7 +175,7 @@ res_init (void) void * res_alloc (rc_uint_type bytes) { - return (void *) obstack_alloc (&res_obstack, (size_t) bytes); + return obstack_alloc (&res_obstack, (size_t) bytes); } static FILE * @@ -245,18 +245,23 @@ set_endianess (bfd *abfd, const char *target) 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 (); + const char * tname = target_vec->name; + const char ** arches = bfd_arch_list (); - if (arch && tname) + if (arches && tname) { + const char ** arch = arches; + 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) { @@ -266,6 +271,9 @@ set_endianess (bfd *abfd, const char *target) arch++; } } + + free (arches); + if (! def_target_arch) fatal ("Can't detect architecture."); } @@ -373,7 +381,8 @@ convert_unicode_to_ACP (const unichar *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); + fatal ("unicode string not mappable to ASCII codepage 0x%lx.\n", + (unsigned long) mcset_codepage_out); return s; } @@ -699,13 +708,11 @@ windmc_write_bin (const char *filename, mc_node_lang **nl, int elems) if (elems <= 0) return; mc_bfd.abfd = windmc_open_as_binary (filename); - mc_bfd.sec = bfd_make_section (mc_bfd.abfd, ".data"); + mc_bfd.sec = bfd_make_section_with_flags (mc_bfd.abfd, ".data", + (SEC_HAS_CONTENTS | SEC_ALLOC + | SEC_LOAD | SEC_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; @@ -797,8 +804,8 @@ write_rc (FILE *fp) int i, l; fprintf (fp, - "/* Do not edit this file manually.\n" - " This file is autogenerated by windmc. */\n\n"); + "/* Do not edit this file manually.\n" + " This file is autogenerated by windmc. */\n\n"); if (! mc_nodes_lang_count) return; n = NULL; @@ -810,10 +817,11 @@ write_rc (FILE *fp) ++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)); + n->lang->lang_info.country, n->lang->lang_info.name, + (unsigned) n->lang->lang_info.wincp); + fprintf (fp, "LANGUAGE 0x%lx, 0x%lx\n", + (unsigned long) (n->lang->nval & 0x3ff), + (unsigned long) ((n->lang->nval & 0xffff) >> 10)); fprintf (fp, "1 MESSAGETABLE \""); if (mcset_prefix_bin) fprintf (fp, "%s_", mcset_mc_basename); @@ -1136,7 +1144,7 @@ main (int argc, char **argv) unichar *u; rc_uint_type ul; char *buff; - long flen; + bfd_size_type flen; FILE *fp = fopen (input_filename, "rb"); if (!fp) @@ -1147,7 +1155,8 @@ main (int argc, char **argv) fseek (fp, 0, SEEK_SET); buff = malloc (flen + 3); memset (buff, 0, flen + 3); - fread (buff, 1, flen, fp); + if (fread (buff, 1, flen, fp) < flen) + fatal (_("unable to read contents of %s"), input_filename); fclose (fp); if (mcset_text_in_is_unicode != 1) { diff --git a/binutils/windres.c b/binutils/windres.c index ac643ad..c3b1f50 100644 --- a/binutils/windres.c +++ b/binutils/windres.c @@ -1,6 +1,6 @@ /* windres.c -- a program to manipulate Windows resources - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007 - Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, + 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Rewritten by Kai Tietz, Onevision. @@ -157,7 +157,7 @@ res_init (void) void * res_alloc (rc_uint_type bytes) { - return (void *) obstack_alloc (&res_obstack, (size_t) bytes); + return obstack_alloc (&res_obstack, (size_t) bytes); } /* We also use an obstack to save memory used while writing out a set @@ -178,7 +178,7 @@ reswr_init (void) void * reswr_alloc (rc_uint_type bytes) { - return (void *) obstack_alloc (&reswr_obstack, (size_t) bytes); + return obstack_alloc (&reswr_obstack, (size_t) bytes); } /* Open a file using the include directory search list. */ @@ -765,6 +765,12 @@ windres_add_include_dir (const char *p) { struct include_dir *n, **pp; + /* Computing paths is often complicated and error prone. + The easiest way to check for mistakes is at the time + we add them to include_dirs. */ + assert (p != NULL); + assert (*p != '\0'); + n = xmalloc (sizeof *n); n->next = NULL; n->dir = (char * ) p; @@ -1056,7 +1062,27 @@ main (int argc, char **argv) return 0; } -static void set_endianess (bfd *abfd, const char *target) +static int +find_arch_match(const char *tname,const char **arch) +{ + 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; + return 1; + } + arch++; + } + return 0; +} + +static void +set_endianess (bfd *abfd, const char *target) { const bfd_target *target_vec; @@ -1065,26 +1091,39 @@ static void set_endianess (bfd *abfd, const char *target) 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) + const char * tname = target_vec->name; + const char ** arches = bfd_arch_list(); + + if (arches && tname) { - if (strchr (tname, '-') != NULL) - tname = strchr (tname, '-') + 1; - while (*arch != NULL) + char *hyp = strchr (tname, '-'); + + if (hyp != 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) + tname = ++hyp; + + /* Make sure we dectect architecture names + for triplets like "pe-arm-wince-little". */ + if (!find_arch_match (tname, arches)) { - def_target_arch = *arch; - break; + char *new_tname = (char *) alloca (strlen (hyp) + 1); + strcpy (new_tname, hyp); + while ((hyp = strrchr (new_tname, '-')) != NULL) + { + *hyp = 0; + if (find_arch_match (new_tname, arches)) + break; + } } - arch++; } + else + find_arch_match (tname, arches); } + + free (arches); + if (! def_target_arch) fatal ("Can't detect architecture."); } @@ -1150,8 +1189,8 @@ set_windres_bfd (windres_bfd *wrbfd, bfd *abfd, asection *sec, rc_uint_type kind } void -set_windres_bfd_content(windres_bfd *wrbfd, const void *data, rc_uint_type off, - rc_uint_type length) +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) { @@ -1163,8 +1202,8 @@ set_windres_bfd_content(windres_bfd *wrbfd, const void *data, rc_uint_type off, } void -get_windres_bfd_content(windres_bfd *wrbfd, void *data, rc_uint_type off, - rc_uint_type length) +get_windres_bfd_content (windres_bfd *wrbfd, void *data, rc_uint_type off, + rc_uint_type length) { if (WR_KIND(wrbfd) != WR_KIND_TARGET) { diff --git a/binutils/winduni.c b/binutils/winduni.c index bf5dbd4..572145e 100644 --- a/binutils/winduni.c +++ b/binutils/winduni.c @@ -1,5 +1,5 @@ /* winduni.c -- unicode support for the windres program. - Copyright 1997, 1998, 2000, 2001, 2003, 2007 + Copyright 1997, 1998, 2000, 2001, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Rewritten by Kai Tietz, Onevision. @@ -42,7 +42,7 @@ #include "winduni.h" #include "safe-ctype.h" -#if HAVE_ICONV_H +#if HAVE_ICONV #include #endif @@ -616,16 +616,16 @@ codepage_from_unicode (rc_uint_type *length, const unichar *unicode, char **asci *length = len; } -#ifdef HAVE_ICONV_H +#if defined (HAVE_ICONV) && !defined (_WIN32) && !defined (__CYGWIN__) static int -iconv_onechar (iconv_t cd, const char *s, char *d, int d_len, const char **n_s, char **n_d) +iconv_onechar (iconv_t cd, ICONV_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; + ICONV_CONST char *tmp_s = s; size_t ret; size_t s_left = (size_t) i; size_t d_left = (size_t) d_len; @@ -652,7 +652,7 @@ wind_iconv_cp (rc_uint_type cp) return NULL; return lim->iconv_name; } -#endif /* HAVE_ICONV_H */ +#endif /* HAVE_ICONV */ static rc_uint_type wind_MultiByteToWideChar (rc_uint_type cp, const char *mb, @@ -661,12 +661,20 @@ wind_MultiByteToWideChar (rc_uint_type cp, const char *mb, rc_uint_type ret = 0; #if defined (_WIN32) || defined (__CYGWIN__) - ret = (rc_uint_type) MultiByteToWideChar (cp, MB_PRECOMPOSED, + rc_uint_type conv_flags = MB_PRECOMPOSED; + + /* MB_PRECOMPOSED is not allowed for UTF-7 or UTF-8. + MultiByteToWideChar will set the last error to + ERROR_INVALID_FLAGS if we do. */ + if (cp == CP_UTF8 || cp == CP_UTF7) + conv_flags = 0; + + ret = (rc_uint_type) MultiByteToWideChar (cp, conv_flags, mb, -1, u, u_len); /* Convert to bytes. */ ret *= sizeof (unichar); -#elif defined (HAVE_ICONV_H) +#elif defined (HAVE_ICONV) int first = 1; char tmp[32]; char *p_tmp; @@ -679,11 +687,11 @@ wind_MultiByteToWideChar (rc_uint_type cp, const char *mb, while (1) { int iret; - const char *n_mb; - char *n_tmp; + const char *n_mb = ""; + char *n_tmp = ""; p_tmp = tmp; - iret = iconv_onechar (cd, (const char *) mb, p_tmp, 32, & n_mb, & n_tmp); + iret = iconv_onechar (cd, (ICONV_CONST char *) mb, p_tmp, 32, & n_mb, & n_tmp); if (first) { first = 0; @@ -739,7 +747,7 @@ wind_WideCharToMultiByte (rc_uint_type cp, const unichar *u, char *mb, rc_uint_t ret = (rc_uint_type) WideCharToMultiByte (cp, 0, u, -1, mb, mb_len, NULL, & used_def); -#elif defined (HAVE_ICONV_H) +#elif defined (HAVE_ICONV) int first = 1; char tmp[32]; char *p_tmp; @@ -752,11 +760,11 @@ wind_WideCharToMultiByte (rc_uint_type cp, const unichar *u, char *mb, rc_uint_t while (1) { int iret; - const char *n_u; - char *n_tmp; + const char *n_u = ""; + char *n_tmp = ""; p_tmp = tmp; - iret = iconv_onechar (cd, (const char *) u, p_tmp, 32, &n_u, & n_tmp); + iret = iconv_onechar (cd, (ICONV_CONST char *) u, p_tmp, 32, &n_u, & n_tmp); if (first) { first = 0; diff --git a/binutils/winduni.h b/binutils/winduni.h index 4e6e3eb..8786415 100644 --- a/binutils/winduni.h +++ b/binutils/winduni.h @@ -1,5 +1,5 @@ /* winduni.h -- header file for unicode support for windres program. - Copyright 1997, 1998, 2002, 2007 + Copyright 1997, 1998, 2002, 2005, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor, Cygnus Support. Rewritten by Kai Tietz, Onevision. diff --git a/binutils/wrstabs.c b/binutils/wrstabs.c index 3b4f3f5..5a98828 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, 2007 + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. Written by Ian Lance Taylor . @@ -1545,7 +1545,7 @@ stab_class_static_member (void *p, const char *name, const char *physname, /* Add a base class to the class on the type stack. */ static bfd_boolean -stab_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual, +stab_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean is_virtual, enum debug_visibility visibility) { struct stab_write_handle *info = (struct stab_write_handle *) p; @@ -1561,7 +1561,7 @@ stab_class_baseclass (void *p, bfd_vma bitpos, bfd_boolean virtual, /* Build the base class specifier. */ buf = (char *) xmalloc (strlen (s) + 25); - buf[0] = virtual ? '1' : '0'; + buf[0] = is_virtual ? '1' : '0'; switch (visibility) { default: diff --git a/compile b/compile old mode 100644 new mode 100755 index 1b1d232..ec64c62 --- a/compile +++ b/compile @@ -1,9 +1,10 @@ #! /bin/sh # Wrapper for compilers which do not understand `-c -o'. -scriptversion=2005-05-14.22 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,8 +18,7 @@ scriptversion=2005-05-14.22 # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -103,13 +103,13 @@ if test -z "$ofile" || test -z "$cfile"; then fi # Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. -# Note: use `[/.-]' here to ensure that we don't use the same name +# 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 +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break @@ -138,5 +138,6 @@ exit $ret # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff --git a/config-ml.in b/config-ml.in index cc9cf66..f2497ad 100644 --- a/config-ml.in +++ b/config-ml.in @@ -1,8 +1,8 @@ # Configure fragment invoked in the post-target section for subdirs # wanting multilib support. # -# Copyright (C) 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 -# Free Software Foundation, Inc. +# Copyright (C) 1995, 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 @@ -135,7 +135,12 @@ do *) optarg=yes ;; esac enableopt=`echo ${option} | sed 's:^--::;s:=.*$::;s:-:_:g'` - eval $enableopt="$optarg" + # enable_shared and enable_static are handled by configure. + # Don't undo its work. + case $enableopt in + enable_shared | enable_static) ;; + *) eval $enableopt="$optarg" ;; + esac ;; --norecursion | --no-recursion) ml_norecursion=yes @@ -382,28 +387,6 @@ mips*-*-*) esac done fi - case " $multidirs " in - *" mabi=64 "*) - # We will not be able to create libraries with -mabi=64 if - # we cannot even link a trivial program. It usually - # indicates the 64bit libraries are missing. - if echo 'main() {}' > conftest.c && - ${CC-gcc} -mabi=64 conftest.c -o conftest; then - : - else - echo Could not link program with -mabi=64, disabling it. - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *mabi=64* ) : ;; - *) multidirs="${multidirs} ${x}" ;; - esac - done - fi - rm -f conftest.c conftest - ;; - esac ;; powerpc*-*-* | rs6000*-*-*) if [ x$enable_aix64 = xno ] @@ -495,30 +478,6 @@ powerpc*-*-* | rs6000*-*-*) done fi ;; -sparc*-*-*) - case " $multidirs " in - *" m64 "*) - # We will not be able to create libraries with -m64 if - # we cannot even link a trivial program. It usually - # indicates the 64bit libraries are missing. - if echo 'main() {}' > conftest.c && - ${CC-gcc} -m64 conftest.c -o conftest; then - : - else - echo Could not link program with -m64, disabling it. - old_multidirs="${multidirs}" - multidirs="" - for x in ${old_multidirs}; do - case "$x" in - *m64* ) : ;; - *) multidirs="${multidirs} ${x}" ;; - esac - done - fi - rm -f conftest.c conftest - ;; - esac - ;; esac # Remove extraneous blanks from multidirs. @@ -540,7 +499,7 @@ multi-do: else \ rootpre=`${PWD_COMMAND}`/; export rootpre; \ srcrootpre=`cd $(srcdir); ${PWD_COMMAND}`/; export srcrootpre; \ - lib=`echo $${rootpre} | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \ + lib=`echo "$${rootpre}" | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; \ compiler="$(CC)"; \ for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \ dir=`echo $$i | sed -e 's/;.*$$//'`; \ @@ -586,8 +545,13 @@ multi-clean: true; \ else \ lib=`${PWD_COMMAND} | sed -e 's,^.*/\([^/][^/]*\)$$,\1,'`; \ - for dir in Makefile $(MULTIDIRS); do \ - if [ -f ../$${dir}/$${lib}/Makefile ]; then \ + for dir in : $(MULTIDIRS); do \ + test $$dir != : || continue; \ +EOF +cat >>Multi.tem <>Multi.tem <<\EOF if (cd ../$${dir}/$${lib}; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \ then true; \ else exit 1; \ @@ -605,7 +569,7 @@ mv Makefile.tem ${Makefile} fi # ${ml_toplevel_p} = yes if [ "${ml_verbose}" = --verbose ]; then - echo "Adding multilib support to Makefile in ${ml_realsrcdir}" + echo "Adding multilib support to ${Makefile} in ${ml_realsrcdir}" if [ "${ml_toplevel_p}" = yes ]; then echo "multidirs=${multidirs}" fi @@ -696,7 +660,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then fi ml_origdir=`${PWDCMD-pwd}` - ml_libdir=`echo $ml_origdir | sed -e 's,^.*/,,'` + ml_libdir=`echo "$ml_origdir" | sed -e 's,^.*/,,'` # cd to top-level-build-dir/${with_target_subdir} cd .. @@ -732,7 +696,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then case ${srcdir} in ".") - echo Building symlink tree in `${PWDCMD-pwd}`/${ml_dir}/${ml_libdir} + echo "Building symlink tree in `${PWDCMD-pwd}`/${ml_dir}/${ml_libdir}" if [ "${with_target_subdir}" != "." ]; then ml_unsubdir="../" else @@ -740,7 +704,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then fi (cd ${ml_dir}/${ml_libdir}; ../${dotdot}${ml_unsubdir}symlink-tree ../${dotdot}${ml_unsubdir}${ml_libdir} "") - if [ -f ${ml_dir}/${ml_libdir}/Makefile ]; then + if [ -f ${ml_dir}/${ml_libdir}/${Makefile} ]; then if [ x"${MAKE}" = x ]; then (cd ${ml_dir}/${ml_libdir}; make distclean) else @@ -797,7 +761,7 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then else # Create a regular expression that matches any string as long # as ML_POPDIR. - popdir_rx=`echo ${ML_POPDIR} | sed 's,.,.,g'` + popdir_rx=`echo "${ML_POPDIR}" | sed 's,.,.,g'` CC_= for arg in ${CC}; do case $arg in @@ -901,11 +865,11 @@ if [ -n "${multidirs}" ] && [ -z "${ml_norecursion}" ]; then exit 1 fi - cd ${ML_POPDIR} + cd "${ML_POPDIR}" done - cd ${ml_origdir} + cd "${ml_origdir}" fi fi # ${ml_toplevel_p} = yes diff --git a/config.guess b/config.guess index 951383e..e3a2116 100755 --- a/config.guess +++ b/config.guess @@ -1,10 +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, 2006 Free Software Foundation, -# Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-05-17' +timestamp='2009-06-10' # 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 @@ -56,8 +56,8 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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." @@ -170,7 +170,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -324,14 +324,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; - i86pc:SunOS:5.*:* | ix86xen:SunOS:5.*:*) - echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize @@ -532,7 +548,7 @@ EOF echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[45]) + *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -640,7 +656,7 @@ EOF # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -793,16 +809,22 @@ EOF exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in - x86) + x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd) + EM64T | authenticamd | genuineintel) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; + IA64) + echo ia64-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 ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -833,7 +855,14 @@ EOF echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -856,40 +885,17 @@ EOF m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - 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:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips64 - #undef mips64el + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 + CPU=${UNAME_MACHINE} #else CPU= #endif @@ -921,10 +927,13 @@ EOF EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -954,8 +963,8 @@ EOF x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; - xtensa:Linux:*:*) - echo xtensa-unknown-linux-gnu + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so @@ -972,17 +981,6 @@ EOF elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - coff-i386) - echo "${UNAME_MACHINE}-pc-linux-gnucoff" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build @@ -1048,7 +1046,7 @@ EOF i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1092,8 +1090,11 @@ EOF pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i386. - echo i386-pc-msdosdjgpp + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 @@ -1131,6 +1132,16 @@ EOF 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; @@ -1143,7 +1154,7 @@ EOF rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1206,6 +1217,9 @@ EOF BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1314,6 +1328,9 @@ EOF i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 @@ -1474,9 +1491,9 @@ This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD and - http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub + http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD If the version you run ($0) is already up to date, please send the following data and any information you think might be diff --git a/config.rpath b/config.rpath index 937edf5..9316b91 100755 --- a/config.rpath +++ b/config.rpath @@ -125,7 +125,7 @@ esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in - aix3* | aix4* | aix5*) + aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no @@ -198,7 +198,7 @@ else hardcode_direct=unsupported fi ;; - aix4* | aix5*) + aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. @@ -208,7 +208,7 @@ 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 runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes @@ -432,7 +432,7 @@ libname_spec='lib$name' case "$host_os" in aix3*) ;; - aix4* | aix5*) + aix[4-9]*) ;; amigaos*) ;; diff --git a/config.sub b/config.sub index 0146462..32d764c 100755 --- a/config.sub +++ b/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 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, 2008, 2009 +# Free Software Foundation, Inc. -timestamp='2007-08-29' +timestamp='2009-08-17' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -72,8 +72,8 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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." @@ -122,6 +122,7 @@ maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -148,10 +149,13 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -249,13 +253,16 @@ case $basic_machine in | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | mcore | mep \ + | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ - | mips64vr | mips64vrel \ + | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ @@ -268,6 +275,7 @@ case $basic_machine in | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ + | moxie \ | mt \ | msp430 \ | nios | nios2 \ @@ -277,7 +285,7 @@ case $basic_machine in | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ - | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -286,7 +294,7 @@ case $basic_machine in | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ - | z8k) + | z8k | z80) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) @@ -329,14 +337,17 @@ case $basic_machine in | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ - | mips64vr-* | mips64vrel-* \ + | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ @@ -358,20 +369,24 @@ case $basic_machine in | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ - | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ - | xstormy16-* | xtensa-* \ + | xstormy16-* | xtensa*-* \ | ymp-* \ - | z8k-*) + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. @@ -435,6 +450,10 @@ case $basic_machine in basic_machine=m68k-apollo os=-bsd ;; + aros) + basic_machine=i386-pc + os=-aros + ;; aux) basic_machine=m68k-apple os=-aux @@ -443,10 +462,26 @@ case $basic_machine in basic_machine=ns32k-sequent os=-dynix ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; c90) basic_machine=c90-cray os=-unicos ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; convex-c1) basic_machine=c1-convex os=-bsd @@ -475,11 +510,7 @@ case $basic_machine in basic_machine=craynv-cray os=-unicosmp ;; - cr16c) - basic_machine=cr16c-unknown - os=-elf - ;; - cr16) + cr16) basic_machine=cr16-unknown os=-elf ;; @@ -518,6 +549,10 @@ case $basic_machine in basic_machine=m88k-motorola os=-sysv3 ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp @@ -672,6 +707,14 @@ case $basic_machine in basic_machine=m68k-isi os=-sysv ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; m88k-omron*) basic_machine=m88k-omron ;; @@ -683,6 +726,9 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -817,6 +863,14 @@ case $basic_machine in basic_machine=i860-intel os=-osf ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; pbd) basic_machine=sparc-tti ;; @@ -1025,6 +1079,10 @@ case $basic_machine in basic_machine=tic6x-unknown os=-coff ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; tx39) basic_machine=mipstx39-unknown ;; @@ -1100,6 +1158,10 @@ case $basic_machine in basic_machine=z8k-unknown os=-sim ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -1138,7 +1200,7 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) @@ -1208,10 +1270,11 @@ case $os in # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* \ + | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ @@ -1220,7 +1283,7 @@ case $os in | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* \ + | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ @@ -1360,6 +1423,9 @@ case $os in -zvmoe) os=-zvmoe ;; + -dicos*) + os=-dicos + ;; -none) ;; *) @@ -1557,7 +1623,7 @@ case $basic_machine in -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) diff --git a/config/ChangeLog b/config/ChangeLog index ffa8a92..f45a3cc 100644 --- a/config/ChangeLog +++ b/config/ChangeLog @@ -1,3 +1,264 @@ +2009-08-22 Ralf Wildenhues + + * override.m4 (_GCC_AUTOCONF_VERSION): Bump to 2.64. + +2009-08-19 Ralf Wildenhues + + * override.m4 (AC_DISABLE_OPTION_CHECKING): Define to be + empty if not defined, to avoid error with 2.59. + (_AC_LANG_IO_PROGRAM): When the Autoconf version is exactly + 2.64, avoid per-language instances to drop fopen from test + program. + +2009-07-30 Ralf Wildenhues + + * extensions.m4 (AC_USE_SYSTEM_EXTENSIONS): Do not expand + for Autoconf 2.62 or newer. + * tls.m4 (GCC_CHECK_TLS): Fix m4 quotation. + * no-executables.m4 (_AC_COMPILER_EXEEXT): Fix m4 quotation. + * override.m4 (m4_copy_force, m4_rename_force): Provide + macros if not defined. + (AC_PREREQ): Use m4_copy_force. + +2009-07-17 Joseph Myers + + PR other/40784 + * tls.m4 (GCC_CHECK_TLS): Add extra quoting around argument to + AC_LINK_IFELSE. + +2009-07-16 Joseph Myers + + * tls.m4 (GCC_CHECK_TLS): Also test TLS in a shared library when + cross-compiling. + +2009-06-25 Olivier Hainque + + * config/mh-ppc-aix (BOOT_ADAFLAGS): Remove -mminimal-toc. + +2009-05-26 Rafael Avila de Espindola + + * plugins.m4: New. + +2009-05-12 Alexandre Oliva + + * multi.m4: Save CXX, GFORTRAN and GCJ in config.status. + * mt-gnu (CXXFLAGS_FOR_TARGET): Adjust. + * bootstrap-O1.mk: New. + * bootstrap-O3.mk: New. + * bootstrap-debug.mk: New. + +2009-02-02 Doug Evans + + * tcl.m4 (SC_PATH_TCLCONFIG): Don't exit 0 if tclconfig fails. + (SC_PATH_TKCONFIG): Don't exit 0 if tkconfig fails. + (SC_LOAD_TCLCONFIG): Quote all uses of TCL_BIN_DIR, it may contain + "# no Tcl configs found". + (SC_LOAD_TKCONFIG): Similarily for TK_BIN_DIR. + +2009-04-09 Jakub Jelinek + + * lead-dot.m4: Change copyright header to refer to version + 3 of the GNU General Public License and to point readers at the + COPYING3 file and the FSF's license web page. + * warnings.m4: Likewise. + +2009-02-11 Kai Tietz + + * mh-cygwin (LDFLAGS): Add linker option to increase stack limit + up to 8MB. + +2009-01-23 Jie Zhang + + * tls.m4 (GCC_CHECK_EMUTLS): Define. + +2008-12-21 Andrew Pinski + + PR target/38300 + * unwind_ipinfo.m4: Darwin before 9 does not have _Unwind_GetIPInfo. + +2008-11-21 Kai Tietz + + Fix PR/25502 + * mh-mingw (BOOT_CFLAGS): Add -Wno-pedantic-ms-format switch. + +2008-11-12 Steve Ellcey + + PR target/27880 + * unwind_ipinfo.m4 (GCC_CHECK_UNWIND_GETIPINFO): Change from + link test to target based test. + +2008-08-09 Richard Sandiford + + * mt-mips16-compat: New file, taken from mt-mips-elfoabi. + * mt-mips-elfoabi: Include mt-mips16-compat. + * mt-mips-gnu: New file. + +2008-08-03 Alan Modra + + * mt-spu (all-ld): Update for ld Makefile changes. + +2008-08-02 Keith Seitz + + * tcl.m4 (SC_PATH_TCLCONFIG): Add some simple logic to deal + with cygwin. + (SC_PATH_TKCONFIG): Likewise. + +2008-07-30 Paolo Bonzini + + * mh-pa: New, from gcc/config/pa/x-ada. + * mh-pa-hpux10: New, from gcc/config/pa/x-ada-hpux10. + +2008-07-25 Keith Seitz + + * acinclude.m4: Remove libide, libgui, and all the other Tcl + functions. + * tcl.m4: New file. + +2008-07-11 Joseph Myers + + * mh-mingw (LDFLAGS): Append to rather than replacing previous + value. + +2008-06-17 Ralf Wildenhues + + * override.m4: Use m4_version_prereq throughout. + (_AC_ARG_VAR_VALIDATE, AC_MSG_FAILURE): Backport from git + Autoconf: output pwd along with fatal errors, so the right + config.log file is hinted at more prominently. + (PARSE_ARGS): Push setting of ac_pwd in this diversion. + (_GCC_AUTOCONF_VERSION): New, define to 2.59 if not defined. + (_GCC_AUTOCONF_VERSION_CHECK): New macro, require use of Autoconf + version _GCC_AUTOCONF_VERSION throughout the tree. + (m4_wrap): New override, fix for Posix semantics of m4wrap. + +2008-06-11 Bernhard Fischer + + * tls.m4: Fix typos. + +2008-06-08 Joseph Myers + + PR tree-optimization/36218 + * mh-mingw (LDFLAGS): Define. + +2008-06-05 Danny Smith + + PR driver/35916 + * mh-mingw (CFLAGS): Add -D__USE_MINGW_ACCESS. + +2008-05-12 Samuel Tardieu + Paolo Bonzini + + PR ada/36001 + * acx.m4: Add optional parameter to ACX_PROG_GNAT. + +2008-04-23 Paolo Bonzini + + * override.m4: Apply _AC_ARG_VALIDATE fix to all versions + but 2.62. + +2008-04-18 Paolo Bonzini + + PR bootstrap/35457 + + * confsubdir.m4: Rename to... + * override.m4: ... this. Make sure aclocal always picks it. + Add more lenient precious variable check, backported from + autoconf trunk. + +2008-04-04 Nick Clifton + + PR binutils/4334 + * acx.m4 (ACX_CHECK_CYGWIN_CAT_WORKS): New macro to check that + cygwin builds are not running in textmode. + +2008-03-27 Paolo Bonzini + + * extensions.m4: New. + +2008-03-27 Paolo Bonzini + + * mh-armpic: Remove. + * mh-i370pic: Remove. + * mh-m68kpic: Remove. + * mh-ppcpic: Remove. + * mh-sparcpic: Remove. + * mh-ia64pic: Remove. + * mh-papic: Remove. + * mh-s390pic: Remove. + * mh-x86pic: Remove. + +2008-03-16 Ralf Wildenhues + + * proginstall.m4: New file, with fixed AC_PROG_INSTALL. + +2008-02-20 Uros Bizjak + + * mh-ppc-darwin (BOOT_CFLAGS): Use +=, not =. + +2008-02-20 Paolo Bonzini + + PR bootstrap/32009 + * mh-ppc-darwin (BOOT_CFLAGS): Reenable. + +2008-01-08 Jakub Jelinek + + * futex.m4: New file. + +2007-12-06 Richard Sandiford + + * mt-sde (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Use +=, not =. + * mt-mips-elfoabi: Likewise. + +2007-10-15 Maciej W. Rozycki + + * tls.m4 (GCC_CHECK_TLS): Rename have_tls to gcc_cv_have_tls. + (GCC_CHECK_CC_TLS): Rename have_cc_tls to gcc_cv_have_cc_tls. + +2007-10-03 Richard Sandiford + + * no-executables.m4 (GCC_TRY_COMPILE_OR_LINK): New function. + +2007-10-03 Kazu Hirata + + Revert: + 2007-10-02 Richard Sandiford + * no-executables.m4 (GCC_TRY_COMPILE_OR_LINK): New function. + +2007-10-02 Richard Sandiford + + * no-executables.m4 (GCC_TRY_COMPILE_OR_LINK): New function. + +2007-09-21 Richard Sandiford + + * mt-sde (CFLAGS_FOR_TARGET): Replace -fno-optimize-sibling-calls + with -minterlink-mips16. + (CXXFLAGS_FOR_TARGET): Likewise. + +2007-09-20 Richard Sandiford + + * mt-mips-elfoabi: New file. + +2007-09-07 Richard Sandiford + + * mt-sde (CFLAGS_FOR_TARGET): Add -mno-gpopt. + (CXXFLAGS_FOR_TARGET): Likewise. + +2007-09-06 Francois-Xavier Coudert + + PR target/33281 + * mh-mingw: New host makefile fragment. + +2007-08-18 Paul Brook + Joseph Myers + + * mt-gnu (CXXFLAGS_FOR_TARGET): Add + $(DEBUG_PREFIX_CFLAGS_FOR_TARGET). + +2007-08-17 Richard Sandiford + Nigel Stephens + + * mt-sde: New file. + 2007-07-06 H.J. Lu * tls.m4 (GCC_CHECK_CC_TLS): New. diff --git a/config/acinclude.m4 b/config/acinclude.m4 index c7c0ab5..8242b2c 100755 --- a/config/acinclude.m4 +++ b/config/acinclude.m4 @@ -496,99 +496,6 @@ fi AC_SUBST(DEVOHDIR) ]) -dnl ==================================================================== -dnl find the IDE library and headers. -AC_DEFUN([CYG_AC_PATH_IDE], [ -AC_MSG_CHECKING(for IDE headers in the source tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -IDEHDIR= -IDELIB= -AC_CACHE_VAL(ac_cv_c_ideh,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/libide/src/event.h" ; then - ac_cv_c_ideh=`(cd ${srcdir}/$i/libide/src; ${PWDCMD-pwd})`; - fi -done -]) -if test x"${ac_cv_c_ideh}" != x; then - IDEHDIR="-I${ac_cv_c_ideh}" - AC_MSG_RESULT(${ac_cv_c_ideh}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for LIBIDE TCL headers in the source tree) -AC_CACHE_VAL(ac_cv_c_idetclh,[ -for i in $dirlist; do - if test -f "${srcdir}/$i/libidetcl/src/idetcl.h" ; then - ac_cv_c_idetclh=`(cd ${srcdir}/$i/libidetcl/src; ${PWDCMD-pwd})`; - fi -done -]) -if test x"${ac_cv_c_idetclh}" != x; then - IDEHDIR="${IDEHDIR} -I${ac_cv_c_idetclh}" - AC_MSG_RESULT(${ac_cv_c_idetclh}) -else - AC_MSG_RESULT(none) -fi - -AC_MSG_CHECKING(for IDE headers in the build tree) -AC_CACHE_VAL(ac_cv_c_ideh2,[ -for i in $dirlist; do - if test -f "$i/libide/src/Makefile" ; then - ac_cv_c_ideh2=`(cd $i/libide/src; ${PWDCMD-pwd})`; - fi -done -]) -if test x"${ac_cv_c_ideh2}" != x; then - IDEHDIR="${IDEHDIR} -I${ac_cv_c_ideh2}" - AC_MSG_RESULT(${ac_cv_c_ideh2}) -else - AC_MSG_RESULT(none) -fi - -dnl look for the library -AC_MSG_CHECKING(for IDE library) -AC_CACHE_VAL(ac_cv_c_idelib,[ -if test x"${ac_cv_c_idelib}" = x ; then - for i in $dirlist; do - if test -f "$i/libide/src/Makefile" ; then - ac_cv_c_idelib=`(cd $i/libide/src; ${PWDCMD-pwd})` - break - fi - done -fi]) -if test x"${ac_cv_c_idelib}" != x ; then - IDELIB="-L${ac_cv_c_idelib}" - AC_MSG_RESULT(${ac_cv_c_idelib}) -else - AC_MSG_RESULT(none) -fi - -dnl find libiddetcl.a if it exists -AC_MSG_CHECKING(for IDE TCL library) -AC_CACHE_VAL(ac_cv_c_idetcllib,[ -if test x"${ac_cv_c_idetcllib}" = x ; then - for i in $dirlist; do - if test -f "$i/libidetcl/src/Makefile" ; then - ac_cv_c_idetcllib=`(cd $i/libidetcl/src; ${PWDCMD-pwd})` - break - fi - done -fi -]) -if test x"${ac_cv_c_idetcllib}" != x ; then - IDELIB="${IDELIB} -L${ac_cv_c_idetcllib}" - IDETCLLIB="-lidetcl" - AC_MSG_RESULT(${ac_cv_c_idetcllib}) -else - AC_MSG_RESULT(none) -fi -AC_SUBST(IDEHDIR) -AC_SUBST(IDELIB) -AC_SUBST(IDETCLLIB) -]) - dnl ==================================================================== dnl Find all the ILU headers and libraries AC_DEFUN([CYG_AC_PATH_ILU], [ @@ -837,1187 +744,3 @@ fi AC_LANG_RESTORE AC_SUBST(LIBGCC) ]) - -dnl ==================================================================== -dnl Ok, lets find the tcl source trees so we can use the headers -dnl Warning: transition of version 9 to 10 will break this algorithm -dnl because 10 sorts before 9. We also look for just tcl. We have to -dnl be careful that we don't match stuff like tclX by accident. -dnl the alternative search directory is involked by --with-tclinclude -AC_DEFUN([CYG_AC_PATH_TCL], [ - CYG_AC_PATH_TCLH - CYG_AC_PATH_TCLCONFIG - CYG_AC_LOAD_TCLCONFIG -]) -AC_DEFUN([CYG_AC_PATH_TCLH], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_tcl=true -AC_MSG_CHECKING(for Tcl headers in the source tree) -AC_ARG_WITH(tclinclude, [ --with-tclinclude directory where tcl headers are], with_tclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_tclh,[ -dnl first check to see if --with-tclinclude was specified -if test x"${with_tclinclude}" != x ; then - if test -f ${with_tclinclude}/tcl.h ; then - ac_cv_c_tclh=`(cd ${with_tclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_tclinclude}/generic/tcl.h ; then - ac_cv_c_tclh=`(cd ${with_tclinclude}/generic; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tclinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Tcl configuration file -if test x"${ac_cv_c_tclconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_tclconfig/$i/generic/tcl.h ; then - ac_cv_c_tclh=`(cd $ac_cv_c_tclconfig/$i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_tclh}" = x ; then - dnl find the top level Tcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/tcl* 2>/dev/null`" ; then - tclpath=$srcdir/$i - break - fi - done - - dnl find the exact Tcl source dir. We do it this way, cause there - dnl might be multiple version of Tcl, and we want the most recent one. - for i in `ls -dr $tclpath/tcl* 2>/dev/null ` ; do - if test -f $i/generic/tcl.h ; then - ac_cv_c_tclh=`(cd $i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl check if its installed with the compiler -if test x"${ac_cv_c_tclh}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/include - if test -f $ccpath/tcl.h; then - ac_cv_c_tclh=$ccpath - fi -fi - -dnl see if one is installed -if test x"${ac_cv_c_tclh}" = x ; then - AC_MSG_RESULT(none) - AC_CHECK_HEADER(tcl.h, ac_cv_c_tclh=installed, ac_cv_c_tclh="") -else - AC_MSG_RESULT(${ac_cv_c_tclh}) -fi -]) - TCLHDIR="" -if test x"${ac_cv_c_tclh}" = x ; then - AC_MSG_ERROR([Can't find any Tcl headers]) -fi -if test x"${ac_cv_c_tclh}" != x ; then - no_tcl="" - if test x"${ac_cv_c_tclh}" != x"installed" ; then - if test x"${CC}" = xcl ; then - tmp="`cygpath --windows ${ac_cv_c_tclh}`" - ac_cv_c_tclh="`echo $tmp | sed -e s#\\\\\\\\#/#g`" - fi - AC_MSG_RESULT(${ac_cv_c_tclh}) - TCLHDIR="-I${ac_cv_c_tclh}" - fi -fi - -AC_SUBST(TCLHDIR) -]) - -dnl ==================================================================== -dnl Ok, lets find the tcl configuration -AC_DEFUN([CYG_AC_PATH_TCLCONFIG], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl First, look for one uninstalled. -dnl the alternative search directory is invoked by --with-tclconfig -if test x"${no_tcl}" = x ; then - dnl we reset no_tcl in case something fails here - no_tcl=true - AC_ARG_WITH(tclconfig, [ --with-tclconfig directory containing tcl configuration (tclConfig.sh)], - with_tclconfig=${withval}) - AC_MSG_CHECKING([for Tcl configuration script]) - AC_CACHE_VAL(ac_cv_c_tclconfig,[ - - dnl First check to see if --with-tclconfig was specified. - if test x"${with_tclconfig}" != x ; then - if test -f "${with_tclconfig}/tclConfig.sh" ; then - ac_cv_c_tclconfig=`(cd ${with_tclconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) - fi - fi - - dnl next check if it came with Tcl configuration file in the source tree - if test x"${ac_cv_c_tclconfig}" = x ; then - for i in $dirlist; do - dnl need to test both unix and win directories, since - dnl cygwin's tkConfig.sh could be in either directory depending - dnl on the cygwin port of tcl. - if test -f $srcdir/$i/unix/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $srcdir/$i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $srcdir/$i/win/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $srcdir/$i/win; ${PWDCMD-pwd})` - break - fi - done - fi - dnl check in a few other locations - if test x"${ac_cv_c_tclconfig}" = x ; then - dnl find the top level Tcl source directory - for i in $dirlist; do - if test -n "`ls -dr $i/tcl* 2>/dev/null`" ; then - tclconfpath=$i - break - fi - done - - dnl find the exact Tcl dir. We do it this way, cause there - dnl might be multiple version of Tcl, and we want the most recent one. - for i in `ls -dr $tclconfpath/tcl* 2>/dev/null ` ; do - dnl need to test both unix and win directories, since - dnl cygwin's tclConfig.sh could be in either directory depending - dnl on the cygwin port of tcl. - if test -f $i/unix/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $i/win/tclConfig.sh ; then - ac_cv_c_tclconfig=`(cd $i/win; ${PWDCMD-pwd})` - break - fi - done - fi - - dnl Check to see if it's installed. We have to look in the $CC path - dnl to find it, cause our $prefix may not match the compilers. - if test x"${ac_cv_c_tclconfig}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/lib - if test -f $ccpath/tclConfig.sh; then - ac_cv_c_tclconfig=$ccpath - fi - fi - ]) dnl end of cache_val - - if test x"${ac_cv_c_tclconfig}" = x ; then - TCLCONFIG="" - AC_MSG_WARN(Can't find Tcl configuration definitions) - else - no_tcl="" - TCLCONFIG=${ac_cv_c_tclconfig}/tclConfig.sh - AC_MSG_RESULT(${TCLCONFIG}) - fi -fi -AC_SUBST(TCLCONFIG) -]) - -dnl Defined as a separate macro so we don't have to cache the values -dnl from PATH_TCLCONFIG (because this can also be cached). -AC_DEFUN([CYG_AC_LOAD_TCLCONFIG], [ - . $TCLCONFIG - -dnl AC_SUBST(TCL_VERSION) -dnl AC_SUBST(TCL_MAJOR_VERSION) -dnl AC_SUBST(TCL_MINOR_VERSION) -dnl AC_SUBST(TCL_CC) - AC_SUBST(TCL_DEFS) - -dnl not used, don't export to save symbols - AC_SUBST(TCL_LIB_FILE) - AC_SUBST(TCL_LIB_FULL_PATH) - AC_SUBST(TCL_LIBS) -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_PREFIX) - - AC_SUBST(TCL_CFLAGS) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_EXEC_PREFIX) - - AC_SUBST(TCL_SHLIB_CFLAGS) - AC_SUBST(TCL_SHLIB_LD) -dnl don't export, not used outside of configure -dnl AC_SUBST(TCL_SHLIB_LD_LIBS) -dnl AC_SUBST(TCL_SHLIB_SUFFIX) -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_DL_LIBS) - AC_SUBST(TCL_LD_FLAGS) - AC_SUBST(TCL_LD_SEARCH_FLAGS) -dnl don't export, not used outside of configure -dnl AC_SUBST(TCL_COMPAT_OBJS) - AC_SUBST(TCL_RANLIB) - AC_SUBST(TCL_BUILD_LIB_SPEC) - AC_SUBST(TCL_LIB_SPEC) - AC_SUBST(TCL_BIN_DIR) -dnl AC_SUBST(TCL_LIB_VERSIONS_OK) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_SHARED_LIB_SUFFIX) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TCL_UNSHARED_LIB_SUFFIX) -]) - -dnl ==================================================================== -AC_DEFUN([CYG_AC_PATH_TK], [ - CYG_AC_PATH_TKH - CYG_AC_PATH_TKCONFIG - CYG_AC_LOAD_TKCONFIG -]) -AC_DEFUN([CYG_AC_PATH_TKH], [ -# -# Ok, lets find the tk source trees so we can use the headers -# If the directory (presumably symlink) named "tk" exists, use that one -# in preference to any others. Same logic is used when choosing library -# and again with Tcl. The search order is the best place to look first, then in -# decreasing significance. The loop breaks if the trigger file is found. -# Note the gross little conversion here of srcdir by cd'ing to the found -# directory. This converts the path from a relative to an absolute, so -# recursive cache variables for the path will work right. We check all -# the possible paths in one loop rather than many separate loops to speed -# things up. -# the alternative search directory is involked by --with-tkinclude -# -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_tk=true -AC_MSG_CHECKING(for Tk headers in the source tree) -AC_ARG_WITH(tkinclude, [ --with-tkinclude directory where tk headers are], with_tkinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_tkh,[ -dnl first check to see if --with-tkinclude was specified -if test x"${with_tkinclude}" != x ; then - if test -f ${with_tkinclude}/tk.h ; then - ac_cv_c_tkh=`(cd ${with_tkinclude}; ${PWDCMD-pwd})` - elif test -f ${with_tkinclude}/generic/tk.h ; then - ac_cv_c_tkh=`(cd ${with_tkinclude}/generic; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tkinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Tk configuration file -if test x"${ac_cv_c_tkconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_tkconfig/$i/generic/tk.h ; then - ac_cv_c_tkh=`(cd $ac_cv_c_tkconfig/$i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_tkh}" = x ; then - dnl find the top level Tk source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/tk* 2>/dev/null`" ; then - tkpath=$srcdir/$i - break - fi - done - - dnl find the exact Tk source dir. We do it this way, cause there - dnl might be multiple version of Tk, and we want the most recent one. - for i in `ls -dr $tkpath/tk* 2>/dev/null ` ; do - if test -f $i/generic/tk.h ; then - ac_cv_c_tkh=`(cd $i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_tkh}" = x ; then - AC_MSG_RESULT(none) - dnl Get the path to the compiler. We do it this way instead of using - dnl AC_CHECK_HEADER, cause this doesn't depend in having X configured. - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/include - if test -f $ccpath/tk.h; then - ac_cv_c_tkh=$ccpath - fi -else - AC_MSG_RESULT(${ac_cv_c_tkh}) -fi -]) - TKHDIR="" -if test x"${ac_cv_c_tkh}" = x ; then - AC_MSG_ERROR([Can't find any Tk headers]) -fi -if test x"${ac_cv_c_tkh}" != x ; then - no_tk="" - if test x"${ac_cv_c_tkh}" != x"installed" ; then - if test x"${CC}" = xcl ; then - tmp="`cygpath --windows ${ac_cv_c_tkh}`" - ac_cv_c_tkh="`echo $tmp | sed -e s#\\\\\\\\#/#g`" - fi - AC_MSG_RESULT([found in ${ac_cv_c_tkh}]) - TKHDIR="-I${ac_cv_c_tkh}" - fi -fi - -AC_SUBST(TKHDIR) -]) - -AC_DEFUN([CYG_AC_PATH_TKCONFIG], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl First, look for one uninstalled. -dnl the alternative search directory is invoked by --with-tkconfig -if test x"${no_tk}" = x ; then - dnl we reset no_tk in case something fails here - no_tk=true - AC_ARG_WITH(tkconfig, [ --with-tkconfig directory containing tk configuration (tkConfig.sh)], - with_tkconfig=${withval}) - AC_MSG_CHECKING([for Tk configuration script]) - AC_CACHE_VAL(ac_cv_c_tkconfig,[ - - dnl First check to see if --with-tkconfig was specified. - if test x"${with_tkconfig}" != x ; then - if test -f "${with_tkconfig}/tkConfig.sh" ; then - ac_cv_c_tkconfig=`(cd ${with_tkconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) - fi - fi - - dnl next check if it came with Tk configuration file in the source tree - if test x"${ac_cv_c_tkconfig}" = x ; then - for i in $dirlist; do - dnl need to test both unix and win directories, since - dnl cygwin's tkConfig.sh could be in either directory depending - dnl on the cygwin port of tk. - if test -f $srcdir/$i/unix/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $srcdir/$i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $srcdir/$i/win/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $srcdir/$i/unix; ${PWDCMD-pwd})` - break - fi - done - fi - dnl check in a few other locations - if test x"${ac_cv_c_tkconfig}" = x ; then - dnl find the top level Tk source directory - for i in $dirlist; do - if test -n "`ls -dr $i/tk* 2>/dev/null`" ; then - tkconfpath=$i - break - fi - done - - dnl find the exact Tk dir. We do it this way, cause there - dnl might be multiple version of Tk, and we want the most recent one. - for i in `ls -dr $tkconfpath/tk* 2>/dev/null ` ; do - dnl need to test both unix and win directories, since - dnl cygwin's tkConfig.sh could be in either directory depending - dnl on the cygwin port of tk. - if test -f $i/unix/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $i/unix; ${PWDCMD-pwd})` - break - fi - if test -f $i/win/tkConfig.sh ; then - ac_cv_c_tkconfig=`(cd $i/win; ${PWDCMD-pwd})` - break - fi - done - fi - - dnl Check to see if it's installed. We have to look in the $CC path - dnl to find it, cause our $prefix may not match the compilers. - if test x"${ac_cv_c_tkconfig}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/lib - if test -f $ccpath/tkConfig.sh; then - ac_cv_c_tkconfig=$ccpath - fi - fi - ]) dnl end of cache_val - - if test x"${ac_cv_c_tkconfig}" = x ; then - TKCONFIG="" - AC_MSG_WARN(Can't find Tk configuration definitions) - else - no_tk="" - TKCONFIG=${ac_cv_c_tkconfig}/tkConfig.sh - AC_MSG_RESULT(${TKCONFIG}) - fi -fi -AC_SUBST(TKCONFIG) -]) - -dnl Defined as a separate macro so we don't have to cache the values -dnl from PATH_TKCONFIG (because this can also be cached). -AC_DEFUN([CYG_AC_LOAD_TKCONFIG], [ - if test -f "$TKCONFIG" ; then - . $TKCONFIG - fi - - AC_SUBST(TK_VERSION) -dnl not actually used, don't export to save symbols -dnl AC_SUBST(TK_MAJOR_VERSION) -dnl AC_SUBST(TK_MINOR_VERSION) - AC_SUBST(TK_DEFS) - -dnl not used, don't export to save symbols - AC_SUBST(TK_LIB_FILE) - AC_SUBST(TK_LIB_FULL_PATH) - AC_SUBST(TK_LIBS) -dnl not used, don't export to save symbols -dnl AC_SUBST(TK_PREFIX) - -dnl not used, don't export to save symbols -dnl AC_SUBST(TK_EXEC_PREFIX) - AC_SUBST(TK_BUILD_INCLUDES) - AC_SUBST(TK_XINCLUDES) - AC_SUBST(TK_XLIBSW) - AC_SUBST(TK_BUILD_LIB_SPEC) - AC_SUBST(TK_LIB_SPEC) -]) - -dnl ==================================================================== -dnl Ok, lets find the itcl source trees so we can use the headers -dnl the alternative search directory is involked by --with-itclinclude -AC_DEFUN([CYG_AC_PATH_ITCL], [ - CYG_AC_PATH_ITCLH - CYG_AC_PATH_ITCLLIB - CYG_AC_PATH_ITCLSH - CYG_AC_PATH_ITCLMKIDX -]) -AC_DEFUN([CYG_AC_PATH_ITCLH], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_itcl=true -AC_MSG_CHECKING(for Itcl headers in the source tree) -AC_ARG_WITH(itclinclude, [ --with-itclinclude directory where itcl headers are], with_itclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_itclh,[ -dnl first check to see if --with-itclinclude was specified -if test x"${with_itclinclude}" != x ; then - if test -f ${with_itclinclude}/itcl.h ; then - ac_cv_c_itclh=`(cd ${with_itclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_itclinclude}/src/itcl.h ; then - ac_cv_c_itclh=`(cd ${with_itclinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Itcl configuration file -if test x"${ac_cv_c_itclconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_itclconfig/$i/src/itcl.h ; then - ac_cv_c_itclh=`(cd $ac_cv_c_itclconfig/$i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_itclh}" = x ; then - dnl find the top level Itcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/itcl* 2>/dev/null`" ; then - itclpath=$srcdir/$i - break - fi - done - - dnl find the exact Itcl source dir. We do it this way, cause there - dnl might be multiple version of Itcl, and we want the most recent one. - for i in `ls -dr $itclpath/itcl* 2>/dev/null ` ; do - if test -f $i/src/itcl.h ; then - ac_cv_c_itclh=`(cd $i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_itclh}" = x ; then - AC_MSG_RESULT(none) - AC_CHECK_HEADER(itcl.h, ac_cv_c_itclh=installed, ac_cv_c_itclh="") -else - AC_MSG_RESULT(${ac_cv_c_itclh}) -fi -]) - ITCLHDIR="" -if test x"${ac_cv_c_itclh}" = x ; then - AC_MSG_ERROR([Can't find any Itcl headers]) -fi -if test x"${ac_cv_c_itclh}" != x ; then - no_itcl="" - if test x"${ac_cv_c_itclh}" != x"installed" ; then - AC_MSG_RESULT(${ac_cv_c_itclh}) - ITCLHDIR="-I${ac_cv_c_itclh}" - fi -fi - -AC_SUBST(ITCLHDIR) -]) - -dnl Ok, lets find the itcl library -dnl First, look for one uninstalled. -dnl the alternative search directory is invoked by --with-itcllib -AC_DEFUN([CYG_AC_PATH_ITCLLIB], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -if test x"${no_itcl}" = x ; then - dnl we reset no_itcl incase something fails here - no_itcl=true - AC_ARG_WITH(itcllib, - [ --with-itcllib directory where the itcl library is], - with_itcllib=${withval}) - AC_MSG_CHECKING([for Itcl library]) - AC_CACHE_VAL(ac_cv_c_itcllib,[ - dnl First check to see if --with-itcllib was specified. - if test x"${with_itcllib}" != x ; then - if test -f "${with_itcllib}/libitcl$TCL_SHARED_LIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd ${with_itcllib}; ${PWDCMD-pwd})`/libitcl$TCL_SHARED_LIB_SUFFIX - else - if test -f "${with_itcllib}/libitcl$TCL_UNSHARED_LIB_SUFFIX"; then - ac_cv_c_itcllib=`(cd ${with_itcllib}; ${PWDCMD-pwd})`/libitcl$TCL_UNSHARED_LIB_SUFFIX - fi - fi - fi - dnl then check for a Itcl library. Since these are uninstalled, - dnl use the simple lib name root. - if test x"${ac_cv_c_itcllib}" = x ; then - dnl find the top level Itcl build directory - for i in $dirlist; do - if test -n "`ls -dr $i/itcl* 2>/dev/null`" ; then - itclpath=$i/itcl - break - fi - done - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - if test -f "$itclpath/src/libitcl.$TCL_SHLIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd $itclpath/src; ${PWDCMD-pwd})` - elif test -f "$itclpath/src/libitcl.a"; then - ac_cv_c_itcllib=`(cd $itclpath/src; ${PWDCMD-pwd})` - fi - fi - dnl check in a few other private locations - if test x"${ac_cv_c_itcllib}" = x ; then - for i in ${dirlist}; do - if test -n "`ls -dr ${srcdir}/$i/itcl* 2>/dev/null`" ; then - itclpath=${srcdir}/$i - break - fi - done - for i in `ls -dr ${itclpath}/itcl* 2>/dev/null` ; do - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - if test -f "$i/src/libitcl$TCL_SHLIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd $i/src; ${PWDCMD-pwd})` - break - elif test -f "$i/src/libitcl.a"; then - ac_cv_c_itcllib=`(cd $i/src; ${PWDCMD-pwd})` - break - fi - done - fi - - dnl see if one is conveniently installed with the compiler - if test x"${ac_cv_c_itcllib}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/lib - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - if test -f "${ccpath}/libitcl$TCL_SHLIB_SUFFIX" ; then - ac_cv_c_itcllib=`(cd ${ccpath}; ${PWDCMD-pwd})` - elif test -f "${ccpath}/libitcl.a"; then - ac_cv_c_itcllib=`(cd ${ccpath}; ${PWDCMD-pwd})` - fi - fi - ]) - if test x"${ac_cv_c_itcllib}" = x ; then - ITCLLIB="" - AC_MSG_WARN(Can't find Itcl library) - else - ITCLLIB="-L${ac_cv_c_itcllib}" - AC_MSG_RESULT(${ac_cv_c_itcllib}) - no_itcl="" - fi -fi - -AC_PROVIDE([$0]) -AC_SUBST(ITCLLIB) -]) - - -dnl ==================================================================== -dnl Ok, lets find the itcl source trees so we can use the itcl_sh script -dnl the alternative search directory is involked by --with-itclinclude -AC_DEFUN([CYG_AC_PATH_ITCLSH], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_itcl=true -AC_MSG_CHECKING(for the itcl_sh script) -AC_ARG_WITH(itclinclude, [ --with-itclinclude directory where itcl headers are], with_itclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_itclsh,[ -dnl first check to see if --with-itclinclude was specified -if test x"${with_itclinclude}" != x ; then - if test -f ${with_itclinclude}/itcl_sh ; then - ac_cv_c_itclsh=`(cd ${with_itclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_itclinclude}/src/itcl_sh ; then - ac_cv_c_itclsh=`(cd ${with_itclinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclinclude} directory doesn't contain itcl_sh]) - fi -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_itclsh}" = x ; then - dnl find the top level Itcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/itcl* 2>/dev/null`" ; then - itclpath=$srcdir/$i - break - fi - done - - dnl find the exact Itcl source dir. We do it this way, cause there - dnl might be multiple version of Itcl, and we want the most recent one. - for i in `ls -dr $itclpath/itcl* 2>/dev/null ` ; do - if test -f $i/src/itcl_sh ; then - ac_cv_c_itclsh=`(cd $i/src; ${PWDCMD-pwd})`/itcl_sh - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_itclsh}" = x ; then - AC_MSG_RESULT(none) - AC_PATH_PROG(ac_cv_c_itclsh, itcl_sh) -else - AC_MSG_RESULT(${ac_cv_c_itclsh}) -fi -]) - -if test x"${ac_cv_c_itclsh}" = x ; then - AC_MSG_ERROR([Can't find the itcl_sh script]) -fi -if test x"${ac_cv_c_itclsh}" != x ; then - no_itcl="" - AC_MSG_RESULT(${ac_cv_c_itclsh}) - ITCLSH="${ac_cv_c_itclsh}" -fi -AC_SUBST(ITCLSH) -]) - - -dnl ==================================================================== -dnl Ok, lets find the itcl source trees so we can use the itcl_sh script -dnl the alternative search directory is involked by --with-itclinclude -AC_DEFUN([CYG_AC_PATH_ITCLMKIDX], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_itcl=true -AC_MSG_CHECKING(for itcl_mkindex.tcl script) -AC_ARG_WITH(itclinclude, [ --with-itclinclude directory where itcl headers are], with_itclinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_itclmkidx,[ -dnl first check to see if --with-itclinclude was specified -if test x"${with_itclinclude}" != x ; then - if test -f ${with_itclinclude}/itcl_sh ; then - ac_cv_c_itclmkidx=`(cd ${with_itclinclude}; ${PWDCMD-pwd})` - elif test -f ${with_itclinclude}/src/itcl_sh ; then - ac_cv_c_itclmkidx=`(cd ${with_itclinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclinclude} directory doesn't contain itcl_sh]) - fi -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_itclmkidx}" = x ; then - dnl find the top level Itcl source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/itcl* 2>/dev/null`" ; then - itclpath=$srcdir/$i - break - fi - done - - dnl find the exact Itcl source dir. We do it this way, cause there - dnl might be multiple version of Itcl, and we want the most recent one. - for i in `ls -dr $itclpath/itcl* 2>/dev/null ` ; do - if test -f $i/library/itcl_mkindex.tcl ; then - ac_cv_c_itclmkidx=`(cd $i/library; ${PWDCMD-pwd})`/itcl_mkindex.tcl - break - fi - done -fi -if test x"${ac_cv_c_itclmkidx}" = x ; then - dnl Get the path to the compiler - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/share - dnl Itcl 7.5 and greater puts library in subdir. Look there first. - for i in `ls -dr $ccpath/itcl* 2>/dev/null ` ; do - if test -f $i/itcl_mkindex.tcl ; then - ac_cv_c_itclmkidx=`(cd $i; ${PWDCMD-pwd})`/itcl_mkindex.tcl - break - fi - done -fi -]) - -if test x"${ac_cv_c_itclmkidx}" = x ; then - AC_MSG_ERROR([Can't find the itcl_mkindex.tcl script]) -fi -if test x"${ac_cv_c_itclmkidx}" != x ; then - no_itcl="" - AC_MSG_RESULT(${ac_cv_c_itclmkidx}) - ITCLMKIDX="${ac_cv_c_itclmkidx}" -else - AC_MSG_RESULT(none) -fi -AC_SUBST(ITCLMKIDX) -]) - -dnl ==================================================================== -dnl Ok, lets find the tix source trees so we can use the headers -dnl the alternative search directory is involked by --with-tixinclude -AC_DEFUN([CYG_AC_PATH_TIX], [ - CYG_AC_PATH_TIXH - CYG_AC_PATH_TIXLIB -]) -AC_DEFUN([CYG_AC_PATH_TIXH], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -no_tix=true -AC_MSG_CHECKING(for Tix headers in the source tree) -AC_ARG_WITH(tixinclude, [ --with-tixinclude directory where tix headers are], with_tixinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_tixh,[ -dnl first check to see if --with-tixinclude was specified -if test x"${with_tixinclude}" != x ; then - if test -f ${with_tixinclude}/tix.h ; then - ac_cv_c_tixh=`(cd ${with_tixinclude}; ${PWDCMD-pwd})` - elif test -f ${with_tixinclude}/generic/tix.h ; then - ac_cv_c_tixh=`(cd ${with_tixinclude}/generic; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tixinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Tix configuration file -if test x"${ac_cv_c_tixconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_tixconfig/$i/generic/tix.h ; then - ac_cv_c_tixh=`(cd $ac_cv_c_tixconfig/$i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_tixh}" = x ; then - dnl find the top level Tix source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/tix* 2>/dev/null`" ; then - tixpath=$srcdir/$i - break - fi - done - - dnl find the exact Tix source dir. We do it this way, cause there - dnl might be multiple version of Tix, and we want the most recent one. - for i in `ls -dr $tixpath/tix* 2>/dev/null ` ; do - if test -f $i/generic/tix.h ; then - ac_cv_c_tixh=`(cd $i/generic; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_tixh}" = x ; then - AC_MSG_RESULT(none) - dnl Get the path to the compiler - - dnl Get the path to the compiler. We do it this way instead of using - dnl AC_CHECK_HEADER, cause this doesn't depend in having X configured. - ccpath=`which ${CC} | sed -e 's:/bin/.*::'`/include - if test -f $ccpath/tix.h; then - ac_cv_c_tixh=installed - fi -else - AC_MSG_RESULT(${ac_cv_c_tixh}) -fi -]) -if test x"${ac_cv_c_tixh}" = x ; then - AC_MSG_ERROR([Can't find any Tix headers]) -fi -if test x"${ac_cv_c_tixh}" != x ; then - no_tix="" - AC_MSG_RESULT(${ac_cv_c_tixh}) - if test x"${ac_cv_c_tixh}" != x"installed" ; then - TIXHDIR="-I${ac_cv_c_tixh}" - fi -fi - -AC_SUBST(TIXHDIR) -]) - -AC_DEFUN([CYG_AC_PATH_TIXCONFIG], [ -# -# Ok, lets find the tix configuration -# First, look for one uninstalled. -# the alternative search directory is invoked by --with-tixconfig -# - -if test x"${no_tix}" = x ; then - # we reset no_tix in case something fails here - no_tix=true - AC_ARG_WITH(tixconfig, [ --with-tixconfig directory containing tix configuration (tixConfig.sh)], - with_tixconfig=${withval}) - AC_MSG_CHECKING([for Tix configuration]) - AC_CACHE_VAL(ac_cv_c_tixconfig,[ - - # First check to see if --with-tixconfig was specified. - if test x"${with_tixconfig}" != x ; then - if test -f "${with_tixconfig}/tixConfig.sh" ; then - ac_cv_c_tixconfig=`(cd ${with_tixconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_tixconfig} directory doesn't contain tixConfig.sh]) - fi - fi - - # then check for a private Tix library - if test x"${ac_cv_c_tixconfig}" = x ; then - for i in \ - ../tix \ - `ls -dr ../tix[[4]]* 2>/dev/null` \ - ../../tix \ - `ls -dr ../../tix[[4]]* 2>/dev/null` \ - ../../../tix \ - `ls -dr ../../../tix[[4]]* 2>/dev/null` ; do - if test -f "$i/tixConfig.sh" ; then - ac_cv_c_tixconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few common install locations - if test x"${ac_cv_c_tixconfig}" = x ; then - for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do - if test -f "$i/tixConfig.sh" ; then - ac_cv_c_tkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few other private locations - if test x"${ac_cv_c_tixconfig}" = x ; then - for i in \ - ${srcdir}/../tix \ - `ls -dr ${srcdir}/../tix[[4-9]]* 2>/dev/null` ; do - if test -f "$i/tixConfig.sh" ; then - ac_cv_c_tixconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - ]) - if test x"${ac_cv_c_tixconfig}" = x ; then - TIXCONFIG="# no Tix configs found" - AC_MSG_WARN(Can't find Tix configuration definitions) - else - no_tix= - TIXCONFIG=${ac_cv_c_tixconfig}/tixConfig.sh - AC_MSG_RESULT(found $TIXCONFIG) - fi -fi - -]) - -# Defined as a separate macro so we don't have to cache the values -# from PATH_TIXCONFIG (because this can also be cached). -AC_DEFUN([CYG_AC_LOAD_TIXCONFIG], [ - if test -f "$TIXCONFIG" ; then - . $TIXCONFIG - fi - - AC_SUBST(TIX_BUILD_LIB_SPEC) - AC_SUBST(TIX_LIB_FULL_PATH) -]) - -AC_DEFUN([CYG_AC_PATH_ITCLCONFIG], [ -# -# Ok, lets find the itcl configuration -# First, look for one uninstalled. -# the alternative search directory is invoked by --with-itclconfig -# - -if test x"${no_itcl}" = x ; then - # we reset no_itcl in case something fails here - no_itcl=true - AC_ARG_WITH(itclconfig, [ --with-itclconfig directory containing itcl configuration (itclConfig.sh)], - with_itclconfig=${withval}) - AC_MSG_CHECKING([for Itcl configuration]) - AC_CACHE_VAL(ac_cv_c_itclconfig,[ - - # First check to see if --with-itclconfig was specified. - if test x"${with_itclconfig}" != x ; then - if test -f "${with_itclconfig}/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd ${with_itclconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itclconfig} directory doesn't contain itclConfig.sh]) - fi - fi - - # then check for a private itcl library - if test x"${ac_cv_c_itclconfig}" = x ; then - for i in \ - ../itcl/itcl \ - `ls -dr ../itcl/itcl[[3]]* 2>/dev/null` \ - ../../itcl/itcl \ - `ls -dr ../../itcl/itcl[[3]]* 2>/dev/null` \ - ../../../itcl/itcl \ - `ls -dr ../../../itcl/itcl[[3]]* 2>/dev/null` ; do - if test -f "$i/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few common install locations - if test x"${ac_cv_c_itclconfig}" = x ; then - for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do - if test -f "$i/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few other private locations - if test x"${ac_cv_c_itclconfig}" = x ; then - for i in \ - ${srcdir}/../itcl/itcl \ - `ls -dr ${srcdir}/../itcl/itcl[[3]]* 2>/dev/null` ; do - if test -f "$i/itcl/itclConfig.sh" ; then - ac_cv_c_itclconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - ]) - if test x"${ac_cv_c_itclconfig}" = x ; then - ITCLCONFIG="# no itcl configs found" - AC_MSG_WARN(Can't find itcl configuration definitions) - else - no_itcl= - ITCLCONFIG=${ac_cv_c_itclconfig}/itclConfig.sh - AC_MSG_RESULT(found $ITCLCONFIG) - fi -fi - -]) - -# Defined as a separate macro so we don't have to cache the values -# from PATH_ITCLCONFIG (because this can also be cached). -AC_DEFUN([CYG_AC_LOAD_ITCLCONFIG], [ - if test -f "$ITCLCONFIG" ; then - . $ITCLCONFIG - fi - - AC_SUBST(ITCL_BUILD_LIB_SPEC) - AC_SUBST(ITCL_SH) - AC_SUBST(ITCL_LIB_FILE) - AC_SUBST(ITCL_LIB_FULL_PATH) - -]) - - -AC_DEFUN([CYG_AC_PATH_ITKCONFIG], [ -# -# Ok, lets find the itk configuration -# First, look for one uninstalled. -# the alternative search directory is invoked by --with-itkconfig -# - -if test x"${no_itk}" = x ; then - # we reset no_itk in case something fails here - no_itk=true - AC_ARG_WITH(itkconfig, [ --with-itkconfig directory containing itk configuration (itkConfig.sh)], - with_itkconfig=${withval}) - AC_MSG_CHECKING([for Itk configuration]) - AC_CACHE_VAL(ac_cv_c_itkconfig,[ - - # First check to see if --with-itkconfig was specified. - if test x"${with_itkconfig}" != x ; then - if test -f "${with_itkconfig}/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd ${with_itkconfig}; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_itkconfig} directory doesn't contain itkConfig.sh]) - fi - fi - - # then check for a private itk library - if test x"${ac_cv_c_itkconfig}" = x ; then - for i in \ - ../itcl/itk \ - `ls -dr ../itcl/itk[[3]]* 2>/dev/null` \ - ../../itcl/itk \ - `ls -dr ../../itcl/itk[[3]]* 2>/dev/null` \ - ../../../itcl/itk \ - `ls -dr ../../../itcl/itk[[3]]* 2>/dev/null` ; do - if test -f "$i/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few common install locations - if test x"${ac_cv_c_itkconfig}" = x ; then - for i in `ls -d ${prefix}/lib /usr/local/lib 2>/dev/null` ; do - if test -f "$i/itcl/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - # check in a few other private locations - if test x"${ac_cv_c_itkconfig}" = x ; then - for i in \ - ${srcdir}/../itcl/itk \ - `ls -dr ${srcdir}/../itcl/itk[[3]]* 2>/dev/null` ; do - if test -f "$i/itkConfig.sh" ; then - ac_cv_c_itkconfig=`(cd $i; ${PWDCMD-pwd})` - break - fi - done - fi - ]) - if test x"${ac_cv_c_itkconfig}" = x ; then - ITCLCONFIG="# no itk configs found" - AC_MSG_WARN(Can't find itk configuration definitions) - else - no_itk= - ITKCONFIG=${ac_cv_c_itkconfig}/itkConfig.sh - AC_MSG_RESULT(found $ITKCONFIG) - fi -fi - -]) - -# Defined as a separate macro so we don't have to cache the values -# from PATH_ITKCONFIG (because this can also be cached). -AC_DEFUN([CYG_AC_LOAD_ITKCONFIG], [ - if test -f "$ITKCONFIG" ; then - . $ITKCONFIG - fi - - AC_SUBST(ITK_BUILD_LIB_SPEC) - AC_SUBST(ITK_LIB_FILE) - AC_SUBST(ITK_LIB_FULL_PATH) -]) - - -dnl ==================================================================== -dnl Ok, lets find the libgui source trees so we can use the headers -dnl the alternative search directory is involked by --with-libguiinclude -AC_DEFUN([CYG_AC_PATH_LIBGUI], [ - CYG_AC_PATH_LIBGUIH - CYG_AC_PATH_LIBGUILIB -]) -AC_DEFUN([CYG_AC_PATH_LIBGUIH], [ -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../..../../../../../../../../../../.." -no_libgui=true -AC_MSG_CHECKING(for Libgui headers in the source tree) -AC_ARG_WITH(libguiinclude, [ --with-libguiinclude directory where libgui headers are], with_libguiinclude=${withval}) -AC_CACHE_VAL(ac_cv_c_libguih,[ -dnl first check to see if --with-libguiinclude was specified -if test x"${with_libguiinclude}" != x ; then - if test -f ${with_libguiinclude}/guitcl.h ; then - ac_cv_c_libguih=`(cd ${with_libguiinclude}; ${PWDCMD-pwd})` - elif test -f ${with_libguiinclude}/src/guitcl.h ; then - ac_cv_c_libguih=`(cd ${with_libguiinclude}/src; ${PWDCMD-pwd})` - else - AC_MSG_ERROR([${with_libguiinclude} directory doesn't contain headers]) - fi -fi - -dnl next check if it came with Libgui configuration file -if test x"${ac_cv_c_libguiconfig}" != x ; then - for i in $dirlist; do - if test -f $ac_cv_c_libguiconfig/$i/src/guitcl.h ; then - ac_cv_c_libguih=`(cd $ac_cv_c_libguiconfig/$i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl next check in private source directory -dnl since ls returns lowest version numbers first, reverse its output -if test x"${ac_cv_c_libguih}" = x ; then - dnl find the top level Libgui source directory - for i in $dirlist; do - if test -n "`ls -dr $srcdir/$i/libgui* 2>/dev/null`" ; then - libguipath=$srcdir/$i - break - fi - done - - dnl find the exact Libgui source dir. We do it this way, cause there - dnl might be multiple version of Libgui, and we want the most recent one. - for i in `ls -dr $libguipath/libgui* 2>/dev/null ` ; do - if test -f $i/src/guitcl.h ; then - ac_cv_c_libguih=`(cd $i/src; ${PWDCMD-pwd})` - break - fi - done -fi - -dnl see if one is installed -if test x"${ac_cv_c_libguih}" = x ; then - AC_MSG_RESULT(none) - AC_CHECK_HEADER(guitcl.h, ac_cv_c_libguih=installed, ac_cv_c_libguih="") -fi -]) -LIBGUIHDIR="" -if test x"${ac_cv_c_libguih}" = x ; then - AC_MSG_WARN([Can't find any Libgui headers]) -fi -if test x"${ac_cv_c_libguih}" != x ; then - no_libgui="" - if test x"${ac_cv_c_libguih}" != x"installed" ; then - LIBGUIHDIR="-I${ac_cv_c_libguih}" - fi -fi -AC_MSG_RESULT(${ac_cv_c_libguih}) -AC_SUBST(LIBGUIHDIR) -]) - -dnl ==================================================================== -dnl find the GUI library -AC_DEFUN([CYG_AC_PATH_LIBGUILIB], [ -AC_MSG_CHECKING(for GUI library in the build tree) -dirlist=".. ../../ ../../../ ../../../../ ../../../../../ ../../../../../../ ../../../../../../.. ../../../../../../../.. ../../../../../../../../.. ../../../../../../../../../.." -dnl look for the library -AC_MSG_CHECKING(for GUI library) -AC_CACHE_VAL(ac_cv_c_libguilib,[ -if test x"${ac_cv_c_libguilib}" = x ; then - for i in $dirlist; do - if test -f "$i/libgui/src/Makefile" ; then - ac_cv_c_libguilib=`(cd $i/libgui/src; ${PWDCMD-pwd})` - break - fi - done -fi -]) -if test x"${ac_cv_c_libguilib}" != x ; then - GUILIB="${GUILIB} -L${ac_cv_c_libguilib}" - LIBGUILIB="-lgui" - AC_MSG_RESULT(${ac_cv_c_libguilib}) -else - AC_MSG_RESULT(none) -fi - -AC_SUBST(GUILIB) -AC_SUBST(LIBGUILIB) -]) diff --git a/config/acx.m4 b/config/acx.m4 index c8a32c9..cea08b7 100644 --- a/config/acx.m4 +++ b/config/acx.m4 @@ -357,7 +357,8 @@ ac_c_preproc_warn_flag=yes])# AC_PROG_CPP_WERROR # Test for GNAT. # We require the gnatbind program, and a compiler driver that -# understands Ada. We use the user's CC setting, already found. +# understands Ada. We use the user's CC setting, already found, +# and possibly add $1 to the command-line parameters. # # Sets the shell variable have_gnat to yes or no as appropriate, and # substitutes GNATBIND and GNATMAKE. @@ -380,7 +381,7 @@ acx_cv_cc_gcc_supports_ada=no # Other compilers, like HP Tru64 UNIX cc, exit successfully when # given a .adb file, but produce no object file. So we must check # if an object file was really produced to guard against this. -errors=`(${CC} -c conftest.adb) 2>&1 || echo failure` +errors=`(${CC} $1[]m4_ifval([$1], [ ])-c conftest.adb) 2>&1 || echo failure` if test x"$errors" = x && test -f conftest.$ac_objext; then acx_cv_cc_gcc_supports_ada=yes fi @@ -595,3 +596,26 @@ AC_DEFUN([ACX_BUGURL],[ AC_SUBST(REPORT_BUGS_TO) AC_SUBST(REPORT_BUGS_TEXI) ]) + +dnl #### +dnl # ACX_CHECK_CYGWIN_CAT_WORKS +dnl # On Cygwin hosts, check that the cat command ignores +dnl # carriage returns as otherwise builds will not work. +dnl # See binutils PR 4334 for more details. +AC_DEFUN([ACX_CHECK_CYGWIN_CAT_WORKS],[ +AC_MSG_CHECKING([to see if cat works as expected]) +echo a >cygwin-cat-check +if test `cat cygwin-cat-check` == a ; then + rm cygwin-cat-check + AC_MSG_RESULT(yes) +else + rm cygwin-cat-check + AC_MSG_RESULT(no) + AC_MSG_ERROR([The cat command does not ignore carriage return characters. + Please either mount the build directory in binary mode or run the following + commands before running any configure script: +set -o igncr +export SHELLOPTS + ]) +fi +]) diff --git a/config/bootstrap-O1.mk b/config/bootstrap-O1.mk new file mode 100644 index 0000000..031645a --- /dev/null +++ b/config/bootstrap-O1.mk @@ -0,0 +1 @@ +BOOT_CFLAGS := -O1 $(filter-out -O%, $(BOOT_CFLAGS)) diff --git a/config/bootstrap-O3.mk b/config/bootstrap-O3.mk new file mode 100644 index 0000000..b269a3f --- /dev/null +++ b/config/bootstrap-O3.mk @@ -0,0 +1 @@ +BOOT_CFLAGS := -O3 $(filter-out -O%, $(BOOT_CFLAGS)) diff --git a/config/bootstrap-debug.mk b/config/bootstrap-debug.mk new file mode 100644 index 0000000..521be82 --- /dev/null +++ b/config/bootstrap-debug.mk @@ -0,0 +1,2 @@ +STAGE2_CFLAGS += -g0 +do-compare = $(SHELL) $(srcdir)/contrib/compare-debug $$f1 $$f2 diff --git a/config/confsubdir.m4 b/config/confsubdir.m4 deleted file mode 100644 index 4e1e8c4..0000000 --- a/config/confsubdir.m4 +++ /dev/null @@ -1,127 +0,0 @@ -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/extensions.m4 b/config/extensions.m4 new file mode 100644 index 0000000..eb59f27 --- /dev/null +++ b/config/extensions.m4 @@ -0,0 +1,79 @@ +# serial 6 -*- Autoconf -*- +# Enable extensions on systems that normally disable them. + +# Copyright (C) 2003, 2006, 2007, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from CVS +# Autoconf. Perhaps we can remove this once we can assume Autoconf +# 2.62 or later everywhere, but since CVS Autoconf mutates rapidly +# enough in this area it's likely we'll need to redefine +# AC_USE_SYSTEM_EXTENSIONS for quite some time. + +m4_version_prereq([2.62],, [ + +# AC_USE_SYSTEM_EXTENSIONS +# ------------------------ +# Enable extensions on systems that normally disable them, +# typically due to standards-conformance issues. +# Remember that #undef in AH_VERBATIM gets replaced with #define by +# AC_DEFINE. The goal here is to define all known feature-enabling +# macros, then, if reports of conflicts are made, disable macros that +# cause problems on some platforms (such as __EXTENSIONS__). +AC_DEFUN([AC_USE_SYSTEM_EXTENSIONS], +[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl +AC_BEFORE([$0], [AC_RUN_IFELSE])dnl + + AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=]) + if test "$MINIX" = yes; then + AC_DEFINE([_POSIX_SOURCE], [1], + [Define to 1 if you need to in order for `stat' and other + things to work.]) + AC_DEFINE([_POSIX_1_SOURCE], [2], + [Define to 2 if the system does not provide POSIX.1 features + except with this defined.]) + AC_DEFINE([_MINIX], [1], + [Define to 1 if on MINIX.]) + fi + + AH_VERBATIM([__EXTENSIONS__], +[/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif +]) + AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], + [ac_cv_safe_to_define___extensions__], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([ +# define __EXTENSIONS__ 1 + AC_INCLUDES_DEFAULT])], + [ac_cv_safe_to_define___extensions__=yes], + [ac_cv_safe_to_define___extensions__=no])]) + test $ac_cv_safe_to_define___extensions__ = yes && + AC_DEFINE([__EXTENSIONS__]) + AC_DEFINE([_ALL_SOURCE]) + AC_DEFINE([_GNU_SOURCE]) + AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) + AC_DEFINE([_TANDEM_SOURCE]) +])# AC_USE_SYSTEM_EXTENSIONS + +]) diff --git a/config/futex.m4 b/config/futex.m4 new file mode 100644 index 0000000..e95144d --- /dev/null +++ b/config/futex.m4 @@ -0,0 +1,64 @@ +dnl ---------------------------------------------------------------------- +dnl This whole bit snagged from libgomp. + +dnl +dnl GCC_LINUX_FUTEX +dnl (SHELL-CODE_HANDLER) +dnl +AC_DEFUN([GCC_LINUX_FUTEX],[dnl +GCC_ENABLE(linux-futex,default, ,[use the Linux futex system call], + permit yes|no|default) +case "$target" in + *-linux*) + case "$enable_linux_futex" in + default) + # If headers don't have gettid/futex syscalls definition, then + # default to no, otherwise there will be compile time failures. + # Otherwise, default to yes. If we don't detect we are + # compiled/linked against NPTL and not cross-compiling, check + # if programs are run by default against NPTL and if not, issue + # a warning. + enable_linux_futex=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include + int lk;], + [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])], + [save_LIBS="$LIBS" + LIBS="-lpthread $LIBS" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#ifndef _GNU_SOURCE + #define _GNU_SOURCE 1 + #endif + #include + pthread_t th; void *status;], + [pthread_tryjoin_np (th, &status);])],[enable_linux_futex=yes], + [if test x$cross_compiling = xno; then + if getconf GNU_LIBPTHREAD_VERSION 2>/dev/null \ + | LC_ALL=C grep -i NPTL > /dev/null 2>/dev/null; then :; else + AC_MSG_WARN([The kernel might not support futex or gettid syscalls. +If so, please configure with --disable-linux-futex]) + fi + fi + enable_linux_futex=yes]) + LIBS="$save_LIBS"]) + ;; + yes) + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [#include + int lk;], + [syscall (SYS_gettid); syscall (SYS_futex, &lk, 0, 0, 0);])],[], + [AC_MSG_ERROR([SYS_gettid and SYS_futex required for --enable-linux-futex])]) + ;; + esac + ;; + *) + enable_linux_futex=no + ;; +esac +if test x$enable_linux_futex = xyes; then + $1 +fi +]) diff --git a/config/lead-dot.m4 b/config/lead-dot.m4 index e019030..123f541 100644 --- a/config/lead-dot.m4 +++ b/config/lead-dot.m4 @@ -1,9 +1,9 @@ # -*- Autoconf -*- -# Copyright (C) 2003 Free Software Foundation, Inc. +# Copyright (C) 2003, 2009 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) +# the Free Software Foundation; either version 3, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, @@ -12,9 +12,8 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program; see the file COPYING3. If not see +# . # serial 1 diff --git a/config/mh-armpic b/config/mh-armpic deleted file mode 100644 index 35cf2c8..0000000 --- a/config/mh-armpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/config/mh-cygwin b/config/mh-cygwin index 6c3ab80..3a9698b 100644 --- a/config/mh-cygwin +++ b/config/mh-cygwin @@ -1,6 +1,9 @@ EXTRA_TARGET_HOST_ALL_MODULES=maybe-all-libtermcap EXTRA_TARGET_HOST_INSTALL_MODULES=maybe-install-libtermcap +# Increase stack limit to same as Linux default. +LDFLAGS += -Wl,--stack,8388608 + all-gdb: maybe-all-libtermcap install-gdb: maybe-all-libtermcap diff --git a/config/mh-elfalphapic b/config/mh-elfalphapic deleted file mode 100644 index 35cf2c8..0000000 --- a/config/mh-elfalphapic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/config/mh-i370pic b/config/mh-i370pic deleted file mode 100644 index 35cf2c8..0000000 --- a/config/mh-i370pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/config/mh-ia64pic b/config/mh-ia64pic deleted file mode 100644 index 92e48d9..0000000 --- a/config/mh-ia64pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/config/mh-m68kpic b/config/mh-m68kpic deleted file mode 100644 index 92e48d9..0000000 --- a/config/mh-m68kpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/config/mh-mingw b/config/mh-mingw new file mode 100644 index 0000000..d91323e --- /dev/null +++ b/config/mh-mingw @@ -0,0 +1,6 @@ +# Add -D__USE_MINGW_ACCESS to enable the built compiler to work on Windows +# Vista (see PR33281 for details). +BOOT_CFLAGS += -D__USE_MINGW_ACCESS -Wno-pedantic-ms-format +CFLAGS += -D__USE_MINGW_ACCESS +# Increase stack limit to same as Linux default. +LDFLAGS += -Wl,--stack,8388608 diff --git a/config/mh-pa b/config/mh-pa new file mode 100644 index 0000000..b0005a2 --- /dev/null +++ b/config/mh-pa @@ -0,0 +1,4 @@ +# The ada virtual array implementation requires that indexing be disabled on +# hosts such as hpux that use a segmented memory architecture. Both the c +# and ada files need to be compiled with this option for correct operation. +ADA_CFLAGS = -mdisable-indexing diff --git a/config/mh-pa-hpux10 b/config/mh-pa-hpux10 new file mode 100644 index 0000000..99a2278 --- /dev/null +++ b/config/mh-pa-hpux10 @@ -0,0 +1,4 @@ +# The ada virtual array implementation requires that indexing be disabled on +# hosts such as hpux that use a segmented memory architecture. Both the c +# and ada files need to be compiled with this option for correct operation. +ADA_CFLAGS = -mdisable-indexing -D_X_HPUX10 diff --git a/config/mh-papic b/config/mh-papic deleted file mode 100644 index 35cf2c8..0000000 --- a/config/mh-papic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/config/mh-ppc-aix b/config/mh-ppc-aix index a56985f..4a97d81 100644 --- a/config/mh-ppc-aix +++ b/config/mh-ppc-aix @@ -1,9 +1,8 @@ - -# 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 +# To prevent the Ada static runtime library from using nearly the entire +# TOC, we used to compile Ada files with minimal-toc in addition to -gnatg +# (mandatory to compile language defined units). This incured a performance +# penalty and is not required with section anchors enabled by default so we +# don't do it any more. +BOOT_ADAFLAGS = -gnatapg 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 8e64791..66f68b6 100644 --- a/config/mh-ppc-darwin +++ b/config/mh-ppc-darwin @@ -2,5 +2,4 @@ # position-independent-code -- the usual default on Darwin. This fix speeds # compiles by 3-5%. -# Broken because of PR32009. -# BOOT_CFLAGS=-g -O2 -mdynamic-no-pic +BOOT_CFLAGS += -mdynamic-no-pic diff --git a/config/mh-ppcpic b/config/mh-ppcpic deleted file mode 100644 index 35cf2c8..0000000 --- a/config/mh-ppcpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fPIC diff --git a/config/mh-s390pic b/config/mh-s390pic deleted file mode 100644 index 92e48d9..0000000 --- a/config/mh-s390pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/config/mh-sparcpic b/config/mh-sparcpic deleted file mode 100644 index e218bb4..0000000 --- a/config/mh-sparcpic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=`case '${LIBCFLAGS} ${LIBCXXFLAGS}' in *-fpic* ) echo -fpic ;; * ) echo -fPIC ;; esac` diff --git a/config/mh-x86pic b/config/mh-x86pic deleted file mode 100644 index 92e48d9..0000000 --- a/config/mh-x86pic +++ /dev/null @@ -1 +0,0 @@ -PICFLAG=-fpic diff --git a/config/mt-gnu b/config/mt-gnu index f05c4f9..15bf417 100644 --- a/config/mt-gnu +++ b/config/mt-gnu @@ -1 +1 @@ -CXXFLAGS_FOR_TARGET = $(CXXFLAGS) $(SYSROOT_CFLAGS_FOR_TARGET) -D_GNU_SOURCE +CXXFLAGS_FOR_TARGET = $(CXXFLAGS) -D_GNU_SOURCE diff --git a/config/mt-mips-elfoabi b/config/mt-mips-elfoabi new file mode 100644 index 0000000..a9f9cbe --- /dev/null +++ b/config/mt-mips-elfoabi @@ -0,0 +1 @@ +include $(srcdir)/config/mt-mips16-compat diff --git a/config/mt-mips-gnu b/config/mt-mips-gnu new file mode 100644 index 0000000..a8198c0 --- /dev/null +++ b/config/mt-mips-gnu @@ -0,0 +1,2 @@ +include $(srcdir)/config/mt-gnu +include $(srcdir)/config/mt-mips16-compat diff --git a/config/mt-mips16-compat b/config/mt-mips16-compat new file mode 100644 index 0000000..7e36791 --- /dev/null +++ b/config/mt-mips16-compat @@ -0,0 +1,5 @@ +# Configurations use this fragment if they support MIPS16 and non-MIPS16 code, +# but if the libraries are all non-MIPS16. Add -minterlink-mips16 so +# that the libraries can be used with both ISA modes. +CFLAGS_FOR_TARGET += -minterlink-mips16 +CXXFLAGS_FOR_TARGET += -minterlink-mips16 diff --git a/config/mt-sde b/config/mt-sde new file mode 100644 index 0000000..cb20420 --- /dev/null +++ b/config/mt-sde @@ -0,0 +1,10 @@ +# We default to building libraries optimised for size. We use +# -minterlink-mips16 so that the non-MIPS16 libraries can still be +# linked against partly-MIPS16 code. The -mcode-xonly option allows +# MIPS16 libraries to run on Harvard-style split I/D memories, so long +# as they have the D-to-I redirect for PC-relative loads. -mno-gpopt +# has two purposes: it allows libraries to be used in situations where +# $gp != our _gp, and it allows them to be built with -G8 while +# retaining link compability with -G0 and -G4. +CFLAGS_FOR_TARGET += -Os -minterlink-mips16 -mcode-xonly -mno-gpopt +CXXFLAGS_FOR_TARGET += -Os -minterlink-mips16 -mcode-xonly -mno-gpopt diff --git a/config/mt-spu b/config/mt-spu index c2dbc66..7efa74c 100644 --- a/config/mt-spu +++ b/config/mt-spu @@ -1,4 +1,2 @@ -# spu ld makefile invokes as-new in maintainer mode. -all-ld: $(MAINT) all-gas -# spu ld makefile invokes bin2c -all-ld: all-binutils +# spu ld makefile invokes as-new and bin2c in maintainer mode. +all-ld: $(MAINT) all-gas all-binutils diff --git a/config/multi.m4 b/config/multi.m4 index 9841767..5b62ecc 100644 --- a/config/multi.m4 +++ b/config/multi.m4 @@ -1,5 +1,5 @@ ## -*- Autoconf -*- -# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006 +# Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation @@ -62,4 +62,7 @@ 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 +CC="$CC" +CXX="$CXX" +GFORTRAN="$GFORTRAN" +GCJ="$GCJ"])])dnl diff --git a/config/no-executables.m4 b/config/no-executables.m4 index 54e5a02..9061624 100644 --- a/config/no-executables.m4 +++ b/config/no-executables.m4 @@ -25,7 +25,7 @@ AC_BEFORE([$0], [_AC_COMPILER_EXEEXT]) AC_BEFORE([$0], [AC_LINK_IFELSE]) m4_define([_AC_COMPILER_EXEEXT], -AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) +[AC_LANG_CONFTEST([AC_LANG_PROGRAM()]) # FIXME: Cleanup? AS_IF([AC_TRY_EVAL(ac_link)], [gcc_no_link=no], [gcc_no_link=yes]) if test x$gcc_no_link = xyes; then @@ -35,7 +35,7 @@ if test x$gcc_no_link = xyes; then cross_compiling=yes EXEEXT= else - m4_defn([_AC_COMPILER_EXEEXT])dnl + ]m4_defn([_AC_COMPILER_EXEEXT])dnl fi ) @@ -59,3 +59,11 @@ fi) m4_divert_pop()dnl ])# GCC_NO_EXECUTABLES + +# Use the strongest available test out of AC_TRY_COMPILE and AC_TRY_LINK. +AC_DEFUN([GCC_TRY_COMPILE_OR_LINK], +[if test x$gcc_no_link = xyes; then + AC_TRY_COMPILE([$1], [$2], [$3], [$4]) +else + AC_TRY_LINK([$1], [$2], [$3], [$4]) +fi]) diff --git a/config/override.m4 b/config/override.m4 new file mode 100644 index 0000000..cfa225a --- /dev/null +++ b/config/override.m4 @@ -0,0 +1,274 @@ +dnl Fix Autoconf-2.59 bugs: by overriding broken internal +dnl Autoconf macros with backports of the 2.60+ fix. +dnl - AC_CONFIG_SUBDIRS whitespace mangling, +dnl - more lenient precious variable checks +dnl - better configure error message +dnl - reliance on non-Posix m4wrap (M4 1.6 or newer implement FIFO) +dnl +dnl The override bits of this file should be a no-op for the newest +dnl Autoconf version, which means they can be removed once the complete +dnl tree has moved to a new enough Autoconf version. +dnl +dnl The _GCC_AUTOCONF_VERSION_TEST ensures that exactly the desired +dnl Autoconf version is used. It should be kept for consistency. + +dnl Provide m4_copy_force and m4_rename_force for old Autoconf versions. + +m4_ifndef([m4_copy_force], +[m4_define([m4_copy_force], +[m4_ifdef([$2], [m4_undefine([$2])])m4_copy($@)])]) + +m4_ifndef([m4_rename_force], +[m4_define([m4_rename_force], +[m4_ifdef([$2], [m4_undefine([$2])])m4_rename($@)])]) + +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], +[dnl AC_DEFUN a commonly used macro so this file is picked up. +m4_copy([AC_PREREQ], [_AC_PREREQ]) +AC_DEFUN([AC_PREREQ], [frob]) +m4_copy_force([_AC_PREREQ], [AC_PREREQ]) + + +dnl Ensure exactly this Autoconf version is used +m4_ifndef([_GCC_AUTOCONF_VERSION], + [m4_define([_GCC_AUTOCONF_VERSION], [2.64])]) + +dnl Test for the exact version when AC_INIT is expanded. +dnl This allows to update the tree in steps (for testing) +dnl by putting +dnl m4_define([_GCC_AUTOCONF_VERSION], [X.Y]) +dnl in configure.ac before AC_INIT, +dnl without rewriting this file. +dnl Or for updating the whole tree at once with the definition above. +AC_DEFUN([_GCC_AUTOCONF_VERSION_CHECK], +[m4_if(m4_defn([_GCC_AUTOCONF_VERSION]), + m4_defn([m4_PACKAGE_VERSION]), [], + [m4_fatal([Please use exactly Autoconf ]_GCC_AUTOCONF_VERSION[ instead of ]m4_defn([m4_PACKAGE_VERSION])[.])]) +]) +m4_define([AC_INIT], m4_defn([AC_INIT])[ +_GCC_AUTOCONF_VERSION_CHECK +]) + + +dnl Turn AC_DISABLE_OPTION_CHECKING into a no-op if not defined. +m4_ifndef([AC_DISABLE_OPTION_CHECKING], + [m4_define([AC_DISABLE_OPTION_CHECKING])]) + + +dnl Fix 2.64 cross compile detection for AVR and RTEMS +dnl by not trying to compile fopen. +m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.64], + [m4_foreach([_GCC_LANG], [C, C++, Fortran, Fortran 77], + [m4_define([_AC_LANG_IO_PROGRAM(]_GCC_LANG[)], m4_defn([AC_LANG_PROGRAM(]_GCC_LANG[)]))])]) + + +m4_version_prereq([2.60],, [ +dnl We use $ac_pwd in some of the overrides below; ensure its definition +m4_divert_push([PARSE_ARGS])dnl +ac_pwd=`pwd` +m4_divert_pop([PARSE_ARGS])dnl +]) + + +m4_version_prereq([2.60],, [ + +# _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 +]) + +m4_version_prereq([2.63],, [ + +# _AC_ARG_VAR_VALIDATE +# -------------------- +# The code is the same as autoconf 2.59, but with a more lenient check +# on precious variables and an output of pwd that have been added in +# autoconf 2.62. +m4_define([_AC_ARG_VAR_VALIDATE], +[m4_divert_text([INIT_PREPARE], +[# 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,) + AS_MESSAGE([error: `$ac_var' was set to `$ac_old_val' in the previous run], 2) + ac_cache_corrupted=: ;; + ,set) + AS_MESSAGE([error: `$ac_var' was not set in the previous run], 2) + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + AS_MESSAGE([error: `$ac_var' has changed since the previous run:], 2) + ac_cache_corrupted=: + else + AS_MESSAGE([warning: ignoring whitespace changes in `$ac_var' since the previous run:], 2) + eval $ac_var=\$ac_old_val + fi + AS_MESSAGE([ former value: `$ac_old_val'], 2) + AS_MESSAGE([ current value: `$ac_new_val'], 2) + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in +dnl If you change this globbing pattern, test it on an old shell -- +dnl it's sensitive. Putting any kind of quote in it causes syntax errors. +[ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)] + 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 + AS_MESSAGE([error: in `$ac_pwd':], 2) + AS_MESSAGE([error: changes in the environment can compromise the build], 2) + AS_ERROR([run `make distclean' and/or `rm $cache_file' and start over]) +fi])dnl +])# _AC_ARG_VAR_VALIDATE +]) + +m4_version_prereq([2.63],, [ + +# AC_MSG_FAILURE(ERROR, [EXIT-STATUS = 1]) +# ---------------------------------------- +# This is the same code as in 2.59 and 2.61, except it also outputs pwd. +m4_define([AC_MSG_FAILURE], +[{ AS_MESSAGE([error: in `$ac_pwd':], 2) +AC_MSG_ERROR([$1 +See `config.log' for more details.], [$2]); }]) +]) +]) + +m4_version_prereq([2.60],, [ +dnl M4 1.6 and newer implement m4wrap using FIFO semantics, as required +dnl by Posix; earlier versions used LIFO semantics. Unfortunately, +dnl Autoconf versions before 2.60 require those LIFO semantics, so +dnl make sure to give it to them. +m4_define([m4_wrap], [m4_ifdef([_$0_text], + [m4_define([_$0_text], [$1]m4_defn([_$0_text]))], + [m4_define([_$0_text], [$1])m4_builtin([m4wrap], + [m4_default(m4_defn([_$0_text])m4_undefine([_$0_text]))])])]) +]) diff --git a/config/plugins.m4 b/config/plugins.m4 new file mode 100644 index 0000000..7ee8412 --- /dev/null +++ b/config/plugins.m4 @@ -0,0 +1,11 @@ +AC_DEFUN([AC_PLUGINS], +[ +AC_ARG_ENABLE([plugins], +AS_HELP_STRING([--enable-plugins], [Enable support for plugins (defaults no)]), +[case "${enableval}" in + yes | "") plugins=yes ;; + no) plugins=no ;; + *) plugins=yes ;; + esac], +[plugins=no]) +]) diff --git a/config/proginstall.m4 b/config/proginstall.m4 new file mode 100644 index 0000000..a78a3d4 --- /dev/null +++ b/config/proginstall.m4 @@ -0,0 +1,98 @@ +# AC_PROG_INSTALL +# --------------- +# +# This macro is stolen from Autoconf 2.61a-341. +# It requires `install' to be able to install multiple files at once. +# This file will be obsolete when GCC moves to Autoconf 2.62. + +m4_version_prereq([2.62], [], +[ +AC_DEFUN([AC_PROG_INSTALL], +[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl +dnl AC_REQUIRE_AUX_FILE([install-sh])dnl This line does not work with 2.59. +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +AC_MSG_CHECKING([for a BSD-compatible install]) +if test -z "$INSTALL"; then +AC_CACHE_VAL(ac_cv_path_install, +[_AS_PATH_WALK([$PATH], +[# 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 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac]) +rm -rf conftest.one conftest.two conftest.dir +])dnl + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +dnl Do special magic for INSTALL instead of AC_SUBST, to get +dnl relative names right. +AC_MSG_RESULT([$INSTALL]) + +# 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}' +AC_SUBST(INSTALL_PROGRAM)dnl + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' +AC_SUBST(INSTALL_SCRIPT)dnl + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' +AC_SUBST(INSTALL_DATA)dnl +])# AC_PROG_INSTALL +]) diff --git a/config/tcl.m4 b/config/tcl.m4 new file mode 100644 index 0000000..900a2ce --- /dev/null +++ b/config/tcl.m4 @@ -0,0 +1,3246 @@ +#------------------------------------------------------------------------ +# SC_PATH_TCLCONFIG -- +# +# Locate the tclConfig.sh file and perform a sanity check on +# the Tcl compile flags +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-tcl=... +# +# Defines the following vars: +# TCL_BIN_DIR Full path to the directory containing +# the tclConfig.sh file +#------------------------------------------------------------------------ + +AC_DEFUN([SC_PATH_TCLCONFIG], [ + # + # Ok, lets find the tcl configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tcl + # + + if test x"${no_tcl}" = x ; then + # we reset no_tcl in case something fails here + no_tcl=true + AC_ARG_WITH(tcl, [ --with-tcl directory containing tcl configuration (tclConfig.sh)], with_tclconfig=${withval}) + AC_MSG_CHECKING([for Tcl configuration]) + AC_CACHE_VAL(ac_cv_c_tclconfig,[ + + # First check to see if --with-tcl was specified. + case "${host}" in + *-*-cygwin*) platDir="win" ;; + *) platDir="unix" ;; + esac + if test x"${with_tclconfig}" != x ; then + if test -f "${with_tclconfig}/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` + else + AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) + fi + fi + + # then check for a private Tcl installation + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ../tcl \ + `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../tcl \ + `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../../tcl \ + `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/$platDir/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/$platDir; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tcl.framework/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/Tcl.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i; pwd)` + break + fi + done + fi + + # check in a few other private locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ${srcdir}/../tcl \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/$platDir/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/$platDir; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_tclconfig}" = x ; then + TCL_BIN_DIR="# no Tcl configs found" + AC_MSG_WARN([Can't find Tcl configuration definitions]) + else + no_tcl= + TCL_BIN_DIR=${ac_cv_c_tclconfig} + AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_PATH_TKCONFIG -- +# +# Locate the tkConfig.sh file +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-tk=... +# +# Defines the following vars: +# TK_BIN_DIR Full path to the directory containing +# the tkConfig.sh file +#------------------------------------------------------------------------ + +AC_DEFUN([SC_PATH_TKCONFIG], [ + # + # Ok, lets find the tk configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tk + # + + if test x"${no_tk}" = x ; then + # we reset no_tk in case something fails here + no_tk=true + AC_ARG_WITH(tk, [ --with-tk directory containing tk configuration (tkConfig.sh)], with_tkconfig=${withval}) + AC_MSG_CHECKING([for Tk configuration]) + AC_CACHE_VAL(ac_cv_c_tkconfig,[ + + # First check to see if --with-tkconfig was specified. + if test x"${with_tkconfig}" != x ; then + if test -f "${with_tkconfig}/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)` + else + AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) + fi + fi + + # then check for a private Tk library + case "${host}" in + *-*-cygwin*) platDir="win" ;; + *) platDir="unix" ;; + esac + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ../tk \ + `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../tk \ + `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../../tk \ + `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/$platDir/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/$platDir; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tk.framework/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/Tk.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i; pwd)` + break + fi + done + fi + # check in a few other private locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ${srcdir}/../tk \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/$platDir/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/$platDir; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_tkconfig}" = x ; then + TK_BIN_DIR="# no Tk configs found" + AC_MSG_WARN([Can't find Tk configuration definitions]) + else + no_tk= + TK_BIN_DIR=${ac_cv_c_tkconfig} + AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_LOAD_TCLCONFIG -- +# +# Load the tclConfig.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# TCL_BIN_DIR +# +# Results: +# +# Subst the following vars: +# TCL_BIN_DIR +# TCL_SRC_DIR +# TCL_LIB_FILE +# +#------------------------------------------------------------------------ + +AC_DEFUN([SC_LOAD_TCLCONFIG], [ + AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) + + if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then + AC_MSG_RESULT([loading]) + . ${TCL_BIN_DIR}/tclConfig.sh + else + AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) + fi + + # eval is required to do the TCL_DBGX substitution + eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" + eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" + + # If the TCL_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TCL_LIB_SPEC will be set to the value + # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC + # instead of TCL_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + if test -f "${TCL_BIN_DIR}/Makefile" ; then + TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC} + TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC} + TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH} + elif test "`uname -s`" = "Darwin"; then + # If Tcl was built as a framework, attempt to use the libraries + # from the framework at the given location so that linking works + # against Tcl.framework installed in an arbitary location. + case ${TCL_DEFS} in + *TCL_FRAMEWORK*) + if test -f "${TCL_BIN_DIR}/${TCL_LIB_FILE}"; then + for i in "`cd ${TCL_BIN_DIR}; pwd`" \ + "`cd ${TCL_BIN_DIR}/../..; pwd`"; do + if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then + TCL_LIB_SPEC="-F`dirname "$i"` -framework ${TCL_LIB_FILE}" + break + fi + done + fi + if test -f "${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}"; then + TCL_STUB_LIB_SPEC="-L${TCL_BIN_DIR} ${TCL_STUB_LIB_FLAG}" + TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" + fi + ;; + esac + fi + + # eval is required to do the TCL_DBGX substitution + eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" + eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" + eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" + eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" + + AC_SUBST(TCL_VERSION) + AC_SUBST(TCL_PATCH_LEVEL) + AC_SUBST(TCL_BIN_DIR) + AC_SUBST(TCL_SRC_DIR) + + AC_SUBST(TCL_LIB_FILE) + AC_SUBST(TCL_LIB_FLAG) + AC_SUBST(TCL_LIB_SPEC) + + AC_SUBST(TCL_STUB_LIB_FILE) + AC_SUBST(TCL_STUB_LIB_FLAG) + AC_SUBST(TCL_STUB_LIB_SPEC) +]) + +#------------------------------------------------------------------------ +# SC_LOAD_TKCONFIG -- +# +# Load the tkConfig.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# TK_BIN_DIR +# +# Results: +# +# Sets the following vars that should be in tkConfig.sh: +# TK_BIN_DIR +#------------------------------------------------------------------------ + +AC_DEFUN([SC_LOAD_TKCONFIG], [ + AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) + + if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then + AC_MSG_RESULT([loading]) + . ${TK_BIN_DIR}/tkConfig.sh + else + AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) + fi + + # eval is required to do the TK_DBGX substitution + eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" + eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" + + # If the TK_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TK_LIB_SPEC will be set to the value + # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC + # instead of TK_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + if test -f "${TK_BIN_DIR}/Makefile" ; then + TK_LIB_SPEC=${TK_BUILD_LIB_SPEC} + TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC} + TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH} + elif test "`uname -s`" = "Darwin"; then + # If Tk was built as a framework, attempt to use the libraries + # from the framework at the given location so that linking works + # against Tk.framework installed in an arbitary location. + case ${TK_DEFS} in + *TK_FRAMEWORK*) + if test -f "${TK_BIN_DIR}/${TK_LIB_FILE}"; then + for i in "`cd ${TK_BIN_DIR}; pwd`" \ + "`cd ${TK_BIN_DIR}/../..; pwd`"; do + if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then + TK_LIB_SPEC="-F`dirname "$i"` -framework ${TK_LIB_FILE}" + break + fi + done + fi + if test -f "${TK_BIN_DIR}/${TK_STUB_LIB_FILE}"; then + TK_STUB_LIB_SPEC="-L${TK_BIN_DIR} ${TK_STUB_LIB_FLAG}" + TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" + fi + ;; + esac + fi + + # eval is required to do the TK_DBGX substitution + eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" + eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" + eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" + eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" + + AC_SUBST(TK_VERSION) + AC_SUBST(TK_BIN_DIR) + AC_SUBST(TK_SRC_DIR) + + AC_SUBST(TK_LIB_FILE) + AC_SUBST(TK_LIB_FLAG) + AC_SUBST(TK_LIB_SPEC) + + AC_SUBST(TK_STUB_LIB_FILE) + AC_SUBST(TK_STUB_LIB_FLAG) + AC_SUBST(TK_STUB_LIB_SPEC) +]) + +#------------------------------------------------------------------------ +# SC_PROG_TCLSH +# Locate a tclsh shell installed on the system path. This macro +# will only find a Tcl shell that already exists on the system. +# It will not find a Tcl shell in the Tcl build directory or +# a Tcl shell that has been installed from the Tcl build directory. +# If a Tcl shell can't be located on the PATH, then TCLSH_PROG will +# be set to "". Extensions should take care not to create Makefile +# rules that are run by default and depend on TCLSH_PROG. An +# extension can't assume that an executable Tcl shell exists at +# build time. +# +# Arguments +# none +# +# Results +# Subst's the following values: +# TCLSH_PROG +#------------------------------------------------------------------------ + +AC_DEFUN([SC_PROG_TCLSH], [ + AC_MSG_CHECKING([for tclsh]) + AC_CACHE_VAL(ac_cv_path_tclsh, [ + search_path=`echo ${PATH} | sed -e 's/:/ /g'` + for dir in $search_path ; do + for j in `ls -r $dir/tclsh[[8-9]]* 2> /dev/null` \ + `ls -r $dir/tclsh* 2> /dev/null` ; do + if test x"$ac_cv_path_tclsh" = x ; then + if test -f "$j" ; then + ac_cv_path_tclsh=$j + break + fi + fi + done + done + ]) + + if test -f "$ac_cv_path_tclsh" ; then + TCLSH_PROG="$ac_cv_path_tclsh" + AC_MSG_RESULT([$TCLSH_PROG]) + else + # It is not an error if an installed version of Tcl can't be located. + TCLSH_PROG="" + AC_MSG_RESULT([No tclsh found on PATH]) + fi + AC_SUBST(TCLSH_PROG) +]) + +#------------------------------------------------------------------------ +# SC_BUILD_TCLSH +# Determine the fully qualified path name of the tclsh executable +# in the Tcl build directory. This macro will correctly determine +# the name of the tclsh executable even if tclsh has not yet +# been built in the build directory. The build tclsh must be used +# when running tests from an extension build directory. It is not +# correct to use the TCLSH_PROG in cases like this. +# +# Arguments +# none +# +# Results +# Subst's the following values: +# BUILD_TCLSH +#------------------------------------------------------------------------ + +AC_DEFUN([SC_BUILD_TCLSH], [ + AC_MSG_CHECKING([for tclsh in Tcl build directory]) + BUILD_TCLSH=${TCL_BIN_DIR}/tclsh + AC_MSG_RESULT([$BUILD_TCLSH]) + AC_SUBST(BUILD_TCLSH) +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_SHARED -- +# +# Allows the building of shared libraries +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-shared=yes|no +# +# Defines the following vars: +# STATIC_BUILD Used for building import/export libraries +# on Windows. +# +# Sets the following vars: +# SHARED_BUILD Value of 1 or 0 +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_SHARED], [ + AC_MSG_CHECKING([how to build libraries]) + AC_ARG_ENABLE(shared, + [ --enable-shared build and link with shared libraries [--enable-shared]], + [tcl_ok=$enableval], [tcl_ok=yes]) + + if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" ; then + AC_MSG_RESULT([shared]) + SHARED_BUILD=1 + else + AC_MSG_RESULT([static]) + SHARED_BUILD=0 + AC_DEFINE(STATIC_BUILD) + fi +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_FRAMEWORK -- +# +# Allows the building of shared libraries into frameworks +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-framework=yes|no +# +# Sets the following vars: +# FRAMEWORK_BUILD Value of 1 or 0 +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_FRAMEWORK], [ + if test "`uname -s`" = "Darwin" ; then + AC_MSG_CHECKING([how to package libraries]) + AC_ARG_ENABLE(framework, + [ --enable-framework package shared libraries in MacOSX frameworks [--disable-framework]], + [enable_framework=$enableval], [enable_framework=no]) + if test $enable_framework = yes; then + if test $SHARED_BUILD = 0; then + AC_MSG_WARN([Frameworks can only be built if --enable-shared is yes]) + enable_framework=no + fi + if test $tcl_corefoundation = no; then + AC_MSG_WARN([Frameworks can only be used when CoreFoundation is available]) + enable_framework=no + fi + fi + if test $enable_framework = yes; then + AC_MSG_RESULT([framework]) + FRAMEWORK_BUILD=1 + else + if test $SHARED_BUILD = 1; then + AC_MSG_RESULT([shared library]) + else + AC_MSG_RESULT([static library]) + fi + FRAMEWORK_BUILD=0 + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_THREADS -- +# +# Specify if thread support should be enabled. TCL_THREADS is +# checked so that if you are compiling an extension against a +# threaded core, your extension must be compiled threaded as well. +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-threads +# +# Sets the following vars: +# THREADS_LIBS Thread library(s) +# +# Defines the following vars: +# TCL_THREADS +# _REENTRANT +# _THREAD_SAFE +# +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_THREADS], [ + AC_ARG_ENABLE(threads, [ --enable-threads build with threads], + [tcl_ok=$enableval], [tcl_ok=no]) + + if test "${TCL_THREADS}" = 1; then + tcl_threaded_core=1; + fi + + if test "$tcl_ok" = "yes" -o "${TCL_THREADS}" = 1; then + TCL_THREADS=1 + # USE_THREAD_ALLOC tells us to try the special thread-based + # allocator that significantly reduces lock contention + AC_DEFINE(USE_THREAD_ALLOC) + AC_DEFINE(_REENTRANT) + if test "`uname -s`" = "SunOS" ; then + AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) + fi + AC_DEFINE(_THREAD_SAFE) + AC_CHECK_LIB(pthread,pthread_mutex_init,tcl_ok=yes,tcl_ok=no) + if test "$tcl_ok" = "no"; then + # Check a little harder for __pthread_mutex_init in the same + # library, as some systems hide it there until pthread.h is + # defined. We could alternatively do an AC_TRY_COMPILE with + # pthread.h, but that will work with libpthread really doesn't + # exist, like AIX 4.2. [Bug: 4359] + AC_CHECK_LIB(pthread, __pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + fi + + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthread" + else + AC_CHECK_LIB(pthreads, pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -lpthreads" + else + AC_CHECK_LIB(c, pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = "no"; then + AC_CHECK_LIB(c_r, pthread_mutex_init, + tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = "yes"; then + # The space is needed + THREADS_LIBS=" -pthread" + else + TCL_THREADS=0 + AC_MSG_WARN([Don't know how to find pthread lib on your system - you must disable thread support or edit the LIBS in the Makefile...]) + fi + fi + fi + fi + + # Does the pthread-implementation provide + # 'pthread_attr_setstacksize' ? + + ac_saved_libs=$LIBS + LIBS="$LIBS $THREADS_LIBS" + AC_CHECK_FUNCS(pthread_attr_setstacksize) + AC_CHECK_FUNCS(pthread_atfork) + LIBS=$ac_saved_libs + else + TCL_THREADS=0 + fi + # Do checking message here to not mess up interleaved configure output + AC_MSG_CHECKING([for building with threads]) + if test "${TCL_THREADS}" = 1; then + AC_DEFINE(TCL_THREADS, 1, [Are we building with threads enabled?]) + if test "${tcl_threaded_core}" = 1; then + AC_MSG_RESULT([yes (threaded core)]) + else + AC_MSG_RESULT([yes]) + fi + else + AC_MSG_RESULT([no (default)]) + fi + + AC_SUBST(TCL_THREADS) +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_SYMBOLS -- +# +# Specify if debugging symbols should be used. +# Memory (TCL_MEM_DEBUG) and compile (TCL_COMPILE_DEBUG) debugging +# can also be enabled. +# +# Arguments: +# none +# +# Requires the following vars to be set in the Makefile: +# CFLAGS_DEBUG +# CFLAGS_OPTIMIZE +# LDFLAGS_DEBUG +# LDFLAGS_OPTIMIZE +# +# Results: +# +# Adds the following arguments to configure: +# --enable-symbols +# +# Defines the following vars: +# CFLAGS_DEFAULT Sets to $(CFLAGS_DEBUG) if true +# Sets to $(CFLAGS_OPTIMIZE) if false +# LDFLAGS_DEFAULT Sets to $(LDFLAGS_DEBUG) if true +# Sets to $(LDFLAGS_OPTIMIZE) if false +# DBGX Debug library extension +# +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_SYMBOLS], [ + AC_MSG_CHECKING([for build with symbols]) + AC_ARG_ENABLE(symbols, [ --enable-symbols build with debugging symbols [--disable-symbols]], [tcl_ok=$enableval], [tcl_ok=no]) +# FIXME: Currently, LDFLAGS_DEFAULT is not used, it should work like CFLAGS_DEFAULT. + if test "$tcl_ok" = "no"; then + CFLAGS_DEFAULT='$(CFLAGS_OPTIMIZE)' + LDFLAGS_DEFAULT='$(LDFLAGS_OPTIMIZE)' + DBGX="" + AC_MSG_RESULT([no]) + else + CFLAGS_DEFAULT='$(CFLAGS_DEBUG)' + LDFLAGS_DEFAULT='$(LDFLAGS_DEBUG)' + DBGX=g + if test "$tcl_ok" = "yes"; then + AC_MSG_RESULT([yes (standard debugging)]) + fi + fi + AC_SUBST(CFLAGS_DEFAULT) + AC_SUBST(LDFLAGS_DEFAULT) + + if test "$tcl_ok" = "mem" -o "$tcl_ok" = "all"; then + AC_DEFINE(TCL_MEM_DEBUG) + fi + + if test "$tcl_ok" = "compile" -o "$tcl_ok" = "all"; then + AC_DEFINE(TCL_COMPILE_DEBUG) + AC_DEFINE(TCL_COMPILE_STATS) + fi + + if test "$tcl_ok" != "yes" -a "$tcl_ok" != "no"; then + if test "$tcl_ok" = "all"; then + AC_MSG_RESULT([enabled symbols mem compile debugging]) + else + AC_MSG_RESULT([enabled $tcl_ok debugging]) + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_LANGINFO -- +# +# Allows use of modern nl_langinfo check for better l10n. +# This is only relevant for Unix. +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-langinfo=yes|no (default is yes) +# +# Defines the following vars: +# HAVE_LANGINFO Triggers use of nl_langinfo if defined. +# +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_LANGINFO], [ + AC_ARG_ENABLE(langinfo, + [ --enable-langinfo use nl_langinfo if possible to determine + encoding at startup, otherwise use old heuristic], + [langinfo_ok=$enableval], [langinfo_ok=yes]) + + HAVE_LANGINFO=0 + if test "$langinfo_ok" = "yes"; then + AC_CHECK_HEADER(langinfo.h,[langinfo_ok=yes],[langinfo_ok=no]) + fi + AC_MSG_CHECKING([whether to use nl_langinfo]) + if test "$langinfo_ok" = "yes"; then + AC_CACHE_VAL(tcl_cv_langinfo_h, [ + AC_TRY_COMPILE([#include ], [nl_langinfo(CODESET);], + [tcl_cv_langinfo_h=yes],[tcl_cv_langinfo_h=no])]) + AC_MSG_RESULT([$tcl_cv_langinfo_h]) + if test $tcl_cv_langinfo_h = yes; then + AC_DEFINE(HAVE_LANGINFO) + fi + else + AC_MSG_RESULT([$langinfo_ok]) + fi +]) + +#-------------------------------------------------------------------- +# SC_CONFIG_MANPAGES +# +# Decide whether to use symlinks for linking the manpages, +# whether to compress the manpages after installation, and +# whether to add a package name suffix to the installed +# manpages to avoidfile name clashes. +# If compression is enabled also find out what file name suffix +# the given compression program is using. +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-man-symlinks +# --enable-man-compression=PROG +# --enable-man-suffix[=STRING] +# +# Defines the following variable: +# +# MAN_FLAGS - The apropriate flags for installManPage +# according to the user's selection. +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_CONFIG_MANPAGES], [ + AC_MSG_CHECKING([whether to use symlinks for manpages]) + AC_ARG_ENABLE(man-symlinks, + [ --enable-man-symlinks use symlinks for the manpages], + test "$enableval" != "no" && MAN_FLAGS="$MAN_FLAGS --symlinks", + enableval="no") + AC_MSG_RESULT([$enableval]) + + AC_MSG_CHECKING([whether to compress the manpages]) + AC_ARG_ENABLE(man-compression, + [ --enable-man-compression=PROG + compress the manpages with PROG], + [case $enableval in + yes) AC_MSG_ERROR([missing argument to --enable-man-compression]);; + no) ;; + *) MAN_FLAGS="$MAN_FLAGS --compress $enableval";; + esac], + enableval="no") + AC_MSG_RESULT([$enableval]) + if test "$enableval" != "no"; then + AC_MSG_CHECKING([for compressed file suffix]) + touch TeST + $enableval TeST + Z=`ls TeST* | sed 's/^....//'` + rm -f TeST* + MAN_FLAGS="$MAN_FLAGS --extension $Z" + AC_MSG_RESULT([$Z]) + fi + + AC_MSG_CHECKING([whether to add a package name suffix for the manpages]) + AC_ARG_ENABLE(man-suffix, + [ --enable-man-suffix=STRING + use STRING as a suffix to manpage file names + (default: $1)], + [case $enableval in + yes) enableval="$1" MAN_FLAGS="$MAN_FLAGS --suffix $enableval";; + no) ;; + *) MAN_FLAGS="$MAN_FLAGS --suffix $enableval";; + esac], + enableval="no") + AC_MSG_RESULT([$enableval]) + + AC_SUBST(MAN_FLAGS) +]) + +#-------------------------------------------------------------------- +# SC_CONFIG_SYSTEM +# +# Determine what the system is (some things cannot be easily checked +# on a feature-driven basis, alas). This can usually be done via the +# "uname" command, but there are a few systems, like Next, where +# this doesn't work. +# +# Arguments: +# none +# +# Results: +# Defines the following var: +# +# system - System/platform/version identification code. +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_CONFIG_SYSTEM], [ + AC_CACHE_CHECK([system version], tcl_cv_sys_version, [ + if test -f /usr/lib/NextStep/software_version; then + tcl_cv_sys_version=NEXTSTEP-`awk '/3/,/3/' /usr/lib/NextStep/software_version` + else + tcl_cv_sys_version=`uname -s`-`uname -r` + if test "$?" -ne 0 ; then + AC_MSG_WARN([can't find uname command]) + tcl_cv_sys_version=unknown + else + # Special check for weird MP-RAS system (uname returns weird + # results, and the version is kept in special file). + + if test -r /etc/.relid -a "X`uname -n`" = "X`uname -s`" ; then + tcl_cv_sys_version=MP-RAS-`awk '{print $[3]}' /etc/.relid` + fi + if test "`uname -s`" = "AIX" ; then + tcl_cv_sys_version=AIX-`uname -v`.`uname -r` + fi + fi + fi + ]) + system=$tcl_cv_sys_version +]) + +#-------------------------------------------------------------------- +# SC_CONFIG_CFLAGS +# +# Try to determine the proper flags to pass to the compiler +# for building shared libraries and other such nonsense. +# +# Arguments: +# none +# +# Results: +# +# Defines and substitutes the following vars: +# +# DL_OBJS - Name of the object file that implements dynamic +# loading for Tcl on this system. +# DL_LIBS - Library file(s) to include in tclsh and other base +# applications in order for the "load" command to work. +# LDFLAGS - Flags to pass to the compiler when linking object +# files into an executable application binary such +# as tclsh. +# LD_SEARCH_FLAGS-Flags to pass to ld, such as "-R /usr/local/tcl/lib", +# that tell the run-time dynamic linker where to look +# for shared libraries such as libtcl.so. Depends on +# the variable LIB_RUNTIME_DIR in the Makefile. Could +# be the same as CC_SEARCH_FLAGS if ${CC} is used to link. +# CC_SEARCH_FLAGS-Flags to pass to ${CC}, such as "-Wl,-rpath,/usr/local/tcl/lib", +# that tell the run-time dynamic linker where to look +# for shared libraries such as libtcl.so. Depends on +# the variable LIB_RUNTIME_DIR in the Makefile. +# MAKE_LIB - Command to execute to build the a library; +# differs when building shared or static. +# MAKE_STUB_LIB - +# Command to execute to build a stub library. +# INSTALL_LIB - Command to execute to install a library; +# differs when building shared or static. +# INSTALL_STUB_LIB - +# Command to execute to install a stub library. +# STLIB_LD - Base command to use for combining object files +# into a static library. +# SHLIB_CFLAGS - Flags to pass to cc when compiling the components +# of a shared library (may request position-independent +# code, among other things). +# SHLIB_LD - Base command to use for combining object files +# into a shared library. +# SHLIB_LD_LIBS - Dependent libraries for the linker to scan when +# creating shared libraries. This symbol typically +# goes at the end of the "ld" commands that build +# shared libraries. The value of the symbol is +# "${LIBS}" if all of the dependent libraries should +# be specified when creating a shared library. If +# dependent libraries should not be specified (as on +# SunOS 4.x, where they cause the link to fail, or in +# general if Tcl and Tk aren't themselves shared +# libraries), then this symbol has an empty string +# as its value. +# SHLIB_SUFFIX - Suffix to use for the names of dynamically loadable +# extensions. An empty string means we don't know how +# to use shared libraries on this platform. +# TCL_SHLIB_LD_EXTRAS - Additional element which are added to SHLIB_LD_LIBS +# TK_SHLIB_LD_EXTRAS for the build of Tcl and Tk, but not recorded in the +# tclConfig.sh, since they are only used for the build +# of Tcl and Tk. +# Examples: MacOS X records the library version and +# compatibility version in the shared library. But +# of course the Tcl version of this is only used for Tcl. +# LIB_SUFFIX - Specifies everything that comes after the "libfoo" +# in a static or shared library name, using the $VERSION variable +# to put the version in the right place. This is used +# by platforms that need non-standard library names. +# Examples: ${VERSION}.so.1.1 on NetBSD, since it needs +# to have a version after the .so, and ${VERSION}.a +# on AIX, since a shared library needs to have +# a .a extension whereas shared objects for loadable +# extensions have a .so extension. Defaults to +# ${VERSION}${SHLIB_SUFFIX}. +# TCL_NEEDS_EXP_FILE - +# 1 means that an export file is needed to link to a +# shared library. +# TCL_EXP_FILE - The name of the installed export / import file which +# should be used to link to the Tcl shared library. +# Empty if Tcl is unshared. +# TCL_BUILD_EXP_FILE - +# The name of the built export / import file which +# should be used to link to the Tcl shared library. +# Empty if Tcl is unshared. +# CFLAGS_DEBUG - +# Flags used when running the compiler in debug mode +# CFLAGS_OPTIMIZE - +# Flags used when running the compiler in optimize mode +# CFLAGS - Additional CFLAGS added as necessary (usually 64-bit) +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_CONFIG_CFLAGS], [ + + # Step 0.a: Enable 64 bit support? + + AC_MSG_CHECKING([if 64bit support is requested]) + AC_ARG_ENABLE(64bit,[ --enable-64bit enable 64bit support (where applicable)], + [do64bit=$enableval], [do64bit=no]) + AC_MSG_RESULT([$do64bit]) + + # Step 0.b: Enable Solaris 64 bit VIS support? + + AC_MSG_CHECKING([if 64bit Sparc VIS support is requested]) + AC_ARG_ENABLE(64bit-vis,[ --enable-64bit-vis enable 64bit Sparc VIS support], + [do64bitVIS=$enableval], [do64bitVIS=no]) + AC_MSG_RESULT([$do64bitVIS]) + + if test "$do64bitVIS" = "yes"; then + # Force 64bit on with VIS + do64bit=yes + fi + + # Step 1: set the variable "system" to hold the name and version number + # for the system. + + SC_CONFIG_SYSTEM + + # Step 2: check for existence of -ldl library. This is needed because + # Linux can use either -ldl or -ldld for dynamic loading. + + AC_CHECK_LIB(dl, dlopen, have_dl=yes, have_dl=no) + + # Require ranlib early so we can override it in special cases below. + + AC_REQUIRE([AC_PROG_RANLIB]) + + # Step 3: set configuration options based on system name and version. + + do64bit_ok=no + LDFLAGS_ORIG="$LDFLAGS" + TCL_EXPORT_FILE_SUFFIX="" + UNSHARED_LIB_SUFFIX="" + TCL_TRIM_DOTS='`echo ${VERSION} | tr -d .`' + ECHO_VERSION='`echo ${VERSION}`' + TCL_LIB_VERSIONS_OK=ok + CFLAGS_DEBUG=-g + CFLAGS_OPTIMIZE=-O + if test "$GCC" = "yes" ; then + CFLAGS_WARNING="-Wall -Wno-implicit-int -fno-strict-aliasing" + else + CFLAGS_WARNING="" + fi + TCL_NEEDS_EXP_FILE=0 + TCL_BUILD_EXP_FILE="" + TCL_EXP_FILE="" +dnl FIXME: Replace AC_CHECK_PROG with AC_CHECK_TOOL once cross compiling is fixed. +dnl AC_CHECK_TOOL(AR, ar) + AC_CHECK_PROG(AR, ar, ar) + if test "${AR}" = "" ; then + AC_MSG_ERROR([Required archive tool 'ar' not found on PATH.]) + fi + STLIB_LD='${AR} cr' + LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH" + PLAT_OBJS="" + PLAT_SRCS="" + case $system in + AIX-*) + if test "${TCL_THREADS}" = "1" -a "$GCC" != "yes" ; then + # AIX requires the _r compiler when gcc isn't being used + case "${CC}" in + *_r) + # ok ... + ;; + *) + CC=${CC}_r + ;; + esac + AC_MSG_RESULT([Using $CC for compiling with threads]) + fi + LIBS="$LIBS -lc" + SHLIB_CFLAGS="" + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + DL_OBJS="tclLoadDl.o" + LD_LIBRARY_PATH_VAR="LIBPATH" + + # Check to enable 64-bit flags for compiler/linker on AIX 4+ + if test "$do64bit" = "yes" -a "`uname -v`" -gt "3" ; then + if test "$GCC" = "yes" ; then + AC_MSG_WARN([64bit mode not supported with GCC on $system]) + else + do64bit_ok=yes + CFLAGS="$CFLAGS -q64" + LDFLAGS="$LDFLAGS -q64" + RANLIB="${RANLIB} -X64" + AR="${AR} -X64" + SHLIB_LD_FLAGS="-b64" + fi + fi + + if test "`uname -m`" = "ia64" ; then + # AIX-5 uses ELF style dynamic libraries on IA-64, but not PPC + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + # AIX-5 has dl* in libc.so + DL_LIBS="" + if test "$GCC" = "yes" ; then + CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + else + CC_SEARCH_FLAGS='-R${LIB_RUNTIME_DIR}' + fi + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + else + if test "$GCC" = "yes" ; then + SHLIB_LD="gcc -shared" + else + SHLIB_LD="/bin/ld -bhalt:4 -bM:SRE -bE:lib.exp -H512 -T512 -bnoentry" + fi + SHLIB_LD="${TCL_SRC_DIR}/unix/ldAix ${SHLIB_LD} ${SHLIB_LD_FLAGS}" + DL_LIBS="-ldl" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + TCL_NEEDS_EXP_FILE=1 + TCL_EXPORT_FILE_SUFFIX='${VERSION}\$\{DBGX\}.exp' + fi + + # AIX v<=4.1 has some different flags than 4.2+ + if test "$system" = "AIX-4.1" -o "`uname -v`" -lt "4" ; then + LIBOBJS="$LIBOBJS tclLoadAix.o" + DL_LIBS="-lld" + fi + + # On AIX <=v4 systems, libbsd.a has to be linked in to support + # non-blocking file IO. This library has to be linked in after + # the MATH_LIBS or it breaks the pow() function. The way to + # insure proper sequencing, is to add it to the tail of MATH_LIBS. + # This library also supplies gettimeofday. + # + # AIX does not have a timezone field in struct tm. When the AIX + # bsd library is used, the timezone global and the gettimeofday + # methods are to be avoided for timezone deduction instead, we + # deduce the timezone by comparing the localtime result on a + # known GMT value. + + AC_CHECK_LIB(bsd, gettimeofday, libbsd=yes, libbsd=no) + if test $libbsd = yes; then + MATH_LIBS="$MATH_LIBS -lbsd" + AC_DEFINE(USE_DELTA_FOR_TZ) + fi + ;; + BeOS*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="${CC} -nostart" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + + #----------------------------------------------------------- + # Check for inet_ntoa in -lbind, for BeOS (which also needs + # -lsocket, even if the network functions are in -lnet which + # is always linked to, for compatibility. + #----------------------------------------------------------- + AC_CHECK_LIB(bind, inet_ntoa, [LIBS="$LIBS -lbind -lsocket"]) + ;; + BSD/OS-2.1*|BSD/OS-3*) + SHLIB_CFLAGS="" + SHLIB_LD="shlicc -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + BSD/OS-4.*) + SHLIB_CFLAGS="-export-dynamic -fPIC" + SHLIB_LD="cc -shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -export-dynamic" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + dgux*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + HP-UX-*.11.*) + # Use updated header definitions where possible + AC_DEFINE(_XOPEN_SOURCE) # Use the XOPEN network library + AC_DEFINE(_XOPEN_SOURCE_EXTENDED) # Use the XOPEN network library + LIBS="$LIBS -lxnet" # Use the XOPEN network library + + if test "`uname -m`" = "ia64" ; then + SHLIB_SUFFIX=".so" + else + SHLIB_SUFFIX=".sl" + fi + AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="$LDFLAGS -Wl,-E" + CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' + LD_LIBRARY_PATH_VAR="SHLIB_PATH" + fi + if test "$GCC" = "yes" ; then + SHLIB_LD="gcc -shared" + SHLIB_LD_LIBS='${LIBS}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + fi + + # Users may want PA-RISC 1.1/2.0 portable code - needs HP cc + #CFLAGS="$CFLAGS +DAportable" + + # Check to enable 64-bit flags for compiler/linker + if test "$do64bit" = "yes" ; then + if test "$GCC" = "yes" ; then + hpux_arch=`${CC} -dumpmachine` + case $hpux_arch in + hppa64*) + # 64-bit gcc in use. Fix flags for GNU ld. + do64bit_ok=yes + SHLIB_LD="${CC} -shared" + SHLIB_LD_LIBS='${LIBS}' + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + ;; + *) + AC_MSG_WARN([64bit mode not supported with GCC on $system]) + ;; + esac + else + do64bit_ok=yes + CFLAGS="$CFLAGS +DD64" + LDFLAGS="$LDFLAGS +DD64" + fi + fi + ;; + HP-UX-*.08.*|HP-UX-*.09.*|HP-UX-*.10.*) + SHLIB_SUFFIX=".sl" + AC_CHECK_LIB(dld, shl_load, tcl_ok=yes, tcl_ok=no) + if test "$tcl_ok" = yes; then + SHLIB_CFLAGS="+z" + SHLIB_LD="ld -b" + SHLIB_LD_LIBS="" + DL_OBJS="tclLoadShl.o" + DL_LIBS="-ldld" + LDFLAGS="$LDFLAGS -Wl,-E" + CC_SEARCH_FLAGS='-Wl,+s,+b,${LIB_RUNTIME_DIR}:.' + LD_SEARCH_FLAGS='+s +b ${LIB_RUNTIME_DIR}:.' + LD_LIBRARY_PATH_VAR="SHLIB_PATH" + fi + ;; + IRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a' + ;; + IRIX-5.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + ;; + IRIX-6.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -mabi=n32" + LDFLAGS="$LDFLAGS -mabi=n32" + else + case $system in + IRIX-6.3) + # Use to build 6.2 compatible binaries on 6.3. + CFLAGS="$CFLAGS -n32 -D_OLD_TERMIOS" + ;; + *) + CFLAGS="$CFLAGS -n32" + ;; + esac + LDFLAGS="$LDFLAGS -n32" + fi + ;; + IRIX64-6.*) + SHLIB_CFLAGS="" + SHLIB_LD="ld -n32 -shared -rdata_shared" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + + # Check to enable 64-bit flags for compiler/linker + + if test "$do64bit" = "yes" ; then + if test "$GCC" = "yes" ; then + AC_MSG_WARN([64bit mode not supported by gcc]) + else + do64bit_ok=yes + SHLIB_LD="ld -64 -shared -rdata_shared" + CFLAGS="$CFLAGS -64" + LDFLAGS="$LDFLAGS -64" + fi + fi + ;; + Linux*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + CFLAGS_OPTIMIZE=-O2 + # egcs-2.91.66 on Redhat Linux 6.0 generates lots of warnings + # when you inline the string and math operations. Turn this off to + # get rid of the warnings. + #CFLAGS_OPTIMIZE="${CFLAGS_OPTIMIZE} -D__NO_STRING_INLINES -D__NO_MATH_INLINES" + + if test "$have_dl" = yes; then + SHLIB_LD='${CC} -shared ${CFLAGS} ${LDFLAGS}' + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,--export-dynamic" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + else + AC_CHECK_HEADER(dld.h, [ + SHLIB_LD="ld -shared" + DL_OBJS="tclLoadDld.o" + DL_LIBS="-ldld" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS=""]) + fi + if test "`uname -m`" = "alpha" ; then + CFLAGS="$CFLAGS -mieee" + fi + if test $do64bit = yes; then + AC_CACHE_CHECK([if compiler accepts -m64 flag], tcl_cv_cc_m64, [ + hold_cflags=$CFLAGS + CFLAGS="$CFLAGS -m64" + AC_TRY_LINK(,, tcl_cv_cc_m64=yes, tcl_cv_cc_m64=no) + CFLAGS=$hold_cflags]) + if test $tcl_cv_cc_m64 = yes; then + CFLAGS="$CFLAGS -m64" + do64bit_ok=yes + fi + fi + + # The combo of gcc + glibc has a bug related + # to inlining of functions like strtod(). The + # -fno-builtin flag should address this problem + # but it does not work. The -fno-inline flag + # is kind of overkill but it works. + # Disable inlining only when one of the + # files in compat/*.c is being linked in. + if test x"${LIBOBJS}" != x ; then + CFLAGS="$CFLAGS -fno-inline" + fi + + # XIM peeking works under XFree86. + AC_DEFINE(PEEK_XCLOSEIM) + + ;; + GNU*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + + if test "$have_dl" = yes; then + SHLIB_LD="${CC} -shared" + DL_OBJS="" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,--export-dynamic" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + else + AC_CHECK_HEADER(dld.h, [ + SHLIB_LD="ld -shared" + DL_OBJS="" + DL_LIBS="-ldld" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS=""]) + fi + if test "`uname -m`" = "alpha" ; then + CFLAGS="$CFLAGS -mieee" + fi + ;; + Lynx*) + SHLIB_CFLAGS="-fPIC" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + CFLAGS_OPTIMIZE=-02 + SHLIB_LD="${CC} -shared " + DL_OBJS="tclLoadDl.o" + DL_LIBS="-mshared -ldl" + LD_FLAGS="-Wl,--export-dynamic" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + ;; + MP-RAS-02*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + MP-RAS-*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + LDFLAGS="$LDFLAGS -Wl,-Bexport" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + NetBSD-*|FreeBSD-[[1-2]].*) + # Not available on all versions: check for include file. + AC_CHECK_HEADER(dlfcn.h, [ + # NetBSD/SPARC needs -fPIC, -fpic will not do. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [ + AC_EGREP_CPP(yes, [ +#ifdef __ELF__ + yes +#endif + ], tcl_cv_ld_elf=yes, tcl_cv_ld_elf=no)]) + if test $tcl_cv_ld_elf = yes; then + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so' + else + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0' + fi + ], [ + SHLIB_CFLAGS="" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + ]) + + # FreeBSD doesn't handle version numbers with dots. + + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + OpenBSD-*) + case `arch -s` in + m88k|vax) + SHLIB_CFLAGS="" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + ;; + *) + # OpenBSD/SPARC[64] needs -fPIC, -fpic will not do. + case `machine` in + sparc|sparc64) + SHLIB_CFLAGS="-fPIC";; + *) + SHLIB_CFLAGS="-fpic";; + esac + SHLIB_LD="${CC} -shared ${SHLIB_CFLAGS}" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0' + AC_CACHE_CHECK([for ELF], tcl_cv_ld_elf, [ + AC_EGREP_CPP(yes, [ +#ifdef __ELF__ + yes +#endif + ], tcl_cv_ld_elf=yes, tcl_cv_ld_elf=no)]) + if test $tcl_cv_ld_elf = yes; then + LDFLAGS=-Wl,-export-dynamic + else + LDFLAGS="" + fi + ;; + esac + + # OpenBSD doesn't do version numbers with dots. + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + FreeBSD-*) + # FreeBSD 3.* and greater have ELF. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -export-dynamic" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + if test "${TCL_THREADS}" = "1" ; then + # The -pthread needs to go in the CFLAGS, not LIBS + LIBS=`echo $LIBS | sed s/-pthread//` + CFLAGS="$CFLAGS -pthread" + LDFLAGS="$LDFLAGS -pthread" + fi + case $system in + FreeBSD-3.*) + # FreeBSD-3 doesn't handle version numbers with dots. + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so' + TCL_LIB_VERSIONS_OK=nodots + ;; + esac + ;; + Darwin-*) + CFLAGS_OPTIMIZE="-Os" + SHLIB_CFLAGS="-fno-common" + # To avoid discrepancies between what headers configure sees during + # preprocessing tests and compiling tests, move any -isysroot and + # -mmacosx-version-min flags from CFLAGS to CPPFLAGS: + CPPFLAGS="${CPPFLAGS} `echo " ${CFLAGS}" | \ + awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ + if ([$]i~/^(isysroot|mmacosx-version-min)/) print "-"[$]i}'`" + CFLAGS="`echo " ${CFLAGS}" | \ + awk 'BEGIN {FS=" +-";ORS=" "}; {for (i=2;i<=NF;i++) \ + if (!([$]i~/^(isysroot|mmacosx-version-min)/)) print "-"[$]i}'`" + if test $do64bit = yes; then + case `arch` in + ppc) + AC_CACHE_CHECK([if compiler accepts -arch ppc64 flag], + tcl_cv_cc_arch_ppc64, [ + hold_cflags=$CFLAGS + CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" + AC_TRY_LINK(,, tcl_cv_cc_arch_ppc64=yes, + tcl_cv_cc_arch_ppc64=no) + CFLAGS=$hold_cflags]) + if test $tcl_cv_cc_arch_ppc64 = yes; then + CFLAGS="$CFLAGS -arch ppc64 -mpowerpc64 -mcpu=G5" + do64bit_ok=yes + fi;; + i386) + AC_CACHE_CHECK([if compiler accepts -arch x86_64 flag], + tcl_cv_cc_arch_x86_64, [ + hold_cflags=$CFLAGS + CFLAGS="$CFLAGS -arch x86_64" + AC_TRY_LINK(,, tcl_cv_cc_arch_x86_64=yes, + tcl_cv_cc_arch_x86_64=no) + CFLAGS=$hold_cflags]) + if test $tcl_cv_cc_arch_x86_64 = yes; then + CFLAGS="$CFLAGS -arch x86_64" + do64bit_ok=yes + fi;; + *) + AC_MSG_WARN([Don't know how enable 64-bit on architecture `arch`]);; + esac + else + # Check for combined 32-bit and 64-bit fat build + echo "$CFLAGS " | grep -E -q -- '-arch (ppc64|x86_64) ' && \ + echo "$CFLAGS " | grep -E -q -- '-arch (ppc|i386) ' && \ + fat_32_64=yes + fi + SHLIB_LD='${CC} -dynamiclib ${CFLAGS} ${LDFLAGS}' + AC_CACHE_CHECK([if ld accepts -single_module flag], tcl_cv_ld_single_module, [ + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -dynamiclib -Wl,-single_module" + AC_TRY_LINK(, [int i;], tcl_cv_ld_single_module=yes, tcl_cv_ld_single_module=no) + LDFLAGS=$hold_ldflags]) + if test $tcl_cv_ld_single_module = yes; then + SHLIB_LD="${SHLIB_LD} -Wl,-single_module" + fi + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".dylib" + DL_OBJS="tclLoadDyld.o" + DL_LIBS="" + # Don't use -prebind when building for Mac OS X 10.4 or later only: + test "`echo "${MACOSX_DEPLOYMENT_TARGET}" | awk -F '10\\.' '{print int([$]2)}'`" -lt 4 -a \ + "`echo "${CPPFLAGS}" | awk -F '-mmacosx-version-min=10\\.' '{print int([$]2)}'`" -lt 4 && \ + LDFLAGS="$LDFLAGS -prebind" + LDFLAGS="$LDFLAGS -headerpad_max_install_names" + AC_CACHE_CHECK([if ld accepts -search_paths_first flag], tcl_cv_ld_search_paths_first, [ + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + AC_TRY_LINK(, [int i;], tcl_cv_ld_search_paths_first=yes, tcl_cv_ld_search_paths_first=no) + LDFLAGS=$hold_ldflags]) + if test $tcl_cv_ld_search_paths_first = yes; then + LDFLAGS="$LDFLAGS -Wl,-search_paths_first" + fi + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + LD_LIBRARY_PATH_VAR="DYLD_LIBRARY_PATH" + PLAT_OBJS=\$\(MAC\_OSX_OBJS\) + PLAT_SRCS=\$\(MAC\_OSX_SRCS\) + AC_MSG_CHECKING([whether to use CoreFoundation]) + AC_ARG_ENABLE(corefoundation, [ --enable-corefoundation use CoreFoundation API [--enable-corefoundation]], + [tcl_corefoundation=$enableval], [tcl_corefoundation=yes]) + AC_MSG_RESULT([$tcl_corefoundation]) + if test $tcl_corefoundation = yes; then + AC_CACHE_CHECK([for CoreFoundation.framework], tcl_cv_lib_corefoundation, [ + hold_libs=$LIBS + if test "$fat_32_64" = yes; then for v in CFLAGS CPPFLAGS LDFLAGS; do + # On Tiger there is no 64-bit CF, so remove 64-bit archs + # from CFLAGS et al. while testing for presence of CF. + # 64-bit CF is disabled in tclUnixPort.h if necessary. + eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc64 / /g" -e "s/-arch x86_64 / /g"`"' + done; fi + LIBS="$LIBS -framework CoreFoundation" + AC_TRY_LINK([#include ], + [CFBundleRef b = CFBundleGetMainBundle();], + tcl_cv_lib_corefoundation=yes, tcl_cv_lib_corefoundation=no) + if test "$fat_32_64" = yes; then for v in CFLAGS CPPFLAGS LDFLAGS; do + eval $v'="$hold_'$v'"' + done; fi; LIBS=$hold_libs]) + if test $tcl_cv_lib_corefoundation = yes; then + LIBS="$LIBS -framework CoreFoundation" + AC_DEFINE(HAVE_COREFOUNDATION) + else + tcl_corefoundation=no + fi + if test "$fat_32_64" = yes -a $tcl_corefoundation = yes; then + AC_CACHE_CHECK([for 64-bit CoreFoundation], tcl_cv_lib_corefoundation_64, [ + for v in CFLAGS CPPFLAGS LDFLAGS; do + eval 'hold_'$v'="$'$v'";'$v'="`echo "$'$v' "|sed -e "s/-arch ppc / /g" -e "s/-arch i386 / /g"`"' + done + AC_TRY_LINK([#include ], + [CFBundleRef b = CFBundleGetMainBundle();], + tcl_cv_lib_corefoundation_64=yes, tcl_cv_lib_corefoundation_64=no) + for v in CFLAGS CPPFLAGS LDFLAGS; do + eval $v'="$hold_'$v'"' + done]) + if test $tcl_cv_lib_corefoundation_64 = no; then + AC_DEFINE(NO_COREFOUNDATION_64) + fi + fi + fi + AC_DEFINE(MAC_OSX_TCL) + ;; + NEXTSTEP-*) + SHLIB_CFLAGS="" + SHLIB_LD="cc -nostdlib -r" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadNext.o" + DL_LIBS="" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + OS/390-*) + CFLAGS_OPTIMIZE="" # Optimizer is buggy + AC_DEFINE(_OE_SOCKETS) # needed in sys/socket.h + ;; + OSF1-1.0|OSF1-1.1|OSF1-1.2) + # OSF/1 1.[012] from OSF, and derivatives, including Paragon OSF/1 + SHLIB_CFLAGS="" + # Hack: make package name same as library name + SHLIB_LD='ld -R -export $@:' + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadOSF.o" + DL_LIBS="" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-1.*) + # OSF/1 1.3 from OSF using ELF, and derivatives, including AD2 + SHLIB_CFLAGS="-fPIC" + if test "$SHARED_BUILD" = "1" ; then + SHLIB_LD="ld -shared" + else + SHLIB_LD="ld -non_shared" + fi + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + OSF1-V*) + # Digital OSF/1 + SHLIB_CFLAGS="" + if test "$SHARED_BUILD" = "1" ; then + SHLIB_LD='ld -shared -expect_unresolved "*"' + else + SHLIB_LD='ld -non_shared -expect_unresolved "*"' + fi + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS='-Wl,-rpath,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-rpath ${LIB_RUNTIME_DIR}' + if test "$GCC" = "yes" ; then + CFLAGS="$CFLAGS -mieee" + else + CFLAGS="$CFLAGS -DHAVE_TZSET -std1 -ieee" + fi + # see pthread_intro(3) for pthread support on osf1, k.furukawa + if test "${TCL_THREADS}" = "1" ; then + CFLAGS="$CFLAGS -DHAVE_PTHREAD_ATTR_SETSTACKSIZE" + CFLAGS="$CFLAGS -DTCL_THREAD_STACK_MIN=PTHREAD_STACK_MIN*64" + LIBS=`echo $LIBS | sed s/-lpthreads//` + if test "$GCC" = "yes" ; then + LIBS="$LIBS -lpthread -lmach -lexc" + else + CFLAGS="$CFLAGS -pthread" + LDFLAGS="$LDFLAGS -pthread" + fi + fi + + ;; + QNX-6*) + # QNX RTP + # This may work for all QNX, but it was only reported for v6. + SHLIB_CFLAGS="-fPIC" + SHLIB_LD="ld -Bshareable -x" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + # dlopen is in -lc on QNX + DL_LIBS="" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + RISCos-*) + SHLIB_CFLAGS="-G 0" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".a" + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + ;; + SCO_SV-3.2*) + # Note, dlopen is available only on SCO 3.2.5 and greater. However, + # this test works, since "uname -s" was non-standard in 3.2.4 and + # below. + if test "$GCC" = "yes" ; then + SHLIB_CFLAGS="-fPIC -melf" + LDFLAGS="$LDFLAGS -melf -Wl,-Bexport" + else + SHLIB_CFLAGS="-Kpic -belf" + LDFLAGS="$LDFLAGS -belf -Wl,-Bexport" + fi + SHLIB_LD="ld -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + SINIX*5.4*) + SHLIB_CFLAGS="-K PIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + SunOS-4*) + SHLIB_CFLAGS="-PIC" + SHLIB_LD="ld" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + + # SunOS can't handle version numbers with dots in them in library + # specs, like -ltcl7.5, so use -ltcl75 instead. Also, it + # requires an extra version number at the end of .so file names. + # So, the library has to have a name like libtcl75.so.1.0 + + SHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.so.1.0' + UNSHARED_LIB_SUFFIX='${TCL_TRIM_DOTS}\$\{DBGX\}.a' + TCL_LIB_VERSIONS_OK=nodots + ;; + SunOS-5.[[0-6]]) + # Careful to not let 5.10+ fall into this case + + # Note: If _REENTRANT isn't defined, then Solaris + # won't define thread-safe library routines. + + AC_DEFINE(_REENTRANT) + AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) + + SHLIB_CFLAGS="-KPIC" + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$GCC" = "yes" ; then + SHLIB_LD="$CC -shared" + CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + else + SHLIB_LD="/usr/ccs/bin/ld -G -z text" + CC_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + fi + ;; + SunOS-5*) + # Note: If _REENTRANT isn't defined, then Solaris + # won't define thread-safe library routines. + + AC_DEFINE(_REENTRANT) + AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) + + SHLIB_CFLAGS="-KPIC" + + # Check to enable 64-bit flags for compiler/linker + if test "$do64bit" = "yes" ; then + arch=`isainfo` + if test "$arch" = "sparcv9 sparc" ; then + if test "$GCC" = "yes" ; then + if test "`gcc -dumpversion | awk -F. '{print [$]1}'`" -lt "3" ; then + AC_MSG_WARN([64bit mode not supported with GCC < 3.2 on $system]) + else + do64bit_ok=yes + CFLAGS="$CFLAGS -m64 -mcpu=v9" + LDFLAGS="$LDFLAGS -m64 -mcpu=v9" + SHLIB_CFLAGS="-fPIC" + fi + else + do64bit_ok=yes + if test "$do64bitVIS" = "yes" ; then + CFLAGS="$CFLAGS -xarch=v9a" + LDFLAGS="$LDFLAGS -xarch=v9a" + else + CFLAGS="$CFLAGS -xarch=v9" + LDFLAGS="$LDFLAGS -xarch=v9" + fi + # Solaris 64 uses this as well + #LD_LIBRARY_PATH_VAR="LD_LIBRARY_PATH_64" + fi + elif test "$arch" = "amd64 i386" ; then + if test "$GCC" = "yes" ; then + AC_MSG_WARN([64bit mode not supported with GCC on $system]) + else + do64bit_ok=yes + CFLAGS="$CFLAGS -xarch=amd64" + LDFLAGS="$LDFLAGS -xarch=amd64" + fi + else + AC_MSG_WARN([64bit mode not supported for $arch]) + fi + fi + + # Note: need the LIBS below, otherwise Tk won't find Tcl's + # symbols when dynamically loaded into tclsh. + + SHLIB_LD_LIBS='${LIBS}' + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + if test "$GCC" = "yes" ; then + SHLIB_LD="$CC -shared" + CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + if test "$do64bit_ok" = "yes" ; then + # We need to specify -static-libgcc or we need to + # add the path to the sparv9 libgcc. + SHLIB_LD="$SHLIB_LD -m64 -mcpu=v9 -static-libgcc" + # for finding sparcv9 libgcc, get the regular libgcc + # path, remove so name and append 'sparcv9' + #v9gcclibdir="`gcc -print-file-name=libgcc_s.so` | ..." + #CC_SEARCH_FLAGS="${CC_SEARCH_FLAGS},-R,$v9gcclibdir" + fi + else + case $system in + SunOS-5.[[1-9]][[0-9]]*) + SHLIB_LD='${CC} -G -z text';; + *) + SHLIB_LD="/usr/ccs/bin/ld -G -z text";; + esac + CC_SEARCH_FLAGS='-Wl,-R,${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS='-R ${LIB_RUNTIME_DIR}' + fi + ;; + ULTRIX-4.*) + SHLIB_CFLAGS="-G 0" + SHLIB_SUFFIX=".a" + SHLIB_LD="echo tclLdAout $CC \{$SHLIB_CFLAGS\} | `pwd`/tclsh -r -G 0" + SHLIB_LD_LIBS='${LIBS}' + DL_OBJS="tclLoadAout.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS -Wl,-D,08000000" + CC_SEARCH_FLAGS='-L${LIB_RUNTIME_DIR}' + LD_SEARCH_FLAGS=${CC_SEARCH_FLAGS} + if test "$GCC" != "yes" ; then + CFLAGS="$CFLAGS -DHAVE_TZSET -std1" + fi + ;; + UNIX_SV* | UnixWare-5*) + SHLIB_CFLAGS="-KPIC" + SHLIB_LD="cc -G" + SHLIB_LD_LIBS="" + SHLIB_SUFFIX=".so" + DL_OBJS="tclLoadDl.o" + DL_LIBS="-ldl" + # Some UNIX_SV* systems (unixware 1.1.2 for example) have linkers + # that don't grok the -Bexport option. Test that it does. + AC_CACHE_CHECK([for ld accepts -Bexport flag], tcl_cv_ld_Bexport, [ + hold_ldflags=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-Bexport" + AC_TRY_LINK(, [int i;], tcl_cv_ld_Bexport=yes, tcl_cv_ld_Bexport=no) + LDFLAGS=$hold_ldflags]) + if test $tcl_cv_ld_Bexport = yes; then + LDFLAGS="$LDFLAGS -Wl,-Bexport" + fi + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + ;; + esac + + if test "$do64bit" = "yes" -a "$do64bit_ok" = "no" ; then + AC_MSG_WARN([64bit support being disabled -- don't know magic for this platform]) + fi + +dnl # Add any CPPFLAGS set in the environment to our CFLAGS, but delay doing so +dnl # until the end of configure, as configure's compile and link tests use +dnl # both CPPFLAGS and CFLAGS (unlike our compile and link) but configure's +dnl # preprocessing tests use only CPPFLAGS. + SC_CONFIG_COMMANDS_PRE([CFLAGS="${CFLAGS} ${CPPFLAGS}"; CPPFLAGS=""]) + + # Step 4: If pseudo-static linking is in use (see K. B. Kenny, "Dynamic + # Loading for Tcl -- What Became of It?". Proc. 2nd Tcl/Tk Workshop, + # New Orleans, LA, Computerized Processes Unlimited, 1994), then we need + # to determine which of several header files defines the a.out file + # format (a.out.h, sys/exec.h, or sys/exec_aout.h). At present, we + # support only a file format that is more or less version-7-compatible. + # In particular, + # - a.out files must begin with `struct exec'. + # - the N_TXTOFF on the `struct exec' must compute the seek address + # of the text segment + # - The `struct exec' must contain a_magic, a_text, a_data, a_bss + # and a_entry fields. + # The following compilation should succeed if and only if either sys/exec.h + # or a.out.h is usable for the purpose. + # + # Note that the modified COFF format used on MIPS Ultrix 4.x is usable; the + # `struct exec' includes a second header that contains information that + # duplicates the v7 fields that are needed. + + if test "x$DL_OBJS" = "xtclLoadAout.o" ; then + AC_CACHE_CHECK([sys/exec.h], tcl_cv_sysexec_h, [ + AC_TRY_COMPILE([#include ],[ + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + ], tcl_cv_sysexec_h=usable, tcl_cv_sysexec_h=unusable)]) + if test $tcl_cv_sysexec_h = usable; then + AC_DEFINE(USE_SYS_EXEC_H) + else + AC_CACHE_CHECK([a.out.h], tcl_cv_aout_h, [ + AC_TRY_COMPILE([#include ],[ + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_magic == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + ], tcl_cv_aout_h=usable, tcl_cv_aout_h=unusable)]) + if test $tcl_cv_aout_h = usable; then + AC_DEFINE(USE_A_OUT_H) + else + AC_CACHE_CHECK([sys/exec_aout.h], tcl_cv_sysexecaout_h, [ + AC_TRY_COMPILE([#include ],[ + struct exec foo; + unsigned long seek; + int flag; +#if defined(__mips) || defined(mips) + seek = N_TXTOFF (foo.ex_f, foo.ex_o); +#else + seek = N_TXTOFF (foo); +#endif + flag = (foo.a_midmag == OMAGIC); + return foo.a_text + foo.a_data + foo.a_bss + foo.a_entry; + ], tcl_cv_sysexecaout_h=usable, tcl_cv_sysexecaout_h=unusable)]) + if test $tcl_cv_sysexecaout_h = usable; then + AC_DEFINE(USE_SYS_EXEC_AOUT_H) + else + DL_OBJS="" + fi + fi + fi + fi + + # Step 5: disable dynamic loading if requested via a command-line switch. + + AC_ARG_ENABLE(load, [ --disable-load disallow dynamic loading and "load" command], + [tcl_ok=$enableval], [tcl_ok=yes]) + if test "$tcl_ok" = "no"; then + DL_OBJS="" + fi + + if test "x$DL_OBJS" != "x" ; then + BUILD_DLTEST="\$(DLTEST_TARGETS)" + else + echo "Can't figure out how to do dynamic loading or shared libraries" + echo "on this system." + SHLIB_CFLAGS="" + SHLIB_LD="" + SHLIB_SUFFIX="" + DL_OBJS="tclLoadNone.o" + DL_LIBS="" + LDFLAGS="$LDFLAGS_ORIG" + CC_SEARCH_FLAGS="" + LD_SEARCH_FLAGS="" + BUILD_DLTEST="" + fi + + # If we're running gcc, then change the C flags for compiling shared + # libraries to the right flags for gcc, instead of those for the + # standard manufacturer compiler. + + if test "$DL_OBJS" != "tclLoadNone.o" ; then + if test "$GCC" = "yes" ; then + case $system in + AIX-*) + ;; + BSD/OS*) + ;; + IRIX*) + ;; + NetBSD-*|FreeBSD-*|OpenBSD-*) + ;; + Darwin-*) + ;; + RISCos-*) + ;; + SCO_SV-3.2*) + ;; + ULTRIX-4.*) + ;; + *) + SHLIB_CFLAGS="-fPIC" + ;; + esac + fi + fi + + if test "$SHARED_LIB_SUFFIX" = "" ; then + SHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}${SHLIB_SUFFIX}' + fi + if test "$UNSHARED_LIB_SUFFIX" = "" ; then + UNSHARED_LIB_SUFFIX='${VERSION}\$\{DBGX\}.a' + fi + + if test "${SHARED_BUILD}" = "1" && test "${SHLIB_SUFFIX}" != "" ; then + LIB_SUFFIX=${SHARED_LIB_SUFFIX} + MAKE_LIB='${SHLIB_LD} -o [$]@ ${OBJS} ${SHLIB_LD_LIBS} ${TCL_SHLIB_LD_EXTRAS} ${TK_SHLIB_LD_EXTRAS} ${LD_SEARCH_FLAGS}' + INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE)' + else + LIB_SUFFIX=${UNSHARED_LIB_SUFFIX} + + if test "$RANLIB" = "" ; then + MAKE_LIB='$(STLIB_LD) [$]@ ${OBJS}' + INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE)' + else + MAKE_LIB='${STLIB_LD} [$]@ ${OBJS} ; ${RANLIB} [$]@' + INSTALL_LIB='$(INSTALL_LIBRARY) $(LIB_FILE) $(LIB_INSTALL_DIR)/$(LIB_FILE) ; (cd $(LIB_INSTALL_DIR) ; $(RANLIB) $(LIB_FILE))' + fi + +dnl Not at all clear what this was doing in Tcl's configure.in +dnl or why it was needed was needed. In any event, this sort of +dnl things needs to be done in the big loop above. +dnl REMOVE THIS BLOCK LATER! (mdejong) +dnl case $system in +dnl BSD/OS*) +dnl ;; +dnl AIX-[[1-4]].*) +dnl ;; +dnl *) +dnl SHLIB_LD_LIBS="" +dnl ;; +dnl esac + fi + + + # Stub lib does not depend on shared/static configuration + if test "$RANLIB" = "" ; then + MAKE_STUB_LIB='${STLIB_LD} [$]@ ${STUB_LIB_OBJS}' + INSTALL_STUB_LIB='$(INSTALL_LIBRARY) $(STUB_LIB_FILE) $(LIB_INSTALL_DIR)/$(STUB_LIB_FILE)' + else + MAKE_STUB_LIB='${STLIB_LD} [$]@ ${STUB_LIB_OBJS} ; ${RANLIB} [$]@' + INSTALL_STUB_LIB='$(INSTALL_LIBRARY) $(STUB_LIB_FILE) $(LIB_INSTALL_DIR)/$(STUB_LIB_FILE) ; (cd $(LIB_INSTALL_DIR) ; $(RANLIB) $(STUB_LIB_FILE))' + fi + + + AC_SUBST(DL_LIBS) + + AC_SUBST(DL_OBJS) + AC_SUBST(PLAT_OBJS) + AC_SUBST(PLAT_SRCS) + AC_SUBST(CFLAGS) + AC_SUBST(CFLAGS_DEBUG) + AC_SUBST(CFLAGS_OPTIMIZE) + AC_SUBST(CFLAGS_WARNING) + + AC_SUBST(LDFLAGS) + AC_SUBST(LDFLAGS_DEBUG) + AC_SUBST(LDFLAGS_OPTIMIZE) + AC_SUBST(CC_SEARCH_FLAGS) + AC_SUBST(LD_SEARCH_FLAGS) + + AC_SUBST(STLIB_LD) + AC_SUBST(SHLIB_LD) + AC_SUBST(TCL_SHLIB_LD_EXTRAS) + AC_SUBST(TK_SHLIB_LD_EXTRAS) + AC_SUBST(SHLIB_LD_LIBS) + AC_SUBST(SHLIB_CFLAGS) + AC_SUBST(SHLIB_SUFFIX) + + AC_SUBST(MAKE_LIB) + AC_SUBST(MAKE_STUB_LIB) + AC_SUBST(INSTALL_LIB) + AC_SUBST(INSTALL_STUB_LIB) + AC_SUBST(RANLIB) +]) + +#-------------------------------------------------------------------- +# SC_SERIAL_PORT +# +# Determine which interface to use to talk to the serial port. +# Note that #include lines must begin in leftmost column for +# some compilers to recognize them as preprocessor directives, +# and some build environments have stdin not pointing at a +# pseudo-terminal (usually /dev/null instead.) +# +# Arguments: +# none +# +# Results: +# +# Defines only one of the following vars: +# HAVE_SYS_MODEM_H +# USE_TERMIOS +# USE_TERMIO +# USE_SGTTY +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_SERIAL_PORT], [ + AC_CHECK_HEADERS(sys/modem.h) + AC_CACHE_CHECK([termios vs. termio vs. sgtty], tcl_cv_api_serial, [ + AC_TRY_RUN([ +#include + +int main() { + struct termios t; + if (tcgetattr(0, &t) == 0) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + if test $tcl_cv_api_serial = no ; then + AC_TRY_RUN([ +#include + +int main() { + struct termio t; + if (ioctl(0, TCGETA, &t) == 0) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no ; then + AC_TRY_RUN([ +#include + +int main() { + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no ; then + AC_TRY_RUN([ +#include +#include + +int main() { + struct termios t; + if (tcgetattr(0, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + cfsetospeed(&t, 0); + t.c_cflag |= PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; +}], tcl_cv_api_serial=termios, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no; then + AC_TRY_RUN([ +#include +#include + +int main() { + struct termio t; + if (ioctl(0, TCGETA, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.c_cflag |= CBAUD | PARENB | PARODD | CSIZE | CSTOPB; + return 0; + } + return 1; + }], tcl_cv_api_serial=termio, tcl_cv_api_serial=no, tcl_cv_api_serial=no) + fi + if test $tcl_cv_api_serial = no; then + AC_TRY_RUN([ +#include +#include + +int main() { + struct sgttyb t; + if (ioctl(0, TIOCGETP, &t) == 0 + || errno == ENOTTY || errno == ENXIO || errno == EINVAL) { + t.sg_ospeed = 0; + t.sg_flags |= ODDP | EVENP | RAW; + return 0; + } + return 1; +}], tcl_cv_api_serial=sgtty, tcl_cv_api_serial=none, tcl_cv_api_serial=none) + fi]) + case $tcl_cv_api_serial in + termios) AC_DEFINE(USE_TERMIOS);; + termio) AC_DEFINE(USE_TERMIO);; + sgtty) AC_DEFINE(USE_SGTTY);; + esac +]) + +#-------------------------------------------------------------------- +# SC_MISSING_POSIX_HEADERS +# +# Supply substitutes for missing POSIX header files. Special +# notes: +# - stdlib.h doesn't define strtol, strtoul, or +# strtod insome versions of SunOS +# - some versions of string.h don't declare procedures such +# as strstr +# +# Arguments: +# none +# +# Results: +# +# Defines some of the following vars: +# NO_DIRENT_H +# NO_ERRNO_H +# NO_VALUES_H +# HAVE_LIMITS_H or NO_LIMITS_H +# NO_STDLIB_H +# NO_STRING_H +# NO_SYS_WAIT_H +# NO_DLFCN_H +# HAVE_UNISTD_H +# HAVE_SYS_PARAM_H +# +# HAVE_STRING_H ? +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_MISSING_POSIX_HEADERS], [ + AC_CACHE_CHECK([dirent.h], tcl_cv_dirent_h, [ + AC_TRY_LINK([#include +#include ], [ +#ifndef _POSIX_SOURCE +# ifdef __Lynx__ + /* + * Generate compilation error to make the test fail: Lynx headers + * are only valid if really in the POSIX environment. + */ + + missing_procedure(); +# endif +#endif +DIR *d; +struct dirent *entryPtr; +char *p; +d = opendir("foobar"); +entryPtr = readdir(d); +p = entryPtr->d_name; +closedir(d); +], tcl_cv_dirent_h=yes, tcl_cv_dirent_h=no)]) + + if test $tcl_cv_dirent_h = no; then + AC_DEFINE(NO_DIRENT_H) + fi + + AC_CHECK_HEADER(errno.h, , [AC_DEFINE(NO_ERRNO_H)]) + AC_CHECK_HEADER(float.h, , [AC_DEFINE(NO_FLOAT_H)]) + AC_CHECK_HEADER(values.h, , [AC_DEFINE(NO_VALUES_H)]) + AC_CHECK_HEADER(limits.h, + [AC_DEFINE(HAVE_LIMITS_H)], [AC_DEFINE(NO_LIMITS_H)]) + AC_CHECK_HEADER(stdlib.h, tcl_ok=1, tcl_ok=0) + AC_EGREP_HEADER(strtol, stdlib.h, , tcl_ok=0) + AC_EGREP_HEADER(strtoul, stdlib.h, , tcl_ok=0) + AC_EGREP_HEADER(strtod, stdlib.h, , tcl_ok=0) + if test $tcl_ok = 0; then + AC_DEFINE(NO_STDLIB_H) + fi + AC_CHECK_HEADER(string.h, tcl_ok=1, tcl_ok=0) + AC_EGREP_HEADER(strstr, string.h, , tcl_ok=0) + AC_EGREP_HEADER(strerror, string.h, , tcl_ok=0) + + # See also memmove check below for a place where NO_STRING_H can be + # set and why. + + if test $tcl_ok = 0; then + AC_DEFINE(NO_STRING_H) + fi + + AC_CHECK_HEADER(sys/wait.h, , [AC_DEFINE(NO_SYS_WAIT_H)]) + AC_CHECK_HEADER(dlfcn.h, , [AC_DEFINE(NO_DLFCN_H)]) + + # OS/390 lacks sys/param.h (and doesn't need it, by chance). + AC_HAVE_HEADERS(unistd.h sys/param.h) +]) + +#-------------------------------------------------------------------- +# SC_PATH_X +# +# Locate the X11 header files and the X11 library archive. Try +# the ac_path_x macro first, but if it doesn't find the X stuff +# (e.g. because there's no xmkmf program) then check through +# a list of possible directories. Under some conditions the +# autoconf macro will return an include directory that contains +# no include files, so double-check its result just to be safe. +# +# Arguments: +# none +# +# Results: +# +# Sets the the following vars: +# XINCLUDES +# XLIBSW +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_PATH_X], [ + AC_PATH_X + not_really_there="" + if test "$no_x" = ""; then + if test "$x_includes" = ""; then + AC_TRY_CPP([#include ], , not_really_there="yes") + else + if test ! -r $x_includes/X11/Intrinsic.h; then + not_really_there="yes" + fi + fi + fi + if test "$no_x" = "yes" -o "$not_really_there" = "yes"; then + AC_MSG_CHECKING([for X11 header files]) + found_xincludes="no" + AC_TRY_CPP([#include ], found_xincludes="yes", found_xincludes="no") + if test "$found_xincludes" = "no"; then + dirs="/usr/unsupported/include /usr/local/include /usr/X386/include /usr/X11R6/include /usr/X11R5/include /usr/include/X11R5 /usr/include/X11R4 /usr/openwin/include /usr/X11/include /usr/sww/include" + for i in $dirs ; do + if test -r $i/X11/Intrinsic.h; then + AC_MSG_RESULT([$i]) + XINCLUDES=" -I$i" + found_xincludes="yes" + break + fi + done + fi + else + if test "$x_includes" != ""; then + XINCLUDES="-I$x_includes" + found_xincludes="yes" + fi + fi + if test found_xincludes = "no"; then + AC_MSG_RESULT([couldn't find any!]) + fi + + if test "$no_x" = yes; then + AC_MSG_CHECKING([for X11 libraries]) + XLIBSW=nope + dirs="/usr/unsupported/lib /usr/local/lib /usr/X386/lib /usr/X11R6/lib /usr/X11R5/lib /usr/lib/X11R5 /usr/lib/X11R4 /usr/openwin/lib /usr/X11/lib /usr/sww/X11/lib" + for i in $dirs ; do + if test -r $i/libX11.a -o -r $i/libX11.so -o -r $i/libX11.sl; then + AC_MSG_RESULT([$i]) + XLIBSW="-L$i -lX11" + x_libraries="$i" + break + fi + done + else + if test "$x_libraries" = ""; then + XLIBSW=-lX11 + else + XLIBSW="-L$x_libraries -lX11" + fi + fi + if test "$XLIBSW" = nope ; then + AC_CHECK_LIB(Xwindow, XCreateWindow, XLIBSW=-lXwindow) + fi + if test "$XLIBSW" = nope ; then + AC_MSG_RESULT([could not find any! Using -lX11.]) + XLIBSW=-lX11 + fi +]) + +#-------------------------------------------------------------------- +# SC_BLOCKING_STYLE +# +# The statements below check for systems where POSIX-style +# non-blocking I/O (O_NONBLOCK) doesn't work or is unimplemented. +# On these systems (mostly older ones), use the old BSD-style +# FIONBIO approach instead. +# +# Arguments: +# none +# +# Results: +# +# Defines some of the following vars: +# HAVE_SYS_IOCTL_H +# HAVE_SYS_FILIO_H +# USE_FIONBIO +# O_NONBLOCK +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_BLOCKING_STYLE], [ + AC_CHECK_HEADERS(sys/ioctl.h) + AC_CHECK_HEADERS(sys/filio.h) + SC_CONFIG_SYSTEM + AC_MSG_CHECKING([FIONBIO vs. O_NONBLOCK for nonblocking I/O]) + case $system in + # There used to be code here to use FIONBIO under AIX. However, it + # was reported that FIONBIO doesn't work under AIX 3.2.5. Since + # using O_NONBLOCK seems fine under AIX 4.*, I removed the FIONBIO + # code (JO, 5/31/97). + + OSF*) + AC_DEFINE(USE_FIONBIO) + AC_MSG_RESULT([FIONBIO]) + ;; + SunOS-4*) + AC_DEFINE(USE_FIONBIO) + AC_MSG_RESULT([FIONBIO]) + ;; + ULTRIX-4.*) + AC_DEFINE(USE_FIONBIO) + AC_MSG_RESULT([FIONBIO]) + ;; + *) + AC_MSG_RESULT([O_NONBLOCK]) + ;; + esac +]) + +#-------------------------------------------------------------------- +# SC_TIME_HANLDER +# +# Checks how the system deals with time.h, what time structures +# are used on the system, and what fields the structures have. +# +# Arguments: +# none +# +# Results: +# +# Defines some of the following vars: +# USE_DELTA_FOR_TZ +# HAVE_TM_GMTOFF +# HAVE_TM_TZADJ +# HAVE_TIMEZONE_VAR +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TIME_HANDLER], [ + AC_CHECK_HEADERS(sys/time.h) + AC_HEADER_TIME + AC_STRUCT_TIMEZONE + + AC_CHECK_FUNCS(gmtime_r localtime_r) + + AC_CACHE_CHECK([tm_tzadj in struct tm], tcl_cv_member_tm_tzadj, [ + AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_tzadj;], + tcl_cv_member_tm_tzadj=yes, tcl_cv_member_tm_tzadj=no)]) + if test $tcl_cv_member_tm_tzadj = yes ; then + AC_DEFINE(HAVE_TM_TZADJ) + fi + + AC_CACHE_CHECK([tm_gmtoff in struct tm], tcl_cv_member_tm_gmtoff, [ + AC_TRY_COMPILE([#include ], [struct tm tm; tm.tm_gmtoff;], + tcl_cv_member_tm_gmtoff=yes, tcl_cv_member_tm_gmtoff=no)]) + if test $tcl_cv_member_tm_gmtoff = yes ; then + AC_DEFINE(HAVE_TM_GMTOFF) + fi + + # + # Its important to include time.h in this check, as some systems + # (like convex) have timezone functions, etc. + # + AC_CACHE_CHECK([long timezone variable], tcl_cv_timezone_long, [ + AC_TRY_COMPILE([#include ], + [extern long timezone; + timezone += 1; + exit (0);], + tcl_cv_timezone_long=yes, tcl_cv_timezone_long=no)]) + if test $tcl_cv_timezone_long = yes ; then + AC_DEFINE(HAVE_TIMEZONE_VAR) + else + # + # On some systems (eg IRIX 6.2), timezone is a time_t and not a long. + # + AC_CACHE_CHECK([time_t timezone variable], tcl_cv_timezone_time, [ + AC_TRY_COMPILE([#include ], + [extern time_t timezone; + timezone += 1; + exit (0);], + tcl_cv_timezone_time=yes, tcl_cv_timezone_time=no)]) + if test $tcl_cv_timezone_time = yes ; then + AC_DEFINE(HAVE_TIMEZONE_VAR) + fi + fi +]) + +#-------------------------------------------------------------------- +# SC_BUGGY_STRTOD +# +# Under Solaris 2.4, strtod returns the wrong value for the +# terminating character under some conditions. Check for this +# and if the problem exists use a substitute procedure +# "fixstrtod" (provided by Tcl) that corrects the error. +# Also, on Compaq's Tru64 Unix 5.0, +# strtod(" ") returns 0.0 instead of a failure to convert. +# +# Arguments: +# none +# +# Results: +# +# Might defines some of the following vars: +# strtod (=fixstrtod) +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_BUGGY_STRTOD], [ + AC_CHECK_FUNC(strtod, tcl_strtod=1, tcl_strtod=0) + if test "$tcl_strtod" = 1; then + AC_CACHE_CHECK([for Solaris2.4/Tru64 strtod bugs], tcl_cv_strtod_buggy,[ + AC_TRY_RUN([ + extern double strtod(); + int main() { + char *infString="Inf", *nanString="NaN", *spaceString=" "; + char *term; + double value; + value = strtod(infString, &term); + if ((term != infString) && (term[-1] == 0)) { + exit(1); + } + value = strtod(nanString, &term); + if ((term != nanString) && (term[-1] == 0)) { + exit(1); + } + value = strtod(spaceString, &term); + if (term == (spaceString+1)) { + exit(1); + } + exit(0); + }], tcl_cv_strtod_buggy=ok, tcl_cv_strtod_buggy=buggy, + tcl_cv_strtod_buggy=buggy)]) + if test "$tcl_cv_strtod_buggy" = buggy; then + LIBOBJS="$LIBOBJS fixstrtod.o" + AC_DEFINE(strtod, fixstrtod) + fi + fi +]) + +#-------------------------------------------------------------------- +# SC_TCL_LINK_LIBS +# +# Search for the libraries needed to link the Tcl shell. +# Things like the math library (-lm) and socket stuff (-lsocket vs. +# -lnsl) are dealt with here. +# +# Arguments: +# Requires the following vars to be set in the Makefile: +# DL_LIBS +# LIBS +# MATH_LIBS +# +# Results: +# +# Subst's the following var: +# TCL_LIBS +# MATH_LIBS +# +# Might append to the following vars: +# LIBS +# +# Might define the following vars: +# HAVE_NET_ERRNO_H +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_LINK_LIBS], [ + #-------------------------------------------------------------------- + # On a few very rare systems, all of the libm.a stuff is + # already in libc.a. Set compiler flags accordingly. + # Also, Linux requires the "ieee" library for math to work + # right (and it must appear before "-lm"). + #-------------------------------------------------------------------- + + AC_CHECK_FUNC(sin, MATH_LIBS="", MATH_LIBS="-lm") + AC_CHECK_LIB(ieee, main, [MATH_LIBS="-lieee $MATH_LIBS"]) + + #-------------------------------------------------------------------- + # Interactive UNIX requires -linet instead of -lsocket, plus it + # needs net/errno.h to define the socket-related error codes. + #-------------------------------------------------------------------- + + AC_CHECK_LIB(inet, main, [LIBS="$LIBS -linet"]) + AC_CHECK_HEADER(net/errno.h, [AC_DEFINE(HAVE_NET_ERRNO_H)]) + + #-------------------------------------------------------------------- + # Check for the existence of the -lsocket and -lnsl libraries. + # The order here is important, so that they end up in the right + # order in the command line generated by make. Here are some + # special considerations: + # 1. Use "connect" and "accept" to check for -lsocket, and + # "gethostbyname" to check for -lnsl. + # 2. Use each function name only once: can't redo a check because + # autoconf caches the results of the last check and won't redo it. + # 3. Use -lnsl and -lsocket only if they supply procedures that + # aren't already present in the normal libraries. This is because + # IRIX 5.2 has libraries, but they aren't needed and they're + # bogus: they goof up name resolution if used. + # 4. On some SVR4 systems, can't use -lsocket without -lnsl too. + # To get around this problem, check for both libraries together + # if -lsocket doesn't work by itself. + #-------------------------------------------------------------------- + + tcl_checkBoth=0 + AC_CHECK_FUNC(connect, tcl_checkSocket=0, tcl_checkSocket=1) + if test "$tcl_checkSocket" = 1; then + AC_CHECK_FUNC(setsockopt, , [AC_CHECK_LIB(socket, setsockopt, + LIBS="$LIBS -lsocket", tcl_checkBoth=1)]) + fi + if test "$tcl_checkBoth" = 1; then + tk_oldLibs=$LIBS + LIBS="$LIBS -lsocket -lnsl" + AC_CHECK_FUNC(accept, tcl_checkNsl=0, [LIBS=$tk_oldLibs]) + fi + AC_CHECK_FUNC(gethostbyname, , [AC_CHECK_LIB(nsl, gethostbyname, + [LIBS="$LIBS -lnsl"])]) + + # Don't perform the eval of the libraries here because DL_LIBS + # won't be set until we call SC_CONFIG_CFLAGS + + TCL_LIBS='${DL_LIBS} ${LIBS} ${MATH_LIBS}' + AC_SUBST(TCL_LIBS) + AC_SUBST(MATH_LIBS) +]) + +#-------------------------------------------------------------------- +# SC_TCL_EARLY_FLAGS +# +# Check for what flags are needed to be passed so the correct OS +# features are available. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# _ISOC99_SOURCE +# _LARGEFILE64_SOURCE +# _LARGEFILE_SOURCE64 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_EARLY_FLAG],[ + AC_CACHE_VAL([tcl_cv_flag_]translit($1,[A-Z],[a-z]), + AC_TRY_COMPILE([$2], $3, [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no, + AC_TRY_COMPILE([[#define ]$1[ 1 +]$2], $3, + [tcl_cv_flag_]translit($1,[A-Z],[a-z])=yes, + [tcl_cv_flag_]translit($1,[A-Z],[a-z])=no))) + if test ["x${tcl_cv_flag_]translit($1,[A-Z],[a-z])[}" = "xyes"] ; then + AC_DEFINE($1) + tcl_flags="$tcl_flags $1" + fi +]) + +AC_DEFUN([SC_TCL_EARLY_FLAGS],[ + AC_MSG_CHECKING([for required early compiler flags]) + tcl_flags="" + SC_TCL_EARLY_FLAG(_ISOC99_SOURCE,[#include ], + [char *p = (char *)strtoll; char *q = (char *)strtoull;]) + SC_TCL_EARLY_FLAG(_LARGEFILE64_SOURCE,[#include ], + [struct stat64 buf; int i = stat64("/", &buf);]) + SC_TCL_EARLY_FLAG(_LARGEFILE_SOURCE64,[#include ], + [char *p = (char *)open64;]) + if test "x${tcl_flags}" = "x" ; then + AC_MSG_RESULT([none]) + else + AC_MSG_RESULT([${tcl_flags}]) + fi +]) + +#-------------------------------------------------------------------- +# SC_TCL_64BIT_FLAGS +# +# Check for what is defined in the way of 64-bit features. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# TCL_WIDE_INT_IS_LONG +# TCL_WIDE_INT_TYPE +# HAVE_STRUCT_DIRENT64 +# HAVE_STRUCT_STAT64 +# HAVE_TYPE_OFF64_T +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_64BIT_FLAGS], [ + AC_MSG_CHECKING([for 64-bit integer type]) + AC_CACHE_VAL(tcl_cv_type_64bit,[ + tcl_cv_type_64bit=none + # See if the compiler knows natively about __int64 + AC_TRY_COMPILE(,[__int64 value = (__int64) 0;], + tcl_type_64bit=__int64, tcl_type_64bit="long long") + # See if we should use long anyway Note that we substitute in the + # type that is our current guess for a 64-bit type inside this check + # program, so it should be modified only carefully... + AC_TRY_COMPILE(,[switch (0) { + case 1: case (sizeof(]${tcl_type_64bit}[)==sizeof(long)): ; + }],tcl_cv_type_64bit=${tcl_type_64bit})]) + if test "${tcl_cv_type_64bit}" = none ; then + AC_DEFINE(TCL_WIDE_INT_IS_LONG) + AC_MSG_RESULT([using long]) + else + AC_DEFINE_UNQUOTED(TCL_WIDE_INT_TYPE,${tcl_cv_type_64bit}) + AC_MSG_RESULT([${tcl_cv_type_64bit}]) + + # Now check for auxiliary declarations + AC_CACHE_CHECK([for struct dirent64], tcl_cv_struct_dirent64,[ + AC_TRY_COMPILE([#include +#include ],[struct dirent64 p;], + tcl_cv_struct_dirent64=yes,tcl_cv_struct_dirent64=no)]) + if test "x${tcl_cv_struct_dirent64}" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_DIRENT64) + fi + + AC_CACHE_CHECK([for struct stat64], tcl_cv_struct_stat64,[ + AC_TRY_COMPILE([#include ],[struct stat64 p; +], + tcl_cv_struct_stat64=yes,tcl_cv_struct_stat64=no)]) + if test "x${tcl_cv_struct_stat64}" = "xyes" ; then + AC_DEFINE(HAVE_STRUCT_STAT64) + fi + + AC_CHECK_FUNCS(open64 lseek64) + AC_MSG_CHECKING([for off64_t]) + AC_CACHE_VAL(tcl_cv_type_off64_t,[ + AC_TRY_COMPILE([#include ],[off64_t offset; +], + tcl_cv_type_off64_t=yes,tcl_cv_type_off64_t=no)]) + dnl Define HAVE_TYPE_OFF64_T only when the off64_t type and the + dnl functions lseek64 and open64 are defined. + if test "x${tcl_cv_type_off64_t}" = "xyes" && \ + test "x${ac_cv_func_lseek64}" = "xyes" && \ + test "x${ac_cv_func_open64}" = "xyes" ; then + AC_DEFINE(HAVE_TYPE_OFF64_T) + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + fi +]) + +#-------------------------------------------------------------------- +# SC_TCL_GETHOSTBYADDR_R +# +# Check if we have MT-safe variant of gethostbyaddr(). +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# HAVE_GETHOSTBYADDR_R +# HAVE_GETHOSTBYADDR_R_7 +# HAVE_GETHOSTBYADDR_R_8 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_GETHOSTBYADDR_R], [AC_CHECK_FUNC(gethostbyaddr_r, [ + AC_CACHE_CHECK([for gethostbyaddr_r with 7 args], tcl_cv_api_gethostbyaddr_r_7, [ + AC_TRY_COMPILE([ + #include + ], [ + char *addr; + int length; + int type; + struct hostent *result; + char buffer[2048]; + int buflen = 2048; + int h_errnop; + + (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen, + &h_errnop); + ], tcl_cv_api_gethostbyaddr_r_7=yes, tcl_cv_api_gethostbyaddr_r_7=no)]) + tcl_ok=$tcl_cv_api_gethostbyaddr_r_7 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYADDR_R_7) + else + AC_CACHE_CHECK([for gethostbyaddr_r with 8 args], tcl_cv_api_gethostbyaddr_r_8, [ + AC_TRY_COMPILE([ + #include + ], [ + char *addr; + int length; + int type; + struct hostent *result, *resultp; + char buffer[2048]; + int buflen = 2048; + int h_errnop; + + (void) gethostbyaddr_r(addr, length, type, result, buffer, buflen, + &resultp, &h_errnop); + ], tcl_cv_api_gethostbyaddr_r_8=yes, tcl_cv_api_gethostbyaddr_r_8=no)]) + tcl_ok=$tcl_cv_api_gethostbyaddr_r_8 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYADDR_R_8) + fi + fi + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYADDR_R) + fi +])]) + +#-------------------------------------------------------------------- +# SC_TCL_GETHOSTBYNAME_R +# +# Check to see what variant of gethostbyname_r() we have. +# Based on David Arnold's example from the comp.programming.threads +# FAQ Q213 +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# HAVE_GETHOSTBYADDR_R +# HAVE_GETHOSTBYADDR_R_3 +# HAVE_GETHOSTBYADDR_R_5 +# HAVE_GETHOSTBYADDR_R_6 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_GETHOSTBYNAME_R], [AC_CHECK_FUNC(gethostbyname_r, [ + AC_CACHE_CHECK([for gethostbyname_r with 6 args], tcl_cv_api_gethostbyname_r_6, [ + AC_TRY_COMPILE([ + #include + ], [ + char *name; + struct hostent *he, *res; + char buffer[2048]; + int buflen = 2048; + int h_errnop; + + (void) gethostbyname_r(name, he, buffer, buflen, &res, &h_errnop); + ], tcl_cv_api_gethostbyname_r_6=yes, tcl_cv_api_gethostbyname_r_6=no)]) + tcl_ok=$tcl_cv_api_gethostbyname_r_6 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYNAME_R_6) + else + AC_CACHE_CHECK([for gethostbyname_r with 5 args], tcl_cv_api_gethostbyname_r_5, [ + AC_TRY_COMPILE([ + #include + ], [ + char *name; + struct hostent *he; + char buffer[2048]; + int buflen = 2048; + int h_errnop; + + (void) gethostbyname_r(name, he, buffer, buflen, &h_errnop); + ], tcl_cv_api_gethostbyname_r_5=yes, tcl_cv_api_gethostbyname_r_5=no)]) + tcl_ok=$tcl_cv_api_gethostbyname_r_5 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYNAME_R_5) + else + AC_CACHE_CHECK([for gethostbyname_r with 3 args], tcl_cv_api_gethostbyname_r_3, [ + AC_TRY_COMPILE([ + #include + ], [ + char *name; + struct hostent *he; + struct hostent_data data; + + (void) gethostbyname_r(name, he, &data); + ], tcl_cv_api_gethostbyname_r_3=yes, tcl_cv_api_gethostbyname_r_3=no)]) + tcl_ok=$tcl_cv_api_gethostbyname_r_3 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYNAME_R_3) + fi + fi + fi + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETHOSTBYNAME_R) + fi +])]) + +#-------------------------------------------------------------------- +# SC_TCL_GETPWUID_R +# +# Check if we have MT-safe variant of getpwuid() and if yes, +# which one exactly. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# HAVE_GETPWUID_R +# HAVE_GETPWUID_R_4 +# HAVE_GETPWUID_R_5 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_GETPWUID_R], [AC_CHECK_FUNC(getpwuid_r, [ + AC_CACHE_CHECK([for getpwuid_r with 5 args], tcl_cv_api_getpwuid_r_5, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + uid_t uid; + struct passwd pw, *pwp; + char buf[512]; + int buflen = 512; + + (void) getpwuid_r(uid, &pw, buf, buflen, &pwp); + ], tcl_cv_api_getpwuid_r_5=yes, tcl_cv_api_getpwuid_r_5=no)]) + tcl_ok=$tcl_cv_api_getpwuid_r_5 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETPWUID_R_5) + else + AC_CACHE_CHECK([for getpwuid_r with 4 args], tcl_cv_api_getpwuid_r_4, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + uid_t uid; + struct passwd pw; + char buf[512]; + int buflen = 512; + + (void)getpwnam_r(uid, &pw, buf, buflen); + ], tcl_cv_api_getpwuid_r_4=yes, tcl_cv_api_getpwuid_r_4=no)]) + tcl_ok=$tcl_cv_api_getpwuid_r_4 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETPWUID_R_4) + fi + fi + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETPWUID_R) + fi +])]) + +#-------------------------------------------------------------------- +# SC_TCL_GETPWNAM_R +# +# Check if we have MT-safe variant of getpwnam() and if yes, +# which one exactly. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# HAVE_GETPWNAM_R +# HAVE_GETPWNAM_R_4 +# HAVE_GETPWNAM_R_5 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_GETPWNAM_R], [AC_CHECK_FUNC(getpwnam_r, [ + AC_CACHE_CHECK([for getpwnam_r with 5 args], tcl_cv_api_getpwnam_r_5, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + char *name; + struct passwd pw, *pwp; + char buf[512]; + int buflen = 512; + + (void) getpwnam_r(name, &pw, buf, buflen, &pwp); + ], tcl_cv_api_getpwnam_r_5=yes, tcl_cv_api_getpwnam_r_5=no)]) + tcl_ok=$tcl_cv_api_getpwnam_r_5 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETPWNAM_R_5) + else + AC_CACHE_CHECK([for getpwnam_r with 4 args], tcl_cv_api_getpwnam_r_4, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + char *name; + struct passwd pw; + char buf[512]; + int buflen = 512; + + (void)getpwnam_r(name, &pw, buf, buflen); + ], tcl_cv_api_getpwnam_r_4=yes, tcl_cv_api_getpwnam_r_4=no)]) + tcl_ok=$tcl_cv_api_getpwnam_r_4 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETPWNAM_R_4) + fi + fi + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETPWNAM_R) + fi +])]) + +#-------------------------------------------------------------------- +# SC_TCL_GETGRGID_R +# +# Check if we have MT-safe variant of getgrgid() and if yes, +# which one exactly. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# HAVE_GETGRGID_R +# HAVE_GETGRGID_R_4 +# HAVE_GETGRGID_R_5 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_GETGRGID_R], [AC_CHECK_FUNC(getgrgid_r, [ + AC_CACHE_CHECK([for getgrgid_r with 5 args], tcl_cv_api_getgrgid_r_5, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + gid_t gid; + struct group gr, *grp; + char buf[512]; + int buflen = 512; + + (void) getgrgid_r(gid, &gr, buf, buflen, &grp); + ], tcl_cv_api_getgrgid_r_5=yes, tcl_cv_api_getgrgid_r_5=no)]) + tcl_ok=$tcl_cv_api_getgrgid_r_5 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETGRGID_R_5) + else + AC_CACHE_CHECK([for getgrgid_r with 4 args], tcl_cv_api_getgrgid_r_4, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + gid_t gid; + struct group gr; + char buf[512]; + int buflen = 512; + + (void)getgrgid_r(gid, &gr, buf, buflen); + ], tcl_cv_api_getgrgid_r_4=yes, tcl_cv_api_getgrgid_r_4=no)]) + tcl_ok=$tcl_cv_api_getgrgid_r_4 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETGRGID_R_4) + fi + fi + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETGRGID_R) + fi +])]) + +#-------------------------------------------------------------------- +# SC_TCL_GETGRNAM_R +# +# Check if we have MT-safe variant of getgrnam() and if yes, +# which one exactly. +# +# Arguments: +# None +# +# Results: +# +# Might define the following vars: +# HAVE_GETGRNAM_R +# HAVE_GETGRNAM_R_4 +# HAVE_GETGRNAM_R_5 +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_TCL_GETGRNAM_R], [AC_CHECK_FUNC(getgrnam_r, [ + AC_CACHE_CHECK([for getgrnam_r with 5 args], tcl_cv_api_getgrnam_r_5, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + char *name; + struct group gr, *grp; + char buf[512]; + int buflen = 512; + + (void) getgrnam_r(name, &gr, buf, buflen, &grp); + ], tcl_cv_api_getgrnam_r_5=yes, tcl_cv_api_getgrnam_r_5=no)]) + tcl_ok=$tcl_cv_api_getgrnam_r_5 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETGRNAM_R_5) + else + AC_CACHE_CHECK([for getgrnam_r with 4 args], tcl_cv_api_getgrnam_r_4, [ + AC_TRY_COMPILE([ + #include + #include + ], [ + char *name; + struct group gr; + char buf[512]; + int buflen = 512; + + (void)getgrnam_r(name, &gr, buf, buflen); + ], tcl_cv_api_getgrnam_r_4=yes, tcl_cv_api_getgrnam_r_4=no)]) + tcl_ok=$tcl_cv_api_getgrnam_r_4 + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETGRNAM_R_4) + fi + fi + if test "$tcl_ok" = yes; then + AC_DEFINE(HAVE_GETGRNAM_R) + fi +])]) + +#-------------------------------------------------------------------- +# SC_CONFIG_COMMANDS_PRE(CMDS) +# +# Replacement for autoconf 2.5x AC_COMMANDS_PRE: +# Commands to run right before config.status is +# created. Accumulates. +# +# Requires presence of SC_OUTPUT_COMMANDS_PRE at the end +# of configure.in (right before AC_OUTPUT). +# +#-------------------------------------------------------------------- + +AC_DEFUN([SC_CONFIG_COMMANDS_PRE], [ + define([SC_OUTPUT_COMMANDS_PRE], defn([SC_OUTPUT_COMMANDS_PRE])[$1 +])]) +AC_DEFUN([SC_OUTPUT_COMMANDS_PRE]) + diff --git a/config/tls.m4 b/config/tls.m4 index 69cf6d4..ef7e6d0 100644 --- a/config/tls.m4 +++ b/config/tls.m4 @@ -1,8 +1,9 @@ dnl Check whether the target supports TLS. AC_DEFUN([GCC_CHECK_TLS], [ + AC_REQUIRE([AC_CANONICAL_HOST]) GCC_ENABLE(tls, yes, [], [Use thread-local storage]) AC_CACHE_CHECK([whether the target supports thread-local storage], - have_tls, [ + gcc_cv_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, but only if static linking is supported (not @@ -10,11 +11,11 @@ AC_DEFUN([GCC_CHECK_TLS], [ chktls_save_LDFLAGS="$LDFLAGS" LDFLAGS="-static $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]) + [AC_RUN_IFELSE([__thread int a; int b; int main() { return a = b; }], + [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no],[])], + [gcc_cv_have_tls=yes]) LDFLAGS="$chktls_save_LDFLAGS" - if test $have_tls = yes; then + if test $gcc_cv_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. @@ -58,18 +59,35 @@ AC_DEFUN([GCC_CHECK_TLS], [ if (pthread_join (thread, &thread_retval)) return 0; return (a_in_other_thread == a_in_main_thread);])], - [have_tls=yes], [have_tls=no], []) + [gcc_cv_have_tls=yes], [gcc_cv_have_tls=no], []) CFLAGS="$chktls_save_CFLAGS" fi fi], - [have_tls=no], + [gcc_cv_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]) + [chktls_save_LDFLAGS="$LDFLAGS" + dnl Shared library options may depend on the host; this check + dnl is only known to be needed for GNU/Linux. + case $host in + *-*-linux*) + LDFLAGS="-shared -Wl,--no-undefined $LDFLAGS" + ;; + esac + chktls_save_CFLAGS="$CFLAGS" + CFLAGS="-fPIC $CFLAGS" + dnl If -shared works, test if TLS works in a shared library. + AC_LINK_IFELSE([int f() { return 0; }], + [AC_LINK_IFELSE([__thread int a; int b; int f() { return a = b; }], + [gcc_cv_have_tls=yes], + [gcc_cv_have_tls=no])], + [gcc_cv_have_tls=yes]) + CFLAGS="$chktls_save_CFLAGS" + LDFLAGS="$chktls_save_LDFLAGS"], [gcc_cv_have_tls=no]) ] )]) - if test "$enable_tls $have_tls" = "yes yes"; then + if test "$enable_tls $gcc_cv_have_tls" = "yes yes"; then AC_DEFINE(HAVE_TLS, 1, [Define to 1 if the target supports thread-local storage.]) fi]) @@ -77,12 +95,30 @@ AC_DEFUN([GCC_CHECK_TLS], [ dnl Check whether the target assembler supports TLS. AC_DEFUN([GCC_CHECK_CC_TLS], [ GCC_ENABLE(tls, yes, [], [Use thread-local storage]) - AC_CACHE_CHECK([whether the target asssembler upports thread-local storage], - have_cc_tls, [ + AC_CACHE_CHECK([whether the target assembler supports thread-local storage], + gcc_cv_have_cc_tls, [ AC_COMPILE_IFELSE([__thread int a; int b; int main() { return a = b; }], - [have_cc_tls=yes], [have_cc_tls=no])] + [gcc_cv_have_cc_tls=yes], [gcc_cv_have_cc_tls=no])] )]) - if test "$enable_tls $have_cc_tls" = "yes yes"; then + if test "$enable_tls $gcc_cv_have_cc_tls" = "yes yes"; then AC_DEFINE(HAVE_CC_TLS, 1, [Define to 1 if the target assembler supports thread-local storage.]) fi]) + +dnl Check whether TLS is emulated. +AC_DEFUN([GCC_CHECK_EMUTLS], [ + AC_CACHE_CHECK([whether the thread-local storage support is from emutls], + gcc_cv_use_emutls, [ + gcc_cv_use_emutls=no + echo '__thread int a; int b; int main() { return a = b; }' > conftest.c + if AC_TRY_COMMAND(${CC-cc} -Werror -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD); then + if grep __emutls_get_address conftest.s > /dev/null; then + gcc_cv_use_emutls=yes + fi + fi + rm -f conftest.* + ]) + if test "$gcc_cv_use_emutls" = "yes" ; then + AC_DEFINE(USE_EMUTLS, 1, + [Define to 1 if the target use emutls for thread-local storage.]) + fi]) diff --git a/config/unwind_ipinfo.m4 b/config/unwind_ipinfo.m4 index 5587d9c..efc7990 100644 --- a/config/unwind_ipinfo.m4 +++ b/config/unwind_ipinfo.m4 @@ -1,22 +1,37 @@ dnl -dnl Check whether _Unwind_GetIPInfo is available. +dnl Check whether _Unwind_GetIPInfo is available without doing a link +dnl test so we can use this with libstdc++-v3 and libjava. Need to +dnl use $target to set defaults because automatic checking is not possible +dnl without a link test (and maybe even with a link test). 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_ARG_WITH(system-libunwind, + [ --with-system-libunwind use installed libunwind]) + # If system-libunwind was not specifically set, pick a default setting. + if test x$with_system_libunwind = x; then + case ${target} in + ia64-*-hpux*) with_system_libunwind=yes ;; + *) with_system_libunwind=no ;; + esac + fi + # Based on system-libunwind and target, do we have ipinfo? + if test x$with_system_libunwind = xyes; then + case ${target} in + ia64-*-*) have_unwind_getipinfo=no ;; + *) have_unwind_getipinfo=yes ;; + esac + else + # Darwin before version 9 does not have _Unwind_GetIPInfo. + changequote(,) + case ${target} in + *-*-darwin[3-8]|*-*-darwin[3-8].*) have_unwind_getipinfo=no ;; + *) have_unwind_getipinfo=yes ;; + esac + changequote([,]) + fi + + if test x$have_unwind_getipinfo = xyes; 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 d3358b6..3801c85 100644 --- a/config/warnings.m4 +++ b/config/warnings.m4 @@ -1,12 +1,12 @@ # Autoconf include file defining macros related to compile-time warnings. -# Copyright 2004, 2005, 2007 Free Software Foundation, Inc. +# Copyright 2004, 2005, 2007, 2009 Free Software Foundation, Inc. #This file is part of GCC. #GCC is free software; you can redistribute 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 +#Software Foundation; either version 3, or (at your option) any later #version. #GCC is distributed in the hope that it will be useful, but WITHOUT @@ -15,9 +15,8 @@ #for more details. #You should have received a copy of the GNU General Public License -#along with GCC; see the file COPYING. If not, write to the Free -#Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -#02110-1301, USA. +#along with GCC; see the file COPYING3. If not see +#. # ACX_PROG_CC_WARNING_OPTS(WARNINGS, [VARIABLE = WARN_CFLAGS) # Sets @VARIABLE@ to the subset of the given options which the diff --git a/configure b/configure index 0446437..e04c6b7 100755 --- a/configure +++ b/configure @@ -1,81 +1,413 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.64. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. # -# 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. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_unset $as_var + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." fi -done + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -83,146 +415,107 @@ 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 | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\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; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,38 +524,24 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= 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= @@ -270,14 +549,277 @@ PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= 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 WINDMC 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 WINDMC_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' +enable_option_checking=no +ac_subst_vars='LTLIBOBJS +LIBOBJS +compare_exclusions +stage2_werror_flag +stage1_checking +stage1_cflags +MAINT +MAINTAINER_MODE_FALSE +MAINTAINER_MODE_TRUE +COMPILER_NM_FOR_TARGET +COMPILER_LD_FOR_TARGET +COMPILER_AS_FOR_TARGET +FLAGS_FOR_TARGET +RAW_CXX_FOR_TARGET +WINDMC_FOR_TARGET +WINDRES_FOR_TARGET +STRIP_FOR_TARGET +RANLIB_FOR_TARGET +OBJDUMP_FOR_TARGET +NM_FOR_TARGET +LIPO_FOR_TARGET +LD_FOR_TARGET +DLLTOOL_FOR_TARGET +AS_FOR_TARGET +AR_FOR_TARGET +GFORTRAN_FOR_TARGET +GCJ_FOR_TARGET +GCC_FOR_TARGET +CXX_FOR_TARGET +CC_FOR_TARGET +OBJDUMP +OBJCOPY +WINDMC +WINDRES +STRIP +RANLIB +NM +LIPO +LD +DLLTOOL +AS +AR +RUNTEST +EXPECT +MAKEINFO +FLEX +LEX +M4 +BISON +YACC +config_shell +WINDRES_FOR_BUILD +WINDMC_FOR_BUILD +RANLIB_FOR_BUILD +NM_FOR_BUILD +LD_FOR_BUILD +LDFLAGS_FOR_BUILD +GFORTRAN_FOR_BUILD +GCJ_FOR_BUILD +DLLTOOL_FOR_BUILD +CXX_FOR_BUILD +CXXFLAGS_FOR_BUILD +CFLAGS_FOR_BUILD +CC_FOR_BUILD +AS_FOR_BUILD +AR_FOR_BUILD +target_configargs +configdirs +host_configargs +build_configdirs +build_configargs +INSTALL_GDB_TK +GDB_TK +CONFIGURE_GDB_TK +build_tooldir +tooldir +GCC_SHLIB_SUBDIR +RPATH_ENVVAR +CXXFLAGS_FOR_TARGET +CFLAGS_FOR_TARGET +DEBUG_PREFIX_CFLAGS_FOR_TARGET +SYSROOT_CFLAGS_FOR_TARGET +stage1_languages +clooginc +clooglibs +pplinc +ppllibs +poststage1_libs +poststage1_ldflags +stage1_libs +stage1_ldflags +extra_mpc_mpfr_configure_flags +extra_mpc_gmp_configure_flags +extra_mpfr_configure_flags +gmpinc +gmplibs +do_compare +GNATMAKE +GNATBIND +ac_ct_CXX +CXXFLAGS +CXX +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +target_subdir +host_subdir +build_subdir +build_libsubdir +AWK +SED +LN_S +LN +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_os +target_vendor +target_cpu +target +host_os +host_vendor +host_cpu +host +target_noncanonical +host_noncanonical +build_noncanonical +build_os +build_vendor +build_cpu +build +TOPLEVEL_CONFIGURE_ARGUMENTS +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='serialization_dependencies +host_makefile_frag +target_makefile_frag +alphaieee_frag +ospace_frag' +ac_user_opts=' +enable_option_checking +with_build_libsubdir +enable_gold +enable_libada +enable_libssp +enable_build_with_cxx +with_mpc +with_mpc_include +with_mpc_lib +with_mpfr_dir +with_mpfr +with_mpfr_include +with_mpfr_lib +with_gmp_dir +with_gmp +with_gmp_include +with_gmp_lib +with_host_libstdcxx +with_stage1_ldflags +with_stage1_libs +with_boot_ldflags +with_boot_libs +with_ppl +with_ppl_include +with_ppl_lib +enable_ppl_version_check +with_cloog +with_cloog_include +with_cloog_lib +enable_cloog_version_check +enable_stage1_languages +enable_objc_gc +with_build_sysroot +with_debug_prefix_map +enable_bootstrap +enable_serial_configure +with_build_time_tools +enable_maintainer_mode +enable_stage1_checking +enable_werror +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +AR +AS +DLLTOOL +LD +LIPO +NM +RANLIB +STRIP +WINDRES +WINDMC +OBJCOPY +OBJDUMP +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 +WINDMC_FOR_TARGET' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -300,34 +842,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' 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' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -349,33 +905,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -402,6 +984,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -426,13 +1014,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -497,6 +1088,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -547,26 +1148,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -586,26 +1197,25 @@ do | --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; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - 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'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_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 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -614,31 +1224,36 @@ 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; }; } + as_fn_error "missing argument to $ac_option" 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; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -652,7 +1267,7 @@ target=$target_alias 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. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -665,190 +1280,74 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then 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'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + 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_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_WINDMC_set=${WINDMC+set} -ac_env_WINDMC_value=$WINDMC -ac_cv_env_WINDMC_set=${WINDMC+set} -ac_cv_env_WINDMC_value=$WINDMC -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 -ac_env_WINDMC_FOR_TARGET_set=${WINDMC_FOR_TARGET+set} -ac_env_WINDMC_FOR_TARGET_value=$WINDMC_FOR_TARGET -ac_cv_env_WINDMC_FOR_TARGET_set=${WINDMC_FOR_TARGET+set} -ac_cv_env_WINDMC_FOR_TARGET_value=$WINDMC_FOR_TARGET +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +ac_subdirs_all=`cd $srcdir && echo */configure | sed 's,/configure,,g'` + +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -877,14 +1376,11 @@ Configuration: -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] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -894,18 +1390,25 @@ 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] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -927,10 +1430,15 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-gold use gold instead of ld --enable-libada build libada directory --enable-libssp build libssp directory + --enable-build-with-cxx build with C++ compiler instead of C compiler + --disable-ppl-version-check disable check for PPL version + --disable-cloog-version-check disable check for CLooG version --enable-stage1-languages[=all] choose additional languages to build during stage1. Mostly useful for compiler development. --enable-objc-gc enable use of Boehm's garbage collector with the @@ -950,6 +1458,12 @@ 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-mpc=PATH specify prefix directory for installed MPC package. + Equivalent to --with-mpc-include=PATH/include + plus --with-mpc-lib=PATH/lib + --with-mpc-include=PATH + specify directory for installed MPC include files + --with-mpc-lib=PATH specify directory for the installed MPC library --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 @@ -963,22 +1477,37 @@ Optional Packages: plus --with-gmp-lib=PATH/lib --with-gmp-include=PATH specify directory for installed GMP include files --with-gmp-lib=PATH specify directory for the installed GMP library + --with-host-libstdcxx=L Use linker arguments L to link with libstdc++ + when linking with PPL + --with-stage1-ldflags=FLAGS Linker flags for stage1 + -with-stage1-libs=LIBS Libraries for stage1 + --with-boot-ldflags=FLAGS Linker flags for stage2 and later + --with-boot-libs=LIBS Libraries for stage2 and later + --with-ppl=PATH Specify prefix directory for the installed PPL package + Equivalent to --with-ppl-include=PATH/include + plus --with-ppl-lib=PATH/lib + --with-ppl-include=PATH Specify directory for installed PPL include files + --with-ppl-lib=PATH Specify the directory for the installed PPL library + --with-cloog=PATH Specify prefix directory for the installed CLooG-PPL package + Equivalent to --with-cloog-include=PATH/include + plus --with-cloog-lib=PATH/lib + --with-cloog-include=PATH Specify directory for installed CLooG include files + --with-cloog-lib=PATH Specify the directory for the installed CLooG library --with-build-sysroot=SYSROOT use sysroot as the system root during the build + --with-debug-prefix-map='A=B C=D ...' + map A to B, C to D ... in debug information --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 if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags AR AR for the host @@ -1029,119 +1558,215 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac - - 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 +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +configure +generated by GNU Autoconf 2.64 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_cxx_try_compile LINENO +# ---------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_cxx_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + return $ac_retval + +} # ac_fn_c_try_link +cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ _ACEOF +exec 5>>config.log { cat <<_ASUNAME ## --------- ## @@ -1160,7 +1785,7 @@ uname -v = `(uname -v) 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` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` @@ -1172,8 +1797,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -1195,7 +1821,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -1206,13 +1831,13 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1228,21 +1853,19 @@ do -* ) 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=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; 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; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1255,20 +1878,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "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" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1279,22 +1917,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1306,26 +1950,26 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1333,40 +1977,46 @@ cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer 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 +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -for ac_site_file in $CONFIG_SITE; do +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi @@ -1376,69 +2026,79 @@ 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { 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=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append 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; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1454,74 +2114,94 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +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 +if test "$silent" = yes; then + TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS --silent" +fi +# 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'` # 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 - 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 +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { 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; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 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. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Make sure we can run config.sub. -$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 +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac build=$ac_cv_build -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/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac case ${build_alias} in @@ -1551,48 +2231,70 @@ test "$host_noncanonical" = "$target_noncanonical" && NONENONEs,x,x, && program_transform_name=s,y,y, -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build else - ac_cv_host_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; }; } + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac host=$ac_cv_host -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/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host else - ac_cv_target_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; }; } + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_target" >&5 -echo "${ECHO_T}$ac_cv_target" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error "invalid value of canonical target" "$LINENO" 5;; +esac target=$ac_cv_target -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/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. @@ -1601,18 +2303,16 @@ 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" -# Double any \ or $. echo might interpret backslashes. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # 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 +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` @@ -1630,22 +2330,23 @@ rm conftest.sed # 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 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # 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\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1653,7 +2354,7 @@ case $as_dir/ in # 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 -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1663,30 +2364,43 @@ case $as_dir/ in # 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 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1696,10 +2410,10 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln works" >&5 +$as_echo_n "checking whether ln works... " >&6; } +if test "${acx_cv_prog_LN+set}" = set; then : + $as_echo_n "(cached) " >&6 else rm -f conftestdata_t echo >conftestdata_f @@ -1714,26 +2428,137 @@ rm -f conftestdata_f conftestdata_t fi if test $acx_cv_prog_LN = no; then LN="cp" - echo "$as_me:$LINENO: result: no, using $LN" >&5 -echo "${ECHO_T}no, using $LN" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN" >&5 +$as_echo "no, using $LN" >&6; } else LN="$acx_cv_prog_LN" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi -echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break +done + + ### 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 @@ -1768,31 +2593,6 @@ 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'` - - moveifchange=${srcdir}/move-if-change srcpwd=`cd ${srcdir} ; ${PWDCMD-pwd}` @@ -1838,14 +2638,15 @@ 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 gmp mpfr" +host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libiconv" # 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" +# If --enable-gold is used, "gold" will replace "ld". +host_tools="texinfo byacc flex bison binutils gas ld fixincludes gcc cgen 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 \ @@ -1860,6 +2661,7 @@ target_libraries="target-libgcc \ target-libiberty \ target-libgloss \ target-newlib \ + target-libgomp \ target-libstdc++-v3 \ target-libmudflap \ target-libssp \ @@ -1867,8 +2669,7 @@ target_libraries="target-libgcc \ target-boehm-gc \ ${libgcj} \ target-libobjc \ - target-libada \ - target-libgomp" + target-libada" # these tools are built using the target libraries, and are intended to # run only in the target environment @@ -1890,6 +2691,8 @@ configdirs=`echo ${host_libs} ${host_tools}` target_configdirs=`echo ${target_libraries} ${target_tools}` build_configdirs=`echo ${build_libs} ${build_tools}` + + ################################################################################ srcname="gnu development package" @@ -1919,13 +2722,13 @@ fi # 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" +# Check whether --with-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; +fi + # --srcdir=. covers the toplevel, while "test -d" covers the subdirectories if ( test $srcdir = . && test -d gcc ) \ || test -d $srcdir/../host-${host_noncanonical}; then @@ -1946,7 +2749,7 @@ 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" + noconfigdirs="$noconfigdirs ld gold" fi use_gnu_as= @@ -1997,6 +2800,41 @@ case ${with_newlib} in yes) skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;; esac +# Handle --enable-gold. + +# Check whether --enable-gold was given. +if test "${enable_gold+set}" = set; then : + enableval=$enable_gold; ENABLE_GOLD=$enableval +else + ENABLE_GOLD=no +fi + +if test "${ENABLE_GOLD}" = "yes"; then + # Check for ELF target. + is_elf=no + case "${target}" in + *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \ + | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \ + | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*) + case "${target}" in + *-*-linux*aout* | *-*-linux*oldld*) + ;; + *) + is_elf=yes + ;; + esac + esac + + if test "$is_elf" = "yes"; then + # Check for target supported by gold. + case "${target}" in + i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*) + configdirs="`echo " ${configdirs} " | sed -e 's/ ld / gold /'`" + ;; + esac + fi +fi + # Configure extra directories which are host specific case "${host}" in @@ -2047,24 +2885,24 @@ case "${host}" in esac -# Check whether --enable-libada or --disable-libada was given. -if test "${enable_libada+set}" = set; then - enableval="$enable_libada" - ENABLE_LIBADA=$enableval +# Check whether --enable-libada was given. +if test "${enable_libada+set}" = set; then : + enableval=$enable_libada; ENABLE_LIBADA=$enableval else ENABLE_LIBADA=yes -fi; +fi + if test "${ENABLE_LIBADA}" != "yes" ; then noconfigdirs="$noconfigdirs gnattools" fi -# Check whether --enable-libssp or --disable-libssp was given. -if test "${enable_libssp+set}" = set; then - enableval="$enable_libssp" - ENABLE_LIBSSP=$enableval +# Check whether --enable-libssp was given. +if test "${enable_libssp+set}" = set; then : + enableval=$enable_libssp; ENABLE_LIBSSP=$enableval else ENABLE_LIBSSP=yes -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. @@ -2086,7 +2924,7 @@ esac # Disable libmudflap on some systems. if test x$enable_libmudflap = x ; then case "${target}" in - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | bfin*-*-uclinux*) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | bfin*-*-uclinux* | *-*-kopensolaris*-gnu) # Enable libmudflap by default in GNU and friends. ;; *-*-freebsd*) @@ -2103,7 +2941,7 @@ fi if test x$enable_libgomp = x ; then # Enable libgomp by default on hosted POSIX systems. case "${target}" in - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) ;; *-*-netbsd* | *-*-freebsd* | *-*-openbsd*) ;; @@ -2117,13 +2955,23 @@ if test x$enable_libgomp = x ; then esac fi +# Default libgloss CPU subdirectory. +libgloss_dir="$target_cpu" 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" + powerpc-*-darwin*) + noconfigdirs="$noconfigdirs ld gas gdb gprof" + noconfigdirs="$noconfigdirs sim target-rda" + ;; + i[3456789]86-*-darwin*) + noconfigdirs="$noconfigdirs ld gprof" + noconfigdirs="$noconfigdirs sim target-rda" + ;; + x86_64-*-darwin[912]*) + noconfigdirs="$noconfigdirs ld gas gprof" noconfigdirs="$noconfigdirs sim target-rda" ;; *-*-darwin*) @@ -2223,6 +3071,7 @@ case "${target}" in *) noconfigdirs="$noconfigdirs gdb readline" ;; esac + libgloss_dir=wince ;; arc-*-*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" @@ -2231,19 +3080,22 @@ case "${target}" in ;; arm-*-coff | strongarm-*-coff | xscale-*-coff) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=arm ;; arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) noconfigdirs="$noconfigdirs target-libffi target-qthreads" + libgloss_dir=arm ;; arm*-*-linux-gnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" + noconfigdirs="$noconfigdirs target-qthreads" case ${with_newlib} in no) noconfigdirs="$noconfigdirs target-newlib target-libgloss" esac + libgloss_dir=arm ;; arm*-*-symbianelf*) noconfigdirs="$noconfigdirs ${libgcj} target-libiberty" + libgloss_dir=arm ;; arm-*-pe*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" @@ -2261,7 +3113,7 @@ case "${target}" in noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}" ;; avr-*-*) - noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" + noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp" ;; bfin-*-*) noconfigdirs="$noconfigdirs gdb" @@ -2275,6 +3127,9 @@ case "${target}" in c54x*-*-* | tic54x-*-*) noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib" ;; + cr16-*-*) + noconfigdirs="$noconfigdirs ${libgcj} gdb" + ;; cris-*-* | crisv32-*-*) unsupported_languages="$unsupported_languages java" case "${target}" in @@ -2282,7 +3137,6 @@ case "${target}" in 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";; @@ -2290,6 +3144,7 @@ case "${target}" in unsupported_languages="$unsupported_languages fortran" noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss";; esac + libgloss_dir=cris ;; crx-*-*) noconfigdirs="$noconfigdirs target-libstdc++-v3 target-mudflap ${libgcj}" @@ -2300,12 +3155,19 @@ case "${target}" in d30v-*-*) noconfigdirs="$noconfigdirs ${libgcj} gdb" ;; + ep9312-*-elf | ep9312-*-coff) + libgloss_dir=arm + ;; fr30-*-elf*) noconfigdirs="$noconfigdirs ${libgcj} gdb" ;; frv-*-*) noconfigdirs="$noconfigdirs ${libgcj}" ;; + moxie-*-*) + noconfigdirs="$noconfigdirs ${libgcj}" + noconfigdirs="$noconfigdirs gprof" + ;; h8300*-*-*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; @@ -2331,6 +3193,9 @@ case "${target}" in hppa*-hp-hpux11*) noconfigdirs="$noconfigdirs ld shellutils" ;; + hppa*-*-pro*) + libgloss_dir=pa + ;; hppa*-*-*) # According to Alexandre Oliva , libjava won't # build on HP-UX 10.20. @@ -2347,10 +3212,15 @@ case "${target}" in # No gdb or ld support yet. noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld" ;; + ia64*-*-*vms*) + # No gdb or ld support yet. + noconfigdirs="$noconfigdirs ${libgcj} tix readline mmalloc libgui itcl gdb ld" + ;; i370-*-opened*) ;; i[3456789]86-*-coff | i[3456789]86-*-elf) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=i386 ;; i[3456789]86-*-linux*) # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's @@ -2381,7 +3251,7 @@ case "${target}" in ;; *-*-cygwin*) target_configdirs="$target_configdirs target-libtermcap target-winsup" - noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}" + noconfigdirs="$noconfigdirs target-gperf target-libgloss" # always build newlib if winsup directory is present. if test -d "$srcdir/winsup/cygwin"; then skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` @@ -2420,6 +3290,7 @@ case "${target}" in ;; m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*) noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" + libgloss_dir=m68hc11 ;; m68k-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" @@ -2427,6 +3298,9 @@ case "${target}" in m68k-*-coff*) noconfigdirs="$noconfigdirs ${libgcj}" ;; + m68*-*-* | fido-*-*) + libgloss_dir=m68k + ;; mcore-*-pe*) # The EPOC C++ environment does not support exceptions or rtti, # and so building libstdc++-v3 tends not to always work. @@ -2447,7 +3321,7 @@ case "${target}" in ;; powerpc-*-aix*) # copied from rs6000-*-* entry - noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}" + noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp target-newlib ${libgcj}" ;; powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe) target_configdirs="$target_configdirs target-winsup" @@ -2458,20 +3332,23 @@ case "${target}" in # This is temporary until we can link against shared libraries powerpcle-*-solaris*) noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl gnuserv ${libgcj}" + libgloss_dir=rs6000 ;; powerpc-*-beos*) noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}" ;; powerpc-*-eabi) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=rs6000 ;; powerpc-*-eabi* | powerpcle-*-eabi* | powerpc-*-rtems* ) + libgloss_dir=rs6000 ;; rs6000-*-lynxos*) noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}" ;; rs6000-*-aix*) - noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}" + noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp target-newlib ${libgcj}" ;; rs6000-*-*) noconfigdirs="$noconfigdirs gprof ${libgcj}" @@ -2479,6 +3356,17 @@ case "${target}" in m68k-apollo-*) noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}" ;; + microblaze*) + noconfigdirs="$noconfigdirs gprof ${libgcj}" + ;; + mips*-sde-elf*) + skipdirs="$skipdirs target-libiberty" + noconfigdirs="$noconfigdirs ${libgcj}" + if test x$with_newlib = xyes; then + noconfigdirs="$noconfigdirs gprof" + fi + libgloss_dir=mips + ;; mips*-*-irix5*) noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}" ;; @@ -2492,14 +3380,12 @@ case "${target}" in 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}" + libgloss_dir=mips ;; romp-*-*) noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}" @@ -2511,16 +3397,26 @@ case "${target}" in i[3456789]86-*-msdosdjgpp*) ;; # don't add gprof back in *) skipdirs=`echo " ${skipdirs} " | sed -e 's/ gprof / /'` ;; esac - noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" + case "${target}" in + sh*-*-elf) + noconfigdirs="$noconfigdirs ${libgcj}" ;; + *) + noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; + esac + ;; + sparclet-*-aout* | sparc86x-*-*) + libgloss_dir=sparc ;; sparc-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" ;; sparc64-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=sparc ;; sparclite-*-*) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=sparc ;; sparc-*-sunos4*) noconfigdirs="$noconfigdirs ${libgcj}" @@ -2535,9 +3431,6 @@ 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}" ;; @@ -2556,13 +3449,13 @@ case "${target}" in vax-*-*) noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" ;; - xtensa-*-*) + xtensa*-*-*) noconfigdirs="$noconfigdirs ${libgcj}" ;; ip2k-*-*) noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" ;; - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; *-*-lynxos*) @@ -2690,11 +3583,30 @@ case "${host}" in host_makefile_frag="config/mh-djgpp" ;; *-cygwin*) + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if cat works as expected" >&5 +$as_echo_n "checking to see if cat works as expected... " >&6; } +echo a >cygwin-cat-check +if test `cat cygwin-cat-check` == a ; then + rm cygwin-cat-check + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + rm cygwin-cat-check + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error "The cat command does not ignore carriage return characters. + Please either mount the build directory in binary mode or run the following + commands before running any configure script: +set -o igncr +export SHELLOPTS + " "$LINENO" 5 +fi + host_makefile_frag="config/mh-cygwin" ;; - *-mingw32*) - ;; - *-mingw64*) + *-mingw*) + host_makefile_frag="config/mh-mingw" ;; *-interix*) host_makefile_frag="config/mh-interix" @@ -2711,10 +3623,18 @@ case "${host}" in # without overflowing the jump tables (-J says to use a 32 bit table) tentative_cc="cc -J" ;; - *-hp-hpux*) + hppa*-hp-hpux10*) + tentative_cc="cc -Wp,-H256000" + host_makefile_frag="config/mh-pa-hpux10" + ;; + hppa*-hp-hpux* | hppa*-*-hiux*) tentative_cc="cc -Wp,-H256000" + host_makefile_frag="config/mh-pa" ;; - *-*-hiux*) + hppa*-*) + host_makefile_frag="config/mh-pa" + ;; + *-hp-hpux* | *-*-hiux*) tentative_cc="cc -Wp,-H256000" ;; rs6000-*-lynxos*) @@ -2766,9 +3686,31 @@ if test -z "${CC}" && test "${build}" = "${host}" ; then fi if test "${build}" != "${host}" ; then + AR_FOR_BUILD=${AR_FOR_BUILD-ar} + AS_FOR_BUILD=${AS_FOR_BUILD-as} CC_FOR_BUILD=${CC_FOR_BUILD-gcc} -else + CXX_FOR_BUILD=${CXX_FOR_BUILD-g++} + GCJ_FOR_BUILD=${GCJ_FOR_BUILD-gcj} + GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran} + DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool} + LD_FOR_BUILD=${LD_FOR_BUILD-ld} + NM_FOR_BUILD=${NM_FOR_BUILD-nm} + RANLIB_FOR_BUILD=${RANLIB_FOR_BUILD-ranlib} + WINDRES_FOR_BUILD=${WINDRES_FOR_BUILD-windres} + WINDMC_FOR_BUILD=${WINDMC_FOR_BUILD-windmc} +else + AR_FOR_BUILD="\$(AR)" + AS_FOR_BUILD="\$(AS)" CC_FOR_BUILD="\$(CC)" + CXX_FOR_BUILD="\$(CXX)" + GCJ_FOR_BUILD="\$(GCJ)" + GFORTRAN_FOR_BUILD="\$(GFORTRAN)" + DLLTOOL_FOR_BUILD="\$(DLLTOOL)" + LD_FOR_BUILD="\$(LD)" + NM_FOR_BUILD="\$(NM)" + RANLIB_FOR_BUILD="\$(RANLIB)" + WINDRES_FOR_BUILD="\$(WINDRES)" + WINDMC_FOR_BUILD="\$(WINDMC)" fi ac_ext=c @@ -2779,10 +3721,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2792,35 +3734,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2830,39 +3774,50 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2872,77 +3827,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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. + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&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=. - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi + fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2953,18 +3868,19 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -2982,24 +3898,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3009,39 +3926,41 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -3051,66 +3970,78 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { 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; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -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 &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3122,112 +4053,142 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 ac_status=$? - 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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - 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 + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +if test -z "$ac_file"; then : + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { 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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } fi - ac_exeext=$ac_cv_exeext -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 +# Check that 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } # If not cross compiling, check that we can run a simple program. if test "$cross_compiling" != yes; then if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { 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. + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +See \`config.log' for more details." "$LINENO" 5; } fi fi fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either +# Check that 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3235,38 +4196,31 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 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_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.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; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3278,45 +4232,46 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 ac_status=$? - 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 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_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; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3330,55 +4285,34 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3389,39 +4323,49 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : -ac_cv_prog_cc_g=no +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -3437,18 +4381,14 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3476,12 +4416,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* 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 + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -3496,225 +4441,61 @@ 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__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -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 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext 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 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - 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" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac +if test "x$ac_cv_prog_cc_c89" != xno; then : -# 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 -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_ext=cpp 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 +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. @@ -3724,39 +4505,41 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then - echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. @@ -3766,64 +4549,77 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CXX" && break done -test -n "$ac_ct_CXX" || ac_ct_CXX="g++" - CXX=$ac_ct_CXX + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi fi - + fi +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 &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + rm -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3837,55 +4633,34 @@ 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 +if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core 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` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3896,160 +4671,64 @@ 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 +if ac_fn_cxx_try_compile "$LINENO"; 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 + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -$ac_declaration -#include + 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 +if ac_fn_cxx_try_compile "$LINENO"; then : -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 +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* 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 - +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes 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 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$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 - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -4082,10 +4761,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GNATBIND+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GNATBIND"; then ac_cv_prog_GNATBIND="$GNATBIND" # Let the user override the test. @@ -4095,35 +4774,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GNATBIND="${ac_tool_prefix}gnatbind" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi GNATBIND=$ac_cv_prog_GNATBIND if test -n "$GNATBIND"; then - echo "$as_me:$LINENO: result: $GNATBIND" >&5 -echo "${ECHO_T}$GNATBIND" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNATBIND" >&5 +$as_echo "$GNATBIND" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_GNATBIND"; 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_GNATBIND+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_GNATBIND"; then ac_cv_prog_ac_ct_GNATBIND="$ac_ct_GNATBIND" # Let the user override the test. @@ -4133,28 +4814,38 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_GNATBIND="gnatbind" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_GNATBIND" && ac_cv_prog_ac_ct_GNATBIND="no" fi fi 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNATBIND" >&5 +$as_echo "$ac_ct_GNATBIND" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - GNATBIND=$ac_ct_GNATBIND + if test "x$ac_ct_GNATBIND" = x; then + GNATBIND="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNATBIND=$ac_ct_GNATBIND + fi else GNATBIND="$ac_cv_prog_GNATBIND" fi @@ -4162,10 +4853,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GNATMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GNATMAKE"; then ac_cv_prog_GNATMAKE="$GNATMAKE" # Let the user override the test. @@ -4175,35 +4866,37 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GNATMAKE="${ac_tool_prefix}gnatmake" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi GNATMAKE=$ac_cv_prog_GNATMAKE if test -n "$GNATMAKE"; then - echo "$as_me:$LINENO: result: $GNATMAKE" >&5 -echo "${ECHO_T}$GNATMAKE" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GNATMAKE" >&5 +$as_echo "$GNATMAKE" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_GNATMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_GNATMAKE"; then ac_cv_prog_ac_ct_GNATMAKE="$ac_ct_GNATMAKE" # Let the user override the test. @@ -4213,36 +4906,46 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_GNATMAKE="gnatmake" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_GNATMAKE" >&5 +$as_echo "$ac_ct_GNATMAKE" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - GNATMAKE=$ac_ct_GNATMAKE + if test "x$ac_ct_GNATMAKE" = x; then + GNATMAKE="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + GNATMAKE=$ac_ct_GNATMAKE + fi 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler driver understands Ada" >&5 +$as_echo_n "checking whether compiler driver understands Ada... " >&6; } +if test "${acx_cv_cc_gcc_supports_ada+set}" = set; then : + $as_echo_n "(cached) " >&6 else cat >conftest.adb <&5 -echo "${ECHO_T}$acx_cv_cc_gcc_supports_ada" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_cc_gcc_supports_ada" >&5 +$as_echo "$acx_cv_cc_gcc_supports_ada" >&6; } if test x$GNATBIND != xno && test x$GNATMAKE != xno && test x$acx_cv_cc_gcc_supports_ada != xno; then have_gnat=yes @@ -4271,10 +4974,10 @@ else have_gnat=no fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to compare bootstrapped objects" >&5 +$as_echo_n "checking how to compare bootstrapped objects... " >&6; } +if test "${gcc_cv_prog_cmp_skip+set}" = set; then : + $as_echo_n "(cached) " >&6 else echo abfoo >t1 echo cdfoo >t2 @@ -4296,48 +4999,98 @@ else rm t1 t2 fi -echo "$as_me:$LINENO: result: $gcc_cv_prog_cmp_skip" >&5 -echo "${ECHO_T}$gcc_cv_prog_cmp_skip" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_prog_cmp_skip" >&5 +$as_echo "$gcc_cv_prog_cmp_skip" >&6; } do_compare="$gcc_cv_prog_cmp_skip" -# Check for GMP and MPFR +# See if we are building gcc with C++. +# Check whether --enable-build-with-cxx was given. +if test "${enable_build_with_cxx+set}" = set; then : + enableval=$enable_build_with_cxx; ENABLE_BUILD_WITH_CXX=$enableval +else + ENABLE_BUILD_WITH_CXX=no +fi + + +# Check for GMP, MPFR and MPC gmplibs="-lmpfr -lgmp" gmpinc= have_gmp=no +mpclibs=-lmpc +mpcinc= +have_mpc=no + +# Specify a location for mpc +# check for this first so it ends up on the link line before mpfr. + +# Check whether --with-mpc was given. +if test "${with_mpc+set}" = set; then : + withval=$with_mpc; +fi + + +# Check whether --with-mpc_include was given. +if test "${with_mpc_include+set}" = set; then : + withval=$with_mpc_include; +fi + + +# Check whether --with-mpc_lib was given. +if test "${with_mpc_lib+set}" = set; then : + withval=$with_mpc_lib; +fi + + +if test "x$with_mpc" != x; then + mpclibs="-L$with_mpc/lib -lmpc" + mpcinc="-I$with_mpc/include $mpcinc" +fi +if test "x$with_mpc_include" != x; then + mpcinc="-I$with_mpc_include $mpcinc" +fi +if test "x$with_mpc_lib" != x; then + mpclibs="-L$with_mpc_lib -lmpc" +fi +if test "x$with_mpc$with_mpc_include$with_mpc_lib" = x && test -d ${srcdir}/mpc; then + mpclibs='-L$$r/$(HOST_SUBDIR)/mpc/src/.libs -L$$r/$(HOST_SUBDIR)/mpc/src/_libs -lmpc' + mpcinc='-I$$s/mpc/src '"$mpcinc" + # Do not test the mpc 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_mpc=yes +fi # 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" - { { 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; +# Check whether --with-mpfr-dir was given. +if test "${with_mpfr_dir+set}" = set; then : + withval=$with_mpfr_dir; as_fn_error "The --with-mpfr-dir=PATH option has been removed. +Use --with-mpfr=PATH or --with-mpfr-include=PATH plus --with-mpfr-lib=PATH" "$LINENO" 5 +fi + -# Check whether --with-mpfr or --without-mpfr was given. -if test "${with_mpfr+set}" = set; then - withval="$with_mpfr" +# Check whether --with-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" +# Check whether --with-mpfr_include was given. +if test "${with_mpfr_include+set}" = set; then : + withval=$with_mpfr_include; +fi -fi; -# Check whether --with-mpfr_lib or --without-mpfr_lib was given. -if test "${with_mpfr_lib+set}" = set; then - withval="$with_mpfr_lib" +# Check whether --with-mpfr_lib was given. +if test "${with_mpfr_lib+set}" = set; then : + withval=$with_mpfr_lib; +fi -fi; if test "x$with_mpfr" != x; then gmplibs="-L$with_mpfr/lib $gmplibs" @@ -4352,6 +5105,7 @@ 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" + extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr' # 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 @@ -4361,34 +5115,31 @@ 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" - { { 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; +# Check whether --with-gmp-dir was given. +if test "${with_gmp_dir+set}" = set; then : + withval=$with_gmp_dir; as_fn_error "The --with-gmp-dir=PATH option has been removed. +Use --with-gmp=PATH or --with-gmp-include=PATH plus --with-gmp-lib=PATH" "$LINENO" 5 +fi + -# Check whether --with-gmp or --without-gmp was given. -if test "${with_gmp+set}" = set; then - withval="$with_gmp" +# Check whether --with-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" +# Check whether --with-gmp_include was given. +if test "${with_gmp_include+set}" = set; then : + withval=$with_gmp_include; +fi -fi; -# Check whether --with-gmp_lib or --without-gmp_lib was given. -if test "${with_gmp_lib+set}" = set; then - withval="$with_gmp_lib" +# Check whether --with-gmp_lib was given. +if test "${with_gmp_lib+set}" = set; then : + withval=$with_gmp_lib; +fi -fi; if test "x$with_gmp" != x; then @@ -4404,6 +5155,8 @@ 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" + extra_mpfr_configure_flags='--with-gmp-build=$$r/$(HOST_SUBDIR)/gmp' + extra_mpc_gmp_configure_flags='--with-gmp-include=$$r/$(HOST_SUBDIR)/gmp' # 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 @@ -4416,21 +5169,17 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct version of gmp.h" >&5 +$as_echo_n "checking for correct version of gmp.h... " >&6; } -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "gmp.h" int main () { - #if __GNU_MP_VERSION < 4 || (__GNU_MP_VERSION == 4 && __GNU_MP_VERSION_MINOR < 1) + #if __GNU_MP_VERSION < 4 || (__GNU_MP_VERSION == 4 && __GNU_MP_VERSION_MINOR < 2) choke me #endif @@ -4438,49 +5187,20 @@ 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 +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; have_gmp=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + # If we have GMP, check the MPFR version. 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct version of mpfr.h" >&5 +$as_echo_n "checking for correct version of mpfr.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -4488,49 +5208,16 @@ int main () { - #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,0) + #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,1) 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 +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -4538,89 +5225,444 @@ int main () { - #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,1) + #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,2) 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 +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: buggy but acceptable" >&5 +$as_echo "buggy but acceptable" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; have_gmp=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + # Check for the MPC header version. + if test x"$have_mpc" != xyes ; then + CFLAGS="$CFLAGS $mpcinc" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of mpc.h" >&5 +$as_echo_n "checking for the correct version of mpc.h... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + #if MPC_VERSION < MPC_VERSION_NUM (0,6,0) + choke me + #endif -echo "$as_me:$LINENO: result: buggy but acceptable" >&5 -echo "${ECHO_T}buggy but acceptable" >&6 + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; have_mpc=maybe +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; have_mpc=no; mpclibs= ; mpcinc= fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + + # Now check the MPFR library. + if test x"$have_gmp" = xyes; then + saved_LIBS="$LIBS" + LIBS="$LIBS $gmplibs" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of the gmp/mpfr libraries" >&5 +$as_echo_n "checking for the correct version of the gmp/mpfr libraries... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include +int +main () +{ + + 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 +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; have_gmp=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$saved_LIBS" + fi + + if test x"$have_mpc" = xmaybe; then + saved_LIBS="$LIBS" + LIBS="$LIBS $mpclibs $gmplibs" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the correct version of the mpc library" >&5 +$as_echo_n "checking for the correct version of the mpc library... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + mpc_t n; + mpc_init2 (n, 53); + mpc_set_ui_ui (n, 1, 1, MPC_RNDNN); + mpc_sin (n, n, MPC_RNDNN); + mpc_cos (n, n, MPC_RNDNN); + mpc_tan (n, n, MPC_RNDNN); + mpc_sinh (n, n, MPC_RNDNN); + mpc_cosh (n, n, MPC_RNDNN); + mpc_tanh (n, n, MPC_RNDNN); + mpc_exp (n, n, MPC_RNDNN); + mpc_log (n, n, MPC_RNDNN); + mpc_sqrt (n, n, MPC_RNDNN); + mpc_proj (n, n, MPC_RNDNN); + mpc_neg (n, n, MPC_RNDNN); + mpc_sqr (n, n, MPC_RNDNN); + mpc_clear (n); -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6; have_gmp=no + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; }; have_mpc=yes +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; have_mpc=no; mpclibs= ; mpcinc= fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LIBS="$saved_LIBS" +rm -f core 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+. + as_fn_error "Building GCC requires GMP 4.2+ and MPFR 2.3.2+. 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; }; } +They may be located in separate packages." "$LINENO" 5 fi fi -# Flags needed for both GMP and/or MPFR +if test x$have_mpc != xyes ; then + mpcinc= + mpclibs= +fi + +gmpinc="$mpcinc $gmpinc" +gmplibs="$mpclibs $gmplibs" + +# Flags needed for both GMP, MPFR and/or MPC. + + + + + + +# Allow host libstdc++ to be specified for static linking with PPL. + +# Check whether --with-host-libstdcxx was given. +if test "${with_host_libstdcxx+set}" = set; then : + withval=$with_host_libstdcxx; +fi + + +case $with_host_libstdcxx in + no|yes) + as_fn_error "-with-host-libstdcxx needs an argument" "$LINENO" 5 + ;; +esac + +# Linker flags to use for stage1 or when not boostrapping. + +# Check whether --with-stage1-ldflags was given. +if test "${with_stage1_ldflags+set}" = set; then : + withval=$with_stage1_ldflags; if test "$withval" = "no" -o "$withval" = "yes"; then + stage1_ldflags= + else + stage1_ldflags=$withval + fi +else + stage1_ldflags= +fi + + + +# Libraries to use for stage1 or when not bootstrapping. + +# Check whether --with-stage1-libs was given. +if test "${with_stage1_libs+set}" = set; then : + withval=$with_stage1_libs; if test "$withval" = "no" -o "$withval" = "yes"; then + stage1_libs= + else + stage1_libs=$withval + fi +else + stage1_libs=$with_host_libstdcxx +fi + + + +# Linker flags to use for stage2 and later builds. + +# Check whether --with-boot-ldflags was given. +if test "${with_boot_ldflags+set}" = set; then : + withval=$with_boot_ldflags; if test "$withval" = "no" -o "$withval" = "yes"; then + poststage1_ldflags= + else + poststage1_ldflags=$withval + fi +else + if test "$ENABLE_BUILD_WITH_CXX" = "yes"; then + poststage1_ldflags=-static-libstdc++ + else + poststage1_ldflags= + fi +fi + + + +# Libraries to use for stage2 and later builds. This defaults to the +# argument passed to --with-host-libstdcxx. + +# Check whether --with-boot-libs was given. +if test "${with_boot_libs+set}" = set; then : + withval=$with_boot_libs; if test "$withval" = "no" -o "$withval" = "yes"; then + poststage1_libs= + else + poststage1_libs=$withval + fi +else + poststage1_libs=$with_host_libstdcxx +fi + + + +# Check for PPL +ppl_major_version=0 +ppl_minor_version=10 +ppllibs=" -lppl_c -lppl -lgmpxx" +pplinc= + + +# Check whether --with-ppl was given. +if test "${with_ppl+set}" = set; then : + withval=$with_ppl; +else + with_ppl=no +fi + + +# Check whether --with-ppl_include was given. +if test "${with_ppl_include+set}" = set; then : + withval=$with_ppl_include; +fi + + +# Check whether --with-ppl_lib was given. +if test "${with_ppl_lib+set}" = set; then : + withval=$with_ppl_lib; +fi + + +case $with_ppl in + no) + ppllibs= + ;; + *) + ppllibs="-L$with_ppl/lib -lppl_c -lppl -lgmpxx" + pplinc="-I$with_ppl/include $pplinc" + LIBS="$ppllibs $LIBS" + ;; +esac +if test "x$with_ppl_include" != x; then + pplinc="-I$with_ppl_include $pplinc" +fi +if test "x$with_ppl_lib" != x; then + ppllibs="-L$with_ppl_lib -lppl_c -lppl -lgmpxx" + LIBS="$ppllibs $LIBS" +fi +if test "x$with_ppl$with_ppl_include$with_ppl_lib" = x && test -d ${srcdir}/ppl; then + ppllibs='-L$$r/$(HOST_SUBDIR)/ppl/.libs -L$$r/$(HOST_SUBDIR)/ppl/_libs -lppl_c -lppl -lgmpxx ' + pplinc='-I$$r/$(HOST_SUBDIR)/ppl/include -I$$s/ppl/include ' + LIBS="$ppllibs $LIBS" +fi + +# Check whether --enable-ppl-version-check was given. +if test "${enable_ppl_version_check+set}" = set; then : + enableval=$enable_ppl_version_check; ENABLE_PPL_CHECK=$enableval +else + ENABLE_PPL_CHECK=yes +fi + + +if test "${ENABLE_PPL_CHECK}" = "yes"; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pplinc $gmpinc" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for version $ppl_major_version.$ppl_minor_version of PPL" >&5 +$as_echo_n "checking for version $ppl_major_version.$ppl_minor_version of PPL... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "ppl_c.h" +int +main () +{ + + #if PPL_VERSION_MAJOR != $ppl_major_version || PPL_VERSION_MINOR != $ppl_minor_version + choke me + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; ppllibs= ; pplinc= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$saved_CFLAGS" +fi + +# Flags needed for PPL + + + + +# Check for CLOOG +clooglibs=" -lcloog " +clooginc=" -DCLOOG_PPL_BACKEND " + + +# Check whether --with-cloog was given. +if test "${with_cloog+set}" = set; then : + withval=$with_cloog; +else + with_cloog=no +fi + + +# Check whether --with-cloog_include was given. +if test "${with_cloog_include+set}" = set; then : + withval=$with_cloog_include; +fi + + +# Check whether --with-cloog_lib was given. +if test "${with_cloog_lib+set}" = set; then : + withval=$with_cloog_lib; +fi + + +case $with_cloog in + no) + clooglibs= + clooginc= + ;; + *) + clooglibs="-L$with_cloog/lib -lcloog" + clooginc="-I$with_cloog/include -DCLOOG_PPL_BACKEND " + LIBS="$clooglibs $LIBS" + ;; +esac +if test "x$with_cloog_include" != x; then + clooginc="-I$with_cloog_include -DCLOOG_PPL_BACKEND " +fi +if test "x$with_cloog_lib" != x; then + clooglibs="-L$with_cloog_lib -lcloog" + LIBS="$clooglibs $LIBS" +fi +if test "x$with_cloog$with_cloog_include$with_cloog_lib" = x && test -d ${srcdir}/cloog; then + clooglibs='-L$$r/$(HOST_SUBDIR)/cloog/.libs -L$$r/$(HOST_SUBDIR)/cloog/_libs -lcloog ' + clooginc='-I$$r/$(HOST_SUBDIR)/cloog/include -I$$s/cloog/include -DCLOOG_PPL_BACKEND ' + LIBS="$clooglibs $LIBS" +fi + +# Check whether --enable-cloog-version-check was given. +if test "${enable_cloog_version_check+set}" = set; then : + enableval=$enable_cloog_version_check; ENABLE_CLOOG_CHECK=$enableval +else + ENABLE_CLOOG_CHECK=yes +fi + + +if test "${ENABLE_CLOOG_CHECK}" = "yes"; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $clooginc $gmpinc $pplinc" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for correct version of CLooG" >&5 +$as_echo_n "checking for correct version of CLooG... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include "cloog/cloog.h" +int +main () +{ + + #if CLOOG_VERSION_MAJOR != 0 || CLOOG_VERSION_MINOR != 15 + choke me + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; }; clooglibs= ; clooginc= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$saved_CFLAGS" +fi + +# Flags needed for CLOOG + # By default, C is the only stage 1 language. stage1_languages=,c, +# Target libraries that we bootstrap. +bootstrap_target_libs=,target-libgcc, + # 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 @@ -4706,6 +5748,10 @@ if test -d ${srcdir}/gcc; then exit 1 fi + if test "$language" = "c++" -a "$ENABLE_BUILD_WITH_CXX" = "yes"; then + boot_language=yes + fi + case ,${enable_languages}, in *,${language},*) # Language was explicitly selected; include it. @@ -4726,9 +5772,7 @@ if test -d ${srcdir}/gcc; then 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; }; } + as_fn_error "The gcc/$i directory contains parts of $language but is missing" "$LINENO" 5 ;; *) # Silently disable. @@ -4741,9 +5785,7 @@ echo "$as_me: error: The gcc/$i directory contains parts of $language but is mis case ,${enable_languages},:${language}:${have_gnat} in *,${language},*:ada:no) # Specifically requested language; tell them. - { { 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; }; } + as_fn_error "GNAT is required to build $language" "$LINENO" 5 ;; *:ada:no) # Silently disable. @@ -4776,6 +5818,8 @@ echo "$as_me: error: GNAT is required to build $language" >&2;} yes) # Add to (comma-separated) list of stage 1 languages. stage1_languages="${stage1_languages}${language}," + # We need to bootstrap any supporting libraries. + bootstrap_target_libs="${bootstrap_target_libs}${target_libs}," ;; esac ;; @@ -4784,10 +5828,9 @@ echo "$as_me: error: GNAT is required to build $language" >&2;} 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 + # Check whether --enable-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 ;; @@ -4815,7 +5858,8 @@ if test "${enable_stage1_languages+set}" = set; then esac ;; esac done -fi; +fi + # Remove leading/trailing commas that were added for simplicity potential_languages=`echo "$potential_languages" | sed -e "s/^,//" -e "s/,$//"` @@ -4824,13 +5868,9 @@ fi; new_enable_languages=`echo "$new_enable_languages" | sed -e "s/^,//" -e "s/,$//"` if test "x$missing_languages" != x; then - { { echo "$as_me:$LINENO: error: + as_fn_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} -Supported languages are: ${potential_languages}" >&2;} - { (exit 1); exit 1; }; } +Supported languages are: ${potential_languages}" "$LINENO" 5 fi if test "x$new_enable_languages" != "x$enable_languages"; then echo The following languages will be built: ${new_enable_languages} @@ -4844,23 +5884,22 @@ fi # Handle --disable- 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 + varname=`echo $dirname | sed -e s/+/_/g` + if eval test x\${enable_${varname}} "=" xno ; then noconfigdirs="$noconfigdirs $dir" 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 +# Check whether --enable-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; }; } + as_fn_error "Boehm's garbage collector was requested yet not supported in this configuration" "$LINENO" 5 ;; esac -fi; +fi + # Make sure we only build Boehm's garbage collector if required. case ,${enable_languages},:${enable_objc_gc} in @@ -5055,15 +6094,62 @@ 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" - if test x"$withval" != x ; then +# Check whether --with-build-sysroot was given. +if test "${with_build_sysroot+set}" = set; then : + withval=$with_build_sysroot; if test x"$withval" != x ; then SYSROOT_CFLAGS_FOR_TARGET="--sysroot=$withval" fi else SYSROOT_CFLAGS_FOR_TARGET= -fi; +fi + + + + +# Check whether --with-debug-prefix-map was given. +if test "${with_debug_prefix_map+set}" = set; then : + withval=$with_debug_prefix_map; if test x"$withval" != x; then + DEBUG_PREFIX_CFLAGS_FOR_TARGET= + for debug_map in $withval; do + DEBUG_PREFIX_CFLAGS_FOR_TARGET="$DEBUG_PREFIX_CFLAGS_FOR_TARGET -fdebug-prefix-map=$debug_map" + done + fi +else + DEBUG_PREFIX_CFLAGS_FOR_TARGET= +fi + + + +# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS +# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS +# might also be empty (or "-g", if a non-GCC C++ compiler is in the path). +# We want to ensure that TARGET libraries (which we know are built with +# gcc) are built with "-O2 -g", so include those options when setting +# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET. +if test "x$CFLAGS_FOR_TARGET" = x; then + CFLAGS_FOR_TARGET=$CFLAGS + case " $CFLAGS " in + *" -O2 "*) ;; + *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;; + esac + case " $CFLAGS " in + *" -g "* | *" -g3 "*) ;; + *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;; + esac +fi + + +if test "x$CXXFLAGS_FOR_TARGET" = x; then + CXXFLAGS_FOR_TARGET=$CXXFLAGS + case " $CXXFLAGS " in + *" -O2 "*) ;; + *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;; + esac + case " $CXXFLAGS " in + *" -g "* | *" -g3 "*) ;; + *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;; + esac +fi # Handle --with-headers=XXX. If the value is not "yes", the contents of @@ -5117,7 +6203,7 @@ if test x${use_gnu_as} = x && fi if test x${use_gnu_ld} = x && - echo " ${configdirs} " | grep " ld " > /dev/null 2>&1 ; then + echo " ${configdirs} " | egrep " (go)?ld " > /dev/null 2>&1 ; then with_gnu_ld=yes extra_host_args="$extra_host_args --with-gnu-ld" fi @@ -5193,7 +6279,7 @@ case "${target}" in v850*-*-*) md_exec_prefix=/usr/ccs/bin ;; - xtensa-*-elf*) + xtensa*-*-elf*) ;; *-*-beos* | \ @@ -5221,10 +6307,19 @@ case "${target}" in spu-*-*) target_makefile_frag="config/mt-spu" ;; + mips*-sde-elf*) + target_makefile_frag="config/mt-sde" + ;; + mipsisa*-*-elfoabi*) + target_makefile_frag="config/mt-mips-elfoabi" + ;; + mips*-*-*linux* | mips*-*-gnu*) + target_makefile_frag="config/mt-mips-gnu" + ;; *-*-netware*) target_makefile_frag="config/mt-netware" ;; - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) target_makefile_frag="config/mt-gnu" ;; *-*-aix4.[3456789]* | *-*-aix[56789].*) @@ -5364,12 +6459,23 @@ case "${host}" in ;; esac +# Decide which environment variable is used to find dynamic libraries. case "${host}" in *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;; *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;; + *-*-mingw* | *-*-cygwin ) RPATH_ENVVAR=PATH ;; *) RPATH_ENVVAR=LD_LIBRARY_PATH ;; esac +# On systems where the dynamic library environment variable is PATH, +# gcc/ will put dynamic libraries into a subdirectory to avoid adding +# built executables to PATH. +if test "$RPATH_ENVVAR" = PATH; then + GCC_SHLIB_SUBDIR=/shlib +else + GCC_SHLIB_SUBDIR= +fi + # Record target_configdirs and the configure arguments for target and # build configuration in Makefile. target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'` @@ -5416,13 +6522,13 @@ INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g` # 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. -# Check whether --enable-bootstrap or --disable-bootstrap was given. -if test "${enable_bootstrap+set}" = set; then - enableval="$enable_bootstrap" - +# Check whether --enable-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 @@ -5448,21 +6554,17 @@ 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 "$as_me:$LINENO: WARNING: trying to bootstrap a cross compiler" >&5 -echo "$as_me: WARNING: trying to bootstrap a cross compiler" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: trying to bootstrap a cross compiler" >&5 +$as_echo "$as_me: WARNING: trying to bootstrap a cross compiler" >&2;} ;; # No compiler: if they passed --enable-bootstrap explicitly, fail no:*:*:yes) - { { 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; }; } ;; + as_fn_error "cannot bootstrap without a compiler" "$LINENO" 5 ;; # Fail if wrong command line *) - { { 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; }; } + as_fn_error "invalid option for --enable-bootstrap" "$LINENO" 5 ;; esac @@ -5507,11 +6609,18 @@ for module in ${target_configdirs} ; do echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure" rm -f ${target_subdir}/${module}/Makefile fi + + # We only bootstrap target libraries listed in bootstrap_target_libs. + case $bootstrap_target_libs in + *,target-$module,*) target_bootstrap_suffix=$bootstrap_suffix ;; + *) target_bootstrap_suffix=no-bootstrap ;; + esac + extrasub="$extrasub /^@if target-$module\$/d /^@endif target-$module\$/d -/^@if target-$module-$bootstrap_suffix\$/d -/^@endif target-$module-$bootstrap_suffix\$/d" +/^@if target-$module-$target_bootstrap_suffix\$/d +/^@endif target-$module-$target_bootstrap_suffix\$/d" done extrasub="$extrasub @@ -5519,11 +6628,11 @@ extrasub="$extrasub # Create the serialization dependencies. This uses a temporary file. -# Check whether --enable-serial-configure or --disable-serial-configure was given. -if test "${enable_serial_configure+set}" = set; then - enableval="$enable_serial_configure" +# Check whether --enable-serial-configure was given. +if test "${enable_serial_configure+set}" = set; then : + enableval=$enable_serial_configure; +fi -fi; case ${enable_serial_configure} in yes) @@ -5663,6 +6772,10 @@ EOF_SED gcc_transform_name=`cat conftestsed.out` rm -f conftestsed.out baseargs="$baseargs --program-transform-name='${gcc_transform_name}'" +if test "$silent" = yes; then + baseargs="$baseargs --silent" +fi +baseargs="$baseargs --disable-option-checking" # 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 @@ -5763,6 +6876,19 @@ case " $target_configdirs " in # 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' + + # If we're building libgloss, find the startup file, simulator library + # and linker script. + case " $target_configdirs " in + *" libgloss "*) + # Look for startup file, simulator library and maybe linker script. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/libgloss/'"$libgloss_dir" + # Look for libnosys.a in case the target needs it. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/libgloss/libnosys' + # Most targets have the linker script in the source directory. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$s/libgloss/'"$libgloss_dir" + ;; + esac ;; esac ;; @@ -5777,7 +6903,11 @@ esac # Allow the user to override the flags for # our build compiler if desired. -CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}} +if test x"${build}" = x"${host}" ; then + CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}} + CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}} + LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}} +fi # On Canadian crosses, we'll be searching the right directories for # the previously-installed cross compiler, so don't bother to add @@ -5796,16 +6926,6 @@ 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" ;; @@ -5832,6 +6952,7 @@ done + # Build module lists & subconfigure args. @@ -5848,19 +6969,33 @@ done -# 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. + + + + + + + + + + + + + + +# 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 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. 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_YACC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$YACC"; then ac_cv_prog_YACC="$YACC" # Let the user override the test. @@ -5870,26 +7005,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_YACC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi YACC=$ac_cv_prog_YACC if test -n "$YACC"; then - echo "$as_me:$LINENO: result: $YACC" >&5 -echo "${ECHO_T}$YACC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5 +$as_echo "$YACC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$YACC" && break done test -n "$YACC" || YACC="$MISSING bison -y" @@ -5903,10 +7040,10 @@ 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_BISON+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BISON+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$BISON"; then ac_cv_prog_BISON="$BISON" # Let the user override the test. @@ -5916,26 +7053,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_BISON="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi BISON=$ac_cv_prog_BISON if test -n "$BISON"; then - echo "$as_me:$LINENO: result: $BISON" >&5 -echo "${ECHO_T}$BISON" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BISON" >&5 +$as_echo "$BISON" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$BISON" && break done test -n "$BISON" || BISON="$MISSING bison" @@ -5948,10 +7087,10 @@ for ac_prog in gm4 gnum4 m4 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_M4+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_M4+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$M4"; then ac_cv_prog_M4="$M4" # Let the user override the test. @@ -5961,26 +7100,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_M4="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi M4=$ac_cv_prog_M4 if test -n "$M4"; then - echo "$as_me:$LINENO: result: $M4" >&5 -echo "${ECHO_T}$M4" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $M4" >&5 +$as_echo "$M4" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$M4" && break done test -n "$M4" || M4="$MISSING m4" @@ -5993,10 +7134,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LEX+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. @@ -6006,26 +7147,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LEX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LEX=$ac_cv_prog_LEX if test -n "$LEX"; then - echo "$as_me:$LINENO: result: $LEX" >&5 -echo "${ECHO_T}$LEX" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 +$as_echo "$LEX" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$LEX" && break done test -n "$LEX" || LEX="$MISSING flex" @@ -6039,10 +7182,10 @@ for ac_prog in flex 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_FLEX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_FLEX+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$FLEX"; then ac_cv_prog_FLEX="$FLEX" # Let the user override the test. @@ -6052,26 +7195,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_FLEX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi FLEX=$ac_cv_prog_FLEX if test -n "$FLEX"; then - echo "$as_me:$LINENO: result: $FLEX" >&5 -echo "${ECHO_T}$FLEX" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLEX" >&5 +$as_echo "$FLEX" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$FLEX" && break done test -n "$FLEX" || FLEX="$MISSING flex" @@ -6084,10 +7229,10 @@ for ac_prog in makeinfo 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_MAKEINFO+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_MAKEINFO+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. @@ -6097,26 +7242,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MAKEINFO="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then - echo "$as_me:$LINENO: result: $MAKEINFO" >&5 -echo "${ECHO_T}$MAKEINFO" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 +$as_echo "$MAKEINFO" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$MAKEINFO" && break done test -n "$MAKEINFO" || MAKEINFO="$MISSING makeinfo" @@ -6125,10 +7272,10 @@ case " $build_configdirs " in *" texinfo "*) MAKEINFO='$$r/$(BUILD_SUBDIR)/texinfo/makeinfo/makeinfo' ;; *) - # For an installed makeinfo, we require it to be from texinfo 4.4 or + # For an installed makeinfo, we require it to be from texinfo 4.7 or # higher, else we use the "missing" dummy. if ${MAKEINFO} --version \ - | egrep 'texinfo[^0-9]*(4\.([4-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then + | egrep 'texinfo[^0-9]*(4\.([7-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then : else MAKEINFO="$MISSING makeinfo" @@ -6143,10 +7290,10 @@ for ac_prog in expect 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_EXPECT+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_EXPECT+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$EXPECT"; then ac_cv_prog_EXPECT="$EXPECT" # Let the user override the test. @@ -6156,26 +7303,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_EXPECT="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi EXPECT=$ac_cv_prog_EXPECT if test -n "$EXPECT"; then - echo "$as_me:$LINENO: result: $EXPECT" >&5 -echo "${ECHO_T}$EXPECT" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EXPECT" >&5 +$as_echo "$EXPECT" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$EXPECT" && break done test -n "$EXPECT" || EXPECT="expect" @@ -6190,10 +7339,10 @@ for ac_prog in runtest 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_RUNTEST+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RUNTEST+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RUNTEST"; then ac_cv_prog_RUNTEST="$RUNTEST" # Let the user override the test. @@ -6203,26 +7352,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RUNTEST="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RUNTEST=$ac_cv_prog_RUNTEST if test -n "$RUNTEST"; then - echo "$as_me:$LINENO: result: $RUNTEST" >&5 -echo "${ECHO_T}$RUNTEST" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUNTEST" >&5 +$as_echo "$RUNTEST" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$RUNTEST" && break done test -n "$RUNTEST" || RUNTEST="runtest" @@ -6252,10 +7403,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -6265,26 +7416,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -6292,10 +7445,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -6305,34 +7458,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -6342,26 +7497,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_AR" && break done @@ -6387,10 +7544,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. @@ -6400,26 +7557,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then - echo "$as_me:$LINENO: result: $AS" >&5 -echo "${ECHO_T}$AS" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -6427,10 +7586,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. @@ -6440,34 +7599,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then - echo "$as_me:$LINENO: result: $AS" >&5 -echo "${ECHO_T}$AS" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. @@ -6477,26 +7638,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then - echo "$as_me:$LINENO: result: $AS" >&5 -echo "${ECHO_T}$AS" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_AS" && break done @@ -6522,10 +7685,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. @@ -6535,26 +7698,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - echo "$as_me:$LINENO: result: $DLLTOOL" >&5 -echo "${ECHO_T}$DLLTOOL" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -6562,10 +7727,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. @@ -6575,34 +7740,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - echo "$as_me:$LINENO: result: $DLLTOOL" >&5 -echo "${ECHO_T}$DLLTOOL" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. @@ -6612,26 +7779,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then - echo "$as_me:$LINENO: result: $DLLTOOL" >&5 -echo "${ECHO_T}$DLLTOOL" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_DLLTOOL" && break done @@ -6657,10 +7826,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. @@ -6670,26 +7839,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -6697,10 +7868,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. @@ -6710,34 +7881,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. @@ -6747,26 +7920,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LD=$ac_cv_prog_LD if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_LD" && break done @@ -6792,10 +7967,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. @@ -6805,26 +7980,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - echo "$as_me:$LINENO: result: $LIPO" >&5 -echo "${ECHO_T}$LIPO" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -6832,10 +8009,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. @@ -6845,34 +8022,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - echo "$as_me:$LINENO: result: $LIPO" >&5 -echo "${ECHO_T}$LIPO" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. @@ -6882,26 +8061,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then - echo "$as_me:$LINENO: result: $LIPO" >&5 -echo "${ECHO_T}$LIPO" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_LIPO" && break done @@ -6927,10 +8108,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. @@ -6940,26 +8121,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi NM=$ac_cv_prog_NM if test -n "$NM"; then - echo "$as_me:$LINENO: result: $NM" >&5 -echo "${ECHO_T}$NM" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -6967,10 +8150,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. @@ -6980,34 +8163,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi NM=$ac_cv_prog_NM if test -n "$NM"; then - echo "$as_me:$LINENO: result: $NM" >&5 -echo "${ECHO_T}$NM" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then ac_cv_prog_NM="$NM" # Let the user override the test. @@ -7017,26 +8202,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi NM=$ac_cv_prog_NM if test -n "$NM"; then - echo "$as_me:$LINENO: result: $NM" >&5 -echo "${ECHO_T}$NM" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 +$as_echo "$NM" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_NM" && break done @@ -7062,10 +8249,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -7075,26 +8262,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -7102,10 +8291,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -7115,34 +8304,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -7152,26 +8343,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_RANLIB" && break done @@ -7192,10 +8385,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -7205,26 +8398,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -7232,10 +8427,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -7245,34 +8440,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -7282,26 +8479,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_STRIP" && break done @@ -7322,10 +8521,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. @@ -7335,26 +8534,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then - echo "$as_me:$LINENO: result: $WINDRES" >&5 -echo "${ECHO_T}$WINDRES" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 +$as_echo "$WINDRES" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -7362,10 +8563,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. @@ -7375,34 +8576,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then - echo "$as_me:$LINENO: result: $WINDRES" >&5 -echo "${ECHO_T}$WINDRES" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 +$as_echo "$WINDRES" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. @@ -7412,26 +8615,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then - echo "$as_me:$LINENO: result: $WINDRES" >&5 -echo "${ECHO_T}$WINDRES" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 +$as_echo "$WINDRES" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_WINDRES" && break done @@ -7457,10 +8662,10 @@ if test -n "$ac_cv_prog_WINDMC"; then for ncn_progname in windmc; 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_WINDMC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDMC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDMC"; then ac_cv_prog_WINDMC="$WINDMC" # Let the user override the test. @@ -7470,26 +8675,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDMC="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDMC=$ac_cv_prog_WINDMC if test -n "$WINDMC"; then - echo "$as_me:$LINENO: result: $WINDMC" >&5 -echo "${ECHO_T}$WINDMC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC" >&5 +$as_echo "$WINDMC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -7497,10 +8704,10 @@ for ncn_progname in windmc; 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 "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_WINDMC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDMC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDMC"; then ac_cv_prog_WINDMC="$WINDMC" # Let the user override the test. @@ -7510,34 +8717,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDMC="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDMC=$ac_cv_prog_WINDMC if test -n "$WINDMC"; then - echo "$as_me:$LINENO: result: $WINDMC" >&5 -echo "${ECHO_T}$WINDMC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC" >&5 +$as_echo "$WINDMC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_WINDMC" && 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 "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_WINDMC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDMC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDMC"; then ac_cv_prog_WINDMC="$WINDMC" # Let the user override the test. @@ -7547,26 +8756,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDMC="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDMC=$ac_cv_prog_WINDMC if test -n "$WINDMC"; then - echo "$as_me:$LINENO: result: $WINDMC" >&5 -echo "${ECHO_T}$WINDMC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC" >&5 +$as_echo "$WINDMC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_WINDMC" && break done @@ -7592,10 +8803,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJCOPY"; then ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. @@ -7605,26 +8816,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJCOPY="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi OBJCOPY=$ac_cv_prog_OBJCOPY if test -n "$OBJCOPY"; then - echo "$as_me:$LINENO: result: $OBJCOPY" >&5 -echo "${ECHO_T}$OBJCOPY" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -7632,10 +8845,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJCOPY"; then ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. @@ -7645,34 +8858,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJCOPY="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi OBJCOPY=$ac_cv_prog_OBJCOPY if test -n "$OBJCOPY"; then - echo "$as_me:$LINENO: result: $OBJCOPY" >&5 -echo "${ECHO_T}$OBJCOPY" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJCOPY"; then ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. @@ -7682,26 +8897,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJCOPY="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi OBJCOPY=$ac_cv_prog_OBJCOPY if test -n "$OBJCOPY"; then - echo "$as_me:$LINENO: result: $OBJCOPY" >&5 -echo "${ECHO_T}$OBJCOPY" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_OBJCOPY" && break done @@ -7727,10 +8944,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. @@ -7740,26 +8957,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - echo "$as_me:$LINENO: result: $OBJDUMP" >&5 -echo "${ECHO_T}$OBJDUMP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi @@ -7767,10 +8986,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. @@ -7780,34 +8999,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ncn_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - echo "$as_me:$LINENO: result: $OBJDUMP" >&5 -echo "${ECHO_T}$OBJDUMP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. @@ -7817,26 +9038,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then - echo "$as_me:$LINENO: result: $OBJDUMP" >&5 -echo "${ECHO_T}$OBJDUMP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_OBJDUMP" && break done @@ -7855,23 +9078,22 @@ 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" - case x"$withval" in +# Check whether --with-build-time-tools was given. +if test "${with_build_time_tools+set}" = set; then : + withval=$with_build_time_tools; case x"$withval" in x/*) ;; *) with_build_time_tools= - { 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: argument to --with-build-time-tools must be an absolute path" >&5 +$as_echo "$as_me: WARNING: argument to --with-build-time-tools must be an absolute path" >&2;} ;; esac else with_build_time_tools= -fi; +fi + @@ -7885,10 +9107,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC_FOR_TARGET"; then ac_cv_prog_CC_FOR_TARGET="$CC_FOR_TARGET" # Let the user override the test. @@ -7898,41 +9120,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_TARGET" >&5 +$as_echo "$CC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + 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 "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_CC_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -7942,10 +9166,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC_FOR_TARGET"; then ac_cv_prog_CC_FOR_TARGET="$CC_FOR_TARGET" # Let the user override the test. @@ -7955,34 +9179,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_TARGET" >&5 +$as_echo "$CC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC_FOR_TARGET"; then ac_cv_prog_CC_FOR_TARGET="$CC_FOR_TARGET" # Let the user override the test. @@ -7992,26 +9218,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_TARGET" >&5 +$as_echo "$CC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_CC_FOR_TARGET" && break done @@ -8040,10 +9268,10 @@ if test -n "$ac_cv_prog_CXX_FOR_TARGET"; then for ncn_progname in c++ g++ cxx gxx; 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_CXX_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CXX_FOR_TARGET"; then ac_cv_prog_CXX_FOR_TARGET="$CXX_FOR_TARGET" # Let the user override the test. @@ -8053,41 +9281,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX_FOR_TARGET" >&5 +$as_echo "$CXX_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_CXX_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -8097,10 +9327,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CXX_FOR_TARGET"; then ac_cv_prog_CXX_FOR_TARGET="$CXX_FOR_TARGET" # Let the user override the test. @@ -8110,34 +9340,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX_FOR_TARGET" >&5 +$as_echo "$CXX_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CXX_FOR_TARGET"; then ac_cv_prog_CXX_FOR_TARGET="$CXX_FOR_TARGET" # Let the user override the test. @@ -8147,26 +9379,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX_FOR_TARGET" >&5 +$as_echo "$CXX_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_CXX_FOR_TARGET" && break done @@ -8195,10 +9429,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GCC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GCC_FOR_TARGET"; then ac_cv_prog_GCC_FOR_TARGET="$GCC_FOR_TARGET" # Let the user override the test. @@ -8208,41 +9442,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GCC_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCC_FOR_TARGET" >&5 +$as_echo "$GCC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi if test -z "$ac_cv_prog_GCC_FOR_TARGET" && test -n "$with_build_time_tools"; then for ncn_progname in gcc; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_GCC_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -8252,10 +9488,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GCC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GCC_FOR_TARGET"; then ac_cv_prog_GCC_FOR_TARGET="$GCC_FOR_TARGET" # Let the user override the test. @@ -8265,34 +9501,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GCC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCC_FOR_TARGET" >&5 +$as_echo "$GCC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GCC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GCC_FOR_TARGET"; then ac_cv_prog_GCC_FOR_TARGET="$GCC_FOR_TARGET" # Let the user override the test. @@ -8302,26 +9540,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GCC_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCC_FOR_TARGET" >&5 +$as_echo "$GCC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_GCC_FOR_TARGET" && break done @@ -8345,10 +9585,10 @@ if test -n "$ac_cv_prog_GCJ_FOR_TARGET"; then for ncn_progname in gcj; 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_GCJ_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GCJ_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GCJ_FOR_TARGET"; then ac_cv_prog_GCJ_FOR_TARGET="$GCJ_FOR_TARGET" # Let the user override the test. @@ -8358,41 +9598,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GCJ_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCJ_FOR_TARGET" >&5 +$as_echo "$GCJ_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_GCJ_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -8402,10 +9644,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GCJ_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GCJ_FOR_TARGET"; then ac_cv_prog_GCJ_FOR_TARGET="$GCJ_FOR_TARGET" # Let the user override the test. @@ -8415,34 +9657,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GCJ_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCJ_FOR_TARGET" >&5 +$as_echo "$GCJ_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GCJ_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GCJ_FOR_TARGET"; then ac_cv_prog_GCJ_FOR_TARGET="$GCJ_FOR_TARGET" # Let the user override the test. @@ -8452,26 +9696,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GCJ_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GCJ_FOR_TARGET" >&5 +$as_echo "$GCJ_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_GCJ_FOR_TARGET" && break done @@ -8500,10 +9746,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GFORTRAN_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GFORTRAN_FOR_TARGET"; then ac_cv_prog_GFORTRAN_FOR_TARGET="$GFORTRAN_FOR_TARGET" # Let the user override the test. @@ -8513,41 +9759,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GFORTRAN_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GFORTRAN_FOR_TARGET" >&5 +$as_echo "$GFORTRAN_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi if test -z "$ac_cv_prog_GFORTRAN_FOR_TARGET" && test -n "$with_build_time_tools"; then for ncn_progname in gfortran; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_GFORTRAN_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -8557,10 +9805,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GFORTRAN_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GFORTRAN_FOR_TARGET"; then ac_cv_prog_GFORTRAN_FOR_TARGET="$GFORTRAN_FOR_TARGET" # Let the user override the test. @@ -8570,34 +9818,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GFORTRAN_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GFORTRAN_FOR_TARGET" >&5 +$as_echo "$GFORTRAN_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GFORTRAN_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$GFORTRAN_FOR_TARGET"; then ac_cv_prog_GFORTRAN_FOR_TARGET="$GFORTRAN_FOR_TARGET" # Let the user override the test. @@ -8607,26 +9857,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GFORTRAN_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GFORTRAN_FOR_TARGET" >&5 +$as_echo "$GFORTRAN_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_GFORTRAN_FOR_TARGET" && break done @@ -8663,16 +9915,16 @@ rm conftest.c if test -z "$ac_cv_path_AR_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ar in $with_build_time_tools" >&5 +$as_echo_n "checking for ar in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_AR_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_AR_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_AR_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_AR_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then AR_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=ar` @@ -8683,10 +9935,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_AR_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $AR_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -8698,28 +9950,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_AR_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi AR_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR_FOR_TARGET" >&5 +$as_echo "$AR_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_AR_FOR_TARGET" ; then @@ -8734,10 +9987,10 @@ if test -n "$ac_cv_prog_AR_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR_FOR_TARGET"; then ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test. @@ -8747,41 +10000,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR_FOR_TARGET" >&5 +$as_echo "$AR_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_AR_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -8791,10 +10046,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR_FOR_TARGET"; then ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test. @@ -8804,34 +10059,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR_FOR_TARGET" >&5 +$as_echo "$AR_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR_FOR_TARGET"; then ac_cv_prog_AR_FOR_TARGET="$AR_FOR_TARGET" # Let the user override the test. @@ -8841,26 +10098,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR_FOR_TARGET" >&5 +$as_echo "$AR_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_AR_FOR_TARGET" && break done @@ -8886,16 +10145,16 @@ fi if test -z "$ac_cv_path_AS_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for as in $with_build_time_tools" >&5 +$as_echo_n "checking for as in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_AS_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_AS_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_AS_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_AS_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then AS_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=as` @@ -8906,10 +10165,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_AS_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $AS_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -8921,28 +10180,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_AS_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi AS_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS_FOR_TARGET" >&5 +$as_echo "$AS_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_AS_FOR_TARGET" ; then @@ -8957,10 +10217,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AS_FOR_TARGET"; then ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test. @@ -8970,41 +10230,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS_FOR_TARGET" >&5 +$as_echo "$AS_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_AS_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -9014,10 +10276,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AS_FOR_TARGET"; then ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test. @@ -9027,34 +10289,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS_FOR_TARGET" >&5 +$as_echo "$AS_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AS_FOR_TARGET"; then ac_cv_prog_AS_FOR_TARGET="$AS_FOR_TARGET" # Let the user override the test. @@ -9064,26 +10328,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AS_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS_FOR_TARGET" >&5 +$as_echo "$AS_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_AS_FOR_TARGET" && break done @@ -9109,16 +10375,16 @@ fi if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlltool in $with_build_time_tools" >&5 +$as_echo_n "checking for dlltool in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_DLLTOOL_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_DLLTOOL_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_DLLTOOL_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_DLLTOOL_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then DLLTOOL_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=dlltool` @@ -9129,10 +10395,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DLLTOOL_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $DLLTOOL_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -9144,28 +10410,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_DLLTOOL_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi DLLTOOL_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL_FOR_TARGET" >&5 +$as_echo "$DLLTOOL_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_DLLTOOL_FOR_TARGET" ; then @@ -9180,10 +10447,10 @@ if test -n "$ac_cv_prog_DLLTOOL_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL_FOR_TARGET"; then ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test. @@ -9193,41 +10460,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL_FOR_TARGET" >&5 +$as_echo "$DLLTOOL_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_DLLTOOL_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -9237,10 +10506,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL_FOR_TARGET"; then ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test. @@ -9250,34 +10519,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL_FOR_TARGET" >&5 +$as_echo "$DLLTOOL_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL_FOR_TARGET"; then ac_cv_prog_DLLTOOL_FOR_TARGET="$DLLTOOL_FOR_TARGET" # Let the user override the test. @@ -9287,26 +10558,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_DLLTOOL_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL_FOR_TARGET" >&5 +$as_echo "$DLLTOOL_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_DLLTOOL_FOR_TARGET" && break done @@ -9332,16 +10605,16 @@ fi if test -z "$ac_cv_path_LD_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld in $with_build_time_tools" >&5 +$as_echo_n "checking for ld in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_LD_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_LD_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_LD_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_LD_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then LD_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=ld` @@ -9352,10 +10625,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LD_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $LD_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -9367,28 +10640,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_LD_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi LD_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD_FOR_TARGET" >&5 +$as_echo "$LD_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_LD_FOR_TARGET" ; then @@ -9403,10 +10677,10 @@ if test -n "$ac_cv_prog_LD_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LD_FOR_TARGET"; then ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test. @@ -9416,41 +10690,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD_FOR_TARGET" >&5 +$as_echo "$LD_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_LD_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -9460,10 +10736,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LD_FOR_TARGET"; then ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test. @@ -9473,34 +10749,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD_FOR_TARGET" >&5 +$as_echo "$LD_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LD_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LD_FOR_TARGET"; then ac_cv_prog_LD_FOR_TARGET="$LD_FOR_TARGET" # Let the user override the test. @@ -9510,26 +10788,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LD_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD_FOR_TARGET" >&5 +$as_echo "$LD_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_LD_FOR_TARGET" && break done @@ -9555,16 +10835,16 @@ fi if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lipo in $with_build_time_tools" >&5 +$as_echo_n "checking for lipo in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_LIPO_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_LIPO_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_LIPO_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_LIPO_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then LIPO_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=lipo` @@ -9575,10 +10855,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LIPO_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $LIPO_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -9590,28 +10870,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_LIPO_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi LIPO_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO_FOR_TARGET" >&5 +$as_echo "$LIPO_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_LIPO_FOR_TARGET" ; then @@ -9626,10 +10907,10 @@ if test -n "$ac_cv_prog_LIPO_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LIPO_FOR_TARGET"; then ac_cv_prog_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test. @@ -9639,41 +10920,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO_FOR_TARGET" >&5 +$as_echo "$LIPO_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_LIPO_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -9683,10 +10966,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LIPO_FOR_TARGET"; then ac_cv_prog_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test. @@ -9696,34 +10979,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO_FOR_TARGET" >&5 +$as_echo "$LIPO_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$LIPO_FOR_TARGET"; then ac_cv_prog_LIPO_FOR_TARGET="$LIPO_FOR_TARGET" # Let the user override the test. @@ -9733,26 +11018,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_LIPO_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO_FOR_TARGET" >&5 +$as_echo "$LIPO_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_LIPO_FOR_TARGET" && break done @@ -9778,16 +11065,16 @@ fi if test -z "$ac_cv_path_NM_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nm in $with_build_time_tools" >&5 +$as_echo_n "checking for nm in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_NM_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_NM_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_NM_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_NM_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then NM_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=nm` @@ -9798,10 +11085,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_NM_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $NM_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -9813,28 +11100,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_NM_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi NM_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM_FOR_TARGET" >&5 +$as_echo "$NM_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_NM_FOR_TARGET" ; then @@ -9849,10 +11137,10 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM_FOR_TARGET"; then ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test. @@ -9862,41 +11150,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM_FOR_TARGET" >&5 +$as_echo "$NM_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_NM_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -9906,10 +11196,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM_FOR_TARGET"; then ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test. @@ -9919,34 +11209,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM_FOR_TARGET" >&5 +$as_echo "$NM_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NM_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM_FOR_TARGET"; then ac_cv_prog_NM_FOR_TARGET="$NM_FOR_TARGET" # Let the user override the test. @@ -9956,26 +11248,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_NM_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM_FOR_TARGET" >&5 +$as_echo "$NM_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_NM_FOR_TARGET" && break done @@ -10001,16 +11295,16 @@ fi if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdump in $with_build_time_tools" >&5 +$as_echo_n "checking for objdump in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_OBJDUMP_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_OBJDUMP_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_OBJDUMP_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_OBJDUMP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then OBJDUMP_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=objdump` @@ -10021,10 +11315,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OBJDUMP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $OBJDUMP_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -10036,28 +11330,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_OBJDUMP_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi OBJDUMP_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP_FOR_TARGET" >&5 +$as_echo "$OBJDUMP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_OBJDUMP_FOR_TARGET" ; then @@ -10072,10 +11367,10 @@ if test -n "$ac_cv_prog_OBJDUMP_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP_FOR_TARGET"; then ac_cv_prog_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test. @@ -10085,41 +11380,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP_FOR_TARGET" >&5 +$as_echo "$OBJDUMP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_OBJDUMP_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -10129,10 +11426,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP_FOR_TARGET"; then ac_cv_prog_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test. @@ -10142,34 +11439,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP_FOR_TARGET" >&5 +$as_echo "$OBJDUMP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP_FOR_TARGET"; then ac_cv_prog_OBJDUMP_FOR_TARGET="$OBJDUMP_FOR_TARGET" # Let the user override the test. @@ -10179,26 +11478,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_OBJDUMP_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP_FOR_TARGET" >&5 +$as_echo "$OBJDUMP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_OBJDUMP_FOR_TARGET" && break done @@ -10224,16 +11525,16 @@ fi if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ranlib in $with_build_time_tools" >&5 +$as_echo_n "checking for ranlib in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_RANLIB_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_RANLIB_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_RANLIB_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_RANLIB_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then RANLIB_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=ranlib` @@ -10244,10 +11545,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RANLIB_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $RANLIB_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -10259,28 +11560,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_RANLIB_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi RANLIB_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB_FOR_TARGET" >&5 +$as_echo "$RANLIB_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_RANLIB_FOR_TARGET" ; then @@ -10295,10 +11597,10 @@ if test -n "$ac_cv_prog_RANLIB_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB_FOR_TARGET"; then ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test. @@ -10308,41 +11610,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB_FOR_TARGET" >&5 +$as_echo "$RANLIB_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_RANLIB_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -10352,10 +11656,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB_FOR_TARGET"; then ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test. @@ -10365,34 +11669,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB_FOR_TARGET" >&5 +$as_echo "$RANLIB_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB_FOR_TARGET"; then ac_cv_prog_RANLIB_FOR_TARGET="$RANLIB_FOR_TARGET" # Let the user override the test. @@ -10402,26 +11708,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB_FOR_TARGET" >&5 +$as_echo "$RANLIB_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_RANLIB_FOR_TARGET" && break done @@ -10447,16 +11755,16 @@ fi if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strip in $with_build_time_tools" >&5 +$as_echo_n "checking for strip in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_STRIP_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_STRIP_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_STRIP_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_STRIP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then STRIP_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=strip` @@ -10467,10 +11775,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_STRIP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $STRIP_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -10482,28 +11790,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_STRIP_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi STRIP_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP_FOR_TARGET" >&5 +$as_echo "$STRIP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_STRIP_FOR_TARGET" ; then @@ -10518,10 +11827,10 @@ if test -n "$ac_cv_prog_STRIP_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP_FOR_TARGET"; then ac_cv_prog_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test. @@ -10531,41 +11840,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP_FOR_TARGET" >&5 +$as_echo "$STRIP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_STRIP_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -10575,10 +11886,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP_FOR_TARGET"; then ac_cv_prog_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test. @@ -10588,34 +11899,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP_FOR_TARGET" >&5 +$as_echo "$STRIP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP_FOR_TARGET"; then ac_cv_prog_STRIP_FOR_TARGET="$STRIP_FOR_TARGET" # Let the user override the test. @@ -10625,26 +11938,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP_FOR_TARGET" >&5 +$as_echo "$STRIP_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_STRIP_FOR_TARGET" && break done @@ -10670,16 +11985,16 @@ fi if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windres in $with_build_time_tools" >&5 +$as_echo_n "checking for windres in $with_build_time_tools... " >&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 "$as_me:$LINENO: result: $ac_cv_path_WINDRES_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_WINDRES_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_WINDRES_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_WINDRES_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then WINDRES_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=windres` @@ -10690,10 +12005,10 @@ fi 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WINDRES_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $WINDRES_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -10705,28 +12020,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_WINDRES_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi WINDRES_FOR_TARGET=$ac_cv_path_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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES_FOR_TARGET" >&5 +$as_echo "$WINDRES_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_WINDRES_FOR_TARGET" ; then @@ -10741,10 +12057,10 @@ if test -n "$ac_cv_prog_WINDRES_FOR_TARGET"; 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_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDRES_FOR_TARGET"; then ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test. @@ -10754,41 +12070,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES_FOR_TARGET" >&5 +$as_echo "$WINDRES_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_WINDRES_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -10798,10 +12116,10 @@ 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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDRES_FOR_TARGET"; then ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test. @@ -10811,34 +12129,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES_FOR_TARGET" >&5 +$as_echo "$WINDRES_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "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 "$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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDRES_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDRES_FOR_TARGET"; then ac_cv_prog_WINDRES_FOR_TARGET="$WINDRES_FOR_TARGET" # Let the user override the test. @@ -10848,26 +12168,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES_FOR_TARGET" >&5 +$as_echo "$WINDRES_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_WINDRES_FOR_TARGET" && break done @@ -10893,16 +12215,16 @@ fi if test -z "$ac_cv_path_WINDMC_FOR_TARGET" ; then if test -n "$with_build_time_tools"; then - echo "$as_me:$LINENO: checking for windmc in $with_build_time_tools" >&5 -echo $ECHO_N "checking for windmc in $with_build_time_tools... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for windmc in $with_build_time_tools" >&5 +$as_echo_n "checking for windmc in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/windmc; then WINDMC_FOR_TARGET=`cd $with_build_time_tools && pwd`/windmc ac_cv_path_WINDMC_FOR_TARGET=$WINDMC_FOR_TARGET - echo "$as_me:$LINENO: result: $ac_cv_path_WINDMC_FOR_TARGET" >&5 -echo "${ECHO_T}$ac_cv_path_WINDMC_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_WINDMC_FOR_TARGET" >&5 +$as_echo "$ac_cv_path_WINDMC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi elif test $build != $host && test $have_gcc_for_target = yes; then WINDMC_FOR_TARGET=`$GCC_FOR_TARGET --print-prog-name=windmc` @@ -10913,10 +12235,10 @@ fi if test -z "$ac_cv_path_WINDMC_FOR_TARGET" && test -n "$gcc_cv_tool_dirs"; then # Extract the first word of "windmc", so it can be a program name with args. set dummy windmc; 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_WINDMC_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WINDMC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $WINDMC_FOR_TARGET in [\\/]* | ?:[\\/]*) @@ -10928,28 +12250,29 @@ 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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_WINDMC_FOR_TARGET="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi WINDMC_FOR_TARGET=$ac_cv_path_WINDMC_FOR_TARGET - if test -n "$WINDMC_FOR_TARGET"; then - echo "$as_me:$LINENO: result: $WINDMC_FOR_TARGET" >&5 -echo "${ECHO_T}$WINDMC_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC_FOR_TARGET" >&5 +$as_echo "$WINDMC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_path_WINDMC_FOR_TARGET" ; then @@ -10964,10 +12287,10 @@ if test -n "$ac_cv_prog_WINDMC_FOR_TARGET"; then for ncn_progname in windmc; 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_WINDMC_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDMC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDMC_FOR_TARGET"; then ac_cv_prog_WINDMC_FOR_TARGET="$WINDMC_FOR_TARGET" # Let the user override the test. @@ -10977,41 +12300,43 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDMC_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDMC_FOR_TARGET=$ac_cv_prog_WINDMC_FOR_TARGET if test -n "$WINDMC_FOR_TARGET"; then - echo "$as_me:$LINENO: result: $WINDMC_FOR_TARGET" >&5 -echo "${ECHO_T}$WINDMC_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC_FOR_TARGET" >&5 +$as_echo "$WINDMC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + done fi if test -z "$ac_cv_prog_WINDMC_FOR_TARGET" && test -n "$with_build_time_tools"; then for ncn_progname in windmc; 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ncn_progname} in $with_build_time_tools" >&5 +$as_echo_n "checking for ${ncn_progname} in $with_build_time_tools... " >&6; } if test -x $with_build_time_tools/${ncn_progname}; then ac_cv_prog_WINDMC_FOR_TARGET=$with_build_time_tools/${ncn_progname} - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } break else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi done fi @@ -11021,10 +12346,10 @@ if test -z "$ac_cv_prog_WINDMC_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 "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_WINDMC_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDMC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDMC_FOR_TARGET"; then ac_cv_prog_WINDMC_FOR_TARGET="$WINDMC_FOR_TARGET" # Let the user override the test. @@ -11034,34 +12359,36 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDMC_FOR_TARGET="${ncn_target_tool_prefix}${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDMC_FOR_TARGET=$ac_cv_prog_WINDMC_FOR_TARGET if test -n "$WINDMC_FOR_TARGET"; then - echo "$as_me:$LINENO: result: $WINDMC_FOR_TARGET" >&5 -echo "${ECHO_T}$WINDMC_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC_FOR_TARGET" >&5 +$as_echo "$WINDMC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_WINDMC_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 "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_WINDMC_FOR_TARGET+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WINDMC_FOR_TARGET+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$WINDMC_FOR_TARGET"; then ac_cv_prog_WINDMC_FOR_TARGET="$WINDMC_FOR_TARGET" # Let the user override the test. @@ -11071,26 +12398,28 @@ for as_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 + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDMC_FOR_TARGET="${ncn_progname}" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi WINDMC_FOR_TARGET=$ac_cv_prog_WINDMC_FOR_TARGET if test -n "$WINDMC_FOR_TARGET"; then - echo "$as_me:$LINENO: result: $WINDMC_FOR_TARGET" >&5 -echo "${ECHO_T}$WINDMC_FOR_TARGET" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDMC_FOR_TARGET" >&5 +$as_echo "$WINDMC_FOR_TARGET" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi test -n "$ac_cv_prog_WINDMC_FOR_TARGET" && break done @@ -11114,18 +12443,18 @@ fi RAW_CXX_FOR_TARGET="$CXX_FOR_TARGET" -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ar" >&5 +$as_echo_n "checking where to find the target ar... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11137,37 +12466,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$AR_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool AR_FOR_TARGET='$(AR)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target as" >&5 +$as_echo_n "checking where to find the target as... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11179,37 +12508,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$AS_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool AS_FOR_TARGET='$(AS)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target cc" >&5 +$as_echo_n "checking where to find the target cc... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11221,37 +12550,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$CC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool CC_FOR_TARGET='$(CC)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target c++" >&5 +$as_echo_n "checking where to find the target 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 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11266,37 +12595,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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$CXX_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool CXX_FOR_TARGET='$(CXX)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target c++ for libstdc++" >&5 +$as_echo_n "checking where to find the target c++ for libstdc++... " >&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 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11311,37 +12640,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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$RAW_CXX_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "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 "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target dlltool" >&5 +$as_echo_n "checking where to find the target dlltool... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11353,37 +12682,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$DLLTOOL_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool DLLTOOL_FOR_TARGET='$(DLLTOOL)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target gcc" >&5 +$as_echo_n "checking where to find the target gcc... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11395,37 +12724,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$GCC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool GCC_FOR_TARGET='$()' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target gcj" >&5 +$as_echo_n "checking where to find the target gcj... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11440,37 +12769,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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$GCJ_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool GCJ_FOR_TARGET='$(GCJ)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target gfortran" >&5 +$as_echo_n "checking where to find the target gfortran... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11485,37 +12814,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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$GFORTRAN_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool GFORTRAN_FOR_TARGET='$(GFORTRAN)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ld" >&5 +$as_echo_n "checking where to find the target ld... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11527,68 +12856,68 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$LD_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool LD_FOR_TARGET='$(LD)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target lipo" >&5 +$as_echo_n "checking where to find the target lipo... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else if expr "x$LIPO_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool LIPO_FOR_TARGET='$(LIPO)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target nm" >&5 +$as_echo_n "checking where to find the target nm... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11600,37 +12929,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$NM_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool NM_FOR_TARGET='$(NM)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target objdump" >&5 +$as_echo_n "checking where to find the target objdump... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11642,37 +12971,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$OBJDUMP_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool OBJDUMP_FOR_TARGET='$(OBJDUMP)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target ranlib" >&5 +$as_echo_n "checking where to find the target ranlib... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11684,37 +13013,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$RANLIB_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool RANLIB_FOR_TARGET='$(RANLIB)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target strip" >&5 +$as_echo_n "checking where to find the target strip... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11726,37 +13055,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$STRIP_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool STRIP_FOR_TARGET='$(STRIP)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target windres" >&5 +$as_echo_n "checking where to find the target windres... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11768,37 +13097,37 @@ else 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 "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$WINDRES_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool WINDRES_FOR_TARGET='$(WINDRES)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi -echo "$as_me:$LINENO: checking where to find the target windmc" >&5 -echo $ECHO_N "checking where to find the target windmc... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the target windmc" >&5 +$as_echo_n "checking where to find the target windmc... " >&6; } if test "x${build}" != "x${host}" ; then if expr "x$WINDMC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path ac_dir=`dirname $WINDMC_FOR_TARGET` - echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5 -echo "${ECHO_T}pre-installed in $ac_dir" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } else # Canadian cross, just use what we found - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi else ok=yes @@ -11810,22 +13139,22 @@ else if test $ok = yes; then # An in-tree tool is available and we can use it WINDMC_FOR_TARGET='$$r/$(HOST_SUBDIR)/binutils/windmc' - echo "$as_me:$LINENO: result: just compiled" >&5 -echo "${ECHO_T}just compiled" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: just compiled" >&5 +$as_echo "just compiled" >&6; } elif expr "x$WINDMC_FOR_TARGET" : "x/" > /dev/null; then # We already found the complete path ac_dir=`dirname $WINDMC_FOR_TARGET` - echo "$as_me:$LINENO: result: pre-installed in $ac_dir" >&5 -echo "${ECHO_T}pre-installed in $ac_dir" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed in $ac_dir" >&5 +$as_echo "pre-installed in $ac_dir" >&6; } elif test "x$target" = "x$host"; then # We can use an host tool WINDMC_FOR_TARGET='$(WINDMC)' - echo "$as_me:$LINENO: result: host tool" >&5 -echo "${ECHO_T}host tool" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: host tool" >&5 +$as_echo "host tool" >&6; } else # We need a cross tool - echo "$as_me:$LINENO: result: pre-installed" >&5 -echo "${ECHO_T}pre-installed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: pre-installed" >&5 +$as_echo "pre-installed" >&6; } fi fi @@ -11857,17 +13186,17 @@ 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 +$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } +# Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no -fi; -echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 -echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 +$as_echo "$USE_MAINTAINER_MODE" >&6; } if test "$USE_MAINTAINER_MODE" = yes; then @@ -11894,18 +13223,14 @@ case $build in esac # This is aimed to mimic bootstrap with a non-GCC compiler to catch problems. -if test "$GCC" = yes; then +if test "$GCC" = yes -a "$ENABLE_BUILD_WITH_CXX" != 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 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fkeep-inline-functions is supported" >&5 +$as_echo_n "checking whether -fkeep-inline-functions is supported... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (__GNUC__ < 3) \ @@ -11922,38 +13247,14 @@ 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" +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "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 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$saved_CFLAGS" fi @@ -11961,80 +13262,48 @@ 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} +# Check whether --enable-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 + if test "x$enable_checking" = xno || test "x$enable_checking" = x; then + stage1_checking=--enable-checking=yes,types else - stage1_checking=--enable-checking${enable_checking+=}$enable_checking + stage1_checking=--enable-checking=$enable_checking,types +fi fi -fi; -# Enable -Werror in bootstrap stage2 and later. -# Check whether --enable-werror or --disable-werror was given. -if test "${enable_werror+set}" = set; then - enableval="$enable_werror" +# Enable -Werror in bootstrap stage2 and later. +# Check whether --enable-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; +fi + case ${enable_werror} in yes) stage2_werror_flag="--enable-werror-always" ;; *) stage2_werror_flag="" ;; 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; - - -# Check whether --with-docdir or --without-docdir was given. -if test "${with_docdir+set}" = set; then - withval="$with_docdir" - docdir="\${prefix}/${withval}" -else - docdir="\${datarootdir}/doc" -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. -if test "${with_htmldir+set}" = set; then - withval="$with_htmldir" - htmldir="\${prefix}/${withval}" -else - htmldir="\${docdir}" -fi; - - +# Specify what files to not compare during bootstrap. +compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*" +case "$target" in + hppa*64*-*-hpux*) ;; + hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/*" ;; +esac +ac_config_files="$ac_config_files Makefile" - 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 @@ -12053,39 +13322,59 @@ _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. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(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 \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : 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" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -12094,63 +13383,54 @@ 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 - # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that -# take arguments), then we branch to the quote section. Otherwise, +# take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\_ACEOF +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +:clear +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 -p -_ACEOF -# We use echo to avoid assuming a particular line-breaking character. -# The extra dot is to prevent the shell from consuming trailing -# line-breaks from the sub-command output. A line-break within -# single-quotes doesn't work because, if this script is created in a -# platform that uses two characters for line-breaks (e.g., DOS), tr -# would break. -ac_LF_and_DOT=`echo; echo .` -DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` -rm -f confdef2opt.sed +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.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' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs @@ -12159,11 +13439,13 @@ LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -12173,81 +13455,252 @@ cat >$CONFIG_STATUS <<_ACEOF 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 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi -done + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -12255,148 +13708,123 @@ 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -12405,31 +13833,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. 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 - +# values after options handling. +ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -12437,125 +13854,108 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac -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_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE Configuration files: $config_files -Report bugs to ." -_ACEOF +Report bugs to the package provider." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.64, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _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. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_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 ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { 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; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -12569,30 +13969,44 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 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 + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. 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; }; };; + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -12602,441 +14016,447 @@ if $ac_need_defaults; then 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, +# simply because there is no reason against having 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. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + +if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then + ac_cs_awk_getline=: + ac_cs_awk_pipe_init= + ac_cs_awk_read_file=' + while ((getline aline < (F[key])) > 0) + print(aline) + close(F[key])' + ac_cs_awk_pipe_fini= +else + ac_cs_awk_getline=false + ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" + ac_cs_awk_read_file=' + print "|#_!!_#|" + print "cat " F[key] " &&" + '$ac_cs_awk_pipe_init + # The final `:' finishes the AND list. + ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' +fi +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + +# Create commands to substitute file output variables. { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } -} + echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && + echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' && + echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && + echo "_ACAWK" && + echo "_ACEOF" +} >conf$$files.sh && +. ./conf$$files.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +rm -f conf$$files.sh +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + \$ac_cs_awk_pipe_init +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + if (nfields == 3 && !substed) { + key = field[2] + if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { + \$ac_cs_awk_read_file + next + } + } + print line +} +\$ac_cs_awk_pipe_fini +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi -# -# CONFIG_FILES section. -# +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" -# 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,@WINDMC@,$WINDMC,;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,@WINDMC_FOR_TARGET@,$WINDMC_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@,,;t t -/@host_makefile_frag@/r $host_makefile_frag -s,@host_makefile_frag@,,;t t -/@target_makefile_frag@/r $target_makefile_frag -s,@target_makefile_frag@,,;t t -/@alphaieee_frag@/r $alphaieee_frag -s,@alphaieee_frag@,,;t t -/@ospace_frag@/r $ospace_frag -s,@ospace_frag@,,;t t -CEOF -_ACEOF +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift - 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` + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi -fi # test -n "$CONFIG_FILES" + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac -_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 ;; + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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 ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# 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 $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac +_ACEOF - 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; } +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :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 +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | +if $ac_cs_awk_getline; then + $AWK -f "$tmp/subs.awk" +else + $AWK -f "$tmp/subs.awk" | $SHELL +fi >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } + esac + +done # for ac_tag + + +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -13056,6 +14476,10 @@ if test "$no_create" != yes; then 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; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/configure.ac b/configure.ac index 9dccef7..1454f86 100644 --- a/configure.ac +++ b/configure.ac @@ -1,9 +1,10 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -# 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. +# 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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 +# the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but @@ -12,16 +13,47 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program; see the file COPYING3. If not see +# . ############################################################################## ### WARNING: this file contains embedded tabs. Do not run untabify on this file. -sinclude(config/acx.m4) +m4_include(config/acx.m4) +m4_include(config/override.m4) +m4_include(config/proginstall.m4) AC_INIT(move-if-change) -AC_PREREQ(2.59) +AC_PREREQ(2.64) +AC_DISABLE_OPTION_CHECKING + +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 +if test "$silent" = yes; then + TOPLEVEL_CONFIGURE_ARGUMENTS="$TOPLEVEL_CONFIGURE_ARGUMENTS --silent" +fi +# 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) # Find the build, host, and target systems. ACX_NONCANONICAL_BUILD @@ -41,11 +73,14 @@ AC_CANONICAL_SYSTEM AC_ARG_PROGRAM m4_pattern_allow([^AS_FOR_TARGET$])dnl +m4_pattern_allow([^AS_FOR_BUILD$])dnl # Get 'install' or 'install-sh' and its variants. AC_PROG_INSTALL ACX_PROG_LN AC_PROG_LN_S +AC_PROG_SED +AC_PROG_AWK ### 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 @@ -81,31 +116,6 @@ 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}` @@ -151,14 +161,15 @@ 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 gmp mpfr" +host_libs="intl mmalloc libiberty opcodes bfd readline tcl tk itcl libgui zlib libcpp libdecnumber gmp mpfr mpc ppl cloog libiconv" # 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" +# If --enable-gold is used, "gold" will replace "ld". +host_tools="byacc flex bison binutils gas ld fixincludes gcc cgen 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 \ @@ -173,6 +184,7 @@ target_libraries="target-libgcc \ target-libiberty \ target-libgloss \ target-newlib \ + target-libgomp \ target-libstdc++-v3 \ target-libmudflap \ target-libssp \ @@ -180,8 +192,7 @@ target_libraries="target-libgcc \ target-boehm-gc \ ${libgcj} \ target-libobjc \ - target-libada \ - target-libgomp" + target-libada" # these tools are built using the target libraries, and are intended to # run only in the target environment @@ -203,6 +214,10 @@ configdirs=`echo ${host_libs} ${host_tools}` target_configdirs=`echo ${target_libraries} ${target_tools}` build_configdirs=`echo ${build_libs} ${build_tools}` +m4_divert_text([PARSE_ARGS], +[ac_subdirs_all=`cd $srcdir && echo */configure | sed 's,/configure,,g'` +]) + ################################################################################ srcname="gnu development package" @@ -230,7 +245,7 @@ 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" + noconfigdirs="$noconfigdirs ld gold" fi use_gnu_as= @@ -281,6 +296,38 @@ case ${with_newlib} in yes) skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` ;; esac +# Handle --enable-gold. + +AC_ARG_ENABLE(gold, +[ --enable-gold use gold instead of ld], +ENABLE_GOLD=$enableval, +ENABLE_GOLD=no) +if test "${ENABLE_GOLD}" = "yes"; then + # Check for ELF target. + is_elf=no + case "${target}" in + *-*-elf* | *-*-sysv4* | *-*-unixware* | *-*-eabi* | hppa*64*-*-hpux* \ + | *-*-linux* | frv-*-uclinux* | *-*-irix5* | *-*-irix6* \ + | *-*-netbsd* | *-*-openbsd* | *-*-freebsd* | *-*-solaris2* | *-*-nto*) + case "${target}" in + *-*-linux*aout* | *-*-linux*oldld*) + ;; + *) + is_elf=yes + ;; + esac + esac + + if test "$is_elf" = "yes"; then + # Check for target supported by gold. + case "${target}" in + i?86-*-* | x86_64-*-* | sparc*-*-* | powerpc*-*-* | arm*-*-*) + configdirs="`echo " ${configdirs} " | sed -e 's/ ld / gold /'`" + ;; + esac + fi +fi + # Configure extra directories which are host specific case "${host}" in @@ -364,7 +411,7 @@ esac # Disable libmudflap on some systems. if test x$enable_libmudflap = x ; then case "${target}" in - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | bfin*-*-uclinux*) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | bfin*-*-uclinux* | *-*-kopensolaris*-gnu) # Enable libmudflap by default in GNU and friends. ;; *-*-freebsd*) @@ -381,7 +428,7 @@ fi if test x$enable_libgomp = x ; then # Enable libgomp by default on hosted POSIX systems. case "${target}" in - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) ;; *-*-netbsd* | *-*-freebsd* | *-*-openbsd*) ;; @@ -395,13 +442,23 @@ if test x$enable_libgomp = x ; then esac fi +# Default libgloss CPU subdirectory. +libgloss_dir="$target_cpu" 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" + powerpc-*-darwin*) + noconfigdirs="$noconfigdirs ld gas gdb gprof" + noconfigdirs="$noconfigdirs sim target-rda" + ;; + i[[3456789]]86-*-darwin*) + noconfigdirs="$noconfigdirs ld gprof" + noconfigdirs="$noconfigdirs sim target-rda" + ;; + x86_64-*-darwin[[912]]*) + noconfigdirs="$noconfigdirs ld gas gprof" noconfigdirs="$noconfigdirs sim target-rda" ;; *-*-darwin*) @@ -501,6 +558,7 @@ case "${target}" in *) noconfigdirs="$noconfigdirs gdb readline" ;; esac + libgloss_dir=wince ;; arc-*-*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" @@ -509,19 +567,22 @@ case "${target}" in ;; arm-*-coff | strongarm-*-coff | xscale-*-coff) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=arm ;; arm-*-elf* | strongarm-*-elf* | xscale-*-elf* | arm*-*-eabi* ) noconfigdirs="$noconfigdirs target-libffi target-qthreads" + libgloss_dir=arm ;; arm*-*-linux-gnueabi) - noconfigdirs="$noconfigdirs target-libffi target-qthreads" - noconfigdirs="$noconfigdirs target-libjava target-libobjc" + noconfigdirs="$noconfigdirs target-qthreads" case ${with_newlib} in no) noconfigdirs="$noconfigdirs target-newlib target-libgloss" esac + libgloss_dir=arm ;; arm*-*-symbianelf*) noconfigdirs="$noconfigdirs ${libgcj} target-libiberty" + libgloss_dir=arm ;; arm-*-pe*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" @@ -539,7 +600,7 @@ case "${target}" in noconfigdirs="$noconfigdirs ld target-libgloss ${libgcj}" ;; avr-*-*) - noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" + noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj} target-libssp" ;; bfin-*-*) noconfigdirs="$noconfigdirs gdb" @@ -553,6 +614,9 @@ case "${target}" in c54x*-*-* | tic54x-*-*) noconfigdirs="$noconfigdirs target-libstdc++-v3 target-libgloss ${libgcj} gcc gdb newlib" ;; + cr16-*-*) + noconfigdirs="$noconfigdirs ${libgcj} gdb" + ;; cris-*-* | crisv32-*-*) unsupported_languages="$unsupported_languages java" case "${target}" in @@ -560,7 +624,6 @@ case "${target}" in 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";; @@ -568,6 +631,7 @@ case "${target}" in unsupported_languages="$unsupported_languages fortran" noconfigdirs="$noconfigdirs ${libgcj} target-newlib target-libgloss";; esac + libgloss_dir=cris ;; crx-*-*) noconfigdirs="$noconfigdirs target-libstdc++-v3 target-mudflap ${libgcj}" @@ -578,12 +642,19 @@ case "${target}" in d30v-*-*) noconfigdirs="$noconfigdirs ${libgcj} gdb" ;; + ep9312-*-elf | ep9312-*-coff) + libgloss_dir=arm + ;; fr30-*-elf*) noconfigdirs="$noconfigdirs ${libgcj} gdb" ;; frv-*-*) noconfigdirs="$noconfigdirs ${libgcj}" ;; + moxie-*-*) + noconfigdirs="$noconfigdirs ${libgcj}" + noconfigdirs="$noconfigdirs gprof" + ;; h8300*-*-*) noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; @@ -609,6 +680,9 @@ case "${target}" in hppa*-hp-hpux11*) noconfigdirs="$noconfigdirs ld shellutils" ;; + hppa*-*-pro*) + libgloss_dir=pa + ;; hppa*-*-*) # According to Alexandre Oliva , libjava won't # build on HP-UX 10.20. @@ -625,10 +699,15 @@ case "${target}" in # No gdb or ld support yet. noconfigdirs="$noconfigdirs ${libgcj} readline mmalloc libgui itcl gdb ld" ;; + ia64*-*-*vms*) + # No gdb or ld support yet. + noconfigdirs="$noconfigdirs ${libgcj} tix readline mmalloc libgui itcl gdb ld" + ;; i370-*-opened*) ;; i[[3456789]]86-*-coff | i[[3456789]]86-*-elf) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=i386 ;; i[[3456789]]86-*-linux*) # The GCC port for glibc1 has no MD_FALLBACK_FRAME_STATE_FOR, so let's @@ -659,7 +738,7 @@ case "${target}" in ;; *-*-cygwin*) target_configdirs="$target_configdirs target-libtermcap target-winsup" - noconfigdirs="$noconfigdirs target-gperf target-libgloss ${libgcj}" + noconfigdirs="$noconfigdirs target-gperf target-libgloss" # always build newlib if winsup directory is present. if test -d "$srcdir/winsup/cygwin"; then skipdirs=`echo " ${skipdirs} " | sed -e 's/ target-newlib / /'` @@ -698,6 +777,7 @@ case "${target}" in ;; m68hc11-*-*|m6811-*-*|m68hc12-*-*|m6812-*-*) noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" + libgloss_dir=m68hc11 ;; m68k-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" @@ -705,6 +785,9 @@ case "${target}" in m68k-*-coff*) noconfigdirs="$noconfigdirs ${libgcj}" ;; + m68*-*-* | fido-*-*) + libgloss_dir=m68k + ;; mcore-*-pe*) # The EPOC C++ environment does not support exceptions or rtti, # and so building libstdc++-v3 tends not to always work. @@ -725,7 +808,7 @@ case "${target}" in ;; powerpc-*-aix*) # copied from rs6000-*-* entry - noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}" + noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp target-newlib ${libgcj}" ;; powerpc*-*-winnt* | powerpc*-*-pe* | ppc*-*-pe) target_configdirs="$target_configdirs target-winsup" @@ -736,20 +819,23 @@ case "${target}" in # This is temporary until we can link against shared libraries powerpcle-*-solaris*) noconfigdirs="$noconfigdirs gdb sim make tcl tk expect itcl gnuserv ${libgcj}" + libgloss_dir=rs6000 ;; powerpc-*-beos*) noconfigdirs="$noconfigdirs gdb target-newlib target-libgloss ${libgcj}" ;; powerpc-*-eabi) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=rs6000 ;; powerpc-*-eabi* | powerpcle-*-eabi* | powerpc-*-rtems* ) + libgloss_dir=rs6000 ;; rs6000-*-lynxos*) noconfigdirs="$noconfigdirs target-newlib gprof ${libgcj}" ;; rs6000-*-aix*) - noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp ${libgcj}" + noconfigdirs="$noconfigdirs gprof target-libgloss target-libssp target-newlib ${libgcj}" ;; rs6000-*-*) noconfigdirs="$noconfigdirs gprof ${libgcj}" @@ -757,6 +843,17 @@ case "${target}" in m68k-apollo-*) noconfigdirs="$noconfigdirs ld binutils gprof target-libgloss ${libgcj}" ;; + microblaze*) + noconfigdirs="$noconfigdirs gprof ${libgcj}" + ;; + mips*-sde-elf*) + skipdirs="$skipdirs target-libiberty" + noconfigdirs="$noconfigdirs ${libgcj}" + if test x$with_newlib = xyes; then + noconfigdirs="$noconfigdirs gprof" + fi + libgloss_dir=mips + ;; mips*-*-irix5*) noconfigdirs="$noconfigdirs gprof target-libgloss ${libgcj}" ;; @@ -770,14 +867,12 @@ case "${target}" in 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}" + libgloss_dir=mips ;; romp-*-*) noconfigdirs="$noconfigdirs bfd binutils ld gas opcodes target-libgloss ${libgcj}" @@ -789,16 +884,26 @@ case "${target}" in i[[3456789]]86-*-msdosdjgpp*) ;; # don't add gprof back in *) skipdirs=`echo " ${skipdirs} " | sed -e 's/ gprof / /'` ;; esac - noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" + case "${target}" in + sh*-*-elf) + noconfigdirs="$noconfigdirs ${libgcj}" ;; + *) + noconfigdirs="$noconfigdirs target-libgloss ${libgcj}" ;; + esac + ;; + sparclet-*-aout* | sparc86x-*-*) + libgloss_dir=sparc ;; sparc-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" ;; sparc64-*-elf*) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=sparc ;; sparclite-*-*) noconfigdirs="$noconfigdirs ${libgcj}" + libgloss_dir=sparc ;; sparc-*-sunos4*) noconfigdirs="$noconfigdirs ${libgcj}" @@ -813,9 +918,6 @@ 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}" ;; @@ -834,13 +936,13 @@ case "${target}" in vax-*-*) noconfigdirs="$noconfigdirs target-newlib target-libgloss ${libgcj}" ;; - xtensa-*-*) + xtensa*-*-*) noconfigdirs="$noconfigdirs ${libgcj}" ;; ip2k-*-*) noconfigdirs="$noconfigdirs target-libiberty target-libstdc++-v3 ${libgcj}" ;; - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) noconfigdirs="$noconfigdirs target-newlib target-libgloss" ;; *-*-lynxos*) @@ -968,11 +1070,11 @@ case "${host}" in host_makefile_frag="config/mh-djgpp" ;; *-cygwin*) + ACX_CHECK_CYGWIN_CAT_WORKS host_makefile_frag="config/mh-cygwin" ;; - *-mingw32*) - ;; - *-mingw64*) + *-mingw*) + host_makefile_frag="config/mh-mingw" ;; *-interix*) host_makefile_frag="config/mh-interix" @@ -989,10 +1091,18 @@ case "${host}" in # without overflowing the jump tables (-J says to use a 32 bit table) tentative_cc="cc -J" ;; - *-hp-hpux*) + hppa*-hp-hpux10*) tentative_cc="cc -Wp,-H256000" + host_makefile_frag="config/mh-pa-hpux10" ;; - *-*-hiux*) + hppa*-hp-hpux* | hppa*-*-hiux*) + tentative_cc="cc -Wp,-H256000" + host_makefile_frag="config/mh-pa" + ;; + hppa*-*) + host_makefile_frag="config/mh-pa" + ;; + *-hp-hpux* | *-*-hiux*) tentative_cc="cc -Wp,-H256000" ;; rs6000-*-lynxos*) @@ -1044,9 +1154,31 @@ if test -z "${CC}" && test "${build}" = "${host}" ; then fi if test "${build}" != "${host}" ; then + AR_FOR_BUILD=${AR_FOR_BUILD-ar} + AS_FOR_BUILD=${AS_FOR_BUILD-as} CC_FOR_BUILD=${CC_FOR_BUILD-gcc} + CXX_FOR_BUILD=${CXX_FOR_BUILD-g++} + GCJ_FOR_BUILD=${GCJ_FOR_BUILD-gcj} + GFORTRAN_FOR_BUILD=${GFORTRAN_FOR_BUILD-gfortran} + DLLTOOL_FOR_BUILD=${DLLTOOL_FOR_BUILD-dlltool} + LD_FOR_BUILD=${LD_FOR_BUILD-ld} + NM_FOR_BUILD=${NM_FOR_BUILD-nm} + RANLIB_FOR_BUILD=${RANLIB_FOR_BUILD-ranlib} + WINDRES_FOR_BUILD=${WINDRES_FOR_BUILD-windres} + WINDMC_FOR_BUILD=${WINDMC_FOR_BUILD-windmc} else + AR_FOR_BUILD="\$(AR)" + AS_FOR_BUILD="\$(AS)" CC_FOR_BUILD="\$(CC)" + CXX_FOR_BUILD="\$(CXX)" + GCJ_FOR_BUILD="\$(GCJ)" + GFORTRAN_FOR_BUILD="\$(GFORTRAN)" + DLLTOOL_FOR_BUILD="\$(DLLTOOL)" + LD_FOR_BUILD="\$(LD)" + NM_FOR_BUILD="\$(NM)" + RANLIB_FOR_BUILD="\$(RANLIB)" + WINDRES_FOR_BUILD="\$(WINDRES)" + WINDMC_FOR_BUILD="\$(WINDMC)" fi AC_PROG_CC @@ -1074,10 +1206,48 @@ fi ACX_PROG_GNAT ACX_PROG_CMP_IGNORE_INITIAL -# Check for GMP and MPFR +# See if we are building gcc with C++. +AC_ARG_ENABLE(build-with-cxx, +[ --enable-build-with-cxx build with C++ compiler instead of C compiler], +ENABLE_BUILD_WITH_CXX=$enableval, +ENABLE_BUILD_WITH_CXX=no) + +# Check for GMP, MPFR and MPC gmplibs="-lmpfr -lgmp" gmpinc= have_gmp=no +mpclibs=-lmpc +mpcinc= +have_mpc=no + +# Specify a location for mpc +# check for this first so it ends up on the link line before mpfr. +AC_ARG_WITH(mpc, [ --with-mpc=PATH specify prefix directory for installed MPC package. + Equivalent to --with-mpc-include=PATH/include + plus --with-mpc-lib=PATH/lib]) +AC_ARG_WITH(mpc_include, [ --with-mpc-include=PATH + specify directory for installed MPC include files]) +AC_ARG_WITH(mpc_lib, [ --with-mpc-lib=PATH specify directory for the installed MPC library]) + +if test "x$with_mpc" != x; then + mpclibs="-L$with_mpc/lib -lmpc" + mpcinc="-I$with_mpc/include $mpcinc" +fi +if test "x$with_mpc_include" != x; then + mpcinc="-I$with_mpc_include $mpcinc" +fi +if test "x$with_mpc_lib" != x; then + mpclibs="-L$with_mpc_lib -lmpc" +fi +if test "x$with_mpc$with_mpc_include$with_mpc_lib" = x && test -d ${srcdir}/mpc; then + mpclibs='-L$$r/$(HOST_SUBDIR)/mpc/src/.libs -L$$r/$(HOST_SUBDIR)/mpc/src/_libs -lmpc' + mpcinc='-I$$s/mpc/src '"$mpcinc" + # Do not test the mpc 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_mpc=yes +fi # Specify a location for mpfr # check for this first so it ends up on the link line before gmp. @@ -1105,6 +1275,7 @@ 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" + extra_mpc_mpfr_configure_flags='--with-mpfr-include=$$s/mpfr' # 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 @@ -1137,6 +1308,8 @@ 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" + extra_mpfr_configure_flags='--with-gmp-build=$$r/$(HOST_SUBDIR)/gmp' + extra_mpc_gmp_configure_flags='--with-gmp-include=$$r/$(HOST_SUBDIR)/gmp' # 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 @@ -1151,21 +1324,48 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then # 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) + #if __GNU_MP_VERSION < 4 || (__GNU_MP_VERSION == 4 && __GNU_MP_VERSION_MINOR < 2) choke me #endif ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no]) + # If we have GMP, check the MPFR version. 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. + dnl MPFR 2.3.1 is acceptable, but MPFR 2.3.2 is better. AC_MSG_CHECKING([for correct version of mpfr.h]) - AC_TRY_LINK([#include + AC_TRY_COMPILE([#include + #include ],[ + #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,1) + choke me + #endif + ], AC_TRY_COMPILE([#include #include ],[ - #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,0) + #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,2) choke me #endif + ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([buggy but acceptable])]), + [AC_MSG_RESULT([no]); have_gmp=no]) + fi + + # Check for the MPC header version. + if test x"$have_mpc" != xyes ; then + CFLAGS="$CFLAGS $mpcinc" + AC_MSG_CHECKING([for the correct version of mpc.h]) + AC_TRY_COMPILE([#include ],[ + #if MPC_VERSION < MPC_VERSION_NUM (0,6,0) + choke me + #endif + ], [AC_MSG_RESULT([yes]); have_mpc=maybe], + [AC_MSG_RESULT([no]); have_mpc=no; mpclibs= ; mpcinc= ]) + fi + + # Now check the MPFR library. + if test x"$have_gmp" = xyes; then + saved_LIBS="$LIBS" + LIBS="$LIBS $gmplibs" + AC_MSG_CHECKING([for the correct version of the gmp/mpfr libraries]) + AC_TRY_LINK([#include + #include ],[ mpfr_t n; mpfr_t x; int t; @@ -1174,20 +1374,40 @@ if test -d ${srcdir}/gcc && test "x$have_gmp" = xno; then mpfr_atan2 (n, n, x, GMP_RNDN); mpfr_erfc (n, x, GMP_RNDN); mpfr_subnormalize (x, t, GMP_RNDN); - ], [AC_TRY_LINK([#include - #include ],[ - #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" + ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); have_gmp=no]) + LIBS="$saved_LIBS" + fi + + if test x"$have_mpc" = xmaybe; then + saved_LIBS="$LIBS" + LIBS="$LIBS $mpclibs $gmplibs" + AC_MSG_CHECKING([for the correct version of the mpc library]) + AC_TRY_LINK([#include ],[ + mpc_t n; + mpc_init2 (n, 53); + mpc_set_ui_ui (n, 1, 1, MPC_RNDNN); + mpc_sin (n, n, MPC_RNDNN); + mpc_cos (n, n, MPC_RNDNN); + mpc_tan (n, n, MPC_RNDNN); + mpc_sinh (n, n, MPC_RNDNN); + mpc_cosh (n, n, MPC_RNDNN); + mpc_tanh (n, n, MPC_RNDNN); + mpc_exp (n, n, MPC_RNDNN); + mpc_log (n, n, MPC_RNDNN); + mpc_sqrt (n, n, MPC_RNDNN); + mpc_proj (n, n, MPC_RNDNN); + mpc_neg (n, n, MPC_RNDNN); + mpc_sqr (n, n, MPC_RNDNN); + mpc_clear (n); + ], [AC_MSG_RESULT([yes]); have_mpc=yes], + [AC_MSG_RESULT([no]); have_mpc=no; mpclibs= ; mpcinc= ]) + 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+. + AC_MSG_ERROR([Building GCC requires GMP 4.2+ and MPFR 2.3.2+. 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/. @@ -1198,13 +1418,199 @@ They may be located in separate packages.]) fi fi -# Flags needed for both GMP and/or MPFR +if test x$have_mpc != xyes ; then + mpcinc= + mpclibs= +fi + +gmpinc="$mpcinc $gmpinc" +gmplibs="$mpclibs $gmplibs" + +# Flags needed for both GMP, MPFR and/or MPC. AC_SUBST(gmplibs) AC_SUBST(gmpinc) +AC_SUBST(extra_mpfr_configure_flags) +AC_SUBST(extra_mpc_gmp_configure_flags) +AC_SUBST(extra_mpc_mpfr_configure_flags) + +# Allow host libstdc++ to be specified for static linking with PPL. +AC_ARG_WITH(host-libstdcxx, [ --with-host-libstdcxx=L Use linker arguments L to link with libstdc++ + when linking with PPL]) + +case $with_host_libstdcxx in + no|yes) + AC_MSG_ERROR([-with-host-libstdcxx needs an argument]) + ;; +esac + +# Linker flags to use for stage1 or when not boostrapping. +AC_ARG_WITH(stage1-ldflags, +[ --with-stage1-ldflags=FLAGS Linker flags for stage1], +[if test "$withval" = "no" -o "$withval" = "yes"; then + stage1_ldflags= + else + stage1_ldflags=$withval + fi], +[stage1_ldflags=]) +AC_SUBST(stage1_ldflags) + +# Libraries to use for stage1 or when not bootstrapping. +AC_ARG_WITH(stage1-libs, +[ -with-stage1-libs=LIBS Libraries for stage1], +[if test "$withval" = "no" -o "$withval" = "yes"; then + stage1_libs= + else + stage1_libs=$withval + fi], +[stage1_libs=$with_host_libstdcxx]) +AC_SUBST(stage1_libs) + +# Linker flags to use for stage2 and later builds. +AC_ARG_WITH(boot-ldflags, +[ --with-boot-ldflags=FLAGS Linker flags for stage2 and later], +[if test "$withval" = "no" -o "$withval" = "yes"; then + poststage1_ldflags= + else + poststage1_ldflags=$withval + fi], +[if test "$ENABLE_BUILD_WITH_CXX" = "yes"; then + poststage1_ldflags=-static-libstdc++ + else + poststage1_ldflags= + fi]) +AC_SUBST(poststage1_ldflags) + +# Libraries to use for stage2 and later builds. This defaults to the +# argument passed to --with-host-libstdcxx. +AC_ARG_WITH(boot-libs, +[ --with-boot-libs=LIBS Libraries for stage2 and later], +[if test "$withval" = "no" -o "$withval" = "yes"; then + poststage1_libs= + else + poststage1_libs=$withval + fi], +[poststage1_libs=$with_host_libstdcxx]) +AC_SUBST(poststage1_libs) + +# Check for PPL +ppl_major_version=0 +ppl_minor_version=10 +ppllibs=" -lppl_c -lppl -lgmpxx" +pplinc= + +AC_ARG_WITH(ppl, [ --with-ppl=PATH Specify prefix directory for the installed PPL package + Equivalent to --with-ppl-include=PATH/include + plus --with-ppl-lib=PATH/lib],, with_ppl=no) +AC_ARG_WITH(ppl_include, [ --with-ppl-include=PATH Specify directory for installed PPL include files]) +AC_ARG_WITH(ppl_lib, [ --with-ppl-lib=PATH Specify the directory for the installed PPL library]) + +case $with_ppl in + no) + ppllibs= + ;; + *) + ppllibs="-L$with_ppl/lib -lppl_c -lppl -lgmpxx" + pplinc="-I$with_ppl/include $pplinc" + LIBS="$ppllibs $LIBS" + ;; +esac +if test "x$with_ppl_include" != x; then + pplinc="-I$with_ppl_include $pplinc" +fi +if test "x$with_ppl_lib" != x; then + ppllibs="-L$with_ppl_lib -lppl_c -lppl -lgmpxx" + LIBS="$ppllibs $LIBS" +fi +if test "x$with_ppl$with_ppl_include$with_ppl_lib" = x && test -d ${srcdir}/ppl; then + ppllibs='-L$$r/$(HOST_SUBDIR)/ppl/.libs -L$$r/$(HOST_SUBDIR)/ppl/_libs -lppl_c -lppl -lgmpxx ' + pplinc='-I$$r/$(HOST_SUBDIR)/ppl/include -I$$s/ppl/include ' + LIBS="$ppllibs $LIBS" +fi + +AC_ARG_ENABLE(ppl-version-check, +[ --disable-ppl-version-check disable check for PPL version], +ENABLE_PPL_CHECK=$enableval, +ENABLE_PPL_CHECK=yes) + +if test "${ENABLE_PPL_CHECK}" = "yes"; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pplinc $gmpinc" + AC_MSG_CHECKING([for version $ppl_major_version.$ppl_minor_version of PPL]) + AC_TRY_COMPILE([#include "ppl_c.h"],[ + #if PPL_VERSION_MAJOR != $ppl_major_version || PPL_VERSION_MINOR != $ppl_minor_version + choke me + #endif + ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); ppllibs= ; pplinc= ]) + CFLAGS="$saved_CFLAGS" +fi + +# Flags needed for PPL +AC_SUBST(ppllibs) +AC_SUBST(pplinc) + + +# Check for CLOOG +clooglibs=" -lcloog " +clooginc=" -DCLOOG_PPL_BACKEND " + +AC_ARG_WITH(cloog, [ --with-cloog=PATH Specify prefix directory for the installed CLooG-PPL package + Equivalent to --with-cloog-include=PATH/include + plus --with-cloog-lib=PATH/lib],, with_cloog=no) +AC_ARG_WITH(cloog_include, [ --with-cloog-include=PATH Specify directory for installed CLooG include files]) +AC_ARG_WITH(cloog_lib, [ --with-cloog-lib=PATH Specify the directory for the installed CLooG library]) + +case $with_cloog in + no) + clooglibs= + clooginc= + ;; + *) + clooglibs="-L$with_cloog/lib -lcloog" + clooginc="-I$with_cloog/include -DCLOOG_PPL_BACKEND " + LIBS="$clooglibs $LIBS" + ;; +esac +if test "x$with_cloog_include" != x; then + clooginc="-I$with_cloog_include -DCLOOG_PPL_BACKEND " +fi +if test "x$with_cloog_lib" != x; then + clooglibs="-L$with_cloog_lib -lcloog" + LIBS="$clooglibs $LIBS" +fi +if test "x$with_cloog$with_cloog_include$with_cloog_lib" = x && test -d ${srcdir}/cloog; then + clooglibs='-L$$r/$(HOST_SUBDIR)/cloog/.libs -L$$r/$(HOST_SUBDIR)/cloog/_libs -lcloog ' + clooginc='-I$$r/$(HOST_SUBDIR)/cloog/include -I$$s/cloog/include -DCLOOG_PPL_BACKEND ' + LIBS="$clooglibs $LIBS" +fi + +AC_ARG_ENABLE(cloog-version-check, +[ --disable-cloog-version-check disable check for CLooG version], +ENABLE_CLOOG_CHECK=$enableval, +ENABLE_CLOOG_CHECK=yes) + +if test "${ENABLE_CLOOG_CHECK}" = "yes"; then + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $clooginc $gmpinc $pplinc" + AC_MSG_CHECKING([for correct version of CLooG]) + AC_TRY_COMPILE([#include "cloog/cloog.h"],[ + #if CLOOG_VERSION_MAJOR != 0 || CLOOG_VERSION_MINOR != 15 + choke me + #endif + ], [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]); clooglibs= ; clooginc= ]) + CFLAGS="$saved_CFLAGS" +fi + +# Flags needed for CLOOG +AC_SUBST(clooglibs) +AC_SUBST(clooginc) + # By default, C is the only stage 1 language. stage1_languages=,c, +# Target libraries that we bootstrap. +bootstrap_target_libs=,target-libgcc, + # 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 @@ -1290,6 +1696,10 @@ if test -d ${srcdir}/gcc; then exit 1 fi + if test "$language" = "c++" -a "$ENABLE_BUILD_WITH_CXX" = "yes"; then + boot_language=yes + fi + case ,${enable_languages}, in *,${language},*) # Language was explicitly selected; include it. @@ -1356,6 +1766,8 @@ if test -d ${srcdir}/gcc; then yes) # Add to (comma-separated) list of stage 1 languages. stage1_languages="${stage1_languages}${language}," + # We need to bootstrap any supporting libraries. + bootstrap_target_libs="${bootstrap_target_libs}${target_libs}," ;; esac ;; @@ -1419,7 +1831,8 @@ fi # Handle --disable- 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 + varname=`echo $dirname | sed -e s/+/_/g` + if eval test x\${enable_${varname}} "=" xno ; then noconfigdirs="$noconfigdirs $dir" fi done @@ -1590,6 +2003,50 @@ AC_ARG_WITH([build-sysroot], [SYSROOT_CFLAGS_FOR_TARGET=]) AC_SUBST(SYSROOT_CFLAGS_FOR_TARGET) +AC_ARG_WITH([debug-prefix-map], + [ --with-debug-prefix-map='A=B C=D ...' + map A to B, C to D ... in debug information], + [if test x"$withval" != x; then + DEBUG_PREFIX_CFLAGS_FOR_TARGET= + for debug_map in $withval; do + DEBUG_PREFIX_CFLAGS_FOR_TARGET="$DEBUG_PREFIX_CFLAGS_FOR_TARGET -fdebug-prefix-map=$debug_map" + done + fi], + [DEBUG_PREFIX_CFLAGS_FOR_TARGET=]) +AC_SUBST(DEBUG_PREFIX_CFLAGS_FOR_TARGET) + +# During gcc bootstrap, if we use some random cc for stage1 then CFLAGS +# might be empty or "-g". We don't require a C++ compiler, so CXXFLAGS +# might also be empty (or "-g", if a non-GCC C++ compiler is in the path). +# We want to ensure that TARGET libraries (which we know are built with +# gcc) are built with "-O2 -g", so include those options when setting +# CFLAGS_FOR_TARGET and CXXFLAGS_FOR_TARGET. +if test "x$CFLAGS_FOR_TARGET" = x; then + CFLAGS_FOR_TARGET=$CFLAGS + case " $CFLAGS " in + *" -O2 "*) ;; + *) CFLAGS_FOR_TARGET="-O2 $CFLAGS" ;; + esac + case " $CFLAGS " in + *" -g "* | *" -g3 "*) ;; + *) CFLAGS_FOR_TARGET="-g $CFLAGS" ;; + esac +fi +AC_SUBST(CFLAGS_FOR_TARGET) + +if test "x$CXXFLAGS_FOR_TARGET" = x; then + CXXFLAGS_FOR_TARGET=$CXXFLAGS + case " $CXXFLAGS " in + *" -O2 "*) ;; + *) CXXFLAGS_FOR_TARGET="-O2 $CXXFLAGS" ;; + esac + case " $CXXFLAGS " in + *" -g "* | *" -g3 "*) ;; + *) CXXFLAGS_FOR_TARGET="-g $CXXFLAGS" ;; + esac +fi +AC_SUBST(CXXFLAGS_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 @@ -1641,7 +2098,7 @@ if test x${use_gnu_as} = x && fi if test x${use_gnu_ld} = x && - echo " ${configdirs} " | grep " ld " > /dev/null 2>&1 ; then + echo " ${configdirs} " | egrep " (go)?ld " > /dev/null 2>&1 ; then with_gnu_ld=yes extra_host_args="$extra_host_args --with-gnu-ld" fi @@ -1717,7 +2174,7 @@ case "${target}" in v850*-*-*) md_exec_prefix=/usr/ccs/bin ;; - xtensa-*-elf*) + xtensa*-*-elf*) ;; *-*-beos* | \ @@ -1745,10 +2202,19 @@ case "${target}" in spu-*-*) target_makefile_frag="config/mt-spu" ;; + mips*-sde-elf*) + target_makefile_frag="config/mt-sde" + ;; + mipsisa*-*-elfoabi*) + target_makefile_frag="config/mt-mips-elfoabi" + ;; + mips*-*-*linux* | mips*-*-gnu*) + target_makefile_frag="config/mt-mips-gnu" + ;; *-*-netware*) target_makefile_frag="config/mt-netware" ;; - *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu) + *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) target_makefile_frag="config/mt-gnu" ;; *-*-aix4.[[3456789]]* | *-*-aix[[56789]].*) @@ -1888,12 +2354,23 @@ case "${host}" in ;; esac +# Decide which environment variable is used to find dynamic libraries. case "${host}" in *-*-hpux*) RPATH_ENVVAR=SHLIB_PATH ;; *-*-darwin* | *-*-rhapsody* ) RPATH_ENVVAR=DYLD_LIBRARY_PATH ;; + *-*-mingw* | *-*-cygwin ) RPATH_ENVVAR=PATH ;; *) RPATH_ENVVAR=LD_LIBRARY_PATH ;; esac +# On systems where the dynamic library environment variable is PATH, +# gcc/ will put dynamic libraries into a subdirectory to avoid adding +# built executables to PATH. +if test "$RPATH_ENVVAR" = PATH; then + GCC_SHLIB_SUBDIR=/shlib +else + GCC_SHLIB_SUBDIR= +fi + # Record target_configdirs and the configure arguments for target and # build configuration in Makefile. target_configdirs=`echo "${target_configdirs}" | sed -e 's/target-//g'` @@ -2022,11 +2499,18 @@ for module in ${target_configdirs} ; do echo 1>&2 "*** removing ${target_subdir}/${module}/Makefile to force reconfigure" rm -f ${target_subdir}/${module}/Makefile fi + + # We only bootstrap target libraries listed in bootstrap_target_libs. + case $bootstrap_target_libs in + *,target-$module,*) target_bootstrap_suffix=$bootstrap_suffix ;; + *) target_bootstrap_suffix=no-bootstrap ;; + esac + extrasub="$extrasub /^@if target-$module\$/d /^@endif target-$module\$/d -/^@if target-$module-$bootstrap_suffix\$/d -/^@endif target-$module-$bootstrap_suffix\$/d" +/^@if target-$module-$target_bootstrap_suffix\$/d +/^@endif target-$module-$target_bootstrap_suffix\$/d" done extrasub="$extrasub @@ -2178,6 +2662,10 @@ EOF_SED gcc_transform_name=`cat conftestsed.out` rm -f conftestsed.out baseargs="$baseargs --program-transform-name='${gcc_transform_name}'" +if test "$silent" = yes; then + baseargs="$baseargs --silent" +fi +baseargs="$baseargs --disable-option-checking" # 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 @@ -2278,6 +2766,19 @@ case " $target_configdirs " in # 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' + + # If we're building libgloss, find the startup file, simulator library + # and linker script. + case " $target_configdirs " in + *" libgloss "*) + # Look for startup file, simulator library and maybe linker script. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -B$$r/$(TARGET_SUBDIR)/libgloss/'"$libgloss_dir" + # Look for libnosys.a in case the target needs it. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$r/$(TARGET_SUBDIR)/libgloss/libnosys' + # Most targets have the linker script in the source directory. + FLAGS_FOR_TARGET=$FLAGS_FOR_TARGET' -L$$s/libgloss/'"$libgloss_dir" + ;; + esac ;; esac ;; @@ -2292,7 +2793,11 @@ esac # Allow the user to override the flags for # our build compiler if desired. -CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}} +if test x"${build}" = x"${host}" ; then + CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD-${CFLAGS}} + CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD-${CXXFLAGS}} + LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-${LDFLAGS}} +fi # On Canadian crosses, we'll be searching the right directories for # the previously-installed cross compiler, so don't bother to add @@ -2311,16 +2816,6 @@ 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" ;; @@ -2341,6 +2836,7 @@ AC_SUBST_FILE(ospace_frag) # Miscellanea: directories, flags, etc. AC_SUBST(RPATH_ENVVAR) +AC_SUBST(GCC_SHLIB_SUBDIR) AC_SUBST(tooldir) AC_SUBST(build_tooldir) AC_SUBST(CONFIGURE_GDB_TK) @@ -2360,7 +2856,21 @@ AC_SUBST(target_configargs) # Build tools. +AC_SUBST(AR_FOR_BUILD) +AC_SUBST(AS_FOR_BUILD) AC_SUBST(CC_FOR_BUILD) +AC_SUBST(CFLAGS_FOR_BUILD) +AC_SUBST(CXXFLAGS_FOR_BUILD) +AC_SUBST(CXX_FOR_BUILD) +AC_SUBST(DLLTOOL_FOR_BUILD) +AC_SUBST(GCJ_FOR_BUILD) +AC_SUBST(GFORTRAN_FOR_BUILD) +AC_SUBST(LDFLAGS_FOR_BUILD) +AC_SUBST(LD_FOR_BUILD) +AC_SUBST(NM_FOR_BUILD) +AC_SUBST(RANLIB_FOR_BUILD) +AC_SUBST(WINDMC_FOR_BUILD) +AC_SUBST(WINDRES_FOR_BUILD) AC_SUBST(config_shell) # Generate default definitions for YACC, M4, LEX and other programs that run @@ -2400,10 +2910,10 @@ 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 + # For an installed makeinfo, we require it to be from texinfo 4.7 or # higher, else we use the "missing" dummy. if ${MAKEINFO} --version \ - | egrep 'texinfo[^0-9]*(4\.([4-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then + | egrep 'texinfo[^0-9]*(4\.([7-9]|[1-9][0-9])|[5-9]|[1-9][0-9])' >/dev/null 2>&1; then : else MAKEINFO="$MISSING makeinfo" @@ -2445,7 +2955,6 @@ 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. @@ -2566,7 +3075,7 @@ case $build in esac # This is aimed to mimic bootstrap with a non-GCC compiler to catch problems. -if test "$GCC" = yes; then +if test "$GCC" = yes -a "$ENABLE_BUILD_WITH_CXX" != yes; then saved_CFLAGS="$CFLAGS" # Pass -fkeep-inline-functions for stage 1 if the GCC version supports it. @@ -2592,10 +3101,10 @@ 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 +[if test "x$enable_checking" = xno || test "x$enable_checking" = x; then + stage1_checking=--enable-checking=yes,types else - stage1_checking=--enable-checking${enable_checking+=}$enable_checking + stage1_checking=--enable-checking=$enable_checking,types fi]) AC_SUBST(stage1_checking) @@ -2613,30 +3122,13 @@ case ${enable_werror} in 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) +# Specify what files to not compare during bootstrap. + +compare_exclusions="gcc/cc*-checksum\$(objext) | gcc/ada/*tools/*" +case "$target" in + hppa*64*-*-hpux*) ;; + hppa*-*-hpux*) compare_exclusions="gcc/cc*-checksum\$(objext) | */libgcc/lib2funcs* | gcc/ada/*tools/*" ;; +esac +AC_SUBST(compare_exclusions) AC_OUTPUT(Makefile) diff --git a/cpu/ChangeLog b/cpu/ChangeLog index dd469d1..5a47a68 100644 --- a/cpu/ChangeLog +++ b/cpu/ChangeLog @@ -1,3 +1,41 @@ +2009-07-16 Doug Evans + + * cpu/simplify.inc (*): One line doc strings don't need \n. + (df): Invoke define-full-ifield instead of claiming it's an alias. + (dno): Define. + (dnop): Mark as deprecated. + +2009-06-22 Alan Modra + + * m32c.opc (parse_lab_5_3): Use correct enum. + +2009-01-07 Hans-Peter Nilsson + + * frv.cpu (mabshs): Explicitly sign-extend arguments of abs to DI. + (DI-ext-HI, DI-ext-UHI, DI-ext-DI): New pmacros. + (media-arith-sat-semantics): Explicitly sign- or zero-extend + arguments of "operation" to DI using "mode" and the new pmacros. + +2009-01-03 Hans-Peter Nilsson + + * cris.cpu (cris-implemented-writable-specregs-v32): Correct size + of number 2, PID. + +2008-12-23 Jon Beniston + + * lm32.cpu: New file. + * lm32.opc: New file. + +2008-01-29 Alan Modra + + * mt.opc (parse_imm16): Apply 2007-09-26 opcodes/mt-asm.c change + to source. + +2007-10-22 Hans-Peter Nilsson + + * cris.cpu (movs, movu): Use result of extension operation when + updating flags. + 2007-07-04 Nick Clifton * cris.cpu: Update copyright notice to refer to GPLv3. diff --git a/cpu/cris.cpu b/cpu/cris.cpu index 2bb74dd..97b4458 100644 --- a/cpu/cris.cpu +++ b/cpu/cris.cpu @@ -1,6 +1,6 @@ ; CRIS CPU description. -*- Scheme -*- ; -; Copyright 2003, 2004, 2007 Free Software Foundation, Inc. +; Copyright 2003, 2004, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Axis Communications AB. ; @@ -439,7 +439,7 @@ (define-pmacro (cris-implemented-writable-specregs-v32) "Special writable registers in v32 and their sizes" - ((QI 2) (QI 3) + ((SI 2) (QI 3) (SI 5) (SI 6) (SI 7) (SI 9) (SI 10) (SI 11) (SI 12) (SI 13) (SI 14) (SI 15)) ) @@ -2033,9 +2033,10 @@ (.pmacro (BW) (sequence - ((BW newval)) - (set newval Rs) - (set Rd (ext SI newval)) + ((BW tmpops) (SI newval)) + (set tmpops Rs) + (set newval (ext SI tmpops)) + (set Rd newval) (setf-move SI newval))) ) @@ -2060,9 +2061,10 @@ (.pmacro (BW) (sequence - ((BW newval)) - (set newval Rs) - (set Rd (zext SI newval)) + ((BW tmpops) (SI newval)) + (set tmpops Rs) + (set newval (zext SI tmpops)) + (set Rd newval) (setf-move SI newval))) ) diff --git a/cpu/frv.cpu b/cpu/frv.cpu index 78d031f..8935924 100644 --- a/cpu/frv.cpu +++ b/cpu/frv.cpu @@ -1,6 +1,6 @@ ; Fujitsu FRV opcode support, for GNU Binutils. -*- Scheme -*- ; -; Copyright 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2001, 2003, 2004, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Fujitsu. ; @@ -8229,18 +8229,28 @@ (set FRintk (c-raw-call SI "frv_ref_SI" FRintk)) (set arghi (halfword hi FRintj 0)) (set arglo (halfword lo FRintj 0)) - (saturate-v (abs arghi) 32767 -32768 (msr-sie-fri-hi) + ; We extend the argument before the abs operation so we can + ; notice -32768 overflowing as 32768. + (saturate-v (abs (ext DI arghi)) 32767 -32768 (msr-sie-fri-hi) (halfword hi FRintk 0)) - (saturate-v (abs arglo) 32767 -32768 (msr-sie-fri-lo) + (saturate-v (abs (ext DI arglo)) 32767 -32768 (msr-sie-fri-lo) (halfword lo FRintk 0))) ((fr400 (unit u-media-1)) (fr450 (unit u-media-1)) (fr550 (unit u-media))) ) +; How to extend from a mode to get the intended signedness. +(define-pmacro (DI-ext-HI x) (ext DI x)) +(define-pmacro (DI-ext-UHI x) (zext DI x)) +(define-pmacro (DI-ext-DI x) x) + (define-pmacro (media-arith-sat-semantics operation arg1 arg2 res mode max min sie) (sequence ((DI tmp)) - (set tmp (operation arg1 arg2)) + ; Make sure we saturate at max/min against a value that is + ; sign- or zero-extended appropriately from "mode". + (set tmp (operation DI + ((.sym DI-ext- mode) arg1) ((.sym DI-ext- mode) arg2))) (saturate-v tmp max min sie res)) ) diff --git a/cpu/frv.opc b/cpu/frv.opc index b2f1d1e..0b9c93c 100644 --- a/cpu/frv.opc +++ b/cpu/frv.opc @@ -1,6 +1,7 @@ /* Fujitsu FRV opcode support, for GNU Binutils. -*- C -*- - Copyright 2000, 2001, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2000, 2001, 2003, 2004, 2005, 2007, 2009 + Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Fujitsu. diff --git a/cpu/iq10.cpu b/cpu/iq10.cpu index 4bf4cda..252cf53 100644 --- a/cpu/iq10.cpu +++ b/cpu/iq10.cpu @@ -1,6 +1,6 @@ ; IQ10-only CPU description. -*- Scheme -*- ; -; Copyright 2001, 2002, 2007 Free Software Foundation, Inc. +; Copyright 2001, 2002, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Vitesse. ; diff --git a/cpu/iq2000.cpu b/cpu/iq2000.cpu index 10fb61b..e25ba69 100644 --- a/cpu/iq2000.cpu +++ b/cpu/iq2000.cpu @@ -1,5 +1,5 @@ ; IQ2000/IQ10 Common CPU description. -*- Scheme -*- -; Copyright 2001, 2002, 2007 Free Software Foundation, Inc. +; Copyright 2001, 2002, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Fujitsu. ; diff --git a/cpu/iq2000.opc b/cpu/iq2000.opc index c314b35..f180373 100644 --- a/cpu/iq2000.opc +++ b/cpu/iq2000.opc @@ -1,6 +1,6 @@ /* IQ2000 opcode support. -*- C -*- - Copyright 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. + Copyright 2000, 2001, 2002, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Fujitsu. diff --git a/cpu/iq2000m.cpu b/cpu/iq2000m.cpu index 343d138..5942241 100644 --- a/cpu/iq2000m.cpu +++ b/cpu/iq2000m.cpu @@ -1,6 +1,6 @@ ; IQ2000-only CPU description. -*- Scheme -*- ; -; Copyright 2000, 2001, 2002, 2004, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2001, 2002, 2004, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Vitesse. ; diff --git a/cpu/lm32.cpu b/cpu/lm32.cpu new file mode 100644 index 0000000..31b943d --- /dev/null +++ b/cpu/lm32.cpu @@ -0,0 +1,932 @@ +; Lattice Mico32 CPU description. -*- Scheme -*- +; Copyright 2008, 2009 Free Software Foundation, Inc. +; Contributed by Jon Beniston +; +; This file is part of the GNU Binutils. +; +; This program is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 3 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +; MA 02110-1301, USA. + +(include "simplify.inc") + +(define-arch + (name lm32) ; name of cpu family + (comment "Lattice Mico32") + (default-alignment aligned) + (insn-lsb0? #t) + (machs lm32) + (isas lm32) +) + + +; Instruction sets. + +(define-isa + (name lm32) + (comment "Lattice Mico32 ISA") + (default-insn-word-bitsize 32) + (default-insn-bitsize 32) + (base-insn-bitsize 32) + (decode-assist (31 30 29 28 27 26)) +) + + +; Cpu family definitions. + +(define-cpu + ; cpu names must be distinct from the architecture name and machine name + (name lm32bf) + (comment "Lattice Mico32 CPU") + (endian big) + (word-bitsize 32) +) + +(define-mach + (name lm32) + (comment "Lattice Mico32 MACH") + (cpu lm32bf) +) + +(define-model + (name lm32) + (comment "Lattice Mico32 reference implementation") + (mach lm32) + (unit u-exec "Execution unit" () + 1 1 () () () ()) +) + + +; Hardware elements. + +(dnh h-pc "Program counter" (PC) (pc) () () ()) + +(dnh h-gr "General purpose registers" + () + (register SI (32)) + (keyword "" ( + (gp 26) (fp 27) (sp 28) (ra 29) (ea 30) (ba 31) + (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) + ) + ) + () () +) + +(dnh h-csr "Control and status registers" + () + (register SI (32)) + (keyword "" ( + (IE 0) (IM 1) (IP 2) + (ICC 3) (DCC 4) + (CC 5) + (CFG 6) + (EBA 7) + (DC 8) + (DEBA 9) + (JTX 14) (JRX 15) + (BP0 16) (BP1 17) (BP2 18) (BP3 19) + (WP0 24) (WP1 25) (WP2 26) (WP3 27) + ) + ) + () () +) + + +; Instruction fields. + +(dnf f-opcode "opcode field" () 31 6) +(dnf f-r0 "register index 0 field" () 25 5) +(dnf f-r1 "register index 1 field" () 20 5) +(dnf f-r2 "register index 2 field" () 15 5) +(dnf f-resv0 "reserved" (RESERVED) 10 11) +(dnf f-shift "shift amount field" () 4 5) +(df f-imm "signed immediate field" () 15 16 INT #f #f) +(dnf f-uimm "unsigned immediate field" () 15 16) +(dnf f-csr "csr field" () 25 5) +(dnf f-user "user defined field" () 10 11) +(dnf f-exception "exception field" () 25 26) + +(df f-branch "branch offset field" (PCREL-ADDR) 15 16 INT + ((value pc) (sra SI (sub SI value pc) 2)) + ((value pc) (add SI pc (sra SI (sll SI value 16) 14))) +) +(df f-call "call offset field" (PCREL-ADDR) 25 26 INT + ((value pc) (sra SI (sub SI value pc) 2)) + ((value pc) (add SI pc (sra SI (sll SI value 6) 4))) +) + + +; Operands. + +(dnop r0 "register 0" () h-gr f-r0) +(dnop r1 "register 1" () h-gr f-r1) +(dnop r2 "register 2" () h-gr f-r2) +(dnop shift "shift amout" () h-uint f-shift) +(dnop imm "signed immediate" () h-sint f-imm) +(dnop uimm "unsigned immediate" () h-uint f-uimm) +(dnop branch "branch offset" () h-iaddr f-branch) +(dnop call "call offset" () h-iaddr f-call) +(dnop csr "csr" () h-csr f-csr) +(dnop user "user" () h-uint f-user) +(dnop exception "exception" () h-uint f-exception) + +(define-operand + (name hi16) + (comment "high 16-bit immediate") + (attrs) + (type h-uint) + (index f-uimm) + (handlers (parse "hi16")) +) + +(define-operand + (name lo16) + (comment "low 16-bit immediate") + (attrs) + (type h-uint) + (index f-uimm) + (handlers (parse "lo16")) +) + +(define-operand + (name gp16) + (comment "gp relative 16-bit immediate") + (attrs) + (type h-sint) + (index f-imm) + (handlers (parse "gp16")) +) + +(define-operand + (name got16) + (comment "got 16-bit immediate") + (attrs) + (type h-sint) + (index f-imm) + (handlers (parse "got16")) +) + +(define-operand + (name gotoffhi16) + (comment "got offset high 16-bit immediate") + (attrs) + (type h-sint) + (index f-imm) + (handlers (parse "gotoff_hi16")) +) + +(define-operand + (name gotofflo16) + (comment "got offset low 16-bit immediate") + (attrs) + (type h-sint) + (index f-imm) + (handlers (parse "gotoff_lo16")) +) + + +; Enumerations. + +(define-normal-insn-enum + opcodes "opcodes" () OP_ f-opcode + (("ADD" 45) + ("ADDI" 13) + ("AND" 40) + ("ANDI" 8) + ("ANDHI" 24) + ("B" 48) + ("BI" 56) + ("BE" 17) + ("BG" 18) + ("BGE" 19) + ("BGEU" 20) + ("BGU" 21) + ("BNE" 23) + ("CALL" 54) + ("CALLI" 62) + ("CMPE" 57) + ("CMPEI" 25) + ("CMPG" 58) + ("CMPGI" 26) + ("CMPGE" 59) + ("CMPGEI" 27) + ("CMPGEU" 60) + ("CMPGEUI" 28) + ("CMPGU" 61) + ("CMPGUI" 29) + ("CMPNE" 63) + ("CMPNEI" 31) + ("DIVU" 35) + ("LB" 4) + ("LBU" 16) + ("LH" 7) + ("LHU" 11) + ("LW" 10) + ("MODU" 49) + ("MUL" 34) + ("MULI" 2) + ("NOR" 33) + ("NORI" 1) + ("OR" 46) + ("ORI" 14) + ("ORHI" 30) + ("RAISE" 43) + ("RCSR" 36) + ("SB" 12) + ("SEXTB" 44) + ("SEXTH" 55) + ("SH" 3) + ("SL" 47) + ("SLI" 15) + ("SR" 37) + ("SRI" 5) + ("SRU" 32) + ("SRUI" 0) + ("SUB" 50) + ("SW" 22) + ("USER" 51) + ("WCSR" 52) + ("XNOR" 41) + ("XNORI" 9) + ("XOR" 38) + ("XORI" 6) + ) +) + + +; Instructions. Note: Reg-reg must come before reg-imm. + +(dni add "add" () + "add $r2,$r0,$r1" + (+ OP_ADD r0 r1 r2 (f-resv0 0)) + (set r2 (add r0 r1)) + () +) + +(dni addi "add immediate" () + "addi $r1,$r0,$imm" + (+ OP_ADDI r0 r1 imm) + (set r1 (add r0 (ext SI (trunc HI imm)))) + () +) + +(dni and "and" () + "and $r2,$r0,$r1" + (+ OP_AND r0 r1 r2 (f-resv0 0)) + (set r2 (and r0 r1)) + () +) + +(dni andi "and immediate" () + "andi $r1,$r0,$uimm" + (+ OP_ANDI r0 r1 uimm) + (set r1 (and r0 (zext SI uimm))) + () +) + +(dni andhii "and high immediate" () + "andhi $r1,$r0,$hi16" + (+ OP_ANDHI r0 r1 hi16) + (set r1 (and r0 (sll SI hi16 16))) + () +) + +(dni b "branch" () + "b $r0" + (+ OP_B r0 (f-r1 0) (f-r2 0) (f-resv0 0)) + (set pc (c-call USI "@cpu@_b_insn" r0 f-r0)) + () +) + +(dni bi "branch immediate" () + "bi $call" + (+ OP_BI call) + (set pc (ext SI call)) + () +) + +(dni be "branch equal" () + "be $r0,$r1,$branch" + (+ OP_BE r0 r1 branch) + (if (eq r0 r1) + (set pc branch) + ) + () +) + +(dni bg "branch greater" () + "bg $r0,$r1,$branch" + (+ OP_BG r0 r1 branch) + (if (gt r0 r1) + (set pc branch) + ) + () +) + +(dni bge "branch greater or equal" () + "bge $r0,$r1,$branch" + (+ OP_BGE r0 r1 branch) + (if (ge r0 r1) + (set pc branch) + ) + () +) + +(dni bgeu "branch greater or equal unsigned" () + "bgeu $r0,$r1,$branch" + (+ OP_BGEU r0 r1 branch) + (if (geu r0 r1) + (set pc branch) + ) + () +) + +(dni bgu "branch greater unsigned" () + "bgu $r0,$r1,$branch" + (+ OP_BGU r0 r1 branch) + (if (gtu r0 r1) + (set pc branch) + ) + () +) + +(dni bne "branch not equal" () + "bne $r0,$r1,$branch" + (+ OP_BNE r0 r1 branch) + (if (ne r0 r1) + (set pc branch) + ) + () +) + +(dni call "call" () + "call $r0" + (+ OP_CALL r0 (f-r1 0) (f-r2 0) (f-resv0 0)) + (sequence () + (set (reg h-gr 29) (add pc 4)) + (set pc r0) + ) + () +) + +(dni calli "call immediate" () + "calli $call" + (+ OP_CALLI call) + (sequence () + (set (reg h-gr 29) (add pc 4)) + (set pc (ext SI call)) + ) + () +) + +(dni cmpe "compare equal" () + "cmpe $r2,$r0,$r1" + (+ OP_CMPE r0 r1 r2 (f-resv0 0)) + (set r2 (eq SI r0 r1)) + () +) + +(dni cmpei "compare equal immediate" () + "cmpei $r1,$r0,$imm" + (+ OP_CMPEI r0 r1 imm) + (set r1 (eq SI r0 (ext SI (trunc HI imm)))) + () +) + +(dni cmpg "compare greater than" () + "cmpg $r2,$r0,$r1" + (+ OP_CMPG r0 r1 r2 (f-resv0 0)) + (set r2 (gt SI r0 r1)) + () +) + +(dni cmpgi "compare greater than immediate" () + "cmpgi $r1,$r0,$imm" + (+ OP_CMPGI r0 r1 imm) + (set r1 (gt SI r0 (ext SI (trunc HI imm)))) + () +) + +(dni cmpge "compare greater or equal" () + "cmpge $r2,$r0,$r1" + (+ OP_CMPGE r0 r1 r2 (f-resv0 0)) + (set r2 (ge SI r0 r1)) + () +) + +(dni cmpgei "compare greater or equal immediate" () + "cmpgei $r1,$r0,$imm" + (+ OP_CMPGEI r0 r1 imm) + (set r1 (ge SI r0 (ext SI (trunc HI imm)))) + () +) + +(dni cmpgeu "compare greater or equal unsigned" () + "cmpgeu $r2,$r0,$r1" + (+ OP_CMPGEU r0 r1 r2 (f-resv0 0)) + (set r2 (geu SI r0 r1)) + () +) + +(dni cmpgeui "compare greater or equal unsigned immediate" () + "cmpgeui $r1,$r0,$uimm" + (+ OP_CMPGEUI r0 r1 uimm) + (set r1 (geu SI r0 (zext SI uimm))) + () +) + +(dni cmpgu "compare greater than unsigned" () + "cmpgu $r2,$r0,$r1" + (+ OP_CMPGU r0 r1 r2 (f-resv0 0)) + (set r2 (gtu SI r0 r1)) + () +) + +(dni cmpgui "compare greater than unsigned immediate" () + "cmpgui $r1,$r0,$uimm" + (+ OP_CMPGUI r0 r1 uimm) + (set r1 (gtu SI r0 (zext SI uimm))) + () +) + +(dni cmpne "compare not equal" () + "cmpne $r2,$r0,$r1" + (+ OP_CMPNE r0 r1 r2 (f-resv0 0)) + (set r2 (ne SI r0 r1)) + () +) + +(dni cmpnei "compare not equal immediate" () + "cmpnei $r1,$r0,$imm" + (+ OP_CMPNEI r0 r1 imm) + (set r1 (ne SI r0 (ext SI (trunc HI imm)))) + () +) + +(dni divu "unsigned divide" () + "divu $r2,$r0,$r1" + (+ OP_DIVU r0 r1 r2 (f-resv0 0)) + (set pc (c-call USI "@cpu@_divu_insn" pc f-r0 f-r1 f-r2)) + () +) + +(dni lb "load byte" () + "lb $r1,($r0+$imm)" + (+ OP_LB r0 r1 imm) + (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI imm)))))) + () +) + +(dni lbu "load byte unsigned" () + "lbu $r1,($r0+$imm)" + (+ OP_LBU r0 r1 imm) + (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI imm)))))) + () +) + +(dni lh "load halfword" () + "lh $r1,($r0+$imm)" + (+ OP_LH r0 r1 imm) + (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI imm)))))) + () +) + +(dni lhu "load halfword unsigned" () + "lhu $r1,($r0+$imm)" + (+ OP_LHU r0 r1 imm) + (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI imm)))))) + () +) + +(dni lw "load word" () + "lw $r1,($r0+$imm)" + (+ OP_LW r0 r1 imm) + (set r1 (mem SI (add r0 (ext SI (trunc HI imm))))) + () +) + +(dni modu "unsigned modulus" () + "modu $r2,$r0,$r1" + (+ OP_MODU r0 r1 r2 (f-resv0 0)) + (set pc (c-call USI "@cpu@_modu_insn" pc f-r0 f-r1 f-r2)) + () +) + +(dni mul "mulitply" () + "mul $r2,$r0,$r1" + (+ OP_MUL r0 r1 r2 (f-resv0 0)) + (set r2 (mul r0 r1)) + () +) + +(dni muli "multiply immediate" () + "muli $r1,$r0,$imm" + (+ OP_MULI r0 r1 imm) + (set r1 (mul r0 (ext SI (trunc HI imm)))) + () +) + +(dni nor "nor" () + "nor $r2,$r0,$r1" + (+ OP_NOR r0 r1 r2 (f-resv0 0)) + (set r2 (inv (or r0 r1))) + () +) + +(dni nori "nor immediate" () + "nori $r1,$r0,$uimm" + (+ OP_NORI r0 r1 uimm) + (set r1 (inv (or r0 (zext SI uimm)))) + () +) + +(dni or "or" () + "or $r2,$r0,$r1" + (+ OP_OR r0 r1 r2 (f-resv0 0)) + (set r2 (or r0 r1)) + () +) + +(dni ori "or immediate" () + "ori $r1,$r0,$lo16" + (+ OP_ORI r0 r1 lo16) + (set r1 (or r0 (zext SI lo16))) + () +) + +(dni orhii "or high immediate" () + "orhi $r1,$r0,$hi16" + (+ OP_ORHI r0 r1 hi16) + (set r1 (or r0 (sll SI hi16 16))) + () +) + +(dni rcsr "read control or status register" () + "rcsr $r2,$csr" + (+ OP_RCSR csr (f-r1 0) r2 (f-resv0 0)) + (set r2 csr) + () +) + +(dni sb "store byte" () + "sb ($r0+$imm),$r1" + (+ OP_SB r0 r1 imm) + (set (mem QI (add r0 (ext SI (trunc HI imm)))) r1) + () +) + +(dni sextb "sign extend byte" () + "sextb $r2,$r0" + (+ OP_SEXTB r0 (f-r1 0) r2 (f-resv0 0)) + (set r2 (ext SI (trunc QI r0))) + () +) + +(dni sexth "sign extend half-word" () + "sexth $r2,$r0" + (+ OP_SEXTH r0 (f-r1 0) r2 (f-resv0 0)) + (set r2 (ext SI (trunc HI r0))) + () +) + +(dni sh "store halfword" () + "sh ($r0+$imm),$r1" + (+ OP_SH r0 r1 imm) + (set (mem HI (add r0 (ext SI (trunc HI imm)))) r1) + () +) + +(dni sl "shift left" () + "sl $r2,$r0,$r1" + (+ OP_SL r0 r1 r2 (f-resv0 0)) + (set r2 (sll SI r0 r1)) + () +) + +(dni sli "shift left immediate" () + "sli $r1,$r0,$imm" + (+ OP_SLI r0 r1 imm) + (set r1 (sll SI r0 imm)) + () +) + +(dni sr "shift right" () + "sr $r2,$r0,$r1" + (+ OP_SR r0 r1 r2 (f-resv0 0)) + (set r2 (sra SI r0 r1)) + () +) + +(dni sri "shift right immediate" () + "sri $r1,$r0,$imm" + (+ OP_SRI r0 r1 imm) + (set r1 (sra SI r0 imm)) + () +) + +(dni sru "shift right unsigned" () + "sru $r2,$r0,$r1" + (+ OP_SRU r0 r1 r2 (f-resv0 0)) + (set r2 (srl SI r0 r1)) + () +) + +(dni srui "shift right unsigned immediate" () + "srui $r1,$r0,$imm" + (+ OP_SRUI r0 r1 imm) + (set r1 (srl SI r0 imm)) + () +) + +(dni sub "subtract" () + "sub $r2,$r0,$r1" + (+ OP_SUB r0 r1 r2 (f-resv0 0)) + (set r2 (sub r0 r1)) + () +) + +(dni sw "store word" () + "sw ($r0+$imm),$r1" + (+ OP_SW r0 r1 imm) + (set (mem SI (add r0 (ext SI (trunc HI imm)))) r1) + () +) + +(dni user "user defined instruction" () + "user $r2,$r0,$r1,$user" + (+ OP_USER r0 r1 r2 user) + (set r2 (c-call SI "@cpu@_user_insn" r0 r1 user)) + () +) + +(dni wcsr "write control or status register" () + "wcsr $csr,$r1" + (+ OP_WCSR csr r1 (f-r2 0) (f-resv0 0)) + (c-call VOID "@cpu@_wcsr_insn" f-csr r1) + () +) + +(dni xor "xor" () + "xor $r2,$r0,$r1" + (+ OP_XOR r0 r1 r2 (f-resv0 0)) + (set r2 (xor r0 r1)) + () +) + +(dni xori "xor immediate" () + "xori $r1,$r0,$uimm" + (+ OP_XORI r0 r1 uimm) + (set r1 (xor r0 (zext SI uimm))) + () +) + +(dni xnor "xnor" () + "xnor $r2,$r0,$r1" + (+ OP_XNOR r0 r1 r2 (f-resv0 0)) + (set r2 (inv (xor r0 r1))) + () +) + +(dni xnori "xnor immediate" () + "xnori $r1,$r0,$uimm" + (+ OP_XNORI r0 r1 uimm) + (set r1 (inv (xor r0 (zext SI uimm)))) + () +) + +; Pseudo instructions + +(dni break "breakpoint" () + "break" + (+ OP_RAISE (f-exception 2)) + (set pc (c-call USI "@cpu@_break_insn" pc)) + () +) + +(dni scall "system call" () + "scall" + (+ OP_RAISE (f-exception 7)) + (set pc (c-call USI "@cpu@_scall_insn" pc)) + () +) + +(dni bret "return from breakpoint" (ALIAS) + "bret" + (+ OP_B (f-r0 31) (f-r1 0) (f-r2 0) (f-resv0 0)) + (set pc (c-call USI "@cpu@_bret_insn" r0)) + () +) + +(dni eret "return from exception" (ALIAS) + "eret" + (+ OP_B (f-r0 30) (f-r1 0) (f-r2 0) (f-resv0 0)) + (set pc (c-call USI "@cpu@_eret_insn" r0)) + () +) + +(dni ret "return" (ALIAS) + "ret" + (+ OP_B (f-r0 29) (f-r1 0) (f-r2 0) (f-resv0 0)) + (set pc r0) + () +) + +(dni mv "move" (ALIAS) + "mv $r2,$r0" + (+ OP_OR r0 (f-r1 0) r2 (f-resv0 0)) + (set r2 r0) + () +) + +(dni mvi "move immediate" (ALIAS) + "mvi $r1,$imm" + (+ OP_ADDI (f-r0 0) r1 imm) + (set r1 (add r0 (ext SI (trunc HI imm)))) + () +) + +(dni mvui "move unsigned immediate" (ALIAS) + "mvu $r1,$lo16" + (+ OP_ORI (f-r0 0) r1 lo16) + (set r1 (zext SI lo16)) + () +) + +(dni mvhi "move high immediate" (ALIAS) + "mvhi $r1,$hi16" + (+ OP_ORHI (f-r0 0) r1 hi16) + (set r1 (or r0 (sll SI hi16 16))) + () +) + +(dni mva "move address" (ALIAS) + "mva $r1,$gp16" + (+ OP_ADDI (f-r0 26) r1 gp16) + (set r1 (add r0 (ext SI (trunc HI gp16)))) + () +) + +(dni not "not" (ALIAS) + "not $r2,$r0" + (+ OP_XNOR r0 (f-r1 0) r2 (f-resv0 0)) + (set r2 (inv r0)) + () +) + +(dni nop "nop" (ALIAS) + "nop" + (+ OP_ADDI (f-r0 0) (f-r1 0) (f-imm 0)) + (set r0 r0) + () +) + +(dni lbgprel "load byte gp relative" (ALIAS) + "lb $r1,$gp16" + (+ OP_LB (f-r0 26) r1 gp16) + (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gp16)))))) + () +) + +(dni lbugprel "load byte unsigned gp relative" (ALIAS) + "lbu $r1,$gp16" + (+ OP_LBU (f-r0 26) r1 gp16) + (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gp16)))))) + () +) + +(dni lhgprel "load halfword gp relative" (ALIAS) + "lh $r1,$gp16" + (+ OP_LH (f-r0 26) r1 gp16) + (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gp16)))))) + () +) + +(dni lhugprel "load halfword unsigned gp relative" (ALIAS) + "lhu $r1,$gp16" + (+ OP_LHU (f-r0 26) r1 gp16) + (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gp16)))))) + () +) + +(dni lwgprel "load word gp relative" (ALIAS) + "lw $r1,$gp16" + (+ OP_LW (f-r0 26) r1 gp16) + (set r1 (mem SI (add r0 (ext SI (trunc HI gp16))))) + () +) + +(dni sbgprel "store byte gp relative" (ALIAS) + "sb $gp16,$r1" + (+ OP_SB (f-r0 26) r1 gp16) + (set (mem QI (add r0 (ext SI (trunc HI gp16)))) r1) + () +) + +(dni shgprel "store halfword gp relative" (ALIAS) + "sh $gp16,$r1" + (+ OP_SH (f-r0 26) r1 gp16) + (set (mem HI (add r0 (ext SI (trunc HI gp16)))) r1) + () +) + +(dni swgprel "store word gp relative" (ALIAS) + "sw $gp16,$r1" + (+ OP_SW (f-r0 26) r1 gp16) + (set (mem SI (add r0 (ext SI (trunc HI gp16)))) r1) + () +) + +(dni lwgotrel "load word got relative" (ALIAS) + "lw $r1,(gp+$got16)" + (+ OP_LW (f-r0 26) r1 got16) + (set r1 (mem SI (add r0 (ext SI (trunc HI got16))))) + () +) + +(dni orhigotoffi "or high got offset immediate" (ALIAS) + "orhi $r1,$r0,$gotoffhi16" + (+ OP_ORHI r0 r1 gotoffhi16) + (set r1 (or r0 (sll SI gotoffhi16 16))) + () +) + +(dni addgotoff "add got offset" (ALIAS) + "addi $r1,$r0,$gotofflo16" + (+ OP_ADDI r0 r1 gotofflo16) + (set r1 (add r0 (ext SI (trunc HI gotofflo16)))) + () +) + +(dni swgotoff "store word got offset" (ALIAS) + "sw ($r0+$gotofflo16),$r1" + (+ OP_SW r0 r1 gotofflo16) + (set (mem SI (add r0 (ext SI (trunc HI gotofflo16)))) r1) + () +) + +(dni lwgotoff "load word got offset" (ALIAS) + "lw $r1,($r0+$gotofflo16)" + (+ OP_LW r0 r1 gotofflo16) + (set r1 (mem SI (add r0 (ext SI (trunc HI gotofflo16))))) + () +) + +(dni shgotoff "store half word got offset" (ALIAS) + "sh ($r0+$gotofflo16),$r1" + (+ OP_SH r0 r1 gotofflo16) + (set (mem HI (add r0 (ext SI (trunc HI gotofflo16)))) r1) + () +) + +(dni lhgotoff "load half word got offset" (ALIAS) + "lh $r1,($r0+$gotofflo16)" + (+ OP_LH r0 r1 gotofflo16) + (set r1 (ext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16)))))) + () +) + +(dni lhugotoff "load half word got offset unsigned" (ALIAS) + "lhu $r1,($r0+$gotofflo16)" + (+ OP_LHU r0 r1 gotofflo16) + (set r1 (zext SI (mem HI (add r0 (ext SI (trunc HI gotofflo16)))))) + () +) + +(dni sbgotoff "store byte got offset" (ALIAS) + "sb ($r0+$gotofflo16),$r1" + (+ OP_SB r0 r1 gotofflo16) + (set (mem QI (add r0 (ext SI (trunc HI gotofflo16)))) r1) + () +) + +(dni lbgotoff "load byte got offset" (ALIAS) + "lb $r1,($r0+$gotofflo16)" + (+ OP_LB r0 r1 gotofflo16) + (set r1 (ext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16)))))) + () +) + +(dni lbugotoff "load byte got offset unsigned" (ALIAS) + "lbu $r1,($r0+$gotofflo16)" + (+ OP_LBU r0 r1 gotofflo16) + (set r1 (zext SI (mem QI (add r0 (ext SI (trunc HI gotofflo16)))))) + () +) diff --git a/cpu/lm32.opc b/cpu/lm32.opc new file mode 100644 index 0000000..3a814c2 --- /dev/null +++ b/cpu/lm32.opc @@ -0,0 +1,235 @@ +/* Lattice Mico32 opcode support. -*- C -*- + Copyright 2008, 2009 Free Software Foundation, Inc. + Contributed by Jon Beniston + + This file is part of the GNU Binutils. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ + +/* -- opc.h */ + +/* Allows reason codes to be output when assembler errors occur. */ +#define CGEN_VERBOSE_ASSEMBLER_ERRORS + +#define CGEN_DIS_HASH_SIZE 64 +#define CGEN_DIS_HASH(buf,value) ((value >> 26) & 0x3f) + +/* -- asm.c */ + +/* Handle signed/unsigned literal. */ + +static const char * +parse_imm (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) +{ + const char *errmsg; + signed long value; + + errmsg = cgen_parse_signed_integer (cd, strp, opindex, & value); + if (errmsg == NULL) + { + unsigned long x = value & 0xFFFF0000; + if (x != 0 && x != 0xFFFF0000) + errmsg = _("immediate value out of range"); + else + *valuep = (value & 0xFFFF); + } + return errmsg; +} + +/* Handle hi() */ + +static const char * +parse_hi16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) +{ + if (strncasecmp (*strp, "hi(", 3) == 0) + { + enum cgen_parse_operand_result result_type; + bfd_vma value; + const char *errmsg; + + *strp += 3; + errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_HI16, + &result_type, &value); + if (**strp != ')') + return _("missing `)'"); + + ++*strp; + if (errmsg == NULL + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + value = (value >> 16) & 0xffff; + *valuep = value; + + return errmsg; + } + + return parse_imm (cd, strp, opindex, valuep); +} + +/* Handle lo() */ + +static const char * +parse_lo16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + unsigned long *valuep) +{ + if (strncasecmp (*strp, "lo(", 3) == 0) + { + const char *errmsg; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + *strp += 3; + errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LO16, + &result_type, &value); + if (**strp != ')') + return _("missing `)'"); + ++*strp; + if (errmsg == NULL + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + value &= 0xffff; + *valuep = value; + return errmsg; + } + + return parse_imm (cd, strp, opindex, valuep); +} + +/* Handle gp() */ + +static const char * +parse_gp16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) +{ + if (strncasecmp (*strp, "gp(", 3) == 0) + { + const char *errmsg; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + *strp += 3; + errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_GPREL16, + & result_type, & value); + if (**strp != ')') + return _("missing `)'"); + ++*strp; + if (errmsg == NULL + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + value &= 0xffff; + *valuep = value; + return errmsg; + } + + return _("expecting gp relative address: gp(symbol)"); +} + +/* Handle got() */ + +static const char * +parse_got16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) +{ + if (strncasecmp (*strp, "got(", 4) == 0) + { + const char *errmsg; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + *strp += 4; + errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LM32_16_GOT, + & result_type, & value); + if (**strp != ')') + return _("missing `)'"); + ++*strp; + if (errmsg == NULL + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + value &= 0xffff; + *valuep = value; + return errmsg; + } + + return _("expecting got relative address: got(symbol)"); +} + +/* Handle gotoffhi16() */ + +static const char * +parse_gotoff_hi16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) +{ + if (strncasecmp (*strp, "gotoffhi16(", 11) == 0) + { + const char *errmsg; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + *strp += 11; + errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LM32_GOTOFF_HI16, + & result_type, & value); + if (**strp != ')') + return _("missing `)'"); + ++*strp; + if (errmsg == NULL + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + value &= 0xffff; + *valuep = value; + return errmsg; + } + + return _("expecting got relative address: gotoffhi16(symbol)"); +} + +/* Handle gotofflo16() */ + +static const char * +parse_gotoff_lo16 (CGEN_CPU_DESC cd, + const char **strp, + int opindex, + long *valuep) +{ + if (strncasecmp (*strp, "gotofflo16(", 11) == 0) + { + const char *errmsg; + enum cgen_parse_operand_result result_type; + bfd_vma value; + + *strp += 11; + errmsg = cgen_parse_address (cd, strp, opindex, BFD_RELOC_LM32_GOTOFF_LO16, + &result_type, &value); + if (**strp != ')') + return _("missing `)'"); + ++*strp; + if (errmsg == NULL + && result_type == CGEN_PARSE_OPERAND_RESULT_NUMBER) + value &= 0xffff; + *valuep = value; + return errmsg; + } + + return _("expecting got relative address: gotofflo16(symbol)"); +} diff --git a/cpu/m32c.cpu b/cpu/m32c.cpu index c5eedf3..127da49 100644 --- a/cpu/m32c.cpu +++ b/cpu/m32c.cpu @@ -1,6 +1,6 @@ ; Renesas M32C CPU description. -*- Scheme -*- ; -; Copyright 2005, 2006, 2007 Free Software Foundation, Inc. +; Copyright 2005, 2006, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Renesas. ; diff --git a/cpu/m32c.opc b/cpu/m32c.opc index 0d9dafe..40c3075 100644 --- a/cpu/m32c.opc +++ b/cpu/m32c.opc @@ -1,6 +1,6 @@ /* m32c opcode support. -*- C -*- - Copyright 2005, 2007 Free Software Foundation, Inc. + Copyright 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Renesas @@ -571,7 +571,7 @@ parse_lab_5_3 (CGEN_CPU_DESC cd, if (type_addr) *type_addr = op_res; - if (op_res == CGEN_PARSE_OPERAND_ADDRESS) + if (op_res == CGEN_PARSE_OPERAND_RESULT_QUEUED) { /* This is a hack; the field cannot handle near-zero signed offsets that CGEN wants to put in to indicate an "empty" diff --git a/cpu/m32r.cpu b/cpu/m32r.cpu index 000671f..a06a5e5 100644 --- a/cpu/m32r.cpu +++ b/cpu/m32r.cpu @@ -1,6 +1,7 @@ ; Renesas M32R CPU description. -*- Scheme -*- ; -; Copyright 1998, 1999, 2000, 2001, 2003, 2007 Free Software Foundation, Inc. +; Copyright 1998, 1999, 2000, 2001, 2003, 2007, 2009 +; Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Mitsubishi ; Electric Corporation. diff --git a/cpu/m32r.opc b/cpu/m32r.opc index cb11d58..3100fee 100644 --- a/cpu/m32r.opc +++ b/cpu/m32r.opc @@ -1,6 +1,6 @@ /* M32R opcode support. -*- C -*- - Copyright 1998, 1999, 2000, 2001, 2004, 2005, 2007 + Copyright 1998, 1999, 2000, 2001, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from diff --git a/cpu/mt.cpu b/cpu/mt.cpu index 653bdd7..bb987f3 100644 --- a/cpu/mt.cpu +++ b/cpu/mt.cpu @@ -1,5 +1,5 @@ ; Morpho Technologies MT Arch description. -*- Scheme -*- -; Copyright 2001, 2007 Free Software Foundation, Inc. +; Copyright 2001, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from ; Morpho Technologies. diff --git a/cpu/mt.opc b/cpu/mt.opc index b78668f..3da6d0e 100644 --- a/cpu/mt.opc +++ b/cpu/mt.opc @@ -1,5 +1,5 @@ /* Morpho Technologies mRISC opcode support, for GNU Binutils. -*- C -*- - Copyright 2001, 2007 Free Software Foundation, Inc. + Copyright 2001, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Morpho Technologies. @@ -190,7 +190,7 @@ parse_imm16 (CGEN_CPU_DESC cd, break; default: - errmsg = _("%operator operand is not a symbol"); + errmsg = _("The percent-operator's operand is not a symbol"); break; } } diff --git a/cpu/sh.cpu b/cpu/sh.cpu index ee8ee2d..d9ece1a 100644 --- a/cpu/sh.cpu +++ b/cpu/sh.cpu @@ -1,6 +1,6 @@ ; Hitachi SH architecture description. -*- Scheme -*- ; -; Copyright 2000, 2001, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2001, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Hitachi ; Semiconductor (America) Inc. diff --git a/cpu/sh.opc b/cpu/sh.opc index 28c79e6..364fccc 100644 --- a/cpu/sh.opc +++ b/cpu/sh.opc @@ -1,6 +1,6 @@ /* SHmedia opcode support. -*- C -*- - Copyright 2000, 2005, 2007 Free Software Foundation, Inc. + Copyright 2000, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Red Hat Inc; developed under contract from Hitachi Semiconductor (America) Inc. diff --git a/cpu/sh64-compact.cpu b/cpu/sh64-compact.cpu index b35d13a..5b1b863 100644 --- a/cpu/sh64-compact.cpu +++ b/cpu/sh64-compact.cpu @@ -1,6 +1,6 @@ ; Hitachi SHcompact instruction set description. -*- Scheme -*- ; -; Copyright 2000, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Hitachi ; Semiconductor (America) Inc. diff --git a/cpu/sh64-media.cpu b/cpu/sh64-media.cpu index c119db2..80dd74a 100644 --- a/cpu/sh64-media.cpu +++ b/cpu/sh64-media.cpu @@ -1,6 +1,6 @@ ; Hitachi SHmedia instruction set description. -*- Scheme -*- ; -; Copyright 2000, 2001, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2001, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc; developed under contract from Hitachi ; Semiconductor (America) Inc. diff --git a/cpu/simplify.inc b/cpu/simplify.inc index 6a20245..808018d 100644 --- a/cpu/simplify.inc +++ b/cpu/simplify.inc @@ -1,6 +1,6 @@ ; Collection of macros, for GNU Binutils .cpu files. -*- Scheme -*- ; -; Copyright 2000, 2007 Free Software Foundation, Inc. +; Copyright 2000, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by Red Hat Inc. ; @@ -28,75 +28,69 @@ ; that way (it's define-full-enum that would change). (define-pmacro (define-normal-enum name comment attrs prefix vals) - "\ -Define a normal enum, fixed number of arguments. -" + "Define a normal enum, fixed number of arguments." (define-full-enum name comment attrs prefix vals) ) ; Define a normal insn enum. (define-pmacro (define-normal-insn-enum name comment attrs prefix fld vals) - "\ -Define a normal instruction opcode enum. -" + "Define a normal instruction opcode enum." (define-full-insn-enum name comment attrs prefix fld vals) ) ; Instruction fields. -; Normally, fields are unsigned have no encode/decode needs. +; Normally, fields are unsigned and have no encode/decode needs. (define-pmacro (define-normal-ifield name comment attrs start length) - "Define a normal instruction field.\n" + "Define a normal instruction field." (define-full-ifield name comment attrs start length UINT #f #f) ) ; For those who don't like typing. -(define-pmacro df - "Shorthand form of define-full-ifield.\n" - define-full-ifield +(define-pmacro (df name comment attrs start length mode encode decode) + "Shorthand form of normal fields requiring mode, encode/decode." + (define-full-ifield name comment attrs start length mode encode decode) ) (define-pmacro dnf - "Shorthand form of define-normal-ifield.\n" + "Shorthand form of define-normal-ifield." define-normal-ifield ) ; Define a normal multi-ifield. -; FIXME: The define-normal version for ifields doesn't include the mode. (define-pmacro (define-normal-multi-ifield name comment attrs mode subflds insert extract) - "Define a normal multi-part instruction field.\n" + "Define a normal multi-part instruction field." (define-full-multi-ifield name comment attrs mode subflds insert extract) ) ; For those who don't like typing. (define-pmacro dnmf - "Shorthand form of define-normal-multi-ifield.\n" + "Shorthand form of define-normal-multi-ifield." define-normal-multi-ifield ) -; Simple multi-ifields: mode is UINT, default insert/extract support. +; Simple multi-ifields: mode is UINT, default insert/extract support, +; default encode/decode support. (define-pmacro (dsmf name comment attrs subflds) - "Define a simple multi-part instruction field.\n" + "Define a simple multi-part instruction field." (define-full-multi-ifield name comment attrs UINT subflds #f #f) ) ; Hardware. ; Simpler version for most hardware elements. -; Allow special assembler support specification but no semantic-name or -; get/set specs. +; Allow special assembler support specification but no semantic-name, +; getter/setter, or layout specs. (define-pmacro (define-normal-hardware name comment attrs type indices values handlers) - "\ -Define a normal hardware element. -" + "Define a normal hardware element." (define-full-hardware name comment attrs name type indices values handlers () () ()) ) @@ -104,12 +98,12 @@ Define a normal hardware element. ; For those who don't like typing. (define-pmacro dnh - "Shorthand form of define-normal-hardware.\n" + "Shorthand form of define-normal-hardware." define-normal-hardware ) ; Simpler version of dnh that leaves out the indices, values, handlers, -; get, set, and layout specs. +; getter/setter, and layout specs. ; This is useful for 1 bit registers. ; ??? While dsh and dnh aren't that distinguishable when perusing a .cpu file, ; they both take a fixed number of positional arguments, and dsh is a proper @@ -117,29 +111,37 @@ Define a normal hardware element. ; are ok. (define-pmacro (define-simple-hardware name comment attrs type) - "\ -Define a simple hardware element (usually a scalar register). -" + "Define a simple hardware element (usually a scalar register)." (define-full-hardware name comment attrs name type () () () () () ()) ) (define-pmacro dsh - "Shorthand form of define-simple-hardware.\n" + "Shorthand form of define-simple-hardware." define-simple-hardware ) ; Operands. +; Simpler version for most operands. +; Allow special assembler support specification but no handlers or +; getter/setter specs. + (define-pmacro (define-normal-operand name comment attrs type index) - "Define a normal operand.\n" + "Define a normal operand." (define-full-operand name comment attrs type DFLT index () () ()) ) ; For those who don't like typing. -; FIXME: dno? + +(define-pmacro dno + "Shorthand form of define-normal-operand." + define-normal-operand +) + +; Deprecated, but still in wide use. (define-pmacro dnop - "Shorthand form of define-normal-operand.\n" + "Shorthand form of define-normal-operand." define-normal-operand ) @@ -167,7 +169,7 @@ Define a simple hardware element (usually a scalar register). ; Fields ifield-assertion is absent. (define-pmacro (define-normal-insn name comment attrs syntax fmt semantics timing) - "Define a normal instruction.\n" + "Define a normal instruction." (define-full-insn name comment attrs syntax fmt () semantics timing) ) @@ -176,7 +178,7 @@ Define a simple hardware element (usually a scalar register). ; this must be the right way to go. :-) (define-pmacro dni - "Shorthand form of define-normal-insn.\n" + "Shorthand form of define-normal-insn." define-normal-insn ) @@ -186,14 +188,14 @@ Define a simple hardware element (usually a scalar register). ; This only supports expanding to one real insn. (define-pmacro (define-normal-macro-insn name comment attrs syntax expansion) - "Define a normal macro instruction.\n" + "Define a normal macro instruction." (define-full-minsn name comment attrs syntax expansion) ) ; To reduce the amount of typing. (define-pmacro dnmi - "Shorthand form of define-normal-macro-insn.\n" + "Shorthand form of define-normal-macro-insn." define-normal-macro-insn ) diff --git a/cpu/xc16x.cpu b/cpu/xc16x.cpu index 9a2b6e0..830869d 100644 --- a/cpu/xc16x.cpu +++ b/cpu/xc16x.cpu @@ -1,6 +1,6 @@ ; Infineon XC16X CPU description. -*- Scheme -*- ; -; Copyright 2006, 2007 Free Software Foundation, Inc. +; Copyright 2006, 2007, 2009 Free Software Foundation, Inc. ; ; Contributed by KPIT Cummins Infosystems Ltd.; developed under contract ; from Infineon Systems, GMBH , Germany. diff --git a/cpu/xc16x.opc b/cpu/xc16x.opc index fc54f5f..455f3fb 100644 --- a/cpu/xc16x.opc +++ b/cpu/xc16x.opc @@ -1,6 +1,6 @@ /* XC16X opcode support. -*- C -*- - Copyright 2006, 2007 Free Software Foundation, Inc. + Copyright 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by KPIT Cummins Infosystems Ltd.; developed under contract from Infineon Systems, GMBH , Germany. diff --git a/depcomp b/depcomp index 3510ab0..df8eea7 100755 --- a/depcomp +++ b/depcomp @@ -1,9 +1,10 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2005-05-16.16 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 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 @@ -16,9 +17,7 @@ scriptversion=2005-05-16.16 # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -86,12 +85,34 @@ if test "$depmode" = dashXmstdout; then depmode=dashmstdout fi +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. - "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" stat=$? if test $stat -eq 0; then : else @@ -178,14 +199,14 @@ sgi) ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' -' ' ' >> $depfile - echo >> $depfile +' ' ' >> "$depfile" + echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile + >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile @@ -201,34 +222,39 @@ aix) # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. - stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` - tmpdepfile="$stripped.u" + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u "$@" -M fi stat=$? - if test -f "$tmpdepfile"; then : - else - stripped=`echo "$stripped" | sed 's,^.*/,,'` - tmpdepfile="$stripped.u" - fi - if test $stat -eq 0; then : else - rm -f "$tmpdepfile" + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done if test -f "$tmpdepfile"; then - outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. - sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" - sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile @@ -276,27 +302,49 @@ icc) rm -f "$tmpdepfile" ;; -ia64hp) - # The "hp" stanza above does not work with HP's ia64 compilers, - # which have integrated preprocessors. The correct option to use - # with these is +Maked; it writes dependencies to a file named +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. - tmpdepfile=`echo "$object" | sed -e 's/\.o$/.d/'` - "$@" +Maked + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi stat=$? if test $stat -eq 0; then : else - rm -f "$tmpdepfile" + rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi - rm -f "$depfile" - # The object file name is correct already. - cat "$tmpdepfile" > "$depfile" - # Add `dependent.h:' lines. - sed -ne '2,${; s/^ //; s/ \\*$//; s/$/:/; p; }' "$tmpdepfile" >> "$depfile" - rm -f "$tmpdepfile" + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) @@ -311,13 +359,13 @@ tru64) if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a - # static library. This mecanism is used in libtool 1.4 series to + # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two - # compilations output dependencies in in $dir.libs/$base.o.d and + # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is @@ -368,7 +416,7 @@ dashmstdout) # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift @@ -419,32 +467,39 @@ makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift - cleared=no - for arg in "$@"; do + cleared=no eat=no + for arg + do case $cleared in no) set ""; shift cleared=yes ;; esac + if test $eat = yes; then + eat=no + continue + fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done - obj_suffix="`echo $object | sed 's/^.*\././'`" + obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" @@ -464,7 +519,7 @@ cpp) # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift @@ -502,13 +557,27 @@ cpp) msvisualcpp) # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. + # always write the preprocessed file to stdout. "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + IFS=" " for arg do case "$arg" in + -o) + shift + ;; + $object) + shift + ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift @@ -521,16 +590,23 @@ msvisualcpp) ;; esac done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + none) exec "$@" ;; @@ -549,5 +625,6 @@ exit 0 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff --git a/elfcpp/ChangeLog b/elfcpp/ChangeLog new file mode 100644 index 0000000..ec81436 --- /dev/null +++ b/elfcpp/ChangeLog @@ -0,0 +1,114 @@ +2009-10-09 Andrew Pinski + + * elfcpp/elfcpp_file.h (Elf_file::section_name): Change shstr_size + to Elf_WXword. + +2009-10-09 Mikolaj Zalewski + + * elf_file.h: (class Elf_strtab): New class. + +2009-10-09 Mikolaj Zalewski + + * elfcpp_file.h: Fix header guard. Include . + (class Elf_recognizer): New class, code from gold/object.cc. + (Elf_file::find_section_by_type): New method. + +2009-07-23 Ulrich Drepper + + * elfcpp.h (enum STB): Add STB_GNU_UNIQUE. + +2009-06-21 Ian Lance Taylor + + * elfcpp.h (SHN_X86_64_LCOMMON): Define enum constant. + (enum SHT): Add SHT_X86_64_UNWIND. + (enum SHF): Add SHT_X86_64_LARGE. + +2009-05-27 Doug Kwan + + * arm.h: New file. + * elfcpp.h (enum SHT): Add ARM-specific special sections. + (enum PT): Add ARM-specific section types. + (enum SST): Add STT_ARM_TFUNC. + +2009-04-30 Nick Clifton + + * elfcpp.h (enum STT): Add STT_GNU_IFUNC. + +2009-03-20 Mikolaj Zalewski + + * elfcpp.h (SHT_GNU_INCREMENTAL_INPUTS): Define. + +2009-03-01 Ian Lance Taylor + + * elfcpp_swap.h: #include "config.h". Only #include + if HAVE_BYTESWAP_H is defined; if not, provide definitions for + bswap_{16,32,64}. For gcc 4.3 and later, use the builtin bswap + functions. Check WORDS_BIGENDIAN rather than __BYTE_ORDER. + +2009-01-06 H.J. Lu + + * elfcpp.h (enum STT): Remove STT_IFUNC. + +2008-12-03 Nick Clifton + + * elfcpp.h (enum STT): Add STT_IFUNC. + +2008-06-12 David S. Miller + + * powerpc.h: New file. + * elfcpp.h (SHT_ORDERED): New enum constant. + (DT_PPC_GOT, DT_PPC64_GLINK, DT_PPC64_OPD, DT_PPC64_OPDSZ): Same. + +2008-05-28 Caleb Howe + + * dwarf.h (enum DW_FORM): Define. + +2008-04-19 Ian Lance Taylor + + * elfcpp_file.h (class Elf_file): Add large_shndx_offset_ field. + (Elf_file::large_shndx_offset): New function. + (Elf_file::construct): Initialize large_shndx_offset_. + (Elf_File::initialize_shnum): If necessary, adjust shstrndx_ and + set large_shndx_offset_. + +2008-04-16 David S. Miller + + * elfcpp.h (DF_1_NOW, DF_1_GLOBAL, DF_1_GROUP, + DF_1_NODELETE, DF_1_LOADFLTR, DF_1_INITFIRST, + DF_1_NOOPEN, DF_1_ORIGIN, DF_1_DIRECT, DF_1_TRANS, + DF_1_INTERPOSE, DF_1_NODEFLIB, DF_1_NODUMP, + DF_1_CONLFAT): New enum constants. + +2008-04-15 David S. Miller + + * sparc.h (EF_SPARC_EXT_MASK, EF_SPARC_32PLUS_MASK, + EF_SPARC_32PLUS, EF_SPARC_SUN_US1, EF_SPARC_HAL_R1, + EF_SPARC_SUN_US3, EF_SPARC_LEDATA, EF_SPARCV9_MM, + EF_SPARCV9_TSO, EF_SPARCV9_PSO, EF_SPARCV9_RMO): + Define as enum constants. + +2008-04-11 David S. Miller + + * sparc.h: New file + * elfcpp.h (SHN_BEFORE, SHN_AFTER): New enum constants. + (SHT_SPARC_GOTDATA, SHF_ORDERED, SHF_EXCLUDE, + STT_SPARC_REGISTER, DT_SPARC_REGISTER): Likewise. + +2008-04-03 Ian Lance Taylor + + * elfcpp_swap.h (Swap_unaligned<64, true>::writeval): Correct + byte order. + +2008-03-24 Ian Lance Taylor + + * elfcpp.h (NT_VERSION, NT_ARCH): Define as enum constants. + (NT_GNU_ABI_TAG, NT_GNU_HWCAP): Likewise. + (NT_GNU_BUILD_ID, NT_GNU_GOLD_VERSION): Likewise. + (ELF_NOTE_OS_LINUX, ELF_NOTE_OS_GNU): Likewise. + (ELF_NOTE_OS_SOLARIS2, ELF_NOTE_OS_NETBSD): Likewise. + (ELF_NOTE_OS_SYLLABLE): Likewise. + +2008-03-21 Ian Lance Taylor + + * Added source code to GNU binutils. + diff --git a/elfcpp/README b/elfcpp/README new file mode 100644 index 0000000..9eb07e8 --- /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/arm.h b/elfcpp/arm.h new file mode 100644 index 0000000..7ad827a --- /dev/null +++ b/elfcpp/arm.h @@ -0,0 +1,204 @@ +// arm.h -- ELF definitions specific to EM_ARM -*- C++ -*- + +// Copyright 2009, Free Software Foundation, Inc. +// Written by Doug Kwan . + +// This file is part of elfcpp. + +// 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. + +#ifndef ELFCPP_ARM_H +#define ELFCPP_ARM_H + +// The relocation type information is taken from: +// +// ELF for the ARM Architecture +// Document number: ARM IHI 0044C, current through ABI release 2.07 +// Date of Issue: 10th October, 2008 +// + +namespace elfcpp +{ + +// +// ARM Relocations Codes +// + +// Operation notes: +// S: Address of the symbol. +// A: Addend for relocation. +// P: Address of the place being relocated. +// Pa: Adjusted address of the place being relocated (P & 0xfffffffc) +// T: is 1 if S has type STT_FUNC and the symbol addresses a Thumb +// instruction.Thumb-bit; it is 0 otherwise. +// B(S): Addressing origin of the output segment defining S. +// GOT_ORG: Addressing origin of the Global Offset Table. +// GOT(S): Address of the GOT entry for S. +// + +enum +{ + // Type Class Operation + // ------------------------------ + R_ARM_NONE = 0, // Static Misc + R_ARM_PC24 = 1, // Deprecated ARM ((S + A) | T) - P + R_ARM_ABS32 = 2, // Static Data (S + A) | T + R_ARM_REL32 = 3, // Static Data ((S + A) | T) - P + R_ARM_LDR_PC_G0 = 4, // Static ARM S + A - P + R_ARM_ABS16 = 5, // Static Data S + A + R_ARM_ABS12 = 6, // Static ARM S + A + R_ARM_THM_ABS5 = 7, // Static Thumb16 S + A + R_ARM_ABS8 = 8, // Static Data S + A + R_ARM_SBREL32 = 9, // Static Data ((S + A) | T) - B(S) + R_ARM_THM_CALL = 10, // Static Thumb32 ((S + A) | T) - P + R_ARM_THM_PC8 = 11, // Static Thumb16 + R_ARM_BREL_ADJ = 12, // Dynamic Data DeltaB(S) + A + R_ARM_TLS_DESC = 13, // Dynamic Data + R_ARM_THM_SWI8 = 14, // Obsolete + R_ARM_XPC25 = 15, // Obsolete + R_ARM_THM_XPC22 = 16, // Obsolete + R_ARM_TLS_DTPMOD32 = 17, // Dynamic Data Module(S) + R_ARM_TLS_DTPOFF32 = 18, // Dynamic Data S + A - TLS + R_ARM_TLS_TPOFF32 = 19, // Dynamic Data S + A - tp + R_ARM_COPY = 20, // Dynamic Misc + R_ARM_GLOB_DAT = 21, // Dynamic Data (S + A) | T + R_ARM_JUMP_SLOT = 22, // Dynamic Data (S + A) | T + R_ARM_RELATIVE = 23, // Dynamic Data B(S) + A + R_ARM_GOTOFF32 = 24, // Static Data (((S + A) | T) - GOT_ORG + R_ARM_BASE_PREL = 25, // Static Data B(S) + A - P + R_ARM_GOT_BREL = 26, // Static Data GOT(S) + A - GOT_ORG + R_ARM_PLT32 = 27, // Deprecated ARM ((S + A) | T) - P + R_ARM_CALL = 28, // Static ARM ((S + A) | T) - P + R_ARM_JUMP24 = 29, // Static ARM ((S + A) | T) - P + R_ARM_THM_JUMP24 = 30, // Static Thumb32 ((S + A) | T) - P + R_ARM_BASE_ABS = 31, // Static Data B(S) + A + R_ARM_ALU_PCREL_7_0 = 32, // Obsolete + R_ARM_ALU_PCREL_15_8 = 33, // Obsolete + R_ARM_ALU_PCREL_23_15 = 34, // Obsolete + R_ARM_LDR_SBREL_11_0_NC = 35, // Deprecated ARM S + A - B(S) + R_ARM_ALU_SBREL_19_12_NC = 36,// Deprecated ARM S + A - B(S) + R_ARM_ALU_SBREL_27_20_CK = 37,// Deprecated ARM S + A - B(S) + R_ARM_TARGET1 = 38, // Data Misc (S + A) | T or + // ((S + A) | T) - P + R_ARM_SBREL31 = 39, // Deprecated Data ((S + A) | T) - B(S) + R_ARM_V4BX = 40, // Static Misc + R_ARM_TARGET2 = 41, // Static Misc + R_ARM_PREL31 = 42, // Static Data ((S + A) | T) - P + R_ARM_MOVW_ABS_NC = 43, // Static ARM (S + A) | T + R_ARM_MOVT_ABS = 44, // Static ARM S + A + R_ARM_MOVW_PREL_NC = 45, // Static ARM ((S + A) | T) - P + R_ARM_MOVT_PREL = 46, // Static ARM S + A - P + R_ARM_THM_MOVW_ABS_NC = 47, // Static Thumb32 (S + A) | T + R_ARM_THM_MOVT_ABS = 48, // Static Thumb32 S + A - P + R_ARM_THM_MOVW_PREL_NC = 49, // Static Thumb32 ((S + A) | T) - P + R_ARM_THM_MOVT_PREL = 50, // Static Thumb32 S + A - P + R_ARM_THM_JUMP19 = 51, // Static Thumb32 ((S + A) | T) - P + R_ARM_THM_JUMP6 = 52, // Static Thumb16 S + A - P + R_ARM_THM_ALU_PREL_11_0 = 53, // Static Thumb32 ((S + A) | T) - Pa + R_ARM_THM_PC12 = 54, // Static Thumb32 S + A - Pa + R_ARM_ABS32_NOI = 55, // Static Data S + A + R_ARM_REL32_NOI = 56, // Static Data S + A - P + R_ARM_ALU_PC_G0_NC = 57, // Static ARM ((S + A) | T) - P + R_ARM_ALU_PC_G0 = 58, // Static ARM ((S + A) | T) - P + R_ARM_ALU_PC_G1_NC = 59, // Static ARM ((S + A) | T) - P + R_ARM_ALU_PC_G1 = 60, // Static ARM ((S + A) | T) - P + R_ARM_ALU_PC_G2 = 61, // Static ARM ((S + A) | T) - P + R_ARM_LDR_PC_G1 = 62, // Static ARM S + A - P + R_ARM_LDR_PC_G2 = 63, // Static ARM S + A - P + R_ARM_LDRS_PC_G0 = 64, // Static ARM S + A - P + R_ARM_LDRS_PC_G1 = 65, // Static ARM S + A - P + R_ARM_LDRS_PC_G2 = 66, // Static ARM S + A - P + R_ARM_LDC_PC_G0 = 67, // Static ARM S + A - P + R_ARM_LDC_PC_G1 = 68, // Static ARM S + A - P + R_ARM_LDC_PC_G2 = 69, // Static ARM S + A - P + R_ARM_ALU_SB_G0_NC = 70, // Static ARM ((S + A) | T) - B(S) + R_ARM_ALU_SB_G0 = 71, // Static ARM ((S + A) | T) - B(S) + R_ARM_ALU_SB_G1_NC = 72, // Static ARM ((S + A) | T) - B(S) + R_ARM_ALU_SB_G1 = 73, // Static ARM ((S + A) | T) - B(S) + R_ARM_ALU_SB_G2 = 74, // Static ARM ((S + A) | T) - B(S) + R_ARM_LDR_SB_G0 = 75, // Static ARM S + A - B(S) + R_ARM_LDR_SB_G1 = 76, // Static ARM S + A - B(S) + R_ARM_LDR_SB_G2 = 77, // Static ARM S + A - B(S) + R_ARM_LDRS_SB_G0 = 78, // Static ARM S + A - B(S) + R_ARM_LDRS_SB_G1 = 79, // Static ARM S + A - B(S) + R_ARM_LDRS_SB_G2 = 80, // Static ARM S + A - B(S) + R_ARM_LDC_SB_G0 = 81, // Static ARM S + A - B(S) + R_ARM_LDC_SB_G1 = 82, // Static ARM S + A - B(S) + R_ARM_LDC_SB_G2 = 83, // Static ARM S + A - B(S) + R_ARM_MOVW_BREL_NC = 84, // Static ARM ((S + A) | T) - B(S) + R_ARM_MOVT_BREL = 85, // Static ARM S + A - B(S) + R_ARM_MOVW_BREL = 86, // Static ARM ((S + A) | T) - B(S) + R_ARM_THM_MOVW_BREL_NC = 87, // Static Thumb32 ((S + A) | T) - B(S) + R_ARM_THM_MOVT_BREL = 88, // Static Thumb32 S + A - B(S) + R_ARM_THM_MOVW_BREL = 89, // Static Thumb32 ((S + A) | T) - B(S) + R_ARM_TLS_GOTDESC = 90, // Static Data + R_ARM_TLS_CALL = 91, // Static ARM + R_ARM_TLS_DESCSEQ = 92, // Static ARM TLS relaxation + R_ARM_THM_TLS_CALL = 93, // Static Thumb32 + R_ARM_PLT32_ABS = 94, // Static Data PLT(S) + A + R_ARM_GOT_ABS = 95, // Static Data GOT(S) + A + R_ARM_GOT_PREL = 96, // Static Data GOT(S) + A - P + R_ARM_GOT_BREL12 = 97, // Static ARM GOT(S) + A - GOT_ORG + R_ARM_GOTOFF12 = 98, // Static ARM S + A - GOT_ROG + R_ARM_GOTRELAX = 99, // Static Misc + R_ARM_GNU_VTENTRY = 100, // Deprecated Data + R_ARM_GNU_VTINHERIT = 101, // Deprecated Data + R_ARM_THM_JUMP11 = 102, // Static Thumb16 S + A - P + R_ARM_THM_JUMP8 = 103, // Static Thumb16 S + A - P + R_ARM_TLS_GD32 = 104, // Static Data GOT(S) + A - P + R_ARM_TLS_LDM32 = 105, // Static Data GOT(S) + A - P + R_ARM_TLS_LDO32 = 106, // Static Data S + A - TLS + R_ARM_TLS_IE32 = 107, // Static Data GOT(S) + A - P + R_ARM_TLS_LE32 = 108, // Static Data S + A - tp + R_ARM_TLS_LDO12 = 109, // Static ARM S + A - TLS + R_ARM_TLS_LE12 = 110, // Static ARM S + A - tp + R_ARM_TLS_IE12GP = 111, // Static ARM GOT(S) + A - GOT_ORG + R_ARM_PRIVATE_0 = 112, // Private (n = 0, 1, ... 15) + R_ARM_PRIVATE_1 = 113, + R_ARM_PRIVATE_2 = 114, + R_ARM_PRIVATE_3 = 115, + R_ARM_PRIVATE_4 = 116, + R_ARM_PRIVATE_5 = 117, + R_ARM_PRIVATE_6 = 118, + R_ARM_PRIVATE_7 = 119, + R_ARM_PRIVATE_8 = 120, + R_ARM_PRIVATE_9 = 121, + R_ARM_PRIVATE_10 = 122, + R_ARM_PRIVATE_11 = 123, + R_ARM_PRIVATE_12 = 124, + R_ARM_PRIVATE_13 = 125, + R_ARM_PRIVATE_14 = 126, + R_ARM_PRIVATE_15 = 127, + R_ARM_ME_TOO = 128, // Obsolete + R_ARM_THM_TLS_DESCSEQ16 = 129,// Static Thumb16 + R_ARM_THM_TLS_DESCSEQ32 = 130,// Static Thumb32 + // 131 - 139 Unallocated + // 140 - 159 Dynamic Reserved for future allocation + // 160 - 255 Unallocated +}; + +} // End namespace elfcpp. + +#endif // !defined(ELFCPP_ARM_H) diff --git a/elfcpp/dwarf.h b/elfcpp/dwarf.h new file mode 100644 index 0000000..c6ff402 --- /dev/null +++ b/elfcpp/dwarf.h @@ -0,0 +1,408 @@ +// dwarf.h -- DWARF2 constants -*- C++ -*- + +// Copyright 2006, 2007, Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// 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. + +#ifndef ELFCPP_DWARF_H +#define ELFCPP_DWARF_H + +namespace elfcpp +{ + +// DWARF2 codes. + +enum DW_TAG +{ + DW_TAG_padding = 0x00, + DW_TAG_array_type = 0x01, + DW_TAG_class_type = 0x02, + DW_TAG_entry_point = 0x03, + DW_TAG_enumeration_type = 0x04, + DW_TAG_formal_parameter = 0x05, + DW_TAG_imported_declaration = 0x08, + DW_TAG_label = 0x0a, + DW_TAG_lexical_block = 0x0b, + DW_TAG_member = 0x0d, + DW_TAG_pointer_type = 0x0f, + DW_TAG_reference_type = 0x10, + DW_TAG_compile_unit = 0x11, + DW_TAG_string_type = 0x12, + DW_TAG_structure_type = 0x13, + DW_TAG_subroutine_type = 0x15, + DW_TAG_typedef = 0x16, + DW_TAG_union_type = 0x17, + DW_TAG_unspecified_parameters = 0x18, + DW_TAG_variant = 0x19, + DW_TAG_common_block = 0x1a, + DW_TAG_common_inclusion = 0x1b, + DW_TAG_inheritance = 0x1c, + DW_TAG_inlined_subroutine = 0x1d, + DW_TAG_module = 0x1e, + DW_TAG_ptr_to_member_type = 0x1f, + DW_TAG_set_type = 0x20, + DW_TAG_subrange_type = 0x21, + DW_TAG_with_stmt = 0x22, + DW_TAG_access_declaration = 0x23, + DW_TAG_base_type = 0x24, + DW_TAG_catch_block = 0x25, + DW_TAG_const_type = 0x26, + DW_TAG_constant = 0x27, + DW_TAG_enumerator = 0x28, + DW_TAG_file_type = 0x29, + DW_TAG_friend = 0x2a, + DW_TAG_namelist = 0x2b, + DW_TAG_namelist_item = 0x2c, + DW_TAG_packed_type = 0x2d, + DW_TAG_subprogram = 0x2e, + DW_TAG_template_type_param = 0x2f, + DW_TAG_template_value_param = 0x30, + DW_TAG_thrown_type = 0x31, + DW_TAG_try_block = 0x32, + DW_TAG_variant_part = 0x33, + DW_TAG_variable = 0x34, + DW_TAG_volatile_type = 0x35, + + // DWARF3. + DW_TAG_dwarf_procedure = 0x36, + DW_TAG_restrict_type = 0x37, + DW_TAG_interface_type = 0x38, + DW_TAG_namespace = 0x39, + DW_TAG_imported_module = 0x3a, + DW_TAG_unspecified_type = 0x3b, + DW_TAG_partial_unit = 0x3c, + DW_TAG_imported_unit = 0x3d, + DW_TAG_condition = 0x3f, + DW_TAG_shared_type = 0x40, + + // SGI/MIPS extensions. + DW_TAG_MIPS_loop = 0x4081, + + // HP extensions. + // See: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz. + DW_TAG_HP_array_descriptor = 0x4090, + + // GNU extensions. + DW_TAG_format_label = 0x4101, // For FORTRAN 77 and Fortran 90. + DW_TAG_function_template = 0x4102, // For C++. + DW_TAG_class_template = 0x4103, // For C++. + DW_TAG_GNU_BINCL = 0x4104, + DW_TAG_GNU_EINCL = 0x4105, + + // Extensions for UPC. See: http://upc.gwu.edu/~upc. + DW_TAG_upc_shared_type = 0x8765, + DW_TAG_upc_strict_type = 0x8766, + DW_TAG_upc_relaxed_type = 0x8767, + + // PGI (STMicroelectronics) extensions. No documentation available. + DW_TAG_PGI_kanji_type = 0xA000, + DW_TAG_PGI_interface_block = 0xA020 +}; + +enum DW_FORM +{ + DW_FORM_null = 0x00, + DW_FORM_addr = 0x01, + DW_FORM_block2 = 0x03, + DW_FORM_block4 = 0x04, + DW_FORM_data2 = 0x05, + DW_FORM_data4 = 0x06, + DW_FORM_data8 = 0x07, + DW_FORM_string = 0x08, + DW_FORM_block = 0x09, + DW_FORM_block1 = 0x0a, + DW_FORM_data1 = 0x0b, + DW_FORM_flag = 0x0c, + DW_FORM_sdata = 0x0d, + DW_FORM_strp = 0x0e, + DW_FORM_udata = 0x0f, + DW_FORM_ref_addr = 0x10, + DW_FORM_ref1 = 0x11, + DW_FORM_ref2 = 0x12, + DW_FORM_ref4 = 0x13, + DW_FORM_ref8 = 0x14, + DW_FORM_ref_udata = 0x15, + DW_FORM_indirect = 0x16 +}; + +// Frame unwind information. + +enum DW_EH_PE +{ + DW_EH_PE_absptr = 0x00, + DW_EH_PE_omit = 0xff, + + DW_EH_PE_uleb128 = 0x01, + DW_EH_PE_udata2 = 0x02, + DW_EH_PE_udata4 = 0x03, + DW_EH_PE_udata8 = 0x04, + DW_EH_PE_signed = 0x08, + DW_EH_PE_sleb128 = 0x09, + DW_EH_PE_sdata2 = 0x0a, + DW_EH_PE_sdata4 = 0x0b, + DW_EH_PE_sdata8 = 0x0c, + + DW_EH_PE_pcrel = 0x10, + DW_EH_PE_textrel = 0x20, + DW_EH_PE_datarel = 0x30, + DW_EH_PE_funcrel = 0x40, + DW_EH_PE_aligned = 0x50, + + DW_EH_PE_indirect = 0x80 +}; + +// Line number opcodes. + +enum DW_LINE_OPS +{ + DW_LNS_extended_op = 0, + DW_LNS_copy = 1, + DW_LNS_advance_pc = 2, + DW_LNS_advance_line = 3, + DW_LNS_set_file = 4, + DW_LNS_set_column = 5, + DW_LNS_negate_stmt = 6, + DW_LNS_set_basic_block = 7, + DW_LNS_const_add_pc = 8, + DW_LNS_fixed_advance_pc = 9, + // DWARF 3. + DW_LNS_set_prologue_end = 10, + DW_LNS_set_epilogue_begin = 11, + DW_LNS_set_isa = 12 +}; + +// Line number extended opcodes. + +enum DW_LINE_EXTENDED_OPS +{ + DW_LNE_end_sequence = 1, + DW_LNE_set_address = 2, + DW_LNE_define_file = 3, + // HP extensions. + DW_LNE_HP_negate_is_UV_update = 0x11, + DW_LNE_HP_push_context = 0x12, + DW_LNE_HP_pop_context = 0x13, + DW_LNE_HP_set_file_line_column = 0x14, + DW_LNE_HP_set_routine_name = 0x15, + DW_LNE_HP_set_sequence = 0x16, + DW_LNE_HP_negate_post_semantics = 0x17, + DW_LNE_HP_negate_function_exit = 0x18, + DW_LNE_HP_negate_front_end_logical = 0x19, + DW_LNE_HP_define_proc = 0x20 +}; + +// Type encoding names and codes + +enum DW_ENCODING +{ + DW_ATE_address =0x1, + DW_ATE_boolean =0x2, + DW_ATE_complex_float =0x3, + DW_ATE_float =0x4, + DW_ATE_signed =0x5, + DW_ATE_signed_char =0x6, + DW_ATE_unsigned =0x7, + DW_ATE_unsigned_char =0x8, + // DWARF3/DWARF3f + DW_ATE_imaginary_float =0x9, + DW_ATE_packed_decimal =0xa, + DW_ATE_numeric_string =0xb, + DW_ATE_edited =0xc, + DW_ATE_signed_fixed =0xd, + DW_ATE_unsigned_fixed =0xe, + DW_ATE_decimal_float =0xf, + DW_ATE_lo_user =0x80, + DW_ATE_hi_user =0xff +}; + +// Location virtual machine opcodes + +enum DW_OP +{ + DW_OP_addr =0x03, + DW_OP_deref =0x06, + DW_OP_const1u =0x08, + DW_OP_const1s =0x09, + DW_OP_const2u =0x0a, + DW_OP_const2s =0x0b, + DW_OP_const4u =0x0c, + DW_OP_const4s =0x0d, + DW_OP_const8u =0x0e, + DW_OP_const8s =0x0f, + DW_OP_constu =0x10, + DW_OP_consts =0x11, + DW_OP_dup =0x12, + DW_OP_drop =0x13, + DW_OP_over =0x14, + DW_OP_pick =0x15, + DW_OP_swap =0x16, + DW_OP_rot =0x17, + DW_OP_xderef =0x18, + DW_OP_abs =0x19, + DW_OP_and =0x1a, + DW_OP_div =0x1b, + DW_OP_minus =0x1c, + DW_OP_mod =0x1d, + DW_OP_mul =0x1e, + DW_OP_neg =0x1f, + DW_OP_not =0x20, + DW_OP_or =0x21, + DW_OP_plus =0x22, + DW_OP_plus_uconst =0x23, + DW_OP_shl =0x24, + DW_OP_shr =0x25, + DW_OP_shra =0x26, + DW_OP_xor =0x27, + DW_OP_bra =0x28, + DW_OP_eq =0x29, + DW_OP_ge =0x2a, + DW_OP_gt =0x2b, + DW_OP_le =0x2c, + DW_OP_lt =0x2d, + DW_OP_ne =0x2e, + DW_OP_skip =0x2f, + DW_OP_lit0 =0x30, + DW_OP_lit1 =0x31, + DW_OP_lit2 =0x32, + DW_OP_lit3 =0x33, + DW_OP_lit4 =0x34, + DW_OP_lit5 =0x35, + DW_OP_lit6 =0x36, + DW_OP_lit7 =0x37, + DW_OP_lit8 =0x38, + DW_OP_lit9 =0x39, + DW_OP_lit10 =0x3a, + DW_OP_lit11 =0x3b, + DW_OP_lit12 =0x3c, + DW_OP_lit13 =0x3d, + DW_OP_lit14 =0x3e, + DW_OP_lit15 =0x3f, + DW_OP_lit16 =0x40, + DW_OP_lit17 =0x41, + DW_OP_lit18 =0x42, + DW_OP_lit19 =0x43, + DW_OP_lit20 =0x44, + DW_OP_lit21 =0x45, + DW_OP_lit22 =0x46, + DW_OP_lit23 =0x47, + DW_OP_lit24 =0x48, + DW_OP_lit25 =0x49, + DW_OP_lit26 =0x4a, + DW_OP_lit27 =0x4b, + DW_OP_lit28 =0x4c, + DW_OP_lit29 =0x4d, + DW_OP_lit30 =0x4e, + DW_OP_lit31 =0x4f, + DW_OP_reg0 =0x50, + DW_OP_reg1 =0x51, + DW_OP_reg2 =0x52, + DW_OP_reg3 =0x53, + DW_OP_reg4 =0x54, + DW_OP_reg5 =0x55, + DW_OP_reg6 =0x56, + DW_OP_reg7 =0x57, + DW_OP_reg8 =0x58, + DW_OP_reg9 =0x59, + DW_OP_reg10 =0x5a, + DW_OP_reg11 =0x5b, + DW_OP_reg12 =0x5c, + DW_OP_reg13 =0x5d, + DW_OP_reg14 =0x5e, + DW_OP_reg15 =0x5f, + DW_OP_reg16 =0x60, + DW_OP_reg17 =0x61, + DW_OP_reg18 =0x62, + DW_OP_reg19 =0x63, + DW_OP_reg20 =0x64, + DW_OP_reg21 =0x65, + DW_OP_reg22 =0x66, + DW_OP_reg23 =0x67, + DW_OP_reg24 =0x68, + DW_OP_reg25 =0x69, + DW_OP_reg26 =0x6a, + DW_OP_reg27 =0x6b, + DW_OP_reg28 =0x6c, + DW_OP_reg29 =0x6d, + DW_OP_reg30 =0x6e, + DW_OP_reg31 =0x6f, + DW_OP_breg0 =0x70, + DW_OP_breg1 =0x71, + DW_OP_breg2 =0x72, + DW_OP_breg3 =0x73, + DW_OP_breg4 =0x74, + DW_OP_breg5 =0x75, + DW_OP_breg6 =0x76, + DW_OP_breg7 =0x77, + DW_OP_breg8 =0x78, + DW_OP_breg9 =0x79, + DW_OP_breg10 =0x7a, + DW_OP_breg11 =0x7b, + DW_OP_breg12 =0x7c, + DW_OP_breg13 =0x7d, + DW_OP_breg14 =0x7e, + DW_OP_breg15 =0x7f, + DW_OP_breg16 =0x80, + DW_OP_breg17 =0x81, + DW_OP_breg18 =0x82, + DW_OP_breg19 =0x83, + DW_OP_breg20 =0x84, + DW_OP_breg21 =0x85, + DW_OP_breg22 =0x86, + DW_OP_breg23 =0x87, + DW_OP_breg24 =0x88, + DW_OP_breg25 =0x89, + DW_OP_breg26 =0x8a, + DW_OP_breg27 =0x8b, + DW_OP_breg28 =0x8c, + DW_OP_breg29 =0x8d, + DW_OP_breg30 =0x8e, + DW_OP_breg31 =0x8f, + DW_OP_regX =0x90, + DW_OP_fbreg =0x91, + DW_OP_bregX =0x92, + DW_OP_piece =0x93, + DW_OP_deref_size =0x94, + DW_OP_xderef_size =0x95, + DW_OP_nop =0x96, + // DWARF3/DWARF3f + DW_OP_push_object_address =0x97, + DW_OP_call2 =0x98, + DW_OP_call4 =0x99, + DW_OP_call_ref =0x9a, + DW_OP_form_tls_address =0x9b, + DW_OP_call_frame_cfa =0x9c, + DW_OP_bit_piece =0x9d, + DW_OP_lo_user =0xe0, + DW_OP_hi_user =0xff, + // GNU extensions + DW_OP_GNU_push_tls_address =0xe0 +}; + +} // End namespace elfcpp. + +#endif // !defined(ELFCPP_DWARF_H) diff --git a/elfcpp/elfcpp.h b/elfcpp/elfcpp.h new file mode 100644 index 0000000..11b0726 --- /dev/null +++ b/elfcpp/elfcpp.h @@ -0,0 +1,1796 @@ +// elfcpp.h -- main header file for elfcpp -*- C++ -*- + +// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// 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. + +// This is the external interface for elfcpp. + +#ifndef ELFCPP_H +#define ELFCPP_H + +#include "elfcpp_swap.h" + +#include + +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 +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, + + // Provide for initial and final section ordering in conjunction + // with the SHF_LINK_ORDER and SHF_ORDERED section flags. + SHN_BEFORE = 0xff00, + SHN_AFTER = 0xff01, + + // x86_64 specific large common symbol. + SHN_X86_64_LCOMMON = 0xff02 +}; + +// 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. + // Incremental build data. + SHT_GNU_INCREMENTAL_INPUTS = 0x6fff4700, + // Object attributes. + SHT_GNU_ATTRIBUTES = 0x6ffffff5, + // GNU style dynamic hash table. + SHT_GNU_HASH = 0x6ffffff6, + // 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, + + SHT_SPARC_GOTDATA = 0x70000000, + + // ARM-specific section types. + // Exception Index table. + SHT_ARM_EXIDX = 0x70000001, + // BPABI DLL dynamic linking pre-emption map. + SHT_ARM_PREEMPTMAP = 0x70000002, + // Object file compatibility attributes. + SHT_ARM_ATTRIBUTES = 0x70000003, + // Support for debugging overlaid programs. + SHT_ARM_DEBUGOVERLAY = 0x70000004, + SHT_ARM_OVERLAYSECTION = 0x70000005, + + // x86_64 unwind information. + SHT_X86_64_UNWIND = 0x70000001, + + // Link editor is to sort the entries in this section based on the + // address specified in the associated symbol table entry. + SHT_ORDERED = 0x7fffffff, +}; + +// 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, + + // Indicates this section requires ordering in relation to + // other sections of the same type. Ordered sections are + // combined within the section pointed to by the sh_link entry. + // The sh_info values SHN_BEFORE and SHN_AFTER imply that the + // sorted section is to precede or follow, respectively, all + // other sections in the set being ordered. + SHF_ORDERED = 0x40000000, + // This section is excluded from input to the link-edit of an + // executable or shared object. This flag is ignored if SHF_ALLOC + // is also set, or if relocations exist against the section. + SHF_EXCLUDE = 0x80000000, + + // x86_64 specific large section. + SHF_X86_64_LARGE = 0x10000000 +}; + +// 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, + // Platform architecture compatibility information + PT_ARM_ARCHEXT = 0x70000000, + // Exception unwind tables + PT_ARM_EXIDX = 0x70000001 +}; + +// 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_GNU_UNIQUE = 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_GNU_IFUNC = 10, + STT_HIOS = 12, + STT_LOPROC = 13, + STT_HIPROC = 15, + + // The section type that must be used for register symbols on + // Sparc. These symbols initialize a global register. + STT_SPARC_REGISTER = 13, + + // ARM: a THUMB function. This is not defined in ARM ELF Specification but + // used by the GNU tool-chain. + STT_ARM_TFUNC = 13, +}; + +inline STB +elf_st_bind(unsigned char info) +{ + return static_cast(info >> 4); +} + +inline STT +elf_st_type(unsigned char info) +{ + return static_cast(info & 0xf); +} + +inline unsigned char +elf_st_info(STB bind, STT type) +{ + return ((static_cast(bind) << 4) + + (static_cast(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(other & 0x3); +} + +inline unsigned char +elf_st_nonvis(unsigned char other) +{ + return static_cast(other >> 2); +} + +inline unsigned char +elf_st_other(STV vis, unsigned char nonvis) +{ + return ((nonvis << 2) + + (static_cast(vis) & 3)); +} + +// Reloc information from Rel/Rela r_info field. + +template +unsigned int +elf_r_sym(typename Elf_types::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 +unsigned int +elf_r_type(typename Elf_types::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 +typename Elf_types::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(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 = 32, + 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, + + // Specify the value of _GLOBAL_OFFSET_TABLE_. + DT_PPC_GOT = 0x70000000, + + // Specify the start of the .glink section. + DT_PPC64_GLINK = 0x70000000, + + // Specify the start and size of the .opd section. + DT_PPC64_OPD = 0x70000001, + DT_PPC64_OPDSZ = 0x70000002, + + // The index of an STT_SPARC_REGISTER symbol within the DT_SYMTAB + // symbol table. One dynamic entry exists for every STT_SPARC_REGISTER + // symbol in the symbol table. + DT_SPARC_REGISTER = 0x70000001, + + 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 +}; + +// Flags found in the DT_FLAGS_1 dynamic element. + +enum DF_1 +{ + DF_1_NOW = 0x1, + DF_1_GLOBAL = 0x2, + DF_1_GROUP = 0x4, + DF_1_NODELETE = 0x8, + DF_1_LOADFLTR = 0x10, + DF_1_INITFIRST = 0x20, + DF_1_NOOPEN = 0x40, + DF_1_ORIGIN = 0x80, + DF_1_DIRECT = 0x100, + DF_1_TRANS = 0x200, + DF_1_INTERPOSE = 0x400, + DF_1_NODEFLIB = 0x800, + DF_1_NODUMP = 0x1000, + DF_1_CONLFAT = 0x2000, +}; + +// 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; + +// Note descriptor type codes for notes in a non-core file with an +// empty name. + +enum +{ + // A version string. + NT_VERSION = 1, + // An architecture string. + NT_ARCH = 2 +}; + +// Note descriptor type codes for notes in a non-core file with the +// name "GNU". + +enum +{ + // The minimum ABI level. This is used by the dynamic linker to + // describe the minimal kernel version on which a shared library may + // be used. Th value should be four words. Word 0 is an OS + // descriptor (see below). Word 1 is the major version of the ABI. + // Word 2 is the minor version. Word 3 is the subminor version. + NT_GNU_ABI_TAG = 1, + // Hardware capabilities information. Word 0 is the number of + // entries. Word 1 is a bitmask of enabled entries. The rest of + // the descriptor is a series of entries, where each entry is a + // single byte followed by a nul terminated string. The byte gives + // the bit number to test if enabled in the bitmask. + NT_GNU_HWCAP = 2, + // The build ID as set by the linker's --build-id option. The + // format of the descriptor depends on the build ID style. + NT_GNU_BUILD_ID = 3, + // The version of gold used to link. Th descriptor is just a + // string. + NT_GNU_GOLD_VERSION = 4 +}; + +// The OS values which may appear in word 0 of a NT_GNU_ABI_TAG note. + +enum +{ + ELF_NOTE_OS_LINUX = 0, + ELF_NOTE_OS_GNU = 1, + ELF_NOTE_OS_SOLARIS2 = 2, + ELF_NOTE_OS_FREEBSD = 3, + ELF_NOTE_OS_NETBSD = 4, + ELF_NOTE_OS_SYLLABLE = 5 +}; + +} // 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 +struct Elf_sizes +{ + // Size of ELF file header. + static const int ehdr_size = sizeof(internal::Ehdr_data); + // Size of ELF segment header. + static const int phdr_size = sizeof(internal::Phdr_data); + // Size of ELF section header. + static const int shdr_size = sizeof(internal::Shdr_data); + // Size of ELF symbol table entry. + static const int sym_size = sizeof(internal::Sym_data); + // Sizes of ELF reloc entries. + static const int rel_size = sizeof(internal::Rel_data); + static const int rela_size = sizeof(internal::Rela_data); + // Size of ELF dynamic entry. + static const int dyn_size = sizeof(internal::Dyn_data); + // 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 +class Ehdr +{ + public: + Ehdr(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Ehdr(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + 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::Elf_Addr + get_e_entry() const + { return Convert::convert_host(this->p_->e_entry); } + + typename Elf_types::Elf_Off + get_e_phoff() const + { return Convert::convert_host(this->p_->e_phoff); } + + typename Elf_types::Elf_Off + get_e_shoff() const + { return Convert::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* p_; +}; + +// Write class for the ELF file header. + +template +class Ehdr_write +{ + public: + Ehdr_write(unsigned char* p) + : p_(reinterpret_cast*>(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::Elf_Addr v) + { this->p_->e_entry = Convert::convert_host(v); } + + void + put_e_phoff(typename Elf_types::Elf_Off v) + { this->p_->e_phoff = Convert::convert_host(v); } + + void + put_e_shoff(typename Elf_types::Elf_Off v) + { this->p_->e_shoff = Convert::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* p_; +}; + +// Accessor class for an ELF section header. + +template +class Shdr +{ + public: + Shdr(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Shdr(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + 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::Elf_WXword + get_sh_flags() const + { return Convert::convert_host(this->p_->sh_flags); } + + typename Elf_types::Elf_Addr + get_sh_addr() const + { return Convert::convert_host(this->p_->sh_addr); } + + typename Elf_types::Elf_Off + get_sh_offset() const + { return Convert::convert_host(this->p_->sh_offset); } + + typename Elf_types::Elf_WXword + get_sh_size() const + { return Convert::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::Elf_WXword + get_sh_addralign() const + { return + Convert::convert_host(this->p_->sh_addralign); } + + typename Elf_types::Elf_WXword + get_sh_entsize() const + { return Convert::convert_host(this->p_->sh_entsize); } + + private: + const internal::Shdr_data* p_; +}; + +// Write class for an ELF section header. + +template +class Shdr_write +{ + public: + Shdr_write(unsigned char* p) + : p_(reinterpret_cast*>(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::Elf_WXword v) + { this->p_->sh_flags = Convert::convert_host(v); } + + void + put_sh_addr(typename Elf_types::Elf_Addr v) + { this->p_->sh_addr = Convert::convert_host(v); } + + void + put_sh_offset(typename Elf_types::Elf_Off v) + { this->p_->sh_offset = Convert::convert_host(v); } + + void + put_sh_size(typename Elf_types::Elf_WXword v) + { this->p_->sh_size = Convert::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::Elf_WXword v) + { this->p_->sh_addralign = Convert::convert_host(v); } + + void + put_sh_entsize(typename Elf_types::Elf_WXword v) + { this->p_->sh_entsize = Convert::convert_host(v); } + + private: + internal::Shdr_data* p_; +}; + +// Accessor class for an ELF segment header. + +template +class Phdr +{ + public: + Phdr(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Phdr(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + 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::Elf_Off + get_p_offset() const + { return Convert::convert_host(this->p_->p_offset); } + + typename Elf_types::Elf_Addr + get_p_vaddr() const + { return Convert::convert_host(this->p_->p_vaddr); } + + typename Elf_types::Elf_Addr + get_p_paddr() const + { return Convert::convert_host(this->p_->p_paddr); } + + typename Elf_types::Elf_WXword + get_p_filesz() const + { return Convert::convert_host(this->p_->p_filesz); } + + typename Elf_types::Elf_WXword + get_p_memsz() const + { return Convert::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::Elf_WXword + get_p_align() const + { return Convert::convert_host(this->p_->p_align); } + + private: + const internal::Phdr_data* p_; +}; + +// Write class for an ELF segment header. + +template +class Phdr_write +{ + public: + Phdr_write(unsigned char* p) + : p_(reinterpret_cast*>(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::Elf_Off v) + { this->p_->p_offset = Convert::convert_host(v); } + + void + put_p_vaddr(typename Elf_types::Elf_Addr v) + { this->p_->p_vaddr = Convert::convert_host(v); } + + void + put_p_paddr(typename Elf_types::Elf_Addr v) + { this->p_->p_paddr = Convert::convert_host(v); } + + void + put_p_filesz(typename Elf_types::Elf_WXword v) + { this->p_->p_filesz = Convert::convert_host(v); } + + void + put_p_memsz(typename Elf_types::Elf_WXword v) + { this->p_->p_memsz = Convert::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::Elf_WXword v) + { this->p_->p_align = Convert::convert_host(v); } + + private: + internal::Phdr_data* p_; +}; + +// Accessor class for an ELF symbol table entry. + +template +class Sym +{ + public: + Sym(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Sym(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + 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::Elf_Addr + get_st_value() const + { return Convert::convert_host(this->p_->st_value); } + + typename Elf_types::Elf_WXword + get_st_size() const + { return Convert::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* p_; +}; + +// Writer class for an ELF symbol table entry. + +template +class Sym_write +{ + public: + Sym_write(unsigned char* p) + : p_(reinterpret_cast*>(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::Elf_Addr v) + { this->p_->st_value = Convert::convert_host(v); } + + void + put_st_size(typename Elf_types::Elf_WXword v) + { this->p_->st_size = Convert::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 + sym() + { return Sym(reinterpret_cast(this->p_)); } + + private: + internal::Sym_data* p_; +}; + +// Accessor classes for an ELF REL relocation entry. + +template +class Rel +{ + public: + Rel(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Rel(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + file->view(loc.file_offset, loc.data_size).data())) + { } + + typename Elf_types::Elf_Addr + get_r_offset() const + { return Convert::convert_host(this->p_->r_offset); } + + typename Elf_types::Elf_WXword + get_r_info() const + { return Convert::convert_host(this->p_->r_info); } + + private: + const internal::Rel_data* p_; +}; + +// Writer class for an ELF Rel relocation. + +template +class Rel_write +{ + public: + Rel_write(unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + void + put_r_offset(typename Elf_types::Elf_Addr v) + { this->p_->r_offset = Convert::convert_host(v); } + + void + put_r_info(typename Elf_types::Elf_WXword v) + { this->p_->r_info = Convert::convert_host(v); } + + private: + internal::Rel_data* p_; +}; + +// Accessor class for an ELF Rela relocation. + +template +class Rela +{ + public: + Rela(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Rela(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + file->view(loc.file_offset, loc.data_size).data())) + { } + + typename Elf_types::Elf_Addr + get_r_offset() const + { return Convert::convert_host(this->p_->r_offset); } + + typename Elf_types::Elf_WXword + get_r_info() const + { return Convert::convert_host(this->p_->r_info); } + + typename Elf_types::Elf_Swxword + get_r_addend() const + { return Convert::convert_host(this->p_->r_addend); } + + private: + const internal::Rela_data* p_; +}; + +// Writer class for an ELF Rela relocation. + +template +class Rela_write +{ + public: + Rela_write(unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + void + put_r_offset(typename Elf_types::Elf_Addr v) + { this->p_->r_offset = Convert::convert_host(v); } + + void + put_r_info(typename Elf_types::Elf_WXword v) + { this->p_->r_info = Convert::convert_host(v); } + + void + put_r_addend(typename Elf_types::Elf_Swxword v) + { this->p_->r_addend = Convert::convert_host(v); } + + private: + internal::Rela_data* p_; +}; + +// Accessor classes for entries in the ELF SHT_DYNAMIC section aka +// PT_DYNAMIC segment. + +template +class Dyn +{ + public: + Dyn(const unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + template + Dyn(File* file, typename File::Location loc) + : p_(reinterpret_cast*>( + file->view(loc.file_offset, loc.data_size).data())) + { } + + typename Elf_types::Elf_Swxword + get_d_tag() const + { return Convert::convert_host(this->p_->d_tag); } + + typename Elf_types::Elf_WXword + get_d_val() const + { return Convert::convert_host(this->p_->d_val); } + + typename Elf_types::Elf_Addr + get_d_ptr() const + { return Convert::convert_host(this->p_->d_val); } + + private: + const internal::Dyn_data* p_; +}; + +// Write class for an entry in the SHT_DYNAMIC section. + +template +class Dyn_write +{ + public: + Dyn_write(unsigned char* p) + : p_(reinterpret_cast*>(p)) + { } + + void + put_d_tag(typename Elf_types::Elf_Swxword v) + { this->p_->d_tag = Convert::convert_host(v); } + + void + put_d_val(typename Elf_types::Elf_WXword v) + { this->p_->d_val = Convert::convert_host(v); } + + void + put_d_ptr(typename Elf_types::Elf_Addr v) + { this->p_->d_val = Convert::convert_host(v); } + + private: + internal::Dyn_data* p_; +}; + +// Accessor classes for entries in the ELF SHT_GNU_verdef section. + +template +class Verdef +{ + public: + Verdef(const unsigned char* p) + : p_(reinterpret_cast(p)) + { } + + template + Verdef(File* file, typename File::Location loc) + : p_(reinterpret_cast( + 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 +class Verdef_write +{ + public: + Verdef_write(unsigned char* p) + : p_(reinterpret_cast(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 +class Verdaux +{ + public: + Verdaux(const unsigned char* p) + : p_(reinterpret_cast(p)) + { } + + template + Verdaux(File* file, typename File::Location loc) + : p_(reinterpret_cast( + 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 +class Verdaux_write +{ + public: + Verdaux_write(unsigned char* p) + : p_(reinterpret_cast(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 +class Verneed +{ + public: + Verneed(const unsigned char* p) + : p_(reinterpret_cast(p)) + { } + + template + Verneed(File* file, typename File::Location loc) + : p_(reinterpret_cast( + 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 +class Verneed_write +{ + public: + Verneed_write(unsigned char* p) + : p_(reinterpret_cast(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 +class Vernaux +{ + public: + Vernaux(const unsigned char* p) + : p_(reinterpret_cast(p)) + { } + + template + Vernaux(File* file, typename File::Location loc) + : p_(reinterpret_cast( + 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 +class Vernaux_write +{ + public: + Vernaux_write(unsigned char* p) + : p_(reinterpret_cast(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/elfcpp/elfcpp_file.h b/elfcpp/elfcpp_file.h new file mode 100644 index 0000000..cc61622 --- /dev/null +++ b/elfcpp/elfcpp_file.h @@ -0,0 +1,686 @@ +// elfcpp_file.h -- file access for elfcpp -*- C++ -*- + +// Copyright 2006, 2007, Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// 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. + +// 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 ELFCPP_FILE_H +#define ELFCPP_FILE_H + +#include +#include +#include + +namespace elfcpp +{ + +// A simple helper class to recognize if a file has an ELF header. + +class Elf_recognizer +{ + public: + // Maximum header size. The user should try to read this much of + // the file when using this class. + + static const int max_header_size = Elf_sizes<64>::ehdr_size; + + // Checks if the file contains the ELF magic. Other header fields + // are not checked. + + static bool + is_elf_file(const unsigned char* ehdr_buf, int size); + + // Check if EHDR_BUF/BUFSIZE is a valid header of a 32-bit or + // 64-bit, little-endian or big-endian ELF file. Assumes + // is_elf_file() has been checked to be true. If the header is not + // valid, *ERROR contains a human-readable error message. If is is, + // *SIZE is set to either 32 or 64, *BIG_ENDIAN is set to indicate + // whether the file is big-endian. + + static bool + is_valid_header(const unsigned char* ehdr_buf, off_t bufsize, + int* size, bool* big_endian, + std::string* error); +}; + +// 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 +class Elf_file +{ + private: + typedef Elf_file This; + + public: + static const int ehdr_size = Elf_sizes::ehdr_size; + static const int phdr_size = Elf_sizes::phdr_size; + static const int shdr_size = Elf_sizes::shdr_size; + static const int sym_size = Elf_sizes::sym_size; + static const int rel_size = Elf_sizes::rel_size; + static const int rela_size = Elf_sizes::rela_size; + + typedef Ehdr Ef_ehdr; + typedef Phdr Ef_phdr; + typedef Shdr Ef_shdr; + typedef Sym 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_; } + + // Find the first section with an sh_type field equal to TYPE and + // return its index. Returns SHN_UNDEF if there is no such section. + unsigned int + find_section_by_type(unsigned int type); + + // 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 value to subtract from section indexes >= + // SHN_LORESERVE. See the comment in initialize_shnum. + int + large_shndx_offset() + { + this->initialize_shnum(); + return this->large_shndx_offset_; + } + + // 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 size of section SHNDX. + typename Elf_types::Elf_WXword + section_size(unsigned int shndx); + + // Return the flags of section SHNDX. + typename Elf_types::Elf_WXword + section_flags(unsigned int shndx); + + // Return the address of section SHNDX. + typename Elf_types::Elf_Addr + section_addr(unsigned int shndx); + + // Return the type of section SHNDX. + Elf_Word + section_type(unsigned int shndx); + + // Return the link field of section SHNDX. + Elf_Word + section_link(unsigned int shndx); + + // Return the info field of section SHNDX. + Elf_Word + section_info(unsigned int shndx); + + // Return the addralign field of section SHNDX. + typename Elf_types::Elf_WXword + section_addralign(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_; + // Offset to add to sections larger than SHN_LORESERVE. + int large_shndx_offset_; +}; + +// A small wrapper around SHT_STRTAB data mapped to memory. It checks that the +// index is not out of bounds and the string is NULL-terminated. + +class Elf_strtab +{ + public: + // Construct an Elf_strtab for a section with contents *P and size SIZE. + Elf_strtab(const unsigned char* p, size_t size); + + // Return the file offset to the section headers. + bool + get_c_string(size_t offset, const char** cstring) const + { + if (offset >= this->usable_size_) + return false; + *cstring = this->base_ + offset; + return true; + } + + private: + // Contents of the section mapped to memory. + const char* base_; + // One larger that the position of the last NULL character in the section. + // For valid SHT_STRTAB sections, this is the size of the section. + size_t usable_size_; +}; + +// Inline function definitions. + +// Check for presence of the ELF magic number. + +inline bool +Elf_recognizer::is_elf_file(const unsigned char* ehdr_buf, int size) +{ + if (size < 4) + return false; + + static unsigned char elfmagic[4] = + { + elfcpp::ELFMAG0, elfcpp::ELFMAG1, + elfcpp::ELFMAG2, elfcpp::ELFMAG3 + }; + return memcmp(ehdr_buf, elfmagic, 4) == 0; +} + +namespace +{ + +// Print a number to a string. + +inline std::string +internal_printf_int(const char* format, int arg) +{ + char buf[256]; + snprintf(buf, sizeof(buf), format, arg); + return std::string(buf); +} + +} // End anonymous namespace. + +// Check the validity of the ELF header. + +inline bool +Elf_recognizer::is_valid_header( + const unsigned char* ehdr_buf, + off_t bufsize, + int* size, + bool* big_endian, + std::string* error) +{ + if (bufsize < elfcpp::EI_NIDENT) + { + *error = _("ELF file too short"); + return false; + } + + int v = ehdr_buf[elfcpp::EI_VERSION]; + if (v != elfcpp::EV_CURRENT) + { + if (v == elfcpp::EV_NONE) + *error = _("invalid ELF version 0"); + else + *error = internal_printf_int(_("unsupported ELF version %d"), v); + return false; + } + + int c = ehdr_buf[elfcpp::EI_CLASS]; + if (c == elfcpp::ELFCLASSNONE) + { + *error = _("invalid ELF class 0"); + return false; + } + else if (c != elfcpp::ELFCLASS32 + && c != elfcpp::ELFCLASS64) + { + *error = internal_printf_int(_("unsupported ELF class %d"), c); + return false; + } + + int d = ehdr_buf[elfcpp::EI_DATA]; + if (d == elfcpp::ELFDATANONE) + { + *error = _("invalid ELF data encoding"); + return false; + } + else if (d != elfcpp::ELFDATA2LSB + && d != elfcpp::ELFDATA2MSB) + { + *error = internal_printf_int(_("unsupported ELF data encoding %d"), d); + return false; + } + + *big_endian = (d == elfcpp::ELFDATA2MSB); + + if (c == elfcpp::ELFCLASS32) + { + if (bufsize < elfcpp::Elf_sizes<32>::ehdr_size) + { + *error = _("ELF file too short"); + return false; + } + *size = 32; + } + else + { + if (bufsize < elfcpp::Elf_sizes<64>::ehdr_size) + { + *error = _("ELF file too short"); + return false; + } + *size = 64; + } + + return true; +} + +// Template function definitions. + +// Construct an Elf_file given an ELF file header. + +template +void +Elf_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(); + this->large_shndx_offset_ = 0; + 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 +inline +Elf_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 +void +Elf_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(); + + // Versions of the GNU binutils between 2.12 and 2.18 did + // not handle objects with more than SHN_LORESERVE sections + // correctly. All large section indexes were offset by + // 0x100. Some information can be found here: + // http://sourceware.org/bugzilla/show_bug.cgi?id=5900 . + // Fortunately these object files are easy to detect, as the + // GNU binutils always put the section header string table + // near the end of the list of sections. Thus if the + // section header string table index is larger than the + // number of sections, then we know we have to subtract + // 0x100 to get the real section index. + if (this->shstrndx_ >= this->shnum_) + { + if (this->shstrndx_ >= elfcpp::SHN_LORESERVE + 0x100) + { + this->large_shndx_offset_ = - 0x100; + this->shstrndx_ -= 0x100; + } + if (this->shstrndx_ >= this->shnum_) + this->file_->error(_("bad shstrndx: %u >= %u"), + this->shstrndx_, this->shnum_); + } + } + } +} + +// Find section with sh_type equal to TYPE and return its index. +// Returns SHN_UNDEF if not found. + +template +unsigned int +Elf_file::find_section_by_type(unsigned int type) +{ + unsigned int shnum = this->shnum(); + typename File::View v(this->file_->view(this->shoff_, + This::shdr_size * shnum)); + for (unsigned int i = 0; i < shnum; i++) + { + Ef_shdr shdr(v.data() + This::shdr_size * i); + if (shdr.get_sh_type() == type) + return i; + } + return SHN_UNDEF; +} + +// Return the file offset of the section header of section SHNDX. + +template +off_t +Elf_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 +std::string +Elf_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; + typename Elf_types::Elf_WXword 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(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(p) - (data + sh_name); + + return std::string(data + sh_name, len); +} + +// Return the contents of section SHNDX. + +template +typename File::Location +Elf_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()); +} + +// Get the size of section SHNDX. + +template +typename Elf_types::Elf_WXword +Elf_file::section_size(unsigned int shndx) +{ + File* const file = this->file_; + + if (shndx >= this->shnum()) + file->error(_("section_size: 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_size(); +} + +// Return the section flags of section SHNDX. + +template +typename Elf_types::Elf_WXword +Elf_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(); +} + +// Return the address of section SHNDX. + +template +typename Elf_types::Elf_Addr +Elf_file::section_addr(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_addr(); +} + +// Return the type of section SHNDX. + +template +Elf_Word +Elf_file::section_type(unsigned int shndx) +{ + File* const file = this->file_; + + if (shndx >= this->shnum()) + file->error(_("section_type: 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_type(); +} + +// Return the sh_link field of section SHNDX. + +template +Elf_Word +Elf_file::section_link(unsigned int shndx) +{ + File* const file = this->file_; + + if (shndx >= this->shnum()) + file->error(_("section_link: 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_link(); +} + +// Return the sh_info field of section SHNDX. + +template +Elf_Word +Elf_file::section_info(unsigned int shndx) +{ + File* const file = this->file_; + + if (shndx >= this->shnum()) + file->error(_("section_info: 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_info(); +} + +// Return the sh_addralign field of section SHNDX. + +template +typename Elf_types::Elf_WXword +Elf_file::section_addralign(unsigned int shndx) +{ + File* const file = this->file_; + + if (shndx >= this->shnum()) + file->error(_("section_addralign: 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_addralign(); +} + +inline +Elf_strtab::Elf_strtab(const unsigned char* p, size_t size) +{ + // Check if the section is NUL-terminated. If it isn't, we ignore + // the last part to make sure we don't return non-NUL-terminated + // strings. + while (size > 0 && p[size - 1] != 0) + size--; + this->base_ = reinterpret_cast(p); + this->usable_size_ = size; +} + +} // 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 0000000..df84e7e --- /dev/null +++ b/elfcpp/elfcpp_internal.h @@ -0,0 +1,240 @@ +// elfcpp_internal.h -- internals for elfcpp -*- C++ -*- + +// Copyright 2006, 2007, Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// 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. + +// This is included by elfcpp.h, the external interface, but holds +// information which we want to keep private. + +#ifndef ELFCPP_INTERNAL_H +#define ELFCPP_INTERNAL_H + +namespace elfcpp +{ + +namespace internal +{ + +// The ELF file header. + +template +struct Ehdr_data +{ + unsigned char e_ident[EI_NIDENT]; + Elf_Half e_type; + Elf_Half e_machine; + Elf_Word e_version; + typename Elf_types::Elf_Addr e_entry; + typename Elf_types::Elf_Off e_phoff; + typename Elf_types::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 +struct Shdr_data +{ + Elf_Word sh_name; + Elf_Word sh_type; + typename Elf_types::Elf_WXword sh_flags; + typename Elf_types::Elf_Addr sh_addr; + typename Elf_types::Elf_Off sh_offset; + typename Elf_types::Elf_WXword sh_size; + Elf_Word sh_link; + Elf_Word sh_info; + typename Elf_types::Elf_WXword sh_addralign; + typename Elf_types::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 +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 +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 +struct Rel_data +{ + typename Elf_types::Elf_Addr r_offset; + typename Elf_types::Elf_WXword r_info; +}; + +template +struct Rela_data +{ + typename Elf_types::Elf_Addr r_offset; + typename Elf_types::Elf_WXword r_info; + typename Elf_types::Elf_Swxword r_addend; +}; + +// An entry in the ELF SHT_DYNAMIC section aka PT_DYNAMIC segment. + +template +struct Dyn_data +{ + typename Elf_types::Elf_Swxword d_tag; + typename Elf_types::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 0000000..0685276 --- /dev/null +++ b/elfcpp/elfcpp_swap.h @@ -0,0 +1,435 @@ +// elfcpp_swap.h -- Handle swapping for elfcpp -*- C++ -*- + +// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// 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. + +// 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 + +// We need an autoconf-generated config.h file for endianness and +// swapping. We check two macros: WORDS_BIGENDIAN and +// HAVE_BYTESWAP_H. + +#include "config.h" + +#ifdef HAVE_BYTESWAP_H +#include +#else +// Provide our own versions of the byteswap functions. +inline uint16_t +bswap_16(uint16_t v) +{ + return ((v >> 8) & 0xff) | ((v & 0xff) << 8); +} + +inline uint32_t +bswap_32(uint32_t v) +{ + return ( ((v & 0xff000000) >> 24) + | ((v & 0x00ff0000) >> 8) + | ((v & 0x0000ff00) << 8) + | ((v & 0x000000ff) << 24)); +} + +inline uint64_t +bswap_64(uint64_t v) +{ + return ( ((v & 0xff00000000000000ULL) >> 56) + | ((v & 0x00ff000000000000ULL) >> 40) + | ((v & 0x0000ff0000000000ULL) >> 24) + | ((v & 0x000000ff00000000ULL) >> 8) + | ((v & 0x00000000ff000000ULL) << 8) + | ((v & 0x0000000000ff0000ULL) << 24) + | ((v & 0x000000000000ff00ULL) << 40) + | ((v & 0x00000000000000ffULL) << 56)); +} +#endif // !defined(HAVE_BYTESWAP_H) + +// gcc 4.3 and later provides __builtin_bswap32 and __builtin_bswap64. + +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +#undef bswap_32 +#define bswap_32 __builtin_bswap32 +#undef bswap_64 +#define bswap_64 __builtin_bswap64 +#endif + +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 = +#ifdef WORDS_BIGENDIAN + true +#else + false +#endif + ; +}; + +// Valtype_base is a template based on size (8, 16, 32, 64) which +// defines the type Valtype as the unsigned integer, and +// Signed_valtype as the signed integer, of the specified size. + +template +struct Valtype_base; + +template<> +struct Valtype_base<8> +{ + typedef uint8_t Valtype; + typedef int8_t Signed_valtype; +}; + +template<> +struct Valtype_base<16> +{ + typedef uint16_t Valtype; + typedef int16_t Signed_valtype; +}; + +template<> +struct Valtype_base<32> +{ + typedef uint32_t Valtype; + typedef int32_t Signed_valtype; +}; + +template<> +struct Valtype_base<64> +{ + typedef uint64_t Valtype; + typedef int64_t Signed_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 +struct Convert_endian; + +template +struct Convert_endian +{ + typedef typename Valtype_base::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 +struct Convert +{ + typedef typename Valtype_base::Valtype Valtype; + + static inline Valtype + convert_host(Valtype v) + { + return Convert_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 +struct Swap +{ + typedef typename Valtype_base::Valtype Valtype; + + static inline Valtype + readval(const Valtype* wv) + { return Convert::convert_host(*wv); } + + static inline void + writeval(Valtype* wv, Valtype v) + { *wv = Convert::convert_host(v); } + + static inline Valtype + readval(const unsigned char* wv) + { return readval(reinterpret_cast(wv)); } + + static inline void + writeval(unsigned char* wv, Valtype v) + { writeval(reinterpret_cast(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 +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 +struct Swap_unaligned; + +template +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(wv[7]) << 56) + | (static_cast(wv[6]) << 48) + | (static_cast(wv[5]) << 40) + | (static_cast(wv[4]) << 32) + | (static_cast(wv[3]) << 24) + | (static_cast(wv[2]) << 16) + | (static_cast(wv[1]) << 8) + | static_cast(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(wv[0]) << 56) + | (static_cast(wv[1]) << 48) + | (static_cast(wv[2]) << 40) + | (static_cast(wv[3]) << 32) + | (static_cast(wv[4]) << 24) + | (static_cast(wv[5]) << 16) + | (static_cast(wv[6]) << 8) + | static_cast(wv[7])); + } + + static inline void + writeval(unsigned char* wv, Valtype v) + { + wv[0] = v >> 56; + wv[1] = v >> 48; + wv[2] = v >> 40; + wv[3] = v >> 32; + wv[4] = v >> 24; + wv[5] = v >> 16; + wv[6] = v >> 8; + wv[7] = v; + } +}; + +} // End namespace elfcpp. + +#endif // !defined(ELFCPP_SWAP_H) diff --git a/elfcpp/i386.h b/elfcpp/i386.h new file mode 100644 index 0000000..397e0e6 --- /dev/null +++ b/elfcpp/i386.h @@ -0,0 +1,97 @@ +// i386.h -- ELF definitions specific to EM_386 -*- C++ -*- + +// Copyright 2006, 2007, Free Software Foundation, Inc. +// Written by Ian Lance Taylor . + +// This file is part of elfcpp. + +// 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. + +#ifndef ELFCPP_I386_H +#define ELFCPP_I386_H + +// Documentation for the TLS relocs is taken from +// http://people.redhat.com/drepper/tls.pdf +// http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt + +namespace elfcpp +{ + +enum +{ + R_386_NONE = 0, // No reloc + R_386_32 = 1, // Direct 32 bit zero extended + R_386_PC32 = 2, // PC relative 32 bit signed + R_386_GOT32 = 3, // 32 bit GOT entry + R_386_PLT32 = 4, // 32 bit PLT address + R_386_COPY = 5, // Copy symbol at runtime + R_386_GLOB_DAT = 6, // Create GOT entry + R_386_JUMP_SLOT = 7, // Create PLT entry + R_386_RELATIVE = 8, // Adjust by program base + R_386_GOTOFF = 9, // 32-bit GOT offset + R_386_GOTPC = 10, // 32-bit PC relative offset to GOT + // Used by Sun. + R_386_32PLT = 11, + // TLS extensions. + R_386_TLS_TPOFF = 14, // Outstanding Initial Exec reloc, gnu-style (both) + R_386_TLS_IE = 15, // Initial Initial Exec reloc, gnu-style (no-PIC) + R_386_TLS_GOTIE = 16, // Initial Initial Exec reloc, gnu-style (for PIC) + R_386_TLS_LE = 17, // Initial Local Exec reloc, gnu-style + R_386_TLS_GD = 18, // Initial General Dynamic reloc, gnu-style + R_386_TLS_LDM = 19, // Initial Local Dynamic reloc, gnu-style + // GNU extensions. + R_386_16 = 20, // Direct 16 bit zero extended + R_386_PC16 = 21, // 16 bit sign extended pc relative + R_386_8 = 22, // Direct 8 bit sign extended + R_386_PC8 = 23, // 8 bit sign extended pc relative + // More TLS relocs. + R_386_TLS_GD_32 = 24, // Initial General Dynamic reloc, sun-style + R_386_TLS_GD_PUSH = 25, // Initial General Dynamic reloc, sun-style + R_386_TLS_GD_CALL = 26, // Initial General Dynamic reloc, sun-style + R_386_TLS_GD_POP = 27, // Initial General Dynamic reloc, sun-style + R_386_TLS_LDM_32 = 28, // Initial Local Dynamic reloc, sun-style + R_386_TLS_LDM_PUSH = 29, // Initial Local Dynamic reloc, sun-style + R_386_TLS_LDM_CALL = 30, // Initial Local Dynamic reloc, sun-style + R_386_TLS_LDM_POP = 31, // Initial Local Dynamic reloc, sun-style + R_386_TLS_LDO_32 = 32, // Initial Local Dynamic reloc, sun+gnu styles + R_386_TLS_IE_32 = 33, // Initial Initial Exec reloc, sun-style + R_386_TLS_LE_32 = 34, // Initial Local Exec reloc, sun-style + R_386_TLS_DTPMOD32 = 35, // Outstanding General/Local Dynamic reloc, sun+gnu + R_386_TLS_DTPOFF32 = 36, // Outstanding General Dynamic reloc, sun+gnu + R_386_TLS_TPOFF32 = 37, // Outstanding Initial Exec reloc, sun-style + R_386_TLS_GOTDESC = 39, // GOT offset for TLS descriptor + R_386_TLS_DESC_CALL = 40, // Marker of call through TLS desc for relaxation + R_386_TLS_DESC = 41, // TLS descriptor containing pointer to code and + // to argument, returning TLS offset for symbol + // 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/elfcpp/powerpc.h b/elfcpp/powerpc.h new file mode 100644 index 0000000..9f2b71c --- /dev/null +++ b/elfcpp/powerpc.h @@ -0,0 +1,191 @@ +// powerpc.h -- ELF definitions specific to EM_PPC and EM_PPC64 -*- C++ -*- + +// Copyright 2008, Free Software Foundation, Inc. +// Written by David S. Miller . + +// This file is part of elfcpp. + +// 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. + +#ifndef ELFCPP_POWERPC_H +#define ELFCPP_POWERPC_H + +namespace elfcpp +{ + +// The relocation numbers for 32-bit and 64-bit powerpc are nearly +// identical. Therefore I've adopted the convention of using +// R_POWERPC_foo for values which are the same in R_PPC_* and R_PPC64_*. +// For relocations which are specific to the word size I will use +// R_PPC_foo or R_PPC64_foo. +enum +{ + R_POWERPC_NONE = 0, + R_POWERPC_ADDR32 = 1, + R_POWERPC_ADDR24 = 2, + R_POWERPC_ADDR16 = 3, + R_POWERPC_ADDR16_LO = 4, + R_POWERPC_ADDR16_HI = 5, + R_POWERPC_ADDR16_HA = 6, + R_POWERPC_ADDR14 = 7, + R_POWERPC_ADDR14_BRTAKEN = 8, + R_POWERPC_ADDR14_BRNTAKEN = 9, + R_POWERPC_REL24 = 10, + R_POWERPC_REL14 = 11, + R_POWERPC_REL14_BRTAKEN = 12, + R_POWERPC_REL14_BRNTAKEN = 13, + R_POWERPC_GOT16 = 14, + R_POWERPC_GOT16_LO = 15, + R_POWERPC_GOT16_HI = 16, + R_POWERPC_GOT16_HA = 17, + R_PPC_PLTREL24 = 18, + R_POWERPC_COPY = 19, + R_POWERPC_GLOB_DAT = 20, + R_POWERPC_JMP_SLOT = 21, + R_POWERPC_RELATIVE = 22, + R_PPC_LOCAL24PC = 23, + R_POWERPC_UADDR32 = 24, + R_POWERPC_UADDR16 = 25, + R_POWERPC_REL32 = 26, + R_POWERPC_PLT32 = 27, + R_POWERPC_PLTREL32 = 28, + R_POWERPC_PLT16_LO = 29, + R_POWERPC_PLT16_HI = 30, + R_POWERPC_PLT16_HA = 31, + R_PPC_SDAREL16 = 32, + R_POWERPC_SECTOFF = 33, + R_POWERPC_SECTOFF_LO = 34, + R_POWERPC_SECTOFF_HI = 35, + R_POWERPC_SECTOFF_HA = 36, + R_POWERPC_ADDR30 = 37, + R_PPC64_ADDR64 = 38, + R_PPC64_ADDR16_HIGHER = 39, + R_PPC64_ADDR16_HIGHERA = 40, + R_PPC64_ADDR16_HIGHEST = 41, + R_PPC64_ADDR16_HIGHESTA = 42, + R_PPC64_UADDR64 = 43, + R_PPC64_REL64 = 44, + R_PPC64_PLT64 = 45, + R_PPC64_PLTREL64 = 46, + R_PPC64_TOC16 = 47, + R_PPC64_TOC16_LO = 48, + R_PPC64_TOC16_HI = 49, + R_PPC64_TOC16_HA = 50, + R_PPC64_TOC = 51, + R_PPC64_PLTGOT16 = 52, + R_PPC64_PLTGOT16_LO = 53, + R_PPC64_PLTGOT16_HI = 54, + R_PPC64_PLTGOT16_HA = 55, + R_PPC64_ADDR16_DS = 56, + R_PPC64_ADDR16_LO_DS = 57, + R_PPC64_GOT16_DS = 58, + R_PPC64_GOT16_LO_DS = 59, + R_PPC64_PLT16_LO_DS = 60, + R_PPC64_SECTOFF_DS = 61, + R_PPC64_SECTOFF_LO_DS = 62, + R_PPC64_TOC16_DS = 63, + R_PPC64_TOC16_LO_DS = 64, + R_PPC64_PLTGOT16_DS = 65, + R_PPC64_PLTGOT16_LO_DS = 66, + R_POWERPC_TLS = 67, + R_POWERPC_DTPMOD = 68, + R_POWERPC_TPREL16 = 69, + R_POWERPC_TPREL16_LO = 70, + R_POWERPC_TPREL16_HI = 71, + R_POWERPC_TPREL16_HA = 72, + R_POWERPC_TPREL = 73, + R_POWERPC_DTPREL16 = 74, + R_POWERPC_DTPREL16_LO = 75, + R_POWERPC_DTPREL16_HI = 76, + R_POWERPC_DTPREL16_HA = 77, + R_POWERPC_DTPREL = 78, + R_POWERPC_GOT_TLSGD16 = 79, + R_POWERPC_GOT_TLSGD16_LO = 80, + R_POWERPC_GOT_TLSGD16_HI = 81, + R_POWERPC_GOT_TLSGD16_HA = 82, + R_POWERPC_GOT_TLSLD16 = 83, + R_POWERPC_GOT_TLSLD16_LO = 84, + R_POWERPC_GOT_TLSLD16_HI = 85, + R_POWERPC_GOT_TLSLD16_HA = 86, + R_POWERPC_GOT_TPREL16 = 87, + R_POWERPC_GOT_TPREL16_LO = 88, + R_POWERPC_GOT_TPREL16_HI = 89, + R_POWERPC_GOT_TPREL16_HA = 90, + R_POWERPC_GOT_DTPREL16 = 91, + R_POWERPC_GOT_DTPREL16_LO = 92, + R_POWERPC_GOT_DTPREL16_HI = 93, + R_POWERPC_GOT_DTPREL16_HA = 94, + R_PPC64_TPREL16_DS = 95, + R_PPC64_TPREL16_LO_DS = 96, + R_PPC64_TPREL16_HIGHER = 97, + R_PPC64_TPREL16_HIGHERA = 98, + R_PPC64_TPREL16_HIGHEST = 99, + R_PPC64_TPREL16_HIGHESTA = 100, + R_PPC64_DTPREL16_DS = 101, + R_PPC64_DTPREL16_LO_DS = 102, + R_PPC64_DTPREL16_HIGHER = 103, + R_PPC64_DTPREL16_HIGHERA = 104, + R_PPC64_DTPREL16_HIGHEST = 105, + R_PPC64_DTPREL16_HIGHESTA = 106, + R_PPC_EMB_NADDR32 = 101, + R_PPC_EMB_NADDR16 = 102, + R_PPC_EMB_NADDR16_LO = 103, + R_PPC_EMB_NADDR16_HI = 104, + R_PPC_EMB_NADDR16_HA = 105, + R_PPC_EMB_SDAI16 = 106, + R_PPC_EMB_SDA2I16 = 107, + R_PPC_EMB_SDA2REL = 108, + R_PPC_EMB_SDA21 = 109, + R_PPC_EMB_MRKREF = 110, + R_PPC_EMB_RELSEC16 = 111, + R_PPC_EMB_RELST_LO = 112, + R_PPC_EMB_RELST_HI = 113, + R_PPC_EMB_RELST_HA = 114, + R_PPC_EMB_BIT_FLD = 115, + R_PPC_EMB_RELSDA = 116, + R_PPC_RELAX32 = 245, + R_PPC_RELAX32PC = 246, + R_PPC_RELAX32_PLT = 247, + R_PPC_RELAX32PC_PLT = 248, + R_PPC_REL16 = 249, + R_PPC_REL16_LO = 250, + R_PPC_REL16_HI = 251, + R_PPC_REL16_HA = 252, + R_POWERPC_GNU_VTINHERIT = 253, + R_POWERPC_GNU_VTENTRY = 254, + R_PPC_TOC16 = 255, +}; + +// e_flags values defined for powerpc +enum +{ + EF_PPC_EMB = 0x80000000, // PowerPC embedded flag. + EF_PPC_RELOCATABLE = 0x00010000, // PowerPC -mrelocatable flag. */ + EF_PPC_RELOCATABLE_LIB = 0x00008000, // PowerPC -mrelocatable-lib flag. */ +}; + +} // End namespace elfcpp. + +#endif // !defined(ELFCPP_POWERPC_H) diff --git a/elfcpp/sparc.h b/elfcpp/sparc.h new file mode 100644 index 0000000..37036fa --- /dev/null +++ b/elfcpp/sparc.h @@ -0,0 +1,169 @@ +// sparc.h -- ELF definitions specific to EM_SPARC -*- C++ -*- + +// Copyright 2008, Free Software Foundation, Inc. +// Written by David S. Miller . + +// This file is part of elfcpp. + +// 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. + +#ifndef ELFCPP_SPARC_H +#define ELFCPP_SPARC_H + +// Documentation for the TLS relocs is taken from +// http://people.redhat.com/drepper/tls.pdf +// +// More full documentation on sparc specific ELF file +// format details can be found at +// +// http://docs.sun.com/app/docs/doc/819/0690/ +// "Linker and Libraries Guide" +// +// specifically Chapter 7 "Object File Format" and +// Chapter 8 "Thread-Local Storage" + +namespace elfcpp +{ + +enum +{ + R_SPARC_NONE = 0, // No reloc + R_SPARC_8 = 1, // Direct 8 bit + R_SPARC_16 = 2, // Direct 16 bit + R_SPARC_32 = 3, // Direct 32 bit + R_SPARC_DISP8 = 4, // PC relative 8 bit + R_SPARC_DISP16 = 5, // PC relative 16 bit + R_SPARC_DISP32 = 6, // PC relative 32 bit + R_SPARC_WDISP30 = 7, // PC relative 30 bit shifted + R_SPARC_WDISP22 = 8, // PC relative 22 bit shifted + R_SPARC_HI22 = 9, // High 22 bit + R_SPARC_22 = 10, // Direct 22 bit + R_SPARC_13 = 11, // Direct 13 bit + R_SPARC_LO10 = 12, // Truncated 10 bit + R_SPARC_GOT10 = 13, // Truncated 10 bit GOT entry + R_SPARC_GOT13 = 14, // 13 bit GOT entry + R_SPARC_GOT22 = 15, // 22 bit GOT entry shifted + R_SPARC_PC10 = 16, // PC relative 10 bit truncated + R_SPARC_PC22 = 17, // PC relative 22 bit shifted + R_SPARC_WPLT30 = 18, // 30 bit PC relative PLT address + R_SPARC_COPY = 19, // Copy symbol at runtime + R_SPARC_GLOB_DAT = 20, // Create GOT entry + R_SPARC_JMP_SLOT = 21, // Create PLT entry + R_SPARC_RELATIVE = 22, // Adjust by program base + R_SPARC_UA32 = 23, // Direct 32 bit unaligned + R_SPARC_PLT32 = 24, // Direct 32 bit ref to PLT entry + R_SPARC_HIPLT22 = 25, // High 22 bit PLT entry + R_SPARC_LOPLT10 = 26, // Truncated 10 bit PLT entry + R_SPARC_PCPLT32 = 27, // PC rel 32 bit ref to PLT entry + R_SPARC_PCPLT22 = 28, // PC rel high 22 bit PLT entry + R_SPARC_PCPLT10 = 29, // PC rel trunc 10 bit PLT entry + R_SPARC_10 = 30, // Direct 10 bit + R_SPARC_11 = 31, // Direct 11 bit + R_SPARC_64 = 32, // Direct 64 bit + R_SPARC_OLO10 = 33, // 10bit with secondary 13bit addend + R_SPARC_HH22 = 34, // Top 22 bits of direct 64 bit + R_SPARC_HM10 = 35, // High middle 10 bits of ... + R_SPARC_LM22 = 36, // Low middle 22 bits of ... + R_SPARC_PC_HH22 = 37, // Top 22 bits of pc rel 64 bit + R_SPARC_PC_HM10 = 38, // High middle 10 bit of ... + R_SPARC_PC_LM22 = 39, // Low miggle 22 bits of ... + R_SPARC_WDISP16 = 40, // PC relative 16 bit shifted + R_SPARC_WDISP19 = 41, // PC relative 19 bit shifted + R_SPARC_GLOB_JMP = 42, // was part of v9 ABI but was removed + R_SPARC_7 = 43, // Direct 7 bit + R_SPARC_5 = 44, // Direct 5 bit + R_SPARC_6 = 45, // Direct 6 bit + R_SPARC_DISP64 = 46, // PC relative 64 bit + R_SPARC_PLT64 = 47, // Direct 64 bit ref to PLT entry + R_SPARC_HIX22 = 48, // High 22 bit complemented + R_SPARC_LOX10 = 49, // Truncated 11 bit complemented + R_SPARC_H44 = 50, // Direct high 12 of 44 bit + R_SPARC_M44 = 51, // Direct mid 22 of 44 bit + R_SPARC_L44 = 52, // Direct low 10 of 44 bit + R_SPARC_REGISTER = 53, // Global register usage + R_SPARC_UA64 = 54, // Direct 64 bit unaligned + R_SPARC_UA16 = 55, // Direct 16 bit unaligned + R_SPARC_TLS_GD_HI22 = 56, // Initial General Dynamic reloc, high 22-bit + R_SPARC_TLS_GD_LO10 = 57, // Initial General Dynamic reloc, low 10-bit + R_SPARC_TLS_GD_ADD = 58, // Initial General Dynamic reloc, add + R_SPARC_TLS_GD_CALL = 59, // Initial General Dynamic reloc, call + R_SPARC_TLS_LDM_HI22 = 60, // Initial Local Dynamic reloc, high 22-bit + R_SPARC_TLS_LDM_LO10 = 61, // Initial Local Dynamic reloc, low 10-bit + R_SPARC_TLS_LDM_ADD = 62, // Initial Local Dynamic reloc, add + R_SPARC_TLS_LDM_CALL = 63, // Initial Local Dynamic reloc, call + R_SPARC_TLS_LDO_HIX22 = 64, // Initial Local Dynamic, high extended 22-bit + R_SPARC_TLS_LDO_LOX10 = 65, // Initial Local Dynamic, low extended 10-bit + R_SPARC_TLS_LDO_ADD = 66, // Initial Local Dynamic, add extended + R_SPARC_TLS_IE_HI22 = 67, // Initial Initial Exec reloc, high 22-bit + R_SPARC_TLS_IE_LO10 = 68, // Initial Initial Exec reloc, low 10-bit + R_SPARC_TLS_IE_LD = 69, // Initial Initial Exec reloc, load 32-bit + R_SPARC_TLS_IE_LDX = 70, // Initial Initial Exec reloc, load 64-bit + R_SPARC_TLS_IE_ADD = 71, // Initial Initial Exec reloc, add + R_SPARC_TLS_LE_HIX22 = 72, // Initial Local Exec reloc, high extended 22-bit + R_SPARC_TLS_LE_LOX10 = 73, // Initial Local Exec reloc, low extended 10-bit + R_SPARC_TLS_DTPMOD32 = 74, // Outstanding General/Local Dynamic reloc, 32-bit + R_SPARC_TLS_DTPMOD64 = 75, // Outstanding General/Local Dynamic reloc, 64-bit + R_SPARC_TLS_DTPOFF32 = 76, // Outstanding General Dynamic reloc, 32-bit + R_SPARC_TLS_DTPOFF64 = 77, // Outstanding General Dynamic reloc, 64-bit + R_SPARC_TLS_TPOFF32 = 78, // Outstanding Initial Exec reloc, 32-bit + R_SPARC_TLS_TPOFF64 = 79, // Outstanding Initial Exec reloc, 64-bit + + // GOT data code transformations + R_SPARC_GOTDATA_HIX22 = 80, + R_SPARC_GOTDATA_LOX10 = 81, + R_SPARC_GOTDATA_OP_HIX22 = 82, + R_SPARC_GOTDATA_OP_LOX10 = 83, + R_SPARC_GOTDATA_OP = 84, + + R_SPARC_H34 = 85, // Direct high 12 of 34 bit + R_SPARC_SIZE32 = 86, // size of symbol, 32-bit + R_SPARC_SIZE64 = 87, // size of symbol, 64-bit + + // GNU vtable garbage collection extensions. + R_SPARC_GNU_VTINHERIT = 250, + R_SPARC_GNU_VTENTRY = 251, + + R_SPARC_REV32 = 252, +}; + +// e_flags values defined for sparc +enum +{ + EF_SPARC_EXT_MASK = 0xffff00, // reserved for vendor extensions + EF_SPARC_32PLUS_MASK = 0xffff00, // bits indicating V8+ type + EF_SPARC_32PLUS = 0x000100, // generic V8+ features + EF_SPARC_SUN_US1 = 0x000200, // Sun UltraSPARC-I extensions + EF_SPARC_HAL_R1 = 0x000400, // HAL R1 extensions + EF_SPARC_SUN_US3 = 0x000800, // Sun UltraSPARC-III extensions + EF_SPARC_LEDATA = 0x800000, // little endian data + EF_SPARCV9_MM = 0x3, // memory model mask + EF_SPARCV9_TSO = 0x0, // total store ordering + EF_SPARCV9_PSO = 0x1, // partial store ordering + EF_SPARCV9_RMO = 0x2, // relaxed store ordering +}; + +} // End namespace elfcpp. + +#endif // !defined(ELFCPP_SPARC_H) diff --git a/elfcpp/x86_64.h b/elfcpp/x86_64.h new file mode 100644 index 0000000..3f71652 --- /dev/null +++ b/elfcpp/x86_64.h @@ -0,0 +1,100 @@ +// x86-64.h -- ELF definitions specific to EM_X86_64 -*- C++ -*- + +// Copyright 2006, 2007, Free Software Foundation, Inc. +// Written by Andrew Chatham. + +// This file is part of elfcpp. + +// 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. + +#ifndef ELFCPP_X86_64_H +#define ELFCPP_X86_64_H + +namespace elfcpp +{ + +// Documentation is taken from +// http://www.x86-64.org/documentation/abi-0.98.pdf +// elf.h +// Documentation for the TLS relocs is taken from +// http://people.redhat.com/drepper/tls.pdf +// http://www.lsd.ic.unicamp.br/~oliva/writeups/TLS/RFC-TLSDESC-x86.txt + +enum +{ + R_X86_64_NONE = 0, // No reloc + R_X86_64_64 = 1, // Direct 64 bit + R_X86_64_PC32 = 2, // PC relative 32 bit signed + R_X86_64_GOT32 = 3, // 32 bit GOT entry + R_X86_64_PLT32 = 4, // 32 bit PLT address + R_X86_64_COPY = 5, // Copy symbol at runtime + R_X86_64_GLOB_DAT = 6, // Create GOT entry + R_X86_64_JUMP_SLOT = 7, // Create PLT entry + R_X86_64_RELATIVE = 8, // Adjust by program base + R_X86_64_GOTPCREL = 9, // 32 bit signed PC relative offset to GOT + R_X86_64_32 = 10, // Direct 32 bit zero extended + R_X86_64_32S = 11, // Direct 32 bit sign extended + R_X86_64_16 = 12, // Direct 16 bit zero extended + R_X86_64_PC16 = 13, // 16 bit sign extended pc relative + R_X86_64_8 = 14, // Direct 8 bit sign extended + R_X86_64_PC8 = 15, // 8 bit sign extended pc relative + + // TLS relocations + R_X86_64_DTPMOD64 = 16, // ID of module containing symbol + R_X86_64_DTPOFF64 = 17, // Offset in module's TLS block + R_X86_64_TPOFF64 = 18, // Offset in initial TLS block + R_X86_64_TLSGD = 19, // 32 bit signed PC relative offset to two + // GOT entries for GD symbol + R_X86_64_TLSLD = 20, // 32 bit signed PC relative offset to two + // GOT entries for LD symbol + R_X86_64_DTPOFF32 = 21, // Offset in TLS block + R_X86_64_GOTTPOFF = 22, // 32 bit signed PC relative offset to GOT + // entry for IE symbol + R_X86_64_TPOFF32 = 23, // Offset in initial TLS block + + R_X86_64_PC64 = 24, // 64-bit PC relative + R_X86_64_GOTOFF64 = 25, // 64-bit GOT offset + R_X86_64_GOTPC32 = 26, // 32-bit PC relative offset to GOT + + R_X86_64_GOT64 = 27, // 64-bit GOT entry offset + R_X86_64_GOTPCREL64 = 28, // 64-bit PC relative offset to GOT entry + R_X86_64_GOTPC64 = 29, // 64-bit PC relative offset to GOT + R_X86_64_GOTPLT64 = 30, // Like GOT64, indicates that PLT entry needed + R_X86_64_PLTOFF64 = 31, // 64-bit GOT relative offset to PLT entry + + R_X86_64_SIZE32 = 32, + R_X86_64_SIZE64 = 33, + + R_X86_64_GOTPC32_TLSDESC = 34, // 32-bit PC relative to TLS descriptor in GOT + R_X86_64_TLSDESC_CALL = 35, // Relaxable call through TLS descriptor + R_X86_64_TLSDESC = 36, // 2 by 64-bit TLS descriptor + // GNU vtable garbage collection extensions. + R_386_GNU_VTINHERIT = 250, + R_386_GNU_VTENTRY = 251 +}; + +} // End namespace elfcpp. + +#endif // !defined(ELFCPP_X86_64_H) diff --git a/etc/ChangeLog b/etc/ChangeLog index 42e16c1..9c54690 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog @@ -1,3 +1,26 @@ +2009-08-22 Ralf Wildenhues + + * configure: Regenerate. + +2009-07-30 Ralf Wildenhues + + * Makefile.in (AUTOCONF, configure_deps): New variables. + ($(srcdir)/configure, config.status): New rules. + (Makefile): Depend on config.status. + * configure.in: Accept --enable-maintainer-mode, set and + substitute MAINT accordingly. + +2009-02-03 Carlos O'Donell + + * configure.in: AC_SUBST pdfdir. + * configure: Regenerate. + +2007-08-13 Nick Clifton + + * standards.texi: Import 22 July 2007 version. + * fdl.texi: Import version 1.2. + * make-stds.texi: Import 2006 version. + 2007-04-04 Eric Christopher Move from gcc: diff --git a/etc/Makefile.in b/etc/Makefile.in index 9642e07..e910ad4 100644 --- a/etc/Makefile.in +++ b/etc/Makefile.in @@ -228,9 +228,19 @@ maintainer-clean realclean: distclean rm -f *.html* rm -f *.info* -Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) +Makefile: $(srcdir)/Makefile.in $(host_makefile_frag) $(target_makefile_frag) \ + config.status $(SHELL) ./config.status +AUTOCONF = autoconf +configure_deps = $(srcdir)/configure.in + +$(srcdir)/configure: @MAINT@ $(configure_deps) + cd $(srcdir) && $(AUTOCONF) + +config.status: $(srcdir)/configure + $(SHELL) ./config.status --recheck + ## these last targets are for standards.texi conformance dist: check: diff --git a/etc/add-log.el b/etc/add-log.el deleted file mode 100644 index 60c88e8..0000000 --- a/etc/add-log.el +++ /dev/null @@ -1,573 +0,0 @@ -;;; ============ NOTE WELL! ============= -;;; -;;; You only need to use this file if you're using a version of Emacs -;;; prior to 20.1 to work on GDB. The only difference between this -;;; and the standard add-log.el provided with 19.34 is that it -;;; generates dates using the terser format used by Emacs 20. This is -;;; the format recommended for use in GDB ChangeLogs. -;;; -;;; To use this code, you should create a directory `~/elisp', save the code -;;; below in `~/elisp/add-log.el', and then put something like this in -;;; your `~/.emacs' file, to tell Emacs where to find it: -;;; -;;; (setq load-path -;;; (cons (expand-file-name "~/elisp") -;;; load-path)) -;;; -;;; If you want, you can also byte-compile it --- it'll run a little -;;; faster, and use a little less memory. (Not that those matter much for -;;; this file.) To do that, after you've saved the text as -;;; ~/elisp/add-log.el, bring it up in Emacs, and type -;;; -;;; C-u M-x byte-compile-file -;;; -;;; --- Jim Blandy - -;;; add-log.el --- change log maintenance commands for Emacs - -;; Copyright (C) 1985, 1986, 1988, 1993, 1994 Free Software Foundation, Inc. - -;; Keywords: maint - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software; you can redistribute 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. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Commentary: - -;; This facility is documented in the Emacs Manual. - -;;; Code: - -(defvar change-log-default-name nil - "*Name of a change log file for \\[add-change-log-entry].") - -(defvar add-log-current-defun-function nil - "\ -*If non-nil, function to guess name of current function from surrounding text. -\\[add-change-log-entry] calls this function (if nil, `add-log-current-defun' -instead) with no arguments. It returns a string or nil if it cannot guess.") - -;;;###autoload -(defvar add-log-full-name nil - "*Full name of user, for inclusion in ChangeLog daily headers. -This defaults to the value returned by the `user-full-name' function.") - -;;;###autoload -(defvar add-log-mailing-address nil - "*Electronic mail address of user, for inclusion in ChangeLog daily headers. -This defaults to the value of `user-mail-address'.") - -(defvar change-log-font-lock-keywords - '(("^[SMTWF].+" . font-lock-function-name-face) ; Date line. - ("^\t\\* \\([^ :\n]+\\)" 1 font-lock-comment-face) ; File name. - ("(\\([^)\n]+\\)):" 1 font-lock-keyword-face)) ; Function name. - "Additional expressions to highlight in Change Log mode.") - -(defvar change-log-mode-map nil - "Keymap for Change Log major mode.") -(if change-log-mode-map - nil - (setq change-log-mode-map (make-sparse-keymap)) - (define-key change-log-mode-map "\M-q" 'change-log-fill-paragraph)) - -(defun change-log-name () - (or change-log-default-name - (if (eq system-type 'vax-vms) - "$CHANGE_LOG$.TXT" - (if (or (eq system-type 'ms-dos) (eq system-type 'windows-nt)) - "changelo" - "ChangeLog")))) - -;;;###autoload -(defun prompt-for-change-log-name () - "Prompt for a change log name." - (let* ((default (change-log-name)) - (name (expand-file-name - (read-file-name (format "Log file (default %s): " default) - nil default)))) - ;; Handle something that is syntactically a directory name. - ;; Look for ChangeLog or whatever in that directory. - (if (string= (file-name-nondirectory name) "") - (expand-file-name (file-name-nondirectory default) - name) - ;; Handle specifying a file that is a directory. - (if (file-directory-p name) - (expand-file-name (file-name-nondirectory default) - (file-name-as-directory name)) - name)))) - -;;;###autoload -(defun find-change-log (&optional file-name) - "Find a change log file for \\[add-change-log-entry] and return the name. - -Optional arg FILE-NAME specifies the file to use. -If FILE-NAME is nil, use the value of `change-log-default-name'. -If 'change-log-default-name' is nil, behave as though it were 'ChangeLog' -\(or whatever we use on this operating system). - -If 'change-log-default-name' contains a leading directory component, then -simply find it in the current directory. Otherwise, search in the current -directory and its successive parents for a file so named. - -Once a file is found, `change-log-default-name' is set locally in the -current buffer to the complete file name." - ;; If user specified a file name or if this buffer knows which one to use, - ;; just use that. - (or file-name - (setq file-name (and change-log-default-name - (file-name-directory change-log-default-name) - change-log-default-name)) - (progn - ;; Chase links in the source file - ;; and use the change log in the dir where it points. - (setq file-name (or (and buffer-file-name - (file-name-directory - (file-chase-links buffer-file-name))) - default-directory)) - (if (file-directory-p file-name) - (setq file-name (expand-file-name (change-log-name) file-name))) - ;; Chase links before visiting the file. - ;; This makes it easier to use a single change log file - ;; for several related directories. - (setq file-name (file-chase-links file-name)) - (setq file-name (expand-file-name file-name)) - ;; Move up in the dir hierarchy till we find a change log file. - (let ((file1 file-name) - parent-dir) - (while (and (not (or (get-file-buffer file1) (file-exists-p file1))) - (progn (setq parent-dir - (file-name-directory - (directory-file-name - (file-name-directory file1)))) - ;; Give up if we are already at the root dir. - (not (string= (file-name-directory file1) - parent-dir)))) - ;; Move up to the parent dir and try again. - (setq file1 (expand-file-name - (file-name-nondirectory (change-log-name)) - parent-dir))) - ;; If we found a change log in a parent, use that. - (if (or (get-file-buffer file1) (file-exists-p file1)) - (setq file-name file1))))) - ;; Make a local variable in this buffer so we needn't search again. - (set (make-local-variable 'change-log-default-name) file-name) - file-name) - -;;;###autoload -(defun add-change-log-entry (&optional whoami file-name other-window new-entry) - "Find change log file and add an entry for today. -Optional arg (interactive prefix) non-nil means prompt for user name and site. -Second arg is file name of change log. If nil, uses `change-log-default-name'. -Third arg OTHER-WINDOW non-nil means visit in other window. -Fourth arg NEW-ENTRY non-nil means always create a new entry at the front; -never append to an existing entry." - (interactive (list current-prefix-arg - (prompt-for-change-log-name))) - (or add-log-full-name - (setq add-log-full-name (user-full-name))) - (or add-log-mailing-address - (setq add-log-mailing-address user-mail-address)) - (if whoami - (progn - (setq add-log-full-name (read-input "Full name: " add-log-full-name)) - ;; Note that some sites have room and phone number fields in - ;; full name which look silly when inserted. Rather than do - ;; anything about that here, let user give prefix argument so that - ;; s/he can edit the full name field in prompter if s/he wants. - (setq add-log-mailing-address - (read-input "Mailing address: " add-log-mailing-address)))) - (let ((defun (funcall (or add-log-current-defun-function - 'add-log-current-defun))) - paragraph-end entry) - - (setq file-name (expand-file-name (find-change-log file-name))) - - ;; Set ENTRY to the file name to use in the new entry. - (and buffer-file-name - ;; Never want to add a change log entry for the ChangeLog file itself. - (not (string= buffer-file-name file-name)) - (setq entry (if (string-match - (concat "^" (regexp-quote (file-name-directory - file-name))) - buffer-file-name) - (substring buffer-file-name (match-end 0)) - (file-name-nondirectory buffer-file-name)))) - - (if (and other-window (not (equal file-name buffer-file-name))) - (find-file-other-window file-name) - (find-file file-name)) - (or (eq major-mode 'change-log-mode) - (change-log-mode)) - (undo-boundary) - (goto-char (point-min)) - (let ((heading (format "%s %s <%s>" - (format-time-string "%Y-%m-%d") - add-log-full-name - add-log-mailing-address))) - (if (looking-at (regexp-quote heading)) - (forward-line 1) - (insert heading "\n\n"))) - - ;; Search only within the first paragraph. - (if (looking-at "\n*[^\n* \t]") - (skip-chars-forward "\n") - (forward-paragraph 1)) - (setq paragraph-end (point)) - (goto-char (point-min)) - - ;; Now insert the new line for this entry. - (cond ((re-search-forward "^\\s *\\*\\s *$" paragraph-end t) - ;; Put this file name into the existing empty entry. - (if entry - (insert entry))) - ((and (not new-entry) - (let (case-fold-search) - (re-search-forward - (concat (regexp-quote (concat "* " entry)) - ;; Don't accept `foo.bar' when - ;; looking for `foo': - "\\(\\s \\|[(),:]\\)") - paragraph-end t))) - ;; Add to the existing entry for the same file. - (re-search-forward "^\\s *$\\|^\\s \\*") - (goto-char (match-beginning 0)) - ;; Delete excess empty lines; make just 2. - (while (and (not (eobp)) (looking-at "^\\s *$")) - (delete-region (point) (save-excursion (forward-line 1) (point)))) - (insert "\n\n") - (forward-line -2) - (indent-relative-maybe)) - (t - ;; Make a new entry. - (forward-line 1) - (while (looking-at "\\sW") - (forward-line 1)) - (while (and (not (eobp)) (looking-at "^\\s *$")) - (delete-region (point) (save-excursion (forward-line 1) (point)))) - (insert "\n\n\n") - (forward-line -2) - (indent-to left-margin) - (insert "* " (or entry "")))) - ;; Now insert the function name, if we have one. - ;; Point is at the entry for this file, - ;; either at the end of the line or at the first blank line. - (if defun - (progn - ;; Make it easy to get rid of the function name. - (undo-boundary) - (insert (if (save-excursion - (beginning-of-line 1) - (looking-at "\\s *$")) - "" - " ") - "(" defun "): ")) - ;; No function name, so put in a colon unless we have just a star. - (if (not (save-excursion - (beginning-of-line 1) - (looking-at "\\s *\\(\\*\\s *\\)?$"))) - (insert ": "))))) - -;;;###autoload -(defun add-change-log-entry-other-window (&optional whoami file-name) - "Find change log file in other window and add an entry for today. -Optional arg (interactive prefix) non-nil means prompt for user name and site. -Second arg is file name of change log. \ -If nil, uses `change-log-default-name'." - (interactive (if current-prefix-arg - (list current-prefix-arg - (prompt-for-change-log-name)))) - (add-change-log-entry whoami file-name t)) -;;;###autoload (define-key ctl-x-4-map "a" 'add-change-log-entry-other-window) - -;;;###autoload -(defun change-log-mode () - "Major mode for editing change logs; like Indented Text Mode. -Prevents numeric backups and sets `left-margin' to 8 and `fill-column' to 74. -New log entries are usually made with \\[add-change-log-entry] or \\[add-change-log-entry-other-window]. -Each entry behaves as a paragraph, and the entries for one day as a page. -Runs `change-log-mode-hook'." - (interactive) - (kill-all-local-variables) - (indented-text-mode) - (setq major-mode 'change-log-mode - mode-name "Change Log" - left-margin 8 - fill-column 74 - indent-tabs-mode t - tab-width 8) - (use-local-map change-log-mode-map) - ;; Let each entry behave as one paragraph: - ;; We really do want "^" in paragraph-start below: it is only the lines that - ;; begin at column 0 (despite the left-margin of 8) that we are looking for. - (set (make-local-variable 'paragraph-start) "\\s *$\\|\f\\|^\\sw") - (set (make-local-variable 'paragraph-separate) "\\s *$\\|\f\\|^\\sw") - ;; Let all entries for one day behave as one page. - ;; Match null string on the date-line so that the date-line - ;; is grouped with what follows. - (set (make-local-variable 'page-delimiter) "^\\<\\|^\f") - (set (make-local-variable 'version-control) 'never) - (set (make-local-variable 'adaptive-fill-regexp) "\\s *") - (set (make-local-variable 'font-lock-defaults) - '(change-log-font-lock-keywords t)) - (run-hooks 'change-log-mode-hook)) - -;; It might be nice to have a general feature to replace this. The idea I -;; have is a variable giving a regexp matching text which should not be -;; moved from bol by filling. change-log-mode would set this to "^\\s *\\s(". -;; But I don't feel up to implementing that today. -(defun change-log-fill-paragraph (&optional justify) - "Fill the paragraph, but preserve open parentheses at beginning of lines. -Prefix arg means justify as well." - (interactive "P") - (let ((end (save-excursion (forward-paragraph) (point))) - (beg (save-excursion (backward-paragraph)(point))) - (paragraph-start (concat paragraph-start "\\|\\s *\\s("))) - (fill-region beg end justify))) - -(defvar add-log-current-defun-header-regexp - "^\\([A-Z][A-Z_ ]*[A-Z_]\\|[-_a-zA-Z]+\\)[ \t]*[:=]" - "*Heuristic regexp used by `add-log-current-defun' for unknown major modes.") - -;;;###autoload -(defun add-log-current-defun () - "Return name of function definition point is in, or nil. - -Understands C, Lisp, LaTeX (\"functions\" are chapters, sections, ...), -Texinfo (@node titles), Perl, and Fortran. - -Other modes are handled by a heuristic that looks in the 10K before -point for uppercase headings starting in the first column or -identifiers followed by `:' or `=', see variable -`add-log-current-defun-header-regexp'. - -Has a preference of looking backwards." - (condition-case nil - (save-excursion - (let ((location (point))) - (cond ((memq major-mode '(emacs-lisp-mode lisp-mode scheme-mode - lisp-interaction-mode)) - ;; If we are now precisely at the beginning of a defun, - ;; make sure beginning-of-defun finds that one - ;; rather than the previous one. - (or (eobp) (forward-char 1)) - (beginning-of-defun) - ;; Make sure we are really inside the defun found, not after it. - (if (and (looking-at "\\s(") - (progn (end-of-defun) - (< location (point))) - (progn (forward-sexp -1) - (>= location (point)))) - (progn - (if (looking-at "\\s(") - (forward-char 1)) - (forward-sexp 1) - (skip-chars-forward " '") - (buffer-substring (point) - (progn (forward-sexp 1) (point)))))) - ((and (memq major-mode '(c-mode c++-mode c++-c-mode objc-mode)) - (save-excursion (beginning-of-line) - ;; Use eq instead of = here to avoid - ;; error when at bob and char-after - ;; returns nil. - (while (eq (char-after (- (point) 2)) ?\\) - (forward-line -1)) - (looking-at "[ \t]*#[ \t]*define[ \t]"))) - ;; Handle a C macro definition. - (beginning-of-line) - (while (eq (char-after (- (point) 2)) ?\\) ;not =; note above - (forward-line -1)) - (search-forward "define") - (skip-chars-forward " \t") - (buffer-substring (point) - (progn (forward-sexp 1) (point)))) - ((memq major-mode '(c-mode c++-mode c++-c-mode objc-mode)) - (beginning-of-line) - ;; See if we are in the beginning part of a function, - ;; before the open brace. If so, advance forward. - (while (not (looking-at "{\\|\\(\\s *$\\)")) - (forward-line 1)) - (or (eobp) - (forward-char 1)) - (beginning-of-defun) - (if (progn (end-of-defun) - (< location (point))) - (progn - (backward-sexp 1) - (let (beg tem) - - (forward-line -1) - ;; Skip back over typedefs of arglist. - (while (and (not (bobp)) - (looking-at "[ \t\n]")) - (forward-line -1)) - ;; See if this is using the DEFUN macro used in Emacs, - ;; or the DEFUN macro used by the C library. - (if (condition-case nil - (and (save-excursion - (end-of-line) - (while (= (preceding-char) ?\\) - (end-of-line 2)) - (backward-sexp 1) - (beginning-of-line) - (setq tem (point)) - (looking-at "DEFUN\\b")) - (>= location tem)) - (error nil)) - (progn - (goto-char tem) - (down-list 1) - (if (= (char-after (point)) ?\") - (progn - (forward-sexp 1) - (skip-chars-forward " ,"))) - (buffer-substring (point) - (progn (forward-sexp 1) (point)))) - (if (looking-at "^[+-]") - (get-method-definition) - ;; Ordinary C function syntax. - (setq beg (point)) - (if (and (condition-case nil - ;; Protect against "Unbalanced parens" error. - (progn - (down-list 1) ; into arglist - (backward-up-list 1) - (skip-chars-backward " \t") - t) - (error nil)) - ;; Verify initial pos was after - ;; real start of function. - (save-excursion - (goto-char beg) - ;; For this purpose, include the line - ;; that has the decl keywords. This - ;; may also include some of the - ;; comments before the function. - (while (and (not (bobp)) - (save-excursion - (forward-line -1) - (looking-at "[^\n\f]"))) - (forward-line -1)) - (>= location (point))) - ;; Consistency check: going down and up - ;; shouldn't take us back before BEG. - (> (point) beg)) - (let (end middle) - ;; Don't include any final newline - ;; in the name we use. - (if (= (preceding-char) ?\n) - (forward-char -1)) - (setq end (point)) - (backward-sexp 1) - ;; Now find the right beginning of the name. - ;; Include certain keywords if they - ;; precede the name. - (setq middle (point)) - (forward-word -1) - ;; Ignore these subparts of a class decl - ;; and move back to the class name itself. - (while (looking-at "public \\|private ") - (skip-chars-backward " \t:") - (setq end (point)) - (backward-sexp 1) - (setq middle (point)) - (forward-word -1)) - (and (bolp) - (looking-at "struct \\|union \\|class ") - (setq middle (point))) - (buffer-substring middle end))))))))) - ((memq major-mode - '(TeX-mode plain-TeX-mode LaTeX-mode;; tex-mode.el - plain-tex-mode latex-mode;; cmutex.el - )) - (if (re-search-backward - "\\\\\\(sub\\)*\\(section\\|paragraph\\|chapter\\)" nil t) - (progn - (goto-char (match-beginning 0)) - (buffer-substring (1+ (point));; without initial backslash - (progn - (end-of-line) - (point)))))) - ((eq major-mode 'texinfo-mode) - (if (re-search-backward "^@node[ \t]+\\([^,\n]+\\)" nil t) - (buffer-substring (match-beginning 1) - (match-end 1)))) - ((eq major-mode 'perl-mode) - (if (re-search-backward "^sub[ \t]+\\([^ \t\n]+\\)" nil t) - (buffer-substring (match-beginning 1) - (match-end 1)))) - ((eq major-mode 'fortran-mode) - ;; must be inside function body for this to work - (beginning-of-fortran-subprogram) - (let ((case-fold-search t)) ; case-insensitive - ;; search for fortran subprogram start - (if (re-search-forward - "^[ \t]*\\(program\\|subroutine\\|function\ -\\|[ \ta-z0-9*]*[ \t]+function\\)" - nil t) - (progn - ;; move to EOL or before first left paren - (if (re-search-forward "[(\n]" nil t) - (progn (forward-char -1) - (skip-chars-backward " \t")) - (end-of-line)) - ;; Use the name preceding that. - (buffer-substring (point) - (progn (forward-sexp -1) - (point))))))) - (t - ;; If all else fails, try heuristics - (let (case-fold-search) - (end-of-line) - (if (re-search-backward add-log-current-defun-header-regexp - (- (point) 10000) - t) - (buffer-substring (match-beginning 1) - (match-end 1)))))))) - (error nil))) - -(defvar get-method-definition-md) - -;; Subroutine used within get-method-definition. -;; Add the last match in the buffer to the end of `md', -;; followed by the string END; move to the end of that match. -(defun get-method-definition-1 (end) - (setq get-method-definition-md - (concat get-method-definition-md - (buffer-substring (match-beginning 1) (match-end 1)) - end)) - (goto-char (match-end 0))) - -;; For objective C, return the method name if we are in a method. -(defun get-method-definition () - (let ((get-method-definition-md "[")) - (save-excursion - (if (re-search-backward "^@implementation\\s-*\\([A-Za-z_]*\\)" nil t) - (get-method-definition-1 " "))) - (save-excursion - (cond - ((re-search-forward "^\\([-+]\\)[ \t\n\f\r]*\\(([^)]*)\\)?\\s-*" nil t) - (get-method-definition-1 "") - (while (not (looking-at "[{;]")) - (looking-at - "\\([A-Za-z_]*:?\\)\\s-*\\(([^)]*)\\)?[A-Za-z_]*[ \t\n\f\r]*") - (get-method-definition-1 "")) - (concat get-method-definition-md "]")))))) - - -(provide 'add-log) - -;;; add-log.el ends here diff --git a/etc/add-log.vi b/etc/add-log.vi deleted file mode 100644 index efb8c77..0000000 --- a/etc/add-log.vi +++ /dev/null @@ -1,11 +0,0 @@ -Here is a vi macro to create entries in the recommended format for -GDB's ChangeLogs. - -map  1GO:r !date '+\%Y-\%m-\%d'2GA Jason Molenda (:r !whoamikJxA@:r !hostnameA)kJxkddjO * k$ - -It contains control and escape sequences, so don't just cut and paste it. -You'll need to change the "Jason Molenda" bit, of course. :-) Put this -in your $HOME/.exrc and when you type control-X in move-around-mode, -you'll have a changelog template inserted. - ---- Jason Molenda diff --git a/etc/configure b/etc/configure index 82033e9..2f8192a 100755 --- a/etc/configure +++ b/etc/configure @@ -1,81 +1,412 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.64. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# Foundation, Inc. # -# 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. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' else - as_unset=false + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." else - $as_unset $as_var + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." fi -done + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -83,146 +414,107 @@ 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 | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\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; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,38 +523,24 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= 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= @@ -270,14 +548,68 @@ PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= ac_unique_file="Makefile.in" -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 INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA datarootdir docdir htmldir LIBOBJS LTLIBOBJS' +ac_subst_vars='LTLIBOBJS +LIBOBJS +MAINT +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_maintainer_mode +' + ac_precious_vars='build_alias +host_alias +target_alias' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -300,34 +632,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' 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' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -349,33 +695,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -402,6 +774,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -426,13 +804,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -497,6 +878,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -547,26 +938,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`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 ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`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" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -586,26 +987,25 @@ do | --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; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - 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'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_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 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -614,31 +1014,36 @@ 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; }; } + as_fn_error "missing argument to $ac_option" 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; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -652,7 +1057,7 @@ target=$target_alias 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. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -665,54 +1070,72 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then 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'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + 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 +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. fi -(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 +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -741,14 +1164,11 @@ Configuration: -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] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -758,18 +1178,25 @@ 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] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -780,119 +1207,101 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode + enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer + +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && 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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac -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 +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +configure +generated by GNU Autoconf 2.64 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## +cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ _ACEOF +exec 5>>config.log { cat <<_ASUNAME ## --------- ## @@ -911,7 +1320,7 @@ uname -v = `(uname -v) 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` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` @@ -923,8 +1332,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -946,7 +1356,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -957,13 +1366,13 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -979,21 +1388,19 @@ do -* ) 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=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; 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; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1006,20 +1413,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "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" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1030,22 +1452,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1057,26 +1485,26 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1084,40 +1512,46 @@ cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer 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 +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -for ac_site_file in $CONFIG_SITE; do +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi @@ -1127,69 +1561,79 @@ 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { 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;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { 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=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append 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; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1199,47 +1643,28 @@ 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 +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { 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; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 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. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1254,22 +1679,23 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # 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 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # 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\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1277,7 +1703,7 @@ case $as_dir/ in # 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 -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1287,30 +1713,43 @@ case $as_dir/ in # 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 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1321,12 +1760,28 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' +# Command-line options. +# Very limited version of AC_MAINTAINER_MODE. +# Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; case ${enable_maintainer_mode} in + yes) MAINT='' ;; + no) MAINT='#' ;; + *) as_fn_error "--enable-maintainer-mode must be yes or no" "$LINENO" 5 ;; + esac + maintainer_mode=${enableval} +else + MAINT='#' +fi + + + +ac_config_files="$ac_config_files Makefile" - 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 @@ -1345,39 +1800,59 @@ _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. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(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 \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : 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" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -1386,63 +1861,54 @@ 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 - # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that -# take arguments), then we branch to the quote section. Otherwise, +# take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\_ACEOF +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +:clear +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 -p -_ACEOF -# We use echo to avoid assuming a particular line-breaking character. -# The extra dot is to prevent the shell from consuming trailing -# line-breaks from the sub-command output. A line-break within -# single-quotes doesn't work because, if this script is created in a -# platform that uses two characters for line-breaks (e.g., DOS), tr -# would break. -ac_LF_and_DOT=`echo; echo .` -DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` -rm -f confdef2opt.sed +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.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' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs @@ -1451,11 +1917,13 @@ LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 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 +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -1465,81 +1933,252 @@ cat >$CONFIG_STATUS <<_ACEOF 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 +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do 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 + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac 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 + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' else - as_unset=false + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -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 +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi -done + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +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'` - + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_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' @@ -1547,148 +2186,123 @@ 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= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file else - as_expr=false + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null 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 (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -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 +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -1697,31 +2311,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" 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 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. 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 - +# values after options handling. +ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -1729,125 +2332,107 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF -# Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac -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_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE Configuration files: $config_files -Report bugs to ." -_ACEOF +Report bugs to the package provider." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.64, + with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +test -n "\$AWK" || AWK=awk _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. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_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 ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { 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; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -1861,30 +2446,44 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 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 + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. 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; }; };; + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -1894,328 +2493,408 @@ if $ac_need_defaults; then 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, +# simply because there is no reason against having 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. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\).*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\).*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" -# -# 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,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@datarootdir@,$datarootdir,;t t -s,@docdir@,$docdir,;t t -s,@htmldir@,$htmldir,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF +eval set X " :F $CONFIG_FILES " +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift -_ACEOF + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done - 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 + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} fi - 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" + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac -_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 ;; + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -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; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -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 "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # 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_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. 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 ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# 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 $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac +_ACEOF - 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; } +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :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 +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } + esac + +done # for ac_tag + + +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -2235,6 +2914,10 @@ if test "$no_create" != yes; then 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; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/etc/configure.in b/etc/configure.in index 38bc659..6b94aac 100644 --- a/etc/configure.in +++ b/etc/configure.in @@ -4,9 +4,24 @@ AC_INIT(Makefile.in) AC_PROG_INSTALL +# Command-line options. +# Very limited version of AC_MAINTAINER_MODE. +AC_ARG_ENABLE([maintainer-mode], + [AC_HELP_STRING([--enable-maintainer-mode], + [enable make rules and dependencies not useful (and + sometimes confusing) to the casual installer])], + [case ${enable_maintainer_mode} in + yes) MAINT='' ;; + no) MAINT='#' ;; + *) AC_MSG_ERROR([--enable-maintainer-mode must be yes or no]) ;; + esac + maintainer_mode=${enableval}], + [MAINT='#']) +AC_SUBST([MAINT])dnl + AC_SUBST(datarootdir) AC_SUBST(docdir) AC_SUBST(htmldir) - +AC_SUBST(pdfdir) AC_OUTPUT(Makefile) diff --git a/etc/configure.info b/etc/configure.info index 78cc7eb..cee206a 100644 --- a/etc/configure.info +++ b/etc/configure.info @@ -1,5 +1,5 @@ This is configure.info, produced by makeinfo version 4.8 from -.././etc/configure.texi. +./configure.texi. INFO-DIR-SECTION GNU admin START-INFO-DIR-ENTRY @@ -2710,64 +2710,64 @@ Index  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 +Node: Top971 +Node: Introduction1499 +Node: Goals2581 +Node: Tools3305 +Node: History4299 +Node: Building7297 +Node: Getting Started10560 +Node: Write configure.in11073 +Node: Write Makefile.am18324 +Node: Write acconfig.h21501 +Node: Generate files23038 +Node: Getting Started Example25004 +Node: Getting Started Example 125759 +Node: Getting Started Example 227680 +Node: Getting Started Example 330675 +Node: Generate Files in Example33039 +Node: Files34129 +Node: Developer Files34740 +Node: Developer Files Picture35120 +Node: Written Developer Files36408 +Node: Generated Developer Files38960 +Node: Build Files42104 +Node: Build Files Picture42765 +Node: Build Files Description43529 +Node: Support Files45535 +Node: Configuration Names48417 +Node: Configuration Name Definition48917 +Node: Using Configuration Names51240 +Node: Cross Compilation Tools53210 +Node: Cross Compilation Concepts53901 +Node: Host and Target54869 +Node: Using the Host Type56370 +Node: Specifying the Target57719 +Node: Using the Target Type58508 +Node: Cross Tools in the Cygnus Tree61939 +Node: Host and Target Libraries62996 +Node: Target Library Configure Scripts66745 +Node: Make Targets in Cygnus Tree69837 +Node: Target libiberty71185 +Node: Canadian Cross72572 +Node: Canadian Cross Example73413 +Node: Canadian Cross Concepts74532 +Node: Build Cross Host Tools76044 +Node: Build and Host Options76996 +Node: CCross not in Cygnus Tree78782 +Node: CCross in Cygnus Tree79760 +Node: Standard Cygnus CCross80181 +Node: Cross Cygnus CCross81545 +Node: Supporting Canadian Cross84345 +Node: CCross in Configure84960 +Node: CCross in Make88128 +Node: Cygnus Configure89731 +Node: Cygnus Configure Basics90566 +Node: Cygnus Configure in C++ Libraries95244 +Node: Multilibs96251 +Node: Multilibs in gcc97296 +Node: Multilibs in Target Libraries98374 +Node: FAQ102565 +Node: Index106665  End Tag Table diff --git a/etc/fdl.texi b/etc/fdl.texi index 1387056..7b93651 100644 --- a/etc/fdl.texi +++ b/etc/fdl.texi @@ -1,28 +1,28 @@ -@c -*-texinfo-*- -@node GNU Free Documentation License, , , Copying This Manual +@c The GNU Free Documentation License. +@center Version 1.2, November 2002 -@appendix GNU Free Documentation License -@center Version 1.1, March 2000 +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. @display -Copyright (C) 2000 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display -@sp 1 + @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other -written document ``free'' in the sense of freedom: to assure everyone -the effective freedom to copy and redistribute it, with or without -modifying it, either commercially or noncommercially. Secondarily, -this License preserves for the author and publisher a way to get -credit for their work, while not being considered responsible for -modifications made by others. +functional and useful document @dfn{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or noncommercially. +Secondarily, this License preserves for the author and publisher a way +to get credit for their work, while not being considered responsible +for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It @@ -37,60 +37,72 @@ it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. -@sp 1 @item APPLICABILITY AND DEFINITIONS -This License applies to any manual or other work that contains a -notice placed by the copyright holder saying it can be distributed -under the terms of this License. The ``Document'', below, refers to any -such manual or work. Any member of the public is a licensee, and is -addressed as ``you.'' +This License applies to any manual or other work, in any medium, that +contains a notice placed by the copyright holder saying it can be +distributed under the terms of this License. Such a notice grants a +world-wide, royalty-free license, unlimited in duration, to use that +work under the conditions stated herein. The ``Document'', below, +refers to any such manual or work. Any member of the public is a +licensee, and is addressed as ``you''. You accept the license if you +copy, modify or distribute the work in a way requiring permission +under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. -A ``Secondary Section'' is a named appendix or a front-matter section of -the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall subject -(or to related matters) and contains nothing that could fall directly -within that overall subject. (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 +A ``Secondary Section'' is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document's overall +subject (or to related matters) and contains nothing that could fall +directly within that overall subject. (Thus, if the Document is in +part a textbook of mathematics, a Secondary Section may not explain +any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. +that says that the Document is released under this License. If a +section does not fit the above definition of Secondary then it is not +allowed to be designated as Invariant. The Document may contain zero +Invariant Sections. If the Document does not identify any Invariant +Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. +the Document is released under this License. A Front-Cover Text may +be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the -general public, whose contents can be viewed and edited directly and +general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file -format whose markup has been designed to thwart or discourage -subsequent modification by readers is not Transparent. A copy that is -not ``Transparent'' is called ``Opaque.'' +format whose markup, or absence of markup, has been arranged to thwart +or discourage subsequent modification by readers is not Transparent. +An image format is not Transparent if used for any substantial amount +of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain -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. +@sc{ascii} without markup, Texinfo input format, La@TeX{} input +format, @acronym{SGML} or @acronym{XML} using a publicly available +@acronym{DTD}, and standard-conforming simple @acronym{HTML}, +PostScript or @acronym{PDF} designed for human modification. Examples +of transparent image formats include @acronym{PNG}, @acronym{XCF} and +@acronym{JPG}. Opaque formats include proprietary formats that can be +read and edited only by proprietary word processors, @acronym{SGML} or +@acronym{XML} for which the @acronym{DTD} and/or processing tools are +not generally available, and the machine-generated @acronym{HTML}, +PostScript or @acronym{PDF} produced by some word processors for +output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material @@ -98,7 +110,22 @@ this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. -@sp 1 + +A section ``Entitled XYZ'' means a named subunit of the Document whose +title either is precisely XYZ or contains XYZ in parentheses following +text that translates XYZ in another language. (Here XYZ stands for a +specific section name mentioned below, such as ``Acknowledgements'', +``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' +of such a section when you modify the Document means that it remains a +section ``Entitled XYZ'' according to this definition. + +The Document may include Warranty Disclaimers next to the notice which +states that this License applies to the Document. These Warranty +Disclaimers are considered to be included by reference in this +License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and has +no effect on the meaning of this License. + @item VERBATIM COPYING @@ -114,13 +141,14 @@ number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. -@sp 1 + @item COPYING IN QUANTITY -If you publish printed copies of the Document numbering more than 100, -and the Document's license notice requires Cover Texts, you must enclose -the copies in covers that carry, clearly and legibly, all these Cover +If you publish printed copies (or copies in media that commonly have +printed covers) of the Document, numbering more than 100, and the +Document's license notice requires Cover Texts, you must enclose the +copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present @@ -138,21 +166,20 @@ 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. +a computer-network location from which the general network-using +public has access to download using public-standard network protocols +a complete Transparent copy of the Document, free of added material. +If you use the latter option, you must take reasonably prudent steps, +when you begin distribution of Opaque copies in quantity, to ensure +that this Transparent copy will remain thus accessible at the stated +location until at least one year after the last time you distribute an +Opaque copy (directly or through your agents or retailers) of that +edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. -@sp 1 + @item MODIFICATIONS @@ -163,52 +190,85 @@ Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: -A. Use in the Title Page (and on the covers, if any) a title distinct - from that of the Document, and from those of previous versions - (which should, if there were any, be listed in the History section - of the Document). You may use the same title as a previous version - if the original publisher of that version gives permission.@* -B. List on the Title Page, as authors, one or more persons or entities - responsible for authorship of the modifications in the Modified - Version, together with at least five of the principal authors of the - Document (all of its principal authors, if it has less than five).@* -C. State on the Title page the name of the publisher of the - Modified Version, as the publisher.@* -D. Preserve all the copyright notices of the Document.@* -E. Add an appropriate copyright notice for your modifications - adjacent to the other copyright notices.@* -F. Include, immediately after the copyright notices, a license notice - giving the public permission to use the Modified Version under the - terms of this License, in the form shown in the Addendum below.@* -G. Preserve in that license notice the full lists of Invariant Sections - and required Cover Texts given in the Document's license notice.@* -H. Include an unaltered copy of this License.@* -I. Preserve the section entitled ``History'', and its title, and add to - it an item stating at least the title, year, new authors, and - publisher of the Modified Version as given on the Title Page. If - there is no section entitled ``History'' in the Document, create one - stating the title, year, authors, and publisher of the Document as - given on its Title Page, then add an item describing the Modified - Version as stated in the previous sentence.@* -J. Preserve the network location, if any, given in the Document for - public access to a Transparent copy of the Document, and likewise - the network locations given in the Document for previous versions - it was based on. These may be placed in the ``History'' section. - You may omit a network location for a work that was published at - least four years before the Document itself, or if the original - publisher of the version it refers to gives permission.@* -K. In any section entitled ``Acknowledgements'' or ``Dedications'', - preserve the section's title, and preserve in the section all the - substance and tone of each of the contributor acknowledgements - and/or dedications given therein.@* -L. Preserve all the Invariant Sections of the Document, - unaltered in their text and in their titles. Section numbers - or the equivalent are not considered part of the section titles.@* -M. Delete any section entitled ``Endorsements.'' Such a section - may not be included in the Modified Version.@* -N. Do not retitle any existing section as ``Endorsements'' - or to conflict in title with any Invariant Section.@* -@sp 1 +@enumerate A +@item +Use in the Title Page (and on the covers, if any) a title distinct +from that of the Document, and from those of previous versions +(which should, if there were any, be listed in the History section +of the Document). You may use the same title as a previous version +if the original publisher of that version gives permission. + +@item +List on the Title Page, as authors, one or more persons or entities +responsible for authorship of the modifications in the Modified +Version, together with at least five of the principal authors of the +Document (all of its principal authors, if it has fewer than five), +unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license notice +giving the public permission to use the Modified Version under the +terms of this License, in the form shown in the Addendum below. + +@item +Preserve in that license notice the full lists of Invariant Sections +and required Cover Texts given in the Document's license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled ``History'', Preserve its Title, and add +to it an item stating at least the title, year, new authors, and +publisher of the Modified Version as given on the Title Page. If +there is no section Entitled ``History'' in the Document, create one +stating the title, year, authors, and publisher of the Document as +given on its Title Page, then add an item describing the Modified +Version as stated in the previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and likewise +the network locations given in the Document for previous versions +it was based on. These may be placed in the ``History'' section. +You may omit a network location for a work that was published at +least four years before the Document itself, or if the original +publisher of the version it refers to gives permission. + +@item +For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve +the Title of the section, and preserve in the section all the +substance and tone of each of the contributor acknowledgements and/or +dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, +unaltered in their text and in their titles. Section numbers +or the equivalent are not considered part of the section titles. + +@item +Delete any section Entitled ``Endorsements''. Such a section +may not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled ``Endorsements'' or +to conflict in title with any Invariant Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all @@ -216,9 +276,9 @@ 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 +parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. @@ -235,7 +295,7 @@ permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. -@sp 1 + @item COMBINING DOCUMENTS @@ -244,7 +304,7 @@ 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. +license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -255,12 +315,12 @@ author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. -In the combination, you must combine any sections entitled ``History'' -in the various original documents, forming one section entitled -``History''; likewise combine any sections entitled ``Acknowledgements'', -and any sections entitled ``Dedications.'' You must delete all sections -entitled ``Endorsements.'' -@sp 1 +In the combination, you must combine any sections Entitled ``History'' +in the various original documents, forming one section Entitled +``History''; likewise combine any sections Entitled ``Acknowledgements'', +and any sections Entitled ``Dedications''. You must delete all +sections Entitled ``Endorsements.'' + @item COLLECTIONS OF DOCUMENTS @@ -274,25 +334,27 @@ You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. -@sp 1 + @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or -distribution medium, does not as a whole count as a Modified Version -of the Document, provided no compilation copyright is claimed for the -compilation. Such a compilation is called an ``aggregate'', and this -License does not apply to the other self-contained works thus compiled -with the Document, on account of their being thus compiled, if they -are not themselves derivative works of the Document. +distribution medium, is called an ``aggregate'' if the copyright +resulting from the compilation is not used to limit the legal rights +of the compilation's users beyond what the individual works permit. +When the Document is included in an aggregate, this License does not +apply to the other works in the aggregate which are not themselves +derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one quarter -of the entire aggregate, the Document's Cover Texts may be placed on -covers that surround only the Document within the aggregate. -Otherwise they must appear on covers around the whole aggregate. -@sp 1 +copies of the Document, then if the Document is less than one half of +the entire aggregate, the Document's Cover Texts may be placed on +covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic form. +Otherwise they must appear on printed covers that bracket the whole +aggregate. + @item TRANSLATION @@ -302,11 +364,18 @@ Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a -translation of this License provided that you also include the -original English version of this License. In case of a disagreement -between the translation and the original English version of this -License, the original English version will prevail. -@sp 1 +translation of this License, and all the license notices in the +Document, and any Warranty Disclaimers, provided that you also include +the original English version of this License and the original versions +of those notices and disclaimers. In case of a disagreement between +the translation and the original version of this License or a notice +or disclaimer, the original version will prevail. + +If a section in the Document is Entitled ``Acknowledgements'', +``Dedications'', or ``History'', the requirement (section 4) to Preserve +its Title (section 1) will typically require changing the actual +title. + @item TERMINATION @@ -317,7 +386,7 @@ automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. -@sp 1 + @item FUTURE REVISIONS OF THIS LICENSE @@ -325,7 +394,7 @@ 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/. +@uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this @@ -335,10 +404,10 @@ of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. - @end enumerate -@unnumberedsec ADDENDUM: How to use this License for your documents +@page +@heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and @@ -346,23 +415,37 @@ license notices just after the title page: @smallexample @group -Copyright (C) @var{year} @var{your name}. -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 -or any later version published by the Free Software Foundation; -with the Invariant Sections being @var{list their titles}, with the -Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. -A copy of the license is included in the section entitled "GNU -Free Documentation License." + 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.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. +@end group +@end smallexample + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, +replace the ``with@dots{}Texts.'' line with this: + +@smallexample +@group + with the Invariant Sections being @var{list their titles}, with + the Front-Cover Texts being @var{list}, and with the Back-Cover Texts + being @var{list}. @end group @end smallexample -If you have no Invariant Sections, write ``with no Invariant Sections'' -instead of saying which ones are invariant. If you have no -Front-Cover Texts, write ``no Front-Cover Texts'' instead of -``Front-Cover Texts being @var{list}''; likewise for Back-Cover Texts. +If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. + +@c Local Variables: +@c ispell-local-pdict: "ispell-dict" +@c End: + diff --git a/etc/make-stds.texi b/etc/make-stds.texi index 250867a..91a1ed0 100644 --- a/etc/make-stds.texi +++ b/etc/make-stds.texi @@ -8,11 +8,11 @@ @cindex conventions for makefiles @cindex standards for makefiles -@c Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001 Free -@c Software Foundation, Inc. +@c Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, +@c 2004, 2005, 2006 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document -@c under the terms of the GNU Free Documentation License, Version 1.1 +@c under the terms of the GNU Free Documentation License, Version 1.2 @c or any later version published by the Free Software Foundation; @c with no Invariant Sections, with no @c Front-Cover Texts, and with no Back-Cover Texts. @@ -36,11 +36,12 @@ 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 +* Makefile Basics:: General conventions for Makefiles. +* Utilities in Makefiles:: Utilities to be used in Makefiles. +* Command Variables:: Variables for specifying commands. +* DESTDIR:: Supporting staged installs. +* 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. @end menu @@ -263,43 +264,102 @@ Every Makefile should also define the variables @code{INSTALL_PROGRAM} and @code{INSTALL_DATA}. (The default for @code{INSTALL_PROGRAM} should be @code{$(INSTALL)}; the default for @code{INSTALL_DATA} should be @code{$@{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: +commands for actual installation, for executables and non-executables +respectively. Minimal use of these variables is as follows: @example $(INSTALL_PROGRAM) foo $(bindir)/foo $(INSTALL_DATA) libfoo.a $(libdir)/libfoo.a @end example -Optionally, you may prepend the value of @code{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 @code{DESTDIR} in your Makefile, and do not include it -in any installed files. With support for @code{DESTDIR}, the above -examples become: +However, it is preferable to support a @code{DESTDIR} prefix on the +target files, as explained in the next section. + +@noindent +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. + + +@node DESTDIR +@section @code{DESTDIR}: support for staged installs + +@vindex DESTDIR +@cindex staged installs +@cindex installations, staged + +@code{DESTDIR} is a variable prepended to each installed target file, +like this: @example $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a @end example +The @code{DESTDIR} variable is specified by the user on the @code{make} +command line. For example: + +@example +make DESTDIR=/tmp/stage install +@end example + @noindent -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. +@code{DESTDIR} should be supported only in the @code{install*} and +@code{uninstall*} targets, as those are the only targets where it is +useful. + +If your installation step would normally install +@file{/usr/local/bin/foo} and @file{/usr/local/lib/libfoo.a}, then an +installation invoked as in the example above would install +@file{/tmp/stage/usr/local/bin/foo} and +@file{/tmp/stage/usr/local/lib/libfoo.a} instead. + +Prepending the variable @code{DESTDIR} to each target in this way +provides for @dfn{staged installs}, where the installed files are not +placed directly into their expected location but are instead copied +into a temporary location (@code{DESTDIR}). However, installed files +maintain their relative directory structure and any embedded file names +will not be modified. + +You should not set the value of @code{DESTDIR} in your @file{Makefile} +at all; then the files are installed into their expected locations by +default. Also, specifying @code{DESTDIR} should not change the +operation of the software in any way, so its value should not be +included in any file contents. + +@code{DESTDIR} support is commonly used in package creation. It is +also helpful to users who want to understand what a given package will +install where, and to allow users who don't normally have permissions +to install into protected areas to build and install before gaining +those permissions. Finally, it can be useful with tools such as +@code{stow}, where code is installed in one place but made to appear +to be installed somewhere else using symbolic links or special mount +operations. So, we strongly recommend GNU packages support +@code{DESTDIR}, though it is not an absolute requirement. + @node Directory Variables @section 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. +variables and the values they should have in GNU packages are +described below. They are based on a standard file system layout; +variants of it are used in GNU/Linux and other modern operating +systems. + +Installers are expected to override these values when calling +@command{make} (e.g., @kbd{make prefix=/usr install} or +@command{configure} (e.g., @kbd{configure --prefix=/usr}). GNU +packages should not try to guess which value should be appropriate for +these variables on the system they are being installed onto: use the +default settings specified here so that all GNU packages behave +identically, allowing the installer to achieve any desired layout. + +These first 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. @table @code @item prefix @@ -355,6 +415,12 @@ The directory for installing executable programs to be run by other programs rather than by users. This directory should normally be @file{/usr/local/libexec}, but write it as @file{$(exec_prefix)/libexec}. (If you are using Autoconf, write it as @samp{@@libexecdir@@}.) + +The definition of @samp{libexecdir} is the same for all packages, so +you should install your data in a subdirectory thereof. Most packages +install their data under @file{$(libexecdir)/@var{package-name}/}, +possibly within additional subdirectories thereof, such as +@file{$(libexecdir)/@var{package-name}/@var{machine}/@var{version}}. @end table Data files used by the program during its execution are divided into @@ -377,17 +443,32 @@ 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: +Here are the variables Makefiles should use to specify directories +to put these various kinds of files in: @table @samp +@item datarootdir +The root of the directory tree for read-only architecture-independent +data files. This should normally be @file{/usr/local/share}, but +write it as @file{$(prefix)/share}. (If you are using Autoconf, write +it as @samp{@@datarootdir@@}.) @samp{datadir}'s default value is +based on this variable; so are @samp{infodir}, @samp{mandir}, and +others. + @item datadir -The directory for installing read-only architecture independent data -files. This should normally be @file{/usr/local/share}, but write it as -@file{$(prefix)/share}. -(If you are using Autoconf, write it as @samp{@@datadir@@}.) -As a special exception, see @file{$(infodir)} -and @file{$(includedir)} below. +The directory for installing idiosyncratic read-only +architecture-independent data files for this program. This is usually +the same place as @samp{datarootdir}, but we use the two separate +variables so that you can move these program-specific files without +altering the location for Info files, man pages, etc. + +This should normally be @file{/usr/local/share}, but write it as +@file{$(datarootdir)}. (If you are using Autoconf, write it as +@samp{@@datadir@@}.) + +The definition of @samp{datadir} is the same for all packages, so you +should install your data in a subdirectory thereof. Most packages +install their data under @file{$(datadir)/@var{package-name}/}. @item sysconfdir The directory for installing read-only data files that pertain to a @@ -419,34 +500,14 @@ in @file{$(datadir)} or @file{$(sysconfdir)}. @file{$(localstatedir)} should normally be @file{/usr/local/var}, but write it as @file{$(prefix)/var}. (If you are using Autoconf, write it as @samp{@@localstatedir@@}.) +@end table -@item libdir -The directory for object files and libraries of object code. Do not -install executables here, they probably ought to go in @file{$(libexecdir)} -instead. The value of @code{libdir} should normally be -@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. -(If you are using Autoconf, write it as @samp{@@libdir@@}.) - -@item infodir -The directory for installing the Info files for this package. By -default, it should be @file{/usr/local/info}, but it should be written -as @file{$(prefix)/info}. -(If you are using Autoconf, write it as @samp{@@infodir@@}.) - -@item lispdir -The directory for installing any Emacs Lisp files in this package. By -default, it should be @file{/usr/local/share/emacs/site-lisp}, but it -should be written as @file{$(prefix)/share/emacs/site-lisp}. - -If you are using Autoconf, write the default as @samp{@@lispdir@@}. -In order to make @samp{@@lispdir@@} work, you need the following lines -in your @file{configure.in} file: - -@example -lispdir='$@{datadir@}/emacs/site-lisp' -AC_SUBST(lispdir) -@end example +These variables specify the directory for installing certain specific +types of files, if your program has them. Every GNU package should +have Info files, so every program needs @samp{infodir}, but not all +need @samp{libdir} or @samp{lispdir}. +@table @samp @item includedir @c rewritten to avoid overfull hbox --roland The directory for installing header files to be included by user @@ -481,6 +542,62 @@ package. To tell whether @file{foo.h} came from the Foo package, put a magic string in the file---part of a comment---and @code{grep} for that string. + +@item docdir +The directory for installing documentation files (other than Info) for +this package. By default, it should be +@file{/usr/local/share/doc/@var{yourpkg}}, but it should be written as +@file{$(datarootdir)/doc/@var{yourpkg}}. (If you are using Autoconf, +write it as @samp{@@docdir@@}.) The @var{yourpkg} subdirectory, which +may include a version number, prevents collisions among files with +common names, such as @file{README}. + +@item infodir +The directory for installing the Info files for this package. By +default, it should be @file{/usr/local/share/info}, but it should be +written as @file{$(datarootdir)/info}. (If you are using Autoconf, +write it as @samp{@@infodir@@}.) @code{infodir} is separate from +@code{docdir} for compatibility with existing practice. + +@item htmldir +@itemx dvidir +@itemx pdfdir +@itemx psdir +Directories for installing documentation files in the particular +format. They should all be set to @code{$(docdir)} by default. (If +you are using Autoconf, write them as @samp{@@htmldir@@}, +@samp{@@dvidir@@}, etc.) Packages which supply several translations +of their documentation should install them in +@samp{$(htmldir)/}@var{ll}, @samp{$(pdfdir)/}@var{ll}, etc. where +@var{ll} is a locale abbreviation such as @samp{en} or @samp{pt_BR}. + +@item libdir +The directory for object files and libraries of object code. Do not +install executables here, they probably ought to go in @file{$(libexecdir)} +instead. The value of @code{libdir} should normally be +@file{/usr/local/lib}, but write it as @file{$(exec_prefix)/lib}. +(If you are using Autoconf, write it as @samp{@@libdir@@}.) + +@item lispdir +The directory for installing any Emacs Lisp files in this package. By +default, it should be @file{/usr/local/share/emacs/site-lisp}, but it +should be written as @file{$(datarootdir)/emacs/site-lisp}. + +If you are using Autoconf, write the default as @samp{@@lispdir@@}. +In order to make @samp{@@lispdir@@} work, you need the following lines +in your @file{configure.in} file: + +@example +lispdir='$@{datarootdir@}/emacs/site-lisp' +AC_SUBST(lispdir) +@end example + +@item localedir +The directory for installing locale-specific message catalogs for this +package. By default, it should be @file{/usr/local/share/locale}, but +it should be written as @file{$(datarootdir)/locale}. (If you are +using Autoconf, write it as @samp{@@localedir@@}.) This directory +usually has a subdirectory per locale. @end table Unix-style man pages are installed in one of the following: @@ -488,9 +605,9 @@ Unix-style man pages are installed in one of the following: @table @samp @item mandir The top-level directory for installing the man pages (if any) for this -package. It will normally be @file{/usr/local/man}, but you should -write it as @file{$(prefix)/man}. -(If you are using Autoconf, write it as @samp{@@mandir@@}.) +package. It will normally be @file{/usr/local/share/man}, but you +should write it as @file{$(datarootdir)/man}. (If you are using +Autoconf, write it as @samp{@@mandir@@}.) @item man1dir The directory for installing section 1 man pages. Write it as @@ -524,7 +641,7 @@ And finally, you should set the following variable: @item srcdir The directory for the sources being compiled. The value of this variable is normally inserted by the @code{configure} shell script. -(If you are using Autconf, use @samp{srcdir = @@srcdir@@}.) +(If you are using Autoconf, use @samp{srcdir = @@srcdir@@}.) @end table For example: @@ -535,13 +652,15 @@ For example: # Common prefix for installation directories. # NOTE: This directory must exist when you start the install. prefix = /usr/local +datarootdir = $(prefix)/share +datadir = $(datarootdir) 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 +infodir = $(datarootdir)/info @end smallexample If your program installs a large number of files into one of the @@ -556,6 +675,15 @@ 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. +At times, not all of these variables may be implemented in the current +release of Autoconf and/or Automake; but as of Autoconf@tie{}2.60, we +believe all of them are. When any are missing, the descriptions here +serve as specifications for what Autoconf will implement. As a +programmer, you can either use a development version of Autoconf or +avoid using these variables until a stable release is made which +supports them. + + @node Standard Targets @section Standard Targets for Users @@ -565,8 +693,9 @@ All GNU programs should have the following targets in their Makefiles: @item 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. +normally be included in the distribution, and DVI (and other +documentation format) files should be made only when explicitly asked +for. By default, the Make rules should compile and link with @samp{-g}, so that executable programs have debugging symbols. Users who don't mind @@ -605,7 +734,7 @@ menu entry for the given Info file; it is part of the Texinfo package. Here is a sample rule to install an Info file: @comment This example has been carefully formatted for the Make manual. -@comment Please do not reformat it without talking to roland@gnu.ai.mit.edu. +@comment Please do not reformat it without talking to bug-make@gnu.org. @smallexample $(DESTDIR)$(infodir)/foo.info: foo.info $(POST_INSTALL) @@ -630,9 +759,31 @@ commands into three categories: normal ones, @dfn{pre-installation} commands and @dfn{post-installation} commands. @xref{Install Command Categories}. +@item install-html +@itemx install-dvi +@itemx install-pdf +@itemx install-ps +These targets install documentation in formats other than Info; +they're intended to be called explicitly by the person installing the +package, if that format is desired. GNU prefers Info files, so these +must be installed by the @code{install} target. + +When you have many documentation files to install, we recommend that +you avoid collisions and clutter by arranging for these targets to +install in subdirectories of the appropriate installation directory, +such as @code{htmldir}. As one example, if your package has multiple +manuals, and you wish to install HTML documentation with many files +(such as the ``split'' mode output by @code{makeinfo --html}), you'll +certainly want to use subdirectories, or two nodes with the same name +in different manuals will overwrite each other. + +Please make these @code{install-@var{format}} targets invoke the +commands for the @var{format} target, for example, by making +@var{format} a dependency. + @item uninstall Delete all the installed files---the copies that the @samp{install} -target creates. +and @samp{install-*} targets create. This rule should not modify the directories where compilation is done, only the directories where files are installed. @@ -668,18 +819,24 @@ executable elsewhere in case there is a bug. @comment in the printed Make manual. Please leave it in. @item 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 all files in the current directory that are normally created by +building the program. Also delete files in other directories if they +are created by this makefile. However, 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. There is no need to delete parent directories that were created +with @samp{mkdir -p}, since they could have existed anyway. Delete @file{.dvi} files here if they are not part of the distribution. @item 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, @samp{make -distclean} should leave only the files that were in the distribution. +Delete all files in the current directory (or created by this +makefile) that are created by configuring or building the program. If +you have unpacked the source and built the program without creating +any other files, @samp{make distclean} should leave only the files +that were in the distribution. However, there is no need to delete +parent directories that were created with @samp{mkdir -p}, since they +could have existed anyway. @item mostlyclean Like @samp{clean}, but may refrain from deleting a few files that people @@ -688,18 +845,21 @@ target for GCC does not delete @file{libgcc.a}, because recompiling it is rarely necessary and takes a lot of time. @item maintainer-clean -Delete almost everything from the current directory that can be -reconstructed with this Makefile. This typically includes everything -deleted by @code{distclean}, plus more: C source files produced by -Bison, tags tables, Info files, and so on. +Delete almost everything that can be reconstructed with this Makefile. +This typically includes everything deleted by @code{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 -@samp{make maintainer-clean} should not delete @file{configure} even if -@file{configure} can be remade using a rule in the Makefile. More generally, -@samp{make maintainer-clean} should not delete anything that needs to -exist in order to run @file{configure} and then begin to build the -program. This is the only exception; @code{maintainer-clean} should -delete everything else that can be rebuilt. +@samp{make maintainer-clean} should not delete @file{configure} even +if @file{configure} can be remade using a rule in the Makefile. More +generally, @samp{make maintainer-clean} should not delete anything +that needs to exist in order to run @file{configure} and then begin to +build the program. Also, there is no need to delete parent +directories that were created with @samp{mkdir -p}, since they could +have existed anyway. These are the only exceptions; +@code{maintainer-clean} should delete everything else that can be +rebuilt. The @samp{maintainer-clean} target is intended to be used by a maintainer of the package, not by ordinary users. You may need special tools to @@ -743,8 +903,15 @@ users build the package, ordinarily Make will not update the Info files because they will already be up to date. @item dvi -Generate DVI files for all Texinfo documentation. -For example: +@itemx html +@itemx pdf +@itemx ps +Generate documentation files in the given format. These targets +should always exist, but any or all can be a no-op if the given output +format cannot be generated. These targets should not be dependencies +of the @code{all} target; the user must manually invoke them. + +Here's an example rule for generating DVI files from Texinfo: @smallexample dvi: foo.dvi @@ -760,6 +927,20 @@ distribution.@footnote{@code{texi2dvi} uses @TeX{} to do the real work of formatting. @TeX{} is not distributed with Texinfo.} Alternatively, write just the dependencies, and allow GNU @code{make} to provide the command. +Here's another example, this one for generating HTML from Texinfo: + +@smallexample +html: foo.html + +foo.html: foo.texi chap1.texi chap2.texi + $(TEXI2HTML) $(srcdir)/foo.texi +@end smallexample + +@noindent +Again, you would define the variable @code{TEXI2HTML} in the Makefile; +for example, it might run @code{makeinfo --no-split --html} +(@command{makeinfo} is part of the Texinfo distribution). + @item 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 @@ -932,10 +1113,12 @@ 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: +extracting the pre-installation commands (the @option{-s} option to +@command{make} is needed to silence messages about entering +subdirectories): @smallexample -make -n install -o all \ +make -s -n install -o all \ PRE_INSTALL=pre-install \ POST_INSTALL=post-install \ NORMAL_INSTALL=normal-install \ @@ -946,10 +1129,7 @@ make -n install -o all \ where the file @file{pre-install.awk} could contain this: @smallexample -$0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ @{on = 0@} +$0 ~ /^(normal-install|post-install)[ \t]*$/ @{on = 0@} on @{print $0@} -$0 ~ /^\t[ \t]*pre_install[ \t]*$/ @{on = 1@} +$0 ~ /^pre-install[ \t]*$/ @{on = 1@} @end smallexample - -The resulting file of pre-installation commands is executed as a shell -script as part of installing the binary package. diff --git a/etc/standards.info b/etc/standards.info index 4fc9776..69b594f 100644 --- a/etc/standards.info +++ b/etc/standards.info @@ -1,15 +1,18 @@ This is standards.info, produced by makeinfo version 4.8 from -.././etc/standards.texi. +./standards.texi. +INFO-DIR-SECTION GNU organization START-INFO-DIR-ENTRY -* Standards: (standards). GNU coding standards. +* 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. + The GNU coding standards, last updated July 22, 2007. + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 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 or +under the terms of the GNU Free Documentation License, Version 1.2 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 @@ -21,19 +24,29 @@ File: standards.info, Node: Top, Next: Preface, Prev: (dir), Up: (dir) Version ******* -Last updated February 14, 2002. +The GNU coding standards, last updated July 22, 2007. + + Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 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.2 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". * 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 +* 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:: Mentioning non-free software or documentation. +* GNU Free Documentation License:: Copying and sharing this manual. * Index::  @@ -50,18 +63,14 @@ 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. + This release of the GNU Coding Standards was last updated July 22, +2007. 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'. +recently, please check for a newer version. You can get the GNU Coding +Standards from the GNU web server in many different formats, including +the Texinfo source, PDF, HTML, DVI, plain text, and more, at: +`http://www.gnu.org/prep/standards/'. Corrections or suggestions for this document should be sent to . If you make a suggestion, please include a @@ -70,7 +79,7 @@ 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. +GNU package. Likely, the need 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. @@ -81,20 +90,24 @@ 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. + The GNU Hello program serves as an example of how to follow the GNU +coding standards for a trivial program. +`http://www.gnu.org/software/hello/hello.html'. +  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 +This chapter 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 +* 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 @@ -113,7 +126,7 @@ 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 +different. You could keep the entire input file in memory 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). @@ -168,7 +181,7 @@ 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 +which you use. For example, if someone sent you one implementation, but you write a different implementation of the same idea, you don't need to get papers. @@ -178,7 +191,8 @@ 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. +released or not), please ask us for a copy. It is also available +online for your perusal: `http://www.gnu.org/prep/maintain/'.  File: standards.info, Node: Trademarks, Prev: Contributions, Up: Legal Issues @@ -191,18 +205,27 @@ 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. +idea of trademarks, but these acknowledgements feel like kowtowing, and +there is no legal requirement for them, so we don't use 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. +avoid using them in ways which a reader might reasonably understand 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 would have been meant as a +shorter way of saying 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. + + Please don't use "win" as an abbreviation for Microsoft Windows in +GNU software or documentation. In hacker terminology, calling +something a "win" is a form of praise. If you wish to praise Microsoft +Windows when speaking on your own, by all means do so, but not in GNU +software. Usually we write the name "Windows" in full, but when +brevity is very important (as in file names and sometimes symbol +names), we abbreviate it to "w". For instance, the files and functions +in Emacs that deal with Windows start with `w32'.  File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Legal Issues, Up: Top @@ -210,16 +233,16 @@ File: standards.info, Node: Design Advice, Next: Program Behavior, Prev: Lega 3 General Program Design ************************ -This node discusses some of the issues you should take into account +This chapter 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 +* Source Language:: Which languages 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 @@ -259,12 +282,12 @@ 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 + The standard extensibility interpreter for GNU software is GUILE +(`http://www.gnu.org/software/guile/'), which implements the language +Scheme (an especially clean and simple dialect of Lisp). 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. +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 @@ -419,7 +442,7 @@ of all possible code paths. else ... - instead of: +instead of: #ifdef HAS_FOO ... @@ -429,11 +452,12 @@ of all possible code paths. 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. +in several projects. Of course, the former method assumes that +`HAS_FOO' is defined as either 0 or 1. 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. +and is not always appropriate, following this policy would have saved +GCC developers many hours, or even 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 @@ -452,26 +476,75 @@ File: standards.info, Node: Program Behavior, Next: Writing C, Prev: Design A 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 +This chapter 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 +* Non-GNU Standards:: We consider standards such as POSIX; + we don't "obey" them. +* 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: Non-GNU Standards, Next: Semantics, Up: Program Behavior + +4.1 Non-GNU Standards +===================== + +The GNU Project regards standards published by other organizations as +suggestions, not orders. We consider those standards, but we do not +"obey" them. In developing a GNU program, you should implement an +outside standard's specifications when that makes the GNU system better +overall in an objective sense. When it doesn't, you shouldn't. + + In most cases, following published standards is convenient for +users--it means that their programs or scripts will work more portably. +For instance, GCC implements nearly all the features of Standard C as +specified by that standard. C program developers would be unhappy if +it did not. And GNU utilities mostly follow specifications of POSIX.2; +shell script writers and users would be unhappy if our programs were +incompatible. + + But we do not follow either of these specifications rigidly, and +there are specific points on which we decided not to follow them, so as +to make the GNU system better for users. + + For instance, Standard C says that nearly all extensions to C are +prohibited. How silly! GCC implements many extensions, some of which +were later adopted as part of the standard. If you want these +constructs to give an error message as "required" by the standard, you +must specify `--pedantic', which was implemented only so that we can +say "GCC is a 100% implementation of the standard," not because there +is any reason to actually use it. + + POSIX.2 specifies that `df' and `du' must output sizes by default in +units of 512 bytes. What users want is units of 1k, so that is what we +do by default. If you want the ridiculous behavior "required" by +POSIX, you must set the environment variable `POSIXLY_CORRECT' (which +was originally going to be named `POSIX_ME_HARDER'). + + GNU utilities also depart from the letter of the POSIX.2 +specification when they support long-named command-line options, and +intermixing options with ordinary arguments. This minor +incompatibility with POSIX is never a problem in practice, and it is +very useful. + + In particular, don't reject a new feature, or remove an old one, +merely because a standard says it is "forbidden" or "deprecated."  -File: standards.info, Node: Semantics, Next: Libraries, Up: Program Behavior +File: standards.info, Node: Semantics, Next: Libraries, Prev: Non-GNU Standards, Up: Program Behavior -4.1 Writing Robust Programs +4.2 Writing Robust Programs =========================== Avoid arbitrary limits on the length or number of _any_ data structure, @@ -569,7 +642,7 @@ or by using the `mkstemps' function from libiberty.  File: standards.info, Node: Libraries, Next: Errors, Prev: Semantics, Up: Program Behavior -4.2 Library Behavior +4.3 Library Behavior ==================== Try to make library functions reentrant. If they need to do dynamic @@ -600,16 +673,17 @@ fit any naming convention.  File: standards.info, Node: Errors, Next: User Interfaces, Prev: Libraries, Up: Program Behavior -4.3 Formatting Error Messages +4.4 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: +If you want to mention the column number, use one of these formats: SOURCE-FILE-NAME:LINENO:COLUMN: MESSAGE + 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 @@ -617,6 +691,19 @@ 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. + The error message can also give both the starting and ending +positions of the erroneous text. There are several formats so that you +can avoid redundant information such as a duplicate line number. Here +are the possible formats: + + SOURCE-FILE-NAME:LINENO-1.COLUMN-1-LINENO-2.COLUMN-2: MESSAGE + SOURCE-FILE-NAME:LINENO-1.COLUMN-1-COLUMN-2: MESSAGE + SOURCE-FILE-NAME:LINENO-1-LINENO-2: MESSAGE + +When an error is spread over several files, you can use this format: + + FILE-1:LINENO-1.COLUMN-1-FILE-2:LINENO-2.COLUMN-2: MESSAGE + Error messages from other noninteractive programs should look like this: @@ -640,8 +727,9 @@ 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. +follows a program name and/or file name, because that isn't the +beginning of a sentence. (The sentence conceptually starts at the +beginning of the line.) 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 @@ -650,7 +738,7 @@ end with a period.  File: standards.info, Node: User Interfaces, Next: Graphical Interfaces, Prev: Errors, Up: Program Behavior -4.4 Standards for Interfaces Generally +4.5 Standards for Interfaces Generally ====================================== Please don't make the behavior of a utility depend on the name used to @@ -684,11 +772,11 @@ format.  File: standards.info, Node: Graphical Interfaces, Next: Command-Line Interfaces, Prev: User Interfaces, Up: Program Behavior -4.5 Standards for Graphical Interfaces +4.6 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 +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"). @@ -706,7 +794,7 @@ 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 +4.7 Standards for Command Line Interfaces ========================================= It is a good idea to follow the POSIX guidelines for the command-line @@ -732,111 +820,191 @@ 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. +among GNU utilities, and fewer idiosyncrasies 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. +`--help'. CGI programs should accept these as command-line options, +and also if given as the `PATH_INFO'; for instance, visiting +`http://example.org/p.cgi/--help' in a browser should output the same +information as invoking `p.cgi --help' from the command line. + +* Menu: + +* --version:: The standard output for --version. +* --help:: The standard output for --help. + + +File: standards.info, Node: --version, Next: --help, Up: Command-Line Interfaces + +4.7.1 `--version' +----------------- + +The standard `--version' 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 line stating the license, preferably using one +of abbrevations below, and a brief statement that the program is free +software, and that users are free to copy and change it. Also mention +that there is no warranty, to the extent permitted by law. See +recommended wording below. + + 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 hello 2.3 + Copyright (C) 2007 Free Software Foundation, Inc. + License GPLv3+: GNU GPL version 3 or later + This is free software: you are free to change and redistribute it. + There is NO WARRANTY, to the extent permitted by law. + + 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. (The rules are different for copyright notices in source files; +*note Copyright Notices: (maintain)Copyright Notices.) + + 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. + + Finally, here is the table of our suggested license abbreviations. +Any abbreviation can be followed by `vVERSION[+]', meaning that +particular version, or later versions with the `+', as shown above. + + In the case of exceptions for extra permissions with the GPL, we use +`/' for a separator; the version number can follow the license +abbreviation as usual, as in the examples below. + +GPL + GNU General Public License, `http://www.gnu.org/licenses/gpl.html'. + +LGPL + GNU Lesser General Public License, + `http://www.gnu.org/licenses/lgpl.html'. + +GPL/Guile + GNU GPL with the exception for Guile; for example, GPLv3+/Guile + means the GNU GPL version 3 or later, with the extra exception for + Guile. + + GNU GPL with the exception for Ada. + +Apache + The Apache Software Foundation license, + `http://www.apache.org/licenses'. + +Artistic + The Artistic license used for Perl, + `http://www.perlfoundation.org/legal'. + +Expat + The Expat license, `http://www.jclark.com/xml/copying.txt'. + +MPL + The Mozilla Public License, `http://www.mozilla.org/MPL/'. + +OBSD + The original (4-clause) BSD license, incompatible with the GNU GPL + `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6'. + +PHP + The license used for PHP, `http://www.php.net/license/'. + +public domain + The non-license that is being in the public domain, + `http://www.gnu.org/licenses/license-list.html#PublicDomain'. + +Python + The license for Python, `http://www.python.org/2.0.1/license.html'. + +RBSD + The revised (3-clause) BSD, compatible with the GNU GPL, + `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5'. + +X11 + The simple non-copyleft license used for most versions of the X + Window system, `http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3'. + +Zlib + The license for Zlib, `http://www.gzip.org/zlib/zlib_license.html'. + + + More information about these licenses and many more are on the GNU +licensing web pages, `http://www.gnu.org/licenses/license-list.html'. + + +File: standards.info, Node: --help, Prev: --version, Up: Command-Line Interfaces + +4.7.2 `--help' +-------------- + +The standard `--help' 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 +4.8 Table of Long Options ========================= Here is a table of long options used by GNU programs. It is surely @@ -1334,8 +1502,7 @@ meanings, so we can update the table. Used in `su'. `machine' - No listing of which programs already use this; someone should - check to see if any actually do, and tell . + Used in `uname'. `macro-name' `-M' in `ptx'. @@ -1445,6 +1612,9 @@ meanings, so we can update the table. `no-sort' `-p' in `nm'. +`no-splash' + Don't print a startup splash screen. + `no-split' Used in `makeinfo'. @@ -1611,8 +1781,8 @@ meanings, so we can update the table. `-q' in Make. `quiet' - Used in many programs to inhibit the usual output. *Note_* every - program accepting `--quiet' should accept `--silent' as a synonym. + Used in many programs to inhibit the usual output. Every program + accepting `--quiet' should accept `--silent' as a synonym. `quiet-unshar' `-Q' in `shar' @@ -1723,8 +1893,8 @@ meanings, so we can update the table. `-T' in `cat'. `silent' - Used in many programs to inhibit the usual output. *Note_* every - program accepting `--silent' should accept `--quiet' as a synonym. + Used in many programs to inhibit the usual output. Every program + accepting `--silent' should accept `--quiet' as a synonym. `size' `-s' in `ls'. @@ -1732,7 +1902,7 @@ meanings, so we can update the table. `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 + provides a way to run, in a non-privileged process, a server that normally needs a reserved port number. `sort' @@ -1926,14 +2096,14 @@ meanings, so we can update the table.  File: standards.info, Node: Memory Usage, Next: File Usage, Prev: Option Table, Up: Program Behavior -4.8 Memory Usage +4.9 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. +long, it is reasonable to read entire input files into memory 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 @@ -1941,16 +2111,16 @@ 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. +are bigger than will fit in memory all at once. If your program creates complicated data structures, just make them -in core and give a fatal error if `malloc' returns zero. +in memory 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 -============== +4.10 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 @@ -1971,19 +2141,21 @@ File: standards.info, Node: Writing C, Next: Documentation, Prev: Program Beh 5 Making The Best Use of C ************************** -This node provides advice on how best to use the C language when +This chapter 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 +* 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 among different operating systems. +* CPU Portability:: Supporting the range of CPU types. +* System Functions:: Portability and ``standard'' library functions. +* Internationalization:: Techniques for internationalization. +* Character Set:: Use ASCII by default. +* Quote Characters:: Use `...' in the C locale. * Mmap:: How you can safely use `mmap'.  @@ -1993,29 +2165,33 @@ File: standards.info, Node: Formatting, Next: Comments, Up: Writing C =============================== 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. +function in column one, so that they will start a defun. Several tools +look for open-braces in column one to find the beginnings of C +functions. These tools will not work on code not formatted that way. + + Avoid putting open-brace, open-parenthesis or open-bracket in column +one when they are inside a function, so that they won't start a defun. +The open-brace that starts a `struct' body can go in column one if you +find it useful to treat that definition as a defun. 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: +the function in column one. This helps people to search for function +definitions, and may also help certain tools recognize them. Thus, +using Standard C syntax, the format is this: static char * - concat (s1, s2) /* Name starts in column zero here */ - char *s1, *s2; - { /* Open brace in column zero here */ + concat (char *s1, char *s2) + { ... } -or, if you want to use Standard C syntax, format the definition like +or, if you want to use traditional C syntax, format the definition like this: static char * - concat (char *s1, char *s2) - { + concat (s1, s2) /* Name starts in column one here */ + char *s1, *s2; + { /* Open brace in column one here */ ... } @@ -2112,7 +2288,13 @@ File: standards.info, Node: Comments, Next: Syntactic Conventions, Prev: Form ======================== Every program should start with a comment saying briefly what it is for. -Example: `fmt - filter for simple filling of text'. +Example: `fmt - filter for simple filling of text'. This comment +should be at the top of the source file containing the `main' function +of the program. + + Also, please write a brief comment at the start of each source file, +with the file name and a line or two about the overall purpose of the +file. Please write the comments in a GNU program in English, because English is the one language that nearly all programmers in all @@ -2210,8 +2392,8 @@ 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 +function. Instead of doing this, it is better to 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 @@ -2282,8 +2464,8 @@ the nested `if' within braces like this: 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: + Try to avoid assignments inside `if'-conditions (assignments inside +`while'-conditions are ok). For example, don't write this: if ((foo = (char *) malloc (sizeof *foo)) == 0) fatal ("virtual memory exhausted"); @@ -2337,7 +2519,7 @@ the option and its letter. For example, `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 +conflict if 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 @@ -2379,11 +2561,20 @@ 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. + As for systems that are not like Unix, such as MSDOS, Windows, VMS, +MVS, and older Macintosh systems, 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. + + If you do support Windows, please do not abbreviate it as "win". In +hacker terminology, calling something a "win" is a form of praise. +You're free to praise Microsoft Windows on your own if you want, but +please don't do this in GNU packages. Instead of abbreviating +"Windows" to "un", you can write it in full or abbreviate it to "woe" +or "w". In GNU Emacs, for instance, we use `w32' in file names of +Windows-specific files, but the macro for Windows conditionals is +called `WINDOWSNT'. 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, @@ -2418,9 +2609,9 @@ example, the following code is ok: 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. +counterexample: 64-bit programs on Microsoft Windows. 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 @@ -2433,36 +2624,59 @@ 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); - } + while ((c = getchar ()) != EOF) + write (file_descriptor, &c, 1); -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. +Instead, use `unsigned char' as follows. (The `unsigned' is for +portability to unusual systems where `char' is signed and where there +is integer overflow checking.) + + int c; + while ((c = getchar ()) != EOF) + { + unsigned char u = c; + write (file_descriptor, &u, 1); + } + + It used to be ok to not worry about the difference between pointers +and integers when passing arguments to functions. However, on most +modern 64-bit machines pointers are wider than `int'. Conversely, +integer types like `long long int' and `off_t' are wider than pointers +on most modern 32-bit machines. Hence it's often better nowadays to +use prototypes to define functions whose argument types are not trivial. + + In particular, if functions accept varying argument counts or types +they should be declared using prototypes containing `...' and defined +using `stdarg.h'. For an example of this, please see the Gnulib +(http://www.gnu.org/software/gnulib/) error module, which declares and +defines the following function: + + /* Print a message with `fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ - If you have decided to use Standard C, then you can instead define -`error' using `stdarg.h', and pass the arguments along to `vfprintf'. + void error (int status, int errnum, const char *format, ...); + + A simple way to use the Gnulib error module is to obtain the two +source files `error.c' and `error.h' from the Gnulib library source +code repository at +`http://savannah.gnu.org/cgi-bin/viewcvs/gnulib/gnulib/lib/'. Here's a +sample use: + + #include "error.h" + #include + #include + + char *program_name = "myprogram"; + + FILE * + xfopen (char const *name) + { + FILE *fp = fopen (name, "r"); + if (! fp) + error (1, errno, "cannot read %s", name); + return fp; + } Avoid casting pointers to integers if you can. Such casts greatly reduce portability, and in most programs they are easy to avoid. In the @@ -2589,7 +2803,7 @@ 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 +File: standards.info, Node: Internationalization, Next: Character Set, Prev: System Functions, Up: Writing C 5.8 Internationalization ======================== @@ -2615,7 +2829,7 @@ This permits GNU gettext to replace the string `"Processing file 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. +package--for example, `coreutils' for the GNU core utilities. To enable gettext to work well, avoid writing code that makes assumptions about the structure of words or sentences. When you want @@ -2626,32 +2840,23 @@ sentence framework. Here is an example of what not to do: - printf ("%d file%s processed", nfiles, - nfiles != 1 ? "s" : ""); + printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk"); -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, + If you apply gettext to all strings, like this, - printf (gettext ("%d file%s processed"), nfiles, - nfiles != 1 ? "s" : ""); + printf (gettext ("%s is full"), + capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk")); -the message can use different words, but it will still be forced to use -`s' for the plural. Here is a better way: +the translator will hardly know that "disk" and "floppy disk" are meant +to be substituted in the other string. Worse, in some languages (like +French) the construction will not work: the translation of the word +"full" depends on the gender of the first part of the sentence; it +happens to be not the same for "disk" as for "floppy disk". - printf ((nfiles != 1 ? "%d files processed" - : "%d file processed"), - nfiles); + Complete sentences can be translated without problems: -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". + printf (capacity > 5000000 ? gettext ("disk is full") + : gettext ("floppy disk is full")); A similar problem appears at the level of sentence structure with this code: @@ -2662,17 +2867,96 @@ this code: 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: +calls does the job straightforwardly 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"); + Another example is this one: + + printf ("%d file%s processed", nfiles, + nfiles != 1 ? "s" : ""); + +The problem with this 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, with gettext being applied to +the two strings independently: + + printf ((nfiles != 1 ? gettext ("%d files processed") + : gettext ("%d file processed")), + nfiles); + +But this still doesn't work for languages like Polish, which has three +plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23, +24, ... and one for the rest. The GNU `ngettext' function solves this +problem: + + printf (ngettext ("%d files processed", "%d file processed", nfiles), + nfiles); + + +File: standards.info, Node: Character Set, Next: Quote Characters, Prev: Internationalization, Up: Writing C + +5.9 Character Set +================= + +Sticking to the ASCII character set (plain text, 7-bit characters) is +preferred in GNU source code comments, text documents, and other +contexts, unless there is good reason to do something else because of +the application domain. For example, if source code deals with the +French Revolutionary calendar, it is OK if its literal strings contain +accented characters in month names like "Flore'al". Also, it is OK to +use non-ASCII characters to represent proper names of contributors in +change logs (*note Change Logs::). + + If you need to use non-ASCII characters, you should normally stick +with one encoding, as one cannot in general mix encodings reliably. + + +File: standards.info, Node: Quote Characters, Next: Mmap, Prev: Character Set, Up: Writing C + +5.10 Quote Characters +===================== + +In the C locale, GNU programs should stick to plain ASCII for quotation +characters in messages to users: preferably 0x60 (``') for left quotes +and 0x27 (`'') for right quotes. It is ok, but not required, to use +locale-specific quotes in other locales. + + The Gnulib (http://www.gnu.org/software/gnulib/) `quote' and +`quotearg' modules provide a reasonably straightforward way to support +locale-specific quote characters, as well as taking care of other +issues, such as quoting a filename that itself contains a quote +character. See the Gnulib documentation for usage details. + + In any case, the documentation for your program should clearly +specify how it does quoting, if different than the preferred method of +``' and `''. This is especially important if the output of your +program is ever likely to be parsed by another program. + + Quotation characters are a difficult area in the computing world at +this time: there are no true left or right quote characters in Latin1; +the ``' character we use was standardized there as a grave accent. +Moreover, Latin1 is still not universally usable. + + Unicode contains the unambiguous quote characters required, and its +common encoding UTF-8 is upward compatible with Latin1. However, +Unicode and UTF-8 are not universally well-supported, either. + + This may change over the next few years, and then we will revisit +this. +  -File: standards.info, Node: Mmap, Prev: Internationalization, Up: Writing C +File: standards.info, Node: Mmap, Prev: Quote Characters, Up: Writing C -5.9 Mmap -======== +5.11 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. @@ -2707,7 +2991,7 @@ extending it, as well as just using it. * Manual Credits:: Giving credit to documentation contributors. * Printed Manuals:: Mentioning the printed manual. * NEWS File:: NEWS files supplement manuals. -* Change Logs:: Recording Changes +* Change Logs:: Recording changes. * Man Pages:: Man pages are secondary. * Reading other Manuals:: How far you can go in learning from other manuals. @@ -2731,20 +3015,26 @@ Info subsystem (`C-h i'). 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 + Make sure your manual is clear to a reader who knows nothing about +the topic and reads it straight through. This means covering basic +topics at the beginning, and advanced topics only later. This also +means defining every specialized term when it is first used. + + Programmers tend to carry over the structure of the program as the +structure for its documentation. But this structure is not necessarily +good for explaining how to use the program; it may be irrelevant and +confusing for a user. + + Instead, the right way to structure documentation is according to the +concepts and questions that a user will have in mind when reading it. +This principle applies at every level, from the lowest (ordering +sentences in a paragraph) to the highest (ordering of chapter topics +within the manual). 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. +often they are different. An important part of learning to write good +documentation is to learn to notice when you have unthinkingly +structured the documentation like the implementation, stop yourself, +and look for 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 @@ -2763,7 +3053,10 @@ 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. +program does. Don't just tell the reader what each feature can do--say +what jobs it is good for, and show how to use it for those jobs. +Explain what is recommended usage, and what kinds of usage users should +avoid. 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, @@ -2800,15 +3093,19 @@ 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_. +bugs _in the text of 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. + 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 prohibited by law. + + Please do not write `()' after a function name just to indicate it +is a function. `foo ()' is not a function, it is a function call with +no arguments.  File: standards.info, Node: Doc Strings and Manuals, Next: Manual Structure Details, Prev: GNU Manuals, Up: Documentation @@ -2834,7 +3131,7 @@ 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 +redundancy 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 @@ -2856,7 +3153,7 @@ number for the manual in both of these places. `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 +for in a man page). 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 @@ -2987,6 +3284,11 @@ 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. + In the past, we recommended not mentioning changes in non-software +files (manuals, help files, etc.) in change logs. However, we've been +advised that it is a good idea to include them, for the sake of +copyright records. + However, sometimes it is useful to write one line to describe the overall purpose of a batch of changes. @@ -3003,9 +3305,9 @@ File: standards.info, Node: Style of Change Logs, Next: Simple Changes, Prev: -------------------------- 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.) +header line that says who made the change and when it was installed, +followed by descriptions of specific changes. (These examples are +drawn from Emacs and GCC.) 1998-08-17 Richard Stallman @@ -3045,6 +3347,22 @@ example: * keyboard.c (menu_bar_items, tool_bar_items) (Fexecute_extended_command): Deal with `keymap' property. + When you install someone else's changes, put the contributor's name +in the change log entry rather than in the text of the entry. In other +words, write this: + + 2002-07-14 John Doe + + * sewing.c: Make it sew. + +rather than this: + + 2002-07-14 Usual Maintainer + + * sewing.c: Make it sew. Patch by jdoe@gnu.org. + + As for the date, that should be the date you applied the change. +  File: standards.info, Node: Simple Changes, Next: Conditional Changes, Prev: Style of Change Logs, Up: Change Logs @@ -3067,12 +3385,17 @@ being called, "All callers changed"--like this: 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. + There's no technical 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. + + However, you should keep change logs for documentation files when the +project gets copyright assignments from its contributors, so as to make +the records of authorship more accurate.  File: standards.info, Node: Conditional Changes, Next: Indicating the Part Changed, Prev: Simple Changes, Up: Change Logs @@ -3158,6 +3481,23 @@ 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. + Be sure that man pages include a copyright statement and free +license. The simple all-permissive license is appropriate for simple +man pages: + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + + For long man pages, with enough explanation and documentation that +they can be considered true manuals, use the GFDL (*note License for +Manuals::). + + Finally, the GNU help2man program +(`http://www.gnu.org/software/help2man/') is one way to automate +generation of a man page, in this case from `--help' output. This is +sufficient in many cases. +  File: standards.info, Node: Reading other Manuals, Prev: Man Pages, Up: Documentation @@ -3192,9 +3532,9 @@ GNU software. * Menu: -* Configuration:: How Configuration Should Work -* Makefile Conventions:: Makefile Conventions -* Releases:: Making Releases +* Configuration:: How configuration of GNU packages should work. +* Makefile Conventions:: Makefile conventions. +* Releases:: Making releases  File: standards.info, Node: Configuration, Next: Makefile Conventions, Up: Managing Releases @@ -3260,21 +3600,29 @@ like this: CPU-COMPANY-SYSTEM - For example, a Sun 3 might be `m68k-sun-sunos4.1'. + For example, an Athlon-based GNU/Linux system might be +`i686-pc-linux-gnu'. 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. +alternatives for how to describe a machine. Thus, +`athlon-pc-gnu/linux' would be a valid alias. There is a shell script +called `config.sub' +(http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub) +that you can use as a subroutine to validate system types and +canonicalize aliases. + + The `configure' script should also take the option +`--build=BUILDTYPE', which should be equivalent to a plain BUILDTYPE +argument. For example, `configure --build=i686-pc-linux-gnu' is +equivalent to `configure i686-pc-linux-gnu'. When the build type is +not specified by an option or argument, the `configure' script should +normally guess it using the shell script `config.guess' +(http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess). 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: +or hardware present on the machine, to include or exclude optional parts +of the package, or to adjust the name of some tools or arguments to +them: `--enable-FEATURE[=PARAMETER]' Configure the package to build and install an optional user-level @@ -3299,11 +3647,26 @@ parts of the package: 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. +`VARIABLE=VALUE' + Set the value of the variable VARIABLE to VALUE. This is used to + override the default values of commands or arguments in the build + process. For example, the user could issue `configure CFLAGS=-g + CXXFLAGS=-g' to build with debugging information and without the + default optimization. + + Specifying variables as arguments to `configure', like this: + ./configure CC=gcc + is preferable to setting them in environment variables: + CC=gcc ./configure + as it helps to recreate the same configuration later with + `config.status'. + + All `configure' scripts should accept all of the "detail" options +and the variable settings, 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 @@ -3319,25 +3682,22 @@ program may be different. 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 compile a program to run on a host type that differs from the +build type, use the configure option `--host=HOSTTYPE', where HOSTTYPE +uses the same syntax as BUILDTYPE. The host type normally defaults to +the build type. + 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. + ./configure --host=HOSTTYPE --target=TARGETTYPE - 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. + The target type normally defaults to the host type. 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. Some programs have ways of configuring themselves automatically. If your program is set up to do this, your `configure' script can simply @@ -3355,11 +3715,12 @@ 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 +* Makefile Basics:: General conventions for Makefiles. +* Utilities in Makefiles:: Utilities to be used in Makefiles. +* Command Variables:: Variables for specifying commands. +* DESTDIR:: Supporting staged installs. +* 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. @@ -3499,7 +3860,7 @@ 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 +File: standards.info, Node: Command Variables, Next: DESTDIR, Prev: Utilities in Makefiles, Up: Makefile Conventions 7.2.3 Variables for Specifying Commands --------------------------------------- @@ -3558,41 +3919,92 @@ basic command for installing a file into the system. 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: +installation, for executables and non-executables respectively. +Minimal use of these variables is 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 + However, it is preferable to support a `DESTDIR' prefix on the +target files, as explained in the next section. 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 +File: standards.info, Node: DESTDIR, Next: Directory Variables, Prev: Command Variables, Up: Makefile Conventions + +7.2.4 `DESTDIR': support for staged installs +-------------------------------------------- + +`DESTDIR' is a variable prepended to each installed target file, like +this: + + $(INSTALL_PROGRAM) foo $(DESTDIR)$(bindir)/foo + $(INSTALL_DATA) libfoo.a $(DESTDIR)$(libdir)/libfoo.a + + The `DESTDIR' variable is specified by the user on the `make' +command line. For example: + + make DESTDIR=/tmp/stage install + +`DESTDIR' should be supported only in the `install*' and `uninstall*' +targets, as those are the only targets where it is useful. + + If your installation step would normally install +`/usr/local/bin/foo' and `/usr/local/lib/libfoo.a', then an +installation invoked as in the example above would install +`/tmp/stage/usr/local/bin/foo' and `/tmp/stage/usr/local/lib/libfoo.a' +instead. + + Prepending the variable `DESTDIR' to each target in this way +provides for "staged installs", where the installed files are not +placed directly into their expected location but are instead copied +into a temporary location (`DESTDIR'). However, installed files +maintain their relative directory structure and any embedded file names +will not be modified. + + You should not set the value of `DESTDIR' in your `Makefile' at all; +then the files are installed into their expected locations by default. +Also, specifying `DESTDIR' should not change the operation of the +software in any way, so its value should not be included in any file +contents. + + `DESTDIR' support is commonly used in package creation. It is also +helpful to users who want to understand what a given package will +install where, and to allow users who don't normally have permissions +to install into protected areas to build and install before gaining +those permissions. Finally, it can be useful with tools such as +`stow', where code is installed in one place but made to appear to be +installed somewhere else using symbolic links or special mount +operations. So, we strongly recommend GNU packages support `DESTDIR', +though it is not an absolute requirement. + + +File: standards.info, Node: Directory Variables, Next: Standard Targets, Prev: DESTDIR, Up: Makefile Conventions -7.2.4 Variables for Installation Directories +7.2.5 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. +variables and the values they should have in GNU packages are described +below. They are based on a standard file system layout; variants of it +are used in GNU/Linux and other modern operating systems. + + Installers are expected to override these values when calling `make' +(e.g., `make prefix=/usr install' or `configure' (e.g., `configure +--prefix=/usr'). GNU packages should not try to guess which value +should be appropriate for these variables on the system they are being +installed onto: use the default settings specified here so that all GNU +packages behave identically, allowing the installer to achieve any +desired layout. + + These first 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 @@ -3641,6 +4053,12 @@ directories. `/usr/local/libexec', but write it as `$(exec_prefix)/libexec'. (If you are using Autoconf, write it as `@libexecdir@'.) + The definition of `libexecdir' is the same for all packages, so + you should install your data in a subdirectory thereof. Most + packages install their data under `$(libexecdir)/PACKAGE-NAME/', + possibly within additional subdirectories thereof, such as + `$(libexecdir)/PACKAGE-NAME/MACHINE/VERSION'. + Data files used by the program during its execution are divided into categories in two ways. @@ -3657,15 +4075,31 @@ 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: + Here are the variables Makefiles should use to specify directories +to put these various kinds of files in: + +`datarootdir' + The root of the directory tree for 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 `@datarootdir@'.) `datadir''s + default value is based on this variable; so are `infodir', + `mandir', and others. `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. + The directory for installing idiosyncratic read-only + architecture-independent data files for this program. This is + usually the same place as `datarootdir', but we use the two + separate variables so that you can move these program-specific + files without altering the location for Info files, man pages, etc. + + This should normally be `/usr/local/share', but write it as + `$(datarootdir)'. (If you are using Autoconf, write it as + `@datadir@'.) + + The definition of `datadir' is the same for all packages, so you + should install your data in a subdirectory thereof. Most packages + install their data under `$(datadir)/PACKAGE-NAME/'. `sysconfdir' The directory for installing read-only data files that pertain to a @@ -3698,30 +4132,10 @@ directories: 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) + These variables specify the directory for installing certain specific +types of files, if your program has them. Every GNU package should +have Info files, so every program needs `infodir', but not all need +`libdir' or `lispdir'. `includedir' The directory for installing header files to be included by user @@ -3757,13 +4171,67 @@ directories: 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. +`docdir' + The directory for installing documentation files (other than Info) + for this package. By default, it should be + `/usr/local/share/doc/YOURPKG', but it should be written as + `$(datarootdir)/doc/YOURPKG'. (If you are using Autoconf, write + it as `@docdir@'.) The YOURPKG subdirectory, which may include a + version number, prevents collisions among files with common names, + such as `README'. + +`infodir' + The directory for installing the Info files for this package. By + default, it should be `/usr/local/share/info', but it should be + written as `$(datarootdir)/info'. (If you are using Autoconf, + write it as `@infodir@'.) `infodir' is separate from `docdir' for + compatibility with existing practice. + +`htmldir' +`dvidir' +`pdfdir' +`psdir' + Directories for installing documentation files in the particular + format. They should all be set to `$(docdir)' by default. (If + you are using Autoconf, write them as `@htmldir@', `@dvidir@', + etc.) Packages which supply several translations of their + documentation should install them in `$(htmldir)/'LL, + `$(pdfdir)/'LL, etc. where LL is a locale abbreviation such as + `en' or `pt_BR'. + +`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@'.) + +`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 `$(datarootdir)/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='${datarootdir}/emacs/site-lisp' + AC_SUBST(lispdir) + +`localedir' + The directory for installing locale-specific message catalogs for + this package. By default, it should be `/usr/local/share/locale', + but it should be written as `$(datarootdir)/locale'. (If you are + using Autoconf, write it as `@localedir@'.) This directory + usually has a subdirectory per locale. + 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@'.) + this package. It will normally be `/usr/local/share/man', but you + should write it as `$(datarootdir)/man'. (If you are using + Autoconf, write it as `@mandir@'.) `man1dir' The directory for installing section 1 man pages. Write it as @@ -3799,20 +4267,22 @@ directories: `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@'.) + (If you are using Autoconf, use `srcdir = @srcdir@'.) For example: # Common prefix for installation directories. # NOTE: This directory must exist when you start the install. prefix = /usr/local + datarootdir = $(prefix)/share + datadir = $(datarootdir) 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 + infodir = $(datarootdir)/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 @@ -3826,10 +4296,18 @@ 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. + At times, not all of these variables may be implemented in the +current release of Autoconf and/or Automake; but as of Autoconf 2.60, we +believe all of them are. When any are missing, the descriptions here +serve as specifications for what Autoconf will implement. As a +programmer, you can either use a development version of Autoconf or +avoid using these variables until a stable release is made which +supports them. +  File: standards.info, Node: Standard Targets, Next: Install Command Categories, Prev: Directory Variables, Up: Makefile Conventions -7.2.5 Standard Targets for Users +7.2.6 Standard Targets for Users -------------------------------- All GNU programs should have the following targets in their Makefiles: @@ -3837,8 +4315,9 @@ 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. + should normally be included in the distribution, and DVI (and other + documentation format) 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 @@ -3899,9 +4378,31 @@ All GNU programs should have the following targets in their Makefiles: commands and "post-installation" commands. *Note Install Command Categories::. +`install-html' +`install-dvi' +`install-pdf' +`install-ps' + These targets install documentation in formats other than Info; + they're intended to be called explicitly by the person installing + the package, if that format is desired. GNU prefers Info files, + so these must be installed by the `install' target. + + When you have many documentation files to install, we recommend + that you avoid collisions and clutter by arranging for these + targets to install in subdirectories of the appropriate + installation directory, such as `htmldir'. As one example, if + your package has multiple manuals, and you wish to install HTML + documentation with many files (such as the "split" mode output by + `makeinfo --html'), you'll certainly want to use subdirectories, + or two nodes with the same name in different manuals will + overwrite each other. + + Please make these `install-FORMAT' targets invoke the commands for + the FORMAT target, for example, by making FORMAT a dependency. + `uninstall' - Delete all the installed files--the copies that the `install' - target creates. + Delete all the installed files--the copies that the `install' and + `install-*' targets create. This rule should not modify the directories where compilation is done, only the directories where files are installed. @@ -3933,20 +4434,25 @@ All GNU programs should have the following targets in their Makefiles: 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 all files in the current directory that are normally + created by building the program. Also delete files in other + directories if they are created by this makefile. However, 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. There is no need to delete + parent directories that were created with `mkdir -p', since they + could have existed anyway. 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. + Delete all files in the current directory (or created by this + makefile) 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. However, there is no need to + delete parent directories that were created with `mkdir -p', since + they could have existed anyway. `mostlyclean' Like `clean', but may refrain from deleting a few files that people @@ -3955,17 +4461,19 @@ All GNU programs should have the following targets in their Makefiles: 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. + Delete almost everything 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 + the program. Also, there is no need to delete parent directories + that were created with `mkdir -p', since they could have existed + anyway. These are the only exceptions; `maintainer-clean' should delete everything else that can be rebuilt. The `maintainer-clean' target is intended to be used by a @@ -4005,7 +4513,16 @@ All GNU programs should have the following targets in their Makefiles: update the Info files because they will already be up to date. `dvi' - Generate DVI files for all Texinfo documentation. For example: +`html' +`pdf' +`ps' + Generate documentation files in the given format. These targets + should always exist, but any or all can be a no-op if the given + output format cannot be generated. These targets should not be + dependencies of the `all' target; the user must manually invoke + them. + + Here's an example rule for generating DVI files from Texinfo: dvi: foo.dvi @@ -4017,6 +4534,17 @@ All GNU programs should have the following targets in their Makefiles: distribution.(1) Alternatively, write just the dependencies, and allow GNU `make' to provide the command. + Here's another example, this one for generating HTML from Texinfo: + + html: foo.html + + foo.html: foo.texi chap1.texi chap2.texi + $(TEXI2HTML) $(srcdir)/foo.texi + + Again, you would define the variable `TEXI2HTML' in the Makefile; + for example, it might run `makeinfo --no-split --html' (`makeinfo' + is part of the Texinfo distribution). + `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 @@ -4086,7 +4614,7 @@ not distributed with Texinfo.  File: standards.info, Node: Install Command Categories, Prev: Standard Targets, Up: Makefile Conventions -7.2.6 Install Command Categories +7.2.7 Install Command Categories -------------------------------- When writing the `install' target, you must classify all the commands @@ -4172,9 +4700,10 @@ 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: +extracting the pre-installation commands (the `-s' option to `make' is +needed to silence messages about entering subdirectories): - make -n install -o all \ + make -s -n install -o all \ PRE_INSTALL=pre-install \ POST_INSTALL=post-install \ NORMAL_INSTALL=normal-install \ @@ -4182,12 +4711,9 @@ extracting the pre-installation commands: where the file `pre-install.awk' could contain this: - $0 ~ /^\t[ \t]*(normal_install|post_install)[ \t]*$/ {on = 0} + $0 ~ /^(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. + $0 ~ /^pre-install[ \t]*$/ {on = 1}  File: standards.info, Node: Releases, Prev: Makefile Conventions, Up: Managing Releases @@ -4195,7 +4721,11 @@ File: standards.info, Node: Releases, Prev: Makefile Conventions, Up: Managin 7.3 Making Releases =================== -Package the distribution of `Foo version 69.96' up in a gzipped tar +You should identify each release with a pair of version numbers, a +major version and a minor. We have no objection to using more than two +numbers, but it is very unlikely that you really need them. + + 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'. @@ -4242,13 +4772,6 @@ 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 @@ -4272,23 +4795,35 @@ 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 +File: standards.info, Node: References, Next: GNU Free Documentation License, 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. +people from using them, but we can and should refuse 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. + + The GNU definition of free software is found on the GNU web site at +`http://www.gnu.org/philosophy/free-sw.html', and the definition of +free documentation is found at +`http://www.gnu.org/philosophy/free-doc.html'. A list of important +licenses and whether they qualify as free is in +`http://www.gnu.org/licenses/license-list.html'. The terms "free" and +"non-free", used in this document, refer to that definition. If it is +not clear whether a license qualifies as free under this definition, +please ask the GNU Project by writing to . We will +answer, and if the license is an important one, we will add it to the +list. 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. +how to build your package on top of some widely used 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 @@ -4296,9 +4831,9 @@ 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. +the advice they need about how to use your free program with it, 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 @@ -4306,48 +4841,83 @@ 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.) + Sometimes a program is free software in itself but depends on a +non-free platform in order to run. For instance, many Java programs +depend on the parts of Sun's Java implementation which are not yet free +software, and won't run on the GNU Java Compiler (which does not yet +have all the features) or won't run with the GNU Java libraries. We +hope this particular problem will be gone in a few months, when Sun +makes the standard Java libraries free software, but of course the +general principle remains: you should not recommend programs that +depend on non-free software to run. + + Some free programs encourage the use of non-free software. A typical +example is `mplayer'. It is free software in itself, and the free code +can handle some kinds of files. However, `mplayer' recommends use of +non-free codecs for other kinds of files, and users that install +`mplayer' are very likely to install those codecs along with it. To +recommend `mplayer' is, in effect, to recommend the non-free codecs. +We must not do that, so we cannot recommend `mplayer' either. + + In general, you should also not recommend programs that themselves +strongly recommend the use of non-free software. + 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: +operating systems is essential for completing the GNU system, or any +free operating 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 weaken the impetus for the community to produce documentation +that we can include. So GNU packages should never recommend non-free +documentation. -* GNU Free Documentation License:: License for copying this manual + By contrast, it is ok to refer to journal articles and textbooks in +the comments of a program for explanation of how it functions, even +though they be non-free. This is because we don't include such things +in the GNU system even if we are allowed to--they are outside the scope +of an operating system project. + + Referring to a web site that describes or recommends a non-free +program is in effect promoting that software, so please do not make +links (or mention by name) web sites that contain such material. This +policy is relevant particularly for the web pages for a GNU package. + + Following links from nearly any web site can lead to non-free +software; this is an inescapable aspect of the nature of the web, and +in itself is no objection to linking to a site. As long as the site +does not itself recommend a non-free program, there is no need be +concerned about the sites it links to for other reasons. + + Thus, for example, you should not make a link to AT&T's web site, +because that recommends AT&T's non-free software packages; you should +not make a link to a site that links to AT&T's site saying it is a +place to get a non-free program; but if a site you want to link to +refers to AT&T's web site in some other context (such as long-distance +telephone service), that is not a problem.  -File: standards.info, Node: GNU Free Documentation License, Up: Copying This Manual +File: standards.info, Node: GNU Free Documentation License, Next: Index, Prev: References, Up: Top -Appendix B GNU Free Documentation License +Appendix A GNU Free Documentation License ***************************************** - Version 1.1, March 2000 + Version 1.2, November 2002 - Copyright (C) 2000 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. + 51 Franklin St, 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. + functional and useful 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. @@ -4363,60 +4933,71 @@ Appendix B GNU Free Documentation License 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." + This License applies to any manual or other work, in any medium, + that contains a notice placed by the copyright holder saying it + can be distributed under the terms of this License. Such a notice + grants a world-wide, royalty-free license, unlimited in duration, + to use that work under the conditions stated herein. The + "Document", below, refers to any such manual or work. Any member + of the public is a licensee, and is addressed as "you". You + accept the license if you copy, modify or distribute the work in a + way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. - A "Secondary Section" is a named appendix or a front-matter - section of the Document that deals exclusively with the - relationship of the publishers or authors of the Document to the - Document's overall subject (or to related matters) and contains - nothing that could fall directly within that overall subject. - (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. + A "Secondary Section" is a named appendix or a front-matter section + of the Document that deals exclusively with the relationship of the + publishers or authors of the Document to the Document's overall + subject (or to related matters) and contains nothing that could + fall directly within that overall subject. (Thus, if the Document + is in part a textbook of mathematics, a Secondary Section may not + explain any mathematics.) The relationship could be a matter of + historical connection with the subject or with related matters, or + of legal, commercial, philosophical, ethical or political position + regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this - License. + License. If a section does not fit the above definition of + Secondary then it is not allowed to be designated as Invariant. + The Document may contain zero Invariant Sections. If the Document + does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice - that says that the Document is released under this License. + that says that the Document is released under this License. A + Front-Cover Text may be at most 5 words, and a Back-Cover Text may + be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the - general public, whose contents can be viewed and edited directly - and straightforwardly with generic text editors or (for images + general public, that is suitable for revising the document + straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an - otherwise Transparent file format whose markup has been designed - to thwart or discourage subsequent modification by readers is not - Transparent. A copy that is not "Transparent" is called "Opaque." + otherwise Transparent file format whose markup, or absence of + markup, has been arranged to thwart or discourage subsequent + modification by readers is not Transparent. An image format is + not Transparent if used for any substantial amount of text. A + copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain 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. + standard-conforming simple HTML, PostScript or PDF designed for + human modification. Examples of transparent image formats include + PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF + produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the @@ -4425,6 +5006,22 @@ Appendix B GNU Free Documentation License Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. + A section "Entitled XYZ" means a named subunit of the Document + whose title either is precisely XYZ or contains XYZ in parentheses + following text that translates XYZ in another language. (Here XYZ + stands for a specific section name mentioned below, such as + "Acknowledgements", "Dedications", "Endorsements", or "History".) + To "Preserve the Title" of such a section when you modify the + Document means that it remains a section "Entitled XYZ" according + to this definition. + + The Document may include Warranty Disclaimers next to the notice + which states that this License applies to the Document. These + Warranty Disclaimers are considered to be included by reference in + this License, but only as regards disclaiming warranties: any other + implication that these Warranty Disclaimers may have is void and + has no effect on the meaning of this License. + 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either @@ -4443,10 +5040,11 @@ Appendix B GNU Free Documentation License 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 + If you publish printed copies (or copies in media that commonly + have printed covers) of the Document, numbering more than 100, and + the Document's license notice requires Cover Texts, you must + enclose the copies in covers that carry, clearly and legibly, all + these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the @@ -4464,11 +5062,10 @@ Appendix B GNU Free Documentation License 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 + state in or with each Opaque copy a computer-network location from + which the general network-using public has access to download + using public-standard network protocols a complete Transparent + copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated @@ -4491,57 +5088,75 @@ Appendix B GNU Free Documentation License 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. + 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 fewer than five), unless they release you + from this requirement. + + 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", Preserve its Title, + and add to it an item stating at least the title, year, new + authors, and publisher of the Modified Version as given on + the Title Page. If there is no section Entitled "History" in + the Document, create one stating the title, year, authors, + and publisher of the Document as given on its Title Page, + then add an item describing the Modified Version as stated in + the previous sentence. + + 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. For any section Entitled "Acknowledgements" or "Dedications", + Preserve the Title of the section, and preserve in the + section all the substance and tone of each of the contributor + acknowledgements and/or dedications given therein. + + 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 to be Entitled + "Endorsements" or to conflict in title with any Invariant + Section. + + O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no @@ -4551,11 +5166,11 @@ Appendix B GNU Free Documentation License 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 standard. + 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 @@ -4579,7 +5194,8 @@ Appendix B GNU Free Documentation License 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. + combined work in its license notice, and that you preserve all + their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single @@ -4591,11 +5207,11 @@ Appendix B GNU Free Documentation License the list of Invariant Sections in the license notice of the combined work. - In the combination, you must combine any sections entitled + 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." + Entitled "History"; likewise combine any sections Entitled + "Acknowledgements", and any sections Entitled "Dedications". You + must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS @@ -4616,20 +5232,20 @@ Appendix B GNU Free Documentation License 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. + a storage or distribution medium, is called an "aggregate" if the + copyright resulting from the compilation is not used to limit the + legal rights of the compilation's users beyond what the individual + works permit. When the Document is included in an aggregate, this + License does not apply to the other works in the aggregate which + are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these - copies of the Document, then if the Document is less than one - 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. + copies of the Document, then if the Document is less than one half + of the entire aggregate, the Document's Cover Texts may be placed + on covers that bracket the Document within the aggregate, or the + electronic equivalent of covers if the Document is in electronic + form. Otherwise they must appear on printed covers that bracket + the whole aggregate. 8. TRANSLATION @@ -4639,10 +5255,18 @@ Appendix B GNU Free Documentation License 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. + translation of this License, and all the license notices in the + Document, and any Warranty Disclaimers, provided that you also + include the original English version of this License and the + original versions of those notices and disclaimers. In case of a + disagreement between the translation and the original version of + this License or a notice or disclaimer, the original version will + prevail. + + If a section in the Document is Entitled "Acknowledgements", + "Dedications", or "History", the requirement (section 4) to + Preserve its Title (section 1) will typically require changing the + actual title. 9. TERMINATION @@ -4660,7 +5284,7 @@ Appendix B GNU Free Documentation License 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/. + `http://www.gnu.org/copyleft/'. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered @@ -4672,7 +5296,6 @@ Appendix B GNU Free Documentation 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 ==================================================== @@ -4680,19 +5303,24 @@ 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." + 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.2 + or any later version published by the Free Software Foundation; + with no Invariant Sections, no Front-Cover Texts, and no Back-Cover + Texts. A copy of the license is included in the section entitled ``GNU + Free Documentation License''. + + If you have Invariant Sections, Front-Cover Texts and Back-Cover +Texts, replace the "with...Texts." line with this: - 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. + with the Invariant Sections being LIST THEIR TITLES, with + the Front-Cover Texts being LIST, and with the Back-Cover Texts + being LIST. + + If you have Invariant Sections without Cover Texts, or some other +combination of the three, merge those two alternatives to suit the +situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of @@ -4700,7 +5328,7 @@ 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 +File: standards.info, Node: Index, Prev: GNU Free Documentation License, Up: Top Index ***** @@ -4708,35 +5336,34 @@ Index [index] * Menu: -* #endif, commenting: Comments. (line 54) -* --help option: Command-Line Interfaces. - (line 119) -* --version option: Command-Line Interfaces. - (line 34) +* #endif, commenting: Comments. (line 60) +* --help output: --help. (line 6) +* --version output: --version. (line 6) * -Wall compiler option: Syntactic Conventions. (line 10) * accepting contributions: Contributions. (line 6) -* address for bug reports: Command-Line Interfaces. - (line 125) +* address for bug reports: --help. (line 11) * ANSI C standard: Standard C. (line 6) * arbitrary limits on data: Semantics. (line 6) +* ASCII characters: Character Set. (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) +* bindir: Directory Variables. (line 54) * 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) +* bug reports: --help. (line 11) +* canonical name of a program: --version. (line 12) +* casting pointers to integers: CPU Portability. (line 90) +* CGI programs, standard options for: Command-Line Interfaces. + (line 31) * change logs: Change Logs. (line 6) * change logs, conditional changes: Conditional Changes. (line 6) * change logs, style: Style of Change Logs. (line 6) +* character set: Character Set. (line 6) * command-line arguments, decoding: Semantics. (line 46) * command-line interface: Command-Line Interfaces. (line 6) @@ -4745,9 +5372,9 @@ Index * compiler warnings: Syntactic Conventions. (line 10) * conditional changes, and change logs: Conditional Changes. (line 6) -* conditionals, comments for: Comments. (line 54) +* conditionals, comments for: Comments. (line 60) * configure: Configuration. (line 6) -* control-L: Formatting. (line 114) +* control-L: Formatting. (line 118) * conventions for makefiles: Makefile Conventions. (line 6) * corba: Graphical Interfaces. @@ -4755,18 +5382,22 @@ Index * credits for manuals: Manual Credits. (line 6) * data types, and portability: CPU Portability. (line 6) * declaration for system functions: System Functions. (line 21) +* DESTDIR: DESTDIR. (line 6) * documentation: Documentation. (line 6) * doschk: Names. (line 38) * downloading this manual: Preface. (line 17) +* encodings: Character Set. (line 6) * error messages: Semantics. (line 19) * error messages, formatting: Errors. (line 6) -* exec_prefix: Directory Variables. (line 27) -* expressions, splitting: Formatting. (line 77) +* exec_prefix: Directory Variables. (line 36) +* expressions, splitting: Formatting. (line 81) +* FDL, GNU Free Documentation License: GNU Free Documentation License. + (line 6) * 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) +* formfeed: Formatting. (line 118) * function argument, declaring: Syntactic Conventions. (line 6) * function prototypes: Standard C. (line 17) @@ -4778,22 +5409,26 @@ Index (line 16) * graphical user interface: Graphical Interfaces. (line 6) -* gtk: Graphical Interfaces. +* grave accent: Quote Characters. (line 6) +* gtk+: Graphical Interfaces. (line 6) * GUILE: Source Language. (line 38) * implicit int: Syntactic Conventions. (line 6) * impossible conditions: Semantics. (line 70) +* installations, staged: DESTDIR. (line 6) * internationalization: Internationalization. (line 6) +* left quote: Quote Characters. (line 6) * legal aspects: Legal Issues. (line 6) * legal papers: Contributions. (line 6) -* libexecdir: Directory Variables. (line 58) +* libexecdir: Directory Variables. (line 67) * 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) +* locale-specific quote characters: Quote Characters. (line 6) * long option names: Option Table. (line 6) * long-named options: Command-Line Interfaces. (line 12) @@ -4812,14 +5447,19 @@ Index (line 35) * names of variables, functions, and files: Names. (line 6) * NEWS file: NEWS File. (line 6) +* non-ASCII characters: Character Set. (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) +* optional features, configure-time: Configuration. (line 83) * options for compatibility: Compatibility. (line 14) +* options, standard command-line: Command-Line Interfaces. + (line 31) * output device and program's behavior: User Interfaces. (line 13) * packaging: Releases. (line 6) +* PATH_INFO, specifying standard options as: Command-Line Interfaces. + (line 31) * portability, and data types: CPU Portability. (line 6) * portability, and library functions: System Functions. (line 6) * portability, between system types: System Portability. (line 6) @@ -4829,21 +5469,22 @@ Index (line 6) * pre-installation commands: Install Command Categories. (line 6) -* prefix: Directory Variables. (line 17) +* prefix: Directory Variables. (line 26) * 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) +* program's canonical name: --version. (line 12) +* programming languages: Source Language. (line 6) * proprietary programs: Reading Non-Free Code. (line 6) -* README file: Releases. (line 17) +* quote characters: Quote Characters. (line 6) +* README file: Releases. (line 21) * references to non-free material: References. (line 6) * releasing: Managing Releases. (line 6) -* sbindir: Directory Variables. (line 51) +* sbindir: Directory Variables. (line 60) * signal handling: Semantics. (line 59) -* spaces before open-paren: Formatting. (line 71) +* spaces before open-paren: Formatting. (line 75) +* staged installs: DESTDIR. (line 6) * standard command-line options: Command-Line Interfaces. (line 31) * standards for makefiles: Makefile Conventions. @@ -4855,7 +5496,7 @@ Index * temporary files: Semantics. (line 84) * temporary variables: Syntactic Conventions. (line 23) -* texinfo.tex, in a distribution: Releases. (line 73) +* texinfo.tex, in a distribution: Releases. (line 70) * TMPDIR environment variable: Semantics. (line 84) * trademarks: Trademarks. (line 6) * where to obtain standards.texi: Preface. (line 17) @@ -4863,68 +5504,73 @@ Index  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 +Node: Top797 +Node: Preface2053 +Node: Legal Issues4168 +Node: Reading Non-Free Code4638 +Node: Contributions6368 +Node: Trademarks8606 +Node: Design Advice10241 +Node: Source Language10833 +Node: Compatibility12845 +Node: Using Extensions14473 +Node: Standard C16049 +Node: Conditional Compilation18452 +Node: Program Behavior19850 +Node: Non-GNU Standards20906 +Node: Semantics23187 +Node: Libraries27906 +Node: Errors29151 +Node: User Interfaces31644 +Node: Graphical Interfaces33249 +Node: Command-Line Interfaces34285 +Node: --version36317 +Node: --help42210 +Node: Option Table42764 +Node: Memory Usage57705 +Node: File Usage58736 +Node: Writing C59486 +Node: Formatting60458 +Node: Comments64747 +Node: Syntactic Conventions68299 +Node: Names71761 +Node: System Portability73973 +Node: CPU Portability76863 +Node: System Functions80775 +Node: Internationalization85972 +Node: Character Set89966 +Node: Quote Characters90779 +Node: Mmap92299 +Node: Documentation93007 +Node: GNU Manuals94113 +Node: Doc Strings and Manuals99851 +Node: Manual Structure Details101404 +Node: License for Manuals102822 +Node: Manual Credits103796 +Node: Printed Manuals104189 +Node: NEWS File104875 +Node: Change Logs105553 +Node: Change Log Concepts106307 +Node: Style of Change Logs108396 +Node: Simple Changes110896 +Node: Conditional Changes112338 +Node: Indicating the Part Changed113760 +Node: Man Pages114287 +Node: Reading other Manuals116599 +Node: Managing Releases117390 +Node: Configuration118171 +Node: Makefile Conventions125891 +Node: Makefile Basics126773 +Node: Utilities in Makefiles129947 +Node: Command Variables132092 +Node: DESTDIR135314 +Node: Directory Variables137463 +Node: Standard Targets151956 +Ref: Standard Targets-Footnote-1165471 +Node: Install Command Categories165571 +Node: Releases170104 +Node: References174031 +Node: GNU Free Documentation License179526 +Node: Index201958  End Tag Table diff --git a/etc/standards.texi b/etc/standards.texi index 490e15b..821b60e 100644 --- a/etc/standards.texi +++ b/etc/standards.texi @@ -3,16 +3,13 @@ @setfilename standards.info @settitle GNU Coding Standards @c This date is automagically updated when you save this file: -@set lastupdate February 14, 2002 +@set lastupdate July 22, 2007 @c %**end of header -@ifnottex -@format -START-INFO-DIR-ENTRY -* Standards: (standards). GNU coding standards. -END-INFO-DIR-ENTRY -@end format -@end ifnottex +@dircategory GNU organization +@direntry +* Standards: (standards). GNU coding standards. +@end direntry @c @setchapternewpage odd @setchapternewpage off @@ -28,59 +25,55 @@ END-INFO-DIR-ENTRY @iftex @set CHAPTER chapter @end iftex -@ifnottex +@ifinfo @set CHAPTER node -@end ifnottex +@end ifinfo -@ifnottex -GNU Coding Standards -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. +@copying +The GNU coding standards, last updated @value{lastupdate}. + +Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +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 +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. -@end ifnottex +@end copying @titlepage @title GNU Coding Standards @author Richard Stallman, et al. @author last updated @value{lastupdate} @page - @vskip 0pt plus 1filll -Copyright @copyright{} 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''. +@insertcopying @end titlepage +@contents + @ifnottex @node Top, Preface, (dir), (dir) @top Version -Last updated @value{lastupdate}. +@insertcopying @end ifnottex @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:: +* 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:: Mentioning non-free software or documentation. +* GNU Free Documentation License:: Copying and sharing this manual. +* Index:: @end menu @@ -101,15 +94,10 @@ This release of the GNU Coding Standards was last updated @cindex where to obtain @code{standards.texi} @cindex downloading this manual 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 -@file{/pub/gnu/standards/}. The GNU Coding Standards are available -there in several different formats: @file{standards.text}, -@file{standards.info}, and @file{standards.dvi}, as well as the -Texinfo ``source'' which is divided in two files: -@file{standards.texi} and @file{make-stds.texi}. The GNU Coding -Standards are also available on the GNU World Wide Web server: -@uref{http://www.gnu.org/prep/standards_toc.html}. +recently, please check for a newer version. You can get the GNU +Coding Standards from the GNU web server in many +different formats, including the Texinfo source, PDF, HTML, DVI, plain +text, and more, at: @uref{http://www.gnu.org/prep/standards/}. Corrections or suggestions for this document should be sent to @email{bug-standards@@gnu.org}. If you make a suggestion, please include a @@ -118,7 +106,7 @@ diff to the @file{standards.texi} or @file{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. +GNU package. Likely, the need 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. @@ -129,17 +117,21 @@ 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. +The GNU Hello program serves as an example of how to follow the GNU +coding standards for a trivial program. +@uref{http://www.gnu.org/software/hello/hello.html}. + @node Legal Issues @chapter Keeping Free Software Free @cindex legal aspects -This @value{CHAPTER} discusses how you can make sure that GNU software +This chapter 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 +* Reading Non-Free Code:: Referring to proprietary programs. +* Contributions:: Accepting contributions. +* Trademarks:: How we deal with trademark issues. @end menu @node Reading Non-Free Code @@ -158,7 +150,7 @@ 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 +different. You could keep the entire input file in memory 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). @@ -211,7 +203,7 @@ 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 +which you use. For example, if someone sent you one implementation, but you write a different implementation of the same idea, you don't need to get papers. @@ -221,7 +213,8 @@ 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. +released or not), please ask us for a copy. It is also available +online for your perusal: @uref{http://www.gnu.org/prep/maintain/}. @node Trademarks @section Trademarks @@ -232,24 +225,33 @@ 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. +idea of trademarks, but these acknowledgements feel like kowtowing, +and there is no legal requirement for them, so we don't use 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. +avoid using them in ways which a reader might reasonably understand 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 would have been meant as +a shorter way of saying 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. + +Please don't use ``win'' as an abbreviation for Microsoft Windows in +GNU software or documentation. In hacker terminology, calling +something a ``win'' is a form of praise. If you wish to praise +Microsoft Windows when speaking on your own, by all means do so, but +not in GNU software. Usually we write the name ``Windows'' in full, +but when brevity is very important (as in file names and sometimes +symbol names), we abbreviate it to ``w''. For instance, the files and +functions in Emacs that deal with Windows start with @samp{w32}. @node Design Advice @chapter General Program Design @cindex program design -This @value{CHAPTER} discusses some of the issues you should take into +This chapter discusses some of the issues you should take into account when designing your program. @c Standard or ANSI C @@ -263,16 +265,16 @@ account when designing your program. @c A major revision of the C Standard appeared in 1999. @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 +* Source Language:: Which languages 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. @end menu @node Source Language @section Which Languages to Use -@cindex programming languges +@cindex programming languages 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 @@ -310,12 +312,12 @@ is written in that language, too. The Emacs editor pioneered this technique. @cindex GUILE -The standard extensibility interpreter for GNU software is GUILE, which -implements the language Scheme (an especially clean and simple dialect -of Lisp). @uref{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. +The standard extensibility interpreter for GNU software is GUILE +(@uref{http://www.gnu.org/software/guile/}), which implements the +language Scheme (an especially clean and simple dialect of Lisp). 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. @node Compatibility @section Compatibility with Other Implementations @@ -476,6 +478,7 @@ For example, please write ... @end smallexample +@noindent instead of: @smallexample @@ -488,11 +491,12 @@ instead of: 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. +in several projects. Of course, the former method assumes that +@code{HAS_FOO} is defined as either 0 or 1. 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. +and is not always appropriate, following this policy would have saved +GCC developers many hours, or even days, per year. In the case of function-like macros like @code{REVERSIBLE_CC_MODE} in GCC which cannot be simply used in @code{if( ...)} statements, there is @@ -510,22 +514,68 @@ an easy workaround. Simply introduce another macro @node Program Behavior @chapter Program Behavior for All Programs -This @value{CHAPTER} describes conventions for writing robust +This chapter 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 +* Non-GNU Standards:: We consider standards such as POSIX; + we don't "obey" them. +* 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. @end menu +@node Non-GNU Standards +@section Non-GNU Standards + +The GNU Project regards standards published by other organizations as +suggestions, not orders. We consider those standards, but we do not +``obey'' them. In developing a GNU program, you should implement +an outside standard's specifications when that makes the GNU system +better overall in an objective sense. When it doesn't, you shouldn't. + +In most cases, following published standards is convenient for +users---it means that their programs or scripts will work more +portably. For instance, GCC implements nearly all the features of +Standard C as specified by that standard. C program developers would +be unhappy if it did not. And GNU utilities mostly follow +specifications of POSIX.2; shell script writers and users would be +unhappy if our programs were incompatible. + +But we do not follow either of these specifications rigidly, and there +are specific points on which we decided not to follow them, so as to +make the GNU system better for users. + +For instance, Standard C says that nearly all extensions to C are +prohibited. How silly! GCC implements many extensions, some of which +were later adopted as part of the standard. If you want these +constructs to give an error message as ``required'' by the standard, +you must specify @samp{--pedantic}, which was implemented only so that +we can say ``GCC is a 100% implementation of the standard,'' not +because there is any reason to actually use it. + +POSIX.2 specifies that @samp{df} and @samp{du} must output sizes by +default in units of 512 bytes. What users want is units of 1k, so +that is what we do by default. If you want the ridiculous behavior +``required'' by POSIX, you must set the environment variable +@samp{POSIXLY_CORRECT} (which was originally going to be named +@samp{POSIX_ME_HARDER}). + +GNU utilities also depart from the letter of the POSIX.2 specification +when they support long-named command-line options, and intermixing +options with ordinary arguments. This minor incompatibility with +POSIX is never a problem in practice, and it is very useful. + +In particular, don't reject a new feature, or remove an old one, +merely because a standard says it is ``forbidden'' or ``deprecated.'' + @node Semantics @section Writing Robust Programs @@ -679,10 +729,12 @@ Error messages from compilers should look like this: @end example @noindent -If you want to mention the column number, use this format: +If you want to mention the column number, use one of these formats: @example @var{source-file-name}:@var{lineno}:@var{column}: @var{message} +@var{source-file-name}:@var{lineno}.@var{column}: @var{message} + @end example @noindent @@ -692,6 +744,24 @@ 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. +The error message can also give both the starting and ending positions +of the erroneous text. There are several formats so that you can +avoid redundant information such as a duplicate line number. +Here are the possible formats: + +@example +@var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{lineno-2}.@var{column-2}: @var{message} +@var{source-file-name}:@var{lineno-1}.@var{column-1}-@var{column-2}: @var{message} +@var{source-file-name}:@var{lineno-1}-@var{lineno-2}: @var{message} +@end example + +@noindent +When an error is spread over several files, you can use this format: + +@example +@var{file-1}:@var{lineno-1}.@var{column-1}-@var{file-2}:@var{lineno-2}.@var{column-2}: @var{message} +@end example + Error messages from other noninteractive programs should look like this: @example @@ -722,8 +792,9 @@ 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 @var{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. +it follows a program name and/or file name, because that isn't the +beginning of a sentence. (The sentence conceptually starts at the +beginning of the line.) 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 @@ -763,13 +834,14 @@ output device type. For example, we provide a @code{dir} program much like @code{ls} except that its default output format is always multi-column format. + @node Graphical Interfaces @section Standards for Graphical Interfaces @cindex graphical user interface -@cindex gtk +@cindex gtk+ When you write a program that provides a graphical user interface, -please make it work with X Windows and the GTK toolkit unless the +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''). @@ -786,6 +858,7 @@ 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. + @node Command-Line Interfaces @section Standards for Command Line Interfaces @cindex command-line interface @@ -816,19 +889,34 @@ be input files only; any output files would be specified using options (preferably @samp{-o} or @samp{--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. +among GNU utilities, and fewer idiosyncrasies for users to remember. @cindex standard command-line options +@cindex options, standard command-line +@cindex CGI programs, standard options for +@cindex PATH_INFO, specifying standard options as All programs should support two standard options: @samp{--version} -and @samp{--help}. +and @samp{--help}. CGI programs should accept these as command-line +options, and also if given as the @env{PATH_INFO}; for instance, +visiting @url{http://example.org/p.cgi/--help} in a browser should +output the same information as invoking @samp{p.cgi --help} from the +command line. -@table @code -@cindex @samp{--version} option -@item --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. +@menu +* --version:: The standard output for --version. +* --help:: The standard output for --help. +@end menu + +@node --version +@subsection @option{--version} + +@cindex @samp{--version} output + +The standard @code{--version} 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. @cindex canonical name of a program @cindex program's canonical name @@ -858,7 +946,7 @@ 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 @strong{need} to mention the version numbers of libraries which +If you @emph{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 @@ -873,10 +961,11 @@ 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. +Next should follow a line stating the license, preferably using one of +abbrevations below, and a brief statement that the program is free +software, and that users are free to copy and change it. Also mention +that there is no warranty, to the extent permitted by law. See +recommended wording below. It is ok to finish the output with a list of the major authors of the program, as a way of giving credit. @@ -884,14 +973,11 @@ program, as a way of giving credit. Here's an example of output that follows these rules: @smallexample -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. +GNU hello 2.3 +Copyright (C) 2007 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. @end smallexample You should adapt this to your program, of course, filling in the proper @@ -902,32 +988,102 @@ 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. +line. (The rules are different for copyright notices in source files; +@pxref{Copyright Notices,,,maintain,Information for GNU Maintainers}.) Translations of the above lines must preserve the validity of the copyright notices (@pxref{Internationalization}). If the translation's character set supports it, the @samp{(C)} should be replaced with the copyright symbol, as follows: -@ifinfo -(the official copyright symbol, which is the letter C in a circle); -@end ifinfo -@ifnotinfo +@ifinfo +(the official copyright symbol, which is the letter C in a circle); +@end ifinfo +@ifnotinfo @copyright{} -@end ifnotinfo +@end ifnotinfo 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. +Finally, here is the table of our suggested license abbreviations. +Any abbreviation can be followed by @samp{v@var{version}[+]}, meaning +that particular version, or later versions with the @samp{+}, as shown +above. -@cindex @samp{--help} option -@item --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. +In the case of exceptions for extra permissions with the GPL, we use +@samp{/} for a separator; the version number can follow the license +abbreviation as usual, as in the examples below. + +@table @asis +@item GPL +GNU General Public License, @url{http://www.gnu.org/licenses/gpl.html}. + +@item LGPL +GNU Lesser General Public License, @url{http://www.gnu.org/licenses/lgpl.html}. + +@item GPL/Guile +GNU GPL with the exception for Guile; for example, GPLv3+/Guile means +the GNU GPL version 3 or later, with the extra exception for Guile. + +GNU GPL with the exception for Ada. + +@item Apache +The Apache Software Foundation license, +@url{http://www.apache.org/licenses}. + +@item Artistic +The Artistic license used for Perl, @url{http://www.perlfoundation.org/legal}. + +@item Expat +The Expat license, @url{http://www.jclark.com/xml/copying.txt}. + +@item MPL +The Mozilla Public License, @url{http://www.mozilla.org/MPL/}. + +@item OBSD +The original (4-clause) BSD license, incompatible with the GNU GPL +@url{http://www.xfree86.org/3.3.6/COPYRIGHT2.html#6}. + +@item PHP +The license used for PHP, @url{http://www.php.net/license/}. + +@item public domain +The non-license that is being in the public domain, +@url{http://www.gnu.org/licenses/license-list.html#PublicDomain}. + +@item Python +The license for Python, @url{http://www.python.org/2.0.1/license.html}. + +@item RBSD +The revised (3-clause) BSD, compatible with the GNU GPL, +@url{http://www.xfree86.org/3.3.6/COPYRIGHT2.html#5}. + +@item X11 +The simple non-copyleft license used for most versions of the X Window +system, @url{http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3}. + +@item Zlib +The license for Zlib, @url{http://www.gzip.org/zlib/zlib_license.html}. + +@end table + +More information about these licenses and many more are on the GNU +licensing web pages, +@url{http://www.gnu.org/licenses/license-list.html}. + + +@node --help +@subsection @option{--help} + +@cindex @samp{--help} output + +The standard @code{--help} 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. @cindex address for bug reports @cindex bug reports @@ -937,7 +1093,7 @@ that says where to mail bug reports. It should have this format: @example Report bugs to @var{mailing-address}. @end example -@end table + @node Option Table @section Table of Long Options @@ -1461,9 +1617,7 @@ Used in @code{gawk}. Used in @code{su}. @item machine -No listing of which programs already use this; -someone should check to -see if any actually do, and tell @email{gnu@@gnu.org}. +Used in @code{uname}. @item macro-name @samp{-M} in @code{ptx}. @@ -1573,6 +1727,9 @@ Used in GDB. @item no-sort @samp{-p} in @code{nm}. +@item no-splash +Don't print a startup splash screen. + @item no-split Used in @code{makeinfo}. @@ -1740,7 +1897,7 @@ Specify an HTTP proxy. @samp{-q} in Make. @item quiet -Used in many programs to inhibit the usual output. @strong{Note:} every +Used in many programs to inhibit the usual output. Every program accepting @samp{--quiet} should accept @samp{--silent} as a synonym. @@ -1855,7 +2012,7 @@ Used by @code{recode} to chose files or pipes for sequencing passes. @item silent Used in many programs to inhibit the usual output. -@strong{Note:} every program accepting +Every program accepting @samp{--silent} should accept @samp{--quiet} as a synonym. @item size @@ -1864,7 +2021,7 @@ Used in many programs to inhibit the usual output. @item 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 +run, in a non-privileged process, a server that normally needs a reserved port number. @item sort @@ -2065,7 +2222,7 @@ Print the version number. 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. +reasonable to read entire input files into memory to operate on them. However, for programs such as @code{cat} or @code{tail}, that can usefully operate on very large files, it is important to avoid using a @@ -2073,10 +2230,10 @@ 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. +files that are bigger than will fit in memory all at once. If your program creates complicated data structures, just make them in -core and give a fatal error if @code{malloc} returns zero. +memory and give a fatal error if @code{malloc} returns zero. @node File Usage @section File Usage @@ -2098,18 +2255,20 @@ directory. @node Writing C @chapter Making The Best Use of C -This @value{CHAPTER} provides advice on how best to use the C language +This chapter 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 +* 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 among different operating systems. +* CPU Portability:: Supporting the range of CPU types. +* System Functions:: Portability and ``standard'' library functions. +* Internationalization:: Techniques for internationalization. +* Character Set:: Use ASCII by default. +* Quote Characters:: Use `...' in the C locale. * Mmap:: How you can safely use @code{mmap}. @end menu @@ -2120,33 +2279,37 @@ when writing GNU software. @cindex open brace @cindex braces, in C source 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. +function in column one, so that they will start a defun. Several +tools look for open-braces in column one to find the beginnings of C +functions. These tools will not work on code not formatted that way. + +Avoid putting open-brace, open-parenthesis or open-bracket in column +one when they are inside a function, so that they won't start a defun. +The open-brace that starts a @code{struct} body can go in column one +if you find it useful to treat that definition as a defun. It is also important for function definitions to start the name of the -function in column zero. This helps people to search for function +function in column one. This helps people to search for function definitions, and may also help certain tools recognize them. Thus, -the proper format is this: +using Standard C syntax, the format is this: @example static char * -concat (s1, s2) /* Name starts in column zero here */ - char *s1, *s2; -@{ /* Open brace in column zero here */ +concat (char *s1, char *s2) +@{ @dots{} @} @end example @noindent -or, if you want to use Standard C syntax, format the definition like +or, if you want to use traditional C syntax, format the definition like this: @example static char * -concat (char *s1, char *s2) -@{ +concat (s1, s2) /* Name starts in column one here */ + char *s1, *s2; +@{ /* Open brace in column one here */ @dots{} @} @end example @@ -2264,7 +2427,13 @@ page. The formfeeds should appear alone on lines by themselves. @cindex commenting Every program should start with a comment saying briefly what it is for. -Example: @samp{fmt - filter for simple filling of text}. +Example: @samp{fmt - filter for simple filling of text}. This comment +should be at the top of the source file containing the @samp{main} +function of the program. + +Also, please write a brief comment at the start of each source file, +with the file name and a line or two about the overall purpose of the +file. Please write the comments in a GNU program in English, because English is the one language that nearly all programmers in all countries can @@ -2383,7 +2552,7 @@ functions. @cindex temporary variables It used to be common practice to use the same local variables (with names like @code{tem}) over and over for different values within one -function. Instead of doing this, it is better declare a separate local +function. Instead of doing this, it is better to 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 @@ -2476,8 +2645,9 @@ 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 @code{if}-conditions. For example, -don't write this: +Try to avoid assignments inside @code{if}-conditions (assignments +inside @code{while}-conditions are ok). For example, don't write +this: @example if ((foo = (char *) malloc (sizeof *foo)) == 0) @@ -2542,7 +2712,7 @@ constants. @cindex file-name limitations @pindex doschk 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 +if the files were loaded onto an MS-DOS file system which shortens the names. You can use the program @code{doschk} to test for this. Some GNU programs were designed to limit themselves to file names of 14 @@ -2584,11 +2754,20 @@ Avoid using the format of semi-internal data bases (e.g., directories) when there is a higher-level alternative (@code{readdir}). @cindex non-@sc{posix} systems, and portability -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. +As for systems that are not like Unix, such as MSDOS, Windows, VMS, MVS, +and older Macintosh systems, 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. + +If you do support Windows, please do not abbreviate it as ``win''. In +hacker terminology, calling something a ``win'' is a form of praise. +You're free to praise Microsoft Windows on your own if you want, but +please don't do this in GNU packages. Instead of abbreviating +``Windows'' to ``un'', you can write it in full or abbreviate it to +``woe'' or ``w''. In GNU Emacs, for instance, we use @samp{w32} in +file names of Windows-specific files, but the macro for Windows +conditionals is called @code{WINDOWSNT}. It is a good idea to define the ``feature test macro'' @code{_GNU_SOURCE} when compiling your C files. When you compile on GNU @@ -2624,7 +2803,7 @@ printf ("diff = %ld\n", (long) (pointer2 - pointer1)); @end example 1989 Standard C requires this to work, and we know of only one -counterexample: 64-bit programs on Microsoft Windows IA-64. We will +counterexample: 64-bit programs on Microsoft Windows. We will leave it to those who want to port GNU programs to that environment to figure out how to do it. @@ -2640,41 +2819,67 @@ machines. Thus, don't make the following mistake: @example int c; @dots{} -while ((c = getchar()) != EOF) - write(file_descriptor, &c, 1); +while ((c = getchar ()) != EOF) + write (file_descriptor, &c, 1); @end example -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. +@noindent Instead, use @code{unsigned char} as follows. (The @code{unsigned} +is for portability to unusual systems where @code{char} is signed and +where there is integer overflow checking.) -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 @code{printf} and friends: +@example +int c; +while ((c = getchar ()) != EOF) + @{ + unsigned char u = c; + write (file_descriptor, &u, 1); + @} +@end example + +It used to be ok to not worry about the difference between pointers +and integers when passing arguments to functions. However, on most +modern 64-bit machines pointers are wider than @code{int}. +Conversely, integer types like @code{long long int} and @code{off_t} +are wider than pointers on most modern 32-bit machines. Hence it's +often better nowadays to use prototypes to define functions whose +argument types are not trivial. + +In particular, if functions accept varying argument counts or types +they should be declared using prototypes containing @samp{...} and +defined using @file{stdarg.h}. For an example of this, please see the +@uref{http://www.gnu.org/software/gnulib/, Gnulib} error module, which +declares and defines the following function: @example -error (s, a1, a2, a3) - char *s; - char *a1, *a2, *a3; -@{ - fprintf (stderr, "error: "); - fprintf (stderr, s, a1, a2, a3); -@} +/* Print a message with `fprintf (stderr, FORMAT, ...)'; + if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). + If STATUS is nonzero, terminate the program with `exit (STATUS)'. */ + +void error (int status, int errnum, const char *format, ...); @end example -@noindent -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 @emph{not} to use a prototype for such -functions. +A simple way to use the Gnulib error module is to obtain the two +source files @file{error.c} and @file{error.h} from the Gnulib library +source code repository at +@uref{http://savannah.gnu.org/cgi-bin/viewcvs/gnulib/gnulib/lib/}. +Here's a sample use: + +@example +#include "error.h" +#include +#include -If you have decided to use Standard C, then you can instead define -@code{error} using @file{stdarg.h}, and pass the arguments along to -@code{vfprintf}. +char *program_name = "myprogram"; + +FILE * +xfopen (char const *name) +@{ + FILE *fp = fopen (name, "r"); + if (! fp) + error (1, errno, "cannot read %s", name); + return fp; +@} +@end example @cindex casting pointers to integers Avoid casting pointers to integers if you can. Such casts greatly @@ -2843,7 +3048,7 @@ Using GNU gettext in a package involves specifying a @dfn{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, @samp{fileutils} for the GNU file utilities. +package---for example, @samp{coreutils} for the GNU core utilities. @cindex message text, and internationalization To enable gettext to work well, avoid writing code that makes @@ -2855,13 +3060,61 @@ sentence framework. Here is an example of what not to do: +@smallexample +printf ("%s is full", capacity > 5000000 ? "disk" : "floppy disk"); +@end smallexample + +If you apply gettext to all strings, like this, + +@smallexample +printf (gettext ("%s is full"), + capacity > 5000000 ? gettext ("disk") : gettext ("floppy disk")); +@end smallexample + +@noindent +the translator will hardly know that "disk" and "floppy disk" are meant to +be substituted in the other string. Worse, in some languages (like French) +the construction will not work: the translation of the word "full" depends +on the gender of the first part of the sentence; it happens to be not the +same for "disk" as for "floppy disk". + +Complete sentences can be translated without problems: + +@example +printf (capacity > 5000000 ? gettext ("disk is full") + : gettext ("floppy disk is full")); +@end example + +A similar problem appears at the level of sentence structure with this +code: + +@example +printf ("# Implicit rule search has%s been done.\n", + f->tried_implicit ? "" : " not"); +@end example + +@noindent +Adding @code{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 +@code{gettext} calls does the job straightforwardly if the code starts +out like this: + +@example +printf (f->tried_implicit + ? "# Implicit rule search has been done.\n", + : "# Implicit rule search has not been done.\n"); +@end example + +Another example is this one: + @example printf ("%d file%s processed", nfiles, nfiles != 1 ? "s" : ""); @end example @noindent -The problem with that example is that it assumes that plurals are made +The problem with this example is that it assumes that plurals are made by adding `s'. If you apply gettext to the format string, like this, @example @@ -2871,49 +3124,81 @@ printf (gettext ("%d file%s processed"), nfiles, @noindent the message can use different words, but it will still be forced to use -`s' for the plural. Here is a better way: +`s' for the plural. Here is a better way, with gettext being applied to +the two strings independently: @example -printf ((nfiles != 1 ? "%d files processed" - : "%d file processed"), +printf ((nfiles != 1 ? gettext ("%d files processed") + : gettext ("%d file processed")), nfiles); @end example @noindent -This way, you can apply gettext to each of the two strings -independently: +But this still doesn't work for languages like Polish, which has three +plural forms: one for nfiles == 1, one for nfiles == 2, 3, 4, 22, 23, 24, ... +and one for the rest. The GNU @code{ngettext} function solves this problem: @example -printf ((nfiles != 1 ? gettext ("%d files processed") - : gettext ("%d file processed")), +printf (ngettext ("%d files processed", "%d file processed", nfiles), nfiles); @end example -@noindent -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: +@node Character Set +@section Character Set +@cindex character set +@cindex encodings +@cindex ASCII characters +@cindex non-ASCII characters -@example -printf ("# Implicit rule search has%s been done.\n", - f->tried_implicit ? "" : " not"); -@end example +Sticking to the ASCII character set (plain text, 7-bit characters) is +preferred in GNU source code comments, text documents, and other +contexts, unless there is good reason to do something else because of +the application domain. For example, if source code deals with the +French Revolutionary calendar, it is OK if its literal strings contain +accented characters in month names like ``Flor@'eal''. Also, it is OK +to use non-ASCII characters to represent proper names of contributors in +change logs (@pxref{Change Logs}). -@noindent -Adding @code{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 -@code{gettext} calls does the job straightfowardly if the code starts -out like this: +If you need to use non-ASCII characters, you should normally stick with +one encoding, as one cannot in general mix encodings reliably. + + +@node Quote Characters +@section Quote Characters +@cindex quote characters +@cindex locale-specific quote characters +@cindex left quote +@cindex grave accent + +In the C locale, GNU programs should stick to plain ASCII for quotation +characters in messages to users: preferably 0x60 (@samp{`}) for left +quotes and 0x27 (@samp{'}) for right quotes. It is ok, but not +required, to use locale-specific quotes in other locales. + +The @uref{http://www.gnu.org/software/gnulib/, Gnulib} @code{quote} and +@code{quotearg} modules provide a reasonably straightforward way to +support locale-specific quote characters, as well as taking care of +other issues, such as quoting a filename that itself contains a quote +character. See the Gnulib documentation for usage details. + +In any case, the documentation for your program should clearly specify +how it does quoting, if different than the preferred method of @samp{`} +and @samp{'}. This is especially important if the output of your +program is ever likely to be parsed by another program. + +Quotation characters are a difficult area in the computing world at +this time: there are no true left or right quote characters in Latin1; +the @samp{`} character we use was standardized there as a grave +accent. Moreover, Latin1 is still not universally usable. + +Unicode contains the unambiguous quote characters required, and its +common encoding UTF-8 is upward compatible with Latin1. However, +Unicode and UTF-8 are not universally well-supported, either. + +This may change over the next few years, and then we will revisit +this. -@example -printf (f->tried_implicit - ? "# Implicit rule search has been done.\n", - : "# Implicit rule search has not been done.\n"); -@end example @node Mmap @section Mmap @@ -2949,7 +3234,7 @@ extending it, as well as just using it. * Manual Credits:: Giving credit to documentation contributors. * Printed Manuals:: Mentioning the printed manual. * NEWS File:: NEWS files supplement manuals. -* Change Logs:: Recording Changes +* Change Logs:: Recording changes. * Man Pages:: Man pages are secondary. * Reading other Manuals:: How far you can go in learning from other manuals. @@ -2971,20 +3256,26 @@ 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 +Make sure your manual is clear to a reader who knows nothing about the +topic and reads it straight through. This means covering basic topics +at the beginning, and advanced topics only later. This also means +defining every specialized term when it is first used. + +Programmers tend to carry over the structure of the program as the +structure for its documentation. But this structure is not +necessarily good for explaining how to use the program; it may be +irrelevant and confusing for a user. + +Instead, the right way to structure documentation is according to the +concepts and questions that a user will have in mind when reading it. +This principle applies at every level, from the lowest (ordering +sentences in a paragraph) to the highest (ordering of chapter topics +within the manual). 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. +often they are different. An important part of learning to write good +documentation is to learn to notice when you have unthinkingly +structured the documentation like the implementation, stop yourself, +and look for 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 @@ -3000,10 +3291,13 @@ 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. +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. Don't just tell the reader what each feature can +do---say what jobs it is good for, and show how to use it for those +jobs. Explain what is recommended usage, and what kinds of usage +users should avoid. 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, @@ -3030,9 +3324,9 @@ 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 -@ref{Index Entries, , Making Index Entries, texinfo, The GNU Texinfo -Manual}, and see @ref{Indexing Commands, , Defining the Entries of an -Index, texinfo, The GNU Texinfo manual}. +@ref{Index Entries, , Making Index Entries, texinfo, GNU Texinfo}, and +see @ref{Indexing Commands, , Defining the Entries of an +Index, texinfo, GNU Texinfo}. 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 @@ -3041,15 +3335,19 @@ 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 @emph{in the manual}. +bugs @emph{in the text of 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. +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 prohibited by law. + +Please do not write @samp{()} after a function name just to indicate +it is a function. @code{foo ()} is not a function, it is a function +call with no arguments. @node Doc Strings and Manuals @section Doc Strings and Manuals @@ -3072,7 +3370,7 @@ 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 +redundancy 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 @@ -3092,7 +3390,7 @@ Each program documented in the manual should have a node named @samp{@var{program} Invocation} or @samp{Invoking @var{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 @samp{@@example} +would look for in a man page). Start with an @samp{@@example} containing a template for all the options and arguments that the program uses. @@ -3176,10 +3474,10 @@ 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:: +* Change Log Concepts:: +* Style of Change Logs:: +* Simple Changes:: +* Conditional Changes:: * Indicating the Part Changed:: @end menu @@ -3210,6 +3508,11 @@ 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. +In the past, we recommended not mentioning changes in non-software +files (manuals, help files, etc.) in change logs. However, we've been +advised that it is a good idea to include them, for the sake of +copyright records. + However, sometimes it is useful to write one line to describe the overall purpose of a batch of changes. @@ -3224,9 +3527,9 @@ Then describe the changes you made to that function or variable. @cindex change logs, style 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.) +header line that says who made the change and when it was installed, +followed by descriptions of specific changes. (These examples are +drawn from Emacs and GCC.) @example 1998-08-17 Richard Stallman @@ -3270,6 +3573,27 @@ Break long lists of function names by closing continued lines with (Fexecute_extended_command): Deal with `keymap' property. @end example +When you install someone else's changes, put the contributor's name in +the change log entry rather than in the text of the entry. In other +words, write this: + +@example +2002-07-14 John Doe + + * sewing.c: Make it sew. +@end example + +@noindent +rather than this: + +@example +2002-07-14 Usual Maintainer + + * sewing.c: Make it sew. Patch by jdoe@@gnu.org. +@end example + +As for the date, that should be the date you applied the change. + @node Simple Changes @subsection Simple Changes @@ -3291,12 +3615,17 @@ 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. +There's no technical 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. + +However, you should keep change logs for documentation files when the +project gets copyright assignments from its contributors, so as to +make the records of authorship more accurate. @node Conditional Changes @subsection Conditional Changes @@ -3387,6 +3716,25 @@ 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. +Be sure that man pages include a copyright statement and free +license. The simple all-permissive license is appropriate for simple +man pages: + +@example +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. +@end example + +For long man pages, with enough explanation and documentation that +they can be considered true manuals, use the GFDL (@pxref{License for +Manuals}). + +Finally, the GNU help2man program +(@uref{http://www.gnu.org/software/help2man/}) is one way to automate +generation of a man page, in this case from @option{--help} output. +This is sufficient in many cases. + @node Reading other Manuals @section Reading other Manuals @@ -3415,9 +3763,9 @@ 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 +* Configuration:: How configuration of GNU packages should work. +* Makefile Conventions:: Makefile conventions. +* Releases:: Making releases @end menu @node Configuration @@ -3486,23 +3834,31 @@ this: @var{cpu}-@var{company}-@var{system} @end example -For example, a Sun 3 might be @samp{m68k-sun-sunos4.1}. +For example, an Athlon-based GNU/Linux system might be +@samp{i686-pc-linux-gnu}. The @code{configure} script needs to be able to decode all plausible -alternatives for how to describe a machine. Thus, @samp{sun3-sunos4.1} -would be a valid alias. For many programs, @samp{vax-dec-ultrix} would -be an alias for @samp{vax-dec-bsd}, simply because the differences -between Ultrix and @sc{bsd} are rarely noticeable, but a few programs -might need to distinguish them. -@c Real 4.4BSD now runs on some Suns. - -There is a shell script called @file{config.sub} that you can use -as a subroutine to validate system types and canonicalize aliases. +alternatives for how to describe a machine. Thus, +@samp{athlon-pc-gnu/linux} would be a valid alias. There is a shell +script called +@uref{http://savannah.gnu.org/@/cgi-bin/@/viewcvs/@/*checkout*/@/config/@/config/@/config.sub, +@file{config.sub}} that you can use as a subroutine to validate system +types and canonicalize aliases. + +The @code{configure} script should also take the option +@option{--build=@var{buildtype}}, which should be equivalent to a +plain @var{buildtype} argument. For example, @samp{configure +--build=i686-pc-linux-gnu} is equivalent to @samp{configure +i686-pc-linux-gnu}. When the build type is not specified by an option +or argument, the @code{configure} script should normally guess it using +the shell script +@uref{http://savannah.gnu.org/@/cgi-bin/@/viewcvs/@/*checkout*/@/config/@/config/@/config.guess, +@file{config.guess}}. @cindex optional features, configure-time 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: +or hardware present on the machine, to include or exclude optional parts +of the package, or to adjust the name of some tools or arguments to them: @table @samp @item --enable-@var{feature}@r{[}=@var{parameter}@r{]} @@ -3535,14 +3891,32 @@ and Do not use a @samp{--with} option to specify the file name to use to find certain files. That is outside the scope of what @samp{--with} options are for. + +@item @var{variable}=@var{value} +Set the value of the variable @var{variable} to @var{value}. This is +used to override the default values of commands or arguments in the +build process. For example, the user could issue @samp{configure +CFLAGS=-g CXXFLAGS=-g} to build with debugging information and without +the default optimization. + +Specifying variables as arguments to @code{configure}, like this: +@example +./configure CC=gcc +@end example +is preferable to setting them in environment variables: +@example +CC=gcc ./configure +@end example +as it helps to recreate the same configuration later with +@file{config.status}. @end table -All @code{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 @samp{--with-} or @samp{--enable-}. This is so users will -be able to configure an entire GNU source tree at once with a single set -of options. +All @code{configure} scripts should accept all of the ``detail'' +options and the variable settings, whether or not they make any +difference to the particular package at hand. In particular, they +should accept any option that starts with @samp{--with-} or +@samp{--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 @samp{--with-} and @samp{--enable-} are narrow: they @strong{do not} provide a place for any sort of option @@ -3558,6 +3932,11 @@ The @code{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 compile a program to run on a host type that differs from the build +type, use the configure option @option{--host=@var{hosttype}}, where +@var{hosttype} uses the same syntax as @var{buildtype}. The host type +normally defaults to the build type. + To configure a cross-compiler, cross-assembler, or what have you, you should specify a target different from the host, using the configure option @samp{--target=@var{targettype}}. The syntax for @@ -3565,22 +3944,14 @@ option @samp{--target=@var{targettype}}. The syntax for look like this: @example -./configure @var{hosttype} --target=@var{targettype} +./configure --host=@var{hosttype} --target=@var{targettype} @end example +The target type normally defaults to the host type. Programs for which cross-operation is not meaningful need not accept the @samp{--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 @samp{--build=@var{buildtype}} for specifying the -configuration on which you will compile them, but the configure script -should normally guess the build machine type (using -@file{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 @code{configure} script can simply ignore most of its arguments. @@ -3596,6 +3967,10 @@ ignore most of its arguments. @section Making Releases @cindex packaging +You should identify each release with a pair of version numbers, a +major version and a minor. We have no objection to using more than +two numbers, but it is very unlikely that you really need them. + Package the distribution of @code{Foo version 69.96} up in a gzipped tar file with the name @file{foo-69.96.tar.gz}. It should unpack into a subdirectory named @file{foo-69.96}. @@ -3644,13 +4019,6 @@ 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 @sc{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 @@ -3682,16 +4050,29 @@ other files to get. 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 +other people from using them, but we can and should refuse 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. +The GNU definition of free software is found on the GNU web site at +@url{http://www.gnu.org/philosophy/free-sw.html}, and the definition +of free documentation is found at +@url{http://www.gnu.org/philosophy/free-doc.html}. A list of +important licenses and whether they qualify as free is in +@url{http://www.gnu.org/@/licenses/@/license-list.html}. The terms +``free'' and ``non-free'', used in this document, refer to that +definition. If it is not clear whether a license qualifies as free +under this definition, please ask the GNU Project by writing to +@email{licensing@@gnu.org}. We will answer, and if the license is an +important one, we will add it to the list. + 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. +how to build your package on top of some widely used 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 @@ -3700,8 +4081,8 @@ 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. +program with it, 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 @@ -3709,34 +4090,78 @@ 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.) +Sometimes a program is free software in itself but depends on a +non-free platform in order to run. For instance, many Java programs +depend on the parts of Sun's Java implementation which are not yet +free software, and won't run on the GNU Java Compiler (which does not +yet have all the features) or won't run with the GNU Java libraries. +We hope this particular problem will be gone in a few months, when Sun +makes the standard Java libraries free software, but of course the +general principle remains: you should not recommend programs that +depend on non-free software to run. + +Some free programs encourage the use of non-free software. A typical +example is @command{mplayer}. It is free software in itself, and the +free code can handle some kinds of files. However, @command{mplayer} +recommends use of non-free codecs for other kinds of files, and users +that install @command{mplayer} are very likely to install those codecs +along with it. To recommend @command{mplayer} is, in effect, to +recommend the non-free codecs. We must not do that, so we cannot +recommend @command{mplayer} either. + +In general, you should also not recommend programs that themselves +strongly recommend the use of non-free software. + 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. +operating systems is essential for completing the GNU system, or any +free operating 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 weaken the impetus for the community to produce documentation +that we can include. So GNU packages should never recommend non-free +documentation. -@node Copying This Manual -@appendix Copying This Manual +By contrast, it is ok to refer to journal articles and textbooks in +the comments of a program for explanation of how it functions, even +though they be non-free. This is because we don't include such things +in the GNU system even if we are allowed to---they are outside the +scope of an operating system project. -@menu -* GNU Free Documentation License:: License for copying this manual -@end menu +Referring to a web site that describes or recommends a non-free +program is in effect promoting that software, so please do not make +links (or mention by name) web sites that contain such material. This +policy is relevant particularly for the web pages for a GNU package. + +Following links from nearly any web site can lead to non-free +software; this is an inescapable aspect of the nature of the web, and +in itself is no objection to linking to a site. As long as the site +does not itself recommend a non-free program, there is no need be +concerned about the sites it links to for other reasons. +Thus, for example, you should not make a link to AT&T's web site, +because that recommends AT&T's non-free software packages; you should +not make a link to a site that links to AT&T's site saying it is a +place to get a non-free program; but if a site you want to link to +refers to AT&T's web site in some other context (such as long-distance +telephone service), that is not a problem. + + +@node GNU Free Documentation License +@appendix GNU Free Documentation License + +@cindex FDL, GNU Free Documentation License @include fdl.texi @node Index @unnumbered Index @printindex cp -@contents - @bye -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c time-stamp-start: "@set lastupdate " -@c time-stamp-end: "$" -@c time-stamp-format: "%:b %:d, %:y" -@c compile-command: "make just-standards" -@c End: + +Local variables: +eval: (add-hook 'write-file-hooks 'time-stamp) +time-stamp-start: "@set lastupdate " +time-stamp-end: "$" +time-stamp-format: "%:b %:d, %:y" +compile-command: "make just-standards" +End: diff --git a/gas/ChangeLog b/gas/ChangeLog index 9fd2d9d..eb6cd26 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,1513 +1,2299 @@ -2007-08-28 Robert Sebastian Gerus - - * configure.tgt: Add support for i[3-7]86-*-dragonfly*. - -2007-08-24 Joseph Myers - Paul Brook - - * remap.c: New. - * as.h (remap_debug_filename, add_debug_prefix_map): Declare. - * as.c (show_usage): Document --debug-prefix-map option. - (parse_args): Handle --debug-prefix-map. - * dwarf2dbg.c (out_file_list, out_debug_info): Remap debug paths. - * stabs.c (stabs_generate_asm_file): Remap debug paths. - * Makefile.am (GAS_CFILES): Add remap.c - (GENERIC_OBJS): Add remap.o. - Regenerate dependencies. - * Makefile.in: Regenerate. - * doc/as.texinfo (--debug-prefix-map): Document. +2009-10-13 Alan Modra + H.J. Lu -2007-08-24 Aurelien Jarno + PR gas/2117 + * config/tc-ia64.c (parse_operand): Use expression rather than + expression_and_evalute. + (parse_operand_and_eval): New function. Replace all uses of + parse_operand outside of parse_operands with this function. + (parse_operans_maybe_eval): New function. Replace uses of + parse_operand in parse_operands, except for the dummy, with + this function. - * config/tc-arm.c (md_apply_fix): Cast bfd_vma values to long - before printing them. +2009-10-06 Alan Modra -2007-08-24 Anders Waldenborg - Alan Modra + PR gas/10704 + * symbols.c (snapshot_symbol): Revert 2006-01-09 patch for PR2117. - * config/tc-i386.c (lex_got): Don't scan past a comma. +2009-10-06 Alan Modra -2007-08-23 Ben Elliston + * read.c (s_reloc): Don't use expression_and_evaluate. + +2009-10-06 Jakub Jelinek + + * dw2gencfi.c: Include dwarf2dbg.h. + (DWARF2_FORMAT): Define if not defined. + (dot_cfi_sections): New function. + (cfi_pseudo_table): Handle .cfi_sections. + (CFI_EMIT_eh_frame, CFI_EMIT_debug_frame): Define. + (cfi_sections): New variable. + (output_cie, output_fde, select_cie_for_fde): Add eh_frame + argument, add supporting for outputting .debug_frame + section. + (cfi_change_reg_numbers): New function or macro. + (cfi_finish): Only emit .eh_frame if + cfi_sections & CFI_EMIT_eh_frame. Emit .debug_frame if + cfi_sections & CFI_EMIT_debug_frame. + * config/tc-ppc.h (md_reg_eh_frame_to_debug_frame): Define. + * doc/as.texinfo (CFI directives): Document .cfi_sections. + +2009-10-02 Peter Bergner + + * config/tc-ppc.c (md_show_usage): Document -m476. + * doc/c-ppc.texi (PowerPC-Opts): Document -m476. + +2009-10-01 Peter Bergner - * doc/c-arm.texi (ARM Directives): Move brackets out of @vars. + * config/tc-ppc.c (md_show_usage): Rename "ppca2" to "a2". + * doc/c-ppc.texi (PowerPC-Opts): Likewise. -2007-08-17 Alan Modra +2009-09-25 Nick Hudson - * po/Make-in: Add --msgid-bugs-address to xgettext invocation. + * doc/c-mips.texi: Fix the singlefloat and doublefloat kindex + entries. -2007-08-12 Matthias Klose +2009-09-23 Tim E. Sneddon - * doc/Makefile.am (AM_MAKEINFOFLAGS, TEXI2DVI): Include - $(top_srcdir)/../../bfd/doc. - * doc/Makefile.in: Regenerate. + * configure.com: Fix a typo. -2007-08-10 Nick Clifton +2009-09-23 Alan Modra - * NEWS: Add a marker for the 2.18 features. + * symbols.c (define_sym_at_dot): New function, extracted from.. + (colon): ..here. Define error case cloned symbol. -2007-08-09 H.J. Lu +2009-09-21 Richard Sandiford - * config/tc-i386.c (check_byte_reg): Support pextrb and pinsrb. + * config/tc-mips.c (MIPS_JALR_HINT_P): Take an expr argument. + Require the target to be a bare symbol on targets with + in-place addends. + (macro_build_jalr): Update accordingly. + (mips_fix_adjustable): Don't reduce R_MIPS_JALRs on targets + with in-place addends. -2007-07-29 H.J. Lu +2009-09-21 Ben Elliston + Peter Bergner - * config/tc-i386.c (check_long_reg): Allow cvtss2si to convert - DWORD memory to Reg64 in Intel synax. - (check_qword_reg): Allow cvtsd2si to convert QWORD memory to - Reg32 in Intel syntax. + * config/tc-ppc.c (md_show_usage): Document -mpcca2. + * doc/c-ppc.texi (PowerPC-Opts): Document -mppca2. -2007-07-25 Sterling Augustine +2009-09-18 Nick Clifton - * config/tc-xtensa.c (xtensa_extui_opcode): New. - (xg_expand_assembly_insn): Check for invalid extui operands. - (md_begin): Initialize xtensa_extui_opcode. + * po/es.po: Updated Spanish translation. -2007-07-24 Nick Clifton +2009-09-15 Tristan Gingold - * config/tc-mep.h (skip_whitespace): Remove definition. + * makefile.vms (OBJS): Compile te-vms.c only on Itanium. -2007-07-23 H.J. Lu +2009-09-11 Nick Clifton + + * po/gas.pot: Updated by the Translation project. + +2009-09-11 Martin Thuresson + + Updated sources to compile cleanly with -Wc++-compat: + * app.c: Add casts. + * as.c: Add casts. + * config/obj-elf.c: Add casts. + (obj_elf_type): Rename variable typename to type_name. + * config/tc-i386-intel.c (i386_operators): Rename member operator to op. + * config/tc-i386.c: Add casts. + (check_cpu_arch_compatible): Rename argument new to new_flag. + (gotrel): Update variable to use enum name instead of integer value. + * dw2gencfi.c: Add casts. + (struct cfi_escape_data): Move to top level. + * dwarf2dbg.c: Add cast. + * dwarf2dbg.h (dwarf2_loc_directive_seen): Make variable extern. + * ehopt.c Add casts. + (enum frame_state): Move to top level. + * expr.c (operatorf): Rename function operator to operatorf. + (operand): Rename variable operator to op. + (expr_set_rank): Rename argument operator to op. + * frags.c: Add cast. + * hash.c: Add casts. + * input-scrub.c: Add cast. + * listing.c: Add casts. + (enum edict_enum): Move to top level. + * macro.c: Add casts. + * macro.h (enum formal_type): Move to top level. + * read.c: Add casts. + (s_include): Rename variable try to try_file. + * remap.c: Add cast. + * stabs.c: Add casts. + * subsegs.c: Add casts. + * symbols.c: Add casts. + * write.c: Add casts. + +2009-09-11 Hans-Peter Nilsson + + PR gas/10623 + * config/tc-mmix.c (md_assemble) : + Allow register operands for SWYM as for TRIP and TRAP. Correct + operand handling and error checking. Never emit + BFD_RELOC_MMIX_REG_OR_BYTE for operands to these insns. - * config/tc-i386.c (cpu_arch): Change i386 to PROCESSOR_I386. - (f32_15): Removed. - (jump_31): New. - (f32_patt): Remove f32_15. - (f16_patt): Likewise. - (i386_align_code): Updated to alt_long_patt for 64bit by - default. - - * config/tc-i386.h (processor_type): Add PROCESSOR_I386. - -2007-07-23 Evandro Menezes - - * config/tc-i386.c (i386_align_code): Enable alignment up to - MAX_MEM_FOR_RS_ALIGN_CODE bytes. Remove special treatment - for K8. - - * config/tc-i386.h (MAX_MEM_FOR_RS_ALIGN_CODE): Changed to 31. - -2007-07-20 Nick Clifton - - * app.c (do_scrub_chars): Provide a one character buffer to hold a - pushed back newline at the end of an unterminated quoted string. - -2007-07-14 Nick Clifton - - * config/tc-arm.c (create_register_alias): Return a boolean rather - than an integer. - Check the return value of insert_reg_alias and do not continue to - create aliases once an insertion has failed. - (s_unreq): Delete the all-upper-case and all-lower-case - alternatives as well. - -2007-07-12 Kai Tietz - - * symbols.c: Print bfd_hostptr_t to file via fprintf_vma. - * write.c: Likewise. - -2007-07-11 Daniel Jacobowitz - - * config/tc-mips.c (mips_dwarf2_format, mips_dwarf2_addr_size): Use - HAVE_64BIT_SYMBOLS. - -2007-07-04 Richard Sandiford - - * config/tc-mips.c (mips_cpu_info_table): Add new entries for - {24k,24ke,34k,74k}f{2_1,1_1,x}. Also add an entry for 74kf3_2. - Deprecate *x and *fx. - * doc/c-mips.texi: Document the new CPU arguments. Deprecate - *x and *fx. - -2007-07-04 H.J. Lu - - * config/obj-coff.h (x86_64_target_format): Renamed to ... - (i386_target_format): This - (TARGET_FORMAT): Use i386_target_format. - - * config/tc-i386.c (x86_64_target_format): Removed. - (i386_target_format): Handle PE formats. - -2007-07-04 Nick Clifton - - * symbols.c (symbol_relc_make_value): Use bfd_sprintf_vma in order - to get the right length of printed value. - -2007-07-03 Nick Clifton - - * COPYING: Replace with GPLv3 text. - * app.c: Update copyright notice to refer to GPLv3. - * as.c, as.h, asintl.h, atof_generic.c, bignum.h, bit_fix.h, - cgen.c, cond.c, debug.c, depend.c, dw2gencfi.c, dw2gencfi.h, - dwarf2dbg.c, dwarf2dbg.h, ecoff.c, ecoff.h, ehopt.c, emul.h, - emul_target.h, expr.c, expr.h, flonum-copy.c, flonum.h, - flonum-konst.c, frags.c, frags.h, hash.c, hash.h, input-file.c, - input-file.h, input-scrub.c, ibtl-lex.h, itbl-lex.l, itbl-ops.c, - itbl-ops.h, itbl-parse.y, listing.c, listing.h, literal.c, - macro.c, messages.c, obj.h, output-file.c, output-file.h, read.c, - read.h, sb.c, sb,h, stabs.c, struc-symbol.h, subsegs.c, subsegs.h, - symbols.c, symbols.h, tc.h, write.c, write.h, config/aout_gnu.h, - config/config/atof-ieee.c, config/atof-vax.c, config/bfin-aux.h, - config/bfin-defs.h, config/bfin-lex.l, config/bfin-parse.y, - config/itbl-mips.h, config/m68k-parse.h, config/m68k-parse.y, - config/obj-aout.c, config/obj-aout.h, config/obj-coff.c, - config/obj-coff.h, config/obj-ecoff.c, config/obj-ecoff.h, - config/obj-elf.c, config/obj-elf.h, config/obj-evax.c, - config/obj-evax.h, config/obj-multi.h, config/obj-som.c, - config/obj-som.h, config/tc-alpha.c, config/tc-alpha.h, - config/tc-arc.c, config/tc-arc.h, config/tc-arm.c, - config/tc-arm.h, 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, config/tc-crx.h, config/tc-d10v.c, - config/tc-d10v.h, config/tc-d30v.c, config/tc-d30v.h, - config/tc-dlx.c, config/tc-dlx.h, config/tc-fr30.c, - config/tc-fr30.h, config/tc-frv.c, config/tc-frv.h, - config/tc-generic.c, config/tc-generic.h, config/tc-h8300.c, - config/tc-h8300.h, config/tc-hppa.c, config/tc-hppa.h, - config/tc-i370.c, config/tc-i370.h, config/tc-i386.c, - config/tc-i386.h, config/tc-i860.c, config/tc-i860.h, - config/tc-i960.c, config/tc-i960.h, config/tc-ia64.c, - config/tc-ia64.h, config/tc-ip2k.c, config/tc-ip2k.h, - config/tc-iq2000.c, config/tc-iq2000.h, config/tc-m32c.c, - config/tc-m32c.h, config/tc-m32r.c, config/tc-m32r.h, - config/tc-m68hc11.c, config/tc-m68hc11.h, config/tc-m68k.c, - config/tc-m68k.h, config/tc-maxq.c, config/tc-maxq.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, config/tc-mmix.h, config/tc-mn10200.c, - config/tc-mn10200.h, config/tc-mn10300.c, config/tc-mn10300.h, - config/tc-msp430.c, config/tc-msp430.h, config/tc-mt.c, - config/tc-mt.h, config/tc-ns32k.c, config/tc-ms32k.h, - config/tc-openrisc.c, config/tc-openrisc.h, config/tc-or32.c, - config/tc-or32.h, config/tc-pdp11.c, config/tc-pdp11.h, - config/tc-pj.c, config/tc-pj.h, 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-tic4x.c, - config/tc-tic4x.h, config/tc-tic54x.c, config/tc-tic54x.h, - config/tc-v850.c, config/tc-v850.h, config/tc-vax.c, - config/tc-vax.h, config/tc-xc16x.c, config/tc-x16x.h, - config/tc-xstormy16.c, config/tc-xstormy16.h, config/tc-xtensa.c, - config/tc-xtensa.h, config/tc-z80.c, config/tc-z80.h, - config/tc-z8k.c, config/tc-z8k.h, config/te-386bsd.h, - config/te-freebsd.h, config/te-hppa.h, config/te-irix.h, - config/te-netware.h, config/te-sparcaout.h, config/te-tmips.h, - config/te-vxworks.h, config/vax-inst.h, config/xtensa-istack.h, - config/xtensa-relax.c, config/xtensa-relax.h: Likewise. - - * flonum-mult.c: Likewise, and also correct typo referring to - non-existant GNU Assembler General Public License. - * config/tc-m68851.h: Likewise. - * NEWS: Mention the new license. Also note where the 2.17 release - happened. - * config/e-crisaout.c: Add copyright header. - * config/e-criself.c, config/e-i386aout.c, config/e-i386coff.c, - config/e-i386elf.c, config/e-mipscoff.c, config/e-mipself.c, - config/obj-multi.c, config/te-aix5.h, config/te-armeabi.h, - config/te-armlinuxeabi.h, config/te-dynix.h, config/te-epoc-pe.h, - config/te-generic.h, config/te-gnu.h, config/te-go32.h, - config/te-hppa64.h, config/te-hppalinux64.h, config/te-hpux.h, - config/te-i386aix.h, config/te-ia64aix.h, config/te-interix.h, - config/te-linux.h, config/te-lnews.h, config/te-lynx.h, - config/te-mach.h, config/te-macos.h, config/te-nbsd532.h, - config/te-nbsd.h, config/te-pc532mach.h, config/te-pe.h, - config/te-pep.h, config/te-psos.h, config/te-riscix.h, - config/te-sun3.h, config/te-svr4.h, config/te-symbian.h, - config/te-wince-pe.h: Likewise. - -2007-07-03 Nathan Sidwell - - * 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. - -2007-07-03 Alan Modra - - 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. - -2007-07-03 Mikkel Lauritsen - - PR 4722 - * app.c (do_scrub_chars ): Check for output buffer full - after memcpy. - -2007-07-02 Joseph Myers - - * 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 +2009-09-10 Alan Modra - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerate. - * aclocal.m4: Regenerate. - * config.in: Regenerate. - * doc/Makefile.in: Regenerate. - * po/POTFILES.in: Regenerate. - * po/gas.pot: Regenerate. + * config/tc-d10v.c: Include dwarf2dbg.h. + (write_long, write_1_short, write_2_short): Call dwarf2_emit_insn. + (d10v_frob_label): New function. + * config/tc-d10v.h (d10v_frob_label): Declare. + (tc_frob_label): Define as d10v_frob_label. -2007-07-02 Alan Modra +2009-09-10 Alan Modra - * config/tc-ppc.c (ppc_pe_section): Comment out code assigning - coff section flag values to bfd section flag. + * config/tc-d30v.c (d30v_frob_label): Call dwarf2_emit_label. + * config/tc-frv.c (frv_frob_label): Likewise. -2007-06-30 H.J. Lu +2009-09-09 Alan Modra - * aclocal.m4: Regenerated. - * doc/Makefile.in: Likewise. - * Makefile.in: Likewise. + * config/obj-coff.h (USE_UNIQUE): Don't define. + * config/obj-coff.c (weak_uniquify): Use an_external_name when TE_PE. + * symbols.c (an_external_name): Define when TE_PE. + (S_SET_EXTERNAL): Assign an_external_name when TE_PE. + * tc.h (an_external_name): Declare when TE_PE. + + * config/tc-i386.c (i386_target_format): Avoid duplicate case label. + +2009-09-08 Kaz Kojima + + * configure.tgt (sh*-*-netbsdelf*): Set endian according to cpu. + +2009-09-08 Alan Modra + + * read.c (emit_expr_fix): Handle size 3. + * config/tc-avr.c (md_assemble): Call dwarf2_emit_insn. + * config/tc-d30v.c (write_long, write_1_short, + write_2_short, md_assemble): Likewise. + * config/tc-dlx.c (md_assemble): Likewise. + * config/tc-i860.c (md_assemble): Likewise. + * config/tc-mn10200.c (md_assemble): Likewise. + * config/tc-pj.c (md_assemble): Likewise. + * config/tc-vax.c (md_assemble): Likewise. + +2009-09-07 Tristan Gingold + + * po/gas.pot: Regenerate + * po/POTFILES.in: Regenerate + +2009-09-07 Tristan Gingold + + * Makefile.am (TARG_ENV_CFILES): New variable. Set to te-vms.c + (POTFILES): Add $(TARG_ENV_CFILES) in definition. + (EXTRA_as_new_SOURCES): Ditto. + * Makefile: Regenerate. + * acinclude.m4 (BFD_HAVE_TIME_TYPE_MEMBER, + BFD_HAVE_SYS_STAT_TYPE_MEMBER): New macro created from bfd/bfd.m4. + * configure.in: Add Tests for tm_gmtoff, st_mtim.tv_sec and + st_mtim.tv_nsec (from bfd/configure.in). Check for time.h and + sys/stat.h headers. + Add te-vms.o in extra_objects if te_file is vms. + * configure: Regenerate. + * config.in: Regenerate. + * config/te-vms.c: New file, from bfd/vmsutil.c + (vms_dwarf2_file_time_name, vms_dwarf2_file_size_name) + (vms_dwarf2_file_name): New functions. + (vms_file_stats_name): Make it static, add a dirname parameter to + locally create the full pathname. + * config/te-vms.h: Add a copyright header. + Declare the above functions. + (DWARF2_FILE_TIME_NAME, DWARF2_FILE_SIZE_NAME, DWARF2_FILE_NAME): Use + the above functions in the definition. + * makefile.vms (OBJS): Add te-vms.obj. + (te-vms.obj): Create a specific target. + * configure.com: Create targ-env.h using a per target value. + Compile te-vms.c for ia64. + +2009-09-05 Jie Zhang + + * doc/as.texinfo: Document that Blackfin GAS does not + accept SYMBOL = VALUE. + +2009-09-05 Martin Thuresson + + * config/tc-arc.c (struct syntax_classes): Rename member class + to s_class. (arc_extinst): Rename variable class to + s_class. Update code to use renamed members. + * config/tc-mips.c (insn_uses_reg): Rename argument class to + regclass. + * config/tc-ppc.c (ppc_csect, ppc_change_csect, ppc_function) + (ppc_tc, ppc_is_toc_sym, ppc_symbol_new_hook, ppc_frob_label) + (ppc_fix_adjustable, md_apply_fix): Update code to use renamed + members. + * config/tc-ppc.h (struct ppc_tc_sy): Change name of member + from class to symbol_class. (OBJ_COPY_SYMBOL_ATTRIBUTES): Update + code to use renamed members. + * config/tc-score.c (s3_adjust_paritybit): Rename argument + class to i_class. + * config/tc-score7.c (s7_adjust_paritybit): Rename argument + class to i_class. + +2009-09-04 Tristan Gingold + + * NEWS: Add marker for 2.20. + +2009-09-04 Jie Zhang + + * config/bfin-parse.y (asm_1): Implement HLT instruction. + Fix comments for DBGA, DBGAH and DBGAL. + * config/tc-bfin.c (bfin_gen_pseudodbg_assert): Change according + to the new encoding of DBGA, DBGAH, and DBGAL. + +2009-09-04 Jie Zhang + + * doc/all.texi: Replace BFIN with Blackfin. + * doc/as.texinfo: Likewise. + * doc/c-bfin.texi: Likewise. + * doc/asconfig.texi: Likewise. + + * doc/c-bfin.texi: Update -mcpu= option with bf512, bf514, + bf516 and bf518. + +2009-09-04 Jie Zhang + + * Makefile.am (bfin-parse.o): Remove bfin-parse.h from + the prerequisite. Add $(srcdir)/config/bfin-aux.h to the + prerequisite. + (bfin-defs.h, $(srcdir)/config/bfin-defs.h): Rename to ... + (bfin-parse.h, $(srcdir)/config/bfin-parse.h): ... these. + (bfin-lex.o): Add bfin-parse.h and $(srcdir)/config/bfin-defs.h + to the prerequisite. + * Makefile.in: Regenerate. -2007-06-29 Joseph Myers +2009-09-03 Ralf Wildenhues - * as.c (main): Only call create_obj_attrs_section if IS_ELF. + * Makefile.am (itbl-lex.o): Depend on itbl-parse.h. + (itbl-ops.o, itbl-tops.o): Likewise. + (itbl-parse.h): Use separate rule. + * Makefile.in: Regenerate. -2007-06-29 Joseph Myers +2009-09-03 Jie Zhang - * 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. + * config/tc-bfin.c (md_parse_option): Call as_fatal for bad + -mcpu= option. -2007-06-29 M R Swami Reddy +2009-09-03 Jie Zhang - * 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. + * config/bfin-lex.l: Remove V as STATUS_REG. -2007-06-26 Paul Brook +2009-09-03 Jie Zhang - * config/tc-arm.c (parse_operands): Accept generic coprocessor regs - for OP_RVC. - (reg_names): Add fpinst, pfinst2, mvfr0 and mvfr1. + * config/bfin-parse.y: Remove trailing whitespace. + (ccstat): Indent. + * config/tc-bfin.c (struct bfin_reg_entry): Remove. + (bfin_reg_info[]): Remove. -2007-06-25 H.J. Lu +2009-09-03 Jie Zhang - * config/tc-i386.c (process_operands): Replace regKludge - with RegKludge. + * config/bfin-defs.h (F_REG_ALL): Remove macro. + (F_REG_HIGH): Redefine. + (F_REG_NONE): New macro. + (F_REG_LOW): New macro. + (REG_CLASS): Enclose macro argument in parentheses when used. + (REG_EVEN): Likewise. + (IS_H): Use flags. + (IS_HCOMPL): Use flags. + * config/bfin-lex.l (SP.L, SP.H, FP.L, FP.H): Set flags. + (parse_reg): Set flags. + (parse_halfreg): Set flags. -2007-06-25 Richard Sandiford +2009-09-03 Jie Zhang - * 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. + * config/bfin-parse.y (gen_multi_instr_1): Check anomaly + 05000074 only when both slot1 and slot2 are filled. -2007-06-22 Sterling Augustine +2009-09-03 Jie Zhang - * 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 + * config/tc-bfin.c (md_assemble): Bump line counters if there is + EOL in the instruction. - * config/tc-i386.c (disp_size): New. - (imm_size): Likewise. - (output_disp): Use disp_size and imm_size. - (output_imm): Use imm_size. +2009-09-03 Jie Zhang -2007-06-19 Sterling Augustine + * config/bfin-defs.h (IS_GENREG): Define. + (IS_DAGREG): Define. + (IS_SYSREG): Define. + * config/bfin-parse.y (asm_1): Check illegal register move + instructions. - * 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. +2009-09-03 Jie Zhang -2007-06-14 Paul Brook + * config/bfin-parse.y (asm_1): Fix a typo. - * config/tc-arm.c (do_t_mov_cmp): Handle shift by register and - narrow shift by immediate. +2009-09-03 Jie Zhang -2007-06-14 H.J. Lu + * config/bfin-parse.y (asm_1): Add LOOP_BEGIN and LOOP_END. + * config/tc-bfin.c (bfin_start_line_hook): Remove. + (bfin_loop_beginend): New. + * config/tc-bfin.h (bfin_start_line_hook): Don't declare. + (md_start_line_hook): Don't define. + * config/bfin-aux.h (bfin_loop_beginend): Declare. - * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd. +2009-09-03 Tristan Gingold - * acinclude.m4: Don't include m4 files. - (BFD_BINARY_FOPEN): Removed. - Remove libtool kludge. + * config/tc-ia64.c (ia64_vms_note): Use lbasename instead of basename. + Call xstrdup on the result and free the buffer after use. - * Makefile.in: Regenerated. - * doc/Makefile.in: Likewise. - * aclocal.m4: Likewise. - * configure: Likewise. +2009-09-03 Tristan Gingold -2007-06-11 Sterling Augustine - Bob Wilson - - * 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 + * as.h (__PRETTY_FUNCTION__): Use the same definition as bfd/libbfd.h. - * config/tc-arm.c (s_align): Pad code sections appropriately. +2009-09-02 Jie Zhang -2007-06-05 Paul Brook + * config/bfin-parse.y (value_match): Use int instead of long. - * config/tc-arm.c (insns): Correct Thumb-2 ldrd/strd opcodes. + From Michael Frysinger + * config/bfin-defs.h (Expr_Node_Value): Declare the i_value + member as long long. -2007-06-05 Nick Clifton +2009-09-02 Jie Zhang - PR gas/4587 - * config/tc-sparc.c (sparc_ip): Terminate tls_ops array. + From Bernd Schmidt + * config/gas/bfin-parse.y (asm_1): Clean up and unify error handling + for load and store insns. + (neg_value): Delete function. -2007-06-05 Alan Modra +2009-09-01 Ralf Wildenhues - * 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. + * Makefile.am (m68k-parse.o, bfin-lex.o, itbl-lex.o, itbl-parse.o): + Supply correct source file name for generated files which may be + in $(srcdir). + * Makefile.in: Regenerate. -2007-05-31 Paul Brook +2009-09-01 H.J. Lu + + * version.c (parse_args): Change to "Copyright 2009". + +2009-09-01 Tristan Gingold + + * makefile.vms: Adjust include pathes. Remove useless vaxctrl + library. + * configure.com: Ported to Itanium VMS. Create build.com DCL script. + Make edit silent. + +2009-09-01 Jie Zhang + + * config/bfin-parse.y (asm_1): Only PREG and DREG are allowed + in comparison. + +2009-09-01 Jie Zhang + + 2007-09-28 Bernd Schmidt + * config/tc-bfin.c (bfin_fix_adjustable): Partially revert the + 2007-08-23 change; BFD_RELOC_BFIN_GOT is not adjustable. + + 2007-08-23 Jie Zhang + * config/tc-bfin.c (bfin_fix_adjustable): Adjust + BFD_RELOC_BFIN_GOT, BFD_RELOC_BFIN_GOT17M4 and + BFD_RELOC_BFIN_FUNCDESC_GOT17M4. + +2009-09-01 Jie Zhang + + * read.c (TC_START_LABEL): Add a new argument. + (read_a_source_file): Pass the beginning of the symbol through + the new argument of TC_START_LABEL. + * config/tc-arm.h (TC_START_LABEL): Add a new argument. + * config/tc-bfin.c (bfin_start_label): Only search '(' and '[' + from the beginning of the symbol. + * config/tc-bfin.h (TC_START_LABEL): Add the new argument. + * config/tc-d30v.h (TC_START_LABEL): Likewise. + * config/tc-fr30.h (TC_START_LABEL): Likewise. + * config/tc-m32c.h (TC_START_LABEL): Likewise. + * config/tc-m32r.h (TC_START_LABEL): Likewise. + * config/tc-mep.h (TC_START_LABEL): Likewise. + +2009-08-31 H.J. Lu + + PR gas/10570 + * write.c (write_object_file): Revert the accidental change + made in revision 1.124 on 2009-08-17. + +2009-08-31 Jan Beulich + + * config/obj-elf.c (obj_elf_change_section): Set default type + by calling bfd_elf_get_default_section_type. + +2009-08-31 Jie Zhang + + * config/bfin-aux.h: Change format from DOS to UNIX. + +2009-08-29 Martin Thuresson + + * config/tc-arm.c (struct asm_cond, struct asm_psr, struct + asm_barrier_opt): Change member template to + template_name. (md_begin): Update code to reflect new member + names. + * config/tc-i386.c (struct templates, struct _i386_insn) + (match_template, cpu_flags_match, match_reg_size, match_mem_size) + (operand_size_match, md_begin, i386_print_statistics, pi) + (build_vex_prefix, md_assemble, parse_insn, optimize_imm) + (optimize_disp): Updated code to use new names. (parse_insn): + Added casts. + * config/tc-ia64.c (dot_template, emit_one_bundle): Updated + code to use new names. + * config/tc-score.c (struct s3_asm_opcode): Renamed member + template to template_name. (s3_parse_16_32_inst, s3_parse_48_inst, + s3_do_macro_ldst_label, s3_build_score_ops_hsh): Update code to + use new names. + * config/tc-score7.c (struct s7_asm_opcode): Renamed member + template to template_name. (s7_parse_16_32_inst, + s7_do_macro_ldst_label, s7_build_score_ops_hsh): Update code to + use new names. + * config/tc-tic30.c (md_begin, struct tic30_insn) + (md_assemble): Update code to use new names. + * config/tc-tic54x.c (struct _tic54x_insn, md_begin) + (optimize_insn, tic54x_parse_insn, next_line_shows_parallel): + Update code to use new names. + * config/tc-arm.c (insert_reg_alias): Rename variable new to + new_reg. + * config/tc-dlx.c (parse_operand): Rename variable new to + new_pos. + * config/tc-ia64.c (ia64_gen_real_reloc_type): Rename variable + new to newr. + * config/tc-mcore.c (parse_exp, parse_imm): Rename variable + new to new_pointer. + * config/tc-microblaze.c (parse_exp, parse_imm, check_got): + Change name from new to new_pointer. + * config/tc-or32.c (parse_operand): Rename variable new to + new_pointer. + * config/tc-pdp11.c (md_assemble): Rename variable new to + new_pointer. + * config/tc-pj.c (alias): Change argument new to new_name. + * config/tc-score.c (s3_build_score_ops_hsh): Rename variable + new to new_opcode. (s3_build_dependency_insn_hsh) Rename variable + new to new_i2n. (s3_convert): Rename variables old and new to + r_old and r_new. + * config/tc-score7.c (s7_build_score_ops_hsh): Rename variable + new to new_opcode. (s7_build_dependency_insn_hsh): Rename variable + new to new_i2d. (s7_b32_relax_to_b16, s7_convert_frag): Rename + variables old and new to r_old and r_new. + * config/tc-sh.c (parse_exp): Rename variable new to + new_pointer. + * config/tc-sh64.c (shmedia_parse_exp): Rename variable new to + new_pointer. + * config/tc-tic4x.c (tic4x_operand_parse): Rename variable new + to new_pointer. + * config/tc-z8k.c (parse_exp): Rename variable new to + new_pointer. + * listing.c (listing_newline): Rename variable new to new_i. + +2009-08-29 Matt Fleming + + * config/tc-sh.c (md_apply_fix): Extend sign of the offset value + for 64-bit host. + +2009-08-28 H.J. Lu + + * config/tc-i386.c (cpu_arch): Use PROCESSOR_L1OM on "l1om". + (i386_align_code): Handle PROCESSOR_L1OM. + (check_cpu_arch_compatible): Fix a typo in comments. + (set_cpu_arch): Check cpu_arch_isa instead of + cpu_arch_isa_flags.bitfield.cpul1om. + (i386_mach): Likewise. + (i386_target_format): Likewise. + + * config/tc-i386.h (processor_type): Add PROCESSOR_L1OM. + +2009-08-26 DJ Delorie + + * config/tc-mep.c (md_pcrel_from_section): Handle any other + forced-relocation cases. + +2009-08-26 Ralf Wildenhues + + * Makefile.am (TARGET_CPU_CFILES): Add config/tc-moxie.c. + * config/tc-moxie.c (md_assemble): Fix typos in strings. Fix + syntax error. + * Makefile.in: Regenerate. + * po/POTFILES.in: Likewise. + * po/gas.pot: Likewise. - * config/tc-arm.c (insns): Allow strex on M profile cores. +2009-08-26 Nick Clifton -2007-05-29 David S. Miller - Jakub Jelinek + * config/obj-coff-seh.c (seh_arm_write_pdata): Test for + seh_ctx_root being NULL. - PR gas/4558 - * config/tc-sparc.c (md_apply_fix): Fix relocation overflow checks - for BFD_RELOC_SPARC_WDISP16 and BFD_RELOC_SPARC_WDISP19. +2009-08-24 Ralf Wildenhues -2007-05-29 Alan Modra + * Makefile.am (am__skiplex, am__skipyacc): New. + * Makefile.in: Regenerate. - * config/tc-spu.h: Wrap in #ifndef/#endif. Delete coff macros. +2009-08-22 Ralf Wildenhues -2007-05-29 Alan Modra + * Makefile.am (YFLAGS): Remove, not needed any more. + (AM_CPPFLAGS): Renamed from ... + (INCLUDES): ... this. + * Makefile.in: Regenerate. - * config/tc-ppc.c: Convert to ISO C. - * config/tc-ppc.c: Likewise. + * Makefile.am (AUTOMAKE_OPTIONS): Remove 1.8 cygnus, add 1.11, + foreign and no-dist. + (all): Remove now-unneeded dependency upon info. + (DIST_SUBDIRS, MKDEP, DEP_INCLUDES, DEP_FLAGS, CLEANFILES) + (DEP_FILE_DEPS): Remove variables. + (OBJ_FORMAT_CFILES): Add config/obj-multi.c. + (OBJ_FORMAT_HFILES): Add config/obj-multi.h. + ($(OBJS), ecoff.o): Remove now-unneeded manual dependencies. + ($(TARG_CPU_O), $(ATOF_TARG_O), obj-aout.o, obj-coff.o obj-ecoff.o) + (obj-elf.o obj-evax.o, obj-fdpicelf.o, obj-multi.o, obj-som.o) + (e-mipself.o, e-mipsecoff.o, e-i386aout.o, e-i386coff.o, e-i386elf.o) + (e-crisaout.o, e-criself.o, tc-i386.o, xtensa-relax.o): Remove + now-unneeded rules. + (EXTRA_as_new_SOURCES): Add $(CFILES), $(HFILES), $(TARGET_CPU_CFILES), + $(TARGET_CPU_HFILES), $(OBJ_FORMAT_CFILES), $(OBJ_FORMAT_HFILES), + $(CONFIG_ATOF_CFILES), $(MULTI_CFILES), so their dependency fragments + are picked up in the Makefile. + (itbl-lex.c, itbl-ops.o): Remove manual dependencies. + (m68k-parse.o, bfin-lex.o, itbl-lex.o, itbl-parse.o, itbl-tops.o) + (itbl-test.o): Rewrite using automake-style dependency + tracking rules; only list the dependency upon the primary source + file, but no included headers. + (DEP, DEP1, DEPTC, DEPOBJ, DEP2, dep.sed, dep, dep-in, dep-am): + Remove. + (mkdep section): Remove. + * Makefile.in: Regenerate. + * gas/po/POTFILES.in, gas/po/gas.pot: Regenerate. -2007-05-29 Alan Modra + * Makefile.am (install-pdf, install-pdf-recursive, install-html) + (install-html-recursive): Remove. + * Makefile.in: Regenerate. + * doc/Makefile.am (pdf__strip_dir, install-pdf, install-pdf-am) + (html__strip_dir, install-html, install-html-am): Remove. + * doc/Makefile.in: Regenerate. - * write.h (EXEC_MACHINE_TYPE): Delete. - (string_byte_count, section_alignment): Delete. + * Makefile.in: Regenerate. + * aclocal.m4: Likewise. + * config.in: Likewise. + * configure: Likewise. + * doc/Makefile.in: Likewise. -2007-05-28 Nathan Sidwell +2009-08-21 Sterling Augustine - * app.c (do_scrub_chars): Cope with \ at end of buffer. + * config/tc-xtensa.c (config_max_slots): New global variable. + (md_begin): Set config_max_slots. + (total_frag_text_expansion): Use config_max_slots instead of + MAX_SLOTS. + (xg_init_vinsn): Likewise. + (xg_clear_vinsn): Likewise. + (xg_free_vinsn): Likewise. -2007-05-26 Alan Modra +2009-08-20 Sterling Augustine - * 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. + * config/tc-xtensa.c (xg_copy_vinsn): New function. + (finish_vinsn): Call xg_copy_vinsn. -2007-03-25 Paul Brook +2009-08-19 Sterling Augustine - * 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. + * config/tc-xtensa.h (xtensa_frag_data): Rename unused field fr_prev + to no_transform_end. + * config/tc-xtensa.c (xtensa_mark_difference_of_two_symbols): Set + and use no_transform_end. -2007-05-24 Steve Ellcey +2009-08-18 Kai Tietz - * Makefile.in: Regnerate. - * configure: Regenerate. - * aclocal.m4: Regenerate. - * doc/Makefile.in: Regenerate. + * config/obj-coff-seh.c: Add copyright notice. + * config/obj-coff-seh.h: Add copyright notice. + Add x64 specific macros from coff/pe.h header. -2007-05-22 Bob Wilson - - * doc/c-xtensa.texi (Xtensa Automatic Alignment): Remove statements - and index entries about automatic alignment of ENTRY instructions. - -2007-05-22 Nick Clifton +2009-08-18 Sterling Augustine - * doc/as.texinfo: Use @copying around the copyright notice. + * config/tc-xtensa.c (xtensa_create_xproperty_segments): Use + sizeof instead of hard-coded value. + (add_xt_block_frags): Remove unused local variable. + (frag_flags_to_number): Change return type to flagword. Remove + unused local variable. -2007-05-18 Joseph Myers +2009-08-17 Sterling Augustine - * config/tc-mips.c (s_mipsset): Use generic s_set for directives - containing a comma. + * config/tc-xtensa.c (xtensa_frob_label): move call to + do_align_targets to set frag_type only. -2007-05-17 H.J. Lu +2009-08-17 Kai Tietz - PR gas/4517 - 2003-06-05 Michal Ludvig - * doc/as.texinfo: Document new directives: .cfi_restore, - .cfi_undefined, .cfi_same_value, .cfi_return_column, - .cfi_remember_state and .cfi_restore_state. + * config/obj-coff-seh.c: New file. + * config/obj-coff-seh.h: Likewise. + * config/obj-coff.c (obj-coff-seh.c): Add include. + (coff_pseudo_table): Add new .seh... commands. + * config/obj-coff.h (obj_coff_seh_do_final): Add new + function prototype. + (obj_coff_generate_pdata): New obj-coff hook. + * gas/write.c (size_seg): Avoid sizing of already sized + sections. + (write_object_file): Call conditional hook + objc_coff_generate_pdata. + * Makefile.am: Add dependencies for new files. + * Makefile.in: Regenerated. -2007-05-17 Nathan Sidwell +2009-08-17 Nick Clifton - * 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. + * config/tc-microblaze.c: Include safe-ctype.h instad of ctype.h. + (parse_reg): Use safe-ctype.h macros. + (parse_exp): Likewise. + (md_assemble): Likewise. -2007-05-16 Paul Brook +2009-08-11 DJ Delorie + + * config/tc-mep.c (md_estimate_size_before_relax): Handle weak + symbols correctly. + (md_convert_frag): Likewise. + (md_pcrel_from_section): Likewise. + (mep_force_relocation): Likewise. + +2009-08-11 Bernd Schmidt + + * config/bfin-parse.y (gen_multi_instr_1): New function. + (asm): Use it instead of bfin_gen_multi_instr. + (error): Add a format string when calling as_bad. + * config/bfin-defs.h (insn_regmask): Declare. + * config/tc-bfin.c (DREG_MASK, DREGH_MASK, DREGL_MASK, IREG_MASK): New + macros. + (decode_ProgCtrl_0, decode_LDSTpmod_0, decode_dagMODim_0, + decode_dagMODik_0, decode_dspLDST_0, decode_LDST_0, decode_LDSTiiFP_0, + decode_LDSTii_0, decode_dsp32mac_0, decode_dsp32mult_0, + decode_dsp32alu_0, decode_dsp32shift_0, decode_dsp32shitimm_0, + insn_regmask): New functions. + + From Jie Zhang + * config/tc-bfin.h (bfin_anomaly_checks): Declare. + (AC_05000074): Define. + (ENABLE_AC_05000074): Define. + * config/tc-bfin.c (enum bfin_cpu_type): New. + (bfin_cpu_t): Typedef. + (bfin_cpu_type): Define. + (bfin_si_revision): Define. + (bfin_anomaly_checks): Define. + (struct bfin_cpu): New. + (bfin_cpus[]): New. (struct bfin_cpu_isa): Define. + (bfin_isa): New global variable. + (OPTION_MCPU): Define. + (md_longopts[]): Add -mcpu option. + (md_parse_option): Deal with -mcpu option and initialize + bfin_anomaly_checks. + * doc/c-bfin.texi: Rename BFIN to Blackfin throughout. Document + -mcpu option. + * config/bfin-parse.y (gen_multi_instr_1): Check anomaly + 05000074. + +2009-08-11 Mike Frysinger + + * config/bfin-parse.y (binary): Change "compiler" to "assembler". + (unary): Likewise. + +2009-08-11 Nick Clifton + + PR 10443 + * config/tc-arm.c (do_t_mov_cmp): Do not silently ignore shifted + operands. - * config/tc-arm.c (v7m_psrs): Add uppercase PSR names and xpsr. +2009-08-10 Jan Kratochvil -2007-05-15 Mark Shinwell + Fix compilation of i386-*-go32. + * config/tc-i386.c (i386_target_format ): New. + (i386_target_format ): Compile only if !TE_GO32. + * config/te-go32.h (TARGET_FORMAT): Move the definition ... + * config/tc-i386.h : ... here. - * app.c (do_scrub_chars): Don't damage \@ pseudo-variables. +2009-08-10 Daniel Gutson -2007-05-15 Vincent Riviere + PR gas/10479 + * config/tc-arm.c (do_t_add_sub_w): Fixed constraints. - 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. +2009-08-07 Daniel Jacobowitz -2007-05-14 Thiemo Seufer + * config/tc-arm.c (marked_pr_dependency, mapstate): Delete global + variables. + (mapping_state): Use the section's mapstate. + (mapping_state_2): Likewise. Skip special sections. + (s_arm_unwind_fnend): Use the section's marked_pr_dependency. + (arm_elf_change_section): Do not set deleted globals. + * config/tc-arm.h (struct arm_segment_info_type): Document + marked_pr_dependency. - * config/tc-mips.c (md_parse_option): Fix parsing of -O option. +2009-08-07 Michael Eager -2007-05-14 Mei Ligang + * NEWS: Mention MicroBlaze support. - * 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 +2009-08-06 Michael Eager - * 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. + * Makefile.am: add microblaze to CPU_TYPES, config/tc-microblaze.c to + TARGET_CPU_CFILES, config/tc-microblaze.h to TARGET_CPU_HFILES, add + DEP_microblaze_elf target. + * Makefile.in: Regenerate. + * config/tc-microblaze.c: Add MicroBlaze assembler. + * config/tc-microblaze.h: Add header for tc-microblaze.c. + * configure.in: Add microblaze target. + * configure: Regenerate. + * configure.tgt: Same. + * doc/Makefile.am: Add c-microblaze.texi to CPU_DOCS. + * doc/Makefile.in: Same. + * doc/all.texi: Set MICROBLAZE. + * doc/as.texinfo: Add MicroBlaze doc links. + * doc/c-microblaze.texi: New MicroBlaze docs. -2007-05-05 Mark Shinwell - - * config/tc-arm.c (md_apply_fix): Generate more accurate - diagnostic when 8-bit immediate range is exceeded for - BFD_RELOC_ARM_OFFSET_IMM8. +2009-08-06 Nick Clifton -2007-05-04 Alan Modra + * config/tc-arm.c (md_assemble): Call mapping_state from inside a + block in case it is a null macro. - PR gas/4460 - * config/tc-i386.c (lex_got): Don't replace the reloc token with - a space if we already have a space. +2009-08-05 Chao-ying Fu -2007-05-03 H.J. Lu + * config/tc-mips.c (MIPS_JALR_HINT_P): New define. For IRIX, it is + true for new abi. For non-IRIX targets, it is always true. + (macro_build_jalr): If MIPS_JALR_HINT_P, emit BFD_RELOC_MIPS_JALR. - * 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. +2009-08-05 Eric B. Weddington -2007-05-03 Vincent Riviere - Nick Clifton + * config/tc-avr.c (mcu_types): Add attiny2313a, attiny4313, attiny261a, + attiny861a, atmega644pa, attiny24a, attiny44a. + * doc/c-avr.texi: Likewise. - 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. +2009-08-04 Sandra Loosemore -2007-05-02 Alan Modra + * doc/c-mips.texi (MIPS Opts): List 1004K options for -march. + * config/tc-mips.c (mips_cpu_info_table): Add 1004K cores. - PR 4448 - * config/tc-ppc.c (ppc_insert_operand): Don't increase min for - PPC_OPERAND_PLUS1. +2009-08-04 Nathan Sidwell -2007-05-01 H.J. Lu + * config/tc-arm.c (my_get_expression): Detect missing expressions. - * 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. +2009-08-02 Eric B. Weddington -2007-04-30 H.J. Lu + * config/tc-avr.c (mcu_types): Add atmega8m1, atmega8c1, atmega16c1. + * doc/c-avr.texi: Likewise. - * 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. +2009-08-01 Eric B. Weddington -2007-04-30 Alan Modra + * config/tc-avr.c (mcu_types): Add atmega8u2, atmega16u2, atmega32u2. + * doc/c-avr.texi: Likewise. - PR 4436 - * config/tc-ppc.c (ppc_insert_operand): Disable range check if - min > max. +2009-07-31 Daniel Gutson + Daniel Jacobowitz -2007-04-28 Thiemo Seufer + * config/obj-elf.c (obj_elf_ident): Notify section change to the hook. + * config/tc-arm.c (make_mapping_symbol): New function, from + mapping_state. Save mapping symbols in the frag. + (insert_data_mapping_symbol): New. + (mapping_state): Use make_mapping_symbol, improve state transitions. + (mapping_state_2): New. Provide dummy definition. + (opcode_select): Do not call mapping_state. + (s_bss): Call md_elf_section_change_hook instead of mapping_state. + (output_inst): Update use of tc_frag_data. + (new_automatic_it_block): Call mapping_state before emitting the + IT instruction. + (md_assemble): Move mapping_state to just before outputting the + new instruction. + (arm_handle_align): Update use of tc_frag_data. + Call insert_data_mapping_symbol. + (arm_init_frag): Update use of tc_frag_data. Call + mapping_state_2. + (arm_elf_change_section): Always update the mapping symbol FSM state. + (check_mapping_symbols): New function. + (arm_adjust_symtab): Use check_mapping_symbols. + * config/tc-arm.h (struct arm_frag_type): New. + (TC_FRAG_TYPE): Change to struct arm_frag_type. + (TC_FRAG_INIT): Pass max_chars. + (arm_init_frag): Update prototype. - * config/tc-mips.c: Fix comment. +2009-07-31 Anthony Green -2007-04-26 Anatoly Sokolov + * configure.tgt (generic_target): Add moxie-uclinux support. - * 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. +2009-07-30 Nick Clifton -2007-04-24 Alan Modra + * doc/c-arm.texi (ARM-Instruction-Set): New node. Documents the + different syntaxes support by the ARM port. + (ARM Directives): Add entry for .syntax. - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerate. + * doc/c-mips.texi (MIPS insn): Fix typo. -2007-04-23 Nathan Sidwell +2009-07-29 Alan Modra - * 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. + PR ld/10269 + * symbols.c (S_FORCE_RELOC): True for BSF_GNU_INDIRECT_FUNCTION. + * config/tc-i386.c: Revert 2009-06-13 change. + * config/tc-i386.h: Likewise. -2007-04-22 Alan Modra +2009-07-28 Jan Beulich - * 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. + * expr.c (op_rank): Specify size. Remove O_md* initializers. -2007-04-21 Alan Modra +2009-07-27 Maxim Kuvyrkov - * 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. + * config/tc-m68k.c (mcf5221x_ctrl): New. + (m68k_cpu): Add line for MCF5221x. -2007-04-21 Nick Clifton +2009-07-27 Maxim Kuvyrkov - * config/atof-vax.c (md_atof): Fix comparison inside know(). + * config/tc-m68k.c (mcf52235_ctrl): Remove non-existent CACR, ACR[01]. + (mcf53017_ctrl): Fix RAMBAR. - * config/tc-ia64.c (emit_one_bundle): Fix typo. +2009-07-27 Jan Beulich -2007-04-21 Alan Modra + * obj-elf.c (elf_file_symbol): Replace symbol name set up by + symbol_new() with the passed in, unmodified one. - * 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. +2009-07-27 M R Swami Reddy - * 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. + * config/tc-cr16.c (md_apply_fix): Put the addend value alone in to + object file without symbol values. + (tc_gen_reloc): For local symbols resolved or its absolute symbol, + then set the relocation type as NULL. -2007-04-20 Nathan Sidwell +2009-07-25 H.J. Lu - * config/tc-m68k.c (mcf5253_ctrl): New. - (mcf52223_ctrl): New. - (m68k_cpus): Add 5253, 52221, 52223. + * config/tc-i386.c (cpu_arch): Add l1om. + (check_cpu_arch_compatible): New. + (set_cpu_arch): Use it. + (i386_arch): New. + (i386_mach): Return bfd_mach_l1om for Intel L1OM. + (md_show_usage): Display l1om. + (i386_target_format): Return ELF_TARGET_L1OM_FORMAT if + cpu_arch_isa_flags.bitfield.cpul1om is set. - * 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) : Detect when RAMBAR_ALT should be used. Add it - to control register mapping. + * config/tc-i386.h (TARGET_ARCH): Use (i386_arch ()). + (i386_arch): New. + (ELF_TARGET_L1OM_FORMAT): Likewise. -2007-04-20 Alan Modra + * doc/c-i386.texi: Document l1om. - * 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. +2009-07-24 Roland McGrath + Mark Wielaard -2007-04-20 Alan Modra + * config/obj-elf.c (obj_elf_ident): Set SEC_MERGE | SEC_STRINGS + flags on .comment section. - * 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. +2009-07-24 Trevor Smigiel + Alan Modra -2007-04-19 Paul Brook + * config/tc-spu.c (md_apply_fix): Handle SPU_ADD_PIC. + * config/tc-spu.h (tc_fix_adjustable): Don't adjust for SPU_ADD_PIC. + (TC_FORCE_RELOCATION): Emit relocs for SPU_ADD_PIC. + +2009-07-24 Jan Beulich + + * tc-i386.c (cpu_arch): Add .8087, .287, .387, .no87, .nommx, + .nosse, and .noavx. + (cpu_flags_and_not): New. + (set_cpu_arch): Check whether sub-architecture specified is a + feature disable. + (md_parse_option): Likewise. + (parse_real_register): Don't return floating point register + when x87 functionality is disabled. + (md_show_usage): Add new sub-options. + * doc/c-i386.texi: Update with new command line sub-options. + +2009-07-24 Nick Clifton + + PR 10437 + * config/tc-alpha.c: Fix up uses of gas printf like functions so + that the format string is a constant string. Add translation + support to message strings. + * config/tc-arc.c: Likewise. + * config/tc-arm.c: Likewise. + * config/tc-cris.c: 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-i960.c: Likewise. + * config/tc-ia64.c: Likewise. + * config/tc-m32r.c: Likewise. + * config/tc-mep.c: Likewise. + * config/tc-mips.c: Likewise. + * config/tc-moxie.c: Likewise. + * config/tc-msp430.c: Likewise. + * config/tc-openrisc.c: Likewise. + * config/tc-pdp11.c: Likewise. + * config/tc-pj.c: Likewise. + * config/tc-s390.c: Likewise. + * config/tc-sh.c: Likewise. + * config/tc-sh64.c: Likewise. + * config/tc-sparc.c: Likewise. + * config/tc-spu.c: Likewise. + * config/tc-tic30.c: Likewise. + * config/tc-tic4x.c: Likewise. + * config/tc-tic54x.c: Likewise. + * config/tc-v850.c: Likewise. + * config/tc-xc16x.c: Likewise. + * config/tc-xstormy16.c: Likewise. + * config/tc-z80.c: Likewise. + * config/tc-z8k.c: Likewise. + * config/atof-ieee.c: Add translation support to as_warn + messages. + * config/obj-coff.c: Likewise. + +2009-07-23 Ulrich Drepper + + * config/obj-elf.c (obj_elf_type): Add code to support a type of + gnu_unique_object. + * doc/as.texinfo: Document new feature of .type directive. + * NEWS: Mention support for gnu_unique_object symbol type. + +2009-07-23 Nick Clifton + + PR binutils/10379 + * doc/c-mips.texi (MIPS insn): Document the special behaviour of + the .global directive for MIPS ports. + +2009-07-21 H.J. Lu + + PR gas/10420 + * config/tc-i386.c (i386_align_code): Tune for 32bit nops in + 64bit. + (i386_target_format): Set cpu_arch_isa_flags.bitfield.cpulm + for 64bit. + +2009-07-17 H.J. Lu + + * config/tc-i386.c (md_assemble): Update operand types. + (update_imm): Updated. + (finalize_imm): Update the first 2 immediate operands only + for instructions with 2 operands or more. + +2009-07-17 H.J. Lu + + * config/tc-i386.c (md_assemble): Check implicit registers + only for instructions with 3 operands or less. + +2009-07-17 Nick Clifton + + * config/tc-avr.c (md_apply_fix): Cast fixup reloc type to avoid + compile time warning. + +2009-07-16 H.J. Lu + + * config/tc-i386.c (md_assemble): Only check i.operands for AX. + (md_estimate_size_before_relax): Don't relax IFUNC symbols. + +2009-07-16 Nathan Sidwell + + * config/tc-arm.c (md_apply_fix ): Write + the offset for REL targets here. + +2009-07-15 Kai Tietz + + * listing.c (print_source): Initialize cache by NULL. + +2009-07-15 Daniel Gutson + + * doc/c-arm.texi (mauto-it): Removed old option. + (mimplicit-it): Added right option. - * config/tc-arm.c (md_assemble): Only allow 16-bit instructions on - Thumb-1. Add sanity check for bogus relaxations. +2009-07-14 Daniel Gutson -2007-04-19 Paul Brook + * config/tc-arm.h (MAX_MEM_ALIGNMENT_BYTES): Define. + (MAX_MEM_FOR_RS_ALIGN_CODE): Define in terms of + MAX_MEM_ALIGNMENT_BYTES. + * config/tc-arm.c (arm_frag_align_code): Replace hard coded + constant with MAX_MEM_FOR_RS_ALIGN_CODE. - * config/tc-arm.c (insns): Allow rsb and rsbs on Thumb-1. +2009-07-14 Nick Clifton -2007-04-19 Alan Modra + PR 10387 + * config/tc-arm.h (THUMB_IS_FUNC): Handle a NULL pointer. + (ARM_IS_FUNC): Likewise. - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerate. +2009-07-14 Daniel Gutson -2007-04-19 Nathan Froyd + * config/tc-arm.c (md_assemble): Added validation. - * doc/c-ppc.texi (PowerPC-Opts): Document -me500, -me500x2, -mspe. +2009-07-10 H.J. Lu -2007-04-18 H.J. Lu + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerated. - * doc/c-i386.texi; Document .ssse3, .sse4.1, .sse4.2 and .sse4. +2009-07-10 Tom Tromey + + * Makefile.am (DEPTC_alpha_ecoff): Refer to dwarf2.h, not + elf/dwarf2.h. + (DEPTC_alpha_elf): Likewise. + (DEPTC_alpha_evax): Likewise. + (DEPTC_arm_elf): Likewise. + (DEPTC_hppa_elf): Likewise. + (DEPTC_i386_aout): Likewise. + (DEPTC_i386_coff): Likewise. + (DEPTC_i386_elf): Likewise. + (DEPTC_m68k_aout): Likewise. + (DEPTC_m68k_coff): Likewise. + (DEPTC_m68k_elf): Likewise. + (DEPTC_mips_coff): Likewise. + (DEPTC_mips_ecoff): Likewise. + (DEPTC_mips_elf): Likewise. + (DEPTC_ppc_coff): Likewise. + (DEPTC_ppc_elf): Likewise. + (DEPTC_s390_elf): Likewise. + (DEPTC_sh_coff): Likewise. + (DEPTC_sh_elf): Likewise. + (DEPTC_sh64_elf): Likewise. + (DEPTC_sparc_aout): Likewise. + (DEPTC_sparc_coff): Likewise. + (DEPTC_sparc_elf): Likewise. + (as.o): Likewise. + (dwarf2dbg.o): Likewise. + (dw2gencfi.o): Likewise. + (ehopt.o): Likewise. + (read.o): Likewise. + * Makefile.in: Rebuild. + * dw2gencfi.h: Include dwarf2.h, not elf/dwarf2.h. + * dwarf2dbg.c: Likewise. + * ehopt.c: Likewise. + +2009-07-09 Daniel Gutson + + * config/tc-arm.c (it_fsm_post_encode): New forward declaration. + (set_it_insn_type_nonvoid): New macro. + (emit_thumb32_expr): New function. + (thumb_insn_size): New function. + (emit_insn): New function. + (s_arm_elf_inst): New function. + (md_pseudo_table): New pseudo-opcode entries added. + * doc/c-arm.texi: New directive added. + +2009-07-07 DJ Delorie + + * config/tc-mep.c (md_begin): Don't reset the coprocessor options + when enabling other options without a specific configuration. + +2009-07-07 Chung-Lin Tang + + * config/tc-arm.c (insns): Fix encoding for torvsc. + +2009-07-06 Dwarakanath Rajagopal + + * config/tc-i386.c (cpu_arch): Add .fma4 and CPU_FMA4_FLAGS. + (build_modrm_byte): Add support to handle FMA4 instructions. + (md_show_usage): Add fma4. + +2009-07-04 Alan Modra + + * config/tc-cr16.h (TC_LINKRELAX_FIXUP): Set only for code sections. + +2009-07-02 Tristan Gingold + + * Makefile.am (OBJ_FORMATS): Add macho. + (CPU_OBJ_VALID): Ditto. + (OBJ_FORMAT_CFILES): Add config/obj-macho.c + (OBJ_FORMAT_HFILES): Add config/obj-macho.h + (obj-macho.o): New rule. + * Makefile.in: Regenerated. + * configure.tgt (generic_target): Add i386-*-darwin*. + * config/tc-i386.h: Use i386_target_format for Mach-O. + * config/tc-i386.c (i386_target_format): Define it for Mach-O. + (i386_target_format): Add a case for bfd_target_mach_o_flavour. + * config/obj-macho.h: New file. + * config/obj-macho.c: New file. + +2009-07-01 Nick Clifton + + PR 10168 + * config/tc-arm.c (do_t_pkhtb): Swap Rm and Rn when encoding as + PKHBT. + +2009-07-01 Paul Brook + + * config/tc-arm.c (MISSING_FNSTART): Define. + (s_arm_unwind_fnstart): Diagnose duplicate directive. + (s_arm_unwind_handlerdata, s_arm_unwind_fnend, s_arm_unwind_fnend, + s_arm_unwind_cantunwind, s_arm_unwind_personalityindex, + s_arm_unwind_personality, s_arm_unwind_save, s_arm_unwind_movsp, + s_arm_unwind_pad, s_arm_unwind_setfp, s_arm_unwind_raw): Error if + not inside function unwinding region. + +2009-06-29 H.J. Lu + + * config/tc-i386.c: Reformat. + +2009-06-23 DJ Delorie + + * config/tc-mep.c (mep_check_ivc2_scheduling): For IVC2, allocate + 32 bits for relaxable branches so that we can relax them later. + (md_estimate_size_before_relax): Assume IVC2 branches will be relaxed. + (mep_relax_frag): New. + (md_convert_frag): Relax IVC2 branches in-place. + * config/tc-mep.h ((mep_relax_frag): New. + +2009-06-22 Martin Thuresson + + * gas/app, gas/as.c, gas/as.h, gas/atof-generic.c, gas/cgen.c, + gas/config/atof-ieee.c, gas/config/obj-aout.c, + gas/config/obj-coff.c, gas/config/obj-ecoff.c, + gas/config/obj-elf.c, gas/config/obj-som.c, gas/config/tc-alpha.c, + gas/config/tc-arc.c, gas/config/tc-arm.c, gas/config/tc-cr16.c, + gas/config/tc-cris.c, gas/config/tc-crx.c, gas/config/tc-d30v.c, + gas/config/tc-dlx.c, gas/config/tc-hppa.c, gas/config/tc-i370.c, + gas/config/tc-i386-intel.c, gas/config/tc-i386.c, + gas/config/tc-i860.c, gas/config/tc-i960.c, gas/config/tc-ia64.c, + gas/config/tc-iq2000.c, gas/config/tc-m32c.c, + gas/config/tc-m32r.c, gas/config/tc-m68hc11.c, + gas/config/tc-m68k.c, gas/config/tc-maxq.c, gas/config/tc-mcore.c, + gas/config/tc-mep.c, gas/config/tc-mips.c, gas/config/tc-mmix.c, + gas/config/tc-mn10300.c, gas/config/tc-moxie.c, + gas/config/tc-ns32k.c, gas/config/tc-pj.c, gas/config/tc-ppc.c, + gas/config/tc-s390.c, gas/config/tc-score.c, + gas/config/tc-score7.c, gas/config/tc-sh.c, gas/config/tc-sparc.c, + gas/config/tc-spu.c, gas/config/tc-tic30.c, gas/config/tc-vax.c, + gas/config/tc-xtensa.c, gas/config/xtensa-relax.c, + gas/dw2gencfi.c, gas/dwarf2dbg.c, gas/ehopt.c, gas/expr.c, + gas/frags.c, gas/input-file.c, gas/read.c, gas/sb.c, + gas/subsegs.c, gas/symbols.c, gas/write.c: Change the name of the + gas macro `assert' to `gas_assert'. + +2009-06-22 Daniel Gutson + + * config/tc-arm.c (implicit_it_mode): New enum. + (implicit_it_mode): New global. + (it_instruction_type): New enum. + (arm_parse_it_mode): New function. + (arm_long_opts): New option added. + (arm_it): New field. + (it_state): New enum. + (now_it): New macro. + (check_it_blocks_finished): New function. + (insns[]): Use the IT Thumb opcodes for ARM too. + (arm_cleanup): Call check_it_blocks_finished. + (now_it_compatible): New function. + (conditional_insn): New function. + (set_it_insn_type): New macro. + (set_it_insn_type_last): New macro. + (do_it): Call automatic IT machinery functions. + (do_t_add_sub): Likewise + (do_t_arit3): Likewise. + (do_t_arit3c): Likewise. + (do_t_blx): Likewise. + (do_t_branch): Likewise. + (do_t_bkpt): Likewise. + (do_t_branch23): Likewise. + (do_t_bx): Likewise. + (do_t_bxj): Likewise. + (do_t_cps): Likewise. + (do_t_cpsi): Likewise. + (do_t_cbz): Likewise. + (do_t_it): Likewise. + (encode_thumb2_ldmstm): Likewise. + (do_t_ldst): Likewise. + (do_t_mov_cmp): Likewise. + (do_t_mvn_tst): Likewise. + (do_t_mul): Likewise. + (do_t_neg): Likewise. + (do_t_setend): Likewise. + (do_t_shift): Likewise. + (do_t_tb): Likewise. + (output_it_inst): New function. + (new_automatic_it_block): New function. + (close_automatic_it_block): New function. + (now_it_add_mask): New function. + (it_fsm_pre_encode): New function. + (handle_it_state): New function. + (it_fsm_post_encode): New function. + (force_automatic_it_block_close): New function. + (in_it_block): New function. + (md_assemble): Call automatic IT block machinery functions. + (arm_frob_label): Likewise. + (arm_opts): New element. + * config/tc-arm.h (it_state): New enum. + (current_it): New struct. + (arm_segment_info_type): New member added. + * doc/c-arm.texi: New option -mimplicit-it documented. + +2009-06-20 Alan Modra + + PR 10302 + * doc/as.texinfo (Section ): Clarify tail merge. + +2009-06-19 Martin Schwidefsky + + * config/tc-s390.c (md_gather_operands): Accept an instruction + without operands if all operands are tagged as optional. + +2009-06-18 Nick Clifton + + PR 10169 + * gas/tc-arm.c (do_t_ssat): Move common code from here... + (do_t_usat): ... and here to... + (do_t_ssat_usat): New function: ... here. Add code to check that + the shift value, if present, is in range. + +2009-06-18 Dave Korn + + Merge cegcc and mingw32ce target name changes + from CeGCC project: + + 2007-12-25 Pedro Alves + + * configure.tgt: Add arm*-*-cegcc* target. + + 2007-12-17 Pedro Alves + + * configure.tgt: Add arm-*-mingw32ce* target. + +2009-06-16 Maciej W. Rozycki + + * config/tc-vax.c (md_estimate_size_before_relax): Accept + indirect symbol references in the PIC mode and emit a + PC-relative relocation instead of a GOT/PLT one. Likewise + for symbols known to be hidden at this point. + +2009-06-15 Nick Clifton + + PR 10186 + * config/tc-arm.c (T16_32_TAB): Fix binary value of SEV.W + instruction. + +2009-06-13 H.J. Lu + + PR ld/10269 + * config/tc-i386.c (md_apply_fix): Use TC_FORCE_RELOCATION + instead of generic_force_reloc. + + * config/tc-i386.h (TC_FORCE_RELOCATION): New. + +2009-06-11 Anthony Green + + * config/tc-moxie.c (md_chars_to_number): Define. + (md_begin): Populate opcode hashtable with more form 3 opcodes. + (md_assemble): Assemble MOXIE_F3_PCREL encoded instructions. + (md_apply_fix): Handle BFD_RELOC_MOXIE_10_PCREL relocations. + (tc_gen_reloc): Ditto. + (md_pcrel_from): Ditto. + (md_chars_to_number): New function. + +2009-06-10 Anthony Green + + * config/tc-moxie.c (md_assemble): Handle MOXIE_F1_M encoded + opcodes. + +2009-06-09 Jakub Jelinek -2007-04-18 H.J. Lu + PR gas/10255 + * dw2gencfi.c (output_cfi_insn): Initialize fragment before rs_cfa + to DW_CFA_advance_loc4. - * 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. +2009-06-08 Dave Korn -2007-04-18 H.J. Lu + PR gas/977 + * config/tc-i386.c (md_estimate_size_before_relax): Don't relax + branches to weak symbols. + (md_apply_fix): Don't convert fixes against weak symbols to + section-relative offsets, but save addend for later reloc emission. + (tc_gen_reloc): When emitting reloc against weak symbol, adjust + addend to pre-compensate for bfd_install_relocation. - * 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. +2009-06-04 Alan Modra -2007-04-18 Paul Brook + * dep-in.sed: Don't use \n in replacement part of s command. + * Makefile.am (DEP1, DEPTC, DEPOBJ, DEP2): LC_ALL for uniq. + * Makefile.in: Regenerate. - * config/tc-arm.c (do_t_rsb): Use 16-bit encoding when possible. +2009-06-01 H.J. Lu -2007-04-16 Kaz Kojima + PR gas/10198 + * config/tc-i386-intel.c (i386_intel_operand): Check '$' as '.'. - * config/tc-sh.c (sh_handle_align): Call as_bad_where instead - of as_warn_where for misaligned data. +2009-05-26 Catherine Moore -2007-04-15 Kaz Kojima + * config/tc-mips.c (check_for_24k_errata): Remove. + (md_mips_end): Remove call to check_for_24k_errata. + (start_noreorder): Likewise. + (s_change_sec): Likewise. + (s_change_section): Likewise. + (insns_between): Add 24k errata checks. + (append_insn): Remove declaration and references to nhdx_24k. + Remove calls to check_for_24k_errata. - * config/tc-sh.c (align_test_frag_offset_fixed_p): Handle - rs_fill frags. +2009-05-26 Nick Clifton -2007-04-14 Steve Ellcey + * po/id.po: Updated Indonesian translation. + * po/gas.pot: Updated template file. - * Makefile.am: Add ACLOCAL_AMFLAGS. - * Makefile.in: Regenerate. +2009-05-26 Nick Clifton -2007-04-14 Kaz Kojima + PR 10143 + * config/bfin-parse.y (error): Use "%s" as format string for error + message. - * 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. +2009-05-26 Alan Modra -2007-04-06 Matt Thomas + * dep-in.sed: Output one filename per line with all lines having + continuation backslash. Prefix first line with "A", following + lines with "B". + * Makefile.am (DEP): Don't use dep.sed here. + (DEP1): Run $MKDEP on single files, use dep.sed here on dependencies, + sort and uniq. + (DEPTC, DEPOBJ, DEP2): Use dep.sed on dependencies, sort and uniq. + Emit multi dependencies on one line. + * Makefile.in: Regenerate. - * 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. +2009-05-25 Tristan Gingold -2007-04-04 Kazu Hirata + * makefile.vms: New file to compile gas on VMS. - * config/tc-m68k.c (HAVE_LONG_BRANCH): Add fido_a. + * configure.com: New file to do configuration on VMS with DCL. -2007-04-04 Paul Brook +2009-05-23 Richard Sandiford - * config/tc-arm.c (do_neon_ext): Enforce immediate range. - (insns): Use I15 for vext. + * config/tc-mips.c (nops_for_vr4130): Don't check noreorder_p. + (nops_for_insn): Likewise. -2007-04-04 Paul Brook +2009-05-22 H.J. Lu - * configure.tgt: Loosen checks for arm uclinux eabi targets. + * symbols.c (COPIED_SYMFLAGS): Add BSF_GNU_INDIRECT_FUNCTION. -2007-04-02 Sterling Augustine +2009-05-22 Dwarakanath Rajagopal - * config/tc-xtensa.c (xtensa_flush_pending_output): Check - outputting_stabs_line_debug. + * config/tc-i386.c (process_drex): Delete. Remove SSE5 support. + (build_modrm_byte): Remove DREX handling support. + (DREX_*): Delete. + (drex_byte): Delete. + (md_assemble): Remove DREX handling support. + (process_operands): Remove DREX, SSE5 support. + (i386_insn): Remove DREX. -2007-03-26 Anatoly Sokolov +2009-05-22 Alan Modra - * 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. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. -2007-04-02 Richard Sandiford +2009-05-20 Kai Tietz + H.J. Lu - * 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/obj-coff.h: Include "coff/x86_64.h" for x86 pe-coff. + (TARGET_FORMAT): Removed for x86 pe-coff. + (COFF_TARGET_FORMAT): Likewise. -2007-03-30 Sterling Augustine - Bob Wilson + * config/tc-i386.c (md_longopts): Allow --64 for x86 pe-coff. + (md_parse_option): Likewise. + (md_show_usage): Show option --32/--64 for x86 pe-coff. + (i386_target_format): Use also for x86 pe-coff. - * 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 + * config/tc-i386.h (TARGET_FORMAT): Defined as i386_target_format + for x86 pe-coff. - * config/tc-i386.c (process_suffix): Reindent a bit. +2009-05-19 DJ Delorie -2007-03-30 Paul Brook + * config/tc-mep.c (mep_machine): Only check CPU flags, not COP flags. + (mep_process_saved_insns): Remove debugging printfs. - * 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. +2009-05-19 Dave Korn -2007-03-29 DJ Delorie + * NEWS: Mention new feature. + * config/obj-coff.c (obj_coff_common_parse): New function. + (obj_coff_comm): Likewise. + (coff_pseudo_table): Override default ".comm" definition on PE. + * doc/as.texinfo: Document new feature. - * 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. +2009-05-17 Kai Tietz -2007-03-29 Nick Clifton + * config/obj-coff.c (obj_coff_section): Add 'y' as + specifier for SEC_COFF_NOREAD section flag. + * doc/as.texinfo: Add documentation about .section flag 'y'. - * 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. +2009-05-13 DJ Delorie -2007-03-28 H.J. Lu + * cgen.c (gas_cgen_parse_operand): Guard against NULL pointers. - * 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. +2009-05-13 Andrew Jenner -2007-03-28 Richard Sandiford - Phil Edwards + * config/tc-arm.c: Move as.h to start of file. - * doc/as.texinfo: Put the contents after the title page rather - than at the end of the document. +2009-05-05 Ramana Radhakrishnan -2007-03-27 Alan Modra + * config/tc-arm.h: Fix typo in comment. + (ARM_IS_FUNC): New macro. + (MD_APPLY_SYM_VALUE): Define. - * NEWS: Mention ".reloc". + * config/tc-arm.c (do_blx): Retain BFD_RELOC_ARM_PCREL_BLX for + all versions of EABI. + (relax_branch): Do not relax for branches to ARM functions. + (md_pcrel_from_section): Set up base correctly for + BFD_RELOC_THUMB_PCREL_BLX, BFD_RELOC_THUMB_PCREL_CALL, + BFD_RELOC_THUMB_PCREL_BRANCH23, BFD_RELOC_ARM_PCREL_BLX + BFD_RELOC_ARM_PCREL_CALL. + (md_apply_fix): Flip bl to blx where possible. + Flip blx to bl where possible. + (arm_force_relocation): Force relocations for + BFD_RELOC_ARM_PCREL_JUMP, BFD_RELOC_ARM_PCREL_JUMP, + BFD_RELOC_ARM_PCREL_BLX, BFD_RELOC_THUMB_PCREL_BLX, + BFD_RELOC_THUMB_PCREL_BRANCH20, BFD_RELOC_THUMB_PCREL_BRANCH23, + BFD_RELOC_THUMB_PCREL_BRANCH25. + (arm_apply_sym_value): New function. -2007-03-26 Sterling Augustine - - * config/tc-xtensa.c (xg_translate_idioms): Allow assembly idioms - in FLIX instructions. - -2007-03-26 Julian Brown +2009-05-04 Tristan Gingold - * 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. + * config/tc-alpha.c: Also declare alpha_prologue_label for OBJ_EVAX. -2007-03-26 Julian Brown +2009-05-01 Nathan Sidwell - * doc/c-arm.texi: Add documentation for .dn/.qn directives. + * config/tc-armlinux-eabi.h (FPU_DEFAULT): Default to plain VFP. + * config/tc-armeabi.h (FPU_DEFAULT): Likewise. + * config/tc-arm.c (md_begin): If FPU_DEFAULT is set, don't infer + the default FPU from the processor. -2007-03-26 Alan Modra +2009-05-01 Julian Brown - * 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. + * config/tc-arm.c (do_t_blx): Always use BFD_RELOC_THUMB_PCREL_BLX. + (md_pcrel_from_section): Align address for BLX. + (tc_gen_reloc): Change BFD_RELOC_THUMB_PCREL_BLX relocations to + BFD_RELOC_THUMB_PCREL_BRANCH23 for EABI v4+. -2007-03-24 Paul Brook +2009-04-29 DJ Delorie - * config/tc-arm.c (do_t_ldmstm): Error on Thumb-2 addressing modes. + * config/tc-mep.c (md_begin): Check coprocessor type. + (md_check_parallel64_scheduling): Use memset to initialize the buffer. + (md_check_parallel32_scheduling): Likewise. + (slot_ok): New. + (mep_check_ivc2_scheduling): New. + (mep_check_parallel_scheduling): Call it. + (mep_process_saved_insns): Add IVC2 slot support. + (md_assemble): Likewise. -2007-03-24 Paul Brook - Mark Shinwell +2009-04-30 Nick Clifton - * 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. + * config/obj-elf.c (obj_elf_type): Add support for a + gnu_indirect_function type. + * config/tc-i386.c (tc_i386_fix_adjustable): Do not adjust fixups + against indirect function symbols. + * doc/as.texinfo (.type): Document the support for the + gnu_indirect_function symbol type. + * NEWS: Mention the new feature. -2007-03-23 H.J. Lu +2009-04-24 Cary Coutant - * config/tc-i386.c (md_begin): Allow '.' in mnemonic. + * NEWS: Add item about discriminator support. + * dwarf2dbg.h (struct dwarf2_line_info): Add discriminator field. + * dwarf2dbg.c (current): Add discriminator field. + (dwarf2_where): Copy discriminator value. + (dwarf2_consume_line_info): Set discriminator to 0. + (dwarf2_directive_loc): Process discriminator sub-op. + (out_leb128): New function. + (process_entries): Output DW_LNE_set_discriminator. + * doc/as.texinfo: Add discriminator operand to .loc directive. -2007-03-23 Mark Shinwell +2009-04-22 Nathan Sidwell - * config/tc-arm.c (md_apply_fix): Turn CBZ instructions that - attempt to jump to the next instruction into NOPs. + * config/tc-mips.c (macro_end, md_convert_frag): Use '%s' for + as_bad calls to silence compiler warning. -2007-03-23 Alan Modra +2009-04-21 H.J. Lu - * 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. + * config/tc-i386-intel.c (O_XXX): Reorder. -2007-03-22 Joseph Myers +2009-04-20 Jan Beulich - * doc/as.texinfo: Include VERSION_PACKAGE when reporting version. + * Makefile.am: Add explicit dependency of tc-i386.o on + tc-i386-intel.c. + * Makefile.in: Likewise. + * config/tc-i386.c (i386_finalize_immediate): Declare, broken + out from i386_immediate. + (i386_immediate): Slightly re-arrange, call + i386_finalize_immediate. + (i386_finalize_displacement): Declare, broken out from + i386_displacement. + (i386_displacement): Slightly re-arrange, call + i386_finalize_displacement. + (i386_intel_simplify, i386_intel_parse_name): Declare. + (this_operand): Initialize to -1. + (set_intel_syntax): Set expression rank for O_full_ptr. + (md_assemble): Set this_operand back to -1 after parsing + operands. + (x86_cons): Negate intel_syntax to indicate state. Call + i386_intel_simplify. + (md_operand): Convert if to switch. Handle '[' for Intel + syntax. + (i386_intel_operand): Delete, including all helper functions + and data. + * config/tc-i386-intel.c: New file, all new code. + * config/tc-i386.h (i386_operator): Declare. + (md_operator): Define to i386_operator. + (i386_need_index_operator): Declare. + (md_need_index_operator): Define to i386_need_index_operator. + (O_full_ptr): Define. -2007-03-21 H.J. Lu +2009-04-20 Jan Beulich - * config/tc-i386.c (process_suffix): Check 0x90 instead of - xchg for xchg %rax,%rax. + * expr.c (operand): Call md_need_index_operator() and + md_operator() if defined. Add unary label. + (operator): Call md_operator() if defined. + (expr): Adjust assertions on range and rank of op_left and + op_right. Don't abort on unhandled operators when reducing + expressions with both operands being constant. + (expr_set_rank): New. + * expr.h (expr_set_rank): Declare. -2007-03-21 H.J. Lu +2009-04-15 Anthony Green - * 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. + * config/tc-moxie.h: New file. + * config/tc-moxie.c: New file. + * configure: Add support for moxie. + * configure.tgt: Add support for moxie. -2007-03-21 H.J. Lu +2009-04-16 Jan Beulich - PR binutils/4218 - * config/tc-i386.c (match_template): Properly handle 64bit mode - "xchg %eax, %eax". + * expr.c: Include limits.h if available, and #define CHAR_BITS + otherwise. + (expr): Check range of shift count when evaluating a constant + expression. -2007-03-21 Anton Ertl +2009-04-15 Jan Beulich - PR gas/4124 - * config/tc-alpha.c (emit_ustX): Fix ustq code generation. + * config/tc-i386.c (process_operands): Print operands in + correct order depending on intel_syntax. -2007-03-21 H.J. Lu +2009-04-09 Catherine Moore - * Makefile.am: Run dep-am. - * Makefile.in: Regenerated. + * config/tc-mips.c (mips_fix_24k): Declare. + (check_for_24k_errata): New. + (mips_cleanup): Call check_for_24k_errata. + (start_noreorder): Likewise. + (md_mips_end): Likewise. + (s_change_sec): Likewise. + (s_change_section): Likewise. + (append_insn): Call check_for_24k_errata. Prevent + ERET/DERET instructions from being moved into delay + slots. + (OPTION_FIX_24K): New. + (OPTION_NO_FIX_24k) New. + (md_longopts): Add "mfix-24k" and "mno-fix-24k". + (md_parse_option): Handle fix-24k options. + (md_show_usage): Display fix-24k options. + * doc/c-mips.texi: Document. - * config/tc-i386.c: Don't include "opcodes/i386-opc.h". +2009-04-09 Adam Nemet - * config/tc-i386.h: Include "opcodes/i386-opc.h". - (NOP_OPCODE): Removed. - (template): Likewise. + * config/tc-mips.c (mips_dwarf2_addr_size): Use HAVE_64BIT_OBJECTS + instead of HAVE_64BIT_SYMBOLS. -2007-03-21 Andreas Schwab +2009-04-07 DJ Delorie - * config/tc-i386.h (NOP_OPCODE): Restore. + * config/tc-mep.c: Add UCI/DSP instruction support. Add C5 support. + (md_show_usage): Change default endian to little. + * config/tc-mep.h (TARGET_BYTES_BIG_ENDIAN): Change default to little. -2007-03-18 Mark Shinwell +2009-04-06 DJ Delorie - * 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. + * tc-h8300.c (do_a_fix_imm): Pass the insn, force relocs for MOVA + immediates. + (build_bytes): Pass insn to do_a_fix_imm. -2007-03-16 Kazu Hirata +2009-04-02 Daniel Gutson - * config/tc-m68k.c (m68k_cpus): Add an entry for fidoa. + * config/tc-arm.c (arm_cpus): Add entry for ARM Cortex-M0. + * doc/c-arm.texi: Added codes for processors ARM Cortex-M0 and + Cortex-M1. -2007-03-15 H.J. Lu +2009-04-01 Matt Thomas - * 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. + * config/tc-vax.c (synthetic_votstrs): add "jbbcci" and "jbbssi" + (md_assemble): emit symbol name when used as immediate in PIC mode. + (md_assemble): fix LP64 bug (use sizeof (valueT) instead 4). -2007-03-15 Alexandre Oliva +2009-04-01 Sterling Augustine - PR gas/4184 - * app.c (do_scrub_chars): PUT after setting states. + * config/tc-xtensa.c (parse_arguments): call demand_empty_rest_of_line -2007-03-15 H.J. Lu +2009-04-01 Ramana Radhakrishnan - * Makefile.am: Run "make dep-am". - * Makefile.in: Regenerated. + * config/tc-arm.c (arm_validate_fix): Define only for OBJ_COFF. + (find_real_start): Likewise. + * config/tc-arm.h (TC_VALIDATE_FIX): Likewise - * 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. +2009-04-01 Nathan Sidwell - * config/tc-i386.h: Move many entries to opcode/i386.h and - opcodes/i386-opc.h. + * config/tc-arm.c (do_nop): Generate v6k nops whenever possible. + (arm_handle_align): Generate v6k ARM, thumb2 wide & narrow nops + whenever possible. - * configure.in (need_opcodes): Set true for i386. - * configure: Regenerated. +2009-03-31 Peter Bergner -2007-03-15 H.J. Lu + * config/tc-ppc.c (ppc_handle_align): Handle power7's group ending nop. - * Makefile.am (REPORT_BUGS_TO): Removed. - (INCLUDES): Remove -DREPORT_BUGS_TO. - * Makefile.in: Regenerated. +2009-03-31 Dave Korn - * configure.in (--with-bugurl): Removed. - * configure: Regenerated. + * doc/internals.texi: Fix trivial syntax errors. - * 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. +2009-03-26 Alan Modra - * doc/as.texi: Include bfdver.texi instead of gasver.texi. + PR 10005 + * config/tc-i386.c (reloc): Don't abort on lack of required + reloc type. -2007-03-14 Daniel Jacobowitz +2009-03-25 H.J. Lu - * 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. + * config/tc-i386.c (parse_insn): Use default_arch on unsupported + arch. -2007-03-14 Paul Brook +2009-03-23 H.J. Lu - * config/tc-arm.c (T16_32_TAB): Fix dec_sp encoding. + PR gas/9966 + * listing.c (listing_newline): Properly handle `\\"' and ';'. -2007-03-14 Alan Modra + * read.c (is_end_of_line): Update comments for line separator. + (read_begin): Set line separator in is_end_of_line to 2. - PR 4029 - * write.c (relax_segment): Insert extra alignment padding - to break infinite relax loop when given impossible - gcc_except_table assembly. +2009-03-19 David S. Miller -2007-03-12 H.J. Lu + * config/tc-sparc.c (md_parse_option): If the user gives + us '--64' make sure max_architecture is at least V9. - * 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. +2009-03-18 Andrew Stubbs - * config/tc-i386.h (Opcode_D): New. - (Opcode_FloatR): Likewise. - (Opcode_FloatD): Likewise. - (D): Redefined. - (W): Likewise. - (FloatMF): Likewise. - (FloatR): Likewise. - (FloatD): Likewise. + * config/tc-arm.c (md_apply_fix): Check BFD_RELOC_ARM_IMMEDIATE and + BFD_RELOC_ARM_ADRL_IMMEDIATE value is in the correct section. + Check BFD_RELOC_ARM_ADRL_IMMEDIATE has a defined symbol. -2007-03-09 Alexandre Oliva +2009-03-18 Alan Modra - * 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. + * as.h: Include alloca-conf.h instead of config.h and remove + existing #if's handling alloca. + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. -2007-03-09 Alan Modra +2009-03-14 Richard Sandiford - * config/tc-i386.h (WORKING_DOT_WORD): Define. + * config/tc-ppc.c (ppc_frob_symbol): Add csect information for + C_AIX_WEAKEXT too. -2007-03-09 Alexandre Oliva +2009-03-14 Richard Sandiford - * app.c (do_scrub_chars): Turn #"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. + * config/tc-ppc.c (md_apply_fix): On COFF targets, always reread + "value" from fx_offset. Manually resubtract md_pcrel_from_section + where necessary. -2007-03-08 Alan Modra +2009-03-14 Richard Sandiford - * symbols.c (symbol_relc_make_sym): Comment typo fixes. + * configure.tgt: Extend AIX 5 behavior to AIX 6 and above. + * configure.in: Likewise. + * configure: Regenerate. -2007-03-08 Alan Modra +2009-03-11 Hans-Peter Nilsson + + * config/tc-cris.c (cris_create_short_jump): Remove prototype. + Rename, changing all callers, to... + (md_create_short_jump): Adjust head comment. Assert + word-sized-branch distance for v32. Bail out calling as_fatal for + compatibility mode here. + (md_create_long_jump): ...not here. + * config/tc-cris.h (md_create_short_jump): Do not define. + +2009-03-10 Hans-Peter Nilsson + + * write.c (write_object_file) [!WORKING_DOT_WORD]: When patching + the jump table for multiple overflowing entries with the same + target, handle base symbols being different. + (relax_segment) : Whenever a + single entry overflows, arrange to redirect all entries with the + same target. + +2009-03-10 Alan Modra + + * config/tc-ppc.c (parse_cpu): Delete. + (md_parse_option, ppc_machine): Use ppc_parse_cpu. + +2009-03-09 H.J. Lu + + PR gas/9915 + * config/tc-i386.h (LOCAL_LABELS_DOLLAR): New. Defined as 0. + (LOCAL_LABELS_FB): Undefine befoe define. + +2009-03-06 Nick Clifton + + * po/es.po: Updated Spanish translation. + +2009-03-05 Joseph Myers + + * read.c (s_fill, s_space, s_float_space, float_cons, stringer, + s_incbin): Call md_cons_align (1). + +2009-03-04 Nick Clifton + + * config/tc-alpha.c (alpha_prologue_label): Only define for ELF + based targets. + (s_alpha_comm): Only define "temp" and "log_align" local variables + for EVAX targets. + +2009-03-04 Alan Modra + + * config/tc-ppc.c (ppc_elf_suffix): Error if ppc32 tls got relocs + have non-zero addend. + (md_assemble): Parse args of __tls_get_addr calls. + (md_apply_fix): Handle BFD_RELOC_PPC_TLSGD and BFD_RELOC_PPC_TLSLD. + +2009-03-03 John David Anglin + + binutils/3807 + * config/tc-hppa.h (tc_frob_symbol): Don't frob absolute symbols with + local scope for ELF targets. + +2009-03-04 Alan Modra + + * config/tc-ppc.c (md_assemble): APUinfo only for e500. + +2009-03-03 Tristan Gingold + Eric Botcazou + Douglas B Rupp + + * doc/as.texinfo (Overview): Mention -replace/-noreplace options + for Alpha. + * doc/c-alpha.texi (Alpha Options): Document -replace/-noreplace. + * config/tc-alpha.h (TC_VALIDATE_FIX_SUB): Define to 1 (evax). + (OBJ_SYMFIELD_TYPE): Remove. + (tc_canonicalize_symbol_name): Define to evax_shorten_name. + (TC_IMPLICIT_LCOMM_ALIGNMENT): For alignment to 3 on evax. + (tc_frob_file_before_fix): Do not defined on evax. + * config/tc-alpha.c: Always includes dwarf2dbg.h. + Include vms.h if OBJ_EVAX. + (struct alpha_fixup): Add xtrasym and procsym (evax only). + (enum alpha_macro_arg): Remove trailing comma. + (md_longopts): Add replace and noreplace arguments (evax only). + (alpha_evax_proc_hash): New variable. + (alpha_link_section): Make it global. + (alpha_ctors_section, alpha_dtors_section): Removed. + (alpha_ctors_symbol, alpha_dtors_symbol): Ditto. + (alpha_lit8_section): Ifndef'ed on evax. + (alpha_lit8_symbol): Ditto. + (alpha_prologue_label): New variable. + (alpha_linkage_symbol): New variable (evax only). + (alpha_flag_replace): Ditto. + (struct alpha_evax_procs): Add handler and handler_data field. + (alpha_evax_proc): Now of type pointer. + (alpha_linkage_fixup_root, alpha_linkage_fixup_tail): New variables. + (struct alpha_reloc_tag): Add sym and psym fields (evax only). + (get_alpha_reloc_tag): Initialize sym and psym fields (evax only). + (alpha_adjust_relocs): Ifndef'ed on evax. + (load_expression): Add opname argument. + Implement LDA/BSR optimization for evax. + (emit_lda): Adjust for new prototype of load_expression. + (emit_ir_load): Ditto. Do not nothing for GP if ..lk symbols. + (emit_loadstore): Likewise. + (emit_ldXu): Likewise. + (emit_stX): Likewise. + (emit_jsrjmp): Likewise. Implement LDA/BSR optimization for evax. + (emit_ldgp): Avoid warning in evax case. + (add_to_link_pool): Make it static. Return symbolic expression rather + than number expression for the offset. + (s_alpha_text): Create .text symbol for evax if not already created. + (s_alpha_comm): Do not create specific section for common symbol. + Fill common area with zeros for evax. + (s_alpha_prologue): Create alpha_prologue_label. + (s_alpha_section_name): New function (evax). + (s_alpha_section_word): Likewise. + (section_name): New static variabke moved out from ... + (s_alpha_section): ... here. Create new sections on demand. + (s_alpha_literals): New function (evax). + (s_alpha_ent): Create alpha_evax_proc instance and insert it in the + alpha_evax_proc_hash table. + (s_alpha_handler): New function (evax). + (s_alpha_frame): Adjust for new type of alpha_evax_proc. + (s_alpha_prologue): New function (evax). + (s_alpha_pdesc): Adjust for new type of alpha_evax_proc and new + handling of procedures with hash table. + Add support for condition handlers. + (s_alpha_linkage): Create linkage_fixup instance and chain it. + (s_alpha_fp_save): Adjust for new type of alpha_evax_proc. + (s_alpha_mask): Likewise. + (s_alpha_fmask): Likewise. + (s_alpha_end): Clear alpha_evax_proc. + (s_alpha_align): Increase max_alignment to 16. + (alpha_print_token): Call print_expr_1 instead of print_expr. + (md_pseudo_table): Add "section", "literals", "handler" and + "handler_data" (evax). Do not ignore "prologue" on evax. + Fix indentation. + (md_begin): Create hash table for alpha_evax_proc_hash. + (md_parse_option): Handle OPTION_REPLACE and OPTION_NOREPLACE. + (md_show_usage): Mention -replace/-noreplace for evax. + (md_apply_fix): Handle evax relocs (_NOP, _LDA, _BSR and _BOH). + (alpha_force_relocation): Likewise. + (alpha_fix_adjustable): Likewise. Add BFD_RELOC_16 case. + (tc_gen_reloc): Likewise. Add BFD_RELOC_ALPHA_LINKAGE for evax. + (emit_insn): New cases for evax specific relocs. + (assemble_insn): Fix indentation. + Take care of -MDISP in operand table. + * config/obj-evax.h (struct alpha_linkage_fixups): New struct. + (OBJ_SYMFIELD_TYPE): New macro. + (obj_symbol_new_hook): Define. + (obj_frob_symbol, obj_frob_file_before_adjust): Ditto. + (obj_frob_file_before_fix): Ditto. + (PDSC_S_M_HANDLER_VALID): New macro. + (PDSC_S_M_HANDLER_DATA_VALID): Ditto. + (TC_IMPLICIT_LCOMM_ALIGNMENT): Remove. + Add prototypes for functions declared in obj-evax.c + * config/obj-evax.c: Include subsegs.h, struc-symbol.h, safe-ctype.h. + (s_evax_weak): Convert to ansi-C. + (evax_symbol_new_hook): New function. + (evax_frob_symbol): Ditto. + (evax_frob_file_before_adjust): Ditto. + (evax_frob_file_before_fix): Ditto. + (evax_shorten_name): Ditto. + (crc32): Ditto. + (encode_32): Ditto. + (encode_16): Ditto. + (decode_16): Ditto. + (shorten_identifier): Ditto. + (is_truncated_identifier): Ditto. + * dwarf2dbg.c (out_debug_info): Do not append trailing slash on VMS. + * as.c (close_output_file): Remove #ifndef OBJ_VMS. + (main): Ditto. + +2009-03-03 Alan Modra * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. - * po/POTFILES.in: Regenerate. -2007-03-07 Joseph Myers +2009-03-02 Nick Clifton - * 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. + PR 9874 + * config/tc-ia64.c (fix_insn): Fix warning reported by + -Wformat-security. -2007-03-06 Andreas Krebbel +2009-03-02 Qinwei - * config/tc-s390.c (md_parse_option): z9-ec option added. + * config/tc-score7.c: New file. + * doc/c-score.texi: New file. + * Makefile.am: Update dependencies for tc-score.c. + * Makefile.in: Regenerate. + * NEWS: Mention support for Score7 architecture. + * config/tc-score.c: Add support for Score7 architecture. + * config/tc-score.h: Likewise. + * doc/Makefile.am: Add c-score.texi. + * doc/Makefile.in: Regenerate. + * doc/all.texi: Add Score7. + * doc/as.texinfo: Add Score7. -2007-03-02 Paul Brook +2009-03-01 Mark Mitchell - * 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. + * config/tc-arm.c (md_assemble): Allow barrier instructions on + ARMv6-M cores. -2007-03-01 Joseph Myers +2009-03-01 Ralf Wildenhues - * as.c (parse_args): Update copyright date. + * configure: Regenerate. -2007-02-28 Nathan Sidwell +2009-02-26 Peter Bergner - * configure.tgt (sh-*-uclinux, sh[12]-*-uclinux): Specify as elf. + * config/tc-ppc.c (pre_defined_registers): Add "f32" to "f63", + "f.32" to "f.63", "vs0" to "vs63" and "vs.0" to "vs.63". + (parse_cpu): Extend -mpower7 to accept power7 and isel instructions. -2007-02-28 Nick Clifton +2009-02-25 H.J. Lu - 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-i386.c (fits_in_imm4): Removed. - PR gas/2623 - * config/tc-msp430.c (line_separator_char): Change to '{'. +2009-02-24 Helge Deller -2007-02-27 Alan Modra + * config/tc-hppa.c (pa_ip): Add check of immediate values. + (SAVE_IMMEDIATE): New define. - * config/tc-m68hc11.c (fixup24): Correct fixup size. - (build_jump_insn): Likewise. - (build_insn): Likewise. - (s_m68hc11_relax): Likewise. +2009-02-23 Mark Mitchell -2007-02-27 Alan Modra + * config/tc-arm.c (warn_deprecated_sp): New macro. + (do_t_mov_cmp): Permit R13 as the second + argument to "cmp.n". - * config/obj-elf.c (elf_frob_file): frag_wane any new frags. +2009-02-23 H.J. Lu -2007-02-25 Mark Shinwell + * config/tc-i386.c (type_names): Add OPERAND_TYPE_REGYMM. + (pt): Replace UINTS_ALL_ZERO with operand_type_all_zero. - * config/tc-arm.c (do_vfp_nsyn_pop): Use fldmias/fldmiad. +2009-02-23 H.J. Lu -2007-02-23 Alan Modra + * config/tc-i386.c (type_names): Remove OPERAND_TYPE_VEX_IMM4. - * config/tc-mn10300.c (md_convert_frag): Correct fixup size. - (md_assemble): Likewise. +2009-02-23 H.J. Lu -2007-02-22 Alan Modra + * config/tc-i386.c (vex_imm4): Removed. + (VEX_check_operands): Likewise. + (match_template): Updated. - * 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. +2009-02-23 Martin Schwidefsky -2007-02-21 Alan Modra + * doc/all.texi: Set S390. + * doc/as.texinfo: Add S390 support and pull in c-s390.texi. + * doc/Makefile.am (CPU_DOCS): Add c-s390.texi. + * doc/Makefile.in: Likewise. + * doc/c-s390.texi: New. - PR 4082 - * config/tc-avr.h (TC_FX_SIZE_SLACK): Define. +2009-02-12 Nathan Sidwell -2007-02-20 Thiemo Seufer + * config/tc-m68k.c (mcf51qe_ctrl): Add CPUCR. + (mcf52259_ctrl, mcf52277_ctrl, mcf53017_ctrl): New. + (mcf5307_ctrl): Add VBR. + (no_mac): New variable. + (m68k_extensions): Refer to no_mac mask. + (m68k_cpus): Add 51, 51ac, 51cn, 51em, 51jm, 52274, 52277, + 52252..52259, 53011..53017. + (m68k_ip): Process CPUCR. + (init_table): Add cpucr entry. + (m68k_set_extension): Allow negated mask to refer to a variable. + (md_show_usage): Use '%s' to silence fprintf warning. + * config/m68k-parse.h (CPUCR): New control register. - * doc/c-mips.texi: Document 74kc, 74kf, 74kx. +2009-02-10 Nathan Sidwell -2007-02-20 Thiemo Seufer + * config/tc-ppc.c (ppc_insert_operand, md_assemble): Use '%s' for + as_bad calls to silence compiler warning. - * config/tc-mips.c (mips_cpu_info_table): Add 74K configurations. +2009-02-06 Nick Clifton -2007-02-20 Thiemo Seufer - Chao-Ying Fu + PR 9814 + * config/tc-arm.c (MODE_RECORDED): New define. + (output_inst): Record the thumb_mode in the current frag. + (arm_handle_align): Ignore the MODE_RECORDED bit in tc_frag_data. + (arm_init_frag): Only set the tc_frag_data field if it has not + already been set. - * 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. +2009-02-04 H.J. Lu -2007-02-20 Nathan Sidwell + AVX Programming Reference (January, 2009) + * config/tc-i386.c (CPU_FLAGS_PCLMUL_MATCH): New. + (CPU_FLAGS_AVX_MATCH): Updated. + (CPU_FLAGS_32BIT_MATCH): Likewise. + (cpu_flags_match): Likewise. - * config/tc-m68k.c (mcf5210a_ctrl, mcf52235_ctrl, mcf5225_ctrl): New. - (m68k_cpus): Add 5210a..5211a, 52230..52235 5224..5225. +2009-02-03 Sandip Matte -2007-02-18 Alan Modra + * config/tc-mips.c (macro): Handle M_MSGSND, M_MSGLD, M_MSGLD_T, + M_MSGWAIT and M_MSGWAIT_T. + (mips_cpu_info_table): Add XLR entry. + * doc/c-mips.texi (-march): Document xlr. - * 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. +2009-02-03 Eric B. Weddington -2007-02-17 Mark Mitchell - Nathan Sidwell - Vladimir Prus + * config/tc-avr.c (mcu_types): Add ata6289. + * doc/c-avr.texi: Likewise. - * configure.in (--with-bugurl): New option. +2009-02-03 Carlos O'Donell + + * configure.in: AC_SUBST pdfdir. + * Makefile.am: Add install-pdf, install-pdf-am, + and install-pdf-recursive targets. + * doc/Makefile.am: Define pdf__strip_dir. Add + install-pdf and install-pdf-am targets. + * po/Make-in: Add install-pdf target. * 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 - - * 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 - - * 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 - - * 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 - - * 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 - - * configure.tgt: Add arm*-*-uclinux-*eabi. - -2007-02-05 Dave Brolley - Richard Sandiford - DJ Delorie - Stan Cox - Jim Blandy - Nick Clifton - Jim Wilson - Frank Ch. Eigler - Graydon Hoare - Ben Elliston - John Healy - Richard Henderson - - * 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. -2007-02-05 Dave Brolley - - * cgen.c (gas_cgen_install_complex_reloc): Removed. - (complex_reloc_installation_howto): Removed. - -2007-02-05 Dave Brolley - Graydon Hoare - DJ Delorie - Catherine Moore - Michael Chastain - Frank Ch. Eigler - - * 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 - - * 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 - - * config/tc-xtensa.c (xg_build_to_insn): Use tinsn_init. - (xg_expand_assembly_insn, istack_push_space, istack_pop): Likewise. - -2007-02-02 Bob Wilson - - * 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 - - * 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 - - * 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 - - * config/xtensa-relax.c (build_transition): Remove code after as_fatal. - (build_transition_table): Likewise. - -2007-02-01 Bob Wilson - - * 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 - - * write.h (struct fix ): Move. - (struct fix ): 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 - - * 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 - - * 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 - - * config/tc-m32c.c (md_pseudo_table): Add .3byte. +2009-02-03 Maxim Kuvyrkov + + * config/m68k-parse.h (enum pic_relocation): Add values for TLS + relocations. + * config/m68k-parse.y (yylex): Parse TLS relocations. + * config/tc-m68k.c (m68k_elf_cons): New static function. + (md_pseudo_table): Use it. + (get_reloc_code, tc_m68k_fix_adjustable, tc_gen_reloc): Handle TLS + relocations. + (md_apply_fix): Fix to set thread local flag. + (m68k_elf_suffix): New static function; helper for m68k_elf_cons. + +2009-02-03 Vince Weaver + + PR 9779 + * config/tc-pdp11.c (parse_op_no_deferred): Fix handling of + indexed addressing for symbolic expressions. + +2009-01-29 Mark Mitchell + + * config/tc-arm.c (BAD_SP): Define. + (s_arm_unwind_fnstart): Use REG_SP. + (s_arm_unwind_setfp): Likewise. + (reject_bad_reg): New macro. + (do_co_reg): Check for bad registers. + (do_co_reg2c): Likewise. + (do_srs): Use REG_SP. + (do_t_add_sub): Check for bad registers. + (do_t_adr): Likewise. + (do_t_arit3): Likewise. + (do_t_arit3c): Likewise. + (do_t_bfc): Likewise. + (do_t_bfi): Likewise. + (do_t_bfx): Likewise. + (do_t_blx): Likewise. + (do_t_bx): Likewise. + (do_t_bxj): Likewise. + (do_t_clz): Likewise. + (do_t_div): Likewise. + (do_t_mla): Likewise. + (do_t_mlal): Likewise. + (do_t_mov_cmp): Likewise. + (do_t_mov16): Likewise. + (do_t_mvn_tst): Likewise. + (do_t_mrs): Likewise. + (do_t_msr): Likewise. + (do_t_mul): Likewise. + (do_t_mull): Likewise. + (do_t_orn): Likewise. + (do_t_pkhbt): Likewise. + (do_t_pld): Likewise. + (do_t_rbit): Likewise. + (do_t_rev): Likewise. + (do_t_rrx): Likewise. + (do_t_rsb): Likewise. + (do_t_shift): Likewise. + (do_t_simd): Likewise. + (do_t_ssat): Likewise. + (do_t_ssat16): Likewise. + (do_t_sxtah): Likewise. + (do_t_sxth): Likewise. + (do_t_tb): Likewise. + (do_t_usat): Likewise. + (do_t_usat16): Likewise. + (nysn_insert_sp): Use REG_SP. + +2009-01-29 Mark Mitchell + + * config/tc-arm.c (do_t_orn): New function. + (do_t_rrx): Likewise. + (insns): Add orn and rrx. + +2009-01-29 Mark Mitchell + + * config/tc-arm.c (insns): Add qasx, qsax, shasx, shsax, ssax, + uasx, uhasx, uhsx, uqasx, uqsax, usax. + +2009-01-29 Mark Mitchell + + * config/tc-arm.c (insns): Correct encoding of qadd, qdadd, qsub, + qdsub in Thumb-2 mode. + +2009-01-29 Paul Brook + Mark Mitchell + + * config/tc-arm.c (do_t_mul): In Thumb-2 mode, use 16-bit encoding + of MUL when possible. + +2009-01-29 Nick Clifton + + * config/tc-mep.h (DIFF_EXPR_OK): Do not define. + +2009-01-29 Nathan Sidwell + Catherine Moore + + * config/tc-mips.c (append_insn): Cope with a complex reloc + sequence containing an unsupported reloc type. + (enum options): Replace computed #define's constants for option + numbers with this enum. + (struct md_longopts): Use the enum. Allow OPTION_32 in a non-ELF + environment. + (md_parse_option): Allow -32 in a non-ELF environment. + +2009-01-26 Andrew Stubbs + + * config/tc-arm.c (attributes_set_explicitly): New array. + (s_arm_eabi_attribute): Check return value from s_vendor_attribute. + (cpu_arch): Add ARM_ARCH_V5T. + (aeabi_set_attribute_int): New function. + (aeabi_set_attribute_string): New function. + (aeabi_set_public_attributes): Set attributes according to the user's + intentions, rather than the actual state of the binary. + Use aeabi_set_attribute_int and aeabi_set_attribute_string instead of + bfd_elf_add_proc_attr_int and bfd_elf_add_proc_attr_string. + Support WMMXv2. Use attribute names instead of numbers. + * read.c (s_vendor_attribute): Change return type to int. + Return the tag number that was set. + * read.h (s_vendor_attribute): Change return type to int. + +2009-01-26 Eric B. Weddington + + PR 9789 + * config/tc-avr.c (mcu_types): Fix typo in atmega128rfa1 name. + * doc/c-avr.texi: Likewise. + +2009-01-23 Nathan Sidwell + + * doc/c-arm.texi (): Document -mwarn-deprecated. + * config/tc-arm.c (WARN_DEPRECATED): Remove. Replace with ... + (warn_on_deprecated): ... this. + (opcode_lookup, md_assemble): Check it before warning. + (arm_opts): Add m[no-]warn-deprecated. + (md_parse_option): Replace WARN_DEPRECATED with + warn_on_deprecated. -2007-01-22 Nick Clifton +2009-01-23 Andreas Schwab - 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. + * config/tc-mips.c (macro) [M_DINS, M_SEQ_I, M_SNE_I]: Cast + arguments to macro_build to match format. -2007-01-18 Mei Ligang + * config/obj-elf.h (LOCAL_LABEL_PREFIX): Conditionally define. + * config/tc-s390.h (LOCAL_LABEL_PREFIX): Don't define. - 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 +2009-01-19 Nick Clifton - * config/tc-i386.c (build_modrm_byte): Check number of operands - when procssing memory/register operand. + * config/tc-arm.h (CONVERT_SYMBOLIC_ATTRIBUTE): Only define for + ELF format ARM targets. + * config/tc-arm.c (arm_convert_symbolic_attribute): Likewise. -2007-01-12 Nick Clifton +2009-01-19 Nick Clifton - PR gas/3856 - * macro.c (expand_irp): Do not ignore spaces inside quoted - strings. + * configure.tgt: Restore alpha sorting to object format switch + statement. -2007-01-12 Alan Modra +2009-01-19 Andrew Stubbs - * 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. + * read.c (s_vendor_attribute): Allow for unknown flag bits in type. -2007-01-12 Alan Modra +2009-01-16 Mark Shinwell - * input-file.c (input_file_open): Check fgets return. + * config/te-armeabi.h (EABI_DEFAULT): Use EF_ARM_EABI_VER5. + * config/te-armlinuxeabi.h (EABI_DEFAULT): Likewise. -2007-01-11 Paul Brook +2009-01-16 Andrew Stubbs + Daniel Jacobowitz - * config/tc-arm.c (do_t_add_sub): Use Rd and Rs. + * config/tc-arm.c (arm_copy_symbol_attributes): New function. + * config/tc-arm.h (arm_copy_symbol_attributes): New prototype. + (CONVERT_SYMBOLIC_ATTRIBUTE): New define. + * read.c (s_vendor_attribute): Add support for symbolic tag names. + Improve string parser. + * doc/c-arm.texi (ARM Machine Directives): Document + .eabi_attribute symbolic tag names. -2007-01-11 Nick Clifton +2009-01-16 Alan Modra - PR gas/3707 - * config/tc-arm.c (md_begin): Cope with an NULL mcpu_fpu_opt - variable. + * configure.in (commonbfdlib): Delete. + * configure: Regenerate. + * po/POTFILES.in: Regenerate. - * config/tc-mcore.c (md_number_to_chars): Use - number_to_chars_{big|little}endian. +2009-01-15 Andrew Stubbs + Julian Brown + + * config/tc-arm.c (cpu_arch): Change ARM_ARCH_V6M to 11. + +2009-01-15 Andrew Stubbs + + * read.c (s_vendor_attribute): bfd_elf_add_obj_attr_compat -> + bfd_elf_add_obj_attr_int_string. + +2009-01-15 Douglas B Rupp + + * configure.tgt(ia64-*-*vms*): New target. + * dwarf2dbg.h (dwarf2_loc_mark_labels): Make extern. + * tc.h (md_number_to_chars): Declare iff undefined. + * config/obj-elf.c (obj_elf_change_section): Change type of arg + attr to bfd_vma. + (obj_elf_parse_section_letters): Return a bfd_vma. Change type of + variables attr, md_attr to bfd_vma. + (obj_elf_section_word): Likewise. + (obj_elf_section): Change type of variable attr to bfd_vma + * config/obj-elf.h (obj_elf_change_section): Change type of arg + attr to bfd_vma. + * config/tc-ia64.c (bfdver.h,time.h): Include. + (ia64_elf_section_letter): Now returns a bfd_vma. + Handle VMS specific attributes. + (ia64_elf_section_flags): Arg attr now a bfd_vma. + (ia64_init): Don't turn on dependency checking for VMS. + (ia64_target_format): Check for VMS flag bit. + (do_alias): Hande decc$ functions. + (get_vms_time): New function. + (ia64_vms_note): New function. + * config/tc-ia64.h (ia64_elf_section_letter): Now returns a bfd_vma. + (ia64_elf_section_flags): Arg attr now a bfd_vma. + (tc_init_after_args): Define for VMS. + * config/tc-alpha.c (alpha_elf_section_letter): Return a bfd_vma. + (alpha_elf_section_flags): Change type of arg attr to bfd_vma. + * config/tc-alpha.h: Likewise. + * config/tc-i386.c (x86_64_section_letter): Return a bfd_vma. + (x86_64_section_word): Return a bfd_vma. + * config/tc-i386.h: Likewise. + * config/tc-ip2k.c (ip2k_elf_section_flags): Change type of arg + attr to bfd_vma. + * config/tc-ip2k.h: Likewise. + * config/tc-mep.c (mep_elf_section_letter): Return a bfd_vma. + (mep_elf_section_flags): Change type of arg attr to bfd_vma. + * config/tc-mep.h: Likewise. + * config/tc-ppc.c (ppc_section_letter): Return a bfd_vma. + (ppc_section_word): Return a bfd_vma. + (ppc_section_flags): Change type of arg attr to bfd_vma. + * config/tc-ppc.h: Likewise. + * config/tc-frv.h: Provide a prototype for frv_md_number_to_chars. + * config/te-vms.h (DWARF2_DIR_SHOULD_END_WITH_SEPARATOR, + DWAR2_FILE_TIME_NAME, DWARF2_FILE_SIZE_NAME, DWARF2_FILEN_NAME): + New file with new macros + * dwarf2dbg.c (get_filenum, out_file_list): Default and call new + macros. -2007-01-08 Kazu Hirata +2009-01-15 Nick Clifton - * 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. + PR 9722 + * config/tc-arm.c (do_t_nop): Check for availability of Thumb2 + instructions before generating a Thumb2 nop. -2007-01-08 Kai Tietz +2009-01-14 Andreas Krebbel - * configure.tgt: Renamed target x86_64-*-mingw64 to x86_64-*-mingw* + * config/tc-s390.h: Define LOCAL_LABEL_PREFIX. -2007-01-05 H.J. Lu +2009-01-12 Alan Modra - * config/tc-i386.c (set_intel_syntax): Update set_intel_syntax - depending on allow_naked_reg. + * config/tc-spu.c (md_pseudo_table): Add "brinfo". + (brinfo): New var. + (md_assemble): Poke brinfo into branch instructions. + (spu_brinfo): New function. + (md_apply_fix): Don't assume insn fields start off at zero, mask + them to remove possible brinfo. -2007-01-04 Paul Brook +2009-01-10 H.J. Lu - * config/tc-arm.c (do_cpsi): Set mmod bit for 2 argument form. + * doc/c-i386.texi: Reformat. -2007-01-04 H.J. Lu +2009-01-10 H.J. Lu - 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. + * config/tc-i386.c (cpu_arch): Add corei7, .clflush and + .syscall. + (i386_align_code): Handle PROCESSOR_COREI7. + (md_show_usage): Add corei7, clflush and syscall. + (i386_target_format): Replace cpup4 with cpuclflush. -2006-01-04 Julian Brown + * config/tc-i386.h (processor_type): Add PROCESSOR_COREI7. - * 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. + * doc/c-i386.texi: Document corei7, clflush and syscall. -2007-01-04 Paul Brook +2009-01-09 H.J. Lu - * config/tc-arm.c (NEON_ENC_TAB): Fix encoding of vclt, vcle, vaclt - and vacle. + * config/tc-i386.c (cpu_arch): Add .rdtscp. + (md_show_usage): Display rdtscp. -2007-01-03 H.J. Lu + * doc/c-i386.texi: Document rdtscp. - * config/tc-i386.c (swap_operands): Remove branches. +2009-01-09 Peter Bergner -2007-01-03 H.J. Lu + * config/tc-ppc.c (ppc_setup_opcodes): Remove PPC_OPCODE_NOPOWER4 test. + Test the new "deprecated" opcode field. - * config/tc-i386.c: Update copyright year. - * config/tc-i386.h: Likewise. +2009-01-07 Sterling Augustine -2007-01-03 H.J. Lu + * config/tc-xtensa.c (produce_flix): New. + (option_flix, optoin_no_generate_flix, option_no_flix) Define. + (md_longopts): Add support for them. + (md_parse_option): Likewise. + (md_show_usage): Add help message. + (finish_vinsn): Don't allow multi-slot flix when produce_flix + option is set to FLIX_NONE. + * config/xtensa-relax.c (transition_applies): Only relax to + flix branches when produce_flix equals FLIX_ALL. + * config/xtensa-relax.h (flix_level, FLIX_ALL, FLIX_NO_GENERATE + FLIX_NONE): New. + (produce_flix): Declare. - * config/tc-i386.c (smallest_imm_type): Return unsigned int - instead of int. +2009-01-06 Chao-ying Fu -2007-01-03 H.J. Lu + * config/tc-mips.c (mips_ip): Set lastregno to 0xffffffff. + Use strncmp to match jalr and jalr.hb. + Fix a typo. - * config/tc-i386.c: Convert to ISO C90 formatting - * config/tc-i386.h: Likewise. +2009-01-05 H.J. Lu + + AVX Programming Reference (December, 2008) + * config/tc-i386.c (build_modrm_byte): Remove 5 operand instruction + support. Don't swap REG and NDS for FMA. -2007-01-03 David Daney +2009-01-02 Matthias Klose - * config/tc-mips.c (md_show_usage): Clean up -mno-shared - documentation. + * itbl-ops.c (itbl_disassemble): Don't rely on undefined sprintf + behaviour. -For older changes see ChangeLog-2006 +For older changes see ChangeLog-2008 Local Variables: mode: change-log diff --git a/gas/ChangeLog-0001 b/gas/ChangeLog-0001 index b1208c4..7fbc4ed 100644 --- a/gas/ChangeLog-0001 +++ b/gas/ChangeLog-0001 @@ -22,16 +22,6 @@ (sparc_cons_special_reloc): New variable. (sparc_cons): New function. (cons_fix_new_sparc): Use sparc_cons_special_reloc. - * testsuite/gas/sparc/pcrel.s: New test. - * testsuite/gas/sparc/pcrel.d: Expected output. - * testsuite/gas/sparc/pcrel64.s: New test. - * testsuite/gas/sparc/pcrel64.d: Expected output. - * testsuite/gas/sparc/plt.s: New test. - * testsuite/gas/sparc/plt.d: Expected output. - * testsuite/gas/sparc/plt64.s: New test. - * testsuite/gas/sparc/plt64.d: Expected output. - * testsuite/gas/sparc/sparc.exp: Add pcrel, pcrel64, plt and plt64 - tests. 2001-12-20 Thiemo Seufer Daniel Jacobowitz diff --git a/gas/ChangeLog-0203 b/gas/ChangeLog-0203 index 63be7bf..d660bca 100644 --- a/gas/ChangeLog-0203 +++ b/gas/ChangeLog-0203 @@ -238,11 +238,6 @@ 2003-12-03 Alexandre Oliva * config/tc-sh.c: Add support for sh4a and no-fpu variants. - * testsuite/gas/sh/basic.exp: Call tests for sh4a. - * testsuite/gas/sh/{err-sh4a-fp.s, err-sh4a.s, - err-sh4al-dsp.s, sh4a-dsp.d, sh4a-dsp.s, sh4a-fp.d, - sh4a-fp.s, sh4a.d, sh4a.s, sh4al-dsp.d, sh4al-dsp.s: - New files, tests for sh4a and related variants. 2003-12-05 Michael Snyder @@ -2013,8 +2008,6 @@ (dot_cfi): Ditto. (cfi_get_label): Add 'simple' modifier to .cfi_startproc. (dot_cfi_endproc): Reuse already emitted CIEs. - * testsuite/gas/cfi/cfi-i386.d: New pattern. - * testsuite/gas/cfi/cfi-x86-64.d: Ditto. 2003-05-20 Nick Clifton @@ -3106,7 +3099,6 @@ * config/tc-w65.h: Likewise. * config/tc-z8k.c: Likewise. * config/tc-z8k.h: Likewise. - * testsuite/gas/h8300/cmpsi2.s: Likewise. 2002-12-16 Alan Modra @@ -4641,7 +4633,7 @@ Thu Oct 10 14:31:30 2002 J"orn Rennecke * read.c (do_align): Use ATTRIBUTE_UNUSED_LABEL for label, not ATTRIBUTE_UNUSED. -2000-08-28 Catherine Moore +2002-08-28 Catherine Moore * tc-v850.c (v850_relax): Declare. (v850_longcode): New routine. diff --git a/gas/ChangeLog-2005 b/gas/ChangeLog-2005 index 42ae089..99a6b3c 100644 --- a/gas/ChangeLog-2005 +++ b/gas/ChangeLog-2005 @@ -134,8 +134,6 @@ BFD_RELOC_ARM_PCREL_JUMP. (tc_gen_reloc): Handle BFD_RELOC_ARM_PCREL_CALL and BFD_RELOC_ARM_PCREL_JUMP. - gas/testsuite/ - * gas/arm/pic.d: Allow R_ARM_CALL relocations. 2005-12-12 Nathan Sidwell @@ -1442,7 +1440,7 @@ * config/tc-m32r.c (m32r_check_fixup): Fixed X_op check. -2007-07-27 H.J. Lu +2005-07-27 H.J. Lu * config/tc-i386.c (handle_large_common): Declare only for ELF. @@ -1628,7 +1626,7 @@ * Makefile.am: Run "make dep-am". * Makefile.in: Regenerate. -2007-07-15 H.J. Lu +2005-07-15 H.J. Lu * gas/config/tc-i386.h (CpuVMX): New. (CpuUnknownFlags): Add CpuVMX. @@ -1721,33 +1719,6 @@ * config/tc-ms1.c: New. * config/tc-ms1.h: New. - * testsuite/gas/ms1/allinsn.d: New. - * testsuite/gas/ms1/allinsn.s: New. - * testsuite/gas/ms1/badinsn.s: New. - * testsuite/gas/ms1/badinsn1.s: New. - * testsuite/gas/ms1/badoffsethigh.s: New. - * testsuite/gas/ms1/badoffsetlow.s: New. - * testsuite/gas/ms1/badorder.s: New. - * testsuite/gas/ms1/badreg.s: New. - * testsuite/gas/ms1/badsignedimmhigh.s: New. - * testsuite/gas/ms1/badsignedimmlow.s: New. - * testsuite/gas/ms1/badsyntax.s: New. - * testsuite/gas/ms1/badsyntax1.s: New. - * testsuite/gas/ms1/badunsignedimmhigh.s: New. - * testsuite/gas/ms1/badunsignedimmlow.s: New. - * testsuite/gas/ms1/errors.exp: New. - * testsuite/gas/ms1/ldst.s: New. - * testsuite/gas/ms1/misc.d: New. - * testsuite/gas/ms1/misc.s: New. - * testsuite/gas/ms1/ms1-16-003.d: New. - * testsuite/gas/ms1/ms1-16-003.s: New. - * testsuite/gas/ms1/ms1.exp: New. - * testsuite/gas/ms1/msys.d: New. - * testsuite/gas/ms1/msys.s: New. - * testsuite/gas/ms1/relocs.d: New. - * testsuite/gas/ms1/relocs.exp: New. - * testsuite/gas/ms1/relocs1.s: New. - * testsuite/gas/ms1/relocs2.s: New. 2005-07-05 Jan Beulich diff --git a/gas/ChangeLog-2006 b/gas/ChangeLog-2006 index dc933e5..b935f74 100644 --- a/gas/ChangeLog-2006 +++ b/gas/ChangeLog-2006 @@ -2032,7 +2032,7 @@ 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 +2006-04-20 Paul Brook * config/tc-arm.c (s_arm_arch, s_arm_cpu, s_arm_fpu): Enable for all targets. @@ -2506,7 +2506,7 @@ * config/tc-ia64.c (specify_resource): Add the rule 17 from SDM 2.2. -2005-02-22 Paul Brook +2006-02-22 Paul Brook * config/tc-arm.c (do_pld): Remove incorrect write to inst.instruction. @@ -2517,7 +2517,7 @@ * config/tc-arm.c (md_apply_fix): Fix off-by-one errors. 2006-02-17 Shrirang Khisti - Anil Paranjape + Anil Paranjape Shilin Shakti * Makefile.am: Add xc16x related entry. @@ -2631,7 +2631,7 @@ * config/tc-arm.c (do_shift): Remove Thumb-1 constraint. -2005-02-02 Paul Brook +2006-02-02 Paul Brook * 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, diff --git a/gas/ChangeLog-2007 b/gas/ChangeLog-2007 new file mode 100644 index 0000000..89bc3e7 --- /dev/null +++ b/gas/ChangeLog-2007 @@ -0,0 +1,2638 @@ +2007-12-29 H.J. Lu + + * config/tc-i386.c (md_show_usage): Add -mmnemonic, -msyntax, + -mindex-reg, -mnaked-reg and -mold-gcc. + +2007-12-27 John David Anglin + + * config/tc-hppa.h (DWARF2_CIE_DATA_ALIGNMENT): Wrap negative + number in parens. + +2007-12-23 H.J. Lu + + * config/tc-i386.c (set_intel_mnemonic): New. + (intel_mnemonic): Likewise. + (old_gcc): Likewise. + (OPTION_MMNEMONIC): Likewise. + (OPTION_MSYNTAX): Likewise. + (OPTION_MINDEX_REG): Likewise. + (OPTION_MNAKED_REG): Likewise. + (OPTION_MOLD_GCC): Likewise. + (md_pseudo_table): Add .intel_mnemonic and .att_mnemonic. + (match_template): Don't allow AT&T/Intel mnemonic if Intel/AT&T + mnemonic is specified. Don't allow old gcc support if old_gcc + is 0. + (md_longopts): Add -mmnemonic, -msyntax, -mindex-reg, + -mmnaked-reg and -mold-gcc. + (md_parse_option): Handle OPTION_MMNEMONIC, OPTION_MSYNTAX, + OPTION_MINDEX_REG, OPTION_MNAKED_REG and OPTION_MOLD_GCC. + + * doc/c-i386.texi: Docoument -mmnemonic, -msyntax, --mnaked-reg + and AT&T mnemonic vs. Intel mnemonic. + +2007-12-20 Bob Wilson + + * config/tc-xtensa.c (xtensa_elf_cons): Set frag flags for + expressions without suffixes. + (get_frag_property_flags): Preserve is_no_transform flag for frags + not marked as either instructions or literals. + +2007-12-17 H.J. Lu + + * config/tc-i386.c (output_insn): Use ARRAY_SIZE. + (lex_got): Likewise. + +2007-12-17 H.J. Lu + + * config/tc-i386.c (output_insn): Use FRAG_APPEND_1_CHAR + instead of frag_more/md_number_to_chars. + (md_short_jump_size): Removed. + (md_long_jump_size): Likewise. + (md_create_short_jump): Likewise. + (md_create_long_jump): Likewise. + +2007-12-13 Bob Wilson + + * config/tc-xtensa.c (xg_symbolic_immeds_fit): Relax for weak + references but not weak definitions. + +2007-12-12 Bob Wilson + + * config/tc-xtensa.c (xg_symbolic_immeds_fit): Do not relax calls to + weak symbols if longcalls are disabled. + +2007-12-11 Sterling Augustine + Bob Wilson + + * config/tc-xtensa.c (frag_format_size): Handle frags that expand to + wide branches. + (get_aligned_diff): For RELAX_ALIGN_NEXT_OPCODE, skip to the next + non-empty frag to find the LOOP instruction. Change comma typo to + a semicolon. + (relax_frag_immed, convert_frag_immed): Rename wide_insn variable to + from_widen_insn. + +2007-12-11 Alan Modra + + * config/tc-m32r.c (md_begin): Mark .sbss as being bss style section. + +2007-12-10 Richard Sandiford + + * config/tc-mips.h (mips_nop_opcode): Declare. + (NOP_OPCODE): Define. + (mips_segment_info): New structure. + (TC_SEGMENT_INFO_TYPE): Use it instead of insn_label_list. + * config/tc-mips.c (label_list): Adjust for new TC_SEGMENT_INFO_TYPE. + (mips_record_mips16_mode): New function. + (install_insn): Call it. + (mips_align): Likewise. Turn the fill argument into an "int *". + Use frag_align_code for code segments if no fill data is given. + (s_align): Adjust call accordingly. + (mips_nop_opcode): New function. + (mips_handle_align): Use the first variable byte to decide which + nop sequence is needed. Use md_number_to_chars and mips16_nop_insn. + +2007-12-07 Bob Wilson + + * config/tc-xtensa.c (O_pcrel): Define. + (suffix_relocs): Add pcrel suffix. + (md_pseudo_table): Add 4byte and 2byte directives. + (xtensa_elf_cons): Pass correct pcrel argument to fix_new_exp. + (xg_assemble_literal): Likewise. Check for O_pcrel. + (expression_maybe_register): Reorganize. Handle BFD_RELOC_32_PCREL. + (xg_valid_literal_expression): Allow O_pcrel. + (md_pcrel_from, md_apply_fix): Handle BFD_RELOC_32_PCREL. + (tc_gen_reloc): Fix punctuation in error message. + +2007-12-06 Bob Wilson + + * config/tc-xtensa.c (xg_force_frag_space): Delete. + (xg_finish_frag, xg_assemble_literal_space): Replace calls to it. + (xtensa_create_property_segments, xtensa_create_xproperty_segments): + Set output_section for new property sections. Use subseg_set and + seg_info instead of retrieve_segment_info. Adjust arguments to + add_xt_block_frags and add_xt_prop_frags. Use standard functions + to create frags and fix records. + (retrieve_segment_info): Delete. + (add_xt_block_frags, add_xt_prop_frags): Replace calls to + retrieve_segment_info. Remove unused xt_block_sec arguments. + +2007-12-04 Alan Modra + + * config/tc-ppc.c (ppc_tc): Allow a space between toc symbol + name and bracket. + +2007-11-30 Bob Wilson + + * config/tc-xtensa.h (md_allow_eh_opt): Define. + +2007-11-29 Mark Shinwell + + * config/tc-mips.c (mips_cpu_info_table): Add loongson2e + and loongson2f entries. + * doc/c-mips.texi: Document -march=loongson{2e,2f} options. + +2007-11-29 Martin Schwidefsky + + * config/tc-s390.c (md_begin): If the -mesa option is specified + add zarch opcodes to the hash table only if there is no variant + that is available for the esa mode as well. + +2007-11-26 Thomas Ogrisegg + + * config/tc-alpha.c (assemble_insn): Don't segv on NULL reloc_operand. + +2007-11-19 Bob Wilson + + * config/xtensa-istack.h (tinsn_struct): Replace linenum field + with loc_directive_seen and debug_line. + * config/tc-xtensa.c: Include xtensa-istack.h after dwarf2dbg.h. + (xg_build_to_insn): Copy the new fields instead of linenum. + (xg_build_token_insn): Likewise. Abort on INSTR_LABEL_DEF and move + common code out of the switch. + (md_assemble): Set new tinsn fields from DWARF information. Call + dwarf2_consume_line_info. + (xg_assemble_vliw_tokens): Update the code to select the "best" line + number to use new information. Call dwarf2_gen_line_info instead + of dwarf2_emit_insn. + +2007-11-19 Bob Wilson + + * dwarf2dbg.h (dwarf2_loc_directive_seen): New. + * dwarf2dbg.c (loc_directive_seen): Make external and rename to... + (dwarf2_loc_directive_seen): ...this. + (dwarf2_emit_insn, dwarf2_consume_line_info) + (dwarf2_emit_label, dwarf2_directive_loc): Use new name. + +2007-11-19 Bob Wilson + + * dwarf2dbg.c (dwarf2_emit_label): Use dwarf2_consume_line_info. + +2007-11-19 Bob Wilson + + * dwarf2dbg.c (dwarf2_consume_line_info): New. + (dwarf2_emit_insn): Use it here. + (dwarf2_directive_loc): Fix check for consecutive .loc directives + when debug_type is DEBUG_DWARF2. + * dwarf2dbg.h (dwarf2_consume_line_info): New prototype. + * config/tc-ia64.c (ia64_flush_insns): Call dwarf2_consume_line_info. + (md_assemble): Likewise. + +2007-11-17 Thiemo Seufer + + * config/tc-mips.c (md_parse_option): Match mips_optimize to the -O + option supplied, but still keep mips_optimize == 2 as default value. + +2007-11-17 Thiemo Seufer + + * doc/as.texinfo: Document the new attribute value. + +2007-11-16 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add ATmega32HVB device. + * doc/c-avr.texi: Likewise. + +2007-11-16 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add ATmega1284P device. + * doc/c-avr.texi: Likewise. + +2007-11-14 Tristan Gingold + + * config/tc-ia64.c (AR_RUC): Defined. + (ar): Add "ar.ruc". + (specify_resource): Handle AR_RUC like AR_ITC. + +2007-11-13 Nick Clifton + + * config/tc-mn10300.c (mn10300_force_relocation): Force a reloc to + be generated for alignment fixups. + * config/tc-mn10300.h (TC_FORCE_RELOCATION): Call + mn10300_force_relocation. + +2007-11-12 Nick Clifton + + PR gas/5269 + * config/tc-frv.c (md_show_usage): Rewrite usage description to + make it easier to translate. + * gas/po/gas.pot: Regenerate. + +2007-11-12 Tristan Gingold + + * config/tc-ppc.c (md_assemble): If -mregnames, when parsing + PPC_OPERAND_CR always parse as expression to allow register name + followed by an expression. + +2007-11-09 H.J. Lu + + * config/tc-i386.c (match_template): Re-order suffix check. + +2007-11-07 Bob Wilson + + * config/tc-xtensa.c (relaxable_section): Check for .eh_frame. + +2007-11-07 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add ATtiny88 device. + * doc/c-avr.texi: Likewise. + +2007-11-07 Anatoly Sokolov + + * config/tc-avr.c (mcu_types): Add new devices: ATmega48P, + ATmega88P, ATmega168P, Atmega328P + * doc/c-avr.texi: Document new devices. + +2007-11-07 Tristan Gingold + + * config/tc-ppc.c (md_apply_fix): For PPC_TOC16 on XCOFF, uses + offset within the TOC instead of the VMA. + +2007-11-06 Paul Brook + + * config/tc-arm.c (do_mull): Allow overlapping Rm for armv6. + +2007-11-06 Nick Clifton + + * ehopt.c (check_eh_frame): If md_allow_eh_opt is defined, invoke + it to see if the optimizations should be applied. + * config/tc-mn10300.h (md_allow_eh_opt): Define. Only allow call + frame optimization if linker relaxation is not enabled. + +2007-11-05 Danny Smith + + * read.c (ALIGN_LIMIT): Rename to ... + (TC_ALIGN_LIMIT): Guard against prior definition. + * config/tc-i386.h (TC_ALIGN_LIMIT)[TE_PE]: Define. + +2007-11-01 Sterling Augustine + + * config/tc-xtensa.c (xtensa_symbol_new_hook): New. + (xtensa_mark_difference_of_two_symbols): New. + (xtensa_post_relax_hook): Call xtensa_mark_difference_of_two_symbols. + * config/tc-xtensa.h (xtensa_symfield_type): Add next_expr_symbol. + (tc_symbol_new_hook): Define. + +2007-11-01 H.J. Lu + + * config/tc-i386.c (md_assemble): Replace no_xsuf with + no_ldsuf. + (match_template): Likewise. + +2007-11-01 H.J. Lu + + * config/tc-i386.h (LONG_DOUBLE_MNEM_SUFFIX): Use a non-ascii + letter. + +2007-11-01 H.J. Lu + + * config/tc-i386.c (process_suffix): Check addrprefixop0 to + see if the address size override prefix changes the size of the + first operand. + (check_byte_reg): Don't warn if byteokintel is set. + (check_long_reg): Set i.suffix to QWORD_MNEM_SUFFIX if toqword + is set. + (check_qword_reg): Set i.suffix to LONG_MNEM_SUFFIX if todword + is set. + +2007-10-31 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Remove devices that were never produced: + attiny10, atmega83, atmega85, atmega603. + * doc/c-avr.texi: Likewise. + +2007-10-30 Nick Clifton + + * config/tc-mn10300.c (tc_gen_reloc): Fix test that decides when + sym_diff relocs should be generated. + (md_apply_fix): Skip R_MN10300_ALIGN relocs. + (mn10300_fix_adjustable): Do not adjust R_MN10300_ALIGN relocs. + (mn10300_handle_align): New function. Generate R_MN10300_ALIGN + relocs to record alignment requests. + * config/tc-mn10300.h (TC_FORCE_RELOCATION_SUB_SAME): Also force + R_MN10300_ALIGN relocs. + (HANDLE_ALIGN): Define. Call mn10300_handle_align. + +2007-10-30 Nick Clifton + + * doc/as.texinfo (Section): Replace "subsegment" with + "subsection". + +2007-10-27 H.J. Lu + + PR gas/5221 + * config/obj-elf.c (obj_elf_section): Handle optional + parameters for .pushsection. + + * doc/as.texinfo: Document optional parameters for + .pushsection. + +2007-10-24 H.J. Lu + + * configure.in: Move AM_PROG_LIBTOOL after AC_GNU_SOURCE. + * configure: Regenerated. + +2007-10-24 Alan Modra + + * Makefile.am (INCLUDES, DEP_INCLUDES): Remove -D_GNU_SOURCE. + Run "make dep-am". + * configure.in: Invoke AC_GNU_SOURCE. + * Makefile.in: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + +2007-10-19 Nick Clifton + + * expr.c (expr): Test md_allow_local_subtract (if defined) before + allowing the evaluation of an expression involving two symbols + defined in the same section. + * doc/internals.texi (md_allow_local_subtract): Document the new + macro. + * config/tc-mn10300.h (md_allow_local_subtract): Define. + (RELAX_EXPANSION_POSSIBLE): Define. + (MAX_RELOC_EXPANSION): Define. + (TC_FRAG_TYPE): Define. + * config/tc-mn10300.c (md_assemble): Mark fragments as containing code. + (tc_gen_reloc): Return an array of relocs. If necessary generate + two relocs to handle an expressions involving the difference of + two symbols. + (mn10300_fix_adjustable): Do not test TC_FORCE_RELOCATION_LOCAL + when then fixup is not pc-relative. + (mn10300_allow_local_subtract): New function. Determine when it + is safe to compute the difference between two symbols at assemble + time. + +2007-10-19 Alan Modra + + * config/tc-ppc.c (ppc_parse_name): Skip leading '%'. + (md_assemble): When parsing PPC_OPERAND_CR, add '%' to set of + chars that can start a name. + +2007-10-18 Carlos O'Donell + + * config/tc-hppa.c (pa_ip): Fix comment typo. + (pa_comm): Likewise. + +2007-10-18 Nick Clifton + + PR gas/5172 + * config/tc-arc.c (md_estimate_size_before_relax): Change error + message. + (md_convert_frag): Just call abort. + * config/tc-i860.c (md_estimate_size_before_relax): Change error + message. + * config/tc-i860.h (md_convert_frag): Just call abort. + * config/tc-ip2k.c (md_estimate_size_before_relax): Change error + message. + (md_convert_frag): Just call abort. + * config/tc-m68k.c (m68k_ip): Do not attempt translation of + architecture names. + PR gas/5174 + * config/tc-arm.c: Fix formatting and spelling errors. + PR gas/5175 + * config/tc-xc16x.c: Fix formatting and internationalization. + * po/gas.pot: Regenerate. + +2007-10-17 Nick Clifton + + PR gas/5173 + * as.h (ieee_md_atof, vax_md_atof): New prototypes. + * read.c (s_float_space): Allow a zero length return from md_atof + if the error message has been set. + (float_cons): Likewise. + * config/atof-ieee.c (ieee_md_atof): New function. Performs the + md_atof() function in a generic way for IEEE using targets. + * config/atof-vax.c (md_atof): Rename to vax_md_atof. Use the + same error message as ieee_md_atof. + * tc-alpha.c (md_atof): Use ieee_md_atof. Remove #define of vax_md_atof. + * tc-arc.c (md_atof): Use ieee_md_atof. + * tc-arm.c (md_atof): Use sizeof (LITTLENUM_TYPE) instead of the + constant 2. Use a precision of 5 for the 'x' and 'p' types. + * tc-avr.c (md_atof): Use ieee_md_atof. + * tc-bfin.c (md_atof): Use ieee_md_atof. + * tc-cr16.c (md_atof): Use ieee_md_atof. + * tc-crx.c (md_atof): Use ieee_md_atof. + * tc-d10v.c (md_atof): Use ieee_md_atof. + * tc-d30v.c (md_atof): Use ieee_md_atof. + * tc-dlx.c (md_atof): Use ieee_md_atof. + * tc-fr30.c (md_atof): Use ieee_md_atof. + * tc-frv.c (md_atof): Use ieee_md_atof. + * tc-h8300.c (md_atof): Use ieee_md_atof. + * tc-hppa.c (md_atof): Use ieee_md_atof. + * tc-i370.c (md_atof): Use ieee_md_atof. + (i370_dc): Convert the 'E' type to 'f' before calling md_atof. + * tc-i386.c (md_atof): Use ieee_md_atof. + * tc-i860.c (md_atof): Use ieee_md_atof. + * tc-i960.c (md_atof): Use ieee_md_atof. + * tc-ia64.c (md_atof): Use the same error message as ieee_md_atof. + * tc-ip2k.c (md_atof): Use ieee_md_atof. + * tc-iq2000.c (md_atof): Use ieee_md_atof. + * tc-m32c.c (md_atof): Use ieee_md_atof. + * tc-m32r.c (md_atof): Use ieee_md_atof. + * tc-m68hc11.c (md_atof): Use ieee_md_atof. + * tc-m68k.c (md_atof): Use ieee_md_atof. + * tc-maxq.c (md_atof): Use ieee_md_atof. + * tc-mcore.c (md_atof): Use ieee_md_atof. + * tc-mep.c (md_atof): Use ieee_md_atof. + * tc-mips.c (md_atof): Use ieee_md_atof. + * tc-mmix.c (md_atof): Use ieee_md_atof. + * tc-mn10200.c (md_atof): Use ieee_md_atof. + * tc-mn10300.c (md_atof): Use ieee_md_atof. + * tc-msp430.c (md_atof): Use ieee_md_atof. + * tc-mt.c (md_atof): Use ieee_md_atof. + * tc-ns32k.c (md_atof): Use ieee_md_atof. + * tc-openrisc.c (md_atof): Use ieee_md_atof. + * tc-or32.c (md_atof): Use ieee_md_atof. + * tc-pdp11.c (md_atof): New function. Call vax_md_atof. + * tc-pj.c (md_atof): Use ieee_md_atof. + * tc-ppc.c (md_atof): Use ieee_md_atof. + * tc-s390.c (md_atof): Use ieee_md_atof. + * tc-score.c (md_atof): Use ieee_md_atof. + * tc-sh.c (md_atof): Use ieee_md_atof. + * tc-sparc.c (md_atof): Use ieee_md_atof. + * tc-spu.c (md_atof): Use ieee_md_atof. + * tc-tic30.c (md_atof): Use the same error message as ieee_md_atof. + * tc-tic4x.c (md_atof): Use the same error message as ieee_md_atof. + * tc-tic54.c (md_atof): Use ieee_md_atof. + * tc-v850.c (md_atof): Use ieee_md_atof. + * tc-vax.c (md_atof): New function. Call vax_md_atof. + * tc-xc16x.c (md_atof): Use ieee_md_atof. + * tc-xstormy16.c (md_atof): Use ieee_md_atof. + * tc-xtensa.c (md_atof): Use ieee_md_atof. + * tc-z8k.c (md_atof): Use ieee_md_atof. + * doc/internals.texi: Update description of md_atof function. + * po/gas.pot: Regenerate. + +2007-10-16 Bob Wilson + + * doc/as.texinfo (Overview): Add Xtensa --rename-section option. + +2007-10-16 Nick Clifton + + * config/obj-elf.c (obj_elf_type): Accept "common" as a valid + symbol type. + * doc/as.texinfo (.type): Document the types accepted by the + type pseudo op, including "common". + +2007-10-15 Peter Bergner + + * config/tc-ppc.c (ppc_setup_opcodes): Verify instructions are sorted + according to major opcode number. + +2007-10-15 Alan Modra + + * read.c (do_s_func): Check asprintf return status. + * stabs.c (stabs_generate_asm_func): Likewise. + (stabs_generate_asm_endfunc): Likewise. + +2007-10-12 H.J. Lu + + * config/tc-i386.c (process_operands): Simplify implicit xmm0 + handling. + +2007-10-12 H.J. Lu + + * config/tc-i386.c (process_operands): Check the firstxmm0 + field in opcode_modifier for instruction with a implicit + xmm0 as the first operand. + +2007-10-12 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add new devices: AT90PWM2B, + AT90PWM3B. + * doc/c-avr.texi: Document new devices. + +2007-10-12 M R Swami Reddy + + * config/tc-cr16.c: Update the md_relax_table for 1 word b + instruction range information. + +2007-10-12 Daniel Jacobowitz + + * doc/as.texinfo (Object Attributes): New chapter. + (Pseudo Ops): Document .gnu_attribute. + (LNS directives): Correct .loc_mark_labels documentation. + +2007-10-11 Nick Clifton + + * config/obj-elf.c (obj_elf_section): When pushing a section, if + there is a comma then the following argument must be a subsection + number. + +2007-10-11 H.J. Lu + + * doc/c-i386.texi: Update which instruction's operands are + swapped. + +2007-10-11 Nick Clifton + + PR gas/5161 + * config/tc-ia64.c: Allow for translations of error and warning + messages. + * po/gas.pot: Regenerate. + + PR gas/5158 + * config/tc-h8300.c (tc_gen_reloc): Allow for translation of error + message. + * po/gas.pot: Regenerate. + + PR gas/5155 + * config/tc-msp430.c: Fix spelling typos. + +2007-10-11 Nick Clifton + + * doc/as.texinfo (Type): Fix typo: STT_FUNC not STT_FUNCTION. + +2007-10-08 Maciej W. Rozycki + + * config/tc-mips.c (AT): Rename to... + (ATREG): ... this. + (AT): New definition. + (mips_set_options): Rename "noat" to "at"; change the type. + (mips_opts): Update accordingly. + (append_insn): Likewise. + (macro_build_ldst_constoffset): Likewise. + (load_address): Likewise. + (macro, macro2): Likewise. + (s_mipsset): Handle ".set at=REG". Update handling of ".set at" + and ".set noat". + +2007-10-08 Nick Clifton + + * doc/as.texinfo (Previous): Clarify explanation of the behaviour + of this pseudo-op and add a couple of examples. + +2007-10-08 Nick Clifton + + PR gas/5121 gas/5122 gas/5123 + * Makefile.am (CFILES): Add cgen.c + (TARGET_CPU_CFILES): Add tc-iq2000.c, tc-maxq.c, tc-mt.c, + tc-tic4x.c and xtensa-relax.c. + (TARGET_CPU_HFILES): Add tc-iq2000.h, tc-maxq.h, tc-mt.h, + tc-tic4x.h and xtensa-relax.h. + (TARG_ENV_HFILES): Remove te-aux.h, te-delta.h, te-delt88.h, + te-ic960.h, te-linux.h. Add te-aix5.h, te-armeabi.h, + te-freebsd.h, te-gnu.h, te-interix.h, te-vxworks.h. + (CONFIG_ATOF_CFILES): New variable. + (POTFILES): Add CONFIG_ATOF_CFILES to dependencies. Fix typo with + dependency upon TARG_ENV_HFILES. + (DEPTC): Do not put "#include opcodes/-desc.h" into + cgen-desc.h when foo-desc.h does not exit. + Run make dep-am. + * Makefile.in: Regenerate. + * doc/Makefile.in: Regenerate. + * po/POTFILES.in: Regenerate. + PR gas/5124 gas/5125 + * po/es.po: Regenerate. + * po/fr.po: Regenerate. + * po/gas.pot: Regenerate. + * po/rw.po: Regenerate. + * po/tr.po: Regenerate. + * config/obj-elf.c (obj_elf_vtable_inherit): Allow for translation + of error messages. + PR gas/5126 + * config/obj-som.c: Likewise. + PR gas/5129 + * config/tc-arc.c: Likewise. + PR gas/5131 gas/5132 + * config/tc-arm.c: Likewise. + PR gas/5137 + * config/tc-bfin.c: Likewise. + PR gas/5143 + * config/tc-frv.c: Likewise. + PR gas/5142 + * config/tc-dlx.c: Likewise. + +2007-10-08 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add new devices: ATtiny43U, + ATtiny48, AT90PWM216, AT90PWM316. + * doc/c-avr.texi: Document new devices. + +2007-10-08 Nick Clifton + + PR gas/5133 + * config/tc-arm.c (md_apply_fix): Correct error message. + PR gas/5134 + * config/tc-arm.c (md_apply_fix): Likewise. + PR gas/5136 + * config/tc-bfin.c (md_apply_fix): Fix error message. + PR gas/5135 + (Expr_Node_Gen_Reloc_R): Fix spelling typos in error messages. + +2007-10-05 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Check the first 2 8bit + immediate operands directly for instructions with 4 operands. + +2007-10-04 H.J. Lu + + PR gas/5109 + * config/tc-i386.c (process_suffix): Clear QWORD suffix if it + is ignored in Intel mode. + +2007-10-04 Helge Deller + + * read.c (potable): Add string8, string16, string32 and string64. + Add bit size for stringer function. + (stringer_append_char): New. + (stringer): Use stringer_append_char(). + * config/obj-coff.c (obj_coff_ident): Add bit size for stringer function. + * config/obj-elf.c (obj_elf_ident): Likewise. + * config/tc-alpha.c (s_alpha_stringer): Likewise. + * config/tc-dlx.c (dlx_pseudo_table): Likewise. + * config/tc-hppa.c (pa_stringer): Likewise. + * config/tc-ia64.c (md_pseudo_table, pseudo_opcode): Likewise. + * config/tc-m68hc11.c (md_pseudo_table): Likewise. + * config/tc-mcore.c (md_pseudo_table): Likewise. + * config/tc-mips.c (mips_pseudo_table): Likewise. + * config/tc-spu.c (md_pseudo_table): Likewise. + * config/tc-s390.c (md_pseudo_table): Likewise. Replace '2' by '1'. + * doc/as.texinfo (ABORT): Fix identing. + (String): Document new string8, string16, string32, string64 + functions. + * NEWS: Mention the new feature. + +2007-10-03 Nick Clifton + + PR gas/5078 + * config/tc-avr.c (avr_get_constant): Extend error message to + mention that the constant must be positive. + +2007-10-03 Nick Clifton + + * config/tc-avr.c (avr_get_constant): + PR gas/5089 + * config/tc-arm.c (s_arm_unwind_handlerdata): Fix spelling typo. + PR gas/5090 + (md_assemble): Fix spelling typo. + +2007-10-03 Alan Modra + + PR 4303 + * stabs.c (aout_process_stab): Set BSF_DEBUGGING. + +2007-10-01 M R Swami Reddy + + * config/tc-cr16.c: Replaced 'tabs' with white spaces and + added R_CR16_DISP8 as default reloc type for b instructions. + +2007-09-30 H.J. Lu + + PR gas/5080 + * config/tc-i386.c (check_long_reg): Also handle cvttss2si. + (check_qword_reg): Also handle cvttsd2si. + +2007-09-27 Kazu Hirata + + * config/m68k-parse.h (m68k_register): Use MBO instead of MBB. + (last_movec_reg): Change to MBO. + * config/tc-m68k.c (fido_ctrl): Use MBO instead of MBB. + (m68k_ip): Use MBO instead of MBO. + (init_table): Use MBO instead of MBO. Add an entry for mbo. + +2007-09-26 Jan Beulich + + * config/tc-i386.c (build_modrm_byte): Also check for RegEip + when considering IP-relative addressing. + +2007-09-26 Jan Beulich + + * config/tc-i386.h (md_register_arithmetic): Define. + * config/tc-ia64.h (md_register_arithmetic): Likewise. + * doc/internals.texi: Document md_register_arithmetic. + * expr.c (make_expr_symbol): Force O_register expressions into + reg_section. + (expr): Provide default for md_register_arithmetic. Don't resolve + adding/subtracting constants to/from registers if + md_register_arithmetic is zero. + +2007-09-26 Jan Beulich + + * dw2gencfi.c: Conditionalize whole body upon TARGET_USE_CFIPOP. + (cfi_finish): Add second empty instance. + +2007-09-26 Jan Beulich + + * config/tc-ia64.c (dot_pred_rel): Replace specialized handling + with simple call to parse_operand. + +2007-09-26 Jan Beulich + + * config/tc-i386.c (NUM_FLAG_CODE): Remove. + +2007-09-26 Jan Beulich + + * as.c (itbl_parse): Remove #define. + (struct itbl_file_list): Move down and ... + (itbl_files): .. conditionalize upon HAVE_ITBL_CPU. + (show_usage): Conditionalize printing of --itbl option upon + HAVE_ITBL_CPU. + (parse_args): Conditionalize handling of -t/--itbl options upon + HAVE_ITBL_CPU. Remove OPTION_INSTTBL and replace its use with + 't'. + +2007-09-25 H.J. Lu + + * config/tc-i386.c (output_insn): Use i.tm.opcode_length to + check opcode length. + +2007-09-25 Nathan Sidwell + + * config/tc-m68k.c (LONG_BRANCH_VIA_COND): New. + (BRANCHBWPL, FRAG_VAR_SIZE): New. + (md_relax_table): Add BRANCHBWPL entries. + (m68k_ip): Choose BRANCHBWPL relaxation if necessary. + (md_assemble): Use FRAG_VAR_SIZE. + (md_convert_frag_1): Add BRANCHBWPL cases. + (md_estimate_size_before_relaz): Likewise. + +2007-09-24 Carlos O'Donell + + * config/tc-mips.c (s_align): Set max_alignment to 28. + +2007-09-20 H.J. Lu + + PR 658 + * config/tc-i386.c (SCALE1_WHEN_NO_INDEX): Removed. + (set_allow_index_reg): New. + (allow_index_reg): Likewise. + (md_pseudo_table): Add "allow_index_reg" and + "disallow_index_reg". + (build_modrm_byte): Set i.sib.index to NO_INDEX_REGISTER for + fake index registers. + (i386_scale): Updated. + (i386_index_check): Support fake index registers. + (parse_real_register): Return NULL on eiz/riz if fake index + registers aren't allowed. + +2007-09-19 Nick Clifton + + * config/tc-h8300.c (md_apply_fix): Do not abort or handle 8 byte + fixups. + +2007-09-19 Bob Wilson + + * doc/c-xtensa.texi (Xtensa Immediate Relaxation): Fix "addi" typo. + +2007-09-18 Bernd Schmidt + + * config/bfin-parse.y (asm_1): Slightly improve error messages + for "reg += const;". + +2007-09-18 Alan Modra + + PR gas/5026 + * read.c (emit_expr): Only use long long if required and available. + +2007-09-17 H.J. Lu + + * config/tc-i386.c (baseindex): Removed. + (build_modrm_byte): Check reg_num for RIP register instead of + reg_type. + (i386_index_check): Likewise. + +2007-09-17 H.J. Lu + + PR gas/5035 + * config/obj-coff.c (obj_coff_endef): Remove checking size of + def_symbol_in_progress. + +2007-09-17 Evandro Menezes + + PR gas/5026 + * read.c (emit_expr): Use unsigned long long values in warning + message about truncated expressions. + +2007-09-17 H.J. Lu + + * config/tc-i386.c (intel_e04): Revert the last change. + +2007-09-17 Nick Clifton + + * po/es.po: Updated Spanish translation. + +2007-09-15 H.J. Lu + + PR gas/5034 + * config/tc-i386.c (intel_e04): Return 1 if cur_token.code is + T_NIL. + +2007-09-14 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Adjust comment line + wrap. + +2007-09-14 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Use (A || B) instead + of (A || B) != 0. + +2007-09-14 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Adjust indentation. + +2007-09-14 Michael Meissner + Dwarakanath Rajagopal + Tony Linthicum + + * NEWS: Add SSE5 support to NEWS file. + + * config/tc-i386.h (drex_byte): Add fields to allow process_drex + and build_modrm_byte to communicate. + (DREX_OC0): New SSE5 macro. + (DREX_OC0_MASK): Ditto. + (DREX_OC1): Ditto. + (DREX_OC1_MASK): Ditto. + (DREX_XMEM_X1_X2_X2): Ditto. + (DREX_X1_XMEM_X2_X2): Ditto. + (DREX_X1_XMEM_X2_X1: Ditto. + (DREX_X1_X2_XMEM_X1: Ditto. + (DREX_XMEM_X1_X2): Ditto. + (DREX_X1_XMEM_X2): Ditto. + (drex_byte): New structure to describe the DREX byte. + + * config/tc-i386.c (process_drex): New function to handle SSE5 + DREX bits. + (build_modrm_byte): Use the information cached away in + process_drex in the case of DREX instructions. + (i386_insn): Add drex field. + (pi): Add debugging of drex field. + (md_assemble): Treat SSE5 like SSE3 in instructions with an + immediate byte. Move REX field to DREX if this is a DREX + instruction. + (process_operands): Add SSE5 support. + (build_modrm_byte): Ditto. + (output_insn): Ditto. + (cpu_arch): Ditto. + (i386_align_code): Ditto. + +2007-09-12 Jan Beulich + + * config/tc-i386.c (md_assemble): Move handling of extrq/insertq + after generic operand swapping, and swap only the immediate operands. + +2007-09-11 Nathan Sidwell + + * config/tc-m68k.c (m68k_ip): Add mcfisa_c case. + (m68k_elf_final_processing): Add EF_M68K_CF_ISA_C_NODIV. + +2007-09-09 H.J. Lu + + * tc-i386.c (output_insn): Only check SSE4.2 and ABM for 3 + byte opcode. + +2007-09-08 H.J. Lu + + * config/tc-i386.c (cpu_flags_check_x64): Renamed to ... + (cpu_flags_check_cpu64): This. Inline. + (uints_all_zero): New. + (uints_set): Likewise + (uints_equal): Likewise + (UINTS_ALL_ZERO): Likewise + (UINTS_SET): Likewise + (UINTS_CLEAR): Likewise + (UINTS_EQUAL): Likewise + (cpu_flags_and): Likewise. + (cpu_flags_or): Likewise. + (operand_type_and): Likewise. + (operand_type_or): Likewise. + (operand_type_xor): Likewise. + (cpu_flags_not): Inline and use switch instead of loop. + (cpu_flags_match): Updated. + (operand_type_match): Likewise. + (smallest_imm_type): Likewise. + (set_cpu_arch): Likewise. + (pt): Likewise. + (md_assemble): Likewise. + (parse_insn): Likewise. + (optimize_imm): Likewise. + (match_template): Likewise. + (process_suffix): Likewise. + (update_imm): Likewise. + (finalize_imm): Likewise. + (process_operands): Likewise. + (build_modrm_byte): Likewise. + (i386_immediate): Likewise. + (i386_displacement): Likewise. + (i386_index_check): Likewise. + (i386_operand): Likewise. + (i386_target_format): Likewise. + (intel_e11): Likewise. + (operand_type): Remove implicitregister. + (operand_type_check): Updated. Inline. + (cpu_flags_all_zero): Removed. + (operand_type_all_zero): Likewise. + (i386_array_biop): Likewise. + (cpu_flags_biop): Likewise. + (operand_type_biop): Likewise. + +2007-09-08 H.J. Lu + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2007-09-08 H.J. Lu + + * configure.in (AC_CHECK_HEADERS): Add limits.h. + * configure: Regenerated. + * config.in: Likewise. + + * config/tc-i386.c: Include "opcodes/i386-init.h". + (_i386_insn): Use i386_operand_type for types. + (cpu_arch_flags): Updated to new types with bitfield. + (cpu_arch_tune_flags): Likewise. + (cpu_arch_isa_flags): Likewise. + (cpu_arch): Likewise. + (i386_align_code): Likewise. + (set_code_flag): Likewise. + (set_16bit_gcc_code_flag): Likewise. + (set_cpu_arch): Likewise. + (md_assemble): Likewise. + (parse_insn): Likewise. + (process_operands): Likewise. + (output_branch): Likewise. + (output_jump): Likewise. + (parse_real_register): Likewise. + (mode_from_disp_size): Likewise. + (smallest_imm_type): Likewise. + (pi): Likewise. + (type_names): Likewise. + (pt): Likewise. + (pte): Likewise. + (swap_2_operands): Likewise. + (optimize_imm): Likewise. + (optimize_disp): Likewise. + (match_template): Likewise. + (check_string): Likewise. + (process_suffix): Likewise. + (check_byte_reg): Likewise. + (check_long_reg): Likewise. + (check_qword_reg): Likewise. + (check_word_reg): Likewise. + (finalize_imm): Likewise. + (build_modrm_byte): Likewise. + (output_insn): Likewise. + (disp_size): Likewise. + (imm_size): Likewise. + (output_disp): Likewise. + (output_imm): Likewise. + (gotrel): Likewise. + (i386_immediate): Likewise. + (i386_displacement): Likewise. + (i386_index_check): Likewise. + (i386_operand): Likewise. + (parse_real_register): Likewise. + (i386_intel_operand): Likewise. + (intel_e09): Likewise. + (intel_bracket_expr): Likewise. + (intel_e11): Likewise. + (cpu_arch_flags_not): New. + (cpu_flags_check_x64): Likewise. + (cpu_flags_all_zero): Likewise. + (cpu_flags_not): Likewise. + (i386_cpu_flags_biop): Likewise. + (cpu_flags_biop): Likewise. + (cpu_flags_match); Likewise. + (acc32): New. + (acc64): Likewise. + (control): Likewise. + (reg16_inoutportreg): Likewise. + (disp16): Likewise. + (disp32): Likewise. + (disp32s): Likewise. + (disp16_32): Likewise. + (anydisp): Likewise. + (baseindex): Likewise. + (regxmm): Likewise. + (imm8): Likewise. + (imm8s): Likewise. + (imm16): Likewise. + (imm32): Likewise. + (imm32s): Likewise. + (imm64): Likewise. + (imm16_32): Likewise. + (imm16_32s): Likewise. + (imm16_32_32s): Likewise. + (operand_type): Likewise. + (operand_type_check): Likewise. + (operand_type_match): Likewise. + (operand_type_register_match): Likewise. + (update_imm): Likewise. + (set_code_flag): Also update cpu_arch_flags_not. + (set_16bit_gcc_code_flag): Likewise. + (md_begin): Likewise. + (parse_insn): Use cpu_flags_check_x64 to check 64bit support. + Use cpu_flags_match to match instructions. + (i386_target_format): Update cpu_arch_isa_flags and + cpu_arch_tune_flags to i386_cpu_flags type with bitfield. + (smallest_imm_type): Check cpu_arch_tune to tune for i486. + (match_template): Don't initialize overlap0, overlap1, + overlap2, overlap3 and operand_types. + (process_suffix): Handle crc32 with 64bit register. + (MATCH): Removed. + (CONSISTENT_REGISTER_MATCH): Likewise. + + * config/tc-i386.h (arch_entry): Updated to i386_cpu_flags + type. + +2007-09-06 H.J. Lu + + * config/tc-i386.c (match_template): Handle invlpga, vmload, + vmrun and vmsave in SVME. + (process_suffix): Likewise. + +2007-09-05 H.J. Lu + + * config/tc-i386.c (i386_index_check): Don't use RegRex + on the reg_type field. + (parse_real_register): Use `||' instead of `|'. + +2007-09-04 H.J. Lu + + * config/tc-i386.c (process_operands): Remove segment override + check on SVME instructions. + (i386_index_check): Remove memory operand check on SVME + instructions. + +2007-09-04 Alan Modra + + * config/tc-spu.c (struct spu_insn): Delete "flag". Add "reloc". + (md_assemble): Update init of insn. Use insn.reloc instead of + calculating from flag. + (get_imm): Set reloc rather than flag. + (calcop): Formatting. + +2007-08-29 Daniel Jacobowitz + + * dwarf2dbg.c (dwarf2_directive_loc): Emit duplicate .loc directives. + +2007-08-28 Daniel Jacobowitz + + * doc/c-arc.texi: Fix typo. + +2007-08-28 H.J. Lu + + * config/tc-i386.c (process_suffix): Handle cmpxchg8b in + Intel mode. + +2007-08-28 Nathan Sidwell + + * config/tc-m68k.c (mcf52235_ctrl): Add cache registers. + (mcf5253_ctrl): Add RAMBAR, MBAR, MBAR2. + (mcf5407_ctrl): New. + (m68k_cpus): Adjust 5407 entry. + +2007-08-28 Maxim Kuvyrkov + + * config/tc-m68k.c (mcf51qe_ctrl): Define 51QE control registers. + (m68k_cpus): Define 51QE cpu. + +2007-08-28 Mark Shinwell + Joseph Myers + + * as.c (main): Flush stderr before printing listings to ensure + consistent output order across platforms. + +2007-08-28 Robert Sebastian Gerus + + * configure.tgt: Add support for i[3-7]86-*-dragonfly*. + +2007-08-24 Joseph Myers + Paul Brook + + * remap.c: New. + * as.h (remap_debug_filename, add_debug_prefix_map): Declare. + * as.c (show_usage): Document --debug-prefix-map option. + (parse_args): Handle --debug-prefix-map. + * dwarf2dbg.c (out_file_list, out_debug_info): Remap debug paths. + * stabs.c (stabs_generate_asm_file): Remap debug paths. + * Makefile.am (GAS_CFILES): Add remap.c + (GENERIC_OBJS): Add remap.o. + Regenerate dependencies. + * Makefile.in: Regenerate. + * doc/as.texinfo (--debug-prefix-map): Document. + +2007-08-24 Aurelien Jarno + + * config/tc-arm.c (md_apply_fix): Cast bfd_vma values to long + before printing them. + +2007-08-24 Anders Waldenborg + Alan Modra + + * config/tc-i386.c (lex_got): Don't scan past a comma. + +2007-08-23 Ben Elliston + + * config/tc-ppc.c (parse_cpu): Handle "750cl". + (pre_defined_registers): Add "gqr0" to "gqr7", "gqr.0" to "gqr.7". + (md_show_usage): Document -m750cl. + (md_assemble): Handle two delimiters in succession (eg. `),'). + * doc/c-ppc.texi (PowerPC-Opts): Document -m750cl. + +2007-08-23 Ben Elliston + + * doc/c-arm.texi (ARM Directives): Move brackets out of @vars. + +2007-08-17 Alan Modra + + PR gas/4079 + * config/tc-i386.c (x86_cons): Complain about invalid @got etc. + expressions. + (i386_immediate): Detect and complain about more cases of + invalid immediate expressions. Return failure rather than + converting them to zero. + (i386_displacement): Likewise. + +2007-08-17 Alan Modra + + * po/Make-in: Add --msgid-bugs-address to xgettext invocation. + +2007-08-14 Andreas Schwab + + * config/tc-ia64.c (tc_gen_reloc): Return NULL if relocation is + unrepresentable. + +2007-08-12 Matthias Klose + + * doc/Makefile.am (AM_MAKEINFOFLAGS, TEXI2DVI): Include + $(top_srcdir)/../../bfd/doc. + * doc/Makefile.in: Regenerate. + +2007-08-10 Nick Clifton + + * NEWS: Add a marker for the 2.18 features. + +2007-08-09 Paul Brook + + * config/tc-arm.c (relaxed_symbol_addr): Compensate for alignment. + +2007-08-09 H.J. Lu + + * config/tc-i386.c (check_byte_reg): Support pextrb and pinsrb. + +2007-07-29 H.J. Lu + + * config/tc-i386.c (check_long_reg): Allow cvtss2si to convert + DWORD memory to Reg64 in Intel synax. + (check_qword_reg): Allow cvtsd2si to convert QWORD memory to + Reg32 in Intel syntax. + +2007-07-25 Sterling Augustine + + * config/tc-xtensa.c (xtensa_extui_opcode): New. + (xg_expand_assembly_insn): Check for invalid extui operands. + (md_begin): Initialize xtensa_extui_opcode. + +2007-07-24 Nick Clifton + + * config/tc-mep.h (skip_whitespace): Remove definition. + +2007-07-23 H.J. Lu + + * config/tc-i386.c (cpu_arch): Change i386 to PROCESSOR_I386. + (f32_15): Removed. + (jump_31): New. + (f32_patt): Remove f32_15. + (f16_patt): Likewise. + (i386_align_code): Updated to alt_long_patt for 64bit by + default. + + * config/tc-i386.h (processor_type): Add PROCESSOR_I386. + +2007-07-23 Evandro Menezes + + * config/tc-i386.c (i386_align_code): Enable alignment up to + MAX_MEM_FOR_RS_ALIGN_CODE bytes. Remove special treatment + for K8. + + * config/tc-i386.h (MAX_MEM_FOR_RS_ALIGN_CODE): Changed to 31. + +2007-07-20 Nick Clifton + + * app.c (do_scrub_chars): Provide a one character buffer to hold a + pushed back newline at the end of an unterminated quoted string. + +2007-07-14 Nick Clifton + + * config/tc-arm.c (create_register_alias): Return a boolean rather + than an integer. + Check the return value of insert_reg_alias and do not continue to + create aliases once an insertion has failed. + (s_unreq): Delete the all-upper-case and all-lower-case + alternatives as well. + +2007-07-12 Kai Tietz + + * symbols.c: Print bfd_hostptr_t to file via fprintf_vma. + * write.c: Likewise. + +2007-07-11 Daniel Jacobowitz + + * config/tc-mips.c (mips_dwarf2_format, mips_dwarf2_addr_size): Use + HAVE_64BIT_SYMBOLS. + +2007-07-04 Richard Sandiford + + * config/tc-mips.c (mips_cpu_info_table): Add new entries for + {24k,24ke,34k,74k}f{2_1,1_1,x}. Also add an entry for 74kf3_2. + Deprecate *x and *fx. + * doc/c-mips.texi: Document the new CPU arguments. Deprecate + *x and *fx. + +2007-07-04 H.J. Lu + + * config/obj-coff.h (x86_64_target_format): Renamed to ... + (i386_target_format): This + (TARGET_FORMAT): Use i386_target_format. + + * config/tc-i386.c (x86_64_target_format): Removed. + (i386_target_format): Handle PE formats. + +2007-07-04 Nick Clifton + + * symbols.c (symbol_relc_make_value): Use bfd_sprintf_vma in order + to get the right length of printed value. + +2007-07-03 Nick Clifton + + * COPYING: Replace with GPLv3 text. + * app.c: Update copyright notice to refer to GPLv3. + * as.c, as.h, asintl.h, atof_generic.c, bignum.h, bit_fix.h, + cgen.c, cond.c, debug.c, depend.c, dw2gencfi.c, dw2gencfi.h, + dwarf2dbg.c, dwarf2dbg.h, ecoff.c, ecoff.h, ehopt.c, emul.h, + emul_target.h, expr.c, expr.h, flonum-copy.c, flonum.h, + flonum-konst.c, frags.c, frags.h, hash.c, hash.h, input-file.c, + input-file.h, input-scrub.c, ibtl-lex.h, itbl-lex.l, itbl-ops.c, + itbl-ops.h, itbl-parse.y, listing.c, listing.h, literal.c, + macro.c, messages.c, obj.h, output-file.c, output-file.h, read.c, + read.h, sb.c, sb,h, stabs.c, struc-symbol.h, subsegs.c, subsegs.h, + symbols.c, symbols.h, tc.h, write.c, write.h, config/aout_gnu.h, + config/config/atof-ieee.c, config/atof-vax.c, config/bfin-aux.h, + config/bfin-defs.h, config/bfin-lex.l, config/bfin-parse.y, + config/itbl-mips.h, config/m68k-parse.h, config/m68k-parse.y, + config/obj-aout.c, config/obj-aout.h, config/obj-coff.c, + config/obj-coff.h, config/obj-ecoff.c, config/obj-ecoff.h, + config/obj-elf.c, config/obj-elf.h, config/obj-evax.c, + config/obj-evax.h, config/obj-multi.h, config/obj-som.c, + config/obj-som.h, config/tc-alpha.c, config/tc-alpha.h, + config/tc-arc.c, config/tc-arc.h, config/tc-arm.c, + config/tc-arm.h, 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, config/tc-crx.h, config/tc-d10v.c, + config/tc-d10v.h, config/tc-d30v.c, config/tc-d30v.h, + config/tc-dlx.c, config/tc-dlx.h, config/tc-fr30.c, + config/tc-fr30.h, config/tc-frv.c, config/tc-frv.h, + config/tc-generic.c, config/tc-generic.h, config/tc-h8300.c, + config/tc-h8300.h, config/tc-hppa.c, config/tc-hppa.h, + config/tc-i370.c, config/tc-i370.h, config/tc-i386.c, + config/tc-i386.h, config/tc-i860.c, config/tc-i860.h, + config/tc-i960.c, config/tc-i960.h, config/tc-ia64.c, + config/tc-ia64.h, config/tc-ip2k.c, config/tc-ip2k.h, + config/tc-iq2000.c, config/tc-iq2000.h, config/tc-m32c.c, + config/tc-m32c.h, config/tc-m32r.c, config/tc-m32r.h, + config/tc-m68hc11.c, config/tc-m68hc11.h, config/tc-m68k.c, + config/tc-m68k.h, config/tc-maxq.c, config/tc-maxq.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, config/tc-mmix.h, config/tc-mn10200.c, + config/tc-mn10200.h, config/tc-mn10300.c, config/tc-mn10300.h, + config/tc-msp430.c, config/tc-msp430.h, config/tc-mt.c, + config/tc-mt.h, config/tc-ns32k.c, config/tc-ms32k.h, + config/tc-openrisc.c, config/tc-openrisc.h, config/tc-or32.c, + config/tc-or32.h, config/tc-pdp11.c, config/tc-pdp11.h, + config/tc-pj.c, config/tc-pj.h, 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-tic4x.c, + config/tc-tic4x.h, config/tc-tic54x.c, config/tc-tic54x.h, + config/tc-v850.c, config/tc-v850.h, config/tc-vax.c, + config/tc-vax.h, config/tc-xc16x.c, config/tc-x16x.h, + config/tc-xstormy16.c, config/tc-xstormy16.h, config/tc-xtensa.c, + config/tc-xtensa.h, config/tc-z80.c, config/tc-z80.h, + config/tc-z8k.c, config/tc-z8k.h, config/te-386bsd.h, + config/te-freebsd.h, config/te-hppa.h, config/te-irix.h, + config/te-netware.h, config/te-sparcaout.h, config/te-tmips.h, + config/te-vxworks.h, config/vax-inst.h, config/xtensa-istack.h, + config/xtensa-relax.c, config/xtensa-relax.h: Likewise. + + * flonum-mult.c: Likewise, and also correct typo referring to + non-existant GNU Assembler General Public License. + * config/tc-m68851.h: Likewise. + * NEWS: Mention the new license. Also note where the 2.17 release + happened. + * config/e-crisaout.c: Add copyright header. + * config/e-criself.c, config/e-i386aout.c, config/e-i386coff.c, + config/e-i386elf.c, config/e-mipscoff.c, config/e-mipself.c, + config/obj-multi.c, config/te-aix5.h, config/te-armeabi.h, + config/te-armlinuxeabi.h, config/te-dynix.h, config/te-epoc-pe.h, + config/te-generic.h, config/te-gnu.h, config/te-go32.h, + config/te-hppa64.h, config/te-hppalinux64.h, config/te-hpux.h, + config/te-i386aix.h, config/te-ia64aix.h, config/te-interix.h, + config/te-linux.h, config/te-lnews.h, config/te-lynx.h, + config/te-mach.h, config/te-macos.h, config/te-nbsd532.h, + config/te-nbsd.h, config/te-pc532mach.h, config/te-pe.h, + config/te-pep.h, config/te-psos.h, config/te-riscix.h, + config/te-sun3.h, config/te-svr4.h, config/te-symbian.h, + config/te-wince-pe.h: Likewise. + +2007-07-03 Nathan Sidwell + + * 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. + +2007-07-03 Alan Modra + + 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. + +2007-07-03 Mikkel Lauritsen + + PR 4722 + * app.c (do_scrub_chars ): Check for output buffer full + after memcpy. + +2007-07-02 Joseph Myers + + * 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 + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * doc/Makefile.in: Regenerate. + * po/POTFILES.in: Regenerate. + * po/gas.pot: Regenerate. + +2007-07-02 Alan Modra + + * config/tc-ppc.c (ppc_pe_section): Comment out code assigning + coff section flag values to bfd section flag. + +2007-06-30 H.J. Lu + + * aclocal.m4: Regenerated. + * doc/Makefile.in: Likewise. + * Makefile.in: Likewise. + +2007-06-29 Joseph Myers + + * as.c (main): Only call create_obj_attrs_section if IS_ELF. + +2007-06-29 Joseph Myers + + * 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. + +2007-06-29 M R Swami Reddy + + * 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. + +2007-06-26 Paul Brook + + * config/tc-arm.c (parse_operands): Accept generic coprocessor regs + for OP_RVC. + (reg_names): Add fpinst, pfinst2, mvfr0 and mvfr1. + +2007-06-25 H.J. Lu + + * config/tc-i386.c (process_operands): Replace regKludge + with RegKludge. + +2007-06-25 Richard Sandiford + + * 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. + +2007-06-22 Sterling Augustine + + * 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 + + * config/tc-i386.c (disp_size): New. + (imm_size): Likewise. + (output_disp): Use disp_size and imm_size. + (output_imm): Use imm_size. + +2007-06-19 Sterling Augustine + + * 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. + +2007-06-14 Paul Brook + + * config/tc-arm.c (do_t_mov_cmp): Handle shift by register and + narrow shift by immediate. + +2007-06-14 H.J. Lu + + * Makefile.am (ACLOCAL_AMFLAGS): Add -I ../config -I ../bfd. + + * acinclude.m4: Don't include m4 files. + (BFD_BINARY_FOPEN): Removed. + Remove libtool kludge. + + * Makefile.in: Regenerated. + * doc/Makefile.in: Likewise. + * aclocal.m4: Likewise. + * configure: Likewise. + +2007-06-11 Sterling Augustine + Bob Wilson + + * 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 + + * config/tc-arm.c (s_align): Pad code sections appropriately. + +2007-06-05 Paul Brook + + * config/tc-arm.c (insns): Correct Thumb-2 ldrd/strd opcodes. + +2007-06-05 Nick Clifton + + PR gas/4587 + * config/tc-sparc.c (sparc_ip): Terminate tls_ops array. + +2007-06-05 Alan Modra + + * 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. + +2007-05-31 Paul Brook + + * config/tc-arm.c (insns): Allow strex on M profile cores. + +2007-05-29 David S. Miller + Jakub Jelinek + + PR gas/4558 + * config/tc-sparc.c (md_apply_fix): Fix relocation overflow checks + for BFD_RELOC_SPARC_WDISP16 and BFD_RELOC_SPARC_WDISP19. + +2007-05-29 Alan Modra + + * config/tc-spu.h: Wrap in #ifndef/#endif. Delete coff macros. + +2007-05-29 Alan Modra + + * config/tc-ppc.c: Convert to ISO C. + * config/tc-ppc.c: Likewise. + +2007-05-29 Alan Modra + + * write.h (EXEC_MACHINE_TYPE): Delete. + (string_byte_count, section_alignment): Delete. + +2007-05-28 Nathan Sidwell + + * app.c (do_scrub_chars): Cope with \ at end of buffer. + +2007-05-26 Alan Modra + + * 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. + +2007-03-25 Paul Brook + + * 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. + +2007-05-24 Steve Ellcey + + * Makefile.in: Regnerate. + * configure: Regenerate. + * aclocal.m4: Regenerate. + * doc/Makefile.in: Regenerate. + +2007-05-22 Bob Wilson + + * doc/c-xtensa.texi (Xtensa Automatic Alignment): Remove statements + and index entries about automatic alignment of ENTRY instructions. + +2007-05-22 Nick Clifton + + * doc/as.texinfo: Use @copying around the copyright notice. + +2007-05-18 Joseph Myers + + * config/tc-mips.c (s_mipsset): Use generic s_set for directives + containing a comma. + +2007-05-17 H.J. Lu + + PR gas/4517 + 2003-06-05 Michal Ludvig + * 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 + + * 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 + + * config/tc-arm.c (v7m_psrs): Add uppercase PSR names and xpsr. + +2007-05-15 Mark Shinwell + + * app.c (do_scrub_chars): Don't damage \@ pseudo-variables. + +2007-05-15 Vincent Riviere + + 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 + + * config/tc-mips.c (md_parse_option): Fix parsing of -O option. + +2007-05-14 Mei Ligang + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + Nick Clifton + + 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 + + PR 4448 + * config/tc-ppc.c (ppc_insert_operand): Don't increase min for + PPC_OPERAND_PLUS1. + +2007-05-01 H.J. Lu + + * 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 + + * 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 + + PR 4436 + * config/tc-ppc.c (ppc_insert_operand): Disable range check if + min > max. + +2007-04-28 Thiemo Seufer + + * config/tc-mips.c: Fix comment. + +2007-04-26 Anatoly Sokolov + + * 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 + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2007-04-23 Nathan Sidwell + + * 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. + +2007-04-22 Alan Modra + + * 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. + +2007-04-21 Alan Modra + + * 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. + +2007-04-21 Nick Clifton + + * config/atof-vax.c (md_atof): Fix comparison inside know(). + + * config/tc-ia64.c (emit_one_bundle): Fix typo. + +2007-04-21 Alan Modra + + * 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 + + * 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) : Detect when RAMBAR_ALT should be used. Add it + to control register mapping. + +2007-04-20 Alan Modra + + * 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 + + * 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 + + * 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 + + * config/tc-arm.c (insns): Allow rsb and rsbs on Thumb-1. + +2007-04-19 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2007-04-19 Nathan Froyd + + * doc/c-ppc.texi (PowerPC-Opts): Document -me500, -me500x2, -mspe. + +2007-04-18 H.J. Lu + + * doc/c-i386.texi; Document .ssse3, .sse4.1, .sse4.2 and .sse4. + +2007-04-18 H.J. Lu + + * 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 + + * 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 + + * config/tc-arm.c (do_t_rsb): Use 16-bit encoding when possible. + +2007-04-16 Kaz Kojima + + * config/tc-sh.c (sh_handle_align): Call as_bad_where instead + of as_warn_where for misaligned data. + +2007-04-15 Kaz Kojima + + * config/tc-sh.c (align_test_frag_offset_fixed_p): Handle + rs_fill frags. + +2007-04-14 Steve Ellcey + + * Makefile.am: Add ACLOCAL_AMFLAGS. + * Makefile.in: Regenerate. + +2007-04-14 Kaz Kojima + + * 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. + +2007-04-06 Matt Thomas + + * 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. + +2007-04-04 Kazu Hirata + + * config/tc-m68k.c (HAVE_LONG_BRANCH): Add fido_a. + +2007-04-04 Paul Brook + + * config/tc-arm.c (do_neon_ext): Enforce immediate range. + (insns): Use I15 for vext. + +2007-04-04 Paul Brook + + * configure.tgt: Loosen checks for arm uclinux eabi targets. + +2007-04-02 Sterling Augustine + + * config/tc-xtensa.c (xtensa_flush_pending_output): Check + outputting_stabs_line_debug. + +2007-03-26 Anatoly Sokolov + + * 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. + +2007-04-02 Richard Sandiford + + * 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. + +2007-03-30 Sterling Augustine + Bob Wilson + + * 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 + + * config/tc-i386.c (process_suffix): Reindent a bit. + +2007-03-30 Paul Brook + + * 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. + +2007-03-29 DJ Delorie + + * 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. + +2007-03-29 Nick Clifton + + * 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. + +2007-03-28 H.J. Lu + + * 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. + +2007-03-28 Richard Sandiford + Phil Edwards + + * doc/as.texinfo: Put the contents after the title page rather + than at the end of the document. + +2007-03-27 Alan Modra + + * NEWS: Mention ".reloc". + +2007-03-26 Sterling Augustine + + * config/tc-xtensa.c (xg_translate_idioms): Allow assembly idioms + in FLIX instructions. + +2007-03-26 Julian Brown + + * 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. + +2007-03-26 Julian Brown + + * doc/c-arm.texi: Add documentation for .dn/.qn directives. + +2007-03-26 Alan Modra + + * 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. + +2007-03-24 Paul Brook + + * config/tc-arm.c (do_t_ldmstm): Error on Thumb-2 addressing modes. + +2007-03-24 Paul Brook + Mark Shinwell + + * 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. + +2007-03-23 H.J. Lu + + * config/tc-i386.c (md_begin): Allow '.' in mnemonic. + +2007-03-23 Mark Shinwell + + * 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 + + * 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 + + * doc/as.texinfo: Include VERSION_PACKAGE when reporting version. + +2007-03-21 H.J. Lu + + * config/tc-i386.c (process_suffix): Check 0x90 instead of + xchg for xchg %rax,%rax. + +2007-03-21 H.J. Lu + + * 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 + + PR binutils/4218 + * config/tc-i386.c (match_template): Properly handle 64bit mode + "xchg %eax, %eax". + +2007-03-21 Anton Ertl + + PR gas/4124 + * config/tc-alpha.c (emit_ustX): Fix ustq code generation. + +2007-03-21 H.J. Lu + + * 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 + + * config/tc-i386.h (NOP_OPCODE): Restore. + +2007-03-18 Mark Shinwell + + * 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 + + * config/tc-m68k.c (m68k_cpus): Add an entry for fidoa. + +2007-03-15 H.J. Lu + + * 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 + + PR gas/4184 + * app.c (do_scrub_chars): PUT after setting states. + +2007-03-15 H.J. Lu + + * 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 + + * 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 + + * 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 + + * config/tc-arm.c (T16_32_TAB): Fix dec_sp encoding. + +2007-03-14 Alan Modra + + 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 + + * 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 + + * 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 + + * config/tc-i386.h (WORKING_DOT_WORD): Define. + +2007-03-09 Alexandre Oliva + + * app.c (do_scrub_chars): Turn #"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 + + * symbols.c (symbol_relc_make_sym): Comment typo fixes. + +2007-03-08 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * po/POTFILES.in: Regenerate. + +2007-03-07 Joseph Myers + + * 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. + +2007-03-06 Andreas Krebbel + + * config/tc-s390.c (md_parse_option): z9-ec option added. + +2007-03-02 Paul Brook + + * 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. + +2007-03-01 Joseph Myers + + * as.c (parse_args): Update copyright date. + +2007-02-28 Nathan Sidwell + + * configure.tgt (sh-*-uclinux, sh[12]-*-uclinux): Specify as elf. + +2007-02-28 Nick Clifton + + 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. + + PR gas/2623 + * config/tc-msp430.c (line_separator_char): Change to '{'. + +2007-02-27 Alan Modra + + * config/tc-m68hc11.c (fixup24): Correct fixup size. + (build_jump_insn): Likewise. + (build_insn): Likewise. + (s_m68hc11_relax): Likewise. + +2007-02-27 Alan Modra + + * config/obj-elf.c (elf_frob_file): frag_wane any new frags. + +2007-02-25 Mark Shinwell + + * config/tc-arm.c (do_vfp_nsyn_pop): Use fldmias/fldmiad. + +2007-02-23 Alan Modra + + * config/tc-mn10300.c (md_convert_frag): Correct fixup size. + (md_assemble): Likewise. + +2007-02-22 Alan Modra + + * 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 + + PR 4082 + * config/tc-avr.h (TC_FX_SIZE_SLACK): Define. + +2007-02-20 Thiemo Seufer + + * doc/c-mips.texi: Document 74kc, 74kf, 74kx. + +2007-02-20 Thiemo Seufer + + * config/tc-mips.c (mips_cpu_info_table): Add 74K configurations. + +2007-02-20 Thiemo Seufer + Chao-Ying Fu + + * 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 + + * 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 + + * 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 + Nathan Sidwell + Vladimir Prus + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * configure.tgt: Add arm*-*-uclinux-*eabi. + +2007-02-05 Dave Brolley + Richard Sandiford + DJ Delorie + Stan Cox + Jim Blandy + Nick Clifton + Jim Wilson + Frank Ch. Eigler + Graydon Hoare + Ben Elliston + John Healy + Richard Henderson + + * 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. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2007-02-05 Dave Brolley + + * cgen.c (gas_cgen_install_complex_reloc): Removed. + (complex_reloc_installation_howto): Removed. + +2007-02-05 Dave Brolley + Graydon Hoare + DJ Delorie + Catherine Moore + Michael Chastain + Frank Ch. Eigler + + * 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 + + * 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 + + * config/tc-xtensa.c (xg_build_to_insn): Use tinsn_init. + (xg_expand_assembly_insn, istack_push_space, istack_pop): Likewise. + +2007-02-02 Bob Wilson + + * 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 + + * 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 + + * 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 + + * config/xtensa-relax.c (build_transition): Remove code after as_fatal. + (build_transition_table): Likewise. + +2007-02-01 Bob Wilson + + * 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 + + * write.h (struct fix ): Move. + (struct fix ): 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 + + * 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 + + * 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 + + * config/tc-m32c.c (md_pseudo_table): Add .3byte. + +2007-01-22 Nick Clifton + + 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 + + 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 + + * config/tc-i386.c (build_modrm_byte): Check number of operands + when procssing memory/register operand. + +2007-01-12 Nick Clifton + + PR gas/3856 + * macro.c (expand_irp): Do not ignore spaces inside quoted + strings. + +2007-01-12 Alan Modra + + * 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 + + * input-file.c (input_file_open): Check fgets return. + +2007-01-11 Paul Brook + + * config/tc-arm.c (do_t_add_sub): Use Rd and Rs. + +2007-01-11 Nick Clifton + + 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 + + * 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 + + * configure.tgt: Renamed target x86_64-*-mingw64 to x86_64-*-mingw* + +2007-01-05 H.J. Lu + + * config/tc-i386.c (set_intel_syntax): Update set_intel_syntax + depending on allow_naked_reg. + +2007-01-04 Paul Brook + + * config/tc-arm.c (do_cpsi): Set mmod bit for 2 argument form. + +2007-01-04 H.J. Lu + + 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. + +2007-01-04 Julian Brown + + * 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 + + * config/tc-arm.c (NEON_ENC_TAB): Fix encoding of vclt, vcle, vaclt + and vacle. + +2007-01-03 H.J. Lu + + * config/tc-i386.c (swap_operands): Remove branches. + +2007-01-03 H.J. Lu + + * config/tc-i386.c: Update copyright year. + * config/tc-i386.h: Likewise. + +2007-01-03 H.J. Lu + + * config/tc-i386.c (smallest_imm_type): Return unsigned int + instead of int. + +2007-01-03 H.J. Lu + + * config/tc-i386.c: Convert to ISO C90 formatting + * config/tc-i386.h: Likewise. + +2007-01-03 David Daney + + * config/tc-mips.c (md_show_usage): Clean up -mno-shared + documentation. + +For older changes see ChangeLog-2006 + +Local Variables: +mode: change-log +left-margin: 8 +fill-column: 74 +version-control: never +End: diff --git a/gas/ChangeLog-2008 b/gas/ChangeLog-2008 new file mode 100644 index 0000000..e9fa298 --- /dev/null +++ b/gas/ChangeLog-2008 @@ -0,0 +1,1877 @@ +2008-12-23 Jon Beniston + + * NEWS: Record that support for LM32 has been added. + * Makefile.am: Add LM32 object files and dependencies. + * Makefile.in: Regenerate. + * configure.in: Indicate LM32 uses cgen. + * configure: Regenerate. + * configure.tgt: Add LM32 target. + * config/tc-lm32.c: New file. + * config/tc-lm32.h: New file. + * doc/Makefile.am: Add c-lm32.texi to CPU_DOCS. + * doc/Makefile.in: Regenerate. + * doc/all.texi: Add LM32 as CPU of interest. + * doc/as.texinfo: Add LM32 dependent features link. + * doc/c-lm32.texi: New file. + +2008-12-23 H.J. Lu + + * config/tc-i386.c (match_template): Changed to return + const template *. Handle i.swap_operand for 3 operands. + (build_vex_prefix): Take const template *. Swap operand for + 2-byte VEX prefix if possible. + (md_assemble): Updated. + (build_modrm_byte): Handle RegMem bit for SSE2AVX. + +2008-12-23 Anatoly Sokolov + + * config/tc-avr.c (mcu_types): Add attiny87, attiny327, atmega4hvd, + atmega8hvd, atmega16hvb, atmega32hvb, atmega64c1, atmega16m1, + atmega64m1, atmega32u6, atmega128rfa1, at90pwm81, at90scr100, + m3000f, m3000s and m3001b devices. + * doc/c-avr.texi: Likewise. + +2008-12-23 Nick Clifton + + * NEWS :Remove mention of STT_IFUNC support. + * config/obj-elf.c (obj_elf_type): Remove STT_IFUNC support. + * doc/as.texinfo: Remove mention of STT_IFUNC support. + +2008-12-21 Hans-Peter Nilsson + + * config/tc-cris.c (s_cris_dtpoff): New function. + (md_pseudo_table): Add "dtpoffd". + +2008-12-20 H.J. Lu + + * config/tc-i386.c (parse_insn): Optimize ".s" handling. + +2008-12-20 H.J. Lu + + * config/tc-i386.c (_i386_insn): Add swap_operand. + (parse_insn): Handle ".s". + (match_template): Handle swap_operand. + + * doc/c-i386.texi: Document .s suffix. + +2008-12-20 Hans-Peter Nilsson + + * config/tc-cris.c (cris_process_instruction): Handle + BFD_RELOC_CRIS_32_IE, in the test whether the relocation fits. + (get_3op_or_dip_prefix_op): Handle TLS/PIC decoration for the + "double indirect" addressing mode. + (cris_get_reloc_suffix): Add entry for :IE for BFD_RELOC_CRIS_32_IE. + (cris_number_to_imm, tc_gen_reloc): Handle BFD_RELOC_CRIS_32_IE. + +2008-12-18 Ralf Wildenhues + + * configure: Regenerate. + +2008-12-08 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Remove an extra blank + line. + +2008-12-04 Ben Elliston + + * config/tc-ppc.c (parse_cpu): Remove booke64 support. Update + usage strings. + (ppc_setup_opcodes): Likewise, remove booke64 support. + * doc/c-ppc.texi (PowerPC-Opts): Remove -mbooke32 and -mbooke64. + * doc/as.texinfo (Overview): Likewise. + +2008-12-04 Nick Clifton + + * doc/as.texinfo (Type): Reword description of STT_IFUNC type. + +2008-12-03 Nick Clifton + + * config/obj-elf.c (obj_elf_type): Add support for STT_IFUNC type. + * doc/as.texinfo: Document new feature. + * NEWS: Mention new feature. + +2008-11-29 Kai Tietz + + * config/tc-i386.c (i386_target_format): For coff flavour in TE_PEP + use "pe-i386" for 32-bit. + +2008-11-28 Jakub Jelinek + + * Makefile.am (ehopt.o): Add struc-symbol.h. + * Makefile.in: Regenerated. + * ehopt.c: Include struc-symbol.h. + (check_eh_frame): For very small O_constant DW_CFA_advance_loc4 + create correct DW_CFA_advance_loc. Handle O_subtract only + for code alignment factor 1, otherwise handle O_divide or + O_right_shift of O_subtract and O_constant. + (eh_frame_estimate_size_before_relax): Always divide by ca. + (eh_frame_convert_frag): Likewise. + +2008-11-28 John David Anglin + + * dw2gencfi.c (output_cfi_insn): Scale DW_CFA_advance_loc1, + DW_CFA_advance_loc2 and DW_CFA_advance_loc4 outputs. + +2008-11-28 Joshua Kinard + + * config/tc-mips.c (hilo_interlocks): Handle CPU_R14000, CPU_R16000. + (mips_cpu_info_table): Add r14000, r16000. + * doc/c-mips.texi: Add entries for 14000, 16000. + +2008-11-27 M R Swami Reddy + + * config/tc-cr16.h (GLOBAL_OFFSET_TABLE_NAME): Defined + * config/tc-cr16.c (md_pseudo_table): Add "4byte" directive to + md_pseudo_table and accept @c prefix, same as long directive. + (cr16_cons_fix_new): Initialize rtype to BFD_RELOC_UNUSED. + (tc_gen_reloc): Declare a variable of type bfd_reloc_code_real_type + and set it for GOT related relocations. + (md_undefined_symbol): Defined + (process_label_constant): Added checks for GOT/got and cGOT/cGOT + prefixes with constant label and set the appropriate relocation type. + * doc/c-cr16.texi (cr16-operand specifiers): Add got/GOT and cgot/cGOT. + +2008-11-26 DJ Delorie + + * config/tc-m32c.c (md_pseudo_table): Add support for .loc et al. + +2008-11-25 DJ Delorie + + * config/tc-m32c.c (md_convert_frag): Fix ADJNZ reloc math. + +2008-11-21 Sterling Augustine + + * config/tc-xtensa.c (check_t1_t2_reads_and_writes): Call + xtensa_state_is_shared_or to allow multiple opcodes within a + single FLIX bundle to write to these special states. + +2008-11-19 Hans-Peter Nilsson + + * config/tc-cris.c (cris_number_to_imm): Apply S_SET_THREAD_LOCAL + on symbols in TLS relocs. + +2008-11-19 Nick Clifton + + * doc/fdl.texi: Update to v1.3 + * doc/as.texinfo: Change license to v1.3. + +2008-11-18 Catherine Moore + + * config/tc-arm.c (neon_type_mask): Renumber. + (type_chk_of_el_type): Handle F_F16. + (neon_cvt_flavour): Recognize half-precision conversions. + (do_neon_cvt): New shapes NS_QD and + NS_DQ. Encode half-precision conversions. + (do_neon_cvtt): Encode the T bit. + (asm_opcode_insns): vcvt, vcvtt support. + (arm_option_cpu_value): Add neon-fp16 support. + +2008-11-17 Nick Clifton + + * as.c (parse_args): Update copyright year. + +2008-11-14 Mat Hostetter + + * read.c (emit_expr): Grow frag before filling it so that + dot_value remains valid. + +2008-11-14 Peter Jansen + + PR 7026 + * config/tc-arm.c: Ensure that all uses of as_bad have a + formatting string. + +2008-11-12 Hans-Peter Nilsson + + * config/tc-cris.c (cris_number_to_imm): Except for + BFD_RELOC_NONE, always set contents. Where previously this was + skipped, set contents to 0. + + PR gas/7025 + * input-scrub.c (input_scrub_include_sb): Make the position + after the input have defined contents, a 0 character. + + * config/tc-cris.c (cris_relax_frag): Add missing case for + ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_DWORD). + + PR gas/7020 + * read.c (read_a_source_file): Rearrange evaluation order when + looking for '=' to avoid conditional on undefined contents of + input_line_pointer[1]. + +2008-11-06 Adam Nemet + + * config/tc-mips.c (COP_INSN): Change logic to always return false + for FP instructions. + +2008-11-06 Chao-ying Fu + + * config/tc-mips.c (validate_mips_insn): Add case '1'. + (mips_ip): Add case '1' to process sync type. + +2008-11-06 Joel Sherrill + + * configure.tgt: Add m32c-*-rtems* and m32r-*-rtems*. + +2008-11-04 Sterling Augustine + + * config/tc-xtensa.c (tinsn_check_arguments): Check for multiple + writes to the same register. + +2008-11-04 Sterling Augustine + + * config/tc-xtensa.c (xtensa_j_opcode): New. + (xg_instruction_matches_option_term): Handle "FREEREG" option. + (xg_build_to_insn): Likewise. Update renamed tls_reloc reference. + (md_begin): Initialize xtensa_j_opcode. + (md_assemble): Update renamed tls_reloc reference. Handle "j.l". + (xg_assemble_vliw_tokens): Save free_reg info in the frag. + (tinsn_immed_from_frag): Get free_reg info back out of the frag. + (vinsn_to_insnbuf): Update renamed tls_reloc references. + Distinguish extra argument for "FREEREG" from extra TLS argument. + * config/tc-xtensa.h (struct xtensa_frag_type): Add free_reg field. + * config/xtensa-istack.h (struct tinsn_struct): Rename tls_reloc + field to extra_arg. + * config/xtensa-relax.c (widen_spec_list): Add rules to relax "j.l". + (build_transition): Handle "FREEREG" operand. + * config/xtensa-relax.h (enum op_type): Add OP_FREEREG. + +2008-10-31 Alan Modra + + * po/id.po: Update. + +2008-10-24 Maciej W. Rozycki + + * config/tc-mips.c (mips_cpu_info_table): Move the MIPS64r2 + comment so that Broadcom SB-1 cores are in the MIPS64 section. + +2008-10-21 Alan Modra + + * config/tc-bfin.c (gencode, allocate): Remove unnecessary cast. + * config/tc-ns32k.c (bit_fix_new): Likewise. + * config/tc-m68k.c (md_begin): Likewise. + * hash.c (hash_insert, hash_jam): Likewise. + * symbols.c (symbol_create, local_symbol_make): Likewise. + * frags.c (frag_alloc): Likewise. + +2008-10-20 Jay Krell + + * config/bfin-parse.y: Use C style comments. + * config/tc-bfin.c: Likewise. + * config/tc-m68k.c: Likewise. + * config/tc-mips.c: Likewise. + +2008-10-12 H.J. Lu + + * config/tc-i386.c (processor_type): Moved to tc-i386.h. + (cpu_arch_tune): Make it global. + (cpu_arch_isa): Likewise. + (cpu_arch_isa_flags): Likewise. + (i386_align_code): Check fragP->tc_frag_data.isa, + fragP->tc_frag_data.isa_flags and cpu_arch_tune instead of + cpu_arch_isa, cpu_arch_isa_flags and cpu_arch_tune, + respectively. + + * config/tc-i386.h (processor_type): Moved from tc-i386.c. + (cpu_arch_tune): New. + (cpu_arch_isa): Likewise. + (cpu_arch_isa_flags): Likewise. + (i386_tc_frag_data): Likewise. + (TC_FRAG_TYPE): Likewise. + (TC_FRAG_INIT): Likewise. + +2008-10-09 Bob Wilson + + * doc/as.texinfo (Pseudo Ops): Swap order of Comm and CFI menu entries. + (Altmacro, Comm, Loc, Loc_mark_labels, List, MRI, PopSection, Sleb128): + Moved into alphabetical order. + +2008-10-09 Bob Wilson + + * doc/as.texinfo (Dot): Expand no-space-dir conditional to include + a complete sentence. + (Pseudo Ops): Put conditionals around Skip and Space menu entries. + (Line): Remove conditional declaration of Ln node and section here. + Put aout-bout description inside the no-line-dir conditional. + (Skip, Space): Use a separate conditional for each node. + +2008-10-09 Bob Wilson + + * doc/as.texinfo (Pseudo Ops): Remove no-file-dir conditional around + menu entry for File; remove version-specific .file operands from menu + description. Replace "LNS directives" menu entry with new entries + for "Loc" and "Loc_mark_labels". + (LNS directives): Split into separate nodes for each directive. + (Loc): New node for .loc directive. Mention that this directive + is for DWARF2 and add a missing article. + (Loc_mark_labels): Likewise for .loc_mark_labels. + (File): Change this node to describe both the default version and + the DWARF2 version of .file. Move the no-file-dir conditional to + include only the default version. + +2008-10-09 Eric Botcazou + + * dw2gencfi.c (cfi_finish): Deal with md_fix_up_eh_frame. + * config/tc-i386.h (md_fix_up_eh_frame): Define on Solaris. + (i386_solaris_fix_up_eh_frame): Declare. + * config/tc-i386.c (i386_solaris_fix_up_eh_frame): New function. + +2008-10-09 Nick Clifton + + PR 6944 + * doc/as.texinfo (Dollar Local Labels): Correct description of + dollar local labels to show that the colon suffix is still + needed. + +2008-10-08 Nick Clifton + + * configure.in (ALL_LINGUAS): Add "id". + * configure: Regenerate. + * po/id.po: New Indonesian translation. + +2008-10-07 H.J. Lu + + * read.c (pseudo_set): Don't allow global register symbol only + if TC_GLOBAL_REGISTER_SYMBOL_OK is undefined. + * symbols.c (S_SET_EXTERNAL): Likewise. + + * config/tc-mmix.h (TC_GLOBAL_REGISTER_SYMBOL_OK): Defined. + + * doc/internals.texi: Document TC_GLOBAL_REGISTER_SYMBOL_OK. + +2008-10-06 Bob Wilson + + * doc/as.texinfo (Local): New description of ELF .local directive. + +2008-10-06 Nick Clifton + + PR 6926 + * read.c (get_line_sb): Renamed to get_non_macro_line_sb. + (_find_end_of_line): Add extra parameter indicating if the line is + inside a macro. If it is then do not allow the @ character to be + treated as a line separator character. + (read_a_source): Update use of _find_end_of_line. + (find_end_of_line): Likewise. + (s_irp): Update use of get_line_sb. + (s_macro): Likewise. + (do_repeat): Likewise. + (get_line_sb): New function. Like the old version of get_line_sb + except that it takes an extra parameter indicating whether the + line is inside a macro. + (get_macro_line_sb): New function. + +2008-10-04 Hans-Peter Nilsson + + * config/tc-cris.c: Update all comments regarding explicit relocations + to, besides PIC, also imply TLS or to say "relocation specifier" or + similar. + (RELOC_SUFFIX_CHAR): Rename from PIC_SUFFIX_CHAR. Change all callers. + (cris_get_reloc_suffix): Rename from cris_get_pic_suffix. Change all + callers. Also handle TLS relocs. + (cris_get_specified_reloc_size): Rename from cris_get_pic_reloc_size. + Change all callers. Also handle TLS relocs. + (tls): New constant. + (cris_process_instruction): Check for non-PIC TLS relocations and + adjust message when emitting error message about relocation not + fitting. + (get_autoinc_prefix_or_indir_op): Also check for relocation suffix + when tls is true. + (get_3op_or_dip_prefix_op): Ditto. + (cris_number_to_imm, tc_gen_reloc): Handle TLS relocs like PIC relocs. + +2008-10-03 Kazu Hirata + + * listing.c (buffer_line): Open the source file with FOPEN_RB. + Manually process line ends. + +2008-09-30 Wesley W. Terpstra + Nick Clifton + + * config/tc-tic4x.c (tic4x_globl): Call S_SET_EXTERNAL as well as + S_SET_STORAGE_CLASS. + +2008-09-30 Wesley W. Terpstra + Nick Clifton + + * coffgen.c (coff_write_symbols): Check to see if a symbol's flags + do not match it class and if necessary update the class. + (null_error_handler): New function. Suppresses the generation of + bfd error messages. + * coff64-rs6000.c (bfd_xcoff_backend_data): Update comment. + +2008-09-30 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + +2008-09-29 Nick Clifton + + * dw2gencfi.c (output_cfi_insn): Fix typo in invocation of + tc_cfi_emit_pcrel_expr macro. + +2008-09-29 Peter O'Gorman + Steve Ellcey + + * configure: Regenerate for new libtool. + * aclocal.m4: Ditto. + * Makefile.in: Ditto. + * doc/Makefile.in: Ditto. + +2008-09-29 Nick Clifton + + PR 6878 + * app.c (do_scrub_chars): Only issue warnings about tick + characters detected in symbol strings if hex ticks are supported. + +2008-09-29 Nick Clifton + + * dw2gencfi.c (output_cfi_insn): Fix typo in invocation of + tc_cfi_emit_pcrel_expr macro. + +2008-09-28 Daniel Jacobowitz + + * NEWS: Mention .cfi_val_encoded_addr. + +2008-09-26 Eric Botcazou + + * Makefile.am (TARG_ENV_HFILES): Add config/te-solaris.h. + * Makefile.in (TARG_ENV_HFILES): Likewise. + * configure.tgt (Solaris targets): Set em=solaris. + * config/te-solaris.h: New file. + +2008-09-26 Jie Zhang + + * config/bfin-parse.y (asm_1): Fix reduce/reduce conflicts. + +2008-09-24 Richard Henderson + + * dw2gencfi.c (DWARF2_ADDR_SIZE): Provide default. + (struct cfi_insn_data): Add ea member. + (CFI_val_encoded_addr, dot_cfi_val_encoded_addr): New. + (output_cfi_insn): Handle CFI_val_encoded_addr. + (select_cie_for_fde): Don't match CFI_val_encoded_addr. + * doc/as.texinfo (.cfi_val_encoded_addr): Document. + +2008-09-25 Alan Modra + + PR 6913 + * listing.c (print_options): Don't call fprintf without format string. + +2008-09-19 Alan Modra + + * write.c (TC_FORCE_RELOCATION_SUB_LOCAL): Heed md_register_arithmetic. + (TC_VALIDATE_FIX_SUB): Likewise. + * config/tc-frv.h (TC_FORCE_RELOCATION_SUB_LOCAL): Likewise. + * config/tc-hppa.h (TC_FORCE_RELOCATION_SUB_LOCAL): Likewise. + * config/tc-mn10300.h (TC_VALIDATE_FIX_SUB): Likewise. + * config/tc-sh.h (TC_VALIDATE_FIX_SUB): Likewise. + (TC_FORCE_RELOCATION_SUB_LOCAL): Likewise. + * config/tc-sh64.h (TC_VALIDATE_FIX_SUB): Likewise. + * config/tc-xtensa.h (TC_VALIDATE_FIX_SUB): Likewise. + * doc/internals.texi (TC_FORCE_RELOCATION_SUB_ABS, + TC_FORCE_RELOCATION_SUB_LOCAL, TC_VALIDATE_FIX_SUB): Show new param. + + * write.c (md_register_arithmetic): Define. + (fixup_segment): Adjust TC_FORCE_RELOCATION_SUB_ABS invocation. + Modify error message when registers involved. + (TC_FORCE_RELOCATION_SUB_ABS): Heed md_register_arithmetic. + * config/tc-sh.h (TC_FORCE_RELOCATION_SUB_ABS): Likewise. + +2008-09-15 Alan Modra + + * write.c (install_reloc): Correct EMIT_SECTION_SYMBOLS test. + +2008-09-15 Alan Modra + + * config/tc-frv.c (md_apply_fix): Use abs_section_sym for + relocs with no symbol. + * config/tc-mmix.c (md_assemble): Mark fake symbol on + BFD_RELOC_MMIX_BASE_PLUS_OFFSET as OK for use by relocs. + (mmix_md_end): Likewise mark mmix reg contents section symbol. + +2008-09-14 Chris Smith + + * config/tc-z80.c: Opcode generation of ld a,(bc) and ld a,(de) was + broken, as the opcode of ld a,(de) was being emitted for both. + +2008-09-12 Sterling Augustine + + * config/tc-xtensa.c (init_op_placement_info_table): Allow number of + operands equal to MAX_INSN_ARGS. + +2008-09-11 Jan Kratochvil + + * configure.in: Call AC_SYS_LARGEFILE. + * config.in: Regenerate. + * configure: Regenerate. + +2008-09-09 Peter Bergner + + * config/tc-ppc.c (ppc_setup_opcodes): Simplify POWER4/NOPOWER4 test. + Remove POWER5 and POWER6 tests. + +2008-09-08 John David Anglin + + * config/tc-hppa.c (hppa_regname_to_dw2regnum): Add register name to + number support for 32-bit targets. + +2008-09-08 Tristan Gingold + + * NEWS: Add a marker for the 2.19 features. + +2008-09-07 John David Anglin + + * config/tc-hppa.h (DIFF_EXPR_OK): Define for SOM target. Revise + comment regarding use of difference expressions. + (TC_FORCE_RELOCATION_SUB_LOCAL): Define to 1. + + * dw2gencfi.c (CFI_DIFF_EXPR_OK): Define if not defined. + (dot_cfi_personality): Use CFI_DIFF_EXPR_OK instead of DIFF_EXPR_OK. + (dot_cfi_lsda, output_cie, output_fde): Likewise. + * config/tc-hppa.h (CFI_DIFF_EXPR_OK): Define. + +2008-09-06 Richard Sandiford + + * config/tc-mips.h (DWARF2_FDE_RELOC_SIZE): Define. + +2008-09-03 Nick Clifton + + * config/tc-i386.c (pe_lcomm_internal): New function. Allows the + alignment field of the .lcomm directive to be optional. + (pe_lcomm): New function. Pass pe_lcomm_internal to + s_comm_internal. + (md_pseudo_table): Implement .lcomm directive for COFF based + targets. + * doc/c-i386.texi (i386-Directives): New node. Used to document + the .lcomm directive. + +2008-08-30 John David Anglin + + * config/tc-hppa.h: Don't define DWARF2_EH_FRAME_READ_ONLY on Linux + and NetBSD. + +2008-08-29 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add atmega16u4. + * doc/c-avr.texi: Likewise. + +2008-08-28 H.J. Lu + + * config/tc-ia64.c (CR_IIB0): New. + (CR_IIB1): Likewise. + (cr): Add cr.iib0 and cr.iib1. + (specify_resource): Handle IA64_RS_CR_IIB and CR_IIB0/CR_IIB1. + +2008-08-28 Jan Beulich + + * config/tc-i386.c (md_assemble): Force number of displacement + operands to zero when processing string instruction. + (i386_index_check): Special-case string instruction operands. Don't + fudge address prefix if there already was a memory operand. Fix + error message to correctly reflect the addressing mode used. + (i386_att_operand): Fix comment. + (i386_intel_operand): Snapshot, clear, and restore base and index + reg for each operand processed. Increment count of memory operands + later. + +2008-08-27 John David Anglin + + * config/tc-hppa.c (is_SB_relative): New macro. + (fix_new_hppa): Remove $segrel$ marker. + (cons_fix_new_hppa): Set reloc type R_PARISC_SEGREL32 if expression is + segment relative. + * config/tc-hppa.h (tc_frob_symbol): Check for $segrel$. + +2008-08-27 Jan Beulich + + * config/tc-i386.c (check_string): Use register_prefix for error + message. + (process_operands): Likewise. + +2008-08-26 Mark Mitchell + + * c-arm.texi: Add tutorial on ARM unwinding pseudo ops. + +2008-08-26 Jie Zhang + + * config/bfin-parse.y (check_macfunc_option): Fix instruction + mode checking. + (asm_1): Check mode for 16-bit multiply instructions. + +2008-08-24 Alan Modra + + * configure.in: Update a number of obsolete autoconf macros. + * configure: Regenerate. + * aclocal.m4: Regenerate. + +2008-08-22 Nick Clifton + + * config/tc-mcore.c (md_assemble): Increase length of name array + to include terminating NUL. + +2008-08-22 Jie Zhang + + * config/bfin-lex.l (NUMBER): Protect special `.'. + +2008-08-22 Alan Modra + + * symbols.c (symbol_clone): Ensure clones are not external. + +2008-08-22 Alan Modra + + * config/tc-hppa.c (md_begin): Set BSF_KEEP for "dummy_symbol". + +2008-08-21 Richard Henderson + + * dw2gencfi.c (DWARF2_FDE_RELOC_SIZE): New. + (output_cie, output_fde): Use it. + (DWARF2_EH_FRAME_READ_ONLY): New. + (cfi_finish): Use it. + + * config/tc-hppa.h (DWARF2_FDE_RELOC_SIZE): Set to 8 for 64-bit. + (DWARF2_CIE_DATA_ALIGNMENT): Change sign. + (DWARF2_EH_FRAME_READ_ONLY): New. + * config/tc-hppa.c (tc_gen_reloc): Generate pc-relative relocations + from the results of DIFF_EXPR_OK manipulation. + +2008-08-21 Sterling Augustine + + * config/xtensa-istack.h (MAX_INSN_ARGS): Increase to 64. + +2008-08-20 Bob Wilson + + * config/tc-xtensa.c (O_tlsfunc, O_tlsarg, O_tlscall): Define. + (O_tpoff, O_dtpoff): Define. + (suffix_relocs): Add entries for TLS suffixes. + (xtensa_elf_cons): Check for invalid use of TLS relocations. + (map_operator_to_reloc): Add is_literal parameter and use it to + control translating TLS instruction relocations to the corresponding + literal relocations. + (xg_valid_literal_expression): Allow TLS operators. + (xg_build_to_insn): Copy TLS operators from pseudo-instruction + operands to generated literals. + (xg_assemble_literal): Handle TLS operators. Update call to + map_operator_to_reloc. + (md_assemble): Handle CALLXn.TLS pseudo-instruction. + (md_apply_fix): Handle TLS relocations. + (emit_single_op): Handle TLS operators. + (convert_frag_immed): Update call to map_operator_to_reloc. + (vinsn_to_insnbuf): Emit relocations for TLS-related instructions. + * config/xtensa-istack.h (tinsn_struct): Add tls_reloc field. + * config/xtensa-relax.c (append_literal_op): Add src_op parameter + to initialize the op_data field of the BuildOp. + (build_transition): Use it here to record the source operand + corresponding to a generated literal. + * config/xtensa-relax.h (build_op): Comment op_data use for literals. + +2008-08-20 H.J. Lu + + AVX Programming Reference (August, 2008) + * config/tc-i386.c (CPU_FLAGS_AES_MATCH): New. + (CPU_FLAGS_AVX_MATCH): Likewise. + (CPU_FLAGS_32BIT_MATCH): Updated. + (cpu_flags_match): Likewise. + +2008-08-20 Alan Modra + + PR 6848 + * write.c (install_reloc): Check that reloc symbols have been + written. + (set_symtab): Mark symbols with BSF_KEEP. + +2008-08-18 H.J. Lu + + * config/tc-i386.c (i386_align_code): Fix a comment typo. + +2008-08-15 Alan Modra + + PR 6526 + * configure.in: Invoke AC_USE_SYSTEM_EXTENSIONS. + * Makefile.in: Regenerate. + * aclocal.m4: Regenerate. + * config.in: Regenerate. + * configure: Regenerate. + * doc/Makefile.in: Regenerate. + +2008-08-14 Alan Modra + + * config/tc-tic4x.c (tic4x_operands_parse): Make static. + +2008-08-13 Ben Elliston + + * doc/as.texinfo (Align): Document the PowerPC behaviour. + +2008-08-13 Alan Modra + + * as.c, as.h, ecoff.c, hash.c, macro.c, symbols.c, config/obj-evax.c, + config/obj-som.c, config/tc-alpha.c, config/tc-arm.c, config/tc-bfin.c, + config/tc-bfin.h, config/tc-crx.c, config/tc-frv.c, config/tc-frv.h, + config/tc-hppa.h, config/tc-i386.c, config/tc-i860.c, config/tc-i960.h, + config/tc-ia64.c, config/tc-ia64.h, config/tc-m32c.c, config/tc-m32c.h, + config/tc-m68k.c, config/tc-maxq.c, config/tc-s390.c, config/tc-s390.h, + config/tc-sparc.c, config/tc-sparc.h, config/tc-spu.c, config/tc-spu.h, + config/tc-tic4x.c, config/tc-tic4x.h, config/tc-tic54x.c, + config/tc-tic54x.h, config/tc-vax.c, doc/internals.texi: Banish PARAMS + and PTR. Convert to ISO C. Delete unnecessary forward declarations. + +2008-08-12 Alan Modra + + * config/tc-arm.c (s_unreq): Adjust hash_delete call. + * config/tc-ia64.c (dot_rot): Likewise. + +2008-08-11 Alan Modra + + PR 6575 + * hash.c: Expand PTR to void *. + (hash_delete): Add "freeme" parameter. Call obstack_free. + * hash.h: Expand PTR to void *. + (hash_delete): Update prototype. + * macro.c (macro_expand_body): hash_delete LOCALs from formal_hash. + * config/tc-tic54x.c (tic54x_remove_local_label): Update hash_delete + call. + (subsym_substitute): Likewise. + * doc/internals.texi (hash_delete): Update. + +2008-08-08 Anatoly Sokolov + + * config/tc-avr.c (mcu_types): Add avr25, avr31, avr35, and avr51 + architectures. Reorganize list to put mcu types in correct + architectures and to order list same as in GCC. Use new ISA + definitions in include/opcode/avr.h. + * doc/c-avr.texi: Add avr25, avr31, avr35, and avr51 architecture + descriptions. Reorganize descriptions to put mcu types in correct + architectures and to order lists same as in GCC. + +2008-08-08 Richard Sandiford + Daniel Jacobowitz + + * config/tc-mips.c (OPTION_CALL_NONPIC): New macro. + (OPTION_NON_SHARED, OPTION_XGOT, OPTION_MABI, OPTION_32) + (OPTION_N32, OPTION_64, OPTION_MDEBUG, OPTION_NO_MDEBUG) + (OPTION_PDR, OPTION_NO_PDR, OPTION_MVXWORKS_PIC): Bump by 1. + (md_longopts): Add -call_nonpic. + (md_parse_option): Handle OPTION_CALL_NONPIC. + (md_show_usage): Add -call_nonpic. + +2008-08-08 Sterling Augustine + + * config/tc-xtensa.c (exclude_section_from_property_tables): New. + (xtensa_create_property_segments): Use it. + (xtensa_create_xproperty_segments): Likewise. + +2008-08-08 Alan Modra + + * doc/internals.texi (DWARF2_FORMAT): Update for 2008-08-04 change. + +2008-08-06 Richard Sandiford + + * config/tc-mips.c (mips16_reloc_p, got16_reloc_p, hi16_reloc_p) + (lo16_reloc_p): New functions. + (reloc_needs_lo_p): Use hi16_reloc_p and got16_reloc_p to + generalize relocation checks. + (matching_lo_reloc): New function. + (fixup_has_matching_lo_p): Use it. + (mips16_mark_labels): Don't clobber a symbol's visibility. + (append_insn): Use hi16_reloc_p and lo16_reloc_p. + (mips16_ip): Handle BFD_RELOC_MIPS16_GOT16 and BFD_RELOC_MIPS16_CALL16. + (md_apply_fix): Likewise. + (mips16_percent_op): Add %got and %call16. + (mips_frob_file): Use got16_reloc_p to generalize relocation checks. + Use matching_lo_reloc. + (mips_force_relocation): Use hi16_reloc_p and lo16_reloc_p to + generalize relocation checks. + (mips_fix_adjustable): Use lo16_reloc_p to generalize relocation + checks. + +2008-08-06 DJ Delorie + + * NEWS: Mention these changes. + + * config/tc-h8300.h (H_TICK_HEX): Define. + * config/tc-h8300.c (OPTION_H_TICK_HEX): New. + (md_longopts): Add "-h-tick-hex". + (md_parse_option): Support it. + * doc/c-h8300.texi (H8/300 Options): Document it. + * doc/as.texinfo (Overview): Likewise. + + * config/tc-sh.h (H_TICK_HEX): Define. + * config/tc-sh.c (OPTION_H_TICK_HEX): New. + (md_longopts): Add "-h-tick-hex". + (md_parse_option): Support it. + * doc/c-sh.texi (SH Options): Document it. + * doc/c-sh64.texi (SH64 Options): Document it. + * doc/as.texinfo (Overview): Likewise. + +2008-08-05 Alan Modra + + PR gas/6656 + * dwarf2dbg.c (dwarf2_directive_file): Disable gas generated + debug info if we see compiler generated debug info. + (dwarf2_directive_loc): Likewise. Remove redundant debug_type test. + +2008-08-04 Alan Modra + + * dwarf2dbg.c: Remove superfluous forward function declarations. + (DWARF2_FORMAT): Add section arg. + (out_header): New function, split out from.. + (out_debug_line): ..here. + (out_debug_aranges): Use out_header. + (out_debug_abbrev): Add info_seg and line_seg args. Use + DW_FORM_data8 (for DW_AT_stmt_list) if line_seg is 64-bit. + (out_debug_info): Use out_header. Output 8 byte DW_AT_stmt_list + if line_seg is 64-bit. + (dwarf2_finish): Adjust out_debug_abbrev call. + * config/tc-mips.h (DWARF2_FORMAT, mips_dwarf2_format): Add sec arg. + * config/tc-mips.c (mips_dwarf2_format): Likewise. + +2008-08-04 Alan Modra + + * Makefile.am (POTFILES.in): Set LC_ALL=C. + * Makefile.in: Regenerate. + * po/POTFILES.in: Regenerate. + +2008-08-01 Peter Bergner + + * config/tc-ppc.c (parse_cpu): Rename altivec_or_spe to retain_flags. + Handle -mvsx and -mpower7. + (md_show_usage): Document -mpower7 and -mvsx. + * doc/as.texinfo (Target PowerPC): Document -mvsx. + * doc/c-ppc.texi (PowerPC-Opts): Document -mvsx and -mpower7. + +2008-07-31 Peter Bergner + + * config/tc-ppc.c (parse_cpu) : Accept Altivec instructions. + : Likewise. + +2008-07-30 Michael J. Eager + + * config/tc-ppc.c (parse_cpu): Separate handling of -m403/405. + (md_show_usage): Likewise. + +2008-07-30 Alan Modra + + * messages.c, symbols.c, write.c: Silence gcc warnings. + +2008-07-28 Ineiev + + * config/tc-i386.c (operand_type_check): Warning fix. + +2008-07-26 Michael Eager + + * doc/as.texinfo: Add description of single-precision attribute. + +2008-07-24 Jie Zhang + + * config/bfin-parse.y (asm_1): Error if plain symbol is used + as load/store offset. + +2008-07-22 Chao-ying Fu + + * config/tc-mips.c (mips_ip): Reset s to argsStart. + +2008-07-22 Jie Zhang + + * config/tc-bfin.c (bfin_gen_loop): Remove loop symbol. + +2008-07-21 DJ Delorie + + * config/tc-h8300.c (fix_operand_size): Use the default size + specified by the .lbranch/.sbranch pseudos. + +2008-07-18 DJ Delorie + + * config/tc-m32c.h (H_TICK_HEX): Define. + * config/tc-m32c.c (OPTION_H_TICK_HEX): Define. + (md_longopts): Add support for it. + (md_parse_option): Likewise. + * doc/as.texinfo (Overview): Add new m32c options. + * doc/c-m32c.texi (M32C-Modifiers): Likewise + + * as.h: (enable_h_tick_hex): New. + * app.c (enable_h_tick_hex): New. + (LEX_IS_H): New. + (do_scrub_begin): Mark 'H' and 'h' as special if enable_h_tick_hex. + (do_scrub_chars): If enable_h_tick_hex and 'h', check for H'00 + style hex constants and convert the input stream to 0x00 style. + (do_scrub_chars): If a 'X style character constant is found after + a symbol character (like you're or X'00), warn the user. + +2008-07-10 Richard Sandiford + + * config/tc-mips.c (mips16_mark_labels): Use ELF_ST_SET_MIPS16. + (mips_fix_adjustable): Likewise. + (mips_frob_file_after_relocs): Likewise. + +2008-07-08 Nathan Sidwell + + * config/tc-m68k.c (m68k_set_cpu, m68k_set_arch): Don't complain + about overriding an earlier setting. + +2008-07-07 Adam Nemet + + * config/tc-mips.c (NO_ISA_COP): New macro. + (COP_INSN): New macro. + (is_opcode_valid): Use them. + (macro) : Use them. Don't accept coprocessor load store + insns based on the ISA if CPU is NO_ISA_COP. + : Likewise for coprocessor operations. + +2008-07-07 Paul Brook + + * config/tc-arm.c (arm_fix_adjustable): Don't adjust MOVW/MOVT + relocations. + +2008-07-07 Ralf Corsépius + + * configure.tgt: Add bfin-*-rtems*. + +2008-07-04 Alan Modra + + * config/tc-spu.c (md_apply_fix): Handle fully resolved + BFD_RELOC_32_PCREL, BFD_RELOC_SPU_HI16 and BFD_RELOC_SPU_LO16. + +2008-06-25 Peter Bergner + + * config/tc-ppc.c (parse_cpu): Handle -m464. + (md_show_usage): Likewise. + +2008-06-24 Eric B. Weddington + + Add support for ATtiny13A. + * config/tc-avr.c (mcu_types): Add attiny13a. + * doc/c-avr.texi: Likewise. + +2008-06-24 Bob Wilson + Alan Modra + + * write.c (relax_segment ): Include current stretch + value when calculating whether .org is backwards. + +2008-06-17 Ralf Wildenhues + + * configure: Regenerate. + +2008-06-17 Nick Clifton + + * app.c (do_scrub_chars): Do not UNGET an EOF value. + +2008-06-16 Hans-Peter Nilsson + + PR gas/6607 + * config/tc-mmix.c (s_loc): Assume "negative" addresses belong to + text_section. Do the "stepping backwards" test for text_section + using unsigned operands. + +2008-06-13 Peter Bergner + + * config/tc-ppc.c (ppc_cpu): Use ppc_cpu_t typedef. + (ppc_insert_operand): Likewise. + (ppc_machine): Likewise. + * config/tc-ppc.h: #include "opcode/ppc.h" + (struct _ppc_fix_extra ): Use ppc_cpu_t typedef. + (ppc_cpu): Update extern decl. + +2008-06-12 Adam Nemet + + * config/tc-mips.c (validate_mips_insn): Handle field descriptors + +x, +X, +p, +P, +s, +S. + (mips_ip): Likewise. + + * config/tc-mips.c (validate_mips_insn): Handle field descriptor +Q. + (mips_ip): Likewise. + (macro_build): Likewise. + (CPU_HAS_SEQ): New macro. + (macro2) : Use it. Emit seq/sne and seqi/snei. + +2008-06-09 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Remove support for ATmega32HVB device. + * doc/c-avr.texi: Likewise. + +2008-06-04 Nick Clifton + + * app.c (do_scrub_chars): Do not UNGET an EOF value. + +2008-06-03 H.J. Lu + + * config/tc-i386.c (set_sse_check): New. + (md_pseudo_table): Add "sse_check". + +2008-06-03 Paul Brook + + * config/tc-arm.c (do_t_rbit): Populate both rm fields. + +2008-05-30 Nick Clifton + + PR 5523 + * config/tc-avr.c (avr_ldi_expression): Do not warn about unknown + relocs here. + +2008-05-29 Maxim Kuvyrkov + + * config/tc-mips.c (mips_cpu_info_table): Move records for + ST Loongson-2E/2F processors to a better place. + +2008-05-23 H.J. Lu + + PR gas/6518 + * config/tc-i386.c (match_template): Report ambiguous operand + size, not invalid suffix when there is no match in Intel + syntax. + +2008-05-22 Paul Brook + + * config/tc-arm.c (parse_cond): Covert to lowercase before matching. + +2008-05-21 I-Jui Sung + + * config/tc-arm.c (arm_cpus): Add Faraday ARMv4 and ARMv5TE + compatible cores: fa526, fa626, fa626te, fa726te. + * doc/c-arm.texi (ARM Opts): Add -mcpu={fa526, fa626, fa626te, + fa726te} options. + +2008-05-14 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * doc/Makefile.in: Regenerate. + * po/POTFILES.in: Regenerate. + +2008-05-09 Catherine Moore + + * config/tc-mips.c (mips_frob_file): Don't match MIPS16 relocs + with non-MIPS16 relocs. + +2008-05-09 Chao-ying Fu + + * config/tc-mips.c (md_begin): Use strncmp to compare TARGET_OS, in + case that some characters append at the end of the name. + (mips_ip): Likewise. + (s_change_sec): Likewise. + (md_section_align): Likewise. + +2008-05-07 Bob Wilson + + * config/tc-xtensa.c (xtensa_create_property_segments): Use + xtensa_make_property_section instead of xtensa_get_property_section. + (xtensa_create_xproperty_segments): Likewise. + +2008-05-02 H.J. Lu + + * NEWS: Mention XSAVE, EPT and MOVBE. + + * config/tc-i386.c (cpu_arch): Add .movbe and .ept. + (md_show_usage): Add .movbe and .ept. + + * doc/c-i386.texi: Add movbe and ept to -march=. Document + .movbe and .ept. + +2008-04-29 David S. Miller + + * config/tc-sparc.c (v9a_asr_table): Fix order of softint entries. + +2008-04-28 Adam Nemet + + * config/tc-mips.c (file_mips_soft_float, file_mips_single_float): + New statics. + (OPTION_ELF_BASE): Make room for new option macros. + (OPTION_SOFT_FLOAT, OPTION_HARD_FLOAT, OPTION_SINGLE_FLOAT, + OPTION_DOUBLE_FLOAT): New option macros. + (md_longopts): Add msoft-float, mhard-float, msingle-float and + mdouble-float. + (md_parse_option): Handle OPTION_SINGLE_FLOAT, + OPTION_DOUBLE_FLOAT, OPTION_SOFT_FLOAT and OPTION_HARD_FLOAT. + (md_show_usage): Add -msoft-float, -mhard-float, -msingle-float + and -mdouble-float. + (struct mips_set_options): New fields soft_float and single_float. + (mips_opts): Initialized them. Add comment for each field + initializer. + (mips_after_parse_args): Set them based on file_mips_soft_float + and file_mips_single_float. + (s_mipsset): Add support for `.set softfloat', `.set hardfloat', + `.set singlefloat' and `.set doublefloat'. + (is_opcode_valid): New function to invoke OPCODE_IS_MEMBER. + Handle single-float and soft-float instructions here. + (macro_build, mips_ip): Use it instead of OPCODE_IS_MEMBER. + (is_opcode_valid_16): New function. + (mips16_ip): Use it instead of OPCODE_IS_MEMBER. + (macro) : Remove special-casing of r4650. + * doc/c-mips.texi (-march=): Add Octeon. + (MIPS Opts): Document -msoft-float and -mhard-float. Document + -msingle-float and -mdouble-float. + (MIPS floating-point): New section. Document `.set softfloat' and + `.set hardfloat'. Document `.set singlefloat' and `.set + doublefloat'. + +2008-04-25 David S. Miller + + * config/tc-sparc.c: Accept 'softint_clear' and 'softint_set' + %asr aliases. + + * doc/c-sparc.texi: Consistently refer to architecture 'versions', + rather than occaisionally 'levels'. Consistently refer to Sun's + UNIX variant as SunOS, every version of Solaris is also SunOS. + Document new 'softint_clear' and 'softint_set' aliases. Clarify + which architecture versions support '%dcr', '%cq', and '%gl'. Add + section on 32-bit/64-bit opcode translations. + +2008-04-23 Mike Frysinger + + * Makefile.am (OBJ_FORMAT_CFILES): Add config/obj-fdpicelf.c. + (OBJ_FORMAT_HFILES): Add config/obj-fdpicelf.h. + (obj-fdpicelf.o): Define. + * Makefile.in: Regenerate. + * configure.tgt: Set bfd_gas to yes when fmt is fdpicelf. + (bfin-*-*): Delete. + (bfin-*-linux-uclibc): New; set fmt to fdpicelf and em to linux. + (bfin-*-uclinux*): New; set fmt to elf and em to linux. + * config/obj-fdpicelf.c: New. + * config/obj-fdpicelf.h: Likewise. + * config/tc-bfin.c (bfin_flags, bfin_pic_flag): Set default based on + the OBJ_FDPIC_ELF define. + (OPTION_NOPIC): Define. + (md_longopts): Add mnopic and mno-fdpic. + (md_parse_option): Handle OPTION_NOPIC. + +2008-04-23 Paolo Bonzini + + * aclocal.m4: Regenerate. + * configure: Regenerate. + +2008-04-23 David S. Miller + + * config/tc-sparc.c (v9a_asr_table): Add missing + 'stick' and 'stick_cmpr', and document ordering rules + of table. + (tc_gen_reloc): Accept BFD_RELOC_SPARC_PC22 and + BFD_RELOC_SPARC_PC10. + * doc/c-sparc.texi: New section on Sparc constants. + Add documentation for %stick and %stick_cmpr. + +2008-04-22 David S. Miller + + * config/obj-elf.c (obj_elf_section_type): Add prototype + before obj_elf_section_word and add 'warn' arg. + (obj_elf_section_word): Add type pointer arg, and if no #SECTION + is matched, try checking for #SECTION_TYPE. + (obj_elf_section): Adjust for new args. + (obj_elf_type_name): New function. + (obj_elf_type): Call it, and accept STT_foo number strings + in .type statements as output by SunPRO compiler. + +2008-04-22 H.J. Lu + + * config/tc-i386.c (md_assemble): Don't check SSE instructions + if noavx is 0. + +2008-04-18 David S. Miller + + * doc/c-sparc.texi: Add syntax section. + +2008-04-18 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Don't check FMA to swap + REG and NDS for instructions with immediate operand. + +2008-04-18 H.J. Lu + + * config/tc-i386.c (build_modrm_byte): Swap REG and NDS for + FMA. + +2008-04-16 David S. Miller + + * config/tc-sparc.c (sparc_ip): Add support for gotdata mnemonics + and relocation generation. + (tc_gen_reloc): Likewise. + +2008-04-15 Andrew Stubbs + + * config/tc-sh.c (md_apply_fix): Make sure BFD_RELOC_SH_PCRELIMM8BY4 + relocations are properly aligned, and not negative. + +2008-04-15 Khem Raj + + * doc/tc-arm.texi: Fix fnstart and fnend directive names. + +2008-04-14 Edmar Wienskoski + + * config/tc-ppc.c (parse_cpu): Handle "e500mc". Extend "e500" to + accept e500mc instructions. + (md_show_usage): Document -me500mc. + +2008-04-11 Nick Clifton + + * listing.c (print_timestamp): Use localtime rather than + localtime_r since not all build environments provide the latter. + +2008-04-10 H.J. Lu + + * NEWS: Mention -msse-check=[none|error|warning]. + + * config/tc-i386.c (sse_check): New. + (OPTION_MSSE_CHECK): Likewise. + (md_assemble): Check SSE instructions if needed. + (md_longopts): Add -msse-check. + (md_parse_option): Handle OPTION_MSSE_CHECK. + (md_show_usage): Show -msse-check=[none|error|warning]. + + * doc/c-i386.texi: Document -msse-check=[none|error|warning]. + +2008-04-10 Santiago Urueña + + * listing.c: Add -ag listing flag to show general information in + listings such as gas version, passed options, and time stamp. + (listing_general_info): New function. + (print_options): New function. + (print_single_option): New function. + (print_timestamp): New function. + (MAX_DATELEN): Define. + (listing_print): Add call to listing_general_info. + * listing.h (LISTING_GENERAL): Define. + (listing_print): Add new parameter. + * as.c (show_usage): Print new switch. + (parse_args): Parse new switch. + (main): Pass command line on to listing_print. + * NEWS: Mention this new feature. + * doc/as.texinfo: Document the new sub-option. + +2008-04-08 Alan Modra + + * dwarf2dbg.c (dwarf2_emit_insn): Simplify test before dwarf2_where + call. Delete out of date comment. + (dwarf2_consume_line_info): Always clear dwarf2_loc_directive_seen. + (dwarf2_emit_label): Don't emit unless there has been a previous + .file or we are outputting assembler generated debug. + dwarf2_consume_line_info after emitting line info, not before. + (out_debug_info): Simplify files_in_use test. + +2008-04-07 H.J. Lu + + * config/tc-i386.c (parse_real_register): Return AVX register + only if AVX is enabled. + +2008-04-07 Kaz Kojima + + PR gas/6043 + * config/tc-sh64.c (shmedia_md_pcrel_from_section): Use + md_pcrel_from_section for BFD_RELOC_64 and BFD_RELOC_64_PCREL. + +2008-04-04 Adrian Bunk + Bob Wilson + + * config/tc-xtensa.c (xg_apply_fix_value): Check return code from + call to decode_reloc. + +2008-04-04 H.J. Lu + + * NEWS: Mention XSAVE. Change CLMUL to PCLMUL. + + * config/tc-i386.c (cpu_arch): Add .pclmul. + (md_show_usage): Replace clmul with pclmul. + * doc/c-i386.texi: Likewise. + +2008-04-03 H.J. Lu + + * NEWS: Mention AES, CLMUL, AVX/FMA and -msse2avx. + + * doc/c-i386.texi: Add avx, aes, clmul and fma to -march=. + Document -msse2avx, .avx, .aes, .clmul and .fma. + + * config/tc-i386.c (YMMWORD_MNEM_SUFFIX): New. + (vex_prefix): Likewise. + (sse2avx): Likewise. + (CPU_FLAGS_ARCH_MATCH): Likewise. + (CPU_FLAGS_64BIT_MATCH): Likewise. + (CPU_FLAGS_32BIT_MATCH): Likewise. + (CPU_FLAGS_PERFECT_MATCH): Likewise. + (regymm): Likewise. + (vex_imm4): Likewise. + (fits_in_imm4): Likewise. + (build_vex_prefix): Likewise. + (VEX_check_operands): Likewise. + (bad_implicit_operand): Likewise. + (OPTION_MSSE2AVX): Likewise. + (T_YMMWORD): Likewise. + (_i386_insn): Add vex. + (cpu_arch): Add .avx, .aes, .clmul and .fma. + (cpu_flags_match): Changed to take a pointer to const template. + Enable encoding SSE instructions with VEX prefix for -msse2avx. + (match_mem_size): Also check ymmword. + (operand_type_match): Clear ymmword. + (md_begin): Allow '_' in mnemonic. + (type_names): Add OPERAND_TYPE_VEX_IMM4. + (process_immext): Update assert. + (md_assemble): Don't call process_immext if sse2avx and immext + are true. Call build_vex_prefix if vex is true. + (parse_insn): Updated for cpu_flags_match. + (swap_operands): Handle 5 operands. + (match_template): Handle 5 operands. Updated for cpu_flags_match. + Check regymm. Call VEX_check_operands. Handle YMMWORD_MNEM_SUFFIX. + (process_suffix): Handle YMMWORD_MNEM_SUFFIX. + (check_byte_reg): Check regymm. + (process_operands): Duplicate the destination register for + -msse2avx if needed. + (build_modrm_byte): Updated for instructions with VEX encoding. + (output_insn): Output VEX prefix if needed. + (md_longopts): Add msse2avx. + (md_parse_option): Handle OPTION_MSSE2AVX. + (md_show_usage): Add avx, aes, clmul, fma and -msse2avx. + (intel_e09): Support YMMWORD. + (intel_e11): Likewise. + (intel_get_token): Likewise. + +2008-03-28 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add attiny167. + * doc/c-avr.texi: Likewise. + +2008-03-28 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add atmega32u4. + * doc/c-avr.texi: Likewise. + +2008-03-28 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add atmega32c1. + * doc/c-avr.texi: Likewise. + +2008-03-28 Paul Brook + + * config/tc-arm.c (parse_neon_mov): Parse register before immediate + to avoid spurious symbols. + +2008-03-28 Nathan Sidwell + + * config/tc-m68k.c (md_convert_frag_1): Replace as_fatal with + as_bad_where. + +2008-03-27 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Add atmega32m1. + * doc/c-avr.texi: Likewise. + +2008-03-27 Ineiev + + * config/tc-arm.c (do_neon_cvt): Move variable declarations to + start of block. + (do_neon_ext): Fix sign of comparison. + +2008-03-26 Bernd Schmidt + + From Jie Zhang + * config/bfin-parse.y (asm_1): Check AREGS in comparison + instructions. And call yyerror when comparing PREG with + DREG. + (check_macfunc_option): New. + (check_macfuncs): Check option by calling check_macfunc_option. + Fix comparison always true warnings. Both scalar instructions + of vector instruction must share the same mode option. Only allow + option mode at the end of the second instruction of the vector. + (asm_1): Check option by calling check_macfunc_option. + + * config/bfin-parse.y (check_macfunc_option): Allow (IU) + option for multiply and multiply-accumulate to data register + instruction. + (check_macfuncs): Don't check if accumulator matches the data register + here. + (assign_macfunc): Check if accumulator matches the + data register in each rule that moves to the data + register. + + * config/tc-bfin.c (bfin_start_line_hook): Localize the labels + generated for LOOP_BEGIN and LOOP_END instructions. + (bfin_gen_loop): Likewise. + +2008-03-19 Andreas Krebbel + + * config/tc-s390.c (md_parse_option): z10 option added. + +2008-03-17 Ralf Wildenhues + + * aclocal.m4: Regenerate. + * configure: Likewise. + * Makefile.in: Likewise. + * doc/Makefile.in: Likewise. + +2008-03-17 Adrian Bunk + + PR 5946 + * config/tc-hppa.c (is_same_frag): Delete. + +2008-03-14 Sterling Augustine + + * config/tc-xtensa.h (xtensa_relax_statesE): Update comment for + RELAX_LOOP_END_ADD_NOP. + +2008-03-13 Evandro Menezes + + PR gas/5895 + * read.c (s_mexit): Warn if attempting to exit a macro when not + inside a macro definition. + +2008-03-13 Alan Modra + + * Makefile.am: Run "make dep-am". + * Makefile.in: Regenerate. + * configure: Regenerate. + +2008-03-09 Paul Brook + + * config/tc-arm.c (arm_cpu_option_table): Add cortex-a9. + * doc/c-arm.texi: Add cortex-a9. + +2008-03-09 Paul Brook + + * config/tc-arm.c (fpu_vfp_ext_d32): New vairable. + (parse_vfp_reg_list, encode_arm_vfp_reg): Use it. + (arm_option_cpu_value): Add vfpv3-d16, vfpv2 and vfpv3. + (aeabi_set_public_attributes): Handle Tag_VFP_arch=VFPV3-D16. + * doc/c-arm.texi: Document new ARM FPU variants. + +2008-03-07 Paul Brook + + * config/tc-arm.c (md_apply_fix): Use correct offset range. + +2008-03-07 Alan Modra + + * config/tc-ppc.c (ppc_setup_opcodes): Tidy. Add code to test + for strict ordering of powerpc_opcodes, but disable for now. + +2008-03-04 Paul Brook + + * config/tc-arm.c (arm_ext_barrier, arm_ext_msr): New. + (arm_ext_v7m): Rename... + (arm_ext_m): ... to this. Include v6-M. + (do_t_add_sub): Allow narrow low-reg non flag setting adds. + (do_t_mrs, do_t_msr, aeabi_set_public_attributes): Use arm_ext_m. + (md_assemble): Allow wide msr instructions. + (insns): Add classifications for v6-m instructions. + (arm_cpu_option_table): Add cortex-m1. + (arm_arch_option_table): Add armv6-m. + (cpu_arch): Add ARM_ARCH_V6M. Fix numbering of other v6 variants. + +2008-03-03 Sterling Augustine + Bob Wilson + + * config/tc-xtensa.c (xtensa_num_pipe_stages): New. + (md_begin): Initialize it. + (resources_conflict): Use it. + +2008-03-03 Sterling Augustine + + * config/tc-xtensa.h (RELAX_XTENSA_NONE): New. + +2008-03-03 Denys Vlasenko + H.J. Lu + + PR gas/5543 + * read.c (pseudo_set): Don't allow global register symbol. + + * symbols.c (S_SET_EXTERNAL): Don't allow register symbol + global. + +2008-03-03 H.J. Lu + + PR gas/5543 + * write.c (write_object_file): Don't allow symbols which were + equated to register. Stop if there is an error. + +2008-03-01 Alan Modra + + * config/tc-ppc.h (struct _ppc_fix_extra): New. + (ppc_cpu): Declare. + (TC_FIX_TYPE, TC_INIT_FIX_DATA): Define. + * config/tc-ppc.c (ppu_cpu): Make global. + (ppc_insert_operand): Add ppu_cpu parameter. + (md_assemble): Adjust for above change. + (md_apply_fix): Pass tc_fix_data.ppc_cpu to ppc_insert_operand. + +2008-02-22 Nick Clifton + + * config/tc-arm.c (do_bx): Only test EF_ARM_EABI_VERSION on ELF + targeted ARM ports, otherwise just skip generating the reloc. + +2008-02-18 H.J. Lu + + * doc/c-i386.texi: Update -march= and .arch. + +2008-02-18 Nick Clifton + + * config/tc-mn10300.c (has_known_symbol_location): New function. + Do not regard weak symbols as having a known location. + (md_estimate_size_before_relax): Use new function. + (md_pcrel_from): Do not compute a pcrel against a weak symbol. + +2008-02-18 Jan Beulich + + * config/tc-i386.c (match_template): Disallow 'l' suffix when + currently selected CPU has no 32-bit support. + (parse_real_register): Do not return registers not available on + currently selected CPU. + +2008-02-16 H.J. Lu + + * config/tc-i386.c (process_immext): Fix format. + +2008-02-16 H.J. Lu + + * config/tc-i386.c (inoutportreg): New. + (process_immext): New. + (md_assemble): Use it. + (update_imm): Use imm16 and imm32s. + (i386_att_operand): Use inoutportreg. + +2008-02-14 H.J. Lu + + * config/tc-i386.c (operand_type_all_zero): New. + (operand_type_set): Likewise. + (operand_type_equal): Likewise. + (cpu_flags_all_zero): Likewise. + (cpu_flags_set): Likewise. + (cpu_flags_equal): Likewise. + (UINTS_ALL_ZERO): Removed. + (UINTS_SET): Likewise. + (UINTS_CLEAR): Likewise. + (UINTS_EQUAL): Likewise. + (cpu_flags_match): Updated. + (smallest_imm_type): Likewise. + (set_cpu_arch): Likewise. + (md_assemble): Likewise. + (optimize_imm): Likewise. + (match_template): Likewise. + (process_suffix): Likewise. + (update_imm): Likewise. + (process_drex): Likewise. + (process_operands): Likewise. + (build_modrm_byte): Likewise. + (i386_immediate): Likewise. + (i386_displacement): Likewise. + (i386_att_operand): Likewise. + (parse_real_register): Likewise. + (md_parse_option): Likewise. + (i386_target_format): Likewise. + +2008-02-14 Dimitry Andric + + PR gas/5712 + * config/tc-arm.c (s_arm_unwind_save): Advance the input line + pointer past the comma after parsing a floating point register + name. + +2008-02-14 Hakan Ardo + + PR gas/2626 + * config/tc-avr.c (mcu_types): Change the ISA tyoe of the attiny26 + to AVR_ISA_2xxe. + (avr_operand): Disallow post-increment addressing in the lpm + instruction for the attiny26. + +2008-02-13 Jan Beulich + + * config/tc-i386.c (parse_real_register): Don't return 'FLAT' + if not in Intel mode. + (i386_intel_operand): Ignore segment overrides in immediate and + offset operands. + (intel_e11): Range-check i.mem_operands before use as array + index. Filter out FLAT for uses other than as segment override. + (intel_get_token): Remove broken promotion of "FLAT:" to mean + "offset FLAT:". + +2008-02-13 Jan Beulich + + * config/tc-i386.c (intel_e09): Also special-case 'bound'. + +2008-02-13 Jan Beulich + + * config/tc-i386.c (allow_pseudo_reg): New. + (parse_real_register): Check for NULL just once. Allow all + register table entries when allow_pseudo_reg is non-zero. + Don't allow any registers without type when allow_pseudo_reg + is zero. + (tc_x86_regname_to_dw2regnum): Replace with ... + (tc_x86_parse_to_dw2regnum): ... this. + (tc_x86_frame_initial_instructions): Adjust for above change. + * config/tc-i386.h (tc_regname_to_dw2regnum): Remove. + (tc_parse_to_dw2regnum): New. + (tc_x86_regname_to_dw2regnum): Replace with ... + (tc_x86_parse_to_dw2regnum): ... this. + * dw2gencfi.c (tc_parse_to_dw2regnum): New, broken out of ... + (cfi_parse_reg): ... this. Use tc_parse_to_dw2regnum. Adjust + error handling. + +2008-02-12 Nick Clifton + + * config/tc-tic4x.c (tic4x_insn_insert): Add const qualifier to + argument. + (tic4x_insn_add): Likewise. + (md_begin): Drop cast that was discarding a const qualifier. + * config/tc-d30v.c (get_reloc): Add const qualifier to op + argument. + (build_insn): Drop cast that was discarding a const qualifier. + +2008-02-11 H.J. Lu + + * config/tc-i386.c (cpu_arch): Add .xsave. + (md_show_usage): Add .xsave. + + * doc/c-i386.texi: Add xsave to -march=. + +2008-02-07 Alan Modra + + * read.c (s_weakref): Don't pass unadorned NULL to concat. + * config/tc-i386.c (set_cpu_arch, md_parse_option): Likewise. + +2008-02-05 Sterling Augustine + + * config/tc-xtensa.c (relax_frag_immed): Change internal consistency + checks into assertions. When relaxation produces an operation that + does not fit in the current FLIX instruction, make sure that the + operation is relaxed as needed to account for being placed following + the current instruction. + +2008-02-04 H.J. Lu + + PR 5715 + * configure: Regenerated. + +2008-02-04 Adam Nemet + + * config/tc-mips.c (mips_cpu_info_table): Add Octeon. + +2008-01-31 Marc Gauthier + + * configure.tgt (xtensa*-*-*): Recognize processor variants. + +2008-01-25 Kai Tietz + + * read.c: (emit_expr): Correct for mingw use of printf size + specifier. + +2008-01-24 Bob Wilson + + * doc/c-xtensa.texi (Xtensa Syntax): Clarify handling of opcodes that + can only be encoded in FLIX instructions but are not specified as such. + (Xtensa Automatic Alignment): Remove obsolete comment about debugging + labels. + +2008-01-24 H.J. Lu + + * NEWS: Mention new command line options for x86 targets. + +2008-01-23 H.J. Lu + + * config/tc-i386.c (md_show_usage): Replace tabs with spaces. + +2008-01-23 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Change opcode set for at86rf401. + +2008-01-23 H.J. Lu + + * config/tc-i386.c (md_show_usage): Show more processors for + -march=/-mtune=. + +2008-01-22 H.J. Lu + + * config/tc-i386.c (i386_target_format): Remove cpummx2. + +2008-01-22 H.J. Lu + + * config/tc-i386.c (XXX_PREFIX): Moved from tc-i386.h. + (XXX_MNEM_SUFFIX): Likewise. + (END_OF_INSN): Likewise. + (templates): Likewise. + (modrm_byte): Likewise. + (rex_byte): Likewise. + (DREX_XXX): Likewise. + (drex_byte): Likewise. + (sib_byte): Likewise. + (processor_type): Likewise. + (arch_entry): Likewise. + (cpu_sub_arch_name): Remove const. + (cpu_arch): Add .vmx and .smx. + (set_cpu_arch): Append cpu_sub_arch_name. + (md_parse_option): Support -march=CPU[,+EXTENSION...]. + (md_show_usage): Updated. + + * config/tc-i386.h (XXX_PREFIX): Moved to tc-i386.c. + (XXX_MNEM_SUFFIX): Likewise. + (END_OF_INSN): Likewise. + (templates): Likewise. + (modrm_byte): Likewise. + (rex_byte): Likewise. + (DREX_XXX): Likewise. + (drex_byte): Likewise. + (sib_byte): Likewise. + (processor_type): Likewise. + (arch_entry): Likewise. + + * doc/as.texinfo: Update i386 -march option. + + * doc/c-i386.texi: Update -march= for ISA. + +2008-01-18 Bob Wilson + + * config/tc-xtensa.c (xtensa_leb128): New function. + (md_pseudo_table): Use it for sleb128 and uleb128. + (is_leb128_expr): New internal flag. + (xtensa_symbol_new_hook): Check new flag. + +2008-01-16 Eric B. Weddington + + * config/tc-avr.c (mcu_types): Change opcode set for avr3, + at90usb82, at90usb162. + * doc/c-avr.texi: Change architecture grouping for at90usb82, + at90usb162. + These changes support the new avr35 architecture group in gcc. + +2008-01-15 H.J. Lu + + * config/tc-i386.c (md_assemble): Also zap movzx and movsx + suffix for AT&T syntax. + +2008-01-14 H.J. Lu + + * config/tc-i386.c (match_reg_size): New. + (match_mem_size): Likewise. + (operand_size_match): Likewise. + (operand_type_match): Also clear all size fields. + (match_template): Skip Intel syntax when in AT&T syntax. + Call operand_size_match to check operand size. + (i386_att_operand): Set the mem field to 1 for memory + operand. + (i386_intel_operand): Likewise. + +2008-01-12 H.J. Lu + + PR gas/5534 + * config/tc-i386.c (_i386_insn): Update comment. + (operand_type_match): Also clear unspecified. + (operand_type_register_match): Likewise. + (parse_operands): Initialize unspecified. + (i386_intel_operand): Likewise. + (match_template): Check memory and accumulator operand size. + (i386_att_operand): Clear unspecified on register operand. + (intel_e11): Likewise. + (intel_e09): Set operand size and clean unspecified for + "XXX PTR". + +2008-01-11 Andreas Schwab + + * read.c (s_space): Declare `repeat' as offsetT. + +2008-01-10 H.J. Lu + + * config/tc-i386.c (match_template): Check processor support + first. + +2008-01-10 H.J. Lu + + * config/tc-i386.c (match_template): Continue if processor + doesn't match. + +2008-01-09 Alexandre Oliva + + * config/tc-ia64.c (ia64_convert_frag): Zero-initialize room for + unwind personality function address. + +2008-01-09 Bob Wilson + + * dwarf2dbg.c (out_sleb128): Delete. + (size_fixed_inc_line_addr, emit_fixed_inc_line_addr): New. + (out_fixed_inc_line_addr): Delete. + (relax_inc_line_addr, dwarf2dbg_estimate_size_before_relax): Call new + size_fixed_inc_line_addr if DWARF2_USE_FIXED_ADVANCE_PC is set. + (dwarf2dbg_convert_frag): Likewise for emit_fixed_inc_line_addr. + (process_entries): Remove calls to out_fixed_inc_line_addr. When + DWARF2_USE_FIXED_ADVANCE_PC is set, call relax_inc_line_addr. + * read.h (emit_expr_fix): New prototype. + * read.c (emit_expr): Move code to emit_expr_fix and use it here. + (emit_expr_fix): New. + +2008-01-09 H.J. Lu + + * config/tc-i386.c (match_template): Check register size + only when size of operands can be encoded the canonical way. + +2008-01-08 H.J. Lu + + * config/tc-i386.c (i386_operand): Renamed to ... + (i386_att_operand): This. + (parse_operands): Updated. + +2008-01-05 H.J. Lu + + * doc/c-i386.texi: Update .att_mnemonic and .intel_mnemonic. + + * config/tc-i386.c (set_intel_mnemonic): Set intel_mnemonic + only. + (md_assemble): Remove Intel mode workaround. + (match_template): Check support for old gcc, AT&T mnemonic + and Intel Syntax. + (md_parse_option): Don't set intel_mnemonic to 0 for + OPTION_MOLD_GCC. + +2008-01-04 H.J. Lu + + * config/tc-i386.h: Update copyright to 2008. + +2008-01-04 Nick Clifton + + * config/tc-ppc.c (parse_cpu): Preserve the settings of the + PPC_OPCODE_ALTIVEC and PPC_OPCODE_SPE flags. + +2008-01-03 H.J. Lu + + * config/tc-i386.c (md_assemble): Use !intel_mnemonic instead + of SYSV386_COMPAT. + +2008-01-03 H.J. Lu + + * gas/config/tc-i386.c (cpu_arch_flags_not): Removed. + (cpu_flags_not): Likewise. + (cpu_flags_match): Updated to check 64bit and arch. + (set_code_flag): Remove cpu_arch_flags_not. + (set_16bit_gcc_code_flag): Likewise. + (set_cpu_arch): Likewise. + (md_begin): Likewise. + (parse_insn): Call cpu_flags_match to check 64bit and arch. + (match_template): Likewise. + +2008-01-03 Jakub Jelinek + + * config/tc-i386.c (process_drex): Initialize modrm_reg and + modrm_regmem to 0 instead of None. + +2008-01-03 H.J. Lu + + * config/tc-i386.c (match_template): Use the xmmword field + instead of no_xsuf. + +2008-01-02 H.J. Lu + + * config/tc-i386.c (process_suffix): Fix a typo. + +2008-01-02 H.J. Lu + + PR gas/5534 + * config/tc-i386.c (match_template): Handle XMMWORD_MNEM_SUFFIX. + Check memory size in Intel mode. + (process_suffix): Handle XMMWORD_MNEM_SUFFIX. + (intel_e09): Likewise. + + * config/tc-i386.h (XMMWORD_MNEM_SUFFIX): New. + +2008-01-02 Catherine Moore + + * config/tc-mips.c (mips_ip): Check operands on jalr instruction. + +For older changes see ChangeLog-2007 + +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 f2a3611..d3e8836 100644 --- a/gas/Makefile.am +++ b/gas/Makefile.am @@ -1,28 +1,24 @@ ## Process this file with automake to generate Makefile.in -AUTOMAKE_OPTIONS = 1.8 cygnus dejagnu +AUTOMAKE_OPTIONS = 1.11 dejagnu foreign no-dist 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) 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 = +# Automake 1.10+ disables lex and yacc output file regeneration if +# maintainer mode is disabled. Avoid this. +am__skiplex = +am__skipyacc = WARN_CFLAGS = @WARN_CFLAGS@ NO_WERROR = @NO_WERROR@ AM_CFLAGS = $(WARN_CFLAGS) -MKDEP = gcc -MM - TARG_CPU = @target_cpu_type@ TARG_CPU_C = $(srcdir)/config/tc-@target_cpu_type@.c TARG_CPU_O = tc-@target_cpu_type@.o @@ -64,6 +60,7 @@ CPU_TYPES = \ i960 \ ia64 \ ip2k \ + lm32 \ m32c \ m32r \ m68hc11 \ @@ -71,6 +68,7 @@ CPU_TYPES = \ maxq \ mcore \ mep \ + microblaze \ mips \ mmix \ mn10200 \ @@ -108,7 +106,8 @@ OBJ_FORMATS = \ coff \ ecoff \ elf \ - evax + evax \ + macho # 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 @@ -141,6 +140,10 @@ CPU_OBJ_VALID = \ case $$c in \ alpha) valid=yes ;; \ esac ;; \ + macho) \ + case $$c in \ + i386) valid=yes ;; \ + esac ;; \ vms) \ case $$c in \ vax) valid=yes ;; \ @@ -202,7 +205,7 @@ GAS_CFILES = \ symbols.c \ write.c -CFILES = $(GAS_CFILES) itbl-ops.c +CFILES = $(GAS_CFILES) itbl-ops.c cgen.c HFILES = \ as.h \ @@ -258,17 +261,23 @@ TARGET_CPU_CFILES = \ config/tc-i860.c \ config/tc-i960.c \ config/tc-ip2k.c \ + config/tc-iq2000.c \ + config/tc-lm32.c \ config/tc-m32c.c \ config/tc-m32r.c \ config/tc-m68hc11.c \ config/tc-m68k.c \ + config/tc-maxq.c \ config/tc-mcore.c \ config/tc-mep.c \ + config/tc-microblaze.c \ config/tc-mips.c \ config/tc-mmix.c \ config/tc-mn10200.c \ config/tc-mn10300.c \ + config/tc-moxie.c \ config/tc-msp430.c \ + config/tc-mt.c \ config/tc-ns32k.c \ config/tc-openrisc.c \ config/tc-or32.c \ @@ -282,6 +291,7 @@ TARGET_CPU_CFILES = \ config/tc-sparc.c \ config/tc-spu.c \ config/tc-tic30.c \ + config/tc-tic4x.c \ config/tc-tic54x.c \ config/tc-vax.c \ config/tc-v850.c \ @@ -289,7 +299,8 @@ TARGET_CPU_CFILES = \ config/tc-xc16x.c \ config/tc-xtensa.c \ config/tc-z80.c \ - config/tc-z8k.c + config/tc-z8k.c \ + config/xtensa-relax.c TARGET_CPU_HFILES = \ config/tc-alpha.h \ @@ -313,17 +324,22 @@ TARGET_CPU_HFILES = \ config/tc-i860.h \ config/tc-i960.h \ config/tc-ip2k.h \ + config/tc-iq2000.h \ + config/tc-lm32.h \ config/tc-m32c.h \ config/tc-m32r.h \ config/tc-m68hc11.h \ config/tc-m68k.h \ + config/tc-maxq.h \ config/tc-mcore.h \ config/tc-mep.h \ + config/tc-microblaze.h \ config/tc-mips.h \ config/tc-mmix.h \ config/tc-mn10200.h \ config/tc-mn10300.h \ config/tc-msp430.h \ + config/tc-mt.h \ config/tc-ns32k.h \ config/tc-openrisc.h \ config/tc-or32.h \ @@ -337,6 +353,7 @@ TARGET_CPU_HFILES = \ config/tc-sparc.h \ config/tc-spu.h \ config/tc-tic30.h \ + config/tc-tic4x.h \ config/tc-tic54x.h \ config/tc-vax.h \ config/tc-v850.h \ @@ -344,7 +361,8 @@ TARGET_CPU_HFILES = \ config/tc-xc16x.h \ config/tc-xtensa.h \ config/tc-z80.h \ - config/tc-z8k.h + config/tc-z8k.h \ + config/xtensa-relax.h # OBJ files in config @@ -354,6 +372,9 @@ OBJ_FORMAT_CFILES = \ config/obj-ecoff.c \ config/obj-elf.c \ config/obj-evax.c \ + config/obj-fdpicelf.c \ + config/obj-macho.c \ + config/obj-multi.c \ config/obj-som.c OBJ_FORMAT_HFILES = \ @@ -362,28 +383,30 @@ OBJ_FORMAT_HFILES = \ config/obj-ecoff.h \ config/obj-elf.h \ config/obj-evax.h \ + config/obj-fdpicelf.h \ + config/obj-macho.h \ + config/obj-multi.h \ config/obj-som.h # Emulation header files in config TARG_ENV_HFILES = \ config/te-386bsd.h \ + config/te-aix5.h \ + config/te-armeabi.h \ config/te-armlinuxeabi.h \ - config/te-aux.h \ - config/te-delta.h \ - config/te-delt88.h \ - config/te-dpx2.h \ config/te-dynix.h \ config/te-epoc-pe.h \ + config/te-freebsd.h \ config/te-generic.h \ + config/te-gnu.h \ config/te-go32.h \ config/te-hppa.h \ config/te-hppa64.h \ config/te-hppalinux64.h \ config/te-i386aix.h \ config/te-ia64aix.h \ - config/te-ic960.h \ - config/te-linux.h \ + config/te-interix.h \ config/te-lnews.h \ config/te-lynx.h \ config/te-mach.h \ @@ -395,13 +418,18 @@ TARG_ENV_HFILES = \ config/te-pe.h \ config/te-psos.h \ config/te-riscix.h \ + config/te-solaris.h \ config/te-sparcaout.h \ config/te-sun3.h \ config/te-svr4.h \ config/te-symbian.h \ config/te-tmips.h \ + config/te-vxworks.h \ config/te-wince-pe.h +TARG_ENV_CFILES = \ + config/te-vms.c + # Multi files in config MULTI_CFILES = \ @@ -450,13 +478,18 @@ GENERIC_OBJS = \ sb.o \ macro.o +CONFIG_ATOF_CFILES = \ + config/atof-ieee.c \ + config/atof-vax.c + OBJS = $(CONFIG_OBJS) $(GENERIC_OBJS) -POTFILES = $(MULTI_CFILES) $(TARGET_ENV_HFILES) $(OBJ_FORMAT_HFILES) \ +POTFILES = $(MULTI_CFILES) $(CONFIG_ATOF_CFILES) \ + $(TARG_ENV_HFILES) $(TARG_ENV_CFILES) $(OBJ_FORMAT_HFILES) \ $(OBJ_FORMAT_CFILES) $(TARGET_CPU_HFILES) $(TARGET_CPU_CFILES) \ $(HFILES) $(CFILES) po/POTFILES.in: @MAINT@ Makefile - for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \ + for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \ && mv tmp $(srcdir)/po/POTFILES.in # Note: GASP is now deprecated and has been removed. It is still @@ -469,7 +502,6 @@ EXTRA_DIST = m68k-parse.c itbl-parse.c itbl-parse.h itbl-lex.c \ bfin-parse.c bfin-parse.h bfin-lex.c diststuff: $(EXTRA_DIST) info -all: info DISTCLEANFILES = targ-cpu.h obj-format.h targ-env.h itbl-cpu.h cgen-desc.h @@ -484,22 +516,10 @@ 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 \ +AM_CPPFLAGS = -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 @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. @@ -513,15 +533,9 @@ as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \ $(extra_objects) $(GASLIBS) $(LIBINTL) $(LIBM) as_new_DEPENDENCIES = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \ $(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): ../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 +EXTRA_as_new_SOURCES = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \ + $(TARGET_CPU_HFILES) $(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES) \ + $(TARG_ENV_CFILES) $(CONFIG_ATOF_CFILES) $(MULTI_CFILES) EXPECT = expect RUNTEST = runtest @@ -546,58 +560,9 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi -# The implicit .c.o rule doesn't work for these, perhaps because of -# the variables, or perhaps because the sources are not on vpath. -$(TARG_CPU_O): $(TARG_CPU_C) - $(COMPILE) -c $(TARG_CPU_C) -$(ATOF_TARG_O): $(ATOF_TARG_C) - $(COMPILE) -c $(ATOF_TARG_C) - -# ecoff.c only has full dependencies when ECOFF_DEBUGGING is defined, -# so the automatic dependency stuff doesn't work. -ecoff.o : ecoff.c ecoff.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/symconst.h \ - $(INCDIR)/aout/stab_gnu.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 $(DEP_@target_cpu_type@_aout) - $(COMPILE) -c $(srcdir)/config/obj-aout.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 $(DEP_@target_cpu_type@_ecoff) - $(COMPILE) -c $(srcdir)/config/obj-ecoff.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-multi.o : $(srcdir)/config/obj-multi.c - $(COMPILE) -c $(srcdir)/config/obj-multi.c -obj-som.o : $(srcdir)/config/obj-som.c - $(COMPILE) -c $(srcdir)/config/obj-som.c - -e-mipself.o : $(srcdir)/config/e-mipself.c - $(COMPILE) -c $(srcdir)/config/e-mipself.c -e-mipsecoff.o : $(srcdir)/config/e-mipsecoff.c - $(COMPILE) -c $(srcdir)/config/e-mipsecoff.c -e-i386aout.o: $(srcdir)/config/e-i386aout.c - $(COMPILE) -c $(srcdir)/config/e-i386aout.c -e-i386coff.o: $(srcdir)/config/e-i386coff.c - $(COMPILE) -c $(srcdir)/config/e-i386coff.c -e-i386elf.o: $(srcdir)/config/e-i386elf.c - $(COMPILE) -c $(srcdir)/config/e-i386elf.c -e-crisaout.o: $(srcdir)/config/e-crisaout.c - $(COMPILE) -c $(srcdir)/config/e-crisaout.c -e-criself.o: $(srcdir)/config/e-criself.c - $(COMPILE) -c $(srcdir)/config/e-criself.c - -xtensa-relax.o: $(srcdir)/config/xtensa-relax.c - $(COMPILE) -c $(srcdir)/config/xtensa-relax.c - # The m68k operand parser. -EXTRA_as_new_SOURCES = config/m68k-parse.y config/bfin-parse.y +EXTRA_as_new_SOURCES += config/m68k-parse.y config/bfin-parse.y # If m68k-parse.y is in a different directory, then ylwrap will use an # absolute path when it invokes yacc, which will cause yacc to put the @@ -623,8 +588,17 @@ m68k-parse.c: $(srcdir)/config/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. -m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h - $(COMPILE) -c $< $(NO_WERROR) +m68k-parse.o: m68k-parse.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f m68k-parse.c || echo $(srcdir)/`m68k-parse.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='m68k-parse.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f m68k-parse.c || echo $(srcdir)/`m68k-parse.c $(NO_WERROR) +endif # Don't let the .y.h rule clobber m68k-parse.h. m68k-parse.h: ; @true @@ -633,35 +607,63 @@ $(srcdir)/config/m68k-parse.h: ; @true bfin-parse.c: $(srcdir)/config/bfin-parse.y $(SHELL) $(YLWRAP) $(srcdir)/config/bfin-parse.y y.tab.c bfin-parse.c y.tab.h bfin-parse.h -- $(YACCCOMPILE) -d ; bfin-parse.h: bfin-parse.c -bfin-parse.o: bfin-parse.c bfin-parse.h $(srcdir)/config/bfin-defs.h \ +bfin-parse.o: bfin-parse.c \ + $(srcdir)/config/bfin-aux.h $(srcdir)/config/bfin-defs.h \ $(INCDIR)/elf/common.h $(INCDIR)/elf/bfin.h $(BFDDIR)/libbfd.h -bfin-defs.h: ; @true -$(srcdir)/config/bfin-defs.h: ; @true +bfin-parse.h: ; @true +$(srcdir)/config/bfin-parse.h: ; @true bfin-lex.c: $(srcdir)/config/bfin-lex.l $(SHELL) $(YLWRAP) $(srcdir)/config/bfin-lex.l lex.yy.c bfin-lex.c -- $(LEXCOMPILE) bfin-lex.o: bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h - $(COMPILE) -c $< $(NO_WERROR) +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f bfin-lex.c || echo $(srcdir)/`bfin-lex.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='bfin-lex.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f bfin-lex.c || echo $(srcdir)/`bfin-lex.c $(NO_WERROR) +endif # The instruction table specification lexical analyzer and parser. -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. -itbl-lex.o: itbl-lex.c itbl-parse.h $(srcdir)/itbl-lex.h - $(COMPILE) -c $< $(NO_WERROR) +itbl-lex.o: itbl-lex.c itbl-parse.h +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f itbl-lex.c || echo $(srcdir)/`itbl-lex.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='itbl-lex.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f itbl-lex.c || echo $(srcdir)/`itbl-lex.c $(NO_WERROR) +endif # Disable -Werror, if it has been enabled, since old versions of bison/ # 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) +itbl-parse.o: itbl-parse.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f itbl-parse.c || echo $(srcdir)/`itbl-parse.c $(NO_WERROR) + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='itbl-parse.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -c `test -f itbl-parse.c || echo $(srcdir)/`itbl-parse.c $(NO_WERROR) +endif + +itbl-parse.c: $(srcdir)/itbl-parse.y + $(SHELL) $(YLWRAP) $(srcdir)/itbl-parse.y y.tab.c itbl-parse.c y.tab.h itbl-parse.h -- $(YACCCOMPILE) -d -itbl-ops.o: $(srcdir)/itbl-ops.c $(srcdir)/itbl-ops.h itbl-parse.h +itbl-parse.h: itbl-parse.c ; @true -itbl-parse.c itbl-parse.h: $(srcdir)/itbl-parse.y - $(SHELL) $(YLWRAP) $(srcdir)/itbl-parse.y y.tab.c itbl-parse.c y.tab.h itbl-parse.h -- $(YACCCOMPILE) -d +itbl-ops.o: itbl-parse.h # stand-alone itbl assembler & disassembler @@ -669,11 +671,29 @@ EXTRA_PROGRAMS = itbl-test itbl_test_SOURCES = itbl-parse.y itbl-lex.l itbl_test_LDADD = itbl-tops.o itbl-test.o $(GASLIBS) @LEXLIB@ -itbl-tops.o: $(srcdir)/itbl-ops.c $(srcdir)/itbl-ops.h itbl-parse.h - $(COMPILE) -o itbl-tops.o -DSTAND_ALONE -c $(srcdir)/itbl-ops.c - -itbl-test.o: $(srcdir)/testsuite/gas/all/itbl-test.c $(srcdir)/itbl-ops.h +itbl-tops.o: itbl-ops.c itbl-parse.h +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -o $@ -c -DSTAND_ALONE $(srcdir)/itbl-ops.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='itbl-ops.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif + $(COMPILE) -o $@ -DSTAND_ALONE -c $(srcdir)/itbl-ops.c +endif + +itbl-test.o: $(srcdir)/testsuite/gas/all/itbl-test.c +if am__fastdepCC + $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DSTAND_ALONE $(srcdir)/testsuite/gas/all/itbl-test.c + mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +else +if AMDEP + source='itbl-test.c' object='$@' libtool=no @AMDEPBACKSLASH@ + DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +endif $(COMPILE) -c -DSTAND_ALONE $(srcdir)/testsuite/gas/all/itbl-test.c +endif # CGEN interface. @@ -690,37 +710,6 @@ MOSTLYCLEANFILES = $(STAGESTUFF) core \ testsuite/*.o testsuite/*.out testsuite/gas.log testsuite/gas.sum \ testsuite/site.exp site.bak site.exp stage stage1 stage2 -CLEANFILES = dep.sed DEPTC DEPTCA DEPOBJ DEPOBJA DEP2 DEP2A DEP1 DEPA DEP DEPDIR - -.PHONY: install-html install-html-am install-html-recursive - -install-html: install-html-recursive - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - .PHONY: install-exec-local install-data-local .PHONY: install-exec-bindir install-exec-tooldir @@ -823,1366 +812,4 @@ de-stage3: - (cd stage3 ; rm -f as$(EXEEXT) ; mv -f * ..) - rmdir stage3 -DEP_FILE_DEPS = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \ - $(TARGET_CPU_HFILES) $(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES) - CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in $(srcdir)/configure.tgt - -# Automatic dependency computation. This is a real pain, because the -# dependencies change based on target_cpu_type and obj_format. -# Just to make things even more complicated, automake separates the -# dependency variable assignments from the dependency rules, and tacks -# on a .NOEXPORT at the end of Makefile.in. - -DEP: dep.sed $(DEP_FILE_DEPS) DEPTC DEPOBJ DEP2 - rm -f DEP1 # delete because we use $? in DEP1 rule - srcdir=`cd $(srcdir); pwd`; \ - $(MAKE) MKDEP="$(MKDEP)" srcdir="$${srcdir}" VPATH="$${srcdir}" DEP1 - rm -rf DEPDIR - echo 'AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.' > DEPA - sed -f dep.sed < DEPTC >> DEPA - sed -f dep.sed < DEPOBJ >> DEPA - sed -f dep.sed < DEP2 >> DEPA - echo 'BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.' >> DEPA - echo '#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.' >> DEPA - sed -f dep.sed < DEP1 >> DEPA - echo '$$(OBJS): $$(DEP_@target''_cpu_type@_@obj''_format@)' >> DEPA - echo '$$(TARG_CPU_O): $$(DEPTC_@target''_cpu_type@_@obj''_format@)' >> DEPA - echo '$$(OBJ_FORMAT_O): $$(DEPOBJ_@target''_cpu_type@_@obj''_format@)' >> DEPA - echo '#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.' >> DEPA - if grep ' /' DEPA > /dev/null 2> /dev/null; then \ - echo 'make DEP failed!'; exit 1; \ - else \ - mv -f DEPA $@; \ - fi - -DEP1: $(CFILES) $(MULTI_CFILES) - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - echo '' > targ-cpu.h; \ - echo '' > obj-format.h; \ - echo '' > targ-env.h; \ - echo '' > itbl-cpu.h; \ - echo '' > itbl-parse.h; \ - $(MKDEP) $(DEP_FLAGS) $? > DEP - mv -f DEPDIR/DEP $@ - -# Work out the special dependencies for the tc-*.c files. -DEPTC: $(TARGET_CPU_CFILES) - rm -f DEPTCA - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - for c in $(CPU_TYPES); do \ - for o in $(OBJ_FORMATS); do \ - $(CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '#include "tc-'"$${c}"'.h"' > targ-cpu.h; \ - echo '#include "obj-'"$${o}"'.h"' > obj-format.h; \ - echo '#include "te-generic.h"' > targ-env.h; \ - echo '' > itbl-cpu.h; \ - echo '' > itbl-parse.h; \ - echo '#include "opcodes/'"$${c}"'-desc.h"' > cgen-desc.h; \ - rm -f dummy.c; \ - cp $${srcdir}/config/tc-$${c}.c dummy.c; \ - $(MKDEP) $(DEP_FLAGS) dummy.c | \ - sed -e "s/dummy.o: dummy.c/DEPTC_$${c}_$${o} =/" >> ../DEPTCA; \ - rm -f dummy.c; \ - else true; fi; \ - done; \ - done - echo 'DEPTC_hppa_som = $$(srcdir)/config/tc-hppa.h subsegs.h \' >> DEPTCA - echo ' $$(INCDIR)/obstack.h $$(BFDDIR)/libhppa.h \' >> DEPTCA - echo ' $$(INCDIR)/opcode/hppa.h $$(BFDDIR)/som.h' >> DEPTCA - for c in $(MULTI_CPU_TYPES); do \ - echo "DEPTC_$${c}"'_multi = \' >> DEPTCA; \ - for o in $(OBJ_FORMATS); do \ - $(MULTI_CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '$$(DEPTC_'"$${c}_$${o}"') \' >> DEPTCA; \ - else true; fi; \ - done; \ - echo '' >> DEPTCA; \ - done - mv -f DEPTCA DEPTC - -# Work out the special dependencies for the obj-*.c files. -DEPOBJ: $(OBJ_FORMAT_CFILES) - rm -f DEPOBJA - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - for c in $(CPU_TYPES); do \ - for o in $(OBJ_FORMATS); do \ - $(CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '#include "tc-'"$${c}"'.h"' > targ-cpu.h; \ - echo '#include "obj-'"$${o}"'.h"' > obj-format.h; \ - echo '#include "te-generic.h"' > targ-env.h; \ - echo '' > itbl-cpu.h; \ - echo '' > itbl-parse.h; \ - rm -f dummy.c; \ - cp $${srcdir}/config/obj-$${o}.c dummy.c; \ - $(MKDEP) $(DEP_FLAGS) dummy.c | \ - sed -e "s/dummy.o: dummy.c/DEPOBJ_$${c}_$${o} =/" >> ../DEPOBJA; \ - rm -f dummy.c; \ - else true; fi; \ - done; \ - done - echo 'DEPOBJ_hppa_som = $$(srcdir)/config/obj-som.h subsegs.h \' >> DEPOBJA - echo ' $$(INCDIR)/obstack.h $$(BFDDIR)/libhppa.h \' >> DEPOBJA - echo ' $$(BFDDIR)/som.h $$(INCDIR)/aout/stab_gnu.h \' >> DEPOBJA - echo ' $$(INCDIR)/aout/stab.def' >> DEPOBJA - for c in $(MULTI_CPU_TYPES); do \ - echo "DEPOBJ_$${c}"'_multi = \' >> DEPOBJA; \ - for o in $(OBJ_FORMATS); do \ - $(MULTI_CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '$$(DEPOBJ_'"$${c}_$${o}"') \' >> DEPOBJA; \ - else true; fi; \ - done; \ - echo '' >> DEPOBJA; \ - done - mv -f DEPOBJA DEPOBJ - -# Work out the dependencies for each CPU/OBJ combination. -# Note that SOM is a special case, because it only works native. -DEP2: $(TARGET_CPU_HFILES) $(OBJ_FORMAT_HFILES) - rm -f DEP2A - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - for c in $(CPU_TYPES); do \ - for o in $(OBJ_FORMATS); do \ - $(CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '#include "tc-'"$${c}"'.h"' > targ-cpu.h; \ - echo '#include "obj-'"$${o}"'.h"' > dummy.c; \ - $(MKDEP) $(DEP_FLAGS) dummy.c | \ - sed -e "s/dummy.o: dummy.c/DEP_$${c}_$${o} =/" >> ../DEP2A; \ - else true; fi; \ - done; \ - done - echo 'DEP_hppa_som = $$(BFDDIR)/som.h' >> DEP2A - for c in $(MULTI_CPU_TYPES); do \ - echo "DEP_$${c}"'_multi = \' >> DEP2A; \ - for o in $(OBJ_FORMATS); do \ - $(MULTI_CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '$$(DEP_'"$${c}_$${o}"') \' >> DEP2A; \ - else true; fi; \ - done; \ - echo '' >> DEP2A; \ - done - mv -f DEP2A DEP2 - -dep.sed: dep-in.sed config.status - srcdir=`cd $(srcdir); pwd`; \ - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e "s!@INCDIR@!$${srcdir}/../include!" \ - -e "s!@BFDDIR@!$${srcdir}/../bfd!" \ - -e "s!@SRCDIR@!$${srcdir}!" \ - -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/gas,,`'!' - -dep: DEP - sed -e '/^.MKDEP.*WARNING BELOW./,/^.MKDEP.*WARNING ABOVE./d' \ - < Makefile > tmp-Makefile - cat DEP >> tmp-Makefile - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: DEP - sed -e '/^.MKDEP.*WARNING BELOW./,/^.MKDEP.*WARNING ABOVE./d' \ - < $(srcdir)/Makefile.in > tmp-Makefile.in - cat DEP >> tmp-Makefile.in - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: DEP - sed -e '/^.MKDEP.*WARNING BELOW./,/^.MKDEP.*WARNING ABOVE./d' \ - < $(srcdir)/Makefile.am > tmp-Makefile.am - cat DEP >> tmp-Makefile.am - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - -# HEED THE MKDEP WARNINGS. -# ANYTHING CHANGED OR ADDED BETWEEN THE WARNING LINES MAY GO AWAY. -.PHONY: dep dep-in dep-am - -AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW. -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_elf = $(srcdir)/config/obj-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_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_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)/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_elf = $(srcdir)/config/obj-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_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_elf = $(srcdir)/config/obj-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_elf = $(srcdir)/config/obj-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_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-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 \ - $(srcdir)/../opcodes/fr30-desc.h $(INCDIR)/opcode/cgen-bitset.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_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_elf = $(srcdir)/config/obj-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 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 = $(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 \ - $(INCDIR)/opcode/i860.h $(INCDIR)/elf/i860.h $(INCDIR)/elf/reloc-macros.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_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 \ - $(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_elf = $(srcdir)/config/obj-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_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 = $(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 = $(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_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_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 \ - 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)/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 $(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 = $(srcdir)/config/obj-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 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_elf = $(srcdir)/config/obj-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_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 \ - $(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_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 = $(srcdir)/config/obj-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 \ - $(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 $(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_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 \ - $(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 $(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 = $(srcdir)/config/obj-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_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 \ - $(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 \ - $(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 $(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 -DEPTC_i386_multi = $(DEPTC_i386_aout) $(DEPTC_i386_coff) \ - $(DEPTC_i386_elf) -DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \ - $(DEPTC_mips_elf) -DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf) -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 = $(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 \ - $(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 $(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 \ - $(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 \ - $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h -DEPOBJ_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 subsegs.h $(INCDIR)/obstack.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 \ - $(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 $(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 $(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 \ - $(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 $(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 = $(srcdir)/config/obj-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 $(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 $(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 $(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 \ - $(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 \ - $(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 $(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 \ - $(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 $(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 $(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 $(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_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 $(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 \ - $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.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 \ - $(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 \ - $(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 $(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 -DEPOBJ_i386_multi = $(DEPOBJ_i386_aout) $(DEPOBJ_i386_coff) \ - $(DEPOBJ_i386_elf) -DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \ - $(DEPOBJ_mips_elf) -DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf) -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 $(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_elf = $(srcdir)/config/obj-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)/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 $(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)/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 $(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 \ - $(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 $(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_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)/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)/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)/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 $(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_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)/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_elf = $(srcdir)/config/obj-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)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \ - $(INCDIR)/bfdlink.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)/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)/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)/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)/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)/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_elf = $(srcdir)/config/obj-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)/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)/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) -DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \ - $(DEP_mips_elf) -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 -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 -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 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 -remap.o: remap.c -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@) -#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE. diff --git a/gas/Makefile.in b/gas/Makefile.in index 1c5958d..e313686 100644 --- a/gas/Makefile.in +++ b/gas/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,15 +16,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ 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 @@ -40,34 +38,36 @@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = as-new$(EXEEXT) EXTRA_PROGRAMS = itbl-test$(EXEEXT) -DIST_COMMON = $(srcdir)/../config.guess $(srcdir)/../config.sub NEWS \ - README ChangeLog $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ - $(top_srcdir)/configure $(am__configure_deps) \ - $(srcdir)/config.in $(srcdir)/../mkinstalldirs \ - $(srcdir)/gdbinit.in $(srcdir)/gdbinit.in \ - $(top_srcdir)/po/Make-in m68k-parse.c bfin-parse.c \ - itbl-parse.c itbl-lex.c $(srcdir)/../ylwrap \ - $(srcdir)/../ltmain.sh $(srcdir)/../config.guess \ - $(srcdir)/../config.sub subdir = . +DIST_COMMON = NEWS README ChangeLog $(srcdir)/Makefile.in \ + $(srcdir)/Makefile.am $(top_srcdir)/configure \ + $(am__configure_deps) $(srcdir)/config.in \ + $(srcdir)/../mkinstalldirs $(srcdir)/gdbinit.in \ + $(srcdir)/gdbinit.in $(top_srcdir)/po/Make-in m68k-parse.c \ + bfin-parse.c itbl-parse.c itbl-lex.c $(srcdir)/../depcomp \ + $(srcdir)/../ylwrap ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 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/nls.m4 \ + $(top_srcdir)/../config/override.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 + $(top_srcdir)/../lt~obsolete.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 \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = gdb.ini .gdbinit po/Makefile.in +CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__objects_1 = app.$(OBJEXT) as.$(OBJEXT) atof-generic.$(OBJEXT) \ cond.$(OBJEXT) depend.$(OBJEXT) dwarf2dbg.$(OBJEXT) \ @@ -81,48 +81,54 @@ am__objects_1 = app.$(OBJEXT) as.$(OBJEXT) atof-generic.$(OBJEXT) \ symbols.$(OBJEXT) write.$(OBJEXT) am_as_new_OBJECTS = $(am__objects_1) as_new_OBJECTS = $(am_as_new_OBJECTS) -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 = ../bfd/libbfd.la ../libiberty/libiberty.a +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = ../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) +itbl_test_DEPENDENCIES = itbl-tops.o itbl-test.o $(am__DEPENDENCIES_2) SCRIPTS = $(noinst_SCRIPTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -depcomp = -am__depfiles_maybe = +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/../depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +@MAINTAINER_MODE_FALSE@am__skiplex = test -f $@ || LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS) -LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) -YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) -LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \ - $(AM_YFLAGS) +LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) YLWRAP = $(top_srcdir)/../ylwrap +@MAINTAINER_MODE_FALSE@am__skipyacc = test -f $@ || +YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS) SOURCES = $(as_new_SOURCES) $(EXTRA_as_new_SOURCES) \ $(itbl_test_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 + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS ETAGS = etags CTAGS = ctags DEJATOOL = $(PACKAGE) RUNTESTDEFAULTFLAGS = --tool $$tool --srcdir $$srcdir +DIST_SUBDIRS = $(SUBDIRS) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -140,6 +146,7 @@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ +DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ @@ -149,11 +156,10 @@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDBINIT = @GDBINIT@ GENCAT = @GENCAT@ -GENINSRC_NEVER_FALSE = @GENINSRC_NEVER_FALSE@ -GENINSRC_NEVER_TRUE = @GENINSRC_NEVER_TRUE@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ INCINTL = @INCINTL@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -170,24 +176,29 @@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ -MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ -MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGMERGE = @MSGMERGE@ NM = @NM@ +NMEDIT = @NMEDIT@ NO_WERROR = @NO_WERROR@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OPCODES_LIB = @OPCODES_LIB@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ POSUB = @POSUB@ @@ -201,13 +212,13 @@ 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@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -220,10 +231,12 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ cgen_cpu_prefix = @cgen_cpu_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ extra_objects = @extra_objects@ host = @host@ @@ -238,16 +251,20 @@ install_sh = @install_sh@ install_tooldir = @install_tooldir@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ lt_ECHO = @lt_ECHO@ mandir = @mandir@ mkdir_p = @mkdir_p@ obj_format = @obj_format@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ @@ -256,19 +273,19 @@ target_cpu_type = @target_cpu_type@ target_os = @target_os@ target_vendor = @target_vendor@ te_file = @te_file@ -AUTOMAKE_OPTIONS = 1.8 cygnus dejagnu +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +AUTOMAKE_OPTIONS = 1.11 dejagnu foreign no-dist 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 = +# Automake 1.10+ disables lex and yacc output file regeneration if +# maintainer mode is disabled. Avoid this. +am__skiplex = +am__skipyacc = AM_CFLAGS = $(WARN_CFLAGS) -MKDEP = gcc -MM TARG_CPU = @target_cpu_type@ TARG_CPU_C = $(srcdir)/config/tc-@target_cpu_type@.c TARG_CPU_O = tc-@target_cpu_type@.o @@ -309,6 +326,7 @@ CPU_TYPES = \ i960 \ ia64 \ ip2k \ + lm32 \ m32c \ m32r \ m68hc11 \ @@ -316,6 +334,7 @@ CPU_TYPES = \ maxq \ mcore \ mep \ + microblaze \ mips \ mmix \ mn10200 \ @@ -353,7 +372,8 @@ OBJ_FORMATS = \ coff \ ecoff \ elf \ - evax + evax \ + macho # This is an sh case which sets valid according to whether the CPU @@ -386,6 +406,10 @@ CPU_OBJ_VALID = \ case $$c in \ alpha) valid=yes ;; \ esac ;; \ + macho) \ + case $$c in \ + i386) valid=yes ;; \ + esac ;; \ vms) \ case $$c in \ vax) valid=yes ;; \ @@ -446,7 +470,7 @@ GAS_CFILES = \ symbols.c \ write.c -CFILES = $(GAS_CFILES) itbl-ops.c +CFILES = $(GAS_CFILES) itbl-ops.c cgen.c HFILES = \ as.h \ asintl.h \ @@ -501,17 +525,23 @@ TARGET_CPU_CFILES = \ config/tc-i860.c \ config/tc-i960.c \ config/tc-ip2k.c \ + config/tc-iq2000.c \ + config/tc-lm32.c \ config/tc-m32c.c \ config/tc-m32r.c \ config/tc-m68hc11.c \ config/tc-m68k.c \ + config/tc-maxq.c \ config/tc-mcore.c \ config/tc-mep.c \ + config/tc-microblaze.c \ config/tc-mips.c \ config/tc-mmix.c \ config/tc-mn10200.c \ config/tc-mn10300.c \ + config/tc-moxie.c \ config/tc-msp430.c \ + config/tc-mt.c \ config/tc-ns32k.c \ config/tc-openrisc.c \ config/tc-or32.c \ @@ -525,6 +555,7 @@ TARGET_CPU_CFILES = \ config/tc-sparc.c \ config/tc-spu.c \ config/tc-tic30.c \ + config/tc-tic4x.c \ config/tc-tic54x.c \ config/tc-vax.c \ config/tc-v850.c \ @@ -532,7 +563,8 @@ TARGET_CPU_CFILES = \ config/tc-xc16x.c \ config/tc-xtensa.c \ config/tc-z80.c \ - config/tc-z8k.c + config/tc-z8k.c \ + config/xtensa-relax.c TARGET_CPU_HFILES = \ config/tc-alpha.h \ @@ -556,17 +588,22 @@ TARGET_CPU_HFILES = \ config/tc-i860.h \ config/tc-i960.h \ config/tc-ip2k.h \ + config/tc-iq2000.h \ + config/tc-lm32.h \ config/tc-m32c.h \ config/tc-m32r.h \ config/tc-m68hc11.h \ config/tc-m68k.h \ + config/tc-maxq.h \ config/tc-mcore.h \ config/tc-mep.h \ + config/tc-microblaze.h \ config/tc-mips.h \ config/tc-mmix.h \ config/tc-mn10200.h \ config/tc-mn10300.h \ config/tc-msp430.h \ + config/tc-mt.h \ config/tc-ns32k.h \ config/tc-openrisc.h \ config/tc-or32.h \ @@ -580,6 +617,7 @@ TARGET_CPU_HFILES = \ config/tc-sparc.h \ config/tc-spu.h \ config/tc-tic30.h \ + config/tc-tic4x.h \ config/tc-tic54x.h \ config/tc-vax.h \ config/tc-v850.h \ @@ -587,7 +625,8 @@ TARGET_CPU_HFILES = \ config/tc-xc16x.h \ config/tc-xtensa.h \ config/tc-z80.h \ - config/tc-z8k.h + config/tc-z8k.h \ + config/xtensa-relax.h # OBJ files in config @@ -597,6 +636,9 @@ OBJ_FORMAT_CFILES = \ config/obj-ecoff.c \ config/obj-elf.c \ config/obj-evax.c \ + config/obj-fdpicelf.c \ + config/obj-macho.c \ + config/obj-multi.c \ config/obj-som.c OBJ_FORMAT_HFILES = \ @@ -605,28 +647,30 @@ OBJ_FORMAT_HFILES = \ config/obj-ecoff.h \ config/obj-elf.h \ config/obj-evax.h \ + config/obj-fdpicelf.h \ + config/obj-macho.h \ + config/obj-multi.h \ config/obj-som.h # Emulation header files in config TARG_ENV_HFILES = \ config/te-386bsd.h \ + config/te-aix5.h \ + config/te-armeabi.h \ config/te-armlinuxeabi.h \ - config/te-aux.h \ - config/te-delta.h \ - config/te-delt88.h \ - config/te-dpx2.h \ config/te-dynix.h \ config/te-epoc-pe.h \ + config/te-freebsd.h \ config/te-generic.h \ + config/te-gnu.h \ config/te-go32.h \ config/te-hppa.h \ config/te-hppa64.h \ config/te-hppalinux64.h \ config/te-i386aix.h \ config/te-ia64aix.h \ - config/te-ic960.h \ - config/te-linux.h \ + config/te-interix.h \ config/te-lnews.h \ config/te-lynx.h \ config/te-mach.h \ @@ -638,13 +682,18 @@ TARG_ENV_HFILES = \ config/te-pe.h \ config/te-psos.h \ config/te-riscix.h \ + config/te-solaris.h \ config/te-sparcaout.h \ config/te-sun3.h \ config/te-svr4.h \ config/te-symbian.h \ config/te-tmips.h \ + config/te-vxworks.h \ config/te-wince-pe.h +TARG_ENV_CFILES = \ + config/te-vms.c + # Multi files in config MULTI_CFILES = \ @@ -693,8 +742,13 @@ GENERIC_OBJS = \ sb.o \ macro.o +CONFIG_ATOF_CFILES = \ + config/atof-ieee.c \ + config/atof-vax.c + OBJS = $(CONFIG_OBJS) $(GENERIC_OBJS) -POTFILES = $(MULTI_CFILES) $(TARGET_ENV_HFILES) $(OBJ_FORMAT_HFILES) \ +POTFILES = $(MULTI_CFILES) $(CONFIG_ATOF_CFILES) \ + $(TARG_ENV_HFILES) $(TARG_ENV_CFILES) $(OBJ_FORMAT_HFILES) \ $(OBJ_FORMAT_CFILES) $(TARGET_CPU_HFILES) $(TARGET_CPU_CFILES) \ $(HFILES) $(CFILES) @@ -715,24 +769,11 @@ 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 \ +AM_CPPFLAGS = -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 @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@ ../bfd/libbfd.la ../libiberty/libiberty.a @@ -746,12 +787,15 @@ as_new_LDADD = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \ as_new_DEPENDENCIES = $(TARG_CPU_O) $(OBJ_FORMAT_O) $(ATOF_TARG_O) \ $(extra_objects) $(GASLIBS) $(LIBINTL_DEP) + +# The m68k operand parser. +EXTRA_as_new_SOURCES = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \ + $(TARGET_CPU_HFILES) $(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES) \ + $(TARG_ENV_CFILES) $(CONFIG_ATOF_CFILES) $(MULTI_CFILES) \ + config/m68k-parse.y config/bfin-parse.y EXPECT = expect RUNTEST = runtest RUNTESTFLAGS = - -# The m68k operand parser. -EXTRA_as_new_SOURCES = config/m68k-parse.y config/bfin-parse.y itbl_test_SOURCES = itbl-parse.y itbl-lex.l itbl_test_LDADD = itbl-tops.o itbl-test.o $(GASLIBS) @LEXLIB@ @@ -763,1379 +807,8 @@ MOSTLYCLEANFILES = $(STAGESTUFF) core \ testsuite/*.o testsuite/*.out testsuite/gas.log testsuite/gas.sum \ testsuite/site.exp site.bak site.exp stage stage1 stage2 -CLEANFILES = dep.sed DEPTC DEPTCA DEPOBJ DEPOBJA DEP2 DEP2A DEP1 DEPA DEP DEPDIR against = stage2 -DEP_FILE_DEPS = $(CFILES) $(HFILES) $(TARGET_CPU_CFILES) \ - $(TARGET_CPU_HFILES) $(OBJ_FORMAT_CFILES) $(OBJ_FORMAT_HFILES) - CONFIG_STATUS_DEPENDENCIES = $(BFDDIR)/configure.in $(srcdir)/configure.tgt -AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW. -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_elf = $(srcdir)/config/obj-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_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_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)/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_elf = $(srcdir)/config/obj-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_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_elf = $(srcdir)/config/obj-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_elf = $(srcdir)/config/obj-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_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-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 \ - $(srcdir)/../opcodes/fr30-desc.h $(INCDIR)/opcode/cgen-bitset.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_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_elf = $(srcdir)/config/obj-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 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 = $(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 \ - $(INCDIR)/opcode/i860.h $(INCDIR)/elf/i860.h $(INCDIR)/elf/reloc-macros.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_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 \ - $(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_elf = $(srcdir)/config/obj-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_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 = $(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 = $(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_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_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 \ - 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)/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 $(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 = $(srcdir)/config/obj-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 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_elf = $(srcdir)/config/obj-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_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 \ - $(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_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 = $(srcdir)/config/obj-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 \ - $(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 $(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_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 \ - $(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 $(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 = $(srcdir)/config/obj-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_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 \ - $(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 \ - $(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 $(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 - -DEPTC_i386_multi = $(DEPTC_i386_aout) $(DEPTC_i386_coff) \ - $(DEPTC_i386_elf) - -DEPTC_mips_multi = $(DEPTC_mips_coff) $(DEPTC_mips_ecoff) \ - $(DEPTC_mips_elf) - -DEPTC_cris_multi = $(DEPTC_cris_aout) $(DEPTC_cris_elf) -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 = $(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 \ - $(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 $(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 \ - $(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 \ - $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.h - -DEPOBJ_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 subsegs.h $(INCDIR)/obstack.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 \ - $(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 $(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 $(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 \ - $(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 $(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 = $(srcdir)/config/obj-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 $(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 $(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 $(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 \ - $(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 \ - $(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 $(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 \ - $(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 $(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 $(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 $(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_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 $(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 \ - $(INCDIR)/obstack.h struc-symbol.h dwarf2dbg.h $(INCDIR)/aout/aout64.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 \ - $(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 \ - $(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 $(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 - -DEPOBJ_i386_multi = $(DEPOBJ_i386_aout) $(DEPOBJ_i386_coff) \ - $(DEPOBJ_i386_elf) - -DEPOBJ_mips_multi = $(DEPOBJ_mips_coff) $(DEPOBJ_mips_ecoff) \ - $(DEPOBJ_mips_elf) - -DEPOBJ_cris_multi = $(DEPOBJ_cris_aout) $(DEPOBJ_cris_elf) -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 $(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_elf = $(srcdir)/config/obj-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)/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 $(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)/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 $(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 \ - $(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 $(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_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)/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)/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)/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 $(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_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)/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_elf = $(srcdir)/config/obj-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)/coff/internal.h $(INCDIR)/coff/rs6000.h $(BFDDIR)/libcoff.h \ - $(INCDIR)/bfdlink.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)/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)/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)/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)/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)/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_elf = $(srcdir)/config/obj-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)/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)/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) - -DEP_mips_multi = $(DEP_mips_coff) $(DEP_mips_ecoff) \ - $(DEP_mips_elf) - -DEP_cris_multi = $(DEP_cris_aout) $(DEP_cris_elf) -BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE. all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -2147,15 +820,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) --cygnus '; \ - cd $(srcdir) && $(AUTOMAKE) --cygnus \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --cygnus Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --cygnus Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -2171,21 +844,22 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -2199,17 +873,19 @@ po/Makefile.in: $(top_builddir)/config.status $(top_srcdir)/po/Make-in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list as-new$(EXEEXT): $(as_new_OBJECTS) $(as_new_DEPENDENCIES) @rm -f as-new$(EXEEXT) - $(LINK) $(as_new_LDFLAGS) $(as_new_OBJECTS) $(as_new_LDADD) $(LIBS) + $(LINK) $(as_new_OBJECTS) $(as_new_LDADD) $(LIBS) itbl-test$(EXEEXT): $(itbl_test_OBJECTS) $(itbl_test_DEPENDENCIES) @rm -f itbl-test$(EXEEXT) - $(LINK) $(itbl_test_LDFLAGS) $(itbl_test_OBJECTS) $(itbl_test_LDADD) $(LIBS) + $(LINK) $(itbl_test_OBJECTS) $(itbl_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -2217,22 +893,1268 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/as.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atof-generic.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atof-ieee.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atof-vax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bfin-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cgen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cond.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/depend.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dw2gencfi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwarf2dbg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-crisaout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-criself.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-i386aout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-i386coff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-i386elf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-mipsecoff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e-mipself.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecoff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ehopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flonum-copy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flonum-konst.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flonum-mult.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/frags.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/input-scrub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itbl-lex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itbl-ops.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itbl-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listing.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/literal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/m68k-parse.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/macro.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/messages.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-aout.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-coff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-ecoff.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-elf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-evax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-fdpicelf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-macho.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-multi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obj-som.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/output-file.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stabs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subsegs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/symbols.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-alpha.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-arc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-arm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-avr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-bfin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-cr16.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-cris.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-crx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-d10v.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-d30v.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-dlx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-fr30.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-frv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-h8300.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-hppa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-i370.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-i386.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-i860.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-i960.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ia64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ip2k.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-iq2000.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-lm32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-m32c.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-m32r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-m68hc11.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-m68k.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-maxq.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mcore.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-microblaze.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mips.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mmix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mn10200.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mn10300.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-moxie.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-msp430.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-mt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ns32k.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-openrisc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-or32.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-pdp11.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-pj.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-ppc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-s390.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-score.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-sh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-sh64.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-sparc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-spu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-tic30.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-tic4x.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-tic54x.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-v850.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-vax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-xc16x.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-xstormy16.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-xtensa.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-z80.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tc-z8k.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/te-vms.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtensa-relax.Po@am__quote@ + .c.o: - $(COMPILE) -c $< +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: - $(COMPILE) -c `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: - $(LTCOMPILE) -c -o $@ $< +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +tc-alpha.o: config/tc-alpha.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-alpha.o -MD -MP -MF $(DEPDIR)/tc-alpha.Tpo -c -o tc-alpha.o `test -f 'config/tc-alpha.c' || echo '$(srcdir)/'`config/tc-alpha.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-alpha.Tpo $(DEPDIR)/tc-alpha.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-alpha.c' object='tc-alpha.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-alpha.o `test -f 'config/tc-alpha.c' || echo '$(srcdir)/'`config/tc-alpha.c + +tc-alpha.obj: config/tc-alpha.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-alpha.obj -MD -MP -MF $(DEPDIR)/tc-alpha.Tpo -c -o tc-alpha.obj `if test -f 'config/tc-alpha.c'; then $(CYGPATH_W) 'config/tc-alpha.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-alpha.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-alpha.Tpo $(DEPDIR)/tc-alpha.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-alpha.c' object='tc-alpha.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-alpha.obj `if test -f 'config/tc-alpha.c'; then $(CYGPATH_W) 'config/tc-alpha.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-alpha.c'; fi` + +tc-arc.o: config/tc-arc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-arc.o -MD -MP -MF $(DEPDIR)/tc-arc.Tpo -c -o tc-arc.o `test -f 'config/tc-arc.c' || echo '$(srcdir)/'`config/tc-arc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-arc.Tpo $(DEPDIR)/tc-arc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-arc.c' object='tc-arc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-arc.o `test -f 'config/tc-arc.c' || echo '$(srcdir)/'`config/tc-arc.c + +tc-arc.obj: config/tc-arc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-arc.obj -MD -MP -MF $(DEPDIR)/tc-arc.Tpo -c -o tc-arc.obj `if test -f 'config/tc-arc.c'; then $(CYGPATH_W) 'config/tc-arc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-arc.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-arc.Tpo $(DEPDIR)/tc-arc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-arc.c' object='tc-arc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-arc.obj `if test -f 'config/tc-arc.c'; then $(CYGPATH_W) 'config/tc-arc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-arc.c'; fi` + +tc-arm.o: config/tc-arm.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-arm.o -MD -MP -MF $(DEPDIR)/tc-arm.Tpo -c -o tc-arm.o `test -f 'config/tc-arm.c' || echo '$(srcdir)/'`config/tc-arm.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-arm.Tpo $(DEPDIR)/tc-arm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-arm.c' object='tc-arm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-arm.o `test -f 'config/tc-arm.c' || echo '$(srcdir)/'`config/tc-arm.c + +tc-arm.obj: config/tc-arm.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-arm.obj -MD -MP -MF $(DEPDIR)/tc-arm.Tpo -c -o tc-arm.obj `if test -f 'config/tc-arm.c'; then $(CYGPATH_W) 'config/tc-arm.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-arm.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-arm.Tpo $(DEPDIR)/tc-arm.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-arm.c' object='tc-arm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-arm.obj `if test -f 'config/tc-arm.c'; then $(CYGPATH_W) 'config/tc-arm.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-arm.c'; fi` + +tc-avr.o: config/tc-avr.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-avr.o -MD -MP -MF $(DEPDIR)/tc-avr.Tpo -c -o tc-avr.o `test -f 'config/tc-avr.c' || echo '$(srcdir)/'`config/tc-avr.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-avr.Tpo $(DEPDIR)/tc-avr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-avr.c' object='tc-avr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-avr.o `test -f 'config/tc-avr.c' || echo '$(srcdir)/'`config/tc-avr.c + +tc-avr.obj: config/tc-avr.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-avr.obj -MD -MP -MF $(DEPDIR)/tc-avr.Tpo -c -o tc-avr.obj `if test -f 'config/tc-avr.c'; then $(CYGPATH_W) 'config/tc-avr.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-avr.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-avr.Tpo $(DEPDIR)/tc-avr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-avr.c' object='tc-avr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-avr.obj `if test -f 'config/tc-avr.c'; then $(CYGPATH_W) 'config/tc-avr.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-avr.c'; fi` + +tc-bfin.o: config/tc-bfin.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-bfin.o -MD -MP -MF $(DEPDIR)/tc-bfin.Tpo -c -o tc-bfin.o `test -f 'config/tc-bfin.c' || echo '$(srcdir)/'`config/tc-bfin.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-bfin.Tpo $(DEPDIR)/tc-bfin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-bfin.c' object='tc-bfin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-bfin.o `test -f 'config/tc-bfin.c' || echo '$(srcdir)/'`config/tc-bfin.c + +tc-bfin.obj: config/tc-bfin.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-bfin.obj -MD -MP -MF $(DEPDIR)/tc-bfin.Tpo -c -o tc-bfin.obj `if test -f 'config/tc-bfin.c'; then $(CYGPATH_W) 'config/tc-bfin.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-bfin.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-bfin.Tpo $(DEPDIR)/tc-bfin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-bfin.c' object='tc-bfin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-bfin.obj `if test -f 'config/tc-bfin.c'; then $(CYGPATH_W) 'config/tc-bfin.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-bfin.c'; fi` + +tc-cr16.o: config/tc-cr16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-cr16.o -MD -MP -MF $(DEPDIR)/tc-cr16.Tpo -c -o tc-cr16.o `test -f 'config/tc-cr16.c' || echo '$(srcdir)/'`config/tc-cr16.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-cr16.Tpo $(DEPDIR)/tc-cr16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-cr16.c' object='tc-cr16.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-cr16.o `test -f 'config/tc-cr16.c' || echo '$(srcdir)/'`config/tc-cr16.c + +tc-cr16.obj: config/tc-cr16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-cr16.obj -MD -MP -MF $(DEPDIR)/tc-cr16.Tpo -c -o tc-cr16.obj `if test -f 'config/tc-cr16.c'; then $(CYGPATH_W) 'config/tc-cr16.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-cr16.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-cr16.Tpo $(DEPDIR)/tc-cr16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-cr16.c' object='tc-cr16.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-cr16.obj `if test -f 'config/tc-cr16.c'; then $(CYGPATH_W) 'config/tc-cr16.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-cr16.c'; fi` + +tc-cris.o: config/tc-cris.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-cris.o -MD -MP -MF $(DEPDIR)/tc-cris.Tpo -c -o tc-cris.o `test -f 'config/tc-cris.c' || echo '$(srcdir)/'`config/tc-cris.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-cris.Tpo $(DEPDIR)/tc-cris.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-cris.c' object='tc-cris.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-cris.o `test -f 'config/tc-cris.c' || echo '$(srcdir)/'`config/tc-cris.c + +tc-cris.obj: config/tc-cris.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-cris.obj -MD -MP -MF $(DEPDIR)/tc-cris.Tpo -c -o tc-cris.obj `if test -f 'config/tc-cris.c'; then $(CYGPATH_W) 'config/tc-cris.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-cris.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-cris.Tpo $(DEPDIR)/tc-cris.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-cris.c' object='tc-cris.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-cris.obj `if test -f 'config/tc-cris.c'; then $(CYGPATH_W) 'config/tc-cris.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-cris.c'; fi` + +tc-crx.o: config/tc-crx.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-crx.o -MD -MP -MF $(DEPDIR)/tc-crx.Tpo -c -o tc-crx.o `test -f 'config/tc-crx.c' || echo '$(srcdir)/'`config/tc-crx.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-crx.Tpo $(DEPDIR)/tc-crx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-crx.c' object='tc-crx.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-crx.o `test -f 'config/tc-crx.c' || echo '$(srcdir)/'`config/tc-crx.c + +tc-crx.obj: config/tc-crx.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-crx.obj -MD -MP -MF $(DEPDIR)/tc-crx.Tpo -c -o tc-crx.obj `if test -f 'config/tc-crx.c'; then $(CYGPATH_W) 'config/tc-crx.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-crx.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-crx.Tpo $(DEPDIR)/tc-crx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-crx.c' object='tc-crx.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-crx.obj `if test -f 'config/tc-crx.c'; then $(CYGPATH_W) 'config/tc-crx.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-crx.c'; fi` + +tc-d10v.o: config/tc-d10v.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-d10v.o -MD -MP -MF $(DEPDIR)/tc-d10v.Tpo -c -o tc-d10v.o `test -f 'config/tc-d10v.c' || echo '$(srcdir)/'`config/tc-d10v.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-d10v.Tpo $(DEPDIR)/tc-d10v.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-d10v.c' object='tc-d10v.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-d10v.o `test -f 'config/tc-d10v.c' || echo '$(srcdir)/'`config/tc-d10v.c + +tc-d10v.obj: config/tc-d10v.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-d10v.obj -MD -MP -MF $(DEPDIR)/tc-d10v.Tpo -c -o tc-d10v.obj `if test -f 'config/tc-d10v.c'; then $(CYGPATH_W) 'config/tc-d10v.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-d10v.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-d10v.Tpo $(DEPDIR)/tc-d10v.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-d10v.c' object='tc-d10v.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-d10v.obj `if test -f 'config/tc-d10v.c'; then $(CYGPATH_W) 'config/tc-d10v.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-d10v.c'; fi` + +tc-d30v.o: config/tc-d30v.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-d30v.o -MD -MP -MF $(DEPDIR)/tc-d30v.Tpo -c -o tc-d30v.o `test -f 'config/tc-d30v.c' || echo '$(srcdir)/'`config/tc-d30v.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-d30v.Tpo $(DEPDIR)/tc-d30v.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-d30v.c' object='tc-d30v.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-d30v.o `test -f 'config/tc-d30v.c' || echo '$(srcdir)/'`config/tc-d30v.c + +tc-d30v.obj: config/tc-d30v.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-d30v.obj -MD -MP -MF $(DEPDIR)/tc-d30v.Tpo -c -o tc-d30v.obj `if test -f 'config/tc-d30v.c'; then $(CYGPATH_W) 'config/tc-d30v.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-d30v.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-d30v.Tpo $(DEPDIR)/tc-d30v.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-d30v.c' object='tc-d30v.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-d30v.obj `if test -f 'config/tc-d30v.c'; then $(CYGPATH_W) 'config/tc-d30v.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-d30v.c'; fi` + +tc-dlx.o: config/tc-dlx.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-dlx.o -MD -MP -MF $(DEPDIR)/tc-dlx.Tpo -c -o tc-dlx.o `test -f 'config/tc-dlx.c' || echo '$(srcdir)/'`config/tc-dlx.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-dlx.Tpo $(DEPDIR)/tc-dlx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-dlx.c' object='tc-dlx.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-dlx.o `test -f 'config/tc-dlx.c' || echo '$(srcdir)/'`config/tc-dlx.c + +tc-dlx.obj: config/tc-dlx.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-dlx.obj -MD -MP -MF $(DEPDIR)/tc-dlx.Tpo -c -o tc-dlx.obj `if test -f 'config/tc-dlx.c'; then $(CYGPATH_W) 'config/tc-dlx.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-dlx.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-dlx.Tpo $(DEPDIR)/tc-dlx.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-dlx.c' object='tc-dlx.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-dlx.obj `if test -f 'config/tc-dlx.c'; then $(CYGPATH_W) 'config/tc-dlx.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-dlx.c'; fi` + +tc-fr30.o: config/tc-fr30.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-fr30.o -MD -MP -MF $(DEPDIR)/tc-fr30.Tpo -c -o tc-fr30.o `test -f 'config/tc-fr30.c' || echo '$(srcdir)/'`config/tc-fr30.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-fr30.Tpo $(DEPDIR)/tc-fr30.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-fr30.c' object='tc-fr30.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-fr30.o `test -f 'config/tc-fr30.c' || echo '$(srcdir)/'`config/tc-fr30.c + +tc-fr30.obj: config/tc-fr30.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-fr30.obj -MD -MP -MF $(DEPDIR)/tc-fr30.Tpo -c -o tc-fr30.obj `if test -f 'config/tc-fr30.c'; then $(CYGPATH_W) 'config/tc-fr30.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-fr30.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-fr30.Tpo $(DEPDIR)/tc-fr30.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-fr30.c' object='tc-fr30.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-fr30.obj `if test -f 'config/tc-fr30.c'; then $(CYGPATH_W) 'config/tc-fr30.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-fr30.c'; fi` + +tc-frv.o: config/tc-frv.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-frv.o -MD -MP -MF $(DEPDIR)/tc-frv.Tpo -c -o tc-frv.o `test -f 'config/tc-frv.c' || echo '$(srcdir)/'`config/tc-frv.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-frv.Tpo $(DEPDIR)/tc-frv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-frv.c' object='tc-frv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-frv.o `test -f 'config/tc-frv.c' || echo '$(srcdir)/'`config/tc-frv.c + +tc-frv.obj: config/tc-frv.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-frv.obj -MD -MP -MF $(DEPDIR)/tc-frv.Tpo -c -o tc-frv.obj `if test -f 'config/tc-frv.c'; then $(CYGPATH_W) 'config/tc-frv.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-frv.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-frv.Tpo $(DEPDIR)/tc-frv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-frv.c' object='tc-frv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-frv.obj `if test -f 'config/tc-frv.c'; then $(CYGPATH_W) 'config/tc-frv.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-frv.c'; fi` + +tc-h8300.o: config/tc-h8300.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-h8300.o -MD -MP -MF $(DEPDIR)/tc-h8300.Tpo -c -o tc-h8300.o `test -f 'config/tc-h8300.c' || echo '$(srcdir)/'`config/tc-h8300.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-h8300.Tpo $(DEPDIR)/tc-h8300.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-h8300.c' object='tc-h8300.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-h8300.o `test -f 'config/tc-h8300.c' || echo '$(srcdir)/'`config/tc-h8300.c + +tc-h8300.obj: config/tc-h8300.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-h8300.obj -MD -MP -MF $(DEPDIR)/tc-h8300.Tpo -c -o tc-h8300.obj `if test -f 'config/tc-h8300.c'; then $(CYGPATH_W) 'config/tc-h8300.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-h8300.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-h8300.Tpo $(DEPDIR)/tc-h8300.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-h8300.c' object='tc-h8300.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-h8300.obj `if test -f 'config/tc-h8300.c'; then $(CYGPATH_W) 'config/tc-h8300.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-h8300.c'; fi` + +tc-hppa.o: config/tc-hppa.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-hppa.o -MD -MP -MF $(DEPDIR)/tc-hppa.Tpo -c -o tc-hppa.o `test -f 'config/tc-hppa.c' || echo '$(srcdir)/'`config/tc-hppa.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-hppa.Tpo $(DEPDIR)/tc-hppa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-hppa.c' object='tc-hppa.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-hppa.o `test -f 'config/tc-hppa.c' || echo '$(srcdir)/'`config/tc-hppa.c + +tc-hppa.obj: config/tc-hppa.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-hppa.obj -MD -MP -MF $(DEPDIR)/tc-hppa.Tpo -c -o tc-hppa.obj `if test -f 'config/tc-hppa.c'; then $(CYGPATH_W) 'config/tc-hppa.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-hppa.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-hppa.Tpo $(DEPDIR)/tc-hppa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-hppa.c' object='tc-hppa.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-hppa.obj `if test -f 'config/tc-hppa.c'; then $(CYGPATH_W) 'config/tc-hppa.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-hppa.c'; fi` + +tc-ia64.o: config/tc-ia64.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ia64.o -MD -MP -MF $(DEPDIR)/tc-ia64.Tpo -c -o tc-ia64.o `test -f 'config/tc-ia64.c' || echo '$(srcdir)/'`config/tc-ia64.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ia64.Tpo $(DEPDIR)/tc-ia64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ia64.c' object='tc-ia64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ia64.o `test -f 'config/tc-ia64.c' || echo '$(srcdir)/'`config/tc-ia64.c + +tc-ia64.obj: config/tc-ia64.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ia64.obj -MD -MP -MF $(DEPDIR)/tc-ia64.Tpo -c -o tc-ia64.obj `if test -f 'config/tc-ia64.c'; then $(CYGPATH_W) 'config/tc-ia64.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ia64.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ia64.Tpo $(DEPDIR)/tc-ia64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ia64.c' object='tc-ia64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ia64.obj `if test -f 'config/tc-ia64.c'; then $(CYGPATH_W) 'config/tc-ia64.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ia64.c'; fi` + +tc-i370.o: config/tc-i370.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i370.o -MD -MP -MF $(DEPDIR)/tc-i370.Tpo -c -o tc-i370.o `test -f 'config/tc-i370.c' || echo '$(srcdir)/'`config/tc-i370.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i370.Tpo $(DEPDIR)/tc-i370.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i370.c' object='tc-i370.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i370.o `test -f 'config/tc-i370.c' || echo '$(srcdir)/'`config/tc-i370.c + +tc-i370.obj: config/tc-i370.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i370.obj -MD -MP -MF $(DEPDIR)/tc-i370.Tpo -c -o tc-i370.obj `if test -f 'config/tc-i370.c'; then $(CYGPATH_W) 'config/tc-i370.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i370.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i370.Tpo $(DEPDIR)/tc-i370.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i370.c' object='tc-i370.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i370.obj `if test -f 'config/tc-i370.c'; then $(CYGPATH_W) 'config/tc-i370.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i370.c'; fi` + +tc-i386.o: config/tc-i386.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i386.o -MD -MP -MF $(DEPDIR)/tc-i386.Tpo -c -o tc-i386.o `test -f 'config/tc-i386.c' || echo '$(srcdir)/'`config/tc-i386.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i386.Tpo $(DEPDIR)/tc-i386.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i386.c' object='tc-i386.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i386.o `test -f 'config/tc-i386.c' || echo '$(srcdir)/'`config/tc-i386.c + +tc-i386.obj: config/tc-i386.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i386.obj -MD -MP -MF $(DEPDIR)/tc-i386.Tpo -c -o tc-i386.obj `if test -f 'config/tc-i386.c'; then $(CYGPATH_W) 'config/tc-i386.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i386.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i386.Tpo $(DEPDIR)/tc-i386.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i386.c' object='tc-i386.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i386.obj `if test -f 'config/tc-i386.c'; then $(CYGPATH_W) 'config/tc-i386.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i386.c'; fi` + +tc-i860.o: config/tc-i860.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i860.o -MD -MP -MF $(DEPDIR)/tc-i860.Tpo -c -o tc-i860.o `test -f 'config/tc-i860.c' || echo '$(srcdir)/'`config/tc-i860.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i860.Tpo $(DEPDIR)/tc-i860.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i860.c' object='tc-i860.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i860.o `test -f 'config/tc-i860.c' || echo '$(srcdir)/'`config/tc-i860.c + +tc-i860.obj: config/tc-i860.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i860.obj -MD -MP -MF $(DEPDIR)/tc-i860.Tpo -c -o tc-i860.obj `if test -f 'config/tc-i860.c'; then $(CYGPATH_W) 'config/tc-i860.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i860.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i860.Tpo $(DEPDIR)/tc-i860.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i860.c' object='tc-i860.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i860.obj `if test -f 'config/tc-i860.c'; then $(CYGPATH_W) 'config/tc-i860.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i860.c'; fi` + +tc-i960.o: config/tc-i960.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i960.o -MD -MP -MF $(DEPDIR)/tc-i960.Tpo -c -o tc-i960.o `test -f 'config/tc-i960.c' || echo '$(srcdir)/'`config/tc-i960.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i960.Tpo $(DEPDIR)/tc-i960.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i960.c' object='tc-i960.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i960.o `test -f 'config/tc-i960.c' || echo '$(srcdir)/'`config/tc-i960.c + +tc-i960.obj: config/tc-i960.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-i960.obj -MD -MP -MF $(DEPDIR)/tc-i960.Tpo -c -o tc-i960.obj `if test -f 'config/tc-i960.c'; then $(CYGPATH_W) 'config/tc-i960.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i960.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-i960.Tpo $(DEPDIR)/tc-i960.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-i960.c' object='tc-i960.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-i960.obj `if test -f 'config/tc-i960.c'; then $(CYGPATH_W) 'config/tc-i960.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-i960.c'; fi` + +tc-ip2k.o: config/tc-ip2k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ip2k.o -MD -MP -MF $(DEPDIR)/tc-ip2k.Tpo -c -o tc-ip2k.o `test -f 'config/tc-ip2k.c' || echo '$(srcdir)/'`config/tc-ip2k.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ip2k.Tpo $(DEPDIR)/tc-ip2k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ip2k.c' object='tc-ip2k.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ip2k.o `test -f 'config/tc-ip2k.c' || echo '$(srcdir)/'`config/tc-ip2k.c + +tc-ip2k.obj: config/tc-ip2k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ip2k.obj -MD -MP -MF $(DEPDIR)/tc-ip2k.Tpo -c -o tc-ip2k.obj `if test -f 'config/tc-ip2k.c'; then $(CYGPATH_W) 'config/tc-ip2k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ip2k.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ip2k.Tpo $(DEPDIR)/tc-ip2k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ip2k.c' object='tc-ip2k.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ip2k.obj `if test -f 'config/tc-ip2k.c'; then $(CYGPATH_W) 'config/tc-ip2k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ip2k.c'; fi` + +tc-iq2000.o: config/tc-iq2000.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-iq2000.o -MD -MP -MF $(DEPDIR)/tc-iq2000.Tpo -c -o tc-iq2000.o `test -f 'config/tc-iq2000.c' || echo '$(srcdir)/'`config/tc-iq2000.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-iq2000.Tpo $(DEPDIR)/tc-iq2000.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-iq2000.c' object='tc-iq2000.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-iq2000.o `test -f 'config/tc-iq2000.c' || echo '$(srcdir)/'`config/tc-iq2000.c + +tc-iq2000.obj: config/tc-iq2000.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-iq2000.obj -MD -MP -MF $(DEPDIR)/tc-iq2000.Tpo -c -o tc-iq2000.obj `if test -f 'config/tc-iq2000.c'; then $(CYGPATH_W) 'config/tc-iq2000.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-iq2000.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-iq2000.Tpo $(DEPDIR)/tc-iq2000.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-iq2000.c' object='tc-iq2000.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-iq2000.obj `if test -f 'config/tc-iq2000.c'; then $(CYGPATH_W) 'config/tc-iq2000.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-iq2000.c'; fi` + +tc-lm32.o: config/tc-lm32.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-lm32.o -MD -MP -MF $(DEPDIR)/tc-lm32.Tpo -c -o tc-lm32.o `test -f 'config/tc-lm32.c' || echo '$(srcdir)/'`config/tc-lm32.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-lm32.Tpo $(DEPDIR)/tc-lm32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-lm32.c' object='tc-lm32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-lm32.o `test -f 'config/tc-lm32.c' || echo '$(srcdir)/'`config/tc-lm32.c + +tc-lm32.obj: config/tc-lm32.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-lm32.obj -MD -MP -MF $(DEPDIR)/tc-lm32.Tpo -c -o tc-lm32.obj `if test -f 'config/tc-lm32.c'; then $(CYGPATH_W) 'config/tc-lm32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-lm32.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-lm32.Tpo $(DEPDIR)/tc-lm32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-lm32.c' object='tc-lm32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-lm32.obj `if test -f 'config/tc-lm32.c'; then $(CYGPATH_W) 'config/tc-lm32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-lm32.c'; fi` + +tc-m32c.o: config/tc-m32c.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m32c.o -MD -MP -MF $(DEPDIR)/tc-m32c.Tpo -c -o tc-m32c.o `test -f 'config/tc-m32c.c' || echo '$(srcdir)/'`config/tc-m32c.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m32c.Tpo $(DEPDIR)/tc-m32c.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m32c.c' object='tc-m32c.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m32c.o `test -f 'config/tc-m32c.c' || echo '$(srcdir)/'`config/tc-m32c.c + +tc-m32c.obj: config/tc-m32c.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m32c.obj -MD -MP -MF $(DEPDIR)/tc-m32c.Tpo -c -o tc-m32c.obj `if test -f 'config/tc-m32c.c'; then $(CYGPATH_W) 'config/tc-m32c.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m32c.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m32c.Tpo $(DEPDIR)/tc-m32c.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m32c.c' object='tc-m32c.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m32c.obj `if test -f 'config/tc-m32c.c'; then $(CYGPATH_W) 'config/tc-m32c.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m32c.c'; fi` + +tc-m32r.o: config/tc-m32r.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m32r.o -MD -MP -MF $(DEPDIR)/tc-m32r.Tpo -c -o tc-m32r.o `test -f 'config/tc-m32r.c' || echo '$(srcdir)/'`config/tc-m32r.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m32r.Tpo $(DEPDIR)/tc-m32r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m32r.c' object='tc-m32r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m32r.o `test -f 'config/tc-m32r.c' || echo '$(srcdir)/'`config/tc-m32r.c + +tc-m32r.obj: config/tc-m32r.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m32r.obj -MD -MP -MF $(DEPDIR)/tc-m32r.Tpo -c -o tc-m32r.obj `if test -f 'config/tc-m32r.c'; then $(CYGPATH_W) 'config/tc-m32r.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m32r.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m32r.Tpo $(DEPDIR)/tc-m32r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m32r.c' object='tc-m32r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m32r.obj `if test -f 'config/tc-m32r.c'; then $(CYGPATH_W) 'config/tc-m32r.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m32r.c'; fi` + +tc-m68hc11.o: config/tc-m68hc11.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m68hc11.o -MD -MP -MF $(DEPDIR)/tc-m68hc11.Tpo -c -o tc-m68hc11.o `test -f 'config/tc-m68hc11.c' || echo '$(srcdir)/'`config/tc-m68hc11.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m68hc11.Tpo $(DEPDIR)/tc-m68hc11.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m68hc11.c' object='tc-m68hc11.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m68hc11.o `test -f 'config/tc-m68hc11.c' || echo '$(srcdir)/'`config/tc-m68hc11.c + +tc-m68hc11.obj: config/tc-m68hc11.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m68hc11.obj -MD -MP -MF $(DEPDIR)/tc-m68hc11.Tpo -c -o tc-m68hc11.obj `if test -f 'config/tc-m68hc11.c'; then $(CYGPATH_W) 'config/tc-m68hc11.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m68hc11.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m68hc11.Tpo $(DEPDIR)/tc-m68hc11.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m68hc11.c' object='tc-m68hc11.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m68hc11.obj `if test -f 'config/tc-m68hc11.c'; then $(CYGPATH_W) 'config/tc-m68hc11.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m68hc11.c'; fi` + +tc-m68k.o: config/tc-m68k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m68k.o -MD -MP -MF $(DEPDIR)/tc-m68k.Tpo -c -o tc-m68k.o `test -f 'config/tc-m68k.c' || echo '$(srcdir)/'`config/tc-m68k.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m68k.Tpo $(DEPDIR)/tc-m68k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m68k.c' object='tc-m68k.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m68k.o `test -f 'config/tc-m68k.c' || echo '$(srcdir)/'`config/tc-m68k.c + +tc-m68k.obj: config/tc-m68k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-m68k.obj -MD -MP -MF $(DEPDIR)/tc-m68k.Tpo -c -o tc-m68k.obj `if test -f 'config/tc-m68k.c'; then $(CYGPATH_W) 'config/tc-m68k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m68k.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-m68k.Tpo $(DEPDIR)/tc-m68k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-m68k.c' object='tc-m68k.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-m68k.obj `if test -f 'config/tc-m68k.c'; then $(CYGPATH_W) 'config/tc-m68k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-m68k.c'; fi` + +tc-maxq.o: config/tc-maxq.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-maxq.o -MD -MP -MF $(DEPDIR)/tc-maxq.Tpo -c -o tc-maxq.o `test -f 'config/tc-maxq.c' || echo '$(srcdir)/'`config/tc-maxq.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-maxq.Tpo $(DEPDIR)/tc-maxq.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-maxq.c' object='tc-maxq.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-maxq.o `test -f 'config/tc-maxq.c' || echo '$(srcdir)/'`config/tc-maxq.c + +tc-maxq.obj: config/tc-maxq.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-maxq.obj -MD -MP -MF $(DEPDIR)/tc-maxq.Tpo -c -o tc-maxq.obj `if test -f 'config/tc-maxq.c'; then $(CYGPATH_W) 'config/tc-maxq.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-maxq.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-maxq.Tpo $(DEPDIR)/tc-maxq.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-maxq.c' object='tc-maxq.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-maxq.obj `if test -f 'config/tc-maxq.c'; then $(CYGPATH_W) 'config/tc-maxq.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-maxq.c'; fi` + +tc-mcore.o: config/tc-mcore.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mcore.o -MD -MP -MF $(DEPDIR)/tc-mcore.Tpo -c -o tc-mcore.o `test -f 'config/tc-mcore.c' || echo '$(srcdir)/'`config/tc-mcore.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mcore.Tpo $(DEPDIR)/tc-mcore.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mcore.c' object='tc-mcore.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mcore.o `test -f 'config/tc-mcore.c' || echo '$(srcdir)/'`config/tc-mcore.c + +tc-mcore.obj: config/tc-mcore.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mcore.obj -MD -MP -MF $(DEPDIR)/tc-mcore.Tpo -c -o tc-mcore.obj `if test -f 'config/tc-mcore.c'; then $(CYGPATH_W) 'config/tc-mcore.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mcore.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mcore.Tpo $(DEPDIR)/tc-mcore.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mcore.c' object='tc-mcore.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mcore.obj `if test -f 'config/tc-mcore.c'; then $(CYGPATH_W) 'config/tc-mcore.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mcore.c'; fi` + +tc-mep.o: config/tc-mep.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mep.o -MD -MP -MF $(DEPDIR)/tc-mep.Tpo -c -o tc-mep.o `test -f 'config/tc-mep.c' || echo '$(srcdir)/'`config/tc-mep.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mep.Tpo $(DEPDIR)/tc-mep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mep.c' object='tc-mep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mep.o `test -f 'config/tc-mep.c' || echo '$(srcdir)/'`config/tc-mep.c + +tc-mep.obj: config/tc-mep.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mep.obj -MD -MP -MF $(DEPDIR)/tc-mep.Tpo -c -o tc-mep.obj `if test -f 'config/tc-mep.c'; then $(CYGPATH_W) 'config/tc-mep.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mep.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mep.Tpo $(DEPDIR)/tc-mep.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mep.c' object='tc-mep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mep.obj `if test -f 'config/tc-mep.c'; then $(CYGPATH_W) 'config/tc-mep.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mep.c'; fi` + +tc-microblaze.o: config/tc-microblaze.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-microblaze.o -MD -MP -MF $(DEPDIR)/tc-microblaze.Tpo -c -o tc-microblaze.o `test -f 'config/tc-microblaze.c' || echo '$(srcdir)/'`config/tc-microblaze.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-microblaze.Tpo $(DEPDIR)/tc-microblaze.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-microblaze.c' object='tc-microblaze.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-microblaze.o `test -f 'config/tc-microblaze.c' || echo '$(srcdir)/'`config/tc-microblaze.c + +tc-microblaze.obj: config/tc-microblaze.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-microblaze.obj -MD -MP -MF $(DEPDIR)/tc-microblaze.Tpo -c -o tc-microblaze.obj `if test -f 'config/tc-microblaze.c'; then $(CYGPATH_W) 'config/tc-microblaze.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-microblaze.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-microblaze.Tpo $(DEPDIR)/tc-microblaze.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-microblaze.c' object='tc-microblaze.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-microblaze.obj `if test -f 'config/tc-microblaze.c'; then $(CYGPATH_W) 'config/tc-microblaze.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-microblaze.c'; fi` + +tc-mips.o: config/tc-mips.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mips.o -MD -MP -MF $(DEPDIR)/tc-mips.Tpo -c -o tc-mips.o `test -f 'config/tc-mips.c' || echo '$(srcdir)/'`config/tc-mips.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mips.Tpo $(DEPDIR)/tc-mips.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mips.c' object='tc-mips.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mips.o `test -f 'config/tc-mips.c' || echo '$(srcdir)/'`config/tc-mips.c + +tc-mips.obj: config/tc-mips.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mips.obj -MD -MP -MF $(DEPDIR)/tc-mips.Tpo -c -o tc-mips.obj `if test -f 'config/tc-mips.c'; then $(CYGPATH_W) 'config/tc-mips.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mips.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mips.Tpo $(DEPDIR)/tc-mips.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mips.c' object='tc-mips.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mips.obj `if test -f 'config/tc-mips.c'; then $(CYGPATH_W) 'config/tc-mips.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mips.c'; fi` + +tc-mmix.o: config/tc-mmix.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mmix.o -MD -MP -MF $(DEPDIR)/tc-mmix.Tpo -c -o tc-mmix.o `test -f 'config/tc-mmix.c' || echo '$(srcdir)/'`config/tc-mmix.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mmix.Tpo $(DEPDIR)/tc-mmix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mmix.c' object='tc-mmix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mmix.o `test -f 'config/tc-mmix.c' || echo '$(srcdir)/'`config/tc-mmix.c + +tc-mmix.obj: config/tc-mmix.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mmix.obj -MD -MP -MF $(DEPDIR)/tc-mmix.Tpo -c -o tc-mmix.obj `if test -f 'config/tc-mmix.c'; then $(CYGPATH_W) 'config/tc-mmix.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mmix.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mmix.Tpo $(DEPDIR)/tc-mmix.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mmix.c' object='tc-mmix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mmix.obj `if test -f 'config/tc-mmix.c'; then $(CYGPATH_W) 'config/tc-mmix.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mmix.c'; fi` + +tc-mn10200.o: config/tc-mn10200.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mn10200.o -MD -MP -MF $(DEPDIR)/tc-mn10200.Tpo -c -o tc-mn10200.o `test -f 'config/tc-mn10200.c' || echo '$(srcdir)/'`config/tc-mn10200.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mn10200.Tpo $(DEPDIR)/tc-mn10200.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mn10200.c' object='tc-mn10200.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mn10200.o `test -f 'config/tc-mn10200.c' || echo '$(srcdir)/'`config/tc-mn10200.c + +tc-mn10200.obj: config/tc-mn10200.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mn10200.obj -MD -MP -MF $(DEPDIR)/tc-mn10200.Tpo -c -o tc-mn10200.obj `if test -f 'config/tc-mn10200.c'; then $(CYGPATH_W) 'config/tc-mn10200.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mn10200.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mn10200.Tpo $(DEPDIR)/tc-mn10200.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mn10200.c' object='tc-mn10200.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mn10200.obj `if test -f 'config/tc-mn10200.c'; then $(CYGPATH_W) 'config/tc-mn10200.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mn10200.c'; fi` + +tc-mn10300.o: config/tc-mn10300.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mn10300.o -MD -MP -MF $(DEPDIR)/tc-mn10300.Tpo -c -o tc-mn10300.o `test -f 'config/tc-mn10300.c' || echo '$(srcdir)/'`config/tc-mn10300.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mn10300.Tpo $(DEPDIR)/tc-mn10300.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mn10300.c' object='tc-mn10300.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mn10300.o `test -f 'config/tc-mn10300.c' || echo '$(srcdir)/'`config/tc-mn10300.c + +tc-mn10300.obj: config/tc-mn10300.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mn10300.obj -MD -MP -MF $(DEPDIR)/tc-mn10300.Tpo -c -o tc-mn10300.obj `if test -f 'config/tc-mn10300.c'; then $(CYGPATH_W) 'config/tc-mn10300.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mn10300.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mn10300.Tpo $(DEPDIR)/tc-mn10300.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mn10300.c' object='tc-mn10300.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mn10300.obj `if test -f 'config/tc-mn10300.c'; then $(CYGPATH_W) 'config/tc-mn10300.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mn10300.c'; fi` + +tc-moxie.o: config/tc-moxie.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-moxie.o -MD -MP -MF $(DEPDIR)/tc-moxie.Tpo -c -o tc-moxie.o `test -f 'config/tc-moxie.c' || echo '$(srcdir)/'`config/tc-moxie.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-moxie.Tpo $(DEPDIR)/tc-moxie.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-moxie.c' object='tc-moxie.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-moxie.o `test -f 'config/tc-moxie.c' || echo '$(srcdir)/'`config/tc-moxie.c + +tc-moxie.obj: config/tc-moxie.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-moxie.obj -MD -MP -MF $(DEPDIR)/tc-moxie.Tpo -c -o tc-moxie.obj `if test -f 'config/tc-moxie.c'; then $(CYGPATH_W) 'config/tc-moxie.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-moxie.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-moxie.Tpo $(DEPDIR)/tc-moxie.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-moxie.c' object='tc-moxie.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-moxie.obj `if test -f 'config/tc-moxie.c'; then $(CYGPATH_W) 'config/tc-moxie.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-moxie.c'; fi` + +tc-msp430.o: config/tc-msp430.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-msp430.o -MD -MP -MF $(DEPDIR)/tc-msp430.Tpo -c -o tc-msp430.o `test -f 'config/tc-msp430.c' || echo '$(srcdir)/'`config/tc-msp430.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-msp430.Tpo $(DEPDIR)/tc-msp430.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-msp430.c' object='tc-msp430.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-msp430.o `test -f 'config/tc-msp430.c' || echo '$(srcdir)/'`config/tc-msp430.c + +tc-msp430.obj: config/tc-msp430.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-msp430.obj -MD -MP -MF $(DEPDIR)/tc-msp430.Tpo -c -o tc-msp430.obj `if test -f 'config/tc-msp430.c'; then $(CYGPATH_W) 'config/tc-msp430.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-msp430.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-msp430.Tpo $(DEPDIR)/tc-msp430.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-msp430.c' object='tc-msp430.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-msp430.obj `if test -f 'config/tc-msp430.c'; then $(CYGPATH_W) 'config/tc-msp430.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-msp430.c'; fi` + +tc-mt.o: config/tc-mt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mt.o -MD -MP -MF $(DEPDIR)/tc-mt.Tpo -c -o tc-mt.o `test -f 'config/tc-mt.c' || echo '$(srcdir)/'`config/tc-mt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mt.Tpo $(DEPDIR)/tc-mt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mt.c' object='tc-mt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mt.o `test -f 'config/tc-mt.c' || echo '$(srcdir)/'`config/tc-mt.c + +tc-mt.obj: config/tc-mt.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-mt.obj -MD -MP -MF $(DEPDIR)/tc-mt.Tpo -c -o tc-mt.obj `if test -f 'config/tc-mt.c'; then $(CYGPATH_W) 'config/tc-mt.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mt.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-mt.Tpo $(DEPDIR)/tc-mt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-mt.c' object='tc-mt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-mt.obj `if test -f 'config/tc-mt.c'; then $(CYGPATH_W) 'config/tc-mt.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-mt.c'; fi` + +tc-ns32k.o: config/tc-ns32k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ns32k.o -MD -MP -MF $(DEPDIR)/tc-ns32k.Tpo -c -o tc-ns32k.o `test -f 'config/tc-ns32k.c' || echo '$(srcdir)/'`config/tc-ns32k.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ns32k.Tpo $(DEPDIR)/tc-ns32k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ns32k.c' object='tc-ns32k.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ns32k.o `test -f 'config/tc-ns32k.c' || echo '$(srcdir)/'`config/tc-ns32k.c + +tc-ns32k.obj: config/tc-ns32k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ns32k.obj -MD -MP -MF $(DEPDIR)/tc-ns32k.Tpo -c -o tc-ns32k.obj `if test -f 'config/tc-ns32k.c'; then $(CYGPATH_W) 'config/tc-ns32k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ns32k.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ns32k.Tpo $(DEPDIR)/tc-ns32k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ns32k.c' object='tc-ns32k.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ns32k.obj `if test -f 'config/tc-ns32k.c'; then $(CYGPATH_W) 'config/tc-ns32k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ns32k.c'; fi` + +tc-openrisc.o: config/tc-openrisc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-openrisc.o -MD -MP -MF $(DEPDIR)/tc-openrisc.Tpo -c -o tc-openrisc.o `test -f 'config/tc-openrisc.c' || echo '$(srcdir)/'`config/tc-openrisc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-openrisc.Tpo $(DEPDIR)/tc-openrisc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-openrisc.c' object='tc-openrisc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-openrisc.o `test -f 'config/tc-openrisc.c' || echo '$(srcdir)/'`config/tc-openrisc.c + +tc-openrisc.obj: config/tc-openrisc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-openrisc.obj -MD -MP -MF $(DEPDIR)/tc-openrisc.Tpo -c -o tc-openrisc.obj `if test -f 'config/tc-openrisc.c'; then $(CYGPATH_W) 'config/tc-openrisc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-openrisc.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-openrisc.Tpo $(DEPDIR)/tc-openrisc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-openrisc.c' object='tc-openrisc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-openrisc.obj `if test -f 'config/tc-openrisc.c'; then $(CYGPATH_W) 'config/tc-openrisc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-openrisc.c'; fi` + +tc-or32.o: config/tc-or32.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-or32.o -MD -MP -MF $(DEPDIR)/tc-or32.Tpo -c -o tc-or32.o `test -f 'config/tc-or32.c' || echo '$(srcdir)/'`config/tc-or32.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-or32.Tpo $(DEPDIR)/tc-or32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-or32.c' object='tc-or32.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-or32.o `test -f 'config/tc-or32.c' || echo '$(srcdir)/'`config/tc-or32.c + +tc-or32.obj: config/tc-or32.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-or32.obj -MD -MP -MF $(DEPDIR)/tc-or32.Tpo -c -o tc-or32.obj `if test -f 'config/tc-or32.c'; then $(CYGPATH_W) 'config/tc-or32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-or32.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-or32.Tpo $(DEPDIR)/tc-or32.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-or32.c' object='tc-or32.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-or32.obj `if test -f 'config/tc-or32.c'; then $(CYGPATH_W) 'config/tc-or32.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-or32.c'; fi` + +tc-pdp11.o: config/tc-pdp11.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-pdp11.o -MD -MP -MF $(DEPDIR)/tc-pdp11.Tpo -c -o tc-pdp11.o `test -f 'config/tc-pdp11.c' || echo '$(srcdir)/'`config/tc-pdp11.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-pdp11.Tpo $(DEPDIR)/tc-pdp11.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-pdp11.c' object='tc-pdp11.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-pdp11.o `test -f 'config/tc-pdp11.c' || echo '$(srcdir)/'`config/tc-pdp11.c + +tc-pdp11.obj: config/tc-pdp11.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-pdp11.obj -MD -MP -MF $(DEPDIR)/tc-pdp11.Tpo -c -o tc-pdp11.obj `if test -f 'config/tc-pdp11.c'; then $(CYGPATH_W) 'config/tc-pdp11.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-pdp11.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-pdp11.Tpo $(DEPDIR)/tc-pdp11.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-pdp11.c' object='tc-pdp11.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-pdp11.obj `if test -f 'config/tc-pdp11.c'; then $(CYGPATH_W) 'config/tc-pdp11.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-pdp11.c'; fi` + +tc-pj.o: config/tc-pj.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-pj.o -MD -MP -MF $(DEPDIR)/tc-pj.Tpo -c -o tc-pj.o `test -f 'config/tc-pj.c' || echo '$(srcdir)/'`config/tc-pj.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-pj.Tpo $(DEPDIR)/tc-pj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-pj.c' object='tc-pj.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-pj.o `test -f 'config/tc-pj.c' || echo '$(srcdir)/'`config/tc-pj.c + +tc-pj.obj: config/tc-pj.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-pj.obj -MD -MP -MF $(DEPDIR)/tc-pj.Tpo -c -o tc-pj.obj `if test -f 'config/tc-pj.c'; then $(CYGPATH_W) 'config/tc-pj.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-pj.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-pj.Tpo $(DEPDIR)/tc-pj.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-pj.c' object='tc-pj.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-pj.obj `if test -f 'config/tc-pj.c'; then $(CYGPATH_W) 'config/tc-pj.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-pj.c'; fi` + +tc-ppc.o: config/tc-ppc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ppc.o -MD -MP -MF $(DEPDIR)/tc-ppc.Tpo -c -o tc-ppc.o `test -f 'config/tc-ppc.c' || echo '$(srcdir)/'`config/tc-ppc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ppc.Tpo $(DEPDIR)/tc-ppc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ppc.c' object='tc-ppc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ppc.o `test -f 'config/tc-ppc.c' || echo '$(srcdir)/'`config/tc-ppc.c + +tc-ppc.obj: config/tc-ppc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-ppc.obj -MD -MP -MF $(DEPDIR)/tc-ppc.Tpo -c -o tc-ppc.obj `if test -f 'config/tc-ppc.c'; then $(CYGPATH_W) 'config/tc-ppc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ppc.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-ppc.Tpo $(DEPDIR)/tc-ppc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-ppc.c' object='tc-ppc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-ppc.obj `if test -f 'config/tc-ppc.c'; then $(CYGPATH_W) 'config/tc-ppc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-ppc.c'; fi` + +tc-s390.o: config/tc-s390.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-s390.o -MD -MP -MF $(DEPDIR)/tc-s390.Tpo -c -o tc-s390.o `test -f 'config/tc-s390.c' || echo '$(srcdir)/'`config/tc-s390.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-s390.Tpo $(DEPDIR)/tc-s390.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-s390.c' object='tc-s390.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-s390.o `test -f 'config/tc-s390.c' || echo '$(srcdir)/'`config/tc-s390.c + +tc-s390.obj: config/tc-s390.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-s390.obj -MD -MP -MF $(DEPDIR)/tc-s390.Tpo -c -o tc-s390.obj `if test -f 'config/tc-s390.c'; then $(CYGPATH_W) 'config/tc-s390.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-s390.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-s390.Tpo $(DEPDIR)/tc-s390.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-s390.c' object='tc-s390.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-s390.obj `if test -f 'config/tc-s390.c'; then $(CYGPATH_W) 'config/tc-s390.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-s390.c'; fi` + +tc-score.o: config/tc-score.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-score.o -MD -MP -MF $(DEPDIR)/tc-score.Tpo -c -o tc-score.o `test -f 'config/tc-score.c' || echo '$(srcdir)/'`config/tc-score.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-score.Tpo $(DEPDIR)/tc-score.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-score.c' object='tc-score.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-score.o `test -f 'config/tc-score.c' || echo '$(srcdir)/'`config/tc-score.c + +tc-score.obj: config/tc-score.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-score.obj -MD -MP -MF $(DEPDIR)/tc-score.Tpo -c -o tc-score.obj `if test -f 'config/tc-score.c'; then $(CYGPATH_W) 'config/tc-score.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-score.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-score.Tpo $(DEPDIR)/tc-score.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-score.c' object='tc-score.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-score.obj `if test -f 'config/tc-score.c'; then $(CYGPATH_W) 'config/tc-score.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-score.c'; fi` + +tc-sh.o: config/tc-sh.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-sh.o -MD -MP -MF $(DEPDIR)/tc-sh.Tpo -c -o tc-sh.o `test -f 'config/tc-sh.c' || echo '$(srcdir)/'`config/tc-sh.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-sh.Tpo $(DEPDIR)/tc-sh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-sh.c' object='tc-sh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-sh.o `test -f 'config/tc-sh.c' || echo '$(srcdir)/'`config/tc-sh.c + +tc-sh.obj: config/tc-sh.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-sh.obj -MD -MP -MF $(DEPDIR)/tc-sh.Tpo -c -o tc-sh.obj `if test -f 'config/tc-sh.c'; then $(CYGPATH_W) 'config/tc-sh.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-sh.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-sh.Tpo $(DEPDIR)/tc-sh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-sh.c' object='tc-sh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-sh.obj `if test -f 'config/tc-sh.c'; then $(CYGPATH_W) 'config/tc-sh.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-sh.c'; fi` + +tc-sh64.o: config/tc-sh64.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-sh64.o -MD -MP -MF $(DEPDIR)/tc-sh64.Tpo -c -o tc-sh64.o `test -f 'config/tc-sh64.c' || echo '$(srcdir)/'`config/tc-sh64.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-sh64.Tpo $(DEPDIR)/tc-sh64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-sh64.c' object='tc-sh64.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-sh64.o `test -f 'config/tc-sh64.c' || echo '$(srcdir)/'`config/tc-sh64.c + +tc-sh64.obj: config/tc-sh64.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-sh64.obj -MD -MP -MF $(DEPDIR)/tc-sh64.Tpo -c -o tc-sh64.obj `if test -f 'config/tc-sh64.c'; then $(CYGPATH_W) 'config/tc-sh64.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-sh64.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-sh64.Tpo $(DEPDIR)/tc-sh64.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-sh64.c' object='tc-sh64.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-sh64.obj `if test -f 'config/tc-sh64.c'; then $(CYGPATH_W) 'config/tc-sh64.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-sh64.c'; fi` + +tc-sparc.o: config/tc-sparc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-sparc.o -MD -MP -MF $(DEPDIR)/tc-sparc.Tpo -c -o tc-sparc.o `test -f 'config/tc-sparc.c' || echo '$(srcdir)/'`config/tc-sparc.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-sparc.Tpo $(DEPDIR)/tc-sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-sparc.c' object='tc-sparc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-sparc.o `test -f 'config/tc-sparc.c' || echo '$(srcdir)/'`config/tc-sparc.c + +tc-sparc.obj: config/tc-sparc.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-sparc.obj -MD -MP -MF $(DEPDIR)/tc-sparc.Tpo -c -o tc-sparc.obj `if test -f 'config/tc-sparc.c'; then $(CYGPATH_W) 'config/tc-sparc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-sparc.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-sparc.Tpo $(DEPDIR)/tc-sparc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-sparc.c' object='tc-sparc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-sparc.obj `if test -f 'config/tc-sparc.c'; then $(CYGPATH_W) 'config/tc-sparc.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-sparc.c'; fi` + +tc-spu.o: config/tc-spu.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-spu.o -MD -MP -MF $(DEPDIR)/tc-spu.Tpo -c -o tc-spu.o `test -f 'config/tc-spu.c' || echo '$(srcdir)/'`config/tc-spu.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-spu.Tpo $(DEPDIR)/tc-spu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-spu.c' object='tc-spu.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-spu.o `test -f 'config/tc-spu.c' || echo '$(srcdir)/'`config/tc-spu.c + +tc-spu.obj: config/tc-spu.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-spu.obj -MD -MP -MF $(DEPDIR)/tc-spu.Tpo -c -o tc-spu.obj `if test -f 'config/tc-spu.c'; then $(CYGPATH_W) 'config/tc-spu.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-spu.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-spu.Tpo $(DEPDIR)/tc-spu.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-spu.c' object='tc-spu.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-spu.obj `if test -f 'config/tc-spu.c'; then $(CYGPATH_W) 'config/tc-spu.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-spu.c'; fi` + +tc-tic30.o: config/tc-tic30.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-tic30.o -MD -MP -MF $(DEPDIR)/tc-tic30.Tpo -c -o tc-tic30.o `test -f 'config/tc-tic30.c' || echo '$(srcdir)/'`config/tc-tic30.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-tic30.Tpo $(DEPDIR)/tc-tic30.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-tic30.c' object='tc-tic30.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-tic30.o `test -f 'config/tc-tic30.c' || echo '$(srcdir)/'`config/tc-tic30.c + +tc-tic30.obj: config/tc-tic30.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-tic30.obj -MD -MP -MF $(DEPDIR)/tc-tic30.Tpo -c -o tc-tic30.obj `if test -f 'config/tc-tic30.c'; then $(CYGPATH_W) 'config/tc-tic30.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-tic30.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-tic30.Tpo $(DEPDIR)/tc-tic30.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-tic30.c' object='tc-tic30.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-tic30.obj `if test -f 'config/tc-tic30.c'; then $(CYGPATH_W) 'config/tc-tic30.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-tic30.c'; fi` + +tc-tic4x.o: config/tc-tic4x.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-tic4x.o -MD -MP -MF $(DEPDIR)/tc-tic4x.Tpo -c -o tc-tic4x.o `test -f 'config/tc-tic4x.c' || echo '$(srcdir)/'`config/tc-tic4x.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-tic4x.Tpo $(DEPDIR)/tc-tic4x.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-tic4x.c' object='tc-tic4x.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-tic4x.o `test -f 'config/tc-tic4x.c' || echo '$(srcdir)/'`config/tc-tic4x.c + +tc-tic4x.obj: config/tc-tic4x.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-tic4x.obj -MD -MP -MF $(DEPDIR)/tc-tic4x.Tpo -c -o tc-tic4x.obj `if test -f 'config/tc-tic4x.c'; then $(CYGPATH_W) 'config/tc-tic4x.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-tic4x.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-tic4x.Tpo $(DEPDIR)/tc-tic4x.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-tic4x.c' object='tc-tic4x.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-tic4x.obj `if test -f 'config/tc-tic4x.c'; then $(CYGPATH_W) 'config/tc-tic4x.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-tic4x.c'; fi` + +tc-tic54x.o: config/tc-tic54x.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-tic54x.o -MD -MP -MF $(DEPDIR)/tc-tic54x.Tpo -c -o tc-tic54x.o `test -f 'config/tc-tic54x.c' || echo '$(srcdir)/'`config/tc-tic54x.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-tic54x.Tpo $(DEPDIR)/tc-tic54x.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-tic54x.c' object='tc-tic54x.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-tic54x.o `test -f 'config/tc-tic54x.c' || echo '$(srcdir)/'`config/tc-tic54x.c + +tc-tic54x.obj: config/tc-tic54x.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-tic54x.obj -MD -MP -MF $(DEPDIR)/tc-tic54x.Tpo -c -o tc-tic54x.obj `if test -f 'config/tc-tic54x.c'; then $(CYGPATH_W) 'config/tc-tic54x.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-tic54x.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-tic54x.Tpo $(DEPDIR)/tc-tic54x.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-tic54x.c' object='tc-tic54x.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-tic54x.obj `if test -f 'config/tc-tic54x.c'; then $(CYGPATH_W) 'config/tc-tic54x.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-tic54x.c'; fi` + +tc-vax.o: config/tc-vax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-vax.o -MD -MP -MF $(DEPDIR)/tc-vax.Tpo -c -o tc-vax.o `test -f 'config/tc-vax.c' || echo '$(srcdir)/'`config/tc-vax.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-vax.Tpo $(DEPDIR)/tc-vax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-vax.c' object='tc-vax.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-vax.o `test -f 'config/tc-vax.c' || echo '$(srcdir)/'`config/tc-vax.c + +tc-vax.obj: config/tc-vax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-vax.obj -MD -MP -MF $(DEPDIR)/tc-vax.Tpo -c -o tc-vax.obj `if test -f 'config/tc-vax.c'; then $(CYGPATH_W) 'config/tc-vax.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-vax.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-vax.Tpo $(DEPDIR)/tc-vax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-vax.c' object='tc-vax.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-vax.obj `if test -f 'config/tc-vax.c'; then $(CYGPATH_W) 'config/tc-vax.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-vax.c'; fi` + +tc-v850.o: config/tc-v850.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-v850.o -MD -MP -MF $(DEPDIR)/tc-v850.Tpo -c -o tc-v850.o `test -f 'config/tc-v850.c' || echo '$(srcdir)/'`config/tc-v850.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-v850.Tpo $(DEPDIR)/tc-v850.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-v850.c' object='tc-v850.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-v850.o `test -f 'config/tc-v850.c' || echo '$(srcdir)/'`config/tc-v850.c + +tc-v850.obj: config/tc-v850.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-v850.obj -MD -MP -MF $(DEPDIR)/tc-v850.Tpo -c -o tc-v850.obj `if test -f 'config/tc-v850.c'; then $(CYGPATH_W) 'config/tc-v850.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-v850.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-v850.Tpo $(DEPDIR)/tc-v850.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-v850.c' object='tc-v850.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-v850.obj `if test -f 'config/tc-v850.c'; then $(CYGPATH_W) 'config/tc-v850.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-v850.c'; fi` + +tc-xstormy16.o: config/tc-xstormy16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-xstormy16.o -MD -MP -MF $(DEPDIR)/tc-xstormy16.Tpo -c -o tc-xstormy16.o `test -f 'config/tc-xstormy16.c' || echo '$(srcdir)/'`config/tc-xstormy16.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-xstormy16.Tpo $(DEPDIR)/tc-xstormy16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-xstormy16.c' object='tc-xstormy16.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-xstormy16.o `test -f 'config/tc-xstormy16.c' || echo '$(srcdir)/'`config/tc-xstormy16.c + +tc-xstormy16.obj: config/tc-xstormy16.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-xstormy16.obj -MD -MP -MF $(DEPDIR)/tc-xstormy16.Tpo -c -o tc-xstormy16.obj `if test -f 'config/tc-xstormy16.c'; then $(CYGPATH_W) 'config/tc-xstormy16.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-xstormy16.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-xstormy16.Tpo $(DEPDIR)/tc-xstormy16.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-xstormy16.c' object='tc-xstormy16.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-xstormy16.obj `if test -f 'config/tc-xstormy16.c'; then $(CYGPATH_W) 'config/tc-xstormy16.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-xstormy16.c'; fi` + +tc-xc16x.o: config/tc-xc16x.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-xc16x.o -MD -MP -MF $(DEPDIR)/tc-xc16x.Tpo -c -o tc-xc16x.o `test -f 'config/tc-xc16x.c' || echo '$(srcdir)/'`config/tc-xc16x.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-xc16x.Tpo $(DEPDIR)/tc-xc16x.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-xc16x.c' object='tc-xc16x.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-xc16x.o `test -f 'config/tc-xc16x.c' || echo '$(srcdir)/'`config/tc-xc16x.c + +tc-xc16x.obj: config/tc-xc16x.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-xc16x.obj -MD -MP -MF $(DEPDIR)/tc-xc16x.Tpo -c -o tc-xc16x.obj `if test -f 'config/tc-xc16x.c'; then $(CYGPATH_W) 'config/tc-xc16x.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-xc16x.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-xc16x.Tpo $(DEPDIR)/tc-xc16x.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-xc16x.c' object='tc-xc16x.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-xc16x.obj `if test -f 'config/tc-xc16x.c'; then $(CYGPATH_W) 'config/tc-xc16x.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-xc16x.c'; fi` + +tc-xtensa.o: config/tc-xtensa.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-xtensa.o -MD -MP -MF $(DEPDIR)/tc-xtensa.Tpo -c -o tc-xtensa.o `test -f 'config/tc-xtensa.c' || echo '$(srcdir)/'`config/tc-xtensa.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-xtensa.Tpo $(DEPDIR)/tc-xtensa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-xtensa.c' object='tc-xtensa.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-xtensa.o `test -f 'config/tc-xtensa.c' || echo '$(srcdir)/'`config/tc-xtensa.c + +tc-xtensa.obj: config/tc-xtensa.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-xtensa.obj -MD -MP -MF $(DEPDIR)/tc-xtensa.Tpo -c -o tc-xtensa.obj `if test -f 'config/tc-xtensa.c'; then $(CYGPATH_W) 'config/tc-xtensa.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-xtensa.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-xtensa.Tpo $(DEPDIR)/tc-xtensa.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-xtensa.c' object='tc-xtensa.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-xtensa.obj `if test -f 'config/tc-xtensa.c'; then $(CYGPATH_W) 'config/tc-xtensa.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-xtensa.c'; fi` + +tc-z80.o: config/tc-z80.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-z80.o -MD -MP -MF $(DEPDIR)/tc-z80.Tpo -c -o tc-z80.o `test -f 'config/tc-z80.c' || echo '$(srcdir)/'`config/tc-z80.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-z80.Tpo $(DEPDIR)/tc-z80.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-z80.c' object='tc-z80.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-z80.o `test -f 'config/tc-z80.c' || echo '$(srcdir)/'`config/tc-z80.c + +tc-z80.obj: config/tc-z80.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-z80.obj -MD -MP -MF $(DEPDIR)/tc-z80.Tpo -c -o tc-z80.obj `if test -f 'config/tc-z80.c'; then $(CYGPATH_W) 'config/tc-z80.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-z80.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-z80.Tpo $(DEPDIR)/tc-z80.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-z80.c' object='tc-z80.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-z80.obj `if test -f 'config/tc-z80.c'; then $(CYGPATH_W) 'config/tc-z80.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-z80.c'; fi` + +tc-z8k.o: config/tc-z8k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-z8k.o -MD -MP -MF $(DEPDIR)/tc-z8k.Tpo -c -o tc-z8k.o `test -f 'config/tc-z8k.c' || echo '$(srcdir)/'`config/tc-z8k.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-z8k.Tpo $(DEPDIR)/tc-z8k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-z8k.c' object='tc-z8k.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-z8k.o `test -f 'config/tc-z8k.c' || echo '$(srcdir)/'`config/tc-z8k.c + +tc-z8k.obj: config/tc-z8k.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT tc-z8k.obj -MD -MP -MF $(DEPDIR)/tc-z8k.Tpo -c -o tc-z8k.obj `if test -f 'config/tc-z8k.c'; then $(CYGPATH_W) 'config/tc-z8k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-z8k.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/tc-z8k.Tpo $(DEPDIR)/tc-z8k.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/tc-z8k.c' object='tc-z8k.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o tc-z8k.obj `if test -f 'config/tc-z8k.c'; then $(CYGPATH_W) 'config/tc-z8k.c'; else $(CYGPATH_W) '$(srcdir)/config/tc-z8k.c'; fi` + +xtensa-relax.o: config/xtensa-relax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa-relax.o -MD -MP -MF $(DEPDIR)/xtensa-relax.Tpo -c -o xtensa-relax.o `test -f 'config/xtensa-relax.c' || echo '$(srcdir)/'`config/xtensa-relax.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xtensa-relax.Tpo $(DEPDIR)/xtensa-relax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/xtensa-relax.c' object='xtensa-relax.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa-relax.o `test -f 'config/xtensa-relax.c' || echo '$(srcdir)/'`config/xtensa-relax.c + +xtensa-relax.obj: config/xtensa-relax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa-relax.obj -MD -MP -MF $(DEPDIR)/xtensa-relax.Tpo -c -o xtensa-relax.obj `if test -f 'config/xtensa-relax.c'; then $(CYGPATH_W) 'config/xtensa-relax.c'; else $(CYGPATH_W) '$(srcdir)/config/xtensa-relax.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/xtensa-relax.Tpo $(DEPDIR)/xtensa-relax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/xtensa-relax.c' object='xtensa-relax.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa-relax.obj `if test -f 'config/xtensa-relax.c'; then $(CYGPATH_W) 'config/xtensa-relax.c'; else $(CYGPATH_W) '$(srcdir)/config/xtensa-relax.c'; fi` + +obj-aout.o: config/obj-aout.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-aout.o -MD -MP -MF $(DEPDIR)/obj-aout.Tpo -c -o obj-aout.o `test -f 'config/obj-aout.c' || echo '$(srcdir)/'`config/obj-aout.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-aout.Tpo $(DEPDIR)/obj-aout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-aout.c' object='obj-aout.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-aout.o `test -f 'config/obj-aout.c' || echo '$(srcdir)/'`config/obj-aout.c + +obj-aout.obj: config/obj-aout.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-aout.obj -MD -MP -MF $(DEPDIR)/obj-aout.Tpo -c -o obj-aout.obj `if test -f 'config/obj-aout.c'; then $(CYGPATH_W) 'config/obj-aout.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-aout.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-aout.Tpo $(DEPDIR)/obj-aout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-aout.c' object='obj-aout.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-aout.obj `if test -f 'config/obj-aout.c'; then $(CYGPATH_W) 'config/obj-aout.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-aout.c'; fi` + +obj-coff.o: config/obj-coff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-coff.o -MD -MP -MF $(DEPDIR)/obj-coff.Tpo -c -o obj-coff.o `test -f 'config/obj-coff.c' || echo '$(srcdir)/'`config/obj-coff.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-coff.Tpo $(DEPDIR)/obj-coff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-coff.c' object='obj-coff.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-coff.o `test -f 'config/obj-coff.c' || echo '$(srcdir)/'`config/obj-coff.c + +obj-coff.obj: config/obj-coff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-coff.obj -MD -MP -MF $(DEPDIR)/obj-coff.Tpo -c -o obj-coff.obj `if test -f 'config/obj-coff.c'; then $(CYGPATH_W) 'config/obj-coff.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-coff.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-coff.Tpo $(DEPDIR)/obj-coff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-coff.c' object='obj-coff.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-coff.obj `if test -f 'config/obj-coff.c'; then $(CYGPATH_W) 'config/obj-coff.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-coff.c'; fi` + +obj-ecoff.o: config/obj-ecoff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-ecoff.o -MD -MP -MF $(DEPDIR)/obj-ecoff.Tpo -c -o obj-ecoff.o `test -f 'config/obj-ecoff.c' || echo '$(srcdir)/'`config/obj-ecoff.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-ecoff.Tpo $(DEPDIR)/obj-ecoff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-ecoff.c' object='obj-ecoff.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-ecoff.o `test -f 'config/obj-ecoff.c' || echo '$(srcdir)/'`config/obj-ecoff.c + +obj-ecoff.obj: config/obj-ecoff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-ecoff.obj -MD -MP -MF $(DEPDIR)/obj-ecoff.Tpo -c -o obj-ecoff.obj `if test -f 'config/obj-ecoff.c'; then $(CYGPATH_W) 'config/obj-ecoff.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-ecoff.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-ecoff.Tpo $(DEPDIR)/obj-ecoff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-ecoff.c' object='obj-ecoff.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-ecoff.obj `if test -f 'config/obj-ecoff.c'; then $(CYGPATH_W) 'config/obj-ecoff.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-ecoff.c'; fi` + +obj-elf.o: config/obj-elf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-elf.o -MD -MP -MF $(DEPDIR)/obj-elf.Tpo -c -o obj-elf.o `test -f 'config/obj-elf.c' || echo '$(srcdir)/'`config/obj-elf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-elf.Tpo $(DEPDIR)/obj-elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-elf.c' object='obj-elf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-elf.o `test -f 'config/obj-elf.c' || echo '$(srcdir)/'`config/obj-elf.c + +obj-elf.obj: config/obj-elf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-elf.obj -MD -MP -MF $(DEPDIR)/obj-elf.Tpo -c -o obj-elf.obj `if test -f 'config/obj-elf.c'; then $(CYGPATH_W) 'config/obj-elf.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-elf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-elf.Tpo $(DEPDIR)/obj-elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-elf.c' object='obj-elf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-elf.obj `if test -f 'config/obj-elf.c'; then $(CYGPATH_W) 'config/obj-elf.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-elf.c'; fi` + +obj-evax.o: config/obj-evax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-evax.o -MD -MP -MF $(DEPDIR)/obj-evax.Tpo -c -o obj-evax.o `test -f 'config/obj-evax.c' || echo '$(srcdir)/'`config/obj-evax.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-evax.Tpo $(DEPDIR)/obj-evax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-evax.c' object='obj-evax.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-evax.o `test -f 'config/obj-evax.c' || echo '$(srcdir)/'`config/obj-evax.c + +obj-evax.obj: config/obj-evax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-evax.obj -MD -MP -MF $(DEPDIR)/obj-evax.Tpo -c -o obj-evax.obj `if test -f 'config/obj-evax.c'; then $(CYGPATH_W) 'config/obj-evax.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-evax.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-evax.Tpo $(DEPDIR)/obj-evax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-evax.c' object='obj-evax.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-evax.obj `if test -f 'config/obj-evax.c'; then $(CYGPATH_W) 'config/obj-evax.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-evax.c'; fi` + +obj-fdpicelf.o: config/obj-fdpicelf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-fdpicelf.o -MD -MP -MF $(DEPDIR)/obj-fdpicelf.Tpo -c -o obj-fdpicelf.o `test -f 'config/obj-fdpicelf.c' || echo '$(srcdir)/'`config/obj-fdpicelf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-fdpicelf.Tpo $(DEPDIR)/obj-fdpicelf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-fdpicelf.c' object='obj-fdpicelf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-fdpicelf.o `test -f 'config/obj-fdpicelf.c' || echo '$(srcdir)/'`config/obj-fdpicelf.c + +obj-fdpicelf.obj: config/obj-fdpicelf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-fdpicelf.obj -MD -MP -MF $(DEPDIR)/obj-fdpicelf.Tpo -c -o obj-fdpicelf.obj `if test -f 'config/obj-fdpicelf.c'; then $(CYGPATH_W) 'config/obj-fdpicelf.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-fdpicelf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-fdpicelf.Tpo $(DEPDIR)/obj-fdpicelf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-fdpicelf.c' object='obj-fdpicelf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-fdpicelf.obj `if test -f 'config/obj-fdpicelf.c'; then $(CYGPATH_W) 'config/obj-fdpicelf.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-fdpicelf.c'; fi` + +obj-macho.o: config/obj-macho.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-macho.o -MD -MP -MF $(DEPDIR)/obj-macho.Tpo -c -o obj-macho.o `test -f 'config/obj-macho.c' || echo '$(srcdir)/'`config/obj-macho.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-macho.Tpo $(DEPDIR)/obj-macho.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-macho.c' object='obj-macho.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-macho.o `test -f 'config/obj-macho.c' || echo '$(srcdir)/'`config/obj-macho.c + +obj-macho.obj: config/obj-macho.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-macho.obj -MD -MP -MF $(DEPDIR)/obj-macho.Tpo -c -o obj-macho.obj `if test -f 'config/obj-macho.c'; then $(CYGPATH_W) 'config/obj-macho.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-macho.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-macho.Tpo $(DEPDIR)/obj-macho.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-macho.c' object='obj-macho.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-macho.obj `if test -f 'config/obj-macho.c'; then $(CYGPATH_W) 'config/obj-macho.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-macho.c'; fi` + +obj-multi.o: config/obj-multi.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-multi.o -MD -MP -MF $(DEPDIR)/obj-multi.Tpo -c -o obj-multi.o `test -f 'config/obj-multi.c' || echo '$(srcdir)/'`config/obj-multi.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-multi.Tpo $(DEPDIR)/obj-multi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-multi.c' object='obj-multi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-multi.o `test -f 'config/obj-multi.c' || echo '$(srcdir)/'`config/obj-multi.c + +obj-multi.obj: config/obj-multi.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-multi.obj -MD -MP -MF $(DEPDIR)/obj-multi.Tpo -c -o obj-multi.obj `if test -f 'config/obj-multi.c'; then $(CYGPATH_W) 'config/obj-multi.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-multi.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-multi.Tpo $(DEPDIR)/obj-multi.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-multi.c' object='obj-multi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-multi.obj `if test -f 'config/obj-multi.c'; then $(CYGPATH_W) 'config/obj-multi.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-multi.c'; fi` + +obj-som.o: config/obj-som.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-som.o -MD -MP -MF $(DEPDIR)/obj-som.Tpo -c -o obj-som.o `test -f 'config/obj-som.c' || echo '$(srcdir)/'`config/obj-som.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-som.Tpo $(DEPDIR)/obj-som.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-som.c' object='obj-som.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-som.o `test -f 'config/obj-som.c' || echo '$(srcdir)/'`config/obj-som.c + +obj-som.obj: config/obj-som.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT obj-som.obj -MD -MP -MF $(DEPDIR)/obj-som.Tpo -c -o obj-som.obj `if test -f 'config/obj-som.c'; then $(CYGPATH_W) 'config/obj-som.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-som.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/obj-som.Tpo $(DEPDIR)/obj-som.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/obj-som.c' object='obj-som.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o obj-som.obj `if test -f 'config/obj-som.c'; then $(CYGPATH_W) 'config/obj-som.c'; else $(CYGPATH_W) '$(srcdir)/config/obj-som.c'; fi` + +te-vms.o: config/te-vms.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT te-vms.o -MD -MP -MF $(DEPDIR)/te-vms.Tpo -c -o te-vms.o `test -f 'config/te-vms.c' || echo '$(srcdir)/'`config/te-vms.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/te-vms.Tpo $(DEPDIR)/te-vms.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/te-vms.c' object='te-vms.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o te-vms.o `test -f 'config/te-vms.c' || echo '$(srcdir)/'`config/te-vms.c + +te-vms.obj: config/te-vms.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT te-vms.obj -MD -MP -MF $(DEPDIR)/te-vms.Tpo -c -o te-vms.obj `if test -f 'config/te-vms.c'; then $(CYGPATH_W) 'config/te-vms.c'; else $(CYGPATH_W) '$(srcdir)/config/te-vms.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/te-vms.Tpo $(DEPDIR)/te-vms.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/te-vms.c' object='te-vms.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o te-vms.obj `if test -f 'config/te-vms.c'; then $(CYGPATH_W) 'config/te-vms.c'; else $(CYGPATH_W) '$(srcdir)/config/te-vms.c'; fi` + +atof-ieee.o: config/atof-ieee.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atof-ieee.o -MD -MP -MF $(DEPDIR)/atof-ieee.Tpo -c -o atof-ieee.o `test -f 'config/atof-ieee.c' || echo '$(srcdir)/'`config/atof-ieee.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atof-ieee.Tpo $(DEPDIR)/atof-ieee.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/atof-ieee.c' object='atof-ieee.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atof-ieee.o `test -f 'config/atof-ieee.c' || echo '$(srcdir)/'`config/atof-ieee.c + +atof-ieee.obj: config/atof-ieee.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atof-ieee.obj -MD -MP -MF $(DEPDIR)/atof-ieee.Tpo -c -o atof-ieee.obj `if test -f 'config/atof-ieee.c'; then $(CYGPATH_W) 'config/atof-ieee.c'; else $(CYGPATH_W) '$(srcdir)/config/atof-ieee.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atof-ieee.Tpo $(DEPDIR)/atof-ieee.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/atof-ieee.c' object='atof-ieee.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atof-ieee.obj `if test -f 'config/atof-ieee.c'; then $(CYGPATH_W) 'config/atof-ieee.c'; else $(CYGPATH_W) '$(srcdir)/config/atof-ieee.c'; fi` + +atof-vax.o: config/atof-vax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atof-vax.o -MD -MP -MF $(DEPDIR)/atof-vax.Tpo -c -o atof-vax.o `test -f 'config/atof-vax.c' || echo '$(srcdir)/'`config/atof-vax.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atof-vax.Tpo $(DEPDIR)/atof-vax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/atof-vax.c' object='atof-vax.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atof-vax.o `test -f 'config/atof-vax.c' || echo '$(srcdir)/'`config/atof-vax.c + +atof-vax.obj: config/atof-vax.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT atof-vax.obj -MD -MP -MF $(DEPDIR)/atof-vax.Tpo -c -o atof-vax.obj `if test -f 'config/atof-vax.c'; then $(CYGPATH_W) 'config/atof-vax.c'; else $(CYGPATH_W) '$(srcdir)/config/atof-vax.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/atof-vax.Tpo $(DEPDIR)/atof-vax.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/atof-vax.c' object='atof-vax.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o atof-vax.obj `if test -f 'config/atof-vax.c'; then $(CYGPATH_W) 'config/atof-vax.c'; else $(CYGPATH_W) '$(srcdir)/config/atof-vax.c'; fi` + +e-crisaout.o: config/e-crisaout.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-crisaout.o -MD -MP -MF $(DEPDIR)/e-crisaout.Tpo -c -o e-crisaout.o `test -f 'config/e-crisaout.c' || echo '$(srcdir)/'`config/e-crisaout.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-crisaout.Tpo $(DEPDIR)/e-crisaout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-crisaout.c' object='e-crisaout.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-crisaout.o `test -f 'config/e-crisaout.c' || echo '$(srcdir)/'`config/e-crisaout.c + +e-crisaout.obj: config/e-crisaout.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-crisaout.obj -MD -MP -MF $(DEPDIR)/e-crisaout.Tpo -c -o e-crisaout.obj `if test -f 'config/e-crisaout.c'; then $(CYGPATH_W) 'config/e-crisaout.c'; else $(CYGPATH_W) '$(srcdir)/config/e-crisaout.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-crisaout.Tpo $(DEPDIR)/e-crisaout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-crisaout.c' object='e-crisaout.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-crisaout.obj `if test -f 'config/e-crisaout.c'; then $(CYGPATH_W) 'config/e-crisaout.c'; else $(CYGPATH_W) '$(srcdir)/config/e-crisaout.c'; fi` + +e-criself.o: config/e-criself.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-criself.o -MD -MP -MF $(DEPDIR)/e-criself.Tpo -c -o e-criself.o `test -f 'config/e-criself.c' || echo '$(srcdir)/'`config/e-criself.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-criself.Tpo $(DEPDIR)/e-criself.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-criself.c' object='e-criself.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-criself.o `test -f 'config/e-criself.c' || echo '$(srcdir)/'`config/e-criself.c + +e-criself.obj: config/e-criself.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-criself.obj -MD -MP -MF $(DEPDIR)/e-criself.Tpo -c -o e-criself.obj `if test -f 'config/e-criself.c'; then $(CYGPATH_W) 'config/e-criself.c'; else $(CYGPATH_W) '$(srcdir)/config/e-criself.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-criself.Tpo $(DEPDIR)/e-criself.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-criself.c' object='e-criself.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-criself.obj `if test -f 'config/e-criself.c'; then $(CYGPATH_W) 'config/e-criself.c'; else $(CYGPATH_W) '$(srcdir)/config/e-criself.c'; fi` + +e-i386aout.o: config/e-i386aout.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-i386aout.o -MD -MP -MF $(DEPDIR)/e-i386aout.Tpo -c -o e-i386aout.o `test -f 'config/e-i386aout.c' || echo '$(srcdir)/'`config/e-i386aout.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-i386aout.Tpo $(DEPDIR)/e-i386aout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-i386aout.c' object='e-i386aout.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-i386aout.o `test -f 'config/e-i386aout.c' || echo '$(srcdir)/'`config/e-i386aout.c + +e-i386aout.obj: config/e-i386aout.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-i386aout.obj -MD -MP -MF $(DEPDIR)/e-i386aout.Tpo -c -o e-i386aout.obj `if test -f 'config/e-i386aout.c'; then $(CYGPATH_W) 'config/e-i386aout.c'; else $(CYGPATH_W) '$(srcdir)/config/e-i386aout.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-i386aout.Tpo $(DEPDIR)/e-i386aout.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-i386aout.c' object='e-i386aout.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-i386aout.obj `if test -f 'config/e-i386aout.c'; then $(CYGPATH_W) 'config/e-i386aout.c'; else $(CYGPATH_W) '$(srcdir)/config/e-i386aout.c'; fi` + +e-i386coff.o: config/e-i386coff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-i386coff.o -MD -MP -MF $(DEPDIR)/e-i386coff.Tpo -c -o e-i386coff.o `test -f 'config/e-i386coff.c' || echo '$(srcdir)/'`config/e-i386coff.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-i386coff.Tpo $(DEPDIR)/e-i386coff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-i386coff.c' object='e-i386coff.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-i386coff.o `test -f 'config/e-i386coff.c' || echo '$(srcdir)/'`config/e-i386coff.c + +e-i386coff.obj: config/e-i386coff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-i386coff.obj -MD -MP -MF $(DEPDIR)/e-i386coff.Tpo -c -o e-i386coff.obj `if test -f 'config/e-i386coff.c'; then $(CYGPATH_W) 'config/e-i386coff.c'; else $(CYGPATH_W) '$(srcdir)/config/e-i386coff.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-i386coff.Tpo $(DEPDIR)/e-i386coff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-i386coff.c' object='e-i386coff.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-i386coff.obj `if test -f 'config/e-i386coff.c'; then $(CYGPATH_W) 'config/e-i386coff.c'; else $(CYGPATH_W) '$(srcdir)/config/e-i386coff.c'; fi` + +e-i386elf.o: config/e-i386elf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-i386elf.o -MD -MP -MF $(DEPDIR)/e-i386elf.Tpo -c -o e-i386elf.o `test -f 'config/e-i386elf.c' || echo '$(srcdir)/'`config/e-i386elf.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-i386elf.Tpo $(DEPDIR)/e-i386elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-i386elf.c' object='e-i386elf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-i386elf.o `test -f 'config/e-i386elf.c' || echo '$(srcdir)/'`config/e-i386elf.c + +e-i386elf.obj: config/e-i386elf.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-i386elf.obj -MD -MP -MF $(DEPDIR)/e-i386elf.Tpo -c -o e-i386elf.obj `if test -f 'config/e-i386elf.c'; then $(CYGPATH_W) 'config/e-i386elf.c'; else $(CYGPATH_W) '$(srcdir)/config/e-i386elf.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-i386elf.Tpo $(DEPDIR)/e-i386elf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-i386elf.c' object='e-i386elf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-i386elf.obj `if test -f 'config/e-i386elf.c'; then $(CYGPATH_W) 'config/e-i386elf.c'; else $(CYGPATH_W) '$(srcdir)/config/e-i386elf.c'; fi` + +e-mipsecoff.o: config/e-mipsecoff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-mipsecoff.o -MD -MP -MF $(DEPDIR)/e-mipsecoff.Tpo -c -o e-mipsecoff.o `test -f 'config/e-mipsecoff.c' || echo '$(srcdir)/'`config/e-mipsecoff.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-mipsecoff.Tpo $(DEPDIR)/e-mipsecoff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-mipsecoff.c' object='e-mipsecoff.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-mipsecoff.o `test -f 'config/e-mipsecoff.c' || echo '$(srcdir)/'`config/e-mipsecoff.c + +e-mipsecoff.obj: config/e-mipsecoff.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-mipsecoff.obj -MD -MP -MF $(DEPDIR)/e-mipsecoff.Tpo -c -o e-mipsecoff.obj `if test -f 'config/e-mipsecoff.c'; then $(CYGPATH_W) 'config/e-mipsecoff.c'; else $(CYGPATH_W) '$(srcdir)/config/e-mipsecoff.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-mipsecoff.Tpo $(DEPDIR)/e-mipsecoff.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-mipsecoff.c' object='e-mipsecoff.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-mipsecoff.obj `if test -f 'config/e-mipsecoff.c'; then $(CYGPATH_W) 'config/e-mipsecoff.c'; else $(CYGPATH_W) '$(srcdir)/config/e-mipsecoff.c'; fi` + +e-mipself.o: config/e-mipself.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-mipself.o -MD -MP -MF $(DEPDIR)/e-mipself.Tpo -c -o e-mipself.o `test -f 'config/e-mipself.c' || echo '$(srcdir)/'`config/e-mipself.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-mipself.Tpo $(DEPDIR)/e-mipself.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-mipself.c' object='e-mipself.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-mipself.o `test -f 'config/e-mipself.c' || echo '$(srcdir)/'`config/e-mipself.c + +e-mipself.obj: config/e-mipself.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT e-mipself.obj -MD -MP -MF $(DEPDIR)/e-mipself.Tpo -c -o e-mipself.obj `if test -f 'config/e-mipself.c'; then $(CYGPATH_W) 'config/e-mipself.c'; else $(CYGPATH_W) '$(srcdir)/config/e-mipself.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/e-mipself.Tpo $(DEPDIR)/e-mipself.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config/e-mipself.c' object='e-mipself.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o e-mipself.obj `if test -f 'config/e-mipself.c'; then $(CYGPATH_W) 'config/e-mipself.c'; else $(CYGPATH_W) '$(srcdir)/config/e-mipself.c'; fi` .l.c: - $(LEXCOMPILE) $< - sed '/^#/ s|$(LEX_OUTPUT_ROOT)\.c|$@|' $(LEX_OUTPUT_ROOT).c >$@ - rm -f $(LEX_OUTPUT_ROOT).c + $(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: - $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) + $(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo @@ -2241,8 +2163,7 @@ clean-libtool: -rm -rf .libs _libs distclean-libtool: - -rm -f libtool -uninstall-info-am: + -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -2268,15 +2189,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -2303,16 +2223,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -2320,14 +2240,14 @@ ID: $(HEADERS) $(SOURCES) $(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; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -2339,39 +2259,43 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - 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" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags @@ -2400,7 +2324,7 @@ distclean-DEJAGNU: -l='$(DEJATOOL)'; for tool in $$l; do \ rm -f $$tool.sum $$tool.log; \ done -check-am: +check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-DEJAGNU check: check-recursive all-am: Makefile $(PROGRAMS) $(SCRIPTS) config.h @@ -2424,10 +2348,10 @@ mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: - -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -2444,6 +2368,7 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-DEJAGNU distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ @@ -2455,23 +2380,44 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: install-data-am: +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: install-exec-local +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + 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 @@ -2490,38 +2436,30 @@ ps-am: uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check-am \ + ctags-recursive install-am install-strip tags-recursive -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-DEJAGNU check-am clean clean-generic clean-libtool \ - clean-noinstPROGRAMS clean-recursive ctags ctags-recursive \ - distclean distclean-DEJAGNU distclean-compile \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-DEJAGNU check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS ctags \ + ctags-recursive distclean distclean-DEJAGNU distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ - distclean-recursive distclean-tags dvi dvi-am html html-am \ - info info-am install install-am install-data install-data-am \ - 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-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am + distclean-tags dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-local \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am po/POTFILES.in: @MAINT@ Makefile - for f in $(POTFILES); do echo $$f; done | LC_COLLATE= sort > tmp \ + for f in $(POTFILES); do echo $$f; done | LC_ALL=C sort > tmp \ && mv tmp $(srcdir)/po/POTFILES.in diststuff: $(EXTRA_DIST) info -all: info - -# Stuff that every object file depends upon. If anything is removed -# from this list, remove it from dep-in.sed as well. -$(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 check-DEJAGNU: site.exp if [ -d testsuite ]; then \ @@ -2542,55 +2480,6 @@ check-DEJAGNU: site.exp else echo "WARNING: could not find \`runtest'" 1>&2; :;\ fi -# The implicit .c.o rule doesn't work for these, perhaps because of -# the variables, or perhaps because the sources are not on vpath. -$(TARG_CPU_O): $(TARG_CPU_C) - $(COMPILE) -c $(TARG_CPU_C) -$(ATOF_TARG_O): $(ATOF_TARG_C) - $(COMPILE) -c $(ATOF_TARG_C) - -# ecoff.c only has full dependencies when ECOFF_DEBUGGING is defined, -# so the automatic dependency stuff doesn't work. -ecoff.o : ecoff.c ecoff.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/sym.h \ - $(INCDIR)/coff/ecoff.h $(INCDIR)/coff/symconst.h \ - $(INCDIR)/aout/stab_gnu.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 $(DEP_@target_cpu_type@_aout) - $(COMPILE) -c $(srcdir)/config/obj-aout.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 $(DEP_@target_cpu_type@_ecoff) - $(COMPILE) -c $(srcdir)/config/obj-ecoff.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-multi.o : $(srcdir)/config/obj-multi.c - $(COMPILE) -c $(srcdir)/config/obj-multi.c -obj-som.o : $(srcdir)/config/obj-som.c - $(COMPILE) -c $(srcdir)/config/obj-som.c - -e-mipself.o : $(srcdir)/config/e-mipself.c - $(COMPILE) -c $(srcdir)/config/e-mipself.c -e-mipsecoff.o : $(srcdir)/config/e-mipsecoff.c - $(COMPILE) -c $(srcdir)/config/e-mipsecoff.c -e-i386aout.o: $(srcdir)/config/e-i386aout.c - $(COMPILE) -c $(srcdir)/config/e-i386aout.c -e-i386coff.o: $(srcdir)/config/e-i386coff.c - $(COMPILE) -c $(srcdir)/config/e-i386coff.c -e-i386elf.o: $(srcdir)/config/e-i386elf.c - $(COMPILE) -c $(srcdir)/config/e-i386elf.c -e-crisaout.o: $(srcdir)/config/e-crisaout.c - $(COMPILE) -c $(srcdir)/config/e-crisaout.c -e-criself.o: $(srcdir)/config/e-criself.c - $(COMPILE) -c $(srcdir)/config/e-criself.c - -xtensa-relax.o: $(srcdir)/config/xtensa-relax.c - $(COMPILE) -c $(srcdir)/config/xtensa-relax.c - # If m68k-parse.y is in a different directory, then ylwrap will use an # absolute path when it invokes yacc, which will cause yacc to put the # absolute path into the generated file. That's a pain when it comes @@ -2615,8 +2504,12 @@ m68k-parse.c: $(srcdir)/config/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. -m68k-parse.o: m68k-parse.c $(srcdir)/config/m68k-parse.h - $(COMPILE) -c $< $(NO_WERROR) +m68k-parse.o: m68k-parse.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f m68k-parse.c || echo $(srcdir)/`m68k-parse.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='m68k-parse.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f m68k-parse.c || echo $(srcdir)/`m68k-parse.c $(NO_WERROR) # Don't let the .y.h rule clobber m68k-parse.h. m68k-parse.h: ; @true @@ -2625,76 +2518,68 @@ $(srcdir)/config/m68k-parse.h: ; @true bfin-parse.c: $(srcdir)/config/bfin-parse.y $(SHELL) $(YLWRAP) $(srcdir)/config/bfin-parse.y y.tab.c bfin-parse.c y.tab.h bfin-parse.h -- $(YACCCOMPILE) -d ; bfin-parse.h: bfin-parse.c -bfin-parse.o: bfin-parse.c bfin-parse.h $(srcdir)/config/bfin-defs.h \ +bfin-parse.o: bfin-parse.c \ + $(srcdir)/config/bfin-aux.h $(srcdir)/config/bfin-defs.h \ $(INCDIR)/elf/common.h $(INCDIR)/elf/bfin.h $(BFDDIR)/libbfd.h -bfin-defs.h: ; @true -$(srcdir)/config/bfin-defs.h: ; @true +bfin-parse.h: ; @true +$(srcdir)/config/bfin-parse.h: ; @true bfin-lex.c: $(srcdir)/config/bfin-lex.l $(SHELL) $(YLWRAP) $(srcdir)/config/bfin-lex.l lex.yy.c bfin-lex.c -- $(LEXCOMPILE) bfin-lex.o: bfin-lex.c bfin-parse.h $(srcdir)/config/bfin-defs.h - $(COMPILE) -c $< $(NO_WERROR) +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f bfin-lex.c || echo $(srcdir)/`bfin-lex.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bfin-lex.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f bfin-lex.c || echo $(srcdir)/`bfin-lex.c $(NO_WERROR) # The instruction table specification lexical analyzer and parser. -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. -itbl-lex.o: itbl-lex.c itbl-parse.h $(srcdir)/itbl-lex.h - $(COMPILE) -c $< $(NO_WERROR) +itbl-lex.o: itbl-lex.c itbl-parse.h +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f itbl-lex.c || echo $(srcdir)/`itbl-lex.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='itbl-lex.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f itbl-lex.c || echo $(srcdir)/`itbl-lex.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. -itbl-parse.o: itbl-parse.c itbl-parse.h $(srcdir)/itbl-ops.h $(srcdir)/itbl-lex.h - $(COMPILE) -c $< $(NO_WERROR) +itbl-parse.o: itbl-parse.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `test -f itbl-parse.c || echo $(srcdir)/`itbl-parse.c $(NO_WERROR) +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='itbl-parse.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `test -f itbl-parse.c || echo $(srcdir)/`itbl-parse.c $(NO_WERROR) + +itbl-parse.c: $(srcdir)/itbl-parse.y + $(SHELL) $(YLWRAP) $(srcdir)/itbl-parse.y y.tab.c itbl-parse.c y.tab.h itbl-parse.h -- $(YACCCOMPILE) -d -itbl-ops.o: $(srcdir)/itbl-ops.c $(srcdir)/itbl-ops.h itbl-parse.h +itbl-parse.h: itbl-parse.c ; @true -itbl-parse.c itbl-parse.h: $(srcdir)/itbl-parse.y - $(SHELL) $(YLWRAP) $(srcdir)/itbl-parse.y y.tab.c itbl-parse.c y.tab.h itbl-parse.h -- $(YACCCOMPILE) -d +itbl-ops.o: itbl-parse.h -itbl-tops.o: $(srcdir)/itbl-ops.c $(srcdir)/itbl-ops.h itbl-parse.h - $(COMPILE) -o itbl-tops.o -DSTAND_ALONE -c $(srcdir)/itbl-ops.c +itbl-tops.o: itbl-ops.c itbl-parse.h +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -o $@ -c -DSTAND_ALONE $(srcdir)/itbl-ops.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='itbl-ops.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -o $@ -DSTAND_ALONE -c $(srcdir)/itbl-ops.c -itbl-test.o: $(srcdir)/testsuite/gas/all/itbl-test.c $(srcdir)/itbl-ops.h - $(COMPILE) -c -DSTAND_ALONE $(srcdir)/testsuite/gas/all/itbl-test.c +itbl-test.o: $(srcdir)/testsuite/gas/all/itbl-test.c +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ -DSTAND_ALONE $(srcdir)/testsuite/gas/all/itbl-test.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='itbl-test.c' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c -DSTAND_ALONE $(srcdir)/testsuite/gas/all/itbl-test.c cgen.o: cgen.c cgen.h cgen-desc.h subsegs.h \ $(INCDIR)/obstack.h $(INCDIR)/opcode/cgen.h \ $(srcdir)/../opcodes/$(CGEN_CPU_PREFIX)-desc.h \ $(srcdir)/../opcodes/$(CGEN_CPU_PREFIX)-opc.h -.PHONY: install-html install-html-am install-html-recursive - -install-html: install-html-recursive - -install-html-recursive: - @failcom='exit 1'; \ - for f in x $$MAKEFLAGS; do \ - case $$f in \ - *=* | --[!k]*);; \ - *k*) failcom='fail=yes';; \ - esac; \ - done; \ - dot_seen=no; \ - target=`echo $@ | sed s/-recursive//`; \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - echo "Making $$target in $$subdir"; \ - if test "$$subdir" = "."; then \ - dot_seen=yes; \ - local_target="$$target-am"; \ - else \ - local_target="$$target"; \ - fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ - || eval $$failcom; \ - done; \ - if test "$$dot_seen" = "no"; then \ - $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ - fi; test -z "$$fail" - .PHONY: install-exec-local install-data-local .PHONY: install-exec-bindir install-exec-tooldir @@ -2795,236 +2680,6 @@ de-stage3: - (cd stage3 ; rm -f as$(EXEEXT) ; mv -f * ..) - rmdir stage3 -# Automatic dependency computation. This is a real pain, because the -# dependencies change based on target_cpu_type and obj_format. -# Just to make things even more complicated, automake separates the -# dependency variable assignments from the dependency rules, and tacks -# on a .NOEXPORT at the end of Makefile.in. - -DEP: dep.sed $(DEP_FILE_DEPS) DEPTC DEPOBJ DEP2 - rm -f DEP1 # delete because we use $? in DEP1 rule - srcdir=`cd $(srcdir); pwd`; \ - $(MAKE) MKDEP="$(MKDEP)" srcdir="$${srcdir}" VPATH="$${srcdir}" DEP1 - rm -rf DEPDIR - echo 'AMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.' > DEPA - sed -f dep.sed < DEPTC >> DEPA - sed -f dep.sed < DEPOBJ >> DEPA - sed -f dep.sed < DEP2 >> DEPA - echo 'BMKDEP = #DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.' >> DEPA - echo '#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING BELOW.' >> DEPA - sed -f dep.sed < DEP1 >> DEPA - echo '$$(OBJS): $$(DEP_@target''_cpu_type@_@obj''_format@)' >> DEPA - echo '$$(TARG_CPU_O): $$(DEPTC_@target''_cpu_type@_@obj''_format@)' >> DEPA - echo '$$(OBJ_FORMAT_O): $$(DEPOBJ_@target''_cpu_type@_@obj''_format@)' >> DEPA - echo '#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE.' >> DEPA - if grep ' /' DEPA > /dev/null 2> /dev/null; then \ - echo 'make DEP failed!'; exit 1; \ - else \ - mv -f DEPA $@; \ - fi - -DEP1: $(CFILES) $(MULTI_CFILES) - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - echo '' > targ-cpu.h; \ - echo '' > obj-format.h; \ - echo '' > targ-env.h; \ - echo '' > itbl-cpu.h; \ - echo '' > itbl-parse.h; \ - $(MKDEP) $(DEP_FLAGS) $? > DEP - mv -f DEPDIR/DEP $@ - -# Work out the special dependencies for the tc-*.c files. -DEPTC: $(TARGET_CPU_CFILES) - rm -f DEPTCA - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - for c in $(CPU_TYPES); do \ - for o in $(OBJ_FORMATS); do \ - $(CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '#include "tc-'"$${c}"'.h"' > targ-cpu.h; \ - echo '#include "obj-'"$${o}"'.h"' > obj-format.h; \ - echo '#include "te-generic.h"' > targ-env.h; \ - echo '' > itbl-cpu.h; \ - echo '' > itbl-parse.h; \ - echo '#include "opcodes/'"$${c}"'-desc.h"' > cgen-desc.h; \ - rm -f dummy.c; \ - cp $${srcdir}/config/tc-$${c}.c dummy.c; \ - $(MKDEP) $(DEP_FLAGS) dummy.c | \ - sed -e "s/dummy.o: dummy.c/DEPTC_$${c}_$${o} =/" >> ../DEPTCA; \ - rm -f dummy.c; \ - else true; fi; \ - done; \ - done - echo 'DEPTC_hppa_som = $$(srcdir)/config/tc-hppa.h subsegs.h \' >> DEPTCA - echo ' $$(INCDIR)/obstack.h $$(BFDDIR)/libhppa.h \' >> DEPTCA - echo ' $$(INCDIR)/opcode/hppa.h $$(BFDDIR)/som.h' >> DEPTCA - for c in $(MULTI_CPU_TYPES); do \ - echo "DEPTC_$${c}"'_multi = \' >> DEPTCA; \ - for o in $(OBJ_FORMATS); do \ - $(MULTI_CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '$$(DEPTC_'"$${c}_$${o}"') \' >> DEPTCA; \ - else true; fi; \ - done; \ - echo '' >> DEPTCA; \ - done - mv -f DEPTCA DEPTC - -# Work out the special dependencies for the obj-*.c files. -DEPOBJ: $(OBJ_FORMAT_CFILES) - rm -f DEPOBJA - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - for c in $(CPU_TYPES); do \ - for o in $(OBJ_FORMATS); do \ - $(CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '#include "tc-'"$${c}"'.h"' > targ-cpu.h; \ - echo '#include "obj-'"$${o}"'.h"' > obj-format.h; \ - echo '#include "te-generic.h"' > targ-env.h; \ - echo '' > itbl-cpu.h; \ - echo '' > itbl-parse.h; \ - rm -f dummy.c; \ - cp $${srcdir}/config/obj-$${o}.c dummy.c; \ - $(MKDEP) $(DEP_FLAGS) dummy.c | \ - sed -e "s/dummy.o: dummy.c/DEPOBJ_$${c}_$${o} =/" >> ../DEPOBJA; \ - rm -f dummy.c; \ - else true; fi; \ - done; \ - done - echo 'DEPOBJ_hppa_som = $$(srcdir)/config/obj-som.h subsegs.h \' >> DEPOBJA - echo ' $$(INCDIR)/obstack.h $$(BFDDIR)/libhppa.h \' >> DEPOBJA - echo ' $$(BFDDIR)/som.h $$(INCDIR)/aout/stab_gnu.h \' >> DEPOBJA - echo ' $$(INCDIR)/aout/stab.def' >> DEPOBJA - for c in $(MULTI_CPU_TYPES); do \ - echo "DEPOBJ_$${c}"'_multi = \' >> DEPOBJA; \ - for o in $(OBJ_FORMATS); do \ - $(MULTI_CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '$$(DEPOBJ_'"$${c}_$${o}"') \' >> DEPOBJA; \ - else true; fi; \ - done; \ - echo '' >> DEPOBJA; \ - done - mv -f DEPOBJA DEPOBJ - -# Work out the dependencies for each CPU/OBJ combination. -# Note that SOM is a special case, because it only works native. -DEP2: $(TARGET_CPU_HFILES) $(OBJ_FORMAT_HFILES) - rm -f DEP2A - if [ -d DEPDIR ]; then true; else mkdir DEPDIR; fi - srcdir=`cd $(srcdir); pwd`; \ - cd DEPDIR; \ - for c in $(CPU_TYPES); do \ - for o in $(OBJ_FORMATS); do \ - $(CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '#include "tc-'"$${c}"'.h"' > targ-cpu.h; \ - echo '#include "obj-'"$${o}"'.h"' > dummy.c; \ - $(MKDEP) $(DEP_FLAGS) dummy.c | \ - sed -e "s/dummy.o: dummy.c/DEP_$${c}_$${o} =/" >> ../DEP2A; \ - else true; fi; \ - done; \ - done - echo 'DEP_hppa_som = $$(BFDDIR)/som.h' >> DEP2A - for c in $(MULTI_CPU_TYPES); do \ - echo "DEP_$${c}"'_multi = \' >> DEP2A; \ - for o in $(OBJ_FORMATS); do \ - $(MULTI_CPU_OBJ_VALID) \ - if [ x$${valid} = xyes ]; then \ - echo '$$(DEP_'"$${c}_$${o}"') \' >> DEP2A; \ - else true; fi; \ - done; \ - echo '' >> DEP2A; \ - done - mv -f DEP2A DEP2 - -dep.sed: dep-in.sed config.status - srcdir=`cd $(srcdir); pwd`; \ - sed <$(srcdir)/dep-in.sed >dep.sed \ - -e "s!@INCDIR@!$${srcdir}/../include!" \ - -e "s!@BFDDIR@!$${srcdir}/../bfd!" \ - -e "s!@SRCDIR@!$${srcdir}!" \ - -e 's!@TOPDIR@!'`echo $(srcdir) | sed -e s,/gas,,`'!' - -dep: DEP - sed -e '/^.MKDEP.*WARNING BELOW./,/^.MKDEP.*WARNING ABOVE./d' \ - < Makefile > tmp-Makefile - cat DEP >> tmp-Makefile - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile Makefile - -dep-in: DEP - sed -e '/^.MKDEP.*WARNING BELOW./,/^.MKDEP.*WARNING ABOVE./d' \ - < $(srcdir)/Makefile.in > tmp-Makefile.in - cat DEP >> tmp-Makefile.in - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.in $(srcdir)/Makefile.in - -dep-am: DEP - sed -e '/^.MKDEP.*WARNING BELOW./,/^.MKDEP.*WARNING ABOVE./d' \ - < $(srcdir)/Makefile.am > tmp-Makefile.am - cat DEP >> tmp-Makefile.am - $(SHELL) $(srcdir)/../move-if-change tmp-Makefile.am $(srcdir)/Makefile.am - -# HEED THE MKDEP WARNINGS. -# 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 -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 -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 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 -remap.o: remap.c -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@) -#MKDEP DO NOT PUT ANYTHING BETWEEN THIS LINE AND THE MATCHING WARNING ABOVE. # 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/gas/NEWS b/gas/NEWS index 77a49fb..3fa3809 100644 --- a/gas/NEWS +++ b/gas/NEWS @@ -1,4 +1,60 @@ -*- text -*- + +Changes in 2.20: + +* GNU/Linux targets now supports "gnu_unique_object" as a value in the .type + pseudo op. It marks the symbol as being globally unique in the entire + process. + +* ARM assembler now supports .inst[.nw] pseudo-ops to insert opcodes specified + in binary rather than text. + +* Add support for common symbol alignment to PE formats. + +* Add support for the new discriminator column in the DWARF line table, + with a discriminator operand for the .loc directive. + +* Add support for Sunplus score architecture. + +* The .type pseudo-op now accepts a type of STT_GNU_IFUNC which can be used to + indicate that if the symbol is the target of a relocation, its value should + not be use. Instead the function should be invoked and its result used as + the value. + +* Add support for Lattice Mico32 (lm32) architecture. + +* Add support for Xilinx MicroBlaze architecture. + +Changes in 2.19: + +* New pseudo op .cfi_val_encoded_addr, to record constant addresses in unwind + tables without runtime relocation. + +* New command line option, -h-tick-hex, for sh, m32c, and h8/300 targets, which + adds compatibility with H'00 style hex constants. + +* New command line option, -msse-check=[none|error|warning], for x86 + targets. + +* New sub-option added to the assembler's -a command line switch to + generate a listing output. The 'g' sub-option will insert into the listing + various information about the assembly, such as assembler version, the + command line options used, and a time stamp. + +* New command line option -msse2avx for x86 target to encode SSE + instructions with VEX prefix. + +* Add Intel XSAVE, EPT, MOVBE, AES, PCLMUL, AVX/FMA support for x86 target. + +* New command line options, -march=CPU[,+EXTENSION...], -mtune=CPU, + -mmnemonic=[att|intel], -msyntax=[att|intel], -mindex-reg, + -mnaked-reg and -mold-gcc, for x86 targets. + +* Support for generating wide character strings has been added via the new + pseudo ops: .string16, .string32 and .string64. + +* Support for SSE5 has been added to the i386 port. + Changes in 2.18: * The GAS sources are now released under the GPLv3. diff --git a/gas/acinclude.m4 b/gas/acinclude.m4 index fa4c1bc..40722c6 100644 --- a/gas/acinclude.m4 +++ b/gas/acinclude.m4 @@ -54,3 +54,41 @@ for _gas_uniq_i in _gas_uniq_dummy [$]_gas_uniq_list ; do done $1=[$]_gas_uniq_newlist ])dnl +dnl +dnl Check for existence of member $2 in type $1 in time.h +dnl +AC_DEFUN([GAS_HAVE_TIME_TYPE_MEMBER], +[AC_MSG_CHECKING([for $1.$2 in time.h]) + AC_CACHE_VAL(gas_cv_have_time_type_member_$2, + [AC_TRY_COMPILE([ +#define _BSD_SOURCE 1 +#include ], + [$1 avar; void* aref = (void*) &avar.$2], + gas_cv_have_time_type_member_$2=yes, + gas_cv_have_time_type_member_$2=no + )]) + if test $gas_cv_have_time_type_member_$2 = yes; then + AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z]), 1, + [Define if has $1.$2.]) + fi + AC_MSG_RESULT($gas_cv_have_time_type_member_$2) +])dnl +dnl +dnl Check for existence of member $2.$3 in type $1 in sys/stat.h +dnl +AC_DEFUN([GAS_HAVE_SYS_STAT_TYPE_MEMBER], +[AC_MSG_CHECKING([for $1.$2.$3 in sys/stat.h]) + AC_CACHE_VAL(gas_cv_have_sys_stat_type_member_$2_$3, + [AC_TRY_COMPILE([ +#define _BSD_SOURCE 1 +#include ], + [$1 avar; void* aref = (void*) &avar.$2.$3], + gas_cv_have_sys_stat_type_member_$2_$3=yes, + gas_cv_have_sys_stat_type_member_$2_$3=no + )]) + if test $gas_cv_have_sys_stat_type_member_$2_$3 = yes; then + AC_DEFINE([HAVE_]translit($2, [a-z], [A-Z])[_]translit($3, [a-z], [A-Z]), 1, + [Define if has $1.$2.$3]) + fi + AC_MSG_RESULT($gas_cv_have_sys_stat_type_member_$2_$3) +])dnl diff --git a/gas/aclocal.m4 b/gas/aclocal.m4 index 1182e36..874683e 100644 --- a/gas/aclocal.m4 +++ b/gas/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,7 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, +[m4_warning([this file was generated for autoconf 2.64. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -21,14 +29,31 @@ # ---------------------------- # 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"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -85,14 +110,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -101,8 +126,11 @@ 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]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -116,15 +144,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -152,6 +179,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -180,6 +208,16 @@ AC_CACHE_CHECK([dependency style of $depcc], if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -197,7 +235,17 @@ AC_CACHE_CHECK([dependency style of $depcc], done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -207,18 +255,23 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # 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} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -269,61 +322,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _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" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -340,28 +406,16 @@ AC_DEFUN([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. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -378,16 +432,20 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # 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 +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# 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]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -407,6 +465,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -422,8 +483,8 @@ 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_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -431,20 +492,37 @@ 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([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 + [_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 + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header @@ -455,18 +533,19 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -477,7 +556,14 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # 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"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005 @@ -504,27 +590,38 @@ fi]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], -[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 +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful (and sometimes confusing) to the casual installer], - USE_MAINTAINER_MODE=$enableval, - USE_MAINTAINER_MODE=no) + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) - AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE - AC_SUBST(MAINT)dnl + AC_SUBST([MAINT])dnl ] ) @@ -532,13 +629,13 @@ 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. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -547,7 +644,7 @@ AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -557,24 +654,24 @@ 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 +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -584,14 +681,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -607,7 +704,15 @@ AC_SUBST($1)]) # 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" +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -617,7 +722,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -625,70 +730,33 @@ fi # 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.) +# Check for `mkdir -p'. 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])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -705,7 +773,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -715,14 +783,14 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -731,16 +799,29 @@ AC_DEFUN([AM_SANITY_CHECK], # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + 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` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -790,9 +871,28 @@ 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" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. @@ -895,10 +995,12 @@ 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/override.m4]) m4_include([../config/po.m4]) m4_include([../config/progtest.m4]) m4_include([../libtool.m4]) m4_include([../ltoptions.m4]) m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) +m4_include([../lt~obsolete.m4]) m4_include([acinclude.m4]) diff --git a/gas/app.c b/gas/app.c index d8d0cc5..56a0e12 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, 2006, 2007 + 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -34,6 +34,10 @@ #endif #endif +#ifdef H_TICK_HEX +int enable_h_tick_hex = 0; +#endif + #ifdef TC_M68K /* Whether we are scrubbing in m68k MRI mode. This is different from flag_m68k_mri, because the two flags will be affected by the .mri @@ -78,6 +82,9 @@ static const char symbol_chars[] = #define LEX_IS_DOUBLEBAR_1ST 13 #endif #define LEX_IS_PARALLEL_SEPARATOR 14 +#ifdef H_TICK_HEX +#define LEX_IS_H 15 +#endif #define IS_SYMBOL_COMPONENT(c) (lex[c] == LEX_IS_SYMBOL_COMPONENT) #define IS_WHITESPACE(c) (lex[c] == LEX_IS_WHITESPACE) #define IS_LINE_SEPARATOR(c) (lex[c] == LEX_IS_LINE_SEPARATOR) @@ -190,6 +197,14 @@ do_scrub_begin (int m68k_mri ATTRIBUTE_UNUSED) /* Must do this is we want VLIW instruction with "->" or "<-". */ lex['-'] = LEX_IS_SYMBOL_COMPONENT; #endif + +#ifdef H_TICK_HEX + if (enable_h_tick_hex) + { + lex['h'] = LEX_IS_H; + lex['H'] = LEX_IS_H; + } +#endif } /* Saved state of the scrubber. */ @@ -243,7 +258,7 @@ app_push (void) saved->saved_input = NULL; else { - saved->saved_input = xmalloc (saved_input_len); + saved->saved_input = (char *) xmalloc (saved_input_len); memcpy (saved->saved_input, saved_input, saved_input_len); saved->saved_input_len = saved_input_len; } @@ -279,7 +294,7 @@ app_pop (char *arg) saved_input = NULL; else { - assert (saved->saved_input_len <= (int) (sizeof input_buffer)); + gas_assert (saved->saved_input_len <= (int) (sizeof input_buffer)); memcpy (input_buffer, saved->saved_input, saved->saved_input_len); saved_input = input_buffer; saved_input_len = saved->saved_input_len; @@ -676,7 +691,7 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) if (ch == '\'') /* Change to avoid warning about unclosed string. */ PUT ('`'); - else + else if (ch != EOF) UNGET (ch); break; #endif @@ -832,7 +847,8 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) /* Only keep this white if there's no white *after* the colon. */ ch2 = GET (); - UNGET (ch2); + if (ch2 != EOF) + UNGET (ch2); if (!IS_WHITESPACE (ch2)) { state = 9; @@ -1008,6 +1024,16 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) #ifndef IEEE_STYLE case LEX_IS_ONECHAR_QUOTE: +#ifdef H_TICK_HEX + if (state == 9 && enable_h_tick_hex) + { + char c; + + c = GET (); + as_warn ("'%c found after symbol", c); + UNGET (c); + } +#endif if (state == 10) { /* Preserve the whitespace in foo 'b'. */ @@ -1096,7 +1122,8 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) ch2 = GET (); if (ch2 != '-') { - UNGET (ch2); + if (ch2 != EOF) + UNGET (ch2); goto de_fault; } /* Read and skip to end of line. */ @@ -1116,7 +1143,8 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) #ifdef DOUBLEBAR_PARALLEL case LEX_IS_DOUBLEBAR_1ST: ch2 = GET (); - UNGET (ch2); + if (ch2 != EOF) + UNGET (ch2); if (ch2 != '|') goto de_fault; @@ -1251,6 +1279,26 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) PUT ('\n'); break; +#ifdef H_TICK_HEX + case LEX_IS_H: + /* Look for strings like H'[0-9A-Fa-f] and if found, replace + the H' with 0x to make them gas-style hex characters. */ + if (enable_h_tick_hex) + { + char quot; + + quot = GET (); + if (quot == '\'') + { + UNGET ('x'); + ch = '0'; + } + else + UNGET (quot); + } + /* FALL THROUGH */ +#endif + case LEX_IS_SYMBOL_COMPONENT: if (state == 10) { @@ -1281,7 +1329,8 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) state = 9; if (!IS_SYMBOL_COMPONENT (ch)) { - UNGET (ch); + if (ch != EOF) + UNGET (ch); break; } } @@ -1405,4 +1454,3 @@ do_scrub_chars (int (*get) (char *, int), char *tostart, int tolen) return to - tostart; } - diff --git a/gas/as.c b/gas/as.c index b636396..50463f8 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, 2006, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -45,13 +45,12 @@ #ifdef HAVE_ITBL_CPU #include "itbl-ops.h" #else -#define itbl_parse(itbl_file) 1 #define itbl_init() #endif #ifdef HAVE_SBRK #ifdef NEED_DECLARATION_SBRK -extern PTR sbrk (); +extern void *sbrk (); #endif #endif @@ -60,13 +59,6 @@ extern PTR sbrk (); extern void gas_cgen_begin (void); #endif -/* Keep a record of the itbl files we read in. */ -struct itbl_file_list -{ - struct itbl_file_list *next; - char *name; -}; - /* We build a list of defsyms as we read the options, and then define them after we have initialized everything. */ struct defsym_list @@ -117,7 +109,15 @@ static char *listing_filename = NULL; static struct defsym_list *defsyms; +#ifdef HAVE_ITBL_CPU +/* Keep a record of the itbl files we read in. */ +struct itbl_file_list +{ + struct itbl_file_list *next; + char *name; +}; static struct itbl_file_list *itbl_files; +#endif static long start_time; @@ -232,6 +232,7 @@ Options:\n\ Sub-options [default hls]:\n\ c omit false conditionals\n\ d omit debugging directives\n\ + g include general info\n\ h include high-level source\n\ l include assembly\n\ m include macro expansions\n\ @@ -323,9 +324,11 @@ Options:\n\ --warn don't suppress warnings\n")); fprintf (stream, _("\ --fatal-warnings treat warnings as errors\n")); +#ifdef HAVE_ITBL_CPU fprintf (stream, _("\ --itbl INSTTBL extend instruction set to include instructions\n\ matching the specifications defined in file INSTTBL\n")); +#endif fprintf (stream, _("\ -w ignored\n")); fprintf (stream, _("\ @@ -392,8 +395,10 @@ parse_args (int * pargc, char *** pargv) 'v', #endif 'w', 'X', +#ifdef HAVE_ITBL_CPU /* New option for extending instruction set (see also --itbl below). */ 't', ':', +#endif '\0' }; struct option *longopts; @@ -411,7 +416,6 @@ parse_args (int * pargc, char *** pargv) OPTION_EMULATION, OPTION_DEBUG_PREFIX_MAP, OPTION_DEFSYM, - OPTION_INSTTBL, OPTION_LISTING_LHS_WIDTH, OPTION_LISTING_LHS_WIDTH2, OPTION_LISTING_RHS_WIDTH, @@ -466,13 +470,15 @@ parse_args (int * pargc, char *** pargv) ,{"gstabs+", no_argument, NULL, OPTION_GSTABS_PLUS} ,{"hash-size", required_argument, NULL, OPTION_HASH_TABLE_SIZE} ,{"help", no_argument, NULL, OPTION_HELP} +#ifdef HAVE_ITBL_CPU /* New option for extending instruction set (see also -t above). The "-t file" or "--itbl file" option extends the basic set of valid instructions by reading "file", a text file containing a list of instruction formats. The additional opcodes and their formats are added to the built-in set of instructions, and mnemonics for new registers may also be defined. */ - ,{"itbl", required_argument, NULL, OPTION_INSTTBL} + ,{"itbl", required_argument, NULL, 't'} +#endif /* getopt allows abbreviations, so we do this to stop it from treating -k as an abbreviation for --keep-locals. Some ports use -k to enable PIC assembly. */ @@ -500,7 +506,8 @@ parse_args (int * pargc, char *** pargv) dependent list. Include space for an extra NULL option and always NULL terminate. */ shortopts = concat (std_shortopts, md_shortopts, (char *) NULL); - longopts = xmalloc (sizeof (std_longopts) + md_longopts_size + sizeof (struct option)); + longopts = (struct option *) xmalloc (sizeof (std_longopts) + + md_longopts_size + sizeof (struct option)); memcpy (longopts, std_longopts, sizeof (std_longopts)); memcpy (((char *) longopts) + sizeof (std_longopts), md_longopts, md_longopts_size); memset (((char *) longopts) + sizeof (std_longopts) + md_longopts_size, @@ -511,7 +518,7 @@ parse_args (int * pargc, char *** pargv) old_argv = *pargv; /* Initialize a new argv that contains no options. */ - new_argv = xmalloc (sizeof (char *) * (old_argc + 1)); + new_argv = (char **) xmalloc (sizeof (char *) * (old_argc + 1)); new_argv[0] = old_argv[0]; new_argc = 1; new_argv[new_argc] = NULL; @@ -594,7 +601,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 2007 Free Software Foundation, Inc.\n")); + printf (_("Copyright 2009 Free Software Foundation, Inc.\n")); printf (_("\ This program is free software; you may redistribute it under the terms of\n\ the GNU General Public License version 3 or later.\n\ @@ -640,7 +647,7 @@ This program has absolutely no warranty.\n")); as_fatal (_("bad defsym; format is --defsym name=value")); *s++ = '\0'; i = bfd_scan_vma (s, (const char **) NULL, 0); - n = xmalloc (sizeof *n); + n = (struct defsym_list *) xmalloc (sizeof *n); n->next = defsyms; n->name = optarg; n->value = i; @@ -648,7 +655,7 @@ This program has absolutely no warranty.\n")); } break; - case OPTION_INSTTBL: +#ifdef HAVE_ITBL_CPU case 't': { /* optarg is the name of the file containing the instruction @@ -676,6 +683,7 @@ This program has absolutely no warranty.\n")); itbl_files->name); } break; +#endif case OPTION_DEPFILE: start_dependencies (optarg); @@ -819,6 +827,9 @@ This program has absolutely no warranty.\n")); case 'd': listing |= LISTING_NODEBUG; break; + case 'g': + listing |= LISTING_GENERAL; + break; case 'h': listing |= LISTING_HLL; break; @@ -938,13 +949,11 @@ dump_statistics (void) #endif } -#ifndef OBJ_VMS static void close_output_file (void) { output_file_close (out_file_name); } -#endif /* The interface between the macro code and gas expression handling. */ @@ -1071,6 +1080,8 @@ create_obj_attrs_section (void) int main (int argc, char ** argv) { + char ** argv_orig = argv; + int macro_strip_at; int keep_it; @@ -1124,10 +1135,8 @@ main (int argc, char ** argv) input_scrub_begin (); expr_begin (); -#ifndef OBJ_VMS /* Does its own file handling. */ /* It has to be called after dump_statistics (). */ xatexit (close_output_file); -#endif if (flag_print_statistics) xatexit (dump_statistics); @@ -1142,7 +1151,7 @@ main (int argc, char ** argv) PROGRESS (1); output_file_create (out_file_name); - assert (stdoutput != 0); + gas_assert (stdoutput != 0); #ifdef tc_init_after_args tc_init_after_args (); @@ -1223,8 +1232,10 @@ main (int argc, char ** argv) if (keep_it) write_object_file (); + fflush (stderr); + #ifndef NO_LISTING - listing_print (listing_filename); + listing_print (listing_filename, argv_orig); #endif if (flag_fatal_warnings && had_warnings () > 0 && had_errors () == 0) diff --git a/gas/as.h b/gas/as.h index f6138eb..7366121 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, 2006, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -36,36 +36,7 @@ COMMON as "". If TEST is #defined, then we are testing a module: #define COMMON as "". */ -#include "config.h" - -/* This is the code recommended in the autoconf documentation, almost - verbatim. If it doesn't work for you, let me know, and notify - djm@gnu.ai.mit.edu as well. */ -/* Added void* version for STDC case. This is to be compatible with - the declaration in bison.simple, used for m68k operand parsing. - --KR 1995.08.08 */ -/* Force void* decl for hpux. This is what Bison uses. --KR 1995.08.16 */ - -#ifndef __GNUC__ -# if HAVE_ALLOCA_H -# include -# 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 "alloca-conf.h" /* Prefer varargs for non-ANSI compiler, since some will barf if the ellipsis definition is used with a no-arguments declaration. */ @@ -135,9 +106,9 @@ typedef int * va_list; #undef NDEBUG #endif #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 6) -#define __PRETTY_FUNCTION__ ((char*)0) +#define __PRETTY_FUNCTION__ ((char *) NULL) #endif -#define assert(P) \ +#define gas_assert(P) \ ((void) ((P) ? 0 : (as_assert (__FILE__, __LINE__, __PRETTY_FUNCTION__), 0))) #undef abort #define abort() as_abort (__FILE__, __LINE__, __PRETTY_FUNCTION__) @@ -171,8 +142,8 @@ extern int ffs (int); extern void free (); #endif #ifdef NEED_DECLARATION_MALLOC -extern PTR malloc (); -extern PTR realloc (); +extern void *malloc (); +extern void *realloc (); #endif #ifdef NEED_DECLARATION_STRSTR extern char *strstr (); @@ -264,7 +235,7 @@ typedef addressT valueT; #if ENABLE_CHECKING || defined (DEBUG) #ifndef know -#define know(p) assert(p) /* Verify our assumptions! */ +#define know(p) gas_assert(p) /* Verify our assumptions! */ #endif /* not yet defined */ #else #define know(p) /* know() checks are no-op.ed */ @@ -534,6 +505,8 @@ void as_bad_value_out_of_range (char *, offsetT, offsetT, offsetT, char *, uns void print_version_id (void); char * app_push (void); char * atof_ieee (char *, int, LITTLENUM_TYPE *); +char * ieee_md_atof (int, char *, int *, bfd_boolean); +char * vax_md_atof (int, char *, int *); char * input_scrub_include_file (char *, char *); void input_scrub_insert_line (const char *); void input_scrub_insert_file (char *); @@ -613,6 +586,10 @@ int generic_force_reloc (struct fix *); #endif #include "listing.h" +#ifdef H_TICK_HEX +extern int enable_h_tick_hex; +#endif + #ifdef TC_M68K /* True if we are assembling in m68k MRI mode. */ COMMON int flag_m68k_mri; diff --git a/gas/atof-generic.c b/gas/atof-generic.c index 6b5db35..40a9ff0 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, 2006, 2007 Free Software Foundation, Inc. + 2001, 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -101,7 +101,7 @@ atof_generic (/* return pointer to just AFTER number we read. */ int seen_significant_digit; #ifdef ASSUME_DECIMAL_MARK_IS_DOT - assert (string_of_decimal_marks[0] == '.' + gas_assert (string_of_decimal_marks[0] == '.' && string_of_decimal_marks[1] == 0); #define IS_DECIMAL_MARK(c) ((c) == '.') #else diff --git a/gas/bfin-lex.c b/gas/bfin-lex.c index 0490ade..f6d2f41 100644 --- a/gas/bfin-lex.c +++ b/gas/bfin-lex.c @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 33 +#define YY_FLEX_SUBMINOR_VERSION 35 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -30,7 +30,7 @@ /* C99 systems have . Non-C99 systems may or may not. */ -#if __STDC_VERSION__ >= 199901L +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. @@ -93,11 +93,12 @@ typedef unsigned int flex_uint32_t; #else /* ! __cplusplus */ -#if __STDC__ +/* C99 requires __STDC__ to be defined as 1. */ +#if defined (__STDC__) #define YY_USE_CONST -#endif /* __STDC__ */ +#endif /* defined (__STDC__) */ #endif /* ! __cplusplus */ #ifdef YY_USE_CONST @@ -151,7 +152,12 @@ typedef unsigned int flex_uint32_t; typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif -extern int yyleng; +#ifndef YY_TYPEDEF_YY_SIZE_T +#define YY_TYPEDEF_YY_SIZE_T +typedef size_t yy_size_t; +#endif + +extern yy_size_t yyleng; extern FILE *yyin, *yyout; @@ -177,16 +183,6 @@ extern FILE *yyin, *yyout; #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). - */ - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef unsigned int yy_size_t; -#endif - #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state @@ -204,7 +200,7 @@ struct yy_buffer_state /* Number of characters read into yy_ch_buf, not including EOB * characters. */ - int yy_n_chars; + yy_size_t yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to @@ -274,8 +270,8 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ /* 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; +static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ +yy_size_t yyleng; /* Points to current character in buffer. */ static char *yy_c_buf_p = (char *) 0; @@ -303,7 +299,7 @@ static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len ); +YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); void *yyalloc (yy_size_t ); void *yyrealloc (void *,yy_size_t ); @@ -363,8 +359,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 238 -#define YY_END_OF_BUFFER 239 +#define YY_NUM_RULES 237 +#define YY_END_OF_BUFFER 238 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -372,69 +368,69 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[559] = +static yyconst flex_int16_t yy_accept[555] = { 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 + 0, 0, 0, 0, 238, 236, 234, 234, 219, 232, + 218, 217, 199, 200, 215, 213, 210, 209, 202, 231, + 231, 201, 220, 198, 194, 236, 223, 232, 148, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 70, 232, + 232, 232, 54, 19, 18, 232, 12, 10, 8, 7, + 188, 187, 186, 232, 184, 182, 232, 232, 232, 232, + 232, 232, 216, 214, 212, 211, 0, 208, 203, 0, + 0, 0, 231, 233, 0, 197, 195, 221, 193, 192, + 177, 174, 232, 232, 232, 150, 151, 232, 232, 149, + 0, 147, 232, 140, 232, 232, 136, 232, 125, 232, + + 123, 232, 232, 232, 232, 232, 232, 232, 103, 102, + 101, 232, 100, 99, 232, 232, 97, 232, 95, 94, + 93, 91, 232, 85, 232, 232, 77, 86, 232, 71, + 69, 232, 232, 232, 232, 65, 232, 232, 232, 59, + 232, 56, 232, 232, 53, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 25, 232, 232, + 232, 232, 232, 15, 14, 232, 232, 158, 232, 185, + 232, 183, 222, 232, 232, 95, 232, 232, 232, 204, + 206, 205, 207, 0, 0, 231, 231, 196, 190, 191, + 232, 232, 170, 152, 153, 232, 232, 161, 162, 232, + + 154, 156, 231, 232, 232, 232, 232, 232, 232, 124, + 232, 232, 119, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 178, 98, 232, 232, 232, 232, 232, 232, + 80, 83, 78, 81, 232, 232, 232, 79, 82, 232, + 67, 66, 232, 63, 62, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 44, 39, 38, 37, 36, + 35, 34, 232, 32, 31, 232, 232, 232, 232, 232, + 232, 232, 21, 232, 232, 16, 13, 232, 9, 232, + 232, 232, 232, 232, 232, 232, 235, 189, 169, 167, + 176, 175, 168, 166, 173, 172, 232, 232, 232, 155, + + 157, 146, 232, 232, 232, 232, 139, 138, 232, 127, + 232, 232, 118, 232, 232, 232, 232, 111, 110, 232, + 232, 232, 232, 232, 232, 232, 105, 104, 232, 232, + 232, 96, 232, 92, 89, 84, 74, 232, 232, 68, + 64, 232, 61, 60, 58, 57, 232, 55, 45, 232, + 50, 47, 49, 46, 48, 232, 232, 43, 42, 232, + 232, 232, 232, 232, 27, 24, 23, 232, 232, 232, + 232, 232, 232, 227, 232, 226, 232, 232, 232, 232, + 159, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 122, 232, 117, 116, 232, 232, 232, 232, 232, + + 232, 232, 232, 108, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 2, 181, 52, 41, 40, 33, + 232, 232, 232, 30, 232, 22, 232, 232, 232, 171, + 230, 232, 232, 232, 232, 232, 163, 160, 145, 144, + 143, 142, 141, 232, 232, 232, 232, 126, 121, 232, + 232, 232, 232, 232, 51, 232, 232, 107, 232, 232, + 232, 232, 232, 88, 87, 90, 232, 232, 73, 72, + 29, 232, 232, 232, 20, 232, 232, 232, 228, 232, + 225, 164, 165, 232, 232, 232, 232, 232, 232, 120, + 232, 114, 113, 232, 232, 232, 5, 106, 232, 179, + + 232, 232, 232, 232, 28, 232, 232, 17, 11, 232, + 232, 232, 232, 135, 133, 134, 132, 129, 232, 115, + 232, 6, 109, 232, 232, 3, 232, 76, 1, 26, + 229, 224, 137, 130, 131, 232, 232, 232, 232, 232, + 128, 232, 232, 4, 75, 232, 232, 112, 232, 232, + 232, 232, 180, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -472,147 +468,145 @@ static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t 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, + 1, 1, 1, 1, 4, 1, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, + 1, 1, 6, 5, 6, 6, 6, 5, 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 + 3, 3, 3, 3, 3, 4, 3, 3, 1, 1, + 1, 3, 6, 5, 3, 3, 3, 1, 1 } ; -static yyconst flex_int16_t yy_base[565] = +static yyconst flex_int16_t yy_base[560] = { 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 + 0, 0, 32, 33, 758, 759, 759, 759, 759, 0, + 759, 727, 759, 759, 726, 60, 759, 61, 744, 63, + 68, 759, 759, 58, 75, 723, 759, 116, 176, 60, + 79, 44, 87, 89, 98, 165, 700, 226, 158, 47, + 113, 277, 327, 376, 108, 701, 58, 731, 0, 0, + 759, 759, 720, 685, 100, 759, 144, 72, 707, 65, + 118, 0, 759, 759, 759, 759, 143, 759, 759, 149, + 736, 189, 230, 759, 0, 716, 759, 759, 759, 91, + 730, 729, 692, 120, 701, 0, 0, 218, 154, 0, + 0, 726, 135, 0, 703, 49, 167, 695, 0, 697, + + 0, 680, 701, 696, 686, 93, 680, 234, 717, 685, + 0, 168, 0, 0, 170, 693, 714, 684, 0, 0, + 676, 0, 681, 710, 172, 210, 0, 176, 199, 212, + 709, 667, 676, 210, 235, 0, 224, 684, 173, 705, + 684, 0, 207, 672, 702, 675, 212, 679, 213, 263, + 222, 243, 258, 259, 214, 673, 674, 697, 654, 669, + 658, 657, 654, 0, 0, 658, 251, 0, 686, 759, + 135, 759, 759, 651, 659, 658, 655, 270, 656, 759, + 759, 759, 759, 688, 304, 311, 0, 759, 759, 668, + 298, 312, 0, 0, 0, 658, 655, 0, 0, 278, + + 644, 643, 0, 273, 320, 639, 309, 655, 647, 0, + 644, 645, 343, 292, 325, 275, 326, 333, 336, 320, + 340, 653, 669, 0, 327, 345, 649, 666, 636, 357, + 0, 0, 0, 0, 635, 348, 641, 0, 0, 358, + 0, 0, 633, 0, 0, 644, 628, 643, 363, 634, + 628, 352, 378, 624, 384, 413, 0, 0, 0, 0, + 0, 0, 628, 0, 0, 360, 622, 370, 634, 625, + 394, 624, 0, 634, 356, 0, 0, 606, 0, 601, + 615, 628, 611, 620, 624, 620, 649, 759, 0, 0, + 0, 0, 0, 0, 0, 0, 613, 620, 377, 0, + + 0, 0, 613, 603, 618, 398, 0, 603, 398, 638, + 617, 614, 408, 605, 408, 598, 604, 0, 0, 414, + 417, 591, 593, 402, 609, 422, 0, 0, 608, 619, + 406, 0, 580, 0, 626, 0, 578, 586, 600, 0, + 0, 600, 0, 0, 0, 0, 601, 0, 0, 598, + 0, 0, 0, 0, 0, 615, 616, 0, 0, 596, + 596, 406, 593, 407, 426, 0, 0, 594, 590, 576, + 581, 558, 584, 561, 571, 0, 584, 574, 443, 412, + 0, 415, 563, 415, 574, 424, 577, 568, 433, 569, + 558, 0, 562, 0, 0, 564, 567, 569, 570, 555, + + 426, 572, 555, 0, 563, 569, 566, 557, 566, 420, + 443, 455, 552, 431, 0, 0, 0, 0, 0, 0, + 559, 442, 547, 0, 556, 0, 557, 558, 451, 0, + 553, 553, 436, 549, 568, 569, 0, 0, 0, 0, + 0, 0, 0, 548, 482, 553, 539, 0, 567, 541, + 443, 445, 538, 532, 0, 534, 544, 0, 454, 529, + 558, 471, 541, 0, 0, 0, 540, 530, 0, 0, + 0, 455, 538, 456, 0, 457, 518, 527, 0, 537, + 0, 0, 0, 533, 150, 468, 522, 526, 478, 0, + 512, 0, 0, 530, 529, 463, 0, 0, 530, 0, + + 511, 514, 523, 525, 0, 465, 501, 0, 0, 489, + 500, 466, 480, 0, 0, 0, 0, 0, 504, 0, + 481, 0, 0, 474, 484, 0, 490, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 370, 352, 345, 279, + 0, 219, 473, 0, 0, 475, 477, 0, 220, 207, + 134, 61, 0, 759, 542, 545, 550, 552, 554 } ; -static yyconst flex_int16_t yy_def[565] = +static yyconst flex_int16_t yy_def[560] = { 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 + 554, 1, 1, 1, 554, 554, 554, 554, 554, 555, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 556, + 556, 554, 554, 554, 554, 554, 554, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 554, 554, 554, 28, 554, 554, 555, 36, 38, 42, + 555, 555, 554, 554, 554, 554, 554, 554, 554, 554, + 557, 554, 554, 554, 558, 554, 554, 554, 554, 554, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 559, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 554, + 555, 554, 554, 555, 555, 555, 555, 555, 555, 554, + 554, 554, 554, 557, 557, 554, 558, 554, 554, 554, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 559, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 557, 554, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, + 555, 555, 555, 0, 554, 554, 554, 554, 554 } ; -static yyconst flex_int16_t yy_nxt[885] = +static yyconst flex_int16_t yy_nxt[829] = { 0, 6, 7, 8, 9, 6, 10, 11, 12, 13, 14, 15, 16, 17, 18, 10, 19, 20, 21, 21, 21, @@ -621,99 +615,93 @@ static yyconst flex_int16_t yy_nxt[885] = 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 + 57, 65, 58, 58, 68, 59, 59, 72, 78, 60, + 60, 553, 554, 91, 61, 61, 76, 77, 107, 66, + 69, 91, 98, 135, 99, 207, 74, 136, 167, 108, + + 74, 74, 91, 100, 79, 74, 101, 175, 168, 176, + 102, 135, 104, 207, 178, 105, 103, 91, 75, 106, + 189, 190, 98, 554, 101, 111, 74, 67, 70, 172, + 178, 74, 81, 82, 109, 112, 194, 195, 114, 110, + 113, 115, 104, 215, 162, 163, 216, 164, 91, 83, + 84, 165, 116, 112, 180, 113, 181, 137, 138, 85, + 182, 86, 183, 179, 87, 139, 88, 173, 166, 89, + 201, 202, 513, 90, 131, 131, 131, 131, 552, 83, + 91, 117, 117, 117, 117, 193, 205, 174, 231, 232, + 132, 109, 92, 92, 92, 92, 110, 514, 133, 280, + + 118, 205, 119, 134, 120, 186, 186, 186, 186, 186, + 186, 186, 186, 186, 186, 121, 93, 122, 208, 223, + 132, 224, 235, 94, 248, 95, 233, 234, 238, 239, + 551, 96, 97, 208, 223, 236, 224, 550, 237, 248, + 235, 95, 124, 124, 124, 124, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 243, 197, 251, 125, + 126, 198, 127, 255, 257, 268, 546, 199, 218, 200, + 246, 263, 128, 251, 243, 264, 129, 130, 255, 257, + 268, 219, 244, 199, 200, 220, 245, 263, 246, 125, + 128, 266, 130, 140, 140, 140, 140, 140, 140, 258, + + 220, 245, 278, 259, 265, 264, 285, 267, 260, 141, + 299, 142, 302, 261, 185, 252, 302, 278, 262, 287, + 143, 266, 265, 318, 545, 319, 144, 186, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 289, 316, 141, + 299, 290, 144, 145, 145, 145, 145, 145, 145, 145, + 145, 293, 291, 292, 303, 294, 316, 317, 308, 146, + 320, 321, 322, 147, 304, 323, 295, 296, 325, 326, + 305, 306, 148, 149, 308, 313, 331, 314, 150, 327, + 324, 544, 315, 328, 332, 326, 306, 317, 332, 146, + 543, 149, 331, 150, 151, 323, 336, 340, 325, 338, + + 336, 340, 345, 348, 542, 313, 345, 370, 152, 361, + 153, 349, 154, 155, 338, 156, 157, 349, 348, 363, + 351, 349, 370, 158, 352, 361, 159, 160, 381, 353, + 356, 357, 161, 366, 354, 363, 385, 367, 152, 355, + 397, 349, 160, 381, 388, 389, 400, 394, 386, 401, + 390, 395, 358, 404, 406, 409, 359, 422, 424, 425, + 435, 436, 388, 438, 439, 446, 441, 437, 404, 463, + 397, 409, 422, 424, 472, 443, 400, 455, 438, 401, + 439, 441, 470, 477, 406, 463, 464, 480, 467, 425, + 443, 468, 455, 465, 492, 446, 493, 470, 466, 485, + + 486, 487, 480, 501, 472, 498, 505, 507, 508, 492, + 519, 493, 515, 477, 523, 516, 529, 533, 467, 547, + 498, 505, 507, 508, 534, 541, 548, 535, 549, 523, + 540, 529, 533, 501, 539, 538, 537, 547, 536, 532, + 519, 548, 531, 549, 62, 62, 62, 62, 73, 73, + 184, 530, 184, 184, 184, 184, 187, 187, 203, 203, + 528, 527, 526, 525, 524, 522, 521, 520, 518, 517, + 512, 511, 510, 509, 506, 504, 503, 502, 500, 499, + 497, 496, 495, 494, 491, 490, 489, 488, 484, 483, + 482, 481, 479, 478, 476, 475, 474, 473, 471, 469, + + 462, 461, 460, 459, 458, 457, 456, 454, 453, 452, + 451, 450, 449, 448, 447, 445, 444, 442, 440, 434, + 433, 432, 410, 431, 430, 429, 428, 427, 426, 423, + 421, 420, 419, 418, 417, 416, 415, 414, 413, 412, + 411, 410, 408, 407, 405, 403, 402, 399, 398, 396, + 393, 392, 391, 387, 384, 383, 382, 380, 379, 185, + 378, 377, 376, 375, 374, 373, 372, 371, 369, 368, + 365, 364, 362, 360, 350, 347, 346, 344, 343, 342, + 341, 339, 337, 335, 334, 333, 330, 329, 312, 311, + 310, 309, 307, 301, 300, 298, 297, 288, 185, 286, + + 284, 283, 282, 281, 279, 277, 276, 275, 274, 273, + 272, 271, 270, 269, 256, 254, 253, 252, 250, 249, + 247, 242, 241, 240, 230, 229, 228, 227, 226, 225, + 222, 221, 217, 214, 213, 212, 211, 210, 209, 206, + 204, 196, 193, 192, 191, 188, 185, 177, 171, 170, + 169, 166, 123, 80, 71, 64, 63, 554, 5, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554 } ; -static yyconst flex_int16_t yy_chk[885] = +static yyconst flex_int16_t yy_chk[829] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -722,96 +710,90 @@ static yyconst flex_int16_t yy_chk[885] = 1, 1, 1, 1, 1, 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 + 4, 16, 3, 4, 18, 3, 4, 20, 25, 3, + 4, 552, 21, 31, 3, 4, 24, 24, 32, 16, + 18, 33, 30, 40, 30, 96, 20, 40, 47, 32, + + 20, 21, 35, 30, 25, 21, 30, 58, 47, 58, + 30, 40, 31, 96, 60, 31, 30, 41, 20, 31, + 80, 80, 30, 21, 30, 34, 20, 16, 18, 55, + 60, 21, 28, 28, 33, 34, 84, 84, 35, 33, + 34, 35, 31, 106, 45, 45, 106, 45, 57, 28, + 28, 45, 35, 34, 67, 34, 67, 41, 41, 28, + 70, 28, 70, 61, 28, 41, 28, 55, 61, 28, + 89, 89, 485, 28, 39, 39, 39, 39, 551, 28, + 29, 36, 36, 36, 36, 171, 93, 57, 125, 125, + 39, 57, 29, 29, 29, 29, 57, 485, 39, 171, + + 36, 93, 36, 39, 36, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 36, 29, 36, 97, 112, + 39, 115, 128, 29, 139, 29, 126, 126, 130, 130, + 550, 29, 29, 97, 112, 129, 115, 549, 129, 139, + 128, 29, 38, 38, 38, 38, 73, 73, 73, 73, + 73, 73, 73, 73, 73, 73, 134, 88, 143, 38, + 38, 88, 38, 147, 149, 155, 542, 88, 108, 88, + 137, 151, 38, 143, 134, 152, 38, 38, 147, 149, + 155, 108, 135, 88, 88, 108, 135, 151, 137, 38, + 38, 154, 38, 42, 42, 42, 42, 42, 42, 150, + + 108, 135, 167, 150, 153, 152, 178, 154, 150, 42, + 200, 42, 204, 150, 185, 178, 204, 167, 150, 185, + 42, 154, 153, 216, 540, 216, 42, 186, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 191, 214, 42, + 200, 191, 42, 43, 43, 43, 43, 43, 43, 43, + 43, 192, 191, 191, 205, 192, 214, 215, 207, 43, + 217, 217, 217, 43, 205, 218, 192, 192, 219, 220, + 205, 205, 43, 43, 207, 213, 225, 213, 43, 221, + 218, 539, 213, 221, 226, 220, 205, 215, 226, 43, + 538, 43, 225, 43, 44, 218, 230, 240, 219, 236, + + 230, 240, 249, 252, 537, 213, 249, 275, 44, 266, + 44, 253, 44, 44, 236, 44, 44, 253, 252, 268, + 255, 253, 275, 44, 255, 266, 44, 44, 299, 255, + 256, 256, 44, 271, 255, 268, 306, 271, 44, 255, + 315, 253, 44, 299, 309, 309, 320, 313, 306, 321, + 309, 313, 256, 324, 326, 331, 256, 362, 364, 365, + 379, 379, 309, 380, 382, 389, 384, 379, 324, 410, + 315, 331, 362, 364, 422, 386, 320, 401, 380, 321, + 382, 384, 414, 429, 326, 410, 411, 433, 412, 365, + 386, 412, 401, 411, 451, 389, 452, 414, 411, 445, + + 445, 445, 433, 462, 422, 459, 472, 474, 476, 451, + 489, 452, 486, 429, 496, 486, 506, 512, 412, 543, + 459, 472, 474, 476, 513, 536, 546, 513, 547, 496, + 527, 506, 512, 462, 525, 524, 521, 543, 519, 511, + 489, 546, 510, 547, 555, 555, 555, 555, 556, 556, + 557, 507, 557, 557, 557, 557, 558, 558, 559, 559, + 504, 503, 502, 501, 499, 495, 494, 491, 488, 487, + 484, 480, 478, 477, 473, 468, 467, 463, 461, 460, + 457, 456, 454, 453, 450, 449, 447, 446, 444, 436, + 435, 434, 432, 431, 428, 427, 425, 423, 421, 413, + + 409, 408, 407, 406, 405, 403, 402, 400, 399, 398, + 397, 396, 393, 391, 390, 388, 387, 385, 383, 378, + 377, 375, 374, 373, 372, 371, 370, 369, 368, 363, + 361, 360, 357, 356, 350, 347, 342, 339, 338, 337, + 335, 333, 330, 329, 325, 323, 322, 317, 316, 314, + 312, 311, 310, 308, 305, 304, 303, 298, 297, 287, + 286, 285, 284, 283, 282, 281, 280, 278, 274, 272, + 270, 269, 267, 263, 254, 251, 250, 248, 247, 246, + 243, 237, 235, 229, 228, 227, 223, 222, 212, 211, + 209, 208, 206, 202, 201, 197, 196, 190, 184, 179, + + 177, 176, 175, 174, 169, 166, 163, 162, 161, 160, + 159, 158, 157, 156, 148, 146, 145, 144, 141, 140, + 138, 133, 132, 131, 124, 123, 121, 118, 117, 116, + 110, 109, 107, 105, 104, 103, 102, 100, 98, 95, + 92, 85, 83, 82, 81, 76, 71, 59, 54, 53, + 48, 46, 37, 26, 19, 15, 12, 5, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, + 554, 554, 554, 554, 554, 554, 554, 554 } ; static yy_state_type yy_last_accepting_state; @@ -830,7 +812,7 @@ int yy_flex_debug = 0; char *yytext; #line 1 "bfin-lex.l" /* bfin-lex.l ADI Blackfin lexer - Copyright 2005, 2006, 2007 + Copyright 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -868,7 +850,7 @@ int yylex (void); and would match some keyword rules only with initial. */ -#line 872 "bfin-lex.c" +#line 854 "bfin-lex.c" #define INITIAL 0 #define KEYWORD 1 @@ -887,6 +869,35 @@ int yylex (void); static int yy_init_globals (void ); +/* Accessor methods to globals. + These are made visible to non-reentrant scanners for convenience. */ + +int yylex_destroy (void ); + +int yyget_debug (void ); + +void yyset_debug (int debug_flag ); + +YY_EXTRA_TYPE yyget_extra (void ); + +void yyset_extra (YY_EXTRA_TYPE user_defined ); + +FILE *yyget_in (void ); + +void yyset_in (FILE * in_str ); + +FILE *yyget_out (void ); + +void yyset_out (FILE * out_str ); + +yy_size_t yyget_leng (void ); + +char *yyget_text (void ); + +int yyget_lineno (void ); + +void yyset_lineno (int line_number ); + /* Macros after this point can all be overridden by user definitions in * section 1. */ @@ -929,7 +940,7 @@ static int input (void ); /* 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 ) +#define ECHO fwrite( yytext, yyleng, 1, yyout ) #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, @@ -940,7 +951,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - size_t n; \ + yy_size_t n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ @@ -1024,7 +1035,7 @@ YY_DECL #line 43 "bfin-lex.l" -#line 1028 "bfin-lex.c" +#line 1039 "bfin-lex.c" if ( !(yy_init) ) { @@ -1077,13 +1088,13 @@ yy_match: 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 ) + if ( yy_current_state >= 555 ) 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 ); + while ( yy_base[yy_current_state] != 759 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -1220,12 +1231,12 @@ return SSYNC; case 23: YY_RULE_SETUP #line 66 "bfin-lex.l" -_REG.regno = REG_SP; return HALF_REG; +_REG.regno = REG_SP; _REG.flags = F_REG_LOW; return HALF_REG; YY_BREAK case 24: YY_RULE_SETUP #line 67 "bfin-lex.l" -_REG.regno = REG_SP | F_REG_HIGH; return HALF_REG; +_REG.regno = REG_SP; _REG.flags = F_REG_HIGH; return HALF_REG; YY_BREAK case 25: YY_RULE_SETUP @@ -1625,12 +1636,12 @@ _REG.regno = REG_FP; return REG; case 104: YY_RULE_SETUP #line 161 "bfin-lex.l" -_REG.regno = REG_FP; return HALF_REG; +_REG.regno = REG_FP; _REG.flags = F_REG_LOW; return HALF_REG; YY_BREAK case 105: YY_RULE_SETUP #line 162 "bfin-lex.l" -_REG.regno = REG_FP | F_REG_HIGH; return HALF_REG; +_REG.regno = REG_FP; _REG.flags = F_REG_HIGH; return HALF_REG; YY_BREAK case 106: YY_RULE_SETUP @@ -1895,393 +1906,388 @@ _REG.regno = S_AV1S; return STATUS_REG; case 158: YY_RULE_SETUP #line 218 "bfin-lex.l" -_REG.regno = S_V; return STATUS_REG; +_REG.regno = S_VS; return STATUS_REG; YY_BREAK case 159: YY_RULE_SETUP -#line 219 "bfin-lex.l" -_REG.regno = S_VS; return STATUS_REG; +#line 221 "bfin-lex.l" +_REG.regno = REG_ASTAT; return REG; YY_BREAK case 160: YY_RULE_SETUP #line 222 "bfin-lex.l" -_REG.regno = REG_ASTAT; return REG; +return ASHIFT; YY_BREAK case 161: YY_RULE_SETUP #line 223 "bfin-lex.l" -return ASHIFT; +return ASL; YY_BREAK case 162: YY_RULE_SETUP #line 224 "bfin-lex.l" -return ASL; +return ASR; YY_BREAK case 163: YY_RULE_SETUP #line 225 "bfin-lex.l" -return ASR; +return ALIGN8; YY_BREAK case 164: YY_RULE_SETUP #line 226 "bfin-lex.l" -return ALIGN8; +return ALIGN16; YY_BREAK case 165: YY_RULE_SETUP #line 227 "bfin-lex.l" -return ALIGN16; +return ALIGN24; YY_BREAK case 166: YY_RULE_SETUP #line 228 "bfin-lex.l" -return ALIGN24; +return A_ONE_DOT_L; YY_BREAK case 167: YY_RULE_SETUP #line 229 "bfin-lex.l" -return A_ONE_DOT_L; +return A_ZERO_DOT_L; YY_BREAK case 168: YY_RULE_SETUP #line 230 "bfin-lex.l" -return A_ZERO_DOT_L; +return A_ONE_DOT_H; YY_BREAK case 169: YY_RULE_SETUP #line 231 "bfin-lex.l" -return A_ONE_DOT_H; +return A_ZERO_DOT_H; YY_BREAK case 170: YY_RULE_SETUP #line 232 "bfin-lex.l" -return A_ZERO_DOT_H; +return ABS; YY_BREAK case 171: YY_RULE_SETUP #line 233 "bfin-lex.l" -return ABS; +return ABORT; YY_BREAK case 172: YY_RULE_SETUP #line 234 "bfin-lex.l" -return ABORT; +_REG.regno = REG_A1x; return REG; YY_BREAK case 173: YY_RULE_SETUP #line 235 "bfin-lex.l" -_REG.regno = REG_A1x; return REG; +_REG.regno = REG_A1w; return REG; YY_BREAK case 174: YY_RULE_SETUP #line 236 "bfin-lex.l" -_REG.regno = REG_A1w; return REG; +_REG.regno = REG_A1; return REG_A_DOUBLE_ONE; YY_BREAK case 175: YY_RULE_SETUP #line 237 "bfin-lex.l" -_REG.regno = REG_A1; return REG_A_DOUBLE_ONE; +_REG.regno = REG_A0x; return REG; YY_BREAK case 176: YY_RULE_SETUP #line 238 "bfin-lex.l" -_REG.regno = REG_A0x; return REG; +_REG.regno = REG_A0w; return REG; YY_BREAK case 177: YY_RULE_SETUP #line 239 "bfin-lex.l" -_REG.regno = REG_A0w; return REG; +_REG.regno = REG_A0; return REG_A_DOUBLE_ZERO; YY_BREAK case 178: YY_RULE_SETUP #line 240 "bfin-lex.l" -_REG.regno = REG_A0; return REG_A_DOUBLE_ZERO; +return GOT; YY_BREAK case 179: YY_RULE_SETUP #line 241 "bfin-lex.l" -return GOT; +return GOT17M4; YY_BREAK case 180: YY_RULE_SETUP #line 242 "bfin-lex.l" -return GOT17M4; +return FUNCDESC_GOT17M4; YY_BREAK case 181: YY_RULE_SETUP #line 243 "bfin-lex.l" -return FUNCDESC_GOT17M4; +return PLTPC; YY_BREAK case 182: YY_RULE_SETUP -#line 244 "bfin-lex.l" -return PLTPC; +#line 246 "bfin-lex.l" +return TILDA; YY_BREAK case 183: YY_RULE_SETUP #line 247 "bfin-lex.l" -return TILDA; +return _BAR_ASSIGN; YY_BREAK case 184: YY_RULE_SETUP #line 248 "bfin-lex.l" -return _BAR_ASSIGN; +return BAR; YY_BREAK case 185: YY_RULE_SETUP #line 249 "bfin-lex.l" -return BAR; +return _CARET_ASSIGN; YY_BREAK case 186: YY_RULE_SETUP #line 250 "bfin-lex.l" -return _CARET_ASSIGN; +return CARET; YY_BREAK case 187: YY_RULE_SETUP #line 251 "bfin-lex.l" -return CARET; +return RBRACK; YY_BREAK case 188: YY_RULE_SETUP #line 252 "bfin-lex.l" -return RBRACK; +return LBRACK; YY_BREAK case 189: YY_RULE_SETUP #line 253 "bfin-lex.l" -return LBRACK; +return _GREATER_GREATER_GREATER_THAN_ASSIGN; YY_BREAK case 190: YY_RULE_SETUP #line 254 "bfin-lex.l" -return _GREATER_GREATER_GREATER_THAN_ASSIGN; +return _GREATER_GREATER_ASSIGN; YY_BREAK case 191: YY_RULE_SETUP #line 255 "bfin-lex.l" -return _GREATER_GREATER_ASSIGN; +return _GREATER_GREATER_GREATER; YY_BREAK case 192: YY_RULE_SETUP #line 256 "bfin-lex.l" -return _GREATER_GREATER_GREATER; +return GREATER_GREATER; YY_BREAK case 193: YY_RULE_SETUP #line 257 "bfin-lex.l" -return GREATER_GREATER; +return _ASSIGN_ASSIGN; YY_BREAK case 194: YY_RULE_SETUP #line 258 "bfin-lex.l" -return _ASSIGN_ASSIGN; +return ASSIGN; YY_BREAK case 195: YY_RULE_SETUP #line 259 "bfin-lex.l" -return ASSIGN; +return _LESS_THAN_ASSIGN; YY_BREAK case 196: YY_RULE_SETUP #line 260 "bfin-lex.l" -return _LESS_THAN_ASSIGN; +return _LESS_LESS_ASSIGN; YY_BREAK case 197: YY_RULE_SETUP #line 261 "bfin-lex.l" -return _LESS_LESS_ASSIGN; +return LESS_LESS; YY_BREAK case 198: YY_RULE_SETUP #line 262 "bfin-lex.l" -return LESS_LESS; +return LESS_THAN; YY_BREAK case 199: YY_RULE_SETUP #line 263 "bfin-lex.l" -return LESS_THAN; +return LPAREN; YY_BREAK case 200: YY_RULE_SETUP #line 264 "bfin-lex.l" -return LPAREN; +return RPAREN; YY_BREAK case 201: YY_RULE_SETUP #line 265 "bfin-lex.l" -return RPAREN; +return COLON; YY_BREAK case 202: YY_RULE_SETUP #line 266 "bfin-lex.l" -return COLON; +return SLASH; YY_BREAK case 203: YY_RULE_SETUP #line 267 "bfin-lex.l" -return SLASH; +return _MINUS_ASSIGN; YY_BREAK case 204: YY_RULE_SETUP #line 268 "bfin-lex.l" -return _MINUS_ASSIGN; +return _PLUS_BAR_PLUS; YY_BREAK case 205: YY_RULE_SETUP #line 269 "bfin-lex.l" -return _PLUS_BAR_PLUS; +return _MINUS_BAR_PLUS; YY_BREAK case 206: YY_RULE_SETUP #line 270 "bfin-lex.l" -return _MINUS_BAR_PLUS; +return _PLUS_BAR_MINUS; YY_BREAK case 207: YY_RULE_SETUP #line 271 "bfin-lex.l" -return _PLUS_BAR_MINUS; +return _MINUS_BAR_MINUS; YY_BREAK case 208: YY_RULE_SETUP #line 272 "bfin-lex.l" -return _MINUS_BAR_MINUS; +return _MINUS_MINUS; YY_BREAK case 209: YY_RULE_SETUP #line 273 "bfin-lex.l" -return _MINUS_MINUS; +return MINUS; YY_BREAK case 210: YY_RULE_SETUP #line 274 "bfin-lex.l" -return MINUS; +return COMMA; YY_BREAK case 211: YY_RULE_SETUP #line 275 "bfin-lex.l" -return COMMA; +return _PLUS_ASSIGN; YY_BREAK case 212: YY_RULE_SETUP #line 276 "bfin-lex.l" -return _PLUS_ASSIGN; +return _PLUS_PLUS; YY_BREAK case 213: YY_RULE_SETUP #line 277 "bfin-lex.l" -return _PLUS_PLUS; +return PLUS; YY_BREAK case 214: YY_RULE_SETUP #line 278 "bfin-lex.l" -return PLUS; +return _STAR_ASSIGN; YY_BREAK case 215: YY_RULE_SETUP #line 279 "bfin-lex.l" -return _STAR_ASSIGN; +return STAR; YY_BREAK case 216: YY_RULE_SETUP #line 280 "bfin-lex.l" -return STAR; +return _AMPERSAND_ASSIGN; YY_BREAK case 217: YY_RULE_SETUP #line 281 "bfin-lex.l" -return _AMPERSAND_ASSIGN; +return AMPERSAND; YY_BREAK case 218: YY_RULE_SETUP #line 282 "bfin-lex.l" -return AMPERSAND; +return PERCENT; YY_BREAK case 219: YY_RULE_SETUP #line 283 "bfin-lex.l" -return PERCENT; +return BANG; YY_BREAK case 220: YY_RULE_SETUP #line 284 "bfin-lex.l" -return BANG; +return SEMICOLON; YY_BREAK case 221: YY_RULE_SETUP #line 285 "bfin-lex.l" -return SEMICOLON; +return _ASSIGN_BANG; YY_BREAK case 222: YY_RULE_SETUP #line 286 "bfin-lex.l" -return _ASSIGN_BANG; +return DOUBLE_BAR; YY_BREAK case 223: YY_RULE_SETUP #line 287 "bfin-lex.l" -return DOUBLE_BAR; +return AT; YY_BREAK case 224: YY_RULE_SETUP #line 288 "bfin-lex.l" -return AT; +return PREFETCH; YY_BREAK case 225: YY_RULE_SETUP #line 289 "bfin-lex.l" -return PREFETCH; +return UNLINK; YY_BREAK case 226: YY_RULE_SETUP #line 290 "bfin-lex.l" -return UNLINK; +return LINK; YY_BREAK case 227: YY_RULE_SETUP #line 291 "bfin-lex.l" -return LINK; +return IDLE; YY_BREAK case 228: YY_RULE_SETUP #line 292 "bfin-lex.l" -return IDLE; +return IFLUSH; YY_BREAK case 229: YY_RULE_SETUP #line 293 "bfin-lex.l" -return IFLUSH; +return FLUSHINV; YY_BREAK case 230: YY_RULE_SETUP #line 294 "bfin-lex.l" -return FLUSHINV; +return FLUSH; YY_BREAK case 231: YY_RULE_SETUP #line 295 "bfin-lex.l" -return FLUSH; - YY_BREAK -case 232: -YY_RULE_SETUP -#line 296 "bfin-lex.l" { yylval.value = parse_int (&yytext); return NUMBER; } YY_BREAK -case 233: +case 232: YY_RULE_SETUP -#line 300 "bfin-lex.l" +#line 299 "bfin-lex.l" { yylval.symbol = symbol_find_or_make (yytext); symbol_mark_used (yylval.symbol); return SYMBOL; } YY_BREAK -case 234: +case 233: YY_RULE_SETUP -#line 305 "bfin-lex.l" +#line 304 "bfin-lex.l" { char *name; char *ref = strdup (yytext); @@ -2312,8 +2318,13 @@ YY_RULE_SETUP } } YY_BREAK +case 234: +/* rule 234 can match eol */ +YY_RULE_SETUP +#line 333 "bfin-lex.l" +; + YY_BREAK case 235: -/* rule 235 can match eol */ YY_RULE_SETUP #line 334 "bfin-lex.l" ; @@ -2321,19 +2332,14 @@ YY_RULE_SETUP case 236: YY_RULE_SETUP #line 335 "bfin-lex.l" -; +return yytext[0]; YY_BREAK case 237: YY_RULE_SETUP #line 336 "bfin-lex.l" -return yytext[0]; - YY_BREAK -case 238: -YY_RULE_SETUP -#line 337 "bfin-lex.l" ECHO; YY_BREAK -#line 2337 "bfin-lex.c" +#line 2343 "bfin-lex.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(KEYWORD): yyterminate(); @@ -2520,7 +2526,7 @@ static int yy_get_next_buffer (void) else { - int num_to_read = + yy_size_t num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) @@ -2534,7 +2540,7 @@ static int yy_get_next_buffer (void) if ( b->yy_is_our_buffer ) { - int new_size = b->yy_buf_size * 2; + yy_size_t new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; @@ -2565,7 +2571,7 @@ static int yy_get_next_buffer (void) /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), (size_t) num_to_read ); + (yy_n_chars), num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); } @@ -2589,6 +2595,14 @@ static int yy_get_next_buffer (void) else ret_val = EOB_ACT_CONTINUE_SCAN; + if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { + /* Extend the array by 50%, plus the number we really need. */ + yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); + if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) + YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + } + (yy_n_chars) += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; @@ -2618,7 +2632,7 @@ static int yy_get_next_buffer (void) 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 ) + if ( yy_current_state >= 555 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -2646,11 +2660,11 @@ static int yy_get_next_buffer (void) 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 ) + if ( yy_current_state >= 555 ) 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); + yy_is_jam = (yy_current_state == 554); return yy_is_jam ? 0 : yy_current_state; } @@ -2667,7 +2681,7 @@ static int yy_get_next_buffer (void) if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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 yy_size_t number_to_move = (yy_n_chars) + 2; register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; register char *source = @@ -2716,7 +2730,7 @@ static int yy_get_next_buffer (void) else { /* need more input */ - int offset = (yy_c_buf_p) - (yytext_ptr); + yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); ++(yy_c_buf_p); switch ( yy_get_next_buffer( ) ) @@ -2740,7 +2754,7 @@ static int yy_get_next_buffer (void) case EOB_ACT_END_OF_FILE: { if ( yywrap( ) ) - return EOF; + return 0; if ( ! (yy_did_buffer_switch_on_eof) ) YY_NEW_FILE; @@ -2992,7 +3006,7 @@ void yypop_buffer_state (void) */ static void yyensure_buffer_stack (void) { - int num_to_alloc; + yy_size_t num_to_alloc; if (!(yy_buffer_stack)) { @@ -3004,7 +3018,9 @@ static void yyensure_buffer_stack (void) (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) ); - + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); (yy_buffer_stack_max) = num_to_alloc; @@ -3022,6 +3038,8 @@ static void yyensure_buffer_stack (void) ((yy_buffer_stack), num_to_alloc * sizeof(struct yy_buffer_state*) ); + if ( ! (yy_buffer_stack) ) + YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); @@ -3085,12 +3103,11 @@ YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) * * @return the newly allocated buffer state object. */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, int _yybytes_len ) +YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) { YY_BUFFER_STATE b; char *buf; - yy_size_t n; - int i; + yy_size_t n, i; /* Get memory for full buffer, including space for trailing EOB's. */ n = _yybytes_len + 2; @@ -3172,7 +3189,7 @@ FILE *yyget_out (void) /** Get the length of the current token. * */ -int yyget_leng (void) +yy_size_t yyget_leng (void) { return yyleng; } @@ -3320,7 +3337,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 337 "bfin-lex.l" +#line 336 "bfin-lex.l" static long parse_int (char **end) @@ -3497,6 +3514,7 @@ static long parse_int (char **end) static int parse_reg (Register *r, int cl, char *rt) { r->regno = cl | (rt[1] - '0'); + r->flags = F_REG_NONE; return REG; } @@ -3512,11 +3530,12 @@ static int parse_halfreg (Register *r, int cl, char *rt) case 'l': case 'L': + r->flags = F_REG_LOW; break; case 'h': case 'H': - r->regno |= F_REG_HIGH; + r->flags = F_REG_HIGH; break; } diff --git a/gas/bfin-parse.c b/gas/bfin-parse.c index 5305e07..c9ccad5 100644 --- a/gas/bfin-parse.c +++ b/gas/bfin-parse.c @@ -424,7 +424,7 @@ #include "as.h" #include -#include "bfin-aux.h" // opcode generating auxiliaries +#include "bfin-aux.h" /* Opcode generating auxiliaries. */ #include "libbfd.h" #include "elf/common.h" #include "elf/bfin.h" @@ -570,13 +570,13 @@ int yyerror (char *msg); void error (char *format, ...) { va_list ap; - char buffer[2000]; + static char buffer[2000]; va_start (ap, format); vsprintf (buffer, format, ap); va_end (ap); - as_bad (buffer); + as_bad ("%s", buffer); } int @@ -623,12 +623,6 @@ extern int yylex (void); /* 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) { @@ -665,6 +659,29 @@ check_multiply_halfregs (Macfunc *aa, Macfunc *ab) } +/* Check mac option. */ + +static int +check_macfunc_option (Macfunc *a, Opt_mode *opt) +{ + /* Default option is always valid. */ + if (opt->mod == 0) + return 0; + + if ((a->w == 1 && a->P == 1 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU + && opt->mod != M_S2RND && opt->mod != M_ISS2) + || (a->w == 1 && a->P == 0 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU + && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND + && opt->mod != M_ISS2 && opt->mod != M_IH) + || (a->w == 0 && a->P == 0 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32)) + return -1; + + return 0; +} + /* Check (vector) mac funcs and ops. */ static int @@ -675,6 +692,11 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, Macfunc mtmp; Opt_mode otmp; + /* The option mode should be put at the end of the second instruction + of the vector except M, which should follow MAC1 instruction. */ + if (opa->mod != 0) + return yyerror ("Bad opt mode"); + /* If a0macfunc comes before a1macfunc, swap them. */ if (aa->n == 0) @@ -692,16 +714,14 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, { 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 one of 0, 1, or 2, we have multiply_halfregs in both assignment_or_macfuncs. */ - if (aa->op < 3 && aa->op >=0 - && ab->op < 3 && ab->op >= 0) + if ((aa->op == 0 || aa->op == 1 || aa->op == 2) + && (ab->op == 0 || ab->op == 1 || ab->op == 2)) { if (check_multiply_halfregs (aa, ab) < 0) return -1; @@ -722,20 +742,18 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, 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 mod flags get ORed, too. */ + opb->mod |= opa->mod; + + /* Check option. */ + if (check_macfunc_option (aa, opb) < 0 + && check_macfunc_option (ab, opb) < 0) + return yyerror ("bad option"); /* 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; } @@ -762,6 +780,29 @@ is_group2 (INSTR_T x) return 0; } +static INSTR_T +gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2) +{ + int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0; + int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0; + int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0; + + if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3)) + yyerror ("resource conflict in multi-issue instruction"); + + /* Anomaly 05000074 */ + if (ENABLE_AC_05000074 + && dsp32 != NULL && dsp16_grp1 != NULL + && (dsp32->value & 0xf780) == 0xc680 + && ((dsp16_grp1->value & 0xfe40) == 0x9240 + || (dsp16_grp1->value & 0xfe08) == 0xba08 + || (dsp16_grp1->value & 0xfc00) == 0xbc00)) + yyerror ("anomaly 05000074 - Multi-Issue Instruction with \ +dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported"); + + return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2); +} + /* Enabling traces. */ @@ -784,7 +825,7 @@ is_group2 (INSTR_T x) #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 366 "bfin-parse.y" +#line 407 "bfin-parse.y" { INSTR_T instr; Expr_Node *expr; @@ -796,8 +837,8 @@ typedef union YYSTYPE struct { int r0; } r0; Opt_mode mod; } -/* Line 187 of yacc.c. */ -#line 801 "bfin-parse.c" +/* Line 193 of yacc.c. */ +#line 842 "bfin-parse.c" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 @@ -810,7 +851,7 @@ typedef union YYSTYPE /* Line 216 of yacc.c. */ -#line 814 "bfin-parse.c" +#line 855 "bfin-parse.c" #ifdef short # undef short @@ -860,7 +901,7 @@ typedef short int yytype_int16; #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ -# if YYENABLE_NLS +# if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) @@ -1023,18 +1064,18 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 145 +#define YYFINAL 150 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1278 +#define YYLAST 1284 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 175 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 47 /* YYNRULES -- Number of rules. */ -#define YYNRULES 348 +#define YYNRULES 350 /* YYNRULES -- Number of states. */ -#define YYNSTATES 1021 +#define YYNSTATES 1026 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -1105,32 +1146,33 @@ static const yytype_uint16 yyprhs[] = 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, 1318, 1326, 1338, 1346, 1350, 1353, 1355, 1363, 1373, - 1385, 1389, 1395, 1403, 1405, 1408, 1411, 1416, 1418, 1425, - 1432, 1439, 1441, 1443, 1444, 1450, 1456, 1460, 1464, 1468, - 1472, 1473, 1475, 1477, 1479, 1481, 1483, 1484, 1488, 1489, - 1493, 1497, 1498, 1502, 1506, 1512, 1518, 1519, 1523, 1527, - 1528, 1532, 1536, 1537, 1541, 1545, 1549, 1555, 1561, 1562, - 1566, 1567, 1571, 1573, 1575, 1577, 1579, 1580, 1584, 1588, - 1592, 1598, 1604, 1606, 1608, 1610, 1611, 1615, 1616, 1620, - 1625, 1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, - 1650, 1654, 1658, 1662, 1668, 1674, 1680, 1686, 1690, 1694, - 1700, 1706, 1707, 1709, 1711, 1714, 1717, 1720, 1724, 1726, - 1732, 1738, 1742, 1745, 1748, 1751, 1755, 1757, 1759, 1761, - 1763, 1767, 1771, 1775, 1779, 1781, 1783, 1785, 1787, 1791, - 1793, 1795, 1799, 1801, 1803, 1807, 1810, 1813, 1815, 1819, - 1823, 1827, 1831, 1835, 1839, 1843, 1847, 1851, 1855 + 620, 628, 633, 640, 647, 655, 665, 674, 683, 695, + 705, 710, 716, 723, 731, 738, 743, 750, 756, 763, + 770, 775, 784, 795, 806, 819, 825, 832, 838, 845, + 850, 855, 860, 868, 878, 888, 898, 905, 912, 919, + 928, 937, 944, 950, 956, 965, 970, 978, 980, 982, + 984, 986, 988, 990, 992, 994, 996, 998, 1001, 1004, + 1009, 1014, 1021, 1028, 1031, 1034, 1039, 1042, 1045, 1048, + 1051, 1054, 1057, 1064, 1071, 1077, 1082, 1086, 1090, 1094, + 1098, 1102, 1106, 1111, 1114, 1119, 1122, 1127, 1130, 1135, + 1138, 1146, 1155, 1164, 1172, 1180, 1188, 1198, 1206, 1215, + 1225, 1234, 1241, 1249, 1258, 1268, 1277, 1285, 1293, 1300, + 1312, 1320, 1332, 1340, 1344, 1347, 1349, 1357, 1367, 1379, + 1383, 1389, 1397, 1400, 1403, 1405, 1408, 1411, 1416, 1418, + 1420, 1427, 1434, 1441, 1443, 1445, 1446, 1452, 1458, 1462, + 1466, 1470, 1474, 1475, 1477, 1479, 1481, 1483, 1485, 1486, + 1490, 1491, 1495, 1499, 1500, 1504, 1508, 1514, 1520, 1521, + 1525, 1529, 1530, 1534, 1538, 1539, 1543, 1547, 1551, 1557, + 1563, 1564, 1568, 1569, 1573, 1575, 1577, 1579, 1581, 1582, + 1586, 1590, 1594, 1600, 1606, 1608, 1610, 1612, 1613, 1617, + 1618, 1622, 1627, 1632, 1634, 1636, 1638, 1640, 1642, 1644, + 1646, 1648, 1652, 1656, 1660, 1664, 1670, 1676, 1682, 1688, + 1692, 1696, 1702, 1708, 1709, 1711, 1713, 1716, 1719, 1722, + 1726, 1728, 1734, 1740, 1744, 1747, 1750, 1753, 1757, 1759, + 1761, 1763, 1765, 1769, 1773, 1777, 1781, 1783, 1785, 1787, + 1789, 1793, 1795, 1797, 1801, 1803, 1805, 1809, 1812, 1815, + 1817, 1821, 1825, 1829, 1833, 1837, 1841, 1845, 1849, 1853, + 1857 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -1200,168 +1242,169 @@ static const yytype_int16 yyrhs[] = 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, 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 + 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, + 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, 54, 220, -1, + 55, 220, -1, 154, -1, 154, 179, -1, 154, 26, + -1, 156, 163, 26, 162, -1, 153, -1, 43, -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 yytype_uint16 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, 1762, 1791, 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, - 3227, 3243, 3262, 3276, 3295, 3311, 3319, 3328, 3339, 3351, - 3365, 3373, 3383, 3395, 3400, 3405, 3411, 3419, 3425, 3431, - 3437, 3450, 3454, 3464, 3468, 3473, 3478, 3483, 3490, 3494, - 3501, 3505, 3510, 3515, 3523, 3527, 3534, 3538, 3546, 3551, - 3557, 3566, 3571, 3577, 3583, 3589, 3598, 3601, 3605, 3612, - 3615, 3619, 3626, 3631, 3637, 3643, 3649, 3654, 3662, 3665, - 3672, 3675, 3682, 3686, 3690, 3694, 3701, 3704, 3711, 3716, - 3723, 3730, 3742, 3746, 3750, 3757, 3760, 3770, 3773, 3782, - 3788, 3797, 3801, 3808, 3812, 3816, 3820, 3827, 3831, 3838, - 3846, 3854, 3862, 3870, 3877, 3884, 3892, 3902, 3907, 3912, - 3917, 3925, 3928, 3932, 3941, 3948, 3955, 3962, 3977, 3983, - 3991, 3999, 4017, 4024, 4031, 4041, 4054, 4058, 4062, 4066, - 4073, 4079, 4085, 4091, 4101, 4110, 4112, 4114, 4118, 4126, - 4130, 4137, 4143, 4149, 4153, 4157, 4161, 4167, 4173, 4177, - 4181, 4185, 4189, 4193, 4197, 4201, 4205, 4209, 4213 + 0, 608, 608, 609, 621, 623, 656, 683, 694, 698, + 736, 756, 761, 771, 781, 786, 791, 807, 823, 835, + 845, 858, 877, 895, 918, 940, 945, 955, 966, 977, + 991, 1006, 1022, 1038, 1054, 1065, 1079, 1105, 1123, 1128, + 1134, 1146, 1157, 1168, 1179, 1190, 1201, 1212, 1238, 1252, + 1262, 1307, 1326, 1337, 1348, 1359, 1370, 1381, 1397, 1414, + 1430, 1441, 1452, 1485, 1496, 1509, 1520, 1559, 1569, 1579, + 1599, 1609, 1619, 1630, 1644, 1655, 1668, 1678, 1690, 1705, + 1716, 1722, 1742, 1753, 1764, 1772, 1798, 1828, 1857, 1888, + 1902, 1913, 1927, 1961, 1979, 2004, 2016, 2034, 2045, 2056, + 2067, 2080, 2091, 2102, 2113, 2124, 2135, 2168, 2178, 2191, + 2211, 2222, 2233, 2246, 2259, 2270, 2281, 2292, 2303, 2313, + 2324, 2335, 2347, 2358, 2369, 2380, 2393, 2405, 2417, 2428, + 2439, 2450, 2462, 2474, 2485, 2496, 2507, 2517, 2523, 2529, + 2535, 2541, 2547, 2553, 2559, 2565, 2571, 2577, 2588, 2599, + 2610, 2621, 2632, 2643, 2654, 2660, 2671, 2682, 2693, 2704, + 2715, 2725, 2738, 2746, 2754, 2778, 2789, 2800, 2811, 2822, + 2833, 2845, 2858, 2867, 2878, 2889, 2901, 2912, 2923, 2934, + 2948, 2960, 2986, 3016, 3027, 3052, 3089, 3117, 3142, 3153, + 3164, 3175, 3201, 3220, 3234, 3258, 3270, 3289, 3335, 3372, + 3388, 3407, 3421, 3440, 3456, 3464, 3473, 3484, 3496, 3510, + 3518, 3528, 3540, 3550, 3561, 3566, 3571, 3577, 3585, 3591, + 3597, 3603, 3609, 3622, 3626, 3636, 3640, 3645, 3650, 3655, + 3662, 3666, 3673, 3677, 3682, 3687, 3695, 3699, 3706, 3710, + 3718, 3723, 3729, 3738, 3743, 3749, 3755, 3761, 3770, 3773, + 3777, 3784, 3787, 3791, 3798, 3803, 3809, 3815, 3821, 3826, + 3834, 3837, 3844, 3847, 3854, 3858, 3862, 3866, 3873, 3876, + 3883, 3888, 3895, 3902, 3914, 3918, 3922, 3929, 3932, 3942, + 3945, 3954, 3960, 3969, 3973, 3980, 3984, 3988, 3992, 3999, + 4003, 4010, 4018, 4026, 4034, 4042, 4049, 4056, 4064, 4074, + 4079, 4084, 4089, 4097, 4100, 4104, 4113, 4120, 4127, 4134, + 4149, 4155, 4168, 4181, 4199, 4206, 4213, 4223, 4236, 4240, + 4244, 4248, 4255, 4261, 4267, 4273, 4283, 4292, 4294, 4296, + 4300, 4308, 4312, 4319, 4325, 4331, 4335, 4339, 4343, 4349, + 4355, 4359, 4363, 4367, 4371, 4375, 4379, 4383, 4387, 4391, + 4395 }; #endif @@ -1459,19 +1502,20 @@ static const yytype_uint8 yyr1[] = 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 + 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. */ @@ -1486,32 +1530,33 @@ static const yytype_uint8 yyr2[] = 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, - 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 + 7, 4, 6, 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, 11, + 7, 11, 7, 3, 2, 1, 7, 9, 11, 3, + 5, 7, 2, 2, 1, 2, 2, 4, 1, 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 @@ -1519,239 +1564,239 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint16 yydefact[] = { - 0, 7, 0, 0, 206, 0, 0, 221, 222, 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, 7, 0, 0, 205, 0, 0, 223, 224, 0, + 0, 0, 0, 0, 137, 139, 138, 140, 141, 142, + 219, 143, 0, 0, 144, 145, 146, 0, 0, 0, + 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 217, 213, 0, 0, 0, 0, 0, 0, 8, - 0, 3, 0, 0, 0, 0, 0, 0, 223, 308, - 80, 0, 0, 0, 0, 324, 332, 333, 348, 205, - 337, 0, 0, 0, 0, 0, 0, 0, 316, 317, - 319, 318, 0, 0, 0, 0, 0, 0, 0, 149, - 148, 154, 155, 0, 0, 0, 157, 158, 333, 160, - 159, 0, 162, 161, 0, 0, 0, 176, 0, 174, - 0, 178, 0, 180, 0, 0, 0, 316, 0, 0, - 0, 0, 0, 0, 0, 215, 214, 0, 0, 0, - 0, 0, 301, 0, 0, 1, 0, 4, 304, 305, - 306, 0, 46, 0, 0, 0, 0, 0, 0, 0, - 45, 0, 312, 49, 275, 314, 313, 0, 9, 0, - 335, 336, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 169, 172, 170, 171, 167, 168, 0, - 0, 0, 0, 0, 0, 272, 273, 274, 0, 0, - 0, 81, 83, 246, 0, 246, 0, 0, 281, 282, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 307, - 0, 0, 223, 249, 63, 59, 57, 61, 62, 82, - 0, 0, 84, 0, 321, 320, 26, 14, 27, 15, - 0, 0, 0, 0, 51, 0, 0, 0, 0, 0, - 0, 311, 223, 48, 0, 210, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 301, 301, - 323, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 288, 287, 303, 302, 0, 0, - 0, 322, 0, 275, 204, 0, 0, 38, 25, 0, - 0, 0, 0, 0, 0, 0, 0, 40, 0, 56, - 0, 0, 0, 0, 334, 345, 347, 340, 346, 342, - 341, 338, 339, 343, 344, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 287, 283, 284, - 285, 286, 0, 0, 0, 0, 0, 0, 53, 0, - 47, 166, 252, 258, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 301, 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, 218, 214, 0, 0, 0, 0, + 0, 0, 8, 0, 3, 0, 0, 0, 0, 0, + 0, 225, 310, 80, 0, 0, 0, 0, 326, 334, + 335, 350, 204, 339, 0, 0, 0, 0, 0, 0, + 0, 318, 319, 321, 320, 0, 0, 0, 0, 0, + 0, 0, 148, 147, 153, 154, 0, 0, 212, 213, + 0, 156, 157, 335, 159, 158, 0, 161, 160, 0, + 0, 0, 175, 0, 173, 0, 177, 0, 179, 0, + 0, 0, 318, 0, 0, 0, 0, 0, 0, 0, + 216, 215, 0, 0, 0, 0, 0, 303, 0, 0, + 1, 0, 4, 306, 307, 308, 0, 46, 0, 0, + 0, 0, 0, 0, 0, 45, 0, 314, 49, 277, + 316, 315, 0, 9, 0, 337, 338, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 168, 171, + 169, 170, 166, 167, 0, 0, 0, 0, 0, 0, + 274, 275, 276, 0, 0, 0, 81, 83, 248, 0, + 248, 0, 0, 283, 284, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 309, 0, 0, 225, 251, 63, + 59, 57, 61, 62, 82, 0, 0, 84, 0, 323, + 322, 26, 14, 27, 15, 0, 0, 0, 0, 51, + 0, 0, 0, 0, 0, 0, 313, 225, 48, 0, + 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 303, 303, 325, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, + 289, 305, 304, 0, 0, 0, 324, 0, 277, 203, + 0, 0, 38, 25, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 0, 56, 0, 0, 0, 0, 336, + 347, 349, 342, 348, 344, 343, 340, 341, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 85, 0, 0, 150, 0, 331, 151, 0, 0, - 0, 0, 175, 173, 177, 179, 156, 302, 0, 0, - 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 216, 0, 136, 0, 0, 0, 0, 0, 0, 0, - 279, 0, 6, 60, 0, 315, 0, 0, 0, 0, - 0, 0, 91, 106, 101, 0, 0, 0, 227, 0, - 226, 0, 0, 223, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 79, 67, 68, 0, 252, 258, - 252, 236, 238, 0, 0, 0, 0, 165, 0, 24, - 0, 0, 0, 0, 301, 301, 0, 306, 0, 309, - 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 277, 277, 74, 75, 277, 277, 0, 76, 70, 71, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 108, - 260, 0, 238, 0, 0, 301, 0, 310, 0, 0, - 211, 0, 0, 0, 0, 280, 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, 276, - 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 92, 107, 110, 0, - 230, 52, 0, 0, 36, 248, 247, 0, 0, 0, - 0, 0, 105, 258, 252, 117, 119, 0, 0, 302, - 0, 0, 0, 12, 0, 333, 329, 0, 330, 199, - 0, 0, 0, 0, 250, 251, 58, 0, 77, 78, - 72, 73, 0, 0, 0, 0, 0, 42, 0, 0, - 0, 0, 94, 109, 0, 39, 103, 260, 302, 0, - 13, 0, 0, 0, 153, 152, 164, 163, 0, 0, - 0, 0, 0, 129, 127, 128, 0, 220, 219, 218, - 0, 132, 0, 0, 0, 0, 0, 0, 192, 5, - 0, 0, 0, 0, 0, 224, 225, 0, 307, 0, + 0, 0, 289, 285, 286, 287, 288, 0, 0, 0, + 0, 0, 0, 53, 0, 47, 165, 254, 260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 231, 232, 233, 0, 0, 0, 0, 0, - 253, 0, 254, 0, 255, 259, 104, 95, 0, 246, - 0, 0, 246, 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, 207, 212, - 0, 181, 0, 0, 184, 185, 0, 137, 0, 0, - 0, 0, 0, 0, 0, 203, 193, 186, 0, 201, - 55, 54, 0, 0, 0, 0, 0, 0, 0, 34, - 112, 0, 246, 98, 0, 0, 237, 0, 239, 240, - 0, 0, 0, 246, 196, 246, 246, 189, 0, 325, - 326, 327, 328, 0, 28, 258, 223, 278, 131, 130, - 0, 0, 258, 97, 43, 44, 0, 0, 261, 0, - 191, 223, 0, 182, 194, 183, 0, 135, 0, 0, + 0, 303, 0, 0, 0, 86, 0, 50, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, + 120, 121, 119, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 85, 0, 0, 149, + 0, 333, 150, 0, 0, 0, 0, 174, 172, 176, + 178, 155, 304, 0, 0, 304, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 217, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 281, 0, 6, 60, 0, + 317, 0, 0, 0, 0, 0, 0, 91, 105, 100, + 0, 0, 0, 229, 0, 228, 0, 0, 225, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, + 67, 68, 0, 254, 260, 254, 238, 240, 0, 0, + 0, 0, 164, 0, 24, 0, 0, 0, 0, 303, + 303, 0, 308, 0, 311, 304, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 279, 279, 74, 75, 279, + 279, 0, 76, 70, 71, 0, 0, 0, 0, 0, + 0, 0, 0, 262, 107, 262, 0, 240, 0, 0, + 303, 0, 312, 0, 0, 210, 0, 0, 0, 0, + 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 0, 0, 133, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 89, + 0, 115, 117, 41, 278, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 124, 100, 0, 69, 0, 0, 0, 257, - 256, 195, 190, 187, 66, 0, 37, 88, 228, 229, - 96, 0, 0, 0, 0, 87, 208, 125, 0, 0, - 0, 0, 0, 0, 126, 0, 266, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 114, 0, 113, 0, - 0, 0, 0, 266, 262, 265, 264, 263, 0, 0, - 0, 0, 0, 64, 0, 0, 0, 0, 99, 241, - 238, 20, 238, 0, 0, 209, 0, 0, 18, 19, - 202, 200, 65, 0, 30, 0, 0, 0, 230, 23, - 22, 21, 115, 0, 0, 0, 267, 0, 29, 0, - 31, 32, 0, 33, 234, 235, 0, 0, 0, 0, + 0, 92, 106, 109, 0, 232, 52, 0, 0, 36, + 250, 249, 0, 0, 0, 0, 0, 104, 260, 254, + 116, 118, 0, 0, 304, 0, 0, 0, 12, 0, + 335, 331, 0, 332, 198, 0, 0, 0, 0, 252, + 253, 58, 0, 77, 78, 72, 73, 0, 0, 0, + 0, 0, 42, 0, 0, 0, 0, 93, 108, 0, + 39, 102, 262, 304, 0, 13, 0, 0, 0, 152, + 151, 163, 162, 0, 0, 0, 0, 0, 128, 126, + 127, 0, 222, 221, 220, 0, 131, 0, 0, 0, + 0, 0, 0, 191, 5, 0, 0, 0, 0, 0, + 226, 227, 0, 309, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 233, 234, 235, + 0, 0, 0, 0, 0, 255, 0, 256, 0, 257, + 261, 103, 94, 0, 248, 0, 0, 248, 0, 196, + 0, 197, 0, 0, 0, 0, 0, 0, 0, 0, + 122, 0, 0, 0, 0, 0, 0, 0, 0, 90, + 0, 187, 0, 206, 211, 0, 180, 0, 0, 183, + 184, 0, 136, 0, 0, 0, 0, 0, 0, 0, + 202, 192, 185, 0, 200, 55, 54, 0, 0, 0, + 0, 0, 0, 0, 34, 111, 0, 248, 97, 0, + 0, 239, 0, 241, 242, 0, 0, 0, 248, 195, + 248, 248, 188, 0, 327, 328, 329, 330, 0, 28, + 260, 225, 280, 130, 129, 0, 0, 260, 96, 43, + 44, 0, 0, 263, 0, 190, 225, 0, 181, 193, + 182, 0, 134, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 123, 99, 0, + 69, 0, 0, 0, 259, 258, 194, 189, 186, 66, + 0, 37, 88, 230, 231, 95, 0, 0, 0, 0, + 87, 207, 124, 0, 0, 0, 0, 0, 0, 125, + 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 113, 0, 112, 0, 0, 0, 0, 268, 264, + 267, 266, 265, 0, 0, 0, 0, 0, 64, 0, + 0, 0, 0, 98, 243, 240, 20, 240, 0, 0, + 208, 0, 0, 18, 19, 201, 199, 65, 0, 30, + 0, 0, 0, 232, 23, 22, 21, 114, 0, 0, + 0, 269, 0, 29, 0, 31, 32, 0, 33, 236, + 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 245, 232, 244, 0, 0, + 0, 0, 271, 0, 270, 0, 292, 0, 294, 0, + 293, 0, 291, 0, 299, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 243, 230, 242, 0, 0, 0, 0, 269, 0, 268, - 0, 290, 0, 292, 0, 291, 0, 289, 0, 297, - 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 245, 244, 0, 266, 266, - 270, 271, 294, 296, 295, 293, 299, 300, 35, 16, - 17 + 247, 246, 0, 268, 268, 272, 273, 296, 298, 297, + 295, 301, 302, 35, 16, 17 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 60, 61, 62, 361, 168, 745, 715, 957, 601, - 604, 939, 348, 372, 487, 489, 652, 908, 913, 948, - 220, 309, 638, 64, 117, 221, 345, 288, 950, 953, - 289, 362, 363, 67, 68, 69, 166, 93, 70, 77, - 812, 626, 627, 109, 78, 79, 80 + -1, 63, 64, 65, 366, 173, 750, 720, 962, 606, + 609, 944, 353, 377, 492, 494, 657, 913, 918, 953, + 225, 314, 643, 67, 122, 226, 350, 293, 955, 958, + 294, 367, 368, 70, 71, 72, 171, 96, 73, 80, + 817, 631, 632, 114, 81, 82, 83 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -907 +#define YYPACT_NINF -875 static const yytype_int16 yypact[] = { - 878, -907, -120, 291, -907, 614, 439, -907, -907, -35, - -11, 31, 61, 81, -907, -907, -907, -907, -907, -907, - -907, 183, 202, -907, -907, -907, 291, 291, -56, 291, - -907, 351, 291, 291, 354, 96, 111, 86, 160, 162, - 168, 122, 170, 172, 318, 134, 146, 196, 200, 217, - 228, -907, 230, 233, 252, 46, 207, 26, 318, -907, - 412, -907, -48, 195, 324, 270, 274, 394, 271, -907, - -907, 418, 291, 291, 291, -907, -907, -907, -907, -907, - 561, 55, 69, 71, 482, 421, 80, 107, 70, -907, - -907, -907, 5, -107, 414, 419, 422, 440, 121, -907, - -907, -907, -907, 291, 465, 42, -907, -907, 321, -907, - -907, 52, -907, -907, 479, 489, 495, -907, 502, -907, - 520, -907, 558, -907, 560, 569, 593, -907, 594, 599, - 604, 609, 630, 640, 643, -907, -907, 638, 650, 27, - 657, -22, 237, 663, 667, -907, 1024, -907, -907, -907, - 186, 9, -907, 568, 272, 186, 186, 186, 547, 186, - 174, 291, -907, -907, 548, -907, -907, 147, 556, 555, - -907, -907, 459, 291, 291, 291, 291, 291, 291, 291, - 291, 291, 291, -907, -907, -907, -907, -907, -907, 562, - 563, 564, 565, 567, 570, -907, -907, -907, 572, 573, - 574, 508, -907, 575, 645, -52, 159, 201, -907, -907, - 697, 698, 703, 705, 706, 576, 577, 20, 708, 668, - 579, 580, 271, 581, -907, -907, -907, 582, -907, 239, - 583, 320, -907, 585, -907, -907, -907, -907, -907, -907, - 586, 587, 725, 145, 15, 654, 411, 717, 718, 591, - 272, -907, 271, -907, 598, 659, 597, 689, 588, 601, - 690, 606, 607, -46, -39, -37, -4, 605, 301, 323, - -907, 610, 613, 615, 616, 617, 618, 619, 621, 671, - 291, 47, 740, 291, -907, -907, -907, 744, 291, 620, - 622, -907, -47, 548, -907, 746, 742, 623, 626, 627, - 629, 186, 631, 291, 291, 291, 653, -907, 644, -907, - -42, -31, 374, 291, -907, 608, 571, -907, 600, 397, - 397, -907, -907, 510, 510, 763, 765, 766, 768, 769, - 760, 771, 772, 773, 774, 775, 776, 641, -907, -907, - -907, -907, 291, 291, 291, 777, 779, 219, -907, 778, - -907, -907, 646, 647, 648, 649, 652, 655, 780, 786, - 745, 403, 394, 394, 274, 656, 382, 186, 789, 791, - 661, 249, -907, 688, 218, 260, 268, 795, 186, 186, - 186, 796, 798, 154, -907, -907, -907, -907, 687, 800, - 33, 291, 291, 291, 805, 792, 670, 672, 804, 274, - 673, 674, 291, 807, -907, 808, -907, -907, 811, 812, - 813, 675, -907, -907, -907, -907, -907, -907, 291, 676, - 816, 291, 678, 291, 291, 291, 818, 291, 291, 291, - -907, 819, 683, 749, 291, 686, 0, 684, 685, 753, - -907, 1024, -907, -907, 692, -907, 186, 186, 817, 820, - 700, 210, -907, -907, -907, 693, 704, 723, -907, 730, - -907, 762, 770, 271, 709, 710, 711, 712, 713, 719, - 722, 726, 727, 728, -907, -907, -907, 843, 646, 647, - 646, 24, 105, 721, 729, 731, 87, -907, 738, -907, - 851, 852, 856, 305, 301, 464, 867, -907, 732, -907, - 869, 291, 733, 739, 741, 743, 870, 759, 781, 782, - 737, 737, -907, -907, 737, 737, 783, -907, -907, -907, - 784, 785, 787, 788, 790, 793, 794, 797, 799, -907, - 799, 801, 802, 871, 896, 481, 806, -907, 897, 809, - 847, 810, 814, 815, 821, -907, 822, 842, 823, 824, - 853, 828, 833, 834, 803, 835, 837, 838, -907, 827, - 924, 840, 855, 928, 857, 861, 865, 940, 825, 291, - 872, 899, 890, -907, -907, 186, -907, -907, 826, -907, - 844, 845, 11, 40, -907, 947, 291, 291, 291, 291, - 952, 943, 954, 945, 956, 894, -907, -907, -907, 978, - 428, -907, 979, 487, -907, -907, -907, 982, 848, 44, - 73, 849, -907, 647, 646, -907, -907, 291, 850, 983, - 291, 854, 858, -907, 862, 839, -907, 873, -907, -907, - 987, 988, 990, 919, -907, -907, -907, 882, -907, -907, - -907, -907, 291, 291, 859, 1001, 1003, -907, 513, 186, - 186, 914, -907, -907, 1007, -907, -907, 799, 997, 881, - -907, 949, 1025, 291, -907, -907, -907, -907, 955, 1041, - 980, 981, 178, -907, -907, -907, 186, -907, -907, -907, - 923, -907, 957, 238, 926, 925, 1061, 1064, -907, -907, - 133, 186, 186, 933, 186, -907, -907, 186, -907, 186, - 932, 935, 936, 937, 938, 939, 941, 942, 944, 946, - 291, 999, -907, -907, -907, 948, 1000, 950, 951, 1002, - -907, 959, -907, 973, -907, -907, -907, -907, 953, 575, - 958, 960, 575, 1014, -907, 477, -907, 1009, 962, 964, - 394, 965, 966, 967, 566, -907, 968, 969, 970, 971, - 961, 976, 974, 984, -907, 977, -907, 394, 1011, -907, - 1085, -907, 1078, 1089, -907, -907, 989, -907, 991, 972, - 986, 1090, 1091, 291, 1096, -907, -907, -907, 1115, -907, - -907, -907, 1117, 186, 291, 1124, 1126, 1128, 1129, -907, - -907, 859, 575, 993, 995, 1132, -907, 1133, -907, -907, - 1111, 998, 1004, 575, -907, 575, 575, -907, 291, -907, - -907, -907, -907, 186, -907, 647, 271, -907, -907, -907, - 1006, 1020, 647, -907, -907, -907, 313, 1135, -907, 1092, - -907, 271, 1136, -907, -907, -907, 859, -907, 1137, 1139, - 1013, 1021, 1023, 1099, 1026, 1027, 1029, 1031, 1034, 1035, - 1036, 1037, -907, -907, 1065, -907, 398, 612, 1098, -907, - -907, -907, -907, -907, -907, 1130, -907, -907, -907, -907, - -907, 1039, 1044, 1042, 1163, -907, 1113, -907, 1043, 1046, - 291, 611, 1109, 291, -907, 1082, 1047, 291, 291, 291, - 291, 1049, 1183, 1186, 1180, 186, -907, 1187, -907, 1143, - 291, 291, 291, 1047, -907, -907, -907, -907, 1054, 925, - 1055, 1056, 1083, -907, 1057, 1059, 1060, 1062, -907, 1063, - 802, -907, 802, 1066, 1201, -907, 1067, 1069, -907, -907, - -907, -907, -907, 1068, 1070, 1071, 1071, 1072, 476, -907, - -907, -907, -907, 1073, 1203, 1205, -907, 557, -907, 332, - -907, -907, 553, -907, -907, -907, 167, 380, 1196, 1077, - 1079, 391, 408, 413, 453, 456, 462, 499, 506, 584, - -907, 428, -907, 1076, 291, 291, 1103, -907, 1105, -907, - 1106, -907, 1107, -907, 1108, -907, 1110, -907, 1112, -907, - 1114, -907, 1080, 1084, 1176, 1088, 1093, 1094, 1095, 1097, - 1100, 1101, 1102, 1104, 1116, -907, -907, 1216, 1047, 1047, - -907, -907, -907, -907, -907, -907, -907, -907, -907, -907, - -907 + 862, -875, -87, -20, -875, 493, 421, -875, -875, -8, + 25, 44, 56, 93, -875, -875, -875, -875, -875, -875, + -875, -875, 213, 241, -875, -875, -875, -20, -20, 67, + -20, -20, -20, -875, 205, -20, -20, 263, 134, 147, + 154, 161, 163, 179, 209, 220, 233, 459, 245, 251, + 253, 259, 286, 306, -875, 316, 336, 345, 28, 492, + 22, 459, -875, 511, -875, -11, 208, 443, 1, 356, + 522, 400, -875, -875, 542, -20, -20, -20, -875, -875, + -875, -875, -875, 605, 126, 168, 171, 499, 554, 192, + 214, 105, -875, -875, -875, 10, -60, 547, 557, 576, + 581, 88, -875, -875, -875, -875, -20, 602, -875, -875, + 59, -875, -875, 471, -875, -875, 130, -875, -875, 619, + 635, 638, -875, 639, -875, 640, -875, 643, -875, 648, + 653, 656, -875, 655, 658, 659, 661, 667, 672, 673, + -875, -875, 664, 676, 27, 681, 118, 189, 684, 683, + -875, 1008, -875, -875, -875, 149, 8, -875, 641, -2, + 149, 149, 149, 549, 149, 123, -20, -875, -875, 551, + -875, -875, 117, 560, 564, -875, -875, 559, -20, -20, + -20, -20, -20, -20, -20, -20, -20, -20, -875, -875, + -875, -875, -875, -875, 556, 563, 565, 566, 567, 568, + -875, -875, -875, 569, 570, 571, 624, -875, 572, 649, + -33, 222, 275, -875, -875, 701, 710, 711, 712, 713, + 577, 578, 102, 714, 674, 580, 583, 400, 584, -875, + -875, -875, 585, -875, 330, 586, 376, -875, 587, -875, + -875, -875, -875, -875, -875, 589, 590, 718, 409, -16, + 657, 237, 720, 721, 594, -2, -875, 400, -875, 596, + 662, 597, 690, 591, 601, 693, 608, 609, -40, -19, + 36, 54, 606, 232, 295, -875, 611, 612, 613, 614, + 615, 616, 617, 618, 678, -20, 46, 751, -20, -875, + -875, -875, 752, -20, 620, 622, -875, -1, 551, -875, + 753, 745, 625, 626, 623, 629, 149, 630, -20, -20, + -20, 665, -875, 654, -875, -50, 55, 454, -20, -875, + 153, 481, -875, 403, 352, 352, -875, -875, 430, 430, + 766, 767, 768, 769, 770, 761, 772, 773, 774, 775, + 776, 777, 642, -875, -875, -875, -875, -20, -20, -20, + 778, 780, 225, -875, 781, -875, -875, 644, 645, 650, + 651, 652, 660, 786, 787, 744, 436, 522, 522, 356, + 663, 350, 149, 791, 792, 666, 325, -875, 688, 278, + 293, 318, 795, 149, 149, 149, 796, 797, 137, -875, + -875, -875, -875, 689, 800, 57, -20, -20, -20, 806, + 793, 671, 675, 805, 356, 670, 677, -20, 807, -875, + 810, -875, -875, 811, 812, 813, 680, -875, -875, -875, + -875, -875, -875, -20, 682, 814, -20, 685, -20, -20, + -20, 815, -20, -20, -20, -875, 816, 686, 748, -20, + 691, 138, 687, 694, 750, -875, 1008, -875, -875, 695, + -875, 149, 149, 818, 820, 702, 74, -875, -875, -875, + 707, 708, 715, -875, 729, -875, 779, 783, 400, 717, + 716, 722, 723, 725, 731, 733, 765, 771, 782, -875, + -875, -875, 817, 644, 645, 644, 204, 297, 709, 762, + 784, 162, -875, 730, -875, 836, 889, 891, 387, 232, + 381, 902, -875, 785, -875, 904, -20, 789, 788, 790, + 798, 905, 799, 801, 802, 794, 794, -875, -875, 794, + 794, 804, -875, -875, -875, 808, 803, 809, 821, 819, + 824, 825, 826, 827, -875, 827, 828, 829, 896, 897, + 292, 822, -875, 898, 831, 843, 832, 833, 834, 835, + -875, 837, 838, 839, 841, 840, 845, 849, 859, 842, + 860, 861, 865, -875, 852, 911, 867, 846, 913, 847, + 851, 853, 915, 863, -20, 857, 873, 883, -875, -875, + 149, -875, -875, 877, -875, 869, 875, 15, 21, -875, + 924, -20, -20, -20, -20, 942, 933, 944, 935, 946, + 882, -875, -875, -875, 948, 223, -875, 954, 341, -875, + -875, -875, 972, 907, 242, 362, 908, -875, 645, 644, + -875, -875, -20, 906, 973, -20, 909, 910, -875, 912, + 830, -875, 914, -875, -875, 975, 1047, 1049, 978, -875, + -875, -875, 945, -875, -875, -875, -875, -20, -20, 917, + 1042, 1046, -875, 402, 149, 149, 957, -875, -875, 1048, + -875, -875, 827, 1059, 921, -875, 989, 1062, -20, -875, + -875, -875, -875, 991, 1064, 993, 994, 156, -875, -875, + -875, 149, -875, -875, -875, 931, -875, 963, 260, 936, + 934, 1069, 1071, -875, -875, 419, 149, 149, 941, 149, + -875, -875, 149, -875, 149, 940, 943, 949, 950, 951, + 952, 953, 955, 956, 958, -20, 1004, -875, -875, -875, + 964, 1005, 965, 967, 1012, -875, 968, -875, 980, -875, + -875, -875, -875, 947, 572, 960, 969, 572, 1022, -875, + 321, -875, 1018, 971, 974, 522, 976, 977, 979, 457, + -875, 981, 982, 983, 984, 961, 990, 985, 987, -875, + 970, -875, 522, 1032, -875, 1111, -875, 1104, 1116, -875, + -875, 988, -875, 995, 1003, 1006, 1126, 1127, -20, 1141, + -875, -875, -875, 1142, -875, -875, -875, 1145, 149, -20, + 1144, 1150, 1151, 1152, -875, -875, 917, 572, 1016, 1019, + 1154, -875, 1156, -875, -875, 1153, 1021, 1024, 572, -875, + 572, 572, -875, -20, -875, -875, -875, -875, 149, -875, + 645, 400, -875, -875, -875, 1025, 1026, 645, -875, -875, + -875, 363, 1158, -875, 1117, -875, 400, 1164, -875, -875, + -875, 917, -875, 1165, 1166, 1033, 1031, 1034, 1113, 1035, + 1036, 1037, 1039, 1043, 1044, 1045, 1050, -875, -875, 1066, + -875, 573, 500, 1131, -875, -875, -875, -875, -875, -875, + 1136, -875, -875, -875, -875, -875, 1051, 1053, 1052, 1171, + -875, 1120, -875, 1055, 1056, -20, 548, 1110, -20, -875, + 1083, 1054, -20, -20, -20, -20, 1057, 1192, 1194, 1188, + 149, -875, 1195, -875, 1155, -20, -20, -20, 1054, -875, + -875, -875, -875, 1060, 934, 1063, 1065, 1087, -875, 1067, + 1068, 1070, 1072, -875, 1073, 829, -875, 829, 1075, 1206, + -875, 1077, 1080, -875, -875, -875, -875, -875, 1078, 1076, + 1079, 1079, 1081, 410, -875, -875, -875, -875, 1082, 1205, + 1207, -875, 465, -875, 288, -875, -875, 504, -875, -875, + -875, 432, 441, 1210, 1088, 1089, 446, 449, 475, 476, + 477, 478, 484, 485, 488, -875, 223, -875, 1085, -20, + -20, 1106, -875, 1105, -875, 1114, -875, 1115, -875, 1118, + -875, 1119, -875, 1121, -875, 1122, -875, 1091, 1092, 1178, + 1095, 1098, 1099, 1100, 1101, 1102, 1103, 1107, 1108, 1109, + -875, -875, 1230, 1054, 1054, -875, -875, -875, -875, -875, + -875, -875, -875, -875, -875, -875 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -907, -907, -907, -122, 10, -208, -737, -906, 284, -907, - -509, -907, -196, -907, -451, -460, -502, -907, -863, -907, - -907, 975, -69, -907, -27, -907, 402, -180, 325, -907, - -243, 2, 22, -168, 963, -213, -50, 59, -907, -16, - -907, -907, -907, 1220, -907, -26, 19 + -875, -875, -875, -129, 26, -221, -700, -874, 294, -875, + -512, -875, -192, -875, -443, -463, -500, -875, -815, -875, + -875, 986, -287, -875, -30, -875, 406, -176, 331, -875, + -250, 2, 17, -140, 959, -206, -54, 19, -875, -17, + -875, -875, -875, 1236, -875, -27, 24 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -1761,266 +1806,268 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -3 static const yytype_int16 yytable[] = { - 101, 102, 65, 104, 365, 106, 107, 110, 113, 350, - 63, 119, 121, 123, 370, 162, 165, 108, 108, 597, - 296, 346, 66, 655, 292, 419, 422, 596, 653, 598, - 146, 441, 956, 232, 222, 294, 234, 400, 411, 163, - 928, 7, 8, 71, 401, 411, 360, 411, 252, 364, - 7, 8, 142, 279, 852, 184, 186, 188, 223, 235, - 226, 228, 136, 94, 389, 993, 395, 161, 256, 257, - 7, 8, 253, 433, 139, 160, 164, 254, 259, 260, - 411, 183, 399, 72, 280, 284, 285, 95, 418, 421, - 73, 170, 171, 172, 219, 185, 229, 187, 231, 877, - 7, 8, 526, 128, 434, 72, 225, 103, 251, 143, - 140, 347, 73, 147, 442, 72, 457, 144, 72, 412, - 458, 527, 73, 502, 172, 73, 413, 459, 414, 96, - 172, 460, 72, 227, 72, 307, 282, 240, 283, 73, - 241, 73, 242, 72, 243, 1019, 1020, 244, 65, 245, - 73, 7, 8, 726, 233, 754, 63, 246, 563, 97, - 293, 415, 564, 727, 297, 298, 299, 300, 66, 302, - 72, 385, 295, 171, 697, 7, 8, 73, 388, 98, - 522, 386, 599, 74, 72, 351, 501, 600, 75, 76, - 523, 73, 315, 316, 317, 318, 319, 320, 321, 322, - 323, 324, 721, 699, 764, 74, 722, 247, 248, 99, - 75, 76, 608, 609, 765, 74, 7, 8, 74, 230, - 75, 76, 72, 75, 76, 170, 171, 352, 100, 73, - 610, 723, 74, 141, 74, 724, 172, 75, 76, 75, - 76, 769, 770, 74, 510, 249, 576, 771, 75, 76, - 116, 618, 621, 387, 432, 584, 135, 436, 772, 114, - 7, 8, 438, 602, 72, 303, 304, 305, 603, 172, - 74, 73, 148, 72, 115, 75, 76, 452, 453, 454, - 73, 72, 310, 311, 250, 124, 512, 464, 73, 75, - 76, 778, 659, 148, 514, 779, 152, 129, 149, 150, - 7, 8, 7, 8, 7, 8, 153, 284, 285, 130, - 153, 450, 162, 165, 617, 620, 478, 479, 480, 568, - 286, 287, 74, 72, 118, 969, 120, 75, 76, 970, - 73, 72, 122, 72, 125, 72, 126, 306, 73, 871, - 154, 615, 73, 7, 8, 374, 375, 155, 511, 513, - 515, 376, 483, 484, 72, 866, 156, 157, 158, 131, - 159, 73, 870, 132, 74, 528, 529, 530, 72, 75, - 76, 284, 285, 74, 498, 73, 539, 503, 75, 76, - 133, 74, 507, 508, 286, 417, 75, 76, 517, 518, - 519, 134, 546, 284, 285, 549, 137, 551, 552, 553, - 461, 555, 556, 557, 7, 8, 286, 420, 561, 536, - 462, 940, 145, 941, 72, 138, 127, 72, 89, 90, - 91, 73, 151, 74, 73, 577, 378, 379, 75, 76, - 153, 74, 380, 74, 167, 74, 75, 76, 75, 76, - 75, 76, 639, 65, 169, 640, 641, 224, 571, 572, - 236, 63, 284, 285, 74, 237, 570, 570, 238, 75, - 76, 963, 964, 66, 175, 286, 500, 616, 74, 179, - 180, 965, 966, 75, 76, 628, 239, 338, 339, 340, - 341, 284, 285, 296, 365, 625, 400, 189, 190, 191, - 192, 255, 193, 194, 258, 195, 196, 197, 198, 199, - 200, 148, 391, 392, 393, 261, 149, 497, 201, 394, - 202, 203, 7, 8, 105, 262, 204, 111, 205, 75, - 76, 263, 75, 76, 173, 174, 175, 176, 264, 177, - 178, 179, 180, 804, 284, 285, 807, 88, 971, 89, - 90, 91, 972, 690, 92, 206, 265, 286, 619, 976, - 181, 182, 207, 977, 712, 713, 714, 208, 209, 210, - 701, 702, 703, 704, 286, 658, 978, 211, 212, 213, - 979, 980, 214, 334, 335, 981, 336, 175, 284, 337, - 177, 178, 179, 180, 266, 693, 267, 338, 339, 340, - 341, 728, 698, 251, 731, 268, 853, 954, 955, 342, - 343, 344, 712, 713, 714, 215, 216, 861, 867, 862, - 863, 982, 717, 718, 984, 983, 742, 743, 985, 269, - 986, 314, 270, 875, 987, 271, 173, 174, 175, 176, - 272, 177, 178, 179, 180, 273, 173, 759, 175, 176, - 296, 177, 178, 179, 180, 217, 218, 809, 810, 811, - 75, 76, 181, 182, 748, 749, 274, 988, 775, 750, - 751, 989, 181, 182, 990, 173, 275, 175, 991, 276, - 177, 178, 179, 180, 277, 175, 278, 893, 177, 178, - 179, 180, 284, 285, 794, 281, 766, 820, 821, 290, - 816, 181, 182, 961, 962, 291, 783, 967, 968, 181, - 182, 780, 781, 81, 570, 954, 955, 831, 82, 83, - 301, 308, 84, 85, 312, 313, 349, 86, 87, 904, - 905, 906, 907, 353, 354, 325, 326, 327, 328, 355, - 329, 356, 357, 330, 366, 331, 332, 333, 347, 367, - 358, 359, 368, 369, 371, 373, 377, 842, 381, 382, - 383, 384, 390, 396, 397, 398, 402, 403, 847, 404, - 405, 408, 406, 407, 409, 410, 435, 416, 423, 431, - 437, 424, 444, 425, 426, 427, 428, 429, 445, 455, - 456, 446, 864, 430, 447, 439, 448, 440, 449, 465, - 451, 466, 467, 846, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 481, 477, 482, 494, 490, 491, 486, - 488, 492, 495, 485, 493, 504, 496, 505, 499, 506, - 509, 516, 520, 865, 521, 524, 525, 531, 532, 533, - 535, 534, 538, 540, 541, 537, 872, 542, 543, 544, - 545, 547, 548, 550, 554, 558, 559, 560, 562, 565, - 566, 567, 569, 573, 903, 578, 574, 910, 575, 580, - 582, 914, 915, 916, 917, 581, 579, 585, 583, 595, - 586, 587, 588, 589, 925, 926, 927, 590, -2, 1, - 591, 611, 930, 605, 592, 593, 594, 612, 613, 607, - 2, 606, 614, 622, 623, 624, 633, 630, 629, 631, - 637, 632, 3, 4, 5, 922, 6, 656, 7, 8, + 104, 105, 68, 107, 108, 109, 375, 111, 112, 115, + 118, 124, 126, 128, 167, 170, 370, 69, 355, 113, + 113, 602, 297, 424, 427, 660, 66, 157, 7, 8, + 351, 7, 8, 227, 299, 658, 406, 158, 237, 301, + 601, 168, 603, 75, 416, 7, 8, 257, 147, 405, + 76, 7, 8, 284, 289, 290, 144, 189, 191, 193, + 228, 75, 231, 233, 75, 416, 133, 151, 76, 961, + 166, 159, 438, 394, 258, 400, 74, 446, 160, 259, + 149, 141, 369, 239, 285, 261, 262, 161, 162, 163, + 97, 164, 145, 933, 165, 169, 857, 423, 426, 175, + 176, 177, 998, 439, 245, 148, 240, 246, 462, 247, + 581, 248, 463, 224, 249, 404, 250, 236, 7, 8, + 416, 507, 75, 98, 251, 417, 531, 256, 365, 76, + 352, 234, 7, 8, 177, 7, 8, 75, 416, 312, + 177, 882, 99, 77, 76, 532, 418, 393, 78, 79, + 152, 75, 188, 68, 100, 731, 264, 265, 76, 238, + 447, 77, 759, 527, 77, 75, 78, 79, 69, 78, + 79, 300, 76, 528, 252, 253, 732, 66, 702, 7, + 8, 298, 769, 176, 704, 302, 303, 304, 305, 75, + 307, 101, 770, 75, 190, 506, 76, 192, 1024, 1025, + 76, 419, 320, 321, 322, 323, 324, 325, 326, 327, + 328, 329, 254, 464, 308, 309, 310, 465, 230, 420, + 180, 153, 77, 182, 183, 184, 185, 78, 79, 644, + 106, 75, 645, 646, 75, 175, 176, 77, 76, 102, + 232, 76, 78, 79, 186, 187, 177, 589, 356, 623, + 626, 255, 315, 316, 235, 75, 78, 79, 437, 289, + 290, 441, 76, 774, 775, 77, 443, 103, 75, 776, + 78, 79, 291, 292, 392, 76, 287, 75, 288, 177, + 777, 457, 458, 459, 76, 75, 311, 613, 614, 77, + 664, 469, 76, 77, 78, 79, 568, 119, 78, 79, + 569, 357, 289, 290, 515, 615, 153, 289, 290, 301, + 120, 154, 155, 167, 170, 291, 422, 573, 121, 517, + 483, 484, 485, 622, 625, 123, 75, 125, 396, 397, + 398, 77, 455, 76, 77, 399, 78, 79, 75, 78, + 79, 75, 140, 127, 519, 76, 7, 8, 76, 717, + 718, 719, 516, 518, 520, 77, 75, 871, 488, 489, + 78, 79, 604, 76, 875, 289, 290, 605, 110, 533, + 534, 535, 129, 78, 79, 291, 663, 77, 291, 425, + 544, 75, 78, 79, 130, 77, 7, 8, 76, 876, + 78, 79, 158, 7, 8, 503, 551, 131, 508, 554, + 726, 556, 557, 558, 727, 560, 561, 562, 134, 522, + 523, 524, 566, 945, 135, 946, 136, 968, 969, 180, + 289, 290, 137, 620, 184, 185, 116, 970, 971, 582, + 541, 78, 79, 291, 505, 390, 379, 380, 77, 7, + 8, 77, 381, 78, 79, 391, 78, 79, 68, 138, + 75, 289, 290, 576, 577, 607, 77, 76, 512, 513, + 608, 78, 79, 69, 291, 624, 722, 723, 178, 139, + 180, 621, 66, 182, 183, 184, 185, 575, 575, 633, + 466, 77, 383, 384, 7, 8, 78, 79, 385, 630, + 467, 814, 815, 816, 186, 187, 370, 180, 405, 142, + 182, 183, 184, 185, 194, 195, 196, 197, 143, 198, + 199, 150, 200, 201, 202, 203, 204, 205, 146, 91, + 728, 92, 93, 94, 729, 206, 95, 207, 208, 7, + 8, 959, 960, 209, 153, 210, 717, 718, 719, 154, + 502, 156, 809, 753, 754, 812, 178, 695, 180, 181, + 77, 182, 183, 184, 185, 78, 79, 132, 158, 92, + 93, 94, 211, 172, 706, 707, 708, 709, 174, 212, + 289, 290, 186, 187, 213, 214, 215, 783, 825, 826, + 229, 784, 84, 241, 216, 217, 218, 85, 86, 219, + 974, 87, 88, 242, 975, 733, 89, 90, 736, 976, + 872, 966, 967, 977, 981, 858, 698, 983, 982, 959, + 960, 984, 243, 703, 256, 880, 866, 244, 867, 868, + 747, 748, 220, 221, 178, 179, 180, 181, 260, 182, + 183, 184, 185, 985, 987, 989, 991, 986, 988, 990, + 992, 764, 993, 995, 263, 266, 994, 996, 972, 973, + 186, 187, 343, 344, 345, 346, 909, 910, 911, 912, + 780, 267, 222, 223, 268, 269, 270, 78, 79, 271, + 178, 179, 180, 181, 272, 182, 183, 184, 185, 273, + 755, 756, 274, 275, 276, 277, 898, 278, 799, 339, + 340, 821, 341, 279, 289, 342, 186, 187, 280, 281, + 282, 788, 283, 343, 344, 345, 346, 771, 836, 286, + 295, 296, 306, 301, 313, 347, 348, 349, 317, 330, + 354, 319, 785, 786, 318, 575, 331, 358, 332, 333, + 334, 335, 336, 337, 338, 352, 359, 360, 361, 362, + 371, 363, 364, 373, 389, 372, 374, 376, 378, 382, + 386, 847, 387, 388, 407, 395, 401, 402, 403, 409, + 408, 410, 852, 412, 413, 411, 414, 415, 421, 428, + 429, 430, 431, 432, 433, 434, 436, 440, 442, 449, + 435, 450, 453, 451, 452, 444, 869, 445, 454, 456, + 461, 460, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 486, 482, 487, 491, 493, 495, + 496, 497, 499, 500, 851, 501, 490, 509, 510, 498, + 514, 521, 525, 526, 511, 504, 530, 529, 536, 537, + 538, 540, 542, 545, 539, 543, 546, 547, 548, 549, + 553, 559, 563, 600, 870, 550, 565, 552, 572, 564, + 555, 585, 570, 567, 578, 574, 579, 877, 908, 571, + 580, 915, -2, 1, 586, 919, 920, 921, 922, 583, + 584, 610, 617, 616, 2, 590, 591, 587, 930, 931, + 932, 588, 592, 593, 935, 594, 3, 4, 5, 595, + 6, 596, 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, 597, 611, 618, 927, 619, 627, 598, + 629, 638, 661, 662, 666, 668, 674, 686, 677, 689, + 599, 693, 612, 696, 688, 690, 635, 628, 636, 691, + 705, 692, 1000, 1001, 634, 153, 637, 642, 38, 39, + 697, 639, 647, 640, 641, 649, 648, 650, 710, 711, + 712, 713, 714, 715, 716, 40, 41, 42, 43, 651, + 721, 652, 44, 685, 665, 45, 46, 653, 654, 655, + 656, 659, 608, 667, 669, 670, 671, 672, 724, 735, + 681, 742, 673, 740, 675, 47, 676, 678, 48, 49, + 50, 679, 51, 52, 53, 54, 55, 56, 57, 58, + 2, 680, 682, 683, 694, 59, 60, 684, 61, 62, + 687, 700, 3, 4, 5, 699, 6, 701, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 634, 20, 21, 22, 23, 24, 25, 26, 27, - 28, 29, 657, 661, 30, 31, 32, 33, 34, 663, - 669, 642, 643, 635, 636, 645, 646, 644, 995, 996, - 681, 672, 647, 683, 684, 685, 648, 649, 680, 686, - 650, 676, 651, 687, 654, 603, 688, 692, 660, 691, - 148, 662, 664, 700, 35, 36, 665, 666, 705, 706, - 707, 708, 709, 667, 694, 710, 689, 668, 670, 671, - 673, 37, 38, 39, 40, 674, 675, 677, 41, 678, - 679, 42, 43, 682, 711, 716, 695, 696, 719, 730, - 720, 725, 735, 737, 738, 729, 739, 740, 741, 732, - 733, 44, 744, 755, 45, 46, 47, 734, 48, 49, - 50, 51, 52, 53, 54, 55, 2, 746, 736, 747, - 752, 56, 57, 753, 58, 59, 756, 757, 3, 4, - 5, 758, 6, 760, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 761, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 762, 763, - 30, 31, 32, 33, 34, 767, 773, 776, 768, 774, - 777, 782, 784, 785, 786, 787, 788, 795, 797, 802, - 800, 789, 801, 790, 791, 808, 792, 813, 793, 832, - 796, 833, 798, 799, 834, 835, 840, 841, 803, 826, - 35, 36, 843, 805, 814, 806, 815, 817, 818, 819, - 822, 823, 824, 825, 827, 838, 828, 37, 38, 39, - 40, 844, 830, 858, 41, 845, 829, 42, 43, 839, - 848, 836, 849, 837, 850, 851, 854, 855, 856, 857, - 859, 873, 876, 878, 874, 879, 860, 44, 868, 894, - 45, 46, 47, 880, 48, 49, 50, 51, 52, 53, - 54, 55, 869, 411, 881, 882, 883, 56, 57, 884, - 58, 59, 885, 886, 887, 888, 889, 890, 891, 899, - 895, 896, 897, 901, 898, 900, 902, 909, 911, 919, - 912, 918, 920, 921, 924, 923, 929, 931, 932, 934, - 933, 935, 936, 943, 937, 944, 938, 945, 942, 959, - 946, 960, 973, 947, 949, 952, 958, 974, 994, 975, - 997, 998, 1005, 999, 1000, 1001, 1006, 1002, 1007, 1003, - 1008, 1004, 1018, 992, 112, 1009, 1010, 1011, 892, 1012, - 0, 951, 1013, 1014, 1015, 0, 1016, 0, 443, 0, - 0, 0, 0, 0, 0, 463, 0, 0, 1017 + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 725, + 730, 734, 738, 743, 737, 744, 745, 739, 751, 741, + 749, 746, 752, 757, 758, 760, 761, 762, 763, 765, + 766, 767, 768, 772, 773, 781, 778, 782, 779, 787, + 789, 790, 800, 802, 38, 39, 807, 791, 792, 793, + 805, 806, 808, 813, 794, 795, 818, 796, 797, 831, + 798, 40, 41, 42, 43, 810, 801, 803, 44, 804, + 837, 45, 46, 819, 811, 835, 820, 838, 822, 823, + 839, 824, 840, 827, 828, 829, 830, 833, 832, 834, + 841, 47, 845, 846, 48, 49, 50, 842, 51, 52, + 53, 54, 55, 56, 57, 58, 843, 848, 849, 844, + 853, 59, 60, 850, 61, 62, 854, 855, 856, 859, + 861, 860, 862, 864, 878, 863, 865, 873, 874, 879, + 881, 883, 884, 885, 886, 888, 887, 416, 889, 896, + 890, 891, 899, 892, 893, 894, 900, 904, 914, 916, + 895, 902, 905, 901, 903, 906, 907, 917, 924, 923, + 925, 926, 934, 928, 938, 936, 929, 937, 948, 939, + 940, 964, 941, 965, 942, 949, 943, 947, 950, 952, + 951, 1003, 954, 1002, 957, 963, 978, 999, 979, 980, + 1012, 1004, 1005, 1010, 1011, 1006, 1007, 1013, 1008, 1009, + 1014, 1015, 1016, 1017, 1018, 1019, 1023, 897, 997, 1020, + 1021, 1022, 956, 117, 0, 0, 468, 0, 0, 0, + 0, 0, 0, 0, 448 }; static const yytype_int16 yycheck[] = { - 26, 27, 0, 29, 217, 31, 32, 33, 34, 205, - 0, 38, 39, 40, 222, 65, 66, 33, 34, 479, - 72, 201, 0, 532, 146, 268, 269, 478, 530, 480, - 78, 78, 938, 28, 84, 26, 143, 250, 84, 65, - 903, 30, 31, 163, 252, 84, 26, 84, 98, 217, - 30, 31, 26, 26, 791, 81, 82, 83, 84, 166, - 86, 87, 52, 98, 244, 971, 246, 65, 26, 27, - 30, 31, 98, 26, 28, 65, 66, 103, 26, 27, - 84, 26, 250, 63, 57, 70, 71, 98, 268, 269, - 70, 72, 73, 74, 84, 26, 26, 26, 88, 836, - 30, 31, 69, 44, 57, 63, 26, 163, 98, 83, - 64, 163, 70, 161, 161, 63, 158, 58, 63, 165, - 162, 88, 70, 366, 105, 70, 165, 158, 165, 98, - 111, 162, 63, 26, 63, 161, 158, 16, 160, 70, - 19, 70, 21, 63, 23, 1008, 1009, 26, 146, 28, - 70, 30, 31, 613, 149, 657, 146, 36, 158, 98, - 150, 165, 162, 614, 154, 155, 156, 157, 146, 159, - 63, 26, 163, 154, 163, 30, 31, 70, 163, 98, - 26, 36, 158, 163, 63, 26, 366, 163, 168, 169, - 36, 70, 173, 174, 175, 176, 177, 178, 179, 180, - 181, 182, 158, 163, 26, 163, 162, 86, 87, 26, - 168, 169, 125, 126, 36, 163, 30, 31, 163, 149, - 168, 169, 63, 168, 169, 206, 207, 26, 26, 70, - 143, 158, 163, 26, 163, 162, 217, 168, 169, 168, - 169, 3, 4, 163, 26, 124, 36, 9, 168, 169, - 164, 494, 495, 243, 280, 463, 26, 283, 20, 163, - 30, 31, 288, 158, 63, 91, 92, 93, 163, 250, - 163, 70, 98, 63, 163, 168, 169, 303, 304, 305, - 70, 63, 135, 136, 163, 163, 26, 313, 70, 168, - 169, 158, 535, 98, 26, 162, 26, 163, 103, 104, - 30, 31, 30, 31, 30, 31, 36, 70, 71, 163, - 36, 301, 362, 363, 494, 495, 342, 343, 344, 441, - 83, 84, 163, 63, 164, 158, 164, 168, 169, 162, - 70, 63, 164, 63, 164, 63, 164, 163, 70, 26, - 70, 36, 70, 30, 31, 106, 107, 77, 374, 375, - 376, 112, 133, 134, 63, 815, 86, 87, 88, 163, - 90, 70, 822, 163, 163, 391, 392, 393, 63, 168, - 169, 70, 71, 163, 364, 70, 402, 367, 168, 169, - 163, 163, 133, 134, 83, 84, 168, 169, 378, 379, - 380, 163, 418, 70, 71, 421, 163, 423, 424, 425, - 26, 427, 428, 429, 30, 31, 83, 84, 434, 399, - 36, 920, 0, 922, 63, 163, 98, 63, 100, 101, - 102, 70, 98, 163, 70, 451, 106, 107, 168, 169, - 36, 163, 112, 163, 163, 163, 168, 169, 168, 169, - 168, 169, 511, 441, 26, 514, 515, 26, 446, 447, - 36, 441, 70, 71, 163, 36, 446, 447, 36, 168, - 169, 129, 130, 441, 67, 83, 84, 493, 163, 72, - 73, 139, 140, 168, 169, 501, 36, 79, 80, 81, - 82, 70, 71, 72, 697, 501, 699, 5, 6, 7, - 8, 26, 10, 11, 173, 13, 14, 15, 16, 17, - 18, 98, 91, 92, 93, 26, 103, 104, 26, 98, - 28, 29, 30, 31, 163, 26, 34, 163, 36, 168, - 169, 26, 168, 169, 65, 66, 67, 68, 26, 70, - 71, 72, 73, 729, 70, 71, 732, 98, 158, 100, - 101, 102, 162, 569, 105, 63, 26, 83, 84, 158, - 91, 92, 70, 162, 126, 127, 128, 75, 76, 77, - 586, 587, 588, 589, 83, 84, 158, 85, 86, 87, - 162, 158, 90, 65, 66, 162, 68, 67, 70, 71, - 70, 71, 72, 73, 26, 575, 26, 79, 80, 81, - 82, 617, 582, 583, 620, 26, 792, 121, 122, 91, - 92, 93, 126, 127, 128, 123, 124, 803, 816, 805, - 806, 158, 125, 126, 158, 162, 642, 643, 162, 26, - 158, 162, 28, 831, 162, 26, 65, 66, 67, 68, - 26, 70, 71, 72, 73, 26, 65, 663, 67, 68, - 72, 70, 71, 72, 73, 163, 164, 170, 171, 172, - 168, 169, 91, 92, 141, 142, 26, 158, 685, 649, - 650, 162, 91, 92, 158, 65, 26, 67, 162, 26, - 70, 71, 72, 73, 36, 67, 26, 857, 70, 71, - 72, 73, 70, 71, 710, 28, 676, 121, 122, 26, - 740, 91, 92, 136, 137, 28, 694, 144, 145, 91, - 92, 691, 692, 89, 694, 121, 122, 757, 94, 95, - 163, 163, 98, 99, 158, 160, 71, 103, 104, 108, - 109, 110, 111, 26, 26, 163, 163, 163, 163, 26, - 163, 26, 26, 163, 26, 163, 163, 163, 163, 71, - 164, 164, 163, 163, 163, 163, 163, 773, 163, 163, - 163, 26, 98, 36, 36, 164, 158, 98, 784, 162, - 71, 71, 174, 162, 158, 158, 26, 162, 158, 98, - 26, 158, 26, 158, 158, 158, 158, 158, 36, 126, - 136, 158, 808, 162, 158, 165, 159, 165, 159, 26, - 159, 26, 26, 783, 26, 26, 36, 26, 26, 26, - 26, 26, 26, 26, 163, 26, 26, 159, 159, 163, - 163, 159, 26, 35, 159, 26, 71, 26, 162, 158, - 132, 26, 26, 813, 26, 138, 26, 22, 36, 159, - 26, 159, 158, 26, 26, 162, 826, 26, 26, 26, - 165, 165, 26, 165, 26, 26, 163, 98, 162, 165, - 165, 98, 160, 36, 880, 162, 36, 883, 158, 136, - 98, 887, 888, 889, 890, 135, 162, 158, 98, 26, - 160, 160, 160, 160, 900, 901, 902, 158, 0, 1, - 158, 143, 909, 162, 158, 158, 158, 36, 36, 158, - 12, 162, 36, 26, 162, 26, 26, 158, 165, 158, - 163, 158, 24, 25, 26, 895, 28, 36, 30, 31, + 27, 28, 0, 30, 31, 32, 227, 34, 35, 36, + 37, 41, 42, 43, 68, 69, 222, 0, 210, 36, + 37, 484, 151, 273, 274, 537, 0, 26, 30, 31, + 206, 30, 31, 87, 26, 535, 257, 36, 28, 72, + 483, 68, 485, 63, 84, 30, 31, 101, 26, 255, + 70, 30, 31, 26, 70, 71, 28, 84, 85, 86, + 87, 63, 89, 90, 63, 84, 47, 78, 70, 943, + 68, 70, 26, 249, 101, 251, 163, 78, 77, 106, + 61, 55, 222, 143, 57, 26, 27, 86, 87, 88, + 98, 90, 64, 908, 68, 69, 796, 273, 274, 75, + 76, 77, 976, 57, 16, 83, 166, 19, 158, 21, + 36, 23, 162, 87, 26, 255, 28, 91, 30, 31, + 84, 371, 63, 98, 36, 165, 69, 101, 26, 70, + 163, 26, 30, 31, 110, 30, 31, 63, 84, 166, + 116, 841, 98, 163, 70, 88, 165, 163, 168, 169, + 161, 63, 26, 151, 98, 618, 26, 27, 70, 149, + 161, 163, 662, 26, 163, 63, 168, 169, 151, 168, + 169, 163, 70, 36, 86, 87, 619, 151, 163, 30, + 31, 155, 26, 159, 163, 159, 160, 161, 162, 63, + 164, 98, 36, 63, 26, 371, 70, 26, 1013, 1014, + 70, 165, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 124, 158, 91, 92, 93, 162, 26, 165, + 67, 98, 163, 70, 71, 72, 73, 168, 169, 516, + 163, 63, 519, 520, 63, 211, 212, 163, 70, 26, + 26, 70, 168, 169, 91, 92, 222, 468, 26, 499, + 500, 163, 135, 136, 149, 63, 168, 169, 285, 70, + 71, 288, 70, 3, 4, 163, 293, 26, 63, 9, + 168, 169, 83, 84, 248, 70, 158, 63, 160, 255, + 20, 308, 309, 310, 70, 63, 163, 125, 126, 163, + 540, 318, 70, 163, 168, 169, 158, 163, 168, 169, + 162, 26, 70, 71, 26, 143, 98, 70, 71, 72, + 163, 103, 104, 367, 368, 83, 84, 446, 164, 26, + 347, 348, 349, 499, 500, 164, 63, 164, 91, 92, + 93, 163, 306, 70, 163, 98, 168, 169, 63, 168, + 169, 63, 26, 164, 26, 70, 30, 31, 70, 126, + 127, 128, 379, 380, 381, 163, 63, 820, 133, 134, + 168, 169, 158, 70, 827, 70, 71, 163, 163, 396, + 397, 398, 163, 168, 169, 83, 84, 163, 83, 84, + 407, 63, 168, 169, 164, 163, 30, 31, 70, 26, + 168, 169, 36, 30, 31, 369, 423, 164, 372, 426, + 158, 428, 429, 430, 162, 432, 433, 434, 163, 383, + 384, 385, 439, 925, 163, 927, 163, 129, 130, 67, + 70, 71, 163, 36, 72, 73, 163, 139, 140, 456, + 404, 168, 169, 83, 84, 26, 106, 107, 163, 30, + 31, 163, 112, 168, 169, 36, 168, 169, 446, 163, + 63, 70, 71, 451, 452, 158, 163, 70, 133, 134, + 163, 168, 169, 446, 83, 84, 125, 126, 65, 163, + 67, 498, 446, 70, 71, 72, 73, 451, 452, 506, + 26, 163, 106, 107, 30, 31, 168, 169, 112, 506, + 36, 170, 171, 172, 91, 92, 702, 67, 704, 163, + 70, 71, 72, 73, 5, 6, 7, 8, 163, 10, + 11, 0, 13, 14, 15, 16, 17, 18, 26, 98, + 158, 100, 101, 102, 162, 26, 105, 28, 29, 30, + 31, 121, 122, 34, 98, 36, 126, 127, 128, 103, + 104, 98, 734, 141, 142, 737, 65, 574, 67, 68, + 163, 70, 71, 72, 73, 168, 169, 98, 36, 100, + 101, 102, 63, 163, 591, 592, 593, 594, 26, 70, + 70, 71, 91, 92, 75, 76, 77, 158, 121, 122, + 26, 162, 89, 36, 85, 86, 87, 94, 95, 90, + 158, 98, 99, 36, 162, 622, 103, 104, 625, 158, + 821, 136, 137, 162, 158, 797, 580, 158, 162, 121, + 122, 162, 36, 587, 588, 836, 808, 36, 810, 811, + 647, 648, 123, 124, 65, 66, 67, 68, 26, 70, + 71, 72, 73, 158, 158, 158, 158, 162, 162, 162, + 162, 668, 158, 158, 173, 26, 162, 162, 144, 145, + 91, 92, 79, 80, 81, 82, 108, 109, 110, 111, + 690, 26, 163, 164, 26, 26, 26, 168, 169, 26, + 65, 66, 67, 68, 26, 70, 71, 72, 73, 26, + 654, 655, 26, 28, 26, 26, 862, 26, 715, 65, + 66, 745, 68, 26, 70, 71, 91, 92, 26, 26, + 36, 699, 26, 79, 80, 81, 82, 681, 762, 28, + 26, 28, 163, 72, 163, 91, 92, 93, 158, 163, + 71, 162, 696, 697, 160, 699, 163, 26, 163, 163, + 163, 163, 163, 163, 163, 163, 26, 26, 26, 26, + 26, 164, 164, 163, 26, 71, 163, 163, 163, 163, + 163, 778, 163, 163, 158, 98, 36, 36, 164, 162, + 98, 71, 789, 162, 71, 174, 158, 158, 162, 158, + 158, 158, 158, 158, 158, 158, 98, 26, 26, 26, + 162, 36, 159, 158, 158, 165, 813, 165, 159, 159, + 136, 126, 26, 26, 26, 26, 26, 36, 26, 26, + 26, 26, 26, 26, 26, 163, 26, 163, 163, 159, + 159, 159, 26, 26, 788, 71, 35, 26, 26, 159, + 132, 26, 26, 26, 158, 162, 26, 138, 22, 36, + 159, 26, 162, 26, 159, 158, 26, 26, 26, 26, + 26, 26, 26, 26, 818, 165, 98, 165, 98, 163, + 165, 136, 165, 162, 36, 160, 36, 831, 885, 165, + 158, 888, 0, 1, 135, 892, 893, 894, 895, 162, + 162, 162, 36, 143, 12, 158, 160, 98, 905, 906, + 907, 98, 160, 160, 914, 160, 24, 25, 26, 158, + 28, 158, 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, 158, 162, 36, 900, 36, 26, 158, + 26, 26, 36, 36, 36, 92, 98, 26, 98, 26, + 158, 26, 158, 70, 98, 98, 158, 162, 158, 98, + 26, 98, 979, 980, 165, 98, 158, 163, 96, 97, + 77, 162, 158, 162, 162, 162, 158, 158, 26, 36, + 26, 36, 26, 91, 26, 113, 114, 115, 116, 158, + 26, 162, 120, 131, 162, 123, 124, 163, 163, 163, + 163, 163, 163, 162, 162, 162, 162, 162, 26, 26, + 158, 26, 165, 173, 165, 143, 165, 162, 146, 147, + 148, 162, 150, 151, 152, 153, 154, 155, 156, 157, + 12, 162, 162, 162, 161, 163, 164, 162, 166, 167, + 163, 162, 24, 25, 26, 158, 28, 162, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 162, 44, 45, 46, 47, 48, 49, 50, 51, - 52, 53, 36, 36, 56, 57, 58, 59, 60, 92, - 98, 158, 158, 162, 162, 158, 158, 162, 974, 975, - 26, 98, 162, 98, 26, 98, 163, 163, 131, 98, - 163, 158, 163, 98, 163, 163, 26, 77, 162, 70, - 98, 162, 162, 26, 96, 97, 162, 162, 26, 36, - 26, 36, 26, 162, 158, 91, 161, 165, 165, 165, - 162, 113, 114, 115, 116, 162, 162, 162, 120, 162, - 162, 123, 124, 163, 26, 26, 162, 162, 26, 26, - 162, 162, 173, 26, 26, 165, 26, 98, 136, 165, - 162, 143, 163, 26, 146, 147, 148, 165, 150, 151, - 152, 153, 154, 155, 156, 157, 12, 36, 165, 36, - 126, 163, 164, 36, 166, 167, 165, 98, 24, 25, - 26, 26, 28, 98, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 26, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 98, 98, - 56, 57, 58, 59, 60, 162, 160, 26, 131, 164, - 26, 158, 160, 158, 158, 158, 158, 98, 98, 126, - 98, 162, 143, 162, 162, 91, 162, 98, 162, 98, - 162, 26, 162, 162, 36, 26, 26, 26, 165, 158, - 96, 97, 26, 165, 162, 165, 162, 162, 162, 162, - 162, 162, 162, 162, 158, 163, 162, 113, 114, 115, - 116, 26, 165, 32, 120, 28, 162, 123, 124, 163, - 26, 162, 26, 162, 26, 26, 163, 162, 26, 26, - 162, 26, 26, 26, 72, 26, 162, 143, 162, 71, - 146, 147, 148, 160, 150, 151, 152, 153, 154, 155, - 156, 157, 162, 84, 163, 162, 160, 163, 164, 162, - 166, 167, 163, 162, 160, 160, 160, 160, 133, 36, - 70, 162, 158, 160, 162, 92, 160, 98, 126, 26, - 163, 162, 26, 33, 71, 28, 162, 162, 162, 162, - 137, 162, 162, 22, 162, 158, 163, 158, 162, 26, - 162, 26, 36, 163, 163, 163, 163, 160, 162, 160, - 137, 136, 162, 137, 137, 137, 162, 137, 72, 137, - 162, 137, 36, 969, 34, 162, 162, 162, 856, 162, - -1, 936, 162, 162, 162, -1, 162, -1, 293, -1, - -1, -1, -1, -1, -1, 312, -1, -1, 162 + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 162, + 162, 165, 162, 26, 165, 26, 98, 165, 36, 165, + 163, 136, 36, 126, 36, 26, 165, 98, 26, 98, + 26, 98, 98, 162, 131, 26, 160, 26, 164, 158, + 160, 158, 98, 98, 96, 97, 126, 158, 158, 158, + 98, 143, 165, 91, 162, 162, 98, 162, 162, 158, + 162, 113, 114, 115, 116, 165, 162, 162, 120, 162, + 98, 123, 124, 162, 165, 165, 162, 26, 162, 162, + 36, 162, 26, 162, 162, 162, 162, 162, 158, 162, + 162, 143, 26, 26, 146, 147, 148, 162, 150, 151, + 152, 153, 154, 155, 156, 157, 163, 26, 26, 163, + 26, 163, 164, 28, 166, 167, 26, 26, 26, 163, + 26, 162, 26, 162, 26, 32, 162, 162, 162, 72, + 26, 26, 26, 160, 163, 160, 162, 84, 162, 133, + 163, 162, 71, 160, 160, 160, 70, 36, 98, 126, + 160, 158, 92, 162, 162, 160, 160, 163, 26, 162, + 26, 33, 162, 28, 137, 162, 71, 162, 22, 162, + 162, 26, 162, 26, 162, 158, 163, 162, 158, 163, + 162, 136, 163, 137, 163, 163, 36, 162, 160, 160, + 72, 137, 137, 162, 162, 137, 137, 162, 137, 137, + 162, 162, 162, 162, 162, 162, 36, 861, 974, 162, + 162, 162, 941, 37, -1, -1, 317, -1, -1, -1, + -1, -1, -1, -1, 298 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -2029,107 +2076,107 @@ static const yytype_uint8 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, 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, - 176, 177, 178, 179, 198, 206, 207, 208, 209, 210, - 213, 163, 63, 70, 163, 168, 169, 214, 219, 220, - 221, 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, 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, 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, 26, - 221, 221, 221, 65, 66, 67, 68, 70, 71, 72, - 73, 91, 92, 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, 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, 160, 162, 221, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 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 + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 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, 176, 177, 178, 179, 198, 206, 207, + 208, 209, 210, 213, 163, 63, 70, 163, 168, 169, + 214, 219, 220, 221, 89, 94, 95, 98, 99, 103, + 104, 98, 100, 101, 102, 105, 212, 98, 98, 98, + 98, 98, 26, 26, 220, 220, 163, 220, 220, 220, + 163, 220, 220, 214, 218, 220, 163, 218, 220, 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, 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, 26, 221, 221, 221, 65, 66, + 67, 68, 70, 71, 72, 73, 91, 92, 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, 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, 160, 162, + 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, + 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) @@ -2203,7 +2250,7 @@ while (YYID (0)) we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT -# if YYLTYPE_IS_TRIVIAL +# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ @@ -2944,7 +2991,7 @@ yyreduce: switch (yyn) { case 3: -#line 569 "bfin-parse.y" +#line 610 "bfin-parse.y" { insn = (yyvsp[(1) - (1)].instr); if (insn == (INSTR_T) 0) @@ -2957,32 +3004,32 @@ yyreduce: break; case 5: -#line 583 "bfin-parse.y" +#line 624 "bfin-parse.y" { if (((yyvsp[(1) - (6)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(3) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr)); else if (is_group2 ((yyvsp[(3) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group"); } else if (((yyvsp[(3) - (6)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(5) - (6)].instr)); else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(5) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (6)].instr), (yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group"); } else if (((yyvsp[(5) - (6)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(1) - (6)].instr)) && is_group2 ((yyvsp[(3) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(5) - (6)].instr), (yyvsp[(1) - (6)].instr), (yyvsp[(3) - (6)].instr)); else if (is_group2 ((yyvsp[(1) - (6)].instr)) && is_group1 ((yyvsp[(3) - (6)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(5) - (6)].instr), (yyvsp[(3) - (6)].instr), (yyvsp[(1) - (6)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group"); } @@ -2992,37 +3039,37 @@ yyreduce: break; case 6: -#line 616 "bfin-parse.y" +#line 657 "bfin-parse.y" { if (((yyvsp[(1) - (4)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr), 0); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr), 0); else if (is_group2 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(1) - (4)].instr), 0, (yyvsp[(3) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(1) - (4)].instr), 0, (yyvsp[(3) - (4)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group"); } else if (((yyvsp[(3) - (4)].instr)->value & 0xf800) == 0xc000) { if (is_group1 ((yyvsp[(1) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr), 0); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr), 0); else if (is_group2 ((yyvsp[(1) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr ((yyvsp[(3) - (4)].instr), 0, (yyvsp[(1) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 ((yyvsp[(3) - (4)].instr), 0, (yyvsp[(1) - (4)].instr)); else return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group"); } else if (is_group1 ((yyvsp[(1) - (4)].instr)) && is_group2 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[(1) - (4)].instr), (yyvsp[(3) - (4)].instr)); else if (is_group2 ((yyvsp[(1) - (4)].instr)) && is_group1 ((yyvsp[(3) - (4)].instr))) - (yyval.instr) = bfin_gen_multi_instr (0, (yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].instr)); + (yyval.instr) = gen_multi_instr_1 (0, (yyvsp[(3) - (4)].instr), (yyvsp[(1) - (4)].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" +#line 684 "bfin-parse.y" { (yyval.instr) = 0; yyerror (""); @@ -3031,19 +3078,22 @@ yyreduce: break; case 8: -#line 654 "bfin-parse.y" +#line 695 "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" +#line 699 "bfin-parse.y" { int op0, op1; int w0 = 0, w1 = 0; int h00, h10, h01, h11; + if (check_macfunc_option (&(yyvsp[(1) - (2)].macfunc), &(yyvsp[(2) - (2)].mod)) < 0) + return yyerror ("bad option"); + if ((yyvsp[(1) - (2)].macfunc).n == 0) { if ((yyvsp[(2) - (2)].mod).MM) @@ -3072,7 +3122,7 @@ yyreduce: break; case 10: -#line 693 "bfin-parse.y" +#line 737 "bfin-parse.y" { Register *dst; @@ -3092,7 +3142,7 @@ yyreduce: break; case 11: -#line 713 "bfin-parse.y" +#line 757 "bfin-parse.y" { notethat ("dsp32alu: DISALGNEXCPT\n"); (yyval.instr) = DSP32ALU (18, 0, 0, 0, 0, 0, 0, 0, 3); @@ -3100,7 +3150,7 @@ yyreduce: break; case 12: -#line 718 "bfin-parse.y" +#line 762 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg))) { @@ -3113,7 +3163,7 @@ yyreduce: break; case 13: -#line 728 "bfin-parse.y" +#line 772 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(4) - (6)].reg)) && IS_A1 ((yyvsp[(5) - (6)].reg))) { @@ -3126,7 +3176,7 @@ yyreduce: break; case 14: -#line 738 "bfin-parse.y" +#line 782 "bfin-parse.y" { notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n"); (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 0); @@ -3134,7 +3184,7 @@ yyreduce: break; case 15: -#line 743 "bfin-parse.y" +#line 787 "bfin-parse.y" { notethat ("dsp32alu: A_ZERO_DOT_H = dregs_hi\n"); (yyval.instr) = DSP32ALU (9, IS_H ((yyvsp[(3) - (3)].reg)), 0, 0, &(yyvsp[(3) - (3)].reg), 0, 0, 0, 2); @@ -3142,7 +3192,7 @@ yyreduce: break; case 16: -#line 749 "bfin-parse.y" +#line 793 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg))) return yyerror ("Dregs expected"); @@ -3159,9 +3209,9 @@ yyreduce: break; case 17: -#line 765 "bfin-parse.y" +#line 809 "bfin-parse.y" { - if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG((yyvsp[(4) - (17)].reg))) + if (!IS_DREG ((yyvsp[(2) - (17)].reg)) || !IS_DREG ((yyvsp[(4) - (17)].reg))) return yyerror ("Dregs expected"); else if (!valid_dreg_pair (&(yyvsp[(9) - (17)].reg), (yyvsp[(11) - (17)].expr))) return yyerror ("Bad dreg pair"); @@ -3176,7 +3226,7 @@ yyreduce: break; case 18: -#line 780 "bfin-parse.y" +#line 824 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(2) - (11)].reg)) || !IS_DREG ((yyvsp[(4) - (11)].reg))) return yyerror ("Dregs expected"); @@ -3191,7 +3241,7 @@ yyreduce: break; case 19: -#line 792 "bfin-parse.y" +#line 836 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (11)].reg)) && IS_DREG ((yyvsp[(4) - (11)].reg)) && IS_DREG ((yyvsp[(8) - (11)].reg))) { @@ -3204,7 +3254,7 @@ yyreduce: break; case 20: -#line 803 "bfin-parse.y" +#line 847 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg))) { @@ -3217,7 +3267,7 @@ yyreduce: break; case 21: -#line 815 "bfin-parse.y" +#line 859 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (12)].reg)) && IS_DREG ((yyvsp[(7) - (12)].reg)) && !REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(5) - (12)].reg)) && IS_A1 ((yyvsp[(9) - (12)].reg)) && !IS_A1 ((yyvsp[(11) - (12)].reg))) @@ -3238,7 +3288,7 @@ yyreduce: break; case 22: -#line 834 "bfin-parse.y" +#line 878 "bfin-parse.y" { if ((yyvsp[(4) - (12)].r0).r0 == (yyvsp[(10) - (12)].r0).r0) return yyerror ("Operators must differ"); @@ -3256,7 +3306,7 @@ yyreduce: break; case 23: -#line 852 "bfin-parse.y" +#line 896 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(3) - (12)].reg), (yyvsp[(9) - (12)].reg)) || !REG_SAME ((yyvsp[(5) - (12)].reg), (yyvsp[(11) - (12)].reg))) return yyerror ("Differing source registers"); @@ -3281,7 +3331,7 @@ yyreduce: break; case 24: -#line 875 "bfin-parse.y" +#line 919 "bfin-parse.y" { int op; @@ -3306,7 +3356,7 @@ yyreduce: break; case 25: -#line 897 "bfin-parse.y" +#line 941 "bfin-parse.y" { notethat ("dsp32alu: Ax = ABS Ax\n"); (yyval.instr) = DSP32ALU (16, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg))); @@ -3314,7 +3364,7 @@ yyreduce: break; case 26: -#line 902 "bfin-parse.y" +#line 946 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(3) - (3)].reg))) { @@ -3327,7 +3377,7 @@ yyreduce: break; case 27: -#line 912 "bfin-parse.y" +#line 956 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(3) - (3)].reg))) { @@ -3340,7 +3390,7 @@ yyreduce: break; case 28: -#line 923 "bfin-parse.y" +#line 967 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -3353,7 +3403,7 @@ yyreduce: break; case 29: -#line 934 "bfin-parse.y" +#line 978 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3370,7 +3420,7 @@ yyreduce: break; case 30: -#line 948 "bfin-parse.y" +#line 992 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (12)].reg))) return yyerror ("Dregs expected"); @@ -3387,7 +3437,7 @@ yyreduce: break; case 31: -#line 964 "bfin-parse.y" +#line 1008 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3404,7 +3454,7 @@ yyreduce: break; case 32: -#line 980 "bfin-parse.y" +#line 1024 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3421,7 +3471,7 @@ yyreduce: break; case 33: -#line 996 "bfin-parse.y" +#line 1040 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (13)].reg))) return yyerror ("Dregs expected"); @@ -3438,7 +3488,7 @@ yyreduce: break; case 34: -#line 1011 "bfin-parse.y" +#line 1055 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -3451,7 +3501,7 @@ yyreduce: break; case 35: -#line 1023 "bfin-parse.y" +#line 1067 "bfin-parse.y" { if (IS_HCOMPL ((yyvsp[(1) - (17)].reg), (yyvsp[(3) - (17)].reg)) && IS_HCOMPL ((yyvsp[(7) - (17)].reg), (yyvsp[(14) - (17)].reg)) && IS_HCOMPL ((yyvsp[(10) - (17)].reg), (yyvsp[(17) - (17)].reg))) { @@ -3467,7 +3517,7 @@ yyreduce: break; case 36: -#line 1036 "bfin-parse.y" +#line 1080 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) { @@ -3496,7 +3546,7 @@ yyreduce: break; case 37: -#line 1062 "bfin-parse.y" +#line 1106 "bfin-parse.y" { int op; @@ -3516,7 +3566,7 @@ yyreduce: break; case 38: -#line 1080 "bfin-parse.y" +#line 1124 "bfin-parse.y" { notethat ("dsp32alu: Ax = - Ax\n"); (yyval.instr) = DSP32ALU (14, IS_A1 ((yyvsp[(1) - (3)].reg)), 0, 0, 0, 0, 0, 0, IS_A1 ((yyvsp[(3) - (3)].reg))); @@ -3524,7 +3574,7 @@ yyreduce: break; case 39: -#line 1085 "bfin-parse.y" +#line 1129 "bfin-parse.y" { notethat ("dsp32alu: dregs_lo = dregs_lo +- dregs_lo (amod1)\n"); (yyval.instr) = DSP32ALU (2 | (yyvsp[(4) - (6)].r0).r0, IS_H ((yyvsp[(1) - (6)].reg)), 0, &(yyvsp[(1) - (6)].reg), &(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), @@ -3533,7 +3583,7 @@ yyreduce: break; case 40: -#line 1091 "bfin-parse.y" +#line 1135 "bfin-parse.y" { if (EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 0 && !REG_SAME ((yyvsp[(1) - (3)].reg), (yyvsp[(2) - (3)].reg))) { @@ -3546,7 +3596,7 @@ yyreduce: break; case 41: -#line 1103 "bfin-parse.y" +#line 1147 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(2) - (5)].reg))) { @@ -3559,7 +3609,7 @@ yyreduce: break; case 42: -#line 1114 "bfin-parse.y" +#line 1158 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg))) { @@ -3572,7 +3622,7 @@ yyreduce: break; case 43: -#line 1125 "bfin-parse.y" +#line 1169 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg))) { @@ -3585,7 +3635,7 @@ yyreduce: break; case 44: -#line 1136 "bfin-parse.y" +#line 1180 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg))) { @@ -3598,7 +3648,7 @@ yyreduce: break; case 45: -#line 1147 "bfin-parse.y" +#line 1191 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (2)].reg), (yyvsp[(2) - (2)].reg))) { @@ -3611,7 +3661,7 @@ yyreduce: break; case 46: -#line 1158 "bfin-parse.y" +#line 1202 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (2)].reg))) { @@ -3624,7 +3674,7 @@ yyreduce: break; case 47: -#line 1169 "bfin-parse.y" +#line 1213 "bfin-parse.y" { if (!IS_H ((yyvsp[(3) - (4)].reg))) { @@ -3652,7 +3702,7 @@ yyreduce: break; case 48: -#line 1195 "bfin-parse.y" +#line 1239 "bfin-parse.y" { notethat ("LDIMMhalf: pregs_half = imm16\n"); @@ -3668,7 +3718,7 @@ yyreduce: break; case 49: -#line 1209 "bfin-parse.y" +#line 1253 "bfin-parse.y" { notethat ("dsp32alu: An = 0\n"); @@ -3680,7 +3730,7 @@ yyreduce: break; case 50: -#line 1219 "bfin-parse.y" +#line 1263 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (4)].reg)) && !IS_PREG ((yyvsp[(1) - (4)].reg)) && !IS_IREG ((yyvsp[(1) - (4)].reg)) && !IS_MREG ((yyvsp[(1) - (4)].reg)) && !IS_BREG ((yyvsp[(1) - (4)].reg)) && !IS_LREG ((yyvsp[(1) - (4)].reg))) @@ -3727,7 +3777,7 @@ yyreduce: break; case 51: -#line 1264 "bfin-parse.y" +#line 1308 "bfin-parse.y" { if (IS_H ((yyvsp[(1) - (3)].reg))) return yyerror ("Low reg expected"); @@ -3748,7 +3798,7 @@ yyreduce: break; case 52: -#line 1283 "bfin-parse.y" +#line 1327 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) { @@ -3761,7 +3811,7 @@ yyreduce: break; case 53: -#line 1294 "bfin-parse.y" +#line 1338 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(3) - (4)].reg))) { @@ -3774,7 +3824,7 @@ yyreduce: break; case 54: -#line 1305 "bfin-parse.y" +#line 1349 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg))) { @@ -3787,7 +3837,7 @@ yyreduce: break; case 55: -#line 1316 "bfin-parse.y" +#line 1360 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(3) - (7)].reg)) && REG_SAME ((yyvsp[(5) - (7)].reg), (yyvsp[(7) - (7)].reg)) && !REG_SAME ((yyvsp[(1) - (7)].reg), (yyvsp[(5) - (7)].reg))) { @@ -3800,7 +3850,7 @@ yyreduce: break; case 56: -#line 1327 "bfin-parse.y" +#line 1371 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(1) - (3)].reg)) && IS_A1 ((yyvsp[(2) - (3)].reg))) { @@ -3813,7 +3863,7 @@ yyreduce: break; case 57: -#line 1338 "bfin-parse.y" +#line 1382 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg)) && EXPR_VALUE ((yyvsp[(3) - (3)].expr)) == 4) { @@ -3831,7 +3881,7 @@ yyreduce: break; case 58: -#line 1354 "bfin-parse.y" +#line 1398 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (6)].reg)) && IS_MREG ((yyvsp[(3) - (6)].reg))) { @@ -3850,7 +3900,7 @@ yyreduce: break; case 59: -#line 1371 "bfin-parse.y" +#line 1415 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg))) { @@ -3868,7 +3918,7 @@ yyreduce: break; case 60: -#line 1387 "bfin-parse.y" +#line 1431 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(1) - (4)].reg)) && IS_A1 ((yyvsp[(3) - (4)].reg))) { @@ -3881,7 +3931,7 @@ yyreduce: break; case 61: -#line 1398 "bfin-parse.y" +#line 1442 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg)) && IS_MREG ((yyvsp[(3) - (3)].reg))) { @@ -3894,7 +3944,7 @@ yyreduce: break; case 62: -#line 1409 "bfin-parse.y" +#line 1453 "bfin-parse.y" { if (IS_IREG ((yyvsp[(1) - (3)].reg))) { @@ -3921,13 +3971,15 @@ yyreduce: notethat ("COMPI2opD: dregs += imm7\n"); (yyval.instr) = COMPI2OPD (&(yyvsp[(1) - (3)].reg), imm7 ((yyvsp[(3) - (3)].expr)), 1); } + else if ((IS_DREG ((yyvsp[(1) - (3)].reg)) || IS_PREG ((yyvsp[(1) - (3)].reg))) && IS_CONST ((yyvsp[(3) - (3)].expr))) + return yyerror ("Immediate value out of range"); else return yyerror ("Register mismatch"); } break; case 63: -#line 1440 "bfin-parse.y" +#line 1486 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -3940,7 +3992,7 @@ yyreduce: break; case 64: -#line 1451 "bfin-parse.y" +#line 1497 "bfin-parse.y" { if (!valid_dreg_pair (&(yyvsp[(3) - (11)].reg), (yyvsp[(5) - (11)].expr))) return yyerror ("Bad dreg pair"); @@ -3955,7 +4007,7 @@ yyreduce: break; case 65: -#line 1464 "bfin-parse.y" +#line 1510 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(2) - (11)].reg)) && REG_SAME ((yyvsp[(7) - (11)].reg), (yyvsp[(8) - (11)].reg)) && !REG_SAME ((yyvsp[(1) - (11)].reg), (yyvsp[(7) - (11)].reg))) { @@ -3968,7 +4020,7 @@ yyreduce: break; case 66: -#line 1475 "bfin-parse.y" +#line 1521 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(4) - (9)].reg)) && IS_DREG ((yyvsp[(6) - (9)].reg)) && REG_SAME ((yyvsp[(1) - (9)].reg), (yyvsp[(4) - (9)].reg))) @@ -4008,7 +4060,7 @@ yyreduce: break; case 67: -#line 1514 "bfin-parse.y" +#line 1560 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) { @@ -4021,7 +4073,7 @@ yyreduce: break; case 68: -#line 1524 "bfin-parse.y" +#line 1570 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) { @@ -4034,7 +4086,7 @@ yyreduce: break; case 69: -#line 1534 "bfin-parse.y" +#line 1580 "bfin-parse.y" { if (IS_PREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(3) - (9)].reg)) && IS_PREG ((yyvsp[(6) - (9)].reg))) { @@ -4057,47 +4109,51 @@ yyreduce: break; case 70: -#line 1554 "bfin-parse.y" +#line 1600 "bfin-parse.y" { - if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1) { notethat ("CCflag: CC = A0 == A1\n"); (yyval.instr) = CCFLAG (0, 0, 5, 0, 0); } else - return yyerror ("CC register expected"); + return yyerror ("AREGs are in bad order or same"); } break; case 71: -#line 1564 "bfin-parse.y" +#line 1610 "bfin-parse.y" { - if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1) { notethat ("CCflag: CC = A0 < A1\n"); (yyval.instr) = CCFLAG (0, 0, 6, 0, 0); } else - return yyerror ("Register mismatch"); + return yyerror ("AREGs are in bad order or same"); } break; case 72: -#line 1574 "bfin-parse.y" +#line 1620 "bfin-parse.y" { - if (REG_CLASS((yyvsp[(3) - (6)].reg)) == REG_CLASS((yyvsp[(5) - (6)].reg))) + if ((IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + || (IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg)))) { notethat ("CCflag: CC = dpregs < dpregs\n"); (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); } else - return yyerror ("Compare only of same register class"); + return yyerror ("Bad register in comparison"); } break; case 73: -#line 1584 "bfin-parse.y" +#line 1631 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(3) - (6)].reg)) && !IS_PREG ((yyvsp[(3) - (6)].reg))) + return yyerror ("Bad register in comparison"); + if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3)) || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3))) { @@ -4110,19 +4166,25 @@ yyreduce: break; case 74: -#line 1595 "bfin-parse.y" +#line 1645 "bfin-parse.y" { - if (REG_CLASS((yyvsp[(3) - (5)].reg)) == REG_CLASS((yyvsp[(5) - (5)].reg))) + if ((IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) + || (IS_PREG ((yyvsp[(3) - (5)].reg)) && IS_PREG ((yyvsp[(5) - (5)].reg)))) { notethat ("CCflag: CC = dpregs == dpregs\n"); (yyval.instr) = CCFLAG (&(yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg).regno & CODE_MASK, 0, 0, IS_PREG ((yyvsp[(3) - (5)].reg)) ? 1 : 0); - } + } + else + return yyerror ("Bad register in comparison"); } break; case 75: -#line 1603 "bfin-parse.y" +#line 1656 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(3) - (5)].reg)) && !IS_PREG ((yyvsp[(3) - (5)].reg))) + return yyerror ("Bad register in comparison"); + if (IS_IMM ((yyvsp[(5) - (5)].expr), 3)) { notethat ("CCflag: CC = dpregs == imm3\n"); @@ -4134,52 +4196,44 @@ yyreduce: break; case 76: -#line 1613 "bfin-parse.y" +#line 1669 "bfin-parse.y" { - if (!REG_SAME ((yyvsp[(3) - (5)].reg), (yyvsp[(5) - (5)].reg))) + if ((yyvsp[(3) - (5)].reg).regno == REG_A0 && (yyvsp[(5) - (5)].reg).regno == REG_A1) { notethat ("CCflag: CC = A0 <= A1\n"); (yyval.instr) = CCFLAG (0, 0, 7, 0, 0); } else - return yyerror ("CC register expected"); + return yyerror ("AREGs are in bad order or same"); } break; case 77: -#line 1623 "bfin-parse.y" +#line 1679 "bfin-parse.y" { - if (REG_CLASS((yyvsp[(3) - (6)].reg)) == REG_CLASS((yyvsp[(5) - (6)].reg))) + if ((IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) + || (IS_PREG ((yyvsp[(3) - (6)].reg)) && IS_PREG ((yyvsp[(5) - (6)].reg)))) { - notethat ("CCflag: CC = pregs <= pregs (..)\n"); + notethat ("CCflag: CC = dpregs <= dpregs (..)\n"); (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), (yyvsp[(5) - (6)].reg).regno & CODE_MASK, 1 + (yyvsp[(6) - (6)].r0).r0, 0, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); } else - return yyerror ("Compare only of same register class"); + return yyerror ("Bad register in comparison"); } break; case 78: -#line 1634 "bfin-parse.y" +#line 1691 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(3) - (6)].reg)) && !IS_PREG ((yyvsp[(3) - (6)].reg))) + return yyerror ("Bad register in comparison"); + if (((yyvsp[(6) - (6)].r0).r0 == 1 && IS_IMM ((yyvsp[(5) - (6)].expr), 3)) || ((yyvsp[(6) - (6)].r0).r0 == 3 && IS_UIMM ((yyvsp[(5) - (6)].expr), 3))) { - if (IS_DREG ((yyvsp[(3) - (6)].reg))) - { - notethat ("CCflag: CC = dregs <= (u)imm3\n"); - /* x y opc I G */ - (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, 0); - } - else if (IS_PREG ((yyvsp[(3) - (6)].reg))) - { - notethat ("CCflag: CC = pregs <= (u)imm3\n"); - /* x y opc I G */ - (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, 1); - } - else - return yyerror ("Dreg or Preg expected"); + notethat ("CCflag: CC = dpregs <= (u)imm3\n"); + (yyval.instr) = CCFLAG (&(yyvsp[(3) - (6)].reg), imm3 ((yyvsp[(5) - (6)].expr)), 1 + (yyvsp[(6) - (6)].r0).r0, 1, IS_PREG ((yyvsp[(3) - (6)].reg)) ? 1 : 0); } else return yyerror ("Bad constant value"); @@ -4187,7 +4241,7 @@ yyreduce: break; case 79: -#line 1658 "bfin-parse.y" +#line 1706 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(3) - (5)].reg)) && IS_DREG ((yyvsp[(5) - (5)].reg))) { @@ -4200,7 +4254,7 @@ yyreduce: break; case 80: -#line 1669 "bfin-parse.y" +#line 1717 "bfin-parse.y" { notethat ("CC2stat operation\n"); (yyval.instr) = bfin_gen_cc2stat ((yyvsp[(1) - (1)].modcodes).r0, (yyvsp[(1) - (1)].modcodes).x0, (yyvsp[(1) - (1)].modcodes).s0); @@ -4208,11 +4262,20 @@ yyreduce: break; case 81: -#line 1675 "bfin-parse.y" - { - if (IS_ALLREG ((yyvsp[(1) - (3)].reg)) && IS_ALLREG ((yyvsp[(3) - (3)].reg))) +#line 1723 "bfin-parse.y" + { + if ((IS_GENREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg))) + || (IS_GENREG ((yyvsp[(1) - (3)].reg)) && IS_DAGREG ((yyvsp[(3) - (3)].reg))) + || (IS_DAGREG ((yyvsp[(1) - (3)].reg)) && IS_GENREG ((yyvsp[(3) - (3)].reg))) + || (IS_DAGREG ((yyvsp[(1) - (3)].reg)) && IS_DAGREG ((yyvsp[(3) - (3)].reg))) + || (IS_GENREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_USP) + || ((yyvsp[(1) - (3)].reg).regno == REG_USP && IS_GENREG ((yyvsp[(3) - (3)].reg))) + || (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_SYSREG ((yyvsp[(3) - (3)].reg))) + || (IS_PREG ((yyvsp[(1) - (3)].reg)) && IS_SYSREG ((yyvsp[(3) - (3)].reg))) + || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) + || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && IS_PREG ((yyvsp[(3) - (3)].reg))) + || (IS_SYSREG ((yyvsp[(1) - (3)].reg)) && (yyvsp[(3) - (3)].reg).regno == REG_USP)) { - notethat ("REGMV: allregs = allregs\n"); (yyval.instr) = bfin_gen_regmv (&(yyvsp[(3) - (3)].reg), &(yyvsp[(1) - (3)].reg)); } else @@ -4221,7 +4284,7 @@ yyreduce: break; case 82: -#line 1686 "bfin-parse.y" +#line 1743 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -4234,7 +4297,7 @@ yyreduce: break; case 83: -#line 1697 "bfin-parse.y" +#line 1754 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg))) { @@ -4247,7 +4310,7 @@ yyreduce: break; case 84: -#line 1708 "bfin-parse.y" +#line 1765 "bfin-parse.y" { notethat ("CC2dreg: CC =! CC\n"); (yyval.instr) = bfin_gen_cc2dreg (3, 0); @@ -4255,13 +4318,18 @@ yyreduce: break; case 85: -#line 1716 "bfin-parse.y" +#line 1773 "bfin-parse.y" { notethat ("dsp32mult: dregs_half = multiply_halfregs (opt_mode)\n"); if (!IS_H ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM) return yyerror ("(M) not allowed with MAC0"); + if ((yyvsp[(4) - (4)].mod).mod != 0 && (yyvsp[(4) - (4)].mod).mod != M_FU && (yyvsp[(4) - (4)].mod).mod != M_IS + && (yyvsp[(4) - (4)].mod).mod != M_IU && (yyvsp[(4) - (4)].mod).mod != M_T && (yyvsp[(4) - (4)].mod).mod != M_TFU + && (yyvsp[(4) - (4)].mod).mod != M_S2RND && (yyvsp[(4) - (4)].mod).mod != M_ISS2 && (yyvsp[(4) - (4)].mod).mod != M_IH) + return yyerror ("bad option."); + if (IS_H ((yyvsp[(1) - (4)].reg))) { (yyval.instr) = DSP32MULT (0, (yyvsp[(4) - (4)].mod).MM, (yyvsp[(4) - (4)].mod).mod, 1, 0, @@ -4278,7 +4346,7 @@ yyreduce: break; case 86: -#line 1737 "bfin-parse.y" +#line 1799 "bfin-parse.y" { /* Odd registers can use (M). */ if (!IS_DREG ((yyvsp[(1) - (4)].reg))) @@ -4287,6 +4355,10 @@ yyreduce: if (IS_EVEN ((yyvsp[(1) - (4)].reg)) && (yyvsp[(4) - (4)].mod).MM) return yyerror ("(M) not allowed with MAC0"); + if ((yyvsp[(4) - (4)].mod).mod != 0 && (yyvsp[(4) - (4)].mod).mod != M_FU && (yyvsp[(4) - (4)].mod).mod != M_IS + && (yyvsp[(4) - (4)].mod).mod != M_S2RND && (yyvsp[(4) - (4)].mod).mod != M_ISS2) + return yyerror ("bad option"); + if (!IS_EVEN ((yyvsp[(1) - (4)].reg))) { notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n"); @@ -4306,7 +4378,7 @@ yyreduce: break; case 87: -#line 1764 "bfin-parse.y" +#line 1830 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg))) return yyerror ("Dregs expected"); @@ -4336,7 +4408,7 @@ yyreduce: break; case 88: -#line 1792 "bfin-parse.y" +#line 1858 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(1) - (9)].reg)) || !IS_DREG ((yyvsp[(6) - (9)].reg))) return yyerror ("Dregs expected"); @@ -4367,7 +4439,7 @@ yyreduce: break; case 89: -#line 1823 "bfin-parse.y" +#line 1889 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))) return yyerror ("Aregs must be same"); @@ -4383,7 +4455,7 @@ yyreduce: break; case 90: -#line 1837 "bfin-parse.y" +#line 1903 "bfin-parse.y" { if (IS_DREG ((yyvsp[(6) - (7)].reg)) && !IS_H ((yyvsp[(6) - (7)].reg))) { @@ -4396,7 +4468,7 @@ yyreduce: break; case 91: -#line 1848 "bfin-parse.y" +#line 1914 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg))) return yyerror ("Aregs must be same"); @@ -4412,7 +4484,7 @@ yyreduce: break; case 92: -#line 1862 "bfin-parse.y" +#line 1928 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4449,33 +4521,28 @@ yyreduce: break; case 93: -#line 1896 "bfin-parse.y" - { - if (IS_UIMM ((yyvsp[(5) - (5)].expr), 4)) - { - notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); - (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (5)].reg), imm5 ((yyvsp[(5) - (5)].expr)), &(yyvsp[(3) - (5)].reg), 2, HL2 ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg))); - } - else - return yyerror ("Bad shift value"); - } - break; - - case 94: -#line 1906 "bfin-parse.y" +#line 1962 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(5) - (6)].expr), 4)) { - notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); - (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + if ((yyvsp[(6) - (6)].modcodes).s0) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n"); + (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), (yyvsp[(6) - (6)].modcodes).s0, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + } + else + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); + (yyval.instr) = DSP32SHIFTIMM (0x0, &(yyvsp[(1) - (6)].reg), imm5 ((yyvsp[(5) - (6)].expr)), &(yyvsp[(3) - (6)].reg), 2, HL2 ((yyvsp[(1) - (6)].reg), (yyvsp[(3) - (6)].reg))); + } } else return yyerror ("Bad shift value"); } break; - case 95: -#line 1916 "bfin-parse.y" + case 94: +#line 1980 "bfin-parse.y" { int op; @@ -4500,8 +4567,8 @@ yyreduce: } break; - case 96: -#line 1941 "bfin-parse.y" + case 95: +#line 2005 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (9)].reg)) && IS_DREG_L ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg))) { @@ -4513,8 +4580,8 @@ yyreduce: } break; - case 97: -#line 1953 "bfin-parse.y" + case 96: +#line 2017 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (8)].reg)) && IS_DREG_L ((yyvsp[(5) - (8)].reg)) && IS_DREG_L ((yyvsp[(7) - (8)].reg))) { @@ -4531,8 +4598,8 @@ yyreduce: } break; - case 98: -#line 1971 "bfin-parse.y" + case 97: +#line 2035 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -4544,8 +4611,8 @@ yyreduce: } break; - case 99: -#line 1982 "bfin-parse.y" + case 98: +#line 2046 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (11)].reg)) && IS_DREG ((yyvsp[(5) - (11)].reg)) && IS_DREG ((yyvsp[(7) - (11)].reg))) { @@ -4557,8 +4624,8 @@ yyreduce: } break; - case 100: -#line 1993 "bfin-parse.y" + case 99: +#line 2057 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG_L ((yyvsp[(7) - (9)].reg))) { @@ -4570,8 +4637,8 @@ yyreduce: } break; - case 101: -#line 2004 "bfin-parse.y" + case 100: +#line 2068 "bfin-parse.y" { if (!REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg))) return yyerror ("Aregs must be same"); @@ -4586,8 +4653,8 @@ yyreduce: } break; - case 102: -#line 2017 "bfin-parse.y" + case 101: +#line 2081 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg))) { @@ -4599,8 +4666,8 @@ yyreduce: } break; - case 103: -#line 2028 "bfin-parse.y" + case 102: +#line 2092 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) { @@ -4612,8 +4679,8 @@ yyreduce: } break; - case 104: -#line 2039 "bfin-parse.y" + case 103: +#line 2103 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(4) - (7)].reg)) && IS_DREG_L ((yyvsp[(6) - (7)].reg))) { @@ -4625,8 +4692,8 @@ yyreduce: } break; - case 105: -#line 2050 "bfin-parse.y" + case 104: +#line 2114 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) { @@ -4638,8 +4705,8 @@ yyreduce: } break; - case 106: -#line 2061 "bfin-parse.y" + case 105: +#line 2125 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (4)].reg), (yyvsp[(2) - (4)].reg)) && IS_IMM ((yyvsp[(4) - (4)].expr), 6) >= 0) { @@ -4651,8 +4718,8 @@ yyreduce: } break; - case 107: -#line 2072 "bfin-parse.y" + case 106: +#line 2136 "bfin-parse.y" { if ((yyvsp[(6) - (6)].r0).r0 == 1) { @@ -4687,8 +4754,8 @@ yyreduce: } break; - case 108: -#line 2105 "bfin-parse.y" + case 107: +#line 2169 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(5) - (5)].expr), 5)) { @@ -4700,8 +4767,8 @@ yyreduce: } break; - case 109: -#line 2115 "bfin-parse.y" + case 108: +#line 2179 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4714,8 +4781,8 @@ yyreduce: } break; - case 110: -#line 2128 "bfin-parse.y" + case 109: +#line 2192 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4736,8 +4803,8 @@ yyreduce: } break; - case 111: -#line 2148 "bfin-parse.y" + case 110: +#line 2212 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) { @@ -4749,8 +4816,8 @@ yyreduce: } break; - case 112: -#line 2159 "bfin-parse.y" + case 111: +#line 2223 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_DREG ((yyvsp[(7) - (8)].reg))) { @@ -4762,8 +4829,8 @@ yyreduce: } break; - case 113: -#line 2170 "bfin-parse.y" + case 112: +#line 2234 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (10)].reg)) && (yyvsp[(7) - (10)].reg).regno == REG_A0 @@ -4777,8 +4844,8 @@ yyreduce: } break; - case 114: -#line 2183 "bfin-parse.y" + case 113: +#line 2247 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (10)].reg)) && (yyvsp[(7) - (10)].reg).regno == REG_A0 @@ -4792,8 +4859,8 @@ yyreduce: } break; - case 115: -#line 2196 "bfin-parse.y" + case 114: +#line 2260 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (12)].reg)) && !IS_H ((yyvsp[(1) - (12)].reg)) && !REG_SAME ((yyvsp[(7) - (12)].reg), (yyvsp[(9) - (12)].reg))) { @@ -4805,8 +4872,8 @@ yyreduce: } break; - case 116: -#line 2207 "bfin-parse.y" + case 115: +#line 2271 "bfin-parse.y" { if (REG_SAME ((yyvsp[(1) - (5)].reg), (yyvsp[(3) - (5)].reg)) && IS_DREG_L ((yyvsp[(5) - (5)].reg))) { @@ -4818,8 +4885,8 @@ yyreduce: } break; - case 117: -#line 2218 "bfin-parse.y" + case 116: +#line 2282 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_DREG_L ((yyvsp[(6) - (6)].reg))) { @@ -4831,8 +4898,8 @@ yyreduce: } break; - case 118: -#line 2229 "bfin-parse.y" + case 117: +#line 2293 "bfin-parse.y" { if (IS_IMM ((yyvsp[(5) - (5)].expr), 6)) { @@ -4844,8 +4911,8 @@ yyreduce: } break; - case 119: -#line 2240 "bfin-parse.y" + case 118: +#line 2304 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_DREG ((yyvsp[(4) - (6)].reg)) && IS_IMM ((yyvsp[(6) - (6)].expr), 6)) { @@ -4856,8 +4923,8 @@ yyreduce: } break; - case 120: -#line 2250 "bfin-parse.y" + case 119: +#line 2314 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg))) { @@ -4869,8 +4936,8 @@ yyreduce: } break; - case 121: -#line 2261 "bfin-parse.y" + case 120: +#line 2325 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) { @@ -4882,8 +4949,8 @@ yyreduce: } break; - case 122: -#line 2272 "bfin-parse.y" + case 121: +#line 2336 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (4)].reg))) { @@ -4895,8 +4962,8 @@ yyreduce: } break; - case 123: -#line 2284 "bfin-parse.y" + case 122: +#line 2348 "bfin-parse.y" { if (IS_DREG_L ((yyvsp[(1) - (7)].reg)) && IS_DREG ((yyvsp[(5) - (7)].reg))) { @@ -4908,8 +4975,8 @@ yyreduce: } break; - case 124: -#line 2295 "bfin-parse.y" + case 123: +#line 2359 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && IS_DREG ((yyvsp[(7) - (9)].reg))) { @@ -4921,8 +4988,8 @@ yyreduce: } break; - case 125: -#line 2306 "bfin-parse.y" + case 124: +#line 2370 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (9)].reg)) && IS_DREG ((yyvsp[(5) - (9)].reg)) && !IS_A1 ((yyvsp[(7) - (9)].reg))) { @@ -4934,8 +5001,8 @@ yyreduce: } break; - case 126: -#line 2317 "bfin-parse.y" + case 125: +#line 2381 "bfin-parse.y" { if (!IS_A1 ((yyvsp[(1) - (9)].reg)) && !IS_A1 ((yyvsp[(4) - (9)].reg)) && IS_A1 ((yyvsp[(6) - (9)].reg))) { @@ -4947,8 +5014,8 @@ yyreduce: } break; - case 127: -#line 2330 "bfin-parse.y" + case 126: +#line 2394 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4960,8 +5027,8 @@ yyreduce: } break; - case 128: -#line 2342 "bfin-parse.y" + case 127: +#line 2406 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4973,8 +5040,8 @@ yyreduce: } break; - case 129: -#line 2354 "bfin-parse.y" + case 128: +#line 2418 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_UIMM ((yyvsp[(5) - (6)].expr), 5)) { @@ -4986,8 +5053,8 @@ yyreduce: } break; - case 130: -#line 2365 "bfin-parse.y" + case 129: +#line 2429 "bfin-parse.y" { if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5)) { @@ -4999,8 +5066,8 @@ yyreduce: } break; - case 131: -#line 2376 "bfin-parse.y" + case 130: +#line 2440 "bfin-parse.y" { if (IS_DREG ((yyvsp[(5) - (8)].reg)) && IS_UIMM ((yyvsp[(7) - (8)].expr), 5)) { @@ -5012,8 +5079,8 @@ yyreduce: } break; - case 132: -#line 2387 "bfin-parse.y" + case 131: +#line 2451 "bfin-parse.y" { if ((IS_DREG ((yyvsp[(4) - (6)].reg)) || IS_PREG ((yyvsp[(4) - (6)].reg))) && (IS_DREG ((yyvsp[(6) - (6)].reg)) || IS_PREG ((yyvsp[(6) - (6)].reg)))) @@ -5026,8 +5093,8 @@ yyreduce: } break; - case 133: -#line 2399 "bfin-parse.y" + case 132: +#line 2463 "bfin-parse.y" { if ((IS_DREG ((yyvsp[(5) - (5)].reg)) || IS_PREG ((yyvsp[(5) - (5)].reg))) && (IS_DREG ((yyvsp[(3) - (5)].reg)) || IS_PREG ((yyvsp[(3) - (5)].reg)))) @@ -5040,8 +5107,8 @@ yyreduce: } break; - case 134: -#line 2411 "bfin-parse.y" + case 133: +#line 2475 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(5) - (5)].expr))) { @@ -5053,8 +5120,8 @@ yyreduce: } break; - case 135: -#line 2422 "bfin-parse.y" + case 134: +#line 2486 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(5) - (8)].expr))) { @@ -5066,8 +5133,8 @@ yyreduce: } break; - case 136: -#line 2433 "bfin-parse.y" + case 135: +#line 2497 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(4) - (4)].expr))) { @@ -5079,8 +5146,8 @@ yyreduce: } break; - case 137: -#line 2444 "bfin-parse.y" + case 136: +#line 2508 "bfin-parse.y" { if (IS_PCREL10 ((yyvsp[(4) - (7)].expr))) { @@ -5092,88 +5159,88 @@ yyreduce: } break; - case 138: -#line 2454 "bfin-parse.y" + case 137: +#line 2518 "bfin-parse.y" { notethat ("ProgCtrl: NOP\n"); (yyval.instr) = PROGCTRL (0, 0); } break; - case 139: -#line 2460 "bfin-parse.y" + case 138: +#line 2524 "bfin-parse.y" { notethat ("ProgCtrl: RTS\n"); (yyval.instr) = PROGCTRL (1, 0); } break; - case 140: -#line 2466 "bfin-parse.y" + case 139: +#line 2530 "bfin-parse.y" { notethat ("ProgCtrl: RTI\n"); (yyval.instr) = PROGCTRL (1, 1); } break; - case 141: -#line 2472 "bfin-parse.y" + case 140: +#line 2536 "bfin-parse.y" { notethat ("ProgCtrl: RTX\n"); (yyval.instr) = PROGCTRL (1, 2); } break; - case 142: -#line 2478 "bfin-parse.y" + case 141: +#line 2542 "bfin-parse.y" { notethat ("ProgCtrl: RTN\n"); (yyval.instr) = PROGCTRL (1, 3); } break; - case 143: -#line 2484 "bfin-parse.y" + case 142: +#line 2548 "bfin-parse.y" { notethat ("ProgCtrl: RTE\n"); (yyval.instr) = PROGCTRL (1, 4); } break; - case 144: -#line 2490 "bfin-parse.y" + case 143: +#line 2554 "bfin-parse.y" { notethat ("ProgCtrl: IDLE\n"); (yyval.instr) = PROGCTRL (2, 0); } break; - case 145: -#line 2496 "bfin-parse.y" + case 144: +#line 2560 "bfin-parse.y" { notethat ("ProgCtrl: CSYNC\n"); (yyval.instr) = PROGCTRL (2, 3); } break; - case 146: -#line 2502 "bfin-parse.y" + case 145: +#line 2566 "bfin-parse.y" { notethat ("ProgCtrl: SSYNC\n"); (yyval.instr) = PROGCTRL (2, 4); } break; - case 147: -#line 2508 "bfin-parse.y" + case 146: +#line 2572 "bfin-parse.y" { notethat ("ProgCtrl: EMUEXCPT\n"); (yyval.instr) = PROGCTRL (2, 5); } break; - case 148: -#line 2514 "bfin-parse.y" + case 147: +#line 2578 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (2)].reg))) { @@ -5185,8 +5252,8 @@ yyreduce: } break; - case 149: -#line 2525 "bfin-parse.y" + case 148: +#line 2589 "bfin-parse.y" { if (IS_DREG ((yyvsp[(2) - (2)].reg))) { @@ -5198,8 +5265,8 @@ yyreduce: } break; - case 150: -#line 2536 "bfin-parse.y" + case 149: +#line 2600 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5211,8 +5278,8 @@ yyreduce: } break; - case 151: -#line 2547 "bfin-parse.y" + case 150: +#line 2611 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5224,8 +5291,8 @@ yyreduce: } break; - case 152: -#line 2558 "bfin-parse.y" + case 151: +#line 2622 "bfin-parse.y" { if (IS_PREG ((yyvsp[(5) - (6)].reg))) { @@ -5237,8 +5304,8 @@ yyreduce: } break; - case 153: -#line 2569 "bfin-parse.y" + case 152: +#line 2633 "bfin-parse.y" { if (IS_PREG ((yyvsp[(5) - (6)].reg))) { @@ -5250,8 +5317,8 @@ yyreduce: } break; - case 154: -#line 2580 "bfin-parse.y" + case 153: +#line 2644 "bfin-parse.y" { if (IS_UIMM ((yyvsp[(2) - (2)].expr), 4)) { @@ -5263,16 +5330,16 @@ yyreduce: } break; - case 155: -#line 2591 "bfin-parse.y" + case 154: +#line 2655 "bfin-parse.y" { notethat ("ProgCtrl: EMUEXCPT\n"); (yyval.instr) = PROGCTRL (10, uimm4 ((yyvsp[(2) - (2)].expr))); } break; - case 156: -#line 2597 "bfin-parse.y" + case 155: +#line 2661 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5284,8 +5351,8 @@ yyreduce: } break; - case 157: -#line 2608 "bfin-parse.y" + case 156: +#line 2672 "bfin-parse.y" { if (IS_PCREL12 ((yyvsp[(2) - (2)].expr))) { @@ -5297,8 +5364,8 @@ yyreduce: } break; - case 158: -#line 2619 "bfin-parse.y" + case 157: +#line 2683 "bfin-parse.y" { if (IS_PCREL12 ((yyvsp[(2) - (2)].expr))) { @@ -5310,8 +5377,8 @@ yyreduce: } break; - case 159: -#line 2630 "bfin-parse.y" + case 158: +#line 2694 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5323,8 +5390,8 @@ yyreduce: } break; - case 160: -#line 2641 "bfin-parse.y" + case 159: +#line 2705 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5336,8 +5403,8 @@ yyreduce: } break; - case 161: -#line 2652 "bfin-parse.y" + case 160: +#line 2716 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5349,8 +5416,8 @@ yyreduce: } break; - case 162: -#line 2662 "bfin-parse.y" + case 161: +#line 2726 "bfin-parse.y" { if (IS_PCREL24 ((yyvsp[(2) - (2)].expr))) { @@ -5362,8 +5429,8 @@ yyreduce: } break; - case 163: -#line 2675 "bfin-parse.y" + case 162: +#line 2739 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 8); @@ -5372,8 +5439,8 @@ yyreduce: } break; - case 164: -#line 2683 "bfin-parse.y" + case 163: +#line 2747 "bfin-parse.y" { if (IS_DREG ((yyvsp[(3) - (6)].reg)) && IS_DREG ((yyvsp[(5) - (6)].reg))) (yyval.instr) = ALU2OP (&(yyvsp[(3) - (6)].reg), &(yyvsp[(5) - (6)].reg), 9); @@ -5382,8 +5449,8 @@ yyreduce: } break; - case 165: -#line 2691 "bfin-parse.y" + case 164: +#line 2755 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (5)].reg)) && IS_DREG ((yyvsp[(4) - (5)].reg))) { @@ -5408,8 +5475,8 @@ yyreduce: } break; - case 166: -#line 2715 "bfin-parse.y" + case 165: +#line 2779 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (4)].reg)) && IS_DREG ((yyvsp[(4) - (4)].reg))) { @@ -5421,8 +5488,8 @@ yyreduce: } break; - case 167: -#line 2726 "bfin-parse.y" + case 166: +#line 2790 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -5434,8 +5501,8 @@ yyreduce: } break; - case 168: -#line 2737 "bfin-parse.y" + case 167: +#line 2801 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) { @@ -5447,8 +5514,8 @@ yyreduce: } break; - case 169: -#line 2748 "bfin-parse.y" + case 168: +#line 2812 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -5460,8 +5527,8 @@ yyreduce: } break; - case 170: -#line 2759 "bfin-parse.y" + case 169: +#line 2823 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -5473,8 +5540,8 @@ yyreduce: } break; - case 171: -#line 2770 "bfin-parse.y" + case 170: +#line 2834 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) { @@ -5486,8 +5553,8 @@ yyreduce: } break; - case 172: -#line 2782 "bfin-parse.y" + case 171: +#line 2846 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_UIMM ((yyvsp[(3) - (3)].expr), 5)) { @@ -5499,8 +5566,8 @@ yyreduce: } break; - case 173: -#line 2795 "bfin-parse.y" + case 172: +#line 2859 "bfin-parse.y" { notethat ("CaCTRL: FLUSH [ pregs ]\n"); if (IS_PREG ((yyvsp[(3) - (4)].reg))) @@ -5510,8 +5577,8 @@ yyreduce: } break; - case 174: -#line 2804 "bfin-parse.y" + case 173: +#line 2868 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5523,8 +5590,8 @@ yyreduce: } break; - case 175: -#line 2815 "bfin-parse.y" + case 174: +#line 2879 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5536,8 +5603,8 @@ yyreduce: } break; - case 176: -#line 2826 "bfin-parse.y" + case 175: +#line 2890 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5549,8 +5616,8 @@ yyreduce: } break; - case 177: -#line 2838 "bfin-parse.y" + case 176: +#line 2902 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5562,8 +5629,8 @@ yyreduce: } break; - case 178: -#line 2849 "bfin-parse.y" + case 177: +#line 2913 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5575,8 +5642,8 @@ yyreduce: } break; - case 179: -#line 2860 "bfin-parse.y" + case 178: +#line 2924 "bfin-parse.y" { if (IS_PREG ((yyvsp[(3) - (4)].reg))) { @@ -5588,8 +5655,8 @@ yyreduce: } break; - case 180: -#line 2871 "bfin-parse.y" + case 179: +#line 2935 "bfin-parse.y" { if (IS_PREG ((yyvsp[(2) - (2)].reg))) { @@ -5601,101 +5668,133 @@ yyreduce: } break; - case 181: -#line 2885 "bfin-parse.y" + case 180: +#line 2949 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) - { - notethat ("LDST: B [ pregs ] = dregs\n"); - (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 2, 0, 1); - } - else - return yyerror ("Register mismatch"); + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: B [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 2, 0, 1); } break; - case 182: -#line 2897 "bfin-parse.y" + case 181: +#line 2961 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_RANGE(16, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 1) && IS_DREG ((yyvsp[(8) - (8)].reg))) + Expr_Node *tmp = (yyvsp[(5) - (8)].expr); + + if (!IS_DREG ((yyvsp[(8) - (8)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (8)].reg))) + return yyerror ("Preg expected in address"); + + if (IS_RELOC ((yyvsp[(5) - (8)].expr))) + return yyerror ("Plain symbol used as offset"); + + if ((yyvsp[(4) - (8)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (in_range_p (tmp, -32768, 32767, 0)) { notethat ("LDST: B [ pregs + imm16 ] = dregs\n"); - if ((yyvsp[(4) - (8)].r0).r0) - neg_value ((yyvsp[(5) - (8)].expr)); (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 2, 0, (yyvsp[(5) - (8)].expr)); } else - return yyerror ("Register mismatch or const size wrong"); + return yyerror ("Displacement out of range"); } break; - case 183: -#line 2912 "bfin-parse.y" + case 182: +#line 2987 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_URANGE (4, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 2) && IS_DREG ((yyvsp[(8) - (8)].reg))) + Expr_Node *tmp = (yyvsp[(5) - (8)].expr); + + if (!IS_DREG ((yyvsp[(8) - (8)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (8)].reg))) + return yyerror ("Preg expected in address"); + + if ((yyvsp[(4) - (8)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ((yyvsp[(5) - (8)].expr))) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, 0, 30, 1)) { notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n"); - (yyval.instr) = LDSTII (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), (yyvsp[(5) - (8)].expr), 1, 1); + (yyval.instr) = LDSTII (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), tmp, 1, 1); } - else if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_RANGE(16, (yyvsp[(5) - (8)].expr), (yyvsp[(4) - (8)].r0).r0, 2) && IS_DREG ((yyvsp[(8) - (8)].reg))) + else if (in_range_p (tmp, -65536, 65535, 1)) { notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n"); - if ((yyvsp[(4) - (8)].r0).r0) - neg_value ((yyvsp[(5) - (8)].expr)); - (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 1, 0, (yyvsp[(5) - (8)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), 1, 1, 0, tmp); } else - return yyerror ("Bad register(s) or wrong constant size"); + return yyerror ("Displacement out of range"); } break; - case 184: -#line 2931 "bfin-parse.y" + case 183: +#line 3017 "bfin-parse.y" { - if (IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) - { - notethat ("LDST: W [ pregs ] = dregs\n"); - (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1, 0, 1); - } - else - return yyerror ("Bad register(s) for STORE"); + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: W [ pregs ] = dregs\n"); + (yyval.instr) = LDST (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1, 0, 1); } break; - case 185: -#line 2942 "bfin-parse.y" + case 184: +#line 3028 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if ((yyvsp[(4) - (7)].modcodes).x0 == 2) + { + if (!IS_IREG ((yyvsp[(3) - (7)].reg)) && !IS_PREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Ireg or Preg expected in address"); + } + else if (!IS_IREG ((yyvsp[(3) - (7)].reg))) + return yyerror ("Ireg expected in address"); + if (IS_IREG ((yyvsp[(3) - (7)].reg))) { notethat ("dspLDST: W [ iregs ] = dregs_half\n"); (yyval.instr) = DSPLDST (&(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), &(yyvsp[(7) - (7)].reg), (yyvsp[(4) - (7)].modcodes).x0, 1); } - else if ((yyvsp[(4) - (7)].modcodes).x0 == 2 && IS_PREG ((yyvsp[(3) - (7)].reg)) && IS_DREG ((yyvsp[(7) - (7)].reg))) + else { - notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); + notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(3) - (7)].reg), 1 + IS_H ((yyvsp[(7) - (7)].reg)), 1); - } - else - return yyerror ("Bad register(s) for STORE"); } break; - case 186: -#line 2960 "bfin-parse.y" + case 185: +#line 3053 "bfin-parse.y" { Expr_Node *tmp = (yyvsp[(4) - (7)].expr); int ispreg = IS_PREG ((yyvsp[(7) - (7)].reg)); if (!IS_PREG ((yyvsp[(2) - (7)].reg))) - return yyerror ("Preg expected for indirect"); + return yyerror ("Preg expected in address"); if (!IS_DREG ((yyvsp[(7) - (7)].reg)) && !ispreg) - return yyerror ("Bad source register for STORE"); + return yyerror ("Preg expected for source operand"); if ((yyvsp[(3) - (7)].r0).r0) tmp = unary (Expr_Op_Type_NEG, tmp); + if (IS_RELOC ((yyvsp[(4) - (7)].expr))) + return yyerror ("Plain symbol used as offset"); + if (in_range_p (tmp, 0, 63, 3)) { notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n"); @@ -5710,118 +5809,141 @@ yyreduce: else if (in_range_p (tmp, -131072, 131071, 3)) { notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n"); - (yyval.instr) = LDSTIDXI (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), 1, 0, ispreg ? 1: 0, tmp); + (yyval.instr) = LDSTIDXI (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), 1, 0, ispreg ? 1 : 0, tmp); } else - return yyerror ("Displacement out of range for store"); + return yyerror ("Displacement out of range"); } break; - case 187: -#line 2994 "bfin-parse.y" + case 186: +#line 3090 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_URANGE (4, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 2)) + Expr_Node *tmp = (yyvsp[(7) - (9)].expr); + if (!IS_DREG ((yyvsp[(1) - (9)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (9)].reg))) + return yyerror ("Preg expected in address"); + + if ((yyvsp[(6) - (9)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ((yyvsp[(7) - (9)].expr))) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, 0, 30, 1)) { - notethat ("LDSTii: dregs = W [ pregs + uimm4s2 ] (.)\n"); - (yyval.instr) = LDSTII (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), (yyvsp[(7) - (9)].expr), 0, 1 << (yyvsp[(9) - (9)].r0).r0); + notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n"); + (yyval.instr) = LDSTII (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), tmp, 0, 1 << (yyvsp[(9) - (9)].r0).r0); } - else if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_RANGE(16, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 2)) + else if (in_range_p (tmp, -65536, 65535, 1)) { notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n"); - if ((yyvsp[(6) - (9)].r0).r0) - neg_value ((yyvsp[(7) - (9)].expr)); - (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 1, (yyvsp[(9) - (9)].r0).r0, (yyvsp[(7) - (9)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 1, (yyvsp[(9) - (9)].r0).r0, tmp); } else - return yyerror ("Bad register or constant for LOAD"); + return yyerror ("Displacement out of range"); } break; - case 188: -#line 3012 "bfin-parse.y" + case 187: +#line 3118 "bfin-parse.y" { + if (!IS_DREG ((yyvsp[(1) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); + if ((yyvsp[(6) - (7)].modcodes).x0 == 2) + { + if (!IS_IREG ((yyvsp[(5) - (7)].reg)) && !IS_PREG ((yyvsp[(5) - (7)].reg))) + return yyerror ("Ireg or Preg expected in address"); + } + else if (!IS_IREG ((yyvsp[(5) - (7)].reg))) + return yyerror ("Ireg expected in address"); + if (IS_IREG ((yyvsp[(5) - (7)].reg))) { - notethat ("dspLDST: dregs_half = W [ iregs ]\n"); + notethat ("dspLDST: dregs_half = W [ iregs ]\n"); (yyval.instr) = DSPLDST(&(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), &(yyvsp[(1) - (7)].reg), (yyvsp[(6) - (7)].modcodes).x0, 0); } - else if ((yyvsp[(6) - (7)].modcodes).x0 == 2 && IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_PREG ((yyvsp[(5) - (7)].reg))) + else { - notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); + notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(5) - (7)].reg), 1 + IS_H ((yyvsp[(1) - (7)].reg)), 0); } - else - return yyerror ("Bad register or post_op for LOAD"); } break; - case 189: -#line 3029 "bfin-parse.y" + case 188: +#line 3143 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) - { - notethat ("LDST: dregs = W [ pregs ] (.)\n"); - (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 1, (yyvsp[(8) - (8)].r0).r0, 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (8)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (8)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: dregs = W [ pregs ] (.)\n"); + (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 1, (yyvsp[(8) - (8)].r0).r0, 0); } break; - case 190: -#line 3040 "bfin-parse.y" + case 189: +#line 3154 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_PREG ((yyvsp[(7) - (9)].reg))) - { - notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); - (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), 3, (yyvsp[(9) - (9)].r0).r0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (9)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (9)].reg)) || !IS_PREG ((yyvsp[(7) - (9)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), &(yyvsp[(7) - (9)].reg), 3, (yyvsp[(9) - (9)].r0).r0); } break; - case 191: -#line 3051 "bfin-parse.y" + case 190: +#line 3165 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg)) && IS_PREG ((yyvsp[(7) - (8)].reg))) - { - notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); - (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), 1 + IS_H ((yyvsp[(1) - (8)].reg)), 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (8)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (8)].reg)) || !IS_PREG ((yyvsp[(7) - (8)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); + (yyval.instr) = LDSTPMOD (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), &(yyvsp[(7) - (8)].reg), 1 + IS_H ((yyvsp[(1) - (8)].reg)), 0); } break; - case 192: -#line 3062 "bfin-parse.y" + case 191: +#line 3176 "bfin-parse.y" { - if (IS_IREG ((yyvsp[(2) - (6)].reg)) && IS_DREG ((yyvsp[(6) - (6)].reg))) + if (!IS_IREG ((yyvsp[(2) - (6)].reg)) && !IS_PREG ((yyvsp[(2) - (6)].reg))) + return yyerror ("Ireg or Preg expected in address"); + else if (IS_IREG ((yyvsp[(2) - (6)].reg)) && !IS_DREG ((yyvsp[(6) - (6)].reg))) + return yyerror ("Dreg expected for source operand"); + else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && !IS_DREG ((yyvsp[(6) - (6)].reg)) && !IS_PREG ((yyvsp[(6) - (6)].reg))) + return yyerror ("Dreg or Preg expected for source operand"); + + if (IS_IREG ((yyvsp[(2) - (6)].reg))) { notethat ("dspLDST: [ iregs ] = dregs\n"); (yyval.instr) = DSPLDST(&(yyvsp[(2) - (6)].reg), 0, &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 1); } - else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && IS_DREG ((yyvsp[(6) - (6)].reg))) + else if (IS_DREG ((yyvsp[(6) - (6)].reg))) { notethat ("LDST: [ pregs ] = dregs\n"); (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 0, 1); } - else if (IS_PREG ((yyvsp[(2) - (6)].reg)) && IS_PREG ((yyvsp[(6) - (6)].reg))) + else { notethat ("LDST: [ pregs ] = pregs\n"); (yyval.instr) = LDST (&(yyvsp[(2) - (6)].reg), &(yyvsp[(6) - (6)].reg), (yyvsp[(3) - (6)].modcodes).x0, 0, 1, 1); } - else - return yyerror ("Bad register for STORE"); } break; - case 193: -#line 3083 "bfin-parse.y" + case 192: +#line 3202 "bfin-parse.y" { - if (! IS_DREG ((yyvsp[(7) - (7)].reg))) - return yyerror ("Expected Dreg for last argument"); + if (!IS_DREG ((yyvsp[(7) - (7)].reg))) + return yyerror ("Dreg expected for source operand"); if (IS_IREG ((yyvsp[(2) - (7)].reg)) && IS_MREG ((yyvsp[(4) - (7)].reg))) { @@ -5834,93 +5956,113 @@ yyreduce: (yyval.instr) = LDSTPMOD (&(yyvsp[(2) - (7)].reg), &(yyvsp[(7) - (7)].reg), &(yyvsp[(4) - (7)].reg), 0, 1); } else - return yyerror ("Bad register for STORE"); + return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address"); } break; - case 194: -#line 3102 "bfin-parse.y" + case 193: +#line 3221 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(8) - (8)].reg))) - return yyerror ("Expect Dreg as last argument"); + return yyerror ("Dreg expected for source operand"); + if (IS_PREG ((yyvsp[(3) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) { notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(3) - (8)].reg), &(yyvsp[(8) - (8)].reg), &(yyvsp[(5) - (8)].reg), 1 + IS_H ((yyvsp[(8) - (8)].reg)), 1); } else - return yyerror ("Bad register for STORE"); + return yyerror ("Preg ++ Preg expected in address"); } break; - case 195: -#line 3115 "bfin-parse.y" + case 194: +#line 3235 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (9)].reg)) && IS_PREG ((yyvsp[(5) - (9)].reg)) && IS_RANGE(16, (yyvsp[(7) - (9)].expr), (yyvsp[(6) - (9)].r0).r0, 1)) + Expr_Node *tmp = (yyvsp[(7) - (9)].expr); + if (!IS_DREG ((yyvsp[(1) - (9)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (9)].reg))) + return yyerror ("Preg expected in address"); + + if ((yyvsp[(6) - (9)].r0).r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ((yyvsp[(7) - (9)].expr))) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, -32768, 32767, 0)) { notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n", (yyvsp[(9) - (9)].r0).r0 ? 'X' : 'Z'); - if ((yyvsp[(6) - (9)].r0).r0) - neg_value ((yyvsp[(7) - (9)].expr)); - (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 2, (yyvsp[(9) - (9)].r0).r0, (yyvsp[(7) - (9)].expr)); + (yyval.instr) = LDSTIDXI (&(yyvsp[(5) - (9)].reg), &(yyvsp[(1) - (9)].reg), 0, 2, (yyvsp[(9) - (9)].r0).r0, tmp); } else - return yyerror ("Bad register or value for LOAD"); + return yyerror ("Displacement out of range"); } break; - case 196: -#line 3129 "bfin-parse.y" + case 195: +#line 3259 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (8)].reg)) && IS_PREG ((yyvsp[(5) - (8)].reg))) - { - notethat ("LDST: dregs = B [ pregs ] (%c)\n", - (yyvsp[(8) - (8)].r0).r0 ? 'X' : 'Z'); - (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 2, (yyvsp[(8) - (8)].r0).r0, 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ((yyvsp[(1) - (8)].reg))) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ((yyvsp[(5) - (8)].reg))) + return yyerror ("Preg expected in address"); + + notethat ("LDST: dregs = B [ pregs ] (%c)\n", + (yyvsp[(8) - (8)].r0).r0 ? 'X' : 'Z'); + (yyval.instr) = LDST (&(yyvsp[(5) - (8)].reg), &(yyvsp[(1) - (8)].reg), (yyvsp[(6) - (8)].modcodes).x0, 2, (yyvsp[(8) - (8)].r0).r0, 0); } break; - case 197: -#line 3141 "bfin-parse.y" + case 196: +#line 3271 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_IREG ((yyvsp[(4) - (7)].reg)) && IS_MREG ((yyvsp[(6) - (7)].reg))) + if (!IS_DREG ((yyvsp[(1) - (7)].reg))) + return yyerror ("Dreg expected for destination operand"); + + if (IS_IREG ((yyvsp[(4) - (7)].reg)) && IS_MREG ((yyvsp[(6) - (7)].reg))) { notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n"); (yyval.instr) = DSPLDST(&(yyvsp[(4) - (7)].reg), (yyvsp[(6) - (7)].reg).regno & CODE_MASK, &(yyvsp[(1) - (7)].reg), 3, 0); } - else if (IS_DREG ((yyvsp[(1) - (7)].reg)) && IS_PREG ((yyvsp[(4) - (7)].reg)) && IS_PREG ((yyvsp[(6) - (7)].reg))) + else if (IS_PREG ((yyvsp[(4) - (7)].reg)) && IS_PREG ((yyvsp[(6) - (7)].reg))) { notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n"); (yyval.instr) = LDSTPMOD (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), &(yyvsp[(6) - (7)].reg), 0, 0); } else - return yyerror ("Bad register for LOAD"); + return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address"); } break; - case 198: -#line 3157 "bfin-parse.y" + case 197: +#line 3290 "bfin-parse.y" { Expr_Node *tmp = (yyvsp[(6) - (7)].expr); int ispreg = IS_PREG ((yyvsp[(1) - (7)].reg)); int isgot = IS_RELOC((yyvsp[(6) - (7)].expr)); if (!IS_PREG ((yyvsp[(4) - (7)].reg))) - return yyerror ("Preg expected for indirect"); + return yyerror ("Preg expected in address"); if (!IS_DREG ((yyvsp[(1) - (7)].reg)) && !ispreg) - return yyerror ("Bad destination register for LOAD"); + return yyerror ("Dreg or Preg expected for destination operand"); + + if (tmp->type == Expr_Node_Reloc + && strcmp (tmp->value.s_value, + "_current_shared_library_p5_offset_") != 0) + return yyerror ("Plain symbol used as offset"); if ((yyvsp[(5) - (7)].r0).r0) tmp = unary (Expr_Op_Type_NEG, tmp); - if(isgot){ + if (isgot) + { notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n"); - (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1: 0, tmp); - } + (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1 : 0, tmp); + } else if (in_range_p (tmp, 0, 63, 3)) { notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n"); @@ -5935,28 +6077,36 @@ yyreduce: else if (in_range_p (tmp, -131072, 131071, 3)) { notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n"); - (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1: 0, tmp); + (yyval.instr) = LDSTIDXI (&(yyvsp[(4) - (7)].reg), &(yyvsp[(1) - (7)].reg), 0, 0, ispreg ? 1 : 0, tmp); } else - return yyerror ("Displacement out of range for load"); + return yyerror ("Displacement out of range"); } break; - case 199: -#line 3197 "bfin-parse.y" + case 198: +#line 3336 "bfin-parse.y" { - if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_IREG ((yyvsp[(4) - (6)].reg))) + if (!IS_IREG ((yyvsp[(4) - (6)].reg)) && !IS_PREG ((yyvsp[(4) - (6)].reg))) + return yyerror ("Ireg or Preg expected in address"); + else if (IS_IREG ((yyvsp[(4) - (6)].reg)) && !IS_DREG ((yyvsp[(1) - (6)].reg))) + return yyerror ("Dreg expected in destination operand"); + else if (IS_PREG ((yyvsp[(4) - (6)].reg)) && !IS_DREG ((yyvsp[(1) - (6)].reg)) && !IS_PREG ((yyvsp[(1) - (6)].reg)) + && ((yyvsp[(4) - (6)].reg).regno != REG_SP || !IS_ALLREG ((yyvsp[(1) - (6)].reg)) || (yyvsp[(5) - (6)].modcodes).x0 != 0)) + return yyerror ("Dreg or Preg expected in destination operand"); + + if (IS_IREG ((yyvsp[(4) - (6)].reg))) { notethat ("dspLDST: dregs = [ iregs ]\n"); (yyval.instr) = DSPLDST (&(yyvsp[(4) - (6)].reg), 0, &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0); } - else if (IS_DREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(4) - (6)].reg))) + else if (IS_DREG ((yyvsp[(1) - (6)].reg))) { notethat ("LDST: dregs = [ pregs ]\n"); (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 0, 0); } - else if (IS_PREG ((yyvsp[(1) - (6)].reg)) && IS_PREG ((yyvsp[(4) - (6)].reg))) + else if (IS_PREG ((yyvsp[(1) - (6)].reg))) { if (REG_SAME ((yyvsp[(1) - (6)].reg), (yyvsp[(4) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 != 2) return yyerror ("Pregs can't be same"); @@ -5964,18 +6114,16 @@ yyreduce: notethat ("LDST: pregs = [ pregs ]\n"); (yyval.instr) = LDST (&(yyvsp[(4) - (6)].reg), &(yyvsp[(1) - (6)].reg), (yyvsp[(5) - (6)].modcodes).x0, 0, 1, 0); } - else if ((yyvsp[(4) - (6)].reg).regno == REG_SP && IS_ALLREG ((yyvsp[(1) - (6)].reg)) && (yyvsp[(5) - (6)].modcodes).x0 == 0) + else { notethat ("PushPopReg: allregs = [ SP ++ ]\n"); (yyval.instr) = PUSHPOPREG (&(yyvsp[(1) - (6)].reg), 0); } - else - return yyerror ("Bad register or value"); } break; - case 200: -#line 3228 "bfin-parse.y" + case 199: +#line 3373 "bfin-parse.y" { if ((yyvsp[(1) - (11)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -5992,8 +6140,8 @@ yyreduce: } break; - case 201: -#line 3244 "bfin-parse.y" + case 200: +#line 3389 "bfin-parse.y" { if ((yyvsp[(1) - (7)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6013,8 +6161,8 @@ yyreduce: } break; - case 202: -#line 3263 "bfin-parse.y" + case 201: +#line 3408 "bfin-parse.y" { if ((yyvsp[(11) - (11)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6029,8 +6177,8 @@ yyreduce: } break; - case 203: -#line 3277 "bfin-parse.y" + case 202: +#line 3422 "bfin-parse.y" { if ((yyvsp[(7) - (7)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6050,8 +6198,8 @@ yyreduce: } break; - case 204: -#line 3296 "bfin-parse.y" + case 203: +#line 3441 "bfin-parse.y" { if ((yyvsp[(1) - (3)].reg).regno != REG_SP) yyerror ("Stack Pointer expected"); @@ -6066,8 +6214,8 @@ yyreduce: } break; - case 205: -#line 3312 "bfin-parse.y" + case 204: +#line 3457 "bfin-parse.y" { if (IS_URANGE (16, (yyvsp[(2) - (2)].expr), 0, 4)) (yyval.instr) = LINKAGE (0, uimm16s4 ((yyvsp[(2) - (2)].expr))); @@ -6076,16 +6224,16 @@ yyreduce: } break; - case 206: -#line 3320 "bfin-parse.y" + case 205: +#line 3465 "bfin-parse.y" { notethat ("linkage: UNLINK\n"); (yyval.instr) = LINKAGE (1, 0); } break; - case 207: -#line 3329 "bfin-parse.y" + case 206: +#line 3474 "bfin-parse.y" { if (IS_PCREL4 ((yyvsp[(3) - (7)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (7)].expr)) && IS_CREG ((yyvsp[(7) - (7)].reg))) { @@ -6098,8 +6246,8 @@ yyreduce: } break; - case 208: -#line 3340 "bfin-parse.y" + case 207: +#line 3485 "bfin-parse.y" { if (IS_PCREL4 ((yyvsp[(3) - (9)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (9)].expr)) && IS_PREG ((yyvsp[(9) - (9)].reg)) && IS_CREG ((yyvsp[(7) - (9)].reg))) @@ -6112,8 +6260,8 @@ yyreduce: } break; - case 209: -#line 3352 "bfin-parse.y" + case 208: +#line 3497 "bfin-parse.y" { if (IS_PCREL4 ((yyvsp[(3) - (11)].expr)) && IS_LPPCREL10 ((yyvsp[(5) - (11)].expr)) && IS_PREG ((yyvsp[(9) - (11)].reg)) && IS_CREG ((yyvsp[(7) - (11)].reg)) @@ -6127,8 +6275,8 @@ yyreduce: } break; - case 210: -#line 3366 "bfin-parse.y" + case 209: +#line 3511 "bfin-parse.y" { if (!IS_RELOC ((yyvsp[(2) - (3)].expr))) return yyerror ("Invalid expression in loop statement"); @@ -6138,8 +6286,8 @@ yyreduce: } break; - case 211: -#line 3374 "bfin-parse.y" + case 210: +#line 3519 "bfin-parse.y" { if (IS_RELOC ((yyvsp[(2) - (5)].expr)) && IS_PREG ((yyvsp[(5) - (5)].reg)) && IS_CREG ((yyvsp[(3) - (5)].reg))) { @@ -6151,8 +6299,8 @@ yyreduce: } break; - case 212: -#line 3384 "bfin-parse.y" + case 211: +#line 3529 "bfin-parse.y" { if (IS_RELOC ((yyvsp[(2) - (7)].expr)) && IS_PREG ((yyvsp[(5) - (7)].reg)) && IS_CREG ((yyvsp[(3) - (7)].reg)) && EXPR_VALUE ((yyvsp[(7) - (7)].expr)) == 1) { @@ -6164,32 +6312,54 @@ yyreduce: } break; + case 212: +#line 3541 "bfin-parse.y" + { + if (!IS_RELOC ((yyvsp[(2) - (2)].expr))) + return yyerror ("Invalid expression in LOOP_BEGIN statement"); + + bfin_loop_beginend ((yyvsp[(2) - (2)].expr), 1); + (yyval.instr) = 0; + } + break; + case 213: -#line 3396 "bfin-parse.y" +#line 3551 "bfin-parse.y" + { + if (!IS_RELOC ((yyvsp[(2) - (2)].expr))) + return yyerror ("Invalid expression in LOOP_END statement"); + + bfin_loop_beginend ((yyvsp[(2) - (2)].expr), 0); + (yyval.instr) = 0; + } + break; + + case 214: +#line 3562 "bfin-parse.y" { notethat ("pseudoDEBUG: DBG\n"); (yyval.instr) = bfin_gen_pseudodbg (3, 7, 0); } break; - case 214: -#line 3401 "bfin-parse.y" + case 215: +#line 3567 "bfin-parse.y" { notethat ("pseudoDEBUG: DBG REG_A\n"); (yyval.instr) = bfin_gen_pseudodbg (3, IS_A1 ((yyvsp[(2) - (2)].reg)), 0); } break; - case 215: -#line 3406 "bfin-parse.y" + case 216: +#line 3572 "bfin-parse.y" { notethat ("pseudoDEBUG: DBG allregs\n"); (yyval.instr) = bfin_gen_pseudodbg (0, (yyvsp[(2) - (2)].reg).regno & CODE_MASK, (yyvsp[(2) - (2)].reg).regno & CLASS_MASK); } break; - case 216: -#line 3412 "bfin-parse.y" + case 217: +#line 3578 "bfin-parse.y" { if (!IS_DREG ((yyvsp[(3) - (4)].reg))) return yyerror ("Dregs expected"); @@ -6198,170 +6368,178 @@ yyreduce: } break; - case 217: -#line 3420 "bfin-parse.y" + case 218: +#line 3586 "bfin-parse.y" { notethat ("psedoDEBUG: DBGHALT\n"); (yyval.instr) = bfin_gen_pseudodbg (3, 5, 0); } break; - case 218: -#line 3426 "bfin-parse.y" + case 219: +#line 3592 "bfin-parse.y" { - notethat ("pseudodbg_assert: DBGA (dregs_lo , uimm16 )\n"); + notethat ("psedoDEBUG: HLT\n"); + (yyval.instr) = bfin_gen_pseudodbg (3, 4, 0); + } + break; + + case 220: +#line 3598 "bfin-parse.y" + { + notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n"); (yyval.instr) = bfin_gen_pseudodbg_assert (IS_H ((yyvsp[(3) - (6)].reg)), &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); } break; - case 219: -#line 3432 "bfin-parse.y" + case 221: +#line 3604 "bfin-parse.y" { - notethat ("pseudodbg_assert: DBGAH (dregs , uimm16 )\n"); + notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n"); (yyval.instr) = bfin_gen_pseudodbg_assert (3, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); } break; - case 220: -#line 3438 "bfin-parse.y" + case 222: +#line 3610 "bfin-parse.y" { - notethat ("psedodbg_assert: DBGAL (dregs , uimm16 )\n"); + notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n"); (yyval.instr) = bfin_gen_pseudodbg_assert (2, &(yyvsp[(3) - (6)].reg), uimm16 ((yyvsp[(5) - (6)].expr))); } break; - case 221: -#line 3451 "bfin-parse.y" + case 223: +#line 3623 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (1)].reg); } break; - case 222: -#line 3455 "bfin-parse.y" + case 224: +#line 3627 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (1)].reg); } break; - case 223: -#line 3464 "bfin-parse.y" + case 225: +#line 3636 "bfin-parse.y" { (yyval.mod).MM = 0; (yyval.mod).mod = 0; } break; - case 224: -#line 3469 "bfin-parse.y" + case 226: +#line 3641 "bfin-parse.y" { (yyval.mod).MM = 1; (yyval.mod).mod = (yyvsp[(4) - (5)].value); } break; - case 225: -#line 3474 "bfin-parse.y" + case 227: +#line 3646 "bfin-parse.y" { (yyval.mod).MM = 1; (yyval.mod).mod = (yyvsp[(2) - (5)].value); } break; - case 226: -#line 3479 "bfin-parse.y" + case 228: +#line 3651 "bfin-parse.y" { (yyval.mod).MM = 0; (yyval.mod).mod = (yyvsp[(2) - (3)].value); } break; - case 227: -#line 3484 "bfin-parse.y" + case 229: +#line 3656 "bfin-parse.y" { (yyval.mod).MM = 1; (yyval.mod).mod = 0; } break; - case 228: -#line 3491 "bfin-parse.y" + case 230: +#line 3663 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 229: -#line 3495 "bfin-parse.y" + case 231: +#line 3667 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 230: -#line 3501 "bfin-parse.y" + case 232: +#line 3673 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; } break; - case 231: -#line 3506 "bfin-parse.y" + case 233: +#line 3678 "bfin-parse.y" { (yyval.modcodes).s0 = 1; (yyval.modcodes).x0 = 0; } break; - case 232: -#line 3511 "bfin-parse.y" + case 234: +#line 3683 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 1; } break; - case 233: -#line 3516 "bfin-parse.y" + case 235: +#line 3688 "bfin-parse.y" { (yyval.modcodes).s0 = 1; (yyval.modcodes).x0 = 1; } break; - case 234: -#line 3524 "bfin-parse.y" + case 236: +#line 3696 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 235: -#line 3528 "bfin-parse.y" + case 237: +#line 3700 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 236: -#line 3534 "bfin-parse.y" + case 238: +#line 3706 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; } break; - case 237: -#line 3539 "bfin-parse.y" + case 239: +#line 3711 "bfin-parse.y" { (yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0; (yyval.modcodes).x0 = (yyvsp[(2) - (3)].modcodes).x0; } break; - case 238: -#line 3546 "bfin-parse.y" + case 240: +#line 3718 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; @@ -6369,8 +6547,8 @@ yyreduce: } break; - case 239: -#line 3552 "bfin-parse.y" + case 241: +#line 3724 "bfin-parse.y" { (yyval.modcodes).s0 = 0; (yyval.modcodes).x0 = 0; @@ -6378,8 +6556,8 @@ yyreduce: } break; - case 240: -#line 3558 "bfin-parse.y" + case 242: +#line 3730 "bfin-parse.y" { (yyval.modcodes).s0 = 1; (yyval.modcodes).x0 = 0; @@ -6387,8 +6565,8 @@ yyreduce: } break; - case 241: -#line 3566 "bfin-parse.y" + case 243: +#line 3738 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 0; @@ -6396,8 +6574,8 @@ yyreduce: } break; - case 242: -#line 3572 "bfin-parse.y" + case 244: +#line 3744 "bfin-parse.y" { (yyval.modcodes).r0 = 2 + (yyvsp[(2) - (3)].r0).r0; (yyval.modcodes).s0 = 0; @@ -6405,8 +6583,8 @@ yyreduce: } break; - case 243: -#line 3578 "bfin-parse.y" + case 245: +#line 3750 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = (yyvsp[(2) - (3)].modcodes).s0; @@ -6414,8 +6592,8 @@ yyreduce: } break; - case 244: -#line 3584 "bfin-parse.y" + case 246: +#line 3756 "bfin-parse.y" { (yyval.modcodes).r0 = 2 + (yyvsp[(2) - (5)].r0).r0; (yyval.modcodes).s0 = (yyvsp[(4) - (5)].modcodes).s0; @@ -6423,8 +6601,8 @@ yyreduce: } break; - case 245: -#line 3590 "bfin-parse.y" + case 247: +#line 3762 "bfin-parse.y" { (yyval.modcodes).r0 = 2 + (yyvsp[(4) - (5)].r0).r0; (yyval.modcodes).s0 = (yyvsp[(2) - (5)].modcodes).s0; @@ -6432,50 +6610,50 @@ yyreduce: } break; - case 246: -#line 3598 "bfin-parse.y" + case 248: +#line 3770 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 247: -#line 3602 "bfin-parse.y" + case 249: +#line 3774 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 248: -#line 3606 "bfin-parse.y" + case 250: +#line 3778 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 249: -#line 3612 "bfin-parse.y" + case 251: +#line 3784 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 250: -#line 3616 "bfin-parse.y" + case 252: +#line 3788 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 251: -#line 3620 "bfin-parse.y" + case 253: +#line 3792 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 252: -#line 3626 "bfin-parse.y" + case 254: +#line 3798 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 0; @@ -6483,8 +6661,8 @@ yyreduce: } break; - case 253: -#line 3632 "bfin-parse.y" + case 255: +#line 3804 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 0; @@ -6492,8 +6670,8 @@ yyreduce: } break; - case 254: -#line 3638 "bfin-parse.y" + case 256: +#line 3810 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 1; @@ -6501,8 +6679,8 @@ yyreduce: } break; - case 255: -#line 3644 "bfin-parse.y" + case 257: +#line 3816 "bfin-parse.y" { (yyval.modcodes).r0 = 1; (yyval.modcodes).s0 = 0; @@ -6510,102 +6688,102 @@ yyreduce: } break; - case 256: -#line 3650 "bfin-parse.y" + case 258: +#line 3822 "bfin-parse.y" { (yyval.modcodes).r0 = 1; (yyval.modcodes).s0 = 1; } break; - case 257: -#line 3655 "bfin-parse.y" + case 259: +#line 3827 "bfin-parse.y" { (yyval.modcodes).r0 = 1; (yyval.modcodes).s0 = 1; } break; - case 258: -#line 3662 "bfin-parse.y" + case 260: +#line 3834 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 259: -#line 3666 "bfin-parse.y" + case 261: +#line 3838 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 260: -#line 3672 "bfin-parse.y" + case 262: +#line 3844 "bfin-parse.y" { (yyval.modcodes).s0 = 0; } break; - case 261: -#line 3676 "bfin-parse.y" + case 263: +#line 3848 "bfin-parse.y" { (yyval.modcodes).s0 = 1; } break; - case 262: -#line 3683 "bfin-parse.y" + case 264: +#line 3855 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 263: -#line 3687 "bfin-parse.y" + case 265: +#line 3859 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 264: -#line 3691 "bfin-parse.y" + case 266: +#line 3863 "bfin-parse.y" { (yyval.r0).r0 = 3; } break; - case 265: -#line 3695 "bfin-parse.y" + case 267: +#line 3867 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 266: -#line 3701 "bfin-parse.y" + case 268: +#line 3873 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 267: -#line 3705 "bfin-parse.y" + case 269: +#line 3877 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 268: -#line 3712 "bfin-parse.y" + case 270: +#line 3884 "bfin-parse.y" { (yyval.modcodes).r0 = 0; (yyval.modcodes).s0 = 1; } break; - case 269: -#line 3717 "bfin-parse.y" + case 271: +#line 3889 "bfin-parse.y" { if ((yyvsp[(2) - (3)].value) != M_T) return yyerror ("Bad modifier"); @@ -6614,8 +6792,8 @@ yyreduce: } break; - case 270: -#line 3724 "bfin-parse.y" + case 272: +#line 3896 "bfin-parse.y" { if ((yyvsp[(2) - (5)].value) != M_T) return yyerror ("Bad modifier"); @@ -6624,8 +6802,8 @@ yyreduce: } break; - case 271: -#line 3731 "bfin-parse.y" + case 273: +#line 3903 "bfin-parse.y" { if ((yyvsp[(4) - (5)].value) != M_T) return yyerror ("Bad modifier"); @@ -6634,36 +6812,36 @@ yyreduce: } break; - case 272: -#line 3743 "bfin-parse.y" + case 274: +#line 3915 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 273: -#line 3747 "bfin-parse.y" + case 275: +#line 3919 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 274: -#line 3751 "bfin-parse.y" + case 276: +#line 3923 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 275: -#line 3757 "bfin-parse.y" + case 277: +#line 3929 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 276: -#line 3761 "bfin-parse.y" + case 278: +#line 3933 "bfin-parse.y" { if ((yyvsp[(2) - (3)].value) == M_W32) (yyval.r0).r0 = 1; @@ -6672,15 +6850,15 @@ yyreduce: } break; - case 277: -#line 3770 "bfin-parse.y" + case 279: +#line 3942 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 278: -#line 3774 "bfin-parse.y" + case 280: +#line 3946 "bfin-parse.y" { if ((yyvsp[(2) - (3)].value) == M_IU) (yyval.r0).r0 = 3; @@ -6689,78 +6867,78 @@ yyreduce: } break; - case 279: -#line 3783 "bfin-parse.y" + case 281: +#line 3955 "bfin-parse.y" { (yyval.reg) = (yyvsp[(3) - (4)].reg); } break; - case 280: -#line 3789 "bfin-parse.y" + case 282: +#line 3961 "bfin-parse.y" { (yyval.reg) = (yyvsp[(2) - (4)].reg); } break; - case 281: -#line 3798 "bfin-parse.y" + case 283: +#line 3970 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 282: -#line 3802 "bfin-parse.y" + case 284: +#line 3974 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 283: -#line 3809 "bfin-parse.y" + case 285: +#line 3981 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 284: -#line 3813 "bfin-parse.y" + case 286: +#line 3985 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 285: -#line 3817 "bfin-parse.y" + case 287: +#line 3989 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 286: -#line 3821 "bfin-parse.y" + case 288: +#line 3993 "bfin-parse.y" { (yyval.r0).r0 = 3; } break; - case 287: -#line 3828 "bfin-parse.y" + case 289: +#line 4000 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 288: -#line 3832 "bfin-parse.y" + case 290: +#line 4004 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 289: -#line 3839 "bfin-parse.y" + case 291: +#line 4011 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6769,8 +6947,8 @@ yyreduce: } break; - case 290: -#line 3847 "bfin-parse.y" + case 292: +#line 4019 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6779,8 +6957,8 @@ yyreduce: } break; - case 291: -#line 3855 "bfin-parse.y" + case 293: +#line 4027 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6789,8 +6967,8 @@ yyreduce: } break; - case 292: -#line 3863 "bfin-parse.y" + case 294: +#line 4035 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 0; /* s. */ @@ -6799,8 +6977,8 @@ yyreduce: } break; - case 293: -#line 3871 "bfin-parse.y" + case 295: +#line 4043 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6809,8 +6987,8 @@ yyreduce: } break; - case 294: -#line 3878 "bfin-parse.y" + case 296: +#line 4050 "bfin-parse.y" { (yyval.modcodes).r0 = 1; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6819,8 +6997,8 @@ yyreduce: } break; - case 295: -#line 3885 "bfin-parse.y" + case 297: +#line 4057 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6829,8 +7007,8 @@ yyreduce: } break; - case 296: -#line 3893 "bfin-parse.y" + case 298: +#line 4065 "bfin-parse.y" { (yyval.modcodes).r0 = 0; /* HL. */ (yyval.modcodes).s0 = 1; /* s. */ @@ -6839,83 +7017,88 @@ yyreduce: } break; - case 297: -#line 3903 "bfin-parse.y" + case 299: +#line 4075 "bfin-parse.y" { (yyval.modcodes).s0 = 0; /* s. */ (yyval.modcodes).x0 = 0; /* HL. */ } break; - case 298: -#line 3908 "bfin-parse.y" + case 300: +#line 4080 "bfin-parse.y" { (yyval.modcodes).s0 = 0; /* s. */ (yyval.modcodes).x0 = 1; /* HL. */ } break; - case 299: -#line 3913 "bfin-parse.y" + case 301: +#line 4085 "bfin-parse.y" { (yyval.modcodes).s0 = 1; /* s. */ (yyval.modcodes).x0 = 0; /* HL. */ } break; - case 300: -#line 3918 "bfin-parse.y" + case 302: +#line 4090 "bfin-parse.y" { (yyval.modcodes).s0 = 1; /* s. */ (yyval.modcodes).x0 = 1; /* HL. */ } break; - case 301: -#line 3925 "bfin-parse.y" + case 303: +#line 4097 "bfin-parse.y" { (yyval.modcodes).x0 = 2; } break; - case 302: -#line 3929 "bfin-parse.y" + case 304: +#line 4101 "bfin-parse.y" { (yyval.modcodes).x0 = 0; } break; - case 303: -#line 3933 "bfin-parse.y" + case 305: +#line 4105 "bfin-parse.y" { (yyval.modcodes).x0 = 1; } break; - case 304: -#line 3942 "bfin-parse.y" + case 306: +#line 4114 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (2)].reg); } break; - case 305: -#line 3949 "bfin-parse.y" + case 307: +#line 4121 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (2)].reg); } break; - case 306: -#line 3956 "bfin-parse.y" + case 308: +#line 4128 "bfin-parse.y" { (yyval.reg) = (yyvsp[(1) - (2)].reg); } break; - case 307: -#line 3963 "bfin-parse.y" + case 309: +#line 4135 "bfin-parse.y" { + if (IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_EVEN ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A1 to even register"); + else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_EVEN ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A0 to odd register"); + (yyval.macfunc).w = 1; (yyval.macfunc).P = 1; (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg)); @@ -6923,16 +7106,11 @@ yyreduce: (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg); (yyval.macfunc).s0.regno = 0; (yyval.macfunc).s1.regno = 0; - - if (IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_EVEN ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A1 to even register"); - else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_EVEN ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A0 to odd register"); } break; - case 308: -#line 3978 "bfin-parse.y" + case 310: +#line 4150 "bfin-parse.y" { (yyval.macfunc) = (yyvsp[(1) - (1)].macfunc); (yyval.macfunc).w = 0; (yyval.macfunc).P = 0; @@ -6940,9 +7118,14 @@ yyreduce: } break; - case 309: -#line 3984 "bfin-parse.y" + case 311: +#line 4156 "bfin-parse.y" { + if ((yyvsp[(4) - (5)].macfunc).n && IS_EVEN ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A1 to even register"); + else if (!(yyvsp[(4) - (5)].macfunc).n && !IS_EVEN ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A0 to odd register"); + (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc); (yyval.macfunc).w = 1; (yyval.macfunc).P = 1; @@ -6950,9 +7133,14 @@ yyreduce: } break; - case 310: -#line 3992 "bfin-parse.y" + case 312: +#line 4169 "bfin-parse.y" { + if ((yyvsp[(4) - (5)].macfunc).n && !IS_H ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A1 to low half of register"); + else if (!(yyvsp[(4) - (5)].macfunc).n && IS_H ((yyvsp[(1) - (5)].reg))) + return yyerror ("Cannot move A0 to high half of register"); + (yyval.macfunc) = (yyvsp[(4) - (5)].macfunc); (yyval.macfunc).w = 1; (yyval.macfunc).P = 0; @@ -6960,9 +7148,14 @@ yyreduce: } break; - case 311: -#line 4000 "bfin-parse.y" + case 313: +#line 4182 "bfin-parse.y" { + if (IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A1 to low half of register"); + else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_H ((yyvsp[(1) - (3)].reg))) + return yyerror ("Cannot move A0 to high half of register"); + (yyval.macfunc).w = 1; (yyval.macfunc).P = 0; (yyval.macfunc).n = IS_A1 ((yyvsp[(3) - (3)].reg)); @@ -6970,16 +7163,11 @@ yyreduce: (yyval.macfunc).dst = (yyvsp[(1) - (3)].reg); (yyval.macfunc).s0.regno = 0; (yyval.macfunc).s1.regno = 0; - - if (IS_A1 ((yyvsp[(3) - (3)].reg)) && !IS_H ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A1 to low half of register"); - else if (!IS_A1 ((yyvsp[(3) - (3)].reg)) && IS_H ((yyvsp[(1) - (3)].reg))) - return yyerror ("Cannot move A0 to high half of register"); } break; - case 312: -#line 4018 "bfin-parse.y" + case 314: +#line 4200 "bfin-parse.y" { (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); (yyval.macfunc).op = 0; @@ -6988,8 +7176,8 @@ yyreduce: } break; - case 313: -#line 4025 "bfin-parse.y" + case 315: +#line 4207 "bfin-parse.y" { (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); (yyval.macfunc).op = 1; @@ -6998,8 +7186,8 @@ yyreduce: } break; - case 314: -#line 4032 "bfin-parse.y" + case 316: +#line 4214 "bfin-parse.y" { (yyval.macfunc).n = IS_A1 ((yyvsp[(1) - (2)].reg)); (yyval.macfunc).op = 2; @@ -7008,8 +7196,8 @@ yyreduce: } break; - case 315: -#line 4042 "bfin-parse.y" + case 317: +#line 4224 "bfin-parse.y" { if (IS_DREG ((yyvsp[(1) - (3)].reg)) && IS_DREG ((yyvsp[(3) - (3)].reg))) { @@ -7021,72 +7209,72 @@ yyreduce: } break; - case 316: -#line 4055 "bfin-parse.y" + case 318: +#line 4237 "bfin-parse.y" { (yyval.r0).r0 = 0; } break; - case 317: -#line 4059 "bfin-parse.y" + case 319: +#line 4241 "bfin-parse.y" { (yyval.r0).r0 = 1; } break; - case 318: -#line 4063 "bfin-parse.y" + case 320: +#line 4245 "bfin-parse.y" { (yyval.r0).r0 = 2; } break; - case 319: -#line 4067 "bfin-parse.y" + case 321: +#line 4249 "bfin-parse.y" { (yyval.r0).r0 = 3; } break; - case 320: -#line 4074 "bfin-parse.y" + case 322: +#line 4256 "bfin-parse.y" { - (yyval.modcodes).r0 = (yyvsp[(3) - (3)].reg).regno; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 0; + (yyval.modcodes).r0 = (yyvsp[(3) - (3)].reg).regno; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; } break; - case 321: -#line 4080 "bfin-parse.y" + case 323: +#line 4262 "bfin-parse.y" { - (yyval.modcodes).r0 = 0x18; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 0; + (yyval.modcodes).r0 = 0x18; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 0; } break; - case 322: -#line 4086 "bfin-parse.y" + case 324: +#line 4268 "bfin-parse.y" { - (yyval.modcodes).r0 = (yyvsp[(1) - (3)].reg).regno; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 1; + (yyval.modcodes).r0 = (yyvsp[(1) - (3)].reg).regno; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 1; } break; - case 323: -#line 4092 "bfin-parse.y" + case 325: +#line 4274 "bfin-parse.y" { - (yyval.modcodes).r0 = 0x18; - (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; - (yyval.modcodes).s0 = 1; + (yyval.modcodes).r0 = 0x18; + (yyval.modcodes).x0 = (yyvsp[(2) - (3)].r0).r0; + (yyval.modcodes).s0 = 1; } break; - case 324: -#line 4102 "bfin-parse.y" + case 326: +#line 4284 "bfin-parse.y" { Expr_Node_Value val; val.s_value = S_GET_NAME((yyvsp[(1) - (1)].symbol)); @@ -7094,23 +7282,23 @@ yyreduce: } break; - case 325: -#line 4111 "bfin-parse.y" + case 327: +#line 4293 "bfin-parse.y" { (yyval.value) = BFD_RELOC_BFIN_GOT; } break; - case 326: -#line 4113 "bfin-parse.y" + case 328: +#line 4295 "bfin-parse.y" { (yyval.value) = BFD_RELOC_BFIN_GOT17M4; } break; - case 327: -#line 4115 "bfin-parse.y" + case 329: +#line 4297 "bfin-parse.y" { (yyval.value) = BFD_RELOC_BFIN_FUNCDESC_GOT17M4; } break; - case 328: -#line 4119 "bfin-parse.y" + case 330: +#line 4301 "bfin-parse.y" { Expr_Node_Value val; val.i_value = (yyvsp[(3) - (3)].value); @@ -7118,29 +7306,29 @@ yyreduce: } break; - case 329: -#line 4127 "bfin-parse.y" + case 331: +#line 4309 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 330: -#line 4131 "bfin-parse.y" + case 332: +#line 4313 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 331: -#line 4138 "bfin-parse.y" + case 333: +#line 4320 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (3)].expr); } break; - case 332: -#line 4144 "bfin-parse.y" + case 334: +#line 4326 "bfin-parse.y" { Expr_Node_Value val; val.i_value = (yyvsp[(1) - (1)].value); @@ -7148,113 +7336,113 @@ yyreduce: } break; - case 333: -#line 4150 "bfin-parse.y" + case 335: +#line 4332 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 334: -#line 4154 "bfin-parse.y" + case 336: +#line 4336 "bfin-parse.y" { (yyval.expr) = (yyvsp[(2) - (3)].expr); } break; - case 335: -#line 4158 "bfin-parse.y" + case 337: +#line 4340 "bfin-parse.y" { (yyval.expr) = unary (Expr_Op_Type_COMP, (yyvsp[(2) - (2)].expr)); } break; - case 336: -#line 4162 "bfin-parse.y" + case 338: +#line 4344 "bfin-parse.y" { (yyval.expr) = unary (Expr_Op_Type_NEG, (yyvsp[(2) - (2)].expr)); } break; - case 337: -#line 4168 "bfin-parse.y" + case 339: +#line 4350 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } break; - case 338: -#line 4174 "bfin-parse.y" + case 340: +#line 4356 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Mult, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 339: -#line 4178 "bfin-parse.y" + case 341: +#line 4360 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Div, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 340: -#line 4182 "bfin-parse.y" + case 342: +#line 4364 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Mod, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 341: -#line 4186 "bfin-parse.y" + case 343: +#line 4368 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Add, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 342: -#line 4190 "bfin-parse.y" + case 344: +#line 4372 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Sub, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 343: -#line 4194 "bfin-parse.y" + case 345: +#line 4376 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Lshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 344: -#line 4198 "bfin-parse.y" + case 346: +#line 4380 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_Rshift, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 345: -#line 4202 "bfin-parse.y" + case 347: +#line 4384 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_BAND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 346: -#line 4206 "bfin-parse.y" + case 348: +#line 4388 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_LOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 347: -#line 4210 "bfin-parse.y" + case 349: +#line 4392 "bfin-parse.y" { (yyval.expr) = binary (Expr_Op_Type_BOR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); } break; - case 348: -#line 4214 "bfin-parse.y" + case 350: +#line 4396 "bfin-parse.y" { (yyval.expr) = (yyvsp[(1) - (1)].expr); } @@ -7262,7 +7450,7 @@ yyreduce: /* Line 1267 of yacc.c. */ -#line 7266 "bfin-parse.c" +#line 7454 "bfin-parse.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -7476,7 +7664,7 @@ yyreturn: } -#line 4220 "bfin-parse.y" +#line 4402 "bfin-parse.y" EXPR_T @@ -7491,11 +7679,11 @@ mkexpr (int x, SYMBOL_T s) 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; + int umax = (1 << sz) - 1; + int min = -1 << (sz - 1); + int max = (1 << (sz - 1)) - 1; - long v = EXPR_VALUE (expr); + int v = (EXPR_VALUE (expr)) & 0xffffffff; if ((v % mul) != 0) { @@ -7577,7 +7765,7 @@ binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y) break; default: - error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__); } return x; } @@ -7623,7 +7811,7 @@ unary (Expr_Op_Type op, Expr_Node *x) x->value.i_value = ~x->value.i_value; break; default: - error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__); } return x; } diff --git a/gas/bfin-parse.h b/gas/bfin-parse.h index f478b28..22d28a3 100644 --- a/gas/bfin-parse.h +++ b/gas/bfin-parse.h @@ -392,7 +392,7 @@ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE -#line 366 "bfin-parse.y" +#line 407 "bfin-parse.y" { INSTR_T instr; Expr_Node *expr; @@ -404,7 +404,7 @@ typedef union YYSTYPE struct { int r0; } r0; Opt_mode mod; } -/* Line 1489 of yacc.c. */ +/* Line 1529 of yacc.c. */ #line 409 "bfin-parse.h" YYSTYPE; # define yystype YYSTYPE /* obsolescent; will be withdrawn */ diff --git a/gas/bit_fix.h b/gas/bit_fix.h index 87aca6f..a83bddc 100644 --- a/gas/bit_fix.h +++ b/gas/bit_fix.h @@ -1,5 +1,6 @@ /* bit_fix.h - Copyright 1987, 1992, 2000, 2001, 2003, 2007 Free Software Foundation, Inc. + Copyright 1987, 1992, 2000, 2001, 2003, 2005, 2007 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/cgen.c b/gas/cgen.c index 178402a..59c7e56 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, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -452,9 +452,10 @@ gas_cgen_parse_operand (cd, want, strP, opindex, opinfo, resultP, valueP) 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) + && (!exp.X_add_symbol->bsym + || (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 @@ -1034,7 +1035,7 @@ gas_cgen_tc_gen_reloc (section, fixP) return NULL; } - assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); + gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy); @@ -1061,4 +1062,3 @@ gas_cgen_begin () else cgen_clear_signed_overflow_ok (gas_cgen_cpu_desc); } - diff --git a/gas/cgen.h b/gas/cgen.h index 7cac83c..1787615 100644 --- a/gas/cgen.h +++ b/gas/cgen.h @@ -1,5 +1,5 @@ /* GAS cgen support. - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/cond.c b/gas/cond.c index d3632d7..bcdc4bf 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, 2006, 2007 Free Software Foundation, Inc. + 2003, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config.in b/gas/config.in index 20d5df9..9493de7 100644 --- a/gas/config.in +++ b/gas/config.in @@ -1,5 +1,8 @@ /* config.in. Generated from configure.in by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* Define if using AIX 5.2 value for C_WEAKEXT. */ #undef AIX_WEAK_SUPPORT @@ -59,6 +62,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H @@ -83,12 +89,24 @@ /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H +/* Define if has struct stat.st_mtim.tv_nsec */ +#undef HAVE_ST_MTIM_TV_NSEC + +/* Define if has struct stat.st_mtim.tv_sec */ +#undef HAVE_ST_MTIM_TV_SEC + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H +/* Define to 1 if you have the header file. */ +#undef HAVE_TIME_H + +/* Define if has struct tm.tm_gmtoff. */ +#undef HAVE_TM_GMTOFF + /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H @@ -177,6 +195,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -185,7 +206,7 @@ /* 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. + automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ @@ -230,20 +251,66 @@ /* Allow use of E_MIPS_ABI_O32 on MIPS targets. */ #undef USE_E_MIPS_ABI_O32 +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + /* Using cgen code? */ #undef USING_CGEN /* 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 +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER +/* Number of bits in a file offset, on hosts where this is settable. */ +#undef _FILE_OFFSET_BITS + +/* Define for large files, on AIX-style hosts. */ +#undef _LARGE_FILES + +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + /* 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 diff --git a/gas/config/aout_gnu.h b/gas/config/aout_gnu.h index 9b1db9e..99186b9 100644 --- a/gas/config/aout_gnu.h +++ b/gas/config/aout_gnu.h @@ -1,7 +1,7 @@ /* This file is aout_gnu.h Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 2000, 2002, - 2007 Free Software Foundation, Inc. + 2005, 2007 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config/atof-ieee.c b/gas/config/atof-ieee.c index 5b1cbb5..4ceb0b9 100644 --- a/gas/config/atof-ieee.c +++ b/gas/config/atof-ieee.c @@ -1,6 +1,6 @@ /* atof_ieee.c - turn a Flonum into an IEEE floating point number Copyright 1987, 1992, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2005, - 2007 Free Software Foundation, Inc. + 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -160,7 +160,7 @@ make_invalid_floating_point_number (LITTLENUM_TYPE *words) char * atof_ieee (char *str, /* Text to convert to binary. */ - int what_kind, /* 'd', 'f', 'g', 'h'. */ + int what_kind, /* 'd', 'f', 'x', 'p'. */ LITTLENUM_TYPE *words) /* Build the binary here. */ { /* Extra bits for zeroed low-order bits. @@ -218,7 +218,6 @@ atof_ieee (char *str, /* Text to convert to binary. */ case 'p': case 'P': - precision = P_PRECISION; exponent_bits = -1; break; @@ -286,7 +285,7 @@ gen_to_words (LITTLENUM_TYPE *words, int precision, long exponent_bits) if (generic_floating_point_number.sign == 0) { if (TC_LARGEST_EXPONENT_IS_NORMAL (precision)) - as_warn ("NaNs are not supported by this target\n"); + as_warn (_("NaNs are not supported by this target\n")); if (precision == F_PRECISION) { words[0] = 0x7fff; @@ -325,7 +324,7 @@ gen_to_words (LITTLENUM_TYPE *words, int precision, long exponent_bits) else if (generic_floating_point_number.sign == 'P') { if (TC_LARGEST_EXPONENT_IS_NORMAL (precision)) - as_warn ("Infinities are not supported by this target\n"); + as_warn (_("Infinities are not supported by this target\n")); /* +INF: Do the right thing. */ if (precision == F_PRECISION) @@ -366,7 +365,7 @@ gen_to_words (LITTLENUM_TYPE *words, int precision, long exponent_bits) else if (generic_floating_point_number.sign == 'N') { if (TC_LARGEST_EXPONENT_IS_NORMAL (precision)) - as_warn ("Infinities are not supported by this target\n"); + as_warn (_("Infinities are not supported by this target\n")); /* Negative INF. */ if (precision == F_PRECISION) @@ -696,5 +695,119 @@ print_gen (gen) return (sbuf); } +#endif + +extern const char FLT_CHARS[]; +#define MAX_LITTLENUMS 6 + +/* This is a utility function called from various tc-*.c files. It + is here in order to reduce code duplication. + + Turn a string at input_line_pointer into a floating point constant + of type TYPE (a character found in the FLT_CHARS macro), and store + it as LITTLENUMS in the bytes buffer LITP. The number of chars + emitted is stored in *SIZEP. BIG_WORDIAN is TRUE if the littlenums + should be emitted most significant littlenum first. + + An error message is returned, or a NULL pointer if everything went OK. */ + +char * +ieee_md_atof (int type, + char *litP, + int *sizeP, + bfd_boolean big_wordian) +{ + LITTLENUM_TYPE words[MAX_LITTLENUMS]; + LITTLENUM_TYPE *wordP; + char *t; + int prec = 0; + if (strchr (FLT_CHARS, type) != NULL) + { + switch (type) + { + case 'f': + case 'F': + case 's': + case 'S': + prec = F_PRECISION; + break; + + case 'd': + case 'D': + case 'r': + case 'R': + prec = D_PRECISION; + break; + + case 't': + case 'T': + prec = X_PRECISION; + type = 'x'; /* This is what atof_ieee() understands. */ + break; + + case 'x': + case 'X': + case 'p': + case 'P': +#ifdef TC_M68K + /* Note: on the m68k there is a gap of 16 bits (one littlenum) + between the exponent and mantissa. Hence the precision is + 6 and not 5. */ + prec = P_PRECISION + 1; +#else + prec = P_PRECISION; #endif + break; + + default: + break; + } + } + /* The 'f' and 'd' types are always recognised, even if the target has + not put them into the FLT_CHARS macro. This is because the 'f' type + can come from the .dc.s, .dcb.s, .float or .single pseudo-ops and the + 'd' type from the .dc.d, .dbc.d or .double pseudo-ops. + + The 'x' type is not implicitly recongised however, even though it can + be generated by the .dc.x and .dbc.x pseudo-ops because not all targets + can support floating point values that big. ie the target has to + explicitly allow them by putting them into FLT_CHARS. */ + else if (type == 'f') + prec = F_PRECISION; + else if (type == 'd') + prec = D_PRECISION; + + if (prec == 0) + { + *sizeP = 0; + return _("Unrecognized or unsupported floating point constant"); + } + + gas_assert (prec <= MAX_LITTLENUMS); + + t = atof_ieee (input_line_pointer, type, words); + if (t) + input_line_pointer = t; + + *sizeP = prec * sizeof (LITTLENUM_TYPE); + + if (big_wordian) + { + for (wordP = words; prec --;) + { + md_number_to_chars (litP, (valueT) (* wordP ++), sizeof (LITTLENUM_TYPE)); + litP += sizeof (LITTLENUM_TYPE); + } + } + else + { + for (wordP = words + prec; prec --;) + { + md_number_to_chars (litP, (valueT) (* -- wordP), sizeof (LITTLENUM_TYPE)); + litP += sizeof (LITTLENUM_TYPE); + } + } + + return NULL; +} diff --git a/gas/config/atof-vax.c b/gas/config/atof-vax.c index fbae8ca..e012526 100644 --- a/gas/config/atof-vax.c +++ b/gas/config/atof-vax.c @@ -389,9 +389,9 @@ flonum_gen2vax (int format_letter, /* One of 'd' 'f' 'g' 'h'. */ #define MAXIMUM_NUMBER_OF_LITTLENUMS 8 /* For .hfloats. */ char * -md_atof (int what_statement_type, - char *literalP, - int *sizeP) +vax_md_atof (int what_statement_type, + char *literalP, + int *sizeP) { LITTLENUM_TYPE words[MAXIMUM_NUMBER_OF_LITTLENUMS]; char kind_of_float; @@ -447,5 +447,5 @@ md_atof (int what_statement_type, number_of_chars = 0; *sizeP = number_of_chars; - return kind_of_float ? NULL : _("Bad call to md_atof()"); + return kind_of_float ? NULL : _("Unrecognized or unsupported floating point constant"); } diff --git a/gas/config/bfin-aux.h b/gas/config/bfin-aux.h index 617140b..9c71939 100755 --- a/gas/config/bfin-aux.h +++ b/gas/config/bfin-aux.h @@ -1,151 +1,154 @@ -/* bfin-aux.h ADI Blackfin Header file for gas - Copyright 2005, 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 3, 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 "bfin-defs.h" - -#define REG_T Register * - -INSTR_T -bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, - int h01, int h11, int h00, int h10, - int op0, REG_T dst, REG_T src0, REG_T src1, int w0); - -INSTR_T -bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, - int h01, int h11, int h00, int h10, - int op0, REG_T dst, REG_T src0, REG_T src1, int w0); - -INSTR_T -bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, - REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); - -INSTR_T -bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, - int sop, int hls); - -INSTR_T -bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, - int sop, int hls); - -INSTR_T -bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, - int reloc); - -INSTR_T -bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, - Expr_Node *offset); - -INSTR_T -bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); - -INSTR_T -bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); - -INSTR_T -bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); - -INSTR_T -bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); - -INSTR_T -bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); - -INSTR_T -bfin_gen_alu2op (REG_T dst, REG_T src, int opc); - -INSTR_T -bfin_gen_compi2opd (REG_T dst, int src, int op); - -INSTR_T -bfin_gen_compi2opp (REG_T dst, int src, int op); - -INSTR_T -bfin_gen_dagmodik (REG_T i, int op); - -INSTR_T -bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); - -INSTR_T -bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); - -INSTR_T -bfin_gen_logi2op (int dst, int src, int opc); - -INSTR_T -bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); - -INSTR_T -bfin_gen_ccmv (REG_T src, REG_T dst, int t); - -INSTR_T -bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); - -INSTR_T -bfin_gen_cc2stat (int cbit, int op, int d); - -INSTR_T -bfin_gen_regmv (REG_T src, REG_T dst); - -INSTR_T -bfin_gen_cc2dreg (int op, REG_T reg); - -INSTR_T -bfin_gen_brcc (int t, int b, Expr_Node *offset); - -INSTR_T -bfin_gen_ujump (Expr_Node *offset); - -INSTR_T -bfin_gen_cactrl (REG_T reg, int a, int op); - -INSTR_T -bfin_gen_progctrl (int prgfunc, int poprnd); - -INSTR_T -bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, - Expr_Node *eoffset, REG_T reg); - -INSTR_T -bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); - -INSTR_T -bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); - -INSTR_T -bfin_gen_pushpopreg (REG_T reg, int w); - -INSTR_T -bfin_gen_calla (Expr_Node *addr, int s); - -INSTR_T -bfin_gen_linkage (int r, int framesize); - -INSTR_T -bfin_gen_pseudodbg (int fn, int reg, int grp); - -INSTR_T -bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); - -bfd_boolean -bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); - -INSTR_T -bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); +/* bfin-aux.h ADI Blackfin Header file for gas + Copyright 2005, 2007, 2009 + 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 3, 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 "bfin-defs.h" + +#define REG_T Register * + +INSTR_T +bfin_gen_dsp32mac (int op1, int mm, int mmod, int w1, int p, + int h01, int h11, int h00, int h10, + int op0, REG_T dst, REG_T src0, REG_T src1, int w0); + +INSTR_T +bfin_gen_dsp32mult (int op1, int mm, int mmod, int w1, int p, + int h01, int h11, int h00, int h10, + int op0, REG_T dst, REG_T src0, REG_T src1, int w0); + +INSTR_T +bfin_gen_dsp32alu (int HL, int aopcde, int aop, int s, int x, + REG_T dst0, REG_T dst1, REG_T src0, REG_T src1); + +INSTR_T +bfin_gen_dsp32shift (int sopcde, REG_T dst0, REG_T src0, REG_T src1, + int sop, int hls); + +INSTR_T +bfin_gen_dsp32shiftimm (int sopcde, REG_T dst0, int immag, REG_T src1, + int sop, int hls); + +INSTR_T +bfin_gen_ldimmhalf (REG_T reg, int h, int s, int z, Expr_Node *hword, + int reloc); + +INSTR_T +bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int w, int sz, int z, + Expr_Node *offset); + +INSTR_T +bfin_gen_ldst (REG_T ptr, REG_T reg, int aop, int sz, int z, int w); + +INSTR_T +bfin_gen_ldstii (REG_T ptr, REG_T reg, Expr_Node *offset, int w, int op); + +INSTR_T +bfin_gen_ldstiifp (REG_T reg, Expr_Node *offset, int w); + +INSTR_T +bfin_gen_ldstpmod (REG_T ptr, REG_T reg, int aop, int w, REG_T idx); + +INSTR_T +bfin_gen_dspldst (REG_T i, REG_T reg, int aop, int w, int m); + +INSTR_T +bfin_gen_alu2op (REG_T dst, REG_T src, int opc); + +INSTR_T +bfin_gen_compi2opd (REG_T dst, int src, int op); + +INSTR_T +bfin_gen_compi2opp (REG_T dst, int src, int op); + +INSTR_T +bfin_gen_dagmodik (REG_T i, int op); + +INSTR_T +bfin_gen_dagmodim (REG_T i, REG_T m, int op, int br); + +INSTR_T +bfin_gen_ptr2op (REG_T dst, REG_T src, int opc); + +INSTR_T +bfin_gen_logi2op (int dst, int src, int opc); + +INSTR_T +bfin_gen_comp3op (REG_T src0, REG_T src1, REG_T dst, int opc); + +INSTR_T +bfin_gen_ccmv (REG_T src, REG_T dst, int t); + +INSTR_T +bfin_gen_ccflag (REG_T x, int y, int opc, int i, int g); + +INSTR_T +bfin_gen_cc2stat (int cbit, int op, int d); + +INSTR_T +bfin_gen_regmv (REG_T src, REG_T dst); + +INSTR_T +bfin_gen_cc2dreg (int op, REG_T reg); + +INSTR_T +bfin_gen_brcc (int t, int b, Expr_Node *offset); + +INSTR_T +bfin_gen_ujump (Expr_Node *offset); + +INSTR_T +bfin_gen_cactrl (REG_T reg, int a, int op); + +INSTR_T +bfin_gen_progctrl (int prgfunc, int poprnd); + +INSTR_T +bfin_gen_loopsetup (Expr_Node *soffset, REG_T c, int rop, + Expr_Node *eoffset, REG_T reg); + +INSTR_T +bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg); + +void +bfin_loop_beginend (Expr_Node *expr, int begin); + +INSTR_T +bfin_gen_pushpopmultiple (int dr, int pr, int d, int p, int w); + +INSTR_T +bfin_gen_pushpopreg (REG_T reg, int w); + +INSTR_T +bfin_gen_calla (Expr_Node *addr, int s); + +INSTR_T +bfin_gen_linkage (int r, int framesize); + +INSTR_T +bfin_gen_pseudodbg (int fn, int reg, int grp); + +INSTR_T +bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected); + +bfd_boolean +bfin_resource_conflict (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); + +INSTR_T +bfin_gen_multi_instr (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2); diff --git a/gas/config/bfin-defs.h b/gas/config/bfin-defs.h index 2d96ab0..213e8bf 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, 2006, 2007 + Copyright 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -82,8 +82,9 @@ typedef enum #define T_NOGROUP 0xa0 /* Flags. */ -#define F_REG_ALL 0x1000 -#define F_REG_HIGH 0x2000 /* Half register: high half. */ +#define F_REG_NONE 0 +#define F_REG_HIGH 1 +#define F_REG_LOW 2 enum machine_registers { @@ -180,12 +181,12 @@ enum reg_class #define REG_SAME(a, b) ((a).regno == (b).regno) #define REG_EQUAL(a, b) (((a).regno & CODE_MASK) == ((b).regno & CODE_MASK)) -#define REG_CLASS(a) ((a.regno) & 0xf0) +#define REG_CLASS(a) ((a).regno & 0xf0) #define IS_A1(a) ((a).regno == REG_A1) -#define IS_H(a) ((a).regno & F_REG_HIGH ? 1: 0) -#define IS_EVEN(r) (r.regno % 2 == 0) +#define IS_H(a) ((a).flags & F_REG_HIGH ? 1: 0) +#define IS_EVEN(r) ((r).regno % 2 == 0) #define IS_HCOMPL(a, b) (REG_EQUAL(a, b) && \ - ((a).regno & F_REG_HIGH) != ((b).regno & F_REG_HIGH)) + ((a).flags & F_REG_HIGH) != ((b).flags & F_REG_HIGH)) /* register type checking. */ #define _TYPECHECK(r, x) (((r).regno & CLASS_MASK) == T_REG_##x) @@ -201,6 +202,25 @@ enum reg_class #define IS_CREG(r) ((r).regno == REG_LC0 || (r).regno == REG_LC1) #define IS_ALLREG(r) ((r).regno < T_NOGROUP) +#define IS_GENREG(r) \ + (IS_DREG (r) || IS_PREG (r) \ + || (r).regno == REG_A0x || (r).regno == REG_A0w \ + || (r).regno == REG_A1x || (r).regno == REG_A1w) + +#define IS_DAGREG(r) \ + (IS_IREG (r) || IS_MREG (r) || IS_BREG (r) || IS_LREG (r)) + +#define IS_SYSREG(r) \ + ((r).regno == REG_ASTAT || (r).regno == REG_SEQSTAT \ + || (r).regno == REG_SYSCFG || (r).regno == REG_RETI \ + || (r).regno == REG_RETX || (r).regno == REG_RETN \ + || (r).regno == REG_RETE || (r).regno == REG_RETS \ + || (r).regno == REG_LC0 || (r).regno == REG_LC1 \ + || (r).regno == REG_LT0 || (r).regno == REG_LT1 \ + || (r).regno == REG_LB0 || (r).regno == REG_LB1 \ + || (r).regno == REG_CYCLES || (r).regno == REG_CYCLES2 \ + || (r).regno == REG_EMUDAT) + /* Expression value macros. */ typedef enum @@ -287,7 +307,7 @@ typedef enum typedef union { const char *s_value; /* if relocation symbol, the text. */ - int i_value; /* if constant, the value. */ + long long i_value; /* if constant, the value. */ Expr_Op_Type op_value; /* if operator, the value. */ } Expr_Node_Value; @@ -374,6 +394,7 @@ EXPR_T mkexpr (int, SYMBOL_T); /* Defined in bfin-lex.l. */ void set_start_state (void); +extern int insn_regmask (int, int); #ifdef __cplusplus } #endif diff --git a/gas/config/bfin-lex.l b/gas/config/bfin-lex.l index b2194db..03164b7 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, 2006, 2007 + Copyright 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -63,8 +63,8 @@ int yylex (void); [sS][yY][sS][cC][fF][gG] _REG.regno = REG_SYSCFG; return REG; [sS][tT][iI] return STI; [sS][sS][yY][nN][cC] return SSYNC; -[sS][pP]"."[lL] _REG.regno = REG_SP; return HALF_REG; -[sS][pP]"."[hH] _REG.regno = REG_SP | F_REG_HIGH; return HALF_REG; +[sS][pP]"."[lL] _REG.regno = REG_SP; _REG.flags = F_REG_LOW; return HALF_REG; +[sS][pP]"."[hH] _REG.regno = REG_SP; _REG.flags = F_REG_HIGH; return HALF_REG; [sS][pP] _REG.regno = REG_SP; return REG; [sS][iI][gG][nN][bB][iI][tT][sS] return SIGNBITS; [sS][iI][gG][nN] return SIGN; @@ -158,8 +158,8 @@ int yylex (void); [gG][eE] return GE; [fF][uU] yylval.value = M_FU; return MMOD; [fF][pP] _REG.regno = REG_FP; return REG; -[fF][pP]"."[lL] _REG.regno = REG_FP; return HALF_REG; -[fF][pP]"."[hH] _REG.regno = REG_FP | F_REG_HIGH; return HALF_REG; +[fF][pP]"."[lL] _REG.regno = REG_FP; _REG.flags = F_REG_LOW; return HALF_REG; +[fF][pP]"."[hH] _REG.regno = REG_FP; _REG.flags = F_REG_HIGH; return HALF_REG; [eE][xX][tT][rR][aA][cC][tT] return EXTRACT; [eE][xX][pP][aA][dD][jJ] return EXPADJ; @@ -215,7 +215,6 @@ int yylex (void); [aA][vV]0[sS] _REG.regno = S_AV0S; return STATUS_REG; [aA][vV]1 _REG.regno = S_AV1; return STATUS_REG; [aA][vV]1[sS] _REG.regno = S_AV1S; return STATUS_REG; -[vV] _REG.regno = S_V; return STATUS_REG; [vV][sS] _REG.regno = S_VS; return STATUS_REG; @@ -293,7 +292,7 @@ abort return ABORT; [iI][fF][lL][uU][sS][hH] return IFLUSH; [fF][lL][uU][sS][hH][iI][nN][vV] return FLUSHINV; [fF][lL][uU][sS][hH] return FLUSH; -([0-9]+)|(0[xX][0-9a-fA-F]+)|([bhfodBHOFD]#[0-9a-fA-F]+)|(0.[0-9]+) { +([0-9]+)|(0[xX][0-9a-fA-F]+)|([bhfodBHOFD]#[0-9a-fA-F]+)|(0"."[0-9]+) { yylval.value = parse_int (&yytext); return NUMBER; } @@ -509,6 +508,7 @@ static long parse_int (char **end) static int parse_reg (Register *r, int cl, char *rt) { r->regno = cl | (rt[1] - '0'); + r->flags = F_REG_NONE; return REG; } @@ -524,11 +524,12 @@ static int parse_halfreg (Register *r, int cl, char *rt) case 'l': case 'L': + r->flags = F_REG_LOW; break; case 'h': case 'H': - r->regno |= F_REG_HIGH; + r->flags = F_REG_HIGH; break; } diff --git a/gas/config/bfin-parse.y b/gas/config/bfin-parse.y index cbb223a..003e41a 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, 2006, 2007 + Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -23,7 +23,7 @@ #include "as.h" #include -#include "bfin-aux.h" // opcode generating auxiliaries +#include "bfin-aux.h" /* Opcode generating auxiliaries. */ #include "libbfd.h" #include "elf/common.h" #include "elf/bfin.h" @@ -169,13 +169,13 @@ int yyerror (char *msg); void error (char *format, ...) { va_list ap; - char buffer[2000]; + static char buffer[2000]; va_start (ap, format); vsprintf (buffer, format, ap); va_end (ap); - as_bad (buffer); + as_bad ("%s", buffer); } int @@ -222,12 +222,6 @@ extern int yylex (void); /* 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) { @@ -264,6 +258,29 @@ check_multiply_halfregs (Macfunc *aa, Macfunc *ab) } +/* Check mac option. */ + +static int +check_macfunc_option (Macfunc *a, Opt_mode *opt) +{ + /* Default option is always valid. */ + if (opt->mod == 0) + return 0; + + if ((a->w == 1 && a->P == 1 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU + && opt->mod != M_S2RND && opt->mod != M_ISS2) + || (a->w == 1 && a->P == 0 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_IU + && opt->mod != M_T && opt->mod != M_TFU && opt->mod != M_S2RND + && opt->mod != M_ISS2 && opt->mod != M_IH) + || (a->w == 0 && a->P == 0 + && opt->mod != M_FU && opt->mod != M_IS && opt->mod != M_W32)) + return -1; + + return 0; +} + /* Check (vector) mac funcs and ops. */ static int @@ -274,6 +291,11 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, Macfunc mtmp; Opt_mode otmp; + /* The option mode should be put at the end of the second instruction + of the vector except M, which should follow MAC1 instruction. */ + if (opa->mod != 0) + return yyerror ("Bad opt mode"); + /* If a0macfunc comes before a1macfunc, swap them. */ if (aa->n == 0) @@ -291,16 +313,14 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, { 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 one of 0, 1, or 2, we have multiply_halfregs in both assignment_or_macfuncs. */ - if (aa->op < 3 && aa->op >=0 - && ab->op < 3 && ab->op >= 0) + if ((aa->op == 0 || aa->op == 1 || aa->op == 2) + && (ab->op == 0 || ab->op == 1 || ab->op == 2)) { if (check_multiply_halfregs (aa, ab) < 0) return -1; @@ -321,20 +341,18 @@ check_macfuncs (Macfunc *aa, Opt_mode *opa, 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 mod flags get ORed, too. */ + opb->mod |= opa->mod; + + /* Check option. */ + if (check_macfunc_option (aa, opb) < 0 + && check_macfunc_option (ab, opb) < 0) + return yyerror ("bad option"); /* 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; } @@ -361,6 +379,29 @@ is_group2 (INSTR_T x) return 0; } +static INSTR_T +gen_multi_instr_1 (INSTR_T dsp32, INSTR_T dsp16_grp1, INSTR_T dsp16_grp2) +{ + int mask1 = dsp32 ? insn_regmask (dsp32->value, dsp32->next->value) : 0; + int mask2 = dsp16_grp1 ? insn_regmask (dsp16_grp1->value, 0) : 0; + int mask3 = dsp16_grp2 ? insn_regmask (dsp16_grp2->value, 0) : 0; + + if ((mask1 & mask2) || (mask1 & mask3) || (mask2 & mask3)) + yyerror ("resource conflict in multi-issue instruction"); + + /* Anomaly 05000074 */ + if (ENABLE_AC_05000074 + && dsp32 != NULL && dsp16_grp1 != NULL + && (dsp32->value & 0xf780) == 0xc680 + && ((dsp16_grp1->value & 0xfe40) == 0x9240 + || (dsp16_grp1->value & 0xfe08) == 0xba08 + || (dsp16_grp1->value & 0xfc00) == 0xbc00)) + yyerror ("anomaly 05000074 - Multi-Issue Instruction with \ +dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported"); + + return bfin_gen_multi_instr (dsp32, dsp16_grp1, dsp16_grp2); +} + %} %union { @@ -505,7 +546,7 @@ is_group2 (INSTR_T x) %type a_minusassign %type multiply_halfregs %type assign_macfunc -%type a_macfunc +%type a_macfunc %type expr_1 %type asm_1 %type vmod @@ -584,27 +625,27 @@ asm: asm_1 SEMICOLON if (($1->value & 0xf800) == 0xc000) { if (is_group1 ($3) && is_group2 ($5)) - $$ = bfin_gen_multi_instr ($1, $3, $5); + $$ = gen_multi_instr_1 ($1, $3, $5); else if (is_group2 ($3) && is_group1 ($5)) - $$ = bfin_gen_multi_instr ($1, $5, $3); + $$ = gen_multi_instr_1 ($1, $5, $3); else return yyerror ("Wrong 16 bit instructions groups, slot 2 and slot 3 must be 16-bit instrution group"); } else if (($3->value & 0xf800) == 0xc000) { if (is_group1 ($1) && is_group2 ($5)) - $$ = bfin_gen_multi_instr ($3, $1, $5); + $$ = gen_multi_instr_1 ($3, $1, $5); else if (is_group2 ($1) && is_group1 ($5)) - $$ = bfin_gen_multi_instr ($3, $5, $1); + $$ = gen_multi_instr_1 ($3, $5, $1); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 3 must be 16-bit instrution group"); } else if (($5->value & 0xf800) == 0xc000) { if (is_group1 ($1) && is_group2 ($3)) - $$ = bfin_gen_multi_instr ($5, $1, $3); + $$ = gen_multi_instr_1 ($5, $1, $3); else if (is_group2 ($1) && is_group1 ($3)) - $$ = bfin_gen_multi_instr ($5, $3, $1); + $$ = gen_multi_instr_1 ($5, $3, $1); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be 16-bit instrution group"); } @@ -617,25 +658,25 @@ asm: asm_1 SEMICOLON if (($1->value & 0xf800) == 0xc000) { if (is_group1 ($3)) - $$ = bfin_gen_multi_instr ($1, $3, 0); + $$ = gen_multi_instr_1 ($1, $3, 0); else if (is_group2 ($3)) - $$ = bfin_gen_multi_instr ($1, 0, $3); + $$ = gen_multi_instr_1 ($1, 0, $3); else return yyerror ("Wrong 16 bit instructions groups, slot 2 must be the 16-bit instruction group"); } else if (($3->value & 0xf800) == 0xc000) { if (is_group1 ($1)) - $$ = bfin_gen_multi_instr ($3, $1, 0); + $$ = gen_multi_instr_1 ($3, $1, 0); else if (is_group2 ($1)) - $$ = bfin_gen_multi_instr ($3, 0, $1); + $$ = gen_multi_instr_1 ($3, 0, $1); else return yyerror ("Wrong 16 bit instructions groups, slot 1 must be the 16-bit instruction group"); } else if (is_group1 ($1) && is_group2 ($3)) - $$ = bfin_gen_multi_instr (0, $1, $3); + $$ = gen_multi_instr_1 (0, $1, $3); else if (is_group2 ($1) && is_group1 ($3)) - $$ = bfin_gen_multi_instr (0, $3, $1); + $$ = gen_multi_instr_1 (0, $3, $1); else return yyerror ("Wrong 16 bit instructions groups, slot 1 and slot 2 must be the 16-bit instruction group"); } @@ -660,6 +701,9 @@ asm_1: int w0 = 0, w1 = 0; int h00, h10, h01, h11; + if (check_macfunc_option (&$1, &$2) < 0) + return yyerror ("bad option"); + if ($1.n == 0) { if ($2.MM) @@ -763,7 +807,7 @@ asm_1: | LPAREN REG COMMA REG RPAREN ASSIGN BYTEOP16M LPAREN REG COLON expr COMMA REG COLON expr RPAREN aligndir { - if (!IS_DREG ($2) || !IS_DREG($4)) + if (!IS_DREG ($2) || !IS_DREG ($4)) return yyerror ("Dregs expected"); else if (!valid_dreg_pair (&$9, $11)) return yyerror ("Bad dreg pair"); @@ -1432,6 +1476,8 @@ asm_1: notethat ("COMPI2opD: dregs += imm7\n"); $$ = COMPI2OPD (&$1, imm7 ($3), 1); } + else if ((IS_DREG ($1) || IS_PREG ($1)) && IS_CONST ($3)) + return yyerror ("Immediate value out of range"); else return yyerror ("Register mismatch"); } @@ -1552,36 +1598,40 @@ asm_1: } | CCREG ASSIGN REG_A _ASSIGN_ASSIGN REG_A { - if (!REG_SAME ($3, $5)) + if ($3.regno == REG_A0 && $5.regno == REG_A1) { notethat ("CCflag: CC = A0 == A1\n"); $$ = CCFLAG (0, 0, 5, 0, 0); } else - return yyerror ("CC register expected"); + return yyerror ("AREGs are in bad order or same"); } | CCREG ASSIGN REG_A LESS_THAN REG_A { - if (!REG_SAME ($3, $5)) + if ($3.regno == REG_A0 && $5.regno == REG_A1) { notethat ("CCflag: CC = A0 < A1\n"); $$ = CCFLAG (0, 0, 6, 0, 0); } else - return yyerror ("Register mismatch"); + return yyerror ("AREGs are in bad order or same"); } | CCREG ASSIGN REG LESS_THAN REG iu_or_nothing { - if (REG_CLASS($3) == REG_CLASS($5)) + if ((IS_DREG ($3) && IS_DREG ($5)) + || (IS_PREG ($3) && IS_PREG ($5))) { notethat ("CCflag: CC = dpregs < dpregs\n"); $$ = CCFLAG (&$3, $5.regno & CODE_MASK, $6.r0, 0, IS_PREG ($3) ? 1 : 0); } else - return yyerror ("Compare only of same register class"); + return yyerror ("Bad register in comparison"); } | CCREG ASSIGN REG LESS_THAN expr iu_or_nothing { + if (!IS_DREG ($3) && !IS_PREG ($3)) + return yyerror ("Bad register in comparison"); + if (($6.r0 == 1 && IS_IMM ($5, 3)) || ($6.r0 == 3 && IS_UIMM ($5, 3))) { @@ -1593,14 +1643,20 @@ asm_1: } | CCREG ASSIGN REG _ASSIGN_ASSIGN REG { - if (REG_CLASS($3) == REG_CLASS($5)) + if ((IS_DREG ($3) && IS_DREG ($5)) + || (IS_PREG ($3) && IS_PREG ($5))) { notethat ("CCflag: CC = dpregs == dpregs\n"); $$ = CCFLAG (&$3, $5.regno & CODE_MASK, 0, 0, IS_PREG ($3) ? 1 : 0); - } + } + else + return yyerror ("Bad register in comparison"); } | CCREG ASSIGN REG _ASSIGN_ASSIGN expr { + if (!IS_DREG ($3) && !IS_PREG ($3)) + return yyerror ("Bad register in comparison"); + if (IS_IMM ($5, 3)) { notethat ("CCflag: CC = dpregs == imm3\n"); @@ -1611,44 +1667,36 @@ asm_1: } | CCREG ASSIGN REG_A _LESS_THAN_ASSIGN REG_A { - if (!REG_SAME ($3, $5)) + if ($3.regno == REG_A0 && $5.regno == REG_A1) { notethat ("CCflag: CC = A0 <= A1\n"); $$ = CCFLAG (0, 0, 7, 0, 0); } else - return yyerror ("CC register expected"); + return yyerror ("AREGs are in bad order or same"); } | CCREG ASSIGN REG _LESS_THAN_ASSIGN REG iu_or_nothing { - if (REG_CLASS($3) == REG_CLASS($5)) + if ((IS_DREG ($3) && IS_DREG ($5)) + || (IS_PREG ($3) && IS_PREG ($5))) { - notethat ("CCflag: CC = pregs <= pregs (..)\n"); + notethat ("CCflag: CC = dpregs <= dpregs (..)\n"); $$ = CCFLAG (&$3, $5.regno & CODE_MASK, 1 + $6.r0, 0, IS_PREG ($3) ? 1 : 0); } else - return yyerror ("Compare only of same register class"); + return yyerror ("Bad register in comparison"); } | CCREG ASSIGN REG _LESS_THAN_ASSIGN expr iu_or_nothing { + if (!IS_DREG ($3) && !IS_PREG ($3)) + return yyerror ("Bad register in comparison"); + if (($6.r0 == 1 && IS_IMM ($5, 3)) || ($6.r0 == 3 && IS_UIMM ($5, 3))) { - if (IS_DREG ($3)) - { - notethat ("CCflag: CC = dregs <= (u)imm3\n"); - /* x y opc I G */ - $$ = CCFLAG (&$3, imm3 ($5), 1 + $6.r0, 1, 0); - } - else if (IS_PREG ($3)) - { - notethat ("CCflag: CC = pregs <= (u)imm3\n"); - /* x y opc I G */ - $$ = CCFLAG (&$3, imm3 ($5), 1 + $6.r0, 1, 1); - } - else - return yyerror ("Dreg or Preg expected"); + notethat ("CCflag: CC = dpregs <= (u)imm3\n"); + $$ = CCFLAG (&$3, imm3 ($5), 1 + $6.r0, 1, IS_PREG ($3) ? 1 : 0); } else return yyerror ("Bad constant value"); @@ -1673,9 +1721,18 @@ asm_1: | REG ASSIGN REG { - if (IS_ALLREG ($1) && IS_ALLREG ($3)) + if ((IS_GENREG ($1) && IS_GENREG ($3)) + || (IS_GENREG ($1) && IS_DAGREG ($3)) + || (IS_DAGREG ($1) && IS_GENREG ($3)) + || (IS_DAGREG ($1) && IS_DAGREG ($3)) + || (IS_GENREG ($1) && $3.regno == REG_USP) + || ($1.regno == REG_USP && IS_GENREG ($3)) + || (IS_DREG ($1) && IS_SYSREG ($3)) + || (IS_PREG ($1) && IS_SYSREG ($3)) + || (IS_SYSREG ($1) && IS_DREG ($3)) + || (IS_SYSREG ($1) && IS_PREG ($3)) + || (IS_SYSREG ($1) && $3.regno == REG_USP)) { - notethat ("REGMV: allregs = allregs\n"); $$ = bfin_gen_regmv (&$3, &$1); } else @@ -1719,6 +1776,11 @@ asm_1: if (!IS_H ($1) && $4.MM) return yyerror ("(M) not allowed with MAC0"); + if ($4.mod != 0 && $4.mod != M_FU && $4.mod != M_IS + && $4.mod != M_IU && $4.mod != M_T && $4.mod != M_TFU + && $4.mod != M_S2RND && $4.mod != M_ISS2 && $4.mod != M_IH) + return yyerror ("bad option."); + if (IS_H ($1)) { $$ = DSP32MULT (0, $4.MM, $4.mod, 1, 0, @@ -1742,6 +1804,10 @@ asm_1: if (IS_EVEN ($1) && $4.MM) return yyerror ("(M) not allowed with MAC0"); + if ($4.mod != 0 && $4.mod != M_FU && $4.mod != M_IS + && $4.mod != M_S2RND && $4.mod != M_ISS2) + return yyerror ("bad option"); + if (!IS_EVEN ($1)) { notethat ("dsp32mult: dregs = multiply_halfregs (opt_mode)\n"); @@ -1892,22 +1958,20 @@ asm_1: else return yyerror ("Bad shift value or register"); } - | HALF_REG ASSIGN HALF_REG LESS_LESS expr - { - if (IS_UIMM ($5, 4)) - { - notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); - $$ = DSP32SHIFTIMM (0x0, &$1, imm5 ($5), &$3, 2, HL2 ($1, $3)); - } - else - return yyerror ("Bad shift value"); - } | HALF_REG ASSIGN HALF_REG LESS_LESS expr smod { if (IS_UIMM ($5, 4)) { - notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); - $$ = DSP32SHIFTIMM (0x0, &$1, imm5 ($5), &$3, $6.s0, HL2 ($1, $3)); + if ($6.s0) + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4 (S)\n"); + $$ = DSP32SHIFTIMM (0x0, &$1, imm5 ($5), &$3, $6.s0, HL2 ($1, $3)); + } + else + { + notethat ("dsp32shiftimm: dregs_half = dregs_half << uimm4\n"); + $$ = DSP32SHIFTIMM (0x0, &$1, imm5 ($5), &$3, 2, HL2 ($1, $3)); + } } else return yyerror ("Bad shift value"); @@ -2883,76 +2947,105 @@ asm_1: | B LBRACK REG post_op RBRACK ASSIGN REG { - if (IS_PREG ($3) && IS_DREG ($7)) - { - notethat ("LDST: B [ pregs ] = dregs\n"); - $$ = LDST (&$3, &$7, $4.x0, 2, 0, 1); - } - else - return yyerror ("Register mismatch"); + if (!IS_DREG ($7)) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ($3)) + return yyerror ("Preg expected in address"); + + notethat ("LDST: B [ pregs ] = dregs\n"); + $$ = LDST (&$3, &$7, $4.x0, 2, 0, 1); } /* LDSTidxI: B [ pregs + imm16 ] = dregs. */ | B LBRACK REG plus_minus expr RBRACK ASSIGN REG { - if (IS_PREG ($3) && IS_RANGE(16, $5, $4.r0, 1) && IS_DREG ($8)) + Expr_Node *tmp = $5; + + if (!IS_DREG ($8)) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ($3)) + return yyerror ("Preg expected in address"); + + if (IS_RELOC ($5)) + return yyerror ("Plain symbol used as offset"); + + if ($4.r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (in_range_p (tmp, -32768, 32767, 0)) { notethat ("LDST: B [ pregs + imm16 ] = dregs\n"); - if ($4.r0) - neg_value ($5); $$ = LDSTIDXI (&$3, &$8, 1, 2, 0, $5); } else - return yyerror ("Register mismatch or const size wrong"); + return yyerror ("Displacement out of range"); } /* LDSTii: W [ pregs + uimm4s2 ] = dregs. */ | W LBRACK REG plus_minus expr RBRACK ASSIGN REG { - if (IS_PREG ($3) && IS_URANGE (4, $5, $4.r0, 2) && IS_DREG ($8)) + Expr_Node *tmp = $5; + + if (!IS_DREG ($8)) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ($3)) + return yyerror ("Preg expected in address"); + + if ($4.r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ($5)) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, 0, 30, 1)) { notethat ("LDSTii: W [ pregs +- uimm5m2 ] = dregs\n"); - $$ = LDSTII (&$3, &$8, $5, 1, 1); + $$ = LDSTII (&$3, &$8, tmp, 1, 1); } - else if (IS_PREG ($3) && IS_RANGE(16, $5, $4.r0, 2) && IS_DREG ($8)) + else if (in_range_p (tmp, -65536, 65535, 1)) { notethat ("LDSTidxI: W [ pregs + imm17m2 ] = dregs\n"); - if ($4.r0) - neg_value ($5); - $$ = LDSTIDXI (&$3, &$8, 1, 1, 0, $5); + $$ = LDSTIDXI (&$3, &$8, 1, 1, 0, tmp); } else - return yyerror ("Bad register(s) or wrong constant size"); + return yyerror ("Displacement out of range"); } /* LDST: W [ pregs ] = dregs. */ | W LBRACK REG post_op RBRACK ASSIGN REG { - if (IS_PREG ($3) && IS_DREG ($7)) - { - notethat ("LDST: W [ pregs ] = dregs\n"); - $$ = LDST (&$3, &$7, $4.x0, 1, 0, 1); - } - else - return yyerror ("Bad register(s) for STORE"); + if (!IS_DREG ($7)) + return yyerror ("Dreg expected for source operand"); + if (!IS_PREG ($3)) + return yyerror ("Preg expected in address"); + + notethat ("LDST: W [ pregs ] = dregs\n"); + $$ = LDST (&$3, &$7, $4.x0, 1, 0, 1); } | W LBRACK REG post_op RBRACK ASSIGN HALF_REG { + if (!IS_DREG ($7)) + return yyerror ("Dreg expected for source operand"); + if ($4.x0 == 2) + { + if (!IS_IREG ($3) && !IS_PREG ($3)) + return yyerror ("Ireg or Preg expected in address"); + } + else if (!IS_IREG ($3)) + return yyerror ("Ireg expected in address"); + if (IS_IREG ($3)) { notethat ("dspLDST: W [ iregs ] = dregs_half\n"); $$ = DSPLDST (&$3, 1 + IS_H ($7), &$7, $4.x0, 1); } - else if ($4.x0 == 2 && IS_PREG ($3) && IS_DREG ($7)) + else { - notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); + notethat ("LDSTpmod: W [ pregs ] = dregs_half\n"); $$ = LDSTPMOD (&$3, &$7, &$3, 1 + IS_H ($7), 1); - } - else - return yyerror ("Bad register(s) for STORE"); } /* LDSTiiFP: [ FP - const ] = dpregs. */ @@ -2962,14 +3055,17 @@ asm_1: int ispreg = IS_PREG ($7); if (!IS_PREG ($2)) - return yyerror ("Preg expected for indirect"); + return yyerror ("Preg expected in address"); if (!IS_DREG ($7) && !ispreg) - return yyerror ("Bad source register for STORE"); + return yyerror ("Preg expected for source operand"); if ($3.r0) tmp = unary (Expr_Op_Type_NEG, tmp); + if (IS_RELOC ($4)) + return yyerror ("Plain symbol used as offset"); + if (in_range_p (tmp, 0, 63, 3)) { notethat ("LDSTii: dpregs = [ pregs + uimm6m4 ]\n"); @@ -2984,105 +3080,128 @@ asm_1: else if (in_range_p (tmp, -131072, 131071, 3)) { notethat ("LDSTidxI: [ pregs + imm18m4 ] = dpregs\n"); - $$ = LDSTIDXI (&$2, &$7, 1, 0, ispreg ? 1: 0, tmp); + $$ = LDSTIDXI (&$2, &$7, 1, 0, ispreg ? 1 : 0, tmp); } else - return yyerror ("Displacement out of range for store"); + return yyerror ("Displacement out of range"); } | REG ASSIGN W LBRACK REG plus_minus expr RBRACK xpmod { - if (IS_DREG ($1) && IS_PREG ($5) && IS_URANGE (4, $7, $6.r0, 2)) + Expr_Node *tmp = $7; + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ($5)) + return yyerror ("Preg expected in address"); + + if ($6.r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ($7)) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, 0, 30, 1)) { - notethat ("LDSTii: dregs = W [ pregs + uimm4s2 ] (.)\n"); - $$ = LDSTII (&$5, &$1, $7, 0, 1 << $9.r0); + notethat ("LDSTii: dregs = W [ pregs + uimm5m2 ] (.)\n"); + $$ = LDSTII (&$5, &$1, tmp, 0, 1 << $9.r0); } - else if (IS_DREG ($1) && IS_PREG ($5) && IS_RANGE(16, $7, $6.r0, 2)) + else if (in_range_p (tmp, -65536, 65535, 1)) { notethat ("LDSTidxI: dregs = W [ pregs + imm17m2 ] (.)\n"); - if ($6.r0) - neg_value ($7); - $$ = LDSTIDXI (&$5, &$1, 0, 1, $9.r0, $7); + $$ = LDSTIDXI (&$5, &$1, 0, 1, $9.r0, tmp); } else - return yyerror ("Bad register or constant for LOAD"); + return yyerror ("Displacement out of range"); } | HALF_REG ASSIGN W LBRACK REG post_op RBRACK { + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for source operand"); + if ($6.x0 == 2) + { + if (!IS_IREG ($5) && !IS_PREG ($5)) + return yyerror ("Ireg or Preg expected in address"); + } + else if (!IS_IREG ($5)) + return yyerror ("Ireg expected in address"); + if (IS_IREG ($5)) { - notethat ("dspLDST: dregs_half = W [ iregs ]\n"); + notethat ("dspLDST: dregs_half = W [ iregs ]\n"); $$ = DSPLDST(&$5, 1 + IS_H ($1), &$1, $6.x0, 0); } - else if ($6.x0 == 2 && IS_DREG ($1) && IS_PREG ($5)) + else { - notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); + notethat ("LDSTpmod: dregs_half = W [ pregs ]\n"); $$ = LDSTPMOD (&$5, &$1, &$5, 1 + IS_H ($1), 0); } - else - return yyerror ("Bad register or post_op for LOAD"); } | REG ASSIGN W LBRACK REG post_op RBRACK xpmod { - if (IS_DREG ($1) && IS_PREG ($5)) - { - notethat ("LDST: dregs = W [ pregs ] (.)\n"); - $$ = LDST (&$5, &$1, $6.x0, 1, $8.r0, 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ($5)) + return yyerror ("Preg expected in address"); + + notethat ("LDST: dregs = W [ pregs ] (.)\n"); + $$ = LDST (&$5, &$1, $6.x0, 1, $8.r0, 0); } | REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK xpmod { - if (IS_DREG ($1) && IS_PREG ($5) && IS_PREG ($7)) - { - notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); - $$ = LDSTPMOD (&$5, &$1, &$7, 3, $9.r0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ($5) || !IS_PREG ($7)) + return yyerror ("Preg expected in address"); + + notethat ("LDSTpmod: dregs = W [ pregs ++ pregs ] (.)\n"); + $$ = LDSTPMOD (&$5, &$1, &$7, 3, $9.r0); } | HALF_REG ASSIGN W LBRACK REG _PLUS_PLUS REG RBRACK { - if (IS_DREG ($1) && IS_PREG ($5) && IS_PREG ($7)) - { - notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); - $$ = LDSTPMOD (&$5, &$1, &$7, 1 + IS_H ($1), 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ($5) || !IS_PREG ($7)) + return yyerror ("Preg expected in address"); + + notethat ("LDSTpmod: dregs_half = W [ pregs ++ pregs ]\n"); + $$ = LDSTPMOD (&$5, &$1, &$7, 1 + IS_H ($1), 0); } | LBRACK REG post_op RBRACK ASSIGN REG { - if (IS_IREG ($2) && IS_DREG ($6)) + if (!IS_IREG ($2) && !IS_PREG ($2)) + return yyerror ("Ireg or Preg expected in address"); + else if (IS_IREG ($2) && !IS_DREG ($6)) + return yyerror ("Dreg expected for source operand"); + else if (IS_PREG ($2) && !IS_DREG ($6) && !IS_PREG ($6)) + return yyerror ("Dreg or Preg expected for source operand"); + + if (IS_IREG ($2)) { notethat ("dspLDST: [ iregs ] = dregs\n"); $$ = DSPLDST(&$2, 0, &$6, $3.x0, 1); } - else if (IS_PREG ($2) && IS_DREG ($6)) + else if (IS_DREG ($6)) { notethat ("LDST: [ pregs ] = dregs\n"); $$ = LDST (&$2, &$6, $3.x0, 0, 0, 1); } - else if (IS_PREG ($2) && IS_PREG ($6)) + else { notethat ("LDST: [ pregs ] = pregs\n"); $$ = LDST (&$2, &$6, $3.x0, 0, 1, 1); } - else - return yyerror ("Bad register for STORE"); } | LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN REG { - if (! IS_DREG ($7)) - return yyerror ("Expected Dreg for last argument"); + if (!IS_DREG ($7)) + return yyerror ("Dreg expected for source operand"); if (IS_IREG ($2) && IS_MREG ($4)) { @@ -3095,62 +3214,76 @@ asm_1: $$ = LDSTPMOD (&$2, &$7, &$4, 0, 1); } else - return yyerror ("Bad register for STORE"); + return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address"); } | W LBRACK REG _PLUS_PLUS REG RBRACK ASSIGN HALF_REG { if (!IS_DREG ($8)) - return yyerror ("Expect Dreg as last argument"); + return yyerror ("Dreg expected for source operand"); + if (IS_PREG ($3) && IS_PREG ($5)) { notethat ("LDSTpmod: W [ pregs ++ pregs ] = dregs_half\n"); $$ = LDSTPMOD (&$3, &$8, &$5, 1 + IS_H ($8), 1); } else - return yyerror ("Bad register for STORE"); + return yyerror ("Preg ++ Preg expected in address"); } | REG ASSIGN B LBRACK REG plus_minus expr RBRACK xpmod { - if (IS_DREG ($1) && IS_PREG ($5) && IS_RANGE(16, $7, $6.r0, 1)) + Expr_Node *tmp = $7; + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ($5)) + return yyerror ("Preg expected in address"); + + if ($6.r0) + tmp = unary (Expr_Op_Type_NEG, tmp); + + if (IS_RELOC ($7)) + return yyerror ("Plain symbol used as offset"); + + if (in_range_p (tmp, -32768, 32767, 0)) { notethat ("LDSTidxI: dregs = B [ pregs + imm16 ] (%c)\n", $9.r0 ? 'X' : 'Z'); - if ($6.r0) - neg_value ($7); - $$ = LDSTIDXI (&$5, &$1, 0, 2, $9.r0, $7); + $$ = LDSTIDXI (&$5, &$1, 0, 2, $9.r0, tmp); } else - return yyerror ("Bad register or value for LOAD"); + return yyerror ("Displacement out of range"); } | REG ASSIGN B LBRACK REG post_op RBRACK xpmod { - if (IS_DREG ($1) && IS_PREG ($5)) - { - notethat ("LDST: dregs = B [ pregs ] (%c)\n", - $8.r0 ? 'X' : 'Z'); - $$ = LDST (&$5, &$1, $6.x0, 2, $8.r0, 0); - } - else - return yyerror ("Bad register for LOAD"); + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + if (!IS_PREG ($5)) + return yyerror ("Preg expected in address"); + + notethat ("LDST: dregs = B [ pregs ] (%c)\n", + $8.r0 ? 'X' : 'Z'); + $$ = LDST (&$5, &$1, $6.x0, 2, $8.r0, 0); } | REG ASSIGN LBRACK REG _PLUS_PLUS REG RBRACK { - if (IS_DREG ($1) && IS_IREG ($4) && IS_MREG ($6)) + if (!IS_DREG ($1)) + return yyerror ("Dreg expected for destination operand"); + + if (IS_IREG ($4) && IS_MREG ($6)) { notethat ("dspLDST: dregs = [ iregs ++ mregs ]\n"); $$ = DSPLDST(&$4, $6.regno & CODE_MASK, &$1, 3, 0); } - else if (IS_DREG ($1) && IS_PREG ($4) && IS_PREG ($6)) + else if (IS_PREG ($4) && IS_PREG ($6)) { notethat ("LDSTpmod: dregs = [ pregs ++ pregs ]\n"); $$ = LDSTPMOD (&$4, &$1, &$6, 0, 0); } else - return yyerror ("Bad register for LOAD"); + return yyerror ("Preg ++ Preg or Ireg ++ Mreg expected in address"); } | REG ASSIGN LBRACK REG plus_minus got_or_expr RBRACK @@ -3160,18 +3293,24 @@ asm_1: int isgot = IS_RELOC($6); if (!IS_PREG ($4)) - return yyerror ("Preg expected for indirect"); + return yyerror ("Preg expected in address"); if (!IS_DREG ($1) && !ispreg) - return yyerror ("Bad destination register for LOAD"); + return yyerror ("Dreg or Preg expected for destination operand"); + + if (tmp->type == Expr_Node_Reloc + && strcmp (tmp->value.s_value, + "_current_shared_library_p5_offset_") != 0) + return yyerror ("Plain symbol used as offset"); if ($5.r0) tmp = unary (Expr_Op_Type_NEG, tmp); - if(isgot){ + if (isgot) + { notethat ("LDSTidxI: dpregs = [ pregs + sym@got ]\n"); - $$ = LDSTIDXI (&$4, &$1, 0, 0, ispreg ? 1: 0, tmp); - } + $$ = LDSTIDXI (&$4, &$1, 0, 0, ispreg ? 1 : 0, tmp); + } else if (in_range_p (tmp, 0, 63, 3)) { notethat ("LDSTii: dpregs = [ pregs + uimm7m4 ]\n"); @@ -3186,26 +3325,34 @@ asm_1: else if (in_range_p (tmp, -131072, 131071, 3)) { notethat ("LDSTidxI: dpregs = [ pregs + imm18m4 ]\n"); - $$ = LDSTIDXI (&$4, &$1, 0, 0, ispreg ? 1: 0, tmp); + $$ = LDSTIDXI (&$4, &$1, 0, 0, ispreg ? 1 : 0, tmp); } else - return yyerror ("Displacement out of range for load"); + return yyerror ("Displacement out of range"); } | REG ASSIGN LBRACK REG post_op RBRACK { - if (IS_DREG ($1) && IS_IREG ($4)) + if (!IS_IREG ($4) && !IS_PREG ($4)) + return yyerror ("Ireg or Preg expected in address"); + else if (IS_IREG ($4) && !IS_DREG ($1)) + return yyerror ("Dreg expected in destination operand"); + else if (IS_PREG ($4) && !IS_DREG ($1) && !IS_PREG ($1) + && ($4.regno != REG_SP || !IS_ALLREG ($1) || $5.x0 != 0)) + return yyerror ("Dreg or Preg expected in destination operand"); + + if (IS_IREG ($4)) { notethat ("dspLDST: dregs = [ iregs ]\n"); $$ = DSPLDST (&$4, 0, &$1, $5.x0, 0); } - else if (IS_DREG ($1) && IS_PREG ($4)) + else if (IS_DREG ($1)) { notethat ("LDST: dregs = [ pregs ]\n"); $$ = LDST (&$4, &$1, $5.x0, 0, 0, 0); } - else if (IS_PREG ($1) && IS_PREG ($4)) + else if (IS_PREG ($1)) { if (REG_SAME ($1, $4) && $5.x0 != 2) return yyerror ("Pregs can't be same"); @@ -3213,13 +3360,11 @@ asm_1: notethat ("LDST: pregs = [ pregs ]\n"); $$ = LDST (&$4, &$1, $5.x0, 0, 1, 0); } - else if ($4.regno == REG_SP && IS_ALLREG ($1) && $5.x0 == 0) + else { notethat ("PushPopReg: allregs = [ SP ++ ]\n"); $$ = PUSHPOPREG (&$1, 0); } - else - return yyerror ("Bad register or value"); } @@ -3390,6 +3535,27 @@ asm_1: else return yyerror ("Bad register or values for LOOP"); } + +/* LOOP_BEGIN. */ + | LOOP_BEGIN expr + { + if (!IS_RELOC ($2)) + return yyerror ("Invalid expression in LOOP_BEGIN statement"); + + bfin_loop_beginend ($2, 1); + $$ = 0; + } + +/* LOOP_END. */ + | LOOP_END expr + { + if (!IS_RELOC ($2)) + return yyerror ("Invalid expression in LOOP_END statement"); + + bfin_loop_beginend ($2, 0); + $$ = 0; + } + /* pseudoDEBUG. */ | DBG @@ -3422,21 +3588,27 @@ asm_1: $$ = bfin_gen_pseudodbg (3, 5, 0); } + | HLT + { + notethat ("psedoDEBUG: HLT\n"); + $$ = bfin_gen_pseudodbg (3, 4, 0); + } + | DBGA LPAREN HALF_REG COMMA expr RPAREN { - notethat ("pseudodbg_assert: DBGA (dregs_lo , uimm16 )\n"); + notethat ("pseudodbg_assert: DBGA (regs_lo/hi , uimm16 )\n"); $$ = bfin_gen_pseudodbg_assert (IS_H ($3), &$3, uimm16 ($5)); } - + | DBGAH LPAREN REG COMMA expr RPAREN { - notethat ("pseudodbg_assert: DBGAH (dregs , uimm16 )\n"); + notethat ("pseudodbg_assert: DBGAH (regs , uimm16 )\n"); $$ = bfin_gen_pseudodbg_assert (3, &$3, uimm16 ($5)); } | DBGAL LPAREN REG COMMA expr RPAREN { - notethat ("psedodbg_assert: DBGAL (dregs , uimm16 )\n"); + notethat ("psedodbg_assert: DBGAL (regs , uimm16 )\n"); $$ = bfin_gen_pseudodbg_assert (2, &$3, uimm16 ($5)); } @@ -3961,6 +4133,11 @@ a_plusassign: assign_macfunc: REG ASSIGN REG_A { + if (IS_A1 ($3) && IS_EVEN ($1)) + return yyerror ("Cannot move A1 to even register"); + else if (!IS_A1 ($3) && !IS_EVEN ($1)) + return yyerror ("Cannot move A0 to odd register"); + $$.w = 1; $$.P = 1; $$.n = IS_A1 ($3); @@ -3968,11 +4145,6 @@ assign_macfunc: $$.dst = $1; $$.s0.regno = 0; $$.s1.regno = 0; - - if (IS_A1 ($3) && IS_EVEN ($1)) - return yyerror ("Cannot move A1 to even register"); - else if (!IS_A1 ($3) && !IS_EVEN ($1)) - return yyerror ("Cannot move A0 to odd register"); } | a_macfunc { @@ -3982,6 +4154,11 @@ assign_macfunc: } | REG ASSIGN LPAREN a_macfunc RPAREN { + if ($4.n && IS_EVEN ($1)) + return yyerror ("Cannot move A1 to even register"); + else if (!$4.n && !IS_EVEN ($1)) + return yyerror ("Cannot move A0 to odd register"); + $$ = $4; $$.w = 1; $$.P = 1; @@ -3990,6 +4167,11 @@ assign_macfunc: | HALF_REG ASSIGN LPAREN a_macfunc RPAREN { + if ($4.n && !IS_H ($1)) + return yyerror ("Cannot move A1 to low half of register"); + else if (!$4.n && IS_H ($1)) + return yyerror ("Cannot move A0 to high half of register"); + $$ = $4; $$.w = 1; $$.P = 0; @@ -3998,6 +4180,11 @@ assign_macfunc: | HALF_REG ASSIGN REG_A { + if (IS_A1 ($3) && !IS_H ($1)) + return yyerror ("Cannot move A1 to low half of register"); + else if (!IS_A1 ($3) && IS_H ($1)) + return yyerror ("Cannot move A0 to high half of register"); + $$.w = 1; $$.P = 0; $$.n = IS_A1 ($3); @@ -4005,11 +4192,6 @@ assign_macfunc: $$.dst = $1; $$.s0.regno = 0; $$.s1.regno = 0; - - if (IS_A1 ($3) && !IS_H ($1)) - return yyerror ("Cannot move A1 to low half of register"); - else if (!IS_A1 ($3) && IS_H ($1)) - return yyerror ("Cannot move A0 to high half of register"); } ; @@ -4072,27 +4254,27 @@ cc_op: ccstat: CCREG cc_op STATUS_REG { - $$.r0 = $3.regno; - $$.x0 = $2.r0; - $$.s0 = 0; + $$.r0 = $3.regno; + $$.x0 = $2.r0; + $$.s0 = 0; } | CCREG cc_op V { - $$.r0 = 0x18; - $$.x0 = $2.r0; - $$.s0 = 0; + $$.r0 = 0x18; + $$.x0 = $2.r0; + $$.s0 = 0; } | STATUS_REG cc_op CCREG { - $$.r0 = $1.regno; - $$.x0 = $2.r0; - $$.s0 = 1; + $$.r0 = $1.regno; + $$.x0 = $2.r0; + $$.s0 = 1; } | V cc_op CCREG { - $$.r0 = 0x18; - $$.x0 = $2.r0; - $$.s0 = 1; + $$.r0 = 0x18; + $$.x0 = $2.r0; + $$.s0 = 1; } ; @@ -4231,11 +4413,11 @@ mkexpr (int x, SYMBOL_T s) 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; + int umax = (1 << sz) - 1; + int min = -1 << (sz - 1); + int max = (1 << (sz - 1)) - 1; - long v = EXPR_VALUE (expr); + int v = (EXPR_VALUE (expr)) & 0xffffffff; if ((v % mul) != 0) { @@ -4317,7 +4499,7 @@ binary (Expr_Op_Type op, Expr_Node *x, Expr_Node *y) break; default: - error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__); } return x; } @@ -4363,7 +4545,7 @@ unary (Expr_Op_Type op, Expr_Node *x) x->value.i_value = ~x->value.i_value; break; default: - error ("%s:%d: Internal compiler error\n", __FILE__, __LINE__); + error ("%s:%d: Internal assembler error\n", __FILE__, __LINE__); } return x; } diff --git a/gas/config/itbl-mips.h b/gas/config/itbl-mips.h index 7de934e..90c83d1 100644 --- a/gas/config/itbl-mips.h +++ b/gas/config/itbl-mips.h @@ -1,6 +1,6 @@ /* itbl-mips.h - Copyright 1997, 2007 Free Software Foundation, Inc. + Copyright 1997, 2005, 2007 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config/m68k-parse.h b/gas/config/m68k-parse.h index 6695cfc..a706592 100644 --- a/gas/config/m68k-parse.h +++ b/gas/config/m68k-parse.h @@ -1,6 +1,6 @@ /* m68k-parse.h -- header file for m68k assembler Copyright 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, - 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -101,6 +101,7 @@ enum m68k_register CACR, VBR, CAAR, + CPUCR, MSP, ITT0, ITT1, @@ -131,8 +132,8 @@ enum m68k_register MBAR, ASID, /* m5475. */ CAC, /* fido added this. */ - MBB, -#define last_movec_reg MBB + MBO, +#define last_movec_reg MBO /* End of movec ordering constraints. */ FPI, @@ -270,7 +271,12 @@ enum pic_relocation pic_plt_pcrel, /* @PLTPC */ pic_got_pcrel, /* @GOTPC */ pic_plt_off, /* @PLT */ - pic_got_off /* @GOT */ + pic_got_off, /* @GOT */ + pic_tls_gd, /* @TLSGD */ + pic_tls_ldm, /* @TLSLDM */ + pic_tls_ldo, /* @TLSLDO */ + pic_tls_ie, /* @TLSIE */ + pic_tls_le /* @TLSLE */ }; #endif diff --git a/gas/config/m68k-parse.y b/gas/config/m68k-parse.y index b2b3a2e..2c58266 100644 --- a/gas/config/m68k-parse.y +++ b/gas/config/m68k-parse.y @@ -1,5 +1,5 @@ /* m68k.y -- bison grammar for m68k operand parsing - Copyright 1995, 1996, 1997, 1998, 2001, 2003, 2004, 2005, 2007 + Copyright 1995, 1996, 1997, 1998, 2001, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. Written by Ken Raeburn and Ian Lance Taylor, Cygnus Support @@ -1010,7 +1010,20 @@ yylex () yylval.exp.pic_reloc = pic_none; cp = s - tail; - if (cp - 6 > str && cp[-6] == '@') + if (cp - 7 > str && cp[-7] == '@') + { + if (strncmp (cp - 7, "@TLSLDM", 7) == 0) + { + yylval.exp.pic_reloc = pic_tls_ldm; + tail += 7; + } + else if (strncmp (cp - 7, "@TLSLDO", 7) == 0) + { + yylval.exp.pic_reloc = pic_tls_ldo; + tail += 7; + } + } + else if (cp - 6 > str && cp[-6] == '@') { if (strncmp (cp - 6, "@PLTPC", 6) == 0) { @@ -1022,6 +1035,21 @@ yylex () yylval.exp.pic_reloc = pic_got_pcrel; tail += 6; } + else if (strncmp (cp - 6, "@TLSGD", 6) == 0) + { + yylval.exp.pic_reloc = pic_tls_gd; + tail += 6; + } + else if (strncmp (cp - 6, "@TLSIE", 6) == 0) + { + yylval.exp.pic_reloc = pic_tls_ie; + tail += 6; + } + else if (strncmp (cp - 6, "@TLSLE", 6) == 0) + { + yylval.exp.pic_reloc = pic_tls_le; + tail += 6; + } } else if (cp - 4 > str && cp[-4] == '@') { diff --git a/gas/config/obj-aout.c b/gas/config/obj-aout.c index c122c6b..daba73d 100644 --- a/gas/config/obj-aout.c +++ b/gas/config/obj-aout.c @@ -1,6 +1,6 @@ /* a.out object file format Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -132,7 +132,7 @@ obj_aout_frob_file_before_fix (void) x = bfd_set_section_contents (stdoutput, data_section, &b, (file_ptr) 0, (bfd_size_type) 1); - assert (x); + gas_assert (x); } static void diff --git a/gas/config/obj-coff-seh.c b/gas/config/obj-coff-seh.c new file mode 100644 index 0000000..e426d9e --- /dev/null +++ b/gas/config/obj-coff-seh.c @@ -0,0 +1,1337 @@ +/* seh pdata/xdata coff object file format + Copyright 2009 + Free Software Foundation, Inc. + + This file is part of GAS. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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 "obj-coff-seh.h" + +/* Forward declarations. */ +static seh_kind seh_get_target_kind (void); +static int seh_symbol (bfd *, const char *, const char *, const char *, asection *, int, int); +static void seh_reloc (bfd *, bfd_size_type, int, int); +static void save_relocs (asection *sec); +static asection *quick_section (bfd *abfd, const char *name, int flags, int align); +static void seh_symbol_init (bfd *abfd, unsigned int added); +static void seh_emit_rva (const char *); +static void seh_emit_long (const char *); +static void seh_make_globl (char *); +static segT seh_make_section (void); +static segT seh_make_section2 (const char *section_name, unsigned flags); +static char *seh_make_xlbl_name (seh_context *); +static char *make_seh_text_label (seh_context *c, symbolS **addr); + +static void seh_write_text_eh_data (const char *hnd, const char *hnd_data); +static void seh_emit_rva (const char *name); +static int seh_needed_unwind_info (seh_context *); +static void seh_fill_pcsyms (const seh_context *c, char **, int *); +static size_t seh_getelm_data_size (const seh_context *, int, int); +static size_t seh_getsize_of_unwind_entry (seh_context *, int, int, int); +static void seh_make_unwind_entry (const seh_context *, char *, int, int, int, unsigned char *, size_t *, int); +static size_t seh_getsize_unwind_data (seh_context *); +static void seh_create_unwind_data (seh_context *, unsigned char *, size_t); +static void seh_make_function_entry_xdata (seh_context *, char *, char *, char *, unsigned char *, size_t *,int); +static seh_scope_elem *seh_x64_makescope_elem (seh_context *, const char *, const char *, const char *, const char *); + +/* Local data. */ +static asymbol **symtab; +static int symptr; +static arelent *reltab = 0; +static int relcount = 0, relsize = 0; + +static seh_context *seh_ctx_root = NULL; +static seh_context *seh_ctx = NULL; +static seh_context *seh_ctx_cur = NULL; + +/* Write xdata for arm, sh3, sh4, and ppc. */ + +static void +seh_write_text_eh_data (const char *hnd, const char *hnd_data) +{ + if (!hnd || *hnd==0) + return; + if (hnd[0] == '@') + seh_emit_long ("0"); + else + seh_emit_long (hnd); + if (!hnd_data || hnd_data[0] == '@') + seh_emit_long ("0"); + else + seh_emit_long (hnd_data); +} + +/* Generate initial pdata for x64 and mips. */ +static void +make_function_entry_pdata (seh_context *c) +{ + segT sec = NULL; + segT current_seg = now_seg; + subsegT current_subseg = now_subseg; + + sec = seh_make_section (); + switch (seh_get_target_kind ()) + { + case seh_kind_x64: + subseg_set (sec, 0); + seh_emit_rva (c->func_name); + seh_emit_rva (c->end_symbol); + seh_emit_rva (c->xdata_first); + break; + case seh_kind_mips: + subseg_set (sec, 0); + seh_emit_long (c->func_name); + seh_emit_long (c->end_symbol); + if (c->handler_name == NULL) + seh_emit_long ("0"); + else if (c->handler_name[0] == '@') + { + if (strcasecmp (c->handler_name, "@1") == 0) + seh_emit_long ("1"); + else + seh_emit_long ("0"); + } + else + seh_emit_long (c->handler_name); + if (c->handler_data_name == NULL || c->handler_data_name[0] == '@') + seh_emit_long ("0"); + else + seh_emit_long (c->handler_data_name); + seh_emit_long (c->endprologue_symbol ? c->endprologue_symbol : c->func_name); + break; + default: + break; + } + subseg_set (current_seg, current_subseg); +} + +static void +seh_x64_write_xdata (void) +{ + seh_context *h; + size_t xdata_size = 0, count_syms = 0; + size_t xdata_offs = 0; + unsigned char *data; + segT seg_xdata; + bfd *abfd = stdoutput; + + h = seh_ctx_root; + if (!h || h->done) + return; + while (h != NULL) + { + h->xdata_offset = xdata_size; + xdata_size += seh_getsize_unwind_data (h); + count_syms += h->count_syms; + h = h->next; + } + + if (xdata_size == 0) + return; + + seh_symbol_init (abfd, count_syms); + data = xmalloc (xdata_size); + seg_xdata = quick_section (abfd, ".xdata", SEC_HAS_CONTENTS, 3); + seg_xdata->contents = data; + memset (data, 0, xdata_size); + bfd_set_section_size (abfd, seg_xdata, xdata_size); + h = seh_ctx_root; + while (h != NULL) + { + xdata_offs = h->xdata_offset; + h->section = seg_xdata; + h->abfd = abfd; + if (h->done == 0) + { + h->done = 1; + seh_create_unwind_data (h, data, xdata_offs); + h->done = 1; + } + h = h->next; + } + save_relocs (seg_xdata); + bfd_set_symtab (abfd, symtab, symptr); + bfd_set_section_contents (abfd, seg_xdata, data, 0, xdata_size); +} + +static void +seh_arm_create_pdata (seh_context *c, unsigned char *data, size_t pdata_offs) +{ + int idx; + unsigned int val; + valueT func_len = 0; + valueT prolog_len = 0; + valueT start_len = 0; + + func_len = resolve_symbol_value (c->end_addr); + start_len = resolve_symbol_value (c->start_addr); + if (c->endprologue_addr) + prolog_len = resolve_symbol_value (c->endprologue_addr); + else + prolog_len = start_len; + func_len -= start_len; + prolog_len -= start_len; + if (!c || !data) + return; + /* $$$$ */ + idx = seh_symbol (c->abfd, c->start_symbol, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, pdata_offs, BFD_RELOC_32, idx); + val = (unsigned int) func_len; + val <<= 8; + val |= ((unsigned int) prolog_len & 0xffU); + if (c->use_instruction_32) + val |= 0x40000000U; + if (c->handler_written) + val |= 0x80000000U; + bfd_put_32 (c->abfd, (bfd_vma) val, data + pdata_offs + 4); +} + +static void +seh_arm_write_pdata (void) +{ + seh_context *h; + size_t pdata_size = 0, count_syms = 0; + size_t pdata_offs = 0; + unsigned char *data; + segT seg_pdata; + bfd *abfd = stdoutput; + + h = seh_ctx_root; + if (h == NULL || h->done) + return; + while (h != NULL) + { + h->xdata_offset = pdata_size; + pdata_size += 8; + count_syms += 1; + h = h->next; + } + + if (pdata_size == 0) + return; + + seh_symbol_init (abfd, count_syms); + data = xmalloc (pdata_size); + seg_pdata = quick_section (abfd, ".pdata", SEC_HAS_CONTENTS, 3); + seg_pdata->contents = data; + memset (data, 0, pdata_size); + bfd_set_section_size (abfd, seg_pdata, pdata_size); + h = seh_ctx_root; + while (h != NULL) + { + pdata_offs = h->xdata_offset; + h->section = seg_pdata; + h->abfd = abfd; + if (h->done != 0) + { + seh_arm_create_pdata (h, data, pdata_offs); + h->done = 1; + } + h = h->next; + } + save_relocs (seg_pdata); + bfd_set_symtab (abfd, symtab, symptr); + bfd_set_section_contents (abfd, seg_pdata, data, 0, pdata_size); +} + +void +obj_coff_seh_do_final (void) +{ + switch (seh_get_target_kind ()) + { + case seh_kind_mips: + default: + break; + case seh_kind_arm: + seh_arm_write_pdata (); + break; + case seh_kind_x64: + seh_x64_write_xdata (); + break; + } +} + +static void +seh_x64_make_prologue_element (int kind, int reg, bfd_vma off) +{ + seh_prologue_element *n; + + if (seh_ctx_cur == NULL) + return; + if (seh_ctx_cur->elems_count == seh_ctx_cur->elems_max) + { + seh_ctx_cur->elems = (seh_prologue_element *) + xrealloc (seh_ctx_cur->elems, + ((seh_ctx_cur->elems_max + 8) * sizeof (seh_prologue_element))); + seh_ctx_cur->elems_max += 8; + } + n = &seh_ctx_cur->elems[seh_ctx_cur->elems_count]; + memset (n, 0, sizeof (seh_prologue_element)); + n->kind = kind; + n->reg = reg; + n->offset = off; + n->pc_symbol = make_seh_text_label (seh_ctx_cur, &(n->pc_addr)); + seh_ctx_cur->elems_count += 1; +} + +static int +seh_x64_read_reg (const char *tok, int kind, int *regno) +{ + static const char *frame_regs[16] = + { "cfa", "rcx", "rdx", "rbx", "rsp", "rbp","rsi","rdi", + "r8","r9","r10","r11","r12","r13","r14","r15" }; + static const char *int_regs[16] = + { "rax", "rcx", "rdx", "rbx", "rsp", "rbp","rsi","rdi", + "r8","r9","r10","r11","r12","r13","r14","r15" }; + static const char *xmm_regs[16] = + { "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10","xmm11","xmm12","xmm13","xmm14","xmm15" }; + static const char *mm_regs[16] = + { "xmm0", "mm1", "mm2", "mm3", "mm4", "mm5", "mm6", "mm7", + "xmm8", "mm9", "mm10","mm11","mm12","mm13","mm14","mm15" }; + const char **p = NULL; + char name_end; + char *symbol_name = NULL; + int i; + + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + switch (kind) + { + case 0: + p = frame_regs; + break; + case 1: + p = int_regs; + break; + case 2: + p = mm_regs; + break; + case 3: + p = xmm_regs; + break; + default: + abort (); + } + + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + return 0; + + if (*input_line_pointer == '%') + ++input_line_pointer; + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + + for (i = 0; i < 16; i++) + if (! strcasecmp (p[i], symbol_name)) + break; + + if (i == 16) + as_warn (_("In %s we found the invalid register name %s.\n"), + tok, symbol_name); + + *input_line_pointer = name_end; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + if (*input_line_pointer == ',') + ++input_line_pointer; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + *regno = i; + return i != 16; +} + +static int +seh_read_offset (const char *tok, bfd_vma *off) +{ + bfd_vma r, v = 0, base = 10; + int had_one = 0; + + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + if (*input_line_pointer == '0') + { + ++input_line_pointer; + had_one = 1; + base = 8; + switch ((*input_line_pointer)) + { + case 'x': + case 'X': + base = 16; + ++input_line_pointer; + break; + case 'd': + case 'D': + base = 10; + input_line_pointer++; + break; + case 'o': + case 'O': + base = 8; + input_line_pointer++; + break; + } + } + while (*input_line_pointer != 0) + { + if (input_line_pointer[0] >= '0' && input_line_pointer[0] <='9') + r = (bfd_vma) (input_line_pointer[0] - '0'); + else if (base == 16 && input_line_pointer[0] >= 'a' && input_line_pointer[0] <='f') + r = (bfd_vma) ((input_line_pointer[0] - 'a') + 10); + else if (base == 16 && input_line_pointer[0] >= 'A' && input_line_pointer[0] <='F') + r = (bfd_vma) ((input_line_pointer[0] - 'A') + 10); + else + break; + input_line_pointer++; + v *= base; + v += r; + had_one = 1; + } + *off = v; + if (had_one == 0) + { + as_warn (_("In %s we expect a number.\n"), + tok); + } + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + if (*input_line_pointer == ',') + ++input_line_pointer; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t') + input_line_pointer++; + return had_one != 0; +} + +static void +obj_coff_seh_32 (int what) +{ + if (seh_ctx_cur == NULL) + { + as_fatal (_(".seh_eh requires to be in .seh_proc/.seh_endproc block.\n")); + demand_empty_rest_of_line (); + return; + } + seh_ctx_cur->use_instruction_32 = (what ? 1 : 0); + if (seh_get_target_kind () == seh_kind_arm) + as_warn (_(".seh_%s32 is ignored for this target."), (what ? "" : "no")); + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_eh (int what ATTRIBUTE_UNUSED) +{ + if (seh_ctx_cur == NULL) + { + as_fatal (_(".seh_eh requires to be in .seh_proc/.seh_endproc block.\n")); + demand_empty_rest_of_line (); + return; + } + if (seh_get_target_kind () == seh_kind_arm) + { + seh_ctx_cur->handler_written = 1; + /* write block to .text if exception handler is set. */ + seh_write_text_eh_data (seh_ctx_cur->handler_name, seh_ctx_cur->handler_data_name); + } + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_handler (int what ATTRIBUTE_UNUSED) +{ + char *symbol_name; + char name_end; + + if (seh_ctx_cur == NULL) + { + as_fatal (_(".seh_handler requires to be in .seh_proc/.seh_endproc block.\n")); + demand_empty_rest_of_line (); + return; + } + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + { + as_fatal (_(".seh_handler requires a handler lable name.\n")); + demand_empty_rest_of_line (); + return; + } + + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + seh_ctx->handler_name = xstrdup (symbol_name); + if (symbol_name[0] == '@') + { + if (strcasecmp (symbol_name, "@0") != 0 && strcasecmp (symbol_name, "@1") != 0 + && strcasecmp (symbol_name, "@null") != 0) + as_warn (_("Unknown constant value ,%s' for handler."), symbol_name); + } + *input_line_pointer = name_end; + seh_ctx->handler_data_name = NULL; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + symbol_name = input_line_pointer; + if (*input_line_pointer != '\n' && *input_line_pointer != 0) + { + name_end = get_symbol_end (); + seh_ctx->handler_data_name = xstrdup (symbol_name); + if (symbol_name[0] == '@') + { + if (seh_get_target_kind () != seh_kind_x64) + as_fatal (_("For this target .seh_handler doesn't support constant user-data.")); + else if (strcasecmp (symbol_name, "@unwind") != 0 && + strcasecmp (symbol_name, "@except") != 0) + as_warn (_("For .seh_handler the constant ,%s' is ignored."), symbol_name); + } + *input_line_pointer = name_end; + } + if (seh_ctx_cur->handler_written) + as_warn (_(".seh_handler is ignored as .seh_eh was seen before.")); + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_scope (int what ATTRIBUTE_UNUSED) +{ + char *symbol_name,*beg = NULL,*end = NULL, *handl = NULL, *jmp = NULL; + char name_end; + + if (seh_ctx_cur == NULL) + { + as_fatal (_(".seh_scope requires to be in .seh_proc/.seh_endproc block.\n")); + demand_empty_rest_of_line (); + return; + } + + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + { + as_fatal (_(".seh_scope requires four symbol names.\n")); + demand_empty_rest_of_line (); + return; + } + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + beg = xstrdup (symbol_name); + *input_line_pointer = name_end; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + { + as_fatal (_(".seh_scope requires three more symbol names.\n")); + demand_empty_rest_of_line (); + return; + } + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + end = xstrdup (symbol_name); + *input_line_pointer = name_end; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + { + as_fatal (_(".seh_scope requires two more symbol names.\n")); + demand_empty_rest_of_line (); + return; + } + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + handl = xstrdup (symbol_name); + *input_line_pointer = name_end; + if (*handl == '@') + { + if (strcasecmp (handl, "@0") != 0 && strcasecmp (handl, "@1") != 0 + && strcasecmp (handl, "@null") != 0) + as_warn (_("Unknown constant for handler ,%s'."), handl); + } + + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + { + as_fatal (_(".seh_scope requires one more symbol names.\n")); + demand_empty_rest_of_line (); + return; + } + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + jmp = xstrdup (symbol_name); + *input_line_pointer = name_end; + if (*jmp == '@') + { + if (strcasecmp (jmp, "@0") != 0 && strcasecmp (handl, "@null") != 0) + as_warn (_("Unknown constant for jump ,%s'."), jmp); + } + + if (seh_get_target_kind () != seh_kind_x64) + as_warn (_(".seh_scope is ignored for this target.")); + else + seh_x64_makescope_elem (seh_ctx_cur, beg, end, handl, jmp); + if (beg) + free (beg); + if (end) + free (end); + if (handl) + free (handl); + if (jmp) + free (jmp); + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_proc (int what ATTRIBUTE_UNUSED) +{ + char *symbol_name; + char name_end; + + if (seh_ctx_cur != NULL) + { + as_warn (_(".seh_proc has to be closed by .seh_endprog\n")); + obj_coff_seh_endproc (0); + } + + if (*input_line_pointer == 0 || *input_line_pointer == '\n') + { + as_fatal (_(".seh_proc requires function lable name.\n")); + demand_empty_rest_of_line (); + return; + } + + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + symbol_name = input_line_pointer; + name_end = get_symbol_end (); + + if (seh_ctx == NULL) + seh_ctx_root = seh_ctx = (seh_context *) xmalloc (sizeof (seh_context)); + else + { + seh_ctx->next = (seh_context *) xmalloc (sizeof (seh_context)); + seh_ctx = seh_ctx->next; + } + seh_ctx_cur = seh_ctx; + memset (seh_ctx, 0, sizeof (seh_context)); + + seh_ctx->func_name = xstrdup (symbol_name); + *input_line_pointer = name_end; + while (*input_line_pointer == ' ' || *input_line_pointer == '\t' || *input_line_pointer == ',') + input_line_pointer++; + seh_ctx->start_symbol = make_seh_text_label (seh_ctx_cur, &(seh_ctx_cur->start_addr)); + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_endproc (int what ATTRIBUTE_UNUSED) +{ + if (seh_ctx_cur == NULL) + { + as_warn (_(".seh_endprog without prior .seh_proc (ignored)\n")); + demand_empty_rest_of_line (); + return; + } + seh_ctx->end_symbol = make_seh_text_label (seh_ctx, &(seh_ctx->end_addr)); + seh_ctx->xdata_first = seh_make_xlbl_name (seh_ctx); + make_function_entry_pdata (seh_ctx); + seh_ctx_cur = NULL; + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_push (int what) +{ + int reg = 0; + int kind = -1; + + if (seh_ctx_cur == NULL) + { + as_warn (_(".seh_push used outside of .seh_proc block.\n")); + demand_empty_rest_of_line (); + return; + } + /* What 0:reg, 1:pushframe. */ + switch (what) + { + case 0: + if (seh_x64_read_reg (".seh_push", 1, ®)) + kind = UWOP_PUSH_NONVOL; + else + as_warn (_(".seh_pushreg expects register argument.")); + break; + case 1: + kind = UWOP_PUSH_MACHFRAME; + break; + default: + abort (); + } + if (seh_get_target_kind () != seh_kind_x64) + as_warn (_(".seh_save... is ignored for this target.\n")); + else if (kind != -1) + seh_x64_make_prologue_element (kind, reg, 0); + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_save (int what) +{ + int reg; + bfd_vma off; + int kind; + int ok = 1; + + /* what 0:reg, 1:mm, 2:xmm. */ + switch (what) + { + case 0: + ok &= seh_x64_read_reg (".seh_savereg", 1, ®); + kind = UWOP_SAVE_NONVOL; + break; + case 1: + ok &= seh_x64_read_reg (".seh_savemm", 2, ®); + kind = UWOP_SAVE_XMM; + break; + case 2: + ok &= seh_x64_read_reg (".seh_savexmm", 3, ®); + kind = UWOP_SAVE_XMM128; + break; + default: + abort (); + } + ok &= seh_read_offset (".seh_save", &off); + if (seh_ctx_cur == NULL) + { + as_warn (_(".seh_save used outside of .seh_proc block.\n")); + demand_empty_rest_of_line (); + return; + } + if (seh_get_target_kind () != seh_kind_x64) + as_warn (_(".seh_save... is ignored for this target.\n")); + else + seh_x64_make_prologue_element (kind, reg, off); + demand_empty_rest_of_line (); +} + +static void +obj_coff_seh_endprologue (int what ATTRIBUTE_UNUSED) +{ + if (seh_ctx_cur == NULL) + { + as_warn (_(".seh_endprologue used outside of .seh_proc block.\n")); + demand_empty_rest_of_line (); + return; + } + if (seh_ctx_cur->endprologue_symbol != NULL) + as_warn (_(".seh_endprologue used more then once in .seh_proc block.\n")); + else + seh_ctx_cur->endprologue_symbol = make_seh_text_label (seh_ctx_cur, &seh_ctx_cur->endprologue_addr); +} + +static void +obj_coff_seh_stack_alloc (int what ATTRIBUTE_UNUSED) +{ + bfd_vma size; + + if (seh_ctx_cur == NULL) + { + as_warn (_(".seh_stackalloc used outside of .seh_proc block.\n")); + demand_empty_rest_of_line (); + return; + } + if (seh_read_offset (".seh_stackalloc", &size)) + { + if (seh_get_target_kind () != seh_kind_x64) + as_warn (_(".seh_stackalloc is ignored for this target.\n")); + else + seh_x64_make_prologue_element (UWOP_ALLOC_LARGE, 0, size); + } +} + +static void +obj_coff_seh_setframe (int what ATTRIBUTE_UNUSED) +{ + int reg; + int ok = 1; + bfd_vma off; + + ok &= seh_x64_read_reg (".seh_setframe", 0, ®); + ok &= seh_read_offset (".seh_setframe", &off); + if (seh_ctx_cur == NULL) + { + as_warn (_(".seh_setframe used outside of .seh_proc block.\n")); + demand_empty_rest_of_line (); + return; + } + if (ok) + { + seh_ctx_cur->framereg = reg; + seh_ctx_cur->frameoff = off; + } + if (seh_get_target_kind () != seh_kind_x64) + as_warn (_(".seh_setframe is ignored for this target.\n")); + demand_empty_rest_of_line (); +} + +/* Misc function helpers. */ +static void +seh_reloc (bfd *abfd, bfd_size_type address, int which_howto, int symidx) +{ + if (relcount >= relsize - 1) + { + relsize += 10; + if (reltab) + reltab = xrealloc (reltab, relsize * sizeof (arelent)); + else + reltab = xmalloc (relsize * sizeof (arelent)); + } + reltab[relcount].address = address; + reltab[relcount].addend = 0; + reltab[relcount].howto = bfd_reloc_type_lookup (abfd, which_howto); + reltab[relcount].sym_ptr_ptr = symtab + symidx; + relcount++; +} + +static void +save_relocs (asection *sec) +{ + int i; + + sec->relocation = reltab; + sec->reloc_count = relcount; + sec->orelocation = xmalloc ((relcount + 1) * sizeof (arelent *)); + for (i = 0; i < relcount; i++) + sec->orelocation[i] = sec->relocation + i; + sec->orelocation[relcount] = 0; + sec->flags |= SEC_RELOC; + reltab = 0; + relcount = relsize = 0; +} + +static void +seh_symbol_init (bfd *abfd, unsigned int added) +{ + unsigned int oldcount; + + oldcount = bfd_get_symcount (abfd); + symptr = oldcount; + symtab = xmalloc ((oldcount + added + 6) * sizeof (asymbol *)); + if (oldcount > 0) + memcpy (symtab, bfd_get_outsymbols (abfd), sizeof (asymbol *) * oldcount); +} + +static int +seh_symbol (bfd *abfd, const char *n1, const char *n2, const char *n3, + asection *sec, int flags, int addr) +{ + asymbol *sym; + char *name = xmalloc (strlen (n1) + strlen (n2) + strlen (n3) + 1); + int ret = symptr; + + strcpy (name, n1); + strcat (name, n2); + strcat (name, n3); + sym = bfd_make_empty_symbol (abfd); + sym->name = name; + sym->section = sec; + sym->flags = flags; + sym->value = addr; + symtab[symptr++] = sym; + return ret; +} + +static asection * +quick_section (bfd *abfd, const char *name, int flags, int align) +{ + asection *sec; + asymbol *sym; + + sec = seh_make_section2 (name, flags); + bfd_set_section_alignment (abfd, sec, align); + /* Remember to undo this before trying to link internally! */ + + sym = bfd_make_empty_symbol (abfd); + symtab[symptr++] = sym; + sym->name = sec->name; + sym->section = sec; + sym->flags = BSF_LOCAL; + sym->value = 0; + + return sec; +} + +static seh_kind +seh_get_target_kind (void) +{ + if (!stdoutput) + return seh_kind_unknown; + switch (bfd_get_arch (stdoutput)) + { + case bfd_arch_arm: + case bfd_arch_powerpc: + case bfd_arch_sh: + return seh_kind_arm; + case bfd_arch_i386: + switch (bfd_get_mach (stdoutput)) + { + case bfd_mach_x86_64: + case bfd_mach_x86_64_intel_syntax: + return seh_kind_x64; + default: + break; + } + /* FALL THROUGH. */ + case bfd_arch_mips: + return seh_kind_mips; + case bfd_arch_ia64: + /* Should return seh_kind_x64. But not implemented yet. */ + return seh_kind_unknown; + default: + break; + } + return seh_kind_unknown; +} + +static void +seh_emit_rva (const char *name) +{ + char *p = (char *) xmalloc (strlen (name) + 1); + char *s = input_line_pointer; + + strcpy (p, name); + input_line_pointer = p; + s_rva (4); + input_line_pointer = s; +} + +static void +seh_emit_long (const char *name) +{ + char *p = (char *) xmalloc (strlen (name) + 1); + char *s = input_line_pointer; + + strcpy (p, name); + input_line_pointer = p; + cons (4); + input_line_pointer = s; +} + +static void +seh_make_globl (char *sym_name) +{ + char *s = input_line_pointer; + + input_line_pointer = sym_name; + s_globl (4); + input_line_pointer = s; +} + +static segT +seh_make_section2 (const char *section_name, unsigned flags) +{ + char *name; + segT sec; + + name = xmalloc (strlen (section_name) + 1); + strcpy (name, section_name); + + sec = subseg_new (name, (subsegT) 0); + bfd_set_section_flags (stdoutput, sec, + ((SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_DATA | flags) + & bfd_applicable_section_flags (stdoutput))); + + return sec; +} + +static segT +seh_make_section (void) +{ + static segT seg_pdata = NULL; + segT sec = NULL; + + if (!seg_pdata) + seg_pdata = seh_make_section2 (".pdata", 0); + sec = seg_pdata; + return sec; +} + +static char * +seh_make_xlbl_name (seh_context *c) +{ + size_t len = strlen (".seh_xlbl_") + strlen (c->func_name) + 9 + 1; + char *ret = (char*) xmalloc (len); + + if (!ret) + as_fatal (_("Out of memory for xdata lable for %s"), c->func_name); + else + sprintf (ret, ".seh_xlbl_%s_%x", c->func_name, + c->xlbl_count); + c->xlbl_count += 1; + return ret; +} + +static char * +make_seh_text_label (seh_context *c, symbolS **addr) +{ + char *sym_name; + size_t len = strlen (".seh_tlbl_") + strlen (c->func_name) + 9 + 1; + + sym_name = (char *) xmalloc (len); + if (!sym_name) + as_fatal (_("Allocating memory for SEH's text symbol for %s failed"), c->func_name); + sprintf (sym_name, ".seh_tlbl_%s_%x", c->func_name, c->tlbl_count); + c->tlbl_count += 1; + if (addr) + { + seh_make_globl (sym_name); + *addr = colon (sym_name); + } + return sym_name; +} + +/* x64 secific functions. */ + +static void +seh_fill_pcsyms (const seh_context *c, char **names, int *idx) +{ + size_t i; + int count = 1; + valueT start_off = resolve_symbol_value (c->start_addr); + valueT un_off; + seh_prologue_element *e = c->elems; + + names[0] = c->start_symbol; + idx[0] = 0; + if (c->elems_count == 0) + return; + for (i = 0; i < c->elems_count; i++) + { + un_off = resolve_symbol_value (e[i].pc_addr); + if ((un_off - start_off) > 255) + { + names[count] = e[i].pc_symbol; + idx[count] = (int) i; + count++; + start_off = un_off; + } + } +} + +static int +seh_needed_unwind_info (seh_context *c) +{ + size_t i; + int count = 1; + valueT start_off = resolve_symbol_value (c->start_addr); + valueT un_off; + seh_prologue_element *e = c->elems; + + if (c->elems_count == 0) + return count; + for (i = 0; i < c->elems_count; i++) + { + un_off = resolve_symbol_value (e[i].pc_addr); + if ((un_off - start_off) > 255) + { + count++; + start_off = un_off; + } + } + return count; +} + +static size_t +seh_getelm_data_size (const seh_context *c, int elm_start, int elm_end) +{ + size_t ret = PEX64_UWI_SIZEOF_UWCODE_ARRAY (elm_end - elm_start); + + while (elm_start < elm_end) + { + switch (c->elems[elm_start].kind) + { + case UWOP_PUSH_NONVOL: + case UWOP_PUSH_MACHFRAME: + ret += 2; + break; + case UWOP_SAVE_NONVOL: + case UWOP_SAVE_XMM: + case UWOP_SAVE_XMM128: + if ((c->elems[elm_start].offset & 7) != 0 || + ((c->elems[elm_start].offset / 8) > 0xffff)) + ret += 6; + else + ret += 4; + break; + case UWOP_ALLOC_LARGE: + ret += 4; + break; + default: + break; + } + elm_start++; + } + return ret; +} + +static size_t +seh_getsize_of_unwind_entry (seh_context *c, int elm_start, int elm_end, int bechain) +{ + size_t ret = seh_getelm_data_size(c, elm_start, elm_end); + + c->count_syms += 1; + if (bechain) + { + ret += 4 + 4; + c->count_syms += 1; + c->count_reloc += 1; + } + else + { + ret += 4; + if (c->handler_name != NULL) + { + if (c->handler_data_name != NULL + && c->handler_data_name[0] != '@') + { + ret += 4; + c->count_syms += 2; + c->count_reloc += 2; + } + else + { + ret += 8 + (c->scope_count * 4) * 4; + c->count_syms += (c->scope_count * 4) + 1; + c->count_reloc += (c->scope_count * 4) + 1; + } + } + } + return ret; +} + +static void +seh_make_unwind_entry (const seh_context *c, char *name, int elm_start, int elm_end, int bechain, + unsigned char *data, size_t *poffs, int no) +{ + size_t off = *poffs; + size_t it; + valueT start_off = resolve_symbol_value (c->start_addr); + valueT end_prologue; + size_t uwcodes = seh_getelm_data_size(c, elm_start, elm_end); + unsigned int flag = UNW_FLAG_NHANDLER; + int idx; + + if (c->handler_name != NULL) + { + flag = UNW_FLAG_EHANDLER; + if (c->handler_data_name != NULL && c->handler_data_name[0] != '@') + flag = UNW_FLAG_FHANDLER; + else if (c->handler_data_name != NULL && + strcasecmp (c->handler_data_name, "@unwind") == 0) + flag = UNW_FLAG_UHANDLER; + } + if (!c->endprologue_addr) + end_prologue = start_off; + else + end_prologue = resolve_symbol_value (c->endprologue_addr); + seh_symbol (c->abfd, name, "", "", c->section, BSF_GLOBAL, (int) off); + data[off++] = (1 | ((bechain ? UNW_FLAG_CHAININFO : flag) << 3)); + if (elm_start != 0) + start_off = (valueT) c->elems[elm_start].offset; + end_prologue -= start_off; + if (end_prologue > 255) + end_prologue = 255; + data[off++] = (unsigned char) end_prologue; + data[off++] = (unsigned char) (uwcodes / 2); + data[off] = (unsigned char) c->framereg; + data[off++] |= (unsigned char) ((c->frameoff / 16) << 4); + off += uwcodes; + if (bechain) + { + char n[100]; + + sprintf (n,"%x", no); + idx = seh_symbol (c->abfd, ".xdata_fct", c->func_name, n, UNDSEC, BSF_GLOBAL, (int) off); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + off += 4; + } + else if (c->handler_name != NULL) + { + if (flag == UNW_FLAG_FHANDLER) + { + if (strcasecmp (c->handler_name, "@1") == 0) + bfd_put_32 (c->abfd, (bfd_vma) 1, &data[off]); + else if (c->handler_name[0] != '@') + { + idx = seh_symbol (c->abfd, c->handler_name, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + } + off += 4; + idx = seh_symbol (c->abfd, c->handler_data_name, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + off += 4; + } + else if (flag == UNW_FLAG_UHANDLER || flag == UNW_FLAG_EHANDLER) + { + if (strcasecmp (c->handler_name, "@1") == 0) + bfd_put_32 (c->abfd, (bfd_vma) 1, &data[off]); + else if (c->handler_name[0] != '@') + { + idx = seh_symbol (c->abfd, c->handler_name, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + } + off += 4; + bfd_put_32 (c->abfd, (bfd_vma) c->scope_count, &data[off]); + off += 4; + for (it = 0; it < c->scope_count; it++) + { + idx = seh_symbol (c->abfd, c->scopes[it].begin_addr, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + off += 4; + idx = seh_symbol (c->abfd, c->scopes[it].end_addr, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + off += 4; + if (c->scopes[it].handler_addr[0] == '@') + { + if (strcasecmp (c->scopes[it].handler_addr, "@1") == 0) + bfd_put_32 (c->abfd, (bfd_vma) 1, &data[off]); + } + else + { + idx = seh_symbol (c->abfd, c->scopes[it].handler_addr, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + } + off += 4; + if (c->scopes[it].jump_addr[0] == '@') + { + if (strcasecmp (c->scopes[it].jump_addr, "@1") == 0) + bfd_put_32 (c->abfd, (bfd_vma) 1, &data[off]); + } + else + { + idx = seh_symbol (c->abfd, c->scopes[it].jump_addr, "", "", UNDSEC, BSF_GLOBAL, 0); + seh_reloc (c->abfd, off, BFD_RELOC_RVA, idx); + } + off += 4; + } + } + } + *poffs = off; +} + +static size_t +seh_getsize_unwind_data (seh_context *c) +{ + int need = seh_needed_unwind_info (c); + int i; + char **names = (char **) xmalloc (sizeof (char *) * need); + char **pc_syms = (char **) xmalloc (sizeof (char *) * need); + int *elm_start = (int *) xmalloc (sizeof (int) * (need + 1)); + size_t xdata_sz = 0; + + seh_fill_pcsyms (c, pc_syms, elm_start); + elm_start[need] = c->elems_count; + + xdata_sz += ((12 * (size_t) need)); + c->count_syms += 5 * need; + xdata_sz += (seh_getsize_of_unwind_entry (c, elm_start[0], elm_start[1], 1 != need) + 7) & ~7; + for (i = 1; i < need; i++) + xdata_sz += (seh_getsize_of_unwind_entry (c, elm_start[i], elm_start[i + 1], 1 != need) + 7) & ~7; + + /* Create lable names for .xdata unwind info. */ + names[0] = c->xdata_first; + for (i = 1; i < need; i++) + names[i] = seh_make_xlbl_name (c); + c->xdata_names = names; + c->xdata_pcsyms = pc_syms; + c->xdata_elm_start = elm_start; + c->xdata_sz = xdata_sz; + return xdata_sz; +} + +static void +seh_create_unwind_data (seh_context *c, unsigned char *data, size_t offs) +{ + int need = seh_needed_unwind_info (c); + int i; + char **names = c->xdata_names; + char **pc_syms = c->xdata_pcsyms; + int *elm_start = c->xdata_elm_start; + + for (i = 1; i < need; i++) + seh_make_function_entry_xdata (c, pc_syms[i], c->end_symbol, names[i], data, &offs, i); + + /* Generate the function entry. Remark, that just + first is in .pdata section and already emitted. */ + seh_make_unwind_entry (c, c->xdata_first, elm_start[0], elm_start[1], 1 != need, data, &offs, 1); + for (i = 1; i < need; i++) + seh_make_unwind_entry (c, names[i], elm_start[i], elm_start[i + 1], (i + 1) != need, data, &offs, i + 1); + + for (i = 1; i < need; i++) + free (names[i]); + free (names); + free (pc_syms); + free (elm_start); + c->xdata_names = NULL; + c->xdata_pcsyms = NULL; + c->xdata_elm_start = NULL; +} + +static void +seh_make_function_entry_xdata (seh_context *c, char *pc_start, char *pc_end, char *pc_xdata, unsigned char *data, size_t *poffs,int no) +{ + bfd_vma addr = (bfd_vma) *poffs; + int idx; + char s[100]; + + if (!data) + return; + sprintf (s,"%x",no); + seh_symbol (c->abfd, ".xdata_fct",c->func_name, s, c->section, BSF_GLOBAL, (int) poffs[0]); + idx = seh_symbol (c->abfd, pc_start,"","", UNDSEC, BSF_GLOBAL,0); + seh_reloc (c->abfd, addr, BFD_RELOC_RVA, idx); + idx = seh_symbol (c->abfd, pc_end,"","", UNDSEC, BSF_GLOBAL,0); + seh_reloc (c->abfd, addr + 4, BFD_RELOC_RVA, idx); + idx = seh_symbol (c->abfd, pc_xdata,"","", UNDSEC, BSF_GLOBAL,0); + seh_reloc (c->abfd, addr + 8, BFD_RELOC_RVA, idx); + poffs[0] += 12; +} + +static seh_scope_elem * +seh_x64_makescope_elem (seh_context *c, const char *begin, const char *end, + const char *handler, const char *jmp) +{ + seh_scope_elem *r; + + if (!end || !begin) + return NULL; + if (c->scope_count >= c->scope_max) + { + seh_scope_elem *h = (seh_scope_elem *) xmalloc (sizeof (seh_scope_elem) * (c->scope_max + 8)); + memset (h, 0, sizeof (seh_scope_elem) * (c->scope_max + 8)); + if (c->scopes != NULL) + memcpy (h, c->scopes, sizeof (seh_scope_elem) * c->scope_max); + if (c->scopes != NULL) + free (c->scopes); + c->scopes = h; + c->scope_max += 8; + } + r = &c->scopes[c->scope_count++]; + r->begin_addr = xstrdup (begin); + r->end_addr = xstrdup (end); + r->handler_addr = (!handler ? NULL : xstrdup (handler)); + r->jump_addr = (!jmp ? NULL : xstrdup (jmp)); + return r; +} diff --git a/gas/config/obj-coff-seh.h b/gas/config/obj-coff-seh.h new file mode 100644 index 0000000..aa151cd --- /dev/null +++ b/gas/config/obj-coff-seh.h @@ -0,0 +1,234 @@ +/* seh pdata/xdata coff object file format + Copyright 2009 + Free Software Foundation, Inc. + + This file is part of GAS. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, 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. */ + +/* Short overview: + There are at the moment three different function entry formats preset. + The first is the MIPS one. The second version + is for ARM, PPC, SH3, and SH4 mainly for Windows CE. + The third is the IA64 and x64 version. Note, the IA64 isn't implemented yet, + but to find information about it, please see specification about IA64 on + http://download.intel.com/design/Itanium/Downloads/245358.pdf file. + + The first version has just entries in the pdata section: BeginAddress, + EndAddress, ExceptionHandler, HandlerData, and PrologueEndAddress. Each + value is a pointer to the corresponding data and has size of 4 bytes. + + The second variant has the following entries in the pdata section. + BeginAddress, PrologueLength (8 bits), EndAddress (22 bits), + Use-32-bit-instruction (1 bit), and Exception-Handler-Exists (1 bit). + If the FunctionLength is zero, or the Exception-Handler-Exists bit + is true, a PDATA_EH block is placed directly before function entry. + + The third version has a function entry block of BeginAddress (RVA), + EndAddress (RVA), and UnwindData (RVA). The description of the + prologue, excepetion-handler, and additional SEH data is stored + within the UNWIND_DATA field in the xdata section. + + The pseudos: + .seh_proc + .seh_endprologue + .seh_handler [,]] + .seh_eh + .seh_32/.seh_no32 + .seh_endproc + .seh_setframe , + .seh_stackalloc + .seh_pushreg + .seh_savereg + .seh_savemm + .seh_savexmm + .seh_pushframe + .seh_scope + */ + +/* architecture specific pdata/xdata handling. */ +#define SEH_CMDS \ + {"seh_proc", obj_coff_seh_proc, 0}, \ + {"seh_endproc", obj_coff_seh_endproc, 0}, \ + {"seh_pushreg", obj_coff_seh_push, 0}, \ + {"seh_savereg", obj_coff_seh_save, 0}, \ + {"seh_savemm", obj_coff_seh_save, 1}, \ + {"seh_savexmm", obj_coff_seh_save, 2}, \ + {"seh_pushframe", obj_coff_seh_push, 1}, \ + {"seh_endprologue", obj_coff_seh_endprologue, 0}, \ + {"seh_setframe", obj_coff_seh_setframe, 0}, \ + {"seh_stackalloc", obj_coff_seh_stack_alloc, 0}, \ + {"seh_handler", obj_coff_seh_handler, 0}, \ + {"seh_eh", obj_coff_seh_eh, 0}, \ + {"seh_32", obj_coff_seh_32, 1}, \ + {"seh_no32", obj_coff_seh_32, 0}, \ + {"seh_scope", obj_coff_seh_scope, 0}, + +/* Type definitions. */ + +typedef struct seh_prologue_element +{ + symbolS *pc_addr; + char *pc_symbol; + int kind; + int reg; + bfd_vma offset; +} seh_prologue_element; + +typedef struct seh_scope_elem { + char *begin_addr; + char *end_addr; + char *handler_addr; + char *jump_addr; +} seh_scope_elem; + +typedef struct seh_context +{ + struct seh_context *next; + /* Was record alread processed. */ + int done; + /* Function name. */ + char *func_name; + /* BeginAddress. */ + char *start_symbol; + symbolS *start_addr; + bfd_vma start_offset; + /* EndAddress. */ + char *end_symbol; + symbolS *end_addr; + bfd_vma end_offset; + /* PrologueEnd. */ + char *endprologue_symbol; + symbolS *endprologue_addr; + bfd_vma endprologue_offset; + /* ExceptionHandler. */ + char *handler_name; + /* ExceptionHandlerData. */ + char *handler_data_name; + int handler_written; + /* WinCE specific data. */ + int use_instruction_32; + + /* the bfd to store data within. */ + bfd *abfd; + /* the current section to generate data within. */ + asection *section; + /* Relocations for section. */ + unsigned int count_reloc; + /* Symbols within section. */ + unsigned int count_syms; + /* Iterator for text lable generation. */ + unsigned int tlbl_count; + /* Iterator for xdata lable generation. */ + unsigned int xlbl_count; + /* The name of the first xdata label. */ + char *xdata_first; + /* FIelds used for x64 generation of chained information. */ + char **xdata_names; + char **xdata_pcsyms; + int *xdata_elm_start; + /* Size and offset within current generated xdata section. */ + size_t xdata_sz; + size_t xdata_offset; + /* x64 framereg and frame offset information. */ + int framereg; + bfd_vma frameoff; + /* Information about x64 specific unwind data fields. */ + size_t elems_count; + size_t elems_max; + seh_prologue_element *elems; + size_t scope_max; + size_t scope_count; + seh_scope_elem *scopes; +} seh_context; + +typedef enum seh_kind { + seh_kind_unknown = 0, + seh_kind_mips = 1, /* Used for MIPS and x86 pdata generation. */ + seh_kind_arm = 2, /* Used for ARM, PPC, SH3, and SH4 pdata (PDATA_EH) generation. */ + seh_kind_x64 = 3 /* Used for IA64 and x64 pdata/xdata generation. */ +} seh_kind; + +/* Forward declarations. */ +static void obj_coff_seh_stack_alloc (int); +static void obj_coff_seh_setframe (int); +static void obj_coff_seh_endprologue (int); +static void obj_coff_seh_save (int); +static void obj_coff_seh_push (int); +static void obj_coff_seh_endproc (int); +static void obj_coff_seh_eh (int); +static void obj_coff_seh_32 (int); +static void obj_coff_seh_proc (int); +static void obj_coff_seh_handler (int); +static void obj_coff_seh_scope (int); +static int seh_read_offset (const char *, bfd_vma *); +static int seh_x64_read_reg (const char *, int, int *); +static void seh_x64_make_prologue_element (int, int, bfd_vma); +static void make_function_entry_pdata (seh_context *c); + +#define UNDSEC (asection *) &bfd_und_section + +/* Check if x64 UNW_... macros are already defined. */ +#ifndef PEX64_FLAG_NHANDLER +/* We can't include here coff/pe.h header. So we have to copy macros + from coff/pe.h here. */ +#define PEX64_UNWCODE_CODE(VAL) ((VAL) & 0xf) +#define PEX64_UNWCODE_INFO(VAL) (((VAL) >> 4) & 0xf) + +/* The unwind info. */ +#define UNW_FLAG_NHANDLER 0 +#define UNW_FLAG_EHANDLER 1 +#define UNW_FLAG_UHANDLER 2 +#define UNW_FLAG_FHANDLER 3 +#define UNW_FLAG_CHAININFO 4 + +#define UNW_FLAG_MASK 0x1f + +/* The unwind codes. */ +#define UWOP_PUSH_NONVOL 0 +#define UWOP_ALLOC_LARGE 1 +#define UWOP_ALLOC_SMALL 2 +#define UWOP_SET_FPREG 3 +#define UWOP_SAVE_NONVOL 4 +#define UWOP_SAVE_NONVOL_FAR 5 +#define UWOP_SAVE_XMM 6 +#define UWOP_SAVE_XMM_FAR 7 +#define UWOP_SAVE_XMM128 8 +#define UWOP_SAVE_XMM128_FAR 9 +#define UWOP_PUSH_MACHFRAME 10 + +#define PEX64_UWI_VERSION(VAL) ((VAL) & 7) +#define PEX64_UWI_FLAGS(VAL) (((VAL) >> 3) & 0x1f) +#define PEX64_UWI_FRAMEREG(VAL) ((VAL) & 0xf) +#define PEX64_UWI_FRAMEOFF(VAL) (((VAL) >> 4) & 0xf) +#define PEX64_UWI_SIZEOF_UWCODE_ARRAY(VAL) \ + ((((VAL) + 1) & ~1) * 2) + +#define PEX64_OFFSET_TO_UNWIND_CODE 0x4 + +#define PEX64_OFFSET_TO_HANDLER_RVA (COUNTOFUNWINDCODES) \ + (PEX64_OFFSET_TO_UNWIND_CODE + \ + PEX64_UWI_SIZEOF_UWCODE_ARRAY(COUNTOFUNWINDCODES)) + +#define PEX64_OFFSET_TO_SCOPE_COUNT(COUNTOFUNWINDCODES) \ + (PEX64_OFFSET_TO_HANDLER_RVA(COUNTOFUNWINDCODES) + 4) + +#define PEX64_SCOPE_ENTRY(COUNTOFUNWINDCODES, IDX) \ + (PEX64_OFFSET_TO_SCOPE_COUNT(COUNTOFUNWINDCODES) + \ + PEX64_SCOPE_ENTRY_SIZE * (IDX)) + +#endif + diff --git a/gas/config/obj-coff.c b/gas/config/obj-coff.c index be5755f..271b01e 100644 --- a/gas/config/obj-coff.c +++ b/gas/config/obj-coff.c @@ -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, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS. @@ -53,6 +53,8 @@ static symbolS *def_symbol_in_progress; static const char weak_altprefix[] = ".weak."; #endif /* TE_PE */ +#include "obj-coff-seh.c" + typedef struct { unsigned long chunk_size; @@ -169,6 +171,71 @@ obj_coff_bss (int ignore ATTRIBUTE_UNUSED) s_lcomm (0); } +#ifdef TE_PE +/* Called from read.c:s_comm after we've parsed .comm symbol, size. + Parse a possible alignment value. */ + +static symbolS * +obj_coff_common_parse (int ignore ATTRIBUTE_UNUSED, symbolS *symbolP, addressT size) +{ + addressT align = 0; + + if (*input_line_pointer == ',') + { + align = parse_align (0); + if (align == (addressT) -1) + return NULL; + } + + S_SET_VALUE (symbolP, size); + S_SET_EXTERNAL (symbolP); + S_SET_SEGMENT (symbolP, bfd_com_section_ptr); + + symbol_get_bfdsym (symbolP)->flags |= BSF_OBJECT; + + /* There is no S_SET_ALIGN (symbolP, align) in COFF/PE. + Instead we must add a note to the .drectve section. */ + if (align) + { + segT current_seg = now_seg; + subsegT current_subseg = now_subseg; + flagword oldflags; + asection *sec; + size_t pfxlen, numlen; + char *frag; + char numbuff[20]; + + sec = subseg_new (".drectve", 0); + oldflags = bfd_get_section_flags (stdoutput, sec); + if (oldflags == SEC_NO_FLAGS) + { + if (!bfd_set_section_flags (stdoutput, sec, + TC_COFF_SECTION_DEFAULT_ATTRIBUTES)) + as_warn (_("error setting flags for \"%s\": %s"), + bfd_section_name (stdoutput, sec), + bfd_errmsg (bfd_get_error ())); + } + + /* Emit a string. Note no NUL-termination. */ + pfxlen = strlen (" -aligncomm:") + strlen (S_GET_NAME (symbolP)) + 1; + numlen = snprintf (numbuff, sizeof (numbuff), "%d", (int) align); + frag = frag_more (pfxlen + numlen); + (void) sprintf (frag, " -aligncomm:%s,", S_GET_NAME (symbolP)); + memcpy (frag + pfxlen, numbuff, numlen); + /* Restore original subseg. */ + subseg_set (current_seg, current_subseg); + } + + return symbolP; +} + +static void +obj_coff_comm (int ignore ATTRIBUTE_UNUSED) +{ + s_comm_internal (ignore, obj_coff_common_parse); +} +#endif /* TE_PE */ + #define GET_FILENAME_STRING(X) \ ((char *) (&((X)->sy_symbol.ost_auxent->x_file.x_n.x_offset))[1]) @@ -183,7 +250,7 @@ fetch_coff_debug_section (void) const asymbol *s; s = bfd_make_debug_symbol (stdoutput, NULL, 0); - assert (s != 0); + gas_assert (s != 0); debug_section = s->section; } return debug_section; @@ -497,7 +564,7 @@ obj_coff_ident (int ignore ATTRIBUTE_UNUSED) subseg_new (".comment", 0); #endif - stringer (1); + stringer (8 + 1); subseg_set (current_seg, current_subseg); } @@ -777,7 +844,6 @@ obj_coff_endef (int ignore ATTRIBUTE_UNUSED) if (SF_GET_FUNCTION (def_symbol_in_progress)) { - know (sizeof (def_symbol_in_progress) <= sizeof (long)); set_function (def_symbol_in_progress); SF_SET_PROCESS (def_symbol_in_progress); @@ -1034,7 +1100,7 @@ weak_altname2name (const char * name) char * weak_name; char * dot; - assert (weak_is_altname (name)); + gas_assert (weak_is_altname (name)); weak_name = xstrdup (name + 6); if ((dot = strchr (weak_name, '.'))) @@ -1051,11 +1117,11 @@ weak_uniquify (const char * name) char *ret; const char * unique = ""; -#ifdef USE_UNIQUE +#ifdef TE_PE if (an_external_name != NULL) unique = an_external_name; #endif - assert (weak_is_altname (name)); + gas_assert (weak_is_altname (name)); if (strchr (name + sizeof (weak_altprefix), '.')) return name; @@ -1185,8 +1251,8 @@ coff_frob_symbol (symbolS *symp, int *punt) symbolS *weakp = symbol_find_noref (weak_altname2name (S_GET_NAME (symp)), 1); - assert (weakp); - assert (S_GET_NUMBER_AUXILIARY (weakp) == 1); + gas_assert (weakp); + gas_assert (S_GET_NUMBER_AUXILIARY (weakp) == 1); if (! S_IS_WEAK (weakp)) { @@ -1268,7 +1334,7 @@ coff_frob_symbol (symbolS *symp, int *punt) if (!S_IS_DEFINED (symp) && !SF_GET_LOCAL (symp)) { - assert (S_GET_VALUE (symp) == 0); + gas_assert (S_GET_VALUE (symp) == 0); if (S_IS_WEAKREFD (symp)) *punt = 1; else @@ -1370,7 +1436,7 @@ coff_frob_symbol (symbolS *symp, int *punt) if (next_set_end != NULL) { if (set_end != NULL) - as_warn ("Warning: internal error: forgetting to set endndx of %s", + as_warn (_("Warning: internal error: forgetting to set endndx of %s"), S_GET_NAME (set_end)); set_end = next_set_end; } @@ -1476,6 +1542,7 @@ coff_frob_file_after_relocs (void) 'x' for text 'r' for read-only data 's' for shared data (PE) + 'y' for noread But if the argument is not a quoted string, treat it as a subsegment number. @@ -1585,6 +1652,10 @@ obj_coff_section (int ignore ATTRIBUTE_UNUSED) flags |= SEC_READONLY; break; + case 'y': + flags |= SEC_COFF_NOREAD | SEC_READONLY; + break; + case 'i': /* STYP_INFO */ case 'l': /* STYP_LIB */ case 'o': /* STYP_OVER */ @@ -1629,7 +1700,8 @@ obj_coff_section (int ignore ATTRIBUTE_UNUSED) /* This section's attributes have already been set. Warn if the attributes don't match. */ flagword matchflags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_CODE - | SEC_DATA | SEC_COFF_SHARED | SEC_NEVER_LOAD); + | SEC_DATA | SEC_COFF_SHARED | SEC_NEVER_LOAD + | SEC_COFF_NOREAD); if ((flags ^ oldflags) & matchflags) as_warn (_("Ignoring changed section attributes for %s"), name); } @@ -1698,7 +1770,6 @@ coff_frob_section (segT sec) SF_SET_STATICS (secsym); SA_SET_SCN_SCNLEN (secsym, size); } - /* FIXME: These should be in a "stabs.h" file, or maybe as.h. */ #ifndef STAB_SECTION_NAME #define STAB_SECTION_NAME ".stab" @@ -1720,7 +1791,7 @@ coff_frob_section (segT sec) fragp = seg_info (sec)->frchainP->frch_root; while (fragp && fragp->fr_fix == 0) fragp = fragp->fr_next; - assert (fragp != 0 && fragp->fr_fix >= 12); + gas_assert (fragp != 0 && fragp->fr_fix >= 12); /* Store the values. */ p = fragp->fr_literal; @@ -1779,6 +1850,10 @@ const pseudo_typeS coff_pseudo_table[] = /* We accept the .bss directive for backward compatibility with earlier versions of gas. */ {"bss", obj_coff_bss, 0}, +#ifdef TE_PE + /* PE provides an enhanced version of .comm with alignment. */ + {"comm", obj_coff_comm, 0}, +#endif /* TE_PE */ {"def", obj_coff_def, 0}, {"dim", obj_coff_dim, 0}, {"endef", obj_coff_endef, 0}, @@ -1802,6 +1877,9 @@ const pseudo_typeS coff_pseudo_table[] = #if defined TC_TIC4X /* The tic4x uses sdef instead of def. */ {"sdef", obj_coff_def, 0}, +#endif +#if defined(SEH_CMDS) + SEH_CMDS #endif {NULL, NULL, 0} }; diff --git a/gas/config/obj-coff.h b/gas/config/obj-coff.h index d7e985d..7b9b744 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, 2006, 2007 + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS. @@ -55,22 +55,12 @@ #endif #ifdef TC_I386 -#ifndef TE_PEP +#ifdef TE_PEP #include "coff/x86_64.h" #else #include "coff/i386.h" #endif -#ifdef TE_PE -#ifdef TE_PEP -extern const char *i386_target_format (void); -#define TARGET_FORMAT i386_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" @@ -172,9 +162,6 @@ extern const char *i386_target_format (void); #endif #ifdef TE_PE -/* PE weak symbols need USE_UNIQUE. */ -#define USE_UNIQUE 1 - #define obj_set_weak_hook pecoff_obj_set_weak_hook #define obj_clear_weak_hook pecoff_obj_clear_weak_hook #endif @@ -423,4 +410,11 @@ extern void obj_coff_init_stab_section (segT); extern void c_section_header (struct internal_scnhdr *, char *, long, long, long, long, long, long, long, long); +extern void obj_coff_seh_do_final (void); + +#ifndef obj_coff_generate_pdata +#define obj_coff_generate_pdata obj_coff_seh_do_final +#endif + + #endif /* OBJ_FORMAT_H */ diff --git a/gas/config/obj-ecoff.c b/gas/config/obj-ecoff.c index 0c61ee3..5bee7ac 100644 --- a/gas/config/obj-ecoff.c +++ b/gas/config/obj-ecoff.c @@ -1,6 +1,6 @@ /* ECOFF object file format. Copyright 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002, - 2005, 2007 Free Software Foundation, Inc. + 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Cygnus Support. This file was put together by Ian Lance Taylor . @@ -146,7 +146,7 @@ ecoff_frob_file (void) char *set; /* Build the ECOFF debugging information. */ - assert (ecoff_data (stdoutput) != 0); + gas_assert (ecoff_data (stdoutput) != 0); hdr = &ecoff_data (stdoutput)->debug_info.symbolic_header; ecoff_build_debug (hdr, &buf, debug_swap); diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c index 014117a..532b319 100644 --- a/gas/config/obj-elf.c +++ b/gas/config/obj-elf.c @@ -1,6 +1,6 @@ /* ELF object file format Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005, 2006, 2007 + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -260,9 +260,20 @@ elf_file_symbol (const char *s, int appfile) || (symbol_rootP->bsym->flags & BSF_FILE) == 0) { symbolS *sym; + unsigned int name_length; sym = symbol_new (s, absolute_section, 0, NULL); symbol_set_frag (sym, &zero_address_frag); + + name_length = strlen (s); + if (name_length > strlen (S_GET_NAME (sym))) + { + obstack_grow (¬es, s, name_length + 1); + S_SET_NAME (sym, (const char *) obstack_finish (¬es)); + } + else + strcpy ((char *) S_GET_NAME (sym), s); + symbol_get_bfdsym (sym)->flags |= BSF_FILE; if (symbol_rootP != sym) @@ -459,7 +470,7 @@ obj_elf_visibility (int visibility) bfdsym = symbol_get_bfdsym (symbolP); elfsym = elf_symbol_from (bfd_asymbol_bfd (bfdsym), bfdsym); - assert (elfsym); + gas_assert (elfsym); elfsym->internal_elf_sym.st_other &= ~3; elfsym->internal_elf_sym.st_other |= visibility; @@ -494,9 +505,9 @@ static struct section_stack *section_stack; static bfd_boolean get_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf) { - const char *gname = inf; + const char *gname = (const char *) inf; const char *group_name = elf_group_name (sec); - + return (group_name == gname || (group_name != NULL && gname != NULL @@ -524,7 +535,7 @@ get_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf) void obj_elf_change_section (const char *name, int type, - int attr, + bfd_vma attr, int entsize, const char *group_name, int linkonce, @@ -544,7 +555,7 @@ obj_elf_change_section (const char *name, if (push) { struct section_stack *elt; - elt = xmalloc (sizeof (struct section_stack)); + elt = (struct section_stack *) xmalloc (sizeof (struct section_stack)); elt->next = section_stack; elt->seg = now_seg; elt->prev_seg = previous_section; @@ -674,6 +685,8 @@ obj_elf_change_section (const char *name, { symbolS *secsym; + if (type == SHT_NULL) + type = bfd_elf_get_default_section_type (flags); elf_section_type (sec) = type; elf_section_flags (sec) = attr; @@ -720,10 +733,10 @@ obj_elf_change_section (const char *name, #endif } -static int +static bfd_vma obj_elf_parse_section_letters (char *str, size_t len) { - int attr = 0; + bfd_vma attr = 0; while (len > 0) { @@ -766,8 +779,8 @@ obj_elf_parse_section_letters (char *str, size_t len) { char *bad_msg = _("unrecognized .section attribute: want a,w,x,M,S,G,T"); #ifdef md_elf_section_letter - int md_attr = md_elf_section_letter (*str, &bad_msg); - if (md_attr >= 0) + bfd_vma md_attr = md_elf_section_letter (*str, &bad_msg); + if (md_attr > 0) attr |= md_attr; else #endif @@ -782,31 +795,7 @@ obj_elf_parse_section_letters (char *str, size_t len) } static int -obj_elf_section_word (char *str, size_t len) -{ - if (len == 5 && strncmp (str, "write", 5) == 0) - return SHF_WRITE; - if (len == 5 && strncmp (str, "alloc", 5) == 0) - return SHF_ALLOC; - if (len == 9 && strncmp (str, "execinstr", 9) == 0) - return SHF_EXECINSTR; - if (len == 3 && strncmp (str, "tls", 3) == 0) - return SHF_TLS; - -#ifdef md_elf_section_word - { - int md_attr = md_elf_section_word (str, len); - if (md_attr >= 0) - return md_attr; - } -#endif - - as_warn (_("unrecognized section attribute")); - return 0; -} - -static int -obj_elf_section_type (char *str, size_t len) +obj_elf_section_type (char *str, size_t len, bfd_boolean warn) { if (len == 8 && strncmp (str, "progbits", 8) == 0) return SHT_PROGBITS; @@ -829,7 +818,39 @@ obj_elf_section_type (char *str, size_t len) } #endif - as_warn (_("unrecognized section type")); + if (warn) + as_warn (_("unrecognized section type")); + return 0; +} + +static bfd_vma +obj_elf_section_word (char *str, size_t len, int *type) +{ + int ret; + + if (len == 5 && strncmp (str, "write", 5) == 0) + return SHF_WRITE; + if (len == 5 && strncmp (str, "alloc", 5) == 0) + return SHF_ALLOC; + if (len == 9 && strncmp (str, "execinstr", 9) == 0) + return SHF_EXECINSTR; + if (len == 3 && strncmp (str, "tls", 3) == 0) + return SHF_TLS; + +#ifdef md_elf_section_word + { + bfd_vma md_attr = md_elf_section_word (str, len); + if (md_attr > 0) + return md_attr; + } +#endif + + ret = obj_elf_section_type (str, len, FALSE); + if (ret != 0) + *type = ret; + else + as_warn (_("unrecognized section attribute")); + return 0; } @@ -864,7 +885,7 @@ obj_elf_section_name (void) return NULL; } - name = xmalloc (end - input_line_pointer + 1); + name = (char *) xmalloc (end - input_line_pointer + 1); memcpy (name, input_line_pointer, end - input_line_pointer); name[end - input_line_pointer] = '\0'; #ifdef tc_canonicalize_section_name @@ -880,9 +901,11 @@ void obj_elf_section (int push) { char *name, *group_name, *beg; - int type, attr, dummy; + int type, dummy; + bfd_vma attr; int entsize; int linkonce; + subsegT new_subsection = -1; #ifndef TC_I370 if (flag_mri) @@ -921,6 +944,22 @@ obj_elf_section (int push) ++input_line_pointer; SKIP_WHITESPACE (); + if (push && ISDIGIT (*input_line_pointer)) + { + /* .pushsection has an optional subsection. */ + new_subsection = (subsegT) get_absolute_expression (); + + SKIP_WHITESPACE (); + + /* Stop if we don't see a comma. */ + if (*input_line_pointer != ',') + goto done; + + /* Skip the comma. */ + ++input_line_pointer; + SKIP_WHITESPACE (); + } + if (*input_line_pointer == '"') { beg = demand_copy_C_string (&dummy); @@ -948,14 +987,14 @@ obj_elf_section (int push) ignore_rest_of_line (); return; } - type = obj_elf_section_type (beg, strlen (beg)); + type = obj_elf_section_type (beg, strlen (beg), TRUE); } else if (c == '@' || c == '%') { beg = ++input_line_pointer; c = get_symbol_end (); *input_line_pointer = c; - type = obj_elf_section_type (beg, input_line_pointer - beg); + type = obj_elf_section_type (beg, input_line_pointer - beg, TRUE); } else input_line_pointer = save; @@ -1018,7 +1057,7 @@ obj_elf_section (int push) c = get_symbol_end (); *input_line_pointer = c; - attr |= obj_elf_section_word (beg, input_line_pointer - beg); + attr |= obj_elf_section_word (beg, input_line_pointer - beg, & type); SKIP_WHITESPACE (); } @@ -1027,9 +1066,13 @@ obj_elf_section (int push) } } +done: demand_empty_rest_of_line (); obj_elf_change_section (name, type, attr, entsize, group_name, linkonce, push); + + if (push && new_subsection != -1) + subseg_set (now_seg, new_subsection); } /* Change to the .data section. */ @@ -1089,7 +1132,7 @@ obj_elf_struct (int i) static void obj_elf_subsection (int ignore ATTRIBUTE_UNUSED) { - register int temp; + int temp; #ifdef md_flush_pending_output md_flush_pending_output (); @@ -1275,7 +1318,7 @@ obj_elf_vtable_inherit (int ignore ATTRIBUTE_UNUSED) if (csym == NULL || symbol_get_frag (csym) == NULL) { - as_bad ("expected `%s' to have already been set for .vtable_inherit", + as_bad (_("expected `%s' to have already been set for .vtable_inherit"), cname); bad = 1; } @@ -1285,7 +1328,7 @@ obj_elf_vtable_inherit (int ignore ATTRIBUTE_UNUSED) SKIP_WHITESPACE (); if (*input_line_pointer != ',') { - as_bad ("expected comma after name in .vtable_inherit"); + as_bad (_("expected comma after name in .vtable_inherit")); ignore_rest_of_line (); return NULL; } @@ -1316,7 +1359,7 @@ obj_elf_vtable_inherit (int ignore ATTRIBUTE_UNUSED) if (bad) return NULL; - assert (symbol_get_value_expression (csym)->X_op == O_constant); + gas_assert (symbol_get_value_expression (csym)->X_op == O_constant); return fix_new (symbol_get_frag (csym), symbol_get_value_expression (csym)->X_add_number, 0, psym, 0, 0, BFD_RELOC_VTABLE_INHERIT); @@ -1345,7 +1388,7 @@ obj_elf_vtable_entry (int ignore ATTRIBUTE_UNUSED) SKIP_WHITESPACE (); if (*input_line_pointer != ',') { - as_bad ("expected comma after name in .vtable_entry"); + as_bad (_("expected comma after name in .vtable_entry")); ignore_rest_of_line (); return NULL; } @@ -1398,7 +1441,7 @@ elf_copy_symbol_attributes (symbolS *dest, symbolS *src) if (srcelf->size) { if (destelf->size == NULL) - destelf->size = xmalloc (sizeof (expressionS)); + destelf->size = (expressionS *) xmalloc (sizeof (expressionS)); *destelf->size = *srcelf->size; } else @@ -1515,14 +1558,15 @@ obj_elf_size (int ignore ATTRIBUTE_UNUSED) } else { - symbol_get_obj (sym)->size = xmalloc (sizeof (expressionS)); + symbol_get_obj (sym)->size = + (expressionS *) xmalloc (sizeof (expressionS)); *symbol_get_obj (sym)->size = exp; } demand_empty_rest_of_line (); } /* Handle the ELF .type pseudo-op. This sets the type of a symbol. - There are five syntaxes: + There are six syntaxes: The first (used on Solaris) is .type SYM,#function @@ -1534,15 +1578,39 @@ obj_elf_size (int ignore ATTRIBUTE_UNUSED) .type SYM,%function The fifth (used on SVR4/860) is .type SYM,"function" + The sixth (emitted by recent SunPRO under Solaris) is + .type SYM,[0-9] + where the integer is the STT_* value. */ +static char * +obj_elf_type_name (char *cp) +{ + char *p; + + p = input_line_pointer; + if (*input_line_pointer >= '0' + && *input_line_pointer <= '9') + { + while (*input_line_pointer >= '0' + && *input_line_pointer <= '9') + ++input_line_pointer; + *cp = *input_line_pointer; + *input_line_pointer = '\0'; + } + else + *cp = get_symbol_end (); + + return p; +} + static void obj_elf_type (int ignore ATTRIBUTE_UNUSED) { char *name; char c; int type; - const char *typename; + const char *type_name; symbolS *sym; elf_symbol_type *elfsym; @@ -1563,28 +1631,87 @@ obj_elf_type (int ignore ATTRIBUTE_UNUSED) || *input_line_pointer == '%') ++input_line_pointer; - typename = input_line_pointer; - c = get_symbol_end (); + type_name = obj_elf_type_name (& c); type = 0; - if (strcmp (typename, "function") == 0 - || strcmp (typename, "STT_FUNC") == 0) + if (strcmp (type_name, "function") == 0 + || strcmp (type_name, "2") == 0 + || strcmp (type_name, "STT_FUNC") == 0) type = BSF_FUNCTION; - else if (strcmp (typename, "object") == 0 - || strcmp (typename, "STT_OBJECT") == 0) + else if (strcmp (type_name, "object") == 0 + || strcmp (type_name, "1") == 0 + || strcmp (type_name, "STT_OBJECT") == 0) type = BSF_OBJECT; - else if (strcmp (typename, "tls_object") == 0 - || strcmp (typename, "STT_TLS") == 0) + else if (strcmp (type_name, "tls_object") == 0 + || strcmp (type_name, "6") == 0 + || strcmp (type_name, "STT_TLS") == 0) type = BSF_OBJECT | BSF_THREAD_LOCAL; - else if (strcmp (typename, "notype") == 0 - || strcmp (typename, "STT_NOTYPE") == 0) + else if (strcmp (type_name, "notype") == 0 + || strcmp (type_name, "0") == 0 + || strcmp (type_name, "STT_NOTYPE") == 0) ; + else if (strcmp (type_name, "common") == 0 + || strcmp (type_name, "5") == 0 + || strcmp (type_name, "STT_COMMON") == 0) + { + type = BSF_OBJECT; + + if (! S_IS_COMMON (sym)) + { + if (S_IS_VOLATILE (sym)) + { + sym = symbol_clone (sym, 1); + S_SET_SEGMENT (sym, bfd_com_section_ptr); + S_SET_VALUE (sym, 0); + S_SET_EXTERNAL (sym); + symbol_set_frag (sym, &zero_address_frag); + S_CLEAR_VOLATILE (sym); + } + else if (S_IS_DEFINED (sym) || symbol_equated_p (sym)) + as_bad (_("symbol '%s' is already defined"), S_GET_NAME (sym)); + else + { + /* FIXME: Is it safe to just change the section ? */ + S_SET_SEGMENT (sym, bfd_com_section_ptr); + S_SET_VALUE (sym, 0); + S_SET_EXTERNAL (sym); + } + } + } + else if (strcmp (type_name, "gnu_indirect_function") == 0 + || strcmp (type_name, "10") == 0 + || strcmp (type_name, "STT_GNU_IFUNC") == 0) + { + const struct elf_backend_data *bed; + + bed = get_elf_backend_data (stdoutput); + if (!(bed->elf_osabi == ELFOSABI_LINUX + /* GNU/Linux is still using the default value 0. */ + || bed->elf_osabi == ELFOSABI_NONE)) + as_bad (_("symbol type \"%s\" is supported only by GNU targets"), + type_name); + type = BSF_FUNCTION | BSF_GNU_INDIRECT_FUNCTION; + } + else if (strcmp (type_name, "gnu_unique_object") == 0) + { + struct elf_backend_data *bed; + + bed = (struct elf_backend_data *) get_elf_backend_data (stdoutput); + if (!(bed->elf_osabi == ELFOSABI_LINUX + /* GNU/Linux is still using the default value 0. */ + || bed->elf_osabi == ELFOSABI_NONE)) + as_bad (_("symbol type \"%s\" is supported only by GNU targets"), + type_name); + type = BSF_OBJECT | BSF_GNU_UNIQUE; + /* PR 10549: Always set OSABI field to LINUX for objects containing unique symbols. */ + bed->elf_osabi = ELFOSABI_LINUX; + } #ifdef md_elf_symbol_type - else if ((type = md_elf_symbol_type (typename, sym, elfsym)) != -1) + else if ((type = md_elf_symbol_type (type_name, sym, elfsym)) != -1) ; #endif else - as_bad (_("unrecognized symbol type \"%s\""), typename); + as_bad (_("unrecognized symbol type \"%s\""), type_name); *input_line_pointer = c; @@ -1612,13 +1739,18 @@ obj_elf_ident (int ignore ATTRIBUTE_UNUSED) char *p; comment_section = subseg_new (".comment", 0); bfd_set_section_flags (stdoutput, comment_section, - SEC_READONLY | SEC_HAS_CONTENTS); + SEC_READONLY | SEC_HAS_CONTENTS + | SEC_MERGE | SEC_STRINGS); + comment_section->entsize = 1; +#ifdef md_elf_section_change_hook + md_elf_section_change_hook (); +#endif p = frag_more (1); *p = 0; } else subseg_set (comment_section, 0); - stringer (1); + stringer (8 + 1); subseg_set (old_section, old_subsection); } @@ -1643,7 +1775,7 @@ obj_elf_init_stab_section (segT seg) /* Zero it out. */ memset (p, 0, 12); as_where (&file, NULL); - stabstr_name = xmalloc (strlen (segment_name (seg)) + 4); + stabstr_name = (char *) xmalloc (strlen (segment_name (seg)) + 4); strcpy (stabstr_name, segment_name (seg)); strcat (stabstr_name, "str"); stroff = get_stab_string_offset (file, stabstr_name); @@ -1669,7 +1801,7 @@ adjust_stab_sections (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED) if (!strcmp ("str", sec->name + strlen (sec->name) - 3)) return; - name = alloca (strlen (sec->name) + 4); + name = (char *) alloca (strlen (sec->name) + 4); strcpy (name, sec->name); strcat (name, "str"); strsec = bfd_get_section_by_name (abfd, name); @@ -1680,7 +1812,7 @@ adjust_stab_sections (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED) nsyms = bfd_section_size (abfd, sec) / 12 - 1; p = seg_info (sec)->stabu.p; - assert (p != 0); + gas_assert (p != 0); bfd_h_put_16 (abfd, nsyms, p + 6); bfd_h_put_32 (abfd, strsz, p + 8); @@ -1885,7 +2017,7 @@ struct group_list static void build_group_lists (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf) { - struct group_list *list = inf; + struct group_list *list = (struct group_list *) inf; const char *group_name = elf_group_name (sec); unsigned int i; @@ -1911,9 +2043,10 @@ build_group_lists (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, void *inf) if ((i & 127) == 0) { unsigned int newsize = i + 128; - list->head = xrealloc (list->head, newsize * sizeof (*list->head)); - list->elt_count = xrealloc (list->elt_count, - newsize * sizeof (*list->elt_count)); + list->head = (asection **) xrealloc (list->head, + newsize * sizeof (*list->head)); + list->elt_count = (unsigned int *) + xrealloc (list->elt_count, newsize * sizeof (*list->elt_count)); } list->head[i] = sec; list->elt_count[i] = 1; @@ -2091,7 +2224,7 @@ elf_frob_file_after_relocs (void) bfd_errmsg (bfd_get_error ())); sec = bfd_get_section_by_name (stdoutput, ".mdebug"); - assert (sec != NULL); + gas_assert (sec != NULL); know (!stdoutput->output_has_begun); diff --git a/gas/config/obj-elf.h b/gas/config/obj-elf.h index 18067f1..dc8284f 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, 2006, 2007 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -98,6 +98,10 @@ struct elf_obj_sy #endif extern void elf_begin (void); +#ifndef LOCAL_LABEL_PREFIX +#define LOCAL_LABEL_PREFIX '.' +#endif + /* should be conditional on address size! */ #define elf_symbol(asymbol) ((elf_symbol_type *) (&(asymbol)->the_bfd)) @@ -166,7 +170,7 @@ extern void obj_elf_common (int); extern void obj_elf_data (int); extern void obj_elf_text (int); extern void obj_elf_change_section - (const char *, int, int, int, const char *, int, int); + (const char *, int, bfd_vma, int, const char *, int, int); extern struct fix *obj_elf_vtable_inherit (int); extern struct fix *obj_elf_vtable_entry (int); diff --git a/gas/config/obj-evax.c b/gas/config/obj-evax.c index 6f484d0..033ccae 100644 --- a/gas/config/obj-evax.c +++ b/gas/config/obj-evax.c @@ -1,7 +1,8 @@ /* obj-evax.c - EVAX (openVMS/Alpha) object file format. - Copyright 1996, 1997, 2007 Free Software Foundation, Inc. + Copyright 1996, 1997, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Klaus Kämpf (kkaempf@progis.de) of proGIS Software, Aachen, Germany. + Extensively enhanced by Douglas Rupp of AdaCore. This file is part of GAS, the GNU Assembler @@ -22,9 +23,18 @@ #define OBJ_HEADER "obj-evax.h" +#include "bfd.h" +#include "vms.h" #include "as.h" +#include "subsegs.h" +#include "struc-symbol.h" +#include "safe-ctype.h" -static void s_evax_weak PARAMS ((int)); +static void s_evax_weak (int); +static unsigned int crc32 (unsigned char *, int); +static char *encode_32 (unsigned int); +static char *encode_16 (unsigned int); +static int decode_16 (const char *); const pseudo_typeS obj_pseudo_table[] = { @@ -37,8 +47,7 @@ void obj_read_begin_hook () {} /* Handle the weak specific pseudo-op. */ static void -s_evax_weak (ignore) - int ignore; +s_evax_weak (int ignore ATTRIBUTE_UNUSED) { char *name; int c; @@ -73,11 +82,436 @@ s_evax_weak (ignore) demand_empty_rest_of_line (); } -/* - * Local Variables: - * comment-column: 0 - * fill-column: 131 - * End: - */ +void +evax_symbol_new_hook (symbolS *sym) +{ + struct evax_private_udata_struct *udata; + + udata = (struct evax_private_udata_struct *) + xmalloc (sizeof (struct evax_private_udata_struct)); + + udata->bsym = symbol_get_bfdsym (sym); + udata->enbsym = NULL; + udata->origname = xstrdup (S_GET_NAME (sym)); + udata->lkindex = 0; + symbol_get_bfdsym(sym)->udata.p = (PTR) udata; +} + +void +evax_frob_symbol (symbolS *sym, int *punt) +{ + const char *symname = S_GET_NAME (sym); + int symlen = strlen (symname); + asymbol *symbol = symbol_get_bfdsym (sym); + + if (symlen > 4 + && strcmp (symname + symlen - 4, "..en") == 0 + && S_GET_SEGMENT (sym) == undefined_section) + { + symbol_clear_used_in_reloc (sym); + *punt = 1; + } + + else if ((symbol->flags & BSF_GLOBAL) && (symbol->flags & BSF_FUNCTION)) + { + struct evax_private_udata_struct *udata + = (struct evax_private_udata_struct *)symbol->udata.p; + + /* Fix up equates of function definitions. */ + while (udata->enbsym == NULL) + { + /* ??? Equates have been resolved at this point so their + expression is O_constant; but they previously were + O_symbol and we hope the equated symbol is still there. */ + sym = symbol_get_value_expression (sym)->X_add_symbol; + if (sym == NULL) + abort (); + symbol = symbol_get_bfdsym (sym); + udata->enbsym + = ((struct evax_private_udata_struct *)symbol->udata.p)->enbsym; + } + } +} + +void +evax_frob_file_before_adjust (void) +{ + struct alpha_linkage_fixups *l; + segT current_section = now_seg; + int current_subsec = now_subseg; + segment_info_type *seginfo; + int linkage_index = 1; + + subseg_set (alpha_link_section, 0); + seginfo = seg_info (alpha_link_section); + + for (l = alpha_linkage_fixup_root; l != NULL; l = l->next) + { + if (S_GET_SEGMENT (l->fixp->fx_addsy) == alpha_link_section) + { + symbolS * entry_sym; + fixS *fixpentry, *fixppdesc, *fixtail; + + fixtail = seginfo->fix_tail; + + /* Replace the linkage with the local symbols */ + entry_sym = symbol_find + (((struct evax_private_udata_struct *)symbol_get_bfdsym (l->fixp->fx_addsy)->udata.p)->enbsym->name); + if (!entry_sym) + abort (); + fixpentry = fix_new (l->fixp->fx_frag, l->fixp->fx_where, 8, + entry_sym, l->fixp->fx_offset, 0, + BFD_RELOC_64); + fixppdesc = fix_new (l->fixp->fx_frag, l->fixp->fx_where+8, 8, + l->fixp->fx_addsy, l->fixp->fx_offset, 0, + BFD_RELOC_64); + l->fixp->fx_size = 0; + l->fixp->fx_done = 1; + + /* If not already at the tail, splice the new fixups into + the chain right after the one we are nulling out */ + if (fixtail != l->fixp) + { + fixppdesc->fx_next = l->fixp->fx_next; + l->fixp->fx_next = fixpentry; + fixtail->fx_next = 0; + seginfo->fix_tail = fixtail; + } + } + else + { + ((struct evax_private_udata_struct *) + symbol_get_bfdsym (l->label)->udata.p)->lkindex = linkage_index; + + l->fixp->fx_addnumber = linkage_index; + + linkage_index += 2; + } + } + + subseg_set (current_section, current_subsec); +} + +void +evax_frob_file_before_fix (void) +{ + /* Now that the fixups are done earlier, we need to transfer the values + into the BFD symbols before calling fix_segment (ideally should not + be done also later). */ + if (symbol_rootP) + { + symbolS *symp; + + /* Set the value into the BFD symbol. Up til now the value + has only been kept in the gas symbolS struct. */ + for (symp = symbol_rootP; symp; symp = symbol_next (symp)) + symbol_get_bfdsym (symp)->value = S_GET_VALUE (symp); + } +} + +/* The length is computed from the maximum allowable length of 64 less the + 4 character ..xx extension that must be preserved (removed before + krunching and appended back on afterwards). The $.. prefix is + also removed and prepened back on, but doesn't enter into the length + computation because symbols with that prefix are always resolved + by the assembler and will never appear in the symbol table. At least + I hope that's true, TBD. */ +#define MAX_LABEL_LENGTH 60 + +static char *shorten_identifier (char *); +static int is_truncated_identifier (char *); + +char * +evax_shorten_name (char *id) +{ + int prefix_dotdot = 0; + char prefix [64]; + int len = strlen (id); + int suffix_dotdot = len; + char suffix [64]; + char *base_id; + + /* This test may be too conservative. */ + if (len <= MAX_LABEL_LENGTH) + return id; + + suffix [0] = 0; + prefix [0] = 0; + + /* Check for ..xx suffix and save it. */ + if (strncmp (&id[len-4], "..", 2) == 0) + { + suffix_dotdot = len - 4; + strncpy (suffix, &id[len-4], 4); + suffix [4] = 0; + } + + /* Check for $.. prefix and save it. */ + if ((id[0] == '$') && ISDIGIT (id[1])) + { + int i; + + for (i=2; i < len; i++) + { + if (!ISDIGIT (id[i])) + { + if (id[i] == '.' && id [i+1] == '.') + { + prefix_dotdot = i+2; + strncpy (prefix, id, prefix_dotdot); + prefix [prefix_dotdot] = 0; + } + break; + } + } + } + + /* We only need worry about krunching the base symbol. */ + base_id = xmalloc (suffix_dotdot - prefix_dotdot + 1); + strncpy (base_id, &id[prefix_dotdot], suffix_dotdot - prefix_dotdot); + base_id [suffix_dotdot - prefix_dotdot] = 0; + + if (strlen (base_id) > MAX_LABEL_LENGTH) + { + char new_id [4096]; + char *return_id; + + strcpy (new_id, base_id); + + /* Shorten it. */ + strcpy (new_id, shorten_identifier (new_id)); + + /* Prepend back the prefix if there was one. */ + if (prefix_dotdot) + { + memmove (&new_id [prefix_dotdot], new_id, strlen (new_id) + 1); + strncpy (new_id, prefix, prefix_dotdot); + } + + /* Append back the suffix if there was one. */ + if (strlen (suffix)) + strcat (new_id, suffix); + + /* Save it on the heap and return. */ + return_id = xmalloc (strlen (new_id) + 1); + strcpy (return_id, new_id); + + return return_id; + } + else + return id; +} + +/* The code below implements a mechanism for truncating long + identifiers to an arbitrary length (set by MAX_LABEL_LENGTH). + + It attempts to make each truncated identifier unique by replacing + part of the identifier with an encoded 32-bit CRC and an associated + checksum (the checksum is used as a way to determine that the name + was truncated). + + Note that both a portion of the start and of the end of the + identifier may be kept. The macro ID_SUFFIX_LENGTH will return the + number of characters in the suffix of the identifier that should be + kept. + + The portion of the identifier that is going to be removed is + checksummed. The checksum is then encoded as a 5-character string, + the characters of which are then summed. This sum is then encoded + as a 3-character string. Finally, the original length of the + identifier is encoded as a 3-character string. + + These three strings are then concatenated together (along with an _h + which further designates that the name was truncated): + + "original_identifier"_haaaaabbbccc + + aaaaa = 32-bit CRC + bbb = length of original identifier + ccc = sum of 32-bit CRC characters + + The resulting identifier will be MAX_LABEL_LENGTH characters long. + + */ + + +/* Table used to convert an integer into a string. */ + +static const char codings[] = { + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_'}; + +/* The number of codings in the above table. */ +static const int number_of_codings = sizeof (codings) / sizeof (char); + +/* Table used by decode_16 () to convert an encoded string back into + an integer. */ +static char decodings[256]; + +/* Table used by the crc32 function to calcuate the checksum. */ +static unsigned int crc32_table[256] = {0, 0}; + +/* Given a string in BUF, calculate a 32-bit CRC for it. + + This is used as a reasonably unique hash for the given string. */ + +static unsigned int +crc32 (unsigned char *buf, int len) +{ + unsigned int crc = 0xffffffff; + + if (! crc32_table[1]) + { + /* Initialize the CRC table and the decoding table. */ + int i, j; + unsigned int c; + + for (i = 0; i < 256; i++) + { + for (c = i << 24, j = 8; j > 0; --j) + c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1); + crc32_table[i] = c; + decodings[i] = 0; + } + for (i = 0; i < number_of_codings; i++) + decodings[codings[i] & 255] = i; + } + + while (len--) + { + crc = (crc << 8) ^ crc32_table[(crc >> 24) ^ *buf]; + buf++; + } + return crc; +} + +/* Encode the lower 32 bits of VALUE as a 5-character string. */ + +static char * +encode_32 (unsigned int value) +{ + static char res[6]; + int x; + + res[5] = 0; + for(x = 0; x < 5; x++) + { + res[x] = codings[value % number_of_codings]; + value = value / number_of_codings; + } + return res; +} + +/* Encode the lower 16 bits of VALUE as a 3-character string. */ + +static char * +encode_16 (unsigned int value) +{ + static char res[4]; + int x; + + res[3] = 0; + for(x = 0; x < 3; x++) + { + res[x] = codings[value % number_of_codings]; + value = value / number_of_codings; + } + return res; +} + +/* Convert the encoded string obtained from encode_16 () back into a + 16-bit integer. */ + +static int +decode_16 (const char *string) +{ + return decodings[(int) string[2]] * number_of_codings * number_of_codings + + decodings[(int) string[1]] * number_of_codings + + decodings[(int) string[0]]; +} + +/* ID_SUFFIX_LENGTH is used to determine how many characters in the + suffix of the identifier are to be preserved, if any. */ + +#ifndef ID_SUFFIX_LENGTH +#define ID_SUFFIX_LENGTH(ID) (0) +#endif + +/* Return a reasonably-unique version of NAME that is less than or + equal to MAX_LABEL_LENGTH characters long. The string returned from + this function may be a copy of NAME; the function will never + actually modify the contents of NAME. */ + +static char newname[MAX_LABEL_LENGTH + 1]; + +static char * +shorten_identifier (char *name) +{ + int crc, len, sum, x, final_len; + char *crc_chars; + int suffix_length = ID_SUFFIX_LENGTH (name); + + if ((len = strlen (name)) <= MAX_LABEL_LENGTH) + return name; + + final_len = MAX_LABEL_LENGTH - 2 - 5 - 3 - 3 - suffix_length; + crc = crc32 ((unsigned char *)name + final_len, + len - final_len - suffix_length); + crc_chars = encode_32 (crc); + sum = 0; + for (x = 0; x < 5; x++) + sum += crc_chars [x]; + strncpy (newname, name, final_len); + newname [MAX_LABEL_LENGTH] = 0; + /* Now append the suffix of the original identifier, if any. */ + if (suffix_length) + strncpy (newname + MAX_LABEL_LENGTH - suffix_length, + name + len - suffix_length, + suffix_length); + strncpy (newname + final_len, "_h", 2); + strncpy (newname + final_len + 2 , crc_chars, 5); + strncpy (newname + final_len + 2 + 5, encode_16 (len), 3); + strncpy (newname + final_len + 2 + 5 + 3, encode_16 (sum), 3); + if (!is_truncated_identifier (newname)) + abort (); + return newname; +} + +/* Determine whether or not ID is a truncated identifier, and return a + non-zero value if it is. */ + +static int +is_truncated_identifier (char *id) +{ + char *ptr; + int len = strlen (id); + /* If it's not exactly MAX_LABEL_LENGTH characters long, it can't be + a truncated identifier. */ + if (len != MAX_LABEL_LENGTH) + return 0; + + /* Start scanning backwards for a _h. */ + len = len - 3 - 3 - 5 - 2; + ptr = id + len; + while (ptr >= id) + { + if (ptr[0] == '_' && ptr[1] == 'h') + { + /* Now see if the sum encoded in the identifer matches. */ + int x, sum; + sum = 0; + for (x = 0; x < 5; x++) + sum += ptr[x + 2]; + /* If it matches, this is probably a truncated identifier. */ + if (sum == decode_16 (ptr + 5 + 2 + 3)) + return 1; + } + ptr--; + } + return 0; +} /* end of obj-evax.c */ diff --git a/gas/config/obj-evax.h b/gas/config/obj-evax.h index 824eeac..6e503ab 100644 --- a/gas/config/obj-evax.h +++ b/gas/config/obj-evax.h @@ -1,5 +1,5 @@ /* This file is obj-evax.h - Copyright 1996, 2000, 2005, 2007 Free Software Foundation, Inc. + Copyright 1996, 2000, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Klaus Kämpf (kkaempf@progis.de) of proGIS Software, Aachen, Germany. @@ -25,6 +25,8 @@ * object format specific header files. */ +#include "as.h" + /* define an obj specific macro off which target cpu back ends may key. */ #define OBJ_EVAX 1 @@ -33,6 +35,16 @@ #define OUTPUT_FLAVOR bfd_target_evax_flavour +struct fix; + +struct alpha_linkage_fixups +{ + struct alpha_linkage_fixups *next; + struct fix *fixp; + segT seg; + symbolS *label; +}; + /* * SYMBOLS */ @@ -58,7 +70,13 @@ typedef void *object_headers; #define OBJ_EMIT_LINENO(a,b,c) /* must be *something*. This no-op's it out. */ -#define obj_symbol_new_hook(s) {;} +/* This field keeps the symbols position in the link section. */ +#define OBJ_SYMFIELD_TYPE valueT + +#define obj_symbol_new_hook(s) evax_symbol_new_hook (s) +#define obj_frob_symbol(s,p) evax_frob_symbol (s, &p) +#define obj_frob_file_before_adjust evax_frob_file_before_adjust +#define obj_frob_file_before_fix evax_frob_file_before_fix #define S_SET_OTHER(S,V) #define S_SET_TYPE(S,T) @@ -75,13 +93,23 @@ typedef void *object_headers; #define PDSC_S_K_MIN_REGISTER_SIZE 24 #define PDSC_S_K_NULL_SIZE 16 -#define PDSC_S_M_BASE_REG_IS_FP 0x80 /* low byte */ +#define PDSC_S_M_HANDLER_VALID 0x10 /* low byte */ +#define PDSC_S_M_HANDLER_DATA_VALID 0x40 /* low byte */ +#define PDSC_S_M_BASE_REG_IS_FP 0x80 /* low byte */ #define PDSC_S_M_NATIVE 0x10 /* high byte */ #define PDSC_S_M_NO_JACKET 0x20 /* high byte */ #define LKP_S_K_SIZE 16 -#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) (P2VAR) = 3 +extern segT alpha_link_section; +extern struct alpha_linkage_fixups *alpha_linkage_fixup_root; + +extern void evax_section (int); +extern void evax_symbol_new_hook (symbolS *); +extern void evax_frob_symbol (symbolS *, int *); +extern void evax_frob_file_before_adjust (void); +extern void evax_frob_file_before_fix (void); +extern char *evax_shorten_name (char *); /* * Local Variables: diff --git a/gas/config/obj-fdpicelf.c b/gas/config/obj-fdpicelf.c new file mode 100644 index 0000000..a992b35 --- /dev/null +++ b/gas/config/obj-fdpicelf.c @@ -0,0 +1 @@ +#include "obj-elf.c" diff --git a/gas/config/obj-fdpicelf.h b/gas/config/obj-fdpicelf.h new file mode 100644 index 0000000..9f1af5d --- /dev/null +++ b/gas/config/obj-fdpicelf.h @@ -0,0 +1,2 @@ +#define OBJ_FDPIC_ELF 1 +#include "obj-elf.h" diff --git a/gas/config/obj-macho.c b/gas/config/obj-macho.c new file mode 100644 index 0000000..ee19c4a --- /dev/null +++ b/gas/config/obj-macho.c @@ -0,0 +1,57 @@ +/* Mach-O object file format + Copyright 2009 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 3, + 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 OBJ_HEADER "obj-macho.h" + +#include "as.h" +#include "mach-o.h" + +static void +obj_mach_o_weak (int ignore ATTRIBUTE_UNUSED) +{ + char *name; + int c; + symbolS *symbolP; + + do + { + /* Get symbol name. */ + name = input_line_pointer; + c = get_symbol_end (); + symbolP = symbol_find_or_make (name); + S_SET_WEAK (symbolP); + *input_line_pointer = c; + SKIP_WHITESPACE (); + + if (c != ',') + break; + input_line_pointer++; + SKIP_WHITESPACE (); + } + while (*input_line_pointer != '\n'); + demand_empty_rest_of_line (); +} + +const pseudo_typeS mach_o_pseudo_table[] = +{ + {"weak", obj_mach_o_weak, 0}, + + {NULL, NULL, 0} +}; diff --git a/gas/config/obj-macho.h b/gas/config/obj-macho.h new file mode 100644 index 0000000..d7e9bda --- /dev/null +++ b/gas/config/obj-macho.h @@ -0,0 +1,39 @@ +/* Mach-O object file format for gas, the assembler. + Copyright 2009 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 3, + 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. */ + +/* Tag to validate Mach-O object file format processing */ +#define OBJ_MACH_O 1 + +#include "targ-cpu.h" + +#define OUTPUT_FLAVOR bfd_target_mach_o_flavour + +extern const pseudo_typeS mach_o_pseudo_table[]; + +#ifndef obj_pop_insert +#define obj_pop_insert() pop_insert (mach_o_pseudo_table) +#endif + +#define obj_sec_sym_ok_for_reloc(SEC) 1 + +#define obj_read_begin_hook() {;} +#define obj_symbol_new_hook(s) {;} + +#define EMIT_SECTION_SYMBOLS 0 diff --git a/gas/config/obj-multi.c b/gas/config/obj-multi.c index ecb97b1..0741137 100644 --- a/gas/config/obj-multi.c +++ b/gas/config/obj-multi.c @@ -1,4 +1,4 @@ -/* Copyright 2007 Free Software Foundation, Inc. +/* Copyright 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config/obj-multi.h b/gas/config/obj-multi.h index 6c87958..fe3c3e7 100644 --- a/gas/config/obj-multi.h +++ b/gas/config/obj-multi.h @@ -1,5 +1,5 @@ /* Multiple object format emulation. - Copyright 1995, 1996, 1997, 1999, 2000, 2002, 2004, 2007 + Copyright 1995, 1996, 1997, 1999, 2000, 2002, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config/obj-som.c b/gas/config/obj-som.c index 250fa57..9598e10 100644 --- a/gas/config/obj-som.c +++ b/gas/config/obj-som.c @@ -1,6 +1,6 @@ /* SOM object file format. Copyright 1993, 1994, 1998, 2000, 2002, 2003, 2004, 2005, 2006, - 2007 Free Software Foundation, Inc. + 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -55,7 +55,7 @@ obj_som_compiler (int unused ATTRIBUTE_UNUSED) if (compiler_seen) { - as_bad ("Only one .compiler pseudo-op per file!"); + as_bad (_("Only one .compiler pseudo-op per file!")); ignore_rest_of_line (); return; } @@ -72,7 +72,7 @@ obj_som_compiler (int unused ATTRIBUTE_UNUSED) } else { - as_bad ("Expected quoted string"); + as_bad (_("Expected quoted string")); ignore_rest_of_line (); return; } @@ -85,7 +85,7 @@ obj_som_compiler (int unused ATTRIBUTE_UNUSED) p++; if (*p == '\000') { - as_bad (".compiler directive missing language and version"); + as_bad (_(".compiler directive missing language and version")); return; } *p = '\000'; @@ -95,7 +95,7 @@ obj_som_compiler (int unused ATTRIBUTE_UNUSED) p++; if (*p == '\000') { - as_bad (".compiler directive missing version"); + as_bad (_(".compiler directive missing version")); return; } *p = '\000'; @@ -111,7 +111,7 @@ obj_som_compiler (int unused ATTRIBUTE_UNUSED) "GNU Tools", version_id)) { bfd_perror (stdoutput->filename); - as_fatal ("FATAL: Attaching compiler header %s", stdoutput->filename); + as_fatal (_("FATAL: Attaching compiler header %s"), stdoutput->filename); } *input_line_pointer = c; demand_empty_rest_of_line (); @@ -263,7 +263,7 @@ obj_som_init_stab_section (segT seg) /* Fill in the counts in the first entry in a .stabs section. */ static void -adjust_stab_sections (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED) +adjust_stab_sections (bfd *abfd, asection *sec, void *xxx ATTRIBUTE_UNUSED) { asection *strsec; char *p; @@ -280,7 +280,7 @@ adjust_stab_sections (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED) nsyms = bfd_section_size (abfd, sec) / 12 - 1; p = seg_info (sec)->stabu.p; - assert (p != 0); + gas_assert (p != 0); bfd_h_put_16 (abfd, (bfd_vma) nsyms, (bfd_byte *) p + 6); bfd_h_put_32 (abfd, (bfd_vma) strsz, (bfd_byte *) p + 8); @@ -292,7 +292,7 @@ adjust_stab_sections (bfd *abfd, asection *sec, PTR xxx ATTRIBUTE_UNUSED) void som_frob_file (void) { - bfd_map_over_sections (stdoutput, adjust_stab_sections, (PTR) 0); + bfd_map_over_sections (stdoutput, adjust_stab_sections, (void *) 0); } static void diff --git a/gas/config/tc-alpha.c b/gas/config/tc-alpha.c index 69bd575..35d3812 100644 --- a/gas/config/tc-alpha.c +++ b/gas/config/tc-alpha.c @@ -1,6 +1,7 @@ /* 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, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 + 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. @@ -57,9 +58,13 @@ #ifdef OBJ_ELF #include "elf/alpha.h" -#include "dwarf2dbg.h" #endif +#ifdef OBJ_EVAX +#include "vms.h" +#endif + +#include "dwarf2dbg.h" #include "dw2gencfi.h" #include "safe-ctype.h" @@ -74,6 +79,9 @@ struct alpha_fixup { expressionS exp; bfd_reloc_code_real_type reloc; +#ifdef OBJ_EVAX + symbolS *xtrasym, *procsym; +#endif }; struct alpha_insn @@ -92,7 +100,7 @@ enum alpha_macro_arg MACRO_OPIR, MACRO_CPIR, MACRO_FPR, - MACRO_EXP, + MACRO_EXP }; struct alpha_macro @@ -244,6 +252,12 @@ struct option md_longopts[] = #define OPTION_NO_MDEBUG (OPTION_MDEBUG + 1) { "mdebug", no_argument, NULL, OPTION_MDEBUG }, { "no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG }, +#endif +#ifdef OBJ_EVAX +#define OPTION_REPLACE (OPTION_RELAX + 1) +#define OPTION_NOREPLACE (OPTION_REPLACE+1) + { "replace", no_argument, NULL, OPTION_REPLACE }, + { "noreplace", no_argument, NULL, OPTION_NOREPLACE }, #endif { NULL, no_argument, NULL, 0 } }; @@ -268,6 +282,9 @@ size_t md_longopts_size = sizeof (md_longopts); #undef AXP_REG_GP #define AXP_REG_GP AXP_REG_PV + +static struct hash_control *alpha_evax_proc_hash; + #endif /* OBJ_EVAX */ /* The cpu for which we are generating code. */ @@ -299,11 +316,11 @@ static symbolS *alpha_register_table[64]; static segT alpha_lita_section; #endif #ifdef OBJ_EVAX -static segT alpha_link_section; -static segT alpha_ctors_section; -static segT alpha_dtors_section; +segT alpha_link_section; #endif +#ifndef OBJ_EVAX static segT alpha_lit8_section; +#endif /* Symbols referring to said sections. */ #ifdef OBJ_ECOFF @@ -311,10 +328,10 @@ static symbolS *alpha_lita_symbol; #endif #ifdef OBJ_EVAX static symbolS *alpha_link_symbol; -static symbolS *alpha_ctors_symbol; -static symbolS *alpha_dtors_symbol; #endif +#ifndef OBJ_EVAX static symbolS *alpha_lit8_symbol; +#endif /* Literal for .litX+0x8000 within .lita. */ #ifdef OBJ_ECOFF @@ -339,6 +356,14 @@ static int alpha_addr32_on = 0; and the section happens to not be on an eight byte boundary, it will align both the symbol and the .quad to an eight byte boundary. */ static symbolS *alpha_insn_label; +#if defined(OBJ_ELF) || defined (OBJ_EVAX) +static symbolS *alpha_prologue_label; +#endif + +#ifdef OBJ_EVAX +/* Symbol associate with the current jsr instruction. */ +static symbolS *alpha_linkage_symbol; +#endif /* Whether we should automatically align data generation pseudo-ops. .align 0 will turn this off. */ @@ -358,6 +383,11 @@ static int alpha_debug; int alpha_flag_mdebug = -1; #endif +#ifdef OBJ_EVAX +/* Whether to perform the VMS procedure call optimization. */ +int alpha_flag_replace = 1; +#endif + /* Don't fully resolve relocations, allowing code movement in the linker. */ static int alpha_flag_relax; @@ -366,7 +396,7 @@ static int g_switch_value = 8; #ifdef OBJ_EVAX /* Collect information about current procedure here. */ -static struct +struct alpha_evax_procs { symbolS *symbol; /* Proc pdesc symbol. */ int pdsckind; @@ -379,7 +409,14 @@ static struct long fmask; int type; int prologue; -} alpha_evax_proc; + symbolS *handler; + int handler_data; +}; + +struct alpha_linkage_fixups *alpha_linkage_fixup_root; +static struct alpha_linkage_fixups *alpha_linkage_fixup_tail; + +static struct alpha_evax_procs *alpha_evax_proc; static int alpha_flag_hash_long_names = 0; /* -+ */ static int alpha_flag_show_after_trunc = 0; /* -H */ @@ -451,6 +488,10 @@ static const int alpha_num_reloc_op struct alpha_reloc_tag { fixS *master; /* The literal reloc. */ +#ifdef OBJ_EVAX + struct symbol *sym; + struct symbol *psym; +#endif fixS *slaves; /* Head of linked list of lituses. */ segT segment; /* Segment relocs are in or undefined_section. */ long sequence; /* Sequence #. */ @@ -527,6 +568,10 @@ static const char * const ldXu_op[] = { "ldbu", "ldwu", NULL, NULL }; static void assemble_insn (const struct alpha_opcode *, const expressionS *, int, struct alpha_insn *, bfd_reloc_code_real_type); static void emit_insn (struct alpha_insn *); static void assemble_tokens (const char *, const expressionS *, int, int); +#ifdef OBJ_EVAX +static char *s_alpha_section_name (void); +static symbolS *add_to_link_pool (symbolS *, symbolS *, offsetT); +#endif static struct alpha_reloc_tag * get_alpha_reloc_tag (long sequence) @@ -549,12 +594,18 @@ get_alpha_reloc_tag (long sequence) strcpy (info->string, buffer); errmsg = hash_insert (alpha_literal_hash, info->string, (void *) info); if (errmsg) - as_fatal (errmsg); + as_fatal ("%s", errmsg); +#ifdef OBJ_EVAX + info->sym = 0; + info->psym = 0; +#endif } return info; } +#ifndef OBJ_EVAX + static void alpha_adjust_relocs (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, @@ -718,6 +769,8 @@ alpha_before_fix (void) if (alpha_literal_hash) bfd_map_over_sections (stdoutput, alpha_adjust_relocs, NULL); } + +#endif #ifdef DEBUG_ALPHA static void @@ -1176,7 +1229,8 @@ static long load_expression (int targreg, const expressionS *exp, int *pbasereg, - expressionS *poffset) + expressionS *poffset, + const char *opname) { long emit_lituse = 0; offsetT addend = exp->X_add_number; @@ -1227,7 +1281,7 @@ load_expression (int targreg, assemble_tokens_to_insn ("ldq", newtok, 3, &insn); - assert (insn.nfixups == 1); + gas_assert (insn.nfixups == 1); insn.fixups[0].reloc = BFD_RELOC_ALPHA_LITERAL; insn.sequence = emit_lituse = next_sequence_num--; #endif /* OBJ_ECOFF */ @@ -1263,16 +1317,14 @@ load_expression (int targreg, assemble_tokens_to_insn ("ldq", newtok, 3, &insn); - assert (insn.nfixups == 1); + gas_assert (insn.nfixups == 1); insn.fixups[0].reloc = BFD_RELOC_ALPHA_ELF_LITERAL; insn.sequence = emit_lituse = next_sequence_num--; #endif /* OBJ_ELF */ #ifdef OBJ_EVAX - offsetT link; - /* Find symbol or symbol pointer in link section. */ - if (exp->X_add_symbol == alpha_evax_proc.symbol) + if (exp->X_add_symbol == alpha_evax_proc->symbol) { if (range_signed_16 (addend)) { @@ -1292,20 +1344,97 @@ load_expression (int targreg, } else { - if (!range_signed_32 (addend)) + const char *symname = S_GET_NAME (exp->X_add_symbol); + const char *ptr1, *ptr2; + int symlen = strlen (symname); + + if ((symlen > 4 && + strcmp (ptr2 = &symname [symlen - 4], "..lk") == 0)) { - link = add_to_link_pool (alpha_evax_proc.symbol, - exp->X_add_symbol, addend); - addend = 0; + set_tok_reg (newtok[0], targreg); + + newtok[1] = *exp; + newtok[1].X_op = O_subtract; + newtok[1].X_op_symbol = alpha_evax_proc->symbol; + + set_tok_preg (newtok[2], basereg); + assemble_tokens_to_insn ("ldq", newtok, 3, &insn); + alpha_linkage_symbol = exp->X_add_symbol; + + if (poffset) + set_tok_const (*poffset, 0); + + if (alpha_flag_replace && targreg == 26) + { + char *ensymname; + symbolS *ensym; + volatile asymbol *dummy; + + ptr1 = strstr (symname, "..") + 2; + if (ptr1 > ptr2) + ptr1 = symname; + ensymname = (char *) xmalloc (ptr2 - ptr1 + 5); + memcpy (ensymname, ptr1, ptr2 - ptr1); + memcpy (ensymname + (ptr2 - ptr1), "..en", 5); + + gas_assert (insn.nfixups + 1 <= MAX_INSN_FIXUPS); + insn.fixups[insn.nfixups].reloc = BFD_RELOC_ALPHA_NOP; + ensym = symbol_find_or_make (ensymname); + ensym->sy_used = 1; + /* The fixup must be the same as the BFD_RELOC_ALPHA_BOH + case in emit_jsrjmp. See B.4.5.2 of the OpenVMS Linker + Utility Manual. */ + insn.fixups[insn.nfixups].exp.X_op = O_symbol; + insn.fixups[insn.nfixups].exp.X_add_symbol = ensym; + insn.fixups[insn.nfixups].exp.X_add_number = 0; + insn.fixups[insn.nfixups].xtrasym = alpha_linkage_symbol; + insn.fixups[insn.nfixups].procsym = alpha_evax_proc->symbol; + insn.nfixups++; + + /* ??? Force bsym to be instantiated now, as it will be + too late to do so in tc_gen_reloc. */ + dummy = symbol_get_bfdsym (exp->X_add_symbol); + } + else if (alpha_flag_replace && targreg == 27) + { + char *psymname; + symbolS *psym; + + ptr1 = strstr (symname, "..") + 2; + if (ptr1 > ptr2) + ptr1 = symname; + psymname = (char *) xmalloc (ptr2 - ptr1 + 1); + memcpy (psymname, ptr1, ptr2 - ptr1); + psymname [ptr2 - ptr1] = 0; + gas_assert (insn.nfixups + 1 <= MAX_INSN_FIXUPS); + insn.fixups[insn.nfixups].reloc = BFD_RELOC_ALPHA_LDA; + psym = symbol_find_or_make (psymname); + psym->sy_used = 1; + insn.fixups[insn.nfixups].exp.X_op = O_subtract; + insn.fixups[insn.nfixups].exp.X_add_symbol = psym; + insn.fixups[insn.nfixups].exp.X_op_symbol = alpha_evax_proc->symbol; + insn.fixups[insn.nfixups].exp.X_add_number = 0; + insn.fixups[insn.nfixups].xtrasym = alpha_linkage_symbol; + insn.fixups[insn.nfixups].procsym = alpha_evax_proc->symbol; + insn.nfixups++; + } + + emit_insn(&insn); + return 0; } else - link = add_to_link_pool (alpha_evax_proc.symbol, - exp->X_add_symbol, 0); + { + symbolS *linkexp; - set_tok_reg (newtok[0], targreg); - set_tok_const (newtok[1], link); - set_tok_preg (newtok[2], basereg); - assemble_tokens_to_insn ("ldq", newtok, 3, &insn); + if (!range_signed_32 (addend)) + addend = sign_extend_32 (addend); + linkexp = add_to_link_pool (alpha_evax_proc->symbol, + exp->X_add_symbol, 0); + set_tok_reg (newtok[0], targreg); + set_tok_sym (newtok[1], linkexp, 0); + set_tok_preg (newtok[2], basereg); + assemble_tokens_to_insn ("ldq", newtok, 3, &insn); + } } #endif /* OBJ_EVAX */ @@ -1335,7 +1464,7 @@ load_expression (int targreg, set_tok_reg (newtok[0], targreg); newtok[1] = *exp; set_tok_preg (newtok[2], basereg); - assemble_tokens ("lda", newtok, 3, 0); + assemble_tokens (opname, newtok, 3, 0); if (poffset) set_tok_const (*poffset, 0); @@ -1357,16 +1486,20 @@ load_expression (int targreg, if (!range_signed_32 (addend)) { +#ifdef OBJ_EVAX + symbolS *litexp; +#else offsetT lit; long seq_num = next_sequence_num--; +#endif /* For 64-bit addends, just put it in the literal pool. */ #ifdef OBJ_EVAX /* Emit "ldq targreg, lit(basereg)". */ - lit = add_to_link_pool (alpha_evax_proc.symbol, - section_symbol (absolute_section), addend); + litexp = add_to_link_pool (alpha_evax_proc->symbol, + section_symbol (absolute_section), addend); set_tok_reg (newtok[0], targreg); - set_tok_const (newtok[1], lit); + set_tok_sym (newtok[1], litexp, 0); set_tok_preg (newtok[2], alpha_gp_register); assemble_tokens ("ldq", newtok, 3, 0); #else @@ -1412,7 +1545,7 @@ load_expression (int targreg, assemble_tokens_to_insn ("ldq", newtok, 3, &insn); - assert (insn.nfixups == 1); + gas_assert (insn.nfixups == 1); #ifdef OBJ_ECOFF insn.fixups[0].reloc = BFD_RELOC_ALPHA_LITERAL; #endif @@ -1430,7 +1563,7 @@ load_expression (int targreg, assemble_tokens_to_insn ("ldq", newtok, 3, &insn); - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BASE; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -1525,7 +1658,7 @@ emit_lda (const expressionS *tok, else basereg = tok[2].X_add_number; - (void) load_expression (tok[0].X_add_number, &tok[1], &basereg, NULL); + (void) load_expression (tok[0].X_add_number, &tok[1], &basereg, NULL, "lda"); } /* The ldah macro differs from the ldah instruction in that it has $31 @@ -1633,11 +1766,23 @@ emit_insn (struct alpha_insn *insn) { reloc_howto_type *reloc_howto = bfd_reloc_type_lookup (stdoutput, fixup->reloc); - assert (reloc_howto); + gas_assert (reloc_howto); size = bfd_get_reloc_size (reloc_howto); - assert (size >= 1 && size <= 4); + switch (fixup->reloc) + { +#ifdef OBJ_EVAX + case BFD_RELOC_ALPHA_NOP: + case BFD_RELOC_ALPHA_BSR: + case BFD_RELOC_ALPHA_LDA: + case BFD_RELOC_ALPHA_BOH: + break; +#endif + default: + gas_assert (size >= 1 && size <= 4); + } + pcrel = reloc_howto->pc_relative; } @@ -1784,6 +1929,18 @@ emit_insn (struct alpha_insn *insn) fixP->tc_fix_data.info = info; break; #endif +#ifdef OBJ_EVAX + case BFD_RELOC_ALPHA_NOP: + case BFD_RELOC_ALPHA_LDA: + case BFD_RELOC_ALPHA_BSR: + case BFD_RELOC_ALPHA_BOH: + info = get_alpha_reloc_tag (next_sequence_num--); + fixP->tc_fix_data.info = info; + fixP->tc_fix_data.info->sym = fixup->xtrasym; + fixP->tc_fix_data.info->psym = fixup->procsym; + break; +#endif + default: if ((int) fixup->reloc < 0) { @@ -1829,7 +1986,7 @@ insert_operand (unsigned insn, insn = (*operand->insert) (insn, val, &errmsg); if (errmsg) - as_warn (errmsg); + as_warn ("%s", errmsg); } else insn |= ((val & ((1 << operand->bits) - 1)) << operand->shift); @@ -1904,7 +2061,7 @@ assemble_insn (const struct alpha_opcode *opcode, case O_constant: image = insert_operand (image, operand, t->X_add_number, NULL, 0); - assert (reloc_operand == NULL); + gas_assert (reloc_operand == NULL); reloc_operand = operand; reloc_exp = t; break; @@ -1934,7 +2091,7 @@ assemble_insn (const struct alpha_opcode *opcode, if (reloc == BFD_RELOC_UNUSED) reloc = operand->default_reloc; - assert (reloc_operand == NULL); + gas_assert (reloc_operand == NULL); reloc_operand = operand; reloc_exp = t; } @@ -1963,12 +2120,14 @@ assemble_insn (const struct alpha_opcode *opcode, } /* If this is a real relocation (as opposed to a lituse hint), then - the relocation width should match the operand width. */ - else if (reloc < BFD_RELOC_UNUSED) + the relocation width should match the operand width. + Take care of -MDISP in operand table. */ + else if (reloc < BFD_RELOC_UNUSED && reloc > 0) { reloc_howto_type *reloc_howto = bfd_reloc_type_lookup (stdoutput, reloc); - if (reloc_howto->bitsize != reloc_operand->bits) + if (reloc_operand == NULL + || reloc_howto->bitsize != reloc_operand->bits) { as_bad (_("invalid relocation for field")); return; @@ -1999,15 +2158,22 @@ emit_ir_load (const expressionS *tok, long lituse; expressionS newtok[3]; struct alpha_insn insn; + const char *symname + = tok[1].X_add_symbol ? S_GET_NAME (tok[1].X_add_symbol): ""; + int symlen = strlen (symname); if (ntok == 2) basereg = (tok[1].X_op == O_constant ? AXP_REG_ZERO : alpha_gp_register); else basereg = tok[2].X_add_number; - lituse = load_expression (tok[0].X_add_number, &tok[1], &basereg, - &newtok[1]); + lituse = load_expression (tok[0].X_add_number, &tok[1], + &basereg, &newtok[1], opname); + if (basereg == alpha_gp_register && + (symlen > 4 && strcmp (&symname [symlen - 4], "..lk") == 0)) + return; + newtok[0] = tok[0]; set_tok_preg (newtok[2], basereg); @@ -2015,7 +2181,7 @@ emit_ir_load (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BASE; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2048,7 +2214,8 @@ emit_loadstore (const expressionS *tok, if (alpha_noat_on) as_bad (_("macro requires $at register while noat in effect")); - lituse = load_expression (AXP_REG_AT, &tok[1], &basereg, &newtok[1]); + lituse = load_expression (AXP_REG_AT, &tok[1], + &basereg, &newtok[1], opname); } else { @@ -2063,7 +2230,7 @@ emit_loadstore (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BASE; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2099,7 +2266,7 @@ emit_ldXu (const expressionS *tok, basereg = tok[2].X_add_number; /* Emit "lda $at, exp". */ - lituse = load_expression (AXP_REG_AT, &tok[1], &basereg, NULL); + lituse = load_expression (AXP_REG_AT, &tok[1], &basereg, NULL, "lda"); /* Emit "ldq_u targ, 0($at)". */ newtok[0] = tok[0]; @@ -2109,7 +2276,7 @@ emit_ldXu (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BASE; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2125,7 +2292,7 @@ emit_ldXu (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BYTOFF; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2251,7 +2418,7 @@ emit_stX (const expressionS *tok, basereg = tok[2].X_add_number; /* Emit "lda $at, exp". */ - lituse = load_expression (AXP_REG_AT, &tok[1], &basereg, NULL); + lituse = load_expression (AXP_REG_AT, &tok[1], &basereg, NULL, "lda"); /* Emit "ldq_u $t9, 0($at)". */ set_tok_reg (newtok[0], AXP_REG_T9); @@ -2261,7 +2428,7 @@ emit_stX (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BASE; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2278,7 +2445,7 @@ emit_stX (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BYTOFF; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2294,7 +2461,7 @@ emit_stX (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BYTOFF; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2314,7 +2481,7 @@ emit_stX (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_BASE; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; @@ -2661,15 +2828,14 @@ emit_jsrjmp (const expressionS *tok, else { int basereg = alpha_gp_register; - lituse = load_expression (r = AXP_REG_PV, &tok[tokidx], &basereg, NULL); + lituse = load_expression (r = AXP_REG_PV, &tok[tokidx], + &basereg, NULL, opname); } #endif set_tok_cpreg (newtok[1], r); -#ifdef OBJ_EVAX - /* FIXME: Add hint relocs to BFD for evax. */ -#else +#ifndef OBJ_EVAX if (tokidx < ntok) newtok[2] = tok[tokidx]; else @@ -2680,13 +2846,48 @@ emit_jsrjmp (const expressionS *tok, if (lituse) { - assert (insn.nfixups < MAX_INSN_FIXUPS); + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); insn.fixups[insn.nfixups].reloc = DUMMY_RELOC_LITUSE_JSR; insn.fixups[insn.nfixups].exp.X_op = O_absent; insn.nfixups++; insn.sequence = lituse; } +#ifdef OBJ_EVAX + if (alpha_flag_replace + && r == AXP_REG_RA + && tok[tokidx].X_add_symbol + && alpha_linkage_symbol) + { + const char *symname = S_GET_NAME (tok[tokidx].X_add_symbol); + int symlen = strlen (symname); + char *ensymname; + + ensymname = (char *) xmalloc (symlen + 5); + memcpy (ensymname, symname, symlen); + memcpy (ensymname + symlen, "..en", 5); + + gas_assert (insn.nfixups < MAX_INSN_FIXUPS); + if (insn.nfixups > 0) + { + memmove (&insn.fixups[1], &insn.fixups[0], + sizeof(struct alpha_fixup) * insn.nfixups); + } + + /* The fixup must be the same as the BFD_RELOC_ALPHA_NOP + case in load_expression. See B.4.5.2 of the OpenVMS + Linker Utility Manual. */ + insn.fixups[0].reloc = BFD_RELOC_ALPHA_BOH; + insn.fixups[0].exp.X_op = O_symbol; + insn.fixups[0].exp.X_add_symbol = symbol_find_or_make (ensymname); + insn.fixups[0].exp.X_add_number = 0; + insn.fixups[0].xtrasym = alpha_linkage_symbol; + insn.fixups[0].procsym = alpha_evax_proc->symbol; + insn.nfixups++; + alpha_linkage_symbol = 0; + } +#endif + emit_insn (&insn); } @@ -2783,7 +2984,10 @@ FIXME insn.sequence = next_sequence_num--; emit_insn (&insn); -#endif /* OBJ_ECOFF || OBJ_ELF */ +#else /* OBJ_ECOFF || OBJ_ELF */ + /* Avoid warning. */ + tok = NULL; +#endif } /* The macro table. */ @@ -3152,7 +3356,7 @@ assemble_tokens (const char *opname, Add new fixup only if offset isn't 16bit. */ -valueT +static symbolS * add_to_link_pool (symbolS *basesym, symbolS *sym, offsetT addend) @@ -3160,12 +3364,13 @@ add_to_link_pool (symbolS *basesym, segT current_section = now_seg; int current_subsec = now_subseg; valueT offset; - bfd_reloc_code_real_type reloc_type; char *p; segment_info_type *seginfo = seg_info (alpha_link_section); fixS *fixp; - - offset = - *symbol_get_obj (basesym); + symbolS *linksym, *expsym; + expressionS e; + + offset = 0; /* ??? DBR */ /* @@ This assumes all entries in a given section will be of the same size... Probably correct, but unwise to rely on. */ @@ -3174,31 +3379,44 @@ add_to_link_pool (symbolS *basesym, if (seginfo->frchainP) for (fixp = seginfo->frchainP->fix_root; fixp != (fixS *) NULL; - fixp = fixp->fx_next, offset += 8) + fixp = fixp->fx_next) { - if (fixp->fx_addsy == sym && fixp->fx_offset == addend) - { - if (range_signed_16 (offset)) - { - return offset; - } - } + if (fixp->tc_fix_data.info + && fixp->tc_fix_data.info->sym + && fixp->tc_fix_data.info->sym->sy_value.X_op_symbol == basesym) + offset += 8; + + if (fixp->fx_addsy == sym + && fixp->fx_offset == (valueT)addend + && fixp->tc_fix_data.info + && fixp->tc_fix_data.info->sym + && fixp->tc_fix_data.info->sym->sy_value.X_op_symbol == basesym) + return fixp->tc_fix_data.info->sym; } /* Not found in 16bit signed range. */ subseg_set (alpha_link_section, 0); + linksym = symbol_new + (FAKE_LABEL_NAME, now_seg, (valueT) frag_now_fix (), frag_now); p = frag_more (8); memset (p, 0, 8); - fix_new (frag_now, p - frag_now->fr_literal, 8, sym, addend, 0, - BFD_RELOC_64); + e.X_op = O_subtract; + e.X_add_symbol = linksym; + e.X_op_symbol = basesym; + e.X_add_number = 0; + expsym = make_expr_symbol (&e); + + fixp = fix_new + (frag_now, p-frag_now->fr_literal, 8, sym, addend, 0, BFD_RELOC_64); + fixp->tc_fix_data.info = get_alpha_reloc_tag (next_sequence_num--); + fixp->tc_fix_data.info->sym = expsym; subseg_set (current_section, current_subsec); seginfo->literal_pool_size += 8; - return offset; + return expsym; } - #endif /* OBJ_EVAX */ /* Assembler directives. */ @@ -3208,12 +3426,24 @@ add_to_link_pool (symbolS *basesym, static void s_alpha_text (int i) - { #ifdef OBJ_ELF obj_elf_text (i); #else s_text (i); +#endif +#ifdef OBJ_EVAX + { + symbolS * symbolP; + + symbolP = symbol_find (".text"); + if (symbolP == NULL) + { + symbolP = symbol_make (".text"); + S_SET_SEGMENT (symbolP, text_section); + symbol_table_insert (symbolP); + } + } #endif alpha_insn_label = NULL; alpha_auto_align_on = 1; @@ -3238,8 +3468,7 @@ s_alpha_data (int i) #if defined (OBJ_ECOFF) || defined (OBJ_EVAX) -/* Handle the OSF/1 and openVMS .comm pseudo quirks. - openVMS constructs a section for every common symbol. */ +/* Handle the OSF/1 and openVMS .comm pseudo quirks. */ static void s_alpha_comm (int ignore ATTRIBUTE_UNUSED) @@ -3247,12 +3476,11 @@ s_alpha_comm (int ignore ATTRIBUTE_UNUSED) char *name; char c; char *p; - offsetT temp; + offsetT size; symbolS *symbolP; #ifdef OBJ_EVAX - segT current_section = now_seg; - int current_subsec = now_subseg; - segT new_seg; + offsetT temp; + int log_align = 0; #endif name = input_line_pointer; @@ -3270,35 +3498,17 @@ s_alpha_comm (int ignore ATTRIBUTE_UNUSED) input_line_pointer++; SKIP_WHITESPACE (); } - if ((temp = get_absolute_expression ()) < 0) + if ((size = get_absolute_expression ()) < 0) { - as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) temp); + as_warn (_(".COMMon length (%ld.) <0! Ignored."), (long) size); ignore_rest_of_line (); return; } *p = 0; symbolP = symbol_find_or_make (name); - -#ifdef OBJ_EVAX - /* Make a section for the common symbol. */ - new_seg = subseg_new (xstrdup (name), 0); -#endif - *p = c; -#ifdef OBJ_EVAX - /* Alignment might follow. */ - if (*input_line_pointer == ',') - { - offsetT align; - - input_line_pointer++; - align = get_absolute_expression (); - bfd_set_section_alignment (stdoutput, new_seg, align); - } -#endif - if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP)) { as_bad (_("Ignoring attempt to re-define symbol")); @@ -3307,44 +3517,108 @@ s_alpha_comm (int ignore ATTRIBUTE_UNUSED) } #ifdef OBJ_EVAX - if (bfd_section_size (stdoutput, new_seg) > 0) + if (*input_line_pointer != ',') + temp = 8; /* Default alignment. */ + else { - if (bfd_section_size (stdoutput, new_seg) != temp) - as_bad (_("Length of .comm \"%s\" is already %ld. Not changed to %ld."), - S_GET_NAME (symbolP), - (long) bfd_section_size (stdoutput, new_seg), - (long) temp); + input_line_pointer++; + SKIP_WHITESPACE (); + temp = get_absolute_expression (); } -#else - if (S_GET_VALUE (symbolP)) + + /* ??? Unlike on OSF/1, the alignment factor is not in log units. */ + while ((temp >>= 1) != 0) + ++log_align; + + if (*input_line_pointer == ',') { - if (S_GET_VALUE (symbolP) != (valueT) temp) - as_bad (_("Length of .comm \"%s\" is already %ld. Not changed to %ld."), - S_GET_NAME (symbolP), - (long) S_GET_VALUE (symbolP), - (long) temp); + /* Extended form of the directive + + .comm symbol, size, alignment, section + + where the "common" semantics is transferred to the section. + The symbol is effectively an alias for the section name. */ + + segT sec; + char *sec_name; + symbolS *sec_symbol; + segT current_seg = now_seg; + subsegT current_subseg = now_subseg; + int cur_size; + + input_line_pointer++; + SKIP_WHITESPACE (); + sec_name = s_alpha_section_name (); + sec_symbol = symbol_find_or_make (sec_name); + sec = subseg_new (sec_name, 0); + S_SET_SEGMENT (sec_symbol, sec); + symbol_get_bfdsym (sec_symbol)->flags |= BSF_SECTION_SYM; + bfd_vms_set_section_flags (stdoutput, sec, + EGPS_S_V_OVR | EGPS_S_V_GBL | EGPS_S_V_NOMOD); + record_alignment (sec, log_align); + + /* Reuse stab_string_size to store the size of the section. */ + cur_size = seg_info (sec)->stabu.stab_string_size; + if ((int) size > cur_size) + { + char *pfrag + = frag_var (rs_fill, 1, 1, (relax_substateT)0, NULL, + (valueT)size - (valueT)cur_size, NULL); + *pfrag = 0; + seg_info (sec)->stabu.stab_string_size = (int)size; + } + + S_SET_SEGMENT (symbolP, sec); + + subseg_set (current_seg, current_subseg); + } + else + { + /* Regular form of the directive + + .comm symbol, size, alignment + + where the "common" semantics in on the symbol. + These symbols are assembled in the .bss section. */ + + char *pfrag; + segT current_seg = now_seg; + subsegT current_subseg = now_subseg; + + subseg_set (bss_section, 1); + frag_align (log_align, 0, 0); + record_alignment (bss_section, log_align); + + symbolP->sy_frag = frag_now; + pfrag = frag_var (rs_org, 1, 1, (relax_substateT)0, symbolP, + size, NULL); + *pfrag = 0; + + S_SET_SEGMENT (symbolP, bss_section); + + subseg_set (current_seg, current_subseg); } #endif + + if (S_GET_VALUE (symbolP)) + { + if (S_GET_VALUE (symbolP) != (valueT) size) + as_bad (_("Length of .comm \"%s\" is already %ld. Not changed to %ld."), + S_GET_NAME (symbolP), + (long) S_GET_VALUE (symbolP), + (long) size); + } else { -#ifdef OBJ_EVAX - subseg_set (new_seg, 0); - p = frag_more (temp); - new_seg->flags |= SEC_IS_COMMON; - S_SET_SEGMENT (symbolP, new_seg); -#else - S_SET_VALUE (symbolP, (valueT) temp); - S_SET_SEGMENT (symbolP, bfd_com_section_ptr); +#ifndef OBJ_EVAX + S_SET_VALUE (symbolP, (valueT) size); #endif S_SET_EXTERNAL (symbolP); } - -#ifdef OBJ_EVAX - subseg_set (current_section, current_subsec); + +#ifndef OBJ_EVAX + know (symbolP->sy_frag == &zero_address_frag); #endif - - know (symbol_get_frag (symbolP) == &zero_address_frag); - demand_empty_rest_of_line (); } @@ -3622,6 +3896,8 @@ s_alpha_prologue (int ignore ATTRIBUTE_UNUSED) arg = get_absolute_expression (); demand_empty_rest_of_line (); + alpha_prologue_label = symbol_new + (FAKE_LABEL_NAME, now_seg, (valueT) frag_now_fix (), frag_now); if (ECOFF_DEBUGGING) sym = ecoff_get_cur_proc_sym (); @@ -3722,7 +3998,7 @@ s_alpha_stab (int n) static void s_alpha_coff_wrapper (int which) { - static void (* const fns[]) PARAMS ((int)) = { + static void (* const fns[]) (int) = { ecoff_directive_begin, ecoff_directive_bend, ecoff_directive_def, @@ -3733,7 +4009,7 @@ s_alpha_coff_wrapper (int which) ecoff_directive_val, }; - assert (which >= 0 && which < (int) (sizeof (fns)/sizeof (*fns))); + gas_assert (which >= 0 && which < (int) (sizeof (fns)/sizeof (*fns))); if (ECOFF_DEBUGGING) (*fns[which]) (0); @@ -3885,24 +4161,169 @@ alpha_cfi_frame_initial_instructions (void) #ifdef OBJ_EVAX +/* Get name of section. */ +static char * +s_alpha_section_name (void) +{ + char *name; + + SKIP_WHITESPACE (); + if (*input_line_pointer == '"') + { + int dummy; + + name = demand_copy_C_string (&dummy); + if (name == NULL) + { + ignore_rest_of_line (); + return NULL; + } + } + else + { + char *end = input_line_pointer; + + while (0 == strchr ("\n\t,; ", *end)) + end++; + if (end == input_line_pointer) + { + as_warn (_("missing name")); + ignore_rest_of_line (); + return NULL; + } + + name = xmalloc (end - input_line_pointer + 1); + memcpy (name, input_line_pointer, end - input_line_pointer); + name[end - input_line_pointer] = '\0'; + input_line_pointer = end; + } + SKIP_WHITESPACE (); + return name; +} + +static flagword +s_alpha_section_word (char *str, size_t len) +{ + int no = 0; + flagword flag = 0; + + if (len == 5 && strncmp (str, "NO", 2) == 0) + { + no = 1; + str += 2; + len -= 2; + } + + if (len == 3) + { + if (strncmp (str, "PIC", 3) == 0) + flag = EGPS_S_V_PIC; + else if (strncmp (str, "LIB", 3) == 0) + flag = EGPS_S_V_LIB; + else if (strncmp (str, "OVR", 3) == 0) + flag = EGPS_S_V_OVR; + else if (strncmp (str, "REL", 3) == 0) + flag = EGPS_S_V_REL; + else if (strncmp (str, "GBL", 3) == 0) + flag = EGPS_S_V_GBL; + else if (strncmp (str, "SHR", 3) == 0) + flag = EGPS_S_V_SHR; + else if (strncmp (str, "EXE", 3) == 0) + flag = EGPS_S_V_EXE; + else if (strncmp (str, "WRT", 3) == 0) + flag = EGPS_S_V_WRT; + else if (strncmp (str, "VEC", 3) == 0) + flag = EGPS_S_V_VEC; + else if (strncmp (str, "MOD", 3) == 0) + { + flag = no ? EGPS_S_V_NOMOD : EGPS_S_V_NOMOD << EGPS_S_V_NO_SHIFT; + no = 0; + } + else if (strncmp (str, "COM", 3) == 0) + flag = EGPS_S_V_COM; + } + + if (flag == 0) + { + char c = str[len]; + str[len] = 0; + as_warn (_("unknown section attribute %s"), str); + str[len] = c; + return 0; + } + + if (no) + return flag << EGPS_S_V_NO_SHIFT; + else + return flag; +} + /* Handle the section specific pseudo-op. */ +#define EVAX_SECTION_COUNT 5 + +static char *section_name[EVAX_SECTION_COUNT + 1] = + { "NULL", ".rdata", ".comm", ".link", ".ctors", ".dtors" }; + static void s_alpha_section (int secid) { int temp; -#define EVAX_SECTION_COUNT 5 - static char *section_name[EVAX_SECTION_COUNT + 1] = - { "NULL", ".rdata", ".comm", ".link", ".ctors", ".dtors" }; + char *name, *beg; + segT sec; + flagword vms_flags = 0; + symbolS *symbol; - if ((secid <= 0) || (secid > EVAX_SECTION_COUNT)) + if (secid == 0) { - as_fatal (_("Unknown section directive")); - demand_empty_rest_of_line (); - return; + name = s_alpha_section_name (); + if (name == NULL) + return; + sec = subseg_new (name, 0); + if (*input_line_pointer == ',') + { + /* Skip the comma. */ + ++input_line_pointer; + SKIP_WHITESPACE (); + + do + { + char c; + + SKIP_WHITESPACE (); + beg = input_line_pointer; + c = get_symbol_end (); + *input_line_pointer = c; + + vms_flags |= s_alpha_section_word (beg, input_line_pointer - beg); + + SKIP_WHITESPACE (); + } + while (*input_line_pointer++ == ','); + --input_line_pointer; + } + + symbol = symbol_find_or_make (name); + S_SET_SEGMENT (symbol, sec); + symbol_get_bfdsym (symbol)->flags |= BSF_SECTION_SYM; + bfd_vms_set_section_flags (stdoutput, sec, vms_flags); } - temp = get_absolute_expression (); - subseg_new (section_name[secid], 0); + else + { + temp = get_absolute_expression (); + subseg_new (section_name[secid], 0); + } + + demand_empty_rest_of_line (); + alpha_insn_label = NULL; + alpha_auto_align_on = 1; + alpha_current_align = 0; +} + +static void +s_alpha_literals (int ignore ATTRIBUTE_UNUSED) +{ + subseg_new (".literals", 0); demand_empty_rest_of_line (); alpha_insn_label = NULL; alpha_auto_align_on = 1; @@ -3917,16 +4338,21 @@ s_alpha_ent (int ignore ATTRIBUTE_UNUSED) symbolS *symbol; expressionS symexpr; - alpha_evax_proc.pdsckind = 0; - alpha_evax_proc.framereg = -1; - alpha_evax_proc.framesize = 0; - alpha_evax_proc.rsa_offset = 0; - alpha_evax_proc.ra_save = AXP_REG_RA; - alpha_evax_proc.fp_save = -1; - alpha_evax_proc.imask = 0; - alpha_evax_proc.fmask = 0; - alpha_evax_proc.prologue = 0; - alpha_evax_proc.type = 0; + alpha_evax_proc + = (struct alpha_evax_procs *) xmalloc (sizeof (struct alpha_evax_procs)); + + alpha_evax_proc->pdsckind = 0; + alpha_evax_proc->framereg = -1; + alpha_evax_proc->framesize = 0; + alpha_evax_proc->rsa_offset = 0; + alpha_evax_proc->ra_save = AXP_REG_RA; + alpha_evax_proc->fp_save = -1; + alpha_evax_proc->imask = 0; + alpha_evax_proc->fmask = 0; + alpha_evax_proc->prologue = 0; + alpha_evax_proc->type = 0; + alpha_evax_proc->handler = 0; + alpha_evax_proc->handler_data = 0; expression (&symexpr); @@ -3939,11 +4365,44 @@ s_alpha_ent (int ignore ATTRIBUTE_UNUSED) symbol = make_expr_symbol (&symexpr); symbol_get_bfdsym (symbol)->flags |= BSF_FUNCTION; - alpha_evax_proc.symbol = symbol; + alpha_evax_proc->symbol = symbol; + + (void) hash_insert + (alpha_evax_proc_hash, + symbol_get_bfdsym (alpha_evax_proc->symbol)->name, (PTR)alpha_evax_proc); demand_empty_rest_of_line (); } +static void +s_alpha_handler (int is_data) +{ + if (is_data) + alpha_evax_proc->handler_data = get_absolute_expression (); + else + { + char *name, name_end; + name = input_line_pointer; + name_end = get_symbol_end (); + + if (! is_name_beginner (*name)) + { + as_warn (_(".handler directive has no name")); + *input_line_pointer = name_end; + } + else + { + symbolS *sym; + + sym = symbol_find_or_make (name); + symbol_get_bfdsym (sym)->flags |= BSF_FUNCTION; + alpha_evax_proc->handler = sym; + *input_line_pointer = name_end; + } + } + demand_empty_rest_of_line (); +} + /* Parse .frame ,,RA, directives. */ static void @@ -3951,7 +4410,7 @@ s_alpha_frame (int ignore ATTRIBUTE_UNUSED) { long val; - alpha_evax_proc.framereg = tc_get_register (1); + alpha_evax_proc->framereg = tc_get_register (1); SKIP_WHITESPACE (); if (*input_line_pointer++ != ',' @@ -3963,7 +4422,7 @@ s_alpha_frame (int ignore ATTRIBUTE_UNUSED) return; } - alpha_evax_proc.framesize = val; + alpha_evax_proc->framesize = val; (void) tc_get_register (1); SKIP_WHITESPACE (); @@ -3974,7 +4433,18 @@ s_alpha_frame (int ignore ATTRIBUTE_UNUSED) demand_empty_rest_of_line (); return; } - alpha_evax_proc.rsa_offset = get_absolute_expression (); + alpha_evax_proc->rsa_offset = get_absolute_expression (); +} + +static void +s_alpha_prologue (int ignore ATTRIBUTE_UNUSED) +{ + int arg; + + arg = get_absolute_expression (); + demand_empty_rest_of_line (); + alpha_prologue_label = symbol_new + (FAKE_LABEL_NAME, now_seg, (valueT) frag_now_fix (), frag_now); } static void @@ -3982,12 +4452,14 @@ s_alpha_pdesc (int ignore ATTRIBUTE_UNUSED) { char *name; char name_end; - long val; register char *p; expressionS exp; symbolS *entry_sym; fixS *fixp; segment_info_type *seginfo = seg_info (alpha_link_section); + const char *entry_sym_name; + char *sym_name; + int len; if (now_seg != alpha_link_section) { @@ -3996,30 +4468,42 @@ s_alpha_pdesc (int ignore ATTRIBUTE_UNUSED) return; } - if ((alpha_evax_proc.symbol == 0) - || (!S_IS_DEFINED (alpha_evax_proc.symbol))) + expression (&exp); + if (exp.X_op != O_symbol) { - as_fatal (_(".pdesc has no matching .ent")); + as_warn (_(".pdesc directive has no entry symbol")); demand_empty_rest_of_line (); return; } - - *symbol_get_obj (alpha_evax_proc.symbol) = - (valueT) seginfo->literal_pool_size; - - expression (&exp); - if (exp.X_op != O_symbol) + + entry_sym = make_expr_symbol (&exp); + entry_sym_name = symbol_get_bfdsym (entry_sym)->name; + + len = strlen (entry_sym_name); + sym_name = (char *) xmalloc (len - 4 + 1); + strncpy (sym_name, entry_sym_name, len - 4); + sym_name [len - 4] = 0; + + alpha_evax_proc = (struct alpha_evax_procs *) + hash_find (alpha_evax_proc_hash, sym_name); + + if (!alpha_evax_proc || !S_IS_DEFINED (alpha_evax_proc->symbol)) { - as_warn (_(".pdesc directive has no entry symbol")); + as_fatal (_(".pdesc has no matching .ent")); demand_empty_rest_of_line (); return; } - entry_sym = make_expr_symbol (&exp); - /* Save bfd symbol of proc desc in function symbol. */ - symbol_get_bfdsym (alpha_evax_proc.symbol)->udata.p - = symbol_get_bfdsym (entry_sym); + *symbol_get_obj (alpha_evax_proc->symbol) = + (valueT) seginfo->literal_pool_size; + alpha_evax_proc->symbol->sy_obj = (valueT)seginfo->literal_pool_size; + + /* Save bfd symbol of proc entry in function symbol. */ + ((struct evax_private_udata_struct *) + symbol_get_bfdsym (alpha_evax_proc->symbol)->udata.p)->enbsym + = symbol_get_bfdsym (entry_sym); + SKIP_WHITESPACE (); if (*input_line_pointer++ != ',') { @@ -4033,13 +4517,13 @@ s_alpha_pdesc (int ignore ATTRIBUTE_UNUSED) name_end = get_symbol_end (); if (strncmp (name, "stack", 5) == 0) - alpha_evax_proc.pdsckind = PDSC_S_K_KIND_FP_STACK; + alpha_evax_proc->pdsckind = PDSC_S_K_KIND_FP_STACK; else if (strncmp (name, "reg", 3) == 0) - alpha_evax_proc.pdsckind = PDSC_S_K_KIND_FP_REGISTER; + alpha_evax_proc->pdsckind = PDSC_S_K_KIND_FP_REGISTER; else if (strncmp (name, "null", 4) == 0) - alpha_evax_proc.pdsckind = PDSC_S_K_KIND_NULL; + alpha_evax_proc->pdsckind = PDSC_S_K_KIND_NULL; else { @@ -4061,53 +4545,58 @@ s_alpha_pdesc (int ignore ATTRIBUTE_UNUSED) fixp->fx_done = 1; seginfo->literal_pool_size += 16; - *p = alpha_evax_proc.pdsckind - | ((alpha_evax_proc.framereg == 29) ? PDSC_S_M_BASE_REG_IS_FP : 0); + *p = alpha_evax_proc->pdsckind + | ((alpha_evax_proc->framereg == 29) ? PDSC_S_M_BASE_REG_IS_FP : 0) + | ((alpha_evax_proc->handler) ? PDSC_S_M_HANDLER_VALID : 0) + | ((alpha_evax_proc->handler_data) ? PDSC_S_M_HANDLER_DATA_VALID : 0); *(p + 1) = PDSC_S_M_NATIVE | PDSC_S_M_NO_JACKET; - switch (alpha_evax_proc.pdsckind) + switch (alpha_evax_proc->pdsckind) { case PDSC_S_K_KIND_NULL: *(p + 2) = 0; *(p + 3) = 0; break; case PDSC_S_K_KIND_FP_REGISTER: - *(p + 2) = alpha_evax_proc.fp_save; - *(p + 3) = alpha_evax_proc.ra_save; + *(p + 2) = alpha_evax_proc->fp_save; + *(p + 3) = alpha_evax_proc->ra_save; break; case PDSC_S_K_KIND_FP_STACK: - md_number_to_chars (p + 2, (valueT) alpha_evax_proc.rsa_offset, 2); + md_number_to_chars (p + 2, (valueT) alpha_evax_proc->rsa_offset, 2); break; default: /* impossible */ break; } *(p + 4) = 0; - *(p + 5) = alpha_evax_proc.type & 0x0f; + *(p + 5) = alpha_evax_proc->type & 0x0f; /* Signature offset. */ md_number_to_chars (p + 6, (valueT) 0, 2); fix_new_exp (frag_now, p - frag_now->fr_literal+8, 8, &exp, 0, BFD_RELOC_64); - if (alpha_evax_proc.pdsckind == PDSC_S_K_KIND_NULL) + if (alpha_evax_proc->pdsckind == PDSC_S_K_KIND_NULL) return; /* Add dummy fix to make add_to_link_pool work. */ - p = frag_more (8); - fixp = fix_new (frag_now, p - frag_now->fr_literal, 8, 0, 0, 0, 0); + p = frag_more (6); + fixp = fix_new (frag_now, p - frag_now->fr_literal, 6, 0, 0, 0, 0); fixp->fx_done = 1; - seginfo->literal_pool_size += 8; - + seginfo->literal_pool_size += 6; + /* pdesc+16: Size. */ - md_number_to_chars (p, (valueT) alpha_evax_proc.framesize, 4); + md_number_to_chars (p, (valueT) alpha_evax_proc->framesize, 4); md_number_to_chars (p + 4, (valueT) 0, 2); /* Entry length. */ - md_number_to_chars (p + 6, alpha_evax_proc.prologue, 2); + exp.X_op = O_subtract; + exp.X_add_symbol = alpha_prologue_label; + exp.X_op_symbol = entry_sym; + emit_expr (&exp, 2); - if (alpha_evax_proc.pdsckind == PDSC_S_K_KIND_FP_REGISTER) + if (alpha_evax_proc->pdsckind == PDSC_S_K_KIND_FP_REGISTER) return; /* Add dummy fix to make add_to_link_pool work. */ @@ -4118,8 +4607,25 @@ s_alpha_pdesc (int ignore ATTRIBUTE_UNUSED) /* pdesc+24: register masks. */ - md_number_to_chars (p, alpha_evax_proc.imask, 4); - md_number_to_chars (p + 4, alpha_evax_proc.fmask, 4); + md_number_to_chars (p, alpha_evax_proc->imask, 4); + md_number_to_chars (p + 4, alpha_evax_proc->fmask, 4); + + if (alpha_evax_proc->handler) + { + p = frag_more (8); + fixp = fix_new (frag_now, p - frag_now->fr_literal, 8, + alpha_evax_proc->handler, 0, 0, BFD_RELOC_64); + } + + if (alpha_evax_proc->handler_data) + { + /* Add dummy fix to make add_to_link_pool work. */ + p = frag_more (8); + fixp = fix_new (frag_now, p - frag_now->fr_literal, 8, 0, 0, 0, 0); + fixp->fx_done = 1; + seginfo->literal_pool_size += 8; + md_number_to_chars (p, alpha_evax_proc->handler_data, 8); + } } /* Support for crash debug on vms. */ @@ -4164,6 +4670,7 @@ s_alpha_linkage (int ignore ATTRIBUTE_UNUSED) { expressionS exp; char *p; + fixS *fixp; #ifdef md_flush_pending_output md_flush_pending_output (); @@ -4176,10 +4683,36 @@ s_alpha_linkage (int ignore ATTRIBUTE_UNUSED) } else { + struct alpha_linkage_fixups *linkage_fixup; + p = frag_more (LKP_S_K_SIZE); memset (p, 0, LKP_S_K_SIZE); - fix_new_exp (frag_now, p - frag_now->fr_literal, LKP_S_K_SIZE, &exp, 0,\ - BFD_RELOC_ALPHA_LINKAGE); + fixp = fix_new_exp + (frag_now, p - frag_now->fr_literal, LKP_S_K_SIZE, &exp, 0,\ + BFD_RELOC_ALPHA_LINKAGE); + + linkage_fixup = (struct alpha_linkage_fixups *) + xmalloc (sizeof (struct alpha_linkage_fixups)); + + linkage_fixup->fixp = fixp; + linkage_fixup->next = 0; + + if (alpha_insn_label == 0) + alpha_insn_label = symbol_new + (FAKE_LABEL_NAME, now_seg, (valueT) frag_now_fix (), frag_now); + linkage_fixup->label = alpha_insn_label; + + if (alpha_linkage_fixup_root == 0) + { + alpha_linkage_fixup_root = alpha_linkage_fixup_tail = linkage_fixup; + alpha_linkage_fixup_tail->next = 0; + } + else + { + alpha_linkage_fixup_tail->next = linkage_fixup; + alpha_linkage_fixup_tail = linkage_fixup; + alpha_linkage_fixup_tail->next = 0; + } } demand_empty_rest_of_line (); } @@ -4211,7 +4744,7 @@ static void s_alpha_fp_save (int ignore ATTRIBUTE_UNUSED) { - alpha_evax_proc.fp_save = tc_get_register (1); + alpha_evax_proc->fp_save = tc_get_register (1); demand_empty_rest_of_line (); } @@ -4228,7 +4761,7 @@ s_alpha_mask (int ignore ATTRIBUTE_UNUSED) } else { - alpha_evax_proc.imask = val; + alpha_evax_proc->imask = val; (void) get_absolute_expression (); } demand_empty_rest_of_line (); @@ -4246,7 +4779,7 @@ s_alpha_fmask (int ignore ATTRIBUTE_UNUSED) } else { - alpha_evax_proc.fmask = val; + alpha_evax_proc->fmask = val; (void) get_absolute_expression (); } demand_empty_rest_of_line (); @@ -4260,7 +4793,7 @@ s_alpha_end (int ignore ATTRIBUTE_UNUSED) c = get_symbol_end (); *input_line_pointer = c; demand_empty_rest_of_line (); - alpha_evax_proc.symbol = 0; + alpha_evax_proc = 0; } static void @@ -4484,7 +5017,7 @@ s_alpha_align (int ignore ATTRIBUTE_UNUSED) { int align; char fill, *pfill; - long max_alignment = 15; + long max_alignment = 16; align = get_absolute_expression (); if (align > max_alignment) @@ -4527,7 +5060,7 @@ s_alpha_stringer (int terminate) { alpha_current_align = 0; alpha_insn_label = NULL; - stringer (terminate); + stringer (8 + terminate); } /* Hook the normal space processing to reset known alignment. */ @@ -4588,7 +5121,7 @@ s_alpha_arch (int ignored ATTRIBUTE_UNUSED) alpha_target_name = p->name, alpha_target = p->flags; goto found; } - as_warn ("Unknown CPU identifier `%s'", name); + as_warn (_("Unknown CPU identifier `%s'"), name); found: *input_line_pointer = ch; @@ -4611,12 +5144,12 @@ alpha_print_token (FILE *f, const expressionS *exp) { expressionS nexp = *exp; nexp.X_op = O_register; - print_expr (f, &nexp); + print_expr_1 (f, &nexp); } putc (')', f); break; default: - print_expr (f, exp); + print_expr_1 (f, exp); break; } } @@ -4642,22 +5175,26 @@ const pseudo_typeS md_pseudo_table[] = {"sect.s", s_alpha_section, 0}, #endif #ifdef OBJ_EVAX - { "pdesc", s_alpha_pdesc, 0}, - { "name", s_alpha_name, 0}, - { "linkage", s_alpha_linkage, 0}, - { "code_address", s_alpha_code_address, 0}, - { "ent", s_alpha_ent, 0}, - { "frame", s_alpha_frame, 0}, - { "fp_save", s_alpha_fp_save, 0}, - { "mask", s_alpha_mask, 0}, - { "fmask", s_alpha_fmask, 0}, - { "end", s_alpha_end, 0}, - { "file", s_alpha_file, 0}, - { "rdata", s_alpha_section, 1}, - { "comm", s_alpha_comm, 0}, - { "link", s_alpha_section, 3}, - { "ctors", s_alpha_section, 4}, - { "dtors", s_alpha_section, 5}, + {"section", s_alpha_section, 0}, + {"literals", s_alpha_literals, 0}, + {"pdesc", s_alpha_pdesc, 0}, + {"name", s_alpha_name, 0}, + {"linkage", s_alpha_linkage, 0}, + {"code_address", s_alpha_code_address, 0}, + {"ent", s_alpha_ent, 0}, + {"frame", s_alpha_frame, 0}, + {"fp_save", s_alpha_fp_save, 0}, + {"mask", s_alpha_mask, 0}, + {"fmask", s_alpha_fmask, 0}, + {"end", s_alpha_end, 0}, + {"file", s_alpha_file, 0}, + {"rdata", s_alpha_section, 1}, + {"comm", s_alpha_comm, 0}, + {"link", s_alpha_section, 3}, + {"ctors", s_alpha_section, 4}, + {"dtors", s_alpha_section, 5}, + {"handler", s_alpha_handler, 0}, + {"handler_data", s_alpha_handler, 1}, #endif #ifdef OBJ_ELF /* Frame related pseudos. */ @@ -4681,8 +5218,12 @@ const pseudo_typeS md_pseudo_table[] = {"scl", s_alpha_coff_wrapper, 5}, {"tag", s_alpha_coff_wrapper, 6}, {"val", s_alpha_coff_wrapper, 7}, +#else +#ifdef OBJ_EVAX + {"prologue", s_alpha_prologue, 0}, #else {"prologue", s_ignore, 0}, +#endif #endif {"gprel32", s_alpha_gprel32, 0}, {"t_floating", s_alpha_float_cons, 'd'}, @@ -4738,7 +5279,6 @@ const pseudo_typeS md_pseudo_table[] = /* @@@ GP selection voodoo. All of this seems overly complicated and unnecessary; which is the primary reason it's for ECOFF only. */ -static inline void maybe_set_gp PARAMS ((asection *)); static inline void maybe_set_gp (asection *sec) @@ -4755,7 +5295,7 @@ maybe_set_gp (asection *sec) static void select_gp_value (void) { - assert (alpha_gp_value == 0); + gas_assert (alpha_gp_value == 0); /* Get minus-one in whatever width... */ alpha_gp_value = 0; @@ -4780,7 +5320,7 @@ select_gp_value (void) #ifdef OBJ_ELF /* Map 's' to SHF_ALPHA_GPREL. */ -int +bfd_vma alpha_elf_section_letter (int letter, char **ptr_msg) { if (letter == 's') @@ -4793,7 +5333,7 @@ alpha_elf_section_letter (int letter, char **ptr_msg) /* Map SHF_ALPHA_GPREL to SEC_SMALL_DATA. */ flagword -alpha_elf_section_flags (flagword flags, int attr, int type ATTRIBUTE_UNUSED) +alpha_elf_section_flags (flagword flags, bfd_vma attr, int type ATTRIBUTE_UNUSED) { if (attr & SHF_ALPHA_GPREL) flags |= SEC_SMALL_DATA; @@ -4862,7 +5402,7 @@ md_begin (void) expressionS e; e.X_op = O_max; - assert (e.X_op == O_max); + gas_assert (e.X_op == O_max); } /* Create the opcode hash table. */ @@ -4955,6 +5495,7 @@ md_begin (void) #ifdef OBJ_EVAX create_literal_section (".link", &alpha_link_section, &alpha_link_symbol); + alpha_evax_proc_hash = hash_new (); #endif #ifdef OBJ_ELF @@ -5020,64 +5561,24 @@ md_section_align (segT seg, valueT size) 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 - -extern char *vax_md_atof (int, char *, int *); - char * md_atof (int type, char *litP, int *sizeP) { - int prec; - LITTLENUM_TYPE words[MAX_LITTLENUMS]; - LITTLENUM_TYPE *wordP; - char *t; + extern char *vax_md_atof (int, char *, int *); switch (type) { /* VAX floats. */ case 'G': - /* VAX md_atof doesn't like "G" for some reason. */ + /* vax_md_atof() doesn't like "G" for some reason. */ type = 'g'; case 'F': case 'D': return vax_md_atof (type, litP, sizeP); - /* IEEE floats. */ - case 'f': - prec = 2; - break; - - case 'd': - 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()"); + return ieee_md_atof (type, litP, sizeP, FALSE); } - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - *sizeP = prec * sizeof (LITTLENUM_TYPE); - - for (wordP = words + prec - 1; prec--;) - { - md_number_to_chars (litP, (long) (*wordP--), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return 0; } /* Take care of the target-specific command-line options. */ @@ -5129,6 +5630,14 @@ md_parse_option (int c, char *arg) case 'h': /* For gnu-c/vax compatibility. */ break; + + case OPTION_REPLACE: + alpha_flag_replace = 1; + break; + + case OPTION_NOREPLACE: + alpha_flag_replace = 0; + break; #endif case OPTION_RELAX: @@ -5168,8 +5677,9 @@ Alpha options:\n\ #ifdef OBJ_EVAX fputs (_("\ VMS options:\n\ --+ hash encode (don't truncate) names longer than 64 characters\n\ --H show new symbol after hash truncation\n"), +-+ encode (don't truncate) names longer than 64 characters\n\ +-H show new symbol after hash truncation\n\ +-replace/-noreplace enable or disable the optimization of procedure calls\n"), stream); #endif } @@ -5273,7 +5783,7 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg) #ifdef OBJ_ECOFF case BFD_RELOC_GPREL32: - assert (fixP->fx_subsy == alpha_gp_symbol); + gas_assert (fixP->fx_subsy == alpha_gp_symbol); fixP->fx_subsy = 0; /* FIXME: inherited this obliviousness of `value' -- why? */ md_number_to_chars (fixpos, -alpha_gp_value, 4); @@ -5334,6 +5844,79 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg) case BFD_RELOC_ALPHA_CODEADDR: return; +#ifdef OBJ_EVAX + case BFD_RELOC_ALPHA_NOP: + value -= (8 + 4); /* PC-relative, base is jsr+4. */ + + /* From B.4.5.2 of the OpenVMS Linker Utility Manual: + "Finally, the ETIR$C_STC_BSR command passes the same address + as ETIR$C_STC_NOP (so that they will fail or succeed together), + and the same test is done again." */ + if (S_GET_SEGMENT (fixP->fx_addsy) == undefined_section) + { + fixP->fx_addnumber = -value; + return; + } + + if ((abs (value) >> 2) & ~0xfffff) + goto done; + else + { + /* Change to a nop. */ + image = 0x47FF041F; + goto write_done; + } + + case BFD_RELOC_ALPHA_LDA: + /* fixup_segment sets fixP->fx_addsy to NULL when it can pre-compute + the value for an O_subtract. */ + if (fixP->fx_addsy + && S_GET_SEGMENT (fixP->fx_addsy) == undefined_section) + { + fixP->fx_addnumber = symbol_get_bfdsym (fixP->fx_subsy)->value; + return; + } + + if ((abs (value)) & ~0x7fff) + goto done; + else + { + /* Change to an lda. */ + image = 0x237B0000 | (value & 0xFFFF); + goto write_done; + } + + case BFD_RELOC_ALPHA_BSR: + case BFD_RELOC_ALPHA_BOH: + value -= 4; /* PC-relative, base is jsr+4. */ + + /* See comment in the BFD_RELOC_ALPHA_NOP case above. */ + if (S_GET_SEGMENT (fixP->fx_addsy) == undefined_section) + { + fixP->fx_addnumber = -value; + return; + } + + if ((abs (value) >> 2) & ~0xfffff) + { + /* Out of range. */ + if (fixP->fx_r_type == BFD_RELOC_ALPHA_BOH) + { + /* Add a hint. */ + image = bfd_getl32(fixpos); + image = (image & ~0x3FFF) | ((value >> 2) & 0x3FFF); + goto write_done; + } + goto done; + } + else + { + /* Change to a branch. */ + image = 0xD3400000 | ((value >> 2) & 0x1FFFFF); + goto write_done; + } +#endif + case BFD_RELOC_VTABLE_INHERIT: case BFD_RELOC_VTABLE_ENTRY: return; @@ -5346,7 +5929,7 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg) as_fatal (_("unhandled relocation type %s"), bfd_get_reloc_code_name (fixP->fx_r_type)); - assert (-(int) fixP->fx_r_type < (int) alpha_num_operands); + gas_assert (-(int) fixP->fx_r_type < (int) alpha_num_operands); operand = &alpha_operands[-(int) fixP->fx_r_type]; /* The rest of these fixups only exist internally during symbol @@ -5503,6 +6086,12 @@ alpha_force_relocation (fixS *f) case BFD_RELOC_ALPHA_TPREL_HI16: case BFD_RELOC_ALPHA_TPREL_LO16: case BFD_RELOC_ALPHA_TPREL16: +#ifdef OBJ_EVAX + case BFD_RELOC_ALPHA_NOP: + case BFD_RELOC_ALPHA_BSR: + case BFD_RELOC_ALPHA_LDA: + case BFD_RELOC_ALPHA_BOH: +#endif return 1; default: @@ -5542,6 +6131,7 @@ alpha_fix_adjustable (fixS *f) case BFD_RELOC_ALPHA_GPREL_HI16: case BFD_RELOC_ALPHA_GPREL_LO16: case BFD_RELOC_23_PCREL_S2: + case BFD_RELOC_16: case BFD_RELOC_32: case BFD_RELOC_64: case BFD_RELOC_ALPHA_HINT: @@ -5595,6 +6185,13 @@ alpha_fix_adjustable (fixS *f) return 1; } #endif +#ifdef OBJ_EVAX + case BFD_RELOC_ALPHA_NOP: + case BFD_RELOC_ALPHA_BSR: + case BFD_RELOC_ALPHA_LDA: + case BFD_RELOC_ALPHA_BOH: + return 1; +#endif default: return 1; @@ -5617,7 +6214,7 @@ tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED, /* Make sure none of our internal relocations make it this far. They'd better have been fully resolved by this point. */ - assert ((int) fixp->fx_r_type > 0); + gas_assert ((int) fixp->fx_r_type > 0); reloc->howto = bfd_reloc_type_lookup (stdoutput, fixp->fx_r_type); if (reloc->howto == NULL) @@ -5632,7 +6229,7 @@ tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED, as_fatal (_("internal error? cannot generate `%s' relocation"), bfd_get_reloc_code_name (fixp->fx_r_type)); - assert (!fixp->fx_pcrel == !reloc->howto->pc_relative); + gas_assert (!fixp->fx_pcrel == !reloc->howto->pc_relative); #ifdef OBJ_ECOFF if (fixp->fx_r_type == BFD_RELOC_ALPHA_LITERAL) @@ -5655,6 +6252,62 @@ tc_gen_reloc (asection *sec ATTRIBUTE_UNUSED, #endif } +#ifdef OBJ_EVAX + switch (fixp->fx_r_type) + { + struct evax_private_udata_struct *udata; + const char *pname; + int pname_len; + + case BFD_RELOC_ALPHA_LINKAGE: + reloc->addend = fixp->fx_addnumber; + break; + + case BFD_RELOC_ALPHA_NOP: + case BFD_RELOC_ALPHA_BSR: + case BFD_RELOC_ALPHA_LDA: + case BFD_RELOC_ALPHA_BOH: + pname = symbol_get_bfdsym (fixp->fx_addsy)->name; + + /* We need the non-suffixed name of the procedure. Beware that + the main symbol might be equated so look it up and take its name. */ + pname_len = strlen (pname); + if (pname_len > 4 && strcmp (pname + pname_len - 4, "..en") == 0) + { + symbolS *sym; + char *my_pname = xstrdup (pname); + my_pname [pname_len - 4] = 0; + sym = symbol_find (my_pname); + if (sym == NULL) + abort (); + while (symbol_equated_reloc_p (sym)) + { + symbolS *n = symbol_get_value_expression (sym)->X_add_symbol; + + /* We must avoid looping, as that can occur with a badly + written program. */ + if (n == sym) + break; + sym = n; + } + pname = symbol_get_bfdsym (sym)->name; + } + + udata = (struct evax_private_udata_struct *) + xmalloc (sizeof (struct evax_private_udata_struct)); + udata->enbsym = symbol_get_bfdsym (fixp->fx_addsy); + udata->bsym = symbol_get_bfdsym (fixp->tc_fix_data.info->psym); + udata->origname = (char *)pname; + udata->lkindex = ((struct evax_private_udata_struct *) + symbol_get_bfdsym (fixp->tc_fix_data.info->sym)->udata.p)->lkindex; + reloc->sym_ptr_ptr = (void *)udata; + reloc->addend = fixp->fx_addnumber; + + default: + break; + } +#endif + return reloc; } @@ -5709,5 +6362,4 @@ alpha_frob_file_before_adjust (void) /* The Alpha has support for some VAX floating point types, as well as for IEEE floating point. We consider IEEE to be the primary floating point format, and sneak in the VAX floating point support here. */ -#define md_atof vax_md_atof #include "config/atof-vax.c" diff --git a/gas/config/tc-alpha.h b/gas/config/tc-alpha.h index 3a5dcf8..284c1e4 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, 2006, 2007 + 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Ken Raeburn . @@ -69,9 +69,9 @@ extern valueT alpha_gp_value; #define md_operand(x) #ifdef OBJ_EVAX +#define TC_VALIDATE_FIX_SUB(FIX, SEG) 1 -/* This field keeps the symbols position in the link section. */ -#define OBJ_SYMFIELD_TYPE valueT +#define tc_canonicalize_symbol_name evax_shorten_name #define TC_CONS_FIX_NEW(FRAG,OFF,LEN,EXP) \ fix_new_exp (FRAG, OFF, (int)LEN, EXP, 0, \ @@ -81,7 +81,9 @@ extern valueT alpha_gp_value; : BFD_RELOC_ALPHA_LINKAGE); #endif -#ifndef VMS +#ifdef OBJ_EVAX +#define TC_IMPLICIT_LCOMM_ALIGNMENT(SIZE, P2VAR) (P2VAR) = 3 +#else #define TC_IMPLICIT_LCOMM_ALIGNMENT(size, align) \ do \ { \ @@ -121,9 +123,9 @@ extern void alpha_frob_file_before_adjust (void); #ifdef OBJ_ELF #define md_elf_section_letter alpha_elf_section_letter -extern int alpha_elf_section_letter (int, char **); +extern bfd_vma alpha_elf_section_letter (int, char **); #define md_elf_section_flags alpha_elf_section_flags -extern flagword alpha_elf_section_flags (flagword, int, int); +extern flagword alpha_elf_section_flags (flagword, bfd_vma, int); #endif /* Whether to add support for explicit !relocation_op!sequence_number. At the @@ -133,12 +135,14 @@ extern flagword alpha_elf_section_flags (flagword, int, int); #define RELOC_OP_P #endif +#ifndef OBJ_EVAX /* Before the relocations are written, reorder them, so that user supplied !lituse relocations follow the appropriate !literal relocations. Also convert the gas-internal relocations to the appropriate linker relocations. */ #define tc_frob_file_before_fix() alpha_before_fix () extern void alpha_before_fix (void); +#endif #ifdef OBJ_ELF #define md_end alpha_elf_md_end diff --git a/gas/config/tc-arc.c b/gas/config/tc-arc.c index 2bf1420..1348f5d 100644 --- a/gas/config/tc-arc.c +++ b/gas/config/tc-arc.c @@ -1,6 +1,6 @@ /* tc-arc.c -- Assembler for the ARC Copyright 1994, 1995, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, - 2006, 2007 Free Software Foundation, Inc. + 2006, 2007, 2009 Free Software Foundation, Inc. Contributed by Doug Evans (dje@cygnus.com). This file is part of GAS, the GNU Assembler. @@ -47,7 +47,7 @@ const struct syntax_classes { char *name; int len; - int class; + int s_class; } syntaxclass[] = { { "SYNTAX_3OP|OP1_MUST_BE_IMM", 26, SYNTAX_3OP|OP1_MUST_BE_IMM|SYNTAX_VALID }, @@ -191,7 +191,7 @@ md_begin (void) target_big_endian = byte_order == BIG_ENDIAN; if (!bfd_set_arch_mach (stdoutput, bfd_arch_arc, arc_mach_type)) - as_warn ("could not set architecture and machine"); + as_warn (_("could not set architecture and machine")); /* This call is necessary because we need to initialize `arc_operand_map' which may be needed before we see the first insn. */ @@ -209,10 +209,10 @@ init_opcode_tables (int mach) char *last; if ((arc_suffix_hash = hash_new ()) == NULL) - as_fatal ("virtual memory exhausted"); + as_fatal (_("virtual memory exhausted")); if (!bfd_set_arch_mach (stdoutput, bfd_arch_arc, mach)) - as_warn ("could not set architecture and machine"); + as_warn (_("could not set architecture and machine")); /* This initializes a few things in arc-opc.c that we need. This must be called before the various arc_xxx_supported fns. */ @@ -299,7 +299,7 @@ arc_insert_operand (arc_insn insn, errmsg = NULL; insn = (*operand->insert) (insn, operand, mods, reg, (long) val, &errmsg); if (errmsg != (const char *) NULL) - as_warn (errmsg); + as_warn ("%s", errmsg); } else insn |= (((long) val & ((1 << operand->bits) - 1)) @@ -429,7 +429,7 @@ arc_extoper (int opertype) if (*input_line_pointer != ',') { - as_bad ("expected comma after operand name"); + as_bad (_("expected comma after operand name")); ignore_rest_of_line (); free (name); return; @@ -440,7 +440,7 @@ arc_extoper (int opertype) if (number < 0) { - as_bad ("negative operand number %d", number); + as_bad (_("negative operand number %d"), number); ignore_rest_of_line (); free (name); return; @@ -452,7 +452,7 @@ arc_extoper (int opertype) if (*input_line_pointer != ',') { - as_bad ("expected comma after register-number"); + as_bad (_("expected comma after register-number")); ignore_rest_of_line (); free (name); return; @@ -477,7 +477,7 @@ arc_extoper (int opertype) { if (strncmp (mode, "w", 1)) { - as_bad ("invalid mode"); + as_bad (_("invalid mode")); ignore_rest_of_line (); free (name); return; @@ -494,7 +494,7 @@ arc_extoper (int opertype) { if (*input_line_pointer != ',') { - as_bad ("expected comma after register-mode"); + as_bad (_("expected comma after register-mode")); ignore_rest_of_line (); free (name); return; @@ -511,7 +511,7 @@ arc_extoper (int opertype) { if (strncmp (input_line_pointer, "can_shortcut", 12)) { - as_bad ("shortcut designator invalid"); + as_bad (_("shortcut designator invalid")); ignore_rest_of_line (); free (name); return; @@ -526,7 +526,7 @@ arc_extoper (int opertype) if ((opertype == 1) && number > 60) { - as_bad ("core register value (%d) too large", number); + as_bad (_("core register value (%d) too large"), number); ignore_rest_of_line (); free (name); return; @@ -534,7 +534,7 @@ arc_extoper (int opertype) if ((opertype == 0) && number > 31) { - as_bad ("condition code value (%d) too large", number); + as_bad (_("condition code value (%d) too large"), number); ignore_rest_of_line (); free (name); return; @@ -551,7 +551,7 @@ arc_extoper (int opertype) S_SET_VALUE (symbolP, (valueT) &ext_oper->operand); else { - as_bad ("attempt to override symbol: %s", name); + as_bad (_("attempt to override symbol: %s"), name); ignore_rest_of_line (); free (name); free (ext_oper); @@ -622,7 +622,7 @@ arc_extoper (int opertype) strcpy (p, name); break; default: - as_bad ("invalid opertype"); + as_bad (_("invalid opertype")); ignore_rest_of_line (); free (name); return; @@ -646,7 +646,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) int suffixcode = -1; int opcode, subopcode; int i; - int class = 0; + int s_class = 0; int name_len; struct arc_opcode *ext_op; @@ -667,7 +667,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) if (*input_line_pointer != ',') { - as_bad ("expected comma after operand name"); + as_bad (_("expected comma after operand name")); ignore_rest_of_line (); return; } @@ -679,7 +679,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) if (*input_line_pointer != ',') { - as_bad ("expected comma after opcode"); + as_bad (_("expected comma after opcode")); ignore_rest_of_line (); return; } @@ -689,7 +689,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) if (subopcode < 0) { - as_bad ("negative subopcode %d", subopcode); + as_bad (_("negative subopcode %d"), subopcode); ignore_rest_of_line (); return; } @@ -698,7 +698,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) { if (3 != opcode) { - as_bad ("subcode value found when opcode not equal 0x03"); + as_bad (_("subcode value found when opcode not equal 0x03")); ignore_rest_of_line (); return; } @@ -706,7 +706,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) { if (subopcode < 0x09 || subopcode == 0x3f) { - as_bad ("invalid subopcode %d", subopcode); + as_bad (_("invalid subopcode %d"), subopcode); ignore_rest_of_line (); return; } @@ -717,7 +717,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) if (*input_line_pointer != ',') { - as_bad ("expected comma after subopcode"); + as_bad (_("expected comma after subopcode")); ignore_rest_of_line (); return; } @@ -736,7 +736,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) if (-1 == suffixcode) { - as_bad ("invalid suffix class"); + as_bad (_("invalid suffix class")); ignore_rest_of_line (); return; } @@ -745,7 +745,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) if (*input_line_pointer != ',') { - as_bad ("expected comma after suffix class"); + as_bad (_("expected comma after suffix class")); ignore_rest_of_line (); return; } @@ -756,22 +756,22 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) { if (!strncmp (syntaxclass[i].name,input_line_pointer, syntaxclass[i].len)) { - class = syntaxclass[i].class; + s_class = syntaxclass[i].s_class; input_line_pointer += syntaxclass[i].len; break; } } - if (0 == (SYNTAX_VALID & class)) + if (0 == (SYNTAX_VALID & s_class)) { - as_bad ("invalid syntax class"); + as_bad (_("invalid syntax class")); ignore_rest_of_line (); return; } - if ((0x3 == opcode) & (class & SYNTAX_3OP)) + if ((0x3 == opcode) & (s_class & SYNTAX_3OP)) { - as_bad ("opcode 0x3 and SYNTAX_3OP invalid"); + as_bad (_("opcode 0x3 and SYNTAX_3OP invalid")); ignore_rest_of_line (); return; } @@ -791,13 +791,13 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) strcat (syntax, " "); break; default: - as_bad ("unknown suffix class"); + as_bad (_("unknown suffix class")); ignore_rest_of_line (); return; break; }; - strcat (syntax, ((opcode == 0x3) ? "%a,%b" : ((class & SYNTAX_3OP) ? "%a,%b,%c" : "%b,%c"))); + strcat (syntax, ((opcode == 0x3) ? "%a,%b" : ((s_class & SYNTAX_3OP) ? "%a,%b,%c" : "%b,%c"))); if (suffixcode < 2) strcat (syntax, "%F"); strcat (syntax, "%S%L"); @@ -807,7 +807,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) ext_op->mask = I (-1) | ((0x3 == opcode) ? C (-1) : 0); ext_op->value = I (opcode) | ((0x3 == opcode) ? C (subopcode) : 0); - ext_op->flags = class; + ext_op->flags = s_class; ext_op->next_asm = arc_ext_opcodes; ext_op->next_dis = arc_ext_opcodes; arc_ext_opcodes = ext_op; @@ -829,7 +829,7 @@ arc_extinst (int ignore ATTRIBUTE_UNUSED) p = frag_more (1); *p = subopcode; p = frag_more (1); - *p = (class & (OP1_MUST_BE_IMM | OP1_IMM_IMPLIED) ? IGNORE_FIRST_OPD : 0); + *p = (s_class & (OP1_MUST_BE_IMM | OP1_IMM_IMPLIED) ? IGNORE_FIRST_OPD : 0); p = frag_more (name_len); strncpy (p, syntax, name_len); p = frag_more (1); @@ -858,7 +858,7 @@ arc_common (int localScope) if (*input_line_pointer != ',') { - as_bad ("expected comma after symbol name"); + as_bad (_("expected comma after symbol name")); ignore_rest_of_line (); return; } @@ -868,7 +868,7 @@ arc_common (int localScope) if (size < 0) { - as_bad ("negative symbol length"); + as_bad (_("negative symbol length")); ignore_rest_of_line (); return; } @@ -879,17 +879,17 @@ arc_common (int localScope) if (S_IS_DEFINED (symbolP) && ! S_IS_COMMON (symbolP)) { - as_bad ("ignoring attempt to re-define symbol"); + as_bad (_("ignoring attempt to re-define symbol")); ignore_rest_of_line (); return; } if (((int) S_GET_VALUE (symbolP) != 0) \ && ((int) S_GET_VALUE (symbolP) != size)) { - as_warn ("length of symbol \"%s\" already %ld, ignoring %d", + as_warn (_("length of symbol \"%s\" already %ld, ignoring %d"), S_GET_NAME (symbolP), (long) S_GET_VALUE (symbolP), size); } - assert (symbolP->sy_frag == &zero_address_frag); + gas_assert (symbolP->sy_frag == &zero_address_frag); /* Now parse the alignment field. This field is optional for local and global symbols. Default alignment is zero. */ @@ -900,7 +900,7 @@ arc_common (int localScope) if (align < 0) { align = 0; - as_warn ("assuming symbol alignment of zero"); + as_warn (_("assuming symbol alignment of zero")); } } else @@ -967,7 +967,7 @@ arc_option (int ignore ATTRIBUTE_UNUSED) /* If an instruction has already been seen, it's too late. */ if (cpu_tables_init_p) { - as_bad ("\".option\" directive must appear before any instructions"); + as_bad (_("\".option\" directive must appear before any instructions")); ignore_rest_of_line (); return; } @@ -977,7 +977,7 @@ arc_option (int ignore ATTRIBUTE_UNUSED) if (mach_type_specified_p && mach != arc_mach_type) { - as_bad ("\".option\" directive conflicts with initial definition"); + as_bad (_("\".option\" directive conflicts with initial definition")); ignore_rest_of_line (); return; } @@ -985,64 +985,24 @@ arc_option (int ignore ATTRIBUTE_UNUSED) { /* The cpu may have been selected on the command line. */ if (mach != arc_mach_type) - as_warn ("\".option\" directive overrides command-line (default) value"); + as_warn (_("\".option\" directive overrides command-line (default) value")); arc_mach_type = mach; if (!bfd_set_arch_mach (stdoutput, bfd_arch_arc, mach)) - as_fatal ("could not set architecture and machine"); + as_fatal (_("could not set architecture and machine")); mach_type_specified_p = 1; } demand_empty_rest_of_line (); return; bad_cpu: - as_bad ("invalid identifier for \".option\""); + as_bad (_("invalid identifier for \".option\"")); ignore_rest_of_line (); } -/* 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 prec; - LITTLENUM_TYPE words[MAX_LITTLENUMS]; - LITTLENUM_TYPE *wordP; - char *t; - - switch (type) - { - case 'f': - case 'F': - prec = 2; - break; - - case 'd': - 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 * sizeof (LITTLENUM_TYPE); - for (wordP = words; prec--;) - { - md_number_to_chars (litP, (valueT) (*wordP++), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return NULL; + return ieee_md_atof (type, litP, sizeP, TRUE); } /* Write a value out to the object file, using the appropriate @@ -1073,7 +1033,7 @@ int md_estimate_size_before_relax (fragS *fragp ATTRIBUTE_UNUSED, asection *seg ATTRIBUTE_UNUSED) { - as_fatal (_("md_estimate_size_before_relax\n")); + as_fatal (_("relaxation not supported\n")); return 1; } @@ -1084,7 +1044,7 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, asection *sec ATTRIBUTE_UNUSED, fragS *fragp ATTRIBUTE_UNUSED) { - as_fatal (_("md_convert_frag\n")); + abort (); } static void @@ -1117,7 +1077,7 @@ arc_code_symbol (expressionS *expressionP) expressionP->X_op_symbol = make_expr_symbol (&two); } else - as_bad ("expression too complex code symbol"); + as_bad (_("expression too complex code symbol")); } /* Parse an operand that is machine-specific. @@ -1144,7 +1104,7 @@ md_operand (expressionS *expressionP) expression (expressionP); if (*input_line_pointer != ')') { - as_bad ("missing ')' in %%-op"); + as_bad (_("missing ')' in %%-op")); return; } ++input_line_pointer; @@ -1323,21 +1283,21 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg) limm values. */ if (operand->fmt == 'B') { - assert ((operand->flags & ARC_OPERAND_RELATIVE_BRANCH) != 0 + gas_assert ((operand->flags & ARC_OPERAND_RELATIVE_BRANCH) != 0 && operand->bits == 20 && operand->shift == 7); fixP->fx_r_type = BFD_RELOC_ARC_B22_PCREL; } else if (operand->fmt == 'J') { - assert ((operand->flags & ARC_OPERAND_ABSOLUTE_BRANCH) != 0 + gas_assert ((operand->flags & ARC_OPERAND_ABSOLUTE_BRANCH) != 0 && operand->bits == 24 && operand->shift == 32); fixP->fx_r_type = BFD_RELOC_ARC_B26; } else if (operand->fmt == 'L') { - assert ((operand->flags & ARC_OPERAND_LIMM) != 0 + gas_assert ((operand->flags & ARC_OPERAND_LIMM) != 0 && operand->bits == 32 && operand->shift == 32); fixP->fx_r_type = BFD_RELOC_32; @@ -1345,7 +1305,7 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg) else { as_bad_where (fixP->fx_file, fixP->fx_line, - "unresolved expression that must be resolved"); + _("unresolved expression that must be resolved")); fixP->fx_done = 1; return; } @@ -1399,13 +1359,13 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, if (reloc->howto == (reloc_howto_type *) NULL) { as_bad_where (fixP->fx_file, fixP->fx_line, - "internal error: can't export reloc type %d (`%s')", + _("internal error: can't export reloc type %d (`%s')"), fixP->fx_r_type, bfd_get_reloc_code_name (fixP->fx_r_type)); return NULL; } - assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); + gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); /* Set addend to account for PC being advanced one insn before the target address is computed. */ @@ -1531,7 +1491,7 @@ md_assemble (char *str) } operand = arc_operands + arc_operand_map[(int) *syn]; if (operand->fmt == 0) - as_fatal ("unknown syntax format character `%c'", *syn); + as_fatal (_("unknown syntax format character `%c'"), *syn); if (operand->flags & ARC_OPERAND_FAKE) { @@ -1544,11 +1504,11 @@ md_assemble (char *str) last_errmsg = errmsg; if (operand->flags & ARC_OPERAND_ERROR) { - as_bad (errmsg); + as_bad ("%s", errmsg); return; } else if (operand->flags & ARC_OPERAND_WARN) - as_warn (errmsg); + as_warn ("%s", errmsg); break; } if (limm_reloc_p @@ -1669,7 +1629,7 @@ md_assemble (char *str) else { if (num_suffixes == MAX_SUFFIXES) - as_bad ("too many suffixes"); + as_bad (_("too many suffixes")); else insn_suffixes[num_suffixes++] = suffix; } @@ -1699,16 +1659,16 @@ md_assemble (char *str) input_line_pointer = hold; if (exp.X_op == O_illegal) - as_bad ("illegal operand"); + as_bad (_("illegal operand")); else if (exp.X_op == O_absent) - as_bad ("missing operand"); + as_bad (_("missing operand")); else if (exp.X_op == O_constant) value = exp.X_add_number; else if (exp.X_op == O_register) reg = (struct arc_operand_value *) exp.X_add_number; #define IS_REG_DEST_OPERAND(o) ((o) == 'a') else if (IS_REG_DEST_OPERAND (*syn)) - as_bad ("symbol as destination register"); + as_bad (_("symbol as destination register")); else { if (!strncmp (str, "@h30", 4)) @@ -1718,7 +1678,7 @@ md_assemble (char *str) } /* We need to generate a fixup for this expression. */ if (fc >= MAX_FIXUPS) - as_fatal ("too many fixups"); + as_fatal (_("too many fixups")); fixups[fc].exp = exp; /* We don't support shimm relocs. break here to force the assembler to output a limm. */ @@ -1761,11 +1721,11 @@ md_assemble (char *str) last_errmsg = errmsg; if (operand->flags & ARC_OPERAND_ERROR) { - as_bad (errmsg); + as_bad ("%s", errmsg); return; } else if (operand->flags & ARC_OPERAND_WARN) - as_warn (errmsg); + as_warn ("%s", errmsg); break; } } @@ -1793,7 +1753,7 @@ md_assemble (char *str) ++str; if (!is_end_of_line[(unsigned char) *str]) - as_bad ("junk at end of line: `%s'", str); + as_bad (_("junk at end of line: `%s'"), str); /* Is there a limm value? */ limm_p = arc_opcode_limm_p (&limm); @@ -1832,10 +1792,10 @@ md_assemble (char *str) be legal, but let's warn the user anyway. Ditto for 8 byte jumps with delay slots. */ if (in_delay_slot_p && limm_p) - as_warn ("8 byte instruction in delay slot"); + as_warn (_("8 byte instruction in delay slot")); if (delay_slot_type != ARC_DELAY_NONE && limm_p && arc_insn_not_jl (insn)) /* except for jl addr */ - as_warn ("8 byte jump instruction with delay slot"); + as_warn (_("8 byte jump instruction with delay slot")); in_delay_slot_p = (delay_slot_type != ARC_DELAY_NONE) && !limm_p; /* Warn when a conditional branch immediately follows a set of @@ -1843,7 +1803,7 @@ md_assemble (char *str) insn that sets the condition codes uses a limm. */ if (cond_branch_p && conditional != 0 /* 0 = "always" */ && prev_insn_needs_cc_nop_p && arc_mach_type == bfd_mach_arc_5) - as_warn ("conditional branch follows set of flags"); + as_warn (_("conditional branch follows set of flags")); prev_insn_needs_cc_nop_p = /* FIXME: ??? not required: (delay_slot_type != ARC_DELAY_NONE) && */ @@ -1927,7 +1887,7 @@ md_assemble (char *str) } if (NULL == last_errmsg) - as_bad ("bad instruction `%s'", start); + as_bad (_("bad instruction `%s'"), start); else - as_bad (last_errmsg); + as_bad ("%s", last_errmsg); } diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 7e42aa9..5f67171 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, 2006, 2007 + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) Modified by David Taylor (dtaylor@armltd.co.uk) @@ -25,10 +25,10 @@ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ +#include "as.h" #include #include #define NO_RELOC 0 -#include "as.h" #include "safe-ctype.h" #include "subsegs.h" #include "obstack.h" @@ -42,8 +42,6 @@ #include "dwarf2dbg.h" -#define WARN_DEPRECATED 1 - #ifdef OBJ_ELF /* Must be at least the size of the largest unwind opcode (currently two). */ #define ARM_OPCODE_CHUNK_SIZE 8 @@ -79,11 +77,6 @@ static struct unsigned sp_restored:1; } unwind; -/* Bit N indicates that an R_ARM_NONE relocation has been output for - __aeabi_unwind_cpp_prN already if set. This enables dependencies to be - emitted only once per section, to save unnecessary bloat. */ -static unsigned int marked_pr_dependency = 0; - #endif /* OBJ_ELF */ /* Results from operand parsing worker functions. */ @@ -143,6 +136,10 @@ static int atpcs = FALSE; static int support_interwork = FALSE; static int uses_apcs_float = FALSE; static int pic_code = FALSE; +static int fix_v4bx = FALSE; +/* Warn on using deprecated features. */ +static int warn_on_deprecated = TRUE; + /* Variables that we set while parsing command-line options. Once all options have been read we re-process these values to set the real @@ -191,11 +188,14 @@ static const arm_feature_set arm_ext_v6k = ARM_FEATURE (ARM_EXT_V6K, 0); static const arm_feature_set arm_ext_v6z = ARM_FEATURE (ARM_EXT_V6Z, 0); static const arm_feature_set arm_ext_v6t2 = ARM_FEATURE (ARM_EXT_V6T2, 0); static const arm_feature_set arm_ext_v6_notm = ARM_FEATURE (ARM_EXT_V6_NOTM, 0); +static const arm_feature_set arm_ext_barrier = ARM_FEATURE (ARM_EXT_BARRIER, 0); +static const arm_feature_set arm_ext_msr = ARM_FEATURE (ARM_EXT_THUMB_MSR, 0); static const arm_feature_set arm_ext_div = ARM_FEATURE (ARM_EXT_DIV, 0); static const arm_feature_set arm_ext_v7 = ARM_FEATURE (ARM_EXT_V7, 0); static const arm_feature_set arm_ext_v7a = ARM_FEATURE (ARM_EXT_V7A, 0); static const arm_feature_set arm_ext_v7r = ARM_FEATURE (ARM_EXT_V7R, 0); -static const arm_feature_set arm_ext_v7m = ARM_FEATURE (ARM_EXT_V7M, 0); +static const arm_feature_set arm_ext_m = + ARM_FEATURE (ARM_EXT_V6M | ARM_EXT_V7M, 0); static const arm_feature_set arm_arch_any = ARM_ANY; static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1); @@ -217,9 +217,12 @@ static const arm_feature_set 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_vfp_ext_d32 = + ARM_FEATURE (0, FPU_VFP_EXT_D32); 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 const arm_feature_set fpu_neon_fp16 = ARM_FEATURE (0, FPU_NEON_FP16); static int mfloat_abi_opt = -1; /* Record user cpu selection for object attributes. */ @@ -233,8 +236,10 @@ static int meabi_flags = EABI_DEFAULT; static int meabi_flags = EF_ARM_EABI_UNKNOWN; # endif +static int attributes_set_explicitly[NUM_KNOWN_OBJ_ATTRIBUTES]; + bfd_boolean -arm_is_eabi(void) +arm_is_eabi (void) { return (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4); } @@ -250,6 +255,20 @@ symbolS * GOT_symbol; 2: assemble for Thumb even though target CPU does not support thumb instructions. */ static int thumb_mode = 0; +/* A value distinct from the possible values for thumb_mode that we + can use to record whether thumb_mode has been copied into the + tc_frag_data field of a frag. */ +#define MODE_RECORDED (1 << 4) + +/* Specifies the intrinsic IT insn behavior mode. */ +enum implicit_it_mode +{ + IMPLICIT_IT_MODE_NEVER = 0x00, + IMPLICIT_IT_MODE_ARM = 0x01, + IMPLICIT_IT_MODE_THUMB = 0x02, + IMPLICIT_IT_MODE_ALWAYS = (IMPLICIT_IT_MODE_ARM | IMPLICIT_IT_MODE_THUMB) +}; +static int implicit_it_mode = IMPLICIT_IT_MODE_ARM; /* If unified_syntax is true, we are processing the new unified ARM/Thumb syntax. Important differences from the old ARM mode: @@ -301,6 +320,18 @@ struct neon_type unsigned elems; }; +enum it_instruction_type +{ + OUTSIDE_IT_INSN, + INSIDE_IT_INSN, + INSIDE_IT_LAST_INSN, + IF_INSIDE_IT_LAST_INSN, /* Either outside or inside; + if inside, should be the last one. */ + NEUTRAL_IT_INSN, /* This could be either inside or outside, + i.e. BKPT and NOP. */ + IT_INSN /* The IT insn has been parsed. */ +}; + struct arm_it { const char * error; @@ -323,6 +354,8 @@ struct arm_it int pc_rel; } reloc; + enum it_instruction_type it_insn_type; + struct { unsigned reg; @@ -382,22 +415,22 @@ LITTLENUM_TYPE fp_values[NUM_FLOAT_VALS][MAX_LITTLENUMS]; struct asm_cond { - const char * template; - unsigned long value; + const char * template_name; + unsigned long value; }; #define COND_ALWAYS 0xE struct asm_psr { - const char *template; - unsigned long field; + const char * template_name; + unsigned long field; }; struct asm_barrier_opt { - const char *template; - unsigned long value; + const char * template_name; + unsigned long value; }; /* The bit that distinguishes CPSR and SPSR. */ @@ -411,8 +444,8 @@ struct asm_barrier_opt struct reloc_entry { - char *name; - bfd_reloc_code_real_type reloc; + char * name; + bfd_reloc_code_real_type reloc; }; enum vfp_reg_pos @@ -432,9 +465,9 @@ enum vfp_ldstm_type struct neon_typed_alias { - unsigned char defined; - unsigned char index; - struct neon_type_el eltype; + unsigned char defined; + unsigned char index; + struct neon_type_el eltype; }; /* ARM register categories. This includes coprocessor numbers and various @@ -470,15 +503,15 @@ enum arm_reg_type 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; - struct neon_typed_alias *neon; + 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. */ -const char *const reg_expected_msgs[] = +const char * const reg_expected_msgs[] = { N_("ARM register expected"), N_("bad or missing co-processor number"), @@ -515,7 +548,7 @@ const char *const reg_expected_msgs[] = struct asm_opcode { /* Basic string to match. */ - const char *template; + const char * template_name; /* Parameters to instruction. */ unsigned char operands[8]; @@ -530,8 +563,8 @@ struct asm_opcode unsigned int tvalue; /* Which architecture variant provides this instruction. */ - const arm_feature_set *avariant; - const arm_feature_set *tvariant; + const arm_feature_set * avariant; + const arm_feature_set * tvariant; /* Function to call to encode instruction in ARM format. */ void (* aencode) (void); @@ -650,6 +683,7 @@ struct asm_opcode #define THUMB2_LOAD_BIT 0x00100000 #define BAD_ARGS _("bad arguments to instruction") +#define BAD_SP _("r13 not allowed here") #define BAD_PC _("r15 not allowed here") #define BAD_COND _("instruction cannot be conditional") #define BAD_OVERLAP _("registers may not be the same") @@ -659,15 +693,19 @@ struct asm_opcode #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; -static struct hash_control *arm_shift_hsh; -static struct hash_control *arm_psr_hsh; -static struct hash_control *arm_v7m_psr_hsh; -static struct hash_control *arm_reg_hsh; -static struct hash_control *arm_reloc_hsh; -static struct hash_control *arm_barrier_opt_hsh; +#define BAD_OUT_IT _("thumb conditional instruction should be in IT block") +#define BAD_IT_COND _("incorrect condition in IT block") +#define BAD_IT_IT _("IT falling in the range of a previous IT block") +#define MISSING_FNSTART _("missing .fnstart before unwinding directive") + +static struct hash_control * arm_ops_hsh; +static struct hash_control * arm_cond_hsh; +static struct hash_control * arm_shift_hsh; +static struct hash_control * arm_psr_hsh; +static struct hash_control * arm_v7m_psr_hsh; +static struct hash_control * arm_reg_hsh; +static struct hash_control * arm_reloc_hsh; +static struct hash_control * arm_barrier_opt_hsh; /* Stuff needed to resolve the label ambiguity As: @@ -676,35 +714,83 @@ static struct hash_control *arm_barrier_opt_hsh; may differ from: ... label: - -*/ + */ symbolS * last_label_seen; static int label_is_thumb_function_name = FALSE; - + /* Literal pool structure. Held on a per-section and per-sub-section basis. */ #define MAX_LITERAL_POOL_SIZE 1024 typedef struct literal_pool { - expressionS literals [MAX_LITERAL_POOL_SIZE]; - unsigned int next_free_entry; - unsigned int id; - symbolS * symbol; - segT section; - subsegT sub_section; - struct literal_pool * next; + expressionS literals [MAX_LITERAL_POOL_SIZE]; + unsigned int next_free_entry; + unsigned int id; + symbolS * symbol; + segT section; + subsegT sub_section; + struct literal_pool * next; } literal_pool; /* Pointer to a linked list of literal pools. */ literal_pool * list_of_pools = NULL; -/* State variables for IT block handling. */ -static bfd_boolean current_it_mask = 0; -static int current_cc; +#ifdef OBJ_ELF +# define now_it seg_info (now_seg)->tc_segment_info_data.current_it +#else +static struct current_it now_it; +#endif + +static inline int +now_it_compatible (int cond) +{ + return (cond & ~1) == (now_it.cc & ~1); +} + +static inline int +conditional_insn (void) +{ + return inst.cond != COND_ALWAYS; +} + +static int in_it_block (void); + +static int handle_it_state (void); + +static void force_automatic_it_block_close (void); + +static void it_fsm_post_encode (void); + +#define set_it_insn_type(type) \ + do \ + { \ + inst.it_insn_type = type; \ + if (handle_it_state () == FAIL) \ + return; \ + } \ + while (0) + +#define set_it_insn_type_nonvoid(type, failret) \ + do \ + { \ + inst.it_insn_type = type; \ + if (handle_it_state () == FAIL) \ + return failret; \ + } \ + while(0) + +#define set_it_insn_type_last() \ + do \ + { \ + if (inst.cond == COND_ALWAYS) \ + set_it_insn_type (IF_INSIDE_IT_LAST_INSN); \ + else \ + set_it_insn_type (INSIDE_IT_LAST_INSN); \ + } \ + while (0) - /* Pure syntax. */ /* This array holds the chars that always start a comment. If the @@ -751,6 +837,7 @@ skip_past_char (char ** str, char c) else return FAIL; } + #define skip_past_comma(str) skip_past_char (str, ',') /* Arithmetic expressions (possibly involving symbols). */ @@ -821,13 +908,14 @@ my_get_expression (expressionS * ep, char ** str, int prefix_mode) seg = expression (ep); in_my_get_expression = 0; - if (ep->X_op == O_illegal) + if (ep->X_op == O_illegal || ep->X_op == O_absent) { - /* We found a bad expression in md_operand(). */ + /* We found a bad or missing expression in md_operand(). */ *str = input_line_pointer; input_line_pointer = save_in; if (inst.error == NULL) - inst.error = _("bad expression"); + inst.error = (ep->X_op == O_absent + ? _("missing expression") :_("bad expression")); return 1; } @@ -906,30 +994,30 @@ md_atof (int type, char * litP, int * sizeP) case 'x': case 'X': - prec = 6; + prec = 5; break; case 'p': case 'P': - prec = 6; + prec = 5; break; default: *sizeP = 0; - return _("bad call to MD_ATOF()"); + return _("Unrecognized or unsupported floating point constant"); } t = atof_ieee (input_line_pointer, type, words); if (t) input_line_pointer = t; - *sizeP = prec * 2; + *sizeP = prec * sizeof (LITTLENUM_TYPE); if (target_big_endian) { for (i = 0; i < prec; i++) { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; + md_number_to_chars (litP, (valueT) words[i], sizeof (LITTLENUM_TYPE)); + litP += sizeof (LITTLENUM_TYPE); } } else @@ -937,21 +1025,23 @@ md_atof (int type, char * litP, int * sizeP) if (ARM_CPU_HAS_FEATURE (cpu_variant, fpu_endian_pure)) for (i = prec - 1; i >= 0; i--) { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; + md_number_to_chars (litP, (valueT) words[i], sizeof (LITTLENUM_TYPE)); + litP += sizeof (LITTLENUM_TYPE); } else /* For a 4 byte float the order of elements in `words' is 1 0. For an 8 byte float the order is 1 0 3 2. */ 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; + md_number_to_chars (litP, (valueT) words[i + 1], + sizeof (LITTLENUM_TYPE)); + md_number_to_chars (litP + sizeof (LITTLENUM_TYPE), + (valueT) words[i], sizeof (LITTLENUM_TYPE)); + litP += 2 * sizeof (LITTLENUM_TYPE); } } - return 0; + return NULL; } /* We handle all bad expressions here, so that we can report the faulty @@ -1223,9 +1313,9 @@ parse_neon_operand_type (struct neon_type_el *vectype, char **ccp) } else return FAIL; - + *ccp = str; - + return SUCCESS; } @@ -1284,7 +1374,7 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type, if (reg->neon) atype = *reg->neon; - + if (parse_neon_operand_type (&parsetype, &str) == SUCCESS) { if ((atype.defined & NTA_HASTYPE) != 0) @@ -1295,7 +1385,7 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type, atype.defined |= NTA_HASTYPE; atype.eltype = parsetype; } - + if (skip_past_char (&str, '[') == SUCCESS) { if (type != REG_TYPE_VFD) @@ -1303,7 +1393,7 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type, first_error (_("only D registers may be indexed")); return FAIL; } - + if ((atype.defined & NTA_HASINDEX) != 0) { first_error (_("can't change index for operand")); @@ -1332,15 +1422,15 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type, atype.index = exp.X_add_number; } } - + if (typeinfo) *typeinfo = atype; - + if (rtype) *rtype = type; - + *ccp = str; - + return reg->number; } @@ -1349,8 +1439,7 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type, 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. -*/ + This function will fault on encountering a scalar. */ static int arm_typed_reg_parse (char **ccp, enum arm_reg_type type, @@ -1391,12 +1480,12 @@ 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")); @@ -1407,16 +1496,17 @@ parse_scalar (char **ccp, int elsize, struct neon_type_el *type) 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) { @@ -1592,11 +1682,11 @@ parse_vfp_reg_list (char **ccp, unsigned int *pbase, enum reg_list_els etype) regtype = REG_TYPE_VFS; max_regs = 32; break; - + case REGLIST_VFP_D: regtype = REG_TYPE_VFD; break; - + case REGLIST_NEON_D: regtype = REG_TYPE_NDQ; break; @@ -1604,16 +1694,16 @@ parse_vfp_reg_list (char **ccp, unsigned int *pbase, enum reg_list_els etype) if (etype != REGLIST_VFP_S) { - /* VFPv3 allows 32 D registers. */ - if (ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_v3)) + /* VFPv3 allows 32 D registers, except for the VFPv3-D16 variant. */ + if (ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_d32)) { max_regs = 32; if (thumb_mode) ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used, - fpu_vfp_ext_v3); + fpu_vfp_ext_d32); else ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used, - fpu_vfp_ext_v3); + fpu_vfp_ext_d32); } else max_regs = 16; @@ -1632,13 +1722,13 @@ parse_vfp_reg_list (char **ccp, unsigned int *pbase, enum reg_list_els etype) 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. */ if (regtype == REG_TYPE_NQ) { @@ -1733,28 +1823,28 @@ parse_vfp_reg_list (char **ccp, unsigned int *pbase, enum reg_list_els etype) /* True if two alias types are the same. */ -static int +static bfd_boolean neon_alias_types_same (struct neon_typed_alias *a, struct neon_typed_alias *b) { if (!a && !b) - return 1; - + return TRUE; + if (!a || !b) - return 0; + return FALSE; if (a->defined != b->defined) - return 0; - + return FALSE; + if ((a->defined & NTA_HASTYPE) != 0 && (a->eltype.type != b->eltype.type || a->eltype.size != b->eltype.size)) - return 0; + return FALSE; if ((a->defined & NTA_HASINDEX) != 0 && (a->index != b->index)) - return 0; - - return 1; + return FALSE; + + return TRUE; } /* Parse element/structure lists for Neon VLD and VST instructions. @@ -1781,13 +1871,13 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, 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"; + 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; @@ -1798,7 +1888,7 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, first_error (_(reg_expected_msgs[rtype])); return FAIL; } - + if (base_reg == -1) { base_reg = getreg; @@ -1824,12 +1914,12 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, return FAIL; } - if (!neon_alias_types_same (&atype, &firsttype)) + 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] == '-') @@ -1857,7 +1947,7 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, first_error (_(reg_expected_msgs[rtype])); return FAIL; } - if (!neon_alias_types_same (&htype, &firsttype)) + if (! neon_alias_types_same (&htype, &firsttype)) { first_error (_(type_error)); return FAIL; @@ -1865,14 +1955,14 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, 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) @@ -1893,11 +1983,11 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, 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)) @@ -1911,7 +2001,7 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, first_error (_("expected }")); return FAIL; } - + if (reg_incr == -1) reg_incr = 1; @@ -1920,7 +2010,7 @@ parse_neon_el_struct_list (char **str, unsigned *pbase, *pbase = base_reg; *str = ptr; - + return lane | ((reg_incr - 1) << 4) | ((count - 1) << 5); } @@ -1958,35 +2048,35 @@ parse_reloc (char **str) static struct reg_entry * insert_reg_alias (char *str, int number, int type) { - struct reg_entry *new; + struct reg_entry *new_reg; const char *name; - if ((new = hash_find (arm_reg_hsh, str)) != 0) + if ((new_reg = (struct reg_entry *) hash_find (arm_reg_hsh, str)) != 0) { - if (new->builtin) + if (new_reg->builtin) as_warn (_("ignoring attempt to redefine built-in register '%s'"), str); /* Only warn about a redefinition if it's not defined as the same register. */ - else if (new->number != number || new->type != type) + else if (new_reg->number != number || new_reg->type != type) as_warn (_("ignoring redefinition of register alias '%s'"), str); return NULL; } name = xstrdup (str); - new = xmalloc (sizeof (struct reg_entry)); + new_reg = (struct reg_entry *) xmalloc (sizeof (struct reg_entry)); - new->name = name; - new->number = number; - new->type = type; - new->builtin = FALSE; - new->neon = NULL; + new_reg->name = name; + new_reg->number = number; + new_reg->type = type; + new_reg->builtin = FALSE; + new_reg->neon = NULL; - if (hash_insert (arm_reg_hsh, name, (PTR) new)) + if (hash_insert (arm_reg_hsh, name, (void *) new_reg)) abort (); - - return new; + + return new_reg; } static void @@ -1994,13 +2084,13 @@ 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)); @@ -2070,7 +2160,7 @@ create_register_alias (char * newname, char *p) foo .req r0 Foo .req r1 The second .req creates the "Foo" alias but then fails to create - the artifical FOO alias because it has already been created by the + the artificial FOO alias because it has already been created by the first .req. */ if (insert_reg_alias (nbuf, old->number, old->type) == NULL) return TRUE; @@ -2094,10 +2184,9 @@ create_register_alias (char * newname, char *p) 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 -*/ + vadd d0.s32, d1.s32, d2.s32 */ -static int +static bfd_boolean create_neon_reg_alias (char *newname, char *p) { enum arm_reg_type basetype; @@ -2107,32 +2196,32 @@ create_neon_reg_alias (char *newname, char *p) 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; - + return FALSE; + p += 5; - + if (*p == '\0') - return 0; - + return FALSE; + basereg = arm_reg_parse_multi (&p); if (basereg && basereg->type != basetype) { as_bad (_("bad type for register")); - return 0; + return FALSE; } if (basereg == NULL) @@ -2143,7 +2232,7 @@ create_neon_reg_alias (char *newname, char *p) if (exp.X_op != O_constant) { as_bad (_("expression must be constant")); - return 0; + return FALSE; } basereg = &mybasereg; basereg->number = (basetype == REG_TYPE_NQ) ? exp.X_add_number * 2 @@ -2160,44 +2249,44 @@ create_neon_reg_alias (char *newname, char *p) if (typeinfo.defined & NTA_HASTYPE) { as_bad (_("can't redefine the type of a register alias")); - return 0; + return FALSE; } - + typeinfo.defined |= NTA_HASTYPE; if (ntype.elems != 1) { as_bad (_("you must specify a single type only")); - return 0; + return FALSE; } 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; + return FALSE; } - + my_get_expression (&exp, &p, GE_NO_PREFIX); - + if (exp.X_op != O_constant) { as_bad (_("scalar index must be constant")); - return 0; + return FALSE; } - + typeinfo.defined |= NTA_HASINDEX; typeinfo.index = exp.X_add_number; - + if (skip_past_char (&p, ']') == FAIL) { as_bad (_("expecting ]")); - return 0; + return FALSE; } } @@ -2205,31 +2294,32 @@ create_neon_reg_alias (char *newname, char *p) 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; + + return TRUE; } /* Should never be called, as .req goes between the alias and the register name, not at the beginning of the line. */ + static void s_req (int a ATTRIBUTE_UNUSED) { @@ -2286,7 +2376,7 @@ s_unreq (int a ATTRIBUTE_UNUSED) char * p; char * nbuf; - hash_delete (arm_reg_hsh, name); + hash_delete (arm_reg_hsh, name, FALSE); free ((char *) reg->name); if (reg->neon) free (reg->neon); @@ -2295,14 +2385,14 @@ s_unreq (int a ATTRIBUTE_UNUSED) /* Also locate the all upper case and all lower case versions. Do not complain if we cannot find one or the other as it was probably deleted above. */ - + nbuf = strdup (name); for (p = nbuf; *p; p++) *p = TOUPPER (*p); reg = hash_find (arm_reg_hsh, nbuf); if (reg) { - hash_delete (arm_reg_hsh, nbuf); + hash_delete (arm_reg_hsh, nbuf, FALSE); free ((char *) reg->name); if (reg->neon) free (reg->neon); @@ -2314,7 +2404,7 @@ s_unreq (int a ATTRIBUTE_UNUSED) reg = hash_find (arm_reg_hsh, nbuf); if (reg) { - hash_delete (arm_reg_hsh, nbuf); + hash_delete (arm_reg_hsh, nbuf, FALSE); free ((char *) reg->name); if (reg->neon) free (reg->neon); @@ -2337,22 +2427,15 @@ s_unreq (int a ATTRIBUTE_UNUSED) Note that previously, $a and $t has type STT_FUNC (BSF_OBJECT flag), and $d has type STT_OBJECT (BSF_OBJECT flag). Now all three are untyped. */ -static enum mstate mapstate = MAP_UNDEFINED; +/* Create a new mapping symbol for the transition to STATE. */ -void -mapping_state (enum mstate state) +static void +make_mapping_symbol (enum mstate state, valueT value, fragS *frag) { symbolS * symbolP; const char * symname; int type; - if (mapstate == state) - /* The mapping symbol has already been emitted. - There is nothing else to do. */ - return; - - mapstate = state; - switch (state) { case MAP_DATA: @@ -2367,16 +2450,11 @@ mapping_state (enum mstate state) symname = "$t"; type = BSF_NO_FLAGS; break; - case MAP_UNDEFINED: - return; default: abort (); } - seg_info (now_seg)->tc_segment_info_data.mapstate = state; - - symbolP = symbol_new (symname, now_seg, (valueT) frag_now_fix (), frag_now); - symbol_table_insert (symbolP); + symbolP = symbol_new (symname, now_seg, value, frag); symbol_get_bfdsym (symbolP)->flags |= type | BSF_LOCAL; switch (state) @@ -2395,15 +2473,114 @@ mapping_state (enum mstate state) case MAP_DATA: default: - return; + break; + } + + /* Save the mapping symbols for future reference. Also check that + we do not place two mapping symbols at the same offset within a + frag. We'll handle overlap between frags in + check_mapping_symbols. */ + if (value == 0) + { + know (frag->tc_frag_data.first_map == NULL); + frag->tc_frag_data.first_map = symbolP; + } + if (frag->tc_frag_data.last_map != NULL) + know (S_GET_VALUE (frag->tc_frag_data.last_map) < S_GET_VALUE (symbolP)); + frag->tc_frag_data.last_map = symbolP; +} + +/* We must sometimes convert a region marked as code to data during + code alignment, if an odd number of bytes have to be padded. The + code mapping symbol is pushed to an aligned address. */ + +static void +insert_data_mapping_symbol (enum mstate state, + valueT value, fragS *frag, offsetT bytes) +{ + /* If there was already a mapping symbol, remove it. */ + if (frag->tc_frag_data.last_map != NULL + && S_GET_VALUE (frag->tc_frag_data.last_map) == frag->fr_address + value) + { + symbolS *symp = frag->tc_frag_data.last_map; + + if (value == 0) + { + know (frag->tc_frag_data.first_map == symp); + frag->tc_frag_data.first_map = NULL; + } + frag->tc_frag_data.last_map = NULL; + symbol_remove (symp, &symbol_rootP, &symbol_lastP); + } + + make_mapping_symbol (MAP_DATA, value, frag); + make_mapping_symbol (state, value + bytes, frag); +} + +static void mapping_state_2 (enum mstate state, int max_chars); + +/* Set the mapping state to STATE. Only call this when about to + emit some STATE bytes to the file. */ + +void +mapping_state (enum mstate state) +{ + enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate; + +#define TRANSITION(from, to) (mapstate == (from) && state == (to)) + + if (mapstate == state) + /* The mapping symbol has already been emitted. + There is nothing else to do. */ + return; + else if (TRANSITION (MAP_UNDEFINED, MAP_DATA)) + /* This case will be evaluated later in the next else. */ + return; + else if (TRANSITION (MAP_UNDEFINED, MAP_ARM) + || TRANSITION (MAP_UNDEFINED, MAP_THUMB)) + { + /* Only add the symbol if the offset is > 0: + if we're at the first frag, check it's size > 0; + if we're not at the first frag, then for sure + the offset is > 0. */ + struct frag * const frag_first = seg_info (now_seg)->frchainP->frch_root; + const int add_symbol = (frag_now != frag_first) || (frag_now_fix () > 0); + + if (add_symbol) + make_mapping_symbol (MAP_DATA, (valueT) 0, frag_first); } + + mapping_state_2 (state, 0); +#undef TRANSITION +} + +/* Same as mapping_state, but MAX_CHARS bytes have already been + allocated. Put the mapping symbol that far back. */ + +static void +mapping_state_2 (enum mstate state, int max_chars) +{ + enum mstate mapstate = seg_info (now_seg)->tc_segment_info_data.mapstate; + + if (!SEG_NORMAL (now_seg)) + return; + + if (mapstate == state) + /* The mapping symbol has already been emitted. + There is nothing else to do. */ + return; + + seg_info (now_seg)->tc_segment_info_data.mapstate = state; + make_mapping_symbol (state, (valueT) frag_now_fix () - max_chars, frag_now); } #else #define mapping_state(x) /* nothing */ +#define mapping_state_2(x, y) /* nothing */ #endif /* Find the real, Thumb encoded start of a Thumb function. */ +#ifdef OBJ_COFF static symbolS * find_real_start (symbolS * symbolP) { @@ -2430,12 +2607,13 @@ find_real_start (symbolS * symbolP) if (new_target == NULL) { - as_warn ("Failed to find real start of function: %s\n", name); + as_warn (_("Failed to find real start of function: %s\n"), name); new_target = symbolP; } return new_target; } +#endif static void opcode_select (int width) @@ -2453,7 +2631,6 @@ opcode_select (int width) coming from ARM mode, which is word-aligned. */ record_alignment (now_seg, 1); } - mapping_state (MAP_THUMB); break; case 32: @@ -2469,7 +2646,6 @@ opcode_select (int width) record_alignment (now_seg, 1); } - mapping_state (MAP_ARM); break; default: @@ -2708,7 +2884,10 @@ s_bss (int ignore ATTRIBUTE_UNUSED) marking in_bss, then looking at s_skip for clues. */ subseg_set (bss_section, 0); demand_empty_rest_of_line (); - mapping_state (MAP_DATA); + +#ifdef md_elf_section_change_hook + md_elf_section_change_hook (); +#endif } static void @@ -2779,7 +2958,7 @@ find_or_make_literal_pool (void) } /* Add the literal in the global 'inst' - structure to the relevent literal pool. */ + structure to the relevant literal pool. */ static int add_to_lit_pool (void) @@ -3025,66 +3204,193 @@ s_arm_elf_cons (int nbytes) demand_empty_rest_of_line (); } - -/* Parse a .rel31 directive. */ +/* Emit an expression containing a 32-bit thumb instruction. + Implementation based on put_thumb32_insn. */ static void -s_arm_rel31 (int ignored ATTRIBUTE_UNUSED) +emit_thumb32_expr (expressionS * exp) { - expressionS exp; - char *p; - valueT highbit; + expressionS exp_high = *exp; - highbit = 0; - if (*input_line_pointer == '1') - highbit = 0x80000000; - else if (*input_line_pointer != '0') - as_bad (_("expected 0 or 1")); + exp_high.X_add_number = (unsigned long)exp_high.X_add_number >> 16; + emit_expr (& exp_high, (unsigned int) THUMB_SIZE); + exp->X_add_number &= 0xffff; + emit_expr (exp, (unsigned int) THUMB_SIZE); +} - input_line_pointer++; - if (*input_line_pointer != ',') - as_bad (_("missing comma")); - input_line_pointer++; +/* Guess the instruction size based on the opcode. */ -#ifdef md_flush_pending_output - md_flush_pending_output (); -#endif +static int +thumb_insn_size (int opcode) +{ + if ((unsigned int) opcode < 0xe800u) + return 2; + else if ((unsigned int) opcode >= 0xe8000000u) + return 4; + else + return 0; +} -#ifdef md_cons_align - md_cons_align (4); -#endif +static bfd_boolean +emit_insn (expressionS *exp, int nbytes) +{ + int size = 0; - mapping_state (MAP_DATA); + if (exp->X_op == O_constant) + { + size = nbytes; - expression (&exp); + if (size == 0) + size = thumb_insn_size (exp->X_add_number); - p = frag_more (4); - md_number_to_chars (p, highbit, 4); - fix_new_arm (frag_now, p - frag_now->fr_literal, 4, &exp, 1, - BFD_RELOC_ARM_PREL31); + if (size != 0) + { + if (size == 2 && (unsigned int)exp->X_add_number > 0xffffu) + { + as_bad (_(".inst.n operand too big. "\ + "Use .inst.w instead")); + size = 0; + } + else + { + if (now_it.state == AUTOMATIC_IT_BLOCK) + set_it_insn_type_nonvoid (OUTSIDE_IT_INSN, 0); + else + set_it_insn_type_nonvoid (NEUTRAL_IT_INSN, 0); - demand_empty_rest_of_line (); -} + if (thumb_mode && (size > THUMB_SIZE) && !target_big_endian) + emit_thumb32_expr (exp); + else + emit_expr (exp, (unsigned int) size); -/* Directives: AEABI stack-unwind tables. */ + it_fsm_post_encode (); + } + } + else + as_bad (_("cannot determine Thumb instruction size. " \ + "Use .inst.n/.inst.w instead")); + } + else + as_bad (_("constant expression required")); -/* Parse an unwind_fnstart directive. Simply records the current location. */ + return (size != 0); +} + +/* Like s_arm_elf_cons but do not use md_cons_align and + set the mapping state to MAP_ARM/MAP_THUMB. */ static void -s_arm_unwind_fnstart (int ignored ATTRIBUTE_UNUSED) +s_arm_elf_inst (int nbytes) { - demand_empty_rest_of_line (); - /* Mark the start of the function. */ - unwind.proc_start = expr_build_dot (); + if (is_it_end_of_statement ()) + { + demand_empty_rest_of_line (); + return; + } - /* Reset the rest of the unwind info. */ + /* Calling mapping_state () here will not change ARM/THUMB, + but will ensure not to be in DATA state. */ + + if (thumb_mode) + mapping_state (MAP_THUMB); + else + { + if (nbytes != 0) + { + as_bad (_("width suffixes are invalid in ARM mode")); + ignore_rest_of_line (); + return; + } + + nbytes = 4; + + mapping_state (MAP_ARM); + } + + do + { + expressionS exp; + + expression (& exp); + + if (! emit_insn (& exp, nbytes)) + { + ignore_rest_of_line (); + return; + } + } + while (*input_line_pointer++ == ','); + + /* Put terminator back into stream. */ + input_line_pointer --; + demand_empty_rest_of_line (); +} + +/* Parse a .rel31 directive. */ + +static void +s_arm_rel31 (int ignored ATTRIBUTE_UNUSED) +{ + expressionS exp; + char *p; + valueT highbit; + + highbit = 0; + if (*input_line_pointer == '1') + highbit = 0x80000000; + else if (*input_line_pointer != '0') + as_bad (_("expected 0 or 1")); + + input_line_pointer++; + if (*input_line_pointer != ',') + as_bad (_("missing comma")); + input_line_pointer++; + +#ifdef md_flush_pending_output + md_flush_pending_output (); +#endif + +#ifdef md_cons_align + md_cons_align (4); +#endif + + mapping_state (MAP_DATA); + + expression (&exp); + + p = frag_more (4); + md_number_to_chars (p, highbit, 4); + fix_new_arm (frag_now, p - frag_now->fr_literal, 4, &exp, 1, + BFD_RELOC_ARM_PREL31); + + demand_empty_rest_of_line (); +} + +/* Directives: AEABI stack-unwind tables. */ + +/* Parse an unwind_fnstart directive. Simply records the current location. */ + +static void +s_arm_unwind_fnstart (int ignored ATTRIBUTE_UNUSED) +{ + demand_empty_rest_of_line (); + if (unwind.proc_start) + { + as_bad (_("duplicate .fnstart directive")); + return; + } + + /* Mark the start of the function. */ + unwind.proc_start = expr_build_dot (); + + /* Reset the rest of the unwind info. */ unwind.opcode_count = 0; unwind.table_entry = NULL; unwind.personality_routine = NULL; unwind.personality_index = -1; unwind.frame_size = 0; unwind.fp_offset = 0; - unwind.fp_reg = 13; + unwind.fp_reg = REG_SP; unwind.fp_used = 0; unwind.sp_restored = 0; } @@ -3097,8 +3403,11 @@ static void s_arm_unwind_handlerdata (int ignored ATTRIBUTE_UNUSED) { demand_empty_rest_of_line (); + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + if (unwind.table_entry) - as_bad (_("dupicate .handlerdata directive")); + as_bad (_("duplicate .handlerdata directive")); create_unwind_entry (1); } @@ -3111,9 +3420,16 @@ s_arm_unwind_fnend (int ignored ATTRIBUTE_UNUSED) long where; char *ptr; valueT val; + unsigned int marked_pr_dependency; demand_empty_rest_of_line (); + if (!unwind.proc_start) + { + as_bad (_(".fnend directive without .fnstart")); + return; + } + /* Add eh table entry. */ if (unwind.table_entry == NULL) val = create_unwind_entry (0); @@ -3134,19 +3450,21 @@ s_arm_unwind_fnend (int ignored ATTRIBUTE_UNUSED) /* Indicate dependency on EHABI-defined personality routines to the linker, if it hasn't been done already. */ + marked_pr_dependency + = seg_info (now_seg)->tc_segment_info_data.marked_pr_dependency; if (unwind.personality_index >= 0 && unwind.personality_index < 3 && !(marked_pr_dependency & (1 << unwind.personality_index))) { - static const char *const name[] = { - "__aeabi_unwind_cpp_pr0", - "__aeabi_unwind_cpp_pr1", - "__aeabi_unwind_cpp_pr2" - }; + static const char *const name[] = + { + "__aeabi_unwind_cpp_pr0", + "__aeabi_unwind_cpp_pr1", + "__aeabi_unwind_cpp_pr2" + }; symbolS *pr = symbol_find_or_make (name[unwind.personality_index]); fix_new (frag_now, where, 0, pr, 0, 1, BFD_RELOC_NONE); - marked_pr_dependency |= 1 << unwind.personality_index; seg_info (now_seg)->tc_segment_info_data.marked_pr_dependency - = marked_pr_dependency; + |= 1 << unwind.personality_index; } if (val) @@ -3159,6 +3477,8 @@ s_arm_unwind_fnend (int ignored ATTRIBUTE_UNUSED) /* Restore the original section. */ subseg_set (unwind.saved_seg, unwind.saved_subseg); + + unwind.proc_start = NULL; } @@ -3168,6 +3488,9 @@ static void s_arm_unwind_cantunwind (int ignored ATTRIBUTE_UNUSED) { demand_empty_rest_of_line (); + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + if (unwind.personality_routine || unwind.personality_index != -1) as_bad (_("personality routine specified for cantunwind frame")); @@ -3182,6 +3505,9 @@ s_arm_unwind_personalityindex (int ignored ATTRIBUTE_UNUSED) { expressionS exp; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + if (unwind.personality_routine || unwind.personality_index != -1) as_bad (_("duplicate .personalityindex directive")); @@ -3208,6 +3534,9 @@ s_arm_unwind_personality (int ignored ATTRIBUTE_UNUSED) { char *name, *p, c; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + if (unwind.personality_routine || unwind.personality_index != -1) as_bad (_("duplicate .personality directive")); @@ -3385,7 +3714,7 @@ s_arm_unwind_save_vfp_armv6 (void) /* 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); + gas_assert (num_regs_below_16 + num_vfpv3_regs == count); if (num_regs_below_16 > 0) { op = 0xc900 | (start << 4) | (num_regs_below_16 - 1); @@ -3451,7 +3780,7 @@ s_arm_unwind_save_mmxwr (void) if (reg == FAIL) { - as_bad (_(reg_expected_msgs[REG_TYPE_MMXWR])); + as_bad ("%s", _(reg_expected_msgs[REG_TYPE_MMXWR])); goto error; } @@ -3465,7 +3794,7 @@ s_arm_unwind_save_mmxwr (void) hi_reg = arm_reg_parse (&input_line_pointer, REG_TYPE_MMXWR); if (hi_reg == FAIL) { - as_bad (_(reg_expected_msgs[REG_TYPE_MMXWR])); + as_bad ("%s", _(reg_expected_msgs[REG_TYPE_MMXWR])); goto error; } else if (reg >= hi_reg) @@ -3541,7 +3870,7 @@ s_arm_unwind_save_mmxwr (void) || !(mask & (1 << reg))) { /* We found an unsaved reg. Generate opcodes to save the - preceeding block. */ + preceding block. */ if (reg != hi_reg) { if (reg == 9) @@ -3583,7 +3912,7 @@ s_arm_unwind_save_mmxwcg (void) if (reg == FAIL) { - as_bad (_(reg_expected_msgs[REG_TYPE_MMXWCG])); + as_bad ("%s", _(reg_expected_msgs[REG_TYPE_MMXWCG])); goto error; } @@ -3598,7 +3927,7 @@ s_arm_unwind_save_mmxwcg (void) hi_reg = arm_reg_parse (&input_line_pointer, REG_TYPE_MMXWCG); if (hi_reg == FAIL) { - as_bad (_(reg_expected_msgs[REG_TYPE_MMXWCG])); + as_bad ("%s", _(reg_expected_msgs[REG_TYPE_MMXWCG])); goto error; } else if (reg >= hi_reg) @@ -3644,6 +3973,9 @@ s_arm_unwind_save (int arch_v6) struct reg_entry *reg; bfd_boolean had_brace = FALSE; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + /* Figure out what sort of save we have. */ peek = input_line_pointer; @@ -3671,6 +4003,7 @@ s_arm_unwind_save (int arch_v6) ignore_rest_of_line (); return; } + input_line_pointer = peek; s_arm_unwind_save_fpa (reg->number); return; @@ -3700,10 +4033,13 @@ s_arm_unwind_movsp (int ignored ATTRIBUTE_UNUSED) valueT op; int offset; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + reg = arm_reg_parse (&input_line_pointer, REG_TYPE_RN); if (reg == FAIL) { - as_bad (_(reg_expected_msgs[REG_TYPE_RN])); + as_bad ("%s", _(reg_expected_msgs[REG_TYPE_RN])); ignore_rest_of_line (); return; } @@ -3745,6 +4081,9 @@ s_arm_unwind_pad (int ignored ATTRIBUTE_UNUSED) { int offset; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + if (immediate_for_directive (&offset) == FAIL) return; @@ -3771,6 +4110,9 @@ s_arm_unwind_setfp (int ignored ATTRIBUTE_UNUSED) int fp_reg; int offset; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + fp_reg = arm_reg_parse (&input_line_pointer, REG_TYPE_RN); if (skip_past_comma (&input_line_pointer) == FAIL) sp_reg = FAIL; @@ -3795,7 +4137,7 @@ s_arm_unwind_setfp (int ignored ATTRIBUTE_UNUSED) demand_empty_rest_of_line (); - if (sp_reg != 13 && sp_reg != unwind.fp_reg) + if (sp_reg != REG_SP && sp_reg != unwind.fp_reg) { as_bad (_("register must be either sp or set by a previous" "unwind_movsp directive")); @@ -3805,7 +4147,7 @@ s_arm_unwind_setfp (int ignored ATTRIBUTE_UNUSED) /* Don't generate any opcodes, just record the information for later. */ unwind.fp_reg = fp_reg; unwind.fp_used = 1; - if (sp_reg == 13) + if (sp_reg == REG_SP) unwind.fp_offset = unwind.frame_size - offset; else unwind.fp_offset -= offset; @@ -3821,6 +4163,9 @@ s_arm_unwind_raw (int ignored ATTRIBUTE_UNUSED) unsigned char op[16]; int count; + if (!unwind.proc_start) + as_bad (MISSING_FNSTART); + expression (&exp); if (exp.X_op == O_constant && skip_past_comma (&input_line_pointer) != FAIL) @@ -3876,7 +4221,10 @@ s_arm_unwind_raw (int ignored ATTRIBUTE_UNUSED) static void s_arm_eabi_attribute (int ignored ATTRIBUTE_UNUSED) { - s_vendor_attribute (OBJ_ATTR_PROC); + int tag = s_vendor_attribute (OBJ_ATTR_PROC); + + if (tag < NUM_KNOWN_OBJ_ATTRIBUTES) + attributes_set_explicitly[tag] = 1; } #endif /* OBJ_ELF */ @@ -3888,7 +4236,7 @@ static void s_arm_fpu (int); #ifdef TE_PE static void -pe_directive_secrel (int dummy ATTRIBUTE_UNUSED) +pe_directive_secrel (int dummy ATTRIBUTE_UNUSED) { expressionS exp; @@ -3938,9 +4286,12 @@ const pseudo_typeS md_pseudo_table[] = { "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 }, - { "rel31", s_arm_rel31, 0 }, + { "word", s_arm_elf_cons, 4 }, + { "long", s_arm_elf_cons, 4 }, + { "inst.n", s_arm_elf_inst, 2 }, + { "inst.w", s_arm_elf_inst, 4 }, + { "inst", s_arm_elf_inst, 0 }, + { "rel31", s_arm_rel31, 0 }, { "fnstart", s_arm_unwind_fnstart, 0 }, { "fnend", s_arm_unwind_fnend, 0 }, { "cantunwind", s_arm_unwind_cantunwind, 0 }, @@ -4038,7 +4389,7 @@ parse_big_immediate (char **str, int i) /* 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); + gas_assert (parts != 0); inst.operands[i].imm = 0; for (j = 0; j < parts; j++, idx++) inst.operands[i].imm |= generic_bignum[idx] @@ -4051,7 +4402,7 @@ parse_big_immediate (char **str, int i) } else return FAIL; - + *str = ptr; return SUCCESS; @@ -4171,9 +4522,9 @@ parse_qfloat_immediate (char **ccp, int *immed) 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'. @@ -4196,29 +4547,29 @@ parse_qfloat_immediate (char **ccp, int *immed) 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; } @@ -4499,8 +4850,8 @@ find_group_reloc_table_entry (char **str, struct group_reloc_table_entry **out) { int length = strlen (group_reloc_table[i].name); - if (strncasecmp (group_reloc_table[i].name, *str, length) == 0 && - (*str)[length] == ':') + if (strncasecmp (group_reloc_table[i].name, *str, length) == 0 + && (*str)[length] == ':') { *out = &group_reloc_table[i]; *str += (length + 1); @@ -4556,7 +4907,7 @@ parse_shifter_operand_group_reloc (char **str, int i) /* Record the relocation type (always the ALU variant here). */ inst.reloc.type = entry->alu_code; - assert (inst.reloc.type != 0); + gas_assert (inst.reloc.type != 0); return PARSE_OPERAND_SUCCESS; } @@ -4674,9 +5025,8 @@ parse_address_main (char **str, int i, int group_relocations, p--; } - if (group_relocations && - ((*p == '#' && *(p + 1) == ':') || *p == ':')) - + if (group_relocations + && ((*p == '#' && *(p + 1) == ':') || *p == ':')) { struct group_reloc_table_entry *entry; @@ -4716,7 +5066,7 @@ parse_address_main (char **str, int i, int group_relocations, break; default: - assert (0); + gas_assert (0); } if (inst.reloc.type == 0) @@ -4833,10 +5183,10 @@ static int parse_half (char **str) { char * p; - + p = *str; skip_past_char (&p, '#'); - if (strncasecmp (p, ":lower16:", 9) == 0) + 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; @@ -4844,7 +5194,7 @@ parse_half (char **str) if (inst.reloc.type != BFD_RELOC_UNUSED) { p += 9; - skip_whitespace(p); + skip_whitespace (p); } if (my_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX)) @@ -5038,14 +5388,23 @@ parse_ror (char **str) static int parse_cond (char **str) { - char *p, *q; + char *q; const struct asm_cond *c; + int n; + /* Condition codes are always 2 characters, so matching up to + 3 characters is sufficient. */ + char cond[3]; - p = q = *str; - while (ISALPHA (*q)) - q++; + q = *str; + n = 0; + while (ISALPHA (*q) && n < 3) + { + cond[n] = TOLOWER (*q); + q++; + n++; + } - c = hash_find_n (arm_cond_hsh, p, q - p); + c = hash_find_n (arm_cond_hsh, cond, n); if (!c) { inst.error = _("condition required"); @@ -5102,7 +5461,7 @@ parse_tb (char **str) inst.error = _("',' expected"); return FAIL; } - + if ((reg = arm_reg_parse (&p, REG_TYPE_RN)) == FAIL) { inst.error = _(reg_expected_msgs[REG_TYPE_RN]); @@ -5145,7 +5504,7 @@ parse_neon_mov (char **str, int *which_operand) enum arm_reg_type rtype; char *ptr = *str; struct neon_type_el optype; - + if ((val = parse_scalar (&ptr, 8, &optype)) != FAIL) { /* Case 4: VMOV. , . */ @@ -5156,10 +5515,10 @@ parse_neon_mov (char **str, int *which_operand) 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; @@ -5170,7 +5529,7 @@ parse_neon_mov (char **str, int *which_operand) /* 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); @@ -5204,16 +5563,6 @@ parse_neon_mov (char **str, int *which_operand) inst.operands[i].present = 1; } } - else if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS) - /* Case 2: VMOV.
, # - Case 3: VMOV.
, # - Case 10: VMOV.F32 , # - Case 11: VMOV.F64
, # */ - inst.operands[i].immisfloat = 1; - else if (parse_big_immediate (&ptr, i) == SUCCESS) - /* Case 2: VMOV.
, # - Case 3: VMOV.
, # */ - ; else if ((val = arm_typed_reg_parse (&ptr, REG_TYPE_NSDQ, &rtype, &optype)) != FAIL) { @@ -5229,7 +5578,7 @@ parse_neon_mov (char **str, int *which_operand) inst.operands[i].isvec = 1; inst.operands[i].vectype = optype; inst.operands[i].present = 1; - + if (skip_past_comma (&ptr) == SUCCESS) { /* Case 15. */ @@ -5241,18 +5590,28 @@ parse_neon_mov (char **str, int *which_operand) 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 if (parse_qfloat_immediate (&ptr, &inst.operands[i].imm) == SUCCESS) + /* Case 2: VMOV.
, # + Case 3: VMOV.
, # + Case 10: VMOV.F32 , # + Case 11: VMOV.F64
, # */ + inst.operands[i].immisfloat = 1; + else if (parse_big_immediate (&ptr, i) == SUCCESS) + /* Case 2: VMOV.
, # + Case 3: VMOV.
, # */ + ; else { first_error (_("expected or or operand")); @@ -5265,10 +5624,10 @@ parse_neon_mov (char **str, int *which_operand) 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.
, */ @@ -5283,10 +5642,10 @@ parse_neon_mov (char **str, int *which_operand) 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) { @@ -5300,7 +5659,7 @@ parse_neon_mov (char **str, int *which_operand) 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. */ @@ -5344,11 +5703,11 @@ parse_neon_mov (char **str, int *which_operand) *str = ptr; return SUCCESS; - wanted_comma: + wanted_comma: first_error (_("expected comma")); return FAIL; - - wanted_arm: + + wanted_arm: first_error (_(reg_expected_msgs[REG_TYPE_RN])); return FAIL; } @@ -5488,69 +5847,90 @@ parse_operands (char *str, const unsigned char *pattern) 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_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_typed_reg_parse (&str, regtype, &rtype, \ - &inst.operands[i].vectype); \ - if (val == FAIL) \ +#define po_reg_or_fail(regtype) \ + do \ { \ - first_error (_(reg_expected_msgs[regtype])); \ - goto failure; \ + 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); \ } \ - 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_typed_reg_parse (&str, regtype, &rtype, \ - &inst.operands[i].vectype); \ - if (val == FAIL) \ - goto label; \ + while (0) + +#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 { \ - if (parse_immediate (&str, &val, min, max, popt) == FAIL) \ - goto failure; \ - 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) + 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 \ + { \ + if (parse_immediate (&str, &val, min, max, popt) == FAIL) \ + goto failure; \ + 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); @@ -5559,7 +5939,7 @@ parse_operands (char *str, const unsigned char *pattern) if (upat[i] >= OP_FIRST_OPTIONAL) { /* Remember where we are in case we need to backtrack. */ - assert (!backtrack_pos); + gas_assert (!backtrack_pos); backtrack_pos = str; backtrack_error = inst.error; backtrack_index = i; @@ -5816,11 +6196,11 @@ parse_operands (char *str, const unsigned char *pattern) po_misc_or_fail (parse_half (&str)); break; - /* Register or expression */ + /* 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; - /* Register or immediate */ + /* Register or immediate. */ case OP_RRnpc_I0: po_reg_or_goto (REG_TYPE_RN, I0); break; I0: po_imm_or_fail (0, 0, FALSE); break; @@ -5841,7 +6221,7 @@ parse_operands (char *str, const unsigned char *pattern) 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 */ + /* Two kinds of register. */ case OP_RIWR_RIWC: { struct reg_entry *rege = arm_reg_parse_multi (&str); @@ -5920,7 +6300,7 @@ parse_operands (char *str, const unsigned char *pattern) po_misc_or_fail (parse_tb (&str)); break; - /* Register lists */ + /* Register lists. */ case OP_REGLST: val = parse_reg_list (&str); if (*str == '^') @@ -6003,7 +6383,7 @@ parse_operands (char *str, const unsigned char *pattern) break; default: - as_fatal ("unhandled operand code %d", upat[i]); + as_fatal (_("unhandled operand code %d"), upat[i]); } /* Various value-based sanity checks and shared operations. We @@ -6054,7 +6434,7 @@ parse_operands (char *str, const unsigned char *pattern) if (!backtrack_pos) { /* The parse routine should already have set inst.error, but set a - defaut here just in case. */ + default here just in case. */ if (!inst.error) inst.error = _("syntax error"); return FAIL; @@ -6092,15 +6472,38 @@ parse_operands (char *str, const unsigned char *pattern) #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 { \ - if (expr) \ +#define constraint(expr, err) \ + do \ { \ - inst.error = err; \ - return; \ + if (expr) \ + { \ + inst.error = err; \ + return; \ + } \ } \ -} while (0) + while (0) + +/* Reject "bad registers" for Thumb-2 instructions. Many Thumb-2 + instructions are unpredictable if these registers are used. This + is the BadReg predicate in ARM's Thumb-2 documentation. */ +#define reject_bad_reg(reg) \ + do \ + if (reg == REG_SP || reg == REG_PC) \ + { \ + inst.error = (reg == REG_SP) ? BAD_SP : BAD_PC; \ + return; \ + } \ + while (0) + +/* If REG is R13 (the stack pointer), warn that its use is + deprecated. */ +#define warn_deprecated_sp(reg) \ + do \ + if (warn_on_deprecated && reg == REG_SP) \ + as_warn (_("use of r13 is deprecated")); \ + while (0) /* Functions for operand encoding. ARM, then Thumb. */ @@ -6158,14 +6561,14 @@ 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 (ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_d32)) { if (thumb_mode) ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used, - fpu_vfp_ext_v3); + fpu_vfp_ext_d32); else ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used, - fpu_vfp_ext_v3); + fpu_vfp_ext_d32); } else { @@ -6191,11 +6594,11 @@ encode_arm_vfp_reg (int reg, enum vfp_reg_pos pos) 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; @@ -6241,7 +6644,7 @@ encode_arm_shifter_operand (int i) static void encode_arm_addr_mode_common (int i, bfd_boolean is_t) { - assert (inst.operands[i].isreg); + gas_assert (inst.operands[i].isreg); inst.instruction |= inst.operands[i].reg << 16; if (inst.operands[i].preind) @@ -6258,7 +6661,7 @@ encode_arm_addr_mode_common (int i, bfd_boolean is_t) } else if (inst.operands[i].postind) { - assert (inst.operands[i].writeback); + gas_assert (inst.operands[i].writeback); if (is_t) inst.instruction |= WRITE_BACK; } @@ -6352,11 +6755,11 @@ encode_arm_cp_address (int i, int wb_ok, int unind_ok, int reloc_override) { inst.instruction |= inst.operands[i].reg << 16; - assert (!(inst.operands[i].preind && inst.operands[i].postind)); + gas_assert (!(inst.operands[i].preind && inst.operands[i].postind)); if (!inst.operands[i].preind && !inst.operands[i].postind) /* unindexed */ { - assert (!inst.operands[i].writeback); + gas_assert (!inst.operands[i].writeback); if (!unind_ok) { inst.error = _("instruction does not support unindexed addressing"); @@ -6403,13 +6806,13 @@ encode_arm_cp_address (int i, int wb_ok, int unind_ok, int reloc_override) /* inst.reloc.exp describes an "=expr" load pseudo-operation. Determine whether it can be performed with a move instruction; if it can, convert inst.instruction to that move instruction and - return 1; if it can't, convert inst.instruction to a literal-pool - load and return 0. If this is not a valid thing to do in the - current context, set inst.error and return 1. + return TRUE; if it can't, convert inst.instruction to a literal-pool + load and return FALSE. If this is not a valid thing to do in the + current context, set inst.error and return TRUE. inst.operands[i] describes the destination register. */ -static int +static bfd_boolean move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) { unsigned long tbit; @@ -6422,12 +6825,12 @@ move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) if ((inst.instruction & tbit) == 0) { inst.error = _("invalid pseudo operation"); - return 1; + return TRUE; } if (inst.reloc.exp.X_op != O_constant && inst.reloc.exp.X_op != O_symbol) { inst.error = _("constant expression expected"); - return 1; + return TRUE; } if (inst.reloc.exp.X_op == O_constant) { @@ -6438,7 +6841,7 @@ move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) /* This can be done with a mov(1) instruction. */ inst.instruction = T_OPCODE_MOV_I8 | (inst.operands[i].reg << 8); inst.instruction |= inst.reloc.exp.X_add_number; - return 1; + return TRUE; } } else @@ -6450,7 +6853,7 @@ move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) inst.instruction &= LITERAL_MASK; inst.instruction |= INST_IMMEDIATE | (OPCODE_MOV << DATA_OP_SHIFT); inst.instruction |= value & 0xfff; - return 1; + return TRUE; } value = encode_arm_immediate (~inst.reloc.exp.X_add_number); @@ -6460,7 +6863,7 @@ move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) inst.instruction &= LITERAL_MASK; inst.instruction |= INST_IMMEDIATE | (OPCODE_MVN << DATA_OP_SHIFT); inst.instruction |= value & 0xfff; - return 1; + return TRUE; } } } @@ -6468,7 +6871,7 @@ move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) if (add_to_lit_pool () == FAIL) { inst.error = _("literal pool insertion failed"); - return 1; + return TRUE; } inst.operands[1].reg = REG_PC; inst.operands[1].isreg = 1; @@ -6479,10 +6882,10 @@ move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3) : (mode_3 ? BFD_RELOC_ARM_HWLITERAL : BFD_RELOC_ARM_LITERAL)); - return 0; + return FALSE; } -/* Functions for instruction encoding, sorted by subarchitecture. +/* Functions for instruction encoding, sorted by sub-architecture. First some generics; their names are taken from the conventional bit positions for register arguments in ARM format instructions. */ @@ -6614,7 +7017,7 @@ do_barrier (void) { constraint ((inst.instruction & 0xf0) != 0x40 && inst.operands[0].imm != 0xf, - "bad barrier type"); + _("bad barrier type")); inst.instruction |= inst.operands[0].imm; } else @@ -6687,7 +7090,7 @@ encode_branch (int default_reloc) { constraint (inst.operands[0].imm != BFD_RELOC_ARM_PLT32, _("the only suffix valid here is '(plt)'")); - inst.reloc.type = BFD_RELOC_ARM_PLT32; + inst.reloc.type = BFD_RELOC_ARM_PLT32; } else { @@ -6746,25 +7149,37 @@ do_blx (void) else { /* Arg is an address; this instruction cannot be executed - conditionally, and the opcode must be adjusted. */ + conditionally, and the opcode must be adjusted. + We retain the BFD_RELOC_ARM_PCREL_BLX till the very end + where we generate out a BFD_RELOC_ARM_PCREL_CALL instead. */ constraint (inst.cond != COND_ALWAYS, BAD_COND); inst.instruction = 0xfa000000; -#ifdef OBJ_ELF - if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4) - encode_branch (BFD_RELOC_ARM_PCREL_CALL); - else -#endif - encode_branch (BFD_RELOC_ARM_PCREL_BLX); + encode_branch (BFD_RELOC_ARM_PCREL_BLX); } } static void do_bx (void) { + bfd_boolean want_reloc; + if (inst.operands[0].reg == REG_PC) as_tsktsk (_("use of r15 in bx in ARM mode is not really useful")); inst.instruction |= inst.operands[0].reg; + /* Output R_ARM_V4BX relocations if is an EABI object that looks like + it is for ARMv4t or earlier. */ + want_reloc = !ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5); + if (object_arch && !ARM_CPU_HAS_FEATURE (*object_arch, arm_ext_v5)) + want_reloc = TRUE; + +#ifdef OBJ_ELF + if (EF_ARM_EABI_VERSION (meabi_flags) < EF_ARM_EABI_VER4) +#endif + want_reloc = FALSE; + + if (want_reloc) + inst.reloc.type = BFD_RELOC_ARM_V4BX; } @@ -6811,9 +7226,30 @@ do_cmp (void) static void do_co_reg (void) { + unsigned Rd; + + Rd = inst.operands[2].reg; + if (thumb_mode) + { + if (inst.instruction == 0xee000010 + || inst.instruction == 0xfe000010) + /* MCR, MCR2 */ + reject_bad_reg (Rd); + else + /* MRC, MRC2 */ + constraint (Rd == REG_SP, BAD_SP); + } + else + { + /* MCR */ + if (inst.instruction == 0xe000010) + constraint (Rd == REG_PC, BAD_PC); + } + + inst.instruction |= inst.operands[0].reg << 8; inst.instruction |= inst.operands[1].imm << 21; - inst.instruction |= inst.operands[2].reg << 12; + inst.instruction |= Rd << 12; inst.instruction |= inst.operands[3].reg << 16; inst.instruction |= inst.operands[4].reg; inst.instruction |= inst.operands[5].imm << 5; @@ -6830,15 +7266,31 @@ do_co_reg (void) MAR{cond} acc0, , == MCRR{cond} p0, #0, , , c0 MRA{cond} acc0, , == MRRC{cond} p0, #0, , , c0 - Result unpredicatable if Rd or Rn is R15. */ + Result unpredictable if Rd or Rn is R15. */ static void do_co_reg2c (void) { + unsigned Rd, Rn; + + Rd = inst.operands[2].reg; + Rn = inst.operands[3].reg; + + if (thumb_mode) + { + reject_bad_reg (Rd); + reject_bad_reg (Rn); + } + else + { + constraint (Rd == REG_PC, BAD_PC); + constraint (Rn == REG_PC, BAD_PC); + } + inst.instruction |= inst.operands[0].reg << 8; inst.instruction |= inst.operands[1].imm << 4; - inst.instruction |= inst.operands[2].reg << 12; - inst.instruction |= inst.operands[3].reg << 16; + inst.instruction |= Rd << 12; + inst.instruction |= Rn << 16; inst.instruction |= inst.operands[4].reg; } @@ -6863,8 +7315,17 @@ static void do_it (void) { /* There is no IT instruction in ARM mode. We - process it but do not generate code for it. */ + process it to do the validation as if in + thumb mode, just in case the code gets + assembled for thumb using the unified syntax. */ + inst.size = 0; + if (unified_syntax) + { + set_it_insn_type (IT_INSN); + now_it.mask = (inst.instruction & 0xf) | 0x10; + now_it.cc = inst.operands[0].imm; + } } static void @@ -6925,7 +7386,7 @@ do_ldrd (void) if (!inst.operands[1].present) inst.operands[1].reg = inst.operands[0].reg + 1; - + if (inst.instruction & LOAD_BIT) { /* encode_arm_addr_mode_3 will diagnose overlap between the base @@ -7012,8 +7473,8 @@ do_ldstt (void) reject [Rn,...]. */ if (inst.operands[1].preind) { - constraint (inst.reloc.exp.X_op != O_constant || - inst.reloc.exp.X_add_number != 0, + constraint (inst.reloc.exp.X_op != O_constant + || inst.reloc.exp.X_add_number != 0, _("this instruction requires a post-indexed address")); inst.operands[1].preind = 0; @@ -7043,8 +7504,8 @@ do_ldsttv4 (void) reject [Rn,...]. */ if (inst.operands[1].preind) { - constraint (inst.reloc.exp.X_op != O_constant || - inst.reloc.exp.X_add_number != 0, + constraint (inst.reloc.exp.X_op != O_constant + || inst.reloc.exp.X_add_number != 0, _("this instruction requires a post-indexed address")); inst.operands[1].preind = 0; @@ -7126,7 +7587,7 @@ do_vfp_nsyn_mrs (void) do_vfp_nsyn_opcode ("fmrx"); else return FAIL; - + return SUCCESS; } @@ -7204,21 +7665,28 @@ do_mull (void) inst.instruction |= inst.operands[2].reg; inst.instruction |= inst.operands[3].reg << 8; - /* rdhi, rdlo and rm must all be different. */ - if (inst.operands[0].reg == inst.operands[1].reg - || inst.operands[0].reg == inst.operands[2].reg + /* rdhi and rdlo must be different. */ + if (inst.operands[0].reg == inst.operands[1].reg) + as_tsktsk (_("rdhi and rdlo must be different")); + + /* rdhi, rdlo and rm must all be different before armv6. */ + if ((inst.operands[0].reg == inst.operands[2].reg || inst.operands[1].reg == inst.operands[2].reg) + && !ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6)) as_tsktsk (_("rdhi, rdlo and rm must all be different")); } static void do_nop (void) { - if (inst.operands[0].present) + if (inst.operands[0].present + || ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6k)) { /* Architectural NOP hints are CPSR sets with no bits selected. */ inst.instruction &= 0xf0000000; - inst.instruction |= 0x0320f000 + inst.operands[0].imm; + inst.instruction |= 0x0320f000; + if (inst.operands[0].present) + inst.instruction |= inst.operands[0].imm; } } @@ -7464,10 +7932,10 @@ do_srs (void) if (inst.operands[0].present) { reg = inst.operands[0].reg; - constraint (reg != 13, _("SRS base register must be r13")); + constraint (reg != REG_SP, _("SRS base register must be r13")); } else - reg = 13; + reg = REG_SP; inst.instruction |= reg << 16; inst.instruction |= inst.operands[1].imm; @@ -7806,7 +8274,6 @@ 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. */ @@ -7855,7 +8322,6 @@ do_fpa_ldmstm (void) encode_arm_cp_address (2, TRUE, TRUE, 0); } - /* iWMMXt instructions: strictly in alphabetical order. */ @@ -8006,7 +8472,7 @@ do_iwmmxt_wrwrwr_or_imm5 (void) case 4: case 5: case 6: - case 7: + case 7: /* w...h wrd, wrn, #0 -> wrorh wrd, wrn, #16. */ inst.operands[2].imm = 16; inst.instruction = (inst.instruction & 0xff0fffff) | (0x7 << 20); @@ -8230,7 +8696,7 @@ encode_thumb32_addr_mode (int i, bfd_boolean is_t, bfd_boolean is_d) } else if (inst.operands[i].postind) { - assert (inst.operands[i].writeback); + gas_assert (inst.operands[i].writeback); constraint (is_pc, _("cannot use post-indexing with PC-relative addressing")); constraint (is_t, _("cannot use post-indexing with this instruction")); @@ -8327,7 +8793,7 @@ encode_thumb32_addr_mode (int i, bfd_boolean is_t, bfd_boolean is_d) X(yield, bf10, f3af8001), \ X(wfe, bf20, f3af8002), \ X(wfi, bf30, f3af8003), \ - X(sev, bf40, f3af9004), /* typo, 8004? */ + X(sev, bf40, f3af8004), /* To catch errors in encoding functions, the codes are all offset by 0xF800, putting them in one of the 32-bit prefix ranges, ergo undefined @@ -8343,14 +8809,15 @@ static const unsigned short thumb_op16[] = { T16_32_TAB }; #define X(a,b,c) 0x##c static const unsigned int thumb_op32[] = { T16_32_TAB }; -#define THUMB_OP32(n) (thumb_op32[(n) - (T16_32_OFFSET + 1)]) -#define THUMB_SETS_FLAGS(n) (THUMB_OP32 (n) & 0x00100000) +#define THUMB_OP32(n) (thumb_op32[(n) - (T16_32_OFFSET + 1)]) +#define THUMB_SETS_FLAGS(n) (THUMB_OP32 (n) & 0x00100000) #undef X #undef T16_32_TAB /* Thumb instruction encoders, in alphabetical order. */ /* ADDW or SUBW. */ + static void do_t_add_sub_w (void) { @@ -8359,7 +8826,13 @@ do_t_add_sub_w (void) Rd = inst.operands[0].reg; Rn = inst.operands[1].reg; - constraint (Rd == 15, _("PC not allowed as destination")); + /* If Rn is REG_PC, this is ADR; if Rn is REG_SP, then this + is the SP-{plus,minus}-immediate form of the instruction. */ + if (Rn == REG_SP) + constraint (Rd == REG_PC, BAD_PC); + else + reject_bad_reg (Rd); + inst.instruction |= (Rn << 16) | (Rd << 8); inst.reloc.type = BFD_RELOC_ARM_T32_IMM12; } @@ -8377,6 +8850,9 @@ do_t_add_sub (void) ? inst.operands[1].reg /* Rd, Rs, foo */ : inst.operands[0].reg); /* Rd, foo -> Rd, Rd, foo */ + if (Rd == REG_PC) + set_it_insn_type_last (); + if (unified_syntax) { bfd_boolean flags; @@ -8386,13 +8862,15 @@ do_t_add_sub (void) flags = (inst.instruction == T_MNEM_adds || inst.instruction == T_MNEM_subs); if (flags) - narrow = (current_it_mask == 0); + narrow = !in_it_block (); else - narrow = (current_it_mask != 0); + narrow = in_it_block (); if (!inst.operands[2].isreg) { int add; + constraint (Rd == REG_SP && Rs != REG_SP, BAD_SP); + add = (inst.instruction == T_MNEM_add || inst.instruction == T_MNEM_adds); opcode = 0; @@ -8429,6 +8907,7 @@ do_t_add_sub (void) { if (Rd == REG_PC) { + constraint (add, BAD_PC); constraint (Rs != REG_LR || inst.instruction != T_MNEM_subs, _("only SUBS PC, LR, #const allowed")); constraint (inst.reloc.exp.X_op != O_constant, @@ -8480,28 +8959,34 @@ do_t_add_sub (void) return; } - if (inst.instruction == T_MNEM_add) + if (inst.instruction == T_MNEM_add && (Rd == Rs || Rd == Rn)) { - if (Rd == Rs) + /* Thumb-1 cores (except v6-M) require at least one high + register in a narrow non flag setting add. */ + if (Rd > 7 || Rn > 7 + || ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6t2) + || ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_msr)) { + if (Rd == Rn) + { + Rn = Rs; + Rs = Rd; + } inst.instruction = T_OPCODE_ADD_HI; inst.instruction |= (Rd & 8) << 4; inst.instruction |= (Rd & 7); inst.instruction |= Rn << 3; return; } - /* ... because addition is commutative! */ - else if (Rd == Rn) - { - inst.instruction = T_OPCODE_ADD_HI; - inst.instruction |= (Rd & 8) << 4; - inst.instruction |= (Rd & 7); - inst.instruction |= Rs << 3; - return; - } } } - /* If we get here, it can't be done in 16 bits. */ + + constraint (Rd == REG_PC, BAD_PC); + constraint (Rd == REG_SP && Rs != REG_SP, BAD_SP); + constraint (Rs == REG_PC, BAD_PC); + reject_bad_reg (Rn); + + /* If we get here, it can't be done in 16 bits. */ constraint (inst.operands[2].shifted && inst.operands[2].immisreg, _("shift must be constant")); inst.instruction = THUMB_OP32 (inst.instruction); @@ -8559,18 +9044,23 @@ do_t_add_sub (void) static void do_t_adr (void) { - if (unified_syntax && inst.size_req == 0 && inst.operands[0].reg <= 7) + unsigned Rd; + + Rd = inst.operands[0].reg; + reject_bad_reg (Rd); + + if (unified_syntax && inst.size_req == 0 && Rd <= 7) { /* Defer to section relaxation. */ inst.relax = inst.instruction; inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].reg << 4; + inst.instruction |= Rd << 4; } else if (unified_syntax && inst.size_req != 2) { /* Generate a 32-bit opcode. */ inst.instruction = THUMB_OP32 (inst.instruction); - inst.instruction |= inst.operands[0].reg << 8; + inst.instruction |= Rd << 8; inst.reloc.type = BFD_RELOC_ARM_T32_ADD_PC12; inst.reloc.pc_rel = 1; } @@ -8582,7 +9072,7 @@ do_t_adr (void) inst.reloc.exp.X_add_number -= 4; /* PC relative adjust. */ inst.reloc.pc_rel = 1; - inst.instruction |= inst.operands[0].reg << 4; + inst.instruction |= Rd << 4; } } @@ -8603,6 +9093,11 @@ do_t_arit3 (void) : inst.operands[0].reg); /* Rd, foo -> Rd, Rd, foo */ Rn = inst.operands[2].reg; + reject_bad_reg (Rd); + reject_bad_reg (Rs); + if (inst.operands[2].isreg) + reject_bad_reg (Rn); + if (unified_syntax) { if (!inst.operands[2].isreg) @@ -8621,9 +9116,9 @@ do_t_arit3 (void) /* See if we can do this with a 16-bit instruction. */ if (THUMB_SETS_FLAGS (inst.instruction)) - narrow = current_it_mask == 0; + narrow = !in_it_block (); else - narrow = current_it_mask != 0; + narrow = in_it_block (); if (Rd > 7 || Rn > 7 || Rs > 7) narrow = FALSE; @@ -8686,6 +9181,11 @@ do_t_arit3c (void) : inst.operands[0].reg); /* Rd, foo -> Rd, Rd, foo */ Rn = inst.operands[2].reg; + reject_bad_reg (Rd); + reject_bad_reg (Rs); + if (inst.operands[2].isreg) + reject_bad_reg (Rn); + if (unified_syntax) { if (!inst.operands[2].isreg) @@ -8704,9 +9204,9 @@ do_t_arit3c (void) /* See if we can do this with a 16-bit instruction. */ if (THUMB_SETS_FLAGS (inst.instruction)) - narrow = current_it_mask == 0; + narrow = !in_it_block (); else - narrow = current_it_mask != 0; + narrow = in_it_block (); if (Rd > 7 || Rn > 7 || Rs > 7) narrow = FALSE; @@ -8773,7 +9273,7 @@ do_t_barrier (void) { constraint ((inst.instruction & 0xf0) != 0x40 && inst.operands[0].imm != 0xf, - "bad barrier type"); + _("bad barrier type")); inst.instruction |= inst.operands[0].imm; } else @@ -8783,11 +9283,14 @@ do_t_barrier (void) static void do_t_bfc (void) { + unsigned Rd; unsigned int msb = inst.operands[1].imm + inst.operands[2].imm; constraint (msb > 32, _("bit-field extends past end of register")); /* The instruction encoding stores the LSB and MSB, not the LSB and width. */ - inst.instruction |= inst.operands[0].reg << 8; + Rd = inst.operands[0].reg; + reject_bad_reg (Rd); + inst.instruction |= Rd << 8; inst.instruction |= (inst.operands[1].imm & 0x1c) << 10; inst.instruction |= (inst.operands[1].imm & 0x03) << 6; inst.instruction |= msb - 1; @@ -8796,19 +9299,28 @@ do_t_bfc (void) static void do_t_bfi (void) { + int Rd, Rn; unsigned int msb; + Rd = inst.operands[0].reg; + reject_bad_reg (Rd); + /* #0 in second position is alternative syntax for bfc, which is the same instruction but with REG_PC in the Rm field. */ if (!inst.operands[1].isreg) - inst.operands[1].reg = REG_PC; + Rn = REG_PC; + else + { + Rn = inst.operands[1].reg; + reject_bad_reg (Rn); + } msb = inst.operands[2].imm + inst.operands[3].imm; constraint (msb > 32, _("bit-field extends past end of register")); /* The instruction encoding stores the LSB and MSB, not the LSB and width. */ - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; inst.instruction |= (inst.operands[2].imm & 0x1c) << 10; inst.instruction |= (inst.operands[2].imm & 0x03) << 6; inst.instruction |= msb - 1; @@ -8817,10 +9329,18 @@ do_t_bfi (void) static void do_t_bfx (void) { + unsigned Rd, Rn; + + Rd = inst.operands[0].reg; + Rn = inst.operands[1].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + constraint (inst.operands[2].imm + inst.operands[3].imm > 32, _("bit-field extends past end of register")); - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; inst.instruction |= (inst.operands[2].imm & 0x1c) << 10; inst.instruction |= (inst.operands[2].imm & 0x03) << 6; inst.instruction |= inst.operands[3].imm - 1; @@ -8839,20 +9359,19 @@ do_t_bfx (void) static void do_t_blx (void) { - constraint (current_it_mask && current_it_mask != 0x10, BAD_BRANCH); + set_it_insn_type_last (); + if (inst.operands[0].isreg) - /* We have a register, so this is BLX(2). */ - inst.instruction |= inst.operands[0].reg << 3; + { + constraint (inst.operands[0].reg == REG_PC, BAD_PC); + /* We have a register, so this is BLX(2). */ + inst.instruction |= inst.operands[0].reg << 3; + } else { /* No register. This must be BLX(1). */ inst.instruction = 0xf000e800; -#ifdef OBJ_ELF - if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4) - inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH23; - else -#endif - inst.reloc.type = BFD_RELOC_THUMB_PCREL_BLX; + inst.reloc.type = BFD_RELOC_THUMB_PCREL_BLX; inst.reloc.pc_rel = 1; } } @@ -8863,13 +9382,14 @@ do_t_branch (void) int opcode; int cond; - if (current_it_mask) + cond = inst.cond; + set_it_insn_type (IF_INSIDE_IT_LAST_INSN); + + if (in_it_block ()) { /* Conditional branches inside IT blocks are encoded as unconditional branches. */ cond = COND_ALWAYS; - /* A branch must be the last instruction in an IT block. */ - constraint (current_it_mask != 0x10, BAD_BRANCH); } else cond = inst.cond; @@ -8886,7 +9406,7 @@ do_t_branch (void) inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH25; else { - assert (cond != 0xF); + gas_assert (cond != 0xF); inst.instruction |= cond << 22; inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH20; } @@ -8919,16 +9439,18 @@ do_t_bkpt (void) constraint (inst.operands[0].imm > 255, _("immediate value out of range")); inst.instruction |= inst.operands[0].imm; + set_it_insn_type (NEUTRAL_IT_INSN); } } static void do_t_branch23 (void) { - constraint (current_it_mask && current_it_mask != 0x10, BAD_BRANCH); + set_it_insn_type_last (); inst.reloc.type = BFD_RELOC_THUMB_PCREL_BRANCH23; inst.reloc.pc_rel = 1; +#if defined(OBJ_COFF) /* If the destination of the branch is a defined symbol which does not have the THUMB_FUNC attribute, then we must be calling a function which has the (interfacearm) attribute. We look for the Thumb entry point to that @@ -8939,12 +9461,13 @@ do_t_branch23 (void) && ! THUMB_IS_FUNC (inst.reloc.exp.X_add_symbol)) inst.reloc.exp.X_add_symbol = find_real_start (inst.reloc.exp.X_add_symbol); +#endif } static void do_t_bx (void) { - constraint (current_it_mask && current_it_mask != 0x10, BAD_BRANCH); + set_it_insn_type_last (); inst.instruction |= inst.operands[0].reg << 3; /* ??? FIXME: Should add a hacky reloc here if reg is REG_PC. The reloc should cause the alignment to be checked once it is known. This is @@ -8954,32 +9477,42 @@ do_t_bx (void) static void do_t_bxj (void) { - constraint (current_it_mask && current_it_mask != 0x10, BAD_BRANCH); - if (inst.operands[0].reg == REG_PC) - as_tsktsk (_("use of r15 in bxj is not really useful")); + int Rm; - inst.instruction |= inst.operands[0].reg << 16; + set_it_insn_type_last (); + Rm = inst.operands[0].reg; + reject_bad_reg (Rm); + inst.instruction |= Rm << 16; } static void do_t_clz (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[1].reg; + unsigned Rd; + unsigned Rm; + + Rd = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rm << 16; + inst.instruction |= Rm; } static void do_t_cps (void) { - constraint (current_it_mask, BAD_NOT_IT); + set_it_insn_type (OUTSIDE_IT_INSN); inst.instruction |= inst.operands[0].imm; } static void do_t_cpsi (void) { - constraint (current_it_mask, BAD_NOT_IT); + set_it_insn_type (OUTSIDE_IT_INSN); if (unified_syntax && (inst.operands[1].present || inst.size_req == 4) && ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v6_notm)) @@ -9026,7 +9559,7 @@ do_t_cpy (void) static void do_t_cbz (void) { - constraint (current_it_mask, BAD_NOT_IT); + set_it_insn_type (OUTSIDE_IT_INSN); constraint (inst.operands[0].reg > 7, BAD_HIREG); inst.instruction |= inst.operands[0].reg; inst.reloc.pc_rel = 1; @@ -9042,11 +9575,20 @@ do_t_dbg (void) static void do_t_div (void) { - if (!inst.operands[1].present) - inst.operands[1].reg = inst.operands[0].reg; - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[2].reg; + unsigned Rd, Rn, Rm; + + Rd = inst.operands[0].reg; + Rn = (inst.operands[1].present + ? inst.operands[1].reg : Rd); + Rm = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; } static void @@ -9063,9 +9605,9 @@ do_t_it (void) { unsigned int cond = inst.operands[0].imm; - constraint (current_it_mask, BAD_NOT_IT); - current_it_mask = (inst.instruction & 0xf) | 0x10; - current_cc = cond; + set_it_insn_type (IT_INSN); + now_it.mask = (inst.instruction & 0xf) | 0x10; + now_it.cc = cond; /* If the condition is a negative condition, invert the mask. */ if ((cond & 0x1) == 0x0) @@ -9100,9 +9642,13 @@ encode_thumb2_ldmstm (int base, unsigned mask, bfd_boolean writeback) 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 << 15)) + { + if (mask & (1 << 14)) + inst.error = _("LR and PC should not both be in register list"); + else + set_it_insn_type_last (); + } if ((mask & (1 << base)) != 0 && writeback) @@ -9140,7 +9686,7 @@ encode_thumb2_ldmstm (int base, unsigned mask, bfd_boolean writeback) if (load) inst.instruction |= 0x00100000; - mask = ffs(mask) - 1; + mask = ffs (mask) - 1; mask <<= 12; } else if (writeback) @@ -9204,8 +9750,8 @@ do_t_ldmstm (void) if (inst.instruction < 0xffff) inst.instruction = THUMB_OP32 (inst.instruction); - encode_thumb2_ldmstm(inst.operands[0].reg, inst.operands[1].imm, - inst.operands[0].writeback); + encode_thumb2_ldmstm (inst.operands[0].reg, inst.operands[1].imm, + inst.operands[0].writeback); } } else @@ -9278,6 +9824,11 @@ do_t_ldst (void) unsigned long opcode; int Rn; + if (inst.operands[0].isreg + && !inst.operands[0].preind + && inst.operands[0].reg == REG_PC) + set_it_insn_type_last (); + opcode = inst.instruction; if (unified_syntax) { @@ -9300,7 +9851,7 @@ do_t_ldst (void) if (inst.operands[1].immisreg) { inst.instruction = THUMB_OP16 (opcode); - /* [Rn, Ri] */ + /* [Rn, Rik] */ if (Rn <= 7 && inst.operands[1].imm <= 7) goto op16; } @@ -9361,7 +9912,7 @@ do_t_ldst (void) inst.instruction = THUMB_OP16 (inst.instruction); goto op16; } - + inst.instruction = THUMB_OP16 (inst.instruction); if (!inst.operands[1].isreg) if (move_or_literal_pool (0, /*thumb_p=*/TRUE, /*mode_3=*/FALSE)) @@ -9439,7 +9990,6 @@ do_t_ldstd (void) inst.instruction |= inst.operands[0].reg << 12; inst.instruction |= inst.operands[1].reg << 8; encode_thumb32_addr_mode (2, /*is_t=*/FALSE, /*is_d=*/TRUE); - } static void @@ -9452,24 +10002,56 @@ do_t_ldstt (void) static void do_t_mla (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[2].reg; - inst.instruction |= inst.operands[3].reg << 12; + unsigned Rd, Rn, Rm, Ra; + + Rd = inst.operands[0].reg; + Rn = inst.operands[1].reg; + Rm = inst.operands[2].reg; + Ra = inst.operands[3].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + reject_bad_reg (Ra); + + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; + inst.instruction |= Ra << 12; } static void do_t_mlal (void) { - inst.instruction |= inst.operands[0].reg << 12; - inst.instruction |= inst.operands[1].reg << 8; - inst.instruction |= inst.operands[2].reg << 16; - inst.instruction |= inst.operands[3].reg; + unsigned RdLo, RdHi, Rn, Rm; + + RdLo = inst.operands[0].reg; + RdHi = inst.operands[1].reg; + Rn = inst.operands[2].reg; + Rm = inst.operands[3].reg; + + reject_bad_reg (RdLo); + reject_bad_reg (RdHi); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + + inst.instruction |= RdLo << 12; + inst.instruction |= RdHi << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; } static void do_t_mov_cmp (void) { + unsigned Rn, Rm; + + Rn = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + if (Rn == REG_PC) + set_it_insn_type_last (); + if (unified_syntax) { int r0off = (inst.instruction == T_MNEM_mov @@ -9478,9 +10060,9 @@ do_t_mov_cmp (void) bfd_boolean narrow; bfd_boolean low_regs; - low_regs = (inst.operands[0].reg <= 7 && inst.operands[1].reg <= 7); + low_regs = (Rn <= 7 && Rm <= 7); opcode = inst.instruction; - if (current_it_mask) + if (in_it_block ()) narrow = opcode != T_MNEM_movs; else narrow = opcode != T_MNEM_movs || low_regs; @@ -9491,22 +10073,56 @@ do_t_mov_cmp (void) /* 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) + && Rn == REG_PC + && Rm == REG_LR) { inst.instruction = T2_SUBS_PC_LR; return; } + if (opcode == T_MNEM_cmp) + { + constraint (Rn == REG_PC, BAD_PC); + if (narrow) + { + /* In the Thumb-2 ISA, use of R13 as Rm is deprecated, + but valid. */ + warn_deprecated_sp (Rm); + /* R15 was documented as a valid choice for Rm in ARMv6, + but as UNPREDICTABLE in ARMv7. ARM's proprietary + tools reject R15, so we do too. */ + constraint (Rm == REG_PC, BAD_PC); + } + else + reject_bad_reg (Rm); + } + else if (opcode == T_MNEM_mov + || opcode == T_MNEM_movs) + { + if (inst.operands[1].isreg) + { + if (opcode == T_MNEM_movs) + { + reject_bad_reg (Rn); + reject_bad_reg (Rm); + } + else if ((Rn == REG_SP || Rn == REG_PC) + && (Rm == REG_SP || Rm == REG_PC)) + reject_bad_reg (Rm); + } + else + reject_bad_reg (Rn); + } + if (!inst.operands[1].isreg) { /* Immediate operand. */ - if (current_it_mask == 0 && opcode == T_MNEM_mov) + if (!in_it_block () && opcode == T_MNEM_mov) narrow = 0; if (low_regs && narrow) { inst.instruction = THUMB_OP16 (opcode); - inst.instruction |= inst.operands[0].reg << 8; + inst.instruction |= Rn << 8; if (inst.size_req == 2) inst.reloc.type = BFD_RELOC_ARM_THUMB_IMM; else @@ -9516,7 +10132,7 @@ do_t_mov_cmp (void) { inst.instruction = THUMB_OP32 (inst.instruction); inst.instruction = (inst.instruction & 0xe1ffffff) | 0x10000000; - inst.instruction |= inst.operands[0].reg << r0off; + inst.instruction |= Rn << r0off; inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE; } } @@ -9527,7 +10143,7 @@ do_t_mov_cmp (void) /* Register shifts are encoded as separate shift instructions. */ bfd_boolean flags = (inst.instruction == T_MNEM_movs); - if (current_it_mask) + if (in_it_block ()) narrow = !flags; else narrow = flags; @@ -9538,7 +10154,7 @@ do_t_mov_cmp (void) if (!low_regs || inst.operands[1].imm > 7) narrow = FALSE; - if (inst.operands[0].reg != inst.operands[1].reg) + if (Rn != Rm) narrow = FALSE; switch (inst.operands[1].shift_kind) @@ -9556,13 +10172,13 @@ do_t_mov_cmp (void) opcode = narrow ? T_OPCODE_ROR_R : THUMB_OP32 (T_MNEM_ror); break; default: - abort(); + abort (); } inst.instruction = opcode; if (narrow) { - inst.instruction |= inst.operands[0].reg; + inst.instruction |= Rn; inst.instruction |= inst.operands[1].imm << 3; } else @@ -9570,8 +10186,8 @@ do_t_mov_cmp (void) if (flags) inst.instruction |= CONDS_BIT; - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; + inst.instruction |= Rn << 8; + inst.instruction |= Rm << 16; inst.instruction |= inst.operands[1].imm; } } @@ -9583,7 +10199,7 @@ do_t_mov_cmp (void) && (inst.instruction == T_MNEM_mov || inst.instruction == T_MNEM_movs)) { - if (current_it_mask) + if (in_it_block ()) narrow = (inst.instruction == T_MNEM_mov); else narrow = (inst.instruction == T_MNEM_movs); @@ -9602,14 +10218,14 @@ do_t_mov_cmp (void) if (narrow) { - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rn; + inst.instruction |= Rm << 3; inst.reloc.type = BFD_RELOC_ARM_THUMB_SHIFT; } else { inst.instruction = THUMB_OP32 (inst.instruction); - inst.instruction |= inst.operands[0].reg << r0off; + inst.instruction |= Rn << r0off; encode_thumb32_shifted_operand (1); } } @@ -9618,32 +10234,32 @@ do_t_mov_cmp (void) { case T_MNEM_mov: inst.instruction = T_OPCODE_MOV_HR; - inst.instruction |= (inst.operands[0].reg & 0x8) << 4; - inst.instruction |= (inst.operands[0].reg & 0x7); - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= (Rn & 0x8) << 4; + inst.instruction |= (Rn & 0x7); + inst.instruction |= Rm << 3; break; case T_MNEM_movs: /* We know we have low registers at this point. Generate ADD Rd, Rs, #0. */ inst.instruction = T_OPCODE_ADD_I3; - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rn; + inst.instruction |= Rm << 3; break; case T_MNEM_cmp: if (low_regs) { inst.instruction = T_OPCODE_CMP_LR; - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rn; + inst.instruction |= Rm << 3; } else { inst.instruction = T_OPCODE_CMP_HR; - inst.instruction |= (inst.operands[0].reg & 0x8) << 4; - inst.instruction |= (inst.operands[0].reg & 0x7); - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= (Rn & 0x8) << 4; + inst.instruction |= (Rn & 0x7); + inst.instruction |= Rm << 3; } break; } @@ -9651,9 +10267,14 @@ do_t_mov_cmp (void) } inst.instruction = THUMB_OP16 (inst.instruction); + + /* PR 10443: Do not silently ignore shifted operands. */ + constraint (inst.operands[1].shifted, + _("shifts in CMP/MOV instructions are only supported in unified syntax")); + if (inst.operands[1].isreg) { - if (inst.operands[0].reg < 8 && inst.operands[1].reg < 8) + if (Rn < 8 && Rm < 8) { /* A move of two lowregs is encoded as ADD Rd, Rs, #0 since a MOV instruction produces unpredictable results. */ @@ -9662,8 +10283,8 @@ do_t_mov_cmp (void) else inst.instruction = T_OPCODE_CMP_LR; - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rn; + inst.instruction |= Rm << 3; } else { @@ -9676,9 +10297,9 @@ do_t_mov_cmp (void) } else { - constraint (inst.operands[0].reg > 7, + constraint (Rn > 7, _("only lo regs allowed with immediate")); - inst.instruction |= inst.operands[0].reg << 8; + inst.instruction |= Rn << 8; inst.reloc.type = BFD_RELOC_ARM_THUMB_IMM; } } @@ -9686,6 +10307,7 @@ do_t_mov_cmp (void) static void do_t_mov16 (void) { + unsigned Rd; bfd_vma imm; bfd_boolean top; @@ -9701,7 +10323,10 @@ do_t_mov16 (void) inst.reloc.type = BFD_RELOC_ARM_THUMB_MOVT; } - inst.instruction |= inst.operands[0].reg << 8; + Rd = inst.operands[0].reg; + reject_bad_reg (Rd); + + inst.instruction |= Rd << 8; if (inst.reloc.type == BFD_RELOC_UNUSED) { imm = inst.reloc.exp.X_add_number; @@ -9715,6 +10340,18 @@ do_t_mov16 (void) static void do_t_mvn_tst (void) { + unsigned Rn, Rm; + + Rn = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + if (inst.instruction == T_MNEM_cmp + || inst.instruction == T_MNEM_cmn) + constraint (Rn == REG_PC, BAD_PC); + else + reject_bad_reg (Rn); + reject_bad_reg (Rm); + if (unified_syntax) { int r0off = (inst.instruction == T_MNEM_mvn @@ -9724,14 +10361,14 @@ do_t_mvn_tst (void) if (inst.size_req == 4 || inst.instruction > 0xffff || inst.operands[1].shifted - || inst.operands[0].reg > 7 || inst.operands[1].reg > 7) + || Rn > 7 || Rm > 7) narrow = FALSE; else if (inst.instruction == T_MNEM_cmn) narrow = TRUE; else if (THUMB_SETS_FLAGS (inst.instruction)) - narrow = (current_it_mask == 0); + narrow = !in_it_block (); else - narrow = (current_it_mask != 0); + narrow = in_it_block (); if (!inst.operands[1].isreg) { @@ -9740,7 +10377,7 @@ do_t_mvn_tst (void) if (inst.instruction < 0xffff) inst.instruction = THUMB_OP32 (inst.instruction); inst.instruction = (inst.instruction & 0xe1ffffff) | 0x10000000; - inst.instruction |= inst.operands[0].reg << r0off; + inst.instruction |= Rn << r0off; inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE; } else @@ -9749,8 +10386,8 @@ do_t_mvn_tst (void) if (narrow) { inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rn; + inst.instruction |= Rm << 3; } else { @@ -9759,7 +10396,7 @@ do_t_mvn_tst (void) _("shift must be constant")); if (inst.instruction < 0xffff) inst.instruction = THUMB_OP32 (inst.instruction); - inst.instruction |= inst.operands[0].reg << r0off; + inst.instruction |= Rn << r0off; encode_thumb32_shifted_operand (1); } } @@ -9770,18 +10407,19 @@ do_t_mvn_tst (void) || inst.instruction == T_MNEM_mvns, BAD_THUMB32); constraint (!inst.operands[1].isreg || inst.operands[1].shifted, _("unshifted register required")); - constraint (inst.operands[0].reg > 7 || inst.operands[1].reg > 7, + constraint (Rn > 7 || Rm > 7, BAD_HIREG); inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rn; + inst.instruction |= Rm << 3; } } static void do_t_mrs (void) { + unsigned Rd; int flags; if (do_vfp_nsyn_mrs () == SUCCESS) @@ -9790,7 +10428,7 @@ do_t_mrs (void) flags = inst.operands[1].imm & (PSR_c|PSR_x|PSR_s|PSR_f|SPSR_BIT); if (flags == 0) { - constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v7m), + constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_m), _("selected processor does not support " "requested special purpose register")); } @@ -9798,13 +10436,16 @@ do_t_mrs (void) { constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v1), _("selected processor does not support " - "requested special purpose register %x")); + "requested special purpose register")); /* mrs only accepts CPSR/SPSR/CPSR_all/SPSR_all. */ constraint ((flags & ~SPSR_BIT) != (PSR_c|PSR_f), _("'CPSR' or 'SPSR' expected")); } - - inst.instruction |= inst.operands[0].reg << 8; + + Rd = inst.operands[0].reg; + reject_bad_reg (Rd); + + inst.instruction |= Rd << 8; inst.instruction |= (flags & SPSR_BIT) >> 2; inst.instruction |= inst.operands[1].imm & 0xff; } @@ -9813,6 +10454,7 @@ static void do_t_msr (void) { int flags; + unsigned Rn; if (do_vfp_nsyn_msr () == SUCCESS) return; @@ -9828,65 +10470,113 @@ do_t_msr (void) } else { - constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v7m), + constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_m), _("selected processor does not support " "requested special purpose register")); flags |= PSR_f; } + + Rn = inst.operands[1].reg; + reject_bad_reg (Rn); + inst.instruction |= (flags & SPSR_BIT) >> 2; inst.instruction |= (flags & ~SPSR_BIT) >> 8; inst.instruction |= (flags & 0xff); - inst.instruction |= inst.operands[1].reg << 16; + inst.instruction |= Rn << 16; } static void do_t_mul (void) { + bfd_boolean narrow; + unsigned Rd, Rn, Rm; + if (!inst.operands[2].present) inst.operands[2].reg = inst.operands[0].reg; - /* There is no 32-bit MULS and no 16-bit MUL. */ - if (unified_syntax && inst.instruction == T_MNEM_mul) + Rd = inst.operands[0].reg; + Rn = inst.operands[1].reg; + Rm = inst.operands[2].reg; + + if (unified_syntax) { - inst.instruction = THUMB_OP32 (inst.instruction); - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[2].reg << 0; + if (inst.size_req == 4 + || (Rd != Rn + && Rd != Rm) + || Rn > 7 + || Rm > 7) + narrow = FALSE; + else if (inst.instruction == T_MNEM_muls) + narrow = !in_it_block (); + else + narrow = in_it_block (); } else { - constraint (!unified_syntax - && inst.instruction == T_MNEM_muls, BAD_THUMB32); - constraint (inst.operands[0].reg > 7 || inst.operands[1].reg > 7, + constraint (inst.instruction == T_MNEM_muls, BAD_THUMB32); + constraint (Rn > 7 || Rm > 7, BAD_HIREG); + narrow = TRUE; + } + if (narrow) + { + /* 16-bit MULS/Conditional MUL. */ inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].reg; + inst.instruction |= Rd; - if (inst.operands[0].reg == inst.operands[1].reg) - inst.instruction |= inst.operands[2].reg << 3; - else if (inst.operands[0].reg == inst.operands[2].reg) - inst.instruction |= inst.operands[1].reg << 3; + if (Rd == Rn) + inst.instruction |= Rm << 3; + else if (Rd == Rm) + inst.instruction |= Rn << 3; else constraint (1, _("dest must overlap one source register")); } + else + { + constraint (inst.instruction != T_MNEM_mul, + _("Thumb-2 MUL must not set flags")); + /* 32-bit MUL. */ + inst.instruction = THUMB_OP32 (inst.instruction); + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm << 0; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + } } static void do_t_mull (void) { - inst.instruction |= inst.operands[0].reg << 12; - inst.instruction |= inst.operands[1].reg << 8; - inst.instruction |= inst.operands[2].reg << 16; - inst.instruction |= inst.operands[3].reg; + unsigned RdLo, RdHi, Rn, Rm; - if (inst.operands[0].reg == inst.operands[1].reg) + RdLo = inst.operands[0].reg; + RdHi = inst.operands[1].reg; + Rn = inst.operands[2].reg; + Rm = inst.operands[3].reg; + + reject_bad_reg (RdLo); + reject_bad_reg (RdHi); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + + inst.instruction |= RdLo << 12; + inst.instruction |= RdHi << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; + + if (RdLo == RdHi) as_tsktsk (_("rdhi and rdlo must be different")); } static void do_t_nop (void) { + set_it_insn_type (NEUTRAL_IT_INSN); + if (unified_syntax) { if (inst.size_req == 4 || inst.operands[0].imm > 15) @@ -9896,8 +10586,15 @@ do_t_nop (void) } else { - inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].imm << 4; + /* PR9722: Check for Thumb2 availability before + generating a thumb2 nop instruction. */ + if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_arch_t2)) + { + inst.instruction = THUMB_OP16 (inst.instruction); + inst.instruction |= inst.operands[0].imm << 4; + } + else + inst.instruction = 0x46c0; } } else @@ -9916,9 +10613,9 @@ do_t_neg (void) bfd_boolean narrow; if (THUMB_SETS_FLAGS (inst.instruction)) - narrow = (current_it_mask == 0); + narrow = !in_it_block (); else - narrow = (current_it_mask != 0); + narrow = in_it_block (); if (inst.operands[0].reg > 7 || inst.operands[1].reg > 7) narrow = FALSE; if (inst.size_req == 4) @@ -9949,12 +10646,56 @@ do_t_neg (void) } } +static void +do_t_orn (void) +{ + unsigned Rd, Rn; + + Rd = inst.operands[0].reg; + Rn = inst.operands[1].present ? inst.operands[1].reg : Rd; + + reject_bad_reg (Rd); + /* Rn == REG_SP is unpredictable; Rn == REG_PC is MVN. */ + reject_bad_reg (Rn); + + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + + if (!inst.operands[2].isreg) + { + inst.instruction = (inst.instruction & 0xe1ffffff) | 0x10000000; + inst.reloc.type = BFD_RELOC_ARM_T32_IMMEDIATE; + } + else + { + unsigned Rm; + + Rm = inst.operands[2].reg; + reject_bad_reg (Rm); + + constraint (inst.operands[2].shifted + && inst.operands[2].immisreg, + _("shift must be constant")); + encode_thumb32_shifted_operand (2); + } +} + static void do_t_pkhbt (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[2].reg; + unsigned Rd, Rn, Rm; + + Rd = inst.operands[0].reg; + Rn = inst.operands[1].reg; + Rm = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; if (inst.operands[3].present) { unsigned int val = inst.reloc.exp.X_add_number; @@ -9969,13 +10710,25 @@ static void do_t_pkhtb (void) { if (!inst.operands[3].present) - inst.instruction &= ~0x00000020; + { + unsigned Rtmp; + + inst.instruction &= ~0x00000020; + + /* PR 10168. Swap the Rm and Rn registers. */ + Rtmp = inst.operands[1].reg; + inst.operands[1].reg = inst.operands[2].reg; + inst.operands[2].reg = Rtmp; + } do_t_pkhbt (); } static void do_t_pld (void) { + if (inst.operands[0].immisreg) + reject_bad_reg (inst.operands[0].imm); + encode_thumb32_addr_mode (0, /*is_t=*/FALSE, /*is_d=*/FALSE); } @@ -9983,7 +10736,7 @@ static void do_t_push_pop (void) { unsigned mask; - + constraint (inst.operands[0].writeback, _("push/pop do not support {reglist}^")); constraint (inst.reloc.type != BFD_RELOC_UNUSED, @@ -10004,7 +10757,7 @@ do_t_push_pop (void) else if (unified_syntax) { inst.instruction = THUMB_OP32 (inst.instruction); - encode_thumb2_ldmstm(13, mask, TRUE); + encode_thumb2_ldmstm (13, mask, TRUE); } else { @@ -10016,41 +10769,78 @@ do_t_push_pop (void) static void do_t_rbit (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; + unsigned Rd, Rm; + + Rd = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rm << 16; + inst.instruction |= Rm; } static void do_t_rev (void) { - if (inst.operands[0].reg <= 7 && inst.operands[1].reg <= 7 + unsigned Rd, Rm; + + Rd = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rm); + + if (Rd <= 7 && Rm <= 7 && inst.size_req != 4) { inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rd; + inst.instruction |= Rm << 3; } else if (unified_syntax) { inst.instruction = THUMB_OP32 (inst.instruction); - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[1].reg; + inst.instruction |= Rd << 8; + inst.instruction |= Rm << 16; + inst.instruction |= Rm; } else inst.error = BAD_HIREG; } +static void +do_t_rrx (void) +{ + unsigned Rd, Rm; + + Rd = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rm; +} + static void do_t_rsb (void) { - int Rd, Rs; + unsigned Rd, Rs; Rd = inst.operands[0].reg; Rs = (inst.operands[1].present ? inst.operands[1].reg /* Rd, Rs, foo */ : inst.operands[0].reg); /* Rd, foo -> Rd, Rd, foo */ + reject_bad_reg (Rd); + reject_bad_reg (Rs); + if (inst.operands[2].isreg) + reject_bad_reg (inst.operands[2].reg); + inst.instruction |= Rd << 8; inst.instruction |= Rs << 16; if (!inst.operands[2].isreg) @@ -10058,9 +10848,9 @@ do_t_rsb (void) bfd_boolean narrow; if ((inst.instruction & 0x00100000) != 0) - narrow = (current_it_mask == 0); + narrow = !in_it_block (); else - narrow = (current_it_mask != 0); + narrow = in_it_block (); if (Rd > 7 || Rs > 7) narrow = FALSE; @@ -10094,7 +10884,7 @@ do_t_rsb (void) static void do_t_setend (void) { - constraint (current_it_mask, BAD_NOT_IT); + set_it_insn_type (OUTSIDE_IT_INSN); if (inst.operands[0].imm) inst.instruction |= 0x8; } @@ -10124,9 +10914,9 @@ do_t_shift (void) } if (THUMB_SETS_FLAGS (inst.instruction)) - narrow = (current_it_mask == 0); + narrow = !in_it_block (); else - narrow = (current_it_mask != 0); + narrow = in_it_block (); if (inst.operands[0].reg > 7 || inst.operands[1].reg > 7) narrow = FALSE; if (!inst.operands[2].isreg && shift_kind == SHIFT_ROR) @@ -10138,10 +10928,14 @@ do_t_shift (void) if (inst.size_req == 4) narrow = FALSE; + reject_bad_reg (inst.operands[0].reg); + reject_bad_reg (inst.operands[1].reg); + if (!narrow) { if (inst.operands[2].isreg) { + reject_bad_reg (inst.operands[2].reg); inst.instruction = THUMB_OP32 (inst.instruction); inst.instruction |= inst.operands[0].reg << 8; inst.instruction |= inst.operands[1].reg << 16; @@ -10171,7 +10965,7 @@ do_t_shift (void) case SHIFT_ROR: inst.instruction = T_OPCODE_ROR_R; break; default: abort (); } - + inst.instruction |= inst.operands[0].reg; inst.instruction |= inst.operands[2].reg << 3; } @@ -10210,7 +11004,7 @@ do_t_shift (void) case T_MNEM_ror: inst.instruction = T_OPCODE_ROR_R; break; default: abort (); } - + inst.instruction |= inst.operands[0].reg; inst.instruction |= inst.operands[2].reg << 3; } @@ -10234,9 +11028,19 @@ do_t_shift (void) static void do_t_simd (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[2].reg; + unsigned Rd, Rn, Rm; + + Rd = inst.operands[0].reg; + Rn = inst.operands[1].reg; + Rm = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; } static void @@ -10252,34 +11056,63 @@ do_t_smc (void) } static void -do_t_ssat (void) +do_t_ssat_usat (int bias) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].imm - 1; - inst.instruction |= inst.operands[2].reg << 16; + unsigned Rd, Rn; + + Rd = inst.operands[0].reg; + Rn = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + + inst.instruction |= Rd << 8; + inst.instruction |= inst.operands[1].imm - bias; + inst.instruction |= Rn << 16; if (inst.operands[3].present) { + offsetT shift_amount = inst.reloc.exp.X_add_number; + + inst.reloc.type = BFD_RELOC_UNUSED; + constraint (inst.reloc.exp.X_op != O_constant, _("expression too complex")); - if (inst.reloc.exp.X_add_number != 0) + if (shift_amount != 0) { + constraint (shift_amount > 31, + _("shift expression is too large")); + if (inst.operands[3].shift_kind == SHIFT_ASR) - inst.instruction |= 0x00200000; /* sh bit */ - inst.instruction |= (inst.reloc.exp.X_add_number & 0x1c) << 10; - inst.instruction |= (inst.reloc.exp.X_add_number & 0x03) << 6; + inst.instruction |= 0x00200000; /* sh bit. */ + + inst.instruction |= (shift_amount & 0x1c) << 10; + inst.instruction |= (shift_amount & 0x03) << 6; } - inst.reloc.type = BFD_RELOC_UNUSED; } } +static void +do_t_ssat (void) +{ + do_t_ssat_usat (1); +} + static void do_t_ssat16 (void) { - inst.instruction |= inst.operands[0].reg << 8; + unsigned Rd, Rn; + + Rd = inst.operands[0].reg; + Rn = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + + inst.instruction |= Rd << 8; inst.instruction |= inst.operands[1].imm - 1; - inst.instruction |= inst.operands[2].reg << 16; + inst.instruction |= Rn << 16; } static void @@ -10318,29 +11151,48 @@ do_t_strexd (void) static void do_t_sxtah (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg << 16; - inst.instruction |= inst.operands[2].reg; + unsigned Rd, Rn, Rm; + + Rd = inst.operands[0].reg; + Rn = inst.operands[1].reg; + Rm = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + reject_bad_reg (Rm); + + inst.instruction |= Rd << 8; + inst.instruction |= Rn << 16; + inst.instruction |= Rm; inst.instruction |= inst.operands[3].imm << 4; } static void do_t_sxth (void) { - if (inst.instruction <= 0xffff && inst.size_req != 4 - && inst.operands[0].reg <= 7 && inst.operands[1].reg <= 7 + unsigned Rd, Rm; + + Rd = inst.operands[0].reg; + Rm = inst.operands[1].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rm); + + if (inst.instruction <= 0xffff + && inst.size_req != 4 + && Rd <= 7 && Rm <= 7 && (!inst.operands[2].present || inst.operands[2].imm == 0)) { inst.instruction = THUMB_OP16 (inst.instruction); - inst.instruction |= inst.operands[0].reg; - inst.instruction |= inst.operands[1].reg << 3; + inst.instruction |= Rd; + inst.instruction |= Rm << 3; } else if (unified_syntax) { if (inst.instruction <= 0xffff) inst.instruction = THUMB_OP32 (inst.instruction); - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].reg; + inst.instruction |= Rd << 8; + inst.instruction |= Rm; inst.instruction |= inst.operands[2].imm << 4; } else @@ -10360,52 +11212,49 @@ do_t_swi (void) static void do_t_tb (void) { + unsigned Rn, Rm; int half; half = (inst.instruction & 0x10) != 0; - constraint (current_it_mask && current_it_mask != 0x10, BAD_BRANCH); + set_it_insn_type_last (); constraint (inst.operands[0].immisreg, _("instruction requires register index")); - constraint (inst.operands[0].imm == 15, - _("PC is not a valid index register")); + + Rn = inst.operands[0].reg; + Rm = inst.operands[0].imm; + + constraint (Rn == REG_SP, BAD_SP); + reject_bad_reg (Rm); + constraint (!half && inst.operands[0].shifted, _("instruction does not allow shifted index")); - inst.instruction |= (inst.operands[0].reg << 16) | inst.operands[0].imm; + inst.instruction |= (Rn << 16) | Rm; } static void do_t_usat (void) { - inst.instruction |= inst.operands[0].reg << 8; - inst.instruction |= inst.operands[1].imm; - inst.instruction |= inst.operands[2].reg << 16; - - if (inst.operands[3].present) - { - constraint (inst.reloc.exp.X_op != O_constant, - _("expression too complex")); - if (inst.reloc.exp.X_add_number != 0) - { - if (inst.operands[3].shift_kind == SHIFT_ASR) - inst.instruction |= 0x00200000; /* sh bit */ - - inst.instruction |= (inst.reloc.exp.X_add_number & 0x1c) << 10; - inst.instruction |= (inst.reloc.exp.X_add_number & 0x03) << 6; - } - inst.reloc.type = BFD_RELOC_UNUSED; - } + do_t_ssat_usat (0); } static void do_t_usat16 (void) { - inst.instruction |= inst.operands[0].reg << 8; + unsigned Rd, Rn; + + Rd = inst.operands[0].reg; + Rn = inst.operands[2].reg; + + reject_bad_reg (Rd); + reject_bad_reg (Rn); + + inst.instruction |= Rd << 8; inst.instruction |= inst.operands[1].imm; - inst.instruction |= inst.operands[2].reg << 16; + inst.instruction |= Rn << 16; } /* Neon instruction encoder helpers. */ - + /* Encodings for the different types for various Neon opcodes. */ /* An "invalid" code for the following tables. */ @@ -10417,7 +11266,7 @@ struct neon_tab_entry 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), \ @@ -10432,7 +11281,7 @@ struct neon_tab_entry 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. */ \ + vcge / vcgt with the operands reversed. */ \ X(vclt, 0x0000300, 0x1200e00, 0x1b10200), \ X(vcle, 0x0000310, 0x1000e00, 0x1b10180), \ X(vmla, 0x0000900, 0x0000d10, 0x0800040), \ @@ -10515,13 +11364,12 @@ NEON_ENC_TAB S - Scalar R - ARM register L - D 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. -*/ + - a table used to drive neon_select_shape. */ #define NEON_SHAPE_DEF \ X(3, (D, D, D), DOUBLE), \ @@ -10652,36 +11500,37 @@ static struct neon_shape_info neon_shape_tab[] = 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_S8 = 0x0000001, + N_S16 = 0x0000002, + N_S32 = 0x0000004, + N_S64 = 0x0000008, + N_U8 = 0x0000010, + N_U16 = 0x0000020, + N_U32 = 0x0000040, + N_U64 = 0x0000080, + N_I8 = 0x0000100, + N_I16 = 0x0000200, + N_I32 = 0x0000400, + N_I64 = 0x0000800, + N_8 = 0x0001000, + N_16 = 0x0002000, + N_32 = 0x0004000, + N_64 = 0x0008000, + N_P8 = 0x0010000, + N_P16 = 0x0020000, + N_F16 = 0x0040000, + N_F32 = 0x0080000, + N_F64 = 0x0100000, + N_KEY = 0x1000000, /* Key element (main type specifier). */ + N_EQK = 0x2000000, /* Given operand has the same type & size as the key. */ + N_VFP = 0x4000000, /* VFP mode: operand size must match register width. */ + N_DBL = 0x0000001, /* If N_EQK, this operand is twice the size. */ + N_HLF = 0x0000002, /* If N_EQK, this operand is half the size. */ + N_SGN = 0x0000004, /* If N_EQK, this operand is forced to be signed. */ + N_UNS = 0x0000008, /* If N_EQK, this operand is forced to be unsigned. */ + N_INT = 0x0000010, /* If N_EQK, this operand is forced to be integer. */ + N_FLT = 0x0000020, /* If N_EQK, this operand is forced to be float. */ + N_SIZ = 0x0000040, /* If N_EQK, this operand is forced to be size-only. */ N_UTYP = 0, N_MAX_NONSPECIAL = N_F64 }; @@ -10719,7 +11568,7 @@ neon_select_shape (enum neon_shape shape, ...) inst.operands[1] = inst.operands[0]; va_start (ap, shape); - + for (; shape != NS_NULL; shape = va_arg (ap, int)) { unsigned j; @@ -10784,7 +11633,7 @@ neon_select_shape (enum neon_shape shape, ...) if (matches) break; } - + va_end (ap); if (shape == NS_NULL && first_shape != NS_NULL) @@ -10826,7 +11675,7 @@ neon_modify_type_size (unsigned typebits, enum neon_el_type *g_type, *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. */ @@ -10835,9 +11684,9 @@ 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); - + + gas_assert ((thisarg & N_EQK) != 0); + neon_modify_type_size (thisarg, &dest.type, &dest.size); return dest; @@ -10875,6 +11724,7 @@ type_chk_of_el_type (enum neon_el_type type, unsigned size) case NT_float: switch (size) { + case 16: return N_F16; case 32: return N_F32; case 64: return N_F64; default: ; @@ -10914,7 +11764,7 @@ type_chk_of_el_type (enum neon_el_type type, unsigned size) default: ; } - + return N_UTYP; } @@ -10953,7 +11803,7 @@ el_type_of_type_chk (enum neon_el_type *type, unsigned *size, *type = NT_float; else return FAIL; - + return SUCCESS; } @@ -10967,9 +11817,9 @@ modify_types_allowed (unsigned allowed, unsigned mods) 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) @@ -10978,7 +11828,7 @@ modify_types_allowed (unsigned allowed, unsigned mods) destmask |= type_chk_of_el_type (type, size); } } - + return destmask; } @@ -11132,7 +11982,7 @@ neon_check_type (unsigned els, enum neon_shape ns, ...) return badtype; } } - + if ((thisarg & N_EQK) == 0) { unsigned given_type = type_chk_of_el_type (g_type, g_size); @@ -11186,7 +12036,7 @@ static void do_vfp_nsyn_opcode (const char *opname) { const struct asm_opcode *opcode; - + opcode = hash_find (arm_ops_hsh, opname); if (!opcode) @@ -11245,7 +12095,7 @@ try_vfp_nsyn (int args, void (*pfn) (enum neon_shape)) 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, @@ -11271,7 +12121,7 @@ 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) @@ -11347,7 +12197,7 @@ 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 @@ -11360,7 +12210,7 @@ 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 @@ -11373,7 +12223,7 @@ 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); @@ -11394,7 +12244,7 @@ do_vfp_nsyn_cmp (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) { inst.instruction = NEON_ENC_SINGLE (inst.instruction); @@ -11422,7 +12272,7 @@ do_vfp_nsyn_cmp (void) default: abort (); } - + if (rs == NS_FI) { inst.instruction = NEON_ENC_SINGLE (inst.instruction); @@ -11442,7 +12292,7 @@ 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].reg = REG_SP; inst.operands[0].isreg = 1; inst.operands[0].writeback = 1; inst.operands[0].present = 1; @@ -11479,14 +12329,14 @@ neon_dp_fixup (unsigned i) /* 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; } @@ -11506,7 +12356,7 @@ neon_logbits (unsigned x) |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. */ @@ -11523,7 +12373,7 @@ neon_three_same (int isquad, int ubit, int size) inst.instruction |= (ubit != 0) << 24; if (size != -1) inst.instruction |= neon_logbits (size) << 20; - + inst.instruction = neon_dp_fixup (inst.instruction); } @@ -11752,7 +12602,7 @@ neon_qfloat_bits (unsigned imm) 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 + MVN). If the immediate looks like a repeated pattern then also try smaller element sizes. */ static int @@ -11929,10 +12779,10 @@ do_neon_logic (void) 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; @@ -11953,23 +12803,23 @@ do_neon_logic (void) 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 (); } @@ -11982,7 +12832,7 @@ do_neon_logic (void) inst.instruction |= HI1 (inst.operands[0].reg) << 22; inst.instruction |= cmode << 8; neon_write_immbits (immbits); - + inst.instruction = neon_dp_fixup (inst.instruction); } } @@ -12075,14 +12925,14 @@ vfp_or_neon_is_neon (unsigned check) 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; } @@ -12150,7 +13000,7 @@ neon_compare (unsigned regtypes, unsigned immtypes, int invert) 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); } } @@ -12191,7 +13041,7 @@ neon_scalar_for_mul (unsigned scalar, unsigned elsize) if (regno > 7 || elno > 3) goto bad_scalar; return regno | (elno << 3); - + case 32: if (regno > 15 || elno > 1) goto bad_scalar; @@ -12215,7 +13065,7 @@ neon_mul_mac (struct neon_type_el et, int ubit) /* 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; @@ -12334,7 +13184,7 @@ 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; @@ -12343,7 +13193,7 @@ do_neon_abs_neg (void) 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); @@ -12351,7 +13201,7 @@ do_neon_abs_neg (void) 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); } @@ -12432,7 +13282,7 @@ do_neon_rshift_sat_narrow (void) /* This gets the bounds check, size encoding and immediate bits calculation right. */ et.size /= 2; - + /* VQ{R}SHRN.I
, , #0 is a synonym for VQMOVN.I
, . */ if (imm == 0) @@ -12442,7 +13292,7 @@ do_neon_rshift_sat_narrow (void) 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); @@ -12496,7 +13346,7 @@ do_neon_rshift_narrow (void) /* 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
, */ if (imm == 0) @@ -12506,7 +13356,7 @@ do_neon_rshift_narrow (void) 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); @@ -12529,7 +13379,7 @@ do_neon_shll (void) 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 @@ -12563,31 +13413,34 @@ neon_cvt_flavour (enum neon_shape rs) "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); - + /* Half-precision conversions. */ + CVT_VAR (4, N_F32, N_F16); + CVT_VAR (5, N_F16, N_F32); + 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); + CVT_VAR (6, N_F32, N_F64); + CVT_VAR (7, N_F64, N_F32); + CVT_VAR (8, N_S32, N_F64 | key); + CVT_VAR (9, N_U32, N_F64 | key); + CVT_VAR (10, N_F64 | key, N_S32); + CVT_VAR (11, 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); - + CVT_VAR (12, N_F32 | key, N_S16); + CVT_VAR (13, N_F32 | key, N_U16); + CVT_VAR (14, N_F64 | key, N_S16); + CVT_VAR (15, N_F64 | key, N_U16); + CVT_VAR (16, N_S16, N_F32 | key); + CVT_VAR (17, N_U16, N_F32 | key); + CVT_VAR (18, N_S16, N_F64 | key); + CVT_VAR (19, N_U16, N_F64 | key); + return -1; #undef CVT_VAR } @@ -12598,7 +13451,7 @@ 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. */ @@ -12610,6 +13463,8 @@ do_vfp_nsyn_cvt (enum neon_shape rs, int flavour) "fultos", NULL, NULL, + NULL, + NULL, "ftosld", "ftould", "fsltod", @@ -12642,6 +13497,8 @@ do_vfp_nsyn_cvt (enum neon_shape rs, int flavour) "ftouis", "fsitos", "fuitos", + "NULL", + "NULL", "fcvtsd", "fcvtds", "ftosid", @@ -12671,6 +13528,8 @@ do_vfp_nsyn_cvtz (void) NULL, NULL, NULL, + NULL, + NULL, "ftosizd", "ftouizd" }; @@ -12683,11 +13542,11 @@ 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); + NS_FD, NS_DF, NS_FF, NS_QD, NS_DQ, NS_NULL); int flavour = neon_cvt_flavour (rs); /* VFP rather than Neon conversions. */ - if (flavour >= 4) + if (flavour >= 6) { do_vfp_nsyn_cvt (rs, flavour); return; @@ -12698,6 +13557,9 @@ do_neon_cvt (void) case NS_DDI: case NS_QQI: { + unsigned immbits; + unsigned enctab[] = { 0x0000100, 0x1000100, 0x0, 0x1000000 }; + if (vfp_or_neon_is_neon (NEON_CHECK_CC | NEON_CHECK_ARCH) == FAIL) return; @@ -12705,8 +13567,7 @@ do_neon_cvt (void) 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 }; + immbits = 32 - inst.operands[2].imm; inst.instruction = NEON_ENC_IMMED (inst.instruction); if (flavour != -1) inst.instruction |= enctab[flavour]; @@ -12747,12 +13608,70 @@ do_neon_cvt (void) } break; + /* Half-precision conversions for Advanced SIMD -- neon. */ + case NS_QD: + case NS_DQ: + + if ((rs == NS_DQ) + && (inst.vectype.el[0].size != 16 || inst.vectype.el[1].size != 32)) + { + as_bad (_("operand size must match register width")); + break; + } + + if ((rs == NS_QD) + && ((inst.vectype.el[0].size != 32 || inst.vectype.el[1].size != 16))) + { + as_bad (_("operand size must match register width")); + break; + } + + if (rs == NS_DQ) + inst.instruction = 0x3b60600; + else + inst.instruction = 0x3b60700; + + 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_dp_fixup (inst.instruction); + break; + default: /* Some VFP conversions go here (s32 <-> f32, u32 <-> f32). */ do_vfp_nsyn_cvt (rs, flavour); } } +static void +do_neon_cvtb (void) +{ + inst.instruction = 0xeb20a40; + + /* The sizes are attached to the mnemonic. */ + if (inst.vectype.el[0].type != NT_invtype + && inst.vectype.el[0].size == 16) + inst.instruction |= 0x00010000; + + /* Programmer's syntax: the sizes are attached to the operands. */ + else if (inst.operands[0].vectype.type != NT_invtype + && inst.operands[0].vectype.size == 16) + inst.instruction |= 0x00010000; + + encode_arm_vfp_reg (inst.operands[0].reg, VFP_REG_Sd); + encode_arm_vfp_reg (inst.operands[1].reg, VFP_REG_Sm); + do_vfp_cond_or_thumb (); +} + + +static void +do_neon_cvtt (void) +{ + do_neon_cvtb (); + inst.instruction |= 0x80; +} + static void neon_move_immediate (void) { @@ -12811,7 +13730,7 @@ 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; @@ -12831,9 +13750,7 @@ do_neon_mvn (void) /* 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 | - -*/ + | 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) @@ -12846,7 +13763,7 @@ neon_mixed_length (struct neon_type_el et, unsigned size) 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); } @@ -12943,7 +13860,9 @@ do_neon_ext (void) 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")); + + constraint (imm >= (unsigned) (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; @@ -12952,7 +13871,7 @@ do_neon_ext (void) 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); } @@ -12967,7 +13886,7 @@ do_neon_rev (void) 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); + gas_assert (elsize != 0); constraint (et.size >= elsize, _("elements must be smaller than reversal region")); neon_two_same (neon_quad (rs), 1, et.size); @@ -12997,7 +13916,7 @@ do_neon_dup (void) inst.instruction |= neon_quad (rs) << 6; inst.instruction |= x << 17; inst.instruction |= sizebits << 16; - + inst.instruction = neon_dp_fixup (inst.instruction); } else @@ -13053,18 +13972,17 @@ do_neon_dup (void) (Two ARM regs to two VFP singles.) 15. VMOV , , , (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). -*/ + can specify a type where it doesn't make sense to, and is ignored). */ static void do_neon_mov (void) @@ -13107,7 +14025,7 @@ do_neon_mov (void) 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; @@ -13126,7 +14044,7 @@ do_neon_mov (void) neon_move_immediate (); inst.instruction = neon_dp_fixup (inst.instruction); break; - + case NS_SR: /* case 4. */ { unsigned bcdebits = 0; @@ -13162,7 +14080,7 @@ do_neon_mov (void) 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)); @@ -13174,7 +14092,7 @@ do_neon_mov (void) 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, @@ -13209,7 +14127,7 @@ do_neon_mov (void) 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)); @@ -13221,11 +14139,11 @@ do_neon_mov (void) 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: @@ -13237,15 +14155,15 @@ do_neon_mov (void) 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 @@ -13257,7 +14175,7 @@ do_neon_mov (void) 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")); @@ -13267,7 +14185,7 @@ do_neon_mov (void) memset (&inst.operands[3], '\0', sizeof (inst.operands[3])); do_vfp_nsyn_opcode ("fmsrr"); break; - + default: abort (); } @@ -13398,13 +14316,13 @@ 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; @@ -13413,7 +14331,7 @@ do_neon_tbl_tbx (void) 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); } @@ -13443,7 +14361,7 @@ do_neon_ldm_stm (void) inst.instruction |= HI1 (inst.operands[1].reg) << 22; inst.instruction |= offsetbits; - + do_vfp_cond_or_thumb (); } @@ -13451,7 +14369,7 @@ static void do_neon_ldr_str (void) { int is_ldr = (inst.instruction & (1 << 20)) != 0; - + if (inst.operands[0].issingle) { if (is_ldr) @@ -13527,7 +14445,7 @@ do_neon_ld_st_interleave (void) | (((inst.instruction >> 8) & 3) << 3); typebits = typetable[idx]; - + constraint (typebits == -1, _("bad list type for instruction")); inst.instruction &= ~0xf00; @@ -13544,13 +14462,13 @@ 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 @@ -13571,7 +14489,7 @@ neon_alignment_bit (int size, int align, int *do_align, ...) *do_align = 1; else first_error (_("unsupported alignment for instruction")); - + return result; } @@ -13584,10 +14502,10 @@ do_neon_ld_st_lane (void) 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, @@ -13595,7 +14513,7 @@ do_neon_ld_st_lane (void) 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. */ @@ -13655,7 +14573,7 @@ do_neon_ld_st_lane (void) /* 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; } @@ -13674,7 +14592,7 @@ do_neon_ld_dup (void) switch ((inst.instruction >> 8) & 3) { case 0: /* VLD1. */ - assert (NEON_REG_STRIDE (inst.operands[0].imm) != 2); + gas_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) @@ -13746,12 +14664,12 @@ do_neon_ldx_stx (void) 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 (); @@ -13761,7 +14679,7 @@ do_neon_ldx_stx (void) 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; @@ -13776,14 +14694,13 @@ do_neon_ldx_stx (void) inst.instruction |= 0xd; } else - inst.instruction |= 0xf; - + inst.instruction |= 0xf; + if (thumb_mode) inst.instruction |= 0xf9000000; else inst.instruction |= 0xf4000000; } - /* Overall per-instruction processing. */ @@ -13874,23 +14791,29 @@ output_inst (const char * str) as_bad ("%s -- `%s'", inst.error, str); return; } - if (inst.relax) { - output_relax_insn(); + if (inst.relax) + { + output_relax_insn (); return; - } + } if (inst.size == 0) return; to = frag_more (inst.size); + /* PR 9814: Record the thumb mode into the current frag so that we know + what type of NOP padding to use, if necessary. We override any previous + setting so that if the mode has changed then the NOPS that we use will + match the encoding of the last instruction in the frag. */ + frag_now->tc_frag_data.thumb_mode = thumb_mode | MODE_RECORDED; if (thumb_mode && (inst.size > THUMB_SIZE)) { - assert (inst.size == (2 * THUMB_SIZE)); + gas_assert (inst.size == (2 * THUMB_SIZE)); put_thumb32_insn (to, inst.instruction); } else if (inst.size > INSN_SIZE) { - assert (inst.size == (2 * INSN_SIZE)); + gas_assert (inst.size == (2 * INSN_SIZE)); md_number_to_chars (to, inst.instruction, INSN_SIZE); md_number_to_chars (to + INSN_SIZE, inst.instruction, INSN_SIZE); } @@ -13905,6 +14828,28 @@ output_inst (const char * str) dwarf2_emit_insn (inst.size); } +static char * +output_it_inst (int cond, int mask, char * to) +{ + unsigned long instruction = 0xbf00; + + mask &= 0xf; + instruction |= mask; + instruction |= cond << 4; + + if (to == NULL) + { + to = frag_more (2); +#ifdef OBJ_ELF + dwarf2_emit_insn (2); +#endif + } + + md_number_to_chars (to, instruction, 2); + + return to; +} + /* Tag values used in struct asm_opcode's tag field. */ enum opcode_tag { @@ -14000,7 +14945,7 @@ opcode_lookup (char **str) 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, @@ -14010,13 +14955,13 @@ opcode_lookup (char **str) break; if (end == base) - return 0; + return NULL; /* Handle a possible width suffix and/or Neon type suffix. */ if (end[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') @@ -14030,15 +14975,15 @@ opcode_lookup (char **str) *str = end + offset; - if (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; + return NULL; } else if (end[offset] != '\0' && end[offset] != ' ') - return 0; + return NULL; } else *str = end; @@ -14054,11 +14999,11 @@ opcode_lookup (char **str) return opcode; } - if (unified_syntax) + if (warn_on_deprecated && unified_syntax) as_warn (_("conditional infixes are deprecated in unified syntax")); affix = base + (opcode->tag - OT_odd_infix_0); cond = hash_find_n (arm_cond_hsh, affix, 2); - assert (cond); + gas_assert (cond); inst.cond = cond->value; return opcode; @@ -14067,7 +15012,7 @@ opcode_lookup (char **str) /* Cannot have a conditional suffix on a mnemonic of less than two characters. */ if (end - base < 3) - return 0; + return NULL; /* Look for suffixed mnemonic. */ affix = end - 2; @@ -14098,56 +15043,368 @@ opcode_lookup (char **str) case OT_unconditional: case OT_unconditionalF: if (thumb_mode) - { - inst.cond = cond->value; - } + inst.cond = cond->value; else { - /* delayed diagnostic */ + /* Delayed diagnostic. */ inst.error = BAD_COND; inst.cond = COND_ALWAYS; } return opcode; default: - return 0; + return NULL; } } /* Cannot have a usual-position infix on a mnemonic of less than six characters (five would be a suffix). */ if (end - base < 6) - return 0; + return NULL; /* Look for infixed mnemonic in the usual position. */ affix = base + 3; cond = hash_find_n (arm_cond_hsh, affix, 2); if (!cond) - return 0; + return NULL; + + memcpy (save, affix, 2); + memmove (affix, affix + 2, (end - affix) - 2); + opcode = hash_find_n (arm_ops_hsh, base, (end - base) - 2); + memmove (affix + 2, affix, (end - affix) - 2); + memcpy (affix, save, 2); + + 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 (warn_on_deprecated && unified_syntax + && (opcode->tag == OT_cinfix3 + || opcode->tag == OT_cinfix3_deprecated)) + as_warn (_("conditional infixes are deprecated in unified syntax")); + + inst.cond = cond->value; + return opcode; + } + + return NULL; +} + +/* This function generates an initial IT instruction, leaving its block + virtually open for the new instructions. Eventually, + the mask will be updated by now_it_add_mask () each time + a new instruction needs to be included in the IT block. + Finally, the block is closed with close_automatic_it_block (). + The block closure can be requested either from md_assemble (), + a tencode (), or due to a label hook. */ + +static void +new_automatic_it_block (int cond) +{ + now_it.state = AUTOMATIC_IT_BLOCK; + now_it.mask = 0x18; + now_it.cc = cond; + now_it.block_length = 1; + mapping_state (MAP_THUMB); + now_it.insn = output_it_inst (cond, now_it.mask, NULL); +} + +/* Close an automatic IT block. + See comments in new_automatic_it_block (). */ + +static void +close_automatic_it_block (void) +{ + now_it.mask = 0x10; + now_it.block_length = 0; +} + +/* Update the mask of the current automatically-generated IT + instruction. See comments in new_automatic_it_block (). */ + +static void +now_it_add_mask (int cond) +{ +#define CLEAR_BIT(value, nbit) ((value) & ~(1 << (nbit))) +#define SET_BIT_VALUE(value, bitvalue, nbit) (CLEAR_BIT (value, nbit) \ + | ((bitvalue) << (nbit))) + const int resulting_bit = (cond & 1); + + now_it.mask &= 0xf; + now_it.mask = SET_BIT_VALUE (now_it.mask, + resulting_bit, + (5 - now_it.block_length)); + now_it.mask = SET_BIT_VALUE (now_it.mask, + 1, + ((5 - now_it.block_length) - 1) ); + output_it_inst (now_it.cc, now_it.mask, now_it.insn); + +#undef CLEAR_BIT +#undef SET_BIT_VALUE +} + +/* The IT blocks handling machinery is accessed through the these functions: + it_fsm_pre_encode () from md_assemble () + set_it_insn_type () optional, from the tencode functions + set_it_insn_type_last () ditto + in_it_block () ditto + it_fsm_post_encode () from md_assemble () + force_automatic_it_block_close () from label habdling functions + + Rationale: + 1) md_assemble () calls it_fsm_pre_encode () before calling tencode (), + initializing the IT insn type with a generic initial value depending + on the inst.condition. + 2) During the tencode function, two things may happen: + a) The tencode function overrides the IT insn type by + calling either set_it_insn_type (type) or set_it_insn_type_last (). + b) The tencode function queries the IT block state by + calling in_it_block () (i.e. to determine narrow/not narrow mode). + + Both set_it_insn_type and in_it_block run the internal FSM state + handling function (handle_it_state), because: a) setting the IT insn + type may incur in an invalid state (exiting the function), + and b) querying the state requires the FSM to be updated. + Specifically we want to avoid creating an IT block for conditional + branches, so it_fsm_pre_encode is actually a guess and we can't + determine whether an IT block is required until the tencode () routine + has decided what type of instruction this actually it. + Because of this, if set_it_insn_type and in_it_block have to be used, + set_it_insn_type has to be called first. + + set_it_insn_type_last () is a wrapper of set_it_insn_type (type), that + determines the insn IT type depending on the inst.cond code. + When a tencode () routine encodes an instruction that can be + either outside an IT block, or, in the case of being inside, has to be + the last one, set_it_insn_type_last () will determine the proper + IT instruction type based on the inst.cond code. Otherwise, + set_it_insn_type can be called for overriding that logic or + for covering other cases. + + Calling handle_it_state () may not transition the IT block state to + OUTSIDE_IT_BLOCK immediatelly, since the (current) state could be + still queried. Instead, if the FSM determines that the state should + be transitioned to OUTSIDE_IT_BLOCK, a flag is marked to be closed + after the tencode () function: that's what it_fsm_post_encode () does. + + Since in_it_block () calls the state handling function to get an + updated state, an error may occur (due to invalid insns combination). + In that case, inst.error is set. + Therefore, inst.error has to be checked after the execution of + the tencode () routine. + + 3) Back in md_assemble(), it_fsm_post_encode () is called to commit + any pending state change (if any) that didn't take place in + handle_it_state () as explained above. */ + +static void +it_fsm_pre_encode (void) +{ + if (inst.cond != COND_ALWAYS) + inst.it_insn_type = INSIDE_IT_INSN; + else + inst.it_insn_type = OUTSIDE_IT_INSN; + + now_it.state_handled = 0; +} + +/* IT state FSM handling function. */ + +static int +handle_it_state (void) +{ + now_it.state_handled = 1; + + switch (now_it.state) + { + case OUTSIDE_IT_BLOCK: + switch (inst.it_insn_type) + { + case OUTSIDE_IT_INSN: + break; + + case INSIDE_IT_INSN: + case INSIDE_IT_LAST_INSN: + if (thumb_mode == 0) + { + if (unified_syntax + && !(implicit_it_mode & IMPLICIT_IT_MODE_ARM)) + as_tsktsk (_("Warning: conditional outside an IT block"\ + " for Thumb.")); + } + else + { + if ((implicit_it_mode & IMPLICIT_IT_MODE_THUMB) + && ARM_CPU_HAS_FEATURE (cpu_variant, arm_arch_t2)) + { + /* Automatically generate the IT instruction. */ + new_automatic_it_block (inst.cond); + if (inst.it_insn_type == INSIDE_IT_LAST_INSN) + close_automatic_it_block (); + } + else + { + inst.error = BAD_OUT_IT; + return FAIL; + } + } + break; + + case IF_INSIDE_IT_LAST_INSN: + case NEUTRAL_IT_INSN: + break; + + case IT_INSN: + now_it.state = MANUAL_IT_BLOCK; + now_it.block_length = 0; + break; + } + break; + + case AUTOMATIC_IT_BLOCK: + /* Three things may happen now: + a) We should increment current it block size; + b) We should close current it block (closing insn or 4 insns); + c) We should close current it block and start a new one (due + to incompatible conditions or + 4 insns-length block reached). */ + + switch (inst.it_insn_type) + { + case OUTSIDE_IT_INSN: + /* The closure of the block shall happen immediatelly, + so any in_it_block () call reports the block as closed. */ + force_automatic_it_block_close (); + break; + + case INSIDE_IT_INSN: + case INSIDE_IT_LAST_INSN: + case IF_INSIDE_IT_LAST_INSN: + now_it.block_length++; + + if (now_it.block_length > 4 + || !now_it_compatible (inst.cond)) + { + force_automatic_it_block_close (); + if (inst.it_insn_type != IF_INSIDE_IT_LAST_INSN) + new_automatic_it_block (inst.cond); + } + else + { + now_it_add_mask (inst.cond); + } + + if (now_it.state == AUTOMATIC_IT_BLOCK + && (inst.it_insn_type == INSIDE_IT_LAST_INSN + || inst.it_insn_type == IF_INSIDE_IT_LAST_INSN)) + close_automatic_it_block (); + break; + + case NEUTRAL_IT_INSN: + now_it.block_length++; + + if (now_it.block_length > 4) + force_automatic_it_block_close (); + else + now_it_add_mask (now_it.cc & 1); + break; + + case IT_INSN: + close_automatic_it_block (); + now_it.state = MANUAL_IT_BLOCK; + break; + } + break; + + case MANUAL_IT_BLOCK: + { + /* Check conditional suffixes. */ + const int cond = now_it.cc ^ ((now_it.mask >> 4) & 1) ^ 1; + int is_last; + now_it.mask <<= 1; + now_it.mask &= 0x1f; + is_last = (now_it.mask == 0x10); + + switch (inst.it_insn_type) + { + case OUTSIDE_IT_INSN: + inst.error = BAD_NOT_IT; + return FAIL; + + case INSIDE_IT_INSN: + if (cond != inst.cond) + { + inst.error = BAD_IT_COND; + return FAIL; + } + break; + + case INSIDE_IT_LAST_INSN: + case IF_INSIDE_IT_LAST_INSN: + if (cond != inst.cond) + { + inst.error = BAD_IT_COND; + return FAIL; + } + if (!is_last) + { + inst.error = BAD_BRANCH; + return FAIL; + } + break; + + case NEUTRAL_IT_INSN: + /* The BKPT instruction is unconditional even in an IT block. */ + break; + + case IT_INSN: + inst.error = BAD_IT_IT; + return FAIL; + } + } + break; + } + + return SUCCESS; +} + +static void +it_fsm_post_encode (void) +{ + int is_last; - memcpy (save, affix, 2); - memmove (affix, affix + 2, (end - affix) - 2); - opcode = hash_find_n (arm_ops_hsh, base, (end - base) - 2); - memmove (affix + 2, affix, (end - affix) - 2); - memcpy (affix, save, 2); + if (!now_it.state_handled) + handle_it_state (); - if (opcode - && (opcode->tag == OT_cinfix3 - || opcode->tag == OT_cinfix3_deprecated - || opcode->tag == OT_csuf_or_in3 - || opcode->tag == OT_cinfix3_legacy)) + is_last = (now_it.mask == 0x10); + if (is_last) { - /* step CM */ - if (unified_syntax - && (opcode->tag == OT_cinfix3 - || opcode->tag == OT_cinfix3_deprecated)) - as_warn (_("conditional infixes are deprecated in unified syntax")); + now_it.state = OUTSIDE_IT_BLOCK; + now_it.mask = 0; + } +} - inst.cond = cond->value; - return opcode; +static void +force_automatic_it_block_close (void) +{ + if (now_it.state == AUTOMATIC_IT_BLOCK) + { + close_automatic_it_block (); + now_it.state = OUTSIDE_IT_BLOCK; + now_it.mask = 0; } +} - return 0; +static int +in_it_block (void) +{ + if (!now_it.state_handled) + handle_it_state (); + + return now_it.state != OUTSIDE_IT_BLOCK; } void @@ -14172,14 +15429,14 @@ md_assemble (char *str) { /* It wasn't an instruction, but it might be a register alias of the form alias .req reg, or a Neon .dn/.qn directive. */ - if (!create_register_alias (str, p) - && !create_neon_reg_alias (str, p)) + 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) + if (warn_on_deprecated && 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 @@ -14209,48 +15466,43 @@ 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) + if (!ARM_CPU_HAS_FEATURE (variant, arm_ext_v6t2)) { - int cond; - cond = current_cc ^ ((current_it_mask >> 4) & 1) ^ 1; - current_it_mask <<= 1; - current_it_mask &= 0x1f; - /* The BKPT instruction is unconditional even in an IT block. */ - if (!inst.error - && cond != inst.cond && opcode->tencode != do_t_bkpt) + if (opcode->tencode != do_t_blx && opcode->tencode != do_t_branch23 + && !(ARM_CPU_HAS_FEATURE(*opcode->tvariant, arm_ext_msr) + || ARM_CPU_HAS_FEATURE(*opcode->tvariant, arm_ext_barrier))) { - as_bad (_("incorrect condition in IT block")); - return; + /* Two things are addressed here. + 1) Implicit require narrow instructions on Thumb-1. + This avoids relaxation accidentally introducing Thumb-2 + instructions. + 2) Reject wide instructions in non Thumb-2 cores. */ + if (inst.size_req == 0) + inst.size_req = 2; + else if (inst.size_req == 4) + { + as_bad (_("selected processor does not support `%s'"), str); + return; + } } } - else if (inst.cond != COND_ALWAYS && opcode->tencode != do_t_branch) - { - as_bad (_("thumb conditional instrunction not in IT block")); - return; - } - mapping_state (MAP_THUMB); inst.instruction = opcode->tvalue; if (!parse_operands (p, opcode->operands)) - opcode->tencode (); + { + /* Prepare the it_insn_type for those encodings that don't set + it. */ + it_fsm_pre_encode (); + + opcode->tencode (); - /* Clear current_it_mask at the end of an IT block. */ - if (current_it_mask == 0x10) - current_it_mask = 0; + it_fsm_post_encode (); + } if (!(inst.error || inst.relax)) { - assert (inst.instruction < 0xe800 || inst.instruction > 0xffff); + gas_assert (inst.instruction < 0xe800 || inst.instruction > 0xffff); inst.size = (inst.instruction > 0xffff ? 4 : 2); if (inst.size_req && inst.size_req != inst.size) { @@ -14261,24 +15513,37 @@ md_assemble (char *str) /* Something has gone badly wrong if we try to relax a fixed size instruction. */ - assert (inst.size_req == 0 || !inst.relax); + gas_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 instructions are seen. ie. - anything other than bl/blx. + anything other than bl/blx and v6-M instructions. This is overly pessimistic for relaxable instructions. */ - if ((inst.size == 4 && (inst.instruction & 0xf800e800) != 0xf000e800) - || inst.relax) + if (((inst.size == 4 && (inst.instruction & 0xf800e800) != 0xf000e800) + || inst.relax) + && !(ARM_CPU_HAS_FEATURE (*opcode->tvariant, arm_ext_msr) + || ARM_CPU_HAS_FEATURE (*opcode->tvariant, arm_ext_barrier))) ARM_MERGE_FEATURE_SETS (thumb_arch_used, thumb_arch_used, arm_ext_v6t2); + + if (!inst.error) + { + mapping_state (MAP_THUMB); + } } else if (ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v1)) { + bfd_boolean is_bx; + + /* bx is allowed on v5 cores, and sometimes on v4 cores. */ + is_bx = (opcode->aencode == do_bx); + /* Check that this instruction is supported for this CPU. */ - if (!opcode->avariant || - !ARM_CPU_HAS_FEATURE (cpu_variant, *opcode->avariant)) + if (!(is_bx && fix_v4bx) + && !(opcode->avariant && + ARM_CPU_HAS_FEATURE (cpu_variant, *opcode->avariant))) { as_bad (_("selected processor does not support `%s'"), str); return; @@ -14289,7 +15554,6 @@ md_assemble (char *str) return; } - mapping_state (MAP_ARM); inst.instruction = opcode->avalue; if (opcode->tag == OT_unconditionalF) inst.instruction |= 0xF << 28; @@ -14297,15 +15561,22 @@ md_assemble (char *str) inst.instruction |= inst.cond << 28; inst.size = INSN_SIZE; if (!parse_operands (p, opcode->operands)) - opcode->aencode (); + { + it_fsm_pre_encode (); + opcode->aencode (); + it_fsm_post_encode (); + } /* Arm mode bx is marked as both v4T and v5 because it's still required on a hypothetical non-thumb v5 core. */ - if (ARM_CPU_HAS_FEATURE (*opcode->avariant, arm_ext_v4t) - || ARM_CPU_HAS_FEATURE (*opcode->avariant, arm_ext_v5)) + if (is_bx) ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used, arm_ext_v4t); else ARM_MERGE_FEATURE_SETS (arm_arch_used, arm_arch_used, *opcode->avariant); + if (!inst.error) + { + mapping_state (MAP_ARM); + } } else { @@ -14316,6 +15587,25 @@ md_assemble (char *str) output_inst (str); } +static void +check_it_blocks_finished (void) +{ +#ifdef OBJ_ELF + asection *sect; + + for (sect = stdoutput->sections; sect != NULL; sect = sect->next) + if (seg_info (sect)->tc_segment_info_data.current_it.state + == MANUAL_IT_BLOCK) + { + as_warn (_("section '%s' finished with an open IT block."), + sect->name); + } +#else + if (now_it.state == MANUAL_IT_BLOCK) + as_warn (_("file finished with an open IT block.")); +#endif +} + /* Various frobbings of labels and their addresses. */ void @@ -14335,7 +15625,9 @@ arm_frob_label (symbolS * sym) ARM_SET_INTERWORK (sym, support_interwork); #endif - /* Note - do not allow local symbols (.Lxxx) to be labeled + force_automatic_it_block_close (); + + /* Note - do not allow local symbols (.Lxxx) to be labelled as Thumb functions. This is because these labels, whilst they exist inside Thumb code, are not the entry points for possible ARM->Thumb calls. Also, these labels can be used @@ -14381,7 +15673,7 @@ arm_frob_label (symbolS * sym) dwarf2_emit_label (sym); } -int +bfd_boolean arm_data_in_code (void) { if (thumb_mode && ! strncmp (input_line_pointer + 1, "data:", 5)) @@ -14389,10 +15681,10 @@ arm_data_in_code (void) *input_line_pointer = '/'; input_line_pointer += 5; *input_line_pointer = 0; - return 1; + return TRUE; } - return 0; + return FALSE; } char * @@ -14700,9 +15992,9 @@ static struct asm_barrier_opt barrier_opt_names[] = /* Two variants of the above - TCE for a numeric Thumb opcode, tCE for a T_MNEM_xyz enumerator. */ #define TCE(mnem, aop, top, nops, ops, ae, te) \ - TxCE(mnem, aop, 0x##top, nops, ops, ae, te) + TxCE (mnem, aop, 0x##top, nops, ops, ae, te) #define tCE(mnem, aop, top, nops, ops, ae, te) \ - TxCE(mnem, aop, T_MNEM_##top, nops, ops, ae, te) + TxCE (mnem, aop, T_MNEM_##top, nops, ops, ae, te) /* Second most common sort of mnemonic: has a Thumb variant, takes a conditional infix after the third character. */ @@ -14713,45 +16005,45 @@ static struct asm_barrier_opt barrier_opt_names[] = { #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) + 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) + 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) + 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) + 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. */ #define TxCM_(m1, m2, m3, op, top, nops, ops, ae, te) \ - { #m1 #m2 #m3, OPS##nops ops, sizeof(#m2) == 1 ? OT_odd_infix_unc : OT_odd_infix_0 + sizeof(#m1) - 1, \ + { #m1 #m2 #m3, OPS##nops ops, sizeof (#m2) == 1 ? OT_odd_infix_unc : OT_odd_infix_0 + sizeof (#m1) - 1, \ 0x##op, top, ARM_VARIANT, THUMB_VARIANT, do_##ae, do_##te } #define TxCM(m1, m2, op, top, nops, ops, ae, te) \ - TxCM_(m1, , m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, eq, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, ne, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, cs, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, hs, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, cc, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, ul, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, lo, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, mi, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, pl, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, vs, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, vc, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, hi, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, ls, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, ge, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, lt, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, gt, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, le, m2, op, top, nops, ops, ae, te), \ - TxCM_(m1, al, m2, op, top, nops, ops, ae, te) + TxCM_ (m1, , m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, eq, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, ne, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, cs, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, hs, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, cc, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, ul, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, lo, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, mi, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, pl, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, vs, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, vc, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, hi, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, ls, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, ge, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, lt, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, gt, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, le, m2, op, top, nops, ops, ae, te), \ + TxCM_ (m1, al, m2, op, top, nops, ops, ae, te) #define TCM(m1,m2, aop, top, nops, ops, ae, te) \ - TxCM(m1,m2, aop, 0x##top, nops, ops, ae, te) -#define tCM(m1,m2, aop, top, nops, ops, ae, te) \ - TxCM(m1,m2, aop, T_MNEM_##top, nops, ops, ae, te) + TxCM (m1,m2, aop, 0x##top, nops, ops, ae, te) +#define tCM(m1,m2, aop, top, nops, ops, ae, te) \ + TxCM (m1,m2, aop, T_MNEM_##top, nops, ops, ae, te) /* Mnemonic that cannot be conditionalized. The ARM condition-code field is still 0xE. Many of the Thumb variants can be executed @@ -14798,29 +16090,29 @@ static struct asm_barrier_opt barrier_opt_names[] = #define xCM_(m1, m2, m3, op, nops, ops, ae) \ { #m1 #m2 #m3, OPS##nops ops, \ - sizeof(#m2) == 1 ? OT_odd_infix_unc : OT_odd_infix_0 + sizeof(#m1) - 1, \ + sizeof (#m2) == 1 ? OT_odd_infix_unc : OT_odd_infix_0 + sizeof (#m1) - 1, \ 0x##op, 0x0, ARM_VARIANT, 0, do_##ae, NULL } #define CM(m1, m2, op, nops, ops, ae) \ - xCM_(m1, , m2, op, nops, ops, ae), \ - xCM_(m1, eq, m2, op, nops, ops, ae), \ - xCM_(m1, ne, m2, op, nops, ops, ae), \ - xCM_(m1, cs, m2, op, nops, ops, ae), \ - xCM_(m1, hs, m2, op, nops, ops, ae), \ - xCM_(m1, cc, m2, op, nops, ops, ae), \ - xCM_(m1, ul, m2, op, nops, ops, ae), \ - xCM_(m1, lo, m2, op, nops, ops, ae), \ - xCM_(m1, mi, m2, op, nops, ops, ae), \ - xCM_(m1, pl, m2, op, nops, ops, ae), \ - xCM_(m1, vs, m2, op, nops, ops, ae), \ - xCM_(m1, vc, m2, op, nops, ops, ae), \ - xCM_(m1, hi, m2, op, nops, ops, ae), \ - xCM_(m1, ls, m2, op, nops, ops, ae), \ - xCM_(m1, ge, m2, op, nops, ops, ae), \ - xCM_(m1, lt, m2, op, nops, ops, ae), \ - xCM_(m1, gt, m2, op, nops, ops, ae), \ - xCM_(m1, le, m2, op, nops, ops, ae), \ - xCM_(m1, al, m2, op, nops, ops, ae) + xCM_ (m1, , m2, op, nops, ops, ae), \ + xCM_ (m1, eq, m2, op, nops, ops, ae), \ + xCM_ (m1, ne, m2, op, nops, ops, ae), \ + xCM_ (m1, cs, m2, op, nops, ops, ae), \ + xCM_ (m1, hs, m2, op, nops, ops, ae), \ + xCM_ (m1, cc, m2, op, nops, ops, ae), \ + xCM_ (m1, ul, m2, op, nops, ops, ae), \ + xCM_ (m1, lo, m2, op, nops, ops, ae), \ + xCM_ (m1, mi, m2, op, nops, ops, ae), \ + xCM_ (m1, pl, m2, op, nops, ops, ae), \ + xCM_ (m1, vs, m2, op, nops, ops, ae), \ + xCM_ (m1, vc, m2, op, nops, ops, ae), \ + xCM_ (m1, hi, m2, op, nops, ops, ae), \ + xCM_ (m1, ls, m2, op, nops, ops, ae), \ + xCM_ (m1, ge, m2, op, nops, ops, ae), \ + xCM_ (m1, lt, m2, op, nops, ops, ae), \ + xCM_ (m1, gt, m2, op, nops, ops, ae), \ + xCM_ (m1, le, m2, op, nops, ops, ae), \ + xCM_ (m1, al, m2, op, nops, ops, ae) #define UE(mnem, op, nops, ops, ae) \ { #mnem, OPS##nops ops, OT_unconditional, 0x##op, 0, ARM_VARIANT, 0, do_##ae, NULL } @@ -14848,10 +16140,10 @@ static struct asm_barrier_opt barrier_opt_names[] = THUMB_VARIANT, do_##enc, do_##enc } #define NCE(mnem, op, nops, ops, enc) \ - NCE_tag(mnem, op, nops, ops, enc, OT_csuffix) + 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) + 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) \ @@ -14859,15 +16151,15 @@ static struct asm_barrier_opt barrier_opt_names[] = ARM_VARIANT, THUMB_VARIANT, do_##enc, do_##enc } #define nCE(mnem, op, nops, ops, enc) \ - nCE_tag(mnem, op, nops, ops, enc, OT_csuffix) + 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) + nCE_tag (mnem, op, nops, ops, enc, OT_csuffixF) #define do_0 0 /* Thumb-only, unconditional. */ -#define UT(mnem, op, nops, ops, te) TUE(mnem, 0, op, nops, ops, 0, te) +#define UT(mnem, op, nops, ops, te) TUE (mnem, 0, op, nops, ops, 0, te) static const struct asm_opcode insns[] = { @@ -14948,13 +16240,15 @@ static const struct asm_opcode insns[] = 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 +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6 + TCE(cpy, 1a00000, 4600, 2, (RR, RR), rd_rm, t_cpy), /* V1 instructions with no Thumb analogue prior to V6T2. */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6t2 +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6t2 + TCE(teq, 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), @@ -14983,15 +16277,17 @@ static const struct asm_opcode insns[] = C3(ldmda, 8100000, 2, (RRw, REGLST), ldmstm), C3(ldmfa, 8100000, 2, (RRw, REGLST), ldmstm), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v2 /* ARM 2 - multiplies. */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v4t +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v2 /* ARM 2 - multiplies. */ +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v4t + tCE(mul, 0000090, mul, 3, (RRnpc, RRnpc, oRR), mul, t_mul), tC3(muls, 0100090, muls, 3, (RRnpc, RRnpc, oRR), mul, t_mul), -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6t2 +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6t2 + TCE(mla, 0200090, fb000000, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mlas, t_mla), C3(mlas, 0300090, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mlas), @@ -15004,18 +16300,25 @@ static const struct asm_opcode insns[] = 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), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v2s /* ARM 3 - swp instructions. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v2s /* ARM 3 - swp instructions. */ + CE(swp, 1000090, 3, (RRnpc, RRnpc, RRnpcb), rd_rm_rn), C3(swpb, 1400090, 3, (RRnpc, RRnpc, RRnpcb), rd_rm_rn), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v3 /* ARM 6 Status register instructions. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v3 /* ARM 6 Status register instructions. */ +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_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. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v3m /* ARM 7M long multiplies. */ +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6t2 + TCE(smull, 0c00090, fb800000, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mull, t_mull), CM(smull,s, 0d00090, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mull), TCE(umull, 0800090, fba00000, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mull, t_mull), @@ -15025,10 +16328,11 @@ static const struct asm_opcode insns[] = TCE(umlal, 0a00090, fbe00000, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mull, t_mull), CM(umlal,s, 0b00090, 4, (RRnpc, RRnpc, RRnpc, RRnpc), mull), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v4 /* ARM Architecture 4. */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v4t +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v4 /* ARM Architecture 4. */ +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v4t + 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), @@ -15036,24 +16340,27 @@ static const struct asm_opcode insns[] = 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 +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v4t_5 + /* ARM Architecture 4T. */ /* Note: bx (and blx) are required on V5, even if the processor does not support Thumb. */ TCE(bx, 12fff10, 4700, 1, (RR), bx, t_bx), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v5 /* ARM Architecture 5T. */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v5t +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v5 /* ARM Architecture 5T. */ +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v5t + /* Note: blx has 2 variants; the .value coded here is for BLX(2). Only this variant has conditional execution. */ TCE(blx, 12fff30, 4780, 1, (RR_EXr), blx, t_blx), TUE(bkpt, 1200070, be00, 1, (oIffffb), bkpt, t_bkpt), -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6t2 +#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, ADDRGLDC), lstc, lstc), TUF(ldc2l, c500000, fc500000, 3, (RCP, RCN, ADDRGLDC), lstc, lstc), @@ -15063,8 +16370,9 @@ static const struct asm_opcode insns[] = 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), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v5exp /* ARM Architecture 5TExP. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v5exp /* ARM Architecture 5TExP. */ + TCE(smlabb, 1000080, fb100000, 4, (RRnpc, RRnpc, RRnpc, RRnpc), smla, t_mla), TCE(smlatb, 10000a0, fb100020, 4, (RRnpc, RRnpc, RRnpc, RRnpc), smla, t_mla), TCE(smlabt, 10000c0, fb100010, 4, (RRnpc, RRnpc, RRnpc, RRnpc), smla, t_mla), @@ -15086,13 +16394,14 @@ static const struct asm_opcode insns[] = TCE(smulwb, 12000a0, fb30f000, 3, (RRnpc, RRnpc, RRnpc), smul, t_simd), TCE(smulwt, 12000e0, fb30f010, 3, (RRnpc, RRnpc, RRnpc), smul, t_simd), - TCE(qadd, 1000050, fa80f080, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, rd_rm_rn), - TCE(qdadd, 1400050, fa80f090, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, rd_rm_rn), - TCE(qsub, 1200050, fa80f0a0, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, rd_rm_rn), - TCE(qdsub, 1600050, fa80f0b0, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, rd_rm_rn), + TCE(qadd, 1000050, fa80f080, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, t_simd), + TCE(qdadd, 1400050, fa80f090, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, t_simd), + TCE(qsub, 1200050, fa80f0a0, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, t_simd), + TCE(qdsub, 1600050, fa80f0b0, 3, (RRnpc, RRnpc, RRnpc), rd_rm_rn, t_simd), + +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v5e /* ARM Architecture 5TE. */ -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v5e /* ARM Architecture 5TE. */ TUF(pld, 450f000, f810f000, 1, (ADDR), pld, t_pld), TC3(ldrd, 00000d0, e8500000, 3, (RRnpc, oRRnpc, ADDRGLDRS), ldrd, t_ldstd), TC3(strd, 00000f0, e8400000, 3, (RRnpc, oRRnpc, ADDRGLDRS), ldrd, t_ldstd), @@ -15100,14 +16409,16 @@ static const struct asm_opcode insns[] = 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), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v5j /* ARM Architecture 5TEJ. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v5j /* ARM Architecture 5TEJ. */ + TCE(bxj, 12fff20, f3c08f00, 1, (RR), bxj, t_bxj), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v6 /* ARM V6. */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6 +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v6 /* ARM V6. */ +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6 + TUF(cpsie, 1080000, b660, 2, (CPSF, oI31b), cpsi, t_cpsi), TUF(cpsid, 10c0000, b670, 2, (CPSF, oI31b), cpsi, t_cpsi), tCE(rev, 6bf0f30, rev, 2, (RRnpc, RRnpc), rd_rm, t_rev), @@ -15119,8 +16430,9 @@ static const struct asm_opcode insns[] = tCE(uxtb, 6ef0070, uxtb, 3, (RRnpc, RRnpc, oROR), sxth, t_sxth), TUF(setend, 1010000, b650, 1, (ENDI), setend, t_setend), -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6t2 +#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), @@ -15130,47 +16442,72 @@ static const struct asm_opcode insns[] = TCE(usat, 6e00010, f3800000, 4, (RRnpc, I31, RRnpc, oSHllar),usat, t_usat), /* ARM V6 not included in V7M (eg. integer SIMD). */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6_notm +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6_notm + TUF(cps, 1020000, f3af8100, 1, (I31b), imm0, t_cps), TCE(pkhbt, 6800010, eac00000, 4, (RRnpc, RRnpc, RRnpc, oSHll), pkhbt, t_pkhbt), TCE(pkhtb, 6800050, eac00020, 4, (RRnpc, RRnpc, RRnpc, oSHar), pkhtb, t_pkhtb), TCE(qadd16, 6200f10, fa90f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(qadd8, 6200f90, fa80f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(qasx, 6200f30, faa0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for QASX. */ TCE(qaddsubx, 6200f30, faa0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(qsax, 6200f50, fae0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for QSAX. */ + TCE(qsubaddx, 6200f50, fae0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(qsub16, 6200f70, fad0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(qsub8, 6200ff0, fac0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), - TCE(qsubaddx, 6200f50, fae0f010, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(sadd16, 6100f10, fa90f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(sadd8, 6100f90, fa80f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(sasx, 6100f30, faa0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for SASX. */ TCE(saddsubx, 6100f30, faa0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(shadd16, 6300f10, fa90f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(shadd8, 6300f90, fa80f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(shasx, 6300f30, faa0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for SHASX. */ TCE(shaddsubx, 6300f30, faa0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(shsax, 6300f50, fae0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for SHSAX. */ + TCE(shsubaddx, 6300f50, fae0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(shsub16, 6300f70, fad0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(shsub8, 6300ff0, fac0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), - TCE(shsubaddx, 6300f50, fae0f020, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(ssax, 6100f50, fae0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for SSAX. */ + TCE(ssubaddx, 6100f50, fae0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(ssub16, 6100f70, fad0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(ssub8, 6100ff0, fac0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), - TCE(ssubaddx, 6100f50, fae0f000, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uadd16, 6500f10, fa90f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uadd8, 6500f90, fa80f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(uasx, 6500f30, faa0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for UASX. */ TCE(uaddsubx, 6500f30, faa0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uhadd16, 6700f10, fa90f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uhadd8, 6700f90, fa80f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(uhasx, 6700f30, faa0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for UHASX. */ TCE(uhaddsubx, 6700f30, faa0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(uhsax, 6700f50, fae0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for UHSAX. */ + TCE(uhsubaddx, 6700f50, fae0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uhsub16, 6700f70, fad0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uhsub8, 6700ff0, fac0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), - TCE(uhsubaddx, 6700f50, fae0f060, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uqadd16, 6600f10, fa90f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uqadd8, 6600f90, fa80f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(uqasx, 6600f30, faa0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for UQASX. */ TCE(uqaddsubx, 6600f30, faa0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(uqsax, 6600f50, fae0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for UQSAX. */ + TCE(uqsubaddx, 6600f50, fae0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uqsub16, 6600f70, fad0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(uqsub8, 6600ff0, fac0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), - TCE(uqsubaddx, 6600f50, fae0f050, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TCE(usub16, 6500f70, fad0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), - TCE(usub8, 6500ff0, fac0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(usax, 6500f50, fae0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + /* Old name for USAX. */ TCE(usubaddx, 6500f50, fae0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), + TCE(usub8, 6500ff0, fac0f040, 3, (RRnpc, RRnpc, RRnpc), rd_rn_rm, t_simd), TUF(rfeia, 8900a00, e990c000, 1, (RRw), rfe, rfe), UF(rfeib, 9900a00, 1, (RRw), rfe), UF(rfeda, 8100a00, 1, (RRw), rfe), @@ -15216,34 +16553,39 @@ static const struct asm_opcode insns[] = TCE(usada8, 7800010, fb700000, 4, (RRnpc, RRnpc, RRnpc, RRnpc),smla, t_mla), TCE(usat16, 6e00f30, f3a00000, 3, (RRnpc, I15, RRnpc), usat16, t_usat16), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v6k -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6k +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v6k +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6k + tCE(yield, 320f001, yield, 0, (), noargs, t_hint), tCE(wfe, 320f002, wfe, 0, (), noargs, t_hint), tCE(wfi, 320f003, wfi, 0, (), noargs, t_hint), tCE(sev, 320f004, sev, 0, (), noargs, t_hint), -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6_notm +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6_notm + TCE(ldrexd, 1b00f9f, e8d0007f, 3, (RRnpc, oRRnpc, RRnpcb), ldrexd, t_ldrexd), TCE(strexd, 1a00f90, e8c00070, 4, (RRnpc, RRnpc, oRRnpc, RRnpcb), strexd, t_strexd), -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v6t2 +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v6t2 + TCE(ldrexb, 1d00f9f, e8d00f4f, 2, (RRnpc, RRnpcb), rd_rn, rd_rn), TCE(ldrexh, 1f00f9f, e8d00f5f, 2, (RRnpc, RRnpcb), rd_rn, rd_rn), TCE(strexb, 1c00f90, e8c00f40, 3, (RRnpc, RRnpc, ADDR), strex, rm_rd_rn), TCE(strexh, 1e00f90, e8c00f50, 3, (RRnpc, RRnpc, ADDR), strex, rm_rd_rn), TUF(clrex, 57ff01f, f3bf8f2f, 0, (), noargs, noargs), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v6z +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v6z + TCE(smc, 1600070, f7f08000, 1, (EXPi), smc, t_smc), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v6t2 +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v6t2 + TCE(bfc, 7c0001f, f36f0000, 3, (RRnpc, I31, I32), bfc, t_bfc), TCE(bfi, 7c00010, f3600000, 4, (RRnpc, RRnpc_I0, I31, I32), bfi, t_bfi), TCE(sbfx, 7a00050, f3400000, 4, (RR, RR, I31, I32), bfx, t_bfx), @@ -15261,53 +16603,72 @@ static const struct asm_opcode insns[] = 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), - TUE(ittt, 0, bf0e, 1, (COND), it, t_it), - TUE(itet, 0, bf06, 1, (COND), it, t_it), - TUE(itte, 0, bf0a, 1, (COND), it, t_it), - TUE(itee, 0, bf02, 1, (COND), it, t_it), - TUE(itttt, 0, bf0f, 1, (COND), it, t_it), - TUE(itett, 0, bf07, 1, (COND), it, t_it), - TUE(ittet, 0, bf0b, 1, (COND), it, t_it), - TUE(iteet, 0, bf03, 1, (COND), it, t_it), - TUE(ittte, 0, bf0d, 1, (COND), it, t_it), - TUE(itete, 0, bf05, 1, (COND), it, t_it), - TUE(ittee, 0, bf09, 1, (COND), it, t_it), - TUE(iteee, 0, bf01, 1, (COND), it, t_it), + + /* ARM does not really have an IT instruction, so always allow it. + The opcode is copied from Thumb in order to allow warnings in + -mimplicit-it=[never | arm] modes. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v1 + + TUE(it, bf08, bf08, 1, (COND), it, t_it), + TUE(itt, bf0c, bf0c, 1, (COND), it, t_it), + TUE(ite, bf04, bf04, 1, (COND), it, t_it), + TUE(ittt, bf0e, bf0e, 1, (COND), it, t_it), + TUE(itet, bf06, bf06, 1, (COND), it, t_it), + TUE(itte, bf0a, bf0a, 1, (COND), it, t_it), + TUE(itee, bf02, bf02, 1, (COND), it, t_it), + TUE(itttt, bf0f, bf0f, 1, (COND), it, t_it), + TUE(itett, bf07, bf07, 1, (COND), it, t_it), + TUE(ittet, bf0b, bf0b, 1, (COND), it, t_it), + TUE(iteet, bf03, bf03, 1, (COND), it, t_it), + TUE(ittte, bf0d, bf0d, 1, (COND), it, t_it), + TUE(itete, bf05, bf05, 1, (COND), it, t_it), + TUE(ittee, bf09, bf09, 1, (COND), it, t_it), + TUE(iteee, bf01, bf01, 1, (COND), it, t_it), + /* ARM/Thumb-2 instructions with no Thumb-1 equivalent. */ + TC3(rrx, 01a00060, ea4f0030, 2, (RR, RR), rd_rm, t_rrx), + TC3(rrxs, 01b00060, ea5f0030, 2, (RR, RR), rd_rm, t_rrx), /* Thumb2 only instructions. */ -#undef ARM_VARIANT -#define ARM_VARIANT NULL +#undef ARM_VARIANT +#define ARM_VARIANT NULL TCE(addw, 0, f2000000, 3, (RR, RR, EXPi), 0, t_add_sub_w), TCE(subw, 0, f2a00000, 3, (RR, RR, EXPi), 0, t_add_sub_w), + TCE(orn, 0, ea600000, 3, (RR, oRR, SH), 0, t_orn), + TCE(orns, 0, ea700000, 3, (RR, oRR, SH), 0, t_orn), TCE(tbb, 0, e8d0f000, 1, (TB), 0, t_tb), TCE(tbh, 0, e8d0f010, 1, (TB), 0, t_tb), /* Thumb-2 hardware division instructions (R and M profiles only). */ -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_div +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_div + TCE(sdiv, 0, fb90f0f0, 3, (RR, oRR, RR), 0, t_div), TCE(udiv, 0, fbb0f0f0, 3, (RR, oRR, RR), 0, t_div), - /* ARM V7 instructions. */ -#undef ARM_VARIANT -#define ARM_VARIANT &arm_ext_v7 -#undef THUMB_VARIANT -#define THUMB_VARIANT &arm_ext_v7 - TUF(pli, 450f000, f910f000, 1, (ADDR), pli, t_pld), - TCE(dbg, 320f0f0, f3af80f0, 1, (I15), dbg, t_dbg), + /* ARM V6M/V7 instructions. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_barrier +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_barrier + TUF(dmb, 57ff050, f3bf8f50, 1, (oBARRIER), barrier, t_barrier), TUF(dsb, 57ff040, f3bf8f40, 1, (oBARRIER), barrier, t_barrier), TUF(isb, 57ff060, f3bf8f60, 1, (oBARRIER), barrier, t_barrier), -#undef ARM_VARIANT -#define ARM_VARIANT &fpu_fpa_ext_v1 /* Core FPA instruction set (V1). */ + /* ARM V7 instructions. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_ext_v7 +#undef THUMB_VARIANT +#define THUMB_VARIANT & arm_ext_v7 + + TUF(pli, 450f000, f910f000, 1, (ADDR), pli, t_pld), + TCE(dbg, 320f0f0, f3af80f0, 1, (I15), dbg, t_dbg), + +#undef ARM_VARIANT +#define ARM_VARIANT & fpu_fpa_ext_v1 /* Core FPA instruction set (V1). */ + cCE(wfs, e200110, 1, (RR), rd), cCE(rfs, e300110, 1, (RR), rd), cCE(wfc, e400110, 1, (RR), rd), @@ -15738,8 +17099,9 @@ static const struct asm_opcode insns[] = cCL(fixez, e100170, 2, (RR, RF), rd_rm), /* Instructions that were new with the real FPA, call them V2. */ -#undef ARM_VARIANT -#define ARM_VARIANT &fpu_fpa_ext_v2 +#undef ARM_VARIANT +#define ARM_VARIANT & fpu_fpa_ext_v2 + cCE(lfm, c100200, 3, (RF, I4b, ADDR), fpa_ldmstm), cCL(lfmfd, c900200, 3, (RF, I4b, ADDR), fpa_ldmstm), cCL(lfmea, d100200, 3, (RF, I4b, ADDR), fpa_ldmstm), @@ -15747,8 +17109,9 @@ static const struct asm_opcode insns[] = cCL(sfmfd, d000200, 3, (RF, I4b, ADDR), fpa_ldmstm), cCL(sfmea, c800200, 3, (RF, I4b, ADDR), fpa_ldmstm), -#undef ARM_VARIANT -#define ARM_VARIANT &fpu_vfp_ext_v1xd /* VFP V1xD (single precision). */ +#undef ARM_VARIANT +#define ARM_VARIANT & fpu_vfp_ext_v1xd /* VFP V1xD (single precision). */ + /* Moves and type conversions. */ cCE(fcpys, eb00a40, 2, (RVS, RVS), vfp_sp_monadic), cCE(fmrs, e100a10, 2, (RR, RVS), vfp_reg_from_sp), @@ -15805,8 +17168,9 @@ static const struct asm_opcode insns[] = cCE(fcmpes, eb40ac0, 2, (RVS, RVS), vfp_sp_monadic), cCE(fcmpezs, eb50ac0, 1, (RVS), vfp_sp_compare_z), -#undef ARM_VARIANT -#define ARM_VARIANT &fpu_vfp_ext_v1 /* VFP V1 (Double precision). */ +#undef ARM_VARIANT +#define ARM_VARIANT & fpu_vfp_ext_v1 /* VFP V1 (Double precision). */ + /* Moves and type conversions. */ cCE(fcpyd, eb00b40, 2, (RVD, RVD), vfp_dp_rd_rm), cCE(fcvtds, eb70ac0, 2, (RVD, RVS), vfp_dp_sp_cvt), @@ -15856,8 +17220,9 @@ static const struct asm_opcode insns[] = 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 +#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), vfp_dp_rm_rd_rn), @@ -15865,10 +17230,11 @@ static const struct asm_opcode insns[] = /* 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 +#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), @@ -15902,15 +17268,19 @@ static const struct asm_opcode insns[] = NCE(vstr, d000b00, 2, (RVSD, ADDRGLDC), neon_ldr_str), nCEF(vcvt, vcvt, 3, (RNSDQ, RNSDQ, oI32b), neon_cvt), + nCEF(vcvtb, vcvt, 2, (RVS, RVS), neon_cvtb), + nCEF(vcvtt, vcvt, 2, (RVS, RVS), neon_cvtt), + /* 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 +#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), @@ -16138,10 +17508,11 @@ static const struct asm_opcode insns[] = 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 +#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), @@ -16152,10 +17523,11 @@ static const struct asm_opcode insns[] = 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 +#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), @@ -16176,8 +17548,9 @@ static const struct asm_opcode insns[] = 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. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_cext_xscale /* Intel XScale extensions. */ + cCE(mia, e200010, 3, (RXA, RRnpc, RRnpc), xsc_mia), cCE(miaph, e280010, 3, (RXA, RRnpc, RRnpc), xsc_mia), cCE(miabb, e2c0010, 3, (RXA, RRnpc, RRnpc), xsc_mia), @@ -16187,8 +17560,9 @@ static const struct asm_opcode insns[] = cCE(mar, c400000, 3, (RXA, RRnpc, RRnpc), xsc_mar), cCE(mra, c500000, 3, (RRnpc, RRnpc, RXA), xsc_mra), -#undef ARM_VARIANT -#define ARM_VARIANT &arm_cext_iwmmxt /* Intel Wireless MMX technology. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_cext_iwmmxt /* Intel Wireless MMX technology. */ + cCE(tandcb, e13f130, 1, (RR), iwmmxt_tandorc), cCE(tandch, e53f130, 1, (RR), iwmmxt_tandorc), cCE(tandcw, e93f130, 1, (RR), iwmmxt_tandorc), @@ -16352,11 +17726,12 @@ static const struct asm_opcode insns[] = cCE(wxor, e100000, 3, (RIWR, RIWR, RIWR), rd_rn_rm), 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), +#undef ARM_VARIANT +#define ARM_VARIANT & arm_cext_iwmmxt2 /* Intel Wireless MMX technology, version 2. */ + + cCE(torvscb, e12f190, 1, (RR), iwmmxt_tandorc), + cCE(torvsch, e52f190, 1, (RR), iwmmxt_tandorc), + cCE(torvscw, e92f190, 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), @@ -16412,8 +17787,9 @@ static const struct asm_opcode insns[] = 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. */ +#undef ARM_VARIANT +#define ARM_VARIANT & arm_cext_maverick /* Cirrus Maverick instructions. */ + cCE(cfldrs, c100400, 2, (RMF, ADDRGLDC), rd_cpaddr), cCE(cfldrd, c500400, 2, (RMD, ADDRGLDC), rd_cpaddr), cCE(cfldr32, c100500, 2, (RMFX, ADDRGLDC), rd_cpaddr), @@ -16593,12 +17969,15 @@ md_convert_frag (bfd *abfd, segT asec ATTRIBUTE_UNUSED, fragS *fragp) buf = fragp->fr_literal + fragp->fr_fix; old_op = bfd_get_16(abfd, buf); - if (fragp->fr_symbol) { + if (fragp->fr_symbol) + { exp.X_op = O_symbol; exp.X_add_symbol = fragp->fr_symbol; - } else { + } + else + { exp.X_op = O_constant; - } + } exp.X_add_number = fragp->fr_offset; opcode = fragp->fr_subtype; switch (opcode) @@ -16615,7 +17994,7 @@ md_convert_frag (bfd *abfd, segT asec ATTRIBUTE_UNUSED, fragS *fragp) case T_MNEM_strh: if (fragp->fr_var == 4) { - insn = THUMB_OP32(opcode); + insn = THUMB_OP32 (opcode); if ((old_op >> 12) == 4 || (old_op >> 12) == 9) { insn |= (old_op & 0x700) << 4; @@ -16733,7 +18112,7 @@ md_convert_frag (bfd *abfd, segT asec ATTRIBUTE_UNUSED, fragS *fragp) pc_rel = 0; break; default: - abort(); + abort (); } fixp = fix_new_exp (fragp, fragp->fr_fix, fragp->fr_var, &exp, pc_rel, reloc_type); @@ -16768,7 +18147,7 @@ relax_immediate (fragS *fragp, int size, int shift) /* Get the address of a symbol during relaxation. */ static addressT -relaxed_symbol_addr(fragS *fragp, long stretch) +relaxed_symbol_addr (fragS *fragp, long stretch) { fragS *sym_frag; addressT addr; @@ -16787,7 +18166,31 @@ relaxed_symbol_addr(fragS *fragp, long stretch) if (stretch != 0 && sym_frag->relax_marker != fragp->relax_marker) - addr += stretch; + { + fragS *f; + + /* Adjust stretch for any alignment frag. Note that if have + been expanding the earlier code, the symbol may be + defined in what appears to be an earlier frag. FIXME: + This doesn't handle the fr_subtype field, which specifies + a maximum number of bytes to skip when doing an + alignment. */ + for (f = fragp; f != NULL && f != sym_frag; f = f->fr_next) + { + if (f->fr_type == rs_align || f->fr_type == rs_align_code) + { + if (stretch < 0) + stretch = - ((- stretch) + & ~ ((1 << (int) f->fr_offset) - 1)); + else + stretch &= ~ ((1 << (int) f->fr_offset) - 1); + if (stretch == 0) + break; + } + } + if (f != NULL) + addr += stretch; + } return addr; } @@ -16801,11 +18204,11 @@ relax_adr (fragS *fragp, asection *sec, long stretch) offsetT val; /* Assume worst case for symbols not known to be in the same section. */ - if (!S_IS_DEFINED(fragp->fr_symbol) + if (!S_IS_DEFINED (fragp->fr_symbol) || sec != S_GET_SEGMENT (fragp->fr_symbol)) return 4; - val = relaxed_symbol_addr(fragp, stretch); + val = relaxed_symbol_addr (fragp, stretch); addr = fragp->fr_address + fragp->fr_fix; addr = (addr + 4) & ~3; /* Force misaligned targets to 32-bit variant. */ @@ -16844,11 +18247,17 @@ relax_branch (fragS *fragp, asection *sec, int bits, long stretch) offsetT limit; /* Assume worst case for symbols not known to be in the same section. */ - if (!S_IS_DEFINED(fragp->fr_symbol) + if (!S_IS_DEFINED (fragp->fr_symbol) || sec != S_GET_SEGMENT (fragp->fr_symbol)) return 4; - val = relaxed_symbol_addr(fragp, stretch); +#ifdef OBJ_ELF + if (S_IS_DEFINED (fragp->fr_symbol) + && ARM_IS_FUNC (fragp->fr_symbol)) + return 4; +#endif + + val = relaxed_symbol_addr (fragp, stretch); addr = fragp->fr_address + fragp->fr_fix + 4; val -= addr; @@ -16873,39 +18282,39 @@ arm_relax_frag (asection *sec, fragS *fragp, long stretch) switch (fragp->fr_subtype) { case T_MNEM_ldr_pc2: - newsize = relax_adr(fragp, sec, stretch); + newsize = relax_adr (fragp, sec, stretch); break; case T_MNEM_ldr_pc: case T_MNEM_ldr_sp: case T_MNEM_str_sp: - newsize = relax_immediate(fragp, 8, 2); + newsize = relax_immediate (fragp, 8, 2); break; case T_MNEM_ldr: case T_MNEM_str: - newsize = relax_immediate(fragp, 5, 2); + newsize = relax_immediate (fragp, 5, 2); break; case T_MNEM_ldrh: case T_MNEM_strh: - newsize = relax_immediate(fragp, 5, 1); + newsize = relax_immediate (fragp, 5, 1); break; case T_MNEM_ldrb: case T_MNEM_strb: - newsize = relax_immediate(fragp, 5, 0); + newsize = relax_immediate (fragp, 5, 0); break; case T_MNEM_adr: - newsize = relax_adr(fragp, sec, stretch); + newsize = relax_adr (fragp, sec, stretch); break; case T_MNEM_mov: case T_MNEM_movs: case T_MNEM_cmp: case T_MNEM_cmn: - newsize = relax_immediate(fragp, 8, 0); + newsize = relax_immediate (fragp, 8, 0); break; case T_MNEM_b: - newsize = relax_branch(fragp, sec, 11, stretch); + newsize = relax_branch (fragp, sec, 11, stretch); break; case T_MNEM_bcond: - newsize = relax_branch(fragp, sec, 8, stretch); + newsize = relax_branch (fragp, sec, 8, stretch); break; case T_MNEM_add_sp: case T_MNEM_add_pc: @@ -16922,18 +18331,18 @@ arm_relax_frag (asection *sec, fragS *fragp, long stretch) newsize = relax_addsub (fragp, sec); break; default: - abort(); + abort (); } 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. */ + Don't freeze them unconditionally because targets may be artificially + misaligned by the expansion of preceding frags. */ if (stretch <= 0 && newsize > 2) { md_convert_frag (sec->owner, sec, fragp); - frag_wane(fragp); + frag_wane (fragp); } return newsize - oldsize; @@ -16969,14 +18378,41 @@ md_section_align (segT segment ATTRIBUTE_UNUSED, void arm_handle_align (fragS * fragP) { - static char const arm_noop[4] = { 0x00, 0x00, 0xa0, 0xe1 }; - static char const thumb_noop[2] = { 0xc0, 0x46 }; - static char const arm_bigend_noop[4] = { 0xe1, 0xa0, 0x00, 0x00 }; - static char const thumb_bigend_noop[2] = { 0x46, 0xc0 }; + static char const arm_noop[2][2][4] = + { + { /* ARMv1 */ + {0x00, 0x00, 0xa0, 0xe1}, /* LE */ + {0xe1, 0xa0, 0x00, 0x00}, /* BE */ + }, + { /* ARMv6k */ + {0x00, 0xf0, 0x20, 0xe3}, /* LE */ + {0xe3, 0x20, 0xf0, 0x00}, /* BE */ + }, + }; + static char const thumb_noop[2][2][2] = + { + { /* Thumb-1 */ + {0xc0, 0x46}, /* LE */ + {0x46, 0xc0}, /* BE */ + }, + { /* Thumb-2 */ + {0x00, 0xbf}, /* LE */ + {0xbf, 0x00} /* BE */ + } + }; + static char const wide_thumb_noop[2][4] = + { /* Wide Thumb-2 */ + {0xaf, 0xf3, 0x00, 0x80}, /* LE */ + {0xf3, 0xaf, 0x80, 0x00}, /* BE */ + }; - int bytes, fix, noop_size; + unsigned bytes, fix, noop_size; char * p; const char * noop; + const char *narrow_noop = NULL; +#ifdef OBJ_ELF + enum mstate state; +#endif if (fragP->fr_type != rs_align_code) return; @@ -16988,31 +18424,62 @@ arm_handle_align (fragS * fragP) if (bytes > MAX_MEM_FOR_RS_ALIGN_CODE) bytes &= MAX_MEM_FOR_RS_ALIGN_CODE; - if (fragP->tc_frag_data) +#ifdef OBJ_ELF + gas_assert ((fragP->tc_frag_data.thumb_mode & MODE_RECORDED) != 0); +#endif + + if (fragP->tc_frag_data.thumb_mode & (~ MODE_RECORDED)) { - if (target_big_endian) - noop = thumb_bigend_noop; + if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6t2)) + { + narrow_noop = thumb_noop[1][target_big_endian]; + noop = wide_thumb_noop[target_big_endian]; + } else - noop = thumb_noop; - noop_size = sizeof (thumb_noop); + noop = thumb_noop[0][target_big_endian]; + noop_size = 2; +#ifdef OBJ_ELF + state = MAP_THUMB; +#endif } else { - if (target_big_endian) - noop = arm_bigend_noop; - else - noop = arm_noop; - noop_size = sizeof (arm_noop); + noop = arm_noop[ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v6k) != 0] + [target_big_endian]; + noop_size = 4; +#ifdef OBJ_ELF + state = MAP_ARM; +#endif } + fragP->fr_var = noop_size; + if (bytes & (noop_size - 1)) { fix = bytes & (noop_size - 1); +#ifdef OBJ_ELF + insert_data_mapping_symbol (state, fragP->fr_fix, fragP, fix); +#endif memset (p, 0, fix); p += fix; bytes -= fix; } + if (narrow_noop) + { + if (bytes & noop_size) + { + /* Insert a narrow noop. */ + memcpy (p, narrow_noop, noop_size); + p += noop_size; + bytes -= noop_size; + fix += noop_size; + } + + /* Use wide noops for the remainder */ + noop_size = 4; + } + while (bytes >= noop_size) { memcpy (p, noop, noop_size); @@ -17022,7 +18489,6 @@ arm_handle_align (fragS * fragP) } fragP->fr_fix += fix; - fragP->fr_var = noop_size; } /* Called from md_do_align. Used to create an alignment @@ -17034,9 +18500,16 @@ arm_frag_align_code (int n, int max) char * p; /* We assume that there will never be a requirement - to support alignments greater than 32 bytes. */ + to support alignments greater than MAX_MEM_FOR_RS_ALIGN_CODE bytes. */ if (max > MAX_MEM_FOR_RS_ALIGN_CODE) - as_fatal (_("alignments greater than 32 bytes not supported in .text sections.")); + { + char err_msg[128]; + + sprintf (err_msg, + _("alignments greater than %d bytes not supported in .text sections."), + MAX_MEM_FOR_RS_ALIGN_CODE + 1); + as_fatal ("%s", err_msg); + } p = frag_var (rs_align_code, MAX_MEM_FOR_RS_ALIGN_CODE, @@ -17048,41 +18521,57 @@ arm_frag_align_code (int n, int max) *p = 0; } -/* Perform target specific initialisation of a frag. */ +/* Perform target specific initialisation of a frag. + Note - despite the name this initialisation is not done when the frag + is created, but only when its type is assigned. A frag can be created + and used a long time before its type is set, so beware of assuming that + this initialisationis performed first. */ +#ifndef OBJ_ELF void -arm_init_frag (fragS * fragP) +arm_init_frag (fragS * fragP, int max_chars ATTRIBUTE_UNUSED) { /* Record whether this frag is in an ARM or a THUMB area. */ - fragP->tc_frag_data = thumb_mode; + fragP->tc_frag_data.thumb_mode = thumb_mode; +} + +#else /* OBJ_ELF is defined. */ +void +arm_init_frag (fragS * fragP, int max_chars) +{ + /* If the current ARM vs THUMB mode has not already + been recorded into this frag then do so now. */ + if ((fragP->tc_frag_data.thumb_mode & MODE_RECORDED) == 0) + { + fragP->tc_frag_data.thumb_mode = thumb_mode | MODE_RECORDED; + + /* Record a mapping symbol for alignment frags. We will delete this + later if the alignment ends up empty. */ + switch (fragP->fr_type) + { + case rs_align: + case rs_align_test: + case rs_fill: + mapping_state_2 (MAP_DATA, max_chars); + break; + case rs_align_code: + mapping_state_2 (thumb_mode ? MAP_THUMB : MAP_ARM, max_chars); + break; + default: + break; + } + } } -#ifdef OBJ_ELF /* When we change sections we need to issue a new mapping symbol. */ void arm_elf_change_section (void) { - flagword flags; - segment_info_type *seginfo; - /* Link an unlinked unwind index table section to the .text section. */ if (elf_section_type (now_seg) == SHT_ARM_EXIDX && elf_linked_to_section (now_seg) == NULL) elf_linked_to_section (now_seg) = text_section; - - if (!SEG_NORMAL (now_seg)) - return; - - flags = bfd_get_section_flags (stdoutput, now_seg); - - /* We can ignore sections that only contain debug info. */ - if ((flags & SEC_ALLOC) == 0) - return; - - seginfo = seg_info (now_seg); - mapstate = seginfo->tc_segment_info_data.mapstate; - marked_pr_dependency = seginfo->tc_segment_info_data.marked_pr_dependency; } int @@ -17098,7 +18587,7 @@ arm_elf_section_type (const char * str, size_t len) static void add_unwind_adjustsp (offsetT); -/* Cenerate and deferred unwind frame offset. */ +/* Generate any deferred unwind frame offset. */ static void flush_pending_unwind (void) @@ -17285,7 +18774,7 @@ start_unwind_section (const segT text_seg, int idx) group_name = elf_group_name (text_seg); if (group_name == NULL) { - as_bad ("Group section `%s' has no group signature", + as_bad (_("Group section `%s' has no group signature"), segment_name (text_seg)); ignore_rest_of_line (); return; @@ -17296,7 +18785,7 @@ start_unwind_section (const segT text_seg, int idx) obj_elf_change_section (sec_name, type, flags, 0, group_name, linkonce, 0); - /* Set the setion link for index tables. */ + /* Set the section link for index tables. */ if (idx) elf_linked_to_section (now_seg) = text_seg; } @@ -17330,7 +18819,7 @@ create_unwind_entry (int have_data) if (unwind.personality_index == -2) { if (have_data) - as_bad (_("handerdata in cantunwind frame")); + as_bad (_("handlerdata in cantunwind frame")); return 1; /* EXIDX_CANTUNWIND. */ } @@ -17514,7 +19003,7 @@ md_pcrel_from_section (fixS * fixP, segT seg) 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 + if (fixP->fx_pcrel && ((fixP->fx_addsy && S_GET_SEGMENT (fixP->fx_addsy) != seg) || (arm_force_relocation (fixP) #ifdef TE_WINCE @@ -17523,6 +19012,7 @@ md_pcrel_from_section (fixS * fixP, segT seg) ))) base = 0; + switch (fixP->fx_r_type) { /* PC relative addressing on the Thumb is slightly odd as the @@ -17544,20 +19034,46 @@ md_pcrel_from_section (fixS * fixP, segT seg) case BFD_RELOC_THUMB_PCREL_BRANCH9: case BFD_RELOC_THUMB_PCREL_BRANCH12: case BFD_RELOC_THUMB_PCREL_BRANCH20: - case BFD_RELOC_THUMB_PCREL_BRANCH23: case BFD_RELOC_THUMB_PCREL_BRANCH25: - case BFD_RELOC_THUMB_PCREL_BLX: return base + 4; + case BFD_RELOC_THUMB_PCREL_BRANCH23: + if (fixP->fx_addsy + && ARM_IS_FUNC (fixP->fx_addsy) + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t)) + base = fixP->fx_where + fixP->fx_frag->fr_address; + return base + 4; + + /* BLX is like branches above, but forces the low two bits of PC to + zero. */ + case BFD_RELOC_THUMB_PCREL_BLX: + if (fixP->fx_addsy + && THUMB_IS_FUNC (fixP->fx_addsy) + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t)) + base = fixP->fx_where + fixP->fx_frag->fr_address; + return (base + 4) & ~3; + /* ARM mode branches are offset by +8. However, the Windows CE loader expects the relocation not to take this into account. */ + case BFD_RELOC_ARM_PCREL_BLX: + if (fixP->fx_addsy + && ARM_IS_FUNC (fixP->fx_addsy) + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t)) + base = fixP->fx_where + fixP->fx_frag->fr_address; + return base + 8; + + case BFD_RELOC_ARM_PCREL_CALL: + if (fixP->fx_addsy + && THUMB_IS_FUNC (fixP->fx_addsy) + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t)) + base = fixP->fx_where + fixP->fx_frag->fr_address; + return base + 8; + case BFD_RELOC_ARM_PCREL_BRANCH: - case BFD_RELOC_ARM_PCREL_CALL: case BFD_RELOC_ARM_PCREL_JUMP: - case BFD_RELOC_ARM_PCREL_BLX: case BFD_RELOC_ARM_PLT32: #ifdef TE_WINCE - /* When handling fixups immediately, because we have already + /* 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 @@ -17573,6 +19089,7 @@ md_pcrel_from_section (fixS * fixP, segT seg) return base + 8; #endif + /* ARM mode loads relative to PC are also offset by +8. Unlike branches, the Windows CE loader *does* expect the relocation to take this into account. */ @@ -17603,7 +19120,7 @@ md_undefined_symbol (char * name ATTRIBUTE_UNUSED) if (!GOT_symbol) { if (symbol_find (name)) - as_bad ("GOT already in the symbol table"); + as_bad (_("GOT already in the symbol table")); GOT_symbol = symbol_new (name, undefined_section, (valueT) 0, & zero_address_frag); @@ -17613,7 +19130,7 @@ md_undefined_symbol (char * name ATTRIBUTE_UNUSED) } #endif - return 0; + return NULL; } /* Subroutine of md_apply_fix. Check to see if an immediate can be @@ -17645,7 +19162,7 @@ validate_immediate_twopart (unsigned int val, } else { - assert (a & 0xff000000); + gas_assert (a & 0xff000000); * highpart = (a >> 24) | ((i + 8) << 7); } @@ -17845,7 +19362,8 @@ get_thumb32_insn (char * buf) Generic code tries to fold the difference of two symbols to a constant. Prevent this and force a relocation when the first symbols is a thumb function. */ -int + +bfd_boolean arm_optimize_expr (expressionS *l, operatorT op, expressionS *r) { if (op == O_subtract @@ -17856,10 +19374,11 @@ arm_optimize_expr (expressionS *l, operatorT op, expressionS *r) l->X_op = O_subtract; l->X_op_symbol = r->X_add_symbol; l->X_add_number -= r->X_add_number; - return 1; + return TRUE; } + /* Process as normal. */ - return 0; + return FALSE; } void @@ -17874,7 +19393,7 @@ md_apply_fix (fixS * fixP, int sign; char * buf = fixP->fx_where + fixP->fx_frag->fr_literal; - assert (fixP->fx_r_type <= BFD_RELOC_UNUSED); + gas_assert (fixP->fx_r_type <= BFD_RELOC_UNUSED); /* Note whether this will delete the relocation. */ @@ -17882,11 +19401,11 @@ md_apply_fix (fixS * fixP, fixP->fx_done = 1; /* On a 64-bit host, silently truncate 'value' to 32 bits for - consistency with the behavior on 32-bit hosts. Remember value + consistency with the behaviour on 32-bit hosts. Remember value for emit_reloc. */ value &= 0xffffffff; value ^= 0x80000000; - value -= 0x80000000; + value -= 0x80000000; *valP = value; fixP->fx_addnumber = value; @@ -17918,6 +19437,15 @@ md_apply_fix (fixS * fixP, break; } + if (fixP->fx_addsy + && S_GET_SEGMENT (fixP->fx_addsy) != seg) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("symbol %s is in a different section"), + S_GET_NAME (fixP->fx_addsy)); + break; + } + newimm = encode_arm_immediate (value); temp = md_chars_to_number (buf, INSN_SIZE); @@ -17941,6 +19469,24 @@ md_apply_fix (fixS * fixP, unsigned int highpart = 0; unsigned int newinsn = 0xe1a00000; /* nop. */ + if (fixP->fx_addsy + && ! S_IS_DEFINED (fixP->fx_addsy)) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("undefined symbol %s used as an immediate value"), + S_GET_NAME (fixP->fx_addsy)); + break; + } + + if (fixP->fx_addsy + && S_GET_SEGMENT (fixP->fx_addsy) != seg) + { + as_bad_where (fixP->fx_file, fixP->fx_line, + _("symbol %s is in a different section"), + S_GET_NAME (fixP->fx_addsy)); + break; + } + newimm = encode_arm_immediate (value); temp = md_chars_to_number (buf, INSN_SIZE); @@ -18289,14 +19835,41 @@ md_apply_fix (fixS * fixP, #ifdef OBJ_ELF case BFD_RELOC_ARM_PCREL_CALL: - newval = md_chars_to_number (buf, INSN_SIZE); - if ((newval & 0xf0000000) == 0xf0000000) - temp = 1; + + if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t) + && fixP->fx_addsy + && !S_IS_EXTERNAL (fixP->fx_addsy) + && (S_GET_SEGMENT (fixP->fx_addsy) == seg) + && THUMB_IS_FUNC (fixP->fx_addsy)) + /* Flip the bl to blx. This is a simple flip + bit here because we generate PCREL_CALL for + unconditional bls. */ + { + newval = md_chars_to_number (buf, INSN_SIZE); + newval = newval | 0x10000000; + md_number_to_chars (buf, newval, INSN_SIZE); + temp = 1; + fixP->fx_done = 1; + } else temp = 3; goto arm_branch_common; case BFD_RELOC_ARM_PCREL_JUMP: + if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t) + && fixP->fx_addsy + && !S_IS_EXTERNAL (fixP->fx_addsy) + && (S_GET_SEGMENT (fixP->fx_addsy) == seg) + && THUMB_IS_FUNC (fixP->fx_addsy)) + { + /* This would map to a bl, b, + b to a Thumb function. We + need to force a relocation for this particular + case. */ + newval = md_chars_to_number (buf, INSN_SIZE); + fixP->fx_done = 0; + } + case BFD_RELOC_ARM_PLT32: #endif case BFD_RELOC_ARM_PCREL_BRANCH: @@ -18304,7 +19877,30 @@ md_apply_fix (fixS * fixP, goto arm_branch_common; case BFD_RELOC_ARM_PCREL_BLX: + temp = 1; + if (ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t) + && fixP->fx_addsy + && !S_IS_EXTERNAL (fixP->fx_addsy) + && (S_GET_SEGMENT (fixP->fx_addsy) == seg) + && ARM_IS_FUNC (fixP->fx_addsy)) + { + /* Flip the blx to a bl and warn. */ + const char *name = S_GET_NAME (fixP->fx_addsy); + newval = 0xeb000000; + as_warn_where (fixP->fx_file, fixP->fx_line, + _("blx to '%s' an ARM ISA state function changed to bl"), + name); + md_number_to_chars (buf, newval, INSN_SIZE); + temp = 3; + fixP->fx_done = 1; + } + +#ifdef OBJ_ELF + if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4) + fixP->fx_r_type = BFD_RELOC_ARM_PCREL_CALL; +#endif + arm_branch_common: /* We are going to store value (shifted right by two) in the instruction, in a 24 bit, signed field. Bits 26 through 32 either @@ -18391,6 +19987,16 @@ md_apply_fix (fixS * fixP, break; case BFD_RELOC_THUMB_PCREL_BRANCH20: + if (fixP->fx_addsy + && (S_GET_SEGMENT (fixP->fx_addsy) == seg) + && !S_IS_EXTERNAL (fixP->fx_addsy) + && S_IS_DEFINED (fixP->fx_addsy) + && ARM_IS_FUNC (fixP->fx_addsy) + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t)) + { + /* Force a relocation for a branch 20 bits wide. */ + fixP->fx_done = 0; + } if ((value & ~0x1fffff) && ((value & ~0x1fffff) != ~0x1fffff)) as_bad_where (fixP->fx_file, fixP->fx_line, _("conditional branch out of range")); @@ -18416,7 +20022,57 @@ md_apply_fix (fixS * fixP, break; case BFD_RELOC_THUMB_PCREL_BLX: + + /* If there is a blx from a thumb state function to + another thumb function flip this to a bl and warn + about it. */ + + if (fixP->fx_addsy + && S_IS_DEFINED (fixP->fx_addsy) + && !S_IS_EXTERNAL (fixP->fx_addsy) + && (S_GET_SEGMENT (fixP->fx_addsy) == seg) + && THUMB_IS_FUNC (fixP->fx_addsy)) + { + const char *name = S_GET_NAME (fixP->fx_addsy); + as_warn_where (fixP->fx_file, fixP->fx_line, + _("blx to Thumb func '%s' from Thumb ISA state changed to bl"), + name); + newval = md_chars_to_number (buf + THUMB_SIZE, THUMB_SIZE); + newval = newval | 0x1000; + md_number_to_chars (buf+THUMB_SIZE, newval, THUMB_SIZE); + fixP->fx_r_type = BFD_RELOC_THUMB_PCREL_BRANCH23; + fixP->fx_done = 1; + } + + + goto thumb_bl_common; + case BFD_RELOC_THUMB_PCREL_BRANCH23: + + /* A bl from Thumb state ISA to an internal ARM state function + is converted to a blx. */ + if (fixP->fx_addsy + && (S_GET_SEGMENT (fixP->fx_addsy) == seg) + && !S_IS_EXTERNAL (fixP->fx_addsy) + && S_IS_DEFINED (fixP->fx_addsy) + && ARM_IS_FUNC (fixP->fx_addsy) + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t)) + { + newval = md_chars_to_number (buf + THUMB_SIZE, THUMB_SIZE); + newval = newval & ~0x1000; + md_number_to_chars (buf+THUMB_SIZE, newval, THUMB_SIZE); + fixP->fx_r_type = BFD_RELOC_THUMB_PCREL_BLX; + fixP->fx_done = 1; + } + + thumb_bl_common: + +#ifdef OBJ_ELF + if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4 && + fixP->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX) + fixP->fx_r_type = BFD_RELOC_THUMB_PCREL_BRANCH23; +#endif + if ((value & ~0x3fffff) && ((value & ~0x3fffff) != ~0x3fffff)) as_bad_where (fixP->fx_file, fixP->fx_line, _("branch out of range")); @@ -18490,10 +20146,17 @@ md_apply_fix (fixS * fixP, case BFD_RELOC_ARM_GOT32: case BFD_RELOC_ARM_GOTOFF: - case BFD_RELOC_ARM_TARGET2: if (fixP->fx_done || !seg->use_rela_p) md_number_to_chars (buf, 0, 4); break; + + case BFD_RELOC_ARM_TARGET2: + /* TARGET2 is not partial-inplace, so we need to write the + addend here for REL targets, because it won't be written out + during reloc processing later. */ + if (fixP->fx_done || !seg->use_rela_p) + md_number_to_chars (buf, fixP->fx_offset, 4); + break; #endif case BFD_RELOC_RVA: @@ -18708,7 +20371,7 @@ md_apply_fix (fixS * fixP, newval = md_chars_to_number (buf, THUMB_SIZE); if (value < 0 || value > 255) as_bad_where (fixP->fx_file, fixP->fx_line, - _("invalid immediate: %ld is too large"), + _("invalid immediate: %ld is out of range"), (long) value); newval |= value; md_number_to_chars (buf, newval, THUMB_SIZE); @@ -18745,9 +20408,9 @@ md_apply_fix (fixS * fixP, /* REL format relocations are limited to a 16-bit addend. */ if (!fixP->fx_done) { - if (value < -0x1000 || value > 0xffff) + if (value < -0x8000 || value > 0x7fff) as_bad_where (fixP->fx_file, fixP->fx_line, - _("offset too big")); + _("offset out of range")); } else if (fixP->fx_r_type == BFD_RELOC_ARM_MOVT || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT) @@ -18787,7 +20450,7 @@ md_apply_fix (fixS * fixP, 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); + gas_assert (!fixP->fx_done); if (!seg->use_rela_p) { bfd_vma insn; @@ -18817,8 +20480,8 @@ md_apply_fix (fixS * fixP, instruction. */ insn &= 0xfffff000; insn |= encoded_addend; - - /* Update the instruction. */ + + /* Update the instruction. */ md_number_to_chars (buf, insn, INSN_SIZE); } break; @@ -18829,7 +20492,7 @@ md_apply_fix (fixS * fixP, 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); + gas_assert (!fixP->fx_done); if (!seg->use_rela_p) { bfd_vma insn; @@ -18856,8 +20519,8 @@ md_apply_fix (fixS * fixP, of the instruction. */ insn &= 0xfffff000; insn |= addend_abs; - - /* Update the instruction. */ + + /* Update the instruction. */ md_number_to_chars (buf, insn, INSN_SIZE); } break; @@ -18868,7 +20531,7 @@ md_apply_fix (fixS * fixP, 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); + gas_assert (!fixP->fx_done); if (!seg->use_rela_p) { bfd_vma insn; @@ -18896,8 +20559,8 @@ md_apply_fix (fixS * fixP, four into bits 8 .. 11. */ insn &= 0xfffff0f0; insn |= (addend_abs & 0xf) | ((addend_abs & 0xf0) << 4); - - /* Update the instruction. */ + + /* Update the instruction. */ md_number_to_chars (buf, insn, INSN_SIZE); } break; @@ -18908,7 +20571,7 @@ md_apply_fix (fixS * fixP, 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); + gas_assert (!fixP->fx_done); if (!seg->use_rela_p) { bfd_vma insn; @@ -18940,12 +20603,17 @@ md_apply_fix (fixS * fixP, bits of the instruction. */ insn &= 0xfffffff0; insn |= addend_abs >> 2; - - /* Update the instruction. */ + + /* Update the instruction. */ md_number_to_chars (buf, insn, INSN_SIZE); } break; + case BFD_RELOC_ARM_V4BX: + /* This will need to go in the object file. */ + fixP->fx_done = 0; + break; + case BFD_RELOC_UNUSED: default: as_bad_where (fixP->fx_file, fixP->fx_line, @@ -19038,7 +20706,6 @@ tc_gen_reloc (asection *section, fixS *fixp) case BFD_RELOC_THUMB_PCREL_BRANCH20: case BFD_RELOC_THUMB_PCREL_BRANCH23: case BFD_RELOC_THUMB_PCREL_BRANCH25: - case BFD_RELOC_THUMB_PCREL_BLX: case BFD_RELOC_VTABLE_ENTRY: case BFD_RELOC_VTABLE_INHERIT: #ifdef TE_PE @@ -19047,6 +20714,15 @@ tc_gen_reloc (asection *section, fixS *fixp) code = fixp->fx_r_type; break; + case BFD_RELOC_THUMB_PCREL_BLX: +#ifdef OBJ_ELF + if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4) + code = BFD_RELOC_THUMB_PCREL_BRANCH23; + else +#endif + code = BFD_RELOC_THUMB_PCREL_BLX; + break; + case BFD_RELOC_ARM_LITERAL: case BFD_RELOC_ARM_HWLITERAL: /* If this is called then the a literal has @@ -19096,6 +20772,7 @@ tc_gen_reloc (asection *section, fixS *fixp) case BFD_RELOC_ARM_LDC_SB_G0: case BFD_RELOC_ARM_LDC_SB_G1: case BFD_RELOC_ARM_LDC_SB_G2: + case BFD_RELOC_ARM_V4BX: code = fixp->fx_r_type; break; @@ -19237,7 +20914,7 @@ cons_fix_new_arm (fragS * frag, fix_new_exp (frag, where, (int) size, exp, pcrel, type); } -#if defined OBJ_COFF || defined OBJ_ELF +#if defined (OBJ_COFF) void arm_validate_fix (fixS * fixP) { @@ -19255,6 +20932,7 @@ arm_validate_fix (fixS * fixP) } #endif + int arm_force_relocation (struct fix * fixp) { @@ -19263,6 +20941,34 @@ arm_force_relocation (struct fix * fixp) return 1; #endif + /* In case we have a call or a branch to a function in ARM ISA mode from + a thumb function or vice-versa force the relocation. These relocations + are cleared off for some cores that might have blx and simple transformations + are possible. */ + +#ifdef OBJ_ELF + switch (fixp->fx_r_type) + { + case BFD_RELOC_ARM_PCREL_JUMP: + case BFD_RELOC_ARM_PCREL_CALL: + case BFD_RELOC_THUMB_PCREL_BLX: + if (THUMB_IS_FUNC (fixp->fx_addsy)) + return 1; + break; + + case BFD_RELOC_ARM_PCREL_BLX: + case BFD_RELOC_THUMB_PCREL_BRANCH25: + case BFD_RELOC_THUMB_PCREL_BRANCH20: + case BFD_RELOC_THUMB_PCREL_BRANCH23: + if (ARM_IS_FUNC (fixp->fx_addsy)) + return 1; + break; + + default: + break; + } +#endif + /* Resolve these relocations even if the symbol is extern or weak. */ if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE || fixp->fx_r_type == BFD_RELOC_ARM_OFFSET_IMM @@ -19310,16 +21016,16 @@ arm_fix_adjustable (fixS * fixP) /* Preserve relocations against symbols with function type. */ if (symbol_get_bfdsym (fixP->fx_addsy)->flags & BSF_FUNCTION) - return 0; + return FALSE; if (THUMB_IS_FUNC (fixP->fx_addsy) && fixP->fx_subsy == NULL) - return 0; + return FALSE; /* We need the symbol name for the VTABLE entries. */ if ( fixP->fx_r_type == BFD_RELOC_VTABLE_INHERIT || fixP->fx_r_type == BFD_RELOC_VTABLE_ENTRY) - return 0; + return FALSE; /* Don't allow symbols to be discarded on GOT related relocs. */ if (fixP->fx_r_type == BFD_RELOC_ARM_PLT32 @@ -19331,15 +21037,26 @@ arm_fix_adjustable (fixS * fixP) || fixP->fx_r_type == BFD_RELOC_ARM_TLS_LDM32 || fixP->fx_r_type == BFD_RELOC_ARM_TLS_LDO32 || fixP->fx_r_type == BFD_RELOC_ARM_TARGET2) - return 0; + return FALSE; /* 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 FALSE; - return 1; + /* MOVW/MOVT REL relocations have limited offsets, so keep the symbols. */ + if (fixP->fx_r_type == BFD_RELOC_ARM_MOVW + || fixP->fx_r_type == BFD_RELOC_ARM_MOVT + || fixP->fx_r_type == BFD_RELOC_ARM_MOVW_PCREL + || fixP->fx_r_type == BFD_RELOC_ARM_MOVT_PCREL + || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVW + || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT + || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVW_PCREL + || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT_PCREL) + return FALSE; + + return TRUE; } #endif /* defined (OBJ_ELF) || defined (OBJ_COFF) */ @@ -19374,18 +21091,17 @@ armelf_frob_symbol (symbolS * symp, /* MD interface: Finalization. */ -/* A good place to do this, although this was probably not intended - for this kind of use. We need to dump the literal pool before - references are made to a null symbol pointer. */ - void arm_cleanup (void) { literal_pool * pool; + /* Ensure that all the IT blocks are properly closed. */ + check_it_blocks_finished (); + for (pool = list_of_pools; pool; pool = pool->next) { - /* Put it at the end of the relevent section. */ + /* Put it at the end of the relevant section. */ subseg_set (pool->section, pool->sub_section); #ifdef OBJ_ELF arm_elf_change_section (); @@ -19394,6 +21110,73 @@ arm_cleanup (void) } } +#ifdef OBJ_ELF +/* Remove any excess mapping symbols generated for alignment frags in + SEC. We may have created a mapping symbol before a zero byte + alignment; remove it if there's a mapping symbol after the + alignment. */ +static void +check_mapping_symbols (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, + void *dummy ATTRIBUTE_UNUSED) +{ + segment_info_type *seginfo = seg_info (sec); + fragS *fragp; + + if (seginfo == NULL || seginfo->frchainP == NULL) + return; + + for (fragp = seginfo->frchainP->frch_root; + fragp != NULL; + fragp = fragp->fr_next) + { + symbolS *sym = fragp->tc_frag_data.last_map; + fragS *next = fragp->fr_next; + + /* Variable-sized frags have been converted to fixed size by + this point. But if this was variable-sized to start with, + there will be a fixed-size frag after it. So don't handle + next == NULL. */ + if (sym == NULL || next == NULL) + continue; + + if (S_GET_VALUE (sym) < next->fr_address) + /* Not at the end of this frag. */ + continue; + know (S_GET_VALUE (sym) == next->fr_address); + + do + { + if (next->tc_frag_data.first_map != NULL) + { + /* Next frag starts with a mapping symbol. Discard this + one. */ + symbol_remove (sym, &symbol_rootP, &symbol_lastP); + break; + } + + if (next->fr_next == NULL) + { + /* This mapping symbol is at the end of the section. Discard + it. */ + know (next->fr_fix == 0 && next->fr_var == 0); + symbol_remove (sym, &symbol_rootP, &symbol_lastP); + break; + } + + /* As long as we have empty frags without any mapping symbols, + keep looking. */ + /* If the next frag is non-empty and does not start with a + mapping symbol, then this mapping symbol is required. */ + if (next->fr_address != next->fr_next->fr_address) + break; + + next = next->fr_next; + } + while (next != NULL); + } +} +#endif + /* Adjust the symbol table. This marks Thumb symbols as distinct from ARM ones. */ @@ -19468,6 +21251,9 @@ arm_adjust_symtab (void) } } } + + /* Remove any overlapping mapping symbols generated by alignment frags. */ + bfd_map_over_sections (stdoutput, check_mapping_symbols, (char *) 0); #endif } @@ -19510,25 +21296,26 @@ md_begin (void) as_fatal (_("virtual memory exhausted")); for (i = 0; i < sizeof (insns) / sizeof (struct asm_opcode); i++) - hash_insert (arm_ops_hsh, insns[i].template, (PTR) (insns + i)); + hash_insert (arm_ops_hsh, insns[i].template_name, (void *) (insns + i)); for (i = 0; i < sizeof (conds) / sizeof (struct asm_cond); i++) - hash_insert (arm_cond_hsh, conds[i].template, (PTR) (conds + i)); + hash_insert (arm_cond_hsh, conds[i].template_name, (void *) (conds + i)); for (i = 0; i < sizeof (shift_names) / sizeof (struct asm_shift_name); i++) - hash_insert (arm_shift_hsh, shift_names[i].name, (PTR) (shift_names + i)); + hash_insert (arm_shift_hsh, shift_names[i].name, (void *) (shift_names + i)); for (i = 0; i < sizeof (psrs) / sizeof (struct asm_psr); i++) - hash_insert (arm_psr_hsh, psrs[i].template, (PTR) (psrs + i)); + hash_insert (arm_psr_hsh, psrs[i].template_name, (void *) (psrs + i)); for (i = 0; i < sizeof (v7m_psrs) / sizeof (struct asm_psr); i++) - hash_insert (arm_v7m_psr_hsh, v7m_psrs[i].template, (PTR) (v7m_psrs + i)); + hash_insert (arm_v7m_psr_hsh, v7m_psrs[i].template_name, + (void *) (v7m_psrs + i)); for (i = 0; i < sizeof (reg_names) / sizeof (struct reg_entry); i++) - hash_insert (arm_reg_hsh, reg_names[i].name, (PTR) (reg_names + i)); + hash_insert (arm_reg_hsh, reg_names[i].name, (void *) (reg_names + i)); for (i = 0; i < sizeof (barrier_opt_names) / sizeof (struct asm_barrier_opt); i++) - hash_insert (arm_barrier_opt_hsh, barrier_opt_names[i].template, - (PTR) (barrier_opt_names + i)); + hash_insert (arm_barrier_opt_hsh, barrier_opt_names[i].template_name, + (void *) (barrier_opt_names + i)); #ifdef OBJ_ELF for (i = 0; i < sizeof (reloc_names) / sizeof (struct reloc_entry); i++) - hash_insert (arm_reloc_hsh, reloc_names[i].name, (PTR) (reloc_names + i)); + hash_insert (arm_reloc_hsh, reloc_names[i].name, (void *) (reloc_names + i)); #endif set_constant_flonums (); @@ -19556,7 +21343,8 @@ md_begin (void) } else if (!mfpu_opt) { -#if !(defined (TE_LINUX) || defined (TE_NetBSD) || defined (TE_VXWORKS)) +#if !(defined (EABI_DEFAULT) || defined (TE_LINUX) \ + || defined (TE_NetBSD) || defined (TE_VXWORKS)) /* Some environments specify a default FPU. If they don't, infer it from the processor. */ if (mcpu_fpu_opt) @@ -19730,6 +21518,8 @@ md_begin (void) -mthumb Start in Thumb mode -mthumb-interwork Code supports ARM/Thumb interworking + -m[no-]warn-deprecated Warn about deprecated features + For now we will also provide support for: -mapcs-32 32-bit Program counter @@ -19783,6 +21573,7 @@ const char * md_shortopts = "m:k"; #define OPTION_EL (OPTION_MD_BASE + 1) #endif #endif +#define OPTION_FIX_V4BX (OPTION_MD_BASE + 2) struct option md_longopts[] = { @@ -19792,6 +21583,7 @@ struct option md_longopts[] = #ifdef OPTION_EL {"EL", no_argument, NULL, OPTION_EL}, #endif + {"fix-v4bx", no_argument, NULL, OPTION_FIX_V4BX}, {NULL, no_argument, NULL, 0} }; @@ -19825,6 +21617,10 @@ struct arm_option_table arm_opts[] = /* These are recognized by the assembler, but have no affect on code. */ {"mapcs-frame", N_("use frame pointer"), NULL, 0, NULL}, {"mapcs-stack-check", N_("use stack size checking"), NULL, 0, NULL}, + + {"mwarn-deprecated", NULL, &warn_on_deprecated, 1, NULL}, + {"mno-warn-deprecated", N_("do not warn on use of deprecated feature"), + &warn_on_deprecated, 0, NULL}, {NULL, NULL, NULL, 0, NULL} }; @@ -20009,6 +21805,8 @@ static const struct arm_cpu_option_table arm_cpus[] = {"arm922t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL}, {"arm940t", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL}, {"arm9tdmi", ARM_ARCH_V4T, FPU_ARCH_FPA, NULL}, + {"fa526", ARM_ARCH_V4, FPU_ARCH_FPA, NULL}, + {"fa626", ARM_ARCH_V4, FPU_ARCH_FPA, NULL}, /* For V5 or later processors we default to using VFP; but the user should really set the FPU type explicitly. */ {"arm9e-r0", ARM_ARCH_V5TExP, FPU_ARCH_VFP_V2, NULL}, @@ -20032,6 +21830,8 @@ static const struct arm_cpu_option_table arm_cpus[] = {"arm1022e", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL}, {"arm1026ejs", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, "ARM1026EJ-S"}, {"arm1026ej-s", ARM_ARCH_V5TEJ, FPU_ARCH_VFP_V2, NULL}, + {"fa626te", ARM_ARCH_V5TE, FPU_NONE, NULL}, + {"fa726te", ARM_ARCH_V5TE, FPU_ARCH_VFP_V2, NULL}, {"arm1136js", ARM_ARCH_V6, FPU_NONE, "ARM1136J-S"}, {"arm1136j-s", ARM_ARCH_V6, FPU_NONE, NULL}, {"arm1136jfs", ARM_ARCH_V6, FPU_ARCH_VFP_V2, "ARM1136JF-S"}, @@ -20042,11 +21842,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, ARM_FEATURE(0, FPU_VFP_V3 + {"cortex-a8", ARM_ARCH_V7A, ARM_FEATURE (0, FPU_VFP_V3 + | FPU_NEON_EXT_V1), + NULL}, + {"cortex-a9", 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}, + {"cortex-m1", ARM_ARCH_V6M, FPU_NONE, NULL}, + {"cortex-m0", ARM_ARCH_V6M, FPU_NONE, NULL}, /* ??? XSCALE is really an architecture. */ {"xscale", ARM_ARCH_XSCALE, FPU_ARCH_VFP_V2, NULL}, /* ??? iwmmxt is not a processor. */ @@ -20054,7 +21859,7 @@ static const struct arm_cpu_option_table arm_cpus[] = {"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"}, + {"ep9312", ARM_FEATURE (ARM_AEXT_V4T, ARM_CEXT_MAVERICK), FPU_ARCH_MAVERICK, "ARM920T"}, {NULL, ARM_ARCH_NONE, ARM_ARCH_NONE, NULL} }; @@ -20095,6 +21900,7 @@ static const struct arm_arch_option_table arm_archs[] = {"armv6kt2", ARM_ARCH_V6KT2, FPU_ARCH_VFP}, {"armv6zt2", ARM_ARCH_V6ZT2, FPU_ARCH_VFP}, {"armv6zkt2", ARM_ARCH_V6ZKT2, FPU_ARCH_VFP}, + {"armv6-m", ARM_ARCH_V6M, 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. */ @@ -20142,16 +21948,20 @@ 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}, + {"vfp3", FPU_ARCH_VFP_V3}, /* For backwards compatbility. */ {"vfp10", FPU_ARCH_VFP_V2}, {"vfp10-r0", FPU_ARCH_VFP_V1}, {"vfpxd", FPU_ARCH_VFP_V1xD}, + {"vfpv2", FPU_ARCH_VFP_V2}, + {"vfpv3", FPU_ARCH_VFP_V3}, + {"vfpv3-d16", FPU_ARCH_VFP_V3D16}, {"arm1020t", FPU_ARCH_VFP_V1}, {"arm1020e", FPU_ARCH_VFP_V2}, {"arm1136jfs", FPU_ARCH_VFP_V2}, {"arm1136jf-s", FPU_ARCH_VFP_V2}, {"maverick", FPU_ARCH_MAVERICK}, {"neon", FPU_ARCH_VFP_V3_PLUS_NEON_V1}, + {"neon-fp16", FPU_ARCH_NEON_FP16}, {NULL, ARM_ARCH_NONE} }; @@ -20188,7 +21998,7 @@ struct arm_long_option_table char * deprecated; /* If non-null, print this message. */ }; -static int +static bfd_boolean arm_parse_extension (char * str, const arm_feature_set **opt_p) { arm_feature_set *ext_set = xmalloc (sizeof (arm_feature_set)); @@ -20206,7 +22016,7 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p) if (*str != '+') { as_bad (_("invalid architectural extension")); - return 0; + return FALSE; } str++; @@ -20220,7 +22030,7 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p) if (optlen == 0) { as_bad (_("missing architectural extension")); - return 0; + return FALSE; } for (opt = arm_extensions; opt->name != NULL; opt++) @@ -20232,17 +22042,17 @@ arm_parse_extension (char * str, const arm_feature_set **opt_p) if (opt->name == NULL) { - as_bad (_("unknown architectural extnsion `%s'"), str); - return 0; + as_bad (_("unknown architectural extension `%s'"), str); + return FALSE; } str = ext; }; - return 1; + return TRUE; } -static int +static bfd_boolean arm_parse_cpu (char * str) { const struct arm_cpu_option_table * opt; @@ -20257,7 +22067,7 @@ arm_parse_cpu (char * str) if (optlen == 0) { as_bad (_("missing cpu name `%s'"), str); - return 0; + return FALSE; } for (opt = arm_cpus; opt->name != NULL; opt++) @@ -20266,10 +22076,11 @@ arm_parse_cpu (char * str) mcpu_cpu_opt = &opt->value; mcpu_fpu_opt = &opt->default_fpu; if (opt->canonical_name) - strcpy(selected_cpu_name, opt->canonical_name); + strcpy (selected_cpu_name, opt->canonical_name); else { int i; + for (i = 0; i < optlen; i++) selected_cpu_name[i] = TOUPPER (opt->name[i]); selected_cpu_name[i] = 0; @@ -20278,14 +22089,14 @@ arm_parse_cpu (char * str) if (ext != NULL) return arm_parse_extension (ext, &mcpu_cpu_opt); - return 1; + return TRUE; } as_bad (_("unknown cpu `%s'"), str); - return 0; + return FALSE; } -static int +static bfd_boolean arm_parse_arch (char * str) { const struct arm_arch_option_table *opt; @@ -20300,7 +22111,7 @@ arm_parse_arch (char * str) if (optlen == 0) { as_bad (_("missing architecture name `%s'"), str); - return 0; + return FALSE; } for (opt = arm_archs; opt->name != NULL; opt++) @@ -20308,19 +22119,19 @@ arm_parse_arch (char * str) { march_cpu_opt = &opt->value; march_fpu_opt = &opt->default_fpu; - strcpy(selected_cpu_name, opt->name); + strcpy (selected_cpu_name, opt->name); if (ext != NULL) return arm_parse_extension (ext, &march_cpu_opt); - return 1; + return TRUE; } as_bad (_("unknown architecture `%s'\n"), str); - return 0; + return FALSE; } -static int +static bfd_boolean arm_parse_fpu (char * str) { const struct arm_option_cpu_value_table * opt; @@ -20329,14 +22140,14 @@ arm_parse_fpu (char * str) if (streq (opt->name, str)) { mfpu_opt = &opt->value; - return 1; + return TRUE; } as_bad (_("unknown floating point format `%s'\n"), str); - return 0; + return FALSE; } -static int +static bfd_boolean arm_parse_float_abi (char * str) { const struct arm_option_value_table * opt; @@ -20345,15 +22156,15 @@ arm_parse_float_abi (char * str) if (streq (opt->name, str)) { mfloat_abi_opt = opt->value; - return 1; + return TRUE; } as_bad (_("unknown floating point abi `%s'\n"), str); - return 0; + return FALSE; } #ifdef OBJ_ELF -static int +static bfd_boolean arm_parse_eabi (char * str) { const struct arm_option_value_table *opt; @@ -20362,13 +22173,36 @@ arm_parse_eabi (char * str) if (streq (opt->name, str)) { meabi_flags = opt->value; - return 1; + return TRUE; } as_bad (_("unknown EABI `%s'\n"), str); - return 0; + return FALSE; } #endif +static bfd_boolean +arm_parse_it_mode (char * str) +{ + bfd_boolean ret = TRUE; + + if (streq ("arm", str)) + implicit_it_mode = IMPLICIT_IT_MODE_ARM; + else if (streq ("thumb", str)) + implicit_it_mode = IMPLICIT_IT_MODE_THUMB; + else if (streq ("always", str)) + implicit_it_mode = IMPLICIT_IT_MODE_ALWAYS; + else if (streq ("never", str)) + implicit_it_mode = IMPLICIT_IT_MODE_NEVER; + else + { + as_bad (_("unknown implicit IT mode `%s', should be "\ + "arm, thumb, always, or never."), str); + ret = FALSE; + } + + return ret; +} + struct arm_long_option_table arm_long_opts[] = { {"mcpu=", N_("\t assemble for CPU "), @@ -20380,9 +22214,11 @@ struct arm_long_option_table arm_long_opts[] = {"mfloat-abi=", N_("\t assemble for floating point ABI "), arm_parse_float_abi, NULL}, #ifdef OBJ_ELF - {"meabi=", N_("\t assemble for eabi version "), + {"meabi=", N_("\t\t assemble for eabi version "), arm_parse_eabi, NULL}, #endif + {"mimplicit-it=", N_("\t controls implicit insertion of IT instructions"), + arm_parse_it_mode, NULL}, {NULL, NULL, 0, NULL} }; @@ -20407,6 +22243,10 @@ md_parse_option (int c, char * arg) break; #endif + case OPTION_FIX_V4BX: + fix_v4bx = TRUE; + break; + case 'a': /* Listing option. Just ignore these, we don't support additional ones. */ @@ -20419,12 +22259,10 @@ md_parse_option (int c, char * arg) && ((arg == NULL && opt->option[1] == 0) || streq (arg, opt->option + 1))) { -#if WARN_DEPRECATED /* If the option is deprecated, tell the user. */ - if (opt->deprecated != NULL) + if (warn_on_deprecated && opt->deprecated != NULL) as_tsktsk (_("option `-%c%s' is deprecated: %s"), c, arg ? arg : "", _(opt->deprecated)); -#endif if (opt->var != NULL) *opt->var = opt->value; @@ -20439,12 +22277,10 @@ md_parse_option (int c, char * arg) && ((arg == NULL && fopt->option[1] == 0) || streq (arg, fopt->option + 1))) { -#if WARN_DEPRECATED /* If the option is deprecated, tell the user. */ - if (fopt->deprecated != NULL) + if (warn_on_deprecated && fopt->deprecated != NULL) as_tsktsk (_("option `-%c%s' is deprecated: %s"), c, arg ? arg : "", _(fopt->deprecated)); -#endif if (fopt->var != NULL) *fopt->var = &fopt->value; @@ -20461,12 +22297,10 @@ md_parse_option (int c, char * arg) && strncmp (arg, lopt->option + 1, strlen (lopt->option + 1)) == 0) { -#if WARN_DEPRECATED /* If the option is deprecated, tell the user. */ - if (lopt->deprecated != NULL) + if (warn_on_deprecated && lopt->deprecated != NULL) as_tsktsk (_("option `-%c%s' is deprecated: %s"), c, arg, _(lopt->deprecated)); -#endif /* Call the sup-option parser. */ return lopt->func (arg + strlen (lopt->option) - 1); @@ -20504,6 +22338,9 @@ md_show_usage (FILE * fp) fprintf (fp, _("\ -EL assemble code for a little-endian cpu\n")); #endif + + fprintf (fp, _("\ + --fix-v4bx Allow BX in ARMv4 code\n")); } @@ -20521,18 +22358,39 @@ static const cpu_arch_ver_table cpu_arch_ver[] = {1, ARM_ARCH_V4}, {2, ARM_ARCH_V4T}, {3, ARM_ARCH_V5}, + {3, ARM_ARCH_V5T}, {4, ARM_ARCH_V5TE}, {5, ARM_ARCH_V5TEJ}, {6, ARM_ARCH_V6}, {7, ARM_ARCH_V6Z}, - {8, ARM_ARCH_V6K}, - {9, ARM_ARCH_V6T2}, + {9, ARM_ARCH_V6K}, + {11, ARM_ARCH_V6M}, + {8, ARM_ARCH_V6T2}, {10, ARM_ARCH_V7A}, {10, ARM_ARCH_V7R}, {10, ARM_ARCH_V7M}, {0, ARM_ARCH_NONE} }; +/* Set an attribute if it has not already been set by the user. */ +static void +aeabi_set_attribute_int (int tag, int value) +{ + if (tag < 1 + || tag >= NUM_KNOWN_OBJ_ATTRIBUTES + || !attributes_set_explicitly[tag]) + bfd_elf_add_proc_attr_int (stdoutput, tag, value); +} + +static void +aeabi_set_attribute_string (int tag, const char *value) +{ + if (tag < 1 + || tag >= NUM_KNOWN_OBJ_ATTRIBUTES + || !attributes_set_explicitly[tag]) + bfd_elf_add_proc_attr_string (stdoutput, tag, value); +} + /* Set the public EABI object attributes. */ static void aeabi_set_public_attributes (void) @@ -20571,52 +22429,55 @@ aeabi_set_public_attributes (void) char *p; p = selected_cpu_name; - if (strncmp(p, "armv", 4) == 0) + if (strncmp (p, "armv", 4) == 0) { int i; - + p += 4; for (i = 0; p[i]; i++) p[i] = TOUPPER (p[i]); } - bfd_elf_add_proc_attr_string (stdoutput, 5, p); + aeabi_set_attribute_string (Tag_CPU_name, p); } /* Tag_CPU_arch. */ - bfd_elf_add_proc_attr_int (stdoutput, 6, arch); + aeabi_set_attribute_int (Tag_CPU_arch, arch); /* Tag_CPU_arch_profile. */ if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7a)) - bfd_elf_add_proc_attr_int (stdoutput, 7, 'A'); + aeabi_set_attribute_int (Tag_CPU_arch_profile, 'A'); else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7r)) - bfd_elf_add_proc_attr_int (stdoutput, 7, 'R'); - else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v7m)) - bfd_elf_add_proc_attr_int (stdoutput, 7, 'M'); + aeabi_set_attribute_int (Tag_CPU_arch_profile, 'R'); + else if (ARM_CPU_HAS_FEATURE (flags, arm_ext_m)) + aeabi_set_attribute_int (Tag_CPU_arch_profile, 'M'); /* Tag_ARM_ISA_use. */ - if (ARM_CPU_HAS_FEATURE (arm_arch_used, arm_arch_full)) - bfd_elf_add_proc_attr_int (stdoutput, 8, 1); + if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v1) + || arch == 0) + aeabi_set_attribute_int (Tag_ARM_ISA_use, 1); /* Tag_THUMB_ISA_use. */ - if (ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_arch_full)) - bfd_elf_add_proc_attr_int (stdoutput, 9, - ARM_CPU_HAS_FEATURE (thumb_arch_used, arm_arch_t2) ? 2 : 1); + if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v4t) + || arch == 0) + aeabi_set_attribute_int (Tag_THUMB_ISA_use, + ARM_CPU_HAS_FEATURE (flags, arm_arch_t2) ? 2 : 1); /* Tag_VFP_arch. */ - 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); + if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_d32)) + aeabi_set_attribute_int (Tag_VFP_arch, 3); + else if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_v3)) + aeabi_set_attribute_int (Tag_VFP_arch, 4); + else if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_v2)) + aeabi_set_attribute_int (Tag_VFP_arch, 2); + else if (ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_v1) + || ARM_CPU_HAS_FEATURE (flags, fpu_vfp_ext_v1xd)) + aeabi_set_attribute_int (Tag_VFP_arch, 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)) - 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); + if (ARM_CPU_HAS_FEATURE (flags, arm_cext_iwmmxt2)) + aeabi_set_attribute_int (Tag_WMMX_arch, 2); + else if (ARM_CPU_HAS_FEATURE (flags, arm_cext_iwmmxt)) + aeabi_set_attribute_int (Tag_WMMX_arch, 1); + /* Tag_Advanced_SIMD_arch (formerly Tag_NEON_arch). */ + if (ARM_CPU_HAS_FEATURE (flags, fpu_neon_ext_v1)) + aeabi_set_attribute_int (Tag_Advanced_SIMD_arch, 1); + /* Tag_VFP_HP_extension (formerly Tag_NEON_FP16_arch). */ + if (ARM_CPU_HAS_FEATURE (flags, fpu_neon_fp16)) + aeabi_set_attribute_int (Tag_VFP_HP_extension, 1); } /* Add the default contents for the .ARM.attributes section. */ @@ -20641,7 +22502,7 @@ s_arm_cpu (int ignored ATTRIBUTE_UNUSED) char saved_char; name = input_line_pointer; - while (*input_line_pointer && !ISSPACE(*input_line_pointer)) + while (*input_line_pointer && !ISSPACE (*input_line_pointer)) input_line_pointer++; saved_char = *input_line_pointer; *input_line_pointer = 0; @@ -20653,7 +22514,7 @@ s_arm_cpu (int ignored ATTRIBUTE_UNUSED) mcpu_cpu_opt = &opt->value; selected_cpu = opt->value; if (opt->canonical_name) - strcpy(selected_cpu_name, opt->canonical_name); + strcpy (selected_cpu_name, opt->canonical_name); else { int i; @@ -20682,7 +22543,7 @@ s_arm_arch (int ignored ATTRIBUTE_UNUSED) char *name; name = input_line_pointer; - while (*input_line_pointer && !ISSPACE(*input_line_pointer)) + while (*input_line_pointer && !ISSPACE (*input_line_pointer)) input_line_pointer++; saved_char = *input_line_pointer; *input_line_pointer = 0; @@ -20693,7 +22554,7 @@ s_arm_arch (int ignored ATTRIBUTE_UNUSED) { mcpu_cpu_opt = &opt->value; selected_cpu = opt->value; - strcpy(selected_cpu_name, opt->name); + strcpy (selected_cpu_name, opt->name); ARM_MERGE_FEATURE_SETS (cpu_variant, *mcpu_cpu_opt, *mfpu_opt); *input_line_pointer = saved_char; demand_empty_rest_of_line (); @@ -20716,7 +22577,7 @@ s_arm_object_arch (int ignored ATTRIBUTE_UNUSED) char *name; name = input_line_pointer; - while (*input_line_pointer && !ISSPACE(*input_line_pointer)) + while (*input_line_pointer && !ISSPACE (*input_line_pointer)) input_line_pointer++; saved_char = *input_line_pointer; *input_line_pointer = 0; @@ -20736,7 +22597,6 @@ s_arm_object_arch (int ignored ATTRIBUTE_UNUSED) ignore_rest_of_line (); } - /* Parse a .fpu directive. */ static void @@ -20747,11 +22607,11 @@ s_arm_fpu (int ignored ATTRIBUTE_UNUSED) char *name; name = input_line_pointer; - while (*input_line_pointer && !ISSPACE(*input_line_pointer)) + while (*input_line_pointer && !ISSPACE (*input_line_pointer)) input_line_pointer++; saved_char = *input_line_pointer; *input_line_pointer = 0; - + for (opt = arm_fpus; opt->name != NULL; opt++) if (streq (opt->name, name)) { @@ -20768,8 +22628,112 @@ s_arm_fpu (int ignored ATTRIBUTE_UNUSED) } /* Copy symbol information. */ + void arm_copy_symbol_attributes (symbolS *dest, symbolS *src) { ARM_GET_FLAG (dest) = ARM_GET_FLAG (src); } + +#ifdef OBJ_ELF +/* Given a symbolic attribute NAME, return the proper integer value. + Returns -1 if the attribute is not known. */ + +int +arm_convert_symbolic_attribute (const char *name) +{ + static const struct + { + const char * name; + const int tag; + } + attribute_table[] = + { + /* When you modify this table you should + also modify the list in doc/c-arm.texi. */ +#define T(tag) {#tag, tag} + T (Tag_CPU_raw_name), + T (Tag_CPU_name), + T (Tag_CPU_arch), + T (Tag_CPU_arch_profile), + T (Tag_ARM_ISA_use), + T (Tag_THUMB_ISA_use), + T (Tag_VFP_arch), + T (Tag_WMMX_arch), + T (Tag_Advanced_SIMD_arch), + T (Tag_PCS_config), + T (Tag_ABI_PCS_R9_use), + T (Tag_ABI_PCS_RW_data), + T (Tag_ABI_PCS_RO_data), + T (Tag_ABI_PCS_GOT_use), + T (Tag_ABI_PCS_wchar_t), + T (Tag_ABI_FP_rounding), + T (Tag_ABI_FP_denormal), + T (Tag_ABI_FP_exceptions), + T (Tag_ABI_FP_user_exceptions), + T (Tag_ABI_FP_number_model), + T (Tag_ABI_align8_needed), + T (Tag_ABI_align8_preserved), + T (Tag_ABI_enum_size), + T (Tag_ABI_HardFP_use), + T (Tag_ABI_VFP_args), + T (Tag_ABI_WMMX_args), + T (Tag_ABI_optimization_goals), + T (Tag_ABI_FP_optimization_goals), + T (Tag_compatibility), + T (Tag_CPU_unaligned_access), + T (Tag_VFP_HP_extension), + T (Tag_ABI_FP_16bit_format), + T (Tag_nodefaults), + T (Tag_also_compatible_with), + T (Tag_conformance), + T (Tag_T2EE_use), + T (Tag_Virtualization_use), + T (Tag_MPextension_use) +#undef T + }; + unsigned int i; + + if (name == NULL) + return -1; + + for (i = 0; i < ARRAY_SIZE (attribute_table); i++) + if (streq (name, attribute_table[i].name)) + return attribute_table[i].tag; + + return -1; +} + + +/* Apply sym value for relocations only in the case that + they are for local symbols and you have the respective + architectural feature for blx and simple switches. */ +int +arm_apply_sym_value (struct fix * fixP) +{ + if (fixP->fx_addsy + && ARM_CPU_HAS_FEATURE (selected_cpu, arm_ext_v5t) + && !S_IS_EXTERNAL (fixP->fx_addsy)) + { + switch (fixP->fx_r_type) + { + case BFD_RELOC_ARM_PCREL_BLX: + case BFD_RELOC_THUMB_PCREL_BRANCH23: + if (ARM_IS_FUNC (fixP->fx_addsy)) + return 1; + break; + + case BFD_RELOC_ARM_PCREL_CALL: + case BFD_RELOC_THUMB_PCREL_BLX: + if (THUMB_IS_FUNC (fixP->fx_addsy)) + return 1; + break; + + default: + break; + } + + } + return 0; +} +#endif /* OBJ_ELF */ diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h index 9b58762..dacb342 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, 2005, 2006, 2007 Free Software Foundation, Inc. + 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org) Modified by David Taylor (dtaylor@armltd.co.uk) @@ -82,7 +82,7 @@ struct fix; #define TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX) #define md_relax_frag(segment, fragp, stretch) \ - arm_relax_frag(segment, fragp, stretch) + arm_relax_frag (segment, fragp, stretch) extern int arm_relax_frag (asection *, struct frag *, long); #define md_optimize_expr(l,o,r) arm_optimize_expr (l, o, r) @@ -123,18 +123,31 @@ bfd_boolean arm_is_eabi (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)) + ARM_IS_THUMB and the function type. */ +#define THUMB_IS_FUNC(s) \ + ((s) != NULL \ + && ((arm_is_eabi () \ + && (ARM_IS_THUMB (s)) \ + && (symbol_get_bfdsym (s)->flags & BSF_FUNCTION)) \ + || (ARM_GET_FLAG (s) & THUMB_FLAG_FUNC))) + +#define ARM_IS_FUNC(s) \ + (((s) != NULL \ + && arm_is_eabi () \ + && !(ARM_IS_THUMB (s)) \ + /* && !(THUMB_FLAG_FUNC & ARM_GET_FLAG (s)) \ */ \ + && (symbol_get_bfdsym (s)->flags & BSF_FUNCTION))) + #else -#define THUMB_IS_FUNC(s) (ARM_GET_FLAG (s) & THUMB_FLAG_FUNC) + +#define THUMB_IS_FUNC(s) ((s) && ARM_GET_FLAG (s) & THUMB_FLAG_FUNC) +#define ARM_IS_FUNC(s) (!THUMB_IS_FUNC (s) \ + && (s) && (symbol_get_bfdsym (s)->flags & BSF_FUNCTION)) #endif #define ARM_SET_THUMB(s,t) ((t) ? ARM_SET_FLAG (s, ARM_FLAG_THUMB) : ARM_RESET_FLAG (s, ARM_FLAG_THUMB)) @@ -142,12 +155,13 @@ bfd_boolean arm_is_eabi (void); #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_START_LABEL(C,S,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 () @@ -179,13 +193,27 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *); #define TC_CONS_FIX_NEW cons_fix_new_arm -#define MAX_MEM_FOR_RS_ALIGN_CODE 31 +#define MAX_MEM_ALIGNMENT_BYTES 6 +#define MAX_MEM_FOR_RS_ALIGN_CODE ((1 << MAX_MEM_ALIGNMENT_BYTES) - 1) /* For frags in code sections we need to record whether they contain ARM code or THUMB code. This is that if they have to be aligned, they can contain the correct type of no-op instruction. */ -#define TC_FRAG_TYPE int -#define TC_FRAG_INIT(fragp) arm_init_frag (fragp) +struct arm_frag_type +{ + int thumb_mode; +#ifdef OBJ_ELF + /* If there is a mapping symbol at offset 0 in this frag, + it will be saved in FIRST_MAP. If there are any mapping + symbols in this frag, the last one will be saved in + LAST_MAP. */ + symbolS *first_map, *last_map; +#endif +}; + +#define TC_FRAG_TYPE struct arm_frag_type +/* NOTE: max_chars is a local variable from frag_var / frag_variant. */ +#define TC_FRAG_INIT(fragp) arm_init_frag (fragp, max_chars) #define HANDLE_ALIGN(fragp) arm_handle_align (fragp) #define md_do_align(N, FILL, LEN, MAX, LABEL) \ @@ -203,6 +231,21 @@ void arm_copy_symbol_attributes (symbolS *, symbolS *); /* Registers are generally saved at negative offsets to the CFA. */ #define DWARF2_CIE_DATA_ALIGNMENT (-4) +/* State variables for IT block handling. */ +enum it_state +{ + OUTSIDE_IT_BLOCK, MANUAL_IT_BLOCK, AUTOMATIC_IT_BLOCK +}; +struct current_it +{ + int mask; + enum it_state state; + int cc; + int block_length; + char *insn; + int state_handled; +}; + #ifdef OBJ_ELF # define obj_frob_symbol(sym, punt) armelf_frob_symbol ((sym), & (punt)) # define md_elf_section_change_hook() arm_elf_change_section () @@ -229,7 +272,13 @@ void mapping_state (enum mstate); struct arm_segment_info_type { enum mstate mapstate; + + /* Bit N indicates that an R_ARM_NONE relocation has been output for + __aeabi_unwind_cpp_prN already if set. This enables dependencies to be + emitted only once per section, to save unnecessary bloat. */ unsigned int marked_pr_dependency; + + struct current_it current_it; }; /* We want .cfi_* pseudo-ops for generating unwind info. */ @@ -247,10 +296,17 @@ struct arm_segment_info_type # define EXTERN_FORCE_RELOC 1 # define tc_fix_adjustable(FIX) arm_fix_adjustable (FIX) +#endif + +#ifdef OBJ_ELF /* Values passed to md_apply_fix don't include the symbol value. */ -# define MD_APPLY_SYM_VALUE(FIX) 0 -# define TC_VALIDATE_FIX(FIX, SEGTYPE, LABEL) arm_validate_fix (FIX) +# define MD_APPLY_SYM_VALUE(FIX) arm_apply_sym_value (FIX) +#endif +#ifdef OBJ_COFF +# define TC_VALIDATE_FIX(FIX, SEGTYPE, LABEL) arm_validate_fix (FIX) +/* Values passed to md_apply_fix don't include the symbol value. */ +# define MD_APPLY_SYM_VALUE(FIX) 0 #endif #define MD_PCREL_FROM_SECTION(F,S) md_pcrel_from_section(F,S) @@ -269,7 +325,7 @@ extern char * arm_canonicalize_symbol_name (char *); extern void arm_adjust_symtab (void); extern void armelf_frob_symbol (symbolS *, int *); extern void cons_fix_new_arm (fragS *, int, int, expressionS *); -extern void arm_init_frag (struct frag *); +extern void arm_init_frag (struct frag *, int); 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); @@ -284,3 +340,9 @@ extern void tc_arm_frame_initial_instructions (void); void tc_pe_dwarf2_emit_offset (symbolS *, unsigned int); #endif /* TE_PE */ + +#ifdef OBJ_ELF +#define CONVERT_SYMBOLIC_ATTRIBUTE(name) arm_convert_symbolic_attribute (name) +extern int arm_convert_symbolic_attribute (const char *); +extern int arm_apply_sym_value (struct fix *); +#endif diff --git a/gas/config/tc-avr.c b/gas/config/tc-avr.c index fc6a0c7..9d14f64 100644 --- a/gas/config/tc-avr.c +++ b/gas/config/tc-avr.c @@ -1,6 +1,6 @@ /* tc-avr.c -- Assembler code for the ATMEL AVR - Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007 + Copyright 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Denis Chertykov @@ -56,114 +56,170 @@ struct mcu_type_s }; /* XXX - devices that don't seem to exist (renamed, replaced with larger - ones, or planned but never produced), left here for compatibility. - TODO: hide them in show_mcu_list output? */ + ones, or planned but never produced), left here for compatibility. */ 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}, - {"avr6", AVR_ISA_ALL, bfd_mach_avr6}, + {"avr1", AVR_ISA_AVR1, bfd_mach_avr1}, +/* TODO: insruction set for avr2 architecture should be AVR_ISA_AVR2, + but set to AVR_ISA_AVR25 for some following version + of GCC (from 4.3) for backward compatibility. */ + {"avr2", AVR_ISA_AVR25, bfd_mach_avr2}, + {"avr25", AVR_ISA_AVR25, bfd_mach_avr25}, +/* TODO: insruction set for avr3 architecture should be AVR_ISA_AVR3, + but set to AVR_ISA_AVR3_ALL for some following version + of GCC (from 4.3) for backward compatibility. */ + {"avr3", AVR_ISA_AVR3_ALL, bfd_mach_avr3}, + {"avr31", AVR_ISA_AVR31, bfd_mach_avr31}, + {"avr35", AVR_ISA_AVR35, bfd_mach_avr35}, + {"avr4", AVR_ISA_AVR4, bfd_mach_avr4}, +/* TODO: insruction set for avr5 architecture should be AVR_ISA_AVR5, + but set to AVR_ISA_AVR51 for some following version + of GCC (from 4.3) for backward compatibility. */ + {"avr5", AVR_ISA_AVR51, bfd_mach_avr5}, + {"avr51", AVR_ISA_AVR51, bfd_mach_avr51}, + {"avr6", AVR_ISA_AVR6, 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}, + {"attiny11", AVR_ISA_AVR1, bfd_mach_avr1}, + {"attiny12", AVR_ISA_AVR1, bfd_mach_avr1}, + {"attiny15", AVR_ISA_AVR1, bfd_mach_avr1}, + {"attiny28", AVR_ISA_AVR1, bfd_mach_avr1}, + {"at90s2313", AVR_ISA_AVR2, bfd_mach_avr2}, + {"at90s2323", AVR_ISA_AVR2, bfd_mach_avr2}, + {"at90s2333", AVR_ISA_AVR2, bfd_mach_avr2}, /* XXX -> 4433 */ + {"at90s2343", AVR_ISA_AVR2, bfd_mach_avr2}, + {"attiny22", AVR_ISA_AVR2, bfd_mach_avr2}, /* XXX -> 2343 */ + {"attiny26", AVR_ISA_2xxe, bfd_mach_avr2}, + {"at90s4414", AVR_ISA_AVR2, bfd_mach_avr2}, /* XXX -> 8515 */ + {"at90s4433", AVR_ISA_AVR2, bfd_mach_avr2}, + {"at90s4434", AVR_ISA_AVR2, bfd_mach_avr2}, /* XXX -> 8535 */ + {"at90s8515", AVR_ISA_AVR2, bfd_mach_avr2}, + {"at90c8534", AVR_ISA_AVR2, bfd_mach_avr2}, + {"at90s8535", AVR_ISA_AVR2, bfd_mach_avr2}, + {"attiny13", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny13a", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny2313", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny2313a",AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny24", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny24a", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny4313", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny44", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny44a", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny84", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny25", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny45", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny85", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny261", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny261a", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny461", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny861", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny861a", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny87", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny43u", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny48", AVR_ISA_AVR25, bfd_mach_avr25}, + {"attiny88", AVR_ISA_AVR25, bfd_mach_avr25}, + {"at86rf401", AVR_ISA_RF401, bfd_mach_avr25}, + {"ata6289", AVR_ISA_AVR25, bfd_mach_avr25}, + {"at43usb355", AVR_ISA_AVR3, bfd_mach_avr3}, + {"at76c711", AVR_ISA_AVR3, bfd_mach_avr3}, + {"atmega103", AVR_ISA_AVR31, bfd_mach_avr31}, + {"at43usb320", AVR_ISA_AVR31, bfd_mach_avr31}, + {"attiny167", AVR_ISA_AVR35, bfd_mach_avr35}, + {"attiny327", AVR_ISA_AVR35, bfd_mach_avr35}, + {"at90usb82", AVR_ISA_AVR35, bfd_mach_avr35}, + {"at90usb162", AVR_ISA_AVR35, bfd_mach_avr35}, + {"atmega8u2", AVR_ISA_AVR35, bfd_mach_avr35}, + {"atmega16u2", AVR_ISA_AVR35, bfd_mach_avr35}, + {"atmega32u2", AVR_ISA_AVR35, bfd_mach_avr35}, {"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}, + {"atmega48", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega48p", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega88", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega88p", AVR_ISA_AVR4, 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}, + {"atmega8hva", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega4hvd", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega8hvd", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega8c1", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega8m1", AVR_ISA_AVR4, bfd_mach_avr4}, + {"at90pwm1", AVR_ISA_AVR4, bfd_mach_avr4}, + {"at90pwm2", AVR_ISA_AVR4, bfd_mach_avr4}, + {"at90pwm2b", AVR_ISA_AVR4, bfd_mach_avr4}, + {"at90pwm3", AVR_ISA_AVR4, bfd_mach_avr4}, + {"at90pwm3b", AVR_ISA_AVR4, bfd_mach_avr4}, + {"at90pwm81", AVR_ISA_AVR4, bfd_mach_avr4}, + {"atmega16", AVR_ISA_AVR5, bfd_mach_avr5}, {"atmega161", AVR_ISA_M161, bfd_mach_avr5}, - {"atmega162", AVR_ISA_M323, bfd_mach_avr5}, + {"atmega162", AVR_ISA_AVR5, 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}, + {"atmega164p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega165", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega165p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega168", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega168p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega169", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega169p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega16c1", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega32", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega323", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega324p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega325", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega325p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega3250", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega3250p",AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega328p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega329", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega329p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega3290", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega3290p",AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega406", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega64", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega640", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega644", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega644p", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega644pa",AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega645", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega649", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega6450", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega6490", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega16hva",AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega16hvb",AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega32hvb",AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90can32" , AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90can64" , AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90pwm216", AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90pwm316", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega32c1", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega64c1", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega16m1", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega32m1", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega64m1", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega16u4", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega32u4", AVR_ISA_AVR5, bfd_mach_avr5}, + {"atmega32u6", AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90usb646", AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90usb647", AVR_ISA_AVR5, bfd_mach_avr5}, + {"at90scr100", AVR_ISA_AVR5, bfd_mach_avr5}, {"at94k", AVR_ISA_94K, bfd_mach_avr5}, - {"atmega2560", AVR_ISA_ALL, bfd_mach_avr6}, - {"atmega2561", AVR_ISA_ALL, bfd_mach_avr6}, + {"atmega128", AVR_ISA_AVR51, bfd_mach_avr51}, + {"atmega1280", AVR_ISA_AVR51, bfd_mach_avr51}, + {"atmega1281", AVR_ISA_AVR51, bfd_mach_avr51}, + {"atmega1284p",AVR_ISA_AVR51, bfd_mach_avr51}, + {"atmega128rfa1",AVR_ISA_AVR51, bfd_mach_avr51}, + {"at90can128", AVR_ISA_AVR51, bfd_mach_avr51}, + {"at90usb1286",AVR_ISA_AVR51, bfd_mach_avr51}, + {"at90usb1287",AVR_ISA_AVR51, bfd_mach_avr51}, + {"m3000f", AVR_ISA_AVR51, bfd_mach_avr51}, + {"m3000s", AVR_ISA_AVR51, bfd_mach_avr51}, + {"m3001b", AVR_ISA_AVR51, bfd_mach_avr51}, + {"atmega2560", AVR_ISA_AVR6, bfd_mach_avr6}, + {"atmega2561", AVR_ISA_AVR6, bfd_mach_avr6}, {NULL, 0, 0} }; /* Current MCU type. */ -static struct mcu_type_s default_mcu = {"avr2", AVR_ISA_2xxx,bfd_mach_avr2}; +static struct mcu_type_s default_mcu = {"avr2", AVR_ISA_AVR2, bfd_mach_avr2}; static struct mcu_type_s * avr_mcu = & default_mcu; /* AVR target-specific switches. */ @@ -324,11 +380,18 @@ md_show_usage (FILE *stream) _("AVR options:\n" " -mmcu=[avr-name] select microcontroller variant\n" " [avr-name] can be:\n" - " avr1 - AT90S1200, ATtiny1x, ATtiny28\n" - " avr2 - AT90S2xxx, AT90S4xxx, AT90S8xxx, ATtiny22\n" - " avr3 - ATmega103, ATmega603\n" - " avr4 - ATmega83, ATmega85\n" - " avr5 - ATmega161, ATmega163, ATmega32, AT94K\n" + " avr1 - classic AVR core without data RAM\n" + " avr2 - classic AVR core with up to 8K program memory\n" + " avr25 - classic AVR core with up to 8K program memory\n" + " plus the MOVW instruction\n" + " avr3 - classic AVR core with up to 64K program memory\n" + " avr31 - classic AVR core with up to 128K program memory\n" + " avr35 - classic AVR core with up to 64K program memory\n" + " plus the MOVW instruction\n" + " avr4 - enhanced AVR core with up to 8K program memory\n" + " avr5 - enhanced AVR core with up to 64K program memory\n" + " avr51 - enhanced AVR core with up to 128K program memory\n" + " avr6 - enhanced AVR core with up to 256K program memory\n" " or immediate microcontroller name.\n")); fprintf (stream, _(" -mall-opcodes accept all AVR opcodes, even if not supported by MCU\n" @@ -408,46 +471,10 @@ md_undefined_symbol (char *name ATTRIBUTE_UNUSED) return NULL; } -/* Turn a string in input_line_pointer into a floating point constant - of type TYPE, and store the appropriate bytes in *LITP. The number - of LITTLENUMS emitted is stored in *SIZEP. An error message is - returned, or NULL on OK. */ - char * md_atof (int type, char *litP, int *sizeP) { - int prec; - LITTLENUM_TYPE words[4]; - LITTLENUM_TYPE *wordP; - 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 * sizeof (LITTLENUM_TYPE); - - /* This loop outputs the LITTLENUMs in REVERSE order. */ - for (wordP = words + prec - 1; prec--;) - { - md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return NULL; + return ieee_md_atof (type, litP, sizeP, FALSE); } void @@ -501,7 +528,7 @@ avr_get_constant (char *str, int max) as_bad (_("constant value required")); if (ex.X_add_number > max || ex.X_add_number < 0) - as_bad (_("number must be less than %d"), max + 1); + as_bad (_("number must be positive and less than %d"), max + 1); return ex.X_add_number; } @@ -645,7 +672,9 @@ avr_ldi_expression (expressionS *exp) break; default: - as_warn (_("expression dangerous with linker stubs")); + /* PR 5523: Do not generate a warning here, + legitimate code can trigger this case. */ + break; } } return reloc_to_return; @@ -792,6 +821,12 @@ avr_operand (struct avr_opcodes_s *opcode, ++str; op_mask |= 1; } + + /* attiny26 can do "lpm" and "lpm r,Z" but not "lpm r,Z+". */ + if (!avr_opt.all_opcodes + && (op_mask & 0x0001) + && !(avr_mcu->isa & AVR_ISA_MOVW)) + as_bad (_("postincrement not supported")); break; case 'b': @@ -1222,7 +1257,7 @@ md_apply_fix (fixS *fixP, valueT * valP, segT seg) } else { - switch (fixP->fx_r_type) + switch ((int) fixP->fx_r_type) { case -BFD_RELOC_AVR_HI8_LDI_NEG: case -BFD_RELOC_AVR_HI8_LDI: @@ -1331,6 +1366,8 @@ md_assemble (char *str) if (!avr_opt.all_opcodes && (opcode->isa & avr_mcu->isa) != opcode->isa) as_bad (_("illegal opcode %s for mcu %s"), opcode->name, avr_mcu->name); + dwarf2_emit_insn (0); + /* We used to set input_line_pointer to the result of get_operands, but that is wrong. Our caller assumes we don't change it. */ { diff --git a/gas/config/tc-bfin.c b/gas/config/tc-bfin.c index bbc39f2..adbc3e4 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, 2006, 2007 + Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -37,8 +37,6 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE; extern YY_BUFFER_STATE yy_scan_string (const char *yy_str); extern void yy_delete_buffer (YY_BUFFER_STATE b); static parse_state parse (char *line); -static void bfin_s_bss PARAMS ((int)); -static int md_chars_to_number PARAMS ((char *, int)); /* Global variables. */ struct bfin_insn *insn; @@ -50,165 +48,14 @@ FILE *errorf; /* Flags to set in the elf header */ #define DEFAULT_FLAGS 0 -static flagword bfin_flags = DEFAULT_FLAGS; -static const char *bfin_pic_flag = (const char *)0; - -/* Registers list. */ -struct bfin_reg_entry -{ - const char *name; - int number; -}; +#ifdef OBJ_FDPIC_ELF +# define DEFAULT_FDPIC EF_BFIN_FDPIC +#else +# define DEFAULT_FDPIC 0 +#endif -static const struct bfin_reg_entry bfin_reg_info[] = { - {"R0.L", REG_RL0}, - {"R1.L", REG_RL1}, - {"R2.L", REG_RL2}, - {"R3.L", REG_RL3}, - {"R4.L", REG_RL4}, - {"R5.L", REG_RL5}, - {"R6.L", REG_RL6}, - {"R7.L", REG_RL7}, - {"R0.H", REG_RH0}, - {"R1.H", REG_RH1}, - {"R2.H", REG_RH2}, - {"R3.H", REG_RH3}, - {"R4.H", REG_RH4}, - {"R5.H", REG_RH5}, - {"R6.H", REG_RH6}, - {"R7.H", REG_RH7}, - {"R0", REG_R0}, - {"R1", REG_R1}, - {"R2", REG_R2}, - {"R3", REG_R3}, - {"R4", REG_R4}, - {"R5", REG_R5}, - {"R6", REG_R6}, - {"R7", REG_R7}, - {"P0", REG_P0}, - {"P0.H", REG_P0}, - {"P0.L", REG_P0}, - {"P1", REG_P1}, - {"P1.H", REG_P1}, - {"P1.L", REG_P1}, - {"P2", REG_P2}, - {"P2.H", REG_P2}, - {"P2.L", REG_P2}, - {"P3", REG_P3}, - {"P3.H", REG_P3}, - {"P3.L", REG_P3}, - {"P4", REG_P4}, - {"P4.H", REG_P4}, - {"P4.L", REG_P4}, - {"P5", REG_P5}, - {"P5.H", REG_P5}, - {"P5.L", REG_P5}, - {"SP", REG_SP}, - {"SP.L", REG_SP}, - {"SP.H", REG_SP}, - {"FP", REG_FP}, - {"FP.L", REG_FP}, - {"FP.H", REG_FP}, - {"A0x", REG_A0x}, - {"A1x", REG_A1x}, - {"A0w", REG_A0w}, - {"A1w", REG_A1w}, - {"A0.x", REG_A0x}, - {"A1.x", REG_A1x}, - {"A0.w", REG_A0w}, - {"A1.w", REG_A1w}, - {"A0", REG_A0}, - {"A0.L", REG_A0}, - {"A0.H", REG_A0}, - {"A1", REG_A1}, - {"A1.L", REG_A1}, - {"A1.H", REG_A1}, - {"I0", REG_I0}, - {"I0.L", REG_I0}, - {"I0.H", REG_I0}, - {"I1", REG_I1}, - {"I1.L", REG_I1}, - {"I1.H", REG_I1}, - {"I2", REG_I2}, - {"I2.L", REG_I2}, - {"I2.H", REG_I2}, - {"I3", REG_I3}, - {"I3.L", REG_I3}, - {"I3.H", REG_I3}, - {"M0", REG_M0}, - {"M0.H", REG_M0}, - {"M0.L", REG_M0}, - {"M1", REG_M1}, - {"M1.H", REG_M1}, - {"M1.L", REG_M1}, - {"M2", REG_M2}, - {"M2.H", REG_M2}, - {"M2.L", REG_M2}, - {"M3", REG_M3}, - {"M3.H", REG_M3}, - {"M3.L", REG_M3}, - {"B0", REG_B0}, - {"B0.H", REG_B0}, - {"B0.L", REG_B0}, - {"B1", REG_B1}, - {"B1.H", REG_B1}, - {"B1.L", REG_B1}, - {"B2", REG_B2}, - {"B2.H", REG_B2}, - {"B2.L", REG_B2}, - {"B3", REG_B3}, - {"B3.H", REG_B3}, - {"B3.L", REG_B3}, - {"L0", REG_L0}, - {"L0.H", REG_L0}, - {"L0.L", REG_L0}, - {"L1", REG_L1}, - {"L1.H", REG_L1}, - {"L1.L", REG_L1}, - {"L2", REG_L2}, - {"L2.H", REG_L2}, - {"L2.L", REG_L2}, - {"L3", REG_L3}, - {"L3.H", REG_L3}, - {"L3.L", REG_L3}, - {"AZ", S_AZ}, - {"AN", S_AN}, - {"AC0", S_AC0}, - {"AC1", S_AC1}, - {"AV0", S_AV0}, - {"AV0S", S_AV0S}, - {"AV1", S_AV1}, - {"AV1S", S_AV1S}, - {"AQ", S_AQ}, - {"V", S_V}, - {"VS", S_VS}, - {"sftreset", REG_sftreset}, - {"omode", REG_omode}, - {"excause", REG_excause}, - {"emucause", REG_emucause}, - {"idle_req", REG_idle_req}, - {"hwerrcause", REG_hwerrcause}, - {"CC", REG_CC}, - {"LC0", REG_LC0}, - {"LC1", REG_LC1}, - {"ASTAT", REG_ASTAT}, - {"RETS", REG_RETS}, - {"LT0", REG_LT0}, - {"LB0", REG_LB0}, - {"LT1", REG_LT1}, - {"LB1", REG_LB1}, - {"CYCLES", REG_CYCLES}, - {"CYCLES2", REG_CYCLES2}, - {"USP", REG_USP}, - {"SEQSTAT", REG_SEQSTAT}, - {"SYSCFG", REG_SYSCFG}, - {"RETI", REG_RETI}, - {"RETX", REG_RETX}, - {"RETN", REG_RETN}, - {"RETE", REG_RETE}, - {"EMUDAT", REG_EMUDAT}, - {0, 0} -}; +static flagword bfin_flags = DEFAULT_FLAGS | DEFAULT_FDPIC; +static const char *bfin_pic_flag = DEFAULT_FDPIC ? "-mfdpic" : (const char *)0; /* Blackfin specific function to handle FD-PIC pointer initializations. */ @@ -246,7 +93,7 @@ bfin_pic_ptr (int nbytes) if (*input_line_pointer == ')') input_line_pointer++; else - as_bad ("missing ')'"); + as_bad (_("missing ')'")); } else error ("missing funcdesc in picptr"); @@ -301,14 +148,181 @@ const char EXP_CHARS[] = "eE"; As in 0f12.456 or 0d1.2345e12. */ const char FLT_CHARS[] = "fFdDxX"; +typedef enum bfin_cpu_type +{ + BFIN_CPU_UNKNOWN, + BFIN_CPU_BF512, + BFIN_CPU_BF514, + BFIN_CPU_BF516, + BFIN_CPU_BF518, + BFIN_CPU_BF522, + BFIN_CPU_BF523, + BFIN_CPU_BF524, + BFIN_CPU_BF525, + BFIN_CPU_BF526, + BFIN_CPU_BF527, + BFIN_CPU_BF531, + BFIN_CPU_BF532, + BFIN_CPU_BF533, + BFIN_CPU_BF534, + BFIN_CPU_BF536, + BFIN_CPU_BF537, + BFIN_CPU_BF538, + BFIN_CPU_BF539, + BFIN_CPU_BF542, + BFIN_CPU_BF542M, + BFIN_CPU_BF544, + BFIN_CPU_BF544M, + BFIN_CPU_BF547, + BFIN_CPU_BF547M, + BFIN_CPU_BF548, + BFIN_CPU_BF548M, + BFIN_CPU_BF549, + BFIN_CPU_BF549M, + BFIN_CPU_BF561 +} bfin_cpu_t; + +bfin_cpu_t bfin_cpu_type = BFIN_CPU_UNKNOWN; +/* -msi-revision support. There are three special values: + -1 -msi-revision=none. + 0xffff -msi-revision=any. */ +int bfin_si_revision; + +unsigned int bfin_anomaly_checks = 0; + +struct bfin_cpu +{ + const char *name; + bfin_cpu_t type; + int si_revision; + unsigned int anomaly_checks; +}; + +struct bfin_cpu bfin_cpus[] = +{ + {"bf512", BFIN_CPU_BF512, 0x0001, AC_05000074}, + {"bf512", BFIN_CPU_BF512, 0x0000, AC_05000074}, + + {"bf514", BFIN_CPU_BF514, 0x0001, AC_05000074}, + {"bf514", BFIN_CPU_BF514, 0x0000, AC_05000074}, + + {"bf516", BFIN_CPU_BF516, 0x0001, AC_05000074}, + {"bf516", BFIN_CPU_BF516, 0x0000, AC_05000074}, + + {"bf518", BFIN_CPU_BF518, 0x0001, AC_05000074}, + {"bf518", BFIN_CPU_BF518, 0x0000, AC_05000074}, + + {"bf522", BFIN_CPU_BF522, 0x0002, AC_05000074}, + {"bf522", BFIN_CPU_BF522, 0x0001, AC_05000074}, + {"bf522", BFIN_CPU_BF522, 0x0000, AC_05000074}, + + {"bf523", BFIN_CPU_BF523, 0x0002, AC_05000074}, + {"bf523", BFIN_CPU_BF523, 0x0001, AC_05000074}, + {"bf523", BFIN_CPU_BF523, 0x0000, AC_05000074}, + + {"bf524", BFIN_CPU_BF524, 0x0002, AC_05000074}, + {"bf524", BFIN_CPU_BF524, 0x0001, AC_05000074}, + {"bf524", BFIN_CPU_BF524, 0x0000, AC_05000074}, + + {"bf525", BFIN_CPU_BF525, 0x0002, AC_05000074}, + {"bf525", BFIN_CPU_BF525, 0x0001, AC_05000074}, + {"bf525", BFIN_CPU_BF525, 0x0000, AC_05000074}, + + {"bf526", BFIN_CPU_BF526, 0x0002, AC_05000074}, + {"bf526", BFIN_CPU_BF526, 0x0001, AC_05000074}, + {"bf526", BFIN_CPU_BF526, 0x0000, AC_05000074}, + + {"bf527", BFIN_CPU_BF527, 0x0002, AC_05000074}, + {"bf527", BFIN_CPU_BF527, 0x0001, AC_05000074}, + {"bf527", BFIN_CPU_BF527, 0x0000, AC_05000074}, + + {"bf531", BFIN_CPU_BF531, 0x0006, AC_05000074}, + {"bf531", BFIN_CPU_BF531, 0x0005, AC_05000074}, + {"bf531", BFIN_CPU_BF531, 0x0004, AC_05000074}, + {"bf531", BFIN_CPU_BF531, 0x0003, AC_05000074}, + + {"bf532", BFIN_CPU_BF532, 0x0006, AC_05000074}, + {"bf532", BFIN_CPU_BF532, 0x0005, AC_05000074}, + {"bf532", BFIN_CPU_BF532, 0x0004, AC_05000074}, + {"bf532", BFIN_CPU_BF532, 0x0003, AC_05000074}, + + {"bf533", BFIN_CPU_BF533, 0x0006, AC_05000074}, + {"bf533", BFIN_CPU_BF533, 0x0005, AC_05000074}, + {"bf533", BFIN_CPU_BF533, 0x0004, AC_05000074}, + {"bf533", BFIN_CPU_BF533, 0x0003, AC_05000074}, + + {"bf534", BFIN_CPU_BF534, 0x0003, AC_05000074}, + {"bf534", BFIN_CPU_BF534, 0x0002, AC_05000074}, + {"bf534", BFIN_CPU_BF534, 0x0001, AC_05000074}, + + {"bf536", BFIN_CPU_BF536, 0x0003, AC_05000074}, + {"bf536", BFIN_CPU_BF536, 0x0002, AC_05000074}, + {"bf536", BFIN_CPU_BF536, 0x0001, AC_05000074}, + + {"bf537", BFIN_CPU_BF537, 0x0003, AC_05000074}, + {"bf537", BFIN_CPU_BF537, 0x0002, AC_05000074}, + {"bf537", BFIN_CPU_BF537, 0x0001, AC_05000074}, + + {"bf538", BFIN_CPU_BF538, 0x0005, AC_05000074}, + {"bf538", BFIN_CPU_BF538, 0x0004, AC_05000074}, + {"bf538", BFIN_CPU_BF538, 0x0003, AC_05000074}, + {"bf538", BFIN_CPU_BF538, 0x0002, AC_05000074}, + + {"bf539", BFIN_CPU_BF539, 0x0005, AC_05000074}, + {"bf539", BFIN_CPU_BF539, 0x0004, AC_05000074}, + {"bf539", BFIN_CPU_BF539, 0x0003, AC_05000074}, + {"bf539", BFIN_CPU_BF539, 0x0002, AC_05000074}, + + {"bf542m", BFIN_CPU_BF542M, 0x0003, AC_05000074}, + + {"bf542", BFIN_CPU_BF542, 0x0002, AC_05000074}, + {"bf542", BFIN_CPU_BF542, 0x0001, AC_05000074}, + {"bf542", BFIN_CPU_BF542, 0x0000, AC_05000074}, + + {"bf544m", BFIN_CPU_BF544M, 0x0003, AC_05000074}, + + {"bf544", BFIN_CPU_BF544, 0x0002, AC_05000074}, + {"bf544", BFIN_CPU_BF544, 0x0001, AC_05000074}, + {"bf544", BFIN_CPU_BF544, 0x0000, AC_05000074}, + + {"bf547m", BFIN_CPU_BF547M, 0x0003, AC_05000074}, + + {"bf547", BFIN_CPU_BF547, 0x0002, AC_05000074}, + {"bf547", BFIN_CPU_BF547, 0x0001, AC_05000074}, + {"bf547", BFIN_CPU_BF547, 0x0000, AC_05000074}, + + {"bf548m", BFIN_CPU_BF548M, 0x0003, AC_05000074}, + + {"bf548", BFIN_CPU_BF548, 0x0002, AC_05000074}, + {"bf548", BFIN_CPU_BF548, 0x0001, AC_05000074}, + {"bf548", BFIN_CPU_BF548, 0x0000, AC_05000074}, + + {"bf549m", BFIN_CPU_BF549M, 0x0003, AC_05000074}, + + {"bf549", BFIN_CPU_BF549, 0x0002, AC_05000074}, + {"bf549", BFIN_CPU_BF549, 0x0001, AC_05000074}, + {"bf549", BFIN_CPU_BF549, 0x0000, AC_05000074}, + + {"bf561", BFIN_CPU_BF561, 0x0005, AC_05000074}, + {"bf561", BFIN_CPU_BF561, 0x0003, AC_05000074}, + {"bf561", BFIN_CPU_BF561, 0x0002, AC_05000074}, + + {NULL, 0, 0, 0} +}; + /* Define bfin-specific command-line options (there are none). */ const char *md_shortopts = ""; #define OPTION_FDPIC (OPTION_MD_BASE) +#define OPTION_NOPIC (OPTION_MD_BASE + 1) +#define OPTION_MCPU (OPTION_MD_BASE + 2) struct option md_longopts[] = { - { "mfdpic", no_argument, NULL, OPTION_FDPIC }, + { "mcpu", required_argument, NULL, OPTION_MCPU }, + { "mfdpic", no_argument, NULL, OPTION_FDPIC }, + { "mnopic", no_argument, NULL, OPTION_NOPIC }, + { "mno-fdpic", no_argument, NULL, OPTION_NOPIC }, { NULL, no_argument, NULL, 0 }, }; @@ -323,10 +337,81 @@ md_parse_option (int c ATTRIBUTE_UNUSED, char *arg ATTRIBUTE_UNUSED) default: return 0; + case OPTION_MCPU: + { + const char *p, *q; + int i; + + i = 0; + while ((p = bfin_cpus[i].name) != NULL) + { + if (strncmp (arg, p, strlen (p)) == 0) + break; + i++; + } + + if (p == NULL) + as_fatal ("-mcpu=%s is not valid", arg); + + bfin_cpu_type = bfin_cpus[i].type; + + q = arg + strlen (p); + + if (*q == '\0') + { + bfin_si_revision = bfin_cpus[i].si_revision; + bfin_anomaly_checks |= bfin_cpus[i].anomaly_checks; + } + else if (strcmp (q, "-none") == 0) + bfin_si_revision = -1; + else if (strcmp (q, "-any") == 0) + { + bfin_si_revision = 0xffff; + while (bfin_cpus[i].type == bfin_cpu_type) + { + bfin_anomaly_checks |= bfin_cpus[i].anomaly_checks; + i++; + } + } + else + { + unsigned int si_major, si_minor; + int rev_len, n; + + rev_len = strlen (q); + + if (sscanf (q, "-%u.%u%n", &si_major, &si_minor, &n) != 2 + || n != rev_len + || si_major > 0xff || si_minor > 0xff) + { + invalid_silicon_revision: + as_fatal ("-mcpu=%s has invalid silicon revision", arg); + } + + bfin_si_revision = (si_major << 8) | si_minor; + + while (bfin_cpus[i].type == bfin_cpu_type + && bfin_cpus[i].si_revision != bfin_si_revision) + i++; + + if (bfin_cpus[i].type != bfin_cpu_type) + goto invalid_silicon_revision; + + bfin_anomaly_checks |= bfin_cpus[i].anomaly_checks; + } + + break; + } + case OPTION_FDPIC: bfin_flags |= EF_BFIN_FDPIC; bfin_pic_flag = "-mfdpic"; break; + + case OPTION_NOPIC: + bfin_flags &= ~(EF_BFIN_FDPIC); + bfin_pic_flag = 0; + break; } return 1; @@ -348,7 +433,7 @@ md_begin () /* Set the default machine type. */ if (!bfd_set_arch_mach (stdoutput, bfd_arch_bfin, 0)) - as_warn ("Could not set architecture and machine."); + as_warn (_("Could not set architecture and machine.")); /* Ensure that lines can begin with '(', for multiple register stack pops. */ @@ -466,6 +551,10 @@ md_assemble (char *line) #ifdef OBJ_ELF dwarf2_emit_insn (insn_size); #endif + + while (*line++ != '\0') + if (*line == '\n') + bump_line_counters (); } /* Parse one line of instructions, and generate opcode for it. @@ -493,7 +582,7 @@ parse (char *line) state = yyparse (); if (state == SEMANTIC_ERROR) { - as_bad ("Parse failed."); + as_bad (_("Parse failed.")); insn = 0; } @@ -568,7 +657,7 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) break; if (value < -1024 || value > 1022) as_bad_where (fixP->fx_file, fixP->fx_line, - "pcrel too far BFD_RELOC_BFIN_10"); + _("pcrel too far BFD_RELOC_BFIN_10")); /* 11 bit offset even numbered, so we remove right bit. */ value = value >> 1; @@ -584,7 +673,7 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) break; if (value < -4096 || value > 4094) - as_bad_where (fixP->fx_file, fixP->fx_line, "pcrel too far BFD_RELOC_BFIN_12"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far BFD_RELOC_BFIN_12")); /* 13 bit offset even numbered, so we remove right bit. */ value = value >> 1; newval = md_chars_to_number (where, 2); @@ -604,7 +693,7 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) break; if (value < -16777216 || value > 16777214) - as_bad_where (fixP->fx_file, fixP->fx_line, "pcrel too far BFD_RELOC_BFIN_24"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far BFD_RELOC_BFIN_24")); /* 25 bit offset even numbered, so we remove right bit. */ value = value >> 1; @@ -619,7 +708,7 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) if (!value) break; if (value < 4 || value > 30) - as_bad_where (fixP->fx_file, fixP->fx_line, "pcrel too far BFD_RELOC_BFIN_5"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far BFD_RELOC_BFIN_5")); value = value >> 1; newval = md_chars_to_number (where, 1); newval = (newval & 0xf0) | (value & 0xf); @@ -631,7 +720,7 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) break; value += 2; if (value < 4 || value > 2046) - as_bad_where (fixP->fx_file, fixP->fx_line, "pcrel too far BFD_RELOC_BFIN_11_PCREL"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("pcrel too far BFD_RELOC_BFIN_11_PCREL")); /* 11 bit unsigned even, so we remove right bit. */ value = value >> 1; newval = md_chars_to_number (where, 2); @@ -641,14 +730,14 @@ md_apply_fix (fixS *fixP, valueT *valueP, segT seg ATTRIBUTE_UNUSED) case BFD_RELOC_8: if (value < -0x80 || value >= 0x7f) - as_bad_where (fixP->fx_file, fixP->fx_line, "rel too far BFD_RELOC_8"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("rel too far BFD_RELOC_8")); md_number_to_chars (where, value, 1); break; case BFD_RELOC_BFIN_16_IMM: case BFD_RELOC_16: if (value < -0x8000 || value >= 0x7fff) - as_bad_where (fixP->fx_file, fixP->fx_line, "rel too far BFD_RELOC_8"); + as_bad_where (fixP->fx_file, fixP->fx_line, _("rel too far BFD_RELOC_16")); md_number_to_chars (where, value, 2); break; @@ -690,59 +779,10 @@ md_section_align (segment, size) } -/* 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 (type, litP, sizeP) - char type; - char * litP; - int * sizeP; +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': - prec = 2; - break; - - case 'd': - case 'D': - 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); - - *sizeP = prec * sizeof (LITTLENUM_TYPE); - /* This loops outputs the LITTLENUMs in REVERSE order; in accord with - the littleendianness of the processor. */ - for (wordP = words + prec - 1; prec--;) - { - md_number_to_chars (litP, (valueT) (*wordP--), sizeof (LITTLENUM_TYPE)); - litP += sizeof (LITTLENUM_TYPE); - } - - return 0; + return ieee_md_atof (type, litP, sizeP, FALSE); } @@ -808,8 +848,6 @@ bfin_fix_adjustable (fixS *fixP) { /* Adjust_reloc_syms doesn't know about the GOT. */ case BFD_RELOC_BFIN_GOT: - case BFD_RELOC_BFIN_GOT17M4: - case BFD_RELOC_BFIN_FUNCDESC_GOT17M4: case BFD_RELOC_BFIN_PLTPC: /* We need the symbol name for the VTABLE entries. */ case BFD_RELOC_VTABLE_INHERIT: @@ -821,126 +859,8 @@ bfin_fix_adjustable (fixS *fixP) } } - -/* Handle the LOOP_BEGIN and LOOP_END statements. - Parse the Loop_Begin/Loop_End and create a label. */ -void -bfin_start_line_hook () -{ - bfd_boolean maybe_begin = FALSE; - bfd_boolean maybe_end = FALSE; - - char *c1, *label_name; - symbolS *line_label; - char *c = input_line_pointer; - int cr_num = 0; - - while (ISSPACE (*c)) - { - if (*c == '\n') - cr_num++; - c++; - } - - /* Look for Loop_Begin or Loop_End statements. */ - - if (*c != 'L' && *c != 'l') - return; - - c++; - if (*c != 'O' && *c != 'o') - return; - - c++; - if (*c != 'O' && *c != 'o') - return; - - c++; - if (*c != 'P' && *c != 'p') - return; - - c++; - if (*c != '_') - return; - - c++; - if (*c == 'E' || *c == 'e') - maybe_end = TRUE; - else if (*c == 'B' || *c == 'b') - maybe_begin = TRUE; - else - return; - - if (maybe_end) - { - c++; - if (*c != 'N' && *c != 'n') - return; - - c++; - if (*c != 'D' && *c != 'd') - return; - } - - if (maybe_begin) - { - c++; - if (*c != 'E' && *c != 'e') - return; - - c++; - if (*c != 'G' && *c != 'g') - return; - - c++; - if (*c != 'I' && *c != 'i') - return; - - c++; - if (*c != 'N' && *c != 'n') - return; - } - - c++; - while (ISSPACE (*c)) c++; - 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) - { - label_name = (char *) xmalloc ((c - c1) + strlen ("__END") + 1); - label_name[0] = 0; - strncat (label_name, c1, c-c1); - strcat (label_name, "__END"); - } - else /* maybe_begin. */ - { - label_name = (char *) xmalloc ((c - c1) + strlen ("__BEGIN") + 1); - label_name[0] = 0; - strncat (label_name, c1, c-c1); - strcat (label_name, "__BEGIN"); - } - - line_label = colon (label_name); - - /* Loop_End follows the last instruction in the loop. - Adjust label address. */ - if (maybe_end) - line_label->sy_value.X_add_number -= last_insn_size; - -} - /* Special extra functions that help bfin-parse.y perform its job. */ -#include - struct obstack mempool; INSTR_T @@ -969,7 +889,7 @@ INSTR_T note_reloc (INSTR_T code, Expr_Node * symbol, int reloc, int pcrel) { /* Assert that the symbol is not an operator. */ - assert (symbol->type == Expr_Node_Reloc); + gas_assert (symbol->type == Expr_Node_Reloc); return note_reloc1 (code, symbol->value.s_value, reloc, pcrel); @@ -996,7 +916,7 @@ note_reloc2 (INSTR_T code, const char *symbol, int reloc, int value, int pcrel) INSTR_T gencode (unsigned long x) { - INSTR_T cell = (INSTR_T) obstack_alloc (&mempool, sizeof (struct bfin_insn)); + INSTR_T cell = obstack_alloc (&mempool, sizeof (struct bfin_insn)); memset (cell, 0, sizeof (struct bfin_insn)); cell->value = (x); return cell; @@ -1009,7 +929,7 @@ int count_insns; static void * allocate (int n) { - return (void *) obstack_alloc (&mempool, n); + return obstack_alloc (&mempool, n); } Expr_Node * @@ -1178,7 +1098,7 @@ Expr_Node_Gen_Reloc_R (Expr_Node * head) note = conctcode (note1, conscode (note_reloc1 (gencode (0), op, BFD_ARELOC_BFIN_LOR, 0), NULL_CODE)); break; default: - fprintf (stderr, "%s:%d:Unkonwn operator found for arithmetic" " relocation", __FILE__, __LINE__); + fprintf (stderr, "%s:%d:Unknown operator found for arithmetic" " relocation", __FILE__, __LINE__); } @@ -1194,7 +1114,7 @@ Expr_Node_Gen_Reloc_R (Expr_Node * head) note = conctcode (note1, conscode (note_reloc1 (gencode (0), op, BFD_ARELOC_BFIN_COMP, 0), NULL_CODE)); break; default: - fprintf (stderr, "%s:%d:Unkonwn operator found for arithmetic" " relocation", __FILE__, __LINE__); + fprintf (stderr, "%s:%d:Unknown operator found for arithmetic" " relocation", __FILE__, __LINE__); } break; default: @@ -1202,8 +1122,7 @@ Expr_Node_Gen_Reloc_R (Expr_Node * head) } return note; } - - + /* Blackfin opcode generation. */ /* These functions are called by the generated parser @@ -1488,14 +1407,14 @@ bfin_gen_ldstidxi (REG_T ptr, REG_T reg, int W, int sz, int Z, Expr_Node * poffs { int value, offset; switch (sz) - { // load/store access size - case 0: // 32 bit + { /* load/store access size */ + case 0: /* 32 bit */ value = EXPR_VALUE (poffset) >> 2; break; - case 1: // 16 bit + case 1: /* 16 bit */ value = EXPR_VALUE (poffset) >> 1; break; - case 2: // 8 bit + case 2: /* 8 bit */ value = EXPR_VALUE (poffset); break; default: @@ -1872,10 +1791,13 @@ bfin_gen_pseudodbg (int fn, int reg, int grp) INSTR_T bfin_gen_pseudodbg_assert (int dbgop, REG_T regtest, int expected) { + int grp; INIT (PseudoDbg_Assert); ASSIGN (dbgop); ASSIGN_R (regtest); + grp = GROUP (regtest); + ASSIGN (grp); ASSIGN (expected); return GEN_OPCODE32 (); @@ -1927,15 +1849,17 @@ bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg) Expr_Node *lbegin, *lend; loopsym = expr->value.s_value; - lbeginsym = (char *) xmalloc (strlen (loopsym) + strlen ("__BEGIN") + 1); - lendsym = (char *) xmalloc (strlen (loopsym) + strlen ("__END") + 1); + lbeginsym = (char *) xmalloc (strlen (loopsym) + strlen ("__BEGIN") + 5); + lendsym = (char *) xmalloc (strlen (loopsym) + strlen ("__END") + 5); lbeginsym[0] = 0; lendsym[0] = 0; + strcat (lbeginsym, "L$L$"); strcat (lbeginsym, loopsym); strcat (lbeginsym, "__BEGIN"); + strcat (lendsym, "L$L$"); strcat (lendsym, loopsym); strcat (lendsym, "__END"); @@ -1944,9 +1868,37 @@ bfin_gen_loop (Expr_Node *expr, REG_T reg, int rop, REG_T preg) lbegin = Expr_Node_Create (Expr_Node_Reloc, lbeginval, NULL, NULL); lend = Expr_Node_Create (Expr_Node_Reloc, lendval, NULL, NULL); + + symbol_remove (symbol_find (loopsym), &symbol_rootP, &symbol_lastP); + return bfin_gen_loopsetup(lbegin, reg, rop, lend, preg); } +void +bfin_loop_beginend (Expr_Node *expr, int begin) +{ + const char *loopsym; + char *label_name; + symbolS *line_label; + const char *suffix = begin ? "__BEGIN" : "__END"; + + loopsym = expr->value.s_value; + label_name = (char *) xmalloc (strlen (loopsym) + strlen (suffix) + 5); + + label_name[0] = 0; + + strcat (label_name, "L$L$"); + strcat (label_name, loopsym); + strcat (label_name, suffix); + + line_label = colon (label_name); + + /* LOOP_END follows the last instruction in the loop. + Adjust label address. */ + if (!begin) + ((struct local_symbol *) line_label)->lsy_value -= last_insn_size; +} + bfd_boolean bfin_eol_in_insn (char *line) { @@ -1975,15 +1927,14 @@ bfin_eol_in_insn (char *line) } bfd_boolean -bfin_start_label (char *ptr) +bfin_start_label (char *s, char *ptr) { - ptr--; - while (!ISSPACE (*ptr) && !is_end_of_line[(unsigned char) *ptr]) - ptr--; - - ptr++; - if (*ptr == '(' || *ptr == '[') - return FALSE; + while (s != ptr) + { + if (*s == '(' || *s == '[') + return FALSE; + s++; + } return TRUE; } @@ -1997,3 +1948,743 @@ bfin_force_relocation (struct fix *fixp) return generic_force_reloc (fixp); } + +/* This is a stripped down version of the disassembler. The only thing it + does is return a mask of registers modified by an instruction. Only + instructions that can occur in a parallel-issue bundle are handled, and + only the registers that can cause a conflict are recorded. */ + +#define DREG_MASK(n) (0x101 << (n)) +#define DREGH_MASK(n) (0x100 << (n)) +#define DREGL_MASK(n) (0x001 << (n)) +#define IREG_MASK(n) (1 << ((n) + 16)) + +static int +decode_ProgCtrl_0 (int iw0) +{ + if (iw0 == 0) + return 0; + abort (); +} + +static int +decode_LDSTpmod_0 (int iw0) +{ + /* LDSTpmod + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 0 | 0 |.W.|.aop...|.reg.......|.idx.......|.ptr.......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int W = ((iw0 >> LDSTpmod_W_bits) & LDSTpmod_W_mask); + int aop = ((iw0 >> LDSTpmod_aop_bits) & LDSTpmod_aop_mask); + int idx = ((iw0 >> LDSTpmod_idx_bits) & LDSTpmod_idx_mask); + int ptr = ((iw0 >> LDSTpmod_ptr_bits) & LDSTpmod_ptr_mask); + int reg = ((iw0 >> LDSTpmod_reg_bits) & LDSTpmod_reg_mask); + + if (aop == 1 && W == 0 && idx == ptr) + return DREGL_MASK (reg); + else if (aop == 2 && W == 0 && idx == ptr) + return DREGH_MASK (reg); + else if (aop == 1 && W == 1 && idx == ptr) + return 0; + else if (aop == 2 && W == 1 && idx == ptr) + return 0; + else if (aop == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 1 && W == 0) + return DREGL_MASK (reg); + else if (aop == 2 && W == 0) + return DREGH_MASK (reg); + else if (aop == 3 && W == 0) + return DREG_MASK (reg); + else if (aop == 3 && W == 1) + return DREG_MASK (reg); + else if (aop == 0 && W == 1) + return 0; + else if (aop == 1 && W == 1) + return 0; + else if (aop == 2 && W == 1) + return 0; + else + return 0; + + return 2; +} + +static int +decode_dagMODim_0 (int iw0) +{ + /* dagMODim + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |.br| 1 | 1 |.op|.m.....|.i.....| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int i = ((iw0 >> DagMODim_i_bits) & DagMODim_i_mask); + int op = ((iw0 >> DagMODim_op_bits) & DagMODim_op_mask); + + if (op == 0 || op == 1) + return IREG_MASK (i); + else + return 0; + + return 2; +} + +static int +decode_dagMODik_0 (int iw0) +{ + /* dagMODik + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 |.op....|.i.....| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int i = ((iw0 >> DagMODik_i_bits) & DagMODik_i_mask); + return IREG_MASK (i); +} + +/* GOOD */ +static int +decode_dspLDST_0 (int iw0) +{ + /* dspLDST + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 0 | 1 | 1 | 1 |.W.|.aop...|.m.....|.i.....|.reg.......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int i = ((iw0 >> DspLDST_i_bits) & DspLDST_i_mask); + int m = ((iw0 >> DspLDST_m_bits) & DspLDST_m_mask); + int W = ((iw0 >> DspLDST_W_bits) & DspLDST_W_mask); + int aop = ((iw0 >> DspLDST_aop_bits) & DspLDST_aop_mask); + int reg = ((iw0 >> DspLDST_reg_bits) & DspLDST_reg_mask); + + if (aop == 0 && W == 0 && m == 0) + return DREG_MASK (reg) | IREG_MASK (i); + else if (aop == 0 && W == 0 && m == 1) + return DREGL_MASK (reg) | IREG_MASK (i); + else if (aop == 0 && W == 0 && m == 2) + return DREGH_MASK (reg) | IREG_MASK (i); + else if (aop == 1 && W == 0 && m == 0) + return DREG_MASK (reg) | IREG_MASK (i); + else if (aop == 1 && W == 0 && m == 1) + return DREGL_MASK (reg) | IREG_MASK (i); + else if (aop == 1 && W == 0 && m == 2) + return DREGH_MASK (reg) | IREG_MASK (i); + else if (aop == 2 && W == 0 && m == 0) + return DREG_MASK (reg); + else if (aop == 2 && W == 0 && m == 1) + return DREGL_MASK (reg); + else if (aop == 2 && W == 0 && m == 2) + return DREGH_MASK (reg); + else if (aop == 0 && W == 1 && m == 0) + return IREG_MASK (i); + else if (aop == 0 && W == 1 && m == 1) + return IREG_MASK (i); + else if (aop == 0 && W == 1 && m == 2) + return IREG_MASK (i); + else if (aop == 1 && W == 1 && m == 0) + return IREG_MASK (i); + else if (aop == 1 && W == 1 && m == 1) + return IREG_MASK (i); + else if (aop == 1 && W == 1 && m == 2) + return IREG_MASK (i); + else if (aop == 2 && W == 1 && m == 0) + return 0; + else if (aop == 2 && W == 1 && m == 1) + return 0; + else if (aop == 2 && W == 1 && m == 2) + return 0; + else if (aop == 3 && W == 0) + return DREG_MASK (reg) | IREG_MASK (i); + else if (aop == 3 && W == 1) + return IREG_MASK (i); + + abort (); +} + +/* GOOD */ +static int +decode_LDST_0 (int iw0) +{ + /* LDST + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 0 | 1 |.sz....|.W.|.aop...|.Z.|.ptr.......|.reg.......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int Z = ((iw0 >> LDST_Z_bits) & LDST_Z_mask); + int W = ((iw0 >> LDST_W_bits) & LDST_W_mask); + int sz = ((iw0 >> LDST_sz_bits) & LDST_sz_mask); + int aop = ((iw0 >> LDST_aop_bits) & LDST_aop_mask); + int reg = ((iw0 >> LDST_reg_bits) & LDST_reg_mask); + + if (aop == 0 && sz == 0 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 0 && sz == 0 && Z == 1 && W == 0) + return 0; + else if (aop == 0 && sz == 1 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 0 && sz == 1 && Z == 1 && W == 0) + return DREG_MASK (reg); + else if (aop == 0 && sz == 2 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 0 && sz == 2 && Z == 1 && W == 0) + return DREG_MASK (reg); + else if (aop == 1 && sz == 0 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 1 && sz == 0 && Z == 1 && W == 0) + return 0; + else if (aop == 1 && sz == 1 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 1 && sz == 1 && Z == 1 && W == 0) + return DREG_MASK (reg); + else if (aop == 1 && sz == 2 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 1 && sz == 2 && Z == 1 && W == 0) + return DREG_MASK (reg); + else if (aop == 2 && sz == 0 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 2 && sz == 0 && Z == 1 && W == 0) + return 0; + else if (aop == 2 && sz == 1 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 2 && sz == 1 && Z == 1 && W == 0) + return DREG_MASK (reg); + else if (aop == 2 && sz == 2 && Z == 0 && W == 0) + return DREG_MASK (reg); + else if (aop == 2 && sz == 2 && Z == 1 && W == 0) + return DREG_MASK (reg); + else if (aop == 0 && sz == 0 && Z == 0 && W == 1) + return 0; + else if (aop == 0 && sz == 0 && Z == 1 && W == 1) + return 0; + else if (aop == 0 && sz == 1 && Z == 0 && W == 1) + return 0; + else if (aop == 0 && sz == 2 && Z == 0 && W == 1) + return 0; + else if (aop == 1 && sz == 0 && Z == 0 && W == 1) + return 0; + else if (aop == 1 && sz == 0 && Z == 1 && W == 1) + return 0; + else if (aop == 1 && sz == 1 && Z == 0 && W == 1) + return 0; + else if (aop == 1 && sz == 2 && Z == 0 && W == 1) + return 0; + else if (aop == 2 && sz == 0 && Z == 0 && W == 1) + return 0; + else if (aop == 2 && sz == 0 && Z == 1 && W == 1) + return 0; + else if (aop == 2 && sz == 1 && Z == 0 && W == 1) + return 0; + else if (aop == 2 && sz == 2 && Z == 0 && W == 1) + return 0; + + abort (); +} + +static int +decode_LDSTiiFP_0 (int iw0) +{ + /* LDSTiiFP + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 1 | 1 | 1 | 0 |.W.|.offset............|.reg...........| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int reg = ((iw0 >> LDSTiiFP_reg_bits) & LDSTiiFP_reg_mask); + int W = ((iw0 >> LDSTiiFP_W_bits) & LDSTiiFP_W_mask); + + if (W == 0) + return reg < 8 ? DREG_MASK (reg) : 0; + else + return 0; +} + +static int +decode_LDSTii_0 (int iw0) +{ + /* LDSTii + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 0 | 1 |.W.|.op....|.offset........|.ptr.......|.reg.......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int reg = ((iw0 >> LDSTii_reg_bit) & LDSTii_reg_mask); + int op = ((iw0 >> LDSTii_op_bit) & LDSTii_op_mask); + int W = ((iw0 >> LDSTii_W_bit) & LDSTii_W_mask); + + if (W == 0 && op != 3) + return DREG_MASK (reg); + else if (W == 0 && op == 3) + return 0; + else if (W == 1 && op == 0) + return 0; + else if (W == 1 && op == 1) + return 0; + else if (W == 1 && op == 3) + return 0; + + abort (); +} + +static int +decode_dsp32mac_0 (int iw0, int iw1) +{ + int result = 0; + /* dsp32mac + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 1 | 0 | 0 |.M.| 0 | 0 |.mmod..........|.MM|.P.|.w1|.op1...| + |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1..| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int op1 = ((iw0 >> (DSP32Mac_op1_bits - 16)) & DSP32Mac_op1_mask); + int w1 = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask); + int P = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask); + int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask); + int w0 = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask); + int MM = ((iw1 >> DSP32Mac_MM_bits) & DSP32Mac_MM_mask); + int dst = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask); + int op0 = ((iw1 >> DSP32Mac_op0_bits) & DSP32Mac_op0_mask); + + if (w0 == 0 && w1 == 0 && op1 == 3 && op0 == 3) + return 0; + + if (op1 == 3 && MM) + return 0; + + if ((w1 || w0) && mmod == M_W32) + return 0; + + if (((1 << mmod) & (P ? 0x131b : 0x1b5f)) == 0) + return 0; + + if (w1 == 1 || op1 != 3) + { + if (w1) + { + if (P) + return DREG_MASK (dst + 1); + else + return DREGH_MASK (dst); + } + } + + if (w0 == 1 || op0 != 3) + { + if (w0) + { + if (P) + return DREG_MASK (dst); + else + return DREGL_MASK (dst); + } + } + + return result; +} + +static int +decode_dsp32mult_0 (int iw0, int iw1) +{ + /* dsp32mult + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 1 | 0 | 0 |.M.| 0 | 1 |.mmod..........|.MM|.P.|.w1|.op1...| + |.h01|.h11|.w0|.op0...|.h00|.h10|.dst.......|.src0......|.src1..| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int w1 = ((iw0 >> (DSP32Mac_w1_bits - 16)) & DSP32Mac_w1_mask); + int P = ((iw0 >> (DSP32Mac_p_bits - 16)) & DSP32Mac_p_mask); + int mmod = ((iw0 >> (DSP32Mac_mmod_bits - 16)) & DSP32Mac_mmod_mask); + int w0 = ((iw1 >> DSP32Mac_w0_bits) & DSP32Mac_w0_mask); + int dst = ((iw1 >> DSP32Mac_dst_bits) & DSP32Mac_dst_mask); + int result = 0; + + if (w1 == 0 && w0 == 0) + return 0; + + if (((1 << mmod) & (P ? 0x313 : 0x1b57)) == 0) + return 0; + + if (w1) + { + if (P) + return DREG_MASK (dst | 1); + else + return DREGH_MASK (dst); + } + + if (w0) + { + if (P) + return DREG_MASK (dst); + else + return DREGL_MASK (dst); + } + + return result; +} + +static int +decode_dsp32alu_0 (int iw0, int iw1) +{ + /* dsp32alu + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 1 | 0 | 0 |.M.| 1 | 0 | - | - | - |.HL|.aopcde............| + |.aop...|.s.|.x.|.dst0......|.dst1......|.src0......|.src1......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int s = ((iw1 >> DSP32Alu_s_bits) & DSP32Alu_s_mask); + int x = ((iw1 >> DSP32Alu_x_bits) & DSP32Alu_x_mask); + int aop = ((iw1 >> DSP32Alu_aop_bits) & DSP32Alu_aop_mask); + int dst0 = ((iw1 >> DSP32Alu_dst0_bits) & DSP32Alu_dst0_mask); + int dst1 = ((iw1 >> DSP32Alu_dst1_bits) & DSP32Alu_dst1_mask); + int HL = ((iw0 >> (DSP32Alu_HL_bits - 16)) & DSP32Alu_HL_mask); + int aopcde = ((iw0 >> (DSP32Alu_aopcde_bits - 16)) & DSP32Alu_aopcde_mask); + + if (aop == 0 && aopcde == 9 && s == 0) + return 0; + else if (aop == 2 && aopcde == 9 && HL == 0 && s == 0) + return 0; + else if (aop >= x * 2 && aopcde == 5) + return HL ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (HL == 0 && aopcde == 2) + return DREGL_MASK (dst0); + else if (HL == 1 && aopcde == 2) + return DREGH_MASK (dst0); + else if (HL == 0 && aopcde == 3) + return DREGL_MASK (dst0); + else if (HL == 1 && aopcde == 3) + return DREGH_MASK (dst0); + + else if (aop == 0 && aopcde == 9 && s == 1) + return 0; + else if (aop == 1 && aopcde == 9 && s == 0) + return 0; + else if (aop == 2 && aopcde == 9 && s == 1) + return 0; + else if (aop == 3 && aopcde == 9 && s == 0) + return 0; + else if (aopcde == 8) + return 0; + else if (aop == 0 && aopcde == 11) + return DREG_MASK (dst0); + else if (aop == 1 && aopcde == 11) + return HL ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (aopcde == 11) + return 0; + else if (aopcde == 22) + return DREG_MASK (dst0); + + else if ((aop == 0 || aop == 1) && aopcde == 14) + return 0; + else if (aop == 3 && HL == 0 && aopcde == 14) + return 0; + + else if (aop == 3 && HL == 0 && aopcde == 15) + return DREG_MASK (dst0); + + else if (aop == 1 && aopcde == 16) + return 0; + + else if (aop == 0 && aopcde == 16) + return 0; + + else if (aop == 3 && HL == 0 && aopcde == 16) + return 0; + + else if (aop == 3 && HL == 0 && aopcde == 7) + return DREG_MASK (dst0); + else if ((aop == 0 || aop == 1 || aop == 2) && aopcde == 7) + return DREG_MASK (dst0); + + else if (aop == 0 && aopcde == 12) + return DREG_MASK (dst0); + else if (aop == 1 && aopcde == 12) + return DREG_MASK (dst0) | DREG_MASK (dst1); + else if (aop == 3 && aopcde == 12) + return HL ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + + else if (aopcde == 0) + return DREG_MASK (dst0); + else if (aopcde == 1) + return DREG_MASK (dst0) | DREG_MASK (dst1); + + else if (aop == 0 && aopcde == 10) + return DREGL_MASK (dst0); + else if (aop == 1 && aopcde == 10) + return DREGL_MASK (dst0); + + else if ((aop == 1 || aop == 0) && aopcde == 4) + return DREG_MASK (dst0); + else if (aop == 2 && aopcde == 4) + return DREG_MASK (dst0) | DREG_MASK (dst1); + + else if (aop == 0 && aopcde == 17) + return DREG_MASK (dst0) | DREG_MASK (dst1); + else if (aop == 1 && aopcde == 17) + return DREG_MASK (dst0) | DREG_MASK (dst1); + else if (aop == 0 && aopcde == 18) + return 0; + else if (aop == 3 && aopcde == 18) + return 0; + + else if ((aop == 0 || aop == 1 || aop == 2) && aopcde == 6) + return DREG_MASK (dst0); + + else if ((aop == 0 || aop == 1) && aopcde == 20) + return DREG_MASK (dst0); + + else if ((aop == 0 || aop == 1) && aopcde == 21) + return DREG_MASK (dst0) | DREG_MASK (dst1); + + else if (aop == 0 && aopcde == 23 && HL == 1) + return DREG_MASK (dst0); + else if (aop == 0 && aopcde == 23 && HL == 0) + return DREG_MASK (dst0); + + else if (aop == 0 && aopcde == 24) + return DREG_MASK (dst0); + else if (aop == 1 && aopcde == 24) + return DREG_MASK (dst0) | DREG_MASK (dst1); + else if (aopcde == 13) + return DREG_MASK (dst0) | DREG_MASK (dst1); + else + return 0; + + return 4; +} + +static int +decode_dsp32shift_0 (int iw0, int iw1) +{ + /* dsp32shift + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 0 | - | - |.sopcde............| + |.sop...|.HLs...|.dst0......| - | - | - |.src0......|.src1......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int HLs = ((iw1 >> DSP32Shift_HLs_bits) & DSP32Shift_HLs_mask); + int sop = ((iw1 >> DSP32Shift_sop_bits) & DSP32Shift_sop_mask); + int src0 = ((iw1 >> DSP32Shift_src0_bits) & DSP32Shift_src0_mask); + int src1 = ((iw1 >> DSP32Shift_src1_bits) & DSP32Shift_src1_mask); + int dst0 = ((iw1 >> DSP32Shift_dst0_bits) & DSP32Shift_dst0_mask); + int sopcde = ((iw0 >> (DSP32Shift_sopcde_bits - 16)) & DSP32Shift_sopcde_mask); + + if (sop == 0 && sopcde == 0) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 0) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 2 && sopcde == 0) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 0 && sopcde == 3) + return 0; + else if (sop == 1 && sopcde == 3) + return 0; + else if (sop == 2 && sopcde == 3) + return 0; + else if (sop == 3 && sopcde == 3) + return DREG_MASK (dst0); + else if (sop == 0 && sopcde == 1) + return DREG_MASK (dst0); + else if (sop == 1 && sopcde == 1) + return DREG_MASK (dst0); + else if (sop == 2 && sopcde == 1) + return DREG_MASK (dst0); + else if (sopcde == 2) + return DREG_MASK (dst0); + else if (sopcde == 4) + return DREG_MASK (dst0); + else if (sop == 0 && sopcde == 5) + return DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 5) + return DREGL_MASK (dst0); + else if (sop == 2 && sopcde == 5) + return DREGL_MASK (dst0); + else if (sop == 0 && sopcde == 6) + return DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 6) + return DREGL_MASK (dst0); + else if (sop == 3 && sopcde == 6) + return DREGL_MASK (dst0); + else if (sop == 0 && sopcde == 7) + return DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 7) + return DREGL_MASK (dst0); + else if (sop == 2 && sopcde == 7) + return DREGL_MASK (dst0); + else if (sop == 3 && sopcde == 7) + return DREGL_MASK (dst0); + else if (sop == 0 && sopcde == 8) + return DREG_MASK (src0) | DREG_MASK (src1); +#if 0 + { + OUTS (outf, "BITMUX ("); + OUTS (outf, dregs (src0)); + OUTS (outf, ", "); + OUTS (outf, dregs (src1)); + OUTS (outf, ", A0) (ASR)"); + } +#endif + else if (sop == 1 && sopcde == 8) + return DREG_MASK (src0) | DREG_MASK (src1); +#if 0 + { + OUTS (outf, "BITMUX ("); + OUTS (outf, dregs (src0)); + OUTS (outf, ", "); + OUTS (outf, dregs (src1)); + OUTS (outf, ", A0) (ASL)"); + } +#endif + else if (sopcde == 9) + return sop < 2 ? DREGL_MASK (dst0) : DREG_MASK (dst0); + else if (sopcde == 10) + return DREG_MASK (dst0); + else if (sop == 0 && sopcde == 11) + return DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 11) + return DREGL_MASK (dst0); + else if (sop == 0 && sopcde == 12) + return 0; + else if (sop == 1 && sopcde == 12) + return DREGL_MASK (dst0); + else if (sop == 0 && sopcde == 13) + return DREG_MASK (dst0); + else if (sop == 1 && sopcde == 13) + return DREG_MASK (dst0); + else if (sop == 2 && sopcde == 13) + return DREG_MASK (dst0); + + abort (); +} + +static int +decode_dsp32shiftimm_0 (int iw0, int iw1) +{ + /* dsp32shiftimm + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ + | 1 | 1 | 0 | 0 |.M.| 1 | 1 | 0 | 1 | - | - |.sopcde............| + |.sop...|.HLs...|.dst0......|.immag.................|.src1......| + +---+---+---+---|---+---+---+---|---+---+---+---|---+---+---+---+ */ + int sop = ((iw1 >> DSP32ShiftImm_sop_bits) & DSP32ShiftImm_sop_mask); + int bit8 = ((iw1 >> 8) & 0x1); + int dst0 = ((iw1 >> DSP32ShiftImm_dst0_bits) & DSP32ShiftImm_dst0_mask); + int sopcde = ((iw0 >> (DSP32ShiftImm_sopcde_bits - 16)) & DSP32ShiftImm_sopcde_mask); + int HLs = ((iw1 >> DSP32ShiftImm_HLs_bits) & DSP32ShiftImm_HLs_mask); + + + if (sop == 0 && sopcde == 0) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 0 && bit8 == 0) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 1 && sopcde == 0 && bit8 == 1) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 2 && sopcde == 0 && bit8 == 0) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 2 && sopcde == 0 && bit8 == 1) + return HLs & 2 ? DREGH_MASK (dst0) : DREGL_MASK (dst0); + else if (sop == 2 && sopcde == 3 && HLs == 1) + return 0; + else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 0) + return 0; + else if (sop == 0 && sopcde == 3 && HLs == 0 && bit8 == 1) + return 0; + else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 0) + return 0; + else if (sop == 0 && sopcde == 3 && HLs == 1 && bit8 == 1) + return 0; + else if (sop == 1 && sopcde == 3 && HLs == 0) + return 0; + else if (sop == 1 && sopcde == 3 && HLs == 1) + return 0; + else if (sop == 2 && sopcde == 3 && HLs == 0) + return 0; + else if (sop == 1 && sopcde == 1 && bit8 == 0) + return DREG_MASK (dst0); + else if (sop == 1 && sopcde == 1 && bit8 == 1) + return DREG_MASK (dst0); + else if (sop == 2 && sopcde == 1 && bit8 == 1) + return DREG_MASK (dst0); + else if (sop == 2 && sopcde == 1 && bit8 == 0) + return DREG_MASK (dst0); + else if (sop == 0 && sopcde == 1) + return DREG_MASK (dst0); + else if (sop == 1 && sopcde == 2) + return DREG_MASK (dst0); + else if (sop == 2 && sopcde == 2 && bit8 == 1) + return DREG_MASK (dst0); + else if (sop == 2 && sopcde == 2 && bit8 == 0) + return DREG_MASK (dst0); + else if (sop == 3 && sopcde == 2) + return DREG_MASK (dst0); + else if (sop == 0 && sopcde == 2) + return DREG_MASK (dst0); + + abort (); +} + +int +insn_regmask (int iw0, int iw1) +{ + if ((iw0 & 0xf7ff) == 0xc003 && iw1 == 0x1800) + return 0; /* MNOP */ + else if ((iw0 & 0xff00) == 0x0000) + return decode_ProgCtrl_0 (iw0); + else if ((iw0 & 0xffc0) == 0x0240) + abort (); + else if ((iw0 & 0xff80) == 0x0100) + abort (); + else if ((iw0 & 0xfe00) == 0x0400) + abort (); + else if ((iw0 & 0xfe00) == 0x0600) + abort (); + else if ((iw0 & 0xf800) == 0x0800) + abort (); + else if ((iw0 & 0xffe0) == 0x0200) + abort (); + else if ((iw0 & 0xff00) == 0x0300) + abort (); + else if ((iw0 & 0xf000) == 0x1000) + abort (); + else if ((iw0 & 0xf000) == 0x2000) + abort (); + else if ((iw0 & 0xf000) == 0x3000) + abort (); + else if ((iw0 & 0xfc00) == 0x4000) + abort (); + else if ((iw0 & 0xfe00) == 0x4400) + abort (); + else if ((iw0 & 0xf800) == 0x4800) + abort (); + else if ((iw0 & 0xf000) == 0x5000) + abort (); + else if ((iw0 & 0xf800) == 0x6000) + abort (); + else if ((iw0 & 0xf800) == 0x6800) + abort (); + else if ((iw0 & 0xf000) == 0x8000) + return decode_LDSTpmod_0 (iw0); + else if ((iw0 & 0xff60) == 0x9e60) + return decode_dagMODim_0 (iw0); + else if ((iw0 & 0xfff0) == 0x9f60) + return decode_dagMODik_0 (iw0); + else if ((iw0 & 0xfc00) == 0x9c00) + return decode_dspLDST_0 (iw0); + else if ((iw0 & 0xf000) == 0x9000) + return decode_LDST_0 (iw0); + else if ((iw0 & 0xfc00) == 0xb800) + return decode_LDSTiiFP_0 (iw0); + else if ((iw0 & 0xe000) == 0xA000) + return decode_LDSTii_0 (iw0); + else if ((iw0 & 0xff80) == 0xe080 && (iw1 & 0x0C00) == 0x0000) + abort (); + else if ((iw0 & 0xff00) == 0xe100 && (iw1 & 0x0000) == 0x0000) + abort (); + else if ((iw0 & 0xfe00) == 0xe200 && (iw1 & 0x0000) == 0x0000) + abort (); + else if ((iw0 & 0xfc00) == 0xe400 && (iw1 & 0x0000) == 0x0000) + abort (); + else if ((iw0 & 0xfffe) == 0xe800 && (iw1 & 0x0000) == 0x0000) + abort (); + else if ((iw0 & 0xf600) == 0xc000 && (iw1 & 0x0000) == 0x0000) + return decode_dsp32mac_0 (iw0, iw1); + else if ((iw0 & 0xf600) == 0xc200 && (iw1 & 0x0000) == 0x0000) + return decode_dsp32mult_0 (iw0, iw1); + else if ((iw0 & 0xf7c0) == 0xc400 && (iw1 & 0x0000) == 0x0000) + return decode_dsp32alu_0 (iw0, iw1); + else if ((iw0 & 0xf780) == 0xc600 && (iw1 & 0x01c0) == 0x0000) + return decode_dsp32shift_0 (iw0, iw1); + else if ((iw0 & 0xf780) == 0xc680 && (iw1 & 0x0000) == 0x0000) + return decode_dsp32shiftimm_0 (iw0, iw1); + else if ((iw0 & 0xff00) == 0xf800) + abort (); + else if ((iw0 & 0xFFC0) == 0xf000 && (iw1 & 0x0000) == 0x0000) + abort (); + + abort (); +} diff --git a/gas/config/tc-bfin.h b/gas/config/tc-bfin.h index 9730825..c5819fc 100644 --- a/gas/config/tc-bfin.h +++ b/gas/config/tc-bfin.h @@ -1,5 +1,5 @@ /* tc-bfin.h - header file for tc-bfin.c - Copyright 2005, 2007 + Copyright 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -39,10 +39,8 @@ #define WORKING_DOT_WORD -extern void bfin_start_line_hook PARAMS ((void)); -extern bfd_boolean bfin_start_label PARAMS ((char *)); +extern bfd_boolean bfin_start_label (char *, char *); -#define md_start_line_hook() bfin_start_line_hook() #define md_number_to_chars number_to_chars_littleendian #define md_convert_frag(b,s,f) as_fatal ("bfin convert_frag\n"); @@ -50,7 +48,7 @@ extern bfd_boolean bfin_start_label PARAMS ((char *)); #define LEX_BR 6 #define TC_EOL_IN_INSN(PTR) (bfin_eol_in_insn(PTR) ? 1 : 0) -extern bfd_boolean bfin_eol_in_insn PARAMS ((char *)); +extern bfd_boolean bfin_eol_in_insn (char *); /* Almost all instructions of Blackfin contain an = character. */ #define TC_EQUAL_IN_INSN(C, NAME) 1 @@ -61,16 +59,16 @@ extern bfd_boolean bfin_eol_in_insn PARAMS ((char *)); #define DOUBLESLASH_LINE_COMMENTS -#define TC_START_LABEL(ch ,ptr) (ch == ':' && bfin_start_label (ptr)) +#define TC_START_LABEL(c, s, ptr) (c == ':' && bfin_start_label (s, ptr)) #define tc_fix_adjustable(FIX) bfin_fix_adjustable (FIX) -extern bfd_boolean bfin_fix_adjustable PARAMS ((struct fix *)); +extern bfd_boolean bfin_fix_adjustable (struct fix *); #define TC_FORCE_RELOCATION(FIX) bfin_force_relocation (FIX) -extern int bfin_force_relocation PARAMS ((struct fix *)); +extern int bfin_force_relocation (struct fix *); /* 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); /* Values passed to md_apply_fix3 don't include symbol values. */ #define MD_APPLY_SYM_VALUE(FIX) 0 @@ -78,4 +76,10 @@ extern long md_pcrel_from_section PARAMS ((struct fix *, segT)); /* This target is buggy, and sets fix size too large. */ #define TC_FX_SIZE_SLACK(FIX) 2 +extern unsigned int bfin_anomaly_checks; + +/* Anomaly checking */ +#define AC_05000074 0x00000001 +#define ENABLE_AC_05000074 (bfin_anomaly_checks & AC_05000074) + /* end of tc-bfin.h */ diff --git a/gas/config/tc-cr16.c b/gas/config/tc-cr16.c index 256feed..1ed74cd 100644 --- a/gas/config/tc-cr16.c +++ b/gas/config/tc-cr16.c @@ -1,5 +1,5 @@ /* tc-cr16.c -- Assembler code for the CR16 CPU core. - Copyright 2007 Free Software Foundation, Inc. + Copyright 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by M R Swami Reddy @@ -99,6 +99,11 @@ const char EXP_CHARS[] = "eE"; /* Chars that mean this number is a floating point constant as in 0f12.456 */ const char FLT_CHARS[] = "f'"; +#ifdef OBJ_ELF +/* Pre-defined "_GLOBAL_OFFSET_TABLE_" */ +symbolS * GOT_symbol; +#endif + /* Target-specific multicharacter options, not const-declared at usage. */ const char *md_shortopts = ""; struct option md_longopts[] = @@ -141,92 +146,92 @@ l_cons (int nbytes) expression (&exp); if (*input_line_pointer == ':') - { - /* Bitfields. */ - long value = 0; + { + /* 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); - } + for (;;) + { + unsigned long width; - exp.X_add_number = value; - exp.X_op = O_constant; - exp.X_unsigned = 1; - } + 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; + code_label = 1; emit_expr (&exp, (unsigned int) nbytes); ++c; if ((*(input_line_pointer) == '@') && (*(input_line_pointer +1) == 'c')) - { - input_line_pointer +=3; - break; - } + { + input_line_pointer +=3; + break; + } } while ((*input_line_pointer++ == ',')); @@ -236,7 +241,6 @@ l_cons (int nbytes) 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. @@ -248,6 +252,7 @@ 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 }, + {"4byte", l_cons, 4 }, {0, 0, 0} }; @@ -255,7 +260,7 @@ const pseudo_typeS md_pseudo_table[] = const relax_typeS md_relax_table[] = { /* bCC */ - {0xfa, -0x100, 2, 1}, /* 8 */ + {0x7f, -0x80, 2, 1}, /* 8 */ {0xfffe, -0x10000, 4, 2}, /* 16 */ {0xfffffe, -0x1000000, 6, 0}, /* 24 */ }; @@ -373,8 +378,8 @@ get_index_register_pair (char *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; + || (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); } @@ -478,9 +483,7 @@ reset_vars (char *op) 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)) + if (generic_force_reloc (fix) || SWITCH_TABLE (fix)) return 1; return 0; @@ -491,7 +494,8 @@ cr16_force_relocation (fixS *fix) void cr16_cons_fix_new (fragS *frag, int offset, int len, expressionS *exp) { - int rtype; + int rtype = BFD_RELOC_UNUSED; + switch (len) { default: rtype = BFD_RELOC_NONE; break; @@ -499,12 +503,12 @@ cr16_cons_fix_new (fragS *frag, int offset, int len, expressionS *exp) case 2: rtype = BFD_RELOC_CR16_NUM16; break; case 4: if (code_label) - { - rtype = BFD_RELOC_CR16_NUM32a; - code_label = 0; - } + { + rtype = BFD_RELOC_CR16_NUM32a; + code_label = 0; + } else - rtype = BFD_RELOC_CR16_NUM32; + rtype = BFD_RELOC_CR16_NUM32; break; } @@ -517,6 +521,14 @@ arelent * tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP) { arelent * reloc; + bfd_reloc_code_real_type code; + + /* If symbols are local and resolved, then no relocation needed. */ + if ( ((fixP->fx_addsy) + && (S_GET_SEGMENT (fixP->fx_addsy) == absolute_section)) + || ((fixP->fx_subsy) + && (S_GET_SEGMENT (fixP->fx_subsy) == absolute_section))) + return NULL; reloc = xmalloc (sizeof (arelent)); reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); @@ -534,21 +546,21 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP) 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; + case BFD_RELOC_CR16_NUM8: + fixP->fx_r_type = BFD_RELOC_CR16_SWITCH8; + break; + case BFD_RELOC_CR16_NUM16: + fixP->fx_r_type = BFD_RELOC_CR16_SWITCH16; + break; + case BFD_RELOC_CR16_NUM32: + fixP->fx_r_type = BFD_RELOC_CR16_SWITCH32; + break; + case BFD_RELOC_CR16_NUM32a: + fixP->fx_r_type = BFD_RELOC_CR16_NUM32a; + break; + default: + abort (); + break; } } else @@ -564,8 +576,24 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP) segment_name (S_GET_SEGMENT (fixP->fx_addsy))); } } +#ifdef OBJ_ELF + if ((fixP->fx_r_type == BFD_RELOC_CR16_GOT_REGREL20) + && GOT_symbol + && fixP->fx_addsy == GOT_symbol) + { + code = BFD_RELOC_CR16_GOT_REGREL20; + reloc->addend = fixP->fx_offset = reloc->address; + } + else if ((fixP->fx_r_type == BFD_RELOC_CR16_GOTC_REGREL20) + && GOT_symbol + && fixP->fx_addsy == GOT_symbol) + { + code = BFD_RELOC_CR16_GOTC_REGREL20; + reloc->addend = fixP->fx_offset = reloc->address; + } +#endif - assert ((int) fixP->fx_r_type > 0); + gas_assert ((int) fixP->fx_r_type > 0); reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type); if (reloc->howto == NULL) @@ -576,7 +604,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP) bfd_get_reloc_code_name (fixP->fx_r_type)); return NULL; } - assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); + gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); return reloc; } @@ -613,10 +641,41 @@ 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; + char *opcode = fragP->fr_literal + fragP->fr_fix; + bfd_reloc_code_real_type reloc; subseg_change (sec, 0); + switch (fragP->fr_subtype) + { + case 0: + reloc = BFD_RELOC_CR16_DISP8; + break; + case 1: + /* If the subtype is not changed due to :m operand qualifier, + then no need to update the opcode value. */ + if ((int)opcode[1] != 0x18) + { + opcode[0] = (opcode[0] & 0xf0); + opcode[1] = 0x18; + } + reloc = BFD_RELOC_CR16_DISP16; + break; + case 2: + /* If the subtype is not changed due to :l operand qualifier, + then no need to update the opcode value. */ + if ((int)opcode[1] != 0) + { + opcode[2] = opcode[0]; + opcode[0] = opcode[1]; + opcode[1] = 0x0; + } + reloc = BFD_RELOC_CR16_DISP24; + break; + default: + abort(); + } + fix_new (fragP, fragP->fr_fix, bfd_get_reloc_size (bfd_reloc_type_lookup (stdoutput, reloc)), fragP->fr_symbol, fragP->fr_offset, 1, reloc); @@ -624,6 +683,24 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, fragS *fragP) fragP->fr_fix += md_relax_table[fragP->fr_subtype].rlx_length; } +symbolS * +md_undefined_symbol (char *name) +{ + if (*name == '_' && *(name + 1) == 'G' + && strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0) + { + if (!GOT_symbol) + { + if (symbol_find (name)) + as_bad (_("GOT already in symbol table")); + GOT_symbol = symbol_new (name, undefined_section, + (valueT) 0, &zero_address_frag); + } + return GOT_symbol; + } + return 0; +} + /* 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. */ @@ -642,58 +719,10 @@ 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; + return ieee_md_atof (type, litP, sizeP, target_big_endian); } /* Apply a fixS (fixup of an instruction or data that we didn't have @@ -706,39 +735,52 @@ 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 + else if (fixP->fx_pcrel == 1 && fixP->fx_addsy != NULL && S_GET_SEGMENT (fixP->fx_addsy) == seg) fixP->fx_done = 1; + else + fixP->fx_done = 0; + + if (fixP->fx_addsy != NULL && !fixP->fx_pcrel) + { + val = fixP->fx_offset; + fixP->fx_done = 1; + } + + if (fixP->fx_done) + { + 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; + } + else + fixP->fx_offset = * valP; } /* The location from which a PC relative jump should be calculated, @@ -752,8 +794,8 @@ md_pcrel_from (fixS *fixp) static void initialise_reg_hash_table (struct hash_control ** hash_table, - const reg_entry * register_table, - const unsigned int num_entries) + const reg_entry * register_table, + const unsigned int num_entries) { const reg_entry * reg; const char *hashret; @@ -767,8 +809,8 @@ initialise_reg_hash_table (struct hash_control ** hash_table, { hashret = hash_insert (* hash_table, reg->name, (char *) reg); if (hashret) - as_fatal (_("Internal Error: Can't hash %s: %s"), - reg->name, hashret); + as_fatal (_("Internal Error: Can't hash %s: %s"), + reg->name, hashret); } } @@ -790,7 +832,7 @@ md_begin (void) const char *mnemonic = cr16_instruction[i].mnemonic; hashret = hash_insert (cr16_inst_hash, mnemonic, - (char *)(cr16_instruction + i)); + (char *)(cr16_instruction + i)); if (hashret != NULL && *hashret != '\0') as_fatal (_("Can't hash `%s': %s\n"), cr16_instruction[i].mnemonic, @@ -832,6 +874,8 @@ process_label_constant (char *str, ins * cr16_ins) int symbol_with_s = 0; int symbol_with_m = 0; int symbol_with_l = 0; + int symbol_with_at_got = 0; + int symbol_with_at_gotc = 0; argument *cur_arg = cr16_ins->arg + cur_arg_num; /* Current argument. */ saved_input_line_pointer = input_line_pointer; @@ -845,7 +889,7 @@ process_label_constant (char *str, ins * cr16_ins) case O_absent: /* Missing or bad expr becomes absolute 0. */ as_bad (_("missing or invalid displacement expression `%s' taken as 0"), - str); + str); cr16_ins->exp.X_op = O_constant; cr16_ins->exp.X_add_number = 0; cr16_ins->exp.X_add_symbol = NULL; @@ -861,115 +905,172 @@ process_label_constant (char *str, ins * cr16_ins) case O_subtract: case O_add: cur_arg->X_op = O_symbol; + cur_arg->constant = cr16_ins->exp.X_add_number; + cr16_ins->exp.X_add_number = 0; cr16_ins->rtype = BFD_RELOC_NONE; relocatable = 1; if (strneq (input_line_pointer, "@c", 2)) - symbol_with_at = 1; + symbol_with_at = 1; if (strneq (input_line_pointer, "@l", 2) - || strneq (input_line_pointer, ":l", 2)) - symbol_with_l = 1; + || 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; + || 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; + || 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; + if (strneq (input_line_pointer, "@cGOT", 5) + || strneq (input_line_pointer, "@cgot", 5)) + { + if (GOT_symbol == NULL) + GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME); - 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; + symbol_with_at_gotc = 1; + } + else if (strneq (input_line_pointer, "@GOT", 4) + || strneq (input_line_pointer, "@got", 4)) + { + if ((strneq (input_line_pointer, "+", 1)) + || (strneq (input_line_pointer, "-", 1))) + as_warn (_("GOT bad expression with %s."), input_line_pointer); - case arg_idxr: - if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS)) - cr16_ins->rtype = BFD_RELOC_CR16_REGREL20; - break; + if (GOT_symbol == NULL) + GOT_symbol = symbol_find_or_make (GLOBAL_OFFSET_TABLE_NAME); - 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; + symbol_with_at_got = 1; + } + + switch (cur_arg->type) + { + case arg_cr: + if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS)) + { + if (symbol_with_at_got) + cr16_ins->rtype = BFD_RELOC_CR16_GOT_REGREL20; + else if (symbol_with_at_gotc) + cr16_ins->rtype = BFD_RELOC_CR16_GOTC_REGREL20; + else if (cur_arg->size == 20) + cr16_ins->rtype = BFD_RELOC_CR16_REGREL20; + else + cr16_ins->rtype = BFD_RELOC_CR16_REGREL20a; + } + break; - case arg_c: - if (IS_INSN_MNEMONIC ("bal")) - cr16_ins->rtype = BFD_RELOC_CR16_DISP24; - else if (IS_INSN_TYPE (BRANCH_INS)) + case arg_crp: + if (IS_INSN_TYPE (LD_STOR_INS) || IS_INSN_TYPE (CSTBIT_INS)) + { + if (symbol_with_at_got) + cr16_ins->rtype = BFD_RELOC_CR16_GOT_REGREL20; + else if (symbol_with_at_gotc) + cr16_ins->rtype = BFD_RELOC_CR16_GOTC_REGREL20; + } else { + 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)) { - if (symbol_with_s) - cr16_ins->rtype = BFD_RELOC_CR16_DISP8; - else if (symbol_with_m) - cr16_ins->rtype = BFD_RELOC_CR16_DISP16; + if (symbol_with_at_got) + cr16_ins->rtype = BFD_RELOC_CR16_GOT_REGREL20; + else if (symbol_with_at_gotc) + cr16_ins->rtype = BFD_RELOC_CR16_GOTC_REGREL20; else - cr16_ins->rtype = BFD_RELOC_CR16_DISP24; + cr16_ins->rtype = BFD_RELOC_CR16_REGREL20; } - else if (IS_INSN_TYPE (STOR_IMM_INS) || IS_INSN_TYPE (LD_STOR_INS) - || IS_INSN_TYPE (CSTBIT_INS)) + break; + + case arg_idxrp: + if (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; + if (symbol_with_at_got) + cr16_ins->rtype = BFD_RELOC_CR16_GOT_REGREL20; + else if (symbol_with_at_gotc) + cr16_ins->rtype = BFD_RELOC_CR16_GOTC_REGREL20; + else { + 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; + } } - else if (IS_INSN_TYPE (BRANCH_NEQ_INS)) - cr16_ins->rtype = BFD_RELOC_CR16_DISP4; + } + 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_l) + cr16_ins->rtype = BFD_RELOC_CR16_DISP24; + else if (symbol_with_m) + cr16_ins->rtype = BFD_RELOC_CR16_DISP16; + else + cr16_ins->rtype = BFD_RELOC_CR16_DISP8; + } + 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_at_got) + cr16_ins->rtype = BFD_RELOC_CR16_GOT_REGREL20; + else if (symbol_with_at_gotc) + cr16_ins->rtype = BFD_RELOC_CR16_GOTC_REGREL20; + else 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) + if (symbol_with_at_got) + cr16_ins->rtype = BFD_RELOC_CR16_GOT_REGREL20; + else if (symbol_with_at_gotc) + cr16_ins->rtype = BFD_RELOC_CR16_GOTC_REGREL20; + else if (symbol_with_s) cr16_ins->rtype = BFD_RELOC_CR16_IMM4; else if (symbol_with_m) cr16_ins->rtype = BFD_RELOC_CR16_IMM20; @@ -979,13 +1080,13 @@ process_label_constant (char *str, ins * cr16_ins) cr16_ins->rtype = BFD_RELOC_CR16_IMM32; } else if (IS_INSN_TYPE (ARITH_BYTE_INS)) - { - cr16_ins->rtype = BFD_RELOC_CR16_IMM16; - } + { + cr16_ins->rtype = BFD_RELOC_CR16_IMM16; + } break; default: break; - } + } break; default: @@ -1029,9 +1130,9 @@ getreg_image (reg r) { case CR16_R_REGTYPE: if (! is_procreg) - return reg->image; + return reg->image; else - IMAGE_ERR; + IMAGE_ERR; case CR16_P_REGTYPE: return reg->image; @@ -1097,10 +1198,10 @@ set_operand (char *operand, ins * cr16_ins) /* 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))) + && ((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; @@ -1137,7 +1238,7 @@ set_operand (char *operand, ins * cr16_ins) cur_arg->type = arg_idxrp; } else - cur_arg->rp = -1; + cur_arg->rp = -1; operandE = operandS; /* Set displacement constant. */ @@ -1245,9 +1346,9 @@ parse_operand (char *operand, ins * cr16_ins) { case '$': if (strchr (operand, '(') != NULL) - cur_arg->type = arg_icr; + cur_arg->type = arg_icr; else - cur_arg->type = arg_ic; + cur_arg->type = arg_ic; goto set_params; break; @@ -1439,7 +1540,7 @@ static int is_bcc_insn (char * op) { if (!(streq (op, "bal") || streq (op, "beq0b") || streq (op, "bnq0b") - || streq (op, "beq0w") || streq (op, "bnq0w"))) + || streq (op, "beq0w") || streq (op, "bnq0w"))) if ((op[0] == 'b') && (get_b_cc (op) != NULL)) return 1; return 0; @@ -1540,18 +1641,18 @@ getidxregp_image (reg r) 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; - } + { + 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; @@ -1612,17 +1713,17 @@ getprocregp_image (reg r) 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; + 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]; } @@ -1679,16 +1780,16 @@ print_constant (int nbits, int shift, argument *arg) 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. */ + 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] */ + 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); @@ -1700,70 +1801,70 @@ print_constant (int nbits, int shift, argument *arg) 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. */ + 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] */ + 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); - } - } + { + 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); + 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); - } + { + 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] */ + 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); + CR16_PRINT (1, constant, WORD_SHIFT); else - CR16_PRINT (0, constant, shift); + CR16_PRINT (0, constant, shift); break; case 8: - CR16_PRINT (0, ((constant/2)&0xf), shift); - CR16_PRINT (0, ((constant/2)>>4), (shift+8)); + CR16_PRINT (0, ((constant / 2) & 0xf), shift); + CR16_PRINT (0, ((constant / 2) >> 4), (shift + 8)); break; default: @@ -1810,35 +1911,35 @@ print_operand (int nbits, int shift, argument *arg) +-----------------------------+ */ 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); - } + { + 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); - } + { + 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); + 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); + 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; @@ -1861,16 +1962,16 @@ print_operand (int nbits, int shift, argument *arg) case arg_crp: print_constant (nbits, shift , arg); if (instruction->size > 1) - CR16_PRINT (0, getregp_image (arg->rp), (shift + 16)); + 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); - } + { + 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); + CR16_PRINT (0, getregp_image (arg->rp), shift); break; default: @@ -1949,11 +2050,11 @@ check_range (long *num, int bits, int unsigned flags, int update) if (value == 0xB || value == 0x9) return OP_OUT_OF_RANGE; else if (value == -1) - { - if (update) - *num = 9; - return retval; - } + { + if (update) + *num = 9; + return retval; + } } if (flags & OP_ESC1) @@ -1980,7 +2081,7 @@ check_range (long *num, int bits, int unsigned flags, int update) else if (flags & OP_NEG) { max = - 1; - min = - ((1 << (bits - 1))-1); + min = - ((1 << (bits - 1)) - 1); if ((value > max) || (value < min)) retval = OP_OUT_OF_RANGE; } @@ -2011,17 +2112,17 @@ warn_if_needed (ins *insn) unsigned int count = insn->arg[0].constant, reg_val; /* Check if count operand caused to save/retrive the RA twice - to generate warning message. */ + 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))) + || ((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" */ @@ -2036,10 +2137,10 @@ warn_if_needed (ins *insn) /* 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))) + || ((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 @@ -2187,14 +2288,14 @@ assemble_insn (char *mnemonic, ins *insn) /* 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)) + && (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)) + && (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 @@ -2216,7 +2317,7 @@ assemble_insn (char *mnemonic, ins *insn) determined) is sufficient. */ else if ((insn->arg[i].X_op == O_symbol) && ((bfd_reloc_type_lookup (stdoutput, insn->rtype))->bitsize - > cur_size[i])) + > cur_size[i])) goto next_insn; } found_const_within_range = 1; @@ -2241,15 +2342,15 @@ next_insn: { 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; + 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; } } @@ -2321,28 +2422,61 @@ print_insn (ins *insn) 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)) + if ((instruction->flags & RELAXABLE) && relocatable) + { + int relax_subtype; + /* Write the maximal instruction size supported. */ + insn_size = INSN_MAX_SIZE; + + if (IS_INSN_TYPE (BRANCH_INS)) + { + switch (insn->rtype) + { + case BFD_RELOC_CR16_DISP24: + relax_subtype = 2; + break; + case BFD_RELOC_CR16_DISP16: + relax_subtype = 1; + break; + default: + relax_subtype = 0; + break; + } + } + else + abort (); + + this_frag = frag_var (rs_machine_dependent, insn_size *2, + 4, relax_subtype, + insn->exp.X_add_symbol, + 0, + 0); + } + else { - reloc_howto_type *reloc_howto; - int size; + insn_size = instruction->size; + this_frag = frag_more (insn_size * 2); - reloc_howto = bfd_reloc_type_lookup (stdoutput, insn->rtype); + if ((relocatable) && (insn->rtype != BFD_RELOC_NONE)) + { + reloc_howto_type *reloc_howto; + int size; - if (!reloc_howto) - abort (); + reloc_howto = bfd_reloc_type_lookup (stdoutput, insn->rtype); + + if (!reloc_howto) + abort (); - size = bfd_get_reloc_size (reloc_howto); + size = bfd_get_reloc_size (reloc_howto); - if (size < 1 || size > 4) - abort (); + 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); + 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. */ @@ -2410,14 +2544,14 @@ md_assemble (char *op) 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)) + && ((&cr16_ins)->arg[0].constant >= 0)) { if (streq ("lshb", op)) - op = "ashub"; + op = "ashub"; else if (streq ("lshd", op)) - op = "ashud"; - else - op = "ashuw"; + op = "ashud"; + else + op = "ashuw"; } } diff --git a/gas/config/tc-cr16.h b/gas/config/tc-cr16.h index 4b43f21..739317f 100644 --- a/gas/config/tc-cr16.h +++ b/gas/config/tc-cr16.h @@ -1,5 +1,5 @@ /* tc-cr16.h -- Header file for tc-cr16.c, the CR16 GAS port. - Copyright 2007 Free Software Foundation, Inc. + Copyright 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by M R Swami Reddy @@ -27,13 +27,14 @@ #define TARGET_BYTES_BIG_ENDIAN 0 +#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_" + #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. */ @@ -48,8 +49,9 @@ extern const struct relax_type md_relax_table[]; #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) +/* Fixup non-code sections since we will never relax them. */ +#define TC_LINKRELAX_FIXUP(seg) \ + ((seg->flags & (SEC_ALLOC | SEC_CODE)) == (SEC_ALLOC | SEC_CODE)) /* CR16 instructions, with operands included, are a multiple of two bytes long. */ diff --git a/gas/config/tc-cris.c b/gas/config/tc-cris.c index 325f842..11e487f 100644 --- a/gas/config/tc-cris.c +++ b/gas/config/tc-cris.c @@ -1,5 +1,5 @@ /* tc-cris.c -- Assembler code for the CRIS CPU core. - Copyright 2000, 2001, 2002, 2003, 2004, 2006, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. @@ -52,7 +52,7 @@ /* Like in ":GOT", ":GOTOFF" etc. Other ports use '@', but that's in line_separator_chars for CRIS, so we avoid it. */ -#define PIC_SUFFIX_CHAR ':' +#define RELOC_SUFFIX_CHAR ':' /* This might be CRIS_INSN_NONE if we're assembling a prefix-insn only. Note that some prefix-insns might be assembled as CRIS_INSN_NORMAL. */ @@ -142,17 +142,16 @@ static int branch_disp (int); static void gen_cond_branch_32 (char *, char *, fragS *, symbolS *, symbolS *, long int); static void cris_number_to_imm (char *, long, int, fixS *, segT); -static void cris_create_short_jump (char *, addressT, addressT, fragS *, - symbolS *); static void s_syntax (int); static void s_cris_file (int); static void s_cris_loc (int); static void s_cris_arch (int); +static void s_cris_dtpoff (int); /* Get ":GOT", ":GOTOFF", ":PLT" etc. suffixes. */ -static void cris_get_pic_suffix (char **, bfd_reloc_code_real_type *, - expressionS *); -static unsigned int cris_get_pic_reloc_size (bfd_reloc_code_real_type); +static void cris_get_reloc_suffix (char **, bfd_reloc_code_real_type *, + expressionS *); +static unsigned int cris_get_specified_reloc_size (bfd_reloc_code_real_type); /* All the .syntax functions. */ static void cris_force_reg_prefix (void); @@ -183,6 +182,9 @@ static bfd_boolean symbols_have_leading_underscore /* Whether or not we allow PIC, and expand to PIC-friendly constructs. */ static bfd_boolean pic = FALSE; +/* Whether or not we allow TLS suffixes. For the moment, we always do. */ +static const bfd_boolean tls = TRUE; + /* If we're configured for "cris", default to allow all v0..v10 instructions and register names. */ #ifndef DEFAULT_CRIS_ARCH @@ -195,6 +197,7 @@ static enum cris_archs cris_arch = XCONCAT2 (arch_,DEFAULT_CRIS_ARCH); const pseudo_typeS md_pseudo_table[] = { {"dword", cons, 4}, + {"dtpoffd", s_cris_dtpoff, 4}, {"syntax", s_syntax, 0}, {"file", s_cris_file, 0}, {"loc", s_cris_loc, 0}, @@ -531,6 +534,7 @@ cris_relax_frag (segT seg ATTRIBUTE_UNUSED, fragS *fragP, because of the different reasons that they aren't relaxable. */ switch (fragP->fr_subtype) { + case ENCODE_RELAX (STATE_COND_BRANCH_PIC, STATE_DWORD): case ENCODE_RELAX (STATE_COND_BRANCH, STATE_DWORD): case ENCODE_RELAX (STATE_COND_BRANCH_V32, STATE_DWORD): case ENCODE_RELAX (STATE_COND_BRANCH_COMMON, STATE_DWORD): @@ -1017,14 +1021,10 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT sec ATTRIBUTE_UNUSED, } /* Generate a short jump around a secondary jump table. - Used by md_create_long_jump. + Also called from md_create_long_jump, when sufficient. */ - This used to be md_create_short_jump, but is now called from - md_create_long_jump instead, when sufficient, since the sizes of the - jumps are the same for pre-v32. */ - -static void -cris_create_short_jump (char *storep, addressT from_addr, addressT to_addr, +void +md_create_short_jump (char *storep, addressT from_addr, addressT to_addr, fragS *fragP ATTRIBUTE_UNUSED, symbolS *to_symbol ATTRIBUTE_UNUSED) { @@ -1033,18 +1033,30 @@ cris_create_short_jump (char *storep, addressT from_addr, addressT to_addr, /* See md_create_long_jump about the comment on the "+ 2". */ long int max_minimal_minus_distance; long int max_minimal_plus_distance; + long int max_minus_distance; + long int max_plus_distance; int nop_opcode; if (cris_arch == arch_crisv32) { max_minimal_minus_distance = BRANCH_BB_V32 + 2; max_minimal_plus_distance = BRANCH_BF_V32 + 2; + max_minus_distance = BRANCH_WB_V32 + 2; + max_plus_distance = BRANCH_WF_V32 + 2; nop_opcode = NOP_OPCODE_V32; } + else if (cris_arch == arch_cris_common_v10_v32) + /* Bail out for compatibility mode. (It seems it can be implemented, + perhaps with a 10-byte sequence: "move.d NNNN,$pc/$acr", "jump + $acr", "nop"; but doesn't seem worth it at the moment.) */ + as_fatal (_("Out-of-range .word offset handling\ + is not implemented for .arch common_v10_v32")); else { max_minimal_minus_distance = BRANCH_BB + 2; max_minimal_plus_distance = BRANCH_BF + 2; + max_minus_distance = BRANCH_WB + 2; + max_plus_distance = BRANCH_WF + 2; nop_opcode = NOP_OPCODE; } @@ -1064,7 +1076,8 @@ cris_create_short_jump (char *storep, addressT from_addr, addressT to_addr, a nop to keep disassembly sane. */ md_number_to_chars (storep + 4, nop_opcode, 2); } - else + else if (max_minus_distance <= distance + && distance <= max_plus_distance) { /* Make it a "long" short jump: "BA (PC+)". */ md_number_to_chars (storep, BA_PC_INCR_OPCODE, 2); @@ -1079,6 +1092,9 @@ cris_create_short_jump (char *storep, addressT from_addr, addressT to_addr, /* A nop for the delay slot. */ md_number_to_chars (storep + 4, nop_opcode, 2); } + else + as_bad_where (fragP->fr_file, fragP->fr_line, + _(".word case-table handling failed: table too large")); } /* Generate a long jump in a secondary jump table. @@ -1105,19 +1121,12 @@ md_create_long_jump (char *storep, addressT from_addr, addressT to_addr, long int max_short_plus_distance = cris_arch != arch_crisv32 ? BRANCH_WF + 3 : BRANCH_WF_V32 + 3; - /* Bail out for compatibility mode. (It seems it can be implemented, - perhaps with a 10-byte sequence: "move.d NNNN,$pc/$acr", "jump - $acr", "nop"; but doesn't seem worth it at the moment.) */ - if (cris_arch == arch_cris_common_v10_v32) - as_fatal (_("Out-of-range .word offset handling\ - is not implemented for .arch common_v10_v32")); - distance = to_addr - from_addr; if (max_short_minus_distance <= distance && distance <= max_short_plus_distance) /* Then make it a "short" long jump. */ - cris_create_short_jump (storep, from_addr, to_addr, fragP, + md_create_short_jump (storep, from_addr, to_addr, fragP, to_symbol); else { @@ -1252,7 +1261,7 @@ md_assemble (char *str) /* When the expression is unknown for a BDAP, it can need 0, 2 or 4 extra bytes, so we handle it separately. */ case PREFIX_BDAP_IMM: - /* We only do it if the relocation is unspecified, i.e. not a PIC + /* We only do it if the relocation is unspecified, i.e. not a PIC or TLS relocation. */ if (prefix.reloc == BFD_RELOC_NONE) { @@ -1269,13 +1278,13 @@ md_assemble (char *str) md_number_to_chars (opcodep, (long) prefix.opcode, 2); /* Having a specified reloc only happens for DIP and for BDAP with - PIC operands, but it is ok to drop through here for the other + PIC or TLS operands, but it is ok to drop through here for the other prefixes as they can have no relocs specified. */ if (prefix.reloc != BFD_RELOC_NONE) { unsigned int relocsize = (prefix.kind == PREFIX_DIP - ? 4 : cris_get_pic_reloc_size (prefix.reloc)); + ? 4 : cris_get_specified_reloc_size (prefix.reloc)); p = frag_more (relocsize); fix_new_exp (frag_now, (p - frag_now->fr_literal), relocsize, @@ -1819,7 +1828,7 @@ cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp, pseudo yet, so some of this is just unused framework. */ if (out_insnp->spec_reg->warning) - as_warn (out_insnp->spec_reg->warning); + as_warn ("%s", out_insnp->spec_reg->warning); else if (out_insnp->spec_reg->applicable_version == cris_ver_warning) /* Others have a generic warning. */ @@ -1889,7 +1898,7 @@ cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp, whether or not this is autoincrement mode. */ out_insnp->opcode |= (mode << 10); - /* If there was a PIC reloc specifier, then it was + /* If there was a reloc specifier, then it was attached to the prefix. Note that we can't check that the reloc size matches, since we don't have all the operands yet in all cases. */ @@ -1903,8 +1912,8 @@ cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp, case 'N': case 'Y': - /* Like 's', but immediate operand only. Also does not - modify insn. There are no insns where a PIC reloc + /* Like 's', but immediate operand only. Also do not + modify insn. There are no insns where an explicit reloc specifier makes sense. */ if (cris_get_expression (&s, &out_insnp->expr)) { @@ -1927,9 +1936,10 @@ cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp, relocation. */ out_insnp->expr.X_add_number += 6; - if (pic && *s == PIC_SUFFIX_CHAR) - cris_get_pic_suffix (&s, &out_insnp->reloc, - &out_insnp->expr); + /* TLS specifiers do not make sense here. */ + if (pic && *s == RELOC_SUFFIX_CHAR) + cris_get_reloc_suffix (&s, &out_insnp->reloc, + &out_insnp->expr); continue; } @@ -2194,13 +2204,18 @@ cris_process_instruction (char *insn_text, struct cris_instruction *out_insnp, } /* If there was a relocation specified for the immediate - expression (i.e. it had a PIC modifier) check that the - size of the PIC relocation matches the size specified by + expression (i.e. it had a PIC or TLS modifier) check that the + size of the relocation matches the size specified by the opcode. */ if (out_insnp->reloc != BFD_RELOC_NONE - && (cris_get_pic_reloc_size (out_insnp->reloc) + && (cris_get_specified_reloc_size (out_insnp->reloc) != (unsigned int) out_insnp->imm_oprnd_size)) - as_bad (_("PIC relocation size does not match operand size")); + as_bad (out_insnp->reloc == BFD_RELOC_CRIS_32_GD + || out_insnp->reloc == BFD_RELOC_CRIS_32_TPREL + || out_insnp->reloc == BFD_RELOC_CRIS_16_TPREL + || out_insnp->reloc == BFD_RELOC_CRIS_32_IE + ? _("TLS relocation size does not match operand size") + : _("PIC relocation size does not match operand size")); } else if (instruction->op == cris_muls_op || instruction->op == cris_mulu_op) @@ -2715,8 +2730,8 @@ get_autoinc_prefix_or_indir_op (char **cPP, struct cris_prefix *prefixp, /* We tentatively put an opcode corresponding to a 32-bit operand here, although it may be - relaxed when there's no PIC specifier for the - operand. */ + relaxed when there's no relocation + specifier for the operand. */ prefixp->opcode = (BDAP_INDIR_OPCODE | (prefixp->base_reg_number << 12) @@ -2726,18 +2741,18 @@ get_autoinc_prefix_or_indir_op (char **cPP, struct cris_prefix *prefixp, /* This can have a PIC suffix, specifying reloc type to use. */ - if (pic && **cPP == PIC_SUFFIX_CHAR) + if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR) { unsigned int relocsize; - cris_get_pic_suffix (cPP, &prefixp->reloc, - &prefixp->expr); + cris_get_reloc_suffix (cPP, &prefixp->reloc, + &prefixp->expr); /* Tweak the size of the immediate operand in the prefix opcode if it isn't what we set. */ relocsize - = cris_get_pic_reloc_size (prefixp->reloc); + = cris_get_specified_reloc_size (prefixp->reloc); if (relocsize != 4) prefixp->opcode = ((prefixp->opcode & ~(3 << 4)) @@ -2763,8 +2778,9 @@ get_autoinc_prefix_or_indir_op (char **cPP, struct cris_prefix *prefixp, in the blanks and break out to match the final ']'. - Note that we don't allow a PIC suffix for an - operand with a minus sign. */ + Note that we don't allow a relocation + suffix for an operand with a minus + sign. */ prefixp->kind = PREFIX_BDAP_IMM; break; } @@ -2802,8 +2818,8 @@ get_autoinc_prefix_or_indir_op (char **cPP, struct cris_prefix *prefixp, /* This can have a PIC suffix, specifying reloc type to use. The caller must check that the reloc size matches the operand size. */ - if (pic && **cPP == PIC_SUFFIX_CHAR) - cris_get_pic_suffix (cPP, &prefixp->reloc, imm_exprP); + if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR) + cris_get_reloc_suffix (cPP, &prefixp->reloc, imm_exprP); return 1; } @@ -2971,15 +2987,15 @@ get_3op_or_dip_prefix_op (char **cPP, struct cris_prefix *prefixp) | REG_PC /* << 0 */); /* This can have a PIC suffix, specifying reloc type to use. */ - if (pic && **cPP == PIC_SUFFIX_CHAR) + if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR) { unsigned int relocsize; - cris_get_pic_suffix (cPP, &prefixp->reloc, &prefixp->expr); + cris_get_reloc_suffix (cPP, &prefixp->reloc, &prefixp->expr); /* Tweak the size of the immediate operand in the prefix opcode if it isn't what we set. */ - relocsize = cris_get_pic_reloc_size (prefixp->reloc); + relocsize = cris_get_specified_reloc_size (prefixp->reloc); if (relocsize != 4) prefixp->opcode = ((prefixp->opcode & ~(3 << 4)) @@ -3035,6 +3051,10 @@ get_3op_or_dip_prefix_op (char **cPP, struct cris_prefix *prefixp) prefixp->kind = PREFIX_DIP; prefixp->opcode = DIP_OPCODE | (AUTOINCR_BIT << 8) | REG_PC; prefixp->reloc = BFD_RELOC_32; + + /* For :GD and :IE, it makes sense to have TLS specifiers here. */ + if ((pic || tls) && **cPP == RELOC_SUFFIX_CHAR) + cris_get_reloc_suffix (cPP, &prefixp->reloc, &prefixp->expr); } else /* Neither '[' nor register nor expression. We lose. */ @@ -3426,13 +3446,19 @@ gen_cond_branch_32 (char *opcodep, char *writep, fragS *fragP, md_number_to_chars (writep + 8, MOVE_PC_INCR_OPCODE_SUFFIX, 2); } -/* Get the size of an immediate-reloc in bytes. Only valid for PIC - relocs. */ +/* Get the size of an immediate-reloc in bytes. Only valid for + specified relocs (TLS, PIC). */ static unsigned int -cris_get_pic_reloc_size (bfd_reloc_code_real_type reloc) +cris_get_specified_reloc_size (bfd_reloc_code_real_type reloc) { - return reloc == BFD_RELOC_CRIS_16_GOTPLT || reloc == BFD_RELOC_CRIS_16_GOT + return + reloc == BFD_RELOC_CRIS_16_GOTPLT + || reloc == BFD_RELOC_CRIS_16_GOT + || reloc == BFD_RELOC_CRIS_16_GOT_GD + || reloc == BFD_RELOC_CRIS_16_DTPREL + || reloc == BFD_RELOC_CRIS_16_GOT_TPREL + || reloc == BFD_RELOC_CRIS_16_TPREL ? 2 : 4; } @@ -3440,8 +3466,8 @@ cris_get_pic_reloc_size (bfd_reloc_code_real_type reloc) Adjust *EXPRP with any addend found after the PIC suffix. */ static void -cris_get_pic_suffix (char **cPP, bfd_reloc_code_real_type *relocp, - expressionS *exprP) +cris_get_reloc_suffix (char **cPP, bfd_reloc_code_real_type *relocp, + expressionS *exprP) { char *s = *cPP; unsigned int i; @@ -3452,10 +3478,14 @@ cris_get_pic_suffix (char **cPP, bfd_reloc_code_real_type *relocp, const char *const suffix; unsigned int len; bfd_reloc_code_real_type reloc; + bfd_boolean pic_p; + bfd_boolean tls_p; } pic_suffixes[] = { #undef PICMAP -#define PICMAP(s, r) {s, sizeof (s) - 1, r} +#define PICMAP(s, r) {s, sizeof (s) - 1, r, TRUE, FALSE} +#define PICTLSMAP(s, r) {s, sizeof (s) - 1, r, TRUE, TRUE} +#define TLSMAP(s, r) {s, sizeof (s) - 1, r, FALSE, TRUE} /* Keep this in order with longest unambiguous prefix first. */ PICMAP ("GOTPLT16", BFD_RELOC_CRIS_16_GOTPLT), PICMAP ("GOTPLT", BFD_RELOC_CRIS_32_GOTPLT), @@ -3463,7 +3493,17 @@ cris_get_pic_suffix (char **cPP, bfd_reloc_code_real_type *relocp, PICMAP ("PLT", BFD_RELOC_CRIS_32_PLT_PCREL), PICMAP ("GOTOFF", BFD_RELOC_CRIS_32_GOTREL), PICMAP ("GOT16", BFD_RELOC_CRIS_16_GOT), - PICMAP ("GOT", BFD_RELOC_CRIS_32_GOT) + PICMAP ("GOT", BFD_RELOC_CRIS_32_GOT), + PICTLSMAP ("GDGOTREL16", BFD_RELOC_CRIS_16_GOT_GD), + PICTLSMAP ("GDGOTREL", BFD_RELOC_CRIS_32_GOT_GD), + TLSMAP ("GD", BFD_RELOC_CRIS_32_GD), + PICTLSMAP ("DTPREL16", BFD_RELOC_CRIS_16_DTPREL), + PICTLSMAP ("DTPREL", BFD_RELOC_CRIS_32_DTPREL), + TLSMAP ("IE", BFD_RELOC_CRIS_32_IE), + PICTLSMAP ("TPOFFGOT16", BFD_RELOC_CRIS_16_GOT_TPREL), + PICTLSMAP ("TPOFFGOT", BFD_RELOC_CRIS_32_GOT_TPREL), + TLSMAP ("TPOFF16", BFD_RELOC_CRIS_16_TPREL), + TLSMAP ("TPOFF", BFD_RELOC_CRIS_32_TPREL) }; /* We've already seen the ':', so consume it. */ @@ -3472,7 +3512,11 @@ cris_get_pic_suffix (char **cPP, bfd_reloc_code_real_type *relocp, for (i = 0; i < sizeof (pic_suffixes)/sizeof (pic_suffixes[0]); i++) { if (strncmp (s, pic_suffixes[i].suffix, pic_suffixes[i].len) == 0 - && ! is_part_of_name (s[pic_suffixes[i].len])) + && ! is_part_of_name (s[pic_suffixes[i].len]) + /* PIC and non-PIC relocations are exclusive. */ + && (pic != 0) == (pic_suffixes[i].pic_p != 0) + /* But TLS can be active for non-TLS relocations too. */ + && (pic_suffixes[i].tls_p == 0 || tls)) { /* We have a match. Consume the suffix and set the relocation type. */ @@ -3580,10 +3624,12 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg) ; } - /* Only do this for old-arch binaries. */ + /* Only use the computed value for old-arch binaries. For all + others, where we're going to output a relocation, put 0 in the + code. */ if (cris_arch != arch_cris_any_v0_v10 && (fixP->fx_addsy != NULL || fixP->fx_pcrel)) - return; + val = 0; switch (fixP->fx_r_type) { @@ -3592,6 +3638,22 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg) regression tests on the object file contents. FIXME: Seems uninteresting now that we have a test suite. */ + case BFD_RELOC_CRIS_32_GOT_GD: + case BFD_RELOC_CRIS_16_GOT_GD: + case BFD_RELOC_CRIS_32_GD: + case BFD_RELOC_CRIS_32_IE: + case BFD_RELOC_CRIS_32_DTPREL: + case BFD_RELOC_CRIS_16_DTPREL: + case BFD_RELOC_CRIS_32_GOT_TPREL: + case BFD_RELOC_CRIS_16_GOT_TPREL: + case BFD_RELOC_CRIS_32_TPREL: + case BFD_RELOC_CRIS_16_TPREL: +#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) + if (IS_ELF && fixP->fx_addsy != NULL) + S_SET_THREAD_LOCAL (fixP->fx_addsy); +#endif + /* Fall through. */ + case BFD_RELOC_CRIS_16_GOT: case BFD_RELOC_CRIS_32_GOT: case BFD_RELOC_CRIS_32_GOTREL: @@ -3601,13 +3663,14 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg) case BFD_RELOC_CRIS_32_PLT_PCREL: /* We don't want to put in any kind of non-zero bits in the data being relocated for these. */ + md_number_to_chars (bufp, 0, n); break; case BFD_RELOC_32_PCREL: - /* If this one isn't fully resolved, we don't want to put anything + /* If this one isn't fully resolved, we don't want to put non-zero in the object. */ if (fixP->fx_addsy != NULL || fixP->fx_pcrel) - break; + val = 0; /* Fall through. */ case BFD_RELOC_32: @@ -3629,38 +3692,30 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg) if (val > 0xffff || val < -32768) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 16 bit range: %ld"), val); - if (! fixP->fx_addsy) - { - bufp[1] = (val >> 8) & 0xFF; - bufp[0] = val & 0xFF; - } + bufp[1] = (val >> 8) & 0xFF; + bufp[0] = val & 0xFF; break; case BFD_RELOC_CRIS_SIGNED_16: if (val > 32767 || val < -32768) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 16 bit signed range: %ld"), val); - if (! fixP->fx_addsy) - { - bufp[1] = (val >> 8) & 0xFF; - bufp[0] = val & 0xFF; - } + bufp[1] = (val >> 8) & 0xFF; + bufp[0] = val & 0xFF; break; case BFD_RELOC_8: case BFD_RELOC_8_PCREL: if (val > 255 || val < -128) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 8 bit range: %ld"), val); - if (! fixP->fx_addsy) - bufp[0] = val & 0xFF; + bufp[0] = val & 0xFF; break; case BFD_RELOC_CRIS_SIGNED_8: if (val > 127 || val < -128) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 8 bit signed range: %ld"), val); - if (! fixP->fx_addsy) - bufp[0] = val & 0xFF; + bufp[0] = val & 0xFF; break; case BFD_RELOC_CRIS_LAPCQ_OFFSET: @@ -3670,37 +3725,32 @@ cris_number_to_imm (char *bufp, long val, int n, fixS *fixP, segT seg) if (val > 15 || val < 0) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 4 bit unsigned range: %ld"), val); - if (! fixP->fx_addsy) - bufp[0] |= val & 0x0F; + bufp[0] |= val & 0x0F; break; case BFD_RELOC_CRIS_UNSIGNED_5: if (val > 31 || val < 0) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 5 bit unsigned range: %ld"), val); - if (! fixP->fx_addsy) - bufp[0] |= val & 0x1F; + bufp[0] |= val & 0x1F; break; case BFD_RELOC_CRIS_SIGNED_6: if (val > 31 || val < -32) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 6 bit range: %ld"), val); - if (! fixP->fx_addsy) - bufp[0] |= val & 0x3F; + bufp[0] |= val & 0x3F; break; case BFD_RELOC_CRIS_UNSIGNED_6: if (val > 63 || val < 0) as_bad_where (fixP->fx_file, fixP->fx_line, _("Value not in 6 bit unsigned range: %ld"), val); - if (! fixP->fx_addsy) - bufp[0] |= val & 0x3F; + bufp[0] |= val & 0x3F; break; case BFD_RELOC_CRIS_BDISP8: - if (! fixP->fx_addsy) - bufp[0] = branch_disp (val); + bufp[0] = branch_disp (val); break; case BFD_RELOC_NONE: @@ -3870,6 +3920,16 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP) case BFD_RELOC_CRIS_UNSIGNED_8: case BFD_RELOC_CRIS_UNSIGNED_16: case BFD_RELOC_CRIS_LAPCQ_OFFSET: + case BFD_RELOC_CRIS_32_GOT_GD: + case BFD_RELOC_CRIS_16_GOT_GD: + case BFD_RELOC_CRIS_32_GD: + case BFD_RELOC_CRIS_32_IE: + case BFD_RELOC_CRIS_32_DTPREL: + case BFD_RELOC_CRIS_16_DTPREL: + case BFD_RELOC_CRIS_32_GOT_TPREL: + case BFD_RELOC_CRIS_16_GOT_TPREL: + case BFD_RELOC_CRIS_32_TPREL: + case BFD_RELOC_CRIS_16_TPREL: code = fixP->fx_r_type; break; default: @@ -3879,7 +3939,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixP) } relP = (arelent *) xmalloc (sizeof (arelent)); - assert (relP != 0); + gas_assert (relP != 0); relP->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); *relP->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy); relP->address = fixP->fx_frag->fr_address + fixP->fx_where; @@ -4158,6 +4218,30 @@ s_cris_loc (int dummy) dwarf2_directive_loc (dummy); } +/* Worker for .dtpoffd: generate a R_CRIS_32_DTPREL reloc, as for + expr:DTPREL but for use in debug info. */ + +static void +s_cris_dtpoff (int bytes) +{ + expressionS ex; + char *p; + + if (bytes != 4) + as_fatal (_("internal inconsistency problem: %s called for %d bytes"), + __FUNCTION__, bytes); + + expression (&ex); + + p = frag_more (bytes); + md_number_to_chars (p, 0, bytes); + fix_new_exp (frag_now, p - frag_now->fr_literal, bytes, &ex, FALSE, + BFD_RELOC_CRIS_32_DTPREL); + + demand_empty_rest_of_line (); +} + + /* Translate a string (as common to --march= and .arch ) into an enum. If the string *STR is recognized, *STR is updated to point to the end of the string. If the string is not recognized, diff --git a/gas/config/tc-cris.h b/gas/config/tc-cris.h index 2ceac88..56584bf 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, 2007 + Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009 Free Software Foundation, Inc. Contributed by Axis Communications AB, Lund, Sweden. @@ -68,11 +68,6 @@ extern const char FLT_CHARS[]; #define md_operand(x) #define md_number_to_chars number_to_chars_littleendian - -/* There's no use having different functions for this; the sizes are the - same. Note that we can't #define md_short_jump_size here. */ -#define md_create_short_jump md_create_long_jump - extern const struct relax_type md_cris_relax_table[]; #define TC_GENERIC_RELAX_TABLE md_cris_relax_table diff --git a/gas/config/tc-crx.c b/gas/config/tc-crx.c index 08656f9..e95aa05 100644 --- a/gas/config/tc-crx.c +++ b/gas/config/tc-crx.c @@ -1,5 +1,5 @@ /* tc-crx.c -- Assembler code for the CRX CPU core. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Contributed by Tomer Levi, NSC, Israel. Originally written for GAS 2.12 by Tomer Levi, NSC, Israel. @@ -351,7 +351,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP) } } - assert ((int) fixP->fx_r_type > 0); + gas_assert ((int) fixP->fx_r_type > 0); reloc->howto = bfd_reloc_type_lookup (stdoutput, fixP->fx_r_type); if (reloc->howto == (reloc_howto_type *) NULL) @@ -362,7 +362,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS * fixP) bfd_get_reloc_code_name (fixP->fx_r_type)); return NULL; } - assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); + gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); return reloc; } @@ -463,58 +463,10 @@ 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; - LITTLENUM_TYPE words[4]; - char *t; - int i; - - switch (type) - { - case 'f': - prec = 2; - break; - - case 'd': - prec = 4; - break; - - default: - *sizeP = 0; - return _("bad call to md_atof"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - - *sizeP = prec * 2; - - if (! target_big_endian) - { - for (i = prec - 1; i >= 0; i--) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - } - else - { - for (i = 0; i < prec; i++) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - } - - return NULL; + return ieee_md_atof (type, litP, sizeP, target_big_endian); } /* Apply a fixS (fixup of an instruction or data that we didn't have @@ -586,7 +538,7 @@ md_begin (void) const char *mnemonic = crx_instruction[i].mnemonic; hashret = hash_insert (crx_inst_hash, mnemonic, - (PTR) &crx_instruction[i]); + (void *) &crx_instruction[i]); if (hashret != NULL && *hashret != '\0') as_fatal (_("Can't hash `%s': %s\n"), crx_instruction[i].mnemonic, @@ -614,7 +566,7 @@ md_begin (void) for (regtab = crx_regtab; regtab < (crx_regtab + NUMREGS); regtab++) { - hashret = hash_insert (reg_hash, regtab->name, (PTR) regtab); + hashret = hash_insert (reg_hash, regtab->name, (void *) regtab); if (hashret) as_fatal (_("Internal Error: Can't hash %s: %s"), regtab->name, @@ -632,7 +584,8 @@ md_begin (void) for (copregtab = crx_copregtab; copregtab < (crx_copregtab + NUMCOPREGS); copregtab++) { - hashret = hash_insert (copreg_hash, copregtab->name, (PTR) copregtab); + hashret = hash_insert (copreg_hash, copregtab->name, + (void *) copregtab); if (hashret) as_fatal (_("Internal Error: Can't hash %s: %s"), copregtab->name, diff --git a/gas/config/tc-crx.h b/gas/config/tc-crx.h index e1d2e7c..3036dc6 100644 --- a/gas/config/tc-crx.h +++ b/gas/config/tc-crx.h @@ -1,5 +1,5 @@ /* tc-crx.h -- Header file for tc-crx.c, the CRX GAS port. - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2007 Free Software Foundation, Inc. Contributed by Tomer Levi, NSC, Israel. Originally written for GAS 2.12 by Tomer Levi, NSC, Israel. diff --git a/gas/config/tc-d10v.c b/gas/config/tc-d10v.c index 336d9a8..339eb74 100644 --- a/gas/config/tc-d10v.c +++ b/gas/config/tc-d10v.c @@ -1,5 +1,6 @@ /* tc-d10v.c -- Assembler code for the Mitsubishi D10V - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 + Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, + 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -24,6 +25,7 @@ #include "subsegs.h" #include "opcode/d10v.h" #include "elf/ppc.h" +#include "dwarf2dbg.h" const char comment_chars[] = ";"; const char line_comment_chars[] = "#"; @@ -251,44 +253,10 @@ md_undefined_symbol (char *name ATTRIBUTE_UNUSED) return 0; } -/* Turn a string in input_line_pointer into a floating point constant - of type TYPE, and store the appropriate bytes in *LITP. The number - of LITTLENUMS emitted is stored in *SIZEP. An error message is - returned, or NULL on OK. */ - char * md_atof (int type, char *litP, int *sizeP) { - int prec; - LITTLENUM_TYPE words[4]; - char *t; - int i; - - switch (type) - { - case 'f': - prec = 2; - break; - case 'd': - prec = 4; - break; - default: - *sizeP = 0; - return _("bad call to md_atof"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - - *sizeP = prec * 2; - - for (i = 0; i < prec; i++) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - return NULL; + return ieee_md_atof (type, litP, sizeP, TRUE); } void @@ -644,6 +612,7 @@ write_long (unsigned long insn, Fixups *fx) int i, where; char *f = frag_more (4); + dwarf2_emit_insn (4); insn |= FM11; number_to_chars_bigendian (f, insn, 4); @@ -679,6 +648,7 @@ write_1_short (struct d10v_opcode *opcode, char *f = frag_more (4); int i, where; + dwarf2_emit_insn (4); if (opcode->exec_type & PARONLY) as_fatal (_("Instruction must be executed in parallel with another instruction.")); @@ -1093,6 +1063,7 @@ write_2_short (struct d10v_opcode *opcode1, } f = frag_more (4); + dwarf2_emit_insn (4); number_to_chars_bigendian (f, insn, 4); /* Process fixup chains. fx refers to insn2 when j == 0, and to @@ -1660,6 +1631,15 @@ d10v_cleanup (void) return 1; } +void +d10v_frob_label (symbolS *lab) +{ + d10v_cleanup (); + symbol_set_frag (lab, frag_now); + S_SET_VALUE (lab, (valueT) frag_now_fix ()); + dwarf2_emit_label (lab); +} + /* Like normal .word, except support @word. Clobbers input_line_pointer, checks end-of-line. */ diff --git a/gas/config/tc-d10v.h b/gas/config/tc-d10v.h index 43b5e7f..39f3704 100644 --- a/gas/config/tc-d10v.h +++ b/gas/config/tc-d10v.h @@ -1,5 +1,5 @@ /* tc-d10v.h -- Header file for tc-d10v.c. - Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007 + Copyright 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. Written by Martin Hunt, Cygnus Support. @@ -46,17 +46,11 @@ long md_pcrel_from_section (struct fix *, segT); #define md_number_to_chars number_to_chars_bigendian int d10v_cleanup (void); +void d10v_frob_label (symbolS *); #define md_after_pass_hook() d10v_cleanup () #define md_cleanup() d10v_cleanup () #define md_do_align(a,b,c,d,e) d10v_cleanup () -#define tc_frob_label(sym) \ - do \ - { \ - d10v_cleanup (); \ - symbol_set_frag (sym, frag_now); \ - S_SET_VALUE (sym, (valueT) frag_now_fix ()); \ - } \ - while (0) +#define tc_frob_label(sym) d10v_frob_label (sym) #define tc_fix_adjustable(FIX) d10v_fix_adjustable(FIX) bfd_boolean d10v_fix_adjustable (struct fix *); diff --git a/gas/config/tc-d30v.c b/gas/config/tc-d30v.c index 4a2efd6..8d90d46 100644 --- a/gas/config/tc-d30v.c +++ b/gas/config/tc-d30v.c @@ -1,6 +1,6 @@ /* tc-d30v.c -- Assembler code for the Mitsubishi D30V - Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007 - Free Software Foundation, Inc. + Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -23,6 +23,7 @@ #include "safe-ctype.h" #include "subsegs.h" #include "opcode/d30v.h" +#include "dwarf2dbg.h" const char comment_chars[] = ";"; const char line_comment_chars[] = "#"; @@ -285,44 +286,10 @@ md_undefined_symbol (char *name ATTRIBUTE_UNUSED) return 0; } -/* Turn a string in input_line_pointer into a floating point constant - of type TYPE, and store the appropriate bytes in *LITP. The number - of LITTLENUMS emitted is stored in *SIZEP. An error message is - returned, or NULL on OK. */ - char * md_atof (int type, char *litP, int *sizeP) { - int prec; - LITTLENUM_TYPE words[4]; - char *t; - int i; - - switch (type) - { - case 'f': - prec = 2; - break; - case 'd': - prec = 4; - break; - default: - *sizeP = 0; - return _("bad call to md_atof"); - } - - t = atof_ieee (input_line_pointer, type, words); - if (t) - input_line_pointer = t; - - *sizeP = prec * 2; - - for (i = 0; i < prec; i++) - { - md_number_to_chars (litP, (valueT) words[i], 2); - litP += 2; - } - return NULL; + return ieee_md_atof (type, litP, sizeP, TRUE); } void @@ -386,7 +353,7 @@ postfix (char *p) } static bfd_reloc_code_real_type -get_reloc (struct d30v_operand *op, int rel_flag) +get_reloc (const struct d30v_operand *op, int rel_flag) { switch (op->bits) { @@ -572,7 +539,7 @@ build_insn (struct d30v_insn *opcode, expressionS *opers) as_fatal (_("too many fixups")); fixups->fix[fixups->fc].reloc = - get_reloc ((struct d30v_operand *) &d30v_operand_table[form->operands[i]], op->reloc_flag); + get_reloc (d30v_operand_table + form->operands[i], op->reloc_flag); fixups->fix[fixups->fc].size = 4; fixups->fix[fixups->fc].exp = opers[i]; fixups->fix[fixups->fc].operand = form->operands[i]; @@ -627,6 +594,7 @@ write_long (struct d30v_insn *opcode ATTRIBUTE_UNUSED, int i, where; char *f = frag_more (8); + dwarf2_emit_insn (8); insn |= FM11; d30v_number_to_chars (f, insn, 8); @@ -654,6 +622,7 @@ write_1_short (struct d30v_insn *opcode, char *f = frag_more (8); int i, where; + dwarf2_emit_insn (8); if (warn_nops == NOP_ALL) as_warn (_("%s NOP inserted"), use_sequential ? _("sequential") : _("parallel")); @@ -1121,6 +1090,7 @@ write_2_short (struct d30v_insn *opcode1, } f = frag_more (8); + dwarf2_emit_insn (8); d30v_number_to_chars (f, insn, 8); /* If the previous instruction was a 32-bit multiply but it is put into a @@ -1550,7 +1520,7 @@ d30v_align (int n, char *pfill, symbolS *label) valueT old_value; valueT new_value; - assert (S_GET_SEGMENT (label) == now_seg); + gas_assert (S_GET_SEGMENT (label) == now_seg); old_frag = symbol_get_frag (label); old_value = S_GET_VALUE (label); @@ -1718,6 +1688,7 @@ md_assemble (char *str) else { f = frag_more (8); + dwarf2_emit_insn (8); d30v_number_to_chars (f, NOP2, 8); if (warn_nops == NOP_ALL || warn_nops == NOP_MULTIPLY) @@ -1902,6 +1873,8 @@ d30v_frob_label (symbolS *lab) /* Record this label for future adjustment after we find out what kind of data it references, and the required alignment therewith. */ d30v_last_label = lab; + + dwarf2_emit_label (lab); } /* Hook into cons for capturing alignment changes. */ @@ -2147,4 +2120,3 @@ const pseudo_typeS md_pseudo_table[] = { "sect.s", s_d30v_section, 0 }, { NULL, NULL, 0 } }; - diff --git a/gas/config/tc-d30v.h b/gas/config/tc-d30v.h index e63ef41..5193550 100644 --- a/gas/config/tc-d30v.h +++ b/gas/config/tc-d30v.h @@ -1,5 +1,5 @@ /* tc-310v.h -- Header file for tc-d30v.c. - Copyright 1997, 1998, 2000, 2001, 2002, 2005, 2007 + Copyright 1997, 1998, 2000, 2001, 2002, 2005, 2007, 2009 Free Software Foundation, Inc. Written by Martin Hunt, Cygnus Support. @@ -48,7 +48,7 @@ extern long md_pcrel_from_section (struct fix *, segT); int d30v_cleanup (int); #define md_after_pass_hook() d30v_cleanup (FALSE) #define md_cleanup() d30v_cleanup (FALSE) -#define TC_START_LABEL(ch, ptr) (ch == ':' && d30v_cleanup (FALSE)) +#define TC_START_LABEL(ch, s, ptr) (ch == ':' && d30v_cleanup (FALSE)) void d30v_start_line (void); #define md_start_line_hook() d30v_start_line () diff --git a/gas/config/tc-dlx.c b/gas/config/tc-dlx.c index 1c751db..6cf1fcd 100644 --- a/gas/config/tc-dlx.c +++ b/gas/config/tc-dlx.c @@ -1,5 +1,6 @@ /* tc-ldx.c -- Assemble for the DLX - Copyright 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2002, 2003, 2004, 2005, 2007, 2009 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -287,7 +288,7 @@ md_begin (void) if (retval != NULL) { - fprintf (stderr, "internal error: can't hash `%s': %s\n", + fprintf (stderr, _("internal error: can't hash `%s': %s\n"), machine_opcodes[i].name, retval); lose = 1; } @@ -594,7 +595,7 @@ static char * parse_operand (char *s, expressionS *operandp) { char *save = input_line_pointer; - char *new; + char *new_pos; the_insn.HI = the_insn.LO = 0; @@ -641,9 +642,9 @@ parse_operand (char *s, expressionS *operandp) (void) expression (operandp); } - new = input_line_pointer; + new_pos = input_line_pointer; input_line_pointer = save; - return new; + return new_pos; } /* Instruction parsing. Takes a string containing the opcode. @@ -889,7 +890,7 @@ machine_ip (char *str) } /* Types or values of args don't match. */ - as_bad ("Invalid operands"); + as_bad (_("Invalid operands")); return; } } @@ -908,6 +909,8 @@ md_assemble (char *str) know (str); machine_ip (str); toP = frag_more (4); + dwarf2_emit_insn (4); + /* Put out the opcode. */ md_number_to_chars (toP, the_insn.opcode, 4); @@ -975,69 +978,13 @@ md_assemble (char *str) } /* This is identical to the md_atof in m68k.c. I think this is right, - but I'm not sure. - - 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. */ -/* Dlx will not use it anyway, so I just leave it here for now. */ - -/* Equal to MAX_PRECISION in atof-ieee.c. */ -#define MAX_LITTLENUMS 6 + but I'm not sure. Dlx will not use it anyway, so I just leave it + here for now. */ 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 0; + return ieee_md_atof (type, litP, sizeP, TRUE); } /* Write out big-endian. */ @@ -1253,13 +1200,13 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, if (reloc->howto == NULL) { as_bad_where (fixP->fx_file, fixP->fx_line, - "internal error: can't export reloc type %d (`%s')", + _("internal error: can't export reloc type %d (`%s')"), fixP->fx_r_type, bfd_get_reloc_code_name (fixP->fx_r_type)); return NULL; } - assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); + gas_assert (!fixP->fx_pcrel == !reloc->howto->pc_relative); reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixP->fx_addsy); @@ -1276,7 +1223,7 @@ const pseudo_typeS dlx_pseudo_table[] = { /* Some additional ops that are used by gcc-dlx. */ - {"asciiz", stringer, 1}, + {"asciiz", stringer, 8 + 1}, {"half", cons, 2}, {"dword", cons, 8}, {"word", cons, 4}, @@ -1291,4 +1238,3 @@ dlx_pop_insert (void) pop_insert (dlx_pseudo_table); return ; } - diff --git a/gas/config/tc-fr30.c b/gas/config/tc-fr30.c index 8aa6940..8e01fb2 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, 2006, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -121,7 +121,7 @@ md_assemble (char *str) if (!insn.insn) { - as_bad (errmsg); + as_bad ("%s", errmsg); return; } @@ -318,58 +318,10 @@ md_number_to_chars (char * buf, valueT val, int n) number_to_chars_bigendian (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; + return ieee_md_atof (type, litP, sizeP, TRUE); } /* Worker function for fr30_is_colon_insn(). */ diff --git a/gas/config/tc-fr30.h b/gas/config/tc-fr30.h index 54f60db..9709cdd 100644 --- a/gas/config/tc-fr30.h +++ b/gas/config/tc-fr30.h @@ -1,5 +1,5 @@ /* tc-fr30.h -- Header file for tc-fr30.c. - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007 + Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -59,12 +59,8 @@ extern const struct relax_type md_relax_table[]; /* We need a special version of the TC_START_LABEL macro so that we allow the LDI:8, LDI:20, LDI:32 and delay slot instructions to be - parsed as such. Note - in a HORRIBLE HACK, we make use of the - knowledge that this marco is only ever evaluated in one place - (read_a_source_file in read.c) where we can access the local - variable 's' - the start of the symbol that was terminated by - 'character'. Also we need to be able to change the contents of + parsed as such. We need to be able to change the contents of the local variable 'c' which is passed to this macro as 'character'. */ -#define TC_START_LABEL(character, i_l_p) \ +#define TC_START_LABEL(character, s, i_l_p) \ ((character) != ':' ? 0 : (character = fr30_is_colon_insn (s)) ? 0 : ((character = ':'), 1)) extern char fr30_is_colon_insn (char *); diff --git a/gas/config/tc-frv.c b/gas/config/tc-frv.c index 5ef9971..e29810c 100644 --- a/gas/config/tc-frv.c +++ b/gas/config/tc-frv.c @@ -1,5 +1,5 @@ /* tc-frv.c -- Assembler for the Fujitsu FRV. - Copyright 2002, 2003, 2004, 2005, 2006, 2007 + Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation. Inc. This file is part of GAS, the GNU Assembler. @@ -28,6 +28,7 @@ #include "libbfd.h" #include "elf/common.h" #include "elf/frv.h" +#include "dwarf2dbg.h" /* Structure to hold all of the different components describing an individual instruction. */ @@ -187,9 +188,8 @@ static int tomcat_doubles = 0; static int tomcat_singles = 0; /* Forward reference to static functions */ -static void frv_set_flags PARAMS ((int)); -static void frv_pic_ptr PARAMS ((int)); -static void frv_frob_file_section PARAMS ((bfd *, asection *, PTR)); +static void frv_set_flags (int); +static void frv_pic_ptr (int); /* The target specific pseudo-ops which we support. */ const pseudo_typeS md_pseudo_table[] = @@ -263,9 +263,7 @@ size_t md_longopts_size = sizeof (md_longopts); static int g_switch_value = 8; int -md_parse_option (c, arg) - int c; - char * arg; +md_parse_option (int c, char *arg) { switch (c) { @@ -404,7 +402,7 @@ md_parse_option (c, arg) else { - as_fatal ("Unknown cpu -mcpu=%s", arg); + as_fatal (_("Unknown cpu -mcpu=%s"), arg); return 0; } @@ -455,37 +453,36 @@ md_parse_option (c, arg) } void -md_show_usage (stream) - FILE * stream; +md_show_usage (FILE * stream) { fprintf (stream, _("FRV specific command line options:\n")); - fprintf (stream, _("-G n Data >= n bytes is in small data area\n")); - fprintf (stream, _("-mgpr-32 Note 32 gprs are used\n")); - fprintf (stream, _("-mgpr-64 Note 64 gprs are used\n")); - fprintf (stream, _("-mfpr-32 Note 32 fprs are used\n")); - fprintf (stream, _("-mfpr-64 Note 64 fprs are used\n")); - fprintf (stream, _("-msoft-float Note software fp is used\n")); - fprintf (stream, _("-mdword Note stack is aligned to a 8 byte boundary\n")); - fprintf (stream, _("-mno-dword Note stack is aligned to a 4 byte boundary\n")); - fprintf (stream, _("-mdouble Note fp double insns are used\n")); - fprintf (stream, _("-mmedia Note media insns are used\n")); - fprintf (stream, _("-mmuladd Note multiply add/subtract insns are used\n")); - fprintf (stream, _("-mpack Note instructions are packed\n")); - fprintf (stream, _("-mno-pack Do not allow instructions to be packed\n")); - fprintf (stream, _("-mpic Note small position independent code\n")); - fprintf (stream, _("-mPIC Note large position independent code\n")); - fprintf (stream, _("-mlibrary-pic Compile library for large position indepedent code\n")); - fprintf (stream, _("-mfdpic Assemble for the FDPIC ABI\n")); - fprintf (stream, _("-mnopic Disable -mpic, -mPIC, -mlibrary-pic and -mfdpic\n")); + fprintf (stream, _("-G n Put data <= n bytes in the small data area\n")); + fprintf (stream, _("-mgpr-32 Mark generated file as only using 32 GPRs\n")); + fprintf (stream, _("-mgpr-64 Mark generated file as using all 64 GPRs\n")); + fprintf (stream, _("-mfpr-32 Mark generated file as only using 32 FPRs\n")); + fprintf (stream, _("-mfpr-64 Mark generated file as using all 64 FPRs\n")); + fprintf (stream, _("-msoft-float Mark generated file as using software FP\n")); + fprintf (stream, _("-mdword Mark generated file as using a 8-byte stack alignment\n")); + fprintf (stream, _("-mno-dword Mark generated file as using a 4-byte stack alignment\n")); + fprintf (stream, _("-mdouble Mark generated file as using double precision FP insns\n")); + fprintf (stream, _("-mmedia Mark generated file as using media insns\n")); + fprintf (stream, _("-mmuladd Mark generated file as using multiply add/subtract insns\n")); + fprintf (stream, _("-mpack Allow instructions to be packed\n")); + fprintf (stream, _("-mno-pack Do not allow instructions to be packed\n")); + fprintf (stream, _("-mpic Mark generated file as using small position independent code\n")); + fprintf (stream, _("-mPIC Mark generated file as using large position independent code\n")); + fprintf (stream, _("-mlibrary-pic Mark generated file as using position indepedent code for libraries\n")); + fprintf (stream, _("-mfdpic Assemble for the FDPIC ABI\n")); + fprintf (stream, _("-mnopic Disable -mpic, -mPIC, -mlibrary-pic and -mfdpic\n")); fprintf (stream, _("-mcpu={fr500|fr550|fr400|fr405|fr450|fr300|frv|simple|tomcat}\n")); - fprintf (stream, _(" Record the cpu type\n")); - fprintf (stream, _("-mtomcat-stats Print out stats for tomcat workarounds\n")); - fprintf (stream, _("-mtomcat-debug Debug tomcat workarounds\n")); + fprintf (stream, _(" Record the cpu type\n")); + fprintf (stream, _("-mtomcat-stats Print out stats for tomcat workarounds\n")); + fprintf (stream, _("-mtomcat-debug Debug tomcat workarounds\n")); } void -md_begin () +md_begin (void) { /* Initialize the `cgen' interface. */ @@ -520,11 +517,8 @@ frv_md_fdpic_enabled (void) int chain_num = 0; -struct vliw_insn_list *frv_insert_vliw_insn PARAMS ((bfd_boolean)); - -struct vliw_insn_list * -frv_insert_vliw_insn (count) - bfd_boolean count; +static struct vliw_insn_list * +frv_insert_vliw_insn (bfd_boolean count) { struct vliw_insn_list *vliw_insn_list_entry; struct vliw_chain *vliw_chain_entry; @@ -593,14 +587,10 @@ frv_insert_vliw_insn (count) /* Check a vliw insn for an insn of type containing the sym passed in label_sym. */ -static struct vliw_insn_list *frv_find_in_vliw - PARAMS ((enum vliw_insn_type, struct vliw_chain *, symbolS *)); - static struct vliw_insn_list * -frv_find_in_vliw (vliw_insn_type, this_chain, label_sym) - enum vliw_insn_type vliw_insn_type; - struct vliw_chain *this_chain; - symbolS *label_sym; +frv_find_in_vliw (enum vliw_insn_type vliw_insn_type, + struct vliw_chain *this_chain, + symbolS *label_sym) { struct vliw_insn_list *the_insn; @@ -631,11 +621,8 @@ enum vliw_nop_type VLIW_DOUBLE_THEN_SINGLE_NOP }; -static void frv_debug_tomcat PARAMS ((struct vliw_chain *)); - static void -frv_debug_tomcat (start_chain) - struct vliw_chain *start_chain; +frv_debug_tomcat (struct vliw_chain *start_chain) { struct vliw_chain *this_chain; struct vliw_insn_list *this_insn; @@ -661,11 +648,8 @@ frv_debug_tomcat (start_chain) } } -static void frv_adjust_vliw_count PARAMS ((struct vliw_chain *)); - static void -frv_adjust_vliw_count (this_chain) - struct vliw_chain *this_chain; +frv_adjust_vliw_count (struct vliw_chain *this_chain) { struct vliw_insn_list *this_insn; @@ -684,14 +668,10 @@ frv_adjust_vliw_count (this_chain) /* Insert the desired nop combination in the vliw chain before insert_before_insn. Rechain the vliw insn. */ -static struct vliw_chain *frv_tomcat_shuffle - PARAMS ((enum vliw_nop_type, struct vliw_chain *, struct vliw_insn_list *)); - static struct vliw_chain * -frv_tomcat_shuffle (this_nop_type, vliw_to_split, insert_before_insn) - enum vliw_nop_type this_nop_type; - struct vliw_chain *vliw_to_split; - struct vliw_insn_list *insert_before_insn; +frv_tomcat_shuffle (enum vliw_nop_type this_nop_type, + struct vliw_chain *vliw_to_split, + struct vliw_insn_list *insert_before_insn) { bfd_boolean pack_prev = FALSE; @@ -855,10 +835,8 @@ frv_tomcat_shuffle (this_nop_type, vliw_to_split, insert_before_insn) return return_me; } -static void frv_tomcat_analyze_vliw_chains PARAMS ((void)); - static void -frv_tomcat_analyze_vliw_chains () +frv_tomcat_analyze_vliw_chains (void) { struct vliw_chain *vliw1 = NULL; struct vliw_chain *vliw2 = NULL; @@ -975,7 +953,7 @@ workaround_top: } void -frv_tomcat_workaround () +frv_tomcat_workaround (void) { if (frv_mach != bfd_mach_frvtomcat) return; @@ -1110,8 +1088,7 @@ target_implements_insn_p (const CGEN_INSN *insn) } void -md_assemble (str) - char * str; +md_assemble (char *str) { frv_insn insn; char *errmsg; @@ -1131,7 +1108,7 @@ md_assemble (str) if (!insn.insn) { - as_bad (errmsg); + as_bad ("%s", errmsg); return; } @@ -1240,8 +1217,7 @@ md_assemble (str) We just ignore it. */ void -md_operand (expressionP) - expressionS * expressionP; +md_operand (expressionS *expressionP) { if (* input_line_pointer == '#') { @@ -1251,17 +1227,14 @@ md_operand (expressionP) } valueT -md_section_align (segment, size) - segT segment; - valueT size; +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 (name) - char * name ATTRIBUTE_UNUSED; +md_undefined_symbol (char *name ATTRIBUTE_UNUSED) { return 0; } @@ -1278,9 +1251,7 @@ const relax_typeS md_relax_table[] = }; long -frv_relax_frag (fragP, stretch) - fragS *fragP ATTRIBUTE_UNUSED; - long stretch ATTRIBUTE_UNUSED; +frv_relax_frag (fragS *fragP ATTRIBUTE_UNUSED, long stretch ATTRIBUTE_UNUSED) { return 0; } @@ -1297,9 +1268,7 @@ frv_relax_frag (fragP, stretch) 0 value. */ int -md_estimate_size_before_relax (fragP, segment) - fragS * fragP; - segT segment ATTRIBUTE_UNUSED; +md_estimate_size_before_relax (fragS *fragP, segT segment ATTRIBUTE_UNUSED) { switch (fragP->fr_subtype) { @@ -1320,10 +1289,9 @@ md_estimate_size_before_relax (fragP, segment) fragP->fr_subtype is the subtype of what the address relaxed to. */ void -md_convert_frag (abfd, sec, fragP) - bfd * abfd ATTRIBUTE_UNUSED; - segT sec ATTRIBUTE_UNUSED; - fragS * fragP; +md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, + segT sec ATTRIBUTE_UNUSED, + fragS *fragP) { switch (fragP->fr_subtype) { @@ -1344,9 +1312,7 @@ md_convert_frag (abfd, sec, fragP) given a PC relative reloc. */ long -md_pcrel_from_section (fixP, sec) - fixS * fixP; - segT sec; +md_pcrel_from_section (fixS *fixP, segT sec) { if (TC_FORCE_RELOCATION (fixP) || (fixP->fx_addsy != (symbolS *) NULL @@ -1367,10 +1333,9 @@ md_pcrel_from_section (fixP, sec) *FIXP may be modified if desired. */ bfd_reloc_code_real_type -md_cgen_lookup_reloc (insn, operand, fixP) - const CGEN_INSN * insn ATTRIBUTE_UNUSED; - const CGEN_OPERAND * operand; - fixS * fixP; +md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED, + const CGEN_OPERAND *operand, + fixS *fixP) { switch (operand->type) { @@ -1419,8 +1384,7 @@ md_cgen_lookup_reloc (insn, operand, fixP) relaxing. */ int -frv_force_relocation (fix) - fixS * fix; +frv_force_relocation (fixS *fix) { switch (fix->fx_r_type < BFD_RELOC_UNUSED ? (int) fix->fx_r_type @@ -1468,10 +1432,7 @@ frv_force_relocation (fix) /* Apply a fixup that could be resolved within the assembler. */ void -md_apply_fix (fixP, valP, seg) - fixS * fixP; - valueT * valP; - segT seg; +md_apply_fix (fixS *fixP, valueT *valP, segT seg) { if (fixP->fx_addsy == 0) switch (fixP->fx_cgen.opinfo) @@ -1515,7 +1476,7 @@ md_apply_fix (fixP, valP, seg) case BFD_RELOC_FRV_TLSDESC_RELAX: case BFD_RELOC_FRV_GETTLSOFF_RELAX: case BFD_RELOC_FRV_TLSOFF_RELAX: - fixP->fx_addsy = expr_build_uconstant (0); + fixP->fx_addsy = abs_section_sym; break; } else @@ -1550,74 +1511,19 @@ md_apply_fix (fixP, valP, seg) /* Write a value out to the object file, using the appropriate endianness. */ void -frv_md_number_to_chars (buf, val, n) - char * buf; - valueT val; - int n; +frv_md_number_to_chars (char *buf, valueT val, int n) { number_to_chars_bigendian (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 (type, litP, sizeP) - char type; - char * litP; - int * sizeP; +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; + return ieee_md_atof (type, litP, sizeP, TRUE); } bfd_boolean -frv_fix_adjustable (fixP) - fixS * fixP; +frv_fix_adjustable (fixS *fixP) { bfd_reloc_code_real_type reloc_type; @@ -1643,8 +1549,7 @@ frv_fix_adjustable (fixP) /* Allow user to set flags bits. */ void -frv_set_flags (arg) - int arg ATTRIBUTE_UNUSED; +frv_set_flags (int arg ATTRIBUTE_UNUSED) { flagword new_flags = get_absolute_expression (); flagword new_mask = ~ (flagword)0; @@ -1666,8 +1571,7 @@ frv_set_flags (arg) BFD_RELOC_32 at that time. */ void -frv_pic_ptr (nbytes) - int nbytes; +frv_pic_ptr (int nbytes) { expressionS exp; char *p; @@ -1700,7 +1604,7 @@ frv_pic_ptr (nbytes) if (*input_line_pointer == ')') input_line_pointer++; else - as_bad ("missing ')'"); + as_bad (_("missing ')'")); reloc_type = BFD_RELOC_FRV_FUNCDESC; } else if (strncasecmp (input_line_pointer, "tlsmoff(", 8) == 0) @@ -1710,7 +1614,7 @@ frv_pic_ptr (nbytes) if (*input_line_pointer == ')') input_line_pointer++; else - as_bad ("missing ')'"); + as_bad (_("missing ')'")); reloc_type = BFD_RELOC_FRV_TLSMOFF; } else @@ -1746,10 +1650,7 @@ frv_pic_ptr (nbytes) not possible, issue an error. */ static void -frv_frob_file_section (abfd, sec, ptr) - bfd *abfd; - asection *sec; - PTR ptr ATTRIBUTE_UNUSED; +frv_frob_file_section (bfd *abfd, asection *sec, void *ptr ATTRIBUTE_UNUSED) { segment_info_type *seginfo = seg_info (sec); fixS *fixp; @@ -1891,17 +1792,17 @@ frv_frob_file_section (abfd, sec, ptr) for any relocations that pic won't support. */ void -frv_frob_file () +frv_frob_file (void) { - bfd_map_over_sections (stdoutput, frv_frob_file_section, (PTR)0); + bfd_map_over_sections (stdoutput, frv_frob_file_section, (void *) 0); } void -frv_frob_label (this_label) - symbolS *this_label; +frv_frob_label (symbolS *this_label) { struct vliw_insn_list *vliw_insn_list_entry; + dwarf2_emit_label (this_label); if (frv_mach != bfd_mach_frvtomcat) return; @@ -1914,14 +1815,13 @@ frv_frob_label (this_label) } fixS * -frv_cgen_record_fixup_exp (frag, where, insn, length, operand, opinfo, exp) - fragS * frag; - int where; - const CGEN_INSN * insn; - int length; - const CGEN_OPERAND * operand; - int opinfo; - expressionS * exp; +frv_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); diff --git a/gas/config/tc-frv.h b/gas/config/tc-frv.h index 9718a3b..c29210e 100644 --- a/gas/config/tc-frv.h +++ b/gas/config/tc-frv.h @@ -1,5 +1,6 @@ /* tc-frv.h -- Header file for tc-frv.c. - Copyright 2002, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright 2002, 2004, 2005, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -42,31 +43,32 @@ extern bfd_boolean frv_md_fdpic_enabled (void); /* Values passed to md_apply_fix don't include the symbol value. */ #define MD_APPLY_SYM_VALUE(FIX) 0 -extern void frv_tomcat_workaround PARAMS ((void)); +extern void frv_tomcat_workaround (void); #define md_cleanup frv_tomcat_workaround #define md_number_to_chars frv_md_number_to_chars +extern void frv_md_number_to_chars (char *, valueT, int); -extern long frv_relax_frag PARAMS ((fragS *, long)); +extern long frv_relax_frag (fragS *, long); #define md_relax_frag(segment, fragP, stretch) frv_relax_frag(fragP, stretch) #define tc_fix_adjustable(FIX) frv_fix_adjustable (FIX) struct fix; -extern bfd_boolean frv_fix_adjustable PARAMS ((struct fix *)); +extern bfd_boolean frv_fix_adjustable (struct fix *); /* When relaxing, we need to emit various relocs we otherwise wouldn't. */ #define TC_FORCE_RELOCATION(fix) frv_force_relocation (fix) -extern int frv_force_relocation PARAMS ((struct fix *)); +extern int frv_force_relocation (struct fix *); /* If we simplify subtractions that aren't SUB_SAME or SUB_ABS, we end up with PCrel fixups, but since we don't have any PCrel relocs, we crash. Preventing simplification gets us a good, early error. */ -#define TC_FORCE_RELOCATION_SUB_LOCAL(fixP) 1 +#define TC_FORCE_RELOCATION_SUB_LOCAL(FIX, SEG) 1 #undef GAS_CGEN_MAX_FIXUPS #define GAS_CGEN_MAX_FIXUPS 1 -void frv_frob_label PARAMS ((symbolS *)); +void frv_frob_label (symbolS *); #define tc_frob_label(sym) frv_frob_label(sym) #define tc_gen_reloc gas_cgen_tc_gen_reloc @@ -75,12 +77,12 @@ void frv_frob_label PARAMS ((symbolS *)); /* 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); /* After all of the symbols have been adjusted, go over the file looking for any relocations that pic won't support. */ #define tc_frob_file() frv_frob_file () -extern void frv_frob_file PARAMS ((void)); +extern void frv_frob_file (void); /* We don't want 0x00 for code alignment because this generates `add.p gr0, gr0, gr0' patterns. Although it's fine as a nop instruction, diff --git a/gas/config/tc-generic.c b/gas/config/tc-generic.c index 9ac2f24..258878a 100644 --- a/gas/config/tc-generic.c +++ b/gas/config/tc-generic.c @@ -1,6 +1,6 @@ /* This file is tc-generic.c - Copyright 2004, 2007 Free Software Foundation, Inc. + Copyright 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config/tc-generic.h b/gas/config/tc-generic.h index a748e25..bbaa359 100644 --- a/gas/config/tc-generic.h +++ b/gas/config/tc-generic.h @@ -1,6 +1,7 @@ /* This file is tc-generic.h - Copyright 1987, 1991, 1992, 1995, 1997, 2007 Free Software Foundation, Inc. + Copyright 1987, 1991, 1992, 1995, 1997, 2005, 2007 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. diff --git a/gas/config/tc-h8300.c b/gas/config/tc-h8300.c index 57768d9..92c0d57 100644 --- a/gas/config/tc-h8300.c +++ b/gas/config/tc-h8300.c @@ -1,6 +1,7 @@ /* 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, 2006, 2007 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -299,7 +300,7 @@ struct h8_op static void clever_message (const struct h8_instruction *, struct h8_op *); static void fix_operand_size (struct h8_op *, int); static void build_bytes (const struct h8_instruction *, struct h8_op *); -static void do_a_fix_imm (int, int, struct h8_op *, int); +static void do_a_fix_imm (int, int, struct h8_op *, int, const struct h8_instruction *); static void check_operand (struct h8_op *, unsigned int, char *); static const struct h8_instruction * get_specific (const struct h8_instruction *, struct h8_op *, int) ; static char *get_operands (unsigned, char *, struct h8_op *); @@ -623,7 +624,7 @@ get_operand (char **ptr, struct h8_op *op, int direction) op->mode = (op->mode & ~SIZE) | L_8; break; default: - as_warn ("invalid suffix after register."); + as_warn (_("invalid suffix after register.")); break; } src += 2; @@ -1273,7 +1274,7 @@ check_operand (struct h8_op *operand, unsigned int width, char *string) (may relax into an 8bit absolute address). */ static void -do_a_fix_imm (int offset, int nibble, struct h8_op *operand, int relaxmode) +do_a_fix_imm (int offset, int nibble, struct h8_op *operand, int relaxmode, const struct h8_instruction *this_try) { int idx; int size; @@ -1313,6 +1314,17 @@ do_a_fix_imm (int offset, int nibble, struct h8_op *operand, int relaxmode) check_operand (operand, 0xffff, t); bytes[0] |= operand->exp.X_add_number >> 8; bytes[1] |= operand->exp.X_add_number >> 0; +#ifdef OBJ_ELF + /* MOVA needs both relocs to relax the second operand properly. */ + if (relaxmode != 0 + && (OP_KIND(this_try->opcode->how) == O_MOVAB + || OP_KIND(this_try->opcode->how) == O_MOVAW + || OP_KIND(this_try->opcode->how) == O_MOVAL)) + { + idx = BFD_RELOC_16; + fix_new_exp (frag_now, offset, 2, &operand->exp, 0, idx); + } +#endif break; case L_24: check_operand (operand, 0xffffff, t); @@ -1576,12 +1588,14 @@ build_bytes (const struct h8_instruction *this_try, struct h8_op *operand) if (x_mode == IMM || x_mode == DISP) do_a_fix_imm (output - frag_now->fr_literal + op_at[i] / 2, - op_at[i] & 1, operand + i, (x & MEMRELAX) != 0); + op_at[i] & 1, operand + i, (x & MEMRELAX) != 0, + this_try); else if (x_mode == ABS) do_a_fix_imm (output - frag_now->fr_literal + op_at[i] / 2, op_at[i] & 1, operand + i, - (x & MEMRELAX) ? movb + 1 : 0); + (x & MEMRELAX) ? movb + 1 : 0, + this_try); else if (x_mode == PCREL) { @@ -1815,7 +1829,12 @@ fix_operand_size (struct h8_op *operand, int size) /* This condition is long standing, though somewhat suspect. */ if (operand->exp.X_add_number > -128 && operand->exp.X_add_number < 127) - operand->mode |= L_8; + { + if (operand->exp.X_add_symbol != NULL) + operand->mode |= bsize; + else + operand->mode |= L_8; + } else operand->mode |= L_16; break; @@ -2005,68 +2024,19 @@ md_undefined_symbol (char *name ATTRIBUTE_UNUSED) return 0; } -/* Various routines to kill one day */ -/* Equal to MAX_PRECISION in atof-ieee.c */ -#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. */ +/* Various routines to kill one day. */ 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; + return ieee_md_atof (type, litP, sizeP, TRUE); } +#define OPTION_H_TICK_HEX (OPTION_MD_BASE) + const char *md_shortopts = ""; struct option md_longopts[] = { + { "h-tick-hex", no_argument, NULL, OPTION_H_TICK_HEX }, {NULL, no_argument, NULL, 0} }; @@ -2075,7 +2045,16 @@ size_t md_longopts_size = sizeof (md_longopts); int md_parse_option (int c ATTRIBUTE_UNUSED, char *arg ATTRIBUTE_UNUSED) { - return 0; + switch (c) + { + case OPTION_H_TICK_HEX: + enable_h_tick_hex = 1; + break; + + default: + return 0; + } + return 1; } void @@ -2129,6 +2108,13 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) *buf++ = (val >> 8); *buf++ = val; break; + case 8: + /* This can arise when the .quad or .8byte pseudo-ops are used. + Returning here (without setting fx_done) will cause the code + to attempt to generate a reloc which will then fail with the + slightly more helpful error message: "Cannot represent + relocation type BFD_RELOC_64". */ + return; default: abort (); } @@ -2138,10 +2124,10 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) } int -md_estimate_size_before_relax (register fragS *fragP ATTRIBUTE_UNUSED, - register segT segment_type ATTRIBUTE_UNUSED) +md_estimate_size_before_relax (fragS *fragP ATTRIBUTE_UNUSED, + segT segment_type ATTRIBUTE_UNUSED) { - printf (_("call tomd_estimate_size_before_relax \n")); + printf (_("call to md_estimate_size_before_relax \n")); abort (); } @@ -2170,13 +2156,13 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp) || S_GET_SEGMENT (fixp->fx_addsy) == undefined_section) { as_bad_where (fixp->fx_file, fixp->fx_line, - "Difference of symbols in different sections is not supported"); + _("Difference of symbols in different sections is not supported")); return NULL; } } - rel = (arelent *) xmalloc (sizeof (arelent)); - rel->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *)); + rel = xmalloc (sizeof (arelent)); + rel->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); *rel->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); rel->address = fixp->fx_frag->fr_address + fixp->fx_where; rel->addend = fixp->fx_offset; @@ -2186,7 +2172,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp) #define DEBUG 0 #if DEBUG fprintf (stderr, "%s\n", bfd_get_reloc_code_name (r_type)); - fflush(stderr); + fflush (stderr); #endif rel->howto = bfd_reloc_type_lookup (stdoutput, r_type); if (rel->howto == NULL) diff --git a/gas/config/tc-h8300.h b/gas/config/tc-h8300.h index 58849a2..73d4840 100644 --- a/gas/config/tc-h8300.h +++ b/gas/config/tc-h8300.h @@ -1,6 +1,6 @@ /* This file is tc-h8300.h Copyright 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007 + 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -89,3 +89,5 @@ extern int SXmode; /* This target is buggy, and sets fix size too large. */ #define TC_FX_SIZE_SLACK(FIX) 1 + +#define H_TICK_HEX 1 diff --git a/gas/config/tc-hppa.c b/gas/config/tc-hppa.c index 05c7f12..371f9f0 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, 2006, 2007 Free Software Foundation, Inc. + Copyright 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, + 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -583,8 +583,8 @@ const char EXP_CHARS[] = "eE"; As in 0f12.456 or 0d1.2345e12. Be aware that MAXIMUM_NUMBER_OF_CHARS_FOR_FLOAT may have to be - changed in read.c. Ideally it shouldn't hae to know abou it at - all, but nothing is ideal around here. */ + changed in read.c. Ideally it shouldn't have to know about it + at all, but nothing is ideal around here. */ const char FLT_CHARS[] = "rRsSfFdDxXpP"; static struct pa_it the_insn; @@ -948,8 +948,8 @@ static const struct selector_entry selector_table[] = #ifdef OBJ_SOM /* default space and subspace dictionaries */ -#define GDB_SYMBOLS GDB_SYMBOLS_SUBSPACE_NAME -#define GDB_STRINGS GDB_STRINGS_SUBSPACE_NAME +#define GDB_SYMBOLS GDB_SYMBOLS_SUBSPACE_NAME +#define GDB_STRINGS GDB_STRINGS_SUBSPACE_NAME /* pre-defined subsegments (subspaces) for the HPPA. */ #define SUBSEG_CODE 0 @@ -995,6 +995,19 @@ static struct default_space_dict pa_def_spaces[] = #define IS_R_SELECT(S) (*(S) == 'R' || *(S) == 'r') #define IS_L_SELECT(S) (*(S) == 'L' || *(S) == 'l') +/* Store immediate values of shift/deposit/extract functions. */ + +#define SAVE_IMMEDIATE(VALUE) \ + { \ + if (immediate_check) \ + { \ + if (pos == -1) \ + pos = (VALUE); \ + else if (len == -1) \ + len = (VALUE); \ + } \ + } + /* Insert FIELD into OPCODE starting at bit START. Continue pa_ip main loop after insertion. */ @@ -1012,9 +1025,9 @@ static struct default_space_dict pa_def_spaces[] = if ((FIELD) > (HIGH) || (FIELD) < (LOW)) \ { \ if (! IGNORE) \ - as_bad (_("Field out of range [%d..%d] (%d)."), (LOW), (HIGH), \ + as_bad (_("Field out of range [%d..%d] (%d)."), (LOW), (HIGH), \ (int) (FIELD));\ - break; \ + break; \ } \ } @@ -1025,10 +1038,10 @@ static struct default_space_dict pa_def_spaces[] = { \ if ((FIELD) > (HIGH) || (FIELD) < (LOW)) \ { \ - as_bad_where ((FILENAME), (LINE), \ + as_bad_where ((FILENAME), (LINE), \ _("Field out of range [%d..%d] (%d)."), (LOW), (HIGH), \ (int) (FIELD));\ - break; \ + break; \ } \ } @@ -1040,9 +1053,9 @@ static struct default_space_dict pa_def_spaces[] = if ((FIELD) & ((ALIGN) - 1)) \ { \ if (! IGNORE) \ - as_bad (_("Field not properly aligned [%d] (%d)."), (ALIGN), \ + as_bad (_("Field not properly aligned [%d] (%d)."), (ALIGN), \ (int) (FIELD));\ - break; \ + break; \ } \ } @@ -1050,6 +1063,10 @@ static struct default_space_dict pa_def_spaces[] = ((exp).X_op == O_subtract \ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$global$") == 0) +#define is_SB_relative(exp) \ + ((exp).X_op == O_subtract \ + && strcmp (S_GET_NAME ((exp).X_op_symbol), "$segrel$") == 0) + #define is_PC_relative(exp) \ ((exp).X_op == O_subtract \ && strcmp (S_GET_NAME ((exp).X_op_symbol), "$PIC_pcrel$0") == 0) @@ -1233,6 +1250,7 @@ fix_new_hppa (fragS *frag, 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), "$segrel$") == 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 @@ -1256,6 +1274,8 @@ cons_fix_new_hppa (fragS *frag, int where, int size, expressionS *exp) else if (is_PC_relative (*exp)) rel_type = R_HPPA_PCREL_CALL; #ifdef OBJ_ELF + else if (is_SB_relative (*exp)) + rel_type = R_PARISC_SEGREL32; else if (is_tls_gdidx (*exp)) rel_type = R_PARISC_TLS_GD21L; else if (is_tls_ldidx (*exp)) @@ -1335,61 +1355,10 @@ pa_parse_nullif (char **s) 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; + return ieee_md_atof (type, litP, sizeP, TRUE); } /* Write out big-endian. */ @@ -1419,13 +1388,25 @@ tc_gen_reloc (asection *section, fixS *fixp) if (fixp->fx_addsy == 0) return &no_relocs; - assert (hppa_fixp != 0); - assert (section != 0); + gas_assert (hppa_fixp != 0); + gas_assert (section != 0); reloc = xmalloc (sizeof (arelent)); reloc->sym_ptr_ptr = xmalloc (sizeof (asymbol *)); *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy); + + /* Allow fixup_segment to recognize hand-written pc-relative relocations. + When we went through cons_fix_new_hppa, we classified them as complex. */ + /* ??? It might be better to hide this +8 stuff in tc_cfi_emit_pcrel_expr, + undefine DIFF_EXPR_OK, and let these sorts of complex expressions fail + when R_HPPA_COMPLEX == R_PARISC_UNIMPLEMENTED. */ + if (fixp->fx_r_type == R_HPPA_COMPLEX && fixp->fx_pcrel) + { + fixp->fx_r_type = R_HPPA_PCREL_CALL; + fixp->fx_offset += 8; + } + codes = hppa_gen_reloc_type (stdoutput, fixp->fx_r_type, hppa_fixp->fx_r_format, @@ -1453,7 +1434,7 @@ tc_gen_reloc (asection *section, fixS *fixp) switch (fixp->fx_r_type) { default: - assert (n_relocs == 1); + gas_assert (n_relocs == 1); code = *codes[0]; @@ -1507,7 +1488,7 @@ tc_gen_reloc (asection *section, fixS *fixp) (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); + gas_assert (reloc->howto && (unsigned int) code == reloc->howto->type); break; } #else /* OBJ_SOM */ @@ -1530,7 +1511,7 @@ tc_gen_reloc (asection *section, fixS *fixp) /* 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); + gas_assert (i == 1); relocs[0]->sym_ptr_ptr = (asymbol **) bfd_abs_section_ptr->symbol_ptr_ptr; relocs[0]->howto @@ -1997,7 +1978,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED) case R_PARISC_TLS_LE14R: case R_PARISC_TLS_IE21L: case R_PARISC_TLS_IE14R: - if (fixP->fx_addsy) + if (fixP->fx_addsy) S_SET_THREAD_LOCAL (fixP->fx_addsy); break; default: @@ -2150,8 +2131,8 @@ pa_parse_number (char **s, int is_float) 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. */ + code makes a binary search with case translation, and is VERY + slow. */ if (c == 'r') { p++; @@ -2206,7 +2187,7 @@ pa_parse_number (char **s, int is_float) else { /* And finally, it could be a symbol in the absolute section which - is effectively a constant, or a register alias symbol. */ + is effectively a constant, or a register alias symbol. */ name = p; c = *p; while (is_part_of_name (c)) @@ -2717,7 +2698,7 @@ pa_parse_nonneg_cmpsub_cmpltr (char **s) cmpltr = 7; } /* If we have something like addb,n then there is no condition - completer. */ + completer. */ else if (strcasecmp (name, "n") == 0) { cmpltr = 0; @@ -2791,7 +2772,7 @@ pa_parse_neg_cmpsub_cmpltr (char **s) cmpltr = 7; } /* If we have something like addb,n then there is no condition - completer. */ + completer. */ else if (strcasecmp (name, "n") == 0) { cmpltr = 0; @@ -3017,7 +2998,7 @@ pa_parse_nonneg_add_cmpltr (char **s) cmpltr = 7; } /* If we have something like addb,n then there is no condition - completer. */ + completer. */ else if (strcasecmp (name, "n") == 0) { cmpltr = 0; @@ -3090,7 +3071,7 @@ pa_parse_neg_add_cmpltr (char **s) cmpltr = 7; } /* If we have something like addb,n then there is no condition - completer. */ + completer. */ else if (strcasecmp (name, "n") == 0) { cmpltr = 0; @@ -3191,7 +3172,7 @@ pa_parse_addb_64_cmpltr (char **s) cmpltr = 15; } /* If we have something like addb,n then there is no condition - completer. */ + completer. */ else if (strcasecmp (name, "n") == 0) { cmpltr = 0; @@ -3223,6 +3204,7 @@ pa_ip (char *str) int match = FALSE; int comma = 0; int cmpltr, nullif, flag, cond, num; + int immediate_check = 0, pos = -1, len = -1; unsigned long opcode; struct pa_opcode *insn; @@ -3262,10 +3244,10 @@ pa_ip (char *str) return; } - /* Look up the opcode in the has table. */ + /* Look up the opcode in the hash table. */ if ((insn = (struct pa_opcode *) hash_find (op_hash, str)) == NULL) { - as_bad ("Unknown opcode: `%s'", str); + as_bad (_("Unknown opcode: `%s'"), str); return; } @@ -3289,7 +3271,7 @@ pa_ip (char *str) goto failed; /* Build the opcode, checking as we go to make - sure that the operands match. */ + sure that the operands match. */ for (args = insn->args;; ++args) { /* Absorb white space in instruction. */ @@ -3340,12 +3322,12 @@ pa_ip (char *str) s = s + 1; if (!strncasecmp (s, "%sar", 4)) - { + { s += 4; continue; } else if (!strncasecmp (s, "%cr11", 5)) - { + { s += 5; continue; } @@ -3383,6 +3365,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 32, 1, 0); + SAVE_IMMEDIATE(num); INSERT_FIELD_AND_CONTINUE (opcode, 32 - num, 0); /* Handle a 5 bit immediate at 15. */ @@ -3549,7 +3532,7 @@ pa_ip (char *str) } else if (*args == 'J') { - /* M bit is explicit in the major opcode. */ + /* M bit is explicit in the major opcode. */ INSERT_FIELD_AND_CONTINUE (opcode, a, 2); } else if (*args == 'e') @@ -3941,7 +3924,7 @@ pa_ip (char *str) permloc[2] = 8; permloc[3] = 6; for (; i < 4; i++) - { + { switch (*s++) { case '0': @@ -4365,6 +4348,9 @@ pa_ip (char *str) case 'x': case 'y': cmpltr = 0; + /* Check immediate values in shift/extract/deposit + * instructions if they will give undefined behaviour. */ + immediate_check = 1; if (*s == ',') { save_s = s++; @@ -5116,7 +5102,7 @@ pa_ip (char *str) continue; } else - break; + break; /* Handle '%sr0,%r31' implicit operand of be,l instruction. */ case 'Y': @@ -5157,6 +5143,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 31, 0, strict); + SAVE_IMMEDIATE(num); INSERT_FIELD_AND_CONTINUE (opcode, 31 - num, 5); /* Handle a 6 bit shift count at 20,22:26. */ @@ -5166,6 +5153,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 63, 0, strict); + SAVE_IMMEDIATE(num); num = 63 - num; opcode |= (num & 0x20) << 6; INSERT_FIELD_AND_CONTINUE (opcode, num & 0x1f, 5); @@ -5178,6 +5166,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 64, 1, strict); + SAVE_IMMEDIATE(num); num--; opcode |= (num & 0x20) << 3; num = 31 - (num & 0x1f); @@ -5190,6 +5179,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 64, 1, strict); + SAVE_IMMEDIATE(num); num--; opcode |= (num & 0x20) << 7; num = 31 - (num & 0x1f); @@ -5202,6 +5192,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 31, 0, strict); + SAVE_IMMEDIATE(num); INSERT_FIELD_AND_CONTINUE (opcode, num, 5); /* Handle a 6 bit bit position at 20,22:26. */ @@ -5211,6 +5202,7 @@ pa_ip (char *str) break; s = expr_end; CHECK_FIELD (num, 63, 0, strict); + SAVE_IMMEDIATE(num); opcode |= (num & 0x20) << 6; INSERT_FIELD_AND_CONTINUE (opcode, num & 0x1f, 5); @@ -5453,7 +5445,7 @@ pa_ip (char *str) /* Handle all floating point registers. */ case 'f': switch (*++args) - { + { /* Float target register. */ case 't': if (!pa_parse_number (&s, 3)) @@ -5581,13 +5573,13 @@ pa_ip (char *str) CHECK_FIELD (num, 31, 0, 0); if (the_insn.fpof1 == SGL) { - if (num < 16) - { + if (num < 16) + { as_bad (_("Invalid register for single precision fmpyadd or fmpysub")); break; - } - num &= 0xF; - num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); + } + num &= 0xF; + num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); } INSERT_FIELD_AND_CONTINUE (opcode, num, 16); } @@ -5601,13 +5593,13 @@ pa_ip (char *str) CHECK_FIELD (num, 31, 0, 0); if (the_insn.fpof1 == SGL) { - if (num < 16) - { + if (num < 16) + { as_bad (_("Invalid register for single precision fmpyadd or fmpysub")); break; - } - num &= 0xF; - num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); + } + num &= 0xF; + num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); } INSERT_FIELD_AND_CONTINUE (opcode, num, 0); } @@ -5621,13 +5613,13 @@ pa_ip (char *str) CHECK_FIELD (num, 31, 0, 0); if (the_insn.fpof1 == SGL) { - if (num < 16) - { + if (num < 16) + { as_bad (_("Invalid register for single precision fmpyadd or fmpysub")); break; - } - num &= 0xF; - num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); + } + num &= 0xF; + num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); } INSERT_FIELD_AND_CONTINUE (opcode, num, 6); } @@ -5641,13 +5633,13 @@ pa_ip (char *str) CHECK_FIELD (num, 31, 0, 0); if (the_insn.fpof1 == SGL) { - if (num < 16) - { + if (num < 16) + { as_bad (_("Invalid register for single precision fmpyadd or fmpysub")); break; - } - num &= 0xF; - num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); + } + num &= 0xF; + num |= (pa_number & FP_REG_RSEL ? 1 << 4 : 0); } INSERT_FIELD_AND_CONTINUE (opcode, num, 11); } @@ -5718,6 +5710,13 @@ pa_ip (char *str) break; } + if (immediate_check) + { + if (pos != -1 && len != -1 && pos < len - 1) + as_warn (_("Immediates %d and %d will give undefined behavior."), + pos, len); + } + the_insn.opcode = opcode; } @@ -5729,7 +5728,7 @@ md_assemble (char *str) char *to; /* The had better be something to assemble. */ - assert (str); + gas_assert (str); /* If we are within a procedure definition, make sure we've defined a label for the procedure; handle case where the @@ -5949,24 +5948,6 @@ pa_call (int unused ATTRIBUTE_UNUSED) demand_empty_rest_of_line (); } -/* Return TRUE if FRAG1 and FRAG2 are the same. */ - -static bfd_boolean -is_same_frag (fragS *frag1, fragS *frag2) -{ - - if (frag1 == NULL) - return FALSE; - else if (frag2 == NULL) - return FALSE; - else if (frag1 == frag2) - return TRUE; - else if (frag2->fr_type == rs_fill && frag2->fr_fix == 0) - return (is_same_frag (frag1, frag2->fr_next)); - else - return FALSE; -} - #ifdef OBJ_ELF /* Build an entry in the UNWIND subspace from the given function attributes in CALL_INFO. This is not needed for SOM as using @@ -6148,7 +6129,7 @@ pa_callinfo (int unused ATTRIBUTE_UNUSED) last_call_info->ci_unwind.descriptor.save_sp = 1; } /* Is this an unwindable procedure. If so mark it so - in the unwind descriptor. */ + in the unwind descriptor. */ else if ((strncasecmp (name, "no_unwind", 9) == 0)) { p = input_line_pointer; @@ -6156,7 +6137,7 @@ pa_callinfo (int unused ATTRIBUTE_UNUSED) last_call_info->ci_unwind.descriptor.cannot_unwind = 1; } /* Is this an interrupt routine. If so mark it in the - unwind descriptor. */ + unwind descriptor. */ else if ((strncasecmp (name, "hpux_int", 7) == 0)) { p = input_line_pointer; @@ -6217,7 +6198,7 @@ pa_data (int unused ATTRIBUTE_UNUSED) } /* This is different than the standard GAS s_comm(). On HP9000/800 machines, - the .comm pseudo-op has the following symtax: + the .comm pseudo-op has the following syntax:

NB-8kw5dRo(Cd6Y^DfPei#=2|=ktSaNE`JwbbBO^ zQrRf$=1SPRcxA89mVbB@O|3V)Ohq054o8pDFtkdZK8kAevq#Zwyts>Mr${hp42uM| znz;n4YtUp#9)>=AxQouu9PFZ>(X2pU0(c7Csf5HRu3+~YQj^rDgt`af+-X&)biIf3 zTH=|;|E4K44*cR06aYD>Dp8ABxesh$7)9*paBuD;zWqIVVCGqDRm^aWaa9n5BI9;G zHr#r4D6snc)a_I<9ic8XW)gk7hLz0=YA?Z4BB>Ezo*B1%Kvlf<1KJ~=e>q?FA&oDI#}+NGSvJ2miYwsu59yYoY{p_b zN~JR#HdgiqUJZIAMV+{+yi7RgkAO%xs4TzyA^p-?VEA5QW5KjGm|He~F~GDih?Z`_ z0~pK(iXxTC76_f1G_lyZ9(JV4dRlx`^YA5Nz{79DYDjWIqDOrJuml`8fr@yqiEKYi zql(R*1_OvN^Ri>Kc(ijgm%9Xv1oRq4Etj$lA3p|T^7CV~VNlOTW&r}XWCs2YD7MUy z-%}|~1;qt`BK-uyc`BHY03nqf)4ANZ%F8~Ysy^}xe&6#EeL5g5OEFo8X1?=dnsSK- zK`vx=zK19(%W~GZDX&9c;yhSITUYU8AJc&XEzdV>NTedd{sC)jMQ2Fy!$S4U zdCNjg;0wR|3GK}XNgBBJ4>Ya=9By(wAhV>u#7Pluu^YT%!NjWAiZ&c*Aw6;De6kf! zM&(5{gg}>}Vy(pz1KcPr6pB|CxN<)JXyyO;1Ar5^eM7hRp>_Z^QKC zv{!=I*ZA|_P{sJHPnpC-mRJfe@{1?n>3s1%^&dJRZIT*FP*b%NTXGKM2q3E zKhkL~JV9&uvJ-$-04Xz}I_nz}L}z^g!e0Lc=XsA>yP51hgn@3+BcFYMR1;4KZ5E)$cKZ;FV^BXif2xr=boEPLBP4UYRs) zVP9nZt@yUo8^8pZhb{R)KdV(WbJi^m@8C(<9Bs1;2FX_R;lpMaOiB{gbvP~qNkMc0 z|M@hviQr?y)U+WVDBFvT25kWF!M_nyi(``hQV}q+6blL!NK*7FVn!05P9%VrM{eqz zZ`DbYX7Ic`j$jbg5L`vuoFwx>HWR~{5YFm(RWeR3Ymzu?5z2OGu3WK)@}>V2ra*h% zyPIRYa1UJ7$NGAGNPm~*0UpkS&Ok@xpP>f|R->a8NMqi4hCUe`(dohsM)QU!SKj^w zZQ>O>sdQ)pq{g11)lX&7W>vQh_NMToTc}`LjkjYmMhoJ9O$ha>S-K>2d|Q_{YD(Zk zf*)+S+4M0G{Y6{k#eM;_Fc8h5fuZe^`sJukYuTNF^OALAP2F0ejW&!-k*R7Vj}?F)O)g!NAV{4WNekin(kwm|=jo?}F7j5lSOMqB-~~An zq798_&IhXEhC*+Cfv*|gR*Cn@N4xn7V?gks8AFZ&N%=>G-nfEUiB^9jy6f-grm;h` zw4;=BUXbyU-YxXT7e#}iWaIW5sbXLZpTGo72n4n1@1f#R(8bZqt>{VxU;_q3xOf(h zjqrwEEY{z2*R;mkwbeN>fAZvLFcWJ>TbuMiM=$ctMczvYKF=TMbqm11agbNevj%y^ zxVC7Jchx{dp%GBOJ}`N%1@nvQ6E!OKG3EkFv8^uR#&5F^U?*hX&9rbdKzy)w)i4Ya zd0pIUTSnvMgS}g)Wi=vTX~AuE{jI*f?#A#A_aEY|>{8-PArTr3xsfF+8$GCBbcffi8LFDAr4%+Lq@lqXG zyU)Qx;4eGTsWmz7MXN^G?VeA#Plyw`>g(EoqsiACkK#ipbmA0P$>22M1P`HI?&omQ zhF5uc&u?LXz@oYi4GRg(H4di6(@MNy#XZNdH;N08+(GxC&v%q~6GhEAn(!}6yo+x% z@?e$6yz3TCn`Q@!T)Hs(lA{I|ru&wP%*(zdAD>d{4e!W)6KjibH&UFZApO?b3!Ur< z5H26S5aE~7xz-{y7U+=?QRN}GqYOO`ryxg`G*}EU9F0cTW)u@hQaK+k^-9KT3mp`Y z>?)oL;2we0A#&%}OT9DPSxLi2#6;>eOJ^JxWpuk7E-3Ss_Pxz-!2j9_iKtQK9%`1j zR1%p>GI7N>YHJtHTf)C9^EUF43}C3=`-n;^kd3l_tf-;vvniI8dkZIot{zq!MDF1k t6?&hqIZ7pc%()f3t=xOODx%2}n1=?zIDSi$nN^~_K{@RfMuTZ8_J3#+T+ILg delta 31038 zcmaL92Y6J)`@enWgc^G9umJ*u-jUv$^bP{ThAbhFWMPxgL>I&^2)e?E6&1@@1(c`} zQ3MqQ6#+X%L{Y3L*bB;gfA*YU^ym9O*EP9kp6Sm#^UR#H;_*L9|G2GG^myfB>l~g> z6C9^5?9sq+#uRs)X}u(MoQ>lgrz*S`)`U;P`tSg32)~6bV5RYnQw{cnmEbto1cqR3 zxC)km4?)$>hXKclI&TrFf#3&E;FOu*rCY+L$Ok}moC$lvt6@p_608VchxOnws1ARJ z&0x|*j~B!4q;p_rxD^hBr(iYucUn$zoJ0iuU>!IDc7qwP9oz(4!uMcnm@wIKD#P}$ zDjWzK!ApEz0h3AJ2c?<4P#XCWs$PjHj*|jw!CLh1^d}+}O^5B_V%Qcw3f1v3s2P>M z#A~oUR0o$rL@N1|gXf@qyU>;P%Pr!@dXRtf0f2pUzOQ7WIpxS*CY9hyAEm(X8`e$-Z zgBgyK3YWmzDgc|qUtkH?aHeMyDX<6WzEB-s;d2}8M*0+N1CxT-4IBfdf%UK>+y|wx zzx;HI)Tr0sOnUD`#$8aVd)rT!ndNoV7uG6U4pJOowlZm6Yv z&F3Fb18N!ajC)3uh#I;UHiWyNDx8EGNY&YnGXxHY7sGW>9iD*7uboaF91E4c2dabj z;YgS`$J5Ld*qijNuorv>_Jq+Y8J=Ja)b>~lrQ%ni8Z0)~8(2t)oqa^q(J`nst(xUH)!`7IGhiRm3!yYs0IR_> zK1*afP8HI1p=_tEpB@Gqlb!)>hbNQ*npkl=M*-#y>@#S|wmEQ^b z!H-}!*ziuaCY%n-!RVdnUq-STff_3Cc>)e0UHUH64#z?bXcG*;gRmt$3)Nu#yS+1_ z57Y#vKpELGSP!m&4d7;24DR>SZ{3alRpEOCauC(-@dk1+ltyx319$_JaXtd&LXSgr za0bel5;l4r)r3lShIQaDsDY=$b};61kI!GCMAUK0y`BTQ6!sx~E1U-3g%`v2_jv=m z9BN4(gw5e=P#yf_GwFVBz$2hEngwNB>;3dAunFn!U~3qyzR7XQ5*Y~l!?92*Uk|6i zFQ8`L?*Y$v7DB0h6V!|j!9FnIL2rK#fNFRp)Y5K)o#8R4cB?$(-7`Xv`cdafBK665 z63RN?hSG?6*waX7IFxiIRQ}UY9_~|E3D)?ZxBpY%MWlPeWVjGkfOo?3@G;mJ?tmrX z30PYD{|h2ov+toCQOQTVj(bC;^I&hd8EWRIp&U@{M?F{F7HSECP?}l|d%)dL<^O`+ zVT;GSiKRm=$(?Wv{X1_E(cx2nv$v+>p$bG{3Ahz%AWy@7@LMnixC;f#P)T@Jga>7!EuYxE3G2%UVf!*OyccaZs)4adXU@KRV4E`joJw?NszV^Fs79F)=i z1U0~>Z=(MIk%4b|j$}5}h_8bU;H^+2e-bu>uR*Qx4^T_e^nmBdW?8pz`F1-YzTjb0a)vhXDi*H1{Q+q;3ilR zZiaF|J7G(B1WF?%-|}`%5>&g<4n(vjqoFEdBQ{{My* z)Ayh{{0SC=mEZN&v<9SMrxUCKhrnuZ8q|OzFaTG_$@*_0A|pBgE5O501NsuG!Y@$9 zQu#fv;kHoe{!p3-!b)%{)Do?N(%4q00lW%T?kH4yKf-FT!u#~2{hzD|>;R?WzJ7W% z)C@0$>hLmOz5%Mkhy48QP)qk7)BwKsS?vR_-HV_)9t7nXgHSehEsScdw-Bib--hb& z8(0IDKI|Dy5|mMOhw5lJR0DJT^ctU!LbdZMRQ(fB8u%4z0%ebQp0PP>Pdfbw>#w!C z9YHO)8O9rcs&E2!hJV4*1;l&WhT^Vr7cK%Y~O zq5obKSb#v*`Z&}8-h$fyUqcyNnGZcShblJ|s@y!Nj;@0J;6~UDo`kZc`p3Q9&>CvM z-Jy2XOsIig7bT*#ya#IAJOO3xJ7HD$B~-z`U{_e}BL)XYLG6ZyC%lFSL8a%xR&b5a z=V1%dUqjhejgP%Er3qBK(N;ui6Bz)t6f>YaU<7IgS3s%uCK!MZL#_Qjs2QE{)73ul z-UE8TUdV5Rs{a~Hf=8eRb`Hv6H9r|&lBhF|h&s-I_2DvD58mN(JKRh9eJG7={M2jk zDJbK5A8L)ihRQdec}q|owj@0U_JvnKO>`GjKSyClo&UcR(Gs*d<;}b=lxjvmRY-%4 zVH7rjn_xrux-b7021r-=++#+@--fxZh<=->H@hzeHy0>gmq;AnUY zly#qka!@})EyZ6@+pFf6o~GJD8RJN(0j5LQ&`nU9+3xcIlr4M)o5D(8F{xrix)SLD zd%@1|GN=Z(L9OBIP#QW4JHgXXnrZa4ccba$GY9rW{xBQ}PeBd1 zhBDe;pe9iDC(pP#Kw19`*Z^JyJHbtU`Uq6{-#td1T0eWf{UTVAjC81u7DFw~dKllg zuo~&3P)l(ZR)?j3@l+mwa>bo|j)59Lme18tOSKtlfQMiW?f;*NXxo(k)!VQn>W*jupRj$p=PukYQXnEX=WePHai8&!1BL)OHdn1qbaa6{X1icNafc< zjd&0220w!>VBil=GsB^bXgcfySHk9S2UNLJ@M2i`oTt(0uoCH2up_)1s@&U913C|* zrHPdJ)AP;MU=7m!p^RrL90{|btowPWCE5$?!NXAHeu3&J@h@*l>cR@7JHPrJ8c*y^5V-XVR0PI=l&L%^!nO?Mr_8Yp8}@$Hd!9f>lWm zfNFONYyk71+F$4A?{uOjzOCN&1qsH)w_i=DUC|zvf`edtI0^>fl~5ht4`nMaLe20~ zD4VG0dgc4UPNegoRQ@O|0SjO&xHC#b`|=wo75@Rt!4e7Hz^XzuH~^}ng-|oU&F3yC zzwiar0BaUAaoZRMHK3I+0JlQ5a}a75xWzq9MVk;&!J$yQAP=g*olw@i3$}(|`SMyN zJXQ9DGQR0h6SxjaV;0IL9)((}olp~c7s_@{!dmc0i0$G3OL}Wn6Ut~>`RSg1dMwm{ zQlTnd<8vddP5N1=fxqkX91M_dRLaxX0H^`Yh8pM+SQ1_bt7!kPB_iwH zUV!Ts)Y6=SDtFe;PblpTs3KJP=1>~z0%d$bsE!vxY2tb)JhIKxaZ3VHS+a zDszcwjh6eo3Cim4gj$jZd_D!$@gArSK7g9pX{Z4fE9>owDo_Jz4<#Q0Rc{iM&CG>z z!RyMJXnb2di$IR&6{s~m4#&aYpgi7)a^3)QpvtZAxdCbbPe9FVFVuwIg)-`op)NS( z${VLRtPHhnYeE@gm-6g?8N(0+b>V0zm1aR1-5pR3zW`<3Z$N3}1k?=9K&i4?1+U|} zP?~H8HRH}uni%Tm&w$#-^I%W7I!a^!k=LO*s#wwMpdM7Z6_g6Q!J2R=)QnT18eZaa zjn4<5)_e!l4EOu#<52CKfzrr%s52y5tdci?9&jLn6;Mm?DpZ9}pk{m)N+YJSr>SJ9 zne_9S29tZk6~_M4f70#OVm7;&D(F(xH}SDO7`3!ai^f z)IbkHby&Tsx9z$?rPH7~z77W9gHXo$s?TFk133$8YX6t1<{3p}DA(E_Y9G&ot>HQ- z2lF!2A@Vg;2W6^zs!oAglI~FQu~7BrL)E(-s>9t-?Hz^k1Bo?AYyWp3B9*5?orae~ zt=&c_)jt8X_Pe1vI^xUELJio|^k$d>HGp1F<)=Z_&x0y=HPrUo3^lM1U{oEQC!(2E ztmSpk7OJ7aK0{EuVLLfODTpJRRb45%5-gVNw-P_A`7RQcCo+)?>F?bEI6$!pYQ z|7)Zz5l9n#pweSt0t`WU!VIXHL|}YPVN24xVE}&X=U1p_;;-plpa!x4wucYGp71c# zz-rVt&IrRrG)hDrMjCjY?HVYR-VJ5VJ7F9636$rm9Pm`v4r(AHpfs2ZwdNb3>TmP& z--1&0Z%~e{T9RjD{h`{8&L$EdvL23t1+XM6+0a{p3Q!#-!%lEG><_Pm7r|HHM0g$! zf)g7VXFR+MY9QZ3dBn<%yZ2kU^keU?5*WMsFBZvQvEWh8Ek?Y z`CC5SCf@dH?{hem%4b6jU;|V;+hHI0E^G&@Hx;A!ej@5%Db%5HAC&6fgl*yXP}`3vp8t4wF?RyGNfyG)GCkQWv+9kW79Mn-5 zEkUGsYj5Ob;TY15p;WjKYH9ul)$u1#18mX8#DA{OfU=1-z zPO)~(81{tHV6+|kUk$vBK&ty4YK<$mH_l+#2lj^7!On26&-1Vc>CPQI=JKgPLi*&fXeMg-UOQYWOsq29vsY zGra~5SHa2(Vjk`JYcV^HnX>fxQ9Q+;N`uE(89Lb|MwA518>8I@I$DA&Ju6mra+B+Ae5_}2X!-A3(LWKpc>o^)!{R+ zCOieDne$K@slL=}zXg<^83`L{|1TvHfOq=^Uhw$|)If?~=ADAAp$6Cu>LM{6Y8$PB zvVlWTj;s7KZ(!}A_IV$ucINtw!C|DIgHd^?QkQ!pp9TY@Z-6@89)%6y2T-2ySEvD` zT;a`VIMksOgi`%-SPb3=Rqr9F@~^@^@GB@AYr(FQhGs|E|0)t@uuJ_uB4kR)I!E&epoPauBtKHyP??9*}nFi&Ua-med4OWIHU?uniYyykl=)DoO zgr!J#fLgL1Py?L=wG=l)4mJM!A0k?#a;v-%kB4$RE1^8r2B;1XKn?IusI#H{YHy%R z;b_v2K(+G+l#%tj$y?*gp?1e%sHLpF#v4FC82|l$DG{yJRZ!b$2OJKawcdtOu*|6N2FkaHi@{(TT?e?AHsxbrepg*ScqNvMv_!78xE zQ=UU<0kvd{plo3?lr6mjwOfik?G2;@lz-{{H2Yr-Wg^fTUkiu9r=Zr*6nGVSKy9lb zP%bqBWee9sT~v1ZJPR9>Zv2dABSWDEax?4$pMe_4Z%_kow%vC$J+^xznhI6nIw&jM z3N@q8p;TAzS?`6TFRV*?4AeHwhH_Y2pft4~YC@m*@`^jWC2IqglUJK;`*Fn`UfU<%2pfq|0a;Q3Gp7%7E0*8?91myv* zfU=$FE+QJy>rkpW4`p1fcY2;~5|m9Wf&sV;$~NwT>hNhO%^ZZ9(T{$*@eAGrhCta+ zHk4)-!wPUU#8E|^yNGB8+o2rF2T)7!HPj3%@A7s*N2mb~hw^ZjLFHR0m%JTHV~73x z^H7ed&TfybpxW>4r^mvUI{(w+5sU=N)9r*>iua%z{0eG76<_phq>Ilqs19z1DtAAW zG46x1opVqc>G+bj6lqXPcqI(L2VhATmfp9?jCTlcd6Wjxyvh#x}jbF zp){}(Y9Je+jCr@u=odtOK~Uk4SE1xv-u|x-wf2MkbQ%nhUJb{=EwDRu-}Y`ay`b{f zLapr+us3`UYNplS@oqxRp$66!vP4m5G!czxE|lZB8Oj!(g)*|^FbNiW*JBeX`4A|p z&W2L;DxZ%*EyWv9n)w*2{j%>FXC~|bbzis@#()3&jEIiMKcN~d{k}JormzF)Ay6GI zgW4_kLGAAoP>!hP2i^cWLfsw5L)BXid5>{+!+~%goB%5v_KY(GD@GASiOBJ+g(Km^ zFaUpn>agY!&u34B<4NBJ$H3Dt0DB+x1~?N=Cw&c+i~ST0HB;4dhL)%(;_H&bORBcO7B3q%wM2XT